From 2551b705a9692c2ba52d129814fa669d5c58f56d Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Thu, 3 Apr 2003 02:36:51 +0000 Subject: "" svn path=/trunk/; revision=532 --- externals/grill/flext/source/flthr.cpp | 15 +- externals/grill/vasp/pd-ex/loudness.pd | 207 +++++++++++++++++++++++ externals/grill/xsample/pd/xrecord~.pd | 291 +++++++++++++++++---------------- 3 files changed, 366 insertions(+), 147 deletions(-) create mode 100644 externals/grill/vasp/pd-ex/loudness.pd (limited to 'externals/grill') diff --git a/externals/grill/flext/source/flthr.cpp b/externals/grill/flext/source/flthr.cpp index d2430041..d15e33d0 100644 --- a/externals/grill/flext/source/flthr.cpp +++ b/externals/grill/flext/source/flthr.cpp @@ -69,14 +69,14 @@ bool flext::StartHelper() // now we have to wait for thread helper to initialize while(!thrhelpid || !thrhelpcond) Sleep(0.001); - // we are reading for threading now! + // we are ready for threading now! } return ok; } #if 0 /*! \brief Stop helper thread - \note not called! + \note Never called! */ bool flext::StopHelper() { @@ -85,6 +85,7 @@ bool flext::StopHelper() } #endif + //! Static helper thread function void flext::ThrHelper(void *) { @@ -242,7 +243,7 @@ bool flext_base::StopThreads() { thr_entry *t; - // signal termination + // signal termination for all object's threads tlmutex.Lock(); for(t = thrhead; t; t = t->nxt) { if(t->This() == this) t->shouldexit = true; @@ -254,12 +255,16 @@ bool flext_base::StopThreads() // wait for thread termination (1 second max.) int cnt; for(int wi = 0; wi < 100; ++wi) { - cnt = 0; + // lock and count this object's threads tlmutex.Lock(); - for(t = thrhead; t; t = t->nxt) + for(cnt = 0,t = thrhead; t; t = t->nxt) if(t->This() == this) ++cnt; tlmutex.Unlock(); + + // if no threads are remaining, we are done if(!cnt) break; + + // Wait Sleep(0.01f); } diff --git a/externals/grill/vasp/pd-ex/loudness.pd b/externals/grill/vasp/pd-ex/loudness.pd new file mode 100644 index 00000000..0aa18a02 --- /dev/null +++ b/externals/grill/vasp/pd-ex/loudness.pd @@ -0,0 +1,207 @@ +#N canvas 258 35 637 398 12; +#N canvas 0 0 450 300 graph1 0; +#X array filter 1024 float 1; +#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#A 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; +#X coords 0 10 1023 -10 200 140 1; +#X restore 412 91 graph; +#X obj 171 129 table buf 10; +#X obj 37 128 wedit buf; +#X obj 44 203 bng 25 250 50 0 empty empty start 0 -6 0 8 -24198 -1 +-1; +#N canvas 289 57 385 501 do 0; +#X obj 40 20 inlet; +#X obj 38 452 outlet; +#X obj 38 175 vasp.parts; +#X msg 40 91 vasp buf; +#N canvas 0 0 256 335 accum 0; +#X obj 31 158 +; +#X obj 65 159 f; +#X obj 32 95 t f b; +#X obj 64 229 /; +#X obj 111 158 1; +#X obj 112 183 +; +#X obj 146 184 f; +#X obj 32 53 inlet; +#X obj 64 276 outlet; +#X obj 169 53 inlet; +#X text 171 28 reset; +#X text 31 31 value; +#X obj 169 79 t b; +#X obj 167 106 0; +#X connect 0 0 1 0; +#X connect 1 0 0 1; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X connect 2 1 4 0; +#X connect 3 0 8 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 5 1; +#X connect 6 0 3 1; +#X connect 7 0 2 0; +#X connect 9 0 12 0; +#X connect 12 0 13 0; +#X connect 13 0 1 1; +#X connect 13 0 6 1; +#X restore 37 382 pd accum; +#X text 129 174 loop over fragments; +#X text 112 380 make average of fragments; +#X msg 102 217 radio detach 1; +#X obj 122 126 vasp.f?; +#X obj 139 92 vasp.! @ref filter; +#X obj 138 261 vasp.db2pow; +#X obj 40 52 t b b; +#N canvas 0 0 257 314 frag 0; +#X obj 40 210 vasp.rms; +#X obj 40 92 vasp.rfft; +#X obj 40 176 vasp.r!fft; +#X obj 40 136 vasp.*; +#X obj 41 65 vasp.!; +#X obj 44 25 inlet; +#X obj 39 248 outlet; +#X obj 152 22 inlet; +#X connect 0 0 6 0; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 4 0; +#X connect 7 0 3 1; +#X restore 37 319 pd frag; +#X text 107 315 filter fragment and calc rms; +#X connect 0 0 11 0; +#X connect 2 0 12 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 7 0 12 0; +#X connect 8 0 2 1; +#X connect 9 0 8 0; +#X connect 9 0 10 0; +#X connect 10 0 12 1; +#X connect 11 0 3 0; +#X connect 11 1 4 1; +#X connect 11 1 7 0; +#X connect 11 1 9 0; +#X connect 12 0 4 0; +#X restore 44 284 pd do; +#X obj 44 348 nbx 5 18 -1e+037 1e+037 0 0 empty empty empty 0 -6 0 +14 -261689 -1 -1 0.699669 256; +#N canvas 277 107 454 304 2db 0; +#X obj 38 19 inlet; +#X obj 40 58 powtodb; +#X obj 40 88 - 100; +#X obj 41 124 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X restore 44 311 pd 2db; +#X text 36 101 load/play buffer; +#X msg 44 246 vasp buf; +#X text 129 347 weighted loudness (decibels); +#N canvas 312 40 678 619 filter 0; +#X obj 46 26 inlet; +#X obj 46 544 vasp.= @ref filter; +#X obj 46 508 t b a; +#X obj 45 572 vasp.u; +#X msg 44 104 0; +#X obj 43 60 route flat dbA dbB dbC; +#X msg 87 102 env -77.8 8 -56.7 16 -39.4 31.5 -26.2 63 -16.1 125 -8.6 +250 -3.2 500 0 1000 1.2 2000 1 4000 -1.1 8000 -6.6 16000 -15.8 31500 +; +#X obj 392 11 loadbang; +#X obj 392 36 samplerate~; +#X obj 45 476 vasp.tilt; +#X obj 107 448 /; +#X text 156 336 large enough temporary buffer; +#X obj 44 338 vasp.! 100000; +#X obj 296 66 / 2; +#X obj 462 14 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 295 38 r smpfrq; +#X obj 43 365 vasp.=; +#X obj 44 309 t b a; +#X obj 67 422 vasp.f?; +#X obj 44 394 t a a b; +#X obj 134 421 vasp.s? @ref filter; +#X msg 129 158 env -43.6 8 -28.5 16 -17.1 31.5 -9.3 63 -4.2 125 -1.3 +250 -0.3 500 0 1000 -0.1 2000 -0.7 4000 -2.9 8000 -8.4 16000 -17.6 +31500; +#X msg 170 221 env -17.7 8 -8.5 16 -3 31.5 -0.8 63 -0.2 125 0 250 0 +500 0 1000 -0.2 2000 -0.8 4000 -3 8000 -8.5 16000 -17.7 31500; +#X text 124 476 resample; +#X connect 0 0 5 0; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 2 1 1 1; +#X connect 4 0 17 0; +#X connect 5 0 4 0; +#X connect 5 1 6 0; +#X connect 5 2 21 0; +#X connect 5 3 22 0; +#X connect 6 0 17 0; +#X connect 7 0 8 0; +#X connect 8 0 13 0; +#X connect 9 0 2 0; +#X connect 10 0 9 1; +#X connect 12 0 16 0; +#X connect 13 0 12 1; +#X connect 14 0 8 0; +#X connect 15 0 13 0; +#X connect 16 0 19 0; +#X connect 17 0 12 0; +#X connect 17 1 16 1; +#X connect 18 0 10 0; +#X connect 19 0 9 0; +#X connect 19 1 18 0; +#X connect 19 2 20 0; +#X connect 20 0 10 1; +#X connect 21 0 17 0; +#X connect 22 0 17 0; +#X restore 471 344 pd filter; +#X msg 416 300 flat; +#X msg 464 299 dbA; +#X obj 11 10 cnv 15 600 50 empty empty loudness 10 22 0 24 -260818 +-1 0; +#X text 202 41 http://www.parasitaere-kapazitaeten.net; +#X text 203 25 needs vasp and wedit; +#X text 203 10 get weighted loudness \, (C)2003 Thomas Grill; +#X msg 499 299 dbB; +#X msg 536 300 dbC; +#X connect 3 0 8 0; +#X connect 4 0 6 0; +#X connect 6 0 5 0; +#X connect 8 0 4 0; +#X connect 11 0 10 0; +#X connect 12 0 10 0; +#X connect 17 0 10 0; +#X connect 18 0 10 0; diff --git a/externals/grill/xsample/pd/xrecord~.pd b/externals/grill/xsample/pd/xrecord~.pd index 80c09f65..c9bfc7ce 100644 --- a/externals/grill/xsample/pd/xrecord~.pd +++ b/externals/grill/xsample/pd/xrecord~.pd @@ -1,142 +1,149 @@ -#N canvas 134 12 857 610 12; -#X obj 14 15 bng 15 250 50 0 empty empty empty 20 8 0 8 -258699 -1 --1; -#X msg 13 35 stop; -#X floatatom 165 248 5 0 0; -#X floatatom 219 248 5 0 0; -#X floatatom 190 170 5 0 0; -#X floatatom 239 171 5 0 0; -#N canvas 0 0 450 300 graph7 0; -#X array buf 10000 float 0; -#X coords 0 1 9999 -1 200 140 1; -#X restore 52 431 graph; -#X obj 91 212 xrecord~ buf; -#X msg 11 69 reset; -#X obj 70 287 snapshot~; -#X floatatom 72 312 7 0 0; -#X obj 18 220 loadbang; -#X msg 10 99 help; -#X obj 175 96 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 1 -; -#X msg 193 93 loop \$1; -#X msg 173 36 0; -#X msg 209 36 200; -#X msg 172 64 draw \$1; -#X obj 411 275 bng 15 250 50 0 empty empty empty 20 8 0 8 -258699 -1 --1; -#X msg 410 295 stop; -#X floatatom 565 485 5 0 0; -#X floatatom 619 485 5 0 0; -#X floatatom 568 427 5 0 0; -#X floatatom 617 428 5 0 0; -#X obj 500 458 xrecord~ buf; -#X msg 409 334 reset; -#X obj 500 518 snapshot~; -#X floatatom 500 548 7 0 0; -#X obj 411 446 loadbang; -#X obj 537 242 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 0 -1; -#X msg 556 239 loop \$1; -#X msg 452 206 0; -#X msg 451 234 draw \$1; -#X obj 538 265 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 -1; -#X msg 556 263 sigmode \$1; -#X msg 409 360 print; -#X obj 581 353 hsl 128 15 -0.001 1 0 1 empty empty empty 20 8 0 8 -225271 --1 -1 12700 1; -#X obj 537 291 tgl 15 0 empty empty empty 20 8 0 8 -225271 -1 -1 0 -1; -#X msg 557 288 mixmode \$1; -#X floatatom 629 381 8 0 0; -#X obj 411 473 metro 30; -#X obj 18 247 metro 30; -#X obj 640 21 osc~ 10; -#X obj 86 78 r~ rec; -#X obj 482 339 r~ rec; -#X obj 678 95 s~ rec; -#X obj 623 48 *~ 1; -#X obj 622 25 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 1 -; -#X obj 719 50 *~ 1; -#X obj 718 27 tgl 15 0 empty empty empty 20 8 0 8 -225271 -1 -1 0 1 -; -#X obj 736 23 adc~; -#X text 198 149 min/max position; -#X text 166 267 min/max position; -#X text 262 96 looping on/off; -#X text 237 65 display refresh; -#X text 52 13 start; -#X text 53 35 stop; -#X text 26 270 position signal; -#X text 619 238 looping on/off; -#X text 644 264 signal mode on/off; -#X text 700 381 trigger signal; -#X text 379 121 <----- message triggered; -#X text 173 368 signal triggered ------->; -#X text 493 185 click to activate auto update; -#X text 432 271 start; -#X text 450 295 stop; -#X text 538 307 mix-in by trigger signal on/off; -#X msg 153 170 all; -#X msg 488 206 100; -#X obj 521 426 line~; -#X msg 520 401 \$1 20; -#X msg 9 135 getattributes; -#X obj 208 211 print A; -#X msg 10 163 getbuffer; -#X connect 0 0 7 0; -#X connect 1 0 7 0; -#X connect 4 0 7 2; -#X connect 5 0 7 3; -#X connect 7 0 9 0; -#X connect 7 1 2 0; -#X connect 7 2 3 0; -#X connect 7 4 72 0; -#X connect 8 0 7 0; -#X connect 9 0 10 0; -#X connect 11 0 41 0; -#X connect 12 0 7 0; -#X connect 13 0 14 0; -#X connect 14 0 7 0; -#X connect 15 0 17 0; -#X connect 16 0 17 0; -#X connect 17 0 7 0; -#X connect 18 0 24 0; -#X connect 19 0 24 0; -#X connect 22 0 24 2; -#X connect 23 0 24 3; -#X connect 24 0 26 0; -#X connect 24 1 20 0; -#X connect 24 2 21 0; -#X connect 25 0 24 0; -#X connect 26 0 27 0; -#X connect 28 0 40 0; -#X connect 29 0 30 0; -#X connect 30 0 24 0; -#X connect 31 0 32 0; -#X connect 32 0 24 0; -#X connect 33 0 34 0; -#X connect 34 0 24 0; -#X connect 35 0 24 0; -#X connect 36 0 39 0; -#X connect 36 0 70 0; -#X connect 37 0 38 0; -#X connect 38 0 24 0; -#X connect 40 0 26 0; -#X connect 41 0 9 0; -#X connect 42 0 46 0; -#X connect 43 0 7 0; -#X connect 44 0 24 0; -#X connect 46 0 45 0; -#X connect 47 0 46 1; -#X connect 48 0 45 0; -#X connect 49 0 48 1; -#X connect 50 0 48 0; -#X connect 50 1 48 0; -#X connect 67 0 7 0; -#X connect 68 0 32 0; -#X connect 69 0 24 1; -#X connect 70 0 69 0; -#X connect 71 0 7 0; -#X connect 73 0 7 0; +#N canvas 134 12 859 612 12; +#X obj 14 15 bng 15 250 50 0 empty empty empty 20 8 0 8 -258699 -1 +-1; +#X msg 13 35 stop; +#X floatatom 165 248 5 0 0 0 - - -; +#X floatatom 219 248 5 0 0 0 - - -; +#X floatatom 190 170 5 0 0 0 - - -; +#X floatatom 239 171 5 0 0 0 - - -; +#N canvas 0 0 450 300 graph7 0; +#X array buf 10000 float 0; +#X coords 0 1 9999 -1 200 140 1; +#X restore 52 431 graph; +#X obj 91 212 xrecord~ buf; +#X msg 11 69 reset; +#X obj 70 287 snapshot~; +#X floatatom 72 312 7 0 0 0 - - -; +#X obj 18 220 loadbang; +#X msg 10 99 help; +#X obj 175 96 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 1 +; +#X msg 193 93 loop \$1; +#X msg 173 36 0; +#X msg 209 36 200; +#X msg 172 64 draw \$1; +#X obj 411 275 bng 15 250 50 0 empty empty empty 20 8 0 8 -258699 -1 +-1; +#X msg 410 295 stop; +#X floatatom 565 485 5 0 0 0 - - -; +#X floatatom 619 485 5 0 0 0 - - -; +#X floatatom 568 427 5 0 0 0 - - -; +#X floatatom 617 428 5 0 0 0 - - -; +#X obj 500 458 xrecord~ buf; +#X msg 409 334 reset; +#X obj 500 518 snapshot~; +#X floatatom 500 548 7 0 0 0 - - -; +#X obj 411 446 loadbang; +#X obj 537 242 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 +1; +#X msg 556 239 loop \$1; +#X msg 452 206 0; +#X msg 451 234 draw \$1; +#X obj 538 265 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 +1; +#X msg 556 263 sigmode \$1; +#X msg 409 360 print; +#X obj 581 353 hsl 128 15 -0.001 1 0 1 empty empty empty 20 8 0 8 -225271 +-1 -1 3200 1; +#X obj 537 291 tgl 15 0 empty empty empty 20 8 0 8 -225271 -1 -1 1 +1; +#X msg 557 288 mixmode \$1; +#X floatatom 629 381 8 0 0 0 - - -; +#X obj 411 473 metro 30; +#X obj 18 247 metro 30; +#X obj 640 21 osc~ 10; +#X obj 86 78 r~ rec; +#X obj 482 339 r~ rec; +#X obj 626 84 s~ rec; +#X obj 623 48 *~ 1; +#X obj 622 25 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 1 1 +; +#X obj 719 50 *~ 1; +#X obj 718 27 tgl 15 0 empty empty empty 20 8 0 8 -225271 -1 -1 0 1 +; +#X obj 736 23 adc~; +#X text 198 149 min/max position; +#X text 166 267 min/max position; +#X text 262 96 looping on/off; +#X text 237 65 display refresh; +#X text 52 13 start; +#X text 53 35 stop; +#X text 26 270 position signal; +#X text 619 238 looping on/off; +#X text 644 264 signal mode on/off; +#X text 700 381 trigger signal; +#X text 379 121 <----- message triggered; +#X text 173 368 signal triggered ------->; +#X text 493 185 click to activate auto update; +#X text 432 271 start; +#X text 450 295 stop; +#X text 538 307 mix-in by trigger signal on/off; +#X msg 153 170 all; +#X msg 488 206 100; +#X obj 521 426 line~; +#X msg 520 401 \$1 20; +#X msg 9 135 getattributes; +#X obj 208 211 print A; +#X msg 10 163 getbuffer; +#X obj 542 51 *~ 1; +#X obj 541 28 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 0 1 +; +#X obj 561 24 noise~; +#X connect 0 0 7 0; +#X connect 1 0 7 0; +#X connect 4 0 7 2; +#X connect 5 0 7 3; +#X connect 7 0 9 0; +#X connect 7 1 2 0; +#X connect 7 2 3 0; +#X connect 7 4 72 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 11 0 41 0; +#X connect 12 0 7 0; +#X connect 13 0 14 0; +#X connect 14 0 7 0; +#X connect 15 0 17 0; +#X connect 16 0 17 0; +#X connect 17 0 7 0; +#X connect 18 0 24 0; +#X connect 19 0 24 0; +#X connect 22 0 24 2; +#X connect 23 0 24 3; +#X connect 24 0 26 0; +#X connect 24 1 20 0; +#X connect 24 2 21 0; +#X connect 25 0 24 0; +#X connect 26 0 27 0; +#X connect 28 0 40 0; +#X connect 29 0 30 0; +#X connect 30 0 24 0; +#X connect 31 0 32 0; +#X connect 32 0 24 0; +#X connect 33 0 34 0; +#X connect 34 0 24 0; +#X connect 35 0 24 0; +#X connect 36 0 39 0; +#X connect 36 0 70 0; +#X connect 37 0 38 0; +#X connect 38 0 24 0; +#X connect 40 0 26 0; +#X connect 41 0 9 0; +#X connect 42 0 46 0; +#X connect 43 0 7 0; +#X connect 44 0 24 0; +#X connect 46 0 45 0; +#X connect 47 0 46 1; +#X connect 48 0 45 0; +#X connect 49 0 48 1; +#X connect 50 0 48 0; +#X connect 50 1 48 0; +#X connect 67 0 7 0; +#X connect 68 0 32 0; +#X connect 69 0 24 1; +#X connect 70 0 69 0; +#X connect 71 0 7 0; +#X connect 73 0 7 0; +#X connect 74 0 45 0; +#X connect 75 0 74 1; +#X connect 76 0 74 0; -- cgit v1.2.1