From 0b2be39e6c61333a73d5d87feb06f705573839de Mon Sep 17 00:00:00 2001 From: Pavel Sountsov Date: Sun, 29 Dec 2024 17:31:50 -0800 Subject: [PATCH] Remove tabs and trailing spaces from text files. --- CMakeLists.txt | 4 +- README.txt | 2 +- README_android.txt | 2 +- README_macosx.txt | 4 +- README_pkgconfig.txt | 2 +- addons/CMakeLists.txt | 6 +- addons/image/CMakeLists.txt | 4 +- addons/native_dialog/CMakeLists.txt | 2 +- android/CMakeLists.txt | 2 +- demos/shooter/CMakeLists.txt | 2 +- demos/skater/data/level.txt | 30704 +++++++++++++------------- demos/skater/data/readme.txt | 22 +- demos/skater/data/thanks.txt | 54 +- demos/speed/29.txt | 48 +- demos/speed/speed.txt | 60 +- docs/scripts/trex.txt | 158 +- docs/src/changes-5.0.txt | 8 +- docs/src/changes-5.1.txt | 28 +- docs/src/refman/audio.txt | 10 +- docs/src/refman/color.txt | 4 +- docs/src/refman/config.txt | 16 +- docs/src/refman/direct3d.txt | 8 +- docs/src/refman/file.txt | 6 +- docs/src/refman/font.txt | 74 +- docs/src/refman/graphics.txt | 54 +- docs/src/refman/haptic.txt | 86 +- docs/src/refman/image.txt | 2 +- docs/src/refman/joystick.txt | 8 +- docs/src/refman/opengl.txt | 2 +- docs/src/refman/platform.txt | 4 +- docs/src/refman/shader.txt | 6 +- docs/src/refman/state.txt | 6 +- docs/src/refman/system.txt | 60 +- docs/src/refman/threads.txt | 2 +- docs/src/refman/transformations.txt | 6 +- python/readme.txt | 16 +- src/misc/bstrlib.txt | 2150 +- tests/test_driver.txt | 12 +- tools/x11/xkeymap.txt | 2 +- 39 files changed, 16823 insertions(+), 16823 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7f02b72bf..7a32d5696f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -683,7 +683,7 @@ if(WANT_OPENGL) endif() if(NOT IPHONE) - include_directories(SYSTEM ${OPENGLES_INCLUDE_DIR}) + include_directories(SYSTEM ${OPENGLES_INCLUDE_DIR}) endif() else(OPENGLES2_FOUND) if(GL_BUILD_TYPE MATCHES "auto") @@ -714,7 +714,7 @@ if(WANT_OPENGL) set(OPENGL_SUMMARY "- OpenGL: ES 1.1") set(OPENGL_LIBRARIES ${OPENGLES1_LIBRARIES}) if(NOT IPHONE) - include_directories(SYSTEM ${OPENGLES1_INCLUDE_DIR}) + include_directories(SYSTEM ${OPENGLES1_INCLUDE_DIR}) endif() endif(OPENGLES1_FOUND) diff --git a/README.txt b/README.txt index b384c60ae8..817f85f479 100644 --- a/README.txt +++ b/README.txt @@ -85,7 +85,7 @@ Linux users likely have all the dependencies already, except PhysicsFS and DUMB. If your distribution uses separate development packages, they will need to be installed. The packages are probably named *-dev or *-devel. -These are the dependencies required for the addons: +These are the dependencies required for the addons: - libpng and zlib, for PNG image support (Unix and older MinGW only) Home page: diff --git a/README_android.txt b/README_android.txt index 506009f86f..b21d3b1773 100644 --- a/README_android.txt +++ b/README_android.txt @@ -19,7 +19,7 @@ Install the SDK The most simple way is to install Android Studio which by default will -place a copy of the SDK into ~/Android/Sdk. +place a copy of the SDK into ~/Android/Sdk. Alternatively you can also download the command-line SDK tools. In that case you will have to accept the licenses, for example like this: diff --git a/README_macosx.txt b/README_macosx.txt index 66c823dec5..52c8c81c3d 100644 --- a/README_macosx.txt +++ b/README_macosx.txt @@ -2,7 +2,7 @@ Mac OS X-specific notes ======================= Building Allegro on Mac OS X is the same as on other Unix-like operating systems. -See README_make.txt. +See README_make.txt. Building with Xcode ------------------- @@ -17,7 +17,7 @@ Using the Clang compiler (OS X 10.6+) ------------------------------------- It is possible to build Allegro using the Clang compiler that ships with OS -X 10.6 (Snow Leopard). Clang is installed in /Developer/usr/bin. +X 10.6 (Snow Leopard). Clang is installed in /Developer/usr/bin. To use it, you have to tell Cmake to use Clang instead of gcc. From the terminal, this is most easily accomplished by the commands diff --git a/README_pkgconfig.txt b/README_pkgconfig.txt index e614673009..ebfaea9774 100644 --- a/README_pkgconfig.txt +++ b/README_pkgconfig.txt @@ -46,7 +46,7 @@ shell. For example, a very basic Makefile might look like this: ALLEGRO_FLAGS := $(shell pkg-config --cflags --libs $(ALLEGRO_LIBRARIES)) mygame: mygame.c - $(CC) -o $@ $^ $(ALLEGRO_FLAGS) + $(CC) -o $@ $^ $(ALLEGRO_FLAGS) Historical note diff --git a/addons/CMakeLists.txt b/addons/CMakeLists.txt index 726bd8b19b..8db0428a83 100644 --- a/addons/CMakeLists.txt +++ b/addons/CMakeLists.txt @@ -81,7 +81,7 @@ if(SUPPORT_FONT AND WANT_TTF) option(FREETYPE_BZIP2 "Enable if FreeType static library needs bzip2 linked in." off) option(FREETYPE_PNG "Enable if FreeType static library needs png linked in." off) option(FREETYPE_HARFBUZZ "Enable if FreeType static library needs harfbuzz linked in." off) - + if(FREETYPE_FOUND) set(FREETYPE_TEST_SOURCE " #include @@ -117,7 +117,7 @@ if(SUPPORT_FONT AND WANT_TTF) if(FREETYPE_PNG) find_package(PNG) endif() - + if (FREETYPE_HARFBUZZ) find_package(HarfBuzz) endif() @@ -135,7 +135,7 @@ if(SUPPORT_FONT AND WANT_TTF) if(FREETYPE_PNG AND PNG_FOUND) list(APPEND FREETYPE_STATIC_LIBRARIES "${PNG_LIBRARIES}") endif() - + if (FREETYPE_HARFBUZZ AND HARFBUZZ_FOUND) # there's a circular dependency between Harfbuzz and Freetype, so one of them has to be # repeated to ensure proper static linking order diff --git a/addons/image/CMakeLists.txt b/addons/image/CMakeLists.txt index ccfd54f07c..124818d96f 100644 --- a/addons/image/CMakeLists.txt +++ b/addons/image/CMakeLists.txt @@ -25,7 +25,7 @@ endfunction() # ALLEGRO_CFG_IIO_SUPPORT_* are the supported formats. # First look for native libraries and mark any supported image -# type as found, so that the associated third party libraries +# type as found, so that the associated third party libraries # don't need to be used. if(WANT_NATIVE_IMAGE_LOADER) @@ -66,7 +66,7 @@ if(WANT_NATIVE_IMAGE_LOADER) endif(MINGW) list(APPEND IMAGE_DEFINES ${GDIPLUS_DEFINITIONS}) list(APPEND IMAGE_INCLUDE_DIRECTORIES ${GDIPLUS_INCLUDE_DIR}) - include_directories(SYSTEM ${GDIPLUS_INCLUDE_DIR}) + include_directories(SYSTEM ${GDIPLUS_INCLUDE_DIR}) else(SUPPORT_GDIPLUS) message("WARNING: cannot use GDI+. Will try other libraries.") endif(SUPPORT_GDIPLUS) diff --git a/addons/native_dialog/CMakeLists.txt b/addons/native_dialog/CMakeLists.txt index 5726ae70bd..79a3842ca6 100644 --- a/addons/native_dialog/CMakeLists.txt +++ b/addons/native_dialog/CMakeLists.txt @@ -65,7 +65,7 @@ if(SUPPORT_NATIVE_DIALOG) allegro5/internal/aintern_native_dialog_cfg.h.cmake ${PROJECT_BINARY_DIR}/include/allegro5/internal/aintern_native_dialog_cfg.h ) - + include_directories(SYSTEM ${NATIVE_DIALOG_INCLUDE_DIRECTORIES}) # Note: allegro_dialog NOT allegro_native_dialog. diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index f2b9ae5342..fd625b318d 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -8,7 +8,7 @@ else() set(ASSEMBLE assembleRelease) endif() set(ALLEGRO_AAR ${LIBRARY_OUTPUT_PATH}/${AAR_NAME}) -set(ALLEGRO_AAR ${ALLEGRO_AAR} PARENT_SCOPE) +set(ALLEGRO_AAR ${ALLEGRO_AAR} PARENT_SCOPE) if (NOT EXISTS "$ENV{ANDROID_HOME}") set(ENV{ANDROID_HOME} "$ENV{HOME}/Android/Sdk") diff --git a/demos/shooter/CMakeLists.txt b/demos/shooter/CMakeLists.txt index 8c6e1a22b6..a4d4adbf55 100644 --- a/demos/shooter/CMakeLists.txt +++ b/demos/shooter/CMakeLists.txt @@ -37,7 +37,7 @@ file(RENAME ${CMAKE_BINARY_DIR}/demos/shooter/data/intro_music.ogg file(RENAME ${CMAKE_BINARY_DIR}/demos/shooter/data/menu_music.ogg ${CMAKE_BINARY_DIR}/demos/shooter/data/TITLE_MUSIC.ogg) - + file(GLOB SHOOTER_DEMO_DATA data/*) set(SHOOTER_DATA diff --git a/demos/skater/data/level.txt b/demos/skater/data/level.txt index c667957444..6164fcb88e 100644 --- a/demos/skater/data/level.txt +++ b/demos/skater/data/level.txt @@ -4,15376 +4,15376 @@ # Materials { - {"soil", "grass", 1.000000} # 0 "Hill" - {"ice", "icetip", 0.131010} # 1 "Ice" - {"soil", "icetip", 0.400275} # 2 "IcyGrass" - {"soil", "grass", 2.000000} # 3 "Platform" + {"soil", "grass", 1.000000} # 0 "Hill" + {"ice", "icetip", 0.131010} # 1 "Ice" + {"soil", "icetip", 0.400275} # 2 "IcyGrass" + {"soil", "grass", 2.000000} # 3 "Platform" } # Vertices { - # Mesh "Curve" - {-7976, -4842} # 0 - {-7896, -4837} # 1 - {-7833, -4848} # 2 - {-7820, -4855} # 3 - {-7809, -4860} # 4 - {-7798, -4863} # 5 - {-7785, -4864} # 6 - {-7775, -4861} # 7 - {-7764, -4856} # 8 - {-7752, -4852} # 9 - {-7739, -4847} # 10 - {-7726, -4842} # 11 - {-7713, -4838} # 12 - {-7700, -4833} # 13 - {-7686, -4829} # 14 - {-7671, -4825} # 15 - {-7657, -4820} # 16 - {-7642, -4816} # 17 - {-7626, -4812} # 18 - {-7610, -4807} # 19 - {-7594, -4803} # 20 - {-7578, -4799} # 21 - {-7561, -4795} # 22 - {-7544, -4791} # 23 - {-7526, -4787} # 24 - {-7508, -4783} # 25 - {-7490, -4780} # 26 - {-7471, -4776} # 27 - {-7452, -4772} # 28 - {-7432, -4769} # 29 - {-7412, -4765} # 30 - {-7392, -4762} # 31 - {-7372, -4758} # 32 - {-7351, -4755} # 33 - {-7329, -4752} # 34 - {-7308, -4749} # 35 - {-7286, -4746} # 36 - {-7263, -4743} # 37 - {-7240, -4740} # 38 - {-7208, -4730} # 39 - {-7950, -4927} # 40 - {-7831, -4904} # 41 - {-7821, -4899} # 42 - {-7811, -4895} # 43 - {-7801, -4890} # 44 - {-7790, -4885} # 45 - {-7779, -4881} # 46 - {-7768, -4876} # 47 - {-7756, -4871} # 48 - {-7744, -4867} # 49 - {-7732, -4862} # 50 - {-7719, -4858} # 51 - {-7706, -4853} # 52 - {-7692, -4849} # 53 - {-7678, -4844} # 54 - {-7664, -4840} # 55 - {-7649, -4835} # 56 - {-7634, -4831} # 57 - {-7619, -4827} # 58 - {-7603, -4823} # 59 - {-7587, -4818} # 60 - {-7570, -4814} # 61 - {-7553, -4810} # 62 - {-7536, -4806} # 63 - {-7518, -4802} # 64 - {-7500, -4799} # 65 - {-7482, -4795} # 66 - {-7463, -4791} # 67 - {-7444, -4787} # 68 - {-7425, -4784} # 69 - {-7405, -4780} # 70 - {-7385, -4777} # 71 - {-7364, -4774} # 72 - {-7343, -4770} # 73 - {-7322, -4767} # 74 - {-7300, -4764} # 75 - {-7278, -4761} # 76 - {-7256, -4758} # 77 - {-7233, -4755} # 78 - {-7221, -4751} # 79 - # Mesh "Curve.001" - {-9671, -4205} # 80 - {-9804, -4116} # 81 - {7868, -869} # 82 - {-9920, -4028} # 83 - {6579, -1099} # 84 - {-9986, -3965} # 85 - {-8177, -3372} # 86 - {-10004, -3934} # 87 - {-10008, -3916} # 88 - {-10003, -3902} # 89 - {-9987, -3888} # 90 - {3821, -1480} # 91 - {-9942, -3877} # 92 - {7135, -1287} # 93 - {-9856, -3873} # 94 - {-5276, -2731} # 95 - {-7939, -3522} # 96 - {942, -1796} # 97 - {8242, -252} # 98 - {-9618, -3881} # 99 - {5428, -1221} # 100 - {5153, -952} # 101 - {89, -2120} # 102 - {-9517, -3880} # 103 - {522, -2130} # 104 - {-9446, -3874} # 105 - {-9668, -3811} # 106 - {-9384, -3863} # 107 - {-2265, -1535} # 108 - {-9332, -3846} # 109 - {6627, -1078} # 110 - {-9292, -3823} # 111 - {5889, -1772} # 112 - {-9269, -3801} # 113 - {-9251, -3776} # 114 - {7481, -1568} # 115 - {-9237, -3737} # 116 - {6947, -1134} # 117 - {-9232, -3694} # 118 - {9111, -54} # 119 - {-9236, -3626} # 120 - {2408, -1713} # 121 - {4219, -1683} # 122 - {-838, -1565} # 123 - {-9255, -3527} # 124 - {-5511, -2724} # 125 - {6825, -973} # 126 - {8425, -14} # 127 - {-9295, -3368} # 128 - {3222, -1395} # 129 - {5864, -1650} # 130 - {3406, -1141} # 131 - {3797, -1358} # 132 - {-9316, -3266} # 133 - {-8574, -2991} # 134 - {5703, -1686} # 135 - {-10232, -3837} # 136 - {-9324, -3172} # 137 - {-4825, -3035} # 138 - {3370, -1268} # 139 - {-5750, -2850} # 140 - {-9317, -3113} # 141 - {-9411, -3217} # 142 - {-9307, -3076} # 143 - {-10234, -3874} # 144 - {-9286, -3036} # 145 - {9608, -307} # 146 - {5560, -1505} # 147 - {-9257, -3004} # 148 - {5141, -1065} # 149 - {-9228, -2984} # 150 - {5927, -1764} # 151 - {-9193, -2968} # 152 - {5281, -1035} # 153 - {-9154, -2957} # 154 - {-8868, -2784} # 155 - {-9111, -2950} # 156 - {9820, -716} # 157 - {-9041, -2949} # 158 - {-5823, -2889} # 159 - {-155, -1985} # 160 - {7446, -1554} # 161 - {-8937, -2964} # 162 - {2705, -1820} # 163 - {7959, -471} # 164 - {-2144, -1463} # 165 - {-8827, -2995} # 166 - {9645, -367} # 167 - {-6542, -2744} # 168 - {9779, -274} # 169 - {-8713, -3030} # 170 - {-10198, -3816} # 171 - {9585, -68} # 172 - {9834, -638} # 173 - {-8590, -3090} # 174 - {3241, -1214} # 175 - {-2722, -1883} # 176 - {1580, -1461} # 177 - {-8462, -3173} # 178 - {5965, -1748} # 179 - {1647, -1459} # 180 - {4873, -1240} # 181 - {8188, -302} # 182 - {7822, -775} # 183 - {-8065, -3484} # 184 - {-8253, -3383} # 185 - {7410, -1430} # 186 - {797, -1928} # 187 - {5757, -1731} # 188 - {8655, -62} # 189 - {-8156, -3477} # 190 - {8351, -52} # 191 - {1417, -1493} # 192 - {-8065, -3561} # 193 - {4195, -1783} # 194 - {5902, -1642} # 195 - {-3806, -2563} # 196 - {-7946, -3632} # 197 - {4802, -1338} # 198 - {-7046, -2617} # 199 - {-7746, -3506} # 200 - {-7865, -3673} # 201 - {7136, -1184} # 202 - {-7785, -3704} # 203 - {9299, -100} # 204 - {-7723, -3710} # 205 - {-9143, -2731} # 206 - {-7674, -3702} # 207 - {-5460, -2712} # 208 - {-7614, -3684} # 209 - {5770, -1631} # 210 - {3315, -1293} # 211 - {-5644, -2786} # 212 - {-7550, -3634} # 213 - {-3714, -2492} # 214 - {6461, -1041} # 215 - {4556, -1681} # 216 - {-7482, -3544} # 217 - {-690, -1647} # 218 - {7045, -1207} # 219 - {9545, -239} # 220 - {-7414, -3385} # 221 - {9766, -886} # 222 - {-3618, -2428} # 223 - {3324, -1154} # 224 - {9471, -182} # 225 - {-7339, -3129} # 226 - {9802, -324} # 227 - {-10219, -3825} # 228 - {3497, -1273} # 229 - {8428, -134} # 230 - {-7261, -2977} # 231 - {2525, -1765} # 232 - {4307, -1696} # 233 - {-6109, -2931} # 234 - {-7187, -2877} # 235 - {-5195, -2769} # 236 - {4342, -1816} # 237 - {-4444, -3126} # 238 - {-7118, -2819} # 239 - {-6295, -2871} # 240 - {-7073, -2792} # 241 - {-10238, -3853} # 242 - {-7026, -2768} # 243 - {8921, -39} # 244 - {-6980, -2758} # 245 - {-9332, -2771} # 246 - {-6935, -2757} # 247 - {-9366, -2795} # 248 - {-6886, -2753} # 249 - {-8996, -2748} # 250 - {-6837, -2755} # 251 - {-7990, -3511} # 252 - {-6786, -2762} # 253 - {-6955, -2612} # 254 - {-6712, -2780} # 255 - {-4560, -3143} # 256 - {4310, -1818} # 257 - {3567, -1301} # 258 - {-6611, -2819} # 259 - {-5113, -2820} # 260 - {9388, -136} # 261 - {6675, -1066} # 262 - {-6517, -2865} # 263 - {4971, -992} # 264 - {-991, -1491} # 265 - {9493, -17} # 266 - {-6368, -2944} # 267 - {7639, -1504} # 268 - {6602, -957} # 269 - {4008, -1546} # 270 - {5190, -967} # 271 - {-6271, -2992} # 272 - {3279, -1180} # 273 - {-4482, -3137} # 274 - {1817, -1476} # 275 - {-6176, -3030} # 276 - {-6636, -2697} # 277 - {5305, -1157} # 278 - {-7128, -2663} # 279 - {-6085, -3053} # 280 - {-3206, -2202} # 281 - {4261, -1810} # 282 - {-4004, -2745} # 283 - {-6019, -3059} # 284 - {-7699, -3485} # 285 - {-5956, -3057} # 286 - {-4600, -3138} # 287 - {9394, 23} # 288 - {-4139, -2866} # 289 - {-5875, -3040} # 290 - {6153, -1415} # 291 - {9798, -799} # 292 - {-1300, -1377} # 293 - {-5798, -3010} # 294 - {5536, -1384} # 295 - {6440, -1204} # 296 - {-9337, -3595} # 297 - {-5725, -2971} # 298 - {4399, -1670} # 299 - {-5034, -2877} # 300 - {5604, -1480} # 301 - {-5899, -2919} # 302 - {-5620, -2907} # 303 - {7544, -1573} # 304 - {-10219, -3899} # 305 - {4531, -1560} # 306 - {-5552, -2871} # 307 - {2093, -1564} # 308 - {-9454, -3772} # 309 - {1148, -1628} # 310 - {-5480, -2843} # 311 - {-6044, -2938} # 312 - {4622, -1599} # 313 - {9701, -629} # 314 - {-5406, -2830} # 315 - {-4742, -3086} # 316 - {-9292, -2753} # 317 - {4170, -1662} # 318 - {-5330, -2833} # 319 - {-5355, -2711} # 320 - {3717, -1395} # 321 - {9290, 53} # 322 - {-5252, -2853} # 323 - {7515, -1472} # 324 - {4424, -1791} # 325 - {-3894, -2639} # 326 - {-5171, -2890} # 327 - {5452, -1343} # 328 - {5678, -1564} # 329 - {-9364, -3402} # 330 - {-5088, -2941} # 331 - {2751, -1824} # 332 - {7992, -576} # 333 - {3373, -1142} # 334 - {-5006, -3001} # 335 - {5732, -1609} # 336 - {-2017, -1404} # 337 - {8049, -478} # 338 - {7682, -1328} # 339 - {-4881, -3098} # 340 - {9185, 74} # 341 - {-14, -2068} # 342 - {-5980, -2936} # 343 - {-4801, -3156} # 344 - {4489, -1746} # 345 - {-9442, -2968} # 346 - {7482, -1465} # 347 - {-4717, -3208} # 348 - {345, -2178} # 349 - {-6737, -2658} # 350 - {-1453, -1345} # 351 - {-4635, -3245} # 352 - {8499, -104} # 353 - {1715, -1462} # 354 - {8678, 66} # 355 - {-4575, -3260} # 356 - {401, -2171} # 357 - {-4536, -3264} # 358 - {8003, -397} # 359 - {-4496, -3264} # 360 - {-10193, -3930} # 361 - {-4457, -3259} # 362 - {-9436, -2921} # 363 - {-4419, -3248} # 364 - {-6800, -2637} # 365 - {-4363, -3224} # 366 - {2879, -1802} # 367 - {7641, -1401} # 368 - {7272, -1315} # 369 - {-4288, -3175} # 370 - {-9344, -3646} # 371 - {5379, -1241} # 372 - {612, -2077} # 373 - {-4215, -3111} # 374 - {2833, -1818} # 375 - {8362, -168} # 376 - {-496, -1764} # 377 - {-4141, -3037} # 378 - {8050, -327} # 379 - {6003, -1724} # 380 - {8588, 45} # 381 - {7735, -1291} # 382 - {-3975, -2862} # 383 - {-9360, -3691} # 384 - {5178, -1073} # 385 - {8102, -262} # 386 - {9683, -764} # 387 - {6017, -1570} # 388 - {703, -2009} # 389 - {5068, -1074} # 390 - {-3870, -2760} # 391 - {5126, -945} # 392 - {5629, -1601} # 393 - {5842, -1769} # 394 - {-3782, -2684} # 395 - {3692, -1274} # 396 - {8740, -48} # 397 - {3450, -1146} # 398 - {-3689, -2614} # 399 - {4033, -1668} # 400 - {-10136, -3983} # 401 - {3562, -1190} # 402 - {-3593, -2549} # 403 - {8157, -201} # 404 - {9695, -695} # 405 - {4254, -1692} # 406 - {-3461, -2471} # 407 - {4919, -1037} # 408 - {-9586, -3805} # 409 - {6554, -977} # 410 - {457, -2156} # 411 - {7865, -666} # 412 - {3617, -1221} # 413 - {6763, -960} # 414 - {-3182, -2324} # 415 - {-9085, -2735} # 416 - {9646, -114} # 417 - {9820, -377} # 418 - {-9407, -3745} # 419 - {4944, -1159} # 420 - {6532, -1127} # 421 - {4102, -1620} # 422 - {-3018, -2228} # 423 - {4351, -1689} # 424 - {7409, -1533} # 425 - {-7652, -3458} # 426 - {9206, -73} # 427 - {-2870, -2131} # 428 - {-4909, -2974} # 429 - {4690, -1504} # 430 - {5044, -953} # 431 - {-7890, -3528} # 432 - {9682, -460} # 433 - {-2698, -2004} # 434 - {5817, -1648} # 435 - {-9380, -3719} # 436 - {6416, -1082} # 437 - {6297, -1373} # 438 - {-7585, -3409} # 439 - {5940, -1626} # 440 - {6948, -1031} # 441 - {-2396, -1766} # 442 - {7582, -1458} # 443 - {-9514, -3792} # 444 - {8575, -80} # 445 - {5105, -1066} # 446 - {3171, -1490} # 447 - {-6861, -2622} # 448 - {9685, -148} # 449 - {3513, -1166} # 450 - {-2241, -1656} # 451 - {1956, -1513} # 452 - {6377, -1272} # 453 - {-2120, -1584} # 454 - {6875, -992} # 455 - {-10001, -4085} # 456 - {7615, -1431} # 457 - {-1993, -1525} # 458 - {7355, -1389} # 459 - {-7417, -3073} # 460 - {9694, -512} # 461 - {-1860, -1482} # 462 - {-9424, -2879} # 463 - {-1602, -1331} # 464 - {-1756, -1463} # 465 - {9700, -569} # 466 - {-1685, -1455} # 467 - {-9847, -4188} # 468 - {-1577, -1452} # 469 - {9841, -566} # 470 - {4375, -1810} # 471 - {-1428, -1466} # 472 - {-4521, -3143} # 473 - {7664, -1363} # 474 - {1264, -1556} # 475 - {-1276, -1499} # 476 - {-1710, -1334} # 477 - {7918, -548} # 478 - {4597, -1478} # 479 - {-1121, -1548} # 480 - {278, -2177} # 481 - {-1885, -1361} # 482 - {9016, -43} # 483 - {-966, -1612} # 484 - {8282, -96} # 485 - {6486, -1162} # 486 - {1354, -1515} # 487 - {-814, -1687} # 488 - {-1781, -1341} # 489 - {7353, -1492} # 490 - {3197, -1273} # 491 - {-666, -1768} # 492 - {2633, -1804} # 493 - {-10161, -3808} # 494 - {6042, -1691} # 495 - {-472, -1886} # 496 - {9079, 87} # 497 - {-4313, -3053} # 498 - {1039, -1712} # 499 - {7580, -1561} # 500 - {8217, -146} # 501 - {-7841, -3527} # 502 - {9752, -228} # 503 - {3642, -1343} # 504 - {-130, -2106} # 505 - {9720, -186} # 506 - {5007, -969} # 507 - {8772, 81} # 508 - {6273, -1251} # 509 - {-7227, -2754} # 510 - {5083, -944} # 511 - {11, -2190} # 512 - {3146, -1369} # 513 - {-3042, -2106} # 514 - {2949, -1753} # 515 - {113, -2242} # 516 - {4127, -1741} # 517 - {-9342, -3516} # 518 - {7546, -1470} # 519 - {210, -2279} # 520 - {5354, -1119} # 521 - {-2895, -2010} # 522 - {-4660, -3123} # 523 - {303, -2298} # 524 - {4465, -1625} # 525 - {5252, -1111} # 526 - {370, -2299} # 527 - {8092, -415} # 528 - {426, -2293} # 529 - {6177, -1536} # 530 - {8973, 92} # 531 - {481, -2278} # 532 - {186, -2157} # 533 - {547, -2251} # 534 - {8871, 89} # 535 - {6774, -1065} # 536 - {6724, -1061} # 537 - {636, -2199} # 538 - {-1146, -1427} # 539 - {7270, -1418} # 540 - {7663, -1466} # 541 - {727, -2131} # 542 - {6098, -1635} # 543 - {-7508, -3320} # 544 - {6352, -1151} # 545 - {822, -2050} # 546 - {-2420, -1645} # 547 - {7447, -1451} # 548 - {-6201, -2908} # 549 - {6507, -1006} # 550 - {967, -1918} # 551 - {9840, -498} # 552 - {7047, -1104} # 553 - {5979, -1602} # 554 - {1064, -1833} # 555 - {3032, -1634} # 556 - {7513, -1575} # 557 - {4848, -1119} # 558 - {1172, -1750} # 559 - {5227, -990} # 560 - {2987, -1708} # 561 - {1288, -1678} # 562 - {-9247, -2740} # 563 - {5032, -1090} # 564 - {8138, -356} # 565 - {1379, -1636} # 566 - {4665, -1383} # 567 - {1442, -1614} # 568 - {-9197, -2733} # 569 - {1522, -1594} # 570 - {-9443, -3019} # 571 - {5215, -1088} # 572 - {1605, -1583} # 573 - {-9435, -3099} # 574 - {1672, -1580} # 575 - {-10061, -3803} # 576 - {1740, -1583} # 577 - {8829, -41} # 578 - {1842, -1597} # 579 - {2218, -1621} # 580 - {3266, -1336} # 581 - {2794, -1824} # 582 - {1980, -1634} # 583 - {-5577, -2750} # 584 - {-5422, -2708} # 585 - {3430, -1262} # 586 - {2117, -1686} # 587 - {6651, -944} # 588 - {7925, -719} # 589 - {7751, -1042} # 590 - {2243, -1742} # 591 - {8504, 18} # 592 - {4777, -1217} # 593 - {7695, -1399} # 594 - {2432, -1834} # 595 - {9636, -920} # 596 - {6711, -940} # 597 - {6074, -1513} # 598 - {9666, -412} # 599 - {2550, -1887} # 600 - {3071, -1550} # 601 - {6874, -1095} # 602 - {9833, -435} # 603 - {2658, -1925} # 604 - {-7324, -2860} # 605 - {-4240, -2990} # 606 - {1497, -1472} # 607 - {2730, -1941} # 608 - {9663, -839} # 609 - {2776, -1946} # 610 - {-6393, -2823} # 611 - {2819, -1945} # 612 - {5795, -1753} # 613 - {2858, -1939} # 614 - {7614, -1534} # 615 - {2903, -1924} # 616 - {4996, -1114} # 617 - {2919, -1778} # 618 - {2944, -1899} # 619 - {-9400, -2833} # 620 - {2973, -1874} # 621 - {-7793, -3520} # 622 - {3012, -1830} # 623 - {6823, -1076} # 624 - {-4388, -3102} # 625 - {8601, -2092} # 626 - {3057, -1756} # 627 - {-3486, -2350} # 628 - {-9785, -3813} # 629 - {8300, -208} # 630 - {3096, -1672} # 631 - {8938, -1583} # 632 - {9424, -1181} # 633 - {8734, -1822} # 634 - {9547, -1068} # 635 - {9177, -1328} # 636 - {8650, -1950} # 637 - {8842, -1705} # 638 - {8787, -1764} # 639 - {8894, -1646} # 640 - {9492, -1124} # 641 - {9603, -998} # 642 - {9315, -1241} # 643 - {9029, -1468} # 644 - {8687, -1884} # 645 - {8625, -2021} # 646 - {8985, -1902} # 647 - {8938, -1964} # 648 - {8902, -2030} # 649 - {9308, -1412} # 650 - {9412, -1329} # 651 - {9485, -1281} # 652 - {9057, -1774} # 653 - {9091, -1715} # 654 - {9139, -1641} # 655 - {9024, -1832} # 656 - {9598, -1171} # 657 - {9549, -1228} # 658 - {9213, -1521} # 659 - {8379, -3204} # 660 - {8655, -2585} # 661 - {-4258, -3139} # 662 - {-4179, -3071} # 663 - {-4060, -2952} # 664 - {-4099, -2990} # 665 - {-4024, -2911} # 666 - {-3943, -2832} # 667 - {-4171, -3038} # 668 - {-4020, -2869} # 669 - {-4248, -3109} # 670 - {-4284, -3141} # 671 - {-4208, -3075} # 672 - {-4091, -2955} # 673 - {-4131, -2997} # 674 - {-4053, -2915} # 675 - {-3972, -2833} # 676 - {10071, -3541} # 677 - {10347, -2921} # 678 - {-10350, -4354} # 679 - {-10526, -4338} # 680 - {-8340, -3297} # 681 - {-8357, -3157} # 682 - # Mesh "CurveCircle" - {8795, -42} # 683 - {8796, -63} # 684 - {8799, -76} # 685 - {8803, -89} # 686 - {8809, -101} # 687 - {8816, -112} # 688 - {8825, -122} # 689 - {8835, -130} # 690 - {8846, -138} # 691 - {8858, -144} # 692 - {8870, -148} # 693 - {8884, -151} # 694 - {8898, -152} # 695 - {8912, -151} # 696 - {8925, -148} # 697 - {8938, -144} # 698 - {8950, -138} # 699 - {8960, -130} # 700 - {8970, -122} # 701 - {8979, -112} # 702 - {8986, -101} # 703 - {8992, -89} # 704 - {8997, -76} # 705 - {8999, -63} # 706 - {9001, -41} # 707 - {8879, -170} # 708 - {8898, -171} # 709 - {8916, -170} # 710 - {8861, -166} # 711 - {8934, -166} # 712 - {8844, -160} # 713 - {8951, -160} # 714 - {8828, -153} # 715 - {8967, -153} # 716 - {8814, -143} # 717 - {8981, -143} # 718 - {8801, -131} # 719 - {8994, -131} # 720 - {8789, -118} # 721 - {9006, -118} # 722 - {8779, -103} # 723 - {9016, -103} # 724 - {8771, -88} # 725 - {9024, -88} # 726 - {8765, -71} # 727 - {9030, -71} # 728 - {8762, -53} # 729 - {9033, -53} # 730 - {8762, -45} # 731 - {9034, -44} # 732 - # Mesh "Font.001" - {2890, -2260} # 733 - {2874, -2268} # 734 - {1770, -2158} # 735 - {2773, -2201} # 736 - {2681, -2173} # 737 - {2438, -2114} # 738 - {2166, -2051} # 739 - {2844, -2266} # 740 - {2236, -2143} # 741 - {1508, -2234} # 742 - {1686, -2105} # 743 - {2833, -2249} # 744 - {2132, -2013} # 745 - {2837, -2231} # 746 - {2314, -2088} # 747 - {2311, -2071} # 748 - {2874, -2201} # 749 - {1664, -2190} # 750 - {2535, -2189} # 751 - {2484, -2156} # 752 - {2395, -2173} # 753 - {1353, -2255} # 754 - {2860, -2191} # 755 - {2745, -2268} # 756 - {2037, -2091} # 757 - {2506, -2208} # 758 - {2831, -2202} # 759 - {2590, -2214} # 760 - {1923, -2095} # 761 - {2765, -2260} # 762 - {2629, -2184} # 763 - {2829, -2185} # 764 - {1640, -2229} # 765 - {2474, -2170} # 766 - {2505, -2153} # 767 - {2864, -2175} # 768 - {2187, -2092} # 769 - {1643, -2213} # 770 - {1539, -2194} # 771 - {2193, -2054} # 772 - {2883, -2184} # 773 - {1479, -2337} # 774 - {2891, -2202} # 775 - {2113, -2014} # 776 - {1603, -2275} # 777 - {2553, -2174} # 778 - {2883, -2218} # 779 - {1575, -2237} # 780 - {1898, -2093} # 781 - {2310, -2136} # 782 - {2851, -2242} # 783 - {1933, -2012} # 784 - {1604, -2309} # 785 - {2488, -2226} # 786 - {1627, -2131} # 787 - {2433, -2182} # 788 - {2855, -2254} # 789 - {2219, -2139} # 790 - {1734, -2156} # 791 - {1336, -2266} # 792 - {2767, -2180} # 793 - {2453, -2187} # 794 - {2618, -2162} # 795 - {2887, -2245} # 796 - {1883, -2118} # 797 - {2305, -2114} # 798 - {2180, -2127} # 799 - {2376, -2074} # 800 - {653, -2528} # 801 - {641, -2521} # 802 - {656, -2373} # 803 - {673, -2382} # 804 - {669, -2426} # 805 - {720, -2454} # 806 - {755, -2427} # 807 - {773, -2437} # 808 - {661, -2498} # 809 - {704, -2465} # 810 - {667, -2445} # 811 - {764, -2567} # 812 - {747, -2561} # 813 - {790, -2431} # 814 - {806, -2437} # 815 - {817, -2579} # 816 - {800, -2575} # 817 - {832, -2443} # 818 - {849, -2447} # 819 - {943, -2485} # 820 - {1705, -2101} # 821 - {2315, -2150} # 822 - {2113, -2073} # 823 - {2581, -2249} # 824 - {913, -2474} # 825 - {1804, -2039} # 826 - {1564, -2172} # 827 - {2166, -2065} # 828 - {889, -2479} # 829 - {1685, -2192} # 830 - {2188, -2083} # 831 - {881, -2494} # 832 - {944, -2504} # 833 - {932, -2537} # 834 - {1570, -2308} # 835 - {1717, -2098} # 836 - {1865, -2112} # 837 - {904, -2547} # 838 - {2334, -2050} # 839 - {876, -2538} # 840 - {2280, -2130} # 841 - {1751, -2065} # 842 - {863, -2514} # 843 - {1728, -2178} # 844 - {868, -2476} # 845 - {2113, -2091} # 846 - {1662, -2216} # 847 - {2421, -2109} # 848 - {905, -2452} # 849 - {2389, -2192} # 850 - {2418, -2205} # 851 - {1462, -2347} # 852 - {2601, -2237} # 853 - {947, -2469} # 854 - {2706, -2272} # 855 - {2392, -2078} # 856 - {2810, -2193} # 857 - {879, -2510} # 858 - {2358, -2123} # 859 - {2389, -2060} # 860 - {2313, -2049} # 861 - {897, -2531} # 862 - {2359, -2182} # 863 - {1562, -2203} # 864 - {2748, -2216} # 865 - {918, -2527} # 866 - {1753, -2167} # 867 - {1652, -2277} # 868 - {1860, -2032} # 869 - {924, -2513} # 870 - {1045, -2541} # 871 - {988, -2541} # 872 - {1329, -2327} # 873 - {2808, -2209} # 874 - {2213, -2053} # 875 - {967, -2520} # 876 - {2674, -2210} # 877 - {1549, -2217} # 878 - {2372, -2187} # 879 - {2226, -2050} # 880 - {971, -2495} # 881 - {2800, -2263} # 882 - {2579, -2153} # 883 - {1612, -2141} # 884 - {1672, -2153} # 885 - {2503, -2132} # 886 - {1656, -2145} # 887 - {984, -2484} # 888 - {2367, -2057} # 889 - {2133, -2150} # 890 - {2561, -2157} # 891 - {1659, -2112} # 892 - {2730, -2245} # 893 - {2543, -2154} # 894 - {2518, -2220} # 895 - {971, -2468} # 896 - {2246, -2115} # 897 - {1421, -2372} # 898 - {1512, -2202} # 899 - {2320, -2108} # 900 - {2260, -2057} # 901 - {1932, -2081} # 902 - {975, -2459} # 903 - {1330, -2403} # 904 - {1529, -2212} # 905 - {1900, -2114} # 906 - {956, -2437} # 907 - {1916, -2017} # 908 - {1542, -2313} # 909 - {2224, -2059} # 910 - {967, -2415} # 911 - {2293, -2136} # 912 - {1717, -2163} # 913 - {1005, -2405} # 914 - {1305, -2359} # 915 - {1415, -2317} # 916 - {2537, -2170} # 917 - {1033, -2416} # 918 - {2037, -2150} # 919 - {1041, -2432} # 920 - {2514, -2195} # 921 - {2037, -2073} # 922 - {1033, -2453} # 923 - {1490, -2232} # 924 - {1534, -2286} # 925 - {2360, -2153} # 926 - {2464, -2150} # 927 - {989, -2468} # 928 - {2687, -2268} # 929 - {1677, -2141} # 930 - {2592, -2205} # 931 - {2243, -2052} # 932 - {2571, -2186} # 933 - {992, -2477} # 934 - {2366, -2041} # 935 - {2791, -2239} # 936 - {1025, -2486} # 937 - {2267, -2154} # 938 - {2036, -2014} # 939 - {1713, -2154} # 940 - {2572, -2173} # 941 - {1036, -2513} # 942 - {2558, -2191} # 943 - {2199, -2114} # 944 - {1325, -2345} # 945 - {2584, -2230} # 946 - {1824, -2132} # 947 - {2330, -2156} # 948 - {1882, -2104} # 949 - {1026, -2528} # 950 - {1044, -2527} # 951 - {1915, -2110} # 952 - {1364, -2381} # 953 - {2640, -2259} # 954 - {1008, -2495} # 955 - {2363, -2169} # 956 - {1621, -2228} # 957 - {1702, -2193} # 958 - {989, -2498} # 959 - {1950, -2080} # 960 - {2786, -2254} # 961 - {1568, -2327} # 962 - {983, -2514} # 963 - {1618, -2219} # 964 - {2463, -2213} # 965 - {2017, -2150} # 966 - {992, -2521} # 967 - {2321, -2122} # 968 - {2113, -2150} # 969 - {1009, -2525} # 970 - {2341, -2126} # 971 - {1554, -2234} # 972 - {2345, -2163} # 973 - {1020, -2511} # 974 - {2346, -2145} # 975 - {1023, -2430} # 976 - {2326, -2064} # 977 - {2632, -2174} # 978 - {1011, -2421} # 979 - {2331, -2095} # 980 - {2377, -2095} # 981 - {1768, -2099} # 982 - {978, -2425} # 983 - {2305, -2163} # 984 - {1700, -2177} # 985 - {2584, -2171} # 986 - {1673, -2119} # 987 - {975, -2441} # 988 - {2405, -2163} # 989 - {1404, -2383} # 990 - {1705, -2139} # 991 - {990, -2449} # 992 - {2326, -2085} # 993 - {2745, -2239} # 994 - {2484, -2209} # 995 - {1019, -2443} # 996 - {1877, -2027} # 997 - {1805, -2109} # 998 - {2602, -2167} # 999 - {1073, -2530} # 1000 - {1074, -2431} # 1001 - {1092, -2431} # 1002 - {1093, -2490} # 1003 - {1578, -2162} # 1004 - {1351, -2400} # 1005 - {2327, -2037} # 1006 - {1108, -2509} # 1007 - {2177, -2046} # 1008 - {1350, -2350} # 1009 - {2285, -2148} # 1010 - {2809, -2229} # 1011 - {1812, -2138} # 1012 - {2142, -2091} # 1013 - {1124, -2496} # 1014 - {2552, -2241} # 1015 - {1136, -2509} # 1016 - {1122, -2523} # 1017 - {2599, -2177} # 1018 - {2171, -2032} # 1019 - {2437, -2199} # 1020 - {1614, -2292} # 1021 - {2242, -2124} # 1022 - {1897, -2102} # 1023 - {1102, -2521} # 1024 - {2150, -2121} # 1025 - {2621, -2256} # 1026 - {2211, -2038} # 1027 - {1087, -2506} # 1028 - {2181, -2108} # 1029 - {1090, -2527} # 1030 - {1180, -2499} # 1031 - {1668, -2130} # 1032 - {1820, -2074} # 1033 - {1693, -2091} # 1034 - {1141, -2473} # 1035 - {1647, -2197} # 1036 - {1940, -2104} # 1037 - {1649, -2127} # 1038 - {1139, -2435} # 1039 - {1690, -2115} # 1040 - {1157, -2411} # 1041 - {1504, -2254} # 1042 - {2260, -2136} # 1043 - {1197, -2403} # 1044 - {1396, -2305} # 1045 - {2338, -2077} # 1046 - {1231, -2429} # 1047 - {1357, -2333} # 1048 - {2546, -2210} # 1049 - {2732, -2206} # 1050 - {1227, -2477} # 1051 - {1712, -2090} # 1052 - {1369, -2409} # 1053 - {2413, -2186} # 1054 - {1206, -2474} # 1055 - {2147, -2054} # 1056 - {2562, -2227} # 1057 - {2017, -2014} # 1058 - {1216, -2450} # 1059 - {2541, -2227} # 1060 - {2154, -2037} # 1061 - {1200, -2420} # 1062 - {2402, -2192} # 1063 - {1338, -2418} # 1064 - {1383, -2372} # 1065 - {2138, -2109} # 1066 - {1163, -2426} # 1067 - {2154, -2071} # 1068 - {1589, -2298} # 1069 - {2160, -2107} # 1070 - {1155, -2447} # 1071 - {2249, -2143} # 1072 - {1162, -2472} # 1073 - {2773, -2275} # 1074 - {1552, -2296} # 1075 - {2189, -2042} # 1076 - {2619, -2177} # 1077 - {1362, -2463} # 1078 - {1346, -2472} # 1079 - {1283, -2356} # 1080 - {1298, -2341} # 1081 - {1676, -2176} # 1082 - {2469, -2185} # 1083 - {2330, -2104} # 1084 - {1637, -2287} # 1085 - # Mesh "Mesh.001" - {5150, -2933} # 1086 - {4451, -3076} # 1087 - {6162, -2416} # 1088 - {6442, -2299} # 1089 - {4211, -3369} # 1090 - {4386, -3203} # 1091 - {5637, -2540} # 1092 - {4079, -3456} # 1093 - {4106, -3524} # 1094 - {4160, -3495} # 1095 - {5780, -2526} # 1096 - {4181, -3401} # 1097 - {6442, -2375} # 1098 - {3210, -3964} # 1099 - {4333, -3266} # 1100 - {3743, -3509} # 1101 - {3914, -3469} # 1102 - {3702, -3530} # 1103 - {4079, -3532} # 1104 - {3393, -3859} # 1105 - {3863, -3474} # 1106 - {4416, -3176} # 1107 - {3702, -3606} # 1108 - {3210, -3888} # 1109 - {6311, -2316} # 1110 - {3563, -3709} # 1111 - {5376, -2811} # 1112 - {4614, -3096} # 1113 - {4303, -3232} # 1114 - {5850, -2497} # 1115 - {3784, -3493} # 1116 - {3563, -3633} # 1117 - {5496, -2696} # 1118 - {5150, -3008} # 1119 - {5289, -2869} # 1120 - {5605, -2646} # 1121 - {4358, -3158} # 1122 - {3824, -3557} # 1123 - {4303, -3308} # 1124 - {4358, -3234} # 1125 - {3393, -3783} # 1126 - {4106, -3448} # 1127 - {3304, -3846} # 1128 - {3784, -3569} # 1129 - {5780, -2450} # 1130 - {3914, -3545} # 1131 - {3349, -3817} # 1132 - {4484, -3134} # 1133 - {5935, -2393} # 1134 - {5723, -2555} # 1135 - {3133, -3967} # 1136 - {3304, -3922} # 1137 - {3824, -3481} # 1138 - {3450, -3812} # 1139 - {5079, -2956} # 1140 - {5221, -2979} # 1141 - {3257, -3870} # 1142 - {5337, -2838} # 1143 - {5605, -2570} # 1144 - {5289, -2944} # 1145 - {3450, -3736} # 1146 - {4248, -3393} # 1147 - {4614, -3020} # 1148 - {5565, -2612} # 1149 - {4010, -3541} # 1150 - {4520, -3043} # 1151 - {4846, -2998} # 1152 - {5496, -2772} # 1153 - {5412, -2857} # 1154 - {4484, -3058} # 1155 - {3172, -3971} # 1156 - {3257, -3946} # 1157 - {5008, -3049} # 1158 - {4134, -3436} # 1159 - {3863, -3550} # 1160 - {3620, -3586} # 1161 - {3743, -3585} # 1162 - {5676, -2510} # 1163 - {3620, -3662} # 1164 - {4565, -3030} # 1165 - {6162, -2340} # 1166 - {6038, -2366} # 1167 - {4939, -2986} # 1168 - {3112, -3902} # 1169 - {5337, -2914} # 1170 - {6311, -2392} # 1171 - {5565, -2688} # 1172 - {5451, -2820} # 1173 - {4333, -3190} # 1174 - {4451, -3152} # 1175 - {4010, -3465} # 1176 - {5079, -3032} # 1177 - {4050, -3537} # 1178 - {4846, -3074} # 1179 - {4939, -3062} # 1180 - {5412, -2781} # 1181 - {4386, -3128} # 1182 - {5850, -2421} # 1183 - {4416, -3100} # 1184 - {5723, -2480} # 1185 - {6038, -2441} # 1186 - {4050, -3461} # 1187 - {3661, -3632} # 1188 - {4683, -3011} # 1189 - {4160, -3419} # 1190 - {5376, -2887} # 1191 - {5637, -2615} # 1192 - {4520, -3119} # 1193 - {5935, -2468} # 1194 - {4683, -3087} # 1195 - {4181, -3477} # 1196 - {4211, -3445} # 1197 - {4565, -3105} # 1198 - {5451, -2745} # 1199 - {5676, -2585} # 1200 - {3349, -3892} # 1201 - {3661, -3556} # 1202 - {3161, -3899} # 1203 - {4134, -3512} # 1204 - {5221, -2904} # 1205 - {4248, -3318} # 1206 - {5008, -2973} # 1207 - {3113, -3961} # 1208 - {3097, -3901} # 1209 - {3098, -3939} # 1210 - # Mesh "Mesh.002" - {-8913, -4174} # 1211 - {-8700, -4273} # 1212 - {-8547, -4340} # 1213 - {-8408, -4397} # 1214 - {-8913, -4099} # 1215 - {-8282, -4446} # 1216 - {-8168, -4488} # 1217 - {-8014, -4538} # 1218 - {-3073, -4596} # 1219 - {-7839, -4587} # 1220 - {-8547, -4264} # 1221 - {-7689, -4622} # 1222 - {-4225, -4690} # 1223 - {-7559, -4645} # 1224 - {-7443, -4662} # 1225 - {-7336, -4673} # 1226 - {-7232, -4681} # 1227 - {-7145, -4683} # 1228 - {-7073, -4679} # 1229 - {-7008, -4672} # 1230 - {-2768, -4699} # 1231 - {-6947, -4663} # 1232 - {-6883, -4648} # 1233 - {-6801, -4623} # 1234 - {-6596, -4478} # 1235 - {-6659, -4571} # 1236 - {-7008, -4597} # 1237 - {-6596, -4554} # 1238 - {-6416, -4493} # 1239 - {-3114, -4601} # 1240 - {-6548, -4547} # 1241 - {-6192, -4633} # 1242 - {-7443, -4586} # 1243 - {-6507, -4547} # 1244 - {-6465, -4554} # 1245 - {-6416, -4569} # 1246 - {-4037, -4764} # 1247 - {-6367, -4592} # 1248 - {-4098, -4736} # 1249 - {-5749, -4738} # 1250 - {-6317, -4621} # 1251 - {-4287, -4677} # 1252 - {-7559, -4569} # 1253 - {-6267, -4655} # 1254 - {-4901, -4738} # 1255 - {-6190, -4710} # 1256 - {-6139, -4744} # 1257 - {-6084, -4776} # 1258 - {-3621, -4886} # 1259 - {-6028, -4802} # 1260 - {-5478, -4660} # 1261 - {-5971, -4820} # 1262 - {-8282, -4370} # 1263 - {-5920, -4829} # 1264 - {-5868, -4831} # 1265 - {-8168, -4412} # 1266 - {-5809, -4826} # 1267 - {-6947, -4587} # 1268 - {-4961, -4726} # 1269 - {-5749, -4814} # 1270 - {-7153, -4606} # 1271 - {-5689, -4797} # 1272 - {-5868, -4755} # 1273 - {-5599, -4768} # 1274 - {-3031, -4596} # 1275 - {-3655, -4890} # 1276 - {-5541, -4751} # 1277 - {-6507, -4472} # 1278 - {-5478, -4736} # 1279 - {-5406, -4725} # 1280 - {-5809, -4750} # 1281 - {-5350, -4723} # 1282 - {-5302, -4725} # 1283 - {-3405, -4774} # 1284 - {-4406, -4674} # 1285 - {-5238, -4732} # 1286 - {-5174, -4745} # 1287 - {-2630, -4786} # 1288 - {-5115, -4760} # 1289 - {-3206, -4633} # 1290 - {-5022, -4786} # 1291 - {-5350, -4647} # 1292 - {-6028, -4726} # 1293 - {-7073, -4603} # 1294 - {-4961, -4802} # 1295 - {-4901, -4814} # 1296 - {-4841, -4821} # 1297 - {-4782, -4822} # 1298 - {-3698, -4890} # 1299 - {-4724, -4818} # 1300 - {-4668, -4809} # 1301 - {-4521, -4695} # 1302 - {-4611, -4795} # 1303 - {-5174, -4669} # 1304 - {-4521, -4771} # 1305 - {-4464, -4758} # 1306 - {-4406, -4750} # 1307 - {-5689, -4721} # 1308 - {-4347, -4747} # 1309 - {-6465, -4478} # 1310 - {-4287, -4753} # 1311 - {-4225, -4766} # 1312 - {-2983, -4603} # 1313 - {-4161, -4786} # 1314 - {-4098, -4812} # 1315 - {-4037, -4840} # 1316 - {-3943, -4887} # 1317 - {-2836, -4660} # 1318 - {-3880, -4916} # 1319 - {-3817, -4940} # 1320 - {-3756, -4957} # 1321 - {-8014, -4462} # 1322 - {-3698, -4966} # 1323 - {-3655, -4965} # 1324 - {-3621, -4962} # 1325 - {-3587, -4954} # 1326 - {-3548, -4940} # 1327 - {-8700, -4197} # 1328 - {-3498, -4915} # 1329 - {-3548, -4864} # 1330 - {-3451, -4884} # 1331 - {-3817, -4864} # 1332 - {-3405, -4850} # 1333 - {-4161, -4710} # 1334 - {-3310, -4775} # 1335 - {-2885, -4636} # 1336 - {-4724, -4742} # 1337 - {-3251, -4734} # 1338 - {-5302, -4649} # 1339 - {-3206, -4709} # 1340 - {-3160, -4689} # 1341 - {-5022, -4710} # 1342 - {-4668, -4733} # 1343 - {-3114, -4677} # 1344 - {-5920, -4753} # 1345 - {-6301, -4556} # 1346 - {-3073, -4672} # 1347 - {-5238, -4657} # 1348 - {-3031, -4672} # 1349 - {-5541, -4675} # 1350 - {-2983, -4679} # 1351 - {-4611, -4719} # 1352 - {-4347, -4672} # 1353 - {-2934, -4692} # 1354 - {-2885, -4712} # 1355 - {-7839, -4512} # 1356 - {-2836, -4736} # 1357 - {-2768, -4775} # 1358 - {-3251, -4659} # 1359 - {-6139, -4668} # 1360 - {-3943, -4811} # 1361 - {-2630, -4861} # 1362 - {-6084, -4701} # 1363 - {-6367, -4516} # 1364 - {-2563, -4899} # 1365 - {-3310, -4699} # 1366 - {-7689, -4546} # 1367 - {-2511, -4924} # 1368 - {-6801, -4548} # 1369 - {-2458, -4943} # 1370 - {-6548, -4471} # 1371 - {-2416, -4931} # 1372 - {-6659, -4495} # 1373 - {-5599, -4692} # 1374 - {-5971, -4745} # 1375 - {-2511, -4848} # 1376 - {-3498, -4839} # 1377 - {-8408, -4321} # 1378 - {-3880, -4840} # 1379 - {-5406, -4650} # 1380 - {-3160, -4614} # 1381 - {-3587, -4878} # 1382 - {-7240, -4604} # 1383 - {-2934, -4617} # 1384 - {-4782, -4746} # 1385 - {-2458, -4867} # 1386 - {-3756, -4882} # 1387 - {-5115, -4684} # 1388 - {-7336, -4597} # 1389 - {-4464, -4682} # 1390 - {-4841, -4745} # 1391 - {-6883, -4572} # 1392 - {-2563, -4823} # 1393 - {-3451, -4808} # 1394 - {-2405, -4878} # 1395 - # Mesh "Mesh.003" - {868, -4128} # 1396 - {-1919, -4607} # 1397 - {2514, -3604} # 1398 - {2998, -3936} # 1399 - {-461, -4430} # 1400 - {-665, -4381} # 1401 - {2334, -3510} # 1402 - {2365, -3576} # 1403 - {2116, -3719} # 1404 - {2286, -3535} # 1405 - {43, -4343} # 1406 - {-1979, -4670} # 1407 - {2917, -3914} # 1408 - {-2310, -4877} # 1409 - {1080, -4152} # 1410 - {-1045, -4051} # 1411 - {-1334, -4013} # 1412 - {2475, -3587} # 1413 - {2863, -3802} # 1414 - {617, -4133} # 1415 - {2334, -3585} # 1416 - {1790, -4084} # 1417 - {428, -4145} # 1418 - {2205, -3606} # 1419 - {504, -4181} # 1420 - {2160, -3735} # 1421 - {-513, -4501} # 1422 - {1298, -4197} # 1423 - {-1182, -3985} # 1424 - {-1263, -3988} # 1425 - {2787, -3820} # 1426 - {2448, -3579} # 1427 - {-2156, -4816} # 1428 - {2310, -3596} # 1429 - {-1581, -4221} # 1430 - {1919, -4050} # 1431 - {1790, -4160} # 1432 - {-622, -4400} # 1433 - {-1455, -4097} # 1434 - {2160, -3660} # 1435 - {1873, -4020} # 1436 - {562, -4154} # 1437 - {1694, -4133} # 1438 - {-2212, -4847} # 1439 - {428, -4220} # 1440 - {2422, -3575} # 1441 - {-702, -4362} # 1442 - {1419, -4192} # 1443 - {2567, -3637} # 1444 - {1521, -4179} # 1445 - {-408, -4507} # 1446 - {-88, -4386} # 1447 - {-356, -4506} # 1448 - {1252, -4194} # 1449 - {2863, -3878} # 1450 - {-303, -4426} # 1451 - {-565, -4492} # 1452 - {1346, -4196} # 1453 - {1832, -4130} # 1454 - {2251, -3637} # 1455 - {-356, -4430} # 1456 - {2286, -3610} # 1457 - {1644, -4226} # 1458 - {1163, -4180} # 1459 - {1521, -4255} # 1460 - {2116, -3795} # 1461 - {-2268, -4868} # 1462 - {-999, -4091} # 1463 - {-2351, -4881} # 1464 - {1163, -4255} # 1465 - {149, -4296} # 1466 - {2448, -3503} # 1467 - {671, -4042} # 1468 - {1028, -4205} # 1469 - {2251, -3561} # 1470 - {868, -4052} # 1471 - {-956, -4134} # 1472 - {1919, -3974} # 1473 - {1965, -3922} # 1474 - {922, -4150} # 1475 - {1873, -4096} # 1476 - {2917, -3838} # 1477 - {-750, -4330} # 1478 - {1121, -4167} # 1479 - {1207, -4189} # 1480 - {2475, -3511} # 1481 - {728, -4109} # 1482 - {1346, -4272} # 1483 - {-861, -4233} # 1484 - {781, -4033} # 1485 - {-2098, -4776} # 1486 - {263, -4312} # 1487 - {43, -4419} # 1488 - {2422, -3499} # 1489 - {-1835, -4513} # 1490 - {-1517, -4155} # 1491 - {1965, -3998} # 1492 - {825, -4116} # 1493 - {1832, -4055} # 1494 - {1694, -4209} # 1495 - {922, -4074} # 1496 - {1419, -4268} # 1497 - {-88, -4462} # 1498 - {2637, -3690} # 1499 - {2567, -3561} # 1500 - {504, -4105} # 1501 - {2365, -3501} # 1502 - {-1130, -3999} # 1503 - {2310, -3521} # 1504 - {-513, -4426} # 1505 - {-1156, -3990} # 1506 - {-142, -4400} # 1507 - {-1394, -4049} # 1508 - {3023, -3888} # 1509 - {781, -4109} # 1510 - {2023, -3848} # 1511 - {-1235, -3983} # 1512 - {2397, -3573} # 1513 - {-1291, -3996} # 1514 - {-565, -4417} # 1515 - {1595, -4164} # 1516 - {263, -4236} # 1517 - {-303, -4501} # 1518 - {2514, -3528} # 1519 - {-1093, -4017} # 1520 - {2787, -3744} # 1521 - {1080, -4228} # 1522 - {1742, -4111} # 1523 - {-798, -4292} # 1524 - {-408, -4432} # 1525 - {-2345, -4947} # 1526 - {1595, -4239} # 1527 - {-2310, -4953} # 1528 - {-1663, -4313} # 1529 - {-2268, -4944} # 1530 - {-2212, -4923} # 1531 - {-142, -4475} # 1532 - {1742, -4187} # 1533 - {-2156, -4892} # 1534 - {-2098, -4852} # 1535 - {1207, -4264} # 1536 - {1121, -4243} # 1537 - {-2039, -4803} # 1538 - {2205, -3682} # 1539 - {-2039, -4727} # 1540 - {-1979, -4746} # 1541 - {-1208, -3982} # 1542 - {-1919, -4683} # 1543 - {-1835, -4589} # 1544 - {1644, -4150} # 1545 - {562, -4079} # 1546 - {-1663, -4388} # 1547 - {2970, -3867} # 1548 - {-1581, -4296} # 1549 - {671, -4118} # 1550 - {728, -4033} # 1551 - {-1517, -4231} # 1552 - {-1455, -4173} # 1553 - {-622, -4476} # 1554 - {-1394, -4125} # 1555 - {-34, -4446} # 1556 - {-1350, -4098} # 1557 - {-1320, -4083} # 1558 - {-1291, -4071} # 1559 - {-1263, -4063} # 1560 - {1298, -4272} # 1561 - {-1235, -4059} # 1562 - {-1208, -4058} # 1563 - {-1182, -4060} # 1564 - {617, -4057} # 1565 - {-1156, -4066} # 1566 - {-1130, -4075} # 1567 - {-1093, -4093} # 1568 - {-222, -4491} # 1569 - {-1045, -4126} # 1570 - {2397, -3498} # 1571 - {-999, -4167} # 1572 - {149, -4372} # 1573 - {1028, -4129} # 1574 - {-956, -4210} # 1575 - {-861, -4309} # 1576 - {2637, -3614} # 1577 - {2023, -3923} # 1578 - {-461, -4506} # 1579 - {825, -4040} # 1580 - {-798, -4368} # 1581 - {1252, -4270} # 1582 - {2946, -3934} # 1583 - {-750, -4406} # 1584 - {-702, -4438} # 1585 - {-222, -4415} # 1586 - {-34, -4370} # 1587 - {-665, -4457} # 1588 - {2975, -3940} # 1589 - {3016, -3921} # 1590 - # Mesh "Plane" - {8378, -1867} # 1591 - {8241, -1852} # 1592 - {8231, -1867} # 1593 - {8304, -1850} # 1594 - {8335, -1851} # 1595 - {8273, -1843} # 1596 - {8330, -1852} # 1597 - {8353, -1836} # 1598 - {8286, -1850} # 1599 - {8247, -1852} # 1600 - {8297, -1844} # 1601 - {8276, -1852} # 1602 - {8356, -1852} # 1603 - {8350, -1851} # 1604 - {8313, -1852} # 1605 - {8332, -1841} # 1606 - {8244, -1843} # 1607 - {8270, -1852} # 1608 - {8236, -1859} # 1609 - {8372, -1857} # 1610 - # Mesh "Plane.001" - {8277, -1902} # 1611 - {8140, -1887} # 1612 - {8130, -1902} # 1613 - {8203, -1885} # 1614 - {8234, -1886} # 1615 - {8172, -1878} # 1616 - {8229, -1887} # 1617 - {8252, -1871} # 1618 - {8185, -1885} # 1619 - {8146, -1887} # 1620 - {8197, -1879} # 1621 - {8175, -1887} # 1622 - {8256, -1887} # 1623 - {8249, -1886} # 1624 - {8212, -1887} # 1625 - {8231, -1876} # 1626 - {8143, -1878} # 1627 - {8169, -1887} # 1628 - {8135, -1894} # 1629 - {8271, -1892} # 1630 - # Mesh "Plane.006" - {8202, -1954} # 1631 - {8066, -1940} # 1632 - {8056, -1954} # 1633 - {8129, -1937} # 1634 - {8160, -1939} # 1635 - {8097, -1931} # 1636 - {8155, -1940} # 1637 - {8178, -1924} # 1638 - {8110, -1937} # 1639 - {8072, -1939} # 1640 - {8122, -1932} # 1641 - {8101, -1939} # 1642 - {8181, -1940} # 1643 - {8174, -1939} # 1644 - {8138, -1939} # 1645 - {8157, -1929} # 1646 - {8068, -1930} # 1647 - {8095, -1939} # 1648 - {8061, -1947} # 1649 - {8196, -1944} # 1650 - # Mesh "Plane.007" - {8071, -1994} # 1651 - {7934, -1979} # 1652 - {7924, -1994} # 1653 - {7997, -1977} # 1654 - {8028, -1978} # 1655 - {7966, -1970} # 1656 - {8023, -1979} # 1657 - {8046, -1963} # 1658 - {7979, -1977} # 1659 - {7940, -1979} # 1660 - {7991, -1971} # 1661 - {7969, -1979} # 1662 - {8050, -1979} # 1663 - {8043, -1978} # 1664 - {8006, -1979} # 1665 - {8025, -1968} # 1666 - {7937, -1970} # 1667 - {7963, -1979} # 1668 - {7929, -1986} # 1669 - {8065, -1984} # 1670 - # Mesh "Plane.008" - {8614, -1556} # 1671 - {8478, -1541} # 1672 - {8467, -1556} # 1673 - {8541, -1539} # 1674 - {8572, -1541} # 1675 - {8509, -1532} # 1676 - {8566, -1542} # 1677 - {8590, -1526} # 1678 - {8522, -1539} # 1679 - {8484, -1541} # 1680 - {8534, -1533} # 1681 - {8513, -1541} # 1682 - {8593, -1541} # 1683 - {8586, -1540} # 1684 - {8549, -1541} # 1685 - {8568, -1530} # 1686 - {8480, -1532} # 1687 - {8507, -1541} # 1688 - {8473, -1549} # 1689 - {8608, -1546} # 1690 - # Mesh "Plane.009" - {8567, -1607} # 1691 - {8430, -1592} # 1692 - {8420, -1607} # 1693 - {8493, -1590} # 1694 - {8524, -1592} # 1695 - {8462, -1583} # 1696 - {8519, -1593} # 1697 - {8542, -1577} # 1698 - {8475, -1590} # 1699 - {8436, -1592} # 1700 - {8486, -1584} # 1701 - {8465, -1592} # 1702 - {8545, -1592} # 1703 - {8539, -1591} # 1704 - {8502, -1592} # 1705 - {8521, -1582} # 1706 - {8433, -1583} # 1707 - {8459, -1592} # 1708 - {8425, -1600} # 1709 - {8561, -1597} # 1710 - # Mesh "Plane.010" - {8528, -1672} # 1711 - {8391, -1657} # 1712 - {8381, -1672} # 1713 - {8454, -1655} # 1714 - {8485, -1657} # 1715 - {8423, -1649} # 1716 - {8480, -1658} # 1717 - {8504, -1642} # 1718 - {8436, -1655} # 1719 - {8397, -1657} # 1720 - {8448, -1650} # 1721 - {8426, -1657} # 1722 - {8507, -1657} # 1723 - {8500, -1657} # 1724 - {8463, -1657} # 1725 - {8482, -1647} # 1726 - {8394, -1648} # 1727 - {8420, -1657} # 1728 - {8386, -1665} # 1729 - {8522, -1662} # 1730 - # Mesh "Plane.011" - {8747, -1466} # 1731 - {8738, -1451} # 1732 - {8611, -1452} # 1733 - {8600, -1466} # 1734 - # Mesh "Plane.012" - {8799, -1414} # 1735 - {8790, -1399} # 1736 - {8662, -1399} # 1737 - {8652, -1414} # 1738 - # Mesh "Plane.013" - {8856, -1363} # 1739 - {8847, -1348} # 1740 - {8719, -1348} # 1741 - {8709, -1363} # 1742 - # Mesh "Plane.014" - {8935, -1315} # 1743 - {8926, -1300} # 1744 - {8799, -1300} # 1745 - {8788, -1315} # 1746 - # Mesh "Plane.015" - {9004, -1261} # 1747 - {8994, -1246} # 1748 - {8867, -1247} # 1749 - {8857, -1261} # 1750 - # Mesh "Plane.016" - {9131, -1160} # 1751 - {9122, -1145} # 1752 - {8995, -1145} # 1753 - {8985, -1160} # 1754 - # Mesh "Plane.017" - {9232, -1107} # 1755 - {9222, -1092} # 1756 - {9095, -1092} # 1757 - {9085, -1107} # 1758 - # Mesh "Plane.018" - {9304, -1057} # 1759 - {9295, -1042} # 1760 - {9168, -1042} # 1761 - {9157, -1057} # 1762 - # Mesh "Plane.019" - {9377, -1016} # 1763 - {9367, -1001} # 1764 - {9240, -1001} # 1765 - {9230, -1016} # 1766 - # Mesh "Plane.020" - {9453, -970} # 1767 - {9444, -955} # 1768 - {9316, -955} # 1769 - {9306, -970} # 1770 - # Mesh "Plane.024" - {8470, -1714} # 1771 - {8333, -1700} # 1772 - {8323, -1714} # 1773 - {8396, -1698} # 1774 - {8427, -1699} # 1775 - {8365, -1691} # 1776 - {8422, -1700} # 1777 - {8445, -1684} # 1778 - {8378, -1698} # 1779 - {8339, -1700} # 1780 - {8390, -1692} # 1781 - {8368, -1700} # 1782 - {8449, -1700} # 1783 - {8442, -1699} # 1784 - {8405, -1700} # 1785 - {8424, -1689} # 1786 - {8336, -1691} # 1787 - {8362, -1699} # 1788 - {8328, -1707} # 1789 - {8464, -1704} # 1790 - # Mesh "Plane.025" - {8458, -1769} # 1791 - {8321, -1754} # 1792 - {8311, -1769} # 1793 - {8384, -1752} # 1794 - {8415, -1754} # 1795 - {8353, -1745} # 1796 - {8410, -1755} # 1797 - {8433, -1739} # 1798 - {8366, -1752} # 1799 - {8327, -1754} # 1800 - {8377, -1747} # 1801 - {8356, -1754} # 1802 - {8436, -1754} # 1803 - {8430, -1754} # 1804 - {8393, -1754} # 1805 - {8412, -1744} # 1806 - {8324, -1745} # 1807 - {8350, -1754} # 1808 - {8316, -1762} # 1809 - {8452, -1759} # 1810 - # Mesh "Plane.026" - {8444, -1818} # 1811 - {8307, -1804} # 1812 - {8297, -1818} # 1813 - {8370, -1802} # 1814 - {8401, -1803} # 1815 - {8338, -1795} # 1816 - {8396, -1804} # 1817 - {8419, -1788} # 1818 - {8352, -1802} # 1819 - {8313, -1804} # 1820 - {8363, -1796} # 1821 - {8342, -1804} # 1822 - {8422, -1804} # 1823 - {8416, -1803} # 1824 - {8379, -1803} # 1825 - {8398, -1793} # 1826 - {8310, -1795} # 1827 - {8336, -1803} # 1828 - {8302, -1811} # 1829 - {8437, -1808} # 1830 - # Mesh "Plane.028" - {9061, -1202} # 1831 - {9052, -1187} # 1832 - {8924, -1188} # 1833 - {8914, -1202} # 1834 - # Mesh "Plane.029" - {9000, -1542} # 1835 - {9018, -1495} # 1836 - {8998, -1032} # 1837 - {8974, -1545} # 1838 - # Mesh "Plane.030" - {8880, -1727} # 1839 - {8912, -1645} # 1840 - {8877, -845} # 1841 - {8835, -1732} # 1842 - # Mesh "Plane.031" - {8709, -1921} # 1843 - {8728, -1873} # 1844 - {8708, -1411} # 1845 - {8683, -1924} # 1846 - # Mesh "Plane.034" - {9208, -1334} # 1847 - {9226, -1286} # 1848 - {9206, -824} # 1849 - {9182, -1337} # 1850 - # Mesh "Plane.035" - {8757, -1826} # 1851 - {8775, -1778} # 1852 - {8755, -1316} # 1853 - {8731, -1829} # 1854 - # Mesh "Plane.036" - {8810, -1772} # 1855 - {8832, -1714} # 1856 - {8808, -1154} # 1857 - {8778, -1775} # 1858 - # Mesh "Plane.037" - {8947, -1592} # 1859 - {8965, -1545} # 1860 - {8945, -1082} # 1861 - {8921, -1595} # 1862 - # Mesh "Plane.038" - {9053, -1464} # 1863 - {9071, -1417} # 1864 - {9051, -954} # 1865 - {9027, -1467} # 1866 - # Mesh "Plane.039" - {9126, -1399} # 1867 - {9144, -1351} # 1868 - {9124, -888} # 1869 - {9100, -1402} # 1870 - # Mesh "Plane.040" - {8662, -1503} # 1871 - {8525, -1488} # 1872 - {8515, -1503} # 1873 - {8588, -1486} # 1874 - {8619, -1488} # 1875 - {8557, -1479} # 1876 - {8614, -1489} # 1877 - {8637, -1473} # 1878 - {8570, -1486} # 1879 - {8531, -1488} # 1880 - {8582, -1481} # 1881 - {8560, -1488} # 1882 - {8640, -1488} # 1883 - {8634, -1488} # 1884 - {8597, -1488} # 1885 - {8616, -1478} # 1886 - {8528, -1479} # 1887 - {8554, -1488} # 1888 - {8520, -1496} # 1889 - {8656, -1493} # 1890 - # Mesh "Font" - {-4141, -4926} # 1891 - {-4152, -4925} # 1892 - {-4161, -4921} # 1893 - {-4169, -4915} # 1894 - {-4175, -4907} # 1895 - {-4179, -4898} # 1896 - {-4180, -4888} # 1897 - {-4179, -4877} # 1898 - {-4175, -4868} # 1899 - {-4169, -4860} # 1900 - {-4161, -4854} # 1901 - {-4152, -4850} # 1902 - {-4141, -4848} # 1903 - {-4130, -4850} # 1904 - {-4120, -4853} # 1905 - {-4112, -4859} # 1906 - {-4106, -4867} # 1907 - {-4102, -4877} # 1908 - {-4101, -4888} # 1909 - {-4102, -4898} # 1910 - {-4106, -4908} # 1911 - {-4112, -4915} # 1912 - {-4120, -4921} # 1913 - {-4130, -4925} # 1914 - {-4141, -4913} # 1915 - {-4134, -4912} # 1916 - {-4128, -4909} # 1917 - {-4123, -4906} # 1918 - {-4119, -4901} # 1919 - {-4117, -4895} # 1920 - {-4116, -4888} # 1921 - {-4117, -4880} # 1922 - {-4119, -4874} # 1923 - {-4123, -4869} # 1924 - {-4128, -4865} # 1925 - {-4134, -4863} # 1926 - {-4141, -4862} # 1927 - {-4148, -4863} # 1928 - {-4154, -4865} # 1929 - {-4158, -4869} # 1930 - {-4162, -4874} # 1931 - {-4164, -4881} # 1932 - {-4165, -4888} # 1933 - {-4164, -4895} # 1934 - {-4162, -4901} # 1935 - {-4158, -4906} # 1936 - {-4154, -4909} # 1937 - {-4148, -4912} # 1938 - {-4525, -4964} # 1939 - {-4537, -4964} # 1940 - {-4585, -4850} # 1941 - {-4569, -4850} # 1942 - {-4555, -4883} # 1943 - {-4507, -4883} # 1944 - {-4491, -4850} # 1945 - {-4475, -4850} # 1946 - {-4531, -4939} # 1947 - {-4513, -4898} # 1948 - {-4548, -4898} # 1949 - {-4449, -4963} # 1950 - {-4464, -4963} # 1951 - {-4467, -4850} # 1952 - {-4451, -4849} # 1953 - {-4413, -4963} # 1954 - {-4428, -4963} # 1955 - {-4426, -4849} # 1956 - {-4410, -4851} # 1957 - {-4330, -4872} # 1958 - {-4334, -4869} # 1959 - {-4338, -4867} # 1960 - {-4342, -4865} # 1961 - {-4347, -4864} # 1962 - {-4351, -4863} # 1963 - {-4356, -4863} # 1964 - {-4362, -4863} # 1965 - {-4368, -4865} # 1966 - {-4373, -4868} # 1967 - {-4376, -4873} # 1968 - {-4379, -4878} # 1969 - {-4381, -4885} # 1970 - {-4328, -4885} # 1971 - {-4329, -4898} # 1972 - {-4332, -4908} # 1973 - {-4337, -4916} # 1974 - {-4343, -4921} # 1975 - {-4351, -4925} # 1976 - {-4361, -4926} # 1977 - {-4370, -4925} # 1978 - {-4379, -4921} # 1979 - {-4386, -4915} # 1980 - {-4391, -4908} # 1981 - {-4394, -4899} # 1982 - {-4395, -4888} # 1983 - {-4394, -4878} # 1984 - {-4391, -4869} # 1985 - {-4386, -4861} # 1986 - {-4379, -4854} # 1987 - {-4370, -4850} # 1988 - {-4359, -4848} # 1989 - {-4353, -4849} # 1990 - {-4348, -4849} # 1991 - {-4343, -4851} # 1992 - {-4338, -4852} # 1993 - {-4334, -4855} # 1994 - {-4330, -4857} # 1995 - {-4380, -4895} # 1996 - {-4379, -4900} # 1997 - {-4377, -4905} # 1998 - {-4374, -4908} # 1999 - {-4370, -4911} # 2000 - {-4365, -4913} # 2001 - {-4360, -4913} # 2002 - {-4355, -4913} # 2003 - {-4351, -4911} # 2004 - {-4348, -4908} # 2005 - {-4345, -4905} # 2006 - {-4344, -4900} # 2007 - {-4343, -4895} # 2008 - {-4253, -4924} # 2009 - {-4284, -4924} # 2010 - {-4293, -4924} # 2011 - {-4301, -4921} # 2012 - {-4307, -4918} # 2013 - {-4312, -4912} # 2014 - {-4315, -4906} # 2015 - {-4316, -4899} # 2016 - {-4316, -4896} # 2017 - {-4316, -4894} # 2018 - {-4315, -4891} # 2019 - {-4314, -4889} # 2020 - {-4313, -4887} # 2021 - {-4312, -4885} # 2022 - {-4311, -4883} # 2023 - {-4309, -4881} # 2024 - {-4307, -4879} # 2025 - {-4305, -4878} # 2026 - {-4302, -4877} # 2027 - {-4300, -4875} # 2028 - {-4300, -4875} # 2029 - {-4303, -4874} # 2030 - {-4306, -4873} # 2031 - {-4308, -4871} # 2032 - {-4310, -4869} # 2033 - {-4311, -4867} # 2034 - {-4311, -4864} # 2035 - {-4311, -4863} # 2036 - {-4311, -4861} # 2037 - {-4310, -4860} # 2038 - {-4308, -4858} # 2039 - {-4306, -4856} # 2040 - {-4304, -4855} # 2041 - {-4310, -4853} # 2042 - {-4315, -4851} # 2043 - {-4318, -4848} # 2044 - {-4321, -4844} # 2045 - {-4322, -4839} # 2046 - {-4323, -4834} # 2047 - {-4322, -4828} # 2048 - {-4318, -4823} # 2049 - {-4313, -4818} # 2050 - {-4306, -4815} # 2051 - {-4298, -4813} # 2052 - {-4288, -4812} # 2053 - {-4278, -4813} # 2054 - {-4269, -4815} # 2055 - {-4263, -4818} # 2056 - {-4257, -4823} # 2057 - {-4254, -4829} # 2058 - {-4253, -4836} # 2059 - {-4254, -4840} # 2060 - {-4255, -4844} # 2061 - {-4258, -4848} # 2062 - {-4262, -4852} # 2063 - {-4268, -4854} # 2064 - {-4275, -4856} # 2065 - {-4282, -4858} # 2066 - {-4287, -4859} # 2067 - {-4292, -4861} # 2068 - {-4295, -4862} # 2069 - {-4297, -4864} # 2070 - {-4298, -4866} # 2071 - {-4296, -4869} # 2072 - {-4292, -4871} # 2073 - {-4286, -4872} # 2074 - {-4280, -4874} # 2075 - {-4273, -4876} # 2076 - {-4267, -4880} # 2077 - {-4266, -4882} # 2078 - {-4264, -4884} # 2079 - {-4263, -4887} # 2080 - {-4261, -4890} # 2081 - {-4261, -4894} # 2082 - {-4260, -4897} # 2083 - {-4261, -4900} # 2084 - {-4261, -4902} # 2085 - {-4262, -4905} # 2086 - {-4264, -4908} # 2087 - {-4266, -4910} # 2088 - {-4268, -4913} # 2089 - {-4253, -4913} # 2090 - {-4274, -4899} # 2091 - {-4274, -4895} # 2092 - {-4275, -4891} # 2093 - {-4278, -4889} # 2094 - {-4281, -4886} # 2095 - {-4284, -4885} # 2096 - {-4288, -4885} # 2097 - {-4292, -4885} # 2098 - {-4296, -4886} # 2099 - {-4299, -4888} # 2100 - {-4301, -4891} # 2101 - {-4302, -4894} # 2102 - {-4303, -4898} # 2103 - {-4302, -4902} # 2104 - {-4301, -4905} # 2105 - {-4299, -4908} # 2106 - {-4296, -4910} # 2107 - {-4292, -4911} # 2108 - {-4288, -4912} # 2109 - {-4284, -4911} # 2110 - {-4281, -4910} # 2111 - {-4278, -4908} # 2112 - {-4276, -4905} # 2113 - {-4274, -4902} # 2114 - {-4268, -4834} # 2115 - {-4268, -4831} # 2116 - {-4270, -4829} # 2117 - {-4273, -4826} # 2118 - {-4277, -4825} # 2119 - {-4282, -4824} # 2120 - {-4288, -4824} # 2121 - {-4294, -4824} # 2122 - {-4299, -4825} # 2123 - {-4303, -4826} # 2124 - {-4306, -4829} # 2125 - {-4308, -4832} # 2126 - {-4309, -4835} # 2127 - {-4308, -4838} # 2128 - {-4307, -4841} # 2129 - {-4304, -4843} # 2130 - {-4301, -4845} # 2131 - {-4297, -4846} # 2132 - {-4292, -4846} # 2133 - {-4287, -4846} # 2134 - {-4282, -4845} # 2135 - {-4276, -4844} # 2136 - {-4272, -4842} # 2137 - {-4269, -4839} # 2138 - {-4240, -4924} # 2139 - {-4240, -4850} # 2140 - {-4226, -4850} # 2141 - {-4226, -4889} # 2142 - {-4225, -4895} # 2143 - {-4223, -4901} # 2144 - {-4220, -4905} # 2145 - {-4217, -4909} # 2146 - {-4212, -4911} # 2147 - {-4208, -4912} # 2148 - {-4206, -4912} # 2149 - {-4203, -4911} # 2150 - {-4201, -4910} # 2151 - {-4199, -4908} # 2152 - {-4196, -4907} # 2153 - {-4194, -4905} # 2154 - {-4186, -4917} # 2155 - {-4189, -4920} # 2156 - {-4192, -4922} # 2157 - {-4195, -4924} # 2158 - {-4198, -4925} # 2159 - {-4201, -4926} # 2160 - {-4204, -4926} # 2161 - {-4207, -4925} # 2162 - {-4211, -4924} # 2163 - {-4214, -4922} # 2164 - {-4218, -4918} # 2165 - {-4222, -4913} # 2166 - {-4225, -4907} # 2167 - {-4226, -4907} # 2168 - {-4226, -4924} # 2169 - # Mesh "Circle" - {7703, -2077} # 2170 - {7767, -2028} # 2171 - {7835, -2021} # 2172 - {7872, -2000} # 2173 - {7488, -2074} # 2174 - {7217, -2113} # 2175 - {6700, -2274} # 2176 - {7084, -2173} # 2177 - {7632, -1970} # 2178 - {7535, -2025} # 2179 - {7436, -2011} # 2180 - {7309, -2075} # 2181 - {7188, -2063} # 2182 - {7545, -2112} # 2183 - {6942, -2199} # 2184 - {6832, -2240} # 2185 - {7048, -2236} # 2186 - {6659, -2269} # 2187 - {7457, -2056} # 2188 - {6496, -2375} # 2189 - {7760, -1976} # 2190 - {7126, -2226} # 2191 - {7200, -2198} # 2192 - {7440, -2137} # 2193 - {6694, -2184} # 2194 - {6906, -2254} # 2195 - {7337, -2099} # 2196 - {7795, -2004} # 2197 - {7255, -2195} # 2198 - {7380, -2164} # 2199 - {7494, -2134} # 2200 - {7590, -2105} # 2201 - {7252, -2133} # 2202 - {7134, -2159} # 2203 - {7695, -2032} # 2204 - {6637, -2324} # 2205 - {7863, -1994} # 2206 - {7373, -2103} # 2207 - {7722, -2026} # 2208 - {7666, -2023} # 2209 - {7647, -2084} # 2210 - {6852, -2283} # 2211 - {6970, -2261} # 2212 - {6763, -2301} # 2213 - {7322, -2173} # 2214 - {6983, -2195} # 2215 - {6899, -2127} # 2216 - {6762, -2262} # 2217 - {7589, -2046} # 2218 - {7559, -2046} # 2219 - {6726, -2237} # 2220 - {6617, -2309} # 2221 - {7037, -2140} # 2222 - {6496, -2373} # 2223 + # Mesh "Curve" + {-7976, -4842} # 0 + {-7896, -4837} # 1 + {-7833, -4848} # 2 + {-7820, -4855} # 3 + {-7809, -4860} # 4 + {-7798, -4863} # 5 + {-7785, -4864} # 6 + {-7775, -4861} # 7 + {-7764, -4856} # 8 + {-7752, -4852} # 9 + {-7739, -4847} # 10 + {-7726, -4842} # 11 + {-7713, -4838} # 12 + {-7700, -4833} # 13 + {-7686, -4829} # 14 + {-7671, -4825} # 15 + {-7657, -4820} # 16 + {-7642, -4816} # 17 + {-7626, -4812} # 18 + {-7610, -4807} # 19 + {-7594, -4803} # 20 + {-7578, -4799} # 21 + {-7561, -4795} # 22 + {-7544, -4791} # 23 + {-7526, -4787} # 24 + {-7508, -4783} # 25 + {-7490, -4780} # 26 + {-7471, -4776} # 27 + {-7452, -4772} # 28 + {-7432, -4769} # 29 + {-7412, -4765} # 30 + {-7392, -4762} # 31 + {-7372, -4758} # 32 + {-7351, -4755} # 33 + {-7329, -4752} # 34 + {-7308, -4749} # 35 + {-7286, -4746} # 36 + {-7263, -4743} # 37 + {-7240, -4740} # 38 + {-7208, -4730} # 39 + {-7950, -4927} # 40 + {-7831, -4904} # 41 + {-7821, -4899} # 42 + {-7811, -4895} # 43 + {-7801, -4890} # 44 + {-7790, -4885} # 45 + {-7779, -4881} # 46 + {-7768, -4876} # 47 + {-7756, -4871} # 48 + {-7744, -4867} # 49 + {-7732, -4862} # 50 + {-7719, -4858} # 51 + {-7706, -4853} # 52 + {-7692, -4849} # 53 + {-7678, -4844} # 54 + {-7664, -4840} # 55 + {-7649, -4835} # 56 + {-7634, -4831} # 57 + {-7619, -4827} # 58 + {-7603, -4823} # 59 + {-7587, -4818} # 60 + {-7570, -4814} # 61 + {-7553, -4810} # 62 + {-7536, -4806} # 63 + {-7518, -4802} # 64 + {-7500, -4799} # 65 + {-7482, -4795} # 66 + {-7463, -4791} # 67 + {-7444, -4787} # 68 + {-7425, -4784} # 69 + {-7405, -4780} # 70 + {-7385, -4777} # 71 + {-7364, -4774} # 72 + {-7343, -4770} # 73 + {-7322, -4767} # 74 + {-7300, -4764} # 75 + {-7278, -4761} # 76 + {-7256, -4758} # 77 + {-7233, -4755} # 78 + {-7221, -4751} # 79 + # Mesh "Curve.001" + {-9671, -4205} # 80 + {-9804, -4116} # 81 + {7868, -869} # 82 + {-9920, -4028} # 83 + {6579, -1099} # 84 + {-9986, -3965} # 85 + {-8177, -3372} # 86 + {-10004, -3934} # 87 + {-10008, -3916} # 88 + {-10003, -3902} # 89 + {-9987, -3888} # 90 + {3821, -1480} # 91 + {-9942, -3877} # 92 + {7135, -1287} # 93 + {-9856, -3873} # 94 + {-5276, -2731} # 95 + {-7939, -3522} # 96 + {942, -1796} # 97 + {8242, -252} # 98 + {-9618, -3881} # 99 + {5428, -1221} # 100 + {5153, -952} # 101 + {89, -2120} # 102 + {-9517, -3880} # 103 + {522, -2130} # 104 + {-9446, -3874} # 105 + {-9668, -3811} # 106 + {-9384, -3863} # 107 + {-2265, -1535} # 108 + {-9332, -3846} # 109 + {6627, -1078} # 110 + {-9292, -3823} # 111 + {5889, -1772} # 112 + {-9269, -3801} # 113 + {-9251, -3776} # 114 + {7481, -1568} # 115 + {-9237, -3737} # 116 + {6947, -1134} # 117 + {-9232, -3694} # 118 + {9111, -54} # 119 + {-9236, -3626} # 120 + {2408, -1713} # 121 + {4219, -1683} # 122 + {-838, -1565} # 123 + {-9255, -3527} # 124 + {-5511, -2724} # 125 + {6825, -973} # 126 + {8425, -14} # 127 + {-9295, -3368} # 128 + {3222, -1395} # 129 + {5864, -1650} # 130 + {3406, -1141} # 131 + {3797, -1358} # 132 + {-9316, -3266} # 133 + {-8574, -2991} # 134 + {5703, -1686} # 135 + {-10232, -3837} # 136 + {-9324, -3172} # 137 + {-4825, -3035} # 138 + {3370, -1268} # 139 + {-5750, -2850} # 140 + {-9317, -3113} # 141 + {-9411, -3217} # 142 + {-9307, -3076} # 143 + {-10234, -3874} # 144 + {-9286, -3036} # 145 + {9608, -307} # 146 + {5560, -1505} # 147 + {-9257, -3004} # 148 + {5141, -1065} # 149 + {-9228, -2984} # 150 + {5927, -1764} # 151 + {-9193, -2968} # 152 + {5281, -1035} # 153 + {-9154, -2957} # 154 + {-8868, -2784} # 155 + {-9111, -2950} # 156 + {9820, -716} # 157 + {-9041, -2949} # 158 + {-5823, -2889} # 159 + {-155, -1985} # 160 + {7446, -1554} # 161 + {-8937, -2964} # 162 + {2705, -1820} # 163 + {7959, -471} # 164 + {-2144, -1463} # 165 + {-8827, -2995} # 166 + {9645, -367} # 167 + {-6542, -2744} # 168 + {9779, -274} # 169 + {-8713, -3030} # 170 + {-10198, -3816} # 171 + {9585, -68} # 172 + {9834, -638} # 173 + {-8590, -3090} # 174 + {3241, -1214} # 175 + {-2722, -1883} # 176 + {1580, -1461} # 177 + {-8462, -3173} # 178 + {5965, -1748} # 179 + {1647, -1459} # 180 + {4873, -1240} # 181 + {8188, -302} # 182 + {7822, -775} # 183 + {-8065, -3484} # 184 + {-8253, -3383} # 185 + {7410, -1430} # 186 + {797, -1928} # 187 + {5757, -1731} # 188 + {8655, -62} # 189 + {-8156, -3477} # 190 + {8351, -52} # 191 + {1417, -1493} # 192 + {-8065, -3561} # 193 + {4195, -1783} # 194 + {5902, -1642} # 195 + {-3806, -2563} # 196 + {-7946, -3632} # 197 + {4802, -1338} # 198 + {-7046, -2617} # 199 + {-7746, -3506} # 200 + {-7865, -3673} # 201 + {7136, -1184} # 202 + {-7785, -3704} # 203 + {9299, -100} # 204 + {-7723, -3710} # 205 + {-9143, -2731} # 206 + {-7674, -3702} # 207 + {-5460, -2712} # 208 + {-7614, -3684} # 209 + {5770, -1631} # 210 + {3315, -1293} # 211 + {-5644, -2786} # 212 + {-7550, -3634} # 213 + {-3714, -2492} # 214 + {6461, -1041} # 215 + {4556, -1681} # 216 + {-7482, -3544} # 217 + {-690, -1647} # 218 + {7045, -1207} # 219 + {9545, -239} # 220 + {-7414, -3385} # 221 + {9766, -886} # 222 + {-3618, -2428} # 223 + {3324, -1154} # 224 + {9471, -182} # 225 + {-7339, -3129} # 226 + {9802, -324} # 227 + {-10219, -3825} # 228 + {3497, -1273} # 229 + {8428, -134} # 230 + {-7261, -2977} # 231 + {2525, -1765} # 232 + {4307, -1696} # 233 + {-6109, -2931} # 234 + {-7187, -2877} # 235 + {-5195, -2769} # 236 + {4342, -1816} # 237 + {-4444, -3126} # 238 + {-7118, -2819} # 239 + {-6295, -2871} # 240 + {-7073, -2792} # 241 + {-10238, -3853} # 242 + {-7026, -2768} # 243 + {8921, -39} # 244 + {-6980, -2758} # 245 + {-9332, -2771} # 246 + {-6935, -2757} # 247 + {-9366, -2795} # 248 + {-6886, -2753} # 249 + {-8996, -2748} # 250 + {-6837, -2755} # 251 + {-7990, -3511} # 252 + {-6786, -2762} # 253 + {-6955, -2612} # 254 + {-6712, -2780} # 255 + {-4560, -3143} # 256 + {4310, -1818} # 257 + {3567, -1301} # 258 + {-6611, -2819} # 259 + {-5113, -2820} # 260 + {9388, -136} # 261 + {6675, -1066} # 262 + {-6517, -2865} # 263 + {4971, -992} # 264 + {-991, -1491} # 265 + {9493, -17} # 266 + {-6368, -2944} # 267 + {7639, -1504} # 268 + {6602, -957} # 269 + {4008, -1546} # 270 + {5190, -967} # 271 + {-6271, -2992} # 272 + {3279, -1180} # 273 + {-4482, -3137} # 274 + {1817, -1476} # 275 + {-6176, -3030} # 276 + {-6636, -2697} # 277 + {5305, -1157} # 278 + {-7128, -2663} # 279 + {-6085, -3053} # 280 + {-3206, -2202} # 281 + {4261, -1810} # 282 + {-4004, -2745} # 283 + {-6019, -3059} # 284 + {-7699, -3485} # 285 + {-5956, -3057} # 286 + {-4600, -3138} # 287 + {9394, 23} # 288 + {-4139, -2866} # 289 + {-5875, -3040} # 290 + {6153, -1415} # 291 + {9798, -799} # 292 + {-1300, -1377} # 293 + {-5798, -3010} # 294 + {5536, -1384} # 295 + {6440, -1204} # 296 + {-9337, -3595} # 297 + {-5725, -2971} # 298 + {4399, -1670} # 299 + {-5034, -2877} # 300 + {5604, -1480} # 301 + {-5899, -2919} # 302 + {-5620, -2907} # 303 + {7544, -1573} # 304 + {-10219, -3899} # 305 + {4531, -1560} # 306 + {-5552, -2871} # 307 + {2093, -1564} # 308 + {-9454, -3772} # 309 + {1148, -1628} # 310 + {-5480, -2843} # 311 + {-6044, -2938} # 312 + {4622, -1599} # 313 + {9701, -629} # 314 + {-5406, -2830} # 315 + {-4742, -3086} # 316 + {-9292, -2753} # 317 + {4170, -1662} # 318 + {-5330, -2833} # 319 + {-5355, -2711} # 320 + {3717, -1395} # 321 + {9290, 53} # 322 + {-5252, -2853} # 323 + {7515, -1472} # 324 + {4424, -1791} # 325 + {-3894, -2639} # 326 + {-5171, -2890} # 327 + {5452, -1343} # 328 + {5678, -1564} # 329 + {-9364, -3402} # 330 + {-5088, -2941} # 331 + {2751, -1824} # 332 + {7992, -576} # 333 + {3373, -1142} # 334 + {-5006, -3001} # 335 + {5732, -1609} # 336 + {-2017, -1404} # 337 + {8049, -478} # 338 + {7682, -1328} # 339 + {-4881, -3098} # 340 + {9185, 74} # 341 + {-14, -2068} # 342 + {-5980, -2936} # 343 + {-4801, -3156} # 344 + {4489, -1746} # 345 + {-9442, -2968} # 346 + {7482, -1465} # 347 + {-4717, -3208} # 348 + {345, -2178} # 349 + {-6737, -2658} # 350 + {-1453, -1345} # 351 + {-4635, -3245} # 352 + {8499, -104} # 353 + {1715, -1462} # 354 + {8678, 66} # 355 + {-4575, -3260} # 356 + {401, -2171} # 357 + {-4536, -3264} # 358 + {8003, -397} # 359 + {-4496, -3264} # 360 + {-10193, -3930} # 361 + {-4457, -3259} # 362 + {-9436, -2921} # 363 + {-4419, -3248} # 364 + {-6800, -2637} # 365 + {-4363, -3224} # 366 + {2879, -1802} # 367 + {7641, -1401} # 368 + {7272, -1315} # 369 + {-4288, -3175} # 370 + {-9344, -3646} # 371 + {5379, -1241} # 372 + {612, -2077} # 373 + {-4215, -3111} # 374 + {2833, -1818} # 375 + {8362, -168} # 376 + {-496, -1764} # 377 + {-4141, -3037} # 378 + {8050, -327} # 379 + {6003, -1724} # 380 + {8588, 45} # 381 + {7735, -1291} # 382 + {-3975, -2862} # 383 + {-9360, -3691} # 384 + {5178, -1073} # 385 + {8102, -262} # 386 + {9683, -764} # 387 + {6017, -1570} # 388 + {703, -2009} # 389 + {5068, -1074} # 390 + {-3870, -2760} # 391 + {5126, -945} # 392 + {5629, -1601} # 393 + {5842, -1769} # 394 + {-3782, -2684} # 395 + {3692, -1274} # 396 + {8740, -48} # 397 + {3450, -1146} # 398 + {-3689, -2614} # 399 + {4033, -1668} # 400 + {-10136, -3983} # 401 + {3562, -1190} # 402 + {-3593, -2549} # 403 + {8157, -201} # 404 + {9695, -695} # 405 + {4254, -1692} # 406 + {-3461, -2471} # 407 + {4919, -1037} # 408 + {-9586, -3805} # 409 + {6554, -977} # 410 + {457, -2156} # 411 + {7865, -666} # 412 + {3617, -1221} # 413 + {6763, -960} # 414 + {-3182, -2324} # 415 + {-9085, -2735} # 416 + {9646, -114} # 417 + {9820, -377} # 418 + {-9407, -3745} # 419 + {4944, -1159} # 420 + {6532, -1127} # 421 + {4102, -1620} # 422 + {-3018, -2228} # 423 + {4351, -1689} # 424 + {7409, -1533} # 425 + {-7652, -3458} # 426 + {9206, -73} # 427 + {-2870, -2131} # 428 + {-4909, -2974} # 429 + {4690, -1504} # 430 + {5044, -953} # 431 + {-7890, -3528} # 432 + {9682, -460} # 433 + {-2698, -2004} # 434 + {5817, -1648} # 435 + {-9380, -3719} # 436 + {6416, -1082} # 437 + {6297, -1373} # 438 + {-7585, -3409} # 439 + {5940, -1626} # 440 + {6948, -1031} # 441 + {-2396, -1766} # 442 + {7582, -1458} # 443 + {-9514, -3792} # 444 + {8575, -80} # 445 + {5105, -1066} # 446 + {3171, -1490} # 447 + {-6861, -2622} # 448 + {9685, -148} # 449 + {3513, -1166} # 450 + {-2241, -1656} # 451 + {1956, -1513} # 452 + {6377, -1272} # 453 + {-2120, -1584} # 454 + {6875, -992} # 455 + {-10001, -4085} # 456 + {7615, -1431} # 457 + {-1993, -1525} # 458 + {7355, -1389} # 459 + {-7417, -3073} # 460 + {9694, -512} # 461 + {-1860, -1482} # 462 + {-9424, -2879} # 463 + {-1602, -1331} # 464 + {-1756, -1463} # 465 + {9700, -569} # 466 + {-1685, -1455} # 467 + {-9847, -4188} # 468 + {-1577, -1452} # 469 + {9841, -566} # 470 + {4375, -1810} # 471 + {-1428, -1466} # 472 + {-4521, -3143} # 473 + {7664, -1363} # 474 + {1264, -1556} # 475 + {-1276, -1499} # 476 + {-1710, -1334} # 477 + {7918, -548} # 478 + {4597, -1478} # 479 + {-1121, -1548} # 480 + {278, -2177} # 481 + {-1885, -1361} # 482 + {9016, -43} # 483 + {-966, -1612} # 484 + {8282, -96} # 485 + {6486, -1162} # 486 + {1354, -1515} # 487 + {-814, -1687} # 488 + {-1781, -1341} # 489 + {7353, -1492} # 490 + {3197, -1273} # 491 + {-666, -1768} # 492 + {2633, -1804} # 493 + {-10161, -3808} # 494 + {6042, -1691} # 495 + {-472, -1886} # 496 + {9079, 87} # 497 + {-4313, -3053} # 498 + {1039, -1712} # 499 + {7580, -1561} # 500 + {8217, -146} # 501 + {-7841, -3527} # 502 + {9752, -228} # 503 + {3642, -1343} # 504 + {-130, -2106} # 505 + {9720, -186} # 506 + {5007, -969} # 507 + {8772, 81} # 508 + {6273, -1251} # 509 + {-7227, -2754} # 510 + {5083, -944} # 511 + {11, -2190} # 512 + {3146, -1369} # 513 + {-3042, -2106} # 514 + {2949, -1753} # 515 + {113, -2242} # 516 + {4127, -1741} # 517 + {-9342, -3516} # 518 + {7546, -1470} # 519 + {210, -2279} # 520 + {5354, -1119} # 521 + {-2895, -2010} # 522 + {-4660, -3123} # 523 + {303, -2298} # 524 + {4465, -1625} # 525 + {5252, -1111} # 526 + {370, -2299} # 527 + {8092, -415} # 528 + {426, -2293} # 529 + {6177, -1536} # 530 + {8973, 92} # 531 + {481, -2278} # 532 + {186, -2157} # 533 + {547, -2251} # 534 + {8871, 89} # 535 + {6774, -1065} # 536 + {6724, -1061} # 537 + {636, -2199} # 538 + {-1146, -1427} # 539 + {7270, -1418} # 540 + {7663, -1466} # 541 + {727, -2131} # 542 + {6098, -1635} # 543 + {-7508, -3320} # 544 + {6352, -1151} # 545 + {822, -2050} # 546 + {-2420, -1645} # 547 + {7447, -1451} # 548 + {-6201, -2908} # 549 + {6507, -1006} # 550 + {967, -1918} # 551 + {9840, -498} # 552 + {7047, -1104} # 553 + {5979, -1602} # 554 + {1064, -1833} # 555 + {3032, -1634} # 556 + {7513, -1575} # 557 + {4848, -1119} # 558 + {1172, -1750} # 559 + {5227, -990} # 560 + {2987, -1708} # 561 + {1288, -1678} # 562 + {-9247, -2740} # 563 + {5032, -1090} # 564 + {8138, -356} # 565 + {1379, -1636} # 566 + {4665, -1383} # 567 + {1442, -1614} # 568 + {-9197, -2733} # 569 + {1522, -1594} # 570 + {-9443, -3019} # 571 + {5215, -1088} # 572 + {1605, -1583} # 573 + {-9435, -3099} # 574 + {1672, -1580} # 575 + {-10061, -3803} # 576 + {1740, -1583} # 577 + {8829, -41} # 578 + {1842, -1597} # 579 + {2218, -1621} # 580 + {3266, -1336} # 581 + {2794, -1824} # 582 + {1980, -1634} # 583 + {-5577, -2750} # 584 + {-5422, -2708} # 585 + {3430, -1262} # 586 + {2117, -1686} # 587 + {6651, -944} # 588 + {7925, -719} # 589 + {7751, -1042} # 590 + {2243, -1742} # 591 + {8504, 18} # 592 + {4777, -1217} # 593 + {7695, -1399} # 594 + {2432, -1834} # 595 + {9636, -920} # 596 + {6711, -940} # 597 + {6074, -1513} # 598 + {9666, -412} # 599 + {2550, -1887} # 600 + {3071, -1550} # 601 + {6874, -1095} # 602 + {9833, -435} # 603 + {2658, -1925} # 604 + {-7324, -2860} # 605 + {-4240, -2990} # 606 + {1497, -1472} # 607 + {2730, -1941} # 608 + {9663, -839} # 609 + {2776, -1946} # 610 + {-6393, -2823} # 611 + {2819, -1945} # 612 + {5795, -1753} # 613 + {2858, -1939} # 614 + {7614, -1534} # 615 + {2903, -1924} # 616 + {4996, -1114} # 617 + {2919, -1778} # 618 + {2944, -1899} # 619 + {-9400, -2833} # 620 + {2973, -1874} # 621 + {-7793, -3520} # 622 + {3012, -1830} # 623 + {6823, -1076} # 624 + {-4388, -3102} # 625 + {8601, -2092} # 626 + {3057, -1756} # 627 + {-3486, -2350} # 628 + {-9785, -3813} # 629 + {8300, -208} # 630 + {3096, -1672} # 631 + {8938, -1583} # 632 + {9424, -1181} # 633 + {8734, -1822} # 634 + {9547, -1068} # 635 + {9177, -1328} # 636 + {8650, -1950} # 637 + {8842, -1705} # 638 + {8787, -1764} # 639 + {8894, -1646} # 640 + {9492, -1124} # 641 + {9603, -998} # 642 + {9315, -1241} # 643 + {9029, -1468} # 644 + {8687, -1884} # 645 + {8625, -2021} # 646 + {8985, -1902} # 647 + {8938, -1964} # 648 + {8902, -2030} # 649 + {9308, -1412} # 650 + {9412, -1329} # 651 + {9485, -1281} # 652 + {9057, -1774} # 653 + {9091, -1715} # 654 + {9139, -1641} # 655 + {9024, -1832} # 656 + {9598, -1171} # 657 + {9549, -1228} # 658 + {9213, -1521} # 659 + {8379, -3204} # 660 + {8655, -2585} # 661 + {-4258, -3139} # 662 + {-4179, -3071} # 663 + {-4060, -2952} # 664 + {-4099, -2990} # 665 + {-4024, -2911} # 666 + {-3943, -2832} # 667 + {-4171, -3038} # 668 + {-4020, -2869} # 669 + {-4248, -3109} # 670 + {-4284, -3141} # 671 + {-4208, -3075} # 672 + {-4091, -2955} # 673 + {-4131, -2997} # 674 + {-4053, -2915} # 675 + {-3972, -2833} # 676 + {10071, -3541} # 677 + {10347, -2921} # 678 + {-10350, -4354} # 679 + {-10526, -4338} # 680 + {-8340, -3297} # 681 + {-8357, -3157} # 682 + # Mesh "CurveCircle" + {8795, -42} # 683 + {8796, -63} # 684 + {8799, -76} # 685 + {8803, -89} # 686 + {8809, -101} # 687 + {8816, -112} # 688 + {8825, -122} # 689 + {8835, -130} # 690 + {8846, -138} # 691 + {8858, -144} # 692 + {8870, -148} # 693 + {8884, -151} # 694 + {8898, -152} # 695 + {8912, -151} # 696 + {8925, -148} # 697 + {8938, -144} # 698 + {8950, -138} # 699 + {8960, -130} # 700 + {8970, -122} # 701 + {8979, -112} # 702 + {8986, -101} # 703 + {8992, -89} # 704 + {8997, -76} # 705 + {8999, -63} # 706 + {9001, -41} # 707 + {8879, -170} # 708 + {8898, -171} # 709 + {8916, -170} # 710 + {8861, -166} # 711 + {8934, -166} # 712 + {8844, -160} # 713 + {8951, -160} # 714 + {8828, -153} # 715 + {8967, -153} # 716 + {8814, -143} # 717 + {8981, -143} # 718 + {8801, -131} # 719 + {8994, -131} # 720 + {8789, -118} # 721 + {9006, -118} # 722 + {8779, -103} # 723 + {9016, -103} # 724 + {8771, -88} # 725 + {9024, -88} # 726 + {8765, -71} # 727 + {9030, -71} # 728 + {8762, -53} # 729 + {9033, -53} # 730 + {8762, -45} # 731 + {9034, -44} # 732 + # Mesh "Font.001" + {2890, -2260} # 733 + {2874, -2268} # 734 + {1770, -2158} # 735 + {2773, -2201} # 736 + {2681, -2173} # 737 + {2438, -2114} # 738 + {2166, -2051} # 739 + {2844, -2266} # 740 + {2236, -2143} # 741 + {1508, -2234} # 742 + {1686, -2105} # 743 + {2833, -2249} # 744 + {2132, -2013} # 745 + {2837, -2231} # 746 + {2314, -2088} # 747 + {2311, -2071} # 748 + {2874, -2201} # 749 + {1664, -2190} # 750 + {2535, -2189} # 751 + {2484, -2156} # 752 + {2395, -2173} # 753 + {1353, -2255} # 754 + {2860, -2191} # 755 + {2745, -2268} # 756 + {2037, -2091} # 757 + {2506, -2208} # 758 + {2831, -2202} # 759 + {2590, -2214} # 760 + {1923, -2095} # 761 + {2765, -2260} # 762 + {2629, -2184} # 763 + {2829, -2185} # 764 + {1640, -2229} # 765 + {2474, -2170} # 766 + {2505, -2153} # 767 + {2864, -2175} # 768 + {2187, -2092} # 769 + {1643, -2213} # 770 + {1539, -2194} # 771 + {2193, -2054} # 772 + {2883, -2184} # 773 + {1479, -2337} # 774 + {2891, -2202} # 775 + {2113, -2014} # 776 + {1603, -2275} # 777 + {2553, -2174} # 778 + {2883, -2218} # 779 + {1575, -2237} # 780 + {1898, -2093} # 781 + {2310, -2136} # 782 + {2851, -2242} # 783 + {1933, -2012} # 784 + {1604, -2309} # 785 + {2488, -2226} # 786 + {1627, -2131} # 787 + {2433, -2182} # 788 + {2855, -2254} # 789 + {2219, -2139} # 790 + {1734, -2156} # 791 + {1336, -2266} # 792 + {2767, -2180} # 793 + {2453, -2187} # 794 + {2618, -2162} # 795 + {2887, -2245} # 796 + {1883, -2118} # 797 + {2305, -2114} # 798 + {2180, -2127} # 799 + {2376, -2074} # 800 + {653, -2528} # 801 + {641, -2521} # 802 + {656, -2373} # 803 + {673, -2382} # 804 + {669, -2426} # 805 + {720, -2454} # 806 + {755, -2427} # 807 + {773, -2437} # 808 + {661, -2498} # 809 + {704, -2465} # 810 + {667, -2445} # 811 + {764, -2567} # 812 + {747, -2561} # 813 + {790, -2431} # 814 + {806, -2437} # 815 + {817, -2579} # 816 + {800, -2575} # 817 + {832, -2443} # 818 + {849, -2447} # 819 + {943, -2485} # 820 + {1705, -2101} # 821 + {2315, -2150} # 822 + {2113, -2073} # 823 + {2581, -2249} # 824 + {913, -2474} # 825 + {1804, -2039} # 826 + {1564, -2172} # 827 + {2166, -2065} # 828 + {889, -2479} # 829 + {1685, -2192} # 830 + {2188, -2083} # 831 + {881, -2494} # 832 + {944, -2504} # 833 + {932, -2537} # 834 + {1570, -2308} # 835 + {1717, -2098} # 836 + {1865, -2112} # 837 + {904, -2547} # 838 + {2334, -2050} # 839 + {876, -2538} # 840 + {2280, -2130} # 841 + {1751, -2065} # 842 + {863, -2514} # 843 + {1728, -2178} # 844 + {868, -2476} # 845 + {2113, -2091} # 846 + {1662, -2216} # 847 + {2421, -2109} # 848 + {905, -2452} # 849 + {2389, -2192} # 850 + {2418, -2205} # 851 + {1462, -2347} # 852 + {2601, -2237} # 853 + {947, -2469} # 854 + {2706, -2272} # 855 + {2392, -2078} # 856 + {2810, -2193} # 857 + {879, -2510} # 858 + {2358, -2123} # 859 + {2389, -2060} # 860 + {2313, -2049} # 861 + {897, -2531} # 862 + {2359, -2182} # 863 + {1562, -2203} # 864 + {2748, -2216} # 865 + {918, -2527} # 866 + {1753, -2167} # 867 + {1652, -2277} # 868 + {1860, -2032} # 869 + {924, -2513} # 870 + {1045, -2541} # 871 + {988, -2541} # 872 + {1329, -2327} # 873 + {2808, -2209} # 874 + {2213, -2053} # 875 + {967, -2520} # 876 + {2674, -2210} # 877 + {1549, -2217} # 878 + {2372, -2187} # 879 + {2226, -2050} # 880 + {971, -2495} # 881 + {2800, -2263} # 882 + {2579, -2153} # 883 + {1612, -2141} # 884 + {1672, -2153} # 885 + {2503, -2132} # 886 + {1656, -2145} # 887 + {984, -2484} # 888 + {2367, -2057} # 889 + {2133, -2150} # 890 + {2561, -2157} # 891 + {1659, -2112} # 892 + {2730, -2245} # 893 + {2543, -2154} # 894 + {2518, -2220} # 895 + {971, -2468} # 896 + {2246, -2115} # 897 + {1421, -2372} # 898 + {1512, -2202} # 899 + {2320, -2108} # 900 + {2260, -2057} # 901 + {1932, -2081} # 902 + {975, -2459} # 903 + {1330, -2403} # 904 + {1529, -2212} # 905 + {1900, -2114} # 906 + {956, -2437} # 907 + {1916, -2017} # 908 + {1542, -2313} # 909 + {2224, -2059} # 910 + {967, -2415} # 911 + {2293, -2136} # 912 + {1717, -2163} # 913 + {1005, -2405} # 914 + {1305, -2359} # 915 + {1415, -2317} # 916 + {2537, -2170} # 917 + {1033, -2416} # 918 + {2037, -2150} # 919 + {1041, -2432} # 920 + {2514, -2195} # 921 + {2037, -2073} # 922 + {1033, -2453} # 923 + {1490, -2232} # 924 + {1534, -2286} # 925 + {2360, -2153} # 926 + {2464, -2150} # 927 + {989, -2468} # 928 + {2687, -2268} # 929 + {1677, -2141} # 930 + {2592, -2205} # 931 + {2243, -2052} # 932 + {2571, -2186} # 933 + {992, -2477} # 934 + {2366, -2041} # 935 + {2791, -2239} # 936 + {1025, -2486} # 937 + {2267, -2154} # 938 + {2036, -2014} # 939 + {1713, -2154} # 940 + {2572, -2173} # 941 + {1036, -2513} # 942 + {2558, -2191} # 943 + {2199, -2114} # 944 + {1325, -2345} # 945 + {2584, -2230} # 946 + {1824, -2132} # 947 + {2330, -2156} # 948 + {1882, -2104} # 949 + {1026, -2528} # 950 + {1044, -2527} # 951 + {1915, -2110} # 952 + {1364, -2381} # 953 + {2640, -2259} # 954 + {1008, -2495} # 955 + {2363, -2169} # 956 + {1621, -2228} # 957 + {1702, -2193} # 958 + {989, -2498} # 959 + {1950, -2080} # 960 + {2786, -2254} # 961 + {1568, -2327} # 962 + {983, -2514} # 963 + {1618, -2219} # 964 + {2463, -2213} # 965 + {2017, -2150} # 966 + {992, -2521} # 967 + {2321, -2122} # 968 + {2113, -2150} # 969 + {1009, -2525} # 970 + {2341, -2126} # 971 + {1554, -2234} # 972 + {2345, -2163} # 973 + {1020, -2511} # 974 + {2346, -2145} # 975 + {1023, -2430} # 976 + {2326, -2064} # 977 + {2632, -2174} # 978 + {1011, -2421} # 979 + {2331, -2095} # 980 + {2377, -2095} # 981 + {1768, -2099} # 982 + {978, -2425} # 983 + {2305, -2163} # 984 + {1700, -2177} # 985 + {2584, -2171} # 986 + {1673, -2119} # 987 + {975, -2441} # 988 + {2405, -2163} # 989 + {1404, -2383} # 990 + {1705, -2139} # 991 + {990, -2449} # 992 + {2326, -2085} # 993 + {2745, -2239} # 994 + {2484, -2209} # 995 + {1019, -2443} # 996 + {1877, -2027} # 997 + {1805, -2109} # 998 + {2602, -2167} # 999 + {1073, -2530} # 1000 + {1074, -2431} # 1001 + {1092, -2431} # 1002 + {1093, -2490} # 1003 + {1578, -2162} # 1004 + {1351, -2400} # 1005 + {2327, -2037} # 1006 + {1108, -2509} # 1007 + {2177, -2046} # 1008 + {1350, -2350} # 1009 + {2285, -2148} # 1010 + {2809, -2229} # 1011 + {1812, -2138} # 1012 + {2142, -2091} # 1013 + {1124, -2496} # 1014 + {2552, -2241} # 1015 + {1136, -2509} # 1016 + {1122, -2523} # 1017 + {2599, -2177} # 1018 + {2171, -2032} # 1019 + {2437, -2199} # 1020 + {1614, -2292} # 1021 + {2242, -2124} # 1022 + {1897, -2102} # 1023 + {1102, -2521} # 1024 + {2150, -2121} # 1025 + {2621, -2256} # 1026 + {2211, -2038} # 1027 + {1087, -2506} # 1028 + {2181, -2108} # 1029 + {1090, -2527} # 1030 + {1180, -2499} # 1031 + {1668, -2130} # 1032 + {1820, -2074} # 1033 + {1693, -2091} # 1034 + {1141, -2473} # 1035 + {1647, -2197} # 1036 + {1940, -2104} # 1037 + {1649, -2127} # 1038 + {1139, -2435} # 1039 + {1690, -2115} # 1040 + {1157, -2411} # 1041 + {1504, -2254} # 1042 + {2260, -2136} # 1043 + {1197, -2403} # 1044 + {1396, -2305} # 1045 + {2338, -2077} # 1046 + {1231, -2429} # 1047 + {1357, -2333} # 1048 + {2546, -2210} # 1049 + {2732, -2206} # 1050 + {1227, -2477} # 1051 + {1712, -2090} # 1052 + {1369, -2409} # 1053 + {2413, -2186} # 1054 + {1206, -2474} # 1055 + {2147, -2054} # 1056 + {2562, -2227} # 1057 + {2017, -2014} # 1058 + {1216, -2450} # 1059 + {2541, -2227} # 1060 + {2154, -2037} # 1061 + {1200, -2420} # 1062 + {2402, -2192} # 1063 + {1338, -2418} # 1064 + {1383, -2372} # 1065 + {2138, -2109} # 1066 + {1163, -2426} # 1067 + {2154, -2071} # 1068 + {1589, -2298} # 1069 + {2160, -2107} # 1070 + {1155, -2447} # 1071 + {2249, -2143} # 1072 + {1162, -2472} # 1073 + {2773, -2275} # 1074 + {1552, -2296} # 1075 + {2189, -2042} # 1076 + {2619, -2177} # 1077 + {1362, -2463} # 1078 + {1346, -2472} # 1079 + {1283, -2356} # 1080 + {1298, -2341} # 1081 + {1676, -2176} # 1082 + {2469, -2185} # 1083 + {2330, -2104} # 1084 + {1637, -2287} # 1085 + # Mesh "Mesh.001" + {5150, -2933} # 1086 + {4451, -3076} # 1087 + {6162, -2416} # 1088 + {6442, -2299} # 1089 + {4211, -3369} # 1090 + {4386, -3203} # 1091 + {5637, -2540} # 1092 + {4079, -3456} # 1093 + {4106, -3524} # 1094 + {4160, -3495} # 1095 + {5780, -2526} # 1096 + {4181, -3401} # 1097 + {6442, -2375} # 1098 + {3210, -3964} # 1099 + {4333, -3266} # 1100 + {3743, -3509} # 1101 + {3914, -3469} # 1102 + {3702, -3530} # 1103 + {4079, -3532} # 1104 + {3393, -3859} # 1105 + {3863, -3474} # 1106 + {4416, -3176} # 1107 + {3702, -3606} # 1108 + {3210, -3888} # 1109 + {6311, -2316} # 1110 + {3563, -3709} # 1111 + {5376, -2811} # 1112 + {4614, -3096} # 1113 + {4303, -3232} # 1114 + {5850, -2497} # 1115 + {3784, -3493} # 1116 + {3563, -3633} # 1117 + {5496, -2696} # 1118 + {5150, -3008} # 1119 + {5289, -2869} # 1120 + {5605, -2646} # 1121 + {4358, -3158} # 1122 + {3824, -3557} # 1123 + {4303, -3308} # 1124 + {4358, -3234} # 1125 + {3393, -3783} # 1126 + {4106, -3448} # 1127 + {3304, -3846} # 1128 + {3784, -3569} # 1129 + {5780, -2450} # 1130 + {3914, -3545} # 1131 + {3349, -3817} # 1132 + {4484, -3134} # 1133 + {5935, -2393} # 1134 + {5723, -2555} # 1135 + {3133, -3967} # 1136 + {3304, -3922} # 1137 + {3824, -3481} # 1138 + {3450, -3812} # 1139 + {5079, -2956} # 1140 + {5221, -2979} # 1141 + {3257, -3870} # 1142 + {5337, -2838} # 1143 + {5605, -2570} # 1144 + {5289, -2944} # 1145 + {3450, -3736} # 1146 + {4248, -3393} # 1147 + {4614, -3020} # 1148 + {5565, -2612} # 1149 + {4010, -3541} # 1150 + {4520, -3043} # 1151 + {4846, -2998} # 1152 + {5496, -2772} # 1153 + {5412, -2857} # 1154 + {4484, -3058} # 1155 + {3172, -3971} # 1156 + {3257, -3946} # 1157 + {5008, -3049} # 1158 + {4134, -3436} # 1159 + {3863, -3550} # 1160 + {3620, -3586} # 1161 + {3743, -3585} # 1162 + {5676, -2510} # 1163 + {3620, -3662} # 1164 + {4565, -3030} # 1165 + {6162, -2340} # 1166 + {6038, -2366} # 1167 + {4939, -2986} # 1168 + {3112, -3902} # 1169 + {5337, -2914} # 1170 + {6311, -2392} # 1171 + {5565, -2688} # 1172 + {5451, -2820} # 1173 + {4333, -3190} # 1174 + {4451, -3152} # 1175 + {4010, -3465} # 1176 + {5079, -3032} # 1177 + {4050, -3537} # 1178 + {4846, -3074} # 1179 + {4939, -3062} # 1180 + {5412, -2781} # 1181 + {4386, -3128} # 1182 + {5850, -2421} # 1183 + {4416, -3100} # 1184 + {5723, -2480} # 1185 + {6038, -2441} # 1186 + {4050, -3461} # 1187 + {3661, -3632} # 1188 + {4683, -3011} # 1189 + {4160, -3419} # 1190 + {5376, -2887} # 1191 + {5637, -2615} # 1192 + {4520, -3119} # 1193 + {5935, -2468} # 1194 + {4683, -3087} # 1195 + {4181, -3477} # 1196 + {4211, -3445} # 1197 + {4565, -3105} # 1198 + {5451, -2745} # 1199 + {5676, -2585} # 1200 + {3349, -3892} # 1201 + {3661, -3556} # 1202 + {3161, -3899} # 1203 + {4134, -3512} # 1204 + {5221, -2904} # 1205 + {4248, -3318} # 1206 + {5008, -2973} # 1207 + {3113, -3961} # 1208 + {3097, -3901} # 1209 + {3098, -3939} # 1210 + # Mesh "Mesh.002" + {-8913, -4174} # 1211 + {-8700, -4273} # 1212 + {-8547, -4340} # 1213 + {-8408, -4397} # 1214 + {-8913, -4099} # 1215 + {-8282, -4446} # 1216 + {-8168, -4488} # 1217 + {-8014, -4538} # 1218 + {-3073, -4596} # 1219 + {-7839, -4587} # 1220 + {-8547, -4264} # 1221 + {-7689, -4622} # 1222 + {-4225, -4690} # 1223 + {-7559, -4645} # 1224 + {-7443, -4662} # 1225 + {-7336, -4673} # 1226 + {-7232, -4681} # 1227 + {-7145, -4683} # 1228 + {-7073, -4679} # 1229 + {-7008, -4672} # 1230 + {-2768, -4699} # 1231 + {-6947, -4663} # 1232 + {-6883, -4648} # 1233 + {-6801, -4623} # 1234 + {-6596, -4478} # 1235 + {-6659, -4571} # 1236 + {-7008, -4597} # 1237 + {-6596, -4554} # 1238 + {-6416, -4493} # 1239 + {-3114, -4601} # 1240 + {-6548, -4547} # 1241 + {-6192, -4633} # 1242 + {-7443, -4586} # 1243 + {-6507, -4547} # 1244 + {-6465, -4554} # 1245 + {-6416, -4569} # 1246 + {-4037, -4764} # 1247 + {-6367, -4592} # 1248 + {-4098, -4736} # 1249 + {-5749, -4738} # 1250 + {-6317, -4621} # 1251 + {-4287, -4677} # 1252 + {-7559, -4569} # 1253 + {-6267, -4655} # 1254 + {-4901, -4738} # 1255 + {-6190, -4710} # 1256 + {-6139, -4744} # 1257 + {-6084, -4776} # 1258 + {-3621, -4886} # 1259 + {-6028, -4802} # 1260 + {-5478, -4660} # 1261 + {-5971, -4820} # 1262 + {-8282, -4370} # 1263 + {-5920, -4829} # 1264 + {-5868, -4831} # 1265 + {-8168, -4412} # 1266 + {-5809, -4826} # 1267 + {-6947, -4587} # 1268 + {-4961, -4726} # 1269 + {-5749, -4814} # 1270 + {-7153, -4606} # 1271 + {-5689, -4797} # 1272 + {-5868, -4755} # 1273 + {-5599, -4768} # 1274 + {-3031, -4596} # 1275 + {-3655, -4890} # 1276 + {-5541, -4751} # 1277 + {-6507, -4472} # 1278 + {-5478, -4736} # 1279 + {-5406, -4725} # 1280 + {-5809, -4750} # 1281 + {-5350, -4723} # 1282 + {-5302, -4725} # 1283 + {-3405, -4774} # 1284 + {-4406, -4674} # 1285 + {-5238, -4732} # 1286 + {-5174, -4745} # 1287 + {-2630, -4786} # 1288 + {-5115, -4760} # 1289 + {-3206, -4633} # 1290 + {-5022, -4786} # 1291 + {-5350, -4647} # 1292 + {-6028, -4726} # 1293 + {-7073, -4603} # 1294 + {-4961, -4802} # 1295 + {-4901, -4814} # 1296 + {-4841, -4821} # 1297 + {-4782, -4822} # 1298 + {-3698, -4890} # 1299 + {-4724, -4818} # 1300 + {-4668, -4809} # 1301 + {-4521, -4695} # 1302 + {-4611, -4795} # 1303 + {-5174, -4669} # 1304 + {-4521, -4771} # 1305 + {-4464, -4758} # 1306 + {-4406, -4750} # 1307 + {-5689, -4721} # 1308 + {-4347, -4747} # 1309 + {-6465, -4478} # 1310 + {-4287, -4753} # 1311 + {-4225, -4766} # 1312 + {-2983, -4603} # 1313 + {-4161, -4786} # 1314 + {-4098, -4812} # 1315 + {-4037, -4840} # 1316 + {-3943, -4887} # 1317 + {-2836, -4660} # 1318 + {-3880, -4916} # 1319 + {-3817, -4940} # 1320 + {-3756, -4957} # 1321 + {-8014, -4462} # 1322 + {-3698, -4966} # 1323 + {-3655, -4965} # 1324 + {-3621, -4962} # 1325 + {-3587, -4954} # 1326 + {-3548, -4940} # 1327 + {-8700, -4197} # 1328 + {-3498, -4915} # 1329 + {-3548, -4864} # 1330 + {-3451, -4884} # 1331 + {-3817, -4864} # 1332 + {-3405, -4850} # 1333 + {-4161, -4710} # 1334 + {-3310, -4775} # 1335 + {-2885, -4636} # 1336 + {-4724, -4742} # 1337 + {-3251, -4734} # 1338 + {-5302, -4649} # 1339 + {-3206, -4709} # 1340 + {-3160, -4689} # 1341 + {-5022, -4710} # 1342 + {-4668, -4733} # 1343 + {-3114, -4677} # 1344 + {-5920, -4753} # 1345 + {-6301, -4556} # 1346 + {-3073, -4672} # 1347 + {-5238, -4657} # 1348 + {-3031, -4672} # 1349 + {-5541, -4675} # 1350 + {-2983, -4679} # 1351 + {-4611, -4719} # 1352 + {-4347, -4672} # 1353 + {-2934, -4692} # 1354 + {-2885, -4712} # 1355 + {-7839, -4512} # 1356 + {-2836, -4736} # 1357 + {-2768, -4775} # 1358 + {-3251, -4659} # 1359 + {-6139, -4668} # 1360 + {-3943, -4811} # 1361 + {-2630, -4861} # 1362 + {-6084, -4701} # 1363 + {-6367, -4516} # 1364 + {-2563, -4899} # 1365 + {-3310, -4699} # 1366 + {-7689, -4546} # 1367 + {-2511, -4924} # 1368 + {-6801, -4548} # 1369 + {-2458, -4943} # 1370 + {-6548, -4471} # 1371 + {-2416, -4931} # 1372 + {-6659, -4495} # 1373 + {-5599, -4692} # 1374 + {-5971, -4745} # 1375 + {-2511, -4848} # 1376 + {-3498, -4839} # 1377 + {-8408, -4321} # 1378 + {-3880, -4840} # 1379 + {-5406, -4650} # 1380 + {-3160, -4614} # 1381 + {-3587, -4878} # 1382 + {-7240, -4604} # 1383 + {-2934, -4617} # 1384 + {-4782, -4746} # 1385 + {-2458, -4867} # 1386 + {-3756, -4882} # 1387 + {-5115, -4684} # 1388 + {-7336, -4597} # 1389 + {-4464, -4682} # 1390 + {-4841, -4745} # 1391 + {-6883, -4572} # 1392 + {-2563, -4823} # 1393 + {-3451, -4808} # 1394 + {-2405, -4878} # 1395 + # Mesh "Mesh.003" + {868, -4128} # 1396 + {-1919, -4607} # 1397 + {2514, -3604} # 1398 + {2998, -3936} # 1399 + {-461, -4430} # 1400 + {-665, -4381} # 1401 + {2334, -3510} # 1402 + {2365, -3576} # 1403 + {2116, -3719} # 1404 + {2286, -3535} # 1405 + {43, -4343} # 1406 + {-1979, -4670} # 1407 + {2917, -3914} # 1408 + {-2310, -4877} # 1409 + {1080, -4152} # 1410 + {-1045, -4051} # 1411 + {-1334, -4013} # 1412 + {2475, -3587} # 1413 + {2863, -3802} # 1414 + {617, -4133} # 1415 + {2334, -3585} # 1416 + {1790, -4084} # 1417 + {428, -4145} # 1418 + {2205, -3606} # 1419 + {504, -4181} # 1420 + {2160, -3735} # 1421 + {-513, -4501} # 1422 + {1298, -4197} # 1423 + {-1182, -3985} # 1424 + {-1263, -3988} # 1425 + {2787, -3820} # 1426 + {2448, -3579} # 1427 + {-2156, -4816} # 1428 + {2310, -3596} # 1429 + {-1581, -4221} # 1430 + {1919, -4050} # 1431 + {1790, -4160} # 1432 + {-622, -4400} # 1433 + {-1455, -4097} # 1434 + {2160, -3660} # 1435 + {1873, -4020} # 1436 + {562, -4154} # 1437 + {1694, -4133} # 1438 + {-2212, -4847} # 1439 + {428, -4220} # 1440 + {2422, -3575} # 1441 + {-702, -4362} # 1442 + {1419, -4192} # 1443 + {2567, -3637} # 1444 + {1521, -4179} # 1445 + {-408, -4507} # 1446 + {-88, -4386} # 1447 + {-356, -4506} # 1448 + {1252, -4194} # 1449 + {2863, -3878} # 1450 + {-303, -4426} # 1451 + {-565, -4492} # 1452 + {1346, -4196} # 1453 + {1832, -4130} # 1454 + {2251, -3637} # 1455 + {-356, -4430} # 1456 + {2286, -3610} # 1457 + {1644, -4226} # 1458 + {1163, -4180} # 1459 + {1521, -4255} # 1460 + {2116, -3795} # 1461 + {-2268, -4868} # 1462 + {-999, -4091} # 1463 + {-2351, -4881} # 1464 + {1163, -4255} # 1465 + {149, -4296} # 1466 + {2448, -3503} # 1467 + {671, -4042} # 1468 + {1028, -4205} # 1469 + {2251, -3561} # 1470 + {868, -4052} # 1471 + {-956, -4134} # 1472 + {1919, -3974} # 1473 + {1965, -3922} # 1474 + {922, -4150} # 1475 + {1873, -4096} # 1476 + {2917, -3838} # 1477 + {-750, -4330} # 1478 + {1121, -4167} # 1479 + {1207, -4189} # 1480 + {2475, -3511} # 1481 + {728, -4109} # 1482 + {1346, -4272} # 1483 + {-861, -4233} # 1484 + {781, -4033} # 1485 + {-2098, -4776} # 1486 + {263, -4312} # 1487 + {43, -4419} # 1488 + {2422, -3499} # 1489 + {-1835, -4513} # 1490 + {-1517, -4155} # 1491 + {1965, -3998} # 1492 + {825, -4116} # 1493 + {1832, -4055} # 1494 + {1694, -4209} # 1495 + {922, -4074} # 1496 + {1419, -4268} # 1497 + {-88, -4462} # 1498 + {2637, -3690} # 1499 + {2567, -3561} # 1500 + {504, -4105} # 1501 + {2365, -3501} # 1502 + {-1130, -3999} # 1503 + {2310, -3521} # 1504 + {-513, -4426} # 1505 + {-1156, -3990} # 1506 + {-142, -4400} # 1507 + {-1394, -4049} # 1508 + {3023, -3888} # 1509 + {781, -4109} # 1510 + {2023, -3848} # 1511 + {-1235, -3983} # 1512 + {2397, -3573} # 1513 + {-1291, -3996} # 1514 + {-565, -4417} # 1515 + {1595, -4164} # 1516 + {263, -4236} # 1517 + {-303, -4501} # 1518 + {2514, -3528} # 1519 + {-1093, -4017} # 1520 + {2787, -3744} # 1521 + {1080, -4228} # 1522 + {1742, -4111} # 1523 + {-798, -4292} # 1524 + {-408, -4432} # 1525 + {-2345, -4947} # 1526 + {1595, -4239} # 1527 + {-2310, -4953} # 1528 + {-1663, -4313} # 1529 + {-2268, -4944} # 1530 + {-2212, -4923} # 1531 + {-142, -4475} # 1532 + {1742, -4187} # 1533 + {-2156, -4892} # 1534 + {-2098, -4852} # 1535 + {1207, -4264} # 1536 + {1121, -4243} # 1537 + {-2039, -4803} # 1538 + {2205, -3682} # 1539 + {-2039, -4727} # 1540 + {-1979, -4746} # 1541 + {-1208, -3982} # 1542 + {-1919, -4683} # 1543 + {-1835, -4589} # 1544 + {1644, -4150} # 1545 + {562, -4079} # 1546 + {-1663, -4388} # 1547 + {2970, -3867} # 1548 + {-1581, -4296} # 1549 + {671, -4118} # 1550 + {728, -4033} # 1551 + {-1517, -4231} # 1552 + {-1455, -4173} # 1553 + {-622, -4476} # 1554 + {-1394, -4125} # 1555 + {-34, -4446} # 1556 + {-1350, -4098} # 1557 + {-1320, -4083} # 1558 + {-1291, -4071} # 1559 + {-1263, -4063} # 1560 + {1298, -4272} # 1561 + {-1235, -4059} # 1562 + {-1208, -4058} # 1563 + {-1182, -4060} # 1564 + {617, -4057} # 1565 + {-1156, -4066} # 1566 + {-1130, -4075} # 1567 + {-1093, -4093} # 1568 + {-222, -4491} # 1569 + {-1045, -4126} # 1570 + {2397, -3498} # 1571 + {-999, -4167} # 1572 + {149, -4372} # 1573 + {1028, -4129} # 1574 + {-956, -4210} # 1575 + {-861, -4309} # 1576 + {2637, -3614} # 1577 + {2023, -3923} # 1578 + {-461, -4506} # 1579 + {825, -4040} # 1580 + {-798, -4368} # 1581 + {1252, -4270} # 1582 + {2946, -3934} # 1583 + {-750, -4406} # 1584 + {-702, -4438} # 1585 + {-222, -4415} # 1586 + {-34, -4370} # 1587 + {-665, -4457} # 1588 + {2975, -3940} # 1589 + {3016, -3921} # 1590 + # Mesh "Plane" + {8378, -1867} # 1591 + {8241, -1852} # 1592 + {8231, -1867} # 1593 + {8304, -1850} # 1594 + {8335, -1851} # 1595 + {8273, -1843} # 1596 + {8330, -1852} # 1597 + {8353, -1836} # 1598 + {8286, -1850} # 1599 + {8247, -1852} # 1600 + {8297, -1844} # 1601 + {8276, -1852} # 1602 + {8356, -1852} # 1603 + {8350, -1851} # 1604 + {8313, -1852} # 1605 + {8332, -1841} # 1606 + {8244, -1843} # 1607 + {8270, -1852} # 1608 + {8236, -1859} # 1609 + {8372, -1857} # 1610 + # Mesh "Plane.001" + {8277, -1902} # 1611 + {8140, -1887} # 1612 + {8130, -1902} # 1613 + {8203, -1885} # 1614 + {8234, -1886} # 1615 + {8172, -1878} # 1616 + {8229, -1887} # 1617 + {8252, -1871} # 1618 + {8185, -1885} # 1619 + {8146, -1887} # 1620 + {8197, -1879} # 1621 + {8175, -1887} # 1622 + {8256, -1887} # 1623 + {8249, -1886} # 1624 + {8212, -1887} # 1625 + {8231, -1876} # 1626 + {8143, -1878} # 1627 + {8169, -1887} # 1628 + {8135, -1894} # 1629 + {8271, -1892} # 1630 + # Mesh "Plane.006" + {8202, -1954} # 1631 + {8066, -1940} # 1632 + {8056, -1954} # 1633 + {8129, -1937} # 1634 + {8160, -1939} # 1635 + {8097, -1931} # 1636 + {8155, -1940} # 1637 + {8178, -1924} # 1638 + {8110, -1937} # 1639 + {8072, -1939} # 1640 + {8122, -1932} # 1641 + {8101, -1939} # 1642 + {8181, -1940} # 1643 + {8174, -1939} # 1644 + {8138, -1939} # 1645 + {8157, -1929} # 1646 + {8068, -1930} # 1647 + {8095, -1939} # 1648 + {8061, -1947} # 1649 + {8196, -1944} # 1650 + # Mesh "Plane.007" + {8071, -1994} # 1651 + {7934, -1979} # 1652 + {7924, -1994} # 1653 + {7997, -1977} # 1654 + {8028, -1978} # 1655 + {7966, -1970} # 1656 + {8023, -1979} # 1657 + {8046, -1963} # 1658 + {7979, -1977} # 1659 + {7940, -1979} # 1660 + {7991, -1971} # 1661 + {7969, -1979} # 1662 + {8050, -1979} # 1663 + {8043, -1978} # 1664 + {8006, -1979} # 1665 + {8025, -1968} # 1666 + {7937, -1970} # 1667 + {7963, -1979} # 1668 + {7929, -1986} # 1669 + {8065, -1984} # 1670 + # Mesh "Plane.008" + {8614, -1556} # 1671 + {8478, -1541} # 1672 + {8467, -1556} # 1673 + {8541, -1539} # 1674 + {8572, -1541} # 1675 + {8509, -1532} # 1676 + {8566, -1542} # 1677 + {8590, -1526} # 1678 + {8522, -1539} # 1679 + {8484, -1541} # 1680 + {8534, -1533} # 1681 + {8513, -1541} # 1682 + {8593, -1541} # 1683 + {8586, -1540} # 1684 + {8549, -1541} # 1685 + {8568, -1530} # 1686 + {8480, -1532} # 1687 + {8507, -1541} # 1688 + {8473, -1549} # 1689 + {8608, -1546} # 1690 + # Mesh "Plane.009" + {8567, -1607} # 1691 + {8430, -1592} # 1692 + {8420, -1607} # 1693 + {8493, -1590} # 1694 + {8524, -1592} # 1695 + {8462, -1583} # 1696 + {8519, -1593} # 1697 + {8542, -1577} # 1698 + {8475, -1590} # 1699 + {8436, -1592} # 1700 + {8486, -1584} # 1701 + {8465, -1592} # 1702 + {8545, -1592} # 1703 + {8539, -1591} # 1704 + {8502, -1592} # 1705 + {8521, -1582} # 1706 + {8433, -1583} # 1707 + {8459, -1592} # 1708 + {8425, -1600} # 1709 + {8561, -1597} # 1710 + # Mesh "Plane.010" + {8528, -1672} # 1711 + {8391, -1657} # 1712 + {8381, -1672} # 1713 + {8454, -1655} # 1714 + {8485, -1657} # 1715 + {8423, -1649} # 1716 + {8480, -1658} # 1717 + {8504, -1642} # 1718 + {8436, -1655} # 1719 + {8397, -1657} # 1720 + {8448, -1650} # 1721 + {8426, -1657} # 1722 + {8507, -1657} # 1723 + {8500, -1657} # 1724 + {8463, -1657} # 1725 + {8482, -1647} # 1726 + {8394, -1648} # 1727 + {8420, -1657} # 1728 + {8386, -1665} # 1729 + {8522, -1662} # 1730 + # Mesh "Plane.011" + {8747, -1466} # 1731 + {8738, -1451} # 1732 + {8611, -1452} # 1733 + {8600, -1466} # 1734 + # Mesh "Plane.012" + {8799, -1414} # 1735 + {8790, -1399} # 1736 + {8662, -1399} # 1737 + {8652, -1414} # 1738 + # Mesh "Plane.013" + {8856, -1363} # 1739 + {8847, -1348} # 1740 + {8719, -1348} # 1741 + {8709, -1363} # 1742 + # Mesh "Plane.014" + {8935, -1315} # 1743 + {8926, -1300} # 1744 + {8799, -1300} # 1745 + {8788, -1315} # 1746 + # Mesh "Plane.015" + {9004, -1261} # 1747 + {8994, -1246} # 1748 + {8867, -1247} # 1749 + {8857, -1261} # 1750 + # Mesh "Plane.016" + {9131, -1160} # 1751 + {9122, -1145} # 1752 + {8995, -1145} # 1753 + {8985, -1160} # 1754 + # Mesh "Plane.017" + {9232, -1107} # 1755 + {9222, -1092} # 1756 + {9095, -1092} # 1757 + {9085, -1107} # 1758 + # Mesh "Plane.018" + {9304, -1057} # 1759 + {9295, -1042} # 1760 + {9168, -1042} # 1761 + {9157, -1057} # 1762 + # Mesh "Plane.019" + {9377, -1016} # 1763 + {9367, -1001} # 1764 + {9240, -1001} # 1765 + {9230, -1016} # 1766 + # Mesh "Plane.020" + {9453, -970} # 1767 + {9444, -955} # 1768 + {9316, -955} # 1769 + {9306, -970} # 1770 + # Mesh "Plane.024" + {8470, -1714} # 1771 + {8333, -1700} # 1772 + {8323, -1714} # 1773 + {8396, -1698} # 1774 + {8427, -1699} # 1775 + {8365, -1691} # 1776 + {8422, -1700} # 1777 + {8445, -1684} # 1778 + {8378, -1698} # 1779 + {8339, -1700} # 1780 + {8390, -1692} # 1781 + {8368, -1700} # 1782 + {8449, -1700} # 1783 + {8442, -1699} # 1784 + {8405, -1700} # 1785 + {8424, -1689} # 1786 + {8336, -1691} # 1787 + {8362, -1699} # 1788 + {8328, -1707} # 1789 + {8464, -1704} # 1790 + # Mesh "Plane.025" + {8458, -1769} # 1791 + {8321, -1754} # 1792 + {8311, -1769} # 1793 + {8384, -1752} # 1794 + {8415, -1754} # 1795 + {8353, -1745} # 1796 + {8410, -1755} # 1797 + {8433, -1739} # 1798 + {8366, -1752} # 1799 + {8327, -1754} # 1800 + {8377, -1747} # 1801 + {8356, -1754} # 1802 + {8436, -1754} # 1803 + {8430, -1754} # 1804 + {8393, -1754} # 1805 + {8412, -1744} # 1806 + {8324, -1745} # 1807 + {8350, -1754} # 1808 + {8316, -1762} # 1809 + {8452, -1759} # 1810 + # Mesh "Plane.026" + {8444, -1818} # 1811 + {8307, -1804} # 1812 + {8297, -1818} # 1813 + {8370, -1802} # 1814 + {8401, -1803} # 1815 + {8338, -1795} # 1816 + {8396, -1804} # 1817 + {8419, -1788} # 1818 + {8352, -1802} # 1819 + {8313, -1804} # 1820 + {8363, -1796} # 1821 + {8342, -1804} # 1822 + {8422, -1804} # 1823 + {8416, -1803} # 1824 + {8379, -1803} # 1825 + {8398, -1793} # 1826 + {8310, -1795} # 1827 + {8336, -1803} # 1828 + {8302, -1811} # 1829 + {8437, -1808} # 1830 + # Mesh "Plane.028" + {9061, -1202} # 1831 + {9052, -1187} # 1832 + {8924, -1188} # 1833 + {8914, -1202} # 1834 + # Mesh "Plane.029" + {9000, -1542} # 1835 + {9018, -1495} # 1836 + {8998, -1032} # 1837 + {8974, -1545} # 1838 + # Mesh "Plane.030" + {8880, -1727} # 1839 + {8912, -1645} # 1840 + {8877, -845} # 1841 + {8835, -1732} # 1842 + # Mesh "Plane.031" + {8709, -1921} # 1843 + {8728, -1873} # 1844 + {8708, -1411} # 1845 + {8683, -1924} # 1846 + # Mesh "Plane.034" + {9208, -1334} # 1847 + {9226, -1286} # 1848 + {9206, -824} # 1849 + {9182, -1337} # 1850 + # Mesh "Plane.035" + {8757, -1826} # 1851 + {8775, -1778} # 1852 + {8755, -1316} # 1853 + {8731, -1829} # 1854 + # Mesh "Plane.036" + {8810, -1772} # 1855 + {8832, -1714} # 1856 + {8808, -1154} # 1857 + {8778, -1775} # 1858 + # Mesh "Plane.037" + {8947, -1592} # 1859 + {8965, -1545} # 1860 + {8945, -1082} # 1861 + {8921, -1595} # 1862 + # Mesh "Plane.038" + {9053, -1464} # 1863 + {9071, -1417} # 1864 + {9051, -954} # 1865 + {9027, -1467} # 1866 + # Mesh "Plane.039" + {9126, -1399} # 1867 + {9144, -1351} # 1868 + {9124, -888} # 1869 + {9100, -1402} # 1870 + # Mesh "Plane.040" + {8662, -1503} # 1871 + {8525, -1488} # 1872 + {8515, -1503} # 1873 + {8588, -1486} # 1874 + {8619, -1488} # 1875 + {8557, -1479} # 1876 + {8614, -1489} # 1877 + {8637, -1473} # 1878 + {8570, -1486} # 1879 + {8531, -1488} # 1880 + {8582, -1481} # 1881 + {8560, -1488} # 1882 + {8640, -1488} # 1883 + {8634, -1488} # 1884 + {8597, -1488} # 1885 + {8616, -1478} # 1886 + {8528, -1479} # 1887 + {8554, -1488} # 1888 + {8520, -1496} # 1889 + {8656, -1493} # 1890 + # Mesh "Font" + {-4141, -4926} # 1891 + {-4152, -4925} # 1892 + {-4161, -4921} # 1893 + {-4169, -4915} # 1894 + {-4175, -4907} # 1895 + {-4179, -4898} # 1896 + {-4180, -4888} # 1897 + {-4179, -4877} # 1898 + {-4175, -4868} # 1899 + {-4169, -4860} # 1900 + {-4161, -4854} # 1901 + {-4152, -4850} # 1902 + {-4141, -4848} # 1903 + {-4130, -4850} # 1904 + {-4120, -4853} # 1905 + {-4112, -4859} # 1906 + {-4106, -4867} # 1907 + {-4102, -4877} # 1908 + {-4101, -4888} # 1909 + {-4102, -4898} # 1910 + {-4106, -4908} # 1911 + {-4112, -4915} # 1912 + {-4120, -4921} # 1913 + {-4130, -4925} # 1914 + {-4141, -4913} # 1915 + {-4134, -4912} # 1916 + {-4128, -4909} # 1917 + {-4123, -4906} # 1918 + {-4119, -4901} # 1919 + {-4117, -4895} # 1920 + {-4116, -4888} # 1921 + {-4117, -4880} # 1922 + {-4119, -4874} # 1923 + {-4123, -4869} # 1924 + {-4128, -4865} # 1925 + {-4134, -4863} # 1926 + {-4141, -4862} # 1927 + {-4148, -4863} # 1928 + {-4154, -4865} # 1929 + {-4158, -4869} # 1930 + {-4162, -4874} # 1931 + {-4164, -4881} # 1932 + {-4165, -4888} # 1933 + {-4164, -4895} # 1934 + {-4162, -4901} # 1935 + {-4158, -4906} # 1936 + {-4154, -4909} # 1937 + {-4148, -4912} # 1938 + {-4525, -4964} # 1939 + {-4537, -4964} # 1940 + {-4585, -4850} # 1941 + {-4569, -4850} # 1942 + {-4555, -4883} # 1943 + {-4507, -4883} # 1944 + {-4491, -4850} # 1945 + {-4475, -4850} # 1946 + {-4531, -4939} # 1947 + {-4513, -4898} # 1948 + {-4548, -4898} # 1949 + {-4449, -4963} # 1950 + {-4464, -4963} # 1951 + {-4467, -4850} # 1952 + {-4451, -4849} # 1953 + {-4413, -4963} # 1954 + {-4428, -4963} # 1955 + {-4426, -4849} # 1956 + {-4410, -4851} # 1957 + {-4330, -4872} # 1958 + {-4334, -4869} # 1959 + {-4338, -4867} # 1960 + {-4342, -4865} # 1961 + {-4347, -4864} # 1962 + {-4351, -4863} # 1963 + {-4356, -4863} # 1964 + {-4362, -4863} # 1965 + {-4368, -4865} # 1966 + {-4373, -4868} # 1967 + {-4376, -4873} # 1968 + {-4379, -4878} # 1969 + {-4381, -4885} # 1970 + {-4328, -4885} # 1971 + {-4329, -4898} # 1972 + {-4332, -4908} # 1973 + {-4337, -4916} # 1974 + {-4343, -4921} # 1975 + {-4351, -4925} # 1976 + {-4361, -4926} # 1977 + {-4370, -4925} # 1978 + {-4379, -4921} # 1979 + {-4386, -4915} # 1980 + {-4391, -4908} # 1981 + {-4394, -4899} # 1982 + {-4395, -4888} # 1983 + {-4394, -4878} # 1984 + {-4391, -4869} # 1985 + {-4386, -4861} # 1986 + {-4379, -4854} # 1987 + {-4370, -4850} # 1988 + {-4359, -4848} # 1989 + {-4353, -4849} # 1990 + {-4348, -4849} # 1991 + {-4343, -4851} # 1992 + {-4338, -4852} # 1993 + {-4334, -4855} # 1994 + {-4330, -4857} # 1995 + {-4380, -4895} # 1996 + {-4379, -4900} # 1997 + {-4377, -4905} # 1998 + {-4374, -4908} # 1999 + {-4370, -4911} # 2000 + {-4365, -4913} # 2001 + {-4360, -4913} # 2002 + {-4355, -4913} # 2003 + {-4351, -4911} # 2004 + {-4348, -4908} # 2005 + {-4345, -4905} # 2006 + {-4344, -4900} # 2007 + {-4343, -4895} # 2008 + {-4253, -4924} # 2009 + {-4284, -4924} # 2010 + {-4293, -4924} # 2011 + {-4301, -4921} # 2012 + {-4307, -4918} # 2013 + {-4312, -4912} # 2014 + {-4315, -4906} # 2015 + {-4316, -4899} # 2016 + {-4316, -4896} # 2017 + {-4316, -4894} # 2018 + {-4315, -4891} # 2019 + {-4314, -4889} # 2020 + {-4313, -4887} # 2021 + {-4312, -4885} # 2022 + {-4311, -4883} # 2023 + {-4309, -4881} # 2024 + {-4307, -4879} # 2025 + {-4305, -4878} # 2026 + {-4302, -4877} # 2027 + {-4300, -4875} # 2028 + {-4300, -4875} # 2029 + {-4303, -4874} # 2030 + {-4306, -4873} # 2031 + {-4308, -4871} # 2032 + {-4310, -4869} # 2033 + {-4311, -4867} # 2034 + {-4311, -4864} # 2035 + {-4311, -4863} # 2036 + {-4311, -4861} # 2037 + {-4310, -4860} # 2038 + {-4308, -4858} # 2039 + {-4306, -4856} # 2040 + {-4304, -4855} # 2041 + {-4310, -4853} # 2042 + {-4315, -4851} # 2043 + {-4318, -4848} # 2044 + {-4321, -4844} # 2045 + {-4322, -4839} # 2046 + {-4323, -4834} # 2047 + {-4322, -4828} # 2048 + {-4318, -4823} # 2049 + {-4313, -4818} # 2050 + {-4306, -4815} # 2051 + {-4298, -4813} # 2052 + {-4288, -4812} # 2053 + {-4278, -4813} # 2054 + {-4269, -4815} # 2055 + {-4263, -4818} # 2056 + {-4257, -4823} # 2057 + {-4254, -4829} # 2058 + {-4253, -4836} # 2059 + {-4254, -4840} # 2060 + {-4255, -4844} # 2061 + {-4258, -4848} # 2062 + {-4262, -4852} # 2063 + {-4268, -4854} # 2064 + {-4275, -4856} # 2065 + {-4282, -4858} # 2066 + {-4287, -4859} # 2067 + {-4292, -4861} # 2068 + {-4295, -4862} # 2069 + {-4297, -4864} # 2070 + {-4298, -4866} # 2071 + {-4296, -4869} # 2072 + {-4292, -4871} # 2073 + {-4286, -4872} # 2074 + {-4280, -4874} # 2075 + {-4273, -4876} # 2076 + {-4267, -4880} # 2077 + {-4266, -4882} # 2078 + {-4264, -4884} # 2079 + {-4263, -4887} # 2080 + {-4261, -4890} # 2081 + {-4261, -4894} # 2082 + {-4260, -4897} # 2083 + {-4261, -4900} # 2084 + {-4261, -4902} # 2085 + {-4262, -4905} # 2086 + {-4264, -4908} # 2087 + {-4266, -4910} # 2088 + {-4268, -4913} # 2089 + {-4253, -4913} # 2090 + {-4274, -4899} # 2091 + {-4274, -4895} # 2092 + {-4275, -4891} # 2093 + {-4278, -4889} # 2094 + {-4281, -4886} # 2095 + {-4284, -4885} # 2096 + {-4288, -4885} # 2097 + {-4292, -4885} # 2098 + {-4296, -4886} # 2099 + {-4299, -4888} # 2100 + {-4301, -4891} # 2101 + {-4302, -4894} # 2102 + {-4303, -4898} # 2103 + {-4302, -4902} # 2104 + {-4301, -4905} # 2105 + {-4299, -4908} # 2106 + {-4296, -4910} # 2107 + {-4292, -4911} # 2108 + {-4288, -4912} # 2109 + {-4284, -4911} # 2110 + {-4281, -4910} # 2111 + {-4278, -4908} # 2112 + {-4276, -4905} # 2113 + {-4274, -4902} # 2114 + {-4268, -4834} # 2115 + {-4268, -4831} # 2116 + {-4270, -4829} # 2117 + {-4273, -4826} # 2118 + {-4277, -4825} # 2119 + {-4282, -4824} # 2120 + {-4288, -4824} # 2121 + {-4294, -4824} # 2122 + {-4299, -4825} # 2123 + {-4303, -4826} # 2124 + {-4306, -4829} # 2125 + {-4308, -4832} # 2126 + {-4309, -4835} # 2127 + {-4308, -4838} # 2128 + {-4307, -4841} # 2129 + {-4304, -4843} # 2130 + {-4301, -4845} # 2131 + {-4297, -4846} # 2132 + {-4292, -4846} # 2133 + {-4287, -4846} # 2134 + {-4282, -4845} # 2135 + {-4276, -4844} # 2136 + {-4272, -4842} # 2137 + {-4269, -4839} # 2138 + {-4240, -4924} # 2139 + {-4240, -4850} # 2140 + {-4226, -4850} # 2141 + {-4226, -4889} # 2142 + {-4225, -4895} # 2143 + {-4223, -4901} # 2144 + {-4220, -4905} # 2145 + {-4217, -4909} # 2146 + {-4212, -4911} # 2147 + {-4208, -4912} # 2148 + {-4206, -4912} # 2149 + {-4203, -4911} # 2150 + {-4201, -4910} # 2151 + {-4199, -4908} # 2152 + {-4196, -4907} # 2153 + {-4194, -4905} # 2154 + {-4186, -4917} # 2155 + {-4189, -4920} # 2156 + {-4192, -4922} # 2157 + {-4195, -4924} # 2158 + {-4198, -4925} # 2159 + {-4201, -4926} # 2160 + {-4204, -4926} # 2161 + {-4207, -4925} # 2162 + {-4211, -4924} # 2163 + {-4214, -4922} # 2164 + {-4218, -4918} # 2165 + {-4222, -4913} # 2166 + {-4225, -4907} # 2167 + {-4226, -4907} # 2168 + {-4226, -4924} # 2169 + # Mesh "Circle" + {7703, -2077} # 2170 + {7767, -2028} # 2171 + {7835, -2021} # 2172 + {7872, -2000} # 2173 + {7488, -2074} # 2174 + {7217, -2113} # 2175 + {6700, -2274} # 2176 + {7084, -2173} # 2177 + {7632, -1970} # 2178 + {7535, -2025} # 2179 + {7436, -2011} # 2180 + {7309, -2075} # 2181 + {7188, -2063} # 2182 + {7545, -2112} # 2183 + {6942, -2199} # 2184 + {6832, -2240} # 2185 + {7048, -2236} # 2186 + {6659, -2269} # 2187 + {7457, -2056} # 2188 + {6496, -2375} # 2189 + {7760, -1976} # 2190 + {7126, -2226} # 2191 + {7200, -2198} # 2192 + {7440, -2137} # 2193 + {6694, -2184} # 2194 + {6906, -2254} # 2195 + {7337, -2099} # 2196 + {7795, -2004} # 2197 + {7255, -2195} # 2198 + {7380, -2164} # 2199 + {7494, -2134} # 2200 + {7590, -2105} # 2201 + {7252, -2133} # 2202 + {7134, -2159} # 2203 + {7695, -2032} # 2204 + {6637, -2324} # 2205 + {7863, -1994} # 2206 + {7373, -2103} # 2207 + {7722, -2026} # 2208 + {7666, -2023} # 2209 + {7647, -2084} # 2210 + {6852, -2283} # 2211 + {6970, -2261} # 2212 + {6763, -2301} # 2213 + {7322, -2173} # 2214 + {6983, -2195} # 2215 + {6899, -2127} # 2216 + {6762, -2262} # 2217 + {7589, -2046} # 2218 + {7559, -2046} # 2219 + {6726, -2237} # 2220 + {6617, -2309} # 2221 + {7037, -2140} # 2222 + {6496, -2373} # 2223 } # Triangles { - # Mesh "Curve" - { - {1, 2, "edge" "collidable"}, - {0, 2, "edge" "collidable"}, - {40, 2}, - 1 - } - { - {40, 2, "edge" "collidable"}, - {41, 2}, - {1, 2}, - 1 - } - { - {2, 2, "edge" "collidable"}, - {1, 2}, - {41, 2}, - 1 - } - { - {41, 2, "edge" "collidable"}, - {42, 2}, - {2, 2}, - 1 - } - { - {3, 2, "edge" "collidable"}, - {2, 2}, - {42, 2}, - 1 - } - { - {42, 2, "edge" "collidable"}, - {43, 2}, - {3, 2}, - 1 - } - { - {4, 2, "edge" "collidable"}, - {3, 2}, - {43, 2}, - 1 - } - { - {43, 2, "edge" "collidable"}, - {44, 2}, - {4, 2}, - 1 - } - { - {5, 2, "edge" "collidable"}, - {4, 2}, - {44, 2}, - 1 - } - { - {44, 2, "edge" "collidable"}, - {45, 2}, - {5, 2}, - 1 - } - { - {6, 2, "edge" "collidable"}, - {5, 2}, - {45, 2}, - 1 - } - { - {45, 2, "edge" "collidable"}, - {46, 2}, - {6, 2}, - 1 - } - { - {7, 2, "edge" "collidable"}, - {6, 2}, - {46, 2}, - 1 - } - { - {46, 2, "edge" "collidable"}, - {47, 2}, - {7, 2}, - 1 - } - { - {8, 2, "edge" "collidable"}, - {7, 2}, - {47, 2}, - 1 - } - { - {47, 2, "edge" "collidable"}, - {48, 2}, - {8, 2}, - 1 - } - { - {9, 2, "edge" "collidable"}, - {8, 2}, - {48, 2}, - 1 - } - { - {48, 2, "edge" "collidable"}, - {49, 2}, - {9, 2}, - 1 - } - { - {10, 2, "edge" "collidable"}, - {9, 2}, - {49, 2}, - 1 - } - { - {49, 2, "edge" "collidable"}, - {50, 2}, - {10, 2}, - 1 - } - { - {11, 2, "edge" "collidable"}, - {10, 2}, - {50, 2}, - 1 - } - { - {50, 2, "edge" "collidable"}, - {51, 2}, - {11, 2}, - 1 - } - { - {12, 2, "edge" "collidable"}, - {11, 2}, - {51, 2}, - 1 - } - { - {51, 2, "edge" "collidable"}, - {52, 2}, - {12, 2}, - 1 - } - { - {13, 2, "edge" "collidable"}, - {12, 2}, - {52, 2}, - 1 - } - { - {52, 2, "edge" "collidable"}, - {53, 2}, - {13, 2}, - 1 - } - { - {14, 2, "edge" "collidable"}, - {13, 2}, - {53, 2}, - 1 - } - { - {53, 2, "edge" "collidable"}, - {54, 2}, - {14, 2}, - 1 - } - { - {15, 2, "edge" "collidable"}, - {14, 2}, - {54, 2}, - 1 - } - { - {54, 2, "edge" "collidable"}, - {55, 2}, - {15, 2}, - 1 - } - { - {16, 2, "edge" "collidable"}, - {15, 2}, - {55, 2}, - 1 - } - { - {55, 2, "edge" "collidable"}, - {56, 2}, - {16, 2}, - 1 - } - { - {17, 2, "edge" "collidable"}, - {16, 2}, - {56, 2}, - 1 - } - { - {56, 2, "edge" "collidable"}, - {57, 2}, - {17, 2}, - 1 - } - { - {18, 2, "edge" "collidable"}, - {17, 2}, - {57, 2}, - 1 - } - { - {57, 2, "edge" "collidable"}, - {58, 2}, - {18, 2}, - 1 - } - { - {19, 2, "edge" "collidable"}, - {18, 2}, - {58, 2}, - 1 - } - { - {58, 2, "edge" "collidable"}, - {59, 2}, - {19, 2}, - 1 - } - { - {20, 2, "edge" "collidable"}, - {19, 2}, - {59, 2}, - 1 - } - { - {59, 2, "edge" "collidable"}, - {60, 2}, - {20, 2}, - 1 - } - { - {21, 2, "edge" "collidable"}, - {20, 2}, - {60, 2}, - 1 - } - { - {60, 2, "edge" "collidable"}, - {61, 2}, - {21, 2}, - 1 - } - { - {22, 2, "edge" "collidable"}, - {21, 2}, - {61, 2}, - 1 - } - { - {61, 2, "edge" "collidable"}, - {62, 2}, - {22, 2}, - 1 - } - { - {23, 2, "edge" "collidable"}, - {22, 2}, - {62, 2}, - 1 - } - { - {62, 2, "edge" "collidable"}, - {63, 2}, - {23, 2}, - 1 - } - { - {24, 2, "edge" "collidable"}, - {23, 2}, - {63, 2}, - 1 - } - { - {63, 2, "edge" "collidable"}, - {64, 2}, - {24, 2}, - 1 - } - { - {25, 2, "edge" "collidable"}, - {24, 2}, - {64, 2}, - 1 - } - { - {64, 2, "edge" "collidable"}, - {65, 2}, - {25, 2}, - 1 - } - { - {26, 2, "edge" "collidable"}, - {25, 2}, - {65, 2}, - 1 - } - { - {65, 2, "edge" "collidable"}, - {66, 2}, - {26, 2}, - 1 - } - { - {27, 2, "edge" "collidable"}, - {26, 2}, - {66, 2}, - 1 - } - { - {66, 2, "edge" "collidable"}, - {67, 2}, - {27, 2}, - 1 - } - { - {28, 2, "edge" "collidable"}, - {27, 2}, - {67, 2}, - 1 - } - { - {67, 2, "edge" "collidable"}, - {68, 2}, - {28, 2}, - 1 - } - { - {29, 2, "edge" "collidable"}, - {28, 2}, - {68, 2}, - 1 - } - { - {68, 2, "edge" "collidable"}, - {69, 2}, - {29, 2}, - 1 - } - { - {30, 2, "edge" "collidable"}, - {29, 2}, - {69, 2}, - 1 - } - { - {69, 2, "edge" "collidable"}, - {70, 2}, - {30, 2}, - 1 - } - { - {31, 2, "edge" "collidable"}, - {30, 2}, - {70, 2}, - 1 - } - { - {70, 2, "edge" "collidable"}, - {71, 2}, - {31, 2}, - 1 - } - { - {32, 2, "edge" "collidable"}, - {31, 2}, - {71, 2}, - 1 - } - { - {71, 2, "edge" "collidable"}, - {72, 2}, - {32, 2}, - 1 - } - { - {33, 2, "edge" "collidable"}, - {32, 2}, - {72, 2}, - 1 - } - { - {72, 2, "edge" "collidable"}, - {73, 2}, - {33, 2}, - 1 - } - { - {34, 2, "edge" "collidable"}, - {33, 2}, - {73, 2}, - 1 - } - { - {73, 2, "edge" "collidable"}, - {74, 2}, - {34, 2}, - 1 - } - { - {35, 2, "edge" "collidable"}, - {34, 2}, - {74, 2}, - 1 - } - { - {74, 2, "edge" "collidable"}, - {75, 2}, - {35, 2}, - 1 - } - { - {36, 2, "edge" "collidable"}, - {35, 2}, - {75, 2}, - 1 - } - { - {75, 2, "edge" "collidable"}, - {76, 2}, - {36, 2}, - 1 - } - { - {37, 2, "edge" "collidable"}, - {36, 2}, - {76, 2}, - 1 - } - { - {76, 2, "edge" "collidable"}, - {77, 2}, - {37, 2}, - 1 - } - { - {38, 2, "edge" "collidable"}, - {37, 2}, - {77, 2}, - 1 - } - { - {77, 2, "edge" "collidable"}, - {78, 2}, - {38, 2}, - 1 - } - { - {39, 2, "edge" "collidable"}, - {38, 2}, - {78, 2}, - 1 - } - { - {78, 2, "edge" "collidable"}, - {79, 2, "edge" "collidable"}, - {39, 2}, - 1 - } - # Mesh "Curve.001" - { - {560, 2}, - {526, 2, "edge" "collidable"}, - {278, 2}, - 0 - } - { - {456, 2}, - {468, 2}, - {81, 2}, - 0 - } - { - {468, 2}, - {80, 2, "edge" "collidable"}, - {81, 2}, - 0 - } - { - {347, 2}, - {548, 2}, - {115, 2}, - 0 - } - { - {232, 2}, - {121, 2}, - {600, 2}, - 0 - } - { - {401, 2}, - {456, 2}, - {83, 2}, - 0 - } - { - {456, 2}, - {81, 2, "edge" "collidable"}, - {83, 2}, - 0 - } - { - {592, 2}, - {127, 2}, - {353, 2}, - 0 - } - { - {522, 2}, - {514, 2}, - {428, 2}, - 0 - } - { - {361, 2}, - {401, 2}, - {85, 2}, - 0 - } - { - {401, 2}, - {83, 2, "edge" "collidable"}, - {85, 2}, - 0 - } - { - {305, 2}, - {361, 2}, - {85, 2}, - 0 - } - { - {519, 2}, - {304, 2, "edge" "collidable"}, - {500, 2}, - 0 - } - { - {144, 2}, - {305, 2}, - {87, 2}, - 0 - } - { - {305, 2}, - {85, 2, "edge" "collidable"}, - {87, 2}, - 0 - } - { - {242, 2}, - {144, 2}, - {88, 2}, - 0 - } - { - {144, 2}, - {87, 2, "edge" "collidable"}, - {88, 2}, - 0 - } - { - {136, 2}, - {242, 2}, - {89, 2}, - 0 - } - { - {242, 2}, - {88, 2, "edge" "collidable"}, - {89, 2}, - 0 - } - { - {228, 2}, - {136, 2}, - {90, 2}, - 0 - } - { - {136, 2}, - {89, 2, "edge" "collidable"}, - {90, 2}, - 0 - } - { - {171, 2}, - {228, 2}, - {90, 2}, - 0 - } - { - {183, 2}, - {82, 2, "edge" "collidable"}, - {589, 2}, - 0 - } - { - {494, 2}, - {171, 2}, - {92, 2}, - 0 - } - { - {171, 2}, - {90, 2, "edge" "collidable"}, - {92, 2}, - 0 - } - { - {266, 2}, - {261, 2, "edge" "collidable"}, - {225, 2}, - 0 - } - { - {381, 2}, - {592, 2}, - {445, 2}, - 0 - } - { - {576, 2}, - {494, 2}, - {94, 2}, - 0 - } - { - {494, 2}, - {92, 2, "edge" "collidable"}, - {94, 2}, - 0 - } - { - {202, 2}, - {553, 2}, - {93, 2}, - 0 - } - { - {274, 2}, - {362, 2, "edge" "collidable"}, - {364, 2}, - 0 - } - { - {342, 2}, - {512, 2, "edge" "collidable"}, - {516, 2}, - 0 - } - { - {539, 2}, - {293, 2}, - {480, 2}, - 0 - } - { - {440, 2}, - {179, 2, "edge" "collidable"}, - {380, 2}, - 0 - } - { - {341, 2}, - {119, 2, "edge" "collidable"}, - {427, 2}, - 0 - } - { - {191, 2}, - {376, 2, "edge" "collidable"}, - {230, 2}, - 0 - } - { - {590, 2}, - {382, 2, "edge" "collidable"}, - {82, 2}, - 0 - } - { - {629, 2}, - {576, 2}, - {99, 2}, - 0 - } - { - {576, 2}, - {94, 2, "edge" "collidable"}, - {99, 2}, - 0 - } - { - {519, 2}, - {324, 2}, - {304, 2}, - 0 - } - { - {341, 2}, - {497, 2}, - {119, 2}, - 0 - } - { - {489, 2}, - {465, 2, "edge" "collidable"}, - {467, 2}, - 0 - } - { - {336, 2}, - {188, 2, "edge" "collidable"}, - {613, 2}, - 0 - } - { - {104, 2}, - {411, 2}, - {534, 2}, - 0 - } - { - {169, 2}, - {503, 2}, - {167, 2}, - 0 - } - { - {106, 2}, - {629, 2}, - {103, 2}, - 0 - } - { - {629, 2}, - {99, 2, "edge" "collidable"}, - {103, 2}, - 0 - } - { - {177, 2}, - {607, 2}, - {573, 2}, - 0 - } - { - {618, 2}, - {367, 2}, - {619, 2}, - 0 - } - { - {409, 2}, - {106, 2}, - {105, 2}, - 0 - } - { - {106, 2}, - {103, 2, "edge" "collidable"}, - {105, 2}, - 0 - } - { - {160, 2}, - {377, 2}, - {505, 2}, - 0 - } - { - {318, 2}, - {194, 2, "edge" "collidable"}, - {282, 2}, - 0 - } - { - {444, 2}, - {409, 2}, - {107, 2}, - 0 - } - { - {409, 2}, - {105, 2, "edge" "collidable"}, - {107, 2}, - 0 - } - { - {477, 2}, - {489, 2}, - {467, 2}, - 0 - } - { - {560, 2}, - {271, 2}, - {526, 2}, - 0 - } - { - {309, 2}, - {444, 2}, - {109, 2}, - 0 - } - { - {444, 2}, - {107, 2, "edge" "collidable"}, - {109, 2}, - 0 - } - { - {176, 2}, - {434, 2, "edge" "collidable"}, - {442, 2}, - 0 - } - { - {224, 2}, - {211, 2, "edge" "collidable"}, - {139, 2}, - 0 - } - { - {419, 2}, - {309, 2}, - {111, 2}, - 0 - } - { - {309, 2}, - {109, 2, "edge" "collidable"}, - {111, 2}, - 0 - } - { - {440, 2}, - {195, 2}, - {179, 2}, - 0 - } - { - {223, 2}, - {403, 2, "edge" "collidable"}, - {407, 2}, - 0 - } - { - {436, 2}, - {419, 2}, - {113, 2}, - 0 - } - { - {419, 2}, - {111, 2, "edge" "collidable"}, - {113, 2}, - 0 - } - { - {384, 2}, - {436, 2}, - {114, 2}, - 0 - } - { - {436, 2}, - {113, 2, "edge" "collidable"}, - {114, 2}, - 0 - } - { - {288, 2}, - {322, 2}, - {204, 2}, - 0 - } - { - {100, 2}, - {521, 2}, - {328, 2}, - 0 - } - { - {371, 2}, - {384, 2}, - {116, 2}, - 0 - } - { - {384, 2}, - {114, 2, "edge" "collidable"}, - {116, 2}, - 0 - } - { - {547, 2}, - {442, 2, "edge" "collidable"}, - {451, 2}, - 0 - } - { - {238, 2}, - {364, 2, "edge" "collidable"}, - {366, 2}, - 0 - } - { - {297, 2}, - {371, 2}, - {118, 2}, - 0 - } - { - {371, 2}, - {116, 2, "edge" "collidable"}, - {118, 2}, - 0 - } - { - {293, 2}, - {476, 2, "edge" "collidable"}, - {480, 2}, - 0 - } - { - {232, 2}, - {600, 2, "edge" "collidable"}, - {604, 2}, - 0 - } - { - {518, 2}, - {297, 2}, - {120, 2}, - 0 - } - { - {297, 2}, - {118, 2, "edge" "collidable"}, - {120, 2}, - 0 - } - { - {187, 2}, - {546, 2, "edge" "collidable"}, - {551, 2}, - 0 - } - { - {238, 2}, - {274, 2}, - {364, 2}, - 0 - } - { - {607, 2}, - {570, 2, "edge" "collidable"}, - {573, 2}, - 0 - } - { - {326, 2}, - {283, 2}, - {391, 2}, - 0 - } - { - {580, 2}, - {591, 2, "edge" "collidable"}, - {595, 2}, - 0 - } - { - {417, 2}, - {172, 2}, - {220, 2}, - 0 - } - { - {330, 2}, - {518, 2}, - {124, 2}, - 0 - } - { - {518, 2}, - {120, 2, "edge" "collidable"}, - {124, 2}, - 0 - } - { - {121, 2}, - {595, 2, "edge" "collidable"}, - {600, 2}, - 0 - } - { - {437, 2}, - {545, 2}, - {296, 2}, - 0 - } - { - {389, 2}, - {542, 2, "edge" "collidable"}, - {546, 2}, - 0 - } - { - {396, 2}, - {413, 2}, - {321, 2}, - 0 - } - { - {233, 2}, - {237, 2, "edge" "collidable"}, - {471, 2}, - 0 - } - { - {224, 2}, - {139, 2}, - {334, 2}, - 0 - } - { - {142, 2}, - {330, 2}, - {128, 2}, - 0 - } - { - {330, 2}, - {124, 2, "edge" "collidable"}, - {128, 2}, - 0 - } - { - {195, 2}, - {151, 2, "edge" "collidable"}, - {179, 2}, - 0 - } - { - {292, 2}, - {157, 2}, - {609, 2}, - 0 - } - { - {531, 2}, - {244, 2, "edge" "collidable"}, - {483, 2}, - 0 - } - { - {172, 2}, - {225, 2, "edge" "collidable"}, - {220, 2}, - 0 - } - { - {102, 2}, - {342, 2}, - {516, 2}, - 0 - } - { - {187, 2}, - {389, 2}, - {546, 2}, - 0 - } - { - {349, 2}, - {481, 2}, - {527, 2}, - 0 - } - { - {402, 2}, - {450, 2}, - {258, 2}, - 0 - } - { - {574, 2}, - {142, 2}, - {133, 2}, - 0 - } - { - {142, 2}, - {128, 2, "edge" "collidable"}, - {133, 2}, - 0 - } - { - {515, 2}, - {618, 2}, - {621, 2}, - 0 - } - { - {521, 2}, - {372, 2, "edge" "collidable"}, - {328, 2}, - 0 - } - { - {192, 2}, - {487, 2}, - {568, 2}, - 0 - } - { - {292, 2}, - {609, 2, "edge" "collidable"}, - {596, 2}, - 0 - } - { - {163, 2}, - {493, 2}, - {608, 2}, - 0 - } - { - {571, 2}, - {574, 2}, - {137, 2}, - 0 - } - { - {574, 2}, - {133, 2, "edge" "collidable"}, - {137, 2}, - 0 - } - { - {561, 2}, - {623, 2, "edge" "collidable"}, - {627, 2}, - 0 - } - { - {522, 2}, - {428, 2, "edge" "collidable"}, - {434, 2}, - 0 - } - { - {346, 2}, - {571, 2}, - {137, 2}, - 0 - } - { - {271, 2}, - {101, 2}, - {572, 2}, - 0 - } - { - {264, 2}, - {617, 2, "edge" "collidable"}, - {564, 2}, - 0 - } - { - {628, 2}, - {223, 2}, - {407, 2}, - 0 - } - { - {363, 2}, - {346, 2}, - {141, 2}, - 0 - } - { - {346, 2}, - {137, 2, "edge" "collidable"}, - {141, 2}, - 0 - } - { - {322, 2}, - {427, 2, "edge" "collidable"}, - {204, 2}, - 0 - } - { - {481, 2}, - {533, 2}, - {524, 2}, - 0 - } - { - {463, 2}, - {363, 2}, - {143, 2}, - 0 - } - { - {363, 2}, - {141, 2, "edge" "collidable"}, - {143, 2}, - 0 - } - { - {487, 2}, - {566, 2, "edge" "collidable"}, - {568, 2}, - 0 - } - { - {306, 2}, - {216, 2, "edge" "collidable"}, - {313, 2}, - 0 - } - { - {620, 2}, - {463, 2}, - {145, 2}, - 0 - } - { - {463, 2}, - {143, 2, "edge" "collidable"}, - {145, 2}, - 0 - } - { - {122, 2}, - {318, 2}, - {282, 2}, - 0 - } - { - {497, 2}, - {483, 2, "edge" "collidable"}, - {119, 2}, - 0 - } - { - {97, 2}, - {551, 2, "edge" "collidable"}, - {555, 2}, - 0 - } - { - {521, 2}, - {153, 2}, - {372, 2}, - 0 - } - { - {248, 2}, - {620, 2}, - {148, 2}, - 0 - } - { - {620, 2}, - {145, 2, "edge" "collidable"}, - {148, 2}, - 0 - } - { - {108, 2}, - {547, 2}, - {451, 2}, - 0 - } - { - {355, 2}, - {381, 2}, - {189, 2}, - 0 - } - { - {246, 2}, - {248, 2}, - {150, 2}, - 0 - } - { - {248, 2}, - {148, 2, "edge" "collidable"}, - {150, 2}, - 0 - } - { - {489, 2}, - {482, 2}, - {465, 2}, - 0 - } - { - {418, 2}, - {433, 2, "edge" "collidable"}, - {461, 2}, - 0 - } - { - {317, 2}, - {246, 2}, - {152, 2}, - 0 - } - { - {246, 2}, - {150, 2, "edge" "collidable"}, - {152, 2}, - 0 - } - { - {470, 2}, - {314, 2, "edge" "collidable"}, - {405, 2}, - 0 - } - { - {160, 2}, - {505, 2, "edge" "collidable"}, - {512, 2}, - 0 - } - { - {563, 2}, - {317, 2}, - {154, 2}, - 0 - } - { - {317, 2}, - {152, 2, "edge" "collidable"}, - {154, 2}, - 0 - } - { - {481, 2}, - {524, 2, "edge" "collidable"}, - {527, 2}, - 0 - } - { - {475, 2}, - {310, 2}, - {562, 2}, - 0 - } - { - {569, 2}, - {563, 2}, - {156, 2}, - 0 - } - { - {563, 2}, - {154, 2, "edge" "collidable"}, - {156, 2}, - 0 - } - { - {601, 2}, - {631, 2, "edge" "collidable"}, - {447, 2}, - 0 - } - { - {388, 2}, - {554, 2}, - {495, 2}, - 0 - } - { - {206, 2}, - {569, 2}, - {158, 2}, - 0 - } - { - {569, 2}, - {156, 2, "edge" "collidable"}, - {158, 2}, - 0 - } - { - {354, 2}, - {180, 2}, - {577, 2}, - 0 - } - { - {556, 2}, - {561, 2}, - {627, 2}, - 0 - } - { - {416, 2}, - {206, 2}, - {158, 2}, - 0 - } - { - {511, 2}, - {149, 2}, - {392, 2}, - 0 - } - { - {493, 2}, - {604, 2, "edge" "collidable"}, - {608, 2}, - 0 - } - { - {342, 2}, - {160, 2}, - {512, 2}, - 0 - } - { - {250, 2}, - {416, 2}, - {162, 2}, - 0 - } - { - {416, 2}, - {158, 2, "edge" "collidable"}, - {162, 2}, - 0 - } - { - {329, 2}, - {135, 2, "edge" "collidable"}, - {188, 2}, - 0 - } - { - {324, 2}, - {347, 2}, - {557, 2}, - 0 - } - { - {424, 2}, - {233, 2}, - {471, 2}, - 0 - } - { - {127, 2}, - {230, 2, "edge" "collidable"}, - {353, 2}, - 0 - } - { - {322, 2}, - {341, 2}, - {427, 2}, - 0 - } - { - {177, 2}, - {573, 2, "edge" "collidable"}, - {575, 2}, - 0 - } - { - {155, 2}, - {250, 2}, - {166, 2}, - 0 - } - { - {250, 2}, - {162, 2, "edge" "collidable"}, - {166, 2}, - 0 - } - { - {406, 2}, - {282, 2}, - {233, 2}, - 0 - } - { - {281, 2}, - {415, 2, "edge" "collidable"}, - {423, 2}, - 0 - } - { - {310, 2}, - {499, 2}, - {559, 2}, - 0 - } - { - {357, 2}, - {529, 2, "edge" "collidable"}, - {532, 2}, - 0 - } - { - {561, 2}, - {515, 2}, - {623, 2}, - 0 - } - { - {597, 2}, - {588, 2}, - {537, 2}, - 0 - } - { - {134, 2}, - {155, 2}, - {170, 2}, - 0 - } - { - {155, 2}, - {166, 2, "edge" "collidable"}, - {170, 2}, - 0 - } - { - {367, 2}, - {616, 2, "edge" "collidable"}, - {619, 2}, - 0 - } - { - {418, 2}, - {227, 2}, - {433, 2}, - 0 - } - { - {275, 2}, - {354, 2}, - {579, 2}, - 0 - } - { - {101, 2}, - {385, 2, "edge" "collidable"}, - {572, 2}, - 0 - } - { - {359, 2}, - {338, 2, "edge" "collidable"}, - {528, 2}, - 0 - } - { - {134, 2}, - {170, 2, "edge" "collidable"}, - {174, 2}, - 0 - } - { - {100, 2}, - {328, 2, "edge" "collidable"}, - {147, 2}, - 0 - } - { - {265, 2}, - {484, 2, "edge" "collidable"}, - {488, 2}, - 0 - } - { - {299, 2}, - {424, 2}, - {325, 2}, - 0 - } - { - {470, 2}, - {552, 2}, - {314, 2}, - 0 - } - { - {554, 2}, - {440, 2}, - {380, 2}, - 0 - } - { - {545, 2}, - {509, 2}, - {453, 2}, - 0 - } - { - {134, 2}, - {174, 2, "edge" "collidable"}, - {178, 2}, - 0 - } - { - {487, 2}, - {475, 2}, - {566, 2}, - 0 - } - { - {588, 2}, - {262, 2, "edge" "collidable"}, - {537, 2}, - 0 - } - { - {455, 2}, - {602, 2, "edge" "collidable"}, - {117, 2}, - 0 - } - { - {379, 2}, - {528, 2, "edge" "collidable"}, - {565, 2}, - 0 - } - { - {127, 2}, - {191, 2}, - {230, 2}, - 0 - } - { - {102, 2}, - {516, 2, "edge" "collidable"}, - {520, 2}, - 0 - } - { - {293, 2}, - {351, 2}, - {476, 2}, - 0 - } - { - {274, 2}, - {473, 2}, - {362, 2}, - 0 - } - { - {157, 2}, - {387, 2, "edge" "collidable"}, - {609, 2}, - 0 - } - { - {452, 2}, - {275, 2}, - {583, 2}, - 0 - } - { - {210, 2}, - {613, 2, "edge" "collidable"}, - {394, 2}, - 0 - } - { - {291, 2}, - {530, 2, "edge" "collidable"}, - {438, 2}, - 0 - } - { - {218, 2}, - {492, 2, "edge" "collidable"}, - {496, 2}, - 0 - } - { - {514, 2}, - {423, 2, "edge" "collidable"}, - {428, 2}, - 0 - } - { - {588, 2}, - {269, 2}, - {262, 2}, - 0 - } - { - {511, 2}, - {446, 2, "edge" "collidable"}, - {149, 2}, - 0 - } - { - {332, 2}, - {163, 2}, - {610, 2}, - 0 - } - { - {553, 2}, - {219, 2, "edge" "collidable"}, - {93, 2}, - 0 - } - { - {196, 2}, - {326, 2}, - {395, 2}, - 0 - } - { - {422, 2}, - {517, 2, "edge" "collidable"}, - {194, 2}, - 0 - } - { - {164, 2}, - {478, 2}, - {333, 2}, - 0 - } - { - {508, 2}, - {397, 2, "edge" "collidable"}, - {578, 2}, - 0 - } - { - {388, 2}, - {495, 2, "edge" "collidable"}, - {543, 2}, - 0 - } - { - {215, 2}, - {437, 2}, - {486, 2}, - 0 - } - { - {435, 2}, - {210, 2}, - {394, 2}, - 0 - } - { - {191, 2}, - {485, 2}, - {376, 2}, - 0 - } - { - {295, 2}, - {100, 2}, - {147, 2}, - 0 - } - { - {192, 2}, - {568, 2, "edge" "collidable"}, - {570, 2}, - 0 - } - { - {184, 2}, - {86, 2}, - {193, 2}, - 0 - } - { - {86, 2}, - {190, 2, "edge" "collidable"}, - {193, 2}, - 0 - } - { - {326, 2}, - {391, 2, "edge" "collidable"}, - {395, 2}, - 0 - } - { - {449, 2}, - {417, 2}, - {220, 2}, - 0 - } - { - {163, 2}, - {608, 2, "edge" "collidable"}, - {610, 2}, - 0 - } - { - {548, 2}, - {161, 2, "edge" "collidable"}, - {115, 2}, - 0 - } - { - {452, 2}, - {583, 2, "edge" "collidable"}, - {587, 2}, - 0 - } - { - {222, 2}, - {292, 2}, - {596, 2}, - 0 - } - { - {252, 2}, - {184, 2}, - {197, 2}, - 0 - } - { - {184, 2}, - {193, 2, "edge" "collidable"}, - {197, 2}, - 0 - } - { - {180, 2}, - {177, 2}, - {575, 2}, - 0 - } - { - {132, 2}, - {91, 2, "edge" "collidable"}, - {400, 2}, - 0 - } - { - {96, 2}, - {252, 2}, - {197, 2}, - 0 - } - { - {525, 2}, - {299, 2}, - {345, 2}, - 0 - } - { - {459, 2}, - {490, 2, "edge" "collidable"}, - {425, 2}, - 0 - } - { - {329, 2}, - {301, 2}, - {135, 2}, - 0 - } - { - {432, 2}, - {96, 2}, - {201, 2}, - 0 - } - { - {96, 2}, - {197, 2, "edge" "collidable"}, - {201, 2}, - 0 - } - { - {411, 2}, - {357, 2}, - {532, 2}, - 0 - } - { - {175, 2}, - {581, 2, "edge" "collidable"}, - {211, 2}, - 0 - } - { - {502, 2}, - {432, 2}, - {203, 2}, - 0 - } - { - {432, 2}, - {201, 2, "edge" "collidable"}, - {203, 2}, - 0 - } - { - {273, 2}, - {211, 2}, - {224, 2}, - 0 - } - { - {339, 2}, - {594, 2, "edge" "collidable"}, - {382, 2}, - 0 - } - { - {622, 2}, - {502, 2}, - {205, 2}, - 0 - } - { - {502, 2}, - {203, 2, "edge" "collidable"}, - {205, 2}, - 0 - } - { - {431, 2}, - {507, 2}, - {390, 2}, - 0 - } - { - {499, 2}, - {555, 2, "edge" "collidable"}, - {559, 2}, - 0 - } - { - {200, 2}, - {622, 2}, - {207, 2}, - 0 - } - { - {622, 2}, - {205, 2, "edge" "collidable"}, - {207, 2}, - 0 - } - { - {491, 2}, - {129, 2, "edge" "collidable"}, - {581, 2}, - 0 - } - { - {475, 2}, - {562, 2, "edge" "collidable"}, - {566, 2}, - 0 - } - { - {285, 2}, - {200, 2}, - {209, 2}, - 0 - } - { - {200, 2}, - {207, 2, "edge" "collidable"}, - {209, 2}, - 0 - } - { - {218, 2}, - {123, 2}, - {492, 2}, - 0 - } - { - {554, 2}, - {380, 2, "edge" "collidable"}, - {495, 2}, - 0 - } - { - {426, 2}, - {285, 2}, - {209, 2}, - 0 - } - { - {402, 2}, - {258, 2, "edge" "collidable"}, - {504, 2}, - 0 - } - { - {354, 2}, - {577, 2, "edge" "collidable"}, - {579, 2}, - 0 - } - { - {556, 2}, - {627, 2, "edge" "collidable"}, - {631, 2}, - 0 - } - { - {439, 2}, - {426, 2}, - {213, 2}, - 0 - } - { - {426, 2}, - {209, 2, "edge" "collidable"}, - {213, 2}, - 0 - } - { - {308, 2}, - {587, 2, "edge" "collidable"}, - {591, 2}, - 0 - } - { - {214, 2}, - {196, 2}, - {399, 2}, - 0 - } - { - {491, 2}, - {513, 2}, - {129, 2}, - 0 - } - { - {295, 2}, - {147, 2, "edge" "collidable"}, - {393, 2}, - 0 - } - { - {514, 2}, - {281, 2}, - {423, 2}, - 0 - } - { - {479, 2}, - {313, 2, "edge" "collidable"}, - {430, 2}, - 0 - } - { - {544, 2}, - {439, 2}, - {217, 2}, - 0 - } - { - {439, 2}, - {213, 2, "edge" "collidable"}, - {217, 2}, - 0 - } - { - {625, 2}, - {366, 2, "edge" "collidable"}, - {370, 2}, - 0 - } - { - {153, 2}, - {278, 2, "edge" "collidable"}, - {372, 2}, - 0 - } - { - {507, 2}, - {264, 2}, - {564, 2}, - 0 - } - { - {547, 2}, - {176, 2}, - {442, 2}, - 0 - } - { - {233, 2}, - {257, 2, "edge" "collidable"}, - {237, 2}, - 0 - } - { - {291, 2}, - {598, 2}, - {530, 2}, - 0 - } - { - {460, 2}, - {544, 2}, - {221, 2}, - 0 - } - { - {544, 2}, - {217, 2, "edge" "collidable"}, - {221, 2}, - 0 - } - { - {351, 2}, - {464, 2}, - {472, 2}, - 0 - } - { - {485, 2}, - {501, 2}, - {630, 2}, - 0 - } - { - {441, 2}, - {117, 2, "edge" "collidable"}, - {219, 2}, - 0 - } - { - {153, 2}, - {560, 2}, - {278, 2}, - 0 - } - { - {172, 2}, - {266, 2}, - {225, 2}, - 0 - } - { - {603, 2}, - {418, 2}, - {461, 2}, - 0 - } - { - {443, 2}, - {519, 2}, - {500, 2}, - 0 - } - { - {457, 2}, - {443, 2}, - {615, 2}, - 0 - } - { - {605, 2}, - {460, 2}, - {226, 2}, - 0 - } - { - {460, 2}, - {221, 2, "edge" "collidable"}, - {226, 2}, - 0 - } - { - {552, 2}, - {603, 2}, - {466, 2}, - 0 - } - { - {377, 2}, - {218, 2}, - {496, 2}, - 0 - } - { - {485, 2}, - {630, 2, "edge" "collidable"}, - {376, 2}, - 0 - } - { - {215, 2}, - {486, 2, "edge" "collidable"}, - {421, 2}, - 0 - } - { - {533, 2}, - {102, 2}, - {520, 2}, - 0 - } - { - {97, 2}, - {187, 2}, - {551, 2}, - 0 - } - { - {533, 2}, - {520, 2, "edge" "collidable"}, - {524, 2}, - 0 - } - { - {478, 2}, - {412, 2}, - {333, 2}, - 0 - } - { - {510, 2}, - {605, 2}, - {231, 2}, - 0 - } - { - {605, 2}, - {226, 2, "edge" "collidable"}, - {231, 2}, - 0 - } - { - {404, 2}, - {386, 2}, - {182, 2}, - 0 - } - { - {210, 2}, - {336, 2}, - {613, 2}, - 0 - } - { - {501, 2}, - {404, 2}, - {98, 2}, - 0 - } - { - {108, 2}, - {451, 2, "edge" "collidable"}, - {454, 2}, - 0 - } - { - {165, 2}, - {108, 2}, - {454, 2}, - 0 - } - { - {408, 2}, - {420, 2, "edge" "collidable"}, - {617, 2}, - 0 - } - { - {279, 2}, - {510, 2}, - {235, 2}, - 0 - } - { - {510, 2}, - {231, 2, "edge" "collidable"}, - {235, 2}, - 0 - } - { - {450, 2}, - {229, 2, "edge" "collidable"}, - {258, 2}, - 0 - } - { - {273, 2}, - {175, 2}, - {211, 2}, - 0 - } - { - {606, 2}, - {668, 2, "edge" "collidable"}, - {378, 2}, - 0 - } - { - {337, 2}, - {458, 2, "edge" "collidable"}, - {462, 2}, - 0 - } - { - {592, 2}, - {353, 2, "edge" "collidable"}, - {445, 2}, - 0 - } - { - {398, 2}, - {586, 2, "edge" "collidable"}, - {229, 2}, - 0 - } - { - {199, 2}, - {279, 2}, - {239, 2}, - 0 - } - { - {279, 2}, - {235, 2, "edge" "collidable"}, - {239, 2}, - 0 - } - { - {121, 2}, - {580, 2}, - {595, 2}, - 0 - } - { - {367, 2}, - {375, 2}, - {616, 2}, - 0 - } - { - {199, 2}, - {239, 2, "edge" "collidable"}, - {241, 2}, - 0 - } - { - {373, 2}, - {538, 2, "edge" "collidable"}, - {542, 2}, - 0 - } - { - {413, 2}, - {504, 2, "edge" "collidable"}, - {321, 2}, - 0 - } - { - {357, 2}, - {349, 2}, - {529, 2}, - 0 - } - { - {310, 2}, - {559, 2, "edge" "collidable"}, - {562, 2}, - 0 - } - { - {270, 2}, - {400, 2, "edge" "collidable"}, - {517, 2}, - 0 - } - { - {422, 2}, - {270, 2}, - {517, 2}, - 0 - } - { - {628, 2}, - {407, 2, "edge" "collidable"}, - {415, 2}, - 0 - } - { - {281, 2}, - {628, 2}, - {415, 2}, - 0 - } - { - {448, 2}, - {254, 2}, - {251, 2}, - 0 - } - { - {254, 2}, - {249, 2, "edge" "collidable"}, - {251, 2}, - 0 - } - { - {531, 2}, - {535, 2}, - {244, 2}, - 0 - } - { - {180, 2}, - {575, 2, "edge" "collidable"}, - {577, 2}, - 0 - } - { - {365, 2}, - {448, 2}, - {253, 2}, - 0 - } - { - {448, 2}, - {251, 2, "edge" "collidable"}, - {253, 2}, - 0 - } - { - {410, 2}, - {550, 2}, - {84, 2}, - 0 - } - { - {332, 2}, - {610, 2, "edge" "collidable"}, - {612, 2}, - 0 - } - { - {350, 2}, - {365, 2}, - {255, 2}, - 0 - } - { - {365, 2}, - {253, 2, "edge" "collidable"}, - {255, 2}, - 0 - } - { - {601, 2}, - {556, 2}, - {631, 2}, - 0 - } - { - {104, 2}, - {534, 2, "edge" "collidable"}, - {538, 2}, - 0 - } - { - {196, 2}, - {395, 2, "edge" "collidable"}, - {399, 2}, - 0 - } - { - {509, 2}, - {438, 2, "edge" "collidable"}, - {453, 2}, - 0 - } - { - {351, 2}, - {472, 2, "edge" "collidable"}, - {476, 2}, - 0 - } - { - {406, 2}, - {122, 2}, - {282, 2}, - 0 - } - { - {277, 2}, - {350, 2}, - {259, 2}, - 0 - } - { - {350, 2}, - {255, 2, "edge" "collidable"}, - {259, 2}, - 0 - } - { - {507, 2}, - {564, 2, "edge" "collidable"}, - {390, 2}, - 0 - } - { - {339, 2}, - {382, 2}, - {590, 2}, - 0 - } - { - {165, 2}, - {454, 2, "edge" "collidable"}, - {458, 2}, - 0 - } - { - {339, 2}, - {474, 2}, - {594, 2}, - 0 - } - { - {389, 2}, - {373, 2}, - {542, 2}, - 0 - } - { - {271, 2}, - {572, 2, "edge" "collidable"}, - {526, 2}, - 0 - } - { - {168, 2}, - {277, 2}, - {263, 2}, - 0 - } - { - {277, 2}, - {259, 2, "edge" "collidable"}, - {263, 2}, - 0 - } - { - {324, 2}, - {557, 2, "edge" "collidable"}, - {304, 2}, - 0 - } - { - {412, 2}, - {183, 2}, - {589, 2}, - 0 - } - { - {567, 2}, - {479, 2}, - {430, 2}, - 0 - } - { - {164, 2}, - {333, 2, "edge" "collidable"}, - {338, 2}, - 0 - } - { - {186, 2}, - {425, 2, "edge" "collidable"}, - {161, 2}, - 0 - } - { - {381, 2}, - {445, 2, "edge" "collidable"}, - {189, 2}, - 0 - } - { - {611, 2}, - {168, 2}, - {267, 2}, - 0 - } - { - {168, 2}, - {263, 2, "edge" "collidable"}, - {267, 2}, - 0 - } - { - {537, 2, "edge" "collidable"}, - {536, 2}, - {414, 2}, - 0 - } - { - {459, 2}, - {369, 2}, - {490, 2}, - 0 - } - { - {126, 2}, - {624, 2, "edge" "collidable"}, - {602, 2}, - 0 - } - { - {455, 2}, - {126, 2}, - {602, 2}, - 0 - } - { - {474, 2}, - {368, 2}, - {541, 2}, - 0 - } - { - {513, 2}, - {447, 2, "edge" "collidable"}, - {129, 2}, - 0 - } - { - {508, 2}, - {355, 2}, - {397, 2}, - 0 - } - { - {355, 2}, - {189, 2, "edge" "collidable"}, - {397, 2}, - 0 - } - { - {240, 2}, - {611, 2}, - {272, 2}, - 0 - } - { - {611, 2}, - {267, 2, "edge" "collidable"}, - {272, 2}, - 0 - } - { - {202, 2}, - {93, 2, "edge" "collidable"}, - {540, 2}, - 0 - } - { - {369, 2}, - {202, 2}, - {540, 2}, - 0 - } - { - {464, 2}, - {477, 2}, - {469, 2}, - 0 - } - { - {477, 2}, - {467, 2, "edge" "collidable"}, - {469, 2}, - 0 - } - { - {301, 2}, - {295, 2}, - {393, 2}, - 0 - } - { - {379, 2}, - {359, 2}, - {528, 2}, - 0 - } - { - {549, 2}, - {240, 2}, - {276, 2}, - 0 - } - { - {240, 2}, - {272, 2, "edge" "collidable"}, - {276, 2}, - 0 - } - { - {264, 2}, - {408, 2}, - {617, 2}, - 0 - } - { - {618, 2}, - {619, 2, "edge" "collidable"}, - {621, 2}, - 0 - } - { - {593, 2}, - {198, 2, "edge" "collidable"}, - {181, 2}, - 0 - } - { - {558, 2}, - {593, 2}, - {181, 2}, - 0 - } - { - {414, 2}, - {536, 2, "edge" "collidable"}, - {624, 2}, - 0 - } - { - {368, 2}, - {268, 2, "edge" "collidable"}, - {541, 2}, - 0 - } - { - {234, 2}, - {549, 2}, - {280, 2}, - 0 - } - { - {549, 2}, - {276, 2, "edge" "collidable"}, - {280, 2}, - 0 - } - { - {506, 2}, - {449, 2}, - {146, 2}, - 0 - } - { - {449, 2}, - {220, 2, "edge" "collidable"}, - {146, 2}, - 0 - } - { - {175, 2}, - {491, 2}, - {581, 2}, - 0 - } - { - {513, 2}, - {601, 2}, - {447, 2}, - 0 - } - { - {308, 2}, - {452, 2}, - {587, 2}, - 0 - } - { - {349, 2}, - {527, 2, "edge" "collidable"}, - {529, 2}, - 0 - } - { - {312, 2}, - {234, 2}, - {284, 2}, - 0 - } - { - {234, 2}, - {280, 2, "edge" "collidable"}, - {284, 2}, - 0 - } - { - {289, 2}, - {606, 2}, - {378, 2}, - 0 - } - { - {398, 2}, - {131, 2}, - {586, 2}, - 0 - } - { - {343, 2}, - {312, 2}, - {286, 2}, - 0 - } - { - {312, 2}, - {284, 2, "edge" "collidable"}, - {286, 2}, - 0 - } - { - {131, 2}, - {334, 2}, - {586, 2}, - 0 - } - { - {334, 2}, - {139, 2, "edge" "collidable"}, - {586, 2}, - 0 - } - { - {553, 2}, - {441, 2}, - {219, 2}, - 0 - } - { - {535, 2}, - {578, 2, "edge" "collidable"}, - {244, 2}, - 0 - } - { - {457, 2}, - {615, 2, "edge" "collidable"}, - {268, 2}, - 0 - } - { - {368, 2}, - {457, 2}, - {268, 2}, - 0 - } - { - {302, 2}, - {343, 2}, - {290, 2}, - 0 - } - { - {343, 2}, - {286, 2, "edge" "collidable"}, - {290, 2}, - 0 - } - { - {301, 2}, - {393, 2, "edge" "collidable"}, - {135, 2}, - 0 - } - { - {550, 2}, - {215, 2}, - {421, 2}, - 0 - } - { - {437, 2}, - {296, 2, "edge" "collidable"}, - {486, 2}, - 0 - } - { - {386, 2}, - {565, 2, "edge" "collidable"}, - {182, 2}, - 0 - } - { - {479, 2}, - {306, 2}, - {313, 2}, - 0 - } - { - {227, 2}, - {169, 2}, - {599, 2}, - 0 - } - { - {159, 2}, - {302, 2}, - {294, 2}, - 0 - } - { - {302, 2}, - {290, 2, "edge" "collidable"}, - {294, 2}, - 0 - } - { - {392, 2}, - {149, 2, "edge" "collidable"}, - {385, 2}, - 0 - } - { - {431, 2}, - {390, 2, "edge" "collidable"}, - {446, 2}, - 0 - } - { - {413, 2}, - {402, 2}, - {504, 2}, - 0 - } - { - {545, 2}, - {453, 2, "edge" "collidable"}, - {296, 2}, - 0 - } - { - {130, 2}, - {435, 2}, - {112, 2}, - 0 - } - { - {435, 2}, - {394, 2, "edge" "collidable"}, - {112, 2}, - 0 - } - { - {140, 2}, - {159, 2}, - {298, 2}, - 0 - } - { - {159, 2}, - {294, 2, "edge" "collidable"}, - {298, 2}, - 0 - } - { - {582, 2}, - {612, 2, "edge" "collidable"}, - {614, 2}, - 0 - } - { - {411, 2}, - {532, 2, "edge" "collidable"}, - {534, 2}, - 0 - } - { - {511, 2}, - {431, 2}, - {446, 2}, - 0 - } - { - {509, 2}, - {291, 2}, - {438, 2}, - 0 - } - { - {377, 2}, - {496, 2, "edge" "collidable"}, - {505, 2}, - 0 - } - { - {283, 2}, - {667, 2, "edge" "collidable"}, - {391, 2}, - 0 - } - { - {125, 2}, - {311, 2, "edge" "collidable"}, - {315, 2}, - 0 - } - { - {125, 2}, - {315, 2}, - {208, 2}, - 0 - } - { - {212, 2}, - {140, 2}, - {303, 2}, - 0 - } - { - {140, 2}, - {298, 2, "edge" "collidable"}, - {303, 2}, - 0 - } - { - {404, 2}, - {182, 2, "edge" "collidable"}, - {98, 2}, - 0 - } - { - {493, 2}, - {232, 2}, - {604, 2}, - 0 - } - { - {597, 2}, - {537, 2}, - {414, 2}, - 0 - } - { - {270, 2}, - {132, 2}, - {400, 2}, - 0 - } - { - {499, 2}, - {97, 2}, - {555, 2}, - 0 - } - { - {535, 2}, - {508, 2}, - {578, 2}, - 0 - } - { - {584, 2}, - {212, 2}, - {307, 2}, - 0 - } - { - {212, 2}, - {303, 2, "edge" "collidable"}, - {307, 2}, - 0 - } - { - {130, 2}, - {112, 2, "edge" "collidable"}, - {151, 2}, - 0 - } - { - {195, 2}, - {130, 2}, - {151, 2}, - 0 - } - { - {548, 2}, - {186, 2}, - {161, 2}, - 0 - } - { - {337, 2}, - {165, 2}, - {458, 2}, - 0 - } - { - {474, 2}, - {541, 2, "edge" "collidable"}, - {594, 2}, - 0 - } - { - {176, 2}, - {522, 2}, - {434, 2}, - 0 - } - { - {125, 2}, - {584, 2}, - {311, 2}, - 0 - } - { - {584, 2}, - {307, 2, "edge" "collidable"}, - {311, 2}, - 0 - } - { - {525, 2}, - {345, 2, "edge" "collidable"}, - {216, 2}, - 0 - } - { - {306, 2}, - {525, 2}, - {216, 2}, - 0 - } - { - {625, 2}, - {238, 2}, - {366, 2}, - 0 - } - { - {282, 2, "edge" "collidable"}, - {257, 2}, - {233, 2}, - 0 - } - { - {585, 2}, - {208, 2}, - {315, 2}, - 0 - } - { - {336, 2}, - {329, 2}, - {188, 2}, - 0 - } - { - {582, 2}, - {332, 2}, - {612, 2}, - 0 - } - { - {580, 2}, - {308, 2}, - {591, 2}, - 0 - } - { - {373, 2}, - {104, 2}, - {538, 2}, - 0 - } - { - {473, 2}, - {360, 2, "edge" "collidable"}, - {362, 2}, - 0 - } - { - {320, 2}, - {585, 2}, - {319, 2}, - 0 - } - { - {585, 2}, - {315, 2, "edge" "collidable"}, - {319, 2}, - 0 - } - { - {173, 2}, - {470, 2}, - {405, 2}, - 0 - } - { - {552, 2}, - {466, 2, "edge" "collidable"}, - {314, 2}, - 0 - } - { - {289, 2}, - {669, 2, "edge" "collidable"}, - {383, 2}, - 0 - } - { - {283, 2}, - {289, 2}, - {383, 2}, - 0 - } - { - {157, 2}, - {173, 2}, - {387, 2}, - 0 - } - { - {498, 2}, - {670, 2, "edge" "collidable"}, - {374, 2}, - 0 - } - { - {95, 2}, - {320, 2}, - {323, 2}, - 0 - } - { - {320, 2}, - {319, 2, "edge" "collidable"}, - {323, 2}, - 0 - } - { - {396, 2}, - {321, 2, "edge" "collidable"}, - {91, 2}, - 0 - } - { - {132, 2}, - {396, 2}, - {91, 2}, - 0 - } - { - {214, 2}, - {399, 2, "edge" "collidable"}, - {403, 2}, - 0 - } - { - {223, 2}, - {214, 2}, - {403, 2}, - 0 - } - { - {173, 2}, - {405, 2, "edge" "collidable"}, - {387, 2}, - 0 - } - { - {318, 2}, - {422, 2}, - {194, 2}, - 0 - } - { - {236, 2}, - {95, 2}, - {327, 2}, - 0 - } - { - {95, 2}, - {323, 2, "edge" "collidable"}, - {327, 2}, - 0 - } - { - {567, 2}, - {430, 2, "edge" "collidable"}, - {198, 2}, - 0 - } - { - {593, 2}, - {567, 2}, - {198, 2}, - 0 - } - { - {169, 2}, - {167, 2, "edge" "collidable"}, - {599, 2}, - 0 - } - { - {607, 2}, - {192, 2}, - {570, 2}, - 0 - } - { - {227, 2}, - {599, 2, "edge" "collidable"}, - {433, 2}, - 0 - } - { - {299, 2}, - {325, 2, "edge" "collidable"}, - {345, 2}, - 0 - } - { - {260, 2}, - {236, 2}, - {331, 2}, - 0 - } - { - {236, 2}, - {327, 2, "edge" "collidable"}, - {331, 2}, - 0 - } - { - {424, 2}, - {471, 2, "edge" "collidable"}, - {325, 2}, - 0 - } - { - {606, 2}, - {498, 2}, - {374, 2}, - 0 - } - { - {123, 2}, - {488, 2, "edge" "collidable"}, - {492, 2}, - 0 - } - { - {441, 2}, - {455, 2}, - {117, 2}, - 0 - } - { - {347, 2}, - {115, 2, "edge" "collidable"}, - {557, 2}, - 0 - } - { - {183, 2}, - {590, 2}, - {82, 2}, - 0 - } - { - {300, 2}, - {260, 2}, - {335, 2}, - 0 - } - { - {260, 2}, - {331, 2, "edge" "collidable"}, - {335, 2}, - 0 - } - { - {288, 2}, - {204, 2, "edge" "collidable"}, - {261, 2}, - 0 - } - { - {443, 2}, - {500, 2, "edge" "collidable"}, - {615, 2}, - 0 - } - { - {558, 2}, - {181, 2, "edge" "collidable"}, - {420, 2}, - 0 - } - { - {598, 2}, - {388, 2}, - {543, 2}, - 0 - } - { - {598, 2}, - {543, 2, "edge" "collidable"}, - {530, 2}, - 0 - } - { - {369, 2}, - {540, 2, "edge" "collidable"}, - {490, 2}, - 0 - } - { - {429, 2}, - {300, 2}, - {335, 2}, - 0 - } - { - {503, 2}, - {506, 2}, - {146, 2}, - 0 - } - { - {429, 2}, - {335, 2, "edge" "collidable"}, - {340, 2}, - 0 - } - { - {359, 2}, - {164, 2}, - {338, 2}, - 0 - } - { - {186, 2}, - {459, 2}, - {425, 2}, - 0 - } - { - {482, 2}, - {337, 2}, - {462, 2}, - 0 - } - { - {408, 2}, - {558, 2}, - {420, 2}, - 0 - } - { - {266, 2}, - {288, 2}, - {261, 2}, - 0 - } - { - {482, 2}, - {462, 2, "edge" "collidable"}, - {465, 2}, - 0 - } - { - {138, 2}, - {429, 2}, - {344, 2}, - 0 - } - { - {429, 2}, - {340, 2, "edge" "collidable"}, - {344, 2}, - 0 - } - { - {269, 2}, - {410, 2}, - {110, 2}, - 0 - } - { - {410, 2}, - {84, 2, "edge" "collidable"}, - {110, 2}, - 0 - } - { - {265, 2}, - {539, 2}, - {484, 2}, - 0 - } - { - {539, 2}, - {480, 2, "edge" "collidable"}, - {484, 2}, - 0 - } - { - {464, 2}, - {469, 2, "edge" "collidable"}, - {472, 2}, - 0 - } - { - {497, 2}, - {531, 2}, - {483, 2}, - 0 - } - { - {316, 2}, - {138, 2}, - {348, 2}, - 0 - } - { - {138, 2}, - {344, 2, "edge" "collidable"}, - {348, 2}, - 0 - } - { - {498, 2}, - {625, 2}, - {370, 2}, - 0 - } - { - {101, 2}, - {392, 2}, - {385, 2}, - 0 - } - { - {501, 2}, - {98, 2, "edge" "collidable"}, - {630, 2}, - 0 - } - { - {375, 2}, - {614, 2, "edge" "collidable"}, - {616, 2}, - 0 - } - { - {126, 2}, - {414, 2}, - {624, 2}, - 0 - } - { - {603, 2}, - {461, 2, "edge" "collidable"}, - {466, 2}, - 0 - } - { - {523, 2}, - {316, 2}, - {352, 2}, - 0 - } - { - {316, 2}, - {348, 2, "edge" "collidable"}, - {352, 2}, - 0 - } - { - {398, 2}, - {229, 2}, - {450, 2}, - 0 - } - { - {123, 2}, - {265, 2}, - {488, 2}, - 0 - } - { - {269, 2}, - {110, 2, "edge" "collidable"}, - {262, 2}, - 0 - } - { - {503, 2}, - {146, 2, "edge" "collidable"}, - {167, 2}, - 0 - } - { - {386, 2}, - {379, 2}, - {565, 2}, - 0 - } - { - {275, 2}, - {579, 2, "edge" "collidable"}, - {583, 2}, - 0 - } - { - {287, 2}, - {523, 2}, - {356, 2}, - 0 - } - { - {523, 2}, - {352, 2, "edge" "collidable"}, - {356, 2}, - 0 - } - { - {550, 2}, - {421, 2, "edge" "collidable"}, - {84, 2}, - 0 - } - { - {375, 2}, - {582, 2}, - {614, 2}, - 0 - } - { - {256, 2}, - {287, 2}, - {358, 2}, - 0 - } - { - {287, 2}, - {356, 2, "edge" "collidable"}, - {358, 2}, - 0 - } - { - {412, 2}, - {589, 2, "edge" "collidable"}, - {333, 2}, - 0 - } - { - {515, 2}, - {621, 2, "edge" "collidable"}, - {623, 2}, - 0 - } - { - {473, 2}, - {256, 2}, - {360, 2}, - 0 - } - { - {256, 2}, - {358, 2, "edge" "collidable"}, - {360, 2}, - 0 - } - { - {222, 2}, - {642, 2, "edge" "collidable"}, - {635, 2}, - 0 - } - { - {222, 2}, - {596, 2, "edge" "collidable"}, - {642, 2}, - 0 - } - { - {634, 2, "edge" "collidable"}, - {645, 2}, - {648, 2}, - 0 - } - { - {648, 2}, - {647, 2}, - {634, 2}, - 0 - } - { - {645, 2, "edge" "collidable"}, - {637, 2}, - {649, 2}, - 0 - } - { - {649, 2}, - {648, 2}, - {645, 2}, - 0 - } - { - {643, 2, "edge" "collidable"}, - {636, 2}, - {650, 2}, - 0 - } - { - {650, 2}, - {651, 2}, - {643, 2}, - 0 - } - { - {633, 2, "edge" "collidable"}, - {643, 2}, - {651, 2}, - 0 - } - { - {651, 2}, - {652, 2}, - {633, 2}, - 0 - } - { - {640, 2, "edge" "collidable"}, - {638, 2}, - {653, 2}, - 0 - } - { - {653, 2}, - {654, 2}, - {640, 2}, - 0 - } - { - {632, 2, "edge" "collidable"}, - {640, 2}, - {654, 2}, - 0 - } - { - {654, 2}, - {655, 2}, - {632, 2}, - 0 - } - { - {639, 2, "edge" "collidable"}, - {634, 2}, - {647, 2}, - 0 - } - { - {647, 2}, - {656, 2}, - {639, 2}, - 0 - } - { - {638, 2, "edge" "collidable"}, - {639, 2}, - {656, 2}, - 0 - } - { - {656, 2}, - {653, 2}, - {638, 2}, - 0 - } - { - {635, 2, "edge" "collidable"}, - {641, 2}, - {658, 2}, - 0 - } - { - {658, 2}, - {657, 2}, - {635, 2}, - 0 - } - { - {641, 2, "edge" "collidable"}, - {633, 2}, - {652, 2}, - 0 - } - { - {652, 2}, - {658, 2}, - {641, 2}, - 0 - } - { - {636, 2, "edge" "collidable"}, - {644, 2}, - {659, 2}, - 0 - } - { - {659, 2}, - {650, 2}, - {636, 2}, - 0 - } - { - {644, 2, "edge" "collidable"}, - {632, 2}, - {655, 2}, - 0 - } - { - {655, 2}, - {659, 2}, - {644, 2}, - 0 - } - { - {646, 2, "edge" "collidable"}, - {626, 2, "edge" "collidable"}, - {660, 2}, - 0 - } - { - {660, 2}, - {661, 2}, - {646, 2}, - 0 - } - { - {637, 2, "edge" "collidable"}, - {646, 2}, - {661, 2}, - 0 - } - { - {661, 2}, - {649, 2}, - {637, 2}, - 0 - } - { - {657, 2}, - {222, 2}, - {635, 2}, - 0 - } - { - {498, 2}, - {671, 2, "edge" "collidable"}, - {662, 2}, - 0 - } - { - {606, 2}, - {672, 2, "edge" "collidable"}, - {663, 2}, - 0 - } - { - {289, 2}, - {673, 2, "edge" "collidable"}, - {664, 2}, - 0 - } - { - {289, 2}, - {674, 2, "edge" "collidable"}, - {665, 2}, - 0 - } - { - {289, 2}, - {675, 2, "edge" "collidable"}, - {666, 2}, - 0 - } - { - {283, 2}, - {676, 2, "edge" "collidable"}, - {667, 2}, - 0 - } - { - {283, 2}, - {383, 2, "edge" "collidable"}, - {676, 2}, - 0 - } - { - {289, 2}, - {664, 2, "edge" "collidable"}, - {675, 2}, - 0 - } - { - {289, 2}, - {378, 2, "edge" "collidable"}, - {674, 2}, - 0 - } - { - {289, 2}, - {665, 2, "edge" "collidable"}, - {673, 2}, - 0 - } - { - {606, 2}, - {374, 2, "edge" "collidable"}, - {672, 2}, - 0 - } - { - {498, 2}, - {370, 2, "edge" "collidable"}, - {671, 2}, - 0 - } - { - {498, 2}, - {662, 2, "edge" "collidable"}, - {670, 2}, - 0 - } - { - {289, 2}, - {666, 2, "edge" "collidable"}, - {669, 2}, - 0 - } - { - {606, 2}, - {663, 2, "edge" "collidable"}, - {668, 2}, - 0 - } - { - {241, 2, "edge" "collidable"}, - {243, 2}, - {199, 2}, - 0 - } - { - {249, 2}, - {254, 2}, - {247, 2, "edge" "collidable"}, - 0 - } - { - {243, 2, "edge" "collidable"}, - {245, 2}, - {199, 2}, - 0 - } - { - {247, 2}, - {254, 2}, - {245, 2, "edge" "collidable"}, - 0 - } - { - {245, 2}, - {254, 2}, - {199, 2}, - 0 - } - { - {661, 2}, - {660, 2, "edge" "collidable"}, - {677, 2}, - 0 - } - { - {677, 2, "edge" "collidable"}, - {678, 2}, - {661, 2}, - 0 - } - { - {679, 2, "edge" "collidable"}, - {80, 2}, - {468, 2}, - 0 - } - { - {468, 2}, - {680, 2, "edge" "collidable"}, - {679, 2}, - 0 - } - { - {185, 2, "edge" "collidable"}, - {190, 2}, - {86, 2}, - 0 - } - { - {681, 2, "edge" "collidable"}, - {185, 2}, - {86, 2}, - 0 - } - { - {681, 2}, - {86, 2}, - {682, 2}, - 0 - } - { - {178, 2, "edge" "collidable"}, - {681, 2}, - {682, 2}, - 0 - } - { - {134, 2}, - {178, 2}, - {682, 2}, - 0 - } - # Mesh "CurveCircle" - { - {695, 2, "edge"}, - {694, 2}, - {708, 2}, - 0 - } - { - {708, 2, "edge"}, - {709, 2}, - {695, 2}, - 0 - } - { - {696, 2, "edge"}, - {695, 2}, - {709, 2}, - 0 - } - { - {709, 2, "edge"}, - {710, 2}, - {696, 2}, - 0 - } - { - {694, 2, "edge"}, - {693, 2}, - {711, 2}, - 0 - } - { - {711, 2, "edge"}, - {708, 2}, - {694, 2}, - 0 - } - { - {697, 2, "edge"}, - {696, 2}, - {710, 2}, - 0 - } - { - {710, 2, "edge"}, - {712, 2}, - {697, 2}, - 0 - } - { - {693, 2, "edge"}, - {692, 2}, - {713, 2}, - 0 - } - { - {713, 2, "edge"}, - {711, 2}, - {693, 2}, - 0 - } - { - {698, 2, "edge"}, - {697, 2}, - {712, 2}, - 0 - } - { - {712, 2, "edge"}, - {714, 2}, - {698, 2}, - 0 - } - { - {692, 2, "edge"}, - {691, 2}, - {715, 2}, - 0 - } - { - {715, 2, "edge"}, - {713, 2}, - {692, 2}, - 0 - } - { - {699, 2, "edge"}, - {698, 2}, - {714, 2}, - 0 - } - { - {714, 2, "edge"}, - {716, 2}, - {699, 2}, - 0 - } - { - {691, 2, "edge"}, - {690, 2}, - {717, 2}, - 0 - } - { - {717, 2, "edge"}, - {715, 2}, - {691, 2}, - 0 - } - { - {700, 2, "edge"}, - {699, 2}, - {716, 2}, - 0 - } - { - {716, 2, "edge"}, - {718, 2}, - {700, 2}, - 0 - } - { - {690, 2, "edge"}, - {689, 2}, - {719, 2}, - 0 - } - { - {719, 2, "edge"}, - {717, 2}, - {690, 2}, - 0 - } - { - {701, 2, "edge"}, - {700, 2}, - {718, 2}, - 0 - } - { - {718, 2, "edge"}, - {720, 2}, - {701, 2}, - 0 - } - { - {689, 2, "edge"}, - {688, 2}, - {721, 2}, - 0 - } - { - {721, 2, "edge"}, - {719, 2}, - {689, 2}, - 0 - } - { - {702, 2, "edge"}, - {701, 2}, - {720, 2}, - 0 - } - { - {720, 2, "edge"}, - {722, 2}, - {702, 2}, - 0 - } - { - {688, 2, "edge"}, - {687, 2}, - {723, 2}, - 0 - } - { - {723, 2, "edge"}, - {721, 2}, - {688, 2}, - 0 - } - { - {703, 2, "edge"}, - {702, 2}, - {722, 2}, - 0 - } - { - {722, 2, "edge"}, - {724, 2}, - {703, 2}, - 0 - } - { - {687, 2, "edge"}, - {686, 2}, - {725, 2}, - 0 - } - { - {725, 2, "edge"}, - {723, 2}, - {687, 2}, - 0 - } - { - {704, 2, "edge"}, - {703, 2}, - {724, 2}, - 0 - } - { - {724, 2, "edge"}, - {726, 2}, - {704, 2}, - 0 - } - { - {686, 2, "edge"}, - {685, 2}, - {727, 2}, - 0 - } - { - {727, 2, "edge"}, - {725, 2}, - {686, 2}, - 0 - } - { - {705, 2, "edge"}, - {704, 2}, - {726, 2}, - 0 - } - { - {726, 2, "edge"}, - {728, 2}, - {705, 2}, - 0 - } - { - {685, 2, "edge"}, - {684, 2}, - {729, 2}, - 0 - } - { - {729, 2, "edge"}, - {727, 2}, - {685, 2}, - 0 - } - { - {706, 2, "edge"}, - {705, 2}, - {728, 2}, - 0 - } - { - {728, 2, "edge"}, - {730, 2}, - {706, 2}, - 0 - } - { - {684, 2, "edge"}, - {683, 2, "edge"}, - {731, 2}, - 0 - } - { - {731, 2, "edge"}, - {729, 2}, - {684, 2}, - 0 - } - { - {707, 2, "edge"}, - {706, 2}, - {730, 2}, - 0 - } - { - {730, 2, "edge"}, - {732, 2, "edge"}, - {707, 2}, - 0 - } - # Mesh "Font.001" - { - {817, 2, "edge" "collidable"}, - {816, 2, "edge" "collidable"}, - {819, 2}, - 3 - } - { - {818, 2, "edge" "collidable"}, - {817, 2}, - {819, 2, "edge" "collidable"}, - 3 - } - { - {813, 2, "edge" "collidable"}, - {812, 2, "edge" "collidable"}, - {815, 2}, - 3 - } - { - {814, 2, "edge" "collidable"}, - {813, 2}, - {815, 2, "edge" "collidable"}, - 3 - } - { - {802, 2, "edge" "collidable"}, - {801, 2, "edge" "collidable"}, - {808, 2}, - 3 - } - { - {803, 2, "edge" "collidable"}, - {802, 2}, - {809, 2}, - 3 - } - { - {809, 2}, - {802, 2}, - {808, 2}, - 3 - } - { - {803, 2}, - {809, 2, "edge" "collidable"}, - {811, 2}, - 3 - } - { - {810, 2, "edge" "collidable"}, - {809, 2}, - {808, 2}, - 3 - } - { - {811, 2, "edge" "collidable"}, - {810, 2}, - {806, 2}, - 3 - } - { - {806, 2}, - {810, 2}, - {808, 2}, - 3 - } - { - {811, 2}, - {806, 2, "edge" "collidable"}, - {805, 2}, - 3 - } - { - {807, 2, "edge" "collidable"}, - {806, 2}, - {808, 2, "edge" "collidable"}, - 3 - } - { - {803, 2}, - {811, 2}, - {805, 2}, - 3 - } - { - {803, 2}, - {805, 2, "edge" "collidable"}, - {804, 2, "edge" "collidable"}, - 3 - } - { - {1022, 2}, - {1043, 2, "edge" "collidable"}, - {897, 2}, - 3 - } - { - {840, 2, "edge" "collidable"}, - {838, 2, "edge" "collidable"}, - {834, 2}, - 3 - } - { - {846, 2, "edge" "collidable"}, - {969, 2}, - {745, 2}, - 3 - } - { - {1082, 2, "edge" "collidable"}, - {830, 2}, - {844, 2}, - 3 - } - { - {1069, 2, "edge" "collidable"}, - {835, 2}, - {785, 2}, - 3 - } - { - {1066, 2}, - {944, 2}, - {1029, 2}, - 3 - } - { - {748, 2, "edge" "collidable"}, - {1046, 2, "edge" "collidable"}, - {977, 2}, - 3 - } - { - {862, 2}, - {840, 2}, - {834, 2}, - 3 - } - { - {862, 2}, - {834, 2}, - {866, 2, "edge" "collidable"}, - 3 - } - { - {1034, 2}, - {821, 2, "edge" "collidable"}, - {836, 2}, - 3 - } - { - {869, 2, "edge" "collidable"}, - {797, 2}, - {949, 2}, - 3 - } - { - {905, 2, "edge" "collidable"}, - {878, 2}, - {864, 2}, - 3 - } - { - {1038, 2}, - {930, 2, "edge" "collidable"}, - {1032, 2}, - 3 - } - { - {998, 2}, - {947, 2, "edge" "collidable"}, - {1033, 2}, - 3 - } - { - {843, 2, "edge" "collidable"}, - {840, 2}, - {862, 2}, - 3 - } - { - {843, 2}, - {862, 2, "edge" "collidable"}, - {858, 2}, - 3 - } - { - {984, 2}, - {973, 2, "edge" "collidable"}, - {926, 2}, - 3 - } - { - {823, 2}, - {846, 2}, - {745, 2}, - 3 - } - { - {866, 2}, - {834, 2, "edge" "collidable"}, - {833, 2}, - 3 - } - { - {870, 2, "edge" "collidable"}, - {866, 2}, - {833, 2}, - 3 - } - { - {902, 2, "edge" "collidable"}, - {761, 2}, - {960, 2}, - 3 - } - { - {1069, 2}, - {785, 2, "edge" "collidable"}, - {1021, 2}, - 3 - } - { - {858, 2, "edge" "collidable"}, - {870, 2}, - {833, 2}, - 3 - } - { - {1023, 2, "edge" "collidable"}, - {952, 2, "edge" "collidable"}, - {1037, 2}, - 3 - } - { - {858, 2}, - {833, 2, "edge" "collidable"}, - {832, 2}, - 3 - } - { - {845, 2, "edge" "collidable"}, - {843, 2}, - {858, 2}, - 3 - } - { - {845, 2}, - {858, 2}, - {832, 2}, - 3 - } - { - {845, 2}, - {832, 2, "edge" "collidable"}, - {829, 2}, - 3 - } - { - {927, 2}, - {766, 2, "edge" "collidable"}, - {752, 2}, - 3 - } - { - {1018, 2}, - {978, 2, "edge" "collidable"}, - {795, 2}, - 3 - } - { - {946, 2}, - {853, 2, "edge" "collidable"}, - {1077, 2}, - 3 - } - { - {1058, 2}, - {757, 2}, - {922, 2}, - 3 - } - { - {949, 2}, - {906, 2, "edge" "collidable"}, - {1023, 2}, - 3 - } - { - {930, 2}, - {887, 2}, - {991, 2, "edge" "collidable"}, - 3 - } - { - {1034, 2}, - {836, 2, "edge" "collidable"}, - {1052, 2, "edge" "collidable"}, - 3 - } - { - {755, 2, "edge" "collidable"}, - {749, 2}, - {773, 2}, - 3 - } - { - {825, 2, "edge" "collidable"}, - {820, 2, "edge" "collidable"}, - {854, 2}, - 3 - } - { - {845, 2}, - {829, 2, "edge" "collidable"}, - {825, 2}, - 3 - } - { - {966, 2, "edge" "collidable"}, - {919, 2, "edge" "collidable"}, - {757, 2}, - 3 - } - { - {736, 2, "edge" "collidable"}, - {874, 2, "edge" "collidable"}, - {857, 2}, - 3 - } - { - {1043, 2}, - {1072, 2}, - {841, 2, "edge" "collidable"}, - 3 - } - { - {984, 2}, - {956, 2, "edge" "collidable"}, - {973, 2}, - 3 - } - { - {845, 2}, - {825, 2}, - {854, 2}, - 3 - } - { - {965, 2}, - {995, 2, "edge" "collidable"}, - {1083, 2}, - 3 - } - { - {912, 2}, - {822, 2, "edge" "collidable"}, - {782, 2}, - 3 - } - { - {893, 2}, - {762, 2, "edge" "collidable"}, - {994, 2}, - 3 - } - { - {849, 2, "edge" "collidable"}, - {845, 2}, - {854, 2, "edge" "collidable"}, - 3 - } - { - {925, 2}, - {835, 2, "edge" "collidable"}, - {1075, 2}, - 3 - } - { - {869, 2}, - {949, 2}, - {1023, 2}, - 3 - } - { - {984, 2}, - {948, 2, "edge" "collidable"}, - {822, 2}, - 3 - } - { - {892, 2, "edge" "collidable"}, - {1038, 2}, - {987, 2}, - 3 - } - { - {872, 2, "edge" "collidable"}, - {871, 2, "edge" "collidable"}, - {951, 2}, - 3 - } - { - {1015, 2, "edge" "collidable"}, - {824, 2, "edge" "collidable"}, - {853, 2}, - 3 - } - { - {1034, 2, "edge" "collidable"}, - {743, 2}, - {821, 2}, - 3 - } - { - {1072, 2, "edge" "collidable"}, - {938, 2, "edge" "collidable"}, - {1010, 2}, - 3 - } - { - {876, 2, "edge" "collidable"}, - {872, 2}, - {950, 2}, - 3 - } - { - {950, 2}, - {872, 2}, - {951, 2, "edge" "collidable"}, - 3 - } - { - {876, 2}, - {950, 2}, - {970, 2}, - 3 - } - { - {970, 2}, - {950, 2, "edge" "collidable"}, - {942, 2}, - 3 - } - { - {1013, 2, "edge" "collidable"}, - {1066, 2}, - {1070, 2, "edge" "collidable"}, - 3 - } - { - {967, 2}, - {876, 2}, - {970, 2, "edge" "collidable"}, - 3 - } - { - {839, 2, "edge" "collidable"}, - {889, 2}, - {935, 2}, - 3 - } - { - {982, 2, "edge" "collidable"}, - {1012, 2, "edge" "collidable"}, - {947, 2}, - 3 - } - { - {842, 2, "edge" "collidable"}, - {867, 2, "edge" "collidable"}, - {735, 2}, - 3 - } - { - {936, 2}, - {882, 2, "edge" "collidable"}, - {1011, 2}, - 3 - } - { - {936, 2, "edge" "collidable"}, - {961, 2}, - {882, 2}, - 3 - } - { - {887, 2, "edge" "collidable"}, - {885, 2, "edge" "collidable"}, - {940, 2}, - 3 - } - { - {995, 2}, - {895, 2}, - {758, 2, "edge" "collidable"}, - 3 - } - { - {974, 2, "edge" "collidable"}, - {970, 2}, - {942, 2}, - 3 - } - { - {876, 2}, - {967, 2, "edge" "collidable"}, - {963, 2}, - 3 - } - { - {1018, 2, "edge" "collidable"}, - {931, 2}, - {1077, 2}, - 3 - } - { - {900, 2}, - {1084, 2, "edge" "collidable"}, - {980, 2}, - 3 - } - { - {1036, 2, "edge" "collidable"}, - {770, 2}, - {847, 2}, - 3 - } - { - {889, 2, "edge" "collidable"}, - {800, 2}, - {860, 2}, - 3 - } - { - {908, 2, "edge" "collidable"}, - {902, 2}, - {960, 2}, - 3 - } - { - {961, 2, "edge" "collidable"}, - {762, 2}, - {882, 2}, - 3 - } - { - {1040, 2, "edge" "collidable"}, - {991, 2}, - {821, 2}, - 3 - } - { - {889, 2}, - {860, 2, "edge" "collidable"}, - {935, 2}, - 3 - } - { - {932, 2, "edge" "collidable"}, - {790, 2}, - {1022, 2}, - 3 - } - { - {964, 2}, - {957, 2}, - {847, 2}, - 3 - } - { - {993, 2}, - {856, 2}, - {800, 2, "edge" "collidable"}, - 3 - } - { - {971, 2, "edge" "collidable"}, - {975, 2}, - {859, 2}, - 3 - } - { - {749, 2}, - {779, 2, "edge" "collidable"}, - {775, 2}, - 3 - } - { - {1068, 2, "edge" "collidable"}, - {769, 2}, - {831, 2}, - 3 - } - { - {1022, 2, "edge" "collidable"}, - {1072, 2}, - {1043, 2}, - 3 - } - { - {876, 2}, - {963, 2, "edge" "collidable"}, - {959, 2}, - 3 - } - { - {881, 2, "edge" "collidable"}, - {876, 2}, - {959, 2}, - 3 - } - { - {955, 2, "edge" "collidable"}, - {974, 2}, - {942, 2}, - 3 - } - { - {955, 2}, - {942, 2, "edge" "collidable"}, - {937, 2}, - 3 - } - { - {972, 2, "edge" "collidable"}, - {925, 2}, - {780, 2}, - 3 - } - { - {772, 2, "edge" "collidable"}, - {831, 2}, - {875, 2}, - 3 - } - { - {748, 2}, - {977, 2, "edge" "collidable"}, - {839, 2}, - 3 - } - { - {747, 2}, - {980, 2, "edge" "collidable"}, - {981, 2}, - 3 - } - { - {747, 2}, - {981, 2, "edge" "collidable"}, - {856, 2}, - 3 - } - { - {1038, 2}, - {1032, 2, "edge" "collidable"}, - {987, 2}, - 3 - } - { - {781, 2}, - {1023, 2}, - {761, 2, "edge" "collidable"}, - 3 - } - { - {909, 2, "edge" "collidable"}, - {962, 2, "edge" "collidable"}, - {785, 2}, - 3 - } - { - {744, 2}, - {789, 2, "edge" "collidable"}, - {783, 2}, - 3 - } - { - {1066, 2, "edge" "collidable"}, - {1025, 2}, - {944, 2}, - 3 - } - { - {875, 2, "edge" "collidable"}, - {910, 2, "edge" "collidable"}, - {880, 2}, - 3 - } - { - {881, 2}, - {959, 2, "edge" "collidable"}, - {955, 2}, - 3 - } - { - {881, 2}, - {955, 2}, - {937, 2}, - 3 - } - { - {943, 2, "edge" "collidable"}, - {760, 2}, - {931, 2}, - 3 - } - { - {922, 2}, - {757, 2}, - {823, 2, "edge" "collidable"}, - 3 - } - { - {740, 2}, - {733, 2}, - {789, 2}, - 3 - } - { - {749, 2, "edge" "collidable"}, - {746, 2}, - {779, 2}, - 3 - } - { - {767, 2, "edge" "collidable"}, - {917, 2, "edge" "collidable"}, - {894, 2}, - 3 - } - { - {888, 2, "edge" "collidable"}, - {881, 2}, - {937, 2}, - 3 - } - { - {982, 2}, - {998, 2, "edge" "collidable"}, - {842, 2}, - 3 - } - { - {869, 2}, - {1023, 2}, - {781, 2}, - 3 - } - { - {746, 2, "edge" "collidable"}, - {744, 2}, - {783, 2}, - 3 - } - { - {887, 2}, - {791, 2}, - {991, 2}, - 3 - } - { - {827, 2, "edge" "collidable"}, - {1085, 2, "edge" "collidable"}, - {868, 2}, - 3 - } - { - {888, 2}, - {937, 2, "edge" "collidable"}, - {934, 2}, - 3 - } - { - {891, 2, "edge" "collidable"}, - {778, 2}, - {999, 2}, - 3 - } - { - {932, 2}, - {1022, 2}, - {897, 2}, - 3 - } - { - {909, 2}, - {785, 2}, - {835, 2}, - 3 - } - { - {931, 2}, - {760, 2}, - {1077, 2}, - 3 - } - { - {888, 2}, - {934, 2, "edge" "collidable"}, - {928, 2}, - 3 - } - { - {896, 2, "edge" "collidable"}, - {888, 2}, - {928, 2}, - 3 - } - { - {734, 2, "edge" "collidable"}, - {733, 2}, - {740, 2, "edge" "collidable"}, - 3 - } - { - {975, 2, "edge" "collidable"}, - {948, 2}, - {926, 2}, - 3 - } - { - {925, 2, "edge" "collidable"}, - {909, 2}, - {835, 2}, - 3 - } - { - {1036, 2}, - {847, 2, "edge" "collidable"}, - {750, 2}, - 3 - } - { - {1082, 2}, - {844, 2}, - {985, 2, "edge" "collidable"}, - 3 - } - { - {778, 2, "edge" "collidable"}, - {943, 2}, - {933, 2}, - 3 - } - { - {830, 2, "edge" "collidable"}, - {958, 2, "edge" "collidable"}, - {844, 2}, - 3 - } - { - {1084, 2}, - {798, 2, "edge" "collidable"}, - {900, 2}, - 3 - } - { - {789, 2}, - {733, 2, "edge" "collidable"}, - {796, 2, "edge" "collidable"}, - 3 - } - { - {1056, 2, "edge" "collidable"}, - {1068, 2}, - {828, 2}, - 3 - } - { - {896, 2}, - {928, 2, "edge" "collidable"}, - {923, 2}, - 3 - } - { - {925, 2}, - {1075, 2, "edge" "collidable"}, - {780, 2}, - 3 - } - { - {1033, 2}, - {949, 2, "edge" "collidable"}, - {826, 2}, - 3 - } - { - {903, 2, "edge" "collidable"}, - {896, 2}, - {923, 2}, - 3 - } - { - {760, 2, "edge" "collidable"}, - {946, 2}, - {1077, 2}, - 3 - } - { - {790, 2, "edge" "collidable"}, - {741, 2, "edge" "collidable"}, - {1022, 2}, - 3 - } - { - {778, 2}, - {986, 2}, - {999, 2}, - 3 - } - { - {1077, 2, "edge" "collidable"}, - {763, 2, "edge" "collidable"}, - {978, 2}, - 3 - } - { - {1006, 2, "edge" "collidable"}, - {861, 2}, - {935, 2, "edge" "collidable"}, - 3 - } - { - {903, 2}, - {923, 2}, - {992, 2}, - 3 - } - { - {932, 2}, - {897, 2, "edge" "collidable"}, - {901, 2, "edge" "collidable"}, - 3 - } - { - {1029, 2}, - {944, 2, "edge" "collidable"}, - {875, 2}, - 3 - } - { - {907, 2, "edge" "collidable"}, - {903, 2}, - {992, 2}, - 3 - } - { - {996, 2, "edge" "collidable"}, - {992, 2}, - {923, 2}, - 3 - } - { - {1018, 2}, - {1077, 2}, - {978, 2}, - 3 - } - { - {1033, 2, "edge" "collidable"}, - {837, 2, "edge" "collidable"}, - {949, 2}, - 3 - } - { - {996, 2}, - {923, 2, "edge" "collidable"}, - {920, 2}, - 3 - } - { - {907, 2}, - {992, 2, "edge" "collidable"}, - {988, 2}, - 3 - } - { - {800, 2}, - {856, 2, "edge" "collidable"}, - {860, 2}, - 3 - } - { - {957, 2, "edge" "collidable"}, - {765, 2, "edge" "collidable"}, - {847, 2}, - 3 - } - { - {912, 2}, - {782, 2, "edge" "collidable"}, - {968, 2}, - 3 - } - { - {1061, 2, "edge" "collidable"}, - {1056, 2}, - {739, 2}, - 3 - } - { - {743, 2, "edge" "collidable"}, - {892, 2}, - {821, 2}, - 3 - } - { - {761, 2}, - {1023, 2}, - {1037, 2}, - 3 - } - { - {976, 2, "edge" "collidable"}, - {996, 2}, - {920, 2}, - 3 - } - { - {831, 2}, - {769, 2}, - {875, 2}, - 3 - } - { - {948, 2}, - {984, 2}, - {926, 2}, - 3 - } - { - {892, 2}, - {987, 2, "edge" "collidable"}, - {1040, 2}, - 3 - } - { - {982, 2}, - {947, 2}, - {998, 2}, - 3 - } - { - {907, 2}, - {988, 2, "edge" "collidable"}, - {983, 2}, - 3 - } - { - {1068, 2}, - {831, 2, "edge" "collidable"}, - {828, 2}, - 3 - } - { - {1038, 2, "edge" "collidable"}, - {887, 2}, - {930, 2}, - 3 - } - { - {908, 2}, - {960, 2, "edge" "collidable"}, - {784, 2, "edge" "collidable"}, - 3 - } - { - {976, 2}, - {920, 2, "edge" "collidable"}, - {918, 2}, - 3 - } - { - {979, 2, "edge" "collidable"}, - {976, 2}, - {918, 2}, - 3 - } - { - {772, 2}, - {875, 2}, - {880, 2}, - 3 - } - { - {911, 2, "edge" "collidable"}, - {907, 2}, - {983, 2}, - 3 - } - { - {1063, 2, "edge" "collidable"}, - {851, 2}, - {788, 2}, - 3 - } - { - {994, 2, "edge" "collidable"}, - {936, 2}, - {1011, 2}, - 3 - } - { - {1050, 2, "edge" "collidable"}, - {893, 2}, - {994, 2}, - 3 - } - { - {899, 2}, - {864, 2, "edge" "collidable"}, - {771, 2, "edge" "collidable"}, - 3 - } - { - {1072, 2}, - {1010, 2, "edge" "collidable"}, - {841, 2}, - 3 - } - { - {911, 2}, - {983, 2, "edge" "collidable"}, - {979, 2}, - 3 - } - { - {769, 2, "edge" "collidable"}, - {1029, 2}, - {875, 2}, - 3 - } - { - {911, 2}, - {979, 2}, - {918, 2}, - 3 - } - { - {1083, 2, "edge" "collidable"}, - {921, 2}, - {751, 2}, - 3 - } - { - {911, 2}, - {918, 2, "edge" "collidable"}, - {914, 2, "edge" "collidable"}, - 3 - } - { - {762, 2}, - {756, 2}, - {882, 2}, - 3 - } - { - {986, 2, "edge" "collidable"}, - {1018, 2}, - {999, 2}, - 3 - } - { - {827, 2}, - {957, 2}, - {964, 2}, - 3 - } - { - {993, 2, "edge" "collidable"}, - {747, 2}, - {856, 2}, - 3 - } - { - {1001, 2, "edge" "collidable"}, - {1000, 2, "edge" "collidable"}, - {1030, 2}, - 3 - } - { - {1028, 2, "edge" "collidable"}, - {1030, 2}, - {1001, 2}, - 3 - } - { - {1058, 2}, - {922, 2, "edge" "collidable"}, - {939, 2, "edge" "collidable"}, - 3 - } - { - {943, 2}, - {931, 2, "edge" "collidable"}, - {933, 2}, - 3 - } - { - {878, 2}, - {780, 2, "edge" "collidable"}, - {864, 2}, - 3 - } - { - {1083, 2}, - {751, 2, "edge" "collidable"}, - {766, 2}, - 3 - } - { - {927, 2}, - {767, 2}, - {894, 2}, - 3 - } - { - {798, 2}, - {859, 2, "edge" "collidable"}, - {1084, 2}, - 3 - } - { - {1061, 2}, - {739, 2, "edge" "collidable"}, - {1008, 2}, - 3 - } - { - {848, 2}, - {989, 2, "edge" "collidable"}, - {738, 2, "edge" "collidable"}, - 3 - } - { - {758, 2}, - {895, 2, "edge" "collidable"}, - {751, 2}, - 3 - } - { - {1024, 2, "edge" "collidable"}, - {1017, 2, "edge" "collidable"}, - {1016, 2}, - 3 - } - { - {1028, 2, "edge" "collidable"}, - {1024, 2}, - {1007, 2}, - 3 - } - { - {1007, 2}, - {1024, 2}, - {1016, 2}, - 3 - } - { - {1049, 2, "edge" "collidable"}, - {1060, 2}, - {1057, 2, "edge" "collidable"}, - 3 - } - { - {878, 2, "edge" "collidable"}, - {972, 2}, - {780, 2}, - 3 - } - { - {827, 2}, - {868, 2, "edge" "collidable"}, - {957, 2}, - 3 - } - { - {1050, 2}, - {865, 2, "edge" "collidable"}, - {736, 2}, - 3 - } - { - {827, 2}, - {964, 2, "edge" "collidable"}, - {1004, 2, "edge" "collidable"}, - 3 - } - { - {1007, 2}, - {1016, 2, "edge" "collidable"}, - {1014, 2, "edge" "collidable"}, - 3 - } - { - {984, 2, "edge" "collidable"}, - {863, 2, "edge" "collidable"}, - {956, 2}, - 3 - } - { - {848, 2, "edge" "collidable"}, - {879, 2}, - {753, 2}, - 3 - } - { - {1028, 2}, - {1007, 2, "edge" "collidable"}, - {1003, 2}, - 3 - } - { - {893, 2, "edge" "collidable"}, - {756, 2}, - {762, 2}, - 3 - } - { - {1001, 2}, - {1028, 2}, - {1003, 2}, - 3 - } - { - {778, 2}, - {941, 2, "edge" "collidable"}, - {986, 2}, - 3 - } - { - {991, 2}, - {791, 2, "edge" "collidable"}, - {821, 2}, - 3 - } - { - {842, 2}, - {735, 2, "edge" "collidable"}, - {982, 2}, - 3 - } - { - {1001, 2}, - {1003, 2, "edge" "collidable"}, - {1002, 2, "edge" "collidable"}, - 3 - } - { - {1058, 2, "edge" "collidable"}, - {966, 2}, - {757, 2}, - 3 - } - { - {776, 2, "edge" "collidable"}, - {823, 2}, - {745, 2, "edge" "collidable"}, - 3 - } - { - {793, 2, "edge" "collidable"}, - {1050, 2}, - {857, 2, "edge" "collidable"}, - 3 - } - { - {1035, 2, "edge" "collidable"}, - {1031, 2, "edge" "collidable"}, - {1051, 2}, - 3 - } - { - {757, 2, "edge" "collidable"}, - {846, 2}, - {823, 2}, - 3 - } - { - {969, 2, "edge" "collidable"}, - {890, 2, "edge" "collidable"}, - {745, 2}, - 3 - } - { - {968, 2, "edge" "collidable"}, - {971, 2}, - {859, 2}, - 3 - } - { - {1026, 2, "edge" "collidable"}, - {954, 2, "edge" "collidable"}, - {877, 2}, - 3 - } - { - {965, 2}, - {895, 2}, - {995, 2}, - 3 - } - { - {975, 2}, - {926, 2, "edge" "collidable"}, - {859, 2}, - 3 - } - { - {851, 2, "edge" "collidable"}, - {1020, 2, "edge" "collidable"}, - {788, 2}, - 3 - } - { - {927, 2}, - {894, 2, "edge" "collidable"}, - {886, 2, "edge" "collidable"}, - 3 - } - { - {747, 2, "edge" "collidable"}, - {900, 2}, - {980, 2}, - 3 - } - { - {921, 2, "edge" "collidable"}, - {758, 2}, - {751, 2}, - 3 - } - { - {794, 2}, - {1083, 2}, - {766, 2}, - 3 - } - { - {1059, 2, "edge" "collidable"}, - {1055, 2}, - {1051, 2}, - 3 - } - { - {848, 2}, - {753, 2}, - {989, 2}, - 3 - } - { - {1059, 2}, - {1051, 2, "edge" "collidable"}, - {1047, 2}, - 3 - } - { - {770, 2, "edge" "collidable"}, - {964, 2}, - {847, 2}, - 3 - } - { - {892, 2}, - {1040, 2}, - {821, 2}, - 3 - } - { - {1035, 2}, - {1073, 2, "edge" "collidable"}, - {1071, 2}, - 3 - } - { - {744, 2, "edge" "collidable"}, - {740, 2}, - {789, 2}, - 3 - } - { - {778, 2}, - {933, 2, "edge" "collidable"}, - {941, 2}, - 3 - } - { - {1039, 2, "edge" "collidable"}, - {1035, 2}, - {1071, 2}, - 3 - } - { - {891, 2}, - {999, 2, "edge" "collidable"}, - {883, 2, "edge" "collidable"}, - 3 - } - { - {1062, 2, "edge" "collidable"}, - {1059, 2}, - {1047, 2}, - 3 - } - { - {1039, 2}, - {1071, 2, "edge" "collidable"}, - {1067, 2}, - 3 - } - { - {764, 2}, - {773, 2, "edge" "collidable"}, - {768, 2, "edge" "collidable"}, - 3 - } - { - {877, 2, "edge" "collidable"}, - {929, 2}, - {737, 2}, - 3 - } - { - {1008, 2, "edge" "collidable"}, - {772, 2}, - {1027, 2}, - 3 - } - { - {749, 2}, - {775, 2, "edge" "collidable"}, - {773, 2}, - 3 - } - { - {924, 2}, - {742, 2, "edge" "collidable"}, - {905, 2}, - 3 - } - { - {794, 2, "edge" "collidable"}, - {965, 2}, - {1083, 2}, - 3 - } - { - {1041, 2, "edge" "collidable"}, - {1039, 2}, - {1067, 2}, - 3 - } - { - {826, 2, "edge" "collidable"}, - {998, 2}, - {1033, 2}, - 3 - } - { - {1061, 2}, - {1008, 2}, - {1076, 2}, - 3 - } - { - {913, 2}, - {844, 2, "edge" "collidable"}, - {791, 2}, - 3 - } - { - {1041, 2}, - {1067, 2, "edge" "collidable"}, - {1062, 2}, - 3 - } - { - {772, 2}, - {880, 2, "edge" "collidable"}, - {1027, 2}, - 3 - } - { - {1047, 2}, - {1062, 2}, - {1041, 2}, - 3 - } - { - {899, 2, "edge" "collidable"}, - {924, 2}, - {905, 2}, - 3 - } - { - {1041, 2}, - {1047, 2, "edge" "collidable"}, - {1044, 2, "edge" "collidable"}, - 3 - } - { - {869, 2}, - {781, 2, "edge" "collidable"}, - {997, 2, "edge" "collidable"}, - 3 - } - { - {879, 2, "edge" "collidable"}, - {850, 2, "edge" "collidable"}, - {753, 2}, - 3 - } - { - {1080, 2, "edge" "collidable"}, - {1079, 2, "edge" "collidable"}, - {1078, 2}, - 3 - } - { - {1080, 2}, - {1078, 2, "edge" "collidable"}, - {1064, 2}, - 3 - } - { - {1015, 2}, - {853, 2}, - {946, 2}, - 3 - } - { - {1025, 2, "edge" "collidable"}, - {799, 2, "edge" "collidable"}, - {944, 2}, - 3 - } - { - {1056, 2}, - {828, 2, "edge" "collidable"}, - {739, 2}, - 3 - } - { - {1080, 2}, - {1064, 2}, - {904, 2}, - 3 - } - { - {913, 2, "edge" "collidable"}, - {985, 2}, - {844, 2}, - 3 - } - { - {865, 2}, - {994, 2}, - {1011, 2, "edge" "collidable"}, - 3 - } - { - {904, 2}, - {1064, 2, "edge" "collidable"}, - {1053, 2}, - 3 - } - { - {761, 2}, - {1037, 2, "edge" "collidable"}, - {960, 2}, - 3 - } - { - {861, 2, "edge" "collidable"}, - {748, 2}, - {839, 2}, - 3 - } - { - {924, 2, "edge" "collidable"}, - {1042, 2, "edge" "collidable"}, - {742, 2}, - 3 - } - { - {949, 2}, - {797, 2, "edge" "collidable"}, - {906, 2}, - 3 - } - { - {904, 2}, - {1053, 2}, - {1005, 2, "edge" "collidable"}, - 3 - } - { - {927, 2, "edge" "collidable"}, - {794, 2}, - {766, 2}, - 3 - } - { - {746, 2}, - {783, 2, "edge" "collidable"}, - {779, 2}, - 3 - } - { - {1080, 2}, - {904, 2, "edge" "collidable"}, - {915, 2}, - 3 - } - { - {1060, 2}, - {946, 2, "edge" "collidable"}, - {1057, 2}, - 3 - } - { - {1005, 2}, - {1053, 2, "edge" "collidable"}, - {1065, 2}, - 3 - } - { - {953, 2, "edge" "collidable"}, - {1005, 2}, - {1065, 2}, - 3 - } - { - {1061, 2}, - {1076, 2, "edge" "collidable"}, - {1019, 2, "edge" "collidable"}, - 3 - } - { - {1060, 2, "edge" "collidable"}, - {1015, 2}, - {946, 2}, - 3 - } - { - {1045, 2, "edge" "collidable"}, - {990, 2, "edge" "collidable"}, - {898, 2}, - 3 - } - { - {999, 2}, - {1018, 2}, - {795, 2, "edge" "collidable"}, - 3 - } - { - {884, 2, "edge" "collidable"}, - {1036, 2}, - {750, 2}, - 3 - } - { - {1069, 2}, - {1021, 2, "edge" "collidable"}, - {777, 2, "edge" "collidable"}, - 3 - } - { - {1045, 2}, - {898, 2, "edge" "collidable"}, - {916, 2}, - 3 - } - { - {1009, 2, "edge" "collidable"}, - {953, 2}, - {1065, 2}, - 3 - } - { - {737, 2, "edge" "collidable"}, - {1026, 2}, - {877, 2}, - 3 - } - { - {861, 2}, - {839, 2}, - {935, 2}, - 3 - } - { - {764, 2}, - {755, 2}, - {773, 2}, - 3 - } - { - {1009, 2}, - {1065, 2, "edge" "collidable"}, - {1048, 2}, - 3 - } - { - {1066, 2}, - {1029, 2, "edge" "collidable"}, - {1070, 2}, - 3 - } - { - {916, 2, "edge" "collidable"}, - {852, 2, "edge" "collidable"}, - {774, 2}, - 3 - } - { - {929, 2, "edge" "collidable"}, - {855, 2, "edge" "collidable"}, - {737, 2}, - 3 - } - { - {927, 2}, - {752, 2, "edge" "collidable"}, - {767, 2}, - 3 - } - { - {1081, 2, "edge" "collidable"}, - {1080, 2}, - {915, 2}, - 3 - } - { - {1081, 2}, - {915, 2, "edge" "collidable"}, - {945, 2}, - 3 - } - { - {764, 2, "edge" "collidable"}, - {759, 2, "edge" "collidable"}, - {755, 2}, - 3 - } - { - {1054, 2}, - {1063, 2}, - {788, 2, "edge" "collidable"}, - 3 - } - { - {1050, 2}, - {736, 2}, - {857, 2}, - 3 - } - { - {756, 2, "edge" "collidable"}, - {1074, 2, "edge" "collidable"}, - {882, 2}, - 3 - } - { - {887, 2}, - {940, 2}, - {791, 2}, - 3 - } - { - {945, 2, "edge" "collidable"}, - {1009, 2}, - {1048, 2}, - 3 - } - { - {753, 2, "edge" "collidable"}, - {1063, 2}, - {1054, 2}, - 3 - } - { - {916, 2}, - {774, 2, "edge" "collidable"}, - {754, 2}, - 3 - } - { - {884, 2}, - {750, 2, "edge" "collidable"}, - {787, 2, "edge" "collidable"}, - 3 - } - { - {1081, 2}, - {945, 2}, - {1048, 2}, - 3 - } - { - {753, 2}, - {1054, 2, "edge" "collidable"}, - {989, 2}, - 3 - } - { - {912, 2, "edge" "collidable"}, - {984, 2}, - {822, 2}, - 3 - } - { - {940, 2, "edge" "collidable"}, - {913, 2}, - {791, 2}, - 3 - } - { - {1076, 2}, - {1008, 2}, - {1027, 2, "edge" "collidable"}, - 3 - } - { - {899, 2}, - {905, 2}, - {864, 2}, - 3 - } - { - {873, 2, "edge" "collidable"}, - {1081, 2}, - {1048, 2, "edge" "collidable"}, - 3 - } - { - {965, 2, "edge" "collidable"}, - {786, 2, "edge" "collidable"}, - {895, 2}, - 3 - } - { - {1045, 2}, - {916, 2}, - {754, 2}, - 3 - } - { - {792, 2, "edge" "collidable"}, - {1045, 2}, - {754, 2, "edge" "collidable"}, - 3 - } - { - {1055, 2, "edge" "collidable"}, - {1073, 2}, - {1035, 2}, - 3 - } - { - {1035, 2}, - {1051, 2}, - {1055, 2}, - 3 - } - { - {865, 2}, - {1050, 2}, - {994, 2}, - 3 - } - { - {912, 2}, - {968, 2}, - {798, 2, "edge" "collidable"}, - 3 - } - { - {968, 2}, - {859, 2}, - {798, 2}, - 3 - } - # Mesh "Mesh.001" - { - {1190, 2}, - {1095, 2, "edge" "collidable"}, - {1196, 2}, - 0 - } - { - {1097, 2, "edge" "collidable"}, - {1190, 2}, - {1196, 2}, - 0 - } - { - {1167, 2, "edge" "collidable"}, - {1134, 2}, - {1186, 2}, - 0 - } - { - {1134, 2}, - {1194, 2, "edge" "collidable"}, - {1186, 2}, - 0 - } - { - {1146, 2, "edge" "collidable"}, - {1126, 2}, - {1139, 2}, - 0 - } - { - {1092, 2, "edge" "collidable"}, - {1144, 2}, - {1192, 2}, - 0 - } - { - {1114, 2, "edge" "collidable"}, - {1206, 2}, - {1124, 2}, - 0 - } - { - {1206, 2}, - {1147, 2, "edge" "collidable"}, - {1124, 2}, - 0 - } - { - {1116, 2, "edge" "collidable"}, - {1101, 2}, - {1129, 2}, - 0 - } - { - {1184, 2, "edge" "collidable"}, - {1182, 2}, - {1107, 2}, - 0 - } - { - {1144, 2}, - {1121, 2, "edge" "collidable"}, - {1192, 2}, - 0 - } - { - {1187, 2}, - {1178, 2, "edge" "collidable"}, - {1104, 2}, - 0 - } - { - {1093, 2, "edge" "collidable"}, - {1187, 2}, - {1104, 2}, - 0 - } - { - {1203, 2}, - {1156, 2, "edge" "collidable"}, - {1099, 2}, - 0 - } - { - {1109, 2, "edge" "collidable"}, - {1203, 2}, - {1099, 2}, - 0 - } - { - {1128, 2}, - {1137, 2, "edge" "collidable"}, - {1201, 2}, - 0 - } - { - {1132, 2, "edge" "collidable"}, - {1128, 2}, - {1201, 2}, - 0 - } - { - {1182, 2, "edge" "collidable"}, - {1122, 2}, - {1091, 2}, - 0 - } - { - {1166, 2, "edge" "collidable"}, - {1167, 2}, - {1088, 2}, - 0 - } - { - {1168, 2, "edge" "collidable"}, - {1152, 2}, - {1180, 2}, - 0 - } - { - {1152, 2}, - {1179, 2, "edge" "collidable"}, - {1180, 2}, - 0 - } - { - {1163, 2}, - {1200, 2, "edge" "collidable"}, - {1135, 2}, - 0 - } - { - {1185, 2, "edge" "collidable"}, - {1163, 2}, - {1135, 2}, - 0 - } - { - {1176, 2}, - {1150, 2, "edge" "collidable"}, - {1178, 2}, - 0 - } - { - {1112, 2}, - {1191, 2, "edge" "collidable"}, - {1154, 2}, - 0 - } - { - {1090, 2, "edge" "collidable"}, - {1097, 2}, - {1197, 2}, - 0 - } - { - {1097, 2}, - {1196, 2, "edge" "collidable"}, - {1197, 2}, - 0 - } - { - {1138, 2}, - {1123, 2, "edge" "collidable"}, - {1160, 2}, - 0 - } - { - {1106, 2, "edge" "collidable"}, - {1138, 2}, - {1160, 2}, - 0 - } - { - {1130, 2, "edge" "collidable"}, - {1185, 2}, - {1096, 2}, - 0 - } - { - {1185, 2}, - {1135, 2, "edge" "collidable"}, - {1096, 2}, - 0 - } - { - {1101, 2, "edge" "collidable"}, - {1103, 2}, - {1162, 2}, - 0 - } - { - {1103, 2}, - {1108, 2, "edge" "collidable"}, - {1162, 2}, - 0 - } - { - {1205, 2, "edge" "collidable"}, - {1086, 2}, - {1141, 2}, - 0 - } - { - {1119, 2}, - {1086, 2, "edge" "collidable"}, - {1140, 2}, - 0 - } - { - {1165, 2, "edge" "collidable"}, - {1151, 2}, - {1198, 2}, - 0 - } - { - {1126, 2}, - {1105, 2, "edge" "collidable"}, - {1139, 2}, - 0 - } - { - {1176, 2, "edge" "collidable"}, - {1102, 2}, - {1150, 2}, - 0 - } - { - {1102, 2}, - {1131, 2, "edge" "collidable"}, - {1150, 2}, - 0 - } - { - {1169, 2}, - {1136, 2, "edge" "collidable"}, - {1156, 2}, - 0 - } - { - {1149, 2, "edge" "collidable"}, - {1118, 2}, - {1172, 2}, - 0 - } - { - {1134, 2, "edge" "collidable"}, - {1183, 2}, - {1194, 2}, - 0 - } - { - {1183, 2}, - {1115, 2, "edge" "collidable"}, - {1194, 2}, - 0 - } - { - {1102, 2, "edge" "collidable"}, - {1106, 2}, - {1131, 2}, - 0 - } - { - {1106, 2}, - {1160, 2, "edge" "collidable"}, - {1131, 2}, - 0 - } - { - {1114, 2}, - {1124, 2, "edge" "collidable"}, - {1100, 2}, - 0 - } - { - {1174, 2}, - {1100, 2, "edge" "collidable"}, - {1125, 2}, - 0 - } - { - {1092, 2}, - {1192, 2, "edge" "collidable"}, - {1200, 2}, - 0 - } - { - {1140, 2}, - {1177, 2, "edge" "collidable"}, - {1119, 2}, - 0 - } - { - {1089, 2, "edge" "collidable"}, - {1110, 2}, - {1098, 2, "edge" "collidable"}, - 0 - } - { - {1110, 2}, - {1171, 2, "edge" "collidable"}, - {1098, 2}, - 0 - } - { - {1140, 2, "edge" "collidable"}, - {1207, 2}, - {1177, 2}, - 0 - } - { - {1187, 2, "edge" "collidable"}, - {1176, 2}, - {1178, 2}, - 0 - } - { - {1155, 2, "edge" "collidable"}, - {1087, 2}, - {1133, 2}, - 0 - } - { - {1152, 2, "edge" "collidable"}, - {1189, 2}, - {1179, 2}, - 0 - } - { - {1189, 2}, - {1195, 2, "edge" "collidable"}, - {1179, 2}, - 0 - } - { - {1101, 2}, - {1162, 2, "edge" "collidable"}, - {1129, 2}, - 0 - } - { - {1203, 2, "edge" "collidable"}, - {1169, 2}, - {1156, 2}, - 0 - } - { - {1161, 2, "edge" "collidable"}, - {1117, 2}, - {1164, 2}, - 0 - } - { - {1117, 2}, - {1111, 2, "edge" "collidable"}, - {1164, 2}, - 0 - } - { - {1151, 2, "edge" "collidable"}, - {1155, 2}, - {1193, 2}, - 0 - } - { - {1155, 2}, - {1133, 2, "edge" "collidable"}, - {1193, 2}, - 0 - } - { - {1138, 2, "edge" "collidable"}, - {1116, 2}, - {1123, 2}, - 0 - } - { - {1116, 2}, - {1129, 2, "edge" "collidable"}, - {1123, 2}, - 0 - } - { - {1199, 2, "edge" "collidable"}, - {1181, 2}, - {1173, 2}, - 0 - } - { - {1181, 2}, - {1154, 2, "edge" "collidable"}, - {1173, 2}, - 0 - } - { - {1128, 2, "edge" "collidable"}, - {1142, 2}, - {1137, 2}, - 0 - } - { - {1142, 2}, - {1157, 2, "edge" "collidable"}, - {1137, 2}, - 0 - } - { - {1205, 2}, - {1141, 2, "edge" "collidable"}, - {1145, 2}, - 0 - } - { - {1087, 2}, - {1175, 2, "edge" "collidable"}, - {1133, 2}, - 0 - } - { - {1174, 2, "edge" "collidable"}, - {1114, 2}, - {1100, 2}, - 0 - } - { - {1151, 2}, - {1193, 2, "edge" "collidable"}, - {1198, 2}, - 0 - } - { - {1132, 2}, - {1201, 2, "edge" "collidable"}, - {1105, 2}, - 0 - } - { - {1126, 2, "edge" "collidable"}, - {1132, 2}, - {1105, 2}, - 0 - } - { - {1130, 2}, - {1096, 2, "edge" "collidable"}, - {1115, 2}, - 0 - } - { - {1183, 2, "edge" "collidable"}, - {1130, 2}, - {1115, 2}, - 0 - } - { - {1141, 2}, - {1086, 2}, - {1119, 2, "edge" "collidable"}, - 0 - } - { - {1163, 2, "edge" "collidable"}, - {1092, 2}, - {1200, 2}, - 0 - } - { - {1167, 2}, - {1186, 2, "edge" "collidable"}, - {1088, 2}, - 0 - } - { - {1090, 2}, - {1197, 2, "edge" "collidable"}, - {1147, 2}, - 0 - } - { - {1148, 2}, - {1113, 2, "edge" "collidable"}, - {1195, 2}, - 0 - } - { - {1189, 2, "edge" "collidable"}, - {1148, 2}, - {1195, 2}, - 0 - } - { - {1120, 2, "edge" "collidable"}, - {1205, 2}, - {1145, 2}, - 0 - } - { - {1209, 2, "edge" "collidable"}, - {1210, 2, "edge" "collidable"}, - {1208, 2}, - 0 - } - { - {1209, 2}, - {1208, 2, "edge" "collidable"}, - {1136, 2}, - 0 - } - { - {1136, 2}, - {1169, 2, "edge" "collidable"}, - {1209, 2}, - 0 - } - { - {1117, 2, "edge" "collidable"}, - {1146, 2}, - {1111, 2}, - 0 - } - { - {1146, 2}, - {1139, 2, "edge" "collidable"}, - {1111, 2}, - 0 - } - { - {1184, 2}, - {1107, 2, "edge" "collidable"}, - {1175, 2}, - 0 - } - { - {1159, 2}, - {1204, 2, "edge" "collidable"}, - {1095, 2}, - 0 - } - { - {1112, 2, "edge" "collidable"}, - {1143, 2}, - {1191, 2}, - 0 - } - { - {1190, 2, "edge" "collidable"}, - {1159, 2}, - {1095, 2}, - 0 - } - { - {1143, 2}, - {1170, 2, "edge" "collidable"}, - {1191, 2}, - 0 - } - { - {1087, 2, "edge" "collidable"}, - {1184, 2}, - {1175, 2}, - 0 - } - { - {1093, 2}, - {1104, 2, "edge" "collidable"}, - {1094, 2}, - 0 - } - { - {1127, 2, "edge" "collidable"}, - {1093, 2}, - {1094, 2}, - 0 - } - { - {1202, 2}, - {1188, 2, "edge" "collidable"}, - {1108, 2}, - 0 - } - { - {1103, 2, "edge" "collidable"}, - {1202, 2}, - {1108, 2}, - 0 - } - { - {1122, 2, "edge" "collidable"}, - {1174, 2}, - {1125, 2}, - 0 - } - { - {1127, 2}, - {1094, 2, "edge" "collidable"}, - {1204, 2}, - 0 - } - { - {1159, 2, "edge" "collidable"}, - {1127, 2}, - {1204, 2}, - 0 - } - { - {1110, 2, "edge" "collidable"}, - {1166, 2}, - {1171, 2}, - 0 - } - { - {1166, 2}, - {1088, 2, "edge" "collidable"}, - {1171, 2}, - 0 - } - { - {1149, 2}, - {1172, 2, "edge" "collidable"}, - {1121, 2}, - 0 - } - { - {1144, 2, "edge" "collidable"}, - {1149, 2}, - {1121, 2}, - 0 - } - { - {1181, 2, "edge" "collidable"}, - {1112, 2}, - {1154, 2}, - 0 - } - { - {1207, 2}, - {1158, 2, "edge" "collidable"}, - {1177, 2}, - 0 - } - { - {1142, 2, "edge" "collidable"}, - {1109, 2}, - {1157, 2}, - 0 - } - { - {1109, 2}, - {1099, 2, "edge" "collidable"}, - {1157, 2}, - 0 - } - { - {1182, 2}, - {1091, 2, "edge" "collidable"}, - {1107, 2}, - 0 - } - { - {1148, 2, "edge" "collidable"}, - {1165, 2}, - {1113, 2}, - 0 - } - { - {1165, 2}, - {1198, 2, "edge" "collidable"}, - {1113, 2}, - 0 - } - { - {1143, 2, "edge" "collidable"}, - {1120, 2}, - {1170, 2}, - 0 - } - { - {1168, 2}, - {1180, 2, "edge" "collidable"}, - {1158, 2}, - 0 - } - { - {1207, 2, "edge" "collidable"}, - {1168, 2}, - {1158, 2}, - 0 - } - { - {1120, 2}, - {1145, 2, "edge" "collidable"}, - {1170, 2}, - 0 - } - { - {1206, 2, "edge" "collidable"}, - {1090, 2}, - {1147, 2}, - 0 - } - { - {1122, 2}, - {1125, 2, "edge" "collidable"}, - {1091, 2}, - 0 - } - { - {1118, 2}, - {1153, 2, "edge" "collidable"}, - {1172, 2}, - 0 - } - { - {1118, 2, "edge" "collidable"}, - {1199, 2}, - {1153, 2}, - 0 - } - { - {1199, 2}, - {1173, 2, "edge" "collidable"}, - {1153, 2}, - 0 - } - { - {1202, 2, "edge" "collidable"}, - {1161, 2}, - {1188, 2}, - 0 - } - { - {1161, 2}, - {1164, 2, "edge" "collidable"}, - {1188, 2}, - 0 - } - # Mesh "Mesh.002" - { - {1328, 2, "edge" "collidable"}, - {1215, 2}, - {1212, 2}, - 1 - } - { - {1215, 2, "edge" "collidable"}, - {1211, 2, "edge" "collidable"}, - {1212, 2}, - 1 - } - { - {1221, 2, "edge" "collidable"}, - {1328, 2}, - {1213, 2}, - 1 - } - { - {1328, 2}, - {1212, 2, "edge" "collidable"}, - {1213, 2}, - 1 - } - { - {1378, 2, "edge" "collidable"}, - {1221, 2}, - {1214, 2}, - 1 - } - { - {1221, 2}, - {1213, 2, "edge" "collidable"}, - {1214, 2}, - 1 - } - { - {1263, 2, "edge" "collidable"}, - {1378, 2}, - {1216, 2}, - 1 - } - { - {1378, 2}, - {1214, 2, "edge" "collidable"}, - {1216, 2}, - 1 - } - { - {1266, 2, "edge" "collidable"}, - {1263, 2}, - {1217, 2}, - 1 - } - { - {1263, 2}, - {1216, 2, "edge" "collidable"}, - {1217, 2}, - 1 - } - { - {1322, 2, "edge" "collidable"}, - {1266, 2}, - {1218, 2}, - 1 - } - { - {1266, 2}, - {1217, 2, "edge" "collidable"}, - {1218, 2}, - 1 - } - { - {1356, 2, "edge" "collidable"}, - {1322, 2}, - {1220, 2}, - 1 - } - { - {1322, 2}, - {1218, 2, "edge" "collidable"}, - {1220, 2}, - 1 - } - { - {1382, 2}, - {1326, 2, "edge" "collidable"}, - {1327, 2}, - 1 - } - { - {1330, 2, "edge" "collidable"}, - {1382, 2}, - {1327, 2}, - 1 - } - { - {1367, 2, "edge" "collidable"}, - {1356, 2}, - {1222, 2}, - 1 - } - { - {1356, 2}, - {1220, 2, "edge" "collidable"}, - {1222, 2}, - 1 - } - { - {1381, 2, "edge" "collidable"}, - {1290, 2}, - {1341, 2}, - 1 - } - { - {1290, 2}, - {1340, 2, "edge" "collidable"}, - {1341, 2}, - 1 - } - { - {1393, 2}, - {1365, 2, "edge" "collidable"}, - {1368, 2}, - 1 - } - { - {1253, 2, "edge" "collidable"}, - {1367, 2}, - {1224, 2}, - 1 - } - { - {1367, 2}, - {1222, 2, "edge" "collidable"}, - {1224, 2}, - 1 - } - { - {1243, 2, "edge" "collidable"}, - {1253, 2}, - {1225, 2}, - 1 - } - { - {1253, 2}, - {1224, 2, "edge" "collidable"}, - {1225, 2}, - 1 - } - { - {1247, 2}, - {1316, 2, "edge" "collidable"}, - {1317, 2}, - 1 - } - { - {1389, 2, "edge" "collidable"}, - {1243, 2}, - {1226, 2}, - 1 - } - { - {1243, 2}, - {1225, 2, "edge" "collidable"}, - {1226, 2}, - 1 - } - { - {1383, 2, "edge" "collidable"}, - {1389, 2}, - {1227, 2}, - 1 - } - { - {1389, 2}, - {1226, 2, "edge" "collidable"}, - {1227, 2}, - 1 - } - { - {1271, 2, "edge" "collidable"}, - {1383, 2}, - {1228, 2}, - 1 - } - { - {1383, 2}, - {1227, 2, "edge" "collidable"}, - {1228, 2}, - 1 - } - { - {1386, 2}, - {1370, 2, "edge" "collidable"}, - {1372, 2}, - 1 - } - { - {1395, 2, "edge" "collidable"}, - {1386, 2}, - {1372, 2, "edge" "collidable"}, - 1 - } - { - {1294, 2, "edge" "collidable"}, - {1271, 2}, - {1229, 2}, - 1 - } - { - {1271, 2}, - {1228, 2, "edge" "collidable"}, - {1229, 2}, - 1 - } - { - {1394, 2, "edge" "collidable"}, - {1377, 2}, - {1331, 2}, - 1 - } - { - {1377, 2}, - {1329, 2, "edge" "collidable"}, - {1331, 2}, - 1 - } - { - {1237, 2, "edge" "collidable"}, - {1294, 2}, - {1230, 2}, - 1 - } - { - {1294, 2}, - {1229, 2, "edge" "collidable"}, - {1230, 2}, - 1 - } - { - {1268, 2, "edge" "collidable"}, - {1237, 2}, - {1232, 2}, - 1 - } - { - {1237, 2}, - {1230, 2, "edge" "collidable"}, - {1232, 2}, - 1 - } - { - {1376, 2}, - {1368, 2, "edge" "collidable"}, - {1370, 2}, - 1 - } - { - {1386, 2, "edge" "collidable"}, - {1376, 2}, - {1370, 2}, - 1 - } - { - {1290, 2, "edge" "collidable"}, - {1359, 2}, - {1340, 2}, - 1 - } - { - {1359, 2}, - {1338, 2, "edge" "collidable"}, - {1340, 2}, - 1 - } - { - {1392, 2, "edge" "collidable"}, - {1268, 2}, - {1233, 2}, - 1 - } - { - {1268, 2}, - {1232, 2, "edge" "collidable"}, - {1233, 2}, - 1 - } - { - {1284, 2, "edge" "collidable"}, - {1394, 2}, - {1333, 2}, - 1 - } - { - {1394, 2}, - {1331, 2, "edge" "collidable"}, - {1333, 2}, - 1 - } - { - {1369, 2, "edge" "collidable"}, - {1392, 2}, - {1234, 2}, - 1 - } - { - {1392, 2}, - {1233, 2, "edge" "collidable"}, - {1234, 2}, - 1 - } - { - {1361, 2}, - {1317, 2, "edge" "collidable"}, - {1319, 2}, - 1 - } - { - {1379, 2, "edge" "collidable"}, - {1361, 2}, - {1319, 2}, - 1 - } - { - {1299, 2}, - {1323, 2, "edge" "collidable"}, - {1324, 2}, - 1 - } - { - {1276, 2, "edge" "collidable"}, - {1299, 2}, - {1324, 2}, - 1 - } - { - {1373, 2, "edge" "collidable"}, - {1369, 2}, - {1236, 2}, - 1 - } - { - {1369, 2}, - {1234, 2, "edge" "collidable"}, - {1236, 2}, - 1 - } - { - {1235, 2, "edge" "collidable"}, - {1373, 2}, - {1238, 2}, - 1 - } - { - {1373, 2}, - {1236, 2, "edge" "collidable"}, - {1238, 2}, - 1 - } - { - {1275, 2}, - {1349, 2, "edge" "collidable"}, - {1351, 2}, - 1 - } - { - {1313, 2, "edge" "collidable"}, - {1275, 2}, - {1351, 2}, - 1 - } - { - {1371, 2, "edge" "collidable"}, - {1235, 2}, - {1241, 2}, - 1 - } - { - {1235, 2}, - {1238, 2, "edge" "collidable"}, - {1241, 2}, - 1 - } - { - {1278, 2, "edge" "collidable"}, - {1371, 2}, - {1244, 2}, - 1 - } - { - {1371, 2}, - {1241, 2, "edge" "collidable"}, - {1244, 2}, - 1 - } - { - {1310, 2, "edge" "collidable"}, - {1278, 2}, - {1245, 2}, - 1 - } - { - {1278, 2}, - {1244, 2, "edge" "collidable"}, - {1245, 2}, - 1 - } - { - {1377, 2, "edge" "collidable"}, - {1330, 2}, - {1329, 2}, - 1 - } - { - {1330, 2}, - {1327, 2, "edge" "collidable"}, - {1329, 2}, - 1 - } - { - {1336, 2, "edge" "collidable"}, - {1384, 2}, - {1355, 2}, - 1 - } - { - {1384, 2}, - {1354, 2, "edge" "collidable"}, - {1355, 2}, - 1 - } - { - {1239, 2, "edge" "collidable"}, - {1310, 2}, - {1246, 2}, - 1 - } - { - {1310, 2}, - {1245, 2, "edge" "collidable"}, - {1246, 2}, - 1 - } - { - {1387, 2, "edge" "collidable"}, - {1332, 2}, - {1321, 2}, - 1 - } - { - {1364, 2, "edge" "collidable"}, - {1239, 2}, - {1248, 2}, - 1 - } - { - {1239, 2}, - {1246, 2, "edge" "collidable"}, - {1248, 2}, - 1 - } - { - {1346, 2, "edge" "collidable"}, - {1364, 2}, - {1251, 2}, - 1 - } - { - {1364, 2}, - {1248, 2, "edge" "collidable"}, - {1251, 2}, - 1 - } - { - {1346, 2}, - {1251, 2, "edge" "collidable"}, - {1254, 2}, - 1 - } - { - {1242, 2, "edge" "collidable"}, - {1346, 2}, - {1254, 2}, - 1 - } - { - {1242, 2}, - {1254, 2, "edge" "collidable"}, - {1256, 2}, - 1 - } - { - {1360, 2, "edge" "collidable"}, - {1242, 2}, - {1257, 2}, - 1 - } - { - {1242, 2}, - {1256, 2, "edge" "collidable"}, - {1257, 2}, - 1 - } - { - {1219, 2}, - {1347, 2, "edge" "collidable"}, - {1349, 2}, - 1 - } - { - {1366, 2, "edge" "collidable"}, - {1284, 2}, - {1335, 2}, - 1 - } - { - {1363, 2, "edge" "collidable"}, - {1360, 2}, - {1258, 2}, - 1 - } - { - {1360, 2}, - {1257, 2, "edge" "collidable"}, - {1258, 2}, - 1 - } - { - {1293, 2, "edge" "collidable"}, - {1363, 2}, - {1260, 2}, - 1 - } - { - {1363, 2}, - {1258, 2, "edge" "collidable"}, - {1260, 2}, - 1 - } - { - {1299, 2, "edge" "collidable"}, - {1387, 2}, - {1323, 2}, - 1 - } - { - {1387, 2}, - {1321, 2, "edge" "collidable"}, - {1323, 2}, - 1 - } - { - {1276, 2}, - {1324, 2, "edge" "collidable"}, - {1325, 2}, - 1 - } - { - {1259, 2, "edge" "collidable"}, - {1276, 2}, - {1325, 2}, - 1 - } - { - {1375, 2, "edge" "collidable"}, - {1293, 2}, - {1262, 2}, - 1 - } - { - {1293, 2}, - {1260, 2, "edge" "collidable"}, - {1262, 2}, - 1 - } - { - {1345, 2, "edge" "collidable"}, - {1375, 2}, - {1264, 2}, - 1 - } - { - {1375, 2}, - {1262, 2, "edge" "collidable"}, - {1264, 2}, - 1 - } - { - {1273, 2, "edge" "collidable"}, - {1345, 2}, - {1265, 2}, - 1 - } - { - {1345, 2}, - {1264, 2, "edge" "collidable"}, - {1265, 2}, - 1 - } - { - {1281, 2, "edge" "collidable"}, - {1273, 2}, - {1267, 2}, - 1 - } - { - {1273, 2}, - {1265, 2, "edge" "collidable"}, - {1267, 2}, - 1 - } - { - {1250, 2, "edge" "collidable"}, - {1281, 2}, - {1270, 2}, - 1 - } - { - {1281, 2}, - {1267, 2, "edge" "collidable"}, - {1270, 2}, - 1 - } - { - {1284, 2}, - {1333, 2, "edge" "collidable"}, - {1335, 2}, - 1 - } - { - {1308, 2, "edge" "collidable"}, - {1250, 2}, - {1272, 2}, - 1 - } - { - {1250, 2}, - {1270, 2, "edge" "collidable"}, - {1272, 2}, - 1 - } - { - {1374, 2, "edge" "collidable"}, - {1308, 2}, - {1274, 2}, - 1 - } - { - {1308, 2}, - {1272, 2, "edge" "collidable"}, - {1274, 2}, - 1 - } - { - {1350, 2, "edge" "collidable"}, - {1374, 2}, - {1277, 2}, - 1 - } - { - {1374, 2}, - {1274, 2, "edge" "collidable"}, - {1277, 2}, - 1 - } - { - {1384, 2, "edge" "collidable"}, - {1313, 2}, - {1354, 2}, - 1 - } - { - {1313, 2}, - {1351, 2, "edge" "collidable"}, - {1354, 2}, - 1 - } - { - {1261, 2, "edge" "collidable"}, - {1350, 2}, - {1279, 2}, - 1 - } - { - {1350, 2}, - {1277, 2, "edge" "collidable"}, - {1279, 2}, - 1 - } - { - {1288, 2, "edge" "collidable"}, - {1231, 2}, - {1362, 2}, - 1 - } - { - {1231, 2}, - {1358, 2, "edge" "collidable"}, - {1362, 2}, - 1 - } - { - {1380, 2, "edge" "collidable"}, - {1261, 2}, - {1280, 2}, - 1 - } - { - {1261, 2}, - {1279, 2, "edge" "collidable"}, - {1280, 2}, - 1 - } - { - {1292, 2, "edge" "collidable"}, - {1380, 2}, - {1282, 2}, - 1 - } - { - {1380, 2}, - {1280, 2, "edge" "collidable"}, - {1282, 2}, - 1 - } - { - {1339, 2, "edge" "collidable"}, - {1292, 2}, - {1283, 2}, - 1 - } - { - {1292, 2}, - {1282, 2, "edge" "collidable"}, - {1283, 2}, - 1 - } - { - {1219, 2, "edge" "collidable"}, - {1240, 2}, - {1347, 2}, - 1 - } - { - {1240, 2}, - {1344, 2, "edge" "collidable"}, - {1347, 2}, - 1 - } - { - {1348, 2, "edge" "collidable"}, - {1339, 2}, - {1286, 2}, - 1 - } - { - {1339, 2}, - {1283, 2, "edge" "collidable"}, - {1286, 2}, - 1 - } - { - {1304, 2, "edge" "collidable"}, - {1348, 2}, - {1287, 2}, - 1 - } - { - {1348, 2}, - {1286, 2, "edge" "collidable"}, - {1287, 2}, - 1 - } - { - {1388, 2, "edge" "collidable"}, - {1304, 2}, - {1289, 2}, - 1 - } - { - {1304, 2}, - {1287, 2, "edge" "collidable"}, - {1289, 2}, - 1 - } - { - {1342, 2, "edge" "collidable"}, - {1388, 2}, - {1291, 2}, - 1 - } - { - {1388, 2}, - {1289, 2, "edge" "collidable"}, - {1291, 2}, - 1 - } - { - {1359, 2, "edge" "collidable"}, - {1366, 2}, - {1338, 2}, - 1 - } - { - {1366, 2}, - {1335, 2, "edge" "collidable"}, - {1338, 2}, - 1 - } - { - {1288, 2}, - {1362, 2, "edge" "collidable"}, - {1365, 2}, - 1 - } - { - {1393, 2, "edge" "collidable"}, - {1288, 2}, - {1365, 2}, - 1 - } - { - {1269, 2, "edge" "collidable"}, - {1342, 2}, - {1295, 2}, - 1 - } - { - {1342, 2}, - {1291, 2, "edge" "collidable"}, - {1295, 2}, - 1 - } - { - {1318, 2}, - {1357, 2, "edge" "collidable"}, - {1358, 2}, - 1 - } - { - {1231, 2, "edge" "collidable"}, - {1318, 2}, - {1358, 2}, - 1 - } - { - {1255, 2, "edge" "collidable"}, - {1269, 2}, - {1296, 2}, - 1 - } - { - {1269, 2}, - {1295, 2, "edge" "collidable"}, - {1296, 2}, - 1 - } - { - {1391, 2, "edge" "collidable"}, - {1255, 2}, - {1297, 2}, - 1 - } - { - {1255, 2}, - {1296, 2, "edge" "collidable"}, - {1297, 2}, - 1 - } - { - {1385, 2, "edge" "collidable"}, - {1391, 2}, - {1298, 2}, - 1 - } - { - {1391, 2}, - {1297, 2, "edge" "collidable"}, - {1298, 2}, - 1 - } - { - {1337, 2, "edge" "collidable"}, - {1385, 2}, - {1300, 2}, - 1 - } - { - {1385, 2}, - {1298, 2, "edge" "collidable"}, - {1300, 2}, - 1 - } - { - {1343, 2, "edge" "collidable"}, - {1337, 2}, - {1301, 2}, - 1 - } - { - {1337, 2}, - {1300, 2, "edge" "collidable"}, - {1301, 2}, - 1 - } - { - {1352, 2, "edge" "collidable"}, - {1343, 2}, - {1303, 2}, - 1 - } - { - {1343, 2}, - {1301, 2, "edge" "collidable"}, - {1303, 2}, - 1 - } - { - {1332, 2, "edge" "collidable"}, - {1379, 2}, - {1320, 2}, - 1 - } - { - {1379, 2}, - {1319, 2, "edge" "collidable"}, - {1320, 2}, - 1 - } - { - {1275, 2, "edge" "collidable"}, - {1219, 2}, - {1349, 2}, - 1 - } - { - {1302, 2, "edge" "collidable"}, - {1352, 2}, - {1305, 2}, - 1 - } - { - {1352, 2}, - {1303, 2, "edge" "collidable"}, - {1305, 2}, - 1 - } - { - {1390, 2, "edge" "collidable"}, - {1302, 2}, - {1306, 2}, - 1 - } - { - {1302, 2}, - {1305, 2, "edge" "collidable"}, - {1306, 2}, - 1 - } - { - {1376, 2, "edge" "collidable"}, - {1393, 2}, - {1368, 2}, - 1 - } - { - {1285, 2, "edge" "collidable"}, - {1390, 2}, - {1307, 2}, - 1 - } - { - {1390, 2}, - {1306, 2, "edge" "collidable"}, - {1307, 2}, - 1 - } - { - {1336, 2}, - {1355, 2, "edge" "collidable"}, - {1357, 2}, - 1 - } - { - {1318, 2, "edge" "collidable"}, - {1336, 2}, - {1357, 2}, - 1 - } - { - {1353, 2, "edge" "collidable"}, - {1285, 2}, - {1309, 2}, - 1 - } - { - {1285, 2}, - {1307, 2, "edge" "collidable"}, - {1309, 2}, - 1 - } - { - {1240, 2, "edge" "collidable"}, - {1381, 2}, - {1344, 2}, - 1 - } - { - {1381, 2}, - {1341, 2, "edge" "collidable"}, - {1344, 2}, - 1 - } - { - {1252, 2, "edge" "collidable"}, - {1353, 2}, - {1311, 2}, - 1 - } - { - {1353, 2}, - {1309, 2, "edge" "collidable"}, - {1311, 2}, - 1 - } - { - {1223, 2, "edge" "collidable"}, - {1252, 2}, - {1312, 2}, - 1 - } - { - {1252, 2}, - {1311, 2, "edge" "collidable"}, - {1312, 2}, - 1 - } - { - {1361, 2, "edge" "collidable"}, - {1247, 2}, - {1317, 2}, - 1 - } - { - {1334, 2, "edge" "collidable"}, - {1223, 2}, - {1314, 2}, - 1 - } - { - {1223, 2}, - {1312, 2, "edge" "collidable"}, - {1314, 2}, - 1 - } - { - {1332, 2}, - {1320, 2, "edge" "collidable"}, - {1321, 2}, - 1 - } - { - {1249, 2, "edge" "collidable"}, - {1334, 2}, - {1315, 2}, - 1 - } - { - {1334, 2}, - {1314, 2, "edge" "collidable"}, - {1315, 2}, - 1 - } - { - {1259, 2}, - {1325, 2, "edge" "collidable"}, - {1326, 2}, - 1 - } - { - {1382, 2, "edge" "collidable"}, - {1259, 2}, - {1326, 2}, - 1 - } - { - {1247, 2, "edge" "collidable"}, - {1249, 2}, - {1316, 2}, - 1 - } - { - {1249, 2}, - {1315, 2, "edge" "collidable"}, - {1316, 2}, - 1 - } - # Mesh "Mesh.003" - { - {1515, 2, "edge" "collidable"}, - {1433, 2}, - {1452, 2}, - 0 - } - { - {1433, 2}, - {1554, 2, "edge" "collidable"}, - {1452, 2}, - 0 - } - { - {1425, 2}, - {1560, 2, "edge" "collidable"}, - {1562, 2}, - 0 - } - { - {1512, 2, "edge" "collidable"}, - {1425, 2}, - {1562, 2}, - 0 - } - { - {1463, 2}, - {1572, 2, "edge" "collidable"}, - {1575, 2}, - 0 - } - { - {1472, 2, "edge" "collidable"}, - {1463, 2}, - {1575, 2}, - 0 - } - { - {1520, 2}, - {1568, 2, "edge" "collidable"}, - {1570, 2}, - 0 - } - { - {1411, 2, "edge" "collidable"}, - {1520, 2}, - {1570, 2}, - 0 - } - { - {1524, 2}, - {1581, 2, "edge" "collidable"}, - {1584, 2}, - 0 - } - { - {1478, 2, "edge" "collidable"}, - {1524, 2}, - {1584, 2}, - 0 - } - { - {1542, 2}, - {1563, 2, "edge" "collidable"}, - {1564, 2}, - 0 - } - { - {1551, 2, "edge" "collidable"}, - {1468, 2}, - {1482, 2}, - 0 - } - { - {1400, 2, "edge" "collidable"}, - {1505, 2}, - {1579, 2}, - 0 - } - { - {1505, 2}, - {1422, 2, "edge" "collidable"}, - {1579, 2}, - 0 - } - { - {1486, 2}, - {1535, 2, "edge" "collidable"}, - {1538, 2}, - 0 - } - { - {1506, 2, "edge" "collidable"}, - {1424, 2}, - {1566, 2}, - 0 - } - { - {1424, 2}, - {1564, 2, "edge" "collidable"}, - {1566, 2}, - 0 - } - { - {1519, 2, "edge" "collidable"}, - {1481, 2}, - {1398, 2}, - 0 - } - { - {1502, 2}, - {1403, 2, "edge" "collidable"}, - {1513, 2}, - 0 - } - { - {1571, 2, "edge" "collidable"}, - {1502, 2}, - {1513, 2}, - 0 - } - { - {1574, 2}, - {1469, 2, "edge" "collidable"}, - {1522, 2}, - 0 - } - { - {1409, 2, "edge" "collidable"}, - {1464, 2}, - {1528, 2}, - 0 - } - { - {1464, 2, "edge" "collidable"}, - {1526, 2, "edge" "collidable"}, - {1528, 2}, - 0 - } - { - {1449, 2}, - {1582, 2, "edge" "collidable"}, - {1561, 2}, - 0 - } - { - {1548, 2}, - {1589, 2, "edge" "collidable"}, - {1399, 2}, - 0 - } - { - {1509, 2, "edge" "collidable"}, - {1548, 2}, - {1590, 2, "edge" "collidable"}, - 0 - } - { - {1406, 2, "edge" "collidable"}, - {1587, 2}, - {1488, 2}, - 0 - } - { - {1577, 2, "edge" "collidable"}, - {1500, 2}, - {1499, 2}, - 0 - } - { - {1502, 2, "edge" "collidable"}, - {1402, 2}, - {1403, 2}, - 0 - } - { - {1456, 2}, - {1448, 2, "edge" "collidable"}, - {1518, 2}, - 0 - } - { - {1451, 2, "edge" "collidable"}, - {1456, 2}, - {1518, 2}, - 0 - } - { - {1494, 2}, - {1454, 2, "edge" "collidable"}, - {1476, 2}, - 0 - } - { - {1463, 2, "edge" "collidable"}, - {1411, 2}, - {1572, 2}, - 0 - } - { - {1411, 2}, - {1570, 2, "edge" "collidable"}, - {1572, 2}, - 0 - } - { - {1436, 2}, - {1476, 2, "edge" "collidable"}, - {1431, 2}, - 0 - } - { - {1473, 2, "edge" "collidable"}, - {1436, 2}, - {1431, 2}, - 0 - } - { - {1486, 2, "edge" "collidable"}, - {1428, 2}, - {1535, 2}, - 0 - } - { - {1519, 2}, - {1398, 2, "edge" "collidable"}, - {1444, 2}, - 0 - } - { - {1500, 2, "edge" "collidable"}, - {1519, 2}, - {1444, 2}, - 0 - } - { - {1423, 2}, - {1561, 2, "edge" "collidable"}, - {1483, 2}, - 0 - } - { - {1507, 2}, - {1532, 2, "edge" "collidable"}, - {1498, 2}, - 0 - } - { - {1466, 2}, - {1573, 2, "edge" "collidable"}, - {1487, 2}, - 0 - } - { - {1517, 2, "edge" "collidable"}, - {1466, 2}, - {1487, 2}, - 0 - } - { - {1480, 2, "edge" "collidable"}, - {1459, 2}, - {1536, 2}, - 0 - } - { - {1485, 2}, - {1510, 2, "edge" "collidable"}, - {1493, 2}, - 0 - } - { - {1401, 2}, - {1588, 2, "edge" "collidable"}, - {1554, 2}, - 0 - } - { - {1489, 2, "edge" "collidable"}, - {1571, 2}, - {1441, 2}, - 0 - } - { - {1412, 2}, - {1558, 2, "edge" "collidable"}, - {1559, 2}, - 0 - } - { - {1514, 2, "edge" "collidable"}, - {1412, 2}, - {1559, 2}, - 0 - } - { - {1503, 2}, - {1567, 2, "edge" "collidable"}, - {1568, 2}, - 0 - } - { - {1520, 2, "edge" "collidable"}, - {1503, 2}, - {1568, 2}, - 0 - } - { - {1417, 2}, - {1432, 2, "edge" "collidable"}, - {1454, 2}, - 0 - } - { - {1494, 2, "edge" "collidable"}, - {1417, 2}, - {1454, 2}, - 0 - } - { - {1434, 2, "edge" "collidable"}, - {1491, 2}, - {1553, 2}, - 0 - } - { - {1548, 2, "edge" "collidable"}, - {1477, 2}, - {1583, 2}, - 0 - } - { - {1477, 2}, - {1408, 2, "edge" "collidable"}, - {1583, 2}, - 0 - } - { - {1471, 2}, - {1396, 2, "edge" "collidable"}, - {1475, 2}, - 0 - } - { - {1456, 2, "edge" "collidable"}, - {1525, 2}, - {1448, 2}, - 0 - } - { - {1525, 2}, - {1446, 2, "edge" "collidable"}, - {1448, 2}, - 0 - } - { - {1443, 2}, - {1497, 2, "edge" "collidable"}, - {1460, 2}, - 0 - } - { - {1546, 2}, - {1437, 2, "edge" "collidable"}, - {1415, 2}, - 0 - } - { - {1466, 2, "edge" "collidable"}, - {1406, 2}, - {1573, 2}, - 0 - } - { - {1406, 2}, - {1488, 2, "edge" "collidable"}, - {1573, 2}, - 0 - } - { - {1462, 2, "edge" "collidable"}, - {1409, 2}, - {1530, 2}, - 0 - } - { - {1409, 2}, - {1528, 2, "edge" "collidable"}, - {1530, 2}, - 0 - } - { - {1587, 2, "edge" "collidable"}, - {1447, 2}, - {1556, 2}, - 0 - } - { - {1447, 2}, - {1498, 2, "edge" "collidable"}, - {1556, 2}, - 0 - } - { - {1517, 2}, - {1487, 2, "edge" "collidable"}, - {1440, 2}, - 0 - } - { - {1418, 2, "edge" "collidable"}, - {1517, 2}, - {1440, 2}, - 0 - } - { - {1425, 2, "edge" "collidable"}, - {1514, 2}, - {1560, 2}, - 0 - } - { - {1580, 2, "edge" "collidable"}, - {1485, 2}, - {1493, 2}, - 0 - } - { - {1462, 2}, - {1530, 2, "edge" "collidable"}, - {1531, 2}, - 0 - } - { - {1511, 2, "edge" "collidable"}, - {1474, 2}, - {1578, 2}, - 0 - } - { - {1474, 2}, - {1492, 2, "edge" "collidable"}, - {1578, 2}, - 0 - } - { - {1503, 2, "edge" "collidable"}, - {1506, 2}, - {1567, 2}, - 0 - } - { - {1506, 2}, - {1566, 2, "edge" "collidable"}, - {1567, 2}, - 0 - } - { - {1442, 2, "edge" "collidable"}, - {1478, 2}, - {1585, 2}, - 0 - } - { - {1478, 2}, - {1584, 2, "edge" "collidable"}, - {1585, 2}, - 0 - } - { - {1496, 2, "edge" "collidable"}, - {1471, 2}, - {1475, 2}, - 0 - } - { - {1516, 2}, - {1527, 2, "edge" "collidable"}, - {1458, 2}, - 0 - } - { - {1430, 2, "edge" "collidable"}, - {1529, 2}, - {1549, 2}, - 0 - } - { - {1439, 2, "edge" "collidable"}, - {1462, 2}, - {1531, 2}, - 0 - } - { - {1468, 2, "edge" "collidable"}, - {1565, 2}, - {1550, 2}, - 0 - } - { - {1459, 2, "edge" "collidable"}, - {1479, 2}, - {1465, 2}, - 0 - } - { - {1524, 2, "edge" "collidable"}, - {1484, 2}, - {1581, 2}, - 0 - } - { - {1484, 2}, - {1576, 2, "edge" "collidable"}, - {1581, 2}, - 0 - } - { - {1445, 2, "edge" "collidable"}, - {1443, 2}, - {1460, 2}, - 0 - } - { - {1508, 2, "edge" "collidable"}, - {1434, 2}, - {1555, 2}, - 0 - } - { - {1434, 2}, - {1553, 2, "edge" "collidable"}, - {1555, 2}, - 0 - } - { - {1540, 2, "edge" "collidable"}, - {1486, 2}, - {1538, 2}, - 0 - } - { - {1540, 2}, - {1538, 2, "edge" "collidable"}, - {1541, 2}, - 0 - } - { - {1407, 2, "edge" "collidable"}, - {1540, 2}, - {1541, 2}, - 0 - } - { - {1580, 2}, - {1493, 2, "edge" "collidable"}, - {1396, 2}, - 0 - } - { - {1571, 2}, - {1513, 2, "edge" "collidable"}, - {1441, 2}, - 0 - } - { - {1586, 2, "edge" "collidable"}, - {1451, 2}, - {1569, 2}, - 0 - } - { - {1451, 2}, - {1518, 2, "edge" "collidable"}, - {1569, 2}, - 0 - } - { - {1501, 2, "edge" "collidable"}, - {1418, 2}, - {1420, 2}, - 0 - } - { - {1418, 2}, - {1440, 2, "edge" "collidable"}, - {1420, 2}, - 0 - } - { - {1542, 2, "edge" "collidable"}, - {1512, 2}, - {1563, 2}, - 0 - } - { - {1512, 2}, - {1562, 2, "edge" "collidable"}, - {1563, 2}, - 0 - } - { - {1397, 2, "edge" "collidable"}, - {1407, 2}, - {1543, 2}, - 0 - } - { - {1491, 2}, - {1552, 2, "edge" "collidable"}, - {1553, 2}, - 0 - } - { - {1565, 2, "edge" "collidable"}, - {1546, 2}, - {1415, 2}, - 0 - } - { - {1447, 2, "edge" "collidable"}, - {1507, 2}, - {1498, 2}, - 0 - } - { - {1515, 2}, - {1452, 2, "edge" "collidable"}, - {1422, 2}, - 0 - } - { - {1505, 2, "edge" "collidable"}, - {1515, 2}, - {1422, 2}, - 0 - } - { - {1428, 2}, - {1534, 2, "edge" "collidable"}, - {1535, 2}, - 0 - } - { - {1438, 2}, - {1495, 2, "edge" "collidable"}, - {1533, 2}, - 0 - } - { - {1523, 2}, - {1533, 2, "edge" "collidable"}, - {1432, 2}, - 0 - } - { - {1417, 2, "edge" "collidable"}, - {1523, 2}, - {1432, 2}, - 0 - } - { - {1459, 2}, - {1465, 2, "edge" "collidable"}, - {1536, 2}, - 0 - } - { - {1400, 2}, - {1579, 2, "edge" "collidable"}, - {1446, 2}, - 0 - } - { - {1525, 2, "edge" "collidable"}, - {1400, 2}, - {1446, 2}, - 0 - } - { - {1586, 2}, - {1569, 2, "edge" "collidable"}, - {1532, 2}, - 0 - } - { - {1507, 2, "edge" "collidable"}, - {1586, 2}, - {1532, 2}, - 0 - } - { - {1577, 2}, - {1499, 2, "edge" "collidable"}, - {1426, 2}, - 0 - } - { - {1565, 2}, - {1415, 2, "edge" "collidable"}, - {1550, 2}, - 0 - } - { - {1419, 2, "edge" "collidable"}, - {1435, 2}, - {1539, 2}, - 0 - } - { - {1435, 2}, - {1421, 2, "edge" "collidable"}, - {1539, 2}, - 0 - } - { - {1477, 2, "edge" "collidable"}, - {1414, 2}, - {1408, 2}, - 0 - } - { - {1414, 2}, - {1450, 2, "edge" "collidable"}, - {1408, 2}, - 0 - } - { - {1412, 2}, - {1557, 2, "edge" "collidable"}, - {1558, 2}, - 0 - } - { - {1404, 2, "edge" "collidable"}, - {1511, 2}, - {1461, 2}, - 0 - } - { - {1511, 2}, - {1578, 2, "edge" "collidable"}, - {1461, 2}, - 0 - } - { - {1514, 2}, - {1559, 2, "edge" "collidable"}, - {1560, 2}, - 0 - } - { - {1412, 2, "edge" "collidable"}, - {1508, 2}, - {1557, 2}, - 0 - } - { - {1508, 2}, - {1555, 2, "edge" "collidable"}, - {1557, 2}, - 0 - } - { - {1521, 2, "edge" "collidable"}, - {1577, 2}, - {1426, 2}, - 0 - } - { - {1496, 2}, - {1475, 2, "edge" "collidable"}, - {1469, 2}, - 0 - } - { - {1574, 2, "edge" "collidable"}, - {1496, 2}, - {1469, 2}, - 0 - } - { - {1587, 2}, - {1556, 2, "edge" "collidable"}, - {1488, 2}, - 0 - } - { - {1479, 2}, - {1537, 2, "edge" "collidable"}, - {1465, 2}, - 0 - } - { - {1407, 2}, - {1541, 2, "edge" "collidable"}, - {1543, 2}, - 0 - } - { - {1529, 2, "edge" "collidable"}, - {1490, 2}, - {1547, 2}, - 0 - } - { - {1490, 2}, - {1544, 2, "edge" "collidable"}, - {1547, 2}, - 0 - } - { - {1521, 2}, - {1426, 2, "edge" "collidable"}, - {1450, 2}, - 0 - } - { - {1414, 2, "edge" "collidable"}, - {1521, 2}, - {1450, 2}, - 0 - } - { - {1551, 2}, - {1482, 2, "edge" "collidable"}, - {1510, 2}, - 0 - } - { - {1471, 2, "edge" "collidable"}, - {1580, 2}, - {1396, 2}, - 0 - } - { - {1523, 2, "edge" "collidable"}, - {1438, 2}, - {1533, 2}, - 0 - } - { - {1473, 2}, - {1431, 2, "edge" "collidable"}, - {1492, 2}, - 0 - } - { - {1474, 2, "edge" "collidable"}, - {1473, 2}, - {1492, 2}, - 0 - } - { - {1472, 2}, - {1575, 2, "edge" "collidable"}, - {1576, 2}, - 0 - } - { - {1484, 2, "edge" "collidable"}, - {1472, 2}, - {1576, 2}, - 0 - } - { - {1404, 2}, - {1461, 2, "edge" "collidable"}, - {1421, 2}, - 0 - } - { - {1435, 2, "edge" "collidable"}, - {1404, 2}, - {1421, 2}, - 0 - } - { - {1500, 2}, - {1444, 2, "edge" "collidable"}, - {1499, 2}, - 0 - } - { - {1491, 2, "edge" "collidable"}, - {1430, 2}, - {1552, 2}, - 0 - } - { - {1430, 2}, - {1549, 2, "edge" "collidable"}, - {1552, 2}, - 0 - } - { - {1504, 2}, - {1429, 2, "edge" "collidable"}, - {1416, 2}, - 0 - } - { - {1402, 2, "edge" "collidable"}, - {1504, 2}, - {1416, 2}, - 0 - } - { - {1439, 2}, - {1531, 2, "edge" "collidable"}, - {1534, 2}, - 0 - } - { - {1428, 2, "edge" "collidable"}, - {1439, 2}, - {1534, 2}, - 0 - } - { - {1401, 2, "edge" "collidable"}, - {1442, 2}, - {1588, 2}, - 0 - } - { - {1442, 2}, - {1585, 2, "edge" "collidable"}, - {1588, 2}, - 0 - } - { - {1433, 2, "edge" "collidable"}, - {1401, 2}, - {1554, 2}, - 0 - } - { - {1397, 2}, - {1543, 2, "edge" "collidable"}, - {1544, 2}, - 0 - } - { - {1490, 2, "edge" "collidable"}, - {1397, 2}, - {1544, 2}, - 0 - } - { - {1467, 2}, - {1427, 2, "edge" "collidable"}, - {1413, 2}, - 0 - } - { - {1402, 2}, - {1416, 2, "edge" "collidable"}, - {1403, 2}, - 0 - } - { - {1436, 2, "edge" "collidable"}, - {1494, 2}, - {1476, 2}, - 0 - } - { - {1516, 2, "edge" "collidable"}, - {1445, 2}, - {1527, 2}, - 0 - } - { - {1545, 2}, - {1458, 2, "edge" "collidable"}, - {1495, 2}, - 0 - } - { - {1438, 2, "edge" "collidable"}, - {1545, 2}, - {1495, 2}, - 0 - } - { - {1419, 2}, - {1539, 2, "edge" "collidable"}, - {1455, 2}, - 0 - } - { - {1470, 2, "edge" "collidable"}, - {1419, 2}, - {1455, 2}, - 0 - } - { - {1504, 2, "edge" "collidable"}, - {1405, 2}, - {1429, 2}, - 0 - } - { - {1405, 2}, - {1457, 2, "edge" "collidable"}, - {1429, 2}, - 0 - } - { - {1489, 2}, - {1441, 2, "edge" "collidable"}, - {1427, 2}, - 0 - } - { - {1467, 2, "edge" "collidable"}, - {1489, 2}, - {1427, 2}, - 0 - } - { - {1453, 2, "edge" "collidable"}, - {1423, 2}, - {1483, 2}, - 0 - } - { - {1443, 2, "edge" "collidable"}, - {1453, 2}, - {1497, 2}, - 0 - } - { - {1481, 2, "edge" "collidable"}, - {1467, 2}, - {1413, 2}, - 0 - } - { - {1480, 2}, - {1536, 2, "edge" "collidable"}, - {1582, 2}, - 0 - } - { - {1410, 2, "edge" "collidable"}, - {1574, 2}, - {1522, 2}, - 0 - } - { - {1545, 2, "edge" "collidable"}, - {1516, 2}, - {1458, 2}, - 0 - } - { - {1470, 2}, - {1455, 2, "edge" "collidable"}, - {1457, 2}, - 0 - } - { - {1405, 2, "edge" "collidable"}, - {1470, 2}, - {1457, 2}, - 0 - } - { - {1449, 2, "edge" "collidable"}, - {1480, 2}, - {1582, 2}, - 0 - } - { - {1485, 2, "edge" "collidable"}, - {1551, 2}, - {1510, 2}, - 0 - } - { - {1546, 2, "edge" "collidable"}, - {1501, 2}, - {1437, 2}, - 0 - } - { - {1501, 2}, - {1420, 2, "edge" "collidable"}, - {1437, 2}, - 0 - } - { - {1529, 2}, - {1547, 2, "edge" "collidable"}, - {1549, 2}, - 0 - } - { - {1410, 2}, - {1522, 2, "edge" "collidable"}, - {1537, 2}, - 0 - } - { - {1479, 2, "edge" "collidable"}, - {1410, 2}, - {1537, 2}, - 0 - } - { - {1481, 2}, - {1413, 2, "edge" "collidable"}, - {1398, 2}, - 0 - } - { - {1445, 2}, - {1460, 2, "edge" "collidable"}, - {1527, 2}, - 0 - } - { - {1424, 2, "edge" "collidable"}, - {1542, 2}, - {1564, 2}, - 0 - } - { - {1453, 2}, - {1483, 2, "edge" "collidable"}, - {1497, 2}, - 0 - } - { - {1423, 2, "edge" "collidable"}, - {1449, 2}, - {1561, 2}, - 0 - } - { - {1468, 2}, - {1550, 2, "edge" "collidable"}, - {1482, 2}, - 0 - } - { - {1548, 2}, - {1399, 2, "edge" "collidable"}, - {1590, 2}, - 0 - } - { - {1548, 2}, - {1583, 2, "edge" "collidable"}, - {1589, 2}, - 0 - } - # Mesh "Plane" - { - {1609, 2}, - {1593, 2, "edge" "collidable"}, - {1591, 2}, - 2 - } - { - {1609, 2}, - {1591, 2}, - {1610, 2}, - 2 - } - { - {1592, 2}, - {1609, 2}, - {1610, 2}, - 2 - } - { - {1592, 2}, - {1610, 2}, - {1597, 2}, - 2 - } - { - {1597, 2}, - {1610, 2}, - {1603, 2}, - 2 - } - { - {1592, 2}, - {1597, 2}, - {1605, 2}, - 2 - } - { - {1606, 2}, - {1597, 2}, - {1595, 2}, - 2 - } - { - {1595, 2}, - {1597, 2}, - {1603, 2}, - 2 - } - { - {1595, 2}, - {1603, 2}, - {1604, 2}, - 2 - } - { - {1604, 2}, - {1603, 2}, - {1598, 2}, - 2 - } - { - {1607, 2}, - {1592, 2}, - {1600, 2}, - 2 - } - { - {1600, 2}, - {1592, 2}, - {1602, 2}, - 2 - } - { - {1602, 2}, - {1592, 2}, - {1605, 2}, - 2 - } - { - {1608, 2}, - {1600, 2}, - {1602, 2}, - 2 - } - { - {1608, 2}, - {1602, 2}, - {1596, 2}, - 2 - } - { - {1599, 2}, - {1602, 2}, - {1605, 2}, - 2 - } - { - {1599, 2}, - {1605, 2}, - {1594, 2}, - 2 - } - { - {1601, 2}, - {1599, 2}, - {1594, 2}, - 2 - } - # Mesh "Plane.001" - { - {1629, 2}, - {1613, 2, "edge" "collidable"}, - {1611, 2}, - 2 - } - { - {1629, 2}, - {1611, 2}, - {1630, 2}, - 2 - } - { - {1612, 2}, - {1629, 2}, - {1630, 2}, - 2 - } - { - {1612, 2}, - {1630, 2}, - {1617, 2}, - 2 - } - { - {1617, 2}, - {1630, 2}, - {1623, 2}, - 2 - } - { - {1612, 2}, - {1617, 2}, - {1625, 2}, - 2 - } - { - {1626, 2}, - {1617, 2}, - {1615, 2}, - 2 - } - { - {1615, 2}, - {1617, 2}, - {1623, 2}, - 2 - } - { - {1615, 2}, - {1623, 2}, - {1624, 2}, - 2 - } - { - {1624, 2}, - {1623, 2}, - {1618, 2}, - 2 - } - { - {1627, 2}, - {1612, 2}, - {1620, 2}, - 2 - } - { - {1620, 2}, - {1612, 2}, - {1622, 2}, - 2 - } - { - {1622, 2}, - {1612, 2}, - {1625, 2}, - 2 - } - { - {1628, 2}, - {1620, 2}, - {1622, 2}, - 2 - } - { - {1628, 2}, - {1622, 2}, - {1616, 2}, - 2 - } - { - {1619, 2}, - {1622, 2}, - {1625, 2}, - 2 - } - { - {1619, 2}, - {1625, 2}, - {1614, 2}, - 2 - } - { - {1621, 2}, - {1619, 2}, - {1614, 2}, - 2 - } - # Mesh "Plane.006" - { - {1649, 2}, - {1633, 2, "edge" "collidable"}, - {1631, 2}, - 2 - } - { - {1649, 2}, - {1631, 2}, - {1650, 2}, - 2 - } - { - {1632, 2}, - {1649, 2}, - {1650, 2}, - 2 - } - { - {1632, 2}, - {1650, 2}, - {1637, 2}, - 2 - } - { - {1637, 2}, - {1650, 2}, - {1643, 2}, - 2 - } - { - {1632, 2}, - {1637, 2}, - {1645, 2}, - 2 - } - { - {1646, 2}, - {1637, 2}, - {1635, 2}, - 2 - } - { - {1635, 2}, - {1637, 2}, - {1643, 2}, - 2 - } - { - {1635, 2}, - {1643, 2}, - {1644, 2}, - 2 - } - { - {1644, 2}, - {1643, 2}, - {1638, 2}, - 2 - } - { - {1647, 2}, - {1632, 2}, - {1640, 2}, - 2 - } - { - {1640, 2}, - {1632, 2}, - {1642, 2}, - 2 - } - { - {1642, 2}, - {1632, 2}, - {1645, 2}, - 2 - } - { - {1648, 2}, - {1640, 2}, - {1642, 2}, - 2 - } - { - {1648, 2}, - {1642, 2}, - {1636, 2}, - 2 - } - { - {1639, 2}, - {1642, 2}, - {1645, 2}, - 2 - } - { - {1639, 2}, - {1645, 2}, - {1634, 2}, - 2 - } - { - {1641, 2}, - {1639, 2}, - {1634, 2}, - 2 - } - # Mesh "Plane.007" - { - {1669, 2}, - {1653, 2, "edge" "collidable"}, - {1651, 2}, - 2 - } - { - {1669, 2}, - {1651, 2}, - {1670, 2}, - 2 - } - { - {1652, 2}, - {1669, 2}, - {1670, 2}, - 2 - } - { - {1652, 2}, - {1670, 2}, - {1657, 2}, - 2 - } - { - {1657, 2}, - {1670, 2}, - {1663, 2}, - 2 - } - { - {1652, 2}, - {1657, 2}, - {1665, 2}, - 2 - } - { - {1666, 2}, - {1657, 2}, - {1655, 2}, - 2 - } - { - {1655, 2}, - {1657, 2}, - {1663, 2}, - 2 - } - { - {1655, 2}, - {1663, 2}, - {1664, 2}, - 2 - } - { - {1664, 2}, - {1663, 2}, - {1658, 2}, - 2 - } - { - {1667, 2}, - {1652, 2}, - {1660, 2}, - 2 - } - { - {1660, 2}, - {1652, 2}, - {1662, 2}, - 2 - } - { - {1662, 2}, - {1652, 2}, - {1665, 2}, - 2 - } - { - {1668, 2}, - {1660, 2}, - {1662, 2}, - 2 - } - { - {1668, 2}, - {1662, 2}, - {1656, 2}, - 2 - } - { - {1659, 2}, - {1662, 2}, - {1665, 2}, - 2 - } - { - {1659, 2}, - {1665, 2}, - {1654, 2}, - 2 - } - { - {1661, 2}, - {1659, 2}, - {1654, 2}, - 2 - } - # Mesh "Plane.008" - { - {1689, 2}, - {1673, 2, "edge" "collidable"}, - {1671, 2}, - 2 - } - { - {1689, 2}, - {1671, 2}, - {1690, 2}, - 2 - } - { - {1672, 2}, - {1689, 2}, - {1690, 2}, - 2 - } - { - {1672, 2}, - {1690, 2}, - {1677, 2}, - 2 - } - { - {1677, 2}, - {1690, 2}, - {1683, 2}, - 2 - } - { - {1672, 2}, - {1677, 2}, - {1685, 2}, - 2 - } - { - {1686, 2}, - {1677, 2}, - {1675, 2}, - 2 - } - { - {1675, 2}, - {1677, 2}, - {1683, 2}, - 2 - } - { - {1675, 2}, - {1683, 2}, - {1684, 2}, - 2 - } - { - {1684, 2}, - {1683, 2}, - {1678, 2}, - 2 - } - { - {1687, 2}, - {1672, 2}, - {1680, 2}, - 2 - } - { - {1680, 2}, - {1672, 2}, - {1682, 2}, - 2 - } - { - {1682, 2}, - {1672, 2}, - {1685, 2}, - 2 - } - { - {1688, 2}, - {1680, 2}, - {1682, 2}, - 2 - } - { - {1688, 2}, - {1682, 2}, - {1676, 2}, - 2 - } - { - {1679, 2}, - {1682, 2}, - {1685, 2}, - 2 - } - { - {1679, 2}, - {1685, 2}, - {1674, 2}, - 2 - } - { - {1681, 2}, - {1679, 2}, - {1674, 2}, - 2 - } - # Mesh "Plane.009" - { - {1709, 2}, - {1693, 2, "edge" "collidable"}, - {1691, 2}, - 2 - } - { - {1709, 2}, - {1691, 2}, - {1710, 2}, - 2 - } - { - {1692, 2}, - {1709, 2}, - {1710, 2}, - 2 - } - { - {1692, 2}, - {1710, 2}, - {1697, 2}, - 2 - } - { - {1697, 2}, - {1710, 2}, - {1703, 2}, - 2 - } - { - {1692, 2}, - {1697, 2}, - {1705, 2}, - 2 - } - { - {1706, 2}, - {1697, 2}, - {1695, 2}, - 2 - } - { - {1695, 2}, - {1697, 2}, - {1703, 2}, - 2 - } - { - {1695, 2}, - {1703, 2}, - {1704, 2}, - 2 - } - { - {1704, 2}, - {1703, 2}, - {1698, 2}, - 2 - } - { - {1707, 2}, - {1692, 2}, - {1700, 2}, - 2 - } - { - {1700, 2}, - {1692, 2}, - {1702, 2}, - 2 - } - { - {1702, 2}, - {1692, 2}, - {1705, 2}, - 2 - } - { - {1708, 2}, - {1700, 2}, - {1702, 2}, - 2 - } - { - {1708, 2}, - {1702, 2}, - {1696, 2}, - 2 - } - { - {1699, 2}, - {1702, 2}, - {1705, 2}, - 2 - } - { - {1699, 2}, - {1705, 2}, - {1694, 2}, - 2 - } - { - {1701, 2}, - {1699, 2}, - {1694, 2}, - 2 - } - # Mesh "Plane.010" - { - {1729, 2}, - {1713, 2, "edge" "collidable"}, - {1711, 2}, - 2 - } - { - {1729, 2}, - {1711, 2}, - {1730, 2}, - 2 - } - { - {1712, 2}, - {1729, 2}, - {1730, 2}, - 2 - } - { - {1712, 2}, - {1730, 2}, - {1717, 2}, - 2 - } - { - {1717, 2}, - {1730, 2}, - {1723, 2}, - 2 - } - { - {1712, 2}, - {1717, 2}, - {1725, 2}, - 2 - } - { - {1726, 2}, - {1717, 2}, - {1715, 2}, - 2 - } - { - {1715, 2}, - {1717, 2}, - {1723, 2}, - 2 - } - { - {1715, 2}, - {1723, 2}, - {1724, 2}, - 2 - } - { - {1724, 2}, - {1723, 2}, - {1718, 2}, - 2 - } - { - {1727, 2}, - {1712, 2}, - {1720, 2}, - 2 - } - { - {1720, 2}, - {1712, 2}, - {1722, 2}, - 2 - } - { - {1722, 2}, - {1712, 2}, - {1725, 2}, - 2 - } - { - {1728, 2}, - {1720, 2}, - {1722, 2}, - 2 - } - { - {1728, 2}, - {1722, 2}, - {1716, 2}, - 2 - } - { - {1719, 2}, - {1722, 2}, - {1725, 2}, - 2 - } - { - {1719, 2}, - {1725, 2}, - {1714, 2}, - 2 - } - { - {1721, 2}, - {1719, 2}, - {1714, 2}, - 2 - } - # Mesh "Plane.011" - { - {1733, 2}, - {1734, 2, "edge" "collidable"}, - {1731, 2}, - 3 - } - { - {1731, 2}, - {1732, 2}, - {1733, 2}, - 3 - } - # Mesh "Plane.012" - { - {1737, 2}, - {1738, 2, "edge" "collidable"}, - {1735, 2}, - 3 - } - { - {1735, 2}, - {1736, 2}, - {1737, 2}, - 3 - } - # Mesh "Plane.013" - { - {1741, 2}, - {1742, 2, "edge" "collidable"}, - {1739, 2}, - 3 - } - { - {1739, 2}, - {1740, 2}, - {1741, 2}, - 3 - } - # Mesh "Plane.014" - { - {1745, 2}, - {1746, 2, "edge" "collidable"}, - {1743, 2}, - 3 - } - { - {1743, 2}, - {1744, 2}, - {1745, 2}, - 3 - } - # Mesh "Plane.015" - { - {1749, 2}, - {1750, 2, "edge" "collidable"}, - {1747, 2}, - 3 - } - { - {1747, 2}, - {1748, 2}, - {1749, 2}, - 3 - } - # Mesh "Plane.016" - { - {1753, 2}, - {1754, 2, "edge" "collidable"}, - {1751, 2}, - 3 - } - { - {1751, 2}, - {1752, 2}, - {1753, 2}, - 3 - } - # Mesh "Plane.017" - { - {1757, 2}, - {1758, 2, "edge" "collidable"}, - {1755, 2}, - 3 - } - { - {1755, 2}, - {1756, 2}, - {1757, 2}, - 3 - } - # Mesh "Plane.018" - { - {1761, 2}, - {1762, 2, "edge" "collidable"}, - {1759, 2}, - 3 - } - { - {1759, 2}, - {1760, 2}, - {1761, 2}, - 3 - } - # Mesh "Plane.019" - { - {1765, 2}, - {1766, 2, "edge" "collidable"}, - {1763, 2}, - 3 - } - { - {1763, 2}, - {1764, 2}, - {1765, 2}, - 3 - } - # Mesh "Plane.020" - { - {1769, 2}, - {1770, 2, "edge" "collidable"}, - {1767, 2}, - 3 - } - { - {1767, 2}, - {1768, 2}, - {1769, 2}, - 3 - } - # Mesh "Plane.024" - { - {1789, 2}, - {1773, 2, "edge" "collidable"}, - {1771, 2}, - 2 - } - { - {1789, 2}, - {1771, 2}, - {1790, 2}, - 2 - } - { - {1772, 2}, - {1789, 2}, - {1790, 2}, - 2 - } - { - {1772, 2}, - {1790, 2}, - {1777, 2}, - 2 - } - { - {1777, 2}, - {1790, 2}, - {1783, 2}, - 2 - } - { - {1772, 2}, - {1777, 2}, - {1785, 2}, - 2 - } - { - {1786, 2}, - {1777, 2}, - {1775, 2}, - 2 - } - { - {1775, 2}, - {1777, 2}, - {1783, 2}, - 2 - } - { - {1775, 2}, - {1783, 2}, - {1784, 2}, - 2 - } - { - {1784, 2}, - {1783, 2}, - {1778, 2}, - 2 - } - { - {1787, 2}, - {1772, 2}, - {1780, 2}, - 2 - } - { - {1780, 2}, - {1772, 2}, - {1782, 2}, - 2 - } - { - {1782, 2}, - {1772, 2}, - {1785, 2}, - 2 - } - { - {1788, 2}, - {1780, 2}, - {1782, 2}, - 2 - } - { - {1788, 2}, - {1782, 2}, - {1776, 2}, - 2 - } - { - {1779, 2}, - {1782, 2}, - {1785, 2}, - 2 - } - { - {1779, 2}, - {1785, 2}, - {1774, 2}, - 2 - } - { - {1781, 2}, - {1779, 2}, - {1774, 2}, - 2 - } - # Mesh "Plane.025" - { - {1809, 2}, - {1793, 2, "edge" "collidable"}, - {1791, 2}, - 2 - } - { - {1809, 2}, - {1791, 2}, - {1810, 2}, - 2 - } - { - {1792, 2}, - {1809, 2}, - {1810, 2}, - 2 - } - { - {1792, 2}, - {1810, 2}, - {1797, 2}, - 2 - } - { - {1797, 2}, - {1810, 2}, - {1803, 2}, - 2 - } - { - {1792, 2}, - {1797, 2}, - {1805, 2}, - 2 - } - { - {1806, 2}, - {1797, 2}, - {1795, 2}, - 2 - } - { - {1795, 2}, - {1797, 2}, - {1803, 2}, - 2 - } - { - {1795, 2}, - {1803, 2}, - {1804, 2}, - 2 - } - { - {1804, 2}, - {1803, 2}, - {1798, 2}, - 2 - } - { - {1807, 2}, - {1792, 2}, - {1800, 2}, - 2 - } - { - {1800, 2}, - {1792, 2}, - {1802, 2}, - 2 - } - { - {1802, 2}, - {1792, 2}, - {1805, 2}, - 2 - } - { - {1808, 2}, - {1800, 2}, - {1802, 2}, - 2 - } - { - {1808, 2}, - {1802, 2}, - {1796, 2}, - 2 - } - { - {1799, 2}, - {1802, 2}, - {1805, 2}, - 2 - } - { - {1799, 2}, - {1805, 2}, - {1794, 2}, - 2 - } - { - {1801, 2}, - {1799, 2}, - {1794, 2}, - 2 - } - # Mesh "Plane.026" - { - {1829, 2}, - {1813, 2, "edge" "collidable"}, - {1811, 2}, - 2 - } - { - {1829, 2}, - {1811, 2}, - {1830, 2}, - 2 - } - { - {1812, 2}, - {1829, 2}, - {1830, 2}, - 2 - } - { - {1812, 2}, - {1830, 2}, - {1817, 2}, - 2 - } - { - {1817, 2}, - {1830, 2}, - {1823, 2}, - 2 - } - { - {1812, 2}, - {1817, 2}, - {1825, 2}, - 2 - } - { - {1826, 2}, - {1817, 2}, - {1815, 2}, - 2 - } - { - {1815, 2}, - {1817, 2}, - {1823, 2}, - 2 - } - { - {1815, 2}, - {1823, 2}, - {1824, 2}, - 2 - } - { - {1824, 2}, - {1823, 2}, - {1818, 2}, - 2 - } - { - {1827, 2}, - {1812, 2}, - {1820, 2}, - 2 - } - { - {1820, 2}, - {1812, 2}, - {1822, 2}, - 2 - } - { - {1822, 2}, - {1812, 2}, - {1825, 2}, - 2 - } - { - {1828, 2}, - {1820, 2}, - {1822, 2}, - 2 - } - { - {1828, 2}, - {1822, 2}, - {1816, 2}, - 2 - } - { - {1819, 2}, - {1822, 2}, - {1825, 2}, - 2 - } - { - {1819, 2}, - {1825, 2}, - {1814, 2}, - 2 - } - { - {1821, 2}, - {1819, 2}, - {1814, 2}, - 2 - } - # Mesh "Plane.028" - { - {1833, 2}, - {1834, 2, "edge" "collidable"}, - {1831, 2}, - 3 - } - { - {1831, 2}, - {1832, 2}, - {1833, 2}, - 3 - } - # Mesh "Plane.029" - { - {1837, 2, "edge" "foreground"}, - {1838, 2, "edge" "foreground"}, - {1835, 2, "foreground"}, - 1 - } - { - {1835, 2, "edge" "foreground"}, - {1836, 2, "edge" "foreground"}, - {1837, 2, "foreground"}, - 1 - } - # Mesh "Plane.030" - { - {1841, 2, "edge" "foreground"}, - {1842, 2, "edge" "foreground"}, - {1839, 2, "foreground"}, - 1 - } - { - {1839, 2, "edge" "foreground"}, - {1840, 2, "edge" "foreground"}, - {1841, 2, "foreground"}, - 1 - } - # Mesh "Plane.031" - { - {1845, 2, "edge" "foreground"}, - {1846, 2, "edge" "foreground"}, - {1843, 2, "foreground"}, - 1 - } - { - {1843, 2, "edge" "foreground"}, - {1844, 2, "edge" "foreground"}, - {1845, 2, "foreground"}, - 1 - } - # Mesh "Plane.034" - { - {1849, 2, "edge" "foreground"}, - {1850, 2, "edge" "foreground"}, - {1847, 2, "foreground"}, - 1 - } - { - {1847, 2, "edge" "foreground"}, - {1848, 2, "edge" "foreground"}, - {1849, 2, "foreground"}, - 1 - } - # Mesh "Plane.035" - { - {1853, 2, "edge" "foreground"}, - {1854, 2, "edge" "foreground"}, - {1851, 2, "foreground"}, - 1 - } - { - {1851, 2, "edge" "foreground"}, - {1852, 2, "edge" "foreground"}, - {1853, 2, "foreground"}, - 1 - } - # Mesh "Plane.036" - { - {1857, 2, "edge" "foreground"}, - {1858, 2, "edge" "foreground"}, - {1855, 2, "foreground"}, - 1 - } - { - {1855, 2, "edge" "foreground"}, - {1856, 2, "edge" "foreground"}, - {1857, 2, "foreground"}, - 1 - } - # Mesh "Plane.037" - { - {1861, 2, "edge" "foreground"}, - {1862, 2, "edge" "foreground"}, - {1859, 2, "foreground"}, - 1 - } - { - {1859, 2, "edge" "foreground"}, - {1860, 2, "edge" "foreground"}, - {1861, 2, "foreground"}, - 1 - } - # Mesh "Plane.038" - { - {1865, 2, "edge" "foreground"}, - {1866, 2, "edge" "foreground"}, - {1863, 2, "foreground"}, - 1 - } - { - {1863, 2, "edge" "foreground"}, - {1864, 2, "edge" "foreground"}, - {1865, 2, "foreground"}, - 1 - } - # Mesh "Plane.039" - { - {1869, 2, "edge" "foreground"}, - {1870, 2, "edge" "foreground"}, - {1867, 2, "foreground"}, - 1 - } - { - {1867, 2, "edge" "foreground"}, - {1868, 2, "edge" "foreground"}, - {1869, 2, "foreground"}, - 1 - } - # Mesh "Plane.040" - { - {1889, 2}, - {1873, 2, "edge" "collidable"}, - {1871, 2}, - 2 - } - { - {1889, 2}, - {1871, 2}, - {1890, 2}, - 2 - } - { - {1872, 2}, - {1889, 2}, - {1890, 2}, - 2 - } - { - {1872, 2}, - {1890, 2}, - {1877, 2}, - 2 - } - { - {1877, 2}, - {1890, 2}, - {1883, 2}, - 2 - } - { - {1872, 2}, - {1877, 2}, - {1885, 2}, - 2 - } - { - {1886, 2}, - {1877, 2}, - {1875, 2}, - 2 - } - { - {1875, 2}, - {1877, 2}, - {1883, 2}, - 2 - } - { - {1875, 2}, - {1883, 2}, - {1884, 2}, - 2 - } - { - {1884, 2}, - {1883, 2}, - {1878, 2}, - 2 - } - { - {1887, 2}, - {1872, 2}, - {1880, 2}, - 2 - } - { - {1880, 2}, - {1872, 2}, - {1882, 2}, - 2 - } - { - {1882, 2}, - {1872, 2}, - {1885, 2}, - 2 - } - { - {1888, 2}, - {1880, 2}, - {1882, 2}, - 2 - } - { - {1888, 2}, - {1882, 2}, - {1876, 2}, - 2 - } - { - {1879, 2}, - {1882, 2}, - {1885, 2}, - 2 - } - { - {1879, 2}, - {1885, 2}, - {1874, 2}, - 2 - } - { - {1881, 2}, - {1879, 2}, - {1874, 2}, - 2 - } - # Mesh "Font" - { - {1941, 2, "edge" "collidable"}, - {1940, 2, "edge" "collidable"}, - {1939, 2}, - 1 - } - { - {1941, 2}, - {1939, 2}, - {1947, 2}, - 1 - } - { - {1947, 2}, - {1939, 2, "edge" "collidable"}, - {1946, 2}, - 1 - } - { - {1941, 2}, - {1947, 2, "edge" "collidable"}, - {1949, 2}, - 1 - } - { - {1948, 2, "edge" "collidable"}, - {1947, 2}, - {1946, 2}, - 1 - } - { - {1941, 2}, - {1949, 2}, - {1943, 2}, - 1 - } - { - {1943, 2}, - {1949, 2, "edge" "collidable"}, - {1948, 2}, - 1 - } - { - {1943, 2}, - {1948, 2}, - {1944, 2, "edge" "collidable"}, - 1 - } - { - {1944, 2}, - {1948, 2}, - {1946, 2}, - 1 - } - { - {1941, 2}, - {1943, 2, "edge" "collidable"}, - {1942, 2, "edge" "collidable"}, - 1 - } - { - {1945, 2, "edge" "collidable"}, - {1944, 2}, - {1946, 2, "edge" "collidable"}, - 1 - } - { - {1952, 2, "edge" "collidable"}, - {1951, 2, "edge" "collidable"}, - {1950, 2}, - 1 - } - { - {1952, 2}, - {1950, 2, "edge" "collidable"}, - {1953, 2, "edge" "collidable"}, - 1 - } - { - {1956, 2, "edge" "collidable"}, - {1955, 2, "edge" "collidable"}, - {1954, 2}, - 1 - } - { - {1956, 2}, - {1954, 2, "edge" "collidable"}, - {1957, 2, "edge" "collidable"}, - 1 - } - { - {1978, 2, "edge" "collidable"}, - {1977, 2, "edge" "collidable"}, - {1976, 2}, - 1 - } - { - {1978, 2}, - {1976, 2, "edge" "collidable"}, - {1975, 2}, - 1 - } - { - {1979, 2, "edge" "collidable"}, - {1978, 2}, - {1975, 2}, - 1 - } - { - {1979, 2}, - {1975, 2, "edge" "collidable"}, - {1974, 2}, - 1 - } - { - {1980, 2, "edge" "collidable"}, - {1979, 2}, - {1974, 2}, - 1 - } - { - {1980, 2}, - {1974, 2}, - {2002, 2}, - 1 - } - { - {2002, 2}, - {1974, 2}, - {2003, 2, "edge" "collidable"}, - 1 - } - { - {2003, 2}, - {1974, 2, "edge" "collidable"}, - {1973, 2}, - 1 - } - { - {1981, 2, "edge" "collidable"}, - {1980, 2}, - {2001, 2}, - 1 - } - { - {2001, 2}, - {1980, 2}, - {2002, 2, "edge" "collidable"}, - 1 - } - { - {1981, 2}, - {2001, 2, "edge" "collidable"}, - {2000, 2}, - 1 - } - { - {2004, 2, "edge" "collidable"}, - {2003, 2}, - {1973, 2}, - 1 - } - { - {1981, 2}, - {2000, 2, "edge" "collidable"}, - {1999, 2}, - 1 - } - { - {2005, 2, "edge" "collidable"}, - {2004, 2}, - {1973, 2}, - 1 - } - { - {1981, 2}, - {1999, 2, "edge" "collidable"}, - {1998, 2}, - 1 - } - { - {2006, 2, "edge" "collidable"}, - {2005, 2}, - {1973, 2}, - 1 - } - { - {1982, 2, "edge" "collidable"}, - {1981, 2}, - {1998, 2}, - 1 - } - { - {2006, 2}, - {1973, 2, "edge" "collidable"}, - {1972, 2}, - 1 - } - { - {1982, 2}, - {1998, 2, "edge" "collidable"}, - {1997, 2}, - 1 - } - { - {2007, 2, "edge" "collidable"}, - {2006, 2}, - {1972, 2}, - 1 - } - { - {1982, 2}, - {1997, 2, "edge" "collidable"}, - {1996, 2}, - 1 - } - { - {2008, 2, "edge" "collidable"}, - {2007, 2}, - {1972, 2}, - 1 - } - { - {1983, 2, "edge" "collidable"}, - {1982, 2}, - {1996, 2}, - 1 - } - { - {2008, 2}, - {1972, 2, "edge" "collidable"}, - {1971, 2}, - 1 - } - { - {1983, 2}, - {1996, 2, "edge" "collidable"}, - {2008, 2}, - 1 - } - { - {1983, 2}, - {2008, 2}, - {1971, 2}, - 1 - } - { - {1984, 2, "edge" "collidable"}, - {1983, 2}, - {1970, 2}, - 1 - } - { - {1970, 2}, - {1983, 2}, - {1971, 2, "edge" "collidable"}, - 1 - } - { - {1984, 2}, - {1970, 2, "edge" "collidable"}, - {1969, 2}, - 1 - } - { - {1984, 2}, - {1969, 2, "edge" "collidable"}, - {1968, 2}, - 1 - } - { - {1985, 2, "edge" "collidable"}, - {1984, 2}, - {1968, 2}, - 1 - } - { - {1985, 2}, - {1968, 2, "edge" "collidable"}, - {1967, 2}, - 1 - } - { - {1959, 2, "edge" "collidable"}, - {1958, 2, "edge" "collidable"}, - {1995, 2}, - 1 - } - { - {1960, 2, "edge" "collidable"}, - {1959, 2}, - {1995, 2}, - 1 - } - { - {1986, 2, "edge" "collidable"}, - {1985, 2}, - {1967, 2}, - 1 - } - { - {1986, 2}, - {1967, 2, "edge" "collidable"}, - {1966, 2}, - 1 - } - { - {1961, 2, "edge" "collidable"}, - {1960, 2}, - {1995, 2}, - 1 - } - { - {1986, 2}, - {1966, 2, "edge" "collidable"}, - {1965, 2}, - 1 - } - { - {1962, 2, "edge" "collidable"}, - {1961, 2}, - {1995, 2}, - 1 - } - { - {1963, 2, "edge" "collidable"}, - {1962, 2}, - {1995, 2}, - 1 - } - { - {1986, 2}, - {1965, 2, "edge" "collidable"}, - {1964, 2}, - 1 - } - { - {1964, 2, "edge" "collidable"}, - {1963, 2}, - {1995, 2}, - 1 - } - { - {1986, 2}, - {1964, 2}, - {1995, 2}, - 1 - } - { - {1987, 2, "edge" "collidable"}, - {1986, 2}, - {1995, 2}, - 1 - } - { - {1987, 2}, - {1995, 2, "edge" "collidable"}, - {1994, 2}, - 1 - } - { - {1987, 2}, - {1994, 2, "edge" "collidable"}, - {1993, 2}, - 1 - } - { - {1988, 2, "edge" "collidable"}, - {1987, 2}, - {1993, 2}, - 1 - } - { - {1988, 2}, - {1993, 2, "edge" "collidable"}, - {1992, 2}, - 1 - } - { - {1988, 2}, - {1992, 2, "edge" "collidable"}, - {1991, 2}, - 1 - } - { - {1989, 2, "edge" "collidable"}, - {1988, 2}, - {1991, 2}, - 1 - } - { - {1989, 2}, - {1991, 2, "edge" "collidable"}, - {1990, 2, "edge" "collidable"}, - 1 - } - { - {2011, 2, "edge" "collidable"}, - {2010, 2, "edge" "collidable"}, - {2009, 2}, - 1 - } - { - {2011, 2}, - {2009, 2, "edge" "collidable"}, - {2090, 2}, - 1 - } - { - {2012, 2, "edge" "collidable"}, - {2011, 2}, - {2090, 2}, - 1 - } - { - {2013, 2, "edge" "collidable"}, - {2012, 2}, - {2090, 2}, - 1 - } - { - {2014, 2, "edge" "collidable"}, - {2013, 2}, - {2089, 2}, - 1 - } - { - {2089, 2}, - {2013, 2}, - {2090, 2, "edge" "collidable"}, - 1 - } - { - {2014, 2}, - {2089, 2}, - {2109, 2}, - 1 - } - { - {2109, 2}, - {2089, 2, "edge" "collidable"}, - {2088, 2}, - 1 - } - { - {2015, 2, "edge" "collidable"}, - {2014, 2}, - {2108, 2}, - 1 - } - { - {2108, 2}, - {2014, 2}, - {2109, 2, "edge" "collidable"}, - 1 - } - { - {2110, 2, "edge" "collidable"}, - {2109, 2}, - {2088, 2}, - 1 - } - { - {2111, 2, "edge" "collidable"}, - {2110, 2}, - {2088, 2}, - 1 - } - { - {2015, 2}, - {2108, 2, "edge" "collidable"}, - {2107, 2}, - 1 - } - { - {2111, 2}, - {2088, 2, "edge" "collidable"}, - {2087, 2}, - 1 - } - { - {2112, 2, "edge" "collidable"}, - {2111, 2}, - {2087, 2}, - 1 - } - { - {2015, 2}, - {2107, 2, "edge" "collidable"}, - {2106, 2}, - 1 - } - { - {2113, 2, "edge" "collidable"}, - {2112, 2}, - {2087, 2}, - 1 - } - { - {2015, 2}, - {2106, 2, "edge" "collidable"}, - {2105, 2}, - 1 - } - { - {2113, 2}, - {2087, 2, "edge" "collidable"}, - {2086, 2}, - 1 - } - { - {2016, 2, "edge" "collidable"}, - {2015, 2}, - {2105, 2}, - 1 - } - { - {2114, 2, "edge" "collidable"}, - {2113, 2}, - {2086, 2}, - 1 - } - { - {2114, 2}, - {2086, 2, "edge" "collidable"}, - {2085, 2}, - 1 - } - { - {2016, 2}, - {2105, 2, "edge" "collidable"}, - {2104, 2}, - 1 - } - { - {2114, 2}, - {2085, 2, "edge" "collidable"}, - {2084, 2}, - 1 - } - { - {2091, 2, "edge" "collidable"}, - {2114, 2}, - {2084, 2}, - 1 - } - { - {2016, 2}, - {2104, 2, "edge" "collidable"}, - {2103, 2}, - 1 - } - { - {2091, 2}, - {2084, 2, "edge" "collidable"}, - {2083, 2}, - 1 - } - { - {2017, 2, "edge" "collidable"}, - {2016, 2}, - {2103, 2}, - 1 - } - { - {2092, 2, "edge" "collidable"}, - {2091, 2}, - {2083, 2}, - 1 - } - { - {2017, 2}, - {2103, 2, "edge" "collidable"}, - {2102, 2}, - 1 - } - { - {2092, 2}, - {2083, 2, "edge" "collidable"}, - {2082, 2}, - 1 - } - { - {2018, 2, "edge" "collidable"}, - {2017, 2}, - {2102, 2}, - 1 - } - { - {2093, 2, "edge" "collidable"}, - {2092, 2}, - {2082, 2}, - 1 - } - { - {2018, 2}, - {2102, 2, "edge" "collidable"}, - {2101, 2}, - 1 - } - { - {2093, 2}, - {2082, 2, "edge" "collidable"}, - {2081, 2}, - 1 - } - { - {2019, 2, "edge" "collidable"}, - {2018, 2}, - {2101, 2}, - 1 - } - { - {2094, 2, "edge" "collidable"}, - {2093, 2}, - {2081, 2}, - 1 - } - { - {2020, 2, "edge" "collidable"}, - {2019, 2}, - {2101, 2}, - 1 - } - { - {2020, 2}, - {2101, 2, "edge" "collidable"}, - {2100, 2}, - 1 - } - { - {2094, 2}, - {2081, 2, "edge" "collidable"}, - {2080, 2}, - 1 - } - { - {2021, 2, "edge" "collidable"}, - {2020, 2}, - {2100, 2}, - 1 - } - { - {2095, 2, "edge" "collidable"}, - {2094, 2}, - {2080, 2}, - 1 - } - { - {2021, 2}, - {2100, 2, "edge" "collidable"}, - {2099, 2}, - 1 - } - { - {2095, 2}, - {2080, 2, "edge" "collidable"}, - {2079, 2}, - 1 - } - { - {2022, 2, "edge" "collidable"}, - {2021, 2}, - {2099, 2}, - 1 - } - { - {2096, 2, "edge" "collidable"}, - {2095, 2}, - {2079, 2}, - 1 - } - { - {2022, 2}, - {2099, 2, "edge" "collidable"}, - {2098, 2}, - 1 - } - { - {2097, 2, "edge" "collidable"}, - {2096, 2}, - {2079, 2}, - 1 - } - { - {2022, 2}, - {2098, 2, "edge" "collidable"}, - {2097, 2}, - 1 - } - { - {2023, 2, "edge" "collidable"}, - {2022, 2}, - {2097, 2}, - 1 - } - { - {2023, 2}, - {2097, 2}, - {2079, 2}, - 1 - } - { - {2023, 2}, - {2079, 2, "edge" "collidable"}, - {2078, 2}, - 1 - } - { - {2024, 2, "edge" "collidable"}, - {2023, 2}, - {2078, 2}, - 1 - } - { - {2024, 2}, - {2078, 2, "edge" "collidable"}, - {2077, 2}, - 1 - } - { - {2025, 2, "edge" "collidable"}, - {2024, 2}, - {2077, 2}, - 1 - } - { - {2025, 2}, - {2077, 2, "edge" "collidable"}, - {2076, 2}, - 1 - } - { - {2026, 2, "edge" "collidable"}, - {2025, 2}, - {2076, 2}, - 1 - } - { - {2027, 2, "edge" "collidable"}, - {2026, 2}, - {2076, 2}, - 1 - } - { - {2028, 2, "edge" "collidable"}, - {2027, 2}, - {2076, 2}, - 1 - } - { - {2028, 2}, - {2076, 2, "edge" "collidable"}, - {2075, 2}, - 1 - } - { - {2029, 2, "edge" "collidable"}, - {2028, 2}, - {2075, 2}, - 1 - } - { - {2030, 2, "edge" "collidable"}, - {2029, 2}, - {2075, 2}, - 1 - } - { - {2031, 2, "edge" "collidable"}, - {2030, 2}, - {2075, 2}, - 1 - } - { - {2031, 2}, - {2075, 2, "edge" "collidable"}, - {2074, 2}, - 1 - } - { - {2032, 2, "edge" "collidable"}, - {2031, 2}, - {2074, 2}, - 1 - } - { - {2032, 2}, - {2074, 2, "edge" "collidable"}, - {2073, 2}, - 1 - } - { - {2032, 2}, - {2073, 2, "edge" "collidable"}, - {2072, 2}, - 1 - } - { - {2033, 2, "edge" "collidable"}, - {2032, 2}, - {2072, 2}, - 1 - } - { - {2033, 2}, - {2072, 2, "edge" "collidable"}, - {2071, 2}, - 1 - } - { - {2034, 2, "edge" "collidable"}, - {2033, 2}, - {2071, 2}, - 1 - } - { - {2035, 2, "edge" "collidable"}, - {2034, 2}, - {2071, 2}, - 1 - } - { - {2035, 2}, - {2071, 2, "edge" "collidable"}, - {2070, 2}, - 1 - } - { - {2036, 2, "edge" "collidable"}, - {2035, 2}, - {2070, 2}, - 1 - } - { - {2036, 2}, - {2070, 2, "edge" "collidable"}, - {2069, 2}, - 1 - } - { - {2037, 2, "edge" "collidable"}, - {2036, 2}, - {2069, 2}, - 1 - } - { - {2037, 2}, - {2069, 2, "edge" "collidable"}, - {2068, 2}, - 1 - } - { - {2038, 2, "edge" "collidable"}, - {2037, 2}, - {2068, 2}, - 1 - } - { - {2038, 2}, - {2068, 2, "edge" "collidable"}, - {2067, 2}, - 1 - } - { - {2039, 2, "edge" "collidable"}, - {2038, 2}, - {2067, 2}, - 1 - } - { - {2039, 2}, - {2067, 2, "edge" "collidable"}, - {2066, 2}, - 1 - } - { - {2040, 2, "edge" "collidable"}, - {2039, 2}, - {2066, 2}, - 1 - } - { - {2040, 2}, - {2066, 2, "edge" "collidable"}, - {2065, 2}, - 1 - } - { - {2041, 2, "edge" "collidable"}, - {2040, 2}, - {2065, 2}, - 1 - } - { - {2041, 2}, - {2065, 2, "edge" "collidable"}, - {2064, 2}, - 1 - } - { - {2042, 2, "edge" "collidable"}, - {2041, 2}, - {2064, 2}, - 1 - } - { - {2042, 2}, - {2064, 2, "edge" "collidable"}, - {2063, 2}, - 1 - } - { - {2043, 2, "edge" "collidable"}, - {2042, 2}, - {2063, 2}, - 1 - } - { - {2043, 2}, - {2063, 2, "edge" "collidable"}, - {2062, 2}, - 1 - } - { - {2044, 2, "edge" "collidable"}, - {2043, 2}, - {2062, 2}, - 1 - } - { - {2044, 2}, - {2062, 2}, - {2133, 2}, - 1 - } - { - {2133, 2}, - {2062, 2}, - {2134, 2, "edge" "collidable"}, - 1 - } - { - {2134, 2}, - {2062, 2, "edge" "collidable"}, - {2061, 2}, - 1 - } - { - {2045, 2, "edge" "collidable"}, - {2044, 2}, - {2132, 2}, - 1 - } - { - {2132, 2}, - {2044, 2}, - {2133, 2, "edge" "collidable"}, - 1 - } - { - {2135, 2, "edge" "collidable"}, - {2134, 2}, - {2061, 2}, - 1 - } - { - {2045, 2}, - {2132, 2, "edge" "collidable"}, - {2131, 2}, - 1 - } - { - {2136, 2, "edge" "collidable"}, - {2135, 2}, - {2061, 2}, - 1 - } - { - {2045, 2}, - {2131, 2, "edge" "collidable"}, - {2130, 2}, - 1 - } - { - {2136, 2}, - {2061, 2, "edge" "collidable"}, - {2060, 2}, - 1 - } - { - {2137, 2, "edge" "collidable"}, - {2136, 2}, - {2060, 2}, - 1 - } - { - {2046, 2, "edge" "collidable"}, - {2045, 2}, - {2130, 2}, - 1 - } - { - {2046, 2}, - {2130, 2, "edge" "collidable"}, - {2129, 2}, - 1 - } - { - {2138, 2, "edge" "collidable"}, - {2137, 2}, - {2060, 2}, - 1 - } - { - {2046, 2}, - {2129, 2, "edge" "collidable"}, - {2128, 2}, - 1 - } - { - {2138, 2}, - {2060, 2, "edge" "collidable"}, - {2059, 2}, - 1 - } - { - {2047, 2, "edge" "collidable"}, - {2046, 2}, - {2128, 2}, - 1 - } - { - {2115, 2, "edge" "collidable"}, - {2138, 2}, - {2059, 2}, - 1 - } - { - {2047, 2}, - {2128, 2, "edge" "collidable"}, - {2127, 2}, - 1 - } - { - {2115, 2}, - {2059, 2, "edge" "collidable"}, - {2058, 2}, - 1 - } - { - {2047, 2}, - {2127, 2, "edge" "collidable"}, - {2126, 2}, - 1 - } - { - {2048, 2, "edge" "collidable"}, - {2047, 2}, - {2126, 2}, - 1 - } - { - {2116, 2, "edge" "collidable"}, - {2115, 2}, - {2058, 2}, - 1 - } - { - {2048, 2}, - {2126, 2, "edge" "collidable"}, - {2125, 2}, - 1 - } - { - {2117, 2, "edge" "collidable"}, - {2116, 2}, - {2058, 2}, - 1 - } - { - {2048, 2}, - {2125, 2, "edge" "collidable"}, - {2124, 2}, - 1 - } - { - {2117, 2}, - {2058, 2, "edge" "collidable"}, - {2057, 2}, - 1 - } - { - {2118, 2, "edge" "collidable"}, - {2117, 2}, - {2057, 2}, - 1 - } - { - {2049, 2, "edge" "collidable"}, - {2048, 2}, - {2124, 2}, - 1 - } - { - {2049, 2}, - {2124, 2, "edge" "collidable"}, - {2123, 2}, - 1 - } - { - {2119, 2, "edge" "collidable"}, - {2118, 2}, - {2057, 2}, - 1 - } - { - {2049, 2}, - {2123, 2, "edge" "collidable"}, - {2122, 2}, - 1 - } - { - {2120, 2, "edge" "collidable"}, - {2119, 2}, - {2057, 2}, - 1 - } - { - {2049, 2}, - {2122, 2, "edge" "collidable"}, - {2121, 2}, - 1 - } - { - {2121, 2, "edge" "collidable"}, - {2120, 2}, - {2057, 2}, - 1 - } - { - {2049, 2}, - {2121, 2}, - {2057, 2}, - 1 - } - { - {2049, 2}, - {2057, 2, "edge" "collidable"}, - {2056, 2}, - 1 - } - { - {2050, 2, "edge" "collidable"}, - {2049, 2}, - {2056, 2}, - 1 - } - { - {2051, 2, "edge" "collidable"}, - {2050, 2}, - {2056, 2}, - 1 - } - { - {2051, 2}, - {2056, 2, "edge" "collidable"}, - {2055, 2}, - 1 - } - { - {2052, 2, "edge" "collidable"}, - {2051, 2}, - {2055, 2}, - 1 - } - { - {2052, 2}, - {2055, 2, "edge" "collidable"}, - {2054, 2}, - 1 - } - { - {2053, 2, "edge" "collidable"}, - {2052, 2}, - {2054, 2, "edge" "collidable"}, - 1 - } - { - {2162, 2, "edge" "collidable"}, - {2161, 2, "edge" "collidable"}, - {2160, 2}, - 1 - } - { - {2162, 2}, - {2160, 2, "edge" "collidable"}, - {2159, 2}, - 1 - } - { - {2163, 2, "edge" "collidable"}, - {2162, 2}, - {2159, 2}, - 1 - } - { - {2163, 2}, - {2159, 2, "edge" "collidable"}, - {2158, 2}, - 1 - } - { - {2140, 2, "edge" "collidable"}, - {2139, 2, "edge" "collidable"}, - {2169, 2}, - 1 - } - { - {2140, 2}, - {2169, 2, "edge" "collidable"}, - {2168, 2}, - 1 - } - { - {2164, 2, "edge" "collidable"}, - {2163, 2}, - {2158, 2}, - 1 - } - { - {2164, 2}, - {2158, 2, "edge" "collidable"}, - {2157, 2}, - 1 - } - { - {2164, 2}, - {2157, 2, "edge" "collidable"}, - {2156, 2}, - 1 - } - { - {2165, 2, "edge" "collidable"}, - {2164, 2}, - {2156, 2}, - 1 - } - { - {2165, 2}, - {2156, 2, "edge" "collidable"}, - {2155, 2}, - 1 - } - { - {2166, 2, "edge" "collidable"}, - {2165, 2}, - {2155, 2}, - 1 - } - { - {2166, 2}, - {2155, 2}, - {2148, 2}, - 1 - } - { - {2148, 2}, - {2155, 2}, - {2149, 2, "edge" "collidable"}, - 1 - } - { - {2149, 2}, - {2155, 2}, - {2150, 2, "edge" "collidable"}, - 1 - } - { - {2150, 2}, - {2155, 2}, - {2151, 2, "edge" "collidable"}, - 1 - } - { - {2151, 2}, - {2155, 2}, - {2152, 2, "edge" "collidable"}, - 1 - } - { - {2152, 2}, - {2155, 2}, - {2153, 2, "edge" "collidable"}, - 1 - } - { - {2153, 2}, - {2155, 2, "edge" "collidable"}, - {2154, 2, "edge" "collidable"}, - 1 - } - { - {2167, 2, "edge" "collidable"}, - {2166, 2}, - {2147, 2}, - 1 - } - { - {2147, 2}, - {2166, 2}, - {2148, 2, "edge" "collidable"}, - 1 - } - { - {2167, 2}, - {2147, 2, "edge" "collidable"}, - {2146, 2}, - 1 - } - { - {2167, 2}, - {2146, 2, "edge" "collidable"}, - {2145, 2}, - 1 - } - { - {2140, 2}, - {2168, 2, "edge" "collidable"}, - {2167, 2}, - 1 - } - { - {2140, 2}, - {2167, 2}, - {2144, 2}, - 1 - } - { - {2144, 2}, - {2167, 2}, - {2145, 2, "edge" "collidable"}, - 1 - } - { - {2140, 2}, - {2144, 2, "edge" "collidable"}, - {2143, 2}, - 1 - } - { - {2140, 2}, - {2143, 2, "edge" "collidable"}, - {2142, 2}, - 1 - } - { - {2140, 2}, - {2142, 2, "edge" "collidable"}, - {2141, 2, "edge" "collidable"}, - 1 - } - { - {1892, 2, "edge" "collidable"}, - {1891, 2, "edge" "collidable"}, - {1914, 2}, - 1 - } - { - {1892, 2}, - {1914, 2, "edge" "collidable"}, - {1913, 2}, - 1 - } - { - {1893, 2, "edge" "collidable"}, - {1892, 2}, - {1913, 2}, - 1 - } - { - {1893, 2}, - {1913, 2, "edge" "collidable"}, - {1912, 2}, - 1 - } - { - {1894, 2, "edge" "collidable"}, - {1893, 2}, - {1912, 2}, - 1 - } - { - {1894, 2}, - {1912, 2}, - {1915, 2}, - 1 - } - { - {1915, 2}, - {1912, 2}, - {1916, 2, "edge" "collidable"}, - 1 - } - { - {1916, 2}, - {1912, 2, "edge" "collidable"}, - {1911, 2}, - 1 - } - { - {1895, 2, "edge" "collidable"}, - {1894, 2}, - {1938, 2}, - 1 - } - { - {1938, 2}, - {1894, 2}, - {1915, 2, "edge" "collidable"}, - 1 - } - { - {1895, 2}, - {1938, 2, "edge" "collidable"}, - {1937, 2}, - 1 - } - { - {1917, 2, "edge" "collidable"}, - {1916, 2}, - {1911, 2}, - 1 - } - { - {1895, 2}, - {1937, 2, "edge" "collidable"}, - {1936, 2}, - 1 - } - { - {1918, 2, "edge" "collidable"}, - {1917, 2}, - {1911, 2}, - 1 - } - { - {1918, 2}, - {1911, 2, "edge" "collidable"}, - {1910, 2}, - 1 - } - { - {1896, 2, "edge" "collidable"}, - {1895, 2}, - {1936, 2}, - 1 - } - { - {1896, 2}, - {1936, 2, "edge" "collidable"}, - {1935, 2}, - 1 - } - { - {1919, 2, "edge" "collidable"}, - {1918, 2}, - {1910, 2}, - 1 - } - { - {1896, 2}, - {1935, 2, "edge" "collidable"}, - {1934, 2}, - 1 - } - { - {1920, 2, "edge" "collidable"}, - {1919, 2}, - {1910, 2}, - 1 - } - { - {1920, 2}, - {1910, 2, "edge" "collidable"}, - {1909, 2}, - 1 - } - { - {1897, 2, "edge" "collidable"}, - {1896, 2}, - {1934, 2}, - 1 - } - { - {1897, 2}, - {1934, 2, "edge" "collidable"}, - {1933, 2}, - 1 - } - { - {1921, 2, "edge" "collidable"}, - {1920, 2}, - {1909, 2}, - 1 - } - { - {1898, 2, "edge" "collidable"}, - {1897, 2}, - {1933, 2}, - 1 - } - { - {1898, 2}, - {1933, 2, "edge" "collidable"}, - {1932, 2}, - 1 - } - { - {1921, 2}, - {1909, 2, "edge" "collidable"}, - {1908, 2}, - 1 - } - { - {1922, 2, "edge" "collidable"}, - {1921, 2}, - {1908, 2}, - 1 - } - { - {1898, 2}, - {1932, 2, "edge" "collidable"}, - {1931, 2}, - 1 - } - { - {1923, 2, "edge" "collidable"}, - {1922, 2}, - {1908, 2}, - 1 - } - { - {1899, 2, "edge" "collidable"}, - {1898, 2}, - {1931, 2}, - 1 - } - { - {1923, 2}, - {1908, 2, "edge" "collidable"}, - {1907, 2}, - 1 - } - { - {1899, 2}, - {1931, 2, "edge" "collidable"}, - {1930, 2}, - 1 - } - { - {1924, 2, "edge" "collidable"}, - {1923, 2}, - {1907, 2}, - 1 - } - { - {1899, 2}, - {1930, 2, "edge" "collidable"}, - {1929, 2}, - 1 - } - { - {1925, 2, "edge" "collidable"}, - {1924, 2}, - {1907, 2}, - 1 - } - { - {1900, 2, "edge" "collidable"}, - {1899, 2}, - {1929, 2}, - 1 - } - { - {1925, 2}, - {1907, 2, "edge" "collidable"}, - {1906, 2}, - 1 - } - { - {1900, 2}, - {1929, 2, "edge" "collidable"}, - {1928, 2}, - 1 - } - { - {1926, 2, "edge" "collidable"}, - {1925, 2}, - {1906, 2}, - 1 - } - { - {1900, 2}, - {1928, 2, "edge" "collidable"}, - {1927, 2}, - 1 - } - { - {1927, 2, "edge" "collidable"}, - {1926, 2}, - {1906, 2}, - 1 - } - { - {1900, 2}, - {1927, 2}, - {1906, 2}, - 1 - } - { - {1901, 2, "edge" "collidable"}, - {1900, 2}, - {1906, 2}, - 1 - } - { - {1901, 2}, - {1906, 2, "edge" "collidable"}, - {1905, 2}, - 1 - } - { - {1902, 2, "edge" "collidable"}, - {1901, 2}, - {1905, 2}, - 1 - } - { - {1902, 2}, - {1905, 2, "edge" "collidable"}, - {1904, 2}, - 1 - } - { - {1903, 2, "edge" "collidable"}, - {1902, 2}, - {1904, 2, "edge" "collidable"}, - 1 - } - # Mesh "Circle" - { - {2208, 2}, - {2172, 2}, - {2197, 2}, - 2 - } - { - {2215, 2}, - {2192, 2, "edge" "collidable"}, - {2198, 2}, - 2 - } - { - {2190, 2, "edge" "collidable"}, - {2208, 2}, - {2197, 2, "edge" "collidable"}, - 2 - } - { - {2204, 2}, - {2218, 2}, - {2171, 2}, - 2 - } - { - {2215, 2}, - {2198, 2, "edge" "collidable"}, - {2214, 2}, - 2 - } - { - {2184, 2}, - {2192, 2}, - {2215, 2, "edge" "collidable"}, - 2 - } - { - {2182, 2, "edge" "collidable"}, - {2203, 2}, - {2175, 2, "edge" "collidable"}, - 2 - } - { - {2180, 2, "edge" "collidable"}, - {2207, 2}, - {2188, 2, "edge" "collidable"}, - 2 - } - { - {2177, 2}, - {2215, 2}, - {2214, 2}, - 2 - } - { - {2223, 2, "edge" "collidable"}, - {2189, 2, "edge" "collidable"}, - {2205, 2}, - 2 - } - { - {2174, 2}, - {2210, 2, "edge" "collidable"}, - {2170, 2}, - 2 - } - { - {2218, 2}, - {2204, 2, "edge" "collidable"}, - {2209, 2}, - 2 - } - { - {2197, 2}, - {2173, 2, "edge" "collidable"}, - {2206, 2, "edge" "collidable"}, - 2 - } - { - {2203, 2}, - {2199, 2, "edge" "collidable"}, - {2193, 2}, - 2 - } - { - {2197, 2}, - {2172, 2, "edge" "collidable"}, - {2173, 2}, - 2 - } - { - {2202, 2}, - {2200, 2, "edge" "collidable"}, - {2183, 2}, - 2 - } - { - {2207, 2}, - {2183, 2, "edge" "collidable"}, - {2201, 2}, - 2 - } - { - {2221, 2}, - {2205, 2, "edge" "collidable"}, - {2176, 2}, - 2 - } - { - {2219, 2}, - {2174, 2}, - {2218, 2, "edge" "collidable"}, - 2 - } - { - {2187, 2, "edge" "collidable"}, - {2221, 2}, - {2176, 2}, - 2 - } - { - {2207, 2}, - {2210, 2}, - {2174, 2}, - 2 - } - { - {2218, 2}, - {2174, 2}, - {2171, 2}, - 2 - } - { - {2203, 2}, - {2193, 2}, - {2202, 2}, - 2 - } - { - {2176, 2, "edge" "collidable"}, - {2213, 2, "edge" "collidable"}, - {2211, 2}, - 2 - } - { - {2203, 2, "edge" "collidable"}, - {2177, 2}, - {2214, 2}, - 2 - } - { - {2207, 2}, - {2202, 2}, - {2183, 2}, - 2 - } - { - {2203, 2}, - {2202, 2, "edge" "collidable"}, - {2175, 2}, - 2 - } - { - {2176, 2}, - {2211, 2, "edge" "collidable"}, - {2195, 2}, - 2 - } - { - {2174, 2}, - {2170, 2, "edge" "collidable"}, - {2171, 2}, - 2 - } - { - {2187, 2}, - {2176, 2}, - {2195, 2}, - 2 - } - { - {2187, 2}, - {2195, 2}, - {2217, 2}, - 2 - } - { - {2203, 2}, - {2214, 2, "edge" "collidable"}, - {2199, 2}, - 2 - } - { - {2178, 2, "edge" "collidable"}, - {2218, 2}, - {2209, 2, "edge" "collidable"}, - 2 - } - { - {2222, 2, "edge" "collidable"}, - {2215, 2}, - {2177, 2, "edge" "collidable"}, - 2 - } - { - {2207, 2}, - {2174, 2, "edge" "collidable"}, - {2188, 2}, - 2 - } - { - {2207, 2}, - {2201, 2, "edge" "collidable"}, - {2210, 2}, - 2 - } - { - {2208, 2, "edge" "collidable"}, - {2204, 2}, - {2171, 2}, - 2 - } - { - {2187, 2}, - {2217, 2, "edge" "collidable"}, - {2220, 2}, - 2 - } - { - {2195, 2, "edge" "collidable"}, - {2212, 2, "edge" "collidable"}, - {2186, 2}, - 2 - } - { - {2217, 2}, - {2195, 2}, - {2186, 2}, - 2 - } - { - {2185, 2, "edge" "collidable"}, - {2217, 2}, - {2186, 2}, - 2 - } - { - {2179, 2, "edge" "collidable"}, - {2174, 2}, - {2219, 2, "edge" "collidable"}, - 2 - } - { - {2196, 2}, - {2202, 2}, - {2207, 2, "edge" "collidable"}, - 2 - } - { - {2202, 2}, - {2193, 2, "edge" "collidable"}, - {2200, 2}, - 2 - } - { - {2185, 2}, - {2186, 2, "edge" "collidable"}, - {2191, 2}, - 2 - } - { - {2208, 2}, - {2171, 2, "edge" "collidable"}, - {2172, 2}, - 2 - } - { - {2194, 2, "edge" "collidable"}, - {2187, 2}, - {2220, 2, "edge" "collidable"}, - 2 - } - { - {2216, 2, "edge" "collidable"}, - {2185, 2}, - {2184, 2, "edge" "collidable"}, - 2 - } - { - {2184, 2}, - {2185, 2}, - {2191, 2}, - 2 - } - { - {2181, 2, "edge" "collidable"}, - {2202, 2}, - {2196, 2, "edge" "collidable"}, - 2 - } - { - {2184, 2}, - {2191, 2, "edge" "collidable"}, - {2192, 2}, - 2 - } - { - {2205, 2}, - {2221, 2, "edge" "collidable"}, - {2223, 2}, - 2 - } + # Mesh "Curve" + { + {1, 2, "edge" "collidable"}, + {0, 2, "edge" "collidable"}, + {40, 2}, + 1 + } + { + {40, 2, "edge" "collidable"}, + {41, 2}, + {1, 2}, + 1 + } + { + {2, 2, "edge" "collidable"}, + {1, 2}, + {41, 2}, + 1 + } + { + {41, 2, "edge" "collidable"}, + {42, 2}, + {2, 2}, + 1 + } + { + {3, 2, "edge" "collidable"}, + {2, 2}, + {42, 2}, + 1 + } + { + {42, 2, "edge" "collidable"}, + {43, 2}, + {3, 2}, + 1 + } + { + {4, 2, "edge" "collidable"}, + {3, 2}, + {43, 2}, + 1 + } + { + {43, 2, "edge" "collidable"}, + {44, 2}, + {4, 2}, + 1 + } + { + {5, 2, "edge" "collidable"}, + {4, 2}, + {44, 2}, + 1 + } + { + {44, 2, "edge" "collidable"}, + {45, 2}, + {5, 2}, + 1 + } + { + {6, 2, "edge" "collidable"}, + {5, 2}, + {45, 2}, + 1 + } + { + {45, 2, "edge" "collidable"}, + {46, 2}, + {6, 2}, + 1 + } + { + {7, 2, "edge" "collidable"}, + {6, 2}, + {46, 2}, + 1 + } + { + {46, 2, "edge" "collidable"}, + {47, 2}, + {7, 2}, + 1 + } + { + {8, 2, "edge" "collidable"}, + {7, 2}, + {47, 2}, + 1 + } + { + {47, 2, "edge" "collidable"}, + {48, 2}, + {8, 2}, + 1 + } + { + {9, 2, "edge" "collidable"}, + {8, 2}, + {48, 2}, + 1 + } + { + {48, 2, "edge" "collidable"}, + {49, 2}, + {9, 2}, + 1 + } + { + {10, 2, "edge" "collidable"}, + {9, 2}, + {49, 2}, + 1 + } + { + {49, 2, "edge" "collidable"}, + {50, 2}, + {10, 2}, + 1 + } + { + {11, 2, "edge" "collidable"}, + {10, 2}, + {50, 2}, + 1 + } + { + {50, 2, "edge" "collidable"}, + {51, 2}, + {11, 2}, + 1 + } + { + {12, 2, "edge" "collidable"}, + {11, 2}, + {51, 2}, + 1 + } + { + {51, 2, "edge" "collidable"}, + {52, 2}, + {12, 2}, + 1 + } + { + {13, 2, "edge" "collidable"}, + {12, 2}, + {52, 2}, + 1 + } + { + {52, 2, "edge" "collidable"}, + {53, 2}, + {13, 2}, + 1 + } + { + {14, 2, "edge" "collidable"}, + {13, 2}, + {53, 2}, + 1 + } + { + {53, 2, "edge" "collidable"}, + {54, 2}, + {14, 2}, + 1 + } + { + {15, 2, "edge" "collidable"}, + {14, 2}, + {54, 2}, + 1 + } + { + {54, 2, "edge" "collidable"}, + {55, 2}, + {15, 2}, + 1 + } + { + {16, 2, "edge" "collidable"}, + {15, 2}, + {55, 2}, + 1 + } + { + {55, 2, "edge" "collidable"}, + {56, 2}, + {16, 2}, + 1 + } + { + {17, 2, "edge" "collidable"}, + {16, 2}, + {56, 2}, + 1 + } + { + {56, 2, "edge" "collidable"}, + {57, 2}, + {17, 2}, + 1 + } + { + {18, 2, "edge" "collidable"}, + {17, 2}, + {57, 2}, + 1 + } + { + {57, 2, "edge" "collidable"}, + {58, 2}, + {18, 2}, + 1 + } + { + {19, 2, "edge" "collidable"}, + {18, 2}, + {58, 2}, + 1 + } + { + {58, 2, "edge" "collidable"}, + {59, 2}, + {19, 2}, + 1 + } + { + {20, 2, "edge" "collidable"}, + {19, 2}, + {59, 2}, + 1 + } + { + {59, 2, "edge" "collidable"}, + {60, 2}, + {20, 2}, + 1 + } + { + {21, 2, "edge" "collidable"}, + {20, 2}, + {60, 2}, + 1 + } + { + {60, 2, "edge" "collidable"}, + {61, 2}, + {21, 2}, + 1 + } + { + {22, 2, "edge" "collidable"}, + {21, 2}, + {61, 2}, + 1 + } + { + {61, 2, "edge" "collidable"}, + {62, 2}, + {22, 2}, + 1 + } + { + {23, 2, "edge" "collidable"}, + {22, 2}, + {62, 2}, + 1 + } + { + {62, 2, "edge" "collidable"}, + {63, 2}, + {23, 2}, + 1 + } + { + {24, 2, "edge" "collidable"}, + {23, 2}, + {63, 2}, + 1 + } + { + {63, 2, "edge" "collidable"}, + {64, 2}, + {24, 2}, + 1 + } + { + {25, 2, "edge" "collidable"}, + {24, 2}, + {64, 2}, + 1 + } + { + {64, 2, "edge" "collidable"}, + {65, 2}, + {25, 2}, + 1 + } + { + {26, 2, "edge" "collidable"}, + {25, 2}, + {65, 2}, + 1 + } + { + {65, 2, "edge" "collidable"}, + {66, 2}, + {26, 2}, + 1 + } + { + {27, 2, "edge" "collidable"}, + {26, 2}, + {66, 2}, + 1 + } + { + {66, 2, "edge" "collidable"}, + {67, 2}, + {27, 2}, + 1 + } + { + {28, 2, "edge" "collidable"}, + {27, 2}, + {67, 2}, + 1 + } + { + {67, 2, "edge" "collidable"}, + {68, 2}, + {28, 2}, + 1 + } + { + {29, 2, "edge" "collidable"}, + {28, 2}, + {68, 2}, + 1 + } + { + {68, 2, "edge" "collidable"}, + {69, 2}, + {29, 2}, + 1 + } + { + {30, 2, "edge" "collidable"}, + {29, 2}, + {69, 2}, + 1 + } + { + {69, 2, "edge" "collidable"}, + {70, 2}, + {30, 2}, + 1 + } + { + {31, 2, "edge" "collidable"}, + {30, 2}, + {70, 2}, + 1 + } + { + {70, 2, "edge" "collidable"}, + {71, 2}, + {31, 2}, + 1 + } + { + {32, 2, "edge" "collidable"}, + {31, 2}, + {71, 2}, + 1 + } + { + {71, 2, "edge" "collidable"}, + {72, 2}, + {32, 2}, + 1 + } + { + {33, 2, "edge" "collidable"}, + {32, 2}, + {72, 2}, + 1 + } + { + {72, 2, "edge" "collidable"}, + {73, 2}, + {33, 2}, + 1 + } + { + {34, 2, "edge" "collidable"}, + {33, 2}, + {73, 2}, + 1 + } + { + {73, 2, "edge" "collidable"}, + {74, 2}, + {34, 2}, + 1 + } + { + {35, 2, "edge" "collidable"}, + {34, 2}, + {74, 2}, + 1 + } + { + {74, 2, "edge" "collidable"}, + {75, 2}, + {35, 2}, + 1 + } + { + {36, 2, "edge" "collidable"}, + {35, 2}, + {75, 2}, + 1 + } + { + {75, 2, "edge" "collidable"}, + {76, 2}, + {36, 2}, + 1 + } + { + {37, 2, "edge" "collidable"}, + {36, 2}, + {76, 2}, + 1 + } + { + {76, 2, "edge" "collidable"}, + {77, 2}, + {37, 2}, + 1 + } + { + {38, 2, "edge" "collidable"}, + {37, 2}, + {77, 2}, + 1 + } + { + {77, 2, "edge" "collidable"}, + {78, 2}, + {38, 2}, + 1 + } + { + {39, 2, "edge" "collidable"}, + {38, 2}, + {78, 2}, + 1 + } + { + {78, 2, "edge" "collidable"}, + {79, 2, "edge" "collidable"}, + {39, 2}, + 1 + } + # Mesh "Curve.001" + { + {560, 2}, + {526, 2, "edge" "collidable"}, + {278, 2}, + 0 + } + { + {456, 2}, + {468, 2}, + {81, 2}, + 0 + } + { + {468, 2}, + {80, 2, "edge" "collidable"}, + {81, 2}, + 0 + } + { + {347, 2}, + {548, 2}, + {115, 2}, + 0 + } + { + {232, 2}, + {121, 2}, + {600, 2}, + 0 + } + { + {401, 2}, + {456, 2}, + {83, 2}, + 0 + } + { + {456, 2}, + {81, 2, "edge" "collidable"}, + {83, 2}, + 0 + } + { + {592, 2}, + {127, 2}, + {353, 2}, + 0 + } + { + {522, 2}, + {514, 2}, + {428, 2}, + 0 + } + { + {361, 2}, + {401, 2}, + {85, 2}, + 0 + } + { + {401, 2}, + {83, 2, "edge" "collidable"}, + {85, 2}, + 0 + } + { + {305, 2}, + {361, 2}, + {85, 2}, + 0 + } + { + {519, 2}, + {304, 2, "edge" "collidable"}, + {500, 2}, + 0 + } + { + {144, 2}, + {305, 2}, + {87, 2}, + 0 + } + { + {305, 2}, + {85, 2, "edge" "collidable"}, + {87, 2}, + 0 + } + { + {242, 2}, + {144, 2}, + {88, 2}, + 0 + } + { + {144, 2}, + {87, 2, "edge" "collidable"}, + {88, 2}, + 0 + } + { + {136, 2}, + {242, 2}, + {89, 2}, + 0 + } + { + {242, 2}, + {88, 2, "edge" "collidable"}, + {89, 2}, + 0 + } + { + {228, 2}, + {136, 2}, + {90, 2}, + 0 + } + { + {136, 2}, + {89, 2, "edge" "collidable"}, + {90, 2}, + 0 + } + { + {171, 2}, + {228, 2}, + {90, 2}, + 0 + } + { + {183, 2}, + {82, 2, "edge" "collidable"}, + {589, 2}, + 0 + } + { + {494, 2}, + {171, 2}, + {92, 2}, + 0 + } + { + {171, 2}, + {90, 2, "edge" "collidable"}, + {92, 2}, + 0 + } + { + {266, 2}, + {261, 2, "edge" "collidable"}, + {225, 2}, + 0 + } + { + {381, 2}, + {592, 2}, + {445, 2}, + 0 + } + { + {576, 2}, + {494, 2}, + {94, 2}, + 0 + } + { + {494, 2}, + {92, 2, "edge" "collidable"}, + {94, 2}, + 0 + } + { + {202, 2}, + {553, 2}, + {93, 2}, + 0 + } + { + {274, 2}, + {362, 2, "edge" "collidable"}, + {364, 2}, + 0 + } + { + {342, 2}, + {512, 2, "edge" "collidable"}, + {516, 2}, + 0 + } + { + {539, 2}, + {293, 2}, + {480, 2}, + 0 + } + { + {440, 2}, + {179, 2, "edge" "collidable"}, + {380, 2}, + 0 + } + { + {341, 2}, + {119, 2, "edge" "collidable"}, + {427, 2}, + 0 + } + { + {191, 2}, + {376, 2, "edge" "collidable"}, + {230, 2}, + 0 + } + { + {590, 2}, + {382, 2, "edge" "collidable"}, + {82, 2}, + 0 + } + { + {629, 2}, + {576, 2}, + {99, 2}, + 0 + } + { + {576, 2}, + {94, 2, "edge" "collidable"}, + {99, 2}, + 0 + } + { + {519, 2}, + {324, 2}, + {304, 2}, + 0 + } + { + {341, 2}, + {497, 2}, + {119, 2}, + 0 + } + { + {489, 2}, + {465, 2, "edge" "collidable"}, + {467, 2}, + 0 + } + { + {336, 2}, + {188, 2, "edge" "collidable"}, + {613, 2}, + 0 + } + { + {104, 2}, + {411, 2}, + {534, 2}, + 0 + } + { + {169, 2}, + {503, 2}, + {167, 2}, + 0 + } + { + {106, 2}, + {629, 2}, + {103, 2}, + 0 + } + { + {629, 2}, + {99, 2, "edge" "collidable"}, + {103, 2}, + 0 + } + { + {177, 2}, + {607, 2}, + {573, 2}, + 0 + } + { + {618, 2}, + {367, 2}, + {619, 2}, + 0 + } + { + {409, 2}, + {106, 2}, + {105, 2}, + 0 + } + { + {106, 2}, + {103, 2, "edge" "collidable"}, + {105, 2}, + 0 + } + { + {160, 2}, + {377, 2}, + {505, 2}, + 0 + } + { + {318, 2}, + {194, 2, "edge" "collidable"}, + {282, 2}, + 0 + } + { + {444, 2}, + {409, 2}, + {107, 2}, + 0 + } + { + {409, 2}, + {105, 2, "edge" "collidable"}, + {107, 2}, + 0 + } + { + {477, 2}, + {489, 2}, + {467, 2}, + 0 + } + { + {560, 2}, + {271, 2}, + {526, 2}, + 0 + } + { + {309, 2}, + {444, 2}, + {109, 2}, + 0 + } + { + {444, 2}, + {107, 2, "edge" "collidable"}, + {109, 2}, + 0 + } + { + {176, 2}, + {434, 2, "edge" "collidable"}, + {442, 2}, + 0 + } + { + {224, 2}, + {211, 2, "edge" "collidable"}, + {139, 2}, + 0 + } + { + {419, 2}, + {309, 2}, + {111, 2}, + 0 + } + { + {309, 2}, + {109, 2, "edge" "collidable"}, + {111, 2}, + 0 + } + { + {440, 2}, + {195, 2}, + {179, 2}, + 0 + } + { + {223, 2}, + {403, 2, "edge" "collidable"}, + {407, 2}, + 0 + } + { + {436, 2}, + {419, 2}, + {113, 2}, + 0 + } + { + {419, 2}, + {111, 2, "edge" "collidable"}, + {113, 2}, + 0 + } + { + {384, 2}, + {436, 2}, + {114, 2}, + 0 + } + { + {436, 2}, + {113, 2, "edge" "collidable"}, + {114, 2}, + 0 + } + { + {288, 2}, + {322, 2}, + {204, 2}, + 0 + } + { + {100, 2}, + {521, 2}, + {328, 2}, + 0 + } + { + {371, 2}, + {384, 2}, + {116, 2}, + 0 + } + { + {384, 2}, + {114, 2, "edge" "collidable"}, + {116, 2}, + 0 + } + { + {547, 2}, + {442, 2, "edge" "collidable"}, + {451, 2}, + 0 + } + { + {238, 2}, + {364, 2, "edge" "collidable"}, + {366, 2}, + 0 + } + { + {297, 2}, + {371, 2}, + {118, 2}, + 0 + } + { + {371, 2}, + {116, 2, "edge" "collidable"}, + {118, 2}, + 0 + } + { + {293, 2}, + {476, 2, "edge" "collidable"}, + {480, 2}, + 0 + } + { + {232, 2}, + {600, 2, "edge" "collidable"}, + {604, 2}, + 0 + } + { + {518, 2}, + {297, 2}, + {120, 2}, + 0 + } + { + {297, 2}, + {118, 2, "edge" "collidable"}, + {120, 2}, + 0 + } + { + {187, 2}, + {546, 2, "edge" "collidable"}, + {551, 2}, + 0 + } + { + {238, 2}, + {274, 2}, + {364, 2}, + 0 + } + { + {607, 2}, + {570, 2, "edge" "collidable"}, + {573, 2}, + 0 + } + { + {326, 2}, + {283, 2}, + {391, 2}, + 0 + } + { + {580, 2}, + {591, 2, "edge" "collidable"}, + {595, 2}, + 0 + } + { + {417, 2}, + {172, 2}, + {220, 2}, + 0 + } + { + {330, 2}, + {518, 2}, + {124, 2}, + 0 + } + { + {518, 2}, + {120, 2, "edge" "collidable"}, + {124, 2}, + 0 + } + { + {121, 2}, + {595, 2, "edge" "collidable"}, + {600, 2}, + 0 + } + { + {437, 2}, + {545, 2}, + {296, 2}, + 0 + } + { + {389, 2}, + {542, 2, "edge" "collidable"}, + {546, 2}, + 0 + } + { + {396, 2}, + {413, 2}, + {321, 2}, + 0 + } + { + {233, 2}, + {237, 2, "edge" "collidable"}, + {471, 2}, + 0 + } + { + {224, 2}, + {139, 2}, + {334, 2}, + 0 + } + { + {142, 2}, + {330, 2}, + {128, 2}, + 0 + } + { + {330, 2}, + {124, 2, "edge" "collidable"}, + {128, 2}, + 0 + } + { + {195, 2}, + {151, 2, "edge" "collidable"}, + {179, 2}, + 0 + } + { + {292, 2}, + {157, 2}, + {609, 2}, + 0 + } + { + {531, 2}, + {244, 2, "edge" "collidable"}, + {483, 2}, + 0 + } + { + {172, 2}, + {225, 2, "edge" "collidable"}, + {220, 2}, + 0 + } + { + {102, 2}, + {342, 2}, + {516, 2}, + 0 + } + { + {187, 2}, + {389, 2}, + {546, 2}, + 0 + } + { + {349, 2}, + {481, 2}, + {527, 2}, + 0 + } + { + {402, 2}, + {450, 2}, + {258, 2}, + 0 + } + { + {574, 2}, + {142, 2}, + {133, 2}, + 0 + } + { + {142, 2}, + {128, 2, "edge" "collidable"}, + {133, 2}, + 0 + } + { + {515, 2}, + {618, 2}, + {621, 2}, + 0 + } + { + {521, 2}, + {372, 2, "edge" "collidable"}, + {328, 2}, + 0 + } + { + {192, 2}, + {487, 2}, + {568, 2}, + 0 + } + { + {292, 2}, + {609, 2, "edge" "collidable"}, + {596, 2}, + 0 + } + { + {163, 2}, + {493, 2}, + {608, 2}, + 0 + } + { + {571, 2}, + {574, 2}, + {137, 2}, + 0 + } + { + {574, 2}, + {133, 2, "edge" "collidable"}, + {137, 2}, + 0 + } + { + {561, 2}, + {623, 2, "edge" "collidable"}, + {627, 2}, + 0 + } + { + {522, 2}, + {428, 2, "edge" "collidable"}, + {434, 2}, + 0 + } + { + {346, 2}, + {571, 2}, + {137, 2}, + 0 + } + { + {271, 2}, + {101, 2}, + {572, 2}, + 0 + } + { + {264, 2}, + {617, 2, "edge" "collidable"}, + {564, 2}, + 0 + } + { + {628, 2}, + {223, 2}, + {407, 2}, + 0 + } + { + {363, 2}, + {346, 2}, + {141, 2}, + 0 + } + { + {346, 2}, + {137, 2, "edge" "collidable"}, + {141, 2}, + 0 + } + { + {322, 2}, + {427, 2, "edge" "collidable"}, + {204, 2}, + 0 + } + { + {481, 2}, + {533, 2}, + {524, 2}, + 0 + } + { + {463, 2}, + {363, 2}, + {143, 2}, + 0 + } + { + {363, 2}, + {141, 2, "edge" "collidable"}, + {143, 2}, + 0 + } + { + {487, 2}, + {566, 2, "edge" "collidable"}, + {568, 2}, + 0 + } + { + {306, 2}, + {216, 2, "edge" "collidable"}, + {313, 2}, + 0 + } + { + {620, 2}, + {463, 2}, + {145, 2}, + 0 + } + { + {463, 2}, + {143, 2, "edge" "collidable"}, + {145, 2}, + 0 + } + { + {122, 2}, + {318, 2}, + {282, 2}, + 0 + } + { + {497, 2}, + {483, 2, "edge" "collidable"}, + {119, 2}, + 0 + } + { + {97, 2}, + {551, 2, "edge" "collidable"}, + {555, 2}, + 0 + } + { + {521, 2}, + {153, 2}, + {372, 2}, + 0 + } + { + {248, 2}, + {620, 2}, + {148, 2}, + 0 + } + { + {620, 2}, + {145, 2, "edge" "collidable"}, + {148, 2}, + 0 + } + { + {108, 2}, + {547, 2}, + {451, 2}, + 0 + } + { + {355, 2}, + {381, 2}, + {189, 2}, + 0 + } + { + {246, 2}, + {248, 2}, + {150, 2}, + 0 + } + { + {248, 2}, + {148, 2, "edge" "collidable"}, + {150, 2}, + 0 + } + { + {489, 2}, + {482, 2}, + {465, 2}, + 0 + } + { + {418, 2}, + {433, 2, "edge" "collidable"}, + {461, 2}, + 0 + } + { + {317, 2}, + {246, 2}, + {152, 2}, + 0 + } + { + {246, 2}, + {150, 2, "edge" "collidable"}, + {152, 2}, + 0 + } + { + {470, 2}, + {314, 2, "edge" "collidable"}, + {405, 2}, + 0 + } + { + {160, 2}, + {505, 2, "edge" "collidable"}, + {512, 2}, + 0 + } + { + {563, 2}, + {317, 2}, + {154, 2}, + 0 + } + { + {317, 2}, + {152, 2, "edge" "collidable"}, + {154, 2}, + 0 + } + { + {481, 2}, + {524, 2, "edge" "collidable"}, + {527, 2}, + 0 + } + { + {475, 2}, + {310, 2}, + {562, 2}, + 0 + } + { + {569, 2}, + {563, 2}, + {156, 2}, + 0 + } + { + {563, 2}, + {154, 2, "edge" "collidable"}, + {156, 2}, + 0 + } + { + {601, 2}, + {631, 2, "edge" "collidable"}, + {447, 2}, + 0 + } + { + {388, 2}, + {554, 2}, + {495, 2}, + 0 + } + { + {206, 2}, + {569, 2}, + {158, 2}, + 0 + } + { + {569, 2}, + {156, 2, "edge" "collidable"}, + {158, 2}, + 0 + } + { + {354, 2}, + {180, 2}, + {577, 2}, + 0 + } + { + {556, 2}, + {561, 2}, + {627, 2}, + 0 + } + { + {416, 2}, + {206, 2}, + {158, 2}, + 0 + } + { + {511, 2}, + {149, 2}, + {392, 2}, + 0 + } + { + {493, 2}, + {604, 2, "edge" "collidable"}, + {608, 2}, + 0 + } + { + {342, 2}, + {160, 2}, + {512, 2}, + 0 + } + { + {250, 2}, + {416, 2}, + {162, 2}, + 0 + } + { + {416, 2}, + {158, 2, "edge" "collidable"}, + {162, 2}, + 0 + } + { + {329, 2}, + {135, 2, "edge" "collidable"}, + {188, 2}, + 0 + } + { + {324, 2}, + {347, 2}, + {557, 2}, + 0 + } + { + {424, 2}, + {233, 2}, + {471, 2}, + 0 + } + { + {127, 2}, + {230, 2, "edge" "collidable"}, + {353, 2}, + 0 + } + { + {322, 2}, + {341, 2}, + {427, 2}, + 0 + } + { + {177, 2}, + {573, 2, "edge" "collidable"}, + {575, 2}, + 0 + } + { + {155, 2}, + {250, 2}, + {166, 2}, + 0 + } + { + {250, 2}, + {162, 2, "edge" "collidable"}, + {166, 2}, + 0 + } + { + {406, 2}, + {282, 2}, + {233, 2}, + 0 + } + { + {281, 2}, + {415, 2, "edge" "collidable"}, + {423, 2}, + 0 + } + { + {310, 2}, + {499, 2}, + {559, 2}, + 0 + } + { + {357, 2}, + {529, 2, "edge" "collidable"}, + {532, 2}, + 0 + } + { + {561, 2}, + {515, 2}, + {623, 2}, + 0 + } + { + {597, 2}, + {588, 2}, + {537, 2}, + 0 + } + { + {134, 2}, + {155, 2}, + {170, 2}, + 0 + } + { + {155, 2}, + {166, 2, "edge" "collidable"}, + {170, 2}, + 0 + } + { + {367, 2}, + {616, 2, "edge" "collidable"}, + {619, 2}, + 0 + } + { + {418, 2}, + {227, 2}, + {433, 2}, + 0 + } + { + {275, 2}, + {354, 2}, + {579, 2}, + 0 + } + { + {101, 2}, + {385, 2, "edge" "collidable"}, + {572, 2}, + 0 + } + { + {359, 2}, + {338, 2, "edge" "collidable"}, + {528, 2}, + 0 + } + { + {134, 2}, + {170, 2, "edge" "collidable"}, + {174, 2}, + 0 + } + { + {100, 2}, + {328, 2, "edge" "collidable"}, + {147, 2}, + 0 + } + { + {265, 2}, + {484, 2, "edge" "collidable"}, + {488, 2}, + 0 + } + { + {299, 2}, + {424, 2}, + {325, 2}, + 0 + } + { + {470, 2}, + {552, 2}, + {314, 2}, + 0 + } + { + {554, 2}, + {440, 2}, + {380, 2}, + 0 + } + { + {545, 2}, + {509, 2}, + {453, 2}, + 0 + } + { + {134, 2}, + {174, 2, "edge" "collidable"}, + {178, 2}, + 0 + } + { + {487, 2}, + {475, 2}, + {566, 2}, + 0 + } + { + {588, 2}, + {262, 2, "edge" "collidable"}, + {537, 2}, + 0 + } + { + {455, 2}, + {602, 2, "edge" "collidable"}, + {117, 2}, + 0 + } + { + {379, 2}, + {528, 2, "edge" "collidable"}, + {565, 2}, + 0 + } + { + {127, 2}, + {191, 2}, + {230, 2}, + 0 + } + { + {102, 2}, + {516, 2, "edge" "collidable"}, + {520, 2}, + 0 + } + { + {293, 2}, + {351, 2}, + {476, 2}, + 0 + } + { + {274, 2}, + {473, 2}, + {362, 2}, + 0 + } + { + {157, 2}, + {387, 2, "edge" "collidable"}, + {609, 2}, + 0 + } + { + {452, 2}, + {275, 2}, + {583, 2}, + 0 + } + { + {210, 2}, + {613, 2, "edge" "collidable"}, + {394, 2}, + 0 + } + { + {291, 2}, + {530, 2, "edge" "collidable"}, + {438, 2}, + 0 + } + { + {218, 2}, + {492, 2, "edge" "collidable"}, + {496, 2}, + 0 + } + { + {514, 2}, + {423, 2, "edge" "collidable"}, + {428, 2}, + 0 + } + { + {588, 2}, + {269, 2}, + {262, 2}, + 0 + } + { + {511, 2}, + {446, 2, "edge" "collidable"}, + {149, 2}, + 0 + } + { + {332, 2}, + {163, 2}, + {610, 2}, + 0 + } + { + {553, 2}, + {219, 2, "edge" "collidable"}, + {93, 2}, + 0 + } + { + {196, 2}, + {326, 2}, + {395, 2}, + 0 + } + { + {422, 2}, + {517, 2, "edge" "collidable"}, + {194, 2}, + 0 + } + { + {164, 2}, + {478, 2}, + {333, 2}, + 0 + } + { + {508, 2}, + {397, 2, "edge" "collidable"}, + {578, 2}, + 0 + } + { + {388, 2}, + {495, 2, "edge" "collidable"}, + {543, 2}, + 0 + } + { + {215, 2}, + {437, 2}, + {486, 2}, + 0 + } + { + {435, 2}, + {210, 2}, + {394, 2}, + 0 + } + { + {191, 2}, + {485, 2}, + {376, 2}, + 0 + } + { + {295, 2}, + {100, 2}, + {147, 2}, + 0 + } + { + {192, 2}, + {568, 2, "edge" "collidable"}, + {570, 2}, + 0 + } + { + {184, 2}, + {86, 2}, + {193, 2}, + 0 + } + { + {86, 2}, + {190, 2, "edge" "collidable"}, + {193, 2}, + 0 + } + { + {326, 2}, + {391, 2, "edge" "collidable"}, + {395, 2}, + 0 + } + { + {449, 2}, + {417, 2}, + {220, 2}, + 0 + } + { + {163, 2}, + {608, 2, "edge" "collidable"}, + {610, 2}, + 0 + } + { + {548, 2}, + {161, 2, "edge" "collidable"}, + {115, 2}, + 0 + } + { + {452, 2}, + {583, 2, "edge" "collidable"}, + {587, 2}, + 0 + } + { + {222, 2}, + {292, 2}, + {596, 2}, + 0 + } + { + {252, 2}, + {184, 2}, + {197, 2}, + 0 + } + { + {184, 2}, + {193, 2, "edge" "collidable"}, + {197, 2}, + 0 + } + { + {180, 2}, + {177, 2}, + {575, 2}, + 0 + } + { + {132, 2}, + {91, 2, "edge" "collidable"}, + {400, 2}, + 0 + } + { + {96, 2}, + {252, 2}, + {197, 2}, + 0 + } + { + {525, 2}, + {299, 2}, + {345, 2}, + 0 + } + { + {459, 2}, + {490, 2, "edge" "collidable"}, + {425, 2}, + 0 + } + { + {329, 2}, + {301, 2}, + {135, 2}, + 0 + } + { + {432, 2}, + {96, 2}, + {201, 2}, + 0 + } + { + {96, 2}, + {197, 2, "edge" "collidable"}, + {201, 2}, + 0 + } + { + {411, 2}, + {357, 2}, + {532, 2}, + 0 + } + { + {175, 2}, + {581, 2, "edge" "collidable"}, + {211, 2}, + 0 + } + { + {502, 2}, + {432, 2}, + {203, 2}, + 0 + } + { + {432, 2}, + {201, 2, "edge" "collidable"}, + {203, 2}, + 0 + } + { + {273, 2}, + {211, 2}, + {224, 2}, + 0 + } + { + {339, 2}, + {594, 2, "edge" "collidable"}, + {382, 2}, + 0 + } + { + {622, 2}, + {502, 2}, + {205, 2}, + 0 + } + { + {502, 2}, + {203, 2, "edge" "collidable"}, + {205, 2}, + 0 + } + { + {431, 2}, + {507, 2}, + {390, 2}, + 0 + } + { + {499, 2}, + {555, 2, "edge" "collidable"}, + {559, 2}, + 0 + } + { + {200, 2}, + {622, 2}, + {207, 2}, + 0 + } + { + {622, 2}, + {205, 2, "edge" "collidable"}, + {207, 2}, + 0 + } + { + {491, 2}, + {129, 2, "edge" "collidable"}, + {581, 2}, + 0 + } + { + {475, 2}, + {562, 2, "edge" "collidable"}, + {566, 2}, + 0 + } + { + {285, 2}, + {200, 2}, + {209, 2}, + 0 + } + { + {200, 2}, + {207, 2, "edge" "collidable"}, + {209, 2}, + 0 + } + { + {218, 2}, + {123, 2}, + {492, 2}, + 0 + } + { + {554, 2}, + {380, 2, "edge" "collidable"}, + {495, 2}, + 0 + } + { + {426, 2}, + {285, 2}, + {209, 2}, + 0 + } + { + {402, 2}, + {258, 2, "edge" "collidable"}, + {504, 2}, + 0 + } + { + {354, 2}, + {577, 2, "edge" "collidable"}, + {579, 2}, + 0 + } + { + {556, 2}, + {627, 2, "edge" "collidable"}, + {631, 2}, + 0 + } + { + {439, 2}, + {426, 2}, + {213, 2}, + 0 + } + { + {426, 2}, + {209, 2, "edge" "collidable"}, + {213, 2}, + 0 + } + { + {308, 2}, + {587, 2, "edge" "collidable"}, + {591, 2}, + 0 + } + { + {214, 2}, + {196, 2}, + {399, 2}, + 0 + } + { + {491, 2}, + {513, 2}, + {129, 2}, + 0 + } + { + {295, 2}, + {147, 2, "edge" "collidable"}, + {393, 2}, + 0 + } + { + {514, 2}, + {281, 2}, + {423, 2}, + 0 + } + { + {479, 2}, + {313, 2, "edge" "collidable"}, + {430, 2}, + 0 + } + { + {544, 2}, + {439, 2}, + {217, 2}, + 0 + } + { + {439, 2}, + {213, 2, "edge" "collidable"}, + {217, 2}, + 0 + } + { + {625, 2}, + {366, 2, "edge" "collidable"}, + {370, 2}, + 0 + } + { + {153, 2}, + {278, 2, "edge" "collidable"}, + {372, 2}, + 0 + } + { + {507, 2}, + {264, 2}, + {564, 2}, + 0 + } + { + {547, 2}, + {176, 2}, + {442, 2}, + 0 + } + { + {233, 2}, + {257, 2, "edge" "collidable"}, + {237, 2}, + 0 + } + { + {291, 2}, + {598, 2}, + {530, 2}, + 0 + } + { + {460, 2}, + {544, 2}, + {221, 2}, + 0 + } + { + {544, 2}, + {217, 2, "edge" "collidable"}, + {221, 2}, + 0 + } + { + {351, 2}, + {464, 2}, + {472, 2}, + 0 + } + { + {485, 2}, + {501, 2}, + {630, 2}, + 0 + } + { + {441, 2}, + {117, 2, "edge" "collidable"}, + {219, 2}, + 0 + } + { + {153, 2}, + {560, 2}, + {278, 2}, + 0 + } + { + {172, 2}, + {266, 2}, + {225, 2}, + 0 + } + { + {603, 2}, + {418, 2}, + {461, 2}, + 0 + } + { + {443, 2}, + {519, 2}, + {500, 2}, + 0 + } + { + {457, 2}, + {443, 2}, + {615, 2}, + 0 + } + { + {605, 2}, + {460, 2}, + {226, 2}, + 0 + } + { + {460, 2}, + {221, 2, "edge" "collidable"}, + {226, 2}, + 0 + } + { + {552, 2}, + {603, 2}, + {466, 2}, + 0 + } + { + {377, 2}, + {218, 2}, + {496, 2}, + 0 + } + { + {485, 2}, + {630, 2, "edge" "collidable"}, + {376, 2}, + 0 + } + { + {215, 2}, + {486, 2, "edge" "collidable"}, + {421, 2}, + 0 + } + { + {533, 2}, + {102, 2}, + {520, 2}, + 0 + } + { + {97, 2}, + {187, 2}, + {551, 2}, + 0 + } + { + {533, 2}, + {520, 2, "edge" "collidable"}, + {524, 2}, + 0 + } + { + {478, 2}, + {412, 2}, + {333, 2}, + 0 + } + { + {510, 2}, + {605, 2}, + {231, 2}, + 0 + } + { + {605, 2}, + {226, 2, "edge" "collidable"}, + {231, 2}, + 0 + } + { + {404, 2}, + {386, 2}, + {182, 2}, + 0 + } + { + {210, 2}, + {336, 2}, + {613, 2}, + 0 + } + { + {501, 2}, + {404, 2}, + {98, 2}, + 0 + } + { + {108, 2}, + {451, 2, "edge" "collidable"}, + {454, 2}, + 0 + } + { + {165, 2}, + {108, 2}, + {454, 2}, + 0 + } + { + {408, 2}, + {420, 2, "edge" "collidable"}, + {617, 2}, + 0 + } + { + {279, 2}, + {510, 2}, + {235, 2}, + 0 + } + { + {510, 2}, + {231, 2, "edge" "collidable"}, + {235, 2}, + 0 + } + { + {450, 2}, + {229, 2, "edge" "collidable"}, + {258, 2}, + 0 + } + { + {273, 2}, + {175, 2}, + {211, 2}, + 0 + } + { + {606, 2}, + {668, 2, "edge" "collidable"}, + {378, 2}, + 0 + } + { + {337, 2}, + {458, 2, "edge" "collidable"}, + {462, 2}, + 0 + } + { + {592, 2}, + {353, 2, "edge" "collidable"}, + {445, 2}, + 0 + } + { + {398, 2}, + {586, 2, "edge" "collidable"}, + {229, 2}, + 0 + } + { + {199, 2}, + {279, 2}, + {239, 2}, + 0 + } + { + {279, 2}, + {235, 2, "edge" "collidable"}, + {239, 2}, + 0 + } + { + {121, 2}, + {580, 2}, + {595, 2}, + 0 + } + { + {367, 2}, + {375, 2}, + {616, 2}, + 0 + } + { + {199, 2}, + {239, 2, "edge" "collidable"}, + {241, 2}, + 0 + } + { + {373, 2}, + {538, 2, "edge" "collidable"}, + {542, 2}, + 0 + } + { + {413, 2}, + {504, 2, "edge" "collidable"}, + {321, 2}, + 0 + } + { + {357, 2}, + {349, 2}, + {529, 2}, + 0 + } + { + {310, 2}, + {559, 2, "edge" "collidable"}, + {562, 2}, + 0 + } + { + {270, 2}, + {400, 2, "edge" "collidable"}, + {517, 2}, + 0 + } + { + {422, 2}, + {270, 2}, + {517, 2}, + 0 + } + { + {628, 2}, + {407, 2, "edge" "collidable"}, + {415, 2}, + 0 + } + { + {281, 2}, + {628, 2}, + {415, 2}, + 0 + } + { + {448, 2}, + {254, 2}, + {251, 2}, + 0 + } + { + {254, 2}, + {249, 2, "edge" "collidable"}, + {251, 2}, + 0 + } + { + {531, 2}, + {535, 2}, + {244, 2}, + 0 + } + { + {180, 2}, + {575, 2, "edge" "collidable"}, + {577, 2}, + 0 + } + { + {365, 2}, + {448, 2}, + {253, 2}, + 0 + } + { + {448, 2}, + {251, 2, "edge" "collidable"}, + {253, 2}, + 0 + } + { + {410, 2}, + {550, 2}, + {84, 2}, + 0 + } + { + {332, 2}, + {610, 2, "edge" "collidable"}, + {612, 2}, + 0 + } + { + {350, 2}, + {365, 2}, + {255, 2}, + 0 + } + { + {365, 2}, + {253, 2, "edge" "collidable"}, + {255, 2}, + 0 + } + { + {601, 2}, + {556, 2}, + {631, 2}, + 0 + } + { + {104, 2}, + {534, 2, "edge" "collidable"}, + {538, 2}, + 0 + } + { + {196, 2}, + {395, 2, "edge" "collidable"}, + {399, 2}, + 0 + } + { + {509, 2}, + {438, 2, "edge" "collidable"}, + {453, 2}, + 0 + } + { + {351, 2}, + {472, 2, "edge" "collidable"}, + {476, 2}, + 0 + } + { + {406, 2}, + {122, 2}, + {282, 2}, + 0 + } + { + {277, 2}, + {350, 2}, + {259, 2}, + 0 + } + { + {350, 2}, + {255, 2, "edge" "collidable"}, + {259, 2}, + 0 + } + { + {507, 2}, + {564, 2, "edge" "collidable"}, + {390, 2}, + 0 + } + { + {339, 2}, + {382, 2}, + {590, 2}, + 0 + } + { + {165, 2}, + {454, 2, "edge" "collidable"}, + {458, 2}, + 0 + } + { + {339, 2}, + {474, 2}, + {594, 2}, + 0 + } + { + {389, 2}, + {373, 2}, + {542, 2}, + 0 + } + { + {271, 2}, + {572, 2, "edge" "collidable"}, + {526, 2}, + 0 + } + { + {168, 2}, + {277, 2}, + {263, 2}, + 0 + } + { + {277, 2}, + {259, 2, "edge" "collidable"}, + {263, 2}, + 0 + } + { + {324, 2}, + {557, 2, "edge" "collidable"}, + {304, 2}, + 0 + } + { + {412, 2}, + {183, 2}, + {589, 2}, + 0 + } + { + {567, 2}, + {479, 2}, + {430, 2}, + 0 + } + { + {164, 2}, + {333, 2, "edge" "collidable"}, + {338, 2}, + 0 + } + { + {186, 2}, + {425, 2, "edge" "collidable"}, + {161, 2}, + 0 + } + { + {381, 2}, + {445, 2, "edge" "collidable"}, + {189, 2}, + 0 + } + { + {611, 2}, + {168, 2}, + {267, 2}, + 0 + } + { + {168, 2}, + {263, 2, "edge" "collidable"}, + {267, 2}, + 0 + } + { + {537, 2, "edge" "collidable"}, + {536, 2}, + {414, 2}, + 0 + } + { + {459, 2}, + {369, 2}, + {490, 2}, + 0 + } + { + {126, 2}, + {624, 2, "edge" "collidable"}, + {602, 2}, + 0 + } + { + {455, 2}, + {126, 2}, + {602, 2}, + 0 + } + { + {474, 2}, + {368, 2}, + {541, 2}, + 0 + } + { + {513, 2}, + {447, 2, "edge" "collidable"}, + {129, 2}, + 0 + } + { + {508, 2}, + {355, 2}, + {397, 2}, + 0 + } + { + {355, 2}, + {189, 2, "edge" "collidable"}, + {397, 2}, + 0 + } + { + {240, 2}, + {611, 2}, + {272, 2}, + 0 + } + { + {611, 2}, + {267, 2, "edge" "collidable"}, + {272, 2}, + 0 + } + { + {202, 2}, + {93, 2, "edge" "collidable"}, + {540, 2}, + 0 + } + { + {369, 2}, + {202, 2}, + {540, 2}, + 0 + } + { + {464, 2}, + {477, 2}, + {469, 2}, + 0 + } + { + {477, 2}, + {467, 2, "edge" "collidable"}, + {469, 2}, + 0 + } + { + {301, 2}, + {295, 2}, + {393, 2}, + 0 + } + { + {379, 2}, + {359, 2}, + {528, 2}, + 0 + } + { + {549, 2}, + {240, 2}, + {276, 2}, + 0 + } + { + {240, 2}, + {272, 2, "edge" "collidable"}, + {276, 2}, + 0 + } + { + {264, 2}, + {408, 2}, + {617, 2}, + 0 + } + { + {618, 2}, + {619, 2, "edge" "collidable"}, + {621, 2}, + 0 + } + { + {593, 2}, + {198, 2, "edge" "collidable"}, + {181, 2}, + 0 + } + { + {558, 2}, + {593, 2}, + {181, 2}, + 0 + } + { + {414, 2}, + {536, 2, "edge" "collidable"}, + {624, 2}, + 0 + } + { + {368, 2}, + {268, 2, "edge" "collidable"}, + {541, 2}, + 0 + } + { + {234, 2}, + {549, 2}, + {280, 2}, + 0 + } + { + {549, 2}, + {276, 2, "edge" "collidable"}, + {280, 2}, + 0 + } + { + {506, 2}, + {449, 2}, + {146, 2}, + 0 + } + { + {449, 2}, + {220, 2, "edge" "collidable"}, + {146, 2}, + 0 + } + { + {175, 2}, + {491, 2}, + {581, 2}, + 0 + } + { + {513, 2}, + {601, 2}, + {447, 2}, + 0 + } + { + {308, 2}, + {452, 2}, + {587, 2}, + 0 + } + { + {349, 2}, + {527, 2, "edge" "collidable"}, + {529, 2}, + 0 + } + { + {312, 2}, + {234, 2}, + {284, 2}, + 0 + } + { + {234, 2}, + {280, 2, "edge" "collidable"}, + {284, 2}, + 0 + } + { + {289, 2}, + {606, 2}, + {378, 2}, + 0 + } + { + {398, 2}, + {131, 2}, + {586, 2}, + 0 + } + { + {343, 2}, + {312, 2}, + {286, 2}, + 0 + } + { + {312, 2}, + {284, 2, "edge" "collidable"}, + {286, 2}, + 0 + } + { + {131, 2}, + {334, 2}, + {586, 2}, + 0 + } + { + {334, 2}, + {139, 2, "edge" "collidable"}, + {586, 2}, + 0 + } + { + {553, 2}, + {441, 2}, + {219, 2}, + 0 + } + { + {535, 2}, + {578, 2, "edge" "collidable"}, + {244, 2}, + 0 + } + { + {457, 2}, + {615, 2, "edge" "collidable"}, + {268, 2}, + 0 + } + { + {368, 2}, + {457, 2}, + {268, 2}, + 0 + } + { + {302, 2}, + {343, 2}, + {290, 2}, + 0 + } + { + {343, 2}, + {286, 2, "edge" "collidable"}, + {290, 2}, + 0 + } + { + {301, 2}, + {393, 2, "edge" "collidable"}, + {135, 2}, + 0 + } + { + {550, 2}, + {215, 2}, + {421, 2}, + 0 + } + { + {437, 2}, + {296, 2, "edge" "collidable"}, + {486, 2}, + 0 + } + { + {386, 2}, + {565, 2, "edge" "collidable"}, + {182, 2}, + 0 + } + { + {479, 2}, + {306, 2}, + {313, 2}, + 0 + } + { + {227, 2}, + {169, 2}, + {599, 2}, + 0 + } + { + {159, 2}, + {302, 2}, + {294, 2}, + 0 + } + { + {302, 2}, + {290, 2, "edge" "collidable"}, + {294, 2}, + 0 + } + { + {392, 2}, + {149, 2, "edge" "collidable"}, + {385, 2}, + 0 + } + { + {431, 2}, + {390, 2, "edge" "collidable"}, + {446, 2}, + 0 + } + { + {413, 2}, + {402, 2}, + {504, 2}, + 0 + } + { + {545, 2}, + {453, 2, "edge" "collidable"}, + {296, 2}, + 0 + } + { + {130, 2}, + {435, 2}, + {112, 2}, + 0 + } + { + {435, 2}, + {394, 2, "edge" "collidable"}, + {112, 2}, + 0 + } + { + {140, 2}, + {159, 2}, + {298, 2}, + 0 + } + { + {159, 2}, + {294, 2, "edge" "collidable"}, + {298, 2}, + 0 + } + { + {582, 2}, + {612, 2, "edge" "collidable"}, + {614, 2}, + 0 + } + { + {411, 2}, + {532, 2, "edge" "collidable"}, + {534, 2}, + 0 + } + { + {511, 2}, + {431, 2}, + {446, 2}, + 0 + } + { + {509, 2}, + {291, 2}, + {438, 2}, + 0 + } + { + {377, 2}, + {496, 2, "edge" "collidable"}, + {505, 2}, + 0 + } + { + {283, 2}, + {667, 2, "edge" "collidable"}, + {391, 2}, + 0 + } + { + {125, 2}, + {311, 2, "edge" "collidable"}, + {315, 2}, + 0 + } + { + {125, 2}, + {315, 2}, + {208, 2}, + 0 + } + { + {212, 2}, + {140, 2}, + {303, 2}, + 0 + } + { + {140, 2}, + {298, 2, "edge" "collidable"}, + {303, 2}, + 0 + } + { + {404, 2}, + {182, 2, "edge" "collidable"}, + {98, 2}, + 0 + } + { + {493, 2}, + {232, 2}, + {604, 2}, + 0 + } + { + {597, 2}, + {537, 2}, + {414, 2}, + 0 + } + { + {270, 2}, + {132, 2}, + {400, 2}, + 0 + } + { + {499, 2}, + {97, 2}, + {555, 2}, + 0 + } + { + {535, 2}, + {508, 2}, + {578, 2}, + 0 + } + { + {584, 2}, + {212, 2}, + {307, 2}, + 0 + } + { + {212, 2}, + {303, 2, "edge" "collidable"}, + {307, 2}, + 0 + } + { + {130, 2}, + {112, 2, "edge" "collidable"}, + {151, 2}, + 0 + } + { + {195, 2}, + {130, 2}, + {151, 2}, + 0 + } + { + {548, 2}, + {186, 2}, + {161, 2}, + 0 + } + { + {337, 2}, + {165, 2}, + {458, 2}, + 0 + } + { + {474, 2}, + {541, 2, "edge" "collidable"}, + {594, 2}, + 0 + } + { + {176, 2}, + {522, 2}, + {434, 2}, + 0 + } + { + {125, 2}, + {584, 2}, + {311, 2}, + 0 + } + { + {584, 2}, + {307, 2, "edge" "collidable"}, + {311, 2}, + 0 + } + { + {525, 2}, + {345, 2, "edge" "collidable"}, + {216, 2}, + 0 + } + { + {306, 2}, + {525, 2}, + {216, 2}, + 0 + } + { + {625, 2}, + {238, 2}, + {366, 2}, + 0 + } + { + {282, 2, "edge" "collidable"}, + {257, 2}, + {233, 2}, + 0 + } + { + {585, 2}, + {208, 2}, + {315, 2}, + 0 + } + { + {336, 2}, + {329, 2}, + {188, 2}, + 0 + } + { + {582, 2}, + {332, 2}, + {612, 2}, + 0 + } + { + {580, 2}, + {308, 2}, + {591, 2}, + 0 + } + { + {373, 2}, + {104, 2}, + {538, 2}, + 0 + } + { + {473, 2}, + {360, 2, "edge" "collidable"}, + {362, 2}, + 0 + } + { + {320, 2}, + {585, 2}, + {319, 2}, + 0 + } + { + {585, 2}, + {315, 2, "edge" "collidable"}, + {319, 2}, + 0 + } + { + {173, 2}, + {470, 2}, + {405, 2}, + 0 + } + { + {552, 2}, + {466, 2, "edge" "collidable"}, + {314, 2}, + 0 + } + { + {289, 2}, + {669, 2, "edge" "collidable"}, + {383, 2}, + 0 + } + { + {283, 2}, + {289, 2}, + {383, 2}, + 0 + } + { + {157, 2}, + {173, 2}, + {387, 2}, + 0 + } + { + {498, 2}, + {670, 2, "edge" "collidable"}, + {374, 2}, + 0 + } + { + {95, 2}, + {320, 2}, + {323, 2}, + 0 + } + { + {320, 2}, + {319, 2, "edge" "collidable"}, + {323, 2}, + 0 + } + { + {396, 2}, + {321, 2, "edge" "collidable"}, + {91, 2}, + 0 + } + { + {132, 2}, + {396, 2}, + {91, 2}, + 0 + } + { + {214, 2}, + {399, 2, "edge" "collidable"}, + {403, 2}, + 0 + } + { + {223, 2}, + {214, 2}, + {403, 2}, + 0 + } + { + {173, 2}, + {405, 2, "edge" "collidable"}, + {387, 2}, + 0 + } + { + {318, 2}, + {422, 2}, + {194, 2}, + 0 + } + { + {236, 2}, + {95, 2}, + {327, 2}, + 0 + } + { + {95, 2}, + {323, 2, "edge" "collidable"}, + {327, 2}, + 0 + } + { + {567, 2}, + {430, 2, "edge" "collidable"}, + {198, 2}, + 0 + } + { + {593, 2}, + {567, 2}, + {198, 2}, + 0 + } + { + {169, 2}, + {167, 2, "edge" "collidable"}, + {599, 2}, + 0 + } + { + {607, 2}, + {192, 2}, + {570, 2}, + 0 + } + { + {227, 2}, + {599, 2, "edge" "collidable"}, + {433, 2}, + 0 + } + { + {299, 2}, + {325, 2, "edge" "collidable"}, + {345, 2}, + 0 + } + { + {260, 2}, + {236, 2}, + {331, 2}, + 0 + } + { + {236, 2}, + {327, 2, "edge" "collidable"}, + {331, 2}, + 0 + } + { + {424, 2}, + {471, 2, "edge" "collidable"}, + {325, 2}, + 0 + } + { + {606, 2}, + {498, 2}, + {374, 2}, + 0 + } + { + {123, 2}, + {488, 2, "edge" "collidable"}, + {492, 2}, + 0 + } + { + {441, 2}, + {455, 2}, + {117, 2}, + 0 + } + { + {347, 2}, + {115, 2, "edge" "collidable"}, + {557, 2}, + 0 + } + { + {183, 2}, + {590, 2}, + {82, 2}, + 0 + } + { + {300, 2}, + {260, 2}, + {335, 2}, + 0 + } + { + {260, 2}, + {331, 2, "edge" "collidable"}, + {335, 2}, + 0 + } + { + {288, 2}, + {204, 2, "edge" "collidable"}, + {261, 2}, + 0 + } + { + {443, 2}, + {500, 2, "edge" "collidable"}, + {615, 2}, + 0 + } + { + {558, 2}, + {181, 2, "edge" "collidable"}, + {420, 2}, + 0 + } + { + {598, 2}, + {388, 2}, + {543, 2}, + 0 + } + { + {598, 2}, + {543, 2, "edge" "collidable"}, + {530, 2}, + 0 + } + { + {369, 2}, + {540, 2, "edge" "collidable"}, + {490, 2}, + 0 + } + { + {429, 2}, + {300, 2}, + {335, 2}, + 0 + } + { + {503, 2}, + {506, 2}, + {146, 2}, + 0 + } + { + {429, 2}, + {335, 2, "edge" "collidable"}, + {340, 2}, + 0 + } + { + {359, 2}, + {164, 2}, + {338, 2}, + 0 + } + { + {186, 2}, + {459, 2}, + {425, 2}, + 0 + } + { + {482, 2}, + {337, 2}, + {462, 2}, + 0 + } + { + {408, 2}, + {558, 2}, + {420, 2}, + 0 + } + { + {266, 2}, + {288, 2}, + {261, 2}, + 0 + } + { + {482, 2}, + {462, 2, "edge" "collidable"}, + {465, 2}, + 0 + } + { + {138, 2}, + {429, 2}, + {344, 2}, + 0 + } + { + {429, 2}, + {340, 2, "edge" "collidable"}, + {344, 2}, + 0 + } + { + {269, 2}, + {410, 2}, + {110, 2}, + 0 + } + { + {410, 2}, + {84, 2, "edge" "collidable"}, + {110, 2}, + 0 + } + { + {265, 2}, + {539, 2}, + {484, 2}, + 0 + } + { + {539, 2}, + {480, 2, "edge" "collidable"}, + {484, 2}, + 0 + } + { + {464, 2}, + {469, 2, "edge" "collidable"}, + {472, 2}, + 0 + } + { + {497, 2}, + {531, 2}, + {483, 2}, + 0 + } + { + {316, 2}, + {138, 2}, + {348, 2}, + 0 + } + { + {138, 2}, + {344, 2, "edge" "collidable"}, + {348, 2}, + 0 + } + { + {498, 2}, + {625, 2}, + {370, 2}, + 0 + } + { + {101, 2}, + {392, 2}, + {385, 2}, + 0 + } + { + {501, 2}, + {98, 2, "edge" "collidable"}, + {630, 2}, + 0 + } + { + {375, 2}, + {614, 2, "edge" "collidable"}, + {616, 2}, + 0 + } + { + {126, 2}, + {414, 2}, + {624, 2}, + 0 + } + { + {603, 2}, + {461, 2, "edge" "collidable"}, + {466, 2}, + 0 + } + { + {523, 2}, + {316, 2}, + {352, 2}, + 0 + } + { + {316, 2}, + {348, 2, "edge" "collidable"}, + {352, 2}, + 0 + } + { + {398, 2}, + {229, 2}, + {450, 2}, + 0 + } + { + {123, 2}, + {265, 2}, + {488, 2}, + 0 + } + { + {269, 2}, + {110, 2, "edge" "collidable"}, + {262, 2}, + 0 + } + { + {503, 2}, + {146, 2, "edge" "collidable"}, + {167, 2}, + 0 + } + { + {386, 2}, + {379, 2}, + {565, 2}, + 0 + } + { + {275, 2}, + {579, 2, "edge" "collidable"}, + {583, 2}, + 0 + } + { + {287, 2}, + {523, 2}, + {356, 2}, + 0 + } + { + {523, 2}, + {352, 2, "edge" "collidable"}, + {356, 2}, + 0 + } + { + {550, 2}, + {421, 2, "edge" "collidable"}, + {84, 2}, + 0 + } + { + {375, 2}, + {582, 2}, + {614, 2}, + 0 + } + { + {256, 2}, + {287, 2}, + {358, 2}, + 0 + } + { + {287, 2}, + {356, 2, "edge" "collidable"}, + {358, 2}, + 0 + } + { + {412, 2}, + {589, 2, "edge" "collidable"}, + {333, 2}, + 0 + } + { + {515, 2}, + {621, 2, "edge" "collidable"}, + {623, 2}, + 0 + } + { + {473, 2}, + {256, 2}, + {360, 2}, + 0 + } + { + {256, 2}, + {358, 2, "edge" "collidable"}, + {360, 2}, + 0 + } + { + {222, 2}, + {642, 2, "edge" "collidable"}, + {635, 2}, + 0 + } + { + {222, 2}, + {596, 2, "edge" "collidable"}, + {642, 2}, + 0 + } + { + {634, 2, "edge" "collidable"}, + {645, 2}, + {648, 2}, + 0 + } + { + {648, 2}, + {647, 2}, + {634, 2}, + 0 + } + { + {645, 2, "edge" "collidable"}, + {637, 2}, + {649, 2}, + 0 + } + { + {649, 2}, + {648, 2}, + {645, 2}, + 0 + } + { + {643, 2, "edge" "collidable"}, + {636, 2}, + {650, 2}, + 0 + } + { + {650, 2}, + {651, 2}, + {643, 2}, + 0 + } + { + {633, 2, "edge" "collidable"}, + {643, 2}, + {651, 2}, + 0 + } + { + {651, 2}, + {652, 2}, + {633, 2}, + 0 + } + { + {640, 2, "edge" "collidable"}, + {638, 2}, + {653, 2}, + 0 + } + { + {653, 2}, + {654, 2}, + {640, 2}, + 0 + } + { + {632, 2, "edge" "collidable"}, + {640, 2}, + {654, 2}, + 0 + } + { + {654, 2}, + {655, 2}, + {632, 2}, + 0 + } + { + {639, 2, "edge" "collidable"}, + {634, 2}, + {647, 2}, + 0 + } + { + {647, 2}, + {656, 2}, + {639, 2}, + 0 + } + { + {638, 2, "edge" "collidable"}, + {639, 2}, + {656, 2}, + 0 + } + { + {656, 2}, + {653, 2}, + {638, 2}, + 0 + } + { + {635, 2, "edge" "collidable"}, + {641, 2}, + {658, 2}, + 0 + } + { + {658, 2}, + {657, 2}, + {635, 2}, + 0 + } + { + {641, 2, "edge" "collidable"}, + {633, 2}, + {652, 2}, + 0 + } + { + {652, 2}, + {658, 2}, + {641, 2}, + 0 + } + { + {636, 2, "edge" "collidable"}, + {644, 2}, + {659, 2}, + 0 + } + { + {659, 2}, + {650, 2}, + {636, 2}, + 0 + } + { + {644, 2, "edge" "collidable"}, + {632, 2}, + {655, 2}, + 0 + } + { + {655, 2}, + {659, 2}, + {644, 2}, + 0 + } + { + {646, 2, "edge" "collidable"}, + {626, 2, "edge" "collidable"}, + {660, 2}, + 0 + } + { + {660, 2}, + {661, 2}, + {646, 2}, + 0 + } + { + {637, 2, "edge" "collidable"}, + {646, 2}, + {661, 2}, + 0 + } + { + {661, 2}, + {649, 2}, + {637, 2}, + 0 + } + { + {657, 2}, + {222, 2}, + {635, 2}, + 0 + } + { + {498, 2}, + {671, 2, "edge" "collidable"}, + {662, 2}, + 0 + } + { + {606, 2}, + {672, 2, "edge" "collidable"}, + {663, 2}, + 0 + } + { + {289, 2}, + {673, 2, "edge" "collidable"}, + {664, 2}, + 0 + } + { + {289, 2}, + {674, 2, "edge" "collidable"}, + {665, 2}, + 0 + } + { + {289, 2}, + {675, 2, "edge" "collidable"}, + {666, 2}, + 0 + } + { + {283, 2}, + {676, 2, "edge" "collidable"}, + {667, 2}, + 0 + } + { + {283, 2}, + {383, 2, "edge" "collidable"}, + {676, 2}, + 0 + } + { + {289, 2}, + {664, 2, "edge" "collidable"}, + {675, 2}, + 0 + } + { + {289, 2}, + {378, 2, "edge" "collidable"}, + {674, 2}, + 0 + } + { + {289, 2}, + {665, 2, "edge" "collidable"}, + {673, 2}, + 0 + } + { + {606, 2}, + {374, 2, "edge" "collidable"}, + {672, 2}, + 0 + } + { + {498, 2}, + {370, 2, "edge" "collidable"}, + {671, 2}, + 0 + } + { + {498, 2}, + {662, 2, "edge" "collidable"}, + {670, 2}, + 0 + } + { + {289, 2}, + {666, 2, "edge" "collidable"}, + {669, 2}, + 0 + } + { + {606, 2}, + {663, 2, "edge" "collidable"}, + {668, 2}, + 0 + } + { + {241, 2, "edge" "collidable"}, + {243, 2}, + {199, 2}, + 0 + } + { + {249, 2}, + {254, 2}, + {247, 2, "edge" "collidable"}, + 0 + } + { + {243, 2, "edge" "collidable"}, + {245, 2}, + {199, 2}, + 0 + } + { + {247, 2}, + {254, 2}, + {245, 2, "edge" "collidable"}, + 0 + } + { + {245, 2}, + {254, 2}, + {199, 2}, + 0 + } + { + {661, 2}, + {660, 2, "edge" "collidable"}, + {677, 2}, + 0 + } + { + {677, 2, "edge" "collidable"}, + {678, 2}, + {661, 2}, + 0 + } + { + {679, 2, "edge" "collidable"}, + {80, 2}, + {468, 2}, + 0 + } + { + {468, 2}, + {680, 2, "edge" "collidable"}, + {679, 2}, + 0 + } + { + {185, 2, "edge" "collidable"}, + {190, 2}, + {86, 2}, + 0 + } + { + {681, 2, "edge" "collidable"}, + {185, 2}, + {86, 2}, + 0 + } + { + {681, 2}, + {86, 2}, + {682, 2}, + 0 + } + { + {178, 2, "edge" "collidable"}, + {681, 2}, + {682, 2}, + 0 + } + { + {134, 2}, + {178, 2}, + {682, 2}, + 0 + } + # Mesh "CurveCircle" + { + {695, 2, "edge"}, + {694, 2}, + {708, 2}, + 0 + } + { + {708, 2, "edge"}, + {709, 2}, + {695, 2}, + 0 + } + { + {696, 2, "edge"}, + {695, 2}, + {709, 2}, + 0 + } + { + {709, 2, "edge"}, + {710, 2}, + {696, 2}, + 0 + } + { + {694, 2, "edge"}, + {693, 2}, + {711, 2}, + 0 + } + { + {711, 2, "edge"}, + {708, 2}, + {694, 2}, + 0 + } + { + {697, 2, "edge"}, + {696, 2}, + {710, 2}, + 0 + } + { + {710, 2, "edge"}, + {712, 2}, + {697, 2}, + 0 + } + { + {693, 2, "edge"}, + {692, 2}, + {713, 2}, + 0 + } + { + {713, 2, "edge"}, + {711, 2}, + {693, 2}, + 0 + } + { + {698, 2, "edge"}, + {697, 2}, + {712, 2}, + 0 + } + { + {712, 2, "edge"}, + {714, 2}, + {698, 2}, + 0 + } + { + {692, 2, "edge"}, + {691, 2}, + {715, 2}, + 0 + } + { + {715, 2, "edge"}, + {713, 2}, + {692, 2}, + 0 + } + { + {699, 2, "edge"}, + {698, 2}, + {714, 2}, + 0 + } + { + {714, 2, "edge"}, + {716, 2}, + {699, 2}, + 0 + } + { + {691, 2, "edge"}, + {690, 2}, + {717, 2}, + 0 + } + { + {717, 2, "edge"}, + {715, 2}, + {691, 2}, + 0 + } + { + {700, 2, "edge"}, + {699, 2}, + {716, 2}, + 0 + } + { + {716, 2, "edge"}, + {718, 2}, + {700, 2}, + 0 + } + { + {690, 2, "edge"}, + {689, 2}, + {719, 2}, + 0 + } + { + {719, 2, "edge"}, + {717, 2}, + {690, 2}, + 0 + } + { + {701, 2, "edge"}, + {700, 2}, + {718, 2}, + 0 + } + { + {718, 2, "edge"}, + {720, 2}, + {701, 2}, + 0 + } + { + {689, 2, "edge"}, + {688, 2}, + {721, 2}, + 0 + } + { + {721, 2, "edge"}, + {719, 2}, + {689, 2}, + 0 + } + { + {702, 2, "edge"}, + {701, 2}, + {720, 2}, + 0 + } + { + {720, 2, "edge"}, + {722, 2}, + {702, 2}, + 0 + } + { + {688, 2, "edge"}, + {687, 2}, + {723, 2}, + 0 + } + { + {723, 2, "edge"}, + {721, 2}, + {688, 2}, + 0 + } + { + {703, 2, "edge"}, + {702, 2}, + {722, 2}, + 0 + } + { + {722, 2, "edge"}, + {724, 2}, + {703, 2}, + 0 + } + { + {687, 2, "edge"}, + {686, 2}, + {725, 2}, + 0 + } + { + {725, 2, "edge"}, + {723, 2}, + {687, 2}, + 0 + } + { + {704, 2, "edge"}, + {703, 2}, + {724, 2}, + 0 + } + { + {724, 2, "edge"}, + {726, 2}, + {704, 2}, + 0 + } + { + {686, 2, "edge"}, + {685, 2}, + {727, 2}, + 0 + } + { + {727, 2, "edge"}, + {725, 2}, + {686, 2}, + 0 + } + { + {705, 2, "edge"}, + {704, 2}, + {726, 2}, + 0 + } + { + {726, 2, "edge"}, + {728, 2}, + {705, 2}, + 0 + } + { + {685, 2, "edge"}, + {684, 2}, + {729, 2}, + 0 + } + { + {729, 2, "edge"}, + {727, 2}, + {685, 2}, + 0 + } + { + {706, 2, "edge"}, + {705, 2}, + {728, 2}, + 0 + } + { + {728, 2, "edge"}, + {730, 2}, + {706, 2}, + 0 + } + { + {684, 2, "edge"}, + {683, 2, "edge"}, + {731, 2}, + 0 + } + { + {731, 2, "edge"}, + {729, 2}, + {684, 2}, + 0 + } + { + {707, 2, "edge"}, + {706, 2}, + {730, 2}, + 0 + } + { + {730, 2, "edge"}, + {732, 2, "edge"}, + {707, 2}, + 0 + } + # Mesh "Font.001" + { + {817, 2, "edge" "collidable"}, + {816, 2, "edge" "collidable"}, + {819, 2}, + 3 + } + { + {818, 2, "edge" "collidable"}, + {817, 2}, + {819, 2, "edge" "collidable"}, + 3 + } + { + {813, 2, "edge" "collidable"}, + {812, 2, "edge" "collidable"}, + {815, 2}, + 3 + } + { + {814, 2, "edge" "collidable"}, + {813, 2}, + {815, 2, "edge" "collidable"}, + 3 + } + { + {802, 2, "edge" "collidable"}, + {801, 2, "edge" "collidable"}, + {808, 2}, + 3 + } + { + {803, 2, "edge" "collidable"}, + {802, 2}, + {809, 2}, + 3 + } + { + {809, 2}, + {802, 2}, + {808, 2}, + 3 + } + { + {803, 2}, + {809, 2, "edge" "collidable"}, + {811, 2}, + 3 + } + { + {810, 2, "edge" "collidable"}, + {809, 2}, + {808, 2}, + 3 + } + { + {811, 2, "edge" "collidable"}, + {810, 2}, + {806, 2}, + 3 + } + { + {806, 2}, + {810, 2}, + {808, 2}, + 3 + } + { + {811, 2}, + {806, 2, "edge" "collidable"}, + {805, 2}, + 3 + } + { + {807, 2, "edge" "collidable"}, + {806, 2}, + {808, 2, "edge" "collidable"}, + 3 + } + { + {803, 2}, + {811, 2}, + {805, 2}, + 3 + } + { + {803, 2}, + {805, 2, "edge" "collidable"}, + {804, 2, "edge" "collidable"}, + 3 + } + { + {1022, 2}, + {1043, 2, "edge" "collidable"}, + {897, 2}, + 3 + } + { + {840, 2, "edge" "collidable"}, + {838, 2, "edge" "collidable"}, + {834, 2}, + 3 + } + { + {846, 2, "edge" "collidable"}, + {969, 2}, + {745, 2}, + 3 + } + { + {1082, 2, "edge" "collidable"}, + {830, 2}, + {844, 2}, + 3 + } + { + {1069, 2, "edge" "collidable"}, + {835, 2}, + {785, 2}, + 3 + } + { + {1066, 2}, + {944, 2}, + {1029, 2}, + 3 + } + { + {748, 2, "edge" "collidable"}, + {1046, 2, "edge" "collidable"}, + {977, 2}, + 3 + } + { + {862, 2}, + {840, 2}, + {834, 2}, + 3 + } + { + {862, 2}, + {834, 2}, + {866, 2, "edge" "collidable"}, + 3 + } + { + {1034, 2}, + {821, 2, "edge" "collidable"}, + {836, 2}, + 3 + } + { + {869, 2, "edge" "collidable"}, + {797, 2}, + {949, 2}, + 3 + } + { + {905, 2, "edge" "collidable"}, + {878, 2}, + {864, 2}, + 3 + } + { + {1038, 2}, + {930, 2, "edge" "collidable"}, + {1032, 2}, + 3 + } + { + {998, 2}, + {947, 2, "edge" "collidable"}, + {1033, 2}, + 3 + } + { + {843, 2, "edge" "collidable"}, + {840, 2}, + {862, 2}, + 3 + } + { + {843, 2}, + {862, 2, "edge" "collidable"}, + {858, 2}, + 3 + } + { + {984, 2}, + {973, 2, "edge" "collidable"}, + {926, 2}, + 3 + } + { + {823, 2}, + {846, 2}, + {745, 2}, + 3 + } + { + {866, 2}, + {834, 2, "edge" "collidable"}, + {833, 2}, + 3 + } + { + {870, 2, "edge" "collidable"}, + {866, 2}, + {833, 2}, + 3 + } + { + {902, 2, "edge" "collidable"}, + {761, 2}, + {960, 2}, + 3 + } + { + {1069, 2}, + {785, 2, "edge" "collidable"}, + {1021, 2}, + 3 + } + { + {858, 2, "edge" "collidable"}, + {870, 2}, + {833, 2}, + 3 + } + { + {1023, 2, "edge" "collidable"}, + {952, 2, "edge" "collidable"}, + {1037, 2}, + 3 + } + { + {858, 2}, + {833, 2, "edge" "collidable"}, + {832, 2}, + 3 + } + { + {845, 2, "edge" "collidable"}, + {843, 2}, + {858, 2}, + 3 + } + { + {845, 2}, + {858, 2}, + {832, 2}, + 3 + } + { + {845, 2}, + {832, 2, "edge" "collidable"}, + {829, 2}, + 3 + } + { + {927, 2}, + {766, 2, "edge" "collidable"}, + {752, 2}, + 3 + } + { + {1018, 2}, + {978, 2, "edge" "collidable"}, + {795, 2}, + 3 + } + { + {946, 2}, + {853, 2, "edge" "collidable"}, + {1077, 2}, + 3 + } + { + {1058, 2}, + {757, 2}, + {922, 2}, + 3 + } + { + {949, 2}, + {906, 2, "edge" "collidable"}, + {1023, 2}, + 3 + } + { + {930, 2}, + {887, 2}, + {991, 2, "edge" "collidable"}, + 3 + } + { + {1034, 2}, + {836, 2, "edge" "collidable"}, + {1052, 2, "edge" "collidable"}, + 3 + } + { + {755, 2, "edge" "collidable"}, + {749, 2}, + {773, 2}, + 3 + } + { + {825, 2, "edge" "collidable"}, + {820, 2, "edge" "collidable"}, + {854, 2}, + 3 + } + { + {845, 2}, + {829, 2, "edge" "collidable"}, + {825, 2}, + 3 + } + { + {966, 2, "edge" "collidable"}, + {919, 2, "edge" "collidable"}, + {757, 2}, + 3 + } + { + {736, 2, "edge" "collidable"}, + {874, 2, "edge" "collidable"}, + {857, 2}, + 3 + } + { + {1043, 2}, + {1072, 2}, + {841, 2, "edge" "collidable"}, + 3 + } + { + {984, 2}, + {956, 2, "edge" "collidable"}, + {973, 2}, + 3 + } + { + {845, 2}, + {825, 2}, + {854, 2}, + 3 + } + { + {965, 2}, + {995, 2, "edge" "collidable"}, + {1083, 2}, + 3 + } + { + {912, 2}, + {822, 2, "edge" "collidable"}, + {782, 2}, + 3 + } + { + {893, 2}, + {762, 2, "edge" "collidable"}, + {994, 2}, + 3 + } + { + {849, 2, "edge" "collidable"}, + {845, 2}, + {854, 2, "edge" "collidable"}, + 3 + } + { + {925, 2}, + {835, 2, "edge" "collidable"}, + {1075, 2}, + 3 + } + { + {869, 2}, + {949, 2}, + {1023, 2}, + 3 + } + { + {984, 2}, + {948, 2, "edge" "collidable"}, + {822, 2}, + 3 + } + { + {892, 2, "edge" "collidable"}, + {1038, 2}, + {987, 2}, + 3 + } + { + {872, 2, "edge" "collidable"}, + {871, 2, "edge" "collidable"}, + {951, 2}, + 3 + } + { + {1015, 2, "edge" "collidable"}, + {824, 2, "edge" "collidable"}, + {853, 2}, + 3 + } + { + {1034, 2, "edge" "collidable"}, + {743, 2}, + {821, 2}, + 3 + } + { + {1072, 2, "edge" "collidable"}, + {938, 2, "edge" "collidable"}, + {1010, 2}, + 3 + } + { + {876, 2, "edge" "collidable"}, + {872, 2}, + {950, 2}, + 3 + } + { + {950, 2}, + {872, 2}, + {951, 2, "edge" "collidable"}, + 3 + } + { + {876, 2}, + {950, 2}, + {970, 2}, + 3 + } + { + {970, 2}, + {950, 2, "edge" "collidable"}, + {942, 2}, + 3 + } + { + {1013, 2, "edge" "collidable"}, + {1066, 2}, + {1070, 2, "edge" "collidable"}, + 3 + } + { + {967, 2}, + {876, 2}, + {970, 2, "edge" "collidable"}, + 3 + } + { + {839, 2, "edge" "collidable"}, + {889, 2}, + {935, 2}, + 3 + } + { + {982, 2, "edge" "collidable"}, + {1012, 2, "edge" "collidable"}, + {947, 2}, + 3 + } + { + {842, 2, "edge" "collidable"}, + {867, 2, "edge" "collidable"}, + {735, 2}, + 3 + } + { + {936, 2}, + {882, 2, "edge" "collidable"}, + {1011, 2}, + 3 + } + { + {936, 2, "edge" "collidable"}, + {961, 2}, + {882, 2}, + 3 + } + { + {887, 2, "edge" "collidable"}, + {885, 2, "edge" "collidable"}, + {940, 2}, + 3 + } + { + {995, 2}, + {895, 2}, + {758, 2, "edge" "collidable"}, + 3 + } + { + {974, 2, "edge" "collidable"}, + {970, 2}, + {942, 2}, + 3 + } + { + {876, 2}, + {967, 2, "edge" "collidable"}, + {963, 2}, + 3 + } + { + {1018, 2, "edge" "collidable"}, + {931, 2}, + {1077, 2}, + 3 + } + { + {900, 2}, + {1084, 2, "edge" "collidable"}, + {980, 2}, + 3 + } + { + {1036, 2, "edge" "collidable"}, + {770, 2}, + {847, 2}, + 3 + } + { + {889, 2, "edge" "collidable"}, + {800, 2}, + {860, 2}, + 3 + } + { + {908, 2, "edge" "collidable"}, + {902, 2}, + {960, 2}, + 3 + } + { + {961, 2, "edge" "collidable"}, + {762, 2}, + {882, 2}, + 3 + } + { + {1040, 2, "edge" "collidable"}, + {991, 2}, + {821, 2}, + 3 + } + { + {889, 2}, + {860, 2, "edge" "collidable"}, + {935, 2}, + 3 + } + { + {932, 2, "edge" "collidable"}, + {790, 2}, + {1022, 2}, + 3 + } + { + {964, 2}, + {957, 2}, + {847, 2}, + 3 + } + { + {993, 2}, + {856, 2}, + {800, 2, "edge" "collidable"}, + 3 + } + { + {971, 2, "edge" "collidable"}, + {975, 2}, + {859, 2}, + 3 + } + { + {749, 2}, + {779, 2, "edge" "collidable"}, + {775, 2}, + 3 + } + { + {1068, 2, "edge" "collidable"}, + {769, 2}, + {831, 2}, + 3 + } + { + {1022, 2, "edge" "collidable"}, + {1072, 2}, + {1043, 2}, + 3 + } + { + {876, 2}, + {963, 2, "edge" "collidable"}, + {959, 2}, + 3 + } + { + {881, 2, "edge" "collidable"}, + {876, 2}, + {959, 2}, + 3 + } + { + {955, 2, "edge" "collidable"}, + {974, 2}, + {942, 2}, + 3 + } + { + {955, 2}, + {942, 2, "edge" "collidable"}, + {937, 2}, + 3 + } + { + {972, 2, "edge" "collidable"}, + {925, 2}, + {780, 2}, + 3 + } + { + {772, 2, "edge" "collidable"}, + {831, 2}, + {875, 2}, + 3 + } + { + {748, 2}, + {977, 2, "edge" "collidable"}, + {839, 2}, + 3 + } + { + {747, 2}, + {980, 2, "edge" "collidable"}, + {981, 2}, + 3 + } + { + {747, 2}, + {981, 2, "edge" "collidable"}, + {856, 2}, + 3 + } + { + {1038, 2}, + {1032, 2, "edge" "collidable"}, + {987, 2}, + 3 + } + { + {781, 2}, + {1023, 2}, + {761, 2, "edge" "collidable"}, + 3 + } + { + {909, 2, "edge" "collidable"}, + {962, 2, "edge" "collidable"}, + {785, 2}, + 3 + } + { + {744, 2}, + {789, 2, "edge" "collidable"}, + {783, 2}, + 3 + } + { + {1066, 2, "edge" "collidable"}, + {1025, 2}, + {944, 2}, + 3 + } + { + {875, 2, "edge" "collidable"}, + {910, 2, "edge" "collidable"}, + {880, 2}, + 3 + } + { + {881, 2}, + {959, 2, "edge" "collidable"}, + {955, 2}, + 3 + } + { + {881, 2}, + {955, 2}, + {937, 2}, + 3 + } + { + {943, 2, "edge" "collidable"}, + {760, 2}, + {931, 2}, + 3 + } + { + {922, 2}, + {757, 2}, + {823, 2, "edge" "collidable"}, + 3 + } + { + {740, 2}, + {733, 2}, + {789, 2}, + 3 + } + { + {749, 2, "edge" "collidable"}, + {746, 2}, + {779, 2}, + 3 + } + { + {767, 2, "edge" "collidable"}, + {917, 2, "edge" "collidable"}, + {894, 2}, + 3 + } + { + {888, 2, "edge" "collidable"}, + {881, 2}, + {937, 2}, + 3 + } + { + {982, 2}, + {998, 2, "edge" "collidable"}, + {842, 2}, + 3 + } + { + {869, 2}, + {1023, 2}, + {781, 2}, + 3 + } + { + {746, 2, "edge" "collidable"}, + {744, 2}, + {783, 2}, + 3 + } + { + {887, 2}, + {791, 2}, + {991, 2}, + 3 + } + { + {827, 2, "edge" "collidable"}, + {1085, 2, "edge" "collidable"}, + {868, 2}, + 3 + } + { + {888, 2}, + {937, 2, "edge" "collidable"}, + {934, 2}, + 3 + } + { + {891, 2, "edge" "collidable"}, + {778, 2}, + {999, 2}, + 3 + } + { + {932, 2}, + {1022, 2}, + {897, 2}, + 3 + } + { + {909, 2}, + {785, 2}, + {835, 2}, + 3 + } + { + {931, 2}, + {760, 2}, + {1077, 2}, + 3 + } + { + {888, 2}, + {934, 2, "edge" "collidable"}, + {928, 2}, + 3 + } + { + {896, 2, "edge" "collidable"}, + {888, 2}, + {928, 2}, + 3 + } + { + {734, 2, "edge" "collidable"}, + {733, 2}, + {740, 2, "edge" "collidable"}, + 3 + } + { + {975, 2, "edge" "collidable"}, + {948, 2}, + {926, 2}, + 3 + } + { + {925, 2, "edge" "collidable"}, + {909, 2}, + {835, 2}, + 3 + } + { + {1036, 2}, + {847, 2, "edge" "collidable"}, + {750, 2}, + 3 + } + { + {1082, 2}, + {844, 2}, + {985, 2, "edge" "collidable"}, + 3 + } + { + {778, 2, "edge" "collidable"}, + {943, 2}, + {933, 2}, + 3 + } + { + {830, 2, "edge" "collidable"}, + {958, 2, "edge" "collidable"}, + {844, 2}, + 3 + } + { + {1084, 2}, + {798, 2, "edge" "collidable"}, + {900, 2}, + 3 + } + { + {789, 2}, + {733, 2, "edge" "collidable"}, + {796, 2, "edge" "collidable"}, + 3 + } + { + {1056, 2, "edge" "collidable"}, + {1068, 2}, + {828, 2}, + 3 + } + { + {896, 2}, + {928, 2, "edge" "collidable"}, + {923, 2}, + 3 + } + { + {925, 2}, + {1075, 2, "edge" "collidable"}, + {780, 2}, + 3 + } + { + {1033, 2}, + {949, 2, "edge" "collidable"}, + {826, 2}, + 3 + } + { + {903, 2, "edge" "collidable"}, + {896, 2}, + {923, 2}, + 3 + } + { + {760, 2, "edge" "collidable"}, + {946, 2}, + {1077, 2}, + 3 + } + { + {790, 2, "edge" "collidable"}, + {741, 2, "edge" "collidable"}, + {1022, 2}, + 3 + } + { + {778, 2}, + {986, 2}, + {999, 2}, + 3 + } + { + {1077, 2, "edge" "collidable"}, + {763, 2, "edge" "collidable"}, + {978, 2}, + 3 + } + { + {1006, 2, "edge" "collidable"}, + {861, 2}, + {935, 2, "edge" "collidable"}, + 3 + } + { + {903, 2}, + {923, 2}, + {992, 2}, + 3 + } + { + {932, 2}, + {897, 2, "edge" "collidable"}, + {901, 2, "edge" "collidable"}, + 3 + } + { + {1029, 2}, + {944, 2, "edge" "collidable"}, + {875, 2}, + 3 + } + { + {907, 2, "edge" "collidable"}, + {903, 2}, + {992, 2}, + 3 + } + { + {996, 2, "edge" "collidable"}, + {992, 2}, + {923, 2}, + 3 + } + { + {1018, 2}, + {1077, 2}, + {978, 2}, + 3 + } + { + {1033, 2, "edge" "collidable"}, + {837, 2, "edge" "collidable"}, + {949, 2}, + 3 + } + { + {996, 2}, + {923, 2, "edge" "collidable"}, + {920, 2}, + 3 + } + { + {907, 2}, + {992, 2, "edge" "collidable"}, + {988, 2}, + 3 + } + { + {800, 2}, + {856, 2, "edge" "collidable"}, + {860, 2}, + 3 + } + { + {957, 2, "edge" "collidable"}, + {765, 2, "edge" "collidable"}, + {847, 2}, + 3 + } + { + {912, 2}, + {782, 2, "edge" "collidable"}, + {968, 2}, + 3 + } + { + {1061, 2, "edge" "collidable"}, + {1056, 2}, + {739, 2}, + 3 + } + { + {743, 2, "edge" "collidable"}, + {892, 2}, + {821, 2}, + 3 + } + { + {761, 2}, + {1023, 2}, + {1037, 2}, + 3 + } + { + {976, 2, "edge" "collidable"}, + {996, 2}, + {920, 2}, + 3 + } + { + {831, 2}, + {769, 2}, + {875, 2}, + 3 + } + { + {948, 2}, + {984, 2}, + {926, 2}, + 3 + } + { + {892, 2}, + {987, 2, "edge" "collidable"}, + {1040, 2}, + 3 + } + { + {982, 2}, + {947, 2}, + {998, 2}, + 3 + } + { + {907, 2}, + {988, 2, "edge" "collidable"}, + {983, 2}, + 3 + } + { + {1068, 2}, + {831, 2, "edge" "collidable"}, + {828, 2}, + 3 + } + { + {1038, 2, "edge" "collidable"}, + {887, 2}, + {930, 2}, + 3 + } + { + {908, 2}, + {960, 2, "edge" "collidable"}, + {784, 2, "edge" "collidable"}, + 3 + } + { + {976, 2}, + {920, 2, "edge" "collidable"}, + {918, 2}, + 3 + } + { + {979, 2, "edge" "collidable"}, + {976, 2}, + {918, 2}, + 3 + } + { + {772, 2}, + {875, 2}, + {880, 2}, + 3 + } + { + {911, 2, "edge" "collidable"}, + {907, 2}, + {983, 2}, + 3 + } + { + {1063, 2, "edge" "collidable"}, + {851, 2}, + {788, 2}, + 3 + } + { + {994, 2, "edge" "collidable"}, + {936, 2}, + {1011, 2}, + 3 + } + { + {1050, 2, "edge" "collidable"}, + {893, 2}, + {994, 2}, + 3 + } + { + {899, 2}, + {864, 2, "edge" "collidable"}, + {771, 2, "edge" "collidable"}, + 3 + } + { + {1072, 2}, + {1010, 2, "edge" "collidable"}, + {841, 2}, + 3 + } + { + {911, 2}, + {983, 2, "edge" "collidable"}, + {979, 2}, + 3 + } + { + {769, 2, "edge" "collidable"}, + {1029, 2}, + {875, 2}, + 3 + } + { + {911, 2}, + {979, 2}, + {918, 2}, + 3 + } + { + {1083, 2, "edge" "collidable"}, + {921, 2}, + {751, 2}, + 3 + } + { + {911, 2}, + {918, 2, "edge" "collidable"}, + {914, 2, "edge" "collidable"}, + 3 + } + { + {762, 2}, + {756, 2}, + {882, 2}, + 3 + } + { + {986, 2, "edge" "collidable"}, + {1018, 2}, + {999, 2}, + 3 + } + { + {827, 2}, + {957, 2}, + {964, 2}, + 3 + } + { + {993, 2, "edge" "collidable"}, + {747, 2}, + {856, 2}, + 3 + } + { + {1001, 2, "edge" "collidable"}, + {1000, 2, "edge" "collidable"}, + {1030, 2}, + 3 + } + { + {1028, 2, "edge" "collidable"}, + {1030, 2}, + {1001, 2}, + 3 + } + { + {1058, 2}, + {922, 2, "edge" "collidable"}, + {939, 2, "edge" "collidable"}, + 3 + } + { + {943, 2}, + {931, 2, "edge" "collidable"}, + {933, 2}, + 3 + } + { + {878, 2}, + {780, 2, "edge" "collidable"}, + {864, 2}, + 3 + } + { + {1083, 2}, + {751, 2, "edge" "collidable"}, + {766, 2}, + 3 + } + { + {927, 2}, + {767, 2}, + {894, 2}, + 3 + } + { + {798, 2}, + {859, 2, "edge" "collidable"}, + {1084, 2}, + 3 + } + { + {1061, 2}, + {739, 2, "edge" "collidable"}, + {1008, 2}, + 3 + } + { + {848, 2}, + {989, 2, "edge" "collidable"}, + {738, 2, "edge" "collidable"}, + 3 + } + { + {758, 2}, + {895, 2, "edge" "collidable"}, + {751, 2}, + 3 + } + { + {1024, 2, "edge" "collidable"}, + {1017, 2, "edge" "collidable"}, + {1016, 2}, + 3 + } + { + {1028, 2, "edge" "collidable"}, + {1024, 2}, + {1007, 2}, + 3 + } + { + {1007, 2}, + {1024, 2}, + {1016, 2}, + 3 + } + { + {1049, 2, "edge" "collidable"}, + {1060, 2}, + {1057, 2, "edge" "collidable"}, + 3 + } + { + {878, 2, "edge" "collidable"}, + {972, 2}, + {780, 2}, + 3 + } + { + {827, 2}, + {868, 2, "edge" "collidable"}, + {957, 2}, + 3 + } + { + {1050, 2}, + {865, 2, "edge" "collidable"}, + {736, 2}, + 3 + } + { + {827, 2}, + {964, 2, "edge" "collidable"}, + {1004, 2, "edge" "collidable"}, + 3 + } + { + {1007, 2}, + {1016, 2, "edge" "collidable"}, + {1014, 2, "edge" "collidable"}, + 3 + } + { + {984, 2, "edge" "collidable"}, + {863, 2, "edge" "collidable"}, + {956, 2}, + 3 + } + { + {848, 2, "edge" "collidable"}, + {879, 2}, + {753, 2}, + 3 + } + { + {1028, 2}, + {1007, 2, "edge" "collidable"}, + {1003, 2}, + 3 + } + { + {893, 2, "edge" "collidable"}, + {756, 2}, + {762, 2}, + 3 + } + { + {1001, 2}, + {1028, 2}, + {1003, 2}, + 3 + } + { + {778, 2}, + {941, 2, "edge" "collidable"}, + {986, 2}, + 3 + } + { + {991, 2}, + {791, 2, "edge" "collidable"}, + {821, 2}, + 3 + } + { + {842, 2}, + {735, 2, "edge" "collidable"}, + {982, 2}, + 3 + } + { + {1001, 2}, + {1003, 2, "edge" "collidable"}, + {1002, 2, "edge" "collidable"}, + 3 + } + { + {1058, 2, "edge" "collidable"}, + {966, 2}, + {757, 2}, + 3 + } + { + {776, 2, "edge" "collidable"}, + {823, 2}, + {745, 2, "edge" "collidable"}, + 3 + } + { + {793, 2, "edge" "collidable"}, + {1050, 2}, + {857, 2, "edge" "collidable"}, + 3 + } + { + {1035, 2, "edge" "collidable"}, + {1031, 2, "edge" "collidable"}, + {1051, 2}, + 3 + } + { + {757, 2, "edge" "collidable"}, + {846, 2}, + {823, 2}, + 3 + } + { + {969, 2, "edge" "collidable"}, + {890, 2, "edge" "collidable"}, + {745, 2}, + 3 + } + { + {968, 2, "edge" "collidable"}, + {971, 2}, + {859, 2}, + 3 + } + { + {1026, 2, "edge" "collidable"}, + {954, 2, "edge" "collidable"}, + {877, 2}, + 3 + } + { + {965, 2}, + {895, 2}, + {995, 2}, + 3 + } + { + {975, 2}, + {926, 2, "edge" "collidable"}, + {859, 2}, + 3 + } + { + {851, 2, "edge" "collidable"}, + {1020, 2, "edge" "collidable"}, + {788, 2}, + 3 + } + { + {927, 2}, + {894, 2, "edge" "collidable"}, + {886, 2, "edge" "collidable"}, + 3 + } + { + {747, 2, "edge" "collidable"}, + {900, 2}, + {980, 2}, + 3 + } + { + {921, 2, "edge" "collidable"}, + {758, 2}, + {751, 2}, + 3 + } + { + {794, 2}, + {1083, 2}, + {766, 2}, + 3 + } + { + {1059, 2, "edge" "collidable"}, + {1055, 2}, + {1051, 2}, + 3 + } + { + {848, 2}, + {753, 2}, + {989, 2}, + 3 + } + { + {1059, 2}, + {1051, 2, "edge" "collidable"}, + {1047, 2}, + 3 + } + { + {770, 2, "edge" "collidable"}, + {964, 2}, + {847, 2}, + 3 + } + { + {892, 2}, + {1040, 2}, + {821, 2}, + 3 + } + { + {1035, 2}, + {1073, 2, "edge" "collidable"}, + {1071, 2}, + 3 + } + { + {744, 2, "edge" "collidable"}, + {740, 2}, + {789, 2}, + 3 + } + { + {778, 2}, + {933, 2, "edge" "collidable"}, + {941, 2}, + 3 + } + { + {1039, 2, "edge" "collidable"}, + {1035, 2}, + {1071, 2}, + 3 + } + { + {891, 2}, + {999, 2, "edge" "collidable"}, + {883, 2, "edge" "collidable"}, + 3 + } + { + {1062, 2, "edge" "collidable"}, + {1059, 2}, + {1047, 2}, + 3 + } + { + {1039, 2}, + {1071, 2, "edge" "collidable"}, + {1067, 2}, + 3 + } + { + {764, 2}, + {773, 2, "edge" "collidable"}, + {768, 2, "edge" "collidable"}, + 3 + } + { + {877, 2, "edge" "collidable"}, + {929, 2}, + {737, 2}, + 3 + } + { + {1008, 2, "edge" "collidable"}, + {772, 2}, + {1027, 2}, + 3 + } + { + {749, 2}, + {775, 2, "edge" "collidable"}, + {773, 2}, + 3 + } + { + {924, 2}, + {742, 2, "edge" "collidable"}, + {905, 2}, + 3 + } + { + {794, 2, "edge" "collidable"}, + {965, 2}, + {1083, 2}, + 3 + } + { + {1041, 2, "edge" "collidable"}, + {1039, 2}, + {1067, 2}, + 3 + } + { + {826, 2, "edge" "collidable"}, + {998, 2}, + {1033, 2}, + 3 + } + { + {1061, 2}, + {1008, 2}, + {1076, 2}, + 3 + } + { + {913, 2}, + {844, 2, "edge" "collidable"}, + {791, 2}, + 3 + } + { + {1041, 2}, + {1067, 2, "edge" "collidable"}, + {1062, 2}, + 3 + } + { + {772, 2}, + {880, 2, "edge" "collidable"}, + {1027, 2}, + 3 + } + { + {1047, 2}, + {1062, 2}, + {1041, 2}, + 3 + } + { + {899, 2, "edge" "collidable"}, + {924, 2}, + {905, 2}, + 3 + } + { + {1041, 2}, + {1047, 2, "edge" "collidable"}, + {1044, 2, "edge" "collidable"}, + 3 + } + { + {869, 2}, + {781, 2, "edge" "collidable"}, + {997, 2, "edge" "collidable"}, + 3 + } + { + {879, 2, "edge" "collidable"}, + {850, 2, "edge" "collidable"}, + {753, 2}, + 3 + } + { + {1080, 2, "edge" "collidable"}, + {1079, 2, "edge" "collidable"}, + {1078, 2}, + 3 + } + { + {1080, 2}, + {1078, 2, "edge" "collidable"}, + {1064, 2}, + 3 + } + { + {1015, 2}, + {853, 2}, + {946, 2}, + 3 + } + { + {1025, 2, "edge" "collidable"}, + {799, 2, "edge" "collidable"}, + {944, 2}, + 3 + } + { + {1056, 2}, + {828, 2, "edge" "collidable"}, + {739, 2}, + 3 + } + { + {1080, 2}, + {1064, 2}, + {904, 2}, + 3 + } + { + {913, 2, "edge" "collidable"}, + {985, 2}, + {844, 2}, + 3 + } + { + {865, 2}, + {994, 2}, + {1011, 2, "edge" "collidable"}, + 3 + } + { + {904, 2}, + {1064, 2, "edge" "collidable"}, + {1053, 2}, + 3 + } + { + {761, 2}, + {1037, 2, "edge" "collidable"}, + {960, 2}, + 3 + } + { + {861, 2, "edge" "collidable"}, + {748, 2}, + {839, 2}, + 3 + } + { + {924, 2, "edge" "collidable"}, + {1042, 2, "edge" "collidable"}, + {742, 2}, + 3 + } + { + {949, 2}, + {797, 2, "edge" "collidable"}, + {906, 2}, + 3 + } + { + {904, 2}, + {1053, 2}, + {1005, 2, "edge" "collidable"}, + 3 + } + { + {927, 2, "edge" "collidable"}, + {794, 2}, + {766, 2}, + 3 + } + { + {746, 2}, + {783, 2, "edge" "collidable"}, + {779, 2}, + 3 + } + { + {1080, 2}, + {904, 2, "edge" "collidable"}, + {915, 2}, + 3 + } + { + {1060, 2}, + {946, 2, "edge" "collidable"}, + {1057, 2}, + 3 + } + { + {1005, 2}, + {1053, 2, "edge" "collidable"}, + {1065, 2}, + 3 + } + { + {953, 2, "edge" "collidable"}, + {1005, 2}, + {1065, 2}, + 3 + } + { + {1061, 2}, + {1076, 2, "edge" "collidable"}, + {1019, 2, "edge" "collidable"}, + 3 + } + { + {1060, 2, "edge" "collidable"}, + {1015, 2}, + {946, 2}, + 3 + } + { + {1045, 2, "edge" "collidable"}, + {990, 2, "edge" "collidable"}, + {898, 2}, + 3 + } + { + {999, 2}, + {1018, 2}, + {795, 2, "edge" "collidable"}, + 3 + } + { + {884, 2, "edge" "collidable"}, + {1036, 2}, + {750, 2}, + 3 + } + { + {1069, 2}, + {1021, 2, "edge" "collidable"}, + {777, 2, "edge" "collidable"}, + 3 + } + { + {1045, 2}, + {898, 2, "edge" "collidable"}, + {916, 2}, + 3 + } + { + {1009, 2, "edge" "collidable"}, + {953, 2}, + {1065, 2}, + 3 + } + { + {737, 2, "edge" "collidable"}, + {1026, 2}, + {877, 2}, + 3 + } + { + {861, 2}, + {839, 2}, + {935, 2}, + 3 + } + { + {764, 2}, + {755, 2}, + {773, 2}, + 3 + } + { + {1009, 2}, + {1065, 2, "edge" "collidable"}, + {1048, 2}, + 3 + } + { + {1066, 2}, + {1029, 2, "edge" "collidable"}, + {1070, 2}, + 3 + } + { + {916, 2, "edge" "collidable"}, + {852, 2, "edge" "collidable"}, + {774, 2}, + 3 + } + { + {929, 2, "edge" "collidable"}, + {855, 2, "edge" "collidable"}, + {737, 2}, + 3 + } + { + {927, 2}, + {752, 2, "edge" "collidable"}, + {767, 2}, + 3 + } + { + {1081, 2, "edge" "collidable"}, + {1080, 2}, + {915, 2}, + 3 + } + { + {1081, 2}, + {915, 2, "edge" "collidable"}, + {945, 2}, + 3 + } + { + {764, 2, "edge" "collidable"}, + {759, 2, "edge" "collidable"}, + {755, 2}, + 3 + } + { + {1054, 2}, + {1063, 2}, + {788, 2, "edge" "collidable"}, + 3 + } + { + {1050, 2}, + {736, 2}, + {857, 2}, + 3 + } + { + {756, 2, "edge" "collidable"}, + {1074, 2, "edge" "collidable"}, + {882, 2}, + 3 + } + { + {887, 2}, + {940, 2}, + {791, 2}, + 3 + } + { + {945, 2, "edge" "collidable"}, + {1009, 2}, + {1048, 2}, + 3 + } + { + {753, 2, "edge" "collidable"}, + {1063, 2}, + {1054, 2}, + 3 + } + { + {916, 2}, + {774, 2, "edge" "collidable"}, + {754, 2}, + 3 + } + { + {884, 2}, + {750, 2, "edge" "collidable"}, + {787, 2, "edge" "collidable"}, + 3 + } + { + {1081, 2}, + {945, 2}, + {1048, 2}, + 3 + } + { + {753, 2}, + {1054, 2, "edge" "collidable"}, + {989, 2}, + 3 + } + { + {912, 2, "edge" "collidable"}, + {984, 2}, + {822, 2}, + 3 + } + { + {940, 2, "edge" "collidable"}, + {913, 2}, + {791, 2}, + 3 + } + { + {1076, 2}, + {1008, 2}, + {1027, 2, "edge" "collidable"}, + 3 + } + { + {899, 2}, + {905, 2}, + {864, 2}, + 3 + } + { + {873, 2, "edge" "collidable"}, + {1081, 2}, + {1048, 2, "edge" "collidable"}, + 3 + } + { + {965, 2, "edge" "collidable"}, + {786, 2, "edge" "collidable"}, + {895, 2}, + 3 + } + { + {1045, 2}, + {916, 2}, + {754, 2}, + 3 + } + { + {792, 2, "edge" "collidable"}, + {1045, 2}, + {754, 2, "edge" "collidable"}, + 3 + } + { + {1055, 2, "edge" "collidable"}, + {1073, 2}, + {1035, 2}, + 3 + } + { + {1035, 2}, + {1051, 2}, + {1055, 2}, + 3 + } + { + {865, 2}, + {1050, 2}, + {994, 2}, + 3 + } + { + {912, 2}, + {968, 2}, + {798, 2, "edge" "collidable"}, + 3 + } + { + {968, 2}, + {859, 2}, + {798, 2}, + 3 + } + # Mesh "Mesh.001" + { + {1190, 2}, + {1095, 2, "edge" "collidable"}, + {1196, 2}, + 0 + } + { + {1097, 2, "edge" "collidable"}, + {1190, 2}, + {1196, 2}, + 0 + } + { + {1167, 2, "edge" "collidable"}, + {1134, 2}, + {1186, 2}, + 0 + } + { + {1134, 2}, + {1194, 2, "edge" "collidable"}, + {1186, 2}, + 0 + } + { + {1146, 2, "edge" "collidable"}, + {1126, 2}, + {1139, 2}, + 0 + } + { + {1092, 2, "edge" "collidable"}, + {1144, 2}, + {1192, 2}, + 0 + } + { + {1114, 2, "edge" "collidable"}, + {1206, 2}, + {1124, 2}, + 0 + } + { + {1206, 2}, + {1147, 2, "edge" "collidable"}, + {1124, 2}, + 0 + } + { + {1116, 2, "edge" "collidable"}, + {1101, 2}, + {1129, 2}, + 0 + } + { + {1184, 2, "edge" "collidable"}, + {1182, 2}, + {1107, 2}, + 0 + } + { + {1144, 2}, + {1121, 2, "edge" "collidable"}, + {1192, 2}, + 0 + } + { + {1187, 2}, + {1178, 2, "edge" "collidable"}, + {1104, 2}, + 0 + } + { + {1093, 2, "edge" "collidable"}, + {1187, 2}, + {1104, 2}, + 0 + } + { + {1203, 2}, + {1156, 2, "edge" "collidable"}, + {1099, 2}, + 0 + } + { + {1109, 2, "edge" "collidable"}, + {1203, 2}, + {1099, 2}, + 0 + } + { + {1128, 2}, + {1137, 2, "edge" "collidable"}, + {1201, 2}, + 0 + } + { + {1132, 2, "edge" "collidable"}, + {1128, 2}, + {1201, 2}, + 0 + } + { + {1182, 2, "edge" "collidable"}, + {1122, 2}, + {1091, 2}, + 0 + } + { + {1166, 2, "edge" "collidable"}, + {1167, 2}, + {1088, 2}, + 0 + } + { + {1168, 2, "edge" "collidable"}, + {1152, 2}, + {1180, 2}, + 0 + } + { + {1152, 2}, + {1179, 2, "edge" "collidable"}, + {1180, 2}, + 0 + } + { + {1163, 2}, + {1200, 2, "edge" "collidable"}, + {1135, 2}, + 0 + } + { + {1185, 2, "edge" "collidable"}, + {1163, 2}, + {1135, 2}, + 0 + } + { + {1176, 2}, + {1150, 2, "edge" "collidable"}, + {1178, 2}, + 0 + } + { + {1112, 2}, + {1191, 2, "edge" "collidable"}, + {1154, 2}, + 0 + } + { + {1090, 2, "edge" "collidable"}, + {1097, 2}, + {1197, 2}, + 0 + } + { + {1097, 2}, + {1196, 2, "edge" "collidable"}, + {1197, 2}, + 0 + } + { + {1138, 2}, + {1123, 2, "edge" "collidable"}, + {1160, 2}, + 0 + } + { + {1106, 2, "edge" "collidable"}, + {1138, 2}, + {1160, 2}, + 0 + } + { + {1130, 2, "edge" "collidable"}, + {1185, 2}, + {1096, 2}, + 0 + } + { + {1185, 2}, + {1135, 2, "edge" "collidable"}, + {1096, 2}, + 0 + } + { + {1101, 2, "edge" "collidable"}, + {1103, 2}, + {1162, 2}, + 0 + } + { + {1103, 2}, + {1108, 2, "edge" "collidable"}, + {1162, 2}, + 0 + } + { + {1205, 2, "edge" "collidable"}, + {1086, 2}, + {1141, 2}, + 0 + } + { + {1119, 2}, + {1086, 2, "edge" "collidable"}, + {1140, 2}, + 0 + } + { + {1165, 2, "edge" "collidable"}, + {1151, 2}, + {1198, 2}, + 0 + } + { + {1126, 2}, + {1105, 2, "edge" "collidable"}, + {1139, 2}, + 0 + } + { + {1176, 2, "edge" "collidable"}, + {1102, 2}, + {1150, 2}, + 0 + } + { + {1102, 2}, + {1131, 2, "edge" "collidable"}, + {1150, 2}, + 0 + } + { + {1169, 2}, + {1136, 2, "edge" "collidable"}, + {1156, 2}, + 0 + } + { + {1149, 2, "edge" "collidable"}, + {1118, 2}, + {1172, 2}, + 0 + } + { + {1134, 2, "edge" "collidable"}, + {1183, 2}, + {1194, 2}, + 0 + } + { + {1183, 2}, + {1115, 2, "edge" "collidable"}, + {1194, 2}, + 0 + } + { + {1102, 2, "edge" "collidable"}, + {1106, 2}, + {1131, 2}, + 0 + } + { + {1106, 2}, + {1160, 2, "edge" "collidable"}, + {1131, 2}, + 0 + } + { + {1114, 2}, + {1124, 2, "edge" "collidable"}, + {1100, 2}, + 0 + } + { + {1174, 2}, + {1100, 2, "edge" "collidable"}, + {1125, 2}, + 0 + } + { + {1092, 2}, + {1192, 2, "edge" "collidable"}, + {1200, 2}, + 0 + } + { + {1140, 2}, + {1177, 2, "edge" "collidable"}, + {1119, 2}, + 0 + } + { + {1089, 2, "edge" "collidable"}, + {1110, 2}, + {1098, 2, "edge" "collidable"}, + 0 + } + { + {1110, 2}, + {1171, 2, "edge" "collidable"}, + {1098, 2}, + 0 + } + { + {1140, 2, "edge" "collidable"}, + {1207, 2}, + {1177, 2}, + 0 + } + { + {1187, 2, "edge" "collidable"}, + {1176, 2}, + {1178, 2}, + 0 + } + { + {1155, 2, "edge" "collidable"}, + {1087, 2}, + {1133, 2}, + 0 + } + { + {1152, 2, "edge" "collidable"}, + {1189, 2}, + {1179, 2}, + 0 + } + { + {1189, 2}, + {1195, 2, "edge" "collidable"}, + {1179, 2}, + 0 + } + { + {1101, 2}, + {1162, 2, "edge" "collidable"}, + {1129, 2}, + 0 + } + { + {1203, 2, "edge" "collidable"}, + {1169, 2}, + {1156, 2}, + 0 + } + { + {1161, 2, "edge" "collidable"}, + {1117, 2}, + {1164, 2}, + 0 + } + { + {1117, 2}, + {1111, 2, "edge" "collidable"}, + {1164, 2}, + 0 + } + { + {1151, 2, "edge" "collidable"}, + {1155, 2}, + {1193, 2}, + 0 + } + { + {1155, 2}, + {1133, 2, "edge" "collidable"}, + {1193, 2}, + 0 + } + { + {1138, 2, "edge" "collidable"}, + {1116, 2}, + {1123, 2}, + 0 + } + { + {1116, 2}, + {1129, 2, "edge" "collidable"}, + {1123, 2}, + 0 + } + { + {1199, 2, "edge" "collidable"}, + {1181, 2}, + {1173, 2}, + 0 + } + { + {1181, 2}, + {1154, 2, "edge" "collidable"}, + {1173, 2}, + 0 + } + { + {1128, 2, "edge" "collidable"}, + {1142, 2}, + {1137, 2}, + 0 + } + { + {1142, 2}, + {1157, 2, "edge" "collidable"}, + {1137, 2}, + 0 + } + { + {1205, 2}, + {1141, 2, "edge" "collidable"}, + {1145, 2}, + 0 + } + { + {1087, 2}, + {1175, 2, "edge" "collidable"}, + {1133, 2}, + 0 + } + { + {1174, 2, "edge" "collidable"}, + {1114, 2}, + {1100, 2}, + 0 + } + { + {1151, 2}, + {1193, 2, "edge" "collidable"}, + {1198, 2}, + 0 + } + { + {1132, 2}, + {1201, 2, "edge" "collidable"}, + {1105, 2}, + 0 + } + { + {1126, 2, "edge" "collidable"}, + {1132, 2}, + {1105, 2}, + 0 + } + { + {1130, 2}, + {1096, 2, "edge" "collidable"}, + {1115, 2}, + 0 + } + { + {1183, 2, "edge" "collidable"}, + {1130, 2}, + {1115, 2}, + 0 + } + { + {1141, 2}, + {1086, 2}, + {1119, 2, "edge" "collidable"}, + 0 + } + { + {1163, 2, "edge" "collidable"}, + {1092, 2}, + {1200, 2}, + 0 + } + { + {1167, 2}, + {1186, 2, "edge" "collidable"}, + {1088, 2}, + 0 + } + { + {1090, 2}, + {1197, 2, "edge" "collidable"}, + {1147, 2}, + 0 + } + { + {1148, 2}, + {1113, 2, "edge" "collidable"}, + {1195, 2}, + 0 + } + { + {1189, 2, "edge" "collidable"}, + {1148, 2}, + {1195, 2}, + 0 + } + { + {1120, 2, "edge" "collidable"}, + {1205, 2}, + {1145, 2}, + 0 + } + { + {1209, 2, "edge" "collidable"}, + {1210, 2, "edge" "collidable"}, + {1208, 2}, + 0 + } + { + {1209, 2}, + {1208, 2, "edge" "collidable"}, + {1136, 2}, + 0 + } + { + {1136, 2}, + {1169, 2, "edge" "collidable"}, + {1209, 2}, + 0 + } + { + {1117, 2, "edge" "collidable"}, + {1146, 2}, + {1111, 2}, + 0 + } + { + {1146, 2}, + {1139, 2, "edge" "collidable"}, + {1111, 2}, + 0 + } + { + {1184, 2}, + {1107, 2, "edge" "collidable"}, + {1175, 2}, + 0 + } + { + {1159, 2}, + {1204, 2, "edge" "collidable"}, + {1095, 2}, + 0 + } + { + {1112, 2, "edge" "collidable"}, + {1143, 2}, + {1191, 2}, + 0 + } + { + {1190, 2, "edge" "collidable"}, + {1159, 2}, + {1095, 2}, + 0 + } + { + {1143, 2}, + {1170, 2, "edge" "collidable"}, + {1191, 2}, + 0 + } + { + {1087, 2, "edge" "collidable"}, + {1184, 2}, + {1175, 2}, + 0 + } + { + {1093, 2}, + {1104, 2, "edge" "collidable"}, + {1094, 2}, + 0 + } + { + {1127, 2, "edge" "collidable"}, + {1093, 2}, + {1094, 2}, + 0 + } + { + {1202, 2}, + {1188, 2, "edge" "collidable"}, + {1108, 2}, + 0 + } + { + {1103, 2, "edge" "collidable"}, + {1202, 2}, + {1108, 2}, + 0 + } + { + {1122, 2, "edge" "collidable"}, + {1174, 2}, + {1125, 2}, + 0 + } + { + {1127, 2}, + {1094, 2, "edge" "collidable"}, + {1204, 2}, + 0 + } + { + {1159, 2, "edge" "collidable"}, + {1127, 2}, + {1204, 2}, + 0 + } + { + {1110, 2, "edge" "collidable"}, + {1166, 2}, + {1171, 2}, + 0 + } + { + {1166, 2}, + {1088, 2, "edge" "collidable"}, + {1171, 2}, + 0 + } + { + {1149, 2}, + {1172, 2, "edge" "collidable"}, + {1121, 2}, + 0 + } + { + {1144, 2, "edge" "collidable"}, + {1149, 2}, + {1121, 2}, + 0 + } + { + {1181, 2, "edge" "collidable"}, + {1112, 2}, + {1154, 2}, + 0 + } + { + {1207, 2}, + {1158, 2, "edge" "collidable"}, + {1177, 2}, + 0 + } + { + {1142, 2, "edge" "collidable"}, + {1109, 2}, + {1157, 2}, + 0 + } + { + {1109, 2}, + {1099, 2, "edge" "collidable"}, + {1157, 2}, + 0 + } + { + {1182, 2}, + {1091, 2, "edge" "collidable"}, + {1107, 2}, + 0 + } + { + {1148, 2, "edge" "collidable"}, + {1165, 2}, + {1113, 2}, + 0 + } + { + {1165, 2}, + {1198, 2, "edge" "collidable"}, + {1113, 2}, + 0 + } + { + {1143, 2, "edge" "collidable"}, + {1120, 2}, + {1170, 2}, + 0 + } + { + {1168, 2}, + {1180, 2, "edge" "collidable"}, + {1158, 2}, + 0 + } + { + {1207, 2, "edge" "collidable"}, + {1168, 2}, + {1158, 2}, + 0 + } + { + {1120, 2}, + {1145, 2, "edge" "collidable"}, + {1170, 2}, + 0 + } + { + {1206, 2, "edge" "collidable"}, + {1090, 2}, + {1147, 2}, + 0 + } + { + {1122, 2}, + {1125, 2, "edge" "collidable"}, + {1091, 2}, + 0 + } + { + {1118, 2}, + {1153, 2, "edge" "collidable"}, + {1172, 2}, + 0 + } + { + {1118, 2, "edge" "collidable"}, + {1199, 2}, + {1153, 2}, + 0 + } + { + {1199, 2}, + {1173, 2, "edge" "collidable"}, + {1153, 2}, + 0 + } + { + {1202, 2, "edge" "collidable"}, + {1161, 2}, + {1188, 2}, + 0 + } + { + {1161, 2}, + {1164, 2, "edge" "collidable"}, + {1188, 2}, + 0 + } + # Mesh "Mesh.002" + { + {1328, 2, "edge" "collidable"}, + {1215, 2}, + {1212, 2}, + 1 + } + { + {1215, 2, "edge" "collidable"}, + {1211, 2, "edge" "collidable"}, + {1212, 2}, + 1 + } + { + {1221, 2, "edge" "collidable"}, + {1328, 2}, + {1213, 2}, + 1 + } + { + {1328, 2}, + {1212, 2, "edge" "collidable"}, + {1213, 2}, + 1 + } + { + {1378, 2, "edge" "collidable"}, + {1221, 2}, + {1214, 2}, + 1 + } + { + {1221, 2}, + {1213, 2, "edge" "collidable"}, + {1214, 2}, + 1 + } + { + {1263, 2, "edge" "collidable"}, + {1378, 2}, + {1216, 2}, + 1 + } + { + {1378, 2}, + {1214, 2, "edge" "collidable"}, + {1216, 2}, + 1 + } + { + {1266, 2, "edge" "collidable"}, + {1263, 2}, + {1217, 2}, + 1 + } + { + {1263, 2}, + {1216, 2, "edge" "collidable"}, + {1217, 2}, + 1 + } + { + {1322, 2, "edge" "collidable"}, + {1266, 2}, + {1218, 2}, + 1 + } + { + {1266, 2}, + {1217, 2, "edge" "collidable"}, + {1218, 2}, + 1 + } + { + {1356, 2, "edge" "collidable"}, + {1322, 2}, + {1220, 2}, + 1 + } + { + {1322, 2}, + {1218, 2, "edge" "collidable"}, + {1220, 2}, + 1 + } + { + {1382, 2}, + {1326, 2, "edge" "collidable"}, + {1327, 2}, + 1 + } + { + {1330, 2, "edge" "collidable"}, + {1382, 2}, + {1327, 2}, + 1 + } + { + {1367, 2, "edge" "collidable"}, + {1356, 2}, + {1222, 2}, + 1 + } + { + {1356, 2}, + {1220, 2, "edge" "collidable"}, + {1222, 2}, + 1 + } + { + {1381, 2, "edge" "collidable"}, + {1290, 2}, + {1341, 2}, + 1 + } + { + {1290, 2}, + {1340, 2, "edge" "collidable"}, + {1341, 2}, + 1 + } + { + {1393, 2}, + {1365, 2, "edge" "collidable"}, + {1368, 2}, + 1 + } + { + {1253, 2, "edge" "collidable"}, + {1367, 2}, + {1224, 2}, + 1 + } + { + {1367, 2}, + {1222, 2, "edge" "collidable"}, + {1224, 2}, + 1 + } + { + {1243, 2, "edge" "collidable"}, + {1253, 2}, + {1225, 2}, + 1 + } + { + {1253, 2}, + {1224, 2, "edge" "collidable"}, + {1225, 2}, + 1 + } + { + {1247, 2}, + {1316, 2, "edge" "collidable"}, + {1317, 2}, + 1 + } + { + {1389, 2, "edge" "collidable"}, + {1243, 2}, + {1226, 2}, + 1 + } + { + {1243, 2}, + {1225, 2, "edge" "collidable"}, + {1226, 2}, + 1 + } + { + {1383, 2, "edge" "collidable"}, + {1389, 2}, + {1227, 2}, + 1 + } + { + {1389, 2}, + {1226, 2, "edge" "collidable"}, + {1227, 2}, + 1 + } + { + {1271, 2, "edge" "collidable"}, + {1383, 2}, + {1228, 2}, + 1 + } + { + {1383, 2}, + {1227, 2, "edge" "collidable"}, + {1228, 2}, + 1 + } + { + {1386, 2}, + {1370, 2, "edge" "collidable"}, + {1372, 2}, + 1 + } + { + {1395, 2, "edge" "collidable"}, + {1386, 2}, + {1372, 2, "edge" "collidable"}, + 1 + } + { + {1294, 2, "edge" "collidable"}, + {1271, 2}, + {1229, 2}, + 1 + } + { + {1271, 2}, + {1228, 2, "edge" "collidable"}, + {1229, 2}, + 1 + } + { + {1394, 2, "edge" "collidable"}, + {1377, 2}, + {1331, 2}, + 1 + } + { + {1377, 2}, + {1329, 2, "edge" "collidable"}, + {1331, 2}, + 1 + } + { + {1237, 2, "edge" "collidable"}, + {1294, 2}, + {1230, 2}, + 1 + } + { + {1294, 2}, + {1229, 2, "edge" "collidable"}, + {1230, 2}, + 1 + } + { + {1268, 2, "edge" "collidable"}, + {1237, 2}, + {1232, 2}, + 1 + } + { + {1237, 2}, + {1230, 2, "edge" "collidable"}, + {1232, 2}, + 1 + } + { + {1376, 2}, + {1368, 2, "edge" "collidable"}, + {1370, 2}, + 1 + } + { + {1386, 2, "edge" "collidable"}, + {1376, 2}, + {1370, 2}, + 1 + } + { + {1290, 2, "edge" "collidable"}, + {1359, 2}, + {1340, 2}, + 1 + } + { + {1359, 2}, + {1338, 2, "edge" "collidable"}, + {1340, 2}, + 1 + } + { + {1392, 2, "edge" "collidable"}, + {1268, 2}, + {1233, 2}, + 1 + } + { + {1268, 2}, + {1232, 2, "edge" "collidable"}, + {1233, 2}, + 1 + } + { + {1284, 2, "edge" "collidable"}, + {1394, 2}, + {1333, 2}, + 1 + } + { + {1394, 2}, + {1331, 2, "edge" "collidable"}, + {1333, 2}, + 1 + } + { + {1369, 2, "edge" "collidable"}, + {1392, 2}, + {1234, 2}, + 1 + } + { + {1392, 2}, + {1233, 2, "edge" "collidable"}, + {1234, 2}, + 1 + } + { + {1361, 2}, + {1317, 2, "edge" "collidable"}, + {1319, 2}, + 1 + } + { + {1379, 2, "edge" "collidable"}, + {1361, 2}, + {1319, 2}, + 1 + } + { + {1299, 2}, + {1323, 2, "edge" "collidable"}, + {1324, 2}, + 1 + } + { + {1276, 2, "edge" "collidable"}, + {1299, 2}, + {1324, 2}, + 1 + } + { + {1373, 2, "edge" "collidable"}, + {1369, 2}, + {1236, 2}, + 1 + } + { + {1369, 2}, + {1234, 2, "edge" "collidable"}, + {1236, 2}, + 1 + } + { + {1235, 2, "edge" "collidable"}, + {1373, 2}, + {1238, 2}, + 1 + } + { + {1373, 2}, + {1236, 2, "edge" "collidable"}, + {1238, 2}, + 1 + } + { + {1275, 2}, + {1349, 2, "edge" "collidable"}, + {1351, 2}, + 1 + } + { + {1313, 2, "edge" "collidable"}, + {1275, 2}, + {1351, 2}, + 1 + } + { + {1371, 2, "edge" "collidable"}, + {1235, 2}, + {1241, 2}, + 1 + } + { + {1235, 2}, + {1238, 2, "edge" "collidable"}, + {1241, 2}, + 1 + } + { + {1278, 2, "edge" "collidable"}, + {1371, 2}, + {1244, 2}, + 1 + } + { + {1371, 2}, + {1241, 2, "edge" "collidable"}, + {1244, 2}, + 1 + } + { + {1310, 2, "edge" "collidable"}, + {1278, 2}, + {1245, 2}, + 1 + } + { + {1278, 2}, + {1244, 2, "edge" "collidable"}, + {1245, 2}, + 1 + } + { + {1377, 2, "edge" "collidable"}, + {1330, 2}, + {1329, 2}, + 1 + } + { + {1330, 2}, + {1327, 2, "edge" "collidable"}, + {1329, 2}, + 1 + } + { + {1336, 2, "edge" "collidable"}, + {1384, 2}, + {1355, 2}, + 1 + } + { + {1384, 2}, + {1354, 2, "edge" "collidable"}, + {1355, 2}, + 1 + } + { + {1239, 2, "edge" "collidable"}, + {1310, 2}, + {1246, 2}, + 1 + } + { + {1310, 2}, + {1245, 2, "edge" "collidable"}, + {1246, 2}, + 1 + } + { + {1387, 2, "edge" "collidable"}, + {1332, 2}, + {1321, 2}, + 1 + } + { + {1364, 2, "edge" "collidable"}, + {1239, 2}, + {1248, 2}, + 1 + } + { + {1239, 2}, + {1246, 2, "edge" "collidable"}, + {1248, 2}, + 1 + } + { + {1346, 2, "edge" "collidable"}, + {1364, 2}, + {1251, 2}, + 1 + } + { + {1364, 2}, + {1248, 2, "edge" "collidable"}, + {1251, 2}, + 1 + } + { + {1346, 2}, + {1251, 2, "edge" "collidable"}, + {1254, 2}, + 1 + } + { + {1242, 2, "edge" "collidable"}, + {1346, 2}, + {1254, 2}, + 1 + } + { + {1242, 2}, + {1254, 2, "edge" "collidable"}, + {1256, 2}, + 1 + } + { + {1360, 2, "edge" "collidable"}, + {1242, 2}, + {1257, 2}, + 1 + } + { + {1242, 2}, + {1256, 2, "edge" "collidable"}, + {1257, 2}, + 1 + } + { + {1219, 2}, + {1347, 2, "edge" "collidable"}, + {1349, 2}, + 1 + } + { + {1366, 2, "edge" "collidable"}, + {1284, 2}, + {1335, 2}, + 1 + } + { + {1363, 2, "edge" "collidable"}, + {1360, 2}, + {1258, 2}, + 1 + } + { + {1360, 2}, + {1257, 2, "edge" "collidable"}, + {1258, 2}, + 1 + } + { + {1293, 2, "edge" "collidable"}, + {1363, 2}, + {1260, 2}, + 1 + } + { + {1363, 2}, + {1258, 2, "edge" "collidable"}, + {1260, 2}, + 1 + } + { + {1299, 2, "edge" "collidable"}, + {1387, 2}, + {1323, 2}, + 1 + } + { + {1387, 2}, + {1321, 2, "edge" "collidable"}, + {1323, 2}, + 1 + } + { + {1276, 2}, + {1324, 2, "edge" "collidable"}, + {1325, 2}, + 1 + } + { + {1259, 2, "edge" "collidable"}, + {1276, 2}, + {1325, 2}, + 1 + } + { + {1375, 2, "edge" "collidable"}, + {1293, 2}, + {1262, 2}, + 1 + } + { + {1293, 2}, + {1260, 2, "edge" "collidable"}, + {1262, 2}, + 1 + } + { + {1345, 2, "edge" "collidable"}, + {1375, 2}, + {1264, 2}, + 1 + } + { + {1375, 2}, + {1262, 2, "edge" "collidable"}, + {1264, 2}, + 1 + } + { + {1273, 2, "edge" "collidable"}, + {1345, 2}, + {1265, 2}, + 1 + } + { + {1345, 2}, + {1264, 2, "edge" "collidable"}, + {1265, 2}, + 1 + } + { + {1281, 2, "edge" "collidable"}, + {1273, 2}, + {1267, 2}, + 1 + } + { + {1273, 2}, + {1265, 2, "edge" "collidable"}, + {1267, 2}, + 1 + } + { + {1250, 2, "edge" "collidable"}, + {1281, 2}, + {1270, 2}, + 1 + } + { + {1281, 2}, + {1267, 2, "edge" "collidable"}, + {1270, 2}, + 1 + } + { + {1284, 2}, + {1333, 2, "edge" "collidable"}, + {1335, 2}, + 1 + } + { + {1308, 2, "edge" "collidable"}, + {1250, 2}, + {1272, 2}, + 1 + } + { + {1250, 2}, + {1270, 2, "edge" "collidable"}, + {1272, 2}, + 1 + } + { + {1374, 2, "edge" "collidable"}, + {1308, 2}, + {1274, 2}, + 1 + } + { + {1308, 2}, + {1272, 2, "edge" "collidable"}, + {1274, 2}, + 1 + } + { + {1350, 2, "edge" "collidable"}, + {1374, 2}, + {1277, 2}, + 1 + } + { + {1374, 2}, + {1274, 2, "edge" "collidable"}, + {1277, 2}, + 1 + } + { + {1384, 2, "edge" "collidable"}, + {1313, 2}, + {1354, 2}, + 1 + } + { + {1313, 2}, + {1351, 2, "edge" "collidable"}, + {1354, 2}, + 1 + } + { + {1261, 2, "edge" "collidable"}, + {1350, 2}, + {1279, 2}, + 1 + } + { + {1350, 2}, + {1277, 2, "edge" "collidable"}, + {1279, 2}, + 1 + } + { + {1288, 2, "edge" "collidable"}, + {1231, 2}, + {1362, 2}, + 1 + } + { + {1231, 2}, + {1358, 2, "edge" "collidable"}, + {1362, 2}, + 1 + } + { + {1380, 2, "edge" "collidable"}, + {1261, 2}, + {1280, 2}, + 1 + } + { + {1261, 2}, + {1279, 2, "edge" "collidable"}, + {1280, 2}, + 1 + } + { + {1292, 2, "edge" "collidable"}, + {1380, 2}, + {1282, 2}, + 1 + } + { + {1380, 2}, + {1280, 2, "edge" "collidable"}, + {1282, 2}, + 1 + } + { + {1339, 2, "edge" "collidable"}, + {1292, 2}, + {1283, 2}, + 1 + } + { + {1292, 2}, + {1282, 2, "edge" "collidable"}, + {1283, 2}, + 1 + } + { + {1219, 2, "edge" "collidable"}, + {1240, 2}, + {1347, 2}, + 1 + } + { + {1240, 2}, + {1344, 2, "edge" "collidable"}, + {1347, 2}, + 1 + } + { + {1348, 2, "edge" "collidable"}, + {1339, 2}, + {1286, 2}, + 1 + } + { + {1339, 2}, + {1283, 2, "edge" "collidable"}, + {1286, 2}, + 1 + } + { + {1304, 2, "edge" "collidable"}, + {1348, 2}, + {1287, 2}, + 1 + } + { + {1348, 2}, + {1286, 2, "edge" "collidable"}, + {1287, 2}, + 1 + } + { + {1388, 2, "edge" "collidable"}, + {1304, 2}, + {1289, 2}, + 1 + } + { + {1304, 2}, + {1287, 2, "edge" "collidable"}, + {1289, 2}, + 1 + } + { + {1342, 2, "edge" "collidable"}, + {1388, 2}, + {1291, 2}, + 1 + } + { + {1388, 2}, + {1289, 2, "edge" "collidable"}, + {1291, 2}, + 1 + } + { + {1359, 2, "edge" "collidable"}, + {1366, 2}, + {1338, 2}, + 1 + } + { + {1366, 2}, + {1335, 2, "edge" "collidable"}, + {1338, 2}, + 1 + } + { + {1288, 2}, + {1362, 2, "edge" "collidable"}, + {1365, 2}, + 1 + } + { + {1393, 2, "edge" "collidable"}, + {1288, 2}, + {1365, 2}, + 1 + } + { + {1269, 2, "edge" "collidable"}, + {1342, 2}, + {1295, 2}, + 1 + } + { + {1342, 2}, + {1291, 2, "edge" "collidable"}, + {1295, 2}, + 1 + } + { + {1318, 2}, + {1357, 2, "edge" "collidable"}, + {1358, 2}, + 1 + } + { + {1231, 2, "edge" "collidable"}, + {1318, 2}, + {1358, 2}, + 1 + } + { + {1255, 2, "edge" "collidable"}, + {1269, 2}, + {1296, 2}, + 1 + } + { + {1269, 2}, + {1295, 2, "edge" "collidable"}, + {1296, 2}, + 1 + } + { + {1391, 2, "edge" "collidable"}, + {1255, 2}, + {1297, 2}, + 1 + } + { + {1255, 2}, + {1296, 2, "edge" "collidable"}, + {1297, 2}, + 1 + } + { + {1385, 2, "edge" "collidable"}, + {1391, 2}, + {1298, 2}, + 1 + } + { + {1391, 2}, + {1297, 2, "edge" "collidable"}, + {1298, 2}, + 1 + } + { + {1337, 2, "edge" "collidable"}, + {1385, 2}, + {1300, 2}, + 1 + } + { + {1385, 2}, + {1298, 2, "edge" "collidable"}, + {1300, 2}, + 1 + } + { + {1343, 2, "edge" "collidable"}, + {1337, 2}, + {1301, 2}, + 1 + } + { + {1337, 2}, + {1300, 2, "edge" "collidable"}, + {1301, 2}, + 1 + } + { + {1352, 2, "edge" "collidable"}, + {1343, 2}, + {1303, 2}, + 1 + } + { + {1343, 2}, + {1301, 2, "edge" "collidable"}, + {1303, 2}, + 1 + } + { + {1332, 2, "edge" "collidable"}, + {1379, 2}, + {1320, 2}, + 1 + } + { + {1379, 2}, + {1319, 2, "edge" "collidable"}, + {1320, 2}, + 1 + } + { + {1275, 2, "edge" "collidable"}, + {1219, 2}, + {1349, 2}, + 1 + } + { + {1302, 2, "edge" "collidable"}, + {1352, 2}, + {1305, 2}, + 1 + } + { + {1352, 2}, + {1303, 2, "edge" "collidable"}, + {1305, 2}, + 1 + } + { + {1390, 2, "edge" "collidable"}, + {1302, 2}, + {1306, 2}, + 1 + } + { + {1302, 2}, + {1305, 2, "edge" "collidable"}, + {1306, 2}, + 1 + } + { + {1376, 2, "edge" "collidable"}, + {1393, 2}, + {1368, 2}, + 1 + } + { + {1285, 2, "edge" "collidable"}, + {1390, 2}, + {1307, 2}, + 1 + } + { + {1390, 2}, + {1306, 2, "edge" "collidable"}, + {1307, 2}, + 1 + } + { + {1336, 2}, + {1355, 2, "edge" "collidable"}, + {1357, 2}, + 1 + } + { + {1318, 2, "edge" "collidable"}, + {1336, 2}, + {1357, 2}, + 1 + } + { + {1353, 2, "edge" "collidable"}, + {1285, 2}, + {1309, 2}, + 1 + } + { + {1285, 2}, + {1307, 2, "edge" "collidable"}, + {1309, 2}, + 1 + } + { + {1240, 2, "edge" "collidable"}, + {1381, 2}, + {1344, 2}, + 1 + } + { + {1381, 2}, + {1341, 2, "edge" "collidable"}, + {1344, 2}, + 1 + } + { + {1252, 2, "edge" "collidable"}, + {1353, 2}, + {1311, 2}, + 1 + } + { + {1353, 2}, + {1309, 2, "edge" "collidable"}, + {1311, 2}, + 1 + } + { + {1223, 2, "edge" "collidable"}, + {1252, 2}, + {1312, 2}, + 1 + } + { + {1252, 2}, + {1311, 2, "edge" "collidable"}, + {1312, 2}, + 1 + } + { + {1361, 2, "edge" "collidable"}, + {1247, 2}, + {1317, 2}, + 1 + } + { + {1334, 2, "edge" "collidable"}, + {1223, 2}, + {1314, 2}, + 1 + } + { + {1223, 2}, + {1312, 2, "edge" "collidable"}, + {1314, 2}, + 1 + } + { + {1332, 2}, + {1320, 2, "edge" "collidable"}, + {1321, 2}, + 1 + } + { + {1249, 2, "edge" "collidable"}, + {1334, 2}, + {1315, 2}, + 1 + } + { + {1334, 2}, + {1314, 2, "edge" "collidable"}, + {1315, 2}, + 1 + } + { + {1259, 2}, + {1325, 2, "edge" "collidable"}, + {1326, 2}, + 1 + } + { + {1382, 2, "edge" "collidable"}, + {1259, 2}, + {1326, 2}, + 1 + } + { + {1247, 2, "edge" "collidable"}, + {1249, 2}, + {1316, 2}, + 1 + } + { + {1249, 2}, + {1315, 2, "edge" "collidable"}, + {1316, 2}, + 1 + } + # Mesh "Mesh.003" + { + {1515, 2, "edge" "collidable"}, + {1433, 2}, + {1452, 2}, + 0 + } + { + {1433, 2}, + {1554, 2, "edge" "collidable"}, + {1452, 2}, + 0 + } + { + {1425, 2}, + {1560, 2, "edge" "collidable"}, + {1562, 2}, + 0 + } + { + {1512, 2, "edge" "collidable"}, + {1425, 2}, + {1562, 2}, + 0 + } + { + {1463, 2}, + {1572, 2, "edge" "collidable"}, + {1575, 2}, + 0 + } + { + {1472, 2, "edge" "collidable"}, + {1463, 2}, + {1575, 2}, + 0 + } + { + {1520, 2}, + {1568, 2, "edge" "collidable"}, + {1570, 2}, + 0 + } + { + {1411, 2, "edge" "collidable"}, + {1520, 2}, + {1570, 2}, + 0 + } + { + {1524, 2}, + {1581, 2, "edge" "collidable"}, + {1584, 2}, + 0 + } + { + {1478, 2, "edge" "collidable"}, + {1524, 2}, + {1584, 2}, + 0 + } + { + {1542, 2}, + {1563, 2, "edge" "collidable"}, + {1564, 2}, + 0 + } + { + {1551, 2, "edge" "collidable"}, + {1468, 2}, + {1482, 2}, + 0 + } + { + {1400, 2, "edge" "collidable"}, + {1505, 2}, + {1579, 2}, + 0 + } + { + {1505, 2}, + {1422, 2, "edge" "collidable"}, + {1579, 2}, + 0 + } + { + {1486, 2}, + {1535, 2, "edge" "collidable"}, + {1538, 2}, + 0 + } + { + {1506, 2, "edge" "collidable"}, + {1424, 2}, + {1566, 2}, + 0 + } + { + {1424, 2}, + {1564, 2, "edge" "collidable"}, + {1566, 2}, + 0 + } + { + {1519, 2, "edge" "collidable"}, + {1481, 2}, + {1398, 2}, + 0 + } + { + {1502, 2}, + {1403, 2, "edge" "collidable"}, + {1513, 2}, + 0 + } + { + {1571, 2, "edge" "collidable"}, + {1502, 2}, + {1513, 2}, + 0 + } + { + {1574, 2}, + {1469, 2, "edge" "collidable"}, + {1522, 2}, + 0 + } + { + {1409, 2, "edge" "collidable"}, + {1464, 2}, + {1528, 2}, + 0 + } + { + {1464, 2, "edge" "collidable"}, + {1526, 2, "edge" "collidable"}, + {1528, 2}, + 0 + } + { + {1449, 2}, + {1582, 2, "edge" "collidable"}, + {1561, 2}, + 0 + } + { + {1548, 2}, + {1589, 2, "edge" "collidable"}, + {1399, 2}, + 0 + } + { + {1509, 2, "edge" "collidable"}, + {1548, 2}, + {1590, 2, "edge" "collidable"}, + 0 + } + { + {1406, 2, "edge" "collidable"}, + {1587, 2}, + {1488, 2}, + 0 + } + { + {1577, 2, "edge" "collidable"}, + {1500, 2}, + {1499, 2}, + 0 + } + { + {1502, 2, "edge" "collidable"}, + {1402, 2}, + {1403, 2}, + 0 + } + { + {1456, 2}, + {1448, 2, "edge" "collidable"}, + {1518, 2}, + 0 + } + { + {1451, 2, "edge" "collidable"}, + {1456, 2}, + {1518, 2}, + 0 + } + { + {1494, 2}, + {1454, 2, "edge" "collidable"}, + {1476, 2}, + 0 + } + { + {1463, 2, "edge" "collidable"}, + {1411, 2}, + {1572, 2}, + 0 + } + { + {1411, 2}, + {1570, 2, "edge" "collidable"}, + {1572, 2}, + 0 + } + { + {1436, 2}, + {1476, 2, "edge" "collidable"}, + {1431, 2}, + 0 + } + { + {1473, 2, "edge" "collidable"}, + {1436, 2}, + {1431, 2}, + 0 + } + { + {1486, 2, "edge" "collidable"}, + {1428, 2}, + {1535, 2}, + 0 + } + { + {1519, 2}, + {1398, 2, "edge" "collidable"}, + {1444, 2}, + 0 + } + { + {1500, 2, "edge" "collidable"}, + {1519, 2}, + {1444, 2}, + 0 + } + { + {1423, 2}, + {1561, 2, "edge" "collidable"}, + {1483, 2}, + 0 + } + { + {1507, 2}, + {1532, 2, "edge" "collidable"}, + {1498, 2}, + 0 + } + { + {1466, 2}, + {1573, 2, "edge" "collidable"}, + {1487, 2}, + 0 + } + { + {1517, 2, "edge" "collidable"}, + {1466, 2}, + {1487, 2}, + 0 + } + { + {1480, 2, "edge" "collidable"}, + {1459, 2}, + {1536, 2}, + 0 + } + { + {1485, 2}, + {1510, 2, "edge" "collidable"}, + {1493, 2}, + 0 + } + { + {1401, 2}, + {1588, 2, "edge" "collidable"}, + {1554, 2}, + 0 + } + { + {1489, 2, "edge" "collidable"}, + {1571, 2}, + {1441, 2}, + 0 + } + { + {1412, 2}, + {1558, 2, "edge" "collidable"}, + {1559, 2}, + 0 + } + { + {1514, 2, "edge" "collidable"}, + {1412, 2}, + {1559, 2}, + 0 + } + { + {1503, 2}, + {1567, 2, "edge" "collidable"}, + {1568, 2}, + 0 + } + { + {1520, 2, "edge" "collidable"}, + {1503, 2}, + {1568, 2}, + 0 + } + { + {1417, 2}, + {1432, 2, "edge" "collidable"}, + {1454, 2}, + 0 + } + { + {1494, 2, "edge" "collidable"}, + {1417, 2}, + {1454, 2}, + 0 + } + { + {1434, 2, "edge" "collidable"}, + {1491, 2}, + {1553, 2}, + 0 + } + { + {1548, 2, "edge" "collidable"}, + {1477, 2}, + {1583, 2}, + 0 + } + { + {1477, 2}, + {1408, 2, "edge" "collidable"}, + {1583, 2}, + 0 + } + { + {1471, 2}, + {1396, 2, "edge" "collidable"}, + {1475, 2}, + 0 + } + { + {1456, 2, "edge" "collidable"}, + {1525, 2}, + {1448, 2}, + 0 + } + { + {1525, 2}, + {1446, 2, "edge" "collidable"}, + {1448, 2}, + 0 + } + { + {1443, 2}, + {1497, 2, "edge" "collidable"}, + {1460, 2}, + 0 + } + { + {1546, 2}, + {1437, 2, "edge" "collidable"}, + {1415, 2}, + 0 + } + { + {1466, 2, "edge" "collidable"}, + {1406, 2}, + {1573, 2}, + 0 + } + { + {1406, 2}, + {1488, 2, "edge" "collidable"}, + {1573, 2}, + 0 + } + { + {1462, 2, "edge" "collidable"}, + {1409, 2}, + {1530, 2}, + 0 + } + { + {1409, 2}, + {1528, 2, "edge" "collidable"}, + {1530, 2}, + 0 + } + { + {1587, 2, "edge" "collidable"}, + {1447, 2}, + {1556, 2}, + 0 + } + { + {1447, 2}, + {1498, 2, "edge" "collidable"}, + {1556, 2}, + 0 + } + { + {1517, 2}, + {1487, 2, "edge" "collidable"}, + {1440, 2}, + 0 + } + { + {1418, 2, "edge" "collidable"}, + {1517, 2}, + {1440, 2}, + 0 + } + { + {1425, 2, "edge" "collidable"}, + {1514, 2}, + {1560, 2}, + 0 + } + { + {1580, 2, "edge" "collidable"}, + {1485, 2}, + {1493, 2}, + 0 + } + { + {1462, 2}, + {1530, 2, "edge" "collidable"}, + {1531, 2}, + 0 + } + { + {1511, 2, "edge" "collidable"}, + {1474, 2}, + {1578, 2}, + 0 + } + { + {1474, 2}, + {1492, 2, "edge" "collidable"}, + {1578, 2}, + 0 + } + { + {1503, 2, "edge" "collidable"}, + {1506, 2}, + {1567, 2}, + 0 + } + { + {1506, 2}, + {1566, 2, "edge" "collidable"}, + {1567, 2}, + 0 + } + { + {1442, 2, "edge" "collidable"}, + {1478, 2}, + {1585, 2}, + 0 + } + { + {1478, 2}, + {1584, 2, "edge" "collidable"}, + {1585, 2}, + 0 + } + { + {1496, 2, "edge" "collidable"}, + {1471, 2}, + {1475, 2}, + 0 + } + { + {1516, 2}, + {1527, 2, "edge" "collidable"}, + {1458, 2}, + 0 + } + { + {1430, 2, "edge" "collidable"}, + {1529, 2}, + {1549, 2}, + 0 + } + { + {1439, 2, "edge" "collidable"}, + {1462, 2}, + {1531, 2}, + 0 + } + { + {1468, 2, "edge" "collidable"}, + {1565, 2}, + {1550, 2}, + 0 + } + { + {1459, 2, "edge" "collidable"}, + {1479, 2}, + {1465, 2}, + 0 + } + { + {1524, 2, "edge" "collidable"}, + {1484, 2}, + {1581, 2}, + 0 + } + { + {1484, 2}, + {1576, 2, "edge" "collidable"}, + {1581, 2}, + 0 + } + { + {1445, 2, "edge" "collidable"}, + {1443, 2}, + {1460, 2}, + 0 + } + { + {1508, 2, "edge" "collidable"}, + {1434, 2}, + {1555, 2}, + 0 + } + { + {1434, 2}, + {1553, 2, "edge" "collidable"}, + {1555, 2}, + 0 + } + { + {1540, 2, "edge" "collidable"}, + {1486, 2}, + {1538, 2}, + 0 + } + { + {1540, 2}, + {1538, 2, "edge" "collidable"}, + {1541, 2}, + 0 + } + { + {1407, 2, "edge" "collidable"}, + {1540, 2}, + {1541, 2}, + 0 + } + { + {1580, 2}, + {1493, 2, "edge" "collidable"}, + {1396, 2}, + 0 + } + { + {1571, 2}, + {1513, 2, "edge" "collidable"}, + {1441, 2}, + 0 + } + { + {1586, 2, "edge" "collidable"}, + {1451, 2}, + {1569, 2}, + 0 + } + { + {1451, 2}, + {1518, 2, "edge" "collidable"}, + {1569, 2}, + 0 + } + { + {1501, 2, "edge" "collidable"}, + {1418, 2}, + {1420, 2}, + 0 + } + { + {1418, 2}, + {1440, 2, "edge" "collidable"}, + {1420, 2}, + 0 + } + { + {1542, 2, "edge" "collidable"}, + {1512, 2}, + {1563, 2}, + 0 + } + { + {1512, 2}, + {1562, 2, "edge" "collidable"}, + {1563, 2}, + 0 + } + { + {1397, 2, "edge" "collidable"}, + {1407, 2}, + {1543, 2}, + 0 + } + { + {1491, 2}, + {1552, 2, "edge" "collidable"}, + {1553, 2}, + 0 + } + { + {1565, 2, "edge" "collidable"}, + {1546, 2}, + {1415, 2}, + 0 + } + { + {1447, 2, "edge" "collidable"}, + {1507, 2}, + {1498, 2}, + 0 + } + { + {1515, 2}, + {1452, 2, "edge" "collidable"}, + {1422, 2}, + 0 + } + { + {1505, 2, "edge" "collidable"}, + {1515, 2}, + {1422, 2}, + 0 + } + { + {1428, 2}, + {1534, 2, "edge" "collidable"}, + {1535, 2}, + 0 + } + { + {1438, 2}, + {1495, 2, "edge" "collidable"}, + {1533, 2}, + 0 + } + { + {1523, 2}, + {1533, 2, "edge" "collidable"}, + {1432, 2}, + 0 + } + { + {1417, 2, "edge" "collidable"}, + {1523, 2}, + {1432, 2}, + 0 + } + { + {1459, 2}, + {1465, 2, "edge" "collidable"}, + {1536, 2}, + 0 + } + { + {1400, 2}, + {1579, 2, "edge" "collidable"}, + {1446, 2}, + 0 + } + { + {1525, 2, "edge" "collidable"}, + {1400, 2}, + {1446, 2}, + 0 + } + { + {1586, 2}, + {1569, 2, "edge" "collidable"}, + {1532, 2}, + 0 + } + { + {1507, 2, "edge" "collidable"}, + {1586, 2}, + {1532, 2}, + 0 + } + { + {1577, 2}, + {1499, 2, "edge" "collidable"}, + {1426, 2}, + 0 + } + { + {1565, 2}, + {1415, 2, "edge" "collidable"}, + {1550, 2}, + 0 + } + { + {1419, 2, "edge" "collidable"}, + {1435, 2}, + {1539, 2}, + 0 + } + { + {1435, 2}, + {1421, 2, "edge" "collidable"}, + {1539, 2}, + 0 + } + { + {1477, 2, "edge" "collidable"}, + {1414, 2}, + {1408, 2}, + 0 + } + { + {1414, 2}, + {1450, 2, "edge" "collidable"}, + {1408, 2}, + 0 + } + { + {1412, 2}, + {1557, 2, "edge" "collidable"}, + {1558, 2}, + 0 + } + { + {1404, 2, "edge" "collidable"}, + {1511, 2}, + {1461, 2}, + 0 + } + { + {1511, 2}, + {1578, 2, "edge" "collidable"}, + {1461, 2}, + 0 + } + { + {1514, 2}, + {1559, 2, "edge" "collidable"}, + {1560, 2}, + 0 + } + { + {1412, 2, "edge" "collidable"}, + {1508, 2}, + {1557, 2}, + 0 + } + { + {1508, 2}, + {1555, 2, "edge" "collidable"}, + {1557, 2}, + 0 + } + { + {1521, 2, "edge" "collidable"}, + {1577, 2}, + {1426, 2}, + 0 + } + { + {1496, 2}, + {1475, 2, "edge" "collidable"}, + {1469, 2}, + 0 + } + { + {1574, 2, "edge" "collidable"}, + {1496, 2}, + {1469, 2}, + 0 + } + { + {1587, 2}, + {1556, 2, "edge" "collidable"}, + {1488, 2}, + 0 + } + { + {1479, 2}, + {1537, 2, "edge" "collidable"}, + {1465, 2}, + 0 + } + { + {1407, 2}, + {1541, 2, "edge" "collidable"}, + {1543, 2}, + 0 + } + { + {1529, 2, "edge" "collidable"}, + {1490, 2}, + {1547, 2}, + 0 + } + { + {1490, 2}, + {1544, 2, "edge" "collidable"}, + {1547, 2}, + 0 + } + { + {1521, 2}, + {1426, 2, "edge" "collidable"}, + {1450, 2}, + 0 + } + { + {1414, 2, "edge" "collidable"}, + {1521, 2}, + {1450, 2}, + 0 + } + { + {1551, 2}, + {1482, 2, "edge" "collidable"}, + {1510, 2}, + 0 + } + { + {1471, 2, "edge" "collidable"}, + {1580, 2}, + {1396, 2}, + 0 + } + { + {1523, 2, "edge" "collidable"}, + {1438, 2}, + {1533, 2}, + 0 + } + { + {1473, 2}, + {1431, 2, "edge" "collidable"}, + {1492, 2}, + 0 + } + { + {1474, 2, "edge" "collidable"}, + {1473, 2}, + {1492, 2}, + 0 + } + { + {1472, 2}, + {1575, 2, "edge" "collidable"}, + {1576, 2}, + 0 + } + { + {1484, 2, "edge" "collidable"}, + {1472, 2}, + {1576, 2}, + 0 + } + { + {1404, 2}, + {1461, 2, "edge" "collidable"}, + {1421, 2}, + 0 + } + { + {1435, 2, "edge" "collidable"}, + {1404, 2}, + {1421, 2}, + 0 + } + { + {1500, 2}, + {1444, 2, "edge" "collidable"}, + {1499, 2}, + 0 + } + { + {1491, 2, "edge" "collidable"}, + {1430, 2}, + {1552, 2}, + 0 + } + { + {1430, 2}, + {1549, 2, "edge" "collidable"}, + {1552, 2}, + 0 + } + { + {1504, 2}, + {1429, 2, "edge" "collidable"}, + {1416, 2}, + 0 + } + { + {1402, 2, "edge" "collidable"}, + {1504, 2}, + {1416, 2}, + 0 + } + { + {1439, 2}, + {1531, 2, "edge" "collidable"}, + {1534, 2}, + 0 + } + { + {1428, 2, "edge" "collidable"}, + {1439, 2}, + {1534, 2}, + 0 + } + { + {1401, 2, "edge" "collidable"}, + {1442, 2}, + {1588, 2}, + 0 + } + { + {1442, 2}, + {1585, 2, "edge" "collidable"}, + {1588, 2}, + 0 + } + { + {1433, 2, "edge" "collidable"}, + {1401, 2}, + {1554, 2}, + 0 + } + { + {1397, 2}, + {1543, 2, "edge" "collidable"}, + {1544, 2}, + 0 + } + { + {1490, 2, "edge" "collidable"}, + {1397, 2}, + {1544, 2}, + 0 + } + { + {1467, 2}, + {1427, 2, "edge" "collidable"}, + {1413, 2}, + 0 + } + { + {1402, 2}, + {1416, 2, "edge" "collidable"}, + {1403, 2}, + 0 + } + { + {1436, 2, "edge" "collidable"}, + {1494, 2}, + {1476, 2}, + 0 + } + { + {1516, 2, "edge" "collidable"}, + {1445, 2}, + {1527, 2}, + 0 + } + { + {1545, 2}, + {1458, 2, "edge" "collidable"}, + {1495, 2}, + 0 + } + { + {1438, 2, "edge" "collidable"}, + {1545, 2}, + {1495, 2}, + 0 + } + { + {1419, 2}, + {1539, 2, "edge" "collidable"}, + {1455, 2}, + 0 + } + { + {1470, 2, "edge" "collidable"}, + {1419, 2}, + {1455, 2}, + 0 + } + { + {1504, 2, "edge" "collidable"}, + {1405, 2}, + {1429, 2}, + 0 + } + { + {1405, 2}, + {1457, 2, "edge" "collidable"}, + {1429, 2}, + 0 + } + { + {1489, 2}, + {1441, 2, "edge" "collidable"}, + {1427, 2}, + 0 + } + { + {1467, 2, "edge" "collidable"}, + {1489, 2}, + {1427, 2}, + 0 + } + { + {1453, 2, "edge" "collidable"}, + {1423, 2}, + {1483, 2}, + 0 + } + { + {1443, 2, "edge" "collidable"}, + {1453, 2}, + {1497, 2}, + 0 + } + { + {1481, 2, "edge" "collidable"}, + {1467, 2}, + {1413, 2}, + 0 + } + { + {1480, 2}, + {1536, 2, "edge" "collidable"}, + {1582, 2}, + 0 + } + { + {1410, 2, "edge" "collidable"}, + {1574, 2}, + {1522, 2}, + 0 + } + { + {1545, 2, "edge" "collidable"}, + {1516, 2}, + {1458, 2}, + 0 + } + { + {1470, 2}, + {1455, 2, "edge" "collidable"}, + {1457, 2}, + 0 + } + { + {1405, 2, "edge" "collidable"}, + {1470, 2}, + {1457, 2}, + 0 + } + { + {1449, 2, "edge" "collidable"}, + {1480, 2}, + {1582, 2}, + 0 + } + { + {1485, 2, "edge" "collidable"}, + {1551, 2}, + {1510, 2}, + 0 + } + { + {1546, 2, "edge" "collidable"}, + {1501, 2}, + {1437, 2}, + 0 + } + { + {1501, 2}, + {1420, 2, "edge" "collidable"}, + {1437, 2}, + 0 + } + { + {1529, 2}, + {1547, 2, "edge" "collidable"}, + {1549, 2}, + 0 + } + { + {1410, 2}, + {1522, 2, "edge" "collidable"}, + {1537, 2}, + 0 + } + { + {1479, 2, "edge" "collidable"}, + {1410, 2}, + {1537, 2}, + 0 + } + { + {1481, 2}, + {1413, 2, "edge" "collidable"}, + {1398, 2}, + 0 + } + { + {1445, 2}, + {1460, 2, "edge" "collidable"}, + {1527, 2}, + 0 + } + { + {1424, 2, "edge" "collidable"}, + {1542, 2}, + {1564, 2}, + 0 + } + { + {1453, 2}, + {1483, 2, "edge" "collidable"}, + {1497, 2}, + 0 + } + { + {1423, 2, "edge" "collidable"}, + {1449, 2}, + {1561, 2}, + 0 + } + { + {1468, 2}, + {1550, 2, "edge" "collidable"}, + {1482, 2}, + 0 + } + { + {1548, 2}, + {1399, 2, "edge" "collidable"}, + {1590, 2}, + 0 + } + { + {1548, 2}, + {1583, 2, "edge" "collidable"}, + {1589, 2}, + 0 + } + # Mesh "Plane" + { + {1609, 2}, + {1593, 2, "edge" "collidable"}, + {1591, 2}, + 2 + } + { + {1609, 2}, + {1591, 2}, + {1610, 2}, + 2 + } + { + {1592, 2}, + {1609, 2}, + {1610, 2}, + 2 + } + { + {1592, 2}, + {1610, 2}, + {1597, 2}, + 2 + } + { + {1597, 2}, + {1610, 2}, + {1603, 2}, + 2 + } + { + {1592, 2}, + {1597, 2}, + {1605, 2}, + 2 + } + { + {1606, 2}, + {1597, 2}, + {1595, 2}, + 2 + } + { + {1595, 2}, + {1597, 2}, + {1603, 2}, + 2 + } + { + {1595, 2}, + {1603, 2}, + {1604, 2}, + 2 + } + { + {1604, 2}, + {1603, 2}, + {1598, 2}, + 2 + } + { + {1607, 2}, + {1592, 2}, + {1600, 2}, + 2 + } + { + {1600, 2}, + {1592, 2}, + {1602, 2}, + 2 + } + { + {1602, 2}, + {1592, 2}, + {1605, 2}, + 2 + } + { + {1608, 2}, + {1600, 2}, + {1602, 2}, + 2 + } + { + {1608, 2}, + {1602, 2}, + {1596, 2}, + 2 + } + { + {1599, 2}, + {1602, 2}, + {1605, 2}, + 2 + } + { + {1599, 2}, + {1605, 2}, + {1594, 2}, + 2 + } + { + {1601, 2}, + {1599, 2}, + {1594, 2}, + 2 + } + # Mesh "Plane.001" + { + {1629, 2}, + {1613, 2, "edge" "collidable"}, + {1611, 2}, + 2 + } + { + {1629, 2}, + {1611, 2}, + {1630, 2}, + 2 + } + { + {1612, 2}, + {1629, 2}, + {1630, 2}, + 2 + } + { + {1612, 2}, + {1630, 2}, + {1617, 2}, + 2 + } + { + {1617, 2}, + {1630, 2}, + {1623, 2}, + 2 + } + { + {1612, 2}, + {1617, 2}, + {1625, 2}, + 2 + } + { + {1626, 2}, + {1617, 2}, + {1615, 2}, + 2 + } + { + {1615, 2}, + {1617, 2}, + {1623, 2}, + 2 + } + { + {1615, 2}, + {1623, 2}, + {1624, 2}, + 2 + } + { + {1624, 2}, + {1623, 2}, + {1618, 2}, + 2 + } + { + {1627, 2}, + {1612, 2}, + {1620, 2}, + 2 + } + { + {1620, 2}, + {1612, 2}, + {1622, 2}, + 2 + } + { + {1622, 2}, + {1612, 2}, + {1625, 2}, + 2 + } + { + {1628, 2}, + {1620, 2}, + {1622, 2}, + 2 + } + { + {1628, 2}, + {1622, 2}, + {1616, 2}, + 2 + } + { + {1619, 2}, + {1622, 2}, + {1625, 2}, + 2 + } + { + {1619, 2}, + {1625, 2}, + {1614, 2}, + 2 + } + { + {1621, 2}, + {1619, 2}, + {1614, 2}, + 2 + } + # Mesh "Plane.006" + { + {1649, 2}, + {1633, 2, "edge" "collidable"}, + {1631, 2}, + 2 + } + { + {1649, 2}, + {1631, 2}, + {1650, 2}, + 2 + } + { + {1632, 2}, + {1649, 2}, + {1650, 2}, + 2 + } + { + {1632, 2}, + {1650, 2}, + {1637, 2}, + 2 + } + { + {1637, 2}, + {1650, 2}, + {1643, 2}, + 2 + } + { + {1632, 2}, + {1637, 2}, + {1645, 2}, + 2 + } + { + {1646, 2}, + {1637, 2}, + {1635, 2}, + 2 + } + { + {1635, 2}, + {1637, 2}, + {1643, 2}, + 2 + } + { + {1635, 2}, + {1643, 2}, + {1644, 2}, + 2 + } + { + {1644, 2}, + {1643, 2}, + {1638, 2}, + 2 + } + { + {1647, 2}, + {1632, 2}, + {1640, 2}, + 2 + } + { + {1640, 2}, + {1632, 2}, + {1642, 2}, + 2 + } + { + {1642, 2}, + {1632, 2}, + {1645, 2}, + 2 + } + { + {1648, 2}, + {1640, 2}, + {1642, 2}, + 2 + } + { + {1648, 2}, + {1642, 2}, + {1636, 2}, + 2 + } + { + {1639, 2}, + {1642, 2}, + {1645, 2}, + 2 + } + { + {1639, 2}, + {1645, 2}, + {1634, 2}, + 2 + } + { + {1641, 2}, + {1639, 2}, + {1634, 2}, + 2 + } + # Mesh "Plane.007" + { + {1669, 2}, + {1653, 2, "edge" "collidable"}, + {1651, 2}, + 2 + } + { + {1669, 2}, + {1651, 2}, + {1670, 2}, + 2 + } + { + {1652, 2}, + {1669, 2}, + {1670, 2}, + 2 + } + { + {1652, 2}, + {1670, 2}, + {1657, 2}, + 2 + } + { + {1657, 2}, + {1670, 2}, + {1663, 2}, + 2 + } + { + {1652, 2}, + {1657, 2}, + {1665, 2}, + 2 + } + { + {1666, 2}, + {1657, 2}, + {1655, 2}, + 2 + } + { + {1655, 2}, + {1657, 2}, + {1663, 2}, + 2 + } + { + {1655, 2}, + {1663, 2}, + {1664, 2}, + 2 + } + { + {1664, 2}, + {1663, 2}, + {1658, 2}, + 2 + } + { + {1667, 2}, + {1652, 2}, + {1660, 2}, + 2 + } + { + {1660, 2}, + {1652, 2}, + {1662, 2}, + 2 + } + { + {1662, 2}, + {1652, 2}, + {1665, 2}, + 2 + } + { + {1668, 2}, + {1660, 2}, + {1662, 2}, + 2 + } + { + {1668, 2}, + {1662, 2}, + {1656, 2}, + 2 + } + { + {1659, 2}, + {1662, 2}, + {1665, 2}, + 2 + } + { + {1659, 2}, + {1665, 2}, + {1654, 2}, + 2 + } + { + {1661, 2}, + {1659, 2}, + {1654, 2}, + 2 + } + # Mesh "Plane.008" + { + {1689, 2}, + {1673, 2, "edge" "collidable"}, + {1671, 2}, + 2 + } + { + {1689, 2}, + {1671, 2}, + {1690, 2}, + 2 + } + { + {1672, 2}, + {1689, 2}, + {1690, 2}, + 2 + } + { + {1672, 2}, + {1690, 2}, + {1677, 2}, + 2 + } + { + {1677, 2}, + {1690, 2}, + {1683, 2}, + 2 + } + { + {1672, 2}, + {1677, 2}, + {1685, 2}, + 2 + } + { + {1686, 2}, + {1677, 2}, + {1675, 2}, + 2 + } + { + {1675, 2}, + {1677, 2}, + {1683, 2}, + 2 + } + { + {1675, 2}, + {1683, 2}, + {1684, 2}, + 2 + } + { + {1684, 2}, + {1683, 2}, + {1678, 2}, + 2 + } + { + {1687, 2}, + {1672, 2}, + {1680, 2}, + 2 + } + { + {1680, 2}, + {1672, 2}, + {1682, 2}, + 2 + } + { + {1682, 2}, + {1672, 2}, + {1685, 2}, + 2 + } + { + {1688, 2}, + {1680, 2}, + {1682, 2}, + 2 + } + { + {1688, 2}, + {1682, 2}, + {1676, 2}, + 2 + } + { + {1679, 2}, + {1682, 2}, + {1685, 2}, + 2 + } + { + {1679, 2}, + {1685, 2}, + {1674, 2}, + 2 + } + { + {1681, 2}, + {1679, 2}, + {1674, 2}, + 2 + } + # Mesh "Plane.009" + { + {1709, 2}, + {1693, 2, "edge" "collidable"}, + {1691, 2}, + 2 + } + { + {1709, 2}, + {1691, 2}, + {1710, 2}, + 2 + } + { + {1692, 2}, + {1709, 2}, + {1710, 2}, + 2 + } + { + {1692, 2}, + {1710, 2}, + {1697, 2}, + 2 + } + { + {1697, 2}, + {1710, 2}, + {1703, 2}, + 2 + } + { + {1692, 2}, + {1697, 2}, + {1705, 2}, + 2 + } + { + {1706, 2}, + {1697, 2}, + {1695, 2}, + 2 + } + { + {1695, 2}, + {1697, 2}, + {1703, 2}, + 2 + } + { + {1695, 2}, + {1703, 2}, + {1704, 2}, + 2 + } + { + {1704, 2}, + {1703, 2}, + {1698, 2}, + 2 + } + { + {1707, 2}, + {1692, 2}, + {1700, 2}, + 2 + } + { + {1700, 2}, + {1692, 2}, + {1702, 2}, + 2 + } + { + {1702, 2}, + {1692, 2}, + {1705, 2}, + 2 + } + { + {1708, 2}, + {1700, 2}, + {1702, 2}, + 2 + } + { + {1708, 2}, + {1702, 2}, + {1696, 2}, + 2 + } + { + {1699, 2}, + {1702, 2}, + {1705, 2}, + 2 + } + { + {1699, 2}, + {1705, 2}, + {1694, 2}, + 2 + } + { + {1701, 2}, + {1699, 2}, + {1694, 2}, + 2 + } + # Mesh "Plane.010" + { + {1729, 2}, + {1713, 2, "edge" "collidable"}, + {1711, 2}, + 2 + } + { + {1729, 2}, + {1711, 2}, + {1730, 2}, + 2 + } + { + {1712, 2}, + {1729, 2}, + {1730, 2}, + 2 + } + { + {1712, 2}, + {1730, 2}, + {1717, 2}, + 2 + } + { + {1717, 2}, + {1730, 2}, + {1723, 2}, + 2 + } + { + {1712, 2}, + {1717, 2}, + {1725, 2}, + 2 + } + { + {1726, 2}, + {1717, 2}, + {1715, 2}, + 2 + } + { + {1715, 2}, + {1717, 2}, + {1723, 2}, + 2 + } + { + {1715, 2}, + {1723, 2}, + {1724, 2}, + 2 + } + { + {1724, 2}, + {1723, 2}, + {1718, 2}, + 2 + } + { + {1727, 2}, + {1712, 2}, + {1720, 2}, + 2 + } + { + {1720, 2}, + {1712, 2}, + {1722, 2}, + 2 + } + { + {1722, 2}, + {1712, 2}, + {1725, 2}, + 2 + } + { + {1728, 2}, + {1720, 2}, + {1722, 2}, + 2 + } + { + {1728, 2}, + {1722, 2}, + {1716, 2}, + 2 + } + { + {1719, 2}, + {1722, 2}, + {1725, 2}, + 2 + } + { + {1719, 2}, + {1725, 2}, + {1714, 2}, + 2 + } + { + {1721, 2}, + {1719, 2}, + {1714, 2}, + 2 + } + # Mesh "Plane.011" + { + {1733, 2}, + {1734, 2, "edge" "collidable"}, + {1731, 2}, + 3 + } + { + {1731, 2}, + {1732, 2}, + {1733, 2}, + 3 + } + # Mesh "Plane.012" + { + {1737, 2}, + {1738, 2, "edge" "collidable"}, + {1735, 2}, + 3 + } + { + {1735, 2}, + {1736, 2}, + {1737, 2}, + 3 + } + # Mesh "Plane.013" + { + {1741, 2}, + {1742, 2, "edge" "collidable"}, + {1739, 2}, + 3 + } + { + {1739, 2}, + {1740, 2}, + {1741, 2}, + 3 + } + # Mesh "Plane.014" + { + {1745, 2}, + {1746, 2, "edge" "collidable"}, + {1743, 2}, + 3 + } + { + {1743, 2}, + {1744, 2}, + {1745, 2}, + 3 + } + # Mesh "Plane.015" + { + {1749, 2}, + {1750, 2, "edge" "collidable"}, + {1747, 2}, + 3 + } + { + {1747, 2}, + {1748, 2}, + {1749, 2}, + 3 + } + # Mesh "Plane.016" + { + {1753, 2}, + {1754, 2, "edge" "collidable"}, + {1751, 2}, + 3 + } + { + {1751, 2}, + {1752, 2}, + {1753, 2}, + 3 + } + # Mesh "Plane.017" + { + {1757, 2}, + {1758, 2, "edge" "collidable"}, + {1755, 2}, + 3 + } + { + {1755, 2}, + {1756, 2}, + {1757, 2}, + 3 + } + # Mesh "Plane.018" + { + {1761, 2}, + {1762, 2, "edge" "collidable"}, + {1759, 2}, + 3 + } + { + {1759, 2}, + {1760, 2}, + {1761, 2}, + 3 + } + # Mesh "Plane.019" + { + {1765, 2}, + {1766, 2, "edge" "collidable"}, + {1763, 2}, + 3 + } + { + {1763, 2}, + {1764, 2}, + {1765, 2}, + 3 + } + # Mesh "Plane.020" + { + {1769, 2}, + {1770, 2, "edge" "collidable"}, + {1767, 2}, + 3 + } + { + {1767, 2}, + {1768, 2}, + {1769, 2}, + 3 + } + # Mesh "Plane.024" + { + {1789, 2}, + {1773, 2, "edge" "collidable"}, + {1771, 2}, + 2 + } + { + {1789, 2}, + {1771, 2}, + {1790, 2}, + 2 + } + { + {1772, 2}, + {1789, 2}, + {1790, 2}, + 2 + } + { + {1772, 2}, + {1790, 2}, + {1777, 2}, + 2 + } + { + {1777, 2}, + {1790, 2}, + {1783, 2}, + 2 + } + { + {1772, 2}, + {1777, 2}, + {1785, 2}, + 2 + } + { + {1786, 2}, + {1777, 2}, + {1775, 2}, + 2 + } + { + {1775, 2}, + {1777, 2}, + {1783, 2}, + 2 + } + { + {1775, 2}, + {1783, 2}, + {1784, 2}, + 2 + } + { + {1784, 2}, + {1783, 2}, + {1778, 2}, + 2 + } + { + {1787, 2}, + {1772, 2}, + {1780, 2}, + 2 + } + { + {1780, 2}, + {1772, 2}, + {1782, 2}, + 2 + } + { + {1782, 2}, + {1772, 2}, + {1785, 2}, + 2 + } + { + {1788, 2}, + {1780, 2}, + {1782, 2}, + 2 + } + { + {1788, 2}, + {1782, 2}, + {1776, 2}, + 2 + } + { + {1779, 2}, + {1782, 2}, + {1785, 2}, + 2 + } + { + {1779, 2}, + {1785, 2}, + {1774, 2}, + 2 + } + { + {1781, 2}, + {1779, 2}, + {1774, 2}, + 2 + } + # Mesh "Plane.025" + { + {1809, 2}, + {1793, 2, "edge" "collidable"}, + {1791, 2}, + 2 + } + { + {1809, 2}, + {1791, 2}, + {1810, 2}, + 2 + } + { + {1792, 2}, + {1809, 2}, + {1810, 2}, + 2 + } + { + {1792, 2}, + {1810, 2}, + {1797, 2}, + 2 + } + { + {1797, 2}, + {1810, 2}, + {1803, 2}, + 2 + } + { + {1792, 2}, + {1797, 2}, + {1805, 2}, + 2 + } + { + {1806, 2}, + {1797, 2}, + {1795, 2}, + 2 + } + { + {1795, 2}, + {1797, 2}, + {1803, 2}, + 2 + } + { + {1795, 2}, + {1803, 2}, + {1804, 2}, + 2 + } + { + {1804, 2}, + {1803, 2}, + {1798, 2}, + 2 + } + { + {1807, 2}, + {1792, 2}, + {1800, 2}, + 2 + } + { + {1800, 2}, + {1792, 2}, + {1802, 2}, + 2 + } + { + {1802, 2}, + {1792, 2}, + {1805, 2}, + 2 + } + { + {1808, 2}, + {1800, 2}, + {1802, 2}, + 2 + } + { + {1808, 2}, + {1802, 2}, + {1796, 2}, + 2 + } + { + {1799, 2}, + {1802, 2}, + {1805, 2}, + 2 + } + { + {1799, 2}, + {1805, 2}, + {1794, 2}, + 2 + } + { + {1801, 2}, + {1799, 2}, + {1794, 2}, + 2 + } + # Mesh "Plane.026" + { + {1829, 2}, + {1813, 2, "edge" "collidable"}, + {1811, 2}, + 2 + } + { + {1829, 2}, + {1811, 2}, + {1830, 2}, + 2 + } + { + {1812, 2}, + {1829, 2}, + {1830, 2}, + 2 + } + { + {1812, 2}, + {1830, 2}, + {1817, 2}, + 2 + } + { + {1817, 2}, + {1830, 2}, + {1823, 2}, + 2 + } + { + {1812, 2}, + {1817, 2}, + {1825, 2}, + 2 + } + { + {1826, 2}, + {1817, 2}, + {1815, 2}, + 2 + } + { + {1815, 2}, + {1817, 2}, + {1823, 2}, + 2 + } + { + {1815, 2}, + {1823, 2}, + {1824, 2}, + 2 + } + { + {1824, 2}, + {1823, 2}, + {1818, 2}, + 2 + } + { + {1827, 2}, + {1812, 2}, + {1820, 2}, + 2 + } + { + {1820, 2}, + {1812, 2}, + {1822, 2}, + 2 + } + { + {1822, 2}, + {1812, 2}, + {1825, 2}, + 2 + } + { + {1828, 2}, + {1820, 2}, + {1822, 2}, + 2 + } + { + {1828, 2}, + {1822, 2}, + {1816, 2}, + 2 + } + { + {1819, 2}, + {1822, 2}, + {1825, 2}, + 2 + } + { + {1819, 2}, + {1825, 2}, + {1814, 2}, + 2 + } + { + {1821, 2}, + {1819, 2}, + {1814, 2}, + 2 + } + # Mesh "Plane.028" + { + {1833, 2}, + {1834, 2, "edge" "collidable"}, + {1831, 2}, + 3 + } + { + {1831, 2}, + {1832, 2}, + {1833, 2}, + 3 + } + # Mesh "Plane.029" + { + {1837, 2, "edge" "foreground"}, + {1838, 2, "edge" "foreground"}, + {1835, 2, "foreground"}, + 1 + } + { + {1835, 2, "edge" "foreground"}, + {1836, 2, "edge" "foreground"}, + {1837, 2, "foreground"}, + 1 + } + # Mesh "Plane.030" + { + {1841, 2, "edge" "foreground"}, + {1842, 2, "edge" "foreground"}, + {1839, 2, "foreground"}, + 1 + } + { + {1839, 2, "edge" "foreground"}, + {1840, 2, "edge" "foreground"}, + {1841, 2, "foreground"}, + 1 + } + # Mesh "Plane.031" + { + {1845, 2, "edge" "foreground"}, + {1846, 2, "edge" "foreground"}, + {1843, 2, "foreground"}, + 1 + } + { + {1843, 2, "edge" "foreground"}, + {1844, 2, "edge" "foreground"}, + {1845, 2, "foreground"}, + 1 + } + # Mesh "Plane.034" + { + {1849, 2, "edge" "foreground"}, + {1850, 2, "edge" "foreground"}, + {1847, 2, "foreground"}, + 1 + } + { + {1847, 2, "edge" "foreground"}, + {1848, 2, "edge" "foreground"}, + {1849, 2, "foreground"}, + 1 + } + # Mesh "Plane.035" + { + {1853, 2, "edge" "foreground"}, + {1854, 2, "edge" "foreground"}, + {1851, 2, "foreground"}, + 1 + } + { + {1851, 2, "edge" "foreground"}, + {1852, 2, "edge" "foreground"}, + {1853, 2, "foreground"}, + 1 + } + # Mesh "Plane.036" + { + {1857, 2, "edge" "foreground"}, + {1858, 2, "edge" "foreground"}, + {1855, 2, "foreground"}, + 1 + } + { + {1855, 2, "edge" "foreground"}, + {1856, 2, "edge" "foreground"}, + {1857, 2, "foreground"}, + 1 + } + # Mesh "Plane.037" + { + {1861, 2, "edge" "foreground"}, + {1862, 2, "edge" "foreground"}, + {1859, 2, "foreground"}, + 1 + } + { + {1859, 2, "edge" "foreground"}, + {1860, 2, "edge" "foreground"}, + {1861, 2, "foreground"}, + 1 + } + # Mesh "Plane.038" + { + {1865, 2, "edge" "foreground"}, + {1866, 2, "edge" "foreground"}, + {1863, 2, "foreground"}, + 1 + } + { + {1863, 2, "edge" "foreground"}, + {1864, 2, "edge" "foreground"}, + {1865, 2, "foreground"}, + 1 + } + # Mesh "Plane.039" + { + {1869, 2, "edge" "foreground"}, + {1870, 2, "edge" "foreground"}, + {1867, 2, "foreground"}, + 1 + } + { + {1867, 2, "edge" "foreground"}, + {1868, 2, "edge" "foreground"}, + {1869, 2, "foreground"}, + 1 + } + # Mesh "Plane.040" + { + {1889, 2}, + {1873, 2, "edge" "collidable"}, + {1871, 2}, + 2 + } + { + {1889, 2}, + {1871, 2}, + {1890, 2}, + 2 + } + { + {1872, 2}, + {1889, 2}, + {1890, 2}, + 2 + } + { + {1872, 2}, + {1890, 2}, + {1877, 2}, + 2 + } + { + {1877, 2}, + {1890, 2}, + {1883, 2}, + 2 + } + { + {1872, 2}, + {1877, 2}, + {1885, 2}, + 2 + } + { + {1886, 2}, + {1877, 2}, + {1875, 2}, + 2 + } + { + {1875, 2}, + {1877, 2}, + {1883, 2}, + 2 + } + { + {1875, 2}, + {1883, 2}, + {1884, 2}, + 2 + } + { + {1884, 2}, + {1883, 2}, + {1878, 2}, + 2 + } + { + {1887, 2}, + {1872, 2}, + {1880, 2}, + 2 + } + { + {1880, 2}, + {1872, 2}, + {1882, 2}, + 2 + } + { + {1882, 2}, + {1872, 2}, + {1885, 2}, + 2 + } + { + {1888, 2}, + {1880, 2}, + {1882, 2}, + 2 + } + { + {1888, 2}, + {1882, 2}, + {1876, 2}, + 2 + } + { + {1879, 2}, + {1882, 2}, + {1885, 2}, + 2 + } + { + {1879, 2}, + {1885, 2}, + {1874, 2}, + 2 + } + { + {1881, 2}, + {1879, 2}, + {1874, 2}, + 2 + } + # Mesh "Font" + { + {1941, 2, "edge" "collidable"}, + {1940, 2, "edge" "collidable"}, + {1939, 2}, + 1 + } + { + {1941, 2}, + {1939, 2}, + {1947, 2}, + 1 + } + { + {1947, 2}, + {1939, 2, "edge" "collidable"}, + {1946, 2}, + 1 + } + { + {1941, 2}, + {1947, 2, "edge" "collidable"}, + {1949, 2}, + 1 + } + { + {1948, 2, "edge" "collidable"}, + {1947, 2}, + {1946, 2}, + 1 + } + { + {1941, 2}, + {1949, 2}, + {1943, 2}, + 1 + } + { + {1943, 2}, + {1949, 2, "edge" "collidable"}, + {1948, 2}, + 1 + } + { + {1943, 2}, + {1948, 2}, + {1944, 2, "edge" "collidable"}, + 1 + } + { + {1944, 2}, + {1948, 2}, + {1946, 2}, + 1 + } + { + {1941, 2}, + {1943, 2, "edge" "collidable"}, + {1942, 2, "edge" "collidable"}, + 1 + } + { + {1945, 2, "edge" "collidable"}, + {1944, 2}, + {1946, 2, "edge" "collidable"}, + 1 + } + { + {1952, 2, "edge" "collidable"}, + {1951, 2, "edge" "collidable"}, + {1950, 2}, + 1 + } + { + {1952, 2}, + {1950, 2, "edge" "collidable"}, + {1953, 2, "edge" "collidable"}, + 1 + } + { + {1956, 2, "edge" "collidable"}, + {1955, 2, "edge" "collidable"}, + {1954, 2}, + 1 + } + { + {1956, 2}, + {1954, 2, "edge" "collidable"}, + {1957, 2, "edge" "collidable"}, + 1 + } + { + {1978, 2, "edge" "collidable"}, + {1977, 2, "edge" "collidable"}, + {1976, 2}, + 1 + } + { + {1978, 2}, + {1976, 2, "edge" "collidable"}, + {1975, 2}, + 1 + } + { + {1979, 2, "edge" "collidable"}, + {1978, 2}, + {1975, 2}, + 1 + } + { + {1979, 2}, + {1975, 2, "edge" "collidable"}, + {1974, 2}, + 1 + } + { + {1980, 2, "edge" "collidable"}, + {1979, 2}, + {1974, 2}, + 1 + } + { + {1980, 2}, + {1974, 2}, + {2002, 2}, + 1 + } + { + {2002, 2}, + {1974, 2}, + {2003, 2, "edge" "collidable"}, + 1 + } + { + {2003, 2}, + {1974, 2, "edge" "collidable"}, + {1973, 2}, + 1 + } + { + {1981, 2, "edge" "collidable"}, + {1980, 2}, + {2001, 2}, + 1 + } + { + {2001, 2}, + {1980, 2}, + {2002, 2, "edge" "collidable"}, + 1 + } + { + {1981, 2}, + {2001, 2, "edge" "collidable"}, + {2000, 2}, + 1 + } + { + {2004, 2, "edge" "collidable"}, + {2003, 2}, + {1973, 2}, + 1 + } + { + {1981, 2}, + {2000, 2, "edge" "collidable"}, + {1999, 2}, + 1 + } + { + {2005, 2, "edge" "collidable"}, + {2004, 2}, + {1973, 2}, + 1 + } + { + {1981, 2}, + {1999, 2, "edge" "collidable"}, + {1998, 2}, + 1 + } + { + {2006, 2, "edge" "collidable"}, + {2005, 2}, + {1973, 2}, + 1 + } + { + {1982, 2, "edge" "collidable"}, + {1981, 2}, + {1998, 2}, + 1 + } + { + {2006, 2}, + {1973, 2, "edge" "collidable"}, + {1972, 2}, + 1 + } + { + {1982, 2}, + {1998, 2, "edge" "collidable"}, + {1997, 2}, + 1 + } + { + {2007, 2, "edge" "collidable"}, + {2006, 2}, + {1972, 2}, + 1 + } + { + {1982, 2}, + {1997, 2, "edge" "collidable"}, + {1996, 2}, + 1 + } + { + {2008, 2, "edge" "collidable"}, + {2007, 2}, + {1972, 2}, + 1 + } + { + {1983, 2, "edge" "collidable"}, + {1982, 2}, + {1996, 2}, + 1 + } + { + {2008, 2}, + {1972, 2, "edge" "collidable"}, + {1971, 2}, + 1 + } + { + {1983, 2}, + {1996, 2, "edge" "collidable"}, + {2008, 2}, + 1 + } + { + {1983, 2}, + {2008, 2}, + {1971, 2}, + 1 + } + { + {1984, 2, "edge" "collidable"}, + {1983, 2}, + {1970, 2}, + 1 + } + { + {1970, 2}, + {1983, 2}, + {1971, 2, "edge" "collidable"}, + 1 + } + { + {1984, 2}, + {1970, 2, "edge" "collidable"}, + {1969, 2}, + 1 + } + { + {1984, 2}, + {1969, 2, "edge" "collidable"}, + {1968, 2}, + 1 + } + { + {1985, 2, "edge" "collidable"}, + {1984, 2}, + {1968, 2}, + 1 + } + { + {1985, 2}, + {1968, 2, "edge" "collidable"}, + {1967, 2}, + 1 + } + { + {1959, 2, "edge" "collidable"}, + {1958, 2, "edge" "collidable"}, + {1995, 2}, + 1 + } + { + {1960, 2, "edge" "collidable"}, + {1959, 2}, + {1995, 2}, + 1 + } + { + {1986, 2, "edge" "collidable"}, + {1985, 2}, + {1967, 2}, + 1 + } + { + {1986, 2}, + {1967, 2, "edge" "collidable"}, + {1966, 2}, + 1 + } + { + {1961, 2, "edge" "collidable"}, + {1960, 2}, + {1995, 2}, + 1 + } + { + {1986, 2}, + {1966, 2, "edge" "collidable"}, + {1965, 2}, + 1 + } + { + {1962, 2, "edge" "collidable"}, + {1961, 2}, + {1995, 2}, + 1 + } + { + {1963, 2, "edge" "collidable"}, + {1962, 2}, + {1995, 2}, + 1 + } + { + {1986, 2}, + {1965, 2, "edge" "collidable"}, + {1964, 2}, + 1 + } + { + {1964, 2, "edge" "collidable"}, + {1963, 2}, + {1995, 2}, + 1 + } + { + {1986, 2}, + {1964, 2}, + {1995, 2}, + 1 + } + { + {1987, 2, "edge" "collidable"}, + {1986, 2}, + {1995, 2}, + 1 + } + { + {1987, 2}, + {1995, 2, "edge" "collidable"}, + {1994, 2}, + 1 + } + { + {1987, 2}, + {1994, 2, "edge" "collidable"}, + {1993, 2}, + 1 + } + { + {1988, 2, "edge" "collidable"}, + {1987, 2}, + {1993, 2}, + 1 + } + { + {1988, 2}, + {1993, 2, "edge" "collidable"}, + {1992, 2}, + 1 + } + { + {1988, 2}, + {1992, 2, "edge" "collidable"}, + {1991, 2}, + 1 + } + { + {1989, 2, "edge" "collidable"}, + {1988, 2}, + {1991, 2}, + 1 + } + { + {1989, 2}, + {1991, 2, "edge" "collidable"}, + {1990, 2, "edge" "collidable"}, + 1 + } + { + {2011, 2, "edge" "collidable"}, + {2010, 2, "edge" "collidable"}, + {2009, 2}, + 1 + } + { + {2011, 2}, + {2009, 2, "edge" "collidable"}, + {2090, 2}, + 1 + } + { + {2012, 2, "edge" "collidable"}, + {2011, 2}, + {2090, 2}, + 1 + } + { + {2013, 2, "edge" "collidable"}, + {2012, 2}, + {2090, 2}, + 1 + } + { + {2014, 2, "edge" "collidable"}, + {2013, 2}, + {2089, 2}, + 1 + } + { + {2089, 2}, + {2013, 2}, + {2090, 2, "edge" "collidable"}, + 1 + } + { + {2014, 2}, + {2089, 2}, + {2109, 2}, + 1 + } + { + {2109, 2}, + {2089, 2, "edge" "collidable"}, + {2088, 2}, + 1 + } + { + {2015, 2, "edge" "collidable"}, + {2014, 2}, + {2108, 2}, + 1 + } + { + {2108, 2}, + {2014, 2}, + {2109, 2, "edge" "collidable"}, + 1 + } + { + {2110, 2, "edge" "collidable"}, + {2109, 2}, + {2088, 2}, + 1 + } + { + {2111, 2, "edge" "collidable"}, + {2110, 2}, + {2088, 2}, + 1 + } + { + {2015, 2}, + {2108, 2, "edge" "collidable"}, + {2107, 2}, + 1 + } + { + {2111, 2}, + {2088, 2, "edge" "collidable"}, + {2087, 2}, + 1 + } + { + {2112, 2, "edge" "collidable"}, + {2111, 2}, + {2087, 2}, + 1 + } + { + {2015, 2}, + {2107, 2, "edge" "collidable"}, + {2106, 2}, + 1 + } + { + {2113, 2, "edge" "collidable"}, + {2112, 2}, + {2087, 2}, + 1 + } + { + {2015, 2}, + {2106, 2, "edge" "collidable"}, + {2105, 2}, + 1 + } + { + {2113, 2}, + {2087, 2, "edge" "collidable"}, + {2086, 2}, + 1 + } + { + {2016, 2, "edge" "collidable"}, + {2015, 2}, + {2105, 2}, + 1 + } + { + {2114, 2, "edge" "collidable"}, + {2113, 2}, + {2086, 2}, + 1 + } + { + {2114, 2}, + {2086, 2, "edge" "collidable"}, + {2085, 2}, + 1 + } + { + {2016, 2}, + {2105, 2, "edge" "collidable"}, + {2104, 2}, + 1 + } + { + {2114, 2}, + {2085, 2, "edge" "collidable"}, + {2084, 2}, + 1 + } + { + {2091, 2, "edge" "collidable"}, + {2114, 2}, + {2084, 2}, + 1 + } + { + {2016, 2}, + {2104, 2, "edge" "collidable"}, + {2103, 2}, + 1 + } + { + {2091, 2}, + {2084, 2, "edge" "collidable"}, + {2083, 2}, + 1 + } + { + {2017, 2, "edge" "collidable"}, + {2016, 2}, + {2103, 2}, + 1 + } + { + {2092, 2, "edge" "collidable"}, + {2091, 2}, + {2083, 2}, + 1 + } + { + {2017, 2}, + {2103, 2, "edge" "collidable"}, + {2102, 2}, + 1 + } + { + {2092, 2}, + {2083, 2, "edge" "collidable"}, + {2082, 2}, + 1 + } + { + {2018, 2, "edge" "collidable"}, + {2017, 2}, + {2102, 2}, + 1 + } + { + {2093, 2, "edge" "collidable"}, + {2092, 2}, + {2082, 2}, + 1 + } + { + {2018, 2}, + {2102, 2, "edge" "collidable"}, + {2101, 2}, + 1 + } + { + {2093, 2}, + {2082, 2, "edge" "collidable"}, + {2081, 2}, + 1 + } + { + {2019, 2, "edge" "collidable"}, + {2018, 2}, + {2101, 2}, + 1 + } + { + {2094, 2, "edge" "collidable"}, + {2093, 2}, + {2081, 2}, + 1 + } + { + {2020, 2, "edge" "collidable"}, + {2019, 2}, + {2101, 2}, + 1 + } + { + {2020, 2}, + {2101, 2, "edge" "collidable"}, + {2100, 2}, + 1 + } + { + {2094, 2}, + {2081, 2, "edge" "collidable"}, + {2080, 2}, + 1 + } + { + {2021, 2, "edge" "collidable"}, + {2020, 2}, + {2100, 2}, + 1 + } + { + {2095, 2, "edge" "collidable"}, + {2094, 2}, + {2080, 2}, + 1 + } + { + {2021, 2}, + {2100, 2, "edge" "collidable"}, + {2099, 2}, + 1 + } + { + {2095, 2}, + {2080, 2, "edge" "collidable"}, + {2079, 2}, + 1 + } + { + {2022, 2, "edge" "collidable"}, + {2021, 2}, + {2099, 2}, + 1 + } + { + {2096, 2, "edge" "collidable"}, + {2095, 2}, + {2079, 2}, + 1 + } + { + {2022, 2}, + {2099, 2, "edge" "collidable"}, + {2098, 2}, + 1 + } + { + {2097, 2, "edge" "collidable"}, + {2096, 2}, + {2079, 2}, + 1 + } + { + {2022, 2}, + {2098, 2, "edge" "collidable"}, + {2097, 2}, + 1 + } + { + {2023, 2, "edge" "collidable"}, + {2022, 2}, + {2097, 2}, + 1 + } + { + {2023, 2}, + {2097, 2}, + {2079, 2}, + 1 + } + { + {2023, 2}, + {2079, 2, "edge" "collidable"}, + {2078, 2}, + 1 + } + { + {2024, 2, "edge" "collidable"}, + {2023, 2}, + {2078, 2}, + 1 + } + { + {2024, 2}, + {2078, 2, "edge" "collidable"}, + {2077, 2}, + 1 + } + { + {2025, 2, "edge" "collidable"}, + {2024, 2}, + {2077, 2}, + 1 + } + { + {2025, 2}, + {2077, 2, "edge" "collidable"}, + {2076, 2}, + 1 + } + { + {2026, 2, "edge" "collidable"}, + {2025, 2}, + {2076, 2}, + 1 + } + { + {2027, 2, "edge" "collidable"}, + {2026, 2}, + {2076, 2}, + 1 + } + { + {2028, 2, "edge" "collidable"}, + {2027, 2}, + {2076, 2}, + 1 + } + { + {2028, 2}, + {2076, 2, "edge" "collidable"}, + {2075, 2}, + 1 + } + { + {2029, 2, "edge" "collidable"}, + {2028, 2}, + {2075, 2}, + 1 + } + { + {2030, 2, "edge" "collidable"}, + {2029, 2}, + {2075, 2}, + 1 + } + { + {2031, 2, "edge" "collidable"}, + {2030, 2}, + {2075, 2}, + 1 + } + { + {2031, 2}, + {2075, 2, "edge" "collidable"}, + {2074, 2}, + 1 + } + { + {2032, 2, "edge" "collidable"}, + {2031, 2}, + {2074, 2}, + 1 + } + { + {2032, 2}, + {2074, 2, "edge" "collidable"}, + {2073, 2}, + 1 + } + { + {2032, 2}, + {2073, 2, "edge" "collidable"}, + {2072, 2}, + 1 + } + { + {2033, 2, "edge" "collidable"}, + {2032, 2}, + {2072, 2}, + 1 + } + { + {2033, 2}, + {2072, 2, "edge" "collidable"}, + {2071, 2}, + 1 + } + { + {2034, 2, "edge" "collidable"}, + {2033, 2}, + {2071, 2}, + 1 + } + { + {2035, 2, "edge" "collidable"}, + {2034, 2}, + {2071, 2}, + 1 + } + { + {2035, 2}, + {2071, 2, "edge" "collidable"}, + {2070, 2}, + 1 + } + { + {2036, 2, "edge" "collidable"}, + {2035, 2}, + {2070, 2}, + 1 + } + { + {2036, 2}, + {2070, 2, "edge" "collidable"}, + {2069, 2}, + 1 + } + { + {2037, 2, "edge" "collidable"}, + {2036, 2}, + {2069, 2}, + 1 + } + { + {2037, 2}, + {2069, 2, "edge" "collidable"}, + {2068, 2}, + 1 + } + { + {2038, 2, "edge" "collidable"}, + {2037, 2}, + {2068, 2}, + 1 + } + { + {2038, 2}, + {2068, 2, "edge" "collidable"}, + {2067, 2}, + 1 + } + { + {2039, 2, "edge" "collidable"}, + {2038, 2}, + {2067, 2}, + 1 + } + { + {2039, 2}, + {2067, 2, "edge" "collidable"}, + {2066, 2}, + 1 + } + { + {2040, 2, "edge" "collidable"}, + {2039, 2}, + {2066, 2}, + 1 + } + { + {2040, 2}, + {2066, 2, "edge" "collidable"}, + {2065, 2}, + 1 + } + { + {2041, 2, "edge" "collidable"}, + {2040, 2}, + {2065, 2}, + 1 + } + { + {2041, 2}, + {2065, 2, "edge" "collidable"}, + {2064, 2}, + 1 + } + { + {2042, 2, "edge" "collidable"}, + {2041, 2}, + {2064, 2}, + 1 + } + { + {2042, 2}, + {2064, 2, "edge" "collidable"}, + {2063, 2}, + 1 + } + { + {2043, 2, "edge" "collidable"}, + {2042, 2}, + {2063, 2}, + 1 + } + { + {2043, 2}, + {2063, 2, "edge" "collidable"}, + {2062, 2}, + 1 + } + { + {2044, 2, "edge" "collidable"}, + {2043, 2}, + {2062, 2}, + 1 + } + { + {2044, 2}, + {2062, 2}, + {2133, 2}, + 1 + } + { + {2133, 2}, + {2062, 2}, + {2134, 2, "edge" "collidable"}, + 1 + } + { + {2134, 2}, + {2062, 2, "edge" "collidable"}, + {2061, 2}, + 1 + } + { + {2045, 2, "edge" "collidable"}, + {2044, 2}, + {2132, 2}, + 1 + } + { + {2132, 2}, + {2044, 2}, + {2133, 2, "edge" "collidable"}, + 1 + } + { + {2135, 2, "edge" "collidable"}, + {2134, 2}, + {2061, 2}, + 1 + } + { + {2045, 2}, + {2132, 2, "edge" "collidable"}, + {2131, 2}, + 1 + } + { + {2136, 2, "edge" "collidable"}, + {2135, 2}, + {2061, 2}, + 1 + } + { + {2045, 2}, + {2131, 2, "edge" "collidable"}, + {2130, 2}, + 1 + } + { + {2136, 2}, + {2061, 2, "edge" "collidable"}, + {2060, 2}, + 1 + } + { + {2137, 2, "edge" "collidable"}, + {2136, 2}, + {2060, 2}, + 1 + } + { + {2046, 2, "edge" "collidable"}, + {2045, 2}, + {2130, 2}, + 1 + } + { + {2046, 2}, + {2130, 2, "edge" "collidable"}, + {2129, 2}, + 1 + } + { + {2138, 2, "edge" "collidable"}, + {2137, 2}, + {2060, 2}, + 1 + } + { + {2046, 2}, + {2129, 2, "edge" "collidable"}, + {2128, 2}, + 1 + } + { + {2138, 2}, + {2060, 2, "edge" "collidable"}, + {2059, 2}, + 1 + } + { + {2047, 2, "edge" "collidable"}, + {2046, 2}, + {2128, 2}, + 1 + } + { + {2115, 2, "edge" "collidable"}, + {2138, 2}, + {2059, 2}, + 1 + } + { + {2047, 2}, + {2128, 2, "edge" "collidable"}, + {2127, 2}, + 1 + } + { + {2115, 2}, + {2059, 2, "edge" "collidable"}, + {2058, 2}, + 1 + } + { + {2047, 2}, + {2127, 2, "edge" "collidable"}, + {2126, 2}, + 1 + } + { + {2048, 2, "edge" "collidable"}, + {2047, 2}, + {2126, 2}, + 1 + } + { + {2116, 2, "edge" "collidable"}, + {2115, 2}, + {2058, 2}, + 1 + } + { + {2048, 2}, + {2126, 2, "edge" "collidable"}, + {2125, 2}, + 1 + } + { + {2117, 2, "edge" "collidable"}, + {2116, 2}, + {2058, 2}, + 1 + } + { + {2048, 2}, + {2125, 2, "edge" "collidable"}, + {2124, 2}, + 1 + } + { + {2117, 2}, + {2058, 2, "edge" "collidable"}, + {2057, 2}, + 1 + } + { + {2118, 2, "edge" "collidable"}, + {2117, 2}, + {2057, 2}, + 1 + } + { + {2049, 2, "edge" "collidable"}, + {2048, 2}, + {2124, 2}, + 1 + } + { + {2049, 2}, + {2124, 2, "edge" "collidable"}, + {2123, 2}, + 1 + } + { + {2119, 2, "edge" "collidable"}, + {2118, 2}, + {2057, 2}, + 1 + } + { + {2049, 2}, + {2123, 2, "edge" "collidable"}, + {2122, 2}, + 1 + } + { + {2120, 2, "edge" "collidable"}, + {2119, 2}, + {2057, 2}, + 1 + } + { + {2049, 2}, + {2122, 2, "edge" "collidable"}, + {2121, 2}, + 1 + } + { + {2121, 2, "edge" "collidable"}, + {2120, 2}, + {2057, 2}, + 1 + } + { + {2049, 2}, + {2121, 2}, + {2057, 2}, + 1 + } + { + {2049, 2}, + {2057, 2, "edge" "collidable"}, + {2056, 2}, + 1 + } + { + {2050, 2, "edge" "collidable"}, + {2049, 2}, + {2056, 2}, + 1 + } + { + {2051, 2, "edge" "collidable"}, + {2050, 2}, + {2056, 2}, + 1 + } + { + {2051, 2}, + {2056, 2, "edge" "collidable"}, + {2055, 2}, + 1 + } + { + {2052, 2, "edge" "collidable"}, + {2051, 2}, + {2055, 2}, + 1 + } + { + {2052, 2}, + {2055, 2, "edge" "collidable"}, + {2054, 2}, + 1 + } + { + {2053, 2, "edge" "collidable"}, + {2052, 2}, + {2054, 2, "edge" "collidable"}, + 1 + } + { + {2162, 2, "edge" "collidable"}, + {2161, 2, "edge" "collidable"}, + {2160, 2}, + 1 + } + { + {2162, 2}, + {2160, 2, "edge" "collidable"}, + {2159, 2}, + 1 + } + { + {2163, 2, "edge" "collidable"}, + {2162, 2}, + {2159, 2}, + 1 + } + { + {2163, 2}, + {2159, 2, "edge" "collidable"}, + {2158, 2}, + 1 + } + { + {2140, 2, "edge" "collidable"}, + {2139, 2, "edge" "collidable"}, + {2169, 2}, + 1 + } + { + {2140, 2}, + {2169, 2, "edge" "collidable"}, + {2168, 2}, + 1 + } + { + {2164, 2, "edge" "collidable"}, + {2163, 2}, + {2158, 2}, + 1 + } + { + {2164, 2}, + {2158, 2, "edge" "collidable"}, + {2157, 2}, + 1 + } + { + {2164, 2}, + {2157, 2, "edge" "collidable"}, + {2156, 2}, + 1 + } + { + {2165, 2, "edge" "collidable"}, + {2164, 2}, + {2156, 2}, + 1 + } + { + {2165, 2}, + {2156, 2, "edge" "collidable"}, + {2155, 2}, + 1 + } + { + {2166, 2, "edge" "collidable"}, + {2165, 2}, + {2155, 2}, + 1 + } + { + {2166, 2}, + {2155, 2}, + {2148, 2}, + 1 + } + { + {2148, 2}, + {2155, 2}, + {2149, 2, "edge" "collidable"}, + 1 + } + { + {2149, 2}, + {2155, 2}, + {2150, 2, "edge" "collidable"}, + 1 + } + { + {2150, 2}, + {2155, 2}, + {2151, 2, "edge" "collidable"}, + 1 + } + { + {2151, 2}, + {2155, 2}, + {2152, 2, "edge" "collidable"}, + 1 + } + { + {2152, 2}, + {2155, 2}, + {2153, 2, "edge" "collidable"}, + 1 + } + { + {2153, 2}, + {2155, 2, "edge" "collidable"}, + {2154, 2, "edge" "collidable"}, + 1 + } + { + {2167, 2, "edge" "collidable"}, + {2166, 2}, + {2147, 2}, + 1 + } + { + {2147, 2}, + {2166, 2}, + {2148, 2, "edge" "collidable"}, + 1 + } + { + {2167, 2}, + {2147, 2, "edge" "collidable"}, + {2146, 2}, + 1 + } + { + {2167, 2}, + {2146, 2, "edge" "collidable"}, + {2145, 2}, + 1 + } + { + {2140, 2}, + {2168, 2, "edge" "collidable"}, + {2167, 2}, + 1 + } + { + {2140, 2}, + {2167, 2}, + {2144, 2}, + 1 + } + { + {2144, 2}, + {2167, 2}, + {2145, 2, "edge" "collidable"}, + 1 + } + { + {2140, 2}, + {2144, 2, "edge" "collidable"}, + {2143, 2}, + 1 + } + { + {2140, 2}, + {2143, 2, "edge" "collidable"}, + {2142, 2}, + 1 + } + { + {2140, 2}, + {2142, 2, "edge" "collidable"}, + {2141, 2, "edge" "collidable"}, + 1 + } + { + {1892, 2, "edge" "collidable"}, + {1891, 2, "edge" "collidable"}, + {1914, 2}, + 1 + } + { + {1892, 2}, + {1914, 2, "edge" "collidable"}, + {1913, 2}, + 1 + } + { + {1893, 2, "edge" "collidable"}, + {1892, 2}, + {1913, 2}, + 1 + } + { + {1893, 2}, + {1913, 2, "edge" "collidable"}, + {1912, 2}, + 1 + } + { + {1894, 2, "edge" "collidable"}, + {1893, 2}, + {1912, 2}, + 1 + } + { + {1894, 2}, + {1912, 2}, + {1915, 2}, + 1 + } + { + {1915, 2}, + {1912, 2}, + {1916, 2, "edge" "collidable"}, + 1 + } + { + {1916, 2}, + {1912, 2, "edge" "collidable"}, + {1911, 2}, + 1 + } + { + {1895, 2, "edge" "collidable"}, + {1894, 2}, + {1938, 2}, + 1 + } + { + {1938, 2}, + {1894, 2}, + {1915, 2, "edge" "collidable"}, + 1 + } + { + {1895, 2}, + {1938, 2, "edge" "collidable"}, + {1937, 2}, + 1 + } + { + {1917, 2, "edge" "collidable"}, + {1916, 2}, + {1911, 2}, + 1 + } + { + {1895, 2}, + {1937, 2, "edge" "collidable"}, + {1936, 2}, + 1 + } + { + {1918, 2, "edge" "collidable"}, + {1917, 2}, + {1911, 2}, + 1 + } + { + {1918, 2}, + {1911, 2, "edge" "collidable"}, + {1910, 2}, + 1 + } + { + {1896, 2, "edge" "collidable"}, + {1895, 2}, + {1936, 2}, + 1 + } + { + {1896, 2}, + {1936, 2, "edge" "collidable"}, + {1935, 2}, + 1 + } + { + {1919, 2, "edge" "collidable"}, + {1918, 2}, + {1910, 2}, + 1 + } + { + {1896, 2}, + {1935, 2, "edge" "collidable"}, + {1934, 2}, + 1 + } + { + {1920, 2, "edge" "collidable"}, + {1919, 2}, + {1910, 2}, + 1 + } + { + {1920, 2}, + {1910, 2, "edge" "collidable"}, + {1909, 2}, + 1 + } + { + {1897, 2, "edge" "collidable"}, + {1896, 2}, + {1934, 2}, + 1 + } + { + {1897, 2}, + {1934, 2, "edge" "collidable"}, + {1933, 2}, + 1 + } + { + {1921, 2, "edge" "collidable"}, + {1920, 2}, + {1909, 2}, + 1 + } + { + {1898, 2, "edge" "collidable"}, + {1897, 2}, + {1933, 2}, + 1 + } + { + {1898, 2}, + {1933, 2, "edge" "collidable"}, + {1932, 2}, + 1 + } + { + {1921, 2}, + {1909, 2, "edge" "collidable"}, + {1908, 2}, + 1 + } + { + {1922, 2, "edge" "collidable"}, + {1921, 2}, + {1908, 2}, + 1 + } + { + {1898, 2}, + {1932, 2, "edge" "collidable"}, + {1931, 2}, + 1 + } + { + {1923, 2, "edge" "collidable"}, + {1922, 2}, + {1908, 2}, + 1 + } + { + {1899, 2, "edge" "collidable"}, + {1898, 2}, + {1931, 2}, + 1 + } + { + {1923, 2}, + {1908, 2, "edge" "collidable"}, + {1907, 2}, + 1 + } + { + {1899, 2}, + {1931, 2, "edge" "collidable"}, + {1930, 2}, + 1 + } + { + {1924, 2, "edge" "collidable"}, + {1923, 2}, + {1907, 2}, + 1 + } + { + {1899, 2}, + {1930, 2, "edge" "collidable"}, + {1929, 2}, + 1 + } + { + {1925, 2, "edge" "collidable"}, + {1924, 2}, + {1907, 2}, + 1 + } + { + {1900, 2, "edge" "collidable"}, + {1899, 2}, + {1929, 2}, + 1 + } + { + {1925, 2}, + {1907, 2, "edge" "collidable"}, + {1906, 2}, + 1 + } + { + {1900, 2}, + {1929, 2, "edge" "collidable"}, + {1928, 2}, + 1 + } + { + {1926, 2, "edge" "collidable"}, + {1925, 2}, + {1906, 2}, + 1 + } + { + {1900, 2}, + {1928, 2, "edge" "collidable"}, + {1927, 2}, + 1 + } + { + {1927, 2, "edge" "collidable"}, + {1926, 2}, + {1906, 2}, + 1 + } + { + {1900, 2}, + {1927, 2}, + {1906, 2}, + 1 + } + { + {1901, 2, "edge" "collidable"}, + {1900, 2}, + {1906, 2}, + 1 + } + { + {1901, 2}, + {1906, 2, "edge" "collidable"}, + {1905, 2}, + 1 + } + { + {1902, 2, "edge" "collidable"}, + {1901, 2}, + {1905, 2}, + 1 + } + { + {1902, 2}, + {1905, 2, "edge" "collidable"}, + {1904, 2}, + 1 + } + { + {1903, 2, "edge" "collidable"}, + {1902, 2}, + {1904, 2, "edge" "collidable"}, + 1 + } + # Mesh "Circle" + { + {2208, 2}, + {2172, 2}, + {2197, 2}, + 2 + } + { + {2215, 2}, + {2192, 2, "edge" "collidable"}, + {2198, 2}, + 2 + } + { + {2190, 2, "edge" "collidable"}, + {2208, 2}, + {2197, 2, "edge" "collidable"}, + 2 + } + { + {2204, 2}, + {2218, 2}, + {2171, 2}, + 2 + } + { + {2215, 2}, + {2198, 2, "edge" "collidable"}, + {2214, 2}, + 2 + } + { + {2184, 2}, + {2192, 2}, + {2215, 2, "edge" "collidable"}, + 2 + } + { + {2182, 2, "edge" "collidable"}, + {2203, 2}, + {2175, 2, "edge" "collidable"}, + 2 + } + { + {2180, 2, "edge" "collidable"}, + {2207, 2}, + {2188, 2, "edge" "collidable"}, + 2 + } + { + {2177, 2}, + {2215, 2}, + {2214, 2}, + 2 + } + { + {2223, 2, "edge" "collidable"}, + {2189, 2, "edge" "collidable"}, + {2205, 2}, + 2 + } + { + {2174, 2}, + {2210, 2, "edge" "collidable"}, + {2170, 2}, + 2 + } + { + {2218, 2}, + {2204, 2, "edge" "collidable"}, + {2209, 2}, + 2 + } + { + {2197, 2}, + {2173, 2, "edge" "collidable"}, + {2206, 2, "edge" "collidable"}, + 2 + } + { + {2203, 2}, + {2199, 2, "edge" "collidable"}, + {2193, 2}, + 2 + } + { + {2197, 2}, + {2172, 2, "edge" "collidable"}, + {2173, 2}, + 2 + } + { + {2202, 2}, + {2200, 2, "edge" "collidable"}, + {2183, 2}, + 2 + } + { + {2207, 2}, + {2183, 2, "edge" "collidable"}, + {2201, 2}, + 2 + } + { + {2221, 2}, + {2205, 2, "edge" "collidable"}, + {2176, 2}, + 2 + } + { + {2219, 2}, + {2174, 2}, + {2218, 2, "edge" "collidable"}, + 2 + } + { + {2187, 2, "edge" "collidable"}, + {2221, 2}, + {2176, 2}, + 2 + } + { + {2207, 2}, + {2210, 2}, + {2174, 2}, + 2 + } + { + {2218, 2}, + {2174, 2}, + {2171, 2}, + 2 + } + { + {2203, 2}, + {2193, 2}, + {2202, 2}, + 2 + } + { + {2176, 2, "edge" "collidable"}, + {2213, 2, "edge" "collidable"}, + {2211, 2}, + 2 + } + { + {2203, 2, "edge" "collidable"}, + {2177, 2}, + {2214, 2}, + 2 + } + { + {2207, 2}, + {2202, 2}, + {2183, 2}, + 2 + } + { + {2203, 2}, + {2202, 2, "edge" "collidable"}, + {2175, 2}, + 2 + } + { + {2176, 2}, + {2211, 2, "edge" "collidable"}, + {2195, 2}, + 2 + } + { + {2174, 2}, + {2170, 2, "edge" "collidable"}, + {2171, 2}, + 2 + } + { + {2187, 2}, + {2176, 2}, + {2195, 2}, + 2 + } + { + {2187, 2}, + {2195, 2}, + {2217, 2}, + 2 + } + { + {2203, 2}, + {2214, 2, "edge" "collidable"}, + {2199, 2}, + 2 + } + { + {2178, 2, "edge" "collidable"}, + {2218, 2}, + {2209, 2, "edge" "collidable"}, + 2 + } + { + {2222, 2, "edge" "collidable"}, + {2215, 2}, + {2177, 2, "edge" "collidable"}, + 2 + } + { + {2207, 2}, + {2174, 2, "edge" "collidable"}, + {2188, 2}, + 2 + } + { + {2207, 2}, + {2201, 2, "edge" "collidable"}, + {2210, 2}, + 2 + } + { + {2208, 2, "edge" "collidable"}, + {2204, 2}, + {2171, 2}, + 2 + } + { + {2187, 2}, + {2217, 2, "edge" "collidable"}, + {2220, 2}, + 2 + } + { + {2195, 2, "edge" "collidable"}, + {2212, 2, "edge" "collidable"}, + {2186, 2}, + 2 + } + { + {2217, 2}, + {2195, 2}, + {2186, 2}, + 2 + } + { + {2185, 2, "edge" "collidable"}, + {2217, 2}, + {2186, 2}, + 2 + } + { + {2179, 2, "edge" "collidable"}, + {2174, 2}, + {2219, 2, "edge" "collidable"}, + 2 + } + { + {2196, 2}, + {2202, 2}, + {2207, 2, "edge" "collidable"}, + 2 + } + { + {2202, 2}, + {2193, 2, "edge" "collidable"}, + {2200, 2}, + 2 + } + { + {2185, 2}, + {2186, 2, "edge" "collidable"}, + {2191, 2}, + 2 + } + { + {2208, 2}, + {2171, 2, "edge" "collidable"}, + {2172, 2}, + 2 + } + { + {2194, 2, "edge" "collidable"}, + {2187, 2}, + {2220, 2, "edge" "collidable"}, + 2 + } + { + {2216, 2, "edge" "collidable"}, + {2185, 2}, + {2184, 2, "edge" "collidable"}, + 2 + } + { + {2184, 2}, + {2185, 2}, + {2191, 2}, + 2 + } + { + {2181, 2, "edge" "collidable"}, + {2202, 2}, + {2196, 2, "edge" "collidable"}, + 2 + } + { + {2184, 2}, + {2191, 2, "edge" "collidable"}, + {2192, 2}, + 2 + } + { + {2205, 2}, + {2221, 2, "edge" "collidable"}, + {2223, 2}, + 2 + } } # Object types { - { "bananas", "ding" } # 0 - { "cherries", "ding" } # 1 - { "icecream", "pop" } # 2 - { "orange", "pop" } # 3 - { "sweet", "pop" } # 4 + { "bananas", "ding" } # 0 + { "cherries", "ding" } # 1 + { "icecream", "pop" } # 2 + { "orange", "pop" } # 3 + { "sweet", "pop" } # 4 } # Objects { - { -8622, -4349, 0, 0, "collidable" } # "Bananas" - { -8388, -3290, 0, 0, "collidable" } # "Bananas.001" - { -8388, -3334, 0, 0, "collidable" } # "Bananas.002" - { -8388, -3378, 0, 0, "collidable" } # "Bananas.003" - { -6756, -2912, 0, 0, "collidable" } # "Bananas.004" - { -6756, -2868, 0, 0, "collidable" } # "Bananas.005" - { -6756, -2823, 0, 0, "collidable" } # "Bananas.006" - { -5545, -2912, 0, 0, "collidable" } # "Bananas.007" - { -5545, -2956, 0, 0, "collidable" } # "Bananas.008" - { -5545, -3000, 0, 0, "collidable" } # "Bananas.009" - { -3993, -2991, 0, 0, "collidable" } # "Bananas.010" - { -3993, -2947, 0, 0, "collidable" } # "Bananas.011" - { -3993, -2903, 0, 0, "collidable" } # "Bananas.012" - { -4138, -3075, 0, 0, "collidable" } # "Bananas.013" - { -4138, -3119, 0, 0, "collidable" } # "Bananas.014" - { -4138, -3163, 0, 0, "collidable" } # "Bananas.015" - { -2794, -2116, 0, 0, "collidable" } # "Bananas.016" - { -2840, -2193, 0, 0, "collidable" } # "Bananas.017" - { -2840, -2149, 0, 0, "collidable" } # "Bananas.018" - { -1129, -1615, 0, 0, "collidable" } # "Bananas.019" - { -1129, -1659, 0, 0, "collidable" } # "Bananas.020" - { -1129, -1567, 0, 0, "collidable" } # "Bananas.021" - { -65, -2182, 0, 0, "collidable" } # "Bananas.022" - { -57, -2274, 0, 0, "collidable" } # "Bananas.023" - { -57, -2230, 0, 0, "collidable" } # "Bananas.024" - { 5433, -1393, 0, 0, "collidable" } # "Bananas.025" - { 5433, -1437, 0, 0, "collidable" } # "Bananas.026" - { 5433, -1481, 0, 0, "collidable" } # "Bananas.027" - { 7865, -1026, 0, 0, "collidable" } # "Bananas.028" - { 7865, -982, 0, 0, "collidable" } # "Bananas.029" - { 7865, -938, 0, 0, "collidable" } # "Bananas.030" - { 5052, -3061, 0, 0, "collidable" } # "Bananas.031" - { 5052, -3105, 0, 0, "collidable" } # "Bananas.032" - { 4997, -3119, 0, 0, "collidable" } # "Bananas.033" - { 3038, -3965, 0, 0, "collidable" } # "Bananas.034" - { 3043, -4068, 0, 0, "collidable" } # "Bananas.035" - { 3043, -4023, 0, 0, "collidable" } # "Bananas.036" - { -1218, -4107, 0, 0, "collidable" } # "Bananas.037" - { -1218, -4151, 0, 0, "collidable" } # "Bananas.038" - { -1183, -4138, 0, 0, "collidable" } # "Bananas.039" - { 219, -4386, 0, 0, "collidable" } # "Bananas.040" - { 165, -4406, 0, 0, "collidable" } # "Bananas.041" - { 147, -4452, 0, 0, "collidable" } # "Bananas.042" - { -3568, -4964, 0, 0, "collidable" } # "Bananas.043" - { -3462, -4961, 0, 0, "collidable" } # "Bananas.044" - { -3634, -4978, 0, 0, "collidable" } # "Bananas.045" - { -5712, -4828, 0, 0, "collidable" } # "Bananas.046" - { -5768, -4851, 0, 0, "collidable" } # "Bananas.047" - { -5721, -4876, 0, 0, "collidable" } # "Bananas.048" - { -7525, -4703, 0, 0, "collidable" } # "Bananas.049" - { -7463, -4712, 0, 0, "collidable" } # "Bananas.050" - { -7398, -4737, 0, 0, "collidable" } # "Bananas.051" - { -9245, -3451, 0, 0, "collidable" } # "Bananas.052" - { -9263, -3411, 0, 0, "collidable" } # "Bananas.053" - { -9266, -3375, 0, 0, "collidable" } # "Bananas.054" - { -7911, -4944, 0, 0, "collidable" } # "Bananas.055" - { -7875, -4937, 0, 0, "collidable" } # "Bananas.056" - { -7838, -4930, 0, 0, "collidable" } # "Bananas.057" - { -7798, -4910, 0, 0, "collidable" } # "Bananas.058" - { -7764, -4900, 0, 0, "collidable" } # "Bananas.059" - { -7728, -4884, 0, 0, "collidable" } # "Bananas.060" - { -7691, -4864, 0, 0, "collidable" } # "Bananas.061" - { 3251, -1892, 0, 0, "collidable" } # "Bananas.062" - { 3324, -1872, 0, 0, "collidable" } # "Bananas.063" - { 3376, -1809, 0, 0, "collidable" } # "Bananas.064" - { 3439, -1736, 0, 0, "collidable" } # "Bananas.065" - { 8187, -1235, 0, 0, "collidable" } # "Bananas.066" - { 8388, -1071, 0, 0, "collidable" } # "Bananas.067" - { 8606, -852, 0, 0, "collidable" } # "Bananas.068" - { 7941, -1381, 0, 0, "collidable" } # "Bananas.069" - { 8105, -1982, 0, 0, "collidable" } # "Bananas.070" - { 8278, -1891, 0, 0, "collidable" } # "Bananas.071" - { 8479, -1727, 0, 0, "collidable" } # "Bananas.072" - { 9518, -1007, 0, 0, "collidable" } # "Bananas.073" - { 9552, -959, 0, 0, "collidable" } # "Bananas.074" - { 9586, -897, 0, 0, "collidable" } # "Bananas.075" - { 9604, -842, 0, 0, "collidable" } # "Bananas.076" - { 9617, -795, 0, 0, "collidable" } # "Bananas.077" - { 9638, -740, 0, 0, "collidable" } # "Bananas.078" - { 9645, -685, 0, 0, "collidable" } # "Bananas.079" - { 9645, -630, 0, 0, "collidable" } # "Bananas.080" - { 9652, -575, 0, 0, "collidable" } # "Bananas.081" - { 9316, -1083, 0, 0, "collidable" } # "Bananas.082" - { 9371, -1083, 0, 0, "collidable" } # "Bananas.083" - { 9434, -1065, 0, 0, "collidable" } # "Bananas.084" - { 9470, -1046, 0, 0, "collidable" } # "Bananas.085" - { -8694, -4308, 0, 1, "collidable" } # "Cherries" - { -6612, -2855, 0, 1, "collidable" } # "Cherries.001" - { -6589, -2900, 0, 1, "collidable" } # "Cherries.002" - { -6557, -2937, 0, 1, "collidable" } # "Cherries.003" - { -6513, -2951, 0, 1, "collidable" } # "Cherries.004" - { -6465, -2951, 0, 1, "collidable" } # "Cherries.005" - { -6447, -2933, 0, 1, "collidable" } # "Cherries.006" - { -4801, -3173, 0, 1, "collidable" } # "Cherries.007" - { -4844, -3147, 0, 1, "collidable" } # "Cherries.008" - { -4891, -3147, 0, 1, "collidable" } # "Cherries.009" - { -4935, -3133, 0, 1, "collidable" } # "Cherries.010" - { -4968, -3096, 0, 1, "collidable" } # "Cherries.011" - { -4991, -3051, 0, 1, "collidable" } # "Cherries.012" - { -807, -1730, 0, 1, "collidable" } # "Cherries.013" - { -784, -1776, 0, 1, "collidable" } # "Cherries.014" - { -751, -1812, 0, 1, "collidable" } # "Cherries.015" - { -707, -1827, 0, 1, "collidable" } # "Cherries.016" - { -660, -1827, 0, 1, "collidable" } # "Cherries.017" - { -642, -1809, 0, 1, "collidable" } # "Cherries.018" - { 2300, -1795, 0, 1, "collidable" } # "Cherries.019" - { 2282, -1814, 0, 1, "collidable" } # "Cherries.020" - { 2235, -1814, 0, 1, "collidable" } # "Cherries.021" - { 2191, -1799, 0, 1, "collidable" } # "Cherries.022" - { 2158, -1763, 0, 1, "collidable" } # "Cherries.023" - { 2135, -1717, 0, 1, "collidable" } # "Cherries.024" - { 3861, -1592, 0, 1, "collidable" } # "Cherries.025" - { 3884, -1637, 0, 1, "collidable" } # "Cherries.026" - { 3917, -1674, 0, 1, "collidable" } # "Cherries.027" - { 3961, -1688, 0, 1, "collidable" } # "Cherries.028" - { 4008, -1688, 0, 1, "collidable" } # "Cherries.029" - { 4033, -1689, 0, 1, "collidable" } # "Cherries.030" - { 5777, -1783, 0, 1, "collidable" } # "Cherries.031" - { 5759, -1801, 0, 1, "collidable" } # "Cherries.032" - { 5712, -1801, 0, 1, "collidable" } # "Cherries.033" - { 5668, -1787, 0, 1, "collidable" } # "Cherries.034" - { 5635, -1750, 0, 1, "collidable" } # "Cherries.035" - { 5612, -1705, 0, 1, "collidable" } # "Cherries.036" - { 7250, -1460, 0, 1, "collidable" } # "Cherries.037" - { 7273, -1505, 0, 1, "collidable" } # "Cherries.038" - { 7306, -1542, 0, 1, "collidable" } # "Cherries.039" - { 7350, -1556, 0, 1, "collidable" } # "Cherries.040" - { 7397, -1556, 0, 1, "collidable" } # "Cherries.041" - { 7441, -1576, 0, 1, "collidable" } # "Cherries.042" - { 1089, -4249, 0, 1, "collidable" } # "Cherries.043" - { 1071, -4268, 0, 1, "collidable" } # "Cherries.044" - { 1023, -4268, 0, 1, "collidable" } # "Cherries.045" - { 980, -4253, 0, 1, "collidable" } # "Cherries.046" - { 947, -4217, 0, 1, "collidable" } # "Cherries.047" - { 924, -4171, 0, 1, "collidable" } # "Cherries.048" - { -921, -4303, 0, 1, "collidable" } # "Cherries.049" - { -899, -4348, 0, 1, "collidable" } # "Cherries.050" - { -866, -4385, 0, 1, "collidable" } # "Cherries.051" - { -822, -4400, 0, 1, "collidable" } # "Cherries.052" - { -774, -4400, 0, 1, "collidable" } # "Cherries.053" - { -756, -4381, 0, 1, "collidable" } # "Cherries.054" - { -2488, -4946, 0, 1, "collidable" } # "Cherries.055" - { -2507, -4964, 0, 1, "collidable" } # "Cherries.056" - { -2554, -4964, 0, 1, "collidable" } # "Cherries.057" - { -2598, -4950, 0, 1, "collidable" } # "Cherries.058" - { -2631, -4913, 0, 1, "collidable" } # "Cherries.059" - { -2653, -4868, 0, 1, "collidable" } # "Cherries.060" - { -6231, -4736, 0, 1, "collidable" } # "Cherries.061" - { -6208, -4781, 0, 1, "collidable" } # "Cherries.062" - { -6175, -4818, 0, 1, "collidable" } # "Cherries.063" - { -6132, -4833, 0, 1, "collidable" } # "Cherries.064" - { -6084, -4833, 0, 1, "collidable" } # "Cherries.065" - { -6066, -4814, 0, 1, "collidable" } # "Cherries.066" - { 8897, -68, 0, -1, "collidable" } # "Exit" - { -8793, -4272, 0, 2, "collidable" } # "Icecream" - { -9275, -3077, 0, 2, "collidable" } # "Icecream.001" - { -9237, -3039, 0, 2, "collidable" } # "Icecream.002" - { -7236, -3039, 0, 2, "collidable" } # "Icecream.003" - { -7274, -3077, 0, 2, "collidable" } # "Icecream.004" - { -3703, -2685, 0, 2, "collidable" } # "Icecream.005" - { -3665, -2648, 0, 2, "collidable" } # "Icecream.006" - { -2265, -1771, 0, 2, "collidable" } # "Icecream.007" - { -2303, -1809, 0, 2, "collidable" } # "Icecream.008" - { 1116, -1999, 0, 2, "collidable" } # "Icecream.009" - { 1154, -1961, 0, 2, "collidable" } # "Icecream.010" - { 4898, -1472, 0, 2, "collidable" } # "Icecream.011" - { 4860, -1510, 0, 2, "collidable" } # "Icecream.012" - { 6407, -1429, 0, 2, "collidable" } # "Icecream.013" - { 6445, -1391, 0, 2, "collidable" } # "Icecream.014" - { 8224, -357, 0, 2, "collidable" } # "Icecream.015" - { 8186, -395, 0, 2, "collidable" } # "Icecream.016" - { -9126, -2986, 0, 2, "collidable" } # "Icecream.017" - { -9185, -2998, 0, 2, "collidable" } # "Icecream.018" - { -7131, -2887, 0, 2, "collidable" } # "Icecream.019" - { -7072, -2876, 0, 2, "collidable" } # "Icecream.020" - { -7182, -2928, 0, 2, "collidable" } # "Icecream.021" - { -7220, -2966, 0, 2, "collidable" } # "Icecream.022" - { -3603, -2603, 0, 2, "collidable" } # "Icecream.023" - { -3565, -2565, 0, 2, "collidable" } # "Icecream.024" - { -3455, -2513, 0, 2, "collidable" } # "Icecream.025" - { -3514, -2524, 0, 2, "collidable" } # "Icecream.026" - { -1978, -1556, 0, 2, "collidable" } # "Icecream.027" - { -1919, -1544, 0, 2, "collidable" } # "Icecream.028" - { -2029, -1597, 0, 2, "collidable" } # "Icecream.029" - { -2067, -1635, 0, 2, "collidable" } # "Icecream.030" - { 785, -2142, 0, 2, "collidable" } # "Icecream.031" - { 823, -2104, 0, 2, "collidable" } # "Icecream.032" - { 933, -2051, 0, 2, "collidable" } # "Icecream.033" - { 875, -2063, 0, 2, "collidable" } # "Icecream.034" - { 1465, -1639, 0, 2, "collidable" } # "Icecream.035" - { 1524, -1627, 0, 2, "collidable" } # "Icecream.036" - { 1413, -1680, 0, 2, "collidable" } # "Icecream.037" - { 1375, -1718, 0, 2, "collidable" } # "Icecream.038" - { 3252, -1438, 0, 2, "collidable" } # "Icecream.039" - { 3290, -1400, 0, 2, "collidable" } # "Icecream.040" - { 3400, -1347, 0, 2, "collidable" } # "Icecream.041" - { 3341, -1359, 0, 2, "collidable" } # "Icecream.042" - { 5006, -1276, 0, 2, "collidable" } # "Icecream.043" - { 5065, -1264, 0, 2, "collidable" } # "Icecream.044" - { 4954, -1317, 0, 2, "collidable" } # "Icecream.045" - { 4917, -1355, 0, 2, "collidable" } # "Icecream.046" - { 6524, -1300, 0, 2, "collidable" } # "Icecream.047" - { 6562, -1262, 0, 2, "collidable" } # "Icecream.048" - { 6672, -1210, 0, 2, "collidable" } # "Icecream.049" - { 6613, -1221, 0, 2, "collidable" } # "Icecream.050" - { 8429, -195, 0, 2, "collidable" } # "Icecream.051" - { 8488, -184, 0, 2, "collidable" } # "Icecream.052" - { 8378, -236, 0, 2, "collidable" } # "Icecream.053" - { 8340, -274, 0, 2, "collidable" } # "Icecream.054" - { 5605, -2726, 0, 2, "collidable" } # "Icecream.055" - { 5643, -2688, 0, 2, "collidable" } # "Icecream.056" - { 5753, -2635, 0, 2, "collidable" } # "Icecream.057" - { 5694, -2647, 0, 2, "collidable" } # "Icecream.058" - { 4485, -3203, 0, 2, "collidable" } # "Icecream.059" - { 4544, -3191, 0, 2, "collidable" } # "Icecream.060" - { 4433, -3244, 0, 2, "collidable" } # "Icecream.061" - { 4395, -3281, 0, 2, "collidable" } # "Icecream.062" - { 3618, -3703, 0, 2, "collidable" } # "Icecream.063" - { 3656, -3665, 0, 2, "collidable" } # "Icecream.064" - { 3766, -3612, 0, 2, "collidable" } # "Icecream.065" - { 3707, -3624, 0, 2, "collidable" } # "Icecream.066" - { 2306, -3671, 0, 2, "collidable" } # "Icecream.067" - { 2364, -3659, 0, 2, "collidable" } # "Icecream.068" - { 2254, -3712, 0, 2, "collidable" } # "Icecream.069" - { 2216, -3750, 0, 2, "collidable" } # "Icecream.070" - { -9564, -3898, 0, 2, "collidable" } # "Icecream.071" - { -9495, -3901, 0, 2, "collidable" } # "Icecream.072" - { -9418, -3890, 0, 2, "collidable" } # "Icecream.073" - { -9364, -3883, 0, 2, "collidable" } # "Icecream.074" - { -9302, -3865, 0, 2, "collidable" } # "Icecream.075" - { -9262, -3836, 0, 2, "collidable" } # "Icecream.076" - { -9229, -3799, 0, 2, "collidable" } # "Icecream.077" - { -9204, -3752, 0, 2, "collidable" } # "Icecream.078" - { -9182, -3705, 0, 2, "collidable" } # "Icecream.079" - { -9153, -3639, 0, 2, "collidable" } # "Icecream.080" - { -8534, -4389, 0, 3, "collidable" } # "Orange" - { -4627, -4845, 0, 3, "collidable" } # "Orange.001" - { -4652, -4882, 0, 3, "collidable" } # "Orange.002" - { -4650, -4921, 0, 3, "collidable" } # "Orange.003" - { -4634, -4959, 0, 3, "collidable" } # "Orange.004" - { -4600, -4994, 0, 3, "collidable" } # "Orange.005" - { -4535, -5020, 0, 3, "collidable" } # "Orange.006" - { -4474, -5028, 0, 3, "collidable" } # "Orange.007" - { -4421, -5033, 0, 3, "collidable" } # "Orange.008" - { -4364, -5035, 0, 3, "collidable" } # "Orange.009" - { -4313, -5032, 0, 3, "collidable" } # "Orange.010" - { -4262, -5024, 0, 3, "collidable" } # "Orange.011" - { -4214, -5013, 0, 3, "collidable" } # "Orange.012" - { -4170, -4999, 0, 3, "collidable" } # "Orange.013" - { -4138, -4978, 0, 3, "collidable" } # "Orange.014" - { -4106, -4957, 0, 3, "collidable" } # "Orange.015" - { -4083, -4931, 0, 3, "collidable" } # "Orange.016" - { -4077, -4900, 0, 3, "collidable" } # "Orange.017" - { -4081, -4870, 0, 3, "collidable" } # "Orange.018" - { -3914, -3223, 0, 3, "collidable" } # "Orange.019" - { 1133, -2347, 0, 3, "collidable" } # "Orange.020" - { 4788, -1814, 0, 3, "collidable" } # "Orange.021" - { 8109, -1294, 0, 3, "collidable" } # "Orange.022" - { 8290, -1181, 0, 3, "collidable" } # "Orange.023" - { 8493, -978, 0, 3, "collidable" } # "Orange.024" - { 8651, -684, 0, 3, "collidable" } # "Orange.025" - { 2055, -4186, 0, 3, "collidable" } # "Orange.026" - { 1607, -2356, 0, 3, "collidable" } # "Orange.027" - { 2026, -2203, 0, 3, "collidable" } # "Orange.028" - { 2109, -2195, 0, 3, "collidable" } # "Orange.029" - { 2914, -2330, 0, 3, "collidable" } # "Orange.030" - { 1209, -2575, 0, 3, "collidable" } # "Orange.031" - { 1270, -2570, 0, 3, "collidable" } # "Orange.032" - { 1357, -2557, 0, 3, "collidable" } # "Orange.033" - { 1410, -2536, 0, 3, "collidable" } # "Orange.034" - { 1467, -2487, 0, 3, "collidable" } # "Orange.035" - { 1532, -2444, 0, 3, "collidable" } # "Orange.036" - { 1707, -2326, 0, 3, "collidable" } # "Orange.037" - { 1795, -2282, 0, 3, "collidable" } # "Orange.038" - { 1921, -2225, 0, 3, "collidable" } # "Orange.039" - { 2197, -2225, 0, 3, "collidable" } # "Orange.040" - { 2324, -2256, 0, 3, "collidable" } # "Orange.041" - { 2446, -2308, 0, 3, "collidable" } # "Orange.042" - { 2560, -2326, 0, 3, "collidable" } # "Orange.043" - { 2664, -2343, 0, 3, "collidable" } # "Orange.044" - { 2787, -2348, 0, 3, "collidable" } # "Orange.045" - { 658, -2605, 0, 3, "collidable" } # "Orange.046" - { 741, -2645, 0, 3, "collidable" } # "Orange.047" - { 837, -2658, 0, 3, "collidable" } # "Orange.048" - { 920, -2645, 0, 3, "collidable" } # "Orange.049" - { 986, -2627, 0, 3, "collidable" } # "Orange.050" - { 1060, -2619, 0, 3, "collidable" } # "Orange.051" - { 1130, -2601, 0, 3, "collidable" } # "Orange.052" - { -8875, -4233, 0, 4, "collidable" } # "Sweet" - { -9173, -3799, 0, 4, "collidable" } # "Sweet.001" - { -7503, -3681, 0, 4, "collidable" } # "Sweet.002" - { -5776, -3113, 0, 4, "collidable" } # "Sweet.003" - { -4285, -3257, 0, 4, "collidable" } # "Sweet.004" - { 758, -2330, 0, 4, "collidable" } # "Sweet.005" - { 3154, -1946, 0, 4, "collidable" } # "Sweet.006" - { 4579, -1810, 0, 4, "collidable" } # "Sweet.007" - { 6162, -1765, 0, 4, "collidable" } # "Sweet.008" - { 7812, -1448, 0, 4, "collidable" } # "Sweet.009" - { -6975, -2850, 0, 4, "collidable" } # "Sweet.010" - { -5302, -2918, 0, 4, "collidable" } # "Sweet.011" - { -1748, -1546, 0, 4, "collidable" } # "Sweet.012" - { 1730, -1674, 0, 4, "collidable" } # "Sweet.013" - { 3539, -1358, 0, 4, "collidable" } # "Sweet.014" - { 5144, -1177, 0, 4, "collidable" } # "Sweet.015" - { 6795, -1154, 0, 4, "collidable" } # "Sweet.016" - { 9372, -182, 0, 4, "collidable" } # "Sweet.017" + { -8622, -4349, 0, 0, "collidable" } # "Bananas" + { -8388, -3290, 0, 0, "collidable" } # "Bananas.001" + { -8388, -3334, 0, 0, "collidable" } # "Bananas.002" + { -8388, -3378, 0, 0, "collidable" } # "Bananas.003" + { -6756, -2912, 0, 0, "collidable" } # "Bananas.004" + { -6756, -2868, 0, 0, "collidable" } # "Bananas.005" + { -6756, -2823, 0, 0, "collidable" } # "Bananas.006" + { -5545, -2912, 0, 0, "collidable" } # "Bananas.007" + { -5545, -2956, 0, 0, "collidable" } # "Bananas.008" + { -5545, -3000, 0, 0, "collidable" } # "Bananas.009" + { -3993, -2991, 0, 0, "collidable" } # "Bananas.010" + { -3993, -2947, 0, 0, "collidable" } # "Bananas.011" + { -3993, -2903, 0, 0, "collidable" } # "Bananas.012" + { -4138, -3075, 0, 0, "collidable" } # "Bananas.013" + { -4138, -3119, 0, 0, "collidable" } # "Bananas.014" + { -4138, -3163, 0, 0, "collidable" } # "Bananas.015" + { -2794, -2116, 0, 0, "collidable" } # "Bananas.016" + { -2840, -2193, 0, 0, "collidable" } # "Bananas.017" + { -2840, -2149, 0, 0, "collidable" } # "Bananas.018" + { -1129, -1615, 0, 0, "collidable" } # "Bananas.019" + { -1129, -1659, 0, 0, "collidable" } # "Bananas.020" + { -1129, -1567, 0, 0, "collidable" } # "Bananas.021" + { -65, -2182, 0, 0, "collidable" } # "Bananas.022" + { -57, -2274, 0, 0, "collidable" } # "Bananas.023" + { -57, -2230, 0, 0, "collidable" } # "Bananas.024" + { 5433, -1393, 0, 0, "collidable" } # "Bananas.025" + { 5433, -1437, 0, 0, "collidable" } # "Bananas.026" + { 5433, -1481, 0, 0, "collidable" } # "Bananas.027" + { 7865, -1026, 0, 0, "collidable" } # "Bananas.028" + { 7865, -982, 0, 0, "collidable" } # "Bananas.029" + { 7865, -938, 0, 0, "collidable" } # "Bananas.030" + { 5052, -3061, 0, 0, "collidable" } # "Bananas.031" + { 5052, -3105, 0, 0, "collidable" } # "Bananas.032" + { 4997, -3119, 0, 0, "collidable" } # "Bananas.033" + { 3038, -3965, 0, 0, "collidable" } # "Bananas.034" + { 3043, -4068, 0, 0, "collidable" } # "Bananas.035" + { 3043, -4023, 0, 0, "collidable" } # "Bananas.036" + { -1218, -4107, 0, 0, "collidable" } # "Bananas.037" + { -1218, -4151, 0, 0, "collidable" } # "Bananas.038" + { -1183, -4138, 0, 0, "collidable" } # "Bananas.039" + { 219, -4386, 0, 0, "collidable" } # "Bananas.040" + { 165, -4406, 0, 0, "collidable" } # "Bananas.041" + { 147, -4452, 0, 0, "collidable" } # "Bananas.042" + { -3568, -4964, 0, 0, "collidable" } # "Bananas.043" + { -3462, -4961, 0, 0, "collidable" } # "Bananas.044" + { -3634, -4978, 0, 0, "collidable" } # "Bananas.045" + { -5712, -4828, 0, 0, "collidable" } # "Bananas.046" + { -5768, -4851, 0, 0, "collidable" } # "Bananas.047" + { -5721, -4876, 0, 0, "collidable" } # "Bananas.048" + { -7525, -4703, 0, 0, "collidable" } # "Bananas.049" + { -7463, -4712, 0, 0, "collidable" } # "Bananas.050" + { -7398, -4737, 0, 0, "collidable" } # "Bananas.051" + { -9245, -3451, 0, 0, "collidable" } # "Bananas.052" + { -9263, -3411, 0, 0, "collidable" } # "Bananas.053" + { -9266, -3375, 0, 0, "collidable" } # "Bananas.054" + { -7911, -4944, 0, 0, "collidable" } # "Bananas.055" + { -7875, -4937, 0, 0, "collidable" } # "Bananas.056" + { -7838, -4930, 0, 0, "collidable" } # "Bananas.057" + { -7798, -4910, 0, 0, "collidable" } # "Bananas.058" + { -7764, -4900, 0, 0, "collidable" } # "Bananas.059" + { -7728, -4884, 0, 0, "collidable" } # "Bananas.060" + { -7691, -4864, 0, 0, "collidable" } # "Bananas.061" + { 3251, -1892, 0, 0, "collidable" } # "Bananas.062" + { 3324, -1872, 0, 0, "collidable" } # "Bananas.063" + { 3376, -1809, 0, 0, "collidable" } # "Bananas.064" + { 3439, -1736, 0, 0, "collidable" } # "Bananas.065" + { 8187, -1235, 0, 0, "collidable" } # "Bananas.066" + { 8388, -1071, 0, 0, "collidable" } # "Bananas.067" + { 8606, -852, 0, 0, "collidable" } # "Bananas.068" + { 7941, -1381, 0, 0, "collidable" } # "Bananas.069" + { 8105, -1982, 0, 0, "collidable" } # "Bananas.070" + { 8278, -1891, 0, 0, "collidable" } # "Bananas.071" + { 8479, -1727, 0, 0, "collidable" } # "Bananas.072" + { 9518, -1007, 0, 0, "collidable" } # "Bananas.073" + { 9552, -959, 0, 0, "collidable" } # "Bananas.074" + { 9586, -897, 0, 0, "collidable" } # "Bananas.075" + { 9604, -842, 0, 0, "collidable" } # "Bananas.076" + { 9617, -795, 0, 0, "collidable" } # "Bananas.077" + { 9638, -740, 0, 0, "collidable" } # "Bananas.078" + { 9645, -685, 0, 0, "collidable" } # "Bananas.079" + { 9645, -630, 0, 0, "collidable" } # "Bananas.080" + { 9652, -575, 0, 0, "collidable" } # "Bananas.081" + { 9316, -1083, 0, 0, "collidable" } # "Bananas.082" + { 9371, -1083, 0, 0, "collidable" } # "Bananas.083" + { 9434, -1065, 0, 0, "collidable" } # "Bananas.084" + { 9470, -1046, 0, 0, "collidable" } # "Bananas.085" + { -8694, -4308, 0, 1, "collidable" } # "Cherries" + { -6612, -2855, 0, 1, "collidable" } # "Cherries.001" + { -6589, -2900, 0, 1, "collidable" } # "Cherries.002" + { -6557, -2937, 0, 1, "collidable" } # "Cherries.003" + { -6513, -2951, 0, 1, "collidable" } # "Cherries.004" + { -6465, -2951, 0, 1, "collidable" } # "Cherries.005" + { -6447, -2933, 0, 1, "collidable" } # "Cherries.006" + { -4801, -3173, 0, 1, "collidable" } # "Cherries.007" + { -4844, -3147, 0, 1, "collidable" } # "Cherries.008" + { -4891, -3147, 0, 1, "collidable" } # "Cherries.009" + { -4935, -3133, 0, 1, "collidable" } # "Cherries.010" + { -4968, -3096, 0, 1, "collidable" } # "Cherries.011" + { -4991, -3051, 0, 1, "collidable" } # "Cherries.012" + { -807, -1730, 0, 1, "collidable" } # "Cherries.013" + { -784, -1776, 0, 1, "collidable" } # "Cherries.014" + { -751, -1812, 0, 1, "collidable" } # "Cherries.015" + { -707, -1827, 0, 1, "collidable" } # "Cherries.016" + { -660, -1827, 0, 1, "collidable" } # "Cherries.017" + { -642, -1809, 0, 1, "collidable" } # "Cherries.018" + { 2300, -1795, 0, 1, "collidable" } # "Cherries.019" + { 2282, -1814, 0, 1, "collidable" } # "Cherries.020" + { 2235, -1814, 0, 1, "collidable" } # "Cherries.021" + { 2191, -1799, 0, 1, "collidable" } # "Cherries.022" + { 2158, -1763, 0, 1, "collidable" } # "Cherries.023" + { 2135, -1717, 0, 1, "collidable" } # "Cherries.024" + { 3861, -1592, 0, 1, "collidable" } # "Cherries.025" + { 3884, -1637, 0, 1, "collidable" } # "Cherries.026" + { 3917, -1674, 0, 1, "collidable" } # "Cherries.027" + { 3961, -1688, 0, 1, "collidable" } # "Cherries.028" + { 4008, -1688, 0, 1, "collidable" } # "Cherries.029" + { 4033, -1689, 0, 1, "collidable" } # "Cherries.030" + { 5777, -1783, 0, 1, "collidable" } # "Cherries.031" + { 5759, -1801, 0, 1, "collidable" } # "Cherries.032" + { 5712, -1801, 0, 1, "collidable" } # "Cherries.033" + { 5668, -1787, 0, 1, "collidable" } # "Cherries.034" + { 5635, -1750, 0, 1, "collidable" } # "Cherries.035" + { 5612, -1705, 0, 1, "collidable" } # "Cherries.036" + { 7250, -1460, 0, 1, "collidable" } # "Cherries.037" + { 7273, -1505, 0, 1, "collidable" } # "Cherries.038" + { 7306, -1542, 0, 1, "collidable" } # "Cherries.039" + { 7350, -1556, 0, 1, "collidable" } # "Cherries.040" + { 7397, -1556, 0, 1, "collidable" } # "Cherries.041" + { 7441, -1576, 0, 1, "collidable" } # "Cherries.042" + { 1089, -4249, 0, 1, "collidable" } # "Cherries.043" + { 1071, -4268, 0, 1, "collidable" } # "Cherries.044" + { 1023, -4268, 0, 1, "collidable" } # "Cherries.045" + { 980, -4253, 0, 1, "collidable" } # "Cherries.046" + { 947, -4217, 0, 1, "collidable" } # "Cherries.047" + { 924, -4171, 0, 1, "collidable" } # "Cherries.048" + { -921, -4303, 0, 1, "collidable" } # "Cherries.049" + { -899, -4348, 0, 1, "collidable" } # "Cherries.050" + { -866, -4385, 0, 1, "collidable" } # "Cherries.051" + { -822, -4400, 0, 1, "collidable" } # "Cherries.052" + { -774, -4400, 0, 1, "collidable" } # "Cherries.053" + { -756, -4381, 0, 1, "collidable" } # "Cherries.054" + { -2488, -4946, 0, 1, "collidable" } # "Cherries.055" + { -2507, -4964, 0, 1, "collidable" } # "Cherries.056" + { -2554, -4964, 0, 1, "collidable" } # "Cherries.057" + { -2598, -4950, 0, 1, "collidable" } # "Cherries.058" + { -2631, -4913, 0, 1, "collidable" } # "Cherries.059" + { -2653, -4868, 0, 1, "collidable" } # "Cherries.060" + { -6231, -4736, 0, 1, "collidable" } # "Cherries.061" + { -6208, -4781, 0, 1, "collidable" } # "Cherries.062" + { -6175, -4818, 0, 1, "collidable" } # "Cherries.063" + { -6132, -4833, 0, 1, "collidable" } # "Cherries.064" + { -6084, -4833, 0, 1, "collidable" } # "Cherries.065" + { -6066, -4814, 0, 1, "collidable" } # "Cherries.066" + { 8897, -68, 0, -1, "collidable" } # "Exit" + { -8793, -4272, 0, 2, "collidable" } # "Icecream" + { -9275, -3077, 0, 2, "collidable" } # "Icecream.001" + { -9237, -3039, 0, 2, "collidable" } # "Icecream.002" + { -7236, -3039, 0, 2, "collidable" } # "Icecream.003" + { -7274, -3077, 0, 2, "collidable" } # "Icecream.004" + { -3703, -2685, 0, 2, "collidable" } # "Icecream.005" + { -3665, -2648, 0, 2, "collidable" } # "Icecream.006" + { -2265, -1771, 0, 2, "collidable" } # "Icecream.007" + { -2303, -1809, 0, 2, "collidable" } # "Icecream.008" + { 1116, -1999, 0, 2, "collidable" } # "Icecream.009" + { 1154, -1961, 0, 2, "collidable" } # "Icecream.010" + { 4898, -1472, 0, 2, "collidable" } # "Icecream.011" + { 4860, -1510, 0, 2, "collidable" } # "Icecream.012" + { 6407, -1429, 0, 2, "collidable" } # "Icecream.013" + { 6445, -1391, 0, 2, "collidable" } # "Icecream.014" + { 8224, -357, 0, 2, "collidable" } # "Icecream.015" + { 8186, -395, 0, 2, "collidable" } # "Icecream.016" + { -9126, -2986, 0, 2, "collidable" } # "Icecream.017" + { -9185, -2998, 0, 2, "collidable" } # "Icecream.018" + { -7131, -2887, 0, 2, "collidable" } # "Icecream.019" + { -7072, -2876, 0, 2, "collidable" } # "Icecream.020" + { -7182, -2928, 0, 2, "collidable" } # "Icecream.021" + { -7220, -2966, 0, 2, "collidable" } # "Icecream.022" + { -3603, -2603, 0, 2, "collidable" } # "Icecream.023" + { -3565, -2565, 0, 2, "collidable" } # "Icecream.024" + { -3455, -2513, 0, 2, "collidable" } # "Icecream.025" + { -3514, -2524, 0, 2, "collidable" } # "Icecream.026" + { -1978, -1556, 0, 2, "collidable" } # "Icecream.027" + { -1919, -1544, 0, 2, "collidable" } # "Icecream.028" + { -2029, -1597, 0, 2, "collidable" } # "Icecream.029" + { -2067, -1635, 0, 2, "collidable" } # "Icecream.030" + { 785, -2142, 0, 2, "collidable" } # "Icecream.031" + { 823, -2104, 0, 2, "collidable" } # "Icecream.032" + { 933, -2051, 0, 2, "collidable" } # "Icecream.033" + { 875, -2063, 0, 2, "collidable" } # "Icecream.034" + { 1465, -1639, 0, 2, "collidable" } # "Icecream.035" + { 1524, -1627, 0, 2, "collidable" } # "Icecream.036" + { 1413, -1680, 0, 2, "collidable" } # "Icecream.037" + { 1375, -1718, 0, 2, "collidable" } # "Icecream.038" + { 3252, -1438, 0, 2, "collidable" } # "Icecream.039" + { 3290, -1400, 0, 2, "collidable" } # "Icecream.040" + { 3400, -1347, 0, 2, "collidable" } # "Icecream.041" + { 3341, -1359, 0, 2, "collidable" } # "Icecream.042" + { 5006, -1276, 0, 2, "collidable" } # "Icecream.043" + { 5065, -1264, 0, 2, "collidable" } # "Icecream.044" + { 4954, -1317, 0, 2, "collidable" } # "Icecream.045" + { 4917, -1355, 0, 2, "collidable" } # "Icecream.046" + { 6524, -1300, 0, 2, "collidable" } # "Icecream.047" + { 6562, -1262, 0, 2, "collidable" } # "Icecream.048" + { 6672, -1210, 0, 2, "collidable" } # "Icecream.049" + { 6613, -1221, 0, 2, "collidable" } # "Icecream.050" + { 8429, -195, 0, 2, "collidable" } # "Icecream.051" + { 8488, -184, 0, 2, "collidable" } # "Icecream.052" + { 8378, -236, 0, 2, "collidable" } # "Icecream.053" + { 8340, -274, 0, 2, "collidable" } # "Icecream.054" + { 5605, -2726, 0, 2, "collidable" } # "Icecream.055" + { 5643, -2688, 0, 2, "collidable" } # "Icecream.056" + { 5753, -2635, 0, 2, "collidable" } # "Icecream.057" + { 5694, -2647, 0, 2, "collidable" } # "Icecream.058" + { 4485, -3203, 0, 2, "collidable" } # "Icecream.059" + { 4544, -3191, 0, 2, "collidable" } # "Icecream.060" + { 4433, -3244, 0, 2, "collidable" } # "Icecream.061" + { 4395, -3281, 0, 2, "collidable" } # "Icecream.062" + { 3618, -3703, 0, 2, "collidable" } # "Icecream.063" + { 3656, -3665, 0, 2, "collidable" } # "Icecream.064" + { 3766, -3612, 0, 2, "collidable" } # "Icecream.065" + { 3707, -3624, 0, 2, "collidable" } # "Icecream.066" + { 2306, -3671, 0, 2, "collidable" } # "Icecream.067" + { 2364, -3659, 0, 2, "collidable" } # "Icecream.068" + { 2254, -3712, 0, 2, "collidable" } # "Icecream.069" + { 2216, -3750, 0, 2, "collidable" } # "Icecream.070" + { -9564, -3898, 0, 2, "collidable" } # "Icecream.071" + { -9495, -3901, 0, 2, "collidable" } # "Icecream.072" + { -9418, -3890, 0, 2, "collidable" } # "Icecream.073" + { -9364, -3883, 0, 2, "collidable" } # "Icecream.074" + { -9302, -3865, 0, 2, "collidable" } # "Icecream.075" + { -9262, -3836, 0, 2, "collidable" } # "Icecream.076" + { -9229, -3799, 0, 2, "collidable" } # "Icecream.077" + { -9204, -3752, 0, 2, "collidable" } # "Icecream.078" + { -9182, -3705, 0, 2, "collidable" } # "Icecream.079" + { -9153, -3639, 0, 2, "collidable" } # "Icecream.080" + { -8534, -4389, 0, 3, "collidable" } # "Orange" + { -4627, -4845, 0, 3, "collidable" } # "Orange.001" + { -4652, -4882, 0, 3, "collidable" } # "Orange.002" + { -4650, -4921, 0, 3, "collidable" } # "Orange.003" + { -4634, -4959, 0, 3, "collidable" } # "Orange.004" + { -4600, -4994, 0, 3, "collidable" } # "Orange.005" + { -4535, -5020, 0, 3, "collidable" } # "Orange.006" + { -4474, -5028, 0, 3, "collidable" } # "Orange.007" + { -4421, -5033, 0, 3, "collidable" } # "Orange.008" + { -4364, -5035, 0, 3, "collidable" } # "Orange.009" + { -4313, -5032, 0, 3, "collidable" } # "Orange.010" + { -4262, -5024, 0, 3, "collidable" } # "Orange.011" + { -4214, -5013, 0, 3, "collidable" } # "Orange.012" + { -4170, -4999, 0, 3, "collidable" } # "Orange.013" + { -4138, -4978, 0, 3, "collidable" } # "Orange.014" + { -4106, -4957, 0, 3, "collidable" } # "Orange.015" + { -4083, -4931, 0, 3, "collidable" } # "Orange.016" + { -4077, -4900, 0, 3, "collidable" } # "Orange.017" + { -4081, -4870, 0, 3, "collidable" } # "Orange.018" + { -3914, -3223, 0, 3, "collidable" } # "Orange.019" + { 1133, -2347, 0, 3, "collidable" } # "Orange.020" + { 4788, -1814, 0, 3, "collidable" } # "Orange.021" + { 8109, -1294, 0, 3, "collidable" } # "Orange.022" + { 8290, -1181, 0, 3, "collidable" } # "Orange.023" + { 8493, -978, 0, 3, "collidable" } # "Orange.024" + { 8651, -684, 0, 3, "collidable" } # "Orange.025" + { 2055, -4186, 0, 3, "collidable" } # "Orange.026" + { 1607, -2356, 0, 3, "collidable" } # "Orange.027" + { 2026, -2203, 0, 3, "collidable" } # "Orange.028" + { 2109, -2195, 0, 3, "collidable" } # "Orange.029" + { 2914, -2330, 0, 3, "collidable" } # "Orange.030" + { 1209, -2575, 0, 3, "collidable" } # "Orange.031" + { 1270, -2570, 0, 3, "collidable" } # "Orange.032" + { 1357, -2557, 0, 3, "collidable" } # "Orange.033" + { 1410, -2536, 0, 3, "collidable" } # "Orange.034" + { 1467, -2487, 0, 3, "collidable" } # "Orange.035" + { 1532, -2444, 0, 3, "collidable" } # "Orange.036" + { 1707, -2326, 0, 3, "collidable" } # "Orange.037" + { 1795, -2282, 0, 3, "collidable" } # "Orange.038" + { 1921, -2225, 0, 3, "collidable" } # "Orange.039" + { 2197, -2225, 0, 3, "collidable" } # "Orange.040" + { 2324, -2256, 0, 3, "collidable" } # "Orange.041" + { 2446, -2308, 0, 3, "collidable" } # "Orange.042" + { 2560, -2326, 0, 3, "collidable" } # "Orange.043" + { 2664, -2343, 0, 3, "collidable" } # "Orange.044" + { 2787, -2348, 0, 3, "collidable" } # "Orange.045" + { 658, -2605, 0, 3, "collidable" } # "Orange.046" + { 741, -2645, 0, 3, "collidable" } # "Orange.047" + { 837, -2658, 0, 3, "collidable" } # "Orange.048" + { 920, -2645, 0, 3, "collidable" } # "Orange.049" + { 986, -2627, 0, 3, "collidable" } # "Orange.050" + { 1060, -2619, 0, 3, "collidable" } # "Orange.051" + { 1130, -2601, 0, 3, "collidable" } # "Orange.052" + { -8875, -4233, 0, 4, "collidable" } # "Sweet" + { -9173, -3799, 0, 4, "collidable" } # "Sweet.001" + { -7503, -3681, 0, 4, "collidable" } # "Sweet.002" + { -5776, -3113, 0, 4, "collidable" } # "Sweet.003" + { -4285, -3257, 0, 4, "collidable" } # "Sweet.004" + { 758, -2330, 0, 4, "collidable" } # "Sweet.005" + { 3154, -1946, 0, 4, "collidable" } # "Sweet.006" + { 4579, -1810, 0, 4, "collidable" } # "Sweet.007" + { 6162, -1765, 0, 4, "collidable" } # "Sweet.008" + { 7812, -1448, 0, 4, "collidable" } # "Sweet.009" + { -6975, -2850, 0, 4, "collidable" } # "Sweet.010" + { -5302, -2918, 0, 4, "collidable" } # "Sweet.011" + { -1748, -1546, 0, 4, "collidable" } # "Sweet.012" + { 1730, -1674, 0, 4, "collidable" } # "Sweet.013" + { 3539, -1358, 0, 4, "collidable" } # "Sweet.014" + { 5144, -1177, 0, 4, "collidable" } # "Sweet.015" + { 6795, -1154, 0, 4, "collidable" } # "Sweet.016" + { 9372, -182, 0, 4, "collidable" } # "Sweet.017" } # Level { - -9865, -3957, 221 + -9865, -3957, 221 } diff --git a/demos/skater/data/readme.txt b/demos/skater/data/readme.txt index 00eaa98f01..55bcce20a7 100644 --- a/demos/skater/data/readme.txt +++ b/demos/skater/data/readme.txt @@ -1,21 +1,21 @@ = Introduction - Allegro is a cross-platform library intended for use in computer games - and other types of multimedia programming. It was initially conceived on - the Atari ST, but that platform sadly died during childbirth. After a - brief stay with Borland C, it was adopted by the fantastic djgpp - compiler, where it grew to maturity. In the fullness of time it gave - birth to children of its own, who went to live in such exotic locations - as DirectX and the X Server, but the entire family is now back together - again, living in harmony as a single portable entity. How about that for + Allegro is a cross-platform library intended for use in computer games + and other types of multimedia programming. It was initially conceived on + the Atari ST, but that platform sadly died during childbirth. After a + brief stay with Borland C, it was adopted by the fantastic djgpp + compiler, where it grew to maturity. In the fullness of time it gave + birth to children of its own, who went to live in such exotic locations + as DirectX and the X Server, but the entire family is now back together + again, living in harmony as a single portable entity. How about that for a mixture of metaphors? :-) - A wide range of extension packages and add-on modules are also available, + A wide range of extension packages and add-on modules are also available, which can be found in the "Library Extensions" section of the Allegro.cc website, http://www.allegro.cc/. - According to the Oxford Companion to Music, Allegro is the Italian for - "quick, lively, bright". It is also a recursive acronym which stands for + According to the Oxford Companion to Music, Allegro is the Italian for + "quick, lively, bright". It is also a recursive acronym which stands for "Allegro Low Level Game Routines". diff --git a/demos/skater/data/thanks.txt b/demos/skater/data/thanks.txt index fabac8fdd8..94593ba9db 100644 --- a/demos/skater/data/thanks.txt +++ b/demos/skater/data/thanks.txt @@ -83,7 +83,7 @@ Contributors Arne Steinarson (arst@ludd.luth.se).
The fixed point square root routine came from his fix-float library. - + Arthur Huillet (email unknown).
Fixed a typo in the docs. @@ -110,7 +110,7 @@ Contributors Wrote the initial version of the fullscreen X-Windows graphics driver. Benny Colyn (email unknown).
- Added a Dutch translation. + Added a Dutch translation. Bertrand Coconnier (bcoconni@club-internet.fr).
Modified 3D polygones routines for subpixel and subtexel accuracy, made @@ -157,7 +157,7 @@ Contributors Charles Bilyue (Esaelon@aol.com).
Optimized the i386 blitters and suggested to not force yielding timeslice with non-blocking menus. - + Charles Wardlaw (kattkieru@yahoo.com).
Fixed warnings with gcc 4 on MacOS X and helped resolve a problem with setAppleMenu under Tiger. @@ -185,7 +185,7 @@ Contributors Wrote the fixed point clip3d() function, improved the performance of the DIGMID driver, implemented the digmid_set_pan function, rewrote part of the Allegro mixer, made the Allegro mixer the default one in Windows, - improved the threaded UNIX timer code, helped improve responsiveness under + improved the threaded UNIX timer code, helped improve responsiveness under X11, tweaked tests/play.c, added drawing primitives and video bitmap locking to the X11 port and did plenty of other things too. @@ -205,7 +205,7 @@ Contributors Daniel Schlyder (daniel@bitblaze.com).
Fixed problems with get_executable_name() under Windows, another one with set_window_title() under BeOS, potentially unsafe constructs in the - Windows code, the installall makefile target under Windows, added + Windows code, the installall makefile target under Windows, added set_allegro_resource_path(), fixed make uninstall with mingw make, added ALLEGRO_LIB_BUILD flag for gcc variants not using configure, fixed a bunch of warnings in MinGW and did plenty of other things too. @@ -223,7 +223,7 @@ Contributors mouse clicks, made d_menu_proc() steal/return focus when activated then deactivated, fixed a problem with submenus, fixed a bug with FLI frames containing odd-sized chunks, made makedoc write sub-section headings - for .txt output, made override_config_file also be used for writing to + for .txt output, made override_config_file also be used for writing to the config file and did plenty of other things too. David Kuhling (dkuelhin@hell1og.be.schule.de).
@@ -244,7 +244,7 @@ Contributors Deepak T (coolbool@gmx.net).
Fixed clipping in three C sprite drawing routines. - + Dennis Busch (email unknown).
Fixed a bug in d_clear_proc, fixed a Unicode bug in the mode selector, and fixed the short description of add_clip_rect. @@ -392,7 +392,7 @@ Contributors extension, fixed a problem where switching to fullscreen mode under X11, made digmid work with absolute pathes in patches.cfg, and fixed a problem with the Alsa driver on big endian systems. - + Harshavardhana Reddy N (nharsha@gmail.com).
Added a Kannada greeting to exunicod. @@ -418,9 +418,9 @@ Contributors VESA, VBE/AF and DirectX drivers for a list of possible GFX modes, rewrote the mode-selector to use get_gfx_mode_list(), reworked the build system many times and did plenty of other things too. - + Hrvoje Ban (spoofer255@gmail.com).
- Pointed out a bug in the mode selector, fixed several double ;'s, fixed + Pointed out a bug in the mode selector, fixed several double ;'s, fixed ASSERT() in Windows, helped write a documentation section about common pitfalls, and added the create_datafile_index function. @@ -438,10 +438,10 @@ Contributors Ivan Baldo (lubaldo@adinet.com.uy).
Wrote the 15/16 bit dithering code and optimised the sprite rotation routines. - + Jaime Moreno (daviangel@hotmail.com).
Helped track down a problem with dependency generation in MacOS X. - + Jakub Wasilewski (krajzega@meditech.pl).
Fixed a bug when loading greyscale TGA images and contributed to the skater demo. @@ -476,7 +476,7 @@ Contributors reports and suggestions for improvement, contributed bidirectional looping support, backward playing support and bugfixes for the DirectSound driver and did plenty of other things too. - + Jeff Mitchell (email unknown).
Fixed the location of grabber.txt in the spec file. @@ -489,7 +489,7 @@ Contributors Jim Grainger (Grainger_Jim/world_europe_samuro_WYN-CTV@samsung.co.kr).
Spotted a broken link in the docs and updated it. - + Jiri Gabriel (email unknown).
fixed loading of multiple ranges in a single bitmap with txt fonts and helped fix an off-by-one mistake for the last glyph in extract_font_range. @@ -516,7 +516,7 @@ Contributors framebuffer console driver. Jon Rafkind (workmin@ccs.neu.edu).
- Added more ASSERTs to the code, implemented the Cohen-Sutherland clipping + Added more ASSERTs to the code, implemented the Cohen-Sutherland clipping algorithm for the line() function and supplied an m4 macro for allegro. Also fixed a problem with allegro-config. Implemented draw_sprite_ex() function. @@ -538,14 +538,14 @@ Contributors Joshua Heyer (joshua_heyer@yahoo.com).
Wrote the original version of the OSS sound driver. - + J. P. Morris (email unknown).
Fixed a bug rest_callback under unix. Julien Cugnière (jcugniere@free.fr).
Improved the support for non-blocking menus, fixed a bug related to the retrieval of the inital volume when no primary buffer was present under - Windows, fixed the crash on exit with the aRts sound driver, added an + Windows, fixed the crash on exit with the aRts sound driver, added an X11 message box for allegro_message under X11 and fixed a crash in the GUI when a dialog was opened while a menu was still open. @@ -587,7 +587,7 @@ Contributors Contributed the Norwegian message translation. Lennart Steinke (lst@steinke.net).
- Added the exconfig example, contributed keyboard layout detection code + Added the exconfig example, contributed keyboard layout detection code for Windows and suggested the true colour font rendering. Lisa Parratt (lisa@thecommune.org.uk).
@@ -739,7 +739,7 @@ Contributors Miran Amon (miran.amon@gmail.com).
Fixed an undocumented arbitrary limit in get_config_argv() and contributed to the skater demo. - + Nathan Albury, aka Rubicant (gt4558a@prism.gatech.edu).
Improved the fire routine in examples/exflame.c (my original version didn't really look very much like flames :-) and gave me some extremely @@ -840,13 +840,13 @@ Contributors samples. Peter Hull (peterhull90@users.sourceforge.net).
- Made the file selector work with directories that have more than 2048 - files, solved some compiling issues on MacOS X, fixed a bug in rest() + Made the file selector work with directories that have more than 2048 + files, solved some compiling issues on MacOS X, fixed a bug in rest() that caused it to wait too long on that platform, fixed several problems with the hardware mouse cursor, fixed a deadlock in the software mouse updating code, fixed compilation problems under MacOS X tiger, added a MacOS X helpfile and did plenty of other things too. - + Peter Johansson (email unknown).
Reported a problem with system cursors not working in Windows. @@ -963,7 +963,7 @@ Contributors Sam Hocevar (sam@zoy.org).
Fixed a Bashism in fix.sh that makes Solaris' sh choke, a race condition in the mixer under Unix w/ threads, Windows, BeOS and MacOS X, - a crash in makedoc, made it possible to put functions from .s sources + a crash in makedoc, made it possible to put functions from .s sources in a shared library under Unix and removed deprecated use of several functions. @@ -1000,7 +1000,7 @@ Contributors under Solaris, fixed a bug in the keyboard driver that caused crashes on the same system, worked around errors with some versions of GNU AS and fixed errors in the configure script when not using GCC - + StApostol (stapostol@gmail.com).
Fixed a bug in the exflame example and updated the FAQ to use rest(0) instead of yield_timeslice(). @@ -1033,7 +1033,7 @@ Contributors Stijn Wolters.
Clarified the documentation of init_dialog. - + Sveinung Kvilhaugsvik(email unknown).
Pointed out that Allegro should respect DESTDIR under MacOS X. @@ -1060,7 +1060,7 @@ Contributors Thomas Fjellstrom (tfjellstrom@home.com).
Wrote the ALSA 0.5.x MIDI driver and added support for ALSA 0.9.x. - + Thomas Harte (email unknown).
Helped fix a bug in show_video_bitmap() on MacOS X, helped optimise fixmul(), helped find many bugs in the MacOS X port, like better support @@ -1125,7 +1125,7 @@ Contributors Added a Tamil language greeting to exunicode, added switches to use the Intel compiler in Windows and added a password option to the Windows screensaver example. Also fixed a problem with allegro-config. - + Victor Williams Stafusa da Silva (vwss1984@yahoo.com.br).
Changed a few occurences of "256" to PAL_SIZE and made OS type detection handle Windows 2003 and Windows Vista. diff --git a/demos/speed/29.txt b/demos/speed/29.txt index abdbb81788..e26aaf3309 100644 --- a/demos/speed/29.txt +++ b/demos/speed/29.txt @@ -1,36 +1,36 @@ -The competition rules state that I must "include the number '29' somewhere -in the program" (to commemorate it being Arron's birthday). But -unfortunately, although the number 29 is certainly a very fine thing to have -as the age for an Arron, it didn't strike me as a particularly useful or +The competition rules state that I must "include the number '29' somewhere +in the program" (to commemorate it being Arron's birthday). But +unfortunately, although the number 29 is certainly a very fine thing to have +as the age for an Arron, it didn't strike me as a particularly useful or numerologically significant thing to build into a computer game. -However, since the rules do not specify which number base they are talking -about, it occurs to me that this could just as well be a reference to the -hexadecimal value 0x29, which is decimal 41. Admittedly, this number has -nothing to do with the age of the Arron, or at least won't do for another -dozen dozens of quartets of weeks, but the rules never actually spell out -that they are talking about the particular 29 which happens to be his -current age (they strongly imply that, but I decided to look the other way +However, since the rules do not specify which number base they are talking +about, it occurs to me that this could just as well be a reference to the +hexadecimal value 0x29, which is decimal 41. Admittedly, this number has +nothing to do with the age of the Arron, or at least won't do for another +dozen dozens of quartets of weeks, but the rules never actually spell out +that they are talking about the particular 29 which happens to be his +current age (they strongly imply that, but I decided to look the other way and miss this hint :-) -Now, 0x29, when mapped onto the ASCII character set, refers to the closing -bracket character, ')'. So in order to comply with the competition rules, I -have included several of these symbols in my program. In fact, as reported +Now, 0x29, when mapped onto the ASCII character set, refers to the closing +bracket character, ')'. So in order to comply with the competition rules, I +have included several of these symbols in my program. In fact, as reported by the command: sed -e "s/[^)]//g" *.[ch] | tr -d "\n" | wc -c -there are currently no less than ONE THOUSAND AND EIGHTY TWO unique -occurrences of a twenty nine in this game! This figure is likely to have -increased even further by the time you get hold of the code, since I haven't -quite finished writing it yet. And there are four more just in this text -file, so if you included the documentation in the above search command, that -would get you up to a total of 1086 different ')' characters! (and since I -just typed another there, that makes it 1087 (and having opened a bracket to -interject this, I'm going to have to close it, which makes 1088 (and now -that I've opened a nested bracket, we are up to 1089 or something, I'm +there are currently no less than ONE THOUSAND AND EIGHTY TWO unique +occurrences of a twenty nine in this game! This figure is likely to have +increased even further by the time you get hold of the code, since I haven't +quite finished writing it yet. And there are four more just in this text +file, so if you included the documentation in the above search command, that +would get you up to a total of 1086 different ')' characters! (and since I +just typed another there, that makes it 1087 (and having opened a bracket to +interject this, I'm going to have to close it, which makes 1088 (and now +that I've opened a nested bracket, we are up to 1089 or something, I'm losing count here))) (btw. I hope I got the right number of closes there). -I'm tempted to say that this is all a joke :-) except that by doing so, I've +I'm tempted to say that this is all a joke :-) except that by doing so, I've just bumped up the count one more... diff --git a/demos/speed/speed.txt b/demos/speed/speed.txt index 75706c2071..8150f54c02 100644 --- a/demos/speed/speed.txt +++ b/demos/speed/speed.txt @@ -6,32 +6,32 @@ By Shawn Hargreaves, November 1999. -This program is my entry for the Allegro SpeedHack 1999, and was written -over the weekend of November 27/28. Many thanks to Arron Shutt for -organising this competition, and to the various musicians who kept me sane -(?) during it (notably Trent Reznor, Adrian Belew, Charles Mingus, Miles +This program is my entry for the Allegro SpeedHack 1999, and was written +over the weekend of November 27/28. Many thanks to Arron Shutt for +organising this competition, and to the various musicians who kept me sane +(?) during it (notably Trent Reznor, Adrian Belew, Charles Mingus, Miles Davis, Mike Keneally, and Robert Fripp). -It should be pretty obvious how to play, as long as you know how to press -the spacebar and left/right arrow keys. The objective is to protect the -blocks underneath your ship: you get one point for each block left at the -end of an attack wave, and a hundred bonus points if you manage to preserve +It should be pretty obvious how to play, as long as you know how to press +the spacebar and left/right arrow keys. The objective is to protect the +blocks underneath your ship: you get one point for each block left at the +end of an attack wave, and a hundred bonus points if you manage to preserve all sixteen blocks. -Hint: the later levels of this game are much easier to play if you view them +Hint: the later levels of this game are much easier to play if you view them through tinted glasses, to filter out only one of the views :-) -You gain very little from running it in a truecolor mode (the title screens -look a bit nicer, but game graphics are almost identical to in 8 bit color). -It does look very cramped in a 320x200 resolution, though, so I recommend +You gain very little from running it in a truecolor mode (the title screens +look a bit nicer, but game graphics are almost identical to in 8 bit color). +It does look very cramped in a 320x200 resolution, though, so I recommend playing it in 640x480x8. This code is free: do with it as you will. -The remainder of this file is a realtime log, with entries added -chronologically during the course of the hack. The numbered subdirectories -contain snapshots of the code taken at various times over the weekend. It is -unlikely that anything but the final version will compile on systems other +The remainder of this file is a realtime log, with entries added +chronologically during the course of the hack. The numbered subdirectories +contain snapshots of the code taken at various times over the weekend. It is +unlikely that anything but the final version will compile on systems other than Linux. @@ -50,33 +50,33 @@ worked! Design doc: -Traditional Space Invaders type gameplay: aliens move down the screen, you -move across the bottom firing upwards. Three lives. Your goal is to protect -blocks underneath you, and you get score for having blocks left at the end -of each attack wave. Alien motion will be as complex as I have time for, +Traditional Space Invaders type gameplay: aliens move down the screen, you +move across the bottom firing upwards. Three lives. Your goal is to protect +blocks underneath you, and you get score for having blocks left at the end +of each attack wave. Alien motion will be as complex as I have time for, including Centipede style splitting. -This 2d action will be rendered in four different psuedo-3d viewports: -normal flat mode, inside of a tube, outside of a large cylinder, and in -spherical coordinates. Early attack waves use only one viewpoint, later ones -tile multiple views of the same action, and toward the end of the sequence -the views are overlaid (additive color). If you complete the sequence, it +This 2d action will be rendered in four different psuedo-3d viewports: +normal flat mode, inside of a tube, outside of a large cylinder, and in +spherical coordinates. Early attack waves use only one viewpoint, later ones +tile multiple views of the same action, and toward the end of the sequence +the views are overlaid (additive color). If you complete the sequence, it cycles but with vastly increased game speed. -When changing attack waves, views will slide around to their new locations +When changing attack waves, views will slide around to their new locations (that should look pretty cool). Any color depth, any resolution. No time for drawing graphics, so everything will be simple vector art. -Bullets are surrounded by spining wireframe square, flightsim targetting +Bullets are surrounded by spining wireframe square, flightsim targetting style. -Explosions are expanding XLU circlefill, plus more rapidly expanding single +Explosions are expanding XLU circlefill, plus more rapidly expanding single circle shockwaves. -Wow, I think that is the most detailed formal game design that I have ever +Wow, I think that is the most detailed formal game design that I have ever written! I don't have time for this, better get coding... @@ -84,7 +84,7 @@ written! I don't have time for this, better get coding... 10-26-1999, at 17:37 -------------------- -Basic game structure is in place: init code, commandline parsing, title +Basic game structure is in place: init code, commandline parsing, title screen, stupid little music bit at the end. diff --git a/docs/scripts/trex.txt b/docs/scripts/trex.txt index 65ee00fe52..b901f4707f 100644 --- a/docs/scripts/trex.txt +++ b/docs/scripts/trex.txt @@ -1,73 +1,73 @@ T-REX 1.3 http://tiny-rex.sourceforge.net ---------------------------------------------------------------------- - T-Rex a tiny regular expression library + T-Rex a tiny regular expression library - Copyright (C) 2003-2006 Alberto Demichelis + Copyright (C) 2003-2006 Alberto Demichelis - This software is provided 'as-is', without any express - or implied warranty. In no event will the authors be held - liable for any damages arising from the use of this software. + This software is provided 'as-is', without any express + or implied warranty. In no event will the authors be held + liable for any damages arising from the use of this software. - Permission is granted to anyone to use this software for - any purpose, including commercial applications, and to alter - it and redistribute it freely, subject to the following restrictions: + Permission is granted to anyone to use this software for + any purpose, including commercial applications, and to alter + it and redistribute it freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but - is not required. + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but + is not required. - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any + source distribution. - 3. This notice may not be removed or altered from any - source distribution. - ---------------------------------------------------------------------- TRex implements the following expressions -\ Quote the next metacharacter -^ Match the beginning of the string -. Match any character -$ Match the end of the string -| Alternation -() Grouping (creates a capture) -[] Character class +\ Quote the next metacharacter +^ Match the beginning of the string +. Match any character +$ Match the end of the string +| Alternation +() Grouping (creates a capture) +[] Character class ==GREEDY CLOSURES== -* Match 0 or more times -+ Match 1 or more times -? Match 1 or 0 times +* Match 0 or more times ++ Match 1 or more times +? Match 1 or 0 times {n} Match exactly n times {n,} Match at least n times -{n,m} Match at least n but not more than m times +{n,m} Match at least n but not more than m times ==ESCAPE CHARACTERS== -\t tab (HT, TAB) -\n newline (LF, NL) -\r return (CR) -\f form feed (FF) +\t tab (HT, TAB) +\n newline (LF, NL) +\r return (CR) +\f form feed (FF) ==PREDEFINED CLASSES== -\l lowercase next char -\u uppercase next char -\a letters -\A non letters -\w alphanimeric [0-9a-zA-Z] -\W non alphanimeric -\s space -\S non space -\d digits -\D non nondigits -\x exadecimal digits -\X non exadecimal digits -\c control charactrs -\C non control charactrs -\p punctation -\P non punctation -\b word boundary -\B non word boundary +\l lowercase next char +\u uppercase next char +\a letters +\A non letters +\w alphanimeric [0-9a-zA-Z] +\W non alphanimeric +\s space +\S non space +\d digits +\D non nondigits +\x exadecimal digits +\X non exadecimal digits +\c control charactrs +\C non control charactrs +\p punctation +\P non punctation +\b word boundary +\B non word boundary ---------------------------------------------------------------------- API DOC @@ -79,19 +79,19 @@ in case of failure returns NULL.The returned object has to be deleted through the function trex_free(). pattern - a pointer to a zero terminated string containing the pattern that - has to be compiled. + a pointer to a zero terminated string containing the pattern that + has to be compiled. error - apointer to a string pointer that will be set with an error string - in case of failure. - + apointer to a string pointer that will be set with an error string + in case of failure. + ---------------------------------------------------------------------- void trex_free(TRex *exp) deletes a expression structure created with trex_compile() exp - the expression structure that has to be deleted + the expression structure that has to be deleted ---------------------------------------------------------------------- TRexBool trex_match(TRex* exp,const TRexChar* text) @@ -100,10 +100,10 @@ returns TRex_True if the string specified in the parameter text is an exact match of the expression, otherwise returns TRex_False. exp - the compiled expression + the compiled expression text - the string that has to be tested - + the string that has to be tested + ---------------------------------------------------------------------- TRexBool trex_search(TRex* exp,const TRexChar* text, const TRexChar** out_begin, const TRexChar** out_end) @@ -112,40 +112,40 @@ if the match is found returns TRex_True and the sets out_begin to the beginning match and out_end at the end of the match; otherwise returns TRex_False. exp - the compiled expression + the compiled expression text - the string that has to be tested + the string that has to be tested out_begin - a pointer to a string pointer that will be set with the beginning of the match + a pointer to a string pointer that will be set with the beginning of the match out_end - a pointer to a string pointer that will be set with the end of the match + a pointer to a string pointer that will be set with the end of the match ---------------------------------------------------------------------- TREX_API TRexBool trex_searchrange(TRex* exp,const TRexChar* text_begin,const TRexChar* text_end,const TRexChar** out_begin, const TRexChar** out_end) -searches the first match of the expressin in the string delimited +searches the first match of the expressin in the string delimited by the parameter text_begin and text_end. if the match is found returns TRex_True and the sets out_begin to the beginning of the match and out_end at the end of the match; otherwise returns TRex_False. exp - the compiled expression + the compiled expression text_begin - a pointer to the beginnning of the string that has to be tested + a pointer to the beginnning of the string that has to be tested text_end - a pointer to the end of the string that has to be tested + a pointer to the end of the string that has to be tested out_begin - a pointer to a string pointer that will be set with the beginning of the match + a pointer to a string pointer that will be set with the beginning of the match out_end - a pointer to a string pointer that will be set with the end of the match - + a pointer to a string pointer that will be set with the end of the match + ---------------------------------------------------------------------- int trex_getsubexpcount(TRex* exp) returns the number of sub expressions matched by the expression exp - the compiled expression + the compiled expression --------------------------------------------------------------------- TRexBool trex_getsubexp(TRex* exp, int n, TRexMatch *submatch) @@ -154,18 +154,18 @@ retrieve the begin and and pointer to the length of the sub expression indexed by n. The result is passed trhough the struct TRexMatch: typedef struct { - const TRexChar *begin; - int len; + const TRexChar *begin; + int len; } TRexMatch; the function returns TRex_True if n is valid index otherwise TRex_False. exp - the compiled expression + the compiled expression n - the index of the submatch + the index of the submatch submatch - a pointer to structure that will store the result - + a pointer to structure that will store the result + this function works also after a match operation has been performend. - + diff --git a/docs/src/changes-5.0.txt b/docs/src/changes-5.0.txt index 8b4ef8a157..5fb68d27e1 100644 --- a/docs/src/changes-5.0.txt +++ b/docs/src/changes-5.0.txt @@ -3755,7 +3755,7 @@ Graphics: - Trent Gamblin added support for NPOT textures in the Direct3D driver. -- Trent Gamblin fixed blending in memory drawing functions. +- Trent Gamblin fixed blending in memory drawing functions. - Trent Gamblin added al_draw_pixel() which obeys blending. @@ -4279,7 +4279,7 @@ Changes from 4.9.1 to 4.9.2 (November 2007) - Elias Pschernig started implementing lock_region and unlock_region for the xdummy driver. -- Elias Pschernig split xdraw.c out of xdisplay.c, +- Elias Pschernig split xdraw.c out of xdisplay.c, used _AL_THREAD instead of pthreads in the xdummy driver, added a lock to the xdummy driver, in order to implement al_destroy_display, used the correct format. @@ -4308,7 +4308,7 @@ Changes from 4.9.1 to 4.9.2 (November 2007) - Trent Gamblin put TLS support back in for MSVC and UNIX. -- Trent Gamblin cleaned up some code, added headers to new source files, +- Trent Gamblin cleaned up some code, added headers to new source files, grouped thread local variables into one structure (UNIX support is broken for now), and made mask color thread local. @@ -4337,7 +4337,7 @@ Changes from 4.9.1 to 4.9.2 (November 2007) call allegro_init, made al_draw_bitmap(_region) much faster on memory bitmaps, and added al_draw_scaled_bitmap for memory bitmaps. -- Trent Gamblin renamed AL_LOCKED_RECTANGLE to AL_LOCKED_REGION, and +- Trent Gamblin renamed AL_LOCKED_RECTANGLE to AL_LOCKED_REGION, and started on memory bitmaps (al_draw_bitmap and al_draw_bitmap region work). - Trent Gamblin made seperate functions for getting/setting display/bitmap diff --git a/docs/src/changes-5.1.txt b/docs/src/changes-5.1.txt index e6eabc000f..9207e5f8ad 100644 --- a/docs/src/changes-5.1.txt +++ b/docs/src/changes-5.1.txt @@ -351,10 +351,10 @@ Graphics: - Added `al_build_camera_transform`. - Make the projection transform a bitmap local state. This removes - `al_set_projection_transform` and `al_get_projection_transform`, and replaces - them with `al_use_projection_transform` and - `al_get_current_projection_transform` with similar semantics to the regular - transforms. + `al_set_projection_transform` and `al_get_projection_transform`, and replaces + them with `al_use_projection_transform` and + `al_get_current_projection_transform` with similar semantics to the regular + transforms. OSX port: @@ -519,13 +519,13 @@ Input: Graphics: - Add block compression pixel formats - (ALLEGRO_PIXEL_FORMAT_COMPRESSED_RGBA_DXT1/DXT3/DXT5) for compressed video - bitmaps. This includes an API to fetch compressed block size - (`al_get_pixel_block_width/height/size`) as well as API to load and unload - compressed bitmap data without paying a runtime compression cost - (`al_lock_bitmap_blocked`). Unfortunately, due to patent concerns this last - feature is disabled for OpenGL (if you thinks those concerns don't apply to - you, you can enable it by passing `-DWANT_OPENGL_S3TC_LOCKING=1` to cmake). + (ALLEGRO_PIXEL_FORMAT_COMPRESSED_RGBA_DXT1/DXT3/DXT5) for compressed video + bitmaps. This includes an API to fetch compressed block size + (`al_get_pixel_block_width/height/size`) as well as API to load and unload + compressed bitmap data without paying a runtime compression cost + (`al_lock_bitmap_blocked`). Unfortunately, due to patent concerns this last + feature is disabled for OpenGL (if you thinks those concerns don't apply to + you, you can enable it by passing `-DWANT_OPENGL_S3TC_LOCKING=1` to cmake). - Make real fullscreen modes work on OS X again. May not be perfect still. (thanks to SDL). @@ -540,9 +540,9 @@ Android port: - Bump minimum Android API level from 10 to 12 (aka version 3.1). - Add controller support to the Android port. An accelerometer 'joystick' - is still the first joystick. Supports two analog sticks and 10 buttons (A B - X Y L1 R1 DPAD_L DPAD_R DPAD_U DPAD_D). Supports hotplugging and - theoretically multiple joysticks (needs testing). + is still the first joystick. Supports two analog sticks and 10 buttons (A B + X Y L1 R1 DPAD_L DPAD_R DPAD_U DPAD_D). Supports hotplugging and + theoretically multiple joysticks (needs testing). - Set correct orientation at startup on Android (thanks to Aikei_c). diff --git a/docs/src/refman/audio.txt b/docs/src/refman/audio.txt index abce66b52b..7dc6adf959 100644 --- a/docs/src/refman/audio.txt +++ b/docs/src/refman/audio.txt @@ -237,7 +237,7 @@ See also: [al_destroy_sample], [ALLEGRO_AUDIO_DEPTH], [ALLEGRO_CHANNEL_CONF] Loads a few different audio file formats based on their extension. Note that this stores the entire file in memory at once, which -may be time consuming. To read the file as it is needed, +may be time consuming. To read the file as it is needed, use [al_load_audio_stream] or [al_play_audio_stream]. Returns the sample on success, NULL on failure. @@ -255,7 +255,7 @@ The file type is determined by the passed 'ident' parameter, which is a file name extension including the leading dot. Note that this stores the entire file in memory at once, which -may be time consuming. To read the file as it is needed, +may be time consuming. To read the file as it is needed, use [al_load_audio_stream_f] or [al_play_audio_stream_f]. Returns the sample on success, NULL on failure. @@ -1248,7 +1248,7 @@ See also: [al_init_acodec_addon], [al_identify_sample], [al_register_sample_iden ## Audio recording Allegro's audio recording routines give you real-time access to raw, -uncompressed audio input streams. Since Allegro hides all of the +uncompressed audio input streams. Since Allegro hides all of the platform specific implementation details with its own buffering, it will add a small amount of latency. However, for most applications that small overhead will not adversely affect performance. @@ -1259,7 +1259,7 @@ yet supported. ### API: ALLEGRO_AUDIO_RECORDER -An opaque datatype that represents a recording device. +An opaque datatype that represents a recording device. Since: 5.1.1 @@ -1291,7 +1291,7 @@ recording device.) Allegro will internally buffer several seconds of captured audio with minimal latency. (XXX: These settings need to be exposed via config or API calls.) -Audio will be copied out of that private buffer into a fragment buffer +Audio will be copied out of that private buffer into a fragment buffer of the size specified by the samples parameter. Whenever a new fragment is ready an event will be generated. diff --git a/docs/src/refman/color.txt b/docs/src/refman/color.txt index 2af9e1e323..3ecbce248c 100644 --- a/docs/src/refman/color.txt +++ b/docs/src/refman/color.txt @@ -185,7 +185,7 @@ lightsalmon, lightseagreen, lightskyblue, lightslategray, lightsteelblue, lightyellow, lime, limegreen, linen, magenta, maroon, mediumaquamarine, mediumblue, mediumorchid, mediumpurple, mediumseagreen, mediumslateblue, mediumspringgreen, mediumturquoise, -mediumvioletred, midnightblue, mintcream, mistyrose, moccasin, +mediumvioletred, midnightblue, mintcream, mistyrose, moccasin, avajowhite, navy, oldlace, olive, olivedrab, orange, orangered, orchid, palegoldenrod, palegreen, paleturquoise, palevioletred, papayawhip, peachpuff, peru, pink, plum, powderblue, purple, @@ -368,7 +368,7 @@ See also: [al_color_lab], [al_color_rgb_to_lab] ## API: al_color_rgb_to_lch -Convert RGB values to CIE LCH color space. +Convert RGB values to CIE LCH color space. Since: 5.2.3 diff --git a/docs/src/refman/config.txt b/docs/src/refman/config.txt index bf8d12795e..76e0ab1522 100644 --- a/docs/src/refman/config.txt +++ b/docs/src/refman/config.txt @@ -7,15 +7,15 @@ These functions are declared in the main Allegro header file: ~~~~ Allegro supports reading and writing of configuration files with a -simple, INI file-like format. +simple, INI file-like format. -A configuration file consists of key-value pairs separated by newlines. -Keys are separated from values by an equals sign (`=`). All whitespace -before the key, after the value and immediately adjacent to the equals -sign is ignored. Keys and values may have whitespace characters within +A configuration file consists of key-value pairs separated by newlines. +Keys are separated from values by an equals sign (`=`). All whitespace +before the key, after the value and immediately adjacent to the equals +sign is ignored. Keys and values may have whitespace characters within them. Keys do not need to be unique, but all but the last one are ignored. -The hash (`#`) character is used a comment when it is the first +The hash (`#`) character is used a comment when it is the first non-whitespace character on the line. All characters following that character are ignored to the end of the line. The hash character anywhere else on the line has no special significance. @@ -26,7 +26,7 @@ a single line. Whitespace before the opening bracket is ignored. All characters after the trailing bracket are also ignored. All key-value pairs that follow a section declaration belong to the last -declared section. Key-value pairs that don't follow any section +declared section. Key-value pairs that don't follow any section declarations belong to the global section. Sections do not nest. Here is an example configuration file: @@ -189,7 +189,7 @@ See also: [al_get_next_config_section] ## API: al_get_next_config_section Returns the name of the next section in the given config file or NULL if -there are no more sections. The `iterator` must have been obtained with +there are no more sections. The `iterator` must have been obtained with [al_get_first_config_section] first. See also: [al_get_first_config_section] diff --git a/docs/src/refman/direct3d.txt b/docs/src/refman/direct3d.txt index d13a2ab6e8..fc44f91af3 100644 --- a/docs/src/refman/direct3d.txt +++ b/docs/src/refman/direct3d.txt @@ -8,7 +8,7 @@ These functions are declared in the following header file: ## API: al_get_d3d_device -Returns the Direct3D device of the display. The return value is +Returns the Direct3D device of the display. The return value is undefined if the display was not created with the Direct3D flag. *Returns:* @@ -16,7 +16,7 @@ A pointer to the Direct3D device. ## API: al_get_d3d_system_texture -Returns the system texture (stored with the D3DPOOL_SYSTEMMEM flags). This +Returns the system texture (stored with the D3DPOOL_SYSTEMMEM flags). This texture is used for the render-to-texture feature set. *Returns:* @@ -25,7 +25,7 @@ A pointer to the Direct3D system texture. ## API: al_get_d3d_video_texture Returns the video texture (stored with the D3DPOOL_DEFAULT or D3DPOOL_MANAGED -flags depending on whether render-to-texture is enabled or disabled +flags depending on whether render-to-texture is enabled or disabled respectively). *Returns:* @@ -33,7 +33,7 @@ A pointer to the Direct3D video texture. ## API: al_have_d3d_non_pow2_texture_support -Returns whether the Direct3D device supports textures whose dimensions are not +Returns whether the Direct3D device supports textures whose dimensions are not powers of two. *Returns:* diff --git a/docs/src/refman/file.txt b/docs/src/refman/file.txt index 0e7e4f468c..62f2cc7804 100644 --- a/docs/src/refman/file.txt +++ b/docs/src/refman/file.txt @@ -37,7 +37,7 @@ off_t (*fi_fsize)(ALLEGRO_FILE *f); The fi_open function must allocate memory for whatever userdata structure it needs. The pointer to that memory must be returned; it will then be associated with the file. The other functions can access that data by calling [al_get_file_userdata] -on the file handle. If fi_open returns NULL then [al_fopen] will also return NULL. +on the file handle. If fi_open returns NULL then [al_fopen] will also return NULL. The fi_fclose function must clean up and free the userdata, but Allegro will free the [ALLEGRO_FILE] handle. @@ -97,7 +97,7 @@ The slice is opened at the current location of the parent file, up through that will not exceed the bounds of the parent file. Seeking with `ALLEGRO_SEEK_SET` will be relative to this starting location. -`ALLEGRO_SEEK_END` will be relative to the starting location plus the +`ALLEGRO_SEEK_END` will be relative to the starting location plus the size of the slice. The mode can be any combination of: @@ -108,7 +108,7 @@ The mode can be any combination of: * s: seek to the end of the slice upon [al_close] (this is the default behavior) * n: disable the seeking behavior of "s". -For example, a mode of "rw" indicates the file can be read and written. +For example, a mode of "rw" indicates the file can be read and written. (Note that this is slightly different from the stdio modes.) Keep in mind that the parent file must support random access and be open in normal write mode (not append) for the slice to work in a well defined way. diff --git a/docs/src/refman/font.txt b/docs/src/refman/font.txt index 9b46ed867a..db66dd4067 100644 --- a/docs/src/refman/font.txt +++ b/docs/src/refman/font.txt @@ -307,13 +307,13 @@ For some applications Allegro's text drawing functions may not be sufficient. For example, you would like to give a different color to every letter in a word, or use different a font for a drop cap. -That is why Allegro supports drawing and getting the dimensions of the -individual glyphs of a font. A glyph is a particular visual representation of +That is why Allegro supports drawing and getting the dimensions of the +individual glyphs of a font. A glyph is a particular visual representation of a letter, character or symbol in a specific font. -And it's also possible to get the kerning to use between two glyphs. These per -glyph functions have less overhead than Allegro's per string text drawing and -dimensioning functions. So, with these functions you can write your own +And it's also possible to get the kerning to use between two glyphs. These per +glyph functions have less overhead than Allegro's per string text drawing and +dimensioning functions. So, with these functions you can write your own efficient and precise custom text drawing functions. ### API: al_draw_glyph @@ -361,32 +361,32 @@ Returned variables (all in pixel): - bbx, bby - Offset to upper left corner of bounding box. - bbw, bbh - Dimensions of bounding box. -These values are the same as [al_get_text_dimensions] would return for +These values are the same as [al_get_text_dimensions] would return for a string of a single character equal to the glyph passed to this function. Note that glyphs may go to the left and upwards of the X, in which case x and y will have negative values. -If you want to draw a string verticallly, for Japanese or as a game effect, +If you want to draw a string verticallly, for Japanese or as a game effect, then you should leave bby + bbh space between the glyphs in the y direction for a regular placement. -If you want to draw a string horizontally in an extra compact way, +If you want to draw a string horizontally in an extra compact way, then you should leave bbx + bbw space between the glyphs in the x direction for a compact placement. -In the figure below is an example of what bbx and bby may be like for a `2` -glyph, and a `g` glyph of the same font compared to the result of +In the figure below is an example of what bbx and bby may be like for a `2` +glyph, and a `g` glyph of the same font compared to the result of al_get_glyph_width(). - - + + al_get_glyph_width() al_get_glyph_width() __|___ __|__ - / \ / \ - bbx bbw bbx bbw + / \ / \ + bbx bbw bbx bbw <-->+<------>+ <-->+<----->+ X baseline - ^ | | ^ | | - bby | | | bby | | | - v | | | | | + ^ | | ^ | | + bby | | | bby | | | + v | | | | | +---+--------+ | | | ^ | ***** | | | | | |* ** | v | | @@ -398,8 +398,8 @@ al_get_glyph_width(). | | * *| v | **** | +---+-------+ - - + + Since: 5.1.12 See also: [al_draw_glyph], [al_get_glyph_width], [al_get_glyph_advance]. @@ -418,17 +418,17 @@ to obtain a more visually pleasing result. Kerning adjusts the space between two individual glyphs with an offset determined by the author of the font. If you pass ALLEGRO_NO_KERNING as codepoint1 then al_get_glyph_advance -will return 0. this can be useful when drawing the first character of a string +will return 0. this can be useful when drawing the first character of a string in a loop. Pass ALLEGRO_NO_KERNING as codepoint2 to get the horizontal advance width of the glyph that corresponds to codepoint1 without taking any kerning into -consideration. This can be used, for example, when drawing the last character +consideration. This can be used, for example, when drawing the last character of a string in a loop. This function will return zero if the glyph of codepoint1 is not present -in the `font`. If the glyph of codepoint2 is not present in the font, -the horizontal advance width of the glyph that corresponds to codepoint1 +in the `font`. If the glyph of codepoint2 is not present in the font, +the horizontal advance width of the glyph that corresponds to codepoint1 without taking any kerning into consideration is returned. When drawing a string one glyph at the time from the left to the right @@ -437,37 +437,37 @@ of [al_get_glyph_advance] applied to the previous glyph drawn and the next glyph to draw. Note that the return value of this function is a recommended advance for -optimal readability for left to right text determined by the author of the font. -However, if you like, you may want to draw the glyphs of the font narrower -or wider to each other than what [al_get_glyph_advance] returns for style +optimal readability for left to right text determined by the author of the font. +However, if you like, you may want to draw the glyphs of the font narrower +or wider to each other than what [al_get_glyph_advance] returns for style or effect. In the figure below is an example of what the result of al_get_glyph_advance -may be like for two glypphs `A` and `l` of the same font that has kerning for +may be like for two glypphs `A` and `l` of the same font that has kerning for the "Al" pair, without and with the ALLEGRO_NO_KERNING flag. al_get_glyph_advance(font, 'A', 'l') - ___|___ - / \ - ------------- - /\ -| + ___|___ + / \ + ------------- + /\ -| / \ | /____\ | / \ | - / \ \_ + / \ \_ ------------- - - + + al_get_glyph_advance(font, 'A', ALLEGRO_NO_KERNING) ____|____ - / \ + / \ --------------- - /\ -| + /\ -| / \ | /____\ | / \ | - / \ \_ + / \ \_ --------------- diff --git a/docs/src/refman/graphics.txt b/docs/src/refman/graphics.txt index 98c023dda1..64dd9f852b 100644 --- a/docs/src/refman/graphics.txt +++ b/docs/src/refman/graphics.txt @@ -349,7 +349,7 @@ Flags are: * ALLEGRO_LOCK_READONLY - The locked region will not be written to. This can be faster if the bitmap is a video texture, as it can be discarded after the lock instead of uploaded back to the card. - + * ALLEGRO_LOCK_WRITEONLY - The locked region will not be read from. This can be faster if the bitmap is a video texture, as no data need to be read from the video card. You are required to fill in all pixels before @@ -601,12 +601,12 @@ See also: [ALLEGRO_PIXEL_FORMAT], [al_set_new_bitmap_format] Sets the flags to use for newly created bitmaps. Valid flags are: -ALLEGRO_MEMORY_BITMAP +ALLEGRO_MEMORY_BITMAP : Create a bitmap residing in system memory. Operations on, and with, memory bitmaps will not be hardware accelerated. However, direct pixel access can be relatively quick compared to video bitmaps, which depend on the display driver in use. - + *Note*: Allegro's software rendering routines are currently somewhat unoptimised. @@ -616,12 +616,12 @@ ALLEGRO_MEMORY_BITMAP ALLEGRO_VIDEO_BITMAP : Creates a bitmap that resides in the video card memory. These types of bitmaps receive the greatest benefit from hardware acceleration. - + *Note*: Creating a video bitmap will fail if there is no current display or the current display driver cannot create the bitmap. The latter will happen if for example the format or dimensions are not supported. - + *Note:* Bitmaps created with this flag will be converted to memory bitmaps when the last display is destroyed. In most cases it is therefore easier to use the ALLEGRO_CONVERT_BITMAP flag instead. @@ -636,16 +636,16 @@ ALLEGRO_CONVERT_BITMAP next time a display is created. They also will remain video bitmaps if the last display is destroyed and then another is created again. Since 5.1.0. - + *Note:* You can combine this flag with ALLEGRO_MEMORY_BITMAP or ALLEGRO_VIDEO_BITMAP to force the initial type (and fail in the latter case if no video bitmap can be created) - but usually neither of those combinations is very useful. - + You can use the display option ALLEGRO_AUTO_CONVERT_BITMAPS to control which displays will try to auto-convert bitmaps. -ALLEGRO_FORCE_LOCKING +ALLEGRO_FORCE_LOCKING : Does nothing since 5.1.8. Kept for backwards compatibility only. ALLEGRO_NO_PRESERVE_TEXTURE @@ -882,7 +882,7 @@ display will be slow). The only time this function is useful is if you are using multiple windows and need accelerated blitting of the same -bitmaps to both. +bitmaps to both. Returns true if the bitmap is compatible with the current display, false otherwise. If there is no current display, false is returned. @@ -895,9 +895,9 @@ See also: [al_create_sub_bitmap], [al_get_parent_bitmap] ### API: al_get_parent_bitmap -Returns the bitmap this bitmap is a sub-bitmap of. Returns NULL if this -bitmap is not a sub-bitmap. This function always returns the real bitmap, -and never a sub-bitmap. This might NOT match what was passed to +Returns the bitmap this bitmap is a sub-bitmap of. Returns NULL if this +bitmap is not a sub-bitmap. This function always returns the real bitmap, +and never a sub-bitmap. This might NOT match what was passed to [al_create_sub_bitmap]. Consider this code, for instance: ~~~~c @@ -1139,11 +1139,11 @@ See also: [al_draw_tinted_bitmap] ### API: al_draw_pixel -Draws a single pixel at x, y. This function, unlike [al_put_pixel], does -blending and, unlike [al_put_blended_pixel], respects the transformations (that -is, the pixel's position is transformed, but its size is unaffected - it -remains a pixel). This function can be slow if called often; if you need to -draw a lot of pixels consider using [al_draw_prim] with ALLEGRO_PRIM_POINT_LIST +Draws a single pixel at x, y. This function, unlike [al_put_pixel], does +blending and, unlike [al_put_blended_pixel], respects the transformations (that +is, the pixel's position is transformed, but its size is unaffected - it +remains a pixel). This function can be slow if called often; if you need to +draw a lot of pixels consider using [al_draw_prim] with ALLEGRO_PRIM_POINT_LIST from the primitives addon. * x - destination x @@ -1153,7 +1153,7 @@ from the primitives addon. > *Note:* This function may not draw exactly where you expect it to. See the pixel-precise output section on the primitives addon documentation for details on how to control exactly where the -pixel is drawn. +pixel is drawn. See also: [ALLEGRO_COLOR], [al_put_pixel] @@ -1302,7 +1302,7 @@ See also: [ALLEGRO_COLOR], [al_get_pixel], [al_put_blended_pixel], [al_lock_bitm ### API: al_put_blended_pixel Like [al_put_pixel], but the pixel color is blended using the current blenders -before being drawn. +before being drawn. See also: [ALLEGRO_COLOR], [al_put_pixel] @@ -1443,7 +1443,7 @@ on the `op` parameter: g = d.g * df.g + s.g * sf.g b = d.b * df.b + s.b * sf.b a = d.a * df.a + s.a * sf.a - + * ALLEGRO_DEST_MINUS_SRC r = d.r * df.r - s.r * sf.r @@ -1640,11 +1640,11 @@ the blending modes will result in undefined behaviour. One exception to this rule are the non-projection transformations. It is possible to set a new transformation while the drawing is held. -No drawing is guaranteed to take place until you disable the hold. Thus, the +No drawing is guaranteed to take place until you disable the hold. Thus, the idiom of this function's usage is to enable the deferred bitmap drawing, draw as -many bitmaps as possible, taking care to stagger bitmaps that share parent -bitmaps, and then disable deferred drawing. As mentioned above, this function -also works with bitmap and truetype fonts, so if multiple lines of text need to +many bitmaps as possible, taking care to stagger bitmaps that share parent +bitmaps, and then disable deferred drawing. As mentioned above, this function +also works with bitmap and truetype fonts, so if multiple lines of text need to be drawn, this function can speed things up. See also: [al_is_bitmap_drawing_held] @@ -2013,9 +2013,9 @@ Possible functions are: - ALLEGRO_RENDER_NEVER - ALLEGRO_RENDER_ALWAYS - ALLEGRO_RENDER_LESS -- ALLEGRO_RENDER_EQUAL -- ALLEGRO_RENDER_LESS_EQUAL -- ALLEGRO_RENDER_GREATER +- ALLEGRO_RENDER_EQUAL +- ALLEGRO_RENDER_LESS_EQUAL +- ALLEGRO_RENDER_GREATER - ALLEGRO_RENDER_NOT_EQUAL - ALLEGRO_RENDER_GREATER_EQUAL diff --git a/docs/src/refman/haptic.txt b/docs/src/refman/haptic.txt index f96f4e103e..fe2e49f625 100644 --- a/docs/src/refman/haptic.txt +++ b/docs/src/refman/haptic.txt @@ -7,9 +7,9 @@ These functions are declared in the main Allegro header file: #include ~~~~ -Currently force feedback is fully supported on Linux and on Windows for +Currently force feedback is fully supported on Linux and on Windows for DirectInput compatible devices. There is also minimal support for -Android. It is not yet supported on OSX, iOS, or on Windows for XInput +Android. It is not yet supported on OSX, iOS, or on Windows for XInput compatible devices. ## API: ALLEGRO_HAPTIC @@ -108,9 +108,9 @@ direction In Allegro's coordinate system, the value in `direction.angle` determines the planar angle between the effect and the direction of the user who holds the device, expressed in radians. This angle increases clockwise - away from the user. So, an effect with an angle 0.0 takes place in the + away from the user. So, an effect with an angle 0.0 takes place in the direction of the user of the haptic device, an angle of π/2 is - to the left of the user, an angle of π means the direction away from + to the left of the user, an angle of π means the direction away from the user, and an angle of 3π/2 means to the right of the user. If [al_get_haptic_capabilities] has the flag ALLEGRO_HAPTIC_ANGLE set, @@ -131,8 +131,8 @@ direction The value in `direction.azimuth` determines the elevation angle between the effect and the plane in which the user is holding the device, expressed in radians. An effect with an azimuth 0.0 plays back in the - plane in which the user is holding the device, an azimuth +π/2 means - the effect plays back vertically above the user plane, and an azimuth + plane in which the user is holding the device, an azimuth +π/2 means + the effect plays back vertically above the user plane, and an azimuth -π/2 means the effect plays back vertically below the user plane. If [al_get_haptic_capabilities] has the flag ALLEGRO_HAPTIC_AZIMUTH set, @@ -275,9 +275,9 @@ Installs the haptic (force feedback) device subsystem. This must be called before using any other haptic-related functions. Returns true if the haptics subsystem could be initialized correctly, false in case of error. -For portability you should first open a display before calling -[al_install_haptic]. On some platforms, such as DirectInput under -Windows, [al_install_haptic] will only work if at least one active +For portability you should first open a display before calling +[al_install_haptic]. On some platforms, such as DirectInput under +Windows, [al_install_haptic] will only work if at least one active display is available. This display must stay available until [al_uninstall_haptic] is called. @@ -416,7 +416,7 @@ exposed features across all of the platforms. Awaiting feedback from users. Releases the haptic device and its resources when it's not needed anymore. Should also be used in case the joystick configuration changed, such as when -a joystick is hot plugged. This function also automatically releases all +a joystick is hot plugged. This function also automatically releases all haptic effects that are still uploaded to the device and that have not been released manually using [al_release_haptic_effect]. @@ -451,8 +451,8 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_is_haptic_capable Returns true if the haptic device supports the feature indicated by -the query parameter, false if the feature is not supported. -The query parameter must be one of the values of [ALLEGRO_HAPTIC_CONSTANTS]. +the query parameter, false if the feature is not supported. +The query parameter must be one of the values of [ALLEGRO_HAPTIC_CONSTANTS]. Since: 5.1.9 @@ -493,15 +493,15 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_set_haptic_autocenter -Turns on or off the automatic centering feature of the haptic device if -supported. Depending on the device automatic centering may ensure that the +Turns on or off the automatic centering feature of the haptic device if +supported. Depending on the device automatic centering may ensure that the axes of the device are centered again automatically after playing -a haptic effect. The intensity parameter should be passed with a value -between 0.0 and 1.0. The value 0.0 means automatic centering is +a haptic effect. The intensity parameter should be passed with a value +between 0.0 and 1.0. The value 0.0 means automatic centering is disabled, and 1.0 means full strength automatic centering. Any value -in between those two extremes will result in partial automatic -centering. Some platforms do not support partial automatic -centering. If that is the case, a value of less than 0.5 will turn +in between those two extremes will result in partial automatic +centering. Some platforms do not support partial automatic +centering. If that is the case, a value of less than 0.5 will turn it off, while a value equal to or higher to 0.5 will turn it on. Returns true if set successfully, false if not. Can only work if [al_get_haptic_capabilities] returns a value that has @@ -515,17 +515,17 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_get_haptic_autocenter -Returns the current automatic centering intensity of the device. -Depending on the device automatic centering may ensure that the +Returns the current automatic centering intensity of the device. +Depending on the device automatic centering may ensure that the axes of the device are centered again automatically after playing -a haptic effect. The return value can be between 0.0 and 1.0. -The value 0.0 means automatic centering is disabled, and 1.0 means +a haptic effect. The return value can be between 0.0 and 1.0. +The value 0.0 means automatic centering is disabled, and 1.0 means automatic centering is enabled at full strength. Any value -in between those two extremes means partial automatic -centering is enabled. Some platforms do not support partial automatic -centering. If that is the case, a value of less than 0.5 means it is turned +in between those two extremes means partial automatic +centering is enabled. Some platforms do not support partial automatic +centering. If that is the case, a value of less than 0.5 means it is turned off, while a value equal to or higher to 0.5 means it is turned on. -Can only work if [al_get_haptic_capabilities] returns a +Can only work if [al_get_haptic_capabilities] returns a value that has [ALLEGRO_HAPTIC_AUTOCENTER][ALLEGRO_HAPTIC_CONSTANTS] set. If not, this function returns 0.0. @@ -537,7 +537,7 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_get_max_haptic_effects Returns the maximum amount of haptic effects that can be uploaded to the -device. This depends on the operating system, driver, platform and the +device. This depends on the operating system, driver, platform and the device itself. This may return a value as low as 1. Since: 5.1.8 @@ -561,7 +561,7 @@ Uploads the haptic effect to the device. The haptic effect must have been filled in completely and correctly. You must also pass in a pointer to a user allocated [ALLEGRO_HAPTIC_EFFECT_ID]. This `id` can be used to control playback of the effect. Returns true if the effect was successfully uploaded, -false if not. +false if not. The function [al_get_max_haptic_effects] returns how many effects can be uploaded to the device at the same time. @@ -595,13 +595,13 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_upload_and_play_haptic_effect Uploads the haptic effect to the device and starts playback immediately. Returns -true if the upload and playback were successful, false if either failed. +true if the upload and playback were successful, false if either failed. -In case false is returned, the haptic effect will be automatically -released as if [al_release_haptic_effect] had been called, so there -is no need to call it again manually in this case. However, +In case false is returned, the haptic effect will be automatically +released as if [al_release_haptic_effect] had been called, so there +is no need to call it again manually in this case. However, if true is returned, it is necessary to call [al_release_haptic_effect] -when the effect isn't needed anymore, to prevent the amount of available +when the effect isn't needed anymore, to prevent the amount of available effects on the haptic devicefrom running out. Since: 5.1.8 @@ -637,8 +637,8 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_get_haptic_effect_duration -Returns the estimated duration in seconds of a single loop of the given haptic -effect. The effect's `effect.replay` must have been filled in correctly +Returns the estimated duration in seconds of a single loop of the given haptic +effect. The effect's `effect.replay` must have been filled in correctly before using this function. Since: 5.1.9 @@ -649,14 +649,14 @@ exposed features across all of the platforms. Awaiting feedback from users. ## API: al_release_haptic_effect Releases a previously uploaded haptic effect from the device it has been -uploaded to, allowing for other effects to be uploaded. The play_id must be +uploaded to, allowing for other effects to be uploaded. The play_id must be a valid [ALLEGRO_HAPTIC_EFFECT_ID] obtained from [al_upload_haptic_effect], [al_upload_and_play_haptic_effect] or [al_rumble_haptic]. -This function is called automatically when you call [al_release_haptic] +This function is called automatically when you call [al_release_haptic] on a [ALLEGRO_HAPTIC] for all effects that are still uploaded to the device. Therefore this function is most useful if you want to upload and release -haptic effects dynamically, for example as a way to circumvent the limit +haptic effects dynamically, for example as a way to circumvent the limit imposed by [al_get_max_haptic_effects]. Returns true on success, false if the effect couldn't be released for any @@ -680,11 +680,11 @@ You must also pass in a pointer to a user allocated control playback of the effect. Returns true if the rumble effect was successfully uploaded and started, false if not. -In case false is returned, the rumble effect will be automatically -released as if [al_release_haptic_effect] had been called, so there -is no need to call it again manually in this case. However, +In case false is returned, the rumble effect will be automatically +released as if [al_release_haptic_effect] had been called, so there +is no need to call it again manually in this case. However, if true is returned, it is necessary to call [al_release_haptic_effect] -when the effect isn't needed anymore, to prevent the amount of available +when the effect isn't needed anymore, to prevent the amount of available effects on the haptic device from running out. Since: 5.1.8 diff --git a/docs/src/refman/image.txt b/docs/src/refman/image.txt index 4786994e05..6680648b9a 100644 --- a/docs/src/refman/image.txt +++ b/docs/src/refman/image.txt @@ -22,7 +22,7 @@ via external dependencies. Other formats may be available depending on the operating system and installed libraries, but are not guaranteed and should not be assumed to -be universally available. +be universally available. The DDS format is only supported to load from, and only if the DDS file contains textures compressed in the DXT1, DXT3 and DXT5 formats. Note that when diff --git a/docs/src/refman/joystick.txt b/docs/src/refman/joystick.txt index 2a0398a456..ef3ff0a6b3 100644 --- a/docs/src/refman/joystick.txt +++ b/docs/src/refman/joystick.txt @@ -6,12 +6,12 @@ These functions are declared in the main Allegro header file: #include ~~~~ -On Windows there are two joystick drivers, a DirectInput one and an Xinput +On Windows there are two joystick drivers, a DirectInput one and an Xinput one. If support for XInput was compiled in, then it can be enabled by -calling al_set_config_value(al_get_system_config(), "joystick", "driver", +calling al_set_config_value(al_get_system_config(), "joystick", "driver", "xinput") before calling al_install_joystick, or by setting the same -option in the allegro5.cfg configuration file. The Xinput and DirectInput -drivers are mutually exclusive. The haptics subsystem will use the +option in the allegro5.cfg configuration file. The Xinput and DirectInput +drivers are mutually exclusive. The haptics subsystem will use the same driver as the joystick system does. ## API: ALLEGRO_JOYSTICK diff --git a/docs/src/refman/opengl.txt b/docs/src/refman/opengl.txt index 5d89a7fe84..c27184f995 100644 --- a/docs/src/refman/opengl.txt +++ b/docs/src/refman/opengl.txt @@ -59,7 +59,7 @@ glMultiTexCoord3fARB = (MULTI_TEX_FUNC) al_get_opengl_proc_address( "glMultiTexCoord3fARB"); ~~~~ -If _glMultiTexCoord3fARB_ is not NULL then it can be used as if it has +If _glMultiTexCoord3fARB_ is not NULL then it can be used as if it has been defined in the OpenGL core library. > *Note:* Under Windows, OpenGL functions may need a special calling diff --git a/docs/src/refman/platform.txt b/docs/src/refman/platform.txt index fcaa39a232..5d2abf71dd 100644 --- a/docs/src/refman/platform.txt +++ b/docs/src/refman/platform.txt @@ -23,7 +23,7 @@ Optionally, you may use `result` to customize what Allegro will return return in response to this event. By default, Allegro returns `TRUE`. The `userdata` pointer can be used to supply additional context to the -callback function. +callback function. The callbacks are executed in the same order they were added. @@ -33,7 +33,7 @@ Since: 5.1.2 ### API: al_win_remove_window_callback -Removes the callback that was previously registered with +Removes the callback that was previously registered with [al_win_add_window_callback]. The `userdata` pointer must be the same as what was used during the registration of the callback. diff --git a/docs/src/refman/shader.txt b/docs/src/refman/shader.txt index ade89afb39..1eb2730629 100644 --- a/docs/src/refman/shader.txt +++ b/docs/src/refman/shader.txt @@ -27,7 +27,7 @@ specify how to interpret the attached source. ALLEGRO_VERTEX_SHADER : A vertex shader is executed for each vertex it is used with. The program will output exactly one vertex at a time. - + When Allegro's graphics are being used then in addition to all vertices of primitives from the primitives addon, each drawn bitmap also consists of four vertices. @@ -36,10 +36,10 @@ ALLEGRO_PIXEL_SHADER : A pixel shader is executed for each pixel it is used with. The program will output exactly one pixel at a time - either in the backbuffer or in the current target bitmap. - + With Allegro's builtin graphics this means the shader is for example called for each destination pixel of the output of an [al_draw_bitmap] call. - + A more accurate term for pixel shader would be fragment shader since one final pixel in the target bitmap is not necessarily composed of only a single output but of multiple fragments (for example when multi-sampling is diff --git a/docs/src/refman/state.txt b/docs/src/refman/state.txt index 7bda019227..5767d355ac 100644 --- a/docs/src/refman/state.txt +++ b/docs/src/refman/state.txt @@ -57,14 +57,14 @@ object. The flags parameter can take any bit-combination of these flags: new_display_refresh_rate, new_display_flags * ALLEGRO_STATE_NEW_BITMAP_PARAMETERS - new_bitmap_format, new_bitmap_flags * ALLEGRO_STATE_DISPLAY - current_display -* ALLEGRO_STATE_TARGET_BITMAP - target_bitmap +* ALLEGRO_STATE_TARGET_BITMAP - target_bitmap * ALLEGRO_STATE_BLENDER - blender * ALLEGRO_STATE_TRANSFORM - current_transformation * ALLEGRO_STATE_PROJECTION_TRANSFORM - current_projection_transformation -* ALLEGRO_STATE_NEW_FILE_INTERFACE - new_file_interface +* ALLEGRO_STATE_NEW_FILE_INTERFACE - new_file_interface * ALLEGRO_STATE_BITMAP - same as ALLEGRO_STATE_NEW_BITMAP_PARAMETERS and ALLEGRO_STATE_TARGET_BITMAP -* ALLEGRO_STATE_ALL - all of the above +* ALLEGRO_STATE_ALL - all of the above See also: [al_restore_state], [ALLEGRO_STATE] diff --git a/docs/src/refman/system.txt b/docs/src/refman/system.txt index 2cb79deb00..39c6885094 100644 --- a/docs/src/refman/system.txt +++ b/docs/src/refman/system.txt @@ -92,21 +92,21 @@ exist on the file system. ALLEGRO_RESOURCES_PATH : If you bundle data in a location relative to your executable, then you should use this path to locate that data. On most platforms, this is the - directory that contains the executable file. - + directory that contains the executable file. + If called from an OS X app bundle, then this will point to the internal - resource directory (/Contents/Resources). To maintain + resource directory (/Contents/Resources). To maintain consistency, if you put your resources into a directory called "data" beneath the executable on some other platform (like Windows), then you should also create a directory called "data" under the OS X app bundle's resource folder. - + You should not try to write to this path, as it is very likely read-only. - + If you install your resources in some other system directory (e.g., in /usr/share or C:\\ProgramData), then you are responsible for keeping track - of that yourself. - + of that yourself. + ALLEGRO_TEMP_PATH : Path to the directory for temporary files. @@ -115,27 +115,27 @@ ALLEGRO_USER_HOME_PATH this directory directly, or create any sub folders in it, without explicit permission from the user. One practical application of this path would be to use it as the starting place of a file selector in a GUI. - + ALLEGRO_USER_DOCUMENTS_PATH : This location is easily accessible by the user, and is the place to store documents and files that the user might want to later open with - an external program or transfer to another place. - + an external program or transfer to another place. + You should not save files here unless the user expects it, usually by explicit permission. ALLEGRO_USER_DATA_PATH -: If your program saves any data that the user doesn't need to access +: If your program saves any data that the user doesn't need to access externally, then you should place it here. This is generally the least intrusive place to store data. This path will usually not be present on the file system, so make sure to create it before writing to it. - + ALLEGRO_USER_SETTINGS_PATH : If you are saving configuration files (especially if the user may want to edit them outside of your program), then you should place them here. This path will usually not be present on the file system, so make sure to create it before writing to it. - + ALLEGRO_EXENAME_PATH : The full path to the executable. @@ -255,19 +255,19 @@ Since: 5.1.5 ## API: al_get_cpu_count Returns the number of CPU cores that the system Allegro is running on -has and which could be detected, or a negative number if detection failed. +has and which could be detected, or a negative number if detection failed. Even if a positive number is returned, it might be that it is not correct. For example, Allegro running on a virtual machine will return the amount of -CPU's of the VM, and not that of the underlying system. +CPU's of the VM, and not that of the underlying system. -Furthermore even if the number is correct, this only gives you information about -the total CPU cores of the system Allegro runs on. The amount of cores available -to your program may be less due to circumstances such as programs that are +Furthermore even if the number is correct, this only gives you information about +the total CPU cores of the system Allegro runs on. The amount of cores available +to your program may be less due to circumstances such as programs that are currently running. -Therefore, it's best to use this for advisory purposes only. It is certainly a -bad idea to make your program exclusive to systems for which this function +Therefore, it's best to use this for advisory purposes only. It is certainly a +bad idea to make your program exclusive to systems for which this function returns a certain "desirable" number. This function may be called prior to [al_install_system] or [al_init]. @@ -276,20 +276,20 @@ Since: 5.1.12 ## API: al_get_ram_size -Returns the size in MB of the random access memory that the system Allegro is -running on has and which could be detected, or a negative number if detection -failed. Even if a positive number is returned, it might be that it is not -correct. For example, Allegro running on a virtual machine will return -the amount of RAM of the VM, and not that of the underlying system. +Returns the size in MB of the random access memory that the system Allegro is +running on has and which could be detected, or a negative number if detection +failed. Even if a positive number is returned, it might be that it is not +correct. For example, Allegro running on a virtual machine will return +the amount of RAM of the VM, and not that of the underlying system. -Furthermore even if the number is correct, this only gives you information about -the total physical memory of the system Allegro runs on. The memory available +Furthermore even if the number is correct, this only gives you information about +the total physical memory of the system Allegro runs on. The memory available to your program may be less or more than what this function returns due to -circumstances such as virtual memory, and other programs that are currently +circumstances such as virtual memory, and other programs that are currently running. -Therefore, it's best to use this for advisory purposes only. It is certainly a -bad idea to make your program exclusive to systems for which this function +Therefore, it's best to use this for advisory purposes only. It is certainly a +bad idea to make your program exclusive to systems for which this function returns a certain "desirable" number. This function may be called prior to [al_install_system] or [al_init]. diff --git a/docs/src/refman/threads.txt b/docs/src/refman/threads.txt index 05e5fc7ec0..135ec3f47a 100644 --- a/docs/src/refman/threads.txt +++ b/docs/src/refman/threads.txt @@ -48,7 +48,7 @@ See also: [al_start_thread], [al_join_thread]. ## API: al_create_thread_with_stacksize -Spawn a new thread with the give stacksize in bytes which begins executing +Spawn a new thread with the give stacksize in bytes which begins executing `proc`. The new thread is passed its own thread handle and the value `arg`. Returns a pointer to the thread on success. diff --git a/docs/src/refman/transformations.txt b/docs/src/refman/transformations.txt index 39e8e986c6..15b17731c4 100644 --- a/docs/src/refman/transformations.txt +++ b/docs/src/refman/transformations.txt @@ -202,7 +202,7 @@ If there is no target bitmap, this function returns NULL. This is similar to calling `al_invert_transform(al_get_current_transform())` but the result of this function is cached. -> *Note*: Allegro's transformation inversion functions work correctly only +> *Note*: Allegro's transformation inversion functions work correctly only with 2D transformations. Since: 5.1.0 @@ -218,7 +218,7 @@ inverse before inverting it if you are in doubt. * trans - Transformation to invert -> *Note*: Allegro's transformation inversion functions work correctly only +> *Note*: Allegro's transformation inversion functions work correctly only with 2D transformations. See also: [al_check_inverse] @@ -269,7 +269,7 @@ the transformation will be invertible. *Returns:* 1 if the transformation is invertible, 0 otherwise -> *Note*: Allegro's transformation inversion functions work correctly only +> *Note*: Allegro's transformation inversion functions work correctly only with 2D transformations. See also: [al_invert_transform] diff --git a/python/readme.txt b/python/readme.txt index 1828e7fe09..f60a6a637a 100644 --- a/python/readme.txt +++ b/python/readme.txt @@ -17,7 +17,7 @@ Unix: liballegro*.so For simplicity we will simply call those files "DLL files". ## Using it - + Distribute the allegro.py as well as the required DLL files along with your project. If you want you can modify it to directly point to the DLL files so you can be sure they are found. By default, it will try @@ -89,14 +89,14 @@ Therefore you should do something like this: class Bitmap: - def __init__(self, filename): - self.c_pointer = al_load_bitmap(filename) + def __init__(self, filename): + self.c_pointer = al_load_bitmap(filename) + + def __del__(self): + al_destroy_bitmap(self.c_pointer) - def __del__(self): - al_destroy_bitmap(self.c_pointer) - - def draw(self, x, y, flags): - al_draw_bitmap(self.c_pointer, x, y, flags); + def draw(self, x, y, flags): + al_draw_bitmap(self.c_pointer, x, y, flags); In other words, make a proper Python wrapper. diff --git a/src/misc/bstrlib.txt b/src/misc/bstrlib.txt index 6e5795377f..12a3cab060 100644 --- a/src/misc/bstrlib.txt +++ b/src/misc/bstrlib.txt @@ -3,9 +3,9 @@ Better String library by Paul Hsieh -The bstring library is an attempt to provide improved string processing -functionality to the C and C++ language. At the heart of the bstring library -(Bstrlib for short) is the management of "bstring"s which are a significant +The bstring library is an attempt to provide improved string processing +functionality to the C and C++ language. At the heart of the bstring library +(Bstrlib for short) is the management of "bstring"s which are a significant improvement over '\0' terminated char buffers. =============================================================================== @@ -15,7 +15,7 @@ Motivation The standard C string library has serious problems: - 1) Its use of '\0' to denote the end of the string means knowing a + 1) Its use of '\0' to denote the end of the string means knowing a string's length is O(n) when it could be O(1). 2) It imposes an interpretation for the character value '\0'. 3) gets() always exposes the application to a buffer overflow. @@ -26,11 +26,11 @@ The standard C string library has serious problems: 6) There is no memory management, and actions performed such as strcpy, strcat and sprintf are common places for buffer overflows. 7) strncpy() doesn't '\0' terminate the destination in some cases. - 8) Passing NULL to C library string functions causes an undefined NULL + 8) Passing NULL to C library string functions causes an undefined NULL pointer access. - 9) Parameter aliasing (overlapping, or self-referencing parameters) + 9) Parameter aliasing (overlapping, or self-referencing parameters) within most C library functions has undefined behavior. - 10) Many C library string function calls take integer parameters with + 10) Many C library string function calls take integer parameters with restricted legal ranges. Parameters passed outside these ranges are not typically detected and cause undefined behavior. @@ -45,13 +45,13 @@ from the above problems and adds in the following functionality: without creating a dependency on stream IO functionality. 3) Implement the basic text editor-style functions insert, delete, find, and replace. - 4) Implement reference based sub-string access (as a generalization of + 4) Implement reference based sub-string access (as a generalization of pointer arithmetic.) 5) Implement runtime write protection for strings. There is also a desire to avoid "API-bloat". So functionality that can be implemented trivially in other functionality is omitted. So there is no -left$() or right$() or reverse() or anything like that as part of the core +left$() or right$() or reverse() or anything like that as part of the core functionality. Explaining Bstrings @@ -66,25 +66,25 @@ start with the declaration of a struct tagbstring: unsigned char * data; }; -This definition is considered exposed, not opaque (though it is neither -necessary nor recommended that low level maintenance of bstrings be performed +This definition is considered exposed, not opaque (though it is neither +necessary nor recommended that low level maintenance of bstrings be performed whenever the abstract interfaces are sufficient). The mlen field (usually) -describes a lower bound for the memory allocated for the data field. The -slen field describes the exact length for the bstring. The data field is a -single contiguous buffer of unsigned chars. Note that the existence of a '\0' -character in the unsigned char buffer pointed to by the data field does not +describes a lower bound for the memory allocated for the data field. The +slen field describes the exact length for the bstring. The data field is a +single contiguous buffer of unsigned chars. Note that the existence of a '\0' +character in the unsigned char buffer pointed to by the data field does not necessarily denote the end of the bstring. -To be a well formed modifiable bstring the mlen field must be at least the -length of the slen field, and slen must be non-negative. Furthermore, the -data field must point to a valid buffer in which access to the first mlen +To be a well formed modifiable bstring the mlen field must be at least the +length of the slen field, and slen must be non-negative. Furthermore, the +data field must point to a valid buffer in which access to the first mlen characters has been acquired. So the minimal check for correctness is: (slen >= 0 && mlen >= slen && data != NULL) bstrings returned by bstring functions can be assumed to be either NULL or -satisfy the above property. (When bstrings are only readable, the mlen >= -slen restriction is not required; this is discussed later in this section.) +satisfy the above property. (When bstrings are only readable, the mlen >= +slen restriction is not required; this is discussed later in this section.) A bstring itself is just a pointer to a struct tagbstring: typedef struct tagbstring * bstring; @@ -93,12 +93,12 @@ Note that use of the prefix "tag" in struct tagbstring is required to work around the inconsistency between C and C++'s struct namespace usage. This definition is also considered exposed. -Bstrlib basically manages bstrings allocated as a header and an associated -data-buffer. Since the implementation is exposed, they can also be -constructed manually. Functions which mutate bstrings assume that the header -and data buffer have been malloced; the bstring library may perform al_free() or -al_realloc() on both the header and data buffer of any bstring parameter. -Functions which return bstring's create new bstrings. The string memory is +Bstrlib basically manages bstrings allocated as a header and an associated +data-buffer. Since the implementation is exposed, they can also be +constructed manually. Functions which mutate bstrings assume that the header +and data buffer have been malloced; the bstring library may perform al_free() or +al_realloc() on both the header and data buffer of any bstring parameter. +Functions which return bstring's create new bstrings. The string memory is freed by a bdestroy() call (or using the bstrFree macro). The following related typedef is also provided: @@ -106,17 +106,17 @@ The following related typedef is also provided: typedef const struct tagbstring * const_bstring; which is also considered exposed. These are directly bstring compatible (no -casting required) but are just used for parameters which are meant to be -non-mutable. So in general, bstring parameters which are read as input but +casting required) but are just used for parameters which are meant to be +non-mutable. So in general, bstring parameters which are read as input but not meant to be modified will be declared as const_bstring, and bstring parameters which may be modified will be declared as bstring. This convention is recommended for user written functions as well. -Since bstrings maintain interoperability with C library char-buffer style -strings, all functions which modify, update or create bstrings also append a -'\0' character into the position slen + 1. This trailing '\0' character is -not required for bstrings input to the bstring functions; this is provided -solely as a convenience for interoperability with standard C char-buffer +Since bstrings maintain interoperability with C library char-buffer style +strings, all functions which modify, update or create bstrings also append a +'\0' character into the position slen + 1. This trailing '\0' character is +not required for bstrings input to the bstring functions; this is provided +solely as a convenience for interoperability with standard C char-buffer functionality. Analogs for the ANSI C string library functions have been created when they @@ -125,7 +125,7 @@ there are no functions analogous to fwrite, or puts just for the purposes of bstring. The ->data member of any string is exposed, and therefore can be used just as easily as char buffers for C functions which read strings. -For those that wish to hand construct bstrings, the following should be kept +For those that wish to hand construct bstrings, the following should be kept in mind: 1) While bstrlib can accept constructed bstrings without terminating @@ -138,10 +138,10 @@ in mind: properly. The struct tagbstring header is not reallocated, and only freed by bdestroy. 3) Writing arbitrary '\0' characters at various places in the string - will not modify its length as perceived by the bstring library + will not modify its length as perceived by the bstring library functions. In fact, '\0' is a legitimate non-terminating character for a bstring to contain. - 4) For read only parameters, bstring functions do not check the mlen. + 4) For read only parameters, bstring functions do not check the mlen. I.e., the minimal correctness requirements are reduced to: (slen >= 0 && data != NULL) @@ -150,29 +150,29 @@ Better pointer arithmetic ------------------------- One built-in feature of '\0' terminated char * strings, is that its very easy -and fast to obtain a reference to the tail of any string using pointer +and fast to obtain a reference to the tail of any string using pointer arithmetic. Bstrlib does one better by providing a way to get a reference to any substring of a bstring (or any other length delimited block of memory.) -So rather than just having pointer arithmetic, with bstrlib one essentially -has segment arithmetic. This is achieved using the macro blk2tbstr() which -builds a reference to a block of memory and the macro bmid2tbstr() which -builds a reference to a segment of a bstring. Bstrlib also includes -functions for direct consumption of memory blocks into bstrings, namely +So rather than just having pointer arithmetic, with bstrlib one essentially +has segment arithmetic. This is achieved using the macro blk2tbstr() which +builds a reference to a block of memory and the macro bmid2tbstr() which +builds a reference to a segment of a bstring. Bstrlib also includes +functions for direct consumption of memory blocks into bstrings, namely bcatblk () and blk2bstr (). -One scenario where this can be extremely useful is when string contains many -substrings which one would like to pass as read-only reference parameters to -some string consuming function without the need to allocate entire new -containers for the string data. More concretely, imagine parsing a command -line string whose parameters are space delimited. This can only be done for +One scenario where this can be extremely useful is when string contains many +substrings which one would like to pass as read-only reference parameters to +some string consuming function without the need to allocate entire new +containers for the string data. More concretely, imagine parsing a command +line string whose parameters are space delimited. This can only be done for tails of the string with '\0' terminated char * strings. Improved NULL semantics and error handling ------------------------------------------ -Unless otherwise noted, if a NULL pointer is passed as a bstring or any other -detectably illegal parameter, the called function will return with an error -indicator (either NULL or BSTR_ERR) rather than simply performing a NULL +Unless otherwise noted, if a NULL pointer is passed as a bstring or any other +detectably illegal parameter, the called function will return with an error +indicator (either NULL or BSTR_ERR) rather than simply performing a NULL pointer access, or having undefined behavior. To illustrate the value of this, consider the following example: @@ -180,53 +180,53 @@ To illustrate the value of this, consider the following example: strcpy (p = malloc (13 * sizeof (char)), "Hello,"); strcat (p, " World"); -This is not correct because malloc may return NULL (due to an out of memory -condition), and the behaviour of strcpy is undefined if either of its +This is not correct because malloc may return NULL (due to an out of memory +condition), and the behaviour of strcpy is undefined if either of its parameters are NULL. However: bstrcat (p = bfromcstr ("Hello,"), q = bfromcstr (" World")); bdestroy (q); -is well defined, because if either p or q are assigned NULL (indicating a -failure to allocate memory) both bstrcat and bdestroy will recognize it and +is well defined, because if either p or q are assigned NULL (indicating a +failure to allocate memory) both bstrcat and bdestroy will recognize it and perform no detrimental action. -Note that it is not necessary to check any of the members of a returned -bstring for internal correctness (in particular the data member does not need -to be checked against NULL when the header is non-NULL), since this is +Note that it is not necessary to check any of the members of a returned +bstring for internal correctness (in particular the data member does not need +to be checked against NULL when the header is non-NULL), since this is assured by the bstring library itself. bStreams -------- -In addition to the bgets and bread functions, bstrlib can abstract streams -with a high performance read only stream called a bStream. In general, the +In addition to the bgets and bread functions, bstrlib can abstract streams +with a high performance read only stream called a bStream. In general, the idea is to open a core stream (with something like fopen) then pass its -handle as well as a bNread function pointer (like fread) to the bsopen -function which will return a handle to an open bStream. Then the functions -bsread, bsreadln or bsreadlns can be called to read portions of the stream. -Finally, the bsclose function is called to close the bStream -- it will -return a handle to the original (core) stream. So bStreams, essentially, +handle as well as a bNread function pointer (like fread) to the bsopen +function which will return a handle to an open bStream. Then the functions +bsread, bsreadln or bsreadlns can be called to read portions of the stream. +Finally, the bsclose function is called to close the bStream -- it will +return a handle to the original (core) stream. So bStreams, essentially, wrap other streams. The bStreams have two main advantages over the bgets and bread (as well as fgets/ungetc) paradigms: -1) Improved functionality via the bunread function which allows a stream to - unread characters, giving the bStream stack-like functionality if so +1) Improved functionality via the bunread function which allows a stream to + unread characters, giving the bStream stack-like functionality if so desired. 2) A very high performance bsreadln function. The C library function fgets() - (and the bgets function) can typically be written as a loop on top of - fgetc(), thus paying all of the overhead costs of calling fgetc on a per - character basis. bsreadln will read blocks at a time, thus amortizing the + (and the bgets function) can typically be written as a loop on top of + fgetc(), thus paying all of the overhead costs of calling fgetc on a per + character basis. bsreadln will read blocks at a time, thus amortizing the overhead of fread calls over many characters at once. -However, clearly bStreams are suboptimal or unusable for certain kinds of +However, clearly bStreams are suboptimal or unusable for certain kinds of streams (stdin) or certain usage patterns (a few spotty, or non-sequential -reads from a slow stream.) For those situations, using bgets will be more +reads from a slow stream.) For those situations, using bgets will be more appropriate. -The semantics of bStreams allows practical construction of layerable data +The semantics of bStreams allows practical construction of layerable data streams. What this means is that by writing a bNread compatible function on top of a bStream, one can construct a new bStream on top of it. This can be useful for writing multi-pass parsers that don't actually read the entire @@ -237,48 +237,48 @@ Aliasing Aliasing occurs when a function is given two parameters which point to data structures which overlap in the memory they occupy. While this does not -disturb read only functions, for many libraries this can make functions that -write to these memory locations malfunction. This is a common problem of the -C standard library and especially the string functions in the C standard +disturb read only functions, for many libraries this can make functions that +write to these memory locations malfunction. This is a common problem of the +C standard library and especially the string functions in the C standard library. -The C standard string library is entirely char by char oriented (as is -bstring) which makes conforming implementations alias safe for some -scenarios. However no actual detection of aliasing is typically performed, -so it is easy to find cases where the aliasing will cause anomolous or -undesirable behaviour (consider: strcat (p, p).) The C99 standard includes -the "restrict" pointer modifier which allows the compiler to document and -assume a no-alias condition on usage. However, only the most trivial cases -can be caught (if at all) by the compiler at compile time, and thus there is +The C standard string library is entirely char by char oriented (as is +bstring) which makes conforming implementations alias safe for some +scenarios. However no actual detection of aliasing is typically performed, +so it is easy to find cases where the aliasing will cause anomolous or +undesirable behaviour (consider: strcat (p, p).) The C99 standard includes +the "restrict" pointer modifier which allows the compiler to document and +assume a no-alias condition on usage. However, only the most trivial cases +can be caught (if at all) by the compiler at compile time, and thus there is no actual enforcement of non-aliasing. -Bstrlib, by contrast, permits aliasing and is completely aliasing safe, in -the C99 sense of aliasing. That is to say, under the assumption that -pointers of incompatible types from distinct objects can never alias, bstrlib -is completely aliasing safe. (In practice this means that the data buffer -portion of any bstring and header of any bstring are assumed to never alias.) -With the exception of the reference building macros, the library behaves as -if all read-only parameters are first copied and replaced by temporary -non-aliased parameters before any writing to any output bstring is performed +Bstrlib, by contrast, permits aliasing and is completely aliasing safe, in +the C99 sense of aliasing. That is to say, under the assumption that +pointers of incompatible types from distinct objects can never alias, bstrlib +is completely aliasing safe. (In practice this means that the data buffer +portion of any bstring and header of any bstring are assumed to never alias.) +With the exception of the reference building macros, the library behaves as +if all read-only parameters are first copied and replaced by temporary +non-aliased parameters before any writing to any output bstring is performed (though actual copying is extremely rarely ever done.) -Besides being a useful safety feature, bstring searching/comparison +Besides being a useful safety feature, bstring searching/comparison functions can improve to O(1) execution when aliasing is detected. -Note that aliasing detection and handling code in Bstrlib is generally +Note that aliasing detection and handling code in Bstrlib is generally extremely cheap. There is almost never any appreciable performance penalty for using aliased parameters. Reenterancy ----------- -Nearly every function in Bstrlib is a leaf function, and is completely -reenterable with the exception of writing to common bstrings. The split -functions which use a callback mechanism requires only that the source string +Nearly every function in Bstrlib is a leaf function, and is completely +reenterable with the exception of writing to common bstrings. The split +functions which use a callback mechanism requires only that the source string not be destroyed by the callback function unless the callback function returns -with an error status (note that Bstrlib functions which return an error do +with an error status (note that Bstrlib functions which return an error do not modify the string in any way.) The string can in fact be modified by the -callback and the behaviour is deterministic. See the documentation of the +callback and the behaviour is deterministic. See the documentation of the various split functions for more details. Undefined scenarios @@ -286,78 +286,78 @@ Undefined scenarios One of the basic important premises for Bstrlib is to not to increase the propogation of undefined situations from parameters that are otherwise legal -in of themselves. In particular, except for extremely marginal cases, usages -of bstrings that use the bstring library functions alone cannot lead to any -undefined action. But due to C/C++ language and library limitations, there -is no way to define a non-trivial library that is completely without -undefined operations. All such possible undefined operations are described +in of themselves. In particular, except for extremely marginal cases, usages +of bstrings that use the bstring library functions alone cannot lead to any +undefined action. But due to C/C++ language and library limitations, there +is no way to define a non-trivial library that is completely without +undefined operations. All such possible undefined operations are described below: 1) bstrings or struct tagbstrings that are not explicitely initialized cannot be passed as a parameter to any bstring function. 2) The members of the NULL bstring cannot be accessed directly. (Though all APIs and macros detect the NULL bstring.) -3) A bstring whose data member has not been obtained from a malloc or - compatible call and which is write accessible passed as a writable - parameter will lead to undefined results. (i.e., do not writeAllow any - constructed bstrings unless the data portion has been obtained from the +3) A bstring whose data member has not been obtained from a malloc or + compatible call and which is write accessible passed as a writable + parameter will lead to undefined results. (i.e., do not writeAllow any + constructed bstrings unless the data portion has been obtained from the heap.) -4) If the headers of two strings alias but are not identical (which can only - happen via a defective manual construction), then passing them to a +4) If the headers of two strings alias but are not identical (which can only + happen via a defective manual construction), then passing them to a bstring function in which one is writable is not defined. -5) If the mlen member is larger than the actual accessible length of the data - member for a writable bstring, or if the slen member is larger than the - readable length of the data member for a readable bstring, then the +5) If the mlen member is larger than the actual accessible length of the data + member for a writable bstring, or if the slen member is larger than the + readable length of the data member for a readable bstring, then the corresponding bstring operations are undefined. 6) Any bstring definition whose header or accessible data portion has been assigned to inaccessible or otherwise illegal memory clearly cannot be acted upon by the bstring library in any way. 7) Destroying the source of an incremental split from within the callback and not returning with a negative value (indicating that it should abort) - will lead to undefined behaviour. (Though *modifying* or adjusting the - state of the source data, even if those modification fail within the + will lead to undefined behaviour. (Though *modifying* or adjusting the + state of the source data, even if those modification fail within the bstrlib API, has well defined behavior.) -8) Modifying a bstring which is write protected by direct access has +8) Modifying a bstring which is write protected by direct access has undefined behavior. -While this may seem like a long list, with the exception of invalid uses of -the writeAllow macro, and source destruction during an iterative split -without an accompanying abort, no usage of the bstring API alone can cause -any undefined scenario to occurr. I.e., the policy of restricting usage of -bstrings to the bstring API can significantly reduce the risk of runtime -errors (in practice it should eliminate them) related to string manipulation +While this may seem like a long list, with the exception of invalid uses of +the writeAllow macro, and source destruction during an iterative split +without an accompanying abort, no usage of the bstring API alone can cause +any undefined scenario to occurr. I.e., the policy of restricting usage of +bstrings to the bstring API can significantly reduce the risk of runtime +errors (in practice it should eliminate them) related to string manipulation due to undefined action. C++ wrapper ----------- A C++ wrapper has been created to enable bstring functionality for C++ in the -most natural (for C++ programers) way possible. The mandate for the C++ -wrapper is different from the base C bstring library. Since the C++ language -has far more abstracting capabilities, the CBString structure is considered -fully abstracted -- i.e., hand generated CBStrings are not supported (though +most natural (for C++ programers) way possible. The mandate for the C++ +wrapper is different from the base C bstring library. Since the C++ language +has far more abstracting capabilities, the CBString structure is considered +fully abstracted -- i.e., hand generated CBStrings are not supported (though conversion from a struct tagbstring is allowed) and all detectable errors are manifest as thrown exceptions. -- The C++ class definitions are all under the namespace Bstrlib. bstrwrap.h - enables this namespace (with a using namespace Bstrlib; directive at the - end) unless the macro BSTRLIB_DONT_ASSUME_NAMESPACE has been defined before +- The C++ class definitions are all under the namespace Bstrlib. bstrwrap.h + enables this namespace (with a using namespace Bstrlib; directive at the + end) unless the macro BSTRLIB_DONT_ASSUME_NAMESPACE has been defined before it is included. -- Erroneous accesses results in an exception being thrown. The exception +- Erroneous accesses results in an exception being thrown. The exception parameter is of type "struct CBStringException" which is derived from - std::exception if STL is used. A verbose description of the error message + std::exception if STL is used. A verbose description of the error message can be obtained from the what() method. -- CBString is a C++ structure derived from a struct tagbstring. An address - of a CBString cast to a bstring must not be passed to bdestroy. The bstring +- CBString is a C++ structure derived from a struct tagbstring. An address + of a CBString cast to a bstring must not be passed to bdestroy. The bstring C API has been made C++ safe and can be used directly in a C++ project. -- It includes constructors which can take a char, '\0' terminated char - buffer, tagbstring, (char, repeat-value), a length delimited buffer or a +- It includes constructors which can take a char, '\0' terminated char + buffer, tagbstring, (char, repeat-value), a length delimited buffer or a CBStringList to initialize it. -- Concatenation is performed with the + and += operators. Comparisons are +- Concatenation is performed with the + and += operators. Comparisons are done with the ==, !=, <, >, <= and >= operators. Note that == and != use the biseq call, while <, >, <= and >= use bstrcmp. @@ -369,93 +369,93 @@ manifest as thrown exceptions. the format(a) method(s). - CBString contains the length, character and [] accessor methods. The - character and [] accessors are aliases of each other. If the bounds for + character and [] accessors are aliases of each other. If the bounds for the string are exceeded, an exception is thrown. To avoid the overhead for - this check, first cast the CBString to a (const char *) and use [] to - dereference the array as normal. Note that the character and [] accessor + this check, first cast the CBString to a (const char *) and use [] to + dereference the array as normal. Note that the character and [] accessor methods allows both reading and writing of individual characters. -- The methods: format, formata, find, reversefind, findcaseless, - reversefindcaseless, midstr, insert, insertchrs, replace, findreplace, - findreplacecaseless, remove, findchr, nfindchr, alloc, toupper, tolower, +- The methods: format, formata, find, reversefind, findcaseless, + reversefindcaseless, midstr, insert, insertchrs, replace, findreplace, + findreplacecaseless, remove, findchr, nfindchr, alloc, toupper, tolower, gets, read are analogous to the functions that can be found in the C API. - The caselessEqual and caselessCmp methods are analogous to biseqcaseless and bstricmp functions respectively. -- Note that just like the bformat function, the format and formata methods do - not automatically cast CBStrings into char * strings for "%s"-type +- Note that just like the bformat function, the format and formata methods do + not automatically cast CBStrings into char * strings for "%s"-type substitutions: - CBString w("world"); - CBString h("Hello"); - CBString hw; + CBString w("world"); + CBString h("Hello"); + CBString hw; - /* The casts are necessary */ - hw.format ("%s, %s", (const char *)h, (const char *)w); + /* The casts are necessary */ + hw.format ("%s, %s", (const char *)h, (const char *)w); - The methods trunc and repeat have been added instead of using pattern. -- ltrim, rtrim and trim methods have been added. These remove characters - from a given character string set (defaulting to the whitespace characters) +- ltrim, rtrim and trim methods have been added. These remove characters + from a given character string set (defaulting to the whitespace characters) from either the left, right or both ends of the CBString, respectively. -- The method setsubstr is also analogous in functionality to bsetstr, except - that it cannot be passed NULL. Instead the method fill and the fill-style +- The method setsubstr is also analogous in functionality to bsetstr, except + that it cannot be passed NULL. Instead the method fill and the fill-style constructor have been supplied to enable this functionality. -- The writeprotect(), writeallow() and iswriteprotected() methods are - analogous to the bwriteprotect(), bwriteallow() and biswriteprotected() - macros in the C API. Write protection semantics in CBString are stronger - than with the C API in that indexed character assignment is checked for - write protection. However, unlike with the C API, a write protected +- The writeprotect(), writeallow() and iswriteprotected() methods are + analogous to the bwriteprotect(), bwriteallow() and biswriteprotected() + macros in the C API. Write protection semantics in CBString are stronger + than with the C API in that indexed character assignment is checked for + write protection. However, unlike with the C API, a write protected CBString can be destroyed by the destructor. - CBStream is a C++ structure which wraps a struct bStream (its not derived from it, since destruction is slightly different). It is constructed by - passing in a bNread function pointer and a stream parameter cast to void *. - This structure includes methods for detecting eof, setting the buffer - length, reading the whole stream or reading entries line by line or block + passing in a bNread function pointer and a stream parameter cast to void *. + This structure includes methods for detecting eof, setting the buffer + length, reading the whole stream or reading entries line by line or block by block, an unread function, and a peek function. -- If STL is available, the CBStringList structure is derived from a vector of - CBString with various split methods. The split method has been overloaded - to accept either a character or CBString as the second parameter (when the +- If STL is available, the CBStringList structure is derived from a vector of + CBString with various split methods. The split method has been overloaded + to accept either a character or CBString as the second parameter (when the split parameter is a CBString any character in that CBString is used as a - seperator). The splitstr method takes a CBString as a substring seperator. - Joins can be performed via a CBString constructor which takes a + seperator). The splitstr method takes a CBString as a substring seperator. + Joins can be performed via a CBString constructor which takes a CBStringList as a parameter, or just using the CBString::join() method. -- If there is proper support for std::iostreams, then the >> and << operators - and the getline() function have been added (with semantics the same as +- If there is proper support for std::iostreams, then the >> and << operators + and the getline() function have been added (with semantics the same as those for std::string). Multithreading -------------- -A mutable bstring is kind of analogous to a small (two entry) linked list -allocated by malloc, with all aliasing completely under programmer control. -I.e., manipulation of one bstring will never affect any other distinct -bstring unless explicitely constructed to do so by the programmer via hand -construction or via building a reference. Bstrlib also does not use any -static or global storage, so there are no hidden unremovable race conditions. -Bstrings are also clearly not inherently thread local. So just like -char *'s, bstrings can be passed around from thread to thread and shared and -so on, so long as modifications to a bstring correspond to some kind of -exclusive access lock as should be expected (or if the bstring is read-only, -which can be enforced by bstring write protection) for any sort of shared +A mutable bstring is kind of analogous to a small (two entry) linked list +allocated by malloc, with all aliasing completely under programmer control. +I.e., manipulation of one bstring will never affect any other distinct +bstring unless explicitely constructed to do so by the programmer via hand +construction or via building a reference. Bstrlib also does not use any +static or global storage, so there are no hidden unremovable race conditions. +Bstrings are also clearly not inherently thread local. So just like +char *'s, bstrings can be passed around from thread to thread and shared and +so on, so long as modifications to a bstring correspond to some kind of +exclusive access lock as should be expected (or if the bstring is read-only, +which can be enforced by bstring write protection) for any sort of shared object in a multithreaded environment. Bsafe module ------------ For convenience, a bsafe module has been included. The idea is that if this -module is included, inadvertant usage of the most dangerous C functions will -be overridden and lead to an immediate run time abort. Of course, it should -be emphasized that usage of this module is completely optional. The -intention is essentially to provide an option for creating project safety -rules which can be enforced mechanically rather than socially. This is -useful for larger, or open development projects where its more difficult to +module is included, inadvertant usage of the most dangerous C functions will +be overridden and lead to an immediate run time abort. Of course, it should +be emphasized that usage of this module is completely optional. The +intention is essentially to provide an option for creating project safety +rules which can be enforced mechanically rather than socially. This is +useful for larger, or open development projects where its more difficult to enforce social rules or "coding conventions". Problems not solved @@ -465,72 +465,72 @@ Bstrlib is written for the C and C++ languages, which have inherent weaknesses that cannot be easily solved: 1. Memory leaks: Forgetting to call bdestroy on a bstring that is about to be - unreferenced, just as forgetting to call free on a heap buffer that is + unreferenced, just as forgetting to call free on a heap buffer that is about to be dereferenced. Though bstrlib itself is leak free. -2. Read before write usage: In C, declaring an auto bstring does not - automatically fill it with legal/valid contents. This problem has been - somewhat mitigated in C++. (The bstrDeclare and bstrFree macros from +2. Read before write usage: In C, declaring an auto bstring does not + automatically fill it with legal/valid contents. This problem has been + somewhat mitigated in C++. (The bstrDeclare and bstrFree macros from bstraux can be used to help mitigate this problem.) Other problems not addressed: -3. Built-in mutex usage to automatically avoid all bstring internal race - conditions in multitasking environments: The problem with trying to - implement such things at this low a level is that it is typically more - efficient to use locks in higher level primitives. There is also no +3. Built-in mutex usage to automatically avoid all bstring internal race + conditions in multitasking environments: The problem with trying to + implement such things at this low a level is that it is typically more + efficient to use locks in higher level primitives. There is also no platform independent way to implement locks or mutexes. 4. Unicode/widecharacter support. -Note that except for spotty support of wide characters, the default C +Note that except for spotty support of wide characters, the default C standard library does not address any of these problems either. Configurable compilation options -------------------------------- -All configuration options are meant solely for the purpose of compiler +All configuration options are meant solely for the purpose of compiler compatibility. Configuration options are not meant to change the semantics or capabilities of the library, except where it is unavoidable. -Since some C++ compilers don't include the Standard Template Library and some -have the options of disabling exception handling, a number of macros can be +Since some C++ compilers don't include the Standard Template Library and some +have the options of disabling exception handling, a number of macros can be used to conditionally compile support for each of this: BSTRLIB_CAN_USE_STL - - defining this will enable the used of the Standard Template Library. + - defining this will enable the used of the Standard Template Library. Defining BSTRLIB_CAN_USE_STL overrides the BSTRLIB_CANNOT_USE_STL macro. BSTRLIB_CANNOT_USE_STL - - defining this will disable the use of the Standard Template Library. + - defining this will disable the use of the Standard Template Library. Defining BSTRLIB_CAN_USE_STL overrides the BSTRLIB_CANNOT_USE_STL macro. BSTRLIB_CAN_USE_IOSTREAM - - defining this will enable the used of streams from class std. Defining + - defining this will enable the used of streams from class std. Defining BSTRLIB_CAN_USE_IOSTREAM overrides the BSTRLIB_CANNOT_USE_IOSTREAM macro. BSTRLIB_CANNOT_USE_IOSTREAM - - defining this will disable the use of streams from class std. Defining + - defining this will disable the use of streams from class std. Defining BSTRLIB_CAN_USE_IOSTREAM overrides the BSTRLIB_CANNOT_USE_IOSTREAM macro. BSTRLIB_THROWS_EXCEPTIONS - defining this will enable the exception handling within bstring. - Defining BSTRLIB_THROWS_EXCEPTIONS overrides the + Defining BSTRLIB_THROWS_EXCEPTIONS overrides the BSTRLIB_DOESNT_THROWS_EXCEPTIONS macro. BSTRLIB_DOESNT_THROW_EXCEPTIONS - defining this will disable the exception handling within bstring. - Defining BSTRLIB_THROWS_EXCEPTIONS overrides the + Defining BSTRLIB_THROWS_EXCEPTIONS overrides the BSTRLIB_DOESNT_THROW_EXCEPTIONS macro. -Note that these macros must be defined consistently throughout all modules +Note that these macros must be defined consistently throughout all modules that use CBStrings including bstrwrap.cpp. -Some older C compilers do not support functions such as vsnprintf. This is +Some older C compilers do not support functions such as vsnprintf. This is handled by the following macro variables: BSTRLIB_NOVSNP @@ -554,7 +554,7 @@ of the library. These are described below. BSTRLIB_DONT_ASSUME_NAMESPACE - - Defining this before including bstrwrap.h will disable the automatic + - Defining this before including bstrwrap.h will disable the automatic enabling of the Bstrlib namespace for the C++ declarations. BSTRLIB_DONT_USE_VIRTUAL_DESTRUCTOR @@ -566,8 +566,8 @@ BSTRLIB_MEMORY_DEBUG - Defining this will cause the bstrlib modules bstrlib.c and bstrwrap.cpp to invoke a #include "memdbg.h". memdbg.h has to be supplied by the user. -Note that these macros must be defined consistently throughout all modules -that use bstrings or CBStrings including bstrlib.c, bstraux.c and +Note that these macros must be defined consistently throughout all modules +that use bstrings or CBStrings including bstrlib.c, bstraux.c and bstrwrap.cpp. =============================================================================== @@ -590,8 +590,8 @@ bsafe.h - C header file for bsafe.c functions. C projects need only include bstrlib.h and compile/link bstrlib.c to use the bstring library. C++ projects need to additionally include bstrwrap.h and -compile/link bstrwrap.cpp. For both, there may be a need to make choices -about feature configuration as described in the "Configurable compilation +compile/link bstrwrap.cpp. For both, there may be a need to make choices +about feature configuration as described in the "Configurable compilation options" in the section above. Other files that are included in this archive are: @@ -610,52 +610,52 @@ The functions extern bstring bfromcstr (const char * str); Take a standard C library style '\0' terminated char buffer and generate - a bstring with the same contents as the char buffer. If an error occurs + a bstring with the same contents as the char buffer. If an error occurs NULL is returned. So for example: - bstring b = bfromcstr ("Hello"); - if (!b) { - fprintf (stderr, "Out of memory"); - } else { - puts ((char *) b->data); - } + bstring b = bfromcstr ("Hello"); + if (!b) { + fprintf (stderr, "Out of memory"); + } else { + puts ((char *) b->data); + } .......................................................................... extern bstring bfromcstralloc (int mlen, const char * str); - Create a bstring which contains the contents of the '\0' terminated - char * buffer str. The memory buffer backing the bstring is at least + Create a bstring which contains the contents of the '\0' terminated + char * buffer str. The memory buffer backing the bstring is at least mlen characters in length. If an error occurs NULL is returned. So for example: - bstring b = bfromcstralloc (64, someCstr); - if (b) b->data[63] = 'x'; + bstring b = bfromcstralloc (64, someCstr); + if (b) b->data[63] = 'x'; - The idea is that this will set the 64th character of b to 'x' if it is at - least 64 characters long otherwise do nothing. And we know this is well - defined so long as b was successfully created, since it will have been + The idea is that this will set the 64th character of b to 'x' if it is at + least 64 characters long otherwise do nothing. And we know this is well + defined so long as b was successfully created, since it will have been allocated with at least 64 characters. .......................................................................... extern bstring blk2bstr (const void * blk, int len); - Create a bstring whose contents are described by the contiguous buffer + Create a bstring whose contents are described by the contiguous buffer pointing to by blk with a length of len bytes. Note that this function - creates a copy of the data in blk, rather than simply referencing it. + creates a copy of the data in blk, rather than simply referencing it. Compare with the blk2tbstr macro. If an error occurs NULL is returned. .......................................................................... extern char * bstr2cstr (const_bstring s, char z); - Create a '\0' terminated char buffer which contains the contents of the - bstring s, except that any contained '\0' characters are converted to the - character in z. This returned value should be freed with bcstrfree(), by + Create a '\0' terminated char buffer which contains the contents of the + bstring s, except that any contained '\0' characters are converted to the + character in z. This returned value should be freed with bcstrfree(), by the caller. If an error occurs NULL is returned. .......................................................................... @@ -663,158 +663,158 @@ The functions extern int bcstrfree (char * s); Frees a C-string generated by bstr2cstr (). This is normally unnecessary - since it just wraps a call to free (), however, if malloc () and free () - have been redefined as a macros within the bstrlib module (via macros in - the memdbg.h backdoor) with some difference in behaviour from the std - library functions, then this allows a correct way of freeing the memory - that allows higher level code to be independent from these macro + since it just wraps a call to free (), however, if malloc () and free () + have been redefined as a macros within the bstrlib module (via macros in + the memdbg.h backdoor) with some difference in behaviour from the std + library functions, then this allows a correct way of freeing the memory + that allows higher level code to be independent from these macro redefinitions. .......................................................................... extern bstring bstrcpy (const_bstring b1); - Make a copy of the passed in bstring. The copied bstring is returned if + Make a copy of the passed in bstring. The copied bstring is returned if there is no error, otherwise NULL is returned. .......................................................................... extern int bassign (bstring a, const_bstring b); - Overwrite the bstring a with the contents of bstring b. Note that the - bstring a must be a well defined and writable bstring. If an error + Overwrite the bstring a with the contents of bstring b. Note that the + bstring a must be a well defined and writable bstring. If an error occurs BSTR_ERR is returned and a is not overwritten. .......................................................................... int bassigncstr (bstring a, const char * str); - Overwrite the string a with the contents of char * string str. Note that - the bstring a must be a well defined and writable bstring. If an error + Overwrite the string a with the contents of char * string str. Note that + the bstring a must be a well defined and writable bstring. If an error occurs BSTR_ERR is returned and a may be partially overwritten. .......................................................................... int bassignblk (bstring a, const void * s, int len); - Overwrite the string a with the contents of the block (s, len). Note that - the bstring a must be a well defined and writable bstring. If an error + Overwrite the string a with the contents of the block (s, len). Note that + the bstring a must be a well defined and writable bstring. If an error occurs BSTR_ERR is returned and a is not overwritten. .......................................................................... extern int bassignmidstr (bstring a, const_bstring b, int left, int len); - Overwrite the bstring a with the middle of contents of bstring b - starting from position left and running for a length len. left and - len are clamped to the ends of b as with the function bmidstr. Note that - the bstring a must be a well defined and writable bstring. If an error + Overwrite the bstring a with the middle of contents of bstring b + starting from position left and running for a length len. left and + len are clamped to the ends of b as with the function bmidstr. Note that + the bstring a must be a well defined and writable bstring. If an error occurs BSTR_ERR is returned and a is not overwritten. .......................................................................... extern bstring bmidstr (const_bstring b, int left, int len); - Create a bstring which is the substring of b starting from position left - and running for a length len (clamped by the end of the bstring b.) If - there was no error, the value of this constructed bstring is returned + Create a bstring which is the substring of b starting from position left + and running for a length len (clamped by the end of the bstring b.) If + there was no error, the value of this constructed bstring is returned otherwise NULL is returned. .......................................................................... extern int bdelete (bstring s1, int pos, int len); - Removes characters from pos to pos+len-1 and shifts the tail of the - bstring starting from pos+len to pos. len must be positive for this call - to have any effect. The section of the bstring described by (pos, len) - is clamped to boundaries of the bstring b. The value BSTR_OK is returned + Removes characters from pos to pos+len-1 and shifts the tail of the + bstring starting from pos+len to pos. len must be positive for this call + to have any effect. The section of the bstring described by (pos, len) + is clamped to boundaries of the bstring b. The value BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int bconcat (bstring b0, const_bstring b1); - Concatenate the bstring b1 to the end of bstring b0. The value BSTR_OK - is returned if the operation is successful, otherwise BSTR_ERR is + Concatenate the bstring b1 to the end of bstring b0. The value BSTR_OK + is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int bconchar (bstring b, char c); - Concatenate the character c to the end of bstring b. The value BSTR_OK - is returned if the operation is successful, otherwise BSTR_ERR is + Concatenate the character c to the end of bstring b. The value BSTR_OK + is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int bcatcstr (bstring b, const char * s); - Concatenate the char * string s to the end of bstring b. The value - BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is + Concatenate the char * string s to the end of bstring b. The value + BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int bcatblk (bstring b, const void * s, int len); - Concatenate a fixed length buffer (s, len) to the end of bstring b. The - value BSTR_OK is returned if the operation is successful, otherwise + Concatenate a fixed length buffer (s, len) to the end of bstring b. The + value BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int biseq (const_bstring b0, const_bstring b1); - Compare the bstring b0 and b1 for equality. If the bstrings differ, 0 - is returned, if the bstrings are the same, 1 is returned, if there is an - error, -1 is returned. If the length of the bstrings are different, this - function has O(1) complexity. Contained '\0' characters are not treated + Compare the bstring b0 and b1 for equality. If the bstrings differ, 0 + is returned, if the bstrings are the same, 1 is returned, if there is an + error, -1 is returned. If the length of the bstrings are different, this + function has O(1) complexity. Contained '\0' characters are not treated as a termination character. - Note that the semantics of biseq are not completely compatible with + Note that the semantics of biseq are not completely compatible with bstrcmp because of its different treatment of the '\0' character. .......................................................................... extern int bisstemeqblk (const_bstring b, const void * blk, int len); - Compare beginning of bstring b0 with a block of memory of length len for - equality. If the beginning of b0 differs from the memory block (or if b0 - is too short), 0 is returned, if the bstrings are the same, 1 is returned, + Compare beginning of bstring b0 with a block of memory of length len for + equality. If the beginning of b0 differs from the memory block (or if b0 + is too short), 0 is returned, if the bstrings are the same, 1 is returned, if there is an error, -1 is returned. .......................................................................... extern int biseqcaseless (const_bstring b0, const_bstring b1); - Compare two bstrings for equality without differentiating between case. - If the bstrings differ other than in case, 0 is returned, if the bstrings - are the same, 1 is returned, if there is an error, -1 is returned. If - the length of the bstrings are different, this function is O(1). '\0' + Compare two bstrings for equality without differentiating between case. + If the bstrings differ other than in case, 0 is returned, if the bstrings + are the same, 1 is returned, if there is an error, -1 is returned. If + the length of the bstrings are different, this function is O(1). '\0' termination characters are not treated in any special way. .......................................................................... extern int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len); - Compare beginning of bstring b0 with a block of memory of length len + Compare beginning of bstring b0 with a block of memory of length len without differentiating between case for equality. If the beginning of b0 - differs from the memory block other than in case (or if b0 is too short), - 0 is returned, if the bstrings are the same, 1 is returned, if there is an + differs from the memory block other than in case (or if b0 is too short), + 0 is returned, if the bstrings are the same, 1 is returned, if there is an error, -1 is returned. .......................................................................... extern int biseqcstr (const_bstring b, const char *s); - Compare the bstring b and char * bstring s. The C string s must be '\0' - terminated at exactly the length of the bstring b, and the contents - between the two must be identical with the bstring b with no '\0' - characters for the two contents to be considered equal. This is - equivalent to the condition that their current contents will be always be - equal when comparing them in the same format after converting one or the - other. If they are equal 1 is returned, if they are unequal 0 is + Compare the bstring b and char * bstring s. The C string s must be '\0' + terminated at exactly the length of the bstring b, and the contents + between the two must be identical with the bstring b with no '\0' + characters for the two contents to be considered equal. This is + equivalent to the condition that their current contents will be always be + equal when comparing them in the same format after converting one or the + other. If they are equal 1 is returned, if they are unequal 0 is returned and if there is a detectable error BSTR_ERR is returned. .......................................................................... @@ -827,60 +827,60 @@ The functions no '\0' characters for the two contents to be considered equal. This is equivalent to the condition that their current contents will be always be equal ignoring case when comparing them in the same format after - converting one or the other. If they are equal, except for case, 1 is - returned, if they are unequal regardless of case 0 is returned and if + converting one or the other. If they are equal, except for case, 1 is + returned, if they are unequal regardless of case 0 is returned and if there is a detectable error BSTR_ERR is returned. .......................................................................... extern int bstrcmp (const_bstring b0, const_bstring b1); - Compare the bstrings b0 and b1 for ordering. If there is an error, - SHRT_MIN is returned, otherwise a value less than or greater than zero, - indicating that the bstring pointed to by b0 is lexicographically less + Compare the bstrings b0 and b1 for ordering. If there is an error, + SHRT_MIN is returned, otherwise a value less than or greater than zero, + indicating that the bstring pointed to by b0 is lexicographically less than or greater than the bstring pointed to by b1 is returned. If the - bstring lengths are unequal but the characters up until the length of the - shorter are equal then a value less than, or greater than zero, - indicating that the bstring pointed to by b0 is shorter or longer than the - bstring pointed to by b1 is returned. 0 is returned if and only if the - two bstrings are the same. If the length of the bstrings are different, - this function is O(n). Like its standard C library counter part, the - comparison does not proceed past any '\0' termination characters + bstring lengths are unequal but the characters up until the length of the + shorter are equal then a value less than, or greater than zero, + indicating that the bstring pointed to by b0 is shorter or longer than the + bstring pointed to by b1 is returned. 0 is returned if and only if the + two bstrings are the same. If the length of the bstrings are different, + this function is O(n). Like its standard C library counter part, the + comparison does not proceed past any '\0' termination characters encountered. - The seemingly odd error return value, merely provides slightly more - granularity than the undefined situation given in the C library function + The seemingly odd error return value, merely provides slightly more + granularity than the undefined situation given in the C library function strcmp. The function otherwise behaves very much like strcmp(). - Note that the semantics of bstrcmp are not completely compatible with - biseq because of its different treatment of the '\0' termination + Note that the semantics of bstrcmp are not completely compatible with + biseq because of its different treatment of the '\0' termination character. .......................................................................... extern int bstrncmp (const_bstring b0, const_bstring b1, int n); - Compare the bstrings b0 and b1 for ordering for at most n characters. If - there is an error, SHRT_MIN is returned, otherwise a value is returned as - if b0 and b1 were first truncated to at most n characters then bstrcmp - was called with these new bstrings are paremeters. If the length of the - bstrings are different, this function is O(n). Like its standard C - library counter part, the comparison does not proceed past any '\0' + Compare the bstrings b0 and b1 for ordering for at most n characters. If + there is an error, SHRT_MIN is returned, otherwise a value is returned as + if b0 and b1 were first truncated to at most n characters then bstrcmp + was called with these new bstrings are paremeters. If the length of the + bstrings are different, this function is O(n). Like its standard C + library counter part, the comparison does not proceed past any '\0' termination characters encountered. - The seemingly odd error return value, merely provides slightly more - granularity than the undefined situation given in the C library function + The seemingly odd error return value, merely provides slightly more + granularity than the undefined situation given in the C library function strncmp. The function otherwise behaves very much like strncmp(). .......................................................................... extern int bstricmp (const_bstring b0, const_bstring b1); - Compare two bstrings without differentiating between case. The return - value is the difference of the values of the characters where the two - bstrings first differ, otherwise 0 is returned indicating that the - bstrings are equal. If the lengths are different, then a difference from - 0 is given, but if the first extra character is '\0', then it is taken to + Compare two bstrings without differentiating between case. The return + value is the difference of the values of the characters where the two + bstrings first differ, otherwise 0 is returned indicating that the + bstrings are equal. If the lengths are different, then a difference from + 0 is given, but if the first extra character is '\0', then it is taken to be the value UCHAR_MAX+1. .......................................................................... @@ -891,26 +891,26 @@ The functions characters. If the position where the two bstrings first differ is before the nth position, the return value is the difference of the values of the characters, otherwise 0 is returned. If the lengths are different - and less than n characters, then a difference from 0 is given, but if the - first extra character is '\0', then it is taken to be the value + and less than n characters, then a difference from 0 is given, but if the + first extra character is '\0', then it is taken to be the value UCHAR_MAX+1. .......................................................................... extern int bdestroy (bstring b); - Deallocate the bstring passed. Passing NULL in as a parameter will have - no effect. Note that both the header and the data portion of the bstring - will be freed. No other bstring function which modifies one of its - parameters will free or reallocate the header. Because of this, in - general, bdestroy cannot be called on any declared struct tagbstring even - if it is not write protected. A bstring which is write protected cannot - be destroyed via the bdestroy call. Any attempt to do so will result in + Deallocate the bstring passed. Passing NULL in as a parameter will have + no effect. Note that both the header and the data portion of the bstring + will be freed. No other bstring function which modifies one of its + parameters will free or reallocate the header. Because of this, in + general, bdestroy cannot be called on any declared struct tagbstring even + if it is not write protected. A bstring which is write protected cannot + be destroyed via the bdestroy call. Any attempt to do so will result in no action taken, and BSTR_ERR will be returned. Note to C++ users: Passing in a CBString cast to a bstring will lead to undefined behavior (free will be called on the header, rather than the - CBString destructor.) Instead just use the ordinary C++ language + CBString destructor.) Instead just use the ordinary C++ language facilities to dealloc a CBString. .......................................................................... @@ -918,8 +918,8 @@ The functions extern int binstr (const_bstring s1, int pos, const_bstring s2); Search for the bstring s2 in s1 starting at position pos and looking in a - forward (increasing) direction. If it is found then it returns with the - first position after pos where it is found, otherwise it returns BSTR_ERR. + forward (increasing) direction. If it is found then it returns with the + first position after pos where it is found, otherwise it returns BSTR_ERR. The algorithm used is brute force; O(m*n). .......................................................................... @@ -927,11 +927,11 @@ The functions extern int binstrr (const_bstring s1, int pos, const_bstring s2); Search for the bstring s2 in s1 starting at position pos and looking in a - backward (decreasing) direction. If it is found then it returns with the - first position after pos where it is found, otherwise return BSTR_ERR. - Note that the current position at pos is tested as well -- so to be - disjoint from a previous forward search it is recommended that the - position be backed up (decremented) by one position. The algorithm used + backward (decreasing) direction. If it is found then it returns with the + first position after pos where it is found, otherwise return BSTR_ERR. + Note that the current position at pos is tested as well -- so to be + disjoint from a previous forward search it is recommended that the + position be backed up (decremented) by one position. The algorithm used is brute force; O(m*n). .......................................................................... @@ -939,9 +939,9 @@ The functions extern int binstrcaseless (const_bstring s1, int pos, const_bstring s2); Search for the bstring s2 in s1 starting at position pos and looking in a - forward (increasing) direction but without regard to case. If it is - found then it returns with the first position after pos where it is - found, otherwise it returns BSTR_ERR. The algorithm used is brute force; + forward (increasing) direction but without regard to case. If it is + found then it returns with the first position after pos where it is + found, otherwise it returns BSTR_ERR. The algorithm used is brute force; O(m*n). .......................................................................... @@ -949,55 +949,55 @@ The functions extern int binstrrcaseless (const_bstring s1, int pos, const_bstring s2); Search for the bstring s2 in s1 starting at position pos and looking in a - backward (decreasing) direction but without regard to case. If it is - found then it returns with the first position after pos where it is - found, otherwise return BSTR_ERR. Note that the current position at pos - is tested as well -- so to be disjoint from a previous forward search it - is recommended that the position be backed up (decremented) by one + backward (decreasing) direction but without regard to case. If it is + found then it returns with the first position after pos where it is + found, otherwise return BSTR_ERR. Note that the current position at pos + is tested as well -- so to be disjoint from a previous forward search it + is recommended that the position be backed up (decremented) by one position. The algorithm used is brute force; O(m*n). .......................................................................... extern int binchr (const_bstring b0, int pos, const_bstring b1); - Search for the first position in b0 starting from pos or after, in which - one of the characters in b1 is found. This function has an execution - time of O(b0->slen + b1->slen). If such a position does not exist in b0, + Search for the first position in b0 starting from pos or after, in which + one of the characters in b1 is found. This function has an execution + time of O(b0->slen + b1->slen). If such a position does not exist in b0, then BSTR_ERR is returned. .......................................................................... extern int binchrr (const_bstring b0, int pos, const_bstring b1); - Search for the last position in b0 no greater than pos, in which one of + Search for the last position in b0 no greater than pos, in which one of the characters in b1 is found. This function has an execution time - of O(b0->slen + b1->slen). If such a position does not exist in b0, + of O(b0->slen + b1->slen). If such a position does not exist in b0, then BSTR_ERR is returned. .......................................................................... extern int bninchr (const_bstring b0, int pos, const_bstring b1); - Search for the first position in b0 starting from pos or after, in which - none of the characters in b1 is found and return it. This function has - an execution time of O(b0->slen + b1->slen). If such a position does + Search for the first position in b0 starting from pos or after, in which + none of the characters in b1 is found and return it. This function has + an execution time of O(b0->slen + b1->slen). If such a position does not exist in b0, then BSTR_ERR is returned. .......................................................................... extern int bninchrr (const_bstring b0, int pos, const_bstring b1); - - Search for the last position in b0 no greater than pos, in which none of - the characters in b1 is found and return it. This function has an - execution time of O(b0->slen + b1->slen). If such a position does not + + Search for the last position in b0 no greater than pos, in which none of + the characters in b1 is found and return it. This function has an + execution time of O(b0->slen + b1->slen). If such a position does not exist in b0, then BSTR_ERR is returned. .......................................................................... extern int bstrchr (const_bstring b, int c); - Search for the character c in the bstring b forwards from the start of - the bstring. Returns the position of the found character or BSTR_ERR if + Search for the character c in the bstring b forwards from the start of + the bstring. Returns the position of the found character or BSTR_ERR if it is not found. NOTE: This has been implemented as a macro on top of bstrchrp (). @@ -1006,8 +1006,8 @@ The functions extern int bstrrchr (const_bstring b, int c); - Search for the character c in the bstring b backwards from the end of the - bstring. Returns the position of the found character or BSTR_ERR if it is + Search for the character c in the bstring b backwards from the end of the + bstring. Returns the position of the found character or BSTR_ERR if it is not found. NOTE: This has been implemented as a macro on top of bstrrchrp (). @@ -1015,57 +1015,57 @@ The functions .......................................................................... extern int bstrchrp (const_bstring b, int c, int pos); - - Search for the character c in b forwards from the position pos - (inclusive). Returns the position of the found character or BSTR_ERR if + + Search for the character c in b forwards from the position pos + (inclusive). Returns the position of the found character or BSTR_ERR if it is not found. .......................................................................... extern int bstrrchrp (const_bstring b, int c, int pos); - Search for the character c in b backwards from the position pos in bstring - (inclusive). Returns the position of the found character or BSTR_ERR if + Search for the character c in b backwards from the position pos in bstring + (inclusive). Returns the position of the found character or BSTR_ERR if it is not found. .......................................................................... extern int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill); - Overwrite the bstring b0 starting at position pos with the bstring b1. If - the position pos is past the end of b0, then the character "fill" is + Overwrite the bstring b0 starting at position pos with the bstring b1. If + the position pos is past the end of b0, then the character "fill" is appended as necessary to make up the gap between the end of b0 and pos. - If b1 is NULL, it behaves as if it were a 0-length bstring. The value - BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is + If b1 is NULL, it behaves as if it were a 0-length bstring. The value + BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int binsert (bstring s1, int pos, const_bstring s2, unsigned char fill); - Inserts the bstring s2 into s1 at position pos. If the position pos is - past the end of s1, then the character "fill" is appended as necessary to - make up the gap between the end of s1 and pos. The value BSTR_OK is + Inserts the bstring s2 into s1 at position pos. If the position pos is + past the end of s1, then the character "fill" is appended as necessary to + make up the gap between the end of s1 and pos. The value BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... extern int binsertch (bstring s1, int pos, int len, unsigned char fill); - Inserts the character fill repeatedly into s1 at position pos for a - length len. If the position pos is past the end of s1, then the - character "fill" is appended as necessary to make up the gap between the - end of s1 and the position pos + len (exclusive). The value BSTR_OK is + Inserts the character fill repeatedly into s1 at position pos for a + length len. If the position pos is past the end of s1, then the + character "fill" is appended as necessary to make up the gap between the + end of s1 and the position pos + len (exclusive). The value BSTR_OK is returned if the operation is successful, otherwise BSTR_ERR is returned. .......................................................................... - extern int breplace (bstring b1, int pos, int len, const_bstring b2, + extern int breplace (bstring b1, int pos, int len, const_bstring b2, unsigned char fill); - Replace a section of a bstring from pos for a length len with the bstring + Replace a section of a bstring from pos for a length len with the bstring b2. If the position pos is past the end of b1 then the character "fill" - is appended as necessary to make up the gap between the end of b1 and + is appended as necessary to make up the gap between the end of b1 and pos. .......................................................................... @@ -1073,9 +1073,9 @@ The functions extern int bfindreplace (bstring b, const_bstring find, const_bstring replace, int position); - Replace all occurrences of the find substring with a replace bstring - after a given position in the bstring b. The find bstring must have a - length > 0 otherwise BSTR_ERR is returned. This function does not + Replace all occurrences of the find substring with a replace bstring + after a given position in the bstring b. The find bstring must have a + length > 0 otherwise BSTR_ERR is returned. This function does not perform recursive per character replacement; that is to say successive searches resume at the position after the last replace. @@ -1086,8 +1086,8 @@ The functions Should result in changing a0 to "aaaabaaAb". - This function performs exactly (b->slen - position) bstring comparisons, - and data movement is bounded above by character volume equivalent to size + This function performs exactly (b->slen - position) bstring comparisons, + and data movement is bounded above by character volume equivalent to size of the output bstring. .......................................................................... @@ -1095,10 +1095,10 @@ The functions extern int bfindreplacecaseless (bstring b, const_bstring find, const_bstring replace, int position); - Replace all occurrences of the find substring, ignoring case, with a - replace bstring after a given position in the bstring b. The find bstring - must have a length > 0 otherwise BSTR_ERR is returned. This function - does not perform recursive per character replacement; that is to say + Replace all occurrences of the find substring, ignoring case, with a + replace bstring after a given position in the bstring b. The find bstring + must have a length > 0 otherwise BSTR_ERR is returned. This function + does not perform recursive per character replacement; that is to say successive searches resume at the position after the last replace. So for example: @@ -1108,8 +1108,8 @@ The functions Should result in changing a0 to "aaaabaaaab". - This function performs exactly (b->slen - position) bstring comparisons, - and data movement is bounded above by character volume equivalent to size + This function performs exactly (b->slen - position) bstring comparisons, + and data movement is bounded above by character volume equivalent to size of the output bstring. .......................................................................... @@ -1118,9 +1118,9 @@ The functions Increase the allocated memory backing the data buffer for the bstring b to a length of at least length. If the memory backing the bstring b is - already large enough, not action is performed. This has no effect on the - bstring b that is visible to the bstring API. Usually this function will - only be used when a minimum buffer size is required coupled with a direct + already large enough, not action is performed. This has no effect on the + bstring b that is visible to the bstring API. Usually this function will + only be used when a minimum buffer size is required coupled with a direct access to the ->data member of the bstring structure. Be warned that like any other bstring function, the bstring must be well @@ -1134,91 +1134,91 @@ The functions int t; if (BSTR_OK == balloc (b, t = (b->slen * 2))) b->slen = t; - This function will return with BSTR_ERR if b is not detected as a valid + This function will return with BSTR_ERR if b is not detected as a valid bstring or length is not greater than 0, otherwise BSTR_OK is returned. .......................................................................... extern int ballocmin (bstring b, int length); - Change the amount of memory backing the bstring b to at least length. - This operation will never truncate the bstring data including the + Change the amount of memory backing the bstring b to at least length. + This operation will never truncate the bstring data including the extra terminating '\0' and thus will not decrease the length to less than - b->slen + 1. Note that repeated use of this function may cause + b->slen + 1. Note that repeated use of this function may cause performance problems (realloc may be called on the bstring more than - the O(log(INT_MAX)) times). This function will return with BSTR_ERR if b - is not detected as a valid bstring or length is not greater than 0, + the O(log(INT_MAX)) times). This function will return with BSTR_ERR if b + is not detected as a valid bstring or length is not greater than 0, otherwise BSTR_OK is returned. So for example: - if (BSTR_OK == ballocmin (b, 64)) b->data[63] = 'x'; + if (BSTR_OK == ballocmin (b, 64)) b->data[63] = 'x'; - The idea is that this will set the 64th character of b to 'x' if it is at - least 64 characters long otherwise do nothing. And we know this is well - defined so long as the ballocmin call was successfully, since it will + The idea is that this will set the 64th character of b to 'x' if it is at + least 64 characters long otherwise do nothing. And we know this is well + defined so long as the ballocmin call was successfully, since it will ensure that b has been allocated with at least 64 characters. .......................................................................... int btrunc (bstring b, int n); - Truncate the bstring to at most n characters. This function will return - with BSTR_ERR if b is not detected as a valid bstring or n is less than + Truncate the bstring to at most n characters. This function will return + with BSTR_ERR if b is not detected as a valid bstring or n is less than 0, otherwise BSTR_OK is returned. .......................................................................... extern int bpattern (bstring b, int len); - Replicate the starting bstring, b, end to end repeatedly until it - surpasses len characters, then chop the result to exactly len characters. - This function operates in-place. This function will return with BSTR_ERR + Replicate the starting bstring, b, end to end repeatedly until it + surpasses len characters, then chop the result to exactly len characters. + This function operates in-place. This function will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK is returned. .......................................................................... extern int btoupper (bstring b); - Convert contents of bstring to upper case. This function will return with + Convert contents of bstring to upper case. This function will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK is returned. .......................................................................... extern int btolower (bstring b); - Convert contents of bstring to lower case. This function will return with + Convert contents of bstring to lower case. This function will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK is returned. .......................................................................... extern int bltrimws (bstring b); - Delete whitespace contiguous from the left end of the bstring. This - function will return with BSTR_ERR if b is NULL or of length 0, otherwise + Delete whitespace contiguous from the left end of the bstring. This + function will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK is returned. .......................................................................... extern int brtrimws (bstring b); - Delete whitespace contiguous from the right end of the bstring. This - function will return with BSTR_ERR if b is NULL or of length 0, otherwise + Delete whitespace contiguous from the right end of the bstring. This + function will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK is returned. .......................................................................... extern int btrimws (bstring b); - Delete whitespace contiguous from both ends of the bstring. This function - will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK + Delete whitespace contiguous from both ends of the bstring. This function + will return with BSTR_ERR if b is NULL or of length 0, otherwise BSTR_OK is returned. .......................................................................... extern int bstrListCreate (void); - Create an empty struct bstrList. The struct bstrList output structure is + Create an empty struct bstrList. The struct bstrList output structure is declared as follows: struct bstrList { @@ -1230,11 +1230,11 @@ The functions record counts the maximum number of bstring's for which there is memory in the entry record. - The Bstrlib API does *NOT* include a comprehensive set of functions for - full management of struct bstrList in an abstracted way. The reason for - this is because aliasing semantics of the list are best left to the user - of this function, and performance varies wildly depending on the - assumptions made. For a complete list of bstring data type it is + The Bstrlib API does *NOT* include a comprehensive set of functions for + full management of struct bstrList in an abstracted way. The reason for + this is because aliasing semantics of the list are best left to the user + of this function, and performance varies wildly depending on the + assumptions made. For a complete list of bstring data type it is recommended that the C++ public std::vector be used, since its semantics are usage are more standard. @@ -1242,7 +1242,7 @@ The functions extern int bstrListDestroy (struct bstrList * sl); - Destroy a struct bstrList structure that was returned by the bsplit + Destroy a struct bstrList structure that was returned by the bsplit function. Note that this will destroy each bstring in the ->entry array as well. See bstrListCreate() above for structure of struct bstrList. @@ -1264,62 +1264,62 @@ The functions extern struct bstrList * bsplit (bstring str, unsigned char splitChar); - Create an array of sequential substrings from str divided by the - character splitChar. Successive occurrences of the splitChar will be - divided by empty bstring entries, following the semantics from the Python - programming language. To reclaim the memory from this output structure, - bstrListDestroy () should be called. See bstrListCreate() above for + Create an array of sequential substrings from str divided by the + character splitChar. Successive occurrences of the splitChar will be + divided by empty bstring entries, following the semantics from the Python + programming language. To reclaim the memory from this output structure, + bstrListDestroy () should be called. See bstrListCreate() above for structure of struct bstrList. .......................................................................... extern struct bstrList * bsplits (bstring str, const_bstring splitStr); - Create an array of sequential substrings from str divided by any - character contained in splitStr. An empty splitStr causes a single entry - bstrList containing a copy of str to be returned. See bstrListCreate() + Create an array of sequential substrings from str divided by any + character contained in splitStr. An empty splitStr causes a single entry + bstrList containing a copy of str to be returned. See bstrListCreate() above for structure of struct bstrList. .......................................................................... extern struct bstrList * bsplitstr (bstring str, const_bstring splitStr); - Create an array of sequential substrings from str divided by the entire - substring splitStr. An empty splitStr causes a single entry bstrList - containing a copy of str to be returned. See bstrListCreate() above for + Create an array of sequential substrings from str divided by the entire + substring splitStr. An empty splitStr causes a single entry bstrList + containing a copy of str to be returned. See bstrListCreate() above for structure of struct bstrList. .......................................................................... extern bstring bjoin (const struct bstrList * bl, const_bstring sep); - Join the entries of a bstrList into one bstring by sequentially + Join the entries of a bstrList into one bstring by sequentially concatenating them with the sep bstring in between. If sep is NULL, it is treated as if it were the empty bstring. Note that: bjoin (l = bsplit (b, s->data[0]), s); - should result in a copy of b, if s->slen is 1. If there is an error NULL - is returned, otherwise a bstring with the correct result is returned. + should result in a copy of b, if s->slen is 1. If there is an error NULL + is returned, otherwise a bstring with the correct result is returned. See bstrListCreate() above for structure of struct bstrList. .......................................................................... extern int bsplitcb (const_bstring str, unsigned char splitChar, int pos, - int (* cb) (void * parm, int ofs, int len), void * parm); + int (* cb) (void * parm, int ofs, int len), void * parm); - Iterate the set of disjoint sequential substrings over str starting at - position pos divided by the character splitChar. The parm passed to - bsplitcb is passed on to cb. If the function cb returns a value < 0, + Iterate the set of disjoint sequential substrings over str starting at + position pos divided by the character splitChar. The parm passed to + bsplitcb is passed on to cb. If the function cb returns a value < 0, then further iterating is halted and this value is returned by bsplitcb. - Note: Non-destructive modification of str from within the cb function - while performing this split is not undefined. bsplitcb behaves in - sequential lock step with calls to cb. I.e., after returning from a cb - that return a non-negative integer, bsplitcb continues from the position - 1 character after the last detected split character and it will halt - immediately if the length of str falls below this point. However, if the - cb function destroys str, then it *must* return with a negative value, + Note: Non-destructive modification of str from within the cb function + while performing this split is not undefined. bsplitcb behaves in + sequential lock step with calls to cb. I.e., after returning from a cb + that return a non-negative integer, bsplitcb continues from the position + 1 character after the last detected split character and it will halt + immediately if the length of str falls below this point. However, if the + cb function destroys str, then it *must* return with a negative value, otherwise bsplitcb will continue in an undefined manner. This function is provided as an incremental alternative to bsplit that is @@ -1328,162 +1328,162 @@ The functions .......................................................................... extern int bsplitscb (const_bstring str, const_bstring splitStr, int pos, - int (* cb) (void * parm, int ofs, int len), void * parm); + int (* cb) (void * parm, int ofs, int len), void * parm); - Iterate the set of disjoint sequential substrings over str starting at - position pos divided by any of the characters in splitStr. An empty - splitStr causes the whole str to be iterated once. The parm passed to - bsplitcb is passed on to cb. If the function cb returns a value < 0, + Iterate the set of disjoint sequential substrings over str starting at + position pos divided by any of the characters in splitStr. An empty + splitStr causes the whole str to be iterated once. The parm passed to + bsplitcb is passed on to cb. If the function cb returns a value < 0, then further iterating is halted and this value is returned by bsplitcb. - Note: Non-destructive modification of str from within the cb function - while performing this split is not undefined. bsplitscb behaves in - sequential lock step with calls to cb. I.e., after returning from a cb - that return a non-negative integer, bsplitscb continues from the position - 1 character after the last detected split character and it will halt - immediately if the length of str falls below this point. However, if the - cb function destroys str, then it *must* return with a negative value, + Note: Non-destructive modification of str from within the cb function + while performing this split is not undefined. bsplitscb behaves in + sequential lock step with calls to cb. I.e., after returning from a cb + that return a non-negative integer, bsplitscb continues from the position + 1 character after the last detected split character and it will halt + immediately if the length of str falls below this point. However, if the + cb function destroys str, then it *must* return with a negative value, otherwise bsplitscb will continue in an undefined manner. - This function is provided as an incremental alternative to bsplits that + This function is provided as an incremental alternative to bsplits that is abortable and which does not impose additional memory allocation. .......................................................................... extern int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, - int (* cb) (void * parm, int ofs, int len), void * parm); + int (* cb) (void * parm, int ofs, int len), void * parm); - Iterate the set of disjoint sequential substrings over str starting at - position pos divided by the entire substring splitStr. An empty splitStr - causes each character of str to be iterated. The parm passed to bsplitcb - is passed on to cb. If the function cb returns a value < 0, then further + Iterate the set of disjoint sequential substrings over str starting at + position pos divided by the entire substring splitStr. An empty splitStr + causes each character of str to be iterated. The parm passed to bsplitcb + is passed on to cb. If the function cb returns a value < 0, then further iterating is halted and this value is returned by bsplitcb. - Note: Non-destructive modification of str from within the cb function - while performing this split is not undefined. bsplitstrcb behaves in - sequential lock step with calls to cb. I.e., after returning from a cb - that return a non-negative integer, bsplitstrcb continues from the position - 1 character after the last detected split character and it will halt - immediately if the length of str falls below this point. However, if the - cb function destroys str, then it *must* return with a negative value, + Note: Non-destructive modification of str from within the cb function + while performing this split is not undefined. bsplitstrcb behaves in + sequential lock step with calls to cb. I.e., after returning from a cb + that return a non-negative integer, bsplitstrcb continues from the position + 1 character after the last detected split character and it will halt + immediately if the length of str falls below this point. However, if the + cb function destroys str, then it *must* return with a negative value, otherwise bsplitscb will continue in an undefined manner. - This function is provided as an incremental alternative to bsplitstr that + This function is provided as an incremental alternative to bsplitstr that is abortable and which does not impose additional memory allocation. .......................................................................... extern bstring bformat (const char * fmt, ...); - Takes the same parameters as printf (), but rather than outputting - results to stdio, it forms a bstring which contains what would have been - output. Note that if there is an early generation of a '\0' character, + Takes the same parameters as printf (), but rather than outputting + results to stdio, it forms a bstring which contains what would have been + output. Note that if there is an early generation of a '\0' character, the bstring will be truncated to this end point. - Note that %s format tokens correspond to '\0' terminated char * buffers, - not bstrings. To print a bstring, first dereference data element of the + Note that %s format tokens correspond to '\0' terminated char * buffers, + not bstrings. To print a bstring, first dereference data element of the the bstring: - /* b1->data needs to be '\0' terminated, so tagbstrings generated + /* b1->data needs to be '\0' terminated, so tagbstrings generated by blk2tbstr () might not be suitable. */ b0 = bformat ("Hello, %s", b1->data); - Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been + Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been compiled the bformat function is not present. .......................................................................... extern int bformata (bstring b, const char * fmt, ...); - In addition to the initial output buffer b, bformata takes the same - parameters as printf (), but rather than outputting results to stdio, it - appends the results to the initial bstring parameter. Note that if - there is an early generation of a '\0' character, the bstring will be + In addition to the initial output buffer b, bformata takes the same + parameters as printf (), but rather than outputting results to stdio, it + appends the results to the initial bstring parameter. Note that if + there is an early generation of a '\0' character, the bstring will be truncated to this end point. - Note that %s format tokens correspond to '\0' terminated char * buffers, - not bstrings. To print a bstring, first dereference data element of the + Note that %s format tokens correspond to '\0' terminated char * buffers, + not bstrings. To print a bstring, first dereference data element of the the bstring: - /* b1->data needs to be '\0' terminated, so tagbstrings generated + /* b1->data needs to be '\0' terminated, so tagbstrings generated by blk2tbstr () might not be suitable. */ - bformata (b0 = bfromcstr ("Hello"), ", %s", b1->data); + bformata (b0 = bfromcstr ("Hello"), ", %s", b1->data); - Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been + Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been compiled the bformata function is not present. .......................................................................... extern int bassignformat (bstring b, const char * fmt, ...); - After the first parameter, it takes the same parameters as printf (), but - rather than outputting results to stdio, it outputs the results to - the bstring parameter b. Note that if there is an early generation of a + After the first parameter, it takes the same parameters as printf (), but + rather than outputting results to stdio, it outputs the results to + the bstring parameter b. Note that if there is an early generation of a '\0' character, the bstring will be truncated to this end point. - Note that %s format tokens correspond to '\0' terminated char * buffers, - not bstrings. To print a bstring, first dereference data element of the + Note that %s format tokens correspond to '\0' terminated char * buffers, + not bstrings. To print a bstring, first dereference data element of the the bstring: - /* b1->data needs to be '\0' terminated, so tagbstrings generated + /* b1->data needs to be '\0' terminated, so tagbstrings generated by blk2tbstr () might not be suitable. */ - bassignformat (b0 = bfromcstr ("Hello"), ", %s", b1->data); + bassignformat (b0 = bfromcstr ("Hello"), ", %s", b1->data); - Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been + Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been compiled the bassignformat function is not present. .......................................................................... extern int bvcformata (bstring b, int count, const char * fmt, va_list arglist); - The bvcformata function formats data under control of the format control - string fmt and attempts to append the result to b. The fmt parameter is - the same as that of the printf function. The variable argument list is + The bvcformata function formats data under control of the format control + string fmt and attempts to append the result to b. The fmt parameter is + the same as that of the printf function. The variable argument list is replaced with arglist, which has been initialized by the va_start macro. The size of the output is upper bounded by count. If the required output exceeds count, the string b is not augmented with any contents and a value below BSTR_ERR is returned. If a value below -count is returned then it is recommended that the negative of this value be used as an update to the - count in a subsequent pass. On other errors, such as running out of - memory, parameter errors or numeric wrap around BSTR_ERR is returned. - BSTR_OK is returned when the output is successfully generated and + count in a subsequent pass. On other errors, such as running out of + memory, parameter errors or numeric wrap around BSTR_ERR is returned. + BSTR_OK is returned when the output is successfully generated and appended to b. Note: There is no sanity checking of arglist, and this function is - destructive of the contents of b from the b->slen point onward. If there - is an early generation of a '\0' character, the bstring will be truncated + destructive of the contents of b from the b->slen point onward. If there + is an early generation of a '\0' character, the bstring will be truncated to this end point. - Although this function is part of the external API for Bstrlib, the - interface and semantics (length limitations, and unusual return codes) - are fairly atypical. The real purpose for this function is to provide an + Although this function is part of the external API for Bstrlib, the + interface and semantics (length limitations, and unusual return codes) + are fairly atypical. The real purpose for this function is to provide an engine for the bvformata macro. - Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been + Note that if the BSTRLIB_NOVSNP macro has been set when bstrlib has been compiled the bvcformata function is not present. .......................................................................... extern bstring bread (bNread readPtr, void * parm); - typedef size_t (* bNread) (void *buff, size_t elsize, size_t nelem, + typedef size_t (* bNread) (void *buff, size_t elsize, size_t nelem, void *parm); - Read an entire stream into a bstring, verbatum. The readPtr function - pointer is compatible with fread sematics, except that it need not obtain - the stream data from a file. The intention is that parm would contain - the stream data context/state required (similar to the role of the FILE* + Read an entire stream into a bstring, verbatum. The readPtr function + pointer is compatible with fread sematics, except that it need not obtain + the stream data from a file. The intention is that parm would contain + the stream data context/state required (similar to the role of the FILE* I/O stream parameter of fread.) - Abstracting the block read function allows for block devices other than - file streams to be read if desired. Note that there is an ANSI - compatibility issue if "fread" is used directly; see the ANSI issues + Abstracting the block read function allows for block devices other than + file streams to be read if desired. Note that there is an ANSI + compatibility issue if "fread" is used directly; see the ANSI issues section below. .......................................................................... extern int breada (bstring b, bNread readPtr, void * parm); - Read an entire stream and append it to a bstring, verbatum. Behaves + Read an entire stream and append it to a bstring, verbatum. Behaves like bread, except that it appends it results to the bstring b. BSTR_ERR is returned on error, otherwise 0 is returned. @@ -1495,22 +1495,22 @@ The functions Read a bstring from a stream. As many bytes as is necessary are read until the terminator is consumed or no more characters are available from the stream. If read from the stream, the terminator character will be - appended to the end of the returned bstring. The getcPtr function must - have the same semantics as the fgetc C library function (i.e., returning - an integer whose value is negative when there are no more characters - available, otherwise the value of the next available unsigned character - from the stream.) The intention is that parm would contain the stream - data context/state required (similar to the role of the FILE* I/O stream - parameter of fgets.) If no characters are read, or there is some other + appended to the end of the returned bstring. The getcPtr function must + have the same semantics as the fgetc C library function (i.e., returning + an integer whose value is negative when there are no more characters + available, otherwise the value of the next available unsigned character + from the stream.) The intention is that parm would contain the stream + data context/state required (similar to the role of the FILE* I/O stream + parameter of fgets.) If no characters are read, or there is some other detectable error, NULL is returned. bgets will never call the getcPtr function more often than necessary to - construct its output (including a single call, if required, to determine + construct its output (including a single call, if required, to determine that the stream contains no more characters.) Abstracting the character stream function and terminator character allows - for different stream devices and string formats other than '\n' - terminated lines in a file if desired (consider \032 terminated email + for different stream devices and string formats other than '\n' + terminated lines in a file if desired (consider \032 terminated email messages, in a UNIX mailbox for example.) For files, this function can be used analogously as fgets as follows: @@ -1518,16 +1518,16 @@ The functions fp = fopen ( ... ); if (fp) b = bgets ((bNgetc) fgetc, fp, '\n'); - (Note that only one terminator character can be used, and that '\0' is - not assumed to terminate the stream in addition to the terminator + (Note that only one terminator character can be used, and that '\0' is + not assumed to terminate the stream in addition to the terminator character. This is consistent with the semantics of fgets.) .......................................................................... extern int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator); - Read from a stream and concatenate to a bstring. Behaves like bgets, - except that it appends it results to the bstring b. The value 1 is + Read from a stream and concatenate to a bstring. Behaves like bgets, + except that it appends it results to the bstring b. The value 1 is returned if no characters are read before a negative result is returned from getcPtr. Otherwise BSTR_ERR is returned on error, and 0 is returned in other normal cases. @@ -1536,8 +1536,8 @@ The functions extern int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator); - Read from a stream and concatenate to a bstring. Behaves like bgets, - except that it assigns the results to the bstring b. The value 1 is + Read from a stream and concatenate to a bstring. Behaves like bgets, + except that it assigns the results to the bstring b. The value 1 is returned if no characters are read before a negative result is returned from getcPtr. Otherwise BSTR_ERR is returned on error, and 0 is returned in other normal cases. @@ -1545,17 +1545,17 @@ The functions .......................................................................... extern struct bStream * bsopen (bNread readPtr, void * parm); - - Wrap a given open stream (described by a fread compatible function - pointer and stream handle) into an open bStream suitable for the bstring + + Wrap a given open stream (described by a fread compatible function + pointer and stream handle) into an open bStream suitable for the bstring library streaming functions. - + .......................................................................... extern void * bsclose (struct bStream * s); - - Close the bStream, and return the handle to the stream that was - originally used to open the given stream. If s is NULL or detectably + + Close the bStream, and return the handle to the stream that was + originally used to open the given stream. If s is NULL or detectably invalid, NULL will be returned. .......................................................................... @@ -1563,159 +1563,159 @@ The functions extern int bsbufflength (struct bStream * s, int sz); Set the length of the buffer used by the bStream. If sz is the macro - BSTR_BS_BUFF_LENGTH_GET (which is 0), the length is not set. If s is - NULL or sz is negative, the function will return with BSTR_ERR, otherwise + BSTR_BS_BUFF_LENGTH_GET (which is 0), the length is not set. If s is + NULL or sz is negative, the function will return with BSTR_ERR, otherwise this function returns with the previous length. .......................................................................... extern int bsreadln (bstring r, struct bStream * s, char terminator); - + Read a bstring terminated by the terminator character or the end of the - stream from the bStream (s) and return it into the parameter r. The + stream from the bStream (s) and return it into the parameter r. The matched terminator, if found, appears at the end of the line read. If the stream has been exhausted of all available data, before any can be - read, BSTR_ERR is returned. This function may read additional characters - into the stream buffer from the core stream that are not returned, but - will be retained for subsequent read operations. When reading from high + read, BSTR_ERR is returned. This function may read additional characters + into the stream buffer from the core stream that are not returned, but + will be retained for subsequent read operations. When reading from high speed streams, this function can perform significantly faster than bgets. .......................................................................... extern int bsreadlna (bstring r, struct bStream * s, char terminator); - + Read a bstring terminated by the terminator character or the end of the - stream from the bStream (s) and concatenate it to the parameter r. The + stream from the bStream (s) and concatenate it to the parameter r. The matched terminator, if found, appears at the end of the line read. If the stream has been exhausted of all available data, before any can be - read, BSTR_ERR is returned. This function may read additional characters - into the stream buffer from the core stream that are not returned, but - will be retained for subsequent read operations. When reading from high + read, BSTR_ERR is returned. This function may read additional characters + into the stream buffer from the core stream that are not returned, but + will be retained for subsequent read operations. When reading from high speed streams, this function can perform significantly faster than bgets. .......................................................................... extern int bsreadlns (bstring r, struct bStream * s, bstring terminators); - Read a bstring terminated by any character in the terminators bstring or - the end of the stream from the bStream (s) and return it into the - parameter r. This function may read additional characters from the core - stream that are not returned, but will be retained for subsequent read + Read a bstring terminated by any character in the terminators bstring or + the end of the stream from the bStream (s) and return it into the + parameter r. This function may read additional characters from the core + stream that are not returned, but will be retained for subsequent read operations. .......................................................................... extern int bsreadlnsa (bstring r, struct bStream * s, bstring terminators); - Read a bstring terminated by any character in the terminators bstring or - the end of the stream from the bStream (s) and concatenate it to the - parameter r. If the stream has been exhausted of all available data, - before any can be read, BSTR_ERR is returned. This function may read - additional characters from the core stream that are not returned, but + Read a bstring terminated by any character in the terminators bstring or + the end of the stream from the bStream (s) and concatenate it to the + parameter r. If the stream has been exhausted of all available data, + before any can be read, BSTR_ERR is returned. This function may read + additional characters from the core stream that are not returned, but will be retained for subsequent read operations. .......................................................................... extern int bsread (bstring r, struct bStream * s, int n); - - Read a bstring of length n (or, if it is fewer, as many bytes as is - remaining) from the bStream. This function will read the minimum + + Read a bstring of length n (or, if it is fewer, as many bytes as is + remaining) from the bStream. This function will read the minimum required number of additional characters from the core stream. When the - stream is at the end of the file BSTR_ERR is returned, otherwise BSTR_OK + stream is at the end of the file BSTR_ERR is returned, otherwise BSTR_OK is returned. .......................................................................... extern int bsreada (bstring r, struct bStream * s, int n); - - Read a bstring of length n (or, if it is fewer, as many bytes as is - remaining) from the bStream and concatenate it to the parameter r. This - function will read the minimum required number of additional characters - from the core stream. When the stream is at the end of the file BSTR_ERR + + Read a bstring of length n (or, if it is fewer, as many bytes as is + remaining) from the bStream and concatenate it to the parameter r. This + function will read the minimum required number of additional characters + from the core stream. When the stream is at the end of the file BSTR_ERR is returned, otherwise BSTR_OK is returned. - + .......................................................................... - + extern int bsunread (struct bStream * s, const_bstring b); - - Insert a bstring into the bStream at the current position. These - characters will be read prior to those that actually come from the core + + Insert a bstring into the bStream at the current position. These + characters will be read prior to those that actually come from the core stream. .......................................................................... extern int bspeek (bstring r, const struct bStream * s); - - Return the number of currently buffered characters from the bStream that + + Return the number of currently buffered characters from the bStream that will be read prior to reads from the core stream, and append it to the the parameter r. .......................................................................... - extern int bssplitscb (struct bStream * s, const_bstring splitStr, - int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); + extern int bssplitscb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); - Iterate the set of disjoint sequential substrings over the stream s - divided by any character from the bstring splitStr. The parm passed to - bssplitscb is passed on to cb. If the function cb returns a value < 0, - then further iterating is halted and this return value is returned by + Iterate the set of disjoint sequential substrings over the stream s + divided by any character from the bstring splitStr. The parm passed to + bssplitscb is passed on to cb. If the function cb returns a value < 0, + then further iterating is halted and this return value is returned by bssplitscb. - Note: At the point of calling the cb function, the bStream pointer is - pointed exactly at the position right after having read the split + Note: At the point of calling the cb function, the bStream pointer is + pointed exactly at the position right after having read the split character. The cb function can act on the stream by causing the bStream pointer to move, and bssplitscb will continue by starting the next split at the position of the pointer after the return from cb. However, if the cb causes the bStream s to be destroyed then the cb must - return with a negative value, otherwise bssplitscb will continue in an + return with a negative value, otherwise bssplitscb will continue in an undefined manner. This function is provided as way to incrementally parse through a file - or other generic stream that in total size may otherwise exceed the + or other generic stream that in total size may otherwise exceed the practical or desired memory available. As with the other split callback - based functions this is abortable and does not impose additional memory + based functions this is abortable and does not impose additional memory allocation. .......................................................................... - - extern int bssplitstrcb (struct bStream * s, const_bstring splitStr, - int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); - - Iterate the set of disjoint sequential substrings over the stream s - divided by the entire substring splitStr. The parm passed to - bssplitstrcb is passed on to cb. If the function cb returns a - value < 0, then further iterating is halted and this return value is + + extern int bssplitstrcb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); + + Iterate the set of disjoint sequential substrings over the stream s + divided by the entire substring splitStr. The parm passed to + bssplitstrcb is passed on to cb. If the function cb returns a + value < 0, then further iterating is halted and this return value is returned by bssplitstrcb. - Note: At the point of calling the cb function, the bStream pointer is - pointed exactly at the position right after having read the split + Note: At the point of calling the cb function, the bStream pointer is + pointed exactly at the position right after having read the split character. The cb function can act on the stream by causing the bStream - pointer to move, and bssplitstrcb will continue by starting the next + pointer to move, and bssplitstrcb will continue by starting the next split at the position of the pointer after the return from cb. However, if the cb causes the bStream s to be destroyed then the cb must - return with a negative value, otherwise bssplitscb will continue in an + return with a negative value, otherwise bssplitscb will continue in an undefined manner. This function is provided as way to incrementally parse through a file - or other generic stream that in total size may otherwise exceed the + or other generic stream that in total size may otherwise exceed the practical or desired memory available. As with the other split callback - based functions this is abortable and does not impose additional memory + based functions this is abortable and does not impose additional memory allocation. - + .......................................................................... - + extern int bseof (const struct bStream * s); - Return the defacto "EOF" (end of file) state of a stream (1 if the - bStream is in an EOF state, 0 if not, and BSTR_ERR if stream is closed or - detectably erroneous.) When the readPtr callback returns a value <= 0 - the stream reaches its "EOF" state. Note that bunread with non-empty - content will essentially turn off this state, and the stream will not be + Return the defacto "EOF" (end of file) state of a stream (1 if the + bStream is in an EOF state, 0 if not, and BSTR_ERR if stream is closed or + detectably erroneous.) When the readPtr callback returns a value <= 0 + the stream reaches its "EOF" state. Note that bunread with non-empty + content will essentially turn off this state, and the stream will not be in its "EOF" state so long as its possible to read more data out of it. - Also note that the semantics of bseof() are slightly different from + Also note that the semantics of bseof() are slightly different from something like feof(). I.e., reaching the end of the stream does not necessarily guarantee that bseof() will return with a value indicating that this has happened. bseof() will only return indicating that it has @@ -1727,35 +1727,35 @@ The macros The macros described below are shown in a prototype form indicating their intended usage. Note that the parameters passed to these macros will be - referenced multiple times. As with all macros, programmer care is + referenced multiple times. As with all macros, programmer care is required to guard against unintended side effects. int blengthe (const_bstring b, int err); - Returns the length of the bstring. If the bstring is NULL err is + Returns the length of the bstring. If the bstring is NULL err is returned. .......................................................................... int blength (const_bstring b); - Returns the length of the bstring. If the bstring is NULL, the length + Returns the length of the bstring. If the bstring is NULL, the length returned is 0. .......................................................................... int bchare (const_bstring b, int p, int c); - Returns the p'th character of the bstring b. If the position p refers to - a position that does not exist in the bstring or the bstring is NULL, + Returns the p'th character of the bstring b. If the position p refers to + a position that does not exist in the bstring or the bstring is NULL, then c is returned. .......................................................................... char bchar (const_bstring b, int p); - Returns the p'th character of the bstring b. If the position p refers to - a position that does not exist in the bstring or the bstring is NULL, + Returns the p'th character of the bstring b. If the position p refers to + a position that does not exist in the bstring or the bstring is NULL, then '\0' is returned. .......................................................................... @@ -1776,38 +1776,38 @@ The macros char * bdataofse (bstring b, int ofs, char * err); - Returns the char * data portion of the bstring b offset by ofs. If b is + Returns the char * data portion of the bstring b offset by ofs. If b is NULL, err is returned. .......................................................................... char * bdataofs (bstring b, int ofs); - Returns the char * data portion of the bstring b offset by ofs. If b is + Returns the char * data portion of the bstring b offset by ofs. If b is NULL, NULL is returned. .......................................................................... struct tagbstring var = bsStatic ("..."); - The bsStatic macro allows for static declarations of literal string - constants as struct tagbstring structures. The resulting tagbstring does + The bsStatic macro allows for static declarations of literal string + constants as struct tagbstring structures. The resulting tagbstring does not need to be freed or destroyed. Note that this macro is only well - defined for string literal arguments. For more general string pointers, + defined for string literal arguments. For more general string pointers, use the btfromcstr macro. - The resulting struct tagbstring is permanently write protected. Attempts - to write to this struct tagbstring from any bstrlib function will lead to - BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct + The resulting struct tagbstring is permanently write protected. Attempts + to write to this struct tagbstring from any bstrlib function will lead to + BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct tagbstring has no effect. .......................................................................... <- bsStaticBlkParms ("...") - The bsStaticBlkParms macro emits a pair of comma seperated parameters - corresponding to the block parameters for the block functions in Bstrlib - (i.e., blk2bstr, bcatblk, blk2tbstr, bisstemeqblk, bisstemeqcaselessblk.) + The bsStaticBlkParms macro emits a pair of comma seperated parameters + corresponding to the block parameters for the block functions in Bstrlib + (i.e., blk2bstr, bcatblk, blk2tbstr, bisstemeqblk, bisstemeqcaselessblk.) Note that this macro is only well defined for string literal arguments. Examples: @@ -1815,7 +1815,7 @@ The macros bstring b = blk2bstr (bsStaticBlkParms ("Fast init. ")); bcatblk (b, bsStaticBlkParms ("No frills fast concatenation.")); - These are faster than using bfromcstr() and bcatcstr() respectively + These are faster than using bfromcstr() and bcatcstr() respectively because the length of the inline string is known as a compile time constant. Also note that seperate struct tagbstring declarations for holding the output of a bsStatic() macro are not required. @@ -1824,31 +1824,31 @@ The macros void btfromcstr (struct tagbstring& t, const char * s); - Fill in the tagbstring t with the '\0' terminated char buffer s. This - action is purely reference oriented; no memory management is done. The - data member is just assigned s, and slen is assigned the strlen of s. + Fill in the tagbstring t with the '\0' terminated char buffer s. This + action is purely reference oriented; no memory management is done. The + data member is just assigned s, and slen is assigned the strlen of s. The s parameter is accessed exactly once in this macro. - The resulting struct tagbstring is initially write protected. Attempts - to write to this struct tagbstring in a write protected state from any - bstrlib function will lead to BSTR_ERR being returned. Invoke the - bwriteallow on this struct tagbstring to make it writeable (though this + The resulting struct tagbstring is initially write protected. Attempts + to write to this struct tagbstring in a write protected state from any + bstrlib function will lead to BSTR_ERR being returned. Invoke the + bwriteallow on this struct tagbstring to make it writeable (though this requires that s be obtained from a function compatible with malloc.) .......................................................................... void btfromblk (struct tagbstring& t, void * s, int len); - Fill in the tagbstring t with the data buffer s with length len. This - action is purely reference oriented; no memory management is done. The - data member of t is just assigned s, and slen is assigned len. Note that - the buffer is not appended with a '\0' character. The s and len + Fill in the tagbstring t with the data buffer s with length len. This + action is purely reference oriented; no memory management is done. The + data member of t is just assigned s, and slen is assigned len. Note that + the buffer is not appended with a '\0' character. The s and len parameters are accessed exactly once each in this macro. - The resulting struct tagbstring is initially write protected. Attempts - to write to this struct tagbstring in a write protected state from any - bstrlib function will lead to BSTR_ERR being returned. Invoke the - bwriteallow on this struct tagbstring to make it writeable (though this + The resulting struct tagbstring is initially write protected. Attempts + to write to this struct tagbstring in a write protected state from any + bstrlib function will lead to BSTR_ERR being returned. Invoke the + bwriteallow on this struct tagbstring to make it writeable (though this requires that s be obtained from a function compatible with malloc.) .......................................................................... @@ -1856,15 +1856,15 @@ The macros void btfromblkltrimws (struct tagbstring& t, void * s, int len); Fill in the tagbstring t with the data buffer s with length len after it - has been left trimmed. This action is purely reference oriented; no - memory management is done. The data member of t is just assigned to a - pointer inside the buffer s. Note that the buffer is not appended with a - '\0' character. The s and len parameters are accessed exactly once each + has been left trimmed. This action is purely reference oriented; no + memory management is done. The data member of t is just assigned to a + pointer inside the buffer s. Note that the buffer is not appended with a + '\0' character. The s and len parameters are accessed exactly once each in this macro. - The resulting struct tagbstring is permanently write protected. Attempts - to write to this struct tagbstring from any bstrlib function will lead to - BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct + The resulting struct tagbstring is permanently write protected. Attempts + to write to this struct tagbstring from any bstrlib function will lead to + BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct tagbstring has no effect. .......................................................................... @@ -1872,15 +1872,15 @@ The macros void btfromblkrtrimws (struct tagbstring& t, void * s, int len); Fill in the tagbstring t with the data buffer s with length len after it - has been right trimmed. This action is purely reference oriented; no - memory management is done. The data member of t is just assigned to a - pointer inside the buffer s. Note that the buffer is not appended with a - '\0' character. The s and len parameters are accessed exactly once each + has been right trimmed. This action is purely reference oriented; no + memory management is done. The data member of t is just assigned to a + pointer inside the buffer s. Note that the buffer is not appended with a + '\0' character. The s and len parameters are accessed exactly once each in this macro. - The resulting struct tagbstring is permanently write protected. Attempts - to write to this struct tagbstring from any bstrlib function will lead to - BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct + The resulting struct tagbstring is permanently write protected. Attempts + to write to this struct tagbstring from any bstrlib function will lead to + BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct tagbstring has no effect. .......................................................................... @@ -1888,15 +1888,15 @@ The macros void btfromblktrimws (struct tagbstring& t, void * s, int len); Fill in the tagbstring t with the data buffer s with length len after it - has been left and right trimmed. This action is purely reference - oriented; no memory management is done. The data member of t is just - assigned to a pointer inside the buffer s. Note that the buffer is not - appended with a '\0' character. The s and len parameters are accessed + has been left and right trimmed. This action is purely reference + oriented; no memory management is done. The data member of t is just + assigned to a pointer inside the buffer s. Note that the buffer is not + appended with a '\0' character. The s and len parameters are accessed exactly once each in this macro. - The resulting struct tagbstring is permanently write protected. Attempts - to write to this struct tagbstring from any bstrlib function will lead to - BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct + The resulting struct tagbstring is permanently write protected. Attempts + to write to this struct tagbstring from any bstrlib function will lead to + BSTR_ERR being returned. Invoking the bwriteallow macro onto this struct tagbstring has no effect. .......................................................................... @@ -1905,14 +1905,14 @@ The macros Fill the tagbstring t with the substring from b, starting from position pos with a length len. The segment is clamped by the boundaries of - the bstring b. This action is purely reference oriented; no memory - management is done. Note that the buffer is not appended with a '\0' - character. Note that the t parameter to this macro may be accessed - multiple times. Note that the contents of t will become undefined + the bstring b. This action is purely reference oriented; no memory + management is done. Note that the buffer is not appended with a '\0' + character. Note that the t parameter to this macro may be accessed + multiple times. Note that the contents of t will become undefined if the contents of b change or are destroyed. - The resulting struct tagbstring is permanently write protected. Attempts - to write to this struct tagbstring in a write protected state from any + The resulting struct tagbstring is permanently write protected. Attempts + to write to this struct tagbstring in a write protected state from any bstrlib function will lead to BSTR_ERR being returned. Invoking the bwriteallow macro on this struct tagbstring will have no effect. @@ -1922,10 +1922,10 @@ The macros Append the bstring b with printf like formatting with the format control string, and the arguments taken from the ... list of arguments after - lastarg passed to the containing function. If the containing function - does not have ... parameters or lastarg is not the last named parameter - before the ... then the results are undefined. If successful, the - results are appended to b and BSTR_OK is assigned to ret. Otherwise + lastarg passed to the containing function. If the containing function + does not have ... parameters or lastarg is not the last named parameter + before the ... then the results are undefined. If successful, the + results are appended to b and BSTR_OK is assigned to ret. Otherwise BSTR_ERR is assigned to ret. Example: @@ -1938,17 +1938,17 @@ The macros bdestroy (b); } - Note that if the BSTRLIB_NOVSNP macro was set when bstrlib had been - compiled the bvformata macro will not link properly. If the - BSTRLIB_NOVSNP macro has been set, the bvformata macro will not be + Note that if the BSTRLIB_NOVSNP macro was set when bstrlib had been + compiled the bvformata macro will not link properly. If the + BSTRLIB_NOVSNP macro has been set, the bvformata macro will not be available. .......................................................................... void bwriteprotect (struct tagbstring& t); - Disallow bstring from being written to via the bstrlib API. Attempts to - write to the resulting tagbstring from any bstrlib function will lead to + Disallow bstring from being written to via the bstrlib API. Attempts to + write to the resulting tagbstring from any bstrlib function will lead to BSTR_ERR being returned. Note: bstrings which are write protected cannot be destroyed via bdestroy. @@ -1960,13 +1960,13 @@ The macros void bwriteallow (struct tagbstring& t); - Allow bstring to be written to via the bstrlib API. Note that such an + Allow bstring to be written to via the bstrlib API. Note that such an action makes the bstring both writable and destroyable. If the bstring is - not legitimately writable (as is the case for struct tagbstrings + not legitimately writable (as is the case for struct tagbstrings initialized with a bsStatic value), the results of this are undefined. - Note that invoking the bwriteallow macro may increase the number of - reallocs by one more than necessary for every call to bwriteallow + Note that invoking the bwriteallow macro may increase the number of + reallocs by one more than necessary for every call to bwriteallow interleaved with any bstring API which writes to this bstring. .......................................................................... @@ -1983,10 +1983,10 @@ The bstest module The bstest module is just a unit test for the bstrlib module. For correct implementations of bstrlib, it should execute with 0 failures being reported. This test should be utilized if modifications/customizations to bstrlib have -been performed. It tests each core bstrlib function with bstrings of every -mode (read-only, NULL, static and mutable) and ensures that the expected +been performed. It tests each core bstrlib function with bstrings of every +mode (read-only, NULL, static and mutable) and ensures that the expected semantics are observed (including results that should indicate an error). It -also tests for aliasing support. Passing bstest is a necessary but not a +also tests for aliasing support. Passing bstest is a necessary but not a sufficient condition for ensuring the correctness of the bstrlib module. @@ -1994,12 +1994,12 @@ The test module --------------- The test module is just a unit test for the bstrwrap module. For correct -implementations of bstrwrap, it should execute with 0 failures being -reported. This test should be utilized if modifications/customizations to -bstrwrap have been performed. It tests each core bstrwrap function with -CBStrings write protected or not and ensures that the expected semantics are +implementations of bstrwrap, it should execute with 0 failures being +reported. This test should be utilized if modifications/customizations to +bstrwrap have been performed. It tests each core bstrwrap function with +CBStrings write protected or not and ensures that the expected semantics are observed (including expected exceptions.) Note that exceptions cannot be -disabled to run this test. Passing test is a necessary but not a sufficient +disabled to run this test. Passing test is a necessary but not a sufficient condition for ensuring the correctness of the bstrwrap module. =============================================================================== @@ -2007,7 +2007,7 @@ condition for ensuring the correctness of the bstrwrap module. Using Bstring and CBString as an alternative to the C library ------------------------------------------------------------- -First let us give a table of C library functions and the alternative bstring +First let us give a table of C library functions and the alternative bstring functions and CBString methods that should be used instead of them. C-library Bstring alternative CBString alternative @@ -2039,15 +2039,15 @@ strchr bstrchr cast & use bstrchr strspnp use strspn use strspn ungetc bsunread bsunread -The top 9 C functions listed here are troublesome in that they impose memory +The top 9 C functions listed here are troublesome in that they impose memory management in the calling function. The Bstring and CBstring interfaces have -built-in memory management, so there is far less code with far less potential -for buffer overrun problems. strtok can only be reliably called as a "leaf" +built-in memory management, so there is far less code with far less potential +for buffer overrun problems. strtok can only be reliably called as a "leaf" calculation, since it (quite bizarrely) maintains hidden internal state. And gets is well known to be broken no matter what. The Bstrlib alternatives do not suffer from those sorts of problems. -The substitute for strncat can be performed with higher performance by using +The substitute for strncat can be performed with higher performance by using the blk2tbstr macro to create a presized second operand for bconcat. C-library Bstring alternative CBString alternative @@ -2063,7 +2063,7 @@ memcmp memcmp acceptable memcmp acceptable Remember that Bstring (and CBstring) functions will automatically append the '\0' character to the character data buffer. So by simply accessing the data -buffer directly, ordinary C string library functions can be called directly +buffer directly, ordinary C string library functions can be called directly on them. Note that bstrcmp is not the same as memcmp in exactly the same way that strcmp is not the same as memcmp. @@ -2072,11 +2072,11 @@ C-library Bstring alternative CBString alternative fread balloc + fread ::alloc + fread fgets balloc + fgets ::alloc + fgets -These are odd ones because of the exact sizing of the buffer required. The -Bstring and CBString alternatives requires that the buffers are forced to -hold at least the prescribed length, then just use fread or fgets directly. -However, typically the automatic memory management of Bstring and CBstring -will make the typical use of fgets and fread to read specifically sized +These are odd ones because of the exact sizing of the buffer required. The +Bstring and CBString alternatives requires that the buffers are forced to +hold at least the prescribed length, then just use fread or fgets directly. +However, typically the automatic memory management of Bstring and CBstring +will make the typical use of fgets and fread to read specifically sized strings unnecessary. Implementation Choices @@ -2086,73 +2086,73 @@ Overhead: ......... The bstring library has more overhead versus straight char buffers for most -functions. This overhead is essentially just the memory management and -string header allocation. This overhead usually only shows up for small +functions. This overhead is essentially just the memory management and +string header allocation. This overhead usually only shows up for small string manipulations. The performance loss has to be considered in light of the following: 1) What would be the performance loss of trying to write this management code in one's own application? -2) Since the bstring library source code is given, a sufficiently powerful - modern inlining globally optimizing compiler can remove function call +2) Since the bstring library source code is given, a sufficiently powerful + modern inlining globally optimizing compiler can remove function call overhead. Since the data type is exposed, a developer can replace any unsatisfactory -function with their own inline implementation. And that is besides the main -point of what the better string library is mainly meant to provide. Any -overhead lost has to be compared against the value of the safe abstraction +function with their own inline implementation. And that is besides the main +point of what the better string library is mainly meant to provide. Any +overhead lost has to be compared against the value of the safe abstraction for coupling memory management and string functionality. Performance of the C interface: ............................... -The algorithms used have performance advantages versus the analogous C +The algorithms used have performance advantages versus the analogous C library functions. For example: -1. bfromcstr/blk2str/bstrcpy versus strcpy/strdup. By using memmove instead - of strcpy, the break condition of the copy loop is based on an independent - counter (that should be allocated in a register) rather than having to - check the results of the load. Modern out-of-order executing CPUs can - parallelize the final branch mis-predict penality with the loading of the - source string. Some CPUs will also tend to have better built-in hardware - support for counted memory moves than load-compare-store. (This is a +1. bfromcstr/blk2str/bstrcpy versus strcpy/strdup. By using memmove instead + of strcpy, the break condition of the copy loop is based on an independent + counter (that should be allocated in a register) rather than having to + check the results of the load. Modern out-of-order executing CPUs can + parallelize the final branch mis-predict penality with the loading of the + source string. Some CPUs will also tend to have better built-in hardware + support for counted memory moves than load-compare-store. (This is a minor, but non-zero gain.) 2. biseq versus strcmp. If the strings are unequal in length, bsiseq will return in O(1) time. If the strings are aliased, or have aliased data - buffers, biseq will return in O(1) time. strcmp will always be O(k), - where k is the length of the common prefix or the whole string if they are + buffers, biseq will return in O(1) time. strcmp will always be O(k), + where k is the length of the common prefix or the whole string if they are identical. 3. ->slen versus strlen. ->slen is obviously always O(1), while strlen is always O(n) where n is the length of the string. -4. bconcat versus strcat. Both rely on precomputing the length of the - destination string argument, which will favor the bstring library. On +4. bconcat versus strcat. Both rely on precomputing the length of the + destination string argument, which will favor the bstring library. On iterated concatenations the performance difference can be enormous. 5. bsreadln versus fgets. The bsreadln function reads large blocks at a time from the given stream, then parses out lines from the buffers directly. Some C libraries will implement fgets as a loop over single fgetc calls. Testing indicates that the bsreadln approach can be several times faster for fast stream devices (such as a file that has been entirely cached.) -6. bsplits/bsplitscb versus strspn. Accelerators for the set of match +6. bsplits/bsplitscb versus strspn. Accelerators for the set of match characters are generated only once. -Practical testing indicates that in general Bstrlib is never signifcantly +Practical testing indicates that in general Bstrlib is never signifcantly slower than the C library for common operations, while very often having a -performance advantage that ranges from significant to massive. Even for -functions like b(n)inchr versus str(c)spn() (where, in theory, there is no -advantage for the Bstrlib architecture) the performance of Bstrlib is vastly +performance advantage that ranges from significant to massive. Even for +functions like b(n)inchr versus str(c)spn() (where, in theory, there is no +advantage for the Bstrlib architecture) the performance of Bstrlib is vastly superior to most tested C library implementations. Some of Bstrlib's extra functionality also lead to inevitable performance advantages over typical C solutions. For example, using the blk2tbstr macro, -one can (in O(1) time) generate an internal substring by reference while not +one can (in O(1) time) generate an internal substring by reference while not disturbing the original string. If disturbing the original string is not an option, typically, a comparable C solution would have to make a copy of the -substring to provide similar functionality. Another example is reverse -character set scanning -- the str(c)spn functions only scan in a forward +substring to provide similar functionality. Another example is reverse +character set scanning -- the str(c)spn functions only scan in a forward direction which can complicate some parsing algorithms. -Where high performance char * based algorithms are available, Bstrlib can -still leverage them by accessing the ->data field on bstrings. So +Where high performance char * based algorithms are available, Bstrlib can +still leverage them by accessing the ->data field on bstrings. So realistically Bstrlib can never be significantly slower than any standard '\0' terminated char * based solutions. @@ -2160,96 +2160,96 @@ Performance of the C++ interface: ................................. The C++ interface has been designed with an emphasis on abstraction and safety -first. However, since it is substantially a wrapper for the C bstring -functions, for longer strings the performance comments described in the -"Performance of the C interface" section above still apply. Note that the -(CBString *) type can be directly cast to a (bstring) type, and passed as -parameters to the C functions (though a CBString must never be passed to +first. However, since it is substantially a wrapper for the C bstring +functions, for longer strings the performance comments described in the +"Performance of the C interface" section above still apply. Note that the +(CBString *) type can be directly cast to a (bstring) type, and passed as +parameters to the C functions (though a CBString must never be passed to bdestroy.) Probably the most controversial choice is performing full bounds checking on the [] operator. This decision was made because 1) the fast alternative of -not bounds checking is still available by first casting the CBString to a -(const char *) buffer or to a (struct tagbstring) then derefencing .data and -2) because the lack of bounds checking is seen as one of the main weaknesses -of C/C++ versus other languages. This check being done on every access leads -to individual character extraction being actually slower than other languages -in this one respect (other language's compilers will normally dedicate more -resources on hoisting or removing bounds checking as necessary) but otherwise +not bounds checking is still available by first casting the CBString to a +(const char *) buffer or to a (struct tagbstring) then derefencing .data and +2) because the lack of bounds checking is seen as one of the main weaknesses +of C/C++ versus other languages. This check being done on every access leads +to individual character extraction being actually slower than other languages +in this one respect (other language's compilers will normally dedicate more +resources on hoisting or removing bounds checking as necessary) but otherwise bring C++ up to the level of other languages in terms of functionality. It is common for other C++ libraries to leverage the abstractions provided by -C++ to use reference counting and "copy on write" policies. While these +C++ to use reference counting and "copy on write" policies. While these techniques can speed up some scenarios, they impose a problem with respect to -thread safety. bstrings and CBStrings can be properly protected with +thread safety. bstrings and CBStrings can be properly protected with "per-object" mutexes, meaning that two bstrlib calls can be made and execute simultaneously, so long as the bstrings and CBstrings are distinct. With a -reference count and alias before copy on write policy, global mutexes are -required that prevent multiple calls to the strings library to execute +reference count and alias before copy on write policy, global mutexes are +required that prevent multiple calls to the strings library to execute simultaneously regardless of whether or not the strings represent the same string. -One interesting trade off in CBString is that the default constructor is not -trivial. I.e., it always prepares a ready to use memory buffer. The purpose -is to ensure that there is a uniform internal composition for any functioning -CBString that is compatible with bstrings. It also means that the other -methods in the class are not forced to perform "late initialization" checks. -In the end it means that construction of CBStrings are slower than other -comparable C++ string classes. Initial testing, however, indicates that -CBString outperforms std::string and MFC's CString, for example, in all other -operations. So to work around this weakness it is recommended that CBString +One interesting trade off in CBString is that the default constructor is not +trivial. I.e., it always prepares a ready to use memory buffer. The purpose +is to ensure that there is a uniform internal composition for any functioning +CBString that is compatible with bstrings. It also means that the other +methods in the class are not forced to perform "late initialization" checks. +In the end it means that construction of CBStrings are slower than other +comparable C++ string classes. Initial testing, however, indicates that +CBString outperforms std::string and MFC's CString, for example, in all other +operations. So to work around this weakness it is recommended that CBString declarations be pushed outside of inner loops. -Practical testing indicates that with the exception of the caveats given +Practical testing indicates that with the exception of the caveats given above (constructors and safe index character manipulations) the C++ API for -Bstrlib generally outperforms popular standard C++ string classes. Amongst -the standard libraries and compilers, the quality of concatenation operations +Bstrlib generally outperforms popular standard C++ string classes. Amongst +the standard libraries and compilers, the quality of concatenation operations varies wildly and very little care has gone into search functions. Bstrlib dominates those performance benchmarks. Memory management: .................. -The bstring functions which write and modify bstrings will automatically -reallocate the backing memory for the char buffer whenever it is required to -grow. The algorithm for resizing chosen is to snap up to sizes that are a -power of two which are sufficient to hold the intended new size. Memory -reallocation is not performed when the required size of the buffer is -decreased. This behavior can be relied on, and is necessary to make the -behaviour of balloc deterministic. This trades off additional memory usage +The bstring functions which write and modify bstrings will automatically +reallocate the backing memory for the char buffer whenever it is required to +grow. The algorithm for resizing chosen is to snap up to sizes that are a +power of two which are sufficient to hold the intended new size. Memory +reallocation is not performed when the required size of the buffer is +decreased. This behavior can be relied on, and is necessary to make the +behaviour of balloc deterministic. This trades off additional memory usage for decreasing the frequency for required reallocations: -1. For any bstring whose size never exceeds n, its buffer is not ever +1. For any bstring whose size never exceeds n, its buffer is not ever reallocated more than log_2(n) times for its lifetime. 2. For any bstring whose size never exceeds n, its buffer is never more than - 2*(n+1) in length. (The extra characters beyond 2*n are to allow for the + 2*(n+1) in length. (The extra characters beyond 2*n are to allow for the implicit '\0' which is always added by the bstring modifying functions.) -Decreasing the buffer size when the string decreases in size would violate 1) -above and in real world case lead to pathological heap thrashing. Similarly, -allocating more tightly than "least power of 2 greater than necessary" would +Decreasing the buffer size when the string decreases in size would violate 1) +above and in real world case lead to pathological heap thrashing. Similarly, +allocating more tightly than "least power of 2 greater than necessary" would lead to a violation of 1) and have the same potential for heap thrashing. -Property 2) needs emphasizing. Although the memory allocated is always a -power of 2, for a bstring that grows linearly in size, its buffer memory also -grows linearly, not exponentially. The reason is that the amount of extra -space increases with each reallocation, which decreases the frequency of +Property 2) needs emphasizing. Although the memory allocated is always a +power of 2, for a bstring that grows linearly in size, its buffer memory also +grows linearly, not exponentially. The reason is that the amount of extra +space increases with each reallocation, which decreases the frequency of future reallocations. -Obviously, given that bstring writing functions may reallocate the data -buffer backing the target bstring, one should not attempt to cache the data -buffer address and use it after such bstring functions have been called. -This includes making reference struct tagbstrings which alias to a writable +Obviously, given that bstring writing functions may reallocate the data +buffer backing the target bstring, one should not attempt to cache the data +buffer address and use it after such bstring functions have been called. +This includes making reference struct tagbstrings which alias to a writable bstring. -balloc or bfromcstralloc can be used to preallocate the minimum amount of -space used for a given bstring. This will reduce even further the number of -times the data portion is reallocated. If the length of the string is never -more than one less than the memory length then there will be no further +balloc or bfromcstralloc can be used to preallocate the minimum amount of +space used for a given bstring. This will reduce even further the number of +times the data portion is reallocated. If the length of the string is never +more than one less than the memory length then there will be no further reallocations. -Note that invoking the bwriteallow macro may increase the number of reallocs -by one more than necessary for every call to bwriteallow interleaved with any +Note that invoking the bwriteallow macro may increase the number of reallocs +by one more than necessary for every call to bwriteallow interleaved with any bstring API which writes to this bstring. The library does not use any mechanism for automatic clean up for the C API. @@ -2259,20 +2259,20 @@ leaks. Constant and static tagbstrings: ................................ -A struct tagbstring can be write protected from any bstrlib function using -the bwriteprotect macro. A write protected struct tagbstring can then be -reset to being writable via the bwriteallow macro. There is, of course, no -protection from attempts to directly access the bstring members. Modifying a +A struct tagbstring can be write protected from any bstrlib function using +the bwriteprotect macro. A write protected struct tagbstring can then be +reset to being writable via the bwriteallow macro. There is, of course, no +protection from attempts to directly access the bstring members. Modifying a bstring which is write protected by direct access has undefined behavior. static struct tagbstrings can be declared via the bsStatic macro. They are -considered permanently unwritable. Such struct tagbstrings's are declared -such that attempts to write to it are not well defined. Invoking either -bwriteallow or bwriteprotect on static struct tagbstrings has no effect. +considered permanently unwritable. Such struct tagbstrings's are declared +such that attempts to write to it are not well defined. Invoking either +bwriteallow or bwriteprotect on static struct tagbstrings has no effect. -struct tagbstring's initialized via btfromcstr or blk2tbstr are protected by -default but can be made writeable via the bwriteallow macro. If bwriteallow -is called on such struct tagbstring's, it is the programmer's responsibility +struct tagbstring's initialized via btfromcstr or blk2tbstr are protected by +default but can be made writeable via the bwriteallow macro. If bwriteallow +is called on such struct tagbstring's, it is the programmer's responsibility to ensure that: 1) the buffer supplied was allocated from the heap. @@ -2280,8 +2280,8 @@ to ensure that: also been allocated from the heap.) 3) free is called on the buffer to reclaim its memory. -bwriteallow and bwriteprotect can be invoked on ordinary bstrings (they have -to be dereferenced with the (*) operator to get the levels of indirection +bwriteallow and bwriteprotect can be invoked on ordinary bstrings (they have +to be dereferenced with the (*) operator to get the levels of indirection correct) to give them write protection. Buffer declaration: @@ -2290,26 +2290,26 @@ Buffer declaration: The memory buffer is actually declared "unsigned char *" instead of "char *". The reason for this is to trigger compiler warnings whenever uncasted char buffers are assigned to the data portion of a bstring. This will draw more -diligent programmers into taking a second look at the code where they -have carelessly left off the typically required cast. (Research from -AT&T/Lucent indicates that additional programmer eyeballs is one of the most +diligent programmers into taking a second look at the code where they +have carelessly left off the typically required cast. (Research from +AT&T/Lucent indicates that additional programmer eyeballs is one of the most effective mechanisms at ferreting out bugs.) Function pointers: .................. -The bgets, bread and bStream functions use function pointers to obtain -strings from data streams. The function pointer declarations have been -specifically chosen to be compatible with the fgetc and fread functions. -While this may seem to be a convoluted way of implementing fgets and fread -style functionality, it has been specifically designed this way to ensure -that there is no dependency on a single narrowly defined set of device -interfaces, such as just stream I/O. In the embedded world, its quite -possible to have environments where such interfaces may not exist in the -standard C library form. Furthermore, the generalization that this opens up -allows for more sophisticated uses for these functions (performing an fgets -like function on a socket, for example.) By using function pointers, it also -allows such abstract stream interfaces to be created using the bstring library +The bgets, bread and bStream functions use function pointers to obtain +strings from data streams. The function pointer declarations have been +specifically chosen to be compatible with the fgetc and fread functions. +While this may seem to be a convoluted way of implementing fgets and fread +style functionality, it has been specifically designed this way to ensure +that there is no dependency on a single narrowly defined set of device +interfaces, such as just stream I/O. In the embedded world, its quite +possible to have environments where such interfaces may not exist in the +standard C library form. Furthermore, the generalization that this opens up +allows for more sophisticated uses for these functions (performing an fgets +like function on a socket, for example.) By using function pointers, it also +allows such abstract stream interfaces to be created using the bstring library itself while not creating a circular dependency. Use of int's for sizes: @@ -2317,9 +2317,9 @@ Use of int's for sizes: This is just a recognition that 16bit platforms with requirements for strings that are larger than 64K and 32bit+ platforms with requirements for strings -that are larger than 4GB are pretty marginal. The main focus is for 32bit -platforms, and emerging 64bit platforms with reasonable < 4GB string -requirements. Using ints allows for negative values which has meaning +that are larger than 4GB are pretty marginal. The main focus is for 32bit +platforms, and emerging 64bit platforms with reasonable < 4GB string +requirements. Using ints allows for negative values which has meaning internally to bstrlib. Semantic consideration: @@ -2339,22 +2339,22 @@ these considerations. For example: bconcat (a, b); /* Double a and b, t is now undefined. */ bdestroy (a); /* Destroy the contents of both a and b. */ -Variables of type bstring are really just references that point to real -bstring objects. The equal operator (=) creates aliases, and the asterisk +Variables of type bstring are really just references that point to real +bstring objects. The equal operator (=) creates aliases, and the asterisk dereference operator (*) creates a kind of alias to the current instance (which -is generally not useful for any purpose.) Using bstrcpy() is the correct way -of creating duplicate instances. The ampersand operator (&) is useful for -creating aliases to struct tagbstrings (remembering that constructed struct +is generally not useful for any purpose.) Using bstrcpy() is the correct way +of creating duplicate instances. The ampersand operator (&) is useful for +creating aliases to struct tagbstrings (remembering that constructed struct tagbstrings are not writable by default.) -CBStrings use complete copy semantics for the equal operator (=), and thus do -not have these sorts of issues. +CBStrings use complete copy semantics for the equal operator (=), and thus do +not have these sorts of issues. Debugging: .......... -Bstrings have a simple, exposed definition and construction, and the library -itself is open source. So most debugging is going to be fairly straight- +Bstrings have a simple, exposed definition and construction, and the library +itself is open source. So most debugging is going to be fairly straight- forward. But the memory for bstrings come from the heap, which can often be corrupted indirectly, and it might not be obvious what has happened even from direct examination of the contents in a debugger or a core dump. There are @@ -2363,21 +2363,21 @@ such problems, however another common approach is to directly instrument the calls to malloc, realloc, calloc, free, memcpy, memmove and/or other calls by overriding them with macro definitions. -Although the user could hack on the Bstrlib sources directly as necessary to -perform such an instrumentation, Bstrlib comes with a built-in mechanism for -doing this. By defining the macro BSTRLIB_MEMORY_DEBUG and providing an -include file named memdbg.h this will force the core Bstrlib modules to -attempt to include this file. In such a file, macros could be defined which +Although the user could hack on the Bstrlib sources directly as necessary to +perform such an instrumentation, Bstrlib comes with a built-in mechanism for +doing this. By defining the macro BSTRLIB_MEMORY_DEBUG and providing an +include file named memdbg.h this will force the core Bstrlib modules to +attempt to include this file. In such a file, macros could be defined which overrides Bstrlib's useage of the C standard library. Rather than calling malloc, realloc, free, memcpy or memmove directly, Bstrlib -emits the macros bstr__alloc, bstr__realloc, bstr__free, bstr__memcpy and +emits the macros bstr__alloc, bstr__realloc, bstr__free, bstr__memcpy and bstr__memmove in their place respectively. By default these macros are simply assigned to be equivalent to their corresponding C standard library function -call. However, if they are given earlier macro definitions (via the back +call. However, if they are given earlier macro definitions (via the back door include file) they will not be given their default definition. In this way Bstrlib's interface to the standard library can be changed but without -having to directly redefine or link standard library symbols (both of which +having to directly redefine or link standard library symbols (both of which are not strictly ANSI C compliant.) An example definition might include: @@ -2386,8 +2386,8 @@ An example definition might include: which might help contextualize heap entries in a debugging environment. -The NULL parameter and sanity checking of bstrings is part of the Bstrlib -API, and thus Bstrlib itself does not present any different modes which would +The NULL parameter and sanity checking of bstrings is part of the Bstrlib +API, and thus Bstrlib itself does not present any different modes which would correspond to "Debug" or "Release" modes. Bstrlib always contains mechanisms which one might think of as debugging features, but retains the performance and small memory footprint one would normally associate with release mode @@ -2396,7 +2396,7 @@ code. Integration Microsoft's Visual Studio debugger: ............................................... -Microsoft's Visual Studio debugger has a capability of customizable mouse +Microsoft's Visual Studio debugger has a capability of customizable mouse float over data type descriptions. This is accomplished by editting the AUTOEXP.DAT file to include the following: @@ -2418,51 +2418,51 @@ Security -------- Bstrlib does not come with explicit security features outside of its fairly -comprehensive error detection, coupled with its strict semantic support. +comprehensive error detection, coupled with its strict semantic support. That is to say that certain common security problems, such as buffer overrun, -constant overwrite, arbitrary truncation etc, are far less likely to happen -inadvertently. Where it does help, Bstrlib maximizes its advantage by +constant overwrite, arbitrary truncation etc, are far less likely to happen +inadvertently. Where it does help, Bstrlib maximizes its advantage by providing developers a simple adoption path that lets them leave less secure -string mechanisms behind. The library will not leave developers wanting, so -they will be less likely to add new code using a less secure string library +string mechanisms behind. The library will not leave developers wanting, so +they will be less likely to add new code using a less secure string library to add functionality that might be missing from Bstrlib. That said there are a number of security ideas not addressed by Bstrlib: -1. Race condition exploitation (i.e., verifying a string's contents, then -raising the privilege level and execute it as a shell command as two -non-atomic steps) is well beyond the scope of what Bstrlib can provide. It -should be noted that MFC's built-in string mutex actually does not solve this -problem either -- it just removes immediate data corruption as a possible -outcome of such exploit attempts (it can be argued that this is worse, since -it will leave no trace of the exploitation). In general race conditions have -to be dealt with by careful design and implementation; it cannot be assisted +1. Race condition exploitation (i.e., verifying a string's contents, then +raising the privilege level and execute it as a shell command as two +non-atomic steps) is well beyond the scope of what Bstrlib can provide. It +should be noted that MFC's built-in string mutex actually does not solve this +problem either -- it just removes immediate data corruption as a possible +outcome of such exploit attempts (it can be argued that this is worse, since +it will leave no trace of the exploitation). In general race conditions have +to be dealt with by careful design and implementation; it cannot be assisted by a string library. -2. Any kind of access control or security attributes to prevent usage in -dangerous interfaces such as system(). Perl includes a "trust" attribute -which can be endowed upon strings that are intended to be passed to such -dangerous interfaces. However, Perl's solution reflects its own limitations --- notably that it is not a strongly typed language. In the example code for -Bstrlib, there is a module called taint.cpp. It demonstrates how to write a -simple wrapper class for managing "untainted" or trusted strings using the -type system to prevent questionable mixing of ordinary untrusted strings with -untainted ones then passing them to dangerous interfaces. In this way the -security correctness of the code reduces to auditing the direct usages of +2. Any kind of access control or security attributes to prevent usage in +dangerous interfaces such as system(). Perl includes a "trust" attribute +which can be endowed upon strings that are intended to be passed to such +dangerous interfaces. However, Perl's solution reflects its own limitations +-- notably that it is not a strongly typed language. In the example code for +Bstrlib, there is a module called taint.cpp. It demonstrates how to write a +simple wrapper class for managing "untainted" or trusted strings using the +type system to prevent questionable mixing of ordinary untrusted strings with +untainted ones then passing them to dangerous interfaces. In this way the +security correctness of the code reduces to auditing the direct usages of dangerous interfaces or promotions of tainted strings to untainted ones. -3. Encryption of string contents is way beyond the scope of Bstrlib. -Maintaining encrypted string contents in the futile hopes of thwarting things -like using system-level debuggers to examine sensitive string data is likely -to be a wasted effort (imagine a debugger that runs at a higher level than a -virtual processor where the application runs). For more standard encryption -usages, since the bstring contents are simply binary blocks of data, this +3. Encryption of string contents is way beyond the scope of Bstrlib. +Maintaining encrypted string contents in the futile hopes of thwarting things +like using system-level debuggers to examine sensitive string data is likely +to be a wasted effort (imagine a debugger that runs at a higher level than a +virtual processor where the application runs). For more standard encryption +usages, since the bstring contents are simply binary blocks of data, this should pose no problem for usage with other standard encryption libraries. Compatibility ------------- -The Better String Library is known to compile and function correctly with the +The Better String Library is known to compile and function correctly with the following compilers: - Microsoft Visual C++ @@ -2473,44 +2473,44 @@ following compilers: - Turbo C Setting of configuration options should be unnecessary for these compilers -(unless exceptions are being disabled or STLport has been added to WATCOM -C/C++). Bstrlib has been developed with an emphasis on portability. As such -porting it to other compilers should be straight forward. This package -includes a porting guide (called porting.txt) which explains what issues may +(unless exceptions are being disabled or STLport has been added to WATCOM +C/C++). Bstrlib has been developed with an emphasis on portability. As such +porting it to other compilers should be straight forward. This package +includes a porting guide (called porting.txt) which explains what issues may exist for porting Bstrlib to different compilers and environments. ANSI issues ----------- 1. The function pointer types bNgetc and bNread have prototypes which are very -similar to, but not exactly the same as fgetc and fread respectively. +similar to, but not exactly the same as fgetc and fread respectively. Basically the FILE * parameter is replaced by void *. The purpose of this -was to allow one to create other functions with fgetc and fread like -semantics without being tied to ANSI C's file streaming mechanism. I.e., one -could very easily adapt it to sockets, or simply reading a block of memory, +was to allow one to create other functions with fgetc and fread like +semantics without being tied to ANSI C's file streaming mechanism. I.e., one +could very easily adapt it to sockets, or simply reading a block of memory, or procedurally generated strings (for fractal generation, for example.) -The problem is that invoking the functions (bNgetc)fgetc and (bNread)fread is -not technically legal in ANSI C. The reason being that the compiler is only -able to coerce the function pointers themselves into the target type, however -are unable to perform any cast (implicit or otherwise) on the parameters -passed once invoked. I.e., if internally void * and FILE * need some kind of -mechanical coercion, the compiler will not properly perform this conversion +The problem is that invoking the functions (bNgetc)fgetc and (bNread)fread is +not technically legal in ANSI C. The reason being that the compiler is only +able to coerce the function pointers themselves into the target type, however +are unable to perform any cast (implicit or otherwise) on the parameters +passed once invoked. I.e., if internally void * and FILE * need some kind of +mechanical coercion, the compiler will not properly perform this conversion and thus lead to undefined behavior. -Apparently a platform from Data General called "Eclipse" and another from -Tandem called "NonStop" have a different representation for pointers to bytes -and pointers to words, for example, where coercion via casting is necessary. +Apparently a platform from Data General called "Eclipse" and another from +Tandem called "NonStop" have a different representation for pointers to bytes +and pointers to words, for example, where coercion via casting is necessary. (Actual confirmation of the existence of such machines is hard to come by, so -it is prudent to be skeptical about this information.) However, this is not -an issue for any known contemporary platforms. One may conclude that such +it is prudent to be skeptical about this information.) However, this is not +an issue for any known contemporary platforms. One may conclude that such platforms are effectively apocryphal even if they do exist. -To correctly work around this problem to the satisfaction of the ANSI -limitations, one needs to create wrapper functions for fgets and/or -fread with the prototypes of bNgetc and/or bNread respectively which performs +To correctly work around this problem to the satisfaction of the ANSI +limitations, one needs to create wrapper functions for fgets and/or +fread with the prototypes of bNgetc and/or bNread respectively which performs no other action other than to explicitely cast the void * parameter to a -FILE *, and simply pass the remaining parameters straight to the function +FILE *, and simply pass the remaining parameters straight to the function pointer call. The wrappers themselves are trivial: @@ -2527,29 +2527,29 @@ These have not been supplied in bstrlib or bstraux to prevent unnecessary linking with file I/O functions. 2. vsnprintf is not available on all compilers. Because of this, the bformat -and bformata functions (and format and formata methods) are not guaranteed to -work properly. For those compilers that don't have vsnprintf, the -BSTRLIB_NOVSNP macro should be set before compiling bstrlib, and the format +and bformata functions (and format and formata methods) are not guaranteed to +work properly. For those compilers that don't have vsnprintf, the +BSTRLIB_NOVSNP macro should be set before compiling bstrlib, and the format functions/method will be disabled. -The more recent ANSI C standards have specified the required inclusion of a +The more recent ANSI C standards have specified the required inclusion of a vsnprintf function. 3. The bstrlib function names are not unique in the first 6 characters. This -is only an issue for older C compiler environments which do not store more +is only an issue for older C compiler environments which do not store more than 6 characters for function names. 4. The bsafe module defines macros and function names which are part of the C library. This simply overrides the definition as expected on all platforms -tested, however it is not sanctioned by the ANSI standard. This module is -clearly optional and should be omitted on platforms which disallow its +tested, however it is not sanctioned by the ANSI standard. This module is +clearly optional and should be omitted on platforms which disallow its undefined semantics. -In practice the real issue is that some compilers in some modes of operation -can/will inline these standard library functions on a module by module basis +In practice the real issue is that some compilers in some modes of operation +can/will inline these standard library functions on a module by module basis as they appear in each. The linker will thus have no opportunity to override -the implementation of these functions for those cases. This can lead to -inconsistent behaviour of the bsafe module on different platforms and +the implementation of these functions for those cases. This can lead to +inconsistent behaviour of the bsafe module on different platforms and compilers. =============================================================================== @@ -2557,37 +2557,37 @@ compilers. Comparison with Microsoft's CString class ----------------------------------------- -Although developed independently, CBStrings have very similar functionality to -Microsoft's CString class. However, the bstring library has significant +Although developed independently, CBStrings have very similar functionality to +Microsoft's CString class. However, the bstring library has significant advantages over CString: 1. Bstrlib is a C-library as well as a C++ library (using the C++ wrapper). - - Thus it is compatible with more programming environments and + - Thus it is compatible with more programming environments and available to a wider population of programmers. 2. The internal structure of a bstring is considered exposed. - - A single contiguous block of data can be cut into read-only pieces by - simply creating headers, without allocating additional memory to create + - A single contiguous block of data can be cut into read-only pieces by + simply creating headers, without allocating additional memory to create reference copies of each of these sub-strings. - In this way, using bstrings in a totally abstracted way becomes a choice rather than an imposition. Further this choice can be made differently at different layers of applications that use it. -3. Static declaration support precludes the need for constructor +3. Static declaration support precludes the need for constructor invocation. - - Allows for static declarations of constant strings that has no + - Allows for static declarations of constant strings that has no additional constructor overhead. 4. Bstrlib is not attached to another library. - - Bstrlib is designed to be easily plugged into any other library - collection, without dependencies on other libraries or paradigms (such + - Bstrlib is designed to be easily plugged into any other library + collection, without dependencies on other libraries or paradigms (such as "MFC".) -The bstring library also comes with a few additional functions that are not +The bstring library also comes with a few additional functions that are not available in the CString class: - bsetstr @@ -2596,39 +2596,39 @@ available in the CString class: - breplace (this is different from CString::Replace()) - Writable indexed characters (for example a[i]='x') -Interestingly, although Microsoft did implement mid$(), left$() and right$() +Interestingly, although Microsoft did implement mid$(), left$() and right$() functional analogues (these are functions from GWBASIC) they seem to have -forgotten that mid$() could be also used to write into the middle of a string. -This functionality exists in Bstrlib with the bsetstr() and breplace() +forgotten that mid$() could be also used to write into the middle of a string. +This functionality exists in Bstrlib with the bsetstr() and breplace() functions. -Among the disadvantages of Bstrlib is that there is no special support for -localization or wide characters. Such things are considered beyond the scope -of what bstrings are trying to deliver. CString essentially supports the -older UCS-2 version of Unicode via widechar_t as an application-wide compile +Among the disadvantages of Bstrlib is that there is no special support for +localization or wide characters. Such things are considered beyond the scope +of what bstrings are trying to deliver. CString essentially supports the +older UCS-2 version of Unicode via widechar_t as an application-wide compile time switch. CString's also use built-in mechanisms for ensuring thread safety under all situations. While this makes writing thread safe code that much easier, this built-in safety feature has a price -- the inner loops of each CString method runs in its own critical section (grabbing and releasing a light weight mutex -on every operation.) The usual way to decrease the impact of a critical -section performance penalty is to amortize more operations per critical -section. But since the implementation of CStrings is fixed as a one critical -section per-operation cost, there is no way to leverage this common +on every operation.) The usual way to decrease the impact of a critical +section performance penalty is to amortize more operations per critical +section. But since the implementation of CStrings is fixed as a one critical +section per-operation cost, there is no way to leverage this common performance enhancing idea. -The search facilities in Bstrlib are comparable to those in MFC's CString -class, though it is missing locale specific collation. But because Bstrlib -is interoperable with C's char buffers, it will allow programmers to write -their own string searching mechanism (such as Boyer-Moore), or be able to -choose from a variety of available existing string searching libraries (such +The search facilities in Bstrlib are comparable to those in MFC's CString +class, though it is missing locale specific collation. But because Bstrlib +is interoperable with C's char buffers, it will allow programmers to write +their own string searching mechanism (such as Boyer-Moore), or be able to +choose from a variety of available existing string searching libraries (such as those for regular expressions) without difficulty. Microsoft used a very non-ANSI conforming trick in its implementation to allow printf() to use the "%s" specifier to output a CString correctly. This can be convenient, but it is inherently not portable. CBString requires an -explicit cast, while bstring requires the data member to be dereferenced. +explicit cast, while bstring requires the data member to be dereferenced. Microsoft's own documentation recommends casting, instead of relying on this feature. @@ -2640,7 +2640,7 @@ This is the C++ language's standard STL based string class. 1. There is no C implementation. 2. The [] operator is not bounds checked. 3. Missing a lot of useful functions like printf-like formatting. -4. Some sub-standard std::string implementations (SGI) are necessarily unsafe +4. Some sub-standard std::string implementations (SGI) are necessarily unsafe to use with multithreading. 5. Limited by STL's std::iostream which in turn is limited by ifstream which can only take input from files. (Compare to CBStream's API which can take @@ -2650,20 +2650,20 @@ This is the C++ language's standard STL based string class. Comparison with ISO C TR 24731 proposal --------------------------------------- -Following the ISO C99 standard, Microsoft has proposed a group of C library +Following the ISO C99 standard, Microsoft has proposed a group of C library extensions which are supposedly "safer and more secure". This proposal is expected to be adopted by the ISO C standard which follows C99. -The proposal reveals itself to be very similar to Microsoft's "StrSafe" -library. The functions are basically the same as other standard C library -string functions except that destination parameters are paired with an -additional length parameter of type rsize_t. rsize_t is the same as size_t, -however, the range is checked to make sure its between 1 and RSIZE_MAX. Like -Bstrlib, the functions perform a "parameter check". Unlike Bstrlib, when a -parameter check fails, rather than simply outputing accumulatable error -statuses, they call a user settable global error function handler, and upon -return of control performs no (additional) detrimental action. The proposal -covers basic string functions as well as a few non-reenterable functions +The proposal reveals itself to be very similar to Microsoft's "StrSafe" +library. The functions are basically the same as other standard C library +string functions except that destination parameters are paired with an +additional length parameter of type rsize_t. rsize_t is the same as size_t, +however, the range is checked to make sure its between 1 and RSIZE_MAX. Like +Bstrlib, the functions perform a "parameter check". Unlike Bstrlib, when a +parameter check fails, rather than simply outputing accumulatable error +statuses, they call a user settable global error function handler, and upon +return of control performs no (additional) detrimental action. The proposal +covers basic string functions as well as a few non-reenterable functions (asctime, ctime, and strtok). 1. Still based solely on char * buffers (and therefore strlen() and strcat() @@ -2673,30 +2673,30 @@ covers basic string functions as well as a few non-reenterable functions 4. No attempt to enhance functionality of the C library. 5. Introduces a new error scenario (strings exceeding RSIZE_MAX length). -The hope is that by exposing the buffer length requirements there will be -fewer buffer overrun errors. However, the error modes are really just -transformed, rather than removed. The real problem of buffer overflows is -that they all happen as a result of erroneous programming. So forcing -programmers to manually deal with buffer limits, will make them more aware of +The hope is that by exposing the buffer length requirements there will be +fewer buffer overrun errors. However, the error modes are really just +transformed, rather than removed. The real problem of buffer overflows is +that they all happen as a result of erroneous programming. So forcing +programmers to manually deal with buffer limits, will make them more aware of the problem but doesn't remove the possibility of erroneous programming. So a programmer that erroneously mixes up the rsize_t parameters is no better off -from a programmer that introduces potential buffer overflows through other -more typical lapses. So at best this may reduce the rate of erroneous +from a programmer that introduces potential buffer overflows through other +more typical lapses. So at best this may reduce the rate of erroneous programming, rather than making any attempt at removing failure modes. -The error handler can discriminate between types of failures, but does not -take into account any callsite context. So the problem is that the error is -going to be manifest in a piece of code, but there is no pointer to that -code. It would seem that passing in the call site __FILE__, __LINE__ as -parameters would be very useful, but the API clearly doesn't support such a -thing (it would increase code bloat even more than the extra length +The error handler can discriminate between types of failures, but does not +take into account any callsite context. So the problem is that the error is +going to be manifest in a piece of code, but there is no pointer to that +code. It would seem that passing in the call site __FILE__, __LINE__ as +parameters would be very useful, but the API clearly doesn't support such a +thing (it would increase code bloat even more than the extra length parameter does, and would require macro tricks to implement). -The Bstrlib C API takes the position that error handling needs to be done at -the callsite, and just tries to make it as painless as possible. Furthermore, -error modes are removed by supporting auto-growing strings and aliasing. For -capturing errors in more central code fragments, Bstrlib's C++ API uses -exception handling extensively, which is superior to the leaf-only error +The Bstrlib C API takes the position that error handling needs to be done at +the callsite, and just tries to make it as painless as possible. Furthermore, +error modes are removed by supporting auto-growing strings and aliasing. For +capturing errors in more central code fragments, Bstrlib's C++ API uses +exception handling extensively, which is superior to the leaf-only error handler approach. Comparison with Managed String Library CERT proposal @@ -2705,65 +2705,65 @@ Comparison with Managed String Library CERT proposal The main webpage for the managed string library: http://www.cert.org/secure-coding/managedstring.html -Robert Seacord at CERT has proposed a C string library that he calls the -"Managed String Library" for C. Like Bstrlib, it introduces a new type -which is called a managed string. The structure of a managed string -(string_m) is like a struct tagbstring but missing the length field. This -internal structure is considered opaque. The length is, like the C standard -library, always computed on the fly by searching for a terminating NUL on -every operation that requires it. So it suffers from every performance -problem that the C standard library suffers from. Interoperating with C -string APIs (like printf, fopen, or anything else that takes a string -parameter) requires copying to additionally allocating buffers that have to -be manually freed -- this makes this library probably slower and more +Robert Seacord at CERT has proposed a C string library that he calls the +"Managed String Library" for C. Like Bstrlib, it introduces a new type +which is called a managed string. The structure of a managed string +(string_m) is like a struct tagbstring but missing the length field. This +internal structure is considered opaque. The length is, like the C standard +library, always computed on the fly by searching for a terminating NUL on +every operation that requires it. So it suffers from every performance +problem that the C standard library suffers from. Interoperating with C +string APIs (like printf, fopen, or anything else that takes a string +parameter) requires copying to additionally allocating buffers that have to +be manually freed -- this makes this library probably slower and more cumbersome than any other string library in existence. The library gives a fully populated error status as the return value of every -string function. The hope is to be able to diagnose all problems -specifically from the return code alone. Comparing this to Bstrlib, which -aways returns one consistent error message, might make it seem that Bstrlib -would be harder to debug; but this is not true. With Bstrlib, if an error +string function. The hope is to be able to diagnose all problems +specifically from the return code alone. Comparing this to Bstrlib, which +aways returns one consistent error message, might make it seem that Bstrlib +would be harder to debug; but this is not true. With Bstrlib, if an error occurs there is always enough information from just knowing there was an error -and examining the parameters to deduce exactly what kind of error has -happened. The managed string library thus gives up nested function calls +and examining the parameters to deduce exactly what kind of error has +happened. The managed string library thus gives up nested function calls while achieving little benefit, while Bstrlib does not. -One interesting feature that "managed strings" has is the idea of data +One interesting feature that "managed strings" has is the idea of data sanitization via character set whitelisting. That is to say, a globally -definable filter that makes any attempt to put invalid characters into strings -lead to an error and not modify the string. The author gives the following +definable filter that makes any attempt to put invalid characters into strings +lead to an error and not modify the string. The author gives the following example: // create valid char set if (retValue = strcreate_m(&str1, "abc") ) { fprintf( - stderr, - "Error %d from strcreate_m.\n", + stderr, + "Error %d from strcreate_m.\n", retValue ); - } + } if (retValue = setcharset(str1)) { fprintf( - stderr, - "Error %d from setcharset().\n", + stderr, + "Error %d from setcharset().\n", retValue ); } if (retValue = strcreate_m(&str1, "aabbccabc")) { fprintf( - stderr, - "Error %d from strcreate_m.\n", + stderr, + "Error %d from strcreate_m.\n", retValue ); } // create string with invalid char set if (retValue = strcreate_m(&str1, "abbccdabc")) { fprintf( - stderr, - "Error %d from strcreate_m.\n", + stderr, + "Error %d from strcreate_m.\n", retValue ); - } + } Which we can compare with a more Bstrlib way of doing things: @@ -2781,38 +2781,38 @@ Which we can compare with a more Bstrlib way of doing things: bstring str1 = bCreateWithFilter ("aabbccabc", &charFilter); bstring str2 = bCreateWithFilter ("aabbccdabc", &charFilter); -The first thing we should notice is that with the Bstrlib approach you can -have different filters for different strings if necessary. Furthermore, -selecting a charset filter in the Managed String Library is uni-contextual. -That is to say, there can only be one such filter active for the entire -program, which means its usage is not well defined for intermediate library -usage (a library that uses it will interfere with user code that uses it, and -vice versa.) It is also likely to be poorly defined in multi-threading +The first thing we should notice is that with the Bstrlib approach you can +have different filters for different strings if necessary. Furthermore, +selecting a charset filter in the Managed String Library is uni-contextual. +That is to say, there can only be one such filter active for the entire +program, which means its usage is not well defined for intermediate library +usage (a library that uses it will interfere with user code that uses it, and +vice versa.) It is also likely to be poorly defined in multi-threading environments. There is also a question as to whether the data sanitization filter is checked on every operation, or just on creation operations. Since the charset can be set arbitrarily at run time, it might be set *after* some managed strings have been created. This would seem to imply that all functions should run this -additional check every time if there is an attempt to enforce this. This +additional check every time if there is an attempt to enforce this. This would make things tremendously slow. On the other hand, if it is assumed that -only creates and other operations that take char *'s as input need be checked -because the charset was only supposed to be called once at and before any -other managed string was created, then one can see that its easy to cover -Bstrlib with equivalent functionality via a few wrapper calls such as the +only creates and other operations that take char *'s as input need be checked +because the charset was only supposed to be called once at and before any +other managed string was created, then one can see that its easy to cover +Bstrlib with equivalent functionality via a few wrapper calls such as the example given above. And finally we have to question the value of sanitation in the first place. For example, for httpd servers, there is generally a requirement that the -URLs parsed have some form that avoids undesirable translation to local file -system filenames or resources. The problem is that the way URLs can be -encoded, it must be completely parsed and translated to know if it is using +URLs parsed have some form that avoids undesirable translation to local file +system filenames or resources. The problem is that the way URLs can be +encoded, it must be completely parsed and translated to know if it is using certain invalid character combinations. That is to say, merely filtering each character one at a time is not necessarily the right way to ensure that a string has safe contents. -In the article that describes this proposal, it is claimed that it fairly -closely approximates the existing C API semantics. On this point we should +In the article that describes this proposal, it is claimed that it fairly +closely approximates the existing C API semantics. On this point we should compare this "closeness" with Bstrlib: Bstrlib Managed String Library @@ -2826,7 +2826,7 @@ String literals bsStatic, bsStaticBlk strcreate_m() Transparency Complete None -Its pretty clear that the semantic mapping from C strings to Bstrlib is fairly +Its pretty clear that the semantic mapping from C strings to Bstrlib is fairly straightforward, and that in general semantic capabilities are the same or superior in Bstrlib. On the other hand the Managed String Library is either missing semantics or changes things fairly significantly. @@ -2839,33 +2839,33 @@ http://www.annexia.org/freeware/c2lib 1. Still based solely on char * buffers (and therefore strlen() and strcat() is still O(n), and there are no faster streq() comparison functions.) - Their suggestion that alternatives which wrap the string data type (such as + Their suggestion that alternatives which wrap the string data type (such as bstring does) imposes a difficulty in interoperating with the C langauge's ordinary C string library is not founded. 2. Introduction of memory (and vector?) abstractions imposes a learning curve, and some kind of memory usage policy that is outside of the strings themselves (and therefore must be maintained by the developer.) 3. The API is massive, and filled with all sorts of trivial (pjoin) and - controvertial (pmatch -- regular expression are not sufficiently + controvertial (pmatch -- regular expression are not sufficiently standardized, and there is a very large difference in performance between - compiled and non-compiled, REs) functions. Bstrlib takes a decidely + compiled and non-compiled, REs) functions. Bstrlib takes a decidely minimal approach -- none of the functionality in c2lib is difficult or challenging to implement on top of Bstrlib (except the regex stuff, which is going to be difficult, and controvertial no matter what.) -4. Understanding why c2lib is the way it is pretty much requires a working +4. Understanding why c2lib is the way it is pretty much requires a working knowledge of Perl. bstrlib requires only knowledge of the C string library while providing just a very select few worthwhile extras. 5. It is attached to a lot of cruft like a matrix math library (that doesn't - include any functions for getting the determinant, eigenvectors, - eigenvalues, the matrix inverse, test for singularity, test for - orthogonality, a grahm schmit orthogonlization, LU decomposition ... I + include any functions for getting the determinant, eigenvectors, + eigenvalues, the matrix inverse, test for singularity, test for + orthogonality, a grahm schmit orthogonlization, LU decomposition ... I mean why bother?) Convincing a development house to use c2lib is likely quite difficult. It introduces too much, while not being part of any kind of standards body. The code must therefore be trusted, or maintained by those that use it. While -bstring offers nothing more on this front, since its so much smaller, covers -far less in terms of scope, and will typically improve string performance, +bstring offers nothing more on this front, since its so much smaller, covers +far less in terms of scope, and will typically improve string performance, the barrier to usage should be much smaller. Comparison with stralloc/qmail @@ -2878,7 +2878,7 @@ http://cr.yp.to/lib/stralloc.html 1. Library is very very minimal. A little too minimal. 2. Untargetted source parameters are not declared const. 3. Slightly different expected emphasis (like _cats function which takes an - ordinary C string char buffer as a parameter.) Its clear that the + ordinary C string char buffer as a parameter.) Its clear that the remainder of the C string library is still required to perform more useful string operations. @@ -2887,36 +2887,36 @@ for bstring. But its clear that this was a quickly written hack whose goals are clearly a subset of what Bstrlib supplies. For anyone who is served by stralloc, Bstrlib is complete substitute that just adds more functionality. -stralloc actually uses the interesting policy that a NULL data pointer +stralloc actually uses the interesting policy that a NULL data pointer indicates an empty string. In this way, non-static empty strings can be declared without construction. This advantage is minimal, since static empty bstrings can be declared inline without construction, and if the string needs -to be written to it should be constructed from an empty string (or its first +to be written to it should be constructed from an empty string (or its first initializer) in any event. wxString class -------------- -This is the string class used in the wxWindows project. A description of +This is the string class used in the wxWindows project. A description of wxString can be found here: http://www.wxwindows.org/manuals/2.4.2/wx368.htm#wxstring -This C++ library is similar to CBString. However, it is littered with +This C++ library is similar to CBString. However, it is littered with trivial functions (IsAscii, UpperCase, RemoveLast etc.) 1. There is no C implementation. -2. The memory management strategy is to allocate a bounded fixed amount of - additional space on each resize, meaning that it does not have the - log_2(n) property that Bstrlib has (it will thrash very easily, cause - massive fragmentation in common heap implementations, and can easily be a +2. The memory management strategy is to allocate a bounded fixed amount of + additional space on each resize, meaning that it does not have the + log_2(n) property that Bstrlib has (it will thrash very easily, cause + massive fragmentation in common heap implementations, and can easily be a common source of performance problems). -3. The library uses a "copy on write" strategy, meaning that it has to deal +3. The library uses a "copy on write" strategy, meaning that it has to deal with multithreading problems. Vstr ---- -This is a highly orthogonal C string library with an emphasis on +This is a highly orthogonal C string library with an emphasis on networking/realtime programming. It can be found here: http://www.and.org/vstr/ @@ -2925,23 +2925,23 @@ http://www.and.org/vstr/ 2. The API and implementation is very large (owing to its orthogonality) and can lead to difficulty in understanding its exact functionality. 3. An obvious dependency on gnu tools (confusing make configure step) -4. Uses a reference counting system, meaning that it is not likely to be +4. Uses a reference counting system, meaning that it is not likely to be thread safe. -The implementation has an extreme emphasis on performance for nontrivial -actions (adds, inserts and deletes are all constant or roughly O(#operations) -time) following the "zero copy" principle. This trades off performance of -trivial functions (character access, char buffer access/coersion, alias -detection) which becomes significantly slower, as well as incremental -accumulative costs for its searching/parsing functions. Whether or not Vstr -wins any particular performance benchmark will depend a lot on the benchmark, +The implementation has an extreme emphasis on performance for nontrivial +actions (adds, inserts and deletes are all constant or roughly O(#operations) +time) following the "zero copy" principle. This trades off performance of +trivial functions (character access, char buffer access/coersion, alias +detection) which becomes significantly slower, as well as incremental +accumulative costs for its searching/parsing functions. Whether or not Vstr +wins any particular performance benchmark will depend a lot on the benchmark, but it should handily win on some, while losing dreadfully on others. -The learning curve for Vstr is very steep, and it doesn't come with any -obvious way to build for Windows or other platforms without gnu tools. At -least one mechanism (the iterator) introduces a new undefined scenario -(writing to a Vstr while iterating through it.) Vstr has a very large -footprint, and is very ambitious in its total functionality. Vstr has no C++ +The learning curve for Vstr is very steep, and it doesn't come with any +obvious way to build for Windows or other platforms without gnu tools. At +least one mechanism (the iterator) introduces a new undefined scenario +(writing to a Vstr while iterating through it.) Vstr has a very large +footprint, and is very ambitious in its total functionality. Vstr has no C++ API. Vstr usage requires context initialization via vstr_init() which must be run @@ -2949,24 +2949,24 @@ in a thread-local context. Given the totally reference based architecture this means that sharing Vstrings across threads is not well defined, or at least not safe from race conditions. This API is clearly geared to the older standard of fork() style multitasking in UNIX, and is not safely transportable -to modern shared memory multithreading available in Linux and Windows. There -is no portable external solution making the library thread safe (since it +to modern shared memory multithreading available in Linux and Windows. There +is no portable external solution making the library thread safe (since it requires a mutex around each Vstr context -- not each string.) In the documentation for this library, a big deal is made of its self hosted s(n)printf-like function. This is an issue for older compilers that don't include vsnprintf(), but also an issue because Vstr has a slow conversion to -'\0' terminated char * mechanism. That is to say, using "%s" to format data -that originates from Vstr would be slow without some sort of native function -to do so. Bstrlib sidesteps the issue by relying on what snprintf-like -functionality does exist and having a high performance conversion to a char * +'\0' terminated char * mechanism. That is to say, using "%s" to format data +that originates from Vstr would be slow without some sort of native function +to do so. Bstrlib sidesteps the issue by relying on what snprintf-like +functionality does exist and having a high performance conversion to a char * compatible string so that "%s" can be used directly. Str Library ----------- This is a fairly extensive string library, that includes full unicode support -and targetted at the goal of out performing MFC and STL. The architecture, +and targetted at the goal of out performing MFC and STL. The architecture, similarly to MFC's CStrings, is a copy on write reference counting mechanism. http://www.utilitycode.com/str/default.aspx @@ -2975,13 +2975,13 @@ http://www.utilitycode.com/str/default.aspx 2. C++ only. This library, like Vstr, uses a ref counting system. There is only so deeply -I can analyze it, since I don't have a license for it. However, performance -improvements over MFC's and STL, doesn't seem like a sufficient reason to -move your source base to it. For example, in the future, Microsoft may +I can analyze it, since I don't have a license for it. However, performance +improvements over MFC's and STL, doesn't seem like a sufficient reason to +move your source base to it. For example, in the future, Microsoft may improve the performance CString. -It should be pointed out that performance testing of Bstrlib has indicated -that its relative performance advantage versus MFC's CString and STL's +It should be pointed out that performance testing of Bstrlib has indicated +that its relative performance advantage versus MFC's CString and STL's std::string is at least as high as that for the Str library. libmib astrings @@ -2992,17 +2992,17 @@ functionality. http://www.mibsoftware.com/libmib/astring/ This package basically references strings through char ** pointers and assumes -they are pointing to the top of an allocated heap entry (or NULL, in which +they are pointing to the top of an allocated heap entry (or NULL, in which case memory will be newly allocated from the heap.) So its still up to user to mix and match the older C string functions with these functions whenever pointer arithmetic is used (i.e., there is no leveraging of the type system -to assert semantic differences between references and base strings as Bstrlib -does since no new types are introduced.) Unlike Bstrlib, exact string length -meta data is not stored, thus requiring a strlen() call on *every* string +to assert semantic differences between references and base strings as Bstrlib +does since no new types are introduced.) Unlike Bstrlib, exact string length +meta data is not stored, thus requiring a strlen() call on *every* string writing operation. The library is very small, covering only a handful of C's functions. -While this is better than nothing, it is clearly slower than even the +While this is better than nothing, it is clearly slower than even the standard C library, less safe and less functional than Bstrlib. To explain the advantage of using libmib, their website shows an example of @@ -3024,7 +3024,7 @@ is avoided using libmib: if (!astrcpy(&pasz,getenv("PATH"))) /* malloc error */ exit(-1); if (!astrcat(&pasz,pszExtraPath)) /* malloc error */ exit(-1); - + /* Finally, a "limitless" printf! we can use */ asprintf(&paszOut,"Checking...%s\n",pasz);fputs(paszOut,stdout); @@ -3042,9 +3042,9 @@ However, compare this to Bstrlib: bdestroy (out); Besides being shorter, we can see that error handling can be deferred right -to the very end. Also, unlike the above two versions, if getenv() returns -with NULL, the Bstrlib version will not exhibit undefined behavior. -Initialization starts with the relevant content rather than an extra +to the very end. Also, unlike the above two versions, if getenv() returns +with NULL, the Bstrlib version will not exhibit undefined behavior. +Initialization starts with the relevant content rather than an extra autoinitialization step. libclc @@ -3072,8 +3072,8 @@ http://firestuff.org/ size, with safety limited to only half of the functions. Firestring was originally just a wrapper of char * functionality with extra -length parameters. However, it has been augmented with the inclusion of the -estr type which has similar functionality to stralloc. But firestring does +length parameters. However, it has been augmented with the inclusion of the +estr type which has similar functionality to stralloc. But firestring does not nearly cover the functional scope of Bstrlib. Safe C String Library @@ -3083,21 +3083,21 @@ A library written for the purpose of increasing safety and power to C's string handling capabilities. http://www.zork.org/safestr/safestr.html -1. While the safestr_* functions are safe in of themselves, interoperating +1. While the safestr_* functions are safe in of themselves, interoperating with char * string has dangerous unsafe modes of operation. 2. The architecture of safestr's causes the base pointer to change. Thus, - its not practical/safe to store a safestr in multiple locations if any + its not practical/safe to store a safestr in multiple locations if any single instance can be manipulated. 3. Dependent on an additional error handling library. 4. Uses reference counting, meaning that it is either not thread safe or slow and not portable. -I think the idea of reallocating (and hence potentially changing) the base -pointer is a serious design flaw that is fatal to this architecture. True -safety is obtained by having automatic handling of all common scenarios +I think the idea of reallocating (and hence potentially changing) the base +pointer is a serious design flaw that is fatal to this architecture. True +safety is obtained by having automatic handling of all common scenarios without creating implicit constraints on the user. -Because of its automatic temporary clean up system, it cannot use "const" +Because of its automatic temporary clean up system, it cannot use "const" semantics on input arguments. Interesting anomolies such as: safestr_t s, t; @@ -3105,24 +3105,24 @@ semantics on input arguments. Interesting anomolies such as: SAFESTR_TEMP (" "), SAFESTR_TEMP (".")); /* t is now undefined. */ -are possible. If one defines a function which takes a safestr_t as a -parameter, then the function would not know whether or not the safestr_t is -defined after it passes it to a safestr library function. The author -recommended method for working around this problem is to examine the +are possible. If one defines a function which takes a safestr_t as a +parameter, then the function would not know whether or not the safestr_t is +defined after it passes it to a safestr library function. The author +recommended method for working around this problem is to examine the attributes of the safestr_t within the function which is to modify any of its parameters and play games with its reference count. I think, therefore, that the whole SAFESTR_TEMP idea is also fatally broken. -The library implements immutability, optional non-resizability, and a "trust" -flag. This trust flag is interesting, and suggests that applying any -arbitrary sequence of safestr_* function calls on any set of trusted strings -will result in a trusted string. It seems to me, however, that if one wanted -to implement a trusted string semantic, one might do so by actually creating -a different *type* and only implement the subset of string functions that are -deemed safe (i.e., user input would be excluded, for example.) This, in -essence, would allow the compiler to enforce trust propogation at compile -time rather than run time. Non-resizability is also interesting, however, -it seems marginal (i.e., to want a string that cannot be resized, yet can be +The library implements immutability, optional non-resizability, and a "trust" +flag. This trust flag is interesting, and suggests that applying any +arbitrary sequence of safestr_* function calls on any set of trusted strings +will result in a trusted string. It seems to me, however, that if one wanted +to implement a trusted string semantic, one might do so by actually creating +a different *type* and only implement the subset of string functions that are +deemed safe (i.e., user input would be excluded, for example.) This, in +essence, would allow the compiler to enforce trust propogation at compile +time rather than run time. Non-resizability is also interesting, however, +it seems marginal (i.e., to want a string that cannot be resized, yet can be modified and yet where a fixed sized buffer is undesirable.) =============================================================================== @@ -3158,7 +3158,7 @@ License ------- The Better String Library is available under either the BSD license (see the -accompanying license.txt) or the Gnu Public License version 2 (see the +accompanying license.txt) or the Gnu Public License version 2 (see the accompanying gpl.txt) at the option of the user. =============================================================================== diff --git a/tests/test_driver.txt b/tests/test_driver.txt index 1bd3748971..b9af62ad23 100644 --- a/tests/test_driver.txt +++ b/tests/test_driver.txt @@ -9,10 +9,10 @@ where options are: delay between tests -s, --save - save output images as .png + save output images as .png -q, --quiet - don't display graphical output + don't display graphical output -v, --verbose print extra output @@ -21,16 +21,16 @@ where options are: extra extra verbose --force-opengl - select OpenGL driver + select OpenGL driver --force-opengl-1.2 - restrict Allegro to OpenGL 1.2 + restrict Allegro to OpenGL 1.2 --force-opengl-2.0 - restrict Allegro to OpenGL 2.0 + restrict Allegro to OpenGL 2.0 --force-d3d - select Direct3D driver + select Direct3D driver If the list of tests is omitted then every test in the config file will be run. Otherwise each test named on the command line is run. For convenience, you may diff --git a/tools/x11/xkeymap.txt b/tools/x11/xkeymap.txt index f981f91614..32700b841f 100644 --- a/tools/x11/xkeymap.txt +++ b/tools/x11/xkeymap.txt @@ -13,7 +13,7 @@ by Michael Bukin, modified by Elias Pschernig - Select Allegro scancodes from the list, and hit corresponding keys on your keyboard. - + - "Save and exit", and paste the generated file xkeymap.cfg into your allegro.cfg.