tuxguitar-src-1.2/0000755000175000017500000000000011273337467013540 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/0000755000175000017500000000000011273337500021063 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/0000755000175000017500000000000011273336125017361 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/0000755000175000017500000000000011273336125016615 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/0000755000175000017500000000000011273336125016400 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/0000755000175000017500000000000011273336125016550 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/0000755000175000017500000000000011273336125017732 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/0000755000175000017500000000000011273336125017312 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/0000755000175000017500000000000011273336125016607 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/0000755000175000017500000000000011273336125021245 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/0000755000175000017500000000000011273336125016402 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/0000755000175000017500000000000011273336125017504 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/0000755000175000017500000000000011273336125016743 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/0000755000175000017500000000000011273336125017467 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/0000755000175000017500000000000011273336125017332 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/0000755000175000017500000000000011273336125017651 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/0000755000175000017500000000000011273336125017124 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/0000755000175000017500000000000011273336125016252 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/0000755000175000017500000000000011273336125016370 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/0000755000175000017500000000000011273336125016235 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jws/0000755000175000017500000000000011273336125016263 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/0000755000175000017500000000000011273336125015462 5ustar julianjuliantuxguitar-src-1.2/misc/0000755000175000017500000000000011273336125014461 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/0000755000175000017500000000000011273336125017321 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/0000755000175000017500000000000011273336125016264 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/0000755000175000017500000000000011273336125016231 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/0000755000175000017500000000000011273336125016245 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/0000755000175000017500000000000011273336125016236 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tray/0000755000175000017500000000000011273336125016437 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/0000755000175000017500000000000011273337505021657 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/0000755000175000017500000000000011273336125020150 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/jni/0000755000175000017500000000000011273336125020141 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/0000755000175000017500000000000011273336125017404 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/0000755000175000017500000000000011273336125017167 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/jni/0000755000175000017500000000000011273336125017160 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/src/0000755000175000017500000000000011273336125017337 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/0000755000175000017500000000000011273336125020521 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/src/0000755000175000017500000000000011273336125020101 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/share/0000755000175000017500000000000011273336125020414 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/0000755000175000017500000000000011273336125017376 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/jni/0000755000175000017500000000000011273336125017367 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/0000755000175000017500000000000011273336125022034 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/jni/0000755000175000017500000000000011273336125022025 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/0000755000175000017500000000000011273336125017171 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/0000755000175000017500000000000011273336125020273 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/share/0000755000175000017500000000000011273336125020606 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/0000755000175000017500000000000011273336125017532 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/0000755000175000017500000000000011273336125020256 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/share/0000755000175000017500000000000011273336125020571 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/0000755000175000017500000000000011273336125020121 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/jni/0000755000175000017500000000000011273336125020112 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/0000755000175000017500000000000011273336125020440 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/share/0000755000175000017500000000000011273336125020753 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/jni/0000755000175000017500000000000011273336125020431 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/src/0000755000175000017500000000000011273336125017713 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/src/0000755000175000017500000000000011273336125017041 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/share/0000755000175000017500000000000011273336125017354 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/0000755000175000017500000000000011273336125017157 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/share/0000755000175000017500000000000011273336125017472 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/jni/0000755000175000017500000000000011273336125017150 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/0000755000175000017500000000000011273336125017024 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/share/0000755000175000017500000000000011273336125017337 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jws/jws/0000755000175000017500000000000011273336125017066 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/lib/0000755000175000017500000000000011273045277016235 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/0000755000175000017500000000000011273336125016251 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/dist/0000755000175000017500000000000011273336125016425 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/xml/0000755000175000017500000000000011273336125016262 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/0000755000175000017500000000000011273336125016564 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/doc/0000755000175000017500000000000011273336125016227 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/src/0000755000175000017500000000000011273336125020110 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/0000755000175000017500000000000011273336125017053 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/jni/0000755000175000017500000000000011273336125017044 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/src/0000755000175000017500000000000011273336125017020 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/0000755000175000017500000000000011273336125017034 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/0000755000175000017500000000000011273336125017025 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tray/src/0000755000175000017500000000000011273336125017226 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/0000755000175000017500000000000011273337510022442 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/0000755000175000017500000000000011273336125020737 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/craigl/0000755000175000017500000000000011273336125020645 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/0000755000175000017500000000000011273336125020173 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/0000755000175000017500000000000011273336125017756 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/src/org/0000755000175000017500000000000011273336125020126 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/0000755000175000017500000000000011273336125021310 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/src/org/0000755000175000017500000000000011273336125020670 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/share/lang/0000755000175000017500000000000011273336125021335 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/0000755000175000017500000000000011273336125020165 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/0000755000175000017500000000000011273336125022623 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/org/0000755000175000017500000000000011273336125017760 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/0000755000175000017500000000000011273336125021062 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/share/lang/0000755000175000017500000000000011273336125021527 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/0000755000175000017500000000000011273336125020321 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/0000755000175000017500000000000011273336125021045 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/share/lang/0000755000175000017500000000000011273336125021512 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/0000755000175000017500000000000011273336125020710 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/0000755000175000017500000000000011273336125021227 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/share/lang/0000755000175000017500000000000011273336125021674 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/src/org/0000755000175000017500000000000011273336125020502 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/src/org/0000755000175000017500000000000011273336125017630 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/share/lang/0000755000175000017500000000000011273336125020275 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/0000755000175000017500000000000011273336125017746 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/share/META-INF/0000755000175000017500000000000011273336125020632 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/share/lang/0000755000175000017500000000000011273336125020413 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/0000755000175000017500000000000011273336125017613 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/share/lang/0000755000175000017500000000000011273336125020260 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jws/jws/files/0000755000175000017500000000000011273045723020171 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/0000755000175000017500000000000011273336125017040 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/plugins/0000755000175000017500000000000011273045310020236 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/lang/0000755000175000017500000000000011273336125017505 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/scales/0000755000175000017500000000000011273336125020036 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/0000755000175000017500000000000011273336125017514 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/skins/0000755000175000017500000000000011273336125017713 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/src/org/0000755000175000017500000000000011273336125020677 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/0000755000175000017500000000000011273336125017642 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/src/org/0000755000175000017500000000000011273336125017607 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/0000755000175000017500000000000011273336125017623 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/org/0000755000175000017500000000000011273336125017614 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tray/src/org/0000755000175000017500000000000011273336125020015 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/0000755000175000017500000000000011273337513023527 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/0000755000175000017500000000000011273336125022021 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/craigl/spectrumanalyzer/0000755000175000017500000000000011273336125024255 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/0000755000175000017500000000000011273336125021255 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/0000755000175000017500000000000011273336125021040 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/0000755000175000017500000000000011273336125021210 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/0000755000175000017500000000000011273336125022372 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/0000755000175000017500000000000011273336125021752 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/0000755000175000017500000000000011273336125021247 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/0000755000175000017500000000000011273336125023705 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/0000755000175000017500000000000011273336125021042 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/0000755000175000017500000000000011273336125022144 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/0000755000175000017500000000000011273336125021403 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/0000755000175000017500000000000011273336125022127 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/0000755000175000017500000000000011273336125021772 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/0000755000175000017500000000000011273336125022311 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/0000755000175000017500000000000011273336125021564 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/0000755000175000017500000000000011273336125020712 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/0000755000175000017500000000000011273336125021030 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/share/META-INF/services/0000755000175000017500000000000011273336125022455 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/0000755000175000017500000000000011273336125020675 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/0000755000175000017500000000000011273336125020122 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/css/0000755000175000017500000000000011273336125020304 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/images/0000755000175000017500000000000011273336125020761 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/js/0000755000175000017500000000000011273336125020130 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/0000755000175000017500000000000011273336125021453 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/0000755000175000017500000000000011273336125022413 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/0000755000175000017500000000000011273336125021410 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/0000755000175000017500000000000011273336125021761 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/0000755000175000017500000000000011273336125020724 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/0000755000175000017500000000000011273336125020671 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/0000755000175000017500000000000011273336125020705 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/0000755000175000017500000000000011273336125020676 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/0000755000175000017500000000000011273336125021077 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/0000755000175000017500000000000011273337516025566 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024055 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023311 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023074 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023244 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024426 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024006 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023303 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125025741 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023076 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024200 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023437 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024163 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024026 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024345 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023620 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022746 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023064 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022731 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022156 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/images/edit/0000755000175000017500000000000011273336125021706 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/images/start/0000755000175000017500000000000011273336125022116 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/share/help/images/tools/0000755000175000017500000000000011273336125022121 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125024015 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022760 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022725 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022741 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125022732 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/tuxguitar/0000755000175000017500000000000011273336125023133 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/0000755000175000017500000000000011273337522026647 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125025351 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/0000755000175000017500000000000011273336125024075 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125024370 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125023653 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/0000755000175000017500000000000011273336125025212 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125024415 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125024577 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/0000755000175000017500000000000011273336125027205 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125023505 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/0000755000175000017500000000000011273336125026224 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125024046 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/0000755000175000017500000000000011273336125024747 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125025322 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125025641 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125024227 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125023355 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/0000755000175000017500000000000011273336125023774 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125024225 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/0000755000175000017500000000000011273336125022742 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125022565 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125023452 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/0000755000175000017500000000000011273336125023124 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/0000755000175000017500000000000011273336125023133 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125024424 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/0000755000175000017500000000000011273336125024254 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125023334 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125023350 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/0000755000175000017500000000000011273336125023341 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/tuxguitar/tray/0000755000175000017500000000000011273336125024112 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/0000755000175000017500000000000011273337535031635 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/0000755000175000017500000000000011273337541027614 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/0000755000175000017500000000000011273337531030276 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/0000755000175000017500000000000011273337525030314 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125026312 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/0000755000175000017500000000000011273336125025235 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125025331 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/0000755000175000017500000000000011273336125024743 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/0000755000175000017500000000000011273336125026352 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/0000755000175000017500000000000011273336125026247 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125025540 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/0000755000175000017500000000000011273336125030634 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/0000755000175000017500000000000011273336125030151 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/0000755000175000017500000000000011273336125024427 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/utils/0000755000175000017500000000000011273336125027364 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/0000755000175000017500000000000011273336125027726 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/0000755000175000017500000000000011273336125027165 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/0000755000175000017500000000000011273336125026633 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/0000755000175000017500000000000011273336125027707 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/0000755000175000017500000000000011273336125024460 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/0000755000175000017500000000000011273336125026107 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125026263 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125026602 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/0000755000175000017500000000000011273336125025673 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/0000755000175000017500000000000011273336125024147 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/0000755000175000017500000000000011273336125026363 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/0000755000175000017500000000000011273336125025766 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/0000755000175000017500000000000011273336125025634 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125025166 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/0000755000175000017500000000000011273336125024402 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/0000755000175000017500000000000011273336125024701 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/0000755000175000017500000000000011273336125024413 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/help/0000755000175000017500000000000011273336125023672 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/helper/0000755000175000017500000000000011273336125024221 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/0000755000175000017500000000000011273336125024063 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/marker/0000755000175000017500000000000011273336125024223 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/0000755000175000017500000000000011273336125024066 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/printer/0000755000175000017500000000000011273336125024425 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/0000755000175000017500000000000011273336125024266 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/table/0000755000175000017500000000000011273336125024031 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/0000755000175000017500000000000011273336125024102 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/transport/0000755000175000017500000000000011273336125024776 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/0000755000175000017500000000000011273336125023707 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/0000755000175000017500000000000011273336125023717 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/0000755000175000017500000000000011273336125023477 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/tg/0000755000175000017500000000000011273336125023177 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/0000755000175000017500000000000011273336125024364 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125024413 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/factory/0000755000175000017500000000000011273336125024573 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/helpers/0000755000175000017500000000000011273336125024566 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/managers/0000755000175000017500000000000011273336125024721 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/0000755000175000017500000000000011273336125024407 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/0000755000175000017500000000000011273336125026265 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/0000755000175000017500000000000011273336125025215 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/0000755000175000017500000000000011273336125024105 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/0000755000175000017500000000000011273336125024135 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/0000755000175000017500000000000011273336125024117 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/0000755000175000017500000000000011273336125030141 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/0000755000175000017500000000000011273336125026547 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/0000755000175000017500000000000011273336125027160 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/0000755000175000017500000000000011273336125030035 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/0000755000175000017500000000000011273336125027367 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/base/0000755000175000017500000000000011273336125025341 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/0000755000175000017500000000000011273336125030325 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/0000755000175000017500000000000011273336125025076 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/0000755000175000017500000000000011273336125025067 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/0000755000175000017500000000000011273336125025075 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/0000755000175000017500000000000011273336125025074 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/0000755000175000017500000000000011273336125025066 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/0000755000175000017500000000000011273336125027421 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/0000755000175000017500000000000011273336125030112 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/0000755000175000017500000000000011273336125030431 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/0000755000175000017500000000000011273336125025743 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/0000755000175000017500000000000011273336125025500 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/0000755000175000017500000000000011273336125026745 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/0000755000175000017500000000000011273336125026227 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/0000755000175000017500000000000011273336125025327 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/0000755000175000017500000000000011273336125026021 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/0000755000175000017500000000000011273336125025321 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/0000755000175000017500000000000011273336125025332 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/0000755000175000017500000000000011273336125025706 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/0000755000175000017500000000000011273336125025717 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/0000755000175000017500000000000011273336125025663 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/0000755000175000017500000000000011273336125026043 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/0000755000175000017500000000000011273336125025347 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/0000755000175000017500000000000011273336125026242 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/system/0000755000175000017500000000000011273336125025726 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/0000755000175000017500000000000011273336125025542 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/0000755000175000017500000000000011273336125025506 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/0000755000175000017500000000000011273336125026436 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/0000755000175000017500000000000011273336125025354 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/0000755000175000017500000000000011273336125025512 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/0000755000175000017500000000000011273336125026032 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/0000755000175000017500000000000011273336125026363 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/0000755000175000017500000000000011273336125025535 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/0000755000175000017500000000000011273336125025717 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/0000755000175000017500000000000011273336125025521 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/0000755000175000017500000000000011273336125025161 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/0000755000175000017500000000000011273336125025004 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/help/doc/0000755000175000017500000000000011273336125024437 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/0000755000175000017500000000000011273336125025027 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/0000755000175000017500000000000011273336125025040 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/0000755000175000017500000000000011273336125024663 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/0000755000175000017500000000000011273336125025533 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/0000755000175000017500000000000011273336125025401 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/0000755000175000017500000000000011273336125026574 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/0000755000175000017500000000000011273336125026051 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/0000755000175000017500000000000011273336125025747 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/0000755000175000017500000000000011273336125025565 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/0000755000175000017500000000000011273336125025414 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/0000755000175000017500000000000011273336125025171 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/0000755000175000017500000000000011273336125025663 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/0000755000175000017500000000000011273336125026405 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/0000755000175000017500000000000011273336125026026 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/0000755000175000017500000000000011273336125027044 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/helper/0000755000175000017500000000000011273336125025414 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/0000755000175000017500000000000011273336125025047 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/0000755000175000017500000000000011273336125025031 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/0000755000175000017500000000000011273336125032142 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/0000755000175000017500000000000011273336125027704 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/0000755000175000017500000000000011273336125030100 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/0000755000175000017500000000000011273336125030626 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/0000755000175000017500000000000011273336125030516 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/0000755000175000017500000000000011273336125031430 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/0000755000175000017500000000000011273336125032064 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/0000755000175000017500000000000011273336125032622 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/0000755000175000017500000000000011273336125027572 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/0000755000175000017500000000000011273336125027103 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/0000755000175000017500000000000011273336125027754 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/0000755000175000017500000000000011273336125027735 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/0000755000175000017500000000000011273336125026312 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/0000755000175000017500000000000011273336125026106 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/0000755000175000017500000000000011273336125026476 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/0000755000175000017500000000000011273336125027006 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/0000755000175000017500000000000011273336125026654 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/0000755000175000017500000000000011273336125030062 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/0000755000175000017500000000000011273336125027374 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/0000755000175000017500000000000011273336125026661 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/0000755000175000017500000000000011273336125026477 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/0000755000175000017500000000000011273336125027024 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/0000755000175000017500000000000011273336125027751 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/0000755000175000017500000000000011273336125026365 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/xml/0000755000175000017500000000000011273336125025771 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/0000755000175000017500000000000011273336125027175 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/0000755000175000017500000000000011273336125027324 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/0000755000175000017500000000000011273336125026767 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/0000755000175000017500000000000011273336125027650 5ustar julianjuliantuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/0000755000175000017500000000000011273336125031766 5ustar julianjulian././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/tuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/0000755000175000017500000000000011273336125033603 5ustar julianjuliantuxguitar-src-1.2/README0000644000175000017500000000345011273045224014405 0ustar julianjulianDESCRIPTION: TuxGuitar is a multitrack tablature editor and player written in Java-SWT. LICENSE: TuxGuitar is released under the GNU Lesser General Public License. REQUIREMENTS: Java Runtime Environment 1.4.X or later installed in your system. PROBLEMS: * SWT: If you see an error like "java.lang.UnsatisfiedLinkError", you will need to replace your swt shared library files and jar packages compiled for your system. TuxGuitar comes with SWT for linux-x86, linux-x86_64, mac and win32-x86. make sure download the correct file. if you need another version, download your SWT and replace in lib folder. If you don't have SWT installed in one of this locations: /lib, /usr/lib, /usr/local/lib or TuxGuitar/lib. You will need to add its path to the LD_LIBRARY_PATH and CLASSPATH environment vars. Export LD_LIBRARY_PATH and CLASSPATH: $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_swt_library_folder/ $export CLASSPATH=$CLASSPATH:/your_swt_library_folder/swt.jar $/home/user/TuxGuitar-*/TuxGuitar * UNSUPPORTED CLASS VERSION: java.lang.UnsupportedClassVersionError. This means that your JVM is not compatible with the JVM used to create the binaries. If you see a message like this, you will need to rebuild TuxGuitar from sources. * FAILDED TO LOAD PLUGINS: TuxGuitar 1.0 has better JVM compatibility than older releases. But some plugins (e.g: Java Sound Api plugin) still depends on Sun Java(TM) Development Kit (JDK) 5.0. if you have installed more than one JVM in your system, you can use one of these environment vars: JAVA or JAVA_HOME to run TuxGuitar with a specified JVM. Export JAVA: $export JAVA=/usr/lib/jvm/java-1.5.0-sun/bin/java $/home/user/TuxGuitar-*/tuxguitar Export JAVA_HOME: $export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun $/home/user/TuxGuitar-*/tuxguitar tuxguitar-src-1.2/LICENSE0000644000175000017500000006034311273045224014536 0ustar julianjulianGNU Lesser General Public License Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS TuxGuitar is a multitrack tablature editor and player. Copyright (C) 2005, By Julian Gabriel Casadesus This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA tuxguitar-src-1.2/ChangeLog0000644000175000017500000000072511273045224015301 0ustar julianjulianTuxGuitar 1.2 changes: * Fix some bugs * Support measure range to loop * Transpose notes feature * Optionally transpose afected notes when change tuning * Move beats left|right support * More song properties options. * Add multiple measure support * Clean multiple measure support * Number of pastes support * Better lilypond plugin * Better fluidsynth plugin * New jack plugin * New community integration plugin * New cocoa integration plugin * New audio unit plugin tuxguitar-src-1.2/AUTHORS0000644000175000017500000000630011273045224014572 0ustar julianjulianJulian Gabriel Casadesus * Project Admin * Developer * Contact: http://www.herac.com.ar Hernan Andres Casadesus * Developer * Contact: http://www.herac.com.ar Nahuel Portilla * Developer * Contact: Nikola Kolarovic * Developer * Documentation * Serbian translation * Contact: Aaron Spike * Developer * Contact: http://www.ekips.org Ersplus * French translation * Ersplus Icon Theme * Contact: http://ersplus.free.fr Licnep * Blue Serious Icon Theme * Contact: Sascha Riemer * Lavender Icon Theme * Contact: Auria * CoreAudio Plugin for MacOS * Contact: Herak * Developer * Contact: Tomasz Bojczuk * Polish translation * Contact: Jose Gato * Mac version * Contact: Thomas Thiel * Deutsch translation * Contact: http://www.wolfchild.de Sergio Abreu * Portuguese translation * Contact: http://sitedosergio.sitesbr.net Markon * Italian translation * Contact: Zdenek Kunicky * Czech translation * Contact: Máté Huszár * Hungarian translation PTT Team * Chinese (Taiwan) translation * Contact: http://www.ptt.cc Shuo Huang * Chinese (GB) translation * Contact: http://www.cucum.cn Philippe Coval * Debian/Ubuntu package maintainer ; Startup script * French translation * Contact: http://rzr.online.fr/contrib.htm Orcan Ogetbil * Fedora package maintainer * Contact: John Gustafsson * Swedish translation * Contact: Pietro Cerutti * FreeBSD port maintainer * Contact: http://www.gahr.ch/ Facundo Corradini * Documentation * Contact: http://www.exitoweb.com.ar Gabe Hargrave * Documentation * Contact: Vadim Ipatov * Russian translation * Contact: http://www.kmtn.ru/~euphoria Zoya Ignatova * Russian translation * Contact: Serge van Namen * Dutch translation * Contact: Yuriy Shakalov * Ukrainian translation * Contact: Nguyen Dinh Trung * Vietnamese translation * Contact: Keisuke Kato * Japanese translation * Contact: http://mingaku.selfip.org/ Beat Weisskopf * Deutsch translation * Contact: Xevi Noe i Nogueiras * Catalan translation * Contact: Jean-Pierre POULIN * Scales contributor * Contact: http://www.jeanpierrepoulin.com/ Lobo * Basque translation * Contact: http://www.myspace.com/lobotheguitardudetuxguitar-src-1.2/COPYING0000644000175000017500000006034311273045224014564 0ustar julianjulianGNU Lesser General Public License Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS TuxGuitar is a multitrack tablature editor and player. Copyright (C) 2005, By Julian Gabriel Casadesus This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA tuxguitar-src-1.2/build_gcj.sh0000755000175000017500000000335711273052013016006 0ustar julianjulian#!/bin/bash ##SCRIPT DIR DIR_NAME=`dirname "$0"` DIR_NAME=`cd "$DIR_NAME"; pwd` cd ${DIR_NAME} export PREFIX=./ export SWT_PATH=${DIR_NAME}/TuxGuitar/lib/swt.jar export TG_PREFIX=${DIR_NAME}/tuxguitar-1.2-linux-x86-gcj/ export TG_SOURCE_PATH=${DIR_NAME}/TuxGuitar/src/ export GCJFLAGS="-fsource=1.4 -fPIC" make -C TuxGuitar/ make -C TuxGuitar/ install DESTDIR=${TG_PREFIX} make -C TuxGuitar/ clean make -C TuxGuitar-alsa/ make -C TuxGuitar-alsa/ install make -C TuxGuitar-alsa/ clean make -C TuxGuitar-fluidsynth/ make -C TuxGuitar-fluidsynth/ install make -C TuxGuitar-fluidsynth/ clean make -C TuxGuitar-jack/ make -C TuxGuitar-jack/ install make -C TuxGuitar-jack/ clean make -C TuxGuitar-oss/ make -C TuxGuitar-oss/ install make -C TuxGuitar-oss/ clean make -C TuxGuitar-compat/ make -C TuxGuitar-compat/ install make -C TuxGuitar-compat/ clean make -C TuxGuitar-gtp/ make -C TuxGuitar-gtp/ install make -C TuxGuitar-gtp/ clean make -C TuxGuitar-ptb/ make -C TuxGuitar-ptb/ install make -C TuxGuitar-ptb/ clean make -C TuxGuitar-tef/ make -C TuxGuitar-tef/ install make -C TuxGuitar-tef/ clean make -C TuxGuitar-midi/ make -C TuxGuitar-midi/ install make -C TuxGuitar-midi/ clean make -C TuxGuitar-lilypond/ make -C TuxGuitar-lilypond/ install make -C TuxGuitar-lilypond/ clean make -C TuxGuitar-musicxml/ make -C TuxGuitar-musicxml/ install make -C TuxGuitar-musicxml/ clean make -C TuxGuitar-ascii/ make -C TuxGuitar-ascii/ install make -C TuxGuitar-ascii/ clean make -C TuxGuitar-converter/ make -C TuxGuitar-converter/ install make -C TuxGuitar-converter/ clean make -C TuxGuitar-tray/ make -C TuxGuitar-tray/ install make -C TuxGuitar-tray/ clean make -C TuxGuitar-community/ make -C TuxGuitar-community/ install make -C TuxGuitar-community/ clean tuxguitar-src-1.2/TuxGuitar-cocoa-integration/build.xml0000644000175000017500000000354711253452445022721 0ustar julianjulian TuxGuitar-cocoa-integration +-------------------------------------------------+ | B U I L D I N G L I B R A R Y | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G L I B R A R Y | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-cocoa-integration/build.properties0000644000175000017500000000024011273336077024304 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-AudioUnit/build.properties0000644000175000017500000000017611273047344022604 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-AudioUnit/How to Install.txt0000644000175000017500000000244611273045343022656 0ustar julianjulian* This plugin is for using the native Quicktime synthesizer in TuxGuitar on mac OS X. The provided prebuilt binaries will probably only work in 10.4, it may however be possible to build it on 10.3 (I am not sure)s +------------------------------------+ | To install the provided binaries: | +------------------------------------+ Right-click on 'TuxGuitar.app', choose 'Show Package Contents' copy file called 'tuxguitar-audiounit-jni.jnilib' into 'TuxGuitar.app/Contents/MacOS/' copy file called 'tuxguitar-audiounit.jar' into 'TuxGuitar.app/Contents/MacOS/share/plugins/' open TuxGuitar open menu 'Tools > Settings' and select midi port 'CoreAudio' in the 'Sound' section +----------------------------------+ | To build the plugin from source | +----------------------------------+ ----------------------- Building TuxGuitar itself ----------------------- get itext and swt libs, place them in a 'lib' folder edit 'build.properties' to have mac settings and not linux settings cd into TuxGuitar source type 'ant' ------------------------ CoreAudio plugin --------------------- cd into TuxGuitar-CoreAudio Open build.properties and edit it so it has the right path to the TuxGuitar directory where you built from source (from SVN checkout no edit necessary). type 'ant' To install, follow above procedure.tuxguitar-src-1.2/TuxGuitar-AudioUnit/build.xml0000644000175000017500000000507411273045343021207 0ustar julianjulian TuxGuitar audiounit +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - audiounit | +--------------------------------------------------------------------+ ${service.provider} +--------------------------------------------------------------------+ | B U I L D I N G N A T I V E - L I B R A R I E S | +--------------------------------------------------------------------+ +--------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - AUDIOUNIT | +--------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-tuner/build.properties0000644000175000017500000000024011273047542022030 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-tuner/build.xml0000644000175000017500000000350311273045352020436 0ustar julianjulian TuxGuitar-converter +-------------------------------------------------+ | B U I L D I N G L I B R A R Y | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G L I B R A R Y | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-alsa/build.properties0000644000175000017500000000017611273047327021624 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-alsa/build.xml0000644000175000017500000000362011273045342020220 0ustar julianjulian TuxGuitar Alsa +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - A L S A | +--------------------------------------------------------------------+ ${service.provider} +--------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - A L S A | +--------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-alsa/GNUmakefile0000644000175000017500000000527711273045342020463 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: rzr $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-alsa LIBRARY?=lib$(PACKAGE).so LIBRARY_JNI?=lib$(PACKAGE)-jni.so LIBRARY_PROVIDER?=org.herac.tuxguitar.player.impl.midiport.alsa.MidiOutputPortProviderPlugin PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI) INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths JAVA_SOURCE_PATH?=./src/ JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java") JAVA_OBJECTS?=$(PACKAGE).o JNI_SOURCE_PATH?=./jni/ JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c") JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o) GCJ?=gcj GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) CC=gcc CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/) default: all all: objects library library_jni meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(JAVA_OBJECTS) @touch $@ library: $(LIBRARY) library_jni: $(LIBRARY_JNI) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) %.o: %.c $(CC) $(CFLAGS) -c -o $(@F) $< $(PACKAGE).o: $(JAVA_SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(JAVA_OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) $(LIBRARY_JNI): $(JNI_OBJECTS) $(GCJ) -shared -o $@ -lasound -lpthread $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $" tuxguitar-src-1.2/TuxGuitar-ascii/build.properties0000644000175000017500000000017611273047336021774 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-ascii/build.xml0000644000175000017500000000340711273045343020374 0ustar julianjulian TuxGuitar ASCII Exporter +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-ascii/GNUmakefile0000644000175000017500000000376411273045343020633 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-ascii LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.ascii.ASCIIPluginExporter PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-browser-ftp/build.properties0000644000175000017500000000024011273047350023142 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-browser-ftp/build.xml0000644000175000017500000000353711273045343021562 0ustar julianjulian TGBrowser FTP Plugin +-------------------------------------------------+ | B U I L D I N G L I B R A R Y | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G L I B R A R Y | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-browser-ftp/GNUmakefile0000644000175000017500000000401011273045343021776 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-browser-ftp LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.gui.tools.browser.ftp.TGBrowserPluginImpl PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $" tuxguitar-src-1.2/TuxGuitar-lilypond/build.properties0000644000175000017500000000024011273047456022531 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-lilypond/build.xml0000644000175000017500000000416311273045347021142 0ustar julianjulian TuxGuitar Lilypond Exporter +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-lilypond/GNUmakefile0000644000175000017500000000436411273045347021376 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:45 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-lilypond LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.lilypond.LilypondPluginExporter PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # resources LANGUAGE?=./share/lang # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) -rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/* clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:45 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-winmm/build.properties0000644000175000017500000000017611273047527022035 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-winmm/build.xml0000644000175000017500000000362411273045361020434 0ustar julianjulian TuxGuitar Winmm +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - W I N M M | +--------------------------------------------------------------------+ ${service.provider} +--------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - W I N M M | +--------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-carbon-integration/build.properties0000644000175000017500000000024011273047354024461 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-carbon-integration/build.xml0000644000175000017500000000355411273045343023074 0ustar julianjulian TuxGuitar-carbon-integration +-------------------------------------------------+ | B U I L D I N G L I B R A R Y | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G L I B R A R Y | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-midi/build.properties0000644000175000017500000000024011273047463021617 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-midi/build.xml0000644000175000017500000000340211273045347020225 0ustar julianjulian TuxGuitar Midi File Format +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-midi/GNUmakefile0000644000175000017500000000375511273045347020471 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.3 2008/02/26 15:24:13 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-midi LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.midi.MidiPluginList PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.3 2008/02/26 15:24:13 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-community/build.properties0000644000175000017500000000067411273063442022727 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar ## Default Settings ## default.community.url=http://community.tuxguitar.com.ar default.community.browser=\ ;xdg-open %s\ ;x-www-browser %s\ ;rundll32 url.dll,FileProtocolHandler %s\ ;open %s\ ;firefox %s\ ;mozilla %s\ ;mozilla-firefox %s\ ;epiphany-browser %s\ ;epiphany-gecko %s\ tuxguitar-src-1.2/TuxGuitar-community/build.xml0000644000175000017500000000463211273045344021332 0ustar julianjulian TuxGuitar Community Integration +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} community.url=${default.community.url}${line.separator} community.browser=${default.community.browser}${line.separator} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-community/GNUmakefile0000644000175000017500000000510411273051561021554 0ustar julianjulian#------------------------------------------------------------------------------ PACKAGE?=tuxguitar-community LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.community.TGCommunityPluginImpl PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SETTINGS_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/ INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # resources LANGUAGE?=./share/lang SETTINGS=$(PACKAGE).cfg DEFAULT_SETTINGS_URL?="community.url=http://community.tuxguitar.com.ar\n" DEFAULT_SETTINGS_BROWSER?="community.browser=;x-www-browser %s;firefox %s;mozilla %s;mozilla-firefox %s;epiphany-browser %s;epiphany-gecko %s\n" # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf settings objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install -d $(DESTDIR)$(INSTALL_SETTINGS_DIR)/ -install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR) -install $(SETTINGS) $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) -rm $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS) -rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/* clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) -@rm $(SETTINGS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) settings: echo $(DEFAULT_SETTINGS_URL) > $(SETTINGS) echo $(DEFAULT_SETTINGS_BROWSER) >> $(SETTINGS) tuxguitar-src-1.2/TuxGuitar-compat/build.properties0000644000175000017500000000017611273047375022172 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-compat/build.xml0000644000175000017500000000341611273045344020570 0ustar julianjulian TuxGuitar file format compatibility +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-compat/GNUmakefile0000644000175000017500000000375711273045344021031 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-compat LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.tg.TGPluginListImpl PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-converter/build.properties0000644000175000017500000000024011273047400022673 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-converter/build.xml0000644000175000017500000000414411273045344021313 0ustar julianjulian TuxGuitar-converter +-------------------------------------------------+ | B U I L D I N G L I B R A R Y | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G L I B R A R Y | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-converter/GNUmakefile0000644000175000017500000000437711273045344021554 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-converter LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.gui.tools.custom.converter.TGConverterPlugin PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # resources LANGUAGE?=./share/lang # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) -rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/* clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-CoreAudio/build.properties0000644000175000017500000000017611273047405022553 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-CoreAudio/How to Install.txt0000644000175000017500000000253511273045344022627 0ustar julianjulian* This plugin is for using the native Quicktime synthesizer in TuxGuitar on mac OS X. It requires a version of TuxGuitar 0.9 or better (CVS). The provided prebuilt binaries will probably only work in 10.4, it may however be possible to build it on 10.3 (I am not sure) +------------------------------------+ | To install the provided binaries: | +------------------------------------+ Right-click on 'TuxGuitar.app', choose 'Show Package Contents' copy file called 'tuxguitar-coreaudio-jni.jnilib' into 'TuxGuitar.app/Contents/MacOS/' copy file called 'tuxguitar-coreaudio.jar' into 'TuxGuitar.app/Contents/MacOS/share/plugins/' open TuxGuitar open menu 'Tools > Settings' and select midi port 'CoreAudio' in the 'Sound' section +----------------------------------+ | To build the plugin from source | +----------------------------------+ ----------------------- Building TuxGuitar itself ----------------------- get itext and swt libs, place them in a 'lib' folder edit 'build.properties' to have mac settings and not linux settings cd into TuxGuitar source type 'ant' ------------------------ CoreAudio plugin --------------------- cd into TuxGuitar-CoreAudio Open build.properties and edit it so it has the right path to the TuxGuitar directory where you built from source (from SVN checkout no edit necessary). type 'ant' To install, follow above procedure.tuxguitar-src-1.2/TuxGuitar-CoreAudio/build.xml0000644000175000017500000000507411273045344021161 0ustar julianjulian TuxGuitar coreaudio +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - COREAUDIO | +--------------------------------------------------------------------+ ${service.provider} +--------------------------------------------------------------------+ | B U I L D I N G N A T I V E - L I B R A R I E S | +--------------------------------------------------------------------+ +--------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - COREAUDIO | +--------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-fluidsynth/build.properties0000644000175000017500000000024011273047412023060 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-fluidsynth/build.xml0000644000175000017500000000422511273045345021476 0ustar julianjulian TuxGuitar Fluidsynth +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - F L U I D S Y N T H | +--------------------------------------------------------------------+ ${service.provider} +----------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - F L U I D S Y N T H | +----------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-fluidsynth/GNUmakefile0000644000175000017500000000541411273045345021730 0ustar julianjulian#------------------------------------------------------------------------------ PACKAGE?=tuxguitar-fluidsynth LIBRARY?=lib$(PACKAGE).so LIBRARY_JNI?=lib$(PACKAGE)-jni.so LIBRARY_PROVIDER?=org.herac.tuxguitar.player.impl.midiport.fluidsynth.MidiOutputPortProviderPlugin PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI) INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # resources LANGUAGE?=./share/lang # build paths JAVA_SOURCE_PATH?=./src/ JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java") JAVA_OBJECTS?=$(PACKAGE).o JNI_SOURCE_PATH?=./jni/ JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c") JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o) GCJ?=gcj GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) CC=gcc CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/) default: all all: objects library library_jni meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(JAVA_OBJECTS) @touch $@ library: $(LIBRARY) library_jni: $(LIBRARY_JNI) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) -rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/* clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) %.o: %.c $(CC) $(CFLAGS) -c -o $(@F) $< $(PACKAGE).o: $(JAVA_SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(JAVA_OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) $(LIBRARY_JNI): $(JNI_OBJECTS) $(GCJ) -shared -o $@ -lfluidsynth $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #------------------------------------------------------------------------------ tuxguitar-src-1.2/TuxGuitar-gervill/build.properties0000644000175000017500000000031211273047417022340 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.gervill=../TuxGuitar/lib/gervill.jar path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-gervill/build.xml0000644000175000017500000000346111273045345020752 0ustar julianjulian TuxGuitar Gervill +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-gtp/build.properties0000644000175000017500000000030111273047427021465 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar gtp.charset.default=ISO-8859-15 tuxguitar-src-1.2/TuxGuitar-gtp/build.xml0000644000175000017500000000427211273045345020101 0ustar julianjulian TuxGuitar GPx File Format Support +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} charset=${gtp.charset.default} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-gtp/GNUmakefile0000644000175000017500000000514211273051600020316 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:24 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-gtp LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.gtp.GTPPluginList PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SETTINGS_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/ INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # resources LANGUAGE?=./share/lang SETTINGS=$(PACKAGE).cfg DEFAULT_SETTINGS_CHARSET?="charset=ISO-8859-15" # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf settings objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install -d $(DESTDIR)$(INSTALL_SETTINGS_DIR)/ -install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR) -install $(SETTINGS) $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) -rm $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS) -rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/* clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) -@rm $(SETTINGS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) settings: echo $(DEFAULT_SETTINGS_CHARSET) > $(SETTINGS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:24 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-jack/build.properties0000644000175000017500000000024011273047436021605 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-jack/build.xml0000644000175000017500000000316111273045346020214 0ustar julianjulian TuxGuitar JACK Audio Connection Kit +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-jack/GNUmakefile0000644000175000017500000000535111273045346020450 0ustar julianjulian#------------------------------------------------------------------------------ PACKAGE?=tuxguitar-jack LIBRARY?=lib$(PACKAGE).so LIBRARY_JNI?=lib$(PACKAGE)-jni.so LIBRARY_PROVIDER?=org.herac.tuxguitar.jack.JackPluginImpl PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI) INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # resources LANGUAGE?=./share/lang # build paths JAVA_SOURCE_PATH?=./src/ JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java") JAVA_OBJECTS?=$(PACKAGE).o JNI_SOURCE_PATH?=./jni/ JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c") JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o) GCJ?=gcj GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) CC=gcc CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/) default: all all: objects library library_jni meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(JAVA_OBJECTS) @touch $@ library: $(LIBRARY) library_jni: $(LIBRARY_JNI) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) -rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/* clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) %.o: %.c $(CC) $(CFLAGS) -c -o $(@F) $< $(PACKAGE).o: $(JAVA_SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(JAVA_OBJECTS) ${GCJ} -shared -o $@ $(^F) -ltuxguitar -L$(TG_LIBRARY_PATH) $(LIBRARY_JNI): $(JNI_OBJECTS) $(GCJ) -shared -o $@ $(^F) `pkg-config --libs jack` meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #------------------------------------------------------------------------------ tuxguitar-src-1.2/TuxGuitar-jsa/build.properties0000644000175000017500000000024011273047446021453 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-jsa/build.xml0000644000175000017500000000431611273045346020064 0ustar julianjulian TuxGuitar Java Sound Api +------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - J S A | +------------------------------------------------------------------+ ${service.provider} +------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - J S A | +------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-jws/build.properties0000644000175000017500000000367111273045346021511 0ustar julianjulianant.build.javac.source=1.4 ant.build.javac.target=1.4 tuxguitar.share.path=../TuxGuitar/share tuxguitar.path=\ ../TuxGuitar/src${path.separator}\ ../TuxGuitar-ascii/src${path.separator}\ ../TuxGuitar-compat/src${path.separator}\ ../TuxGuitar-converter/src${path.separator}\ ../TuxGuitar-gtp/src${path.separator}\ ../TuxGuitar-jsa/src${path.separator}\ ../TuxGuitar-lilypond/src${path.separator}\ ../TuxGuitar-midi/src${path.separator}\ ../TuxGuitar-musicxml/src${path.separator}\ ../TuxGuitar-ptb/src${path.separator}\ ../TuxGuitar-tef/src${path.separator}\ ../TuxGuitar-community/src${path.separator}\ tuxguitar.locale.path=\ ../TuxGuitar/share/lang${path.separator}\ ../TuxGuitar-ascii/share/lang${path.separator}\ ../TuxGuitar-compat/share/lang${path.separator}\ ../TuxGuitar-converter/share/lang${path.separator}\ ../TuxGuitar-gtp/share/lang${path.separator}\ ../TuxGuitar-jsa/share/lang${path.separator}\ ../TuxGuitar-lilypond/share/lang${path.separator}\ ../TuxGuitar-midi/share/lang${path.separator}\ ../TuxGuitar-musicxml/share/lang${path.separator}\ ../TuxGuitar-ptb/share/lang${path.separator}\ ../TuxGuitar-tef/share/lang${path.separator}\ ../TuxGuitar-community/share/lang${path.separator}\ tuxguitar.plugin-classes=\ org.herac.tuxguitar.io.ascii.ASCIIPluginExporter${line.separator}\ org.herac.tuxguitar.io.tg.TGPluginListImpl${line.separator}\ org.herac.tuxguitar.gui.tools.custom.converter.TGConverterPlugin${line.separator}\ org.herac.tuxguitar.io.gtp.GTPPluginList${line.separator}\ org.herac.tuxguitar.player.impl.jsa.MidiPluginList${line.separator}\ org.herac.tuxguitar.io.lilypond.LilypondPluginExporter${line.separator}\ org.herac.tuxguitar.io.midi.MidiPluginList${line.separator}\ org.herac.tuxguitar.io.musicxml.MusicXMLPluginExporter${line.separator}\ org.herac.tuxguitar.io.ptb.PTInputStreamPlugin${line.separator}\ org.herac.tuxguitar.io.tef.TEPluginImporter${line.separator}\ org.herac.tuxguitar.community.TGCommunityPluginImpl${line.separator}\ tuxguitar-src-1.2/TuxGuitar-jws/build.xml0000644000175000017500000001543111273045346020112 0ustar julianjulian TuxGuitar JWS +------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R | +------------------------------------------------------------------+ +------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - R E S O U R C E S | +------------------------------------------------------------------+ +------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - J W S | +------------------------------------------------------------------+ #Default Plugins${line.separator} ${tuxguitar.plugin-classes} ${list.properties} ${list.properties} ${locale.file}${line.separator} tuxguitar-src-1.2/TuxGuitar/GNUmakefile0000644000175000017500000000570411273045225017540 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.7 2008/02/29 12:55:24 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ OS_LIBRARY_PREFIX?=lib OS_LIBRARY_EXTENSION?=.so PACKAGE?=tuxguitar BINARY?=$(PACKAGE).bin LIBRARY?=$(OS_LIBRARY_PREFIX)$(PACKAGE)$(OS_LIBRARY_EXTENSION) # constants SHARE_DIR?=./share/ DOC_DIR?=./doc/ # dependencies SWT_PATH?=/usr/share/java/swt.jar # install PREFIX?=/usr TG_BINARY_PATH?=$(PREFIX)/bin TG_LIBRARY_PATH?=$(PREFIX)/lib TG_LIBRARY_PATH_JNI?=$(TG_LIBRARY_PATH)/jni TG_SHARE_PATH?=$(PREFIX)/share/$(PACKAGE) TG_DOC_PATH?=$(PREFIX)/share/doc/$(PACKAGE) TG_NATIVE_PLUGINS_PATH?=$(TG_SHARE_PATH)/plugins TG_NATIVE_PLUGINS_PREFIX?=$(OS_LIBRARY_PREFIX) TG_NATIVE_PLUGINS_EXTENSION?=$(OS_LIBRARY_EXTENSION) # dependencies SWT_JAR?=$(SWT_PATH) # sources SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") RESOURCE_PATH?=./dist/ RESOURCES_XML?=$(shell find $(RESOURCE_PATH) -name "*.xml") RESOURCES_DIST?=$(shell find $(RESOURCE_PATH) -name "*.dist") DEPENDENCIES?=$(SWT_JAR) OBJECTS?=\ $(PACKAGE).o\ $(RESOURCES_DIST:%.dist=%.o)\ $(RESOURCES_XML:%.xml=%.o)\ $(DEPENDENCIES:%.jar=%.o)\ # runtime MAINCLASS?=org.herac.tuxguitar.gui.TGMain PROPERTIES?=\ -Djava.library.path=$(TG_LIBRARY_PATH_JNI) \ -Djava.class.path=$(TG_SHARE_PATH) \ -Dtuxguitar.share.path=$(TG_SHARE_PATH) \ -Dtuxguitar.library.path=$(TG_NATIVE_PLUGINS_PATH) \ -Dtuxguitar.library.prefix=$(TG_NATIVE_PLUGINS_PREFIX) \ -Dtuxguitar.library.extension=$(TG_NATIVE_PLUGINS_EXTENSION) \ GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(SWT_PATH) LDFLAGS?= default: all all: objects library binary objects: $(OBJECTS) library: $(LIBRARY) binary: $(BINARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(TG_BINARY_PATH)/ -install -d $(DESTDIR)$(TG_LIBRARY_PATH)/ -install -d $(DESTDIR)$(TG_SHARE_PATH)/ -install -d $(DESTDIR)$(TG_DOC_PATH)/ -install $(BINARY) $(DESTDIR)$(TG_BINARY_PATH)/$(BINARY) -install $(LIBRARY) $(DESTDIR)$(TG_LIBRARY_PATH)/$(LIBRARY) cp -rfa $(SHARE_DIR)/* $(DESTDIR)$(TG_SHARE_PATH)/ cp -rfa $(DOC_DIR)/* $(DESTDIR)$(TG_DOC_PATH)/ uninstall: -rm $(DESTDIR)$(TG_BINARY_PATH)/$(BINARY) -rm $(DESTDIR)$(TG_LIBRARY_PATH)/$(LIBRARY) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.bin" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 %.o: %.jar $(GCJ) $(GCJFLAGS) -c -o $(@F) $< %.o: %.dist $(GCJ) $(GCJFLAGS) -c -o $(@F) --resource $( TuxGuitar +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R | +--------------------------------------------------------------------+ +--------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R | +--------------------------------------------------------------------+ +--------------------------------------------------------------------+ | I N S T A L L I N G T U X G U I T A R | +--------------------------------------------------------------------+ tuxguitar-src-1.2/misc/tuxguitar.desktop0000644000175000017500000000062611273045350020111 0ustar julianjulian[Desktop Entry] Version=1.0 Name=tuxguitar Comment=Edit, playback guitar tablatures Comment[fr]=Edite, joue des tablatures de guitare Comment[es]=Edita, reproduce tablaturas de guitarra Exec=tuxguitar Icon=tuxguitar Terminal=false Type=Application Categories=AudioVideo;Audio; MimeType=audio/x-tuxguitar;audio/x-gtp;audio/x-ptb;audio/midi; #eof "$Id: tuxguitar.desktop,v 1.2 2008/03/22 23:32:25 rzr Exp $" tuxguitar-src-1.2/misc/tuxguitar.sh0000644000175000017500000001077311273045350017056 0ustar julianjulian#! /bin/sh #@ident "$Id: tuxguitar.sh,v 1.3 2008/04/16 17:04:50 rzr Exp $" #@Author: www.philippe.coval.online.fr -- revision: $Author: rzr $ #@Licence: LGPL #@Description: Wrapper script for starting java application tuxguitar ############################################################################### PACKAGE=tuxguitar [ ! -z $DEBUG ] && set -e [ ! -z $DEBUG ] && set -x #/// guess JAVA_HOME if undefined java_guess_() { d="/opt/java/" [ -d "$t" ] && d="$t" d="/usr/local/opt/java/" [ -d "$t" ] && d="$t" # windows t="C:\\Program\ Files\\Java\\jre1.6.0_03/" [ -d "$t" ] && d="$t" t="\\Program\ Files\\Java\\jre1.6.0_03/" [ -d "$t" ] && d="$t" t="/Program\ Files/Java/jre1.6.0_03/" [ -d "$t" ] && d="$t" # macosx t="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/" [ -d "$t" ] && d="$t" # opensuse t="/etc/profile.d/alljava.sh" [ -r $t ] && . $t && echo ${JAVA_HOME} && return t="/usr/lib/jvm/java" [ -d "$t" ] && d="$t" t="/usr/lib64/jvm/java" [ -d "$t" ] && d="$t" # mandriva t="/usr/lib/jvm/jre-1.6.0-sun/bin/../" [ -d "$t" ] && d="$t" # gentoo t="/opt/sun-jdk-1.5.0.14/" [ -d "$t" ] && d="$t" t="/opt/sun-jdk-1.6.0.04/" [ -d "$t" ] && d="$t" # debian if [ -r /etc/debian_version ]; then t="/usr/lib/jvm/java-gcj/jre/bin/../../" [ -d "$t" ] && d="$t" t="/usr/lib/jvm/java-1.5.0-sun/jre/bin/../../" [ -d "$t" ] && d="$t" t="/usr/lib/jvm/java-6-sun/jre/bin/../../" [ -d "$t" ] && d="$t" t="/usr/lib/jvm/java-6-openjdk/jre/bin/../../" [ -d "$t" ] && d="$t" fi # results [ -d "$d" ] && echo "$d" } swt_guess_() { t="/usr/lib/eclipse/plugins/org.eclipse.swt.gtk.linux.*.jar" [ -r "$t" ] && f="$t" t="/etc/alternatives/swt.jar" [ -r "$t" ] && f="$t" t="/usr/share/java/swt.jar" [ -r "$t" ] && f="$t" t="/usr/lib/java/swt.jar" [ -r "$t" ] && f="$t" t="/usr/share/java/swt-gtk-3.4.jar" [ -r "$t" ] && f="$t" t="/usr/lib/java/swt3.2-gtk.jar" [ -r "$t" ] && f="$t" file -L "$f" >/dev/null 2>&1 || f="" echo "$f" } #/// org.eclipse.swt.SWTError: No more handles #/// [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)] mozilla_guess_() { t="/usr/lib/mozilla" test -r "$t/libxpcom.so" && d="$t" t="/usr/lib/iceape/" test -r "$t/libxpcom.so" && d="$t" t="/usr/lib/icedove/" test -r "$t/libxpcom.so" && d="$t" t="/usr/lib/firefox/" test -r "$t/libxpcom.so" && d="$t" t="/usr/lib/iceweasel" test -r "$t/libxpcom.so" && d="$t" t="/usr/lib/xulrunner" test -r "$t/libxpcom.so" && d="$t" t="/usr/lib/xulrunner-1.9" test -r "$t/libxpcom.so" && d="$t" echo "$d" } # env_() { # java [ -z ${JAVA_HOME} ] && t=$(java_guess_) && [ -d "$t" ] && JAVA_HOME=$t if [ -d "${JAVA_HOME}" ] ; then export JAVA_HOME JAVA=${JAVA:=${JAVA_HOME}/jre/bin/java} [ -x ${JAVA} ] && export JAVA else JAVA=${JAVA:=java} export JAVA fi # mozilla [ -z ${MOZILLA_FIVE_HOME} ] && t=$(mozilla_guess_) && [ -d "$t" ] && MOZILLA_FIVE_HOME=$t if [ -d "$MOZILLA_FIVE_HOME" ] ; then export MOZILLA_FIVE_HOME export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MOZILLA_FIVE_HOME else echo '$MOZILLA_FIVE_HOME not valid : check doc shipped w/ tuxguitar' fi [ ! -z ${DEBUG} ] && echo "# MOZILLA_FIVE_HOME=${MOZILLA_FIVE_HOME}" [ ! -z ${DEBUG} ] && echo "# JAVA_HOME=${JAVA_HOME}"} } tuxguitar_() { local PACKAGE=${PACKAGE:=tuxguitar} local PACKAGE_HOME=${PACKAGE_HOME:=/usr/share/${PACKAGE}/} local PACKAGE_MAIN=${PACKAGE_MAIN:=org.herac.tuxguitar.gui.TGMain} local PACKAGE_LIB=${PACKAGE_LIB:=/usr/lib/jni} # java env JAVA=${JAVA:=java} CLASSPATH=${CLASSPATH} t="${PACKAGE_HOME}" [ -d "$t" ] && CLASSPATH=${CLASSPATH}:$t t="${PACKAGE_HOME}/${PACKAGE}.jar" [ -r "$t" ] && CLASSPATH=${CLASSPATH}:$t t="/usr/share/java/itext.jar" [ -r "$t" ] && CLASSPATH=${CLASSPATH}:$t t=$(swt_guess_) [ -r "$t" ] && CLASSPATH=${CLASSPATH}:$t JAVA_FLAGS=${JAVA_FLAGS:="-Xms128m -Xmx128m"} JAVA_FLAGS="\ ${JAVA_FLAGS} \ -Djava.library.path=${PACKAGE_LIB} \ -D${PACKAGE}.share.path=/usr/share/${PACKAGE} \ -cp ${CLASSPATH}:${PACKAGE_CLASSPATH}" local arg="" [ -z "$1" ] && arg="/usr/share/tuxguitar/tuxguitar.tg" # run java [ ! -z ${DEBUG} ] && ${JAVA} -version [ ! -z ${DEBUG} ] && ${JAVA} ${JAVA_FLAGS} ${PACKAGE_MAIN} --version ${JAVA} ${JAVA_FLAGS} ${PACKAGE_MAIN} $arg "$@" } # main env_ tuxguitar_ "$@" #eof tuxguitar-src-1.2/misc/tuxguitar.sgml0000644000175000017500000000641411273045350017403 0ustar julianjulian manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ The docbook-to-man binary is found in the docbook-to-man package. Please remember that if you create the nroff version in one of the debian/rules file targets (such as build), you will need to include docbook-to-man in your Build-Depends control field. --> Philippe"> Coval"> July 12, 2006"> 1"> rzr@users.sf.net"> TUXGUITAR"> Debian"> GNU"> GPL"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2003 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; program to do edit and playback guitar tablature &dhpackage; | | | SONG.tg DESCRIPTION &dhpackage; supports guitar pro format and exports to pdf and midi. This manual page was written for the &debian; distribution because the original program does not have a manual page. WWW http://www.tuxguitar.com.ar AUTHOR This manual page was written by &dhusername; &dhemail; for the &debian; system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the &gnu; General Public License, Version 2 any later version published by the Free Software Foundation. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.
tuxguitar-src-1.2/misc/tuxguitar.spec0000644000175000017500000001363111273045350017372 0ustar julianjulianSummary: A multitrack tablature editor and player written in Java-SWT Name: tuxguitar Version: 1.0 Release: 5%{?dist} URL: http://www.tuxguitar.com.ar Source0: http://downloads.sourceforge.net/%{name}/%{name}-src-%{version}.tar.gz Source9: %{name}.desktop License: LGPLv2+ Group: Applications/Multimedia BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # The package java-icedtea is not available on F-8 for ppc & ppc64. # https://bugzilla.redhat.com/show_bug.cgi?id=464843 %if "%{fedora}" == "8" ExcludeArch: ppc ppc64 %endif Requires: java >= 1.7 Requires: jpackage-utils BuildRequires: alsa-lib-devel BuildRequires: ant BuildRequires: desktop-file-utils BuildRequires: fluidsynth-devel BuildRequires: java-devel >= 1.7 BuildRequires: jpackage-utils BuildRequires: libswt3-gtk2 %description TuxGuitar is a guitar tablature editor with player support through midi. It can display scores and multitrack tabs. Various features TuxGuitar provides include autoscrolling while playing, note duration management, bend/slide/vibrato/hammer-on/pull-off effects, support for tuplets, time signature management, tempo management, gp3/gp4/gp5 import and export. %prep %setup -q -n %{name}-src-%{version} # The following issues were discussed in: # http://www.tuxguitar.com.ar/forum/4/817/need-help-with-packaging-for-fedora/ # Prevent static library paths to be built in TuxGuitar.jar (META-INF/MANIFEST.MF) sed -i 's///' TuxGuitar/build.xml # Export the library path during runtime instead sed -i 's|env_$|env_\nexport CLASSPATH=$CLASSPATH:%{_libdir}/java/swt.jar\n|' misc/tuxguitar.sh # Disable the pdf plugin that depends on "iText" which is currently not available on Fedora sed -i 's/TuxGuitar-pdf \\/\\/g' Makefile sed -i 's/.\/TuxGuitar-pdf\/tuxguitar-pdf.jar \\/\\/g' Makefile # Change /lib to %%{_lib} sed -i 's/\/lib\//\/%{_lib}\//g' Makefile sed -i 's/\/lib\//\/%{_lib}\//g' misc/tuxguitar.sh sed -i 's/\/lib\//\/%{_lib}\//g' TuxGuitar/xml/build-linux.xml # Don't strip the binaries during %%install sed -i 's/install -s/install -m 755/g' Makefile # Remove pre-shipped binaries find -name .DS_Store -exec rm {} \; %build # Does not compile with %%{?_smp_mflags}. Build using openjdk. # Note that the lib directory is /usr/lib for openjdk, regardless of the architecture. %if "%{fedora}" == "8" %define openjdkdir /usr/lib/jvm/java-icedtea %else %define openjdkdir /usr/lib/jvm/java-openjdk %endif make SWT_JAR=%{_libdir}/java/swt.jar CFLAGS="${RPM_OPT_FLAGS} -I%{openjdkdir}/include -I%{openjdkdir}/include/linux -fPIC" %install rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install make DESTDIR=$RPM_BUILD_ROOT install-linux # Makefile does not install the plugins by default so install them manually install -dm 755 $RPM_BUILD_ROOT/%{_datadir}/%{name}/plugins for jardir in TuxGuitar-*; do if [ -e $jardir/*jar ] then install -m 644 $jardir/*jar $RPM_BUILD_ROOT/%{_datadir}/%{name}/plugins/ fi done # desktop files install -dm 755 $RPM_BUILD_ROOT/%{_datadir}/applications install -pm 644 %{SOURCE9} $RPM_BUILD_ROOT/%{_datadir}/applications/ # icons for dim in 16x16 24x24 32x32 48x48 64x64 96x96; do install -dm 755 $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/$dim/apps/%{name}.png install -pm 644 TuxGuitar/share/skins/Lavender/icon-$dim.png $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/$dim/apps/%{name}.png done # mime-type icons install -dm 755 $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/96x96/mimetypes install -pm 644 TuxGuitar/share/skins/Lavender/icon-96x96.png $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/96x96/mimetypes/audio-x-tuxguitar.png install -pm 644 TuxGuitar/share/skins/Lavender/icon-96x96.png $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/96x96/mimetypes/audio-x-gtp.png install -pm 644 TuxGuitar/share/skins/Lavender/icon-96x96.png $RPM_BUILD_ROOT/%{_datadir}/icons/hicolor/96x96/mimetypes/audio-x-ptb.png desktop-file-install --dir $RPM_BUILD_ROOT%{_datadir}/applications --delete-original $RPM_BUILD_ROOT%{_datadir}/applications/%{name}.desktop # mime-type file install -dm 755 $RPM_BUILD_ROOT/%{_datadir}/mime/packages install -pm 644 misc/%{name}.xml $RPM_BUILD_ROOT/%{_datadir}/mime/packages/ %clean rm -rf $RPM_BUILD_ROOT %post update-mime-database %{_datadir}/mime >& /dev/null ||: touch --no-create %{_datadir}/icons/hicolor if [ -x %{_bindir}/gtk-update-icon-cache ] ; then %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : fi %postun update-mime-database %{_datadir}/mime >& /dev/null ||: touch --no-create %{_datadir}/icons/hicolor if [ -x %{_bindir}/gtk-update-icon-cache ] ; then %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : fi %files %defattr(-,root,root,-) %doc AUTHORS ChangeLog LICENSE README COPYING %{_libdir}/jni/* %{_datadir}/%{name} %{_datadir}/icons/hicolor/*/*/* %{_datadir}/applications/%{name}.desktop %{_datadir}/mime/packages/*.xml %{_bindir}/%{name} %changelog * Mon Sep 29 2008 Orcan Ogetbil - 1.0-5 - Compiled the package with openjdk instead of gcj. - ExcludeArch'ed ppc/ppc64 on F-8. * Sun Sep 28 2008 Orcan Ogetbil - 1.0-4 - Added the comment about %%{?_smp_mflags} - Used macros more extensively. - Changed the license to LGPLv2+ - Fixed java requirement issue by requiring java >= 1.7 - Required jpackage-utils - Removed pre-shipped binaries - Fixed %%defattr * Sun Sep 28 2008 Orcan Ogetbil - 1.0-3 - Fixed java requirement issue by requiring icedtea for F-8 and openjdk for F-9+ - Patched the source to enable the fluidsynth plugin - Added DistTag - Patched the source in order to pass RPM_OPT_FLAGS to gcc - Removed ExclusiveArch * Thu Sep 25 2008 Orcan Ogetbil - 1.0-2 - Added desktop-file-utils to BuildRequires. - Replaced java-1.7.0-icedtea with java-1.6.0-openjdk in Requires. * Wed Sep 24 2008 Orcan Ogetbil - 1.0-1 - Initial build. tuxguitar-src-1.2/misc/tuxguitar.10000644000175000017500000000211211273045350016570 0ustar julianjulian.TH "TUXGUITAR" "1" .SH "NAME" tuxguitar \(em program to do edit and playback guitar tablature .SH "SYNOPSIS" .PP \fBtuxguitar\fR [ \fB-h\fP | \fB\-\-help\fP ] [ \fB-v\fP | \fB\-\-version\fP ] [ \fB-i\fP | \fB\-\-system-info\fP ] [ \fB-D\fIname\fR=\fIvalue\fR\fP ] [ \fISONG.tg\fR ] .SH "DESCRIPTION" .PP tuxguitar supports guitar pro format and exports to pdf and midi. .PP This manual page was written for the \fBDebian\fP distribution because the original program does not have a manual page. .SH "WWW" .PP http://www.tuxguitar.com.ar .SH "AUTHOR" .PP This manual page was written by Philippe Coval rzr@users.sf.net for the \fBDebian\fP system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 any later version published by the Free Software Foundation. .PP On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. .\" created by instant / docbook-to-man, Wed 16 Apr 2008, 18:33 tuxguitar-src-1.2/misc/tuxguitar.xpm0000644000175000017500000002053111273045350017241 0ustar julianjulian/* XPM */ static char * tuxguitar_xpm[] = { "32 32 394 2", " c None", ". c #727272", "+ c #6E6E6E", "@ c #707070", "# c #666666", "$ c #575757", "% c #4E4E4E", "& c #505050", "* c #5A5A5A", "= c #686868", "- c #545454", "; c #343434", "> c #1E1E1E", ", c #1B1B1B", "' c #1D1D1D", ") c #333333", "! c #585858", "~ c #292929", "{ c #0D0D0D", "] c #090909", "^ c #000000", "/ c #232323", "( c #363636", "_ c #303030", ": c #656565", "< c #414141", "[ c #272727", "} c #B7B7B7", "| c #CCCCCC", "1 c #252525", "2 c #E2E2E2", "3 c #EFEFEF", "4 c #535353", "5 c #323232", "6 c #898989", "7 c #C8C8C8", "8 c #BDBDBD", "9 c #949598", "0 c #717374", "a c #BDBDBC", "b c #C8C8C9", "c c #B1B1B1", "d c #464646", "e c #313131", "f c #ABABAB", "g c #6C6C6D", "h c #3E4148", "i c #ADACAE", "j c #7E7E83", "k c #46494F", "l c #C2C2C1", "m c #434342", "n c #1A1C24", "o c #51545D", "p c #D8DCE8", "q c #CEC2A5", "r c #E3D186", "s c #D5C27C", "t c #CAC2B5", "u c #E3E9EC", "v c #6E707A", "w c #252732", "x c #8D896C", "y c #7A7457", "z c #DEBE73", "A c #FFD15B", "B c #FFEA91", "C c #FFE27C", "D c #FFCC5D", "E c #EFD99F", "F c #928A63", "G c #9C9672", "H c #C1C1C1", "I c #FFCA59", "J c #FDDD7E", "K c #FFDF65", "L c #FFBA28", "M c #FFBA2E", "N c #FFC548", "O c #FFC13E", "P c #FFB626", "Q c #FFB92B", "R c #FFDC68", "S c #FFD766", "T c #F3A617", "U c #9A9A9A", "V c #818181", "W c #C68209", "X c #DB890E", "Y c #ED9F16", "Z c #FFAD11", "` c #FFA90F", " . c #FFAC13", ".. c #FFAB12", "+. c #FFA60A", "@. c #FEAD10", "#. c #E89611", "$. c #E58E06", "%. c #AAAAAA", "&. c #2B2B2B", "*. c #3B3B3B", "=. c #976C20", "-. c #E4910E", ";. c #FFBA32", ">. c #FFAC12", ",. c #FFA303", "'. c #FFA405", "). c #FFB21A", "!. c #FBB02B", "~. c #C67705", "{. c #765C2E", "]. c #555251", "^. c #454748", "/. c #393838", "(. c #383838", "_. c #27313E", ":. c #3D270A", "<. c #BF8531", "[. c #FFD768", "}. c #FFCC50", "|. c #FFCF57", "1. c #FFD162", "2. c #9E6720", "3. c #211810", "4. c #2A3645", "5. c #554035", "6. c #6C5346", "7. c #584337", "8. c #242626", "9. c #484848", "0. c #404040", "a. c #5C5C5B", "b. c #030814", "c. c #5A534C", "d. c #B07A3D", "e. c #B5783C", "f. c #B67C3E", "g. c #A3713D", "h. c #585759", "i. c #0B1017", "j. c #312C29", "k. c #58473E", "l. c #8A7B74", "m. c #705C50", "n. c #51392C", "o. c #3F2618", "p. c #757575", "q. c #646464", "r. c #272626", "s. c #2B2D2E", "t. c #8F9091", "u. c #64483E", "v. c #642B0F", "w. c #673617", "x. c #626062", "y. c #696F74", "z. c #45413E", "A. c #675750", "B. c #5D473C", "C. c #635148", "D. c #392B26", "E. c #7F7F7F", "F. c #444444", "G. c #4C4C4C", "H. c #505253", "I. c #83807C", "J. c #D7B9A7", "K. c #AA9387", "L. c #906E62", "M. c #804836", "N. c #62564F", "O. c #353331", "P. c #4F4F50", "Q. c #605550", "R. c #4C3B33", "S. c #48403E", "T. c #727273", "U. c #191919", "V. c #343535", "W. c #525150", "X. c #B9A28F", "Y. c #E7CAAB", "Z. c #A4866E", "`. c #5F4E47", " + c #554C47", ".+ c #2C2927", "++ c #282829", "@+ c #32302E", "#+ c #595B5C", "$+ c #99847D", "%+ c #44494E", "&+ c #16171A", "*+ c #0B0C0B", "=+ c #0C0C0B", "-+ c #161616", ";+ c #1C1E1F", ">+ c #383735", ",+ c #C4C3C2", "'+ c #928273", ")+ c #4C423A", "!+ c #4D4641", "~+ c #454443", "{+ c #151516", "]+ c #3D3D3D", "^+ c #5C5C5C", "/+ c #DD9676", "(+ c #E9B9A4", "_+ c #968A7B", ":+ c #353433", "<+ c #0F1115", "[+ c #0A090A", "}+ c #060606", "|+ c #000102", "1+ c #6A6F72", "2+ c #B7ACA4", "3+ c #674C39", "4+ c #403F3C", "5+ c #494A4B", "6+ c #111111", "7+ c #020202", "8+ c #D16B37", "9+ c #DFA46A", "0+ c #E5B273", "a+ c #B4975A", "b+ c #524629", "c+ c #080C15", "d+ c #221F19", "e+ c #353535", "f+ c #CCD6D8", "g+ c #B3937E", "h+ c #494C48", "i+ c #45494C", "j+ c #2D2D2D", "k+ c #050505", "l+ c #181818", "m+ c #2C2C2C", "n+ c #BC6735", "o+ c #C6540C", "p+ c #D9942A", "q+ c #DA8F1E", "r+ c #C09D5F", "s+ c #99874E", "t+ c #44381A", "u+ c #393D43", "v+ c #54524E", "w+ c #22211D", "x+ c #808683", "y+ c #CEA999", "z+ c #B8220B", "A+ c #963F2A", "B+ c #5C5F5B", "C+ c #444547", "D+ c #0B0B0B", "E+ c #424242", "F+ c #B6723E", "G+ c #BE4000", "H+ c #D5860B", "I+ c #DB9506", "J+ c #BE7A1C", "K+ c #A89D77", "L+ c #AB8017", "M+ c #79643E", "N+ c #98998D", "O+ c #AAAA96", "P+ c #9D9781", "Q+ c #7A3A1E", "R+ c #8D3A27", "S+ c #865B50", "T+ c #7E817F", "U+ c #6B6B6B", "V+ c #121212", "W+ c #070707", "X+ c #151515", "Y+ c #AE3407", "Z+ c #CC6B05", "`+ c #D9960C", " @ c #D78A01", ".@ c #B5853A", "+@ c #DCA217", "@@ c #C07F11", "#@ c #B3B49D", "$@ c #B2AC91", "%@ c #50493D", "&@ c #3A4144", "*@ c #556364", "=@ c #7A8486", "-@ c #9C9C9E", ";@ c #AAA9A9", ">@ c #0F0F0F", ",@ c #242424", "'@ c #A2461F", ")@ c #B84100", "!@ c #D4800A", "~@ c #DC9008", "{@ c #C5811F", "]@ c #C09649", "^@ c #CF7302", "/@ c #9B6237", "(@ c #7E5239", "_@ c #4F4F4F", ":@ c #767677", "<@ c #919090", "[@ c #A3A3A2", "}@ c #A9A9A9", "|@ c #888888", "1@ c #212121", "2@ c #1A1A1A", "3@ c #AD370C", "4@ c #BA5813", "5@ c #B89056", "6@ c #BF7A21", "7@ c #AC6125", "8@ c #B47C4C", "9@ c #AC4C26", "0@ c #4C1F0C", "a@ c #262E31", "b@ c #515151", "c@ c #5E5E5E", "d@ c #555555", "e@ c #030303", "f@ c #5B5B5B", "g@ c #A03911", "h@ c #A8441C", "i@ c #A7643D", "j@ c #A75B39", "k@ c #933A1C", "l@ c #563320", "m@ c #050301", "n@ c #010101", "o@ c #030302", "p@ c #19191C", "q@ c #23262B", "r@ c #2D3033", "s@ c #69250E", "t@ c #7A3014", "u@ c #763818", "v@ c #351B11", "w@ c #00040B", "x@ c #06070C", "y@ c #0E0E0F", "z@ c #101010", "A@ c #121111", "B@ c #121315", "C@ c #14161A", "D@ c #171B21", "E@ c #222426", "F@ c #393021", "G@ c #5E4408", "H@ c #7E580A", "I@ c #604505", "J@ c #312507", "K@ c #251D10", "L@ c #201C17", "M@ c #1E1D1A", "N@ c #1A1A1B", "O@ c #1E1E1C", "P@ c #26221D", "Q@ c #2D261B", "R@ c #372B15", "S@ c #5C400B", "T@ c #8B5B03", "U@ c #9B6505", "V@ c #C98709", "W@ c #C58107", "X@ c #BC7C06", "Y@ c #8F5D05", "Z@ c #6B4503", "`@ c #7D5304", " # c #654305", ".# c #211704", "+# c #020204", "@# c #0B0804", "## c #503405", "$# c #865804", "%# c #764C02", "&# c #754D02", "*# c #B87A08", "=# c #B37608", "-# c #D08A09", ";# c #845A06", "># c #352302", ",# c #513703", "'# c #332102", ")# c #6A4605", "!# c #3A2703", "~# c #352303", "{# c #6B4705", "]# c #3F2902", "^# c #030200", "/# c #191001", "(# c #513603", "_# c #483003", ":# c #322102", "<# c #1E1501", " . + @ ", " # $ % & * = ", " - ; > , ' ' ) * ", " ! ~ { ] ^ ^ / ( _ : ", " < [ } | 1 ' 2 3 4 & ", " 5 6 7 8 9 0 a b c d ", " e f g h i j k @ l m ", " n o p q r s t u v w ", " x y z A B C D E F G H ", " I J K L M N O P Q R S T 8 U V ", " W X Y Z ` ...+.@.#.$. %.: &.*. ", " =.-.;.>.,.'.).!.~.{. ].^./.! (. ", " _.:.<.[.}.|.1.2.3.4. 5.6.7.8.9.0.: ", " a.[ b.c.d.e.f.g.h.i.j.k.l.m.n.o. ", " p.q.r.s.t.u.v.w.x.y.z.A.B.C.D. ", " E.= F.G.H.I.J.K.L.M.N.O.P.Q.R.S. ", " T.) U.> V.W.X.Y.Z.`. +.+++@+/ #+ ", " $+%+&+*+=+-+;+>+,+'+)+!+~+{+' [ ]+^+ ", " /+(+_+:+<+[+}+[+|+1+2+3+4+5+6+7+1 ; % ", " 8+9+0+a+b+c+6+d+^ e+f+g+h+i+j+k+}+l+m+ ", " n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+, 7+^ D+E+ ", " F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+< V+W+X+]+ ", " Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@U+W+>@,@ ", " '@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@W+2@(. ", " 3@4@5@6@7@8@9@0@a@b@c@d@( ] e@2@5 f@ ", " g@h@i@j@k@l@m@^ n@^ ^ o@{ p@q@r@ ", " s@t@u@v@w@x@y@z@A@B@C@D@E@F@ ", " G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@ ", " V@W@X@Y@Z@`@ #.#+#@###$#%#&#*#=#-#;# ", " >#,#'#)#!#~#{#]#^#^ ^ /#(#>#/#_#:#<# ", " ", " "}; tuxguitar-src-1.2/misc/tuxguitar.xml0000644000175000017500000000102411273045350017231 0ustar julianjulian TuxGuitar file GuitarPro file PowerTab file tuxguitar-src-1.2/misc/tuxguitar.tg0000644000175000017500000000132411273045350017046 0ustar julianjulianTuxGuitar File Format - 1.0 Guitar tunerwww.tuxguitar.com.arDemo'Philippe Coval ( http://rzr.online.fr )xGuitar (standard tuning)?EEFGA  B CÿDÿÿ@;72-(ÿ&E3 A3 D3 G3 B3 E4 E F G A B C Dtuxguitar-src-1.2/TuxGuitar-musicxml/build.properties0000644000175000017500000000017611273047467022552 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-musicxml/build.xml0000644000175000017500000000342611273045350021144 0ustar julianjulian TuxGuitar MusicXML Exporter +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-musicxml/GNUmakefile0000644000175000017500000000377511273045350021404 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:12 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-musicxml LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.musicxml.MusicXMLPluginExporter PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:12 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-oss/build.properties0000644000175000017500000000024011273047474021503 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-oss/build.xml0000644000175000017500000000372311273045350020107 0ustar julianjulian TuxGuitar OSS +--------------------------------------------------------------------+ | B U I L D I N G T U X G U I T A R - O S S | +--------------------------------------------------------------------+ ${service.provider} +--------------------------------------------------------------------+ | P A C K A G I N G T U X G U I T A R - O S S | +--------------------------------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-oss/GNUmakefile0000644000175000017500000000526011273045350020336 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.7 2008/02/26 15:24:15 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-oss LIBRARY?=lib$(PACKAGE).so LIBRARY_JNI?=lib$(PACKAGE)-jni.so LIBRARY_PROVIDER?=org.herac.tuxguitar.player.impl.midiport.oss.MidiOutputPortProviderPlugin PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI) INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths JAVA_SOURCE_PATH?=./src/ JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java") JAVA_OBJECTS?=$(PACKAGE).o JNI_SOURCE_PATH?=./jni/ JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c") JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o) GCJ?=gcj GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) CC=gcc CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/) default: all all: objects library library_jni meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(JAVA_OBJECTS) @touch $@ library: $(LIBRARY) library_jni: $(LIBRARY_JNI) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) %.o: %.c $(CC) $(CFLAGS) -c -o $(@F) $< $(PACKAGE).o: $(JAVA_SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(JAVA_OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) $(LIBRARY_JNI): $(JNI_OBJECTS) $(GCJ) -shared -o $@ $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.7 2008/02/26 15:24:15 akdmia Exp $" tuxguitar-src-1.2/TuxGuitar-pdf/build.properties0000644000175000017500000000030611273047502021443 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.itext=../TuxGuitar/lib/itext.jar path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-pdf/build.xml0000644000175000017500000000355311273045350020055 0ustar julianjulian TuxGuitar PDF Exporter +-------------------------------------------------+ | B U I L D I N G P L U G I N P D F | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-ptb/build.properties0000644000175000017500000000017611273047507021471 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-ptb/build.xml0000644000175000017500000000341111273045350020062 0ustar julianjulian TuxGuitar PTB File Format plugin +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-ptb/GNUmakefile0000644000175000017500000000376011273045350020322 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:16 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-ptb LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.ptb.PTInputStreamPlugin PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:16 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-tef/build.properties0000644000175000017500000000017611273047514021460 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build tuxguitar-src-1.2/TuxGuitar-tef/build.xml0000644000175000017500000000341511273045352020061 0ustar julianjulian TuxGuitar Tabledit File Format Importer +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-tef/GNUmakefile0000644000175000017500000000375511273045352020321 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:54 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-tef LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.io.tef.TEPluginImporter PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:54 akdmia Exp $"tuxguitar-src-1.2/TuxGuitar-tray/build.properties0000644000175000017500000000024011273047521021647 0ustar julianjulian### ANT Flags # # build.compiler=gcj ant.build.javac.source=1.4 ant.build.javac.target=1.4 path.tuxguitar=../TuxGuitar/build path.swt=../TuxGuitar/lib/swt.jar tuxguitar-src-1.2/TuxGuitar-tray/build.xml0000644000175000017500000000347311273045352020266 0ustar julianjulian TuxGuitar System Tray +-------------------------------------------------+ | B U I L D I N G P L U G I N | +-------------------------------------------------+ ${service.provider} +-----------------------------------------------+ | P A C K A G I N G P L U G I N | +-----------------------------------------------+ tuxguitar-src-1.2/TuxGuitar-tray/GNUmakefile0000644000175000017500000000375011273045352020515 0ustar julianjulian#! /usr/bin/make -f # -*- makefile -*- #ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:52 akdmia Exp $" #@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $ #licence: LGPL #------------------------------------------------------------------------------ PACKAGE?=tuxguitar-tray LIBRARY?=lib$(PACKAGE).so LIBRARY_PROVIDER?=org.herac.tuxguitar.tray.TGTrayPlugin PREFIX?=/usr # dependencies SWT_PATH?=/usr/share/java/swt.jar # tuxguitar paths TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin TG_PREFIX?=$(PREFIX) TG_SOURCE_PATH?=$(TG_PREFIX)/src TG_LIBRARY_PATH?=$(TG_PREFIX)/lib TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins # install paths INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH) INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services # build paths SOURCE_PATH?=./src/ SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java") OBJECTS?=$(PACKAGE).o GCJ?=gcj GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) default: all all: objects library meta-inf objects: tmp.classes.tmp tmp.classes.tmp: $(OBJECTS) @touch $@ library: $(LIBRARY) install: -install -d $(DESTDIR)$(PREFIX)/ -install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/ -install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/ -install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) uninstall: -rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY) -rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS) clean: -@find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1 -@find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1 -@rm $(TG_SERVICE_CLASS) $(PACKAGE).o: $(SOURCES) $(GCJ) $(GCJFLAGS) -c -o $(@F) $^ $(LIBRARY): $(OBJECTS) ${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F) meta-inf: echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS) #eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:52 akdmia Exp $"././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/jni/org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI.htuxguitar-src-1.2/TuxGuitar-AudioUnit/jni/org_herac_tuxguitar_player_impl_midiport_audiounit_MidiRec0000644000175000017500000000533511273045343034117 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI */ #ifndef _Included_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI #define _Included_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: open * Signature: ()V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_open (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: close * Signature: ()V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_close (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: openDevice * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_openDevice (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: closeDevice * Signature: ()V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_closeDevice (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: noteOn * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_noteOn (JNIEnv *, jobject, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: noteOff * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_noteOff (JNIEnv *, jobject, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: controlChange * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_controlChange (JNIEnv *, jobject, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: programChange * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_programChange (JNIEnv *, jobject, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: pitchBend * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_pitchBend (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus } #endif #endif ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/jni/org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI.cpptuxguitar-src-1.2/TuxGuitar-AudioUnit/jni/org_herac_tuxguitar_player_impl_midiport_audiounit_MidiRec0000644000175000017500000003071611273045343034120 0ustar julianjulian#include #include "org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI.h" #include #include // some MIDI constants: enum { kMidiMessage_ControlChange = 0xB, kMidiMessage_ProgramChange = 0xC, kMidiMessage_NoteOff = 0x8, kMidiMessage_NoteOn = 0x9, kMidiMessage_PitchBend = 0xE }; enum Controllers { kController_BankMSBControl = 0, kController_BankLSBControl = 32, }; const int PITCH_BEND_LOWEST = 0; const int PITCH_BEND_CENTER = 8192; const int PITCH_BEND_HIGHEST = 16383; // Does not enforce the 'unsigned' aspect, this type only exists to make the calls clear what they expect typedef char UInt7; class MidiPlayer { AUGraph graph; AudioUnit synthUnit; OSStatus result; // ---------------------------------------------------------------------------------------- /** Create the Graph and the Synth unit */ OSStatus createAUGraph (AUGraph &outGraph, AudioUnit &outSynth) { OSStatus result; //create the nodes of the graph AUNode synthNode, limiterNode, outNode; ComponentDescription cd; cd.componentManufacturer = kAudioUnitManufacturer_Apple; cd.componentFlags = 0; cd.componentFlagsMask = 0; require_noerr (result = NewAUGraph (&outGraph), CreateAUGraph_home); cd.componentType = kAudioUnitType_MusicDevice; cd.componentSubType = kAudioUnitSubType_DLSSynth; require_noerr (result = AUGraphAddNode (outGraph, &cd, &synthNode), CreateAUGraph_home); cd.componentType = kAudioUnitType_Effect; cd.componentSubType = kAudioUnitSubType_PeakLimiter; require_noerr (result = AUGraphAddNode (outGraph, &cd, &limiterNode), CreateAUGraph_home); cd.componentType = kAudioUnitType_Output; cd.componentSubType = kAudioUnitSubType_DefaultOutput; require_noerr (result = AUGraphAddNode (outGraph, &cd, &outNode), CreateAUGraph_home); require_noerr (result = AUGraphOpen (outGraph), CreateAUGraph_home); require_noerr (result = AUGraphConnectNodeInput (outGraph, synthNode, 0, limiterNode, 0), CreateAUGraph_home); require_noerr (result = AUGraphConnectNodeInput (outGraph, limiterNode, 0, outNode, 0), CreateAUGraph_home); // ok we're good to go - get the Synth Unit... require_noerr (result = AUGraphNodeInfo(outGraph, synthNode, 0, &outSynth), CreateAUGraph_home); CreateAUGraph_home: return result; } public: // ---------------------------------------------------------------------------------------- MidiPlayer(char* bankPath = 0) { graph = 0; require_noerr (result = this->createAUGraph (graph, synthUnit), ctor_home); // if the user supplies a sound bank, we'll set that before we initialize and start playing if (bankPath) { FSRef fsRef; require_noerr (result = FSPathMakeRef ((const UInt8*)bankPath, &fsRef, 0), ctor_home); printf ("Setting Sound Bank:%s\n", bankPath); require_noerr (result = AudioUnitSetProperty (synthUnit, kMusicDeviceProperty_SoundBankFSRef, kAudioUnitScope_Global, 0, &fsRef, sizeof(fsRef)), ctor_home); } // initialize and start the graph require_noerr (result = AUGraphInitialize (graph), ctor_home); for (int n=0; n<15; n++) { this->programChange(0, n); this->setBank(n); } // print out the graph so we can see what it looks like... //CAShow (graph); require_noerr (result = AUGraphStart (graph), ctor_home); return; ctor_home: fprintf(stderr, "Error in MidiPlayer::MidiPlayer\n"); } // ---------------------------------------------------------------------------------------- ~MidiPlayer() { if (graph) { AUGraphStop (graph); DisposeAUGraph (graph); } } // ---------------------------------------------------------------------------------------- /** Note on event */ void noteOn(UInt32 noteNum, UInt32 onVelocity, UInt8 midiChannelInUse) { UInt32 noteOnCommand = kMidiMessage_NoteOn << 4 | midiChannelInUse; require_noerr (result = MusicDeviceMIDIEvent(synthUnit, noteOnCommand, noteNum, onVelocity, 0), home_note_on); return; home_note_on: fprintf(stderr, "Error in MidiPlayer::noteOn\n"); } // ---------------------------------------------------------------------------------------- /** Note off event */ void noteOff(UInt32 noteNum, UInt8 midiChannelInUse) { UInt32 noteOffCommand = kMidiMessage_NoteOn << 4 | midiChannelInUse; require_noerr (result = MusicDeviceMIDIEvent(synthUnit, noteOffCommand, noteNum, 0, 0), home_note_off); return; home_note_off: fprintf(stderr, "Error in MidiPlayer::noteOff\n"); } // ---------------------------------------------------------------------------------------- /** Program change event */ void programChange(UInt8 progChangeNum, UInt8 midiChannelInUse) { require_noerr (result = MusicDeviceMIDIEvent(synthUnit, kMidiMessage_ProgramChange << 4 | midiChannelInUse, progChangeNum, 0, 0 /*sample offset*/), home_programChange); return; home_programChange: fprintf(stderr, "Error in MidiPlayer::programChange\n"); } // ---------------------------------------------------------------------------------------- /** Bank set event */ void setBank(UInt8 midiChannelInUse) { require_noerr (result = MusicDeviceMIDIEvent(synthUnit, kMidiMessage_ControlChange << 4 | midiChannelInUse, kController_BankMSBControl, 0, 0 /*sample offset*/), home_setBank); return; home_setBank: fprintf(stderr, "Error in MidiPlayer::setBank\n"); } // ---------------------------------------------------------------------------------------- /** Control Event */ void controlEvent(UInt8 controller, UInt7 value, UInt8 midiChannelInUse) { require_noerr (result = MusicDeviceMIDIEvent(synthUnit, kMidiMessage_ControlChange << 4 | midiChannelInUse, controller, value, 0 /*sample offset*/), home_setBank); return; home_setBank: fprintf(stderr, "Error in MidiPlayer::setBank\n"); } // ---------------------------------------------------------------------------------------- /** Pitch Bend Event */ void pitchBend(UInt7 lsb_value, UInt7 msb_value, UInt8 midiChannelInUse) { require_noerr (result = MusicDeviceMIDIEvent(synthUnit, kMidiMessage_PitchBend << 4 | midiChannelInUse, lsb_value, msb_value, 0 /*sample offset*/), home_setBank); return; home_setBank: fprintf(stderr, "Error in MidiPlayer::setBank\n"); } // ---------------------------------------------------------------------------------------- /** Easier Pitch Bend Event * \param relative_value Ranging from -2 to 2, where 0 means no pitch change, -2 is two half-steps lower, etc. */ void pitchBend(float relative_value, UInt8 midiChannelInUse) { int converted_value = PITCH_BEND_CENTER; if (relative_value < -2.0f || relative_value > 2.0f) { fprintf(stderr, "Pitch event cannot handle %f\n", relative_value); } if (relative_value != 0.0f) { converted_value = PITCH_BEND_CENTER + relative_value*(PITCH_BEND_HIGHEST - PITCH_BEND_LOWEST); if (converted_value < PITCH_BEND_LOWEST) converted_value = PITCH_BEND_LOWEST; else if (converted_value > PITCH_BEND_HIGHEST) converted_value = PITCH_BEND_HIGHEST; } UInt7 lsb = converted_value & 0x7F; // extract the 7 least significant bytes UInt7 msb = (converted_value >> 7) & 0x7F; // extract the 7 most significant bytes pitchBend(lsb, msb, midiChannelInUse); } }; // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- MidiPlayer* player; void init() { player = new MidiPlayer(); } void free() { delete player; } void programChange(int channel, int instrument) { player->programChange(instrument, channel); } void controlChange(int channel, int controller, int value) { player->controlEvent(controller, value, channel); } void pitchBend(int channel, short value) { value *= 128; // tg has the center at 64, but audiounit at 8192 UInt7 lsb = value & 0x7F; // extract the 7 least significant bytes UInt7 msb = (value >> 7) & 0x7F; // extract the 7 most significant bytes player->pitchBend(lsb, msb, channel); } void noteOn(int pitchID, int volume, int channel) { player->noteOn(pitchID, volume, channel); } void noteOff(int pitchID, int volume, int channel) { player->noteOff(pitchID, channel); } /* -------------------------------------------------------------------------------------------------------------------------------- */ /* open port */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_open(JNIEnv* env, jobject obj) { } /* close port */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_close(JNIEnv* env, jobject obj) { } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_openDevice(JNIEnv* env, jobject obj) { init(); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_closeDevice(JNIEnv* env, jobject obj) { free(); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_noteOn(JNIEnv* env, jobject ojb, jint channel, jint note, jint velocity) { noteOn(note, velocity, channel); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_noteOff(JNIEnv* env, jobject ojb, jint channel, jint note, jint velocity) { noteOff(note, velocity, channel); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_programChange(JNIEnv* env, jobject ojb, jint channel, jint program) { programChange(channel, program); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_controlChange(JNIEnv* env, jobject ojb, jint channel, jint control, jint value) { controlChange(channel, control, value); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI_pitchBend(JNIEnv* env, jobject ojb, jint channel, jint value) { pitchBend(channel, value); } tuxguitar-src-1.2/TuxGuitar-AudioUnit/jni/Makefile0000644000175000017500000000206211273045343021600 0ustar julianjulianCXX = g++ SDK = /Developer/SDKs/MacOSX10.5.sdk SDK64 = /Developer/SDKs/MacOSX10.5.sdk JAVA_FRAMEWORK = $(SDK)/System/Library/Frameworks/JavaVM.framework JAVA_FRAMEWORK64 = $(SDK64)/System/Library/Frameworks/JavaVM.framework INCLUDES = -I $(JAVA_FRAMEWORK)/Headers/ INCLUDES64 = -I $(JAVA_FRAMEWORK64)/Headers/ LIBRARIES = -framework CoreAudio -framework JavaVM -framework AudioUnit -framework AudioToolbox -framework CoreServices LIBRARY = libtuxguitar-audiounit-jni.jnilib FILENAME = org_herac_tuxguitar_player_impl_midiport_audiounit_MidiReceiverJNI.cpp all: $(LIBRARY) $(LIBRARY): clean g++ $(INCLUDES) -isysroot $(SDK) -arch ppc $(LIBRARIES) -msse -bundle -o ppc_$(LIBRARY) $(FILENAME) g++ $(INCLUDES) -isysroot $(SDK) -arch i386 $(LIBRARIES) -msse -bundle -o intel_$(LIBRARY) $(FILENAME) g++ $(INCLUDES64) -isysroot $(SDK64) -arch x86_64 $(LIBRARIES) -msse -bundle -o intel64_$(LIBRARY) $(FILENAME) lipo -create ppc_$(LIBRARY) intel_$(LIBRARY) intel64_$(LIBRARY) -output $(LIBRARY) clean: rm -f ppc_$(LIBRARY) intel_$(LIBRARY) intel64_$(LIBRARY) $(LIBRARY)tuxguitar-src-1.2/TuxGuitar-alsa/jni/org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem.c0000644000175000017500000001662311273045342033052 0ustar julianjulian#include #include #include #include "org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem.h" typedef struct { snd_seq_t *seq; snd_seq_addr_t *address; snd_seq_event_t ev; } handle_t; JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_malloc(JNIEnv* env, jobject obj) { jlong ptr = 0; handle_t *handle = (handle_t *) malloc( sizeof(handle_t) ); handle->seq = NULL; handle->address = NULL; memcpy(&ptr, &handle, sizeof( handle )); return ptr; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_free(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ free( handle ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_open(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq == NULL){ //---open sequencer if(snd_seq_open(&handle->seq, "default", SND_SEQ_OPEN_DUPLEX, 0) < 0){ handle->seq = NULL; return; } //---create port snd_seq_port_info_t *pinfo; snd_seq_port_info_alloca(&pinfo); snd_seq_port_info_set_port(pinfo,0); snd_seq_port_info_set_name(pinfo, "TuxGuitar"); snd_seq_port_info_set_type(pinfo,SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION); if(snd_seq_create_port(handle->seq, pinfo) < 0){ handle->seq = NULL; return; } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_close(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL){ snd_seq_close(handle->seq); handle->seq = NULL; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_findPorts(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL){ int bits = (SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE); snd_seq_client_info_t *client_info; snd_seq_port_info_t *port_info; snd_seq_client_info_alloca(&client_info); snd_seq_port_info_alloca(&port_info); snd_seq_client_info_set_client(client_info, -1); while (snd_seq_query_next_client(handle->seq, client_info) >= 0) { snd_seq_port_info_set_client(port_info, snd_seq_client_info_get_client(client_info)); snd_seq_port_info_set_port(port_info, -1); while (snd_seq_query_next_port(handle->seq, port_info) >= 0) { if ( (snd_seq_port_info_get_capability(port_info) & bits ) == bits ){ jstring name = (*env)->NewStringUTF(env, snd_seq_port_info_get_name(port_info)); jint client = (snd_seq_port_info_get_addr(port_info))->client; jint port = (snd_seq_port_info_get_addr(port_info))->port; //Add a new MidiPort to the java class jclass cl = (*env)->GetObjectClass(env, obj); jmethodID mid = (*env)->GetMethodID(env, cl, "addPort", "(Ljava/lang/String;II)V"); if (mid != 0){ (*env)->CallVoidMethod(env, obj, mid,name,client,port); } } } } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_openPort(JNIEnv* env, jobject obj, jlong ptr, jint client, jint port) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address == NULL){ if ( snd_seq_connect_to(handle->seq,0, client,port) >= 0 ) { handle->address = (snd_seq_addr_t *) malloc( sizeof(snd_seq_addr_t) ); handle->address->client = client; handle->address->port = port; } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_closePort(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address != NULL){ snd_seq_disconnect_to(handle->seq, 0, handle->address->client,handle->address->port); free ( handle->address ); handle->address = NULL; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_noteOn(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address != NULL){ snd_seq_ev_clear(&handle->ev); snd_seq_ev_set_direct(&handle->ev); snd_seq_ev_set_source(&handle->ev,0); snd_seq_ev_set_dest(&handle->ev,handle->address->client,handle->address->port); snd_seq_ev_set_noteon(&handle->ev, channel , note , velocity); if(snd_seq_event_output_direct(handle->seq, &handle->ev) < 0){ return; } snd_seq_drain_output(handle->seq); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_noteOff(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address != NULL){ snd_seq_ev_clear(&handle->ev); snd_seq_ev_set_direct(&handle->ev); snd_seq_ev_set_source(&handle->ev,0); snd_seq_ev_set_dest(&handle->ev,handle->address->client,handle->address->port); snd_seq_ev_set_noteoff(&handle->ev, channel , note , velocity); if(snd_seq_event_output_direct(handle->seq, &handle->ev) < 0){ return; } snd_seq_drain_output(handle->seq); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_programChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint program) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address != NULL){ snd_seq_ev_clear(&handle->ev); snd_seq_ev_set_direct(&handle->ev); snd_seq_ev_set_source(&handle->ev,0); snd_seq_ev_set_dest(&handle->ev,handle->address->client,handle->address->port); snd_seq_ev_set_pgmchange(&handle->ev,channel,program); if(snd_seq_event_output_direct(handle->seq, &handle->ev) < 0){ return; } snd_seq_drain_output(handle->seq); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_controlChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint control, jint value) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address != NULL){ snd_seq_ev_clear(&handle->ev); snd_seq_ev_set_direct(&handle->ev); snd_seq_ev_set_source(&handle->ev,0); snd_seq_ev_set_dest(&handle->ev,handle->address->client,handle->address->port); snd_seq_ev_set_controller(&handle->ev,channel,control,value); if(snd_seq_event_output_direct(handle->seq, &handle->ev) < 0){ return; } snd_seq_drain_output(handle->seq); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_pitchBend(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint value) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->seq != NULL && handle->address != NULL){ snd_seq_ev_clear(&handle->ev); snd_seq_ev_set_direct(&handle->ev); snd_seq_ev_set_source(&handle->ev,0); snd_seq_ev_set_dest(&handle->ev,handle->address->client,handle->address->port); snd_seq_ev_set_pitchbend(&handle->ev,channel, ((value * 128) - 8192)); if(snd_seq_event_output_direct(handle->seq, &handle->ev) < 0){ return; } snd_seq_drain_output(handle->seq); } } tuxguitar-src-1.2/TuxGuitar-alsa/jni/org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem.h0000644000175000017500000000652011273045342033052 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem */ #ifndef _Included_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem #define _Included_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: malloc * Signature: ()I */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_malloc (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: free * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_free (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: open * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_open (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: close * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_close (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: findPorts * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_findPorts (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: openPort * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_openPort (JNIEnv *, jobject, jlong, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: closePort * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_closePort (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: noteOn * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_noteOn (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: noteOff * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_noteOff (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: controlChange * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_controlChange (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: programChange * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_programChange (JNIEnv *, jobject, jlong, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem * Method: pitchBend * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem_pitchBend (JNIEnv *, jobject, jlong, jint, jint); #ifdef __cplusplus } #endif #endif tuxguitar-src-1.2/TuxGuitar-alsa/jni/GNUmakefile0000644000175000017500000000107011273045342021226 0ustar julianjulianCFLAGS?=-I$(shell gcj -print-file-name=include/) CFLAGS+=-fPIC LDFLAGS?= LDLIBS?=-lasound LDPATH?=-L/usr/lib LIBRARY_PREFIX?=lib LIBRARY_NAME?=tuxguitar-alsa-jni LIBRARY_EXTENSION?=.so LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION) OBJECTS=org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem.o %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< all: $(LIBRARY) $(LIBRARY): $(OBJECTS) $(CC) $(LDFLAGS) -shared -o $(LIBRARY) $(OBJECTS) $(LDPATH) $(LDLIBS) clean: rm -f $(OBJECTS) $(LIBRARY) #eof "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $" tuxguitar-src-1.2/TuxGuitar-winmm/jni/org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem.h0000644000175000017500000000657711273045361033505 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem */ #ifndef _Included_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem #define _Included_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: malloc * Signature: ()J */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_malloc (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: free * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_free (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: open * Signature: (JLjava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_open (JNIEnv *, jobject, jlong, jstring); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: close * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_close (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: findPorts * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_findPorts (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: openPort * Signature: (JI)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_openPort (JNIEnv *, jobject, jlong, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: closePort * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_closePort (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: noteOn * Signature: (JIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_noteOn (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: noteOff * Signature: (JIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_noteOff (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: controlChange * Signature: (JIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_controlChange (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: programChange * Signature: (JII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_programChange (JNIEnv *, jobject, jlong, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem * Method: pitchBend * Signature: (JII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_pitchBend (JNIEnv *, jobject, jlong, jint, jint); #ifdef __cplusplus } #endif #endif tuxguitar-src-1.2/TuxGuitar-winmm/jni/GNUmakefile0000644000175000017500000000100611273045361021435 0ustar julianjulianCFLAGS?=-mno-cygwin -I$(shell gcj -print-file-name=include/) LDFLAGS?=-mno-cygwin -Wl,--kill-at LDLIBS?=-lwinmm LDPATH?= LIBRARY_PREFIX?= LIBRARY_NAME?=tuxguitar-winmm-jni LIBRARY_EXTENSION?=.dll LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION) OBJECTS=org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem.o %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< all: $(LIBRARY) $(LIBRARY): $(OBJECTS) $(CC) $(LDFLAGS) -shared -o $(LIBRARY) $(OBJECTS) $(LDPATH) $(LDLIBS) clean: rm -f $(OBJECTS) $(LIBRARY) tuxguitar-src-1.2/TuxGuitar-winmm/jni/org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem.c0000644000175000017500000001045011273045361033461 0ustar julianjulian#include #include #include #include #include #include "org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem.h" typedef struct handle{ HMIDIOUT* out; }midi_handle_t; JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_malloc(JNIEnv* env, jobject obj) { jlong ptr = 0; midi_handle_t *handle = (midi_handle_t *) malloc( sizeof(midi_handle_t) ); handle->out = NULL; memcpy(&ptr, &handle, sizeof( handle )); return ptr; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_free(JNIEnv* env, jobject obj, jlong ptr) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ free( handle ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_findPorts(JNIEnv* env, jobject obj, jlong ptr) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ MIDIOUTCAPSW moc; UINT count, i; count = midiOutGetNumDevs(); for (i = 0; i < count; i++){ if (midiOutGetDevCapsW(i, &moc, sizeof(MIDIOUTCAPSW)) == MMSYSERR_NOERROR){ //Add a new MidiDevice to the java class jint device = i; jstring name = (*env)->NewString( env, (jchar*)moc.szPname , wcslen( moc.szPname ) ); jclass cl = (*env)->GetObjectClass(env, obj); jmethodID mid = (*env)->GetMethodID(env, cl, "addPort", "(Ljava/lang/String;I)V"); if (mid != 0){ (*env)->CallVoidMethod(env, obj, mid, name, device); } } } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_openPort(JNIEnv* env, jobject obj, jlong ptr, jint device) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out == NULL){ handle->out = (HMIDIOUT *)malloc( sizeof(HMIDIOUT) ); if ( midiOutOpen(handle->out, (UINT)device, 0, 0, CALLBACK_WINDOW) != MMSYSERR_NOERROR ){ free( handle->out ); handle->out = NULL; } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_closePort(JNIEnv* env, jobject obj, jlong ptr) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out != NULL){ midiOutClose(*handle->out); free( handle->out ); handle->out = NULL; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_noteOn(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out != NULL){ midiOutShortMsg(*handle->out, ( ( 0x90 | channel ) | ( note << 8) | ( velocity << 16) ) ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_noteOff(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out != NULL){ midiOutShortMsg(*handle->out, ( ( 0x80 | channel ) | ( note << 8) | ( velocity << 16) ) ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_programChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint program) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out != NULL){ midiOutShortMsg(*handle->out, ( ( 0xC0 | channel ) | ( program << 8) ) ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_controlChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint control, jint value) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out != NULL){ midiOutShortMsg(*handle->out, ( ( 0xB0 | channel ) | ( control << 8) | ( value << 16) ) ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem_pitchBend(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint value) { midi_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->out != NULL){ midiOutShortMsg(*handle->out, ( ( 0xE0 | channel ) | ( (value * 128 * 2) << 8 ) ) ); } } tuxguitar-src-1.2/TuxGuitar-carbon-integration/jni/org_herac_tuxguitar_carbon_opendoc_OpenDocJNI.h0000644000175000017500000000117711273045343033253 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_carbon_opendoc_OpenDocJNI */ #ifndef _Included_org_herac_tuxguitar_carbon_opendoc_OpenDocJNI #define _Included_org_herac_tuxguitar_carbon_opendoc_OpenDocJNI #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_carbon_opendoc_OpenDocJNI * Method: AEGetParamDesc * Signature: (IIILorg/eclipse/swt/internal/carbon/AEDesc;)I */ JNIEXPORT jint JNICALL Java_org_herac_tuxguitar_carbon_opendoc_OpenDocJNI_AEGetParamDesc (JNIEnv *, jclass, jint, jint, jint, jobject); #ifdef __cplusplus } #endif #endif ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/jni/org_herac_tuxguitar_carbon_opendoc_OpenDocJNI.cpptuxguitar-src-1.2/TuxGuitar-carbon-integration/jni/org_herac_tuxguitar_carbon_opendoc_OpenDocJNI.cpp0000644000175000017500000000362111273045343033602 0ustar julianjulian#include #include #include "org_herac_tuxguitar_carbon_opendoc_OpenDocJNI.h" #define VERSION "1.03" /** * AEDesc code from SWT, os_structs.c * Copyright (c) 2000, 2006 IBM Corporation and others. */ typedef struct AEDesc_FID_CACHE { int cached; jclass clazz; jfieldID descriptorType, dataHandle; } AEDesc_FID_CACHE; AEDesc_FID_CACHE AEDescFc; void cacheAEDescFields(JNIEnv *env, jobject lpObject) { if (AEDescFc.cached){ return; } AEDescFc.clazz = env->GetObjectClass(lpObject); AEDescFc.descriptorType = env->GetFieldID(AEDescFc.clazz, "descriptorType", "I"); AEDescFc.dataHandle = env->GetFieldID(AEDescFc.clazz, "dataHandle", "I"); AEDescFc.cached = 1; } AEDesc *getAEDescFields(JNIEnv *env, jobject lpObject, AEDesc *lpStruct) { if (!AEDescFc.cached){ cacheAEDescFields(env, lpObject); } lpStruct->descriptorType = (DescType)env->GetIntField(lpObject, AEDescFc.descriptorType); lpStruct->dataHandle = (AEDataStorage)env->GetIntField(lpObject, AEDescFc.dataHandle); return lpStruct; } void setAEDescFields(JNIEnv *env, jobject lpObject, AEDesc *lpStruct) { if (!AEDescFc.cached){ cacheAEDescFields(env, lpObject); } env->SetIntField(lpObject, AEDescFc.descriptorType, (jint)lpStruct->descriptorType); env->SetIntField(lpObject, AEDescFc.dataHandle, (jint)lpStruct->dataHandle); } JNIEXPORT jint JNICALL Java_org_herac_tuxguitar_carbon_opendoc_OpenDocJNI_AEGetParamDesc (JNIEnv *env, jclass that, jint theAppleEvent, jint theAEKeyword,jint desiredType, jobject result) { AEDesc _result, *lpresult=NULL; jint rc = 0; if (result) if ((lpresult = getAEDescFields(env, result, &_result)) == NULL) goto fail; rc = (jint)AEGetParamDesc((const AppleEvent *)theAppleEvent, (AEKeyword)theAEKeyword, (DescType)desiredType, (AEDescList *)lpresult); fail: if (result && lpresult) setAEDescFields(env, result, lpresult); return rc; } tuxguitar-src-1.2/TuxGuitar-carbon-integration/jni/Makefile0000644000175000017500000000132011273045343023460 0ustar julianjulianCXX = g++ SDK = /Developer/SDKs/MacOSX10.4u.sdk JAVA_FRAMEWORK = $(SDK)/System/Library/Frameworks/JavaVM.framework INCLUDES = -I $(JAVA_FRAMEWORK)/Headers/ LIBRARIES = -framework JavaVM -framework Carbon -framework ApplicationServices LIBRARY = libtuxguitar-carbon-integration.jnilib FILENAME = org_herac_tuxguitar_carbon_opendoc_OpenDocJNI.cpp all: $(LIBRARY) $(LIBRARY): clean g++ $(INCLUDES) -isysroot $(SDK) -arch ppc $(LIBRARIES) -msse -dynamiclib -o ppc_$(LIBRARY) $(FILENAME) g++ $(INCLUDES) -isysroot $(SDK) -arch i386 $(LIBRARIES) -msse -dynamiclib -o intel_$(LIBRARY) $(FILENAME) lipo -create ppc_$(LIBRARY) intel_$(LIBRARY) -output $(LIBRARY) clean: rm -f ppc_$(LIBRARY) intel_$(LIBRARY) $(LIBRARY)././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/jni/org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI.htuxguitar-src-1.2/TuxGuitar-CoreAudio/jni/org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiRec0000644000175000017500000000532311273045344034037 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI */ #ifndef _Included_org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI #define _Included_org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: open * Signature: ()V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_open (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: close * Signature: ()V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_close (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: openDevice * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_openDevice (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: closeDevice * Signature: ()V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_closeDevice (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: noteOn * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_noteOn (JNIEnv *, jobject, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: noteOff * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_noteOff (JNIEnv *, jobject, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: controlChange * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_controlChange (JNIEnv *, jobject, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: programChange * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_programChange (JNIEnv *, jobject, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_alsa_MidiReceiverJNI * Method: pitchBend * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_pitchBend (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus } #endif #endif ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/jni/org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI.cpptuxguitar-src-1.2/TuxGuitar-CoreAudio/jni/org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiRec0000644000175000017500000001567411273045344034051 0ustar julianjulian#include #include "org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI.h" //#include //for file stuff #include #include //for AUGraph #include #include // ------------------------------------------------------------------------------------------------ // This call creates the Graph and the Synth unit... OSStatus CreateAUGraph (AUGraph& outGraph, AudioUnit& outSynth) { OSStatus result; //create the nodes of the graph AUNode synthNode, limiterNode, outNode; ComponentDescription cd; cd.componentManufacturer = kAudioUnitManufacturer_Apple; cd.componentFlags = 0; cd.componentFlagsMask = 0; require_noerr (result = NewAUGraph (&outGraph), home); cd.componentType = kAudioUnitType_MusicDevice; cd.componentSubType = kAudioUnitSubType_DLSSynth; require_noerr (result = AUGraphNewNode (outGraph, &cd, 0, NULL, &synthNode), home); cd.componentType = kAudioUnitType_Effect; cd.componentSubType = kAudioUnitSubType_PeakLimiter; require_noerr (result = AUGraphNewNode (outGraph, &cd, 0, NULL, &limiterNode), home); cd.componentType = kAudioUnitType_Output; cd.componentSubType = kAudioUnitSubType_DefaultOutput; require_noerr (result = AUGraphNewNode (outGraph, &cd, 0, NULL, &outNode), home); require_noerr (result = AUGraphOpen (outGraph), home); require_noerr (result = AUGraphConnectNodeInput (outGraph, synthNode, 0, limiterNode, 0), home); require_noerr (result = AUGraphConnectNodeInput (outGraph, limiterNode, 0, outNode, 0), home); // ok we're good to go - get the Synth Unit... require_noerr (result = AUGraphGetNodeInfo(outGraph, synthNode, 0, 0, 0, &outSynth), home); home: return result; } OSStatus PathToFSSpec(const char *filename, FSSpec &outSpec) { FSRef fsRef; OSStatus result; require_noerr (result = FSPathMakeRef ((const UInt8*)filename, &fsRef, 0), home); require_noerr (result = FSGetCatalogInfo(&fsRef, kFSCatInfoNone, NULL, NULL, &outSpec, NULL), home); home: return result; } // some MIDI constants: enum { kMidiMessage_ControlChange = 0xB, kMidiMessage_ProgramChange = 0xC, kMidiMessage_PitchBend = 0xE, kMidiMessage_BankMSBControl = 0, kMidiMessage_BankLSBControl = 32, kMidiMessage_NoteOn = 0x9 }; AUGraph graph = 0; AudioUnit synthUnit; char* bankPath = 0; //UInt8 midiChannelInUse = 0; //we're using midi channel 1... void init() { OSStatus result; const int midiChannelInUse = 0; require_noerr (result = CreateAUGraph (graph, synthUnit), home); // initialize and start the graph require_noerr (result = AUGraphInitialize (graph), home); //set our bank require_noerr (result = MusicDeviceMIDIEvent(synthUnit, kMidiMessage_ControlChange << 4 | midiChannelInUse, kMidiMessage_BankMSBControl, 0, 0/*sample offset*/), home); require_noerr (result = MusicDeviceMIDIEvent(synthUnit, kMidiMessage_ProgramChange << 4 | midiChannelInUse, 0/*prog change num*/, 0, 0/*sample offset*/), home); require_noerr (result = AUGraphStart (graph), home); home: return; } void free() { if (graph) { AUGraphStop (graph); // stop playback - AUGraphDispose will do that for us but just showing you what to do DisposeAUGraph (graph); } } void programChange(int channel, int instrument) { OSStatus result; UInt32 progamChange = kMidiMessage_ProgramChange << 4 | channel; require_noerr (result = MusicDeviceMIDIEvent(synthUnit, progamChange, instrument, 0, 0), home); home: return; } void controlChange(int channel, int controller, int value) { /* // ignore these values, they mess up playback. i have no idea why TuxGuitar sends them or what they are supposed to do. if(controller==100 or controller==101) { return; } */ OSStatus result; UInt32 controlChange = kMidiMessage_ControlChange << 4 | channel; require_noerr (result = MusicDeviceMIDIEvent(synthUnit, controlChange, controller, value, 0), home); home: return; } void pitchBend(int channel, short value) { OSStatus result; UInt32 pitchChange = kMidiMessage_PitchBend << 4 | channel; require_noerr (result = MusicDeviceMIDIEvent(synthUnit, pitchChange, 0, value, 0), home); home: return; } void noteOn(int pitchID, int volume, int channel) { OSStatus result; UInt32 noteOnCommand = kMidiMessage_NoteOn << 4 | channel; /* note on */ require_noerr (result = MusicDeviceMIDIEvent(synthUnit, noteOnCommand, pitchID, volume, 0), home); home: return; } void noteOff(int pitchID, int volume, int channel) { OSStatus result; UInt32 noteOffCommand = kMidiMessage_NoteOn << 4 | channel; // note off require_noerr (result = MusicDeviceMIDIEvent(synthUnit, noteOffCommand, pitchID, 0, 0), home); home: return; } /* -------------------------------------------------------------------------------------------------------------------------------- */ /* open port */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_open(JNIEnv* env, jobject obj) { } /* close port */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_close(JNIEnv* env, jobject obj) { } /* JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_findDevices(JNIEnv* env, jobject obj) { jstring name = env->NewStringUTF( "CoreAudio midi playback"); //Add a new MidiDevice to the java class jclass cl = env->GetObjectClass( obj); jmethodID mid = env->GetMethodID( cl, "addDevice", "(Ljava/lang/String;II)V"); if (mid != 0){ env->CallVoidMethod( obj, mid,name,client,port); } } */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_openDevice(JNIEnv* env, jobject obj) { init(); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_closeDevice(JNIEnv* env, jobject obj) { free(); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_noteOn(JNIEnv* env, jobject ojb, jint channel, jint note, jint velocity) { noteOn(note, velocity, channel); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_noteOff(JNIEnv* env, jobject ojb, jint channel, jint note, jint velocity) { noteOff(note, velocity, channel); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_programChange(JNIEnv* env, jobject ojb, jint channel, jint program) { programChange(channel, program); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_controlChange(JNIEnv* env, jobject ojb, jint channel, jint control, jint value) { controlChange(channel, control, value); } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI_pitchBend(JNIEnv* env, jobject ojb, jint channel, jint value) { pitchBend(channel, value); } tuxguitar-src-1.2/TuxGuitar-CoreAudio/jni/Makefile0000644000175000017500000000140411273045344021551 0ustar julianjulianCXX = g++ SDK = /Developer/SDKs/MacOSX10.4u.sdk JAVA_FRAMEWORK = $(SDK)/System/Library/Frameworks/JavaVM.framework INCLUDES = -I $(JAVA_FRAMEWORK)/Headers/ LIBRARIES = -framework CoreAudio -framework JavaVM -framework AudioUnit -framework AudioToolbox -framework Carbon LIBRARY = libtuxguitar-coreaudio-jni.jnilib FILENAME = org_herac_tuxguitar_player_impl_midiport_coreaudio_MidiReceiverJNI.cpp all: $(LIBRARY) $(LIBRARY): clean g++ $(INCLUDES) -isysroot $(SDK) -arch ppc $(LIBRARIES) -msse -dynamiclib -o ppc_$(LIBRARY) $(FILENAME) g++ $(INCLUDES) -isysroot $(SDK) -arch i386 $(LIBRARIES) -msse -dynamiclib -o intel_$(LIBRARY) $(FILENAME) lipo -create ppc_$(LIBRARY) intel_$(LIBRARY) -output $(LIBRARY) clean: rm -f ppc_$(LIBRARY) intel_$(LIBRARY) $(LIBRARY)././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.ctuxguitar-src-1.2/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiS0000644000175000017500000003621611273045345034274 0ustar julianjulian#include #include #include #include #include "org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.h" typedef struct{ fluid_settings_t* settings; fluid_synth_t* synth; fluid_audio_driver_t* driver; int soundfont_id; }fluid_handle_t; typedef struct{ JNIEnv* env; jobject options; }fluid_settings_foreach_option_data; void fluid_settings_foreach_option_callback(void *data, char *name, char *option) { fluid_settings_foreach_option_data* handle = (fluid_settings_foreach_option_data *)data; jstring joption = (*handle->env)->NewStringUTF(handle->env, option); jclass cl = (*handle->env)->GetObjectClass(handle->env, handle->options); jmethodID mid = (*handle->env)->GetMethodID(handle->env, cl, "add", "(Ljava/lang/Object;)Z"); if (mid != 0){ (*handle->env)->CallBooleanMethod(handle->env, handle->options, mid, joption); } } JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_malloc(JNIEnv* env, jobject obj) { jlong ptr = 0; fluid_handle_t *handle = (fluid_handle_t *) malloc( sizeof(fluid_handle_t) ); handle->settings = new_fluid_settings(); handle->synth = NULL; handle->driver = NULL; handle->soundfont_id = 0; memcpy(&ptr, &handle, sizeof( handle )); return ptr; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_free(JNIEnv* env, jobject obj, jlong ptr) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( handle->driver != NULL ){ delete_fluid_audio_driver(handle->driver); } if( handle->synth != NULL ){ delete_fluid_synth(handle->synth); } if( handle->settings != NULL ){ delete_fluid_settings(handle->settings); } free ( handle ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_open(JNIEnv* env, jobject obj, jlong ptr) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL){ if( handle->driver != NULL ){ delete_fluid_audio_driver(handle->driver); } if( handle->synth != NULL ){ delete_fluid_synth(handle->synth); } handle->synth = new_fluid_synth(handle->settings); handle->driver = new_fluid_audio_driver(handle->settings,handle->synth); fluid_synth_set_interp_method( handle->synth, -1, FLUID_INTERP_NONE ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_close(JNIEnv* env, jobject obj, jlong ptr) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( handle->driver != NULL ){ delete_fluid_audio_driver(handle->driver); } if( handle->synth != NULL ){ delete_fluid_synth(handle->synth); } handle->synth = NULL; handle->driver = NULL; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_loadFont(JNIEnv* env, jobject obj, jlong ptr, jstring path) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL && handle->soundfont_id <= 0){ const jbyte *font = (*env)->GetStringUTFChars(env, path, NULL); handle->soundfont_id = fluid_synth_sfload(handle->synth, font, 1); (*env)->ReleaseStringUTFChars(env, path, font); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_unloadFont(JNIEnv* env, jobject obj, jlong ptr) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL && handle->soundfont_id > 0){ fluid_synth_sfunload(handle->synth, handle->soundfont_id, 1); handle->soundfont_id = 0; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_systemReset(JNIEnv* env, jobject obj, jlong ptr) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL){ fluid_synth_system_reset(handle->synth); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_noteOn(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL){ fluid_synth_noteon(handle->synth, channel, note, velocity); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_noteOff(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL){ fluid_synth_noteoff(handle->synth, channel, note); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_programChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint program) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL){ fluid_synth_program_change(handle->synth, channel, program); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_controlChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint control, jint value) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL){ fluid_synth_cc(handle->synth, channel, control, value); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_pitchBend(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint value) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->synth != NULL){ fluid_synth_pitch_bend(handle->synth, channel, ((value * 128))); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_setDoubleProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jdouble value) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_setnum(handle->settings, (char *)jkey, (float)value ); (*env)->ReleaseStringUTFChars(env, key, jkey); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_setIntegerProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jint value) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_setint(handle->settings, (char *)jkey, (int)value ); (*env)->ReleaseStringUTFChars(env, key, jkey); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_setStringProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jstring value) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); const jbyte *jvalue = (*env)->GetStringUTFChars(env, value, NULL); fluid_settings_setstr(handle->settings, (char *)jkey, (char *)jvalue ); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->ReleaseStringUTFChars(env, value, jvalue); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getDoubleProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(D)V"); if (mid != 0){ double value = 0; const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_getnum(handle->settings,(char *)jkey, &value ); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , (jdouble)value ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getIntegerProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(I)V"); if (mid != 0){ int value = 0; const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_getint(handle->settings,(char *)jkey, &value ); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , (jint)value ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getStringProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(Ljava/lang/String;)V"); if (mid != 0){ jstring jvalue = NULL; char *value = NULL; const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_getstr(handle->settings,(char *)jkey, &value ); jvalue = (*env)->NewStringUTF(env, value); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , jvalue ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getDoublePropertyDefault(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(D)V"); if (mid != 0){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); double value = fluid_settings_getnum_default(handle->settings,(char *)jkey); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , (jdouble)value ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getIntegerPropertyDefault(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(I)V"); if (mid != 0){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); int value = fluid_settings_getint_default(handle->settings,(char *)jkey); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , (jint)value ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getStringPropertyDefault(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(Ljava/lang/String;)V"); if (mid != 0){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); char *value = fluid_settings_getstr_default(handle->settings,(char *)jkey); jstring jvalue = (*env)->NewStringUTF(env, value); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , jvalue ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getDoublePropertyRange(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject minimumRef, jobject maximumRef) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass clMin = (*env)->GetObjectClass(env, minimumRef); jclass clMax = (*env)->GetObjectClass(env, maximumRef); jmethodID midMin = (*env)->GetMethodID(env, clMin, "setValue", "(D)V"); jmethodID midMax = (*env)->GetMethodID(env, clMax, "setValue", "(D)V"); if (midMin != 0 && midMax != 0){ double minimum = 0; double maximum = 0; const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_getnum_range(handle->settings,(char *)jkey, &minimum , &maximum ); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, minimumRef , midMin , (jdouble)minimum ); (*env)->CallVoidMethod( env, maximumRef , midMax , (jdouble)maximum ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getIntegerPropertyRange(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject minimumRef, jobject maximumRef) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass clMin = (*env)->GetObjectClass(env, minimumRef); jclass clMax = (*env)->GetObjectClass(env, maximumRef); jmethodID midMin = (*env)->GetMethodID(env, clMin, "setValue", "(I)V"); jmethodID midMax = (*env)->GetMethodID(env, clMax, "setValue", "(I)V"); if (midMin != 0 && midMax != 0){ int minimum = 0; int maximum = 0; const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_getint_range(handle->settings,(char *)jkey, &minimum , &maximum ); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, minimumRef , midMin , (jint)minimum ); (*env)->CallVoidMethod( env, maximumRef , midMax , (jint)maximum ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getPropertyOptions(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject options) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); fluid_settings_foreach_option_data* data = (fluid_settings_foreach_option_data *)malloc(sizeof(fluid_settings_foreach_option_data*)); data->env = env; data->options = options; fluid_settings_foreach_option(handle->settings, (char *)jkey, data, fluid_settings_foreach_option_callback ); (*env)->ReleaseStringUTFChars(env, key, jkey); free ( data ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_isRealtimeProperty(JNIEnv* env, jobject obj, jlong ptr, jstring key, jobject ref) { fluid_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->settings != NULL && key != NULL ){ jclass cl = (*env)->GetObjectClass(env, ref); jmethodID mid = (*env)->GetMethodID(env, cl, "setValue", "(Z)V"); if (mid != 0){ const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL); int value = fluid_settings_is_realtime(handle->settings,(char *)jkey); (*env)->ReleaseStringUTFChars(env, key, jkey); (*env)->CallVoidMethod( env, ref , mid , (value != 0 ? JNI_TRUE : JNI_FALSE) ); } } } tuxguitar-src-1.2/TuxGuitar-fluidsynth/jni/GNUmakefile0000644000175000017500000000101111273045345022475 0ustar julianjulianCFLAGS?=-I$(shell gcj -print-file-name=include/) CFLAGS+=-fPIC LDFLAGS?= LDLIBS?=-lfluidsynth LDPATH?=-L/usr/lib LIBRARY_PREFIX?=lib LIBRARY_NAME?=tuxguitar-fluidsynth-jni LIBRARY_EXTENSION?=.so LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION) OBJECTS=org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.o %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< all: $(LIBRARY) $(LIBRARY): $(OBJECTS) $(CC) $(LDFLAGS) -shared -o $(LIBRARY) $(OBJECTS) $(LDPATH) $(LDLIBS) clean: rm -f $(OBJECTS) $(LIBRARY) ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.htuxguitar-src-1.2/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiS0000644000175000017500000002041111273045345034262 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth */ #ifndef _Included_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth #define _Included_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: malloc * Signature: ()J */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_malloc (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: free * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_free (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: open * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_open (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: close * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_close (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: loadFont * Signature: (JLjava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_loadFont (JNIEnv *, jobject, jlong, jstring); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: unloadFont * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_unloadFont (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: systemReset * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_systemReset (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: noteOn * Signature: (JIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_noteOn (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: noteOff * Signature: (JIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_noteOff (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: controlChange * Signature: (JIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_controlChange (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: programChange * Signature: (JII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_programChange (JNIEnv *, jobject, jlong, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: pitchBend * Signature: (JII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_pitchBend (JNIEnv *, jobject, jlong, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: setDoubleProperty * Signature: (JLjava/lang/String;D)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_setDoubleProperty (JNIEnv *, jobject, jlong, jstring, jdouble); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: setIntegerProperty * Signature: (JLjava/lang/String;I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_setIntegerProperty (JNIEnv *, jobject, jlong, jstring, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: setStringProperty * Signature: (JLjava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_setStringProperty (JNIEnv *, jobject, jlong, jstring, jstring); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getDoubleProperty * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/DoubleRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getDoubleProperty (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getIntegerProperty * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/IntegerRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getIntegerProperty (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getStringProperty * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/StringRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getStringProperty (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getDoublePropertyDefault * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/DoubleRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getDoublePropertyDefault (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getIntegerPropertyDefault * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/IntegerRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getIntegerPropertyDefault (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getStringPropertyDefault * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/StringRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getStringPropertyDefault (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getDoublePropertyRange * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/DoubleRef;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/DoubleRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getDoublePropertyRange (JNIEnv *, jobject, jlong, jstring, jobject, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getIntegerPropertyRange * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/IntegerRef;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/IntegerRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getIntegerPropertyRange (JNIEnv *, jobject, jlong, jstring, jobject, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: getPropertyOptions * Signature: (JLjava/lang/String;Ljava/util/List;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_getPropertyOptions (JNIEnv *, jobject, jlong, jstring, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth * Method: isRealtimeProperty * Signature: (JLjava/lang/String;Lorg/herac/tuxguitar/player/impl/midiport/fluidsynth/type/BooleanRef;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth_isRealtimeProperty (JNIEnv *, jobject, jlong, jstring, jobject); #ifdef __cplusplus } #endif #endif tuxguitar-src-1.2/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.h0000644000175000017500000000672011273045346026454 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_jack_JackClient */ #ifndef _Included_org_herac_tuxguitar_jack_JackClient #define _Included_org_herac_tuxguitar_jack_JackClient #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_jack_JackClient * Method: malloc * Signature: ()J */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_malloc (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: free * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_free (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: open * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_open (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: close * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_close (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: openPorts * Signature: (JI)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_openPorts (JNIEnv *, jobject, jlong, jint); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: closePorts * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_closePorts (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: getTransportUID * Signature: (J)J */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_getTransportUID (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: getTransportFrame * Signature: (J)J */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_getTransportFrame (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: getTransportFrameRate * Signature: (J)J */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_getTransportFrameRate (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: setTransportFrame * Signature: (JJ)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportFrame (JNIEnv *, jobject, jlong, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: setTransportStart * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportStart (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: setTransportStop * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportStop (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: isTransportRunning * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isTransportRunning (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: isServerRunning * Signature: (J)Z */ JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isServerRunning (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_jack_JackClient * Method: addEventToQueue * Signature: (JI[B)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_addEventToQueue (JNIEnv *, jobject, jlong, jint, jbyteArray); #ifdef __cplusplus } #endif #endif tuxguitar-src-1.2/TuxGuitar-jack/jni/GNUmakefile0000644000175000017500000000105111273045346021221 0ustar julianjulianCFLAGS?=-I$(shell gcj -print-file-name=include/) CFLAGS+=-fPIC LDFLAGS?= LDLIBS?=`pkg-config --libs jack` LDPATH?= LIBRARY_PREFIX?=lib LIBRARY_NAME?=tuxguitar-jack-jni LIBRARY_EXTENSION?=.so LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION) OBJECTS=org_herac_tuxguitar_jack_JackClient.o %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< all: $(LIBRARY) $(LIBRARY): $(OBJECTS) $(CC) $(LDFLAGS) -shared -o $(LIBRARY) $(OBJECTS) $(LDPATH) $(LDLIBS) clean: rm -f $(OBJECTS) $(LIBRARY) #eof "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $" tuxguitar-src-1.2/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.c0000644000175000017500000002750011273045346026446 0ustar julianjulian#include #include #include #include #include #include #include "org_herac_tuxguitar_jack_JackClient.h" #define EVENT_BUFFER_SIZE 512 typedef struct { int event_port; int event_size; jack_midi_data_t *event_data; } jack_jni_event_t; typedef struct { jack_port_t **ports; int port_count; int event_count; jack_jni_event_t event_queue[ EVENT_BUFFER_SIZE ]; } jack_jni_synth_t; typedef struct { int running; pthread_mutex_t lock; jack_client_t *client; jack_jni_synth_t *midi; } jack_jni_handle_t; int JackProcessCallbackImpl(jack_nframes_t nframes, void *ptr); void JackShutdownCallbackImpl(void *ptr); JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_malloc(JNIEnv* env, jobject obj) { jlong ptr = 0; jack_jni_handle_t *handle = (jack_jni_handle_t *) malloc( sizeof(jack_jni_handle_t) ); handle->client = NULL; handle->midi = NULL; handle->running = 0; pthread_mutex_init( &handle->lock , NULL ); memcpy(&ptr, &handle, sizeof( handle )); return ptr; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_free(JNIEnv* env, jobject obj, jlong ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ pthread_mutex_destroy( &handle->lock ); free( handle ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_open(JNIEnv* env, jobject obj, jlong ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client == NULL) { handle->client = jack_client_open ("TuxGuitar", JackNoStartServer , NULL ); if( handle->client != NULL ){ jack_on_shutdown(handle->client, JackShutdownCallbackImpl, handle); jack_set_process_callback (handle->client, JackProcessCallbackImpl , handle); jack_activate (handle->client); } } handle->running = ( handle->client != NULL ? 1 : 0 ); pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_close(JNIEnv* env, jobject obj, jlong ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_deactivate (handle->client); jack_client_close (handle->client); handle->client = NULL; } handle->running = 0; pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_openPorts(JNIEnv* env, jobject obj, jlong ptr, jint ports) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL && handle->midi == NULL ) { int index = 0; handle->midi = (jack_jni_synth_t *) malloc( sizeof(jack_jni_synth_t) ); handle->midi->event_count = 0; handle->midi->port_count = ports; handle->midi->ports = (jack_port_t **) malloc( sizeof( jack_port_t * ) * handle->midi->port_count ); for( index = 0 ; index < handle->midi->port_count ; index ++ ){ char port_name[50]; sprintf( port_name , "Output Port %d", index ); handle->midi->ports[index] = jack_port_register(handle->client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); } for( index = 0 ; index < EVENT_BUFFER_SIZE ; index ++ ){ handle->midi->event_queue[ index ].event_data = NULL; } } pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_closePorts(JNIEnv* env, jobject obj, jlong ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL && handle->midi != NULL) { int index = 0; for( index = 0 ; index < handle->midi->port_count ; index ++ ){ jack_port_unregister(handle->client, handle->midi->ports[index] ); } for( index = 0 ; index < EVENT_BUFFER_SIZE ; index ++ ){ if( handle->midi->event_queue[ index ].event_data != NULL ) { free ( handle->midi->event_queue[ index ].event_data ); } handle->midi->event_queue[ index ].event_data = NULL; } free( handle->midi->ports ); free( handle->midi ); handle->midi = NULL; } pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_getTransportUID(JNIEnv* env, jobject obj, jlong ptr) { jlong result = 0; jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_position_t pos; jack_transport_query( handle->client , &pos ); result = pos.unique_1; } pthread_mutex_unlock( &handle->lock ); } } return result; } JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_getTransportFrame(JNIEnv* env, jobject obj, jlong ptr) { jlong result = 0; jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_position_t pos; jack_transport_query( handle->client , &pos ); result = pos.frame; } pthread_mutex_unlock( &handle->lock ); } } return result; } JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_getTransportFrameRate(JNIEnv* env, jobject obj, jlong ptr) { jlong result = 0; jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_position_t pos; jack_transport_query( handle->client , &pos ); result = pos.frame_rate; } pthread_mutex_unlock( &handle->lock ); } } return result; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportFrame(JNIEnv* env, jobject obj, jlong ptr, jlong frame) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_transport_locate( handle->client, (jack_nframes_t) frame ); } pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportStart(JNIEnv* env, jobject obj, jlong ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_position_t pos; jack_transport_state_t state = jack_transport_query( handle->client , &pos ); if( state == JackTransportStopped ) { jack_transport_start( handle->client ); } } pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportStop(JNIEnv* env, jobject obj, jlong ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_position_t pos; jack_transport_state_t state = jack_transport_query( handle->client , &pos ); if( state != JackTransportStopped ) { jack_transport_stop( handle->client ); } } pthread_mutex_unlock( &handle->lock ); } } } JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isTransportRunning(JNIEnv* env, jobject obj, jlong ptr) { jboolean result = JNI_FALSE; jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL) { jack_position_t pos; jack_transport_state_t state = jack_transport_query( handle->client , &pos ); if( state != JackTransportStopped ) { result = JNI_TRUE; } } pthread_mutex_unlock( &handle->lock ); } } return result; } JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isServerRunning(JNIEnv* env, jobject obj, jlong ptr) { jboolean result = JNI_FALSE; jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->running > 0){ result = JNI_TRUE; } pthread_mutex_unlock( &handle->lock ); } } return result; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_addEventToQueue(JNIEnv* env, jobject obj, jlong ptr, jint port, jbyteArray jdata) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ if(handle->client != NULL && handle->midi != NULL && handle->midi->ports != NULL ) { if( handle->midi->event_count < EVENT_BUFFER_SIZE ) { int count = (*env)->GetArrayLength( env, jdata ); if( count > 0 ){ jbyte* jdataArray = (*env)->GetByteArrayElements( env , jdata, 0); if( jdataArray != NULL ) { if( handle->midi->event_queue[ handle->midi->event_count ].event_data != NULL ) { free ( handle->midi->event_queue[ handle->midi->event_count ].event_data ); handle->midi->event_queue[ handle->midi->event_count ].event_data = NULL; } handle->midi->event_queue[ handle->midi->event_count ].event_port = port; handle->midi->event_queue[ handle->midi->event_count ].event_size = count; handle->midi->event_queue[ handle->midi->event_count ].event_data = (jack_midi_data_t *)malloc( sizeof( jack_midi_data_t ) * count ); if( handle->midi->event_queue[ handle->midi->event_count ].event_data != NULL ) { int index = 0; for( index = 0 ; index < count ; index ++ ){ handle->midi->event_queue[ handle->midi->event_count ].event_data[ index ] = (jack_midi_data_t)jdataArray[ index ]; } handle->midi->event_count ++; (*env)->ReleaseByteArrayElements( env , jdata, jdataArray, 0); } } } } } pthread_mutex_unlock( &handle->lock ); } } } int JackProcessCallbackImpl(jack_nframes_t nframes, void *ptr){ jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_trylock( &handle->lock ) == 0 ){ if(handle->client != NULL && handle->midi != NULL && handle->midi->ports != NULL ) { int index = 0; int count = handle->midi->event_count; for( index = 0 ; index < handle->midi->port_count ; index ++ ){ void *buffer = jack_port_get_buffer(handle->midi->ports[index], jack_get_buffer_size(handle->client) ); if( buffer != NULL ){ jack_midi_clear_buffer( buffer ); } } for( index = 0 ; index < count ; index ++ ){ void *buffer = jack_port_get_buffer(handle->midi->ports[handle->midi->event_queue[index].event_port], jack_get_buffer_size(handle->client) ); if( buffer != NULL ){ jack_midi_data_t *data = jack_midi_event_reserve ( buffer , 0, handle->midi->event_queue[index].event_size); if( data != NULL ){ int data_index = 0; for( data_index = 0 ; data_index < handle->midi->event_queue[index].event_size ; data_index ++ ){ data[ data_index ] = handle->midi->event_queue[index].event_data[ data_index ]; } } handle->midi->event_count --; handle->midi->event_queue[index].event_size = 0; } } } pthread_mutex_unlock( &handle->lock ); } } return 0; } void JackShutdownCallbackImpl(void *ptr) { jack_jni_handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ if( pthread_mutex_lock( &handle->lock ) == 0 ){ handle->running = 0; pthread_mutex_unlock( &handle->lock ); } } } tuxguitar-src-1.2/TuxGuitar-jws/jws/tuxguitar.jnlp0000644000175000017500000000306211273045346022012 0ustar julianjulian TuxGuitar Herac Modern Solutions tuxguitar-src-1.2/TuxGuitar/dist/about_authors.dist0000644000175000017500000000630011273045225022166 0ustar julianjulianJulian Gabriel Casadesus * Project Admin * Developer * Contact: http://www.herac.com.ar Hernan Andres Casadesus * Developer * Contact: http://www.herac.com.ar Nahuel Portilla * Developer * Contact: Nikola Kolarovic * Developer * Documentation * Serbian translation * Contact: Aaron Spike * Developer * Contact: http://www.ekips.org Ersplus * French translation * Ersplus Icon Theme * Contact: http://ersplus.free.fr Licnep * Blue Serious Icon Theme * Contact: Sascha Riemer * Lavender Icon Theme * Contact: Auria * CoreAudio Plugin for MacOS * Contact: Herak * Developer * Contact: Tomasz Bojczuk * Polish translation * Contact: Jose Gato * Mac version * Contact: Thomas Thiel * Deutsch translation * Contact: http://www.wolfchild.de Sergio Abreu * Portuguese translation * Contact: http://sitedosergio.sitesbr.net Markon * Italian translation * Contact: Zdenek Kunicky * Czech translation * Contact: Máté Huszár * Hungarian translation PTT Team * Chinese (Taiwan) translation * Contact: http://www.ptt.cc Shuo Huang * Chinese (GB) translation * Contact: http://www.cucum.cn Philippe Coval * Debian/Ubuntu package maintainer ; Startup script * French translation * Contact: http://rzr.online.fr/contrib.htm Orcan Ogetbil * Fedora package maintainer * Contact: John Gustafsson * Swedish translation * Contact: Pietro Cerutti * FreeBSD port maintainer * Contact: http://www.gahr.ch/ Facundo Corradini * Documentation * Contact: http://www.exitoweb.com.ar Gabe Hargrave * Documentation * Contact: Vadim Ipatov * Russian translation * Contact: http://www.kmtn.ru/~euphoria Zoya Ignatova * Russian translation * Contact: Serge van Namen * Dutch translation * Contact: Yuriy Shakalov * Ukrainian translation * Contact: Nguyen Dinh Trung * Vietnamese translation * Contact: Keisuke Kato * Japanese translation * Contact: http://mingaku.selfip.org/ Beat Weisskopf * Deutsch translation * Contact: Xevi Noe i Nogueiras * Catalan translation * Contact: Jean-Pierre POULIN * Scales contributor * Contact: http://www.jeanpierrepoulin.com/ Lobo * Basque translation * Contact: http://www.myspace.com/lobotheguitardudetuxguitar-src-1.2/TuxGuitar/dist/about_description.dist0000644000175000017500000000035011273045225023023 0ustar julianjulianTuxGuitar is an Open Source multitrack tablature editor and player written in Java. Copyright (C) 2005 Julian Gabriel Casadesus TuxGuitar project: http://www.tuxguitar.com.ar TuxGuitar community: http://community.tuxguitar.com.ar tuxguitar-src-1.2/TuxGuitar/dist/about_license.dist0000644000175000017500000006034311273045225022132 0ustar julianjulianGNU Lesser General Public License Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS TuxGuitar is a multitrack tablature editor and player. Copyright (C) 2005, By Julian Gabriel Casadesus This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA tuxguitar-src-1.2/TuxGuitar/dist/config.dist0000644000175000017500000000020211273045225020547 0ustar julianjulianskin=Lavender midi.port=Gervill midi.sequencer=tuxguitar.sequencer ## Needed for MacOs releases #painter.force-os-defaults=true tuxguitar-src-1.2/TuxGuitar/dist/shortcuts-default.xml0000644000175000017500000000744211273045225022634 0ustar julianjulian tuxguitar-src-1.2/TuxGuitar/xml/build-freebsd.xml0000644000175000017500000000733111273045225021515 0ustar julianjulian Tux-Guitar font.default=Sans,6,2${line.separator} font.note=Sans,7,1${line.separator} font.time-signature=Sans,13,3${line.separator} font.printer.default=Sans,6,2${line.separator} font.printer.note=Sans,6,0${line.separator} font.printer.time-signature=Sans,12,3${line.separator} midi.sequencer=tuxguitar.sequencer${line.separator} midi.port=Java Sound Synthesizer${line.separator} skin=Lavender${line.separator} #!/bin/sh${line.separator} ##SCRIPT DIR${line.separator} DIR_NAME=`dirname "$0"`${line.separator} DIR_NAME=`cd "$DIR_NAME"; pwd`${line.separator} cd "${DIR_NAME}"${line.separator} ##JAVA${line.separator} if [ "${JAVA}" = "" ]; then${line.separator} if [ "${JAVA_HOME}" != "" ]; then${line.separator} JAVA=${JAVA_HOME}/bin/java${line.separator} else${line.separator} JAVA=java${line.separator} fi${line.separator} fi${line.separator} ##CLASSPATH${line.separator} CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${lib.itext.jar}:${dist.share.path}${line.separator} ##LIBRARY_PATH${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${lib.swt.jni}${line.separator} ##MAINCLASS${line.separator} MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator} ##JVM ARGUMENTS${line.separator} VM_ARGS="-Xmx512m"${line.separator} ##LAUNCH${line.separator} ${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"${line.separator} tuxguitar-src-1.2/TuxGuitar/xml/build-linux.xml0000644000175000017500000001422511273045225021242 0ustar julianjulian Tux-Guitar font.default=Sans,6,0${line.separator} font.note=Sans,7,0${line.separator} font.text=Sans,8,0${line.separator} font.lyric=Sans,7,0${line.separator} font.time-signature=Sans,13,1${line.separator} font.printer.default=Sans,6,0${line.separator} font.printer.note=Sans,6,0${line.separator} font.printer.text=Sans,8,0${line.separator} font.printer.lyric=Sans,7,0${line.separator} font.printer.time-signature=Sans,10,1${line.separator} midi.sequencer=tuxguitar.sequencer${line.separator} midi.port=Gervill${line.separator} skin=Lavender${line.separator} ${line.separator} This product include third party libraries:${line.separator} -> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/${line.separator} -> iText (Free Java-PDF library): http://www.lowagie.com/iText/${line.separator} #!/bin/sh${line.separator} ##SCRIPT DIR${line.separator} DIR_NAME=`dirname "$0"`${line.separator} DIR_NAME=`cd "$DIR_NAME"; pwd`${line.separator} cd "${DIR_NAME}"${line.separator} ##JAVA${line.separator} if [ -z $JAVA ]; then${line.separator} JAVA=${JAVA_HOME}/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=/usr/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=java${line.separator} fi${line.separator} ##MOZILLA_FIVE_HOME${line.separator} if [ -z $MOZILLA_FIVE_HOME ]; then${line.separator} MOZILLA_FIVE_HOME=/usr/lib/firefox${line.separator} [ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/mozilla${line.separator} [ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/iceweasel${line.separator} fi${line.separator} ##LIBRARY_PATH${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${lib.swt.jni}${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MOZILLA_FIVE_HOME}${line.separator} ##CLASSPATH${line.separator} CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${lib.itext.jar}:${dist.share.path}${line.separator} ##MAINCLASS${line.separator} MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator} ##JVM ARGUMENTS${line.separator} VM_ARGS="-Xmx512m"${line.separator} ##EXPORT VARS${line.separator} export CLASSPATH${line.separator} export LD_LIBRARY_PATH${line.separator} export MOZILLA_FIVE_HOME${line.separator} ##LAUNCH${line.separator} ${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Dtuxguitar.share.path="${dist.share.path}" -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"${line.separator} tuxguitar-src-1.2/TuxGuitar/xml/build-mac.xml0000644000175000017500000003605511273045225020650 0ustar julianjulian Tux-Guitar painter.force-os-defaults=true${line.separator} font.default=Sans,6,2${line.separator} font.note=Sans,7,1${line.separator} font.time-signature=Sans,13,3${line.separator} font.printer.default=Sans,6,2${line.separator} font.printer.note=Sans,6,0${line.separator} font.printer.time-signature=Sans,12,3${line.separator} midi.sequencer=tuxguitar.sequencer${line.separator} midi.port=audiounit${line.separator} skin=Lavender${line.separator} ${line.separator} This product include third party libraries:${line.separator} -> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/${line.separator} -> iText (Free Java-PDF library): http://www.lowagie.com/iText/${line.separator} ${st}?xml version="1.0" encoding="UTF-8"?${et}${line.separator} ${st}!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"${et}${line.separator} ${st}plist version="1.0"${et}${line.separator} ${st}dict${et}${line.separator} ${st}key${et}CFBundleExecutable${st}/key${et}${line.separator} ${st}string${et}tuxguitar${st}/string${et}${line.separator} ${st}key${et}CFBundleGetInfoString${st}/key${et}${line.separator} ${st}string${et}TuxGuitar ${dist.version} for Mac OS X${st}/string${et}${line.separator} ${st}key${et}CFBundleIconFile${st}/key${et}${line.separator} ${st}string${et}icon.icns${st}/string${et}${line.separator} ${st}key${et}CFBundleIdentifier${st}/key${et}${line.separator} ${st}string${et}org.herac.tuxguitar${st}/string${et}${line.separator} ${st}key${et}CFBundleInfoDictionaryVersion${st}/key${et}${line.separator} ${st}string${et}6.0${st}/string${et}${line.separator} ${st}key${et}CFBundleName${st}/key${et}${line.separator} ${st}string${et}TuxGuitar${st}/string${et}${line.separator} ${st}key${et}CFBundlePackageType${st}/key${et}${line.separator} ${st}string${et}APPL${st}/string${et}${line.separator} ${st}key${et}CFBundleShortVersionString${st}/key${et}${line.separator} ${st}string${et}${dist.version}${st}/string${et}${line.separator} ${st}key${et}CFBundleSignature${st}/key${et}${line.separator} ${st}string${et}?????${st}/string${et}${line.separator} ${st}key${et}CFBundleVersion${st}/key${et}${line.separator} ${st}string${et}${dist.version}${st}/string${et}${line.separator} ${st}key${et}NSPrincipalClass${st}/key${et}${line.separator} ${st}string${et}NSApplication${st}/string${et}${line.separator} ${st}key${et}CFBundleDocumentTypes${st}/key${et}${line.separator} ${st}array${et}${line.separator} ${st}dict${et}${line.separator} ${st}key${et}CFBundleTypeExtensions${st}/key${et}${line.separator} ${st}array${et}${line.separator} ${st}string${et}tg${st}/string${et}${line.separator} ${st}/array${et}${line.separator} ${st}key${et}CFBundleTypeIconFile${st}/key${et}${line.separator} ${st}string${et}tgdoc.icns${st}/string${et}${line.separator} ${st}key${et}CFBundleTypeName${st}/key${et}${line.separator} ${st}string${et}TuxGuitar Document${st}/string${et}${line.separator} ${st}key${et}CFBundleTypeRole${st}/key${et}${line.separator} ${st}string${et}Editor${st}/string${et}${line.separator} ${st}key${et}LSIsAppleDefaultForType${st}/key${et}${line.separator} ${st}true/${et}${line.separator} ${st}key${et}LSTypeIsPackage${st}/key${et}${line.separator} ${st}false/${et}${line.separator} ${st}/dict${et}${line.separator} ${st}dict${et}${line.separator} ${st}key${et}CFBundleTypeExtensions${st}/key${et}${line.separator} ${st}array${et}${line.separator} ${st}string${et}gp${st}/string${et}${line.separator} ${st}string${et}gtp${st}/string${et}${line.separator} ${st}string${et}gp2${st}/string${et}${line.separator} ${st}string${et}gp3${st}/string${et}${line.separator} ${st}string${et}gp4${st}/string${et}${line.separator} ${st}string${et}gp5${st}/string${et}${line.separator} ${st}/array${et}${line.separator} ${st}key${et}CFBundleTypeIconFile${st}/key${et}${line.separator} ${st}string${et}tgdoc.icns${st}/string${et}${line.separator} ${st}key${et}CFBundleTypeName${st}/key${et}${line.separator} ${st}string${et}Guitar Pro Document${st}/string${et}${line.separator} ${st}key${et}CFBundleTypeRole${st}/key${et}${line.separator} ${st}string${et}Editor${st}/string${et}${line.separator} ${st}key${et}LSIsAppleDefaultForType${st}/key${et}${line.separator} ${st}true/${et}${line.separator} ${st}key${et}LSTypeIsPackage${st}/key${et}${line.separator} ${st}false/${et}${line.separator} ${st}/dict${et}${line.separator} ${st}dict${et}${line.separator} ${st}key${et}CFBundleTypeExtensions${st}/key${et}${line.separator} ${st}array${et}${line.separator} ${st}string${et}ptb${st}/string${et}${line.separator} ${st}/array${et}${line.separator} ${st}key${et}CFBundleTypeIconFile${st}/key${et}${line.separator} ${st}string${et}tgdoc.icns${st}/string${et}${line.separator} ${st}key${et}CFBundleTypeName${st}/key${et}${line.separator} ${st}string${et}PowerTab Document${st}/string${et}${line.separator} ${st}key${et}CFBundleTypeRole${st}/key${et}${line.separator} ${st}string${et}Editor${st}/string${et}${line.separator} ${st}key${et}LSIsAppleDefaultForType${st}/key${et}${line.separator} ${st}true/${et}${line.separator} ${st}key${et}LSTypeIsPackage${st}/key${et}${line.separator} ${st}false/${et}${line.separator} ${st}/dict${et}${line.separator} ${st}/array${et}${line.separator} ${st}/dict${et}${line.separator} ${st}/plist${et}${line.separator} #!/bin/bash${line.separator} ##SCRIPT DIR${line.separator} DIR_NAME=`dirname "$0"`${line.separator} DIR_NAME=`cd "$DIR_NAME"; pwd`${line.separator} cd "${DIR_NAME}"${line.separator} ##CLASSPATH${line.separator} CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${lib.itext.jar}:${dist.share.path}${line.separator} ##LIBRARY_PATH${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${lib.swt.jni}${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib${line.separator} ##MAINCLASS${line.separator} MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator} ##JVM ARGUMENTS${line.separator} VM_ARGS="-Xmx512m"${line.separator} ##SWT ARGUMENTS${line.separator} SWT_ARGS="-XstartOnFirstThread"${line.separator} ##LAUNCH${line.separator} exec java ${VM_ARGS} ${SWT_ARGS} -cp :${CLASSPATH} -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"${line.separator} tuxguitar-src-1.2/TuxGuitar/xml/build-ubuntu.xml0000644000175000017500000003300411273045225021421 0ustar julianjulian Tux-Guitar font.default=Sans,6,0${line.separator} font.note=Sans,7,0${line.separator} font.text=Sans,8,0${line.separator} font.lyric=Sans,7,0${line.separator} font.time-signature=Sans,13,1${line.separator} font.printer.default=Sans,6,0${line.separator} font.printer.note=Sans,6,0${line.separator} font.printer.text=Sans,8,0${line.separator} font.printer.lyric=Sans,7,0${line.separator} font.printer.time-signature=Sans,10,1${line.separator} midi.sequencer=tuxguitar.sequencer${line.separator} midi.port=Gervill${line.separator} skin=Lavender${line.separator} Package: tuxguitar${line.separator} Version: ${dist.version}${line.separator} Architecture: i386${line.separator} Depends: openjdk-6-jre | sun-java6-jre | sun-java5-jre | java-gcj-compat-headless | java-virtual-machine, libitext-java, libswt-gtk-3.4-java | libswt3.2-gtk-java, libswt-cairo-gtk-3.4-jni | libswt3.2-gtk-java, libswt-mozilla-gtk-3.4-jni | libswt3.2-gtk-java ${line.separator} Priority: optional${line.separator} Section: Multimedia${line.separator} Maintainer: Julian Casadesus julian@casadesus.com.ar${line.separator} Description: TuxGuitar is a multitrack guitar tablature editor and player${line.separator} #!/bin/sh${line.separator} set -e${line.separator} if [ "$1" = "configure" ]; then${line.separator} if [ -x "`which update-mime-database 2</dev/null`" ]; then${line.separator} update-mime-database /usr/share/mime${line.separator} fi${line.separator} if [ -x "`which update-desktop-database 2</dev/null`" ]; then${line.separator} update-desktop-database -q${line.separator} fi${line.separator} fi${line.separator} #!/bin/sh${line.separator} set -e${line.separator} if [ "$1" = "remove" ]; then${line.separator} if [ -x "`which update-mime-database 2</dev/null`" ]; then${line.separator} update-mime-database /usr/share/mime${line.separator} fi${line.separator} if [ -x "`which update-desktop-database 2</dev/null`" ]; then${line.separator} update-desktop-database -q${line.separator} fi${line.separator} fi${line.separator} [Desktop Entry]${line.separator} Name=TuxGuitar${line.separator} GenericName=TuxGuitar${line.separator} Comment=TuxGuitar${line.separator} Type=Application${line.separator} MimeType=audio/x-tuxguitar;audio/x-gtp;audio/x-ptb${line.separator} Categories=Application;AudioVideo;${line.separator} Exec=tuxguitar %F${line.separator} Icon=${dist.share.path}skins${file.separator}Lavender${file.separator}icon-96x96.png${line.separator} Terminal=false${line.separator} StartupNotify=false${line.separator} <?xml version="1.0" encoding="UTF-8"?>${line.separator} <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">${line.separator} <mime-type type="audio/x-tuxguitar">${line.separator} <comment>TuxGuitar file</comment>${line.separator} <glob pattern="*.tg"/>${line.separator} </mime-type>${line.separator} <mime-type type="audio/x-gtp">${line.separator} <comment>GuitarPro file</comment>${line.separator} <glob pattern="*.gtp"/>${line.separator} <glob pattern="*.gp3"/>${line.separator} <glob pattern="*.gp4"/>${line.separator} <glob pattern="*.gp5"/>${line.separator} </mime-type>${line.separator} <mime-type type="audio/x-ptb">${line.separator} <comment>PowerTab file</comment>${line.separator} <glob pattern="*.ptb"/>${line.separator} </mime-type>${line.separator} </mime-info>${line.separator} #!/bin/sh${line.separator} ##SCRIPT DIR${line.separator} DIR_NAME=`dirname "$0"`${line.separator} DIR_NAME=`cd "$DIR_NAME"; pwd`${line.separator} cd "${DIR_NAME}"${line.separator} ##JAVA${line.separator} if [ -z $JAVA ]; then${line.separator} JAVA=${JAVA_HOME}/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=/usr/lib/jvm/java-6-sun/jre/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=/usr/lib/jvm/java-1.5.0-sun/jre/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=/usr/lib/jvm/java-7-icedtea/jre/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=/usr/bin/java${line.separator} [ ! -f ${JAVA} ] && JAVA=java${line.separator} fi${line.separator} ##MOZILLA_FIVE_HOME${line.separator} if [ -z $MOZILLA_FIVE_HOME ]; then${line.separator} MOZILLA_FIVE_HOME=/usr/lib/firefox${line.separator} [ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/mozilla${line.separator} [ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/iceweasel${line.separator} fi${line.separator} ##LIBRARY_PATH${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${dist.lib.path}${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${lib.swt.jni}${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib${line.separator} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MOZILLA_FIVE_HOME}${line.separator} ##CLASSPATH${line.separator} CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${lib.itext.jar}:${dist.share.path}${line.separator} ##MAINCLASS${line.separator} MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator} ##JVM ARGUMENTS${line.separator} VM_ARGS="-Xmx512m"${line.separator} ##EXPORT VARS${line.separator} export CLASSPATH${line.separator} export LD_LIBRARY_PATH${line.separator} export MOZILLA_FIVE_HOME${line.separator} ##LAUNCH${line.separator} ${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Dtuxguitar.share.path="${dist.share.path}" -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"${line.separator} tuxguitar-src-1.2/TuxGuitar/xml/build-windows.xml0000644000175000017500000001501111273045225021567 0ustar julianjulian Tux-Guitar font.default=Small Fonts,7,0${line.separator} font.note=Small Fonts,7,0${line.separator} font.time-signature=Sylfaen,10,1${line.separator} font.text=Tahoma,8,0${line.separator} font.lyric=Tahoma,7,0${line.separator} font.grace=Small Fonts,6,0${line.separator} font.chord=Tahoma,8,0${line.separator} font.chord-fret=Small Fonts,6,0${line.separator} font.printer.default=Tahoma,6,0${line.separator} font.printer.text=Tahoma,8,0${line.separator} font.printer.time-signature=Sylfaen,10,1${line.separator} font.printer.lyric=Tahoma,7,0${line.separator} font.printer.note=Small Fonts,6,0${line.separator} font.printer.grace=Small Fonts,5,0${line.separator} font.printer.chord=Tahoma,8,0${line.separator} browser.lines-visible=false${line.separator} midi.sequencer=tuxguitar.sequencer${line.separator} skin=Lavender${line.separator} ${line.separator} This product include third party libraries:${line.separator} -> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/${line.separator} -> iText (Free Java-PDF library): http://www.lowagie.com/iText/${line.separator} cd "."${line.separator} java -cp ;${dist.jar.path}${build.jar};${lib.swt.jar};${lib.itext.jar};${dist.share.path} -Djava.library.path=${lib.swt.jni} org.herac.tuxguitar.gui.TGMain %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 -Djava.class.path=${janel.lap.prefix}${dist.jar.path}${build.jar};${janel.lap.prefix}${lib.swt.jar};${janel.lap.prefix}${lib.itext.jar};${janel.lap.prefix}${dist.share.path}${line.separator} # Java class to call, ex. mypackage.Start or mypackage/Start${line.separator} janel.main.class=org.herac.tuxguitar.gui.TGMain${line.separator} ${line.separator} # the minimum version of the JVM, ex. 1.4.1${line.separator} janel.min.java.version=1.4.2${line.separator} ${line.separator} # the path to be added to Java system property java.library.path. which is used to locate native DLLs. Multiple${line.separator} # instances of this property may be used.${line.separator} #${line.separator} janel.library.path.dir=${janel.lap.prefix}${lib.swt.jni}${line.separator} ${line.separator} # overrides the default error text ("Error in Java launcher.") with a custom error message.${line.separator} #${line.separator} janel.error.default.text=Error in TuxGuitar${line.separator} ${line.separator} # allows the detailed error messages to be disabled (true/false, yes/no - defaults to true). If true, the default${line.separator} # error message will be displayed followed by the details.${line.separator} #${line.separator} janel.error.show.detail=true${line.separator} ${line.separator} # sets the max memory via -Xmx as percent of total physical memory. See above for percent explanation.${line.separator} #${line.separator} janel.memory.max.total.percent=50${line.separator} tuxguitar-src-1.2/TuxGuitar/doc/AUTHORS0000644000175000017500000000630011273045224017273 0ustar julianjulianJulian Gabriel Casadesus * Project Admin * Developer * Contact: http://www.herac.com.ar Hernan Andres Casadesus * Developer * Contact: http://www.herac.com.ar Nahuel Portilla * Developer * Contact: Nikola Kolarovic * Developer * Documentation * Serbian translation * Contact: Aaron Spike * Developer * Contact: http://www.ekips.org Ersplus * French translation * Ersplus Icon Theme * Contact: http://ersplus.free.fr Licnep * Blue Serious Icon Theme * Contact: Sascha Riemer * Lavender Icon Theme * Contact: Auria * CoreAudio Plugin for MacOS * Contact: Herak * Developer * Contact: Tomasz Bojczuk * Polish translation * Contact: Jose Gato * Mac version * Contact: Thomas Thiel * Deutsch translation * Contact: http://www.wolfchild.de Sergio Abreu * Portuguese translation * Contact: http://sitedosergio.sitesbr.net Markon * Italian translation * Contact: Zdenek Kunicky * Czech translation * Contact: Máté Huszár * Hungarian translation PTT Team * Chinese (Taiwan) translation * Contact: http://www.ptt.cc Shuo Huang * Chinese (GB) translation * Contact: http://www.cucum.cn Philippe Coval * Debian/Ubuntu package maintainer ; Startup script * French translation * Contact: http://rzr.online.fr/contrib.htm Orcan Ogetbil * Fedora package maintainer * Contact: John Gustafsson * Swedish translation * Contact: Pietro Cerutti * FreeBSD port maintainer * Contact: http://www.gahr.ch/ Facundo Corradini * Documentation * Contact: http://www.exitoweb.com.ar Gabe Hargrave * Documentation * Contact: Vadim Ipatov * Russian translation * Contact: http://www.kmtn.ru/~euphoria Zoya Ignatova * Russian translation * Contact: Serge van Namen * Dutch translation * Contact: Yuriy Shakalov * Ukrainian translation * Contact: Nguyen Dinh Trung * Vietnamese translation * Contact: Keisuke Kato * Japanese translation * Contact: http://mingaku.selfip.org/ Beat Weisskopf * Deutsch translation * Contact: Xevi Noe i Nogueiras * Catalan translation * Contact: Jean-Pierre POULIN * Scales contributor * Contact: http://www.jeanpierrepoulin.com/ Lobo * Basque translation * Contact: http://www.myspace.com/lobotheguitardudetuxguitar-src-1.2/TuxGuitar/doc/CHANGES0000644000175000017500000000072511273045224017223 0ustar julianjulianTuxGuitar 1.2 changes: * Fix some bugs * Support measure range to loop * Transpose notes feature * Optionally transpose afected notes when change tuning * Move beats left|right support * More song properties options. * Add multiple measure support * Clean multiple measure support * Number of pastes support * Better lilypond plugin * Better fluidsynth plugin * New jack plugin * New community integration plugin * New cocoa integration plugin * New audio unit plugin tuxguitar-src-1.2/TuxGuitar/doc/LICENSE0000644000175000017500000006034311273045224017237 0ustar julianjulianGNU Lesser General Public License Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS TuxGuitar is a multitrack tablature editor and player. Copyright (C) 2005, By Julian Gabriel Casadesus This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA tuxguitar-src-1.2/TuxGuitar/doc/README0000644000175000017500000000345011273045224017106 0ustar julianjulianDESCRIPTION: TuxGuitar is a multitrack tablature editor and player written in Java-SWT. LICENSE: TuxGuitar is released under the GNU Lesser General Public License. REQUIREMENTS: Java Runtime Environment 1.4.X or later installed in your system. PROBLEMS: * SWT: If you see an error like "java.lang.UnsatisfiedLinkError", you will need to replace your swt shared library files and jar packages compiled for your system. TuxGuitar comes with SWT for linux-x86, linux-x86_64, mac and win32-x86. make sure download the correct file. if you need another version, download your SWT and replace in lib folder. If you don't have SWT installed in one of this locations: /lib, /usr/lib, /usr/local/lib or TuxGuitar/lib. You will need to add its path to the LD_LIBRARY_PATH and CLASSPATH environment vars. Export LD_LIBRARY_PATH and CLASSPATH: $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_swt_library_folder/ $export CLASSPATH=$CLASSPATH:/your_swt_library_folder/swt.jar $/home/user/TuxGuitar-*/TuxGuitar * UNSUPPORTED CLASS VERSION: java.lang.UnsupportedClassVersionError. This means that your JVM is not compatible with the JVM used to create the binaries. If you see a message like this, you will need to rebuild TuxGuitar from sources. * FAILDED TO LOAD PLUGINS: TuxGuitar 1.0 has better JVM compatibility than older releases. But some plugins (e.g: Java Sound Api plugin) still depends on Sun Java(TM) Development Kit (JDK) 5.0. if you have installed more than one JVM in your system, you can use one of these environment vars: JAVA or JAVA_HOME to run TuxGuitar with a specified JVM. Export JAVA: $export JAVA=/usr/lib/jvm/java-1.5.0-sun/bin/java $/home/user/TuxGuitar-*/tuxguitar Export JAVA_HOME: $export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun $/home/user/TuxGuitar-*/tuxguitar tuxguitar-src-1.2/TuxGuitar-oss/jni/org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem.c0000644000175000017500000001312411273045350032612 0ustar julianjulian#include #include #include #include #include #include #include "org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem.h" typedef struct { int fd; int port; } handle_t; JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_malloc(JNIEnv* env, jobject obj) { jlong ptr = 0; handle_t *handle = (handle_t *) malloc( sizeof(handle_t) ); handle->fd = -1; handle->port = -1; memcpy(&ptr, &handle, sizeof( handle )); return ptr; } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_free(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL){ free( handle ); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_open(JNIEnv* env, jobject obj, jlong ptr, jstring str) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd == -1) { const char *device = (*env)->GetStringUTFChars(env, str, 0); handle->port = -1; if (( handle->fd = open (device, O_WRONLY)) == -1) { handle = NULL; perror (device); } (*env)->ReleaseStringUTFChars(env, str, device); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_close(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0) { close(handle->fd); handle->fd = -1; handle->port = -1; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_findPorts(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0) { int i; int count; struct midi_info info; ioctl(handle->fd, SNDCTL_SEQ_NRMIDIS, &count); for ( i = 0; i < count ; i++ ) { info.device = i; ioctl(handle->fd, SNDCTL_MIDI_INFO, &info); //Add a new MidiDevice to the java class jint device = info.device; jstring name = (*env)->NewStringUTF(env, info.name); jclass cl = (*env)->GetObjectClass(env, obj); jmethodID mid = (*env)->GetMethodID(env, cl, "addPort", "(Ljava/lang/String;I)V"); if (mid != 0){ (*env)->CallVoidMethod(env, obj, mid,name,device); } } } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_openPort(JNIEnv* env, jobject obj, jlong ptr, jint device) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL) { handle->port = device; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_closePort(JNIEnv* env, jobject obj, jlong ptr) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL) { handle->port = -1; } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_noteOn(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0 && handle->port >= 0) { unsigned char packet[4] = {SEQ_MIDIPUTC, 0, handle->port, 1}; packet[1] = (0x90 | channel); write(handle->fd, packet, sizeof(packet)); packet[1] = note; write(handle->fd, packet, sizeof(packet)); packet[1] = velocity; write(handle->fd, packet, sizeof(packet)); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_noteOff(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint note, jint velocity) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0 && handle->port >= 0) { unsigned char packet[4] = {SEQ_MIDIPUTC, 0, handle->port, 0}; packet[1] = (0x80 | channel); write(handle->fd, packet, sizeof(packet)); packet[1] = note; write(handle->fd, packet, sizeof(packet)); packet[1] = velocity; write(handle->fd, packet, sizeof(packet)); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_programChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint program) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0 && handle->port >= 0) { unsigned char packet[4] = {SEQ_MIDIPUTC, 0, handle->port, 0}; packet[1] = (0xC0 | channel); write(handle->fd, packet, sizeof(packet)); packet[1] = program; write(handle->fd, packet, sizeof(packet)); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_controlChange(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint control, jint value) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0 && handle->port >= 0) { unsigned char packet[4] = {SEQ_MIDIPUTC, 0, handle->port, 0}; packet[1] = (0xB0 | channel); write(handle->fd, packet, sizeof(packet)); packet[1] = control; write(handle->fd, packet, sizeof(packet)); packet[1] = value; write(handle->fd, packet, sizeof(packet)); } } JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_pitchBend(JNIEnv* env, jobject obj, jlong ptr, jint channel, jint value) { handle_t *handle = NULL; memcpy(&handle, &ptr, sizeof(handle)); if(handle != NULL && handle->fd >= 0 && handle->port >= 0) { unsigned char packet[4] = {SEQ_MIDIPUTC, 0, handle->port, 0}; packet[1] = (0xE0 | channel); write(handle->fd, packet, sizeof(packet)); packet[1] = 0; write(handle->fd, packet, sizeof(packet)); packet[1] = value; write(handle->fd, packet, sizeof(packet)); } } tuxguitar-src-1.2/TuxGuitar-oss/jni/GNUmakefile0000644000175000017500000000104411273045350021112 0ustar julianjulianCFLAGS?=-I$(shell gcj -print-file-name=include/) CFLAGS+=-fPIC LDFLAGS?= LDLIBS?= LDPATH?= LIBRARY_PREFIX?=lib LIBRARY_NAME?=tuxguitar-oss-jni LIBRARY_EXTENSION?=.so LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION) OBJECTS=org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem.o %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< all: $(LIBRARY) $(LIBRARY): $(OBJECTS) $(CC) $(LDFLAGS) -shared -o $(LIBRARY) $(OBJECTS) $(LDPATH) $(LDLIBS) clean: rm -f $(OBJECTS) $(LIBRARY) #eof "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $" tuxguitar-src-1.2/TuxGuitar-oss/jni/org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem.h0000644000175000017500000000651111273045350032621 0ustar julianjulian/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem */ #ifndef _Included_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem #define _Included_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem #ifdef __cplusplus extern "C" { #endif /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: malloc * Signature: ()I */ JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_malloc (JNIEnv *, jobject); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: free * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_free (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: open * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_open (JNIEnv *, jobject, jlong, jstring); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: close * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_close (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: findPorts * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_findPorts (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: openPort * Signature: (II)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_openPort (JNIEnv *, jobject, jlong, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: closePort * Signature: (I)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_closePort (JNIEnv *, jobject, jlong); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: noteOn * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_noteOn (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: noteOff * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_noteOff (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: controlChange * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_controlChange (JNIEnv *, jobject, jlong, jint, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: programChange * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_programChange (JNIEnv *, jobject, jlong, jint, jint); /* * Class: org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem * Method: pitchBend * Signature: (III)V */ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem_pitchBend (JNIEnv *, jobject, jlong, jint, jint); #ifdef __cplusplus } #endif #endif tuxguitar-src-1.2/TuxGuitar-lilypond/share/lang/messages_sv.properties0000644000175000017500000000167611273045347026007 0ustar julianjulian# Swedish translation for TuxGuitar's Fluidsynth plugin. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2009. # fluidsynth.settings=Inst\u00e4llningar f\u00f6r Fluidsynth fluidsynth.settings.audio=Ljud fluidsynth.settings.audio.driver=Ljuddrivrutin fluidsynth.settings.audio.sample-format=Samplingsformat fluidsynth.settings.audio.periods=Buffertantal fluidsynth.settings.audio.period-size=Buffertstorlek fluidsynth.settings.synth=Synthesizer fluidsynth.settings.synth.gain=F\u00f6rst\u00e4rkning fluidsynth.settings.synth.sample-rate=Samplingsfrekvens fluidsynth.settings.synth.polyphony=Polyfoni fluidsynth.settings.synth.reverb.active=Reverb aktiverad fluidsynth.settings.synth.chorus.active=Chorus aktiverad fluidsynth.settings.soundfonts=Soundfont fluidsynth.settings.soundfonts.list=Tillg\u00e4ngliga soundfont tuxguitar-src-1.2/TuxGuitar-lilypond/share/lang/messages.properties0000644000175000017500000000133511273045347025267 0ustar julianjulianlilypond.options=Options lilypond.options.select-track.tip=Track Selection lilypond.options.select-track=Export track lilypond.options.select-all-tracks=Export all tracks lilypond.options.layout.tip=Layout Options lilypond.options.layout.enable-score=Show score lilypond.options.layout.enable-tablature=Show tablature lilypond.options.layout.enable-lyrics=Show lyrics lilypond.options.layout.enable-texts=Show texts lilypond.options.layout.enable-chord-diagrams=Show chord diagrams lilypond.options.layout.enable-track-groups=Show grouped tracks lilypond.options.layout.enable-track-names=Show track names lilypond.options.measure-range.tip=Measure range lilypond.options.measure-range.from=From lilypond.options.measure-range.to=To tuxguitar-src-1.2/TuxGuitar-lilypond/share/lang/messages_ja.properties0000644000175000017500000000204111273045347025734 0ustar julianjulianlilypond.options=\u30aa\u30d7\u30b7\u30e7\u30f3 lilypond.options.select-track.tip=\u30c8\u30e9\u30c3\u30af\u306e\u9078\u629e lilypond.options.select-track=\u30c8\u30e9\u30c3\u30af lilypond.options.select-all-tracks=\u3059\u3079\u3066\u306e\u30c8\u30e9\u30c3\u30af\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b lilypond.options.layout.tip=\u30ec\u30a4\u30a2\u30a6\u30c8\u30fb\u30aa\u30d7\u30b7\u30e7\u30f3 lilypond.options.layout.enable-score=\u4e94\u7dda\u8b5c lilypond.options.layout.enable-tablature=TAB\u8b5c lilypond.options.layout.enable-lyrics=\u6b4c\u8a5e lilypond.options.layout.enable-texts=\u30c6\u30ad\u30b9\u30c8 lilypond.options.layout.enable-chord-diagrams=\u30b3\u30fc\u30c9\u30fb\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0 lilypond.options.layout.enable-track-groups=\u30c8\u30e9\u30c3\u30af\u30fb\u30b0\u30eb\u30fc\u30d7 lilypond.options.layout.enable-track-names=\u30c8\u30e9\u30c3\u30af\u540d lilypond.options.measure-range.tip=\u7bc4\u56f2 lilypond.options.measure-range.from=\u958b\u59cb lilypond.options.measure-range.to=\u7d42\u4e86 tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_zh_GB.properties0000644000175000017500000000430111273045344026523 0ustar julianjuliantuxguitar-community.auth-dialog.title=\u767B\u5F55 tuxguitar-community.auth-dialog.signin=\u6211\u7684\u8D26\u53F7 tuxguitar-community.auth-dialog.signin.username=\u7528\u6237\u540D tuxguitar-community.auth-dialog.signin.password=\u5BC6\u7801 tuxguitar-community.auth-dialog.signup=\u6211\u662F\u65B0\u7528\u6237 tuxguitar-community.auth-dialog.signup.tip=\u5982\u679C\u4F60\u8FD8\u6CA1\u6709TuxGutiar\u793E\u533A\u5E10\u53F7, \u70B9\u51FB\u8FD9\u91CC\u6CE8\u518C.\u767B\u5F55\u540E\u5C31\u53EF\u4EE5\u4E0A\u4F20,\u4E0B\u8F7D,\u53D1\u8868\u610F\u89C1,\u8FD8\u80FD\u4E3A\u66F2\u8C31\u6253\u5206. tuxguitar-community.share-dialog.title=\u5206\u4EAB\u97F3\u4E50 tuxguitar-community.share-dialog.details=\u6B4C\u66F2\u7EC6\u8282 tuxguitar-community.share-dialog.details.user=\u7528\u6237\u540D tuxguitar-community.share-dialog.details.title=\u6B4C\u66F2\u540D tuxguitar-community.share-dialog.details.tagkeys=\u5173\u952E\u5B57 tuxguitar-community.share-dialog.details.description=\u63CF\u8FF0 tuxguitar-community.browser-dialog.title=\u5206\u4EAB\u66F2\u8C31 tuxguitar-community.browser-dialog.account=\u6211\u7684\u8D26\u6237 tuxguitar-community.browser-dialog.account.user=\u7528\u6237\u540D tuxguitar-community.welcome-dialog.title=\u6B22\u8FCE\u6765\u5230TuxGuitar\u793E\u533A tuxguitar-community.welcome-dialog.tip-1=\u60A8\u53EF\u4EE5\u7528\u672C\u8F6F\u4EF6\u6253\u5F00\u793E\u533A\u8D44\u6E90\u5E93, \u53EA\u9700\u901A\u8FC7\u65B0\u529F\u80FD"\u793E\u533A\u6574\u5408"\u63D2\u4EF6\u5373\u53EF.(\u5355\u51FB\u83DC\u5355\u680F \u5DE5\u5177->\u6D4F\u89C8\u5668) tuxguitar-community.welcome-dialog.tip-2=\u60A8\u53EF\u4EE5\u5F88\u5BB9\u6613\u901A\u8FC7\u793E\u533A\u4E0A\u4F20\u548C\u5171\u4EAB\u4F60\u7684\u6587\u4EF6.(\u5355\u51FB\u83DC\u5355\u680F \u6587\u4EF6->\u5BFC\u51FA->\u5171\u4EAB...) tuxguitar-community.welcome-dialog.tip-bottom=\u5982\u679C\u4F60\u8FD8\u6CA1\u6709TuxGutiar\u793E\u533A\u5E10\u53F7, \u70B9\u51FB\u8FD9\u91CC\u6CE8\u518C.\u767B\u540E\u5C31\u53EF\u4EE5\u4E0A\u4F20,\u4E0B\u8F7D,\u53D1\u8868\u610F\u89C1,\u8FD8\u80FD\u4E3A\u66F2\u8C31\u6253\u5206. tuxguitar-community.welcome-dialog.disable=\u4E0D\u518D\u663E\u793A\u5F53\u524D\u4FE1\u606F tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_sv.properties0000644000175000017500000000430411273045344026165 0ustar julianjulian# Swedish translation for TuxGuitar's Community plugin. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2009. # tuxguitar-community.auth-dialog.title=Logga in tuxguitar-community.auth-dialog.signin=Mitt communitykonto tuxguitar-community.auth-dialog.signin.username=Anv\u00e4ndarnamn tuxguitar-community.auth-dialog.signin.password=L\u00f6senord tuxguitar-community.auth-dialog.signup=Jag \u00e4r en ny anv\u00e4ndare tuxguitar-community.auth-dialog.signup.tip=Om du inte har ett TuxGuitar Community-konto \u00e4n kan du skapa ett nu och b\u00f6rja dela filer med andra anv\u00e4ndare. N\u00e4r du v\u00e4l har loggat in kan du ladda upp, h\u00e4mta, kommentera och betygs\u00e4tta filer. tuxguitar-community.share-dialog.title=Dela mina l\u00e5tar tuxguitar-community.share-dialog.details=L\u00e5tdetaljer tuxguitar-community.share-dialog.details.user=Anv\u00e4ndarnamn tuxguitar-community.share-dialog.details.title=Titel tuxguitar-community.share-dialog.details.tagkeys=Taggar tuxguitar-community.share-dialog.details.description=Beskrivning tuxguitar-community.browser-dialog.title=Delade tabulaturer tuxguitar-community.browser-dialog.account=Mitt konto tuxguitar-community.browser-dialog.account.user=Anv\u00e4ndarnamn tuxguitar-community.welcome-dialog.title=V\u00e4lkommen till TuxGuitar Community tuxguitar-community.welcome-dialog.tip-1=Nu kan du \u00f6ppna filer i TuxGuitar Community-f\u00f6rr\u00e5det genom att anv\u00e4nda den nya instickmodulen f\u00f6r community-integration i TuxGuitar-bl\u00e4ddraren (Verktyg -> Bl\u00e4ddrare) tuxguitar-community.welcome-dialog.tip-2=Du kan enkelt ladda upp och dela dina egna filer med communityt (Arkiv -> Exportera -> Dela...) tuxguitar-community.welcome-dialog.tip-bottom=Om du inte har ett TuxGuitar Community-konto \u00e4n kan du skapa ett nu och b\u00f6rja dela filer med andra anv\u00e4ndare. N\u00e4r du v\u00e4l har loggat in kan du ladda upp, h\u00e4mta, kommentera och betygs\u00e4tta filer. tuxguitar-community.welcome-dialog.disable=Visa inte detta meddelande igen tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_ca.properties0000644000175000017500000000370211273045344026121 0ustar julianjuliantuxguitar-community.auth-dialog.title=Feu l'entrada tuxguitar-community.auth-dialog.signin=El compte de la meva comunitat tuxguitar-community.auth-dialog.signin.username=Usuari tuxguitar-community.auth-dialog.signin.password=Paraula de pas tuxguitar-community.auth-dialog.signup=S\u00F3c un nou usuari tuxguitar-community.auth-dialog.signup.tip=Si encara no teniu un compte a la Comunitat TuxGuitar, podeu crear-ne un de nou ara, i comen\u00E7ar a compartir arxius amb altres usuaris. Un cop feu l'entrada, podreu pujar, descarregar, comentar i valorar arxius. tuxguitar-community.share-dialog.title=Compartir la meva can\u00E7\u00F3 tuxguitar-community.share-dialog.details=Detalls de la can\u00E7\u00F3 tuxguitar-community.share-dialog.details.user=Usuari tuxguitar-community.share-dialog.details.title=T\u00EDtol tuxguitar-community.share-dialog.details.tagkeys=Tag Keys tuxguitar-community.share-dialog.details.description=Descripci\u00F3 tuxguitar-community.browser-dialog.title=Tabulatures compartides tuxguitar-community.browser-dialog.account=El meu compte tuxguitar-community.browser-dialog.account.user=Usuari tuxguitar-community.welcome-dialog.title=Benvingut a la Comunitat TuxGuitar tuxguitar-community.welcome-dialog.tip-1=Ara podeu obrir arxius des del repositori de la Comunitat TuxGuitar, fent \u00FAs del nou endollable d'integraci\u00F3 a la Comunitat al Navegador TuxGuitar (Eines -> Navegador) tuxguitar-community.welcome-dialog.tip-2=Podeu pujar i compartir f\u00E0cilment els vostres propis arxius amb la comunitat (Arxiu -> Exportar -> Compartir...) tuxguitar-community.welcome-dialog.tip-bottom=Si encara no teniu un compte a la Comunitat TuxGuitar, podeu crear-ne un de nou ara, i comen\u00E7ar a compartir arxius amb altres usuaris. Un cop feu l'entrada, podreu pujar, descarregar, comentar i valorar arxius. tuxguitar-community.welcome-dialog.disable=No mostrar aquest missage de nou. tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_pt.properties0000644000175000017500000000352211273045344026161 0ustar julianjuliantuxguitar-community.auth-dialog.title=Participar tuxguitar-community.auth-dialog.signin=Minha conta na Comunidade tuxguitar-community.auth-dialog.signin.username=Usuário tuxguitar-community.auth-dialog.signin.password=Senha tuxguitar-community.auth-dialog.signup=Sou um novo usuário tuxguitar-community.auth-dialog.signup.tip=Se você ainda não tem uma conta na Comunidade TuxGuitar, você pode criar uma agora, e trocar arquivos com outros usuários. Basta se inscrever, e poderá enviar, baixar, comentar e avaliar arquivos. tuxguitar-community.share-dialog.title=Compartilhar minha música tuxguitar-community.share-dialog.details=Detalhes da música tuxguitar-community.share-dialog.details.user=Usuário tuxguitar-community.share-dialog.details.title=Título tuxguitar-community.share-dialog.details.tagkeys=Palavras-chave tuxguitar-community.share-dialog.details.description=Descrição tuxguitar-community.browser-dialog.title=Tablaturas compartilhadas tuxguitar-community.browser-dialog.account=Minha conta tuxguitar-community.browser-dialog.account.user=Usuário tuxguitar-community.welcome-dialog.title=Bem-vindo à Comunidade TuxGuitar tuxguitar-community.welcome-dialog.tip-1=Agora você pode abrir arquivos do repositório da Comunidade TuxGuitar, usando o novo plugin de integração com a Comunidade, no navegador TuxGuitar (Ferramentas -> Navegador) tuxguitar-community.welcome-dialog.tip-2=Você pode facilmante compartilhar seus arquivos (Arquivo -> Exportar -> Compartilhar...) tuxguitar-community.welcome-dialog.tip-bottom=Se você ainda não tem uma conta na Comunidade TuxGuitar, você pode criar uma agora, e trocar arquivos com outros usuários. Basta se inscrever, e poderá enviar, baixar, comentar e avaliar arquivos. tuxguitar-community.welcome-dialog.disable=Não exibir essa mensagem novamente tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages.properties0000644000175000017500000000345211273045344025460 0ustar julianjuliantuxguitar-community.auth-dialog.title=Sign-In tuxguitar-community.auth-dialog.signin=My community account tuxguitar-community.auth-dialog.signin.username=Username tuxguitar-community.auth-dialog.signin.password=Password tuxguitar-community.auth-dialog.signup=I'm a new User tuxguitar-community.auth-dialog.signup.tip=If you don't have a TuxGuitar Community account yet, you can create one now, and start sharing files with the other users. Once you sign in, you'll be able to upload, download, comment and rate files. tuxguitar-community.share-dialog.title=Share My Song tuxguitar-community.share-dialog.details=Song Details tuxguitar-community.share-dialog.details.user=Username tuxguitar-community.share-dialog.details.title=Title tuxguitar-community.share-dialog.details.tagkeys=Tag Keys tuxguitar-community.share-dialog.details.description=Description tuxguitar-community.browser-dialog.title=Shared Tablatures tuxguitar-community.browser-dialog.account=My Account tuxguitar-community.browser-dialog.account.user=Username tuxguitar-community.welcome-dialog.title=Welcome to the TuxGuitar Community tuxguitar-community.welcome-dialog.tip-1=Now you can open files from the TuxGuitar Community repository, by using the new Community integration plugin in the TuxGuitar Browser (Tools -> Browser) tuxguitar-community.welcome-dialog.tip-2=You can easily upload and share your own files with the community (File -> Export -> Share...) tuxguitar-community.welcome-dialog.tip-bottom=If you don't have a TuxGuitar Community account yet, you can create one now, and start sharing files with the other users. Once you sign in, you'll be able to upload, download, comment and rate files. tuxguitar-community.welcome-dialog.disable=Do not display this message again tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_en.properties0000644000175000017500000000345211273045344026142 0ustar julianjuliantuxguitar-community.auth-dialog.title=Sign-In tuxguitar-community.auth-dialog.signin=My community account tuxguitar-community.auth-dialog.signin.username=Username tuxguitar-community.auth-dialog.signin.password=Password tuxguitar-community.auth-dialog.signup=I'm a new User tuxguitar-community.auth-dialog.signup.tip=If you don't have a TuxGuitar Community account yet, you can create one now, and start sharing files with the other users. Once you sign in, you'll be able to upload, download, comment and rate files. tuxguitar-community.share-dialog.title=Share My Song tuxguitar-community.share-dialog.details=Song Details tuxguitar-community.share-dialog.details.user=Username tuxguitar-community.share-dialog.details.title=Title tuxguitar-community.share-dialog.details.tagkeys=Tag Keys tuxguitar-community.share-dialog.details.description=Description tuxguitar-community.browser-dialog.title=Shared Tablatures tuxguitar-community.browser-dialog.account=My Account tuxguitar-community.browser-dialog.account.user=Username tuxguitar-community.welcome-dialog.title=Welcome to the TuxGuitar Community tuxguitar-community.welcome-dialog.tip-1=Now you can open files from the TuxGuitar Community repository, by using the new Community integration plugin in the TuxGuitar Browser (Tools -> Browser) tuxguitar-community.welcome-dialog.tip-2=You can easily upload and share your own files with the community (File -> Export -> Share...) tuxguitar-community.welcome-dialog.tip-bottom=If you don't have a TuxGuitar Community account yet, you can create one now, and start sharing files with the other users. Once you sign in, you'll be able to upload, download, comment and rate files. tuxguitar-community.welcome-dialog.disable=Do not display this message again tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_ja.properties0000644000175000017500000000677311273045344026143 0ustar julianjuliantuxguitar-community.auth-dialog.title=\u30b5\u30a4\u30f3\u30a4\u30f3 tuxguitar-community.auth-dialog.signin=\u30de\u30a4\u30fb\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8 tuxguitar-community.auth-dialog.signin.username=\u30e6\u30fc\u30b6\u30cd\u30fc\u30e0 tuxguitar-community.auth-dialog.signin.password=\u30d1\u30b9\u30ef\u30fc\u30c9 tuxguitar-community.auth-dialog.signup=\u65b0\u898f\u30e6\u30fc\u30b6\u767b\u9332 tuxguitar-community.auth-dialog.signup.tip=\u3082\u3057 TuxGuitar Community \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u307e\u3060\u53d6\u5f97\u3057\u3066\u3044\u306a\u3044\u306a\u3089\uff0c \u65b0\u898f\u767b\u9332 \u3057\u3066\uff0c\u4ed6\u306e\u30e6\u30fc\u30b6\u3068\u30d5\u30a1\u30a4\u30eb\u306e\u5171\u6709\u3092\u59cb\u3081\u3088\u3046\u3002 \u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308c\u3070\uff0c \u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff0c\u30b3\u30e1\u30f3\u30c8\u3084\u8a55\u4fa1\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 tuxguitar-community.share-dialog.title=\u697d\u66f2\u3092\u5171\u6709\u3059\u308b tuxguitar-community.share-dialog.details=\u697d\u66f2\u306e\u8a73\u7d30 tuxguitar-community.share-dialog.details.user=\u30e6\u30fc\u30b6\u30cd\u30fc\u30e0 tuxguitar-community.share-dialog.details.title=\u30bf\u30a4\u30c8\u30eb tuxguitar-community.share-dialog.details.tagkeys=\u30bf\u30b0\u30fb\u30ad\u30fc tuxguitar-community.share-dialog.details.description=\u8a73\u7d30 tuxguitar-community.browser-dialog.title=TAB\u8b5c\u3092\u5171\u6709\u3059\u308b tuxguitar-community.browser-dialog.account=\u30de\u30a4\u30fb\u30a2\u30ab\u30a6\u30f3\u30c8 tuxguitar-community.browser-dialog.account.user=\u30e6\u30fc\u30b6\u30cd\u30fc\u30e0 tuxguitar-community.welcome-dialog.title=\u3088\u3046\u3053\u305dTuxGuitar Community\u3078 tuxguitar-community.welcome-dialog.tip-1=TuxGuitar\u30d6\u30e9\u30a6\u30b6\uff08\u30c4\u30fc\u30eb -> \u30d6\u30e9\u30a6\u30b6\uff09\u306b\u7d71\u5408\u3055\u308c\u305f\u65b0\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30fb\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\uff0cTuxGuitar Community \u306e\u4fdd\u7ba1\u5eab\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 tuxguitar-community.welcome-dialog.tip-2=\u81ea\u8eab\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3078\u7c21\u5358\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\uff0c\u5171\u6709\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08\u30d5\u30a1\u30a4\u30eb -> \u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -> \u30b7\u30a7\u30a2...\uff09\u3002 tuxguitar-community.welcome-dialog.tip-bottom=\u3082\u3057 TuxGuitar Community \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u307e\u3060\u53d6\u5f97\u3057\u3066\u3044\u306a\u3044\u306a\u3089\uff0c \u65b0\u898f\u767b\u9332 \u3057\u3066\uff0c\u4ed6\u306e\u30e6\u30fc\u30b6\u3068\u30d5\u30a1\u30a4\u30eb\u306e\u5171\u6709\u3092\u59cb\u3081\u3088\u3046\u3002 \u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308c\u3070\uff0c \u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\uff0c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff0c\u30b3\u30e1\u30f3\u30c8\u3084\u8a55\u4fa1\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 tuxguitar-community.welcome-dialog.disable=\u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u518d\u5ea6\u8868\u793a\u3057\u306a\u3044 tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_pl.properties0000644000175000017500000000442711273045344026156 0ustar julianjuliantuxguitar-community.auth-dialog.title=Zaloguj tuxguitar-community.auth-dialog.signin=Moje konto tuxguitar-community.auth-dialog.signin.username=Nazwa u\u017cytkownika tuxguitar-community.auth-dialog.signin.password=Has\u0142o tuxguitar-community.auth-dialog.signup=Jestem nowy tuxguitar-community.auth-dialog.signup.tip=Je\u017celi nie masz jeszcze konta wSpo\u0142eczno\u015bci TuxGuitar, mo\u017cesz stworzy\u0107 je teraz, i zacz\u0105\u0107 dzieli\u0107 si\u0119 plikami z innymi u\u017cytkownikami. Kiedy si\u0119 zalogujesz, b\u0119dziesz m\u00f3g\u0142 je wysy\u0142a\u0107, pobiera\u0107, komentowa\u0107 i ocenia\u0107. tuxguitar-community.share-dialog.title=Udost\u0119pnij m\u00f3j utw\u00f3r tuxguitar-community.share-dialog.details=Szczeg\u00f3\u0142y utworu tuxguitar-community.share-dialog.details.user=Nazwa u\u017cytkownika tuxguitar-community.share-dialog.details.title=Tytu\u0142 tuxguitar-community.share-dialog.details.tagkeys=S\u0142owa kluczowe tuxguitar-community.share-dialog.details.description=Opis tuxguitar-community.browser-dialog.title=Udost\u0119pnione tabulatury tuxguitar-community.browser-dialog.account=Moje konto tuxguitar-community.browser-dialog.account.user=Nazwa u\u017cytkownika tuxguitar-community.welcome-dialog.title=Witamy w Spo\u0142eczno\u015bci TuxGuitar tuxguitar-community.welcome-dialog.tip-1=Teraz mo\u017cesz otwiera\u0107 pliki z repozytorium u\u017cytkownik\u00f3w TuxGuitar, u\u017cywaj\u0105c nowej wtyczki integruj\u0105cej u\u017cytkownik\u00f3w w Przegl\u0105darce plik\u00f3w (Narz\u0119dzia -> Przegl\u0105darka) tuxguitar-community.welcome-dialog.tip-2=Mo\u017cesz w \u0142atwy spos\u00f3b pobra\u0107 i udost\u0119pni\u0107 swoje pliki z innymi cz\u0142onkami Spo\u0142eczno\u015bci (Plik-> Eksport -> Udost\u0119pnij Spo\u0142eczno\u015bci tuxguitar-community.welcome-dialog.tip-bottom=Je\u017celi nie masz jeszcze konta wSpo\u0142eczno\u015bci TuxGuitar, mo\u017cesz stworzy\u0107 je teraz, i zacz\u0105\u0107 dzieli\u0107 si\u0119 plikami z innymi u\u017cytkownikami. Kiedy si\u0119 zalogujesz, b\u0119dziesz m\u00f3g\u0142 je wysy\u0142a\u0107, pobiera\u0107, komentowa\u0107 i ocenia\u0107. tuxguitar-community.welcome-dialog.disable=Nie wy\u015bwietlaj wi\u0119cej tego komunikatu tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_es.properties0000644000175000017500000000351011273045344026142 0ustar julianjuliantuxguitar-community.auth-dialog.title=Iniciar sesi\u00F3n tuxguitar-community.auth-dialog.signin=Mi cuenta tuxguitar-community.auth-dialog.signin.username=Usuario tuxguitar-community.auth-dialog.signin.password=Contrase\u00F1a tuxguitar-community.auth-dialog.signup=No dispongo de una cuenta en la comunidad tuxguitar-community.auth-dialog.signup.tip=Si no tiene una cuenta en la Comunidad de TuxGuitar, puede crearla ahora!. Uni\u00E9ndose a esta comunidad, podr\u00E1 subir y descargar tablaturas compartidas tuxguitar-community.share-dialog.title=Compartir mi tablatura tuxguitar-community.share-dialog.details=Detalles tuxguitar-community.share-dialog.details.user=Usuario tuxguitar-community.share-dialog.details.title=T\u00EDtulo tuxguitar-community.share-dialog.details.tagkeys=Tags tuxguitar-community.share-dialog.details.description=Descripci\u00F3n tuxguitar-community.browser-dialog.title=Tablaturas compartidas tuxguitar-community.browser-dialog.account=Mi cuenta tuxguitar-community.browser-dialog.account.user=Usuario tuxguitar-community.welcome-dialog.title=Bienvenido a la comunidad de TuxGuitar tuxguitar-community.welcome-dialog.tip-1=Ahora podr\u00E1 abrir tablaturas compartidas en el explorador de canciones (Herramientas -> Explorador de Canciones ) gracias al nuevo plugin de integraci\u00F3n con la comunidad. tuxguitar-community.welcome-dialog.tip-2=Tambi\u00E9n podr\u00E1 compartir sus tablaturas con la comunidad de manera sencilla ( Archivo -> Exportar -> Share with the Community ) tuxguitar-community.welcome-dialog.tip-bottom=Si no tiene una cuenta en la Comunidad de TuxGuitar, puede crearla ahora!. Uniendose a esta comunidad, podr\u00E1 subir y descargar tablaturas compartidas tuxguitar-community.welcome-dialog.disable=No volver a mostrar este mensaje. tuxguitar-src-1.2/TuxGuitar-community/share/lang/messages_eu.properties0000644000175000017500000000352711273045344026154 0ustar julianjuliantuxguitar-community.auth-dialog.title=Sartu tuxguitar-community.auth-dialog.signin=Nire komunitatearen Kontua tuxguitar-community.auth-dialog.signin.username=Izena tuxguitar-community.auth-dialog.signin.password=Password tuxguitar-community.auth-dialog.signup=Berria nahiz tuxguitar-community.auth-dialog.signup.tip=Ez baduzu TuxGuitar Community-ko konturik, egin bat, eta hasi komunitateko beste erabiltzailekin abestiak banatzen. Kontua egin eta gero abestiak, jarri,deskargatu, komentatu, eta puntuatzeko gai izango zara. tuxguitar-community.share-dialog.title=Nire abestia besteekin banatu tuxguitar-community.share-dialog.details=Abestiaren propietateak tuxguitar-community.share-dialog.details.user=Erabiltzailea tuxguitar-community.share-dialog.details.title=Izenburua tuxguitar-community.share-dialog.details.tagkeys=Hitz klabeak tuxguitar-community.share-dialog.details.description=Deskribapena tuxguitar-community.browser-dialog.title=Nire Tablaturak tuxguitar-community.browser-dialog.account=Nire kontua tuxguitar-community.browser-dialog.account.user=Izena tuxguitar-community.welcome-dialog.title=Ongi etorri TuxGuitar-eko komunitatera! tuxguitar-community.welcome-dialog.tip-1=Horain TuxGuitareko kommunitatean dauden abestiak irekitzeko gai izango zara komunitate-integrazio pluginari bidez (Tresnak -> Abesti esploratzailea) tuxguitar-community.welcome-dialog.tip-2=Oso erraza da abestiak igotzea eta komunitatearekin banatu(Fitxategia -> Exportatu -> Banatu...) tuxguitar-community.welcome-dialog.tip-bottom=Ez baduzu TuxGuitar Community-ko konturik, egin bat, eta hasi komunitateko beste erabiltzailekin abestiak banatzen. Kontua egin eta gero, jarri,deskargatu, komentatu, eta puntuatzeko gai izango zara. tuxguitar-community.welcome-dialog.disable=Leiho hau ez nahi dut berriro ikusi tuxguitar-src-1.2/TuxGuitar-converter/share/lang/messages_sv.properties0000644000175000017500000000231411273045344026147 0ustar julianjulian# Swedish translation for TuxGuitar's Converter plugin. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2009. # batch.converter=Satsvis filkonverterare batch.converter.settings=Inst\u00e4llningar batch.converter.input.folder=Inmatningsmapp batch.converter.input.folder.invalid=V\u00e4lj en giltig inmatningsmapp. batch.converter.output.folder=Utmatningsmapp batch.converter.output.folder.invalid=V\u00e4lj en giltig utmatningsmapp. batch.converter.output.format=Utmatningsfilformat batch.converter.output.format.invalid=V\u00e4lj ett giltigt utmatningsfilformat. batch.converter.messages.converting=Konverterar: {0} batch.converter.messages.ok=[Ok] batch.converter.messages.failed=[Misslyckades] batch.converter.messages.file-not-found=Fil "{0}" hittades inte. batch.converter.messages.exporter-not-found=Kunde inte hitta l\u00e4mplig export\u00f6r ({0}) ?! batch.converter.messages.couldnt-write=Kunde inte skriva fil "{0}". batch.converter.messages.bad-file=Kunde inte bearbeta "{0}". D\u00e5lig fil? batch.converter.messages.out-of-memory=Slut p\u00e5 minne!!! Kunde inte skriva "{0}". tuxguitar-src-1.2/TuxGuitar-converter/share/lang/messages_sr.properties0000644000175000017500000000276711273045344026157 0ustar julianjulian batch.converter=Promena formata fajlova batch.converter.settings=Opcije batch.converter.input.folder=Po\u010detni folder batch.converter.input.folder.invalid=Izaberite validan po\u010detni folder. batch.converter.output.folder=Odredi\u0161ni folder batch.converter.output.folder.invalid=Izaberite validan odredi\u0161ni folder. batch.converter.output.format=Novi format fajla batch.converter.output.format.invalid=Izaberite validan novi format fajla. #batch.converter.messages.file-not-found=[gre\u0161ka]: Fajl "{0}" nije prona\u0111en. #batch.converter.messages.exporter-not-found=[gre\u0161ka]: Odgovaraju\u0107i plugin ({0}) nije prona\u0111en?! #batch.converter.messages.couldnt-write=[gre\u0161ka]: Fajl "{0}" nije mogao biti zapisan. #batch.converter.messages.bad-file=[gre\u0161ka]: Fajl "{0}" nije uspe\u0161no konvertovan. Lo\u0161 fajl? #batch.converter.messages.out-of-memory=[gre\u0161ka]: Nema dovoljno memorije!!! Ne mogu da konvertujem "{0}". batch.converter.messages.converting=Konvertujem: {0} batch.converter.messages.ok=[OK] batch.converter.messages.failed=[gre\u0161ka] batch.converter.messages.file-not-found=Fajl "{0}" nije prona\u0111en. batch.converter.messages.exporter-not-found=Odgovaraju\u0107i plugin ({0}) nije prona\u0111en?! batch.converter.messages.couldnt-write=Fajl "{0}" nije mogao biti zapisan. batch.converter.messages.bad-file=Fajl "{0}" nije uspe\u0161no konvertovan. Lo\u0161 fajl? batch.converter.messages.out-of-memory=Nema dovoljno memorije!!! Ne mogu da konvertujem "{0}".tuxguitar-src-1.2/TuxGuitar-converter/share/lang/messages.properties0000644000175000017500000000164611273045344025446 0ustar julianjulianbatch.converter=Batch File Converter batch.converter.settings=Settings batch.converter.input.folder=Input Folder batch.converter.input.folder.invalid=Please, select a valid input folder. batch.converter.output.folder=Output Folder batch.converter.output.folder.invalid=Please, select a valid output folder. batch.converter.output.format=Output File Format batch.converter.output.format.invalid=Please, select a valid output file format. batch.converter.messages.converting=Converting: {0} batch.converter.messages.ok=[Ok] batch.converter.messages.failed=[Failed] batch.converter.messages.file-not-found=File "{0}" is not found. batch.converter.messages.exporter-not-found=Could not find appropriate exporter ({0}) ?! batch.converter.messages.couldnt-write=Could not write file "{0}". batch.converter.messages.bad-file=Could not process "{0}". Bad file? batch.converter.messages.out-of-memory=Out of memory!!! Could not write "{0}". tuxguitar-src-1.2/TuxGuitar-converter/share/lang/messages_en.properties0000644000175000017500000000164611273045344026130 0ustar julianjulianbatch.converter=Batch File Converter batch.converter.settings=Settings batch.converter.input.folder=Input Folder batch.converter.input.folder.invalid=Please, select a valid input folder. batch.converter.output.folder=Output Folder batch.converter.output.folder.invalid=Please, select a valid output folder. batch.converter.output.format=Output File Format batch.converter.output.format.invalid=Please, select a valid output file format. batch.converter.messages.converting=Converting: {0} batch.converter.messages.ok=[Ok] batch.converter.messages.failed=[Failed] batch.converter.messages.file-not-found=File "{0}" is not found. batch.converter.messages.exporter-not-found=Could not find appropriate exporter ({0}) ?! batch.converter.messages.couldnt-write=Could not write file "{0}". batch.converter.messages.bad-file=Could not process "{0}". Bad file? batch.converter.messages.out-of-memory=Out of memory!!! Could not write "{0}". tuxguitar-src-1.2/TuxGuitar-converter/share/lang/messages_ja.properties0000644000175000017500000000337511273045344026121 0ustar julianjulianbatch.converter=\u30d0\u30c3\u30c1\u51e6\u7406/\u4e00\u62ec\u30d5\u30a1\u30a4\u30eb\u5909\u63db batch.converter.settings=\u5909\u63db\u8a2d\u5b9a batch.converter.input.folder=\u5165\u529b\u30d5\u30a9\u30eb\u30c0 batch.converter.input.folder.invalid=\u6709\u52b9\u306a\u5165\u529b\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044. batch.converter.output.folder=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0 batch.converter.output.folder.invalid=\u6709\u52b9\u306a\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044. batch.converter.output.format=\u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 batch.converter.output.format.invalid=\u6709\u52b9\u306a\u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044. batch.converter.messages.converting=\u5909\u63db\u4e2d: {0} batch.converter.messages.ok=[Ok] batch.converter.messages.failed=[\u5931\u6557] batch.converter.messages.file-not-found=\u30d5\u30a1\u30a4\u30eb "{0}" \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f. batch.converter.messages.exporter-not-found=\u9069\u5207\u306a\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5148\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f ({0}) ?! batch.converter.messages.couldnt-write=\u30d5\u30a1\u30a4\u30eb "{0}" \u3092\u51fa\u529b\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f. batch.converter.messages.bad-file="{0}" \u3092\u5909\u63db\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f. \u7121\u52b9\u30d5\u30a1\u30a4\u30eb? batch.converter.messages.out-of-memory=\u30e1\u30e2\u30ea\u4e0d\u8db3\u3067\u3059!!! "{0}" \u3092\u51fa\u529b\u3067\u304d\u307e\u305b\u3093. tuxguitar-src-1.2/TuxGuitar-fluidsynth/share/lang/messages_sv.properties0000644000175000017500000000167611273045345026344 0ustar julianjulian# Swedish translation for TuxGuitar's Fluidsynth plugin. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2009. # fluidsynth.settings=Inst\u00e4llningar f\u00f6r Fluidsynth fluidsynth.settings.audio=Ljud fluidsynth.settings.audio.driver=Ljuddrivrutin fluidsynth.settings.audio.sample-format=Samplingsformat fluidsynth.settings.audio.periods=Buffertantal fluidsynth.settings.audio.period-size=Buffertstorlek fluidsynth.settings.synth=Synthesizer fluidsynth.settings.synth.gain=F\u00f6rst\u00e4rkning fluidsynth.settings.synth.sample-rate=Samplingsfrekvens fluidsynth.settings.synth.polyphony=Polyfoni fluidsynth.settings.synth.reverb.active=Reverb aktiverad fluidsynth.settings.synth.chorus.active=Chorus aktiverad fluidsynth.settings.soundfonts=Soundfont fluidsynth.settings.soundfonts.list=Tillg\u00e4ngliga soundfont tuxguitar-src-1.2/TuxGuitar-fluidsynth/share/lang/messages.properties0000644000175000017500000000121211273045345025616 0ustar julianjulianfluidsynth.settings=Fluidsytnh Settings fluidsynth.settings.audio=Audio fluidsynth.settings.audio.driver=Audio Driver fluidsynth.settings.audio.sample-format=Sample Format fluidsynth.settings.audio.periods=Buffer Count fluidsynth.settings.audio.period-size=Buffer Size fluidsynth.settings.synth=Synthesizer fluidsynth.settings.synth.gain=Gain fluidsynth.settings.synth.sample-rate=Sample Rate fluidsynth.settings.synth.polyphony=Polyphony fluidsynth.settings.synth.reverb.active=Reverb Enabled fluidsynth.settings.synth.chorus.active=Chorus Enabled fluidsynth.settings.soundfonts=Soundfonts fluidsynth.settings.soundfonts.list=Available Soundfontstuxguitar-src-1.2/TuxGuitar-gtp/share/lang/messages_sv.properties0000644000175000017500000000056311273045345024737 0ustar julianjulian# Swedish translation for TuxGuitar's GTP plugin. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2009. # gtp.settings.title=Konfiguration gtp.settings.charset.tip=Teckenkodningskonfiguration gtp.settings.charset.select=Teckenkodning tuxguitar-src-1.2/TuxGuitar-gtp/share/lang/messages.properties0000644000175000017500000000016311273045345024223 0ustar julianjuliangtp.settings.title=Configuration gtp.settings.charset.tip=Charset Configuration gtp.settings.charset.select=Charsettuxguitar-src-1.2/TuxGuitar-jack/share/lang/messages_sv.properties0000644000175000017500000000466511273045346025065 0ustar julianjulian# Swedish translation for TuxGuitar's Jack plugin. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2009. # jack.settings.dialog=Inst\u00e4llningar f\u00f6r Jack jack.settings.dialog.options=Huvudalternativ jack.settings.dialog.options.midi-port=Jack portalternativ jack.settings.dialog.options.midi-port.type.single=Skapa unik port jack.settings.dialog.options.midi-port.type.multiple-by-channel=Skapa flera portar per kanal jack.settings.dialog.options.midi-port.type.multiple-by-program=Skapa flera portar per instrument jack.settings.dialog.options.midi-port.program-router.options=Ruttningsalternativ f\u00f6r instrument jack.settings.dialog.options.midi-port.program-router.src-program=K\u00e4llinstrument jack.settings.dialog.options.midi-port.program-router.dst-channel=Till kanal jack.settings.dialog.options.midi-port.program-router.dst-program=Till program jack.settings.dialog.options.midi-port.program-router.dst-port=Till port jack.settings.dialog.options.midi-port.program-router.src-program.percussion=Slagverk jack.settings.dialog.options.midi-port.program-router.src-program.item=Ins#{0} jack.settings.dialog.options.midi-port.program-router.dst-program.item=Ins#{0} jack.settings.dialog.options.midi-port.program-router.dst-program.default=Standard jack.settings.dialog.options.midi-port.program-router.dst-channel.item=Ch#{0} jack.settings.dialog.options.midi-port.program-router.dst-channel.default=Standard jack.settings.dialog.options.midi-port.program-router.dst-port.default=Standardport jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated=Dedicerad port jack.settings.dialog.options.midi-port.channel-router.options=Ruttningsalternativ f\u00f6r k\u00e4llor jack.settings.dialog.options.midi-port.channel-router.src-channel=K\u00e4llkanal jack.settings.dialog.options.midi-port.channel-router.dst-channel=Till kanal jack.settings.dialog.options.midi-port.channel-router.dst-program=Till program jack.settings.dialog.options.midi-port.channel-router.src-channel.item=Kanal#{0} jack.settings.dialog.options.midi-port.channel-router.dst-channel.item=Ch#{0} jack.settings.dialog.options.midi-port.channel-router.dst-channel.default=Standard jack.settings.dialog.options.midi-port.channel-router.dst-program.item=Ins#{0} jack.settings.dialog.options.midi-port.channel-router.dst-program.default=Standard tuxguitar-src-1.2/TuxGuitar-jack/share/lang/messages.properties0000644000175000017500000000422011273045346024340 0ustar julianjulianjack.settings.dialog=Jack Settings jack.settings.dialog.options=Main Options jack.settings.dialog.options.midi-port=Jack Port Options jack.settings.dialog.options.midi-port.type.single=Create unique port jack.settings.dialog.options.midi-port.type.multiple-by-channel=Create multiple ports by channel jack.settings.dialog.options.midi-port.type.multiple-by-program=Create multiple ports by instruments jack.settings.dialog.options.midi-port.program-router.options=Instrument Routing Options jack.settings.dialog.options.midi-port.program-router.src-program=Source Instrument jack.settings.dialog.options.midi-port.program-router.dst-channel=To Channel jack.settings.dialog.options.midi-port.program-router.dst-program=To Program jack.settings.dialog.options.midi-port.program-router.dst-port=To Port jack.settings.dialog.options.midi-port.program-router.src-program.percussion=Percussion Kit jack.settings.dialog.options.midi-port.program-router.src-program.item=Ins#{0} jack.settings.dialog.options.midi-port.program-router.dst-program.item=Ins#{0} jack.settings.dialog.options.midi-port.program-router.dst-program.default=Default jack.settings.dialog.options.midi-port.program-router.dst-channel.item=Ch#{0} jack.settings.dialog.options.midi-port.program-router.dst-channel.default=Default jack.settings.dialog.options.midi-port.program-router.dst-port.default=Default Port jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated=Dedicated Port jack.settings.dialog.options.midi-port.channel-router.options=Channel Routing Options jack.settings.dialog.options.midi-port.channel-router.src-channel=Source Channel jack.settings.dialog.options.midi-port.channel-router.dst-channel=To Channel jack.settings.dialog.options.midi-port.channel-router.dst-program=To Program jack.settings.dialog.options.midi-port.channel-router.src-channel.item=Channel#{0} jack.settings.dialog.options.midi-port.channel-router.dst-channel.item=Ch#{0} jack.settings.dialog.options.midi-port.channel-router.dst-channel.default=Default jack.settings.dialog.options.midi-port.channel-router.dst-program.item=Ins#{0} jack.settings.dialog.options.midi-port.channel-router.dst-program.default=Default tuxguitar-src-1.2/TuxGuitar-jsa/share/lang/messages_sv.properties0000644000175000017500000000273211273045346024723 0ustar julianjulian# Swedish translation for TuxGuitar's Java Sound API plugin. # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2008. # jsa.error.unknown=Javas ljud-API kan inte l\u00e4sas in jsa.error.midi.unavailable=MIDI-systemet \u00e4r inte \u00e5tkomligt jsa.error.soundbank=Ljudbanksfel jsa.error.soundbank.unavailable=Fel: Ljudbanken inte \u00e5tkomlig jsa.error.soundbank.custom=Misslyckades att \u00f6ppna anpassad ljudbanksfil jsa.settings.title=Konfiguration jsa.settings.soundbank.tip=Konfiguration av ljudbank jsa.settings.soundbank.default=Anv\u00e4nd standardljudbank jsa.settings.soundbank.custom=Anv\u00e4nd anpassad ljudbank jsa.settings.soundbank-restart-message=Du m\u00e5ste starta om TuxGuitar f\u00f6r att ljudbanks\u00e4ndringar skall f\u00e5 effekt jsa.soundbank-assistant.confirm-message=Du verkar inte ha n\u00e5gon ljudbank installerad.\nVill du att TuxGuitar f\u00f6rs\u00f6ker att h\u00e4mta och installera en? jsa.soundbank-assistant.select=V\u00e4lj en jsa.soundbank-assistant.minimal=Minimal jsa.soundbank-assistant.medium=Medium jsa.soundbank-assistant.deluxe=Deluxe jsa.soundbank-assistant.process.tip=Denna \u00e5tg\u00e4rd kan ta l\u00e5ng tid jsa.soundbank-assistant.process.downloading=H\u00e4mtar ljudbanksfiler jsa.soundbank-assistant.process.uncompressing=Packar upp: {0} jsa.soundbank-assistant.process.installing=Installerar: {0} tuxguitar-src-1.2/TuxGuitar-jsa/share/lang/messages.properties0000644000175000017500000000221011273045346024202 0ustar julianjulianjsa.error.unknown=Java sound api cannot be loaded jsa.error.midi.unavailable=MIDI System is unavailable jsa.error.soundbank=Soundbank Error jsa.error.soundbank.unavailable=Unavailable Soundbank Error. jsa.error.soundbank.custom=Failed to open custom soundbank file. jsa.settings.title=Configuration jsa.settings.soundbank.tip=Soundbank Configuration jsa.settings.soundbank.default=Use default soundbank jsa.settings.soundbank.custom=Use custom soundbank jsa.settings.soundbank-restart-message=You need to restart TuxGuitar for soundbank changes to take effect jsa.soundbank-assistant.confirm-message=You don't seem to have any soundbank installed.\nDo you want TuxGuitar to attempt to download an install one? jsa.soundbank-assistant.select=Select one jsa.soundbank-assistant.minimal=Minimal jsa.soundbank-assistant.medium=Medium jsa.soundbank-assistant.deluxe=Deluxe jsa.soundbank-assistant.process.tip=This operation may take a long time, please be patience jsa.soundbank-assistant.process.downloading=Downloading soundbank files jsa.soundbank-assistant.process.uncompressing=Uncompressing: {0} jsa.soundbank-assistant.process.installing=Installing: {0} tuxguitar-src-1.2/TuxGuitar-jsa/share/lang/messages_ja.properties0000644000175000017500000000426111273045346024664 0ustar julianjulianjsa.error.unknown=Java sound api \u304c\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093 jsa.error.midi.unavailable=MIDI \u304c\u7121\u52b9\u3067\u3059 jsa.error.soundbank=\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u30fb\u30a8\u30e9\u30fc jsa.error.soundbank.unavailable=\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u304c\u7121\u52b9\u3067\u3059 jsa.error.soundbank.custom=\u30ab\u30b9\u30bf\u30e0\u30fb\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u306b\u5931\u6557\u3057\u307e\u3057\u305f jsa.settings.title=\u8a2d\u5b9a jsa.settings.soundbank.tip=\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u8a2d\u5b9a jsa.settings.soundbank.default=\u30c7\u30d5\u30a9\u30eb\u30c8\u30fb\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u3092\u4f7f\u7528\u3059\u308b jsa.settings.soundbank.custom=\u30ab\u30b9\u30bf\u30e0\u30fb\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u3092\u4f7f\u7528\u3059\u308b jsa.settings.soundbank-restart-message=\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u5909\u66f4\u3057\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3059\u308b\u306b\u306fTuxGuitar\u3092\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 jsa.soundbank-assistant.confirm-message=\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3044\u3088\u3046\u3067\u3059.\nTuxGuitar\u3067Java\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u304b? jsa.soundbank-assistant.select=1\u3064\u9078\u629e jsa.soundbank-assistant.minimal=\u6700\u5c0f jsa.soundbank-assistant.medium=\u6a19\u6e96 jsa.soundbank-assistant.deluxe=\u6700\u5927 jsa.soundbank-assistant.process.tip=\u3053\u306e\u64cd\u4f5c\u306b\u306f\u6642\u9593\u304c\u304b\u304b\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093.\u3054\u4e86\u627f\u304f\u3060\u3055\u3044. jsa.soundbank-assistant.process.downloading=Java\u30b5\u30a6\u30f3\u30c9\u30d0\u30f3\u30af\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u4e2d jsa.soundbank-assistant.process.uncompressing=\u89e3\u51cd\u4e2d: {0} jsa.soundbank-assistant.process.installing=\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u4e2d: {0}tuxguitar-src-1.2/TuxGuitar/share/lang/messages.properties0000644000175000017500000006305011273045225023434 0ustar julianjulian############################################################### ### Defaul language codes ### ############################################################### locale.aa=Afar locale.ab=Abkhazian locale.af=Afrikaans locale.am=Amharic locale.ar=Arabic locale.as=Assamese locale.ay=Aymara locale.az=Azerbaijani locale.ba=Bashkir locale.be=Byelorussian locale.bg=Bulgarian locale.bh=Bihari locale.bi=Bislama locale.bn=Bengali locale.bo=Tibetan locale.br=Breton locale.ca=Catalan locale.co=Corsican locale.cs=Czech locale.cy=Welsh locale.da=Danish locale.de=German locale.dz=Bhutani locale.el=Greek locale.en=English locale.en_US=English (United States) locale.eo=Esperanto locale.es=Spanish locale.et=Estonian locale.eu=Basque locale.fa=Persian locale.fi=Finnish locale.fj=Fiji locale.fo=Faeroese locale.fr=French locale.fy=Frisian locale.ga=Irish locale.gd=Gaelic locale.gl=Galician locale.gn=Guarani locale.gu=Gujarati locale.ha=Hausa locale.hi=Hindi locale.hr=Croatian locale.hu=Hungarian locale.hy=Armenian locale.ia=Interlingua locale.ie=Interlingue locale.ik=Inupiak locale.in=Indonesian locale.is=Icelandic locale.it=Italian locale.iw=Hebrew locale.ja=Japanese locale.ji=Yiddish locale.jw=Javanese locale.ka=Georgian locale.kk=Kazakh locale.kl=Greenlandic locale.km=Cambodian locale.kn=Kannada locale.ko=Korean locale.ks=Kashmiri locale.ku=Kurdish locale.ky=Kirghiz locale.la=Latin locale.ln=Lingala locale.lo=Laothian locale.lt=Lithuanian locale.lv=Latvian locale.mg=Malagasy locale.mi=Maori locale.mk=Macedonian locale.ml=Malayalam locale.mn=Mongolian locale.mo=Moldavian locale.mr=Marathi locale.ms=Malay locale.mt=Maltese locale.my=Burmese locale.na=Nauru locale.ne=Nepali locale.nl=Dutch locale.no=Norwegian locale.oc=Occitan locale.om=Oromo locale.or=Oriya locale.pa=Punjabi locale.pl=Polish locale.ps=Pashto locale.pt=Portuguese locale.qu=Quechua locale.rm=Rhaeto-Romance locale.rn=Kirundi locale.ro=Romanian locale.ru=Russian locale.rw=Kinyarwanda locale.sa=Sanskrit locale.sd=Sindhi locale.sg=Sangro locale.sh=Serbo-Croatian locale.si=Singhalese locale.sk=Slovak locale.sl=Slovenian locale.sm=Samoan locale.sn=Shona locale.so=Somali locale.sq=Albanian locale.sr=Serbian locale.ss=Siswati locale.st=Sesotho locale.su=Sudanese locale.sv=Swedish locale.sw=Swahili locale.ta=Tamil locale.te=Tegulu locale.tg=Tajik locale.th=Thai locale.ti=Tigrinya locale.tk=Turkmen locale.tl=Tagalog locale.tn=Setswana locale.to=Tonga locale.tr=Turkish locale.ts=Tsonga locale.tt=Tatar locale.tw=Twi locale.uk=Ukrainian locale.ur=Urdu locale.uz=Uzbek locale.vi=Vietnamese locale.vo=Volapuk locale.wo=Wolof locale.xh=Xhosa locale.yo=Yoruba locale.zh=Chinese locale.zh_TW=Chinese (Taiwan) locale.zh_GB=Chinese (GB) locale.zu=Zulu locale.default=(Default System Language) ############################################################### ok=Ok cancel=Cancel yes=Yes no=No add=Add edit=Edit remove=Remove save=Save exit=Exit close=Close choose=Choose color=Color title=Title go=Go warning=Warning error=Error plugins=Plugins options=Options defaults=Defaults clean=Clean rename=Rename fret=Fret position=Position name=Name author=Author version=Version description=Description info=Info configure=Configure url=URL file=File file.new=New file.open=Open file.save=Save file.save-as=Save As file.save-changes-question=The song has unsaved changes.\nDo you want to save the changes? file.exit=Exit file.export=Export file.export-midi=Export MIDI file.export-pdf=Export PDF file.print=Print file.print-preview=Print Preview file.import=Import file.import-midi=Import MIDI file.export-ascii=Export ASCII file.history=History file.open-url=Open URL file.open.error=Cannot Open: {0} file.save.error=Cannot Save: {0} file.import.error=Cannot Import: {0} file.export.error=Cannot Export: {0} file.overwrite-question=This file already exists. Do you want to overwrite it? edit.menu=Edit edit.undo=Undo edit.redo=Redo edit.copy=Copy edit.from=From edit.to=To edit.all-tracks=All Tracks edit.paste=Paste edit.paste.count=Paste Count edit.paste.replace-mode=Paste at the Current Measure edit.paste.insert-mode=Paste in new Measure edit.delete=Delete edit.cut=Cut edit.mouse-mode-selection=Selection Mode edit.mouse-mode-edition=Score Edition Mode edit.not-natural-key=Sharp/Flat mode edit.voice-1=Select Voice 1 edit.voice-2=Select Voice 2 view=View view.layout=Layout view.layout.page=Page Layout view.layout.linear=Linear layout view.layout.compact=Compact view.layout.multitrack=Multitrack view.layout.chord-style=Chord Style view.layout.chord-name=Chord Name view.layout.chord-diagram=Chord Diagram view.layout.score-enabled=Show Score view.layout.tablature-enabled=Show Tablature view.show-mixer=Show Mixer view.show-fretboard=Show Fretboard view.show-piano=Show Piano view.show-matrix=Show Matrix view.show-transport=Show Player fretboard.direction=Direction fretboard.right-mode=Right mode fretboard.left-mode=Left mode fretboard.background-color=Background Color fretboard.display-note-text=Display Note Text fretboard.display-scale-text=Display Scale Text fretboard.font=Font fretboard.fretpoint-color=Fret Color fretboard.note-color=Note Color fretboard.scale-note-color=Scale Note Color fretboard.settings=Fretboard Settings fretboard.string-color=String Color fretboard.settings.options=Options piano.editor=Piano Editor piano.natural-key-color=Natural Key Color piano.not-natural-key-color=Unnatural Key Color piano.note-color=Note Color piano.scale-note-color=Scale Note Color piano.settings=Piano Settings matrix.editor=Matrix Editor matrix.grids=Number of Grids matrix.border-color=Border Color matrix.font=Font matrix.foreground-color=Foreground Color matrix.line-color-1=Odd Row Color matrix.line-color-2=Even Row Color matrix.line-color-over=Mouse Over Row Color matrix.note-color=Note Color matrix.play-note-color=Play Note Color matrix.position-color=Position Color matrix.settings=Matrix Settings composition=Composition composition.timesignature=Time Signature composition.timesignature.Numerator=Numerator composition.timesignature.denominator=Denominator composition.timesignature.to-the-end=To the end composition.tempo=Tempo composition.tempo-percent=Percent composition.tempo.invalid=Invalid Tempo composition.tempo.start-to-end=Apply this tempo in the whole song composition.tempo.position-to-end=Apply this tempo to the end composition.tempo.position-to-next=Apply this tempo to the next tempo marker composition.properties=Properties composition.name=Name composition.artist=Artist composition.album=Album composition.author=Author composition.date=Date composition.copyright=Copyright composition.writer=Tab Creator composition.transcriber=Transcribed By composition.comments=Comments composition.tripletfeel=Triplet Feel composition.clef=Clef composition.clef.treble=Treble composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=Apply this clef to the end composition.keysignature=Key Signature composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Sharp composition.keysignature.sharp-2=2 Sharps composition.keysignature.sharp-3=3 Sharps composition.keysignature.sharp-4=4 Sharps composition.keysignature.sharp-5=5 Sharps composition.keysignature.sharp-6=6 Sharps composition.keysignature.sharp-7=7 Sharps composition.keysignature.flat-1=1 Flat composition.keysignature.flat-2=2 Flats composition.keysignature.flat-3=3 Flats composition.keysignature.flat-4=4 Flats composition.keysignature.flat-5=5 Flats composition.keysignature.flat-6=6 Flats composition.keysignature.flat-7=7 Flats composition.keysignature.to-the-end=Apply this key signature to the end composition.tripletfeel=Triplet Feel composition.tripletfeel.none=No Triplet Feel composition.tripletfeel.eighth=Triplet 8th composition.tripletfeel.sixteenth=Triplet 16th composition.tripletfeel.to-the-end=Apply this triplet feel to the end help=Help help.help=Help help.doc=Documentation help.about=About help.about.license=License help.about.authors=Authors help.about.description=Description track=Track track.number=N° track.name=Name track.color=Color track.first=First Track track.last=Last Track track.previous=Previous Track track.next=Next Track track.add=Add Track track.remove=Remove Track track.clone=Clone Track track.move-up=Move Up track.move-down=Move Down track.instrument=Instrument track.properties=Properties track.properties.general=General track.name.default-percussion-name=Percussion track.lyrics=Lyrics lyric.editor=Lyric Editor measure=Measure measure.first=First Measure measure.last=Last Measure measure.previous=Previous Measure measure.next=Next Measure measure.add=Add Measure measure.add.count=Add Count measure.add-before-current-position=Add measure before the current position measure.add-after-current-position=Add measure after the current position measure.add-at-end=Add measure at the end measure.remove=Remove Measure measure.copy=Copy Measure measure.paste=Paste Measure measure.clean=Clean Measure duration=Duration duration.whole=Whole duration.half=Half duration.quarter=Quarter duration.eighth=Eighth duration.sixteenth=Sixteenth duration.thirtysecond=Thirty-Second duration.sixtyfourth=Sixty-Fourth duration.dotted=Dotted duration.doubledotted=Double Dotted duration.division-type=Triplet dynamic=Dynamic dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Effects effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Dead Note effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Tremolo Bar Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Ghost Note effects.accentuatednote=Accentuated Note effects.heavyaccentuatednote=Heavy Accentuated Note effects.harmonic=Harmonic effects.grace=Grace Note effects.grace-editor=Grace Note Editor effects.grace.before-beat=Before beat effects.grace.on-beat=On beat effects.grace.transition=Transition effects.grace.transition-none=None effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Tremolo Picking Editor effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Harmonic Editor effects.harmonic.type-of-harmonic=Type of Harmonic effects.harmonic.natural=Natural Harmonic effects.harmonic.artificial=Artificial Harmonic effects.harmonic.artificial.key-offset=Key Offset effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=Left Hand effects.harmonic.tapped.right-hand=Right Hand effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=Semi Harmonic bend.editor=Bend Editor bend.bend=Bend bend.bend-release=Bend/Release bend.bend-release-bend=Bend/Release/Bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Player transport.start=Start transport.stop=Stop transport.pause=Pause transport.first=First transport.last=Last transport.previous=Previous transport.next=Next transport.metronome=Metronome transport.mode=Play Mode transport.mode.simple=Simple Mode transport.mode.simple.tempo-percent=Percentage of tempo transport.mode.simple.loop=Play looped transport.mode.trainer=Training Mode transport.mode.trainer.increment-description=Increment by transport.mode.loop-range=Loop Range transport.mode.loop-range.from=Play from measure transport.mode.loop-range.from-default=From the beginning transport.mode.loop-range.to=Play to measure transport.mode.loop-range.to-default=To the end transport.set-loop-start=Set loop start point transport.set-loop-end=Set loop end point mixer=Mixer mixer.volume=Gain mixer.track.solo=Solo mixer.track.mute=Mute mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.volume=Volume mixer.channel.balance=Balance mixer.channel.chorus=Chorus mixer.channel.reverb=Reverb mixer.channel.phaser=Phaser mixer.channel.tremolo=Tremolo mixer.channel.free=Free mixer.channel.link=Link repeat.open=Open Repeat repeat.close=Close Repeat repeat.alternative=Alternative Repeats repeat.alternative.editor=Edit Alternative Repeats repetitions=Repetitions repeat.number-of-repetitions=Number of Repetitions beat=Beat beat.clean=Clean Beat beat.voice.remove-unused=Remove Unused Voice beat.voice-up=Stems Up beat.voice-down=Stems Down beat.voice-auto=Auto Stems beat.stroke=Stroke beat.stroke-up=Upstroke beat.stroke-down=Downstroke beat.move-left=Move One Beat Left beat.move-right=Move One Beat Right beat.move-custom=Custom Beat Move beat.move-custom.dialog.title=Custom Move beat.move-custom.dialog.direction-tip=Move Direction beat.move-custom.dialog.move-1.tip=Major Move beat.move-custom.dialog.move-2.tip=Fine Move beat.move-custom.dialog.direction=Direction beat.move-custom.dialog.direction.right=Move To Right beat.move-custom.dialog.direction.left=Move To Left beat.move-custom.dialog.count=Count beat.move-custom.dialog.duration=Duration beat.move-custom.dialog.duration.type=Dotted/Double-Dotted beat.move-custom.dialog.duration.type.normal=None beat.move-custom.dialog.duration.division-type=Division Type beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet) note=Note note.semitone-up=Semitone Up note.semitone-down=Semitone Down note.shift-up=Shift Up note.shift-down=Shift Down note.tiednote=Tied Note note.deadnote=Dead Note insert.chord=Insert Chord chord.editor=Chord Editor chord=Chord chord.name=Name chord.bass=Bass chord.custom=Custom Chord chord.custom.name-empty-error=Chord name can not be empty. chord.custom.name-exist-error=Chord name already exists. chord.settings.tip=Custom Settings chord.settings.type=Type chord.settings.type.most-common=Most Common chord.settings.type.inversions=Inversions chord.settings.type.close-voiced=Close Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Open Chords chord.settings.chords-to-display=Chords to Display chord.settings.search-frets=Search Frets chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Percussion Track tuning=Tuning tuning.offset=Offset tuning.strings=Strings tuning.strings.transpose=Transpose afected notes. tuning.strings.transpose.try-keep-strings=Try keep notes at same string tuning.strings.transpose.apply-to-chords=Transpose Chords language=Language choose-color=Choose a color settings=Settings settings.config=Configure TuxGuitar settings.config.language=Language settings.config.language.choose=Choose Language settings.config.styles=Styles settings.config.styles.general=General Styles settings.config.styles.printer=Printer Styles settings.config.styles.font.default=Default Font settings.config.styles.font.note=Note Font settings.config.styles.font.lyric=Lyrics Font settings.config.styles.font.text=Text Font settings.config.styles.font.time-signature=Time Signature Font settings.config.styles.font.printer-default=Printer Default Font settings.config.styles.font.printer-note=Printer Note Font settings.config.styles.font.printer-time-signature=Printer Time Signature Font settings.config.styles.color.score-note=Score Note Color settings.config.styles.color.tab-note=Tab Note Color settings.config.styles.color.play-note=Play Note Color settings.config.apply-changes-question=Do you want to apply changes now? settings.config.sound=Sound settings.config.main=General settings.config.main.window-title=Window Title settings.config.main.window-title.help=The following variables will be replaced at the window title: settings.config.main.window-title.var.description.appname=This variable represents the Application Name: TuxGuitar settings.config.main.window-title.var.description.appversion=This variable represents the version of TuxGuitar. settings.config.main.window-title.var.description.filename=This variable represents the name of the opened file settings.config.main.window-title.var.description.filepath=This variable represents the path of the opened file settings.config.main.window-title.var.description.songname=This variable represents the name of the song settings.config.main.window-title.var.description.songauthor=This variable represents the author of the song settings.config.main.window-title.var.description.songalbum=This variable represents the album of the song settings.config.main.window-title.var.description.songartist=This variable represents the artist of the song settings.config.main.options=Options settings.config.main.splash-enabled=Launch splash screen on startup settings.config.main.table.auto-size.enabled=Enable Automatic Table resizing settings.config.styles.color.lines=Horizontal lines color settings.config.toolbars=Tool Bars settings.config.toolbars.tip=Customize Your ToolBars settings.config.toolbars.list=Available ToolBars settings.config.toolbars.move-up=Move Up settings.config.toolbars.move-down=Move Down settings.config.skin=Skins settings.config.skin.choose=Choose your skin settings.keybindings=Configure Key Bindings key-bindings-editor=Key Binding Editor key-bindings-editor-action-select=Select an Action key-bindings-editor-action-column=Actions key-bindings-editor-shortcut-column=Keys key-bindings-editor-push-a-key=Press a key key-bindings-editor-save-question=There are unsaved changes, do you want to exit without saving? key-bindings-editor-reserved-title=Reserved Shortcut key-bindings-editor-reserved-message=Sorry, this shortcut is reserved key-bindings-editor-override=Shortcut already in use! Are you sure you want to use it? print.print=Print print.dialog=Print print.service=Service print.service.name=Name print.service.status=Status print.service.type=Type print.service.info=Info print.range=Range print.range.all-pages=All print.range.pages=Pages print.range.pages-to=To print.copies=Copies print.copies-number=Number of copies print.print-to-file=Print to file print.file-chooser=Choose print-header.default-song-name=Untitled print-header.default-song-author=Anonymous print.preview=Print Preview print.preview.page-of=Of marker=Marker marker.add=Add Marker marker.list=List Markers marker.first=Go First Marker marker.last=Go Last Marker marker.next=Go Next Marker marker.previous=Go Previous Marker export.tablature-enabled=Show Tablature export.score-enabled=Show Score export.chord-name-enabled=Show Chord Names export.chord-diagram-enabled=Show Chord Diagrams export.black-and-white=Black And White Mode scale=Scale scale.list=Scale List text.insert=Insert Text text.editor=Text Editor text.text=Text tools=Tools tools.scale=Scale list tools.browser=Browser tools.plugins=Plugins tools.shortcuts=Shortcuts tools.settings=Settings tools.transpose=Transpose tools.transpose.semitones=Transposition Semitones tools.transpose.apply-to-track=Transpose all measures tools.transpose.apply-to-measure=Transpose only this measure tools.transpose.apply-to-all-tracks=Apply to all tracks tools.transpose.try-keep-strings=Try keep notes at same string when it's possible tools.transpose.apply-to-chords=Transpose Chords browser.dialog=Browser browser.menu.file=File browser.open=Open browser.exit=Exit browser.menu.collection=Collection browser.menu.go=Go browser.collection.select=Select Collection browser.collection.open=Open browser.collection.remove=Remove browser.collection.close=Close browser.collection.new=New browser.go-root=Home browser.go-back=Back browser.refresh=Refresh browser.factory.fs.name=File System browser.collection.fs.name=Name browser.collection.fs.path=Folder browser.collection.fs.editor-title=File System Collection browser.collection.fs.editor-tip=Choose your collection folder browser.collection.fs.invalid-path=Please, select a valid folder midi.port=MIDI Port midi.sequencer=MIDI Sequencer plugin.unknown-value=Not available. plugin.column.name=Plugin Name plugin.column.enabled=Enabled ######################### ### Tool Bar Items ### ######################### file.items=File Items edit.items=Edit Items property.items=Property Items track.items=Track Items duration.items=Duration Items beat.items=Beat Items composition.items=Composition Items repeat.items=Repeat Items transport.items=Player Items marker.items=Marker Items insert.items=Insert Items layout.items=Layout Items view.items=View Items effect.items=Effect Items dynamic.items=Dynamic Items ######################### ###Key Binding Actions### ######################### action.file.new=New File action.file.open=Open File action.file.open-url=Open URL action.file.save=Save action.file.save-as=Save As action.file.print=Print action.file.print-preview=Print Preview action.file.exit=Exit TuxGuitar action.edit.undo=Undo action.edit.redo=Redo action.edit.voice-1=Select Voice 1 action.edit.voice-2=Select Voice 2 action.composition.change-time-signature=Change Time Signature action.composition.change-tempo=Change Tempo action.composition.change-info=Change Song Information action.composition.change-clef=Change Clef action.composition.change-key-signature=Change Key Signature action.composition.change-triplet-feel=Change Triplet Feel action.view.layout-set-page=Show Page Layout action.view.layout-set-linear=Show Linear Layout action.view.layout-set-multitrack=Show Multitrack Mode action.view.layout-set-score-enabled=Show Score action.view.layout-set-tablature-enabled=Show Tablature action.view.layout-set-compact=Show Compact Mode action.view.layout-set-chord-diagram-enabled=Enable Chord Diagram action.view.layout-set-chord-name-enabled=Enable Chord Name action.view.show-fretboard=Show Fretboard action.view.show-piano=Show Piano action.view.show-matrix=Show Matrix action.view.show-mixer=Show Mixer action.view.show-transport=Show Player action.track.add=Add Track action.track.remove=Remove Track action.track.clone=Clone Track action.track.go-first=Go to first track action.track.go-last=Go to last track action.track.go-next=Go to next track action.track.go-previous=Go to previous track action.track.lyrics=Edit track lyrics action.track.properties=Change track properties action.track.move-down=Move track down action.track.move-up=Move track up action.measure.add=Add measure action.measure.remove=Remove measure action.measure.copy=Copy measure action.measure.paste=Paste measure action.measure.clean=Clean measure action.measure.go-first=Go to first measure action.measure.go-last=Go to last measure action.measure.go-next=Go to next measure action.measure.go-previous=Go to previous measure action.beat.general.remove-unused-voice=Remove Unused Voice action.beat.general.voice-up=Set Stems Up action.beat.general.voice-down=Set Stems Down action.beat.general.voice-auto=Set Auto Stems action.beat.general.set-stroke-up=Set Upstroke action.beat.general.set-stroke-down=Set Downstroke action.beat.general.move-left=Move One Beat Left action.beat.general.move-right=Move One Beat Right action.beat.general.move-custom=Custom Beat Move action.note.general.clean-beat=Clean beat action.note.general.decrement-semitone=Decrement semitone action.note.general.increment-semitone=Increment semitone action.note.general.shift-down=Shift down action.note.general.shift-up=Shift up action.note.general.tied=Add/Remove tied action.note.duration.set-whole=Set Whole Duration action.note.duration.set-half=Set Half Duration action.note.duration.set-quarter=Set Quarter Duration action.note.duration.set-eighth=Set Eighth Duration action.note.duration.set-sixteenth=Set Sixteenth Duration action.note.duration.set-thirty-second=Set Thirty Second Duration action.note.duration.set-sixty-fourth=Set Sixty Fourth Duration action.note.duration.change-dotted=Add/Remove dot action.note.duration.change-double-dotted=Add/Remove double dotted action.note.duration.change-division-type=Add/Remove triplet action.note.duration.decrement-duration=Decrement Duration action.note.duration.increment-duration=Increment Duration action.note.effect.change-vibrato=Add/Remove Vibrato action.note.effect.change-bend=Add/Remove bend action.note.effect.change-slide=Add/Remove Slide action.note.effect.change-hammer=Add/Remove hammer-on/pull-off action.note.effect.change-accentuated=Add/Remove accentuated action.note.effect.change-dead=Add/Remove dead note action.note.effect.change-fade-in=Add/Remove fade in action.note.effect.change-ghost=Add/Remove ghost action.note.effect.change-grace=Add/Remove grace action.note.effect.change-harmonic=Add/Remove harmonic action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated action.note.effect.change-palm-mute=Add/Remove palm mute action.note.effect.change-popping=Add/Remove popping action.note.effect.change-slapping=Add/Remove slapping action.note.effect.change-staccato=Add/Remove staccato action.note.effect.change-tapping=Add/Remove tapping action.note.effect.change-tremolo-bar=Add/Remove tremolo bar action.note.effect.change-tremolo-picking=Add/Remove tremolo picking action.note.effect.change-trill=Add/Remove Trill action.insert.open-repeat=Open Repeat action.insert.close-repeat=Close Repeat action.insert.repeat-alternative=Repeat Alternative action.insert.chord=Insert Chord action.insert.text=Insert Text action.marker.add=Add Marker action.marker.go-next=Go Next Marker action.marker.go-previous=Go Previous Marker action.transport.play=Play Song action.transport.stop=Stop Playing action.transport.mode=Player Mode action.transport.metronome=Metrononome action.transport.set-loop-start=Set loop start point action.transport.set-loop-end=Set loop end point action.tools.browser=Browser action.tools.transpose=Transpose Notes action.settings.configure=Settings action.help.doc=Helptuxguitar-src-1.2/TuxGuitar/share/lang/messages_ca.properties0000644000175000017500000006262711273045225024110 0ustar julianjulianok=Acceptar cancel=Cancel\u00B7lar yes=Si no=No add=Afegeix remove=Esborra save=Desa exit=Surt close=Tanca color=Color title=T\u00EDtol edit=Edita go=V\u00E9s error=Error warning=Av\u00EDs plugins=Connectors choose=Escull plugins=Connectors options=Opcions defaults=Predeterminats clean=Neteja rename=Reanomena fret=Celleta position=Posici\u00F3 info=Informaci\u00F3 name=Nom author=Autor version=Versi\u00F3 description=Descripci\u00F3 configure=Configura tuxguitar.title=TuxGuitar file=Fitxer file.new=Nou file.open=Obre file.open-url=Obre URL file.open.error=No s'ha pogut obrir l'arxiu: {0} file.save=Desa file.save-as=Desa com a file.save.error=No s'ha pogut dexar l'arxiu: {0} file.save-changes-question=L'arxiu t\u00E9 canvis sense desar.\nVoleu desar els canvis? file.exit=Sortir file.export=Exportar file.export-midi=Exporta com a Midi file.export-pdf=Exporta com a PDF file.print=Imprimeix file.print-preview=Previsualitzeu la impressi\u00F3 file.import=Importa file.import.error=No s'ha pogut importar: {0} file.import-midi=Importa Midi file.export-ascii=Exporta com a ASCII file.export.error=No s'ha pogut exportar: {0} file.history=Hist\u00F2ric file.overwrite-question=L'arxiu ja existeix, desitgeu sobreescriure'l? edit.menu=Edici\u00F3 edit.undo=Desf\u00E9s edit.redo=Ref\u00E9s edit.copy=Copia edit.from=Des de edit.to=Fins a edit.all-tracks=Totes les pistes edit.paste=Enganxa edit.paste.count=Enganxa comptador edit.paste.replace-mode=Enganxa al comp\u00E1s actual edit.paste.insert-mode=Enganxa a un nou comp\u00E1s edit.delete=Esborra edit.cut=Retalla edit.mouse-mode-selection=Canvia el punter a mode de selecci\u00F3 edit.mouse-mode-edition=Canvia el punter a mode d'edici\u00F3 edit.not-natural-key=Sostingut/Bemoll edit.voice-1=Tria veu 1 edit.voice-2=Tria veu 2 view=Veure view.layout=Veure view.layout.page=Mode P\u00E0gina view.layout.linear=Mode Liniar view.layout.multitrack=Multipista view.layout.compact=Mode compacte view.layout.score-enabled=Mostra la partitura view.layout.tablature-enabled=Mostra la tabulatura view.layout.chord-style=Estil d'acords view.layout.chord-name=Mostra el nom view.layout.chord-diagram=Mostra el diagrama view.show-transport=Mostra el reproductor view.show-mixer=Mostra el mesclador view.show-piano=Mostra el piano view.show-matrix=Mostra l'editor de matrius view.show-fretboard=Mostra el m\u00E0stil fretboard.direction=Direcci\u00F3 fretboard.background-color=Color de fons fretboard.font=Font fretboard.fretpoint-color=Color dels marcadors de posici\u00F3 fretboard.note-color=Color de les notes fretboard.scale-note-color=Color de les notes d'escala fretboard.string-color=Color de cordes fretboard.settings=Prefer\u00E8ncies fretboard.settings.options=Opcions fretboard.display-note-text=Mostra les notes en mode text fretboard.display-scale-text=Mostrar les notes d'escala en mode text fretboard.right-mode=Cap a la dreta fretboard.left-mode=Cap a l'esquerra piano.editor=Piano piano.natural-key-color=Color de les tecles blanques piano.not-natural-key-color=Color de les tecles negres piano.note-color=Color de les notes piano.scale-note-color=Color de les notes d'escala piano.settings=Prefer\u00E8ncies matrix.editor=Editor de matrius matrix.grids=Graelles matrix.font=Font matrix.border-color=Color del contorn matrix.foreground-color=Color de la font i l\u00EDnies divis\u00F2ries matrix.line-color-1=Color de la l\u00EDnia #1 matrix.line-color-2=Color de la l\u00EDnia #2 matrix.line-color-over=Color de la l\u00EDnia seleccionada matrix.note-color=Color de les notes matrix.play-note-color=Color de les notes reproduint matrix.position-color=Color de posici\u00F3 matrix.settings=Prefer\u00E8ncies composition=Composici\u00F3 composition.timesignature=Signe de comp\u00E0s composition.timesignature.Numerator=Numerador composition.timesignature.denominator=Denominador composition.timesignature.to-the-end=Fins a la fi composition.tempo=Tempo composition.tempo-percent=Percentatge composition.tempo.start-to-end=Aplica a tots els compassos composition.tempo.position-to-end=Aplica fins a la fi composition.tempo.position-to-next=Aplica fins la propera marca de temps composition.tempo.invalid=Temps no v\u00E0lid composition.properties=Propietats composition.name=Nom composition.artist=Artista composition.album=\00C0lbum composition.author=Autor composition.date=Data composition.copyright=Copyright composition.writer=Creador de la tabulatura composition.transcriber=Transcrit per en/na composition.comments=Comentaris composition.clef=Clau composition.clef.treble=Agut composition.clef.bass=Baix composition.clef.tenor=Tenor composition.clef.alto=Alt composition.clef.to-the-end=Aplica aquesta clau fins a la fi composition.keysignature=Armadura composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Diesi composition.keysignature.sharp-2=2 Diesis composition.keysignature.sharp-3=3 Diesis composition.keysignature.sharp-4=4 Diesis composition.keysignature.sharp-5=5 Diesis composition.keysignature.sharp-6=6 Diesis composition.keysignature.sharp-7=7 Diesis composition.keysignature.flat-1=1 Bemoll composition.keysignature.flat-2=2 Bemolls composition.keysignature.flat-3=3 Bemolls composition.keysignature.flat-4=4 Bemolls composition.keysignature.flat-5=5 Bemolls composition.keysignature.flat-6=6 Bemolls composition.keysignature.flat-7=7 Bemolls composition.keysignature.to-the-end=Aplica aquesta armadura fins a la fi composition.tripletfeel=Aspecte de tresets composition.tripletfeel.none=Aspecte normal composition.tripletfeel.eighth=Aspecte de tresets en corxeres composition.tripletfeel.sixteenth=Aspecte de tresets en semicorxeres composition.tripletfeel.to-the-end=Aplica fins a la fi help=Ajuda help.help=Ajuda help.doc=Documentaci\u00F3 help.about=Quan a help.about.license=Llic\u00E8ncia help.about.authors=Autors help.about.description=Descripci\u00F3 mixer=Mesclador mixer.volume=Guany mixer.track.solo=Solo mixer.track.mute=Silenci mixer.channel.volume=Volum mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balan\u00E7 mixer.channel.free=Lliure mixer.channel.link=Enlla\u00E7 track=Pista track.number=Nombre track.name=Nom track.color=Color track.first=Primera track.last=Darrera track.previous=Anterior track.next=Seg\u00FCent track.add=Afegeix pista track.remove=Esborra pista track.instrument=Instrument track.properties=Propietats track.properties.general=General track.clone=Clona pista track.move-up=Mou amunt track.move-down=Mou avall track.name.default-percussion-name=Percussi\u00F3 track.lyrics=Edita les lletres lyric.editor=Editor de lletres measure=Comp\u00E0s measure.first=Primer measure.last=Darrer measure.previous=Anterior measure.next=Seg\u00FCent measure.add=Afegeix comp\u00E0s measure.add.count=Afegeix comptador measure.remove=Esborra comp\u00E0s measure.copy=Copia comp\u00E0s measure.paste=Enganxa comp\u00E0s measure.clean=Neteja comp\u00E0s measure.add-before-current-position=Afegeix comp\u00E0s abans de la posici\u00F3 actual measure.add-after-current-position=Afegeix comp\u00E0s despr\u00E9s de la posici\u00F3 actual measure.add-at-end=Afegeix comp\u00E0s a la fi beat=Beat beat.clean=Neteja beat beat.voice.remove-unused=Esborra veu no usada beat.voice-up=Stems amunt beat.voice-down=Stems avall beat.voice-auto=Auto Stems beat.stroke-up=Upstroke beat.stroke-down=Downstroke beat.move-left=Mou un bit a l'esquerra beat.move-right=Mou un bit a la dreta beat.move-custom=Personalitza el moviment del beat beat.move-custom.dialog.title=Moviment personalitzat beat.move-custom.dialog.direction-tip=Mou direcci\u00F3 beat.move-custom.dialog.move-1.tip=Moviment primari beat.move-custom.dialog.move-2.tip=Moviment secundari beat.move-custom.dialog.direction=Direcci\u00F3 beat.move-custom.dialog.direction.right=Mou a la dreta beat.move-custom.dialog.direction.left=Mou a l'esquerra beat.move-custom.dialog.count=Compta beat.move-custom.dialog.duration=Durada beat.move-custom.dialog.duration.type=Punt/Doble punt beat.move-custom.dialog.duration.type.normal=Cap beat.move-custom.dialog.duration.division-type=Tipus de divisi\u00F3 beat.move-custom.dialog.duration.division-type.normal=Normal (grup excedent) note=Nota note.tiednote=Lliga nota note.deadnote=Dead Note note.semitone-up=Apuja un semit\u00F2 note.semitone-down=Abaixa un semit\u00F2 note.shift-up=Apuja una corda note.shift-down=Abaixa una corda duration=Durada duration.whole=Rodona duration.half=Blanca duration.quarter=Negra duration.eighth=Corxera duration.sixteenth=Semicorxera duration.thirtysecond=Fusa duration.sixtyfourth=Semifusa duration.dotted=Punt duration.doubledotted=Doble punt duration.division-type=Treset effects=Efectes effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Nota morta effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Editor de Tremolo Bar effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Nota fantasma effects.accentuatednote=Nota accentuada effects.heavyaccentuatednote=Nota molt accentuada effects.harmonic=Harm\u00F2nic effects.grace=Appoggiatura effects.grace-editor=Editor d'appoggiatures effects.grace.before-beat=abans del Beat effects.grace.on-beat=Al Beat effects.grace.transition=Transici\u00F3 effects.grace.transition-none=Cap effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Editor de Trill effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Editor de Tremolo Picking effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Editor d'harm\u00F2nics effects.harmonic.type-of-harmonic=Tipus d'harm\u00F2nic effects.harmonic.natural=Harm\u00F2nic effects.harmonic.artificial=Harm\u00F2nic artifical effects.harmonic.artificial.key-offset=Key offset effects.harmonic.tapped=Tapped harm\u00F2nic effects.harmonic.tapped.left-hand=M\u00E0 esquerra effects.harmonic.tapped.right-hand=M\u00E0 dreta effects.harmonic.pinch=Pinch harm\u00F2nic effects.harmonic.semi=Semi-harm\u00F2nic bend.editor=Editor de Bend bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release dynamic=Dynamic dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo insert.chord=Insereix acord chord.editor=Editor d'acords chord=Acord chord.name=Nom chord.custom=Acord personalitzat chord.custom.name-empty-error=El nom de l'acord \u00E9s obligatori chord.custom.name-exist-error=Ja existeix un acord amb aquest nom chord.bass=Baix chord.settings.tip=Prefer\u00E8ncies chord.settings.type=Tipus chord.settings.type.most-common=M\u00E9s com\u00FA chord.settings.type.inversions=Inversions chord.settings.type.close-voiced=Close Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Acords oberts chord.settings.chords-to-display=Acords a mostrar chord.settings.search-frets=Trasts chord.settings.minimum-fret=M\u00EDnim chord.settings.maximum-fret=M\u00E0xim transport=Reproductor transport.start=Reprodueix transport.pause=Pausa transport.stop=Atura transport.first=Primer comp\u00EDs transport.last=Darrer comp\u00EDs transport.previous=Comp\u00EDs anterior transport.next=Seg\u00FCent comp\u00EDs transport.metronome=Metr\u00F2nom transport.mode=Mode de reproducci\u00F3 transport.mode.simple=Mode normal transport.mode.simple.tempo-percent=Percentatge de temps transport.mode.simple.loop=Repeteix infinitament transport.mode.trainer=Mode d'entrenament transport.mode.trainer.increment-description=Incrementa percentatge transport.mode.loop-range=Repeteix rang transport.mode.loop-range.from=Reprodueix des del comp\u00E0s transport.mode.loop-range.from-default=Des del principi transport.mode.loop-range.to=Reprodueix el comp\u00E0s transport.mode.loop-range.to-default=Fins a la fi transport.set-loop-start=Defineix el punt d'inici de la repetici\u00F3 transport.set-loop-end=Defineix el punt final de la repetici\u00F3 repetitions=Repeticions repeat.open=Obre repetici\u00F3 repeat.close=Tanca repetici\u00F3 repeat.number-of-repetitions=Nombre de repeticions repeat.alternative=Repetici\u00F3 alternativa repeat.alternative.editor=Edita repetici\u00F3 alternativa instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Pista de percussi\u00F3 tuning=Afinaci\u00F3 tuning.strings=Cordes tuning.offset=Offset tuning.strings.transpose=Transpose les notes afectades tuning.strings.transpose.try-keep-strings=Mira de mantindre les notes a la mateixa corda tuning.strings.transpose.apply-to-chords=Transposar acords language=Llengua choose-color=Seleccioneu un color settings=Opcions settings.config=Configura TuxGuitar settings.config.main=General settings.config.main.window-title=T\u00EDtol de la finestra settings.config.main.window-title.help=Les seg\u00FCents variables seran reempla\u00E7ades al t\u00EDtol: settings.config.main.window-title.var.description.appname=Mostra el nom de l'aplicaci\u00F3: TuxGuitar. settings.config.main.window-title.var.description.appversion=Mostra la versi\u00F3 actual de tuxguitar. settings.config.main.window-title.var.description.filename=Mostra el nom de l'arxiu que sou editant. settings.config.main.window-title.var.description.filepath=Mostra la ruta de l'arxiu que sou editant. settings.config.main.window-title.var.description.songname=Mostra el nom de la can\u00E7\u00F3 actual. settings.config.main.window-title.var.description.songauthor=Mostra l'autor de la can\u00E7\u00F3 actual. settings.config.main.window-title.var.description.songalbum=Mostra l'\u00E0lbum de la can\u00E7\u00F3 actual. settings.config.main.window-title.var.description.songartist=Mostra l'artista de la can\u00E7\u00F3 actual. settings.config.main.options=Opcions settings.config.main.splash-enabled=Mostra l'splash a l'inici. settings.config.main.table.auto-size.enabled=Ajusta autom\u00E0ticament la mida de la previsualizaci\u00F3 de pistes settings.config.view=Vista settings.config.view.mode=Mode de vista settings.config.view.size=Ajust de la finestra settings.config.view.size.maximized=Maximizada settings.config.view.size.width=Amplada settings.config.view.size.height=Al\u00E7ada settings.config.language=Llengua settings.config.language.choose=Seleccioneu la vostra llengua settings.config.styles=Estils settings.config.styles.general=Estils generals settings.config.styles.font.default=Font per defecte settings.config.styles.font.note=Font de les notes settings.config.styles.font.time-signature=Font de signe de comp\u00E0s settings.config.styles.font.lyric=Font de les lletres settings.config.styles.font.text=Font dels texts settings.config.styles.color.score-note=Color de les notes de la partitura settings.config.styles.color.tab-note=Color de les notes de la tabulatura settings.config.styles.color.play-note=Color de les notes en reproducci\u00F3 settings.config.styles.color.lines=Color de les l\u00EDnies divis\u00F2ries settings.config.styles.printer=Estils d'impressi\u00F3 settings.config.styles.font.printer-default=Font per defecte settings.config.styles.font.printer-note=Font de les notes settings.config.styles.font.printer-time-signature=Font del signe de comp\u00E0s settings.config.apply-changes-question=Voleu aplicar ara els canvis? settings.config.sound=So settings.config.skin=Tema d'icones settings.config.skin.choose=Seleccioneu el vostre tema d'icones settings.config.toolbars=Barra d'eines settings.config.toolbars.tip=Personalitzeu la vostra barra d'eines settings.config.toolbars.list=Eines disponibles settings.config.toolbars.move-up=Mou amunt settings.config.toolbars.move-down=Mou avall settings.keybindings=Configureu tecles key-bindings-editor=Editor de tecles key-bindings-editor-action-select=Seleccioneu una acci\u00F3 key-bindings-editor-action-column=Accions key-bindings-editor-shortcut-column=Tecles key-bindings-editor-push-a-key=Premeu una tecla key-bindings-editor-save-question=S'han trobat canvis sense desar; tot i aix\u00F2 voleu sortir? key-bindings-editor-reserved-title=Tecla reservada key-bindings-editor-reserved-message=Ho sentim, aquesta \u00E9s una tecla reservada del sistema. key-bindings-editor-override=Ja hi ha una acci\u00F3 per a aquestes tecles, voleu sobreescriure-la? print.print=Imprimir print.dialog=Imprimeix print.service=Servei print.service.name=Nom print.service.status=Estat print.service.type=Tipus print.service.info=Informaci\u00F3 print.range=Rang print.range.all-pages=Totes les p\u00E0gines print.range.pages=P\u00E0gines print.range.pages-to=Cap a print.copies=C\u00F2pies print.copies-number=Nombre de c\u00F2pies print.print-to-file=Imprimeix cap a arxiu print.file-chooser=Examina print-header.default-song-name=Sense t\u00EDtol print-header.default-song-author=An\u00F2nim print.preview=Previsualitzeu la impressi\u00F3 print.preview.page-of=De marker=Marca marker.add=Afegeix marca marker.list=Mostra marques marker.first=Primera marker.last=Darrera marker.next=Seg\u00FCent marker.previous=Anterior export.tablature-enabled=Mostra la tabulatura export.score-enabled=Mostra la partitura export.chord-name-enabled=Mostra els noms dels acords export.chord-diagram-enabled=Mostra els diagrames d'acords export.black-and-white=Mode blanc i negre scale=Escala scale.list=Llista d'escales text.insert=Insereix text text.editor=Editor de text text.text=Text tools=Eines tools.scale=Llista d'escales tools.browser=Explorador de can\u00E7ons tools.plugins=Configura Plugins tools.shortcuts=Dreceres del teclat tools.settings=Prefer\u00E8ncies tools.transpose=Transposar tools.transpose.semitones=Transposar semitons tools.transpose.apply-to-track=Transposar tots els compasos tools.transpose.apply-to-measure=Transposar nom\u00E9s aquest comp\u00E0s tools.transpose.apply-to-all-tracks=Aplicar-ho a totes les pistes tools.transpose.try-keep-strings=Mira de deixar les notes a la mateixa corda quan sigui possible tools.transpose.apply-to-chords=Transposa acords browser.dialog=Explorador de can\u00E7ons browser.menu.file=Arxiu browser.open=Obre browser.exit=Surt browser.menu.collection=Col\u00B7lecci\u00F3 browser.menu.go=V\u00E9s browser.collection.select=Selecciona col\u00B7lecci\u00F3 browser.collection.open=Obre col\u00B7lecci\u00F3 browser.collection.remove=Esborra col\u00B7lecci\u00F3 browser.collection.close=Tanca col\u00B7lecci\u00F3 browser.collection.new=Afegeix col\u00B7lecci\u00F3 browser.go-root=Inici browser.go-back=Torna browser.refresh=Actualitza browser.factory.fs.name=Sistema d'arxius local browser.collection.fs.name=Nom browser.collection.fs.path=Ubicaci\u00F3 browser.collection.fs.editor-title=Col\u00B7lecci\u00F3 d'arxius locals browser.collection.fs.editor-tip=Escolliu una carpeta browser.collection.fs.invalid-path=La carpeta escollida no \u00E9s v\u00E0lida. midi.port=Port MIDI midi.sequencer=Seq\u00FCenciador MIDI plugin.unknown-value=No disponible plugin.column.name=Nom del Plugin plugin.column.enabled=Actiu ######################### ### Tool Bar Items ### ######################### file.items=Eines d'arxiu edit.items=Eines d'edici\u00F3 property.items=Propietats de la can\u00E7\u00F3 track.items=Eines de pistes duration.items=Durades beat.items=Eines de Beat composition.items=Eines de composici\u00F3 repeat.items=Accions de repetici\u00F3 transport.items=Accions de reproducci\u00F3 marker.items=Accions de marques insert.items=Accions d'inserci\u00F3 layout.items=Vista de modes view.items=Vista de components effect.items=Efectes dynamic.items=Din\u00E0mics ######################### ###Key Binding Actions### ######################### action.file.new=Nou arxiu action.file.open=Obre arxiu action.file.open-url=Obre URL action.file.save=Desa action.file.save-as=Desa com a action.file.print=Imprimeix action.file.print-preview=Previsualitzeu la impressi\u00F3 action.file.exit=Tanca l'aplicaci\u00F3 action.edit.undo=Desf\u00E9s action.edit.redo=Ref\u00E9s action.edit.voice-1=Tria veu 1 action.edit.voice-2=Tria veu 2 action.composition.change-time-signature=Canvia el signe de comp\u00E0s action.composition.change-tempo=Canvia temps action.composition.change-info=Canvia la informaci\u00F3 de la can\u00E7\u00F3 action.composition.change-clef=Canvia la clau action.composition.change-key-signature=Canvia l'armadura action.composition.change-triplet-feel=Aspecte de tresets action.view.layout-set-page=Veure mode de p\u00E0gina action.view.layout-set-linear=Veure mode liniar action.view.layout-set-multitrack=Veure mode multipista action.view.layout-set-compact=Veure mode compacte action.view.layout-set-score-enabled=Mostra la partitura action.view.layout-set-tablature-enabled=Mostra la tabulatura action.view.layout-set-chord-diagram-enabled=Mostra el diagrama d'acords action.view.layout-set-chord-name-enabled=Mostra el nom dels acords action.view.show-fretboard=Mostra el m\u00E0stil action.view.show-piano=Mostra el piano action.view.show-matrix=Mostra l'editor de matrius action.view.show-mixer=Mostra el mesclador de sons action.view.show-transport=Mostra el reproductor action.track.add=Insereix pista action.track.remove=Esborra la pista action.track.clone=Clona la pista action.track.go-first=V\u00E9s a la primera pista action.track.go-last=V\u00E9s a la darrera pista action.track.go-next=V\u00E9s a la pista seg\u00FCent action.track.go-previous=V\u00E9s a l'anterior pista action.track.move-down=Mou avall action.track.move-up=Mou amunt action.track.lyrics=Edita les lletres action.track.properties=Edita les propietats de la pista action.measure.add=Afegeix comp\u00E0s action.measure.remove=Esborra el comp\u00E0s action.measure.copy=Copia el comp\u00E0s action.measure.paste=Enganxa el comp\u00E0s action.measure.clean=Neteja el comp\u00E0s action.measure.go-first=V\u00E9s al primer comp\u00E0s action.measure.go-last=V\u00E9s al darrer comp\u00E0s action.measure.go-next=V\u00E9s al comp\u00E0s seg\u00FCent action.measure.go-previous=V\u00E9s al comp\u00E0s anterior action.beat.general.remove-unused-voice=Esborra veu no usada action.beat.general.voice-up=Assigna stems amunt action.beat.general.voice-down=Assigna stems avall action.beat.general.voice-auto=Assigna stems autom\u00E0tics action.beat.general.set-stroke-up=Assigna Upstroke action.beat.general.set-stroke-down=Assigna Downstroke action.beat.general.move-left=Mou un bit a l'esquerra action.beat.general.move-right=Mou un bit a la dreta action.beat.general.move-custom=Personalitza el moviment del beat action.note.general.clean-beat=Neteja Beat action.note.general.decrement-semitone=Abaixa un semit\u00F2 action.note.general.increment-semitone=Apuja un semit\u00F2 action.note.general.shift-down=Abaixa una corda action.note.general.shift-up=Apuja una corda action.note.general.tied=Afegir/Treu un lligat action.note.duration.change-dotted=Afegeix/Treu un punt action.note.duration.change-double-dotted=Afegeix/Treu un doble punt action.note.duration.change-division-type=Afegeix/Treu un treset action.note.duration.set-whole=Assigna durada de rodona action.note.duration.set-half=Assigna durada de blanca action.note.duration.set-quarter=Assigna durada de negra action.note.duration.set-eighth=Assigna durada de corxera action.note.duration.set-sixteenth=Assigna durada de semicorxera action.note.duration.set-thirty-second=Assigna durada de fusa action.note.duration.set-sixty-fourth=Assigna durada de semifusa action.note.duration.decrement-duration=Disminueix durada action.note.duration.increment-duration=Augmenta durada action.note.effect.change-vibrato=Afegeix/Treu Vibrato action.note.effect.change-bend=Afegeix/Treu Bend action.note.effect.change-slide=Afegeix/Treu Slide action.note.effect.change-hammer=Afegeix/Treu Hammer action.note.effect.change-accentuated=Afegeix/Treu accent action.note.effect.change-dead=Afegeix/Treu nota morta action.note.effect.change-fade-in=Afegeix/Treu fade in action.note.effect.change-ghost=Afegeix/Treu nota fantasma action.note.effect.change-grace=Afegeix/Treu appoggiatura action.note.effect.change-harmonic=Afegeix/Treu harm\u00F2nic action.note.effect.change-heavy-accentuated=Afegeix/Treu nota molt accentuada action.note.effect.change-palm-mute=Afegeix/Treu Palm Mute action.note.effect.change-popping=Afegeix/Treu Popping action.note.effect.change-slapping=Afegeix/Treu Slapping action.note.effect.change-staccato=Afegeix/Treu Staccato action.note.effect.change-tapping=Afegeix/Treu Tapping action.note.effect.change-tremolo-bar=Afegeix/Treu Tremolo Bar action.note.effect.change-tremolo-picking=Afegeix/Treu Tremolo Picking action.note.effect.change-trill=Afegeix/Treu Trill action.insert.open-repeat=Obre repetici\u00F3 action.insert.close-repeat=Tanca repetici\u00F3 action.insert.chord=Insereix acord action.insert.text=Insereix text action.insert.repeat-alternative=Insereix repetici\u00F3 alternativa action.marker.add=Afegeix marca action.marker.go-next=V\u00E9s a la seg\u00FCent marca action.marker.go-previous=V\u00E9s a la marca anterior action.transport.play=Reprodueix tema action.transport.stop=Atura la reproducci\u00F3 action.transport.metronome=Metr\u00F2nom action.transport.mode=Mode de reproducci\u00F3 action.transport.set-loop-start=Defineix el punt d'inici de la repetici\u00F3 action.transport.set-loop-end=Defineix el punt final de la repetici\u00F3 action.tools.browser=Explorador de can\u00E7ons action.tools.transpose=Transposa notes action.settings.configure=Edita les prefer\u00E8ncies action.help.doc=Ajuda tuxguitar-src-1.2/TuxGuitar/share/lang/messages_cs.properties0000644000175000017500000004557311273045225024133 0ustar julianjulianes=\u0160pan\u011blsky en=Anglicky fr=Francouzsky pl=Polsky de=N\u011bmecky pt=Portugalsky cz=\u010cesky ok=Ok cancel=Zru\u0161it yes=Ano no=Ne add=P\u0159idat edit=Editovat remove=Odebrat save=Ulo\u017eit exit=Odej\u00edt choose=Vybrat color=Barva title=N\u00e1zev go=Jdi warning=Varov\u00e1n\u00ed error=Chyba plugins=Pluginy options=Volby defaults=P\u016fvodn\u00ed clean=Smazat rename=P\u0159ejmenovat fret=Pra\u017eec position=Poloha tuxguitar.title=Tux-Guitar file=Soubor file.new=Nov\u00fd file.open=Otev\u0159\u00edt file.save=Ulo\u017eit file.save-as=Ulo\u017eit jako... file.exit=Konec file.export=Exportovat file.export-midi=Exportovat MIDI file.export-pdf=Exportovat PDF file.print=Tisk file.print-preview=N\u00e1hled tisku file.import=Importovat file.import-midi=Importovat MIDI file.export-ascii=Exportovat ASCII file.history=Historie file.overwrite-question=Tento soubor ji\u017e existuje, opravdu ho chcete p\u0159epsat?? edit.menu=Editovat edit.undo=Zp\u011bt edit.redo=Vp\u0159ed edit.copy=Kop\u00edrovat edit.from=Od edit.to=Do edit.all-tracks=V\u0161echny stopy edit.paste=Vlo\u017eit edit.paste.replace-mode=Vlo\u017eit do tohoto taktu edit.paste.insert-mode=Vlo\u017eit do n\u00e1sleduj\u00edc\u00edho taktu edit.delete=Odstranit edit.cut=Vyjmout edit.mouse-mode-selection=M\u00f3d v\u00fdb\u011bru edit.mouse-mode-edition=M\u00f3d vkl\u00e1d\u00e1n\u00ed not edit.not-natural-key=M\u00f3d posuvek view=Pohled view.layout=Rozvr\u017een\u00ed view.layout.page=Rozvr\u017een\u00ed strany view.layout.linear=Line\u00e1rn\u00ed rozvr\u017een\u00ed view.layout.multitrack=V\u00edcestop\u00e9 rozvr\u017een\u00ed view.show-mixer=Zobrazit mix\u00e9r view.show-fretboard=Zobrazit hmatn\u00edk view.show-piano=Zobrazit klaviaturu fretboard.right-mode=Prav\u00fd m\u00f3d fretboard.left-mode=Lev\u00fd m\u00f3d composition=Skladba composition.timesignature=Hodnota taktu ... composition.timesignature.Numerator=\u010citatel composition.timesignature.denominator=Jmenovatel composition.timesignature.to-the-end=A\u017e na konec composition.tempo=Tempo ... composition.tempo-percent=Procent composition.properties=Mo\u017enosti ... composition.name=N\u00e1zev composition.artist=Interpret composition.album=Album composition.author=Autor composition.tempo.invalid=Neplatn\u00e9 tempo composition.tripletfeel=Triolov\u00e9 c\u00edt\u011bn\u00ed ... help=N\u00e1pov\u011bda help.help=N\u00e1pov\u011bda help.about=O aplikaci.. mixer.volume=Hlasitost (gain) mixer.track.solo=S\u00f3lo mixer.track.mute=Ztlumit mixer.channel.volume=Hlasitost mixer.channel.channel=Kan\u00e1l mixer.channel.effect-channel=EC mixer.channel.balance=Vyv\u00e1\u017een\u00ed mixer.channel.free=Voln\u00fd mixer.channel.link=Propojit track=Stopa track.number=N track.name=Jm\u00e9no track.color=Barva track.first=Prvn\u00ed stopa track.last=Posledn\u00ed stopa track.previous=P\u0159edchoz\u00ed stopa track.next=N\u00e1sleduj\u00edc\u00ed stopa track.add=P\u0159idat stopu track.remove=Odebrat stopu track.instrument=N\u00e1stroj track.tunning=Lad\u011bn\u00ed track.instrument.empty=Zvukov\u00e1 banka nebyla nalezena ve Va\u0161em MIDI syst\u00e9mu. Zkuste znovu zkompilovat aplikaci Tuxguitar za pomoci Va\u0161\u00ed verze javy. track.properties=Vlastnosti track.properties.general=Obecn\u00e9 track.name.default-percussion-name=Perkuse track.lyrics=Text p\u00edsn\u011b tunning.offset=Offset lyric.editor=Editor textu p\u00edsn\u011b measure=Takt measure.first=Jdi na prvn\u00ed takt measure.last=Jdi na posledn\u00ed takt measure.previous=Jdi na p\u0159edchoz\u00ed takt measure.next=Jdi na n\u00e1slednuj\u00edc\u00ed takt measure.add=P\u0159idat takt measure.add-before-current-position=P\u0159idat takt p\u0159ed sou\u010dasnou pozici measure.add-after-current-position=P\u0159idat takt za sou\u010dasnou pozici measure.add-at-end=P\u0159idat takt na konec measure.remove=Odebrat takt measure.copy=Kop\u00edrovat takt measure.paste=Vlo\u017eit takt measure.clean=Vymazat obsah taktu duration=D\u00e9lka duration.whole=Cel\u00e1 duration.half=P\u016flov\u00e1 duration.quarter=\u010ctvr\u0165ov\u00e1 duration.eighth=Osminov\u00e1 duration.sixteenth=\u0160estn\u00e1ctinov\u00e1 duration.thirtysecond=Dvaat\u0159icetinov\u00e1 duration.sixtyfourth=\u010cty\u0159ia\u0161edes\u00e1tinov\u00e1 duration.dotted=Nota s te\u010dkou duration.doubledotted=Nota se dv\u011bma te\u010dkami duration.division-type=n-ola dynamic=Dynamika dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Efekty effects.vibrato=Vibr\u00e1to effects.bend=Vyta\u017een\u00ed (bend) effects.deadnote=Zatlumen\u00e1 nota (dead note) effects.slide=Skluz (slide) effects.hammer=P\u0159\u00edraz/Odtrh effects.tremolo-bar=Tremolo... effects.tremolo-bar-editor=Tremolo Editor effects.tremolo-bar.dip=Pono\u0159it effects.tremolo-bar.dive=Potopit effects.tremolo-bar.release-up=Vytahnout effects.tremolo-bar.release-down=Zatahnout effects.tremolo-bar.inverted-dip=Vyno\u0159it effects.tremolo-bar.return=Vr\u00e1tit effects.ghostnote=N\u00e1znak noty effects.accentuatednote=Akcent effects.heavyaccentuatednote=Siln\u00fd akcent effects.harmonic=Fla\u017eolet effects.grace=P\u0159\u00edraz effects.grace-editor=Editor P\u0159\u00edrazu effects.grace.before-beat=P\u0159ed dobou effects.grace.on-beat=Na dobu effects.grace.transition=P\u0159echod effects.grace.transition-none=\u017d\u00e1dn\u00fd effects.grace.transition-bend=Vyta\u017een\u00ed effects.grace.transition-slide=Skluz effects.grace.transition-hammer=P\u0159\u00edklep effects.trill=Trylek effects.trill-editor=Editor Trylk\u016f effects.tremolo-picking=Soustavn\u00e9 tremolo effects.tremolo-picking-editor=Editor Soustavn\u00e9ho tremola effects.palm-mute=Tlumen\u00ed dlan\u00ed effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slap effects.popping=Trhnut\u00ed effects.fade-in=Fade In effects.harmonic-editor=Editor Fla\u017eolet\u016f effects.harmonic.type-of-harmonic=Typ fla\u017eoletu effects.harmonic.natural=P\u0159irozen\u00fd fla\u017eolet effects.harmonic.artificial=Um\u011bl\u00fd fla\u017eolet effects.harmonic.artificial.key-offset=Rozd\u00edl v lad\u011bn\u00ed effects.harmonic.tapped=Fla\u017eolet tappingem effects.harmonic.tapped.left-hand=Levou rukou effects.harmonic.tapped.right-hand=Pravou rukou effects.harmonic.pinch=Pinch fla\u017eolet effects.harmonic.semi=Semi-fla\u017eolet bend.editor=Editor Vyta\u017een\u00ed bend.bend=Vyt\u00e1hnout bend.bend-release=Vyt\u00e1hnout/Pustit bend.bend-release-bend=Vyt\u00e1hnout/Pustit/Vyt\u00e1hnout bend.prebend=Dop\u0159edu Vyt\u00e1hnout bend.prebend-release=Dop\u0159edu vyt\u00e1hnout/Pustit transport=P\u0159ehr\u00e1va\u010d transport.start=Start transport.stop=Stop repeat.open=Za\u010d\u00e1tek repetice repeat.close=Konec repetice repetitions=Repetice repeat.number-of-repetitions=Po\u010det opakov\u00e1n\u00ed beat=Nota beat.clean=\u010cist\u00e1 doba note.semitone-up=O p\u016flt\u00f3n n\u00ed\u017e note.semitone-down=O p\u016flt\u00f3n v\u00fd\u0161 note.shift-up=O strunu n\u00ed\u017e note.shift-down=O strunu v\u00fd\u0161 note.tiednote=Ligatura note.deadnote=Zatlumen\u00e1 nota insert.chord=Vlo\u017eit akord chord.editor=Editor Akord\u016f chord=Akord chord.name=Jm\u00e9no akordu chord.custom.name-empty-error=Akord mus\u00ed m\u00edt jm\u00e9no! chord.custom.name-exist-error=Jm\u00e9no akordu ji\u017e existuje! instrument=N\u00e1stroj instrument.instrument=N\u00e1stroj instrument.percussion-track=Bic\u00ed/Perkuse tunning=Lad\u011bn\u00ed tunning.strings=Struny language=Jazyk choose-color=Zvolte barvu settings=Nastraven\u00ed settings.config=Nastavit TuxGuitar settings.config.view=Pohled settings.config.view.mode=M\u00f3d rozvr\u017een\u00ed settings.config.view.size=Velikost okna settings.config.view.size.maximized=Maximalizovan\u00e9 settings.config.view.size.width=\u0160\u00ed\u0159ka settings.config.view.size.height=V\u00fd\u0161ka settings.config.language=Jazyk settings.config.language.choose=Zvolte V\u00e1\u0161 jazyk settings.config.styles=Styly settings.config.styles.font.default=V\u00fdchoz\u00ed font settings.config.styles.font.note=Notov\u00fd font settings.config.styles.font.time-signature=Font \u010dasov\u00e1n\u00ed taktu settings.config.styles.font.printer-default=Tisk\u00e1rna - v\u00fdchoz\u00ed font settings.config.styles.font.printer-note=Tisk\u00e1rna - notov\u00fd font settings.config.styles.font.printer-time-signature=Tisk\u00e1rna - font \u010dasov\u00e1n\u00ed taktu settings.config.styles.color.score-note=Barva not settings.config.styles.color.tab-note=Barva znak\u016f tabulatury settings.config.styles.color.play-note=Barva pr\u00e1v\u011b hran\u00e9 noty settings.config.apply-changes-question=P\u0159ejete si ulo\u017eit zm\u011bny? settings.config.sound=Zvuk settings.config.sound.soundbank=Zvukov\u00e1 banka settings.config.sound.default-soundbank=Pou\u017e\u00edt v\u00fdchoz\u00ed zvukovou banku settings.config.sound.custom-soundbank=Pou\u017e\u00edt vlastn\u00ed zvukovou banku settings.config.sound.soundbank-restart-message=Je t\u0159eba restartovat TuxGuitar aby se projevila zm\u011bna zvukov\u00e9 banky settings.config.main=Obecn\u00e9 settings.config.main.window-title=Titulek okna settings.config.main.window-title.help=Tyto n\u00e1sleduj\u00edc\u00ed prom\u011bnn\u00e9 budou zobrazeny na titulku okna: settings.config.main.window-title.var.description.appname=Tato prom\u011bnn\u00e1 ozna\u010duje jm\u00e9no aplikace: TuxGuitar settings.config.main.window-title.var.description.appversion=Tato prom\u011bnn\u00e1 ozna\u010duje aktu\u00e1ln\u00ed verzi aplikace TuxGuitar. settings.config.main.window-title.var.description.filename=Tato prom\u011bnn\u00e1 ozna\u010duje jm\u00e9no otev\u0159en\u00e9ho souboru settings.config.main.window-title.var.description.filepath=Tato prom\u011bnn\u00e1 zna\u010d\u00ed cestu k pr\u00e1v\u011b otev\u0159en\u00e9mu souboru settings.config.main.window-title.var.description.songname=Tato prom\u011bnn\u00e1 ozna\u010duje jm\u00e9no skladby settings.config.main.window-title.var.description.songauthor=Tato prom\u011bnn\u00e1 ozna\u010duje autora skladby settings.config.main.window-title.var.description.songalbum=Tato prom\u011bnn\u00e1 ozna\u010duje album settings.config.main.window-title.var.description.songartist=Tato prom\u011bnn\u00e1 ozna\u010duje interpreta skladby settings.config.main.options=Volby settings.config.main.splash-enabled=Uk\u00e1zat \u00favodn\u00ed obrazovku p\u0159i startu TuxGuitar settings.config.styles.color.lines=Barva notov\u00fdch \u010dar settings.config.toolbars=N\u00e1strojov\u00e9 li\u0161ty soundbank.error=Chyba zvukov\u00e9 banky! soundbank.error.unavailable=Chyba, zvukov\u00e1 banka nen\u00ed dostupn\u00e1! soundbank.error.custom=Selhalo otev\u0159en\u00ed vlastn\u00ed zvukov\u00e9 banky! settings.keybindings=Konfigurovat kl\u00e1vesov\u00e9 zkratky key-bindings-editor=Editor Kl\u00e1vesov\u00fdch zkratek key-bindings-editor-action-select=Zvolte akci key-bindings-editor-action-column=Akce key-bindings-editor-shortcut-column=Kl\u00e1vesy key-bindings-editor-push-a-key=Zm\u00e1\u010dkn\u011bte kl\u00e1vesu key-bindings-editor-save-question=N\u011bkter\u00e9 zm\u011bny nejsou ulo\u017eeny, opravdu chcete odej\u00edt bez ulo\u017een\u00ed zm\u011bn? key-bindings-editor-reserved-title=Vyhrazen\u00e1 zkratka key-bindings-editor-reserved-message=Je mi l\u00edto, ale tato zkratka je vyhrazena. key-bindings-editor-override=Zkratka ji\u017e pou\u017eita! Jste si jist(a), \u017ee ji chcete pou\u017e\u00edt ? print.print=Tisk print.dialog=Tisk print.service=Slu\u017eba print.service.name=Jm\u00e9no print.service.status=Status print.service.type=Typ print.service.info=Informace print.range=Rozsah print.range.all-pages=V\u0161echny print.range.pages=Str\u00e1nky print.range.pages-to=Do print.copies=Kopie print.copies-number=Po\u010det kopi\u00ed print.print-to-file=Tisk do souboru print.file-chooser=Zvolit print-header.default-song-name=Bez n\u00e1zvu print-header.default-song-author=Anonym print.preview=N\u00e1hled tisku view.layout.score-enabled=Uk\u00e1zat notaci view.show-transport=Uk\u00e1zat Transport composition.clef=Kl\u00ed\u010d ... composition.clef.treble=Houslov\u00fd composition.clef.bass=Basov\u00fd composition.clef.tenor=Tenorov\u00fd composition.clef.alto=Altov\u00fd composition.clef.to-the-end=Pou\u017e\u00edt tento kl\u00ed\u010d a\u017e do konce composition.keysignature=P\u0159edznamen\u00e1n\u00ed ... composition.keysignature.natural=Bez p\u0159edznamen\u00e1n\u00ed composition.keysignature.sharp-1=1 k\u0159\u00edzek composition.keysignature.sharp-2=2 k\u0159\u00ed\u017eky composition.keysignature.sharp-3=3 k\u0159\u00ed\u017eky composition.keysignature.sharp-4=4 k\u0159\u00ed\u017eky composition.keysignature.sharp-5=5 k\u0159\u00ed\u017ek\u016f composition.keysignature.sharp-6=6 k\u0159\u00ed\u017ek\u016f composition.keysignature.sharp-7=7 k\u0159\u00ed\u017ek\u016f composition.keysignature.flat-1=1 b\u00e9\u010dko composition.keysignature.flat-2=2 b\u00e9\u010dka composition.keysignature.flat-3=3 b\u00e9\u010dka composition.keysignature.flat-4=4 b\u00e9\u010dka composition.keysignature.flat-5=5 b\u00e9\u010dka composition.keysignature.flat-6=6 b\u00e9\u010dek composition.keysignature.flat-7=7 b\u00e9\u010dek composition.keysignature.to-the-end=Pou\u017e\u00edt toto p\u0159edznamen\u00e1n\u00ed a\u017e do konce composition.tripletfeel=Triolov\u00e9 c\u00edt\u011bn\u00ed ... composition.tripletfeel.none=\u017d\u00e1dn\u00e9 triolov\u00e9 c\u00edt\u011bn\u00ed composition.tripletfeel.eighth=Osminov\u00e9 trioly composition.tripletfeel.sixteenth=\u0160estn\u00e1ctinov\u00e9 trioly composition.tripletfeel.to-the-end=Pou\u017e\u00edt toto triolov\u00e9 c\u00edt\u011bn\u00ed a\u017e do konce track.clone=Klonovat stopu track.move-up=Posunout nahoru track.move-down=Posunout dol\u016f marker=Z\u00e1lo\u017eky marker.add=P\u0159idat z\u00e1lo\u017eku marker.list=Seznam z\u00e1lo\u017eek marker.first=Jdi na prvn\u00ed z\u00e1lo\u017eku marker.last=Jdi na posledn\u00ed z\u00e1lo\u017eku marker.next=Jdi na n\u00e1sleduj\u00edc\u00ed z\u00e1lo\u017eku marker.previous=Jdi na p\u0159edchoz\u00ed z\u00e1lo\u017eku export.tablature-enabled=Zobrazit tabulaturu export.score-enabled=Zobrazit notaci scale=Stupnice scale.list=Seznam stupnic ######################### ### Tool Bar Items ### ######################### file.items=Polo\u017eky Soubory edit.items=Polo\u017eky Editace property.items=Polo\u017eky Vlastnosti track.items=Polo\u017eky Stopa duration.items=Polo\u017eky D\u00e9lka beat.items=Polo\u017eky Noty composition.items=Polo\u017eky Skladba repeat.items=Polo\u017eky Opakovat transport.items=Polo\u017eky P\u0159ehr\u00e1va\u010d marker.items=Polo\u017eky Z\u00e1lo\u017eek insert.items=Polo\u017eky Vkl\u00e1d\u00e1n\u00ed layout.items=Polo\u017eky Rozlo\u017een\u00ed view.items=Polo\u017eky Vzhled effect.items=Polo\u017eky Efekt\u016f dynamic.items=Polo\u017eky Dynamika ######################### ###Key Binding Actions### ######################### action.file.new=Nov\u00fd soubor action.file.open=Otev\u0159\u00edt soubor action.file.save=Ulo\u017eit action.file.save-as=Ulo\u017eit jako... action.file.print=Tisk action.file.print-preview=N\u00e1hled tisku action.edit.undo=Zp\u011bt action.edit.redo=Vp\u0159ed action.composition.change-time-signature=Zm\u011bnit \u010dasov\u00e1n\u00ed skladby action.composition.change-tempo=Zm\u011bnit tempo action.composition.change-info=Zm\u011bnit informace o skladb\u011b action.composition.change-clef=Zm\u011bnit kl\u00ed\u010d action.composition.change-key-signature=Zm\u011bnit p\u0159edznamen\u00e1n\u00ed action.view.layout-set-page=Zobrazit rozvr\u017een\u00ed str\u00e1nky action.view.layout-set-linear=Zobrazit line\u00e1rn\u00ed rozvr\u017een\u00ed action.view.layout-set-multitrack=Zobrazit v\u00edcestop\u00e9 rozvr\u017een\u00ed action.view.layout-set-score-enabled=Zobrazit notaci action.view.show-fretboard=Zobrazit hmatn\u00edk action.view.show-piano=Zobrazit klaviaturu action.view.show-mixer=Zobrazit mix\u00e9r action.view.show-transport=Zobrazit transport action.track.add=P\u0159idat stopu action.track.remove=Odebrat stopu action.track.clone=Klonovat stopu action.track.go-first=J\u00edt na prvn\u00ed stopu action.track.go-last=J\u00edt na posledn\u00ed stopu action.track.go-next=J\u00edt na n\u00e1sleduj\u00edc\u00ed stopu action.track.go-previous=J\u00edt na p\u0159edchoz\u00ed stopu action.track.lyrics=Editovat text p\u00edsn\u011b action.track.properties=Zm\u011bnit vlastnosti stopy action.measure.add=P\u0159idat takt action.measure.remove=Odebrat takt action.measure.copy=Kop\u00edrovat takt action.measure.paste=Vlo\u017eit takt action.measure.clean=Vy\u010distit takt action.measure.go-first=J\u00edt na prvn\u00ed takt action.measure.go-last=J\u00edt na posledn\u00ed takt action.measure.go-next=J\u00edt na n\u00e1slednuj\u00edc\u00ed takt action.measure.go-previous=J\u00edt na p\u0159edchoz\u00ed takt action.note.general.clean-beat=\u010cist\u00e1 doba action.note.general.decrement-semitone=O p\u016flt\u00f3n dol\u016f action.note.general.increment-semitone=O p\u016flt\u00f3n nahoru action.note.general.shift-down=Posunout dol\u016f action.note.general.shift-up=Posunout nahoru action.note.general.tied=P\u0159idat/Odebrat v\u00e1zanou notu action.note.duration.change-dotted=P\u0159idat/Odebrat te\u010dku action.note.duration.change-double-dotted=P\u0159idat/Odebrat dvoj\u00ed te\u010dku action.note.duration.change-division-type=P\u0159idat/Odebrat n-olu action.note.effect.change-vibrato=P\u0159idat/Odebrat Vibrato action.note.effect.change-bend=P\u0159idat/Odebrat vyta\u017een\u00ed action.note.effect.change-slide=P\u0159idat/Odebrat skluz action.note.effect.change-hammer=P\u0159idat/Odebrat p\u0159\u00edraz/odtrh action.note.effect.change-accentuated=P\u0159idat/Odebrat akcent action.note.effect.change-dead=P\u0159idat/Odebrat zatlumenou notu action.note.effect.change-fade-in=P\u0159idat/Odebrat fade in action.note.effect.change-ghost=P\u0159idat/Odebrat n\u00e1znak action.note.effect.change-grace=P\u0159idat/Odebrat p\u0159\u00edraz action.note.effect.change-harmonic=P\u0159idat/Odebrat fla\u017eolet action.note.effect.change-heavy-accentuated=P\u0159idat/Odebrat siln\u00fd akcent action.note.effect.change-palm-mute=P\u0159idat/Odebrat tlumen\u00ed z\u00e1p\u011bst\u00edm action.note.effect.change-popping=P\u0159idat/Odebrat trhnut\u00ed action.note.effect.change-slapping=P\u0159idat/Odebrat slap action.note.effect.change-staccato=P\u0159idat/Odebrat staccato action.note.effect.change-tapping=P\u0159idat/Odebrat tapping action.note.effect.change-tremolo-bar=P\u0159idat/Odebrat tremolo action.note.effect.change-tremolo-picking=P\u0159idat/Odebrat soustavn\u00e9 tremolo action.note.effect.change-trill=P\u0159idat/Odebrat trylek action.insert.open-repeat=Za\u010d\u00e1tek repetice action.insert.close-repeat=Konec repetice action.insert.chord=Vlo\u017eit akord action.transport.play=P\u0159ehr\u00e1t skladbu action.transport.stop=Stop p\u0159ehr\u00e1v\u00e1n\u00ed tuxguitar-src-1.2/TuxGuitar/share/lang/messages_de.properties0000644000175000017500000004337411273045225024113 0ustar julianjulianes=Spanish en=English fr=French pl=Polish de=Deutsch pt=Portuguese ok=Ok cancel=Abbruch yes=Ja no=Nein add=Hinzuf\u00FCgen remove=Entfernen save=Speichern exit=Beenden color=Farbe title=Titel edit=Bearbeiten go=Start error=Fehler warning=Warnung plugins=Plugins choose=Ausw\u00E4hlen options=Optionen defaults=Standardwerte clean=Aufr\u00E4umen rename=Umbenennen fret=Bund position=Position tuxguitar.title=Tux-Guitar file=Datei file.new=Neu file.open=\u00D6ffnen file.save=Speichern file.save-as=Speichern als file.exit=Beenden file.export=Exportieren file.export-midi=Export als Midi file.export-pdf=Export als PDF file.print=Drucken file.print-preview=Druckvorschau file.import=Importieren file.import-midi=Midi importieren file.export-ascii=ASCII exportieren file.history=Zuletzt ge\u00F6ffnete Dateien file.overwrite-question=Diese Datei existiert bereits. soll sie \u00FCberschrieben werden? edit.undo=R\u00FCckg\u00E4ngig edit.redo=Wiederholen edit.copy=Kopieren edit.from=aus edit.to=nach edit.all-tracks=Alle Tracks edit.paste=Einf\u00FCgen edit.paste.replace-mode=Einf\u00FCgen im aktuellen Takt edit.paste.insert-mode=einf\u00FCgen in neuen Takt edit.delete=L\u00F6schen edit.cut=Ausschneiden edit.menu=Editieren edit.mouse-mode-selection=Selektionsmodus edit.mouse-mode-edition=Partitureditor Modus edit.not-natural-key=Erh\u00F6ht/Vermindert Modus view=Ansicht view.layout=Layout view.layout.page=Seitenlayout view.layout.linear=Lineares Layout view.layout.multitrack=Mehrspur view.layout.score-enabled=Partitur anzeigen view.show-transport=Transportfenster anzeigen view.show-mixer=Zeige Mixer view.show-piano=Zeige Klaviatur view.show-fretboard=Zeige Griffbrett fretboard.right-mode=Rechtsh\u00E4nder fretboard.left-mode=Linksh\u00E4nder composition=Komposition composition.timesignature=Zeit Signatur composition.timesignature.Numerator=Numerator composition.timesignature.denominator=Denominator composition.timesignature.to-the-end=Zum Ende composition.tempo=Tempo composition.tempo-percent=Prozent composition.properties=Eigenschaften composition.name=Name composition.artist=Interpret composition.album=Album composition.author=Autor composition.tempo.invalid=Falsches Tempo composition.clef=Notenschl\u00FCssel composition.clef.treble=H\u00F6hen composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alt composition.clef.to-the-end=Diesen Schl\u00FCssel am Ende hinzuf\u00FCgen? composition.keysignature=Tonartenschl\u00FCssel composition.keysignature.natural=Nat\u00FCrlich composition.keysignature.sharp-1=1 Erh\u00F6hungszeichen composition.keysignature.sharp-2=2 Erh\u00F6hungszeichen composition.keysignature.sharp-3=3 Erh\u00F6hungszeichen composition.keysignature.sharp-4=4 Erh\u00F6hungszeichen composition.keysignature.sharp-5=5 Erh\u00F6hungszeichen composition.keysignature.sharp-6=6 Erh\u00F6hungszeichen composition.keysignature.sharp-7=7 Erh\u00F6hungszeichen composition.keysignature.flat-1=1 Verminderungszeichen composition.keysignature.flat-2=2 Verminderungszeichen composition.keysignature.flat-3=3 Verminderungszeichen composition.keysignature.flat-4=4 Verminderungszeichen composition.keysignature.flat-5=5 Verminderungszeichen composition.keysignature.flat-6=6 Verminderungszeichen composition.keysignature.flat-7=7 Verminderungszeichen composition.keysignature.to-the-end=Diesen Tonartenschl\u00FCssel am Ende hinzuf\u00FCgen? composition.tripletfeel=Triplet Gef\u00FChl composition.tripletfeel.none=Kein Triplet Gef\u00FChl composition.tripletfeel.eighth=Triplet 8el composition.tripletfeel.sixteenth=Triplet 16tel composition.tripletfeel.to-the-end=Dieses Triplet Gef\u00FChl am Ende hinzuf\u00FCgen ? help=Hilfe help.help=Hilfe help.about=\u00DCber dieses Programm mixer.volume=Lautst\u00E4rke mixer.track.solo=Solo mixer.track.mute=Stumm mixer.channel.volume=Lautst\u00E4rke mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balance mixer.channel.free=Frei mixer.channel.link=Verbindung track=Spur track.number=Nr. track.name=Name track.color=Farbe track.first=Erste Spur track.last=Letzte Spur track.previous=Vorhergehende Spur track.next=N\u00E4chste Spur track.add=Spur hinzuf\u00FCgen track.remove=Spur entfernen track.instrument=Instrument track.instrument.empty=MIDI-Instrumentalbank nicht gefunden, bitte tuxguitar mit der lokalen Java Version neu\u00FCbersetzen. track.properties=Eigenschaften track.properties.general=Allgeimenes track.name.default-percussion-name=Percussions track.clone=Spur klonen track.move-up=Aufw\u00E4rts bewegen track.move-down=Abw\u00E4rts bewegen track.lyrics=Lyrics lyric.editor=Lyrics Editor measure=Takt measure.first=Erster Takt measure.last=Letzter Takt measure.previous=Vorhergehender Takt measure.next=N\u00E4chster Takt measure.add=Takt hinzuf\u00FCgen measure.add-before-current-position=Takt vor aktueller Position hinzuf\u00FCgen measure.add-after-current-position=Takt nach aktueller Position hinzuf\u00FCgen measure.add-at-end=Takt am Ende hinzuf\u00FCgen measure.clean=Takt leeren measure.remove=Takt entfernen measure.copy=Takt kopieren measure.paste=Takt einf\u00FCgen beat=Note beat.clean=Schlag leeren note.tiednote=Tied Note note.deadnote=Dead Note note.semitone-up=Halbton erh\u00F6hen note.semitone-down=Halbton vermindern note.shift-up=Schiebe nach oben note.shift-down=Schiebe nach unten duration=Schlagl\u00E4nge duration.whole=Ganz duration.half=Halb duration.quarter=Viertel duration.eighth=Achtel duration.sixteenth=Sechzehntel duration.thirtysecond=32-el duration.sixtyfourth=64-el duration.dotted=Punktiert duration.doubledotted=Doppelt punktiert duration.division-type=Tupleto chord=Akkord chord.name=Akkordname chord.custom.name-empty-error=Akkordname kann nicht leer sein! chord.custom.name-exist-error=Akkordname existiert bereits. dynamic=Dynamisch dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Effekte effects.vibrato=Vibrato effects.bend=Bending effects.deadnote=Dead Note effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Leiste effects.tremolo-bar-editor=Tremolo Leisteneditor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=L\u00F6sen aufw\u00E4rts effects.tremolo-bar.release-down=L\u00F6sen abw\u00E4rts effects.tremolo-bar.inverted-dip=Invertes Dip effects.tremolo-bar.return=Zur\u00FCckkehren effects.ghostnote=Geisterote effects.accentuatednote=Akzentuierte Note effects.heavyaccentuatednote=Stark aktzentuierte Note effects.harmonic=harmonisch effects.grace=Grace Note effects.grace-editor=Grace Noten Editor effects.grace.before-beat=Vor dem Schlag effects.grace.on-beat=Auf dem Schlag effects.grace.transition=Transition effects.grace.transition-none=keine effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Tremolo Picking Editor effects.palm-mute=abged\u00E4mpft effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Harmonie Editor effects.harmonic.type-of-harmonic=Harnmonieart effects.harmonic.natural=Nat\u00FCrlichhe Harmonie effects.harmonic.artificial=K\u00FCnstliche Harmonie effects.harmonic.artificial.key-offset=Schl\u00FCsselversatz effects.harmonic.tapped=getappte Harmonie effects.harmonic.tapped.left-hand=Linke Hand effects.harmonic.tapped.right-hand=Rechte Hand effects.harmonic.pinch=gepinchte Harmonie effects.harmonic.semi=Semiharmonie bend.editor=Bending Editor bend.bend=Bending bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Wiedergabe transport.start=Start transport.stop=Stop repeat.open=Wiederholung er\u00F6ffnen repeat.close=Wiederholung abschliessen repetitions=Wiederholungen repeat.number-of-repetitions=Anzahl Wiederholungen insert.chord=Akkord einf\u00FCgen chord.editor=Akkordeditor instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Percussionspur tuning=Stimmung tuning.strings=Saiten tuning.offset=Offset language=Sprache choose-color=Bitte eine Farbe ausw\u00E4hlen: settings=Einstellungen settings.config=tuxguitar konfigurieren settings.config.main=Allgemein settings.config.main.window-title=Fenster Titel settings.config.main.window-title.help=Die folgenden Variablen werden im Fenstertitel ersetzt: settings.config.main.window-title.var.description.appname=Diese Variable repr\u00E4sentiert den Applikationsnamen: TuxGuitar settings.config.main.window-title.var.description.appversion=Diese Variable repr\u00E4sentiert die Versionsnummer settings.config.main.window-title.var.description.filename=Diese Variable repr\u00E4sentiert den offenen Dateinamen settings.config.main.window-title.var.description.filepath=Diese Variable repr\u00E4sentiert den Pfad zur offenen Datei settings.config.main.window-title.var.description.songname=Diese Variable repr\u00E4sentiert den Songnamen settings.config.main.window-title.var.description.songauthor=Diese Variable repr\u00E4sentiert den Autor des Songs settings.config.main.window-title.var.description.songalbum=Diese Variable repr\u00E4sentiert das Album des Songs settings.config.main.window-title.var.description.songartist=Diese Variable repr\u00E4sentiert den Interpreten des Songs settings.config.main.options=Optionen settings.config.main.splash-enabled=Er\u00F6ffnungsbildschirm beim Start anzeigen settings.config.view=ansicht settings.config.view.mode=Layoutansicht settings.config.view.size=Fenstergr\u00F6sse settings.config.view.size.maximized=Maximal settings.config.view.size.width=Breite settings.config.view.size.height=H\u00F6he settings.config.language=Sprache settings.config.language.choose=Bitte eine Sprache ausw\u00E4hlen: settings.config.styles=Darstellungsstil settings.config.styles.font.default=Standardschriftart settings.config.styles.font.note=Notenschriftart settings.config.styles.font.time-signature=Zeitschl\u00FCssel Schriftart settings.config.styles.font.printer-default=Standard Druckerschriftart settings.config.styles.font.printer-note=Noten Druckerschriftart settings.config.styles.font.printer-time-signature=Drucker Signaturschriftart settings.config.styles.color.score-note=Partitur Notenfarbe settings.config.styles.color.tab-note=Tabulatur Notenfarbe settings.config.styles.color.play-note=Gespielte Notenfarbe settings.config.apply-changes-question=Sollen die \u00C4nderungen jetzt angewendet werden ? settings.config.styles=Styles settings.config.styles.font.default=Standard Schriftart settings.config.styles.font.note=Notenschriftart settings.config.styles.font.time-signature=Z\u00E4hlzeitsignatur Schriftart settings.config.styles.font.printer-default=Drucker Standardschriftart settings.config.styles.font.printer-note=Drucker Notenschriftart settings.config.styles.font.printer-time-signature=Drucker Z\u00E4hlzeitsignaturschriftart settings.config.styles.color.score-note=Notenfarbe Partitur settings.config.styles.color.tab-note=Notenfarbe Tabulatur settings.config.styles.color.play-note=Notenfarbe angespielt settings.config.styles.color.lines=Horizontallinienfarbe settings.config.toolbars=Werkzeugleisten settings.config.apply-changes-question=Wollen Sie die \u00C4nderungen jetzt anwenden ? settings.config.sound=Sound settings.config.sound.soundbank=Soundbank settings.config.sound.default-soundbank=Standardsoundbank benutzen settings.config.sound.custom-soundbank=Eigene Soundbank benutzen settings.config.sound.soundbank-restart-message=Sie m\u00FCssen TuxGuitar neustarten, um die \u00C4nderungen zu aktivieren. soundbank.error=Soundbank Fehler soundbank.error.unavailable=Fehler: Soundbank nicht vorhanden. soundbank.error.custom=\u00D6ffnen der eigenen Soundbank fehlgeschlagen. settings.keybindings=Tastaturbelegung key-bindings-editor=Tastaturbelegunseditor key-bindings-editor-action-select=Aktion ausw\u00E4hlen: key-bindings-editor-action-column=Aktionen key-bindings-editor-shortcut-column=Tasten key-bindings-editor-push-a-key=Bitte gew\u00FCnschte Taste dr\u00FCcken key-bindings-editor-save-question=Es gibt ungesicherte \u00C4nderungen, sollen diese verworfen werden? key-bindings-editor-reserved-title=Reservierte Taste key-bindings-editor-reserved-message=Diese Tastenkombination ist bereits belegt. key-bindings-editor-override=Diese Tastenkombination ist bereits belegt. Trotzdem benutzen ? print.print=Drucken print.dialog=Drucken print.service=Service print.service.name=Name print.service.status=Status print.service.type=Typ print.service.info=Info print.range=Seitenbereich print.range.all-pages=Alle print.range.pages=Seiten print.range.pages-to=bis print.copies=Kopien print.copies-number=Anzahl Kopien print.print-to-file=In Datei drucken print.file-chooser=Ausw\u00E4hlen print-header.default-song-name=Unbenannt print-header.default-song-author=Anonymer Autor print.preview=Druckvorschau marker=Markierung marker.add=Markierung hinzuf\u00FCgen marker.list=Markierungen zeigen marker.first=Zur ersten Markierung marker.last=Zur letzten Markierung marker.next=Zur n\u00E4chsten Markierung marker.previous=Zur vorhergehenden Markierung export.tablature-enabled=Zeige Tablatur export.score-enabled=Zeige Partitur scale=Skalierung scale.list=Skalierungsliste ######################### ### Tool Bar Items ### ######################### file.items=Dateiwerkzeuge edit.items=\u00C4nderungswerkzeuge property.items=Eigenschaftswerkzeuge track.items=Spurwerkzeuge duration.items=L\u00E4ngenwerkzeuge beat.items=Notenwerkzeuge composition.items=Kompositionswerkzeuge repeat.items=Wiederholungswerkzeuge transport.items=Kontrollwerkzeuge marker.items=Markierungswerkzeuge insert.items=Einf\u00FCgungswerkzeuge layout.items=Layoutwerkzeuge view.items=Anzeigewerkzeuge effect.items=Effektwerkzeuge dynamic.items=Dynamikwerkzeuge ######################### ###Key Binding Actions### ######################### action.file.new=Neue Datei action.file.open=Datei \u00F6ffnen action.file.save-as=Speichern Als action.file.save=Speichern action.file.print=Drucken action.file.print-preview=Druckvorschau action.edit.undo=R\u00FCckg\u00E4ngig action.edit.redo=Wiederholen action.composition.change-tempo=Tempo wechseln action.composition.change-time-signature=Z\u00E4hlzeit \u00E4ndern action.composition.change-key-signature=Tonartenschl\u00FCssel \u00E4ndern action.composition.change-clef=Notenschl\u00FCssel \u00E4ndern action.composition.change-info=Songinformationen \u00E4ndern action.view.layout-set-linear=Lieares Layout anzeigen action.view.layout-set-page=Seitenlayout anzeigen action.view.layout-set-score-enabled=Partituransicht action.view.layout-set-multitrack=Multitrack Layout anzeigen action.view.show-transport=Transportfenster anzeigen action.view.show-fretboard=Griffbrett zeigen action.view.show-piano=Zeige Klaviatur action.view.show-mixer=Mixer anzeigen action.track.add=Spur hinzuf\u00FCgen action.track.remove=Spur entfernen action.track.clone=Spur klonen action.track.go-first=Gehe zur ersten Spur action.track.go-next=Gehe zum n\u00E4chsten Track action.track.go-previous=Gehe zur vorhergehenden Spur action.track.go-last=Gehe zur letzten Spur action.track.lyrics=Editiere Lyrics action.track.properties=Spureigenschaften ver\u00E4ndern action.measure.add=Takt hinzuf\u00FCgen action.measure.remove=Takt entfernen action.measure.copy=Takt kopieren action.measure.paste=Takt einf\u00FCgen action.measure.clean=Takt leeren action.measure.go-first=Gehe zum ersten Takt action.measure.go-last=Gehe zum letzten Takt action.measure.go-previous=Gehe zum vorhergehenden Takt action.measure.go-next=Gehe zum n\u00E4chsten Takt action.note.general.clean-beat=Schlag leeren action.note.general.decrement-semitone=Halbton vermindern action.note.general.increment-semitone=Halbton erh\u00F6hen action.note.general.shift-down=Nach oben verschieben action.note.general.shift-up=Nach unten verschieben action.note.general.tied=VErbindung hinzuf\u00FCgen/entfernen action.note.duration.change-division-type=Tupleto hinzuf\u00FCgen/entfernen action.note.duration.change-dotted=Punktierug hinzuf\u00FCgen/entfernen action.note.duration.change-double-dotted=Doppelpunktierung hinzuf\u00FCgen/entfernen action.note.effect.change-vibrato=Vibrato hinzuf\u00FCgen/entfernen action.note.effect.change-hammer=Hammer-on/pull-off hinzuf\u00FCgen/entfernen action.note.effect.change-bend=Bending hinzuf\u00FCgen/entfernen action.note.effect.change-slide=Slide hinzuf\u00FCgen/entfernen action.note.effect.change-accentuated=Aktzentuierung hinzuf\u00FCgen/entfernen action.note.effect.change-dead=Tote Note hinzuf\u00FCgen/entfernen action.note.effect.change-fade-in=Fade-In hinzuf\u00FCgen/entfernen action.note.effect.change-ghost=Geisternote hinzuf\u00FCgen/entfernen action.note.effect.change-grace=Grace Note hinzuf\u00FCgen/entfernen action.note.effect.change-harmonic=Harmonie hinzuf\u00FCgen/entfernen action.note.effect.change-heavy-accentuated=Starke Akzentuierung hinzuf\u00FCgen/entfernen action.note.effect.change-palm-mute=Abstoppen hinzuf\u00FCgen/entfernen action.note.effect.change-popping=Popping hinzuf\u00FCgen/entfernen action.note.effect.change-slapping=Slapping hinzuf\u00FCgen/entfernen action.note.effect.change-staccato=Staccato hinzuf\u00FCgen/entfernen action.note.effect.change-tapping=Tapping hinzuf\u00FCgen/entfernen action.note.effect.change-tremolo-bar=Tremololeiste hinzuf\u00FCgen/entfernen action.note.effect.change-tremolo-picking=Tremolopicking hinzuf\u00FCgen/entfernen action.note.effect.change-trill=Trill hinzuf\u00FCgen/entfernen action.insert.open-repeat=Wiederholung er\u00F6ffnen action.insert.close-repeat=Wiederholung abschliessen action.insert.chord=Akkord einf\u00FCgen action.transport.play=Wiedergabe starten action.transport.stop=Wiedergabe stoppen tuxguitar-src-1.2/TuxGuitar/share/lang/messages_en.properties0000644000175000017500000005537611273045225024132 0ustar julianjulianok=Ok cancel=Cancel yes=Yes no=No add=Add edit=Edit remove=Remove save=Save exit=Exit close=Close choose=Choose color=Color title=Title go=Go warning=Warning error=Error plugins=Plugins options=Options defaults=Defaults clean=Clean rename=Rename fret=Fret position=Position name=Name author=Author version=Version description=Description info=Info configure=Configure url=URL file=File file.new=New file.open=Open file.save=Save file.save-as=Save As file.save-changes-question=The song has unsaved changes.\nDo you want to save the changes? file.exit=Exit file.export=Export file.export-midi=Export MIDI file.export-pdf=Export PDF file.print=Print file.print-preview=Print Preview file.import=Import file.import-midi=Import MIDI file.export-ascii=Export ASCII file.history=History file.open-url=Open URL file.open.error=Cannot Open: {0} file.save.error=Cannot Save: {0} file.import.error=Cannot Import: {0} file.export.error=Cannot Export: {0} file.overwrite-question=This file already exists. Do you want to overwrite it? edit.menu=Edit edit.undo=Undo edit.redo=Redo edit.copy=Copy edit.from=From edit.to=To edit.all-tracks=All Tracks edit.paste=Paste edit.paste.count=Paste Count edit.paste.replace-mode=Paste at the Current Measure edit.paste.insert-mode=Paste in new Measure edit.delete=Delete edit.cut=Cut edit.mouse-mode-selection=Selection Mode edit.mouse-mode-edition=Score Edition Mode edit.not-natural-key=Sharp/Flat mode edit.voice-1=Select Voice 1 edit.voice-2=Select Voice 2 view=View view.layout=Layout view.layout.page=Page Layout view.layout.linear=Linear layout view.layout.compact=Compact view.layout.multitrack=Multitrack view.layout.chord-style=Chord Style view.layout.chord-name=Chord Name view.layout.chord-diagram=Chord Diagram view.layout.score-enabled=Show Score view.layout.tablature-enabled=Show Tablature view.show-mixer=Show Mixer view.show-fretboard=Show Fretboard view.show-piano=Show Piano view.show-matrix=Show Matrix view.show-transport=Show Player fretboard.direction=Direction fretboard.right-mode=Right mode fretboard.left-mode=Left mode fretboard.background-color=Background Color fretboard.display-note-text=Display Note Text fretboard.display-scale-text=Display Scale Text fretboard.font=Font fretboard.fretpoint-color=Fret Color fretboard.note-color=Note Color fretboard.scale-note-color=Scale Note Color fretboard.settings=Fretboard Settings fretboard.string-color=String Color fretboard.settings.options=Options piano.editor=Piano Editor piano.natural-key-color=Natural Key Color piano.not-natural-key-color=Unnatural Key Color piano.note-color=Note Color piano.scale-note-color=Scale Note Color piano.settings=Piano Settings matrix.editor=Matrix Editor matrix.grids=Number of Grids matrix.border-color=Border Color matrix.font=Font matrix.foreground-color=Foreground Color matrix.line-color-1=Odd Row Color matrix.line-color-2=Even Row Color matrix.line-color-over=Mouse Over Row Color matrix.note-color=Note Color matrix.play-note-color=Play Note Color matrix.position-color=Position Color matrix.settings=Matrix Settings composition=Composition composition.timesignature=Time Signature composition.timesignature.Numerator=Numerator composition.timesignature.denominator=Denominator composition.timesignature.to-the-end=To the end composition.tempo=Tempo composition.tempo-percent=Percent composition.tempo.invalid=Invalid Tempo composition.tempo.start-to-end=Apply this tempo in the whole song composition.tempo.position-to-end=Apply this tempo to the end composition.tempo.position-to-next=Apply this tempo to the next tempo marker composition.properties=Properties composition.name=Name composition.artist=Artist composition.album=Album composition.author=Author composition.date=Date composition.copyright=Copyright composition.writer=Tab Creator composition.transcriber=Transcribed By composition.comments=Comments composition.tripletfeel=Triplet Feel composition.clef=Clef composition.clef.treble=Treble composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=Apply this clef to the end composition.keysignature=Key Signature composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Sharp composition.keysignature.sharp-2=2 Sharps composition.keysignature.sharp-3=3 Sharps composition.keysignature.sharp-4=4 Sharps composition.keysignature.sharp-5=5 Sharps composition.keysignature.sharp-6=6 Sharps composition.keysignature.sharp-7=7 Sharps composition.keysignature.flat-1=1 Flat composition.keysignature.flat-2=2 Flats composition.keysignature.flat-3=3 Flats composition.keysignature.flat-4=4 Flats composition.keysignature.flat-5=5 Flats composition.keysignature.flat-6=6 Flats composition.keysignature.flat-7=7 Flats composition.keysignature.to-the-end=Apply this key signature to the end composition.tripletfeel=Triplet Feel composition.tripletfeel.none=No Triplet Feel composition.tripletfeel.eighth=Triplet 8th composition.tripletfeel.sixteenth=Triplet 16th composition.tripletfeel.to-the-end=Apply this triplet feel to the end help=Help help.help=Help help.doc=Documentation help.about=About help.about.license=License help.about.authors=Authors help.about.description=Description track=Track track.number=N° track.name=Name track.color=Color track.first=First Track track.last=Last Track track.previous=Previous Track track.next=Next Track track.add=Add Track track.remove=Remove Track track.clone=Clone Track track.move-up=Move Up track.move-down=Move Down track.instrument=Instrument track.properties=Properties track.properties.general=General track.name.default-percussion-name=Percussion track.lyrics=Lyrics lyric.editor=Lyric Editor measure=Measure measure.first=First Measure measure.last=Last Measure measure.previous=Previous Measure measure.next=Next Measure measure.add=Add Measure measure.add.count=Add Count measure.add-before-current-position=Add measure before the current position measure.add-after-current-position=Add measure after the current position measure.add-at-end=Add measure at the end measure.remove=Remove Measure measure.copy=Copy Measure measure.paste=Paste Measure measure.clean=Clean Measure duration=Duration duration.whole=Whole duration.half=Half duration.quarter=Quarter duration.eighth=Eighth duration.sixteenth=Sixteenth duration.thirtysecond=Thirty-Second duration.sixtyfourth=Sixty-Fourth duration.dotted=Dotted duration.doubledotted=Double Dotted duration.division-type=Triplet dynamic=Dynamic dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Effects effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Dead Note effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Tremolo Bar Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Ghost Note effects.accentuatednote=Accentuated Note effects.heavyaccentuatednote=Heavy Accentuated Note effects.harmonic=Harmonic effects.grace=Grace Note effects.grace-editor=Grace Note Editor effects.grace.before-beat=Before beat effects.grace.on-beat=On beat effects.grace.transition=Transition effects.grace.transition-none=None effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Tremolo Picking Editor effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Harmonic Editor effects.harmonic.type-of-harmonic=Type of Harmonic effects.harmonic.natural=Natural Harmonic effects.harmonic.artificial=Artificial Harmonic effects.harmonic.artificial.key-offset=Key Offset effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=Left Hand effects.harmonic.tapped.right-hand=Right Hand effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=Semi Harmonic bend.editor=Bend Editor bend.bend=Bend bend.bend-release=Bend/Release bend.bend-release-bend=Bend/Release/Bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Player transport.start=Start transport.stop=Stop transport.pause=Pause transport.first=First transport.last=Last transport.previous=Previous transport.next=Next transport.metronome=Metronome transport.mode=Play Mode transport.mode.simple=Simple Mode transport.mode.simple.tempo-percent=Percentage of tempo transport.mode.simple.loop=Play looped transport.mode.trainer=Training Mode transport.mode.trainer.increment-description=Increment by transport.mode.loop-range=Loop Range transport.mode.loop-range.from=Play from measure transport.mode.loop-range.from-default=From the beginning transport.mode.loop-range.to=Play to measure transport.mode.loop-range.to-default=To the end transport.set-loop-start=Set loop start point transport.set-loop-end=Set loop end point mixer=Mixer mixer.volume=Gain mixer.track.solo=Solo mixer.track.mute=Mute mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.volume=Volume mixer.channel.balance=Balance mixer.channel.chorus=Chorus mixer.channel.reverb=Reverb mixer.channel.phaser=Phaser mixer.channel.tremolo=Tremolo mixer.channel.free=Free mixer.channel.link=Link repeat.open=Open Repeat repeat.close=Close Repeat repeat.alternative=Alternative Repeats repeat.alternative.editor=Edit Alternative Repeats repetitions=Repetitions repeat.number-of-repetitions=Number of Repetitions beat=Beat beat.clean=Clean Beat beat.voice.remove-unused=Remove Unused Voice beat.voice-up=Stems Up beat.voice-down=Stems Down beat.voice-auto=Auto Stems beat.stroke=Stroke beat.stroke-up=Upstroke beat.stroke-down=Downstroke beat.move-left=Move One Beat Left beat.move-right=Move One Beat Right beat.move-custom=Custom Beat Move beat.move-custom.dialog.title=Custom Move beat.move-custom.dialog.direction-tip=Move Direction beat.move-custom.dialog.move-1.tip=Major Move beat.move-custom.dialog.move-2.tip=Fine Move beat.move-custom.dialog.direction=Direction beat.move-custom.dialog.direction.right=Move To Right beat.move-custom.dialog.direction.left=Move To Left beat.move-custom.dialog.count=Count beat.move-custom.dialog.duration=Duration beat.move-custom.dialog.duration.type=Dotted/Double-Dotted beat.move-custom.dialog.duration.type.normal=None beat.move-custom.dialog.duration.division-type=Division Type beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet) note=Note note.semitone-up=Semitone Up note.semitone-down=Semitone Down note.shift-up=Shift Up note.shift-down=Shift Down note.tiednote=Tied Note note.deadnote=Dead Note insert.chord=Insert Chord chord.editor=Chord Editor chord=Chord chord.name=Name chord.bass=Bass chord.custom=Custom Chord chord.custom.name-empty-error=Chord name can not be empty. chord.custom.name-exist-error=Chord name already exists. chord.settings.tip=Custom Settings chord.settings.type=Type chord.settings.type.most-common=Most Common chord.settings.type.inversions=Inversions chord.settings.type.close-voiced=Close Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Open Chords chord.settings.chords-to-display=Chords to Display chord.settings.search-frets=Search Frets chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Percussion Track tuning=Tuning tuning.offset=Offset tuning.strings=Strings tuning.strings.transpose=Transpose afected notes. tuning.strings.transpose.try-keep-strings=Try keep notes at same string tuning.strings.transpose.apply-to-chords=Transpose Chords language=Language choose-color=Choose a color settings=Settings settings.config=Configure TuxGuitar settings.config.language=Language settings.config.language.choose=Choose Language settings.config.styles=Styles settings.config.styles.general=General Styles settings.config.styles.printer=Printer Styles settings.config.styles.font.default=Default Font settings.config.styles.font.note=Note Font settings.config.styles.font.lyric=Lyrics Font settings.config.styles.font.text=Text Font settings.config.styles.font.time-signature=Time Signature Font settings.config.styles.font.printer-default=Printer Default Font settings.config.styles.font.printer-note=Printer Note Font settings.config.styles.font.printer-time-signature=Printer Time Signature Font settings.config.styles.color.score-note=Score Note Color settings.config.styles.color.tab-note=Tab Note Color settings.config.styles.color.play-note=Play Note Color settings.config.apply-changes-question=Do you want to apply changes now? settings.config.sound=Sound settings.config.main=General settings.config.main.window-title=Window Title settings.config.main.window-title.help=The following variables will be replaced at the window title: settings.config.main.window-title.var.description.appname=This variable represents the Application Name: TuxGuitar settings.config.main.window-title.var.description.appversion=This variable represents the version of TuxGuitar. settings.config.main.window-title.var.description.filename=This variable represents the name of the opened file settings.config.main.window-title.var.description.filepath=This variable represents the path of the opened file settings.config.main.window-title.var.description.songname=This variable represents the name of the song settings.config.main.window-title.var.description.songauthor=This variable represents the author of the song settings.config.main.window-title.var.description.songalbum=This variable represents the album of the song settings.config.main.window-title.var.description.songartist=This variable represents the artist of the song settings.config.main.options=Options settings.config.main.splash-enabled=Launch splash screen on startup settings.config.main.table.auto-size.enabled=Enable Automatic Table resizing settings.config.styles.color.lines=Horizontal lines color settings.config.toolbars=Tool Bars settings.config.toolbars.tip=Customize Your ToolBars settings.config.toolbars.list=Available ToolBars settings.config.toolbars.move-up=Move Up settings.config.toolbars.move-down=Move Down settings.config.skin=Skins settings.config.skin.choose=Choose your skin settings.keybindings=Configure Key Bindings key-bindings-editor=Key Binding Editor key-bindings-editor-action-select=Select an Action key-bindings-editor-action-column=Actions key-bindings-editor-shortcut-column=Keys key-bindings-editor-push-a-key=Press a key key-bindings-editor-save-question=There are unsaved changes, do you want to exit without saving? key-bindings-editor-reserved-title=Reserved Shortcut key-bindings-editor-reserved-message=Sorry, this shortcut is reserved key-bindings-editor-override=Shortcut already in use! Are you sure you want to use it? print.print=Print print.dialog=Print print.service=Service print.service.name=Name print.service.status=Status print.service.type=Type print.service.info=Info print.range=Range print.range.all-pages=All print.range.pages=Pages print.range.pages-to=To print.copies=Copies print.copies-number=Number of copies print.print-to-file=Print to file print.file-chooser=Choose print-header.default-song-name=Untitled print-header.default-song-author=Anonymous print.preview=Print Preview print.preview.page-of=Of marker=Marker marker.add=Add Marker marker.list=List Markers marker.first=Go First Marker marker.last=Go Last Marker marker.next=Go Next Marker marker.previous=Go Previous Marker export.tablature-enabled=Show Tablature export.score-enabled=Show Score export.chord-name-enabled=Show Chord Names export.chord-diagram-enabled=Show Chord Diagrams export.black-and-white=Black And White Mode scale=Scale scale.list=Scale List text.insert=Insert Text text.editor=Text Editor text.text=Text tools=Tools tools.scale=Scale list tools.browser=Browser tools.plugins=Plugins tools.shortcuts=Shortcuts tools.settings=Settings tools.transpose=Transpose tools.transpose.semitones=Transposition Semitones tools.transpose.apply-to-track=Transpose all measures tools.transpose.apply-to-measure=Transpose only this measure tools.transpose.apply-to-all-tracks=Apply to all tracks tools.transpose.try-keep-strings=Try keep notes at same string when it's possible tools.transpose.apply-to-chords=Transpose Chords browser.dialog=Browser browser.menu.file=File browser.open=Open browser.exit=Exit browser.menu.collection=Collection browser.menu.go=Go browser.collection.select=Select Collection browser.collection.open=Open browser.collection.remove=Remove browser.collection.close=Close browser.collection.new=New browser.go-root=Home browser.go-back=Back browser.refresh=Refresh browser.factory.fs.name=File System browser.collection.fs.name=Name browser.collection.fs.path=Folder browser.collection.fs.editor-title=File System Collection browser.collection.fs.editor-tip=Choose your collection folder browser.collection.fs.invalid-path=Please, select a valid folder midi.port=MIDI Port midi.sequencer=MIDI Sequencer plugin.unknown-value=Not available. plugin.column.name=Plugin Name plugin.column.enabled=Enabled ######################### ### Tool Bar Items ### ######################### file.items=File Items edit.items=Edit Items property.items=Property Items track.items=Track Items duration.items=Duration Items beat.items=Beat Items composition.items=Composition Items repeat.items=Repeat Items transport.items=Player Items marker.items=Marker Items insert.items=Insert Items layout.items=Layout Items view.items=View Items effect.items=Effect Items dynamic.items=Dynamic Items ######################### ###Key Binding Actions### ######################### action.file.new=New File action.file.open=Open File action.file.open-url=Open URL action.file.save=Save action.file.save-as=Save As action.file.print=Print action.file.print-preview=Print Preview action.file.exit=Exit TuxGuitar action.edit.undo=Undo action.edit.redo=Redo action.edit.voice-1=Select Voice 1 action.edit.voice-2=Select Voice 2 action.composition.change-time-signature=Change Time Signature action.composition.change-tempo=Change Tempo action.composition.change-info=Change Song Information action.composition.change-clef=Change Clef action.composition.change-key-signature=Change Key Signature action.composition.change-triplet-feel=Change Triplet Feel action.view.layout-set-page=Show Page Layout action.view.layout-set-linear=Show Linear Layout action.view.layout-set-multitrack=Show Multitrack Mode action.view.layout-set-score-enabled=Show Score action.view.layout-set-tablature-enabled=Show Tablature action.view.layout-set-compact=Show Compact Mode action.view.layout-set-chord-diagram-enabled=Enable Chord Diagram action.view.layout-set-chord-name-enabled=Enable Chord Name action.view.show-fretboard=Show Fretboard action.view.show-piano=Show Piano action.view.show-matrix=Show Matrix action.view.show-mixer=Show Mixer action.view.show-transport=Show Player action.track.add=Add Track action.track.remove=Remove Track action.track.clone=Clone Track action.track.go-first=Go to first track action.track.go-last=Go to last track action.track.go-next=Go to next track action.track.go-previous=Go to previous track action.track.lyrics=Edit track lyrics action.track.properties=Change track properties action.track.move-down=Move track down action.track.move-up=Move track up action.measure.add=Add measure action.measure.remove=Remove measure action.measure.copy=Copy measure action.measure.paste=Paste measure action.measure.clean=Clean measure action.measure.go-first=Go to first measure action.measure.go-last=Go to last measure action.measure.go-next=Go to next measure action.measure.go-previous=Go to previous measure action.beat.general.remove-unused-voice=Remove Unused Voice action.beat.general.voice-up=Set Stems Up action.beat.general.voice-down=Set Stems Down action.beat.general.voice-auto=Set Auto Stems action.beat.general.set-stroke-up=Set Upstroke action.beat.general.set-stroke-down=Set Downstroke action.beat.general.move-left=Move One Beat Left action.beat.general.move-right=Move One Beat Right action.beat.general.move-custom=Custom Beat Move action.note.general.clean-beat=Clean beat action.note.general.decrement-semitone=Decrement semitone action.note.general.increment-semitone=Increment semitone action.note.general.shift-down=Shift down action.note.general.shift-up=Shift up action.note.general.tied=Add/Remove tied action.note.duration.set-whole=Set Whole Duration action.note.duration.set-half=Set Half Duration action.note.duration.set-quarter=Set Quarter Duration action.note.duration.set-eighth=Set Eighth Duration action.note.duration.set-sixteenth=Set Sixteenth Duration action.note.duration.set-thirty-second=Set Thirty Second Duration action.note.duration.set-sixty-fourth=Set Sixty Fourth Duration action.note.duration.change-dotted=Add/Remove dot action.note.duration.change-double-dotted=Add/Remove double dotted action.note.duration.change-division-type=Add/Remove triplet action.note.duration.decrement-duration=Decrement Duration action.note.duration.increment-duration=Increment Duration action.note.effect.change-vibrato=Add/Remove Vibrato action.note.effect.change-bend=Add/Remove bend action.note.effect.change-slide=Add/Remove Slide action.note.effect.change-hammer=Add/Remove hammer-on/pull-off action.note.effect.change-accentuated=Add/Remove accentuated action.note.effect.change-dead=Add/Remove dead note action.note.effect.change-fade-in=Add/Remove fade in action.note.effect.change-ghost=Add/Remove ghost action.note.effect.change-grace=Add/Remove grace action.note.effect.change-harmonic=Add/Remove harmonic action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated action.note.effect.change-palm-mute=Add/Remove palm mute action.note.effect.change-popping=Add/Remove popping action.note.effect.change-slapping=Add/Remove slapping action.note.effect.change-staccato=Add/Remove staccato action.note.effect.change-tapping=Add/Remove tapping action.note.effect.change-tremolo-bar=Add/Remove tremolo bar action.note.effect.change-tremolo-picking=Add/Remove tremolo picking action.note.effect.change-trill=Add/Remove Trill action.insert.open-repeat=Open Repeat action.insert.close-repeat=Close Repeat action.insert.repeat-alternative=Repeat Alternative action.insert.chord=Insert Chord action.insert.text=Insert Text action.marker.add=Add Marker action.marker.go-next=Go Next Marker action.marker.go-previous=Go Previous Marker action.transport.play=Play Song action.transport.stop=Stop Playing action.transport.mode=Player Mode action.transport.metronome=Metrononome action.transport.set-loop-start=Set loop start point action.transport.set-loop-end=Set loop end point action.tools.browser=Browser action.tools.transpose=Transpose Notes action.settings.configure=Settings action.help.doc=Help tuxguitar-src-1.2/TuxGuitar/share/lang/messages_es.properties0000644000175000017500000006217711273045225024134 0ustar julianjulianok=Aceptar cancel=Cancelar yes=Si no=No add=Agregar remove=Borrar save=Guardar exit=Salir close=Cerrar color=Color title=T\u00EDtulo edit=Editar go=Ir error=Error warning=Aviso plugins=Plugins choose=Seleccionar plugins=Plugins options=Opciones defaults=Predeterminados clean=Limpiar rename=Renombrar fret=Cejilla position=Posici\u00F3n info=Informaci\u00F3n name=Nombre author=Autor version=Versi\u00F3n description=Descripci\u00F3n configure=Configurar tuxguitar.title=TuxGuitar file=Archivo file.new=Nuevo file.open=Abrir file.open-url=Abrir URL file.open.error=No se pudo abrir el archivo: {0} file.save=Guardar file.save-as=Guardar Como file.save.error=No se pudo guardar el archivo: {0} file.save-changes-question=El archivo tiene cambios sin guardar.\nDesea guardar los cambios? file.exit=Salir file.export=Exportar file.export-midi=Exportar Midi file.export-pdf=Exportar PDF file.print=Imprimir file.print-preview=Vista Preliminar file.import=Importar file.import.error=No se pudo importar: {0} file.export-ascii=Exportar ASCII file.export.error=No se pudo exportar: {0} file.history=Historial file.overwrite-question=El archivo ya existe, desea reemplazarlo? edit.menu=Edici\u00F3n edit.undo=Deshacer edit.redo=Rehacer edit.copy=Copiar edit.from=Desde edit.to=Hasta edit.all-tracks=Todas las pistas edit.paste=Pegar edit.paste.count=Cantidad de pegados edit.paste.replace-mode=Pegar en el comp\u00E1s actual edit.paste.insert-mode=Pegar en nuevo comp\u00E1s edit.delete=Borrar edit.cut=Cortar edit.mouse-mode-selection=Cambiar puntero a modo de selecci\u00F3n edit.mouse-mode-edition=Cambiar puntero a modo de edici\u00F3n edit.not-natural-key=Sostenido/Bemol edit.voice-1=Seleccionar Primer Voz edit.voice-2=Seleccionar Segunda Voz view=Ver view.layout=Ver view.layout.page=Modo P\u00E1gina view.layout.linear=Modo Linear view.layout.multitrack=Multipista view.layout.compact=Modo Compacto view.layout.score-enabled=Mostrar Partitura view.layout.tablature-enabled=Mostrar Tablatura view.layout.chord-style=Estilo de Acordes view.layout.chord-name=Mostrar Nombre view.layout.chord-diagram=Mostrar Diagrama view.show-transport=Mostrar Reproductor view.show-mixer=Mostrar Mezclador view.show-piano=Mostrar Piano view.show-matrix=Mostrar Editor de Matrices view.show-fretboard=Mostrar M\u00E1stil fretboard.direction=Direcci\u00F3n fretboard.background-color=Color de fondo fretboard.font=Fuente fretboard.fretpoint-color=Color de marcadores de posici\u00F3n fretboard.note-color=Color de notas fretboard.scale-note-color=Color de notas de escala fretboard.string-color=Color de cuerdas fretboard.settings=Preferencias fretboard.settings.options=Opciones fretboard.display-note-text=Mostrar notas en modo de texto fretboard.display-scale-text=Mostrar notas de escala en modo de texto fretboard.right-mode=Hacia la derecha fretboard.left-mode=Hacia la izquierda piano.editor=Piano piano.natural-key-color=Color de teclas naturales piano.not-natural-key-color=Color de teclas Sostenido/Bemol piano.note-color=Color de notas piano.scale-note-color=Color de notas de escala piano.settings=Preferencias matrix.editor=Editor de Matrices matrix.grids=Grillas matrix.font=Fuente matrix.border-color=Color de bordes matrix.foreground-color=Color de fuente y lineas divisorias matrix.line-color-1=Color de linea #1 matrix.line-color-2=Color de linea #2 matrix.line-color-over=Color de linea seleccionada matrix.note-color=Color de notas matrix.play-note-color=Color de notas reproduciendo matrix.position-color=Color de pulso matrix.settings=Preferencias composition=Composici\u00F3n composition.timesignature=Time Signature composition.timesignature.Numerator=Numerador composition.timesignature.denominator=Denominador composition.timesignature.to-the-end=Hasta el final composition.tempo=Tiempo composition.tempo-percent=Porcentaje composition.tempo.start-to-end=Aplicar a todos los compases composition.tempo.position-to-end=Aplicar hasta el final composition.tempo.position-to-next=Aplicar hasta la pr\u00F3xima marca de tiempo composition.tempo.invalid=Tempo inv\u00E1lido composition.properties=Propiedades composition.name=Nombre composition.artist=Artista composition.album=Album composition.author=Autor composition.date=Fecha composition.copyright=Derechos de autor composition.writer=Creador composition.transcriber=Transcrito por composition.comments=Comentarios composition.clef=Clave composition.clef.treble=Treble composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=Aplicar esta clave hasta el final composition.keysignature=Armadura composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Sostenido composition.keysignature.sharp-2=2 Sostenidos composition.keysignature.sharp-3=3 Sostenidos composition.keysignature.sharp-4=4 Sostenidos composition.keysignature.sharp-5=5 Sostenidos composition.keysignature.sharp-6=6 Sostenidos composition.keysignature.sharp-7=7 Sostenidos composition.keysignature.flat-1=1 Bemol composition.keysignature.flat-2=2 Bemoles composition.keysignature.flat-3=3 Bemoles composition.keysignature.flat-4=4 Bemoles composition.keysignature.flat-5=5 Bemoles composition.keysignature.flat-6=6 Bemoles composition.keysignature.flat-7=7 Bemoles composition.keysignature.to-the-end=Aplicar esta armadura hasta el final composition.tripletfeel=Aspecto de Tresillos composition.tripletfeel.none=Aspecto normal composition.tripletfeel.eighth=Aspecto de tresillos en corcheas composition.tripletfeel.sixteenth=Aspecto de tresillos en semi-corcheas composition.tripletfeel.to-the-end=Aplicar hasta el final help=Ayuda help.help=Ayuda help.doc=Documentaci\u00F3n help.about=Acerca de help.about.license=Licencia help.about.authors=Autores help.about.description=Descripci\u00F3n mixer=Mezclador mixer.volume=Ganancia mixer.track.solo=Solo mixer.track.mute=Silencio mixer.channel.volume=Volumen mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balance mixer.channel.free=Libre mixer.channel.link=Ligado track=Pista track.number=N° track.name=Nombre track.color=Color track.first=Primera track.last=Ultima track.previous=Anterior track.next=Siguiente track.add=Agregar pista track.remove=Borrar pista track.instrument=Instrumento track.properties=Propiedades track.properties.general=General track.clone=Clonar Pista track.move-up=Mover Arriba track.move-down=Mover Abajo track.name.default-percussion-name=Percusi\u00F3n track.lyrics=Editar letras lyric.editor=Editor de letras measure=Comp\u00E1s measure.first=Primero measure.last=\u00DAltimo measure.previous=Anterior measure.next=Siguiente measure.add=Agregar comp\u00E1s measure.add.count=Cantidad de compases measure.remove=Borrar comp\u00E1s measure.copy=Copiar comp\u00E1s measure.paste=Pegar comp\u00E1s measure.clean=Limpiar comp\u00E1s measure.add-before-current-position=Agregar comp\u00E1s antes de la posici\u00F3n actual measure.add-after-current-position=Agregar comp\u00E1s despues de la posici\u00F3n actual measure.add-at-end=Agregar comp\u00E1s al final beat=Pulso beat.clean=Limpiar Pulso beat.voice.remove-unused=Eliminar la voz no utilizada beat.voice-up=Notas hacia arriba beat.voice-down=Notas hacia abajo beat.voice-auto=Direcci\u00F3n de notas automatica beat.stroke=Rasgueo beat.stroke-up=Rasgueo ascendente beat.stroke-down=Rasgueo decendente beat.move-left=Mover un pulso hacia la izquierda beat.move-right=Mover un pulso hacia la derecha beat.move-custom=Movimiento de pulso personalizado beat.move-custom.dialog.title=Movimiento de pulso personalizado beat.move-custom.dialog.direction-tip=Direcci\u00F3n del movimiento beat.move-custom.dialog.move-1.tip=Movimiento primario beat.move-custom.dialog.move-2.tip=Movimiento secundario beat.move-custom.dialog.direction=Direcci\u00F3n beat.move-custom.dialog.direction.right=Mover hacia la derecha beat.move-custom.dialog.direction.left=Mover hacia la izquierda beat.move-custom.dialog.count=Cantidad beat.move-custom.dialog.duration=Duraci\u00F3n beat.move-custom.dialog.duration.type=Puntillo/Doble-Puntillo beat.move-custom.dialog.duration.type.normal=Normal beat.move-custom.dialog.duration.division-type=Tipo de divisiones beat.move-custom.dialog.duration.division-type.normal=Normal (Tupleto) note.tiednote=Ligar Nota note.semitone-up=Subir un semitono note.semitone-down=Bajar un semitono note.shift-up=Subir una cuerda note.shift-down=Bajar una cuerda duration=Duraci\u00F3n duration.whole=Redonda duration.half=Blanca duration.quarter=Negra duration.eighth=Corchea duration.sixteenth=Semi-Corchea duration.thirtysecond=Fusa duration.sixtyfourth=Semi-Fusa duration.dotted=Puntillo duration.doubledotted=Doble Puntillo duration.division-type=Tresillo effects=Efectos effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Nota Muerta effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Tremolo Bar Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Ghost Note effects.accentuatednote=Accentuated Note effects.heavyaccentuatednote=Heavy Accentuated Note effects.harmonic=Harmonic effects.grace=Grace Note effects.grace-editor=Grace Note Editor effects.grace.before-beat=Before beat effects.grace.on-beat=On beat effects.grace.transition=Transition effects.grace.transition-none=None effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Tremolo Picking Editor effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Harmonic Editor effects.harmonic.type-of-harmonic=Type of Harmonic effects.harmonic.natural=Natural Harmonic effects.harmonic.artificial=Artificial Harmonic effects.harmonic.artificial.key-offset=Key offset effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=Left hand effects.harmonic.tapped.right-hand=Right hand effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=Semi Harmonic bend.editor=Editor de Bend bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release dynamic=Dynamic dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo insert.chord=Insertar Acorde chord.editor=Editor de Acordes chord=Acorde chord.name=Nombre chord.custom=Acorde Personalizado chord.custom.name-empty-error=El nombre del acorde es obligatorio. chord.custom.name-exist-error=Ya existe un acorde con este nombre. chord.bass=Bajo chord.settings.tip=Preferencias chord.settings.type=Tipo chord.settings.type.most-common=Most Common chord.settings.type.inversions=Inversions chord.settings.type.close-voiced=Close Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Open Chords chord.settings.chords-to-display=Acordes a mostrar chord.settings.search-frets=Trastes chord.settings.minimum-fret=M\u00EDnimo chord.settings.maximum-fret=M\u00E1ximo transport=Reproductor transport.start=Reproducir transport.pause=Pausar transport.stop=Parar transport.first=Primer Compas transport.last=\u00DAltimo Compas transport.previous=Compas Anterior transport.next=Siguiente Compas transport.mode=Modo de Reproducci\u00F3n transport.mode.simple=Modo Normal transport.mode.simple.tempo-percent=Porcentaje de tiempo transport.mode.simple.loop=Repetir infinitamente transport.mode.trainer=Modo de Entrenamiento transport.mode.trainer.increment-description=Incrementar porcentaje transport.mode.loop-range=Rango de Repeticiones transport.mode.loop-range.from=Reproducir desde el comp\u00E1s transport.mode.loop-range.from-default=Desde el principio transport.mode.loop-range.to=Reproducir hasta el comp\u00E1s transport.mode.loop-range.to-default=Hasta el final transport.set-loop-start=Marcar inicio de repetici\u00F3n transport.set-loop-end=Marcar final de repetici\u00F3n repetitions=Repeticiones repeat.open=Abrir Repetici\u00F3n repeat.close=Cerrar Repetici\u00F3n repeat.number-of-repetitions=N\u00FAmero de repeticiones repeat.alternative=Repetici\u00F3n Alternativa repeat.alternative.editor=Editar Repetici\u00F3n Alternativa instrument=Instrumento instrument.instrument=Instrumento instrument.percussion-track=Pista de percusi\u00F3n tuning=Afinaci\u00F3n tuning.offset=Offset tuning.strings=Cuerdas tuning.strings.transpose=Transponer notas afectadas tuning.strings.transpose.try-keep-strings=Mantener notas en la misma cuerda si es posible tuning.strings.transpose.apply-to-chords=Transponer acordes language=Idioma choose-color=Seleccione un color settings=Opciones settings.config=Configurar TuxGuitar settings.config.main=General settings.config.main.window-title=T\u00EDtulo de la ventana settings.config.main.window-title.help=Las siguientes variables seran reemplazadas en el t\u00EDtulo: settings.config.main.window-title.var.description.appname=Representa el nombre de la aplicaci\u00F3n: TuxGuitar. settings.config.main.window-title.var.description.appversion=Representa la versi\u00F3n actual de tuxguitar. settings.config.main.window-title.var.description.filename=Representa el nombre del archivo que se esta editando. settings.config.main.window-title.var.description.filepath=Representa la ruta del archivo que se esta editando. settings.config.main.window-title.var.description.songname=Representa el nombre de la canci\u00F3n actual. settings.config.main.window-title.var.description.songauthor=Representa el autor de la canci\u00F3n actual. settings.config.main.window-title.var.description.songalbum=Representa el album de la canci\u00F3n actual. settings.config.main.window-title.var.description.songartist=Representa el artista de la canci\u00F3n actual. settings.config.main.options=Opciones settings.config.main.splash-enabled=Mostrar el splash al inicio. settings.config.main.table.auto-size.enabled=Ajustar autom\u00E1ticamente el tama\u00F1o de la previsualizaci\u00F3n de pistas settings.config.view=Vista settings.config.view.mode=Modo de vista settings.config.view.size=Ajustes de la ventana settings.config.view.size.maximized=Maximizada settings.config.view.size.width=Ancho settings.config.view.size.height=Alto settings.config.language=Idioma settings.config.language.choose=Seleccione su idioma settings.config.styles=Estilos settings.config.styles.general=Estilos Generales settings.config.styles.font.default=Fuente por Defecto settings.config.styles.font.note=Fuente de Notas settings.config.styles.font.time-signature=Fuente de Time Signature settings.config.styles.font.lyric=Fuente de Letras settings.config.styles.font.text=Fuente de Textos settings.config.styles.color.score-note=Color de Notas de Partitura settings.config.styles.color.tab-note=Color de Notas de Tablatura settings.config.styles.color.play-note=Color de Notas en Reproduccion settings.config.styles.color.lines=Color de Lineas Divisorias settings.config.styles.printer=Estilos de Impresion settings.config.styles.font.printer-default=Fuente por Defecto settings.config.styles.font.printer-note=Fuente de Notas settings.config.styles.font.printer-time-signature=Fuente de Time Signature settings.config.apply-changes-question=Desea aplicar los cambios ahora? settings.config.sound=Sonido settings.config.skin=Tema de Iconos settings.config.skin.choose=Seleccione su Tema de Iconos settings.config.toolbars=Barra de Herramientas settings.config.toolbars.tip=Personalice su Barra de Herramientas settings.config.toolbars.list=Herramientas Disponibles settings.config.toolbars.move-up=Mover Arriba settings.config.toolbars.move-down=Mover Abajo settings.keybindings=Configurar Teclas key-bindings-editor=Editor de Teclas key-bindings-editor-action-select=Seleccione Una Acci\u00F3n key-bindings-editor-action-column=Acciones key-bindings-editor-shortcut-column=Teclas key-bindings-editor-push-a-key=Presione una Tecla key-bindings-editor-save-question=Se encontraron cambios sin guardar, desea salir de todos modos? key-bindings-editor-reserved-title=Tecla Reservada key-bindings-editor-reserved-message=Lo siento, esta es una tecla reservada del sistema key-bindings-editor-override=Ya existe una acci\u00F3n para estas teclas, desea sobreescibirla? print.print=Imprimir print.dialog=Imprimir print.service=Servicio print.service.name=Nombre print.service.status=Estado print.service.type=Tipo print.service.info=Informaci\u00F3n print.range=Rango print.range.all-pages=Todas las p\u00E1ginas print.range.pages=P\u00E1ginas print.range.pages-to=A print.copies=Copias print.copies-number=Numero de copias print.print-to-file=Imprimir a archivo print.file-chooser=Examinar print-header.default-song-name=Sin T\u00EDtulo print-header.default-song-author=An\u00F3nimo print.preview=Vista Preliminar marker=Marca marker.add=Agregar Marca marker.list=Mostrar Marcas marker.first=Primera marker.last=Ultima marker.next=Siguiente marker.previous=Anterior export.tablature-enabled=Mostrar tablatura export.score-enabled=Mostrar partitura export.black-and-white=Modo Blanco y Negro scale=Escala scale.list=Lista de escalas text.insert=Insertar Texto text.editor=Editor de Texto text.text=Texto tools=Herramientas tools.scale=Lista de Escalas tools.browser=Explorador de Canciones tools.plugins=Configurar Plugins tools.shortcuts=Atajos del Teclado tools.settings=Preferencias tools.transpose=Transponer tools.transpose.semitones=Transponer semitonos tools.transpose.apply-to-track=Transponer todos los compases tools.transpose.apply-to-measure=Transponer solo este compas tools.transpose.apply-to-all-tracks=Aplicar a todas las pistas tools.transpose.try-keep-strings=Mantener notas en la misma cuerda si es posible tools.transpose.apply-to-chords=Transponer acordes browser.dialog=Explorador de Canciones browser.menu.file=Archivo browser.open=Abrir browser.exit=Salir browser.menu.collection=Colecci\u00F3n browser.menu.go=Ir browser.collection.select=Seleccionar Colecci\u00F3n browser.collection.open=Arbir Colecci\u00F3n browser.collection.remove=Eliminar Colecci\u00F3n browser.collection.close=Cerrar Colecci\u00F3n browser.collection.new=A\u00F1adir Colecci\u00F3n browser.go-root=Inicio browser.go-back=Volver browser.refresh=Actualizar browser.factory.fs.name=Sistema de Archivos Local browser.collection.fs.name=Nombre browser.collection.fs.path=Ubicaci\u00F3n browser.collection.fs.editor-title=Colecci\u00F3n de Archivos Locales browser.collection.fs.editor-tip=Seleccione una Carpeta browser.collection.fs.invalid-path=La carpeta seleccionada es inv\u00E1lida midi.port=Puerto MIDI midi.sequencer=Secuenciador MIDI plugin.unknown-value=No Disponible plugin.column.name=Nombre del Plugin plugin.column.enabled=Activo ######################### ### Tool Bar Items ### ######################### file.items=Herramientas de archivo edit.items=Herramientas de edici\u00F3n property.items=Propiedades de canci\u00F3n track.items=Herramientas de pistas duration.items=Duraciones beat.items=Herramientas de pulso composition.items=Herramientas de composici\u00F3n transport.items=Acciones de reproducci\u00F3n marker.items=Acciones de marcas layout.items=vista de modos view.items=vista de componentes effect.items=Effectos dynamic.items=Dynamics ######################### ###Key Binding Actions### ######################### action.file.new=Nuevo archivo action.file.open=Abrir archivo action.file.open-url=Abrir URL action.file.save=Guardar action.file.save-as=Guardar como action.file.print=Imprimir action.file.print-preview=Vista Preliminar action.file.exit=Cerrar Aplicaci\u00F3n action.edit.undo=Deshacer action.edit.redo=Rehacer action.edit.voice-1=Seleccionar Primer Voz action.edit.voice-2=Seleccionar Segunda Voz action.composition.change-time-signature=Cambiar time-signature action.composition.change-tempo=Cambiar tiempo action.composition.change-info=Cambiar informaci\u00F3n de la canci\u00F3n action.composition.change-clef=Cambiar clave action.composition.change-key-signature=Cambiar armadura action.composition.change-triplet-feel=Aspecto de tresillos action.view.layout-set-page=Ver modo p\u00E1gina action.view.layout-set-linear=Ver modo linear action.view.layout-set-multitrack=Ver modo multipista action.view.layout-set-compact=Ver Modo compacto action.view.layout-set-score-enabled=Mostrar partitura action.view.layout-set-tablature-enabled=Mostrar tablatura action.view.layout-set-chord-diagram-enabled=Mostrar diagrama de acordes action.view.layout-set-chord-name-enabled=Mostrar nombre de acordes action.view.show-fretboard=Mostrar m\u00E1stil action.view.show-piano=Mostrar piano action.view.show-matrix=Mostrar Editor de Matrices action.view.show-mixer=Mostrar mezclador de sonidos action.view.show-transport=Mostrar Reproductor action.track.add=Insertar Pista action.track.remove=Borrar pista action.track.clone=Clonar Pista action.track.go-first=Ir a la primer pista action.track.go-last=Ir a la \u00FAltima pista action.track.go-next=Ir a la siguiente pista action.track.go-previous=Ir a la pista anterior action.track.move-down=Mover Abajo action.track.move-up=Mover Arriba action.track.lyrics=Editar letras action.track.properties=Editar propiedades de la pista action.measure.add=Agregar Comp\u00E1s action.measure.remove=Borrar comp\u00E1s action.measure.copy=Copiar comp\u00E1s action.measure.paste=Pegar comp\u00E1s action.measure.clean=Limpiar comp\u00E1s action.measure.go-first=Ir al primer comp\u00E1s action.measure.go-last=Ir al \u00FAltimo comp\u00E1s action.measure.go-next=Ir al siguiente comp\u00E1s action.measure.go-previous=Ir al comp\u00E1s anterior action.beat.general.remove-unused-voice=Eliminar la voz no utilizada action.beat.general.voice-up=Notas hacia arriba action.beat.general.voice-down=Notas hacia abajo action.beat.general.voice-auto=Direcci\u00F3n de notas automatica action.beat.general.set-stroke-up=Rasgueo ascendente action.beat.general.set-stroke-down=Rasgueo decendente action.beat.general.move-left=Mover un pulso hacia la izquierda action.beat.general.move-right=Mover un pulso hacia la derecha action.beat.general.move-custom=Movimiento de pulso personalizado action.note.general.clean-beat=Limpiar pulso action.note.general.decrement-semitone=Bajar un semitono action.note.general.increment-semitone=Subir un semitono action.note.general.shift-down=Bajar una cuerda action.note.general.shift-up=Subir una cuerda action.note.general.tied=Agregar/Quitar ligadura action.note.duration.change-dotted=Agregar/Quitar puntillo action.note.duration.change-double-dotted=Agregar/Quitar doble puntillo action.note.duration.change-division-type=Agregar/Quitar tresillo action.note.duration.set-whole=Asignar duraci\u00F3n de redonda action.note.duration.set-half=Asignar duraci\u00F3n de blanca action.note.duration.set-quarter=Asignar duraci\u00F3n de negra action.note.duration.set-eighth=Asignar duraci\u00F3n de corchea action.note.duration.set-sixteenth=Asignar duraci\u00F3n de semi-Corchea action.note.duration.set-thirty-second=Asignar duraci\u00F3n de fusa action.note.duration.set-sixty-fourth=Asignar duraci\u00F3n de semi-fusa action.note.duration.decrement-duration=Disminuir duraci\u00F3n action.note.duration.increment-duration=Aumentar duraci\u00F3n action.note.effect.change-vibrato=Agregar/Quitar vibrato action.note.effect.change-bend=Agregar/Quitar bend action.note.effect.change-slide=Agregar/Quitar slide action.note.effect.change-hammer=Agregar/Quitar martillo action.note.effect.change-accentuated=Agregar/Quitar accentuated action.note.effect.change-dead=Agregar/Quitar dead note action.note.effect.change-fade-in=Agregar/Quitar fade in action.note.effect.change-ghost=Agregar/Quitar ghost action.note.effect.change-grace=Agregar/Quitar grace action.note.effect.change-harmonic=Agregar/Quitar harmonic action.note.effect.change-heavy-accentuated=Agregar/Quitar heavy accentuated action.note.effect.change-palm-mute=Agregar/Quitar palm mute action.note.effect.change-popping=Agregar/Quitar popping action.note.effect.change-slapping=Agregar/Quitar slapping action.note.effect.change-staccato=Agregar/Quitar staccato action.note.effect.change-tapping=Agregar/Quitar tapping action.note.effect.change-tremolo-bar=Agregar/Quitar tremolo bar action.note.effect.change-tremolo-picking=Agregar/Quitar tremolo picking action.note.effect.change-trill=Agregar/Quitar trill action.insert.open-repeat=Abrir repetici\u00F3n action.insert.close-repeat=Cerrar repetici\u00F3n action.insert.chord=Insertar acorde action.insert.text=Insertar texto action.insert.repeat-alternative=Insertar repetici\u00F3n alternativa action.marker.add=Agregar marca action.marker.go-next=Ir a la siguiente marca action.marker.go-previous=Ir a la marca anterior action.transport.play=Reproducir tema action.transport.stop=Parar reproducci\u00F3n action.transport.metronome=Activar/Desactivar metr\u00F3nonomo action.transport.mode=Modo de reproducci\u00F3n action.transport.set-loop-start=Marcar inicio de repetici\u00F3n action.transport.set-loop-end=Marcar final de repetici\u00F3n action.tools.browser=Explorador de canciones action.tools.transpose=Transponer notas action.settings.configure=Editar preferencias action.help.doc=Ayuda tuxguitar-src-1.2/TuxGuitar/share/lang/messages_eu.properties0000644000175000017500000006005411273045225024126 0ustar julianjuliantransport.mode.loop-range=Errepikatu Range transport.mode.loop-range.from=Play from measure transport.mode.loop-range.from-default=Hasieratik transport.mode.loop-range.to=Play to measure transport.mode.loop-range.to-default=Bukaeraino edit.voice-1=1.go Ahotsa hautatu edit.voice-2=2. Ahotsa hautatu tools.transpose=Transpose tools.transpose.semitones=Transposition Semitones tools.transpose.apply-to-track=Transpose all measures tools.transpose.apply-to-measure=Transpose only this measure tools.transpose.apply-to-all-tracks=Apply to all tracks tools.transpose.try-keep-strings=Try keep notes at same string when it's possible tools.transpose.apply-to-chords=Transpose Chords action.tools.transpose=Transpose Notes tuning.strings.transpose=Transpose afected notes. tuning.strings.transpose.try-keep-strings=Try keep notes at same string tuning.strings.transpose.apply-to-chords=Transpose Chords composition.date=Data composition.copyright="Copyright"-a composition.writer=Tab Autorea composition.transcriber=Transkribatu duenak composition.comments=Iruzkinak beat.move-left=Move One Beat Left beat.move-right=Move One Beat Right beat.move-custom=Custom Beat Move beat.move-custom.dialog.title=Custom Move beat.move-custom.dialog.direction-tip=Move Norabidea beat.move-custom.dialog.move-1.tip=Primary Move beat.move-custom.dialog.move-2.tip=Secondary Move beat.move-custom.dialog.direction=Norabidea beat.move-custom.dialog.direction.right=Move To Right beat.move-custom.dialog.direction.left=Move To Left beat.move-custom.dialog.count=Zenbaketa beat.move-custom.dialog.duration=Duration beat.move-custom.dialog.duration.type=Dotted/Double-Dotted beat.move-custom.dialog.duration.type.normal=Ezer beat.move-custom.dialog.duration.division-type=Division Type beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet) action.beat.general.move-left=Move One Beat Left action.beat.general.move-right=Move One Beat Right action.beat.general.move-custom=Custom Beat Move measure.add.count=Add Count edit.paste.count=Paste Count export.black-and-white=Beltz-Txuri moduan fretboard.direction=Norabidea transport.set-loop-start=Set loop start point transport.set-loop-end=Set loop end point action.transport.set-loop-start=Set loop start point action.transport.set-loop-end=Set loop end point ok=Baieztatu cancel=Ezeztatu yes=Bai no=Ez add=Gehitu remove=Ezabatu save=Gorde exit=Irten close=Itxi color=Kolorea title=Izenburua edit=Edizio go=Joan error=Akatxa warning=Oharra plugins=Plugin-ak choose=Autatu plugins=Plugins options=Opzioak defaults=Predeterminatutak clean=Clean rename=Birnombratu fret=Cejilla position=Posizioa info=Informazioa name=Izena author=Autorea version=Bertsioa description=Deskribapena configure=Konfigurazioa tuxguitar.title=TuxGuitar file=Fitxategia file.new=Berria file.open=Ireki file.open-url=Ireki URL-a file.open.error=Fitxategia ezin da ireki: {0} file.save=Gorde file.save-as=Gorde beste izenarekin file.save.error=Fitxategia gortetzea ez da posible: {0} file.save-changes-question=Fitxategia aldaketak ditu, Gorde nahi al dituzu? file.exit=Irten file.export=Exportatu file.export-midi=Exportatu Midi file.export-pdf=Exportatu PDF file.print=imprimatu file.print-preview=Itxura Preliminarra file.import=Importatu file.import.error=Ez da posible izan: {0} file.export-ascii=Exportatu ASCII formatu-ra file.export.error=Ez da posible izan: {0} file.history=Historiala file.overwrite-question=Badago Fitxategi bat izen honekin, Ordezkatu nahi duzu? edit.menu=Edizio edit.undo=Desegin edit.redo=Berriro egin edit.copy=Kopiatu edit.from=-tik edit.to=-raino edit.all-tracks=Pista guztiak edit.paste=itsatsi edit.paste.replace-mode=itsatsi Kompas honetan edit.paste.insert-mode=itsatsi kompas berri batean edit.delete=Ezabatu edit.cut=Moztu edit.mouse-mode-selection=Aldatu punteroa hautatzeko modura edit.mouse-mode-edition=Aldatu punteroa edizio modura edit.not-natural-key=Diesi/Bemola view=Ikusi view.layout=Ikusi view.layout.page=Horri Moduan view.layout.linear=Modo Linealean view.layout.multitrack=Multipista moduan view.layout.compact=Modu kompaktoan view.layout.score-enabled=Erakutsi Partitura view.layout.tablature-enabled=Erakutsi Tablatura view.layout.chord-style=Akordeen Estiloa view.layout.chord-name=Izena erakutsi view.layout.chord-diagram=Erakutsi Diagrama view.show-transport=Erakutsi Reproduktorea view.show-mixer=Erakutsi mixer-a view.show-piano=Erakutsi Pianoa view.show-matrix=Mostrar Editor de Matrices view.show-fretboard=Mastila erakutsi fretboard.background-color=Color de fondo fretboard.font=Fuente fretboard.fretpoint-color=Posizio markaren kolorea fretboard.note-color=Noten kolorea fretboard.scale-note-color=Eskalako Noten Koloreak fretboard.string-color=Harien Koloreak fretboard.settings=Preferencias fretboard.settings.options=Opzioak fretboard.display-note-text=Erakutsi notak textu moduan fretboard.display-scale-text=Erakutsi eskalen notak textu moduan fretboard.right-mode=Eskubira fretboard.left-mode=Ezkerrera piano.editor=Pianoa piano.natural-key-color=Color de teclas naturales piano.not-natural-key-color=Color de teclas Sostenido/Bemol piano.note-color=Color de notas piano.scale-note-color=Color de notas de escala piano.settings=Preferencias matrix.editor=Editor de Matrices matrix.grids=Grillas matrix.font=Fuente matrix.border-color=Color de bordes matrix.foreground-color=Color de fuente y lineas divisorias matrix.line-color-1=Color de linea #1 matrix.line-color-2=Color de linea #2 matrix.line-color-over=Color de linea seleccionada matrix.note-color=Color de notas matrix.play-note-color=Color de notas reproduciendo matrix.position-color=Color de pulso matrix.settings=Preferencias composition=Komposizioa composition.timesignature=Time Signature composition.timesignature.Numerator=Numerador composition.timesignature.denominator=Denominador composition.timesignature.to-the-end=Bukaera Arte composition.tempo=Tiempo composition.tempo-percent=Porzentaia composition.tempo.start-to-end=aplikatu kompas guztiei composition.tempo.position-to-end=aplikatu bukatu arte composition.tempo.position-to-next=aplikatu hurrengo dembora-markaraino composition.tempo.invalid=Tempo inv\u00E1lido composition.properties=Propietateak composition.name=Izena composition.artist=Artista composition.album=Albuma composition.author=Autorea composition.clef=Klavea composition.clef.treble=Treble composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=aplikatu klave hau bukatu arte composition.keysignature=Armadura composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Sostenido composition.keysignature.sharp-2=2 Sostenido composition.keysignature.sharp-3=3 Sostenido composition.keysignature.sharp-4=4 Sostenido composition.keysignature.sharp-5=5 sostenido composition.keysignature.sharp-6=6 Sostenido composition.keysignature.sharp-7=7 Sostenido composition.keysignature.flat-1=1 Bemol composition.keysignature.flat-2=2 Bemol composition.keysignature.flat-3=3 Bemol composition.keysignature.flat-4=4 Bemol composition.keysignature.flat-5=5 Bemol composition.keysignature.flat-6=6 Bemol composition.keysignature.flat-7=7 Bemol composition.keysignature.to-the-end=aplikatu armadura hau bukatu arte composition.tripletfeel=Aspecto de Tresillos composition.tripletfeel.none=Aspecto normal composition.tripletfeel.eighth=Aspecto de tresillos en corcheas composition.tripletfeel.sixteenth=Aspecto de tresillos en semi-corcheas composition.tripletfeel.to-the-end=aplikatu bukaera arte help=Laguntza help.help=Laguntza help.doc=Dokumentazioa help.about=Honi Buruz help.about.license=Lizentziari buruz help.about.authors=Autoreak help.about.description=Deskribapena mixer=Mezkladorea mixer.volume=Ganancia mixer.track.solo=Solo mixer.track.mute=Isildu mixer.channel.volume=Bolumena mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balance mixer.channel.free=Libre mixer.channel.link=Ligado track=Pista track.number=N° track.name=Izena track.color=Kolorea track.first=Lehengoa track.last=Azkena track.previous=Aurrekoa track.next=Hurrengoa track.add=Jarri pista track.remove=Kendu pista track.instrument=Instrumentua track.properties=Propietateak track.properties.general=General track.clone=Klonatu Pista track.move-up=Goruntz track.move-down=Beheruntz track.name.default-percussion-name=Perkusioa track.lyrics=Letren Edizioa lyric.editor=Letren editorea measure=Kompasa measure.first=Lehenengoa measure.last=Azkena measure.previous=Aurrekoa measure.next=Hurrengoa measure.add=Jarri Kompas bat measure.remove=Kendu kompasa measure.copy=Kopiatu Kompasa measure.paste=itsatsi Kompasa measure.clean=Ezabatu Kompasa measure.add-before-current-position=Jarri kompasa/k Posizio hau baino lehen measure.add-after-current-position=Jarri kompasa/k Posizio hau eta gero measure.add-at-end=Jarri kompasa azkenean beat=Neurria beat.clean=Ezabatu neurria note.tiednote=Ligar Nota note.semitone-up=Subir un semitono note.semitone-down=Bajar un semitono note.shift-up=Hari bat goruntz note.shift-down=Hari bat beheruntz duration=Durazioa duration.whole=Biribila duration.half=Zuria duration.quarter=Beltza duration.eighth=Kortxea duration.sixteenth=Semi-Kortxea duration.thirtysecond=Fusa duration.sixtyfourth=Semi-Fusa duration.dotted=Puntiloa duration.doubledotted=Puntilo Doblea duration.tupleto=Tresiloa effects=Efektoak effects.vibrato=Bibrato effects.bend=Bend effects.deadnote=Nota muerta effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Tremolo Bar Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Ghost Note effects.accentuatednote=Accentuated Note effects.heavyaccentuatednote=Heavy Accentuated Note effects.harmonic=armonikoa effects.grace=Grace Note effects.grace-editor=Grace Note Editor effects.grace.before-beat=Before beat effects.grace.on-beat=On beat effects.grace.transition=Transizioa effects.grace.transition-none=Ezer effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Tremolo Picking Editor effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Harmonic Editor effects.harmonic.type-of-harmonic=Type of Harmonic effects.harmonic.natural=Natural Harmonic effects.harmonic.artificial=Artificial Harmonic effects.harmonic.artificial.key-offset=Key offset effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=Left hand effects.harmonic.tapped.right-hand=Right hand effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=Semi Harmonic bend.editor=Bend Editorea bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release dynamic=Dinamika dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo insert.chord=Jarri Akorde Bat chord.editor=Akorde Editorea chord=Akordea chord.name=Izena chord.custom=Acorde Personalizado chord.custom.name-empty-error=Izena Beharrezkoa da. chord.custom.name-exist-error=Badago akorde bat izen honekin. chord.bass=Baxua chord.settings.tip=Preferencias chord.settings.type=Tipoa chord.settings.type.most-common=Most Common chord.settings.type.inversions=Inbersioak chord.settings.type.close-voiced=Close Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Open Chords chord.settings.chords-to-display=Erakusteko prest dauden Akordeak chord.settings.search-frets=Trasteak chord.settings.minimum-fret=Gutxienik chord.settings.maximum-fret=Gehienik transport=Reproduktorea transport.start=Reproducir transport.pause=Pausa egin transport.stop=Gelditu transport.first=Lehenengo neurria transport.last=Azken neurria transport.previous=Aurreko neurria transport.next=Hurrengo neurria transport.mode=Erreproduzio modua transport.mode.simple=Modu Normalean transport.mode.simple.tempo-percent=Denbora Porzentaia transport.mode.simple.loop=Errepikatu infinitoki transport.mode.trainer=Modo de Entrenamiento transport.mode.trainer.increment-description=Areagotu porzentaia repetitions=Errepikapenak repeat.open=Ireki errepikapena repeat.close=Itxi errepikapena repeat.number-of-repetitions=Zenbat errepikapen repeat.alternative=Errepikapen Alternatiboa repeat.alternative.editor=Editar Repetici\u00F3n Alternativa instrument=Instrumentua instrument.instrument=Instrumentoa instrument.percussion-track=Perkusio pista tuning=Doinua tuning.strings=Hariak tuning.offset=Offset language=Hizkuntza choose-color=Kolore bat autatu settings=Opzioak settings.config=Configurar TuxGuitar settings.config.main=Generalak settings.config.main.window-title=Izenburua settings.config.main.window-title.help=Hurrengo Bariableak Izenburua aldazen dute : settings.config.main.window-title.var.description.appname=Representa el nombre de la aplicaci\u00F3n: TuxGuitar. settings.config.main.window-title.var.description.appversion=Representa la versi\u00F3n actual de tuxguitar. settings.config.main.window-title.var.description.filename=Representa el nombre del Fitxategia que se esta editando. settings.config.main.window-title.var.description.filepath=Representa la ruta del Fitxategia que se esta editando. settings.config.main.window-title.var.description.songname=Orain irekita dagoen abestiaren izena ordezkatzen du. settings.config.main.window-title.var.description.songauthor=Orain irekita dagoen abestiaren autorea ordezkatzen du. settings.config.main.window-title.var.description.songalbum=Orain irekita dagoen abestiaren albuma ordezkatzen du. settings.config.main.window-title.var.description.songartist=Representa el artista de la canci\u00F3n actual. settings.config.main.options=Opzioak settings.config.main.splash-enabled=Mostrar el splash al inicio. settings.config.main.table.auto-size.enabled=Ajustar autom\u00E1ticamente el tama\u00F1o de la previsualizaci\u00F3n de pistas settings.config.view=Vista settings.config.view.mode=Modo de vista settings.config.view.size=Ajustes de la ventana settings.config.view.size.maximized=Maximizada settings.config.view.size.width=Ancho settings.config.view.size.height=Alto settings.config.language=Hizkuntza settings.config.language.choose=Autatu Hizkuntza settings.config.styles=Estiloak settings.config.styles.general=Estilo Generalak settings.config.styles.font.default=Fuente por Defecto settings.config.styles.font.note=Fuente de Notas settings.config.styles.font.time-signature=Fuente de Time Signature settings.config.styles.font.lyric=Fuente de Letras settings.config.styles.font.text=Fuente de Textos settings.config.styles.color.score-note=Color de Notas de Partitura settings.config.styles.color.tab-note=Color de Notas de Tablatura settings.config.styles.color.play-note=Color de Notas en Reproduccion settings.config.styles.color.lines=Color de Lineas Divisorias settings.config.styles.printer=Estilos de Impresion settings.config.styles.font.printer-default=Fuente por Defecto settings.config.styles.font.printer-note=Fuente de Notas settings.config.styles.font.printer-time-signature=Fuente de Time Signature settings.config.apply-changes-question=Aldaketak orain aplikatu nahi al dituzu? settings.config.sound=Doinua settings.config.skin=Tema de Iconos settings.config.skin.choose=Seleccione su Tema de Iconos settings.config.toolbars=Tresna Barra settings.config.toolbars.tip=Personalice su Barra de Herramientas settings.config.toolbars.list=Herramientas Disponibles settings.config.toolbars.move-up=Mugi gora settings.config.toolbars.move-down=Mugi Behera settings.keybindings=Configurar Teclas key-bindings-editor=Editor de Teclas key-bindings-editor-action-select=Seleccione Una Acci\u00F3n key-bindings-editor-action-column=ekintzak key-bindings-editor-shortcut-column=Teclak key-bindings-editor-push-a-key=Sakatu tekla bat key-bindings-editor-save-question=Aldaketak aurkitu dira, irten nahi al duzu? key-bindings-editor-reserved-title=Tecla Reservada key-bindings-editor-reserved-message=Lo siento, esta es una tecla reservada del sistema key-bindings-editor-override=Badago ekintz bat tekla hauekin, aldatu nahi al duzu berri honekin? print.print=imprimatu print.dialog=imprimatu print.service=Servitzua print.service.name=Izena print.service.status=Egoera print.service.type=Tipoa print.service.info=Informazioa print.range=Rango print.range.all-pages=Horri guztiak print.range.pages=Horriak print.range.pages-to=A print.copies=Kopiak print.copies-number=Zenbat Kopiak print.print-to-file=imprimatu fitxategi batera print.file-chooser=Examinar print-header.default-song-name=Izenburu gabea print-header.default-song-author=Anonimoa print.preview=Vista Preliminar marker=Marka marker.add=Marka jarri marker.list=Erakutsi Markak marker.first=Lehengoa marker.last=Azkena marker.next=Hurrengoa marker.previous=Aurrekoa export.tablature-enabled=tablatura erakutsi export.score-enabled=partitura erakutsi scale=Eskalak scale.list=Eskalen lista text.insert=Textua idatzi text.editor=Textu editorea text.text=Textua tools=Tresnak tools.scale=Eskala Lista tools.browser=Abesti exploratzailea tools.plugins=Plugin-ak Konfiguratu tools.shortcuts=Atajos del Teclado tools.settings=Preferencias browser.dialog=Abestio Exploratzailea browser.menu.file=Fitxategia browser.open=Ireki browser.exit=Irten browser.menu.collection=Kolekzioa browser.menu.go=Joan browser.collection.select=Hautatu Kolekzioa browser.collection.open=Ireki Kolekzioa browser.collection.remove=Ezabatu Kolekzioa browser.collection.close=Itxi Kolekzioa browser.collection.new=Kolekzio berria browser.go-root=Hasiera browser.go-back=Itzuli browser.refresh=Actualizar browser.factory.fs.name=Fitxategi Sistema Lokala browser.collection.fs.name=Izena browser.collection.fs.path=Ubikazioa browser.collection.fs.editor-title=Colecci\u00F3n de Fitxategi Localak browser.collection.fs.editor-tip=Seleccione una Carpeta browser.collection.fs.invalid-path=La carpeta seleccionada es inv\u00E1lida midi.port=Puerto MIDI midi.sequencer=Secuenciador MIDI plugin.unknown-value=Ez dago hautagai plugin.column.name=Plugin-aren Izena plugin.column.enabled=Martxan ######################### ### Tool Bar Items ### ######################### file.items=Fitxategiatarako tresnak edit.items=Ediziorako tresnak property.items=abestiaren propietateak track.items=Pisteetarako tresnak duration.items=Duraciones beat.items=pultsu tresnak composition.items=Komposiziorako tresnak transport.items=Acciones de reproducci\u00F3n marker.items=Acciones de marcas layout.items=vista de modos view.items=vista de componentes effect.items=Efektoak dynamic.items=Dinamikak ######################### ###Key Binding Actions### ######################### action.file.new=Fitxategi berria action.file.open=Ireki Fitxategia action.file.open-url=Ireki URL action.file.save=Gorde action.file.save-as=Gorde beste izenarekin action.file.print=imprimatu action.file.print-preview=Vista Preliminar action.file.exit=Itxi action.edit.undo=Desegin action.edit.redo=Beregin action.composition.change-time-signature=Cambiar time-signature action.composition.change-tempo=Aldatu Dembora action.composition.change-info=Abestiaren informazioa aldatu action.composition.change-clef=Klabea aldatu action.composition.change-key-signature=Cambiar armadura action.composition.change-triplet-feel=Aspecto de tresillos action.view.layout-set-page=Ikusi horri moduan action.view.layout-set-linear=Ikusi modu linealean action.view.layout-set-multitrack=Ikusi multipista moduan action.view.layout-set-compact=Ikusi modu kompaktoan action.view.layout-set-score-enabled=Erakutsi partitura action.view.layout-set-tablature-enabled=Erakutsi tablatura action.view.layout-set-chord-diagram-enabled=Erakutsi akordeen diagramak action.view.layout-set-chord-name-enabled=Erakutsi akordeen izenak action.view.show-fretboard=Erakutsi masta action.view.show-piano=Erakutsi pianoa action.view.show-matrix=Mostrar Editor de Matrices action.view.show-mixer=Mostrar mezclador de sonidos action.view.show-transport=Mostrar Reproductor action.track.add=Jarri Pista Berri bat action.track.remove=Ezabatu pista action.track.clone=Klonatu Pista action.track.go-first=Lehenengo pistaraino action.track.go-last=Azken pistaraino action.track.go-next=Hurrengo pistara action.track.go-previous=Aurreko pistaraino action.track.move-down=Mover Abajo action.track.move-up=Mover Arriba action.track.lyrics=Editar letras action.track.properties=Editatu Pistaren Propietateak action.measure.add=Jarri kompas berri bat action.measure.remove=Ezabatu kompasa action.measure.copy=Kopiatu kompasa action.measure.paste=itsatsi Kompasa action.measure.clean=Limpiar comp\u00E1s action.measure.go-first=Lehengo kompasaraino action.measure.go-last=Azken kompasaraino action.measure.go-next=Hurrengo kompasaraino action.measure.go-previous=Aurreko kompasera action.note.general.clean-beat=Limpiar pulso action.note.general.decrement-semitone=Semitono bat beheruntz action.note.general.increment-semitone=Semitono bat goruntz action.note.general.shift-down=Bajar una cuerda action.note.general.shift-up=Subir una cuerda action.note.general.tied=Jarri/Kendu ligadura action.note.duration.change-dotted=Jarri/Kendu puntillo action.note.duration.change-double-dotted=Jarri/Kendu doble puntillo action.note.duration.change-tupleto=Jarri/Kendu tresillo action.note.duration.set-whole=Biribilaren neurria jarri action.note.duration.set-half=Zuriaren neurria jarri action.note.duration.set-quarter=Beltzaren neurria jarri action.note.duration.set-eighth=Asignar duraci\u00F3n de corchea action.note.duration.set-sixteenth=Asignar duraci\u00F3n de semi-corchea action.note.duration.set-thirty-second=Asignar duraci\u00F3n de fusa action.note.duration.set-sixty-fourth=Asignar duraci\u00F3n de semi-fusa action.note.duration.decrement-duration=Disminuir duraci\u00F3n action.note.duration.increment-duration=Aumentar duraci\u00F3n action.note.effect.change-vibrato=Jarri/Kendu vibrato action.note.effect.change-bend=Jarri/Kendu bend action.note.effect.change-slide=Jarri/Kendu slide action.note.effect.change-hammer=Jarri/Kendu martillo action.note.effect.change-accentuated=Jarri/Kendu accentuated action.note.effect.change-dead=Jarri/Kendu dead note action.note.effect.change-fade-in=Jarri/Kendu fade in action.note.effect.change-ghost=Jarri/Kendu ghost action.note.effect.change-grace=Jarri/Kendu grace action.note.effect.change-harmonic=Jarri/Kendu harmonic action.note.effect.change-heavy-accentuated=Jarri/Kendu heavy accentuated action.note.effect.change-palm-mute=Jarri/Kendu palm mute action.note.effect.change-popping=Jarri/Kendu popping action.note.effect.change-slapping=Jarri/Kendu slapping action.note.effect.change-staccato=Jarri/Kendu staccato action.note.effect.change-tapping=Jarri/Kendu tapping action.note.effect.change-tremolo-bar=Jarri/Kendu tremolo bar action.note.effect.change-tremolo-picking=Jarri/Kendu tremolo picking action.note.effect.change-trill=Jarri/Kendu trill action.insert.open-repeat=Abrir repetici\u00F3n action.insert.close-repeat=Cerrar repetici\u00F3n action.insert.chord=Insertar acorde action.insert.text=Insertar texto action.insert.repeat-alternative=Insertar repetici\u00F3n alternativa action.marker.add=Kendu marka action.marker.go-next=Hurrengo markara action.marker.go-previous=Aurreko marka action.transport.play=Reproducir tema action.transport.stop=Gelditu action.transport.metronome=Activar/Desactivar metr\u00F3nonomo action.transport.mode=Modo de reproducci\u00F3n action.tools.browser=Abestien exploratzailea action.settings.configure=Editar preferencias action.help.doc=Laguntza tuxguitar-src-1.2/TuxGuitar/share/lang/messages_fr.properties0000644000175000017500000005360511273045225024130 0ustar julianjulianes=Espagnol en=Anglais fr=Français pl=Polonais de=Allemand pt=Portuguais ok=Ok cancel=Annuler yes=Oui no=Non add=Ajouter remove=Supprimer save=Enregistrer exit=Quitter color=Couleur title=Titre edit=Editer go=Aller error=erreur warning=Attention plugins=Gréffons choose=Choisir options=Options defaults=Défauts clean=Vider rename=Renommer fret=Frette position=Position tuxguitar.title=Tux-Guitar file=Fichier file.new=Nouveau file.open=Ouvrir file.save=Enregistrer file.save-as=Enregistrer sous... file.exit=Quitter file.export=Exporter file.export-midi=Exporter en Midi file.export-pdf=Exporter en PDF file.print=Imprimer file.print-preview=Aperçu avant impression file.import=Importer file.import-midi=Importer Midi file.export-ascii=Exporter ASCII file.history=Historique file.overwrite-question=Le fichier existe, voulez-vous le remplacer ? edit.undo=Annuler edit.redo=Refaire edit.copy=Copier edit.from=Depuis edit.to=A edit.all-tracks=Toutes les Pistes edit.paste=Coller edit.paste.replace-mode=Coller sur la mesure courante edit.paste.insert-mode=Coller dans un nouvelle mesure edit.delete=Effacer edit.cut=Couper edit.menu=Editer edit.mouse-mode-selection=Mode sélection edit.mouse-mode-edition=Mode édition de partition edit.not-natural-key=Mode Sharp/Flat view=Affichage view.layout=Affichage view.layout.page=Page view.layout.linear=Linéaire view.layout.multitrack=Multipiste view.layout.score-enabled=Afficher la partition view.show-transport=Afficher le lecteur view.show-mixer=Montrer la table de mixage view.show-piano=Afficher Piano view.show-fretboard=Montrer le manche fretboard.right-mode=Mode droitier fretboard.left-mode=Mode gaucher composition=Composition composition.timesignature=Signature rythmique composition.timesignature.Numerator=Numérateur composition.timesignature.denominator=Dénominateur composition.timesignature.to-the-end=Renvois fin composition.tempo=Tempo composition.tempo-percent=Pourcent composition.properties=Propriétés composition.name=Nom composition.artist=Interprète composition.album=Album composition.author=Auteur composition.tempo.invalid=Tempo invalide composition.clef=Clef composition.clef.treble=Aigus composition.clef.bass=Grave composition.clef.tenor=Ténor composition.clef.alto=Alto composition.clef.to-the-end=Appliquer cette armure jusqu'à la fin composition.keysignature=Armure composition.keysignature.natural=Vierge composition.keysignature.sharp-1=1 Dièse composition.keysignature.sharp-2=2 Dièses composition.keysignature.sharp-3=3 Dièses composition.keysignature.sharp-4=4 Dièses composition.keysignature.sharp-5=5 Dièses composition.keysignature.sharp-6=6 Dièses composition.keysignature.sharp-7=7 Dièses composition.keysignature.flat-1=1 Bémol composition.keysignature.flat-2=2 Bémols composition.keysignature.flat-3=3 Bémols composition.keysignature.flat-4=4 Bémols composition.keysignature.flat-5=5 Bémols composition.keysignature.flat-6=6 Bémols composition.keysignature.flat-7=7 Bémols composition.keysignature.to-the-end=Appliquer cette armure jusqu'à la fin composition.tripletfeel=Syncope picking composition.tripletfeel.none=Pas de syncope picking composition.tripletfeel.eighth=Syncope picking 8th composition.tripletfeel.sixteenth=Syncope picking 16th composition.tripletfeel.to-the-end=Appliquer la syncope picking jusqu'à la fin help=Aide help.help=Aide help.about=A propos mixer.volume=Gain mixer.track.solo=Solo mixer.track.mute=Muet mixer.channel.volume=Volume mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balance mixer.channel.free=Free mixer.channel.link=Link track=Piste track.number=N° track.name=Nom track.color=Couleur track.first=Première piste track.last=Dernière piste track.previous=Piste précédente track.next=Piste suivante track.add=Ajouter une piste track.remove=Supprimer une piste track.instrument=Instrument track.instrument.empty=Aucune banque de sons n'a été trouvé sur votre système,\nessayez de recompiler Tuxguitar avec votre propre version Java. track.properties=Propriétés track.properties.general=Général track.clone=Dupliquer la piste track.move-up=Monter track.move-down=Descendre track.name.default-percussion-name=Percussion track.lyrics=Paroles lyric.editor=Editeur de paroles measure=Mesure measure.first=Première mesure measure.last=Dernière mesure measure.previous=Mesure précédente measure.next=Mesure suivante measure.add=Ajouter la mesure measure.add-before-current-position=Ajouter une mesure avant la position courante measure.add-after-current-position=Ajouter une mesure apres la position courante measure.add-at-end=Ajouter une mesure a la fin measure.remove=Supprimer la mesure measure.copy=Copier la mesure measure.paste=Coller la mesure measure.clean=Vider la mesure beat=Note beat.clean=Note naturelle note.semitone-up=Ajouter un dièse note.semitone-down=Ajouter un bémol note.shift-up=Shift Up note.shift-down=Shift Down chord=Corde chord.name=Nom de la corde chord.custom.name-empty-error=La corde doit avoir un nom chord.custom.name-exist-error=Ce nom de corde est déjà utilisé dynamic=Dynamic dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo duration=Durée duration.whole=Ronde duration.half=Blanche duration.quarter=Noire duration.eighth=Croche duration.sixteenth=Double croche duration.thirtysecond=Triple croche duration.sixtyfourth=Quadruple croche duration.dotted=Pointée duration.doubledotted=Double pointée duration.division-type=N-tolet effects=Effets effects.vibrato=Vibrato effects.bend=Bend effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.deadnote=Dead Note effects.tremolo-bar=Ajouter un vibrato effects.tremolo-bar-editor=Editer le vibrato effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Note éttouffée effects.accentuatednote=Note accentuée effects.heavyaccentuatednote=Note fortement accentuée effects.harmonic=Note harmonique effects.grace=Grace Note effects.grace-editor=Editeur Grace Note effects.grace.before-beat=Avant le temps effects.grace.on-beat=Sur le temps effects.grace.transition=Transition effects.grace.transition-none=Aucun effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trille effects.trill-editor=Editeur de trille effects.tremolo-picking=tremolo effects.tremolo-picking-editor=Editeur de tremolo effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slap effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Editeur d'harmonique effects.harmonic.type-of-harmonic=Type d'harmonique effects.harmonic.natural=Harmonique naturelle effects.harmonic.artificial=Harmonique artificielle effects.harmonic.artificial.key-offset=Key offset effects.harmonic.tapped=Harmonique frappée effects.harmonic.tapped.left-hand=Main gauche effects.harmonic.tapped.right-hand=Main Droite effects.harmonic.pinch=Pinch Harmonique effects.harmonic.semi=Semi Harmonique bend.editor=Editeur Bend bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Lecteur transport.start=Jouer transport.stop=Stop repeat.open=Ouvrir répétitions repeat.close=Fermer répétitions repetitions=Répétitions repeat.number-of-repetitions=Nombre de répétitions note.tiednote=Note liée insert.chord=Insérer une note chord.editor=Editeur d'accord instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Piste de percussion tuning=Accordage tuning.strings=Cordes tuning.offset=Offset language=Langage choose-color=Choisir une couleur settings=Réglages settings.config=Configurer TuxGuitar settings.config.main=Général settings.config.main.window-title=Titre de fenêtre settings.config.main.window-title.help=The following vars will be replaced at the window title: settings.config.main.window-title.help=Les variables suivantes seront remplacées dans le titre de la fenêtre: settings.config.main.window-title.var.description.appname=Variable représentant le nom de l'application : Tuxguitar. settings.config.main.window-title.var.description.appversion=Variable représentant la version de TuxGuitar. settings.config.main.window-title.var.description.filename=Variable représentant le nom du fichier ouvert. settings.config.main.window-title.var.description.filepath=Variable représentant le chemin du fichier ouvert. settings.config.main.window-title.var.description.songname=Variable représentant le nom de la chanson. settings.config.main.window-title.var.description.songauthor=Variable représentant l'auteur de la chanson. settings.config.main.window-title.var.description.songalbum=Variable représentant l'album de la chanson. settings.config.main.window-title.var.description.songartist=Variable représentant l'interprète de la chanson. settings.config.main.options=Options settings.config.main.splash-enabled=Afficher l'écran de démarrage settings.config.view=Affichage settings.config.view.mode=Mode d?affichage settings.config.view.size=Taille de fenêtre settings.config.view.size.maximized=Maximisé settings.config.view.size.width=Largeur settings.config.view.size.height=Hauteur settings.config.language=Langage settings.config.language.choose=Choisir une langue settings.config.styles=Styles settings.config.styles.font.default=Police par défaut settings.config.styles.font.note=Police des notes settings.config.styles.font.time-signature=Time Signature Font settings.config.styles.font.printer-default=Impression couleur par défaut settings.config.styles.font.printer-note=Impression couleur de note settings.config.styles.font.printer-time-signature= Impression Time Signature Font settings.config.styles.color.score-note=Partition couleur de note settings.config.styles.color.tab-note=Tablature couleur de note settings.config.styles.color.play-note=Lecture couleur de note settings.config.styles.color.lines=Couleur de lignes horizontales settings.config.toolbars=Barre d'outils settings.config.apply-changes-question=Appliquer les changements maintenant ? settings.config.sound=Son settings.config.sound.soundbank=Banque sonore settings.config.sound.default-soundbank=Utiliser la banque sonore par défaut settings.config.sound.custom-soundbank= Utiliser la banque sonore alternative settings.config.sound.soundbank-restart-message=Vous devez redémarrer Tuxguitar pour que le changement de banque sonore prenne effet soundbank.error=Erreur de banque sonore soundbank.error.unavailable=Erreur, banque sonore non disponible. soundbank.error.custom=Ne peut ouvrir la banque sonore alternative. settings.keybindings=Configurer les raccourcis key-bindings-editor=Editeur de raccourcis key-bindings-editor-action-select=Sélectionner une action key-bindings-editor-action-column=Actions key-bindings-editor-shortcut-column=Raccourcis key-bindings-editor-push-a-key=Presser une touche key-bindings-editor-save-question=Des modifications ont été effectué, quitter\nsans enregistrer ? key-bindings-editor-reserved-title=Raccourci réservé key-bindings-editor-reserved-message=Désolé, ce raccourci est réservé key-bindings-editor-override=Raccourci déjà utilisé ! Etes vous sûr d?utiliser\ncelui ci ? print.print=Imprimer print.dialog=Imprimer print.service=Service print.service.name=Nom print.service.status=Status print.service.type=Type print.service.info=Info print.range=Range print.range.all-pages=Toutes print.range.pages=Pages print.range.pages-to=A print.copies=Copies print.copies-number=Nombre de copies print.print-to-file=Imprimer dans un fichier print.file-chooser=Choisir print-header.default-song-name=Untitled print-header.default-song-author=Anonyme print.preview=Aperçu avant impression marker=Marqueur marker.add=Ajouter marqueur marker.list=Liste des marqueurs marker.first=Aller au premier marqueur marker.last= Aller au dernier marqueur marker.next= Aller au marqueur suivant marker.previous= Aller au marqueur précédent export.tablature-enabled=Afficher la tablature export.score-enabled=Afficher la partition scale=Gamme scale.list=List de Gammes ######################### ### Tool Bar Items ### ######################### file.items=File Items edit.items=Edit Items property.items=Property Items track.items=Track Items duration.items=Duration Items beat.items=Note Items composition.items=Composition Items repeat.items=Repeat Items transport.items=Player Items marker.items=Marker Items insert.items=Insérer Items layout.items=Layout Items view.items=View Items effect.items=Effect Items dynamic.items=Dynamic Items ######################### ###Key Binding Actions### ######################### action.file.new=Nouveau fichier action.file.open=Ouvrir un fichier action.file.save=Enregistrer action.file.save-as=Enregistrer sous... action.file.print=Imprimer action.file.print-preview=Aperçu avant impression action.edit.undo=Annuler action.edit.redo=Refaire action.composition.change-time-signature=Changer la signature rythmique action.composition.change-tempo=Changer le tempo action.composition.change-info=Changer les informations de la chanson action.composition.change-clef=Changer la Clef action.composition.change-key-signature=Changer la signature action.view.layout-set-page=Monter la mise en page action.view.layout-set-linear=Affichage linéaire action.view.layout-set-multitrack=Afficher le mode multipiste action.view.layout-set-score-enabled=Afficher la partition action.view.show-fretboard=Montrer le manche action.view.show-mixer=Montrer la table de mixage action.view.show-transport=Afficher le lecteur action.view.show-piano=Afficher le clavier action.track.add=Ajouter une piste action.track.remove=Supprimer la piste action.track.clone=Dupliquer la piste action.track.go-first=Aller à la première piste action.track.go-last=Aller à la dernière piste action.track.go-next=Aller à la piste suivante action.track.go-previous=Aller à la piste précédente action.track.properties=Changer les propriétés de la piste action.track.lyrics=Editer les paroles action.measure.add=Ajouter une mesure action.measure.remove=Supprimer la mesure action.measure.copy=Copier le mesure action.measure.paste=Coller la mesure action.measure.clean=Vider la mesure action.measure.go-first=Aller à la première mesure action.measure.go-last=Aller à la dernière mesure action.measure.go-next=Aller à la mesure suivante action.measure.go-previous=Aller à la mesure précédente action.note.general.clean-beat=Vider le temps action.note.general.decrement-semitone=Baisser d'un demi ton action.note.general.increment-semitone=Augmenter d'un demi ton action.note.general.shift-down=Shift down action.note.general.shift-up=Shift up action.note.general.tied=Ajouter/Enlever tied action.note.duration.change-dotted=Ajouter/Supprimer pointée action.note.duration.change-double-dotted=Ajouter/Supprimer double pointée action.note.duration.change-division-type=Ajouter/Supprimer N-tolet action.note.effect.change-vibrato=Ajouter/Supprimer Vibrato action.note.effect.change-bend=Ajouter/Supprimer bend action.note.effect.change-slide=Ajouter/Supprimer Slide action.note.effect.change-hammer=Ajouter/Supprimer hammer-on/pull-off action.note.effect.change-accentuated=Ajouter/Enlever action.note.effect.change-dead=Ajouter/Enlever note morte action.note.effect.change-fade-in=Ajouter/Enlever fade in action.note.effect.change-ghost=Ajouter/Enlever note fantôme action.note.effect.change-grace=Ajouter/Enlever grace action.note.effect.change-harmonic=Ajouter/Enlever l'harmonique action.note.effect.change-heavy-accentuated=Ajouter/Enlever l'accent (fort) action.note.effect.change-palm-mute=Ajouter/Enlever palm mute action.note.effect.change-popping=Ajouter/Enlever popping action.note.effect.change-slapping=Ajouter/Enlever slap action.note.effect.change-staccato=Ajouter/Enlever staccato action.note.effect.change-tapping=Ajouter/Enlever tapping action.note.effect.change-tremolo-bar=Ajouter/Enlever vibrato action.note.effect.change-tremolo-picking=Ajouter/Enlever trémolo action.note.effect.change-trill=Ajouter/Enlever trille action.insert.open-repeat=Ouvrir répétition action.insert.close-repeat=Fermer répétition action.insert.chord=Insérer accord action.transport.play=Jouer la chanson action.transport.stop=Arrêter de jouer info=Info name=Nom author=Auteur version=Version description=Descripton configure=Configurer file.open-url=Ouvrir URL file.open.error=Erreur d'Ouverture : {0} file.save.error=Erreur de Sauvegarde : {0} file.import.error=Erreur d'Importation : {0} file.export.error=Erreur d'Exportation : {0} file.save-changes-question=La musique à des changements non sauvés\nVoulez vous sauver les changements ? midi.port=Port Midi midi.sequencer=Séquencer Midi browser.dialog=Navigateur browser.menu.file=Fichier browser.open=Ouvrir browser.exit=Quiter browser.menu.collection=Collection browser.menu.go=go browser.collection.select=Selectionner la Collection browser.collection.open=Ouvrir browser.collection.remove=Enlever browser.collection.close=Fermer browser.collection.new=Nouvelle browser.go-root=Repertoire Personnel browser.go-back=Arriere browser.refresh=Rafraichir browser.collection.fs.editor-title=Systeme de fichier, Titre de Collection browser.collection.fs.editor-tip=Choisir le repertoire de collection browser.collection.fs.invalid-path=Erreur, choisir un repertoire valide plugin.unknown-value=Non disponible plugin.column.name=Nom du greffon plugin.column.enabled=Activé view.layout.compact=Compact view.layout.chord-style=Style Accord view.layout.chord-name=Nom de l'Accord view.layout.chord-diagram=Diagramme de l'Accord view.layout.tablature-enabled=Afficher la Tablature view.show-matrix=Afficher la Matrice matrix.editor=Editeur de la Matrice matrix.grids=Numbre de grille matrix.border-color=Couleur Bordure matrix.font=Fonte matrix.foreground-color=Couleur avant plan matrix.line-color-1=Couleur Ligne 1 matrix.line-color-2=Couleur Ligne 2 matrix.line-color-over=Couleur dessus matrix.note-color=Couleur Note matrix.play-note-color=Couleur Note jouée matrix.position-color=Couleur Position matrix.settings=Paramètres Matrice help.doc=Documentation transport.first=Premier transport.last=Dernier transport.previous=Précédent transport.next=Suivant transport.pause=Pause transport.mode=Mode Lecture transport.mode.simple=Mode Lecture Simple transport.mode.simple.tempo-percent=Pourcentage Tempo transport.mode.simple.loop=Lecture Boucle transport.mode.trainer=Mode Apprentissage transport.mode.trainer.increment-description=Incrément repeat.alternative=Alternative répétition repeat.alternative.editor=Editer les Répétitions alternatives tools=Outils tools.scale=Liste gammes tools.browser=Navigateur tools.plugins=Gréffons tools.shortcuts=Raccourcis tools.settings=Paramètres text.insert=Insérer Texte settings.config.main.table.auto-size.enabled=Activer le redimentionnement automatique de la table settings.config.styles.general=Style General settings.config.styles.printer=Style Impression settings.config.styles.font.lyric=Fonte Paroles settings.config.styles.font.text=Fonte Texte settings.config.skin=Masques settings.config.skin.choose=Choisir votre masque settings.config.toolbars.tip=Personnaliser les barres d'outils settings.config.toolbars.list=Barres d'outils Disponibles settings.config.toolbars.move-up=Déplacer en haut settings.config.toolbars.move-down=Déplacer en bas action.file.open-url=Ouvir l'URL action.file.exit=Quitter TuxGuitar action.insert.text=Insérer le Texte action.insert.repeat-alternative=Rejouer l'Alternative action.composition.change-triplet-feel=Change Triplet Feel action.note.duration.set-whole=Whole Duration action.note.duration.set-half=Set Half Duration action.note.duration.set-quarter=Set Quarter Duration action.note.duration.set-eighth=Set Eighth Duration action.note.duration.set-sixteenth=Set Sixteenth Duration action.note.duration.set-thirty-second=Set Thirty Second Duration action.note.duration.set-sixty-fourth=Set Sixty Fourth Duration action.note.duration.decrement-duration=Decrementr la Duree action.note.duration.increment-duration=Incremente la Duree action.track.move-down=Déplacer en bas action.track.move-up=Déplacer en haut action.tools.browser=Browser action.transport.metronome=Métrononome action.transport.mode=Mode action.view.show-matrix=Afficher la Matrice action.view.layout-set-chord-diagram-enabled=Activer le diagramme d'accord action.view.layout-set-chord-name-enabled=Activer le nom de l'accord action.view.layout-set-compact=Afficher en mode compact action.view.layout-set-tablature-enabled=Afficher la Tablature action.marker.add=Ajouter un marker action.marker.go-next=Aller au prochain marqueur action.marker.go-previous=Aller au précédent marqueur action.settings.configure=Paramétres action.help.doc=Aide chord.bass=Basse chord.custom=Accord Personnel chord.settings.tip=Paramétre Personnel chord.settings.type=Type chord.settings.type.most-common=Les plus communs chord.settings.type.inversions=Inversions chord.settings.type.close-voiced=Fermer la Voie chord.settings.type.open-voiced=Ouvrir la Voie chord.settings.open-chords=Accords Ouverts chord.settings.chords-to-display=Accords à Afficher chord.settings.search-frets=Rechercher les Frettes chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max fretboard.background-color=Couleur Arriere plan fretboard.display-note-text=Afficher le texte de la note fretboard.display-scale-text=Afficher le texte de la gamme fretboard.font=Fonte fretboard.fretpoint-color=Couleur des frettes fretboard.note-color=Couleur de la Note fretboard.scale-note-color=Couleur de la Gamme fretboard.settings=Paramétres de la Fretboard fretboard.string-color=Couleur des cordes fretboard.settings.options=Options piano.editor=Editeur Piano piano.natural-key-color=Couleur touche naturele piano.not-natural-key-color=Couleur touche non naturele piano.note-color=Couleur Note piano.scale-note-color=Couleur de la note de gamme piano.settings=Parametre Piano mixer=Mixer #eof "$Id: messages_fr.properties,v 1.14 2008/03/31 18:40:38 rzr Exp $" tuxguitar-src-1.2/TuxGuitar/share/lang/messages_hu.properties0000644000175000017500000003665311273045225024141 0ustar julianjulianes=Spanyol en=Angol fr=Francia pl=Lengyel de=Német pt=Portugál hu=Magyar ok=Ok cancel=Mégsem yes=Igen no=Nem add=Hozzáad edit=Szerkeszt remove=Eltávolít save=Mentés exit=Kilépés choose=Válassz color=Szín title=Címke go=Ugrás warning=Figyelmeztetés error=Hiba plugins=Bõvítmények options=Beállítások defaults=Alapértelmezés clean=Eltávolít rename=Átnevez fret=Bund position=Pozíció tuxguitar.title=Tux-Guitar file=Fájl file.new=Új file.open=Megnyitás... file.save=Mentés file.save-as=Mentés másként... file.exit=Kilépés file.export=Exportálás file.export-midi=Midi-be file.export-pdf=PDF-be file.print=Nyomtatás file.print-preview=Nyomtatási kép file.import=Importálás file.import-midi=Midi-bõl file.export-ascii=ASCII-be file.history=Elõzmények file.overwrite-question=A fájl már létezik, felülírod ??? edit.menu=Szerkesztés edit.undo=Visszavonás edit.redo=Újra edit.copy=Másolás edit.from=Kezdete edit.to=Vége edit.all-tracks=Minden Sáv edit.paste=Beillesztés edit.paste.replace-mode=Beillesztés ebbe az ütembe edit.paste.insert-mode=Új ütem beszúrása a mostani elé edit.delete=Törlés edit.cut=Kivágás edit.mouse-mode-selection=Kijelölõ mód edit.mouse-mode-edition=Kottaszerkesztõ mód edit.not-natural-key=Módosító-szerkesztõ mód view=Nézet view.layout=Elrendezés view.layout.page=Lapszerûen view.layout.linear=Egy sorban view.layout.multitrack=Többsávos view.show-mixer=Keverõpult látszik view.show-fretboard=Gitárnyak látszik view.show-piano=Billentyûzet látszik fretboard.right-mode=Jobbkezes fretboard.left-mode=Balkezes composition=Kompozíció composition.timesignature=Ütemmutató composition.timesignature.Numerator=Számláló composition.timesignature.denominator=Nevezõ composition.timesignature.to-the-end=A darab végéig composition.tempo=Tempó composition.tempo-percent=Százalék composition.properties=Tulajdonságok composition.name=Cím composition.artist=Elõadó composition.album=Album composition.author=Szerzõ composition.tempo.invalid=Hibás tempó composition.tripletfeel=Triolás alapritmus help=Segítség help.help=Segítség help.about=Névjegy mixer.volume=Erõsítés mixer.track.solo=Szóló mixer.track.mute=Némít mixer.channel.volume=Hangerõ mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balansz mixer.channel.free=Szabad mixer.channel.link=Közös track=Sáv track.number=N° track.name=Név track.color=Szín track.first=Elsõ sáv track.last=Utolsó sáv track.previous=Elõzõ sáv track.next=Következõ sáv track.add=Új sáv track.remove=Sáv eltávolítása track.instrument=Hangszer track.tunning=Hangolás track.instrument.empty=Nem található midi hangszerkészlet. Próbáld hozzáfordítani a TuxGuitar-t a java verziódhoz. track.properties=Tulajdonságok track.properties.general=Általános track.name.default-percussion-name=Ritmuskészlet track.lyrics=Dalszöveg tunning.offset=Kápó lyric.editor=Dalszöveg szerkesztõ measure=Ütem measure.first=Elsõ ütem measure.last=Utolsó ütem measure.previous=Elõzõ ütem measure.next=Következõ ütem measure.add=Új ütem measure.add-before-current-position=Ütem beszúrása a mostani elé measure.add-after-current-position=Ütem beszúrása a mostani után measure.add-at-end=Új ütem hozzáadása a darab végéhez measure.remove=Ütem eltávolítása measure.copy=Ütem másolása measure.paste=Ütem beillesztése measure.clean=Csendes ütem duration=Hanghossz duration.whole=Egész duration.half=Fél duration.quarter=Negyed duration.eighth=Nyolcad duration.sixteenth=Tizenhatod duration.thirtysecond=Harmincketted duration.sixtyfourth=Hatvannegyed duration.dotted=Nyújtott duration.doubledotted=Duplán nyújtott duration.division-type=Osztott ritmus dynamic=Dinamika dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Effektusok effects.vibrato=Vibrátó effects.bend=Hajlítás effects.deadnote=Tompított hang effects.slide=Csúsztatás effects.hammer=Kalapács/felengedés effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Tremolo Bar Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Ghost Note effects.accentuatednote=Hangsúly effects.heavyaccentuatednote=Erõsebb hangsúly effects.harmonic=Harmonic effects.grace=Díszítõhang effects.grace-editor=Díszítõhang-szerkesztõ effects.grace.before-beat=Ütés elõtt effects.grace.on-beat=Ütésre effects.grace.transition=Átmenet effects.grace.transition-none=Nincs effects.grace.transition-bend=Hajlítás effects.grace.transition-slide=Csúsztatás effects.grace.transition-hammer=Kalapács effects.trill=Trilla effects.trill-editor=Trilla-szerkesztõ effects.tremolo-picking=Tremoló pengetés effects.tremolo-picking-editor=Tremoló pengetés szerkesztõ effects.palm-mute=Fojtás tenyérrel effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Beúsztatás effects.harmonic-editor=Harmonic Editor effects.harmonic.type-of-harmonic=Type of Harmonic effects.harmonic.natural=Natural Harmonic effects.harmonic.artificial=Artificial Harmonic effects.harmonic.artificial.key-offset=Key offset effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=Bal kéz effects.harmonic.tapped.right-hand=Jobb kéz effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=Semi Harmonic bend.editor=Hajlítás Szerkesztõ bend.bend=Hajlítás bend.bend-release=Hajlítás/vissza bend.bend-release-bend=Hajlítás/vissza/hajlítás bend.prebend=Elõkészített bend.prebend-release=Elõkészített/vissza transport=Lejátszó transport.start=Lejátszás/szünet transport.stop=Leállítás repeat.open=Ismétlés kezdete repeat.close=Ismétlés vége repetitions=Ismétlések repeat.number-of-repetitions=Ismétlések száma beat=Hangjegy beat.clean=Hang/akkord törlése note.semitone-up=Félhanggal feljebb note.semitone-down=Félhanggal lejjebb note.shift-up=Magasabb húron note.shift-down=Mélyebb húron note.tiednote=Átkötött hang note.deadnote=Tompított hang insert.chord=Akkord beszúrása chord.editor=Akkordszerkesztõ chord=Akkord chord.name=Akkord neve chord.custom.name-empty-error=Nevezd el az akkordot. chord.custom.name-exist-error=Már létezik ilyen nevû akkord. instrument=Hangszer instrument.instrument=Hangszer instrument.percussion-track=Ritmuskészlet tunning=Hangolás tunning.strings=Húrok language=Nyelv choose-color=Válassz színt settings=Beállítások settings.config=TuxGuitar testreszabása settings.config.view=Nézet settings.config.view.mode=Elrendezés módja settings.config.view.size=Ablakméret settings.config.view.size.maximized=Teljes méretû settings.config.view.size.width=Szélesség settings.config.view.size.height=Magasság settings.config.language=Nyelv settings.config.language.choose=Válassz nyelvet settings.config.styles=Kinézet settings.config.styles.font.default=Alap betûtípus settings.config.styles.font.note=Hangjegy betûtípusa settings.config.styles.font.time-signature=Ütemmutató betûtípusa settings.config.styles.font.printer-default=Nyomtatási alap betûtípus settings.config.styles.font.printer-note=Nyomtatási hangjegy betûtípusa settings.config.styles.font.printer-time-signature=Nyomtatási ütemmutató betûtípusa settings.config.styles.color.score-note=Hangjegy színe settings.config.styles.color.tab-note=Tabulatúra színe settings.config.styles.color.play-note=Lejátszott hang színe settings.config.apply-changes-question=Alkalmazod a beállításokat? settings.config.sound=Hang settings.config.sound.soundbank=Hangszerkészlet settings.config.sound.default-soundbank=Alap hangszerkészlet settings.config.sound.custom-soundbank=Egyéni hangszerkészlet settings.config.sound.soundbank-restart-message=A változások érvénybe lépéséhez újra kell indítanod a TuxGuitar-t! settings.config.main=Általános settings.config.main.window-title=Ablak címsora settings.config.main.window-title.help=Az alábbi változók használhatóak az ablak címsorában: settings.config.main.window-title.var.description.appname=A program neve, tehát: TuxGuitar settings.config.main.window-title.var.description.appversion=A program verziója settings.config.main.window-title.var.description.filename=A megnyitott fájl neve settings.config.main.window-title.var.description.filepath=A megnyitott fájl elérési útvonala settings.config.main.window-title.var.description.songname=A darab címe settings.config.main.window-title.var.description.songauthor=A darab szerzõje settings.config.main.window-title.var.description.songalbum=Az album címe settings.config.main.window-title.var.description.songartist=A darab elõadója settings.config.main.options=Beállítások settings.config.main.splash-enabled=Indítókép megjelenítése settings.config.styles.color.lines=Vízszintes vonalak színe settings.config.toolbars=Eszköztárak soundbank.error=Hangszerkészlet Hiba soundbank.error.unavailable=Nincs hangszerkészlet Hiba. soundbank.error.custom=Nem sikerült megnyitni az egyéni hangszerkészlet fájlt. settings.keybindings=Gyorsbillentyûk beállítása key-bindings-editor=Gyorsbillentyû szerkesztõ key-bindings-editor-action-select=< Válassz mûveletet > key-bindings-editor-action-column=Mûveletek key-bindings-editor-shortcut-column=Billentyûk key-bindings-editor-push-a-key=Nyomj egy billentyût key-bindings-editor-save-question=Vannak még nem mentett változtatások. Biztosan kilépsz mentés nélkül? key-bindings-editor-reserved-title=Fenntartott kombináció key-bindings-editor-reserved-message=Sajnálom, ez a kombináció fenntartott key-bindings-editor-override=A kombináció már foglalt! Biztos ezt szeretnéd használni ? print.print=Nyomtatás print.dialog=Nyomtatás print.service=Szolgáltatás print.service.name=Eszköznév print.service.status=Állapot print.service.type=Típus print.service.info=Információ print.range=Tartomány print.range.all-pages=Minden oldal print.range.pages=Oldalak print.range.pages-to= - print.copies=Másolatok print.copies-number=Példányszám print.print-to-file=Fájlba nyomtatás print.file-chooser=Tallózás print-header.default-song-name=Nincs cím print-header.default-song-author=Anonymous print.preview=Nyomtatási kép view.layout.score-enabled=Kotta látszik view.show-transport=Lejátszó látszik composition.clef=Kulcs composition.clef.treble=Violin composition.clef.bass=Basszus composition.clef.tenor=Tenor composition.clef.alto=Alt composition.clef.to-the-end=Maradjon ez a darab végéig composition.keysignature=Elõjegyzés composition.keysignature.natural=Nincs composition.keysignature.sharp-1=1 kereszt composition.keysignature.sharp-2=2 kereszt composition.keysignature.sharp-3=3 kereszt composition.keysignature.sharp-4=4 kereszt composition.keysignature.sharp-5=5 kereszt composition.keysignature.sharp-6=6 kereszt composition.keysignature.sharp-7=7 kereszt composition.keysignature.flat-1=1 bé composition.keysignature.flat-2=2 bé composition.keysignature.flat-3=3 bé composition.keysignature.flat-4=4 bé composition.keysignature.flat-5=5 bé composition.keysignature.flat-6=6 bé composition.keysignature.flat-7=7 bé composition.keysignature.to-the-end=Maradjon ez a darab végéig composition.tripletfeel=Triolás alapritmus composition.tripletfeel.none=Nincs triolás alapritmus composition.tripletfeel.eighth=Triolás 8-adok composition.tripletfeel.sixteenth=Triolás 16-odok composition.tripletfeel.to-the-end=Maradjon ez a darab végéig track.clone=Sáv klónozása track.move-up=Mozgatás fel track.move-down=Mozgatás le marker=Jelzõ marker.add=Új jelzõ marker.list=Jelzõlista marker.first=Elsõ jelzõhöz marker.last=Utolsó jelzõhöz marker.next=Következõ jelzõhöz marker.previous=Elõzõ jelzõhöz export.tablature-enabled=Tabulatúra látszik export.score-enabled=Kotta látszik scale=Skála scale.list=Skálák listája ######################### ### Tool Bar Items ### ######################### file.items=Fájl eszköztár edit.items=Szerkesztés eszköztár property.items=Tulajdonságok eszköztár track.items=Sávok eszköztár duration.items=Hanghossz eszköztár beat.items=Hangjegy eszköztár composition.items=Kompozíció eszköztár repeat.items=Ismétlések eszköztár player.items=Lejátszó eszköztár marker.items=Jelzõk eszköztár insert.items=Beszúrás eszköztár layout.items=Elrendezés eszköztár view.items=Nézet eszköztár effect.items=Effektusok eszköztár dynamic.items=Dinamika eszköztár ######################### ###Key Binding Actions### ######################### action.file.new=Új fájl action.file.open=Fájl megnyitása action.file.save=Mentés action.file.save-as=Mentés másként action.file.print=Nyomtatás action.file.print-preview=Nyomtatási kép action.edit.undo=Visszavonás action.edit.redo=Újra action.composition.change-time-signature=Ütemmutató változtatása action.composition.change-tempo=Tempó változtatása action.composition.change-info=Dal tulajdonságainak szerkesztése action.composition.change-clef=Kulcs változtatása action.composition.change-key-signature=Elõjegyzés változtatása action.view.layout-set-page=Lapszerû elrendezés action.view.layout-set-linear=Egysoros elrendezés action.view.layout-set-multitrack=Többsávos mód action.view.layout-set-score-enabled=Kotta megjelenítése action.view.show-fretboard=Gitárnyak megjelenítése action.view.show-piano=Billentyûzet megjelenítése action.view.show-mixer=Keverõpult megjelenítése action.view.show-transport=Lejátszó megjelenítése action.track.add=Új sáv action.track.remove=Sáv eltávolítása action.track.clone=Sáv klónozása action.track.go-first=Elsõ sáv action.track.go-last=Utolsó sáv action.track.go-next=Következõ sáv action.track.go-previous=Elõzõ sáv action.track.lyrics=Sáv dalszövegének szerkesztése action.track.properties=Sáv tulajdonságainak szerkesztése action.measure.add=Új ütem action.measure.remove=Ütem eltávolítása action.measure.copy=Ütem másolása action.measure.paste=Ütem beillesztése action.measure.clean=Csendes ütem action.measure.go-first=Ugrás az elsõ ütemre action.measure.go-last=Ugrás az utolsó ütemre action.measure.go-next=Ugrás a következõ ütemre action.measure.go-previous=Ugrás az elõzõ ütemre action.note.general.clean-beat=Hang/akkord törlése action.note.general.decrement-semitone=Félhanggal lejjebb action.note.general.increment-semitone=Félhanggal feljebb action.note.general.shift-down=Mélyebb húron action.note.general.shift-up=Magasabb húron action.note.general.tied=Átkötött hang action.note.duration.change-dotted=Nyújtott hang action.note.duration.change-double-dotted=Duplán nyújtott hang action.note.duration.change-division-type=Osztott ritmus action.note.effect.change-vibrato=Vibrátó action.note.effect.change-bend=Hajlítás action.note.effect.change-slide=Csúsztatás action.note.effect.change-hammer=Kalapács/felengedés action.note.effect.change-accentuated=Hangsúly action.note.effect.change-dead=Tompított hang action.note.effect.change-fade-in=Beúsztatás action.note.effect.change-ghost=Add/Remove ghost action.note.effect.change-grace=Díszítõhang action.note.effect.change-harmonic=Add/Remove harmonic action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated action.note.effect.change-palm-mute=Fojtás tenyérrel action.note.effect.change-popping=Add/Remove popping action.note.effect.change-slapping=Add/Remove slapping action.note.effect.change-staccato=Staccato action.note.effect.change-tapping=Add/Remove tapping action.note.effect.change-tremolo-bar=Add/Remove tremolo bar action.note.effect.change-tremolo-picking=Tremoló pengetés action.note.effect.change-trill=Trilla action.insert.open-repeat=Ismétlés kezdete action.insert.close-repeat=Ismétlés vége action.insert.chord=Akkord beszúrása action.transport.play=Lejátszás/szünet action.transport.stop=Leállítás tuxguitar-src-1.2/TuxGuitar/share/lang/messages_it.properties0000644000175000017500000005442711273045225024140 0ustar julianjulianok=Ok cancel=Annulla yes=S\u00ec no=No add=Aggiungi edit=Modifica remove=Rimuovi save=Salva exit=Esci choose=Scegli color=Colore title=Titolo go=Vai warning=Attenzione error=Errore plugins=Plugin options=Opzioni defaults=Predefinito clean=Elimina rename=Rinomina fret=Tasto position=Posizione close=Chiudi author=Autore version=Versione description=Descrizione name=Nome configure=Configura info=Informazioni tuxguitar.title=Tux-Guitar file=File file.new=Nuovo file.open=Apri file.open-url=Apri URL file.open.error=Impossibile Aprire: {0} file.save=Salva file.save-changes-question=La canzone \u00e8 stata modificata.\nVuoi salvare le modifiche? file.save-as=Salva come file.save.error=Impossibile Salvare: {0} file.exit=Esci file.export=Esporta file.export-midi=Esporta Midi file.export-pdf=Esporta PDF file.export.error=Impossibile Esportare: {0} file.print=Stampa file.print-preview=Anteprima di Stampa file.import=Importa file.import-midi=Importa Midi file.import.error=Impossibile Importare: {0} file.export-ascii=Esporta ASCII file.history=Cronologia file.overwrite-question=Questo file esiste gi\u00e0, vuoi sovrascriverlo?? edit.menu=Modifica edit.undo=Annulla edit.redo=Ripeti edit.copy=Copia edit.from=Da edit.to=A edit.all-tracks=Tutte le tracce edit.paste=Incolla edit.paste.replace-mode=Incolla nella Misura corrente edit.paste.insert-mode=Incolla in una nuova Misura edit.delete=Elimina edit.cut=Taglia edit.mouse-mode-selection=Modalit\u00e0 Selezione edit.mouse-mode-edition=Modalit\u00e0 Modifica Pentagramma edit.not-natural-key=Modalit\u00e0 Diesis/Bemolle view=Vista view.layout=Struttura view.layout.page=Struttura a Pagina view.layout.linear=Struttura Lineare view.layout.multitrack=Multitraccia view.layout.compact=Compatto view.layout.chord-style=Stile Accordo view.layout.chord-name=Nome Accordo view.layout.chord-diagram=Schema Accordo view.layout.score-enabled=Mostra Valore view.layout.tablature-enabled=Mostra Tablatura view.show-mixer=Mostra Mixer view.show-fretboard=Mostra Tastiera Chitarra view.show-piano=Mostra Piano fretboard.right-mode=Modo destro fretboard.left-mode=Modo sinistro fretboard.background-color=Colore Sfondo fretboard.display-note-text=Mostra Nome Nota fretboard.display-scale-text=Mostra Nome Scala fretboard.font=Carattere fretboard.fretpoint-color=Colore Manico fretboard.note-color=Colore Nota fretboard.scale-note-color=Colore Nota Scala fretboard.settings=Impostazioni Manico fretboard.string-color=Colore Stringa fretboard.settings.options=Opzioni piano.editor=Editor Piano piano.natural-key-color=Colore Scala Naturale piano.not-natural-key-color=Colore Scala Non-Naturale piano.note-color=Colore Nota piano.scale-note-color=Colore Nota Scala piano.settings=Impostazioni Piano composition=Composizione composition.timesignature=Tempo composition.timesignature.Numerator=Numeratore composition.timesignature.denominator=Denominatore composition.timesignature.to-the-end=Fino alla Fine composition.tempo=Velocit\u00e0 Tempo composition.tempo-percent=Percentuale composition.tempo.start-to-end=Applica questo tempo all'intera canzone composition.tempo.position-to-end=Applica questo tempo alla fine composition.tempo.position-to-next=Applica questo tempo fino al prossimo indicatore composition.properties=Propriet\u00e0 composition.name=Nome composition.artist=Artista composition.album=Album composition.author=Autore composition.tempo.invalid=Tempo non valido composition.tripletfeel=Suona come terzina help=Aiuto help.help=Aiuto help.about=Informazioni help.about.license=Licenza help.about.authors=Autori help.about.description=Descrizione mixer=Mixer mixer.volume=Gain mixer.track.solo=Solo mixer.track.mute=Mute mixer.channel.volume=Volume mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Bilanciamento mixer.channel.free=Libero mixer.channel.link=Link track=Traccia track.number=N\u00b0 track.name=Nome track.color=Colore track.first=Prima traccia track.last=Ultima traccia track.previous=Traccia Precedente track.next=Traccia Successiva track.add=Aggiungi traccia track.remove=Rimuovi traccia track.instrument=Strumento track.instrument.empty=Non \u00e8 stato trovato alcun database di suoni nel tuo sistema midi, prova a ricompilare Tuxguitar nella tua versioe Java. track.properties=Propriet\u00e0 track.properties.general=Generale track.name.default-percussion-name=Percussioni track.lyrics=Testo lyric.editor=Modifica Testo measure=Misura measure.first=Prima misura measure.last=Ultima misura measure.previous=Misura precedente measure.next=Misura successiva measure.add=Aggiungi misura measure.add-before-current-position=Aggiungi misura prima della posizione corrente measure.add-after-current-position=Aggiungi misura dopo la posizione corrente measure.add-at-end=Aggiungi misura alla fine measure.remove=Rimuovi misura measure.copy=Copia misura measure.paste=Incolla Misura measure.clean=Elimina misura duration=Durata duration.whole=Semibreve duration.half=Minima duration.quarter=Semiminima duration.eighth=Croma duration.sixteenth=Semicroma duration.thirtysecond=Biscroma duration.sixtyfourth=Semibiscroma duration.dotted=Punto duration.doubledotted=Doppio Punto duration.division-type=Tupleto dynamic=Dinamica dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Effetti effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Nota stoppata effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Whammy Bar effects.tremolo-bar-editor=Modifica Whammy Bar effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Nota Fantasma effects.accentuatednote=Nota accentuata effects.heavyaccentuatednote=Nota fortemente accentuata effects.harmonic=Armonico effects.grace=Appoggiatura effects.grace-editor=Modifica Appoggiatura effects.grace.before-beat=Prima della battuta effects.grace.on-beat=Durante la battuta effects.grace.transition=Appoggiatura effects.grace.transition-none=Nessuna effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Modifica Trill effects.tremolo-picking=Leva Tremolo effects.tremolo-picking-editor=Modifica Leva Tremolo effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Modifica Armonico effects.harmonic.type-of-harmonic=Tipo di Armonico effects.harmonic.natural=Armonico Naturale effects.harmonic.artificial=Armonico artificiale effects.harmonic.artificial.key-offset=Bilanciamento effects.harmonic.tapped=Armonico con Tapping effects.harmonic.tapped.left-hand=Mano Sinistra effects.harmonic.tapped.right-hand=Mano Destra effects.harmonic.pinch=Armonico Pizzicato effects.harmonic.semi=Semi Armonico bend.editor=Modifica Bend bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Suona transport.start=Inizia transport.stop=Ferma repeat.open=Ripeti Apri repeat.close=Ripeti Chiudi repetitions=Ripetizioni repeat.number-of-repetitions=Numero di ripetizioni beat=Nota beat.clean=Elimina Battuta note=Note note.semitone-up=Semitono su note.semitone-down=Semitono Gi\u00f9 note.shift-up=Sposta su note.shift-down=Sposta gi\u00f9 note.tiednote=Nota Legata note.deadnote=Nota Stoppata insert.chord=Inserisci accordo chord.editor=Modifica accordo chord=Accordo chord.name=Nome Accordo chord.custom.name-empty-error=L'accordo non pu\u00f2 essere vuoto. chord.custom.name-exist-error=Il nome dell'accordo esiste gi\ufffd. chord.bass=Basso chord.custom=Accordo Personalizzato chord.settings.tip=Impostazioni Personalizzate chord.settings.type=Tipo chord.settings.type.most-common=Pi\u00f9 Comuni chord.settings.type.inversions=Inversioni chord.settings.type.close-voiced=Close Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Apri Accordi chord.settings.chords-to-display=Accordi da Mostrare chord.settings.search-frets=Cerca Tasti chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max instrument=Strumento instrument.instrument=Strumento instrument.percussion-track=Traccia Percussioni tuning=Accordatura tuning.strings=Corde tuning.offset=Bilanciamento language=Lingua choose-color=Scegli un colore settings=Impostazioni settings.config=Configura TuxGuitar settings.config.view=Vista settings.config.view.mode=Modalit\u00e0 settings.config.view.size=Dimensione finestra settings.config.view.size.maximized=Massimizzata settings.config.view.size.width=Larghezza settings.config.view.size.height=Altezza settings.config.language=Lingua settings.config.language.choose=Scegli la tua lingua settings.config.styles=Stile settings.config.styles.font.default=Font predefinito settings.config.styles.font.note=Font della Nota settings.config.styles.font.time-signature=Font del Tempo settings.config.styles.font.printer-default=Font Predefinito per la Stampante settings.config.styles.font.printer-note=Font della Nota per la Stampante settings.config.styles.font.printer-time-signature=Font del Tempo per la Stampante settings.config.styles.color.score-note=Colore del valore della Nota settings.config.styles.color.tab-note=Colore della Nota sulla Tablatura settings.config.styles.color.play-note=Colore della Nota Suonata settings.config.apply-changes-question=Vuoi applicare i cambiamenti ora? settings.config.sound=Suono settings.config.sound.soundbank=Database dei suoni settings.config.sound.default-soundbank=Usa Database dei suoni predefinto settings.config.sound.custom-soundbank=Usa Database dei suoni personalizzato settings.config.sound.soundbank-restart-message=Devi riavviare TuxGuitar per applicare le modifiche al database dei suoni settings.config.main=Generale settings.config.main.window-title=Titolo Finestra settings.config.main.window-title.help=Le seguenti variabili saranno ricollocate nel titolo della finestra: settings.config.main.window-title.var.description.appname=Questa variabile rappresenta il Nome dell'Applicazione: TuxGuitar settings.config.main.window-title.var.description.appversion=Questa variabile rappresenta la versione di TuxGuitar settings.config.main.window-title.var.description.filename=Questa variabile rappresenta il nome del file aperto settings.config.main.window-title.var.description.filepath=Questa variabile rappresenta il percorso del file aperto settings.config.main.window-title.var.description.songname=Questa variabile rappresenta il nome della canzone settings.config.main.window-title.var.description.songauthor=Questa variabile rappresenta l'autore della canzone settings.config.main.window-title.var.description.songalbum=Questa variabile rappresenta l'album della canzone settings.config.main.window-title.var.description.songartist=Questa variabile rappresenta il cantante della canzone settings.config.main.options=Opzioni settings.config.main.splash-enabled=Lancia lo splash screen all'avvio Launch splash screen on startup settings.config.styles.color.lines=Colore linee orizzontali settings.config.toolbars=Barre degli Strumenti soundbank.error=Errore Database dei Suoni soundbank.error.unavailable=Errore:Database dei Suoni non disponibile. soundbank.error.custom=Errore nell'apertura del database dei suoni personalizzati. settings.keybindings=Configura Tasti di scelta rapida key-bindings-editor=Modifica Tasti di scelta rapida key-bindings-editor-action-select=Scegli un'Azione key-bindings-editor-action-column=Azioni key-bindings-editor-shortcut-column=Tasti key-bindings-editor-push-a-key=Premi un Tasto key-bindings-editor-save-question=Ci sono modifiche non salvate, vuoi uscire senza salvare? key-bindings-editor-reserved-title=Scelta rapida riservata key-bindings-editor-reserved-message=Spiacente,questa scelta rapida \u00e0 riservata key-bindings-editor-override=Scelta rapida gi\u00e0 in uso! Sicuro di volerla usare? print.print=Stampa print.dialog=Stampa print.service=Servizio print.service.name=Nome print.service.status=Stato print.service.type=Tipo print.service.info=Informazioni print.range=Misura print.range.all-pages=Tutta print.range.pages=Pagine print.range.pages-to=A print.copies=Copie print.copies-number=Numero di copie print.print-to-file=Stampa al file print.file-chooser=Scegli print-header.default-song-name=Senza Titolo print-header.default-song-author=Anonimo print.preview=Anteprima Stampa print.preview.page-of=Di view.layout.score-enabled=Mostra Pentagramma view.show-transport=Mostra Trasporto composition.clef=Chiave composition.clef.treble=Chiave di Sol composition.clef.bass=Chiave di Basso composition.clef.tenor=Chiave di Tenore composition.clef.alto=Chiave di Contralto composition.clef.to-the-end=Applica questa Chiave fino alla fine composition.keysignature=Tonalit\u00e0 composition.keysignature.natural=Naturale composition.keysignature.sharp-1=1 Diesis composition.keysignature.sharp-2=2 Diesis composition.keysignature.sharp-3=3 Diesis composition.keysignature.sharp-4=4 Diesis composition.keysignature.sharp-5=5 Diesis composition.keysignature.sharp-6=6 Diesis composition.keysignature.sharp-7=7 Diesis composition.keysignature.flat-1=1 Bemolle composition.keysignature.flat-2=2 Bemolli composition.keysignature.flat-3=3 Bemolli composition.keysignature.flat-4=4 Bemolli composition.keysignature.flat-5=5 Bemolli composition.keysignature.flat-6=6 Bemolli composition.keysignature.flat-7=7 Bemolli composition.keysignature.to-the-end=Applica questa tonalit\u00e0 fino alla fine composition.tripletfeel=Suona come Terzina composition.tripletfeel.none=Non suonare come Terzina composition.tripletfeel.eighth=Terzina 8th composition.tripletfeel.sixteenth=Terzina 16th composition.tripletfeel.to-the-end=Applica "Suona come Terzina" fino alla fine track.clone=Duplica Traccia track.move-up=Muovi su track.move-down=Muovi gi\u00f9 marker=Indicatore marker.add=Aggiungi Indicatore marker.list=Elenco degli Indicatori marker.first=Vai al Primo Indicatore marker.last=Vai all'Ultimo Indicatore marker.next=Vai al Prossimo Indicatore marker.previous=Vai al Precedente Indicatore export.tablature-enabled=Mostra Tablatura export.score-enabled=Mostra Pentagramma scale=Scala scale.list=Elenco delle Scale ######################### ### Tool Bar Items ### ######################### file.items=File edit.items=Modifica property.items=value track.items=Traccia duration.items=Durata beat.items=Note composition.items=Composizione repeat.items=Ripeti transport.items=Suona marker.items=Indicatore insert.items=Inserisci layout.items=Struttura view.items=Vista effect.items=Effetti dynamic.items=Dinamica ######################### ###Key Binding Actions### ######################### action.file.new=Nuovo File action.file.open=Apri File action.file.save=Salva action.file.save-as=Salva come action.file.print=Stampa action.file.print-preview=Anteprima di stampa action.edit.undo=Annulla action.edit.redo=Ripeti action.composition.change-time-signature=Modifica Tempo action.composition.change-tempo=Modifica velocit\u00e0 Tempo action.composition.change-info=Cambia informazioni sulla canzone action.composition.change-clef=Change Chiave action.composition.change-key-signature=Cambia Tonalit\u00e0 action.view.layout-set-page=Mostra Struttura a Pagina action.view.layout-set-linear=Mostra Struttura Lineare action.view.layout-set-multitrack=Mostra Modalit\u00e0 Multitraccia action.view.layout-set-score-enabled=Mostra Pentagramma action.view.show-fretboard=Mostra Tastiera Chitarra action.view.show-piano=Mostra Piano action.view.show-mixer=Mostra Mixer action.view.show-transport=Mostra Trasporto action.track.add=Aggiungi Traccia action.track.remove=Rimuovi Traccia action.track.clone=Duplica Traccia action.track.go-first=Vai alla prima Traccia action.track.go-last=Vai all'ultima Traccia action.track.go-next=Vai alla prossima Traccia action.track.go-previous=Vai alla Traccia precedente action.track.lyrics=Modifica Testo Traccia action.track.properties=Cambia Propriet\u00e0 Traccia action.measure.add=Aggiungi Misura action.measure.remove=Rimuovi Misura action.measure.copy=Copia Misura action.measure.paste=Incolla Misura action.measure.clean=Pulisci Misura action.measure.go-first=Vai alla Prima Misura action.measure.go-last=Vai all'Ultima Misura action.measure.go-next=Vai alla Prossima Misura action.measure.go-previous=Vai alla Misura Precedente action.note.general.clean-beat=Elimina Battuta action.note.general.decrement-semitone=Abbassa di un semitono action.note.general.increment-semitone=Aumenta di un semitono action.note.general.shift-down=Sposta in gi\u00f9 action.note.general.shift-up=Sposta in su action.note.general.tied=Aggiungi/Rimuovi nota legata action.note.duration.change-dotted=Aggiungi/Rimuovi punto action.note.duration.change-double-dotted=Aggiungi/Rimuovi doppio punto action.note.duration.change-division-type=Aggiungi/Rimuovi Tupleto action.note.effect.change-vibrato=Aggiungi/Rimuovi vibrato action.note.effect.change-bend=Aggiungi/Rimuovi bend action.note.effect.change-slide=Aggiungi/Rimuovi slide action.note.effect.change-hammer=Aggiungi/Rimuovi hammer-on/pull-off action.note.effect.change-accentuated=Aggiungi/Rimuovi nota accentuata action.note.effect.change-dead=Aggiungi/Rimuovi nota stoppata action.note.effect.change-fade-in=Aggiungi/Rimuovi fade in action.note.effect.change-ghost=Aggiungi/Rimuovi nota fantasma action.note.effect.change-grace=Aggiungi/Rimuovi appoggiatura action.note.effect.change-harmonic=Aggiungi/Rimuovi armonico action.note.effect.change-heavy-accentuated=Aggiungi/Rimuovi nota fortemente accentuata action.note.effect.change-palm-mute=Aggiungi/Rimuovi palm mute action.note.effect.change-popping=Aggiungi/Rimuovi popping action.note.effect.change-slapping=Aggiungi/Rimuovi slapping action.note.effect.change-staccato=Aggiungi/Rimuovi staccato action.note.effect.change-tapping=Aggiungi/Rimuovi tapping action.note.effect.change-tremolo-bar=Aggiungi/Rimuovi Whammy bar action.note.effect.change-tremolo-picking=Aggiungi/Rimuovi Leva tremolo action.note.effect.change-trill=Aggiungi/Rimuovi Trill action.insert.open-repeat=Apri ripetizione action.insert.close-repeat=Chiudi ripetizione action.insert.chord=Inserisci accordo action.transport.play=Suona la canzone action.transport.stop=Ferma il suono view.show-matrix=Mostra Matrice matrix.editor=Editor Matrice matrix.grids=Numero di Colonne matrix.border-color=Colore Bordo matrix.font=Carattere matrix.foreground-color=Colore Primo piano matrix.line-color-1=Colore Linea 1 matrix.line-color-2=Colore Linea 2 matrix.line-color-over=Colore Sovrapposto matrix.note-color=Colore Nota matrix.play-note-color=Colore Nota Attiva matrix.position-color=Colore Posizione matrix.settings=Impostazioni Matrice help.doc=Documentazione transport.first=Primo transport.last=Ultimo transport.previous=Precedente transport.next=Prossimo transport.pause=Pausa transport.metronome=Metronomo transport.mode=Modalit\u00e0 Player transport.mode.simple=Modalit\u00e0 Player Singolo transport.mode.simple.tempo-percent=Tempo Percentuale transport.mode.simple.loop=Suona Ciclo Singolo transport.mode.trainer=Modalit\u00e0 Allenamento transport.mode.trainer.increment-description=Incrementa di repeat.alternative=Ripeti Alternative repeat.alternative.editor=Modifica Ripeti Alternative tools=Strumenti tools.scale=Lista Scale tools.browser=Browser tools.plugins=Plugin tools.shortcuts=Scorciatoie tools.settings=Impostazioni browser.dialog=Browser browser.menu.file=File browser.open=Apri browser.exit=Esci browser.menu.collection=Collezione browser.menu.go=Vai browser.collection.select=Seleziona Collezione browser.collection.open=Apri browser.collection.remove=Rimuovi browser.collection.close=Chiudi browser.collection.new=Nuovo browser.go-root=Home browser.go-back=Indietro browser.refresh=Pulisci browser.factory.fs.name=File System browser.collection.fs.path=Cartella browser.collection.fs.name=Nome browser.collection.fs.editor-title=Collezione File System browser.collection.fs.editor-tip=Scegli la cartella della collezione browser.collection.fs.invalid-path=Per favore, seleziona una cartella valida midi.port=Porta MIDI midi.sequencer=Sequencer MIDI text.editor=Editor di testo text.insert=Inserisci Testo text.text=Testo plugin.column.name=Nome Plugin plugin.column.enabled=Abilitato plugin.unknown-value=Non disponibile. settings.config.main.table.auto-size.enabled=Abilita ridimensionamento Automatico Tabella settings.config.styles.general=Stile Generale settings.config.styles.printer=Stile Stampante settings.config.styles.font.lyric=Caratteri Testi settings.config.styles.font.text=Carattere di Testo settings.config.skin=Temi settings.config.skin.choose=Scegli il tuo Tema settings.config.toolbars.tip=Personalizza la Barra degli Strumenti settings.config.toolbars.list=Barre degli Strumenti Disponibili settings.config.toolbars.move-up=Muovi Su settings.config.toolbars.move-down=Muovi Gi\u00f9 action.file.open-url=Apri URL action.file.exit=Esci da TuxGuitar action.insert.text=Inserisci Testo action.insert.repeat-alternative=Ripeti Alternativa action.composition.change-triplet-feel=Modifica Terzina action.note.duration.set-whole=Imposta Durata Semibreve action.note.duration.set-half=Imposta Durata Minima action.note.duration.set-quarter=Imposta Durata Semiminima action.note.duration.set-eighth=Imposta Durata Croma action.note.duration.set-sixteenth=Imposta Durata SemiCroma action.note.duration.set-thirty-second=Imposta Durata Biscroma action.note.duration.set-sixty-fourth=Imposta Durata Semibiscroma action.note.duration.decrement-duration=Decrementa Durata action.note.duration.increment-duration=Incrementa Durata action.track.move-down=Sposta gi\u00f9 action.track.move-up=Sposta su action.tools.browser=Browser action.transport.metronome=Metrononomo action.transport.mode=Modalit\u00e0 action.view.show-matrix=Mostra Matrice action.view.layout-set-chord-diagram-enabled=Abilita Diagramma Accordo action.view.layout-set-chord-name-enabled=Abilita Nome Accordo action.view.layout-set-compact=Mostra Modalit\u00e0 Compatta action.view.layout-set-tablature-enabled=Mostra Tablatura action.marker.add=Aggiungi Indicatore action.marker.go-next=Vai al Prossimo Indicatore action.marker.go-previous=Vai al Precedente Indicatore action.settings.configure=Impostazioni action.help.doc=Aiuto tuxguitar-src-1.2/TuxGuitar/share/lang/messages_ja.properties0000644000175000017500000011602311273045225024105 0ustar julianjulianok=Ok cancel=\u30ad\u30e3\u30f3\u30bb\u30eb yes=\u306f\u3044 no=\u3044\u3044\u3048 add=\u8ffd\u52a0 edit=\u7de8\u96c6 remove=\u524a\u9664 save=\u4fdd\u5b58 exit=\u7d42\u4e86 close=\u9589\u3058\u308b choose=\u9078\u629e color=\u8272 title=\u30bf\u30a4\u30c8\u30eb go=\u79fb\u52d5 warning=\u8b66\u544a error=\u30a8\u30e9\u30fc plugins=\u30d7\u30e9\u30b0\u30a4\u30f3 options=\u30aa\u30d7\u30b7\u30e7\u30f3 defaults=\u30c7\u30d5\u30a9\u30eb\u30c8 clean=\u9664\u53bb rename=\u540d\u79f0\u5909\u66f4 fret=\u30d5\u30ec\u30c3\u30c8 position=\u30dd\u30b8\u30b7\u30e7\u30f3 name=\u540d\u524d author=\u8457\u4f5c\u8005 version=\u30d0\u30fc\u30b8\u30e7\u30f3 description=\u8a73\u7d30 info=\u60c5\u5831 configure=\u8a2d\u5b9a url=URL file=\u30d5\u30a1\u30a4\u30eb file.new=\u65b0\u898f file.open=\u958b\u304f file.save=\u4fdd\u5b58 file.save-as=\u5225\u540d\u4fdd\u5b58 file.save-changes-question=\u30d5\u30a1\u30a4\u30eb\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059.\n\u5909\u66f4\u3092\u4fdd\u5b58\u3057\u307e\u3059\u304b? file.exit=\u7d42\u4e86 file.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 file.export-midi=MIDI file.export-pdf=PDF file.print=\u5370\u5237 file.print-preview=\u5370\u5237\u30d7\u30ec\u30d3\u30e5 file.import=\u30a4\u30f3\u30dd\u30fc\u30c8 file.import-midi=MIDI file.export-ascii=ASCII file.history=\u5c65\u6b74 file.open-url=URL\u3092\u958b\u304f file.open.error=\u958b\u3051\u307e\u305b\u3093: {0} file.save.error=\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093: {0} file.import.error=\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093: {0} file.export.error=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093: {0} file.overwrite-question=\u540c\u540d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059.\n\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b? edit.menu=\u7de8\u96c6 edit.undo=\u5143\u306b\u623b\u3059 edit.redo=\u3084\u308a\u76f4\u3059 edit.copy=\u30b3\u30d4\u30fc edit.from=\u958b\u59cb edit.to=\u7d42\u4e86 edit.all-tracks=\u3059\u3079\u3066\u306e\u30c8\u30e9\u30c3\u30af edit.paste=\u8cbc\u308a\u4ed8\u3051 edit.paste.count=\u8cbc\u308a\u4ed8\u3051\u308b\u7dcf\u6570 edit.paste.replace-mode=\u73fe\u5728\u306e\u5c0f\u7bc0\u304b\u3089\u8cbc\u308a\u4ed8\u308b edit.paste.insert-mode=\u65b0\u3057\u3044\u5c0f\u7bc0\u304b\u3089\u8cbc\u308a\u4ed8\u308b edit.delete=\u524a\u9664 edit.cut=\u30ab\u30c3\u30c8 edit.mouse-mode-selection=\u9078\u629e\u30fb\u30e2\u30fc\u30c9 edit.mouse-mode-edition=\u30b9\u30b3\u30a2\u7de8\u96c6\u30fb\u30e2\u30fc\u30c9 edit.not-natural-key=\u30b7\u30e3\u30fc\u30d7/\u30d5\u30e9\u30c3\u30c8\u30fb\u30e2\u30fc\u30c9 edit.voice-1=\u97f3\u58f0\u9078\u629e 1 edit.voice-2=\u97f3\u58f0\u9078\u629e 2 view=\u8868\u793a view.layout=\u8868\u793a view.layout.page=\u7e26\u30da\u30fc\u30b8 view.layout.linear=\u6a2a\u30b9\u30af\u30ed\u30fc\u30eb view.layout.compact=\u30b3\u30f3\u30d1\u30af\u30c8 view.layout.multitrack=\u30de\u30eb\u30c1\u30c8\u30e9\u30c3\u30af view.layout.chord-style=\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb view.layout.chord-name=\u30b3\u30fc\u30c9\u540d\u3092\u8868\u793a view.layout.chord-diagram=\u30b3\u30fc\u30c9\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0\u3092\u8868\u793a view.layout.score-enabled=\u4e94\u7dda\u8868\u8a18 view.layout.tablature-enabled=TAB\u8b5c view.show-mixer=\u30df\u30ad\u30b5 view.show-fretboard=\u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9 view.show-piano=\u30d4\u30a2\u30ce view.show-matrix=\u30de\u30c8\u30ea\u30c3\u30af\u30b9 view.show-transport=\u30d7\u30ec\u30fc\u30e4 fretboard.direction=\u65b9\u5411 fretboard.right-mode=\u30e9\u30a4\u30c8 fretboard.left-mode=\u30ec\u30d5\u30c8 fretboard.background-color=\u80cc\u666f fretboard.display-note-text=\u97f3\u540d\u3092\u8868\u793a\u3059\u308b fretboard.display-scale-text=\u30b9\u30b1\u30fc\u30eb\u3092\u8868\u793a\u3059\u308b fretboard.font=\u30d5\u30a9\u30f3\u30c8 fretboard.fretpoint-color=\u30dd\u30b8\u30b7\u30e7\u30f3\u30fb\u30de\u30fc\u30af fretboard.note-color=\u97f3\u540d fretboard.scale-note-color=\u30b9\u30b1\u30fc\u30eb fretboard.settings=\u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9\u8a2d\u5b9a fretboard.string-color=\u5f26 fretboard.settings.options=\u30aa\u30d7\u30b7\u30e7\u30f3 piano.editor=\u30d4\u30a2\u30ce\u30fb\u30a8\u30c7\u30a3\u30bf piano.natural-key-color=\u767d\u9375 piano.not-natural-key-color=\u9ed2\u9375 piano.note-color=\u6f14\u594f\u4e2d\u306e\u9375\u76e4 piano.scale-note-color=\u30b9\u30b1\u30fc\u30eb piano.settings=\u30d4\u30a2\u30ce\u8a2d\u5b9a matrix.editor=\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u30fb\u30a8\u30c7\u30a3\u30bf matrix.grids=\u30b0\u30ea\u30c3\u30c8\u306e\u6570 matrix.border-color=\u5883\u754c\u7dda matrix.font=\u30d5\u30a9\u30f3\u30c8 matrix.foreground-color=\u8868\u9762 matrix.line-color-1=\u5947\u6570\u5217 matrix.line-color-2=\u5076\u6570\u5217 matrix.line-color-over=\u30de\u30a6\u30b9\u30aa\u30fc\u30d0 matrix.note-color=\u97f3\u7b26 matrix.play-note-color=\u6f14\u594f\u4e2d\u306e\u30b0\u30ea\u30c3\u30c9 matrix.position-color=\u30dd\u30b8\u30b7\u30e7\u30f3 matrix.settings=\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u8a2d\u5b9a composition=\u62cd\u5b50 composition.timesignature=\u62cd\u5b50\u8a18\u53f7 composition.timesignature.Numerator=\u5206\u5b50 composition.timesignature.denominator=\u5206\u6bcd composition.timesignature.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b composition.tempo=\u30c6\u30f3\u30dd composition.tempo-percent=\u30d1\u30fc\u30bb\u30f3\u30c8 composition.tempo.invalid=\u7121\u52b9\u306a\u30c6\u30f3\u30dd\u3067\u3059 composition.tempo.start-to-end=\u5168\u4f53\u306b\u9069\u7528\u3059\u308b composition.tempo.position-to-end=\u73fe\u5c0f\u7bc0\u304b\u3089\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b composition.tempo.position-to-next=\u6b21\u306e\u30c6\u30f3\u30dd\u30c1\u30a7\u30f3\u30b8\u307e\u3067\u9069\u7528\u3059\u308b composition.properties=\u30b9\u30b3\u30a2\u60c5\u5831\u306e\u7de8\u96c6 composition.name=\u66f2\u540d composition.artist=\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8 composition.album=\u30a2\u30eb\u30d0\u30e0 composition.author=\u8457\u4f5c\u8005 composition.date=\u4f5c\u6210\u65e5 composition.copyright=\u8457\u4f5c\u6a29 composition.writer=TAB\u8b5c composition.transcriber=\u7de8\u66f2 composition.comments=\u30b3\u30e1\u30f3\u30c8 composition.tripletfeel=\u9023\u7b26 composition.clef=\u97f3\u90e8\u8a18\u53f7 composition.clef.treble=\u30c8\u97f3\u8a18\u53f7 - G - \u30c8\u30ec\u30d6\u30eb composition.clef.bass=\u30d8\u97f3\u8a18\u53f7 - F - \u30d0\u30b9 composition.clef.tenor=\u30cf\u97f3\u8a18\u53f7 - C - \u30c6\u30ce\u30fc\u30eb composition.clef.alto=\u30cf\u97f3\u8a18\u53f7 - C - \u30a2\u30eb\u30c8 composition.clef.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b composition.keysignature=\u8abf\u5b50\u8a18\u53f7 composition.keysignature.natural=\u266e composition.keysignature.sharp-1=\u266f composition.keysignature.sharp-2=\u266f\u266f composition.keysignature.sharp-3=\u266f\u266f\u266f composition.keysignature.sharp-4=\u266f\u266f\u266f\u266f composition.keysignature.sharp-5=\u266f\u266f\u266f\u266f\u266f composition.keysignature.sharp-6=\u266f\u266f\u266f\u266f\u266f\u266f composition.keysignature.sharp-7=\u266f\u266f\u266f\u266f\u266f\u266f\u266f composition.keysignature.flat-1=\u266d composition.keysignature.flat-2=\u266d\u266d composition.keysignature.flat-3=\u266d\u266d\u266d composition.keysignature.flat-4=\u266d\u266d\u266d\u266d composition.keysignature.flat-5=\u266d\u266d\u266d\u266d\u266d composition.keysignature.flat-6=\u266d\u266d\u266d\u266d\u266d\u266d composition.keysignature.flat-7=\u266d\u266d\u266d\u266d\u266d\u266d\u266d composition.keysignature.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b composition.tripletfeel=\u30b9\u30a6\u30a3\u30f3\u30b0\u30fb\u30d5\u30a3\u30fc\u30eb composition.tripletfeel.none=\u7121\u52b9\u306b\u3059\u308b composition.tripletfeel.eighth=8\u9023\u7b26 composition.tripletfeel.sixteenth=16\u9023\u7b26 composition.tripletfeel.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b help=\u30d8\u30eb\u30d7 help.help=\u30d8\u30eb\u30d7 help.doc=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 help.about=TuxGuitar \u306b\u3064\u3044\u3066 help.about.license=\u30e9\u30a4\u30bb\u30f3\u30b9 help.about.authors=\u8457\u4f5c\u8005 help.about.description=\u8a73\u7d30 track=\u30c8\u30e9\u30c3\u30af track.number=No track.name=\u30c8\u30e9\u30c3\u30af\u540d track.color=\u8272 track.first=\u5148\u982d\u30c8\u30e9\u30c3\u30af track.last=\u6700\u7d42\u30c8\u30e9\u30c3\u30af track.previous=\u524d\u30c8\u30e9\u30c3\u30af track.next=\u6b21\u30c8\u30e9\u30c3\u30af track.add=\u30c8\u30e9\u30c3\u30af\u8ffd\u52a0 track.remove=\u30c8\u30e9\u30c3\u30af\u524a\u9664 track.clone=\u30c8\u30e9\u30c3\u30af\u8907\u88fd track.move-up=\u30c8\u30e9\u30c3\u30af\u3092\u4e0a\u306b\u79fb\u52d5\u3055\u305b\u308b track.move-down=\u30c8\u30e9\u30c3\u30af\u3092\u4e0b\u306b\u79fb\u52d5\u3055\u305b\u308b track.instrument=\u697d\u5668 track.properties=\u30c8\u30e9\u30c3\u30af\u306e\u30d7\u30ed\u30d1\u30c6\u30a3 track.properties.general=\u4e00\u822c track.name.default-percussion-name=Drums track.lyrics=\u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f lyric.editor=\u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf measure=\u5c0f\u7bc0 measure.first=\u5148\u982d\u306e\u5c0f\u7bc0\u3078 measure.last=\u6700\u5f8c\u306e\u5c0f\u7bc0\u3078 measure.previous=\u524d\u306e\u5c0f\u7bc0\u3078 measure.next=\u6b21\u306e\u5c0f\u7bc0\u3078 measure.add=\u8ffd\u52a0 (\u7a7a\u5c0f\u7bc0) measure.add.count=\u8ffd\u52a0\u3059\u308b\u7dcf\u6570 measure.add-before-current-position=\u9078\u629e\u7b87\u6240\u306e\u524d\u306b\u8ffd\u52a0 measure.add-after-current-position=\u9078\u629e\u7b87\u6240\u306e\u5f8c\u306b\u8ffd\u52a0 measure.add-at-end=\u6700\u5f8c\u306b\u8ffd\u52a0 measure.remove=\u524a\u9664 (\u7bc4\u56f2\u6307\u5b9a) measure.copy=\u30b3\u30d4\u30fc (\u7bc4\u56f2\u6307\u5b9a) measure.paste=\u8cbc\u308a\u4ed8\u3051 measure.clean=\u30af\u30ea\u30a2 (\u9078\u629e\u5c0f\u7bc0) duration=\u97f3\u4fa1 duration.whole=\u5168\u97f3\u7b26 duration.half=2\u5206\u97f3\u7b26 duration.quarter=4\u5206\u97f3\u7b26 duration.eighth=8\u5206\u97f3\u7b26 duration.sixteenth=16\u5206\u97f3\u7b26 duration.thirtysecond=32\u5206\u97f3\u7b26 duration.sixtyfourth=64\u5206\u97f3\u7b26 duration.dotted=\u4ed8\u70b9 duration.doubledotted=\u8907\u4ed8\u70b9 duration.division-type=\u9023\u7b26 dynamic=\u5f37\u5f31\u8a18\u53f7 dynamic.piano-pianissimo=ppp - \u30d4\u30a2\u30ce\u30fb\u30d4\u30a2\u30cb\u30c3\u30b7\u30e2 dynamic.pianissimo=pp - \u30d4\u30a2\u30cb\u30c3\u30b7\u30e2 dynamic.piano=p - \u30d4\u30a2\u30ce dynamic.mezzo-piano=mp - \u30e1\u30c3\u30be\u30fb\u30d4\u30a2\u30ce dynamic.mezzo-forte=mf - \u30e1\u30c3\u30be\u30fb\u30d5\u30a9\u30eb\u30c6 dynamic.forte=f - \u30d5\u30a9\u30eb\u30c6 dynamic.fortissimo=ff - \u30d5\u30a9\u30eb\u30c6\u30a3\u30c3\u30b7\u30e2 dynamic.forte-fortissimo=fff - \u30d5\u30a9\u30eb\u30c6\u30fb\u30d5\u30a9\u30eb\u30c6\u30a3\u30c3\u30b7\u30e2 effects=\u30a8\u30d5\u30a7\u30af\u30c8/\u30c6\u30af\u30cb\u30c3\u30af effects.vibrato=\uff5e - \u30f4\u30a3\u30d6\u30e9\u30fc\u30c8 effects.bend=C - \u30c1\u30e7\u30fc\u30ad\u30f3\u30b0 effects.deadnote=x - \u30c7\u30c3\u30c9\u30ce\u30fc\u30c8/\u30d6\u30e9\u30c3\u30b7\u30f3\u30b0 effects.slide=S - \u30b9\u30e9\u30a4\u30c9 effects.hammer=H / P - \u30cf\u30f3\u30de\u30ea\u30f3\u30b0\u30fb\u30aa\u30f3/\u30d7\u30ea\u30f3\u30b0\u30fb\u30aa\u30d5 effects.tremolo-bar=Arm. - \u30c8\u30ec\u30e2\u30ed\u30a2\u30fc\u30e0 effects.tremolo-bar-editor=\u30c8\u30ec\u30e2\u30ed\u30a2\u30fc\u30e0\u30fb\u30a8\u30c7\u30a3\u30bf effects.tremolo-bar.dip=\uff3c\uff0f effects.tremolo-bar.dive=\uff3c effects.tremolo-bar.release-up=\uff3f\uff0f effects.tremolo-bar.release-down=\uffe3\uff3c effects.tremolo-bar.inverted-dip=\uff0f\uff3c effects.tremolo-bar.return=\uff0f effects.ghostnote=( ) - \u30b4\u30fc\u30b9\u30c8\u30ce\u30fc\u30c8 effects.accentuatednote=^ - \u30a2\u30af\u30bb\u30f3\u30c8 effects.heavyaccentuatednote=^^ - \u91cd\u30a2\u30af\u30bb\u30f3\u30c8 effects.harmonic=Harm. - \u30cf\u30fc\u30e2\u30cb\u30af\u30b9 effects.grace=\u2669 - \u88c5\u98fe\u97f3\u7b26 effects.grace-editor=\u88c5\u98fe\u97f3\u7b26\u30fb\u30a8\u30c7\u30a3\u30bf effects.grace.before-beat=\u62cd\u306e\u524d effects.grace.on-beat=\u62cd\u306e\u4f4d\u7f6e effects.grace.transition=\u63a5\u7d9a\u52b9\u679c effects.grace.transition-none=\u306a\u3057 effects.grace.transition-bend=C - \u30c1\u30e7\u30fc\u30ad\u30f3\u30b0 effects.grace.transition-slide=S - \u30b9\u30e9\u30a4\u30c9 effects.grace.transition-hammer=H - \u30cf\u30f3\u30de\u30ea\u30f3\u30b0\u30fb\u30aa\u30f3 effects.trill=tr. - \u30c8\u30ea\u30eb effects.trill-editor=\u30c8\u30ea\u30eb\u30fb\u30a8\u30c7\u30a3\u30bf effects.tremolo-picking=Picking Tr. - \u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30c8\u30ea\u30eb effects.tremolo-picking-editor=\u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30c8\u30ea\u30eb\u30fb\u30a8\u30c7\u30a3\u30bf effects.palm-mute=M - \u30d6\u30ea\u30c3\u30b8\u30fb\u30df\u30e5\u30fc\u30c8 effects.staccato= \uff0e - \u30b9\u30bf\u30c3\u30ab\u30fc\u30c8 effects.tapping=Tapping - \u30bf\u30c3\u30d4\u30f3\u30b0 effects.slapping=\u30b9\u30e9\u30c3\u30d4\u30f3\u30b0/\u30c1\u30e7\u30c3\u30d1 effects.popping=\u30dd\u30c3\u30d4\u30f3\u30b0 effects.fade-in=\uff1c - \u30d5\u30a7\u30fc\u30c9\u30a4\u30f3 effects.harmonic-editor=\u30cf\u30fc\u30e2\u30cb\u30af\u30b9\u30fb\u30a8\u30c7\u30a3\u30bf effects.harmonic.type-of-harmonic=\u7a2e\u985e effects.harmonic.natural=Harm. - \u30cf\u30fc\u30e2\u30cb\u30af\u30b9 effects.harmonic.artificial=A.h - \u4eba\u53e3\u30cf\u30fc\u30e2\u30cb\u30af\u30b9 effects.harmonic.artificial.key-offset=\u30ab\u30dd effects.harmonic.tapped=Both Hand Tapping Harm. - \u30bf\u30c3\u30d4\u30f3\u30b0\u30fb\u30cf\u30fc\u30e2\u30cb\u30af\u30b9 effects.harmonic.tapped.left-hand=Left Hand Tapping - \u30ec\u30d5\u30c8\u30cf\u30f3\u30c9 effects.harmonic.tapped.right-hand=Right Hand Tapping - \u30e9\u30a4\u30c8\u30cf\u30f3\u30c9 effects.harmonic.pinch=P.h - \u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30cf\u30fc\u30e2\u30cb\u30af\u30b9 effects.harmonic.semi=S.h - \u30bb\u30df\u30fb\u30cf\u30fc\u30e2\u30cb\u30af\u30b9 bend.editor=\u30c1\u30e7\u30fc\u30ad\u30f3\u30b0\u30fb\u30a8\u30c7\u30a3\u30bf bend.bend=\uff3f\u2191 bend.bend-release=\uff3f\u2191\uffe3\u2193 bend.bend-release-bend=\uff3f\u2191\uffe3\u2193\uff3f\u2191 bend.prebend=\uffe3\uffe3 bend.prebend-release=\uffe3\u2193 transport=\u30d7\u30ec\u30fc\u30e4 transport.start=\u518d\u751f transport.stop=\u505c\u6b62 transport.pause=\u4e00\u6642\u505c\u6b62 transport.first=\u66f2\u306e\u5148\u982d transport.last=\u66f2\u306e\u6700\u5f8c transport.previous=\u524d\u306e\u5c0f\u7bc0 transport.next=\u6b21\u306e\u5c0f\u7bc0 transport.metronome=\u30e1\u30c8\u30ed\u30ce\u30fc\u30e0 ON/OFF transport.mode=\u518d\u751f\u8a2d\u5b9a transport.mode.simple=\u30b7\u30f3\u30d7\u30eb\u30fb\u30e2\u30fc\u30c9 transport.mode.simple.tempo-percent=\u30c6\u30f3\u30dd [%] transport.mode.simple.loop=\u30ea\u30d4\u30fc\u30c8 transport.mode.trainer=\u30c8\u30ec\u30a4\u30cb\u30f3\u30b0\u30fb\u30e2\u30fc\u30c9 transport.mode.trainer.increment-description=\u30ea\u30d4\u30fc\u30c8\u6bce\u306e\u901f\u5ea6\u5897\u52a0 [%] transport.mode.loop-range=\u30eb\u30fc\u30d7\u8abf\u6574 transport.mode.loop-range.from=\u518d\u751f\u3092\u958b\u59cb\u3059\u308b\u5c0f\u7bc0 transport.mode.loop-range.from-default=\u6700\u521d\u304b\u3089 transport.mode.loop-range.to=\u518d\u751f\u3092\u7d42\u4e86\u3059\u308b\u5c0f\u7bc0 transport.mode.loop-range.to-default=\u6700\u5f8c\u307e\u3067 transport.set-loop-start=\u30eb\u30fc\u30d7\u306e\u958b\u59cb\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a transport.set-loop-end=\u30eb\u30fc\u30d7\u306e\u7d42\u4e86\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a mixer=\u30df\u30ad\u30b5 mixer.volume=\u30b2\u30a4\u30f3 mixer.track.solo=\u30bd\u30ed mixer.track.mute=\u30df\u30e5\u30fc\u30c8 mixer.channel.volume=\u30dc\u30ea\u30e5\u30fc\u30e0 mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=\u30d0\u30e9\u30f3\u30b9 mixer.channel.free=\u672a\u4f7f\u7528 mixer.channel.link=\u4f7f\u7528\u4e2d repeat.open=\u30ea\u30d4\u30fc\u30c8\u958b\u59cb repeat.close=\u30ea\u30d4\u30fc\u30c8\u7d42\u4e86 repeat.alternative=\u30ab\u30c3\u30b3 repeat.alternative.editor=\u30ab\u30c3\u30b3\u306e\u7de8\u96c6 repetitions=\u30ea\u30d4\u30fc\u30c8 repeat.number-of-repetitions=\u30ea\u30d4\u30fc\u30c8\u6570 beat=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8 beat.clean=1\u62cd\u9664\u53bb beat.voice.remove-unused=\u672a\u4f7f\u7528\u97f3\u58f0\u306e\u9664\u53bb beat.voice-up=\u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0a\u306b\u3059\u308b beat.voice-down=\u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0b\u306b\u3059\u308b beat.voice-auto=\u7b26\u5c3e\u306e\u5411\u304d\u306e\u81ea\u52d5\u8abf\u6574 beat.stroke-up=\u2193\u30a2\u30c3\u30d7\u30b9\u30c8\u30ed\u30fc\u30af beat.stroke-down=\u2191\u30c0\u30a6\u30f3\u30b9\u30c8\u30ed\u30fc\u30af beat.move-left=1\u62cd\u5de6\u3078\u79fb\u52d5\u3059\u308b beat.move-right=1\u62cd\u53f3\u3078\u79fb\u52d5\u3059\u308b beat.move-custom=\u62cd\u79fb\u52d5\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba beat.move-custom.dialog.title=\u79fb\u52d5\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba beat.move-custom.dialog.direction-tip=\u79fb\u52d5\u306e\u65b9\u5411 beat.move-custom.dialog.move-1.tip=\u7b2c\u4e00\u79fb\u52d5 beat.move-custom.dialog.move-2.tip=\u7b2c\u4e8c\u79fb\u52d5 beat.move-custom.dialog.direction=\u65b9\u5411 beat.move-custom.dialog.direction.right=\u53f3\u3078\u79fb\u52d5 beat.move-custom.dialog.direction.left=\u5de6\u3078\u79fb\u52d5 beat.move-custom.dialog.count=\u8ffd\u52a0\u3059\u308b\u7dcf\u6570 beat.move-custom.dialog.duration=\u97f3\u4fa1 beat.move-custom.dialog.duration.type=\u4ed8\u70b9/\u8907\u4ed8\u70b9 beat.move-custom.dialog.duration.type.normal=\u306a\u3057 beat.move-custom.dialog.duration.division-type=\u9023\u7b26 beat.move-custom.dialog.duration.division-type.normal=\u6a19\u6e96 (\u9023\u7b26) note=\u97f3\u7b26 note.semitone-up=\u534a\u97f3\u4e0a\u3052\u308b note.semitone-down=\u534a\u97f3\u4e0b\u3052\u308b note.shift-up=\u4e0a\u5f26\u306b\u30b7\u30d5\u30c8 note.shift-down=\u4e0b\u5f26\u306b\u30b7\u30d5\u30c8 note.tiednote=\u30bf\u30a4 note.deadnote=x - \u30c7\u30c3\u30c9\u30ce\u30fc\u30c8/\u30d6\u30e9\u30c3\u30b7\u30f3\u30b0 insert.chord=\u30b3\u30fc\u30c9\u633f\u5165 chord.editor=\u30b3\u30fc\u30c9\u30fb\u30a8\u30c7\u30a3\u30bf chord=\u30b3\u30fc\u30c9 chord.name=\u30b3\u30fc\u30c9\u540d chord.bass=\u30d9\u30fc\u30b9\u97f3 chord.custom=\u30ab\u30b9\u30bf\u30e0\u30fb\u30b3\u30fc\u30c9 chord.custom.name-empty-error=\u30b3\u30fc\u30c9\u540d\u304c\u672a\u5165\u529b\u3067\u3059. chord.custom.name-exist-error=\u30b3\u30fc\u30c9\u540d\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059. chord.settings.tip=\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a chord.settings.type=\u30bf\u30a4\u30d7 chord.settings.type.most-common=\u30e2\u30b9\u30c8\u30fb\u30b3\u30e2\u30f3/\u5171\u901a\u5f8b chord.settings.type.inversions=\u30a4\u30f3\u30f4\u30a1\u30fc\u30b8\u30e7\u30f3/\u8ee2\u56de\u5f62 chord.settings.type.close-voiced=\u30af\u30ed\u30fc\u30ba\u30fb\u30f4\u30a9\u30a4\u30b7\u30f3\u30b0/\u5bc6\u96c6\u548c\u58f0\u914d\u7f6e chord.settings.type.open-voiced=\u30aa\u30fc\u30d7\u30f3\u30fb\u30f4\u30a9\u30a4\u30b7\u30f3\u30b0/\u958b\u653e\u548c\u58f0\u914d\u7f6e chord.settings.open-chords=\u30aa\u30fc\u30d7\u30f3\u30fb\u30b3\u30fc\u30c9/\u958b\u653e\u5f26\u3092\u542b\u3081\u308b chord.settings.chords-to-display=\u8868\u793a\u3059\u308b\u30b3\u30fc\u30c9\u6570 chord.settings.search-frets=\u691c\u7d22\u3059\u308b\u30d5\u30ec\u30c3\u30c8\u306e\u7bc4\u56f2 chord.settings.minimum-fret=\u6700\u5c0f chord.settings.maximum-fret=\u6700\u5927 instrument=\u6f14\u594f\u697d\u5668 instrument.instrument=\u697d\u5668 instrument.percussion-track=\u30c9\u30e9\u30e0 / \u30d1\u30fc\u30ab\u30c3\u30b7\u30e7\u30f3 tuning=\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0 tuning.strings=\u5f26\u306e\u6570 tuning.offset=\u30ab\u30dd tuning.strings.transpose=\u97f3\u7b26\u3092\u79fb\u8abf\u3059\u308b tuning.strings.transpose.try-keep-strings=\u97f3\u7b26\u306f\u540c\u3058\u5f26\u3092\u7dad\u6301\u3059\u308b tuning.strings.transpose.apply-to-chords=\u30b3\u30fc\u30c9\u3092\u79fb\u8abf\u3059\u308b language=\u8a00\u8a9e/Language choose-color=\u8272\u306e\u9078\u629e settings=\u8a2d\u5b9a settings.config=TuxGuitar \u74b0\u5883\u8a2d\u5b9a settings.config.language=\u8a00\u8a9e/Language settings.config.language.choose=\u8a00\u8a9e\u306e\u9078\u629e/Choose Language settings.config.styles=\u30b9\u30bf\u30a4\u30eb settings.config.styles.general=\u4e00\u822c settings.config.styles.printer=\u5370\u5237 settings.config.styles.font.default=\u30c7\u30d5\u30a9\u30eb\u30c8 settings.config.styles.font.note=\u97f3\u7b26 settings.config.styles.font.lyric=\u6b4c\u8a5e settings.config.styles.font.text=\u30c6\u30ad\u30b9\u30c8 settings.config.styles.font.time-signature=\u62cd\u5b50\u8a18\u53f7 settings.config.styles.font.printer-default=\u5370\u5237\u30c7\u30d5\u30a9\u30eb\u30c8 settings.config.styles.font.printer-note=\u5370\u5237\u7528\u306e\u97f3\u7b26 settings.config.styles.font.printer-time-signature=\u5370\u5237\u7528\u306e\u62cd\u5b50\u8a18\u53f7 settings.config.styles.color.score-note=\u4e94\u7dda\u8b5c\u306e\u6f14\u594f\u8a18\u53f7 settings.config.styles.color.tab-note=TAB\u8b5c\u306e\u6f14\u594f\u8a18\u53f7 settings.config.styles.color.play-note=\u518d\u751f\u4e2d\u306e\u97f3\u7b26 settings.config.apply-changes-question=\u8a2d\u5b9a\u5909\u66f4\u3092\u9069\u7528\u3057\u307e\u3059\u304b?\n Do you want to apply changes now? settings.config.sound=\u30b5\u30a6\u30f3\u30c9 settings.config.main=\u4e00\u822c settings.config.main.window-title=\u30a6\u30a3\u30f3\u30c9\u30a6\u30fb\u30bf\u30a4\u30c8\u30eb settings.config.main.window-title.help=\u30a6\u30a3\u30f3\u30c9\u30a6\u30fb\u30bf\u30a4\u30c8\u30eb\u3092\u4ee5\u4e0b\u306e\u5909\u6570\u306b\u66f8\u304d\u63db\u3048\u307e\u3059. settings.config.main.window-title.var.description.appname=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d\u3092\u8868\u793a\u3057\u307e\u3059 (TuxGuitar) settings.config.main.window-title.var.description.appversion=\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u8868\u793a\u3057\u307e\u3059 (TuxGuitar) settings.config.main.window-title.var.description.filename=\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u8868\u793a\u3057\u307e\u3059 settings.config.main.window-title.var.description.filepath=\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u8868\u793a\u3057\u307e\u3059 settings.config.main.window-title.var.description.songname=\u30d5\u30a1\u30a4\u30eb\u306e\u66f2\u540d\u3092\u8868\u793a\u3057\u307e\u3059 settings.config.main.window-title.var.description.songauthor=\u30d5\u30a1\u30a4\u30eb\u306e\u8457\u4f5c\u8005\u3092\u8868\u793a\u3057\u307e\u3059 settings.config.main.window-title.var.description.songalbum=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30eb\u30d0\u30e0\u540d\u3092\u8868\u793a\u3057\u307e\u3059 settings.config.main.window-title.var.description.songartist=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8\u540d\u3092\u8868\u793a\u3057\u307e\u3059 settings.config.main.options=\u30aa\u30d7\u30b7\u30e7\u30f3 settings.config.main.splash-enabled=\u8d77\u52d5\u6642\u306b\u30b9\u30d7\u30e9\u30c3\u30b7\u30e5\u753b\u9762\u3092\u8868\u793a\u3059\u308b settings.config.main.table.auto-size.enabled=\u81ea\u52d5\u3067\u30c6\u30fc\u30d6\u30eb\u3092\u30ea\u30b5\u30a4\u30ba\u3059\u308b settings.config.styles.color.lines=\u4e94\u7dda settings.config.toolbars=\u30c4\u30fc\u30eb\u30d0\u30fc settings.config.toolbars.tip=\u30c4\u30fc\u30eb\u30d0\u30fc\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba settings.config.toolbars.list=\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a\u3059\u308b settings.config.toolbars.move-up=\u4e0a\u3078\u79fb\u52d5 settings.config.toolbars.move-down=\u4e0b\u3078\u79fb\u52d5 settings.config.skin=\u30b9\u30ad\u30f3 settings.config.skin.choose=\u30b9\u30ad\u30f3\u306e\u9078\u629e settings.keybindings=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc\u8a2d\u5b9a key-bindings-editor=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc\u30fb\u30a8\u30c7\u30a3\u30bf key-bindings-editor-action-select=\u52d5\u4f5c\u306e\u9078\u629e key-bindings-editor-action-column=\u52d5\u4f5c key-bindings-editor-shortcut-column=\u30ad\u30fc key-bindings-editor-push-a-key=\u30ad\u30fc\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044 key-bindings-editor-save-question=\u5909\u66f4\u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093, \u4fdd\u5b58\u3057\u306a\u3044\u3067\u7d42\u4e86\u3057\u307e\u3059\u304b? key-bindings-editor-reserved-title=\u4e88\u7d04\u3055\u308c\u305f\u30ad\u30fc key-bindings-editor-reserved-message=\u3053\u306e\u30ad\u30fc\u306f\u4e88\u7d04\u3055\u308c\u3066\u3044\u307e\u3059 key-bindings-editor-override=\u5165\u529b\u3055\u308c\u305f\u30ad\u30fc\u306f\u3059\u3067\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059! \u672c\u5f53\u306b\u4f7f\u3063\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? print.print=\u5370\u5237 print.dialog=\u5370\u5237 print.service=\u30b5\u30fc\u30d3\u30b9 print.service.name=\u540d\u79f0 print.service.status=\u30b9\u30c6\u30fc\u30bf\u30b9 print.service.type=\u30bf\u30a4\u30d7 print.service.info=\u60c5\u5831 print.range=\u7bc4\u56f2 print.range.all-pages=\u3059\u3079\u3066 print.range.pages=\u30da\u30fc\u30b8 print.range.pages-to=\u307e\u3067 print.copies=\u30b3\u30d4\u30fc print.copies-number=\u30b3\u30d4\u30fc\u90e8\u6570 print.print-to-file=\u30d5\u30a1\u30a4\u30eb\u306b\u5370\u5237 print.file-chooser=\u9078\u629e print-header.default-song-name= print-header.default-song-author= print.preview=\u5370\u5237\u30d7\u30ec\u30d3\u30e5 print.preview.page-of=/ marker=\u30de\u30fc\u30ab marker.add=\u30de\u30fc\u30ab\u8ffd\u52a0 marker.list=\u30de\u30fc\u30ab\u4e00\u89a7 marker.first=\u5148\u982d\u306e\u30de\u30fc\u30ab\u3078 marker.last=\u6700\u5f8c\u306e\u30de\u30fc\u30ab\u3078 marker.next=\u6b21\u306e\u30de\u30fc\u30ab\u3078 marker.previous=\u524d\u306e\u30de\u30fc\u30ab\u3078 export.tablature-enabled=TAB\u8b5c\u3092\u8868\u793a export.score-enabled=\u4e94\u7dda\u8b5c\u3092\u8868\u793a export.chord-name-enabled=\u30b3\u30fc\u30c9\u540d\u3092\u8868\u793a export.chord-diagram-enabled=\u30b3\u30fc\u30c9\u30fb\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0\u3092\u8868\u793a export.black-and-white=\u767d\u9ed2\u30e2\u30fc\u30c9 scale=\u30b9\u30b1\u30fc\u30eb\u8868 scale.list=\u30b9\u30b1\u30fc\u30eb\u8868 text.insert=\u30c6\u30ad\u30b9\u30c8\u633f\u5165 text.editor=\u30c6\u30ad\u30b9\u30c8\u30fb\u30a8\u30c7\u30a3\u30bf text.text=\u30c6\u30ad\u30b9\u30c8 tools=\u30c4\u30fc\u30eb tools.scale=\u30b9\u30b1\u30fc\u30eb\u8868 tools.browser=\u30d6\u30e9\u30a6\u30b6 tools.batch=\u30d0\u30c3\u30c1\u51e6\u7406/\u4e00\u62ec\u30d5\u30a1\u30a4\u30eb\u5909\u63db tools.plugins=\u30d7\u30e9\u30b0\u30a4\u30f3 tools.shortcuts=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc tools.settings=\u74b0\u5883\u8a2d\u5b9a/Settings tools.transpose=\u79fb\u8abf tools.transpose.semitones=\u534a\u97f3\u79fb\u8abf tools.transpose.apply-to-track=\u5168\u5c0f\u7bc0\u3092\u79fb\u8abf\u3059\u308b tools.transpose.apply-to-measure=\u73fe\u5c0f\u7bc0\u306e\u307f\u79fb\u8abf\u3059\u308b tools.transpose.apply-to-all-tracks=\u5168\u30c8\u30e9\u30c3\u30af\u306b\u9069\u5fdc\u3059\u308b tools.transpose.try-keep-strings=\u97f3\u7b26\u306f\u540c\u3058\u5f26\u3092\u53ef\u80fd\u306a\u9650\u308a\u7dad\u6301\u3059\u308b tools.transpose.apply-to-chords=\u30b3\u30fc\u30c9\u3092\u79fb\u8abf\u3059\u308b browser.dialog=\u30d6\u30e9\u30a6\u30b6 browser.menu.file=\u30d5\u30a1\u30a4\u30eb browser.open=\u958b\u304f browser.exit=\u7d42\u4e86 browser.menu.collection=\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 browser.menu.go=Go browser.collection.select=\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u9078\u629e browser.collection.open=\u958b\u304f browser.collection.remove=\u524a\u9664 browser.collection.close=\u9589\u3058\u308b browser.collection.new=\u65b0\u898f browser.go-root=\u30db\u30fc\u30e0 browser.go-back=\u623b\u308b browser.refresh=\u66f4\u65b0 browser.factory.fs.name=\u30d5\u30a1\u30a4\u30eb\u30fb\u30b7\u30b9\u30c6\u30e0 browser.collection.fs.name=\u540d\u524d browser.collection.fs.path=\u30d5\u30a9\u30eb\u30c0 browser.collection.fs.editor-title=\u30d5\u30a1\u30a4\u30eb\u30fb\u30b7\u30b9\u30c6\u30e0\u30fb\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 browser.collection.fs.editor-tip=\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u30fb\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e browser.collection.fs.invalid-path=\u6709\u52b9\u306a\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044 midi.port=MIDI\u30dd\u30fc\u30c8 midi.sequencer=MIDI\u30b7\u30fc\u30b1\u30f3\u30b5 plugin.unknown-value=\u7121\u52b9. plugin.column.name=\u30d7\u30e9\u30b0\u30a4\u30f3\u540d plugin.column.enabled=\u6709\u52b9 ######################### ### Tool Bar Items ### ######################### file.items=\u30d5\u30a1\u30a4\u30eb edit.items=\u7de8\u96c6 property.items=\u30b9\u30b3\u30a2\u60c5\u5831\u306e\u7de8\u96c6 track.items=\u30c8\u30e9\u30c3\u30af duration.items=\u97f3\u7b26 beat.items=\u30bf\u30a4/\u30b3\u30fc\u30c9\u633f\u5165 composition.items=\u30c6\u30f3\u30dd\u30fb\u62cd\u5b50\u8a18\u53f7 repeat.items=\u30ea\u30d4\u30fc\u30c8\u8a18\u53f7 transport.items=\u30d7\u30ec\u30fc\u30e4 marker.items=\u30de\u30fc\u30ab insert.items=\u8ffd\u52a0 layout.items=\u30ec\u30a4\u30a2\u30a6\u30c8 view.items=\u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9/\u30d4\u30a2\u30ce/\u30df\u30ad\u30b5 effect.items=\u30a8\u30d5\u30a7\u30af\u30c8/\u30c6\u30af\u30cb\u30c3\u30af dynamic.items=\u5f37\u5f31\u8a18\u53f7 ######################### ###Key Binding Actions### ######################### action.file.new=\u30d5\u30a1\u30a4\u30eb: \u65b0\u898f action.file.open=\u30d5\u30a1\u30a4\u30eb: \u958b\u304f action.file.open-url=\u30d5\u30a1\u30a4\u30eb: URL\u3092\u958b\u304f action.file.save=\u30d5\u30a1\u30a4\u30eb: \u4fdd\u5b58 action.file.save-as=\u30d5\u30a1\u30a4\u30eb: \u5225\u540d\u4fdd\u5b58 action.file.print=\u30d5\u30a1\u30a4\u30eb: \u5370\u5237 action.file.print-preview=\u30d5\u30a1\u30a4\u30eb: \u5370\u5237\u30d7\u30ec\u30d3\u30e5 action.file.exit=\u30d5\u30a1\u30a4\u30eb: \u7d42\u4e86 action.edit.undo=\u7de8\u96c6: \u5143\u306b\u623b\u3059 action.edit.redo=\u7de8\u96c6: \u3084\u308a\u76f4\u3059 action.edit.voice-1=\u7de8\u96c6: \u97f3\u58f0\u9078\u629e 1 action.edit.voice-2=\u7de8\u96c6: \u97f3\u58f0\u9078\u629e 2 action.composition.change-time-signature=\u62cd\u5b50: \u62cd\u5b50\u8a18\u53f7 action.composition.change-tempo=\u62cd\u5b50: \u30c6\u30f3\u30dd action.composition.change-info=\u62cd\u5b50: \u30b9\u30b3\u30a2\u60c5\u5831\u306e\u7de8\u96c6 action.composition.change-clef=\u62cd\u5b50: \u97f3\u90e8\u8a18\u53f7 action.composition.change-key-signature=\u62cd\u5b50: \u8abf\u5b50\u8a18\u53f7 action.composition.change-triplet-feel=\u62cd\u5b50: \u30b9\u30a6\u30a3\u30f3\u30b0\u30fb\u30d5\u30a3\u30fc\u30eb action.view.layout-set-page=\u8868\u793a: \u7e26\u30da\u30fc\u30b8 action.view.layout-set-linear=\u8868\u793a: \u6a2a\u30b9\u30af\u30ed\u30fc\u30eb action.view.layout-set-multitrack=\u8868\u793a: \u30de\u30eb\u30c1\u30c8\u30e9\u30c3\u30af\u30fb\u30e2\u30fc\u30c9 action.view.layout-set-score-enabled=\u8868\u793a: \u4e94\u7dda\u8868\u8a18 action.view.layout-set-tablature-enabled=\u8868\u793a: TAB\u8b5c action.view.layout-set-compact=\u8868\u793a: \u30b3\u30f3\u30d1\u30af\u30c8 action.view.layout-set-chord-diagram-enabled=\u8868\u793a: \u30b3\u30fc\u30c9\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0 action.view.layout-set-chord-name-enabled=\u8868\u793a: \u30b3\u30fc\u30c9\u540d action.view.show-fretboard=\u8868\u793a: \u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9 action.view.show-piano=\u8868\u793a: \u30d4\u30a2\u30ce action.view.show-matrix=\u8868\u793a: \u30de\u30c8\u30ea\u30c3\u30af\u30b9 action.view.show-mixer=\u8868\u793a: \u30df\u30ad\u30b5 action.view.show-transport=\u8868\u793a: \u30d7\u30ec\u30fc\u30e4 action.track.add=\u30c8\u30e9\u30c3\u30af: \u8ffd\u52a0 action.track.remove=\u30c8\u30e9\u30c3\u30af: \u524a\u9664 action.track.clone=\u30c8\u30e9\u30c3\u30af: \u8907\u88fd action.track.go-first=\u30c8\u30e9\u30c3\u30af: \u5148\u982d\u3078 action.track.go-last=\u30c8\u30e9\u30c3\u30af: \u6700\u7d42\u3078 action.track.go-next=\u30c8\u30e9\u30c3\u30af: \u6b21\u3078 action.track.go-previous=\u30c8\u30e9\u30c3\u30af: \u524d\u3078 action.track.lyrics=\u30c8\u30e9\u30c3\u30af: \u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f action.track.properties=\u30c8\u30e9\u30c3\u30af: \u30c8\u30e9\u30c3\u30af\u306e\u30d7\u30ed\u30d1\u30c6\u30a3 action.track.move-down=\u30c8\u30e9\u30c3\u30af: \u4e0b\u3078\u79fb\u52d5\u3055\u305b\u308b action.track.move-up=\u30c8\u30e9\u30c3\u30af: \u4e0a\u3078\u79fb\u52d5\u3055\u305b\u308b action.measure.add=\u5c0f\u7bc0: \u8ffd\u52a0 (\u7a7a\u5c0f\u7bc0) action.measure.remove=\u5c0f\u7bc0: \u524a\u9664 (\u9078\u629e\u7bc4\u56f2) action.measure.copy=\u5c0f\u7bc0: \u30b3\u30d4\u30fc (\u9078\u629e\u7bc4\u56f2) action.measure.paste=\u5c0f\u7bc0: \u8cbc\u308a\u4ed8\u3051 action.measure.clean=\u5c0f\u7bc0: \u9664\u53bb action.measure.go-first=\u5c0f\u7bc0: \u5148\u982d\u3078 action.measure.go-last=\u5c0f\u7bc0: \u6700\u5f8c\u3078 action.measure.go-next=\u5c0f\u7bc0: \u6b21\u3078 action.measure.go-previous=\u5c0f\u7bc0: \u524d\u3078 action.beat.general.remove-unused-voice=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u672a\u4f7f\u7528\u97f3\u58f0\u306e\u9664\u53bb action.beat.general.voice-up=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0a\u306b\u3059\u308b action.beat.general.voice-down=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0b\u306b\u3059\u308b action.beat.general.voice-auto=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u7b26\u5c3e\u306e\u5411\u304d\u306e\u81ea\u52d5\u8abf\u6574 action.beat.general.set-stroke-up=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2193\u30a2\u30c3\u30d7\u30b9\u30c8\u30ed\u30fc\u30af action.beat.general.set-stroke-down=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2191\u30c0\u30a6\u30f3\u30b9\u30c8\u30ed\u30fc\u30af action.beat.general.move-left=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: 1\u62cd\u5de6\u3078\u79fb\u52d5\u3059\u308b action.beat.general.move-right=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: 1\u62cd\u53f3\u3078\u79fb\u52d5\u3059\u308b action.beat.general.move-custom=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u62cd\u79fb\u52d5\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba action.note.general.clean-beat=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: 1\u62cd\u9664\u53bb action.note.general.decrement-semitone=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u534a\u97f3\u4e0b\u3052\u308b action.note.general.increment-semitone=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u534a\u97f3\u4e0a\u3052\u308b action.note.general.shift-down=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u4e0b\u5f26\u306b\u30b7\u30d5\u30c8 action.note.general.shift-up=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u4e0a\u5f26\u306b\u30b7\u30d5\u30c8 action.note.general.tied=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2040 - \u30bf\u30a4 action.note.duration.set-whole=\u97f3\u7b26: \u5168\u97f3\u7b26 action.note.duration.set-half=\u97f3\u7b26: 2\u5206\u97f3\u7b26 action.note.duration.set-quarter=\u97f3\u7b26: 4\u5206\u97f3\u7b26 action.note.duration.set-eighth=\u97f3\u7b26: 8\u5206\u97f3\u7b26 action.note.duration.set-sixteenth=\u97f3\u7b26: 16\u5206\u97f3\u7b26 action.note.duration.set-thirty-second=\u97f3\u7b26: 32\u5206\u97f3\u7b26 action.note.duration.set-sixty-fourth=\u97f3\u7b26: 64\u5206\u97f3\u7b26 action.note.duration.change-dotted=\u97f3\u7b26: \u4ed8\u70b9 action.note.duration.change-double-dotted=\u97f3\u7b26: \u8907\u4ed8\u70b9 action.note.duration.change-division-type=\u97f3\u7b26: \u9023\u7b26 action.note.duration.decrement-duration=\u97f3\u7b26: \u97f3\u4fa1\u3092\u4e0b\u3052\u308b action.note.duration.increment-duration=\u97f3\u7b26: \u97f3\u4fa1\u3092\u4e0a\u3052\u308b action.note.effect.change-vibrato=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \uff5e - \u30f4\u30a3\u30d6\u30e9\u30fc\u30c8 action.note.effect.change-bend=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: C - \u30c1\u30e7\u30fc\u30ad\u30f3\u30b0 action.note.effect.change-slide=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: S - \u30b9\u30e9\u30a4\u30c9 action.note.effect.change-hammer=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: H/P - \u30cf\u30f3\u30de\u30ea\u30f3\u30b0\u30fb\u30aa\u30f3/\u30d7\u30ea\u30f3\u30b0\u30fb\u30aa\u30d5 action.note.effect.change-accentuated=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: ^ - \u30a2\u30af\u30bb\u30f3\u30c8 action.note.effect.change-dead=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: x - \u30c7\u30c3\u30c9\u30ce\u30fc\u30c8/\u30d6\u30e9\u30c3\u30b7\u30f3\u30b0 action.note.effect.change-fade-in=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \uff1c - \u30d5\u30a7\u30fc\u30c9\u30a4\u30f3 action.note.effect.change-ghost=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: ( ) - \u30b4\u30fc\u30b9\u30c8\u30ce\u30fc\u30c8 action.note.effect.change-grace=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2669 - \u88c5\u98fe\u8a18\u53f7 action.note.effect.change-harmonic=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: Harm. - \u30cf\u30fc\u30e2\u30cb\u30af\u30b9 action.note.effect.change-heavy-accentuated=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: ^^ - \u91cd\u30a2\u30af\u30bb\u30f3\u30c8 action.note.effect.change-palm-mute=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: M - \u30d6\u30ea\u30c3\u30b8\u30fb\u30df\u30e5\u30fc\u30c8 action.note.effect.change-popping=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u30dd\u30c3\u30d4\u30f3\u30b0 action.note.effect.change-slapping=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u30b9\u30e9\u30c3\u30d4\u30f3\u30b0/\u30c1\u30e7\u30c3\u30d1 action.note.effect.change-staccato=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \uff0e - \u30b9\u30bf\u30c3\u30ab\u30fc\u30c8 action.note.effect.change-tapping=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: Tapping - \u30bf\u30c3\u30d4\u30f3\u30b0 action.note.effect.change-tremolo-bar=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: tr. - \u30c8\u30ea\u30eb action.note.effect.change-tremolo-picking=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: Picking Tr. - \u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30c8\u30ea\u30eb action.note.effect.change-trill=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: tr. - \u30c8\u30ea\u30eb action.insert.open-repeat=\u62cd\u5b50: \u30ea\u30d4\u30fc\u30c8\u958b\u59cb action.insert.close-repeat=\u62cd\u5b50: \u30ea\u30d4\u30fc\u30c8\u7d42\u4e86 action.insert.repeat-alternative=\u62cd\u5b50: \u30ab\u30c3\u30b3(\u30ea\u30d4\u30fc\u30c8) action.insert.chord=\u97f3\u7b26: \u30b3\u30fc\u30c9\u633f\u5165 action.insert.text=\u97f3\u7b26: \u30c6\u30ad\u30b9\u30c8\u633f\u5165 action.marker.add=\u30de\u30fc\u30ab: \u8ffd\u52a0 action.marker.go-next=\u30de\u30fc\u30ab: \u6b21\u3078 action.marker.go-previous=\u30de\u30fc\u30ab: \u524d\u3078 action.transport.play=\u30d7\u30ec\u30fc\u30e4: \u518d\u751f action.transport.stop=\u30d7\u30ec\u30fc\u30e4: \u505c\u6b62 action.transport.mode=\u30d7\u30ec\u30fc\u30e4: \u518d\u751f\u8a2d\u5b9a action.transport.metronome=\u30d7\u30ec\u30fc\u30e4: \u30e1\u30c8\u30ed\u30ce\u30fc\u30e0 ON/OFF action.transport.set-loop-start=\u30d7\u30ec\u30fc\u30e4: \u30eb\u30fc\u30d7\u306e\u958b\u59cb\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a action.transport.set-loop-end=\u30d7\u30ec\u30fc\u30e4: \u30eb\u30fc\u30d7\u306e\u7d42\u4e86\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a action.tools.batch=\u30c4\u30fc\u30eb: \u30d0\u30c3\u30c1\u51e6\u7406/\u4e00\u62ec\u30d5\u30a1\u30a4\u30eb\u5909\u63db action.tools.browser=\u30c4\u30fc\u30eb: \u30d6\u30e9\u30a6\u30b6 action.tools.transpose=\u30c4\u30fc\u30eb: \u79fb\u8abf action.settings.configure=\u74b0\u5883\u8a2d\u5b9a/Settings action.help.doc=\u30d8\u30eb\u30d7: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 tuxguitar-src-1.2/TuxGuitar/share/lang/messages_nl.properties0000644000175000017500000005114711273045225024131 0ustar julianjulianok=Ok cancel=Annuleren yes=Ja no=Nee add=Toevoegen edit=Bewerk remove=Verwijderen save=Opslaan exit=Afsluiten close=Sluiten choose=Selecteer color=Kleur title=Titel go=Ga warning=Waarschuwing error=Fout plugins=Plugins options=Opties defaults=Defaults clean=Wissen rename=Hernoem fret=Fret position=Positie name=Naam author=Auteur version=Versie description=Omschrijving info=Info configure=Configureer tuxguitar.title=TuxGuitar file=Bestand file.new=Nieuw file.open=Open file.save=Opslaan file.save-as=Opslaan Als file.save-changes-question=De track heeft niet opgeslagen wijzigingen.\nWilt u dit alsnog opslaan? file.exit=Afsluiten file.export=Exporteren file.export-midi=Exporteer MIDI file.export-pdf=Exporteer PDF file.print=Afdrukken file.print-preview=Afdruk Voorbeeld file.import=Importeren file.import-midi=Importeer MIDI file.export-ascii=Exporteer ASCII file.history=Geschiedenis file.open-url=Open URL file.open.error=Kan bestand niet openen: {0} file.save.error=Kan bestand niet openen: {0} file.import.error=Kan bestand niet Importeren: {0} file.export.error=Kan bestand niet Exporteren: {0} file.overwrite-question=Dit bestand bestaat al, wilt u dit overschrijven? edit.menu=Bewerken edit.undo=Ongedaan maken edit.redo=Opnieuw edit.copy=Kopieer edit.from=Van edit.to=Naar edit.all-tracks=Alle Tracks edit.paste=Plakken edit.paste.replace-mode=Plak in huidige maat edit.paste.insert-mode=Plak in nieuwe maat edit.delete=Verwijder edit.cut=Knippen edit.mouse-mode-selection=Selectie Modus edit.mouse-mode-edition=Score Bewerk Modus edit.not-natural-key=Sharp/Flat Modus view=Beeld view.layout=Layout view.layout.page=Pagina Layout view.layout.linear=Lineare Layout view.layout.compact=Compacte Layout view.layout.multitrack=Multitrack view.layout.chord-style=Akkoord Stijl view.layout.chord-name=Akkoord Naam view.layout.chord-diagram=Akkoord Diagram view.layout.score-enabled=Laat Score zien view.layout.tablature-enabled=Bekijk TAB view.show-mixer=Bekijk Mixer view.show-fretboard=Bekijk Fretboard view.show-piano=Bekijk Piano view.show-matrix=Bekijk Matrix view.show-transport=Bekijk Speler fretboard.right-mode=Rechter modus fretboard.left-mode=Linker modus fretboard.background-color=Achtergrond Kleur fretboard.display-note-text=Tekst Noot Weergeven fretboard.display-scale-text=Tekst Scale Weergeven fretboard.font=Lettertype fretboard.fretpoint-color=Fret Kleur fretboard.note-color=Noot Kleur fretboard.scale-note-color=Noten Scale Kleur fretboard.settings=Fretboard Voorkeuren fretboard.string-color=String Kleur fretboard.settings.options=Opties piano.editor=Piano Editor piano.natural-key-color=Natuurlijke Key Kleur piano.not-natural-key-color=Onnatuurlijke Key Kleur piano.note-color=Noot Kleur piano.scale-note-color=Noten Scale Kleur piano.settings=Piano Voorkeuren matrix.editor=Matrix Editor matrix.grids=Aantal Grids matrix.border-color=Rand Kleur matrix.font=Lettertype matrix.foreground-color=Voorgrond Kleur matrix.line-color-1=Kleur Oneven Rij matrix.line-color-2=Kleur Even Rij matrix.line-color-over=Muis Over Rij Kleur matrix.note-color=Noot Kleur matrix.play-note-color=Afspeel Note Kleur matrix.position-color=Positie Kleur matrix.settings=Matrix Voorkeuren composition=Compositie composition.timesignature=Tijd Signature composition.timesignature.Numerator=Numerator composition.timesignature.denominator=Denominator composition.timesignature.to-the-end=Tot het eind composition.tempo=Tempo composition.tempo-percent=Percentage composition.tempo.invalid=Ongeldig Tempo composition.tempo.start-to-end=Voeg dit tempo toe op de hele track composition.tempo.position-to-end=Voeg dit tempo tot het eind toe composition.tempo.position-to-next=Voeg dit tempo toe tot de volgende tempo markering composition.properties=Eigenschappen composition.name=Naam composition.artist=Artiest composition.album=Album composition.author=Auteur composition.tripletfeel=Triplet Feel composition.clef=Clef composition.clef.treble=Treble composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=Voeg deze clef toe tot het einde composition.keysignature=Key Signature composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Sharp composition.keysignature.sharp-2=2 Sharps composition.keysignature.sharp-3=3 Sharps composition.keysignature.sharp-4=4 Sharps composition.keysignature.sharp-5=5 Sharps composition.keysignature.sharp-6=6 Sharps composition.keysignature.sharp-7=7 Sharps composition.keysignature.flat-1=1 Flat composition.keysignature.flat-2=2 Flats composition.keysignature.flat-3=3 Flats composition.keysignature.flat-4=4 Flats composition.keysignature.flat-5=5 Flats composition.keysignature.flat-6=6 Flats composition.keysignature.flat-7=7 Flats composition.keysignature.to-the-end=Voeg deze key signature toe tot het einde composition.tripletfeel=Triplet Feel composition.tripletfeel.none=Geen Triplet Feel composition.tripletfeel.eighth=Triplet 8e composition.tripletfeel.sixteenth=Triplet 16e composition.tripletfeel.to-the-end=Voeg deze triplet feel toe tot het einde help=Help help.help=Help help.doc=Documentatie help.about=Info help.about.license=Licentie help.about.authors=Auteurs help.about.description=Omschrijving track=Track track.number=N° track.name=Naam track.color=Kleur track.first=Eerste Track track.last=Laatste Track track.previous=Vorige Track track.next=Volgende Track track.add=Voeg Track toe track.remove=Verwijder Track track.clone=Kloon Track track.move-up=Omhoog track.move-down=Omlaag track.instrument=Instrument track.properties=Eigenschappen track.properties.general=Algemeen track.name.default-percussion-name=Slagwerk track.lyrics=Lyrics lyric.editor=Lyric Editor measure=Maat measure.first=Eerste maat measure.last=Laatste maat measure.previous=Vorige maat measure.next=Volgende maat measure.add=Voeg maat Toe measure.add-before-current-position=Voeg maat toe VOOR de huidige positie measure.add-after-current-position=Voeg maat toe NA de huidige positie measure.add-at-end=Voeg maat toe aan het einde measure.remove=Verwijder maat measure.copy=Kopieer maat measure.paste=Plak maat measure.clean=Wis maat duration=Duratie duration.whole=Helemaal duration.half=Half duration.quarter=Kwart duration.eighth=8e duration.sixteenth=16e duration.thirtysecond=32e duration.sixtyfourth=64e duration.dotted=Dotted duration.doubledotted=Dubbel Dotted duration.division-type=Tupleto dynamic=Dynamisch dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Effecten effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Dode Noot effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo Bar effects.tremolo-bar-editor=Tremolo Bar Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Terug effects.ghostnote=Ghost Note effects.accentuatednote=Geaccentueerde Noot effects.heavyaccentuatednote=Sterk Geaccentueerde Noot effects.harmonic=Harmonisch effects.grace=Grace Noot effects.grace-editor=Grace Noot Editor effects.grace.before-beat=Before beat effects.grace.on-beat=On beat effects.grace.transition=Transition effects.grace.transition-none=Geen effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo Picking effects.tremolo-picking-editor=Tremolo Picking Editor effects.palm-mute=Palm Mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Harmonic Editor effects.harmonic.type-of-harmonic=Type of Harmonic effects.harmonic.natural=Natural Harmonic effects.harmonic.artificial=Artificial Harmonic effects.harmonic.artificial.key-offset=Key Offset effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=Left Hand effects.harmonic.tapped.right-hand=Right Hand effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=Semi Harmonic bend.editor=Bend Editor bend.bend=Bend bend.bend-release=Bend/Release bend.bend-release-bend=Bend/Release/Bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Speler transport.start=Start transport.stop=Stop transport.pause=Pauze transport.first=Eerste transport.last=Laatste transport.previous=Vorige transport.next=Volgende transport.metronome=Metronome transport.mode=Afspeel Modus transport.mode.simple=Simple Modus transport.mode.simple.tempo-percent=Percentage van tempo transport.mode.simple.loop=Speel looped transport.mode.trainer=Training Modus transport.mode.trainer.increment-description=Geincrementeerd door mixer=Mixer mixer.volume=Gain mixer.track.solo=Solo mixer.track.mute=Mute mixer.channel.volume=Volume mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=Balance mixer.channel.free=Free mixer.channel.link=Link repeat.open=Open Repeat repeat.close=Sluit Repeat repeat.alternative=Alternatieve Repeats repeat.alternative.editor=Bewerk Alternatieve Repeats repetitions=Repetities repeat.number-of-repetitions=Aantal Repetities beat=Beat beat.clean=Wis Beat note=Noot note.semitone-up=Semitone Omhoog note.semitone-down=Semitone Omlaag note.shift-up=Shift Omhoog note.shift-down=Shift Omlaag note.tiednote=Gekoppelde Noot note.deadnote=Dode Noot insert.chord=Voeg Akkoord toe chord.editor=Akkoord Editor chord=Akkoord chord.name=Naam chord.bass=Bass chord.custom=Handmatig Akkoord chord.custom.name-empty-error=Akkoord naam mag niet leeg zijn chord.custom.name-exist-error=Akkoord naam bestaat al chord.settings.tip=Handmatige Instellingen chord.settings.type=Type chord.settings.type.most-common=Meest Voorkomende chord.settings.type.inversions=Inversies chord.settings.type.close-voiced=Sluit Voiced chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Open Akkoorden chord.settings.chords-to-display=Zichtbare Akkoorden chord.settings.search-frets=Zoek Frets chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Percussion Track tuning=Tuning tuning.strings=Strings tuning.offset=Offset language=Taal choose-color=Kies een kleur settings=Instellingen settings.config=Instellingen TuxGuitar settings.config.language=Taal settings.config.language.choose=Kies Taal settings.config.styles=Stijlen settings.config.styles.general=Algemene Stijlen settings.config.styles.printer=Printer Stijlen settings.config.styles.font.default=Standaard Lettertype settings.config.styles.font.note=Noot Lettertype settings.config.styles.font.lyric=Lyrics Lettertype settings.config.styles.font.text=Tekst Lettertype settings.config.styles.font.time-signature=Tijd Signature Lettertype settings.config.styles.font.printer-default=Printer Standaard Lettertype settings.config.styles.font.printer-note=Printer Noot Lettertype settings.config.styles.font.printer-time-signature=Printer Tijd Signature Lettertype settings.config.styles.color.score-note=Score Noot Kleur settings.config.styles.color.tab-note=Tab Noot Kleur settings.config.styles.color.play-note=Afspeel Noot Kleur settings.config.apply-changes-question=Wilt u deze instellingen nu toepassen? settings.config.sound=Geluid settings.config.main=Algemeen settings.config.main.window-title=Venster Titel settings.config.main.window-title.help=De volgende variabelen worden in de venster titel geplaatst: settings.config.main.window-title.var.description.appname=Applicatie Naam: TuxGuitar settings.config.main.window-title.var.description.appversion=In deze variabele staat de versie van TuxGuitar settings.config.main.window-title.var.description.filename=In deze variabele staat de naam van de geopende file settings.config.main.window-title.var.description.filepath=In deze variabele staat het pad van de geopende file settings.config.main.window-title.var.description.songname=In deze variabele staat de naam van het Nummer settings.config.main.window-title.var.description.songauthor=In deze variabele staat de naam van de Auteur van het Nummer settings.config.main.window-title.var.description.songalbum=In deze variabele staat de naam van het Album settings.config.main.window-title.var.description.songartist=In deze variabele staat de naam van de Artiest settings.config.main.options=Opties settings.config.main.splash-enabled=Laat opstart animatie (splash) zien settings.config.main.table.auto-size.enabled=Automatisch tabellen resizen settings.config.styles.color.lines=Horizontale Lijn Kleur settings.config.toolbars=Werkbalken settings.config.toolbars.tip=Werkbalk Aanpassen settings.config.toolbars.list=Beschikbare Werkbalken settings.config.toolbars.move-up=Omhoog settings.config.toolbars.move-down=Omlaag settings.config.skin=Thema settings.config.skin.choose=Kies een Thema settings.keybindings=Configureer Sneltoetsen key-bindings-editor=Sneltoest Editor key-bindings-editor-action-select=Selecteer een Actie key-bindings-editor-action-column=Acties key-bindings-editor-shortcut-column=Toetsen key-bindings-editor-push-a-key=Druk op een Toets key-bindings-editor-save-question=Er zijn wijzigingen aangebracht, wilt u deze Opslaan? key-bindings-editor-reserved-title=Gereserveerde Snelkoppeling key-bindings-editor-reserved-message=Sorry, deze Snelkoppeling is Gereserveerd key-bindings-editor-override=Snelkoppeling is al in gebruik! Wilt u deze wijziging toch doorvoeren? print.print=Print print.dialog=Print print.service=Service print.service.name=Naam print.service.status=Status print.service.type=Type print.service.info=Info print.range=Bereik print.range.all-pages=Alle print.range.pages=Paginas print.range.pages-to=Naar print.copies=Kopieen print.copies-number=Aantal Kopieen print.print-to-file=Print naar bestand print.file-chooser=Kies print-header.default-song-name=Naamloos print-header.default-song-author=Anoniem print.preview=Afdruk Voorbeeld print.preview.page-of=Of marker=Aanwijzer marker.add=Aanwijzer Toevoegen marker.list=Aanwijzer Lijst marker.first=Ga naar eerst Aanwijzer marker.last=Ga naar laatste Aanwijzer marker.next=Ga naar volgende Aanwijzer marker.previous=Ga naar vorige Aanwijzer export.tablature-enabled=Laat Tablature zien export.score-enabled=Laat Score zien scale=Scale scale.list=Scale Lijst text.insert=Tekst Invoegen text.editor=Tekst Editor text.text=Tekst tools=Extra's tools.scale=Scale Lijst tools.browser=Browser tools.plugins=Plugins tools.shortcuts=Snelkoppelingen tools.settings=Instellingen browser.dialog=Browser browser.menu.file=Bestand browser.open=Open browser.exit=Sluit browser.menu.collection=Collectie browser.menu.go=Ga browser.collection.select=Selecteer Collectie browser.collection.open=Open browser.collection.remove=Verwijder browser.collection.close=Sluit browser.collection.new=Nieuw browser.go-root=Home browser.go-back=Terug browser.refresh=Ververs browser.factory.fs.name=Bestandssysteem browser.collection.fs.name=Naam browser.collection.fs.path=Map browser.collection.fs.editor-title=Bestandssysteem Collectie browser.collection.fs.editor-tip=Kies een Collectie Map browser.collection.fs.invalid-path=Selecteer een correcte Map midi.port=MIDI Port midi.sequencer=MIDI Sequencer plugin.unknown-value=Niet beschikbaar plugin.column.name=Plugin Naam plugin.column.enabled=Ingschakeld ######################### ### Tool Bar Items ### ######################### file.items=Bestand Items edit.items=Bewerk Items property.items=Eigenschappen Items track.items=Track Items duration.items=Duratie Items beat.items=Noot Items composition.items=Compositie Items repeat.items=Herhaal Items transport.items=Speel Items Af marker.items=Aanwijzer Items insert.items=Voeg Items Toe layout.items=Layout Items view.items=Bekijk Items effect.items=Effecten Items dynamic.items=Dynamische Items ######################### ###Key Binding Actions### ######################### action.file.new=Nieuw Bestand action.file.open=Open Bestand action.file.open-url=Open URL action.file.save=Opslaan action.file.save-as=Opslaan Als action.file.print=Print action.file.print-preview=Afdruk Voorbeeld action.file.exit=Sluit TuxGuitar Af action.edit.undo=Ongedaan Maken action.edit.redo=Opnieuw action.composition.change-time-signature=Wijzig Tijd Signature action.composition.change-tempo=Wijzig Tempo action.composition.change-info=Wijzig Nummer Informatie action.composition.change-clef=Wijzig Clef action.composition.change-key-signature=Wijzig Key Signature action.composition.change-triplet-feel=Wijzig Triplet Feel action.view.layout-set-page=Pagina Layout action.view.layout-set-linear=Lineare Layout action.view.layout-set-multitrack=Multitrack Mode action.view.layout-set-score-enabled=Score action.view.layout-set-tablature-enabled=Tablature action.view.layout-set-compact=Compacte Modus action.view.layout-set-chord-diagram-enabled=Akkoord Diagram Aanzetten action.view.layout-set-chord-name-enabled=Akkoord Naam Aanzetten action.view.show-fretboard=Fretboard action.view.show-piano=Piano action.view.show-matrix=Matrix action.view.show-mixer=Mixer action.view.show-transport=Player action.track.add=Track Toevoegen action.track.remove=Track Verwijderen action.track.clone=Track Klonen action.track.go-first=Ga naar eerste Track action.track.go-last=Go naar laatste Track action.track.go-next=Ga naar volgende Track action.track.go-previous=Ga naar vorige Track action.track.lyrics=Bewerk Track lyrics action.track.properties=Wijzig Track Eigenschappen action.track.move-down=Omlaag action.track.move-up=Omhoog action.measure.add=Maat Toevoegen action.measure.remove=Maat Verwijderen action.measure.copy=Maat Kopieeren action.measure.paste=Maat Plakken action.measure.clean=Maat Wissen action.measure.go-first=Ga naar eerst maat action.measure.go-last=Ga naar laatste maat action.measure.go-next=Ga naar volgende maat action.measure.go-previous=Ga naar vorige maat action.note.general.clean-beat=Wis Beat action.note.general.decrement-semitone=Decrementeer Semitone action.note.general.increment-semitone=Incrementeer Semitone action.note.general.shift-down=Schuif Omloog action.note.general.shift-up=Schuif Omhoog action.note.general.tied=Toevoegen/Verwijderen Koppeling action.note.duration.set-whole=Stel Hele Duratie in action.note.duration.set-half=Stel 1/2 Duratie in action.note.duration.set-quarter=Stel 1/4 Duratie in action.note.duration.set-eighth=Stel 1/8 Duratie in action.note.duration.set-sixteenth=Stel 1/16 Duratie in action.note.duration.set-thirty-second=Zet Duratie op 30 sec action.note.duration.set-sixty-fourth=Zet Duratie op 64 sec action.note.duration.change-dotted=Toevoegen/Verwijderen Stip action.note.duration.change-double-dotted=Toevoegen/Verwijderen Dubbele Stip action.note.duration.change-division-type=Toevoegen/Verwijderen Tupleto action.note.duration.decrement-duration=Decrementeer Duratie action.note.duration.increment-duration=Incrementeer Duratie action.note.effect.change-vibrato=Toevoegen/Verwijderen Vibrato action.note.effect.change-bend=Toevoegen/Verwijderen Bend action.note.effect.change-slide=Toevoegen/Verwijderen Slide action.note.effect.change-hammer=Toevoegen/Verwijderen hammer-on/pull-off action.note.effect.change-accentuated=Toevoegen/Verwijderen Accent action.note.effect.change-dead=Toevoegen/Verwijderen Dode Noten action.note.effect.change-fade-in=Toevoegen/Verwijderen Fade In action.note.effect.change-ghost=Toevoegen/Verwijderen Ghost action.note.effect.change-grace=Toevoegen/Verwijderen Grace action.note.effect.change-harmonic=Toevoegen/Verwijderen Harmonisch action.note.effect.change-heavy-accentuated=Toevoegen/Verwijderen Sterk Geaccentueerd action.note.effect.change-palm-mute=Toevoegen/Verwijderen Palm Mute action.note.effect.change-popping=Toevoegen/Verwijderen Popping action.note.effect.change-slapping=Toevoegen/Verwijderen Slapping action.note.effect.change-staccato=Toevoegen/Verwijderen Staccato action.note.effect.change-tapping=Toevoegen/Verwijderen Tapping action.note.effect.change-tremolo-bar=Toevoegen/Verwijderen tremolo balk action.note.effect.change-tremolo-picking=Toevoegen/Verwijderen Tremolo Picking action.note.effect.change-trill=Toevoegen/Verwijderen Trill action.insert.open-repeat=Open Repeat action.insert.close-repeat=Sluit Repeat action.insert.repeat-alternative=Repeat Alternatief action.insert.chord=Akkoord Toevoegen action.insert.text=Tekst Toevoegen action.marker.add=Aanwijzer Toevoegen action.marker.go-next=Volgende Aanwijzer action.marker.go-previous=Vorige Aanwijzer action.transport.play=Speel Nummer action.transport.stop=Stop Spelen action.transport.mode=Player Modus action.transport.metronome=Metrononome action.tools.browser=Browser action.settings.configure=Instellingen action.help.doc=Help tuxguitar-src-1.2/TuxGuitar/share/lang/messages_pl.properties0000644000175000017500000006735111273045225024137 0ustar julianjulianes=hiszpa\u0144ski en=angielski fr=francuski pl=polski de=niemiecki pt=portugalski ok=Ok cancel=Anuluj yes=Tak no=Nie add=Dodaj remove=Usu\u0144 save=Zapisz exit=Wyj\u015bcie color=Kolor title=Tytu\u0142 edit=Edycja go=Id\u017a error=B\u0142\u0105d warning=Uwaga plugins=Wtyczki choose=Wyb\u00f3r options=Opcje defaults=Domy\u015blne clean=Wyczy\u015b\u0107 rename=Zmie\u0144 nazw\u0119 fret=Pr\u00f3g position=Pozycja tuxguitar.title=Tux-Guitar file=Plik file.new=Nowy file.open=Otw\u00f3rz file.save=Zapisz file.save-as=Zapisz jako file.exit=Wyj\u015bcie file.export=Eksport file.export-midi=Eksport do midi file.export-pdf=Eksport do pdf file.export-ascii=Eksport do ASCII file.print=Drukuj file.print-preview=Podgl\u0105d wydruku file.import=Import file.import-midi=Import z Midi file.history=Historia file.overwrite-question=Plik istnieje, nadpisa\u0107 go ?? edit.undo=Cofnij edit.redo=Przywr\u00f3\u0107 edit.copy=Kopiuj edit.from=Od edit.to=Do edit.all-tracks=Wszystkie \u015bcie\u017cki edit.paste=Wstaw edit.paste.count=Ilo\u015b\u0107 wstawianych edit.paste.replace-mode=Wstaw w bie\u017c\u0105cym takcie edit.paste.insert-mode=Wstaw w nowym takcie edit.delete=Usu\u0144 edit.cut=Wytnij edit.menu=Edycja edit.mouse-mode-selection=Tryb zaznaczania edit.mouse-mode-edition=Tryb edycji edit.not-natural-key=Krzy\u017cyk/Bemol edit.voice-1=Wybierz g\u0142os 1 edit.voice-2=Wybierz g\u0142os 2 view=Podgl\u0105d view.layout=Widok view.layout.page=Uk\u0142ad strony view.layout.linear=Uk\u0142ad liniowy view.layout.multitrack=Wielo\u015bcie\u017ckowy view.layout.score-enabled=Poka\u017c zapis nutowy view.show-transport=Poka\u017c odtwarzacz view.show-mixer=Poka\u017c mikser view.show-piano=Poka\u017c klawiatur\u0119 view.show-fretboard=Poka\u017c podstrunnic\u0119 fretboard.right-mode=Prawor\u0119czna fretboard.left-mode=Lewor\u0119czna composition=Kompozycja composition.timesignature=Metrum composition.timesignature.Numerator=Liczba warto\u015bci composition.timesignature.denominator=Podstawa metryczna composition.timesignature.to-the-end=Do ko\u0144ca composition.tempo=Tempo composition.tempo-percent=Procent composition.properties=W\u0142a\u015bciwo\u015bci composition.album=Album composition.author=Autor composition.date=Data composition.copyright=Prawa autorskie composition.writer=Tw\u00f3rca tabulatury composition.transcriber=Autor transkrypcji composition.comments=Komentarz composition.tempo.invalid=Niepoprawne tempo composition.clef=Klucz composition.clef.treble=Wiolinowy composition.clef.bass=Basowy composition.clef.tenor=Tenorowy composition.clef.alto=Altowy composition.clef.to-the-end=U\u017cywaj tego klucza do ko\u0144ca composition.keysignature=Tonacja composition.keysignature.natural=Bez znak\u00f3w composition.keysignature.sharp-1=1 Krzy\u017cyk composition.keysignature.sharp-2=2 Krzy\u017cyki composition.keysignature.sharp-3=3 Krzy\u017cyki composition.keysignature.sharp-4=4 Krzy\u017cyki composition.keysignature.sharp-5=5 Krzy\u017cyki composition.keysignature.sharp-6=6 Krzy\u017cyki composition.keysignature.sharp-7=7 Krzy\u017cyki composition.keysignature.flat-1=1 Bemol composition.keysignature.flat-2=2 Bemole composition.keysignature.flat-3=3 Bemole composition.keysignature.flat-4=4 Bemole composition.keysignature.flat-5=5 Bemole composition.keysignature.flat-6=6 Bemole composition.keysignature.flat-7=7 Bemole composition.keysignature.to-the-end=U\u017cywaj tej tonacji do ko\u0144ca composition.tripletfeel=Rytm triolowy composition.tripletfeel.none=R\u00f3wny rytm composition.tripletfeel.eighth=Triole \u00f3semkowe composition.tripletfeel.sixteenth=Triole szesnastkowe composition.tripletfeel.to-the-end=U\u017cywaj rytmu triolowego do ko\u0144ca help=Pomoc help.help=Pomoc help.about=O programie mixer.volume=Nat\u0119\u017cenie mixer.track.solo=Solo mixer.track.mute=Wycisz mixer.channel.volume=G\u0142o\u015bno\u015b\u0107 mixer.channel.channel=Kana\u0142 mixer.channel.effect-channel=Efekty mixer.channel.balance=Balans mixer.channel.free=Wolny mixer.channel.link=Link track=\u015acie\u017cka track.number=Nr track.name=Nazwa track.color=Kolor track.first=Pierwsza \u015bcie\u017cka track.last=Ostatnia \u015bcie\u017cka track.previous=Poprzednia \u015bcie\u017cka track.next=Nast\u0119pna \u015bcie\u017cka track.add=Dodaj \u015bcie\u017ck\u0119 track.remove=Usu\u0144 \u015bcie\u017ck\u0119 track.instrument=Instrument track.instrument.empty=Nie znaleziono banku brzmie\u0144 w Twoim systemie. Spr\u00f3buj przekompilowa\u0107 TuxGuitar u\u017cywaj\u0105 Twojej wersji Java-y. track.properties=W\u0142a\u015bciwo\u015bci track.properties.general=Og\u00f3lne track.clone=Powiel \u015bcie\u017ck\u0119 track.move-up=Przesu\u0144 w g\u00f3r\u0119 track.move-down=Przesu\u0144 w d\u00f3\u0142 track.name.default-percussion-name=Perkusja track.lyrics=S\u0142owa lyric.editor=Edytor s\u0142\u00f3w measure=Takt measure.first=Pierwszy takt measure.last=Ostatni takt measure.previous=Poprzedni takt measure.next=Nast\u0119pny takt measure.remove=Usu\u0144 takt measure.copy=Kopiuj takt measure.paste=Wstaw takt measure.add=Dodaj takt measure.add.count=Ilo\u015b\u0107 dodanych measure.add-before-current-position=Dodaj takt przed bie\u017c\u0105cym measure.add-after-current-position=Dodaj takt za bie\u017c\u0105cym measure.add-at-end=Dodaj takt na ko\u0144cu measure.clean=Wyczy\u015b\u0107 takt beat=Nuta beat.clean=Wyczy\u015b\u0107 warto\u015b\u0107 beat.voice.remove-unused=Usu\u0144 nieu\u017cywany g\u0142os beat.voice-up=Laski nut do g\u00f3ry beat.voice-down=Laski nut w d\u00f3\u0142 beat.voice-auto=Automatyczny kierunek u\u0142o\u017cenia lasek beat.stroke-up=Uderzenie strun w g\u00f3r\u0119 beat.stroke-down=Uderzenie strun w d\u00f3\u0142 beat.move-left=Przesu\u0144 jedno uderzenie w lewo beat.move-right=Przesu\u0144 jedno uderzenie w prawo beat.move-custom=Zaawansowane przesuni\u0119cie beat.move-custom.dialog.title=Zaawansowane przesuni\u0119cie beat.move-custom.dialog.direction-tip=Kierunek przesuni\u0119cia beat.move-custom.dialog.move-1.tip=Pierwsze przesuni\u0119cie beat.move-custom.dialog.move-2.tip=Drugie przesuni\u0119cie beat.move-custom.dialog.direction=Kierunek beat.move-custom.dialog.direction.right=Przesu\u0144 w prawo beat.move-custom.dialog.direction.left=Przesu\u0144 w lewo beat.move-custom.dialog.count=Ilo\u015b\u0107 beat.move-custom.dialog.duration=Kierunek beat.move-custom.dialog.duration.type=Kropka/podw\u00f3jna kropka beat.move-custom.dialog.duration.type.normal=Brak beat.move-custom.dialog.duration.division-type=Rodzaj podzia\u0142u beat.move-custom.dialog.duration.division-type.normal=Normalny(triolowy) note.semitone-up=P\u00f3\u0142 tonu w g\u00f3r\u0119 note.semitone-down=P\u00f3\u0142 tonu w d\u00f3\u0142 note.shift-up=Oktaw\u0119 w g\u00f3r\u0119 note.shift-down=Oktaw\u0119 w d\u00f3\u0142 chord=Akord chord.name=Nazwa akordu chord.custom.name-empty-error=Musisz zdefiniowa\u0107 jak\u0105\u015b nazw\u0119 dla akordu chord.custom.name-exist-error=Taka nazwa akordu ju\u017c istnieje. dynamic=Dynamika dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo duration=Warto\u015b\u0107 duration.whole=ca\u0142a nuta duration.half=p\u00f3\u0142nuta duration.quarter=\u0107wier\u0107nuta duration.eighth=\u00f3semka duration.sixteenth=szestnastka duration.thirtysecond=trzydziestodw\u00f3jka duration.sixtyfourth=sze\u015b\u0107dziesi\u0119cioczw\u00f3rka duration.dotted=kropka duration.doubledotted=Podw\u00f3jna kropka duration.division-type=Triola effects=Efekty effects.vibrato=Wibrato effects.bend=Podci\u0105ganie effects.deadnote=St\u0142umiona nuta effects.slide=Glissando (Slide) effects.hammer=Legato (Hammer-on/Pull-off) effects.tremolo-bar-editor=Edytor efekt\u00f3w tremola effects.tremolo-bar.dip=Obni\u017cenie effects.tremolo-bar.dive=Opuszczenie w d\u00f3\u0142 effects.tremolo-bar.release-up=Zwolnienie z g\u00f3ry effects.tremolo-bar.release-down=Zwolnienie z do\u0142u effects.tremolo-bar.inverted-dip=Podci\u0105gni\u0119cie effects.tremolo-bar.return=Powr\u00f3t effects.ghostnote=Cicha nuta("duch") effects.accentuatednote=Akcent effects.heavyaccentuatednote=Mocny akcent effects.harmonic=Floa\u017colet effects.grace=Przednutka effects.grace-editor=Edytor przednutek effects.grace.before-beat=Przed g\u0142\u00f3wn\u0105 warto\u015bci\u0105 effects.grace.on-beat=Na g\u0142\u00f3wnej warto\u015bci effects.grace.transition=Artykulacja effects.grace.transition-none=Naturalnie effects.grace.transition-bend=Podci\u0105gni\u0119cie effects.grace.transition-slide=Glissando effects.grace.transition-hammer=Legato effects.trill=Ozdobnik effects.trill-editor=Edytor ozdobnik\u00f3w effects.tremolo-picking=Uderzenie tremolo effects.tremolo-picking-editor=Edytor uderze\u0144 tremolo effects.palm-mute=T\u0142umienie d\u0142oni\u0105(pizzicato) effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slap("klang") effects.popping=Popping(Bartok pizz.) effects.fade-in=Zg\u0142a\u015bniane effects.harmonic-editor=Edytor fla\u017colet\u00f3w effects.harmonic.type-of-harmonic=Rodzeje fla\u017colet\u00f3w effects.harmonic.natural=Fla\u017colety naturalne effects.harmonic.artificial=Sztuczne fla\u017colety effects.harmonic.artificial.key-offset=Przesuni\u0119cie effects.harmonic.tapped=Fla\u017colety tapping effects.harmonic.tapped.left-hand=Lewa r\u0119ka effects.harmonic.tapped.right-hand=Prawa r\u0119ka effects.harmonic.pinch=Fla\u017colety wyciskane effects.harmonic.semi=P\u00f3\u0142-fla\u017colety bend.editor=Typ podci\u0105gania bend.bend=podci\u0105ganie bend.bend-release=podci\u0105ganie/powr\u00f3t bend.bend-release-bend=podci\u0105ganie/powr\u00f3t/podci\u0105ganie bend.prebend=podci\u0105ganie przed uderzeniem bend.prebend-release=podci\u0105ganie przed uderzeniem/powr\u00f3t transport=Odtwarzanie transport.start=Start transport.stop=Stop transport.mode.loop-range=Zakres powtarzania transport.mode.loop-range.from=Odtwarzaj od taktu transport.mode.loop-range.from-default=Odtwarzaj od pocz\u0105tku transport.mode.loop-range.to=Odtwarzaj do taktu transport.mode.loop-range.to-default=Do ko\u0144ca transport.set-loop-start=Ustaw pocz\u0105tkowe miejsce powt\u00f3rki transport.set-loop-end=Ustaw ko\u0144cowe miejsce powt\u00f3rki repeat.open=Pocz\u0105tek repetycji repeat.close=Koniec repetycji repetitions=Repetycje repeat.number-of-repetitions=Ilo\u015b\u0107 powt\u00f3rek note.tiednote=Ligatura note.deadnote=T\u0142umiona nuta insert.chord=Wstaw akord chord.editor=Eytor akord\u00f3w instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=\u015acie\u017cka perkusyjna tuning=Strojenie tuning.strings=Struny tuning.offset=Przesuni\u0119cie tuning.strings.transpose=Transpose afected notes. tuning.strings.transpose.try-keep-strings=Pr\u00f3buj zachowa\u0107 d\u017awi\u0119ki na tej samej strunie tuning.strings.transpose.apply-to-chords=Transponuj akordy language=J\u0119zyk choose-color=Wybie\u017c kolor settings=Ustawienia settings.config=Konfiguracja TuxGuitar settings.config.main=Og\u00f3lne settings.config.main.window-title=Tytu\u0142 okna settings.config.main.window-title.help=Poni\u017csze wyra\u017cenia b\u0119d\u0105 pokazywane w tytule okna: settings.config.main.window-title.var.description.appname=Ta zmienna reprezentuje nazw\u0119 programu: TuxGuitar settings.config.main.window-title.var.description.appversion=Ta zmienna reprezentuje wersj\u0119 TuxGuitar settings.config.main.window-title.var.description.filename=Ta zmienna reprezentuje nazw\u0119 otwartego pliku settings.config.main.window-title.var.description.filepath=Ta zmienna reprezentuje \u015bcie\u017ck\u0119 do pliku settings.config.main.window-title.var.description.songname=Ta zmienna reprezentuje tytu\u0142 utworu settings.config.main.window-title.var.description.songauthor=Ta zmienna reprezentuje kompozytora utworu settings.config.main.window-title.var.description.songalbum=Ta zmienna reprezentuje album utworu settings.config.main.window-title.var.description.songartist=Ta zmienna reprezentuje autora opracowania settings.config.main.options=Opcje settings.config.main.splash-enabled=Poka\u017c obrazek podczas uruchamiania programu settings.config.view=Widok settings.config.view.mode=Tryb widoku settings.config.view.size=Wielko\u015b\u0107 okna settings.config.view.size.maximized=Maksymalny settings.config.view.size.width=Szeroko\u015b\u0107 settings.config.view.size.height=Wysoko\u015b\u0107 settings.config.language=J\u0119zyk settings.config.language.choose=Wybierz sw\u00f3j j\u0119zyk settings.config.styles=Style settings.config.styles.font.default=Domy\u015blna czcionka settings.config.styles.font.note=Czcionka dla nut settings.config.styles.font.time-signature=Czcionka dla metrum settings.config.styles.font.printer-default=Domy\u015blna czcionka dla wydruku settings.config.styles.font.printer-note=Czcionka dla nut na wydruku settings.config.styles.font.printer-time-signature=Czcionka dla metrum na wydruku settings.config.styles.color.score-note=Kolor nut na pi\u0119ciolini settings.config.styles.color.tab-note=Kolor cyfr w tabulaturze settings.config.styles.color.play-note=Kolor podczas odtwarzania settings.config.styles.color.lines=Kolor linii tabulatury i pieciolinii settings.config.toolbars=Paski narz\u0119dzi settings.config.apply-changes-question=Czy chcesz zatwierdzi\u0107 teraz zmiany? settings.config.sound=D\u017awi\u0119k settings.config.sound.soundbank=Bank d\u017awi\u0119k\u00f3w settings.config.sound.default-soundbank=U\u017cywaj domy\u015blnego banku d\u017awi\u0119k\u00f3w settings.config.sound.custom-soundbank=U\u017cywaj w\u0142asnego banku d\u017awi\u0119k\u00f3w settings.config.sound.soundbank-restart-message=Uruchom ponownie TuxGuitar aby zmiany przynios\u0142y efekt. soundbank.error=B\u0142\u0105d banku d\u017awi\u0119k\u00f3w soundbank.error.unavailable=B\u0142\u0105d banku d\u017awi\u0119k\u00f3w soundbank.error.custom=Nie mog\u0119 otworzy\u0107 wskazanego pliku z bankiem d\u017awi\u0119k\u00f3w. settings.keybindings=Konfiguracja skr\u00f3t\u00f3w key-bindings-editor=Edytor skr\u00f3t\u00f3w klawaiturowych key-bindings-editor-action-select=Wybierz akcj\u0119 key-bindings-editor-action-column=Akcje key-bindings-editor-shortcut-column=Klawisze key-bindings-editor-push-a-key=Naci\u015bnij klawisz key-bindings-editor-save-question=Zmiany nie zosta\u0142y zachowane, checesz wyj\u015b\u0107 bez zapisywania ?? key-bindings-editor-reserved-title=Zarezerwowane skr\u00f3ty key-bindings-editor-reserved-message=Niestety ta kombinacja klawiszy jest zarezerwowana key-bindings-editor-override=Ten skr\u00f3t jest ju\u017c w u\u017cyciu. Czy na pewno chcesz przypisa\u0107 do niego inn\u0105 akcj\u0119 ? print.print=Drukuj print.dialog=Drukuj print.service=Drukarka print.service.name=Nazwa print.service.status=Status print.service.type=Typ print.service.info=Informacja print.range=Zakres print.range.all-pages=Wszystkie print.range.pages=Strony print.range.pages-to=Do print.copies=Kopie print.copies-number=Liczba kopii print.print-to-file=Drukuj do pliku print.file-chooser=Wybierz print-header.default-song-name=Tabulaturka print-header.default-song-author=Anonim print.preview=Podgl\u0105d wydruku marker=Znacznik marker.add=Dodaj Znacznik marker.list=Poka\u017c Znaczniki marker.first=Id\u017a do pierwszego znacznika marker.last=Id\u017a do ostatniego znacznika marker.next=Id\u017a do nast\u0119pnego znacznika marker.previous=Id\u017a do poprzedniego znacznika export.tablature-enabled=Poka\u017c tabulatur\u0119 export.score-enabled=Poka\u017c zapis nutowy export.black-and-white=Tryb czarno-bia\u0142y scale=Skala scale.list=Lista skal ######################### ### Tool Bar Items ### ######################### file.items=Pasek dzia\u0142a\u0144 na plikach edit.items=Pasek edycji property.items=Pasek w\u0142a\u015bciwo\u015bci track.items=Pasek \u015bcie\u017cek duration.items=Pasek warto\u015bci rytm. beat.items=Pasek nut composition.items=Pasek utworu repeat.items=Pasek repetycji transport.items=Pasek odtwarzania marker.items=Pasek wstawiania znacznik\u00f3w insert.items=Pasek znacznik\u00f3w layout.items=Pasek wygl\u0105du view.items=Pasek widoku effect.items=Pasek efekt\u00f3w dynamic.items=Pasek dynamiki ######################### ###Key Binding Actions### ######################### action.file.new=Nowy plik action.file.open=Otw\u00f3rz plik action.file.save=Zapisz action.file.save-as=Zapisz jako action.file.print=Drukuj action.file.print-preview=Podgl\u0105d wydruku action.edit.undo=Cofnij action.edit.redo=Pon\u00f3w action.edit.voice-1=Wybierz g\u0142os 1 action.edit.voice-2=Wybierz g\u0142os 2 action.composition.change-time-signature=Zmie\u0144 metrum action.composition.change-tempo=Zmie\u0144 tempo action.composition.change-info=Zmie\u0144 informacje o utworze action.composition.change-clef=Zmie\u0144 klucz action.composition.change-key-signature=Zmie\u0144 tonacj\u0119 action.view.layout-set-page=Poka\u017c wygl\u0105d strony action.view.layout-set-linear=Poka\u017c tryb liliowy action.view.layout-set-score-enabled=Poka\u017c zapis nutowy action.view.show-piano=Poka\u017c klawiatur\u0119 action.view.show-fretboard=Poka\u017c podstrunnic\u0119 action.view.show-mixer=Poka\u017c mikser action.view.show-transport=Poka\u017c odtwarzacz action.track.add=Dodaj \u015bcie\u017ck\u0119 action.track.remove=Usu\u0144 \u015bcie\u017ck\u0119 action.track.clone=Powiel \u015bcie\u017ck\u0119 action.track.go-first=Przenie\u015b do pierwszej scie\u017cki action.track.go-last=Przejd\u017a do ostatniej \u015bcie\u017cki action.track.go-next=Przenie\u015b do nast\u0119pnej \u015bcie\u017cki action.track.go-previous=Przejd\u017a do poprzedniej \u015bcie\u017cki action.track.properties=Zmie\u0144 w\u0142a\u015bciwo\u015bci \u015bcie\u017cki action.track.lyrics=Edycja s\u0142\u00f3w dla \u015bcie\u017cki action.measure.add=Dodaj takt action.measure.remove=Usu\u0144 takt action.measure.copy=Kopiuj takt action.measure.paste=Wstaw takt action.measure.clean=Wyczy\u015b\u0107 takt action.measure.go-first=Przejd\u017a do pierwszego taku action.measure.go-last=Przejd\u017a do ostatniego taku action.measure.go-next=Przejd\u017a do nast\u0119pnego taktu action.measure.go-previous=Przejd\u017a do poprzedniego taktu action.beat.general.remove-unused-voice=Usu\u0144 nieu\u017cywany g\u0142os action.beat.general.voice-up=Ustaw laseczki nut do g\u00f3ry action.beat.general.voice-down=Ustaw laseczki nut w d\u00f3\u0142 action.beat.general.voice-auto=Ustaw automatyczny kierunek laseczek nutowych action.beat.general.move-left=Przesu\u0144 jedno uderzenie w lewo action.beat.general.move-right=Przesu\u0144 jedno uderzenie w prawo action.beat.general.move-custom=Zaawansowane przesuni\u0119cie action.beat.general.set-stroke-up=Ustaw kierunek uderzenia w g\u00f3r\u0119 action.beat.general.set-stroke-down=Ustaw kierunek uderzenia w d\u00f3\u0142 action.note.general.clean-beat=Wyczy\u015b\u0107 warto\u015b\u0107 action.note.general.decrement-semitone=P\u00f3\u0142 tonu w d\u00f3\u0142 action.note.general.increment-semitone=P\u00f3\u0142 tonu w g\u00f3r\u0119 action.note.general.shift-down=Oktaw\u0119 w d\u00f3\u0142 action.note.general.shift-up=Oktaw\u0119 w g\u00f3re action.note.general.tied=Dodaj/Usu\u0144 ligatur\u0119 action.note.duration.change-dotted=Dodaj/Usu\u0144 kropk\u0119 action.note.duration.change-double-dotted=Dodaj/Usu\u0144 podw\u00f3jn\u0105 kropk\u0119 action.note.duration.change-division-type=Dodaj/Usu\u0144 triol\u0119 action.note.effect.change-vibrato=Dodaj/Usu\u0144 Wibrato action.note.effect.change-bend=Dodaj/Usu\u0144 podci\u0105gni\u0119cie struny action.note.effect.change-slide=Dodaj/Usu\u0144 glissando (slide) action.note.effect.change-hammer=Dodaj/Usu\u0144 legato (hammer-on/pull-off ) action.note.effect.change-accentuated=Dodaj/Usu\u0144 akcenty action.note.effect.change-dead=Dodaj/Usu\u0144 st\u0142umion\u0105 nut\u0119 action.note.effect.change-fade-in=Dodaj/Usu\u0144 zg\u0142a\u015bnianie action.note.effect.change-ghost=Dodaj/Usu\u0144 nut\u0119-duch action.note.effect.change-grace=Dodaj/Usu\u0144 przednutk\u0119 action.note.effect.change-harmonic=Dodaj/Usu\u0144 fla\u017colet action.note.effect.change-heavy-accentuated=Dodaj/Usu\u0144 mocne akcenty action.note.effect.change-palm-mute=Dodaj/Usu\u0144 t\u0142umienie d\u0142oni\u0105 action.note.effect.change-popping=Dodaj/Usu\u0144 papping action.note.effect.change-slapping=Dodaj/Usu\u0144 slap action.note.effect.change-staccato=Dodaj/Usu\u0144 staccato action.note.effect.change-tapping=Dodaj/Usu\u0144 tapping action.note.effect.change-tremolo-bar=Dodaj/Usu\u0144 tremolo action.note.effect.change-tremolo-picking=Dodaj/Usu\u0144 uderzenie tremolo action.note.effect.change-trill=Dodaj/Usu\u0144 ozdobnik action.insert.open-repeat=Otw\u00f3rz repetycj\u0119 action.insert.close-repeat=Zamknij repetycj\u0119 action.insert.chord=Wstaw akord action.transport.play=Odtwarzaj action.transport.stop=Zatrzymaj odtwarzanie action.transport.set-loop-start=Ustaw pocz\u0105tkowe miejsce powt\u00f3rki action.transport.set-loop-end=Ustaw ko\u0144cowe miejsce powt\u00f3rki action.tools.transpose=Transponuj d\u017awi\u0119ki #######################OLD MISTAKES################## effects.tremolo-bar=Tremolo ("wajcha") settings.config.language.choose=Wybierz sw\u00f3j j\u0119zyk composition.artist=Kompozytor composition.name=Tytu\u0142 action.view.layout-set-multitrack=Poka\u017c tryb wielo\u015bcie\u017ckowy ######################################################### info=Opis name=Nazwa author=Autor version=Wersja description=Opis configure=Ustawienia file.open-url=Otw\u00f3rz adres URL file.open.error=Nie da si\u0119 otworzy\u0107: {0} file.save.error=Nie da si\u0119 zapisa\u0107: {0} file.import.error=Nie da si\u0119 zaimportowa\u0107 : {0} file.export.error=Nie da si\u0119 wyeksportowa\u0107: {0} file.save-changes-question=Utw\u00f3r zosta\u0142 zmieniony\n Czy chcesz zachowa\u0107 zmiany? midi.port=Port Midi midi.sequencer=Sekwencer Midi browser.dialog=Przegl\u0105darka browser.menu.file=Plik browser.open=Otw\u00f3rz browser.exit=Wyj\u015bcie browser.menu.collection=Kolekcja browser.menu.go=Id\u017a browser.collection.select=Wybierz kolekcj\u0119 browser.collection.open=Otw\u00f3rz browser.collection.remove=Usu\u0144 browser.collection.close=Zamknij browser.collection.new=Nowy browser.go-root=Home browser.go-back=Powr\u00f3t browser.refresh=Od\u015bwie\u017c browser.collection.fs.editor-title=Kolekcja lokalna browser.collection.fs.editor-tip=Wybierz katalog dla swojej kolekcji browser.collection.fs.invalid-path=Wybierz prosz\u0119 poprawny katalog plugin.unknown-value=Niedost\u0119pny plugin.column.name=Nazwa wtyczki plugin.column.enabled=Dost\u0119pno\u015b\u0107 view.layout.compact=Kompaktowy view.layout.chord-style=Wygl\u0105d akord\u00f3w view.layout.chord-name=Nazwa akordu view.layout.chord-diagram=Diagram akordu view.layout.tablature-enabled=Poka\u017c tabulatur\u0119 view.show-matrix=Graficzny edytor d\u017awi\u0119k\u00f3w matrix.editor=Graficzny edytor d\u017awi\u0119k\u00f3w matrix.grids=Liczba linii siatki matrix.border-color=Kolor obramowania matrix.font=Czcionka matrix.foreground-color=Kolor g\u0142\u00f3wny matrix.line-color-1=Kolor 1 linii matrix.line-color-2=Kolor 2 linii matrix.line-color-over=Kolor linii pod kursorem matrix.note-color=Kolor nuty matrix.play-note-color=Kolor odtwarzanej nuty matrix.position-color=Kolor pozycji matrix.settings=Ustawienia edytora help.doc=Dokumentacja transport.first=Pierwszy transport.last=Ostatni transport.previous=Poprzedni transport.next=Nast\u0119pny transport.pause=Pauza transport.mode=Tryb odtwarzania transport.mode.simple=Tryb odtwarzania transport.mode.simple.tempo-percent=Tempo w procentach transport.mode.simple.loop=Odtwarzaj w p\u0119tli transport.mode.trainer=Tryb \u0107wiczenia transport.mode.trainer.increment-description=Zwi\u0119kszaj o repeat.alternative=Volta (alternatywne powt\u00f3rzenie) repeat.alternative.editor=Edytuj powt\u00f3rki tools=Narz\u0119dzia tools.scale=Skale/gamy tools.browser=Przegl\u0105darka tools.plugins=Wtyczki tools.shortcuts=Skr\u00f3ty tools.settings=Ustawienia tools.transpose=Transpozycja tools.transpose.semitones=Transponuj o (p\u00f3\u0142tony) tools.transpose.apply-to-track=Transponuj wszystkie takty tools.transpose.apply-to-measure=Transponuj tylko ten takt tools.transpose.apply-to-all-tracks=Transponuj wszystkie \u015bcie\u017cki tools.transpose.try-keep-strings=Je\u017celi to mo\u017cliwe, pr\u00f3buj zachowa\u0107 d\u017awi\u0119ki na tej samej strunie tools.transpose.apply-to-chords=Transponuj akordy text.insert=Wprowad\u017a tekst settings.config.main.table.auto-size.enabled=Automatycznie dopasuj tabulatur\u0119 settings.config.styles.general=Wygl\u0105d og\u00f3lny settings.config.styles.printer=Wygl\u0105d wydruku settings.config.styles.font.lyric=Czcionka tekstu utworu settings.config.styles.font.text=Czcionka tekstu settings.config.skin=Sk\u00f3rki settings.config.skin.choose=Wybierz sk\u00f3r\u0119 settings.config.toolbars.tip=Dopasuj pasek narz\u0119dzi settings.config.toolbars.list=Dost\u0119pne paski narz\u0119dzi settings.config.toolbars.move-up=Przesu\u0144 w g\u00f3r\u0119 settings.config.toolbars.move-down=Przesu\u0144 w d\u00f3\u0142 action.file.open-url=Otw\u00f3rz adres URL action.file.exit=Zako\u0144cz prac\u0119 z TuxGuitar action.insert.text=Wstaw tekst action.insert.repeat-alternative=Volta (Alternatywna repetycja) action.composition.change-triplet-feel=Zmie\u0144 rytm triolowy action.note.duration.set-whole=Ca\u0142e nuty action.note.duration.set-half=P\u00f3\u0142 nuty action.note.duration.set-quarter=\u0106wier\u0107nuty action.note.duration.set-eighth=\u00d3semki action.note.duration.set-sixteenth=Szesnastki action.note.duration.set-thirty-second=Trzydziestodw\u00f3jki action.note.duration.set-sixty-fourth=Sze\u015b\u0107dziesi\u0119cioczw\u00f3rki action.note.duration.decrement-duration=Zmiejsz warto\u015bci rytmiczne action.note.duration.increment-duration=Zwi\u0119ksz warto\u015bci rytmiczne action.track.move-down=Przesu\u0144 w d\u00f3\u0142 action.track.move-up=Przesu\u0144 w g\u00f3r\u0119 action.tools.browser=Przegl\u0105darka action.transport.metronome=Metronom action.transport.mode=Tryb action.view.show-matrix=Poka\u017c graficzny edytor nut action.view.layout-set-chord-diagram-enabled=Akord jako diagram action.view.layout-set-chord-name-enabled=Akord jako nazwa action.view.layout-set-compact=Poka\u017c widok kompaktowy action.view.layout-set-tablature-enabled=Poka\u017c tabulatur\u0119 action.marker.add=Dodaj znacznik action.marker.go-next=Id\u017a do nast\u0119pnego znacznika action.marker.go-previous=Id\u017a do poprzedniego znacznika action.settings.configure=Ustawienia action.help.doc=Pomoc chord.bass=Bas chord.custom=W\u0142asny akord chord.settings.tip=W\u0142asne ustawienia chord.settings.type=Typ chord.settings.type.most-common=Podstawowe chord.settings.type.inversions=W przewrotach chord.settings.type.close-voiced=W uk\u0142adzie skupionym chord.settings.type.open-voiced=W uk\u0142adzie rozleg\u0142ym chord.settings.open-chords=Z pustymi strunami chord.settings.chords-to-display=Liczba pokazywanych akord\u00f3w chord.settings.search-frets=Zakres prog\u00f3w chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max fretboard.direction=Kierunek fretboard.background-color=Kolor t\u0142a fretboard.display-note-text=Poka\u017c nazw\u0119 d\u017awi\u0119ku fretboard.display-scale-text=Poka\u017c nazwy d\u017awi\u0119k\u00f3w skali fretboard.font=Czcionka fretboard.fretpoint-color=Kolor progu fretboard.note-color=Kolor d\u017awi\u0119ku fretboard.scale-note-color=Kolor d\u017awi\u0119ku skali fretboard.settings=Ustawienia podstrunnicy fretboard.string-color=Kolor struny fretboard.settings.options=Opcje piano.editor=Klawiatura piano.natural-key-color=Kolor klawiszy "bia\u0142ych" piano.not-natural-key-color=Kolor klawiszy "czarnych" piano.note-color=Kolor d\u017awi\u0119ku piano.scale-note-color=Kolor d\u017awi\u0119ku skali piano.settings=Ustawienia klawiatury mixer=Mikser browser.collection.fs.name=Nazwa browser.collection.fs.path=\u015acie\u017ck tuxguitar-src-1.2/TuxGuitar/share/lang/messages_pt.properties0000644000175000017500000006104611273045225024142 0ustar julianjulianes=Spanish en=English fr=French pl=Polish de=Deutsch pt=Português ok=Ok cancel=Cancel yes=Sim no=Não add=Adicionar edit=Editar remove=Remover save=Salvar exit=Sair choose=Escolha color=Cor title=Título go=Ir warning=Aviso error=erro plugins=Plugins options=Opções defaults=Padrões clean=Limpar rename=Renomear fret=Braço position=Posição tuxguitar.title=Tux-Guitar file=Arquivo file.new=Novo file.open=Abrir file.save=Salvar file.save-as=Salvar Como file.exit=Sair file.export=Exportar file.export-midi=Exportar Midi file.export-pdf=Exportar PDF file.print=Imprimir file.print-preview=Visualizar Impressão file.import=Importar file.import-midi=Importar Midi file.export-ascii=Exportar ASCII file.history=Histórico file.overwrite-question=Este arquivo já existe, você deseja salvar sobre ele?? edit.undo=Desfazer edit.redo=Refazer edit.copy=Copiar edit.from=De edit.to=Até edit.all-tracks=Todas Pistas edit.paste=Colar edit.paste.count=Quantidade a colar edit.paste.replace-mode=Colar no Compasso Atual edit.paste.insert-mode=Colar em Novo Compasso edit.delete=Excluir edit.cut=Recortar edit.menu=Editar edit.mouse-mode-selection=Modo de Seleção edit.mouse-mode-edition=Modo Partitura edit.not-natural-key=Modo Sustenido/Bemol edit.voice-1=Selecionar Voz 1 edit.voice-2=Selecionar Voz 2 view=Visualizar view.layout=Layout view.layout.page=Layout da Página view.layout.linear=Layout Linear view.layout.multitrack=Multi-Pistas view.layout.score-enabled=Exibir Partitura view.show-mixer=Exibir Mixer view.show-fretboard=Exibir Braço da Guitarra view.show-piano=Exibir Piano view.show-transport=Exibir Player fretboard.right-mode=Modo Destro fretboard.left-mode=Modo Canhoto composition=Composição composition.timesignature=Assinatura de Tempo composition.timesignature.Numerator=Numerador composition.timesignature.denominator=Denominador composition.timesignature.to-the-end=Até o Fim composition.tempo=Tempo composition.tempo-percent=Porcentagem composition.properties=Propriedades composition.name=Nome composition.artist=Intérprete composition.album=Álbum composition.author=Autor composition.date=Data composition.copyright=Copyright composition.writer=Autor composition.transcriber=Transcrito por composition.comments=Comentários composition.tempo.invalid=Tempo Inválido composition.clef=Clave composition.clef.treble=de Sol composition.clef.bass=de Fá composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=Aplicar esta Clave até o fim composition.keysignature=Armação da Clave composition.keysignature.natural=Natural composition.keysignature.sharp-1=1 Sustenido composition.keysignature.sharp-2=2 Sustenido composition.keysignature.sharp-3=3 Sustenido composition.keysignature.sharp-4=4 Sustenido composition.keysignature.sharp-5=5 Sustenido composition.keysignature.sharp-6=6 Sustenido composition.keysignature.sharp-7=7 Sustenido composition.keysignature.flat-1=1 Bemol composition.keysignature.flat-2=2 Bemol composition.keysignature.flat-3=3 Bemol composition.keysignature.flat-4=4 Bemol composition.keysignature.flat-5=5 Bemol composition.keysignature.flat-6=6 Bemol composition.keysignature.flat-7=7 Bemol composition.keysignature.to-the-end= Aplicar esta Armação da Clave até o fim composition.tripletfeel=Modo Triplet composition.tripletfeel.none=Sem modo Triplet composition.tripletfeel.eighth=Triplet em Colcheias composition.tripletfeel.sixteenth=Triplet em Semicolcheias composition.tripletfeel.to-the-end=Aplicar modo triplet até o final help=Ajuda help.help=Ajuda help.about=Sobre mixer.volume=Ganho mixer.track.solo=Solo mixer.track.mute=Mudo mixer.channel.volume=Volume mixer.channel.channel=CN mixer.channel.effect-channel=CE mixer.channel.balance=Balanço mixer.channel.free=Livre mixer.channel.link=Ligado track=Pista track.number=N° track.name=Nome track.color=Cor track.first=Primeira Pista track.last=Última Pista track.previous=Pista Anterior track.next=Próxima Pista track.add=Adicionar Pista track.remove=Remover Pista track.instrument=Instrumento track.tunning=Afinação track.instrument.empty=Não encontramos um banco de sons no seu sistema midi, tente recompilar tuxguitar na sua versão do Java. track.properties=Propriedades track.properties.general=Geral track.clone=Duplicar Pista track.move-up=Mover Para Cima track.move-down=Mover Para Baixo track.name.default-percussion-name=Percussão track.lyrics=Letras lyric.editor=Editor de Letras tunning.offset=Offset tuning.strings.transpose=Transpor notas afetadas. tuning.strings.transpose.try-keep-strings=Tentar manter as notas na mesma corda tuning.strings.transpose.apply-to-chords=Transpor acordes measure=Compasso measure.first=Primeiro Compasso measure.last=Último Compasso measure.previous=Compasso anterior measure.next=Próximo Compasso measure.add=Adicionar Compasso measure.add.count=Quantidade measure.clean=Limpar Compasso measure.remove=Remover Compasso measure.copy=Copiar Compasso measure.paste=Colar Compasso measure.add-before-current-position=Adicionar antes da Posição Atual measure.add-after-current-position=Adicionar depois da Posição Atual measure.add-at-end=Adicionar no Final beat=Nota beat.clean=Limpar batida beat.voice.remove-unused=Remover Voz não utilizada beat.voice-up=Bastões para cima beat.voice-down=Bastões para baixo beat.voice-auto=Bastões Automáticos beat.stroke-up=Toca para cima beat.stroke-down=Toca para baixo beat.move-left=Mover um tempo para Esquerda beat.move-right=Mover um tempo para Direita beat.move-custom=Mover tempo Personalizado beat.move-custom.dialog.title=Mover Personalizado beat.move-custom.dialog.direction-tip=Direção do Movimento beat.move-custom.dialog.move-1.tip=Movimento Maior beat.move-custom.dialog.move-2.tip=Movimento Refinado beat.move-custom.dialog.direction=Direção beat.move-custom.dialog.direction.right=Mover para Direita beat.move-custom.dialog.direction.left=Mover para Esquerda beat.move-custom.dialog.count=Quantos beat.move-custom.dialog.duration=Duração beat.move-custom.dialog.duration.type=Ponto/Ponto Duplo beat.move-custom.dialog.duration.type.normal=Nenhum beat.move-custom.dialog.duration.division-type=Tipo de divisão beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet) note.semitone-up=Semitom Acima note.semitone-down=Semitom Abaixo note.shift-up=Deslizar acima note.shift-down=Deslizar abaixo note.tiednote=Nota Ligada note.deadnote=Dead Note chord=Acorde chord.name=Nome do Acorde chord.custom.name-empty-error=Nome do acorde não definido! chord.custom.name-exist-error=Já existe esse nome de arcorde. chord.editor=Editor de Acordes duration=Duração duration.whole=Semibreve duration.half=Mínima duration.quarter=Semínima duration.eighth=Colcheia duration.sixteenth=Semicolcheia duration.thirtysecond=Fusa duration.sixtyfourth=Semifusa duration.dotted=Ponto duration.doubledotted=Duplo Ponto duration.division-type=Quiáltera dynamic=Dinâmico dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo insert.chord=Inserir Acorde effects=Efeitos effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Dead Note effects.slide=Slide effects.hammer=Hammer on/Pull off effects.tremolo-bar=Trêmolo effects.tremolo-bar-editor=Barra de Trêmolo effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Soltar Acima effects.tremolo-bar.release-down=Soltar Abaixo effects.tremolo-bar.inverted-dip=Dip Invertido effects.tremolo-bar.return=Volta da Barra de Trêmolo effects.ghostnote=Ghost Note effects.accentuatednote=Nota Acentuada effects.heavyaccentuatednote=Nota Muito Acentuada effects.harmonic=Harmonico effects.grace=Grace Note effects.grace-editor=Editor de Grace Note effects.grace.before-beat=Antes da batida effects.grace.on-beat=Durante a batida effects.grace.transition=Transição effects.grace.transition-none=Nenhum effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Editor de Trill effects.tremolo-picking=Trêmolo Picking effects.tremolo-picking-editor=Editor de Trêmolo Picking effects.palm-mute=Nota Abafada effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Fade In effects.harmonic-editor=Editor de Harmônico effects.harmonic.type-of-harmonic=Tipo de Harmônico effects.harmonic.natural=Harmônico Natural effects.harmonic.artificial=Harmônico Artificial effects.harmonic.artificial.key-offset=Offset de Clave effects.harmonic.tapped=Tapped Harmônico effects.harmonic.tapped.left-hand=Mão Esquerda effects.harmonic.tapped.right-hand=Mão Direita effects.harmonic.pinch=Harmônico Pinch effects.harmonic.semi=Semi Harmônico bend.editor=Editor de Bend bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=Tocar transport.start=Iniciar transport.stop=Parar transport.mode.loop-range=Tamanho do loop transport.mode.loop-range.from=Tocar a partir do compasso transport.mode.loop-range.from-default=Desde o início transport.mode.loop-range.to=Tocar até esse compasso transport.mode.loop-range.to-default=Até o fim transport.set-loop-start=Configurar início do loop transport.set-loop-end=Configurar final do loop repeat.open=Abrir repetição repeat.close=Fechar repetição repetitions=Repetições repeat.number-of-repetitions=Número de repetições instrument=Instrumento instrument.instrument=Instrumento instrument.percussion-track=Pista de Percussão tunning=Afinação tunning.strings=Cordas language=Idioma choose-color=Esculha uma cor settings=Configurações settings.config=Configure o TuxGuitar settings.config.main=Geral settings.config.main.window-title=Título da Janela settings.config.main.window-title.help=As seguintes variáveis serão substituidas no Título da Janela: settings.config.main.window-title.var.description.appname=Nome do Aplicativo: TuxGuitar settings.config.main.window-title.var.description.appversion=Versão settings.config.main.window-title.var.description.filename=Nome do Arquivo settings.config.main.window-title.var.description.filepath=Caminho do Arquivo settings.config.main.window-title.var.description.songname=Nome da Música settings.config.main.window-title.var.description.songauthor=Autor da Música settings.config.main.window-title.var.description.songalbum=Nome do Álbum settings.config.main.window-title.var.description.songartist=Nome do Intérprete settings.config.main.options=Opções settings.config.main.splash-enabled=Mostrar Splash Screen do Tux Guitar ao iniciar settings.config.view=Visualizar settings.config.view.mode=Modo Layout settings.config.view.size=Tamanho da Janela settings.config.view.size.maximized=Maximizado settings.config.view.size.width=Largura settings.config.view.size.height=Altura settings.config.language=Idioma settings.config.language.choose=Escolha o seu Idioma settings.config.styles=Estilos settings.config.styles.font.default=Fonte Padrão settings.config.styles.font.note=Fonte das notas settings.config.styles.font.time-signature=Fonte da Assinatura de Tempo settings.config.styles.font.printer-default=Fonte Padrão para Imprimir settings.config.styles.font.printer-note=Fonte para Imprimir notas settings.config.styles.font.printer-time-signature=Fonte para imprimir a Assinatura de Tempo settings.config.styles.color.score-note=Cor das notas da Partitura settings.config.styles.color.tab-note=Cor das notas da Tablatura settings.config.styles.color.play-note=Cor da nota tocando settings.config.styles.color.lines=Cor das Linhas Horizontais settings.config.toolbars=Barras de Ferramentas settings.config.apply-changes-question=Aplicar as mudanças agora? settings.config.sound=Som settings.config.sound.soundbank=Banco de Sons settings.config.sound.default-soundbank=Usar Banco de Sons padrão settings.config.sound.custom-soundbank=Usar Banco de Sons personalizado settings.config.sound.soundbank-restart-message=Você precisa reiniciar o TuxGuitar para que o Banco de Sons seja aplicado. soundbank.error=Erro no Banco de Sons soundbank.error.unavailable=Banco de Sons Indisponível. soundbank.error.custom=Falhou ao abrir Banco de Sons personalizado. settings.keybindings=Configure as Teclas do Programa key-bindings-editor=Editor das Teclas do Programa key-bindings-editor-action-select=Selecione uma Ação key-bindings-editor-action-column=Ações key-bindings-editor-shortcut-column=Teclas key-bindings-editor-push-a-key=Pressione uma tecla key-bindings-editor-save-question=Existem mudanças não salvas, você deseja exibir sem salvar? key-bindings-editor-reserved-title=Atalho Reservado key-bindings-editor-reserved-message=Desculpe, este atalho é reservado key-bindings-editor-override=Atalho já definido! Deseja mudá-lo? print.print=Imprimir print.dialog=Imprimir print.service=Serviço print.service.name=Nome print.service.status=Status print.service.type=Tipo print.service.info=Informação print.range=Faixa print.range.all-pages=Todas print.range.pages=Páginas print.range.pages-to=Até print.copies=Cópias print.copies-number=Número de cópias print.print-to-file=Imprimir em Arquivo print.file-chooser=Escolha print-header.default-song-name=tuxguitar_file print-header.default-song-author=Anônimo print.preview=Visualizar impressão marker=Marcador marker.add=Adicionar Marcador marker.list=Listar Marcadores marker.first=Ir para o primeiro Marcador marker.last=Ir para o Último Marcador marker.next=Ir para o Próximo Marcador marker.previous=Ir para o Marcador Anterior export.tablature-enabled=Exibir Tablatura export.score-enabled=Mostrar Partitura export.black-and-white=Modo Preto e Branco scale=Escala scale.list=Lista de Escalas ######################### ### Tool Bar Items ### ######################### file.items=Itens de Arquivo edit.items=Itens de Editar property.items=Itens de Propriedades track.items=Itens de Pistas duration.items=Itens de Duração beat.items=Itens de Notas composition.items=Itens de Composição repeat.items=Itens de Repetição transport.items=Itens de Player marker.items=Itens de Marcadores insert.items=Itens de Inserir layout.items=Itens de Layout view.items=Itens de Visualizar effect.items=Itens de Efeitos dynamic.items=Itens de Dinâmico ######################### ###Key Binding Actions### ######################### action.file.new=Novo Arquivo action.file.open=Abrir arquivo action.file.save=Salvar action.file.save-as=Salvar como action.file.print=Imprimir action.file.print-preview=Visualizar Impressão action.edit.undo=Desfazer action.edit.redo=Refazer action.edit.voice-1=Selecionar voz 1 action.edit.voice-2=Selecionar voz 2 action.composition.change-time-signature=Mudar a assinatura de tempo action.composition.change-tempo=Mudar o tempo action.composition.change-info=Alterar informações da música action.composition.change-clef=Alterar Clave action.composition.change-key-signature=Alterar Armação da Clave action.view.layout-set-page=Exibir o Layout da Página action.view.layout-set-linear=Exibir layout linear action.view.layout-set-multitrack=Exibir modo multi-pista action.view.layout-set-score-enabled=Exibir Partitura action.view.show-piano=Mostrar Piano action.view.show-fretboard=Exibir Braço da Guitarra action.view.show-mixer=Exibir mixer action.view.show-transport=Exibir Player action.track.add=Adicionar Pista action.track.remove=Remover Pista action.track.clone=Duplicar a Pista action.track.go-first=Ir para a primeira pista action.track.go-last=Ir para a última Pista action.track.go-next=Ir para a próxima pista action.track.go-previous=Ir para a Pista anterior action.track.lyrics=Editar Letras action.track.properties=Mudar as propriedades da pista action.measure.add=Adicionar Compasso action.measure.clean=Limpar Compasso action.measure.remove=Remover Compasso action.measure.copy=Copiar Compasso action.measure.paste=Colar compasso action.measure.go-first=Ir para o primeiro compasso action.measure.go-last=Ir para o último compasso action.measure.go-next=Ir para o próximo compasso action.measure.go-previous=Ir para o compasso anterior action.beat.general.remove-unused-voice=Remover voz não usada action.beat.general.voice-up=Configura bastões para cima action.beat.general.voice-down=Configura bastões para baixo action.beat.general.voice-auto=Configura bastões automáticos action.beat.general.set-stroke-up=Configura tocar para cima action.beat.general.set-stroke-down=Configura tocar para baixo action.beat.general.move-left=Mover um tempo para Esquerda action.beat.general.move-right=Mover um tempo para Direita action.beat.general.move-custom=Mover tempo Personalizado action.note.general.clean-beat=Schlag leeren action.note.general.decrement-semitone=Decrementar Semitom action.note.general.increment-semitone=Incrementar Semitom action.note.general.shift-down=Deslizar abaixo action.note.general.shift-up=Deslizar acima action.note.general.tied=Adicionar/Remover Ligado action.note.duration.change-dotted=Adicionar/Remover ponto action.note.duration.change-double-dotted=Adicionar/Remover duplo Ponto action.note.duration.change-division-type=Adicionar/Remover quiáltera action.note.effect.change-vibrato=Adicionar/Remover Vibrato action.note.effect.change-bend=Adicionar/Remover bend action.note.effect.change-slide=Adicionar/Remover Slide action.note.effect.change-hammer=Adicionar/Remover Hammer on/Pull off action.note.effect.change-accentuated= action.note.effect.change-dead= action.note.effect.change-fade-in=Fade-In action.note.effect.change-ghost=Adicionar/Remover Ghost Note action.note.effect.change-grace=Adicionar/Remover Grace Note action.note.effect.change-harmonic=Adicionar/Remover Harmônico action.note.effect.change-heavy-accentuated=Adicionar/Remover Nota Muito Acentuada action.note.effect.change-palm-mute=Adicionar/Remover Nota Abafada action.note.effect.change-popping=Adicionar/Remover Popping action.note.effect.change-slapping=Adicionar/Remover Slapping action.note.effect.change-staccato=Adicionar/Remover Staccato action.note.effect.change-tapping=Adicionar/Remover Tapping action.note.effect.change-tremolo-bar=Adicionar/Remover Barra de trêmolo action.note.effect.change-tremolo-picking=Adicionar/Remover Trêmolo Picking action.note.effect.change-trill=Adicionar/Remover Trill action.insert.open-repeat=Abrir repetição action.insert.close-repeat=Fechar repetição action.insert.chord=Inserir acorde action.transport.play=Tocar música action.transport.stop=Parar de tocar action.transport.set-loop-start=Configurar início do loop action.transport.set-loop-end=Configurar final do loop info=Info name=Nome author=Autor version=Versão description=Descrição configure=Configurar file.open-url=Abrir URL file.open.error=Não pôde abrir: {0} file.save.error=Não pôde salvar: {0} file.import.error=Não pôde importar: {0} file.export.error=Não pôde exportar: {0} file.save-changes-question=A música tem alterações não salvas.\nDeseja salvar as mudanças? midi.port=Midi Port midi.sequencer=Midi Sequencer browser.dialog=Navegador browser.menu.file=Arquivo browser.open=Abrir browser.exit=Sair browser.menu.collection=Coleção browser.menu.go=Ir browser.collection.select=Selecionar coleção browser.collection.open=Abrir browser.collection.remove=Remover browser.collection.close=Fechar browser.collection.new=Abrir browser.go-root=Inicial browser.go-back=Voltar browser.refresh=Atualizar browser.collection.fs.editor-title=Arquivos de coleção browser.collection.fs.editor-tip=Escolha a pasta da sua coleção browser.collection.fs.invalid-path=Por favor, selecione uma pasta válida plugin.unknown-value=Indisponível plugin.column.name=Nome do Plugin plugin.column.enabled=Habilitado view.layout.compact=Compacto view.layout.chord-style=Estilo de acorde view.layout.chord-name=Nome do acorde view.layout.chord-diagram=Diagrama de acorde view.layout.tablature-enabled=Mostrar tablatura view.show-matrix=Mostrar matriz matrix.editor=Editor de matriz matrix.grids=Número de grades matrix.border-color=Cor da borda matrix.font=Fonte matrix.foreground-color=Cor da fonte matrix.line-color-1=Cor da linha 1 matrix.line-color-2=Cor da linha 2 matrix.line-color-over=Cor de cima matrix.note-color=Cor da nota matrix.play-note-color=Cor da nota a tocar matrix.position-color=Cor da posição matrix.settings=Configurações da matriz help.doc=Documentação transport.first=Primeiro transport.last=Último transport.previous=Anterior transport.next=Próximo transport.pause=Pausar transport.mode=Modo Tocador transport.mode.simple=Modo Tocador Simples transport.mode.simple.tempo-percent=Percentual de tempo transport.mode.simple.loop=Tocar um Loop transport.mode.trainer=Modo de Treinamento transport.mode.trainer.increment-description=Incrementar em repeat.alternative=Repetição Alternativa repeat.alternative.editor=Editar Repetição Alternativa tools=Ferramentas tools.scale=Lista de escalas tools.browser=Navegador tools.plugins=Plugins tools.shortcuts=Atalhos tools.settings=Configurações tools.transpose=Transposição tools.transpose.semitones=Transposição Semitons tools.transpose.apply-to-track=Transpor todos os compassos tools.transpose.apply-to-measure=Transpor apenas este compasso tools.transpose.apply-to-all-tracks=Aplicar em todas as pistas tools.transpose.try-keep-strings=Tentar manter as notas na mesma corda tools.transpose.apply-to-chords=Transpor acordes text.insert=Inserir Texto settings.config.main.table.auto-size.enabled=Habilitar ajuste de tamanho automático settings.config.styles.general=Estilos Gerais settings.config.styles.printer=Estilos de Impressora settings.config.styles.font.lyric=Fonte das letras settings.config.styles.font.text=Fonte do texto settings.config.skin=Skins settings.config.skin.choose=Escolha uma skin settings.config.toolbars.tip=Personalize suas barras settings.config.toolbars.list=Barras disponíveis settings.config.toolbars.move-up=Mover para cima settings.config.toolbars.move-down=Mover para baixo action.file.open-url=Abrir URL action.file.exit=Sair do TuxGuitar action.insert.text=Inserir Texto action.insert.repeat-alternative=Repetição Alternativa action.composition.change-triplet-feel=Alterar Triplet Feel action.note.duration.set-whole=Usar duração total action.note.duration.set-half=Usar 1/2 da duração action.note.duration.set-quarter=Usar 1/4 da duração action.note.duration.set-eighth=Usar 1/8 da duração action.note.duration.set-sixteenth=Usar 1/16 da duração action.note.duration.set-thirty-second=Set 1/32 da duração action.note.duration.set-sixty-fourth=Set 1/64 da duração action.note.duration.decrement-duration=Decrementar duração action.note.duration.increment-duration=Incrementar duração action.track.move-down=Mover para baixo action.track.move-up=Mover para cima action.tools.browser=Navegador action.tools.transpose=Transpor notas action.transport.metronome=Metrônomo transport.metronome=Metrônomo action.transport.mode=Modo action.view.show-matrix=Mostrar Matriz action.view.layout-set-chord-diagram-enabled=Habilitar Diagrama de Acorde action.view.layout-set-chord-name-enabled=Habilitar Nome de Acorde action.view.layout-set-compact=Mostrar em Modo Compacto action.view.layout-set-tablature-enabled=Mostrar Tablatura action.marker.add=Adicionar Marcador action.marker.go-next=Ir para o próximo Marcador action.marker.go-previous=Ir para o Marcador anterior action.settings.configure=Configurações action.help.doc=Ajuda chord.bass=Baixo chord.custom=Acorde personalizado chord.settings.tip=Configurações personalizadas chord.settings.type=Tipo chord.settings.type.most-common=Mais comuns chord.settings.type.inversions=Inversões chord.settings.type.close-voiced=Soar fechado chord.settings.type.open-voiced=Soar aberto chord.settings.open-chords=Acordes abertos chord.settings.chords-to-display=Acordes para mostrar chord.settings.search-frets=Localizar Frets chord.settings.minimum-fret=Mínimo chord.settings.maximum-fret=Máximo fretboard.direction=Direção fretboard.background-color=Cor de fundo fretboard.display-note-text=Mostrar texto da nota fretboard.display-scale-text=Mostrar texto da escala fretboard.font=Fonte fretboard.fretpoint-color=Cor dos Frets fretboard.note-color=Cor das notas fretboard.scale-note-color=Cor das notas de escala fretboard.settings=Configurações do braço fretboard.string-color=Cor das cordas fretboard.settings.options=Opções piano.editor=Editor de piano piano.natural-key-color=Cor de chave natural piano.not-natural-key-color=Cor de chave não natural piano.note-color=Cor da nota piano.scale-note-color=Cor da nota da escala piano.settings=Configurações do piano mixer=Mixer composition.tempo.start-to-end=Aplicar este tempo na música inteira composition.tempo.position-to-end=Aplicar este tempo até o final da música composition.tempo.position-to-next=Aplicar este tempo até o próximo marcador de tempo help.about.license=Licensa help.about.authors=Autores help.about.description=Descrição browser.collection.fs.name=Nome browser.collection.fs.path=Pastatuxguitar-src-1.2/TuxGuitar/share/lang/messages_ru.properties0000644000175000017500000016256511273045225024155 0ustar julianjulianok=\u041e\u043a cancel=\u041e\u0442\u043c\u0435\u043d\u0430 yes=\u0414\u0430 no=\u041d\u0435\u0442 add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c exit=\u0412\u044b\u0445\u043e\u0434 close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c choose=\u0412\u044b\u0431\u043e\u0440 color=\u0426\u0432\u0435\u0442 title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a go=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 warning=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 error=\u041e\u0448\u0438\u0431\u043a\u0430 plugins=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 defaults=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c rename=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c fret=\u041b\u0430\u0434 position=\u041f\u043e\u0437\u0438\u0446\u0438\u044f name=\u0418\u043c\u044f author=\u0410\u0432\u0442\u043e\u0440 version=\u0412\u0435\u0440\u0441\u0438\u044f description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f configure=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f url=URL file=\u0424\u0430\u0439\u043b file.new=\u041d\u043e\u0432\u044b\u0439 file.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c file.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c file.save-as=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a file.save-changes-question=\u0412 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.\n\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f? file.exit=\u0412\u044b\u0445\u043e\u0434 file.export=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 file.export-midi=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 MIDI file.export-pdf=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 PDF file.print=\u041f\u0435\u0447\u0430\u0442\u044c file.print-preview=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 file.import=\u0418\u043c\u043f\u043e\u0440\u0442 file.import-midi=\u0418\u043c\u043f\u043e\u0440\u0442 \u0438\u0437 MIDI file.export-ascii=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 ASCII file.history=\u0418\u0441\u0442\u043e\u0440\u0438\u044f file.open-url=\u041e\u0442\u043a\u0440\u044b\u0442\u044c URL file.open.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c: {0} file.save.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c: {0} file.import.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: {0} file.export.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: {0} edit.menu=\u041f\u0440\u0430\u0432\u043a\u0430 edit.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c edit.redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c edit.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c edit.from=\u041e\u0442 edit.to=\u0414\u043e edit.all-tracks=\u0412\u0441\u0435 \u0442\u0440\u0435\u043a\u0438 edit.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c edit.paste.replace-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0442\u0430\u043a\u0442 edit.paste.insert-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0442\u0430\u043a\u0442 edit.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c edit.cut=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c edit.mouse-mode-selection=\u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f edit.mouse-mode-edition=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u044b edit.not-natural-key=\u0414\u0438\u0435\u0437/\u0411\u0435\u043c\u043e\u043b\u044c view=\u0412\u0438\u0434 view.layout=\u0424\u043e\u0440\u043c\u0430\u0442 view.layout.page=\u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b view.layout.linear=\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 view.layout.compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 view.layout.multitrack=\u041c\u0443\u043b\u044c\u0442\u0438\u0442\u0440\u0435\u043a view.layout.chord-style=\u0421\u0442\u0438\u043b\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u0430 view.layout.chord-name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u043a\u043a\u043e\u0440\u0434\u0430 view.layout.chord-diagram=\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432 view.layout.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443 view.layout.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443 view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0438\u043a\u0448\u0435\u0440 view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u0438\u0442\u0430\u0440\u043d\u044b\u0439 \u0433\u0440\u0438\u0444 view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c fretboard.right-mode=\u041f\u0440\u0430\u0432\u0448\u0430 fretboard.left-mode=\u041b\u0435\u0432\u0448\u0430 fretboard.background-color=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 fretboard.display-note-text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u043e\u0442\u0443 fretboard.display-scale-text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0433\u0430\u043c\u043c\u0443 fretboard.font=\u0428\u0440\u0438\u0444\u0442 fretboard.fretpoint-color=\u0426\u0432\u0435\u0442 \u043b\u0430\u0434\u0430 fretboard.note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b fretboard.scale-note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u0433\u0430\u043c\u043c\u044b fretboard.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0433\u0438\u0442\u0430\u0440\u043d\u043e\u0433\u043e \u0433\u0440\u0438\u0444\u0430 fretboard.string-color=\u0426\u0432\u0435\u0442 \u0441\u0442\u0440\u0443\u043d fretboard.settings.options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 piano.editor=\u041a\u043b\u0430\u0432\u0438\u0448\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 piano.natural-key-color=\u0426\u0432\u0435\u0442 \u0431\u0435\u043b\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 piano.not-natural-key-color=\u0426\u0432\u0435\u0442 \u0447\u0435\u0440\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 piano.note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b piano.scale-note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u0433\u0430\u043c\u043c\u044b piano.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 matrix.editor=\u041c\u0430\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 matrix.grids=\u0427\u0438\u0441\u043b\u043e \u0441\u0435\u0442\u043e\u043a matrix.border-color=\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438 matrix.font=\u0428\u0440\u0438\u0444\u0442 matrix.foreground-color=\u0426\u0432\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0430 matrix.line-color-1=\u0426\u0432\u0435\u0442 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 matrix.line-color-2=\u0426\u0432\u0435\u0442 \u0447\u0451\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 matrix.line-color-over=\u0426\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c matrix.note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b matrix.play-note-color=\u0426\u0432\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043d\u043e\u0442\u044b matrix.position-color=\u0426\u0432\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 matrix.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b composition=\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f composition.timesignature=\u041e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 composition.timesignature.Numerator=\u0427\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c composition.timesignature.denominator=\u0417\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044c composition.timesignature.to-the-end=\u0412 \u043a\u043e\u043d\u0435\u0446 composition.tempo=\u0422\u0435\u043c\u043f composition.tempo-percent=\u041f\u0440\u043e\u0446\u0435\u043d\u0442 composition.tempo.invalid=\u041d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0435\u043c\u043f composition.tempo.start-to-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043c\u043f \u043a\u043e \u0432\u0441\u0435\u0439 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 composition.tempo.position-to-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043c\u043f \u043a \u043a\u043e\u043d\u0446\u0443 composition.tempo.position-to-next=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043c\u043f \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0438 composition.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 composition.name=\u0418\u043c\u044f composition.artist=\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c composition.album=\u0410\u043b\u044c\u0431\u043e\u043c composition.author=\u0410\u0432\u0442\u043e\u0440 composition.tripletfeel=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c composition.clef=\u041a\u043b\u044e\u0447 composition.clef.treble=\u0421\u043a\u0440\u0438\u043f\u0438\u0447\u043d\u044b\u0439 composition.clef.bass=\u0411\u0430\u0441\u043e\u0432\u044b\u0439 composition.clef.tenor=\u0422\u0435\u043d\u043e\u0440\u043d\u044b\u0439 composition.clef.alto=\u0410\u043b\u044c\u0442\u043e\u0432\u044b\u0439 composition.clef.to-the-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u043a \u043a\u043e\u043d\u0446\u0443 composition.keysignature=\u041e\u0442\u043c\u0435\u0442\u043a\u0438 \u0437\u043d\u0430\u043a\u043e\u0432 composition.keysignature.natural=\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b composition.keysignature.sharp-1=1 \u0434\u0438\u0435\u0437 composition.keysignature.sharp-2=2 \u0434\u0438\u0435\u0437 composition.keysignature.sharp-3=3 \u0434\u0438\u0435\u0437 composition.keysignature.sharp-4=4 \u0434\u0438\u0435\u0437 composition.keysignature.sharp-5=5 \u0434\u0438\u0435\u0437 composition.keysignature.sharp-6=6 \u0434\u0438\u0435\u0437 composition.keysignature.sharp-7=7 \u0434\u0438\u0435\u0437 composition.keysignature.flat-1=1 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-2=2 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-3=3 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-4=4 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-5=5 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-6=6 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-7=7 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.to-the-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u043d\u0430\u043a \u043a \u043a\u043e\u043d\u0446\u0443 composition.tripletfeel=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c composition.tripletfeel.none=\u0411\u0435\u0437 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c composition.tripletfeel.eighth=\u0422\u0440\u0438\u043e\u043b\u044c \u0432\u043e\u0441\u044c\u043c\u044b\u043c\u0438 composition.tripletfeel.sixteenth=\u0422\u0440\u0438\u043e\u043b\u044c \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044b\u043c\u0438 composition.tripletfeel.to-the-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u0442\u0440\u0438\u043e\u043b\u044c \u043a \u043a\u043e\u043d\u0446\u0443 help=\u041f\u043e\u043c\u043e\u0449\u044c help.help=\u041f\u043e\u043c\u043e\u0449\u044c help.doc=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f help.about=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 help.about.license=\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f help.about.authors=\u0410\u0432\u0442\u043e\u0440\u044b help.about.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 track=\u0422\u0440\u0435\u043a track.number=\u2116 track.name=\u0418\u043c\u044f track.color=\u0426\u0432\u0435\u0442 track.first=\u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0440\u0435\u043a track.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0442\u0440\u0435\u043a track.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0440\u0435\u043a track.next=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0440\u0435\u043a track.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0435\u043a track.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043a track.clone=\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a track.move-up=\u0412\u044b\u0448\u0435 track.move-down=\u041d\u0438\u0436\u0435 track.instrument=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 track.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 track.properties.general=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 track.name.default-percussion-name=\u041f\u0435\u0440\u043a\u0443\u0441\u0441\u0438\u044f track.lyrics=\u041b\u0438\u0440\u0438\u043a\u0430 lyric.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043b\u0438\u0440\u0438\u043a\u0438 measure=\u0422\u0430\u043a\u0442 measure.first=\u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0430\u043a\u0442 measure.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0442\u0430\u043a\u0442 measure.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0430\u043a\u0442 measure.next=\u0421\u043b\u0435\u0434\u0439\u044e\u0449\u0438\u0439 \u0442\u0430\u043a\u0442 measure.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 measure.add-before-current-position=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 measure.add-after-current-position=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 measure.add-at-end=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 \u0432 \u043a\u043e\u043d\u0435\u0446 measure.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u043a\u0442 measure.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0442 measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0442 duration=\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c duration.whole=\u0426\u0435\u043b\u0430\u044f duration.half=\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430\u044f duration.quarter=\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0430\u044f duration.eighth=\u0412\u043e\u0441\u044c\u043c\u0430\u044f duration.sixteenth=\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0430\u044f duration.thirtysecond=\u0422\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f duration.sixtyfourth=\u0428\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f duration.dotted=\u0422\u043e\u0447\u043a\u0430 duration.doubledotted=\u0414\u0432\u043e\u0439\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 duration.division-type=\u0422\u0443\u043f\u043b\u0435\u0442\u043e dynamic=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 dynamic.piano-pianissimo=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u0438\u0445\u043e dynamic.pianissimo=\u041e\u0447\u0435\u043d\u044c \u0442\u0438\u0445\u043e dynamic.piano=\u0422\u0438\u0445\u043e dynamic.mezzo-piano=\u0421\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u043e dynamic.mezzo-forte=\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e dynamic.forte=\u0413\u0440\u043e\u043c\u043a\u043e dynamic.fortissimo=\u041e\u0447\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043a\u043e dynamic.forte-fortissimo=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u0440\u043e\u043c\u043a\u043e effects=\u042d\u0444\u0444\u0435\u043a\u0442\u044b effects.vibrato=\u0412\u0438\u0431\u0440\u0430\u0442\u043e effects.bend=\u0411\u044d\u043d\u0434 effects.deadnote=\u041f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u0430\u044f \u043d\u043e\u0442\u0430 effects.slide=\u0421\u043b\u0430\u0439\u0434 effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=\u0422\u0440\u0435\u043c\u043e\u043b\u043e effects.tremolo-bar-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0432\u0438\u0431\u0440\u0430\u0442\u043e effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f effects.ghostnote=\u041f\u043e\u0432\u0442\u043e\u0440 \u043d\u043e\u0442\u044b effects.accentuatednote=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u0442\u0443 effects.heavyaccentuatednote=\u0421\u0438\u043b\u044c\u043d\u043e \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u043e\u0442\u0430 effects.harmonic=\u041e\u0431\u0435\u0440\u0442\u043e\u043d effects.grace=\u041f\u043b\u0430\u0432\u043d\u0430\u044f \u043d\u043e\u0442\u0430 effects.grace-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043b\u0430\u0432\u043d\u043e\u0439 \u043d\u043e\u0442\u044b effects.grace.before-beat=\u0414\u043e \u0443\u0434\u0430\u0440\u0430 effects.grace.on-beat=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0430\u0440\u0430 effects.grace.transition=\u041c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f effects.grace.transition-none=\u041d\u0438\u0447\u0435\u0433\u043e effects.grace.transition-bend=\u0411\u044d\u043d\u0434 effects.grace.transition-slide=\u0421\u043b\u0430\u0439\u0434 effects.grace.transition-hammer=\u0425\u0430\u043c\u043c\u0435\u0440 effects.trill=\u0422\u0440\u0435\u043b\u044c effects.trill-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0442\u0440\u0435\u043b\u0438 effects.tremolo-picking=\u0412\u0438\u0431\u0440\u0430\u0442\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u043e\u0440\u043e\u043c effects.tremolo-picking-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0432\u0438\u0431\u0440\u0430\u0442\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u043e\u0440\u043e\u043c effects.palm-mute=\u0413\u043b\u0443\u0448\u0435\u043d\u0438\u0435 \u043b\u0430\u0434\u043e\u043d\u044c\u044e effects.staccato=\u0421\u0442\u0430\u043a\u043a\u0430\u0442\u043e effects.tapping=\u0422\u044d\u043f\u043f\u0438\u043d\u0433 effects.slapping=\u0421\u043b\u044d\u043f effects.popping=Popping effects.fade-in=\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430 effects.harmonic-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 effects.harmonic.type-of-harmonic=\u0422\u0438\u043f \u043e\u0431\u0435\u0440\u0442\u043e\u043d\u0430 effects.harmonic.natural=\u041e\u0431\u0435\u0440\u0442\u043e\u043d \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430 effects.harmonic.artificial=\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 effects.harmonic.artificial.key-offset=\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u043a\u0430 effects.harmonic.tapped=Tapped Harmonic effects.harmonic.tapped.left-hand=\u041b\u0435\u0432\u0448\u0430 effects.harmonic.tapped.right-hand=\u041f\u0440\u0430\u0432\u0448\u0430 effects.harmonic.pinch=\u0417\u0430\u0436\u0438\u043c\u0430\u043d\u0438\u0435 \u043e\u0431\u0435\u0440\u0442\u043e\u043d\u0430 effects.harmonic.semi=\u041f\u043e\u043b\u0443\u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 bend.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0431\u044d\u043d\u0434\u043e\u0432 bend.bend=\u0411\u044d\u043d\u0434 bend.bend-release=\u0411\u044d\u043d\u0434/\u041e\u0442\u043f\u0443\u0441\u0442\u0438\u0442\u044c bend.bend-release-bend=\u0411\u044d\u043d\u0434/\u041e\u0442\u043f\u0443\u0441\u0442\u0438\u0442\u044c/\u0411\u044d\u043d\u0434 bend.prebend=\u041f\u0440\u0435\u0431\u044d\u043d\u0434 bend.prebend-release=\u041f\u0440\u0435\u0431\u044d\u043d\u0434/\u041e\u0442\u043f\u0443\u0441\u0442\u0438\u0442\u044c transport=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c transport.start=\u0417\u0430\u043f\u0443\u0441\u043a transport.stop=\u0421\u0442\u043e\u043f transport.pause=\u041f\u0430\u0443\u0437\u0430 transport.first=\u041f\u0435\u0440\u0432\u044b\u0439 transport.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 transport.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 transport.next=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c transport.mode=\u0412\u0438\u0434 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f transport.mode.simple=\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0440\u0435\u0436\u0438\u043c transport.mode.simple.tempo-percent=\u0422\u0435\u043c\u043f \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445 transport.mode.simple.loop=\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 transport.mode.trainer=\u0422\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c transport.mode.trainer.increment-description=\u0428\u0430\u0433 \u0432 mixer=M\u0438\u043a\u0448\u0435\u0440 mixer.volume=\u0423\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c mixer.track.solo=\u0421\u043e\u043b\u043e mixer.track.mute=\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c mixer.channel.volume=\u0417\u0432\u0443\u043a mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=\u0411\u0430\u043b\u0430\u043d\u0441 mixer.channel.free=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c mixer.channel.link=\u041a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438 repeat.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440 repeat.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440 repeat.alternative=\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0430 repeat.alternative.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0430 repetitions=\u041f\u043e\u0432\u0442\u043e\u0440\u044b repeat.number-of-repetitions=\u0427\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 beat=\u0411\u0438\u0442 beat.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c note=\u041d\u043e\u0442\u0430 note.semitone-up=\u0412\u0432\u0435\u0440\u0445 \u043d\u0430 \u043f\u043e\u043b\u0443\u0442\u043e\u043d note.semitone-down=\u0412\u043d\u0438\u0437 \u043d\u0430 \u043f\u043e\u043b\u0443\u0442\u043e\u043d note.shift-up=\u0421\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u043e\u0442\u0443 \u043d\u0430\u0432\u0435\u0440\u0445 note.shift-down=\u0421\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u043e\u0442\u0443 \u0432\u043d\u0438\u0437 note.tiednote=\u041b\u0438\u0433\u0430 note.deadnote=\u041f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u0430\u044f \u043d\u043e\u0442\u0430 insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434 chord.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434 chord=\u0410\u043a\u043a\u043e\u0440\u0434 chord.name=\u0418\u043c\u044f chord.bass=\u0411\u0430\u0441 chord.custom=\u041e\u0431\u044b\u0447\u043d\u044b\u0439/\u0441\u0432\u043e\u0439 \u0430\u043a\u043a\u043e\u0440\u0434 chord.custom.name-empty-error=\u0414\u0430\u043d\u043d\u044b\u0439 \u0430\u043a\u043a\u043e\u0440\u0434 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d chord.custom.name-exist-error=\u0422\u0430\u043a\u043e\u0439 \u0430\u043a\u043a\u043e\u0440\u0434 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 chord.settings.tip=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 chord.settings.type=\u0422\u0438\u043f chord.settings.type.most-common=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 chord.settings.type.inversions=\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0430\u043a\u043a\u043e\u0440\u0434\u0430 chord.settings.type.close-voiced=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0442\u0438\u044e chord.settings.type.open-voiced=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0442\u0438\u044e chord.settings.open-chords=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u044b chord.settings.chords-to-display=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u044b chord.settings.search-frets=\u041d\u0430\u0439\u0442\u0438 \u043b\u0430\u0434 chord.settings.minimum-fret=\u041c\u0438\u043d\u0438\u043c\u0443\u043c chord.settings.maximum-fret=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c instrument=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 instrument.instrument=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 instrument.percussion-track=\u0423\u0434\u0430\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b tuning=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 tuning.strings=\u0421\u0442\u0440\u0443\u043d\u044b tuning.offset=\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 language=\u042f\u0437\u044b\u043a replace-file-question=\u0422\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e? choose-color=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442 settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 settings.config=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 TuxGuitar settings.config.language=\u042f\u0437\u044b\u043a settings.config.language.choose=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0437\u044b\u043a settings.config.styles=\u0421\u0442\u0438\u043b\u044c settings.config.styles.general=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0448\u0440\u0438\u0444\u0442 settings.config.styles.printer=\u0428\u0440\u0438\u0444\u0442 \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438 settings.config.styles.font.default=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e settings.config.styles.font.note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442\u044b settings.config.styles.font.lyric=\u0428\u0440\u0438\u0444\u0442 \u0432\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 settings.config.styles.font.text=\u0428\u0440\u0438\u0444\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 settings.config.styles.font.time-signature=\u0428\u0440\u0438\u0444\u0442 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 settings.config.styles.font.printer-default=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438 settings.config.styles.font.printer-note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442\u044b \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438 settings.config.styles.font.printer-time-signature=\u0428\u0440\u0438\u0444\u0442 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438 settings.config.styles.color.score-note=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u044b settings.config.styles.color.tab-note=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u0442\u0430\u0431\u0430 settings.config.styles.color.play-note=\u0426\u0432\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043d\u043e\u0442\u044b settings.config.apply-changes-question=\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441? settings.config.sound=\u041f\u0435\u0441\u043d\u044f settings.config.main=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 settings.config.main.window-title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u043a\u043d\u0430 settings.config.main.window-title.help=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043e\u043a\u043d\u0430: settings.config.main.window-title.var.description.appname=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: TuxGuitar settings.config.main.window-title.var.description.appversion=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e TuxGuitar settings.config.main.window-title.var.description.filename=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 settings.config.main.window-title.var.description.filepath=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 settings.config.main.window-title.var.description.songname=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u0438 settings.config.main.window-title.var.description.songauthor=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 settings.config.main.window-title.var.description.songalbum=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u043b\u044c\u0431\u043e\u043c \u043c\u0435\u043b\u043e\u0434\u0438\u0438 settings.config.main.window-title.var.description.songartist=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u0438 settings.config.main.options=\u041e\u043f\u0446\u0438\u0438 settings.config.main.splash-enabled=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 settings.config.main.table.auto-size.enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u043a\u043d\u0430 settings.config.styles.color.lines=\u0426\u0432\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 settings.config.toolbars=\u041f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 settings.config.toolbars.tip=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0412\u0430\u0448\u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 settings.config.toolbars.list=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 settings.config.toolbars.move-up=\u0412\u044b\u0448\u0435 settings.config.toolbars.move-down=\u041d\u0438\u0436\u0435 settings.config.skin=\u0421\u043a\u0438\u043d\u044b settings.config.skin.choose=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u0441\u043a\u0438\u043d settings.keybindings=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 key-bindings-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 key-bindings-editor-action-select=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 key-bindings-editor-action-column=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f key-bindings-editor-shortcut-column=\u041a\u043b\u0430\u0432\u0438\u0448\u0438 key-bindings-editor-push-a-key=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 key-bindings-editor-save-question=\u0418\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438 \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f? key-bindings-editor-reserved-title=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 key-bindings-editor-reserved-message=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u044d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430 key-bindings-editor-override=\u042d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f! \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? print.print=\u041f\u0435\u0447\u0430\u0442\u044c print.dialog=\u041f\u0435\u0447\u0430\u0442\u044c print.service=\u0421\u043b\u0443\u0436\u0431\u0430 print.service.name=\u0418\u043c\u044f print.service.status=\u0421\u0442\u0430\u0442\u0443\u0441 print.service.type=\u0422\u0438\u043f print.service.info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f print.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d print.range.all-pages=\u0412\u0441\u0451 print.range.pages=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b print.range.pages-to=\u0414\u043e print.copies=\u041a\u043e\u043f\u0438\u0438 print.copies-number=\u0427\u0438\u0441\u043b\u043e \u043a\u043e\u043f\u0438\u0439 print.print-to-file=\u041f\u0435\u0447\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b print.file-chooser=\u0412\u044b\u0431\u043e\u0440 print-header.default-song-name=\u0411\u0435\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f print-header.default-song-author=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440 print.preview=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 print.preview.page-of=\u041e\u0442 marker=\u041c\u0435\u0442\u043a\u0430 marker.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443 marker.list=\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0442\u043e\u043a marker.first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u043c\u0435\u0442\u043a\u0435 marker.last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043c\u0435\u0442\u043a\u0435 marker.next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435 marker.previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435 export.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443 export.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443 export.chord-name-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432 export.chord-diagram-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u044b \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432 scale=\u0421\u0442\u0440\u043e\u0439 scale.list=\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u0435\u0432 text.insert=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 text.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 text.text=\u0422\u0435\u043a\u0441\u0442 tools=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b tools.scale=\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u0435\u0432 tools.browser=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 tools.plugins=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f tools.shortcuts=\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 tools.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 browser.dialog=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 browser.menu.file=\u0424\u0430\u0439\u043b browser.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c browser.exit=\u0412\u044b\u0445\u043e\u0434 browser.menu.collection=\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f browser.menu.go=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 browser.collection.select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e browser.collection.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c browser.collection.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c browser.collection.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c browser.collection.new=\u041d\u043e\u0432\u044b\u0439 browser.go-root=\u0414\u043e\u043c\u043e\u0439 browser.go-back=\u041d\u0430\u0437\u0430\u0434 browser.refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c browser.factory.fs.name=\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 browser.collection.fs.name=\u0418\u043c\u044f browser.collection.fs.path=\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f browser.collection.fs.editor-title=\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0424\u0421 browser.collection.fs.editor-tip=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0412\u0430\u0448\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0435\u0439 browser.collection.fs.invalid-path=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e midi.port=MIDI \u043f\u043e\u0440\u0442 midi.sequencer=MIDI \u0441\u0438\u043d\u0442\u0435\u0437\u0430\u0442\u043e\u0440 plugin.unknown-value=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d plugin.column.name=\u0418\u043c\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f plugin.column.enabled=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e ######################### ### Tool Bar Items ### ######################### file.items=\u0424\u0430\u0439\u043b edit.items=\u041f\u0440\u0430\u0432\u043a\u0430 property.items=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 track.items=\u0422\u0440\u0435\u043a duration.items=\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c note.items=\u041d\u043e\u0442\u0430 composition.items=\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f repeat.items=\u041f\u043e\u0432\u0442\u043e\u0440 transport.items=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c marker.items=\u041c\u0435\u0442\u043a\u0438 insert.items=\u0412\u0441\u0442\u0430\u0432\u043a\u0430 layout.items=\u0424\u043e\u0440\u043c\u0430\u0442 view.items=\u0412\u0438\u0434 effect.items=\u042d\u0444\u0444\u0435\u043a\u0442\u044b dynamic.items=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 ######################### ###Key Binding Actions### ######################### action.file.new=\u041d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b action.file.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b action.file.open-url=\u041e\u0442\u043a\u0440\u044b\u0442\u044c URL action.file.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c action.file.save-as=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a action.file.print=\u041f\u0435\u0447\u0430\u0442\u044c action.file.print-preview=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 action.file.exit=\u0412\u044b\u0439\u0442\u0438 \u0438\u0437 TuxGuitar action.edit.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c action.edit.redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c action.composition.change-time-signature=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 action.composition.change-tempo=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043c\u043f action.composition.change-info=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438 action.composition.change-clef=Change Clef action.composition.change-key-signature=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0437\u043d\u0430\u043a\u0430 action.composition.change-triplet-feel=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c action.view.layout-set-page=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b action.view.layout-set-linear=\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 action.view.layout-set-multitrack=\u041c\u0443\u043b\u044c\u0442\u0438\u0442\u0440\u0435\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c action.view.layout-set-score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443 action.view.layout-set-tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443 action.view.layout-set-compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c action.view.layout-set-chord-diagram-enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432 action.view.layout-set-chord-name-enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432 action.view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u0438\u0442\u0430\u0440\u043d\u044b\u0439 \u0433\u0440\u0438\u0444 action.view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 action.view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 action.view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0438\u043a\u0448\u0435\u0440 action.view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c action.track.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0435\u043a action.track.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043a action.track.clone=\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a action.track.go-first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0442\u0440\u0435\u043a\u0443 action.track.go-last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0442\u0440\u0435\u043a\u0443 action.track.go-next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0440\u0435\u043a\u0443 action.track.go-previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0442\u0440\u0435\u043a\u0443 action.track.lyrics=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0440\u0438\u043a\u0443 \u0442\u0440\u0435\u043a\u0430 action.track.properties=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0440\u0435\u043a\u0430 action.track.move-down=\u041d\u0438\u0436\u0435 action.track.move-up=\u0412\u044b\u0448\u0435 action.measure.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 action.measure.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u043a\u0442 action.measure.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0442 action.measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 action.measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0442 action.measure.go-first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0430\u043a\u0442\u0443 action.measure.go-last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0443 action.measure.go-next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0443 action.measure.go-previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0443 action.note.general.clean-beat=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0440\u0438\u0442\u043c action.note.general.decrement-semitone=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0442\u043e\u043d action.note.general.increment-semitone=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0442\u043e\u043d action.note.general.shift-down=\u0421\u0434\u0432\u0438\u0433 \u0432\u043d\u0438\u0437 action.note.general.shift-up=\u0421\u0434\u0432\u0438\u0433 \u0432\u0432\u0435\u0440\u0445 action.note.general.tied=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u0438\u0433\u0443 action.note.duration.set-whole=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.set-half=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.set-quarter=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.set-eighth=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u043e\u0441\u044c\u043c\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.set-sixteenth=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.set-thirty-second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.set-sixty-fourth=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.change-dotted=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 action.note.duration.change-double-dotted=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 action.note.duration.change-division-type=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0443\u043f\u043b\u0435\u0442\u043e action.note.duration.decrement-duration=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.duration.increment-duration=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c action.note.effect.change-vibrato=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0442\u043e action.note.effect.change-bend=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u044d\u043d\u0434 action.note.effect.change-slide=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0434 action.note.effect.change-hammer=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c hammer-on/pull-off action.note.effect.change-accentuated=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 action.note.effect.change-=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u0443\u044e \u043d\u043e\u0442\u0443 action.note.effect.change-fade-in=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430 action.note.effect.change-ghost=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0442\u0443-\u043f\u0440\u0438\u0437\u0440\u0430\u043a\u0430 action.note.effect.change-grace=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u043d\u043e\u0442\u0443 action.note.effect.change-harmonic=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0443 action.note.effect.change-heavy-accentuated=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 action.note.effect.change-palm-mute=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u043b\u0443\u0448\u0435\u043d\u0438\u0435 \u043b\u0430\u0434\u043e\u043d\u044c\u044e action.note.effect.change-popping=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c popping action.note.effect.change-slapping=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u044d\u043f action.note.effect.change-staccato=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u043a\u043a\u0430\u0442\u043e action.note.effect.change-tapping=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u044d\u043f\u043f\u0438\u043d\u0433 action.note.effect.change-tremolo-bar=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043c\u043e\u043b\u043e action.note.effect.change-tremolo-picking=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c tremolo picking action.note.effect.change-trill=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043b\u044c action.insert.open-repeat=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440 action.insert.close-repeat=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440 action.insert.repeat-alternative=Repeat Alternative action.insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434 action.insert.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 action.marker.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443 action.marker.go-next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435 action.marker.go-previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435 action.transport.play=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043c\u0435\u043b\u043e\u0434\u0438\u044e action.transport.stop=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 action.transport.mode=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f action.transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c action.tools.browser=\u0411\u0440\u0430\u0443\u0437\u0435\u0440 action.settings.configure=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 action.help.doc=\u041f\u043e\u043c\u043e\u0449\u044c tuxguitar-src-1.2/TuxGuitar/share/lang/messages_sr.properties0000644000175000017500000005253311273045225024144 0ustar julianjulianok=Ok cancel=Otka\u017ei yes=Da no=Ne add=Dodaj edit=Obrada remove=Ukloni save=Snimi exit=Izlaz choose=Biraj color=Boja title=Naslov go=Idi warning=Upozorenje error=gre\u0161ka plugins=Plugini options=Opcije defaults=Default clean=O\u010disti rename=Promeni ime fret=Prag position=Pozicija info=Info name=Naziv author=Autor version=Verzija description=Opis configure=Konfiguri\u0161i close=Zatvori tuxguitar.title=Tux-Guitar file=Datoteka file.new=Nova file.open=Otvori file.open-url=Otvori URL file.open.error=Ne mogu da otvorim: {0} file.save=Snimi file.save-as=Snimi kao file.save.error=Ne mogu da snimim: {0} file.save-changes-question=Izmene koje ste izvr\u0161ili nisu snimljene.\n\u017delite li da ih snimite? file.exit=Iza\u0111i file.export=Eksportuj file.export-midi=Midi eksport file.export-pdf=PDF eksport file.print=\u0160tampaj file.print-preview=Pregled pre \u0161tampe file.import=Import file.import.error=Ne mogu da importujem: {0} file.import-midi=Midi import file.export-ascii=Snimi kao tekst file.export.error=Ne mogu da eksportujem: {0} file.history=Istorija file.overwrite-question=Navedena datoteka ve\u0107 postoji, da li \u017eelite da je prepi\u0161ete?? edit.menu=Obrada edit.undo=Undo edit.redo=Redo edit.copy=Kopiraj edit.from=Od edit.to=Do edit.all-tracks=Sve staze edit.paste=Zalepi edit.paste.replace-mode=Zalepi u teku\u0107i takt edit.paste.insert-mode=Zalepi u novi takt edit.delete=Obri\u0161i edit.cut=Izre\u017ei edit.mouse-mode-selection=Re\u017eim selekcije edit.mouse-mode-edition=Re\u017eim prepravljanja edit.not-natural-key=Re\u017eim povisilica-snizilica view=Pregled view.layout=Izgled view.layout.page=Pregled strane view.layout.linear=Pregled u liniji view.layout.multitrack=Vi\u0161e instrumenata view.layout.compact=Kompaktan prikaz view.layout.chord-style=Prikaz akorda view.layout.chord-name=Naziv akorda view.layout.chord-diagram=Dijagram akorda view.layout.tablature-enabled=Prika\u017ei tablaturu view.layout.score-enabled=Prika\u017ei note view.show-transport=Prika\u017ei navigator view.show-matrix=Prika\u017ei Matricu view.show-mixer=Prika\u017ei mikser view.show-fretboard=Prika\u017ei gitaru view.show-piano=Prika\u017ei klavir fretboard.right-mode=Desnoruka fretboard.left-mode=Levoruka fretboard.background-color=Boja pozadine fretboard.display-note-text=Tekst prikaza note fretboard.display-scale-text=Tekst prikaza skale fretboard.font=Font fretboard.fretpoint-color=Boja praga fretboard.note-color=Boja note fretboard.scale-note-color=Boja skale fretboard.settings=Pode\u0161avanje prikaza gitare fretboard.string-color=Boja \u017eice fretboard.settings.options=Opcije piano.natural-key-color=Boja belih dirki piano.not-natural-key-color=Boja crnih dirki piano.note-color=Boja note piano.scale-note-color=Boja skale piano.settings=Pode\u0161avanje klavira matrix.editor=Editor Matrice matrix.grids=Broj separatora matrix.border-color=Boja ivice matrix.font=Font matrix.foreground-color=Boja radne povr\u0161ine matrix.line-color-1=Boja linije 1 matrix.line-color-2=Boja linije 2 matrix.line-color-over=Boja teku\u0107eg instrumenta matrix.note-color=Boja note matrix.play-note-color=Boja teku\u0107e note matrix.position-color=Boja pozicije matrix.settings=Podesi izgled Matrice transport=Pesma transport.start=Sviraj transport.stop=Zaustavi transport.first=Prvi transport.last=Poslednji transport.previous=Prethodni transport.next=Slede\u0107i transport.pause=Pauza transport.mode=Re\u017eim pu\u0161tanja transport.mode.simple=Pusti celu pesmu transport.mode.simple.tempo-percent=Brzina pu\u0161tanja transport.mode.simple.loop=Pu\u0161taj pesmu u krug transport.mode.trainer=Trening brzine transport.mode.trainer.increment-description=Ubrzavaj svaki takt composition=Kompozicija composition.timesignature=Vrsta takta composition.timesignature.Numerator=Brojilac takta composition.timesignature.denominator=Imenilac takta composition.timesignature.to-the-end=Do kraja composition.tempo=Tempo composition.tempo-percent=U procentima composition.properties=Informacije o pesmi composition.name=Naziv composition.artist=Interpretacija composition.album=Album composition.author=Autor composition.tempo.invalid=Pogre\u0161an tempo composition.tripletfeel=Utisak tripleta help=Pomo\u0107 help.help=Pomo\u0107 help.about=TuxGuitar help.doc=Dokumentacija mixer.volume=Volume mixer.track.solo=Solo mixer.track.mute=Isklju\u010di mixer.channel.volume=Volume mixer.channel.channel=Kanal mixer.channel.effect-channel=Ef.kanal mixer.channel.balance=Levo-desno mixer.channel.free=slobodan mixer.channel.link=povezan track=Staza track.number=Br. track.name=Naziv track.color=Boja track.first=Prva staza track.last=Poslednja staza track.previous=Prethodna staza track.next=Slede\u0107a staza track.add=Dodaj stazu track.remove=Ukloni stazu track.instrument=Instrument track.instrument.empty=Nije prona\u0111en MIDI soundbank, probajte da opet kompajlirate tuxguitar u va\u0161oj verziji jave. track.properties=Osobine track.properties.general=Osnovno track.name.default-percussion-name=Bubnjevi i perkusije track.lyrics=Tekst na stazi lyric.editor=Pisanje stihova measure=Takt measure.first=Prvi takt measure.last=Poslednji takt measure.previous=Prethodni takt measure.next=Sledeci takt measure.add=Dodaj takt measure.add-before-current-position=Dodaj takt pre teku\u0107e pozicije measure.add-after-current-position=Dodaj takt posle teku\u0107e pozicije measure.add-at-end=Dodaj takt na kraj measure.remove=Obri\u0161i takt measure.copy=Kopiraj takt measure.paste=Zalepi takt measure.clean=Obri\u0161i sve iz takta duration=Trajanje duration.whole=Cela duration.half=Polovina duration.quarter=\u010cetvrtina duration.eighth=Osmina duration.sixteenth=\u0160esnaestina duration.thirtysecond=Trideset-dvojka duration.sixtyfourth=\u0160esdeset-\u010detvrtina duration.dotted=Sa ta\u010dkom duration.doubledotted=Sa dve ta\u010dke duration.division-type=Triplet dynamic=Dinamika dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=Efekti effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=Mrtva nota effects.slide=Slajd effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Tremolo ru\u010dka effects.tremolo-bar-editor=Tremolo Editor effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release up effects.tremolo-bar.release-down=Release down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=Tiha nota effects.accentuatednote=Nagla\u0161ena nota effects.heavyaccentuatednote=Veoma nagla\u0161ena nota effects.harmonic=Harmonik effects.grace=Gratis nota effects.grace-editor=Editor Gratis Note effects.grace.before-beat=Pre udarca effects.grace.on-beat=Tokom udarca effects.grace.transition=Vrsta effects.grace.transition-none=Obi\u010dna effects.grace.transition-bend=Bend effects.grace.transition-slide=Slajd effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Trill Editor effects.tremolo-picking=Tremolo trzanje effects.tremolo-picking-editor=Editor Tremolo Trzanja effects.palm-mute=Palm Mute effects.staccato=Odse\u010dno (staccato) effects.tapping=Taping effects.slapping=Slep (bas) effects.popping=Pop (bas) effects.fade-in=Fade in effects.harmonic-editor=Editor Harmonika effects.harmonic.type-of-harmonic=Tip harmonika effects.harmonic.natural=Prirodni harmonik effects.harmonic.artificial=Ve\u0161ta\u010dki harmonik effects.harmonic.artificial.key-offset=Ton razlika effects.harmonic.tapped=Taping harmonik effects.harmonic.tapped.left-hand=Leva ruka effects.harmonic.tapped.right-hand=Desna ruka effects.harmonic.pinch=Pinch harmonik effects.harmonic.semi=Polu-harmonik bend.editor=Bend Editor bend.bend=Bend bend.bend-release=bend/release bend.bend-release-bend=bend/release/bend bend.prebend=PreBend bend.prebend-release=PreBend/Release repeat.open=Otvori ponavljanje repeat.close=Zatvori ponavljanje repetitions=Ponavljanja repeat.number-of-repetitions=Broj ponavljanja repeat.alternative=Alternativni zavr\u0161eci repeat.alternative.editor=Defini\u0161i alternativne zavr\u0161etke beat=Nota beat.clean=O\u010disti notu note.semitone-up=Poluton vi\u0161lje note.semitone-down=Poluton ni\u017ee note.shift-up=Na \u017eicu gore note.shift-down=Na \u017eicu dole note.tiednote=Ligatura note.deadnote=Mrtva nota insert.chord=Ubaci akord chord.editor=Editor akorda chord=Akord chord.name=Naziv akorda chord.custom.name-empty-error=Naziv akorda ne mo\u017ee biti prazan. chord.custom.name-exist-error=Naziv akorda vec postoji. chord.bass=Bas chord.custom=Podesi parametre chord.settings.tip=Custom Settings chord.settings.type=Tip chord.settings.type.most-common=Obi\u010dni chord.settings.type.inversions=Inverzije chord.settings.type.close-voiced=Blok akordi chord.settings.type.open-voiced="Voicing" chord.settings.open-chords=Otvoreni akordi chord.settings.chords-to-display=Filtriraj koliko akorda chord.settings.search-frets=Pretra\u017euj pragove chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Staza za perkusije tuning=Stim tuning.strings=Broj \u017eica tuning.offset=Pomeraj \u0161tima (u polutonovima) language=Jezik choose-color=Izaberite boju settings=Pode\u0161avanja settings.config=TuxGuitar konfiguracija settings.config.view=Pregled settings.config.view.mode=Na\u010din pregleda settings.config.view.size=Veli\u010dina prozora settings.config.view.size.maximized=Preko celog ekrana settings.config.view.size.width=\u0160irina settings.config.view.size.height=Visina settings.config.language=Jezik settings.config.language.choose=Izaberite jezik settings.config.styles=Izgled settings.config.styles.font.default=Glavni font settings.config.styles.font.note=Font za note settings.config.styles.font.time-signature=Font za oznaku takta settings.config.styles.font.printer-default=Font za \u0161tampanje settings.config.styles.font.printer-note=Font za \u0161tampanje nota settings.config.styles.font.printer-time-signature=Font za \u0161tampanje oznake takta settings.config.styles.color.score-note=Boja nota settings.config.styles.color.tab-note=Boja tablatura settings.config.styles.color.play-note=Boja sviraju\u0107e note settings.config.styles.general=Stilovi prikaza settings.config.styles.printer=Stilovi \u0161tampanja settings.config.styles.font.lyric=Font za tekst pesme settings.config.styles.font.text=Font za tekst settings.config.apply-changes-question=Da li \u017eelite da primenite na\u010dinjene promene? settings.config.sound=Zvuk settings.config.sound.soundbank=Soundbank (Banka zvukova) settings.config.sound.default-soundbank=Koristi default Soundbank settings.config.sound.custom-soundbank=Navedi drugi Soundbank settings.config.sound.soundbank-restart-message=Morate restartovati TuxGuitar da bi se promenio Soundbank settings.config.main=Program settings.config.main.window-title=Naslov aplikacije settings.config.main.window-title.help=Slede\u0107e promenljive su na raspolaganju: settings.config.main.window-title.var.description.appname=Predstavlja naziv aplikacije: TuxGuitar settings.config.main.window-title.var.description.appversion=Predstavlja trenutnu verziju TuxGuitar settings.config.main.window-title.var.description.filename=Predstavlja naziv otvorene datoteke settings.config.main.window-title.var.description.filepath=Predstavlja putanju do otvorene datoteke settings.config.main.window-title.var.description.songname=Predstavlja naziv teku\u0107e pesme settings.config.main.window-title.var.description.songauthor=Predstavlja autora teku\u0107e pesme settings.config.main.window-title.var.description.songalbum=Predstavlja album teku\u0107e pesme settings.config.main.window-title.var.description.songartist=Predstavlja interpretatora teku\u0107e pesme settings.config.main.table.auto-size.enabled=Uklju\u010di automatsku veli\u010dinu tabele settings.config.main.options=Opcije settings.config.main.splash-enabled=Prika\u017ei uvodni ekran prilikom pokretanja settings.config.styles.color.lines=Boja horizontalnih linija settings.config.toolbars=Toolbar settings.config.toolbars.tip=Preuredite Toolbar settings.config.toolbars.list=Dostupni Toolbar-ovi settings.config.toolbars.move-up=Pomeri gore settings.config.toolbars.move-down=Pomeri dole settings.config.skin=Skinovi settings.config.skin.choose=Izaberite skin soundbank.error=Soundbank gre\u0161ka soundbank.error.unavailable=Soundbank (banka zvukova) nije dostupna. soundbank.error.custom=Gre\u0161ka prilikom otvaranja navedenog soundbank-a (banke zvukova). settings.keybindings=Pre\u010dice na tastaturi key-bindings-editor=Editor Pre\u010dica key-bindings-editor-action-select=Izaberi akciju key-bindings-editor-action-column=Akcije key-bindings-editor-shortcut-column=Tastatura key-bindings-editor-push-a-key=Kombinacija? key-bindings-editor-save-question=Postoje izmene koje nisu snimljene, izlazite bez snimanja? key-bindings-editor-reserved-title=Rezervisana pre\u010dica key-bindings-editor-reserved-message=\u017dao nam je, pre\u010dica je vec rezervisana. key-bindings-editor-override=Pre\u010dica se vec koristi! Da li ste sigurni? print.print=\u0160tampanje print.dialog=\u0160tampanje print.service=Servis print.service.name=Naziv print.service.status=Status print.service.type=Tip print.service.info=Info print.range=Opseg print.range.all-pages=Sve print.range.pages=Strane print.range.pages-to=Do print.copies=Kopije print.copies-number=Broj kopija print.print-to-file=\u0160tampaj u datoteku print.file-chooser=Izaberi print-header.default-song-name=Nema_ime print-header.default-song-author=Anoniman print.preview=Pregled pre \u0161tampe composition.clef=Klju\u010d composition.clef.treble=Violinski composition.clef.bass=Bas composition.clef.tenor=Tenor composition.clef.alto=Alt composition.clef.to-the-end=Primeni klju\u010d na kraj pesme composition.keysignature=Tonalitet composition.keysignature.natural=Prirodni (C-dur) composition.keysignature.sharp-1=1 povisilica composition.keysignature.sharp-2=2 povisilice composition.keysignature.sharp-3=3 povisilice composition.keysignature.sharp-4=4 povisilice composition.keysignature.sharp-5=5 povisilica composition.keysignature.sharp-6=6 povisilica composition.keysignature.sharp-7=7 povisilica composition.keysignature.flat-1=1 snizilica composition.keysignature.flat-2=2 snizilice composition.keysignature.flat-3=3 snizilice composition.keysignature.flat-4=4 snizilice composition.keysignature.flat-5=5 snizilica composition.keysignature.flat-6=6 snizilica composition.keysignature.flat-7=7 snizilica composition.keysignature.to-the-end=Primeni skalu na poslednji takt composition.tripletfeel=Utisak tripleta composition.tripletfeel.none=Bez utiska tripleta composition.tripletfeel.eighth=Triplet osmina composition.tripletfeel.sixteenth=Triplet \u0161esnaestina composition.tripletfeel.to-the-end=Primeni utisak tripleta na kraj track.clone=Kloniraj stazu track.move-up=Pomeri gore track.move-down=Pomeri dole marker=Marker marker.add=Dodaj marker marker.list=Prika\u017ei markere marker.first=Idi na prvi marker marker.last=Idi na poslednji marker marker.next=Idi na slede\u0107i marker marker.previous=Idi na prethodni marker export.tablature-enabled=Uvrsti tablaturu export.score-enabled=Uvrsti note scale=Skale scale.list=Lista skala text.insert=Ubaci tekst tools=Alati tools.scale=Spisak skala tools.browser=Browser tools.plugins=Plugin-ovi tools.shortcuts=Pre\u010dice tools.settings=Pode\u0161avanja browser.dialog=Browser browser.menu.file=Fajl browser.open=Otvori browser.exit=Iza\u0111i browser.menu.collection=Kolekcija browser.menu.location=Lokacija browser.menu.go=Po\u010dni browser.collection.select=Izaberi kolekciju browser.collection.fs.editor-title=Kolekcija sa lokalnog diska browser.collection.fs.editor-tip=Izaberite folder u kom se nalazi kolekcija. browser.collection.fs.invalid-path=Izabrani folder ne postoji. browser.location.select=Izaberi lokaciju browser.location.open=Otvori browser.location.remove=Obri\u0161i browser.location.close=Zatvori browser.location.new=Nova browser.go-root=Po\u010detna browser.go-back=Nazad browser.refresh=Osve\u017ei midi.port=Midi Port midi.sequencer=Midi Sekvencer plugin.unknown-value=Nije dostupan. plugin.column.name=Nazi plugina plugin.column.enabled=Uklju\u010den ######################### ### Tool Bar Items ### ######################### file.items=Datoteka komande edit.items=Obrade komande property.items=Osobina komande track.items=Staze komande duration.items=Du\u017eine nota komande beat.items=Nota komande composition.items=Kompozicije komande repeat.items=Ponavljanja komande transport.items=Pesme komande marker.items=Markera komande insert.items=Ubacivanja komande layout.items=Pregleda komande view.items=Izgleda komande effect.items=Efekata komande dynamic.items=Dinamike komande ######################### ###Key Binding Actions### ######################### action.file.new=Nova datoteka action.file.open=Otvori datoteku action.file.open-url=Otvori URL action.file.save=Snimi action.file.save-as=Snimi kao action.file.print=\u0160tampaj action.file.print-preview=Pregled pre \u0161tampe action.edit.undo=Undo action.edit.redo=Redo action.composition.change-time-signature=Promeni vrstu takta action.composition.change-tempo=Promeni tempo action.composition.change-info=Promeni informacije o pesmi action.composition.change-clef=Promeni klju\u010d action.composition.change-key-signature=Promeni tonalitet action.composition.change-triplet-feel=Promeni Utisak tripleta action.view.layout-set-page=Pregled strane action.view.layout-set-linear=Pregled u liniji action.view.layout-set-multitrack=Vi\u0161e instrumenata action.view.layout-set-score-enabled=Prika\u017ei note action.view.show-fretboard=Prika\u017ei gitaru action.view.show-piano=Prika\u017ei klavir action.view.show-mixer=Prika\u017ei mikser action.view.show-transport=Prika\u017ei navigator action.view.show-matrix=Prika\u017ei Matricu action.view.layout-set-chord-diagram-enabled=Prika\u017ei dijagram akorda action.view.layout-set-chord-name-enabled=Prika\u017ei naziv akorda action.view.layout-set-compact=Kompaktan prikaz action.view.layout-set-tablature-enabled=Prika\u017ei tablaturu action.track.add=Dodaj stazu action.track.remove=Obri\u0161i stazu action.track.clone=Kloniraj stazu action.track.go-first=Idi na prvu stazu action.track.go-last=Idi na poslednju stazu action.track.go-next=Idi na sledecu stazu action.track.go-previous=Idi na prethodnu stazu action.track.lyrics=Napisi tekst iznad staze action.track.properties=Promeni osobine staze action.track.move-down=Pomeri dole action.track.move-up=Pomeri gore action.measure.add=Dodaj takt action.measure.remove=Obri\u0161i takt action.measure.copy=Kopiraj takt action.measure.paste=Zalepi takt action.measure.clean=Obri\u0161i sve iz takta action.measure.go-first=Idi na prvi takt action.measure.go-last=Idi na poslednji takt action.measure.go-next=Idi na slede\u0107i takt action.measure.go-previous=Idi na prethodni takt action.note.general.clean-beat=Obri\u0161i notu action.note.general.decrement-semitone=Poluton ni\u017ee action.note.general.increment-semitone=Poluton vi\u0161lje action.note.general.shift-down=Na \u017eicu gore action.note.general.shift-up=Na \u017eicu dole action.note.general.tied=Dodaj/ukloni ligaturu action.note.duration.change-dotted=Dodaj/ukloni ta\u010dku action.note.duration.change-double-dotted=Dodaj/ukloni duplu ta\u010dku action.note.duration.change-division-type=Dodaj/ukloni triplet action.note.duration.set-whole=Trajanje note: cela nota action.note.duration.set-half=Trajanje note: polovina action.note.duration.set-quarter=Trajanje note: \u010detvrtina action.note.duration.set-eighth=Trajanje note: osmina action.note.duration.set-sixteenth=Trajanje note: \u0161esnaestina action.note.duration.set-thirty-second=Trajanje note: trideset-dvojka action.note.duration.set-sixty-fourth=Trajanje note: \u0161esdeset-\u010detvorka action.note.duration.decrement-duration=Prepolovi trajanje action.note.duration.increment-duration=Udvostru\u010di trajanje action.note.effect.change-vibrato=Dodaj/ukloni vibrato action.note.effect.change-bend=Dodaj/ukloni bend action.note.effect.change-slide=Dodaj/ukloni slajd action.note.effect.change-hammer=Dodaj/ukloni hammer-on/pull-off action.note.effect.change-accentuated=Dodaj/ukloni nagla\u0161avanje action.note.effect.change-dead=Dodaj/ukloni mrtvu notu action.note.effect.change-fade-in=Dodaj/ukloni fade in action.note.effect.change-ghost=Dodaj/ukloni tihu notu action.note.effect.change-grace=Dodaj/ukloni gratis notu action.note.effect.change-harmonic=Dodaj/ukloni harmonik action.note.effect.change-heavy-accentuated=Dodaj/ukloni jako nagla\u0161avanje action.note.effect.change-palm-mute=Dodaj/ukloni palm mute action.note.effect.change-popping=Dodaj/ukloni poping action.note.effect.change-slapping=Dodaj/ukloni sleping action.note.effect.change-staccato=Dodaj/ukloni odse\u010dnu notu action.note.effect.change-tapping=Dodaj/ukloni taping action.note.effect.change-tremolo-bar=Dodaj/ukloni tremolo ru\u010dku action.note.effect.change-tremolo-picking=Dodaj/ukloni tremolo trzanje action.note.effect.change-trill=Dodaj/ukloni trill action.insert.open-repeat=Otvori ponavljanje action.insert.close-repeat=Zatvori ponavljanje action.insert.text=Ubaci tekst action.insert.repeat-alternative=Alternativni zavr\u0161etak action.insert.chord=Ubaci akord action.transport.play=Sviraj pesmu action.transport.stop=Zaustavi pesmu action.transport.metronome=Metrononom action.transport.mode=Mod action.tools.browser=Browser tuxguitar-src-1.2/TuxGuitar/share/lang/messages_sv.properties0000644000175000017500000006367211273045225024156 0ustar julianjulian# Swedish translation for TuxGuitar. # Copyright (C) 2008-2009 Free Software Foundation, Inc. # This file is distributed under the same license as the TuxGuitar software. # John Gustafsson , 2008-2009. # ok=Ok cancel=Avbryt yes=Ja no=Nej add=L\u00e4gg till edit=\u00c4ndra remove=Ta bort save=Spara exit=Avsluta close=St\u00e4ng choose=V\u00e4lj color=F\u00e4rg title=Titel go=G\u00e5 warning=Varning error=fel plugins=Insticksmoduler options=Alternativ defaults=Standardv\u00e4rden clean=Rensa rename=Byt namn fret=Band position=Position name=Namn author=Upphovsman version=Version description=Beskrivning info=Info configure=Konfigurera url=URL file=Arkiv file.new=Ny file.open=\u00d6ppna file.save=Spara file.save-as=Spara som file.save-changes-question=S\u00e5ngen har osparade \u00e4ndringar.\nVill du spara \u00e4ndringarna? file.exit=Avsluta file.export=Exportera file.export-midi=Exportera MIDI file.export-pdf=Exportera PDF file.print=Skriv ut file.print-preview=F\u00f6rhandsgranska utskrift file.import=Importera file.import-midi=Importera MIDI file.export-ascii=Exportera ASCII file.history=Tidigare file.open-url=\u00d6ppna webbadress file.open.error=Kan inte \u00f6ppna: {0} file.save.error=Kan inte spara: {0} file.import.error=Kan inte importera: {0} file.export.error=Kan inte exportera: {0} file.overwrite-question=Denna fil finns redan. Vill du skriva \u00f6ver den? edit.menu=Redigera edit.undo=\u00c5ngra edit.redo=G\u00f6r om edit.copy=Kopiera edit.from=Fr\u00e5n edit.to=Till edit.all-tracks=Alla sp\u00e5r edit.paste=Klistra in edit.paste.count=Klistra in r\u00e4knande edit.paste.replace-mode=Klistra in vid aktuell takt edit.paste.insert-mode=Klistra in i ny takt edit.delete=Ta bort edit.cut=Klipp ut edit.mouse-mode-selection=Markeringsl\u00e4ge edit.mouse-mode-edition=Partiturredigeringsl\u00e4ge edit.not-natural-key=H\u00f6jnings/S\u00e4nkningsl\u00e4ge edit.voice-1=V\u00e4lj st\u00e4mma 1 edit.voice-2=V\u00e4lj st\u00e4mma 2 view=Visa view.layout=Layout view.layout.page=Sidlayout view.layout.linear=Linj\u00e4r layout view.layout.compact=Kompakt view.layout.multitrack=Flera sp\u00e5r view.layout.chord-style=Ackordutseende view.layout.chord-name=Ackordnamn view.layout.chord-diagram=Ackorddiagram view.layout.score-enabled=Visa partitur view.layout.tablature-enabled=Visa tabulatur view.show-mixer=Visa mixer view.show-fretboard=Visa greppbr\u00e4da view.show-piano=Visa klaviatur view.show-matrix=Visa matris view.show-transport=Visa spelare fretboard.direction=Riktning fretboard.right-mode=H\u00f6gerh\u00e4nt l\u00e4ge fretboard.left-mode=V\u00e4nsterh\u00e4nt l\u00e4ge fretboard.background-color=Bakgrundsf\u00e4rg fretboard.display-note-text=Visa nottext fretboard.display-scale-text=Visa skaltext fretboard.font=Typsnitt fretboard.fretpoint-color=F\u00e4rg p\u00e5 greppband fretboard.note-color=Notf\u00e4rg fretboard.scale-note-color=F\u00e4rg p\u00e5 not i skala fretboard.settings=Inst\u00e4llningar f\u00f6r greppbr\u00e4da fretboard.string-color=Str\u00e4ngf\u00e4rg fretboard.settings.options=Alternativ piano.editor=Redigering med klaviatur piano.natural-key-color=F\u00e4rg p\u00e5 "vita" tangenter piano.not-natural-key-color=F\u00e4rg p\u00e5 "svarta" tangenter piano.note-color=Notf\u00e4rg piano.scale-note-color=F\u00e4rg p\u00e5 not i skala piano.settings=Inst\u00e4llningar f\u00f6r klaviatur matrix.editor=Redigering med matris matrix.grids=Antal rutn\u00e4t matrix.border-color=Kantf\u00e4rg matrix.font=Typsnitt matrix.foreground-color=F\u00f6rgrundsf\u00e4rg matrix.line-color-1=Udda raders f\u00e4rg matrix.line-color-2=J\u00e4mna raders f\u00e4rg matrix.line-color-over=Radf\u00e4rg d\u00e5 muspekaren \u00e4r \u00f6ver matrix.note-color=Notf\u00e4rg matrix.play-note-color=F\u00e4rg p\u00e5 spelad not matrix.position-color=Positionsf\u00e4rg matrix.settings=Inst\u00e4llningar f\u00f6r matris composition=Komposition composition.timesignature=Taktartssignatur composition.timesignature.Numerator=Antal slag composition.timesignature.denominator=Pulsv\u00e4rde composition.timesignature.to-the-end=Till slutet composition.tempo=Tempo composition.tempo-percent=Procent composition.tempo.invalid=Ogiltigt tempo composition.tempo.start-to-end=Till\u00e4mpa detta tempo i hela s\u00e5ngen composition.tempo.position-to-end=Till\u00e4mpa detta tempo till slutet composition.tempo.position-to-next=Till\u00e4mpa detta tempo till n\u00e4sta tempomark\u00f6r composition.properties=Egenskaper composition.name=Namn composition.artist=Artist composition.album=Album composition.author=Upphovsman composition.date=Datum composition.copyright=Copyright composition.writer=Skapare av tabulatur composition.transcriber=Transkriberad av composition.comments=Kommentarer composition.tripletfeel=Triolk\u00e4nsla composition.clef=Klav composition.clef.treble=Diskant composition.clef.bass=Bas composition.clef.tenor=Tenor composition.clef.alto=Alt composition.clef.to-the-end=Till\u00e4mpa denna klaven till slutet composition.keysignature=F\u00f6rtecken composition.keysignature.natural=Inga composition.keysignature.sharp-1=1 h\u00f6jd composition.keysignature.sharp-2=2 h\u00f6jda composition.keysignature.sharp-3=3 h\u00f6jda composition.keysignature.sharp-4=4 h\u00f6jda composition.keysignature.sharp-5=5 h\u00f6jda composition.keysignature.sharp-6=6 h\u00f6jda composition.keysignature.sharp-7=7 h\u00f6jda composition.keysignature.flat-1=1 s\u00e4nkt composition.keysignature.flat-2=2 s\u00e4nkta composition.keysignature.flat-3=3 s\u00e4nkta composition.keysignature.flat-4=4 s\u00e4nkta composition.keysignature.flat-5=5 s\u00e4nkta composition.keysignature.flat-6=6 s\u00e4nkta composition.keysignature.flat-7=7 s\u00e4nkta composition.keysignature.to-the-end=Till\u00e4mpa dessa f\u00f6rtecken till slutet composition.tripletfeel=Triolk\u00e4nsla composition.tripletfeel.none=Ingen triolk\u00e4nsla composition.tripletfeel.eighth=8-dels trioler composition.tripletfeel.sixteenth=16-dels trioler composition.tripletfeel.to-the-end=Till\u00e4mpa denna triolk\u00e4nsla till slutet help=Hj\u00e4lp help.help=Hj\u00e4lp help.doc=Dokumentation help.about=Om help.about.license=Licens help.about.authors=Upphovsm\u00e4n help.about.description=Beskrivning track=Sp\u00e5r track.number=Nr track.name=Namn track.color=F\u00e4rg track.first=F\u00f6rsta sp\u00e5ret track.last=Sista sp\u00e5ret track.previous=F\u00f6reg\u00e5ende sp\u00e5r track.next=N\u00e4sta sp\u00e5r track.add=L\u00e4gg till sp\u00e5r track.remove=Ta bort sp\u00e5r track.clone=Klona sp\u00e5r track.move-up=Flytta upp track.move-down=Flytta ner track.instrument=Instrument track.properties=Egenskaper track.properties.general=Allm\u00e4nt track.name.default-percussion-name=Slagverk track.lyrics=S\u00e5ngtext lyric.editor=Redigering av s\u00e5ngtext measure=Takt measure.first=F\u00f6rsta takten measure.last=Sista takten measure.previous=F\u00f6reg\u00e5ende takt measure.next=N\u00e4sta takt measure.add=L\u00e4gg till takt measure.add.count=L\u00e4gg till r\u00e4knande measure.add-before-current-position=L\u00e4gg till takt innan den aktuella positionen measure.add-after-current-position=L\u00e4gg till takt efter den aktuella positionen measure.add-at-end=L\u00e4gg till takt i slutet measure.remove=Ta bort takt measure.copy=Kopiera takt measure.paste=Klistra in takt measure.clean=Rensa takt duration=Notv\u00e4rde duration.whole=Hel duration.half=Halv duration.quarter=Fj\u00e4rdedel duration.eighth=\u00c5ttondel duration.sixteenth=Sextondel duration.thirtysecond=Trettioandradel duration.sixtyfourth=Sextiofj\u00e4rdedel duration.dotted=Punkterad duration.doubledotted=Dubbelpunkterad duration.division-type=Tuplet dynamic=Dynamik dynamic.piano-pianissimo=Piano pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo piano dynamic.mezzo-forte=Mezzo forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte fortissimo effects=Effekter effects.vibrato=Vibrato effects.bend=Bend effects.deadnote=D\u00f6d not effects.slide=Slide effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=Svajarm effects.tremolo-bar-editor=Redigering av svajarm effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release up effects.tremolo-bar.release-down=Release down effects.tremolo-bar.inverted-dip=Inverted dip effects.tremolo-bar.return=Return effects.ghostnote=Sp\u00f6knot effects.accentuatednote=Betonad not effects.heavyaccentuatednote=Starkt betonad not effects.harmonic=Harmonic effects.grace=F\u00f6ranslagsnot effects.grace-editor=Redigering av f\u00f6ranslagsnot effects.grace.before-beat=F\u00f6re slag effects.grace.on-beat=P\u00e5 slag effects.grace.transition=\u00d6verg\u00e5ng effects.grace.transition-none=Ingen effects.grace.transition-bend=Bend effects.grace.transition-slide=Slide effects.grace.transition-hammer=Hammer effects.trill=Trill effects.trill-editor=Redigering av trill effects.tremolo-picking=Tremolo picking effects.tremolo-picking-editor=Redigering av tremolo picking effects.palm-mute=Palm mute effects.staccato=Staccato effects.tapping=Tapping effects.slapping=Slapping effects.popping=Popping effects.fade-in=Upptoning effects.harmonic-editor=Redigering av harmonic effects.harmonic.type-of-harmonic=Typ av harmonic effects.harmonic.natural=Natural harmonic effects.harmonic.artificial=Artifical harmonic effects.harmonic.artificial.key-offset=Ton-offset effects.harmonic.tapped=Tapped harmonic effects.harmonic.tapped.left-hand=V\u00e4nster hand effects.harmonic.tapped.right-hand=H\u00f6ger hand effects.harmonic.pinch=Pinch harmonic effects.harmonic.semi=Semi harmonic bend.editor=Redigering av bend bend.bend=Bend bend.bend-release=Bend/Release bend.bend-release-bend=Bend/Release/Bend bend.prebend=Pre-bend bend.prebend-release=Pre-bend/Release transport=Spelare transport.start=Spela upp transport.stop=Stoppa transport.pause=Paus transport.first=F\u00f6rsta transport.last=Sista transport.previous=F\u00f6reg\u00e5ende transport.next=N\u00e4sta transport.metronome=Metronom transport.mode=Uppspelningsl\u00e4ge transport.mode.simple=Enkelt uppspelningsl\u00e4ge transport.mode.simple.tempo-percent=Tempoprocentandel transport.mode.simple.loop=Spela enkel slinga transport.mode.trainer=Tr\u00e4ningsl\u00e4ge transport.mode.trainer.increment-description=\u00d6ka med transport.mode.loop-range=Slingans omf\u00e5ng transport.mode.loop-range.from=Spela fr\u00e5n takt transport.mode.loop-range.from-default=Fr\u00e5n b\u00f6rjan transport.mode.loop-range.to=Spela till takt transport.mode.loop-range.to-default=Till slutet transport.set-loop-start=S\u00e4tt slingans startpunkt transport.set-loop-end=S\u00e4tt slingans slutpunkt mixer=Mixer mixer.volume=Volym mixer.track.solo=Solo mixer.track.mute=Tysta mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.volume=Volym mixer.channel.balance=Balans mixer.channel.chorus=Chorus mixer.channel.reverb=Reverb mixer.channel.phaser=Phaser mixer.channel.tremolo=Tremolo mixer.channel.free=Ledig mixer.channel.link=L\u00e4nk repeat.open=\u00d6ppna repris repeat.close=St\u00e4ng repris repeat.alternative=Alternativa repriser repeat.alternative.editor=Redigera alternativa repriser repetitions=Repriser repeat.number-of-repetitions=Antal repriser beat=Slag beat.clean=Rensa slag beat.voice.remove-unused=Ta bort oanv\u00e4nd st\u00e4mma beat.voice-up=Notskaft upp\u00e5t beat.voice-down=Notskaft ned\u00e5t beat.voice-auto=Automatiska notskaft beat.stroke=Anslag beat.stroke-up=Upp\u00e5tslag beat.stroke-down=Ned\u00e5tslag beat.move-left=Flytta ett slag \u00e5t v\u00e4nster beat.move-right=Flytta ett slag \u00e5t h\u00f6ger beat.move-custom=Anpassa flytt av slag beat.move-custom.dialog.title=Anpassa flytt beat.move-custom.dialog.direction-tip=Flyttriktning beat.move-custom.dialog.move-1.tip=Stor flytt beat.move-custom.dialog.move-2.tip=Liten flytt beat.move-custom.dialog.direction=Riktning beat.move-custom.dialog.direction.right=Flytta till h\u00f6ger beat.move-custom.dialog.direction.left=Flytta till v\u00e4nster beat.move-custom.dialog.count=R\u00e4knande beat.move-custom.dialog.duration=Notv\u00e4rde beat.move-custom.dialog.duration.type=Punkterad/Dubbelpunkterad beat.move-custom.dialog.duration.type.normal=Ingen beat.move-custom.dialog.duration.division-type=Typ av uppdelning beat.move-custom.dialog.duration.division-type.normal=Vanlig (Tuplet) note=Not note.semitone-up=Halvton upp note.semitone-down=Halvton ner note.shift-up=Skifta upp\u00e5t note.shift-down=Skifta ned\u00e5t note.tiednote=Sammanbunden not note.deadnote=D\u00f6d not insert.chord=Infoga ackord chord.editor=Redigering av ackord chord=Ackord chord.name=Namn chord.bass=Bas chord.custom=Anpassa ackord chord.custom.name-empty-error=Ackordnamnet kan inte vara tomt. chord.custom.name-exist-error=Ackordnamnet finns redan. chord.settings.tip=Anpassa inst\u00e4llningar chord.settings.type=Typ chord.settings.type.most-common=Vanligaste chord.settings.type.inversions=Omv\u00e4ndningar chord.settings.type.close-voiced=St\u00e4ngda ljudande chord.settings.type.open-voiced=\u00d6ppna ljudande chord.settings.open-chords=\u00d6ppna ackord chord.settings.chords-to-display=Antal ackord att visa chord.settings.search-frets=S\u00f6k band chord.settings.minimum-fret=Min chord.settings.maximum-fret=Max instrument=Instrument instrument.instrument=Instrument instrument.percussion-track=Slagverkssp\u00e5r tuning=St\u00e4mning tuning.offset=Offset tuning.strings=Str\u00e4ngar tuning.strings.transpose=Transponera p\u00e5verkade noter tuning.strings.transpose.try-keep-strings=F\u00f6rs\u00f6k beh\u00e5lla noter p\u00e5 samma str\u00e4ng tuning.strings.transpose.apply-to-chords=Transponera ackord language=Spr\u00e5k choose-color=V\u00e4lj en f\u00e4rg settings=Inst\u00e4llningar settings.config=Konfigurera TuxGuitar settings.config.language=Spr\u00e5k settings.config.language.choose=V\u00e4lj ditt spr\u00e5k settings.config.styles=Utseende settings.config.styles.general=Allm\u00e4nt utseende settings.config.styles.printer=Utskriftsutseende settings.config.styles.font.default=Standardtypsnitt settings.config.styles.font.note=Nottypsnitt settings.config.styles.font.lyric=S\u00e5ngtexttypsnitt settings.config.styles.font.text=Texttypsnitt settings.config.styles.font.time-signature=Taktarttypsnitt settings.config.styles.font.printer-default=Standardtypsnitt vid utskrift settings.config.styles.font.printer-note=Nottypsnitt vid utskrift settings.config.styles.font.printer-time-signature=Taktarttypsnitt vid utskrift settings.config.styles.color.score-note=Notf\u00e4rg i partitur settings.config.styles.color.tab-note=Notf\u00e4rg i tabulatur settings.config.styles.color.play-note=F\u00e4rg p\u00e5 spelad not settings.config.apply-changes-question=Vill du verkst\u00e4lla \u00e4ndringarna nu? settings.config.sound=Ljud settings.config.main=Allm\u00e4nt settings.config.main.window-title=F\u00f6nstertitel settings.config.main.window-title.help=F\u00f6ljande variabler kommer placeras i f\u00f6nstertiteln: settings.config.main.window-title.var.description.appname=Denna variabel representerar programnamnet: TuxGuitar settings.config.main.window-title.var.description.appversion=Denna variabel representerar versionen av TuxGuitar settings.config.main.window-title.var.description.filename=Denna variabel representerar namnet p\u00e5 den \u00f6ppnade filen settings.config.main.window-title.var.description.filepath=Denna variabel representerar s\u00f6kv\u00e4gen till den \u00f6ppnade filen settings.config.main.window-title.var.description.songname=Denna variabel representerar s\u00e5ngens namn settings.config.main.window-title.var.description.songauthor=Denna variabel representerar s\u00e5ngens upphovsman settings.config.main.window-title.var.description.songalbum=Denna variabel representerar s\u00e5ngens album settings.config.main.window-title.var.description.songartist=Denna variabel representerar s\u00e5ngens artist settings.config.main.options=Alternativ settings.config.main.splash-enabled=Visa startbild vid uppstart settings.config.main.table.auto-size.enabled=Aktivera automatisk tabellstorlek settings.config.styles.color.lines=V\u00e5gr\u00e4ta linjers f\u00e4rg settings.config.toolbars=Verktygsrader settings.config.toolbars.tip=Anpassa dina verktygsrader settings.config.toolbars.list=Tillg\u00e4ngliga verktygsrader settings.config.toolbars.move-up=Flytta upp settings.config.toolbars.move-down=Flytta ner settings.config.skin=Skal settings.config.skin.choose=V\u00e4lj ditt skal settings.keybindings=Konfigurera tangenbordgenv\u00e4gar key-bindings-editor=Redigera tangentbordgensv\u00e4gar key-bindings-editor-action-select=Markera en \u00e5tg\u00e4rd key-bindings-editor-action-column=\u00c5tg\u00e4rd key-bindings-editor-shortcut-column=Genv\u00e4g key-bindings-editor-push-a-key=Tryck in en snabbtangent key-bindings-editor-save-question=Det finns osparade \u00e4ndringar. Vill du avsluta utan att spara? key-bindings-editor-reserved-title=Reserverad genv\u00e4g key-bindings-editor-reserved-message=Ledsen, denna genv\u00e4g \u00e4r reserverad key-bindings-editor-override=Genv\u00e4gen anv\u00e4nds redan! \u00c4r du s\u00e4ker p\u00e5 att du vill anv\u00e4nda den? print.print=Skriv ut print.dialog=Skriv ut print.service=Service print.service.name=Namn print.service.status=Tillst\u00e5nd print.service.type=Typ print.service.info=Info print.range=Sidintervall print.range.all-pages=Allt print.range.pages=Sidor print.range.pages-to=Till print.copies=Kopior print.copies-number=Antal kopior print.print-to-file=Skriv till fil print.file-chooser=V\u00e4lj print-header.default-song-name=Utan titel print-header.default-song-author=Anonym print.preview=F\u00f6rhandskgranska utskrift print.preview.page-of=Av marker=Mark\u00f6r marker.add=L\u00e4gg till mark\u00f6r marker.list=Lista mark\u00f6rer marker.first=G\u00e5 till f\u00f6rsta mark\u00f6ren marker.last=G\u00e5 till sista mark\u00f6ren marker.next=G\u00e5 till n\u00e4sta mark\u00f6ren marker.previous=G\u00e5 till f\u00f6reg\u00e5ende mark\u00f6r export.tablature-enabled=Visa tabulatur export.score-enabled=Visa partitur export.chord-name-enabled=Visa ackordnamn export.chord-diagram-enabled=Visa ackorddiagram export.black-and-white=Svartvitt l\u00e4ge scale=Skala scale.list=Lista med skalor text.insert=Infoga text text.editor=Textredigerare text.text=Text tools=Verktyg tools.scale=Lista med skalor tools.browser=Bl\u00e4ddrare tools.plugins=Insticksmoduler tools.shortcuts=Genv\u00e4gar tools.settings=Inst\u00e4llningar tools.transpose=Transponering tools.transpose.semitones=Transponera halvtoner tools.transpose.apply-to-track=Transponera alla takter tools.transpose.apply-to-measure=Transponera bara denna takt tools.transpose.apply-to-all-tracks=Till\u00e4mpa p\u00e5 alla sp\u00e5r tools.transpose.try-keep-strings=F\u00f6rs\u00f6k beh\u00e5lla noter p\u00e5 samma str\u00e4ng n\u00e4r det \u00e4r m\u00f6jligt tools.transpose.apply-to-chords=Transponera ackord browser.dialog=Bl\u00e4ddrare browser.menu.file=Fil browser.open=\u00d6ppna browser.exit=Avsluta browser.menu.collection=Samling browser.menu.go=G\u00e5 browser.collection.select=V\u00e4lj samling browser.collection.open=\u00d6ppna browser.collection.remove=Ta bort browser.collection.close=St\u00e4ng browser.collection.new=Ny browser.go-root=Hem browser.go-back=Tillbaka browser.refresh=Uppdatera browser.factory.fs.name=Filsystem browser.collection.fs.name=Namn browser.collection.fs.path=Mapp browser.collection.fs.editor-title=Samling i filsystemet browser.collection.fs.editor-tip=V\u00e4lj din samlingsmapp browser.collection.fs.invalid-path=V\u00e4lj en giltig mapp midi.port=MIDI-port midi.sequencer=MIDI-sequencer plugin.unknown-value=Inte tillg\u00e4nglig. plugin.column.name=Namn plugin.column.enabled=Aktiverad ######################### ### Tool Bar Items ### ######################### file.items=Arkivobjekt edit.items=Redigeringsobjekt property.items=Egenskapsobjekt track.items=Sp\u00e5robjekt duration.items=Notv\u00e4rdesobjekt beat.items=Notobjekt composition.items=Kompositionsobjekt repeat.items=Repetionsobjekt transport.items=Transportobjekt marker.items=Mark\u00f6robjekt insert.items=Infogningsobjekt layout.items=Layoutobjekt view.items=Visningsobjekt effect.items=Effektobjekt dynamic.items=Dynamikobjekt ######################### ###Key Binding Actions### ######################### action.file.new=Ny fil action.file.open=\u00d6ppna fil action.file.open-url=\u00d6ppna webbadress action.file.save=Spara action.file.save-as=Spara som action.file.print=Skriv ut action.file.print-preview=F\u00f6rhandsgranska utskrift action.file.exit=Avsluta TuxGuitar action.edit.undo=\u00c5ngra action.edit.redo=G\u00f6r om action.edit.voice-1=V\u00e4lj st\u00e4mma 1 action.edit.voice-2=V\u00e4lj st\u00e4mma 2 action.composition.change-time-signature=\u00c4ndra taktart action.composition.change-tempo=\u00c4ndra tempo action.composition.change-info=\u00c4ndra s\u00e5nginformation action.composition.change-clef=\u00c4ndra klav action.composition.change-key-signature=\u00c4ndra f\u00f6rtecken action.composition.change-triplet-feel=\u00c4ndra triolk\u00e4nsla action.view.layout-set-page=Visa sidlayout action.view.layout-set-linear=Visa linj\u00e4r layout action.view.layout-set-multitrack=Visa flera sp\u00e5r action.view.layout-set-score-enabled=Visa partitur action.view.layout-set-tablature-enabled=Visa tabulatur action.view.layout-set-compact=Visa kompakt l\u00e4ge action.view.layout-set-chord-diagram-enabled=Aktivera ackorddiagram action.view.layout-set-chord-name-enabled=Aktivera ackordnamn action.view.show-fretboard=Visa greppbr\u00e4da action.view.show-piano=Visa klaviatur action.view.show-matrix=Visa matris action.view.show-mixer=Visa mixer action.view.show-transport=Visa spelare action.track.add=L\u00e4gg till sp\u00e5r action.track.remove=Ta bort sp\u00e5r action.track.clone=Klona sp\u00e5r action.track.go-first=G\u00e5 till f\u00f6rsta sp\u00e5ret action.track.go-last=G\u00e5 till sista sp\u00e5ret action.track.go-next=G\u00e5 till n\u00e4sta sp\u00e5r action.track.go-previous=G\u00e5 till f\u00f6reg\u00e5ende sp\u00e5r action.track.lyrics=Redigera sp\u00e5rets s\u00e5ngtext action.track.properties=\u00c4ndra sp\u00e5regenskaper action.track.move-down=Flytta ner action.track.move-up=Flytta upp action.measure.add=L\u00e4gg till takt action.measure.remove=Ta bort takt action.measure.copy=Kopiera takt action.measure.paste=Klistra in takt action.measure.clean=Rensa takt action.measure.go-first=G\u00e5 till f\u00f6rsta takten action.measure.go-last=G\u00e5 till sista takten action.measure.go-next=G\u00e5 till n\u00e4sta takt action.measure.go-previous=G\u00e5 till f\u00f6reg\u00e5ende takt action.beat.general.remove-unused-voice=Ta bort oanv\u00e4nd st\u00e4mma action.beat.general.voice-up=S\u00e4tt notskaft upp\u00e5t action.beat.general.voice-down=S\u00e4tt notskaft ned\u00e5t action.beat.general.voice-auto=S\u00e4tt notskaft automatiskt action.beat.general.set-stroke-up=S\u00e4tt upp\u00e5tslag action.beat.general.set-stroke-down=S\u00e4tt ned\u00e5tslag action.beat.general.move-left=Flytta ett slag \u00e5t v\u00e4nster action.beat.general.move-right=Flytta ett slag \u00e5t h\u00f6ger action.beat.general.move-custom=Anpassa flytt av slag action.note.general.clean-beat=Rensa slag action.note.general.decrement-semitone=S\u00e4nk halvton action.note.general.increment-semitone=H\u00f6j halvton action.note.general.shift-down=Skifta upp action.note.general.shift-up=Skifta ner action.note.general.tied=L\u00e4gg till/Ta bort sammanbunden action.note.duration.set-whole=S\u00e4tt helnot action.note.duration.set-half=S\u00e4tt halvnot action.note.duration.set-quarter=S\u00e4tt fj\u00e4rdedelsnot action.note.duration.set-eighth=S\u00e4tt \u00e5ttondelsnot action.note.duration.set-sixteenth=S\u00e4tt sextondelsnot action.note.duration.set-thirty-second=S\u00e4tt trettiofj\u00e4rdedelsnot action.note.duration.set-sixty-fourth=S\u00e4tt sextiofj\u00e4rdedelsnot action.note.duration.decrement-duration=Minska notv\u00e4rde action.note.duration.increment-duration=\u00d6ka notv\u00e4rde action.note.duration.change-dotted=L\u00e4gg till/Ta bort punkterad action.note.duration.change-double-dotted=L\u00e4gg till/Ta bort dubbelpunkterad action.note.duration.change-division-type=L\u00e4gg till/Ta bort tuplet action.note.effect.change-vibrato=L\u00e4gg till/Ta bort vibrato action.note.effect.change-bend=L\u00e4gg till/Ta bort bend action.note.effect.change-slide=L\u00e4gg till/Ta bort slide action.note.effect.change-hammer=L\u00e4gg till/Ta bort hammer-on/pull-off action.note.effect.change-accentuated=L\u00e4gg till/Ta bort betonad action.note.effect.change-dead=L\u00e4gg till/Ta bort d\u00f6d not action.note.effect.change-fade-in=L\u00e4gg till/Ta bort upptoning action.note.effect.change-ghost=L\u00e4gg till/Ta bort sp\u00f6knot action.note.effect.change-grace=L\u00e4gg till/Ta bort f\u00f6ranslagsnot action.note.effect.change-harmonic=L\u00e4gg till/Ta bort harmonic action.note.effect.change-heavy-accentuated=L\u00e4gg till/Ta bort starkt betonad action.note.effect.change-palm-mute=L\u00e4gg till/Ta bort palm mute action.note.effect.change-popping=L\u00e4gg till/Ta bort popping action.note.effect.change-slapping=L\u00e4gg till/Ta bort slapping action.note.effect.change-staccato=L\u00e4gg till/Ta bort staccato action.note.effect.change-tapping=L\u00e4gg till/Ta bort tapping action.note.effect.change-tremolo-bar=L\u00e4gg till/Ta bort svajarm action.note.effect.change-tremolo-picking=L\u00e4gg till/Ta bort tremolo picking action.note.effect.change-trill=L\u00e4gg till/Ta bort trill action.insert.open-repeat=\u00d6ppna repris action.insert.close-repeat=St\u00e4ng repris action.insert.repeat-alternative=Reprisalternativ action.insert.chord=Infoga ackord action.insert.text=Infoga text action.marker.add=L\u00e4gg till mark\u00f6r action.marker.go-next=G\u00e5 till n\u00e4sta mark\u00f6r action.marker.go-previous=G\u00e5 till f\u00f6reg\u00e5ende mark\u00f6r action.transport.play=Spela upp s\u00e5ng action.transport.stop=Stanna uppspelning action.transport.mode=L\u00e4ge action.transport.metronome=Metrononom action.transport.set-loop-start=S\u00e4tt slingans startpunkt action.transport.set-loop-end=S\u00e4tt slingans slutpunkt action.tools.browser=Bl\u00e4ddrare action.tools.transpose=Transponera noter action.settings.configure=Inst\u00e4llningar action.help.doc=Hj\u00e4lp tuxguitar-src-1.2/TuxGuitar/share/lang/messages_uk.properties0000644000175000017500000015421011273045225024132 0ustar julianjulianok=\u0414\u043e\u0431\u0440\u0435 cancel=\u0412\u0456\u0434\u043c\u0456\u043d\u0430 yes=\u0422\u0430\u043a no=\u041d\u0456 add=\u0414\u043e\u0434\u0430\u0442\u0438 edit=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 exit=\u0412\u0438\u0439\u0442\u0438 choose=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 color=\u041a\u043e\u043b\u0456\u0440 title=\u041d\u0430\u0437\u0432\u0430 go=\u0419\u0442\u0438 warning=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f error=\u041f\u043e\u043c\u0438\u043b\u043a\u0430 plugins=\u0412\u0442\u0443\u043b\u043a\u0438 options=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f defaults=\u0417\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 rename=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 fret=\u041b\u0430\u0434 position=\u041f\u043e\u0437\u0438\u0446\u0456\u044f name=\u0406\u043c'\u044f author=\u0410\u0432\u0442\u043e\u0440 version=\u0412\u0435\u0440\u0441\u0456\u044f description=\u041e\u043f\u0438\u0441 info=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f configure=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f tuxguitar.title=Tux-Guitar file=\u0424\u0430\u0439\u043b file.new=\u041d\u043e\u0432\u0438\u0439 file.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 file.save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 file.save-as=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u044f\u043a file.save-changes-question=\u0417\u043c\u0456\u043d\u0438 \u0434\u043e \u043f\u0456\u0441\u043d\u0456 \u043d\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456.\n\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438? file.exit=\u0412\u0438\u0445\u0456\u0434 file.export=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 file.export-midi=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 MIDI file.export-pdf=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 PDF file.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438 file.print-preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 file.import=\u0406\u043c\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 file.import-midi=\u0406\u043c\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 MIDI file.export-ascii=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 ASCII file.history=\u0406\u0441\u0442\u043e\u0440\u0456\u044f file.open-url=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 URL file.open.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438: {0} file.save.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438: {0} file.import.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0456\u043c\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438: {0} file.export.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0435\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438: {0} file.overwrite-question=\u0426\u0435\u0439 \u0444\u0430\u0439\u043b \u0432\u0436\u0435 \u0456\u0441\u043d\u0443\u0454, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u0438? edit.menu=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f edit.undo=\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 edit.redo=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 edit.copy=\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 edit.from=\u0406\u0437 edit.to=\u0414\u043e edit.all-tracks=\u0412\u0441\u0456\u0445 \u0442\u0440\u0435\u043a\u0456\u0432 edit.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 edit.paste.replace-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0443 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0442\u0430\u043a\u0442 edit.paste.insert-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0443 \u043d\u043e\u0432\u0438\u0439 \u0442\u0430\u043a\u0442 edit.delete=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 edit.cut=\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 edit.mouse-mode-selection=\u0420\u0435\u0436\u0438\u043c \u0432\u0438\u0431\u043e\u0440\u0443 edit.mouse-mode-edition=\u0420\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f edit.not-natural-key=\u0414\u0456\u0454\u0437/\u0411\u0435\u043c\u043e\u043b\u044c view=\u0412\u0438\u0433\u043b\u044f\u0434 view.layout=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f view.layout.page=\u042f\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430 view.layout.linear=\u041b\u0456\u043d\u0456\u0439\u043d\u043e view.layout.compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e view.layout.multitrack=\u0411\u0430\u0433\u0430\u0442\u043e \u0434\u043e\u0440\u0456\u0436\u043e\u043a view.layout.chord-style=\u0412\u0438\u0433\u043b\u044f\u0434 \u0430\u043a\u043e\u0440\u0434\u0456\u0432 view.layout.chord-name=\u0406\u043c'\u044f view.layout.chord-diagram=\u0414\u0456\u0430\u0433\u0440\u0430\u043c\u0430 view.layout.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443 view.layout.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443 view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0456\u043a\u0448\u0435\u0440 view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0433\u0440\u0438\u0444 view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0448\u0456 view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044e view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447 fretboard.right-mode=\u041f\u0440\u0430\u0432\u0448\u0430 fretboard.left-mode=\u041b\u0456\u0432\u0448\u0430 fretboard.background-color=\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443 fretboard.display-note-text=\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0438 \u043d\u043e\u0442 fretboard.display-scale-text=\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0438 \u043d\u043e\u0442 \u043b\u0430\u0434\u0456\u0432 fretboard.font=\u0428\u0440\u0438\u0444\u0442 fretboard.fretpoint-color=\u041a\u043e\u043b\u0456\u0440 \u043b\u0430\u0434\u0456\u0432 fretboard.note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 fretboard.scale-note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u043b\u0430\u0434\u0456\u0432 fretboard.settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0433\u0440\u0438\u0444\u0443 fretboard.string-color=\u041a\u043e\u043b\u0456\u0440 \u0441\u0442\u0440\u0443\u043d fretboard.settings.options=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f piano.editor=\u041a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0430 piano.natural-key-color=\u041a\u043e\u043b\u0456\u0440 \u043a\u043b\u0430\u0432\u0456\u0448 \u0442\u043e\u043d\u0456\u0432 piano.not-natural-key-color=\u041a\u043e\u043b\u0456\u0440 \u043a\u043b\u0430\u0432\u0456\u0448 \u043d\u0430\u043f\u0456\u0432\u0442\u043e\u043d\u0456\u0432 piano.note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 piano.scale-note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u043b\u0430\u0434\u0456\u0432 piano.settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0438 matrix.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0456 matrix.grids=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u043e\u0437\u0434\u0456\u043b\u044e\u0432\u0430\u0447\u0456\u0432 matrix.border-color=\u041a\u043e\u043b\u0456\u0440 \u0433\u0440\u0430\u043d\u0438\u0446\u0456 matrix.font=\u0428\u0440\u0438\u0444\u0442 matrix.foreground-color=\u041a\u043e\u043b\u0456\u0440 \u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0443 matrix.line-color-1=\u041a\u043e\u043b\u0456\u0440 \u043f\u0430\u0440\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u043a\u0430 matrix.line-color-2=\u041a\u043e\u043b\u0456\u0440 \u043d\u0435\u043f\u0430\u0440\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u043a\u0430 matrix.line-color-over=\u041a\u043e\u043b\u0456\u0440 \u0440\u044f\u0434\u043a\u0430, \u043d\u0430 \u044f\u043a\u0438\u0439 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0430 \u043c\u0438\u0448\u0430 matrix.note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 matrix.play-note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442\u0438, \u0449\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u0454\u0442\u044c\u0441\u044f matrix.position-color=\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0437\u0438\u0446\u0456\u0457 matrix.settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0456 composition=\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0456\u044f composition.timesignature=\u0420\u043e\u0437\u043c\u0456\u0440 composition.timesignature.Numerator=\u0427\u0438\u0441\u0435\u043b\u044c\u043d\u0438\u043a composition.timesignature.denominator=\u0417\u043d\u0430\u043c\u0435\u043d\u043d\u0438\u043a composition.timesignature.to-the-end=\u0414\u043e \u043a\u0456\u043d\u0446\u044f composition.tempo=\u0422\u0435\u043c\u043f composition.tempo-percent=\u0412\u0456\u0434\u0441\u043e\u0442\u043e\u043a composition.tempo.invalid=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0439 \u0442\u0435\u043c\u043f composition.tempo.start-to-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u043c\u043f \u0434\u043e \u0432\u0441\u0456\u0454\u0457 \u043f\u0456\u0441\u043d\u0456 composition.tempo.position-to-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u043c\u043f \u0434\u043e \u043a\u0456\u043d\u0446\u044f composition.tempo.position-to-next=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u043c\u043f \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 \u0442\u0435\u043c\u043f\u0443 composition.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 composition.name=\u0406\u043c'\u044f composition.artist=\u0412\u0438\u043a\u043e\u043d\u0430\u0432\u0435\u0446\u044c composition.album=\u0410\u043b\u044c\u0431\u043e\u043c composition.author=\u0410\u0432\u0442\u043e\u0440 composition.tripletfeel=\u0422\u0440\u0456\u043e\u043b\u0456 composition.clef=\u041a\u043b\u044e\u0447 composition.clef.treble=\u0421\u043a\u0440\u0438\u043f\u043a\u043e\u0432\u0438\u0439 composition.clef.bass=\u0411\u0430\u0441\u043e\u0432\u0438\u0439 composition.clef.tenor=\u0422\u0435\u043d\u043e\u0440 composition.clef.alto=\u0410\u043b\u044c\u0442 composition.clef.to-the-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u043a\u043b\u044e\u0447 \u0434\u043e \u043a\u0456\u043d\u0446\u044f composition.keysignature=\u0422\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c composition.keysignature.natural=\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u0430 composition.keysignature.sharp-1=1 \u0434\u0456\u0454\u0437 composition.keysignature.sharp-2=2 \u0434\u0456\u0454\u0437\u0438 composition.keysignature.sharp-3=3 \u0434\u0456\u0454\u0437\u0438 composition.keysignature.sharp-4=4 \u0434\u0456\u0454\u0437\u0438 composition.keysignature.sharp-5=5 \u0434\u0456\u0454\u0437\u0438 composition.keysignature.sharp-6=6 \u0434\u0456\u0454\u0437\u0438 composition.keysignature.sharp-7=7 \u0434\u0456\u0454\u0437\u0438 composition.keysignature.flat-1=1 \u0431\u0435\u043c\u043e\u043b\u044c composition.keysignature.flat-2=2 \u0431\u0435\u043c\u043e\u043b\u0456 composition.keysignature.flat-3=3 \u0431\u0435\u043c\u043e\u043b\u0456 composition.keysignature.flat-4=4 \u0431\u0435\u043c\u043e\u043b\u0456 composition.keysignature.flat-5=5 \u0431\u0435\u043c\u043e\u043b\u0456 composition.keysignature.flat-6=6 \u0431\u0435\u043c\u043e\u043b\u0456 composition.keysignature.flat-7=7 \u0431\u0435\u043c\u043e\u043b\u0456 composition.keysignature.to-the-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0434\u043e \u043a\u0456\u043d\u0446\u044f composition.tripletfeel=\u0422\u0440\u0456\u043e\u043b\u0456 composition.tripletfeel.none=\u0411\u0435\u0437 \u0442\u0440\u0456\u043e\u043b\u0435\u0439 composition.tripletfeel.eighth=\u0422\u0440\u0456\u043e\u043b\u0456 8\u043c\u0456 composition.tripletfeel.sixteenth=\u0422\u0440\u0456\u043e\u043b\u0456 16\u0442\u0456 composition.tripletfeel.to-the-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0456 \u0442\u0440\u0456\u043e\u043b\u0456 \u0434\u043e \u043a\u0456\u043d\u0446\u044f help=\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 help.help=\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 help.doc=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044f help.about=\u041f\u0440\u043e help.about.license=\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f help.about.authors=\u0410\u0432\u0442\u043e\u0440\u0438 help.about.description=\u041e\u043f\u0438\u0441 track=\u0414\u043e\u0440\u0456\u0436\u043a\u0430 track.number=\u2116 track.name=\u0406\u043c'\u044f track.color=\u041a\u043e\u043b\u0456\u0440 track.first=\u041f\u0435\u0440\u0448\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430 track.last=\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430 track.previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430 track.next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430 track.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443 track.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443 track.clone=\u0414\u0443\u0431\u043b\u044e\u0432\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443 track.move-up=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u0433\u043e\u0440\u0443 track.move-down=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u043d\u0438\u0437 track.instrument=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 track.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 track.properties.general=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 track.name.default-percussion-name=\u0423\u0434\u0430\u0440\u043d\u0456 track.lyrics=\u0422\u0435\u043a\u0441\u0442 \u043f\u0456\u0441\u043d\u0456 lyric.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443 measure=\u0422\u0430\u043a\u0442 measure.first=\u041f\u0435\u0440\u0448\u0438\u0439 \u0442\u0430\u043a\u0442 measure.last=\u041e\u0441\u0442\u0430\u043d\u043d\u0456\u0439 \u0442\u0430\u043a\u0442 measure.previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0442\u0430\u043a\u0442 measure.next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0442\u0430\u043a\u0442 measure.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 measure.add-before-current-position=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u044e \u043f\u043e\u0437\u0438\u0446\u0456\u0454\u044e measure.add-after-current-position=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 \u043f\u0456\u0441\u043b\u044f \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0457 \u043f\u043e\u0437\u0438\u0446\u0456\u0457 measure.add-at-end=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 \u0443 \u043a\u0456\u043d\u0435\u0446\u044c measure.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u043a\u0442 measure.copy=\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u043a\u0442 measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0442\u0430\u043a\u0442 duration=\u0422\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c duration.whole=\u0426\u0456\u043b\u0430 duration.half=\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430 duration.quarter=\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0430 duration.eighth=\u0412\u043e\u0441\u044c\u043c\u0430 duration.sixteenth=\u0428\u0456\u0441\u0442\u043d\u0430\u0434\u0446\u044f\u0442\u0430 duration.thirtysecond=\u0422\u0440\u0438\u0434\u0446\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0430 duration.sixtyfourth=\u0428\u0456\u0441\u0442\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430 duration.dotted=\u0406\u0437 \u043a\u0440\u0430\u043f\u043a\u043e\u044e duration.doubledotted=\u0406\u0437 \u043f\u043e\u0434\u0432\u0456\u0439\u043d\u043e\u044e \u043a\u0440\u0430\u043f\u043a\u043e\u044e duration.division-type=\u0422\u0440\u0438\u043f\u043b\u0435\u0442 dynamic=\u0414\u0438\u043d\u0430\u043c\u0456\u0447\u043d\u0456 \u0432\u0456\u0434\u0442\u0456\u043d\u043a\u0438 dynamic.piano-pianissimo=Piano Pianissimo dynamic.pianissimo=Pianissimo dynamic.piano=Piano dynamic.mezzo-piano=Mezzo Piano dynamic.mezzo-forte=Mezzo Forte dynamic.forte=Forte dynamic.fortissimo=Fortissimo dynamic.forte-fortissimo=Forte Fortissimo effects=\u0415\u0444\u0435\u043a\u0442\u0438 effects.vibrato=\u0412\u0456\u0431\u0440\u0430\u0442\u043e effects.bend=\u041f\u0456\u0434\u0442\u044f\u0436\u043a\u0430 (\u0411\u0435\u043d\u0434) effects.deadnote=\u0417\u0430\u0433\u043b\u0443\u0448\u0435\u043d\u0430 \u043d\u043e\u0442\u0430 effects.slide=\u041a\u043e\u0432\u0437\u0430\u043d\u043d\u044f (\u0413\u043b\u0456\u0441\u0430\u043d\u0434\u043e) effects.hammer=Hammer-on/Pull-off effects.tremolo-bar=\u0412\u0430\u0436\u0456\u043b\u044c \u0442\u0440\u0435\u043c\u043e\u043b\u043e effects.tremolo-bar-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0435\u0444\u0435\u043a\u0442\u0456\u0432 \u0432\u0430\u0436\u0435\u043b\u044f effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=\u041d\u043e\u0442\u0430-\u043f\u0440\u0438\u043c\u0430\u0440\u0430 effects.accentuatednote=\u0410\u043a\u0446\u0435\u043d\u0442\u043e\u0432\u0430\u043d\u0430 \u043d\u043e\u0442\u0430 effects.heavyaccentuatednote=\u0421\u0438\u043b\u044c\u043d\u043e \u0430\u043a\u0446\u0435\u043d\u0442\u043e\u0432\u0430\u043d\u0430 \u043d\u043e\u0442\u0430 effects.harmonic=\u0424\u043b\u0430\u0436\u043e\u043b\u0435\u0442 effects.grace=\u0424\u043e\u0440\u0448\u043b\u0430\u0433 effects.grace-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0444\u043e\u0440\u0448\u043b\u0430\u0433\u0443 effects.grace.before-beat=\u041f\u0435\u0440\u0435\u0434 \u0434\u043e\u043b\u0435\u044e effects.grace.on-beat=\u041d\u0430 \u0434\u043e\u043b\u0456 effects.grace.transition=\u041f\u0435\u0440\u0435\u0445\u0456\u0434 effects.grace.transition-none=\u041d\u0435\u043c\u0430 effects.grace.transition-bend=\u041f\u0456\u0434\u0442\u044f\u0436\u043a\u0430 effects.grace.transition-slide=\u041a\u043e\u0432\u0437\u0430\u043d\u043d\u044f effects.grace.transition-hammer=Hammer effects.trill=\u0422\u0440\u0435\u043b\u044c effects.trill-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0440\u0435\u043b\u0456 effects.tremolo-picking=\u0422\u0440\u0435\u043c\u043e\u043b\u043e effects.tremolo-picking-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0440\u0435\u043c\u043e\u043b\u043e effects.palm-mute=\u041f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u044f \u0434\u043e\u043b\u043e\u043d\u0435\u044e effects.staccato=\u0423\u0440\u0438\u0432\u0447\u0430\u0441\u0442\u043e (\u0421\u0442\u0430\u043a\u0430\u0442\u043e) effects.tapping=\u0422\u0435\u043f\u0456\u043d\u0433 effects.slapping=Slap effects.popping=Pop effects.fade-in=\u041d\u0430\u0440\u043e\u0441\u0442\u0430\u043d\u043d\u044f \u0433\u0443\u0447\u043d\u043e\u0441\u0442\u0456 effects.harmonic-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442\u0456\u0432 effects.harmonic.type-of-harmonic=\u0422\u0438\u043f \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442\u0430 effects.harmonic.natural=\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 effects.harmonic.artificial=\u0428\u0442\u0443\u0447\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 effects.harmonic.artificial.key-offset=\u0417\u043c\u0456\u0449\u0435\u043d\u043d\u044f effects.harmonic.tapped=\u0422\u0435\u043f\u0456\u043d\u0433\u043e\u0432\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 effects.harmonic.tapped.left-hand=\u041b\u0456\u0432\u043e\u0457 \u0440\u0443\u043a\u0438 effects.harmonic.tapped.right-hand=\u041f\u0440\u0430\u0432\u043e\u0457 \u0440\u0443\u043a\u0438 effects.harmonic.pinch=\u041c\u0435\u0434\u0456\u0430\u0442\u043e\u0440\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 effects.harmonic.semi=\u041d\u0430\u043f\u0456\u0432\u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 bend.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0456\u0434\u0442\u044f\u0436\u043a\u0438 bend.bend=Bend bend.bend-release=Bend/Release bend.bend-release-bend=Bend/Release/Bend bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447 transport.start=\u0413\u0440\u0430\u0442\u0438 transport.stop=\u0417\u0443\u043f\u0438\u043d\u0438\u0442\u0438 transport.pause=\u041f\u0430\u0443\u0437\u0430 transport.first=\u041d\u0430 \u043f\u043e\u0447\u0430\u0442\u043e\u043a transport.last=\u0412 \u043a\u0456\u043d\u0435\u0446\u044c transport.previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 transport.next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c transport.mode=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f transport.mode.simple=\u041f\u0440\u043e\u0441\u0442\u0438\u0439 transport.mode.simple.tempo-percent=\u0412\u0456\u0434\u0441\u043e\u0442\u043e\u043a \u0442\u0435\u043c\u043f\u0443 transport.mode.simple.loop=\u0417\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u0438 transport.mode.trainer=\u0422\u0440\u0435\u043d\u0443\u0432\u0430\u043d\u043d\u044f transport.mode.trainer.increment-description=\u0417\u0431\u0456\u043b\u044c\u0448\u0443\u0432\u0430\u0442\u0438 \u043d\u0430 mixer=\u041c\u0456\u043a\u0448\u0435\u0440 mixer.volume=\u041f\u0456\u0434\u0441\u0438\u043b\u0435\u043d\u043d\u044f mixer.track.solo=\u0421\u043e\u043b\u043e mixer.track.mute=\u041c\u043e\u0432\u0447\u0430\u043d\u043d\u044f mixer.channel.volume=\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.balance=\u0411\u0430\u043b\u0430\u043d\u0441 mixer.channel.free=\u0412\u0456\u043b\u044c\u043d\u0438\u0439 mixer.channel.link=\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f repeat.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443 repeat.close=\u0417\u0430\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443 repeat.alternative=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0456 \u043a\u0456\u043d\u0446\u0456\u0432\u043a\u0438 repeat.alternative.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0456 \u043a\u0456\u043d\u0446\u0456\u0432\u043a\u0438 repetitions=\u041f\u043e\u0432\u0442\u043e\u0440\u0438 repeat.number-of-repetitions=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0456\u0432 beat=\u0414\u043e\u043b\u044f beat.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0434\u043e\u043b\u044e note=\u041d\u043e\u0442\u0430 note.semitone-up=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u0432\u0438\u0449\u0435 note.semitone-down=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u043d\u0438\u0436\u0447\u0435 note.shift-up=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u0432\u0438\u0449\u0435 note.sfift-down=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u043d\u0438\u0436\u0447\u0435 note.tiednote=\u0417\u0432'\u044f\u0437\u0430\u0442\u0438 \u043d\u043e\u0442\u0438 note.deadnote=\u0417\u0430\u0433\u043b\u0443\u0448\u0435\u043d\u0430 \u043d\u043e\u0442\u0430 insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0430\u043a\u043e\u0440\u0434 chord.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0430\u043a\u043e\u0440\u0434\u0430 chord=\u0410\u043a\u043e\u0440\u0434 chord.name=\u0406\u043c'\u044f chord.bass=\u0411\u0430\u0441 chord.custom=\u0417\u0430\u0434\u0430\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443 chord.custom.name-empty-error=\u0410\u043a\u043e\u0440\u0434 \u043f\u043e\u0432\u0438\u043d\u0435\u043d \u043c\u0430\u0442\u0438 \u0456\u043c'\u044f. chord.custom.name-exist-error=\u0422\u0430\u043a\u0435 \u0456\u043c'\u044f \u0432\u0436\u0435 \u0456\u0441\u043d\u0443\u0454. chord.settings.tip=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f chord.settings.type=\u0422\u0438\u043f chord.settings.type.most-common=\u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448 \u0432\u0436\u0438\u0432\u0430\u043d\u0456 chord.settings.type.inversions=\u041e\u0431\u0435\u0440\u043d\u0435\u043d\u043d\u044f chord.settings.type.close-voiced=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0456 chord.settings.type.open-voiced=\u0417\u0430\u043a\u0440\u0438\u0442\u0456 chord.settings.open-chords=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0456 \u0430\u043a\u043e\u0440\u0434\u0438 chord.settings.chords-to-display=\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 chord.settings.search-frets=\u0428\u0443\u043a\u0430\u0442\u0438 \u043b\u0430\u0434\u0438 chord.settings.minimum-fret=\u0417 chord.settings.maximum-fret=\u041f\u043e instrument=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 instrument.instrument=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 instrument.percussion-track=\u0414\u043e\u0440\u0456\u0436\u043a\u0430 \u0443\u0434\u0430\u0440\u043d\u0438\u0445 tuning=\u0421\u0442\u0440\u0456\u0439 tuning.strings=\u0421\u0442\u0440\u0443\u043d\u0438 tuning.offset=\u0417\u043c\u0456\u0449\u0435\u043d\u043d\u044f language=\u041c\u043e\u0432\u0430 choose-color=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f settings.config=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 TuxGuitar settings.config.language=\u041c\u043e\u0432\u0430 settings.config.language.choose=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043c\u043e\u0432\u0443 settings.config.styles=\u0421\u0442\u0438\u043b\u0456 settings.config.styles.general=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0441\u0442\u0438\u043b\u0456 settings.config.styles.printer=\u0414\u043b\u044f \u0434\u0440\u0443\u043a\u0443 settings.config.styles.font.default=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c settings.config.styles.font.note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442 settings.config.styles.font.lyric=\u0428\u0440\u0438\u0444\u0442 \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u043f\u0456\u0441\u0435\u043d\u044c settings.config.styles.font.text=\u0428\u0440\u0438\u0444\u0442 \u0442\u0435\u043a\u0441\u0442\u0443 settings.config.styles.font.time-signature=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e\u0437\u043d\u0430\u0447\u043e\u043a \u0447\u0430\u0441\u0443 settings.config.styles.font.printer-default=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0434\u043b\u044f \u0434\u0440\u0443\u043a\u0443 settings.config.styles.font.printer-note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442 \u0434\u043b\u044f \u0434\u0440\u0443\u043a\u0443 settings.config.styles.font.printer-time-signature=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e\u0437\u043d\u0430\u0447\u043e\u043a \u0447\u0430\u0441\u0443 \u0434\u043b\u044f \u0434\u0440\u0443\u043a\u0443 settings.config.styles.color.score-note=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0438 settings.config.styles.color.tab-note=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0438 settings.config.styles.color.play-note=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442\u0438, \u0449\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u0454\u0442\u044c\u0441\u044f settings.config.apply-changes-question=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430\u0440\u0430\u0437? settings.config.sound=\u0417\u0432\u0443\u043a settings.config.main=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 settings.config.main.window-title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432\u0456\u043a\u043d\u0430 settings.config.main.window-title.help=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0456 \u0437\u043c\u0456\u043d\u043d\u0456 \u0431\u0443\u0434\u0443\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0456 \u044f\u043a: settings.config.main.window-title.var.description.appname=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0456\u043c'\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438: TuxGuitar settings.config.main.window-title.var.description.appversion=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0432\u0435\u0440\u0441\u0456\u044e TuxGuitar settings.config.main.window-title.var.description.filename=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0456\u043c'\u044f \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 settings.config.main.window-title.var.description.filepath=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0448\u043b\u044f\u0445 \u0434\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 settings.config.main.window-title.var.description.songname=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0456\u043c'\u044f \u043f\u0456\u0441\u043d\u0456 settings.config.main.window-title.var.description.songauthor=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0456\u0441\u043d\u0456 settings.config.main.window-title.var.description.songalbum=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0430\u043b\u044c\u0431\u043e\u043c, \u0456\u0437 \u044f\u043a\u043e\u0433\u043e \u043f\u0456\u0441\u043d\u044f settings.config.main.window-title.var.description.songartist=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0432\u0438\u043a\u043e\u043d\u0430\u0432\u0446\u044f \u043f\u0456\u0441\u043d\u0456 settings.config.main.options=\u041e\u043f\u0446\u0456\u0457 settings.config.main.splash-enabled=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0443 settings.config.main.table.auto-size.enabled=\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0443 \u0437\u043c\u0456\u043d\u0443 \u0440\u043e\u0437\u043c\u0456\u0440\u0456\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456 settings.config.styles.color.lines=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0443 settings.config.toolbars=\u041f\u0430\u043d\u0435\u043b\u0456 settings.config.toolbars.tip=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u0448\u0456 \u043f\u0430\u043d\u0435\u043b\u0456 settings.config.toolbars.list=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u043f\u0430\u043d\u0435\u043b\u0456 settings.config.toolbars.move-up=\u041f\u0456\u0434\u043d\u044f\u0442\u0438 settings.config.toolbars.move-down=\u041e\u043f\u0443\u0441\u0442\u0438\u0442\u0438 settings.config.skin=\u0416\u0443\u043f\u0430\u043d\u0438 settings.config.skin.choose=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0432\u0430\u0448 \u0436\u0443\u043f\u0430\u043d settings.keybindings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f key-bindings-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f key-bindings-editor-action-select=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0434\u0456\u044e key-bindings-editor-action-column=\u0414\u0456\u0457 key-bindings-editor-shortcut-column=\u041a\u043b\u0430\u0432\u0456\u0448\u0456 key-bindings-editor-push-a-key=\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u043a\u043b\u0430\u0432\u0456\u0448\u0443 key-bindings-editor-save-question=\u0417\u043c\u0456\u043d\u0438 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456, \u0432\u0438\u0439\u0442\u0438 \u043d\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u044e\u0447\u0438? key-bindings-editor-reserved-title=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u043e\u0432\u0430\u043d\u0435 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f key-bindings-editor-reserved-message=\u0412\u0438\u0431\u0430\u0447\u0442\u0435, \u0446\u0435 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u043e\u0432\u0430\u043d\u0435. key-bindings-editor-override=\u0421\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f \u0432\u0436\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f! \u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0439\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438? print.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438 print.dialog=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438 print.service=\u0421\u0435\u0440\u0432\u0456\u0441 print.service.name=\u0406\u043c'\u044f print.service.status=\u0421\u0442\u0430\u0442\u0443\u0441 print.service.type=\u0422\u0438\u043f print.service.info=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f print.range=\u0414\u0456\u0430\u043f\u0430\u0437\u043e\u043d print.range.all-pages=\u0412\u0441\u0435 print.range.pages=\u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0438 print.range.pages-to=\u0414\u043e print.copies=\u041a\u043e\u043f\u0456\u0457 print.copies-number=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043a\u043e\u043f\u0456\u0439 print.print-to-file=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438 \u0443 \u0444\u0430\u0439\u043b print.file-chooser=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 print-header.default-song-name=\u041d\u0435\u043d\u0430\u0437\u0432\u0430\u043d\u0430 print-header.default-song-author=\u041d\u0435\u0432\u0456\u0434\u043e\u043c\u0438\u0439 print.preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 print.preview.page-of= marker=\u041f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 marker.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0443 marker.list=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 marker.first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043f\u0435\u0440\u0448\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 marker.last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043e\u0441\u0442\u0430\u043d\u043d\u044c\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 marker.next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 marker.previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 export.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443 export.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443 scale=\u041b\u0430\u0434 scale.list=\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0430\u0434\u0456\u0432 text.insert=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0435\u043a\u0441\u0442 text.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443 text.text=\u0422\u0435\u043a\u0441\u0442 tools=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 tools.scale=\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0430\u0434\u0456\u0432 tools.browser=\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447 tools.plugins=\u0412\u0442\u0443\u043b\u043a\u0438 tools.shortcuts=\u0421\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f tools.settings=\u041d\u0430\u043b\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f browser.dialog=\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447 browser.menu.file=\u0424\u0430\u0439\u043b browser.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 browser.exit=\u0412\u0438\u0445\u0456\u0434 browser.menu.collection=\u0417\u0431\u0456\u0440\u043a\u0430 browser.menu.go=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 browser.collection.select=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0437\u0431\u0456\u0440\u043a\u0443 browser.collection.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 browser.collection.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 browser.collection.close=\u0417\u0430\u043a\u0440\u0438\u0442\u0438 browser.collection.new=\u041d\u043e\u0432\u0430 browser.go-root=\u0414\u043e\u0434\u043e\u043c\u0443 browser.go-back=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044c browser.refresh=\u041e\u043d\u043e\u0432\u0438\u0442\u0438 browser.factory.fs.name=\u0424\u0430\u0439\u043b\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 browser.collection.fs.name=\u0406\u043c'\u044f browser.collection.fs.path=\u0422\u0435\u043a\u0430 browser.collection.fs.editor-title=\u0417\u0431\u0456\u0440\u043a\u0430 \u0456\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0457 \u0441\u0438\u0441\u0442\u0435\u043c\u0438 browser.collection.fs.editor-tip=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0442\u0435\u043a\u0443 \u0432\u0430\u0448\u043e\u0457 \u0437\u0431\u0456\u0440\u043a\u0438 browser.collection.fs.invalid-path=\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443 \u0442\u0435\u043a\u0443 midi.port=MIDI \u043f\u043e\u0440\u0442 midi.sequencer=MIDI \u0441\u0435\u043a\u0432\u0435\u043d\u0441\u0435\u0440 plugin.unknown-value=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 plugin.column.name=\u0406\u043c'\u044f \u0432\u0442\u0443\u043b\u043a\u0430 plugin.column.enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u0438\u0439 ######################### ### Tool Bar Items ### ######################### file.items=\u0424\u0430\u0439\u043b\u043e\u0432\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 edit.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f property.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0432\u043b\u0430\u0441\u043d\u043e\u0441\u0442\u0456 track.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043e\u043a duration.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u0442\u0456 beat.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043d\u043e\u0442 composition.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0456\u0457 repeat.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0443 transport.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447\u0430 marker.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043e\u043a insert.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 layout.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0440\u043e\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f view.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 effect.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0435\u0444\u0435\u043a\u0442\u0456\u0432 dynamic.items=\u0414\u0438\u043d\u0430\u043c\u0456\u0447\u043d\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 ######################### ###Key Binding Actions### ######################### action.file.new=\u041d\u043e\u0432\u0438\u0439 \u0444\u0430\u0439\u043b action.file.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043b action.file.open-url=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 URL action.file.save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 action.file.save-as=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u044f\u043a action.file.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438 action.file.print-preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 action.file.exit=\u0412\u0438\u0439\u0442\u0438 \u0456\u0437 TuxGuitar action.edit.undo=\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 action.edit.redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0438 action.composition.change-time-signature=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 \u0447\u0430\u0441\u0443 action.composition.change-tempo=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0435\u043c\u043f action.composition.change-info=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u043f\u0456\u0441\u043d\u044e action.composition.change-clef=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u043a\u043b\u044e\u0447 action.composition.change-key-signature=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0443 \u043a\u043b\u044e\u0447\u0430 action.composition.change-triplet-feel=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0440\u0456\u043e\u043b\u0456 action.view.layout-set-page=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u044f\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 action.view.layout-set-linear=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043b\u0456\u043d\u0456\u0439\u043d\u043e action.view.layout-set-multitrack=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u0431\u0430\u0433\u0430\u0442\u043e \u0434\u043e\u0440\u0456\u0436\u043e\u043a action.view.layout-set-score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443 action.view.layout-set-tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443 action.view.layout-set-compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e action.view.layout-set-chord-diagram-enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0434\u0456\u0430\u0433\u0440\u0430\u043c\u0438 \u0430\u043a\u043e\u0440\u0434\u0456\u0432 action.view.layout-set-chord-name-enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0456\u043c\u0435\u043d\u0430 \u0430\u043a\u043e\u0440\u0434\u0456\u0432 action.view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0433\u0440\u0438\u0444 action.view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443 action.view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044e action.view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0456\u043a\u0448\u0435\u0440 action.view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u043e\u0433\u0440\u0430\u0432\u0430\u0447 action.track.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443 action.track.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443 action.track.clone=\u0414\u0443\u0431\u043b\u044e\u0432\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443 action.track.go-first=\u041f\u0435\u0440\u0448\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430 action.track.go-last=\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430 action.track.go-next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430 action.track.go-previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430 action.track.lyrics=\u0422\u0435\u043a\u0441\u0442 \u043f\u0456\u0441\u043d\u0456 action.track.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u0440\u0456\u0436\u043a\u0438 action.track.move-down=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u0433\u043e\u0440\u0443 action.track.move-up=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u043d\u0438\u0437 action.measure.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 action.measure.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u043a\u0442 action.measure.copy=\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 action.measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u043a\u0442 action.measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0442\u0430\u043a\u0442 action.measure.go-first=\u041f\u0435\u0440\u0448\u0438\u0439 \u0442\u0430\u043a\u0442 action.measure.go-last=\u041e\u0441\u0442\u0430\u043d\u043d\u0456\u0439 \u0442\u0430\u043a\u0442 action.measure.go-next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0442\u0430\u043a\u0442 action.measure.go-previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0442\u0430\u043a\u0442 action.note.general.clean-beat=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0434\u043e\u043b\u044e action.note.general.decrement-semitone=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u0432\u0438\u0449\u0435 action.note.general.increment-semitone=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u043d\u0438\u0436\u0447\u0435 action.note.general.shift-down=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u0432\u0438\u0449\u0435 action.note.general.shift-up=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u043d\u0438\u0436\u0447\u0435 action.note.general.tied=\u0417\u0432'\u044f\u0437\u0430\u043d\u0456/\u041d\u0435\u0437\u0432'\u044f\u0437\u0430\u043d\u0456 \u043d\u043e\u0442\u0438 action.note.duration.set-whole=\u0426\u0456\u043b\u0430 action.note.duration.set-half=\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430 action.note.duration.set-quarter=\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0430 action.note.duration.set-eighth=\u0412\u043e\u0441\u044c\u043c\u0430 action.note.duration.set-sixteenth=\u0428\u0456\u0441\u0442\u043d\u0430\u0434\u0446\u044f\u0442\u0430 action.note.duration.set-thirty-second=\u0422\u0440\u0438\u0434\u0446\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0430 action.note.duration.set-sixty-fourth=\u0428\u0456\u0441\u0442\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430 action.note.duration.change-dotted=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u0440\u0430\u043f\u043a\u0443 action.note.duration.change-double-dotted=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0434\u0432\u0456\u0439\u043d\u0443 \u043a\u0440\u0430\u043f\u043a\u0443 action.note.duration.change-division-type=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0440\u0438\u043f\u043b\u0435\u0442 action.note.duration.decrement-duration=\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0442\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c action.note.duration.increment-duration=\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0442\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c action.note.effect.change-vibrato=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0456\u0431\u0440\u0430\u0442\u043e action.note.effect.change-bend=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u0434\u0456\u0442\u044f\u0436\u043a\u0443 action.note.effect.change-slide=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u043e\u0432\u0437\u0430\u043d\u043d\u044f action.note.effect.change-hammer=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 hammer-on/pull-off action.note.effect.change-accentuated=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0430\u043a\u0446\u0435\u043d\u0442 action.note.effect.change-dead=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043d\u0443 \u043d\u043e\u0442\u0443 action.note.effect.change-fade-in=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 fade in action.note.effect.change-ghost=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u0440\u0438\u043c\u0430\u0440\u0443 action.note.effect.change-grace=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0444\u043e\u0440\u0448\u043b\u0430\u0433 action.note.effect.change-harmonic=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442 action.note.effect.change-heavy-accentuated=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0438\u043b\u044c\u043d\u0438\u0439 \u0430\u043a\u0446\u0435\u043d\u0442 action.note.effect.change-palm-mute=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u044f \u0434\u043e\u043b\u043e\u043d\u0435\u044e action.note.effect.change-popping=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 popping action.note.effect.change-slapping=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 slapping action.note.effect.change-staccato=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0443\u0440\u0438\u0432\u0447\u0430\u0441\u0442\u0456\u0441\u0442\u044c action.note.effect.change-tapping=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0435\u043f\u043f\u0456\u043d\u0433 action.note.effect.change-tremolo-bar=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0430\u0436\u0456\u043b\u044c \u0442\u0440\u0435\u043c\u043e\u043b\u043e action.note.effect.change-tremolo-picking=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0440\u0435\u043c\u043e\u043b\u043e action.note.effect.change-trill=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0422\u0440\u0435\u043b\u044c action.insert.open-repeat=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443 action.insert.close-repeat=\u0417\u0430\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443 action.insert.repeat-alternative=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430 \u043a\u0456\u043d\u0446\u0456\u0432\u043a\u0430 action.insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0430\u043a\u043e\u0440\u0434 action.insert.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0435\u043a\u0441\u0442 action.marker.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0443 action.marker.go-next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0430 action.marker.go-previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0430 action.transport.play=\u0413\u0440\u0430\u0442\u0438 \u043f\u0456\u0441\u043d\u044e action.transport.stop=\u0417\u0443\u043f\u0438\u043d\u0438\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f action.transport.mode=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447\u0430 action.transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c action.tools.browser=\u041f\u0435\u0440\u0433\u043b\u044f\u0434\u0430\u0447 action.settings.configure=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f action.help.doc=\u0414\u043e\u043f\u043e\u043c\u043e\u0433 tuxguitar-src-1.2/TuxGuitar/share/lang/messages_vi.properties0000644000175000017500000006716611273045225024146 0ustar julianjulianok=Ok cancel=Th\u00F4i yes=C\u00F3 no=Kh\u00F4ng add=Th\u00EAm edit=S\u1EEDa remove=Xo\u00E1 save=L\u01B0u exit=Tho\u00E1t close=\u0110\u00F3ng choose=Ch\u1ECDn color=M\u00E0u s\u1EAFc title=Ti\u00EAu \u0111\u1EC1 go=Chuy\u1EC3n \u0111\u1EBFn warning=C\u1EA3nh b\u00E1o error=L\u1ED7i plugins=Tr\u00ECnh b\u1ED5 sung options=Tu\u1EF3 ch\u1ECDn defaults=M\u1EB7c \u0111\u1ECBnh clean=D\u1ECDn rename=\u0110\u1ED5i t\u00EAn fret=Ph\u00EDm \u0111\u00E0n position=V\u1ECB tr\u00ED name=T\u00EAn author=T\u00E1c gi\u1EA3 version=Phi\u00EAn b\u1EA3n description=M\u00F4 t\u1EA3 info=Th\u00F4ng tin configure=C\u1EA5u h\u00ECnh tuxguitar.title=Tux-Guitar file=T\u1EADp tin file.new=M\u1EDBi file.open=M\u1EDF file.save=L\u01B0u file.save-as=L\u01B0u d\u1EA1ng file.save-changes-question=C\u00F3 nhi\u1EC1u thay \u0111\u1ED5i ch\u01B0a l\u01B0u, b\u1EA1n c\u00F3 mu\u1ED1n tho\u00E1t m\u00E0 kh\u00F4ng l\u01B0u ch\u00FAng l\u1EA1i kh\u00F4ng? file.exit=Tho\u00E1t file.export=Xu\u1EA5t file.export-midi=Xu\u1EA5t MIDI file.export-pdf=Xu\u1EA5t PDF file.print=In file.print-preview=Xem th\u1EED file.import=Nh\u1EADp file.import-midi=Nh\u1EADp Midi file.export-ascii=Xu\u1EA5t ASCII file.history=\u0110\u00E3 l\u00E0m file.open-url=M\u1EDF URL file.open.error=Kh\u00F4ng m\u1EDF \u0111\u01B0\u1EE3c: {0} file.save.error=Kh\u00F4ng l\u01B0u \u0111\u01B0\u1EE3c: {0} file.import.error=Kh\u00F4ng nh\u1EADp \u0111\u01B0\u1EE3c: {0} file.export.error=Kh\u00F4ng xu\u1EA5t \u0111\u01B0\u1EE3c: {0} file.overwrite-question=T\u1EADp tin n\u00E0y c\u00F3 r\u1ED3i, B\u1EA1n c\u00F3 mu\u1ED1n ghi \u0111\u00E8 l\u00EAn n\u00F3 kh\u00F4ng?? edit.menu=S\u1EEDa edit.undo=Hu\u1EF7 b\u01B0\u1EDBc edit.redo=L\u00E0m l\u1EA1i edit.copy=Ch\u00E9p edit.from=T\u1EEB edit.to=\u0110\u1EBFn edit.all-tracks=M\u1ECDi d\u1EA3i edit.paste=D\u00E1n edit.paste.replace-mode=D\u00E1n v\u00E0o \u00F4 nh\u1ECBp hi\u1EC7n t\u1EA1i edit.paste.insert-mode=D\u00E1n v\u00E0o \u00F4 nh\u1ECBp m\u1EDBi edit.delete=Xo\u00E1 edit.cut=C\u1EAFt edit.mouse-mode-selection=Ch\u1EBF \u0111\u1ED9 ch\u1ECDn edit.mouse-mode-edition=Ch\u1EBF \u0111\u1ED9 so\u1EA1n th\u1EA3o edit.not-natural-key=Ch\u1EBF \u0111\u1ED9 th\u0103ng/gi\u00E1ng view=Xem view.layout=B\u1ED1 tr\u00ED view.layout.page=B\u1ED1 tr\u00ED trang view.layout.linear=B\u1ED1 tr\u00ED cu\u1ED9n ngang view.layout.compact=Thu g\u1ECDn view.layout.multitrack=Nhi\u1EC1u d\u1EA3i view.layout.chord-style=Ki\u1EC3u h\u1EE3p \u00E2m view.layout.chord-name=T\u00EAn h\u1EE3p \u00E2m view.layout.chord-diagram=S\u01A1 \u0111\u1ED3 h\u1EE3p \u00E2m view.layout.score-enabled=Hi\u1EC7n n\u1ED1t nh\u1EA1c view.layout.tablature-enabled=Hi\u1EC7n tab view.show-mixer=Hi\u1EC7n b\u1ED9 tr\u1ED9n \u00E2m view.show-fretboard=Hi\u1EC7n c\u1EA7n \u0111\u00E0n view.show-piano=Hi\u1EC7n piano view.show-matrix=Hi\u1EC7n ma tr\u1EADn view.show-transport=Hi\u1EC7n b\u1ED9 ph\u00E1t fretboard.right-mode=Tay ph\u1EA3i fretboard.left-mode=Tay tr\u00E1i fretboard.background-color=M\u00E0u n\u1EC1n fretboard.display-note-text=Hi\u1EC7n t\u00EAn n\u1ED1t fretboard.display-scale-text=Hi\u1EC7n t\u00EAn n\u1ED1t tr\u00EAn \u00E2m giai fretboard.font=Ph\u00F4ng ch\u1EEF fretboard.fretpoint-color=M\u00E0u ph\u00EDm \u0111\u00E0n fretboard.note-color=M\u00E0u n\u1ED1t fretboard.scale-note-color=M\u00E0u n\u1ED1t thu\u1ED9c \u00E2m giai fretboard.settings=Thi\u1EBFt l\u1EADp c\u1EA7n \u0111\u00E0n fretboard.string-color=M\u00E0u d\u00E2y fretboard.settings.options=Tu\u1EF3 ch\u1ECDn piano.editor=Ch\u1EC9nh s\u1EEDa piano piano.natural-key-color=Natural Key Color piano.not-natural-key-color=Unnatural Key Color piano.note-color=M\u00E0u n\u1ED1t piano.scale-note-color=M\u00E0u n\u1ED1t thu\u1ED9c \u00E2m giai piano.settings=Thi\u1EBFt l\u1EADp cho piano matrix.editor=Ch\u1EC9nh s\u1EEDa ma tr\u1EADn matrix.grids=S\u1ED1 \u00F4 \u0111\u1ECBnh v\u1ECB matrix.border-color=M\u00E0u vi\u1EC1n matrix.font=Ph\u00F4ng ch\u1EEF matrix.foreground-color=M\u00E0u tr\u01B0\u1EDBc matrix.line-color-1=M\u00E0u h\u00E0ng l\u1EBB matrix.line-color-2=M\u00E0u h\u00E0ng ch\u1EB5n matrix.line-color-over=M\u00E0u h\u00E0ng d\u01B0\u1EDBi chu\u1ED9t matrix.note-color=M\u00E0u n\u1ED1t matrix.play-note-color=M\u00E0u n\u1ED1t \u0111ang ph\u00E1t matrix.position-color=Position Color matrix.settings=Thi\u1EBFt l\u1EADp ma tr\u1EADn composition=S\u00E1ng t\u00E1c composition.timesignature=S\u1ED1 nh\u1ECBp composition.timesignature.Numerator=Ch\u1EC9 s\u1ED1 tr\u00EAn composition.timesignature.denominator=Ch\u1EC9 s\u1ED1 d\u01B0\u1EDBi composition.timesignature.to-the-end=\u0110\u1EBFn h\u1EBFt composition.tempo=Nh\u1ECBp \u0111\u1ED9 composition.tempo-percent=Ph\u1EA7n tr\u0103m composition.tempo.invalid=Nh\u1ECBp \u0111\u1ED9 kh\u00F4ng h\u1EE3p l\u1EC7 composition.tempo.start-to-end=D\u00F9ng nh\u1ECBp \u0111\u1ED9 n\u00E0y \u0111\u1EBFn h\u1EBFt composition.tempo.position-to-end=D\u00F9ng nh\u1ECBp \u0111\u1ED9 n\u00E0y t\u1EDBi h\u1EBFt composition.tempo.position-to-next=D\u00F9ng nh\u1ECBp \u0111\u1ED9 n\u00E0y \u0111\u1EBFn \u0111\u00E1nh d\u1EA5u nh\u1ECBp \u0111\u1ED9 k\u1EBF ti\u1EBFp composition.properties=Thu\u1ED9c t\u00EDnh composition.name=T\u00EAn composition.artist=Ngh\u1EC7 s\u0129 composition.album=\u0110\u0129a composition.author=T\u00E1c gi\u1EA3 composition.tripletfeel=Nh\u1ECBp li\u00EAn ba composition.clef=Kho\u00E1 composition.clef.treble=\u00C2m b\u1ED5ng composition.clef.bass=Bass composition.clef.tenor=Tenor composition.clef.alto=Alto composition.clef.to-the-end=D\u00F9ng kho\u00E1 n\u00E0y t\u1EDBi h\u1EBFt composition.keysignature=K\u00FD hi\u1EC7u kho\u00E1 composition.keysignature.natural=T\u1EF1 nhi\u00EAn composition.keysignature.sharp-1=1 d\u1EA5u th\u0103ng composition.keysignature.sharp-2=2 d\u1EA5u th\u0103ng composition.keysignature.sharp-3=3 d\u1EA5u th\u0103ng composition.keysignature.sharp-4=4 d\u1EA5u th\u0103ng composition.keysignature.sharp-5=5 d\u1EA5u th\u0103ng composition.keysignature.sharp-6=6 d\u1EA5u th\u0103ng composition.keysignature.sharp-7=7 d\u1EA5u th\u0103ng composition.keysignature.flat-1=1 d\u1EA5u gi\u00E1ng composition.keysignature.flat-2=2 d\u1EA5u gi\u00E1ng composition.keysignature.flat-3=3 d\u1EA5u gi\u00E1ng composition.keysignature.flat-4=4 d\u1EA5u gi\u00E1ng composition.keysignature.flat-5=5 d\u1EA5u gi\u00E1ng composition.keysignature.flat-6=6 d\u1EA5u gi\u00E1ng composition.keysignature.flat-7=7 d\u1EA5u gi\u00E1ng composition.keysignature.to-the-end=D\u00F9ng k\u00FD hi\u1EC7u kho\u00E1 n\u00E0y t\u1EDBi h\u1EBFt composition.tripletfeel=Nh\u1ECBp li\u00EAn ba composition.tripletfeel.none=Kh\u00F4ng c\u00F3 composition.tripletfeel.eighth=Li\u00EAn ba \u0111\u01A1n composition.tripletfeel.sixteenth=Li\u00EAn ba k\u00E9p composition.tripletfeel.to-the-end=D\u00F9ng ki\u1EC3u nh\u1ECBp n\u00E0y t\u1EDBi h\u1EBFt help=Tr\u1EE3 gi\u00FAp help.help=Tr\u1EE3 gi\u00FAp help.doc=T\u00E0i li\u1EC7u help.about=Gi\u1EDBi thi\u1EC7u help.about.license=Gi\u1EA5y ph\u00E9p help.about.authors=T\u00E1c gi\u1EA3 help.about.description=M\u00F4 t\u1EA3 track=D\u1EA3i track.number=S\u1ED1 track.name=T\u00EAn track.color=M\u00E0u s\u1EAFc track.first=D\u1EA3i \u0111\u1EA7u track.last=D\u1EA3i cu\u1ED1i track.previous=D\u1EA3i tr\u01B0\u1EDBc track.next=D\u1EA3i k\u1EBF track.add=Th\u00EAm d\u1EA3i track.remove=Xo\u00E1 d\u1EA3i track.clone=Nh\u00E2n \u0111\u00F4i d\u1EA3i track.move-up=\u0110\u01B0a l\u00EAn track.move-down=\u0110\u01B0a xu\u1ED1ng track.instrument=Nh\u1EA1c c\u1EE5 track.properties=Thu\u1ED9c t\u00EDnh track.properties.general=Chung track.name.default-percussion-name=B\u1ED9 g\u00F5 track.lyrics=L\u1EDDi lyric.editor=So\u1EA1n l\u1EDDi measure=\u00D4 nh\u1ECBp measure.first=\u00D4 nh\u1ECBp \u0111\u1EA7u ti\u00EAn measure.last=\u00D4 nh\u1ECBp cu\u1ED1i c\u00F9ng measure.previous=\u00D4 nh\u1ECBp tr\u01B0\u1EDBc measure.next=\u00D4 nh\u1ECBp k\u1EBF measure.add=Th\u00EAm \u00F4 nh\u1ECBp measure.add-before-current-position=Th\u00EAm \u00F4 nh\u1ECBp v\u00E0o tr\u01B0\u1EDBc v\u1ECB tr\u00ED hi\u1EC7n t\u1EA1i measure.add-after-current-position=Th\u00EAm \u00F4 nh\u1ECBp v\u00E0o sau v\u1ECB tr\u00ED hi\u1EC7n t\u1EA1i measure.add-at-end=Th\u00EAm \u00F4 nh\u1ECBp v\u00E0o cu\u1ED1i measure.remove=B\u1ECF \u00F4 nh\u1ECBp measure.copy=Ch\u00E9p \u00F4 nh\u1ECBp measure.paste=D\u00E1n \u00F4 nh\u1ECBp measure.clean=Xo\u00E1 \u00F4 nh\u1ECBp duration=Tr\u01B0\u1EDDng \u0111\u1ED9 duration.whole=N\u1ED1t tr\u00F2n duration.half=N\u1ED1t tr\u1EAFng duration.quarter=N\u1ED1t \u0111en duration.eighth=M\u00F3c \u0111\u01A1n duration.sixteenth=M\u00F3c k\u00E9p duration.thirtysecond=M\u00F3c ba duration.sixtyfourth=M\u00F3c b\u1ED1n duration.dotted=Ch\u1EA5m duration.doubledotted=Hai ch\u1EA5m duration.division-type=Ch\u00F9m ba dynamic=C\u01B0\u1EDDng \u0111\u1ED9 dynamic.piano-pianissimo=C\u1EF1c nh\u1EB9 (ppp) dynamic.pianissimo=R\u1EA5t nh\u1EB9 (pp) dynamic.piano=Nh\u1EB9 (p) dynamic.mezzo-piano=Nh\u1EB9 v\u1EEBa (mp) dynamic.mezzo-forte=M\u1EA1nh v\u1EEBa (mf) dynamic.forte=M\u1EA1nh (f) dynamic.fortissimo=R\u1EA5t m\u1EA1nh (ff) dynamic.forte-fortissimo=C\u1EF1c m\u1EA1nh (fff) effects=Hi\u1EC7u \u1EE9ng effects.vibrato=Rung d\u00E2y effects.bend=Nh\u00EDu d\u00E2y effects.deadnote=N\u1ED1t c\u00E2m effects.slide=L\u01B0\u1EDBt effects.hammer=G\u00F5/nh\u1EA5c ng\u00F3n effects.tremolo-bar=D\u00F9ng c\u1EA7n nh\u00FAn effects.tremolo-bar-editor=C\u00E1ch d\u00F9ng c\u1EA7n nh\u00FAn effects.tremolo-bar.dip=Xu\u1ED1ng-L\u00EAn effects.tremolo-bar.dive=Ch\u1EC9 xu\u1ED1ng effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=L\u00EAn-Xu\u1ED1ng effects.tremolo-bar.return=Return effects.ghostnote=N\u1ED1t \u0111\u00E1nh nh\u1EB9 effects.accentuatednote=N\u1ED1t \u0111\u00E1nh r\u00F5 effects.heavyaccentuatednote=N\u1ED1t \u0111\u00E1nh r\u1EA5t r\u00F5 effects.harmonic=\u00C2m b\u1ED3i effects.grace=N\u1ED1t chuy\u1EC3n effects.grace-editor=So\u1EA1n n\u1ED1t chuy\u1EC3n effects.grace.before-beat=Before beat effects.grace.on-beat=On beat effects.grace.transition=Chuy\u1EC3n tay effects.grace.transition-none=Kh\u00F4ng effects.grace.transition-bend=Nh\u00EDu d\u00E2y effects.grace.transition-slide=L\u01B0\u1EDBt d\u00E2y effects.grace.transition-hammer=G\u00F5 effects.trill=L\u00E1y r\u1EC1n effects.trill-editor=So\u1EA1n l\u00E1y r\u1EC1n effects.tremolo-picking=V\u00EA 1 n\u1ED1t effects.tremolo-picking-editor=C\u00E1ch v\u00EA 1 n\u1ED1t effects.palm-mute=Ch\u1EB7t tay effects.staccato=N\u1ED1t ng\u1EAFt \u00E2m effects.tapping=Ch\u1EA5m ng\u00F3n effects.slapping=V\u1ED7 d\u00E2y effects.popping=M\u00F3c d\u00E2y effects.fade-in=To d\u1EA7n effects.harmonic-editor=S\u1EEDa \u00E2m b\u1ED3i effects.harmonic.type-of-harmonic=Ki\u1EC3u \u00E2m b\u1ED3i effects.harmonic.natural=\u00C2m b\u1ED3i t\u1EF1 nhi\u00EAn effects.harmonic.artificial=\u00C2m b\u1ED3i nh\u00E2n t\u1EA1o effects.harmonic.artificial.key-offset=Key Offset effects.harmonic.tapped=\u00C2m b\u1ED3i do ch\u1EA5m ng\u00F3n effects.harmonic.tapped.left-hand=Tay tr\u00E1i effects.harmonic.tapped.right-hand=Tay ph\u1EA3i effects.harmonic.pinch=Pinch Harmonic effects.harmonic.semi=\u00C2m b\u1ED3i n\u1EEDa bend.editor=S\u1EEDa nh\u00EDu d\u00E2y bend.bend=Nh\u00EDu d\u00E2y bend.bend-release=Nh\u00EDu/Nh\u1EA3 bend.bend-release-bend=Nh\u00EDu/Nh\u1EA3/Nh\u00EDu bend.prebend=Nh\u00EDu tr\u01B0\u1EDBc bend.prebend-release=Nh\u00EDu tr\u01B0\u1EDBc/nh\u1EA3 transport=B\u1ED9 ph\u00E1t transport.start=B\u1EAFt \u0111\u1EA7u transport.stop=D\u1EEBng transport.pause=T\u1EA1m d\u1EEBng transport.first=\u0110\u1EA7u transport.last=Cu\u1ED1i transport.previous=Tr\u01B0\u1EDBc transport.next=K\u1EBF transport.metronome=D\u1EADm nh\u1ECBp transport.mode=Ch\u1EBF \u0111\u1ED9 ph\u00E1t transport.mode.simple=Ch\u1EBF \u0111\u1ED9 \u0111\u01A1n gi\u1EA3n transport.mode.simple.tempo-percent=Ph\u1EA7n tr\u0103m nh\u1ECBp \u0111\u1ED9 transport.mode.simple.loop=Ph\u00E1t l\u1EB7p l\u1EA1i transport.mode.trainer=T\u1EADp theo transport.mode.trainer.increment-description=T\u0103ng l\u00EAn mixer=B\u1ED9 tr\u1ED9n \u00E2m mixer.volume=Khu\u1EBFch \u0111\u1EA1i mixer.track.solo=\u0110\u1ED9c t\u1EA5u mixer.track.mute=C\u00E2m mixer.channel.volume=\u00C2m l\u01B0\u1EE3ng mixer.channel.channel=K\u00EAnh mixer.channel.effect-channel=Hi\u1EC7u\u1EE8ng mixer.channel.balance=C\u00E2n b\u1EB1ng mixer.channel.free=Free mixer.channel.link=Li\u00EAn k\u1EBFt repeat.open=M\u1EDF d\u1EA5u l\u1EB7p repeat.close=\u0110\u00F3ng d\u1EA5u l\u1EB7p repeat.alternative=L\u1EB7p kh\u00E1c \u0111i repeat.alternative.editor=S\u1EEDa d\u1EA5u l\u1EB7p kh\u00E1c repetitions=Kho\u00E1 l\u1EB7p repeat.number-of-repetitions=S\u1ED1 l\u1EA7n l\u1EB7p beat=Ph\u00E1ch beat.clean=Xo\u00E1 nh\u1ECBp note=N\u1ED1t note.semitone-up=L\u00EAn n\u1EEDa cung note.semitone-down=Xu\u1ED1ng n\u1EEDa cung note.shift-up=D\u1ECBch l\u00EAn note.shift-down=D\u1ECBch xu\u1ED1ng note.tiednote=N\u1ED1t luy\u1EBFn note.deadnote=N\u1ED1t c\u00E2m insert.chord=Ch\u00E8n h\u1EE3p \u00E2m chord.editor=So\u1EA1n h\u1EE3p \u00E2m chord=H\u1EE3p \u00E2m chord.name=T\u00EAn chord.bass=Bass chord.custom=H\u1EE3p \u00E2m t\u1EF1 \u0111\u1EB7t chord.custom.name-empty-error=Kh\u00F4ng \u0111\u01B0\u1EE3c \u0111\u1EC3 tr\u1ED1ng t\u00EAn h\u1EE3p \u00E2m. chord.custom.name-exist-error=T\u00EAn n\u00E0y \u0111\u00E3 \u0111\u01B0\u1EE3c d\u00F9ng r\u1ED3i. chord.settings.tip=Thi\u1EBFt l\u1EADp t\u1EF1 ch\u1ECDn chord.settings.type=Ki\u1EC3u chord.settings.type.most-common=Chung nh\u1EA5t chord.settings.type.inversions=Inversions chord.settings.type.close-voiced=H\u1EE3p \u00E2m c\u00F3 3 n\u1ED1t c\u00F9ng tr\u00EAn 1 b\u00E1t \u0111\u1ED9 chord.settings.type.open-voiced=Open Voiced chord.settings.open-chords=Open Chords chord.settings.chords-to-display=H\u1EE3p \u00E2m s\u1EBD \u0111\u01B0\u1EE3c bi\u1EC3u di\u1EC5n chord.settings.search-frets=Search Frets chord.settings.minimum-fret=Nh\u1ECF nh\u1EA5t chord.settings.maximum-fret=L\u1EDBn nh\u1EA5t instrument=Nh\u1EA1c c\u1EE5 instrument.instrument=Nh\u1EA1c c\u1EE5 instrument.percussion-track=D\u1EA3i cho b\u1ED9 g\u00F5 tuning=L\u00EAn d\u00E2y tuning.strings=D\u00E2y tuning.offset=Offset language=Ng\u00F4n ng\u1EEF choose-color=Ch\u1ECDn m\u00E0u settings=Thi\u1EBFt l\u1EADp settings.config=C\u1EA5u h\u00ECnh TuxGuitar settings.config.language=Ng\u00F4n ng\u1EEF settings.config.language.choose=Ch\u1ECDn ng\u00F4n ng\u1EEF settings.config.styles=Ki\u1EC3u d\u00E1ng settings.config.styles.general=Ki\u1EC3u d\u00E1ng chung settings.config.styles.printer=Ki\u1EC3u d\u00E1ng in ra settings.config.styles.font.default=Ph\u00F4ng m\u1EB7c \u0111\u1ECBnh settings.config.styles.font.note=Ph\u00F4ng n\u1ED1t nh\u1EA1c settings.config.styles.font.lyric=Ph\u00F4ng cho ph\u1EA7n l\u1EDDi settings.config.styles.font.text=Ph\u00F4ng v\u0103n b\u1EA3n settings.config.styles.font.time-signature=Ph\u00F4ng cho s\u1ED1 nh\u1ECBp settings.config.styles.font.printer-default=Ph\u00F4ng m\u1EB7c \u0111\u1ECBnh d\u00F9ng \u0111\u1EC3 in settings.config.styles.font.printer-note=Ph\u00F4ng d\u00F9ng \u0111\u1EC3 in n\u1ED1t settings.config.styles.font.printer-time-signature=Ph\u00F4ng d\u00F9ng \u0111\u1EC3 in s\u1ED1 nh\u1ECBp settings.config.styles.color.score-note=M\u00E0u n\u1ED1t tr\u00EAn b\u1EA3n nh\u1EA1c settings.config.styles.color.tab-note=M\u00E0u n\u1ED1t tr\u00EAn Tab settings.config.styles.color.play-note=M\u00E0u n\u1ED1t \u0111ang ph\u00E1t settings.config.apply-changes-question=B\u1EA1n c\u00F3 d\u00F9ng c\u00E1c thay \u0111\u1ED5i lu\u00F4n kh\u00F4ng? settings.config.sound=\u00C2m thanh settings.config.main=Chung settings.config.main.window-title=Ti\u00EAu \u0111\u1EC1 c\u1EEDa s\u1ED5 settings.config.main.window-title.help=C\u00E1c bi\u1EBFn sau t\u01B0\u01A1ng \u0111\u01B0\u01A1ng v\u1EDBi n\u1ED9i dung hi\u1EC3n th\u1ECB tr\u00EAn thanh ti\u00EAu \u0111\u1EC1: settings.config.main.window-title.var.description.appname=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00EAn \u1EE9ng d\u1EE5ng: TuxGuitar settings.config.main.window-title.var.description.appversion=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi phi\u00EAn b\u1EA3n TuxGuitar settings.config.main.window-title.var.description.filename=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00EAn t\u1EADp tin \u0111ang m\u1EDF settings.config.main.window-title.var.description.filepath=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi \u0111\u01B0\u1EDDng d\u1EABn c\u1EE7a t\u1EADp tin \u0111ang m\u1EDF settings.config.main.window-title.var.description.songname=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00EAn b\u00E0i h\u00E1t settings.config.main.window-title.var.description.songauthor=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00E1c gi\u1EA3 b\u00E0i h\u00E1t settings.config.main.window-title.var.description.songalbum=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi \u0111\u0129a nh\u1EA1c c\u00F3 b\u00E0i h\u00E1t settings.config.main.window-title.var.description.songartist=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi ngh\u1EC7 s\u0129 tr\u00ECnh b\u00E0y b\u00E0i h\u00E1t settings.config.main.options=Tu\u1EF3 ch\u1ECDn settings.config.main.splash-enabled=Hi\u1EC3n th\u1ECB m\u00E0n h\u00ECnh ch\u00E0o khi kh\u1EDFi \u0111\u1ED9ng settings.config.main.table.auto-size.enabled=Cho ph\u00E9p t\u1EF1 \u0111\u1ED9ng \u0111\u1ECBnh l\u1EA1i k\u00EDch c\u1EE1 b\u1EA3ng settings.config.styles.color.lines=M\u00E0u c\u00E1c \u0111\u01B0\u1EDDng k\u1EBB ngang settings.config.toolbars=C\u00E1c thanh c\u00F4ng c\u1EE5 settings.config.toolbars.tip=\u0110\u1EB7t thanh c\u00F4ng c\u1EE5 settings.config.toolbars.list=C\u00E1c thanh c\u00F4ng c\u1EE5 c\u00F3 s\u1EB5n settings.config.toolbars.move-up=\u0110\u01B0a l\u00EAn settings.config.toolbars.move-down=\u0110\u01B0a xu\u1ED1ng settings.config.skin=Giao di\u1EC7n settings.config.skin.choose=Ch\u1ECDn s\u1EAFc th\u00E1i giao di\u1EC7n settings.keybindings=C\u1EA5u h\u00ECnh ph\u00EDm t\u1EAFt key-bindings-editor=So\u1EA1n ph\u00EDm t\u1EAFt key-bindings-editor-action-select=Ch\u1ECDn h\u00E0nh \u0111\u1ED9ng key-bindings-editor-action-column=H\u00E0nh \u0111\u1ED9ng key-bindings-editor-shortcut-column=Ph\u00EDm t\u1EAFt key-bindings-editor-push-a-key=Nh\u1EA5n m\u1ED9t ph\u00EDm key-bindings-editor-save-question=C\u00F3 nhi\u1EC1u thay \u0111\u1ED5i ch\u01B0a l\u01B0u, b\u1EA1n c\u00F3 mu\u1ED1n tho\u00E1t m\u00E0 kh\u00F4ng l\u01B0u ch\u00FAng l\u1EA1i kh\u00F4ng? key-bindings-editor-reserved-title=C\u00E1c ph\u00EDm t\u1EAFt d\u00E0nh ri\u00EAng key-bindings-editor-reserved-message=Xin l\u1ED7i, ph\u00EDm t\u1EAFt n\u00E0y kh\u00F4ng d\u00F9ng \u0111\u01B0\u1EE3c key-bindings-editor-override=\u0110\u00E3 g\u00E1n ph\u00EDm t\u1EAFt n\u00E0y cho h\u00E0nh \u0111\u1ED9ng kh\u00E1c! B\u1EA1n c\u00F3 s\u1EEDa l\u1EA1i kh\u00F4ng? print.print=In print.dialog=In print.service=D\u1ECBch v\u1EE5 print.service.name=T\u00EAn print.service.status=Tr\u1EA1ng th\u00E1i print.service.type=Ki\u1EC3u print.service.info=Th\u00F4ng tin print.range=Ph\u1EA1m vi print.range.all-pages=T\u1EA5t c\u1EA3 print.range.pages=Trang print.range.pages-to=\u0110\u1EBFn print.copies=B\u1EA3n sao print.copies-number=S\u1ED1 b\u1EA3n sao print.print-to-file=In ra t\u1EADp tin print.file-chooser=Ch\u1ECDn print-header.default-song-name=V\u00F4 \u0111\u1EC1 print-header.default-song-author=V\u00F4 danh print.preview=Xem th\u1EED print.preview.page-of=Of marker=\u0110\u00E1nh d\u1EA5u marker.add=Th\u00EAm \u0111\u00E1nh d\u1EA5u marker.list=Li\u1EC7t k\u00EA c\u00E1c d\u1EA5u marker.first=T\u1EDBi d\u1EA5u \u0111\u1EA7u ti\u00EAn marker.last=T\u1EDBi d\u1EA5u cu\u1ED1i c\u00F9ng marker.next=T\u1EDBi \u0111\u00E1nh d\u1EA5u k\u1EBF ti\u1EBFp marker.previous=T\u1EDBi \u0111\u00E1nh d\u1EA5u tr\u01B0\u1EDBc export.tablature-enabled=Hi\u1EC7n tab export.score-enabled=Hi\u1EC7n b\u1EA3n nh\u1EA1c export.chord-name-enabled=Hi\u1EC7n t\u00EAn h\u1EE3p \u00E2m export.chord-diagram-enabled=Hi\u1EC7n s\u01A1 \u0111\u1ED3 h\u1EE3p \u00E2m scale=\u00C2m giai scale.list=Li\u1EC7t k\u00EA \u00E2m giai text.insert=Ch\u00E8n v\u0103n b\u1EA3n text.editor=So\u1EA1n th\u1EA3o v\u0103n b\u1EA3n text.text=V\u0103n b\u1EA3n tools=C\u00F4ng c\u1EE5 tools.scale=Danh s\u00E1ch \u00E2m giai tools.browser=B\u1ED9 duy\u1EC7t tools.plugins=Tr\u00ECnh b\u1ED5 sung tools.shortcuts=C\u00E1c ph\u00EDm t\u1EAFt tools.settings=Thi\u1EBFt l\u1EADp browser.dialog=B\u1ED9 duy\u1EC7t browser.menu.file=T\u1EADp tin browser.open=M\u1EDF browser.exit=Tho\u00E1t browser.menu.collection=Tuy\u1EC3n t\u1EADp browser.menu.go=Chuy\u1EC3n \u0111\u1EBFn browser.collection.select=Ch\u1ECDn th\u01B0 vi\u1EC7n browser.collection.open=M\u1EDF browser.collection.remove=Xo\u00E1 browser.collection.close=\u0110\u00F3ng browser.collection.new=M\u1EDBi browser.go-root=Nh\u00E0 browser.go-back=L\u00F9i browser.refresh=C\u1EADp nh\u1EADt browser.factory.fs.name=H\u1EC7 t\u1EADp tin browser.collection.fs.name=T\u00EAn browser.collection.fs.path=Th\u01B0 m\u1EE5c browser.collection.fs.editor-title=L\u1EA5y t\u1EEB h\u1EC7 t\u1EADp tin browser.collection.fs.editor-tip=Ch\u1ECDn th\u01B0 m\u1EE5c ch\u1EE9a th\u01B0 vi\u1EC7n b\u1EA3n nh\u1EA1c browser.collection.fs.invalid-path=Xin h\u00E3y ch\u1ECDn m\u1ED9t th\u01B0 m\u1EE5c h\u1EE3p l\u1EC7 midi.port=C\u1ED5ng MIDI midi.sequencer=MIDI Sequencer plugin.unknown-value=Kh\u00F4ng c\u00F3. plugin.column.name=T\u00EAn tr\u00ECnh b\u1ED5 sung plugin.column.enabled=B\u1EADt ######################### ### Tool Bar Items ### ######################### file.items=T\u1EADp tin edit.items=S\u1EEDa property.items=Thu\u1ED9c t\u00EDnh track.items=D\u1EA3i duration.items=Tr\u01B0\u1EDDng \u0111\u1ED9 beat.items=Beat Items composition.items=So\u1EA1n nh\u1EA1c repeat.items=\u0110\u00E1nh d\u1EA5u l\u1EB7p transport.items=Ph\u00E1t l\u1EA1i marker.items=\u0110\u00E1nh d\u1EA5u insert.items=Ch\u00E8n layout.items=B\u1ED1 tr\u00ED view.items=Xem effect.items=Hi\u1EC7u \u1EE9ng dynamic.items=C\u01B0\u1EDDng \u0111\u1ED9 ######################### ###Key Binding Actions### ######################### action.file.new=T\u1EADp tin m\u1EDBi action.file.open=M\u1EDF t\u1EADp tin action.file.open-url=M\u1EDF URL action.file.save=L\u01B0u action.file.save-as=L\u01B0u d\u1EA1ng action.file.print=In action.file.print-preview=Xem th\u1EED action.file.exit=Tho\u00E1t kh\u1ECFi Tux-Guitar action.edit.undo=Hu\u1EF7 b\u01B0\u1EDBc action.edit.redo=L\u00E0m l\u1EA1i action.composition.change-time-signature=\u0110\u1ED5i s\u1ED1 nh\u1ECBp action.composition.change-tempo=\u0110\u1ED5i nh\u1ECBp \u0111\u1ED9 action.composition.change-info=\u0110\u1ED5i th\u00F4ng tin b\u00E0i h\u00E1t action.composition.change-clef=\u0110\u1ED5i kho\u00E1 action.composition.change-key-signature=\u0110\u1ED5i k\u00FD hi\u1EC7u kho\u00E1 action.composition.change-triplet-feel=\u0110\u1ED5i nh\u1ECBp li\u00EAn ba action.view.layout-set-page=B\u1ED1 tr\u00ED trang action.view.layout-set-linear=B\u1ED1 tr\u00ED th\u1EB3ng action.view.layout-set-multitrack=Hi\u1EC7n nhi\u1EC1u d\u1EA3i action.view.layout-set-score-enabled=Hi\u1EC7n n\u1ED1t nh\u1EA1c action.view.layout-set-tablature-enabled=Hi\u1EC7n tab action.view.layout-set-compact=Ch\u1EBF \u0111\u1ED9 thu g\u1ECDn action.view.layout-set-chord-diagram-enabled=B\u1EADt s\u01A1 \u0111\u1ED3 h\u1EE3p \u00E2m action.view.layout-set-chord-name-enabled=T\u00EAn h\u1EE3p \u00E2m action.view.show-fretboard=Hi\u1EC7n c\u1EA7n \u0111\u00E0n action.view.show-piano=Hi\u1EC7n piano action.view.show-matrix=Hi\u1EC7n ma tr\u1EADn action.view.show-mixer=Hi\u1EC7n b\u1ED9 tr\u1ED9n \u00E2m action.view.show-transport=Hi\u1EC7n B\u1ED9 ph\u00E1t action.track.add=Th\u00EAm d\u1EA3i action.track.remove=Xo\u00E1 d\u1EA3i action.track.clone=Sao nguy\u00EAn d\u1EA3i action.track.go-first=T\u1EDBi d\u1EA3i \u0111\u1EA7u ti\u00EAn action.track.go-last=T\u1EDBi d\u1EA3i cu\u1ED1i c\u00F9ng action.track.go-next=T\u1EDBi d\u1EA3i k\u1EBF ti\u1EBFp action.track.go-previous=T\u1EDBi d\u1EA3i tr\u01B0\u1EDBc action.track.lyrics=So\u1EA1n l\u1EDDi action.track.properties=\u0110\u1ED5i thu\u1ED9c t\u00EDnh d\u1EA3i action.track.move-down=\u0110\u01B0a d\u1EA3i xu\u1ED1ng action.track.move-up=\u0110\u01B0a d\u1EA3i l\u00EAn action.measure.add=Th\u00EAm \u00F4 nh\u1ECBp action.measure.remove=B\u1ECF \u00F4 nh\u1ECBp action.measure.copy=Ch\u00E9p \u00F4 nh\u1ECBp action.measure.paste=D\u00E1n \u00F4 nh\u1ECBp action.measure.clean=Xo\u00E1 \u00F4 nh\u1ECBp action.measure.go-first=T\u1EDBi \u00F4 nh\u1ECBp \u0111\u1EA7u ti\u00EAn action.measure.go-last=T\u1EDBi \u00F4 nh\u1ECBp cu\u1ED1i c\u00F9ng action.measure.go-next=T\u1EDBi \u00F4 nh\u1ECBp k\u1EBF action.measure.go-previous=T\u1EDBi \u00F4 nh\u1ECBp tr\u01B0\u1EDBc action.note.general.clean-beat=Xo\u00E1 ph\u00E1ch action.note.general.decrement-semitone=Gi\u1EA3m n\u1EEDa cung action.note.general.increment-semitone=T\u0103ng n\u1EEDa cung action.note.general.shift-down=D\u1ECBch xu\u1ED1ng action.note.general.shift-up=D\u1ECBch l\u00EAn action.note.general.tied=Th\u00EAm/Xo\u00E1 n\u1ED1t luy\u1EBFn action.note.duration.set-whole=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 n\u1ED1t tr\u00F2n action.note.duration.set-half=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 n\u1ED1t tr\u1EAFng action.note.duration.set-quarter=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 n\u1ED1t \u0111en action.note.duration.set-eighth=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c \u0111\u01A1n action.note.duration.set-sixteenth=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c k\u00E9p action.note.duration.set-thirty-second=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c ba action.note.duration.set-sixty-fourth=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c b\u1ED1n action.note.duration.change-dotted=Th\u00EAm/Xo\u00E1 ch\u1EA5m action.note.duration.change-double-dotted=Th\u00EAm/Xo\u00E1 ch\u1EA5m \u0111\u00F4i action.note.duration.change-division-type=Th\u00EAm/Xo\u00E1 ch\u00F9m ba action.note.duration.decrement-duration=Gi\u1EA3m tr\u01B0\u1EDDng \u0111\u1ED9 action.note.duration.increment-duration=T\u0103ng tr\u01B0\u1EDDng \u0111\u1ED9 action.note.effect.change-vibrato=Th\u00EAm/Xo\u00E1 rung d\u00E2y action.note.effect.change-bend=Th\u00EAm/Xo\u00E1 nh\u00EDu d\u00E2y action.note.effect.change-slide=Th\u00EAm/Xo\u00E1 l\u01B0\u1EDBt d\u00E2y action.note.effect.change-hammer=Th\u00EAm/Xo\u00E1 g\u00F5/nh\u1EA5c ng\u00F3n action.note.effect.change-accentuated=Add/Remove accentuated action.note.effect.change-dead=Th\u00EAm/Xo\u00E1 n\u1ED1t c\u00E2m action.note.effect.change-fade-in=Th\u00EAm/Xo\u00E1 \u0111\u00E1nh to d\u1EA7n action.note.effect.change-ghost=Add/Remove ghost action.note.effect.change-grace=Th\u00EAm/Xo\u00E1 n\u1ED1t chuy\u1EC3n action.note.effect.change-harmonic=Add/Remove harmonic action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated action.note.effect.change-palm-mute=Add/Remove palm mute action.note.effect.change-popping=Th\u00EAm/Xo\u00E1 m\u00F3c d\u00E2y action.note.effect.change-slapping=Th\u00EAm/Xo\u00E1 v\u1ED7 d\u00E2y action.note.effect.change-staccato=Th\u00EAm/Xo\u00E1 n\u1ED1t ng\u1EAFt \u00E2m action.note.effect.change-tapping=Th\u00EAm/Xo\u00E1 ch\u1EA5m ng\u00F3n action.note.effect.change-tremolo-bar=D\u00F9ng/Kh\u00F4ng d\u00F9ng c\u1EA7n nh\u00FAn action.note.effect.change-tremolo-picking=Th\u00EAm/Xo\u00E1 v\u00EA 1 n\u1ED1t action.note.effect.change-trill=Th\u00EAm/Xo\u00E1 l\u00E1y r\u1EC1n action.insert.open-repeat=M\u1EDF d\u1EA5u l\u1EB7p action.insert.close-repeat=\u0110\u00F3ng d\u1EA5u l\u1EB7p action.insert.repeat-alternative=L\u1EB7p kh\u00E1c \u0111i action.insert.chord=Ch\u00E8n h\u1EE3p \u00E2m action.insert.text=Ch\u00E8n v\u0103n b\u1EA3n action.marker.add=Th\u00EAm d\u1EA5u action.marker.go-next=T\u1EDBi \u0111\u00E1nh d\u1EA5u k\u1EBF action.marker.go-previous=T\u1EDBi \u0111\u00E1nh d\u1EA5u tr\u01B0\u1EDBc action.transport.play=Ph\u00E1t action.transport.stop=Ng\u1EEBng ph\u00E1t action.transport.mode=Ch\u1EBF \u0111\u1ED9 ph\u00E1t action.transport.metronome=\u0110\u00E1nh nh\u1ECBp action.tools.browser=B\u1ED9 duy\u1EC7t action.settings.configure=Thi\u1EBFt l\u1EADp action.help.doc=Tr\u1EE3 gi\u00FAp tuxguitar-src-1.2/TuxGuitar/share/lang/messages_zh_GB.properties0000644000175000017500000007352211273045225024512 0ustar julianjulian############################################################### ### Defaul language codes ### ############################################################### zh=\u7B80\u4F53\u4E2D\u6587 ############################################################### action.composition.change-clef=\u66F4\u6539\u8C31\u53F7 action.composition.change-info=\u4FEE\u6539\u6B4C\u8C31\u4FE1\u606F action.composition.change-key-signature=\u66F4\u6539\u8C03\u53F7 action.composition.change-tempo=\u66F4\u6539\u8282\u62CD action.composition.change-time-signature=\u53D8\u6362\u62CD\u5B50 action.composition.change-triplet-feel=\u6539\u53D8\u4E09\u8FDE\u97F3 action.edit.redo=\u91CD\u505A action.edit.undo=\u53D6\u6D88 action.file.exit=\u9000\u51FATuxGuitar # ######################## # ##Key Binding Actions### # ######################## action.file.new=\u65B0\u5EFA action.file.open=\u6253\u5F00 action.file.open-url=\u6253\u5F00URL action.file.print=\u6253\u5370 action.file.print-preview=\u6253\u5370\u9884\u89C8 action.file.save=\u4FDD\u5B58 action.file.save-as=\u53E6\u5B58\u4E3A action.help.doc=\u5E2E\u52A9 action.insert.chord=\u63D2\u5165\u548C\u5F26 action.insert.close-repeat=\u5173\u95ED\u91CD\u590D action.insert.open-repeat=\u6253\u5F00\u91CD\u590D action.insert.repeat-alternative=\u91CD\u590D\u9009\u62E9 action.insert.text=\u63D2\u5165\u6587\u672C action.marker.add=\u52A0\u5165\u6807\u8BB0 action.marker.go-next=\u4E0B\u4E00\u6807\u8BB0 action.marker.go-previous=\u4E0A\u4E00\u6807\u8BB0 action.measure.add=\u6DFB\u52A0\u5C0F\u8282 action.measure.clean=\u6E05\u9664\u5C0F\u8282 action.measure.copy=\u590D\u5236\u5C0F\u8282 action.measure.go-first=\u7B2C\u4E00\u5C0F\u8282 action.measure.go-last=\u6700\u540E\u4E00\u5C0F\u8282 action.measure.go-next=\u4E0B\u4E00\u5C0F\u8282 action.measure.go-previous=\u524D\u4E00\u5C0F\u8282 action.measure.paste=\u7C98\u8D34\u5C0F\u8282 action.measure.remove=\u5220\u9664\u5C0F\u8282 action.note.duration.change-dotted=\u6DFB\u52A0/\u5220\u9664\u9644\u70B9 action.note.duration.change-double-dotted=\u6DFB\u52A0/\u5220\u9664\u53CC\u9644\u70B9 action.note.duration.change-division-type=\u6DFB\u52A0/\u5220\u9664 tupleto action.note.duration.decrement-duration=\u51CF\u5C11\u65F6\u503C action.note.duration.increment-duration=\u589E\u52A0\u65F6\u503C action.note.duration.set-eighth=\u8BBE\u7F6E\u516B\u5206\u97F3\u65F6\u503C action.note.duration.set-half=\u8BBE\u7F6E\u4E8C\u5206\u97F3\u65F6\u503C action.note.duration.set-quarter=\u8BBE\u7F6E\u56DB\u5206\u97F3\u65F6\u503C action.note.duration.set-sixteenth=\u8BBE\u7F6E16\u5206\u97F3\u65F6\u503C action.note.duration.set-sixty-fourth=\u8BBE\u7F6E64\u5206\u97F3\u65F6\u503C action.note.duration.set-thirty-second=\u8BBE\u7F6E32\u5206\u97F3\u65F6\u503C action.note.duration.set-whole=\u8BBE\u7F6E\u5168\u97F3\u65F6\u503C action.note.effect.change-accentuated=\u6DFB\u52A0/\u79FB\u9664\u91CD\u97F3 action.note.effect.change-bend=\u6DFB\u52A0/\u79FB\u9664\u63A8\u5F26 action.note.effect.change-dead=\u6DFB\u52A0/\u79FB\u9664\u5236\u97F3 action.note.effect.change-fade-in=\u6DFB\u52A0/\u79FB\u9664\u6DE1\u5165 action.note.effect.change-ghost=\u6DFB\u52A0/\u79FB\u9664\u5E7D\u7075\u97F3 action.note.effect.change-grace=\u6DFB\u52A0/\u79FB\u9664\u88C5\u9970\u97F3 action.note.effect.change-hammer=\u6DFB\u52A0/\u79FB\u9664\u5782\u5F26/\u94A9\u5F26 action.note.effect.change-harmonic=\u6DFB\u52A0/\u79FB\u9664\u6CDB\u97F3 action.note.effect.change-heavy-accentuated=\u6DFB\u52A0/\u79FB\u9664\u5F3A\u91CD\u97F3 action.note.effect.change-palm-mute=\u6DFB\u52A0/\u79FB\u9664\u624B\u638C\u5236\u97F3 action.note.effect.change-popping=\u6DFB\u52A0/\u79FB\u9664\u52FE\u5F26 action.note.effect.change-slapping=\u6DFB\u52A0/\u79FB\u9664\u51FB\u5F26 action.note.effect.change-slide=\u6DFB\u52A0/\u79FB\u9664\u6ED1\u5F26 action.note.effect.change-staccato=\u6DFB\u52A0/\u79FB\u9664\u65AD\u97F3 action.note.effect.change-tapping=\u589E\u52A0/\u5220\u9664\u70B9\u5F26 action.note.effect.change-tremolo-bar=\u589E\u52A0/\u5220\u9664\u6447\u6746 action.note.effect.change-tremolo-picking=\u589E\u52A0/\u5220\u9664\u6447\u6746\u62E8\u5F26 action.note.effect.change-trill=\u589E\u52A0/\u5220\u9664\u98A4\u97F3 action.note.effect.change-vibrato=\u589E\u52A0/\u5220\u9664\u632F\u52A8 action.note.general.clean-beat=\u6E05\u9664\u8282\u62CD action.note.general.decrement-semitone=\u51CF\u5C11\u534A\u97F3 action.note.general.increment-semitone=\u589E\u52A0\u534A\u97F3 action.note.general.shift-down=\u4E0B\u79FB action.note.general.shift-up=\u4E0A\u79FB action.note.general.tied=\u589E\u52A0/\u5220\u9664\u8FDE\u97F3 action.settings.configure=\u8BBE\u7F6E action.tools.browser=\u6D4F\u89C8 action.track.add=\u589E\u52A0 action.track.clone=\u514B\u9686\u58F0\u90E8 action.track.go-first=\u7B2C\u4E00\u58F0\u90E8 action.track.go-last=\u6700\u540E\u58F0\u90E8 action.track.go-next=\u4E0B\u4E00\u58F0\u90E8 action.track.go-previous=\u524D\u4E00\u58F0\u90E8 action.track.lyrics=\u7F16\u8F91\u6B4C\u8BCD action.track.move-down=\u58F0\u90E8\u4E0B\u79FB action.track.move-up=\u58F0\u90E8\u4E0A\u79FB action.track.properties=\u66F4\u6539\u58F0\u90E8\u5C5E\u6027 action.track.remove=\u5220\u9664\u58F0\u90E8 action.transport.metronome=\u8282\u62CD\u5668 action.transport.mode=\u64AD\u653E\u6A21\u5F0F action.transport.play=\u64AD\u653E action.transport.stop=\u505C\u6B62 action.view.layout-set-chord-diagram-enabled=\u7F16\u8F91\u548C\u5F26\u56FE action.view.layout-set-chord-name-enabled=\u7F16\u8F91\u548C\u5F26\u540D action.view.layout-set-compact=\u7D27\u7F29\u6A21\u5F0F action.view.layout-set-linear=\u6A2A\u5411\u663E\u793A action.view.layout-set-multitrack=\u591A\u8F68 action.view.layout-set-page=\u4E50\u8C31\u81EA\u52A8\u6362\u884C action.view.layout-set-score-enabled=\u663E\u793A\u4E94\u7EBF\u8C31 action.view.layout-set-tablature-enabled=\u663E\u793A\u516D\u7EBF\u8C31 action.view.show-fretboard=\u5409\u5B83\u6307\u677F action.view.show-matrix=\u97F3\u7B26\u77E9\u9635 action.view.show-mixer=\u58F0\u90E8\u63A7\u5236 action.view.show-piano=\u7434\u952E action.view.show-transport=\u64AD\u653E\u63A7\u5236 add=\u6DFB\u52A0 author=\u4F5C\u8005 beat=\u97F3\u7B26 beat.clean=\u6E05\u9664 beat.items=\u97F3\u7B26 bend.bend=\u63A8\u5F26 bend.bend-release=\u63A8/\u653E bend.bend-release-bend=\u63A8/\u653E/\u63A8 bend.editor=\u63A8\u5F26\u7F16\u8F91\u5668 bend.prebend=\u9884\u63A8 bend.prebend-release=\u9884\u63A8/\u653E browser.collection.close=\u5173\u95ED browser.collection.fs.editor-tip=\u9009\u62E9\u6587\u4EF6\u5939 browser.collection.fs.editor-title=\u6587\u4EF6\u7CFB\u7EDF browser.collection.fs.invalid-path=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6587\u4EF6\u5939 browser.collection.fs.name=\u540D\u5B57 browser.collection.fs.path=\u6587\u4EF6\u8DEF\u5F84 browser.collection.new=\u65B0\u5EFA browser.collection.open=\u6253\u5F00 browser.collection.remove=\u5220\u9664 browser.collection.select=\u9009\u62E9\u5E38\u7528\u8DEF\u5F84 browser.dialog=\u6D4F\u89C8 browser.exit=\u9000\u51FA browser.factory.fs.name=\u6587\u4EF6\u7CFB\u7EDF browser.go-back=\u540E\u9000 browser.go-root=\u6839\u76EE\u5F55 browser.menu.collection=\u5E38\u7528\u76EE\u5F55 browser.menu.file=\u6587\u4EF6 browser.menu.go=Go browser.open=\u6253\u5F00 browser.refresh=\u5237\u65B0 cancel=\u53D6\u6D88 choose=\u9009\u62E9 choose-color=\u9009\u62E9\u989C\u8272 chord=\u548C\u5F26 chord.bass=\u8D1D\u53F8 chord.custom=\u81EA\u5B9A\u548C\u5F26 chord.custom.name-empty-error=\u548C\u5F26\u540D\u4E0D\u80FD\u4E3A\u7A7A chord.custom.name-exist-error=\u548C\u5F26\u660E\u5DF2\u5B58\u5728 chord.editor=\u548C\u5F26\u7F16\u8F91\u5668 chord.name=\u548C\u5F26\u540D\u79F0 chord.settings.chords-to-display=\u548C\u5F26\u663E\u793A chord.settings.maximum-fret=\u6700\u5927 chord.settings.minimum-fret=\u6700\u5C0F chord.settings.open-chords=\u6253\u5F00\u548C\u5F26 chord.settings.search-frets=\u67E5\u627E\u54C1 chord.settings.tip=\u81EA\u5B9A\u4E49\u8BBE\u7F6E chord.settings.type=\u7C7B\u578B chord.settings.type.close-voiced=Close Voiced chord.settings.type.inversions=\u56DE\u8F6C chord.settings.type.most-common=Most Common chord.settings.type.open-voiced=Open Voiced clean=\u6E05\u9664 close=\u5173\u95ED color=\u989C\u8272 composition=\u4E50\u66F2 composition.album=\u4E13\u8F91 composition.artist=\u827A\u672F\u5BB6 composition.author=\u4F5C\u8005 composition.clef=\u8C31\u53F7 composition.clef.alto=\u4E2D\u97F3 composition.clef.bass=\u4F4E\u97F3 composition.clef.tenor=\u6B21\u4E2D\u97F3 composition.clef.to-the-end=\u5E94\u7528\u5F53\u524D\u8C31\u53F7\u5230\u7ED3\u5C3E composition.clef.treble=\u9AD8\u97F3 composition.items=\u66F2\u76EE composition.keysignature=\u8C03\u53F7 composition.keysignature.flat-1=\u964D1 composition.keysignature.flat-2=\u964D2 composition.keysignature.flat-3=\u964D3 composition.keysignature.flat-4=\u964D4 composition.keysignature.flat-5=\u964D5 composition.keysignature.flat-6=\u964D6 composition.keysignature.flat-7=\u964D7 composition.keysignature.natural=\u8FD8\u539F composition.keysignature.sharp-1=\u53471 composition.keysignature.sharp-2=\u53472 composition.keysignature.sharp-3=\u53473 composition.keysignature.sharp-4=\u53474 composition.keysignature.sharp-5=\u53475 composition.keysignature.sharp-6=\u53476 composition.keysignature.sharp-7=\u53477 composition.keysignature.to-the-end=\u5E94\u7528\u5F53\u524D\u8C31\u53F7\u5230\u7ED3\u5C3E composition.name=\u540D\u5B57 composition.properties=\u5C5E\u6027 composition.tempo=\u8282\u594F composition.tempo-percent=\u767E\u5206\u6BD4 composition.tempo.invalid=\u9519\u8BEF\u8282\u594F composition.tempo.position-to-end=\u5E94\u7528\u5F53\u524D\u8282\u594F\u5230\u7ED3\u5C3E composition.tempo.position-to-next=\u5E94\u7528\u5F53\u524D\u8282\u594F\u5230\u6807\u8BB0 composition.tempo.start-to-end=\u5E94\u7528\u5F53\u524D\u8282\u594F\u5230\u6574\u9996\u4E50\u66F2 composition.timesignature=\u62CD\u5B50 composition.timesignature.Numerator=\u5206\u5B50 composition.timesignature.denominator=\u5206\u6BCD composition.timesignature.to-the-end=\u5230\u7ED3\u5C3E composition.tripletfeel=\u8FDE\u97F3 composition.tripletfeel.eighth=\u516B\u5206\u8FDE\u97F3 composition.tripletfeel.none=\u53D6\u6D88\u8FDE\u97F3 composition.tripletfeel.sixteenth=16\u5206\u8FDE\u97F3 composition.tripletfeel.to-the-end=\u5E94\u7528\u8FDE\u97F3\u5230\u7ED3\u5C3E configure=\u8BBE\u7F6E defaults=\u9ED8\u8BA4 description=\u63CF\u8FF0 duration=\u97F3\u957F duration.dotted=\u9644\u70B9 duration.doubledotted=\u53CC\u9644\u70B9 duration.eighth=8\u5206\u97F3\u7B26 duration.half=\u4E8C\u5206\u97F3\u7B26 duration.items=\u97F3\u957F duration.quarter=\u56DB\u5206\u97F3\u7B26 duration.sixteenth=16\u5206\u97F3\u7B26 duration.sixtyfourth=64\u5206\u97F3\u7B26 duration.thirtysecond=30\u5206\u97F3\u7B26 duration.division-type=\u4E09\u8FDE\u97F3 duration.whole=\u5168\u97F3\u7B26 dynamic=\u529B\u5EA6 dynamic.forte=\u5F3A dynamic.forte-fortissimo=\u6700\u5F3A dynamic.fortissimo=\u6781\u5F3A dynamic.items=\u529B\u5EA6 dynamic.mezzo-forte=\u4E2D\u5F3A dynamic.mezzo-piano=\u4E2D\u5F31 dynamic.pianissimo=\u6781\u5F31 dynamic.piano=\u5F31 dynamic.piano-pianissimo=\u6700\u5F31 edit=\u7F16\u8F91 edit.all-tracks=\u6240\u6709\u58F0\u90E8 edit.copy=\u62F7\u8D1D edit.cut=\u526A\u5207 edit.delete=\u5220\u9664 edit.from=\u4ECE edit.items=\u7F16\u8F91 edit.menu=\u7F16\u8F91 edit.mouse-mode-edition=\u4E50\u8C31\u7F16\u8F91\u6A21\u5F0F edit.mouse-mode-selection=\u9009\u62E9\u6A21\u5F0F edit.not-natural-key=\u5347\u8C03/\u964D\u8C03\u6A21\u5F0F edit.paste=\u7C98\u8D34 edit.paste.insert-mode=\u7C98\u8D34\u5230\u4E0B\u4E00\u62CD edit.paste.replace-mode=\u7C98\u8D34\u5230\u5F53\u524D\u62CD edit.redo=\u91CD\u505A edit.to=\u5230 edit.undo=\u64A4\u9500 effect.items=\u6548\u679C effects=\u6548\u679C effects.accentuatednote=\u91CD\u97F3 effects.bend=\u63A8\u5F26 effects.deadnote=\u95F7\u97F3 effects.fade-in=\u6DE1\u5165 effects.ghostnote=\u5E7D\u7075\u97F3 effects.grace=\u88C5\u9970\u97F3 effects.grace-editor=\u88C5\u9970\u97F3\u7F16\u8F91\u5668 effects.grace.before-beat=\u62CD\u524D\u88C5\u9970\u97F3 effects.grace.on-beat=\u62CD\u4E0A\u88C5\u9970\u97F3 effects.grace.transition=\u8FC7\u5EA6\u88C5\u9970\u97F3 effects.grace.transition-bend=\u63A8\u5F26 effects.grace.transition-hammer=\u6376\u5F26 effects.grace.transition-none=\u65E0\u88C5\u9970\u97F3 effects.grace.transition-slide=\u6ED1\u5F26 effects.hammer=\u6376\u5F26/\u94A9\u5F26 effects.harmonic=\u6CDB\u97F3 effects.harmonic-editor=\u6CDB\u97F3\u7F16\u8F91\u5668 effects.harmonic.artificial=\u4EBA\u5DE5\u6CDB\u97F3 effects.harmonic.artificial.key-offset=\u504F\u79FB effects.harmonic.natural=\u81EA\u7136\u6CDB\u97F3 effects.harmonic.pinch=\u5C16\u53EB(\u62E8\u7247)\u6CDB\u97F3 effects.harmonic.semi=\u534A\u6CDB\u97F3 effects.harmonic.tapped=\u62CD\u5F26\u6CDB\u97F3 effects.harmonic.tapped.left-hand=\u5DE6\u624B\u70B9\u5F26 effects.harmonic.tapped.right-hand=\u53F3\u624B\u70B9\u5F26 effects.harmonic.type-of-harmonic=\u6CDB\u97F3\u7C7B\u578B effects.heavyaccentuatednote=\u5F3A\u91CD\u97F3 effects.palm-mute=\u624B\u638C\u95F7\u97F3 effects.popping=\u53F3\u624B\u94A9\u5F26 effects.slapping=\u53F3\u624B\u94A9\u5F26 effects.slide=\u6ED1\u5F26 effects.staccato=\u65AD\u97F3 effects.tapping=\u70B9\u5F26 effects.tremolo-bar=\u6447\u6746 effects.tremolo-bar-editor=\u6447\u6746\u7F16\u8F91\u5668 effects.tremolo-bar.dip=\u4E0B\u538B effects.tremolo-bar.dive=\u538B\u5230\u5E95 effects.tremolo-bar.inverted-dip=\u63D0\u8D77 effects.tremolo-bar.release-down=\u4E0B\u538B\u91CA\u653E effects.tremolo-bar.release-up=\u62AC\u8D77\u91CA\u653E effects.tremolo-bar.return=\u6447\u6746\u5F52\u4F4D effects.tremolo-picking=\u6447\u6746\u98A4\u97F3\u5F39\u594F effects.tremolo-picking-editor=\u6447\u6746\u98A4\u97F3\u7F16\u8F91\u5668 effects.trill=\u98A4\u97F3 effects.trill-editor=\u98A4\u97F3\u7F16\u8F91\u5668 effects.vibrato=\u632F\u52A8 error=\u9519\u8BEF exit=\u9000\u51FA export.chord-diagram-enabled=\u663E\u793A\u548C\u5F26\u56FE export.chord-name-enabled=\u663E\u793A\u548C\u5F26\u540D export.score-enabled=\u663E\u793A\u4E94\u7EBF\u8C31 export.tablature-enabled=\u663E\u793A\u516D\u7EBF\u8C31 file=\u6587\u4EF6 file.exit=\u9000\u51FA file.export=\u5BFC\u51FA file.export-ascii=\u5BFC\u51FAASCII file.export-midi=\u5BFC\u51FAMIDI file.export-pdf=\u5BFC\u51FAPDF file.export.error=\u4E0D\u80FD\u5BFC\u51FA\: {0} file.history=\u6700\u8FD1\u6587\u4EF6 file.import=\u5BFC\u5165 file.import-midi=\u5BFC\u5165MIDI file.import.error=\u4E0D\u80FD\u5BFC\u5165\: {0} # ######################## # ## Tool Bar Items ### # ######################## file.items=File Items file.new=\u65B0\u5EFA file.open=\u6253\u5F00 file.open-url=\u6253\u5F00URL file.open.error=\u4E0D\u80FD\u6253\u5F00\: {0} file.overwrite-question=\u6587\u4EF6\u5DF2\u5B58\u5728.\u662F\u5426\u8986\u76D6\u73B0\u6709\u6587\u4EF6? file.print=\u6253\u5370 file.print-preview=\u6253\u5370\u9884\u89C8 file.save=\u4FDD\u5B58 file.save-as=\u53E6\u5B58\u4E3A file.save-changes-question=\u66F2\u8C31\u8FD8\u672A\u4FDD\u5B58.\n\u5E0C\u671B\u4FDD\u5B58\u6240\u505A\u4FEE\u6539\u5417? file.save.error=\u4E0D\u80FD\u4FDD\u5B58\: {0} fret=\u54C1 fretboard.background-color=\u6307\u677F\u989C\u8272 fretboard.display-note-text=\u663E\u793A\u6CE8\u91CA\u6587\u672C fretboard.display-scale-text=\u663E\u793A\u97F3\u9636\u6587\u5B57 fretboard.font=\u5B57\u4F53 fretboard.fretpoint-color=\u54C1\u989C\u8272 fretboard.left-mode=\u5DE6\u624B fretboard.note-color=\u97F3\u7B26\u989C\u8272 fretboard.right-mode=\u53F3\u624B fretboard.scale-note-color=\u97F3\u9636\u97F3\u7B26\u989C\u8272 fretboard.settings=\u6307\u677F\u8BBE\u7F6E fretboard.settings.options=\u9009\u9879 fretboard.string-color=\u7434\u5F26\u989C\u8272 go=Go help=\u5E2E\u52A9 help.about=\u5173\u4E8E help.about.authors=\u4F5C\u8005 help.about.description=\u63CF\u8FF0 help.about.license=\u8BB8\u53EF\u8BC1 help.doc=\u6587\u6863 help.help=\u5E2E\u52A9 info=\u4FE1\u606F insert.chord=\u63D2\u5165\u548C\u5F26 insert.items=\u63D2\u5165 instrument=\u4E50\u5668 instrument.instrument=\u4E50\u5668 instrument.percussion-track=\u6253\u51FB\u4E50\u58F0\u90E8 key-bindings-editor=\u5FEB\u6377\u952E\u7F16\u8F91\u5668 key-bindings-editor-action-column=\u52A8\u4F5C key-bindings-editor-action-select=\u9009\u62E9\u52A8\u4F5C key-bindings-editor-override=\u5FEB\u6377\u952E\u51B2\u7A81\!\u786E\u5B9A\u4F7F\u7528? key-bindings-editor-push-a-key=\u8BF7\u6309\u952E key-bindings-editor-reserved-message=\u5BF9\u4E0D\u8D77,\u70ED\u952E\u70ED\u952E\u5457\u4FDD\u7559. key-bindings-editor-reserved-title=\u4FDD\u7559\u5FEB\u6377\u952E key-bindings-editor-save-question=\u4FEE\u6539\u8FD8\u672A\u4FDD\u5B58,\u73B0\u5728\u4FDD\u5B58\u4E48? key-bindings-editor-shortcut-column=\u6309\u952E language=\u8BED\u8A00 layout.items=\u5E03\u5C40 lyric.editor=\u6B4C\u8BCD\u7F16\u8F91\u5668 marker=\u7F16\u8F91 marker.add=\u52A0\u5165\u6807\u8BB0 marker.first=\u5230\u7B2C\u4E00\u4E2A\u6807\u8BB0 marker.items=\u6807\u8BB0 marker.last=\u5230\u6700\u540E\u4E00\u4E2A\u6807\u8BB0 marker.list=\u6807\u8BB0\u5217\u8868 marker.next=\u5230\u4E0B\u4E00\u4E2A\u6807\u8BB0 marker.previous=\u5230\u524D\u4E00\u4E2A\u6807\u8BB0 matrix.border-color=\u8FB9\u6846\u989C\u8272 matrix.editor=\u7F16\u8F91\u5668 matrix.font=\u5B57\u4F53 matrix.foreground-color=\u524D\u666F\u8272 matrix.grids=\u683C\u5B50\u6570 matrix.line-color-1=\u5076\u6570\u884C\u989C\u8272 matrix.line-color-2=\u5947\u6570\u884C\u989C\u8272 matrix.line-color-over=\u9F20\u6807\u4E0B\u9762\u884C\u989C\u8272 matrix.note-color=\u97F3\u7B26\u989C\u8272 matrix.play-note-color=\u5F53\u524D\u97F3\u7B26\u989C\u8272 matrix.position-color=\u5F53\u524D\u4F4D\u7F6E\u989C\u8272 matrix.settings=\u8BBE\u7F6E measure=\u5C0F\u8282 measure.add=\u65B0\u589E\u5C0F\u8282 measure.add-after-current-position=\u5F53\u524D\u5C0F\u8282\u540E\u65B0\u589E measure.add-at-end=\u58F0\u90E8\u672B\u5C3E\u6DFB\u52A0 measure.add-before-current-position=\u5F53\u524D\u5C0F\u8282\u524D\u65B0\u589E measure.clean=\u6E05\u9664\u5C0F\u8282 measure.copy=\u62F7\u8D1D\u5C0F\u8282 measure.first=\u7B2C\u4E00\u5C0F\u8282 measure.last=\u6700\u540E\u4E00\u5C0F\u8282 measure.next=\u4E0B\u4E00\u5C0F\u8282 measure.paste=\u7C98\u8D34\u4E00\u5C0F\u8282 measure.previous=\u524D\u9762\u5C0F\u8282 measure.remove=\u5220\u9664\u5C0F\u8282 midi.port=MIDI \u7AEF\u53E3 midi.sequencer=MIDI \u97F3\u5E8F\u5668 mixer=\u6DF7\u97F3\u5668 mixer.channel.balance=\u5E73\u8861 mixer.channel.channel=CH mixer.channel.effect-channel=EC mixer.channel.free=\u7A7A\u95F2 mixer.channel.link=\u8FDE\u63A5 mixer.channel.volume=\u97F3\u91CF mixer.track.mute=\u65E0\u58F0 mixer.track.solo=\u72EC\u594F mixer.volume=\u4E3B\u97F3\u91CF name=\u540D\u5B57 no=\u5426 note=\u97F3\u7B26 note.deadnote=\u95F7\u97F3 note.semitone-down=\u964D\u534A\u97F3 note.semitone-up=\u5347\u534A\u97F3 note.shift-down=\u4E0B\u79FB note.shift-up=\u4E0A\u79FB note.tiednote=\u8FDE\u97F3 ok=\u786E\u5B9A options=\u9009\u9879 piano.editor=\u94A2\u7434\u7F16\u8F91\u5668 piano.natural-key-color=\u767D\u952E\u989C\u8272 piano.not-natural-key-color=\u9ED1\u952E\u989C\u8272 piano.note-color=\u97F3\u7B26\u989C\u8272 piano.scale-note-color=\u97F3\u9636\u7B26\u53F7\u989C\u8272 piano.settings=\u94A2\u7434\u8BBE\u7F6E plugin.column.enabled=\u5141\u8BB8 plugin.column.name=\u63D2\u4EF6\u540D\u79F0 plugin.unknown-value=\u4E0D\u53EF\u7528 plugins=\u63D2\u4EF6 position=\u4F4D\u7F6E print-header.default-song-author=\u533F\u540D print-header.default-song-name=\u672A\u547D\u540D print.copies=\u6253\u5370 print.copies-number=\u6253\u5370\u4EFD\u6570 print.dialog=\u6253\u5370 print.file-chooser=\u9009\u62E9 print.preview=\u6253\u5370\u9884\u89C8 print.preview.page-of=\u5171 print.print=\u6253\u5370 print.print-to-file=\u6253\u5370\u5230\u6587\u4EF6 print.range=\u8303\u56F4 print.range.all-pages=\u5168\u90E8 print.range.pages=\u9875\u9762 print.range.pages-to=\u5230 print.service=\u670D\u52A1 print.service.info=\u4FE1\u606F print.service.name=\u540D\u79F0 print.service.status=\u72B6\u6001 print.service.type=\u7C7B\u578B property.items=\u5C5E\u6027 remove=\u5220\u9664 rename=\u6539\u540D repeat.alternative=\u53EF\u53D8\u53CD\u590D\u6807\u8BB0 repeat.alternative.editor=\u7F16\u8F91\u53EF\u53D8\u53CD\u590D repeat.close=\u53CD\u590D\u7ED3\u675F repeat.items=\u53CD\u590D repeat.number-of-repetitions=\u53CD\u590D\u6B21\u6570 repeat.open=\u53CD\u590D\u5F00\u59CB repetitions=\u53CD\u590D save=\u4FDD\u5B58 scale=\u97F3\u9636 scale.list=\u97F3\u9636\u5217\u8868 settings=\u8BBE\u7F6E settings.config=\u8BBE\u7F6ETuxGuitar settings.config.apply-changes-question=\u73B0\u5728\u5E94\u7528\u8BBE\u7F6E? settings.config.language=\u8BED\u8A00 settings.config.language.choose=\u9009\u62E9\u8BED\u8A00\u5305 settings.config.main=\u5E38\u7528\u4FE1\u606F settings.config.main.options=\u9009\u9879 settings.config.main.splash-enabled=\u663E\u793A\u6B22\u8FCE\u754C\u9762 settings.config.main.table.auto-size.enabled=\u5141\u8BB8\u81EA\u52A8\u62C9\u4F38 settings.config.main.window-title=\u7A97\u53E3\u6807\u9898 settings.config.main.window-title.help=\u4E0B\u9762\u7684\u4FE1\u606F\u4F1A\u663E\u793A\u5728\u7A97\u53E3\u6807\u9898\: settings.config.main.window-title.var.description.appname=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u672C\u7A0B\u5E8F\u540D\u5B57\:TuxGuitar settings.config.main.window-title.var.description.appversion=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u672C\u7A0B\u5E8F\u7248\u672C\u53F7 settings.config.main.window-title.var.description.filename=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u6587\u4EF6\u540D settings.config.main.window-title.var.description.filepath=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u8DEF\u5F84 settings.config.main.window-title.var.description.songalbum=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u6B4C\u66F2\u540D settings.config.main.window-title.var.description.songartist=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u827A\u672F\u5BB6 settings.config.main.window-title.var.description.songauthor=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u4F5C\u8005 settings.config.main.window-title.var.description.songname=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u66F2\u540D\u5B57 settings.config.skin=\u76AE\u80A4 settings.config.skin.choose=\u9009\u62E9\u76AE\u80A4 settings.config.sound=\u58F0\u97F3 settings.config.styles=\u98CE\u683C settings.config.styles.color.lines=\u6C34\u5E73\u7EBF\u989C\u8272 settings.config.styles.color.play-note=\u64AD\u653E\u4E2D\u7684\u97F3\u7B26\u989C\u8272 settings.config.styles.color.score-note=\u4E94\u7EBF\u8C31\u97F3\u7B26\u989C\u8272 settings.config.styles.color.tab-note=\u516D\u7EBF\u8C31\u97F3\u7B26\u989C\u8272 settings.config.styles.font.default=\u9ED8\u8BA4\u5B57\u4F53 settings.config.styles.font.lyric=\u6B4C\u8BCD\u5B57\u4F53 settings.config.styles.font.note=\u97F3\u7B26\u5B57\u4F53 settings.config.styles.font.printer-default=\u6253\u5370\u9ED8\u8BA4\u5B57\u4F53 settings.config.styles.font.printer-note=\u6253\u5370\u97F3\u7B26\u5B57\u4F53 settings.config.styles.font.printer-time-signature=\u6253\u5370\u62CD\u5B50\u5B57\u4F53 settings.config.styles.font.text=\u6587\u672C\u5B57\u4F53 settings.config.styles.font.time-signature=\u62CD\u5B50\u5B57\u4F53 settings.config.styles.general=\u9ED8\u8BA4\u6837\u5F0F settings.config.styles.printer=\u6253\u5370\u6837\u5F0F settings.config.toolbars=\u5DE5\u5177\u680F settings.config.toolbars.list=\u53EF\u7528\u5DE5\u5177\u680F\u5217\u8868 settings.config.toolbars.move-down=\u4E0B\u79FB settings.config.toolbars.move-up=\u4E0A\u79FB settings.config.toolbars.tip=\u81EA\u5B9A\u4E49\u5DE5\u5177\u680F settings.keybindings=\u5FEB\u6377\u952E\u8BBE\u7F6E text.editor=\u6587\u672C\u7F16\u8F91\u5668 text.insert=\u63D2\u5165\u6587\u672C text.text=\u6587\u672C title=\u6807\u9898 tools=\u5DE5\u5177 tools.browser=\u6D4F\u89C8\u5E38\u7528\u6587\u4EF6\u5939 tools.plugins=\u63D2\u4EF6 tools.scale=\u97F3\u9636\u5217\u8868 tools.settings=\u8BBE\u7F6E tools.shortcuts=\u5FEB\u6377\u952E track=\u591A\u8F68 track.add=\u6DFB\u52A0\u58F0\u90E8 track.clone=\u58F0\u90E8\u62F7\u8D1D track.color=\u989C\u8272 track.first=\u7B2C\u4E00\u58F0\u90E8 track.instrument=\u5668\u4E50 track.items=\u58F0\u90E8 track.last=\u6700\u672B\u58F0\u90E8 track.lyrics=\u6B4C\u8BCD track.move-down=\u4E0B\u79FB track.move-up=\u4E0A\u79FB track.name=\u540D\u79F0 track.name.default-percussion-name=\u6253\u51FB\u4E50\u5668 track.next=\u4E0B\u4E00\u58F0\u90E8 track.number=\u58F0\u90E8\u7F16\u53F7 track.previous=\u524D\u4E00\u58F0\u90E8 track.properties=\u5C5E\u6027 track.properties.general=\u5E38\u7528 track.remove=\u5220\u9664\u58F0\u90E8 transport=\u64AD\u653E\u5668 transport.first=\u7B2C\u4E00\u5C0F\u8282 transport.items=\u64AD\u653E\u5668 transport.last=\u6700\u540E\u5C0F\u8282 transport.metronome=\u8282\u62CD\u5668 transport.mode=\u6F14\u594F\u6A21\u5F0F transport.mode.simple=\u7B80\u5355\u91CD\u590D transport.mode.simple.loop=\u91CD\u590D\u64AD\u653E transport.mode.simple.tempo-percent=\u901F\u5EA6\u53D8\u5316 transport.mode.trainer=\u7EC3\u4E60\u6A21\u5F0F transport.mode.trainer.increment-description=\u6BCF\u6B21\u589E\u52A0 transport.next=\u4E0B\u4E00\u5C0F\u8282 transport.pause=\u6682\u505C transport.previous=\u524D\u4E00\u5C0F\u8282 transport.start=\u64AD\u653E transport.stop=\u505C\u6B62 tuning=\u5B9A\u8C03 tuning.offset=\u53D8\u8C03\u5939 tuning.strings=\u5F26\u6570 url=URL version=\u7248\u672C view=\u67E5\u770B view.items=\u67E5\u770B view.layout=\u5E03\u5C40 view.layout.chord-diagram=\u548C\u5F26\u56FE view.layout.chord-name=\u548C\u5F26\u540D view.layout.chord-style=\u548C\u5F26\u6837\u5F0F view.layout.compact=\u7D27\u7F29\u6A21\u5F0F view.layout.linear=\u6A2A\u5411\u6EDA\u52A8 view.layout.multitrack=\u591A\u8F68 view.layout.page=\u9875\u5E03\u5C40 view.layout.score-enabled=\u663E\u793A\u4E94\u7EBF\u8C31 view.layout.tablature-enabled=\u663E\u793A\u516D\u7EBF\u8C31 view.show-fretboard=\u663E\u793A\u6307\u677F view.show-matrix=\u663E\u793A\u97F3\u7B26\u77E9\u9635 view.show-mixer=\u663E\u793A\u6DF7\u97F3\u5668 view.show-piano=\u663E\u793A\u7434\u952E view.show-transport=\u663E\u793A\u65F6\u95F4\u8F74 warning=\u8B66\u544A yes=\u662F ############################### ### Changes from 1.0 to 1.1 ### ############################### edit.voice-1=\u9009\u62E9\u4EA4\u9519\u62CD\u5B501 edit.voice-2=\u9009\u62E9\u4EA4\u9519\u62CD\u5B502 beat.voice.remove-unused=\u5220\u9664\u672A\u7528\u4EA4\u9519\u62CD\u5B50 beat.voice-up=\u5347\u9AD8 beat.voice-down=\u964D\u4F4E beat.voice-auto=\u81EA\u52A8 beat.stroke-up=\u4E0A\u63A8\u5F26 beat.stroke-down=\u4E0B\u63A8\u5F26 ## Shortcut Names action.edit.voice-1=\u9009\u62E9\u4EA4\u9519\u62CD\u5B501 action.edit.voice-2=\u9009\u62E9\u4EA4\u9519\u62CD\u5B502 action.beat.general.remove-unused-voice=\u5220\u9664\u672A\u7528\u4EA4\u9519\u62CD\u5B50 action.beat.general.voice-up=\u8BBE\u7F6E\u5347\u9AD8 action.beat.general.voice-down=\u8BBE\u7F6E\u964D\u4F4E action.beat.general.voice-auto=\u81EA\u52A8 action.beat.general.set-stroke-up=\u8BBE\u7F6E\u4E0A\u63A8\u5F26 action.beat.general.set-stroke-down=\u8BBE\u7F6E\u4E0B\u63A8\u5F26 ############################### ### Changes from 1.1 to 1.2 ### ############################### transport.mode.loop-range=\u5FAA\u73AF\u533A\u95F4 transport.mode.loop-range.from=\u4ECE\u5F53\u524D\u5C0F\u8282\u5F00\u59CB\u64AD\u653E transport.mode.loop-range.from-default=\u4ECE\u5934\u64AD\u653E transport.mode.loop-range.to=\u64AD\u653E\u5230\u5F53\u524D\u5C0F\u8282 transport.mode.loop-range.to-default=\u4E00\u76F4\u5230\u7ED3\u675F tools.transpose=\u53D8\u8C03 tools.transpose.semitones=\u8F6C\u6362\u534A\u97F3 tools.transpose.apply-to-track=\u8F6C\u6362\u6240\u6709\u5C0F\u8282 tools.transpose.apply-to-measure=\u53EA\u8F6C\u6362\u5F53\u524D\u5C0F\u8282 tools.transpose.apply-to-all-tracks=\u5E94\u7528\u6240\u6709\u97F3\u8F68 tools.transpose.try-keep-strings=\u5C3D\u91CF\u4FDD\u6301\u6240\u6709\u97F3\u7B26\u5728\u540C\u4E00\u5F26\u4E0A tools.transpose.apply-to-chords=\u8F6C\u6362\u548C\u5F26 action.tools.transpose=\u97F3\u7B26\u53D8\u8C03 tuning.strings.transpose=\u8F6C\u6362\u53D7\u5F71\u54CD\u97F3\u7B26 tuning.strings.transpose.try-keep-strings=\u4FDD\u6301\u6240\u6709\u97F3\u7B26\u5728\u540C\u4E00\u5F26\u4E0A tuning.strings.transpose.apply-to-chords=\u8F6C\u6362\u548C\u5F26 composition.date=\u65E5\u671F composition.copyright=\u7248\u6743\u4FE1\u606F composition.writer=\u66F2\u8C31\u4F5C\u8005 composition.transcriber=\u6539\u7F16 composition.comments=\u6CE8\u91CA beat.move-left=\u5DE6\u79FB\u4E00\u62CD beat.move-right=\u53F3\u79FB\u4E00\u62CD beat.move-custom=\u81EA\u5B9A\u4E49\u62CD\u5B50\u79FB\u52A8 beat.move-custom.dialog.title=\u81EA\u5B9A\u4E49 beat.move-custom.dialog.direction-tip=\u79FB\u52A8\u65B9\u5411 beat.move-custom.dialog.move-1.tip=\u79FB\u52A8\u65B9\u5F0F\u4E00 beat.move-custom.dialog.move-2.tip=\u79FB\u52A8\u65B9\u5F0F\u4E8C beat.move-custom.dialog.direction=\u65B9\u5411 beat.move-custom.dialog.direction.right=\u53F3\u79FB beat.move-custom.dialog.direction.left=\u5DE6\u79FB beat.move-custom.dialog.count=\u6570\u91CF beat.move-custom.dialog.duration=\u65F6\u503C beat.move-custom.dialog.duration.type=\u7B26\u70B9/\u53CC\u7B26\u70B9 beat.move-custom.dialog.duration.type.normal=\u65E0 beat.move-custom.dialog.duration.division-type=\u5207\u5206\u65B9\u5F0F beat.move-custom.dialog.duration.division-type.normal=\u666E\u901A(\u4E09\u8FDE\u97F3) action.beat.general.move-left=\u5DE6\u79FB\u4E00\u62CD action.beat.general.move-right=\u53F3\u79FB\u4E00\u62CD action.beat.general.move-custom=\u81EA\u5B9A\u4E49\u62CD\u5B50\u79FB\u52A8 measure.add.count=\u6DFB\u52A0\u5C0F\u8282\u6570 edit.paste.count=\u7C98\u8D34\u5C0F\u8282\u6570 export.black-and-white=\u5355\u8272\u6A21\u5F0F fretboard.direction=\u65B9\u5411 transport.set-loop-start=\u8BBE\u7F6E\u5FAA\u73AF\u8D77\u59CB\u70B9 transport.set-loop-end=\u8BBE\u7F6E\u5FAA\u73AF\u7ED3\u675F\u70B9 action.transport.set-loop-start=\u8BBE\u7F6E\u5FAA\u73AF\u8D77\u59CB\u70B9 action.transport.set-loop-end=\u8BBE\u7F6E\u5FAA\u73AF\u7ED3\u675F\u70B9 tuxguitar-src-1.2/TuxGuitar/share/lang/messages_zh_TW.properties0000644000175000017500000004754011273045225024555 0ustar julianjulian############################################################### ### Defaul language codes ### ############################################################### es=Espa\u00f1ol en=English fr=Fran\u00e7ais pl=Polski de=Deutsch pt=Portuguese zh=\u6b63\u9ad4\u4e2d\u6587 ############################################################### ok=\u78ba\u5b9a cancel=\u53d6\u6d88 yes=\u662f no=\u5426 add=\u65b0\u589e edit=\u7de8\u8f2f remove=\u79fb\u9664 save=\u5132\u5b58 exit=\u96e2\u958b choose=\u9078\u64c7 color=\u984f\u8272 title=\u6a19\u984c go=\u524d\u5f80 warning=\u8b66\u544a error=\u932f\u8aa4 plugins=\u5916\u639b options=\u9078\u9805 defaults=\u9810\u8a2d clean=\u6e05\u9664 rename=\u91cd\u65b0\u547d\u540d fret=\u7434\u54c1 position=\u4f4d\u7f6e metronome=\u7bc0\u62cd\u5668 tuxguitar.title=Tux-Guitar file=\u6a94\u6848 file.new=\u958b\u65b0\u6a94\u6848 file.open=\u958b\u555f\u820a\u6a94 file.save=\u5132\u5b58\u6a94\u6848 file.save-as=\u53e6\u5b58\u65b0\u6a94 file.exit=\u96e2\u958b file.export=\u8f38\u51fa file.export-midi=\u8f38\u51fa\u6210MIDI file.export-pdf=\u8f38\u51fa\u6210 PDF file.print=\u5217\u5370 file.print-preview=\u9810\u89bd\u5217\u5370 file.import=\u8f38\u5165 file.import-midi=\u8f38\u5165MIDI file.export-ascii=\u8f38\u51fa\u6210ASCII file.history=\u6b77\u53f2\u7d00\u9304 file.overwrite-question=\u6a94\u6848\u5df2\u5b58\u5728\uff0c\u662f\u5426\u8986\u5beb\uff1f edit.menu=\u7de8\u8f2f edit.undo=\u4e0a\u4e00\u6b65 edit.redo=\u4e0b\u4e00\u6b65 edit.copy=\u8907\u88fd edit.from=\u5f9e edit.to=\u5230 edit.all-tracks=\u5168\u90e8\u97f3\u8ecc edit.paste=\u8cbc\u4e0a edit.paste.replace-mode=\u8cbc\u5728\u9019\u500b\u5c0f\u7bc0 edit.paste.insert-mode=\u8cbc\u5230\u65b0\u7684\u5c0f\u7bc0 edit.delete=\u522a\u9664 edit.cut=\u526a\u4e0b edit.mouse-mode-selection=\u9078\u64c7\u6a21\u5f0f edit.mouse-mode-edition=\u4e94\u7dda\u8b5c\u7de8\u8f2f\u6a21\u5f0f edit.not-natural-key=\u5347/\u964d\u6a21\u5f0f view=\u6aa2\u8996 view.layout=\u7248\u9762 view.layout.page=\u7e31\u5411\u5ef6\u4f38 view.layout.linear=\u6a6b\u5411\u5ef6\u4f38 view.layout.multitrack=\u591a\u8ecc view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668 view.show-fretboard=\u986f\u793a\u6307\u677f view.show-piano=\u986f\u793a\u7434\u9375 fretboard.right-mode=\u53f3\u624b\u7434 fretboard.left-mode=\u5de6\u624b\u7434 composition=\u66f2\u76ee composition.timesignature=\u62cd\u5b50\u8a18\u865f composition.timesignature.Numerator=\u5206\u5b50 composition.timesignature.denominator=\u5206\u6bcd composition.timesignature.to-the-end=\u5230\u7d50\u5c3e composition.tempo=\u7bc0\u594f composition.tempo-percent=\u7bc0\u594f(\u767e\u5206\u6bd4) composition.properties=\u8cc7\u8a0a composition.name=\u540d\u7a31 composition.artist=\u6f14\u594f\u8005 composition.album=\u5c08\u8f2f composition.author=\u4f5c\u8005 composition.tempo.invalid=\u4e0d\u5408\u7406\u7684\u7bc0\u594f composition.tripletfeel=Triplet Feel help=\u5e6b\u52a9 help.help=\u5e6b\u52a9 help.about=\u95dc\u65bc mixer.volume=\u589e\u76ca mixer.track.solo=\u7368\u594f mixer.track.mute=\u975c\u97f3 mixer.channel.volume=\u97f3\u91cf mixer.channel.channel=\u983b\u9053 mixer.channel.effect-channel=\u6548\u679c\u983b\u9053 mixer.channel.balance=\u5e73\u8861 mixer.channel.free=\u91cb\u653e mixer.channel.link=\u9023\u7d50 track=\u97f3\u8ecc track.number=\u7de8\u865f track.name=\u540d\u7a31 track.color=\u984f\u8272 track.first=\u7b2c\u4e00\u8ecc track.last=\u6700\u672b\u8ecc track.previous=\u524d\u4e00\u8ecc track.next=\u4e0b\u4e00\u8ecc track.add=\u65b0\u589e\u97f3\u8ecc track.remove=\u79fb\u9664\u97f3\u8ecc track.instrument=\u6a02\u5668 track.tunning=\u8abf\u5f26\u6cd5 track.instrument.empty=\u5728\u4f60\u7684Midi\u7cfb\u7d71\u88e1\u627e\u4e0d\u5230\u97f3\u6e90\uff0c\u8acb\u5617\u8a66\u91cd\u65b0\u7de8\u8b6fTuxGuitar track.properties=\u5c6c\u6027 track.properties.general=\u4e00\u822c track.name.default-percussion-name=\u6253\u64ca\u6a02\u5668 track.lyrics=\u6b4c\u8a5e tunning.offset=\u4f4d\u79fb lyric.editor=\u6b4c\u8a5e\u7de8\u8f2f\u5668 measure=\u5c0f\u7bc0 measure.first=\u7b2c\u4e00\u5c0f\u7bc0 measure.last=\u6700\u5f8c\u5c0f\u7bc0 measure.previous=\u4e0a\u500b\u5c0f\u7bc0 measure.next=\u4e0b\u500b\u5c0f\u7bc0 measure.add=\u65b0\u589e\u5c0f\u7bc0 measure.add-before-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u524d\u65b0\u589e\u5c0f\u7bc0 measure.add-after-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u5f8c\u65b0\u589e\u5c0f\u7bc0 measure.add-at-end=\u5728\u7d50\u5c3e\u65b0\u589e\u5c0f\u7bc0 measure.remove=\u79fb\u9664\u5c0f\u7bc0 measure.copy=\u8907\u88fd\u5c0f\u7bc0 measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0 measure.clean=\u6e05\u9664\u5c0f\u7bc0 duration=\u97f3\u9577 duration.whole=\u5168\u97f3\u7b26 duration.half=\u4e8c\u5206\u97f3\u7b26 duration.quarter=\u56db\u5206\u97f3\u7b26 duration.eighth=\u516b\u5206\u97f3\u7b26 duration.sixteenth=\u5341\u516d\u5206\u97f3\u7b26 duration.thirtysecond=\u4e09\u5341\u4e8c\u5206\u97f3\u7b26 duration.sixtyfourth=\u516d\u5341\u56db\u5206\u97f3\u7b26 duration.dotted=\u9644\u9ede duration.doubledotted=\u96d9\u9644\u9ede duration.division-type=\u4e09\u9023\u97f3 dynamic=\u529b\u5ea6 dynamic.piano-pianissimo=\u6700\u5f31 dynamic.pianissimo=\u751a\u5f31 dynamic.piano=\u5f31 dynamic.mezzo-piano=\u4e2d\u5f31 dynamic.mezzo-forte=\u4e2d\u5f37 dynamic.forte=\u5f37 dynamic.fortissimo=\u751a\u5f37 dynamic.forte-fortissimo=\u6700\u5f37 effects=\u6548\u679c effects.vibrato=\u9707\u97f3 effects.bend=\u63a8\u5f26 effects.deadnote=\u60b6\u97f3 effects.slide=\u6ed1\u5f26 effects.hammer=\u69cc\u5f26/\u52fe\u5f26 effects.tremolo-bar=\u6416\u687f\u986b\u97f3\u63a7\u5236\u689d effects.tremolo-bar-editor=\u6416\u687f\u986b\u97f3\u7de8\u8f2f\u5668 effects.tremolo-bar.dip=Dip effects.tremolo-bar.dive=Dive effects.tremolo-bar.release-up=Release Up effects.tremolo-bar.release-down=Release Down effects.tremolo-bar.inverted-dip=Inverted Dip effects.tremolo-bar.return=Return effects.ghostnote=\u5e7d\u9748\u97f3 effects.accentuatednote=\u91cd\u97f3 effects.heavyaccentuatednote=\u5f37\u91cd\u97f3 effects.harmonic=\u6cdb\u97f3 effects.grace=\u88dd\u98fe\u97f3 effects.grace-editor=\u88dd\u98fe\u97f3\u7de8\u8f2f\u5668 effects.grace.before-beat=\u62cd\u524d\u88dd\u98fe\u97f3 effects.grace.on-beat=\u62cd\u9ede\u88dd\u98fe\u97f3 effects.grace.transition=\u904e\u6e21\u88dd\u98fe\u97f3 effects.grace.transition-none=\u7121 effects.grace.transition-bend=\u63a8\u5f26 effects.grace.transition-slide=\u6ed1\u97f3 effects.grace.transition-hammer=\u69cc\u97f3 effects.trill=\u986b\u97f3 effects.trill-editor=\u986b\u97f3\u7de8\u8f2f\u5668 effects.tremolo-picking=\u6416\u687f\u986b\u97f3\u64a5\u594f effects.tremolo-picking-editor=\u6416\u687f\u986b\u97f3\u64a5\u594f\u7de8\u8f2f\u5668 effects.palm-mute=\u624b\u638c\u60b6\u97f3 effects.staccato=\u65b7\u97f3 effects.tapping=\u9ede\u5f26 effects.slapping=\u53f3\u624b\u64ca\u5f26 effects.popping=\u53f3\u624b\u52fe\u5f26 effects.fade-in=\u6de1\u5165 effects.harmonic-editor=\u6cdb\u97f3\u7de8\u8f2f\u5668 effects.harmonic.type-of-harmonic=\u6cdb\u97f3\u985e\u578b effects.harmonic.natural=\u81ea\u7136\u6cdb\u97f3 effects.harmonic.artificial=\u4eba\u5de5\u6cdb\u97f3 effects.harmonic.artificial.key-offset=Key offset effects.harmonic.tapped=\u62cd\u5f26\u6cdb\u97f3 effects.harmonic.tapped.left-hand=\u5de6\u624b\u9ede\u5f26 effects.harmonic.tapped.right-hand=\u53f3\u624b\u9ede\u5f26 effects.harmonic.pinch=\u624b\u6307\u6cdb\u97f3 effects.harmonic.semi=\u534a\u6cdb\u97f3 bend.editor=\u63a8\u5f26\u7de8\u8f2f\u5668 bend.bend=\u63a8\u5f26 bend.bend-release=\u63a8/\u653e bend.bend-release-bend=\u63a8/\u653e/\u63a8 bend.prebend=PreBend bend.prebend-release=PreBend/Release transport=\u64ad\u653e\u5668 transport.start=\u958b\u59cb transport.stop=\u505c\u6b62 repeat.open=\u958b\u59cb\u53cd\u8986\u5340\u6bb5 repeat.close=\u7d50\u675f\u53cd\u8986\u5340\u6bb5 repetitions=\u53cd\u8907 repeat.number-of-repetitions=\u53cd\u8907\u6b21\u6578 beat=\u97f3\u7b26 beat.clean=\u6e05\u9664\u62cd\u9ede note.semitone-up=\u5347\u534a\u97f3 note.semitone-down=\u964d\u534a\u97f3 note.shift-up=\u4e0a\u79fb note.shift-down=\u4e0b\u79fb note.tiednote=\u9023\u7d50\u97f3 note.deadnote=\u60b6\u97f3 insert.chord=\u63d2\u5165\u548c\u5f26 chord.editor=\u548c\u5f26\u7de8\u8f2f\u5668 chord=\u548c\u5f26 chord.name=\u548c\u5f26\u540d\u7a31 chord.custom.name-empty-error=\u548c\u5f26\u540d\u7a31\u4e0d\u53ef\u7a7a\u767d chord.custom.name-exist-error=\u548c\u5f26\u540d\u7a31\u5df2\u5b58\u5728 instrument=\u6a02\u5668 instrument.instrument=\u6a02\u5668 instrument.percussion-track=\u6253\u64ca\u6a02\u5668\u8ecc tunning=\u8abf\u5f26\u6cd5 tunning.strings=\u5f26 language=\u8a9e\u8a00 choose-color=\u9078\u64c7\u4e00\u500b\u984f\u8272 settings=\u8a2d\u5b9a settings.config=\u8a2d\u5b9aTuxGuitar settings.config.view=\u6aa2\u8996 settings.config.view.mode=\u7248\u9762\u6a21\u5f0f settings.config.view.size=\u8996\u7a97\u5927\u5c0f settings.config.view.size.maximized=\u653e\u5230\u6700\u5927 settings.config.view.size.width=\u5bec\u5ea6 settings.config.view.size.height=\u9ad8\u5ea6 settings.config.language=\u8a9e\u8a00 settings.config.language.choose=\u9078\u64c7\u8a9e\u8a00 settings.config.styles=\u98a8\u683c settings.config.styles.font.default=\u9810\u8a2d\u5b57\u578b settings.config.styles.font.note=\u97f3\u7b26\u5b57\u578b settings.config.styles.font.time-signature=\u62cd\u5b50\u8a18\u865f\u5b57\u578b settings.config.styles.font.printer-default=\u5217\u5370\u7528\u9810\u8a2d\u5b57\u578b settings.config.styles.font.printer-note=\u5217\u5370\u7528\u97f3\u7b26\u5b57\u578b settings.config.styles.font.printer-time-signature=\u5217\u5370\u7528\u62cd\u5b50\u8a18\u865f\u5b57\u578b settings.config.styles.color.score-note=\u4e94\u7dda\u8b5c\u97f3\u7b26\u984f\u8272 settings.config.styles.color.tab-note=\u516d\u7dda\u8b5c\u97f3\u7b26\u984f\u8272 settings.config.styles.color.play-note=\u64ad\u653e\u4e2d\u7684\u97f3\u7b26\u984f\u8272 settings.config.apply-changes-question=\u60a8\u8981\u73fe\u5728\u5957\u7528\u8b8a\u66f4\u55ce? settings.config.sound=\u8072\u97f3 settings.config.sound.soundbank=\u97f3\u6e90\u5eab settings.config.sound.default-soundbank=\u4f7f\u7528\u9810\u8a2d\u97f3\u6e90\u5eab settings.config.sound.custom-soundbank=\u4f7f\u7528\u81ea\u8a02\u97f3\u6e90\u5eab settings.config.sound.soundbank-restart-message=\u4f60\u9700\u8981\u91cd\u65b0\u555f\u52d5TuxGuitar\u4ee5\u4f7f\u97f3\u6e90\u5eab\u7684\u8b8a\u66f4\u751f\u6548 settings.config.main=\u4e00\u822c settings.config.main.window-title=\u8996\u7a97\u6a19\u984c settings.config.main.window-title.help=\u4e0b\u5217\u8b8a\u6578\u6703\u986f\u793a\u5728\u8996\u7a97\u6a19\u984c settings.config.main.window-title.var.description.appname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u9019\u500b\u7a0b\u5f0f\u7684\u540d\u7a31:TuxGuitar settings.config.main.window-title.var.description.appversion=\u9019\u500b\u8b8a\u6578\u4ee3\u8868TuxGuitar\u7684\u7248\u672c\u865f settings.config.main.window-title.var.description.filename=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u6a94\u540d settings.config.main.window-title.var.description.filepath=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u8def\u5f91 settings.config.main.window-title.var.description.songname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u540d\u7a31 settings.config.main.window-title.var.description.songauthor=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u4f5c\u8005 settings.config.main.window-title.var.description.songalbum=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u5c08\u8f2f settings.config.main.window-title.var.description.songartist=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u6f14\u594f\u8005 settings.config.main.options=\u9078\u9805 settings.config.main.splash-enabled=\u986f\u793a\u555f\u52d5\u6b61\u8fce\u756b\u9762 settings.config.styles.color.lines=\u6c34\u5e73\u7dda\u984f\u8272 settings.config.toolbars=\u5de5\u5177\u5217 soundbank.error=\u97f3\u6e90\u5eab\u932f\u8aa4 soundbank.error.unavailable=\u7121\u6548\u7684\u97f3\u6e90\u5eab\u932f\u8aa4 soundbank.error.custom=\u7121\u6cd5\u958b\u555f\u81ea\u8a02\u97f3\u6e90\u5eab settings.keybindings=\u71b1\u9375\u8a2d\u5b9a key-bindings-editor=\u71b1\u9375\u7de8\u8f2f\u5668 key-bindings-editor-action-select=\u9078\u64c7\u52d5\u4f5c key-bindings-editor-action-column=\u52d5\u4f5c key-bindings-editor-shortcut-column=\u6309\u9375 key-bindings-editor-push-a-key=\u8acb\u6309\u9375 key-bindings-editor-save-question=\u6709\u672a\u5132\u5b58\u7684\u8b8a\u66f4\uff0c\u662f\u5426\u5132\u5b58\uff1f key-bindings-editor-reserved-title=\u4fdd\u7559\u7684\u71b1\u9375 key-bindings-editor-reserved-message=\u62b1\u6b49\uff0c\u9019\u500b\u71b1\u9375\u5df2\u88ab\u4fdd\u7559 key-bindings-editor-override=\u9019\u500b\u71b1\u9375\u5df2\u88ab\u4f7f\u7528\uff0c\u78ba\u5b9a\u8981\u4f7f\u7528\uff1f print.print=\u5217\u5370 print.dialog=\u5217\u5370 print.service=\u670d\u52d9 print.service.name=\u540d\u7a31 print.service.status=\u72c0\u614b print.service.type=\u985e\u578b print.service.info=\u8cc7\u8a0a print.range=\u7bc4\u570d print.range.all-pages=\u5168\u90e8 print.range.pages=\u9801\u9762 print.range.pages-to=\u5230 print.copies=\u8907\u5370 print.copies-number=\u4efd\u6578 print.print-to-file=\u5217\u5370\u5230\u6a94\u6848 print.file-chooser=\u9078\u64c7 print-header.default-song-name=\u672a\u547d\u540d print-header.default-song-author=\u4e0d\u8a73 print.preview=\u9810\u89bd\u5217\u5370 view.layout.score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c view.show-transport=\u986f\u793a\u6642\u9593\u8ef8 composition.clef=\u8b5c\u865f composition.clef.treble=\u9ad8\u97f3\u8b5c\u8a18\u865f composition.clef.bass=\u4f4e\u97f3\u8b5c\u8a18\u865f composition.clef.tenor=\u6b21\u4e2d\u97f3\u8b5c\u8a18\u865f composition.clef.alto=\u4e2d\u97f3\u8b5c\u8a18\u865f composition.clef.to-the-end=\u5957\u7528\u9019\u500b\u8b5c\u865f\u5230\u7d50\u5c3e composition.keysignature=\u8abf\u865f composition.keysignature.natural=\u9084\u539f composition.keysignature.sharp-1=\u53471 composition.keysignature.sharp-2=\u53472 composition.keysignature.sharp-3=\u53473 composition.keysignature.sharp-4=\u53474 composition.keysignature.sharp-5=\u53475 composition.keysignature.sharp-6=\u53476 composition.keysignature.sharp-7=\u53477 composition.keysignature.flat-1=\u964d1 composition.keysignature.flat-2=\u964d2 composition.keysignature.flat-3=\u964d3 composition.keysignature.flat-4=\u964d4 composition.keysignature.flat-5=\u964d5 composition.keysignature.flat-6=\u964d6 composition.keysignature.flat-7=\u964d7 composition.keysignature.to-the-end=\u5957\u7528\u9019\u500b\u8abf\u865f\u5230\u7d50\u5c3e composition.tripletfeel=Triplet Feel composition.tripletfeel.none=No Triplet Feel composition.tripletfeel.eighth=Triplet 8th composition.tripletfeel.sixteenth=Triplet 16th composition.tripletfeel.to-the-end=\u5957\u7528\u9019\u500btriplet feel\u5230\u7d50\u5c3e track.clone=\u8907\u88fd\u97f3\u8ecc track.move-up=\u4e0a\u79fb track.move-down=\u4e0b\u79fb marker=\u6a19\u8a18 marker.add=\u52a0\u5165\u6a19\u8a18 marker.list=\u6a19\u8a18\u5217\u8868 marker.first=\u81f3\u9996\u6a19\u8a18 marker.last=\u81f3\u672b\u6a19\u8a18 marker.next=\u4e0b\u4e00\u500b\u6a19\u8a18 marker.previous=\u524d\u4e00\u500b\u6a19\u8a18 export.tablature-enabled=\u986f\u793a\u516d\u7dda\u8b5c export.score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c scale=\u97f3\u968e scale.list=\u97f3\u968e\u5217\u8868 ######################### ### Tool Bar Items ### ######################### file.items=\u6a94\u6848 edit.items=\u7de8\u8f2f property.items=\u5c6c\u6027 track.items=\u97f3\u8ecc duration.items=\u97f3\u9577 beat.items=\u97f3\u7b26 composition.items=\u66f2\u76ee repeat.items=\u53cd\u8986 transport.items=\u64ad\u653e\u5668 marker.items=\u6a19\u8a18 insert.items=\u63d2\u5165 layout.items=\u7248\u9762 view.items=\u6aa2\u8996 effect.items=\u6548\u679c dynamic.items=\u529b\u5ea6 ######################### ###Key Binding Actions### ######################### action.file.new=\u958b\u65b0\u6a94\u6848 action.file.open=\u958b\u555f\u820a\u6a94 action.file.save=\u5132\u5b58\u6a94\u6848 action.file.save-as=\u53e6\u5b58\u65b0\u6a94 action.file.print=\u5217\u5370 action.file.print-preview=\u9810\u89bd\u5217\u5370 action.edit.undo=\u4e0a\u4e00\u6b65 action.edit.redo=\u4e0b\u4e00\u6b65 action.composition.change-time-signature=\u8b8a\u66f4\u62cd\u5b50\u8a18\u865f action.composition.change-tempo=\u8b8a\u66f4\u7bc0\u62cd action.composition.change-info=\u8b8a\u66f4\u6b4c\u66f2\u8a0a\u606f action.composition.change-clef=\u8b8a\u66f4\u8b5c\u865f action.composition.change-key-signature=\u8b8a\u66f4\u8abf\u865f action.view.layout-set-page=\u7e31\u5411\u5ef6\u4f38\u7248\u9762 action.view.layout-set-linear=\u6a6b\u5411\u5ef6\u4f38\u7248\u9762 action.view.layout-set-multitrack=\u591a\u8ecc\u7248\u9762 action.view.layout-set-score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c action.view.show-fretboard=\u986f\u793a\u6307\u7248 action.view.show-piano=\u986f\u793a\u7434\u9375 action.view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668 action.view.show-transport=\u986f\u793a\u6642\u9593\u8ef8 action.track.add=\u65b0\u589e\u97f3\u8ecc action.track.remove=\u79fb\u9664\u97f3\u8ecc action.track.clone=\u8907\u88fd\u97f3\u8ecc action.track.go-first=\u5230\u7b2c\u4e00\u8ecc action.track.go-last=\u5230\u6700\u672b\u8ecc action.track.go-next=\u5230\u4e0b\u4e00\u8ecc action.track.go-previous=\u5230\u4e0a\u4e00\u8ecc action.track.lyrics=\u7de8\u8f2f\u97f3\u8ecc\u6b4c\u8a5e action.track.properties=\u8b8a\u66f4\u97f3\u8ecc\u5c6c\u6027 action.measure.add=\u589e\u52a0\u5c0f\u7bc0 action.measure.remove=\u79fb\u9664\u5c0f\u7bc0 action.measure.copy=\u8907\u88fd\u5c0f\u7bc0 action.measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0 action.measure.clean=\u6e05\u9664\u5c0f\u7bc0 action.measure.go-first=\u5230\u7b2c\u4e00\u5c0f\u7bc0 action.measure.go-last=\u5230\u6700\u5f8c\u5c0f\u7bc0 action.measure.go-next=\u5230\u4e0b\u4e00\u5c0f\u7bc0 action.measure.go-previous=\u5230\u4e0a\u4e00\u5c0f\u7bc0 action.note.general.clean-beat=\u6e05\u9664\u62cd\u9ede action.note.general.decrement-semitone=\u6e1b\u5c11\u534a\u97f3 action.note.general.increment-semitone=\u589e\u52a0\u534a\u97f3 action.note.general.shift-down=\u4e0b\u79fb action.note.general.shift-up=\u4e0a\u79fb action.note.general.tied=\u589e\u52a0/\u79fb\u9664 \u9023\u7d50\u97f3 action.note.duration.change-dotted=\u589e\u52a0/\u79fb\u9664 \u9644\u9ede action.note.duration.change-double-dotted=\u589e\u52a0/\u79fb\u9664 \u96d9\u9644\u9ede action.note.duration.change-division-type=\u589e\u52a0/\u79fb\u9664 tupleto action.note.effect.change-vibrato=\u589e\u52a0/\u79fb\u9664 \u9707\u97f3 action.note.effect.change-bend=\u589e\u52a0/\u79fb\u9664 \u63a8\u5f26 action.note.effect.change-slide=\u589e\u52a0/\u79fb\u9664 \u6ed1\u5f26 action.note.effect.change-hammer=\u589e\u52a0/\u79fb\u9664 \u5782/\u52fe\u5f26 action.note.effect.change-accentuated=\u589e\u52a0/\u79fb\u9664 \u91cd\u97f3 action.note.effect.change-dead=\u589e\u52a0/\u79fb\u9664 \u60b6\u97f3 action.note.effect.change-fade-in=\u589e\u52a0/\u79fb\u9664 \u6de1\u5165 action.note.effect.change-ghost=\u589e\u52a0/\u79fb\u9664 \u5e7d\u9748\u97f3 action.note.effect.change-grace=\u589e\u52a0/\u79fb\u9664 \u88dd\u98fe\u97f3 action.note.effect.change-harmonic=\u589e\u52a0/\u79fb\u9664 \u6cdb\u97f3 action.note.effect.change-heavy-accentuated=\u589e\u52a0/\u79fb\u9664 \u5f37\u91cd\u97f3 action.note.effect.change-palm-mute=\u589e\u52a0/\u79fb\u9664 \u624b\u638c\u60b6\u97f3 action.note.effect.change-popping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u52fe\u5f26 action.note.effect.change-slapping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u64ca\u5f26 action.note.effect.change-staccato=\u589e\u52a0/\u79fb\u9664 \u65b7\u97f3 action.note.effect.change-tapping=\u589e\u52a0/\u79fb\u9664 \u9ede\u5f26 action.note.effect.change-tremolo-bar=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u63a7\u5236\u689d action.note.effect.change-tremolo-picking=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u64a5\u594f action.note.effect.change-trill=\u589e\u52a0/\u79fb\u9664 \u986b\u97f3 action.insert.open-repeat=\u958b\u59cb\u53cd\u8986\u5340\u6bb5 action.insert.close-repeat=\u7d50\u675f\u53cd\u8986\u5340\u6bb5 action.insert.chord=\u63d2\u5165\u5408\u5f26 action.transport.play=\u64ad\u653e action.transport.stop=\u505c\u6b62 tuxguitar-src-1.2/TuxGuitar/share/scales/scales.xml0000644000175000017500000004765711273045225022053 0ustar julianjulian tuxguitar-src-1.2/TuxGuitar/share/help/about.html0000644000175000017500000001057011273045225021515 0ustar julianjulian

TuxGuitar project: About

Description:

TuxGuitar is a multitrack tablature editor and player written in Java unsing SWT Graphic libraries. It is multi-platform application, available for Linux, Windows, MacOS, FreeBSD and other operating systems. TuxGuitar is open source software, released under the GNU Lesser General Public License.

Website

You should check TuxGuitar project website on http://www.tuxguitar.com.ar

On the website exists a forum where you can find answers for almost all of your TuxGuitar related questions.

There is also a Wiki page on the webite.

Source repository

TuxGuitar source repository can be browsed on http://tuxguitar.cvs.sourceforge.net. From this CVS repository you can download and compile TuxGuitar "under development" version.

Contribution

If you have sufficient skills and some ideas, you are free to join the project.

You can also contribute by paying a small donation to the project. More details on the website (http://www.tuxguitar.com.ar/donate.html).

Authors


Julián Gabriel Casadesús

  • Project Admin
  • Developer
  • Web Page: http://www.herac.com.ar

Hernán Andrés Casadesús

  • Developer
  • Web Page: http://www.herac.com.ar

Nahuel Portilla

  • Developer

Nikola Kolarović

  • Developer
  • Documentation
  • Serbian translation

Aaron Spike

  • Developer
  • Web Page: http://www.ekips.org

Ersplus

  • French translation
  • Ersplus Icon Theme
  • Web Page: http://ersplus.free.fr/

Licnep

  • Blue Serious Icon Theme

Sascha Riemer

  • Lavender Icon Theme

Auria

  • CoreAudio service for MacOS

Tomasz Bojczuk

  • Polish translation

Jose Gato

  • Mac version

Thomas Thiel

  • Deutsch translation
  • Web Page: http://www.wolfchild.de

Sergio Abreu

  • Portuguese translation
  • Web Page: http://sitedosergio.sitesbr.net

Markon

  • Italian translation

Zdenek Kunicky

  • Czech translation

Máté Huszár

  • Hungarian translation

PTT Team

  • Chinese (Taiwan) translation
  • Web Page: http://www.ptt.cc

Shuo Huang

  • Chinese (GB) translation
  • Web Page: http://www.cucum.cn

Philippe Coval

  • Debian package maintainer
  • French translation
  • Web Page: http://rzr.online.fr/contrib.htm

Orcan Ogetbil

  • Fedora package maintainer

John Gustafsson

  • Swedish translation

Pietro Cerutti

  • FreeBSD port maintainer
  • Web Page: http://www.gahr.ch/

Facundo Corradini

  • Documentation
  • Web Page: http://www.corradiniestudioweb.com.ar

Gabe Hargrave

  • Documentation

Vadim Ipatov

  • Russian translation

Zoya Ignatova

  • Russian translation

Serge van Namen

  • Dutch translation

Yuriy Shakalov

  • Ukrainian translation

Xevi Noe i Nogueiras

  • Catalan translation

Jean-Pierre POULIN

  • Scales contributor
  • Web Page: http://www.jeanpierrepoulin.com/

Lobo

  • Basque translation
  • Web Page: http://www.myspace.com/lobotheguitardude
tuxguitar-src-1.2/TuxGuitar/share/help/edit_chord.html0000644000175000017500000001742211273045225022512 0ustar julianjulian

Chord Editor dialog

This is a dialog that allows you to get a chord based on it’s theory, recognize a chord based on the tab, memorize or get a chord from a library, and few more things. This is also the only way to add a chord name or/and diagram in the tab.

 The Dialog

As you can see chord dialog consists of many things, but is still easy to use. Nevertheless, every feature of the dialog will be explained here.

Opening the dialog

When you open the dialog by clicking on it’s icon (or hitting “A” key as shortcut), the first thing you will notice is that the notes from your tab are now in the chord dialog editor, the chord is recognized according to the theory and you can hear the sound preview of it.

Editor

In editor you can compose your own chord by simple drawing. You should first choose the starting fret with the slider on the right side of the editor and then put the black dots on the frets. Clicking above the line on the editor changes the note between the “empty-string” (white dot) or “don’t play this string” sign (marked with X). The span of the editor is 5 frets, but you will have to admit that you rarely play chords by stratching the fingers to 6-fret span. :)

While you are “drawing” the chord, it will constantly be recognized, which can be seen in recognizer window.

After composing your chord you can save it to library, or simply press OK and add it to tab.

Chord

This bunch of controls is used to compose a chord based on it’s name (theory).

You should first choose chord root, either in sharp or flat. Then you should choose chord flavor (major, maj7, sus2, sus4...).

Next, you can alterate the chord. You can make /9 chord (adds b7 and 9 tones), /11 chord (adds b7, 9 and 11 tones) and /13 chord (adds b7, 9, 11 and 13 tones). By enabling the “add” checkbox you get the “add” chord (which means add13 chord has only 13 note, without b7, 9 and 11).

You can modify the selected alteration with +/- control, and other alterations with appropriate +/- box (rightmost of the Chord controls).

On the bottom of chord controls is a bass note. If you choose a different bass note than the chord root you will get so-called inverted chord.

Proposals

Based on the chosen chord theory, you will get proposals for the fingerings. On the proposal thumbnails you can see the chord position and the fingering. The chord proposals are generated and sorted, so don’t be too dissapointed if you don’t see your favourite chord on the second position.

On the other hand, proposals are generated for any tunning and any criteria the same way. You may be surprised when it digs some convenient fingering for a chord you had trouble with.

After you click on the proposal, it will appear in editor, it’s name would be written and you should hear the way it sounds.

Name

The title of the chord is changed every time you choose one of the proposals. The chord name isn’t displayed while you edit the chord because you would loose the chord name you typed in the first place.

Recognized

The recognized window contains the proposals of the chord title, according to the theory. Besides the chord name you will see the probability of a chord. The probability is less when a chord is missing some tone to be complete.

When you click on an item in recognition window, the chord controls should change based on the chord you chose, it’s name will be displayed in title window, and the proposals of more fingering positions should be generated below.

Library

When you compose a convenient chord, you can add it into library. Once added, it can be accessed outside the chord dialog - by clicking on the arrow besides Chord Editor icon in the toolbar. When you add a chord to a tab that way, it’s name and/or diagram will be displayed in the tab.

In Chord Editor dialog you can manipulate the library list: add, rename or remove chord from a library.

Settings

In the Settings dialog are some options which can customize and improve the chord proposal assembly process.

 Chord Settings

Chords to display is the number of the best chord proposals to be considered into proposal list. Note that this number of proposals wouldn’t be displayed, because the very similar fingerings (like x02210 and x0221x for Am) will not be included.

Chord type is a very important property. Besides the “Most common” chords, here you can choose between “Open-voiced chords“, “Closed-voiced chords” and “Chord inversions“. While chord inversions mean that the bass note isn’t the root note of the chord, open- and closed-voiced chords are a little bit more specific: closed voice have tones very close (tonically) to each other, while open-voiced tend to distribute the notes of the chord in different octaves.

Open chords include empty strings into chord composition, so you get “open chords”. For example, famous “Hendrix chord” is an open chord ( 076780 ). Open chords are another chord type, but can be used in combination with any of them.

Search frets is an option for you if you are looking for a chord on a specific position. Normally all the chords from fret 0 to fret 15 will be proposed, but you can narrow (or expand!) the search by modifying the starting and ending fret. If open chords is selected, zero-fret will be included in the search, too.

By clicking on the OK button your changes will be applied, but they won’t be remembered next time you run TuxGuitar.

Chord layout

When you insert a chord it will be displayed on the main tab view. There are two different views of a chord, plus mixed one. It is changed in the main menu, checking one or both of the items from Layout→Chord_Style.

You can view the chord as a diagram (where to put the fingers), only its name (entered in the library), or both.



tuxguitar-src-1.2/TuxGuitar/share/help/edit_effects.html0000644000175000017500000004577611273045225023047 0ustar julianjulian

Note effects

As you already know, playing guitar (and any other instrument) isn’t just playing the notes in the right duration and dynamics. There are several “tricks” that are unique for any instrument. TuxGuitar supports effects specific for guitar and bass guitar.

Almost all note effects have an icon on the toolbar, but also can be accessed in Note→Effects menu. The effect is applied on the current cursor position.

 Effects toolbar

Dead note

Dead note (sometimes referred as rake) is a playing effect which produces more of a percussive effect than a regular note with it’s pitch. Dead note has short and “clicking” sound. It is used very often by guitar players.

Because of the MIDI standard, all MIDI tab editing applications (Guitar Pro, Tabledit, TuxGuitar...) have a little bit different dead note implementation - it is not exactly dead. It is short, it is percussive, but you can adjust the pitch of the dead note.

So in TuxGuitar, if you put a dead note in the scores it will be heard like a muted zero-fret string. If you put a regular fret value and mark that note as dead, it will become a dead note, but will retain the previous pitch.

Dead note is marked with “X” sign in the tab.

Ghost note

Ghost note is effect that changes note’s dynamics (loudness) to more quiet. The difference between the Ghost note and lesser dynamics is seen only visually, while it sounds the same.

Ghost note is marked by a note between parentheses ( ).

Accentuated and heavy accentuated note

Like Ghost note, these effects change note’s volume. Accentuated note gives it a little louder dynamics, and heavy accentuated note makes the note even louder.

Accentuated note is marked with a “>” sign, and heavy accentuated with “^” sign.

Harmonics

Guitar harmonics are somewhat special note effect, because the result is a note with different pitch.

After you choose harmonics effect, a dialog would appear. You are able to choose between artificial, pinched, tapped and semi harmonics.

If you wrote a note on fret 3,4,5,7,9,12,16,19... you will get the option to choose the Natural harmonic effect. It would sound like natural harmonic on the same fret and string.

Otherwise, if you choose artificial, pinched, tapped or semi harmonics, you should choose a value from the combo box on the bottom of the dialog. If you chose artificial harmonic, you would be able to choose between these values:

A.H(12) artificial harmonic one octave (12 frets) higher than the original note
A.H(9) artificial harmonic two octaves+major third (28 frets) higher than the original note
A.H(5) artificial harmonic two octaves (24 frets) higher than the original note
A.H(7) artificial harmonic octave+fifth (19 frets) higher than the original note
A.H(4) artificial harmonic two octaves+major third (28 frets) higher than the original note
A.H(3) artificial harmonic two octaves+fifth (31 frets) higher than the original note

Note that A.H(4) and A.H(9) sound the same... The number besides denotes the “fret offset” between the original note and the harmonic “hot spot”.

The difference between artificial, pinched and tapped harmonics is only in the playing technique, but semi-harmonics even sound different on TuxGuitar - you can hear the original note along with the harmonic note.

Grace note

Grace note is a music ornament. You can hear it very often in music, and it sounds like an attempt to play a note as short as possible. Grace notes in tabs are displayed smaller than the regular notes, and seem to have no duration. In sheet music grace notes are represented as a small note before a regular note, sometimes with a slash through the note stem.

In TuxGuitar grace note can be applied on a position where a note already exists. Choosing to insert a grace note brings you the grace note editor dialog.

Grace note editor dialog

On guitar, grace notes are most usually played on the same string as the ordinary note, so you will first want to enter the fret on which grace note is played. If you check a dead note, muted percussive note will be played instead. Select the position of the grace note. “Before beat” places your grace note before the ordinary note, which is played in exact time it is displayed in tab/scores. If you choose “On beat”, grace note will be played on beat and original note immidiately after grace note.

Next you can choose note duration. “As short as possible” is welcome, so 1/64 note is default, but you can also pick 1/32 and 1/16 note if it suits your needs. Dynamics of the grace note is also an important property. By default dynamics of a “normal” note is selected, but in editor dialog you can make grace note louder or more quiet than the succeeding note.

At last, you can choose type of the transition, which marks the playing style. The default transition is None, which marks no distinct transition. Other available transitions are Bend and Slide (which also effect the way note is heard), and also a Hammer to mark that grace note is played by hammer on-pull off technique.

If you have an existing grace note effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.

Vibrato

Vibrato is a note playing technique which makes the frequency (pitch) of a note oscilate a little bit in either direction (lower or higher). It makes the tone more colourful and accentuated. On guitar vibrato is played by slightly moving the finger upside-down or in left-right direction, which playes the sound in slightly higher pitch according to your moves.

In TuxGuitar vibrato effect has no special parameters - applying vibrato effect on a note will make a typical vibrato effect, and also mark the tone with the “vibrating waves” in the tab view.

Bend

String bending effect modifies the pitch of the played tone, but much more than vibrato effect. Most often the result of bending a note is gradual pitch shift to another note. By the nature of bending that note has higher frequency then the note on the same fret without bend, because you bend the string thus adding more tension to the string.

In TuxGuitar, applying a bend effect to the note opens the Bend Editor dialog, which allows you fine tuning of the bend, showing you exactly how much tension your finger should use. Of course, the result of your modification can be heard.

Bend editor

First, notice the listbox on the right of the dialog. Those are the presets which are most often used: bend, bend-release, bend-release-bend, prebend and prebend-release. Bend only makes gradual transition to the target note, while bend-release also returns it to the beginning note. Prebend is played when you first bend (add tension) to the string, and after that pick the string, so the first tone heard has higher pitch, and then gradually returns to the original note. You should notice that all the presets make bend 1 note (2 frets) higher, so you may need some intervention in the Editor to make the bend sound properly.

The Editor allows you fine bend tuning by drawing a graphic function of the bending amount (or pitch modulation/string tension). It works by placing dots in a diagram which are automatically connected with lines. The higher the dot is placed, the greater the bending amount will be. Notice that the diagram is separated horizontally with gray and red lines. Each full red line represents the pitch shift by 1 tone (2 frets), and each dashed red line represents the pitch shift by a semitone (1 fret). Gray line represents the pitch shift of 1/4 of a tone, which is 1/2 of a fret which is called a non-tempered note or “blue” note. The vertical blue lines divide the note duration on quarters, and dashed blue lines divide your note duration in 1/12 segments. You can place the dot only on intersection of a blue line and red/gray line. Left click places a dot, and right click on the dot removes it.

So the bend represented on the picture above is a complex one: the first peak is almost a 2-tone bend-release (it is a slight underbend, because it bends for 3.5 frets), the second one is a slight bend shift to one higher half-tone (1 fret) and back, and the third bends one whole-tone (2 frets) and stays there for a little while.

If you have an existing vibrato effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.

When any bend effect is applied to a note, in the note will be displayed with a curved arrow in the tab view.

Tremolo bar

Tremolo bar is a term in TuxGuitar for all the effects you can make with a guitar tremolo arm. It allows note pitch shift in both directions and with a higher range of modulation. With tremolo bar effect TuxGuitar can modify the original note very precisely with the modulation diagram, allowing the pitch change up and down whole octave (8 tones, 12 frets) from the original tone.

When you apply tremolo bar effect on a note, Tremolo bar Editor dialog appears, very similar to the editor for the Bend effect.

 Tremolo bar editor

There are some presets in the listbox placed on the right side of the dialog. Dip effect slowly lowers the pitch, and after returns back. The oposite effect is inverted dip which increases the pitch and returns back. Dive slowly lowers the pitch, but doesn’t return back. Opposite effect is return. Release up starts from the lower pitch and gradually returns to the original tone. Release down also ends at the original tone, but starts at higher pitch. Note that all the presets have pitch offset of 1 tone (2 frets), so you might need to modify the tremolo bar diagram to get the desired effect.

Tremolo bar diagram editor consists of red and gray horisontal lines. Each red line represents one whole tone pitch offset (2 frets), and gray one semitone offset (1 fret). It is important to notice the black horisontal line in the middle: that is frequency of your original tone (to which you applied the effect). There are 6 red lines in both directions from the black line, which means you can modify the original pitch up and down 8 tones (12 frets). Vertical blue lines separate the tone duration into small pieces. You can place the dot only on intersection of a blue line and red/gray line. Left click places a dot, and right click on the dot removes it.

So the tremolo bar represented on the picture above is a complex one: first tremolo bar increases the pitch by one tone (2 frets), returns back to the original tone, quickly increases to +2 tone offset (4 frets) and then dives and dives until the tone is one octave (12 frets) lower than the original one.

If you have an existing tremolo arm effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.

When tremolo arm effect is applied to a note, besides the note in the tab view will be displayed an “x” with an arrow pointing down.

Slide

A slide is a guitar technique where the player sounds one note, and then moves (slides) their finger up or down the fretboard to another fret. If done properly, the notes between should also sound.

In TuxGuitar slide connects the current note with the next note on the same string. Then in tab view you can see a line connecting two notes (upwards or downwards).

Hammer on / Pull off

Hammer on and pull off are playing techniques which assume playing another note on the same string but without picking a string again. Heavy usage of hammer on/pull off in a short period is often refered as legato style. Hammer on refers to the transition between a previous note and a note with a higher pitch. Pull off is exactly the opposite, transition between a previous note and a note with a lower pitch.

In TuxGuitar hammer on and pull off are treated and displayed as the same effect. When you apply the effect, a connecting arc will be displayed between the current note and the next note on the same string, which marks that notes should be played with hammer on/pull off technique.

Trill

A rapid series of hammer-ons and pull-offs between a single pair of notes is called a trill. So you can write all the trills manually, but TuxGuitar has the trill editor, which sometimes reduces the writing time.

Trill effect is applied on an existing note, which is considered the first note in a trill. Then the trill editor appears and allows you to choose the second note, and a duration between the hammer-ons and pull-offs. If there is existing trill effect and you select Clear on the trill editor, the effect will be removed.

Trill effect is marked in a tab with “tr” mark and a wave along the note duration.

Tremolo picking

Tremolo picking means that the same note is picked in a rapid manner.

So it would be the same if you write dozens of notes by yourself or use a tremolo picking effect, but if you apply the effect the tab will look nicer and it may save some time. Applying the tremolo picking effect on a current note will bring the tremolo picking editor, which allows you to choose how frequently it will be picked. If you already have a tremolo effect and click on “Clean” in the editor, the effect will be removed.

Tremolo picking effect is marked with three diagonal lines (≡) in scores or tab.

Palm mute

Palm mute is an effect which is produced by placing the palm of a picking hand across the strings very close to the bridge. The strings retain their pitch, but the sound is more or less muted.

In TuxGuitar you can apply a palm mute effect on any note. It is removed the same way.

Palm mute effect is displayed with “P.M.” sign in scores or tab.

Staccato

Staccato is a playin technique where the player plays in a distinctive, “hopping” manner, trying to make note duration shorter than it should be normally.

In TuxGuitar staccato effect makes the note duration 50% of its original duration. When staccato effect is applied, a dot shows up above the note in the scores view. When applied again, it is cleared.

Tapping

Tapping is a guitar playing technique used more often on electric instruments. It is played using both hands on the fretboard, with a picking hand making hard hammer-ons and pull-offs.

In TuxGuitar tapping has no effect on note. Instead, it just marks the tone which should be tapped with a picking hand. Tapped note is marked with a letter “T” above tapped note. Tapped notes can be combined with a slide, bend or hammer on/pull of if you need.

Slapping and popping

Slapping and popping are techniques most commonly used on bass guitar. Slapping assumes hitting a string with the thumb of the strumming hand near the base of the guitar’s neck. Popping is often combined with slapping, and assumes snapping the strings (usually) with the index or middle finger of the same hand.

In TuxGuitar both slapping and popping don’t really affect the sound, but only mark the style of playing. Above the slapping notes letter “S” is placed, and above popping letter “P“.

Fade in

Fade in is an effect which gradually increases the volume of a note, from zero to the current volume (depends on note dynamics). The effect is applied to each note independantly, and cleared in the same way. Note with a fade in is marked with a “<” sign above the tab.



tuxguitar-src-1.2/TuxGuitar/share/help/edit_matrix.html0000644000175000017500000000365111273045225022716 0ustar julianjulian

Matrix Editor

Matrix Editor is a useful tool for editing the percussion tracks. It can alse edit the ordinary tracks, but it is much less useful. It is accessed by Layout→Show_Matrix menu.

Basically, it divides the current measure into segments and displays the possible percussion sounds. Not only you can view the measure and the sounds in the matrix, but by clicking on one block of the matrix you add/remove the sound from the tab.

It is very important to remember that Matrix Editor does not “lock” the main TuxGuitar window, which means you can use Note duration and Note dynamics icons from the toolbar, and change the current measure/instrument as well.

You can also change the current measure with left/right arrows in the top-left corner of the dialog, and the note duration by the note duration up/down arrows (between the arrows is current note duration).

Number of grids value in the dialog helps you to determine the position where you should click - it divides one basic duration (denominator of Time Signature) into number segments.

Border on the top and the bottom of the Matrix Editor view component (black on the picture) marks your current cursor position - which does not affect your clicking, only writing the numbers in the tab.

The hammer icon on the top-right corner of the dialog opens the settings for the Matrix Mixer. There you can adjust colours and font of the Matrix Editor dialog.



tuxguitar-src-1.2/TuxGuitar/share/help/editing_song.html0000644000175000017500000002443611273045225023062 0ustar julianjulian

Editing a whole song

Song is consisted out of tracks, so when you are editing a song most of the time you edit the tracks, one by one, which is explained in the Editing a track section. But there are some options that affect the song as a whole.

Managing the tracks

Each song consists out of one or more tracks. In any moment you can add or remove track, create new one by copying contents of the selected one (clone track). If you want to add a percussion track, you have to check the Percussion Track box in the Track Properties.

All the tracks are displayed in the instrument list, located on the bottom of the application window. You can rearrange the order of the instruments on that list by choosing Track/Move Up-Down from the main menu. If you double-click on the instrument name on the list, Track properties dialog will appear, where you can modify instrument, track name, colour and tunning.

Mixer dialog:

Mixer dialog can be accessed by choosing Layout/Show mixer from the main menu, or by clicking on the icon in the toolbar (in the middle on the picture below).

The most insteresting feature of the Mixer dialog is adjusting volume for each track (to be more precise: for each MIDI channel).

You can also set pan for each track - balance between left and right speaker.

In Mixer dialog you can choose to Mute (turn off) a specific instrument, and also to play only single instrument by choosing Solo.

Metronome is also placed in Mixer dialog. By clicking on the button you enable and disable it - it is played with each beat determined by denominator in song’s time signature (e.g. metronome will go in every 1/8 for 7/8 key signature).

Changing volume or instrument in the middle of a song is still unsupported by TuxGuitar, but it most probably will in some later versions.

Choosing the channels:

There are some numbers in combo boxes on the mixer dialog - those are channels for the track.

To understand the way of distributing channels properly, you have to know something about MIDI specification.

MIDI uses channels to play music - each channel has currently assigned instrument (voice). There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.

For example, to be able to play a dead note and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its Channel (marked green on the picture above), but also needs the Effect channel (marked orange on the picture above). Because there are only 16 channels it leads you to conclusion that you cannot have more than 7 instruments (tracks) and a percussion in TuxGuitar. That is not true.

It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.

Effect channel

Effect channel is used in certain occasions. One ocasion is when two different voices are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone.

The other occasion effect channel is used is when you apply some pitch effect (like bend, slide, vibrato or tremolo bar) on some of the notes played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide and bend effect in the exact same time in TuxGuitar (but also on real guitar :).

How to overlap channels?

The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that mixer settings (volume, pan and solo/mute) would have the same value for both the instruments (tracks).

You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes in the same time.

Composition properties:

You don’t want your transcription to be distributed in cyberspace without any credits. :)

By selecting Composition/Properties from the main menu or clicking on appropriate icon you invoke dialog that containst information about the current song.

Every song should have name, author and transcriber set, both for archiving and printing purpose. Read more details.



tuxguitar-src-1.2/TuxGuitar/share/help/editing_track.html0000644000175000017500000003030311273045225023206 0ustar julianjulian

Editing a track

Each song consists of one or more tracks.

Each track is assigned to one instrument. Each instrument sounds the different way.

Before you start with notes:

Before you start inserting notes into a new song, you have to adjust some settings. These are accessed through Composition menu.

Time signature has to be defined for each song. Usually it is 4/4, but sometimes it has some different value (3/4 for waltz, 7/8, etc.) Time signature applies for all the tracks. It can be changed in the middle of the song - when you change the value time signature will be changed from the current place in the song until the end.

Tempo is another value each song possess. It indicates how many beats (1/4 notes) song has in a minute - it is marked in BPM’s - Beats Per Minute. Tempo also applies for all the tracks in the song, and also can be changed. When you change the value tempo will be changed from the current place in the song until the end.

Clef affects the song display in scores. Clefs are used to mark the specific pitch of the note, so all other notes’ pitch can be determined. Clef is placed on the beginning of the scores. There are three types of clef supported in TuxGuitar: treble (default), bass, alto and tenor, which are the most usual clefs. Custom clefs are not supported. Clef can be changed in the middle of the song - when it’s changed the scores display changes from that position and further.

Key signature affects the way the notes are written in scores. They represent the current scale the song is written in, so there’s no need to constantly write sharp and flat marks. When you choose to change the key signature, dialog appears with existing key signatures. Natural, for example, represents the C-major, one flat represents F-major, etc.

Triplet feel (also: shuffle notes or swung notes) is the rhythmic device in which the duration of the initial note in a pair is augmented and that of the second is diminished. This effect is often used in jazz and blues music. TuxGuitar triplet feel divides the note par in 2:1 ratio. Triplet 8th divides a pair of 1/8 notes and Triplet 16th divides a pair of 1/16 notes into 2:1 ratio.

Track properties

Track properties are the most important and should be adjusted for each track: track name, display color, instrument (from the list of instruments), number of strings and tuning. You can access this dialog by choosing Track/Properties in the main menu.

Putting the notes in:

Note and measure duration

The most important property of a note is its duration. The sum of duration of all the notes in a measure is determined by the measure’s time signature. TuxGuitar has a system that protects the user of making an irregular measure (longer or shorter).

Therefore, every new 4/4 measure can contains only one whole note. When you select a duration of a note you want to enter, TuxGuitar adjusts all the pauses between the current position and the end of a measure (or the next note entered) so you can insert as many notes as possible.

You can change time signature in Composition→Time signature (or on 4/4 icon), and note duration in menu Note→Duration→(wanted duration). Note duration icons are also located on the main application toolbar.

Navigating

You can change the current position of a note you want to enter by clicking on the desired location, or by navigating with arrows of a keyboard. Simply pressing the arrows left and right puts you on the next note in the current track, but Ctrl+(left or right) takes you to the previous or next measure.

Arrows up and down navigate you through the strings in tablature editor.

Writing numbers

Tablature editor is represented by the number of the strings instrument possess. Each line is a string - when you type a number on a string [0 .. 29] editor puts on that string a note which is heard if you press a string on typed fret. The note has selected duration and dynamics you can modify afterwards.

If you navigate to an existing note (written as a number) and press Shift+(left or right) you will increase/decrease the pitch (fret) on the current string. If you press Shift+(up or down) you will move the fret value to the string up or down.

Clicking on the scores

To be able to insert notes by clicking on the scores, you should be in the Score Edition Mode (you can change mode in Edit menu). When Score Edition Mode is enabled, you can check and uncheck the Sharp/Flat mode (in Edit menu, also) by which you can insert sharp notes.

Notes are inserted by left-clicking on the score’s line or between two lines. If you decide to write notes above or below five existing lines, aditional lines will appear. By clicking a note will appear on the selected place, and also in the tablature editor by appropriate number on appropriate string.

Note dynamics

Very important property of a note is it’s dynamics: the “loudness” of a note. For each note you can put wanted dynamics.

When you create a note, it will have dynamics previously selected. If you click on other dynamics’ icon when positioned on existing note, the note will change its dynamics. In TuxGuitar dynamics is marked in standard manner (mp for mezzo-piano, fff for forte fortissimo etc.)

Dotted and double-dotted note

Dotted note has extended duration by 50%. It means that if you mark a 1/2 note as dotted, its duration will be 1/2 + 1/4 = 3/4.

Double dotted note has duration extended by 75%. That means that 1/4 double dotted note will have duration of 1/4 + 1/8 + 1/16 = 7/16.

Tied note

When a note is played on the end of one measure but lasts in the next measure also, you have to use a tied note. You achieve the effect by putting the note on the end of a first measure and then put the same note on the beginning of next measure. Then you mark the second note as a tied note.

You can also use a tied note in the situation you need a note which has duration of a 5/16 note - a duration you cannot achieve by dotted or double dotted note. Then you tie a 1/4 and 1/16 note.

Insert chord

You can also put some notes into the song by inserting a chord. Chord’s duration and dynamics will be those currently selected.

You can insert a chord defined earlier (as on picture) or you can use chord wizard to generate a new chord (and even define a name for it for later use). Read more about Chord Editor dialog in other entry.

After putting the notes:

After writing the things you wanted, you will probably want to hear what’s done. After checking you will probably want to change something - listening and correction makes it perfect.

Effects

Playing guitar isn’t just playing a note in a right time. There are some little tricks we all use, like bend, palm mute etc. TuxGuitar supports most of them. Many effects are applied on the current note. Read more about Note effects in this help.

Repeat

Sometimes in a song all the instrument are played the same way several times (e.g. in chorus). It is more elegant to mark that segment of a song for repetition than to copy/paste that passage again.

Repeat is set over one or more measures. It has a beginning, an end and information how many times to repeat. So if you want a passage to be played twice, you start repeat and end it on appropriate place. When asked how many times to repeat you should set 1 if you want it to be played twice.

Repeats are even more convenient to use with alternative endings - you define different ending measures for each repeat. So after you close a repeat and mark it as an alternative ending the editor will appear to select at which repeats this ending will play. It is a little hard to explain, but if you try the option you will find it self-explanatory.

Lyrics

TuxGuitar supports writing lyrics in a track, so you can make a track which contains lyrics and the melody of singing. Lyrics editor is accessed by selecting Track/Lyrics from the main menu.

The way the lyrics will be displayed depends on the content of the measure. Every word seperated by space or enter belongs to one note in a measure.

You have to select the number of a measure where lyrics start. When you type text, it starts below the first note in a measure you have set, and after each space or enter key the next word is displayed below the next note. Pauses are ignored. When you type text below every note in a measure, the text automatically move to the next measure.

If you want to have some notes without a text below, you should put more space characters.

Text

Similar as lyrics, but the text is not tied to notes. It is most often used as a note to the player or a comment to tab. It is displayed above the note it is assigned to.

Just one instrument?

Well, probably not. But you have to write something to be able to write some more. You will probably want to add more instruments (tracks) and enter the wonderfull world of multi-track editing. :)

But even if you have only one track in a song, it is still a song. Song have some of its own properties and editing, so you should check section about editing a song.

The Percussion track

The track for drums and percussions is treated a little bit differently in TuxGuitar than the other, “ordinary” tracks. It always has to be on MIDI channel 9 - that is achieved by checking the Percussion Track option in the Track→Properties. There is a special tool for editing the percussion track - besides the usual editing (by entering numbers on the tab), you can also use the Matrix Editor from Layout→Show_Matrix menu. Read more about Matrix Editor.

tuxguitar-src-1.2/TuxGuitar/share/help/file_formats.html0000644000175000017500000000260011273045225023050 0ustar julianjulian

Supported file formats in TuxGuitar

Besides TuxGuitar’s own file format (with *.tg extension), TuxGuitar can work with various tablature and music file formats.

Tablatures

old Guitar Pro (.gtp) - load

Guitar Pro 3 (.gp3) - load and save

Guitar Pro 4 (.gp4) - load and save

Guitar Pro 5 (.gp5) - load and save

PowerTab (.ptb) - load

TableEdit (.tef) - load

LilyPond (.ly) - export

Music and sheet

MIDI (.mid) - import and export

ASCII (.txt) - export

MusicXML (.xml) - export

Adobe PDF (.pdf) - export



tuxguitar-src-1.2/TuxGuitar/share/help/index.html0000644000175000017500000000514511273045225021514 0ustar julianjulian
tuxguitar-src-1.2/TuxGuitar/share/help/license.html0000644000175000017500000006300311273045225022024 0ustar julianjulian

GNU Lesser General Public License

Version 2.1, February 1999

Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.

This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.

When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.

To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.

For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.

We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.

To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.

Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.

Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.

When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.

We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.

For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.

In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.

Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.

The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".

A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.

The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)

"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.

1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) The modified work must itself be a software library.

b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.

c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.

d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.

(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.

In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.

Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.

This option is useful when you wish to copy part of the code of the Library into a program that is not a library.

4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.

If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.

5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.

When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)

Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.

6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.

You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:

a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)

b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.

c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.

d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.

e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.

For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.

7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:

a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.

b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.

8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.

10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.

11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.

14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

TuxGuitar is a multitrack tablature editor and player.
Copyright (C) 2005, By Julián Gabriel Casadesús

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA



tuxguitar-src-1.2/TuxGuitar/share/help/start_first_steps.html0000644000175000017500000001074411273045225024170 0ustar julianjulian

The First Steps

Creating a new file:

The first thing you need to do is make sure you have a brand new file to work on. When you launch TuxGuitar, you should already have a blank tablature document ready for editing. However, if you need to start over with another blank document, all you have to do is click the “New” button (highlighted in red below).

Wow. That was easy. Now that we have blank document, we just need to set up our first track. Then the real fun can begin.

Preparing your first track for playback:

At the bottom of the screen, you should see a track list window that will look like the one below.

The track list is a very useful yet compact information center which provides quick access to many of the most important aspects of your song. There is a lot to be said about the track list, but we will not dig too deep into it right now, lest we should confuse newcomers. So for now, let it suffice to say that the track window will help us stay organized while we edit our tablature.

As you have probably noticed, there is already one track ready for you when you start a new tab document. You can just think of tracks as instruments. If you have a song with two guitars and one bassline that need transcribing, you will need three tracks. Fairly simple concept. It gets better though: as long as you have a soundbank installed for your Java Virtual Machine, each track will play back a sound when you play the file in TuxGuitar. Now, let’s get into setting this up, because as you can see, our first track wants to play back piano sounds, and we’re certainly not using TuxGuitar for piano.

So: double-click anywhere on “Track 1” or “Piano” to open the track properties dialog, as seen below.

Using The Track Properties Dialog:

The Properties dialog is where we will go to setup how we want each track to playback. There are three main sections in the Properties box, and they are laid out as follows (red boxes added for clarity):

#1: Name of the track:

Whatever you type in the box here is what will show up in the track list we looked at earlier. As you can see, we have named our track “Rhythm Guitar,” but you can name it anything you like. You can also set the color the track will display in the track list.

#2: Instrument (i.e.-the sound the track will play back):

This is the sound that your track will play back from your jvm soundbank. Most soundbanks have a plethora of sounds which go far beyond just guitars, so be as creative as you want. Don’t expect the sound quality to be too superb, though. In most cases, these sounds will be less than “realistic”. This is really only for referencing purposes. (It is possible to have this trigger other, possibly better sounds via the tuxguitar-alsa plugin, but that is a lesson for another day, and perhaps another author.)

You can also check “Percussion Track” to have it play drum sounds if you wish to include them in the tabs.

*A side note on the instrument settings section: If you are not able to change this setting, you probably have a soundbank problem. This issue has been covered in the TuxGuitar forums as well as in the main documentation, so check there for help.

#3: Tuning:

This one is pretty self-explanatory. You can set the number of strings for your instrument (i.e. 4 if you’re a bass player, 3 if you’re in The Presidents of The United States of America) and the tuning of the instrument, in case you use alternate tunings. It is important to make sure you have your tuning correct, or else the actual score staff of your tabs will be inaccurate, and nobody wants that.

Once you have everything set to your liking, click OK. Now, if you look at your track list again, you will see that your changes have taken affect. And with that, you are ready to start editing tabs with sound.



tuxguitar-src-1.2/TuxGuitar/share/help/start_playing.html0000644000175000017500000001162611273045225023266 0ustar julianjulian

Playing a song

Opening an existing song:

TuxGuitar currently supports several file formats. Besides its internal .tg format (which is recommended), it can open and play all Guitar Pro formats (.gtp, .gp3, .gp4, .gp5) and also a PowerTab format (.ptb).

You can open a file through File/Open dialog in TuxGuitar, but you can also assign a file type association in your operating system.

Another way to open a file is directly from an online resource, by using the File→Open_URL dialog. If you enter the correct URL of an online file TuxGuitar is able to open, you can view and play the file in the same manner as it is open from one of your folders. Of course, you cannot save the file back on the same URL, you can save it only as a local file.

Playback:

Using playback controls you can play, stop and pause the playback, but also you can navigate through the song (next/previous measure, beginning/end of a song). During the playback currently played note will be coloured in red, so it is easier to see how the current note is played.

You can also navigate through the song using the “transporter” in the bottom-right of the application window, which is the graphical represantation of a song’s tracks. It isn’t automatically scrolled during the playback, but using the scrollbar on the bottom of the screen you can view the whole song. You can access the wanted instrument and measure by clicking on the proper rectangle in the “transporter” widget.

The song can be navigated also with a “Show transport” option in Layout menu by which you can navigate through internal representation of a song, quickly getting on any position.

The current instrument can be changed by clicking on the instrument name in the bottom-left side of the application window. Display will be changed accordingly to view the wanted instrument’s notes.

Views:

During the playback you can change the current view.

There are two types of the view: page layout or linear layout.

Linear layout displays a track in a single line. It means that on the current sheet is read in the right direction, and the time is represented by the width of current display. Page layout displays a track as a page of a sheet - when the notes exceed width of the sheet display, they are displayed in the next line. So sheet is read in the direction from top to bottom, and time is represented by the heigth of the current display (in the case of single track view).

By enabling Multitrack view, in the same line of a layout will be displayed all the instruments. So if you use Linear layout and enable Multitrack view all the instruments will be one beneath each other, and played in the right direction. Using Multitrack view with Page layout can sometimes result in a pretty messy layout.

By enabling Show score options the scores will be displayed above the tabs.

By enabling Compact view you can make your tablature view more compact, if you consider it too wide.

Play Mode:

Simple Mode:

Simple mode allows the modified tempo during the playback. You can play and examine the song with half of the speed, 1% of the original speed or even with the up-tempo. It is achieved by changing the playback percentage to an arbitrary value (50% is half of the speed; 200% doubles the tempo).

Training Mode:

Training mode gives you the opportunity to practice with a gradual tempo incrementation. You can choose to start slowly, in only half of a tempo, but in every cycle of the tune to increase the tempo by 5%, getting to the full speed after 10 playbacks. You choose a beginning tempo, ending tempo and an increment (in percentage) that increases the tempo after each cycle.



tuxguitar-src-1.2/TuxGuitar/share/help/start_toolbars.html0000644000175000017500000003750211273045225023451 0ustar julianjulian

Understanding the toolbars

By default, you will notice quite a few toolbars lining the top of the screen, giving you one-click access to some of the most used options in TuxGuitar. While they can be a bit intimidating as a whole, they are actually quite simple when you break them down, and can save you a lot of time with some of the more common tasks associated with tablature editing. So let’s take a quick look at each of the toolbars. Pre-assigned keyboard shortcuts will be noted in parenthesis, but keep in mind: pre-assigned shortcuts can be re-assigned according to your own preferences, and most unanassigned options can be assigned via Settings > Configure Key Bindings.

*A side note on the toolbars–not only can you select which toolbars are visible by going to Settings > Configure TuxGuitar > Tool Bars, you can also change the order of them to better fit your own needs by clicking and dragging on the “handle” on the left side of each individual toolbar.

One last thing before we begin: prior knowledge of music theory is assumed on this page. There are a couple of links in the “Note Duration” section which can help you if you don’t know much theory yet, but to cover the actual “musical meaning” of all of these options would require an entire manual unto itself. This page will only explain the TuxGuitar-related functionality of the toolbars in an effort to avoid any long-winded music theory discussions.

File Management

You have seen and used this menu a million times, so we will not spend too much time on it. Basically, the file menu toolbar gives you the following options:

  • Create New File (Ctrl + N)
  • Open File (Ctrl + O)
  • Save File (Ctrl + S)
  • Save File As... (F12)
  • Print (Ctrl + P)
  • Print Preview

Nothing too complex here, so let’s move right along.

(These options and more can be accessed via the “File” pulldown menu at the top of the screen.)

Undo/Redo

Another very common set of options that pretty much explain themselves. The icon on the left will undo your last action (Ctrl + Z), and the icon on the right will redo what you have undone (Ctrl + Y).

(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)

Edit Mode (Applies only to Score Editing)

Now we’re getting a little more interesting. This menu lays down some options for those who prefer to edit via the score staff instead of using tablature. Keep in mind that these settings only affect the score staff (the upper set of lines with standard musical notation on them). If you only edit via the tablature staff, you can pretty ignore these settings, because they will not make any difference in your work flow.

(If your score staff is not visible, scroll down on this page and see the “Layout” menu.)

Selection Mode

Clicking on the first icon with the wrench on it will put you in Selection Mode. With this mode selected, you can click your mouse anywhere in the score staff, and it will simply move your playback cursor to that location, without making any changes to the score itself. Good for quickly moving around in your score without worrying about accidently altering notes.

Score Edition Mode

Clicking on the middle icon with the pencil on it will put you into Score Edition Mode. With this mode selected, you can enter notes into the score staff simply by clicking where you want the note to go. You can insert notes into lines or spaces, and they will take on the duration you currently have selected in the note duration toolbar (detailed below). One note: this option alone will only insert natural-pitched notes (i.e. no flats or sharps). If you want to insert sharps/flats or change pre-existing notes to sharps/flats, you will need to enter Sharp/Flat Mode.

Sharp/Flat Mode

Clicking on the icon with the sharp/flat symbol on it will take you into Sharp/Flat Mode. As stated above, Sharp/Flat Mode is simply a sub-option of Score Edition Mode. You have to use Sharp/Flat Mode if you want to enter sharp or flat notes or change pre-existing notes to sharp or flat.

(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)

Song Properties

While the Properties toolbar only really has one icon, it is of particular importance if you plan on printing or exporting your tabs at any point. Clicking on this icon will bring up your song properties tab, wherein you can set the following options:

  • Name (of song)
  • Artist (Performer)
  • Author (Copyright owner)
  • Album

The reason these settings are of such importance is that whatever you type in the Name and Author boxes will show up on the first page of your tabs when you print or export them, and if you leave them blank, you will simply get a big, fat “Untitled” by “Anonymous” instead. So make sure you set them if you plan viewing these tabs outside of TuxGuitar! The difference can be seen below.

(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)

Add/Remove Track

There comes a point in almost any song when one guitar is not enough. When you are ready to start entering tabs for another instrument, simply click the icon with the “+” sign on it to add a new track.

If you decide you don’t need a track, click on the icon with the “-” sign to remove it. The remove track button will remove the track that is currently selected (currently selected track will be highlighted gray in the track list at the bottom of the screen).

(These options and more (including a handy “Clone Track” option) can be accessed via the “Track” pulldown menu at the top of the screen.)

Note Duration

This is another fairly straight-forward toolbar. The first seven icons simply change the note(s) at the current cursor position to whatever you select, ranging from whole-note to sixty-forth-note. This comes in handy if you need to make a change that is more than one note increment (i.e. quarter-note to sixteenth-note). You can alternately use the +/- keys on a standard numeric keypad to move one increment at a time.

*A side note on the +/- keys: as of version .9, most laptop keyboards do not support the use of the =/+ key to decrease note duration. The developers are aware of this bug, and are working it out. The “-” key on laptop keyboards should work, just not the =/+ key.

The last three icons will change a note’s value to dotted, double-dotted, and a wide variety of “division type” values.

If you do not understand the difference between the various note durations, you may want to research it a bit before you begin editing tabs, as you may find yourself quickly getting lost. Any basic music theory guide should cover these topics. A good starting place (as always) is the wikipedia’s pages on music theory and music notation:

  • http://en.wikipedia.org/wiki/Music_theory
  • http://en.wikipedia.org/wiki/Modern_musical_symbols

(These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)

Note

This menu provides you with two more options concerning note editing.

Clicking on the first icon will “tie” the currently selected note to the one before it. This feature basically takes the value of two notes and combines them into one. The most common use for this feature is when you have a note that begins in one measure and ends in the next. Tying notes is really just a way of keeping the score clean and organized. If you need more information, you may want to research musical notation via the links above.

Clicking on the second icon with the “A7” will bring up the chord editor. The chord editor is a handy time-saving tool used to search, build, and insert chord formations into your tablature. While the chord editor does deserve further exploration, it is a topic best left for another page and another day.

(These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)

Composition

The Composition toolbar gives you a few options for setting the structure and meter of your song. Again, for a deeper explanation of what each of these means and how to fully utilize them, refer to the music theory links under the “Note Duration” section.

Clicking on the first icon with the question mark will allow you to set the tempo of your song. New songs in TuxGuitar default to 100 beats/min, but you can set your own tempo to anything between 30-320 beats/min. TuxGuitar also supports tempo changes throughout the song, and creating them is as easy as placing your playback cursor in the measure at which you want the tempo to change, and clicking on the icon. Any tempo set in the first measure of the song will be the default tempo either throughout the song, or until you set another tempo in any of the following measures.

Clicking on the next icon with the 4/4 graphic will bring up the time signature dialog, which is pretty straight-forward. You have a seperate pulldown menu for each half of the time signature, as well as a “To the end” check box. TuxGuitar supports multiple time signature changes throughout the song, and much like tempo changes, are as easy to create as clicking the icon and setting a new time signature in the measure where you wish it to change. Checking the “To the end” box will cause your newly-selected time signature to continue either to the end of the song, or until you manually change the time signature in any of the following measures. Unchecking the “To the end” box will cause the new time signature to span only the measure you add it to, after which it will automatically reset to the time signature used by the previous measure.

(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)

Next three icons are used for repeating control. Everyone familiar with music notation should be familiar with these - you can open and close repeating section. When closing, you will get a dialog to specify how many repeatings will occur. The last icon is used to mark alternative endings in the repeat. A special dialog will also occur, allowing you to choose in which cycle this ending will be played.

Transport

These are song playback controls. Buttons are for play/pause, stop playing, previous measure, next measure, beginning of the song and end of the track.

Markers

It is very useful to add a marker in a song, to mark some part of the song (verse, chorus, solo, etc.)

Marker controls on the toolbar allow you to create a marker, list the markers and navigate them (previous, next, first, last).

Layout

There are several layout types in TuxGuitar. They all change the view of tablature and scores in the main editor window.

The first button on the left is Page layout. It’s alternative is the second button: Linear layout. Page layout displays the tablature and scores like on the paper sheets, with the line breaks. On the other side, linear view views the instrument in a single line, expanding to the right.

The third button enables Multitrack view. When enabled, all the tracks will be displayed in the main window. Depending on your previous choice (Page or Linear layout) you will see different view. In personal experience, good combinations are Linear+Multitrack, and Page layout without multitrack (for single instrument view).

The fourth button is Show scores button. It simply views the scores (notation) above your tab line.

The fifth button is Compact view. You would like to enable it when you consider your view too wide.

View

These three buttons show you various windows.

The first button shows you the fretboard on the bottom of the main window. Fretboard is usefull to view the exact spots where you should put your fingers in each moment. You can even click on the fretboard to edit your tab. Fretboard view is available for both right- and left-handed guitars.

Second button shows Mixer. Mixer dialog is very important - there you can change the volume of instruments in your tab, mute/solo single instrument, change panning and assign MIDI channel. Read more about Mixer dialog.

The last button shows you player controller window, where you can control the song playback.

Effects

These effects are applied with editing cursor positioned on existing note in the tab. Selected effect is then applied to note.

Read more about note effects.

Dynamics

By selecting different icon than the current, you change the dynamics of the note you are editing. They gradually scale from Piano Pianissimo which is the most silent, to the Forte Fortissimo which is loudest.



tuxguitar-src-1.2/TuxGuitar/share/help/tools_converter.html0000644000175000017500000000516011273045225023631 0ustar julianjulian

TuxGuitar-converter



What is tuxguitar-converter

tuxguitar-converter is batch file format converter. It allows you to convert number of files from various file formats (*.gpX, *.ptb, *.tef, *.tg) into destination file format, keeping the file names but changing the format (and extension of a file).

Converter simply tries to load every file and save/export it into destination file.

So supported input formats are files TuxGuitar can load and import, and destination format is every format TuxGuitar can save into or export. You can check for supported file formats. For some exporter plugins that have various exporting options, default options are used.

How to install tuxguitar-converter

tuxguitar-converter plugin is included on all bytecode TuxGuitar distributions as default. If you downloaded a compiled TuxGuitar package, you shouldn’t bother to install it manually.
Of course you may want rebuild and install the plugin.

To install the plugin, you must copy tuxguitar-converter.jar into $TUXGUITAR_HOME\share\plugins

Using batch file format converter

You access the converter dialog through Tools→“File format batch converter”.

On the dialog you must specify input folder. Input folder and its subfolders contain files that will be converted.

Output folder is folder in which new files will be stored. If destination folder you specified doesn’t exist, it will be created.

Output file format is used to specify file format of new created files. It will display all supported formats (which might depend on your installed plugins).

After you confirm the converting new window will appear showing you the progress. You can cancel the process anytime.



tuxguitar-src-1.2/TuxGuitar/share/help/tools_keybinding.html0000644000175000017500000000230311273045225023741 0ustar julianjulian

Key bindings editor

Using key bindings editor you can change a shortcut for almost every action in TuxGuitar. It allows you to view and change default keybindings, as well to add new ones.

Key bindings editor dialog is accessed through Tools→Shortcuts menu.

The editor is a table you can modify. In the left column is the name and type of the action, and in the right one is the shortcut key combination. If you double-click on the combination cell, you will get the chance to insert or change the shortcut, or delete it with Clear button.

By clicking the Default button all of your modifications are reverted to the default keybindings for TuxGuitar. You can see the list of default keybindings.



tuxguitar-src-1.2/TuxGuitar/share/help/tools_plugins.html0000644000175000017500000000336711273045225023312 0ustar julianjulian

Plugins dialog

TuxGuitar supports plugins. Some of the plugins are delivered with the distribution, but there are plugins you can download and enable manually.

There are several types of the plugins:

  1. File Format plugins (PowerTab, Lilypond, MIDI, MusicXML) are included as default
  2. Sound plugins (ALSA, OSS, CoreAudio) are recommended depending of your OS.
  3. other plugins (like FTP browser, and any other)

The plugins dialog is accessed through the Tools→Plugins menu. In the dialog is the list of all plugins, with the checkbox enabled if the plugin is working at the moment. Some of the plugins can be configured with the Configure button. All of the plugins have their author info.

Plugins are single *.jar files. You can install any TuxGuitar plugin by simply copying it to the $TUXGUITAR_DIR\share\plugins\ folder and enabling it in the dialog.

Maybe the easiest way to contribute to TuxGuitar functionality is to write a plugin, because it doesn’t need synchronisation with the other TuxGuitar developers.

You can check the list of available plugins on TuxGuitar download page (other).



tuxguitar-src-1.2/TuxGuitar/share/help/tools_shortcuts.html0000644000175000017500000003243311273045225023663 0ustar julianjulian

Default key-bindings (shortcuts)

This is the list of the default key bindings (keyboard shortcuts) in TuxGuitar 1.0.

Of course, these key-bindings list can be modified in Tools->Shortcuts dialog.

Edit Actions

Action key
Undo action Ctrl+Z
Redo action Ctrl+Y
Song properties F5

Track Actions

Action key
View next track Ctrl+Down
View previous track Ctrl+Up
View last track Ctrl+Shift+Down
View first track Ctrl+Shift+Up
Add track Ctrl+Shift+Ins
Delete track Ctrl+Shift+Del

Measure Actions

Action key
Go to next measure Ctrl+Right
Go to previous measure Ctrl+Left
Copy measure Ctrl+C
Paste measure Ctrl+V

Beat Actions

Action key
Clean beat Ctrl+Del
Insert beat number 0-29
Delete beat/note Del
Tied note L
Dotted note *
Triplet note /
Insert text T
Move note on string above Shift+Up
Move note on string below Shift+Down
Increase note pitch Shift+Right
Decrease note pitch Shift+Left

Note Effects

Can be applied only when your cursor is positioned on the existing note in a tablature

Action key
Bend note B
Ghost note O
Hammer on/Pull off H
Slide up/down S
Vibrato V
Dead note X
Palm mute P
Fade in F
Grace note G

Marker Actions

Action key
Add marker Shift+Ins
Go to previous marker Alt+Left
Go to next marker Alt+Right

Playback Controls

Action key
Play / Pause Space
Go to start Ctrl+Shift+Right
Go to end Ctrl+Shift+Left

Dialogs

Action key
Custom chord dialog A
Settings F7
Mixer Ctrl+M
Transport Ctrl+T
Collection Browser Ctrl+B
Play Mode F9
Help F1

Application

Action key
New tablature Ctrl+N
Open file Ctrl+O
Save file Crtl+S
Save as F12
Print tablature Ctrl+P
Exit TuxGuitar Alt+F4


tuxguitar-src-1.2/TuxGuitar/share/help/tools_skin.html0000644000175000017500000000213311273045225022563 0ustar julianjulian

Changing the skin



TuxGuitar supports custom skins. The skins modify toolbar icons and dialog buttons.

The default skin for version 1.0 is Lavender, and currently there are 2 more skins: Ersplus and Blue_serious. You can change the current skin in Tools→Settings dialog, choosing the Skins tab. Preview of each skin should be available.

To add a new skin, create a new folder in $TUXGUITAR_DIR\share\skins\ and copy the files into that folder. After that skin should be available in the dialog.

Skins are contributed by TuxGuitar users, so if you are a talented designer, feel free to make your own skin or modify the existing one!



tuxguitar-src-1.2/TuxGuitar/share/help/tools_sound.html0000644000175000017500000000763711273045225022765 0ustar julianjulian

Sound in TuxGuitar

First to mention, TuxGuitar is written in Java programming language. There is dedicated layer in Java for MIDI sound, which uses “soundbanks”. In TuxGuitar prior to version 1.0, using the soundbanks was the only way to play the sound, and it was totally independent of your system MIDI settings.

Since the version 1.0 there are some plugins that enable connection between TuxGuitar and the system MIDI devices. You need the plugin depending on your operating system and audio properties:

  • Linux (ALSA) - TuxGuitar-alsa
  • Linux (OSS) - TuxGuitar-OSS
  • MacOS - TuxGuitar-CoreAudio
  • Microsoft Windows - integrated in the application

These plugins are included in your distribution package, so there is no need to download them manually. Just be shure that plugins stay enabled in the plugins dialog.

Java Sound

Java Sound plugin, relying on the soundbanks, is still available in the form of the “Java Sound Api plugin”. You can adjust and change the soundbank with Configure button in the plugins dialog.

If the plugin is enabled, in the Sound tab of the Tools→Settings dialog you can choose “Java Sound Synthesizer” in the Midi Port list. That enables sound output using Java soundbanks.

Platform-dependant plugins

If you have TuxGuitar-alsa, TuxGuitar-OSS, TuxGuitar-CoreAudio plugin enabled or if you are running TuxGuitar on the Windows platform TuxGuitar detects your system MIDI ports (devices).

So it depends of your system settings, but anyway, if the proper plugin is enabled and working you should see system ports in the Midi Port list in the Sound tab of the Tools→Settings dialog. Choosing the right one enables your native MIDI sound in TuxGuitar.

If you experience problems using your native MIDI output, consult the help of the plugin you are using.

Sequencer

Beside MIDI Port sound options in the Tools→Settings→Sound tab is also MIDI Sequencer options. In general, you should use “Real Time Sequencer” because it’s faster, but it needs Java Sound plugin to be enabled, which means it requires Sun Java to be installed. In case you use some other JVM, your only choice is “TuxGuitar Sequencer”. Don’t worry, it is not as bad as it sounds. :)



tuxguitar-src-1.2/TuxGuitar/share/help/whatsnew.html0000644000175000017500000002240111273045225022237 0ustar julianjulian

What's new

Version 1.1 (2009-xx-xx)

  • Fix some bugs
  • Support measure range to loop
  • Transpose notes feature
  • Optionally transpose afected notes when change tuning
  • Move beats left|right support
  • More song properties options.
  • Add multiple measure support
  • Clean multiple measure support
  • Number of pastes support
  • Better lilypond plugin
  • Better fluidsynth plugin
  • New jack plugin
  • New community integration plugin
  • New cocoa integration plugin
  • New audio unit plugin

Version 1.1 (2009-04-02)

  • Fix mixer bug
  • Fix jre1.4 support bug
  • 2 Voice support
  • Chorus/Reverb/Phaser/Tremolo MIDI Controls
  • Upstroke/Downstroke support
  • Stems Up/Down/Auto support
  • Display markers on the score
  • Encoding option on GTP Plugin
  • FTP Browser plugin now can run on non sun's JVM

Version 1.0 (2008-06-17)

  • Fixed native MIDI Port connection bug under windows
  • Fixed mute/solo mixer bug
  • Fixed copy/paste measure beetween tracks with different strings count
  • Fixed other minor bugs
  • Vietnamese translation

Version 1.0-rc4 (2008-05-05)

  • Bugs Fixed
  • File format converter plugin
  • Dutch translation
  • Russian translation
  • Ukrainian translation

Version 1.0-rc3 (2008-03-25)

  • Fix a several GTP exporter bug
  • Fix a printer bug
  • Fix other minor bugs

Version 1.0-rc2 (2008-03-11)

  • Fix some translation bugs
  • Fix duplicated beat/string notes on MIDI importer
  • Fix a GTP importer bug
  • Fix a PTB importer bug
  • Better Guitar/Bass synchronization on PTB importer
  • Documentation contents added

Version 1.0-rc1 (2008-02-28)

  • Play mode option: ( Normal | Loop | Speed-Trainer )
  • Alternative endings added
  • Insert text
  • Show chords on the tab
  • Better chord editor
  • Open file from URL
  • Matrix editor
  • A song collection browser
  • Skin support was added
  • Better plugin support
  • Tabledit importer plugin
  • Lilypond exporter plugin
  • MusicXml exporter plugin

Version 0.9 (2007-01-29)

  • Piano editor
  • Lyric editor
  • Music Scales
  • Simple Score edition
  • Custom Chords
  • Customize ToolBars
  • Metronome
  • Memory Optimization when song is playing
  • Print layout changes: Tablature and Score enabled/disabled options, Measure range.
  • Dynamics
  • Increment-Decrement Semitones.
  • Shift Up/Down
  • New Effects: Tremolo Bar, Harmonics, Grace note, Trill, Tremolo Picking, Ghost note, Accentuated, Heavy Accentuated, Palm mute, Staccato,
  • Tapping, Slapping, Popping, Fade In.

Version 0.8 (2006-08-24)

  • Power-Tab 1.7 file format importer added
  • MIDI importer added
  • ASCII Tab exporter added
  • Show note played at fretboard
  • Triplet Feels added
  • Markers added
  • Fonts and colors config support added
  • Soundbank config support added
  • History files added
  • Simple plugin support added

Version 0.7 (2006-07-17)

  • Score Viewer added
  • Transport added
  • Clone Track option added
  • Move track up and down option added

Version 0.6 (2006-05-27)

  • GP5 loader added
  • MIDI exporter added
  • PDF exporter added
  • Print option added
  • Print preview added
  • Undo/Redo added
  • Dead note added
  • Page layout upgraded
  • Copy-Paste and Delete upgraded

Version 0.5 (2006-04-07)

  • Config editor added
  • Key Binding editor added
  • Mixer added
  • Midi sound added, when you insert a note
  • Now can you see beat to beat when the song is playing
  • Now you can select the channel and effect channel for the track
  • Now you can run tuxguitar with arguments (eg.: ./TuxGuitar file.gp3)

Version 0.4.1 (2006-01-26)

  • Fixed a bug in tunning when you select a percussion track

Version 0.4 (2006-01-25)

  • Fretboard editor added
  • Song properties viewer added
  • Select instrument bug fixed
  • Change tempo bug fixed
  • Change tunning bug fixed

Version 0.3 (2006-01-11)

  • Now you can choose between linear and page layout view
  • Ability to show/hide multitrack view
  • Multilanguage support has been added
  • You can now export to gp3 and gp4 file formats
  • Double dotted note added


tuxguitar-src-1.2/TuxGuitar-tuner/src/craigl/spectrumanalyzer/FFT.java0000644000175000017500000000604111273045352025537 0ustar julianjulian// Fast Fourier Transform (FFT) Code // Java implementation by: Craig A. Lindley // Last Update: 02/27/99 package craigl.spectrumanalyzer; /* libfft.c - fast Fourier transform library ** ** Copyright (C) 1989 by Jef Poskanzer. ** ** Permission to use, copy, modify, and distribute this software and its ** documentation for any purpose and without fee is hereby granted, provided ** that the above copyright notice appear in all copies and that both that ** copyright notice and this permission notice appear in supporting ** documentation. This software is provided "as is" without express or ** implied warranty. */ public class FFT { /** * This is a Java implementation of the fast Fourier transform * written by Jef Poskanzer. The copyright appears above. */ private static final double TWOPI = 2.0 * Math.PI; // Limits on the number of bits this algorithm can utilize private static final int LOG2_MAXFFTSIZE = 15; private static final int MAXFFTSIZE = 1 << LOG2_MAXFFTSIZE; /** * FFT class constructor * Initializes code for doing a fast Fourier transform * * @param int bits is a power of two such that 2^b is the number * of samples. */ public FFT(int bits) { this.bits = bits; if (bits > LOG2_MAXFFTSIZE) { System.out.println("" + bits + " is too big"); System.exit(1); } for (int i = (1 << bits) - 1; i >= 0; --i) { int k = 0; for (int j = 0; j < bits; ++j) { k *= 2; if ((i & (1 << j)) != 0) k++; } this.bitreverse[i] = k; } } /** * A fast Fourier transform routine * * @param double [] xr is the real part of the data to be transformed * @param double [] xi is the imaginary part of the data to be transformed * (normally zero unless inverse transofrm is effect). * @param boolean invFlag which is true if inverse transform is being * applied. false for a forward transform. */ public void doFFT(double [] xr, double [] xi, boolean invFlag) { int n, n2, i, k, kn2, l, p; double ang, s, c, tr, ti; n2 = (n = (1 << this.bits)) / 2; for (l = 0; l < this.bits; ++l) { for (k = 0; k < n; k += n2) { for (i = 0; i < n2; ++i, ++k) { p = this.bitreverse[k / n2]; ang = TWOPI * p / n; c = Math.cos(ang); s = Math.sin(ang); kn2 = k + n2; if (invFlag) s = -s; tr = xr[kn2] * c + xi[kn2] * s; ti = xi[kn2] * c - xr[kn2] * s; xr[kn2] = xr[k] - tr; xi[kn2] = xi[k] - ti; xr[k] += tr; xi[k] += ti; } } n2 /= 2; } for (k = 0; k < n; k++) { if ((i = this.bitreverse[k]) <= k) continue; tr = xr[k]; ti = xi[k]; xr[k] = xr[i]; xi[k] = xi[i]; xr[i] = tr; xi[i] = ti; } // Finally, multiply each value by 1/n, if this is the forward // transform. if (!invFlag) { double f = 1.0 / n; for (i = 0; i < n ; i++) { xr[i] *= f; xi[i] *= f; } } } // Private class data private int bits; private int [] bitreverse = new int[MAXFFTSIZE]; }././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.gui.system.plugins.TGPlugintuxguitar-src-1.2/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.gui.system.plugins.TGPl0000644000175000017500000000004711273045346032701 0ustar julianjulianorg.herac.tuxguitar.jack.JackPluginImpltuxguitar-src-1.2/TuxGuitar/share/help/css/styles.css0000644000175000017500000000146011273045225022340 0ustar julianjulian/* CSS Document */ body { color:#666666; background:#ffffff; font-size: small; text-align: left; margin:0; } h1{ margin: 0px 0px 10px 0px; padding: 0px 0px 0px 0px; color: #154374; border-bottom: solid #d4d4d4 1px; } h2, h2 a, h2 a:hover{ margin: 0px 0px 4px 0px; padding: 0px 0px 0px 0px; color: #154374; /*color: #cc6600;*/ font-size: 16px; } h3, h3 a, h3 a:hover{ margin: 0px 0px 4px 0px; padding: 0px 0px 0px 0px; color: #053364; font-size: 12px; } h4, h4 a, h4 a:hover{ margin: 0px 0px 4px 0px; padding: 0px 0px 0px 0px; color: #053364; font-size: 12px; } p{ margin: 0px 0px 15px 0px; padding: 0px 0px 0px 0px; color:#666666; } a, a:hover { color: #154374; text-decoration: none; } #PageMenu { width: 250px; margin-right: 10px; } #PageContent { margin: 10px 0px 10px 0px; }tuxguitar-src-1.2/TuxGuitar/share/help/js/jquery-1.2.6.min.js0000644000175000017500000015473611273045225023247 0ustar julianjulian/* * jQuery 1.2.6 - New Wave Javascript * * Copyright (c) 2008 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ * $Rev: 5685 $ */ (function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
","
"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();tuxguitar-src-1.2/TuxGuitar/share/help/js/jquery.menu.js0000644000175000017500000000073011273045225022746 0ustar julianjulian$(document).ready(function(){ $(".PageLink").bind("click", function(e){ loadLink( $(this) ); return false; }); loadLink( $(".PageLink:first") ); }); var lock = false; function loadLink( link ){ if( ! lock ){ lock = true; $.get( $(link).attr("href"), function(request) { $('#PageContent').html( request ); $('#PageContent .PageLink').bind("click", function(e){ loadLink( $(this) ); return false; }); } ); lock = false; } } tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/1.png0000644000175000017500000000601611273045225022322 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF+IDATxÚbüÿÿ?-Á¨£ŒZ0jÁˆ°€…Å:†æ*ŒŒŒü ÿÿ_¾|þä/bô0ª ÍlDÙØ9z™˜˜tÿÿûßÄÈÄ$ÍÌÌÜõÿÿÿS?þ¨?slÿA²-0¶°ç¹ÁÅÍ#÷ïß¿ú­k71000ø…%V³²²¶|ÿþáýÛמÇîÜAVððòɉˆIʉˆI2ðò ÁÄÙÙÙW ‹2ˆŠK2 ‰ø‘É,¬lw89¹nrqó0prqûyŰ1000022}dcç`àààb`çà8H¶{·­ýûãÇwó_?,øûç?à ïP§Ÿ?ô~ÿúåÂ÷ïß‚Ö/Ÿ»’¢HFQê~ÿâaaa½¹cãò/TIEƒ>£–_dþ5f´IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/16.png0000644000175000017500000000633211273045225022411 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF÷IDATxÚ´–ÏkAÇßμ™Ý!Én¢í’Ð"=xPÐY¥©Rûƒ^D‘ R‹‚öæI<ˆàER¡ˆ± Rˆøƒ¢EðæIˆ×€€fSÍîÎŽ71¨• ³f†/|Þ¼™÷ÞJ)HÕ”R‰Æž½*Iô$©C–È,$Ñ'ØN~×øäÜbj€lΧ0°ttæø|*ÓµlÎY¶ó;VÇ'çæµ`"Þ"3›É:KÞÄôŒV€RJH)o=rÿã|VˆÌQï× „!dñôù+ç6^>­#ãkœ›mà )ÅOˆøèäÙ‹Št…q>¦ †Ý¦”‘×¥‘â1Ьõ/=&tü6¬WW%Ü=qæÂkƒW”{ÚN°ÕñÍ׫›A·{J)µ[cˆ‚žõû7ÕfR_ü¥ú†Að]ß3¥ô½HFAß—¼ÿ`Ù1-ë’e‰ƒÐ†i ѓ֣‡²Œñ¯}¼‰é1·8ô6g;EÓ…!øíÖZOÄâx$ŠÂį<å¸Å¡wnix0_d Ú›-ˆãøÛïºÏõZ};'q›²\Þé–ÝÒ0Øv¤Œ èþ`EKáÈjŒ±&!¤Œ`«ãñýÍ©Ï4•–ÿ5ýËWoFDùöõôaFÚ¿ŠÔ?#ß´äϲ4IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/2.png0000644000175000017500000000573011273045225022325 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFõIDATxÚbüÿÿ?-¹5t ij+»M-`cc§m13³ÐÖF&FÚZ@óT4jÁ¨£00°°WT°k ‰¥C +[;‡%##ÓnV¶GTó¥½{…€è:!a±›‚Âò¼¼|ììœß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFêIDATxÚÔÖ¿kAð7³³?gwoïPä ¢X¥ˆ˜˜„D…ˆA! ‹Xhmç`þñ cÀ"Ú 6ž(*JÀV0â%îÝîÝÎO ûœÑÙÂ×ÎÀ‡÷…yoÖÊ, %×®€Á¡£3ƒC#vi@@ÃYϧåaGq%¹?~búP)€Ð(N>DqÒß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFðIDATxÚbüÿÿ?-¹5t ij+»M-`cc§m13³ÐÖF&FÚZ@óT4jÁ¨£0001§•…X L¬yØ99Ó88¹Ô™™˜o²spqRÍs[1I™í¼|üœ\ þüaøúåÓVªX`fíÌ#&)½K\RFT@P„…••áë—O ÿÿý{M xøømDÄ$EÅ$¤øø…þþýÃðë×Ï ÝT‰dÖ³¬¬¬÷™˜™þþýÃðíë—k_>ô\µhÚ5¢Šub+ýÌâFWfÖwS:«Î’To ÚV±0½µ:½ñO­ÈIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/64.png0000644000175000017500000000620311273045225022411 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF IDATxÚÌÕ¿KQðï¼ýáííÛ½1bLþöPÎ$‚ZXXØ ‘4éî/I4 ±DAMˆDÐTVil’Æ"AI“ÊFTüµ÷Þî{/B”{ ™~æÃ0Ì cgPÞ»oÂãž¡é\bÈçªOûrB<.¯UÇ&æE~ÈãÒRÈ£÷ƒ#Ï;­®çÕ … ùb!^X8qgÁ÷üØ÷[ެZë¯æ‰Ñœã¸O¬J©GZ«IcP'"•CêD)Ý£µªcö­Fkð€ÑKûCf¬‹ˆ–s6cÒ~ÆÑO"| ¢_Ö,K¯¾l®¼Ê²ì£VjÐ: EÀ½Ïë;RŠ]ë@š¦îè³)’äöüŸ›×ÂC£ãÝžïG®ëõ¦Rl€h$iÓ@ÿp…Qéu¥íAÝõ¼‚âûþÞ'Ý7\óU–6 ð¸<ÓÖÞñ®ÔZŒÁùÙéo8üq üiŠ<áqù"ä‘+Ec0oîu}ïp¾I!fo®¯‚äöú`gkõò¿zú¹Cg˜ötþñIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/8.png0000644000175000017500000000630411273045225022331 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFáIDATxÚ´Õ½kAð7»³»3·_·§ÑËì,øÝ]hÝ[Ø~ØZ¼¬¤M¨9' ˆã‚^÷‡%75ݸ>:qŽJRÎ ÃoùÓ•G‚КŠqM DúSÎÛ@€tiÀo…牕¦é‡ÜÆ]ñl+àäèis¾ó§98ˆªªýRÑä,yð_@}¼Q3HáŠnjÚvgÇÛßóúeÛ?0pæü…¹reäŽi»*ÆÄqþî§«_Ç77Ö;;à¾ÀäÔÌL¹2rwèè0Ø®iš‚ßýQØßÉò¬û®wèÒP¹GÊU ¢°{Aï­bMJ?ÀX{Œ±6@A2À^Ð[ >ûSO–ïsi=ùÚù’í¸u!ÄûÅ…Û[¹7ýƒ„9Ç—ë‹§A’ÐgIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/about_authors.png0000644000175000017500000001536111273045225025044 0ustar julianjulian‰PNG  IHDR<<:üÙr pHYsªPªPkd‘ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚì[mlUGz~Þ™9çÞëëc|16à,‹¨mÙ`‹Ø)JIóÁn›JY$6²,…Vý±UUµ?û£]©ÿ¶Zµ?@!ÑTJTUdµí¶ZÂ*V•ÆÆMÛ Øõ566öý<÷œ3óögîß5I¬ºŒt4wÞùzŸ÷kæÌ™ǨߤDOÿ ǧÕ*Oœ8Á«Õ%éöwc¾Z;—ý½Z¹1}Qýµo,ÓñãÇi||œ¾ì€¹\ŽîÝ»÷@ùĉZ1æØØ˜Y±¤à’·uãããù¹kÌDzí%‰‡1 ß÷166ÆÔ˜@>Ÿ§™™زM333,ÎÎN:þ<ÆÇÇë c||¼þ{ffDD333 CCCdë“ãäóùznÛ‘H–@®Æ\B+¼ZícóUÀÕÇã™™ ‰ÎÎN ¨Þ§³³“öíÛ+ (ñ›“ ‘H²ã'Ÿ$333V0Õhz_”ÆÆÆØöIöKš9ÕÇõh ‘í366fMÑŽÉãããÔèI×° †††Vm—œÛÆ* ¡¡!Ñäó@~=ÉL£ï ááá5BEQôæ›o™µ¼¬øŒ ¾T’Ö´¬ú“¦hýÓš^ÒÄ“ô¤–ÆÇÇADâüùóuéîß¿¿c÷îÝßËd2?pç{©TêÈŽ;vvvvþa__ßÏ7lØ¿qã†YmþÄ8ußN¬¤O'5ÿÀeippðA+&]a.«õ·AhïÞ½Þ¦M›þÜqœÃBˆo¬jsÌEcÌσ øûÑÑѼqãF888H ã8vìÀÉ“'ùرctòäÉ/Ônc;¹qãF€K—.q>Ÿ‡-Ç—=JÏ>û,]ºt©>ÈÑ£GéÒ¥K8zô(åóùýóù¼†<ÔÔÔô}"ZËÌXí"¢v}®ë¾{ýúõ;ù|ž7nÜH¹\ŽªÕ*òù<ÇÂï¼ó¯¦íÆdyllG ­ñ®]»LLLð®]»êÀ'&&øÈ‘#8uêT£Di×®]411ÁøÈ‘#têÔ)¼þúë¿ÕÒÒò·Žã|‡ˆœ/ë_aNœ={v€ê+¯¼"àÂ… æaüôÈ‘#u¾Wáw…‰ÂNé—WDÃÇÓéÓ§ÑÀ³ÿþ?Êår?ü ;?S(þziiéï vþÇNŸ>ÍóÛß uu%Ú6¶^ŒŒœ9s†WÙWs ´N¡3gÎ0c€“cHi­û㺇M¢¹¹ù¯ÊåòèÄÄÄOã±qúôiìܹsED¡‰‰ Z³f ]¼xѬÆ÷ÈÈ5 I2³˜¥;wîðìì,fggÑÑÑAÌŒ;wîð¡C‡è£>âC‡ÑöíÛéìÙ³õ>üðCxìèììlëîîþ>åä·_ôh­ÍÇüoBfëׯ¯ó“œ{vv7oÞ䙼åoUœ;wŽ“&ñ0/!ä¾}ûþÆó¼¿|Ä—š(ŸÏÿÁ… .à^xAÀ{ï½§mƒááaº|ù2]¾|ùWLixxØââsçÎñðð0Ÿ ˃¸sçíÝ»W®\a8xð ÀÀÀ]¹r\‘7‚noooëêêúÁ£h7~€à“O>ùÉž={FGGÍÀÀ€Ø»w/èÖ­["•JÑž={`y±|Å‚ÀåË—ýýýu~%¼ñÆôî»ïbnnÌLóóóv ¹¹9ºpá¨ìyžÜ´i“xþùçÑßßO“““ úûû'—Ëý 3‹G ­KKKÿ$„(ù¾ŽŽŠ_^ÄíÛ·áû>|ßÇÜÜ\ß­[·R?õ÷÷crr’“Ê|ùå—199 yàÀšœœ¤öövšŸŸçùùy8p€¦¦¦0??ööözlÛ¶MLLLpKK æççi~~ž^|ñELMM¹===ßÍd2ß~T°Ì !DNJù³‰‰‰kíííð0}}}dŒçyT,ùêÕ«u1èëëpëÖ-*‹  Î¬˜žžæB¡ÀÕj•™ûöí#ûÀôô4÷ööÒ¾}ûDoo¯Èf³3„ééiffôööÔjµ‚ÖšµÖxÔgqqñý|>ÿ ;3£P(°å‰™aŒIº÷ööR6›¥l6KÉz°x¨§§G\»v-¹Ë2===ÍÍÍT*•¸¹¹yÅÆÃÖÛ´víZñþûïË–––gwïÞý¯Žã´?ª†———4::úÇßüæ7gÛÚÚ ”J¥º¥Yž,=Yv]—ëZ½víÚ/5ÌÌØ±c‡0Æ V?šššˆ™Q,ÙæÅb‘»»»©»»›®]»ÆÌŒ¦¦&jjj"ß÷@T©TµÖµÇ¡a"rÔžyæc ”¢ÖÖVaç,‹léɲÍ-fFww·xõÕW Ô§Ÿ~Ê]]]¸~ý:@WW%ÌdEÊf³äº.uuufF©TbK`ÚÛÛÓ¼¯¸ËZùÞ*å)¥˜››Ó¹\NÔj5.—˜䅙‘¤[ X\\4¹\N´¶¶Ò½{÷Lü"$hµeË2Æ`Ë–-™L†Œ1Èd2ä8…aÈP.—¹X,r6›EKK‹°tK@kÖ¬ÙÀÓZ?2`cL³B]¿~Ÿ{î9*‹ÆÆr¹ÌÆ”Ëenmm™L–nÛÄV‡L&CÉ «Òé4U*njj¢J¥ÂZkT*+É:ÝæÅb‘›ššP©TøæÍ›¼}ûvƒ—DÔE‘xQºZ­æÃ0äÍ›7S­Vãt:MW®\1›7o&BP:†ïûœà1455e¶nÝ*$ñ@cN§©\.ó­[·x×®]JJi …‚Éd2亮RÚg2²&ÔÛÛ+Œ1Vz¢R©”‡vãWÅÚóß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFàIDATxÚäšy”\Wß?÷í¯¶®êMÝêVKÝÖbI^$¯²ÁÈ+àÈç€Í‚Áa30€É žÀp’'Ì8 É89J&dž2Øà#` fƆ1¶16X’­]ÖÖ-µÔêîê­ºk¯·ßüÑUå¶,Y’“?òι羺UõîûÞßz¿¿+¤”üÿt‰O~ò“ôRJ„躎®ë(Š’nÞEѺ(ŠÚSQUeXQ”_K)EÑþ0 ñ< Îi®(Š0M“øÃ´¶¶’Ë娱cÏ=÷¿øÅ/Þô^Úïm%…@qwÿÁuÝŽãà8Q!¥DUUt]_nYÖm–eý[MÓþ‡âÏ€ÊïSÂÚï l*Š¢o”J¥ J¥ŽãàyQ ( º®cñxÜJ¥R_‰Åb7ŽœFý?,„PÂ0ün±X¼3ŸÏ“Ïç©V«Ôj5|ßoª¼¢(hš†aÄb1*• étúêT*õEQnˆ¢¨*„8ë|u³9gàZ†ðµZíÎÙÙY ……BjµŠëºAð&ÀBªÕêë6¦iW´´´ù$<ò•Jß÷5!ÄÞ p†´µµ±xñbÎGK5]×/à(ŠÂ0$òù<·ß~;›7oÆ0 Çá½ï}/÷ß?ccc ðàƒÒÞÞŽïû|úÓŸFUU{ì1|ßGÑóV¶)„ ¿¿MÓð}ÿŸp]EQáº.­­­<üðÃtttÏç1M“÷¿ÿýLOOó™Ï|†Ï~ö³\~ù匌ŒL&‰ÇãÜwß}üú׿¦R©†aìLæ†!™L†¾¾¾sŽÙMÀ ›º€-Š"jµ×]wÝÝÝ<öØc¼ð Üpà lÚ´‰M›6‘N§¹õÖ[yꩧعs'º®ó©O}ŠŽŽسgQ½¥$–-[†¦iç–ÎÅõŸ+`)¥Râû>ýýýlÞ¼UUÙ¿?®ërï½÷²¸§‡t:ÍÃ?L¥RajjŠ®®.>þñcA†¡)¥| )%±XŒÎÎNÂ0ä|5Ti<ôB´(Šd†H))•Jlذ ÐtƒÅ½ý%›aøD–‹W¯azjŠD"ÁŠ+¨T*MÀ§{á hooG×õfs^®V«DÂuEQ„¢(¼òÊ+ÌÎÎò•¯|…_ÚJKÊæÒ¾JùÇ|óO.îþ–÷Ýñ^z–ôÓ×ÓÁúõëçÈ‘#ÔµÄrç ¸!Ýþþ~ÞntÑî½÷Þ 8žxâ‰ÐBtÝäÕWwò­oý5øÐ½¬[³„EþS$„ÙÛÍ?y7ÑÔ1ò¹GI^óA´ôÅ8žäû?ØÂÞ}è[º „f­[·Nhš.:+Ó4ˆÇãorVRJE±¤”Î[-†¶qãÆ –¶½²Ó+ghK[´eb¼ðüϹm½ÆÚø‹”‰Ì¼I¨eðKXl¦,îäähÛ^|’[oXMg{šÖŽvý?÷9yª‡Ù¶mããã4I¤‘ÂÈ,j#¯Ô|ÏþÚlnî?yó±û‰Ý…ïV ‚˲2étº/¿ozzúKÏ>ûì)åõ'NœøÊààà_tvv*®ëFBž~úéy ;S»÷ …ðàùËÎc9±Ë *ãàOAmü2„„5Ð,øUp‹óãÕit«d;Ô,¢P`‡³¶ýÍ×§‹Ïû!Û &½ /É8ýý$“ …B»mÛ?Íår¿ÜµkW"›Ín¸çž{ضmÛŸW«Õ“GŽyüTO/vÿès¿{†%ÑR~a[Ü2®ÉÅéí„ît œ„ªª ŠRBèÍxó˜6%/Íä´OWbŽj9í8ê]«ñªªyÖeË6IWW<ðñx<“H$^®T*«ÚÛÛåÐÐdrr’jµZºÆuÝýB&''çóã ¥”·¹éæKãOºŽ–Ø$`ãu)Ò©‚ H€Pç{$DÈ¢p~LÑñ#ƒßl/±¬Ë'Õ‚|yP~¹äDÿÕ þ×?úl?úº¤ÞñÎwò®n¸qÆ ϧÓižxâ vïÞÍÔÔ¾ïã8±Xì¯2™Ì祔lݺu^¥GŒÛ.@Ö~¨<_šøÇ{Öì»ë]—‘cW]Ù‰"ç p ôëÀç; (ʼtí {vTèIWèl•|wߺ࠳îïZìˆ'~ñ<Žž\8¹é©‹ò…Â×vîÜÉØØ»wï¦X,R­VYµjŸøÄ'øò—¿Ü{üøq4íõm¿VŠ­?gK"Iu›x£ÿšà¥\_øÚ3 Zs„-³;ÑÁòK¡6ABwÞ~¥œWmU5±VNŽ‚îgTX|ý'˘Ñ/Öûz[;FóÅáÁ3ó±^%Œ•©_võåŸ-K­GfbbEQPU•/~ñ‹ òÝï~—B¡pƒçyë<Ïk:*홟?yn[Óhmm¥¿¿Û¶›ÙU35 ×Ú=µˆ†Ü{ù7-dnñ-d:»æ=²3²¾³QtÐ[Àné îy‰}9øÖ«‹1“­¬Xæ!C·ó…çŸÅwkØõò¥mÿòoüÚÌØ‰¤—ËRÉ`z&§Y–ÅÆ1M“oûÛ”J%¤”C›6mZžN§?033ó:àC‡s®¼téRzzzˆÇã(Š‚‚ ‚EQðEÇ!#þìÒü¼{†/Uö±é£AI-‡Òè¼Ý"@(`µƒ™`ÏOÿžGw[lÙ-èl‹H). :Úvüø0«»3ÿlÃúKÿÔ«7ÔüÅNQ˜‘—_ËWj/>|ø¢D"ñÀÇ>ö±Û»»»¿ºuëÖ­Š¢ Ïggæ…!ñêéÉd’ÙÙÙkÇYìû>Aày==$.ºžçÆvsü?=¡F©&‘H M7Ž«]8·²ÊÐØ»Ã¤R­’N¥°½Þ-K.¾”•ë¯aèà~¬DŠêì4cƒk‡NN<44UüËJu2ðx"‘xöÀ׆±+ C§¡…„µ¬ƒ½HQ”OH)Ó¦i^ßØí¸®‹çy,_~-íaÌR9¶?Obr-–‹nJ"CÖ\IÐs­iÂÀ§½½¨R`mO+mŒäø‘CÄâI"¯Æìd¶thtòoF¦‹ß«Dì<•ª­÷/×9ñ GÓÖ ´ÛMÓüÛjµÚ^.—èééÁ4M¶oߎ¢®Ùp=‹ZtÂ#ÃLÅ{Èud˜ªæ‰JÔ®Åh=kh±-Šù9FFNpÅWâs\Ô߇S­aØ J³Ó Øí~eÛÓÇçÜ?©FüN©¡övÀÆãñO†±ynn.677G¥RAJ‰eY´¶¶rå•W⮺œðÈ+ÄÖ^M‡ë27™¥œ›ÁÚ£ÖÙÆHÙæäÐarùñdŠP5§«£ ;ždfbŒ×ŽžøwrÞCÿ䕇(Šèêêú^,ûh6›%›Í277G­VCmÛ”Ëe‰½}Kѧ‡X¼|5UE£%7N›éQ‹KÊj…ãNžcƒ'ˆ2]Äb6ÇOŽ‘Ÿ›Ãq]¢T‚}Oý Ëйd5WôöÞµlMî¿íÙ³»:;;Û;o«úp΀]×cí%—Þ×ÚÚúÑl6ËÔÔ“““‹E\×EeY4jH¥r™-ÅYþðîwc{9´XHB3Z˳cÆaªӫµ*ñdŠJµÂØè(BUÑ5ª™!ð%±JÏqÖwvvüѵ×^ûçaR.—'›Í’Ïç‘Rž3U«­X|nÛ?‰6°tñ§ŠÅ¹\Ž\.GCë´*žçáy®ëÇÙS®òƒŸýœݾxïfFql¦Â¸«aêKúº9°o/3ãYÚÚ;p]?@,gjjŠj¥B¡P@UÕ­ªêMÓÛ¶MWWaR­V‰¢ˆ}ûö1;;{vÀÿï?>{±JÉh¢ôýÝg7¼œ¥\.7Ë' Ò‡çy8ŽCµZÅ4Mžx~Zzùà?ßH^­15 æEŒœÀó}:»cÚ ^{m?ù|žZ­FOOŠ¢P©T(•JÄãñ”ªª_BÜ/¥$„Í$hÆ Åb‘¶¶6æææšÅ8˲n‘R§c3„ P.—‰¢ˆ3…&õó»ED§mBËs>#ö ?¤¥[iIÇXº¤ƒdÒ¢\©1[¨FȨÁZ6Aû~@øø¾O>Ÿ'•JqñÅ«QÍ8îø!œ™,®B‹·Q«VÑu¹¹9ÇijŠeY¤Óé¦ÉhšÖ Ãpc®…s6êMÅb±9f¶msË-·Ì¾çý×âºî››ãÆÕ]{·(33-¢ÅDˆ€x ºÚ :Ò ¦æáx’R-ùúäH‰¢Hü $Š"<Ï£¥¥…U+W‚¢qË¡8~„cùM3Ã0ÃJ¥Ò<Ðp††aày^Ã1ÚQ}ÿ-¨bÂ0ÄuÝæâ•Ëeîºë®z¹Ô+i·€,×vï_’^C­šøz‘Ð7Д€eÉú:“®$<ÙDÑ< ßÞ֯о /ï$ªÓp³³³ŒŽždõÚµ˜ºN{iœtK¥ªÀ¶ÁqR©©TªiÕj•†W6MÏóÐuýz˲º¤”ç’34r„¦ ¦v¦ý bªtI);‹£;¡™#ô”ynJ1‰õšeþßpÍl ´óQU•‹V¬¤³=Aïè£3A20ÐÏ•W¬ã²«¯âåÿø%ô_½ÄÕ7ÝÂŽD/nÑmÚa&“Áu]¤”¸®K­VÃq4Mk°éE‹] üÃy–ê$^Õ?S!­æÚ‘WïÊyŒñ ÂT]—È©2êïÇj½®öïqÍr‡”©áY«iI¥ªÆµ×¿‹pûâñïy÷´uµ±ýño‘ÿÙ£´DÐõôóÜ8ÐÇѵë9ª´ D‘L&C¹\Æó¼º/ð ðYVq] ÷|ªþo<ÕÎxUP£™ð*U¼B€°TtS-ÄÆ'3þ¦?¦oÙ"Æ(-¦Ã‘™)”D7‹ÚLz/ç²ËVaÚ-i“]ï‰ï1`Y(1ßNR¸™ZÂ"[P2õfí¸qøEQ”æQ‰ÆîǯǞ·ØqN_Ÿ‘tÍ<˜&n¥Dè ‚J€šTQíy±G›&?õ<æš÷°\üwú¬q’¨ÿ*V]v2 ð½¡jÌMŒ°sûoI¬¾ŠCF KÆZÑbdâqªB2Ç0ŒfmªZ­¢iZSÅãñ8¶mS«ÕŠg{¶ Ú[jij{£EÙê`¾;YÑÐS‚ aÚ Z\`z&]խ̹w²¤­ KÏa:!'£AÉñjeTUÅ«–ùõo^åP¹+Œa&Iß Û²ÉÄlRɦiÒÒÒÒ¬7²¹T*E2™D×u’É$¾ïcF¶±0 FQÄôô4SSSg¬k®ç¿•›+è÷ÿÀ?pôÂd„žRP,ðK-© Æ5Ú2•=ÿ†°§†‘Tèlµ˜9¶éìºÀ™›ãµ~ÉÈ$t¶µ³-‰©TŠt:M2™$‹aYBˆ&;‘Ëå‚ ¦,Ë" Czzzr©TêPlƒyÉçóìÝ»÷¬é¥–н¹¾„Ñ<##ÔÞοözÝ_ž™0쌂–PyJ„¢K úb1œäF*ÕWÑ•,é`Ž;~Eòª÷0þäß‘‹4ìd/é–Éd’T*E<oJÓ0Œ¦'u‡gžy†Ã‡‹Å0M³yª¯££ƒîî礔͂ø±cÇØ·oŽãœÝ† M½ipIw ‹¥p½€@Q—¯|¤üdö úd„™)‰DGOi œ VâÊ ´ÍŒÐV&®ÙÄ÷¿ÈÜ¡!”R™éŽõÄ´y•l¨­mÛ˜¦Ù$K¥ÃÃÃ<÷ÜsìÝ»˲°, Û¶›‹”ÉdÐ4íõ¬‹l6ËÁƒ›U…s¤Ðß|µ¶ØÜòŽåÜöŽåô/i#Œ¢S?³[?ë0ÈtGäû7A{?ß'›-2Zî¡WŒ£µ®Æ¸•êó?¤vh˜í‹xz\eYÏbzzzÈd2$ 4M#‚æVoÿþý As1,Ë"‹‘J¥H$¤ÓéW’Éä5•J…044t^ÄÅ÷ó…?|j?{ö wÜ´š+/ïìyç•_0ÿ‘™Ñ -B%ß®"U Y•x¢‡%ªAxÂ㤙Di"?I!ÓÊOL31Sbtø–eaš&ªª"¥lî;Ã0°,«yBÏ0 t]oœË¤V«mappZ­öv‹$çvõ-iãnZùþ«Æ†\›P´v_ÄLåæ/ ÆÓþþ›Nœ¤D ¥ùÛ£ŽÎ¡©Jã ÈÈûFµ@Q”fÓ4 MÓ0M³)åD"ÁÔÔÔçGGGÿªžx¼-î|7Èhy×+þÅm¦¿9–ÍhÂg·ÙîµØ±ÆÐN|©0ÝÚÆÿ9æ01QÄ4ÔæQçlßÐNX7 Ã"f›LNNÞ?66ö @}ãæ¹àþw,NÓ”zï,[Ú¾v}ZÿÀ†Åñ;ÕªÓ[(VÔdZ«æ®YÉPÞ¡\¬¡k¯ƒldIoXUTUCQ CÃVÝÁc£³Z,ä$ëÀ¢Sš\ÐËÓ,ÆY+õ•l€l|ÖêM¯Oશ½èÚ•±Mk{äG|ß[3˜ Ìã3:5Ï BAÈh¾JÚ&N#e¡(¡¢¨*º¦0|–¦ ô§‹eÇ—Û·eË®ãѯêg©~½ëíÔϰRÔÚ¨`ÖÇbk{•«ïÞ |¬3Å•¹²Ôr%Ál •ˆ\U'ïÚT}/R(o` æïç§WhªÀÖCLťժЕtèHBkB¥-!èJ NÌD¯~çWÁ·v~[Ö™wð`ð`!è36HR«ƒ4 °sE—XÿÕ÷Ÿ\Ý+®(VQÇfçéž|E2QŒÍJ\_’Ž JŽJ¡&˜«ˆàè”—RRJR6©UÝ¢=“¤c’¤ɈÙ2,J+ôd¥º:/²þ…¤MøÂð¹ÿ#ÿΖå‰:p§Ú?EêQ}A¢3…¥†Úª îJ6¾j±XÿÓ/[_OZ"~hìþ«H’[ Ò²Þ« lXm>/­žÆCÖ¿Ëôµ+—nŠòǧeíðxâ¾›µŽÓ’¹ŠddFú‡Æ£ÚíëÔdÜ"%º&8>-g³sdëÒpêšÎ2ÒžbiÜv$ÁõaÇp8ˆìœbvg„Ö×.¢ßŽ&wŸˆJ—,fo«pre†4_VžÆñ6L3:5/´]uA3êã   hÚë}+YÚ!:ÂDÅ…|U†R¢.ëíkz•î Dšˆ¦MÉ“@¹ît‚‹ZºÒ¢Ý6Pòrs9Yÿmãª9`(Å:Ðbýsm*û ÖBOœjÃê‚Õ§€VOQí†MÇë a±úoã¦×_Ä[`gÑíi8Ɔç­-XoÁÿªõïÜÏñêÀüj}:o=_G¨#giê)¡ia¯-°y}A¯Ÿâ ÔSžÙ,UB¶`Ä~Ïî¬1ùTÀ§SqÎxœjâÍ8uL9å™gòÑiús¹çÙpT§KËÂS@œò‚œa¡Î6öVÙ<Ã=gI'åù<ãÿAºK}žüIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/about_license.png0000644000175000017500000001511011273045225024771 0ustar julianjulian‰PNG  IHDR<<:üÙr pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFeIDATxÚì›ËsYVÆçffeU©ª$ëiùýl÷LÍ ÄL»áÁVü +fÉš,ù+&‚-,&f˜f<Ým»Û¶,Ù–m=,K*Ueæ=‡Eެʒe[vk``(9UU™©Ìüî÷ç½3ãé%ÿ‘ŸÛçŽÍБØþW79 €Ä⺽(]ˆ[gS‰Ú«ÙîÍm?xŽëÿFÀ’ˆëÍÄÍ¥ÓIçÒÙ´{íl£{ý\£wc)n]:µ–;.î%æÜFÞôgÿùÛ«ùî§Çeú(lñ*‡4§¢d~Ú¥‹½8_N¦.]lÎ|p¶Ñ}o©Ñ¹4—´Îu£´“H„j†7EMQU†x–Ý3¿Ú^úöêÎñŸ” ¿RŠi[’¹Ù(=s:žºz!éþÒÙF÷ÆR2uu!i_hÇét+J’ÄEDΡ&à'.'å Ì&¶&1ßß]û›?üý? üÿ³`ø(pD©¸S3’./E­kËnêÆrܾq&žº±·/÷¢Æ|3Jâ8ŠÁ &‚ BnžÂ 1¡üqˆ"ÕÍ GLÑÒ\sS®5g¾Þu3»š­¾«Úâ7€Ü¢4ߟ–ƹE×¼rƵ?Xví÷ç]óR/jœžrI3–q‚:0@˜Ç™!æp8DAÄÆî6Eˆʘ]+OÀ‚z=ÊlÜZ>ßè~å“ÁæÊ»Êúu€#À=šûã?J.ÿUЉÃ9‡…;04O†–À¬V Ój’ŒT©öÕžXŽ’–abPþ£%WÒ™_þd°ù·€;ެ_ö'¯ah^©o ¡àé[ÁÀ<9ŠÇÐxCkŸmb`´¶#Î)AÙKW·(ñAkþ@úšgÿr€÷-wCó‡€1LÃCªY ´Ù jß>jä³Fç”ï¹z®7NýZÛ%KGëâÝW’Ž÷(ü @ªÿ(6~¨Clé!PŠ8Īk@6¶‰°°/ܧ0ÏBÜ>-ù0ˆæDHŽj ÛqزPbÅØ±!ëvÀ¦f¨*‘Õkx7E14ìW«]ÏŒX„Ò¹o†Gp'é´,3=è[Á´ÄˆEÁáPg%§¼°]ªQø¼â÷x$Ä9GጦÆ\¥Ë¢k¡¦eh ƒ)#›10Õ‘Aª|5ûÐN°¶O±Ñ·‚ #?N¸¿¡!Qp$ B`è¦ÎŽ܈§Y¢…!Ü·>ûx>Óa^Ò‘R*ï.AÇf6þ¬ÊP•ËÞ‡KqûÊ“¢ómÓ{ Xl×òÕÅó¾ù/V²rm­Žê»)NÀÌQ¨¢(±8¶²*{\ ƒ9ã”$´-"ÂÑÔ˜\!¥¬iÔ*iÛ87V#3ãFrê£DÜ|nºq’ [Ž>Û³âÑÀ<Åáð’…‘¼+/kŠCHq䦤æ¸ç÷øØo±¡L©9¼ú±„Õ®$®¦åõ+¹‡x¼èšWÏÅožÞØ»»äŸñd•lC §±— I›) –Žì³cC-¸Yló¿ÁçÅ.»šá  4˜†Z ìøXòÞ””ȽÏ|ã$[œíhöifÊ 8®Ê^G¶;zX1R¨Ò!æ"mb¯J¢0­1‰‡G~Ÿ›ÜôÛdêAµ´ÕÃ%Ø`×Þ×›áÕs#žþèmÓÌ7VÀö(î ñ ð£lXk)dºÜ±T¨§GÌiZVÆÒ,8Ÿ–Eô4bËø8ßd ” o{ ¸ŽÌ¥|/ÔsÚµ¯GÈL`XN"ÓRÀúV¬˜ß„Zv<"UªlYÇ)g€\•/t—ŽE\cŠEKI -Jh„©ñ“b‹\‹ [¶:Ø0վ̔yi^^ŽÚWßFÖÇb8C÷)Ö²ªB²—ÓI­€Wö’‡ÇºÏ®fô,!1a‘W˜âœµhš©'Ua¨|Q^bx ¼²õÒDZ¸ÆûÑÌGPˈN€av÷,¿››’£XÈ-8/«ç»5‰{ƒ-ËHT8°¼ŒÏÁÓöH¸Ì Ö ·‚Da_ó`Ç>Äáx„¿©ì¹òÖjʨ÷Ð8®¿é$ ÛµâvŽ–6d«‡Š…ñ;¨*…ùÒY!<ô}¶ý°ŒãjA¶§iÒµ˜\=r˜ÙÊ3×<ôØQ*™z.ºÎ×Z-žTµ4ŠB»äŸÑ2Å´Zý[/ñÌPBX±2ñCì ~ⷹ音«‘†p¤žD…B•®Ål?µÐ¤£4sÂrSfI/\tCDq_0áBÖ·âþÐ|HpLÕo«5lì°4œ7/)…)ÎŒ)bv4ãc¿Åúm¶5CÍØÒ!]bf,¦¨Ix´ÏF9uUNÆÀ{®÷Íãzêø `Ct}Ÿâq†^-0b“Q§V6ã\4R6­¦¡5£´-â’LqŽ6-b óäæƒ† /4ã¦>ê‹Õós­oÔýEyíQúÚqâñÛ0¬{ä·†è(§¶ZÂ1Éöx¶Ë±" À —eŠËt˜#%¶ò¡§,fß Öí©ekj: ª~X5(’ë®÷­€çK9®}ó_XqPÕÆõVêDH ÷õö¬)b°o-hqš&פà ÓÓ“ÕW]Ê5/]»gnÆué~!³'%i+3.¿~`þifJ1â“Z ×FŒŽm¹´G‡ðÄüP7ù7ÝbÛ†ø¾$%¢jçpDAb¹{•ÏWÝÌÏœ¤×¤yåM²>.à xƒ½óOsódªµ›ÛK½ê ‰™?Ó!]‹i±cy9Sˆ"&¨AÑ!éMô¼Ç×% âø¸7#1i,HzíMŽë­ý>Åj†’Ú269«`G±®'q97R51Ð{ºÇŽåÌ“rŠdÄüx« `½¯V*èŠt~#`rï‡g\ÙÅ­ÜŒ!ŠJè("¡ícGL”ǽ) ¤ä(/¬à¡õy"1ŽK2Å‚¤LÖb£ÉÓRîµöLÎ@Q \vÝßÄÓöOpp\ÅL<ÃМw5ÛO{N¶s%´spNZìKÁ••W["º$4p¨éh†XFCg£ï6J§db0rŒ%I¿2+‹[–ýôUí[÷– ÛþÞÿ"C)jK-* —IGÎ)U¥× ‹’rFZÌÐÀAè—¯õ’íòúi2eqï¢Lýúë×Û,yÐr$õéþQŽör”ä¥1+í:ÌOHC=0©‰¶>î‰z|äåk 22vóÆ´Eç^7ÑæÞpìî[ñEŽ…Œk’IyÓqÏÚ&ÃWmöâU³‹G²]ÕÅ…G³Œ"ë“ç Uüµ%^\ž[= §5á¸v)>)Lˆ–3õ‡ìiô½*¤ #ÔìQ¤ú,5KÆ´6.âC×#È^¢ØÜ©Ž¥g智vκ×Ï3}í¼Ì¾wÑýÝ_þEÁ½[þ$$]9.íSÜÉ)sêIcy…—••ÔejcvGƒ %{Xm ÝÅ&½¶%§OѼ°dÝ똾v^:ç¥=wŠf»åœsÄα³¹ýäGÿúƒªV/œÃ60(ºŸ¡S% ²šg­[œÕ@×Ù“FXH?,mà:-sÓ–œ·ôü"½«geúâiš¦ÕrIc¾l(¨÷ vv‰ã˜Â9œÈâììì{N‚ajM½õüÃ}/Í*ÇCå«lffZæf¬ya‘îå3tÏŸ–î⬴g¦¥ÑJ]EDâÀ+æ•bP®!ŽcD„FšÒh¦$³Ó3ò'ßùÎwÿô»ßý‡WÍ(¾-àŠå}+îz±÷2”´æWÇ:¨¦ÞÀ\dÚmš[èZ¼fcå±=½¿ú|ýÉ“ÕGÛÏî¬>öÓ-Ý_ëÃÓž;ŒÖÀ5G{#À“\Ýhp€¿åï?ùô·S¦:¤?Ä?Û¡¿¾ÅÚê£Áã•kkOÖ¿x¼»uû‰í}¶ƒ=ð%s•ÍÕA¯`NøÎ¯w\Åú{+ë~í¯ÿq°âýÆ“µGn?ûlÝïÞÞ"¿7€GÀ‹8­Ë!Kû²Oj½t#¬“šž"þjwCìywPsú æŠC¬éI{×õү˩€Û§øHÂ@ø70§?+æ~–’®BSĵ ¯‡Àéÿ$¸“’4‡gw¸ûóîØÿ«åÿòËñ öú¯%þ ÆÞ^IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/browser_back.png0000644000175000017500000000162211273045225024623 0ustar julianjulian‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYsHHFÉk>IDATHÇí”KhœUÇç>&™&±(ml¥±Z[k Šh¬dF¬"©(m-h¤>VZÚ¥4!EW.t'>p!( vãÂ.‚âBºÐ‚fPë¦>ŠØši›hH:c[Û13“ï»ÇE¾ _BB¦ ºñÀá^.çþ÷žsïÿí¿6¹’à{Úw@®[[Œ9|˜¸™=®YñüA÷ÂÚÕ×?‰A&ôÌ[ïofŸm&(7d½º}õë;¶íiÛ°n³?ýÛ/·\ÛS¿x¶Žýc@þ€ïi˶ôXß3m'Î0y©Hï–3'OŸØÖywüÍx!ŒþmÀ½tßRèß¾÷ªRµH±üLŸÃ:Çíó™ŸÏü°»+g‡ÇFâòRféœÓœ=ºë¾§W[c´|gÖxNN£—èËíì@£ÏzpÍúû±ŠûdûÖÇ»:W­1?M}…5>q"|;ö)mí+$G_§ñîÈûðM&n´oçºû¶voêñ?N|‹wž–LŸ1¨­c¼òõØ0ë×mp·n¼«;»Òjª¹A7¸å†žçÊïÉ~ÿëçDRÃ:Á8§Tâ2ØkL`òò(½›vç/œ¿©ý¶ a¼¾LëÍûh½vÇú5›>|vçóYçš±2xvòTöÅw÷Î^ÏKõ¥}ïµúŒ£RŸdÆVðÞ €*'¼ùþËÕ¨®­‰Ä œ ‹F^‰î_.5Öâ3žËµ)|‹Á@UÅZ!ªkkáÕhÉ–³l«0F¨D¿£6ÂeãAƒ"vùV¶<@,Õp1`¬à¼Á8!ª¤‰V¹@’×5÷ªQ4@ˆUÐx¶Ðs¹‡8ñh)€>YsÉUx k?*cADf#B˜#t$Â3ÉØ˜«[³)q”†ÞxjÕ2Y(5“2mÜ(EY î@MâÉù ‰G©ÔÌõÄCCt1K×Á¦Äu )Hœ‚è¼ÊüöV !¡~Ãä"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/browser_file.png0000644000175000017500000000100511273045225024635 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö Öoyœ¥IDATHÇՕߊÚPÆs¢WݽUÄPT4JÙíÛô!Ja·ݵXû`ýGAQ¼Ú^ …Ò‹%™^Ô¸gcv“S¡ÐCÎ0É÷Í7ß9þ÷;OF¯€ËcUõêÅó‹—™Åñd¤ÇÆx2R³”E´^¯ñ<UEDù#ÔÞ'¹Õ9õzý+“ÀšÏç`éèõz¨jf-— ÝnS*ݾEÑÆ7c ªJ·Û \.ç&øôù#ÁÙa:æ‚A@EŠΟS«ÕÃ~¿ŸýáÎû„9( CD„Õj•« Óé¸{¬F£ñ ÏóÜŽiZzbºMœ‰ÓˆÞxÇ“áSD„Åb‘;"ß÷ï­eçC*• Ûív?"cÌ^…=šdDZ››Ía¹\Ràd²Ífóà’¥}qV€z0 þîØÑjµöÝ&§ŸªêvL«Õjî܋Ƃ8ޝ߼}}q à×/ßžÙù}‘pœîÖ ð0€(pü¾?€Ÿ»<ÚÕÿMüeʰ3¬!ÁIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/browser_folder.png0000644000175000017500000000124711273045225025201 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö ÖoyœGIDATHÇí“ËkSA‡¿™›Ö´‘Z+辦+Qúg¸U)Dª7>@p¥¨+IkE¬âÚºE­m‘´]¸PÛhí#ï›{sgºÈÌõ¦mÓº¤tšzzv7ô¥”8ŽÃ£Ç¯¥R©¡t:]hªàTj@÷9ÊóiÍØ·?=éFkó®¾¾7xi‚d²›/ƹp¢×Zܸÿê"°099ÀRÉc>_mió=ÝÇh®ë’Lömìl€Š×¨\F;VÁfZ(—Ë›£ R˜ùk r¹²–/® ° :Úý æSÒ¥@)RšÀx-âe·ŠÔÁ´]o_‘ˆ*¨ŠjM¶h´04QŸ´@£ÙñciÉ—A¹d’W €d²ý™7HGRõU}/AZ½!¦´R»’ï?óBºó/Mòž´L|ʰmûN²ËU\£ÀîB¢¥&Ì Ñ£ê+æ— Alá-@{Ð ßÕËÞ„Cf®„Tô"¶9žº4õD¶´)¾ÎLéB¡Tø’™.@Ñ*ã㟌lð‰âÔ³[s³s³á€© $ 9n$JcSŽ®³cŒ{Æ+@¨ˆÈÇ\LÌ܉Œ$ˆUµ2s ¨E\è?n+’PÅ|IIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/browser_new.png0000644000175000017500000000644111273045225024520 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF>IDATxÚÔ•_KTAÆ3gæìì®ér4±’a‚¤@ Ã.ô*¼¨Bè¶Â«¾‚}oƒ½ „@#¡›ˆÄ›¢ºÐ1K+ÿíéÌt‘Šîºën‹A œ÷Ì™çyßyÞ9#œs%ÔÞ@Qê;HÂõØ*LXU„N§Ó÷<¼ÕÞ~Ò3±RÊ¢„ÆÆÆŽŽNûV;çvÇAäÙlöÌ«×3Kó Ÿ\†ÎZëÂððp7P¿—Ï9‡,—yOOOúùÔÔÓ|>lòµÆZK)ˬµ@1_)Ýßߟ™œœ|E¶UûOyå<Úݲ&ï¼Ìܾs÷æÛw³§<)i9Þ„1­um]ˆ¡¡¡ÌÕë7®57·ŒÄ¡®.ICý1p0÷qÖ–&qS±@áÅ"Ùw±÷^gÇiN´µÒ$ Ö7óŒ?›fñËJMhcŒJ¥ˆ" 8<Ï ækh’#Æ?AÄþ†(ÿ „ =Èçr¹Å(Š.Us• !˜˜˜ø „Es{‰„h¶¯ÉJ«À²sn³œ€üíʪñÇ¿€¼sΖø/»è÷^šÍ°×Ú!%IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/browser_refresh.png0000644000175000017500000000254411273045225025365 0ustar julianjulian‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYsHHFÉk>ÖIDATHÇåSkLW=÷ÎÌÎìì‚àò. ¨±HP‹Vj«5McÒ‡ÆljZ‘Ú_}¤‰IÓþiš4š˜T[b[-`£MÚjlmb Šè"HQB} qYö=3÷Þþ`1°²IõO¿ädî$ß=ç;çÞ üojóæcÒ¿é{¶êhîêwŽÍú'ñKw^¬(ê' XgY,“ (%~JÉãâ,ü8ó×jwšS{V½Û˜Î©¸d1¬k;T~/Ž€ e»~ªÈÖ矙g[’—&;*(%0 ‰{¼¬­{00<ÁW~ªìsJ…AÝŒóÅ‚ðœkµoõÍ*P¶ëè÷¹™I[¶½²L˜ ãþ0tºª@¢¡?ASëÝð•†à\S”³ £wØôŽó¯ÔUô€<¼¸òÈ*‡¦¼±¡tþÍq7õ)¥gB+Ãå ­*Ìv=! „Lu% µ•ÙZïýG /­Ì!×»‡,ƒK|Š“NÐd¥*Ñ©:ê~k“Ø5%Ì8?v¥¶œ†(Ò‡ýN5÷üüÅwÍÁ«]C¡J áQÀBIAQd Æ8d-<»^îòWR‚gQnF›aX€ï€ŽêrOË¡ò«—ªßÜjì¹?/ö¸þÒL¶SÌOÕÑÔ1E¢`œ“H<‚CÕíêÀüì´š9ºVB{˜°ybÏÉ}°üºaZ»'†”`W00 )Œ ¢pù±ÀŒ3`œSœö¯ìÚIÃPŠ9œ0/m"V ¸²~©Lɉª×Wª©É:2SX[˜U‘`qAl,Ž€=3+ïÎñÛ7rÄ©âÊ3‰ §úãîˆàB“_Î…Í`Çûg\ӒʆQ8g#>Bù†G6W—Ó7l7€" º¿=ñ„IõŸo”m2@@6,|ZÛ¹;ìýðjͶöh_dÒM$ëe…EaW‚‘Üþ÷ý²þ‘‡µI™5"A4›Œ³à (ËOEã™[‘¾ßwME}ì´2w¤K*¯Ví¾_½až:î÷ï´É2›ÞsM'§6-Žì€öÞQA YZ²ýè¼'òÈ_íõ+:ïôì „s ÅíCÌ0A€åyIè bÀC±÷ýµÆ3]ëO]ìí*ÝÙ°Ÿ3ÑAú¨ÂdÎÉ^»ª$uÝXkS$ᚣ›žñP]\IÁ‚§æ b1´Þñà…¢ùRiA–Þrkè£Á‡¾ð਌’ Ý¥#?/ )IÒðûõ°n q(!äîƒ ìþ¶iœÐkÙ^,ÎÑ< LEù™r!Ëp2™­É,‹cÜAÃm~fš4ý°=<3Åië¬â×>»|£?ÐwóܦîÓû÷Ý$^èô,ôúÂE–h¢ÃFœvBŒsø‚Z:ûùÉó]ߨƒ=­Gª¢œ‹}ZñŽz°sK÷©/o°G¡e­Ø´<}Éú­Šž¼”¨U1ƒKàß…‘žæê¾ËíBQ£˜!@–UT¿úWý{çhÔiP¢$‡K™›]87èòFz<Œè»ˆDÉ}ѵˆˆN‰cŸ0£0XS±ü§õÛé68˜\¹"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/browser_root.png0000644000175000017500000000162211273045225024706 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö Öoyœ2IDATHÇÅ“OoEÆ3ÙÝÔnŒÝ8ºˆÚBªhDUªÐH½p€€ª¨µdU‰ (ŸÀ§j+*_`…TH' ‚ Ò:R/=÷ÐB9A‘5‰B\»±w‡ÃþÑÚ‰K1ÒhßyçyæyÞwà?¢ßÄd€Šÿûú,üü¯Ý¢çJ vMS횦*ò Ÿ]A Î?åM³cݶ,€³°Þë¼ìüñÝ»ázui Ÿ°r˜Ùxóþ}†ÒéŽý~IÄaàíÕU¤¦!s¹Àò¦ÉV¹Œ‚áK—zÚ%{«J™H„à¿M]dí½lËbäòeÚJªDtÏßåMU«y ÇŽa[õÞgóô+¼ðüqNÕvX»v¼i²Q.côPÒM ò¦ ìíA2‰mY<5¯ò׋'{•x,F³Ù$¾¾Áù9Ķ1¤ If#¸ZüH«F1<ŒmY¨O-d:ÍkÙÙlÖÛW°÷ÒIôÛ·Y,˜)ٰ틬Eâx(Ëøæ+ښ΅ó¤R©0Q)@*•"}ï‹Ì‹ý·é[?â,|MKÓƒ¡¡!Ç阭V ÇqL§™|ð€Åùù¨Õ!nG îœ=;÷hyyáüêï|ôñ‡ûˆo~þ®ërã³y”@µ›íÊyÊ'ׯSN$9s¦øîÊÊ̓,bryùÛ+Ó……‹ÃÞ£;!¼{8ŽƒR %$¹IÚ«KˆìÛ¨‡wPJQž.;ùò—¬¬ô¶(ðØ0 t]GÓ4t]Çuݤ²½ À/lá8nxƲ,Õ«Z”@J‰”C®¡‰*®ëâº.m ~ýs€Gµ'´Å`x¯÷·)0Ö¸dh4=ðL&ÛÆy'v©Žó–ÔÙ\'JÆ{hí(ðã `X \×àqm ±³Ý!½Z­Ø8Q"°Ì0 R©ÉdÄ㌎ŽR¯×™ššÚW·x<|Fu@u³ ߢĕéB•g?|Kìé–Ø4èê9ßÏ æï9~î®·€ào`xÉÙïW—"éuÿìÊŸŽ?ÿÇøê'V( µYBIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/chord.png0000644000175000017500000000707511273045225023267 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFZIDATxÚÔ–MoãT†ûºv·I»J+ZÔfº€¢ü+V°aÄŸ`ÁŠ BBìX±@H hGŠÚ$Ž¿È·í{X¤6é—`ŒÄ‘,Ÿ{lŸ÷ÞóÞû"ÂiÆs0 ÃLÀ`¦iEžçq°×¡fA†¤IL†ø¾OQDQ„ïûäyN½^ÿgÓ4QJQ«Õ˜L&ضÃǯ‘$ õz<ÏQJaš&"‚R ˲X.—Lg3î< ë”5=ùúTÞ~÷}ùéç_DD$Š¢ªîaV~Ç""òÁ‡É[ï¼'»/¼ø&°y/ZkFQŠë„1yžW“)}­uå×Ý-öö`ÛŽºâƸ).°srròÇê#ƒ³ó§<|x"ÄqL§ÓAk]ùEQ$ žç1™Lñ|ŸÇ¯¾òè“R®q°··G«ÕB)ÅÁÁ>ÛÛÛEQ».e¼”årYŠëbw `ss“v» Àr¹¤ÙlVÏZ­VU¦Ò_F£@îÝEÓéÛ¶1 ƒ$Ip­5I’°±±Qù¶mW%²m›,ËX,ÜL¾ @Ñëõ8;;C)EE\^^VIïã Óé°X,ð}Ÿ+•»Ž´€  Ôž±á̉ˆ,îl8Wçá–äþ +€0¹ÙpžOËü_ÿUü5b—; 3<‡:IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/closerepeat.png0000644000175000017500000000614311273045225024471 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF€IDATxÚì–=kA†ŸÝÛ;݇Öú8iÝ›|b!§P0ìÆøŸØ?#­k—@¢JEÀUŠ@ ƤO™ÊŽ"aKòÝyS¶qa‰SV]^XØb†g†w–YaŒa‘E+ÏÖÞþøþuÿé‹Ö#G©!Ä8M’Ÿ'ß¾?”£ŠTSÖ•=`¿7Ú~8R2º¼8žXDe @=n –*5”ëò§þkZN!@É#®Tñ<Ÿ4M§æÈ")ópåºxžëy(åÚÜÊ †|@Ì¿VŸ7·_½Þˆ¤(^ÏT^¶:[õ¸Ñ "=Bé8v‘ÖZ/ÕÂð À™0µçãÞÇ#`×Ïû’gŽi÷ýᇛ{–ev;h®olw6wâ|xŒÝÖÚo¶‚ ê–ü 7Y »€0*ß3YÊÿ&ÏÐõÂæz±€»=(„ȵ}& W“q}4º$ËR&“ɲ5@ïÓ‘úï€ÏJ¹épð;±¶ôþ«˜G'‚uý2ï„IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/division-type.png0000644000175000017500000000704711273045225024772 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFDIDATxÚÔ–Í‹EÆŸ·ªº»úkf6ãìÌîD0x ˜Õ¸k¢³¿"ˆ¨hŒ"Áƒˆÿúˆ%ñ’(Hˆˆ² ‹9H+†²\0A‰¨!Äݯžéªò°Ž,¦gfs°Žýë§Ÿzß·û©&c ®åb¸ÆKü“›gf¯ ˺ư$‰ß\Y^úú?«`f¶!‚°x[i¢üJiGåÛ°P:¸åÍà¦Ý3%ÆØëŽtŠg\/x^pñFu_o·ÖW£n‡T– ¤Ž1š¾ÿîÜâÈq.&¸kDô1œ pÎCÎÅ«Ÿ}tâ­CϾ)•=ÛÎ{Io¶‚ Ú¥µ.c,%¢æÊò’\›»ë¾–Ñú¡‡=7%„u£Òúô™Ó j«nÏíwö4Ƕ薽û…m;%bLÿY¤tMX(î®÷(1~¹uÚ­&õ£.”ÊÀ8ž¥©YþêË+#+°m§Jg)CÎ8c° ÏóSËvz0† !Þ¢4,@k ©¬Õº`çHéz¢4QÂbIÚ¶"ã–eI!¬¢12M´ •  IÜ‹[Í {3à.çüEÆØƒ1F+d) •º€«µ>7x2c´¹ Æo`ŒM5HÓ˜:íæ¯§Þ÷âßÙϼàƒÈ?uâ«Ø#OqûýÈŒ5Hâ­æº•Ç._úÅË~¿r Jik¬Ê2ôµÎý2Û­&ˆ(—u;«ØÐ,š²ÆŒfÛÍ¢!›Ÿ=´ ƒsLä醽¦ÑÐ2ÆÏÍ~!¢‘çÁÌl£&¥Ûðü œ¥É[Ù­sš#½yÏ÷kI’œÝÊöî;p½t½—ý 0‘$ÉÉ\ƒ;æï¿§R:îzA]k…vkãñ-ìÁJuú˜týºÖ ­õ{lÿƒOMÖêǽ ´µÊÐ\_[Ì5(_W=:Y«×é"Š:*‰ã °oþ·\©›¬N×é¢Ûi'ý^ïç®29}´:½Ó–®n§~¯w!wÈ®ç¯JÏ_³ç'O/~úá ËÖž¬º›ìG"þbáäù¿t¾ÿ›ëƶE„O>ÿøƒ•±qý¿ú«øcæCLJ©-#IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dotted.png0000644000175000017500000000602511273045225023445 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF2IDATxÚìÖ=KÃ@ð'¹—äBLTÚØ.N:V”ŠT'õøDpvÜœT\õ¸º‹àw(]¤è¤“‚Кˆy=u“ñ¶Ü|?xøó¿Ó¤”Pyô²Ù¹…-¥ãF[)À¹¡¶"B¨Z@Ó5µ€ò)ª€ ¨@×ËEF.–ÖRÇ6„Ø1…5Ctro˜–ø7`ym£åùÍë1Çm˜ÂB–eˆÂáÌ/®ð4M}(Šüùî¶—”ÚuÛóƒ›)¿YŸ¨2†(BJùÜãÆ>ÄñÇ1€ÇR€í¸«5ϯ{Ž;‰<Ï$ñÀ)PÊ JâEéŠ(e]ÆØƒNÈtžgxÂ~ø6ؾ¼8ï×У¯ëO¿®÷QþîÞá&¡ìõìä û—1ÕTÿ*”ŸB^Uj¸Iß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFWIDATxÚìÖ»JAàn{#&*ÉšeÓXi!Q"­ÔðD°¶ØY±Õ°µÁw6´ÒÊ‚¸+&»3cA‹DQ§Ët¾áðsέ5LúÓÂÙ¹…-£€°ìŠQÀ²l³-bŒ›%fã)#`”þî-Ly©š±]wÇq½FÙíxî¿Ëke?(]ŽesEÇõ¦)â¨só‹+V’$h­Z@ @)Ùº½¹î *ÕõŒ„WSA©0>‘qÔÖú ,Ç …e×@””u„2VƒÖèvßꆙln5ï¿"››„”)z½nÀ1p.ç„PH™(„1­¨o[Ĺh!î)cÓR¦x£fôÒÞ>?;m~´à‡ýòÇ~P>ß¿ŽùAKwï`“qñ|r´ßøKL‰é_…qà}ygØ¢V¸rIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_f.png0000644000175000017500000000603211273045225024111 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF7IDATxÚbüÿÿ?-Á¨ ¹M­˜„E%’™™˜l?~x¿àȾ­û¨jŒœR>¿ pÕ×Ï­~ÿþÍÀÀ°jAdëìÍ$"&QÇÈȸîó§‚?¾ýBÕ âÖbçàøôòÙ‘—Ÿb``8EµH¶qòR“ âààdøÿÿÿgC3.ª¦".n^?^þ FÆ/ÿüv```ŧž‘œ¢"½°~Ûÿÿÿ™fMhò I>øóç·ÑÇïŽÐ$£¹ù†I213‹ûúù(M,àâæ5ùÿïߟ¯_>Ÿ¤‰Ü<¼?þ8·oûºoT-*lœ¼%¤ä> ‹ø¾~ù¼‰êe;;‡ ;{èçOß½~ùl±úHJ¦6N^ê¿ÿzpòðžŸ4±`´Fšõ¦pk(n2IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_ff.png0000644000175000017500000000640011273045225024256 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚbüÿÿ?-Á¨ )Ší]}åù„ó~üøÎùþÝëâÓG÷}w÷ˆbeeóøüñýºƒ»7o@×ÃHl*²qòfSPV;ËÂÂzñý»×ó¿}ýÂÇ' ÄÂË'°èû·¯v?¼KرaY6ÙA$"&ÂË' óíë—Þ/Ÿ>ú°spÞ•¨caa9ðùÓ‡?¾}e§(…­™˜?üøîÒÞíë Ÿ³±³kÿøþýжuKص1…, t ͹<¢ ø…íYYYo13³¨Ø:{+ò E°sp1þÿÿ﵉¥?Ù©ˆ••M”‡‡/ƒSëÏŸß?ýxxùxxù#ÿýþý[çÿÿÿr¸ôÉÉrrŠª_>¸rÁ” ɹUÓXXX­fö7P#™}ÿþ•áÝ›—Gaÿü1úþíëªd4vNÃ?¿~ÝÚ½eõk÷ff½ïß¾¥Šlìì&?þ€»–‹›G‹óë—Ï”ûÀÍ7Œƒ••ÝáÇ÷opÃxùø=þüùýh׿•)**<¢ºÄ¥dOýûûç×—ÏŸÖØ8y[‰IHɉˆ¾{ûz6Å…''— #cË›×/vm^ù™™…Y‘ƒ£äÛ×/âo^>›BTòøÿÿ?NlfãÌní襎,fåà¡dnëʃO2f­2‡¿€˜rº/ÈxIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_fff.png0000644000175000017500000000676011273045225024435 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF IDATxÚì•KhAÇg·ûÊî&›Mš¦5­ ¡ ¢Q[I“Òš*Úº¢õuõ(âE³Ûl2Ä*69x¿ÛÀ7óc¾ùÿÿƒ@Áß,üåúXµ°Õ‚BͰ§UEzôÔøêq»£ø(„p§˜J^ŽMÌ… ÞQUåí“‘ûá_÷#RQÃþ#eåëÞ¯ˆK)¦Êí|ñ5Æj=$‹KMŠ,&)ªÍî(~¸).&éø—O×_L=óQIiùešf U‘o//5ïô8]î ‚[šª0»ÜžK cÅTYº¡iª/—Ëeò~ÖÆ3™Ll «MS >'ª1GÅTòiâëlëÃÎv’$ƒ¦iNtµ-'æ>gžGµU›·û(áøéJÖjÛ€ `&:HÑ4ËÙ8>@RAŽÍGOUXv#‚"¯v×í£^Ï<ƒy©ˆµr-¼Ó&H ä²Ù:‚$ÞY¶qü1-’0 o·q|³Ãéê$H Íe³Õ(жä-ÓØ£áÓÌÜUeÑLÌÇ›F{»û;[ÃH«©ä|Wg«06Ô×—ÍšwTY‚‰¹ÙC“Ãù kš^Y_õßS¿+ªÅièúºÅ…ù§?zLÓô*²ø>Ò^,ØhNx ]‹ýXÓ4³TEZà8á5t}ª`'…" Ã7§5må0ÊBo53™£ƒ½q„š '¼º®àì¼À¤5å'€fB†ž^¹‘ã·!àUEšÊ;*¶î¨u¸×¬ ¹ËÊwèim|$Ò3ØÓtÜåöÌp¼Ã¿”LìÛÜËÙÅ‚»ÔSièéé‘Ýïò$UÉZ¹ó0—«J&âÍÀ°¶”…>+‹KS‘¾ðÄÎ@¨Šemç „ëæçN®–e¿eQmÃM‚ÀèØà¨ñ70š èš:þ|rlüõû«Ð¢"Kt4ò²`Àÿçß|=JÌV—ƒIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_mf.png0000644000175000017500000000633711273045225024276 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFüIDATxÚbüÿÿ?-Á¨ %š­~![6vvFFîoß¾d3117200ð¾}ý‹—O@@AE#îÛ—Ï_>tüùãÇu’â€_Ђ‰‰ñíêEÓmØØÙï²±±ÇüùóÛ…•õ’€ °¼ˆ˜+++çïíÚ¼jî±;V’d##“Îûwoû¾~ùÌüñûÞmë–üÿÿïß?AaQ!qO66ŽÿþýcÔ10c$9’ÿÿÿÇ}`熷 ÿþ•Ü»mí]VV6 N®ßœÿþÿ{þÿßß8FFÆK ˆö¥½›ìß2000˜Ûºpþúõóƒ¹3ã÷ï_YçLjÍýñãÛÿ÷o^­Ú¼fQÁåó'ÿ”~|ÿÆüáíë ?¿çþðöõD¨8÷»7¯&ù‡'ŠüüùCúÝÛ×G¥4Fr ;ÿð$gQqÉÝîÞÙ³uõ;ªçdvvã?¿_'d8Ùppry}ÿþíÕ‹ G€B1 écÜ<ü6¯_>+¡ºœœÜ&¬¬lQß¿Yµ}ò3Diúÿÿ?ÑØØÒÑÚÑK‡=Œ£Uæð·0ú33øJ*AIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_mp.png0000644000175000017500000000617111273045225024304 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF–IDATxÚì”Ï+DQÇ¿ï¹wæ½ÁL#?‹…¥†…•‘ß5Fò#)IYùÈ_à¿ ) !‰& “¬m¬(%cfÞ}×Üûæ] KÅP³2§N:ßΧó££)¥PHÓQ`+þ€|—ŒŒN/ûJË*¡aMÃçö>!t)çÈçØÁæDgo¤¦¦®a•ªK™­O%_ÎãÇ—ywà{”r¯¶V: _i;!´öhw=ì1Ì꾡 Zî¶y ³‰ÛÖ¬”r¾Ì˜ÿÕˆ\7W‘L¼ìgÌzK&ÖÀ‘Bz<^RbVzåäp+Ã2©G¥TUÞ€îÁ‘z)²÷—g1·«ØÙ÷ôùé‘¥@ã±=á5Ì®—<€×ðõK‘=ûÍÚl›Ý|†ª•sv ½‘F ø†ék06:5—!”.&ÏѼ6³^¸Í?cÆ…ÛðÎmÍuݵáI½²º.ç8ò„sfVzìú"žúRH)õ'÷E›£ã3?éÈ_ï›Û¬ÄqäÎO:­ø®‹€" ð€%~èî£d©ÛIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_p.png0000644000175000017500000000570311273045225024127 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFàIDATxÚbüÿÿ?-Á¨#Àb:{¥òò š033ëþüùãÕëO“NÙûŽj>à¶`bbz·vé,+ffæÛœÜ¼æT "&&f­ïßö3000üüùó1#£(Õ,°wõebcgWÛ»}Ý+Ûß¿ Z°°²)³²±±‡ÄdD|ûöEèßß¿?ïÝúˆj>`ddÒýöåsÛ¯Ÿ?4¿ûòñÍë TMEÿÿýÕ}ûæÕ‰}Û×í¤I2ýòåÓ_?ž%'0Ž×£ŒZ@{ ÄŒPÁÃÑOXIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_pp.png0000644000175000017500000000613111273045225024303 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFvIDATxÚbüÿÿ?-Á¨#ÀB ÜýÂ빸yÅMüø~éõËgY,,,,â’²«YXXþþýSáÓÇ÷åûwlØE–ø„lþ_^·l¶);¿  ¿ ˆ'—Æ÷o_ÿúÊÃËŸEII½÷vß?¿Ÿ°spв±²é~ûòyöÖuK>|ùüñ ƒ(Y8yб°°2عá'#“!Ã66]F&Æ' œ\Ž¿~ýÜCV°²³ë²°² E¥zÿøñÝäÏïß§vm^ù%2)O›‘ƒSØ7$î1 +[íÇ÷oɲ€‰‘IïÛ×/u?|·ùöåóÑ»6na```øû÷/ן?¿—ÿþÝñû·ÏÁG÷ïx‰ÓÿÿÿãÄ®>aóì]ý4‘Å,ì\%=£×áÓ‡Œñúàó§÷ç¾ýz YìÇ÷ïœï^¿\@l>`-®G-µ€öˆùÁfÈß–IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/dynamic_ppp.png0000644000175000017500000000637711273045225024477 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚì”?haÆßûòç»»\b”¦(â ˆñ¡ƒX0­¶Ú#¡V(EëÐÅÕEAtr-HAœbƒDBCLMЦŠœUÚBiþ\r÷Ýwÿ¾sŠÐÔ%“yÆç}àÇûòðr®ëB7… Ëêþ€w§ÁøÄõ§ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF IDATxÚ¬ViHTQ=÷-ófFkFG_N:•¥ØæòÔÈÍÔ²D¨0ˆ2S3#5H’El1BŒþ„ýˆ(èGEA¶€I›XQ`Dš[Šû26S·M4Žc½±.|ïñî=÷œï|÷ÝûC)ÅÿŒáá1bÿÌ@F Zš,×ß7((kß'K€W‘ÃŒ™‰F«± ouY@¡þŠQ«•”eÉ·öŽàý›·4¹$À²œN–qÊ êÌížHßU ²f†Èèj®³|iÖ®²ROýsÙrZqQîãÙ³¸HqiÌøöô’õakß54æ—¨élYåï«AL®4ްµ6}„…{Ïz˜švŠþs!%äeŒW ”RnºÄPu$½ÀÜýú 7ß iEÎq?c@µ#–™.ùåòâv¼£\OÚ±ûôÕÞógs¦U¢K%y±mº¦xðmÇîv›=3¥‰&[i¨ËÍ>ûÊ£ó¾·Ü¦Ÿê¿£ÑB…RLâ诺ÛÝ]wP]šïÁZMõ\o«ž´¯S˜¿>uAhÄ{bjïÄ¥5à­ƒwÑþT0ÂjYvä̺ì€aNÞsK9Ú*ù…-ƒaufš¸hùm;BÆ–ñwY‹"E» *U†R¥d¶))¸IèkX"ÎQà %ç‹‹–ßàÀ€À‹'“÷AÔªu!zÑpgÆLR¥†Ÿ—:K-üEblö9ÿˆ¤ûm¤mzläÔ‘|’ƒÈè8w½è{Ï[4xi=tàxA¤ÃC¾`¤è'«S{H^h0ä¬,S–È}¦f¥N/zé}|¡T¹ÁŒÀC©Å‹¯G¹©74x`À–¥³c–Ú»™ðqÿ’çùæqë8Þ6>ƒÅ4ôõzý‡šóU³ådWxl#w$£ŽÄ¿mºk3â6lMyø 6ÞaŒLŒ-&MõwÐÝõ™8ëÿƒÈ¤ ”þ¼üˉú§F)¥?ŠªaZeÀ³IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/edit_mode_edition_no_natural.png0000644000175000017500000000734311273045225030054 0ustar julianjulian‰PNG  IHDRàw=ø MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3bKGDÿÿÿ ½§“ pHYs  šœtIMEØ 77k|óEIDATHÇ­–[hUÇ¿™33gvvg“Ým.c©­ 5‘Ø*E…ú XE苈&E¥Ô¶>ÔFÄ*yÐÚÆÔ*Zb¨O­/†R•V b!ÆÍe7{›3—sóA#1t³ ôÿv˜?ßoþg¾ïœQ`•º{÷‚” Îaêú$…[ mõ¢9“ÍrÆñÒðêF‹ììîU8çêôÔ5¾ö™ºz‘δfÒ™–ÛNÛÌ[Ú çÃÄ'&hm¿MDQÄ8gµFEïîÛ·-‹‘Ÿ~ÏgZÚ{«åbïÍ|ÿK !kšFÕ˜F¬¸=h˜æsNªLlAC€\pΙ”ÂkhJg;­xb;€ibÅÄ–uÏÞ;îìêÑêngŒsÎ")DÃ-jjÎñ\õð‰7Û‘n¶2F÷ÔÜÊð8LÜðo!eÃvÒ˶{°eŸÛÉýÕJ !ê'B!8•Ròz…>ýB¬½cÛ}vÂÙª!ý]×{n(¤æ Ý0'UU]¬ RrUU©eÅ£ûï÷}ï¡À'íñÆ‚€Œÿvm’f·´õ˜ØuššÛ2@JáùÄã5·r3úØøå‹~]€¦iiˆjêö‰÷A2•BQîXšÏíR€‰T:‹0¶0€ >ñn(ªz¶´\èË/Îg¾ùjÄ_w2Bˆ!ªïRå¨aâ+Š¢œc”ídŒÝ ª¢ä¥”—knå‘r1ÕN8CåRá”W«f¶©¢RD©A¹Tü\Uc¿ÄíäL"™Ò0Æ&À;¯™©VÊOææ~^ÈÍïž<J)¥¦iöž}o¿kwŸQÀ9ç4 )q«P)ˆ<Í(Ý ä¥”S+>Ï­È0¤à žyÐŽÛÉtÂIu&>g˜¸³þ ñÿÚ°e«Bˆ'|RÛúþ—œ³++¾á¡·@7 pRÍ;LŸN5¥d¶´á„“ê±â¶S÷Gº%’`lò½ÚK”F§—sƒãß}+žzö¸‘ζì¶NFC¨!ýÝ0 üÀÄÖ„Ws‹uj,ÆMlEš† \*|ò!£ôÓï/ÉO"ét&N$.Ý0AJ)ÃÐg¤æþSÕÃ4 gÖé )døŸ>»0BÖ¶â·kHW¢(t¥ç+¥bG!¿=fzÝ.:óþ|yiáã¥ÜÜ£óÍžZ[@ÓQYQÕ«nµäæþ¼1úú±þ#Åü•r±ñðÉGïÍÀl½£Âs«Ó̤ýÕrñâraIá?µ!@# ½ý €åO„Äs ðɯŒFÑ-¬( C…aðõÃ#ºô7##4 ó›ú«ØŒÜjå!žläû ¢¨p.IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/edit_mode_selection.png0000644000175000017500000000670311273045225026163 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFàIDATxÚ´–]hWÇwfg3;l’Vc4ibQ‚`D‰â׃ڢҗJ_’ú´>ÔbúDó1ŒÄDE4R‘H-%>¤†JqƒP‹1³®ÙÙÌîÌäö!QטÑì…Åùçwÿçp?„”’|å}‚V®ZóM^Z¸ >¯€p¸ ¿%RÕP~BùäŒ}Àï3s^¯ßÞœJ»}À‘|V[ ›þ{Øi·84¯€©©©@JÉD2͵[C$S“'€ÃóR^OØ\¾1HÊq?ÌW‰ðü)|ÏÇó}â › ýL9ÀOóðýéäž7mÏÆœ½r›D2}|®Æ€¬ç“õÞÌcãtöýJhii™|ë¢Ì•³mמ•Ÿq£|i%EÅ Ÿ¸56ñôIl㥞“¦bYmmm½išÿèºþÔq&GǬ¿œ8‡¡ë´þÜHÔÐ/æT ijš6ª¨*Aàã¤SfÊžØu©ç¤92nšæà¾ëºoذ¾îÓâ(FD'“Í"¥Ä¶måã?ÛüØòeóá£kgû1ËŠº,ËJضŒÅb€š»F|̯B¡ÕÀÖ× &¥ æìÁ`¥3Š, %s’þ; ñg5ÜYÎÄIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/edit_redo.png0000644000175000017500000000674211273045225024126 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÿIDATxÚÔVILSQ=ïÿÿúÿ§£´H5AEˆŠCÀˆ‚Aq@DKpaÜ8¬ÜÆDãÂhbD1jŒ(1¢](‰F#Á §Dƒ&Æ™8ÔÚJÛÏï§ÏE - ,|ÉݼܼóÎ}÷œûc ùÈp€16¨°ÅÙ³š£å ƒ½XöôKÆgNšI)eŒúÊ4@·âw/*wÌ ¨Ýg !«cê?BI–m£Ù6kî‚to—eåŽe;CqôÆ$â#‹’<2195/m\f~BRJ–}TBŠmd¼Ýh2dIÇqxF“ u G쪃ÝQŒNH*Ì)(Ú¸iëî9qñ£,²çÁqx>@~çû¼?QáXSÑ£iGD€â²ÊÓk6l©’õz ª¢€ƒ ”BG)@)8Ž"Ä<ýôáÍýïß¾¼ò¸]ŠßëÊÍ/t,©¨®EêOÖ»võÒî~u!:ˆ¯Ÿ?¾o¿ÛRÛñüéy·ËÙVÊ…åÙzƒW/7\;}¢f}ÝñCýÓzš›÷ß»sc»¦\}u˜Þh²>{òàÃáý;‘„&íÙóËޘͦ欘-/LYS¼ Ì×ùñÝ ·ËÙAt„õÃ)úˆŠbÀg·Í-YzeLzƺÌûeÃaUm7š,0˜-RIÙÊš¢Òå FSÚÍIŽÉ(,Yz;)e¬•çyÍ#àówyÚZ®ï{ÔÖ²WU»=c ø}/Zo6w~í0Y¬`FXí¦Å•k·ÅÆÅg”×Ûæ—óáÅú£y÷[›ë¤=ä=z4 ` O»¨ªÀêäÔqçŠWmO;!ä¿ íÈÀO˜8­ÊkKèh%ÿý¯â×â#Ókƒ°åñIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/edit_undo.png0000644000175000017500000000673311273045225024142 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFøIDATxÚÔV[HTQ]g^wfÔ±qftÆ|dÒ){8!NOÍ>²²$5«$­1 Á è#ª¯ÂψL©üH#ì­FYI ™6Q’"f>ÇyÝ{Ï=}ØG :Ž™mØÎa±{/ØûÆæ3È| €10 e¸Ñd^9nº”,å±ÒòÚÕë6ìþÛdÈUÅ%gïìÜ›ŸîózÿT€¢,.9Sµ7?Û51S”%ÁeY©Ñj̈́ŜL–Éd\qIYÕ9Îñqˆ”B’$x¼^8ÇÃ?¾÷u÷õtw|±|Ýûík‹Ïë Z èäéšÜCGó?GA)¥T’ R J%P*Aú}÷xÜúñýç§Žö¦ÖWϯ÷÷õ4Î(’ºñPùù«7 !„çyPJ!ÒIB xaòxT¢<.Þ¿mª~òànA@Z[^ÞºvåB™B©c „Èår¨858œZ …B n×DQ@rJZ¶?ß”†={Tùà‘Kóúd<êj«ªß½n¬QkBôºp½%™³h]Ttl’ŠSËE‘‚—|yÁ”ܾQyÜi‰ß‘•“>Ðß×eïüÐà ×—'íKN±LæX*Š$hƘ Öhòcâ·‡„é Sac#v eåúÔ-)¶ô‚YŠè˜8ëkÚñ™pVmÊÈêõjØB ×6[ÆÝ# Ú®Ž¶ F…_•Ó’/NXvlk枃ÉlTrœ´3Eh˜n‰Õ–q)3+7ÛårÂívatx°mÎû@¥ât«­¶SVÛ¶R­&TçtŒRŠžîÏ#ï§y=î®Y·èψ0E­Øµ¿ðœÞ`Ö1ºŒŽ Ùß4?ÞîOþw-b¨(B£ ÀÐò¢¡ªùi]©Àó#SÁg/@@T‡n{gû“úêŠo_íç´2ýsA„qÑò¤µȃÁ“ÿþWñk.cðíˆ6IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/edit_voice_1.png0000644000175000017500000000631111273045225024512 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFôIDATxÚ´•?hAÆï6»«—1Â)‚œ„†àŸÖ&­Øb#he©µö¶6ÖV‚ؤ°Kkƒ…(æ0Ä“EÝ‹ÙÙ}™çy{9WïƒÇóø¾yóæ{#ªJDdh˪ºD TöÙ·NRû äåùãÈ‘[ 4&úš—€9wêйù ûŸ¬Yk:"â‰TÂÝèé½Û×ïŽ, "+rÒjuªîA#Ã@–¥t»Y«7éÁ£g pëÚ¢üqE"r¦€ UAM’Ð6N~#ê'Þ«À½õóCª43Gê k“_ÏRlftÔÔ\z¡:Y›Oâ¸G ÃÄÉȯè%°Ú¿áûaëØñ¯€ÚvôÝ3&!k ÆÔƒ|Ý«@U·€%é¸×³¬^¾z£¹ùac¶½ñn}ëcûýúÚ›$ËÒÁ«ˆç‹ÈÛQz ƒf‘ˆ0 œÀ2ºª-ðYUã¿ò#?,8²·~sĹ1= ¾{ŽBDªÚéõAÜNö%n»™4]ÂÄ»"2Üy¡Ä”°¹Žç†uWTzØÍ§‡ä<>ý‹À¦‹Ax ´eDUó7]%;Àk`˜–äþ¢ª­"T€C®/iÉ'RÕŽ ûôÿÆþ£]àç¨Ào§t5ÍIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/edit_voice_2.png0000644000175000017500000000635511273045225024523 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-Û cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚ´–½kSaÆ'Æ$R35DqŠX)ˆPb«NEN:¨ØÁœJé ‹SGG‡þRœ;tÒAŠuu©‚‚ ­Ðö&$Mïçqð½!½ÜäÞDóÀ˽pÞ{žóñœ÷½¢ªtƒˆT{À{U]cdìbž# ˆ$‚0½ãÃ" ›``d#MÍ7€K&êœ)SCD.nG`–ªî¤&‘kÀ˜=>à'Ì a‡/+«ëG¤¸0?'GJ$"“]œ‡~R¤ ósÒé¸ÑúLo]ÀIr—IX¢¢Yiæ¡+VV×5.ÊÀ`6bû ü®€Ÿû®ªþHê„G…ˆÌõŸ_À”QÕð¥£`_U·S«HU7͈l÷:ì[ƒÌD;9TMcËÀøäåêÎýÇKUIåTU±[­åg^uÎAx ŒGö”ÊcçGNo÷Cà{^øK "Yà9PŠû Q·<×¥‚f£n…sP¦»9j£¥S£žç¦®»ªâûž†M¾LôØÿqêêì¢cÛ}¸ŽÓVѶYq¼]|ñrY2rÚ¶[}©ÇóÜcYUÝ‘oæjœsùÂ÷›·î2V9óF=[·öúˆ‚ÀDZí|{TÕ^‡›ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbIDATxÚbúÿÿ?-1ãÿÿÿh ˜h hoÁTàî9ÕÝ?ÒŒÜTD0’…„EµÕ4õŽÅ¦u:¸ùsP=½ûºíÏŸßÏ$eÊ4õŒÏû…%ZP=œ<ƒxeä•ÛEÅ%³þ3üõâIßã‡÷jìÜðƒª‘ìžh#%«8‡›‡Oýëç7Ÿ>~¸iÕüãTME.Þ¡ìjZzõR²¥_¿|fºuíBÿýÛ7j.œ9úƒ*9™‰‰‰•‘‘‘ùß¿¿ÿýûÿéÿÿ¨âƒÀÈd)YÅÙ\Ü< Ÿ?~¸øäѽø-k]¤8ˆœ=ƒødTzDÄ$Sÿýÿ÷çå³ÇmOÞm9¸{óoŠ#Ù+0Ú]AEs/ŸÌçï/?yx7aóšEçˆõ5 !B"•ÌÌÌ’Ïßo{üàNãÁÝ›‘g-x÷öõÕwo_—îØ°ìôhq=jÁÀX̽;ÜüZ×ÇIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_bend.png0000644000175000017500000000631611273045225024411 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFëIDATxÚbüÿÿ?-U,°´ww4¶°g¡‰ö®¾¬*:såU“ib„´|š‚²º¢¼²z«“gU-pò â–’‘¯c“–’+ ªR2òÅÂb’¬¬l Ü<¼ R2òe.Þ¡BT±ÀÜÖEŒ‘‰©ô×ï ß¿}aøúùï_?ùYYY+‘Õ±kÁ×/Ÿß?ºwK–AF\Röòû·¯’?¸³îÝÛשbÁ•ó'300|ð MÐááácxõüɵ]›W} z*beg—c```øñãû#š$SNNnõÿþýúõóÇ ª[`çâËÈÉÍóãÇ·ÍwoþGu DÄ$ÜYYÙ”Þ¿}3‹êe‘³gˆ¸Ôäß¿]yûúÅn\êÈJEîlŠÊê󘙘dž<{l~tÿöÿT³À;(FAYMk);‡Ù‹§R·­[r ŸzFB޳W°;;‡7¯2/'7¯ïïß?ß½|ú8|Óêû 9à ;7uYy¥ |BrÌ,¬²LŒŒ¼ŒŒŒ þü~ðé㇙¯_<³oÇú7Äø#ˆþÿÿ÷íï¿ ¿~ý<ö÷Û×Ç¿ý|òë×Ï'?¾{òõË—GömýGJ2ŽÖÉn`Y³á]ÄQ!IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_dead.png0000644000175000017500000000640111273045225024371 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚìUKlQ½3…70”6qøKùˆ¶+ãÚEë†D¢¤Bc­Å¤‰šèÊM]ºvkLÜ»0±~j¬QlD’Ötï_ÛH„–b Ì 3™7.\©T!¶ cïöž{Ï»'çÞGéºÛ4lsìü†ÍÑã—<ÞÀ(bL°ñuU¼uýÚàϘñ3žqv·+2¬ä?O'ïݸÜ6Á.ÎÑç î;`f-`Dˆo…qy|û½þPoCªƒÜ^t$‘ª6c4M†1±‘Xâ—ÇtŒHÓTÀXUmv&Q©Xx ²ÅÚÃ"ÄÄmvçÝ¡pôäb:‰âãg/Úîµjy}Vª‹ÍR±ð¼UªSqxxŒ³;=)BÈšÀWFhºk’¦éA¯Ä3s÷åßÕRíÞ¢ðÑÑÞàÞ9Kw›¯–_ç–Þdægð–Ù4ýxšÇXyIQ‹ÃŒÈ¼¥{plìôU¡Z¶-}x¾êpy2‘X‚ûSݦ‰Ÿšt{ýÃ&3 šªÖKÅ'…/Ëç³ )2Ž"_°ÿ6gw† !¯¤ºˆW󹇳37¯´í"Îáê÷ï8dé¶B©XÀËßžË.¤t€ÅtGb‰}dwí>XxÀXyבD:! i*4›¤z­‘ztç‡QçL©5Q°"ƒ¦© Òé¬d(3b½²Q’Zaò¹OSõšÀbE¡¾ãÿ¦;ÿÁ¿KðmQ€ñ¹T‚öÆIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_fade_in.png0000644000175000017500000000606411273045225025066 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFQIDATxÚbüÿÿ?-Á¨CØw¿pY߸ „Ô±cxX|vª†ŽQÏ—ÏÙ©jG@”¼ŒœÒy%5—ß¿~~yÿöu !=ŒÄd4kGOFy¥ )¹.V6vžï^oòð^ÆŽËQlG@”¢¬¼Ò\~AÇŸ?¾¿yñôaÁêÅ3–ëkœA¤c`Æ(« ’­¡cØ!$,Æýîí«e÷n_Ëߺvñª¤¢+NýÿÿÿÿÇÿÿþýb`øÏÀÈÀÀÏÄÈÈNj‚ Dn¾áR² Ê3…Å|~ÿúùñù“‡¥«M›M5 ` 4.3^JFa;»À‡woö>~x/udže÷©f4sIËÈ+Ïóúýû÷×G÷nU®[6{2Õ,€g´¸¬DIùþ/Ÿ?rÌÜÆWñÿÿÿÉ®>a2ÞÁ±ë ©c­ÑF- BœÉõWAkDIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_ghost.png0000644000175000017500000000631511273045225024624 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFêIDATxÚbüÿÿ?-Á¨ !®>¡†<¼|ó^½xV|tÿö} ÆvüR2 [Ön^³hÙ>°wõå‘SZÂÍÃÿf8ÃÙ‡>²²±¯–‘ïòŠ1"ÛI…".^­ïß”£Ë½{ûz#Ó3 i¹idYàäÈ/,*^öûׯC[Ö,:‹.`ç†?Ÿ>¾ŸÌÃËo‘ìK²¢>lìüŸ?}Ø€KÍûwo60133‹ŠÇl?¿ +#×OŽàR³cò»ÿÿý{ÎÃËïF²ìœ2 Œ ?þ|†/Œÿþý󌅅UÀÁ=€‹$ Y!¬ÿ¿¤äß Œ ŒŒ l$Yðë×Ï ÿXXÙÄñ¦&fñ¿ÿþØ¿cÃ’,øüñÃáÿ ÿxxøLp©qó abb’ÿöõË’ãàý»×~ÿúù‡—_À gBrÿÿÿ?Ó»×/W“lÁî-«Ÿ|xÿv>'w G@”jøõë×Q‰Zt¹€ˆdwVVV‹×/Ÿ•ܵé'YìÞ²úÙó'2ýú™dãäe7¶°ãf``˜þúåóåë–Í^Ï ÆÑ*sø[! ¯ÄÃ{HIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_grace.png0000644000175000017500000000642111273045225024557 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF.IDATxÚbüÿÿ?-ÉXعåÐÔAaKkGšYÀÃËÏ ,*B3 ¸xxd䕺<¢¤ibÁ¿¿88¹D¥dä·»x‡ð30008¸ù 9¸ù—RÅ‚wo__~úè¾-ã}E­1©EùÒr·9¹¸ L¬Ù(¶à÷¯Ÿ +L9òëç)<¼üšü‚B¹ß¾~±Ý¾aYÖ…3G¡«g!Õ!qáØôâu¿ÿÒ}óêyÆß¿ÿJÞ¿}u—z¢-°wóã‘’­àãÌúøþ]Û‹g£íÙüÝÝ?BóÏŸ?ê —É¶À7$.VBJ®‹mßÇ÷ï&¬Z4­&÷ãÛ×GÿüùE–<ü#Íøø'srñ0üðÎdže§œ=ƒ*Õüýû—ÿ÷ï_÷I²ÀÚÑCBT\º…_PØûû×/5›V/˜ äߨŽýû÷Ï÷ó§“ævvÎÆß¿}üðîê]¿ $;f„}+9ff–ËøB«ûv¬OGæ;zˆòò 8±sr~äãä„»þÏþ‹gŽ'Ùd™b`b=Ÿ—_‡áÿ†§ï_f``¨g```¸ráÔeBúñZàæn¦gd±TJN‘••áû·/ ŒŒL©V\srqÛsqó°1313|ÿö•áåó'¿^<{TOŠx}ðáý›eOÝ‹ýüéƒú—Ï>}ü iÛº%GH±€qäÕɃÎÀË̦ªë“*IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_hammer.png0000644000175000017500000000653211273045225024752 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFwIDATxÚì•ËKTqÇ¿÷}çÞ;÷Þ™ë+tèA‹(ŠZôœ´¦eF§¨I Òì ZÕªm»‚ ÛD.¬H²Ò,!Z)Šä"\¤¦3sgœ×½£¿6) 0ÂÐÆgqœßóƒó£!(¥Ñ(±íJðúB’×¶ ð‡"oOžõ{Ö↋­ãpÜ{ 7w<©öì¨öì›nŠ´ßß@vj%y=VœÀm”wð¼ Æc‹‡L3zPtH‡MÍÁBsØBŽç¡»Œšs —M7 + I‰¤–>½{i°¯´½$%`¨(˲ñ.!H+N ÃÈ@3L•mÛãk}–e}ãx¡¹h¶e!™5;ûzf õfç8Õ•yŽãŽžç‘ÕÕ¹¢yÛFÒŒmæ™tº_VÔõá–Ï4MsŠª_3cÑî¢9µœ€•ËnŠ º¸ð̲r¶Ë]>¡éÆ÷l&=9<ðê}¡9Ôv×’²26:”Ûª*õ5e·*úC]s—…4ÍçŽ*(€Ïçí…L:=“LÄFã±¥û{¥ xùúÊ]Õ·5Ýhãx^¢(Ôz! ù•÷׿xhjqå•íŠS½£¹ŒçNl’ºæ§êêkëáÝsÅx­?ì¨õ‡¯nÌQ;òüeRhÁN|iIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_harmonic.png0000644000175000017500000000664411273045225025305 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÁIDATxÚì•]H“aÇÿïÇÞmï^÷¡óc~4W-ҲȰòkéÔP£H…°%AQv“Õe]ÔuD·aFÝ4°Ò K‰ZX ¬2Ò Åiûp›S÷¼o¥tQéLï:ðÀóqÎùqÎsÎóP’$a=…Æ:˺Ø?deç&sr9úº;Ç~®,Ë*E‘Œ°2Î(Š¢ôº×1¸}×¾x…’×…‚é7½®G ÖhSSŒéÎýe‡“€W©¶©5ºA­bb.é¢õu Di’ã’šµ&1¢uu´v+”Ê—úxÃu aâ „¼êzÖâ¢(j€•q=Ðãhëç8ùdãÉÛˆR3>O»JPç•TÖX–y±°0 '—ï´”"J^^%È#¾ðû¼Eñœ’Ñ4SðϬmÍÏÏ¡ÕÞ4º0?gÒè.*y@A0àïw´?hok¾Û¾°Z¤™Œx=îk"!å +û6Ë‚¢¨%½_¦+ää[Š’´5+;×Ðãh›ŸrMœ'$ì·VÔèi†1BŠ`OAéÐì¬''¿¤øw~¨HžŠšº³µõÿÓ_N¾ÜÐF”˜$MIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_heavy_accentuated.png0000644000175000017500000000622311273045225027152 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF°IDATxÚbüÿÿ?-Á¨CÌS+GSk'uRô°¢XNI­˜‰‘‘!™X=ŒÄæïPa=c‹‡ŒŒŒ¬WΟTÚ¹iåSª‘„”L¾ˆ¨·°¨›¸¤lUãÀÉ#GT\*‡ƒ‹›‹›‡ALR&ÍÅ;Tj‹f03³¼ÿùãûoFFFA!qIéªX`ïæÇÎÍÍSôæÕóò§î-ýþí/ƒ¸”lž“G Å 'üýû÷åãwÖ>¼{³óÓ‡wÿ™˜˜…EED%¤“)²ÀÖÙ›™‹›§ôÓÇ÷u{·¯û¿yÍ¢¯_>]ÿóÇwn> )Ùb{W_²-àûûçï›-km†‰½xú¨ãÓ‡÷ ÌÌÌ B"bòbÒ‘dY`íèÉÈÅÅSñùÓ‡ZdñÍk~ýòÙÞ_?2ððò3ˆKÉ•Ù:{3’l33³÷ׯŸ?nß°l7ºÜ“‡wÛ?¸ÃðöõK†?¿é°²²ù\T|úðþØ×/Ÿ|±Ém]·d¯½›Ÿ;;'ã¯_?>}x÷‰â¢b´>ºÌ‘ ªŠIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_palm_mute.png0000644000175000017500000000660211273045225025462 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFŸIDATxÚìUËKTQÿÎ=÷Î̽wæN4iMHÒ¢ˆH)‰aì183ˆ‰-¡E-ZdAТ…ÿA›ÚE³iQê"MŲÌ4†¤°‹ èA‰©ópîãÜ{Ͻ-ÆÁ)'3BÚømÎ9ß¿ó½ÎA¶mÃZklëÿ_€-Ä07%Ò@YWƘë÷—l o ”*¤Øã/ \p8]–m¿MÑóÄ£4Ñ”Š’ééˆ'² ™Ó¢ÛSèpÔ ð°¿ë5|¼c…<ä‹°,7­©ÊˉctÅPJÁ4r—ìí ¶mO²œ£"kšú!¤‰¶Tæ}œƒóSJ¿›†¾º"#”[Cá&Œ PJßæ1U–­—ÄÀÚúÍÔ¤3¦i€UäUX&À` ¢[‘æVÑãõ]ÔTeâñýîÌR hªÜçt 1§ÓÑuÒ§²º6e ‚è>.y}CºN¤™©¯‘BÜÐ (²üc\ÞtòÌ6/ìî¾}ãM±ô,kSË¢ g3·âWÛŠ(µ §#n¶´ž½çvK-DUTÛ¶VE)ÈÙìHÓÔ>–s\¦–5ôw“Œ |•mテh)…¹m:9;œûf-¤“£9Ì/¼eUÕA–DAEgm¨A¨ †ë6•îÔÕGEAô8jC üȃÞù/ŸÞïH ˜¡p“èäyÌ‹niEãJjšÔ¤;1fÏå¼6±m+ Àr\;”ç±ñ±ÑÔbÔí:!³p­b ÷SBÖ´u¶¼0û‰däIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_popping.png0000644000175000017500000000602111273045225025146 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF.IDATxÚbüÿÿ?-Á¨#ÀB ¬=³%¤å¼¸¸¸¹¿~ýòá×ÏŒÌÌ,L ÿ¯||ÿnò]ŸQ䃣û·Oecc›ÏË/hÿç÷ïè-kùÿö¥„O@HGAYýŒƒ›¿ÅAôódž?¿3|ùôa׿U7¿ýÚÁË/ ) $âK•8`ddd`bf†ó™Y˜ùþýû÷¢8€+deeàã·uöþÎÃËo&*.UýþíëKïÞ¼ZO XX¸¸y«xxùÿ011}~õòÙÔÏß­8ºÇOªXðû÷/†Oßçoß°ì+Mòr$SÝvVV.^ê[`íè™ýëׯÄÏßdff^jiï–EŠŒ£ΨƒßÀàgj¦Š1ã.IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_slapping.png0000644000175000017500000000615511273045225025317 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFŠIDATxÚbüÿÿ?-Á¨CÌ[go6;>Rô0“L½ƒb‚ù…ÛþýûÇ÷ïß¿÷lllÒÿþý?úêÅÓ©{¶®ÞJ‘ÜýÂ-¤å”V133O]1²äª…Sµ>~x§ÃÆÎ®ÅÇ/FqqqóZsóò1100\€‰m^½ðñãû·ó?¼{s˜â rñÕTÓÒ»ÆÆÎñúÍËçÓß¼~1dže¨^A16R²M\Ü<ŽŒŒŒ ?~|¿òöÕ‹Ög¬èš°ûßÿ_yùø9¹xÔß¼z‘ptÿößǃ{€'—“4Ãÿÿlÿþý{ôýÛ—woþH•T4ZšŽZ0°Ö‰¨;Ž£ÖŸIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_slide.png0000644000175000017500000000620611273045225024577 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF£IDATxÚbüÿÿ?-Á¨£PX° Z;zªsprù¿ûzú¹“‡>£ËšÙ2³³sØ3³°Üáæá-ú÷ïÿå·¯_,<êð¢,àåÈàáåwþñýÛ DÅ%kÿýûÿãço߯qqsÛýù#ü–aQA´cãòŸ?¿ïf`ÀÌå.Þ!6ìì–ß¾~î:¼w뉛VÎúñý[++«Iqðãû7†¿ÿ¡ˆÙ:{ pqñLüôéCâ±;þAƒS”ƒƒ3âÿÿÿ—‰Ž\€O@hæßîÚô &ÆÅÍSÂÁÉûíÛWCŠR‘»_xÒÿÿÿ_ïÚ¼j²øî-«Ë?~xÈÄÄTN’Ì,¬ ,,:yª±±s¤~|ÿ¶›Úo_¿œgdb!:ˆì]}eÅ%eE™™™µÜ¾rqóÌûúùSêÑýÛ «3±r4æåãÎË'øóÇ÷Dû€‘‰9ò?Ã9–jFFOÞOÜ·cýtuììÒ<¼ü{µ>ú¸«Y£ΨƒßÀ–î—uÛHIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_staccato.png0000644000175000017500000000576411273045225025310 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚbüÿÿ?-ÁàµÀÔÚ)SÏØ’Ÿ:r-`gç`øûçÏhŒZ0Â-`$JÉÍÎŇ™‹‡“_@áçÏïÔ³ÀÙ3HZVA¥ÝÔÊ)Šƒ“ùÝÛWï>}|¿Œ*Ø»ù iéUTUáæáe`d`døýû§3ó_ªX ,"ž,.%«ÂË'ÀÀÀÀÀðåóG†÷o_Ÿ:¸kÓªXðû×Ï_>b`aecøõã;ËgÏÞ¿sߨ¤@læËÍçûýÛ—SWÎ_CtZ£u•It*²´wó“jù÷ÿÃËçORNÝwªüøþýÔÇïÒþÿgøýóçAD4/‹cN`²n| IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_tapping.png0000644000175000017500000000600011273045225025131 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚbüÿÿ?-Á¨o . 3kg9.^%FF†ÿÿþ3°°²2°°²1üûû—á÷ïŸ ÿÿýg`bbbøùóÇç£û·Ÿ%Ù!Qñ>~A—ß¾úõë'¿ 0¯°¨DÑ÷o_v¿yõüØïß¿xxøÿýÿgÃÀÀ`L²¿ýdøüñýþí–53000ø‡'J±³³}ÿúy÷æÕ »œ½‚•888mÈ ¢½ÛÖ¶!ó¿}ýÂðë×O†?¾#«¹‡Ïõ£ÉtˆYÀÁÁÉÀÊÊÆÀÎÎA} ̬YÙØSþüÁðŸá¿ƒ{@:Å9üùóûñ»7¯~ûúÅñÏŸ? ?¾}ýM¬Œ£ΨƒßÀEïjôØøúIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_tremolo_bar.png0000644000175000017500000000625711273045225026012 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÌIDATxÚbüÿÿ?-Á¨Ô±ÀØÂNËÖٻƷuön24³•!F/#±©ÈÝ/|)+ûlÑ_?ØìÚ¼*Ÿ},ÄzõçÏŸ9Òr[þýû÷ÿáÝ[®Äê#Ú‚ÿÿþ~ed`üÇÈÀøüОÍߩɜ\‰ˆÏñŠ †‰ýøþõíÛ×/2ŽìÛúýÝ›WQ?þ`…ZÎ(%#?›OÀ™‰‰éQ©ÈÅ;TMHXtç·o_š¶¬Y4—÷­<%¤dg111˾|þ8àðÞ­?ˆN¦ÎžAr¢»üø>mÓªùÑå-íÝ%¤äf23³Èá2œ`>pò”“ÜõóçµWÎkD3|3³ü«çOpNTFsp—Üþç÷¯co^½(bddd•˜ÎÄ̬@Èp¢s²½«/¯˜„ô&6vŽûÿÿ3üüùó»"1†“TTØ:{sˆKÊ®e```Ææd[)ôìY˜Îž8ø“X=Œ£Uæð·0KoÈ›[´ IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_tremolo_picking.png0000644000175000017500000000636411273045225026671 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚbüÿÿ?-Á·ÀÄÊQ™r vñ—œ&#§ôƒ!ª>ŠJõÐÒ3¾,-«ÎÆÆþ—j>pôà’STíQÕÔËdbbbxóúÅŠ÷ï^—PÅ¿°D -=“Eüª?~ÿñýÛ̯_>]bbbŠe``˜D¶ÆvLÊêºêÚú•,¬lÌŸ>¾ÛùåÓÇdVvöP1Éÿü]I‘¸¸yù„EÄj¾½yõ¼ô÷ÏŸ›yøññ :}ÿöåÏßSdÁŸ?¿Þ½}}òû÷oq,,¬æ"b’—ÙØ9ø¿~ùtýÍ«ç±_>|NQ>øñýû§Ÿ?¾ûqq󶉊K.baeå{÷öÕÄïߨ²²²¥òñ ¶RäN.v1É‹‚Âß¿}yüñÃûÄÿÿÿ};ɪüíÛ×ù€………ýÿÿïß½^òîí+#VVVgqI™Cœ\ÜÊïß¾Ú÷êÅÓ:Š|ðýÛ×ßo_¿ ¹! (²›‡—ßàÇo?ž=¾_üèþIG÷oÿOY>`düÆÉÅ-/*!½„……•ýÝ›—gÝ¿»uÝ’ëÄfP¼prrñ ‰ôüÿÿÿï£û·šÝ¿Ó|hÏæß¤-“é›WÏo=}t?nÓªù'É)ñU™Úú¦,œœlgOúFn‘Î8Z'¸€`Ó¦|%fIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_trill.png0000644000175000017500000000627511273045225024633 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÚIDATxÚbüÿÿ?-Á¨”YàSﻀ XðIŠIH{ÿýûç5Í| (,ªÊ/ t›!NJ–önòØä±å{Wß5mƒ%Ò²Jì?~|ûóþÍ«¿?¼cxñôQé]'Ǥ¯æåå—ýñã{+ÛLff…7¯ž¯Ý²fQQAôû÷ïãÿü)þùóû”wo^U¾~ñäÌ×/_¾}ýrABJV[PH”ïÍ«çóß½yÕùýÛ—ËŸ>¼ûA´ÂrbEťݿs]uëÚÅw`âîÌFæ¶ßXYÙþݸrNoãÊù·ÉŠVVVõ¿~ÿþúåódqvvvùÿþ±½~ùl6!Ãñ[ÀÆ®þ÷ïßûvnøƒ,ÎÁÉ­öç÷o†wo^m¡(±°²jüùóûº8'—Ú¿¾~ùtž2 ˜YTþþýƒlììªÿüy¿{Ëê×d[`ãäÍòÿÿvvÎÿ˜qæö÷e´#û¶þyÿîÍrV¶Œ¤œÊµ‘É3,ìÜôþÿÿ¯öãû·[OÞ-ÿùãû^>F&f FF†ïæ¶.Lâ’²÷~þø¶X Gk´Q (€V¸Ì;ÁlKxIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/effect_vibrato.png0000644000175000017500000000573111273045225025147 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFöIDATxÚbúÿÿ?-1ãÿÿÿh ˜h F}0ð>µ`à-`Á'‘\&,*žýþíë®uËfOe```pñ‘‘•WžÏÊÆ®ñôñýä­kï"+™šÛºX¨¨ëôÈ+©[ÿþýë7¬¿~ù|CXTü„„”¬ /ŸËÛ×/Ÿ\¿|Vw׿UÈÎ ™esD%¤“ÿúùùû7>}|?‡™™y•„´üqn^>¹çOì¾sãJÊÑýÛ‘D 7®^È|ÿîÍ>.nn×ÞoݶnÉHP…z‰IHåýùý[„‰‰ÉŠáÑhNµ`Ô‚²0¾¬­ìßß¿€IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/firstfret.png0000644000175000017500000000625711273045225024201 0ustar julianjulian‰PNG  IHDRÀÛh9+ pHYs  šœ aIDATh…šëŽä¸ F)U÷Ìb'HÞÿ “ Xd±Év—-2?(J´«ñ ¦.mŠâý#eãtwÃÌЦôþÀÜ„a3ãÑ8àów3£Ÿç»;nÆ'BÓ€ÙÇqwúÇçŸ(7µ7¹‚*Hü‡¹cæˆ"ý8þDp­JC]h½N"-\èÇñ@èîhë4 ¢‚ BÐ àüöÛoôÏÿ"ª¨¶Ø: ¢ u%IêüñýããOZï¨6Ü¡;à,ÙDt*îzýõo¥~|¢í µ† ÃÞAmA¨ TtZDá—ï¿Ðÿ÷ï<Þþà|;ñyck¡ mJsÚ„Ì­5ú?ÿù~üú ß¾ãÛ¨(½w†½ÓÜp3\œißúóùÉçgC5dì7Æy’^çJpB~$´¯­¡îƃó!³pÉEÈzgÚU¥ã0Æ`Œða3ÇÍ¿ E%=€>ŸÇt½à”[ÍW½¤~qGÇÃñNxYD$¬òÓ;X¶¾ÔÝþþíÞZø°ìÉôáB=¿y(ӌ޺î0K¥ÌEêbÈÕT­7ô"[ÒÞ/‹ÌTm­å®.\XA±wQ…ÐçÇ3ì;SÑŽ¦Ì±MAÖ2™éqœŒ1Ã}sQ]œå 8Ž>ŸOÎ1]Ó ð͡wèÃln;ÜréíÆµ^îÎa'ŠfÛ=ñȘ­5t&„¯4îî¨Lâ*Ë+/^EEQó4SQÊö“—¬—úr;–ûé’u&‚ŸŠª(>«›­X¾¿’sf˜QeæØ¡qÇÚ—}Š7d°Lf† Ãm,Óm‘о%3‰Yp¶íi¡ÇžoÚj´d¶á[~%¸nÝw& nqÿ…ã×”¡°ûV/Ù³h–š,&3=Ïsɯ¯mš:Ø ”²ÅåßKªÉ¸zÛæšF—ŸHø3¹" eèiÓ»›ãeßäÚ{CUT߯A¿Lpå,rËž –LÿOî¾{Ò-æ.Ä׊˜Êý™šR<3ªŒÍøç.ùÂ9 3–ñ—ž×¥ŠÛÃî¬Äè3³¤÷h`_‰ ©W²ô²T ÈÛ+(j$ÍD˜ô5ýÈ„VêV¸Æ'm6Ÿ…}ÿ-átee,ûÅTùyÃ)‰W`l² t0+Ú+º()>LÅuÇŽ©ƒ+ä˜ÅÝlo5ÿ]íåÛ¼’‹Ä+8dÇ”.î¹z‹¬’4¹‡¼ŽAX!¶°S˜ä2Úšr/Á" *»fÝPQ^j—´VxùΔ÷m'(Ñã<§³É¬ÌB”°DD_`²¹mº\bð®†ðŠ êúx¼Ý‚@.éV²£)¾ž‹)Ȩj¹œbBd3¨ «>°?duðµXŠÃ¾í³ÉL±ì¼¾oŽkgó/P©µA\ùª2õQ!·Õ/"ÞÌ´vN,b+àw\,W¤j|Û]W4Y w»hp«ïºéÉY›¢ª|Š’^êô½Îz؉ˆÐúƒÖ7Ó¯E.ugø/ªd‚Tf»+pÅõsÖEôû÷ï¡=ßuyU³—´[m¯LØ˜î™ Zèï&{Ý€žÇ‰›3»D¦ÍýÖŒ–­O‘¸VuúLÃ{¾$Eb¢Y¼ÞœM·{ù—K>™‹m³\pèø<Çš¾$Ü Nâ‚÷ÀEP³0¡lÛÒUmoúVœfœ^{ç­0K¹).;]TbB8c +c€±(óå‚ t7¦[Æx'FZc¡þ9E˜ "³>¸ãYè_ }}6ÎÉL¶Ì V$ޞʂøýbh‰Ñ{ïk€š¬½:Gè'‡M {¾vç»ÜÈý74ÚAŸcŽK~æš5wÎÎgÔÀ¨º¢òúۚͶåÍ–?wX¦_ÕifÌ[r%{¸ .ºÉÊ&¤È)ª TÎiÝE|‰PˆÖNVÂ_Ĺ«ÖºœÜä.nà–zs4(Û¦›ó&(äážÚvöÓ”³ˆP9×VÞÎæç,C—z>qzÆ‚~~~’˜{)löX"×>ïÇ"oß‹Zr*háËì™ÊªE´ŽsvÚ½¦ T[#ÇZÓÉöŠ¥¾€‰Ò6áÂ[{«_mϤŸS ß<ï„®àFÝç¤bŒ%ë°ýù+SåÕ› n'x¿$üëmUyilèã<—‰K¢¬2‹ÀŸŒäܪ'Õ~g$¯VÉׄÆÌZ€„Ì":£j‡žŠ\[ZØç§h¾ñ{º¸Pð]k“¸À˜^T“áºD¯˜nÑJŒal'±™s±{¦è1vÕm†"ë¥ä핎 Mù*çêÓµ«©:è¤Û½$)–æ×¥8Dç^»TàºÐ-ƒÖ{tL¿ö»ã–Eê8sŸ†fK±+„RÆ•3€öÇ/ÌÌ“a½ã›½ÀÜa™nN¤´pÔ…€ŠWùEégê……=sscM0Ë:1(ÎVÈ|¡\sg”äPíS4Ýg6v1Mrؼ6*Æ‚yÃ3nŽ9ç¿äï}’¤*Bk3ú±c |ŒÉlÇs΂Õ=ŽÕTtj2:Ú¦:]R÷®n][L+.ÕqFLöw׬=†CL˜= Ür‡êšÿ*NÖQaL0~Á]Å1"–¯É@ECYcö‘2áŰ1;~zõÞZœ»N¯‰XèHçI àËÇ·^º›¡"^—°ºr¹’Ûöa1ºgnMXê"“Ìd`™M*¡íÒ—w;çÔµrtË>òþ·ýÞ[k¥WºÝq!Þu%Fè÷·Ce¶½u|[¶ˆxTÈ #º¹Ñ›Òš¢­QÏz-â3QÌ„ Žö2Ë~Ò|;Mf–¥‹"´žÇˆc¶a¥gäÒQÞ)ÆÓóû°ç–+*”¸ çÕÁ×¶W¿È•c|®'à¡ñEì_$þ”ÙÜ¢¯a#ˆ(Ýl\O³ORvû¯Zg¢†è¯÷þò™3NÛølFsœ+.‘0‡*ôÖ;Ž «‹e6Þ»!Õ*;Y çé~`l]Îðr–Q4åÖl|Ú>´ƒ F³³B²Û8¯IùôÒœN-ç8¨Ÿç¹”~¼kóþ$¯F•<Žç^ÿBtƒ·ßúú¢í—J6ÜiË,šÝÜWݽU,¬—"»Ðó<ñ eÉ”[©ÙÛß.9lžKfÌ$¬ØHošÚÕw¦kæö6Ó†N»ã+¢!hž’UØ’7\ZƒKk÷ô···XA|ç­uª²ÀO%¢‘®€ÞZGDiguc©Äª$_>–à:"´ùlES-ۺؿ¶‰jÃn>ìÔ!Ú—ÚœÖÐq‘†¸> •JÚuéBaç¹ç 'ÕñDϵâsWImÊçÜVB‡IZDÚUcº§»Ó{àªÑŒ½„åÒwYò¹ºÈæ^½ Jg8/µ‘åf,Ð^3Ö¥ù,—0R0·ëÐaþwmûçb{?h¤Üyc1”ÃìÕÑr)AÚz[ÌQ¹|}Áì´¬© ˆq¥¨ÏPœQw‰èçóƒã<&®–Un¥Üü³ç-ºˆòèÒ“òè\[[óÞaYgX³ôâèóóàxžà„çS[—a©í"ÛèÚ"¸Ç89žã;!UMS±¦¬+ƒÖƒíò\ÑjDýmEÒC>€%ÓÛÌ<ÀÍÒöñÉy—p«œ×¾x §g¡®Ð°š(+bS¤X@DèÏç9Ázú2Tçâ±RJ­§fs&V·:Æ@Lj„ñ‡i¢`EÏqðüü¸œ l⫯ÇóEñ2OûÖó‹çó ?Žy‚¦xƒÖB=…SÝ:ýû/?x<¾Å–ŽsðçÇ­u𶉠w CC8Z£¿õo¨„4sŽãäùùäÙŸ<o´69«!qœvôPXz»Ï;8ó1N kÈ“PgzuúrZ«¾>a´f \¢Ø‡_7úq 7º3“¿â°»eú-訵FN†ùš]M’8]6z+‘†#ôoß஌ákÏìÏæ”iÛ žÇàß¿ÿAÿõÇß8ŽÌã¹å2¨*­õËì QþþñŸÿ|ð?ÓÙ CEvDIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/fret.png0000644000175000017500000000164211273045225023122 0ustar julianjulian‰PNG  IHDRÀ#ˆÂÜ pHYs  šœTIDATH‰•VíN+; œØÙ]A)ç¼ÿ+ñ(Uˆ¶t·I|¤v⦺ÒÙ?€™Øã¯IÂÇLJüþþâïß?X× „‡/Îó ˜¦9Ä××Wì÷o`Žr7ìv;”Rs13^^^ÀÌZ×9g|}}áp8TC)Çã±¶möm8 ñóóƒãñˆÓ鄨†ÏÏOœÏgÄëõŠ€ïïo¬ë ºÝn€”bŒ œ3RÊ03(¥„œ3rÎÕÌŒce !ócf®É©A’Â͇Âõ# i<Ô{Î!ˆ`Û6¤”çC‰…"3CDMeH«=¨ƒ!B ª3VJiU÷òy?fÍ&fS;Û}ËÝÇÌmøMÆïÛìåS m}Q¸9UƒˆÔõPÕ7¦N`µ•Ö¨¾ÈÌ +æ²,^.bŒX–Q…DU&j=Ïç³{:šl)ÂÕà »púª[÷EÄ‹ciñˆAé\ݬ1Š&B‹lNo·øÞp·/î²ÐÿÚÐõ£îú"½xhM‡ùÐ#˲4ÄPB©É‰ˆ¥”–œ"†qÎ ŸÓ4ó Ý„uFºI®†©Ý„"‚yž}£Lè‡ô‡§B_$ª—÷p%Á×ÃEÁÃ7>j†#ý½ï:§IFåá^9Î‡Š¢¦@¥ôÊMú2x˜®ë/–\¿ûNÆŸ¦o†>WS§An,õÆãÎÖŽô£ë´°»Ä¹=Hú´šÄÌ!QC¤”FÄPõçf†¾Ù€æyÆårÁív«NcŒX×Û¶U„*Ën·«½ßÞÞj }oˆœ³!èz½"¥„ý~_ —Ëëºb·Ûµ«¨ ÿ cœÀì¢bøIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/fretboard.png0000644000175000017500000000707411273045225024137 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFYIDATxÚ´–KhEÇÿçÌw¿ïÞÞä>’«©Z…BñÙ"ÄDÔîté¦X_ÄB+¶¸ð®!+¢W–€HPi %ÖG´ÚxëƒR‹¢¦¹ïû=æq\¤¦ö‘䫆YÌ~sæΙ!Áÿi”°e𶉈¨ïª‡.pÖ[¼ ›²ÙRäîÊøþÝÌ,"’Ñ:9”ÄÑþ( ã$ûf¶³À[n!·.Ÿ-÷UÞ+–û+ùÞ²Ù”ò`…ŽãMíVsw£~ÊÔæ7¸x@õ‹Û÷ï|ìäÀWU ¥>ø~f‡$IÐjÔàÁ/IýµÒy+-öŠßË•¡âi€ÆhQJQvûèÀûî¢7Ýqc¡XÞW¹|ýÁ+¯Þ¨|?@Æ÷EyQÎ÷•Í­£í;}~þÏß·5ë £G¿üôÝU¹\>Ÿï-fsùˆY͈8ˆ:ËI €ò¼F.—¿¾§§p­N’ü…"àóÒŠ¹ÊDÞxí•­Æè×­µpΞåãÄAœƒs®:9þò10ó›©Î—$Iï=#{zt׬1ιs®Yàœ³0Z»v=NFëMÖšžT¬qÇEäGçä'Î,J{Näv@>ð5€m©Dfæ®çyïx™Ì¯Jñ_D@´$…ÇLPÊû9“ñ?÷2™9fõ}*ÀáO4l€Gžx6+âÜù,ÙÜäøØ€‰Ôi:¼õN*–úG‹¥²”ú*Ó¬‚`±*6>´û©ëµS÷Õæ_˜ùpÿlšBc;‰ø"¾ŽˆýÓпf"f0ó0+5ÈD›¼`vU‘ÌL[÷á&bzŽ˜|"¦¥³`âÅ¡TˆoÑ€©Ô­âào€{žˆ£hÎ=p&ËNŒÑˆÂW_ |µœ¼R™›k5j#qic4þiíFk„a÷D³Q{rµ÷€WsØ;6:Ýi7«:‰ ÀY$q„N«1µoïKá% ÓnžŒÂЭÑZGQ×¶[Í?ÒìõÒ8…ÝÎI7FkkmœÄ±GáOk0F_fŒÞl­³Ö­ËkHâ(…]týÎZDQZÇýkú«ø¯ö÷¤ê 3ÞIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/grace.png0000644000175000017500000000642111273045225023243 0ustar julianjulian‰PNG  IHDRàw=ø pHYseeþ%úã MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF.IDATxÚbüÿÿ?-ÉXعåÐÔAaKkGšYÀÃËÏ ,*B3 ¸xxd䕺<¢¤ibÁ¿¿88¹D¥dä·»x‡ð30008¸ù 9¸ù—RÅ‚wo__~úè¾-ã}E­1©EùÒr·9¹¸ L¬Ù(¶à÷¯Ÿ +L9òëç)<¼üšü‚B¹ß¾~±Ý¾aYÖ…3G¡«g!Õ!qáØôâu¿ÿÒ}óêyÆß¿ÿJÞ¿}u—z¢-°wóã‘’­àãÌúøþ]Û‹g£íÙüÝÝ?BóÏŸ?ê —É¶À7$.VBJ®‹mßÇ÷ï&¬Z4­&÷ãÛ×GÿüùE–<ü#Íøø'srñ0üðÎdže§œ=ƒ*Õüýû—ÿ÷ï_÷I²ÀÚÑCBT\º…_PØûû×/5›V/˜ äߨŽýû÷Ï÷ó§“ævvÎÆß¿}üðîê]¿ $;f„}+9ff–ËøB«ûv¬OGæ;zˆòò 8±sr~äãä„»þÏþ‹gŽ'Ùd™b`b=Ÿ—_‡áÿ†§ï_f``¨g```¸ráÔeBúñZàæn¦gd±TJN‘••áû·/ ŒŒL©V\srqÛsqó°1313|ÿö•áåó'¿^<{TOŠx}ðáý›eOÝ‹ýüéƒú—Ï>}ü iÛº%GH±€qäÕɃÎÀË̦ªë“*IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon-16x16.png0000644000175000017500000000704111273045225023674 0ustar julianjulian‰PNG  IHDRóÿa pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF>IDATxÚT’]L[eÇï9§Êaíh)£a–E3CÇ€‡ÝÀ,JLÈ4&˜˜,&ÆLÜ…f&‹ÞçG¼sÛÍn¦½A§&f²Å…Ðe‹Ã—iÙòÑÑᬔ2´=ïë%cÏí“ÿÇóþ¢·÷6Ž‚ÅŦiv¤ÓéãJ)ÛårQJ]QJ’ËÙî=Â'Äàà †TÀÑ(èêF£˜¦I8¾ …š”bX)…RAÆjNËC!Ð5H$fu|…ýéB@sãNú¿ïïVR¿Ñs¹‘àó®Øû k°ïS3“ÓJ9°¿„Ô¢E" ËÒHb]n 'õu÷h€’ˆSo{ª\΋ì¨ ³÷¼pÏ4|õÍ(šþºa|+4mR)uÌøõ·!„X O×@B™…Å©çëS0µ(<3ðóhå‚áppüƒcï×îi{ujrÇ×ü,œ˜Å]¶…Ξ»°½ ¶ïÄáZ4G!o}gb¡ôj8h.'ÿßzm&9øb×KÉr¿¯ÏPÊÎ_ 04š¿;óuÙfgsÃÓ‡8å÷›q˜uìr§šÐåéd2Ù¡ ² …mÛÂXË@ ¼Ù §ÏôÕ8õ,áºÏvv00y†™Ø nË »›2U»Û³•JBþz—=Eúú5*ü¥§švøÛoÍýËØ­i®þñ'õ{Ú¨02\‹3=ÃaèM>Ÿ·¥’–µŒßïG=¼¡é¤ÇG>ÜV~¹¢®>D{3/S™Nà‹ânigj:ÁÄø?x½ÞÈÒÒRÔ²,âñ8Z‘ÓÀå4(ؾóÂý¿îs´Íâ…Ê —ÛÙÃÞ–V6™ET=VC  ƒD""‘ÈÃF¼ÛÓj†î͆ÊZ¬eƒ“ç£ kåÔTW‹±dåhÜõÔ#—.¾·úHù×Fd¯àñÞæ¢³#÷ä“?Ý´YÍ@CðóÌ›´ù7Oü’ýnEa6 uÀ àsõòh°:Ó8¿²ªmóI=zÛ¾QV¢Ò­µVQ‰žN|ìM¤ÄÜݵÞ[äÕœžbáZx Š·CÇ“µ±™ßÏ‹@P@Pÿø>Yê;lúIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon-24x24.png0000644000175000017500000001047211273045225023674 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFWIDATxÚ„•ilgÆŸ÷wfw½‡÷ò®×^ÇgÖ±½i;v[5G^„Ô6åGEÈ—©€_@â#J[UB*âP¨Z@ z€ˆD!‰œËuâµÙØ{_ë½ggfçàƒ7!GCGz5Fÿÿïÿ>ó¼ÏKNœ8zìv»•1v\Q”¯PJMA~"IÒ«†a‚ êõ:&''144„³gÏbnnÀ>¨9¥´«T*½œJ¥¦Ëå2OÝn?ØÝÝý¸ÝnÿLÓ„išÔÿ_!’$ýðÊ•+ŸÊårEŒ1D£QK"‘øF4]âyþ%Ó4A)ÇqÈÃÖ ÙlöÈÈÈΟ?gž=†é§¦133ƒX,†|>ÿ” !@CÃ#På>8_ÔÆq”ŸžŽá·þˆ‰a8z/¼ø2ÆÆÆÀ1Ž—•× =½}ï«3tã!™0Á«›;’OlàðDao å ÎGOd‘Y/@›ßàÐÛ×Ó0@)!”Ò]À‹Ï&ߟLÈj‘À“ã“vNYÅ'zWÁûý€\´ ˜Ìaÿ7÷ ”ÿÜÇÕ7—ÒäšÞ£(Êw9ŽKK’ô#Ã0À¶RñškºUg°·¬EŽut{-¶*J>@W†ˆ)orUî(ˆkýo^ã—â¯aâ#ÿz!Ÿ;¹°°ÐÈçóK²,Ÿg§~e»¯¹#n=‡åRøßTO®?w°ØìqÕU€c€Å‡ëçñvf0“Î]½pá:ëèèè;„¨~Ÿ­40Ò€a?ãê_#²¼©õáõ´ÂñÚ?Á9]Øô=l ÌW:{:º^(a+¾xýuE%±™’§cS®®pxµP(€YzïÁ24pw|scýÇÙìº/ÜÕÉÇp '„w+5lç¶±,m!pÁ'¸èÊZ&»ç¹š¢Írƒi0t]Ôu†a€½púCwLÙjkÁß®&ÿ_ŠÏ]víä·ÑhÇ{7Zptb><ß¾}Ra ™\Œ´zýûÚ;ú½mÙt:oµqÇ¢À¬6~@SÓ÷Ý7p&]\qÍ\¨¢\©AªÝÂÍÄM¨Ô†gŽ>ºRÅÑ imÕj‚ÕÆ‹…çcoùÛµ#G>¶;y3 ¸ã]hˆE4 %¨éìwZåÜӇƂðú€…eÉ„7°–ÊàÓŸÿ‚F׳"Ô††l&UU¡ëzÐétþ]×õeMÓP­V‘ËåËåÀª‹‰æ(hµÔ]ðmÃcoÅøÀcøÜ'{qyрˀËç†eù2:νCý1ïDQ±¾ž…,ËÔãñD !ç€1†b±¸+‘ðíŠÅqÐ×ÍUkf ν%2ÅÔ£!Œ¶ÀŸÂÎF ?ýåo茢kÿc˜öú@U¹Ü6œN'FívD$“É;ÑÍ”=»âZüÞ?·pÊ•VþÐ6 ’ –:þsñט½¥ >ÎG£(åóH&“àyápX …BW ÃÀ¥K—N§ÿçL‹•‡iš†ïŽ!”\=ÓUIŸ¦£ÃED÷`þ½[xe¹ÿ@· ¢("¾‡$ÉØÓÓ‹½¯Š;[_œÅíËçàþê ¶:cáùAž~Æ ö$2yᩲ…*8n÷Ö"”¡ÅÑ ¯Ç oþÞŽüWç—Ųn€¸'ž¹»@ÎJMÁ¶©&Â}Z—Âò¼»#1Qáàu»`kq˜·“t¶9Ðî¡ï*!É݂Ը‘6EU½«§qÀà8´´{ȓߚýì‘^sŠ oh:Gt”*uyaµ¶ÈR=6\s÷{+pðŠ±¯“î ·qS„v#eÌ7‡5èÍã °:­¤ßïÂ~UCÈn!¾rÝt…ܤ}eËØ)×±€†<¤HeÉÜrØH¹P3³FÖK’¹ @Ð`»þiîÆ 5kS>Öün4‹UJó­6ëø»§€ÿ%/Òr‰Q`IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon-32x32.png0000644000175000017500000001234611273045225023674 0ustar julianjulian‰PNG  IHDR szzô pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF IDATxÚ”–{p\õuÇ?¿ûÖ®¤ÕJÖûa[–’-\Ú`lƒy˜@ !¸”1Ó)!6âvh'3ÍI§n2m2:“¦éÐ<¼H&%¦¶ã¶*Áñd+‘%Ë’¥]­´’¼ï»»÷Þ߯x%dc ¹3gîïþîœs¿¿ïùÞsŽPJ±gÏþ?—Û¶q§I)õ¤ïûwkš&t]ÿ©”ò;®ëæ|ßGq…_©TbóæÍ<øàƒ¼ôÒKœÍÚs¹Ü_Ÿ={Ö%™L‹Å˜žžÆ²,t]gddd½”òk–e ˲°, Ã0ˆF£lÛ¶r¹|mº®¢†®ë·ÍÍÍõJ)yõÕW9vì½½½tvvrôèQÞ~ûm6lØ@2™ÜašfDzo ,3uíX–õ©¹—RÖ§Óiüq¢Ñ(étš§þìËœŸglìáp =öÏ?ÿ¼%¥¬’Râû>Ñh”ÖÖV‚ øx÷ò*R)Eww7/¾øœã©}O0?—ä[Ïþ}ëÙµë!‚À׊ŢH…”„B¡kæ@YU}24|Ïõç’Y¼òc¾ùô3âGhŒüšë›JÜ÷´öÝÌ3ßü;.ΤŒîÊELËbCÏ<ïrî ÃX9®ëøýíÎ'i¡é”ô{Sï½,&“XŸ¡¯!­[ Z€ù—I¥æéi›ã+Oݾ¥~¢«xáð¯-L†AsL]×ׯb±'…b±ø­B¡ WÜÑôΧ0€cF[÷È›zÑ´ŒýÌY[¿ùu‹'ùÓ];ÀË…r§þw_\/.HSÆã³U‘z%ý=þüv@%“É¥|>ÿ]¡”âÐWõûïTJ„œmsw}“C}­¾Ý¥À+¢l‹ù9APÌ«_¥«÷ûTý»?ZâlÌfëç>ûý;ïû¯C‡144D]]]"‘Hô§ €#s;®)âc=¤Îába‘_Ÿ¢­c-% —r.~I{},¾ðÅKÇ4u„/VŠÑêwm]·ª9ܼ‡kÔ~9›Íí;~ü8ñxÓ4ijnFS[ºØqsG²³œšŒR(q FGG 9&élž-[ûïù\׺M¥bñŒi4¦ÒÌ/þHE4öï»mÕ†ŽÊÙwù û篽ó>Ó3³äóP,IÌÍÇxöÙçXòMsY„aÓÚÞÁé÷‡É;6¡Pˆ™‹Sk×®ýB|©äùÔÖÖrË-·`šæJ\é†ù¢ÙJ™L¡OÌ,¼ð…›ú¢»îdmg+†BŠT*ÅR2É»ïàÀëoÒ;p#í!E¶äaX¾ï‹ÅRâº.™Lfw2(—ËÔ×׳³³+ôýû÷3ùîëøß+áM\ÜËøiõÛ}=6éL†s1ŸcÐX_Í¥T¤Ï#Oü mZÓÓI|©£¡XZZ"Nãy¥R©ª¶¶vDqJJ‰R ×u‰ÅbxžÇÃ?\iF¦/Ã1 ü©X«XüN*‹—ÌQ]{'Ÿ½³—L&MÞ¼öÆ0h§ØùÐçцÿóïŸãε ­»å·±´´Äìì,‰D‚l6KSSÓ¦H$‚RŠå)É0 ŠÅâ‡ð—Õiš”ªRÚh?3…ñçÙðüñ½¿àäŒÇÚ›nç‘Ý÷’]Lòúwþ††–J×ÑÝÝC¤ºŽÀ/ãº.ù|žP(„çyA&“A)…a,Ï Wˆ°TWWyÒ)77¾[ÌÙ~m¬lu6­u1ÜÄ1úº¡Q “mÿ#T1ÇfÞ¾Žöîuô®ï¦»¥…M×044„ã8D"€˜”˲V؉ÇãWHç/÷ëêš*ì®æŸ/Ö·¼·02µÝi4qêlêÜ3¹ß&’{›±þÓ) e5qëàõ´·µRßPeÙL\¸À[o½@8fÍš5²­­íç¥R‰'NH$>2 ¥UÎå‘ì¾»7ò»·÷qCÔ¾oáŸøfÍzÛ’[ïž?Îâ¬ÓÞGñô9^Žs.ÒËÆ 먩©Áu]¦¦¦¦\.ÓÜÜLKK ýýý¯$“ÉÝG½æX®”º `ue ‡l¶nïåÖûÉõ'žsÂá*µn=¸> ¦9V2xãô^pÙoYXº® …©®Žª‰ÈPÈyÏͦv_J¥¦?¶Ý_ @,›°­àÆÖð­7›ÁžhغÃwŒ®£Ó%q|®Œ¥ [GÓš hº‰nÚ„«L𫽑¥…Ù/ŒÎÇP@ÈÊZ-0®ªŠ&`Ž*•‰¥Ê—òŸqf×øz|Ñ~H£·µ OÙH¡ãB†Ž!„mHBfŽÞƛۋu!퇆WÞ8î¿á”2P¼ÊZ®h@¡¡ Úºm@»ÿ™?´¿æ—eÄõÃSŠñ„¤¾VH ŸQKSI.TYÔÞ³IônéQ¤r%à®A χÎ5‚ŸœÞø«—Ëß$—(V€””Rj™åâ,+TYn‰š§ß,]œW57÷êM§§¤æùØ[zDó¹x»˜”g¥d!_DÿŸ( Mk™Yd~fQ- O{æ|ZÍ.äT²¡ZLW˜õW¥@TÚ@°Ì€QÙ\­²nê*ÌÔõ°ÅJ0Y1¤+–2+Vbùê—µ •R+ÄU"Ô®qׯZ/?³:è'˜Ze²’~õàäÈzRYÙIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon-48x48.png0000644000175000017500000001651511273045225023714 0ustar julianjulian‰PNG  IHDR00Wù‡ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFjIDATxÚÌ™yÕuÆ·—×ýöeæfÓH-3Ú%@–!ÅÆ–llPŒ!‰c*Άí8)“›$P¸ìT(°M ÆT 2Fb3BF’-,6-3šaö}Þþz¿ùC3ÊHH‚®JºêT÷›ÛÓý}÷~çÜsN‹›o¾™÷z(Š‚¦i躎ªªÍÀæ ®”R΄¢(=Bˆ]RÊg}ߟªV«!0M)åYŸéº.óæÍcÛ¶m”ËeöïßÏ3Ï<áC‡ð}!¿ÅC>èûþG\×]íû~½Bhš6_Ó´˜Â~òÛ|§ö[¿ÙuÝ;‹Åâû …ÕjõÔL麾 ‰,ˆÇã‹D";„·#ÿŸ|¬T*ýxbbœ˜˜ X,bYAÌÀ4M‰„‘Íf¯M&“š¦] þO H)B,¬V«ÿ622bŽ1>>N±X<¥m!Š¢`Û6‘H˲Rn¨­­½¸õ|Ïv]÷ œË‰Þíáûþ-…B¡qrr’žž*• ªªR­VQ!¾ï³qãF²Ù,@A"‘¸Þ0Œû¤”¯ |8fóæÍïHBQ… 5UUë}ßßR*•èïïgÉ’%<ùä“ttt°mÛ6‚ À÷}nºé&ž}öY}ôQn»í6&&&(—Ë5š¦mÑu3MÁúõëinn&‚ó¯@(z/á3ãºns>Ÿ'‹ñÀ°bÅ |ðAŽ;FOOwÞy'ªªpË-·pðàAúûûijjš£(ʹ¤‰çyïŒAÁ{0EJ©‹E6oÞÌŠ+¸ãŽ;¸ë®»â†n`ÃÆ XV•»ï¾›ûï¿!—]v•J… ô™ÍØLüÏd2ï8ûïÙ¤”H)¥ëº,Z´ˆ£GrÏ=÷ e@,‘fQÛZö|§v<Ãwî½—D2É–-[hhhÀó<<Ï;MRJ4M#›Í¢ëú©•8/w³Lç‘ô})%GŽ¡­­Ûoÿ^;Ò˺µKé;ò99yÃŽ;–e2™ÆL&ñ}ÿ®ÓTºö\(ü¦z_—¡Í*d‰¨½0Þ¥)PTðlPM\„×0âJJ&‰ÒþÚòHÏÍù²öt2âˇŸø.­W|DÜ@Ótr¹Ü·lÛÖ2™L®ë(Šò÷º®wº®ûø){^xáÂvà@zÙ„º{~Ú¼qÿqÁ%kM2I  ªvá$$xÎI“>0űCÝÈJ½É®ö ;lyÔ‚ýßd×Ï¿Fcûj~÷£[«W­¬WEãñÇÇ÷ý°ªªwÄb±§f¤¤>˜'!à{R³C^pD‹ÿ“½4ñÉK÷Ćú’D3õê8¸Õ™»fn>ù¤X’ñ©(îds<î;¼îè”zªÆ¬ð|ÇkôOz¤£ÐÙÙÙ²ø­žo躦ürß>:::ˆD"lܸß÷—=÷ÜskÃáð~íß_ Ÿ—@ ÌPˆe+×MÖ"}Ÿ@$®ˆ»¿ØïU¶Ô[±Ï,¡RX€Ñ´&ŽƒS„À!@1!šÆ¶PxóÃŽÏß=µ;yq¨&“6víÚ…â¥ÑÔa=›JüÅšy ¾P.•[~äËbÕªU\qÅ>|˜—_~×u¿œ$Ð9ªœŸ@!Cey|Ù¹ó)•ŠT«ÖÉdMHMVø®Ý-<¾×áæÕ¯qí¶­DÛVÀÈkà[' „j¡®…»_â{?ãÑãõÄj¼/[N«•¢_|C4Í›ûñ‹W.ùF뢶U=Ǩä†q¦ÆF6mÚĽ÷ÞëÖ××Û›7o>ÚÜÜœrG-ô u@H•hÂC.ŠtHÅ T,ËJã—õa‹ªÉàFŽñÙ›çnÙ‚ïÚ(B ÂQúâ¾?î^D¹4NC}•©|>e”Ç®_Ò¾ä¢mK>7Ôs‚b¹Œ2p†»KŽ%ÿóÀÁƒ}/ìÙó©­[·.½æškîôGªQ*íŸbeð*Ïï<Šk×¢GÌd4|÷û>òQÅq\Æé>]¹}b°÷β’üµïAðýP(´nxxx§a®ªªxžÇBÌQåÏ„«Âáð%ªª’ϰl‡µ«Ûi_¾Š;»ˆötP«YÑ8nG]¸™ÖúZŠ“ÚÎã’…MÄb Ñ}ì qâø4 ý£“ûúz‡þ!“ŽïDÕ¤"”™ m8—Ëí( ÔÖÖ¾§Šìýº®ÿk±X\;55…ªª´µµá:™ì>°iúàQ¼­ ¦ëîE+MRÛº7f°ï¿Ÿ¡²ñÊ«ˆ«SWÑUƒ{Þs¬{ìΡråsaW'£ß»I'´jõÜI“TB¡Bˆ«ªúÀøøxM__…BEQÈd2Ìm™Ç†Ëç±*£âFÚ‰7Ígþ`/•ƒÊ‘Wè9z¾Ì†úQô0šeÊ·(õwá™q2‹ÛŠ—.V~àØ73Úw«”Ç÷ýw.hÖ­]xždMahxœ@‰\´°µõ¡ÁÁDgg'ÃÃçJÇB¡@*f2—cgÈçÓ[Ö¡«SÔÌñÚ„àW"Åd,ƒêD£ Ž÷ôàÉDœ£¢)šùæÊL*õUǶÿft Ûq¿Š=0p~÷ÝóÅsš!>¶›×äo-U¬Doo/£££LLLàº.Š¢`Y¶mŽFùáÓcH/Ïg?3oèâÐÀ>l•…óšy««‹B¹Ìœ9 ŒaÙ6©š,¹\ޱáa M»Õ÷ýÇ‚ 86óþuëÖÑÜÜÌž={ð}ÿ¬Õ›®¿ ×õÎb.–ëÑM|ûÒm_Üwb@éêî%?5‰eUp×=iŽãà{.V¥ÌÁ7ûX¸b#±L#Coìe|lœŠå199Æ¢e+)Kœ8Ñ…mÛd2Ç!âñxLÓ´\{fwç‰ÙlMÓhjj"‹166vªç¤~ùsWÂ{›š$”+~)5b«eéR¥®>ÅÈTÑ•ª OœÔ¨ëºT«6R  ã9U~çƒWSï§çåÈ{à‡“„ôÃÃCŒŒŒ`YBêêêp]—P(„®ë‹ƒ ¸ß÷}'‚SÏ6M“h4ÊLõV,ÿ—À]w)ïœn‹çZ üêõûdµXÄt³aÚ[SÄÂUË&W‘Hß#||ßGUÀ±=×FJŸö¶6ê[—³våR;Ž«§p­ ¦ižj|U*„„Ãa,ËB×õx(zxãÌÒÕó<¦¦¦BQt]?)¡ß¿v ¾ïœföèøeNÇ/G’6AØÁ+öin2h¬)’Ï[ôOXÕ"étŠKV/¢«§—@Bø,_¶”Ë·~‚ØÐQŽy…ñD šë€ RR­Vq‡R©DµZ¥R©àyñx|nUõíù\,j 4U²|Á#•½‡?7z¬ר ]T×' ¡‹9¾¿ï;då ]ûž¤ï僌ŒO©_Çܺ,Ùl-©TŠxÑ÷!Ïw°„ÄÞt#!-„ó“ÿ ¬ì7Ól?šÇ«X¨º ˆS©°MÓN3#B7LâñŠªÙÕÒù|~çÐÐЙ¸ä…3㊪‘T4ôáÖôW6Õ•‚¬øF2ŠŽa*?/H~Ù›Gõ}̆8ùñc¦B ª*Š(ªŠ¢h¨!#Fàp‹¿×3Tìš~çlíÓ$ÎJD=Çß´i †”2æTíõÁü®Ý9m{¹&â¥[Ôùƒa?³{ÌWŽú„4Ã0ÑtM× é'¿kºŽª…PTE7 qÓ§­f’5ƒ]ëç;¥_wE×§ Dc‡2mbVy¾P§A«€>}mN“ój•5Û6p}cVY[´hš ´‰œd¤¨RrL*¾AÙ;ùï¾RQ!¡ ˆaÕÁP*ÌM9̯õ©O«¤£ªB÷Ãîƒ?9à?6Ýu“€8€7mþôXp6Ê4X}Ú Qƒš6é×ÿõÇõ?°mi¼Þ`{0QtŽHÆ‹5q‰å òÁ‰QÜýtÛ.eU Œ•s•ù«[ˆ¤£>ñ0Œä!j*,mViL+8.Ô§àâV•½ì¿ð—ß·¿5^”ýÓ «Ó$fˆ¸Ó×§@Ïž}uš”2ëwxi“ò¡¯]£}éßøÞ³žc„Í* ç%Ù„B{“FCJ!¢Cç°7d9Þ¸”Þ¤çcdž¼²#e*¦ÑTÂõUïPÖÀx¾¤hKÿë¹cÿò´[ˆFXÞ”ë§W_Ì’8Ûi+ ÌÒýlý›@6jÐV—KòUY›¯¿h¾Ú1eºo94%ýæŒH®[¨4–l©¾Ò ôNÈ 4-GMÑ´¸^ÌÑT¬£ƒò­bUN%#"”#Ÿá‘œìJšÂ˜0 ÅéÙv§å3[J> g˜=û3$f|A› ) 6íl&’@bš´3ë¥3NÌšAkXiZ3V™>ÛÓà‚i›Ì29›€˜µâŒeSÏ8k³¤uæŠ)³Æ•3äÌ1û<{V½3€û³€g„ÔS{„8WìŸõ[9cl6ÁÙ~t&hq–6Ól ÎçÏŒùgÆÿ·íÿ3yÞ)õ HâIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon-64x64.png0000644000175000017500000002332711273045225023707 0ustar julianjulian‰PNG  IHDR@@ªiqÞ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFôIDATxÚä›ytÜÕ•ç?ïý¶ÚUÚ7Ëò^6Øql‹Y’†¥:[wè鄤ú„œšœžÒÙÉžL $!$d!,I fcclŒ7eY²,©$UIµÿ–÷æªBØÆ&NzΙ:¾®Ÿªúé}¿ïÞï}ïÞg¡µæÿç—øð‡?üg{¸”Ó41 )%†a$Ó´Öç«´Ö€BLH)ŸÓZ?¤µ~2/\×E)uÔ¿O)…ëºÜxãh­ñ<­[·²qãF Ã@ñ†ï˜–…RÊ¿SJý£ëºËËå2¾ï£”B”ÇqÖZ–u½eY”RþO¥Ôc‰±™ð'k­ïÌår§d³Yr¹årÏój?Gã88ŽC,;7žkÛö÷€ËïÒZOÛÿ!Îp]÷±l6kd2²Ù,…B×u ‚­õ´˜¦‰ã8„Ãa‰ u§¸¼îhÀ+¥¦ŸûŸJ€¢ÕuÝû'''t:ÍÔÔù|žB¡€çy¯¨”˲°,‹h4: —…ÃáO‡ÃᯠxÏó¸á†(—ˆqtü¹²€ÖúÛù|>™N§™œœdjjŠL&C¡PxÝìÔð}ŸR©D(¢­­ Ã0°mû&à^­õÀ‘PJ¾ïÿ燀âär¹|y.—#ŸÏ“ÍfÙ¿?J)lÛ¦X,N‚€«®ºŠææf|ðA±,‹D"‰D"W[–õ¯‡Vó€ë¯¿žr¹|L™CþÀ#„¸ª\.S(( pá…òðóaÃn¸áLÓ$‚iðwß}7·Þz+7ß|3?þñioo'•JQ.—‘R¾ïÍB æÇêÑf"‘8î”J¥Ó”Rø¾O*•âœsÎáÀó<Ö¬YCWW×\s ûØÇ¸êª«H¥RAÀÊ•+ùâ¿È5×\C±XD)5ß4Í0P<ø™$+rfê8^fFLkM©TBkÍÍ7ß @>ŸçÀ|ä#aåÊ•\{íµ¤R)ÇAÁyçGOOétß÷ !D¸–2g›RŠOúÓo)%ÇÛC)E>ŸgÉ’%¬\¹’ÑÑQÖ­[Çúõëùîw¿ ÀÅ_LSSK—.åË_úwÝu×]w½½½œzê© ‚ @áÉõߊûÿY4 :0­µ¦\.ÓÕÕÀ-·ÜÂÓO?͆ ¸é¦›Xºô$™H§ùÊW¿ÊæÍ›¹ÿþû¹çž{hnnÆ÷}\×EkmÍö´Z˜}êSŸzëü9B@k­kJœÉd8÷ÜsY¸p!ƒƒ8ýŒs(°c×>‡RäòpþëdΜ9¬Zµ €ááᙳš ¾F@ ü[!ÀÌårÇS‘B µÖA`YÛ¶mcÿþý\pÁÜ~ûzú'X²°·ï§¬ëÙAÛ§àŽ=Ãgnø/>ÿ'Ìï⬳ÏÂu]žyæ´Ö¸®K©TŠ*¥ÐCkïû|ö³Ÿ­yÈ[Û ,Z¼ôxâÇ0 z{{u®PBapàÀA¾qËw¸ñsÿ›æ®et7m¢Ù½Ç49ë]oç¬÷¾ýê//í¦ñ‚­kÄUðÛáɧ7ÑÑÑI®0'Í9­~à½éì×]5Áœý9óºü·ãš€ÿuË/Ë;wöÒÞÚ†ï+î¼ë§¬\ÑÃù‹FˆMü’‰èI´·ž>äe þÀ=$ ;ȵ]ͤhâÿüà,ìn¡gi7Zš\ôžKm¥^¼V]M¾wHðBˆ¸išŸBlBÜ][qÎ΢î?î5€—7Ý·-ᤗEâ1Ê…<ÅbfkˆfsAÉ@Ô/E&:AK”ÆpÇú°M±N ~”‘œKc{7áH”tßóØÑS¾UxéûŸœžQí2ºòaPeЯ2MÛ¶¯)—ËÿøÔSOmº<—Ë}éÙgŸýìàà W\qÅëH0§þpÕñS4­K/þöÊîÁeÌ9ò”rÊÂD CHÈõ;ÒåByÛË€k€[&­g~ûH„ÁŠÒÒ…½ßþDVÄ7 )n—h¤088’B¨Zùè ¨óçÏŸÿµb±øË'Ÿ|rÉc=]·n–e]¿qãÆ­RÊ»gïMa†ŽŸ ÈõÞ…°cŒí,Óݪz&SPžªÌ–a_s„:¿å(¿ò lÒ{!ÑÇÔ”ÎR'ò¤û÷®5$·,®|ÿÙ|õßoCïþ¦T*5'NÿC{{{pÞyçu‹Eúúúhll¼khhh@ñÄLL˶ßj²£"Ø´ñ©GW-¬»ò•m/±ÝÕ¼ólËtÁ«‚“&x³ú]®<ð=Ð ü,è ûw ·¯Èª“¦t‘¾qñ3ÓË8¦" sÛMŸacï_üÚ×q]÷Äîîî†ÖÖVR©ù|ž[o½€R©„ã8_0 㬙b(¾ñ¡ð[Y輑QùKkê×öX;VvڞبV’3ÏŽA)¾¨Ê‡¥¬|Gë h¥+?“&„#¤ÓÜ0ÄE«=<Ëà×;Zÿ½Ùú{Ë„kom![ÈcZ&ó[<¿s€Õç¬eáâÅŸ?ógüºº:Ö¯_϶mÛ¦ 0«W¯fß¾}]Àà´DCò˜Ák¥QµÔóFNk×U[¯ÌÞ×öÎ32¼²c‚ý»˜Û]SÃà—*³­ÔŒïJ¤ NÌf¶nëgÝ©cžàæÇÖ‰ž‘6 i8Ö(›!ªN-RÿÇ>ºñùçÙò ô÷÷WW›K …B\yå•Üÿýüä'?yOccã÷kXD]cç1ÉœRšž“–°lÙò×fpV$d‹ú‰¾¾½g¾»ëy>uæ(£1:V¬%lÁÔxyÐn…!@X`8àÔAC{·Œ¡Ç·òbÖáæ K %²|qç­ÒWÿö‡ß ©µ™‰l-L9·9q㜆èg;–­ ïÉÑßû …BÎÎN,Ëâ²Ë.Ck=½áª««{Y±¼êŠ˜Ž¥)ìƒ@aJ…!¼ v­«î_AÀ¡² Å7ŸšËo^„O®åoË.zDO€ôð¦*HQÉáVhhcjß0/lÜʯ÷™Üûr;m‹ZJhí5ozü1„­*þæ¬5˾ҽhYû¾—^`lï.0¦M]Å駟ιçžËE]ÀŠ+—-[6ÞÓÓÓS.—çûL)Ž-Íi Rhšúú$AP©Åçó¹éÕ–ïûa©K´DÊlpøÀ®_3È'v³ø²Ë¡¾»âBWÅCB´ ²i~{ßo¸mG7¿ß0ñOÙÒ}±æf@ ¥PJ}ôÕW_ýJggçØ¬’Ýq/Šž|ðÃáðZk²Ù,Åb‘B¡À‚ 8a~7ãù½îäwÜOwÝ8a6Œù1^ ­Àž·šöú(E[GÒ/rrKœ»»è+Ó·gV4N$daS&=9•ynÏðÉÆÒ· CbˆêægH!Dï¡€ÿITf|šÑOÄãñoÖ !˜?>Ñh”§žz ß÷yûšÓèšß…|îw”²£Œ6žÆö|ULcä\ĉ§bÖϧ)n“IÓ¿w/Ë—/Gž´˜†ˆ‰`EãCƒÜ»‹þ]/óø3[¿"ã‘/’´ñ­þ9ìŽð¸”Ågí¼î´,ë}cccLLLP,‘R‡ikkãì³Ïfûö\zÅ_QŸÛŒÄHžu>éÌ™Ñ1²©QÔÐ~S»(t6±÷`‰½;¶rðà§ŸsÇ&9é„¢¡áXŒé)?MÀ”B«JV€ê6ùXëA Ž™¥”ÓÙÙù;×uÏ"•J‘N§q]!áp˜|>O"ç¼ ×Ñfåhñ ¾ú,¦2cÄÊfÛÇ •p­:†÷ì¥ïùçÉFšpœn Èe³Le³4$<úÀ}Låò$ôp¢UõñD|‘»öœ=B„”üágw‚öQÓ‹³£­˜ùBù¨ •‚§­ÌU«V=jÆ;†‡‡9xð £££d³Y<ÏÃ0 Ç™ŽÿñÉ,·§øäû.%i¤‰ÖKÊvŒýy‹­yØ—\€§! ŽÄØúò.öï߇RÛ2×!†‹%d¡D,Ÿ%~Kþ€BpÞ¥Waëø|ߟ^°½/Ür{|Az4Ïîz˜Û~ñüÙ œðŽÞÞ^ÆÇÇ#N“ÏçQJ!¥¤T*ẕ Ù’ÉðõÿŠ|ïÉ$ZÛPN#ûwnæÑWÆ,…hmI’Œ'xqÓsd •òÖÄø†e ‘llax,M>›#;9I6'„øgÏó>?-pRrùûß_™(Ãà?n»£iªÊ|¡Ì‘¬Pt+V*“/¹‰k/9ó¦ÁÁýŒO¦Éd2är9 …¥R‰R©D±X$—ËM÷'ÒiÜ|–ÇŸÛÂ÷܆ÙuÅÄI çÂV€C@!;‰V&¡h„ ×]D}}#S““ŒŽŒ ‚€xÆ'Æ8uÍ;M¥Ø½{Ùl– RÒØØH&“AJI(Âqœ¨Öz¤\.?[kŠÖÌó<<Ï£§§‡L& ^×’ŸIˆ<\·eÚ¤DKI"•ùuù•±žXs—œy2ç®XD2™@6†ecÆô1”Úñ–R©D6›%›Í’Ïå™Lqß/î%ŸKÓ4÷DêZp÷n"Ó¿ OyDš:™ŸÀ­ž ‚€b±H*•¢P(ÐÑÑQ]vç)•Jø¾íáR\­aÒÙÙɑ֯%ïêa2“>¬e¦Ò„JîÕ<ùÂ'©O B’XÜfAw­ Q\ße2çR,+º²Q©º]¥=æ!ÐOð<<Ïåmo[A8ÇpbÌki$=v€B¢ )$ù\ŽD"1}˜¢6»®ë‹ÅˆD"¸® €mÛõRÊG€ýGêUŽ199I<ŸWãoÿf-BÈC›”Ó xvË÷íÁþN£ÑA °t–Æ„O{ƒO[Ò%P‚±\%Ñö•RÌí¨crªH 4AàS*™?oŽeѺp)ëÞs Ûž~˜þ¼C4dTG†1-¦µp* Ó³[*•0 ƒP(TTJ=p¤FMM kzU,§ÍŒ”3GΦѕßÛ¿ÔÊa•#Å2®ˆ ¦ˆ"íQcIœ°êCùw'~€çåhoŸÃÚ3Oá·þŽÑ)©5¾06–BHX¾zƒÿŒyÙ>v´¯ÅË„¸¥¡Pˆd2‰ëºd³Y”Rd³Y\×ŶmÇ!Ç9= ½©Ú.TÌ`8}D„a$ü‰‰xÑË.8˜‰ÚuÊ2˜ :™`Á§qüs,ŸW"W2ØÓ"™ÃI=K)‹8=‹º˜Ø¼?Pœ¸h1_|g¬[G¡;ýË5tMå¹è‚¶4t2™ S¨®éëëëÉçóxžG±XœÖ„b±ˆmÛH)ijjZdÛv—Rjà­,ë¿=÷´ïÚ‚­UkqçÞ¥ V½ÀŠ{ˆP È¡Šyòã»x¥¸ŒpãŒü&ê,ˆ­H´L"ÞH æ/8¦¦F”†¾ïr–¯:•±þWyä×275…Qû™}t{ƒxË‘ ¢H] ¥TíŒÀtO°¦i’L&íH$r«Özô­ô1Í >Ra™íXe7£œ Ã,c;FDàáÓ@Xÿ)¾íßèš×†#G¨³=^êÅwÚhIjºçµrê©'g‘HÖ3²o;ƒß¹™î|šÎ1¦òù““X±†rx.mM.YÛ`bb‚–––és3 .†išH)ƒ ¼™ñ~´'ÄL7?,øŠ˜ÃA<:ì÷Òí—VÉÇÏ)ŒˆÀˆi7̼ü^܈sÒYªÿ?’'R!?ÿt–ŸvR»”Š%-pÂOýê^*‡Þ5çáÛa|+Jk$n )ÁŒKâ±áp˜‘‘š››©5qmÛÆó<¤”$“ILÓ,LMMåÓ{sÞô3Ztgësågvuç'4¡fMPÐx9”hOP_†¦áÛž·žÕ-]DÂ۱˰§¼XÝÅÍ¥qB¦móô#ò«g×Ïñqƒ†:‡¶MSÈ¡.DZm¨¯§©©‰††¤”lܸqZêêê…BD£QŠÅâH89T‹îp¹ÿõíñÔaêÕævÜëE̿ʦ<¢­‘ˆÆÏ*̨DFACt—†ÙµñܹÃ$’MM&}›·Ð¿s uíó´`ü¹Çyæ™­Ô5¶ÒœŒ 9D£QêêêH&“Äâ1•U†a‰DˆD"lÚ´‰r¹Œ‚ññq¢Ñ(år™b±Èܹs´ÖÞìcw†að装4×|uK©+©ð^yò ¦žÛÕV8IC‚;¡ ÕK‚ˆA$+é e)FÎcjj3¶£#›û9êòë˜Üô<ÿø*q2-¡ ɱX‚h4J,#‰D±m{úp5À /¼ÀC=@"‘˜>†#„ ££ƒÖÖÖ 3õ¡þî»ï>: ‡¬7€WJøª ”Ò±3NþâÈæ=ßÊ »„“us <×Ãð}LG¡lØo¿/öêÇ}:Æ$aAýž ßu å­»pO8 á$I&¢$“õ$"‘Žã`Û6¦i¢µf||œ 6ð‹_ü­5±X Û¶‰F£D£Qê«!bYÖÝ3ß~ûíÇØÏ<Ìëù‡¯Ã ‚@á%%Ã?|Kñ/žšœgÐ1ŒÆSóþ 1c”xê÷lïdÌ\Awá)†{»)ly†Ô¯ ;âÜ^L.H°xþZZZ¨««#‰`Y•I( ¤R)vïÞͦM›  …‡ÃD£Q‰DÍî ‡Ãmëׯ?¾§ÅßþίM_o|øÓ¸fÞekÿ~h"½)÷R?cÈP“ɵLä07½.3Mèàï±§Ê žx>bÁCšXüþná‘ ›†EïÎ:êêêp)%ZkŠÅ"étºVZ˜ö ˲°m{úºz„Ö …BŸ“R¾eðGô€C½^|è:úãî+–néžôÎýX‚TÇ2wŒNsο!,ò?ÿ7†&]&ÚϤ=½—}&|ùÙ(ß|efX–5ý-j‡¨Ç! ‰DHÄãŒOL|`ÅŠwÞqÇbKÿ-¼.»è”÷^Îßìê5 Cã0éXk¯Æv,¼ßü=VDÇ$[:Y¿m•+`™H‰Q±™âU?3žk‹šĪz1xàÀõýýý_>}< 8äÃõÌ]xEwìGË ©sÌ\–áñC.4Äê¢}áO– ÛžÏ#l›ùšR×@×Ô~æýšÒ×<À0-„AÀÀÈðk§2c¿ž²Öèœ1>=ƒýV³Lθ6ª-à8,™×¸nyc|m« –EÌò3¢l+„¼\ )²Á’µVökÌ,RÌ&AJ‰&B˜`Ú8– ;‘chdäŸvî/­:Ž(`WÁU«Q«“«™ÉíX¨1[nV›3̲€îl“gž¹Äzk‚ Ʋ^25¡ÏÚL¸1re? 4¦Qi•Þ¨4$D!@ l[±|BæÆ§˜[_¤%!Ñ#OìQw>´%øqÙ׃€Sè^õ}&!5ð5¢Þ”£Ê¬œÚ®ZíÌ®±¸C®ýø:ó£K;EÏpNLd%™¼"“W¤ 7°(yß!çÙh%Áø•C•€mT¶¶¡‰;.1ËÅP%lY¢-¡hLHâ&±04F‹Ú F&õø7r¿óÀ–à§Uà¢úîПA„ªþL‰YhÌšéðPåZ4}î2ó¹Àzw®¨Ù6 ÈÀ4a|J“šÒìÓ=MGRã+(y)¦ ‚ôèp†)A)%ºšDûò.Ù˜Œ(¢Š]Jß4Ä$óš$­ÉÊõdN –u º›%ë÷Ÿøø­îç½@UA–«æÍ"BÍð’×Íölן=ûVÕ ²Ä¼ßßè|ãï.¶V…—ö+reXÔ!*«F %Ò9˜ß*i­«¨¾CCëÕý sZë<àM´ÛÉù­ÒŒ… baƒ¹M…²Àõ¡«QP´'s›OîVäËš ï:Çìn°Dç[‚gf¹þL÷¯žÆB̸ÿ†…ÐL³µöxØfÞÎ-z‡½òKÊÿý65uá2#|J·™Ü›W e4¯Žjž~EeÿºÑˆÖÇ„t}V°oTûÛˆý KUw,WÉå¹½ª¯>.O\Ú) ¥!W<±ËOíKiwÿ˜®[Ð*" [±ˆ(Þò ·+ÐèSæJ»)îMnÐ/õ@aVìëĸ:TÔ„NÎA£:@WÍ@ h©þ»Þ6EãœzÑRðt8WBåJ:Œ¶¤h:¥K¶Kƒðè¤Î¿4 ö¹>ã@¾ Þ¯ŽÁ"Bˆ†¶:ZC62g$“×ÃÀTõsVÕ}ljê{˜¬>/Wýly– ÎÀÙ×ÓÔffÚ3fbÌ"c¦6$ªä„_Ó ^MUÑê}5C¤ÊÕAˆ35Óýê)T­æ1¥1^»çBùÕ,ðj–WèZF˜I€<Ä@β™D™3ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF1êIDATxÚì½y”[×uæû;wÄÅTj"«XœgŠ©yže–§¶ÓNb·cÇÃËK^Úé~yÏÏí Ž­Ä§ÓZi{ÅÃJ"Çq'±9’âH‘,K”¬‰2ÅQœŠ,Ö\…BaÆÎyKEJÔœ^ÁZgáê¸Øß>{{Ÿ}öJ)þýñÖ=´Á[û0~ý×ý-¿!®ë"¥DÓ4t]GÓÚúa !Ö!v(¥®¶(¥ú  !*À”âyà~¥Ô.¥Ô0 ”RH)‘Râº.a¾.×ëy7ÝtÛ¶m£V«áº.®ë²wï^ÆÆÆ(•J<ðÀŒö3”RMÞÆ>!Ä”R Ãp{†"Â0DJ‰R !Bˆ¬¦iC†a\ ëúGu]÷…ÿ|øg@½­gÀÛí!„ÐOJ)?Á2Ïóp]ÏóˆPJu€¦i†aX–eÚ¶}›iš· !îþ3päßxfH1¤”ú–ïû×4 êõz{z{žG†m:ß§ë:º®c¦ibÛ6±X Çqn3 ã MÓþðoKÞ.LH)µ1 Ãò}M½^§V«Ñh4h4xž‡ïûAÐ6? ¡iZ{Dضã8$‰.Û¶ÿøyàïÞv”J¥·ƒö/B|ß÷ý5Õj•Z­F½^?e,´ÿgÀó¼SLV"‘0ÇùsMÓŽ)¥ž}Íô±E^„oíÿSÏó6Öj5*•J[øÑ ð}ß÷ÛŒf1"3dšæéÀJÄb±¯ëº~à¾VsÇ_³õ0LÓ|Kí~õ<ïŽz½ÎBío4¸®ûó³€N?Ðé¨;Ïiùˆóâñø¶,ëK¯VxRJÇ¡«« )å¿m',¥t‚ ø/žçµµ½s¸®K½^Çó¼6wî °¦iA€ïû躎mÛÔëõ6SÒ4 Ó4‰Åb(¥>©”ú†RjîÕpÞyç‘L&_‚ x+MÏÂ0ÜQ͈íD€ lÛ&‘H0??ßðbf3 C.½ôRÞÿþ÷“Ífyì±Çxøá‡©T*§ø…0 W…ax»Rê[g{½AÐÛÛ˺uëh4X–õoÛ(¥nðÍr¢Q«Õ‚€_üÅ_ä–[n!•Jñ /ðÝï~—Ç{¬mV:gÅ'?ùI~ó7Ó4‘Rrýõ×sýõ×óÅ/~‘Z­F,k›1]×ß|ëÕhÿêÕ«1M“F£ñú8áŽÿÍ~t !®’R¶ù}ÀþáòÞ÷¾—r¹LµZeÕªUÜpà |éK_âî»ï>Å Ýpà |æ3Ÿikydv®»î:¤”|þóŸoû†V:b‡"TÏBYˆÇã¬_¿þuKi†ñÖ¸!D_}Ñ‹NµZåWõWùÈG>B±X$‹¡ë:¾ïð{¿÷{>|˜Ç¼M ?ýéOc¾ïcYV›)¥xç;ßÉ#<ÂSO=EWWWä ãš¦%”RÕ³1?kÖ¬!™L¾¾¼|öU—R޵Ñh°qãF>ýéO#¥$‘H`FÛtT«UlÛæ³Ÿý,·ÝvW]u]taÒÛÛÛÌÞYVÛ·¥R)n»í6üqÂ0Œ>Ë2 Ã9í·,‹M›6½®ë[j‚„f§ —RÒh4¸üòËI&“T*þìÏþŒ0 Ù´i7Üp—_~9ëÖ­ãðáÃ\ýõôôôP­VùÇüG&''I¥R¼ï}ï#›Í°mÛ6ººº:c °ÎFû×®]K.—# Ã×Íoj ¹ô›<ôNíWJ¡iW]uUû?üásçw²~ýz~ðƒpçwbY]]]\~ùå ðå/™/}éKìØ±ƒûî»O|âíY088ÈÀÀ@;Ÿ$¥4^)J) Ãxݵ¿ À[™è ¬Â0Ķm–/_ÀÃ?Ì~ô#2™ ?üá9tèßýîw™žž`íÚµd2J¥ßúV“ÔÜsÏ=Ôj5vîÜÉÏ~ö3¢`3•Jáû~€¦”zE¨ïû¬X±‚ÞÞÞ×Íö¿-1ÕR§Èüt¦˜\×%›Í’L&yî¹çðÏääd›Ë·À‹½Û¿dÉ’SÀüßi=@F‚´ßó<}ôQ®»î:4MãóŸÿ<÷ß?õzîî^¶n¿€ÒÔ~’ŒpÃ9%úÕjÒŒ061͇?ò1–/"ŸŸ#›ÍrË-·Çq]—ýû÷sòäIººº:ãä+q¦7n|cÓѵZí-‘¾®ëa'ÿoE¨<úè£ÌÌÌ ¥Ä4MÞ÷¾÷Qm„T‹ÓdÜè·aXð‰_Úâ\d±@~în¦Œ¸éÖ÷àXw‚R©D,ã©§ž¢Z­’J¥:ƒ¾ä™ÌJ,_¾œÁÁÁ×ÝöŸÀ{ßûÞ7!Â0–;wî<åõX,ÆóÏ?Ï·¿ým>øÁ’Ÿ›§Z—˜î6:àÄ|Dbì4J"œ$Y÷]þ786ñÊÉ I&GOÌáÕçÒgÊDk§¾”Ã0¶ô÷÷rxxøžùùù÷öö^´dÉ’¯ŒŒüKµZ=ñ¶ §ŸÜñïÑõeñˆd*w à ¦Yši@cT´ˆAªæ{Üýé„B[›Ã®=ÎÖ~‡­¿ºŒX] Ùà`¶Bqü÷&~`-½rÿb×W,•ÚÁá)ÔQÓ„”Ò(‹þòåË_Ó´w:t¨§P(|}zzúÓ–e}½««ë õzýsëׯ×[4:\láë-ÀøúøèW¿™ÚNWóR‚:!øuð+PŸojº_æ;H At;RCàUÀ¯‚ Ak€3R@¨¥C\Gj4t4iÓeÌ®,íüÄߌ‰W+N² ˜Î¼ÏÞDP+Ÿ§Äb±wmÚ´é.×uÍuÝéP,ß166v,‹±fÍFGGó²Ë.ûi.—»×²,Ý4ÍE㈷Ô|í¿&ô|,¬T œE×p‹àÁ-5Ÿý„.­93¤ß´f6°”Íÿu@„ÙôfŒ8ØY(a6æÑ«S?Àp§¶Ž¼£îqw§ÉvtøöóÃÓ×rþ¹Ûë¿J)t]wkµÚò•+W~m÷îÝ¿üøq955Õ=33Óýîw¿››nº‰?ú£?²Ö¬Yó·Ï>ûìFGGï+•Jhšö¿ ”Røõ›™C)AþŸ?ðdF¿¨à/¥PµèÉYôdBtY¯ÜÔú°Ñ: 4 „ºÙ¾Ö²ÛJ6Ï =ý–ù’Í÷£y®n™D™iª Ò|™¸V$¡©”Ëì=î~¢æñ ­%›d ž>¦ø¿ô%8ŽÃM7ÝÄ­·ÞJ­VÃ4Í´Rê/”Rï©Õj^6›5ßõ®w‰o|ãÌÌÌà8ûöí‹›Ù»wïçž{îȦM›Ú)r€;ï¼³9¾ÿ»ç¾©3 ”Яí>o­s‘ô\Æø,‡l^o³a¥@S^KÛC@F» B¨7ÛšÔ2K*l ?lý­šç­y¾_%_œåàáñXÀÊ¥ŠÐò˜È{sSEù°B!€„-Øù‚ä ? [_]¯×¹÷Þ{Y¹r%+V¬¸)›Í¾§¯¯C‡Yù|ž‰‰ ¤”ìÚµ‹Z­†aQ`Ù»lÙ²O~ìcû¬®ë/¡©ÀÌäÉ79ÿó†qg—U׆evß¶UŽx<þ˜¦X»Ro _Ê&JA‡@µPªyŽ”MÍW¥ 4Ð(•B},O6²bÈ n„LÌz—ŸuD`‚gŽ þè>E±öÒ„Ü?üÃ?ð|€T*µÎ÷}®¼òJ‰÷ß?wÝuh'û<Ï£V«EAî/?ôÐCÿã‚ .ÈG«}§˜ ¯~ªï­Ha™Æ;·VïÙ2àûÓyÇuý¤“aÓ¬DZMˬD‘UóuÕ©Y¢5cšæJ ‡)6æ¹ú"S96#¸gäâ§æÂ%똦Á‘cÇù»ûžÅ O»~Á 7Ü>÷ÜsŸèîîÞU^ìÞ½›£G¶SQ%ǺuëXºt)=ôRÊ+‰ÄÎNG<<<Üœ‡¬÷¿%LÈ—úžƒÇŽyw4¶.ZQgÇÇl°ç`K/DÓÊÔ@zMç«Â ‡S‹žEKð-“£ÅšLÉJ²ÿ@ražw\&05ŸÇø»#QŠmÓ“q«••Ôøç'vžVø1]C+V^ÓÓÛûE!ÄæÙÙYjµGebb‚ N)‹Éd2|èCâÚk¯åæ›ofxxø†B¡°s¡6Be¼̦U«£ÎÆ+kÒ]ª}u÷eŒÌïâöÍslZ¥ñ̾iécË–¥Ð˜kÒΠÒ}Ññ}—h™#­é˜… z ¬³{på‰p÷“~pd3Äûpqa˜¦ìÚõ ùÙÉE¯³ßfÇŽ¹/n»ñú›ÇËž˜œœÄó<Ž=J>ŸÇ4M„tuu±nÝ:>ûÙÏr×]wñÇüÇ|ÿûßgzzMÓ~NJù?t]/¿€jµüÚ͉eaÛöK*—Ï”ìBX†ðô¼ç«Oof×ÈQ>zñ$›W)ž>xˆÞ¥WÒ׳¤8iU[ÌHµ˜Î)ŽÖÍj ?Fœ€O?¹—-+|Áç¾ßÃãcCd36½I0 €955<ñÄ/¹¾Ážîeë{ìÏ-ëÍ}ذXyì˜ÔÓþ±'¬™éi¤”d³Y²Ùl»îHA>Ÿ§^¯³oß>öìÙ­àm~>ŸÏ­sßùÎw^3‰DÇq¸øâ‹éíí=¥vÿ a(t„Püð@;è|ì’®^Ñ`Ï“Ïsé;.'žH59¾›‡ Ü4I*ì ¢›˜é&†Ås'(M°Û7øòw³ŒW3ôåB4ÂP"¥L躞xòÉ'ë®ûb©h R뺭O]zé9Ÿ\wNöÐs?Ej&ù‰QmI¦O«Õë2Nk]]]äóy<Ïã›ßü&<òÿøÇùÑ~D­V#•JÑßßÿðºuë¶_ýõÙz½>tðàÁSRF´òôš#[Ï£P(P¯×Û³ ³4DÓ4¤” I¶W§dHÌ7øÍïuqëæ2ïY=ÅS?ÙËÕï¹a8PŸw¦„í¸¢9¬fª!ÖÂgdï^ö<½Ÿƒ^Н=¦¡:¹t€j¥½Ã0DÓ´ÜáÇŽ92 ã¢-ë>Øg‡ÿ-ÛÓ³¹^«Ss]â]Ýä'F0t“ù‘CúÆ5kÂgž{^ ‚˲˜››ãî»ïæÈ‘æb±è/[¶lüøÀŠË/¿üwíÚõÄôôôÿW,g»»»ßÜH82A¶m£”¢^¯wþ¯§³ŠYJ‰©…˜Bñ7?Õ)ƒ¼»:LÏS{9çÚ+%`e›&¨í„Å‹~@³ÁNPšá¡{ŸfŸ?È#³Ë‚½$­°Cø­ïcããëçãâÒ5}]w^vÅ¥×TËeòSc®Ëø‘ ¬ÙÈìè0J7¨WË¢W¸FwOÇ—à ˜¬T*Ý_øÂrRJÒé4ùÈGÂU«VýÚÌÌÌW:tâC###÷麾káVãͤñxMÓ(•J´‚’‹:+⚣Éý3¤doágæzÜûB:“`ùöõ LÀìÄ:Ù©Ä›ãž?¿‡çæºワ%=ŽâáA@Jê —¾Lú¶Û/Ùv£ƒÿ‰­—]ÍØÈ ºú—áž8 JRÊÏÐÕ»”%«Ö39üÒ­qìÙãõØWÇÇÆþÒ¶íQ]×{5MûlÛ~ßµ×^Û¿~ýú˜eYbÿþý[¦§§cÙlÃ0v !^RÒb¼ÙÜ?•JEåƒ"‚ë£À%ZÌRŽã°fÅv’ý~ˆ÷?³ü±°’]!¸n€ï‡˜¦ŽiX–NÌRœnšf9‚r§À¥¡o&BÇÁ÷ýó}ßßãv‚Ùl–¾¾f€X²vpL@éÙǨ%óÕfÒT¶,&ÀР+rI/…•7’îÊ‘pl4M£§§‡cÇŽaÅê•2k‡X’²©fBÉÄÉãd{ú)ÎåY³i+Çì#ѕŰc*c‡ö†ÇǦ¾(þV¾Ê…k-ÁJß÷ËõzýÎ(XÄç½5ÙЖˆëºþA¥ÔJÓ4Oš¦ùß÷õhÿW§/‚€\.GOOO³ÖÓvÉkç3iZ¬,=É:QÆÐÁÐB@*J¾É } “©óH&³$ã±v•t.—ãàÁƒØaƒ5½YrFÀÒ›9Z*âû“Ç⤳œ>¶l–MÛÏçùgŸ¤w`Gî¿ï'.¿5ï<òÊbñ²ìïMw–e]šJ¥¾"¥Ü•›¦Ioo/º®·7ãuš¡ 6Íæðü³Ýó=z—­`flÝШóÌOO0—ÏÏ?»{ø¿à+Ãw/o”ð5Mëêééù†eYï¯V«íõÕ€h-Ö4MÇaóæÍ8ŽÃ<ÀW\Ášu0T ïÐA¬¥kÈ®ÏR-—¨–ŠdËeÜj¿ZAVJ07Mzî(•5çQª‚_«‘ŸçéÇ£g`9=½ýLNN’L¥(×\FsîE—°o÷s ­Û̾Ÿ>‚[¯22‘ÿ«ÑŠÿ™¢äMKoð—-Y²äï5M»¸T*Q.—©T*mS9®Î-¥®ë200À­·ÞÊí·ßA¶+†:ô ªw% ¬¢ZšÇ±u’ŽI#ná5\= .ˆ.̱q’¹#åãG“îéC3-*•2B4Ø=ß'»dO=þ6n$?v¡iO3´ù*¾Êï»ÿ¾757ÿº`YÖúåË—ßÁ†R©D©T¢X,R©TšBð¼6;hµhïjñ}ŸD"ɉ“'ØÒí¢ca¬Û„úİ…KC4ð„E]ÆðHêU¿Ì”•ä¹Ès™l7¦#žL3_,Òh4¨Õj„å2z_?NW–‡îù{<©˜ ºÖ‚`yæS¿ð ¿ð‘‘‘'‡‡‡) T«Õ;,_¾|ömÛîÖT**• Åb‘b±H¹\¦^¯ŸBÏ:ˆè¨m»ìÞ½53ÂÏÝz=BW¨À…°„aIbéž%‰i!år|nŽu“ Í&³y=“#'ذmµjÃ4i4\fffð}¿µ§K°´¿‡ª™"´“X˜TË%L]£j™Vww÷Ëd2ïܼy3¥R‰£G299I¥Ra~~þ5ïŠ|C¸ãŽ;îJ§Ókfgg©V«D3 T*Q©TÚû}£x Úv ÏóˆÅbX–Å“G]ìÇvñî+·¢*³X–– ÍdvºÎ³ãeö/л| ÉÂ,==½Lž8ÆÉãÃ8É4B4#àÃÇèîí£^¯#¥$™L`ez)ÎÏã{.žgµ·ÅV«ÕÛëõúû<Ïû]×Y»v-k×®E)E>ŸgzzšR©ÄÉ“' ‚€(º}ˈ'âÉ®LæœJ¥ý¢YP­VÛ-"®-dDÁK´ÇË´,þå‰ç°Â7^0D¨âعuhæ>ËTMrp|žÁÕ˜=ÁÐÊÕÄ,ƒÁ«Ù¿û9âÝ}ŒŽŒO$‚°½ù;æççéíéa®•ÉŒ|P´/Y×õß¶,ë^!D££ˆ%K–088ˆRŠR©„çyèºÎþýû9|øð« Š¿jÁËP‹ÇćÞ{ío8²18ïkízýÎÍֻݣ ¾Ÿi`Y¦i¢ëßûÉótå2\}ë-'G©gªfaØ1rqA½V•J‰ÐsÉõô`ÆãLOOqÅ5×ÌLÏ0›Ÿm›ÀB¡ÀÀÀ‰D×u±m»}®ëâ8ÎV¥ÔÏišv÷¨72AÉd²p]z饌¿:¾ÿçŸ}ÕŒ§áZ_2ù5ýdñ—2\`Òk@)†(=ÝYÝYÕWFšïûM†dHà/ï{š-×N×ð‰Õµ”Ú‰# æbì:<Ê’¡ÕŒ?Êê ›ØûÜ38‰Ù¾%,Zξ}{™™¡T*µ)°¦i‹Eúúú8~üxûZ£Y`Yaþªaw¿\œÍŽ /¼]»võ ›I½:õ×5lßÿSöMü²Õ¿Š zVÒØóû …VVóÅ6¡yçÅGÀèºÞ+ êý0|ô0ßùηùèG?Š”ŠLÿ ПÄÂ%£Õq=TW†ÉÑ1ª•"¾ÐY½q …ÂÅb±])„¦iÌÏÏÓßßO&“¡R©´É@4S¥”¸®û4MûûW" MÓØ±cÇŠ·B¼ì® @ qÖCjêÿ wþ¸n$p2)†r .ߺ–m«—’NÆÚ‹ ”¢nVQ/¸N¡wÚâ¨_P­VCJÉ“O>ÉÈÈšÖüþÁõ;hÔj fŽï}`rìúV®ÅNõ033sŠÙˆfYĆ*• sssär9R©T»EBd†Z¥(ÿ1ò/7¢œV?†aP(h4m%:ã 0hœµé±â‰óxö…ß‘å:zNP-`t¥êcn_C.íðì~“ýGNâù!öúÙþHH‘¶DMû"SU­V9rä===͵إ«If—pìàXªLüÉý,]»…ZCÃq …Éd’T*Åüü|[#£d_½^o §»»›r¹Ü!Z4BÜl‚S3 /„¢”j;å®®®öÎÿè7¾d= ð½³4=:ÚìôïxûÚÚ’¤W ¬+4[¢[&ý)smŽ®øJr{ŽŒst$OA½4SØÙÿ­ 躥Š-%¢¿-„RŠ\.wŽeYƒJ©±7,aŸMÃ,MC¯–7Õós«¡c$B¤ë¢™UT¨£”Di!ºòqðèë_…fDz3lp©5â#;ã}ßgíê•ij+X¾tŠÍ—¤®t ß÷Èv¥Øºu ÎÙÊÌ¡=»ç»l¹ú<fcÔ‹V«Pª³®3·[ŸEÂíXœ'\×=%A¨”Âqœ´a缡„"vï0Ñæ§zÃr‰ ǯ t/„˜‡ô«Ó@ºJhxH%(ö}Šx*O¶ô‡k Ö,…º¯s|"FJ´ dpp+VP,UHõ ±¢oœ³`èaØô ;ÎÛÁùçogÍêÕ¬\»†òÌÿú۟©yÄžÚË ×öòÓdŽRQbˆà%«Rñx¼½úÖÉŒ¢ØGëõzD"q¥âGo\2Nú¯Üž)Pz<ô\d Ô!t%Fà£aè Bº¦(·ÁÄÞïÓµéCÈÔ¥$ÊûÉ46ÖI™>“sØkéîéi·ÍÑcÝlÝz.Þþq¦gçÃ;¶³ýÜ­tgÓÄ‹é±<òÛ¿‚ùº© ©<ÈÕ›Ö2™éa2×ËxÉio/ŠJ#ºØéü#0:)«®ëmŠ)¥\•›¿!øÞÙfI,%†Hß#t%A]¢§dh ¡# ‰>¡b ŸTáa¦G/¤;w%]•ý¨@¢Ë[ƒ¤éQÔb¶ƒil;†’ÞµÛZw.=þ$Éd’›Þq-¦âyU …Iž¼ë°Ÿ{†•YYQh4¦ëÔì¡wmõî›(„IL£wDÔ²§§§³aGÛDunAêŒØ[ç9 ÙËë @àûg!‰éXóÊ0ðv ê!ZÅÅÔ ¤®¡9a†(·Yº°Ô(2=úCÜžÿ‹xî\,ÁÄĉéØ&œ˜&°0M]¸t¥cä2&ÉD‚ÿøþ›ÑuÃÐÃ:¾ŒóìŸý9ò‰Çè¶ùÝ£©L çÊ•LŸ1“µnÒ …o5ÀNsÔ××Çøøø)©å(³Å!í0•R…uý¯/á+Ïq+ VÜž1Ïmx–”„u…î„`DL Y YŠ ¦HÚ&ý…Ç™ž¸Žôаýç14—T±BŸ9U/q28JfpKû–ÒÓ“Ã0Œ–“T(@×5©8'ù•ݲîâ5؉82î ­$E_§È0ëôR*ÇIÆ, §™mµ, Ã0Ð4J¥B<'—Ë‘ÏçO¡Š»õ[Û¶ñ}¿üF564 U_sQ°oX? c1d¾ŠWÓ°}.5‚˜¦@zÍ"eÍ=„°!Œ7˜ýj˾HwÏ;Èéÿ ©„¤u }t?Cn¦wé2„’„Rµ2¤!R* Ó"?qœ]÷S<ŸŸiI‚ª"¨4ÝF×mbµ8¹”N&cÇÛ>%ã8±Ø‹¥*Žã`šf”ýl¯ÔEö?‹Ç£sògÓU¬sØ+cAáÙM/×0Qý=|6ëÖvE`¥ÊéI¨ ô˜†nR }p ›eìatä'ôí¸™Dx¶}·dàh‚Ú|?¿Ÿøºøõ "”´æ^x¡Q/ÍñO÷>ÄȬ‰ãhº‹i­^ IÇ"•tH&›‚Ž„¥âñx»‚;Jü:tˆB¡@.—#Ÿ²Ví8étšZ­†eYG¢(öårBFFF˜™™yå;å=ïì–Ù„ 'ë‡öÔž{á*ÏUÔÊ »&°¬æŽQtEØPèŽ@3%ºÒôÇ$s“ßçèá!lb¤ã %@÷aiÆäà±'¨l¸Ý´|Ÿ (¡á• üôÁ›“dÒi,Ëlóu˲¢Ý$ âñf)¢mÛ­5…s@±X¬í …B»gv¡P ·"ìfÊÀ²,J¥Bº»»÷¾œ0MÓ¤T*qàÀfggß8 ü7—ûK‘I_åÖJèuA­ 0“t… AE¢Û:hÝV„˜¡Í6ÌÄþÿ›Ø2—͘6¤b&ñò“Ÿ¦{Ã%øJ5ýÓèÃ÷3U qâi'vJwô¨M}<‰ð Ê0 öíÛ×Zƒ¶Û¹&Ïó(—Ëís‰CCCEÓ4ŸNû#@Oœ8Á8[gÝ̆jgK¯Äb?4¶®ž©ýø¹^ÃiÍ‚¢Âéiú¥h‚à4Ó†nC‘5¹%"w.ž;ލM¢Y–}qƒ»þ£o=š®ƒa0üO?ÄŸ¡œÜD2®·ÍK4:îÐþ»Óév¦½£\ÿÎ;9|ø0–eµï9ÐÉ|¢öf}}}d³ÙÆaŒ/ **(•Jìß¿Ÿ'N¼z'œMŸ¹wÈ—Ú?)¹eÕŸVžyás^½fjó ÓJà1M572 0…[2™KÞÎ|°Š.§Fïü_cÖf¤b&©Ñ fžù1™ ¯còᇨ>õ±k.ÃÒI9ÍûDNÕqœSfBÄ\"­TJÝ–Ëe|ðA~ü㟲Få€:oüN§Éd2X–õ× ÍOÔ}ïÞ½EÐ&h!+é¼—ÌÂ.½Ñë …ù”NßbÆýù|þŽãÇår™7ê¡”zm¼X"ضi;ÞqÎm›Ë3U~ô¹®†¦Èfu<P“ÐÓБT6ÝBnËex®‡?9LåÁoJB=dº™Õ-ëùúÎf&‹†Þp§ ;¿„…å0‹iÿb ´6šÿìðáÃ7ÏÏÏO½Ñ•ѯ´Zg „ºöŠ ýÒÖÜß4žx~U­X¡·[Gé‚ðÂÉøÙ oÄ0-ª»þsô¥:ÄKz8éã»O1Ÿ/cYÆi…{&@j~'Ñsä:o{åûþ³‡~OµZ=I“MG«°,r¼Øßo âeŽÃUkú>tåê»&&þ'F1U€« ¡Qð$UaÓi×ÅÒn:M¥¯—'k=3Š  ][Tó ¼³ŸÛéš„Gæç%³ U}gYårùïOœ8ñzž7 8œÚžE-8>0ê@œáYtü­µŽ}Ó6Õ%Û—ßqÅ@üW6Ùòj56mVç«T=I#Pt¥c2¾¼O×ã<›wyúhé™¶¡½Ä¶ŸN¸§3M‹iÿB3¤i:šnjbrjúwç ³ß¢ÙKÚh _v^v|­ˆŽö…Bïú‚a´†Ù:ß™ lWŸ3¤ß·Ô¶J]Æ« E#И«ÛÌTc”=) ¨—z¡Ó]h‚:×_hšÐÑu¸é‘µk $JtÇ=ÒŽ ÐC¦w Ë<úBxÏtQjý.Is‡dÐHx–€„¯³C#Äi„ntü¹¿õþ¤TW“-áG ø`,6#:ð3EgJEè‹_[ üNl 8ï¿Äxç|Ðü%CöÄ|Kð5Å\U‘ KPn(¼P`誕J€œ 4|¦À…P¸"f*Æòrn¶¤¦ßó¼VCQtObŸú«µå¦–)plm ,,â¶Æ¡I‰lõx2´f—DSÇ‚DL0<­P…R­5©øÅ+ôk7Ø¿ø¿Ü/Ì”Ôñ'»ÐÔè œp';4ÐÚS÷œÆñ.¤˜â4ŽØhi~ü—®1Þÿÿ‡õ)MÞ˜WªŠ¹Šbª1CÈœ@ku’ìŒ ”j6ÚXÙ«·›Sã6ĬfN)f * U?1«&;ì±KÓ4¸€?_SóÃ3j&f t­›:˜&X† ¯ A eÓd) AØìcšK@ÒÆ}ö˜lŒ$…ª¤TWä+Šwl×7|ø*ã-%‹-`†¼Œ¬¢¿õÓWƽTûÅjsR.ˆ™¸%zM(¯ÜPætQ‰‘¼ ŽÉú®aYüômf6íˆx±ÖüÑl©‘‚ñ‚rÝïâu¤æ«Í–ôJ51u$áþQ5&õ3àu° ¨£Sr²;)Ìí+E&”´f8Fó#;$§¥TÚ¹+ôäÊ^bK2Â…c5y×dQU¿ò/þ‘•½"¾iPKô¦)GÔ+ 5qßsᠫÞ«3ÐÐÓY•pá9 }€hÙóÓñú…¬ÇÒ@Ð dâ¶È%Ò…Š²ªns–Ü~ž1xÉ:­¯XSF¡ª˜.)r^¹“óÊ™U”ƒññëÌåiGX5Oáà0STþO†ÃÓE•oi£%„ˆ]D³ÐbBà¬[¢-Ù<¨õ¤ãXº†ªyÔöŒÈ©ý£2úŒÐÐ12qKÅÐlKø@íø´Ì7|ª@ ¨·¾«̵ž Çîz,bÿpÑy§uÂzÇ X‚X„ï›­)™R@²5b­çÎ×ìÖëN½¥Cx†c‰ø@–l&.R ôbêèœÌ»>å“ÓèøáŠcv|‡¥kÄ Kï”rë½õŽÙCK8¡×hÞ_2:Ïmzk¸ŽXžFøj6¤ÌØ— ÿL—8#ê<Ž˜Q¬5ìº9v«ãÿÑ9f‡S ˜‡¦:®ÓèølÕAZí-`/Ÿß9£›§ ÆÎ&JÏÄ‚Ô/.:>´3íЉþB¦´e5:»Xgµ†±€…±€SsšŒ¤\„¡È&b!e 1# )e°€ã‡ 4ü儾XŽ(’é)ˆÖ‡ˆE4«ˆÎóæÄièëéŽõEþ·Øl‹$ÏD %\ˆ\$Š•§Éû¼œ†ËEàLÙSµ gðàê +\$)wºã3%Nó÷bßËË04N†:}^L°ò4ï?“Yy¹Œ¨Z„î·›F«E€P‹Ì†3¥¦µE¥á˜‚çU þL³átÔY.bÚÔ+ —g»> Î`2¶#WgHœÁ|‰Óœ#NsÌ˼—3¼Æ+XQg˜)¯Vƒ_•À>þÿgçêZ®<³ûIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon.icns0000644000175000017500000067774011273045225023304 0ustar julianjulianicnsàis32Çn oam`_ihgcÏVln`/BhfbÎVeeffiE‚tu¬XW¼ÌV€ï ðó7~¾¯”HI»ÌV€ëíïÍ×ÿÿæÞ½ÏW£¤¥¨«·€ÿdö¨ƒCg7%ÑÒÕjy'JÞàJ(YHbyÐÑÖnf<}•^?ZZ7avÑÑÕim¿N#"UTRav¶¶ÞÙF‡/USQy»¹¾íÀgh–¡m=<==ÄÃÅÛÜÞ´ZŠ©$WX tš»²G28ƒ Ž](ftƒ SŒaY`pŒ/ƒ†n oam`_ihgcÑVm na/BhfbÐV€i jlF„wx­ZX´ÏV€·¸ºB†¼®PP´ÏVµµ¶·¸¯µÛÙĬO·ÓXrstvw¯»»ŸvT4l7%°±³l07£¨;+G1cy¯°³njA|f>GJM cv³³´h h­E$"VTSbvVUš©DŽm"/USQy\ZV–]utJp=<==b`y jžœZ‘ª%WX \Bh^9 <„ K6 JLƒ :aC<?G] ƒ †o pam`_ihfcÓV€o pqa/BhfbÒV€q rrH†‚‚¯[Y®ÑV‚N T˜¥œ¯YW¯ÒV‚Q:dVWVi=´ÖX  #/n7%‰Š‹rŠABJ,>J&ey††‡pnGX:SDHdv€‰:p až>&"XUScv$#h‚2Ž`%/USQy*)H5pd8n=<==.-D,jU”«% WX =/3 ;B„ „ ƒ‰s8mkFÌÉ9Sÿÿÿÿ5¶ÿÿÿÿˆ°ÿÿÿÿ…Íÿÿÿÿ¸¦…¾ÿÿÿÿ¨xÿÿ[»ÿÿÿÿÉ¿à 3&Èÿÿÿÿÿÿšßÿÿÿÿÿÿÿ”Ÿÿÿÿÿÿÿÿÿÿ#ÍÿÿÿÿÿÿÿÿÿTˆÿÿÿÿÿÿÿÿÿ. Åÿÿÿÿÿÿÿ‹%Ôÿÿÿÿÿÿg !šì÷þÑÛöíæf ,<311 il32 6ÿ‡c dksrnpsqhde^ÜOTÿÿ‡celfWNPZhg‚e]ˆÜOTÿÿ‡c dT43Zgh€gd¦ÚOTÿÿ‡dX) #60enmmkußÔOTÿÿ…ghgA'·Ì%âïSPspphŸáÔOTÿÿ…mnl2‰È½”q½È±Fqnjy¸ÞÔOTÿÿ…jki1«l>­~FpÂCifd–ÂÜÔOTÿÿ…deaQØÎãÕÊãn%ebg¹½ÜØPWÿÿ…¹º³zÞÿï’œ×Ï̾¾ßÁHFÿÿ…ùúÿý†ÿ óÙϤ¨½š3(ÿÿƒº¹¹·ÆÛí‚ÿþè弸Q&^ªe+;#ÿÿ‚wx|zwg—ä‚ÿûÆv]@'>UE9X8)ÿÿ2umdZ'=¿ÿž!*U=UlX$H@etÿÿ 4{y~\'Z°µ¶£X 1XŠpQ?ežkÿÿ!5{zud'+ddgbiEg]c9'1_”lÿÿ3hDLPƒ×ª€b5O`LH'6_•lÿÿ€Y[RIr34R¹ç¤_U,(2#Y^W\K]•lÿÿ€ÙÝÜ™D 8Ä’LME'=\WUYBb˜lÿÿ€ÎÏÝé–5  j·g@I%4NTSST_lÿÿ€ÆÅÑßå´R"5̳IE-,NQPQOLWÿÿ€À¼ÆÙÚÀ™D9T"€Î¸–\D BQ€O#POÿÿ»»¼¶¾ÕÛ¾¨«y˜ªz†~kA=CBFD@@ÿÿ€´7®®ÌÙ×µÜÀ³²P:Uzœªk$=AG5ÿÿ¥¥±µ¢¸ÔÜÅÀÏ›~Ov‘£©ˆ!8WP€ÿÿQ“Á­º¸¿¬´¬L&Q^U6 2[F‚ÿÿ€ C ¨§§“V #-$ƒÿÿ‚2izv5"9'…ÿÿƒ^~`1% &-7\‹›Vƒÿÿ‚>Éżk}e! P†vu¸³Ð„‚ÿÿ‚5Q3j:5k?Q5H21‚ÿÿ›ÿÿ›ÿÿ‡c dksrnpsqhde^ÜOTÿÿ‡celfWNPZhg‚e]ˆÜOTÿÿ‡c dT43Zgh€gd¦ÚOTÿÿ‡dX) #60enmmkußÔOTÿÿ…ghgA'·Ì%âïSPspphŸáÔOTÿÿ…mnl2‰È½•s½È±Fqnjy¸ÞÔOTÿÿ…jki1«lA¬~IpÂCige–ÂÜÔOTÿÿ…ijdTÜÂÑÂÂép'gagº½ÜØPWÿÿ…£¥¨‰t¾ÑêâÌÙŠ–¨‡‰º¿ßÁHFÿÿ†¹ÊÝߺºÅÁ¶¹Ü×¦Šˆ ©½š3(ÿÿƒzyyx‚‰Ÿ­©¬«¦­–Ž0_ªe+;#ÿÿ‚cdgfd\l‘º¬£¤²°w\a-&RG8X8)ÿÿ%"8yqi_1'…×ÌÏÑg6R#@SC&H@etÿÿ#7{y~\'Szx|qW,G{\9&ežkÿÿ$ 7{zud&-H+6`oAWGQ+_”lÿÿ6hDLR€¹“nHV3OU;@_•lÿÿSHLr35Q¢Ê†NL)(0#[^V[K]•lÿÿ¾t²„I 7ÂBFD'=\WVYBb˜lÿÿ¶¶·°–¹Š4  o¬L?J%4NTSST_lÿÿ¢¢§‰k¤²—F 5Ö“LI-,NQPQOLWÿÿ†gT”‡8=R!†©"?_E BQ€O^POÿÿ””™r@†•z€d™ª—::[kA=CBFD@@ÿÿ¤¤¨‰4k–Š…¢´¬IAc„œ©k$=AG5ÿÿ™™¦§FA€–sbROv£©ˆ!8WP€ÿÿKŠ›7Xza|L.Q^U6 2[F‚ÿÿ€ DW9Dd[:3 &0#ƒÿÿ‚ %08$0…ÿÿƒDXE%"&+@[e8ƒÿÿ‚*‡|]ESC4XLMzvŠZ‚ÿÿ‚#7!F'#G)6#0!!‚ÿÿ›ÿÿ›ÿÿ‡c dksrnpsqhde^ÜOTÿÿ‡celfWNPZhg‚e]ˆÜOTÿÿ‡c dT43Zgh€gd¦ÚOTÿÿ‡dX) #60enmmkußÔOTÿÿ…ghgA'·Ì%âïSPspphŸáÔOTÿÿ…mnl2‰È½˜t¼É±Fqnjy¸ÞÔOTÿÿ…jki1«mH®ƒOpÁBihe–ÂÜÔOTÿÿ…sul$]襆|µìz2i`f¹¼ÜØPWÿÿ„{z}lWs[‘|]ŸcrP µÁßÁHFÿÿ†@Y~e(.H>&+hfœ«½š3(ÿÿƒ   aªe+;#ÿÿ‚?@CBAL 2+.h'QH8X8)ÿÿ/+@€yrh> 1hPWb ET5F7&H@etÿÿ&"9{y~['L=<>=Y)>tP,ežkÿÿ'#9{zud&.‘>bt>P_•lÿÿ€BC>Ls35P«nGG').#\^VZK]•lÿÿ€€uƒŠ}N 5Âs:AC'=\WVYBb˜lÿÿ||}yv¤{3  r¤9 w>–'PkA=CBFD@@ÿÿggjS :‘=Dd†ž©k$=AG5ÿÿaajj I79Ow¢©ˆ!8WP€ÿÿ0W^ V!%L& 1Q^U6 2[F‚ÿÿ€,3=9  +3#ƒÿÿ‚ !&!…ÿÿ„  „ÿÿ‚ € ƒÿÿ‚€ƒÿÿ›ÿÿ›ÿl8mkÃÄ{ KÂñÿÿï´/YùÿÿÿÿÿÿÞ%Úÿÿÿÿÿÿÿÿ¡YÿÿÿÿÿÿÿÿÿÞkÿÿÿÿÿÿÿÿÿä&iÿÿÿÿÿÿÿÿÿæ(eÿÿÿÿÿÿÿÿÿê(lÿÿÿÿÿÿÿÿÿõF$yÐÿÿÿÿÿÿÿÿÿÿ±Åÿþg§ÿÿÿÿÿÿÿÿÿþ~?ÿÿÿç^ÿÿÿÿÿÿÿÿÿþHgÝÿÿÿÿciÿÿÿÿÿÿÿÿÿÿd9Áÿÿâóú²W–ÿÿÿÿÿÿÿÿÿÿáøÿîƒ%EdhÁõÿÿÿÿÿÿÿÿÿÿÿñž* ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ,Dîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–'äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒIûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿq Åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý5Iùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨iöÿÿÿÿÿÿÿÿÿÿÿÿÿýÇ< àþÿÿÿÿÿÿÿÿÿÿÕ% +„ãÿÿÿÿÿýþÿÿÿÿñÈq   (tðÿÿÿÿÿÿíÌÚÿÿÿÿÿÿÿ®1  .¶ÃÙÛâùí®±ÔìÖÄɰ›~6  /?IYkkcb`^_PA6(   it32s+ÿÿ´ÿþýýþ„ÿ€ýþëÿþýÿýýçÿ ýþÿÿüå療‚„…ž²Öóÿÿþýãÿ þýÿýß°„kb_`a` bcabfv¤Õþÿýþàÿ ýÿÿÒŠg`bca][XW Y[^aeeadˆÕÿýþÞÿýÿï—`bd`YTPMKIIHHIJLOQUY`faa¢÷ÿýÜÿ!ýÿÊn^e]UOJFB@=<;;<<>?ADGKPU^dYéÿþÚÿ#þÿ¸^`_TNHB=95310//001347:>CHNU`[iàÿýØÿ%üÿ¬QaYOIB<61-*'&%$$%&&(*,/38=CJQ\YpóÿþÖÿýÿÀY_ULE>71,'#!€!#&*/4:@HO[V†ÿþÕÿþÿã]ZULC<5/)#€#',29@HP\T´ÿýÖÿ'‚TXLD<4.'"!&+29AIS[eëÿþÒÿýÿ¸Q[NF=5.'!  #'+3:BKYW–ÿýÑÿþÿønWSI@8/(" ‚  (-5=FQ^dæÿþÐÿ ýÿÈTYMD;2*# ‚/t‹x=(08BM]\®ÿýÐÿýÿ‹SUI@7.& +e|o?qÙäããØ}+5>JX`€ýÐÿþÿõnXQF<4+$vÖáÚÕП#€xèÕÒÓÓ×éˆ3Ø• ÿúÿîC9JWZ¥ÿýÎÿ.ýÿÉ\ZK?6%;õýÿj'x¥@ÕýÿŒ%ðÿjN§€*ÙÿüùM5HVX£ÿýÎÿ.ýÿÉ[YJ>5"BüþýA&04,§þÿ˜(õ÷C3?<4®ÿøúN3GTV¢ÿýÎÿ.ýÿÉZXH=4!>÷ûÿW 8:;:$´óøŽ!æøV)AEFD-¿ÿ÷ðG2DRT¢ÿýÎÿ.ýÿÉZWH<3$0çøÿ®(FPR>ZÞÝélÍö /NXZF^ñööß83BOUŒÿþÎÿ,ýÿÉYVG;1(Åúïú VY\vÈÖÉØcšââU[\nÕúìö¾%5?MU|Ðÿ,ýÿÈXVF:/)‹øæê÷ÞÅËÚÍÓëøúûÕÇÑÐãʵÂëöìçó‰5=JR~ÀÿþüÿÈXUE9.'>ãàßÛßàÐÈç„ÿ÷×ÊÝèìêèèãâG2;IQ}þƒûý‘þýýüü€ûý¬ÿ,ýÿÈWUE:.% —åÑÔÌ¿Ï÷ÿûþÿþþýüýÿãÈÐÚáåàì¦)1;IP{¾ÿ&þÿêÜèåâèéåãäâäåãéæöÿÈYXK@6,'/Ä×ÃÀÝÿ÷×î‚ÿýÜæÿïÑÐÚÞæáC08AMR„”Ub``bXžÖÌ„ÎÍ×âÚÚÝÞ××Ýü¤ƒ\cVÄÿý˜ÿ%þÿÛÄØÓÏØÛÓÐÑÎÑÓÐÛÓðÿÊ_\OE:0)(:´ÔîÿæÁæ„ÿùÎÍýûåÛÝÛ_)3BLQK€Ô`·¨„«©ºÍÀÁÄ÷·ëʃ[W1Ÿÿû˜ÿ$þÿÞÉÛ×ÓÛÝ×ÔÕÒÕ×ÔÝÚøÿÌh‡™›•†„‡”Õÿþÿðô†ÿþíûÿÿûùÛ ©¯¼ÊÒϲŠÿug½®„±¯ÀÑÅÁÈèÙ·¼¨§ww0¸ÿü˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÚãÿÿäÖþ‡ÿþ€ÿþ…ÿþ€ÿþˆÿ öþÂdº«„°®¿ÍÁ±ÓÿµŽ‘vt}€$8Ýÿý˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÔÚíÿøûÿÿ€ýüýýüüþ€ÿþˆÿþ‚ÿþ…ü þÿÑhÇ´€¯°€±¯½áΩÞð{¦q__iƒ5"’`Éÿý˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÔÚðøóþüþþŸÿýûúýýü÷EM‘±³±«©«ÑÿÀµÅtŠihÅÆutCFàÿþ˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÔÚëìóüúùûýþÿ üùøûü÷ÿ†)NqŒ–’““•¢©Ü˜†{kWpàÜr]c*µÿü˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÛÞâí÷èÚãóûþ›ÿ+ýùñêðùõ÷€G’‡‰‹œƒ››€Àîy]{JLOPŸÿû˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÜÛÉßòß½²Æêúþ™ÿ ýøäÌÐçöñçP‚€ ~‹ƒŽ­¡”€pÍú¦Z<8>=;9/Çÿý˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÜÛÝÃêëØ¸Ÿ³ìüþ—ÿ þûܰ¾ßñò|€Š©ùÀf›[797310/§ÿü˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖøÐÇíïæÃ•³÷ý–ÿ þý䟵äóòê´!‡Gw€«éȆwH461.+)vÿý˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖóÿÂÍïôñÏ™Ìÿý•ÿ ýõ¦ªêöòå´1ˆXj‰‡—ˆkD43.,*$G7Jÿþ˜ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖñÿÄ|Òîô÷Úªæÿþ“ÿ ýýÁžå÷ñÞ–g)†Xyvp`:/0+'!XðÃ#ïÿþ—ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖñÿÇQrÂíóúÔµ÷ý’ÿ þÿÞšØ÷ðÌvJeD… ETncigU1,)"!%.ZCWÅ¥®ÿü—ÿþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖñÿÇWNS¥æóöÀÈÿý‘ÿ ýõ¨Åöë©N;OeBƒ#MxnN]YF#! (7D7­ÿn2!>ÿÿþ–ÿ þÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖñÿÆTUA7tÍòë±Þÿýÿýþ¾¬òÙw,2DLb@  #FgbUyQG1'3?=358™Ýq  Žÿý–ÿ!þÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÝÖñÿÅRQE9$>˜çÙ¬ðþþÿ ýÿ×™Þ¹A,8@K^N"MaY_\fd(*3*!—™Öÿý‰ÿ4ýÿºt6'0;FRa@{Q^\NqpNTTQq?.( ‚u„Ž}°þ˜ÿ$þÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÚã…º‚LH<1(  $UŠ—éÿû‡ý5ûÿÈ…tIQ%.8CN`&?]wVƒcQSTS€VSWQWQ |²¦vWlnÈÿü˜ÿ%þÿÞÈÚÖÒÚÝÖÓÔÑÔÖÓÙëG}wKE9/&<`Y‚˜éÿþ…ÿ6þÿÑuS\a% #+6BMMS‡Yh©rbwNSQLiwMK?, :co™’UhfÆÿý˜ÿPþÿÞÈÚÖÒÚÝÖÓÔÑÔÖÒØèMUeKA6,$ Pmaa„–œœ•Š“˜›£~uYchn7 *.6?RWzg’¨–P{]LPTP€Q- ,5Rœ¡WhgÈÿý˜ÿdþÿÞÈÚÖÒÚÝÖÒÒÐÑÔÖÜëW>]H>3*" huqgcƒ€k_[ZXWXXYbzzZeorwLJVYXQa}v¥¦rT}KTMw}O|KLKEgpE:0LH… -:U WigÈÿý˜ÿKýÿ¨²ðäâçèìÙqxqjfcbbdjo_. ‰£¢ ‘}xrj`YTSWbcahloqpWDWfm_Aˆ™NmgCJMK|D8?&† -:U WigÈÿý˜ÿLûÿNŽÿûÿþÿÌ|vvle_ZWVWZ^bln7 J¬ª±¨œ—…}wspono~pgkphF!1\QYgFQ¡{CKMG)Lm. O… -:U WigÈÿý˜ÿLûÿSÿùþÿ®wztiaYSNLKMPTY^eq5˜³»¸²¶¯¤–Š…}}~„mdPW4']PPX_9}¦Yer..M?Céÿ^… -:U WigÈÿý˜ÿLûÿNŽÿýòŸx|rh^TLFB@@BEJOUZcdo¶¼Æ½Çº³¬§¡›•Œ‹Šˆ™K6KH[OEIZS>a[5hbaQ%@/-1?R%-7BNZi&‰ -:U WigÈÿý˜ÿGýÿÎ7…ƒwnaUH<1)# !%).39>CIKN±ÖÉÐÒÑÎÉÄ“nX>nRsd2LVI&2+&)2L.")2=HTfXŠ -:U WigÈÿý˜ÿþÿ?&yqfYL?4*"€6"&+059>DDP´ÐÍÎÒÑ»‚>t@agmqL+J) '"*>E%.8BN[h'ˆ -:U WigÈÿý—ÿIýÿÍc„vl_RE8-$#',059?;T¾ËÒÝܶž™S^f4ncxf-++1E>6!".G'"*3>IUcN‰ -:U WigÈÿý—ÿüÿ¨¤°ttgZM@4) 6 $(,0390cÕ×ÏÁ´•—}6uARjTjISpR9-$9=&/9DO[_%‡ -:U WigÈÿý–ÿKþÿòáÕ²‹mdXJ=3(   $'*-1(„Ŷ»Á—†‹PMn.tH6H0sZ>) *A&#+4?JW]Jˆ -:U WigÈÿý—ÿLôØÌÑÙ´ƒcUK>3)! "$(',£¾·»±…r4rMGj1QmP5# !2<(/;ERYX!† -:U WigÈÿý–ÿûàÍÒãâÓ±…^IA7,$ € 3 #m»ºµÂ‘x€QHrNJ8=iN2!  %75",6ALVUAˆ -:U WigÈÿý–ÿåÐÑÜßãáÓµfE82*" € 4 <¯³º¸¶v~hPSFE?4YX5"  '9:"'2JMNTOY_>€§¶Æ×Ê„›°®¬£ ©šˆfZVPKEC2! €'A/ƒ -:U WigÈÿý‘ÿUþÿè½²ºÂÆÎÓÖÖÚÙØÓÒÓÉ”«¤žƒvlYIMPSYb_l‚L$2x›¢±ÁÂ}²µ±ª¨œ“‘s`^WPJFB-  %?.ƒ -:U WigÈÿý‘ÿUþÿí¿°¶ÀÆÊÏÕÕØÚØÕÒÑÐ´Ž¢¨©¡“‰qYRV\_[av„Œƒ”–¢®¸…ƒ ³µ±§£œ¢®…jlf`XRKFA)  &?/ƒ -:U WigÈÿý‘ÿUþÿô¿±²¼ÅÉÌÐÕÕÙØÖÓÐÏÇœ’®«¯¤š’ŠtW`_`tˆ“•“”“•œ£¯‚¢¥¯ºº¸¶¸¡xnwuqjbZRJD=%  (A&ƒ -:U WigÈÿý“ÿH÷Á°°·ÂÉËÎÔÔØÚ×ÔÑÎÎ·Ž£±³²©§§˜qex ¦¦¤¢ŸŸ¡£­‹|¡®®¬®ª›‹veoz~|vof]SI@6" €  .Eƒ -:U WigÈÿý”ÿRͬ¯²½ÆÌÌÑÔÕÚÙÖÔÐÎÊ¢‘²³ÀÂÀ½´™x¡°³³²¯¬©¨§­™fg[QICADHQ_oy€…‡†ƒ~vlaTE8+&6Bƒ -:U WigÈÿý’ÿTþÿପ°·ÂËÍÎÓÓØÛØÖÓÎϽ’¢ÀÌÔÏËǸŸ¿¹¹·´±®«®£P137;?DIPYclv‡ŒŽ‹…}teSA+ $0>3ƒ -:U WigÈÿý’ÿRþÿî´¤­±»ÇÏÌÒÒÕÛÙ×ÕÐÍ̪”¸¿ÛØÔÐȨ»º¸¶³°­¬©e,;ADFIMRYajs}…Œ‘•––•’Œ…xdT$!&0MU]fnu|‚‡‹Ž’”–——–“‹Šw7 "(/6>EU2… -:U WigÈÿý•ÿ þÿò­™ ¨«¶ÄÈ€Ê?ÏÑÑÐÒ¼“µ·žºÅÃÆÄ·¨™–†’B>IR\fnv|…‰‹ŽŽŒ‹‹‡vJ  &,3:AJK ‡ -:U WigÈÿý–ÿNþÿÕœš¤§«»ÅÇȽµºÉÎÍÅŸŠ‹žÀ¿º¹¸¼ªš——m(>GQZckqw{~‚„†‡ˆ‡‚v\3 #)/6   € #).39=G!‡ -:U WigÈÿý˜ÿþÿÈ£š€Ÿ´©‰Ÿž•±¿»·¸»«¨¦†‘«’†žS‚ "&+059A2‡ -:U WigÈÿý˜ÿ!þÿÆž§—œ—¢¬–„„œ®±ª •¨«œŒqlr}a€ƒ !%)-15<8Š -:U WigÈÿýƒÿÞ‘' )vª©­œ“”£§žœ¤©•¶±£ž”‘„pt›]€€€€ !$'+/277 ‰ -9U WeuA"('*®ÿÿØ‘ 'E¨¡‡‘¤§£Ÿ “~™¨ŽŽ”„‡‡ˆŽM‚  €   #&),/55 Š .:Tœ Wex)ŸÿÿÙ“ !•¤‡ŽŸ™–{tx€z’…. € €  € "%(+-4*‹'8Z ŸWex* ÿÿØ“€Yš—˜—‘‹z‚Œ’—‚Q € €  €€ #%'*/3 ‰¥Vex)ŸÿÿØ—Z‹ª¥˜’І ›~Q ‚  €€!#%'')! “!šYdx)ŸÿÿØ™#8JR_ipuy}ƒ~QXjz‡“§°¾®—¢±¿ËÑíΓŸÿÿØ“#jöØÍ͍œ’•¿¹­¤š„ueT`‰‚~zupg]OK ƒ#LU`ksy}‚ˆŒT]kv‚Ž˜¢®¸Æ€|š¤°¾ÎØÿ—“ŸÿÿØ•Ñ÷Û˺¬žŠZ—Ȳ¨“‰~umNY“…|wqi\Y6‡" \`fnty~†–"(^w„Œ“ž­ºßƒEj…œ­´®C“ŸÿÿØ“ 6‰ˆv]@°×º«œˆ{c?:ž{upjcdHˆ%^hjot{k>Thu…’’3—ŸÿÿØœ(ih]RE1 fƒxsnjdCˆ :QSWP7‡•ŸÿÿØ•‡ ";?=7Š„€€—ŸÿÿØž€ƒ€«ŸÿÿثßÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷Ÿÿÿÿ´ÿþýýþ„ÿ€ýþëÿþýÿýýçÿ ýþÿÿüå療‚„…ž²Öóÿÿþýãÿ þýÿýß°„kb_`a` bcabfv¤Õþÿýþàÿ ýÿÿÒŠg`bca][XW Y[^aeeadˆÕÿýþÞÿýÿï—`bd`YTPMKIIHHIJLOQUY`faa¢÷ÿýÜÿ!ýÿÊn^e]UOJFB@=<;;<<>?ADGKPU^dYéÿþÚÿ#þÿ¸^`_TNHB=95310//001347:>CHNU`[iàÿýØÿ%üÿ¬QaYOIB<61-*'&%$$%&&(*,/38=CJQ\YpóÿþÖÿýÿÀY_ULE>71,'#!€!#&*/4:@HO[V†ÿþÕÿþÿã]ZULC<5/)#€#',29@HP\T´ÿýÖÿ'‚TXLD<4.'"!&+29AIS[eëÿþÒÿýÿ¸Q[NF=5.'!  #'+3:BKYW–ÿýÑÿþÿønWSI@8/(" ‚  (-5=FQ^dæÿþÐÿ ýÿÈTYMD;2*# ‚/t‹x=(08BM]\®ÿýÐÿýÿ‹SUI@7.& +e|o?qÙäããØ}+5>JX`€ýÐÿþÿõnXQF<4+$vÖáÚÕП#€xèÕÒÓÓ×éˆ3Ø• ÿúÿîC9JWZ¥ÿýÎÿ.ýÿÉ\ZK?6%;õýÿj'x¥@ÕýÿŒ%ðÿjN§€*ÙÿüùM5HVX£ÿýÎÿ.ýÿÉ[YJ>5"BüþýA&04,§þÿ˜(õ÷C3?<4®ÿøúN3GTV¢ÿýÎÿ.ýÿÉZXH=4!>÷ûÿW 8:;:$´òøŽ!æøV)AEFD-¿ÿ÷ðG2DRT¢ÿýÎÿ.ýÿÉZWH<3$0çøÿ®(FPR>ZÞÜêmÌö /NXZF^ñööß83BOUŒÿþÎÿ,ýÿÉYVG;1(Åúïú VY\vÈØËÔ\ãáU[\nÕúìö¾%5?MU|Ðÿ,ûÿÇXVF:/)‹øæê÷ÞÅÊÛÐÆÌÏÏЭ®ÎÓãʵÂëöìçó‰5=JR~Àÿþ-úÿÆXUE9.'>ãàßÛßßÓÄÈÕÚÝÞÝàÙËÆÍÝçìêèèãâG2;IQ}þƒûý‘þýýüü€ûý¬ÿ,ûÿÆXUE:.% —åÑÓÌÿÌÚÛâäåäàÚÖÏÃÈÒÙáäàì¦)1;IP{¾ÿHþÿäÒßÝÚßàÛÙÚ×ÚÚÙßÛïÿÈYXK@5,&.ÄׯÀ½É˹Ôéèééçá½¼ÉÂÈÔÛÞåàB07AMQ„”Ub``bXžÖÌ„ÎÍ×âÚÚÝÞ××Ýü¤ƒ\cVÄÿý˜ÿ'þÿѲÈÄ¿ÈËÁ¾¿¼ÀÁ¾É¿æÿÊ_^RG<2+*=µÅ½ÆµŸÆåæ€çæäש¢ÄÆÌÕÞÝb+6CMSOƒÓ`·¨„«©ºÍÀÁÄ÷·ëʃ[W1Ÿÿû˜ÿHþÿÕ¸ÍÉÄÌÏÆÃÄÁÅÅÃÌÉôÿÍiމzxz€°ÊÂûÈÛÝáââááÝØÐºÄËÍÎÖ¾‰’˜¥²·°–~ÿug½®„±¯ÀÑÅÁÈèÙ·¼¨§ww0¸ÿü˜ÿ'þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÃÈ×ÿÿ×¶ÜåéêèæåããÔÅÁÀÅËÏÖÙ€ÚØÕÏÈÇÅÈÍÏÏÕááäçéæßÕ¹ÒÁdº«„°®¿ÍÁ±ÓÿµŽ‘vt}€$8Ýÿý˜ÿHþÿÔ·ÌÈÃËÎÅÂÃÀÄÄÃÈæÿßÊÝáääâßÜÙÕÐɾ½¿ÃÉÎÑÒÓÒÐÍÈ¿¿ÂÅÈËÏÐÓØßãáÚβ¤hÇ´€¯°€±¯½áΩÞð{¦q__iƒ5"’`Éÿý˜ÿ.þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÃÇíè³Ì×ßãâßÛ×ÓÎɽº¹»¾ÂÆÉÊËÊÈÅÁ½€º¼¾ÂÆËÎÕÜÞÚÓʽ³¥-M‘±³±«©«ÑÿÀµÅtŠihÅÆutCFàÿþ˜ÿCþÿÔ·ÌÈÃËÎÅÂÃÀÄÄÃÆçÅ­ÆÍÓרÕÐÌǾº·µµ·º¼¿ÁÂÃÂÀ¾º¸µ´´µ¶¸¼¿ÃÉÏÑÍÆ¿·«¬Y)NqŒ–’““•¢©Ü˜†{kWpàÜr]c*µÿü˜ÿ&þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÈÔ¹¥¹±§±¿Ä¿»·µ³±±³³µ·¹»9¹¸¶´²°¯¯°±²´¸¼À¾¶««­¦¤TG’‡‰‹œƒ››€Àîy]{JLOPŸÿû˜ÿþÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÊÍŸ–­ž€v‰©´µ³±¯€®¯°±³´µ´³±°®­¬¬«¬­®°±¯Ÿ‡‰›¥ —4‚€ ~‹ƒŽ­¡”€pÍú¦Z<8>=;9/Çÿý˜ÿþÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂËËʃŸ¡‘t\n¡­®­­¬­®¯°±±€°¯®­¬«ª«‘hsŸŸœg‡|€Š©ùÀf›[797310/§ÿü˜ÿþÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÃó³}  —xOk¨«¬««ª«¬¬­¬««ª©¨¨©©ª««¬—Wi‘ŸŸ—t‡Gw€«éȆwH461.+)vÿý˜ÿ%þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÄêÿšž €Q‚¯¬¬«ª©©¨©©‚ª©©¨¨§€¨ª«¬¬§^^•Ÿ‘~*ˆXj‰‡—ˆkD43.,*$G7Jÿþ˜ÿ&þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÄèÿÅ_‡šŸ ‡_±®®¬ª©¨¨§§€¨ƒ§¨¨ª«­­±xSŸ›jf+ŠXyvp`:/0+'!XðÃ#ïÿþ—ÿ$þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÄèÿÅV^~—¡€l²³±®¬ª©¨§¦¦§¨©ª¬¯°µ—P„ž™ƒYMfC…9VncigU1,)"!%.ZCWÅ¥®ÿü—ÿ%þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÄèÿÅWRKn’œn„¼´³°­«©¨€§¦¦§§¨©©«®°³´±_s•nB@NdB‡ (`nN]YF#! (7D7­ÿn2!>ÿÿþ–ÿ'þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÄèÿÃTSD8Rƒ›”bž¾¶µ±¯­«ª©€¨©©ª«®°³µµ»y]™‹R,5CLb@„ #II6mRG1'3?=358™Ýq  Žÿý–ÿ'þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÌÄèÿÄSQD8)2d“ƒc³½º¹µ²°®­¬®¯±³¶¸¸½•Nˆw0,7@K^N‚!2€G@EALc(*3*!bIÔÍÍË„ÊËÌ€Ï2yBS;'0;FRa ro6GD2da1:92aB.( ‚u„Ž}°þ˜ÿ$þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÉÑ}º‚KH<1(  %VUK³ÐʇË5ÉÑŒ9QNP%.8CNa' Ae?|O9:;:x<7=52I |²¦vWlnÈÿü˜ÿ%þÿÔ·ÌÈÃËÎÅÂÃÀÄÄÂÈØ@~vKE9/&;aYIN±ÍπЀÏ8ÐÐÎÏ•3JV[`% #+6BOGAzAU¢_Qk3;80Yj0+  :co™’UhfÆÿý˜ÿPþÿÔ·ÌÈÃËÎÅÂÃÀÄÄÁÇÖFVdKA6,$ Plc^B9W^_XSMSV\^e^2D[dgn7 *03/:?qW†¡‹7tI26;6v1  ,5Rœ¡WhgÈÿý˜ÿdþÿÔ·ÌÈÃËÎÆÀÁ¾ÀÂÄËØO?]H>3*" huqi^G.!*G[forwL!EBBC;Ovfž`@t1=2-* -:VŸWigÈÿý˜ÿMþÿÔ·ÌÈÃËÎÅÈÌÈÕÍ·¾Á¶\PF;0'"}~|uj^TNIEDDFGHHIPYdnwyy\ ![}7ED0c_…¥›?pS „ -:U WigÈÿý˜ÿNþÿÒ¶ÍÉÄÌÐÂçÿÿוzxw}eT?3-&=Žˆ‡€whTEGQW[]YTOOXbluyxr` 8M9r]388:qW‰N%cƒ -:U WigÈÿý˜ÿJþÿݹÇÄ¿ÈÌ»éùªuttpmimmaE(`›•”ŠmK;4/2765GPQZaipvup`VB[X,lp=u575-Yd,2C‡ -:U WigÈÿý˜ÿHýÿ¢§çÛÚÞßáÖqxqjfcbbdjo_. ‰¢£oOW[XQG@81-Nd`hloqqVCWfn^4€’9cZ,576t)5'‰ -:U WigÈÿý˜ÿLûÿNŽÿûÿþÿÍ}vvle_ZWVWZ^bln7 J««®hƒ„ymcZSLH<.`qfkqhA.\QXh>Dœo.y690 7g, O… -:U WigÈÿý˜ÿLûÿSÿùþÿ®wztiaYSNLKMPTY^eq5˜³º‘{¥žˆuldZNE:6wpdKR+#]PPX_+s GZh><Céÿ^… -:U WigÈÿý˜ÿLûÿNŽÿýòŸx|rh^TLFB@@BEJOUZcdoµ¾¬ƒ±±§Ÿ˜‡{ocXPH6FuE%CE[OEH[M,SK]-Jl?CÖÿùÿ^… -:U WigÈÿý˜ÿLýÿ½Òÿó“w~rh\RIA:6567;@EKQW]_“Å‹­¼µ³­¡™„ypcYPD"3j7IF OK<=F^< 1FOYkÜÿþûÿ`… -:U WigÈÿýšÿJþÿÒˆrh]QF=50,++.16;AGMRUZ¦À¹¼²©£ ›“„xr`-Ha%Qaj7-7G549PR*3;HWY†Ú×ÕçQ… -:U WigÈÿý™ÿGýÿÐeƒuk_RF<2+&$"#%(-27=CGNRQ™¿¹³¬°°¬§›“ƒHVQ-hF1]ZL"@/-1?R%-7BNZi&‰ -:U WigÈÿý˜ÿGýÿÎ7…ƒwnaUH<1)# !%).39>CILO›¶¦±¶´°«£r^Q4jGm^#CRD# 2+&)2L.")2=HTfXŠ -:U WigÈÿý˜ÿþÿ?&yqfYL?4*"€6"&+059>DEO”¬¬±Äãžp5p2[adnBF$ '"*=D%.8BN[h'ˆ -:U WigÈÿý—ÿIýÿÎ`„vl_RE8-$#',059>=OŸ·ÎßÜ£‡DX`&jZqa %)/D=5!".G'"*3>IUcN‰ -:U WigÈÿý—ÿüÿ¦—ˆhvgZM@4) 6 $(,0381aÖÙί‚„k*q4IeIeB RqR9-$9=&/9DO[_%‡ -:U WigÈÿý–ÿKþÿñÌ—yymdWJ=3(   $'*-1(„Ŷ»Â‹oq=Fi p>+D*tZ>) *A&#+4?JW]Jˆ -:U WigÈÿý•ÿNþÿòÂ…Ž¸žwbUJ>3)! "$'',£¾·¼¬jhW&nANPSZb^lL%2wš ®¿¾9$6,%[t`^WPJFB-  %?.ƒ -:U WigÈÿý‘ÿUþÿíz(;JXeu…Е𖄅…sy¥£„sjaXENV\_Z_s‰€Š’”Ÿ«¹M,-( #u‚jlf`XRKFA)  &?/ƒ -:U WigÈÿý‘ÿUþÿö‡*7DVblz‡‹™—‡‚j¯šŽƒwqjQCb]_q†‘‘“˜Ÿ±T' $%+:cˆ|ovuqjbZRJD=%  (A&ƒ -:U WigÈÿý‘ÿJþÿø—.2?Rbktƒˆ”›”ƒ€ts¥­–’…{tgKWvŠœ¢£ ž›œŸ­k.Vdhp~†„‚yhmz~|vof]SI@6" €  .Eƒ -:U WigÈÿý’ÿTþÿ´7-9J\kp}†›™‘‹‚€k‰µ£™‘‡ƒ|cTœ¬¯¯­ª§¥¤¢ªŽL\ZTMHGILS_ny€…‡†ƒ~vlaTE8+&6Bƒ -:U WigÈÿý’ÿTþÿØM&7AThov„†–œ•‘ˆxq¥¼ ¡—‡zX¼³´²¯­ª¦«›F357:>CHOXclv‡ŒŽ‹…}teSA+ $0>3ƒ -:U WigÈÿý’ÿRþÿír!5:J`rqƒŒ™“ƒ}n‡¿©£ –‹ƒfg¸µ³±¯¬¨©£X-;@CFIMRYajs}…Œ‘•––•’Œ…xdT$!&09BEILPU[bjs{ƒŠ‘–™œœš–‚sZ $*02&"7… -:U WigÈÿý“ÿPþÿÂJ$5;J^tr~‚‹œ—•’…z}rf‚–šœ˜‡yYg®¦¥£ §XV>BGKPTZ_elsz‚‰•šŸ Ÿžš‘‚{/ 69† -:U WigÈÿý“ÿFþÿíy$16ARhtv€“™““Œ~x~‹’•–Ž{eIŒ¥š§]7`EU2… -:U WigÈÿý•ÿMþÿò%.6;I^hnonˆ‰€€„rržŸ„lfcijPC91._D=IR\fnv|…‰‹ŽŽŒ‹‹‡vJ  &,3:AJK ‡ -:U WigÈÿý–ÿNýÿÌP!36=P`gj‰œ¡“y{v]_`[g]`Žœ‰F53&7^*>GQZckqw{~‚„†‡ˆ‡‚v\3 #)/6;;BDAu˜Šb.0/'RR€€€€ !$'+/277 ‰ -9U WeuA"('*®ÿÿØ‘"A<)6::8;2J€q;.('$VE  €   #&),/55 Š .:Tœ Wex)ŸÿÿÙ“  €Z.220-&6@2)(?c- € €  € "%(+-4*‹'8Z ŸWex* ÿÿØ“€ RpD( #%!€)EUG € €  €€ #%'*.2 ‰¥Vex)ŸÿÿØ—OifI3*&(4LaaJ ‚  €€!#%'(*$ “!šYdx)ŸÿÿØ™ :]caXYc\A ‚ € "#%&',:.€“Rcbx)ŸÿÿØš-=:1--%‚€ !"#$&,5?FPUG(“€ŸÿÿØš$HYWNGA;51,$€€€€ !"%(-4CIOUY]chrp4€ŸÿÿØ—d‚znhc]ZUOIC=83/-02.+'# € €!#""## "$%(,0489116@ADA16=ENU\bhmdhpw|“Q•ŸÿÿØ•!+…—†€zslciogb[TLD<36HEBA>;60*'„!+,4;ADGIKP<1=FPY`flsr`fow„‹x”ŸÿÿØ”$H›“‡‚{sj`gxqle_WND:0IQMKHEA:3,) #%16>EJMPRVS5:FPYahnt}s^dku~†Šœˆ“ŸÿÿØ“#F¢Ž‡xng`b~zrlf_WMC7@[VSPMJD=41…! 28?FKPRVZ\8>GMU]dkry‚URelt}ˆŽ¬d“ŸÿÿØ•‹£‘†{qh[;d„uogaZSLH4;aXURNJE<:$‡"=?CILPSXc>NW\ahrz“V.FXgrvs,“ŸÿÿØ“ #UZZN>*t{qg_ZRA)'hTQMJFAB/ˆ>DFILQ]G)8DMXa`! —ŸÿÿØœEE>6. DVOKIFB,Š  &5795$‡‚•ŸÿÿØ•ƒ‡ &)($ˆ€˜ŸÿÿØž€™€«ŸÿÿØ«ƒÃŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷Ÿÿÿÿ´ÿþýýþ„ÿ€ýþëÿþýÿýýçÿ ýþÿÿüå療‚„…ž²Öóÿÿþýãÿ þýÿýß°„kb_`a` bcabfv¤Õþÿýþàÿ ýÿÿÒŠg`bca][XW Y[^aeeadˆÕÿýþÞÿýÿï—`bd`YTPMKIIHHIJLOQUY`faa¢÷ÿýÜÿ!ýÿÊn^e]UOJFB@=<;;<<>?ADGKPU^dYéÿþÚÿ#þÿ¸^`_TNHB=95310//001347:>CHNU`[iàÿýØÿ%üÿ¬QaYOIB<61-*'&%$$%&&(*,/38=CJQ\YpóÿþÖÿýÿÀY_ULE>71,'#!€!#&*/4:@HO[V†ÿþÕÿþÿã]ZULC<5/)#€#',29@HP\T´ÿýÖÿ'‚TXLD<4.'"!&+29AIS[eëÿþÒÿýÿ¸Q[NF=5.'!  #'+3:BKYW–ÿýÑÿþÿønWSI@8/(" ‚  (-5=FQ^dæÿþÐÿ ýÿÈTYMD;2*# ‚/t‹x=(08BM]\®ÿýÐÿýÿ‹SUI@7.& +e|o?qÙäããØ}+5>JX`€ýÐÿþÿõnXQF<4+$vÖáÚÕП#€xèÕÒÓÓ×éˆ3Ø• ÿúÿîC9JWZ¥ÿýÎÿ.ýÿÉ\ZK?6%;õýÿj'x¥@ÕýÿŒ%ðÿjN§€*ÙÿüùM5HVX£ÿýÎÿ.ýÿÉ[YJ>5"BüþýA&04,§þÿ˜(õ÷C3?<4®ÿøúN3GTV¢ÿýÎÿ.üÿÈZXH=4!>÷ûÿW 8:;:$´ò÷ æøV)AEFD-¿ÿ÷ðG2DRT¢ÿýÎÿ.ýÿÉZWH<3$0çøÿ®(FPR>ZÜÜípËõ /NXZF^ñööß83BOUŒÿþÎÿ,öüÂYVG;1(Åúïú VY\uÇÞÏÌL ¥åßU[\nÕúìö¾%5?MU|Îÿ.þÿÑ·œ]UF:/)‹øæê÷ÞÅÉÞÔ¨€lefOsÇÚáɵÂëöìçó‰5=JR~Àÿþýƒþƒý/üÿи]TE9.'>ãàßÛÞÝÛ»~iq|€}zhf ÕÞæìêèèãâG2;IQ}þƒûý‘þýýüü€ûýªÿ.þÿÒµš]TE:.% —åÑÑÍÌœdl‚“”’Œ‚mV~É××àäàì¦)0;HP{¾ÿHþÿÖºÊÇÄÈÊÄÀÁ¿ÁÁ¿Åŵ;ZWJ?4+%-ÂÖÍÁzK^kˆ›žšŽmZG`´ÜÞÞäßA/7@LP‚”Ub``bXžÖÌ„ÎÍ×âÚÚÝÞ××Ýü¤ƒ\cVÄÿý˜ÿ'ýÿ¹‰¤Ÿš ¤š”•’••““·ÿÊ^aWMB810"D¸¤V=INt‘˜€š—{SDGT”Êàãi2;HPWW‡Ò`·¨„«©ºÍÀÁÄ÷·ëʃ[W1Ÿÿû˜ÿHýÿ¿’«¦¡¨«¢ž›œ£¢ìÿÐlrrpia[XYN[M=DI^t‰‹ŠŠ‰q`OQZ]l‡|PZ_ktsiYgÿug½®„±¯ÀÑÅÁÈèÙ·¼¨§ww0¸ÿü˜ÿ@ýÿ¾ª¥ §ª¡›œ™œœ›»ÿÿºk‚‘‹ˆ…‚zcMA=ER`nuwwvtm_PHKXegdkyzŒ’Ž}`9½€dº«„°®¿ÍÁ±ÓÿµŽ‘vt}€$8Ýÿý˜ÿHýÿ¾ª¥ §ª¡›œ™œœ›œÔÿ­Vzšš”†€ylYF:7(M‘±³±«©«ÑÿÀµÅtŠihÅÆutCFàÿþ˜ÿAýÿ¾ª¥ §ª¡›œ™œœ›™Ûz$Uiy€|sh]RG=3+((+06;@BCA>92,(&&(,2:BKYjsl]G1ƒ)NqŒ–’““•¢©Ü˜†{kWpàÜr]c*µÿü˜ÿAýÿ¾ª¥ §ª¡›œ™œœš¸l>GMTWRI?6/(# !#'+/24430,($  $)0;FKF:.! G’‡‰‹œƒ››€Àîy]{JLOPŸÿû˜ÿ&ýÿ¾ª¥ §ª¡›œ™œœš¡©K*-)',2/)$"%'%"$*)  „€ ~‹ƒŽ­¡”€pÍú¦Z<8>=;9/Çÿý˜ÿ0ýÿ¾ª¥ §ª¡›œ™œœš¡¥Š   ˆ|€Š©ùÀf›[797310/§ÿü˜ÿ/ýÿ¾ª¥ §ª¡›œ™œœš£›»\€  ‰Gw€«éȆwH461.+)vÿý˜ÿ&ýÿ¾ª¥ §ª¡›œ™œœš£®¿@ " €  $ €ˆXj‰‡—ˆkD43.,*$G7Jÿþ˜ÿ$ýÿ¾ª¥ §ª¡›œ™œœš£­¾Ÿ0()" ‚ ‚  !-e/ˆXyvp`:/0+'!XðÃ#ïÿþ—ÿ)ýÿ¾ª¥ §ª¡›œ™œœš£®½šb8;0(! €  "(2,'SgB‡5VncigU1,)"!%.ZCWÅ¥®ÿü—ÿ'ýÿ¾ª¥ §ª¡›œ™œœš£­¾šYX; (G7.% €   '/6=-HNdB…SnN]YF#! (7D7­ÿn2!>ÿÿþ–ÿýÿ¾ª¥ §ª¡›œ™œœš£­¾™YQG9€ ?K;4+$€ &-5:G",:ALc@„ 9<%hSF1'3?=358™Ýq  Žÿý–ÿ?ýÿ¾ª¥ §ª¡›œ™œœš£­¾šWPC81PLD>4+$ #(/7=@J6%,5@K^N‚!%x9383?c(*7/Cx+-.%6^&,/75+sH &k½¶zlN¶ÿý–ÿdýÿ¾ª¥ §ª¡›œ™œœš£œ·¿yRJ>3*! O€}wronnmmnopt}‚u.&B'0;FRa ki(;:$]X!+*!YC.( ‚u„Ž}°þ˜ÿ#ýÿ¾ª¥ §ª¡›œ™œœš¡§]¢LH<1( (U^wƒvuv5uuA%SO%.8CNb(3[3xD,,.-t/(/&D |²¦vWlnÈÿü˜ÿ%ýÿ¾ª¥ §ª¡›œ™œœš ­/‚vKE9/&:cVZlp…r6ojFZ[`% #+6CQC7t5LœVIe%-*!Qc!  :co™’UhfÆÿý˜ÿQýÿ¾ª¥ §ª¡œšœš «5XdKA6,$ QjfX#),(&#&'+,.'[dgn7 *01%,2lN€…*o>$)-(q € ,5Rœ¡WhgÈÿý˜ÿ%ýÿ¾ª¥ §ª¡™™––˜›¢ª>B\H>3*" huolW…"ZgnrwL"B747/Er]™›V5p#1#!& -:VŸWigÈÿý˜ÿ&ýÿ¾ª¥ §ª ¥¬§³«”œœ¨^PF;0'"}~|sl] ‚!$Ydmwyy\ Sy+:;$]Y¡–2kJ„ -:U WigÈÿý˜ÿNýÿ¼«¦¡¨­›Úÿÿ×”zxw}eT?3-&=Žˆ‡‚vaL"<\ckuyxr`,D.mV(,-/mNyƒB[ƒ -:U WigÈÿý˜ÿJþÿÅ‘¢ š ¦‘Úü©uttpmimmaE(`›••Z;/0*!%EV]aiqvup`V@YS"fj5q+,*!R^#A‡ -:U WigÈÿý˜ÿHüÿ”ÒÅÄÇÉÉÍ‘qxqjfcbbdjo_. ‰¢¤ŽWANUQJC>5-%;[agmoqqVBWfo],|/^S ),+p /(‰ -:U WigÈÿý˜ÿLûÿNŽÿûÿþÿÐ~vvle_ZWVWZ^bln7 J«­ždZ{|qf\RIA-\QXh:<™h$u,.$0d+ O… -:U WigÈÿý˜ÿLûÿRÿùýÿ­vztiaYSNLKMPTY^eq5˜µ°tk—†}tkaYM?3( UkeIO%"]PPX_%nœ=Tc6:Céÿ^… -:U WigÈÿý˜ÿLûÿNŽÿýòŸx|rh^TLFB@@BEJOUZcdn¶¼Žo©©ž”Œ„zm_PE;1 &\C?C [OEH\K#KA W&Hn@CÖÿùÿ^… -:U WigÈÿý˜ÿLýÿ½Òÿó“w~rh\RIA:6567;@EKQW]_”«p¢²ª§ž†{pdZMA6-+h2EDNK<=F^5 /HPXkÜÿþûÿ`… -:U WigÈÿýšÿJþÿÒˆrh]QF=50,++.16;AGMRU[m“´«®ž‡‚ym`XGA_N^g4+7G549QO+3;HWY†Ú×ÕçQ… -:U WigÈÿý™ÿGýÿÐeƒuk_RF<2+&$"#%(-27=CGNRRŽ®ªœ”•’‰~vj3ON'e@,ZWI @/-1?R$-7BNZi&‰ -:U WigÈÿý˜ÿGýÿÎ7…ƒwnaUH<1)# !%).39>CIMO‡’•‘ŽŠƒYUN/hAj[?OB" 2+&)2L.")2=HTfXŠ -:U WigÈÿý˜ÿþÿ>'yqfYL?4*"€6"&+059>DENx…†Ž°±€a2n-W^`l=E" '"*=D%.8BN[h'ˆ -:U WigÈÿý—ÿIýÿÏ R„vl_RE8-$#',059>>I|ÈâÜ{v:U] hVm_"(.C=5!".G'"*3>IUcN‰ -:U WigÈÿý—ÿûÿŸwrewfZM@4) 6 $(,0382_ØÚÍênqY$o.DbDc?RqS9-$9=&/9DO[_%‡ -:U WigÈÿý–ÿKýÿç¤}ksmdWJ=3(   $'*-1)„Ķ»Â}XY1Bfm8$B'sZ>) *A&#+4?JW]Jˆ -:U WigÈÿý•ÿNþÿé—j~ª“qbVJ>3)! "$'',£¾·½§RM? k;7d!NnP5# !2<(/;ERYX!† -:U WigÈÿý–ÿø§dt¢¨£r[JA6,$ € 3 #m»ºµÆp:?-=l<=6=iN2!  %75",6ALVUAˆ -:U WigÈÿý”ÿþÿºdcŠ•¡¥£w]F:2)" € 4 <¯³¹º®<@%70;H@4YX5"  '9:"'2JT_ehhgc^ZRE?8/--$ E? ) Bx~‹œ»äÕMQQRQMJFAB<+  $*2D?† -:U WigÈÿý‘ÿ&þÿð](2DGCA?<2SÏ"!&/,)GNW2 uŽªÍÝø­\WTVVSOJEB<,! €  #0Hƒ -:U WigÈÿý‘ÿGýÿÑ: $,05862/-%?¤½J29*+'$AOKMN 5ž«ÄÒé¸ Sa`^YTPKEC7&   *D ƒ -:U WigÈÿý‘ÿIýÿÒ5"%),*'# !f·“733& 7KLNTN\G7{ ­»Ïµ%7H^[VPKEC2! €'A/ƒ -:U WigÈÿý‘ÿ1ýÿÌ4  "!$’¯`/+'$)OOSYc]j|H$0q‘–£²¯"€ 2fb]WPJFB-  %?.ƒ -:U WigÈÿý‘ÿ3ýÿÙ> S®•2-'%! HX\_TTdrzr|ƒ…›¨1€ Fkmkf`XRKFA)  &?/ƒ -:U WigÈÿý‘ÿUþÿëI  †·h",&)% gYTat}~~†Œž>7\psvuqjbZRJD=%  (A&ƒ -:U WigÈÿý‘ÿJþÿòY  B¬¥8-.MZ[`gjqy~|vof]SI@6" €  .Eƒ -:U WigÈÿý’ÿTþÿ€  |¾x …”•–•“‘Ž—r*AHHFCFJOXcnx€…‡†ƒ~vlaTE8+&6Bƒ -:U WigÈÿý’ÿTüÿµ 5©º$ b¤˜š˜–”’•049;=@DHOXakv‡ŒŽ‹…}teSA+ $0>3ƒ -:U WigÈÿý’ÿRýÿÝ8 rÏx %™˜–•“’‰  kŒƒ€GI@IMRX]ciov|ƒ‰”™œŸ ¡ –‰…Q /I0„ -:U WigÈÿý”ÿ ýÿ  € C %hn1 %…}‰\0HFNTZ`gnsy~…Š”˜›žŸ Ÿœ–‹ˆ] '2@S„ -:U WigÈÿý”ÿOýÿÜ7 puo€ I‡UDEKRZaiov|‡‹”˜šœœ›—ІT !&-5?ML† -:U WigÈÿý•ÿOþÿ‰  r}qz/  FBLU]fnu|‚‡‹Ž’”–——–“‹Šw7 "(/6>EU2… -:U WigÈÿý•ÿMþÿåF " P„„b4>?IR\fnv|…‰‹ŽŽŒ‹‹‡vJ  &,3:AJK ‡ -:U WigÈÿý–ÿNýÿ© R€‚J 5:jƒe =-=GQZckqw{~‚„†‡ˆ‡‚v\3 #)/6%q~Y(t‰t%(/ƒ "&+059A2‡ -:U WigÈÿý˜ÿýÿ™TA€dva‚:.$4€€ƒ !%)-15<8Š -:U WigÈÿýƒÿÞ‘'(#J`cF ^ƒ|z@€'2€€€€ !$'+/277 ‰ -9U WeuA"('*®ÿÿØ“+L/r~`-,  €   #&),/55 Š .:Tœ Wex)ŸÿÿÙ“O,'8 € €  € "%(+-4*‹'8Z ŸWex* ÿÿØ“4@€., € €  €€ #%')-1 ‰¥Vex)ŸÿÿØ—0=6 $6<0 ‚  €€!#$&*.(”!šYdx)ŸÿÿØ™&:<;721'‚ € !#$(+&˜Rcbx)ŸÿÿØš€ € !$'("—€ŸÿÿØ„ ‚€€€!#%&"•„ŸÿÿØœ€€  €€ !#$$# € ”€ŸÿÿØš€€€ ‚!""##!""€ ™Ÿÿÿؘ  €€    €€€€ ˜ŸÿÿØ— €‡‚ –ŸÿÿØ–  €ƒ€‚‚€  •ŸÿÿØ•   €€‚‡€€  •ŸÿÿØ• €€€‰‚€  •ŸÿÿØ•€ €‹‚€˜ŸÿÿØž«ŸÿÿثßÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷ŸÿÿØ÷Ÿÿt8mk@IzŸ¹ÊÕÙÕÆ±`(rÂôÿÿÿÿÿÿÿÿÿÿÿÿüÔ$)¢õÿþÿýûûüýýýýüüûûÿÿÿø # ùÿþûüþÿÿÿÿÿÿÿÿÿÿÿÿþýûþÿöp3×ÿüûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûüÿª Q÷ÿûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþúÿÁUþþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿ¼=øþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿ”ÝÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿQžÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÛ @ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿx¶ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿà4þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿa‰ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿºÎÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿìòÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ?CÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿPMÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ_VÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿlYÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿy\ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿƒ\ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿYÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ˜Wÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¢Uÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ«Rÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ´Mÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¼HÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÄDÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÌ;"DÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÔ4ÿÚ?ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÜ#Á 5ñÿš’ fÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ‚¥ÿÿk}ÿøÿ\ýÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿyˆ[½ÿÿÇ|ÿûþ÷7'òÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýý3bÿÿtPÿþþÿÿÿýÿæ.ƒÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿˆÚÿóZßÿýýÿÿÿýÿê2œÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿŒSöÿþÿÿÿÿÿÿÿÿüÿÔ mÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿD<ýûÿýþÿÿÿÿÿÿÿÿûÿ]æÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ«Sÿüÿÿÿÿÿÿÿÿÿÿÿþÿà\ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÐÿûÿÿÿÿÿÿÿÿÿÿÿÿüÿY‚ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿSÎÿýÿÿÿÿÿÿÿÿÿÿÿÿûÿ†)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿZ®ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¸2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿhyäÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿö%8ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿzbáÿøýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿ“BÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿŽFËÿþýöúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿø5Pÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¢*²ÿÿüýÿýöÿÿÿÿÿÿÿÿÿÿÿþýÿÿþýÿüD`ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¸‘÷ÿüýÿÿÿÿúûÿÿÿÿÿÿÿÿÿÿÿýÿçGåÿÿeyÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÑ uêÿýüÿÿÿÿÿÿÿùþûüÿýûþÿþÿñÈýÿCXÿï*˜ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿèR×ÿþüþÿÿÿÿÿÿÿÿùûÿÿÿÿÿþüüÿãÀÿK2¾ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿ(/¿ÿþüýÿÿÿÿÿÿÿÿüýÿõ§[5@—öÿþøÿ^‰çÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËöÿüýÿÿÿÿÿÿÿÿýüÿý§(;‰²ÿÿCDÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüÿÿÿÿÿÿÿÿýüþÿÃ<žs¡ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþÿÿÿÿÿÿÿþüþÿÜ\* "ôÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýÿëu &°üÿéßÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýÿû”tøÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüÿÿ°0»ÿüüþÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÊDAæÿûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿáfhýþûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿðŒÿüýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿwŸÿûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿí¦ÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿšÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý;6ÿýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÀVÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿV‡ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿ̤ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿX ½ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÅ ½ÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿE¥ÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿªqÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿô"'ñÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿwŸÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÈòÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿý/gÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿu§ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¸Ôÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿçìÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3"÷ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿW'ûÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿq#øÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ€íÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿzÛÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿcºÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿWˆÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿLNÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ3íÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿö®ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÛXÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ° Þÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿs€ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþ1éÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÉzÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿoÚÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿèQÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ€œÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÝ ÏÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿT&çÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿ—;óÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÂ?ðÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÒ0Þÿûýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþúÿϱÿþûüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüÿ¸ aãÿþþüüüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýˆ   xÎýÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÇE    P‰¯¾»ÁÝùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ E' !  #)+##P–ØûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÌ}:#))#   !$(+163B~Ëûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþþÿç‘C+1.(%"   $(,06=;3.*&#  !$(,17>IJˆìÿýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÚÑÎÌÌÎÒÕðÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüÿ×_@=4/*'#    #'+06?KP¦ÿÿüÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþßÒÏËÈÇÉÎÒØøÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþþÿþûÿåcD<2-)%"   $(-3=KQ¥ÿüüþþþÿÿþÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿèÑÐÊÅÂÁÃÇÍÑßþÿÿÿÿÿÿÿÿþûÿÿþþþþÿÿþþóüÿÿÿÿÿýÿ»KF7/*&"  !$(-7ETeåÿþÿÿÿÿÿñóÿþþþþþÿÿÿý÷ÿÿÿÿÿÿÿþÿòÓÐÊÆÁ½¼¾ÂÇÎÐæÿþþÿÿÿþþÿéîüÿÿÿÿÿÿþÿìÒåñ÷úøòã—ZM;0)%"  "'.9I[i—ÍÞèéçßÔÌöÿÿÿÿÿÿÿûòâëÿþþþþþþÿ÷ÔÍÉþº·¶·º¿ÅËÎæþÿÿÿÿÿÿõÙÖØßéñö÷÷õîÏ»¸¶µ±¦”|i^K:.'#   #*5DSbkv†“¥­µ¹ÉàæééçàÙÓÑÓØôÿÿÿÿÿÿñÐÆÃ¼·²®¬«¬®²·½ÄÈ×í÷ùøñáËľ»»¾À¾¸°§ ›•‡ypfYJ=1(#  #*4>IT]dks|…Œ“—œ¢§¬®¯°´¸»¾ÃÕãêëæÕ¼·±«¥¡ŸœŸ£¨®µº¿ÆÇú°«¤˜••—–”†~vme^WRMHA:3,&"   $).38962/+($!   #&(+.37<@DIMQTVY[`djqw}„…†…‚€|yvutsssrrrqqrssssrolhc^YUROLIFC@<952/,)&#"  !#&(+-0368:=?BDHKORUXZ[\]^]]\\\\\\\\[ZZYXWVUTRPNKIFDB?=:8530.+)'$"    "$&(),.023579;<>?@BCDEEFFFGGGGFFFEDCBA@?><;976420.,*)'%#!   "#$&'(*+,-.011223444455554433211/..,+*)'&%#"!  !""#$$$%%%%&%%%%&%%$$##"!!      ic08¾ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ ½1ÿ“ÏÁ(2¦®… TZˆá.Ü|— ©§§aNìNnQ·g)ùŒ^±0-M½5Å™HtpÒÙ¦ié+£í5!Q•±J:?„€äˆgD‰žÏÀ´)ýo5v R uAašú‚tQvoeO“|â¬ãfÙQ"$iW Oí0úæíÇÚX)1:ù!’¾ØôéÓr x2Îí¹è)áÚ—}èé–@]×ÉÅ«ËÒ¦ô0ÄõÏÁNè(ÝÌ)eó(ü*ý(tÒOî0O} HŠÛ·ñsj0ø8CÑ{Ò.Á敵£4r‰· ÎvÓÏ~& F}I¸^)Ü‚&2Çàô?+(ªÊV\+å¾Qð”4áèq#z8úv¯§õ­£L ß/ÀD42ÔœM†k’¾Ê†*XãáÛ[s!õò´KEA&°ýMb­è`ê0³¬g<‚ƒxJÄiR–×ÚûN#n%W‡‘¤f÷·éèPž€JSÝnD}²Ó!!±¥¯!Šûä&É Á,ÁÈ©ê›?Õ·óŒ~ €Ïï ž®ƒ<â«•Ï\Ê}yÈZ˜ :˜NùÁó:ù!ÄÜ‚&ÁõGà_ê*)édh¾O“žëÿ Œu=ú¢!OYÞ‹`àuËédNVÛ·ª×`-8ä\îy"‰äöå‚™û*A:ë7!vGö„´—²¸t0=ìS??ÉÚ©Í3A[fË3¨ÃUÂJÆ1„%O²C×gVoDNÎ&Íßÿh½ž'L= ÿÉ¥Ãí&‡Ú]ÚT?kY<î©— ¤§R:6,x0lâdo?©œù“¨oÀø¯#•«ÛSÞ´R$$À^VkL¸!¼ÞÀj·í^ݱÆ>T|ŒíƒZÏë«vùòÓA¸ÐR-ö¾Et«a ¥ý±ÜWÌâQù~Y~ßyL±;QC'XMtÇà{Ü?ð M9ÖÊ$“ ùÓÅ]zá\-ÍE±]=).¥kòÁ–/O±V–Û³]xŽÛ\úMB}´çÀÉÙpçîü'\u~³ð"™¸%Á€‘/ßP³•ùB+Ñðxä!Aó¯XYV•dŽ1ú‡„\Ú+‹gŠ·=/WOg+K wå@_Ê÷îçѤX¾yX]>¤)•]©­yò)m·õ€3ê3sJ‹¡SÿQ¦+ ñ¸AÖÀ£¥Ú ?ÒÇájÇácÃð²À3a¶ZžæáÍ9{Ì­øþ#7 ‹QpvcÜBXè§…cÛr¨ò»›ùM”Y ¹Óã»kR˜›dó†Pª-þL–vC!½%>,È+,0)E°Q=23ƒÁŽ| ©ÿaÎG™Ê‹úª)0Ο¤ÿp›‰cü@mÚÈþÍKi±û›»€ó3oŒ˜Wù{êzdrkxˆq4< µ‚Oýëo%œØX’´ ¦VÕÎúr£¶2¡ºÂT$Îâç’nÈO*ž„JB·{<N³¸Ÿ˜pZPÀœœ îÒÑi8¦G›½Ã˜ L!=al¸R[TQXXÇ3T¡¢À©¡„UXá¢ÆTñ˽²pH%˜ \¡LjÊ..iõ¢R ¬LM)¸Âù‡·þ,¯¹nñM.ùÈ…K÷n(±D7žÅeTÅÀIѹ¸¶J‹b¤%œuѨ–ô&˜££½ÈÚv™óêÑ!6ÚüñõQ×°+¿¾ô{a€‘®§üoFº»Ø¬è(W"¡w#²´È5J*è«–¨÷1ÒäÈ=g@1áäÚܲgÛˆF!M£‚ïèÅô‹ ›—| ÇWVVÑëw½yKfímÝP•:sÔC^(Vpë,çgUwlb„k•]¾ã~-ÒÔøØø[±"'ö+Þâ'ÞHÆs½êDu#p„UK|JQÊs¾ô/Œz¨jZt ´gß<±¤"¯¾£E&?&K˜þœGÞ>C'!à£ÕìkÁy0›†üå¼üoÌöz"º|ÓÍ<-åù=«^Ýn[1ûæò·ŸÀ‚ê`VÛ)Ãír‡Ú÷Áè…—‚t93¿šê†‹˜3Q¾Õd€Ã‡ròžã[*[c låç”ÓѤTñ°ˆº{fÑ—tÿ_:Ad6À UŸ‘éFFe-!ºu†ÏT¤vƒ¤e¡$µ+p´0ƒ$¬ààPgF¡ºEnCÄ)f.£…˜íh—þ²DÚîX¡<ö­tY×蘤6û6ª³ãWŒþ½¡€³Ï~›Ì®þÝæÒeÈyK–ý<v0ndt3Ô_ú!åC1—×½Q& º¿µë›áÎNsR _UñÍð3í9Ì6™ ”ÏDÁ*¿zçN%~Y£3 Y üŠše—Å ›å×[ÿU€b"ªÙc·¶èë©4l  ¹ÛÜ;;83¸¸Á0%Ì! ´B’ûÎ?”¸H¢"œ4¥}``zY~5óF!$aê5„9w+=ŒëâêÆc¹V!%Zä©”zÁß¡WÃb ΢Öd˜9ÃíoÁÖƒÈ  ÁºÕÂÞªD¦ >”¥ÇN ªÒ@C%ÆT>ÍÄK5Dº5ª ìúšÖ5áfåÓ’»w¤øÖW&ü¿äÀÅË[­b²G0?&LÊÍ<ŒDö\n8å# œ Ýá¶P• œâR•WÓéI%aG÷‹LÙfM-Œ_RÍ‚Ýx1ÚS£l¾¯àu¶œ˜·DÞNˆ £Ã\UdW½˜¾ÍàRšÍ2¬[êô,ÞZ,€õŠk'¥%ãƒX l´÷¿|x"L Þ™¼Á&4µ3Æ;sBü ÁQ¶æBgÆYiÍ\Lj÷Ô;.œa6.?œ“Yç[ï¼'J¸˜ ãdkò¤ Ná½Qƒ­÷Úe`e"øòTˆ|pØgžÜIàç1tç~±Þ'ºÍy%‹§|9_˜ø„œX&â ¬ ?< —`†Âµˆdu°^XÏΕŸ9™‹¶Aáo@£aSì°L_3$ÜÚ¾š.Õu 2r7È<ÄëX¹úsf¯±˜ªÈ´c¬‚ª@®¢¤’ná…"^šðtü®â]ÂÂ8ò£+‹älƒçiò *öý-o ¿ïßÉãå°a㔫ò´ÓŸÝ<°0{G¿z!D[ekwøcê¿|&½\Ÿ­ÜÁ×™/8¾°Gø‹«a•4ɈŒöÙõœ…Š+ø³95`–ñÿ~6¢G·ègt´@$$¼­/5ED”Ú1„p–ð–&@p9ˆÔÏ:LèÇÜ[K%¤;4yH¼Ž¨¾ ÅÍâ-¶»3p$Ûi©Ü± f#mð‹Á­,MŒt¼ÂÁqmä#âq;WD~2ÍfK¦õÙ3uhNò:ÑGk ŒŒ¨üg4ûhÀxe®Âµ>:ŠÙ‡îˆ‹º•Ñ|BÌiÔýžè= ³ÙÎ`Ð<¦ˆòÑgvØ'3¢8à×Ìäx™¥;*^Ú˜ sƼɌ4âP[@‡kðÇq¬ØiXZ¶Éop¤WCß„iM¾ &Óä¶8râqâˆO“®|­Ìl$Cõ²Š¤ñŒŸo/UÇ‘v6Þpmß3å5RÚ‚ç£Ë /.#¾àQ­@ ÌZBŸ ºï”Îw µ¤=5|Ý×É÷¦VU`ýr »S¼|OÚõ H1]iñ@r…Ü¥K I*Á.ŽØ*†]T}V²±j4®­ñ—@çhQےͨÇë Ê™Jº ÙÔŽëã¼ë1”ùüeô᥸OüTòCÌ~qÐ “ä.ÑKÖü±SÉ»ÞÓîªÞÁÞFØOqÚ”ÒCVØÀœ³Èe+,'e‹ç{bIñÉTª­uXJÐõ½€ ‘"#VÛ±ð‰VP³ñ³ŠËOž¸oõ€iÛS˜ r#Ôq øy˜àð˜c6 ¦™Zà”½Á*_»µ]÷úÐݸèï¯øÇRõ*„/¸<_eÔ“pȯ݆á8ã%wÿ(˜ ;Ñt¸y}çà´d’ÑØuO5Ñй«k·åk…32É­h]HÖßñ`DÊN'°sùϲ›µêI?ϧ«q{þ=$R1« t´½QžÞœÞqƒëT\>HãMöö?Nk\“]ÅòyÖ›²Ù ßü?3¯ù ±veYá­?ž¡"))€æYÉ^|YÇLа¸ü#õõ„µîž—µÇu’8û™›UÇNFíY˜]ïñr>”qÞŽoî¬lÑÊ?-vÁv Æøš¤R²ïƒÓ¹ 8QLü Çò‰Ý¡äMònge GÓŽ5~q¯! £ŒÁ¨:ÂÆbCÑw¥"à«äï©Mìµ÷ ¡°u£ÄÌÙаÈ\R’žt/_‚ÛTgªÉŽÞp³4š9Îg¹ƉÀñFäŒuŠvÄ-õ¾-´H>Ü}øwùߢÙoådÆ6Ú½ŽF rL=D^UŠk)¦ìªÑ½¶)ìídg0¹çPŒ/ަ嘨`|f@8:£™øº¦y¶•ÀÈb=—¦Øq Æ'kæÕ²£^Œ'É-¯. Tñb_  l¤I­Ž…%HÍt›VW:'ìšV´ý‰<ŒÉRr8K2a&¡æjÖ‡” ¸‹[N°ôµë† :7æדCs’Uü$^µã¡(¡¶ã¸ OYZŸšºå=×dXZz¹?uCg°ælhß&s¶Up§5 ÎÍWIÝ'øö HµÏgÚ*D£Ò5~`”›8kny’Se˜–½&üFãQÖ]N«g८Få•¿ÈíªÍ)ƒ\Ýðý¼`©*õäÆIȼM„$gƒWsQ],Êq‹F…º|j,z-IºE˱޿A8jÒ öÕÐÂ_õÜO}®ÇîŒ8¡p›à>‹À²ô…¤.¢&;b. Kû6MGêÑœÜÀÊÕ*w#åÀzø5 XŠ›ùÕfÊÏe&'p´Dj¬»Á¶ÌørkZ÷.Îû5â›HôBUÊ퉪‘÷¤Æaq²=#iÉ}>àj Æ­aØQ#…ÖUKh%SÅèÂdb¸½ êºÑIzÃ*ØC”šÚ¦|>ðR!ñóÍC—ÇÔ]¸‰ö×P &zUQ5pƒr¦ŸƒYÐ Ž„FI”º4C›WŽ„ûzÙüOc:#)CìFÇá¦ûtþ† €×¸Ñ¹ª‡™j!zRË*Ë’a9)þ8¢0Ö‚ž[{ƒ ÷ÂŒ£¿ÐZþŽÛî mš§É[^wÌEHåh¾7ÏÎH/èH®f†Îñ£P÷7–EYªYlW YŸ„FÏÅE+ÓË«.ÒaIIýZ!Þª°yð‘d­Ñ€4î6ó@æÇ=~¤w?E~´2Ô&Ý©Öòr‡¯ë\€ri©¥C&Ž™— àqîÃ]©ß W²¶Éš“§9i^àéÚjNýoòPj}!îñáýs§úpòJ^>P‚rþWÉ/)šùvKÓ¿ Ïåó¢D!bO’tM‰šå O÷fâ°ãÆC¤ÚfûªŽ”IÚëè†LºÆø ˆØ.ý_;ñöv¥Ò±lo9äûäc™Ã^¸²œ„¦¢j;ïk»„2q·Àv*‡Ä*':Ž©9Fv-¹b*¤F6æœHÆ„½1uà¨#}±ð.·O‰³zçž¹ñ ÍàÚÿXÛAç³4Wl1w1‰{w’rg·M¥Ü€ÅÖÆëši¥è4ŸsËì=¡Õèb hýþ uÖ̪!þnu«/uÈO'ªîÕ¯×í`1Æ‘¾Dëv ­ß%#e¼Öœ‹^Ìïîx˜Ëü B¤¼·Wr»-dªí¡U„yí™úÖ:+tXz‰ŽmCP„ ;4Eé4Ãìe½¾[À¢ Ò=˜á¿ÄËÊ‚æJÊ×Ó,OngÌ®îì1åFÆ $Ûqï\¬Ò9Öƒ¬(òÐî‡E1Šy°/vwNt²6MÀ§ÇOÕ×6FÉmŽ{&€ðɳ5Ö÷ü¶JªrÀºïuû[åŒ6ÇUæ KF´FEÕÝ*qÉ3ô=ª#³ëpÇË„0ÏÄz†cxÞ*‡ãÞ¢¤|?ã¾`zžCß‹öjÚz¬ê•Ȧ[Oq_]Ùwgßr’ëÚ»ª×”ºõ˜‡š¼ÀôN‚%ýÏpQOy½,WC¹–<Õa[xV›øcÔ/»‹ý…/fv™Fñu[)ŠŒŠ,”-½m¯ZŠ2a@í§E'ÜùKXófô»ð¡¶NäŒjÄÿu ódU’ôà¼UªîW]Áë¯BåîVLGVÈee=ô³qDé{¦ºò¶FcáÿAPVSÅ9jP9½ÝïΪfVfå›mÙR8ù¶'âœ[b³ÂŒx^)ç¿Pƒó"M¶ü2§p?¸×ìåç•ú…ySWÃÃíÒ}ºSÛ¤ÀÍÊì<U]šé_Ý´b¶åéhÔ{ùzÎ#Àl^³¶úƒDÒšØ~ýKd Ï+Yö™{çTMŠ›UIƒµ…óI&îTÎ$$@c-uÚD&Çõ!ã“YºÈ®²†ˆ»¨7ƒáh€ófš;a9ØþÛÞõc|NʆÂ/¶=ƒõ[K,¢OkœÝ0Q !3i!½ÄÏw¹™úÚ]ø¿@‡?s›‰“/fD³ãph,ñpªñd_Ë© È&þ´CÌ ¶¨ Ô¦^3õoUkÈ ‰re, ’í‘?ï¼s]cßõB7pyÉ÷5Š[)žp˜#cTwá/¼µ°X .¬%'Dì÷ÇaîÏ×—½Ð™Þ¯Y²AH1!©©Fꞣ¡ãxW ÝpÈ¿µÜ{þš&(ÑBá 8$a}¤xê lÅ•<"oyiJ#4g¢º¨®¤ô7¢pwôRŸ (H {˜ ý¦ Â|.l«rÛ¥*‹…^vZJ4ä‡Í“m'1¦t½€†ôzn;ú…9U‚Ÿá.Îè¥Üㄇi%2í²šÐ¿Ú¨æI=&XÉž¶& Ù•hKÄÿf*yV|Œ)ž‹D1Ùñ'èÃϾÉ5 /ùW¥i†gŠ B*4À="½àKä¤é„¬ýÞýiÖY£K¹YÄBÀ;BŸïw+Ù”aØN”hlÔãa6×Ô”Ú]6¦É\™)ºZô$ϨlqîFÕû5ÄšŸ¤%ûe 9øFw¥0²EQúþm¢ôú0çÚS½%x ¬ÖC¦”qáÈdŒxÃìl[v³ lÈ'½¶ 7ÀÐÓš'ØfR¬,BR”öxÂëZ p6f«°»Ögs¾ rCQ—ÇPä´í .’ñ]vo”ä5dœº³àÄæØo\´Süc½žHDB:©”ƒ^…“:/Æ5ytˆ ¼­ i&ÚÒ:ëm›àñÒ1ßÅ%ÇáªQøk? MM-—'v’, ÏÂÍ0z‚QˆU™Ñ vWôz­Ì¸ðëS¦uŽñÁ'Ùc£Oeû°ZÁ¤–­Œ˜ÎU¾ñ]üQšÉèÆbe‹qÛìAaŸæ“×c&çi¸f?íG`¤ë$­kÂw^{¦ÓjïQQKÐÃà.ó>i£à‘_âÕR¢ý¢±1yÀmùª–ú$6Æ¢éñŒAI–º¾ÀnÃË—GbÓS5—`È=Ygà°hÌ”Ç}1xs‘Ð]#‘¡’nEÀ }îÖl&íM,ÜÚ mŸÒÖÑ—í-¯VŸpCþ¨iœhkÏí>Ö݆á.ý…ïüJ±­Öäâ‚Åü‰rmw:‹g:ÆXt7Û—ÐÒÊ»­0B’pÝf:d-wO6‚)øoøåJUUºÔ¯¦ÕÓh ô ½¨Ÿm¨ßÒ¯'ß×ÓG˜µBÄ}Îéøq_Eæ’ƒCÜЧØë¥8wy8€‰´¥I€6 ‹x¦ŽsZ½´þð”Ê ?þ §$š°„嵘àp‚)G˜Û'4¡Gr²ÑÓa¤P›ER=Æ¿W^Ƙ÷9å@á¦P’û:˜d.ø^a,µ¡Ü‚[”z¸Ü¨éF+Qgå&é`û®°—óìš¼ps¾ ê~m+²g¿ ò®°à#§‡Ê¬- ÊÀ(jýŠÍV¨¶Y˜à×ݯ;¡çÄCÃ=”þµUM’lÝ~b ÒhQDP˜—Üþ>îÛª×Ý ƒ‰¢ÚÁÍ©ÚzÊRùƒ‰Ñ›vÎ×Uö‚ xŒƒº_ÓðJdß~­Ž¥ìr«­1y¼9WK ÂZì²ó=I Q2~ ¿ñMž?2¥>ó»ðƒøvS3AVÑd»_zôu=3ÇåP{Yg›«ñÆžúÅéEùÁÊ•×üéþÖ,³iÈôƒáŽa˜/.L?ž¨s? R^>)dP«UQ:m™Óâd5~c†AèôŸÂ½As\Z~­…«Ö)ž¬­\cxFÞD³Å:6›9_³ÄžPÔ صÃGô>6&›<ЬÉ+-L¼Â:²Õ©rÔÛÁƒr´µ–¨¥D.ÂŒ2ÀAƒ1pZÌÀÅU3VѲ‘#•Ñ›OÖŽÛ5)Q2`âHÔÉ=J:ñÎæ›U>·J5WcÓ¬††Ë,jìW‹Y¸¬ùµ1œÖ;†ß,‹`´ÖÛ’…žÕ×€ÓñO€â(²hŒv^÷¶±Ýé‚$ýK8qÉ@8ª6g¯/Œê…xCý^ ·`ÙåâuÏ´Oß{wÓzÜLßp»YÁP 5tÉÚ©×¾QªY½ïcÉHÜ`€[ëÜn®O²‡¤ŒðVÏ¢÷Kà…ï}¨ØP‰–¥£ß zSÇáí³‡°<~Á`ÕB§óŠh8?ÑýêDÞS›¹2!sÜqÆ›YgÏöú¶|íõi'F"¶“¹œ ƒ`fVk“Þ{ÿìÜ¢UÓ·ÖçI_Ç©¶…×šÒ HC×\g¼; ZJ¹Üõì¢&¹Å “:!‘ôi†8 ‹BÞqF»!Þºµš”Ösʨïy1öàV4^ååôsÏžR[EP#΢4ÂÊ!àžK‰ ðñ“9*âPk_¯‹µ#5«AœS¹èÙ•»—æøZÄ*ƒpe ®Œtätx½‚©8];)-’O󀊾þ—7s7 aàrµxën\¢Ü‘1d5ÂäÚðç|Ñì æõðY!â°ÐÃeÍÕpÄH×pf-“ñ̲ˆÌ:´„àKWœèÞï÷h€_p1ž$¯E .2¥ðAåNµlÉ <  )IÏÿCø!ƒe¦ïðN c~Áz •ŬE˜^®'mg‰¬½øzø£ëq=oôÂrõ8·¯áBkÿxéak‰Îâ§éÞš\ÐE3OÎΦãl†qca p{é5ú=÷‰³`ëFÀÚP$u”UÛbÔ{Ð\:Kœº¹”i¢ˆŒ$iþòWÃþÈyë°;6_Ùþb¶¯FYmD2«C ƒh›½±>®+6BžÓMîÐ;i8T=¿V^ýØô÷ƒ &­ ³RÒìE°Ðf°( @±®M›ÎÃÛž¾zè:Å_!ÀäÓ­¥ì%Z¼éT÷àúìy]Ó7×X™(‘ìÏ#t U›÷SoJU}=¹¹2·DÄK¤å.Ù”¿ˆá]^qaûáfù›ßûÏÿ`<¬˜÷{W'Vù<^ŽAôh¨Ì7(læ[k T^Qdjy=}ö8Î(OyEÈuýzñä Ê ”&A5œìŽjS¼·—Ç ÝgÑ0ð},PÀU«r¾’‘#.» ½Z…9,Ô…6Šq–Mì-¬&åL`þžq}^Ø7ºfÑ×Êðp)¤Û më{&5|Y°N¿|8è Ó‘”BkHºþ2¡|ˆ¥¹éÉkP‡= (+jòµû~ãèCûv­rÒeÉM#µ¨tüõ$b)8=ßiµÔjÄG}Ø™ #Ôÿ òC¡Õeíã¸mGR mê©{ú¢ƒŠ|8|„»:ŠÅI¡"-™ë%:’^z:R^ÂOm34IaCœõÑ65jÒ¡èNÍ÷”4ÜèHŠ:|´î߉ ¿­¹¡|LoW—²IZk9vÙ‰qú%fÑì±YÍ^Xv@¢¥åÖ¤ÿÆý bs-*ûç°^e› f0ò6? 4ü™&T†eDå)اåÜ>ÐsD@’=?ôL¼xÐQŽ}}zü¿ŠBÉ ×u—*¨Í4·b•ô`TÊp©èB­y±{fÝd%HT.p¤ÃœFª½O`˜«Ì'£ðs‘C£dåE쳒*'RC| ¡¯Ùê.|˜70½7¯æ,Ý ep¼<ÕS ËŸ—5pÒ.;YJeèTL£€1;ßòù_Þx³» ³ªBå`xSl:nî±²ãNÓxM|Ö#PƒµšÏË 3¡g»ÇÑÎ'T*÷¥çIïh¬|ác‹ú2³¥V{áL6%jˆGÄ>žäNLKirª|8óXÈïR©#p HÕ}êɘ-«°®­…`l"° §m.&¾ Zá sœ7Jˆ#cj[N‚:å>¶U‡v„&‚ BßÁ:0B¹GÔÖyf™È_õ EaÅ‹¶ì-Lçû‘47ÉžÀÂáÚ’¦Ídl6 #¬µ"¼UfÇI±Ùp<á("±°Xìáª@UàJ}Anù=<®ø Òh ôž› xdØmˆn#uGVêd5K+æØãù4xD1@´Ñt™Â£  [}€6ýÏŸ;uœ…-öä¼£^ñ ˜7Ì@Ö[^4”[ Õ¥·0Û} Eófˆ‚:î%µÿ †àw‰,Y#ù ‹wÿN¬¼Ñ³¿Y‘_Ìãi»9“mIÛ=m‡èš`ì“G¤oÆíãÏfÂÑ„n¥vÁl ³ÚøO†*wÉ­¬S¯‰äçU Ö™´*'«RÌÖ_„6’bÓ~¢ÖÔAøD‡èÅ¿¸…ÈrØÄüý¥"%± ^7·Fzt3ù-M ïÂò#½ƒp†¾vØÈú=$S `‘`ð…þ/ÿ9°ˆ;>Œà„¤dž[FÝ›X߀P8G2ôDkLÇ9¢ˆg–8»FrŸEÊõ’Ò}IÓ½e·ÖÅHÃãÛº(ÐÆÅ³¨-˜ª€~~G>°¢r%––çeUtÎpýOÖZ_Q.R<öší³7=¢w/€Ý¼¾®*õHæm«Ž¨oˆî=A2³±nDcé‚DÌl«$ŠuoÕÑAx=çIûò"Œ§fí#ȨYô=Y'(3’–lÿ5$¸c@é1zg% ßTŽ£ºòR5c2s‚¨`â”)®4’ýѧQ5M*Š¿¢@û©]VŒŒ+ŒUª-F¿/’g¶”ßÎ*'ˆSb¶¦ U i1*S‚8š¥úîxÙ ¿t—øÐkg-ŠöhÅ«”^—.Ü‘O/½«0ÊòÈ΂Žk…±¬÷F3WG*ö˜¡XðzÿŽ99‹+·SƒˆY#[´ ®*Á…\Wq”ÒBÐg›PÌBüÿtðÑ’Õ#p¬}÷ŽÝa:óÁ w*h hLpŽwiúnb¸žR^ž—ú£*g¡ £<i¢ó£Û”üH9Íž  ´JÓ–€ê=ž>óŽú‰b‘RnßÜÁqs¬e‹R½’xþ¢ŽÑ?4"` ÍÎJ!Ô—þé05v…tÍ·C@¦Ñ²qDÒMA«°²‹„ž‰ö¤ÿ;pzí,u¨©÷ÅŒ[N&³)›âï~††2Šm–ñ¾4’`è£bu‡”„™ð݇ ¹è“9<ŽßscÔëBw/Õ±‘ôÏOœ«xæ¿Òʽ h‘ã‚f­2ÇP¾ž¸›1?ŠÜ8ZÒëL \Œ%¨´é\8‚6=¡»žÝÁx”é€gÔe&´ó÷œÕáSæN£´‹Ö²A¯¼x®[-˜¸b­c»Í\ÎÇø n'”þðç9n®¿b}Û´ÁÔòNL¿¯Wðì+»>#ˆYôáâÉoæ»_‚óõdÅe$¬"ãY¨&ÏÃæÑêv?­d}èÇ@¢+Ö™¡ðV«­¹—~hl×ôúÖ»þ¥šlÝx²›c’òÜAié*§Èq™ñð~¯Å {×m²-gáh«X×ÅêxÊþœ¶‡;ÎC,)uK/u¶AûòúyŸŽ>Èþªà\$©ãrp¹µ¡¿HàÙš»]™@ž[°4/»´›.*Y(§^v—s©-P¬*dþ' uyâù`Z§™è‚ó¡F¸ÝÞçy¼õ®’¤ĦøÀ£Õ7™ç¤YÕä—8<ùY““¢Y¾uÔ‡‰‡ Íÿ®=}Í þ=±Ò×ýuP+šù¼: |ÀS‰iãìEjdŒ8*âŲà_'÷Ë-:%ˆ¬çX^ànº@©ÖŸ·„g…ŸŸpG¡™Y¿Ó›ûIèg;o‡ÓdÜ`êU<á‹™°²ñ‰êÁ1†µ$ ‰RÙ ÷‚ú™Ön‘Ž¢¥¹@œ!³}±I3Jº`'¤÷lÄÅ;>W¥5åÁ!wäEnËž4}êEœÚ^‰Ø‡fú˜ßõ*¼ò_pr@p–´• ¿Ûz9²EŠîÆpÅ{a!Æ&ã.ÛõBGnwœgó´§“ØÜY^…6äZrš~;]`r‚Ñå˜Z„7 ¤¸ÑF±~òb¨šÊ£¿VGD.£hÜ;©EËîVÆMÏGòÃB&”³ÏÑœt5¦c ¹&è¢j-"B Ð t|¨´ñ¾’JÍ¢PÇŸ›/²öÜ.äB€wKíoÿH-6õ:P+5ÕKq¬6;'Vs8%P·©xöYy*s–ŽæTÂYT³fásdÌûš â ìàmX ØÖ›ÐL.¤Ü’€7¯Ÿm ¨ á \À¡²v©G7-ë'uI·©¤&i©°£†!µ(Ê$1Fþ_g²iñ½‹m¢âÇQ­|!3;åÜ!6.Ð,5HHùø,×Un7`ÏJ¼³kÈC JÉ¡}Û9˜tÓ ƒýÁÝñªÜ eoBÅÈïÐû-FBPŒäÛþÈÝF•b¾ÔÖ‘©!'“Ô%pqà¼sø„B äO³Öe …ç–¿ïæpö`vy.Št—DpsqR绢n"{ƒ±-žð Eˆr³À™þU…Ï7CwU †–7uÎÙ®LÍ$¶Á’ÛÆ”5ýsÿècÕEiEâU²øy‡±~í|4‘5ΰaŸQä¸xFùM©é‚Q†…Ïa75Ö_ã›Ìgဪ6þ1KŽY 4[MÌ·J&uÉÓ?ÝIÏ.óA(CÄ—HYð–ˆöÆ+¡¢èà5G"‡ˆyÏnÍ»èƒc´*b½Cæt‰FåŠ/•i¶"ЧM0¸’h5ùÛ¤œü°…x1ërO8¼Bkµ_=wl*©5Ž ìk4d%1D%¯ð¹÷”&LG!Å©Ž$ujëê!ôoºs4½]÷D„‚‰}¸ ´øE䀢Çoµ-|²!áNQº£éQ4ý5Ùs_2ë FºÑbBºh­˜EË?‚_¡AQJe7¢™îÂ'2L¹æüÍ^ŽOô N N /ÉZ+tB`±,Wzoó'£ª:oÍFË`߯+þ¦Ý}0ÀŸ5l,ŠxíÅS™ ¹/ÙX)‡ùÇø¯ùo…“œDü\mhäãÉnÿd–ÇoËZ_¨WK¸t që µ{!¡§Bó9T‡#ÉýIïàP¶¾×Ïë{J ÛÜ<(ÆØß9pÂ;&f¸áî±ëÁBâˆX9ˆlÔXgŸ]¸ÆÔ¾Pd¶S¨)É—hÝ„Ÿ1¬‹ÙF`2~Îão®_BÌUa.ÿ,êËC‡Hö*ñÕXí°ÜœZNiä]ÞmU±šçš¨*N&Òÿ7 …ŽP:H<øFeÕ«º®) 1ý{ðžÊY}¶Å#¼œ÷õwp(ŒW\Èè\þßÚà?cø; Œ»÷q‚Q‰ŠõK}¿‘¹4lâÏq·I 0—Õ¤ž¨ôÎ óùÇiÝÿ{¶ÅUÏ«_•bå6ºÙâþD¦HÄO$,d0XðkB™_ö•ˆ¹}b»VêZôu%z?¶x*ɬ?ÊGUøk¤UÑw«”’š×žËÈn˜âˆ#âŽÏÄjæ0à³çöÒ{ÞAÑIiR@ï¢y̧ Ô(æLÈÄdB^P¶Â„˜Z?Ä$©L'œ¬¹Àãb¤2üDÀ¢¨‹Õý!—h pÀ¯0‘®§^*¼ZÁW÷DЇ)Š6Ñ•ê¢õmý˜/ ÙíÚ‘>í4¶Ð¢Kæ¨ÈïÓ U§åOTv,À³s/öì²b¬ÄG¿‡‚ú¾ÖØ¥€@Lf$ä¼, ï¤ åx†¡‚ ­;•2U¾eMgË?…®QíorcQ ±;{uíýi‹þæŠ8êWõ\0Ë2òŸÁÖŸ§éªÖelŠt„ÜÈŠ:½á³lË'çGF{æ]œ™GÒ]«»W?Êæ1P’àÄÚé5½G˜¢Ç÷ö¹x£ôô7[É`•ì5ñ­Î¶£} $2:kg’M²/f\/ÉáD‡Ì>i’„QÇìóo¿ÝLV{ÿvJWx‡ÿB)Q0Û¿¨Ž;&xößh+Ãíì†od°û{6ôÆer2ŠJÛóÈÿ ó9ß"$z@04QzçJ©Ê¾Š¨¼R›ýþ8‰ LÚ HðÓ£YÉL{‘ níÀ»4u‰†ª•U7[ôKç๠£çâ+¾†\I&Ê“¨¦ÓÍÀä-9窠|ù+JV †~û ý¬ï€m3| T¦¢°¥Ðô%‹ÛqsgB‘€ …¤XU¡,j‰~¤NÆU¼ _<ß·ïnÝbj2V›ƒ¯.qùŸ’‰hò¯ L0ê1jëäõSY=~*,ø”²­ÖªaYìÞk¤!*Þw²$‚[•°‘ÀcëàÅ;ÍJSî-Ó~Éç”*¨K# L#ÁƒÆ+{.pIÓ ‘¥¬¹økéã€õ´®0‘ëþ"m5/ý2¾!²ÎqmèkÞ-P™´,…–b£š¹S„(b³ï…üŒ=ªßÚÏ·÷ŸÐжÜZI²ÖKêÂ'cË P9ZrQ¡¸ gÂÊrŒ&âŤ0ˇíü¨Ü|¾ÿQ”ݵ4FÏêI–WÝ9sè·ï|ªQî&*߬Ffê·ùÁE~þÄŸq]Uæ®9ÊWJzÛwÿhêðGh÷]çƒ5ä-©?((’:›65"=+ \ Qü»ô|oçíï ›§Áœ Zl]ó'°á¼ÝÌí±~JV*œ`ێߪ·m@ú¸ÀuÀñ­}sÏè]µ¢/3ÌÖé.zïÚh9¿‘õócPu%ÂÅ\AE&i¡2Ápwû§µ^,"%¨þúΘ¼‘›#á.I69ðÛпAl¢®èÂmLmMêžïX3éµBÏHè)ÀYàÕ 5´à]¯KXÄI¶àÇÖŸûp—W¬Æ–ü~%ÄÒE,x-f-Ixr?*! "º+€˜çtÕÌ_ï,fsê+äÝÁ:Ø·Å-#Î4Ù ®c!GäÝ=È“%.4À)vYï )Àbn̸²ã1çÂ;½QLŽ1ÓjÆ\“¯Ý{ŸMöÕ'\Ÿ‹À®r7y$t~JQx44`a-}¯Ð!YÀ5îHyå+“¤|lë¢ùFá~²mjRòWÖÕ *.4“_9ßáÊ;¹ƒ= HqH^ @ú3*\Õ1¾,,+ QØ:Š-Ÿ¡qÝC!yÑvwÆ©ûœd¢ÁNæsN0 WM£ÃTÖ‚h»‹î¶¤…Ì#A„B´GaøŠ!ÙϾJÜyÛ,CÖ¾' Ònb¨‘Õ‹( ¯ÅÑyêÁ=mfÕØ€Òy«üq¥U½‘׺ ãÖ›âUF6è*ªLº]m¶oÒ¡7g.ÏᲂBà²gCå­ù‘Û4„I—P çƒ`dhBâÀˆ°~  ¼OYåàn|ÓYV*qr‹ L=IHu/q†l©¿èfíWQi9ÊFDáôµEzoñ·vS)Hôj–ú­J/z/u’̯h8[ÓƒÓÆ¾Æc. ΓðÕyx¿+Ï¢bJ;ÒâA1ÿXÂù]K—øGŸ‰­N󮜫‰‘€å^®NùÐ=5< XÇNxöT»¢¿œËâêA”(©Y:hå±­Î9~ߊÞ]j@Áüg©‹A"F”ûKYíoËÖ™‚VÞO—ÐÇ‘v‰eF£€F&mÌåö9Gfq$(>4[ýòC[ßv5‹,Ü8Ox%d¢Ú Fý)ÿPQ¡Ë Ϙí`H”-YD_üƒWFÝoƒ*OÒÑ$ºöÕ(Ù%–"~ ]ÎC.6• ;_Aãsè.S²3ÁìIZ)ŽÁ<‹5B}Òû”j²…Z™•õÛÙ%ò„Ç;üäÇaÎs„gIsɊƒ‹/<å©`úÛ‘ù_ziD͔ԃ‘tbÙ1¦úʯ`äx¤ÿÝäøÙ6¿íCQ"œ¬%…ú R¿ÊöMµTþ4ü£¾åÜŠû‚9ßÓhè—¶:z’=úú(Û#Û{˜ :6fÀ>,<&GŒ(o·7íÈêm¦ç¢s5´Õ×K#vé^jzo‚ο’õ¼ÉwÈIŸí.ãÆ .·žSV\1ä®4‰g·§ÂúŸhNˆ¼¾µ<ƒÀ®`Ì)iTWKIÔ 0°Ê[~wzìƒ Òæg¦qçsc†\YÌ-öóä0?ÊÞêUj&©¢Š-.2è·ä¹x“úì¶g^C]‹:¡­Ë=ËÌ’¥±ÃcøWœ§¿«¡þhݰ‡3ÝŒùJÙc¹ñO/3ÀÕÓL¦÷µd½ìÔå>žæz²²°­!4³t±-bH°(#+ïAú©qÅÜáth»µ„†¸ÓEßÙð×*‚™RŠ.ÃÐ’¶áR?x¥Fçß÷Á9| bNMXYÞLV+H¶½Ë'lóV”NqZ˜ð»Mß°<¦…y‹êyà™#˜¡ÃîÕ¹ÊC…,â§aÐ-O6P µœÛF罘­^ð¶ºâ\ëínià/¸,™ÚRIi”ð¹äP Ü$p¡B?{¦qã(Ý¡ ¥áUÍ<}õ-Þmg®ñ{Ù¯8!§q°¶[ƒ­@ý¸h\ë±™±Å¢ÇHp¨e¡61˯$Þ#¼´4>zå˜sá ¢¨|Ôiää©ÿ]g£VröAe="±Ak1À…ÿë&kn¼wh¥¢¨Æ_j¬6´ïmQ}Æ L¥ç\ÈÕ&.^õš‡—?òGý b"§{ÐT¿ÄÙ‚²TÚöÚ(þ˜D¢µN¿lÁxð,pÆr¸¡Ô£@å=9.u†ÖQø170C<d5?4ମÜCový€ÅöAØçï9ð€ÜbaÂpŸÙiï¨ð*wÒ-ñžî 0‚:‰£DVNÊ NeChHÅÔ éý%AŸkuez©;Bþ@´}Vj}ô2Ÿ¶€Ù!©zìšó  ã(¦ŽèwŒ±ÜÈÏ?_Ì›w€…ön±càû.jO›Øßç|Ò^]”ÍG„ùÓ{tŒ2,T–ñI3ç'6©äû`UHP5lô0ѼmLŸýТ½[ó{>c«{œ”¤€Ò‘û>¡¨—‰¢¦8nXj{kFxu¯ŒÌ¢äµŒ,F%ˆxVy•,öRÚɱ{Ã4‹A·­ÏÉÀ¨¿Y³If(Ã>åÑ*ÿ8A7‹÷=üâä%±VRFm[Ú}@.Gz$ˆÛ)=¡} 9ŦßV'çæ@Ÿ“/ð÷| …÷ò h´IòÑßC£³•ªÚ+%%‹{ªA- òI¥Ñ€mÞíZ|e¨ ‡ÁdL{ÐXªÆuDåλâuñß©w7Þ8çþm÷ÌÑ÷*kùŸã6ì<«¼Õßȉ^õ y¦½ Ê«K¬¥ÒÉhã®r ‡Îå\r½–X…Ý®ÑÈ)ÌÏXîÊj\ÝÀztð õ<.ãôéC6‹üP5àS#¿¸v.ø¨úB[»±¦† _I™/“BÞ"¥“@XÐLz à1ű"G©Hî¼¥~ÕQR«žÓؘ‡ÀgiÕƒðn7™g”¥n×–IHûÊ94+ù(¯8µ’jÔ¾d¸}Z¼>BÕ:PשNlÄ„5'F”ü¡Cñ…Œù¤›ˆ{]³¥e;¹ ‹¹·[œh%(ª»¼Rq FË­5]A6MPU²½>Aá!º ç®ü¯»9H”ÑŸÂS)·ðPãsç¢ Æ¹Üd­U¶6v`Ûª™ h{%?f$Þãã³Á>"y·˜Y¼ôЭÝ×ÅKjp–ÚÏÆ Žù"ýÙ eW%Üð}”þÆ•LÄy*Ѩ··ça9¢„œ©–OtR &!ژ܇ýè‚$ÙLñVG§b×1D1…¹£‘|,•‰ô5~cdÀôª(ä2çœwvo¸ŽJߊ¶àA%kG[j\tœ_¯r…ç‘…¹˜MçÀyU•SÉìþÆSdÁ«’«¦£ÚWeèm6ÄK0ÛˆN…j²Ü›hË_$Ú5Àª a€¸xÉßZìiãe8ΊêäsyÜUÚ!– ٗЂ¾kœ“,Kä *ª-ü1­T¢0IÜ.oˆ!•ÁOåW!o…´¡Œéh§£0G´û-žûa5ÅT—%¶(!> ­ú<Ž@øQWãLbcìÿ ÆÊ}Äù 1É Çö–G;fà BH”–ü6Ôª6~Èê‹Y¯ÒTç€.2Æù d¿i#oÉxmvõtõþD®Æ ³rWu~Ò•QÈ8¢¸˜¼N±ò×úÛQjÍɳR/ªð®n‚µ|Qœ)š(¥*ƒ²¶þ²›j"}ÁÞ5¶´ø]ÜÒ$M x¿Â@twÅ÷ B-h˜_6!±Â)d¬t¸ýç{ëvOÞryÓ©ÊHÔÐçýØ…bçz‹ÿn>“VÏÿx\΋+3Å bÑ9¹c’• 䀟;)ÀÂëµUš>ùj»”’¹w8¶òcß—2¹;ƒf™Th6ÔŸѯ “߆ymÑWh±Œ³û‚†ü\08/]êpY…È8®Ö½Ð4s´‘å Á>I@g }«ËÎ뱕F˜Üà#äÙ­k«DÆÏÆøˆÂªQ-ö¢Ñ¶µ'†¾°É¤˜T˘ž¥hƸì …ݰ¨"qÑ´Ãb›YJ®è(!ÛÙ9i:Û ­òìW˜¶@™Gßð–õ-îôÁ¶0ŠHŽ~«|¤†(ˆÂ/—ÜÍ…VéåYéÖ¤4ùÙÚ¸þ.ƒ°{…)‚Ά:N±ÉRÂݳŽÊ ¼tõIU­UÅ-—=ütÿ(æëÚȧ1UÞŒ_RSÍêjcîÝǵø½†§x [¬ñ8‹‡‡ ”ot÷ÝÙ´üu˜‡“ªl—¥º<·òó”÷Ä;- : ð—mlŠô…@½Ï´Ã ÂTw“…ÐU|(¢´dâ_~šÈ6zŸ¡Câé|¦ëŒ1×Ýp À˜¯ÄÓcQÑj(FºÜ-Ë2±2£†ö£­i¶˜îñ$£©Šö®˜^·'pj)!ξÂ|¨9®|ËñŒå/DŽA…6e#uX28k4«ÑReö9‰ÕqåÅyp]Ã9 Ø<Ãð'>ΤR#±gϼښvptEñi¹ÜˆÍç¼ðb~ÎÕîÌo<Å~ðØ/†3¹“ c$°x˜ùx0–üÍ“£vï`öÔÝâ(ññâSÀnxp_ë‰T P ÏÙ¡p´7‘ü¾Ê»'ˆ ª±%?™ ;ÇݘÌ{341™§×“6Œñå«nͳÛÌá^2«Ó¨XÆcAPVûÑgïÝ4r$ݼ™VÔ×,ü»¦|˜LKè†Ý zfà[ÛIp$jW5ðl/Õö€ã 3bs È ÷v¹,ÿ}]ÐD„ b÷  ÿ-Ú9Ó8›ÂíY-^’†…¦gz1´Ù¥diå ›[l$*X4Ê¥Í?€Q˜ªTUíûüì¿Öö½ ‹:eŒþç^QKñk›®•v|-m{ÚF[Ý—•:zau”~œÆkºx¦œ;û㹨.>7ÿhˆ4ܳˆ{ ›1=I‰W…ž;A‡Š«%~*âL(ú ßµ 9GÎ7Rª4êÊ ÷ ÁWoãO·VÌ@n¶Í*!£ãt#¾å^ ɯ¨u²ßš¿2]û›—õ|ÕŒÏó»«tKKÚÓ~ʽêÞÚþêi~­É“g-]T*°vølè¾—B·¶dÙ¸c†´§’/#Ò‰šWEæç=Aÿ]„ÑFšq\„p*r}s”—[AÍh÷Zo M|Ò£æ%;7 T:ª?ÙŽ£8΢9c`s9‘à„‰Âµp¥BÒSdÅüK`ŽðnUWa–œ±Ì¡ÆQÉËþºÔ_zBH aH:vÑP•‘ý%Qe¢Ú`62Êö>÷‡ée¢+¯dñëÔ2¹“ÁÛ^ a4^õ‘‘Àn5 :Іš¸è,Ùq«©ÐRW#Q‘¡,ܲÀš^|{[c„#R“ ªS1}¿Ø‚-õQÛ¤7Öf»æ±³&ÅO{ +wÃâί%¡¶ÔÙo~o‰‹ßÁ8«¢Æ©ùè8NþÒ;Õå³C`{X»ù[š,µ Ñj7°‰,5­n«a¢ü.Õ4BiÍ-È!‘Á6!ç¾B«‘Ô)ipp‡Ó½–ùØ ÆAï~ª©H‡n ?dÔ(Äü]'ʽÔúrÁ‰Ã"ÐÀñ%º5áð0ίƒ Ú¯`ø6ÅZÛÉsÊ ŒÞZ>^Qá°ˆ×'¯­·¹~ÆáZ(VW ­3O‹g*­0¸"s쎒ZXRzê_*÷VÜP,”…ñ5Æ»O™-xÓ‡™¶w•«Û«rà™¸š%Ù|ú¦ðÕH€(äm™! ¸«°™ h²Ç´>~@^L«h”¨<ÍöŽ£ªŒ§çŠú!ãcéŒnåcÜ}nó<º5Å÷ Ÿ<ƒðÒÏÓÍA žµÅH¡gÄ|Ûí®á˜…ºœ’]ê0áLäüÍÛ1>:„ÑÚá…þšÜ¡ä?ë¿ïœJ,—ÞéÀ8È/õñÉá;£#¥ý;ã'•]º$7åë 9åïty²2¬6Ó›M®›v¥ØR¢n6|ü“‘#F¬½}|œZ\Aiߟäp?e]=Ì¢f©¶uLÕÄ}6kSØ• 7󴀓Ïù çÿ0dø$Ž7ЧÕÉðm6Lðu&ª`K|åà0ho‡M€AÔA#œ‚•ë†I}’­9ìÀz#<Ý²Ô Ò~¾]{©£ä^½™åu• ðœõcÓµIéVA©\ÉD5v˜¿ÆiE¢‹‰¿ž4UŠ5 éרN Æ˜‹ˆêzä]ÿdÓ=|Â#9/§qr?”Ï0vOÒÑÑZ%èƒ~Ñq°bE*rÑJF×êÄ¥-Hd©u7)ñ†Þ²1Šá8¸˜Œ+l¦ÔæÐQÄkkY'¾F„ý©¢o¶{Ó˜oã˜÷ÙÁR€X¨À‰ü§áwÌ^¿¬ëÉãë’˜ÈÆXê¾¢õ²½´èTÑ&‡Èú.“‡¯«4¶bøº– ! ð%# M©ËÀ3A|¨ÛÒ¥¤hYèe¹ª0ïQÒûH\1LŸ¾š½«ø÷’~ 6ŒïÌ*A"0–U“¢r ðžló¦ôc³xã¡°»§XLä|:aÒëÃò^&ÿ€Mk$óLôçTlp2y…¶q ‡Þ¼næØÄ¹üy€Þ‚ª´6âÌŠUÎèS·ãÀòöpù:zÙÞ• | UaN¿)mºW›¹¿ÃÒb[iKfãÕ™FòDJK•?²]hÇÜ\`”/˲>ºXŒkc•”ÊÅéjÏ£ôÓ¹”o}s!ÙÛ/. µ*µËÁN›cZ«‘Úc8:PÚ~½ f!‹rV.o(« :ñ­@LVSþʸ‡ðz¢¤ªÛ¿fM :Æxß\x:ýVц¥ $±¬º„‘ÿ_ƒUÿ`øoÅê †˜í€3+k¦¤.ÀRÞŒ\[oÿ'&8-ú뉭éJßh>/Ìúþ“”#>4…¥'”áÿx3ôýôÏpJI]?",ß•U–öeSQ¾b™£í¼¹x#œÅ› ¶]ÃNnpfe’gj¬”2àœ²T ÛUcN™F•‰—-˜ä[ wìÏŸ+"kä7/Óm*L©Êï+2OEüFñmóÓiφ3Ùó9§óÀ T Åt­§ÎÐ)22›0_q„ÇG·2[èY?ãòáԸƻJóÁö>ëoÅ¥ãRëžÌ±¸»*@„_" rÔ'YÜŠÓ·ö-«íà¶ëûå2‰¾ï˜¯ù²†,'ÔÔÅO¦á mHBÁ¡P¸3¡¿Tuz¢Q?ßšOMž¨‘?÷öWìŒïÔóØúŒ  ƒg‰†œAµˆ{…’ý‚<£yq¢MÕd6vòtÀ£Ô…šeÙÔ]>â ó°²1L!»4ÛÜø@Õ.bp ¸¸ÜÝ?(s«­329Q53ŽÜþÚ¡ºÝ&¦#M(|%1–iÞµi¸ÒˆKœ+Dèê¨ön-lhω—0ã[öiçRaÛ@Á^2G;|„´©µµ=biÜR øœ82Q~ùå|™š²\_6í ø®%ù$Uíutm–—âUÆK‰"ükcÁ‡UO°¶Ç%%.É_¬÷’çN؈‰$”àcÞ6^– ŠÏbUEi¾´îa¿õ#Í­òÚ~ÑJèæëm/Ÿ€u2 4Ï1Ng«—k™¤i–Í$“a•SþƒœÊ–y~«ý™Ç¼9"å¯ÀOêÒ´±Èå//pÆ`Rq~M/2‘Mœr¥§vµcÝà[˜ Ì©Åé[…*Þ9á¹ÜïµE¬‡­?Ù+=(¨yM5¾%oÜrui¤Ý „Xa`oD ÒÅ^ðiýÑO.ëRhÊïø¶Žï"sõ$ÿs¿ñ*tÞ\:’¤™Ý¬ÞðnP:Kb÷›¸W‚ïp›ˆH–ãõ PE˜c fIÂùcbyÌD eOŸ`A¹"¶åînkâiô¨‚/ïÁ!:˜—7¡å IZ¢-D,¹I´¯k¶‡ ôx!‡—7 °ûƒ–ÇTZ%šzg)­Ô‚¾wÄèÍÆo5ªêA¿‚›¬e½À²­btÔ"Þ£g#LQ€diAî„.ž2Ù^$¨gƒ©ü…× :y`Ñvö±Nz¥4ôy”Ï|¼v–R­Êÿ\b¦Â² ’ újÈ%穸v¬~Ôçy úæùÞ­Ù|Ü!¾ÓÝÔ·]3?¾ÚlxœW ƒN%ÄKˆ—äÐv—9z×,³$Ð[À‹0¨Gâ’¿ Ô‹:lX³SÃTŠ\1>_3#âÙ@PFÀ cZ—ŠSå¤4ÿmÉÕ fU-ïR¹_ÖÓÑïCêÆã“Y þµºJ¢,m]W~•È4ÃNCÊeçßEy2,‰R%>è{,móæÞ¡’®zqÉë¯÷Ô7…§3M^­×ë€îŒ®9-ÜЄæ%ÿq<èh³+^Bó ¿‚Åäñ‹ÔüOjzë<Ø-RyÀ[q[NFnDe©–åY0k#.¨:óÛ锨Ç@‚„×&“m/¹ü6jÈ_‚}¡’)ú@áŲ„1ôIy€!ÔÐÜ4{½º@lH}ëûV]Žú.Ù·Å,a*,i€ˆqzvö=.ÒÔ9*û$/ŰT_Tbê¯ý/„•J>‹BZ爖Ê{: Á·õrÌ>à¬Íž™ ßÛuà LQ@Nañ> V=<{ZÛ}D}]U| ”çÕ M¢‚ûмzÉó¼|å3ÃÒÎäs«?ø‘ÁZœ6†¡øÍ -&çÍBŠÊíÇÄçïVο̱µJWº§=€6§ÃáeTŽ¼Å³äƒ­ªæ 9‡âð_sîôȇíöFLUlteK'‘[©Ð­j˜­bIŽgN×¼zú×b="´š˜Ž yä¯bƒæ-/}‡(´0«Õ”ƒSL¾—Ÿ“&êptú0éè½`ìg粌”À¡ë ?íèu@”ãSm„?¹ê[”½…nQA'Iç9úhìs—`“x¦Ÿ1ßXÝÕ;)8ka]ãÞ.§uÙ'-wà V3ôGf}£ü‘)¢d3Ĉ“áK±–ÞPÚ—‚%& ¢(`qøßºœd,Á¢ßÜn?ª6ÊzøM~ÖX±³ûj¦#ö>ú샖{»: hû%Tá§æmŒ*ÑúÉe3Ul#®ª1¥ŠÕ¸íŽq¡ÈcÃeÏ;+Õg°%NO†Væ>/ ¦'¥)Ì–È<Í´ç!áSâÕÅÞò/êÒWņÒ8LÀk ¶êagÂópí‹bI1Ùe8š¢&£]>節•ÈÎ"±+…ž«þðí%iËÉÃg—©4Dí¥wߢÈ=K±¹Šh`¶˜É=Ìšf²Ò¯w.L9þåy,þ+ê0ìS*ü}ËæõåE#ÂðÄcôѶ¨R¬Õ«T¨{ïTõu0ÅO‚û‘“\T(ÔfÙ“fiDžÝ‹½ÝŸ^˜lš¹kãû½ê(<8ÔœmÑn§Ô”æà2q»µµŽ¨E8)u;K:3+Cà+›c^å˜ÈjÆjuêùb ŽSžWÐÓõ’=Ïù»ö{™»Q73¨TV;ÊË(m˜š~Yš3Þž¬:¯kæÈŒ¨àŠÛ`ø›‰{Y7rå1@ÿ ¸{Èp!«âxõ$éá ƒ¼–±ûP¥UÉ'Þ!Áø>%œ/TrÈAï¶\9ZÊŸîÜÝžñåA +yôdÌÿ9+5Ãú|kˆžä‡ØÀâT$ËóæOD¶Y^JøR&ýDE>›î/³cÛ™ ¸ÑÅ:·ÿ2„™–¡àkd¾ÄÄŽe€M ÿuÆ™7¡{FÞ­èìw(xp ô3Ú>Cwn}CÒ‚· ,Âpºf³®Ìuw˜°æx™C)€é¿˜õa¿’wW÷òq»9ºs.>‹}HôWÌÆË¼Ï ¢9À9Nj­3¢`ÀʘKÍ€XY ÍC´üÌ|w4Þ)ªùIXm)T%^mç… ÈÚ Gib"ÌxÅ5B# `Ò?\Ÿ‚¢¯¹§;ë´yK”ÁI&°q%K©î®Þ,ªúêOšlg.®ÖlD’‘MšßÔ4ŸÍ\T§ýÂJ9⌒åƒجŠšå²ðÐ x-铤h”÷¾Îà&06®##ûx+EJ TYŠøÔ ìND3 Glœ*ä(koÅÔÑ‚ÚP±blž0 (ÙHƒuÅs|•T÷B8qÞlÐø÷ÔsžÉ” xs¹2Óµô8åmU±¶b¡(›¬æhݯùÁ¢ÓžRlUÕ;Wrºõµ9äÒ` }Ò÷r¼1jÞZüóÃÜ®øÞNJe‘áµ¢ÐU^ÐåA©„×Ù$„‡ô®3LÖ¾±}XÜŽûL‹¨Øâ<7äIÉCà Û™µà`ï“f9#;&(® ½‰~ …œ8nÃTA§·ræ€ø t_;ètŠ«K¸XÑØ—Õ?˜Áå®ÉŒ^Æ¥Úð™»x|#»ÝA²´1ÄÅâ„®¾‘óªVäù\̞ʠ2E^ë^ÓWxZÒ‰ ÝIÔÀ›Bõ‰;<7W4³·9ÏË;'¡qñý~3èÃaÞœÁ3?ÛZzÈ™ìÙ4l|ŸW¿^˜ÈöçòÑ 1óH''¼øÚä;%w/9ö!¾ÜÝ_˜–m¢ŒæC6þúàÕRÙêG„Ö%>Ú}N‡a¾.ZK¤èxÄŒSu:^ORóE¢•l€†Hë‘¡ dÁ>½ô€îÖL’ù%¡ü¾YVîˆñ#‡Qî«øÚŪè½"!aœÚ;Î>}ó‚ÏvÐ’G?ø•¿º;’yŽGfßo}e$Í6z"⯠ :¸7Yµ8\¯Güž@±W„ÿ|•v'IRPAyzÇ¿ˆŠ$åψz¯#wOÕW–¿†lIÁ¼§2ëú~ädÒ ½p_CqAº ©Û¾]¾ñÆFÝ%^8>qAwy]…âåØYš[»æ.OSºï)g ìx°9CȈÍyñsaü»–ð2æ‚2w'ùÉa,êçf›ªÚo=Õ °?gLþÇ"b®O(_Éö^žŽ‡Ò™&‚E¾øæKáùcŸÎ€) h'Ç:h‡Q4Žed®÷¨$9ùáï#ÎF²ä^Œ$QõË*ÎZ íŠ=Îþ:¥`“åäKëHQàfs·y»Ž‡L°iÂÞí¤ÃÃá-³"$­¬ê´ª—g³.”ortÔXEÓóÕdKTU˜M€(š×”|ÏÛúšyjytÛÎë_mÕ.rPÚ§¶À^$¿«íDuy´GƒÄG‘TçÖ™•þœò$ uy¶‰"!T}ÐFÞè£ >º]_E#¸õ:øL5…ò@4NQ|$é±tX„§495>z¨ìÕQòÁO1›çÚœé‘_îô‡†`ÂŒRyPT2v™~°0C²õÅšPÒ™ C¬ò•ŽZÙ–¤C¡N—ôå åpm”&Œî”RçÙAf![¯¯ƒà„Ô ‰ìœ4Ó(.§-RÜq—Ôýáæ(ªŠã7g!”Ä9—åÌèRxû¬º 1u¬týŽ]2â ÛB– |Šäí·y¦2‚eo£5EÈXÔ̾üEn¸À m’þÛƒÁ =ݨȞ>ˆtÖ#Ðè\­Ô½.ÄB¹‡øN±zÒ4ÉñÖèÓyNíP|›Cx®Z¡Íš;.¦/i“¨GBb2"•„8)ªzW½IUï:²æ?s]’ÛÌ|Œdq¦Åg(»Ú’r¿¦HÇu ­žHDü¯ÀA&[ªïûÈ1FL…(TYTÓæ +žtøò ÒoV~›Ÿÿ?ì I佊M5\Îô¨_Ç”*Ì8oO„­ypÈy~ñBGÎ" ”kÞ‚?Ôk$Kxøz÷¸1ºuœzU¿Ë°EÞR±œ´+çjD{,ŠŠ™XÒz_ðTà Ò  žº–×îóHÂZ“7€üŠHq…™t×O}NóßÙíZ@ÉW†Àìk“*JOt®f¿ÂÓ‹üGvõ¨_óJ|Û*hGõë\Oí-¦”õx$ûT±³°'`NÂÈŠ¢Îp­‡<–Ç.ÔF»V5« KûÛÏM¹FéÝŸ+o1\mZ‘ÔÈ…^âf v¢à:@)“äb€´pX[ש’áÓ:W lM—H“±‹>¬ƒq=ƒ­{rà~çîÕÃþ7´œTð•æ}׆Ÿ°ÉÕB¾y0‘ö¿Ó8´¨p¦õú÷#y!×,»àM÷ÝÌlùm(n`q<€Á>DSDþà °Qó˜`HÝÉmq£2hƒRùŽóÕÙ£”Äδsqò؇,tÁð1:i8þàCÿ~Üëäüñ0vìVÏŒ¹=1 çúcÄï¶ê™Uï˜ïüJ®˜(¼ÊöWÓt¯ùœ4|ÂÎ)ï<ÑŽ •R¹=ù—¯ŒV%çåóVu.ÇMÕGA‘v6”§„¥…èÝ*.–‡ÄÂlsöÄBªa"Ã(mšõˆVrö™Ðk#Id¡aDžâÚRv†G˜O]›÷µ"‰<Ùߨ…–@ŸYð©ù¿;c ÅÔ¨0ƒ#‘&}å; †òo²Ë ™-uÝ ÜÓ®eÆ‚¼ªÎAˆjb¡Fˆåðù|îîÁœ9~~áÂLJNXHÐÝä³ Tµ]Žü¬æ®¤DÙC/^ÓœhÜQ4ß ü†_t  7ü(Èê çV­œÕQçàE"uÿ<¦yU¹ßÖ૦ù&­Z [p ½gÑteòÒÏÞ<ú–›ÐQ‰ö<„NEa8ËD£HÞîm¦Nž5´Dn…‰%f®d)’ü)ùÈU5𝆤e¥@Äp2©nE+9–εË'78ú‘ÔHÌå«ì¹GÑ*·Aäe éW ŠlÒ>0®NvÄY~=Èi 0]¦?U>ÀJ‡mÕïW”ÌG)4öp¶É:ô\¨hGÙ¯‹Þ¿Ýd98Å‘¨W‹ÉŒ•2n‡{›!Ž_Ý[úÛÜ¿É$EA?üPýŽÃàÜ™@´ãqÔYšQª¯B_5K*’Á¡)|ݤ×ÒœAõÔé.íœ×›Nëºý¦ atyqf Õ"r²¤_Z"¿Œ Q\ ç·ðLµ1ÛP^ž˜?Û:¯ât¦ŽS=Ëó,9‘Ÿj Šá˜]¢Ê<§·f§Œ{j;b6ÚwFMyX´³Þ•„A<Ûc/M2 «’CzPfok´EŸ,͹Ý;g[ðK?@pôÝQ¥#}CÝ"q0ˆŽoü\€¹ÔŸè!³ åÞ¸¨µ¬Üˆ\j;‰u¶•˜V{’^çÿ}Œ7ýHR¥Ê’Áf´ŠÍÀ0_®´\×X$gð"-*ú±Œø¨èÒ´LÕ½°ÕKè:÷ã‘û½ˆA[1Òáô~npº¬˜°ßÎ  Ž{°Kû/²lªYP=$Óƒ…¬„æiò!UGp‚áÏÌ3MÔèR(<¿÷,ØÒ¥oÿg6É€¨ÇzA§GíÈ«íw€á[Xè…—ª_T1®°bè °}¥x}ñI…9ÇËM¢o¸Ö.âÉhR>…VR$}D²\@FˆDpfýi :û0Ì3k:#\äÌÜ€zߨÄÞÍ幂³‚ –*‰y€zÜ‹[úò>ŸÔâñÐÒ=ºa€<äž­"ùÖa®½ü×ÅJã»Ó¤…7;Ø`€!Zc D:G•[KÞ¥c„Kãm:|®64‡‚Ç3ÌdÕ($„’H ‡3y±¿æÿT\ÀÔïP€\X;9[s dýS é¬*lÞ+Dp,ÅÓµ(º– |š¤TÍ üaóª…½)${îdé/³žÙ&]ÖhHJôyëÒh^`ï›HÊM”¶ “ØÜ9° ç\…v)ÀB{óTÓÁ¥÷ÀþkÄwâ+;Fa<^ŠLLxòT¼Ìã KV:[nßõ;Ó²Fa'Ÿâ4xþy:ýÂ’ü£‘÷«ÐpO¿qÇC£³†¨ÍΊ#®Gµ®ÎÖÉz;sV¿|fwœ]ùÄxVá¡_êîl\nvjU'eö±PB]`_vš7ùS’› ¨ÈÇÖI•PŸÆ%ˆx¢ù,$מÒ‚¼²‘ NôîžrÄ'“…—£éaYšÞíé0q½ 5ê0‰¶o¢xl?€ï´¼M^¥š¥dÿv½¥£í±ôikÒ]þè-]"ýV°ç%Ö¶[á£ÐAŽqvµ%„¤„QzB)EY†‘¾í>mâi[’'Ù§0Ãèç¬`t @wÝ Ò2¯¤š³ ŠÕP¸ š=áŦpÆb&’«AîD {M*,ŠDå6ÿ=`¦æKŸÀ­º±<$Y÷¸Ñ+ÛN$ÐN ²—¶l#ô Æ&jGC „ðް9ÇÖ”í¦F™]-\¸¼„sí²@5uÄ =[rÃÈŒ ³dŽcC2!Bdq–[orÿ~/#Óšû½>¢vI ŸàgvÃvlª’² lò7ß÷€›R˜‡d¤ÊõYºI‡Ïw¹@àPuvè‚à$öSß×E¡ÊãZº,¹žË\þ·ûÄ‚çÙ@‡74,¤ñHáªÜ+ÞÊLRâZ·Šÿh®q#§&"RTÕ‡Áýj®XY©Wö mö¥¦Ëú™ÀÂ}²è¢Íä€ðuìâ–‰+*c´‰rtÍ]K ‘âN΂Ül°F¹í<Ú{@ìÄ«LfFÏÊíkpqÐ6†'í± ¢3‚;Áåãá£õ_ûø9úÄ‹6Ž ¸æOÛm$NØ´àÂv) ýGÍÕ M2>,Œm¼†Ç@|O3Z޵ÉnªüÈÑ6ˆ÷Imƒ±Ñ”¶ñºø¾¹ÎÆgÌT଒å±ùç|1•¢žá—t†³¡[õvv0¼‹gp ^ 8ñ=jœþÒ‰‡ýU-Aa'Kpp¯NH0Ú Å;ªäñ­¿ ÓÍ+¶ÂGäLLytÏ/õf¦äÅåäZB u[åÊŒO(ôWúÊØ•þ¨ø¶ÕEŸæE“€%¾„û ç”ò®gkŸe†B7ûÍÒ‘þM$PR³²–Ë“‰-‰ÒëéGÔMãíÏœø®§H– ¡´ò<èO¶ìåµ) E¡i'!FDB‹µ¡78>Æ6yòº`M‰Ž•ÖlºËý{³·þù8_éCý5×®!º9Ÿ›cG{ª{úx}ð¼êkMà 89ŠVßøY3m¡:†(ÓÛE¢2Ê8)$aÙÛÞðbÎ1!#ïý¶¤¡ §ñ8ܬ.!샪¡9žš8=¢¦‘%Åaùé®=$íùl˜ßt§+i IïxÎ-/­î Çîü0Œã\²-àÁNwbáã,£Nƒ-­2IÚÃrß‹yµa?nWâê~ö9“`žTX†w¯ÀÞ=GÝKP°„S‚PÏžkºÉ]{Æ_“å½Ü¿·N–²;Ÿøn¡È2~ä¼="K¿@ÒêÑí‘©[ÈZc¿0úž:l,ºRîºI£V±„cà²û¼xÀì ÏgÊÅ(V.{ûFC^uÜá“âxð 6Ä + "ý®Ü%јÀg™Ãà ï‘$þÿZòRx}$.ò•¾Î¾äÎk6†áØûí¥n¨²V±JêB!cµ,ê'¶ÖU×#I ",Z2Æj(¯—€Ïê˸,’±¤’3ž9¹ Ð{[@×#Õ‘ßQLq™n~vf§}ž¢Í»˜·GÈd^}†+'‰`o”ÿ$ ÖpÉ0þ”r·’£/òˆÃˆÊKW9ù©"Õ´¼³°¶-˜"°DAm),‘ÂEÉ#µ6'gQënÜÆÓsÈkè· ¿b­n4ÕšwS éEo…—@´Týfa¯8°¬Ÿ<Š%íH©Ù\²ñ¬¶&—š ¯_ãA§¶•nVLØ”qÿ(tÒ‘[•FÖ+ÅVjÿ[@ËE"mˆKöPtC„ø—ã³.+g+‚ÉÊ«}~=ã"è¥JIß· ²h:Ð׆ IìÎA™ Õ@ì|àö©ýáïy+‘%¹êèVh™]oÚìm',ÀëžÓ¤êà +ù/e+ûô‡óìù&Œ›¬ ‰ðLç–€×*ÙZXN©&È]Û’AÎ5„çÇðòàìظcýP@âÕq 'ö ;¡=ZÁ›£DÚÔÉD$¹ E Íþب~jù¤4A‰HÞÌg%ñyÞr àõ*B´ÝvSÙ ¿xoÇ©j…NF5Tr‹o–p]ˆ³‚ÙnÞog·¯^I.UAd7{‹Ýœ.» 4 É›‹~@í÷»KÜ«cëVºȪt·wñt‰OöÒ–¹Šõ²7Å€¿Ã}6|ÞÊýãàZ±i#m¢óá‡óf£(ÎèºßBYñ“Ôrs=þ—‡UX-Cµ_'É=%¡wW"½Xó™,ñ>"ü.¶^´KƒA‰3ÆÁ7moîãS n¾^áÒérP†ýùÔÉ#Nß§.öìq·L¤OCj™ÍY!{$øàßá§ Ìmn€’ Â9ŸÃ{%šË޲ކÊVÇ“¶JâÜ àÀGàUZ–Z¡lâÊ c -+„¿ ëY¸{Àbx¶\Ñ—uiT+а´Ïø¨CgAk¹¶R¨h>Ø!ׄY•õ”­’.©>Dã«Ö<Û–ô¢PýŠR™’èÿr6ëÓˆåÚŽf¡XÑVžja O©úN=ÖO²‹}m*ˆYé‘:Úîÿ9aÓÆ±Añ<Èð6wËi¼¦ëe¬86¥¶båö•5›Ð}êðñ'òM%vhôåĆzë•oœCˆrðDz$úÒÏ×3(à;}bÄ»ŽDÊŒùv¦b‘Û,<´6A¥4˜™3q¯ãÊ5†ó¶ÔLÛû{Þ²‘·~¿*³š®=Ý·’E$]Ï™ÙNÝc>nz;õ¨BzÌäsî-]ozDèqv }ý ÊáãÐcÙÙyU÷“®ËÊ6qÍŠ©Ö?ìõt¾ŽíŸà2ûE5‚䔚̜?«Íê+üä »<¶Ö• #sía‡XAeG¦˜´å4µ«n”xƒ¨)ËŽzY4É_I«tÕ ÷•?ã"Þ\Ü<ù€úµ–mØÆêI#µêb„mÅŒk.Àqöº ›_6ŸT§°Ýr‹-º9нt¿iϬdÜ©ßûþÐ?é×6Åå”üå”+wã´•¥RúýÈþ8éÿ%¸Ž¤Œ-ÀvîE`ª¨ã-J£Ýïõ?ˆG¿©Í²f”Ñ]º ÌžÊy¾¸ Á/='ˆUÈä,Ñéý„ÿˆðã=Ý3Vë±N^ëv,TÑ?oÊ£lŽ3ã5y|Sñ:K7Órð<¯€Z?F—}§°µš#Mäfuû1f}8Æà£ :­înâóö´ ígF´Ð=`£$-CùœÚZMTëTŽ›Ýoâ¢ZªÉ­®ô)˾/¬¹•¨ùùB,£(*ZLÑ€˜C$÷ ÄO¼·é~îBx9% ´4+(?—ÓI´=z1ü'./Q"2=ófYX"S`}®© Íi‡°¦›¸qÓoRiMU;'çoèÏe›×¢Zúã¿B˜px5ùÝÃôÿ¹ÉbñêŸ)ÞÛ¥5±›à¥S|“?tŸ#ùÒD4­¾{(÷ÛÇxËþ&’7ºy9ýÕvãú²0ç5? Ds¾ýióÅ.t—Ìb R6ù‡á¡6‹†Jș͚8ð£h¥”È+s˜EuäT‘ò âXY·oCBrà€çdyÝ œ¦eo ¡º© ñþ²r1'§‰¤CÔXp¶[„«ù[|ÁåH0&FÙxõU°†è¬Jm‡!¿ O/C5½TO6HZ7÷Û^$ÂB›Š×Ëdk¹ÿìòS ÚÌ´®Þ'#îPh#=ƒRïëCêÏé=XñšåY“¤)Ü똾ñ.¢…µ—ç6¹ j’Ó :³Ñµ„²M€ ô7Z²çý^Ui:iϾNÒÐwù 8 +…¬ºY¼í¹.UÃù¡'‚ž ŽF)„XŒ£)û|ÂQ4/¥ƒŽ8˜„‰ æÙAæŽx~š½¶iå।¸ð–ï?dxO; -v#”a¶O™àÉ£tžhÛf"ma=åHœž}?f…r³µr'VinÎꙈ¢®Œûó¬`ɹE¼¦%7ÃE;e/2ÄqtVƒ Ç0Ä»»>˜ÇQ°¬õuáq#s3’$sAxÒ•ìâC©W×F“Ê›)›²uMEuÊšV¿ÏÊßö‰÷Zºÿ2F߉¯""³›¹4ŠDñ¿~К l®ÃãRåX—õª©5G4!ÖÇž­&ê0tÑ êíf(ÍžÊÆ]R`}™EýXØÓUE)ðiXÊÛZ ØPŬgˆÒY`mg0Ž -Ijw°wÕrtÞa®¢Àj¦²H[£ÎsŠª‹$Él0­žC°F@ÿ.>ä- ›¬˜wP7ògöaÅ­"¬´è_©¿”ÎôáÅöj^µ=œ¬p<†É0•üêf£#;·îjq1r¬û…2•Iu<œ¬ØÓâoØD :ö4½A"ŽÎ&Â1ê©¶öÛUŸ.äb°ªÄDµíCìì è<õE•1beMæû)zgÌ3™êÝ™kÞ]hæ6¯Xøiók} d†Ï4ª‡›¶áú·‹õlÿuvÛú´_Õ²¿«tÿ+¶/Õªø?V´þ­¹ý]¬þ­7ðÍ„&°6ƒ‰o \§øjr‚¡¨Á*ʘH²àt®ÜtBw#œ~@,W­%õñÙÒNIÒOO`I=±Òð)ð»ÙBV#"Bøÿ•ªñvZÚÜÕ +Û=¯Ûokö Ü¡¾aÑÃÓ •×6þ½kh\ü]Z‚ÿA$›ãîð­ƒx*ó\§œ.Ly P¸ÒL“EfH?-@;€U¢îËÉÏv ‘HÂwŒ¾¥[ íÌèÖ¡ï+ ñöìE±_&•=‚´Âý<¿Œ$J:¥ã\"X#ÂdêÐêÛAŠMÃý{­M0uÈIë —–éœÈI³Ûs›‡™ ú¢9bñw¢“åx­_ÖØ ÿ2ª—æ¡«4;õáŒYz¼(@””߸˜ €g;E‡ÃÓ³ >V«ø3^ŸÊ(õ«Å0ø`–õȯwu›wUÖRÿî꯾Ÿl‡æá2¨áú ÖRJkô;R™¿˜¥«•Ü©(‹ô98yôU5wt€¯À€Ç)F!4KÁ4ùp~Ú›ãŽîȶO7‘OÆ ¢sqØá5Õ¢© %p˜º`»JaT†À¸Ó‚|ÚóÝÌb3Þ’W},ÁÀ“ƒj×KO ƒ-Þª=ûÖ*œò¶¯A36ùâ€ÿ3 PîªÁH\rϸ7 xˆÝœ6‘<¨QÔÈ¿\Xç­BA5ï‚ ñ˜¡îž‰ÌèyQÖTnØ W*Aùo«#|z ž»Dêç}¢æû;Ægï"w©û‰Üem§'¿ «JcumhwkôÚÌ _Ü"ˆ¢‹IX íœù·þN—šô3¸Ï&YŒèÇX·„œ¢­ ŸÇÞ‹Ñyú_b¾í¼TˆnIpÝiNÆb|%tcå\€'jN£Á>t™ä°ÈÕ T]X9¡B”жÚ8.g˜Î‘úÃ_¥Ée¾=ÒqÏyÎxD'>;˜Ç.»v]5Áxá±ÇÍÑÀy˜ú€Ò R¨kf¦¬º˜@a…à¤6Ð*÷y ë Ø—}GTød“ „r¶S¯lDy'÷ ’~g¿T„Æõ±KgÑe f¦\[Ê c^~V‘-U~"šrˆ>±±ŠU•Ú%6Í‘ÒÕž™´ômÈê KÍ}¸ ·K ˆp«£·›ÕÐÔ•9Êà•´¿r9aƒ*4¹.L$ ÿƒf, ÝÃ>ûÇŠ!R'óF³EVŠ HÃOYŸ½ž+•ÇÃ×ç+ÉI:wÄé=÷öLµ4=A6À™ô*‘gÑs4ÿ[üÍE ^ß\Ü8<þÅ~†’ÿ?W¥Cjê²å‚Èù#Gù!<–×¹(ÞǨf¦Ÿ@!¯±ç5}ÑÊâ‰ÇÿÕæâ^-Àß,hሣ¥‚+’Û ‘p‹R EÀéFjð›A¨–ŠO"ÿe4‡â›7ižpó@]å7:˜;‰ƒoØiT¢Óò9åÑÄæLÏE!7ÇgDmÎy Eï‡bZD˜òþ¾È©õAo °œ*вõ_eYÑã®­ÛÆËß3r‘Õº|ã ^KE…O(p±bÕÊ*)LB­z¶Ç[fl±*Áqimpj÷þ²Ê&£ ô£ü½0+·$Å´?ËñoÌ7B`X¼ýõÖ2†à¸P¡Œpž(áDx,t%ÙBدÃN÷„¹·eÚø¡‹‘¶>žÙ<% ®ù6ËÝ + ­õ[c ƒ}BêDgõ÷ôƱÁ.L”`4b1mÇ5ÍÐÀ}•)A²´miKd—[´v¥Ôâ.?ùƒÑêCÑÏuŒIz»lòÇüP:¹îÑCi?XÍ­*•Äì^Ø'ÉG_Í×Aqíž„Ãj?7ÿu³¼¤RìÙÏ„3Ia¿‘»š ³ˆL¡9m~Zø¶Û¦ÿp²›±¹rQ±î ‰eÁ´áÇ!9—SWFX²HÜúawÃíÁ¸Ò“ô°Þœr«9ŽÝÛ JÉä²¾CÐCÙ_é¢åÜýk+² »<`ê"CK÷Nªðz£«a©\Ék0X¿%ŠD”MšB‰k ˆ¼¸Áúb¬¾­ó+b«ÏhÍ §h «Þt‚zBuU}}¬m_ê*”(ñ©ã ÄxhîÞH3ï–‹zÆ',.Žf2™=UóÅAû“ùÈË]'êU{7 w¢uá»úâ¼Z@“‹¥¾i¥WÏ…šËÚÄ ZTÇ–!Í·F;ëQ[»pý¦Hi1xWQ DYôQÄP÷0,:Ù5M¦ùÿ2©Ëè£U!s¼Y‘GÜ…„ÀUœA7xGµêö$lÐÅÆŠf8ÿ:í"—ÁnwÈ(˜zDJ}þh ó¿À­¸˜Zò&“4½Åä‰œÔøJámZp©Óo„À07í±Û‰oÈ ‘æÑôjDñB¾fíƒäxÜ)Ea\Œ¿èÕbxÅG´BÛ”ƒŒ¥¹ÿu?w8ì/›ãŦ ov‹¯Ï¡4-æRôûrç>&ôÁÜ]yÌáä¤àp!ÑÚn%R‘S©ÕüF¦¢<¶ ]µÿæbÚaq¶³p}­¼‹ˆ5i!½;í2¿ýž5©E ü±{q¦ƒíúÚþV; Hg}v­ƒhSw‰®š -DªDĽù¹W»T¸–ܪ\”xbêØ6ñq_%—¾µKéŽl‚´rŒ[õ‚±9eŒéZ±ôZnÖé_Yx¤o9c¼l¹juF½êV^„¦‘_bhnCPhÕ×?ö‹[wÏ]g<_@!àòì‹çœ÷Ôܶ™—OVÓ³°Î½ýFÕè‘>èÙì(T‚ .,G[Œm‚¨*¯ñ­€ˆŠVe¹ÏL)u?|Ü2|†*H|x¦cù:§•ÅM›OAv‚ ã,jM˜ÕùÑUöýšbfHýNìZŒŸNÜ`ÓAkppÒ|¤I-†£'DŸ´Þ–“éi:”²ìHr”úÊ×…ô¬Ÿ­´_#éèTÂ^ەጋ€ÚÙñ3×DGÊóÿZŒ'ÙÓЦ&%Ø´ÑÜ~¼kFŒßˆ¯Ks"ÏȶNЦ՛@ Ûh-PD€R¸ê¾ ãúsܯÔÇm °™úópÜŠcŒïÞ§(Ý OKW±m"8i±ôi^¹øÖìß—â*x…[Y­åƒ¾À9^kŽä5A18E¡ý¿Í=Äp(ÔÑÎürêQ¤ØÏ„Aèãg;›Å+¾qs–$± ƒÔrÞÝ5µ]Š^è@å&±ÝIŘÕúÝpjQLJê§]q>jI-Gäs5éÍÆ"?Ë5Eóƒù±­ŽGú[5>êFÖn™·Š®@ê'm¨^ VTðî[ÍÆ“ï3öFdÚí*­ Ž=‹;BœèS %›Ü‡B:µ”Éû xÒqÿd£äqÇj‹{ >âq<'‡VýLØožœô¨ãO!±‡ówˆÓ{Ç‹‡XÄP.ý3…8l]/aà}"bE3«ŒZò\Þm Þó¨æ5"PD´Ö½%ªÉ‡¢±(PF/Œt•1ñ©<Øé´äÅÍ2÷Í86‡Ï•=Ûª§C–³™ø¡p1‘ˆ÷Ú‹÷JõÅÖRñ´:¬IžyLŸÁÆÑF.~qSlLhÏwmÚ@Wç×U v™ic’¢¹qCJT¢é@CòuÏV‰›FŽÐ…¶æÜÙ–îΊiËJ´}ÊÙ‰x{•%kO 3Bˬ Ù(ðEj:•õ*iŠ7­ê]QËð¡W /X,™a:öŠ.¹UstЕêOÕ ½ [Bi¨g ¦&JšNXÅo¡=?D°™¯üxˆ¸Lì^Q”7—%)Ái] h Òÿ€ü͉ÈÀ2ˆÝÜ •žÜ`àóíhÁ°!@&÷¤ëšI'Z‰ ƒ†"ƒý?íbÉhAÙk|G+¹ç0ÈM§pÕ…®AŽBe5%§[QÑM9 ã;ÂI¯eõ¦–¥†½Oá¤äŸ’ØW­Üæ¸N¸]ÎH(ð¨Îöçîð4ò7D¿öt¥•§ >ä=0ÉÊn ÿI|®4ïHðÂuÌ>hHÐlxŬ_pʆ²¬ðôaªX›9MÐèºmC*_ÉjJ¸}‰V˜zÇØûJGãcþèýón¿Žçf.8ùòXo0šÏ΢tmŽDpX—Ú@$6 &”T…^‘e^oi™ÕsǃŽ2œÛý/¶çÜ­¥@€ßô׊9°÷Bb bnòy$Ti‰CZl@îlêRòlˆ £_ZÖmõŒf3¨zR¬Ó­¯ä vpmß.ÌÉ*p+y(îd‰y%+ë•0‰“é.§Óp> I¼×Mq ¥%°³¾/…, v ëˆjÁzEƒÏ9C»ä{tøˆ^qrÝò¨ÃGábç`LíŒËc?ªºÔy\]©<åºJñœ¿…òlS°5º‹»¸ø #iD(:4p{žr…ï+‰Z/çÆ;ÉÂñ,;±ó騡HØžû‘]Ýý¡eTLŒÝwP¬ƒd@¦Úø8b´xýáÜœP_º”iPt‚ áGˆ^ÂQÛ t/PŽá•¿aCî÷6a&Sæö7bgýž‘­óçìÅ\eÉã¤CÅ5'–@‘4†xuòOïvœY¥ÊÐCM¹“j,«ˆha€ñ7*†Ê’YÌÝ'Ók8óhDÂ[(gìR®2à1à÷ÐRú’ƒIóÀº‚/Û´µæ—׎ÇÝ$ìžÇI¾Ù>0Kõ-=‚NH•ÂÂ~þDù[|ÎHO²1’“eQe@à1p-Zö%€òUhR¤‰€I›© ú”ÞW¾¡ V`Ð:÷¯,yc°Ç*&‰äðƒŽJy?Öé«2^X¤è–Øô¢0ŽÊޑ±›"¦\‹.c—¸a Ù±4¤Eòp‘ìW_èeWPÄš«5ïµ8©«°¨Ç™y3¾è‚½ã©¯¦Ð¼0™S“Àõ$ñ<ŽÃ/ø#«¯Ñ ¸3Ö¤ìJm;#r”¯Æ5iä•hJ9~ ™p1…‰F:b¹ªÒ¿ø"z:zõø_”ëc }ðC8òù½‡˜Ž}¸ÒÖ­„vS=’£¯Ñãòâ úv)éá¼+öë”y5v"„ï™àg³“\ ˜‰Ýi>È–øÑRêNôWFâ§#q%˜G±"¹“P>.êwõç£ú ²w¯’ªlôV˜¶h h9 Aá4Íuñl@K:Ò)hC£}^V«ÜN·ÎA y¹¦¶›Ì$ìUŽ«É?}Ø5•Q$œ É"áVÛANWp†yzáj6W±Mq#pò\ÝQ¡•×¾ápýƒ×½Í%aÎ>{5¡œÙV‚}°[`Ü2BΡ@__Á–ñHä´{]îÁ‚ÜñÄ\޳õ›[yM¼ac%"lªx)¼¯Û’ ©iš.ºÊ“Pâ *@”¹–øŽ§7kçn‚ºÝ®ú©ÆÞ®âàÁæ IÐé­êhÚ)Äâ }ŠÎÌÀ3HG‘ŒeÙ¥0¦gä{’zÁF©®mIWŒ™•'ºÀ©G…Ý€6ÝöQ PêÎ*³aë2û%ư|§íȺ•"(w±Üs°®ˆb–‰;xê½Ñ8d¦þȈ®.JàÁZ»R,sä“X÷iìd,¸û¸¼t9:ûªŠ HäešZੳۅgøJž3Ë6aÎè( XÌâ¸?ëÈOµè j[Ã\FùŽ˜£• Œ€<ü|q²ËÔU¬‘*Ðl97wqÞv£Kè i%yU–Ô@\á±ßy;%‹=c¶ü$†Î†®h"v2¬ÌT]ì`µO-&9•šög Ruí»]³pùøá5c U,¼Rfq^;ÖA¿<[ã?þPXbrU€œ¤¼§ËåyŠ"r1‘æì±(+°Ìæ™ëÚ߀!eá|¹¿ J7—ä4™À®½ÝË}£»Réò·Ž_b]Ý\Bõì´Ò¯†sø9û *r7Î77œ©pΤþœŠ*®€ƒÝðƒo!Z×Ù'‰":Àø÷³¾ÿp\Õ¨(*!¤¥öãÖ…ù¨n·%V·Ñð<é’6ØjÉ[‚ÊÞl#©ñí…êZý»,á|ýb¾~Ìþ®ÏVˆa|ýB¾~ë~®É?V¢à¾~’_?n¿WfŸ«EÀó FrïùÆËýÐV`¼ÿ*2ñkÔ9QÒ°¡=’Hô6uÔeD:k[#4ü³Å9žŒV–¹ñ´GKÐ@Üœu)z³h/¹©CýËÒÄ]H\Râ†þr{МRÎá»ÞwJ›RÞe#˹8TV0~¬Žs íŒ~+]lø³;ï-rTÓƒ_£Ëº0 +…žtQžöyîWû]3â$+7ÛcQ\ú»Ù^%à*þråêG6aÕ2Êš3öŽÜ°1ûï/œj-ïeÞÿ2‚ÿ5€±G 6ª›žQF 56~³¼ÀbpÖš–¬úž˜þ%[ä'MÀ7ÄB–¼Çìé©u$.¡N’9èïÁƒY àÄoU^ºõ? Œ‡CWäYɈ5Y¸=e×4¹ùãj¥'Ü\ÏHA~ƒf¦'zâ-6š–H¿Åݾ·£Þ.(%ÖQoò·[C3.Â=¢¡þ«µKãÔÇæ!|Ѧ]ÖÁìQÀù¶Îý¼¼\Ž üµ^V“ð¿Þ£9V-e>'˜°ÿ6 ‘þiÀ7ƒÄþÉj8¯pâ4RæCN¡¼O±-d ç3ã3k¡*ñq)£ðhx„—­ÛQðY+¬†žf½á±éÄÆp°ØxæiY¨R§68I(…øÀÿh@ûºZ!¾å«8¾^ì0 ‰ÕýØ AÙ°Ý#m ‚ÈtD. ²>iWÊ‹Ùâ‰H¦MÒ_‹ÿ%RíâÏ |€­)AÎœÂøÚ7;Q:Œ"¯ç0_>a8[cœGE†t©ì×ç¡à":/Ò‚ÓY*Ù—s»dtoŸ…íNg ÈÇ…\Ôl.{Z…¾‡hõ‘šräS M ²«4‚ÜB­ƒ{J¢9çšßø÷Éž>äì°t·µ –cþçSJ“ÕNþ™‘Eý¿7SçKŒ(o Ì}¡hŸÅôç"ÏD £ônöuq”˜ìRgEœÜtö=iv5ºQŠë‹í©Íà²Tß–ÇG–7ñ ·'PññSèãËJ[ì8±{øýßC+ÞM,ú\rñÈß9W[].w¼_bcñå®·¥ñou¾Rp·nÞtl’¨3 ‰%œ?b4 E˜)µ Å-t€ÉSÃÝ•d;NybÕ<®ñª:æ¾!_‚€…ª2ß|âó/ 3Ÿp A®§kƒSK%Gá6>]ò¢¢u’7šR*rÞS_xKkÁ€‰.}_íýÜÓTŽ«ƒçAOêóå2g‹ð&úó£m$D¬ ª³p³ô“+«Eùq@=š¤bÿuê;´ÿaÚÆ§Ÿ2DMw17–=c;s((`°|_¶ü«û×»ìͼY8»²‹Bݺ뺾Ýw ê‚Áe ²5&Z?ÍòšNØ´ulz6&‹Óºã $,UÇp™ñ+ ’|?oÁ"îß.\D"XÕb·/¹˜Á¾¯°Ã3!õJöýðb‰~Ð-ƒÇJeS4x?ϳYLG DnþˆokHF3ßbv'®eRJGdE‰Øy ?Þ—ÉSŠ£V™Mù…]+8' ³¨Ãg J±”ªº½†?‘Ñvh3ðNPéüÇáðk—zŠ'D‡®“£ ÁßdÔ0hV­×õób&Í߈2Ù<`=Ú^E°u€:!Í4¬[³‰ ¼x0ÚÊ>^;¸ÀÇ©„ÖÚ/ ÒãZB½»€oA¾KÝʼ÷¿\ˆ¨¤>üÿFQä܈ÈÈɺ•:K˜ ˜!=Ñ;7D6x RJ M×&¡åÿO "ÉóEy\ºÑs$8²ð7|FÏþ7Ï`:û1€›L æTå™fzñÄc ÆdåQšV©ݵ¾[IÅ©ÊÙ?+ëóWúoC¹vŸ´ƒ•’ÛÀ~ÝÔÄHØC¼%Ò_nDá• ÝQö:Gðw!Rmté6‚Qmø—PÂVp‘º£ JHnîóŒh¦¤KÊû±C^˜õÕfˆzñ‰†'ïýéí»ôÞ«þÐÐ&ýß„G»Ë#ÈÍŠf ïv† ’t©ƒöŸÁ:Û8Xùùb¦7tCbš•‚àq¢®qé6Á¡Dû™g‘fáÅb0œ&ÂÇ} ãÅðJ2Ê“VD†Cÿ ò¡][¶\P¾éµ5 Õky©ã:=áC#wxŸÑZùÍb*#dÍÍ…ñ Ì(%NUb™ãkÃK­CÕyWÁH ›©h·ï»ÝTBæ5F|bHXVZ·žT¡îÙÐ* Q&øåømvýÅI×ëbÑ=E €‰ùŸ±_fßVÁPÞe+;å £ècO šÌIŠ’†0f ).¼Ý“²Éø&f.Ñù ŒÈ|4Ê¿t¾wÐf&OýÙqHg“YŸGžÛ°þvú%ÛßÁy$ô³1°¸Ý„z‘߃!9*È‹’nG·ÁrÍGsiuè½à†KÐ Û š3"³~4ï2Q˜Ã@>7c2k£˜à£‰ëâÀh1 *Rj66ÒÇð ÏpèŽõ ‡ôL¹fšÒš›h»:&{2=Uþ›Ô—™=Ö`%c^n=qñ¯Œck\O¢â>”+RIÄ@êÆQ;o:ñ†¼T“ðUý‡¶¯—h·’°„W0ˆ|W;Ñ]Oc²J5¨™^èQæø—8&-:]2ÊhFË/é‚§¹Í.»‚Î4rœ (ÿlÂ[Õ“f»0z]˜€JwúF!+ŒjDÿSÊ+Ëßa®¨Èõ¡L[{« )_í0܆£\ ánÒØ3Ö.x9å+Xô¿|úšB³JX¯ IÝV çêÉyQ½Üö«ðG’± çpº\\÷&%Åü ³tú1„3øÎe[±O N&‰¤ÓKKOÀÕk+ƒ6\·w»Oùñ¨PëLU§kaò®­!„`gËÍÍ«‹=Hû”çΣ\Š ÝÚ¥a¬úg½ nW<ñ×&:¾‰U31çœ$‚x_SWvxÓAšÄa†3ðV=ÊZ Á;ï›oÂq£µaÆô•Uj,Ú*yîÿ€$ª¼Å‡¼ õòD‹_R„ŽO]ЏµwÖ©\2k–&ØXÿ-±ÈR^+ؾ—‰Kk`Ä-e¸ô#Ù;Û$ ;‹žþÄ3"óåu€‹ Š ºkoä$öŽ2 ç}<2Öç|2ãUFÄA“œrx¼‹E>ÒqlŠú{Q²Wº¨ýuõ1í´Ÿàïâwßn‹3³œ%Æ1pPűïëSc­%¾]Òuy[ÔðzJç7êYG¡9i‘ìõ|ªë ÂÀ@î»âÞ²ÎÍ Na ݦ!ºéDeZ!6äýòßK€q_ãG©² ÿîÃ*܇fbñRi–Vû%0Ç”måBm=ð­ŸF΢V:ñ+ab†³'¦Ž¼“9hRt6?Œ¥‹›Y_ËjbêèÞ„«E[ÍèГLDÏç[$FÚž>[­ÔܼðcvQ6'¾ÉãúYÁ”È}ý›MDe˜=¸ŠÀ;6Xo(—óbT‹e}:ó†Âs‘øÂÞ¹}ôïãŸý H²¬6W=¨ÇQ*Ýf“AèˆÜr³MþAÙä–é­wË„3„ NhÙ ²“AŒ‚鉛¾UɰzùãÒñß<8Íd‡ #WâNdrþiE® ý=,ù_Ãò&Äb°nÊl†¿æ|^Æñ˜°çC¥F]º?ô™}5áOTy÷^#íõ !džk¯{Dÿëo•4ôßÇ®NÄ`_‡MKØç4ñÿìtÚrbTU$ÈÜ©Ð'žÀ']ûÚQÈeHî ä§ ‰?sFTž,9á‡EçÙ¸DÂ1TÔ¹gaˆDVoÝHŸC{ sç |‰ ÓýÍU¥Ï6=]ß°!ØR…ªDÛ»,´@¥$»X³Êá¡_ÄY~ªÝ›MuaÝÚ"–«íAðÃëòÓi¨4;ÙIüp&ŒVi(7€1Câè8ÃÞZ›“¨„ã5 )ÒÉ”y7)o 3© º>°ÑêÙ }„”¸0(Yèéjü«kW0½ŸéÊd@¸v_B:¨Ë’ø•£àg±™‡\ÖNÅ9jÈî…©œ¦(¾<–ÎÜÈËïÂÚÖÝaQæ%A_OBßkži"ãÙ<( Ë;Nšút¥^›ðôrÇJg èi÷«gÑJ)Oaž½¹øpÞ§l0Û´@JGÆ©ZÓ{ÙÿEbß®cKš÷±¦™\ÿU !­»¢Ç–úžl:ËœÔÓÌîÊiÒ;`º¹Ž“šÎ‡øµMº<ðAÐcäL›³G{µ¨Dޝ‘»J8ähPy‡v=™#í47ËXƒ `õ0 "ÈEƒ£¬NÊb÷Ù'öW,[ó i²AïþÖáx¾„-Iíp¯7CˆìŽQÀ¹Šxiì!K=}ròù'îo°60êh}Ó’”†nëZp †ÎŸ vàÊïѯ¸5ÃpÞ÷ŽZK· ‘9ÐÓ>Fæ×¥½$~ä£@òö2ñÛ²SZ±Í¾Èì:•hpa¬¼‹åÕö[nU|0+ðÒñ8oT7DfDZ?M;äáƒé: % .¾RˆEh{cÂô5Ý)MN¢ÌÛÛ÷HQ”HoŸðNתRÆ:)~À§l(ú ²&˜k3ÄŠœ77û’й¼_ ¥—U™ú£ßqñ¡9¿C:­ †ƒ^¢DÄÙ‹¸êßrEã[jü@´®ênôÖÖ”Iƒãf<ÐïKi(Ö!PäNa…ÚKPnªqC$±ž:ðÝÞqÁDû3Ýõ£!›¸—ŠZ¿¨;yVÍ—ù!y„K/{€J¥@ÆÝRÝ*ëf‰+¯;â´H›?)h˜¾L}Zð]žèÓ6¢wd E‹Ã¸ÒQ¨å1˜í®”иxÚ:cMVF<î4œoÌPÇ ÃçȈè#Û¢ìjfàfˆ¼Ëõ9ÝS}¸ï²·:*¤`“ Žâaåô,c™¦{ƒõ§|Ykâ$í?’ a #{]DZtT°1ˆƒÕŒ#QHߢU¨€±dJPÏÌ¥T˜"P7ÙÄšq—ekå¥Ô‚´ÉEñ±˜I™+Ý-Órr9c!Yûcãƒà}ešþTsy³ÏšnK˼­É_òÑïzÍHÏÅ|Éåë¥ÓªÃš6†Ûò®V nè›úU9s–Päl¨÷UNNÏ'à´I x¥¤Ü{—`iXî³õß¹—Ü#»”À;1 YÂÙî+!Ó¥›Z\f¹ —Ôsh8d*))ÿ_Œ8ÅÖVŒÌ‘Žû_z)©Ì1yõ•Y&LA󲾈ø^äb>ÿ@0x`[Æø[,}*Lîf™Ÿ˜ä²™}:ò9Á­±I¿®D-çE÷_ÂÈ”Sâ4ä™{,‚‰–¾·é€-MÇmBé¸H`±pdû…4Ép¤ó‘Ù@*sI†Ëæ¬5!U9E.„UB Ä »êò#îÆ°Kó«vo)‚Q˜EÜU'ììƒzkf«˜„‘šWñ¹è7‚Y­M4Ãëm;¬XË3•y ’DðH•Â\/³=gR[©,ôÌžä±Üô=y—ã 3Ø8:èxþËéEL+™³ŒÜd yl(À÷¡j•œ~Ì£¿ÛަJ yÙíæÇãÍá'W±T¿j.:k8Ó ‰€ÉÀ‡Fƒû¤ÔNƒáÒg{!Ì(ƒïà’Û/’¤º9N¼o͘{Àf¨˜!°m¬l†„»ªÏ'9B$Šñeh@LžÚ~hßѨ(eäT7¡§1´o7w K'~}.d¯O:[%z~&|9É”RMK©V‡„ç êñÑ7|Ò¹©%Ê¢»R] Š‚a:Çy%EÐæÄ¥9¾¬ }ŽH¡ ÓzÒÕn˜…0{MüȈE¡#CEPðY-a±dmÜ©t¼IþzV%QÕòÝúí„m) €1R‹YºQæ 4«;2ÑóÌtc«®k’Ü–ñhØPåf©Ç44FñÖFo,!3ƒóB†Î[Š–³ÁŠ ¬ õ“•¾êÁb?2ÇÚîaCp—5ývV‚æm&;ðî#vø•GÀ&Ù r€6eÀº ,þÐ87Ȉ%ì„" sËĹ'3+›z GºÝØ-JsW0V¦>Xθ®ŸÁ“X”C{÷ÄnatŒ6éC·ñ z9´`Ç­]û5ÊZ˜é67II÷¢Ô ØÌ ¼ÆÕ˜]§©é!Y:9îŠhëŒä‰$–(ä8H|ÙqB\ Ĺß-`ÑüÆÏ|¢a•ä»YYG0¡Ó©:ÖA¸5K™ë’„,Òq,¸¸¿óå©üá ípºZ¶Ã;f˜tù(múÅ«»I¶ù0î€ÖÕ Jë „Å,·b,¢žIšãDš3ìϼzÔR–uv8º™#ÂRšôl)öã:]BÈ}Ö6ã.eÛ9íþ+ÆÜ0Eº¿{\tuÏ`(uMUyºMÙ¦‹< W•пxßåm¾ÅÆOÜC!SS®†áÛ°u=ÃòÓ! ôƒ’wd+•µ…:œ,`¥²V›.„­ Ad^³•£a]Afá`Ïû‹ÕÕãz%pµ\–=Q ɹ]ÓÍýít&Àî–BÏs@¼ÓHÿ!ƒ,íó¿ÑŽAåËyô]õQEô®—õqEJ9àØ ¯øÜèø|–µ;n ;:,­ëªƒÉl$vÂbÜ6¹Ì#l1n‚Oi§¿:]äG"ð,ÈcÙ<—ì—ruÒÞ$@)…â»i#ÒhâÍ—¨tda÷ŸÛðcS”Ö/†BT’%&Ž·eèçš¾›0„ Â!ºÅ”¹qFÿW-ØÆ×G}âUugÀg‘‘c*y÷TÆàŸôâÑ ðÒR°ï³tô qv¬Éój®ØðÊ•ª<ß·æNÂЦÕÑLGŞ̨.P–K’‡]ëAYåhá…—6ÓÕšd8›$.¬SAÔ³W‚‡u9îÎÉ¢$¯ £ - äÞ¬AfÓ«†]NV߈£oTÈD_õG pÙ·”°á^R‘’NÐ ¥s¾¦Ëö»ø/vØE\´¯—×b¬Û6øÑÚ\ËW L1«p4òÍ#Ôü´HÔûy‚^üp%ÎßWFœX‚¾¦-Ð㛄6*=ðÛ@Ý }¤ I5#ô±ø¯ lÁJÜ£2l1²óïIZÏ|uŽóì<ÀÉ0:P_Âe†t"…c¢0o‘þéy¾PÕÇ´õÝsúøçgX6bVø LÕZ‘LŠþæÏ(̳y¯´‰"zE[2Û•0~ÓTñÞÂþp•ÁžŽl1|;ŸŸœ¨gß6ôÚþë`îéãÙø’3]ü…ô,üPÁq¶·¯µÁÊ£élií´Äfa}uÓBEÿfùŠ@O‹ßôâ•‹aÿf7…–C!ô_•§ÄDER§N)þvòlïmìcé ¯tíyYï%Ò¾1­Ø<Å£j >â£,\›´ã¸J®‹É“McÍQ§ŠÞUc…©'~EU£°HðÔ£Aɾ0£öÀH«D6ßI«:Þã“ÐÙ†Îå ™DŽ~.&ú>þÇh]q]âºYKNëÞWî ÿ]Coˆ7Õt€ö«.LÙ?.ˆÄL _ÑÁ p¢ÌêOS=‹{jIºž¢7,_}s!l¥¿– ;•x®×#ݺh‹5måÒ•kâlÑrÝ Zp@h@ \5X'ÚJSÌ'ç\}-Z¿=اŸž ¿Ñ=^&ÑD¤íFü2²Ÿ”ß[«òRòþ.Ã¥XÝ2?ýíèΑaÖã<ÒÉ’+…ÞWyä¢YÿR_Eµ©©m‚HgNelÈÈ`”¥û›ø­ÞbG§›Ÿ}`;Ã5Ò›[èăd ¤+ÔóÛ7¤4–þõ‡ŸÜ(+¸ÝÅÉÝ$wBoàô)÷šù|é)O]¬”ìuãǽëÞ[ÔFð¸I:»CîWJLÑwžúC½¯®³[÷˜Ú¯xk¢jÉU…ͪæÀ LžìkQÈû!ÞÃ`˜Ki5w5¸ý­þ¿¾‰cjj ý½Y›m뉽Ô¡÷\2¥-{òjêµ,áÃ)'êoÉ•æ,eß¾g&œt?îX¢ ž%µ8Ë‹4mGÓP¦låÍg«ûMy-Ú+ªH°ëw³—’,Û,J ÀÌKäa^ °Ñ­Õ ]Anõð‰~é1ò„%³5ÎÑTÉC©O^FU–2v¢X6œ Ö‘W{¥YL– êªkß &¬.oõøïúH'ú+tÄy ª?9`ºt"°Ù˜²Ê*âÂ;YÒ36½­Mäqßþ;ä|6Ì×qü*±ãÙc  -åÛüü‘$Ô¤Q_ðªF»Îžü Pøyn TÄZ[¯áý´9bÞn0•dvwjn‚ëì3iþ¡ƒƒ00ü2¥Ö*ÕÁË%’óáuq÷ó0[Wiû¶‘Z^ÐtÚHÓ˜\ÉݧÉPð=‹—å(p‰78û»®•UßéI„ –¨ü šµSÃð”Ø”¹·õ|ηg’]LS7RnÕ¦LN‘W¶Çë÷ŽvVèö¤É¼-Ù¥qïüu' |«¦SÝ]FgÀëèüa1-DÙ*µ©¢“ß9Ë]À×gŽEƒ³p8®Óácz™²D]7[nÿ{}M{òÊ’Ü1ÃÖ1„ØøWìjgm°ì/h nÉuÐt~,ËÒARº†åbp^¼xÔl¾ M$Ù›C'%ÅYE\…5öxYŠif×Ê-÷*"Èl gÃÛ@‹èíl¬0&^[ä-g®G^ž1UP›/¼Õ¹Úøåœ”Ò>˜/K(×!ê“­7œé­’ü•YÜpšGNKIFš¤@ÕAº˜pòée¦n“R™Æh /K®ƒBzÚWiÇž!…œÀ0^ì›þ<¥õ(ˆ¬ý(Eï5ú<>?okIËc>">ÚN‡úàGIñïïÆÁ[<øYS³ÑI@%Ãð7!¿›•bN˜›áølËoõ­ÓRŒ'7eÏǽ¾¢Ö ÂÈtî´±( ø?(3¦²"„¢&Š9Ãö(s°ahz¥¡ v_‘1w/‹µ:JEßV÷È[xð¾{^Ië(cÈæÙVv Î>íx.ÉZXØÊ"ÇÚ\s!4äCÎØíoU}¯GÖeïˆQ× +³üžmyYß+ô·ç§îÇÒ Ä²³@›\¹‹x@Ø©•Ò." œS®AŠ%ïi‰¾Äš‡±ÍÙU‹Š dgÍ„FwŽ›KÀð‚Ú:TWÌó?Žlh* ¯¹¼Ðäª`e%—útèí§ù$c†¾<ùá_Gä‘i2ôÜd*ØŒ«’MŒ@ïû„òL4è­¬my =u£Ì扮)wò "îᥘPê÷áäDȺÿ+CÿT½·ŽDÙ)=~ 5-œ›¯jÕÓæI0ç„"ŸÏÊ@ñÕ©_ … ì'; è®{„©îA+{&orŠŸÔöÕƒ yÇ(Ìûñc?Ž.åžCA>¼é9Ï–“ü«YoÒYiêõÃ\ÓÔZ<ËuHà‡íÁ$ rK‡óCö3*ÄO`X¦*¸Æ}DÒr–g°ÝíCMòcº8ÆÀ;*3Éã{`„Å =cY‹øôhÓkÞ˜ª–­az/ѼFéñ05N‹ÃœmÒ‘±ýµ=¥jƧzœœ[|=O¦Ÿ§V8í̾²‡W%16´,‚<ÚMÎ/èãVfÓîÚî"3Wrƒ{5õðw7nBµn³,TVºˆm§1ñ-“€áÛñ_Ó "~úCQ©êrZÔðûPsS¾K™{t”׉"¬¤~ïYBâGÛ½]ÔzžÆ3QwÀ­}飖üÆùYŠÃE'|†#"a®ÐË'º dk8ìÉ}ú†Æ`(¬t³³yi}íÏ2ÚÉT†{ÒÈ=?ÉL¤x`w¥»Iy y!¹L!XÍÃÚ65£y+`t¼e•Œ Žý`û¼tœ-TÀ¹Œ¡­˜Ã§¼¡ŽJjÎtö•{' ªyåd¾í kíf0ŸZ]tû¦vkÐ+"p%ÿ^¢ÒråÝ.׋n¡ÃÌ╺…Ö¸¾¾ü~µhñVj,Né»a}9Þôˆ•¿)2üÛYÉõA("óL-¸žÎãs8&Hr2rC‘>” ¸”H“³s$c}»CŸæÚî¼¼¾îjÉ?*)yüh¸ÒË?µ`T˜çŠå°6¼-WÉsy ¿‡±®Û„7ü¯'2É÷an%:åUsBUʘܲ*Ê\ߨ›øüÿf‚Éúè¥èu ¹ü)}6®ç­1ï Iz­éæ^ßu&&¿†ÓÌä>ЙJ~·²Ç:ׂ\…:Õk¢¤/¥¶žÛLÇíOjé¿7;±®\¹g8£Àþc<¢ü‘žâ±‚øpˆ\:dCùƒ|’q Ö™ü'iRÛøXã›ei¯(ÚÙ“>§m“±OFLeøl˜én7 ³ù&Îû´2ìÿAk㓊%ežÁ¨` msASFE) Õ«ïKÝî·zŒ‰´«Ky¥ÂJ_>@£Û{!LSXª3¡ ¸Ùô“Xõo4[ ýÿÙic09ün jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ ûÿ“ÏÃB€#ìÈÐûù©@üçyóù?Èäê©å0wçä7 Vj#8cÎ%dÅÄ-LºÐNÞó7ëDõ[ém$+8q-)öƒgduÿ.j„Qˆh†À¿³]Š zj“$œ`t€—ø”$2®ªˆk-ÙhõpOø&B]pæÊ~G•3ú7˜Õ´ã7á%õ]$ýœ†I+3€&Å„aÂå™Ù:Õfýíy8éÙ0âŽ?"åa–x?ÆNóD%ãÚV%¸WÚñBª/"‘8ôé¢bíMw*åèƒÆ£2ÞRLËQ­Êכּ§ª=òô¡óö¹tVŒ$(­‰GUÿ z‡Ù+~µ·yËD©«h#Ù³Ëÿ!²ë—ÏÁàPzË ƒúÚá>‚}ž)nC•n¦ATáÕØñy’­™_3†áß#¼j™bVO¹Ÿr*šbLû¬ < Ý"/B¥™jQè:—¿épŠër–ñј³ðÖ´Ý6È×uXVàõÚµR¬ÆfML"c[L;÷ø_‡w“s2ìÇÚì{z7/ÀÄ(2r¼–Yè¯u³Ãyv0>ÒËÄÎU ßŠX7õãû*“Ä3ìlæ§/3„a2´-°'T¼¤ïeYN`7Ý­,!zN•¶Í±–MqÅÔE;6 ^ŒnÂSdn­ÍõÌ_±µ-ÒàñJÏÂìPI$Ά æ4ݲÈjã‘kQ9¥ÊÚ=UV’ð93|qEI7ëpÁ¤0™R(L*DQ ,`6Žk!È”üÄx̉]¸ÈB-©Ä×gËœZÁmtŠdØBÃçâH©…É4c01AÁNDÂÍ| yð=#öÕ“izŒÒãáµ¶šŸ ~öß·¸|NÊdVJÕJ±=‰äV-Þ`»ïc~AJÕJ´õìâxoª×}jNU VšWó›4Ütª•¿Ï‘ßg(Ô:¼˜ºüvb@­{ƒ~g¿{›1Äó<¯`É’{éÇáhÇácÃð²À3a¶ZžæáÍ9{è¹è‘ª¨Óm4?®ið Œ Æ¥Löü:?^¥{öBÉ©â§7ûó/?¥h–Á Ú`R¶š8ØUœß“hÿÅBy6rž¸‰A“(T”N„-Õ^ú›Q6¯y;pfôm~÷¥Ø:6°ôü¤@ °tÅCÓ>ýVg^YßN~Yäù/4[°Åð-º}‹-òTK„z1ŠË««¡kŸP¨Å ìÞE•Ëê-„Ñ}QXE ðŒ,éßk¿õ <|òãûŒ]d¡ç8¦G›½Ã˜ L!=al¸R[TQXXÇ3T¡¢À©¡„UXà‡-S*xåÞÉ5Wj½ÅˆâÖìË⡹Œü-ÞÚ5ƒÒ1Y˺ÚF‚оLTŸ„1iöËSâåæè"}£ ) œý§=g@1áäÚܲgãÍ.ø•GпžgËD 2_iAߪ £uÚ‡h¥Àfõëê)½°îMNYEzÞU‚Uu‘ìfu$v‘´6;fÆT{ò“ c«’j¯°(Ÿ73Ÿ›h{77Áÿd›&h4îÒàEô_C·^9`“Éû Šû °>™Ð•§×鮲ß=c;b5˹{rÇozÇ8þÊ1%JûQkèÝw$_s¶IK âÍ•ß_‘Ci,C‰€Ãíq‡ÚùÁð…—‚t93¿šê„ÛÂŒxCÝ5CY…ï8ËÚF÷L|Ý±Š‹W &C¹Èt{·W¿Œæ2ï¤Àq)×lg¸=;Èlˆ«çƒm¨Úøp(ødaæiÞxÒÂŽ½ƒa z>À0àÅ\®Ê’g6–B…˜íh—þ²DÚ¼ak×/¾$z6| jÀã©?ñ9¾ á–ˆ§‘7Â?NܸûGµâ¹F롊4ú±"\– L }I‡ËdŸv×|ºd›RZ|¿(°bˆ½´ÐÕ~N˜g—ï– a3ê";D~s'qP)úc©'õèE‘£:c(y°0déo äƒã£ßoktÄ&ÂÀf‹fd5HÌZ6^Лñ)ƒäŒïEÂ'Æ»ºyWS¿)σ™T`Y†¡zÓ¾]®ì.{ÿt¨Ân~$‡³„†c_Æ;LSPÁ  ãµ²vÉB¨ª,¯€7ÃínÁÚƒÀ  ÁºÕÂÞªD¦ ¤GRã§PUi @‚!‚Òͤ…CÔÛ)l}ùß–’©')=½‹ÒnŸ«7;÷øò‚3z¨¾,íh²@>éó‹ßnƒ¶èšêÀx±‚9áŸñ~°ˆ­Üê©|¾ßø•ˆQ™•WÓéI%aG÷‹LÙk$Ñ š,×ê­ÙUïeH~I˜Xok *Ên¸½í©§Q¶\6$ÛR9õä#yÝ£I±`¨,ÂU#‹s»QÉ}³ræÂ(û8fo¸ˆgݾüÞº)èV-œZÂNoM' DÍ »ÒùV„ ÁQ¶æB`‡‰¤ÒB:½_SK퀀Y™D©P=ºoÓD…^C– F]suÂ#±›¨oé/i”ŠJÁÊ÷B†…7àoÆ·OÇ›D+siÐÇ>Ûl­QÚ½ë‰ÿmX™Ÿ¿É*w¯Ø.ðpPLœsmw=ÏΕŸ7˜‹¶Aáo@£aSì°L_3$ÚÒ@ ýž¹Š1Y< ÷ð…EŒI¬%_`)dø¬m0ƒÁ·Ò h7Þö†HÄ"Œ9Œ f¯¹ƒ"B„–§së‘[Z×Å´Ï RU…›'ì«w±F¡ŠÓRÞ¼šºDiÒéÉÿC‡eG‡czt#©ðùÛeC&)†`†)2ÇZÉîl´¡Fªž=kîây͇j>—IP¾ÚM´”tSŠç§ïÍø +¿¯àÎX3׉cÉ+iýABÙoÿ ¨TóDÂ:aÀŸÁþiþ¾ZÒ´öfÈ$âM’¡/ô™ãÁYûnµ—(•—Ž,¢X9ˆõ§ïiÑ„.›g® ¦3¦·A‰“#ürF5H=Ëó«L¯bRcK¨Dd:ÌÁK74yO*¦CmX,e02¸è£ysÿrvˆÃŠfH£=\êžÍ9B_‰6®g¢•ò¦j_xd­ùñJzžzÿp[BU(Y‰©äþI°{<5tôHA¬*òSBYƒ +om~<åz>TßU£,/Qâm™&¥n†lÍÁSÏ/2AáØTØØƒÝæ@@d³NѶLtƒÄÏϧøü:6‡áÒ(ÛÆd‚ˆ¥J’ÝSdÙøÞõƒööû’QÂ|ÞKZ&X³–¿ÕfB·knë»›#oyŽw(²A¢¹+¿$û÷] „¶™Ñ‹˜zcˆ´õh=­i6 ÇëqpGñªFhƒt–!ÅOhDK®pÓLr/ØLRú¼©lÓL¶B˜š÷ömHm„A¾ËôÚÚ5ALÀNÃ63¯·ÐAiñ/T‘wtý¦l–eõטKÖ%€4 :ê þ%ùcþ)<§q“ÚFzEõÂa°=±L ßg",Cø×Û8²ª¹Ô‚íª¹ÏüRê ¶Œ¿¡%e’%æî‹’:–g’½8Ì‚~®-ªoõ#ŒX¼“+ðŠ“äÞ „äòL¤"Ò@²¶æ77roµÓÈDÁòªtª™LÌÑ'î”–*fˆ[®£jÌ#·z`. ]Àº•vŒ†‹ p o} ¨áÓ¦/¡:­½T˜øEmúÎô239èL53Ð4Ø( ?%jVv cÛÕ»qÿ=F™¶­ðYHòŠƒ|ÌßÃ?½1éà_ Õu³¸Ð}];ã+ÊÊ÷þ)&ùeZsÅvÍFÇOXc¤ÒÞýd¯­$w´öF4 ›/‚µÓ ·(…߇¤¾œ­ç7‡‰ø7Kª'ÿ0stQù“ð—{NŸF¦µK ˜t±·-/[¯ÁE ‰².Hb#)yºPêŽÏ!f‘†—póÊMR¸èF1îK˜ÙKrkçãÏ»÷lö‚€¿,šwž™'"6«=`eL~ã±”N«KZQLþš~RU°¤Šš ©1ú‚Û '^LËÎ#£å9Î+¿gËœð¾ßÓ¸Ù‡ÈâqÐôœ 9ÑÏÊþöÚšç5JÔÂüƒ.3SU~jø,ƒj/aE‘ØÈsrŽÎé}P?üåw±õâ6±Ýƒk¸÷ü’ [Kî¸ nOÿo3ñÛ¾x$Å6¸˜’‚¦ ©ùܶ1ëiìu÷¤žán—®_×Xnz]Ý£L‘?Û=!+ˆdùÊa ñÙG½µåûyØŸg7ÖÒg¥àîl˜Î(Ö¨ÓÏü@ Ö!›° jõ¶QÝæ¡²Ï ¯]&‹Bl*–²¡òJËûœZ×a¥O``´²WZÞòK-±²(—.¬‹S'6}K¶ÑúÑÞlöYÝíQJúxUT¦™VªhZ…ɹˆðJâ¯ðÅ<~UePÄ·dó¯îˆÕ_ðbÆzØ5D×yŒÌ©W§;7ú6-]bÍ ö’ô%.у²ÄºM.Ê>á!}dÄL¤æÚÙÙÁ½eœ‚N“¶6}4à4˜|È«â q;p¾›¾“8ðc™;î„•°ù‚ÿDü‘ƒÇ[þÜÕë⹆I<²êÂÚ!‹Œª:ÑáwDDÎå]Å]õSåd8¬ì—èežè0INIBAC~BzïCž½ýjˆ²àuõs˜P‡ûÚN7 ±6™øº¦h¬¢AÓ­f”aºü}ÐCrÏß`€ d¯+òñHÃÎë¦Ãu'Áþ/*F!¿˜Ñûß {úf„Lã!iÔ;å×ßãHêÊÑO¥ó+ÃÎVÙ «=÷|ìãÅ¡ÄduÕ)Tààýy5Ó;q»W¬# =Ej?Û`ay%a=¦ç× ûòÚhwæ_\zmù¦pH jaË.ëÃhÂÓ ” ‘£ˆiÎQ %°N [g^gB½šEº e01cïO§gò7óa‚¨m#.ïwsìwúuË Pÿ ƒlY(ÀÛ#»¡¨q?9 'ÕÌÝ%Ћ°L|®lÕ/Ú) ݈“T8û{H–ÂÌ(µ mML¯5jÿ+33u&áö|¿?ã_YÒ©ùñׇw2n3tÛ>fznÊ(ÑxÅ¢œË>œë…Ž2ócLa’Œ)ÛÐä·MñsMc=”ŒE MpÕ½åb¸Ü®.bœãw5ò¸¡Mí¢rFhÑ>e[“xu7J¦dšåîF:‹¹˜/$Ü×±ëäٸ‰h¿Ô¡óè Êšã½¥úüO©§¥'v®GS±7R¤î„hIÝø™Õ¶½8ßO7î¹­MR0‘4ÏÍRdíàu'1¸²g®Î;„m4“Þ¦_1\?Ë“S-¹ÓZb:R`]2z K;Œl-@@„¨ä(ÂÕ¤‡Lüt[%ÊÎègÌèûìK$˜7¬?7/±oϺ“Çá¦Ðûu†£×¸Ñ¹ª‡™j!zRËÍp£ñ¢¨ ƒ Nà(Ìú­-L|Œvx/g†ÌÛ`Ì®[¤_¥Á飼ÁÀ×2Ò¹>Ûœk;œñ’€]L|îðîòÆ6~â3a›Êk«!L‹ôšÌî§å@ô{Ê29#Hâ£e ŽeZ¯g¶§T‚óHz ›ÀÑ ”,#\Õq‘#«k""I€r¹ã:âöÉ΄R:RecH¡ŸÌŠž*¡§Yè¨ÌEɈšÑ¢9¸ø>¾¡Ë&sÔÔû⬮û…eØ1 j…P¥ð÷Œpƒác(ÇoNú])Ú$A20œ³BAñœà½¤ñ•¥E7mLSÅ÷7$§˜ý%ãÞÕCéÞÇd L¶|b”n˜2™Tì2ŠDWŒ0{Ès‚œ„¦¢j;ïjèärV¯FeŸ™”,e8VŽaÖ°÷óBŽ«ß}8º!¯_7…q}Hˆ6Ò¸ ø@À SIK¹•¿-Òêš êÅÁ²¥¸:$”I‡¡‘ؘ@‘uKW®ìÉ¢Æéù 8¡¡L¬íU¡,sÇ($—N­½bøÃ:] ú¿™~K†‘>\rõxËu| (¼¡Í"Çâb•^prlüEVDÙ·]ðcÀlÇ`ZÑá@Ûh«‘ ±_ä —7Ùú SÂwAâBY’Ûñ~/¥ÕÎK_çPþÈí¼oQôÍ?E¯qìTEe/Èm¦4ú1a§vU$R1ÞÖ)ÿ;’“øo#gÀp#w·Q¹‰8¶XëìP¢(n¡Õ(P‚PR<Â~/ª‡ G•TÀºï(Œêÿ .èõDƒvQêï^ôŽ£eäv]Åú•aðm–.2@©B„úŽK´z\*FëìòYÌ=¸“_·á[‘¯Í¿,¢õDÿ]ð¢|äDb˜ã:ßÙÁ؇ÌSέjùnI©Ü”¿ùË™Eo’FS,³jÄ>Ây¹ÈKþè_°%þÑ¥ û¹ç¥Æ‡Ìû“Z“™ÇŽ[…ôœ·I`«ø²%’$ØÇŠÈ-éKLp‹‚ÙÃå€.ÜÈ’IºûÁ¢z@»ôòUáq²3Od¿£R ÅOWSe—ǰX7ëK—ÛKÌó<û7¿¦±Y{”qSàݽÖ1ï“•NT7o!taÍkˆ÷¼…isG‚2LEƒ¹¦lHoOfO:áyÖ¦h-•äéCL·ºÞ3xý“þÈÃíÒ8}ºWÛ¦ÍÊì<U]šé_Ý´b¶åéhÔ{ùzÉ×¢±aõ’DÀ¿£Àå½Ý½òKlW»‡Ã›Ö2L§@÷ºðò¥Iµ7¸xL¡x+Ël¾Æ¯Ü¨'ûHSâs*ÓÑì<Ó!f¦£Ÿœ Ï)¾øà+²Ù(£€ À¦Ò¦ƒï«ÓMYÆ+N FƒË‰à8F ¹Ñ´F¾¤¸}ÑCàüJR¿fˆ #­ð‰é€/µ‚ýôMaƒòó·qrÁûÎvyrŽ:zµ1Fûè¤ðZ (ëÛ™µ,>@™ëÔ[ŒAªù­.½ÀËÇgJ´Èó(xò^Æ<„ÜÈ%4“ó•DŸ9¨¥d•,6¿Õ8ýâ)þ–HRQ‚c„{©C1%IÈ¿µÜ{þ—gàƒƒÂòß2=À¹ éç†5TxNÈä”ÓJäI¢‰è/ÿ a ‚©a<:¸¢¶kÊæ×ç\W*ÃÂô²W øy¯*€ó£›u’éi¶´’¾ šÍ‚v=Óàçq¾(‘†¬½ô“RÐF”¶V{í#–V „§±-v2’YÇÝÔW¥RŠ.·p5½&¦6têo X ÈÉcJd1Àý=¥·“0Ézz¤G”ŒÞNHß§*ÊU½§ ü @ñÕ.Ëô¹/g<¼UêZ¢Z¡úùÛ³½“’´(Ä3FõÇv ù2ÛʸÞé‚X#Õ,º£­§>Z`°|*@5Gnñ®àR/¢ù^Hú"]rk.ÂltñŠW4…eůEÓ¯Õʃ„äÀþEͰm.–/•xq‘æbBXA âX¿ø8] åfºn´Þß¹K±È½ÎÙºHÍ)·=¼áU< ýn£]f1`x[48s»iºAØ`߀SÉêy†¢Ø).l`+ˆ<€Ñ·;:>Ïn‚~u!ùÇ2r&à3“þÇÔ×:Ãó¤\ÙŸÜD̆„l¿­yùžì´<÷îêÜfÞ¡ê(®{hœŽ?ì÷ø¯µ‡?ßM}+^ꥶªÿd)¥!Á÷õ¼Ú^RÕ"›±hx欂ºzn|¼¾¶`ÿx‚†•޼MÚ¸Â-ýJ6™w@»17v—±´y">Õ‹³Ïjرä‰FŸ>¡˜ Î*ôV{tÙýˆøÇÀÖÅ4ÂP÷[,6(³}0¨>ÿ"u=Ç᪑øk~z¾M‡âIâ‰D$QÉ^ŠázúÚÙëa}–€¾/#齬ùÚEXÀ¬x–æn&¤(‰ï6#ÄþrÌ«=®;á·vÀâF¥ØŽO–•‰ª‚€Z?޵IAƒ™DW¢C3ôàÂÀEé­rhÑaÅÅ\(}E¦IÎdŒÉ§‘˜‹³NlÀ@U7öüdú\¦æA!ÿX7×"h>• Œ~UŠC%Õåe‡øþ•FT‰³vò¨Ö_<#$h86Bå Ù]ªÖË+Å VjµYPg¿sÞ>¸¦~(…¢ÞìS; ˆ¿´<ð¥?ª^_–Iô{Ф¢6ø{ÐáH4ðÐSqMaÆ@ÂJÒxÆ x($6<"Ñ×s¬ûö@4ö0<ƒ#?¾t fyôn˜Ò¸ €ŒXöô­Iæëþ»&Ò.Hñ„T&±Î\æk:èìÔ™¢ÈZòO`˜Ojggˆ>ZÖ›?½E A¢Mô¾§‡"Pg 'ö¯®Wá™ÜúÈ…Ü•è3 3,§ÀÂoíQ÷ASÒnµÛÁ­C˜oWbOÑÿRа¸%ôš¾F@#ù,Éó]6LúÑË[^f >§Œ@Í^¯G-5ìÁɈ}=kŒhýµþDÏÞdª_W[R$ãqÂÏ‘©Çí/¦¯F ®Ûóga½d p`lG <Á&뼉q6 --aÔžóHsKZ»  ãÉÍQz„êm+šøM@^aà{kö*ð—~ŠL¦ªöÉô«õ•@tëöì¡K ™Ç›¯ºEZj4ÄËžDjÁ «e½D‚ Ëpô™”çƒ)±£ûe¢"µG¹f—‰0ö&”%ÛtØÛKÿWzÈ’ZY‡æ@:âb†v v¨ÙÚŒ,X¼b' ©y‡'“Õóë=ÀÆaˆË½Àiá·¨ÒƒÝù—í¹v; \2ýPÏšðœÈÇʰ$ò0V%úQ³«Ìm´{2#ÔÜù êH|Òµ©nCÖ%碨psˆ±zf¥¨{íK(Çè‹x0í´jkéo1BÄ·~ïÁ69Û$Ë´Üñu5ŽˆùÃuëÊØ”Aš<ù¼dÖ2KPÚÏíci¦"šç÷±B+9Í·‘£5Œ§Žÿ71zÉ•Œ&¯±Ë§fK×9jN„Û¬9÷3îϹ·ðYÞŰ#Éž¨eG#°a§ƒËγHNã,ÏA£pöôåöN²%W&Ò³bÎDÇGØ}6T°ù¶êÔ÷:‡_^!§¹Û¬]s?íáE­”Œÿrí·O2ØU¾Û :¿x¼õ.A×á"rXâõÍIÛ¸ ±D†ôU³uÐÍÙÓ~Ç L©ÆU«o¤ê³ú·c$XÖ³¹~êÓζ.ÓÊyš½Ñ†ØqxÊ‚ª!z.R¯hxÞ—Œ²§Ff¼Ié‹k{k¿PJxí$b–ºÅYòF³h& »ñ’še^‰%Vßn Žöîª@,èŸ,kÆ%pUtée•Tsµ8Æ÷!Öt ´Ülº›Åëd½,ð¸8C‰HsŒÅlØê A*ƃ‹ ÖvôŠ£=¸75\(”ä; ¬W†¬“óàG>?HàŠÄ%FHtÉÚ›±›/£–}šRÛA^6ñv3©%F¹M™ˆãÎz£·/‚˜¤Ç *Å„€¤I3Gø{ò¦ëB8WDfx×@EöêT²z<•.-5¹ «–‡¼)È<^=bqô‚ßÖ7ŠLzNEã.*ÿd„ô Q»“[nÚl–wv?ö¾ñ=W¿-¦«ÊqƒuIØÔÓ@gƒ]ቺ4ýá.‘t˜l:õÑ^œd";-s¹ÆBAh}Ä#?´§’#9SâðÐ"¸ž®#SÒ©~ƒÐ@*à¶ûÃ_è9‘ÖÐ/ºOÛOO.êLiHëõŒY˜‹ùcvÝÉAF-ýØEÙÓóê_˜¦Ó½¥JÈ×çCx³†Æš~ïRºZï`šPE Ä€© …€ÒÞ<ÌÒWæ+d”oº3|ô-û#ÒÏÚäz ßMŽ®ør RÁžø’ç¥ÕÇ š#hÖ¼B®ðÆ×ÉŸÝ4›ïÒÊÛk$.–º‘iêl‰F9zìÎA*Xo½Ÿ«¶ÓqW³ñâÏ#þ{ÍiÜÀúDµ+NâÃ.ü.Y®? ÷³ÚæØE}ë~ƒ÷cHâÆª%kÊ»b‘81±½!â)°JwǧgyÆ'óR:jáJª¶Yîgý¯¥Ž?KÚÈ¢Œ,_‘ žÔùª9Æuo3…½I ñJ+ÕJCh³Oú» H²vÝJ'¥Q1bVð™†öñª ‚U’žáŸŸA“Õ¡ãK`e( d} ÞB¦g–† Ћ2šŸ„æý b¬×ºíÎT÷Pù)¼Y.·Ì•ÌôŠ˜+éLæûÖíƒ>«=F®ä“*<™0Ãy”fûå¸ÕÅÛ» (mñN*À÷a•QF°üßBÛü:ÿ™ã.¥¦›(6 ysàf/Xe°BX“J[´Q9·%'“ºW}è9æñµIåJ„Ê;™°gЦˆÔ&U!è ú¥ƒÇ‚äV;0«•¤\£ëžÄS¨ªUœÌ͹*÷H<³[ä ÕK*ƒ^ y5ÊHÈA-WhÖ8:’{ü”[KJ.†Q`XÁCg¸.«æ\tL<(©ºjÔÓ+G£úPŠFÇ7é´rª>žeNŒ,˜Ppµ#o©¿ÈoKˆ³e» ”TÒ;h *¡\èoá­?DtîΥÒՓƒü \è_¹¢PÙá|Ç &~ˆ çWg8¤ßúJuvÑŸ(*ð¬<)Wòˆ¹ˆêÖ¦æKþk†;q›Ž?úß8Ž7Ÿd‘rÇMü±[̆ ~ÅdÒ#ÁIhW0F(H‹¸¨Žê­¡ ó¥ gXW `Aù†mË?=‡O£ô(/úÊyd ªEÑ¢œƒ~?<¢ÞÏÜký³¿ [ ØvåoQ¾(èï¶â)ApºTå'‡†‚§ºõYˆºR«œE½2~aùÀdØ|ê–æô"GJ¬Û&½ox´ß}0÷3s_ÅE\„{þùëñþ‹‰ª/­Xª0“c¡Åf ipĬ£¼ é–\ÈËPN°,±W=  „áA¨ÿUÓà{miþµÕEÏnw‰¾ý ú¬23žSM6/){H5®%|Zg^ñ’ç ï`ug-šþûX𨋳¬¹¯õÑ["ïº$•ÝJ㙥nS ¡B&¥:ß±`» «ôsµ0³Â–”Ù9l€‰: 0€ÿpÖ†,vnfnfAÝ*z\)¦ÓáÅI±CÓH ¢žË16PºÄ7iðVÁam×NYiD̃üÕÁn‰D¤ù+Xr`ÕBç,Ë=ãsSàH2æTÉpìæ›Oªëåc]fˆÏñ¶—èMCéQÀÑÚ‰`ÞÝŸ!è‰1L*·Ùêb§Ø>Œ¾ Û¡¢Y{?“ŽcÞ” me·$Ùrsîã5§Š%Ô@Ã3jë «½ëðïÝ›Š.ˆGÍJ¿)eð'ä+*˜ ªÆ:ÌŸ/ŒJÃð0> }Èäp·†Öú<šž3Ø*§[œ½K¤…§†:Š­–A |1&즠àð>Ýç’ ‘k-&Î=¸¹ßÇx® £áÔÉHÕØù)²< åŠæzi’®ÿ`mc/ÏKj*á¶L1^̘Hðóã¶j+`Ûeº`‹ÙO”EÅéì7,-7ÎMù^å?š;hÈ Õ ýëh¢°³©p›Çz÷ wü”ºº’Ã9*‹ê:·ª]VwP¸ëÜæñSŠº0n:Óxzø¿]gÍK*;‘þë·÷óg®Ofúé™ÙÃdæ*–"SX3 YQ¶ DÊ\E›+ š¦6˼­6ñd“¢€[(:xœÜ'E§‘‡HÝ>NášÝý&Gªz­fð}O`B õö‡o–qX°œfv¤j1ŠkIÙjQj ±ýÏüÅÀ9_»Qõ¼–ºžjð¥(ìúîûÇ×ÅÔR*s2IëKl*ô—­þ½³9="½GÁË•ˆ›GñI¬-ÜíÆ#JÓÌ d£c~TSžðÍÀ@8nÝRÝû~Áù=Ýßú¥a¯¶}~½(ßôQIeõ ‘³¿èA¬ùP#_­zWzÛr´Ü·5¨ÎÖÿ'4¨C¡ò]^>{äÈM˜‹+âÀú6r*ÊupzÙžÐõ¨%ñt}ôäH$ž@ö%FwÊ Ó:ºênÀvšÇÁ‰/¯ ÔQ€¯“†7 Lå R„ìó“z‚IÀ¬¥LÛ1˜¡ß®]`ÓÜÕBh«+çhº#À8ü”zŠç›ã¾‡Ò‡S“Û¼ôöWÙ ÷Àú4ãÍO[Ú5ì“ÃB+{…¿…[ÝXƒÔïÉÛ‹Ý´_õÆ_êÿ'Šß®Ø°ëhnf®†ð4š¥C½Ã¡ ¯¥èó« Í– º3 'ŸÐÇ_ÌϤìZHð¯_×zc8WÛoCœå^Ÿ³ª°+GW6y xf'ž5:>gŠÖ9ËÐJöÞ¸@íÒ˜Üç€nöRh„r}'ç’kÌ$¶•Xr=÷>¶œ›Ìwt™‚¡FÙ6ÈÕ´Bà@3dXuýqö×òò¨PþMÉbærõCr|Ὁ$H¦?ýúz_„mý·\Ŧ2K˜xdŠZÎ c(:gí|žâE‘ÑQ¼PÉìÇ–´jßzwR.Ë×!Ù*]o•”%Eë¨L”ÈI£W³ŒÁåÒ¿”Ðra·E8¢óÆ/îXÀ±8ô#ädmÒWŒÑ;plí¦1k™E·£uôZ­^Æ"˜<åpà— ø1$ÈJúI°[lãV¨!W?@qÏë?NIñ„Þ§2@|nŸ® aîðƒ^ `²Ç‚9nwQýý"ïÕ§^a /1#ÛžnDü†lr#½1g½Ë³?C!ð(*\Ò Ñ´qÖG¬Škö‰G,œIÚ].g‰$xø—‰Ù¶M J‘ó}‰iLeÞbÁµm§+¯¾XLz0*¹ýÕ¤;’2ɰ¤¥7Üì´‚Û%ðK÷oóÔm ðæV0ȾfÀñ‚çÍ.¢uïˆ=ÂA^öò¨n®, i2r(«~µÛ‹ £2¡›H\ÿKÅù¡ƒGr`rÖ ÄfÍ$Ù_ÿ„ˆ²–‚›Ï5f‡~þÃÒkÝüN}‚ð¿s÷ —”› gÇ­FuzH­ˆOÍßt}ÇÄKY1Ã7”4R1êùC6’õ?;äEð¶C;¬D#@]ƒ³V…^êN„ & ÓI:Æ\È ç^_Ê_lûJè‘E}ˆl»£T˜ô‰cømJäÿ|M;ñð2Â?-4­·×ÍßG¥½¢–gÆþ"î;qŠ;Þã„Ä”€×MXTòĵN:Š)}ik éA£ëÛ;,è¨ ºãH·"Îy í¢º=ÃÒ ã`´Y_.ÐJX9']vß¡ýÛÈ8"•¥øeÙÍ;>TIï<Ï;Œ¦‘Ÿ"‘µ·F“"-å²-äÎV±Õ’ NìÉ$HÛïQ‡WRËÈÓ‹Âjj*ݪ®“Å9Cp&­´ø4ߺ¨í[Îz&)›³oå%¨â–È®ãú·YÀé<@×î&Ú¨¼¦ƒÇ„TŠë,/ô% ÃÜÙNr2~#‹B^Ùî>{­w†ð9Ú¯<|·ÇØò |¾´¤Ö·X˜î/äp¸mp¨ ¤~õ&†x`^"¶”L(u,ϸpB¼q"÷ˆunN3S7n¼8§û-YâýÞ››q¯X}Åx*Àέƒ©×pürP—•H»" ž”EªËï&¯ÕAìKÍ—J*Vwùwni·è[ÔtÆOÑáün2®ØÈxS(G¼P B…ÀëJû¾Û]w<ö{ª˜CÍ8'²vñU‚!#Ù'U‚çÁ³¨jæÞåÅMô¦Ôf¢û«>ôί~:™cï­ÝÄÝŽ|TúÄqÑ?œÚ0ÚW˜èè%þ\&cåܵ”ö×ffÒõÈzĬL”ö' OoMÎ)>y N`9BoàSÃ- âꟼÃN2>Ò°Xqr›rƲ€€ná! Ùø êtWá4-ô´B[GYj=rývömsOjMÙÆ[§fóRƒèDŸû vƒ±‰ãÃMi; GÎ6e<ÿyvÿd¥ Ç ñX}^?$ÜZ'wÇÊ­@Ó¿çsÞì§´ÇãÍH JŠ ¾Ñè çz°·½¶^¢¢”ÎÑÙŽõZña!óc/¯Ü†ê/<<²Ð’"ë«7£]®nd‘æF)…9°6d[W‰þÎlúv›“XÙÖÂgMÅãÀLÉ©Ë13‚må`ük@›‡ú½Xu-Ê/d!ºk s “.Æ@X*Ä&jeäq}|-Çâã17¿s†Jf÷/¼°È†º,iÙšÎNí8ˆ-q¹7f•V€x®{‚…÷ŠVÈ·‰í¯M:Ú+. ­TÕS}wÞ*`]djRèôøUf.¼ËU¾§QŸß|°d5‚ ™ˆ‚ãÑNpoëX—Ä!Œ|”­ží,©ÌÈl¬uÔïÉxÞ‹2®oˆªôKëÀ€1RÝý΂×9ÄÊeÙáÎüGNé³è£Hü•X#RfÎøX•+:píd§zDûíƒoŠÀì;¶¶Wôr:F´üõ`öéAY­ñ:ù'’cL´6Í’–‘#È‚~”äI$ÍQžK$€S×›Ù0^<þÈ›Œ¡dÆ:º2[5Ó–cÜp¯}AÃòU°ÿ?ŠL Zâ©§?¶Çèn°< P°]÷JÀ€5Æ/×çZmaIsB\{·é³WëÿL3¥E°¯i?€Ãû°Fä^Äé)@ö‘¤eèyYÖqêÕh‡âj3¼a §=¦0¡ïl¨©oÁoM™-ý{¼¤{«u@0!ósí?ß±Ö˜¢q“R¯ &õÖ0%¶ð¥r^[õ“´ÏôyÓê‚ÁÏaC“~ßðP—¸×Špq¦ý”k‡cm›îv•ÝKÊþž7™íÁÌ\r\ñ‹-¨Ž;ˆä]ñ.[ó`htIIê,¿þâìÚ£ðZͨ=Ð)›Ù«ÄåA¯žÞOP銖p!ä;)Îë#¿l9!G§&vÕƒV“Å`¿ÃúÃÝx­t†ñàOOb,½Z©ˆoç[ɳ‚Á"!`šÝêš0˜Ãíì¾ogðü;QæoßS½çËl4°ÖÙÜ CÜS¿¾ÝN´4§ì¯,_hÁ+°UéÁÅˆÕ m§)M¤²®ÁA|GˆÖ—/t…š6]°n7-”ÈûÜHÁÚ6˜—šÍÔf.÷i'‡TU¯\ýûž1q<ÅKPjùÙaô'1s‡•øî>»UNÕA»ß†!jbÑ–ÏKåm¨Î"Hö¹íz©û‚ŒÄß¶.N·÷È­‰Ï¨äLàDaÎûÃÈâV¼Æ®Ô¼Â$]æZšM½ž*Ž:Q°îsø€Â‹ßh€ç@£c³Ȱóè"¡X5iÏq˜ÀÌ4Ñ™z’àóÎäÅQ›“Zºhj3¥åãs=6ÆQgýkÍYå£pÄ¢TƒIåEüž­(TÂŽ…ï˜Ò›FW³ñÙS¿ç§”í͸ré.:‚ÑÅýì[eµYÉÚÇ:6J€ûªÄÄ•|ÉX‡e3õ c¥l!,\£MµlkL=xlúcB Û^ªpôÂü¬Sí2:M…É_*:¦Ü$ä {’¥ÁDŒ?Zÿ%Wå YMaGRLǾ#ÌÎM’%xõiÓ/wòs“ÄÐ÷ïéÒ™kß§€B;ï¾Hùäçà>yö}á¹2ס—“Ô Ä]wŠÒI0B`ì“Eù|܆Áì_;û2´UxÝÙ´yˆÁB‘-K@åxøzëê.^™à;SQpØsÌkoÊ@e·:8\zì¯M Zö$ÓÿÁm墤$=Wúë9 ]„®" þ`´äžðxòpëU.»žèS{›=Øï‘´LËææNìÓÔ¶¶]ü¤ØÊ™z>óé½÷$¶«›Îð(Ôz0*šÉ¬Îcø\QW*òŃþR(„ëeL¶;Xm ‰yHâA4˜è–žoeõs-xˆ·÷"櫞ÌùHѵÉaa¯éÁ³y¶6‹µUÔma.M Èì¾N€ä6qÆž“Iª~\'Êx›¾ÜÅ(@q<Ó6ƒäßÕýàöä F6ôaök9˜ÜåÁÁŠV4 h9éø¹pÓù´[já~²| >°‰Ü:½îG…D¡¡€×Uui»ÆfõðÛ}ßj¬Ê¶9޼ëRäsÞ§˜¼þ[nÕÄÂõÐõšTÞ[þ}òi‹Ÿ.”èëˆïKäYUK„ ”ùsYHPUQÀÖyYµÅ<1¬"öTPKH:có†ÕÄ7ˆÑg–$‚lTÝHW›‰b¾µàŠÇŸ†H©é&HsØ…4X9ï—¶–€ÜI™¶‚lÒé=À¢B_6>v× $M1w3t첆2á:¦VÁE—\G}ã¥_ÁâPê: {”ÙòŸ …jçஂðR‰b8îf%.ÄùcÔ²Ià*œ ¼ 'í¤Ä¼§»ùö:ÙšY +ïê¶&û Ë‡Jd;í”ÇÎô'Ԋ˱Yái€_k©H¾hbâFDcBó ÀÕ‘M+•+j)õH‚ ]q™ÆKù.qO2=e–Ö–1› 1Ž/ÙPÌàJ˃öÔïÜØÆËÁÅ/ÒªÀœ@3ÝâÒØõ,$íú9ÅÉÑ{È>/ãçiÁQyG⩸+Q‹'Wš§»À9¹)e¯¨OÞVÐAÅ…dD7½œY/™Öûˆ_´vê£ûcêòÄì`¼óÇ€óŸdòÿYmÙàfáÕ—`¬±ùzë»î£Ü®Õ òãŒÂäýšœ×³g]k‡´À”[ñâ†I_S(w»dÍ!PžÔ(Žu ÿn}ïÒ¥åËb'ünRö –Š‘K5µ5=pçÖ”=‡é‹Z*VýâÓRªšÃÖj€ÁÇÝ}Þ§£Ó¯Ì‹UEíãz‹$¯ gXTn-e³*ëê³zZUcQ+PAü˜-_zŠ× «mRèjFH.x%Á¹ª&Dþ²®~p}«wÜš[’Ôü²ÊU´‰îäíE´IÇú c=7sËQ†Â^\Y«ÇÖOýBt39OÜdP}ðµÙûqûȼ֮Ányù6—Z1Sqkyd*?sDÌõ„+~f“ˆüǧ¸÷Ù¶i:¬ÅÏóÆù2o× :†< Ä{aa6êû%^ßQÔÈ=síH’W¸mfÂTŸ=Dyø>=uLº-6f ×nßà aÆæ”–*0p«d¼Q¤=!›óùVgnŸq÷ÃKÍÍN5R•«Xȱ 8ô$¦ìM^–r-\$ ž»æ|ÜÅR«÷;îë.±BrÿdÐñ{>ë¶qð—¢–T„Œ<›²ŸÝŒ¤q?\š1ö¸5pá¡o÷{žÒNT”B¼ jÈ 9•|ð ÷W*ã§È]^ÈP'Åkîâ€be!y^åÿs¤G<ÐÛ0xP†}UZŽPûÔDrµ°=ëk‹Ì‚ï< ׈!>t»†»®dæ5ç_þá ÓÛÎåX(âA¤ír)Ðn;ÑB^™á•¹VDšÎpYÅŽëðuQ§ñ6©òúEpe­cfy#ãUÓ[„—9¨o0Zh F%î’µˆ–.™%¿žÿXoùõœ™èêÒ¼™èÒ7º[Åu‡ôeMmE c¿Ú×SQÙà”ð_6°§*Mòø=ÆÍÊŒ+ÎIR¿Îö%“üèþã¿°e‹¡ÌOg2Àù®5÷¿~îH#®ßðÒìî@/%þ[1PD4ªÓð§´ –æØ¥{~áù™s‘ý_+rÆ„ 3­F,.´§¸ ïSÈ€Â'* 5¶¸Ád\c,½â×Ç#(õ¶í5è^\ÜÈùqei¡ƒV¥_LIeD`5±ç;øãö_ôp„ý­6ç;|,Ë=¹ÔpMü,/zSèx ð{ôŒìtÊ >lbÁy ¹v× )Œ<à"’éÉŠ{6̨lÚm«ŒµoóV…Ç3Qû †@›²¬°¾ØÍl¾A=n]%ĸñk'!Ê%JˆåQ“3Ñéì5á•ÈW½4A¹úï´m‘{#ÉÁ9hé„¡”˜ô¨ù”a$oëÌ»¶šp9ÌLúÏÓëò ¦ãëo꣘P9wU¸•Vµ[éãJQ_YR>¨3hs¢Z¡c°ú(òû"~|}û3p ¨³ý‹‚¥)§°Óªé—ê“K…57Òp@T?ÔÀ½ÄdVMcDzf#‚ä\¤|+MfÀ¹0gøáêè^ö£H3*ÂdœF~ä=øñ£„E” Nþó¢\Ô ¡\Õg9Õqh¿¿µî†µ\Jp\eÃíëŽo^0}½|€òÖ}ê"öLæHBÄ_U¡,´=ò0ôC—ÇŽRÿas©îùá>¥8­qŒñ9×cøS;‰¹wDŸ‚=à]P«w*£y.²€d ûB¡P7S››FÔ ÷„«ñ€àId¸ÿQòÍŽMú,-gþýS2ãó,Lú“%.&Ú ª4+Ù>1CŠþÉâÔ8byáTæó¥ƒ !°„!ì-¦#¦Ãá+{~=•véÚSÑ|ó¦Ø>€ÿI"9+*„e–å±j$K÷AŒü#ú8ôsÖß ë SÐ¥5»•"š©à8ý¨ÂÕƒKHŸVRü‡Í„SW g0ÐÀ'OÍQä;Çt6˜0”•{y”K›ò½Ð²J¦HnŒž¬ïb¦ÅüᲞÁ,ÔM$C3”.ƒdEhyÀä,fÌ<~ÁËõ%¯eàm³6OŒÅ5oÐi¨>5.DJ,H¡–øŒ*é3€ûTY3ý•ÁªÄÝzxÖœ»QTçŸó&øû»z’)¸à¬É–Úh’£ï³¦Ó¶Çê"ÀCñ ÂrÀ3aí`¿y$sc¸ý`¾ÿ!j¯a"AUƒ ç²^RjÂÍ^[DúÍÖ¹1ÜC06ÒÙs×5¼_zïœPä²›ø(0±Gü°^TR£¨%¯¨ýb"ÓUM€M>U‰Øù•LIÙ4(E)¥vÁÓ}hƒeCz´6п)[3–œ3ó6!8cjç‘ÌË>s¦ÌFöòÅ{SÐQ/äq–ï÷É…ÂÀ¬ëz¼Cv…'d}hU­úD‘ÒÎØ)M³ÅAmRfð—ÌHŸºxö”^¡†mkz’êÛòsŸ$û t6LBÇeE½aÖ×’5‡Î'JÊ…Äzn¬ìñølÅô¯»6_èÓ‡&ÿDœTÚˆj·b•”vÇ ')ÕŒr¸Wy)þÜ‚OOôëªN_èÐî²—LX"Œðd£ÑÌv_Ô&¼ºr§}&#›ÐË )P=ÑHw̪êoxkê‹§_xÌñ8qOwaIÊbŽ`”ÜqP˜¦×Ón'¨¦ÓÏ&«€ÐXc¿Iñf‚q{P0ÝèE²N—þ9“QÌôüÙÎzìÜÂ˰Þ# äÀH$ŒóÊ´R|“i †ËÀ«§(Z¿2Ô©iÒ•éPipÙÜ+ºŽq ȯù,H ðaèõ,Äf¨3ßàaQ%ÕCwŠ ù¯Ê…¶öGoéÖˆHêûûw„ ’;ªdƒ߇“ˆ4¦¨ø—äŒ/õyÎK“«;×êqÛ'êß™@œJMHmÀNZElÒÏü²Óµp™-[ò£UdÔÀpAbf+VÐN“ø— ŠkA:O«È`ñ?Êë^; kŸd/@ŸU:KL#K¸z‡˜b/» ÖÙ€_Řç¶õ’KÛaÒI@ [”EýÛç`³¤Q‹'³ï]À „,JFË íËX2aÚô\G\{ÖåkàǪ16ëkUÀRúQpYÞAAÁÿ%žS^ÂLa4éë6b„W•^V#Äaý  fbc.2M½šóŠäB©5ªÿlt®Ûýp•)NtpR•»·t}ðPgD¡ƒÂ _öŸ§.J“Ñÿ(˜Íuu<퓯Ñe-=8içœ ñΕÌü¹©Ã„©rÕFö丰_¸Èøæ]ÙºÕAæ¿v™ÆžëË‹mQ%eÔ)æìAÖv²åË‚õüI†ø¾A-@rU[‚Ý({ÁS·¹‰®©‘°oŽ1ðÆÃÃD…SÖÅå6‚õ½#fè<.çKÒ’s9¶·«áR-9yª88êÔ9'·9V@!Ø?…tm'òØÉì$ Ö‡nhÐwñ…×%ˆÀ„¥ê.W jbR ‰z6_9$¬X'Ó|N›˜>+Öh˜(¸‰Ö‚üITÌœuV ‚çQˆ®¸}z t³3C–ƒˆ̧Ó%þ>ë”ݽ&0 ¸s(†GÜjˆ»¯‰ ,4k±½õþxáxÂþÏy€’vvŸ"Ȫw}šòID裾Ò~¥4&RpúUÜkÉã,d F"Á“3çbh€µ0#L¬f-ù0KwX€Îk:ʉ p…f–3 ÁÕžMRµZ®ª#Ì\—ö;#zìTn{Çá×”~ŒGçØ ÁBsf«“lÌOË’2`a•¢_C5®n›†×3¥ÐŒ’‘KHøÍjìMÚ.#¬Ñàzo+û§ÎÒ²ºšèÞ Ê#Øô`«©YåZì+~”ø–6«õˆ9Öź>¼SóC Ú<…Ì5§$’zŒ2¬¼\‰-ËHÞ03¯ñâ­¼†°mEà2©óoHbÂŽ1AlÐü‘Ïœƒ­&—f-½×$®s9ˆäÞ«Qn² õKÜnèï›Àqj‚·ë--p+TÇØ;=b¯e'lEW£ÇtÚm*dÀ¢bd$¸#:¦óƒKs…CZàhHŽJJ»ž|ß8K4F  *ñïÑ…¤s/Ö²Pø\Ü_Óøl‘ˆ­äéd‚\ƒ@‹Vâ,\‡I x6Ã^šJ%cfG?äËPo‰GË#ìý³Á¦_‡ö”_°r ÖY­Ìäî}湎bádÇxPµ“rêŠÆI23ºDE^ÿq8~´ ÁDžIÒmÄà—ۻ{f'ê>ÒöV4°„F2W®®Ï*¼0ND‰8¦°/;NÛ<Ö»ÖæÚë×ÍP­ŒÃL3˜â bÞiðÁRß¶­,{/kUÍ-ö;ÍH§Ãió9‡xNppÓÏ™á½Ì2ºZd¯/Ø©ÝܺüfߌÁ~ް™62š·rŒ”° ×UCß’|@ö¤¦²MȺŽâ») ãÆP4Í8Ö/ÂÞÄ¢èþf©P!ìÚ¤+—22ɵÂxžP•ß–ÆŠ—&Òh2ü%Q²2DÛNE¤Xò[ÑŽœ^S‰¼94…Ï¢ÉešÅyÅ‘¥’ÐáÆÆ·%c!’Ðó÷½F~?#¿æÙ©ùöÜTNÛ@0n²jÔþŽäRµóMJ±âÍ&W°:ï=ZÑŒìÏqÁÙ1Qêwæš=» Õ¨0ŽeËVKrÙ>9­“(#ä)‹ö–’F\ ̶3÷nJÀV4kä›ç`ÙCÊ€%½x Iã!!e†[ŸxCáÒ Ï-£Äá2=.©ÍÿWõÑ̼›éæ•ÊÎ ¹7­Ž:¹Š#7‹“ƒŠONµ§qÛ/ßÌ%­‹Áú^ܾ?Í» sçù–&t±Û¤©;° »­ÔX©éa=bQ¡óÍð•$Âúòr4¿rB:A9àT»nøß#81šÊç òÎæŠãÉÆ(P»@U‹Mœ 5àÒOlqêw¯p …D'M‘_Ÿù`rla”ÜbynNÕ–1+æ[Èp É/¯X²Ûb?IëÛK _¶KŠšIj…=d)ÚÄSˆ7·f4Â)‡‚C9Êâã!u£†òþêpkêÇ×øÑ…ÒÊæáœùȸ\±Äz´Iô5à `Ð [¥IÿÉÌNÚ\š»¥jÑ«sYúa:βԉ÷þžEA@[ÂÙMÊ#@£Õf`â‚«V yZJiJð‚I/Å‚t§â×îÇš Ò(æ>ÜIA9t Uè¹Ê—@ŸjzD¶ñ'KružL~rïQ…8X^ßrâB¯A‹mïn_V.Î sÈ¢ý¯ÌTg"ŸÈéùˆÀþãøs"36ÙôY=Šwÿ€'²lÒÚH'j¼òP8 ¬xðÓʧÿº]sB4t,ÍÍ)Ç~¬×%Ê<÷2|r ¨¦ô`ͽ(BÊάxÒj.Yýj8Cú´˜` 5²R-5¯Çæ<–¼˜oX°¢Ý.ó°°þhï Ûé€%ÀçÁ°–zü‡Éˆ½ö [Ú-vÅùýûªC×Îál²üCÁ7¶¨‰æ:ՆϿð?Çé,JVE¶ ÉßFˆU…€`йßkNaŒ2´ÿ`;«DDbÔ¾a†i!rMpE‡(± PW0þI+ÀwZ²~GŽS¨¢˜硺Àƒ/d ¦æu¶šªb`è;îÁ§Ó—/嘚“(Âüòu‡ TùÚÁ¤l÷ Šš‘>1~Èk<,, Ç‰i·‘*M¬X4êÏl<½þ1í5p¸â°¶ÉµÍý,5‹|f¨Idïš{Ú%IÔ/TË\ö=6K;r‚"¿Éu¼lˆRø…‡E¨;R¥ß˜«ù2ùÕ‰X+ Z¶˜ö(MÝ«#òyT‘ ?%ð wÉK~÷‘ëM³ÈôE¹‘! Lq4 y>$ _Å­30ÀÏ¡òi*ò%FÖÿ\¾„JÓÝîáÊÈ“rA´Ýä« Ö6‡}‹ËÇÇ(Ÿ°tΔeH­„ˆ€é#/[ícéçN@À¾¨"AŒ,J% 1w™ùŸý)Ë?f¥¯ñÎö~J÷0¢…‰±ü"Ì2¤wðàau>|ÞBžÐn÷È£îÌ uÚ¤á)P»oÝ1ƒdpE‹_íq{c³;“òWò”lq&S©aŸesNß*AETd;~í’ #Ãý@S·gŠdCÆ9VW–€úŒԴAÕê¾YcZ®¡\…V‹ýÊïÑ_±É6Ä…·6ªÕŒ&¨©bóí~ô2¹Ùd ‘•‚v«N6Ÿ[oªïÞúàÅTD·…61„-:j›s”$GRxÙÚÓÓ·œ’¨˜$0¬ÒjçX£—“0?È÷RZ Ìû9·ÂÏÏ.¶’¨êH$.ü¯Q<¢,ž÷¦öüÕhØÐÙÍy¯w'µ¾ÂúI4ÿFjlN=ØwúçìèæÏÆ`c¦-ä^é·UÆk£HC½F­8ÛîÊü+:‚. ôLû¦£¸E-CZày%Dâ¡`nR2úfÅ6Ô4+àj‘A'–‚š=´—:“5ü©(³Š‹ß`—mBÄ ï.RW<&‘¶8ñ€DÇ«xˆ›ñ"yˆïÒ{¿ò»upÂvƒ=¿©9•ª"¶#127Â$5©¥´W"¦ëÇ¿hÐ6”ÁoL÷ã·ÏÓ¼¦F¿çݱÒÓ›¹ºFÛH:Zµxˆ:e'­ŸÈE·M ÂþÊÌlÚ 1Ң몮 œÁÅ”ˆxÜxU‡›7Â?'·À3ñý–rUÿ|IÛÿCE°Ì|6~>ãøwËü=j¿‡¨—ðôªÅööqü=hÿCÓ·øw—áÙõøz»_‡¨§óîlêùÛ41NbƒæUbp¿34.A`kb^R“}ˆÎa p´ñGšís^Ö÷Z²4CÐx“­[Óá²Xü’TLCœgþX¾- ÎÚÒ«ÿOrš 7… ƒ=à›øÏ> ¸Lr™--‰”æÝœcy§£üÇÓú)û!ž¦µªª!¸­Õlv.Zv/½a÷Î ¯~C»Û¶ubMß°·?߂ϓ”ÿsk€¿XMmº¿I¸ˆ$7ìipzr²ÉS•Ì nN^ßTI‚evý€q9Ò–ó(YÃðFÎkYµþÍŠ5m\ÖYXˆDô¶: ²×N(ŽÉõ²zk–õ¾+þlSrïö­—Š úxéq'ì­'ñ §|òÉ>†œZàc‚%WÈ)IED¯ûN‚Ú±°t$-C.fó[5\•åêÚ‹gSÖ¼ÓæiÑúu/§|³–eκ8üÃ2„vRDщ–í)ß{C³‰íwÀ ÉÃ/»£×Ñ3A¤­Ä/{¥ßá‰GÕà]žþsc ä2lÉ®œR¥|_Á“üUÿBJPGò„õËͻݎÖÔ};À†ÔÃÎD>šÌ„ÉùZž†È[>0…P­œ\#cÝ EÔÎ+èÁ8*YöþéBn²±ìó Šˆš»‘9ÄT,0TMý?ÔÆGcþfÑÈhhŒ0ô ¸RX;JB·öíôQÒg Ú{[fCi!9­·enJÓElȾ7òàkÇÖ„·…ØE>•@¬8È(ü`²/{3‰08¨1ž¢ vÖ”]HÊĈ}õ#amtq¨ù¨ƒú±”ÿUpåÙ×¾|Grqá¿€2ÊÝ@:ÃÐHªŠ¦l¢_¢pVéz¸w¡á™Û¬8ðfHÏ š»TkÚµÏ,káŒ"Nk%'¢{Ú¥­wXàØKXje¦e>æÙðñƇ㠦|‘% ªJº}ðëri&yM–ióÞ.„˜wXýi ‹X]èlËMnw®Œ=-È„A^ ^OY÷¶3Ê\Ä&ޱîá·i™4Œ:v+(V‘N¯éâ<ØaþJÃîU¯ƒ±é ý„­žçeÕeJ £ XôáÄ»Äðý¾ë~˜*4ú°z.MEƒÐ‚^^a£Z‹ A8îR 5wšQºòÄQÜêdeš†\‚ÎSîÈdSæ>çìÿoT zÀ“c|×÷@ÍÏ™´)(®ÇtŸý+¼Õ2 Þ“ó ÀùzƪÜCy!ЇY9ìaÔ+ã XUV—›ðEy£u^çè,¬ØyÌTVÅ*ì=½¥b­àE¡sµ”8f¸ˆÂ!ó»¿&«ydÞÌå{[É…­™)„„ѾK^y踘óÐS¬;"šNCI‡ÒÌYSëK»æ;…©C€*À(޲åû©ê|ûU-ÉÀºu¿þP6{pþÎtŸZ˜ßÜÉ9jié'‡{Ê=øø¢Û“>ô  ÔmA½Ð$·¦¢m=ÕZŸ"s±ë›Ñð*_ƒaÖgCtÿfóKKÈ‘§µÄóÞ Py0¥è+ÔJ_iÌÄwâ»ïÒ?Š;I-·Æ(ç }Íf‹a;*EA $i) Æ´Ùù¯—M˜(R°˜J|òáØÛ :·Šo8"㮤`BÚWó껎”…­Ô]ÍEj‚–F Öéó®öIF÷¸EØ‘]–â´ÃR˜ ñ=­(ô °o©µ·(Mæ×–BÃŒ¢ÂYÂÓ±R‹:°)NTÉ)¿'D܉‹Jð®†õã&z‚‹XF#i§S×[lÿNN†¸DÎdOWà!y ½n¨2ç¥Çš¤V%P㦻U²P"z£×;\œ× ½=ïYç }(?8ƒVˆ%lÌ«e×¢¯iXßOüÙåÿ+¢„³Oò——\»ÿ¶,yŒ¯V¬ÃÒ7Õô=GCNª£›E9û;XzH?w¦ "`C R}«¦ ©iÄÝ8”þqä_GÓ[ÊÿZ>芗ÿ]*<ôhÕRe¯H# q»axÖ%^áF€ÝÄ“NÊ¿I¹1²ø‚‚B .-‘Em²1ÎE5Âglà Âyzjh°Ûú„-Ë æ½Ú¡ü% Õ‘8JICÒ8FhPÉ;žY˜4ä+ðµU°$ íèvѯ²`4J“p{¶\ þe‰™µ*ðc6£Ó–uýLŽ|8ù©bZÇHð£cbWq¬Y"Ã0éè‘:’ à]`t8lïvñ@ ¦¼ÇçÜå ß5À™a‰9<“Y²¯:ØmH9ûðáòi$d}ØÜuû5?•œ£ü¢ºŒ€¡˜§Ùv×¥íá—CI&þC¦8 Yë^%x;®iÚ©t0þd^A Äç·fÁfð­Æ^àÅÛ+œ¿C ,.íí2ùHÃñ|¯_ß‘»hyõX¥¨oþb§?4eOéh|ñªz+å€cÙ9­&õÖt½í’>ï?ŸîTØö¬8B€zìô––­FÃ.k”!ºÚp à§A;¹˜ rÛ¥GW$÷>[fã-TŠâÉ/ áyËñ Û5‘Ê<1Tw=Dƒì]—åN»Îª›Ô èó¦‡@/ò¹ÉY¨—¥íÅóÍwÓ—>,¿Pp ÉMKèc2 »•É£Žêç—Ä-·\Ô0¸b4Ž£;Šž ©Š#[›á­}êwwÌ)3b“×´ Cw|°Ù°Eð¸ì*ÖXãU+n;Shòè0¦O##4Í«Ea½Å\^Ås\®PÞŽŒóÒM¥G}M‘ñXËôœÁ‹ï‘.‘´YÅ‹EGŒÕ]2™«;Å-ˆg þÞâeb“m+çÜé o4n‡ªL@bAZGqÏ­í"Û‰Ù²1¡\‹dX/­j7ݱÑÊ|õYš½f÷åyTÔøõÕ°pW!< ÷šÂÌ1õËMZ˜GJa~óÒ6uGtC“UÕßä,ðoÕ`åþ¿<õª¦íÛ= ]G–Éf‹â³¿)»˜ˆ‹ Ož?„&€öÁÄ©?—z…/îcÀ±¾>:%]_¥ ;¼•¸]F»$Ú³?,h9âcUáN)›>4 B²ò<—âP¬y¥ðŽi+ôepøÄñˆò_•ñdŠ…c#ç0:gÑ“xo&ù|ßBP˜µ9Å[òÌP¾¯\žƒ Ê\ÝsŽÔ§¦=Fâe µGÿKÄGË·êÎ*M0Wa³Q ô•ª“ù‚Éßq:‘Ð&íÀ*-¡âãQ´‹Îoö¢ïyÚ\‰x°hˆ\øæ:T§ëñ¿Ã[ýÁÇÔxÁâØ*ÇNtÉ].‰HÖBëf!æÌΖAOǺÎOmð$sçéãÈS/E—‚åXXǺqHb¹¼©òÖü–žO(,üŠ<ÑÒ·¼àãH$¨ëôPЊÙñRùZaåjI"»%¦¹ÇK $¸¾ûŠý ¤ÈÂöèùDäëÈ€a,ƒÐÌ,:?3­ø} j~$BµwÎîPÚ==Pb:9vl;;â‡Îq¹¹¢¢ÜOZ˜òÚSˆõÅXxQÒœ¼% ÅúÿZ~Øå÷Ç9jøNR¶þðoé름ÓÜ[uösŽn·pŽ®›WÐêòLì lLÏs:¶`ÔFh†ºµà„µNËø%‚`#œ‘³@Ø Ø•"³¦Â¬ýƒi OItÝ÷H7)¶—Ö¹ †AŸñ$uÛ*ŸS\š Áv³8Ü«´Ááߪ¦Y}q:Ë‘k¥D3á+혋ΫSˆ¶+&ŒÚ<ŒRMÑ•¬Á EÓ °—ïÆeÑ;¸wk¦€2H‚Ìkx¦ó,1"͵ºîL —ÉI$Va‘ƒPákÏzcCо\*¯¢[TUû§Æ–rÀØÁ@LØú_ÏÒ˲{¥œ’&ÓoÆuà.?¬V˜³Ð±ºÖ«•܈/r×V˜,Ù­—½J‡ }‚ †sÔZÿ}ÜØáäñÐ’Ûæ¿éµ¢Ä×îJÐÍ%ˆ‰›1S‘5)³åݽÖ®vCCêdN´%¿mÙñ ¿¡ì¤Öåà×턳½Ù©ë}­SwŸïÁE)‰AÌ¡afåe¯><5GúKz¥WX¨ÚÝÛZ-ý[ù X0¸“…sx=~F±®kFOoq–¡=/™êkU’3¹™kXyQâ#—¬ÛV íNI%ݹ úëîÿjÔ:½ÿfNoÜùuA¾}¡Ùj>¤ÎÄ»xÞÇR8+¨¦²•ø=|Ï•vn˜@0|>ãéÑ>¬É5À'ž?¤d©0ŸÇð ˆ=[}^[Ð¥üüÂXT è!›à¢ü*F•v‰êù—œ[tUŽóW,»²&Xò¾*ÿI€“B “É?ïOÜ&_Œ¢ù‹–Ù{ˆe lÓÿ$ËßUÅÚ†èÈ:4]´ZWŽégùg⧰רºšSý‘s«Ð“ïzäxØIØ ‹ï–e7ç!–•!^eþÇ–;§R‹hkšï=ÉNQ ´ÊÃæ«fö÷Ùt†icÅø…P؈ÿV4iÃA½ ƒ¡[äaÖ aÊ=ƒ¹3š¯:·½ÅÎQŸcy)ð™QËÿD›¥NsÅí'4Ü‹mùôãÌ ÆëašßøÉ¬½‡~ë8S‡|83ÁKÛA¢WHðãTP„FtXiàPÕf2ÀH+árZ>Á$"ã•Îg_Š¥H¾yÀ¥™±Ÿj±ÿ?¹¬V1É÷]¹·¶"ŘÓç«ÜM¼žÞ(!jÆ ¶’Î\;% H»{=ïˆtÐ]M§’%1Ñ{*ˬ/Ô!®pÞMÕ(»Á2îZ͡˳¼í‰pÙ~ðO¿ö;Ž7?è¯1@ÚÛeøµ\6 õ›Â‡œkkÆÖÁ(†¹^¥®RÜ–&Õ9ýq68+©LOVâ—[‹9<³ógf5‰ûûÆs½ŒÒä7u¼(é½loñ ·Œßœ©¤#êîœÍ³aúT{¢8êî$Ï‚xñ—öBøÜÔš^yÃÖ¸d0û®M18s±r:½R‚ÜžAIHñŽü°LìP÷*üÃ$ „#á(ˆq@÷ñ–ºÑ‚b¾:ux-!õ™§w{ÆÞE^CJ;*c…{KõŠ‚ð7Þ‡ìC9ýO={-s³gxø•˜Ý3ör-ÄU²ïlTׄ äú¤G&_ùèR¢òË1’bM3ßÿz·Ô»y5a®[ëdØg®—bœðžV¿~Bú­ÆÆL±å˜ªž¦Mªßß÷§Í#ƒ¹9³ïᜠ¢8¾%°š—DC MǸ¹)Õvÿ áB¦ 2}ÑxTHÛÜÐ0fb83ø© ®$ß]gå?Ϲm¼5­kþΜF[>]êjÉì~cCÎ2÷!¡X¦|>>…ýËÑæÀŒ wÜÛQV `ŽåËÄñûk[„ôX#ÕUöÄvµc1dº uß²Ë"éú€œý[H:áwheY{£íìÒ[Fàû²gJ7å0ŸÇC-Í ùh|ë †É±âl@~‡?÷U(Q®«_GÀ/dó¤ÐÏEúÔÎÈ×FÃ#ôõacœ¬c¿ÈH‰¥¢Æò DÅvS(oþ_×.Sر¶JyÜß%±òTcÔÖÝ–ìr†N”îÇײžÒ§zl#ÔÌñ€þ jÉÆTÑ7[[„¬4ã®¶nmD2Äu9Û„D“âW³‹…q¹L:ëÓr0¡k ^·§ë±ÉŒÀÙIIÇ/9ÝRe†“£u³œj̰}¢)ñ¯’ÝyK_®Œ¤™žp´È ÇÔú#Iƒñàÿu(YCàà¾#ZR7 keƒŒPsƒZE3žû¾ps#h˜¡ÖëþnÃOÌ››ïø\‚è#[¯ ST.!蘉¶Ò^pÊÁA×b ‰!vÒ”©ÀµcÏñÜ]¦ „0R-’£_Ïôôºü#îIµAÄ‚TDY¾±doÑËËå¯c6Zd„j©¡‹¡Yü÷ã͘¼ŽA› í\¥ùé‡zè#Âx x¹6Ýtñ¼¥ÔŸÀX†‰áI^a}Ï'u€@[sTÓLoô‰Ø? ÐîŠ÷Ær˜ÑF¡öiH¥ñ½.ã#W„ýæMEý·-ÂÜÚ~S^‡‚­ÉoRÅ7ˆ3΂¡10Ÿ7eœ—åÍ£"*”iàÜè³ë%MŒ¾¯n¸ˆøá"\Kû]µÔ«`TƒÕ¥þNÔÖÎãLOicoýÔœ.»~3r2—§£A°ø\ôlA¶Í3Ö†õÍ’qçâM‘1êÓº÷g¹$µd‰LÀ >g¼oës«í” 5öì³ì‰!ÕB廜Î/¸Ú °4J!øÞwÚfC¶ž³÷Ï'©òù¿œÙ?ß°°ÿn|Ù™ýÞg?‡Óâo•˦h^“·EÈ]çÜ¿õ”y»–u¨è ËíöÄ…1" 6˜¿æhÍ’*òªµ$®ó“,¦oc’¿1‘Âÿ((zqfï&\hY|rM^Ù ü¶©RÔÅ ƒâÞEÀFÛ(ªåÜ?1Wò@FuþvEðø¤ÑÜ­Ìð–±^¼ìV‹*}Bmz_•*Gè!ƒxÓï€Iþñô‰LFÀÔÃ) ïštØ%ìJ¥Û7˜PŠöÆ—# ¬•{Ÿ{Æ>M=e:_Êl y•)5ÒZHßðoÐgR+¤ø^ >ÖxÈIßÐ:mžˆË>$÷߯siúm9f3¬Ü ‡D” ë$&ð¢Ž]bLµæ¾’¨øc"6Ã]/óçúKZ9 —`®z9kñ}9N¨W7~þžS×ÈåìÚ¸MÁì8vsØ&LwJrHb¼ö¦m´åZ€ÂßU³!?ëž‹'ÙhÿOÑ.›þÅkŸWuκˆ¬8àØ -¦ë}¼ ý³;¦€àhˆ?W2®ðTè÷ãþ ¦D%›Ds府XôÜe š%íµ½W”‹—ݺ™J}hü¹Æ½aTìpWE:bÐH¯dÿcnŒ`Æþ…݇}b¿d\-ÛI$8§ìccÛE'JÅmª 9vBÍ5°Ìá3Kƒ+Ño©×`–ÌŸ?ÛéÖÝ!O:Zxsë¨xmùx­æ ¿"þ³dæl7®'õᄲ§Z\F‚€c 'AT×$¿ôQù˜°„ËMp䆌“Š~p g½<çteÓÇòÞ®ñánj¿"¸mTÔâ´HDõrúÅg”=åcacÉ]0ñÿ Çkž]¦ÆT‹xèɲçþ éõTŒ©Ãla¶$¢éõ…¨h)õÎÂÚêíxdåy\Á˜Puâ$$MDdÚ»Ú…8HìôK;S‡A°ë=eBû£.CŽ”L7!SXÑ»Ÿv5hrò΄©°íß è‹:÷.Bˈ³MŒËš§²Hž^P fåöü/‹Ó¦&¢4¢3Ÿ¿×ß\N˜%\h.úé …`¶å‹ôÊDÜÕ³¥4?ðã•Å´²²`õÚiK£æjÔw_꥿;9S>H×͉¬Z#\–\z‚X¢Ü‹%^r¥¸rºÀÖzÒeˆ×xíÁ3a9ü¡â8SŽþbI-Wö·“:L àr«ŠLC%­yh=Í€»kW™O‹:£ÊŸÝþf­2N!I¯4b¹ 7ñ¹Qހǡ[Š Ð.FM¤ÐhB"`¤…[ŠGÚzrX‚Ïõ):òádˆîŽXù›Ö^ü¹;ðû‹É¬u>ŸwË-#›a†e’˜›¼V<œf˜mÏ%„L P˜<‹¯‹¼.†=-þjºº6&eë$·ŒŠÐˆpé‹W¿A8yR–£|y-T°Ÿn^IbA ƒ/ŸÌ&¡…y¢ÉZÖo%Š‹%J„¸%"C§É@Ü/1RÙïyìײG+ytIÙm#x$ünçHŠ.T!ƒ[cgÃ3H5‹«I"‹zÓE5Ó<Ìl.QæÞP>Q×­ã£BÕŒ!êÈT¼ô} Ìç:*lc/c¼ì/ç]‡‰È1_G'GŸ¹õ´öX¡ýÔì¥ÙVk³Ôl¶àоM­¸oyjž"÷Ô’`Póh’¿á¾2’ D£ï~CÇ¡æ_›êã¦Vø›°kóÁÖóžÁ`LÍü  ÙÛqÔ$¨µËÜ « Å6òšXX­‘*R;ûJ8Tt#ù y‹Ræs,auþ8Ï0ТL{eèÓçØRxåw(È,Åp"â´å)pmeJ·ÖÒ¹rÍ[¸º3‡rØä´5ö¤(l?ÿ‚¸p¡[L¢Ee‹ÝïÝ\êhí°ç€=z€ç´õwà÷vò¾üý×!gȶ›CñVîb1"–ºtã°mÀ¥c áÔÛ+üÕ@.²Åã©9;ÊœžWc¯‹**£tZ¢—ã².¢š”£RxwÔhžZ]K(ã þþóôÆšÅH”c˜…¡€yäP;ÎДÿHâœcç’å™å•†Æ\϶^WÀ ø@Þ>'G&Ü[æMŸÛ\\ÓßGx°ÓRF¯ôÀÑ«a«3‡í¤K£–ƒÌþò2[Ýh!ŽüiÂæ6 R_™Ñ³•ì‹Ýq7Ryó â¸9ªSi&òø#|Ï“ËJ¨ŠúÏu* yä†P%Ó¿ûg’¶éÓ<=)¶¢ÇdCäËákN>bi³;€Öýzw”ìU 1ÿ–Nø8VŠÍVy½q¾ãK‡QkQDo®²dÐ{‚`Üý—úéŠåœðŽžùÏ#H除þŒÌ&u¬FAƒôÎÂd`¤+ï;E)-›xÌW5†«Yéêà òAŽóIšsÿÑÏßZö*Ôçkx¡×’þ?Îû­¼“%pþЕóúâÄØ`Ò±3à.šÌó«Y[r’‡s8<‹ùfãî2l}o@CAmài”ô ÈŠŒš0H´Üð:\›Q?’Ç:CÝ£YcˆØ^gƒhz@9ó¸ñ½Ã?9Õf“^¥ _ªŽ¬I£ |’[2^ÜüGç2ã\ÇôÑ…m;ýc4ñš%&BZûaêxuØÄõªoôsº„T—ø)pm…F$ì&Ù_•t)h}^zµ” ÍÕìÓW´2ªÿ}EÚXû\1 R€qfUôs0É ¶¢–vks´²’(q)%dX¨ŸþWÍ— “Ý[‘eYâÒ XšÊÿ?ÕíÄUòXŠF*ïìi´8eÖfꢈx˜/‰Uà#å2 ¬µ X5ÄþÕa÷jÇNX–¡»¼>ÉÇÄ6õÐúÓNFx†PßsÏô_Ÿóàb`¯( U‡½ ÌH+X+“®®Šyö}/"—§Þ¹Ž £n¶¬¶9ØE)"$2Î2¹lÔÉ aUõð=­’vÜv5£ ´ÏƳ+ûv&ÞJÏnŽ5oÓ:„šXJ­iûM±U| ‹×lj£Õ“]≢ſÍÄíÒèP±ˆg Fêæ/á¨ró÷ üxŠ‚{¬ELW?ˆ³·+_~CgãÞâÔ7I@‹®Ld2ýi嘯KbEÂQB|ìh‘nPBkÍ•ÚMÒ"lÆÞ‚ö©ÓܾR:¥¯L•i E߫жi°ðæýW‹F|+Ü£[Í÷¨à“”ÌÁð‡Mí z>`¹Óâ™ë‚ìÕ•§~êVÈC;×l$U¸oð2ÙN°D*ü:ËY¡ÈèÑW~Ðf7büõøcê…]“nH¨2H‹¼Ñ¥µ¸†Hªgã§jŒ„Î$ëâ@ôL^¨:k•SÍôú†=’ zÑ~ÇÒÕv›R©ìŽ>F”Þo¹.Ûe‹¦ Xôƣ誰ˆé³°-˵$U^¾ÿ{Ü‹šƒ°m½ÜÈá>ábò_ƒˆ’EM3o›¢äoíÀõÌaf¢<¿GÜTðk›‡fDÊ‘Ô\`ÝW ®åJè|q°ûuèâ}´{œœCœa’¼ÞcHºïÀ (\YÁ£^=›"ãÆBü?¡y¬P?0L ŒóKˆyš·<3üô¾N»}+mƤªÃet sIÇŠ’Ҏ窠—Ó jdD‚Ž.$þQœan:d°…ÞJ[ê¢Ý(Ë ûþ›{· ýàÒ®1®Î½à¦ùùF8n+†Ö³ÅP4Ñu¢û³é@ßAÉ&,« ÓŸûþ¸¸3¥cv@E+ßm‰¯eÃ\>Z¹™OÂN1EâÖ*_Dç$wÁ b­Íœîw×)ìÄ/k°žýSÍ~%ø¬ZÏ/0¦¤1iëÞ£g^9¢(€2CÏ\”.²9oœB9ÍÀ˜áfò ÐÇH !¯{NÕëè.4£ ¸tSyï‰ÕË8ˆÞ ªBþaíÈ`R?ž±Ð—gô.ô…z6‡?.²ú¦Ó¨8Ë ØçQ»Äâ.gÓ'»ŒY§k&dæ§Ñ÷ÝgH<+YOñ¥#ZuÞÆÓöÞü6èfA^ šïf%“ ɨCô[U¬Ÿòg_žá]±Ô;A£ç´6«îPÏ•ÉÓže¹šMŒöøg¯Ì/Ó%ufv&0' ½øõö#€˜êTa3›¶ÕYlIØ\î;ƒ¦Šw¥î °‡:ZÂß¼â-¸¿[—+³Ïm”ÃBà#˜ŽÅäáŒnÐÊB>Mæ8ç­ëªýs9 $à»—?ty+«Ù5NÛ*)¨jMz¢ŽIØ«ØhâϳÀFƒ„Ƈ‡êdÙ¡ý,¡v+jž€ jp÷W“ £€?õN'¦¡I½ï’¶Ð(¿óab¶ÏíûŸZʦJ±¼O Ââ‡2$ÄL‹PžÏ×pFæ£pÚÌÇ“BÑvœá`:uŠS[ëõt8oœ+cþ©—lÿDÞ$Z(B)ìdNÁõJHp|Ïù݃X^É›~_ ïÁxÎ_‰Ÿ²2¶÷Àñ_'ÙI}ƒ¤?š9½7ÌCo‘ =_<ó‚ìæSö- ¹µ¿soœYg•’“(ñ—”/aí£À^ññ¶'hjD9Â+ Ö@k9¼V3Ø‹ÐÎóL6ì¿7çyTÉs£™§µk!”m?Y Œ|©5)XÂëxmyPJwÏ€•‚%î!lùâcó¾IʨÐÓ‡œŸ¿yÇF×íO1çcjÐXƒh!þäte_ÒJC~;aÅã)ý¢ŽËŸ½ÓŒú$̶gŠçKØð±o9$èIíîš^°™Urí¶(©¾)ø*$2Ë‹)Gý" –êOp6?aÜà[“š,»/¯ú–zLˆÄTÄUÛ“Ú_yT‚yKÿ!XUø‰Z"´bÆ@cmtPÚ?R­ÙlVò(mÇ}Á| Mò¬ÃÛKD³÷1•ضyó$L‡2YŸï:5È%_xNÄ<Ô¯Ú-Ô׽Öÿ|ùh´¹ÅX¼ë¨pK‘Â&êÕ:+Ç]§KÏx"Õ»Ø=î—aŒpS~3¯¶†ìWœ^:Α)æ#¨ø¾ÿû ÇhÂÿE µæÏáxQáïÕ$rA!©¬•>åVë÷ÁÓ}È–FÎç dÏ*‚fpq X kÀz‹ ;TìÕØí@®&Ï?%Ö;÷´‡½¸ê ÄRSSVÓõÑ.š å™¾ÙUÃaµŒÐVÖu¨&?¯Îf-òrÁm}o<ì_2 ®ÿ^È»ÿ.BSeø¯_ª/-9^QQækZÎK~ïóo¯åžâ3<ÿxM9Ôp刭i²˜(æáºOÜ„¡ŒyIÿ[œ©‰!‘H¯ê öR!Tã]3 ÊŽþ¡íWA{û°ãÖrBáús‚ÅGÏMÿLuC±¢¤Îña1k9›¸àûÍwp•ézºWtù Lþòn@¤J‰ß7í?ÀÝŒO— Èûæ¸8®ôð,4b_T®ù»Á RÝWô×xy1+ì ,ðNåŸÝÙ ·•>ºÄ£fÓ±÷3 µÕ8Iõ¶¡š–L¡“奻è¿=¸¼a¿«Æý‡cùtÔ ‰eÆ›]ÑxÜá(¦Ä%ì੨ö¦ŸYgу|j ÈV³yt¤—TxÙƒ”ö—a!„‰ø°BÎmáM‡UÂY5Ç¢Õ¾ád¸@Q€2–:¤d?eXZ­y‚Ñ+1b=êDa™gši¹+Ѝ™à_¤¼Q¼ ¸HlþÜTkÅÈB®Â`Éh¶|3²¦f–q„L€2&½¿Ñúsüï1]>LŠa‰xs€r¡Â޶‘@3ˆ´c¯n¾Uj+°çW(A>‚÷68éªr^+Ãj„wD˜ôWÀq‡6ÀrºñzÉÕªúÁí~´Qn·Êà#¼»˜·J"R‚ Ô¤øC" Gð_ û?¬É[K/¨©^;*ó'Æ0Æ4>ŽrÖü€DuñéÜçV¶²H.}«bWÒ¥Îha½Œã'ا–°ÉÃi·²|{UXÜ#@ù Ê+’wp)TÔÍeã!Shó;Бx’ohžÌÎášZ_Jú>áfѾøÆxøÛU/ga Ó­˜¡ MD¦kТƒ– ö^ r§¶ŸEÂ,lбô.[—ÕvR3¸ª×¸KU!ªºJk¢M¸•ñ´0‚œ‚Uƒúi•ð™ žÜS˜nÅ  #÷Þê¨|0æ+àÄ2#;:Çõ-©ßq…=¥©h–a-Y#¦é§Ï{[íÍñË1-Óïóboh`Ì»ø¡àêÃ÷­O@õ“‹bn·9‚ÂϨýW³mCóÛQ‘c}-bÌeí¨ýÀcÒñþãÒ­âÙX3Ÿš¿am„pT¹Îi.ëèýL¦b¨á!~Ÿîh-©q1ÐèõYlˆÈ³ßRÎË'ó{(‡š o{A“¬£Œx*­sÓ †.úéaxд:¿Â9×r'«Œ³%[&Š-•×–rN„(‰›æ&Ôé 8þ|ñž*ÁÁ–Û|2'IÉ1¾’ãNOGõ4g3Ffò\$~Zô¸AÀ`~Þ"Û?û˜,ÉñÍA2"„—EÖú°fv#°3tè2‰Ë¦*Ñì¼ãƉ+“1¼³Êu[Ãz›¢;º,ê$>^þÛTc”y½²’+’u[M&‹E0:¾|ƒˆ»õ|ÁÓ0Óƒª‡zá_±½ß®Ž•R|êâûá˜b[{QXÌŽÕYÅ`©ÁÂiV:(Ù˜2æ ì ù&Ï¿^!Y’Š-¤ µ`wÍC{ŒVëE¼»LÂ]o9fPêfPÌ ZÔ R5Ç(ÛŒœ)™ }ìYˆÆÄ1Î[ÌÚQO™ˆ“§zéc `!ˆ–OpßÉëÅAÕ5¿•ŠMNæÃ‡)èÓ¶Ö˜ŒÂpáœ$»¬£%0Ý:ý­ïùfÙ<`„ÌKáh²k'”«GɵŒ,ðgžÄE¡„¨àòÓÞ`:‘iFxÙÀö²ò£:ZìD~5×Õ4†ÉÒ<ÈuÚÌ6¬~'…üÄÃÉ>]æe¡ íàEäåÌ5/Ó Açy} X˜žÚHè)ænN5žhXq~*öz Q€~ 9·ØM@8óà_´8/¥ñPç BÏèÁ„y G±Í5|qì'Š7À€*î€ù舘3Òi,°ðA¥ö@L0ý±¤Õ˜UýÄÎW’ü¦ì‹8…áLh*×Wxo0›âÊ×ß_ñŒF¦nu ó§ÇüL³³öo>âûù^ļBD>ö4ƒ¼o¤|ákß}@s;!áœÏf@a0'×›ÿ€›³p¤l Èüî®1“È!ð®èœˆö¦„5#ÅXKó¶±Ý±ð#4ˆ±Ã JKê2p;»¸š ·hh±*—ï«»‘Y¾h¬Îlo¤Ak<î{cfhì´²Æô= ×Hœ²^FÑVﯧè-ÈX'y¼Ã&¿‘Téî]ô‰$‘ëiOk…\4Ó­ÈDÉÍpË|Àuõ‘²c§Èæ7—›ËAEªmwú È@ôdkѸõ1¸)ê -‹Ú½¢¨¸¶Ïáqä‰0ª<¡ÍV€µDšp¯Mú´\5Õ{dó‘~Fd€,<¼ ãšk…šédG5o!þ&MqÅÊîôQ÷ýXæ©N¸ª¬1Âp}Uî_'‘3‘z.yÖ=…J}Ÿ%§¿^;<¬i¨Nð ýˆÏU~t¹‹è&ƒ&ëF ¾½À,«;‡›0™›íÙЮùjβ¼ }mj¾ÓŸKXíL2´Œ‰¤û†X\̘„ìöV¨ˆj—ž£é–•Ú "ÆëàD§¶?sªŽ ñ5»Ó˜/¢XÔ‘¡qH–+`ÚWÖ¥Gà(%»h™±œ flŸá>‘@ÜH‰ãç Ù(µÁʨ§¿&ÿn>Ý’~üB3 4Øé¥^6“ÉÿFš×6¢É(ÃZì_¯J¾w3 M‰¼^½w‚¯Mé±Clá’5o¦ñÝW/Xwè„û˰ í }s&2ßX7†ä?˜ÒÃe³9ó¢Ò#ÖT¼Üôúw†iÖÚÄ‹,J$9õSv2ds#•¶Ð»>]!F!¾L.”u;ŸO¦#í_¯ƒ~ô¢²²£s9¨ÔšÌ»;ž}ÿQñj§Ð•Uw)£ ÞUdÀHLÀ¬¯- ‘8φÇÛ ï6®Þ/0‚ª§×úiú’5il†^ï²'æ£ÆnÃ(‡à8-çÊÄk ¢b½6 <Í©¦‘UÀ‘0µ›¯3¯nb°Yð +Ü¥9NÆ#½†Ä<xþh:FQãæˆC/5IsI·rµŽu:ËNÅýô~"N¦Ãý#õɘ¾©.V‹Â­Õ ¬ù}>~§Í‚hÑ¡[ëÁ³ú 5ì*ÜÒ(§óë ÏëŽÒ»ÔX쀴™S ÿe§eÀTgQt†òn(žUâ ,4ÿƒÒ}SË}!›¤ñV!"XůáëÆ •T^=o‰%ãf†k} ^Xøg~TÕ{)3ÛHަ.y”ÖLÑHh÷˜–uÊ&£šòàÈTP]’ËSœ&ÙUõèZ°¹M<ÛË;͵ ð†˜Û³¼SxßÛJVŠäA#‰öìn J% $X5‹é3Å/vó°ÁœB<‡<—À#îª9“wYÛ‘©òØ{‹t E¦oµ¤Hø-p¾¸ÁQJ4 Ë:Ôjªië%gVíÓ¯‡ÅjÏØ¥Žm¸±î¼1_|6Áâèe\¹!y.醣&0`üã[XÁN ‰F!* †ÈÆd¯kîÜöí!o~¢FˆÉf«ÉŸCÛ†ä÷DååÁ=RB…°`®&wá&¾*Z`<6{„ƒ$ÍD;ršMn~?“HßC؃¼ ê–·9é©A/ÎÆöóvÏÒÉW¶z¼kPb¢Çœù£üez±Êò0túØŸ¶ñœÛãóõíä§_%]7—ò寢!l$XÓ³@F¯fÇÀ—ÕøŠWÄ¢"1UÂR®e E¿{P¡J¤ Kz?òn9>Yç^Kˆb6a®0=ÞͲîlóá"©ñT仵Ï*#öVHêo¿ÓIÜ¿i04o† àw å†qŽð—^µuÿ¬´QÀ=Ú¸(”ƒQÂ(åyàu?0"$ÙÌg.rJÝÛKÿ—yŒ$XÏ_úg‰yÒ%p* eG]NT5za™¥'ÈüÉ}ïs‡ÿ&¢Ñbl…‹Ôöq‡eWaéYYéi9-ú¾Ohëð_Òcà ‰‘rÿu[Ž9 9|±v~®Îêm>Тúa‡…мÙ|¬åO¨ýohûבòþÕ¥Ö‘QC_a“fr ¥*ÓѺ»Ü˜3ÕiÑÈÜS¬t÷c‰qaRéæì4”djã%ñÔ&3Ï1ßñ¿~ôy:Ûµ¦'4eæfx¨¦m|¥³í,œ¯ä"¸²Î~­Åöxi#qq>ƒÙ&VírÌF†¡÷_T8ÓþÊÑØ8ðCûdbô¶}‘V 7‘»Î9tè4òÔ’1>Ó<˜ôjÆ2FgÜÃÀÌát•‰ËHÛH»äž±Ð ÜG´—–²Þ’î;ï2¨øD4ɰìúån‰ïs¯ ²ÃÚß%®»‹»ŠSUxì:Ëüòú´ÿs}ý) ¤ý}(ÍÅã~üïöhZrÿyèÙ¾,RA¶WTÙàj{{ÙjQÆêmkßðu·p‡*ëO nôäö 7¥œº\W¯}­*w5Ù0ÑüÜúÕû}°(Aq o}±ß¸#k7¥¡îZ¯L>KÉÁk¡†ÐËSaá9ØqÖI$á§;p…öÜíSÀȨ¶7\г*ˆ ­}=U}n¦ßßU‘˜Ûø} ±”˨‰TXîèÆ¾XkaPPŸÎÌ·Ÿ±>[Ve…ÒùȤ€Ò7#zÓ¦éM9Ÿ”p‹…wqžŸU_9Äm…ÍþE¼Ù€LÚ[Eβp„ˆÕ€mwã³÷×`ð†)ô-hMÍ©Ü4K‹Þ#Ê×PR·ó7…~Naƒ]EàHü†ó¹F}j-Û¢B¥Š ¥ñ£±>=ïDÅØó\‚šh{zd¿?µÑï?Ðáûw{öí?íîËöé®ճ߷}or_·Vðý»ûwŸö÷ÉûuDó j”JF;7dÒã¡Ç‚ü˜Þóš!?AÙš€×È[B^½KUÞ¦Y?Ögž^$FßÑIJùè'ï!Sõ,ìþ´m¢Ϙ‡~4œ³ŸuŒŽ½å½Ú׿5´›Ö&û1IÙmRs€O~åAþ“e£õV 3ù–]`D±¯gI éîÅfêëã)0K§&þœAG$Þð‹&…$ef1l ¢¯@L’8i9¶: úÛ²q®> ~Î0â¤äiÊTo‘ @O +mTü\†\âm½…è¬aäkü]%±Iønj`;Ï¢êOÝr ]-}</1F ೘“©o>}7pŸ°l_;D‹Ñ¬I†¼ÿ†«.ðR1`ˆœ¯»Ôyž”‘ªm¤­â1Â:`M5L9ó$ çY]ÒX¥ÃˆX `½-k–±ó† XÅW T¦VªŽFÊBº  øx=©£âÒÀ>Þ‡]½þ@fÌ/fR ª–R”¹3hÔÁ!(kOO`Ÿq¸B²7—·Ög³ ‡q!£Á§ÛÉW·j¨g²€þR’Å"ª…‡g@عÃ=àéW}’"kà¦15ÆM3Žõå*ò¹®r´tÅ‹<Ï~dé½3w]ü¸VËPh¾ßS†2*ÿD‹ ´šõUXVg8­”ÙZuúxÙ¾Jä§‹ ßÁ|)Þ,sÿVš OD„GX–¼åTÕ\·\* Ã¯ÎúdØø8œœ=a7Óò^°Þe¹É.‹y>ËMŸxŒŽ)šü&î&"º,£O.ZûCníÌn…c.éÿ ¨ËíûtÑ+ŒsD@U»ÊžòyŠ€“wŠŒÚ;È0©Ã²ô²ÝË?ŽÍ<]2ïyêÑ‹')àdaÄg}úh‚)4™y "ÿXäV[Íß”¸¬ç…â Ÿ”ɵzÌ#–zµý«Î2ÛÍ¢ñÄ¢x°KšW³­ùoº˜P[-1tIˆ‚–ºy}uP—ølIšsd˜Ž¥6¹AØq‘%aM<¡"ËÌÅÖ[T¹j8™>SCäÞ´t¯éŠ“Õ|I‘‰‚éwM¥ˆQÜX0Ãl®Ë|±¬ñºö\âÉQl†šˆËÍàã`†„o94’¤“–[4º|ƒÜºC2þõ0eîç¹'çÎÅPï2êÒ5 Ò1ÅàÙ'¶R`šì$Wo³âoÂÍÙ|.mBDz&ö'óžÆZ¯Æ†]– –`%V³úØ|Õ²‰Ÿ‚Ꭰ:¿.¤¨~”aþ‡û®Û‡’ÿpcSúªM„yµ:—›¯M(גּð™b:#eC¹iîFS·Üß3‚„_³D? 'û˜ö4É— :>ødÄ Žkú€pAM³ÒHÐÞR…Cà+ïsšÌ5Y?"/é$Ñ -¤#Ü/(—#!,à´B¥…FsÇŒVÊÄõüÑRPrGîÀåü˜ 'ë²|Ai5/|à”Œï5HÞwÅ \…OG­2ÓæüÈUZõ§éò®J^ÿE)ï8¨Hæ ›9ç»þVµ!f¢¤}]×\UpÛ «A“¯8E¾÷30מ(ÏÓÛã:³'>2å«<pÔÈyžÒY×õݘ6x¥IC¬Ðq°ƒÐ¡,»sú ñÐçzG2 kÝhåUúÓ¾¹e~ÄkNß•åë#Mñ?ú70«™PŽª<‚ÿmŒðˆÁË*8.©EëŽL1\æ³9†y“qØË¨|;AÖž+rh¢åűaé(ìe0Ž0™4&$—Äo–K¸oˆF"Ê"Ó&‘{Mawì?|ô)PqASÊ2oü;ëÙ”?ª¯â¢¢«öAlzïbôN\F:–r€Q¦(~’Á°Îâ:Þ)¡}Ãgz ÊAoEŒ§(‹‘5wëY"@Þ&q8’’ ÿQ^'¹Ó>Ð)•1F¬?×qan°ÍÅZ»Æõ„g `Ã˪ì¶=½àw¡„Éjm¼[@ÖºGjIíPÍ¥;DùèÓ“ð6ª(à‹:õ¯[ýtÓûÜ¢Âä3s7¢/)AÐk˜,¼4²ëœðœ ;Þù9™¬úø›oªÉšpÓ`Ìr©Ý·z—ÏkªÂ@I G®5ÿ ô"Äõ£GSW-Æ´[º•üœepÏÈšdC+åB´».n‰Ê‹R}ØæŠp…ŽuhZqÅÎ}lh-CÜÚœØò+ÖõzŸúàñ²Päxf3Z°¦ãŽàÞ·ƒFÚ3n‡'çõVòÜ´™øx•@¢¢ÂÝ" Ç,F‰^æk“aòÐä‘×¢_*•ysþbãr^¢Ôh_\¨“òË¢¡}îÒ€ÿ`RYÅõ"IËÚ íÙ¡¥•¼Á}æó ü%Æy°©º|f¨à÷±©ž¶R%óB5zštÀöc¶¤O¤‚«šÇ/¯\×’|ýùß-ƒ^#ëÕù‰n*馡òb®Ðbj÷í½¨‡Ú†ØJjÚ7–ÅQ | èC7/8St© ŸöîYE³•¾°]Ç‘-¶°¼àvXˆ´Jµpz^ú†_álRˆ)•±+—¢V2o<æG*w/‰Gn:Ëç".„dëLŽb¦Þ•}[æÁŽj»\ÂãÒ„¡á(s0ï±d»ßnð¢Hyê€Èe9Ö%KÆnRa[ž¶bbn¹ Ö˜²‹ ‘Ë¿Ò@a\ ÜiÎjWN¾ìJJS”z>øzÕ¸m)‘ìE¸WØÇ‹Æ}¿•2AÊQ|(¯(LõyÜrîR«¡e ¸ND%öôòå¢Â•gZ–H³V<¾Y¯Ç Ì÷×ûV‹9›–{éϸiPEÑtþ¦–Ñz÷&I6èD(Æùå«þ_@s"´‰aDÍ%ÍõÝú2Ð)ýä¬+­qZa8€å’/DÄùœµbe {ñ´síZ1îjÕg/S`zƒ$Œ¸KjÚä•eïÿÀÐÕTylÈ}ª"ƒÂŒ8‘O$ØYâB½¨¹A?Ø?hþ¥Äqéy_w(‡³ß«8„ÑÔó¨~áÚ¶£s1QNöV›r:‹Þ²ºóc•³ðBg£ Y°Ð(Nˆ5(c÷}›φm¿+Äâ2Ù¨„ Úíe0v^ˆšj&•MÅ\Ãòfõçv¿ùü¦¶ õ#aqôy³ÎgÚ’bË M9ʹa醇ÕÛM±ëá=ÿ<7ð8°=*ô-¬öÛo¥ i2‚ndâz7QGˆ™¿T[SóŸI6ï·÷B|cñO…‡)i§ úºËÈÂð§ÙÂÓ ^îZdà3´o¶Û¤`œšŒ;ùænB˜ òŽ´âØ #·? Ó ÕS(,iu )( ¢ Âeú²âÝS;‘SÒú°Áü÷C_%¿?¾|¬@mªbäŽXð`w²MŒ(lio“C–)ÀÑaÁØoƒvà:þvŽsöþSiLØú¢ .c;uŒ¼‰Ç@ê‹ô‘6ÑŒ¡°¹ºrËöÄX.@[ás]ºHJ<ð^:…ŽEÁø RÅ@½l··Ôƒ¾ € †dx>n0Êb"à°NxÿqšÍ%Å ~rw§‘ì³÷ÇU# ‹^ÎUEkæ¢Sõ¬-Òy[È‚Š}r9«sžs ±¸ung¸ö M¬¨ˆŠEŸAéf@Ãm½+Qm8VUµyÕAGÞ*7‹!–“œËnjçf#=.÷±†7f;B°\5œvŒÀ£¯õàÖ•¨Ý‚k,­O,;ƹjÇσ^gåFëGù9cî"Ø]:„8"×5Ð¥zøéN'æ&OöèÁ! ™²SäõÃÇG˜)d1ÁXÅ^sôam—ÒI†Çp±ŽÅåK’LOÊ NŠn#˜˜cèµ¼üä2²EpDC ™·˜À5„Ä©™ÚÐ0Кê¤É!'9«Eú•¥x‚üˆ‰¥m7j i¸³)¶n×Væõœ4úV[š¾-S$ ùÀ± ç¢v9üôW¯Ï«dÿ ‚" ËxpÍ(<,·.nÂ1¢ ³¿Õq¯`]Ca´š:­€°.a~ó>™qüGy®_ƒÔM= Á7B»FšÎúXæv–´/úáíQ©à€‹N6ö›ÝSúÍé¦m+›ÑùÏ¢Åõ3ôaMØV•¨»û ±•DP¦µS™±˜sÁ]ºÜ[í©õ«˜$Ot¼HyåúãF U•‚¨ ä}?xsx—ïI¹|ÌË÷§´ 8u€åNÛÂH<m­ç•*SÛ÷¤¹®âî9ŸüP‹»jÚR ¶U‡f‡‚øñ¬| ¥yøþÕ¹|î\÷ÝŸh¢ Vןw‚®çëJ¨~–«:` Pët¶øØü­ÂŒíB ÅÓ¾&ÝL©õ¬UNÉc}À9zxRàÈ&8º^»p#`Q\ŽÛ?—/Îg$~Ê¡!ÅgTÌ'Jfô1jÏÙî`òÌ cQ ÓfÞ91j:ºõ•9Žâ&c›Ðí4_HV¢sP*)d‰Ð‰Ë;ÓR»ð",«†|á’C‰ë§¸w©çȲìÛ…ù}äM&Ûl½Ë^·?*ö!,jcqÔTõ»ÝG›ÎýN¡-r+üC‹×Ó¹×ÓÚ(ç"Ÿ63>2øÈ£¥[”¨SÒ,†nç¼>V`Í6PEW(èÈúøÃMküBãj8gHšë;ƒw½ºh`W«$ñ’=c–Ž1¼Ö4„¬—O?;düÝ+kª´’%÷­€G^ ¸Q¸J掮ù︚F æiÊþƒ;E+yô#¥¯q5Š^Ð Íîn$©ß=ãú†sÛòx‰±Dß§ž»,„±GØ»¼ìH$„N簾Ä=A|Éi‚¦~ž÷Q?&_œvEW4 Y»ŽÎx+-ÈÔàÔÎ{:™Ù•Y\¾—JçÁ7æ¸=ñFN$ZêTî![x›†ëĪHÈú-LOî±»|b$f|E Úúnzv`Fr°ÅvHŽªëAÊ!MÈûßd“é0“,ÅòaLÓÊo—G¡e±f†ä­Ù!CØ;?+…ÐÈVºù%óZLd‚QlŽ浡ReÊ, ~²B¡ÐÏûÍL’‚H «ˆ“ûM.ÝÔ¯¹œƒ¨?›÷3Ë݇ߖ(:5BŠw87C;(¿¨ø ÎyBªÄð²åððØzÁÏÛ"E£xÝ?þf­nT‰ÝÔì>»[z‘AZ9W±sVÈÓxšXX•)2–$GV¡g6Ññ¾V‚ˆyæ>O~øôr!EX¾/¼#gƒLÝ"à zX–Uiÿ%Í“ªÓtVm\ &¤Jðd„ü=މ–un[Ð0«¶'ć°™ gˆ†ÂFbsóÄî~¤‚J´ø¾±Æ¬ð‡.ÁC ¢ñe°šH¿ Z0¨µ¤O\ðb4A³¯˜}ÆV›À>AÆ&ü3Œ÷aíVÞìéÛæTü0ìyòA¢–³ër´á0â‘3$ßaB«Ç‡âæðüµ%Ï€Sp¤7ÆRÂß(ÿiÂEÇ€î5¸è.ÑogË Õs<<$”‹yt×þáá5¯Äc¥ ó3“(¹¦b†c)Pz&›¯Fò2ûñ&DÊ"ô¯W‚~£ ù8úL€rºêâej—ÖÔðœ;3‘^Uõ€Iˤ»’§¶žØK¯A§9¹‹çà$Ÿš ¡GŸ3ç6(ÞO{s«‚‰`6e½†&Šáñ&Hþ,B˜«´’DÁ›ÔD¢‡ŽwºªÊ—úhFû Áî±×èØ¹éÚ€\\È“2Š|"DYAsùŠ6ŸÕÌžîÉ„“ýâë”ùöøWu4è…L—óµí#{' $½| ¶Mop"”ÁªÙ|ª»ƒëÿn( Ú„­¥Œ > -½dàþÂ` ©{È»0톭輌‘Aûüþ•Ûõßôü™rÝÔh§p6–ð‡,ì ¼ÞÙ€=Ü~Ûjk¸®§*œb¥ÙØèï!¿*yš¤þ653{örù]pså}¾X=o&îLOœ>u2ü~k½Û¶¬ Ûb4äy%½Há6ñl@9 Z-µEÀ¤£‘žè®äKÇÒdð0h­¹–/‘袭½àpÚ°2¢ŠÞÚ~C»gmg(ì0Î3§P\6rŽ0˜¹kp[–Ëê´'0ͽµ>ËþG  ˆ’è¹mÊ-ã5]'Ã3)ÝRO"P_)MI0#¦ZÙ†÷áÞþòP3®ææn¦¦yFatš(æ(cL¬ES½ÀÀ‘•©vÝ >%¯ÒL“îb”4ûfâ)_\Ðë,˜‰4žÓ€_£ ëBÒ‚ŒÒ>ääá ¥ã2™ÅL¹Î±æŸQ í³2}cà‘’Ü þ ›{mL噈°…×8ÞÄ ßL™Ñ9ú,tå/sMHÔË•~ö.W¢x.£V­í–ª“͸ú$IK´ÀY°±£©^‡º½ªb0Á$S¬Í–;ñxŒIy f›ÊÈÞ°¿äš8aÞuרu1Òo3.àéÓëX7ø9HÜ©úó8 Í­Žæ:„5ü¾»£m cA_ù›º,æÈ¥¸w½Ö)ÜiùPÔUI¤£Çm\×k^æï‡lJŠð2ªðáU…Ôß<$¡Ú~IRù™;½b¨/=7çXJ CôŒN+’ÅJÛMüwkê–VÄö˜Îq}³Ò–ê-p÷ Zœ ¶ñäª3g¥6Vx³Vç)¥@¬þ&Ž2) cMþbø9¦ T_tqCÖ¼ßiîþ<;´åGÀ9[ñºPfÆ Å$ï pç®p# 9ÿZ(+¡æU¶ÁÒ"[êEo%'KÔh ¢Ô^Ý»Ûöðlï†Ê²x TØ(%í’=0äO47ÊXœaCÂ¥-§‚lèŒëÚMr? ã#%LöìÀ’_BÏ>^MÕ–sJ@:6.ƒÊÝ·­§ mû~ª¨0+M\I`Eþ‰é "Ics¡1Í{©[A°ËÅ5ʳ‘'Í/ƒé3…•£þPZEÜÞZh”RqÆ!l· oXØÙ@Aj²CˈúeD¾®:²ÔrÖš*êžðø%Ú‡ßÜ»œg=ó7~öb±>ÎÃbv­mr0c]«|=v²âõ¸ÅËŽƒväð®yikI$0Ûí\Äãoi„9"|Š\1id­¹Õ‚^GC’Üó– (ôͧƒL¦y?ÃÉ=Ë?Û°Ân˸DÓÕüí“ ä“°3:޵¹9Tfÿ/hæõö'éXyZ˪|è–cý„€X)…a_ŒôGŽºsvꆙ³m2\Qñ_°¾U©E`™G­.ÔÚ8Ò‡±´Lhá˜tš™]‹¬ oíIy Ùˆ|päGM²´…¶Ð îþ¥úý¡‰S=¥F(Þ¼qûðpøAIÒÔ gïpkp¢:öZCŒ#²Íë"öhšÌ ”ªC°weŒj„*)õ¡$!H˜S£Þ+X¤X˜sÙö+@Т[x ä ‘§ì¼›Ð‰e_¦Þ;hŽ–öTÅ7cfhÕø¥6?Q¢‚/WÒòs' HÕø$§ƒ¡¹QÁ:ÞéB‘A=À‘£Ò;¸úHLÎøºŠã¦iÖ—=ÌÊi”¶²Òs|ýHX±OÌÊn1%M Élc4 •oðz¼.cäñ^HñŒO}öú¹Q«´NLʾ#–Ó,ÓBæ&;ßÑo¦—~`WOiɃ2/ð¦b5JöA4üˆ-Ÿ¡8ö×VìuÂà³kJS§Å“òuæÿËŠ¿“¥X=ñ²sé9p­%ÔȉŒcöñ2å†áîñ½ƒu»r‹˜»ÁXz,nùÓÕ08×D·«?Ñö HïNÖûÿ ,߯öá=ð4Â-ì ©Ì¼OCYvƸµàüÄòŽ'Ý\ËÛP{ —DCôM'  äÓ1…p&Ã.YùõÄÖ á}ZÝ}[Sû{n¾­(Áúµ õoOêíkõj~Õ§·|ov?·NÀó Wèlç Õ†n %eƒ®u/wC­‘Ï"ω 92¶)TÓ*z¡P䃊Æþ_'}'dWa„;jaá„ |ö¡3˜é¶œßXW{dîÙS^Ò› œð).qpHÁâ©`AyÁ™ÒæØ@|¬sC½>ò(’øþ5ý½p•©‘"yጪ&`öÎB»J?ÆèÔ¥³©.tëU)‘z«ëz¹Íž²%'õ¥m †9¨`ç¿y¦*ÄÇKàØÄ‚™¹ä‚ 5Ï?dÍsJf#©¡nˆ´wb¹A\“Æätôòß=ÔOýÞG˜™Ï¸³|Í’¿U³ú L6RR·sÛ]¢FžüÐm4%.°íÐÌþ­­µW(yH €½ÖêC®Àd¸;©6"v…4ž/®ø¡n/źý¨µ»»ÇºáBS³´“pmߺº#£¡Tzvæ¹y§(6*Üž6"à u·ƒö4h‘:{LòºZpqOeÆå¾ŠÞ–K±–˜žŠSC–¨¨Dp:3ä‡\qMn&CÓ!”Ã&I—?V]EE17ª7ï×h6`„èÓÀ¨ŸØ;èt×à‚~3ÍìϤ21ànL“(Ü¥öÇ…ê¨af8cm´Þk´7Ùr€Ž4uÅQŸ¾é‡q(kà°ý×w”\.ã-JÆ/èN2𔽻f}»ý'Þ™‚GJ3@;ƒ×ÌOvoáZ|¯®^ìÆ~•ÿ ‚¥âóš-I¦O¸™èlæ`%&tÀóLÂ&ŸÛ2¶wãOî9”Ä·n÷½¯ºïŒºt‡5š” %"hôž`„Ô驨OKBï힘çõËï4kŒ.á1 á’;(ì5întÈÁySØ„œéGºifQl9ˆ€CH&F>2Ô ¡½hd+'G¤ÈÄ7òÂO }J‘«Æõžuᦂª$ÅÉ9óï:“κÀ„××Hç0kXªÚÀÂcÎñž-/ ¾¢PdÇ\=ÀDOqÆI¸´z~$èÚ½qà׸à²ãiZ¾M#¿§ 5”'0D†õt..®–­….·ªHµ¯0c!lSNlbàüV¥óo¨¤2“1ÍÞv„eP+évÙª³lj®«ŽY &5FaÈ%Oå^¾>Ù”!wÌZfQ¼wϧà›à$7ú^í–|O!‹”IÑÿ}+²TÇ+w»J¡è&o[Ý©u¼•’ãiT!jCÎÇX_üZé”kHa-¡E)³%ݨ Rø†¨üŸjKV>¡ÖéN±‰Lq ¯µ€h«i»wÌENNaÇyY¹¬{Ü¿i5©lä}hÅD"a‚Æ–÷e’°8¼JIÇv¼¬‰ eü¦±ˆ}/¦Žór<¶§÷8þ²òŸá=ï: ɣßóh"AôÑ"1¥4‚sÓèžÊ^Çdœ¼Å¶J‹´l-aYæ•è*¿È…Ïêßo¶ð'0od“}1ìn냧A±/F¨vÙß]Ô?’L¦|fpaåöîg`þT[m°=å¤ÏSRJDÌW?Rñie˜+gÿP‹Iº'#é©D¼á[·Ì«Ì›+´ÃËŸÙ NQ‰ó$F¼Â!²ÀyäÜq£éz=…ÚE·1ë{WÞrœ-ÍóK½ÝÄÐ ”»âÖ[ ò_û³Zx¨ãE‘3¹|=?<‰q2Ù90Ф¾’1GT=‡¾:›®{{Â%ýstu^º’pˆØŒƒT¸ùkÅu¯3ú6 lƒEEr©CtHáOá žHÐUÞê¸Ìs é®û¼xTüGCÇ!à|$ê6 è<å%—ñ ϱ%Öz¡4Ãæ”xÅ»ð¹Ã™®(¥v<µ ›OˆÁÞšÌý÷‡^b±O¤\÷S/ÎÙ$¢SçwŠ¥ç6MÓFÄ“lÐ<>½Nsÿ)¡²ª)Ì|ZäζÏ3ŽJ1,þO˜¤¦þÄd2 |uèÛœ/Ìž9šòà›Xóið¿û…„ +”O>®ãàÒ½I(Þ'U»É³&¸åI‡Ó÷âñä‰Hϸb)-à °}/žŠÞ9û„ãè‹ÏYIWwÖBØà”[õ®²mÏ”ŒjY ÕÛ'd(st HK•?r8Éò&×Pm»oÉÚß-=0ŸFñM ?Q§-møÈqa̲§³˜œÏ0“­2‰tŒî+ËBC»(8jY̘äØyÒ•]§²f¦›6h>¥•tØõ!¤á _å”à\¸UIúMøI=ÍÀÙ✠|5 ¯*ÏËßtÊ çÛDŠëãšã-ïTèÑ÷TEÏešs}V­$+šk€æ3CTâñ¨š¿±WE ípi.R†^Hï•¥ !Še<‹g§YËeêH±Ú£2°:×éñ!à‘B™ÏðÕåÈW&çÂü¥=åt/—mø,, ‘Îe½`䩯Á9bû¶RÊÿi«ôu²ê¶vpþlˆ¡±MOŽ´]~XJFjÉZF¢ÐÍ0%J[|0þ®³þ2!ï5xbpBNᤋ è+Ÿ«‘›Ü®‡2+Õ{\¾ŽúO*—õꊫ¾ÈþpHKÑÛ…Õµä ¹ùüŽ hŸ›r昇ªÁ7y³9w6‰‰m€†ú”%y9×i"2´­u?EóÅFã›%ÑçéÙ¤‹ñ”á°¼ÈÊ¢>ùñŒÚ›ÞJâ Þz§FªÂ3›­ÓßMž]¦8~Q@;}Ë«øýâР,‰qïõm3û%>Ô„Ò¯|?­I—Í»Ý`‹: ŒìòÔVZµÈŒzÖ"OÐjñî¶²˜¡>èúC¡6ê-¡é ¦sú"u>(_Æ Ik«Ûñ¯ÿzôÞÕñL~š^”bâC†êÑ;¡ºw¯p:e€Q#¤sqœ"‰H¿‘ é2ÑÀ2°Ö•ˆrµta¬[ŸDBù™Ñ*àÞŠF üÎ0wä1S¾,A%@2Nð%FDê7’ÅdبTW ²Åû­À„zó…û_W¢-ØXmÏ2µÇ#Gp<Ÿáž'îñ‹CC´e —ßñ˜Áö$_ëñŒ­ ¯*êÜa•Y!¾wCšÚÿ?–‚‚À Å6h¢ZNVíh´˜ÁݨI¨’­·/ºçÉ=cjPºdw˜¿ç)óôž¼-r*idù?ã$(ÊÖ\*g ntáHËq>D³¿èO/uÔ&Áغ«»¼?u1^ÉUÛ,L4Tòf2ÆHÖy1dR -ïê•‚vB» I¬!„Áï+#˜{^âχ­»3të¡®ÐÝï>2ä}%v.ãùPë¬%›<‘¾I@Ö¤Rq…§$7¯ÍFÚåÝ4TP—¹5i¾Ì$G>é µ>G-Q?‰\„ªK°Íë¤:XòhÀλ5o:³ø‚Hªš6V3ã5žtb â¾U¯_Ô'÷ ú¹ÿ hÙ³"ƒžûŸx_Í yý%†–G&¸‘ýÇ*œ€)Cý5i¯6DÖ:Nñ"¹²’¬äÁž±ÎÄħß>žNZÃFÛ0eÀ¾ŽJ jƒ?jy/Í}¡TRìÜ~@ÁqËeEºý\)&-퀪Ûýsrëã)¡¥ ‡ 6ó™$æ§Ö‡“—uGt¬‘¯445¾„¤ÍBÙÈë°ÃçWí¢ÐÀ߈ ŽÈñÎçh¤o ¬fV@ÓLÏl¨1ItìN]ú¹çÚɘÁ°äRÞÞh³Œ)2[¡Tcå(UÚ™ ~™àå-ûþ·Ç6½Žk¥–þ¶ /¡¿+ ÖŽ]¦pGpkKà*ÉÁ0qO^ûû@œî¥CZ)Ù>\J§ç™sñ.`1L*—9VYH¶ššUÝ4Z†xJæ_’N‡Eß‚Px%1`qêkMºcñ-M\ÉAýæXrpèu©öc¨)œÒ.`o>>ðÑtÈ@3ðÉt.Ù÷ ‡6ÖÙêÃtiŠÉ𘲦ž©`‡ãÞ]ý­Zì¾?#t0*Ò|ÝñÕCÏ­Ó– A툾<«ŸùýaR þ• ¬¦i³»é_¥ËíG¢oì~/Ïrnþاàh(øˆ>5ŽZ:ta4â°K€®‡~ð:I-†ÄÁ¹•Plæ/-ÑÏr.2éQ?e€3¤õ‡çwgÀì5Ho&YA~@ÿeWÊ Ìaͺ.Ëo ´·UÍl½;vNÙ?+ž1gÕ9?ÄÞ6¯ïº¥Ó É©_@è†ÒÞ¥ðÙl Üß«¬ ï;*ˆÈø“Å…ÿ~Ñ(*_ì UÒÈ2½6Y)ŸdOnÕhÂO%Êü•}0ûBOŠ=ÿ+V­+’Œ™ÔJ÷¬^œq¬•Ê86Š¡4ŽýÜØ]üéì0µµwíÒ˜ÏBÜßê¢CÎ ômn`ý*)[»˜ë‘1²Ž[ p$EÖLÍk«Q`—À“•˜YQhu F`«„È*±!N)ž±ùÎs(À3Ò8B)ŸEÛ0ÓK;ß±Y=ÞË_ˆjØ›qÀA”Õ `"\0&Ÿ¦ö·ü†)d9C&Lâ[k|¡Y¿ûçb|Æåíú9EÇê´ŠÃE†N^¼sгb…)wÓLÑ ¤”[1 nne ¿\Õ‚ƒœF&ßí­é›À©#`nº>±^nîóµœ~2å%Ä4¯dmgŠ–n´Eâð|2ÊÞã5oç 3y·á*`ÀcîßA›@sy›m¬Õ I \•Üè Ê‹ºtè•• {~b·$I/AnkîDÁ4Ö†sQ¸×GíltüìWN\|æUùï¢ÿƒIÚoŽtLu¡q3O騦!Ô|4Ë´ ö`Ä.h­ÞÏWK©µiÇà/¸tY &@ÿ†ò.g‰Ž¡¡‡C‰X&Õx÷ºÛ“® F¥*²Nð«7ÕžÂâ(ðB!4¹ûänšHhK¡>; î`ÍoÀÔUœúòaÁÜ’ãÖÏ'è³?'4iáMaT&€nË‚4µõ- ôòÖHH¦íÝ‚®R>óó„q@”ŠYVí®üÃT©sr›kbmD1b8ßbŠý†`Œ1Ò†Žµ‹½Ò[™è€•°C|«–ì2öâ^§ yçayñ7U-±@µïëºpÒIøvÍÍ•õ= 7S³-ôÕä™à9Â*"kƩ㩙üøU ß~81¡µ8P(‡šµ*.æÃ”Ð_XÅ“LÔÙ¡ª~¢ÅÂì2½–ΦöWž£¬¼Õª§e¿oݯš4^§§ 9KFlkåÙ_%=¼ ùLvH®¾ÖåT4z¨ƒ h6ðqéS£ ï|ž23FEËÆÔ‡'õÐ8GäîèP‰#¬u‡5!¶oH¸Ê@[1`,ñßü߯çGü'B ÿ/Á¯i‡ìxÌ(Ò¨ºžÓØ~7?õ&'^²H•ò W øï…³ŒNÝkzö¤ ¾ Ñ«Ð9¦f…žn,‡¸è·l¦£ÂÃòØFµå»öüÕŸ(=ØÄg<ÈãÇH<Ém+¡Öÿ ÎòÏ17 /Χ¤ Í%­5ºëh§×îSªäH%©‘9x¾Ìu¨éUÓõ•9ìA6!± ×Rfj`†òÈÈO<ýÃȳÞ5)>é'v,Ùú^[’¥4=㢞Ë9Û± µ×H‚Ü®ôA¶ Âv4ÅÇU,$„zñ—§¾«ÎtK9 tëL á"攚–h™ø4èè9à)#¿õ“!c2>…0e¨aÂ|\‰!+aa¹ööÎ`X&³l¶ Ê2Ù]Dú~s>¬?¬u½2šPžÖyºÑpú¼±P£9l­~àð€:«j„ÈbnÛì†ô†ÝÈlÇæÈ„:±‘ýLîÛùÑ„¼²7D/I_\˜]ÍÝÂMqòòL@yl V),0Ô@'î2â?:¨<ýƒ˜ AÐ (ß-UûÇ&€§? 2Ù©ÔëòªÛnïui7Óg â?=Jp + Èê!úk•A—ô8æ²ɧê w0.EéÄŠé+¬ù¾ᔇ2«ýU]–5e ÑÌñ'ǯ4Øér®hCé5–T%iÁe0ççeï„ýp¨¿ ÌVÄ¡¾o€)ˆïnVïõž+qÙl4_álÐëZMíqzò¢¯ü¸ Ÿ‡©Ta¡ÿJÖAŸgÊa.É!œ$Š.´.ñ “¢’ºmõö­lï:@ÜÍ6` 0#deH…û9î@¢ê'Ò'cØðÖ{ a[µùþ\Ú^÷ ?‰/ßLÓ›JÀQ>êBô‚å‹yù”avƒ¨wÒxÜ šå—©Þ¯4šmεà(^z9#ü{P5ªª®sÈ¾ï ¾ºÞaÀ;6)»î¸Í÷³žt§‡e7»Öú,¹ÑuÙÆŒfåjßZ”GžÄ°ÃúÏÆÅ*­X©Õ¢ìGãÑyBVâ¨mÛ¼r…ã–>èqy„`ÇÒñÏl†ΰÏho™“ÐtïΕŽçÚ­šÓuÒ8ó·ô@¸„ç²”œ¹§jÓå-¡ äàÓÌn ³Ä¢î+‘Û¢¤nkd;µ‰Ù<®kñ€]&&î/ k¨yhÂXψý>‘›Ý‘_’e¬§ò̳ˆ‚–ÁjNº"9áËÑuâï¬ÂÊ»5òú¢X”BÜ=–lÝ¿nìf½œq -£Ÿ%îÙkrª¸ßuîpu;Ôr°Qó¿ŠÛào‹ßup"˜ßôß›¹ ­G%4_y¡.€×‡aÊÝ[vV$2öñ0èU¸ ^5Õ¤yØzõuaú!(W휅µ×é%¸Ñ?s^EÑc0!ñ™ž]€Š8àgù¼ ‹Pй÷Õ1­Áó=òÓ¼–DźÖ}{:ÂZ°ibáS8 ´¯RO]² "µðÿ7ÄôH}gÅø—ÚѰ™ÇÛ_{ã–Zδ‡…™þÔ ¨âÕ÷£;¦› å$¬Y²½ÉSûØ^½ŒÞH¨C¨ÂÅñÝ­¸ wh÷È—“-qtóÓÊ>[§RÎÖ|V×ÕˆJÏ(B¹ãi¬—jñw`ï墨kœC ¯ˆã]·*Ž{èÐbßP8ÙuM›ØOf»^Xt:ýMåÐ/ç#ø¢W %—±^ϰ¯ êï˜<Í®ÒØyº™sað7ìeéÕ_ɳ v”â†ù 8jü+)™ÊÏx îÜ5F:Ç´Mí™·T‹7e+ì…—ó†UåµåàœÈÿIãP)—ÅÙáK®:Wt2úb׎ö/é˜â¸®EÜÂFq|Ó²¢†'žYáé¹wÀMŸ ÷¥+Ùåúç.|í6ªcÜÇaÖ×±éÎ/k`Êž/ ÜsÜ„oÌéGN„ýP”WOùç¼Ôý ¼Üˉê‘_¡•¿'ìþÎ’‘Ž©ãòs?Âç߈eÏ¡AŽÌaý~I\þ½w‚kèjs’gàÏÝF‡‡sƒf„'š§…5Û]6nÇž¯qŒ­6yÈM¹“½ÂÒëíú…*) °t˜^ßjµú­zq¦=œj·—¦Þ8_؃LÕë¯^ꢟ«²H¬°ZÕZ-Δ`‡Œñôø‘@-Ê0«°7R½ÆBmƒ÷fSG5õû¸ÿA8ëDÍ(3­ð!j{3çQ¸Uió#ê&G-\V`»ÜiŸàÕÔó-VÏRTƒ+ÖÏk+3~ÛßÞ5µËÒí3Jj„oû\nàêJ2ÝHKs!“:Ázšá0¥YKÑ=y¼Yîø@ÜžÉl¬°“Äû¶\zØ_¢¿â·Ÿ•]²(¢ƒ¡TW“ô;wNDúX*.){c8&§È&Yù}Äæˆd#Š#JmU‰JÓë·ŸÞŠÜ}&ô_蟂arˆ²µõ6sÏðŒ"òÙ~1Ü<[ûNGâðý!´M¨>Å#Ö>bíÛ3Aúþ@ñzéÎ:ŒH–\¯Ð…ÝJÆ+ðg†û¹&?Ç„ TP""\mæoí²(PËPjOqLØÑ¦À:¿¶2ÜD—L¦.“6s=H &×Y-†ÔXfén”̯:Zü™.X,V…¦äuVc«ƒ*J‡>öÍÿ¢Ìr ^„{)å¬M5¡hl„;®Üÿ/—Î/Íbõ…<-ê‚úº8TÄ¥Ó“p-²®x«zµ£¥Ös£5¤÷@ƒ0”Põ3òœM—QõpE-m‘Àã{ç3[Éç~$£ˆpkStwX·—ŠÿYH˜}oÆ#Ѐ?ÕŽf•–?ÿkùÌ$ÆÝf Í·O+Ü–‹Í(‘NN¶B:€S)XN@ÀX§k;N &» XÚ°ï#¾™2žñA.ÙS?˜Aô‘xõGºãÜÍ›ãxj©ƒ#,Ÿèž¸?/Þôî ‡•{$\º'k:˜ÿ:gSÙi[O·±$ípà’,³Î“sÒ]ÑõDg~ÿϸešíÅú§^àÌùähâs´§}BK1I“MÉ sTê<ÌI,ê§ ±îpºÈý¡•Rì˜D»¥F\Üngö4@þ–TM>½ø£y¹É‰ÓÍ 6»(küñ^º=¦ÌhÂA>´Œï˜Rg{Ý{ã&±êëÞecµ’`ËŒÒïЭôL [rûγÅצèÀÔª&í©°”)¦KÜ×uѾ#ëk>HlHh!æ:Ò?íBèêݤ‘zi×r ‹¹Ã»>—Â-1±-A6Ub„"oĬ\õT¯1}÷¢/.|ô›™]’x2þ%[ê G ß[¹u½—šàxš(¶­/ÅLÚ‹´$pzÎpÌËŽÿ5¿Tš®»_ÉÎ_*¸7ƒÀ§°"éRÖ_ü‘Ü=Šp@iL ºÕNªg´_»àA¶‘’ôÌ–“6eõÜ$0çÔ%ß.*ÁÄY!ëÕ«£à-eN).¨eFŽ*)™ïšÌ½w>Ð¥RV9ÚwlìoKÎã h—½0Çœã½Jüv­àÄÕAU,íGç‰QpfƒMG܊ܵD Ø™¿y¦œÝÌ!^^àŸj}p-ZfN¸ØŠx3À“¦z¶d¹NûÛ©÷|Ú¦Ýöo‘m®Š<1ùiµ¿²ïÃïê>¯;JÀŒ'æ¿ÓKVPeÐÒ`Êü/+øÍ³×^ô»—CTMÞô¡l¤×‡FðæÒ,Iñç¡Ñ`1ëB»ßq*Œ©]îø Q×Ëm¥“:Ø4²ü[~jÏeFVÜTJ¥¸Áe^Ù”•+E •Ê¡3•‰ÅÑÍ]©\Moye2êŽ)lòCÊ^º@ÕÉ‚˜»œ`Ž¿k ÊíXð?´uú‘¥ vhL‹ªá·(³Ž"ë´ÑyÑ9oC·krkïÞS>pí2¼îš„Ü@•ƒ:HÊ|ˆ²‰Ï–ÅÝZqx˜öOh®:æìÀpü Aˆx&çîíß |™ÛÓ1.1:Áz ºæN¨šüK)óNÊVyåÅzç ƒˆrƒÅƈêˆöŽH¢æw¬â›µýmXGá‚+Á €²hE—¿8vI‘ÊpóátA¢ è1Æâ9Ÿš sIŒ­ÆÂº …Žï/[LšÀ­£å-ßRíNùÖ4X™’€D¾ìÒ EW-6ß×öŠÉœÍï’µHƒ¤ûÜI»À-=uÃFs㊛šÃZMìŽ[’ èLØü%þ7¹ªÝ„€…½|j$Q-àM¶¤ ö;mF…4Õ*ì0’ùN­¶&€WA‚›Z»ðûêéàîdÑMl{þãg˜gÄ$!¿)Y¬N\òÉçœsÜN%-;šz;®•¹*w²º[ÏŸPdW´fM:£r:+a“›¡¯ÔŒ¯¼¤Ì^Ùá*0Ñúyþê˜Ý3ozÌl‘jm‘<3fµa4~ùŸÀÒ7è7b3ÇVòÏ|}i]ÐUI•ó¬e Ж?êã×ȸ.,]ŽŒØ‰2[`+b®ó"ÿ~ ÀÉÁN1냵!K so ypÅþî!yçC§ºBµðÓìØ}aæJKqgCE•+RÛ‰+—”èËÄŠÔ–µ°3 “YÞjÑ^—ˆã«ø‚ò×ÏÚóEmÚÓ"E^/¹^⡼|p"W}-C— ØÄY¬ßõïDñæÝÀî›Ïu[¦v ·æúwæÞsï\IIÍ(CÚͼâá>ë ¸pããaª‘CÈtsíV$_—„X« dq8âäþ/ϱþêOI£o&ÑÛ¹[;üÅ>%ËLÓþÓ0tUÒL¡«Ù^Ìytº±§¾ôà<8êÕ JÈZYø¹{~«]—‹\½]BE?šN‹€Â©iôè²Z.E*ÁØ~¢%K—×õ-lÊ£¯Öéç‡zKbë¢y ¥TûçO®æÊ<ës Æ0(¶ûáolÃVñÌè0ï8½#·ò·vhÿwX7^nÀ¿Ê·†ƒ¹¼ÐäÑ¡êÛ~ Dûk®¿ãéQµõ' z°á°tŸmÿ—¯J·wáˆ"ÇüE j1=΃˦0¾‘ê?¯ð6“î7¶ˆn®¨ó“ÅÇU‰ÅC웿•Ÿ,RL¨’„k‹n‰aS}µ©Üúwü —¶[û>‚A–þ5^=²>•o'|X¹ÍQ_ÆX¿Ú:¨œ^°²&ªëƒL>¨2i:§HÕŒ_t{ÇêfùÆ›ÇgîFNñ/x°|oò3h¬,œ…`rë3"ÅË£Àá“TÕ¥)OC(¢ÇÆ;”üén¶™þÐ×4ÉîV=o|CJÝ#6À´—\9³në9GüBä?ÉÉWœzOÙ£1ã ùq¯|q°Å·ÒS†–p‹fó{€]k¢ÝÔè)Kâ<ŠBÔ„ ÁtуPðíÏ&¶èdÁÆy oã“hˆí~lk¢†äÒ5-•ÔoÌ Tñc(R÷´ÉK²'$ø­]<)BR+ŽBîò-œ’ ¡s”š9¤S"9a°‰1Ö-“ðÒsØB)0ÆÑÊÔ5ËÖÃã·â {|~û´OÝ«8']u>Ý2Ä1§²ƒœÏÂÕ¬*“Üo†#"aÆØ–ÏcvWŽ[Ã{.œºnãp¦µkm V®)mÇAg—ÙmAè/Å2M övCCé‹íP) 73…ÚQáø+Zµ\ª±§¿OQ¶µKn1LòRdùÃF†²w¯ý@À´TmË!ƒÜâÐ d,s\=’¼!—,èfIŠyQŸô\_j[X÷Ý•YÉ>3ñ~;I% þŠQHÐC>Ý ½Ï¥=2×È’cÝqó2´ðþ4&w _ ÷šÖYò”F™“Ûiš4‡ú¹ë!ô7ä+uBîS×p Ûì”ÛFQvªU⃪ɻYKÜïôÓMH^{}ÀIÑ­iÅyôGQÛ´üi9#—ü!×Ü;êÜÿ>U%¹pä÷tQ€”Æ%aørŽ#–tö/“ßʾV(æ`î >™…3Z•×…6„qË:Vü©2°r‘Q!çªsÓœž€Œ³ûŒÃ-¹js/;¾ºšÜÐ ò¦¡zXÊ Ï0Ãè§¼¶džn…›•]ú;ò´ãxö¬o,E„ò) ‹°¨ni7xÄñ¸?…»!¥ÞS|#?ºõ¶+kÕ;bBWXÎõ²ü`{ =‘:lSk[‰$ËXÜ©­{‰ÍÀꓱÇÚ°vôŒI.uøhDÃ纽ýçÇŽý‡nÕß2¼d~5¶šàx¥ˆñºßÖ¶\¥o¿¦Úåú,c(_’Fg‘O³O ²Ü=>gÜh˜A‰/E@û7­ú$í­ûÔË~©“¯EÄøËTxλìdñ´È–Óë†C(b7X@iö¢faY#?W·Æ×n]%^.ÉtpM+ÈN„vŽë˜f PÕ¡ŽÉ7†’Ÿ‘Ù•W’zÌðO3Úgé¦/íÄź‘jvVǘF¸ßÊ+Oa{û]%®XÎÏÜoŽ\ÕŦ½ã‡ &=lþ*ui.{{ yë«cq¢ú›‰²ÛŒ'|ÎÓ¸ …½R¼$û(é“åCàù) ®·K ˜ôòŠVzÃæg»„ÌXöOã"†êù8È·¬yEêdj*k8-cõÎX~9©°—«EH”Ï0¹“œ ÔÂôõl§¢Æ ò…æy )†¡(­÷§ŸWµv{®º<8º••ýVI!Yá»Ôµò©šUγdäÊ8…ãè­Þ­˜”º_"·÷î’Ä óøúk:¼opœVö«åhFŽeb¢–HWJu‘̃m>=Ϫái~ý~Û+Ô/·à§2˜û Öï.¯™ Ë ˜ôî(IÝÝJét¹'kéŠ×$îØÙQdK¸:MDQ™"g—Ô¥—ßÛšïMQ+b°óÂ]öößo]±ó”þIü=GÿCØ'øzÁé¹õzùÃÔ~ûw/øjú»›þe +æ}B·ÛÙü:üþ¿ÁOøz-bKíõ ÿC£ùõzûÃÔ¢}L¿ÃJo·¾ÿpì'øPü£ç)}½ssíê¾}£_ÁOøz?];ðôLßæÉõ{çíõ:¾¥ËíйõwGû{ý­`ø†ˆ·ñl! å‡3"Ùø5§Ì©½fëë¬ïoMQ÷†û5ÙÓOÊα |‹æ€ë˜g#«ÍŽùqIs0’¢ Ä9\¬´j’é[d3«9æËƒGRï”Î5#Lª—n—E]ˆ±¹ 5¬dŠþ„.À˜ñ4ÛÉdæŠ#—6¯@È–4vY®b÷ÀÇ7 A@,é"Ú°qê›Ð§–—}—J´RnТ÷½=2j B¹a4NÕ°Q©9?#W mŠ —_æMËüFÑÁ™Aê‘tÍA$g˜ÄjU`›rÂ@üµûOãwÅ·MåÍ$Üe¤Cxs†g¯Bt Ù•è邼í0‚@:ª²<_ÏïÅq 3!Xûe±MGPÓðÉzÔúÏ™ca(§Á ëÿFȇs=ßBjξžÇÈÜ!;N±KZ•l¬ (åEÿÆâ™–<_â-U/¼%=xâÎ̈'Ã7£H@N*zˆ¼$Z³èžaç.=^HP+M*MÅtSn“têÛw´ÄÔ²(ì%³þåã·Wöº¬œÃýR($Œ{#rAßB§¢ú„d÷Aô%:xÖÀõrU…í"qØoœ²Ä•¥¬4Ž« G‘f.ib|nºÓ Ù±ˆ£áXœäC‚óÆ³Ç ÿ'îëNMF7ÊJ¦ÿi쟡Ÿ¾I¢Àx#†Zcµ@»cýµ#¦@6öM¹2R¼!J?S_ÒE‚Ï}òs›‡ÐüHG>É¥> £­†JPûà{­z‡”·©-tUŸÉQØ"9OÞá",§üZQZ¬at—ˆ²möµ6!»;’Øœ„ÐJ¨;^de¡ ÆuöSž`™BfÍž¯"}Ûe~ŒôÇíºqåùî¶fE˜ï<~ê¤lba €ƒx‘î¨RîÝlö¢>ú1&dǤëE]ã°`7j°÷TºëË6Úæ=6™«­=x¥!É<õáU„Áù¯9, ¦;ÎTÎh«¨=Iâ3Jê…^|­à4ìsŽ”{jÚÚT®>喚єšw¯'ÏÁì=ÄkðéüÁž%Ä vÿPVJÀ&öB"R°zœkS«é·¶Ã—Tü˯æ¸$<ÝI¢ïÐRe#œLÖ có:±DÈD¿ÚY…-ŒÛYÁ¯ty¦j¶£iÕðc<°¡µ¥£¤äýOSÎÍç®x>!Oý3x©Z¾Ó_ÒR‰_­Ô)Ðÿ|$¯oðœdŸ¢~,¡¹.B#Oc\ ú¢Ç>ÙzG¢Ã˜iÞ<‹ôÏ(¾‰@B+~¬ðò{ÒTÜþ¯j 1©oÉ:©Lp;ì0¬ x•ÞèÃ'5dÅ?[9ý¬Ó?›ãŸÃ-k§:ü\!#&nw¤Œ?{ã>÷(l=èÓœ“p‚é¾Ð6Jõòó#ìÆò±`=ó&¹è3n…©7éÓ#° u6Ÿ•;½½þ·¾fA¬}šŸððvÓ9 ¬Ý­À›¡oФˆQ~§çËçˆ?í»«Ÿ ‹?ðÛ—+³µ¾µÚÇ”b'ÙºôˆSÛuRJ¥ÚŒ`ƒ§ö»Ô„™cè‘×ôØ )Ï3lÔw{‰`©‘S—^ÌNÇŒù=Œ¿è-XµV2è9 ¥bmªºÜM£_–Ga®:_òóûàà_‡ô$ê¹€ý(Çr²‰}Š|D¾z¯ƒ±ùÐ *µ4?ªž Ô‘ Ï%ÎfFÌlÜŽ;¡î:‰†Ù4ð®/#Ò¤2õ|Æàlq¤€¬õϺWA,(ëDãô4b®|yõëI 9x- žÊö÷n áÁ™?ºO0K±¬àgïêî÷î"®ûHijnèK»³+ŨHê’kìóxxú/ÈŽ³7%²ß\Ø tÌŽ‹xkš=•D}c6Ì`ôó©yûZʽßÕ¦¾qlp‚/?qA:ýÔñQÂï$æ!A¿ï¹wÿI¼VÓÚnUÃx“ÎÐ`NVÅS'¤<É£_Zõ˜§>«%¥:VÏGìx›˜^–û€¨˜MóT?~5¬ø†ƒy÷Œ…š;(M=_+‰™<÷¾pÁ\ª¿…ï/[ˆ#5€´vtÿf!ÄÔÝkb5ý%Dï§…Gˆ·ÊÂèíØ»äkŒyÜ—Œ ¤Z“ÉQý  [m‡ÃE´>7þ³$/ÊÅ•Z+5FÆäõÕ±âÊ?ÿ~QfAï©ãóºpWÿú£[jy›8ÉoL—IîÉ[|cœ›qbŠÝŠ+v(­Ø¢·bŠÝŠ+v(ršóP˜"}Np{G£.ÁØ–¡‡öcµÚ…ŽdYÛïÓ„ÅDà×ÂLÜL p$ÍÄÀ×ÂLÜL p$ÍÄÀ×ÂLÜL p$ÍÄÀ×ÂLÜL p$ÍÄÀ×ÂLÜL p$ÍÄÀ×ÂLÜL p!Íg凖Wà µôìH±FÂwbºvÏ<añò±|µÃ`Ó‘Ž0_"Ú/ÿoó9ÿ~kÞ"½ Šrù©ôâF/~„™=E^6‘&g‹v‚h@÷í»›Š x¡äéÉBë[4ºt<;dáö^ChP —Õº‡K¤—J1|Äœv©“r²t(!÷¯‹Lù HŽ¿†›•¹þ]$б!fRd°>€ìUèŠv+Ì&·þ¦€†5dµwF¨‚±T.xáñmPÁF¡ñ£óŠÒ¬Gð¨¨^‹ø‡OƒsNÐÔåk퀨­vƒ3ášK?…×ì+ñÈ Ýsô§¢–e>íÞ é:â$fPÕ!ð âø¤™eq¦0‚ƒh¬úªŠK5zi.¡¤Yú‚wÊ& ?;ò‰W3äÁœÂ+¼Î×Y¶ÐŽi\ƒ¯ƒ¤¸q /\™§Œn§M¡…«qÿkWØu+¥»´)6¯\˜Ë—“É$BМ•’^ÐQ?…¨kàL|-U&ç…3šO=”õ G ¶ä¡éà á9›zŸo\׊ëï/ïi©vòç0Bž¥— ‡4º {Ç~{KrEã—m¡÷7?1š8ƒDóîÐ"†NÅË‹ôt$åd³ÎE†Kp´=@ñ*Å©í%^&¦¾Í> ø™ßUqqÿÛ•}*8SV.J\–†)F m,%VÓu}‹åÀILÐrb˜Ô¯ßäwUÕu´^&J w /±Òñ¨ã½9[‚,M»ûhÚ‰æî¦4` ¨Ù^sJHÌøçµ VÌ"ÇeÿE‘|(ý®;]º (¡†ÁS8ûãUn›à/™}wÄ@-‰×Lö‚»ò/_¢°=”ý%Ú‘;žtNT§ðˆ=*HDà¡5ç:žŠ›ð£\«Vï6Ú{Ü!¢rF=Ào§TªÜ°‡’>/§þ¯ ™Í¢—9añú°ùW¾ï£\·`DÛs3èa=©ÿg©qÞ1»Ç2÷Ž Ą̊³‡°·ô¶ÈÑPŽFvÿWWLOÆÁ´(ÎÝÞŸL² ,'}‡^ºyÝmši(³î3ÚvÝn—„a×F–6HCøèJ ÉØbä,a¾€¥$wê˜,5Óë/ÿuõ‚Ýc’ LÀ$ÑUäßîÙ† î.•gÄmž¼‹ ¾¹Ãi¯È†hL‰°‚ïAOH ùW9;Vd¶wÙ°XWô‚°Sg}„ì¸7Ä °²w¹=eIgÚ18iDµ`÷Žæå«šOÍ.T|U\ Ä‚ó µJݾ²³uøo"fÌôÿYpXÝmyŽO!¨-Á>³¦ ¼Ä?æÿQëŸwg®%.K”«\‰a“¸-¹²íÊ¥8g¸RÙ‹(–ƒˆìŒ ÝÅ4}S[%ÿ):véÜ‚z‡£¹+Yœ9õ«¨v9•‚˜ÕÂä¤w»ï³»Yô6EV‰ Ã+·•¨½±÷úƒ ¬ s;¿‹ú_’ÉÖî{Ò—¯ÜÝYv$D˜µçãZc*ž'ÊQ¦7â4ž·"woØÂº8U­÷:þ Y0b™)GzÖgXÇ t\U!òDN¼Nö%HJíÀ2 A¶ìå¥g§{Ï|_ŠœV=:9i5h™èóW‡húóo YXç¢F Nßu1xtÈtú*зç*®Ø~´Õ–â´6²Æ”ÐtÔ·á,Är*º¡ÿ ø“D˜É1,çuuôõqU<’2Œ#“âÃ!cÞWʦ4áB›ã?’ƒ`º Ñ-ЭwK|D_$'öL‡œA&˜ÜÜ)N×÷—hÁnXds]¯Õ‡]]„/L_P€) v\Ä&zú(±ì½“ÍõÂݵ°ü¾ÅEïÖ’Ç6uH'® ŸBúm{ö•”`U mGC;ÂÎ \ÚWnR·ÝÓîú'Ø2æ–Bʱ"0¿I—-æ·,Shj®X >ð1«µ;ëRóœebã„FûÛ\fä›3–TqÁÂä*''‚·dŸ tà‡aßùš¥/Þv‹DZC ã!pw–¤M؆J‹mi%d#¿€VroBÌ…[¶B²äŠ(ßá»™Ï%çÔý&a%ll0dMrtj¡©ìAÛµU~QȱÀ‰-KM÷£.šÍcy<Ǫ¤˜´ ˆË–Éó4®7ùÇ<€CXË8”6œûêî•Òš%¶l´6©¶#zSì¹å)tF.}j¡ _óË„ñ•¤ü ¾µá€Í¦eXð”µMãQ,PCÜ]__“6̽¨¬ŸÙìºVú|À6ûbÙ!ĬáÑÄyqÐ}<Ï·#„Æ6/ =~ÎOæG«?²Slat tv¸iÍMŸbð Y°hÜÜ ò§wRY¸%eNº«OSíªo/£z>‰ ¿~ïá X&íQÎó(IÀ\;Ë”qûÀ‰~Içð©vg“+«ù ,ÄÌǧÃμJ­h^|7™¢Íï[¤‘ûøE9%‡0ß@ìAÑZ›ÅxÝú‹jVªÂÍ/Ö±Àð'š¿ÕÓÓPƒgR,y&o•I({UÚæÖtüskE­Ãi@(%°ðð€F"±Sè/«›&¦ÚÉζâ’Ý¢3’ÅbvÓçyýíËœR’N3$]ÒV¤`a´tìàR¯û1Åá§Ž¯±‰TZƒHFg¹d–26œ›šò4Ï8(WIR^ŸÜø˜!bq…€ÛÜï,¥ÊnÛ6Äåzw#*Vs!CTãÚR†zÍ žxð´»x°itü?›ÿ=ÜÝËy¿9f’AÅÈè1NèÌ8æœ ßv$îÙokâË1ÒÌæEò6^QÉÅí?Meèþ,’–iE¬ÈFë±”i»ñõW‰FµÆ¹}¥ƒkzãSç̇¿ÎçSaUn Ášû‡l¸«Å‰ZcBùoD®µh–:qÚ;å–¶6··ó+ZÑÒ’ÍÁÔ RU0;Ã{F4g'r§ÖX^W(¿=r‘Aa±¸Ÿó«¢B‡%áÄÒÊ”vç¹³p‚2çô¶»Ðü©-c–ò8\7ÎUDÝ»øt°O€¤+ëõ&u±¼½8ý™F”ôhº²îa’bZ.·Êxiq wþ¬èJùLv¤‡ƒØŒÎÁøc}™B¸|ùa5õæc&oÉßÓq^ùèL×BÞ”‰åçeƒÆê'ÓÙJP*j®¦bŽzHA•泇~”‡üûw¥AŽõ>iðST1 #]ü†MÞ…‰Ï– (ÛnÛ†í¦¼óWù¤dSÇ+™S© ,=èoàL|Õðó†A£ 5Œž8g^] ¢>k‡Õžl„È´ìË"2;8€ÿ93súȒƘZ`]U¦wLÝ,eêa~pœp$b;Íóu'#çƒØ}®•ן7®bÆoÔÂÄ^ÍrÙaìÀÁ[‹CšUø¦Òi¾Ðc´$O—R¯òÙØDØHn3ñM|ĸ'%p—2&¾ÜÛ³rßõiìP,!XrA’ëÑû»I¡çÒ•uà/A´QW™<ßÞ4®oâç mÜ!×O´3 Cx㜭ÜY{Ó¹g¿ß·ê<Û£všˆÖD­¢pÏ{س7^…gÏY?q7–T¬ßÓN²„yOH¨Ðó{™Lž$Æ¡s¨³ƒPŠG >ž¼Œß[¶Ú®2âYÔPß`@˜ÿBý5ÄÇØ.ýÚOOñÿ`¨Zxïr uLí`Ü ]~yX ÖÚ»àõO…:ƒ|ÙòïÀ¯½§Ò–¼ÛWõ¨jF?9‘ÂÅÒ",©Íô ú»” JP\ƒD­ª_Äý!~gZ»ö{ÿ,"r&‹6(ÜJ ÒÅÌR3¬R}~€ ÕïéË +#¸×àîlì¶þ^mü>Ž¢.ÓüJU*·¶ä{­7ÞÓ­*ÖÆGšÄS°®AϤDÒLäöP˜uü•!ˆjÜæ^Ãì< a°íÜêç;—S+aà뤎ß}$ Ãà´4"ð7h¬P9¿+­­iâꂨdâI¡üø2N­÷§”[ë.isϰC~öŠÜ¦y°rÑY—ûòˉwv·¯?/Iûy~åÕ„Úœ %ŒÕ¼lVI°I”S'"âF<ºÌ”¥Ÿ[}JÔCåU#“>A¯t2¯׈<ù&záÃæ ¢îªÎ ÆíI¾ŠfzÈY­Ô|ÅJ3Ëð·©`Pöyÿ(y½»Qôfóõ”'GŸBôí»ÈÁXoSdšY ¡*ì_ÝæúSnÂùΞ`pwC´²á>êJʧy[tÂ7â‹N;Wûî¯ÿ`êüê²JÔ¦¹lËþs"±¶ñÎ"×YlÙ^_m³Bò Xé×ñ(E|­9ú«Ñ8݉ïT´yL²xÑL—Kïÿhã%M#¯ÆÆ±~ZALž1óZµîØûÀæâ‹¥s`Ø£*§U÷pw£3.ƒËLÂsw¯ºB¢Dx0xòÃ& )Ÿé|ÈçSõIbœrC궃½6W¾¯"oÔ§AÈù˹¾ˆŒ< ïGX¶&bá[øv(!¶ `?Å6ÁláØ  †Ø-€ü;p0D¤BŸ»ˆsjØÂ×õµÒLù/=œ ¢miæÖ˜ ;µšm6§^ˆ½»{iD÷ºÔjcœï^VÜ• ïX'üv-S­^ų¡ÉZ@<ÈÄȧòvd+/R¨ü:oFåUµß`5éF±ˆÈˆôÚÁ´hGûy^æ_.‹|j²‹õóõ_¯8ã;{L]¹ï;¿‚#"ó5û½üVÿgýûäoyΣŒDêéë¢ AªÂ&Žà¤ÞïFˆ¦‚ζÏ{Õ…³€Â¿¦>¢C\ær˜¶)“ÐaPx\¸¬QÙç ÜœGǨޛ¾ÇMó§ðެÛL”À{Ä5ø½uz¥P_Ç#u‚(1y?/ÿá¶c¢äåGKûcH¶¾èIp–Þ ryäãçþi+fSÛÊúcr[}ìS¾Ök”äüï~òžCÙ$ÌïéÙ†o[æQ÷ÂR½ûQþcÓ{ž£Mu'$qæ[íÍÓâ5®ÙA€Is1–,·jkà¶m<í*®‡C'äaÊaѾ±aÞ‰ãVËwÁTÐUcÉ@¢ß’x+h°°3Ýú²d+Š*\ý%Âÿ Ïm!¥öìÎ^V6Ò­2)Í Ìü˜Ò<øÂG>׫¦‰ÆòÙNÇÿ[¦ÈzòºÌħH¿Ÿ+†'¸¿ñ‡¿@åMµugë'ÒJ³'û‡7…Å yª´šÒè3Ñ6ÕwY›»Xª<Ì ƒ²ÿ6Ñ$_²ç“”šö¼Å†ƒgˆêÅ •XD¹¶n÷³¾êDÎÞ¦lÜj9eezK.§Ç1Œ)á“6EiÈ+ô§¥í@ $¨(¢@35„rb­K¶KE+•_ý#°šÙ’ÆÌãú t{Ž|µ’ðË‚÷þ<ߌ4÷¹˜€ÖW~(=Ôb|¾þ¯MŸ¬J#7š/¸µœÉjž 3X‚˹GS6œÿw£óeÍBÓxþé@íZÞ_ì½§ø+çü9ÅSãgßgòBñEâÏ Áã¥qÚ³ SÍ`ÙÛÝ\GY,*u R¡VBR™ÔÀqì"QË™„üwØŸ¹ˆ\4ó²‘O”Ù~öó¿kE¸å4Ž·…N,ôþ8ä·uˆØç¶_92f(îß-z8ùÆîTÃnÂR¾i\Ê›ÿd¿Xß“`í.û^ÿtÆtlÇîíQ}Š¢ç;Ðìn¤¹”E€Ú)(3 „€‹¥!™r…Xºt äï©U¾‹³šXJîûøÌKBà{U”Át,Åê¦àèó¨“Ìyšîqý‰I é] XüQß!®QœWÓò;²^¯ÄÜcy}ñbÕüæo¶5ç .; ˜€Ûû·Ñtôœ Í;B0tÍSy1öw\¡dðx|øˆµ7Tý‹.7z=P¡ï¨›ÉCÉ5„×ʤK¨@4` åçpO5ÔYÍ€¶<ÖVœ )M}‹DÈ_L&=BL‹ _`”;OýÎj­SÒØËHÄ AÒ…½Cp¸9¯¤e2î¶]Uuipã ªëÅ]ÅŒÉG–aŠ+æÁ £RóPʦFÔìðø~ª»BùŽðûC.¶Õ34l}3h‰g%£TmmO(ìP:-BAï4Zö\ö·¤#¯ ­¡š€ñÆì.cR/èKúðmöJÖn<- ’ÿ@ËQ…»\S½Ï5ÏÞEÕ¡Q'À':Ad7‹ÿMƒÂùjµÏô™Vl›ŠÀÃ×íkFÝKC3«îæW|';øW=¹îŸ¡Ô3Jåù‚ÊÐÛÍÌ©¬1E”XGÊ“Á³NÊ.l;‹©ÿhR]lÅRñ—éï:Ùa¦½œTÔ¢îgÅ««Lft=çSþá“5q¦7j;,6ºÙJ!tÖ?팲c%ï%ø&¬^ç¥ =ìV£¬GgòQ=oXŠëpÇ{rÿ†ûvyX\Fu€Å%éFsÛÌ[Ñ£ç]M˜˜çy¯Tøã|¥ré÷ÛIy®fq7íq¾ž^ÕY¤Ì 70E`  ¯/‹Ëÿo* ìÂH§ó‚W8ðÓS4ãÿ#ÈBâüu<â%ÁÑ‘±¥¼HÔ¿t¨çc¾h¸«$œ&D^ ËM[ìx¬—¿»úuU¬ Ü eU`þ}…I–¡nu_˜XÑpGdø‚÷X#‘ÔhëP»ŽDMeá™ËŸ÷›ûÆà^ö.Z†ݬFpŒá±"˜µ&³@KÈF’‰÷|ûA‡Mž¸ôdSL ;6w”Ðaj „î¾T£‰khºÂN¨7)æµO>¿í—èârgzÁ]ÂÏ;Ø'†5‹ÊŸù¾­xͼLõ"¶­ó£ÿ Ë8TÀÞ±(Ë“‡¿œñ‘qzÝôþrt$^ Ïó²R¶/çôAO?Ý ö{|?6ìÆÖà>')©Oîèpœ¥¸õûϘŽPq¶ÁäÕž–þU%@¦g‡°{ëÜWvåOò÷J®€ã P2¢Îíºó‰2³«ÄÆtíîós[Jø†ïÄfDÌwhôf]šÚ8ˆäw‹Ì6KAŠË®R6_ÙvFÇs:áš©š¾©X–Ñ­‡lê𣹖z&GֈȡÂå?{«6Œc>èzbð1Ÿ „‚›$©uçKÁÈ@¥öPü ÐÔ¥fÉ,ZÆØrÂé†õ†ÊU.÷Ýeöë çTDÎ3ö[ÍDð!•LÂèH $éžLÂ*•[Q]•kfc‰Ý¤²Ñ‘aT¸92+$6ÉŽN‡ÅŽß?‹·Â¸ÚÌýÐBV¥lÎ ³>JË[nŸ?DåGS5ߨ齭ÆÑ"Ød%Ç“)&/~¢%óŽrú×”±*Ñ¢¢[±:Šu,LM›…˜Ô£{aóìXW"++g²ê]ô,˜,6Uh³í¾/4Ë)gW~+ý%Ïn9‡œfI?ê:QŠãŠviq, î±k¢L#Fòå,-ýÜg“w°!´´’OÄTú”ÝÈ`×a¹Gto\s8]±@ÓÞH݇*¨C™×üÃÍ­9,[MV0^O nB¨¡roÉ·ßÕæ¾õIäÆ\Drp+~GÕÒÉ(5{Ôlðм8ÒÚ‰ä]©"Ãßîúñ75Ê/%²+ò:Ô<ýeYáÎö:ã„“ú,Θ)ÍìÜÞ¾‘T;Ÿ¯D—å® sûYþØ 2Åc¥I:(»ˆKÔÿSƒükÊ„¢9r§ Äo.Þê•Ðiµ·AìÅä<Ñ1‡÷âÒæÃS`‹˜ ûL½”¡Ã©{ó5.gš?;ªy-Òs Û%žÇ7”ˆ„6å!#BÌo›H?_¹:¢º§$‘À¯ä ðBt‘õ"ÍïÍ(Òlklù 1œówpƒl…2ô‹18¿²FôR¬^|&)èpß Æ>’]IÙœ[¿ ñ§—Öhß›&SN‘ÐG}ö?’¤bßN12"XÂöÑoU¶Ýÿ!вóyŠ˜‡FS[ž²×|°`(úè½Â˜¬!„°.¿úÑÄåÊíªßùcËdä]+J|Ä1 çcGö¦Kiª™úúCéjT:]`^z–½?(¼66ôJï­‚e¨! v¬ä—¶–ý>¤-úÏçSr®º?ßè̆ 6Âø®Bñìpé×â"F‘3|a¤AY•„oãÜ=ca[}ÐfÅ3xâì*þ‘æí›Õð^‰Òê)ÊïÓ¨·hþ `Ef‡ù—²¨oî³Ð¿ïtxîÅ þZ4¿ûâñÇë€è2&-œÍEÝ\®Ø=Và]ªø,|ÆÓF+ ©v´ ZiÆãULz`]Ï<ØÅ²áyâbD÷ÛùŽdÇõIï~Ðá¬?þ˜Yn9׋P º Ob‘ÊF#ÉÐ0¢%|/uq©ôýìÈÃÏT³‰éEðî²¹iËp‚®0j'>óý£µ î<ôô›m$è˜Ãe¬æ]cl”þ&G·cqù~™ÿ{]bA½N3¦@O5«–ÊIç2ÚVc€(IôÅxø.êišUFÍÇ^¸¥·•gÏÇÂÌ`)Žp_eп>Uþ S¡?{¼d1a›#D̃ÜM'A¸)ac~οbå´c8Íç',!<6£=ÇÁ$¢üÇÇÉ£ÈÍX»™ Xf~ÝŸê0\߯e•0›^O3eÌY”ºSeœGá¼¥Qß çx(Ñû°Ü4žp.8–u–{júªX]Wm^yÌ.=õi«›=’!«Ñ4Ôê†id!Ø(#™7ʳ†•`Ô(šd„q®E¿xYhþ= ^”"´Hœ>1OüT¸¦„ì?m€ ÞÎw5}À†Ïœ%]NPF¬h‰@mËhƒü)êÂh‚’Â@_ÿâÄB)ƒ«‘——ú‹<ØõÞE¸g:'î°~Ögɤ7ÄQhJœ«#x4 ²aìV.ìFl˜¼è²Ó—œ'4´ø M ’LMfÖ*6 }‘ç u;U×\culþ½º"û ‹×É×"Ÿ°©"ùŒ56/O³ë£Ð£ll4¾þ…yõ°ØVk@Ò˜ð¹7Rz|Vo¥mÅ pT]Nmœ#£K¸¤CñHN]­†ð=ù>ÊÜ\†Q#m¦5Ò_!Â1‹ '£’é,Æç‰=w–/-¤+ä…ÙM|Êè…€$ƒYþ‚!Ù,©ÄKÈ^Ïò}u£ Ò{%È”s#*îXl±‡ÊÉ–®*û‘øš«h(ñv¼uŠ™Ø‡NüJ¬1ã-‰i«œ’1qŽc„á8®«ð¹±¢Dáe$r¬÷nMiåý¤6Ç¡¡R{µpÅ~ÂV²Øv@gZìŠ×ÚN­m¼¢ 0[”qÒŽÝðÜ8¼˜$¯ûÄ ²vÄ6ÿ&²6/É;jhå‹Y+­)ûVƒ€\7¶Ð.‡ÞŸü€—¡ëÚX…ðhð©ä:ðÃl¦ˆRpiLPïÈ?o2“S¤©”V~3ÀRÜrÎg™ù5¾Å¢8ýïŠDÇ)Þ…^±6ÿ×OÍ“f¿(ˆâa0§'×åvŽØ6é,šØkM;NK0PsÈýe ïLE=̳í9üEaçLúCî!\M}9.ÎyNXSECa‘µB}iˆhBÓ*¹sS±ùÆ(—{ Â{ª0¸'‡õaù×UþZ†Ìqì©pZ ÅË™´tà›-£QŸKñª“0—~/ábní—2ox±Äâá |—¹"³¶Xîmø) ÔQ;¨˜ÛÝÎû¿)Wz MBñ_ÛÓÐ[ìÂEP¶àúŠ‹S^Lírg=ÁUV4—ç?áj:ùz]¼¢j!çÅz?a¬ÒödŽŒy²¸!å+RWÐc÷Ãáè⦠Äßùû=®wŸÅ#‘Jok|lšæhè>8—DQ“ÛÀõý¯Gí’&™©Çˆ"¿$ó‰m1«E D2`lá¡Úu·±ýÛ¦ˆ†Ê¡”åÏ]«ÉÏuÆ‘xwƒå@­ ¸d ѱºö}±㪚;(¼q8P¹ˆ¼ãZ”ã Rœ 2†×!vÓKnSBT"ñƒ¢™¦ê=q§T|¾e¹¾W/4üOm¥°E¯ªz ësL,ÌžSžâÔÊ¥EB*gAqí)-¹‡JÑj°#g: ‡¡Z—D|í*¹†æ‘±Š÷XúJf¨(7äŠÏ )Yj¨—m5¼&½úµ^Øî¶ÜCfî®\6›ƒ:¯f¾N(>%i[ÇþØ„°*GŸ ´¡‚aÎ 1†‚>ƒ‡1âÿ>NßÄ”`GHödÍŸË“dt]* eL¦•Ï´“Æj92Áú„íÙÉFH?o8G¢Aiƒao#¹e¤ ÷ð,¬#³øz Ù8Ì'4FçøÇÒƒJ†wn}½ t$k <,Û‹‹1Ûo¨˜^QEprø5€©=ÕÊüÀ¶Â…,·yy€Ó®aCA]Œ θˆ¨ÓiùÞ…Û_y+Ôò£ãI6x |Vô ÀÔ§D¢GÛ/Ä~V”Dö¦4´Y0DF‡°1íN.ù€$”M%Wÿ0ÛýªöpÜÎa ÁÄ7Cúw"©öâ‹hƒ›PT‰ž0ø–îÐÉj§kz޽>, z‚r$LKÉm˜?ä¨ZÄ‘H¾,Ð7•áUäž^ ëCìõÓ¿5p ­!賆åg€Ôgò X  ¾cЃ~‘šmuÁ4À +•=é:Pç­âÜ•ks»ò¦¦SùÍnsv1Òê©ô‰rÑÑç½€8áBà¿jžíäœqí¶bÈró§¿2ÛAاP® åÀOÝŽ1žÉ ˆR±DPClÀ~Šçòr˜ð‚`õxdû4c²ðÍÕ°ô›fy4wøˆçf8!@ÿmr2WÜ™¥'åÌÞ%ÇñÍ_^h“ªÐ`ŸÈ‘Œ®T Â>&¾t˜°I$fv+' Ä×lIž’(ÛÖ/ü²¶YPQü€‰Ù™i¤6ã8xGGüG2R“›ìA¦ƒÅ„BÎ.ÄVTHx±ín&˜éõçÑðt_€DÆúÏn3·_«§°ßœ˜Ó4¿ÝBH±åxùðÆÂvïú,qé ?!δ%æÁºÏ¬PÞtèõ eeÓgÀzÊDz9ó_Q0~"2Æñµ_¥j€Ã•x©ˆðú:\g¸röÿ{whŒÞgKû¬ dãCSS,@D_ØùøÿY”mÒÉl¦×UÖ¯ècö† „£ïºF…â¡êÇ>jÔÙÄdþS}³Nz_ðPu"­Œÿ gwËäkŒÎwj½,&EåÏAÞ5ãG"0äŠÛʪğ=çfdÑhð4+ ŒÂÃceqWÜ„‘Ò’r›äÞFëuIœIu <½ä\-9Ë…h)›·1ACOåˬ pøÔÿ;C8—¸aDáN¥0¢S›ªŠÈ0³òðý¬åà©w#Y¸ˆaBhQâ3~¥@Rfk{ ÿ &"¢±…hõ¶uÕ=­t\m¸ð«z~dZ ‰–’K§Œ¹b{ö4ts…}ád9ÐW^ä5˜ºG!jI{ažù%"¸Û´JëŸUŒ¿+ñæ~Л:™6³‰U‰d-S(Ù¢¢ÆÅà¤ùâMç´4°ÇTëÐ6¹ã"8ÃcŸÏ—ŦÁ[y§mæÁÁ±%Wx«pLäë\ƒtH¶®,²×>&¶a|ÀV=yg«ä©øi@í4ÉW’E0·¯E|F™~÷S®-œ¢Œa‰èè˜g÷^ŸËÙñÆ@}C¢™€[³h'Uèè÷©&£g‰5ø'îHÚdüI·¸××Uƒaí܈ڇ ?åýS¡üH”úÓ,™Z_ØÜÙZzWµÑ% è¦ÉáÂ%Ç7i³ÊþÒ¹O껣ÉrDÁ<õ”ܶ—åµ-iÕYò,Í$‹ …†àªÆÙ­ÿx#Ç˱Oø€Ð'MkÈà@‡û0§~ÖM§Tœ)#À åk°y5ųWš†[b¶uλ—³»6&$ù•*4žP`c>6i.tù”èý'zÐÐ8éýDðª÷­_®Úà¸V ¯^ct7&-.ÛÓÏ8à€š@´ú“¤?×()÷û|ë>ÏöB«µ²Á0–ðâ2·q#ÖùA,³ÎùŸeÈË…ÂÙf˜r¸AšC=Þ]Ãw µL1•}ƒGŒ3Möøg„®Yzä2Ãüîaÿz‡Á9D…6GuUè £*ØZ–&‰±ZÒk¯ªÿ=2#‡½‚ôHØ™I|y“ é_Rü-בW7æˆkj]5˜V çüÜvV?Éè¨ë04“7= '­ö§µØ“o†úŒ¿äœŠÑº{7jT‹0xõ»[Aö²žˆ|Üß=Ä„¼\FsÈ*Ö¼&dbƒNZ7ò}O{“)Ê^Ã==Rª,xû7ä ô˜ëDK¯•°f]ò÷ÉÈõC™.Àv3EÉ¿LÊ9Xî§€e™Ôسþ¿2µ²Äcµ…’Eêðàâÿ4&ÍÌX6ÌÑÆo/öãÓ“†ë“Èyç)éAŒHÒ<)²TU†£´sMM+c:#~fø «Lr9ÑÑDk~-¦ZxRÍ>³ö]Ïaè€ö‚ì: à¦ÑV“‹Þ-¤×a‘JùU‹<Ž@ê—ø),åNfÐâÚ+ ¨I—ö:ª«--R0ë$·ÃíÍçÒºþøl`[¯ÎÚn嬨‡ùA ®Y Ù:ÃŒÈ,q»¨¸þä4š!=‘Ëè”ÙÊ„¡šT¥•š„š—1(”,­BǸvì¦QØ{\ñ4©Ù‡Ù¥Nð K¯|,Ó ¦Î´qíåž¡¿1ÁYµK·gÉ“K™¬ðÓÚ•¿7 rea3âŠþÿ~õKTnºÂLF)0#šK“t’€'óé|üG~Vhõ'r7Hßzj0Äþ*N’_ø¨×LUõ¿cwÝ~úù‰zgQ†ã¥"/ ¶”¿Áë1!(ß“ª¡‚a"·øˆ=>ŠkŠË“£P:¿øü݃Š>çï5ÉÈN“{.w\fÂWhâW¸O¨ë*‘ÌkÓ[úMþWÌÈ$,2×2oï²± ÑidǧБèuò¥£PÛc’±›—X8«ø)ÞÚM¢§BJ! í ’ÒÎD\غ€â=˜o¢jÈã 䟃{ª¼¦Ôÿ#(ÊÀjXÉ$‹Ë3VË~ã¢Ë5¤±WÁ%‡rÓ3ÿ%¡*¦¾éÄ?Åkp£4müÁbÙ7 "›¯}AMˆÞb}YFÙ\VuPȲ,º×®ý6Øi‘¢ÒAóƒQ4€×Ð šäß}~«è(ºÂè ;¿ Zçöˆ‘µÆÚÔ^ó$Î]‚¬CÚŠí³!&Zù< G¬!oá¼ Ý¿xð‘ÁØ6çÝ  ‚¹€á&obû‘¶áh׸'Už•©e‹)ä{õëîOÀÈ*1½šé"Ä9˜ÓÛ7 éÞVúã¥Es¼:W‘µly´š;#ÁnÆoµÛì…›é(иPý$©— %ô _e-äG²X ¨ö…I×l)茙dðï(UÚÙ$!Ï Ù6]äÓõ×,úEÊxÙ ûv4Z¼±ó)±:@«ŸñS0~´Ž÷åQƒ'»é8€R4z‘´q!;!Öñ“¶ qú‚<ˆ#æò¨5FÖ1»&çŒl³M‚£Á.k`›S“ó2r¾µ­ t„LÀ)¸ÓåÚœ¹"‹øÚ¸—áBKí€Ïf¸rÚÍÊ-›’Å’~ÌÝ:CÃÆø9ÁÏ>;Xäå:&zÔ•ä®ÉÑqð‹ @ѹ'¡³Âée‰[ˆ=Õf} Þ5u±² Ã…V14eS…uJçkXú𠮇¥Y»<Ój¡KØì}¢çû7£Z9¡ ®ŠàÔG÷A—] ß‹_)uœ€CD‡[µ+”Ô^†JÏÀ,½¼!ÖåŽÅ„"2¿ôîh$¸­™%\×Q{ÙxÔ{uÿRäþ'sÃ<ìer½…¾OVC-1pÏڥǛïBã½é!¤^1Ç'Р9ocšYG\Y¦ p³¸ù0ðöíbŸ /Àê±×?“<ϾÎÌÐðY/ƒ%ažÎ¯À—O5fô÷–+˜ç› @lp¡Ÿø.tùÝ.® ÿ V – {&²:‹‡7wèTâ´Ä²pÀ±UÜ­–£žø–È®âŽyœMÄèK C¦¿ ÏqI[sÁË䉼lRÞjŸ'o@ÔÏÇW"gþ%QqJ|\v×Üœ)ãálã.cÅhl•Ô}æ¡Í‰Œ½ü>XDú•“š q [„y­M¨ýïßçÐ Z*Z[¦ë_Ršåx‘îy%„·6(\ôH]†»»èé´]sõIç6¡@A—,•É÷TÖÌ×G*o<ˆwÉDéÁƇ,òng^J)#sþ$8]oç ¸‰¼óÍ[,å•êßž+‡TÐQ„Åê?} ¨ ¡à×¥[¦÷³ÏÀ)h4L  Æ0aøUêõ@»}­yÀeY‚HÏfç[¤íÜò¡ êÔ`vêa TéçÕ!ØsTöÞx2®\êÙ£&ÎÌè/zD«í:5¦Ä×­rÚ‰;vî7uõ|SÍ4$œM/ôÔE±r¢Ô9)\šÛ“fC¯›«ÿyH]QßJ4UóÓBhäÒnIÿ"Öd6ô,j“Ô§p9Á²2·‡+¿ëêí\ܰizíJó4+±Yü½Œùlû_C]Þ¶–ä>‡}Þ­)%@¥ ®ëZÒûvÛçqôG…:"˜1ˆ]ArfÅ ð? 9ËB“èô®FØTàVH•¼71ÇùjöÔ‹‰.ÙNZÇŽËeÓ$"©üŠ+{\!«¼&j•Mþ&ù"r²NißäÖãâõêHIbÕÝ3z{}ó˜E¯†½ŠN‘GfLµ :ÍÖ¬8 ?¼#ìJi´6Ï4@Ž8úÔhà"ú‹µËG½‚+sæâ÷°˜Q)üÿíxóšEÉŸeoN‚Ѩºç¢YІËnX_Z]ÉQÿ!Y£ ø²|¶Ûy£ÇQ`på—£áN€u¿B³uõ¹¢kËáR-hS•OB¦³“5ÙU$œ†C.“¶@é} ;mbjŒïòâŸEêŽ> ¦—h‹ªi_ãÒ`fÑà w•½v|@·ã¬õš¤Ž  ·X^ñÁÒ žÒôß,|y…9Ã.›bg»ì_Yæg£¦6Rµx8QW§ 7Ù='”WÂ8±õ•VðBͲ˜ÓåÛÉŸ›ø¹ÆLcf±‡5ùMcðöf© ãI²&„]:TàZ‚}_²ã™ÇKž™|)Ú‰,2‡ñ;KŽåÜÄLÅ@ù©ù} ÓÔ?ÍS;a5¼önJCe}×Åðk~¯ï¯LÌ *¬ñ„/‡‹[ #‘9›ü™@XMÕ?LlŠT\{Ë•[]ÄÌÀºÛzðìhpÍß&e‘ž†R—Õ50æ6ɵèç%ô*]d2S²„}xâúˆˆÿ8pÉdälvXül›dF9žpìÒÚ1\§·,‰Bñºç;õ!õ1JØ2Òn}iVoùò…ä+#E:e«Ë˜©%Ýá½H÷%Sœ™ KÓïòfAW æÔOG›é]'jðm˜„yºÓ83ú™ yIm-‚Üs‚ *PZz,9Ý7pßç3»ŠzÁ’ˆoÙ R5*ü×€—3S€Õѽý¡êìV«y>[Ö~Áñ:5ºv麢ÀWéŸyvGrÂ1¸Ž`›Ö„õhÛwá‹øÓf”ós˜˜T‘#ÍÁðKó>d“¸é·³9 ÕŒäa5ÈÕ2¥æ˯l‘7øÂ!æ \—Íž<òžK™Ô_®m$‡uý"Á9rôZߤM§f&O=)#¡lNI‹òT=–Åㄆ~îÃx †^@ô¼ ÷w[w-ÅeáMu]‹‹ û[º’%"C>d¢›,˜@íôLmnˆ×™až-°äaÒÕx'Ͱâ¿? @¶ƒ²§*?€EÕ²iwÄøÀæ°Ô2Ê[<ÌzɤB/þr%Éhì«úë2¡Í&8%Oˆý2ÏOs¥ŸZ÷›ÆJ«í“öJË[$ÐÂóSb™¢y2”ˆ@g{ÙÌ1² S˜v}0´Ž³X$î^sù¶ŒÏÈ¥$1u5úu¶A0!ûq„â¢ÂUž„QÝC¾ŒÇÿ9ûç"¨ö‘$áè.'Þém 9ƒ³YØh®TÀÈÆEËŠ°gö„V*?@öF6Ü>5îïÜcvrvä®yÜUº!‚$qP *̱ÁVúÀ[J?¨›PýЧƒsÐá'ª Ó:×VÇ[`à!“œÛð(C"Ä®€§VÖ'Yäñ\D0wx(µÑj)Ín3qºX %^ö’±(ûWo7f±†MN²{O´ ìenç ý.5*ð(“ DsjކÎÃh2D.zÍ>¦w?ñ:®„·48Mº¿)»t- >/³?J[#Oéi9ƒ"3*µU":¿åàÔò]¹ö8c ~­^C{ü × ‹ &ÔÁàÝø±L•lM;T U0¹)ª£Óˆ·×éý\µ'Ý ‘x`xÈ$ö?ÁþŠ÷‹"ãü¦²òÔ^Ú’7´*¾{Ù[¯@Øi;j9;%U'³:{ îrkÚø³7«HÚ õè±ÜXÊþZ娄×B›ÁH_ýïž·Ÿýe XÒÀmE/µ{o{qç 4döÏxŽzT´_…J˜ƒhM¦M¶å2:̶_V¨ ýÈn’ÆÆïŽ½ë>´ ZZ?kÃÅ;ú, }"n S›ªÿ ÌÛno²ô‚+¹BA¾²,(£”ÏÑ9(ÀœPZM˜-L†+•äºÙb߬Ýiþ=>tAdú¤Hí©´Ðg:ô—yÃý,ÿzÀŸ° £°ÃÄeÀ‰;P}™¨õ7¢uHÙ«ñQ“cæ¢|oJ¾ŒÇQs匭X)öÍÆ´Daÿ#cÓ‹’Î& ¢×^÷C:ÙYÉ)FÁm~K€ ¿‚÷Ý8º–˜4áÂ@¸‘?SÈÒò’éˆb¦¶XžÇ׸JúÍjêç^ð–Z:qrv´¤rz¢¬("¹ Æî¦Æ:ºÑ[Ì"Ñû¥®Ž\uoÙ«uû=¸¯Í4§kÂcßéº1WI”ù¸]‘çEa¥Zþt3…êL°¥ÌØÆzíFGæOa€j&´Úv¹ZTíqó)Å+h±86vu%¥ Ö¾Ú¿t“§£þ«ÞÿBàíæpWŠ Û¥ªÙÚåùEcŽFØþ0yðDÀ&rÒ8iC¼×ÈLµÊÂܼpCÆYg@Ù%Ržx…µÏPoª¶ƒüWf±¥ËÎ#§V“ÝÏ;çÖÁ…ý¾W59c4QS;]{r¥.Á!³cfH÷hÅáøZSÇò¥ý‹µ¬£)ØòüXïïáöºÁkÔM›¿  ;*v]í<îqÏŸ€hÝö¿üx¡}·¾ÒÔ¹sBƒÆÀ¦ oÛž‡ ý™_ã ®›w6µL­ƒYÏËBãbß¡Z¶ n* ÁÎz]`ÝéK9ˆ÷#^î‚øü{+/”*úéºo¶èrO^ÑZà·B–R6o/‰“õfOœõ pŠPe¤«óë÷>'ðáyèepi –pBeŠu[¯k_–½ÇÁT¨Ê޶%|ݬ«^‚ÜÃz€Ó"×®Ørº¢¶õD^—ï:ˆcñøªØ ýjÕ+3ý«iBNT‰»xÈëM=éÝ Ê«‹îŠ­QêKÏ®ØãQE~îÌ6¬b”¡1<Ýv40<Ê¥j@rêÇV]Ê š@>”S眑àNêoT:ÂÙC¨:,ƒ¬\7ô <™{ââÎûÜ©2$e¨ø=•ÂBoÕsØÙ\x =É(]ý!ö(V#77ãÚ5Pºx­¨6HÁ§ÁlË«ÌÊÒ  'CÍ? ó—YÌ~QþPõ˜“ø¥ú­`ÍŽ8ebEпÊèþ°™—Có#ˆëø@N8Ÿ Ÿ»‰ìW¨ Ì@ Ã\²CMx3\Z{4Î!>KÚpƒw¶›÷msR¤ß{Ï!håÏâÏœÑ\¡LD `b;3é1 jR³ü .,W”haaÚïièÏ|i»’¯ÍȤIòxä%Ið6ÉKàv(™cý¬@ú†iÆn#Jm¾v*¼ÎëÄëV4²ÌfÐë4Éo1ûÝ:‚Tš2ÚYŸjŸu…‡3Þ i‡’PÇÑ—!`#Çè8Ú=!1dŸãxãig`ŒK¥rëPÿFŸÉý^¥ÑÈw ÁÕ³,T—½FÜ/w6z£òâi~©önEr¾¿|ñ€(”òìó5½ȊहI„‘©óœkr€£ÊS“«÷ÊY‰ rŸ&ˆÔrów>e³úg’¹Œ+æ*»X=tËE£Âb7æwæÏ’ zѶJ¥ËΚ¶i»2¨G™öú3üØëÚ»¦¯_&WïÜÆÿXÊÚHZyä‰ãÈ핈{:ñ3RÖ­åsÕlz4@%Ö)¶ž¥ASŸÂf&ÿÍ묺a¯Ÿo7ù’h²öéKTíf¹ó\Ãs’(g/Ìzu±…mžH¡¤ ©ZÌ$ …ÅãÌô¼\eî¯Þ}§*„9¤‹nr—9䇣nϬ™êXã‘”/~•j*½PµeÛko¨žÁ“>îåÍÁ ªlÓÐârëqÂÞœ.•Ú›?1û3ª5 ^è¹¤Š—¸-Ñr¼Æ€½‘®¿6¶a|@Ö£„R|¼Ö–ªÌëtèW:–Ï6äƒpD5–¬ QP—ìÕ$ÔDþ¦~î j´ùßP´S³~l‰ÂgXÄ{ýÛ¦'?~ä Eª‡Í¥4UWYDÖvR+uü¥z)aðhÒ£êIð:ðvê·ÖЩzÿ-íÀ@.–+¸©„š±ær¹mCÆ«ï-]•†ÏŒªöï&ÿ/ÕÓF‰ó Ñ—iÐ-Ã{ˆr©CQé.%6vVžþæÐØ@·–v¨£ !›ÉÜÙL;3´¡ýÎ0‡|ÔäårttM-”ËæÛu¯¾÷ §ej`ÆÜLÅG¶Ï™(~bg%v*óX„ƒ‘b«Í\½ ¢?«žž Ï)¿`€È0LjýhT7#„.ëÂü‚ç[èÄDúË¯ŽŠ?šX,}ƒœÀrïëþR¦~ÛQ 1°U‹¾6œ¶¼LM@åÀLy¤‘ÇQàÁNi¯’·´çfñ_])ŽK `+ðä ;eÅðÄ¿Ê?ñ!8¥«BÕñ-—m^²f5 ÄIÕ,EÝøqGKYHÙ?ÏmpÔkbȦ^λ¡Eû“Ú.éÛ§hcf&~_ü§o‰²k‹ègXê0³‘ —ÐwŠéûÂÃëÊù*¿.½ )"Ã2ŸÀd2VGÉ‘FÃSžÖï$Di‘£”J§ïu üŸßÉYz¦)w_7)òõñàšï ²#Q5«+‚Þ½­ûümÆc-c)Ã\¤°ùPñÎùÛ oó]ø$ÌiéÀË…‹bXqú"î§Âg-J“8r5s‰b,àLö¢9=”ÃÐíIœ”1•Fà¤ú„®Ò—Ê”jO×ýçƒ3ı¤ë–j^q ò‹â.šÐ4J¼Á(ƒeO˜¦³Šµ°¡?H"ÛI›mt¥>­?;µ5.³c PÑ6´AÁ¾ÜßÕ͹¡QY¹§ÚCq‹8}»°ïèÎÇÔkCy:œ•’·wÚCóãŽZÄÀÉÈÛ_ Üà”ÑRÉF„ë{Y?ªhÕFÐü¡°ÐºXBC'À1e~(ŽË¹¾¹²"«±µ5òc€•?=êÜgb?«µó~sÅ”ÚPú,ÌÇŽø¼Ü¡„˜¼êeA"G¶”ž×þñ€¶Y‰Í2ÙbþA€Y¿‡møÒÒòäÁ}³§H˜Ã’Ši—-ÍÓ°%(:/è©rÎT;‰6’Ù–©×žŒUô˜í.Û\Ò/rEÃôë‹þw¯†bÒ}ó¾€é ÄŒ*]oD!jÒ{h±¨“¨¾ìòw=H¡ˆ#ßjøÇd*KlkûìK"‚ón ðë0ƒ&éÐÁSï±1ÆŸ šx|²êQëßµ Ö«Riç©R¤Ÿ#™M:ÂÇ-·3ftÆÕiŠ}/iè_l(óÑg%0 ô³.73І‰1îSœÔ* RìÂ_Á-¦mBBÂd–©lÞPc×OÏÜvDß66:‹Jj UŽÆf­Ž­eYšÆê4ïÏÒÎÏ3ÆýM†³ú‹þ0mž‚"fžn»¾/þW²JòqJõ@,§Uò€‹‹ß樮 IÅZÊè†GÜÔp=Ëé°X§‚?y Jñ‰0êSOZØ·¤:" ÈÜMÅЈ¯\tÈ”’nˆÌ€Æ>ŽÑÞbƒ¸…6ÿ‡lc…¿6ˆfAWR¥Âžb»†ðíeW‡@F­é%ŽÍ¡ÀBrgM,ŒÌܵºËVÛÅ·u·M™“‰3Å™#М¢&;Ê sûÙþ>”Ì,b¾†ÿ"Ê/C©ÖXfÞD 4~t¿W9]냢¶Õè̳MâØ?å§òZLF–8xsæ"h‹âh;½¬‹KXƺj ^¿=/¯´}:_6Èt‚E´õ_hi‡râs©è"s6HœÌÍàæ~œ!lX8…1+úìþ3ëx{Òi²a¨¬Kò“`a‡Ä3Ùc3ݱ<ú®/œ]Ý£yä„’«˜ìzý>ôF˜E ÿu§‰‚¨^Qý˜èè™´z,hžKðÜ€£Î*.ñ?T><*s!_-R{ñ”û`-Õ¼°QO…>.E;ª›Ðm¥µ¬ÂGº…¹ÒŒ!À³ì-‡²¿.6FÃvÅÑ|˜ÞÚ>ÌÑRÍtã=(ÂìWFZMec0IQw¬Îº½ ŽÄ®ê“ÝüÊx_˜oÁ°‹¥hQ'_QöÀt}ãY"úÃøž”ݤi}Ð9.µè’ñ&ÂìOÒ€Iåù=w-…õѦÎfDé ËWÛã@)í¼l×9F'Ý+ O²ªalª—ñ‹•Ó7[è«Â+×gýÛGJŽF×øÃImµ¨˜²uŸl§Z`4ÁÏù)lÐ}ä³6¥ƒ?M7а[U¸òRñlÆæÃ¼òH"˜Æ|yÍ̸GâØG2•m!.§÷,¯¨J~­³D =ûÔ êZ\hÚ NmŸ}ïw†["Ì9ž½NªZ²ngƒàAW@rma‡¬À;æ­½_Q&—›Ù`ð¾ðW¡±Æîžþò6ÕD÷’%ð½D´ &g2# AÕnãx¥ØùCN=q]NÊM×/‚€;ˆG»ç±á={ÎÌÀS¦bÐò¿´ØõQŒ8sXÔ4@ØVÙ‡ö@Ðh‘ugoÖ®.…ÿFðüÊx˜Ýl.Á< T>c_ –€AÃÛv¿À¬±ìÓDøjã:ËgAV5U›@¡Ú¼ ±õãf œþX6 µ^6…'¹<št@ºÓôس^©¾¹Z¸C¶àú 2TŒü½¢åCEZ¦fj¡Rxf®f"çîîY=Ñ>_A^Î\¼y0êÙAÌMoS:pþ™Œ?Ú7‡ÄCXùÕü®nßMרqðEÉ’Vp—´X 8ìÎû¹·¥W `@t£H"ЮþÍNV€a¤KÐr’Êy-ÓôÖä$Ÿ H¾Vqº‡àþŸ(À]æ¤Mb ]X¨‘·™ìiPYä¾1ŽwnÙad`<°_5—ÉÀmŸµwÈ$,¹4]ºTÌ5PxZG»Xó¤_…c#ClØß³˜›õLfºèêuVÔ!ÎyÛ¹{H¥ ê=Hlì~ZÊ_a¥Ø3#WY™CºÏµ”,`Ï’+‰9ßpˆÛT'hbfW™Rob¤Bó¢V§Qf.LQeïY7ãPÑfÃÞ/ôõ‹’üR?³‰x˜‘\R¶ñš°ñÐõ¼àA^¼#¹ïj–œŠwºtæ ÂU«h¬¡ÙÊÔWœŒHfF6Ä÷‚°õ<’)yøÕ«ÁC‘ð.”°QßEY52B4 ªlö< î˜õ¡2âõ³¼Pì!é‹ÿ?ûÝÈûxX°'ÁùÙ¹RÝhœ#¾ÁªbØ}9ˆ¶uU^ë4 åî¿F|ŒˆÆ Ð/QxkÐ|vtÒ¢#:R:Sñ¨ߘU‚á[µYÍ¥•¼MÑÞ¸¡ôTQ¶šY ÌâHØt…,6Í‘ë{ ½Ú¯ÕÜgr`ò–pN¹êë{Ä)òGgáÆƒ¢Z±Ðñ™¢òþÀbæÈ†s#̇ü~’òkÅP;b±‘oí£š·*}g{¿‰C½±2ët`T~Εçä bçÆâA²ÿ‚T ‹Ê²—›€ ÞNHRCû Ä /©ûûÝ‹©ï< §gKu25I>ÐÑU¦—øÖÂpœy^¨ËМ٥Õ‘ r‘ Â"A¤¹µ©m5¢ jš¢'”B0¡Yä¼í:_k9N!œËó*H¢àß!{Ü‹S%Úl ª¿Ë˜“Цñ#,va{*üþÕÔN™LZ¶h; áó Ùœ¥{ *œŒè¥£ýú {òÍ:×ÌéÀ¬©5CàT×zN1çÂRØlÞÒÂ4>à*ÞÂop^søµ¤db)"ª0e­çЉYÁJ–›j.{EðÏK7Ì#¬Èfç{Çú¿H2ð̦[ĹlVùšFNÈ×÷Ýö¬k¿|4þÿ‚éHr »:YQ@Š…òS¹}Ú™±KpTU!H6§P +µZÕu¨Ftüô¦XüeèZdö䥗b÷ÒÜtÌ Íø{MÔúfÎ ]ÿiÍÐöͤ¶Ùy©éfø 8 •ÞŒµ¨xìkVE Û"%ëÐw6Qé´²n1-j›åé]±ÌôÿC±Üù5y™D8˜´äÈôÀ­â¾ÉwW "éî§›×Ö¶ú!-;‘´pw^ãË O´þotÙ“Ítßaõ@úêö:{ÜgÊ òÆ@En<ÿ|ñ5iÌgÙKL/€ý7„$ဪÕÊòvJ†»”úŒ(ʯ±ömè&NAçþ2tç£NEÿ%JbóSÀ@$þ›bÏMŸÌÒ"³ ¬ˆbj†p4 3,Ä1±[$DZˆûâæOÆŠ}FዊeäF+”`½ö¨•Qõu›BA ¶&v,"‰hwœ€Z’>³,꽃Œ®Òîå ^n”¸à°ã?•oË]¢²h³ js† ꕇÔr¿•v‹»TòãóÍÜ[ú¤ÿ£º ;&7oάaº¯Ï¨&:¾’RÝAQ’gÉ:ÙµÒÑ fÅ08­!p®Wy>:6÷N U ÙM²9À[¯Á†a0ÝAF ¤ÂˆP¤m\¶'€ƒïz.»/p«r³Tùx€Ž¹\&°ÇyÕ1ÛŒñYg]x>zàL¹U6Âlx@š’u漉Ñ?&¯lNûûl@+e~OªÒùw•îÕß,è®<ðLÁ~¸zÔÆW 7Ý»»´5÷M@ëzº;»Íõ‚ý24r¿ŠíYEz˜ßáëdrúà8Ù+xôßN|"ï2–h a«J™Ð9"¼ÿæDsöÿ•óG0…"l³ùÑYàðœÜÖ3.ÀPÑ¡;Ì+¾]ÄV >Yë Ø¥æz r•[]¸\iúÅÁ›ïsØò¾Z“³¤+1ÐC‘²7~§Lçe‰6|•#É)ðŸú¶Rµ¦G^(GΚx„ëIðÇ´WÆcÿze-€*7áNQHùjRK™÷ˆ‹!ò8¿Š#€Õ¡ D¤GmÉÞ{ïÌ–*Z|–ÝÑϼƗÌGOÅJÅèáÐUŠ)Òpç\BÃ+éƒîÃÉ÷–+ãóÉÿ#ûa2HY,›F¡â=ä-Uím»öï+ûŽ Xbá)¥ÚVÌý%”­›«þv[Û! §«!(¦\_ÿPdH26 ^Èò59Û¿rÃL[§å…¯‘ñ€uÚÎ:¡Q¹©%‹2N»ÿ$ â3•J6PßÿyRÏ?°;'š×õ¹–ïxø’"¡×ÑÏxjîJß;([Ø •–RÄVÐ(’VòC /«¤Aª$o)y½%÷k.‚þ5×£®h ”öJ,SË#u+v yæ­çÙÉ–_íÑ‘&þïÁ>õn@ÇöÁäË|©…°¹À˳7ÚßêGC7á Ï¢\À "rªÚ(¡%̃¤NùÕÛg*–ŠùZ~/ÀfW—@¢å¼"”Ú=Êù¡Èu擱EcÁç@.‰®É/Cð¥YWÚ ;Ó‚¯–x]þ&àtkk8yƒ²`¡úÍ›&‡·:\æ™ vý˜›ª2µaxÕ_ ¦êB”åÔE;Üt8"o'êØKЯµÙàû„Œ­ Þb·Õ ‚¥â¯±bè5,õ#m±¾–6¹%Ñ‹l$/a*lNÙúIü1Yнê°~öÑ•7)߀"`4 Pâ$…숾æ¶jGƒ2ÛïØ>ýÀ_Ä0ƒÌ¬‡A\ð¬X}6óT¼z5§¥š8à#*BmXÓ^ØíüèÂW÷K$‚èÚ¯\XìùævS¯¬Eª†]šÜÏ W¥/½ ¡š³\/,¶‡—ѹÈõy˜“Sp!L}n*¥£•ÂrŽX D}'Cú e2—YÍAVáçOí ùƒsê¼ú)5v4mè¹ªÐ•áŽÆ\c¶Ë2AY†ëw wåÑü)q•½™å·‹±rÊSTTaÝ6dB•cÜå£i^Aœ¼“ìÀœ×”AõÄIB˜ c Y_¹C};Å*C¥Hô²AÆ#öÒŽ·+h |—(añžÀ!Wç0ª™¬/hT’ÂyÏÂHS6+jIß²—µRŠ!¾˜ õiT -æ<`…‡]LðyB¦¤á=?½±|úTGO¢€Ð¼jÿq«­–Øû®SÞh"¿úYÏÝÓ­®#¯â‚¡c}Çl¹O5z­›ª•øbS˘HÅÍä¤Dü6­{Yª¨~KÅCò²_ñQß]ƒMnþŠ5Ð>6–ÊÃO*P; jÑb<ì¼§»ñÔU2¹C|÷Þmoû/Ñ9Ù€ž°Aw>".ʯ„év9‡™rްf =T/¤¢8e/Á-ôçè<”¦í4ìL¸ru•Z÷ìÇd)!Ñ¿ù¶éX¥EoqLf ¥z–0j¡HMÊÀË4°N…Cþ˜¥Óhý hÍë p“ä,ÞXþ1:9—Óݵäá¦ÿïNYÿ^;lÂÑ D®ÖùÚq‘­ÄíŸ4D±ÐØÿc)êç×Â?°r`Öˆ*(~Eê’ñ*³Tr$ÚÁXøh_I©ƒm÷þa$olzëa2ŸzÍ—Säê)ˆ{7¢¬> ôyÊBv° A†¢I³¼Â:挜åN%‰ÃØ^ü4©ÐÑkDf&ëÀ²+.FÒøæcW:k5¬PÒȹöÜî7™ÈÆ•ìéS—ÇšËmÄÄ¿q‚D7TSà6|:Dò‚Þ²6íפ†dsPŽæœÝÃg06ñ(ãÑcf×!s_r¼5}$Â2ˆÙüìü'î˜àiXÑ3Æá•0.›ØÖ¼ÛÏÔo‚¦‡û/¼†KàHp3ŽZSk/Ïž£Æª³Ðú·]#á Ð;†Lòñ଀*Uå íMVðÕbæàÉÖQ,Åoá'Cé6ÕhÿP¶Ú³D-xÞfÉ—ëÛÜrÀ+úœï»®³¨Ò`‚[ òkþÒ> Ò:X‰ùe*d¶ àäNs"ìüVyYž¡¡Nc#]‰X Ëš£ ùþºL®•¥ ²ÿ!DÌ*9ÎÆfÜk¤#w¨&qS˜º4fA|Hv~pq Æ3—hÞšU¬jšOe?½qHWúÔ&°võG=ó3 `‚¬bå^´µ~¼¥­~öœµ•i\rö8 kØÉen¾aö’™ÑÔõjk×g¥ø:þµ¶*UP]¡÷^.T(±V8 ¾á Z-0¼OÂ?°×ÉJño[åðYiz63ü/ɳ0;Æ¬ŽÆºÎKº3=¤M%™;…'÷íáǧ*<¹§mœƒ­†[QÿXT†yZh×–Ló¶!D¶•aíSÝÉØûíi¸ 3^ÀµÒ¨R ñ‹ªiÈr¯ZW»LEɈñyj*çö÷<š !?‹VôŸ$m¤ž®?&<"bGFWï¹ûö¤ÏÓ¿B›\iÊg‹ÞH]Õ!!8Bö æÚ¥ÇOá íƒOs´­H¨2«{¸V€ÍLB¨Ó‹ ¥…Ùyÿiï›—OÎh¬Ë·¥±™~7éƒÍU¨±òïEP³ë ÿ4 gÐ)@Fá“[=€fOÖf™E\þxÈoXËÉ sç¦÷ÙéˆõBéuãy˜`3ÓýÌ*&E{þ䥯wAj[Í<@pO´”3²cZæ<ˆõý•¿SôÛÕÑVæ“S‹/Oú‡Í=˜¯“‡Ëø÷2¢Ju ìÏM¢ÙÓ˜ñò9š­|å(¢"»k:ƒ æÀÌÎɹÍo÷/.û]+zšLâ"pËÊGÙAå÷ÐÜšjúäÊÜÏ]Îù¿`ì#ΧAB`Ï®p6µýqÿŒË`’•a±)JÖwP0|b(à<˜ØVíx·Ë–Ë…ùas¨¼Xô‹ }]¢X[Elà¨y4e58qR·ä쬥[àˆ,<¿/alIý ÝI©i}L×K ¬¦uË뇺¾ 1Fè&¬•ŤEpÆ¡ëÞñÕ^×ÕEè”»„š%U/¾é ÃÿHˆ»ÆY?jN”_ûÐAÜOžb‚#×–(^µNÛdßX^ÖÐ%Umé,r‘r`oÿvw|ª¡~ÌÇuo¼cóܵÓ·¹")Ýù6xD&Ý#¶ÜŠóñ'žiPw¦" B¬Ê:„Õw8€P.³6׬ìôÑ_^ì¸i*}t«E­{,r/‚Þž­½¬Æ0­íæ¼)¤Ö=¼óÑ hΠ>l)Î$kµ­€ÎP)÷F…±[rÖìåxdb5LQÌ?Å^¬Ã‡‹Ä`Gu&¬Š³ãÂú"‚s {‚ð=thæPÅ`à$W‚j˜Ö_'D½v”NáIêÐìmFtY–Ïë|Æž(©Sâ4H¢QÎÚWnG"gf¦ÞùçfFßšgw:˜°¿}fŒô”™3ΰüîÙË€FmæäLlH ò V.<¿àɧ¸ÕŒ½¾‹Ûî L*žmøµtŽäZm¢«ï¤tT(ƒ¤—`[4éŠbñvfVÄèa×£)ìˆáRޤ‰ŠµYWFEôžü¨¼Ù$(´ïÄ®a]ñV™ÇCíƒò†\Oé@°¦í–¶óÒ7W"Î5øþ©9 Ù6Õœ ¸>T¢MÉãjâ}lr¹¸åâ£÷Õ:žø“e —BÄJ,-öªpµ=îÀv2m•5ð.«i?õJ^¢`áñh‡Xº°ì,B’['³‡Eñ’S‚_‘VG$‹Ýs/…PJ[úãyê ‹·#¥Y‚bº’þÔ¨úÛ¨…XÏ©"ÙÁÄ7œˆ!ž~øÓü؉h´ ?t±™JÐ9‹,µë^‹ þÕ\ßLjù~kð… ´zߟÒì;Hí›Ô´bÈ%Öû„¹½}™€Ø`aMÌ/û­Yv>ß.½¦Mnšoëîœ%›<Þð÷<@ÿN6Âèƒ|ž+Š ¬ª½Y¦jú@µásy±aÝäLZÜ;BvÔ¯m.MGÄ…I›e×!q.…>¾ÞW=xŠta>›2»òäA«œÉ´vI¥.L÷¬IÎ!€VHäàåO:)\ËÍÕ<8ƒÙ¦ó(σñ&8C–g“)ßÇßXɹ$~ñþB ¿ºs ìXn³€F]v=]ø¶þ¸ŒÃÿqß»@£»0ß•¢&omÈq%¶ÁbV²Ü€Y‰âGA(`²Q­î4Ž”­ö'çÛâ‹N+â” =ÖÍNP®qÙÁ‰ã „MG(¸ÀÚ¾ñöHŸsâÿZEÓ®L'npåDe-Jä1åk]¯‘§ì5¬C¦=5ßÙ±öË>’ΑšØ%¥tIYÜBe!oõj£ló½ëé.œÉvP¸Ô”õ| >Ù¬-ñ/ö²#Ñu¶²\…prî»P°@áâÖ‡t­Mž¤43/Ed0 Ð&ïWfiÁ2&ÑJU,Qº¥Î'?׋Q,îÈ:niâ¢gäi(Ô—jùžý¡+ëælا›Á)üýº\겎æWôWF¹ˆ´·ýîe§‹6äŒ Æ\«2BF­—ÊTäQ |`z´´ ÎýÅTÌjSÁJ(L=¥¶̆ð”A!¬†àµÜž¨y3`¨¾‘P‚SVJAýÄœ<\wG#ã®ÖÏt¸˜¢RÒ2J Œru2¥Íº‹4Ê/Ð.‹‘é­§ÎW¸ôyù Ž\è³Èö²ÂHÏø•“£Îf‰}Z…Ù¨¢#•Cþóš|”7)ùß8ŠoH£D&ù­Í=a²fW§1+õd˜ÀÙý|ì#71ÏÍr‡Úaöìt‹.ÅÃÝqS9XabIÓZ%Îì6«ÇÄ9,DEõ¤PÏFãòRsÖ`fësžyå³3óÐ:£­~¤VLn¡§Ó¿½33\1Ö ç‡^ÙŒZ³ñ”ö\Ð=kÅcu·™Á] bÕ“¦Ç[\èÉ’NìÀf§¢$Cj÷Êø|ÖãìÞºXgÚ h‡¬mý(p˜€bßÝxkP/‰ ò‡SÑííŠr$»e¼CóAê 1’à"úsœëN2½iðh¸ü,I×…¾S%ãZËà Ȩk2¢© ÃÇ9ag ŠcnÝ­@@üÅ&˜â@*ð4,àã<ªÝÐÖ®ñ‚‰ŸDßs˜Öt›ÒªïÉ{÷ïÀýˆxêÉržØËñý¾Ž¶±øÐ¥!HóqK­Y(æz³h¬·_:7pöéôá›Ä­ÛÞ ÄD“B96õñ:…¢^?¬Õ¾¤kyx(mÄìtOŠ«(s³€®ÒèË‚h™¨9?óYQ/«ÿo„3UZ_<¡v²dß ç±ú1×Äj7˜eZñó‘&ÖêÁ L˜áIzƒíÄûaäÔÃ;ïõéÜC+‰OKòÛ4/i‡öëéPhÈ0î’°æò¹¬ŽnÐÌýÚRuÍOœ­¿}ÇPEª‘p¡smŽÊÓ}ÿyÛÛ-’?)wéÜÏs¦=UÈdf¸Üu²ØÅ{B7ÈU™³ÍŠÄ‘Vj¬w.@× ”` pZ‚T¦v{,–ÝÉ©Xà$ѧ¥^CEäž¿–yÇ61Tõ 3P‚EÇ4Q›(äøu\ããë/á5¦$×=᪔q.÷ÀC ytÆ:$ÁÄŒ›¥ä;0;æHT¶©¥EbË»è‘tÛÛ M?[Â…4HêÀÉòb¿c¨™0À;—‰Y3“³fÿT¶`Çð$»ØnÏy뻂·.›?–¢šSx TÖXùÕ”pï•ÑØ¼3È/úpèT¯<ž-¡_/ZDzü!¯¿¢¢œ²¦þd„éîJvô¿x¸FQby±QÉS†h—‹SN~(&ßJîвR{U9Q;åZT{¤]Šºx39Ââ•Ï›Î!™½ˆxÚ=ÊÞosêÅ â5\o#:'ê¼½Ž-rì‰x ªïI×¶™ã–› %lÿÜ Y¯ :ä=€Î€äi‚&æM‰(oAK§'jJ§ÚÆì—ïS_½éGsI‰–û€/ÎzBÄÂOÞÿPcÕèí×eö Žgù½*´Kã~½ó ïêöæÌI˲ Cw ï%&&‚Ñ ¢2ƒ~÷µð¸¥m@½”\pG`¸üA‹Ä HVƪÖ;2Õá®?Ì S™’›Å 6‰*ñÒ4Á„œ˜]±îЮ{ÐitRwéÉ1¢gkÀ°°zvBm·#àN·÷˜•¢£BêBãjBœçz5vý@ÄëÄ¥Kü8r™U¥¯Æ)·¹î¾öÂ2å˜]èꪒúͦÅÔ®ò\øZR®˜Õ8àžÆ–ß}õ<“[Ì-Ú8ö„ B´¸¸ÿj8ÄŠ¯ADùž;¼xS°úªÃ<¶Íó –-uêÔX1(^bc¬å 5-ÆÂp‰ÐÙz\àÏÅ*Ê$Ô¤Ðè^S™.qUʪ e2¡ðôÕ:ÖêDH1Ý; å42‚ä@Oö•sB¢Ø±‰&¹,ùåf00I©Pf×Ì^Íà (!xIoÿ³± 'ÜÊn–@´8ÁÆ3ðÖ=nœl–|˜ƒ¦¿s|UäVáçæZ¤]0 Õ íKýî]¬<«‡¸êð3ÂøLéËœÖÈóRC‰“ÿf¯atÂù«ôWX˜’p7{«› -U `ùðt"B ¶B?XÐU8 ›¼œàI±˜Á¸²À¾›sA÷@$_ÚüoØOÎŒŽä´áÅŽSœÉÌ,¹ 5áS5üÐàÞ£›+îÜRq9òëOìéˆóïk¯¡bô,‘¢vY7&^;€T¯—Ϊ0Ÿ)d+ ¬eš&6׋‡H;2N@ïQRï¢ûmà¦TLÉâ‡& +ŸÌºm_ãdOp®XÖ¶×É9ƒãs{QÆ. аÙpÅš7]-RO‰Ä=4™…ŽÑ¬¬.VÕbÃ|Ek¯cêDrÊ»›A€ÑÏÈipƒ{Ãf2çÀ^4_2‚æ:ÆB,}øª¾çüO²¸ÞÅÈÊñ^Ô^CÛhzv­KÚ¼ÿ-8Byw³ë™‘z~4ò_n°×‰‰òÞ¬ó«üm&IU5ìΞÛÄw¶3z0s·Hˆõ`÷!Ñsêr+R[Ë¿-mò¤9ýiÚ©Úå´N‚¶¦÷ÃèZkÊîkùY4*1C´…½þ"”¨Ð!‹{) ·C| *…--㸼½ëpiû•£5T¨:f™pOÌ Ð=Mþ"âñ]É6ß® ž¢¾pÍ•gClZŒ:EþÙÓ±F«DÀ¨Gß׿ë$Ä¢ê3ýû¯d ÀÞE”Þûßçô”“ÍHtû¤=CxÔAvÆ¡ ËÌÛÅÇ’?ä7¬7#ZB¦’Äuðµ"ª‹F Æcx·±›mææ´±iãµhY–@Ê 9÷g`­Ñû„g+ˆ…©ö#!æÂvs.n{t/ÐE2Ú ¬^®Usúx…-a(²Á­(Gå"Ý0;`PlNùèkcÒHFµÛš­ù8Þq˜Ê;„›fæƒv¾d¢OG‘ܸÄ×…n“—œ¾.ÕŽ½s¹XÐðÐ&®Ž–;5Ô‰L2îúHñƒ_Oº7éIZ÷ÉHíx”—5]ÎÃc Æ%{G§6é½°xí6®ëÈ€ÊC‰ˆ5À'–Õ@§#ÚúÃkñI™NåëN,PÈE¿ò|þ ºž…,93çÄt«ýæ9gˆZùr ·´ ÈÓ·/Î.&q&(Gµ1Þ“ºæœ.œ¬ý¡¶ C•W9îãpJëMý"@"–ä%¦¼ã›¾›d&p®“Çö×( 2;:6G™ˆ²#qZW€ÖÝãbÚÒ±›„æ˜ã†5¦ómòcx Ò& ÉÒd¢Û]–€ÊEZß–Z¼ÈA­Æ,2çŒb4Â}P6ŤFry48¨5ªÑù‡5¸à?’ñmÙm_•±(Sß]±ìXA0]ÜËŽŸÃ^NÉ-Ý­~ufØ‘Ià}Ûì5:Ëg5µ #¨ÌîÛ xgA=þõœ3DZv8¡7 l¾ô ¨‰Jü†óxò\þ'„~¢ .ÃpF7ÊÖË`>Ø,=P•i…;f‚îÝ£eìÀº(w)û±?êK’2[zÿ4Í+4µf:[=Ü} V'îÉÊÿ=Æ£ñ}Ñ*b©i¾}ùMÖdtÒ£ o×ÑVì UòZ7E«ЙEGŽ¥à´°/“òB­¬ ã  Î|·¦[îS’=F†²>OfÖÉ¿" ÑqcxñOa#[;ÓW¼Žìb Ä#Ñ{eàð„ ßÑÁêÈ7¾{f 9JçM}„CÛå§…§oúÝúiS_B¯¥ýW^3a8 |œá˜çóÛ‡²•ùECÀ{¡Å’—•„­G¢öŸ£fÂÐx|È(oKòUŽO’ø Êv$™GUW-‚°¨Öi imŒãûÈ÷s n± x–w£oÞ¡B -z<7P×éòêÅw·ä¦‰àó²^ØYç×aC©Ùo¡FÔš(‘ÙtMͱҬþ:”_ˆõ†ì&Á'1`ß•5èÉÛiÃìgÈVªx¹ /qy,LÎR¿°MÃÔ1º#ãú ji¶;sƒÀ‡Ð[3eç2Ž<š‹ç|V÷7óM½ó´[Qç&€ AÓ¸XëSµ“Æ‹3Ó†MyƒÇn<ˆ#æEß”[>¹ê&oð¿o%…<õÚáäšë‹›ÀØØDVž¿åUÕ·©c+·0¾ç ˆ£ö§ÌŽ{xÖhtJÎF?±D šêÑò’@3¢QâJqö€9_òš©'F(`–î§6ž2¸ºUcU? ßÒ’•mfø Ÿ®H MiÕPJ+¿JxTµýþÐÜî\Ùœ°DHÓL¶©½ÉÜjˆ>iè ߥ%”ýr§SÛ¢ßÅ]=ªF‘+{kyÇÛ2–µá~©ª@†*ðÕE¥•À©x`cŸF >ˆ¿fÍ®"oÓ=»»D7ÿCðޱ\1oxJ$ÿ/>lg‚D†³V¨}¦9oˆêPà¤5áÎ*XiÖ¹H¯DËäêë4iÕ ~wlC{‰šÅ2Ê@þ#²4‰<ñ.-DqÃÊb Â!0Ê{è—X¨<…Ðì°»Šr†í\å¬e¼”\‰æi hV°Hqõ¯ÑÁǬÃY/¸öœÐ}I/ÄÁÍÆ5˜èâNC¿Öº††ƒjN_'IvT¿áaOð';À=Bîûê%Ôoo+©á‡(­ÂqÒHä¬DE¼TÚš©‹åBKõD‘Ç«2J¨’ÐÇz8„öËèó‚ùk¥ï>\Ò¿žL$zúK.ÛÈØè1*38p˜£W_” ƒ&M8É3|4¬§¯ ÊÈ$Ò9ý2õXeò›Ãv°fa¸ê7äû³»lTØUvXFRÃjÑ;=£*"ø±O°}~=a̿Ř¹Úzž1›æËz•zf9x6€#X·7ðh™Úå'’gQfÈçÙ ½fÃSµM|¸uùG=ùR«&Í–ºÒþ­¨Ýþ)F® ›whu ‹a KÄ›b„—UžØ±Ï^åy,Ýi†I^mŒÓ"B.#¸z¢Óie K—óOËeI¾ÌÊ¢–bëÝß9ú­fEcä¨a/õÛZ«ÆÝòXîðö9qÔO¿;·NÅ)vVL³;=ÐÃÊ.ðÊÀÀþ¥™®,oÚ¼š3D0˜‘Ò¤2œÿ@éö<>çË/ ŠMoÛHÕÑ«/¾»ÚŠJøÖŠ]P*³›Ù+ßðÝ5…ž1LÄÃ; ˜;LÓÍs¿¬LÇd´ÝÛ"›ðé0>z­jŠß&õ JÑ3ÏfGm’ï­i]á¶jÉ¡[–;út±Ûo¾šqFùŠ™³|Í(6ÕäøáyM—›ôŽ Üó¡wºþØÎ€§‹#(r«fpX(ŒpðEÏsÌÞq,C¸¬”l—.ä9›(Ç8zf6À‹ ÙGBõ¯9Á×*(÷Úó€j}V±ý»;®F çÚ±`IWa¥sKN~:_—oœT²[X©HFE•uÞ¸4Øu+ýQ¨¥ FÑã>ýc У½ÚŠÿ3D-Jk ˜ß¨hÏïP5ûÍ/6ñƒ¦_RG>uióÖor¿·¼Hù4o}]_Wxzùú¸ýº }]v~­†ýF\7Î;õ.¨å|ä?Wg«Ðª|š‡¾~ö~®é{çësõ^«²ÏÕ¶¨ç†>A÷Ô—ßQ¢>B_·±¯ÛèA&›ï«¡©óû£çÏÕ·í¿ï«°ëêÚ¿Ú`ø†‡õJ~ñë–Ìz(øµ˜ã¤"¨fºAF@W:òèÇåó³Ê‚%þ¢Ñà MÉrÕ—oÖÓræåxÅ’jSŸÚÍjÎÈ󽄰÷f¼d‚ë©’Í3PkkbZãã…=0+¡ÝX}’˜PŘ!ÖÐ6¢{€ë1N@`t6ø†ˆÛõâšX’GÓjä£UhƒžØD,d·úÜ7œI˜PrÂV+1<بҳ=Ô ›ñPÏ/íù¤k¡‹|Ý-%FÄlÀ'rãKÛ˜fâ5ÅŒMÊb׊¥el Ú:}ܧ埯 ©Ö;ÔåI $8‘ªx?/®Ž9+¨âh†XsöF€¯¢€|–òŽýöox Ö5¼Šéµ ¸ ¥Î`*„Tž×üœmKü«îÙ wL¦ Y¥1<d@WA‹PûKm6Ÿn·ª’Æ~šcnD¬Ösqe= ÛÍÏHÁô ã³.¦f áƒæ‰õf‰M¦l–>ç $»#çÇY>©ÄLÅu¬9âØ»õ–ù ¾=sk&wïT‰>Á¬­‡²Iæ;³16ïG¢VL ‚}P¿ñ¯É]*ôÌ“å1‡VJæÑË:%hMbÿO…òñOS9 @Ô Ê>Hl*Dˢ㣾«ÉœùP:¥N!*'ìBäS0EY /ÀuÁÖs{åi>#¼_ç¦i~ê#|PvÎÖ©•4ÂÓ½~M¦ ‡Ã8æ¥5ÚmìßäAÉñeznëEÕ6”qq"S%¿‚‘fB¯ú‚ϺÜô‘(µ>Õ¹÷Ã5É;TV!qûf»ÄϾ[ö¹J¦ ×ßâ ŒÈõÁ+NÏi»:Q÷Êoàó-ÒÕYSZÊ‹ÒJñÇù󒹟(\ðCIy»hìÞ³î)›WGFî3ÙÌÔ46å"[iëÌøXøUŸøS¯\p½…KƒÏ‰V+–æùwj­œ.ÇþrÒ—¨(äƒE}wåZZå«ãq‘Û¸ì*’Î3^CüôZ.m)'ï´õŒiØÕNˆj }:a–÷]Ö]¼1‘á*> Ýcríõ»ô˜Ž¾NàsïXÉSaÁ›J=9íà"ÉQn-D‘ípH^&õ8lF¿Ú«q‘„ÝêT5Œiæ~öÄø#ÜršK¿ÌƒA>å „ˆ•j}–®'1¾__R,-ΞYvZÒ3Ì…Š¯z©ˆÞ·`'ô±_‡ ʫԡµ8h¢ŽÎ'¢â1ˆAñòÁD·¡‰8ÁO¡)sxg^ÜŠîqN;7ààç'#) ÷ºwæ÷1ÅÆÔ$¹Xoþ²y­­ ý­ †D¶ƒLüNÂ)¶Ùc¤~S‘¨µ®¼¬ÿ… ´$ÇdUèºfûz`‰Hɶû3,öÇÑš]6|!ê!¾IçE™>/!IåFY^tØãæÇý‘—x xrœ%¨ G"žzbjNKÓ}c“OûV<©uí¿§÷¢ìåuIìJê½6¦£ Äv‚'½¤’R´ela úñX<¤P˜u¾|ì“Ëâ0Ô5XBŤe^$Ãè¡ñeJkº%êç*#2~¶ìðºv±‚u˜51¨ÈÝW$šwʳÆ1*¼ã©Ò™›¥ãMƒæ]Y•áWëÅúWà} iLè'³rÃ6<¶tØmæ8týB»;x×ÅýÉ_*+(>UK T†%Ð| º:9xOä8Ú'~·²ˆq‹@¦{WA`OŽWjØ€(À–í¨(‚D¤UX×Ek)d&5fÄïÏ\cxÁ1ës7>†ç¤-S›†›®‘•HÝDÌògZÁ?©—ÛúÛ=eüݦ†NQ<ä1ù/q’d|EôÝŽo|(t°#ÖMÍÙ.BM`§÷:&fÎÎÌC*Ü&i×K¹ð˜a‚Á “ðè}$†ds¶‹jÎÖ—Ò:¦‡{{=Se¾xãU;µd@h,,•CêÝMŽø¨ø¬ÖSlžë-ÚYñs(urOÒó6~Á72®ËéÞ¿õз+n?Í×rV¤í N=Å"-»–.ZÄ_ðOÕ3eP[<š–*"­¹Is“ÑùÌùó¦#¤%--¹jÖ7Ry©2d[+ŸÃ­ì(òë£GE03µõ'@§ÐëT%ùž¥;«¯ý%QËL¬¼I¦’@]‘¹Å–†êÿ?©Eä§×«¸dùRöw¾q²(³wùgMÁßÒ&Ïfç7ㇱç¥Òë¢`*àhäç\^f+0¦æÑƒS¿X©‘„º.d=ì«3nL ™ÉcU–_º&Wžß69Eà&nöM Êv§4dUši‚#¼r¶8÷˜Nö»Š9‘§Yp‚,QÑ«×ÊFC&êÇœfÞ.í/l?ˉ ë(˯֕jpxì6˜ ¦çuªþ+½µ~Ø>¸ „•¬äÿ^ÑxþOænÅä¬C¨~èØ_ì—¦¶ûÀß#øVÐ1Ý@dÌRuñez·®e¶]*E©µZùZ)4¦HîSþØûÙYfýʆ#—tœ³Ø0Ib5ÃM_5èNǤGÕc´ 14ß ^€@¤4É…Pì—˜È -Hah¾‡øá© ßðspGíÞ2ÜÁÑÍ’/¢Ï¦ùSJ¹6Ò¿CWÈ;»»Šz{f¿î\ªð¶/«KóTΑ#µPxùÍRæ¯IŸÈ½xel„í§Óz‚/'(å#VodV¢ð¿ð—ì;öÔ ´®£´aC7þ»xª»©––åè-Q2ãã•øGÌ\tá™ xÒñ' çÊûŸ¤-x3W!ËËGãEƒH ±õ¿„hÓš@õ‰ZEÔ8aUÜÎG®¤!Õôž`ä]Pu:¤ðÚ´†ŽÚ¸H/5 2ü ±Ýh÷æ.ÛSq59P¥ÏÖ›Óh>§@£Ë bº,âõy8JÒÑFMxНo‡´ýfü*AMô(>IÕ0¡Mž"Vë£öwÃ\0^Mé*jNà’¯k:çÆÞÈùN§)¥k#^Ž…÷C Ö\5mž^à„Ê´—ó‘Á§Œ†#¯ƒx¢O㲞³Ìx„÷H©š@‰ÍÚƒM\”µ.DCÙv~‚¢ÔÖ9‹ *ˆ†)‚Bu`$¥‚0[ÜÕ6üóGyøõ5PkêGP®2dˆº+¨½`Ä[+µ^I‡}[§—DýbmÒy.Ìh8õ•·’;ˆ‘Y†qLDU‘Öð¬îw9Sƒ7Sí{E BƒDªø„Ø7RZ OvƒÒ|§÷ "C(nWò,DEd³ºoGz`òeB’µt]›ÓáªØk ÞÍâ?å5M Ò’Oþh¢)ì·–L[ƒYÔXÜt Ƕ+ûh•¦%Út~W·‡ i¨½]² î)ô`̰ÕUwÜÕi¡î >È¥ªL8îyC÷®R‡fÊD±ÜÝÁ½pi•ß°²‡]ÊÈoùvãšü‡æ°G5’AÚš­m¹K‰Fݬj_¨ù›`§/ÇîÔŽf²îÍ}‘ÏÏ|Á±~1{É“¨BŠÉwâ6W²+™r„RN¤ÏÍÐÿ\U.”P*϶úÏ°Ò ÚY`«óÎøÈ‰u_ðÖÏ[÷`+€>gí$+„Ú ývo²“eînò¦ |{³vå !Í^EL;q.u2ÿ|ó‘’’´“ê´™j¦?dð‹}^?È ¬ËÐÏÀ'/ĈáíÇÂqÃ:j0äJåÐxrD?ËëZ¦Ò±,(º ]RÌâ÷ÿ€Œ²RÓ¶»‚„©(ãÊt×ãq(зäå-«§ÎL¸Í´[I›/¸h ø•£*ó–©íqc¨cD|“^­E£ŠûeJ»d7¬¶­éè5ÿ€“iÖzhÎ*¿÷aƒÉ¥Æá›ÎÀÏOJÉR( f ñR 0Uå2â߇oèb0æU³5£KúÙê”»£ØÞÌY¤A,8•%ÊÜ|Øþnpƒ!¨øéW^¬W¹©bƒ©t7µ‹rÃx¤%±í@Î? ŽRò 6´Ý5¸5ÜÅêÇS‘A°Eඡüñöø#+^íý-ÉðÛÊi>‡˜)‡T%é‹ ´ÇG°52V£P–ÅRfMÆFÓòxzòØN¼ÉÕÂl‰{pj}9(=ÑQ…¦Üc°¸9/¥2é>v2^iB¿yz ™…lNŸs†2òt«^ËÁÉåßö@þset.oÔi1:u‚œ9;‚ѳš®(ýé½¾^F¿ rŽ5Dc ‹5EŸá¬ld:lñFK&˜VJ3[€¤·Æœ¢7i|mTéu–î3À| ™ëýV< P“BkrY'1²1ø‡À(:mźW¬è‡øÆiØ 'É»¯ä¸XB®—Æâ­´ä~?¾A¿»Ç4TÙ©Ô•/ÂÁ{q‰jÎÞV“yÚx°(0H²áçµÝ‰Öp$äÍ^ÑI Â×òhñÈ,³_QøVÞÄzé›7Þ3ì%áøÍó=¬¼ îwGP«3¬\ À7—ŽCó£Lˆ÷ãf‚ç‘~EšØP¿÷ê\—s‡"Y`3le–8Èú‚M4Ä¡í$‡[B‚»ÙlÅI5+è»!1Z°ƒV oóÎ*, óà¹ÍÚhù¢H»;äiäß—Š4ôBSn±¥`x<µ™"(F&oe:™¼­Éµ§NY™;Ç[Y·¿¢X0iÕÊÄë›ÏÇ#öu‰ƒs/ý_|¨X¬7ô Âüµ:Æ ˆo«4XþªI~»6“B¼ÑlsègΪîVÀ…Ïgx|´*ÁÏ"30ûlƒõàmËKé‚ð’£8xOr B®b±M&ÏØ°»æChÇÕE/ÿ=£{ ]…ÏxEjˆÃew•¼Âèë4óKÿz[Þv²¯â§_ˆ+5£“ú¼>×ÿlŠ6΄•6(ª+߯ž‰a·Á©¥¢ÙÑZ¢sP}^ß{w%éÕ`¬¶Ã6]óx ¸_dƒ)œåhRÊWVaZDØ;Þ´·EN˜ºÚ’Ëá9íôÛò` r*âùÔugð]%Ø"Xx)iÜ^ŽÈÔw.mzpÀë¾?-¾Ü£`‰³ÒK©¬ûA“H̓¼Å ªÂu„Uf b’ Fµ@‹\cÖ¸2LW.Iàyé™§ÆõŒ~Êw4L|P]¡p˜Ì£uÈ3öÙ=Q_Õ–AxÈSâô ýÅîíÿ{(#MŠT™+;³½L⣠?g"ÇJÂ?k‰9ĪÙš¼TŽkV¶úáõg´ ^]otÉ¢}ÒàÛ ë9iýæþ¿¥e^çáuSoh¶I¦v­ÚŒÒ­ÿ` ^»¥aʹëæ¿÷P\ÜlùŒTËEQML[L§–ùíj^|€PU0c}Åf]ß26ç¹Ïiþ —X-UÎûëTb+k@ª±®…òÔaÜ[ {a€~jhÃ/ ¤ Á?–ÏT¨¬ƒ‹NIÚËY7«,±5¥ñ˜åÀ£œpíÿ|ÂmI«;‡nho•™†N-0ÐͳÑ#8‡<"®GåÔCQ„¿9pªÎt·DÆÿP Ô§ª<d–¹Dþ7|§X¦R »%¬Q?®2§Ýbë «ÓÇO#*R¿« ØùÛl@ùøy ò‹¸ODkfÙåsTÚ4}ÓsáˆØH¤ãÛ?j}$7ÒkR"GCJG7¸d<¥}p6EæQ¼ÞÝHç$á5),“䪉{Ïß)匿?>ÍYøÛÍfÓ3w hb}ÔÃ8YW ÷üÛ‚h?ZJkj`ÁËU_é>\êÝå«Z^ÁÕ 8r` x²•f%³ÀШã¾LºÝ"þé_ã8g»Ç3tìöj¶1;A“l¹s}6d¥iÕÒ(‚@sç-‹•%’o¡ú‡'ýv¼rŒ¼7„IͼêŸbˆMÝ‘—Øw¦Ý¯æ¢†(Éóq )`ë"” 8èí“eêË ÷¤Þí0']v¯&hªw #øœ±-8ù™©$ÂÂr>«Q¹)¢\(ãõ/†?½N-MÀÖˆ¶o» ‚ ÏS'-§¢GçlR7õØsvt#ÌàÔ˜1µ©(8ÕuÚˆ±Kľ'L×Ò¢¡r`·Þ'§—«!©Í© Ës¤¦„Z#•¶•²œà:c¤û‰P­(JØÍK®Ý9´bµŠñoWõƒn-î´„v¤–¢0ø$Œ¤Åt¿/öQœ]36ZÌjÆ ³ ±1so!z&„ ß´B«ˆ Û\[c×ðƒ(ºŠ'*E~Œ­ˆ8AxèúµÛuÍ]?®DSß \£óÎ1‹ R}‚;*ÑÒºÁÏSM­FÙhÛ ºrAa"’¿A"o;†›«Ý‰0Yð¾ÄÔ$Üs ŽòÚ›""acq©ÜžëE7ÙXWo˜¦â¡Í}ÑàÑ5zÅ*°ºW|Sº[Nˆ†Þæ])L̼“Κ«×ìL/õš #~ë›´ w ´ÄÒÜìJ­Î„ùmS†3‡ÞéO ÍÖ!¶‡r˜¡×AÀ^Ë ™„Ä¡Må^ŒÞ&Ÿ'n."¼ª6]zñù ì‡TòôæžiéáÆà’g]."±”@/ÄŒ^‚[ra3ó~2p«å/v¾(}¹wO1lï ÒèÅçEÖä  JD)X½ö%t^€gMʼn9ÂQ.vE‚ñÍ‚«*W.TÎëfÖ¤s ƒR\<9ûږ³ÃIØ­VùX §×CzþÌŸµÒ¢Cíÿ6ØûœÆwP5ogxiÍ’õ»êNÉ g‡«ÝÌÎÖƒ ä®å».¶ŒÙŽåG·ëÿW܇e ð_¿Çš©‰~îùÅ®/óž. cKSÒÍ¡èÀ¾*že ³vGWWP¹åˆ2â:ÕyD^…G/k­tl3;ôì¤ÝTû¹šÝò¿]¦þN\MµËú-uÛÒ¼}Mp%g:>"6Y Õ2‹­é‘ì‹xãÿiXôÖǺâЉ—]3òVQ÷-Ïžî›çÞ¼¡]uzÛ››€¾À»Gê± #†¼_|ì§þ²=B²Ž™ÑwÆE}Jv·Ìk'k+O7…ì¿»´©øÌ ñ]¨ñxè‰Çn.­Æ\:œ5¤çxZ¶ý›"Þ rÏb4Yy/+9¨ÌKx}…‘b|[Íî!ÜÖ´ÅœØLüÆc(¼*é?DÌ$º4fHÉœâ Êå*…`^cj…KO0ôâ©EŸ7¯{ïÌ„è°iáDqt¥¼pWÿ"¢×…\6?‡¯yÑè“4ÈXq³ÆWæeŽ€´ÒQ\ü—›Ù ¨Áû÷‡\÷žš¤¢¬½mÒËþ=¾5m“KàÆÂŽ¦ÃžŒ/æDF¯Pú$öÉ3ÛÅN9'êó´Zf3<ô¾|ž~ß«Â6µ(ü-/žïgáe½œmÉ=íÝÑ[Zºa–íŸ'<¼µÍLôijñ漸UºÄêÔéoâCð¸Q­8Sœ{ß{”ÄÇëŽOÆWAñ¥*"°Zþ\0Tk‰Oé·Á˜4Gåˤ´%€¯ˆñ?g¯;fPÜ£‰Ÿ«xç+aÒ»±ÁP?œb¬RâÁC¬”A-0ŸûÇlo`­îjdP®>èö&(s<r¦m‰kÉ2Ÿy¹h›ÝÞ7Ä úAþè;›èÙ0\!0½¶¿÷Fm¯ŠSHd©q¥î½TcC[fÕǼ›þ¤U€v×2RE´4 ±‰ G\gOÕÀ¶c˜˜  ÝäCgÜfR$±)ú½“7~á$SW¸…t˾qØ5=²Ê£iZgxÆ‹W’Y3T~mdÄ+&Pv¶üŠàƒIqNfŸ³ô–ϵ1Uë ; ‰þÈÞýÂH×ÒªoJ\2Á¡³G¨ç Îb£.Þ áY—Šaèã+›€ÿý=`wôsÈ`/VØ='«±¡‘=ÏKƒ˜¼È½Ê#3`c£wwStµ©ñZ6S:˹3í ÚÖ |<þE¬·ÎVì·JU~>¤Ÿi-ß¿—0ìÐvq˜LÈ*­Õ £C×ÑMgDí¬u^¿³~ŽÂJ¤g ÎîŠ~eý¿ë7Ú‡å4 ‚óà%M’‰\V´S‹‹Û%þk _ŽÐßý—@üå|ks!´Óÿw‚š(Í1ûÓqÜß–+z_^¾¢àyÁñ`4Ëï è‰û\=\â9â2ùaŽÜIâ8þ­q—’d(úù›Ä'^§ ˜›Úâ½@†È©R&oW‡•XÂ8r±þ´¤»ŠGP@`ÕO_ÂÐü[¸±‘ ¬¤4Ïq#>2“l{ð ?F©`?Qäû3Úœ·ný9À“¦w(áíÐ8Tºà¿`!?;T(ùywˆZÕ%¯)a'R"¯\|u+óéÃ9ò|<§Öá@F—YÕ*Ybð(Yî‘Ô­²ÚGªÍFÎÛ‰l–¤Ê/ÇŒF{Y¿\‰ªùë˜XZ œò9 „ð]U÷ê(™q§®¾¸ëÐWdc¥x\®ýMó”«A³žjý°;íAFÐÿu­´>{fͺµª<£!boá#µvˆdðײbÃŒ]À°y"Ë Ò£^¥¯m°Í—bΦυηe°A;±måE„~SQ…Ç[§#E?ùZåv槃S€4"Àæd2ñ½C¤ZÈš¸êû9sÇJS£¯`äÚú»@ ë|vˆyÒŸÊ©Âü‚Þs«Í˜Ç/¦‡Ý£;?*Jе[Á&rnîy—»žù2˜AìøV“/§w\N£·ÍëPEáòj'>«Ñ±‡ðõ)©ªlúí–±=ÏVÚí£YQIп?²ÄOæÜ ò:eusŒwⱄ%Ý ½¡H…oWѹä.ïֻń¡·¯ÛÅóó×&ˆž2cqU–øTݺlÙ:ɰt :ÖúûÊ‚×>jèh`Ý·‚CY"‰ˆå:€I>k†ýa4Üç~àÿ8³pNkëÆûLœKîu1—&HW#ì‹WÔSÚq˜±ÉYì4M·ÊkýmØ\k_ôÓ½2·‡NŠ-Ø/µµêw† ÛPÓÕDpcùˆÉÚTäÃ&7¸nwíÁ”g®Ó5ÕÝ©0Êc½ª™ÚrFfŠó¿4àN&ñÒkïàÛÃTÌõ S^QäøöéÛÙšW[>Ÿ1Ô­Õ ­ôÔ)Œ´C\-øMNyì ãêò¾3Ê"9Êg^®o¦â7‘›Òâ¼Òµ°=óÅf˜ôŒßgtÞƒä "¼Ç ðÿ_‡á.$É‚£’^×`‹÷·Ÿd˨“OÚß´-žWò À$hÈÖ·ÃN…Õvš8R_"ø†ˆ…°j›«Ðrx“øf#"0×K‹á¨êÓZ¹ÑmㆠºÅZùT?­†¿et°ßSV‰?Û#Í=\> âÉð›b¿l £ŸÿB´%[é™—ü­$+eø\Š ¨Ó¡[£ÏU&¦) NAú„úpgÖ·f’°™{Õ*ÌŶ¼£Y=ÿ[%ÕŸöâÂFiÝ3&2¨ͼ¬÷¸jvÀÊ#+žG·Ç4ŠVs†Hœ LÛÕÒÖ©¸à ÇÈ•õG³ëh·Â›H”öú5Ð+C{§+¡³ó<Ñ`ˆr²ÀUèÔsOãOâj†BäMtéƒ/'´ì€XNßv ‰”d@Þ§i£ÒfXÀ,Ñ Æ&¡˜^°M&˜WbæZ9µG)8Âü}féšY–(ì²*yÆt'²1¼Hxjßtl¾Eœyb¡!É’„º{>óɉÊsïǤ‰Ã!tÉYÛ%ÿ·°jšSº}k4_èòk_9B9”ÿ-HH@ØošAL„“©IgÖDžpÄv‡B?1LúF¿_sÖ.S'®$ýØÛžKÐúwÕÃi"MnW±ÍÜž’_[ó~M÷Œ´NóQ{È"ýœÁ_ü{q­jòW¢[”²³N&#wˆ'3÷ ô?ÚcX¬mÖÒt‘ öNKæ,\™Ø ç%HY&žå8gÌA|wÚwÆ¿/ã­@žÃÉß:þ`H§àÝèÿ.8ÀRÏvóŠÙU,øäØèÚÓÒè¸=6ÏhöwÌ>ãÝÀ5u€ùL÷ÎL£›ç4ƒ Ñ©™þ¤–)ÚR âjsÒw9;^/µç¢ƒ=Y" ÌX: ¿¿ ä^µ³YüÜ'Í%‰}mÙm‹[ø\‡W¬“WIâŒ[þ*õææçBÌæ}~`BZ)g Á„ ä³GaŽTýûBÑÅÃMöUKƒô}ZÌZ1¢­Ô嵐¨t‚äÙ ñK‚* €Ÿå$ÖÛf"i¤>¥ÈRyüÃHzÀ´#)ÎαװisJZâ=‰ÏóÆc`u"4 ì_eNþ>Gùíã­3‘p]uÃ4¹H5d2åÍ~ „w2¨£kª9ÞÎ4I$±=ô¤»ïsʘçóË5Å×½»tvZ.ËÇt•K-yÚEê·U†;ÈÔÕÑ[©u xðªÝÚ.¾>5ª]êÓa]výåAzúVà?¸–‘häÔ/É‹޾°û$NÉÚ»ZBŠÄ4|‰¾çXed¸7³Äæ.ÚË0}9žæ+eOÑ6ÞÀÊôð%Ç}e `kJ„Á÷-pW÷ÛšQù½ ‚Ÿþ4ÎgbØ…07ŸÝ±=[Y·¯8€Ë9µ1 ™²e'ŠÒݼLœC“œ¸aYÄf{è…§/É>uíH¸ºxìDòÅPÀ» 5 _îƒc™o†ž—ñOÇ’(‹ºÉ‰œ {„+ì€FL=ó xuÔÿŠ5\¬O?šfKV¯6º ï‹ëiI}Ì ,}…bÜ=åEV³7¢ÌúŒåÆCÝr ¨’²Ý ß}:0Ö2O=ÓãÞæ*¥ŒD–Cú"˜@ó52Vþm ¡}_¨'PÃ> £h T±QèÂ+šú}YÐ2ýñõ7ÀÚ-Ñ ÈaײoFhØ\àØÝyÉ}¦#¢Ì£cR,@³&ñÜ94`·dõ;·ã²ˆœ‘·"¾IÀ”‚nµ†YÄTëRAŠÿ7RÖ¤² ° n#qÊê^ÁϽ1?¦]íƒrŸq€ú~…‰«ÛÿF¼rXßyv®NK‚E‰ºV/Àý¿F+I!¶{wŒ!@ étHˆôˆ Îóöû! ܹ$ Õ½ÂéW½“Î3HØ«b‰ß0c`(OrðÝñÙŸtÍÿGlþ9ýð¡Ë2QÔ½Á—º à‰H lƒÍͳh,Áüü娔Ìs­|Ú•÷äo.î~a ’úä.KmÏé¦ ŠÙÅ5í—e´Ž;ÒÎäq:Ýl`Õb+âÆG~Ðû-”=&Ô.ºg]ð>õv¶ç†D()=és˜ò„y “sž=B#ª#R\·•”ûûAx4e7Ôæq*º‚Ñ<„~óTñûÕý5­ŽŠºJ§3Èóß`ã¸Ä÷)~0y3jiVÛAQÁ9ŸŽ@cÓµbsæ©2}þÞOµ]ð…ÝŠs‡L1‹x›ß†íb n&Gk:qÉBÅ¿ ¾\Íÿ:OGêöž?Â8(rEÿK¶˜£RPoÉ}žâ¸Ø‹Ý۽Ɗo#n¦‰½IÜ_;CøÖìzÚÍD5¥6£Ñy §èš`å¤Ô¥ j-‹_€¨¡‹IíÇyÐ]þ+È!&§ƒ®?›ÎŒfÁƒS¢»'ˆÿSüð‹æxö!‡âR¼}önžåÄqm^P "¿œ~^KôýÕÝdë‘­¤¼ QN|Œgû1pdÀóQ*c@{2y©i³Ö§’n¯ì$ºæº H>?&/¬D…¿áAR¬œÃÜp1áÓþñ0«°Üÿ)úª° zKmQ¥¿‰‚Ôªyœ6ÊÙs¢@—;4ž+R̉R$ü“"ªëíž³ƒ$Ã/òX,5¯[eŸ"”£ó„Ã~±DAæØ¡‡ 7·×´þ YÉsªfà€6ò01¦Âbm‰…G‘ºªM N£+×|[™}[ààØp„_âMo§5frnú5µ/7ϰ9Ô=<ÑFØyD¼i“*×<ò"ß$˜]YZ\ÿ´ñ\І~ß²ÿåôaq/<Ýd8 ‘#× æ9n¥ tçû‘ï<ú¢†k«:1d~ê_÷^™ˆãÀ f5µ-ræÕ`°¶´;! òô]G­<ôÆk°,6w‚oI[z©z.6*—¸ Ý(¥D@´‘¦t^=:M³S®¸ýZÅ.r6‘ñ'v¯Us±~sH²8Ilƒ*~K]Ä„ªîçd/Å+Azdü?”-ýy"n=l鹄ÎEnHdW6« š<xFK—Í :ApP-™ù®óéüÏ£Þ-ësá¤Uòÿyº ØÖþ+÷‰·o¿¼V˜Ï¥\í¬Z'£5õg6€,~UíbR2áj§Áu¼Q~ãÊx-àõÙÐtã­l_/²Ø5Š ¢#åÂH¯Þ|þ$#Ý:›C(å‘N›'ò%öí剮Í7Á$q¼2 2;‡‡Ñ¨¹9KDò/¬|´x·ÔýHgHÈU€3N—Ò5“Ôõò™†µ] 6!rAÐJA íµ ûN·i­„ÛsF‹È-jõåÏ£‹5¸+S¬^¸Þ¨d-,l?â;Ub^ÁÂÃ% 6øwb""­³‘O)dZãùÍŒðE¥5 ƒ &0‡ä{ôEç„üI¶ã=Ƥí{ÇKfIè‰åLè*b)åú€¾hŸe…so“/Ü ý¦díC„{ªHþ§í÷…©Ô9 èºØËö±ùèO _y8j|fÐ ÅiFrgzòntN6Áäv*êwÂpƒkyÊF7ã'8œërDÊ­X—!³ÎñÖ¡nõ‚R æÊ‹ éÝÏÄ_ók!Ã8.L4ùêB÷à mÙxPQB[Kú>{2è³Ó…Pç™]ܲ†–ã›á£•S²¶Û Kö .¤p˜¶ºã†”(±úï~ÝaÅq&×JäcU0Á¼f]`ÚÛx˜]³51„Œ± ¿Ô8i ôË·G0͆Añ3$fÅbæéÿ€òà6Pò©X,ÄEŽic¦$=“Ó@l°u2ˆá.Ó?J‘®5ì$ÞfV¨çJÈÛ3þQs;Šý­·sá ¿Ê [äÞƒVüõéÌ—„>†ÉWw¨Ïð~X! Ã[8ZIAæ;¾‹ö£$ìÛêó˜ýî=ñâØ¯jí;~W ôkҔ稿Á¦DÛ-É.jYCuµ)åÉ: Ú©ï/B ²E Þ_ ŽT7”J'â< u™‚G4ež.^=ÑÖä©ÃÈ̦°ŽTd· È îéEªf¥M±>ª"6îÇõ pgSS¥ÛˆÖ†žw(ùÇ+°÷k’^¨Ž5gÃùÅ"ÉÆ¨‘UWŠßKº ¤ùà ¿¼^eH6Ò ³ÅšÑ ´dææš¸>,}ªa™Üî ‡¢êÌ97÷!†1ݽœ ™$É×êÆ³ßøU±D{ê(vs3ÒˆùŽããˆÆŸãùÚîÔªeuÌ›Õ©× ñ©œÓ.[q5½Å³fùã¡Î³`V°Ö•¨ªñqûbzbõÐeáhû2Z§ËN×èŒ~6l²gŠ"‚Åà ñÁce6E"u›¯Ã+%ÉÛ5º2ÊB…ŸÍñ°0þý9?Û=å«xœöNg%Y•e«Ý2óSO/»`ȧև<ë¥(&ô.—]ŠSÉÌ·xÔ{r„Å#™uø¼Ãiºâ oF°‚CQ-sV°³yÜ™!7ÿ¤ØiÇöÉŒïZJòÌ:ƒˆGHI;ÿwøZùô;/^r™zc„]öÊ0ØŒÇÔwm÷~kÈÙSkíw=®_Ç1ö çeªIÚÓ¢$kÉm¢@ç¢Y+¢³Õ&I×S§ž«ð…[¦t×Έ3`fʳBÅËľDl¡ÄfÊoËÎi~Å#]õ›HleÒ~éG´ÝGÿ ‹¬5i•ï´,~&kz·fºEL…ƒŠš'½\ÆâŽœò´,ò R«t.Uä58ìüÅhý~\ÈQ1|Ò}—¢2—%1«iü÷[J¶ sa¥eÜc¼âû½]ïè¢ù›R7êÞÃ8…^+3Òô¯àªæžG÷>¹¨ýšO!ì]^.>¡‡Èࡌ5Œ"à²üš:)ü~ø- JlÀ™·#ö×û€ìöfP„‰ø¬Œ¥EÜv}ñž_áÛ0r–>íÁäš5,tì› ]!‹·$±Åw^YŠRªÃHÏ»¢6xþ—!Õq,¨Ž[&ˆa¸…gxºW¾dÈðßÈñ° Ñ–-6B î™Â ©¤[Øoõ|ñ;*ˆý0 ´§¥JåmP÷.«0Ñ ÖüÖÑu{ãsmôïKñd{h9¨k%ÃøðÁ,|6ù'Èóõuåú»¡Ÿ&¤ÿ+£{çöÿV¹?UÛúºÂ¾~¬þ¢þòüôùØ/‡çõcùýûß&ÃçÉßÏÕÛGúµÕú®ŸÕØwê×OÔgÁ„Ëçsß:Ä|'þ®«?Wy³äÕ=óú@¾m}óõIú¯Õ×Wê×ÔZø†˜FŸøD•¯üï”éb?â¨è©À%äÎÄùH)ñèv˜€…HOe4@"­ãƒW[ʨãøZÔľgº<Ú:' (sGm |»•>W+\OöãýXÄi}_e}Ø0FL;ëà’TJžžaE`ªfpÿAhÑõÖPÈ”Zs½/Ò¢¯)$SL¿kÿtƒàt.Ú 6é7ŸŒc"‘ÚŒ Ã’±µmÕVÎ8)ÈO#1eÞ$Pe0 HîcŠL…wñ~ǼPÃg‘4=^2¸©ÿ4>wÆ’³²/xƯ´ì¡~4;_Z<[:8ùã=íe €a% ê%È `A€œ\ï1}¹məзCÜ7ÉQè@™X1ijšC¢F1®;&Õô¡J0îÃè,p0èT40ŠæÍÊ=–åj$Rão†Á7«Í]þ–vªeYÀx¬yn9ÈÖø–—L¹0|´ÏBÙLj9î÷Ž·¿)?«g o š&©µ.8‡Œ×är–d­Ïø4,þ,.dÿ|iVnÍ ç3æòž?Ô‘fUÓŒGoˆ8=üLÂhkFš‘áé5ÖÌ^¡_Ž néƒçˆÁøßgòºnP‹Ã–*SŲp ú®°—Ü4Äö=m³[¸å´ )Â'ß³Êp÷ôdpŠý¾JÝ”˜Ó°UfA«­ãŸÇ)C¾Ct  Æ–RùÁëŸG™¯ì­Ú’^VNúYL@øúȶ¹J<]Û9¬eøÑÍt?ÿ“Ì–îÚð¦zx‰_LkvùÿÇÒ;dñ¡Ýê¤w¨‹†rÙS µ®^/¿ p¼·è_ÊÕô°P&¾-ä/dwZ O™©UɈÙGF$’‡›¬ ÐB,c§›ÝC`Çæy&–©jJQ-'TçÊçÐO5aÛËÙ·mjâ™}Kµ2@0?n$y2„άWêJ½X½Í ”æ´~ÀJ~(Öƒ¾ÆòÁX>Ðpo šœ¥NÑO9§?õ½*] ¿Y£ÏÖ‚ 4Ý”£¥v6½ 9/¾ŠØŒC%citÓx à@¹·&H$‹c:ä8P‹mVÚuç®›Éx¼'²)aêcÚb_[‘w¸ô‡SZ ÌJ|c*À°Ùt9"¼RC§¹£û?é'Ï~  2ÊØ“B“ñ^ ”«#І‚Ü«Èó‡áaFäw¢z‰du šÐ9èù™&\Q©©ß­öÚõ¼—1høeV€KãV\.>ôí`¸) ÿO“»näÀ¿ù‰Ú‰÷zoBï•XRM¨¶”hâ=ü,ìÌQÍËKâóã÷?¦S¼ÿ†a|†£úe5‹ëõÚ›ÜûZ2~ÀçŠ#FáPœðþ½x Nï›4%÷$t@ßÞ)Ï.Eˆ¬é‰eÿ‚QÁ-­kîv‘ k¾é+M-$+âØy5E§Q&íG_´h%ä "%Þ¶”–ÿõ™]WuëDŠÅî´,æ•ÄYϘÌò|ƒæ)šB8¿7hW›iáå¶?i;)¸òFŒÃÚ#l—¢µ¥¯à'C~´r¦Å€¥Òä»0Ã3 œ<ú_ÿióÁÀÉA°§˜¯ú{wh,Xõøåó#¡ÛIUF3ímä„J6“pªP¦€#²^¬¹+ÔwÍ¡;ïZ—ȵ8‡î@A®–¡MÏü‰ºçêã±ñHc2øIŠ/©–‚•QþP¨éô¼Ü2îîðÐDóÄ'r|kÊ·ÉÙ¨gëk)ò6Ùt¿ ¶¦TdUiPZÍP}xÓ+ýöèÑ»¨Õ‡d®~ÈG‘¥y±Ú*Ò~=ú:€D£ïga[¿ Ú fk•ÆdI¢ö5"¡yúÌ‚ý€`ÇøfC¨ïã•ùªÔü> 2dì2‹ÈÿFû>žßÈ©>N}¯‹N,±¢pâ]b=½Dê‘Àõz/’Ð:V—,;®€f ·¬¦¼´ñ]çÊXnP'Ý:\#@,µœ.€‹BÄ6 ðù´Â=»h‘ÙÔR×zφƒÉG:Û¬3‚!0îv Û3 üAß­Ó‚#É÷-k•Wvކo€àýèö%OÐX&}"öÙ­-opÅ»\=]„—ùØêUA°T*WÀ®Þ”ò0^Ž›„—( Ý"]§¨‚ ~Ö çÓ9 áj¼ä"®Tj’ñyHÐH¢W™&롱òÐ)ˆ£r¢vŸœ9ßüѰ.';Ë¢¦ð1óY©¢=Fßh0» +ƒG>é¦, ¨i¨ZæÝV0Ñ™¸b®†_&Xwè°fTÉ‚š@ùò—ò9m¾n×ß[ÏÄl@Â^ ëž^øvKÞl’F“ôpn6u„Û·,Hôö‡D<¹Îk¹ÖD «Œí¡Aæ5oƒ¹@¿´óß›PN×>BHÞXk"¨CÊϦí3c5õšžý!û7LÏhûi¨Cê$>7ÄuÙnÁúz–hs!ûjÔ•sÝ» ÷ÞCb$ƒ4B¡47e$±n¸£¹ò.ÄÕ=µé¹àغxÃ+ï8DìÂÂie¬1RRšƒq¶äÂÓ~Ž0õ«IL®—L gŠ.(ïæy¦0®pMÛÒþwú§yyGþ|„•³®Î3=Éù~¨zÎ×þÅ®ïµM¢¤Ô¶È7Š?î‰Kìíþtå'± ­ͪë§ùÍnèð)¶¾þID#a5x* zÅÀn‘¬_šúu³½ì,„ˆË‡¹ŠÐGRÌ•‘ôW«'ÛÉAÜÆì‘Œ,„ƒMnLB‘L¦.øåŒv¶šò1Í-N·jZU²ó×6ÂË2WŽà±-gêô =v:Ö,pKY.F¾°ûyû%ßñ®@C 2ËiMe¼P䇉z«ñ³%fE’\Œ+òuUŸæ(±“ÊÞ3Γž}¯ÛƒFñìniŽvÝm…¨\ ˆð– ;×+h’N)*]÷Î-O%´Å"““n”þY"Ocп6AÂVÉ^•ZGDhe¥Ú_eâý*tŠ¥ñ0¬m9z²dŸ</…¸¸ NÃýØ$âX¡}u1ÍÜeµÜ´o„vzU¡KÍY¥ßxÓÛ½| 1Ý`Qlß±@ýéö—tKýt☱¹3¨á]{ “ ú×AàcÑ8 ®O¬ÉØÊ°Ÿs“à7OMçïúÕœM=Zõ6#> ŸÓô<£Å".’-ýMCJ;ð3 ß=wþ’R0ñÝUФŸ–GšÀ8]šL³^<ôJ;Ï'®FÑ =G ËnÒ¶º†fˆ›L+Á€”pž{-ëfç {òÁ¶<¿ò8C‚ÁàåÛ†àÊ€PQ$£ðÑ?0xÄenÖbÀ} Îd·G¸òåÔ空þqDF¬²Ó„—8¶ÿÍ— Vù$þðð’$8JU“øñ–«–SReØ¿†j'€\×rt˜Î¬ª‹‰‰¯U¾ÅÑhJKB¸ÐÁ&[°‘IFMü~²He÷;º‰ÿq”1ý^mø)è]Éõ™º vk%§æa¸ÃÏé_aZ®aÄ÷q`Yij"=æþ4r`»Ú­ñRÄã”ê•\¾¾*Rú?Ù.âæ#Ø‚~Q&+žÔ­SÝ~¾ŸG÷ظÌàš÷ÂʹñMÅ-xåt,„;¶³ç3Œd„½‘)päõë„JWÓ°%G¹"T•·1œf- ß3É–j0’6óöfáÛ!ÌçɾͫÊ/ÁËšQDÿT¾È¨V_¢~ YDºD…™°T†z>~1ìTû,k˜ÍnEôAÌÝVÔªHlÊ×µ'Ó8:8ïp{Á*†éyçáŠGŒ­ÕÒC¤®×†Åduûb’(Ã;–T£Hwð'„ÙíéAÛ¹;E3‰ ¸'•z骥É@Á˜¤ÊÍñòfÜz8Õ:‹ ;…pOp»_®ñëºø±‰ÕLiuA{åpÓ/Ì!e×o'EàO+—®w½0¡:J^ö¬¡IÇ-2&¨5#(þ¡æÓ­DT4qEÞ DoæcÞW>H',e”N–lÀ™Š[–ÉÌŽBä.¡Æ^‚ZR¼;þ⤊Ä×o:s^ÀCsx&g+nc¹¦ûwŸŠRôA‚-Èš»…´·u3_çÚ”I@øWä9çO§i´%&(‚}eãOÜT øÊª/ŠõM÷äIä™›¡ËuÑ@¢þå;_Ÿ"@Í7û‘3¦Á÷,¯Ö—FÃu8}°ª…ÿ.VPYßNKü¤Íƶô‰]õ|UP´1µÕb« Ë'låRF–’ÚE±î-aîû’ÐÙpÇŒÝ!úåø¸'™Çõ“äÏiØÍ ýOÝIÓ7;¨<ù`ɇ!‰¸¼ :$ôdªHcg÷÷þ¡c*¼x²R›Ýí á!\ÈKphå%±sˆàζyÛSBoD0ð˜´Ð’Å<Éæ¸êW0k~-\øf«R1b#œþà)Š3W »F u™Ù¢Ëë¶À¬ÕhLдºH ª%™‡+CiP ø3Ä*PX¥~4æÎžNiAŒ)4SdmZfUC£¼ÍQÐ=Q£ ÿ.‰§£È’ÔÄü¯siþ©|VŠë~¦/|+ö¾©ñÊ6ùÑ’W;r^öèÄ®¹*à¸ñq›©W¡ˆ_Y5ˆÜ ½*p%ÄLó“Ž s`„¹s8`N]¸qI¨×„Ü ¾ã_&êbs)Ûá ¤Ø©î· Ž©F“~\ë%ËjF蟛f4Wk/UÕ'·þ°æ+M3´Åà¢î‚MÅeÖ›eÓÖMðÜX£Ù½ÀʽE…§ˆƒéòK¦‹ÛZ†ýzCÕ˜2–,oHK–ÁpóÒÖpx2«mÇÖuБ£Íö„®êì9|±²¦´ù]> žÉN'¿^ìÔ k„Îä%êþEïUEÕÊ$Nê<¸{ØâzaY«¥ X²Ð Ê“‚tµ­JÙÙ‰Øó“Xw¡S¸„¿aA¹Œ~]†-ì“èc!¶)àð Uê*ëk7Žϵµ?õ]§îs:0Ó‡³À'™A.u¤‹ô(`ß §NgHÑÃ=Ž…b½ˆBðÕhá(——¨úcAïã[/©NІpŠ7z(àÉùÙíUDòkÆ]Ù—õŠÉ,­þÝÍZ'ÃO# ÿõ7î ëÿ$­¬Èœ5<—|Iyˆ*Í…Mû>« ]ñdnÖÓ+D˜ =)Aõû}]ÇeÔËÿMø$|z’/0$k˜øB«R̯A†tJ¨ü³4Ì‘ôq Ø*cØDð][÷²ûì`‹øöÑjÙjá9öÙ};?†¥ '[`šj󟧕ð”ŒÍœXî~t›=LòøÀÔ²nõëf#z·¥£Ä7<n ƒã¨"¢…b Íî;VVZ"ª¸vPÌž‹r4XÐf+f³ÀØ–j5’ÝÞ.åy5a©&èþYàÕ$,__5ï¢.Bó$©œ ß %ÓçØHÚòÛýpïšíùÙw’ºLö§+Iµ‹c*Ú“ ¯ß¦Îš~ºP¹M¤Cf¨¾aÔ†¶ €ÚE(z¾1ÐÝ\v«öÙiV&»afÓ¾]Õ õ‡`ôfJЉêcô ß[|ÆcÑ oÛÓÊøñ´_îQ–Z­ß_“^!hë  •JÓ#‚«ï§9ü¿ƒ×Þæ/Æ‚¿?^ÖJdjHùŽf&ÁÞÂAίÐÍ9\¯uuÇܘ~VŸl'l€Ô«ø“‰-xØÑÊØÖ"ÿMœÏ ú ¯¹’Õ~x…Änn$ÄDS®sðžXø]‰÷gMl "tÑvMï:)%~ q+^v çû Ú'Á‡tkéuðHåÆbùjÆ Ìô†_ê5½ƒK3>‹Ýº¿„+óøÐ–-õfu_žé•–5ÓÁëÚ}vùl/ýq©gºƒÆ2¿w©NðòtÇÙ‘çÇ6Û‚Á;Уõƒú¹®9tTâ2 ÊF—~Òþ RhZ±Ö¯¡Ó?JEøˆÐöåžµo² ¢øIø:@žû£K\®­¼â=¼éùÃä“Ų ãÕ× ­×¦ÓÔ)» €hÛò5Ô¤3íIñ-Òxél ¾3›¤’9ä± ìæ¬øê{ê>y‘^/1Èfnreئy¾úuíz8“Ä#ëqÀ.N#Õ¡A šÍ(ü€¢4.÷ÈŠå7ÿKíË_…R‡Éa=˜wVQñ™34aBîÚ‘I–þ8(Q”5þ({êh<`-¦M%Éo¨…l¶Ñ€ãª„÷:Þ94ᩬŽ~q Ô{½ËN?WSë©Ó·:·˜Ûž çíPÚO oaÈ‘öP✄ý¶¥zU’ Ú~ïSšºM⸮`W!û\ ˆi­š£-4~«nU7ªêØ êÖÀ`‚)™Ñ†ÁÞûëñ™€j|oäÀC¾ÖÙM`»bÆ‚²fZâAþEÇ™ ÍGzD`‘³÷Q÷—ŠQÝ|íÿBù+âZ‚?cŽ>6…wíj¦µó ^~KêÂÍ:‘T™ðûç#„àŽZÖ-Q–}äËèOQNIØ!¦OÉÌ2>­¼Pý09ĽÜÕŸO‰ÊV ŠätÖašÁ½asÛƒÆg„t U‹¯ûƒT$Dˆeðhq”. ¬¤³iÐð”ùCnß$“¹ ‰<Á4Óm`ÇšÊu‡N43ÿë¢n½ÒØÀ‹q¼Ü~G.Õ`2®¢Ë±Í*{d mq·U@ç>mñ«([ö`šÏZÕð_;fûÚ•lá~$úöV!Ö¡Éç½ zLEcu÷û)?s BÂs³Bm˜!"ÃZ5Aqr¸‘·tZã%RPYã“¿˜ÓÈnÂzu-*É- ŽìÊ‚t¢¯ìýC¶ƒ½„<¢5Ó6Ûb…ž6ù>¥\{Ê3µe\À­ýè”Ü <˜A*HÊ Dº¶=c¦µÊCín^ùžÕ_mK¥*cxq;KWq)Æ0e|²¡rí¹\Ùƒ<µ°ÉÖÊ–C£ã%ÍÂí¿.:׈'.t¼óLKh?÷e`ýŒ”#RÐ[èzÄ2dÃ*êŠå!7«’_ÊûŸ‘â“­¢ ©áù!áƒ;0U†6}¡êW™Üxe òwà_9±Wh¶nÞ_ŒÊ¦•V¦]$Pì¬û„ĦE[M®~kÈF¢®–ÚWÕõ^v‡Çi‰ÿp´ É>aÃÜ’»|X6èJ‹üPeG¼²FCtjý©iBÐpY±òOOW_­'Çk·ÿes­-~º¨°ìC¬äå€!ü“7Ê ¶tY÷I-½vïtx׌ØToVפeÌN—%œˆ6Ïî ª¹âœä¬%Ó§ÁŒFOñR‹¬s 4„ï‘Àh0½–чüNfûüþäíÿNøÁ^Ø$%‰Bt´5#Ï]ÇH«jq¢ÆYÁrt Ìxî^Üà8sùA.VÕ,Ü2Ån UÍ>Å."oç‰V(©±¯ÌaIšØ}€Ù¤©ÂÛîÿz†{,‚y™DÙÂŽ‘å¹ó¯®$wíϰïsIãÇñm5†7O?êx1\ıÍïYaŽÎ]Ô,úÅÂÄ[÷Ýýsz(Gf脳cBXa£„­/yKâ8¾mdðuAŠ1þD ¹µ,¦‘“sIø-/¬Ó þ=í¼YøòåíHn¦úGøú‹ŽPl:xbÉ^-â­]Dâ †ý&wÔÓ*ί•.C`ÑuYCFdk£ÕOX…{¤úê>Œâpñ’n$‡i7ö=’Ö¼= Ðõ×íO÷Úh˜x¹`䟻öh’G­¦L ÐŒIÇhû‡ÇoËEÚNÃKÛÔoJÒ2Ú:»`¡·ßa4ú4¬¤ÿVéŸÅêÅ) 19ô'•¹S&è×9nhUžš¹Ì³ Ï§‡îÉ_þlkèëpò§lÍŠþ »r@eP”¾b=™Q.jûM…œ¸äwëÑ|¸k*,ÙàÒ¥Y—úZGàÞR±¯«ÙÏ3йexMQŽQŽÖ^e!(Fõz¶é†¦•󺯻-’BÇé\(¿:ýŽz§ÌE2œÅf#ç/¨û­жrýç2âiG³\û ÌPÅÓq(¨ïÒrÆš¬ø Põç22³0x×úŠß Ÿük€/ö–׌ :ŠD›9·¨Ç¯ÄVó×…ÙÐgxgéZÀG8¨à´sŒë`feŠ £ø¼>AÀokœ–mÒb3ö#­Úf‘tæíï7+'¼ñÃpD€t\åÔ(øî·cn°±3`Í}¡è:•¦/ÍÌ¡ óäj¦ðòº5ÑÊÞd-/äÝb‚ñþy–žî}Ä?•p8 1Ëå UPõ ‡«OÅ$ùãDpLð¢ Ó€ìYs•kÂçèØóDHyŸ)užci.B‡.˜ªqÃ*•‰¡¾Œ%"©•lx‹wØë%[)ø¦giƒaKà%6Õ01N­¬˜U7Ó‡! òìQÞhô˜³GØV¦J\F jÊÁ¥gfWà±ÙŒ\„s¤B,îX?,Ò4¿'d¬1¬' ¨‡Ð–®ï·ë^%­ ñQQm)½ð©é¢—ÛŒâ-žhù‡Õ%ް›Ü.\i>o“Õ©(°Xç¼Û/ ebÙO—±ˆ7&ßên+llä0æ–tFjq¦ùIµæº? íU z)¼Ø»\³Tf-횈H7ÕÍð6(;—¦*ùÜd ì¾1Ö[ÿe³/håF´ >¥È„šŒ<+Òe¤(ñíÎvWP÷lO¢XШ’_"(ࢩ‚œfÈÎJ”Lmy_}ûZi÷-ÝxËaY¤ÄªFx81éÓZ¢Œ7/ÐTŠ_£TªÒM‚ÖŠåýS ýç=‡ú^^&Xu7…ÿ=Œ®Ôo…d>òQ ƒCBÜ g°Çn4x)ˆã_þbä«ÑÜø½²}K6̦¨M} Î ŽHó·l‚ýöˆY7âï”42§ª¯5¸¦¡pî¡xÂz ýC³ÿ_”¯C½¾ ‘ø'0zð A|ËnËûiA™ÿ3_›R‚\4R^ÿxrù¯)9*j¬~,‰œbÐÕ½¡à]”… Yõ;(e£ÊHÆÆ¶kOÙÂÂÔïEiÌödOúäHƒœü§B ïíËIK5\…ì(Ú$_ç:´8#\ù·Xì|nWî eÕ¾€‹#ÊpNýVrËZŠŒ=Gã«m['raVe~¼N|߉8ªêƲf0@6æ²/5±Ò`þð1Ôwÿ Öñô’KkŽI×Ý'$5|hµ˜”*æ_m&ÿ\þ&F FlÃèL:Õa4E'<5XÙô.Ï©×OÉÆ¥4˜/#ð5!eú|ô&І^ƒµÛÚ£€o ëØ©Ïb:Y C}F”²ì½ÃÌ“¬<ï½0¡¨ùÜ6l_ÔH@îÍÆÿ*¡\‚§!UƒCPQA%ÍêÇéÔÜdèÿ3ñuGR4/ÙÙ—a˜’"› ±ôD€€˜{Õ“¯6ÌwQZjâìm"¦«F£Óþ¡$Š!¡ÖʤóšA)L¾²½ê¢¤/œ”bæ@öHþn°>-0¼üÑ¡ TÅß2…ÿl?¢L³}ÖuèÊv| &2顆ɠtئëWØ:/&õÇq¦ä‚«çAoëßbäŽé–v¬¨4;=É#¶n¡–Õ&o@bˆêsúÚâ ï¿· q×LóhóŠxЯuVÜRÝtšÑ®Ú2ùÍNãž_ÏÙ¢NA&8gÞ:çì óKÙt5.FþÍö4XÍ$6-ˆ½ÅèÿLþHÙí “e§Ä÷ˆV™é˜A•%eÁõâQ{i›i5›~(: Û8ôfˆ±ÄO»ÛkÒ{lBßåöˆÝ£‡ê߯-Ûˆ0À!›1´\Tçæ@ùÇ÷ ¾ÊSªø c®ãŠØ´2¸Èâd¡0ÕçøÙŽ¢^E‘Z…÷]L>Ñ]ºûØVT~Þy.‰·¨|$)˜¾# ¿³#K„Bdf©Ùi&u;ž’—=“ñõ"À±"t0xµMÇ›ùy™8 K6×$ÂLÛ †{RD!ڱ烇êeldT¯TÒºËûˆëì"B_hEí£‰¦Â«¥WÄ yHŸGöÙhêl£¾r€³ % í³[O/ûuóª*˃ÂT¨î¶ëËẳsÏP„¿¤Bç´¸š…‹=BNÄ:÷R¦;ä/æ¹…»:ÞžÈ!X‚VyÐ(%,hÓ¥i Cf#6‡aÀ}ÕUp"†ƒ_"Å92ç£ÞÓèqŒä1yN·<1‡;½Œ­^«j\ßJ¯\ ø–e .¬ƒôÒêb’¬Ã¡æ´0SB×l3Äe¼;1>¯*Þ2ý2‘¼ ü-WÎ ˜¥`@ˆ"NŸ±C–ndÇœYT€ØA·ß§G¼´ãÿ]¾S‰¡ªÙ˜ñ]ªZ5ç‹éj4œ©%ÞŠXRwªh š‰€/š)·†–äfì9Æ‘Î|Yô\Go¼ŠXO6@8«ÜÜlbÜõI&>eK²IðÖk0—k:Õ‹: Ù|ÏCzõ1¡¡zÃGîÀéñ²Ë‡=®÷p´zž¡Æ'‚ýRÿu‘¥‚i¾.£¼Ù{ª~"Ì• ñ YeX;–~©ÃjåŸûºpí©l ÃxÏ@z.…ìÑ,ywí?¿Å^|ÔUñ®TWY/KL†À1¬òÍž´¼,U鬙ûE»Ø_Ü]‘Åú7Ts¦Ü€Š¾944|äPÔEÀ.Ì( Z@äC˜Šòö½Ô(ÅÛŠ}à¬ç?‘þŽl°†?BT9i\×Zžwó§Zñl<òp†TWƒüIr‘MÚÉ+â,‘1¿€ŠÖš°RÕ,!ºrU0iò„ymhMj›¼x¾?‡bµGÔ2´( »Q$Änd ›ÑêöøQn¹ç;l¿3ðôx¯t­U­> ³ëÑ®ø7³éA†ï†wj­hÔñ‰â$…”»ŠLÏØ0LòaøßçNõº(·ç1§FûyÄ&œ¶pÒz™LˆÄµxA˜ ÒT8%âߨùÔ nb©‹[¼7=T#¼Wèý¾!$X˜>zŸ—JFÞ88æÓܰ­®Pe$éÏ\tà¿c‡ŠÆ>7ò ¥‚ÈU墭œbŠjE©íq…¯µa 7«Ÿ&kˆ>ÃA¶ŽyG”clYûÆè<Êz;³¦äwÆk”9÷H//`vBrcÂuãÁU3±CëÇ‘»¨Ã£Ñ)¿÷ÀùÈÎHÆ+ܸäQ57}ÔUe²Ùœ,._³ø™å’rѵ…1±Ylj¨Í¶ŠžÝF1™Ìÿ_'"3úŸØMÌ ;õƾkú[¯“ðk{Öà~Ü6…†4Âaز€" 8 ŠEâ^Ý­ÃüÇÞ®B‘y-y‡PêÈOÜêÓ4ònšîeÖ¼ˆ¶I£é‹Ó>V2õ´L[ÏTRß.ßãÔ r˜¸„™õzy¼Aûë.xêN?”RRR‘&Aç÷ ª8–m©º,Pâðë¤'”§˜?·!tˆü°b©éÞáUî*Ü¢ë¯( G´½SWÆLh1‡L‰ _l"¸-À§ç¢É5Ù?‚·#Ó4:«?¤C™ÏÙÞçÚ¨r”ëÄbÈÿ ùþ Po AÉœ@ƒ›R@&#ˆi¼é2ÝòÌ¥&| ™l¤¹/z©d5Tÿ3NŸÿ-‰’|Ä› L~"Ñ÷yió>·©)jWØjÈÚfô½7ÄHŸ»ãmK±@=˜¢‡*Lå“Ââ“,ÄÁæé|yÀ4½k\ó”*™Á¤š4`e0¯×ô H'íx(íÏËã¿ ¡ß\!Ýv Óœ¬i樳õ!ó?!F[pvm"DÙV¤,ž5¶Âò»yJ(?•¿0b7ë¼@Ù ‹W«œƒ½(¬ÚRqv—°WÊ.,´LHI˜•==®3䔞ø®àÎ~ošKõÙñ8LbÇï®3´<»*ü¥ÔÇ?1À"êmíj%@À#!ã­]7b‚_$ƒ?LѰf'…¶S£ÂÛîÔaÞ?öàŸ?È™N™èdÃvƯ¤3R4Õ09Ù‹ÂÍ_ëI­ÐT6ý?‚Às‚¿˜\7—¼ù‹ÜëëÎ3›eT?ŸcÚdÌëX]Þ'°Ëõö%ŽbùÖÃ$ºrXOë w!R¾Êát¶‚¶ õÜü6d-¸ï]Urƒ¢ÚsÕýÇùÑß—'ˆµ!C­óFTªW'ÛÌ,LÍÚŒ[Gfÿ‰ˆˆ½EÑø« ×=nÂKñiëë¢g8nî"®XØ«>Œ§#¶Äñùå Pª^ðZ$ÊsÝHí2—´d(åé}ü,y3þPÛuf;À <¨ D»{¬#uèb+¥ÐîÂEL~HäV‰¯ÜG ²CK“9;Oƒ_Lp'G åÐUÎô•ˉ¿ ÅÚ/:±y»"™™oàZ!)«8a]ÜÄ\™ˆ•Ìü/aQ¦ºZûÛ¾é§ô"]³Ø„F0òìé§ÉSŸî•lÌÐïU±8GÒ&.¥^GYœ˜Ôx©«œFëyݘ}6„ÏÞâÀ8¦l.ÙÌ õSèäêÐ4L01¼ '’eçÔ±ŽI4\Z˜U­´ z¤B骹æÄï³g¯Fú3'IŒWsPFΨÀxÎÆTñì½&$½¯ß›¾âT׋vío°D˜¾ ]óºÑJ=À¬’_Dó‰þ|(uyК–¿#H€nADÕ”l ‚+;¢ÛGÅt^5…Iò¨;Ó-|Q•$ø†„½3±;ƒ m¸ø‰,âÂi½MÓìz!~UJtVÕI œ·É“'¼ˆ´Û€&"ö?Ëú%¿Á<æÈWÊ8?n ø[ú ʨӡ[£ÏTÛÙ…¹b„oÄÓ-(*}¶ÚαpzI4¡ìq‡MjöâD¾AÅo¿€öLpÐØIHÉš°‚„FÁGÁÇd¶ü'÷£šïçg¦HÃ9N7Êü ú¯åÀðbÉU¿yËEÕBT¢#?,òñ}®Ñàqv7IrÙ7Ä'Ì8P}ŸßÛ’Cs=Ñü¥ŸåÏŸæðÀݲU©vï¼³§+àﺾbàe³(øKDÇ^8¹Š~´âäÞ©–‡4¶Ö÷Í÷:#MWø>”f•tÝ`ëe½="Fü+#šŽ£žÇð©Þú˜%Ñ4~{°EÄM Pq@Òz„Öòün‚QÔqöP“›­sÚ©oN_’†Íâu¹kv>~³8JÊMØ, +=dQð/ØIVÞÊAùÕ­™ój68 |©!äÖï:®vÖ‰»$,&üˆÞuñ`´;R&rÒ*u3¯÷^à€RPð=£ð ÆìZ«Ñïi±]ÉXüêŽ ÆXØ•ãpêëã2/êWUS¥¤ÉMyˆ(ø¥«“ëôºˆµm都§b¶â€JP=>èLp Á ÆòWÍÂ)…7Œ ïpK³û¦Ä› Õë$BÓqü²P\hjÑbpB@Jè0£ïµãÉ(øôÅÕªm¬ƒW-üË5y—*2sH1ÂðRf,b7ˆi)R÷œVo·!Ê Ê©È"¢m#Ü–«žqS(T#´™Ð®ƒÁ’© g)²aF¡~Ía{òS•ZûL¯ò+…åé~gÌVÞ9Õ–u|ÊT"Ú¹¯_HãNê©/È÷á1ëåÍM™ 3Ùóm).X;æ,œÑ{d-Õ&æºîQoù-Ê+½y?I÷w2âÄcõÿeíý(J¾``G+FÎ òÖèeNÉó"<𓼽Ç#ž¿\¸3™ (YA[·<ªÌxFŒT–*îÓZh¾c+Q”¶W¢krƒRÀ؉ƒû²Çƒ¼ãaƒÐ†@©÷­>,’û"OÀ=Àœ´ÌQë]âÒ©fœ>& í ý™†‹¦T6W–<Úáí<ˆ¬í]²uárärÃ…Tº(fg`ì$ãÊúë¥ÚSÿ|/Öɤ}ž×%-˜_*‡žàÁyؓɀWwh«¡Nùê9ãªF\ÕvgBR@PV´šqâŽjÝšb(’ØÑó›©ÛPÃ6¨î]ª7jsÆ~:q½mØ!´›éõÑüÂòBƒSm%y˜ì2ã?èŠÿQÇBú´°g=MêgáŜ禎yü.æv¶áŽ$ÇE B±dS[UØiÛ, ‚[¦}ù69pdýÚ”¨9¢_Öå3áöøšù m ÿ‰À=-0µ§#5ÕÁ=Ò“zP(×ñ¡,yý/£¨S«ý`?ÿ Õ füÓ-ÑÁ¥÷4‹pf3增Þ(h‡[crÅ5¦ö=. ùçâ^’>>?€âC'¥þÚR½_ÑöMZ.¬eϯ¸§œ¯þ¡zé-»Wn`6úä £ÊÖI%ð'&vìZ§ÐJYk7Yþ«¸ON¸ÁYß ¨s³i˜wN£­‚©´Œ ÏíaÉ{7"ô üVÊ£ül;­ëÍÜö¾ß OÌ>î]ÐnB˜\.  êëhž–mD?ë ŸX3¤²\S©HVA¸µlmv¨ß)Þí©[™êºs#G«&³¶³9Çy¤§gç‡R89CF)/Ãé6¹ú´Â‹šÃË›Û7 -•锛ã∊-8;ª@ÜÜw4‹÷ü‹›¯…ω¯T8,-ÎJ—÷vF }r’å}•i^£Y£ôâã»ÂaYÓH¢ròStâ®@S?XŠö×èB£>¡þœeÀN|Î/O?K¼ƒÇ›˜š1báæ¹xå‹]…™)[°Y Oiùž_n•„ì²rRAÃ0%¶†˜<¨®;åÿYÔJÊÛîó ñ'"¸¶Q¤5 “³ƒ©M°#rüüÛ¢ìéšJµ¡7º²ãC¶2…žúÕ[Âõ K„Ãl–ẅ¿ ˆä$…`ÿvÉÕ£ôÙönµ±>ó/„Âã'2HvæÒ ÂÑ”ý÷M7žYñ\ÊUÄ>xy®}@w_‚‹ó³íÇWLq(r¼ððÒ°#éKd–ÑÓð*lÎ*þ¾'Sûl9ù¤„kÐ ã8JdñÅ *’ó4‘,[y–þÿu¥’êìî>óÒísæÓE"ƒ#¾£‡Âû¤EæøjÓ‚Ý•fµ!Ä?QåF46_E·=nܪJs y?#m&²á ’ ³ì×1yÑi‹·ë¾ŠuäЇ,ã³æÙ÷ÏR§aåã‡u‡mÖœJä—ïð ]dT±ô;KÐ;9ã½33¼‡Y‰;¢åê›ÆRŠ¥g ©:LnB-“Î3Î[ý3N°¨)GâMOÐ ¸!£¦ð]ÒÉçѨu²Ñ!&_}‘ʼn^XR…£ ¤LÏ™´ÞÏëBºi¤’·—)Ž•ŒPõ¹?×½5í!ñ~mzý®¢H&<¾µ¼‰ôS°Ç÷æ‹R†:'P$3¢WT÷ {ºp©šúãÆú²Ç™âTP4©YªE¬^Á©!¥±é}È÷Ë—{·‘#ô•¹™å”Nk¡Òƒiì.Õ·Up²ˆõ™À¿`’”õ²pìU§œ9.$’ùï}Ùšûñö~¥Þ×"äyh=dB×Ç9˜[¦ÓÑØŠ«˜yfžÊT R™•á¬Úõ»mëx!27„¸0Àþ?wd‘àq7~ض žžÝyœ6'Ëôvþ¶èC©TÂMGx³ÕšÙbFQP¸šòoy:Re)eÛ)îµMŸ<,V’£÷S94}ìÏÝÍ‹jÀt?Ã0‹Ó +Š'X‡õ(P†Ô_E±wKâ4 ðåT›âÜÞ„VŒŒõf‡qŸÍ~›•Ø`¨‰^&¢”F[~JXÎrùЦ%0„P㛲‰Xª?L€ûEÅô`½ ®(“RÀþ 5F§ 9ﺟé1ôd žQÕ¼¥a^|àš½ˆoñò»0v …xŒvv ´Ö÷L[ÜÅŠSÀô=° ÂJ¯q€ÊjœXÿaýÔ'/”¯•Ì­-ƒäŸÿs‰ÍæYñIõsñ.o²qæŠHág¡e®ñ3qñ‰ñþ7zpò ©kÌß)²%TL‰‰]ºÜýu†¡Ã|"Ɔ¾ÍºTS¥ãó§^ÅvX¥´mÛu{uDì—êä‡fŠT:fòḇQß,¾ûoiÿhšŠØt7˜OÑG•m} )"°Æ=u EŸ¨©å‹ãƒ«‘ËRQ¨²Äp ‹ä>Çá+õÈqŽaªÔÃÈT)/W½ê\L:ýMĹK.[ò ÍÀ^8ßJÕéÖ*›s&ðhƒKÏG=wÂñDÒÉþ¸ÁÖYñÇëü€"¨¿íFÔª?Œ:l5ÉÆö„…£+¢wU;_„\’êMô"®ëÜòÞµ{§¶èöŸÄ«…öTIŸ¦çëäP@âBôÝ´Àð9+ý}W3ÿ $Si¨Ò!x±®þbÖ7vË¿ˆg¹ÝÞ s”~ÝîG|×›Ç>Lýÿ{1^Ÿò0}´jsŒJØDý1N_oq×OA$ó œ°Í±à‹"cïÊàMmSdü]íÙ|\‡­¹WUþœ^ƒåÈ4d}¿0~ZÈÄ?JnÏ?ÞâùfâZ™™}ŒDrn™2©Yz„KšR=ME¶ÌT43£0ÓMmP‡Í»t£‹øˆ!pSWˆ€³•ÐA@SDYêâàFs&”£ÇÈ„k<ÖZmfûEšiÕSn§â€+Ð3E”‚‹éå&ìÈ•Q(?UØ£„.ír \e>Õp«¢-BßriÒ§b„ó˜]†³OE$ØñÖònä`fLÀÞ"$ö¨Ø»ß1aO~ã\®8rEôŒÊÖü†Eycák§X!¬ß=ƒzùo”r«®\S5é¶Å^ëŒÇ²Í™šz#*ºÑÊ‘(“gh5ü?ú¾ÜXp~ýo7gìãQjeŒ/í¦/ð©CŒn‹@bÁÖ`+_<Ã0JÙœwö–¶…®í·Í wΞNIî‰Í–m1¸(5°ãÅÕñBisÇ)FrD›wÒýÖ{–tÜOpÓt4cŒ·¾uЧ9Xw´4¬å+|mÎ;~%Ùò*þÙ XêQ¶ÐVxge!ø¿w‰“¢¯î›ÔiÒ$Ùµž³ù¯»¢ „ zÏö³†í-Þ¢ØÜ©!ù„¦ÉZÈRÏ/ ®œбZ«Á`ص~Ðݨ[ çeJHÿ€ý%¯ÎÝ…¬Ð0Å¢"úÃö"Џ.òMá'0‚ξ}@•ßA¿‹ü®9-Ígd4Úcçv=¥XµŸvízJîbó¡Í˜6¬“¥Y³šG&u½™ƒÕN„K›Õè³´¸Vi—Ô­#¿wöúÌ¿KVy@a¨žŸú Þà¸Û¨hëã6ífpÄ&'IàѺ0üs™À걎©W²‚uFúRt#gt˹tªm×P?2iõ¾ooÝQJ&jZ…(})f÷æ{ìlE‹×¾Ô "§ySAQ™¬×w Q1›vØT‡Ê=_Š n¼ˆ²Tˆ¨Xî ˜K˜Ìð ߯<Úøã¨p_å¶ ‹²ŸPr#: Ÿ‰D¥Vôì!>Þ®% ™šg4O+Æ‹=î‚]<\j"‰° N`Œ¨Á g' Šú/`‘õ˜Úž9š®ˆ¼Çi´c»j…Ò÷þ+[Õ—[Îå±…dГ5'nøu«%VØ ¸y÷#jîa©õ&Ã*ДÝ^~Ùeè&ÈÏÑHz…n8¯s-ã`ç/Ù¸‘Þ#¯Bæ!í.ÁóAlÅèG*¢%‘ é4˜ UÁÍÜÙ†pBgzÀ_U?ùËf ™è«HËu+,]Í„$¶|Ï@þäÇK‘Çr#p9Ð/ò0kT‰ãÆ\ÖÌæÝ½ì)‚€fïÛo{¶…Š÷ùöøø¸ìøE‹Ï fuEÜ9éæžY0·H äÐÿqHšø ÖQÄ_²ÄÔá‘QReÆñÄMô¤; Ø«½¹ˆãñ׌Y‡¢_ÜŠ R¬s¯wí¤h8!˃óýWìh² –`(AØy±ƒuy°™¿M)hÕ1Ÿ ¸2nWåÄ„V¦šÿ'‹Ô‡¨¬úlE Ùlé1°å%×¢Ê5™V3ŸæM€³Åp°åº¡½hÍe_äaàòij ‹Hé 2.{Ò±Sôñ¨œ~JDœ< '9¤6M´…Ü}¯Ôsêã8,­Æ2óºo )®ÔÀι“p®A™¼33žœgèOÕÁþC¬8Š^)ñ:~†ûgî‹ßÁ¸Ê‚p‡,…yOÈ‹íaÏól.>Lb9ñÔ%a¥Ðˆ-é~ÚŸ~ÚΗÔSûjÏÛ ·¢­ûkWüoµgöô‡>~ÎßoAWÛºz…Uÿ=Â5ö”ÿ;}·=öôYßmV×Ô{>zöôÇü:ý½1ßVühm3þÚ^ß´£öÒ_¶à¾­ðÿ6¯´öú’?oTwÕ»_·¦ÛѨé}åÎýæP“r²'ŸLˆïx9&GhØ3ÝݲØqÒ¦ZXõÁ#5GÏ{…âEËkRà4– ~™Ræ²(ξI;ù—Y)AM¸9õЍÉpAÈÇÎxGfq<2 ǼY´]`½K©«+BU%1_ÆbLA–¼{Ôž! ÙŠBÎÉ•ªÉSZîtÕüêÎÂ8Áüc4Ù¨|×ïè ›n`Ø7AâËåä:aSÁéÖh~»TиÛN@†jì«xVö\g;Ë?2vÅf9ƒ¡±š†KØ1Ät>$aËÛ,ÌÌð%ñWܱû¿cè6Õ¢ˆ‚Ÿ®•¯ ¬!§9tÄ]¨Ý%}gÉ–}ÂX˜ú¸-ʶé”k2ÅÞÓa!øßù ®“šÛM»w7žBУg£Æä .‚svRµÛwð¥x^Ðâ†{šJüAÏ8ªÇTáC=Ç0ù5OYå0U‰YbøqĹøÿi)«~eîúU+M¿_±¢ÂO´B±?·4Ƹtã¼Jb¹5HÃpèñ‡ýí‹Ü³[ÏFÙlw¸_¢äˆŽ˜«bMš²J„£ðÏ{2!! ~[Åzĸ¹•ÑÚȦâÉÁC] -Ýu¹¾faðæŒºP*”ôôzpï(œŽºF¨f÷›D˜o%0.E­S«+׺=0ß|$äµ<¡Ap(†s*TŽjþ V¤é-1‰Æ; zÑgä$7G5‹ü›ÂëeŲ3GüÞK/d‹C5ág¬h±„J Bœ2Cß²>YÖ²Šñæ.4fŸx­\‘»yÚº gq(êD™ µ»ýNÖêåHñn@6¤*ú×EuP³ê]ádÚ²š“HËÅê:O@yX zµÂoD‹©•Þàd=Œ<_Y~)Èõe°gþÝëÍ}÷lJê«Uymç~VM±Í÷?õ؈¶?ËÛ|qòpO¯c$èo2V”µypúv£7úÃX¯`8_ÕÒÕ`€ÿ™ðÞ\•Џ¤êø­ìËô%\t ÂìR%êìÐ7ìÌkÌki¶6Ðù“"{n5¢£œò’]×=“î@Ÿ€Âõi‚óbhjÓR¿A·5­ÓWFU#’û$ŸhI‚5d¹VÆB®%h’8Ñú‹ý¯’šÄËãu—eP¦*øNHÞ—l˜Ðô‚扅-Qo×y((…IŠ$ÇÇчìü"Oð|:Á…ë5­-+“€;aÿ€h—n¸¤dé’žS\ ï+"øå‘=GÔYån².Ü«¼jR}'T €"mmаjÙÆå×&+¿%ø*°Þ§¿Ø0³RJq6 TQLq3Áºõà,ÉC¥Äi#/j· (|©gq¢%oGÅ®É[éð²¡êbN kM‘Õ­ Æ} ¬‚qKw½>TQ9U•™ø9 5¼Gi¹”ºÍ-À?×ð‹„C§6¦n產 1Ê”™¾A(Ç rž hÀ±Ô°ç [“³Á›#U†§·7=RH1ó+®I±'ˆ`g_à~á²ÜV™ˆÙÊ«â‚tc±æÎT6ÂФÿ²fH™„¸Ôç½'žùÃuÛk1k26xÉøQÇ ÇoÉ8¦0€7c;ë ×­`ë$üÜÙ Œvç—å4;Іü~äkŸ}x´Ù3J£ÜK;ÅjoZòEFzŒ¼˜ÍY³L@6ð [Æ3ÅŠFËd¬ÌL¤˜¬Xë¶mLÅ\æãÊsŽ[ÖVÒ¡uWwÜ^…¹ã«"cŠçC]ŸŸ¸ßô!`_&‹jåØü> ¶(£EˆÂB4šy#3³£$y¬Ìصý‰KÏè×–¯®­5¼j“ØŽÿf’†K" Œ¿y1ÏN¦‹œ›N9¨¦¡”¼ªËÌá·Uù®f¤Š!P(EnÝ˧h‡]cT¿?l¶F³t«4÷Ão,ùÖ:>œ&t?+¾ÙdøpÖ—–¯}.ßmΫH¤U*»¾ŸO)©²ØX©_†×qGÞ)¶¥N½a%VÖã7ö®÷«ßS/.”,eÄêPF;ÃË¢P TÝ©i÷~RM$‡i¬ ¶£v=¨±7H&c¥Bì½M^<‚°(æaˆœ$„åÊi…(cÓÀR'ÿ }øøöúîÊüaíy™Æ±6Q’é;°»¯À‹SÂuÔÿR<‹RŸq˜üe»¸ýaà„3·£ñç—ÌîÎŽ†@9S°,œï¾ÿ\×°‡À78þõ¸ÐBÕšZñGÏLGfµXdµÔ^p°Õvkïš¹JEÄþ0w'qÈšæýŽˆÀRåFp·´èä9Ú…;¸½á•tÏp¾¯(KyT·¦4ºfÑ.L†Äëx†Ó-G‘“\¥x¥ŠJÁ_îûÚ¡—Î)ãß©0Þ(jUÓµ­±é‹Nñè2ÍyßP#WÏàgaîüÞÍC„{•}£|†%“qŠqlÊ&Ùâºb£UpЦÙãcƒgÅJ>pXŸ¯>ëýf’‚j§½¹ŒUôhzµÀÎÜ.Ó)EÑÇ“ªåÂÍ’°§Ìý~óÖP›w(eÞ­é–oçì´g" _;>‹Jy¾1óXfòã±Ää>*ªcÑ{ðujë 'žšÀð4Ø”ÈÑd”B,Ö7ù)X9‡L?öØ‚w4øZ$‹fäšÄoüó„í0í¸3Œ%#¾©† š=rj³~‰ÇK€AWÂÀ©ã“ÇsºC¿ZY¨#÷Œ—meMK„L”ãꚊ™Ç·Ùóg™{F*ËŸly{ã+Ë;TSz8FR˜KNGœ«§5³aeƒØÑuÚ\=û¨G isegâ”Íl¶ç´ÌT_ö!` 9€*Fša%eMC›x8]-sa#Ò]f‡0¬•÷J€D¹ ¶,òÈBÀÝ4‡<“½X|¬´G1k„aÓü~õF©]y.ô§ûäÁ¹œm•þM˜õFëZBPËö ž±(#AÒÎt½$9Xl¨àÊDßëõÝîW`Øä z‰„v¥y†!\qY›{á]‡þKŽ˜—PFL 1ù¨{Aái¿—®Á¹ŠÓhÚ¤ÈLŽp`Y^›C²^é¨Zˆ«½š!ã„™¿,ó¾f &^Õݵ"8û Ex§§ÜÖŠ*ÎëÂÌcûY À$âªÃê4Z€&\åMd¯¯°"袳ý)èìOÖ âmÍ&Qx=íB[Ï`Už"Bnò°tÖR;œÔUã·ðÔÂo› ™ˆœ©·Š%“¬„3Sj¿}x,Œ~gëEëçïG@01Dcn eÎ:UЉ½ºl‚l ÀgÉ'—ïö6«ÄE9¯I?2k•«ˆZ -õ¡N5Cwõv¿z>®i±ëîo²:cµÍê%‹ºrªv†Z¥ãã¾ûÁæX±où=”ÍŒñ–®`Hm¥#‰‹wÛºê¯W&}RM?1wECE ÎffeUõõ”ù6µ ”ªÆn#ñ[m'ì8;¨­-jtÆòtrݺK]çúcҕ̋Ό‡+ äfÛ1Ø VU–øí¹Éˆèˆ™æ5W²‰(†ú6¤Õ[™ËÑZÃ…C÷¦ÃP! 䥗.DÊnŸ»5.šˆ^Ä#Œ=Ô¿ýÁ÷VLjceüZa~ÝúM Ü5áÊžü2³¾h41v cN GZµHÏ ¶9¸ÓÒ†ƒØf!ë ùh›¸òÙÕЋ3åÂs$󕃔v×&Ó 2DcÝX¢þm£C;šH¡{–ÜþYuGüÛäM$ û´ÈNÄŽyÉÌïrÕ)†ª‰>EW©Z¾zÆÑìÙ\"³öC˜x²¾šÁ0aarUC…¸ Bw?Ô¶K)Œè$ì®E—™Rž8éXàãä wKíÿKQ<ŒÕÈݨø ~ª‹o*ôUi¶¯üÑ^‡˜€j[¿Pç_©áe9}e'ŸŠt©KÌ| ëÿÿrúäQšö~-…–ìÐæ¥š*~Œà“+uúÙn#Ø<Õ ¢º{­)T³È=šy¾vVÎÿ?\$Rž"¼J>Œ3Pºíð…÷f¨Ž­qk¿îG)LÛlÅ.ÈÖåÐê¾*àÊ5³u&ñ@ë4¥€WÞÝÑô)ßdÌ`ÊÙE'µÊÛ¯xŒ‹\íWÀ†<(•ÆkѾ ˆÔaõyÒK ´  ñÔ» Li[“g0J“Š éÚ¼) ër;I¨•7 k¡Î}²üÑ8ÜÚÄœñQ,÷­v?…Òd¾nš Riµ0*:vé輆÷”Ìúk.­ì-Ý[P….Üj¢ÊŻԎ½¼tû«1¨`) ƒSA@?ÑÍ ç®12—éæK%Õ¿ôí ËÎKK7Óƒ<×4ê¤ëVÂ7Þ8ðŠo¦¸ x°¾o©½d7²¿'_.úÃf>êº;¥/c•𲍲Æ0­†d<õëúæ †êv‚Ox'›·ÊÓªŽ.C fmSýý:`ŸFnG71ÙW@©HcÝÀ”c-«þò,¼-ô8 ˆÞ‡=ùEá›ÏÙ·ørÙAPUøÿi)¼œ(ñ/?·¡;ªê†'Î"[€’¶>2’à4n.²áv¡µ1J"õôëxµ°šÀ”'>î?u…ÃÎ$r†%nf'¯R€js³ur]¡©äs¹®¡’BÁ|“‘F—Ó}†íu“.ôrõ¶JE}¿vöý«9žƒe¼HD¹¯c€™¸š14Ô´~±Úã‘m˜"Ùµ[@õ‘¤íéøÀ yæ.!`‹Ã7“_ OJIRá\¥¦¹R½jŒ+L f,žÀ‹Æ¶áïám²þÀ×ê+ySœ]79¢á2§wÎ ÄlÛsˆØ&P’ç¥p›MîGYaYȧðåýY™YŒÑþ³ÀcœÝ%èD‰VÎ …™¤UÝè~ý-“_¿7ªÝj;5WeÌOGfU¦3)C@ßÑ&‘sÞÌ5¾†iÍèÇŽª%«…Š®L»WjDVÿþ_7¡}·ƒu®&mpÌBµao¯ ›ôÏÂÜíGg]>1IÜ$ª¤jî^ õ]yt^!Év¶QYÑíYj€¸(J; @X~g ÞÇ_ãY^é xy»!½ù~rP< Fƒ‡´U‡$3:cxóßU×§oŸN2¼ÿ;áÌÇ}¯.aëtpkÆ#ÁÈv7÷D‹U¾ïÐï£!ìd mpÚ2Ü{,µ­H³¥é<[*=Ï¿dë§Ø§è©¿_ÞSvsí¾Ú […¦$¤¥4]7!rÃQ•_R¿$ŠIÞ2¥I<ôº¤ÏîÚx ÿNb8 ÓbõFØ®=à ”ºÛ+þv‡ì"Œd“ÆZIV«JV¦*?ÑÚxïòM0|.5K‹±Òc î§ÈNQ°~KÍ£<´™¦ð-«Š™`œqd&9bq0¨GU2atŽHù+ªy‚‹N¹¾!óÕÛÖA4‘€¥2©yˆ«P«®Ÿ¶ót’a9,¬šêBlõÃïÿÏ™ûÙºZZ7a‘Ëd©ýyªGJ=—‚ôàæ®ˆŠþZ%ªëh¬'|éw²ŒŸ–ð,” “ámžyôVÐ’ÕÍvŸxœS‚ÚÕ“Â"†±¸u–<Ù‚¶ÂíJÊPÑÒó—ÝãÖz5ÛT¸ÝèäPß:h ‹ÿ).èĵ‘G³/Z2i.¼Š å—Â[(¹?‘´°œÉäì,ÆçzUL¢WjáñÁ­÷‡ñeZÏGÛmIëüÜ…Ñ { %|Gôبç”l ðzyãîDF§t(üþ…:&ËùrºYðÔ Y u-ôjvÆíUЀ~ýëîM7Ù$†{{Ÿµ'ðhýÛcr׳"Ž!øB‚äxÛ@ènΦý3YòB&œ·JŽ5rØÈAŒðºã«®T ØÎ^LѺ‹‡) ¬íZSTŸÿn®|Ž$æÝׯ£Ýª¯ü©È²æHuæE~R¸ â¨{´°¹?] CÀ‚?Ü%Œ„-ÉOA'Þ³'úBÑ^<ý€eˆ"³¬2ëÒž(äù¬—Ë{üÛ» x4Y®Leˆ=Ã(MPZõÇ{®•»¾šõ`´‚ ó·Pj–n»·J[UÉ¥2)|!r:4÷TÈZ[ò è½ÌDfèþ½² U;—¯Õ¢ó ·«Wá27Arû#A”8 tމ¥_yê…Ñ}»B½&Õ¸nz‡J3Ç`  r cÕ¡åþ¶Ãhð©v ¿¿Çë*utÿµùñ5«´ëõº1r7G€;ã×¥W 1{§aÏsS“…ÊÕ«ˆÅt÷Ö$Q)Þ„¶Ë–ªi)‡!žIG.ŽÛ*}¬RÙ~nþbæ²FQ2¾ÑÀgáM>šH â½°zIu™!JG÷ÖæþGfËËô+^5„„/TÌøX7¿Ü 5LâáNVarD½û­ì=®Í*ÇÆ’¬»$@ËZ "ÎŒ8ÿL00ÒŒ•¾s½²¼ÍéQÖÕ_ƒüI¦û"¨&GŒa;Õ½€<™dàÙ/=¡c (B,68IvõÖªN<ÚPiÌk`œpü—ŽL!a©ìe#|Šø±Üλ‘.™[EӀ²’¦ž?×i‰Z£Ï–¡Œ„ÔQñ™›bç 61VyíÚ_¶íë~µ\è_"ÑÙóàü+±ŸÆI¤Õ­Âø¥U¥-ò|Ý.iCç  âså¼Ss´¢&(E íûD`L4Ä}'»À<«.Kõò¦Ú´„/o¾¢†¶ß*B'ùîq‰UøãJäÙ¹`)1,|K6Ý¡£[“ ok¤øÞ4YÙ»tÜséëÕ\þ°‹t!ykz.š´w/ìŒLÁ¬Z´)]^â- €°zΑp:2Ü*qÎb¿‹‘<ÜnÚ…\‡’Êj@ L1"ö‡8½‘U‹^1Ë€Ù>–,vrÔ¨KêÎÏã‰W䪕ÿ)|'uãmÑ%ÚŸJÓw'çpÀe+5Fm¾þaÅêÚš¯÷]3óŸ é´-÷$UY.À÷5eô*Šˆ£ÛbOüdAé0÷=ˆ[»T}¨â®ÇÓb¿·íîýräm'覷úŽN OÞ_ëëë&$|²;Þ‘Se°[œÝhð°þµ†ªcUc.…‚iUÞBk·O<ĵÜ7zH4$Ck±¦ }ßúp }åø0™%¤?笈º9þnÞ’iêý£ßó(¡¯ ñJDŒÄøKtÆ·×y=óW¤ø/†ìA XÃû|pc:Ç=IHFDh‰ß¹¯5)üÞÒ¶ %+²->†(O%#O³;úøê$¨ñ+‡^ P¸UšÚ|îüèHɬ¼Øìœ>ÏFo•— ühƒ¨È lÐËçssWn ÎM Ú„AB&ã&ö)š,fuùë‹–?¬®ì°Ÿ~ŸFâ=´b )ùͳë‘WCJÔ1ŠD®4’)3]Èï9ûíÉæØDqóÏU[ÑÎ.Yû-ßT¾ }£²jL|µÔ­o꺪l­i^CÏs°XPlæ°;ðÓ!ñ€ÖW~e œ´¦Uèµö4¯uãMÇà Æ;üŒ{| 7†%|Ï@Z:íÿ õ†6sU4 ¼!”äòù9$1åQ¾© ¦£S—ªÊ—WRž?Í›¡‰b!Ôú‹õ]™á¡Õ,¹üB' µÞù=AýúܧÜΧ$·>1.añÚ¿ðG°u š+ä«{¸ùÆC†'ƒœ²D)2š|ŠzCõ©dñ4†FßR/Ҽዹmí‰Êndêg³çŒ&œ{ÝøH@ËQSPP¯ø_eðiûΓ=ß·ÝÓawðbô²3©µ®má ÷å(è‡|óÚi‡eLVõ£_ù¦Õ7,í7³¢—H°lØÝ34e³l{¥`èJVszYïVâ|FÁ|ïTa³ÓLòhöõ"ˆQ »^ëþ$nþk_xÅ4­CúX³ÒšÇ/õ¶×Ç"½ <2Qá£ÖÃý!Ö–°¯I°§éõ¾3—¥oÇq'¨äºUD¦]EVc㤒jšûç‰ã•"éj5Uqƒ'n4¬d„NE§@ù a©°ßV¡É/ ’øªKÀÌPHh©èÃv¹Ë×<—£FÛ@ƒ&itP1 ­%0¤F’mørÖxñJødö*¶Øœ—–nÃÂðQüWy3Ö|‚A]µ~iO-®Á+ÏMbÀunÿ]ky›¥  œÊÇÚíȆžm: ÁOÜ›Ÿ%ÑÓËwþ•Þ•ž`j³±qº°hNáC›Íöbý-ЂØÚ}ÂWûâò˜Üê¿=I/¸ö&9<òNÀ^©ˆŠwpä@éÉãêJbY!½³÷ìø|ngkyü;?E¶ ñ¸Â$éNáÔyF.¨©q·§-Æ-'5æjg txy ™t¨Ï yÙMòPHâTDéåytM˺x¦n ®éÇ«~“Nï éÙ¢žþ–ÂÓ]âHÎÉEI.ŸUhüÔ‹éýžiòÈþ¹¢Þ ¸þ5x7Q­ßY„`ö:ú!ˆª–í:ÇŒhüÀ#ŸIµ#rPxóûTRj³m4U‰øØ/@ç4ÃkÍ–†®sü¯‹ƒ”]f °ÿ3ÿTÒDÚ–à¡”þ)óhAg›Ï«»Ðn…›˜õjÕÜmuµŒ’„ ù—­–K|­ñ!õÅpj@b®~zÈ£ð{ÀvoG©%m2n4æWUý£\jÿ¥úXïÑæÁ0ñЉ-?§íìÁþÄGGàð‹šyÆç€i$ÃÒ™¾Ö‰M­(wTÄ=Œ^a¶ÉîÃÙ<ß„µ ž]:Tj×ú5@k,ž—Eh‰®j­säyÕ£K¢Šòȶ'ç!Ší%ée/î°Ê€@3NM—Òèì<°þð™sŠN‡ã^sxù=ÓV|nK ­ë¨5oJ‹–¢DüãnXíQ³ ±þY0)H?k„Þp˜ì€_䦴$‹‡SX·BéîY¤^öIýˆ!.=ZÀK®ˆ`W wò¹Z4f2ùÂ$¶èi/ïvìr}ƒœKóˆ´Ê3G-÷À«‘~â„{½=#ai]ä4âq¦A*ÒY4ïékâ/u0ð‘¸{þ]=« ŸèÜ$ȋꞯµðþþlÎ?jzôTÎY]ª3~¤”¼@¨4‰ñqrÞû£½‚S;Å~n۟ضîï5j¨ˆÞ/¬cÀPb'¤Û½^ã¶aÒ¡ygß¶“÷ÈžÉøô ™í?î#y¼ÉÉ ¹¸‹¤g:T°f«€ƒcæ`B¶ãÔ£ú‹šò€r´÷;â´*ö‹éqSé¼9¸ˆ Û»7Q[~ôa‘Ç_ Ó‚L¸?Õ±Œðû3rjx`€}’‰¹Þ*•éåÎEpâ<6gTÒÞ¸¢D»µ. }é±²ôgÅí@2ïüp›è’*"Ò’SÞî%:ÚMµÝÆ¿òI=¶¥HJQÕ j…²±Lг…æî=vNùëV}ŒSK|çÌâFeî¿6=cݤŒ;~jVTp66×u¯à^öBÝ<¸CÇÌ {ë¿3н«fø\-`½¨dù!ºÉÇjŸÞ‚ _“à˜™ˆ´Ÿ/4¨&‰@øš=õ]ŸK!ÞDÙ”Þ+áJçftü! `;ûW@’Š÷R;@¸pʕԯO%ë1±¦çy $'›­µN†ÌÕ0j±Ö²› Éóãµ€È3pŒX³§‰Ã=¸#Æñ’(c¶¯™Zu^\2f90x^¹‹ä1Æá± d?ñž™­ý:q=0È“¾u,ÍüDÑš·q<)„Š æÆZ»ƒ,æP\a았Õåì#Z¦¦˜Üõf¶ý“òU[¤ˆqN„>rdŠ4•xOY" &Ö(£ô\÷LNç†õPÓÔjBc&®ªh'+Wµÿr¾DHÈ¡ XY/¥Ÿýó¥5T¯¦/! šdškõWOEè é1 ok™µ‘ ìÞ<}ïä÷êTz¼àΜüÁAžúk yÚ5ç®îP5ëМï÷jäAç늭²·Z HäéVäò?€ ÀÉr9—„ËU§ ´3ñ¤ƒ)kUZ¿B¡Þ „ÔÔ1µw³F,0á)bÄò§˜ÖTwŠ ¦ 0ƒ=wÍÇÙdsiøN6_xžîwéÁ) v ÀàD€m·šñr~7ñÁájv%é´4ÿW£ƒm¼Q|Ï·_v U µÏ8µHùüemu6IzB,g6ÏE@C V‰?+¨‰jaâ5)æX«Æ•ÖOŒ¹Ã`íO Uç>ë+vë°X+ÞBvÒÌÂãÿu+ûa µzŽ2âÍýÿ_Âr·ªØ*!ºYþZEeá)(©C^¬äW^h}¬½Ê¦yb¯äœ%H_\Ë^¢Œäsñ§·9¸o£o¸ÀgV[syú|R¶VíyxÎ]y²Óî„;hœ‰Bµ<9T~êfH.P;“ÐlÈ‘•[ì%?'3XèÄj©B”Èä9󆸀œ™tîÄ)7\ ëÏÀŸôP?ðl óÛ™FÙÕ0ñ㹺³xºç&nr 1BÁ£°8=Oñ‘Á½Ü«†ÿ4[¾6‡áSЂÄ‚¶Eñ” ÖjF;q™‘™§y2Æï³d•—£Œ»÷‚©ˆé¨ú&£ˆÏ€­Ò­?e²½.7†R·NÁ{1v‰‹xCá–m¢?ŒF˜ž®þæÜéŒ> Ëm»Ë5Úî^­´®7ºiTo'A¸Æ£ãZvS·¤y£©Ò¨¢†¬íÍ…è2ðÂæÔ]LªA¦©{,/¼ñ"`á©B0j:–|²"¦Â™ÅeZ&•_{ÔSb œ™žÝ’3 ˜0Ñ{ ›î^‡¸6¤Ïhû\GÉûnJ·: Ò0cb4¨±ckþäx@Ü2ÁÓ¶¥þ‘{È)#Pwauáш÷©Óê§Š3ðÑT´œ©PÌo­¶ŠÒ$#a7UÓ½ßÓ—ìî¹}Bc1ž/ˆèžò€zɵøu¢(Q² nªàCÔ%M ‘°âÅÜÈs=¦œŸPÿ±mÖî— ¾ÆÞÏÉùM Ü^ú'uç>"&{ž1ŒíQQŽXƳÙXß—ðdŒ«¼‰cäÇGPY°ÎˆOµÉÏ“T@`vÄ%ˆ¶2C–ÖöÒh1â«ô™+é±^Z1°oî íÑ}M0&Ø8ö!ûÕHÊÖyäü1î Û‘Ùõ®@‘¿»þ³{è¥3o”êÙ˜hÂ(7ûÖ (ÍJxç0?yί¶¹ýSLÈR]¦E˪ê ÒŽqcŽ}Ê š(Hl:(†æv4óóúîNµ?c=¤½ÇÄ‚¼o˜™séÆ#ªÛü1#¡¯âkû  ƒž‚?¯,‹%¢Ü1~¶éYßuu…4N×LÕd ×ÇN µ¸;{z…š;-Õ¤o[EcçÊ®ÌKØ»§ôSãjE³b•í¥ü+…ÅDX9n«à&d]p¿Z÷)â®Q¤ ¶ 4F cÅ#"×ws¶–<“sn‰ŽœLÊ/þ¬-ƒ0zî}Di@Á÷ÛœÓ4ö–¨J¡¤­\D˜[å1{w»tAnàÒÓƒ¤,‰-ÀBúbóYLØ&d'çÿ‰OpGÔnêCp\ª(ãìÉSŸº"),ø·Å*¾›€OØS{p§/H3]À†®%÷l>×ëŠ¹ÈøGŠëÄ ˆé`4lrûI{ùìbÈ—ÐÞ˰t‡‡o‚|Ãβp‘o]²UÈ/ËðHѧÅR©ë+`¡¬3ÿ-öÓZBÖ»/L›…Cx'c)ì‹I‹ãvþá/_›;NøîŸ¿ RÑŵl&Ÿ¾Zÿ è<&5+9÷ºé0¶ùÇ Pü©fêìX#e»l¾^Ïz%¤ZO_ePYÕ•T¶À«{µêB¢ô­Ñܦ¶ÜÀ†4ÌÁ¤×ŽÿÙicnV Bðtuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon.ico0000644000175000017500000021556611273045225023114 0ustar julianjulian`` ¨”f@@ (B•00 ¨%6×  ¨Þü ˆ †  h(`À      !"#%'()*++,-------,++*)(&%$"!   #%'*,/1468:<>@ABCCDDDDDCBA@>=;:7641/,*(%#!  !$'+/38;>BEINTZ^aceedcaaaaa``^^][ZXURNJGC@<852.+'$"   %*.38?HPX_ejmou}…”™œ›˜“‡‚€~…ˆŠ‰…wnf`\YUPJD>82.*&"   (3@LV^hu‹’š£¨ªª®µ¹ Ã#Ô!3á!2ä#Ùƹ²ª¢ž›››œ¡¨°¶ÀÆÁ´§Ÿ–…{rh]TNG@7.'!   &4H]m ‡¢° ¶¸¼2L×W„íMuñBdñ4Nì$6åß× ÛKrùT€ÿNvÿJpÿFiÿ7TúÙÆÂº´°®°´»ÃÌ&ä4Pø>^þ@aý:Wó*ÜÉÅÂÆ Î!Ð(Ë(Á®£™ˆzhZI7)"  $*6I[Fk³ ˆÏù€Âþq¬ÿ^ŽüCfó"4äm¥õ ˆÎÿu±ÿi ÿa’ÿY†ÿLsÿ.Fø*?òb”ÿW„ÿR|ÿMuÿHmÿBeÿ5Pü ÛÌÇÁ»º½ÃÊÒ#6ïCfÿGlÿKrÿPyÿX‡ÿ^þåç0IóEiûUÿa”ÿpªÿƒÅÿZˆíÉ Ó0IÞ>^ÞGkÕ?_¼|VA/'"   %*2?K@aŸ ¡õÿ “ßÿ „Èÿy·ÿn§ÿ`‘ÿgýÀÿu±ÿl¤ÿc–ÿY‡ÿMuÿ?`ÿ=]ÿZˆÿV‚ÿR|ÿNvÿInÿ?`ÿ7Tÿ%8öÕÎÈÂÀÄËÑ#ê:XÿAbÿIoÿOxÿT~ÿX…ÿ_ÿ9Xû>^ÿPyÿZˆÿa”ÿj¡ÿt°ÿƒÇÿi øFk÷b•ÿs®ÿÃÿ Úÿ ªÿÿLs©G</(#  #(.6AJ8U— ‘Ýø ”áÿ „Èÿz¹ÿn¨ÿc•ÿm¦ÿs¯ÿk¢ÿb–ÿY‡ÿMuÿ@aÿ3NÿEhÿOxÿJpÿGlÿCfÿ<[ÿ2Lÿ-Dÿ!íÒÍÉÈËÐ á,Dÿ4Pÿ?_ÿGlÿLsÿOyÿTÿPzÿ8Tÿ@`ÿNvÿZ‰ÿe˜ÿm¥ÿv³ÿxµÿb”ÿhžÿs¯ÿ ~¿ÿ ŠÑÿ œíÿz¹Ø\<4-'#  $)/6?C+uo¨Ú ‘Ûÿ „Èÿx¶ÿn§ÿe™ÿhŸÿe™ÿ\ÿT€ÿJqÿ@aÿ6Qÿ4OÿAbÿ?_ÿ=]ÿ;Zÿ6Sÿ/Gÿ(<ÿ$6ÿèØÙ×ØÞ 0ù+@ÿ2Kÿ:Yÿ@cÿDgÿFkÿIpÿ;Yÿ4OÿAbÿMuÿX…ÿa“ÿj ÿpªÿešÿhŸÿt°ÿ~¿ÿ ŒÔÿ –ãÿ`‘¾ Q94.)$  !&,18<N8Všt°íÁÿr­ÿgœÿ_ÿ\‹ÿTÿLsÿDgÿ;Zÿ5Pÿ/Hÿ0Jÿ2Lÿ/Dÿ,<ÿ&0ÿ!'ÿ #ÿ "ÿ !þýþýý !ý"%ÿ#'ÿ&,ÿ+5ÿ1Bÿ 5Kÿ 9Tÿ8Uÿ1Lÿ7Tÿ?_ÿHnÿQ{ÿZˆÿb”ÿd—ÿgœÿpªÿ{»ÿ ‰Ðÿz¹è2L‡=51+&"   %)/46 S<\¤a”ìgÿ[‹ÿR|ÿJpÿBdÿ:Yÿ4Pÿ/Gÿ (9ÿ",ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ!ÿ# ÿ#!!ÿ#$%ÿ',ÿ+7ÿ 1Eÿ9VÿAcÿHnÿPyÿW„ÿ^Žÿhžÿu²ÿpªðCf¢ I..*%!   $)*#="2|?^ÇEhõ<\ÿ4Qÿ0Iÿ '7ÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ"!ÿ%"!ÿ'%$ÿ!*.ÿ1?ÿ ÿEDCÿQQQÿ^^^ÿjjjÿtttÿ}}}ÿ‚‚‚ÿ‡‡‡ÿŠŠŠÿŒŒŒÿŽŽŽÿŽŽŽÿ‹‹‹ÿ€€€ÿ___ÿ888ÿ ÿÿÿ ÿ ÿÿÿÿ$$$ÿ,,,ÿ555ÿ???ÿHHHÿOOOd¤¸/`§å"œÿ5§ÿ@°ÿWÀÿ kËÿ rÌÿ sËÿ~Ñÿ…Ôÿ†Óÿ ‡ÕÿyÀÿrŒ¤ÿ‚ ¹ÿ~™«ÿ.|½ÿoËÿtÍÿcÄÿK¬ÿ<ÿB‡ÿyÿ3‰ÿBT]ÿHECÿSSSÿ___ÿjjjÿuuuÿ~~~ÿ………ÿŠŠŠÿÿ“““ÿ–––ÿ———ÿ–––ÿ”””ÿ“““ÿŒŒŒÿoooÿ+++ÿÿÿ ÿ ÿÿÿ ÿ'''ÿ000ÿ:::ÿEEEÿPPPøUUU*R²‚ 0žÿ-¤ÿ:¬ÿO»ÿhÊÿ sÍÿ xÎÿ }Ïÿ ×ÿ Öÿ ŽÕÿ …Óÿ wÌÿ]’ºÿ~˜ªÿtž¹ÿ…Îÿ„Óÿ ‚Ñÿ iÂÿE™ÿBgŠÿ„œšÿGa‚ÿuÿ<^}ÿIGCÿPPPÿZZZÿdddÿmmmÿvvvÿ}}}ÿ„„„ÿ‹‹‹ÿ‘‘‘ÿ———ÿ›››ÿÿžžžÿÿ˜˜˜ÿ“““ÿ†††ÿBBBÿÿÿ ÿÿÿÿÿ%%%ÿ---ÿ;;;ÿKKKÿUUUr_™¬1dªê$ ÿ6ªÿD´ÿ_Åÿ sÎÿ yÏÿ ~Ðÿ ŽÖÿ —Ùÿ “×ÿ Õÿ |ÎÿzÏÿ†Ðÿ:œÑÿ •ÕÿŽÖÿ ”Øÿ ‚ÐÿaµÿSŒÿ‚›Ÿÿ…ž¡ÿ‰¢¡ÿ;T€ÿ@{ÿFLJÿIHHÿQQQÿYYYÿaaaÿiiiÿpppÿxxxÿÿ‰‰‰ÿÿ———ÿœœœÿŸŸŸÿ¡¡¡ÿ¡¡¡ÿœœœÿ“““ÿ‰‰‰ÿAAAÿÿÿ ÿÿÿÿÿÿ$$$ÿ:::ÿOOOËW¬d7¦ÿ-¦ÿ<°ÿQ¾ÿ nÍÿ uÎÿ Ñÿ ‡Óÿ šÚÿ —Øÿ “×ÿ „Ñÿ {Ïÿv¾ÿ n¥ÿŠËÿ˜Ûÿ œÛÿ “Øÿ |ÊÿWŸÿ\…›ÿ”¬®ÿФ©ÿŠ£¨ÿˆ ¤ÿ;]ˆÿ8LWÿA><ÿIIIÿNNNÿUUUÿ\\\ÿcccÿkkkÿuuuÿÿˆˆˆÿ‘‘‘ÿ˜˜˜ÿÿ   ÿ¡¡¡ÿŸŸŸÿšššÿŽŽŽÿ|||ÿ%%%ÿÿÿÿÿÿ ÿÿÿ!!!ÿ>>>ðJJJE~³Á'¥ÿ4­ÿE·ÿbÈÿ rÎÿ yÏÿ ƒÒÿ “×ÿ œÚÿ •Øÿ ŒÔÿ ~ÏÿzÊÿ(t¡ÿ–˜™ÿ4˜Ãÿ¢Þÿ œÙÿ ŒÓÿt½ÿd•ÿ‘­³ÿ—²¶ÿ’­²ÿ©®ÿ’ª­ÿ„ž§ÿ?Znÿ343ÿA@@ÿFFFÿJJJÿOOOÿUUUÿ^^^ÿiiiÿtttÿ€€€ÿŠŠŠÿ“““ÿ˜˜˜ÿ›››ÿœœœÿšššÿ•••ÿ‰‰‰ÿxxxÿPPPÿÿÿÿ ÿÿ$$$ÿ+++ÿ111ÿ***ÿ+++ÿEEE:b°(X¯î'©ÿ;³ÿRÁÿlÍÿ sÎÿ €Òÿ ŠÔÿ ›Úÿ ˜Ùÿ Öÿ ƒÑÿ ~Ïÿr³ÿyŒ—ÿÁ½¼ÿ,¦ÐÿŸ×ÿ ‘Ðÿ †Éÿd¤ÿT†Ÿÿ¦¾¿ÿšµºÿ˜²·ÿ•¯´ÿ“«°ÿ•¬¯ÿƒž¦ÿ5FNÿ420ÿ>;9ÿA>=ÿECBÿJHGÿQPOÿ\\\ÿiiiÿvvvÿ‚‚‚ÿŒŒŒÿ‘‘‘ÿ“““ÿ’’’ÿÿ………ÿwwwÿaaaÿHHHÿÿÿÿÿÿÿÿ'''ÿ888ÿ222ÿ888fa·XA°ÿ.®ÿDºÿ^Çÿ mÍÿ yÏÿ †Ôÿ “×ÿ ›Úÿ ’Öÿ ˆÓÿ €ÐÿzÆÿ2r—ÿ·ª¦ÿz©¹ÿ˜Åÿ ŒÃÿ „Àÿt®ÿ Xƒÿ~™ ÿš²µÿ˜±¶ÿ—¯³ÿ“«¯ÿ§«ÿ¥©ÿ•ª­ÿw‘šÿ/J_ÿyÕÿNˆÖÿ\•ÙÿgŸÜÿl¤Ýÿl§Ýÿi§Úÿc¥Òÿ[ŸÅÿH¯ÿ>~™ÿ6l…ÿ.IUÿ+('ÿ ÿÿÿ ÿ ÿ ÿ>LSÿ#*ÿÿ ÿ ÿ ÿÿ...ÿzzzÿˆˆ‡ÿ™š›ÿ¼¿Àÿòóîÿ\xµÿ>b€ÿQNJÿRRRÿPPPÿLLLÿFFFÿBBBÿBBBÿ...ÿÿÿÿÿÿÿ ÿÿÿÿ###ÿ+++ÿ777ÿIIIñOOOz¯À!KzËò7aÑÿP~ÕÿaŽ×ÿqœÛÿ}§ßÿƒ¯àÿ…³ßÿ‚²Ùÿy©Éÿf”¯ÿV€–ÿEhyÿ5EMÿ)))ÿ ÿÿÿÿ ÿ ÿÿÿ ÿ ÿ ÿ ÿ ÿÿ???ÿ”””ÿ¡¡¡ÿ«««ÿ¶¶µÿïïéÿkƒ­ÿ5K^ÿPMJÿOOOÿLLLÿEEEÿ???ÿJJJÿ;;;ÿ"""ÿÿ ÿÿÿÿÿÿ"""ÿ***ÿ,,,ÿ...ÿ888ÿIIIÿOOOųزEjÒÿ_‚Ôÿs–Ùÿƒ¢Ýÿ‘²âÿ–¸âÿš¼Þÿ‘±Ìÿ{—¬ÿ_u„ÿEQWÿ234ÿ'%#ÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿ]]]ÿ§§§ÿªª«ÿ°®­ÿ”›¥ÿš¨¹ÿl}Ÿÿ'?UÿONKÿLLLÿFFFÿ===ÿGGGÿMMMÿ+++ÿÿ ÿÿÿÿÿÿ(((ÿ666ÿ///ÿ111ÿ999ÿCCCÿPPPÿOOOk•ÇÖ2m”Öøa{Òÿ„œÛÿ“«àÿ ºäÿ¤¾ßÿ™¯Çÿÿ[cjÿ>?@ÿ0.-ÿ&&%ÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿ{{{ÿ³³³ÿ±±±ÿ»º¹ÿUk†ÿ2dÿ)Tÿ3PÿHPRÿJHHÿAAAÿ;;;ÿXXXÿ===ÿ ÿÿÿÿÿ ÿÿ***ÿ;;;ÿ...ÿ***ÿ999ÿFFFÿOOOÿPPPøQQQ)“¿ÔxjˆÒÿ“Øÿ¤¶äÿ¨»àÿš©Âÿv‹ÿVWYÿ@?>ÿ333ÿ(((ÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿ$$$ÿŸŸŸÿ½½½ÿ¿¾¼ÿ™¡¨ÿ=Zzÿ7Quÿ *;ÿGKUÿ,9ÿEJLÿ888ÿLLLÿ[[[ÿ000ÿÿ ÿÿÿ ÿÿ'''ÿ999ÿ(((ÿ###ÿ111ÿ???ÿOOOÿTTTÿQQQ¬ºÕšvÕÿ—¦Ûÿ©Ãÿv|‡ÿ]]]ÿLKKÿ===ÿ///ÿ###ÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿ"""ÿ%%%ÿÿ[[[ÿ½½½ÿ¼»»ÿ¾½½ÿh{ÿGd‚ÿ.AZÿSV[ÿFKTÿDGQÿ!*6ÿ$+1ÿaaaÿ[[[ÿ222ÿÿÿ ÿ ÿÿ"""ÿ999ÿ'''ÿÿ***ÿ777ÿFFFÿVVVÿTTTÿVVVT€¦´Œ²Ê›}•Íÿltÿnnlÿ`__ÿNNNÿ===ÿ...ÿ!!!ÿÿÿÿ ÿ ÿÿÿÿÿÿ ÿ%%%ÿ)))ÿ--.ÿ--,ÿB@>ÿ·µµÿÃÃÃÿÁ¿¾ÿŸ¦­ÿbxÿNd|ÿ7?JÿY\bÿ6DMÿSX^ÿZ^gÿdgmÿ).6ÿ!%ÿOOPÿPPPÿ;:;ÿ'''ÿÿÿ'''ÿAAAÿ!!!ÿÿ)))ÿ555ÿDDDÿUUUÿ^^^ÿYYY_ ||{ä}}}ÿmmmÿ\\\ÿJJJÿ999ÿ+++ÿ!!!ÿÿÿÿÿÿÿ###ÿ)))ÿ///ÿ666ÿ<<<ÿBBAÿDB@ÿgxŒÿ„¬ÑÿޱÎÿ³ÆÕÿ³ÄÓÿ€¡¾ÿj~“ÿEHOÿ^`eÿ?DMÿadjÿimtÿPS[ÿ$1ÿ57;ÿ ÿÿÿ'''ÿÿ###ÿ888ÿ===ÿÿ"""ÿ///ÿ<<<ÿKKKÿ\\\ÿ]]]ÒZZZlll¸‰‰‰ÿuuuÿgggÿVVVÿEEEÿ666ÿ***ÿ###ÿÿÿÿ!!!ÿ'''ÿ---ÿ444ÿ;;;ÿCCCÿIIIÿLJHÿu{†ÿ¢¸ÖÿެÏÿ‘²Ñÿ’´Ñÿ°Îÿ‡¨ÈÿlˆªÿUbwÿ7>JÿZ\_ÿFKTÿeglÿ.4@ÿAEMÿOQVÿ+-0ÿ ÿÿ111ÿ'''ÿ...ÿHHHÿ))(ÿÿ(((ÿ555ÿCCCÿSSSÿcccÿZZZS'{{{Ü‚‚‚ÿrrrÿdddÿSSSÿDDDÿ777ÿ...ÿ)))ÿ'''ÿ(((ÿ,,,ÿ222ÿ999ÿAAAÿIIIÿPPPÿSSQÿdmÿ§·Öÿ±¿×ÿ¦¸Ðÿ”®Ëÿ‘ªÈÿŒ¦Äÿ‚ž¾ÿu¶ÿb|ªÿH^Šÿ8Eaÿ:?HÿPSXÿ17CÿbejÿWZ`ÿ*,/ÿÿ===ÿ888ÿ000ÿ=<<ÿQSUÿ"ÿ ÿ/.-ÿ;;;ÿKKKÿ[[[ÿnnn³MMM&‚‚‚Ø~~~ÿpppÿbbbÿSSSÿGGGÿ<<<ÿ666ÿ444ÿ555ÿ999ÿ???ÿFFFÿNNNÿWWWÿ_^^ÿ‚‚€ÿš²Êÿ‡œÍÿ²¼Ñÿ­¹Ëÿ¢±Äÿ“¤¼ÿ„˜´ÿx®ÿi}¥ÿZpŸÿKcœÿ3N‘ÿ*=zÿ)IÿPU[ÿ@DOÿKNTÿ%'+ÿÿRRRÿ???ÿ<<<ÿSRQÿDIQÿ-ÿ'ÿ*.3ÿIHFÿVUTÿfefù[[[7ddd|||È~~~ÿpppÿcccÿWWWÿMMMÿEEEÿCCCÿCCCÿGGGÿLLLÿTTTÿ\\\ÿhhhÿSSSÿ¡ŸŸÿ½ÂÂÿœÁÿ‰—Àÿª±Àÿš£µÿŒ—«ÿ€Œ£ÿr›ÿap”ÿO`ÿ@S‰ÿ2G‰ÿ7ŽÿEdÿRWYÿ-3?ÿCGMÿ!ÿ"$'ÿZZZÿIIIÿOONÿVVXÿ3:Hÿ[boÿ&2IÿGO]ÿ%.>ÿKNTÿJIH‘cccwwwª}}}ÿrrrÿgggÿ]]]ÿVVVÿRRRÿRRRÿUUUÿZZZÿcccÿoooÿNNNÿ ÿQQQÿµ³±ÿ§²µÿi‚¯ÿxƒ©ÿ‰¢ÿ{ƒ—ÿluŒÿ_hƒÿS]|ÿGRwÿ9Fuÿ#4uÿ8RƒÿjuwÿljiÿgggÿMPTÿÿ/03ÿZYYÿTTTÿaa`ÿ:>Gÿot~ÿv|‡ÿEM\ÿV\iÿ$>ÿ 7ÿ+¤ qqqt|||øvvvÿlllÿeeeÿaaaÿ```ÿdddÿjjjÿiiiÿEEEÿÿ ÿÿŽŽŽÿª¨¦ÿ‘ž£ÿUj‘ÿMYƒÿX_|ÿSXrÿILdÿ?B[ÿ58Uÿ,1Vÿ2@^ÿ[ddÿgedÿlllÿqqqÿppoÿQRTÿCDEÿ\\\ÿlllÿYZ]ÿAHTÿ”šÿ>FXÿ]bmÿ,7Lÿ+5Kÿ%2IÿLUeÿ&1Hïykkk9{{{ÎyyyÿsssÿoooÿoooÿiiiÿWWWÿ666ÿ ÿÿÿÿYYYÿš™™ÿ–”“ÿ€‡ˆÿTcuÿ:D_ÿ.8Tÿ8`ÿ>nÿ>rÿDrÿ,RkÿISYÿ_[WÿgffÿqqqÿxxxÿvuuÿdddÿMMMÿCDFÿ=DQÿ?GYÿ]drÿOVcÿJRaÿ)5Kÿ%1Hÿ8AUÿekuÿ9DZÿ!1Mÿ2Û&\nnn yyyc}}}ƒxxxfjjj·TTTÿ@@@ÿ333ÿ(((ÿÿÿÿ222ÿˆˆˆÿƒƒƒÿ|{zÿqmgÿDYgÿ K‡ÿL›ÿOŸÿR£ÿS¤ÿP¡ÿK“ÿ(NtÿZ[[ÿkigÿvvvÿ{{{ÿyyyÿ===ÿÿÿ!,?ÿ;FZÿinyÿ7AVÿ1Tkÿ6ÿ'vÿfÿbÿ`ÿ`ÿbÿfÿ&uÿ>sÿZ]^ÿnljÿuuuÿwwwÿ+++ÿ ÿÿÿ?BHÿFO`ÿ1>Uÿ2>TÿMVeÿdjvÿˆ˜ÿ›Ÿ§ÿCMbÿ]cpÿ/;Sÿ$3Oÿ >ü'9« )ddd^^^ÏMMMÿ>>>ÿ///ÿ$$$ÿÿÿÿ^^^ÿjeaÿ>Shÿ Fÿ*i«ÿ9u±ÿ9r­ÿ5k¦ÿ2f¡ÿ5k¦ÿ9q«ÿ¿^gxÿQZmÿ6CZÿ/>=ÿ(((ÿ&&&ÿ222ÿCCCÿHHHÿBBBÿZZZÿÁÁÁÿ\\\ÿÿÿÿÿglkk&d]ZûDOVÿn¢ÿ˜îÿ¢ýÿwÉÿ.Ôÿ?»ÿÿ-³ÿÿ"¯ÿÿ«ÿÿ©ÿÿ¨ÿÿ §ÿÿ §ÿÿ ¦ÿÿ ¦ÿÿ §ÿÿ§ÿÿ©ÿÿªÿÿ­ÿÿ'±ÿÿ4·ÿÿ7¦ëÿ_ªÿçÿ™ðÿhšÿ:DJÿUNJÿdddÖmmm1&H¶ekvþ_^\ÿ]]]ÿWWWÿ444ÿ!!!ÿ&&&ÿ'''ÿ444ÿYYYÿÔÔÔÿeeeÿ---ÿMMMÿÿÖ mkj Kdrù ~Àÿöÿ£üÿÔÿ{Äÿ3´ýÿ&±ÿÿ­ÿÿ«ÿÿ©ÿÿ¨ÿÿ §ÿÿ §ÿÿ §ÿÿ §ÿÿ §ÿÿ §ÿÿ §ÿÿ §ÿÿ¨ÿÿ©ÿÿ«ÿÿ ®ÿÿ,´ÿÿ#‹Óÿ^«ÿ˜ñÿŸùÿÁÿ>[lÿlc^Ì""%AZZYÆuuuÿsssÿiiiÿFFFÿ---ÿ)))ÿ%%%ÿ ÿ###ÿ,,,ÿžžžÿßßßÿ'''ÿkšM †Êÿ õÿ  õÿ|Ëÿ a«ÿ!£ñÿ¯ÿÿ¬ÿÿªÿÿ©ÿÿ©ÿÿ©ÿÿ©ÿÿ©ÿÿªÿÿªÿÿ©ÿÿ©ÿÿ ¨ÿÿ ¨ÿÿ ¨ÿÿ ¨ÿÿ©ÿÿ«ÿÿ­ÿÿ#®ýÿo¸ÿgµÿôÿ ùÿ‹×ÿ;m‰ÉEEEtttÕ‡‡‡ÿŽŽŽÿ………ÿVVVÿ333ÿ///ÿ,,,ÿ%%%ÿÿAAAÿZZZÿÿ;b– …Éé¡ðÿšèÿv¿ÿ VœÿÛÿ¯ÿÿ­ÿÿ«ÿÿ«ÿÿªÿÿªÿÿ«ÿÿ¬ÿÿ­ÿÿ®ÿÿ®ÿÿ­ÿÿ­ÿÿ«ÿÿªÿÿ©ÿÿ©ÿÿ©ÿÿ©ÿÿ«ÿÿ­ÿÿ¢ñÿ e®ÿq¿ÿ ™ìÿ ¡÷ÿÞÿq°^€€€zÿâââÿÆÆÆÿ}}}ÿaaaÿ888ÿ333ÿ000ÿ---ÿ###ÿÿéoooºš£ìÿ%ãÿ yºÿl¬ÿ$’Öÿ%²ýÿ±ÿÿ¯ÿÿ­ÿÿ­ÿÿ­ÿÿ®ÿÿ°ÿÿ±ÿÿ!²ÿÿ"³ÿÿ"³ÿÿ!³ÿÿ±ÿÿ°ÿÿ®ÿÿ­ÿÿ«ÿÿªÿÿ«ÿÿ¬ÿÿ­ÿÿ°ÿÿ!¡ëÿ|Ãÿ„Íÿíÿ£÷ÿ‹Õío«$•••U¥¥¥ÿ»»»ÿ•••ÿ‡‡‡ÿÐÐÐÿ‚‚‚ÿ===ÿ333ÿ777ÿ666ÿ000ÿ;;;…F®æÉ,±öÿE¬åÿK¡ÔÿQ³èÿNÃüÿBÁÿÿ5»ÿÿ,¶ÿÿ$³ÿÿ ±ÿÿ±ÿÿ!³ÿÿ%´ÿÿ*·ÿÿ/¹ÿÿ2»ÿÿ2»ÿÿ0ºÿÿ,¸ÿÿ&µÿÿ!²ÿÿ°ÿÿ¯ÿÿ¯ÿÿ°ÿÿ#²ÿÿ)µÿÿ5ºÿÿC¿þÿF·óÿ9§åÿ*©ïÿ«úÿžîÿ~Âe•••”””®“““ÿ‰‰‰ùšššþéééÿ„„„ÿoooÿxxxÿMMMÿLLLÿKKKêW¼ð·A¿ûÿpÑüÿ„Úüÿ…ÜÿÿyØÿÿjÑÿÿ[ËÿÿMÄÿÿ>¾ÿÿ0¹ÿÿ)¶ÿÿ+·ÿÿ1ºÿÿ9¾ÿÿ@ÂÿÿEÄÿÿFÅÿÿDÃÿÿ=Àÿÿ4¼ÿÿ,¸ÿÿ(µÿÿ)µÿÿ.¶ÿÿ5ºÿÿA¿ÿÿKÃÿÿ\ÊÿÿsÓÿÿzÔüÿjÌùÿKÁüÿ+µýÿ¤õÿ„Í_œœœI´´´ÿÔÔÔ稨¨nˆˆˆýqqqÿVVVÿ¦¦¦ÿíííÿzzzÿeeeô222J¾åùCTÇû÷|Ýÿÿ˜æÿÿœæÿÿ“ãÿÿ‡ßÿÿ}ÚÿÿqÕÿÿ^ÌÿÿEÂÿÿ5¼ÿÿ5¼ÿÿ>ÀÿÿKÇÿÿUÌÿÿ\Ïÿÿ\ÏÿÿZÍÿÿRÊÿÿFÄÿÿ;¿ÿÿ8½ÿÿA¿ÿÿKÂÿÿUÇÿÿcÍÿÿmÑÿÿ{×ÿÿ’áÿÿšãýÿˆÛýÿbÎÿÿ/ºÿÿ(«ñÒP¬Þ¾¾¾PçççáÂÂÂN××ל®®®ÿˆˆˆìkkkÊsssÿ™™™ÿ}}}ùBBBKZZZÅãñ[rÀáÿ‰Üûÿ”æÿÿ‘çÿÿŠãÿÿ†áÿÿ‚àÿÿnÙÿÿMÈÿÿ>Áÿÿ?ÁÿÿMÉÿÿ`Ðÿÿp×ÿÿuÙÿÿuÙÿÿtÙÿÿmÕÿÿ\ÎÿÿKÈÿÿIÅÿÿWÈÿÿbÍÿÿbÏÿÿkÔÿÿxßÿÿ€ãÿÿéÿÿ–ëÿÿ…äÿÿ[ÐÿÿC¶ðßÂæù*ËËËÉÉÉÞÞÞ²àààÿ———¦†††Žpppÿvvvÿtttƒ&&&222âàß*oooüky~ÿi‡ÿ_v~ÿTjrÿPdlÿG^gÿY‡›ÿmÈñÿ=ÃÿÿBÀúÿU¹æÿxØüÿ‹âÿÿãÿÿãÿÿãÿÿˆáÿÿsØÿÿSºèÿK½òÿSËÿÿtÏøÿœÙóÿ‹½ÒÿGs…ÿS‘ÿb¢ÿlž±ÿgžµÿU’ÿ¨¯²zËËË+ÞÞÞ’½½½DÈÈÈô±±±Ìƒƒƒeeeeßßß-baaýTQPÿFBAÿ732ÿ+(&ÿ ÿ($"ÿ«¤ ÿÍËËÿ‹¾×ÿKÁøÿN·äÿrÀÜÿ—äýÿžéÿÿŸéÿÿžéÿÿ–æÿÿqÅäÿJ°ÝÿF¾öÿŠÇäÿÏÔÖÿçàÝÿæàÞÿpjhÿÿ1,*ÿ@;9ÿMGDÿRLIÿº¸¸l¼¼¼ØØØ–œœœ;™™™/^^^ÿMMMÿ<<<ÿ---ÿ!!!ÿÿŠŠŠÿãããÿÔÒÑÿÒÉÆÿ®ÂËÿoËóÿjÓüÿ‡Þýÿ•åÿÿ–æÿÿ”åÿÿ‡ßþÿeÏûÿ`Êùÿ¦Ç×ÿÛÓÐÿàÞÜÿãããÿèèèÿ×××ÿ666ÿ"""ÿ444ÿDDDÿVVVÿvvv`ggg1aaaÿMMMÿ<<<ÿ---ÿÿ???ÿæææÿäääÿåååÿêêêÿçâßÿÑÓÔÿ’ÌäÿpÓûÿpÙÿÿ|äÿÿ{åÿÿjÖýÿÊêÿÅÎÓÿæàÝÿæææÿïïðÿðððÿèèèÿðððÿˆˆˆÿÿ444ÿDDDÿXXXÿgggUnnn4bbbÿOOOÿ>>>ÿ///ÿÿ|||ÿûûûÿôôôÿàààÿ———ÿŽŽŽÿ£¡¡ÿ×ÑÎÿ½ÍÔÿŸÍàÿLƒ™ÿ"Vlÿl‡”ÿàÜÚÿÛØÖÿ•––ÿƒƒƒÿ”””ÿÝÝÝÿöööÿóóóÿ¾¾¾ÿ'''ÿ666ÿGGGÿ[[[ÿjjjInnn6cccÿOOOÿ???ÿ000ÿÿ¹¹¹ÿÿÿÿÿòòòÿ^^^ÿ;;;ÿKKKÿAAAÿÿçäâÿìåâÿZWUÿÿЇ†ÿöõõÿxxxÿ===ÿRRRÿKKKÿdddÿìììÿúúúÿèèèÿDDDÿ555ÿKKKÿ^^^ÿmmm=nnn7dddÿQQQÿ@@@ÿ000ÿ$$$ÿÖÖÖÿÿÿÿÿ···ÿÿ111ÿ444ÿ...ÿ666ÿÜÜÜÿÿÿÿÿ‚‚‚ÿÿ¨¨¨ÿèèèÿ///ÿ444ÿ>>>ÿ???ÿ...ÿÆÆÆÿÿÿÿÿûûûÿ\\\ÿ555ÿMMMÿ```ÿmmm5ooo8dddÿRRRÿBBBÿ111ÿ%%%ÿÕÕÕÿÿÿÿÿ¾¾¾ÿÿ%%%ÿeeeÿ???ÿ)))ÿéééÿÿÿÿÿ„„„ÿÿ°°°ÿñññÿ"""ÿ...ÿpppÿFFFÿÿÊÊÊÿÿÿÿÿÿÿÿÿbbbÿ666ÿOOOÿcccÿnnn0ooo7fffÿSSSÿCCCÿ444ÿÿ···ÿÿÿÿÿÿÿÿÿOOOÿÿ²²²ÿeeeÿÿÿÿÿÿÿÿÿÿ```ÿÿ   ÿÿÿÿÿ€€€ÿ...ÿ¾¾¾ÿPPPÿSSSÿúúúÿÿÿÿÿúúúÿUUUÿ;;;ÿRRRÿeeeýooo+nnn4gggÿTTTÿDDDÿ555ÿÿyyyÿÿÿÿÿÿÿÿÿñññÿÿŒŒŒÿµµµÿùùùÿùùùÿðððÿ%%%ÿÿƒƒƒÿÿÿÿÿôôôÿ¥¥¥ÿÿšššÿíííÿþþþÿÿÿÿÿßßßÿ;;;ÿAAAÿUUUÿgggùooo%lll/gggÿUUUÿEEEÿ777ÿ$$$ÿ>>>ÿóóóÿýýýÿûûûÿÿÿÿÿûûûÿùùùÿîîîÿõõõÿµµµÿÿÿ@@@ÿëëëÿèèèÿðððÿðððÿöööÿòòòÿòòòÿÿÿÿÿ±±±ÿ,,,ÿFFFÿWWWÿiiiôoooiii%eeeûVVVÿFFFÿ888ÿ,,,ÿÿ‚‚‚ÿÿÿÿÿðððÿìììÿçççÿâââÿâââÿâââÿ:::ÿÿÿÿµµµÿäääÿÛÛÛÿÝÝÝÿßßßÿâââÿèèèÿòòòÿfffÿ000ÿIIIÿ[[[ÿkkkînnndddcccåVVVÿGGGÿ:::ÿ...ÿ!!!ÿÿŸŸŸÿñññÿäääÿÙÙÙÿÚÚÚÿÖÖÖÿ___ÿÿÿÿÿDDDÿàààÿÚÚÚÿ×××ÿØØØÿÚÚÚÿéééÿ¥¥¥ÿ'''ÿ:::ÿKKKÿ^^^ÿlllämmm ```§XXXÿJJJÿ===ÿ111ÿ'''ÿÿÿcccÿ¬¬¬ÿ¹¹¹ÿ’’’ÿ<<<ÿÿÿÿÿÿÿgggÿÝÝÝÿâââÿàààÿãããÿ§§§ÿ,,,ÿ,,,ÿ>>>ÿNNNÿaaaÿlll³```_[[[ÿPPPÿBBBÿ666ÿ,,,ÿ###ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:::ÿÿ   ÿdddÿ###ÿ%%%ÿ666ÿBBBÿRRRÿcccÿiii^ddd ^^^ÕVVVÿIIIÿ===ÿ222ÿ)))ÿ ÿÿÿ ÿ ÿ ÿÿÿÿÿÿ ÿ ÿÿ ÿÿÿ&&&ÿ111ÿ;;;ÿHHHÿXXXÿfffÞlllbbbb\\\ÿQQQÿEEEÿ:::ÿ111ÿ(((ÿ ÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿ'''ÿ000ÿ999ÿCCCÿPPPÿ]]]ÿgggw___±ZZZÿPPPÿDDDÿ;;;ÿ222ÿ***ÿ"""ÿÿÿÿÿÿÿÿÿÿÿÿ"""ÿ(((ÿ000ÿ888ÿBBBÿMMMÿYYYÿaaaÍccc```aaa×\\\ÿQQQÿGGGÿ>>>ÿ555ÿ...ÿ'''ÿ###ÿ ÿÿÿÿÿÿ!!!ÿ###ÿ'''ÿ,,,ÿ333ÿ:::ÿCCCÿMMMÿXXXÿaaaô```3hhh(dddÜ___ÿVVVÿLLLÿDDDÿ<<<ÿ666ÿ111ÿ---ÿ+++ÿ***ÿ***ÿ+++ÿ,,,ÿ...ÿ000ÿ444ÿ999ÿ@@@ÿGGGÿPPPÿ[[[ÿbbbûaaaUggghhh¿fffÿ^^^ÿUUUÿNNNÿGGGÿAAAÿ>>>ÿ;;;ÿ:::ÿ:::ÿ:::ÿ;;;ÿ>>>ÿAAAÿEEEÿJJJÿQQQÿYYYÿbbbÿfffðhhhOiiikkkjkkkãgggÿaaaÿZZZÿTTTÿPPPÿMMMÿLLLÿKKKÿLLLÿMMMÿOOOÿSSSÿWWWÿ]]]ÿdddÿiiiÿjjj´jjj$mmmnnnlmmmÎkkkþhhhÿdddÿaaaÿ___ÿ^^^ÿ___ÿ```ÿbbbÿfffÿiiiÿlllúmmm´mmmIlllmmmnnn)oooZnnnnnnÈmmmßmmmìmmmînnnânnnËooooooTnnn"mmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀàÿÿÿÿÿÿÿ?ÿÿÿÿÿðÿÿÿÿÿà?ÿÿÿÿàÿÿÿÿð?ÿÿÿÿüÿÿÿÿþÿÿÿÿÿÿ€ÿÿÿÿÿÿðÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿøÿÿÿÿÿðÿÿÿÿÿàÿÿÿÿÿÀÿÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿÿþÿÿÿüÿÿÿüÿÿÿü?ÿÿÿø?ÿÿÿø?ÿÿÿø?ÿÿÿø?ÿÿÿø?ÿÿÿøÿÿÿüÿÿÿüÿÿÿüÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿàÿÿÿÿÿàÿÿÿÿÿàÿÿÿÿÿðÿÿÿÿÿøÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿ€ÿÿÿÿÿÿÀÿÿÿÿÿÿôÿÿÿÿÿþÿÿÿÿÿþûÿÿÿÿþÃÿÿÿÿÿàÿÿÿÿøŸÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿð?ÿÿÿÿÿø?ÿÿÿþÿü?ÿÿÿüü?ÿÿÿüüÿÿÿüü€ÿÿÿÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(@€     "#$%&&&&%$#"   !%).27:>AEFHIJJJHEB?<973/+'#  #(.<ENV\cp{†ŽŒ‡zwxwvwzyulbXPJB;4,&   $6KWm£"¹Â À½ÀÔ-Gí0Iö!3ë˸­¦¢£¨²ÄÛ!Ý Æ® œ¡œ‰wdXI>2$  !,A tb–ßgœøJoô*æIoï ˆÎÿj¢ÿX„ÿA`ÿ$òP{ýf™ÿV‚ÿOyÿ3NûÕǾ·¼Ä×2LüMuÿU€ÿ[ÿ/ê ä-EóDgý[Šýe–ô Ì Ë)>Ñ6RÂ&ŒM2$  #+4T¿Þ ´ÿÿ Ùÿp¬ÿiŸÿ‚Äÿu²ÿhžÿW„ÿ=^ÿPxÿZˆÿQzÿInÿ>aÿ.óÏÄÀÄÒ%;øGlÿOxÿV‚ÿe™ÿGlÿAcÿ_‘ÿn¦ÿÃÿˆÏÿUÿj¡ÿŒÔÿ ¸ÿÿb”¾<0'   &.4HS~µ —åÿ ŽÙÿq«ÿgžÿk¢ÿ]ÿOzÿ;Zÿ6QÿFkÿDgÿ?_ÿ5Oÿ+AÿéÒÒÓì1Kÿ;[ÿFmÿLuÿLuÿ8TÿDfÿX†ÿhÿt¯ÿh ÿq«ÿ ŽØÿ £÷ÿešÂG-+$  ")),'k`’Ô{»ÿk£ÿ\ŠÿOxÿDhÿ9Xÿ/Gÿ,Aÿ )9ÿ%.ÿ "ÿ!ÿ!!ÿÿÿÿ"$ÿ#%ÿ&+ÿ-8ÿ2Dÿ 0Gÿ2Mÿ@eÿNxÿ[Šÿd–ÿo©ÿ ˆÏÿ y¸ì1J*%&!  !O@W«NnïAZÿ/Eÿ"2ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ%ÿ&"ÿ"')ÿ/;ÿ •ÿ Buÿ ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿ ÿ(((ÿ222ÿ??@ÿ---\o²Å3M«ÿ  ÿ>²ÿ!d´ÿšŸ¥ÿ”©ÿlÇÿ nÅÿU°ÿG¹ÿCl¥ÿ³­¦ÿ]q£ÿ*¨ÿ#@dÿÿÿÿ###ÿ***ÿ,,,ÿ+++ÿ"""ÿÿÿÿÿÿ ÿÿÿ"""ÿ,,,ÿ888ÿIIIúYYY'0_¥Ïœÿ;¬ÿ\Æÿ oÉÿ[»ÿE’Çÿ}Ôÿj¨ÿLn”ÿd³ÿgÁÿ^‹»ÿ%Z±ÿœÿ 7žÿ4@CÿB=7ÿ^^^ÿtttÿƒƒƒÿÿ’’’ÿ’’’ÿˆˆˆÿsssÿLLLÿÿÿÿ ÿÿÿ'''ÿ555ÿCCCÿQQQ©T²l"›ÿ.§ÿVÀÿ rÏÿtÎÿ„Öÿ‹Úÿ€Ôÿ]ˆ®ÿ©¨©ÿI‰ºÿuÔÿiÍÿ>ÿ-Tˆÿ%ÿ/IrÿTPFÿ_^^ÿpppÿ~~~ÿ‰‰‰ÿ“““ÿšššÿ   ÿ¤¤¤ÿ£££ÿ“““ÿSSSÿÿÿ ÿÿ ÿ+++ÿ<<<ÿPPPÿYYY$f¡¬(U¦ä ÿF·ÿ nÍÿ zÐÿ ˆÓÿ ™Ûÿ ‘ÖÿzÓÿ‚ÌÿMœÇÿ”Öÿ‘Üÿd¿ÿ*[Œÿœ¯ ÿd{‘ÿ:xÿDHEÿRPNÿ^``ÿlllÿwwwÿƒƒƒÿÿšššÿ   ÿ¤¤¤ÿ¦¦¦ÿ¤¤¤ÿiiiÿÿÿÿÿÿÿ999ÿTTT~Y‘®U)¤ÿ2®ÿ^Æÿ xÐÿ ‚Ñÿ šÙÿ ›Ùÿ‡ÖÿtÉÿ#t¡ÿ ’Ðÿ¢äÿÚÿ\¥ÿ}š¢ÿ³±ÿ™±®ÿ`›ÿ-‘ÿ"«ÿ 9Éÿ.»ÿ<¨ÿVmÿyztÿsqpÿcccÿQQQÿFFFÿ(((ÿÿ ÿÿÿÿÿ999üIII'VÃ,Dµÿ=¾ÿkÍÿŠ×ÿ$™Ùÿ •Øÿ‰×ÿ }ÂÿŒ’—ÿ¡¨ÿ!v”ÿ ]yÿBTÿIGEÿ[TSÿXUSÿbhkÿFJKÿ#$#ÿy€‚ÿÀÉÄÿ³¾Áÿ-Œÿ®ÿ³ÿ«ÿ.¨ÿ[q{ÿ`]XÿQQQÿHHHÿ000ÿÿ ÿÿÿÿÿÿ777ÿLLL,^–Æ+K¹ÿ FÁÿ$xÓÿ3×ÿ:™Úÿ5’Øÿ#ÚÿO—Äÿ´¹·ÿ2Чÿ*b{ÿ):AÿÿÿHGFÿ[[Zÿ%7Aÿÿÿ'&%ÿ¨««ÿîñæÿÌØÝÿ ,•ÿ²ÿ@b˜ÿ[fgÿYZXÿPONÿGGGÿ999ÿÿ ÿÿÿÿÿÿÿ===óNNNo¯È1]½òQÊÿ;‚×ÿQ•Øÿ[ŸÛÿYŸÜÿP ÚÿW¥ÐÿQºÿ#s”ÿ*BMÿ&ÿÿÿÿNZaÿÿÿÿÿ_``ÿŸ Ÿÿø÷çÿ£°ÔÿM™ÿ]aOÿZTJÿPNLÿFFFÿ@@@ÿ(((ÿÿÿÿÿ ÿÿÿ)))ÿHHHÍPÅÉ1]ÒÿX‰×ÿržÛÿ€­áÿ„¶äÿ~´Úÿcš·ÿDu‹ÿ3FOÿ%!ÿÿÿÿÿ"ÿÿ ÿÿÿtttÿŸžžÿÄÁ¹ÿãèðÿ?ZyÿLHAÿONMÿCCCÿGGGÿ888ÿÿÿÿÿÿ"""ÿ'''ÿ,,,ÿAAAÿQQQ”…¹ÓcPsÔÿq×ÿ®âÿ¢Âêÿ¢ÁÞÿ—ªÿQ\bÿ210ÿ!ÿÿÿ ÿÿÿÿ ÿ ÿÿÿ ¢¡ÿÁ¿»ÿ˜Ÿ§ÿbxœÿ)@_ÿKLHÿFEDÿ@@@ÿOOOÿ###ÿ ÿÿÿÿ///ÿ444ÿ111ÿAAAÿPPPÿRRR<¦ÖÀv‰Úÿ¬½ëÿ©½Úÿz‚ŽÿJIHÿ-*&ÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿ;::ÿÄÄÃÿÉÇÃÿXqÿ%Qÿ&1Dÿ4=Eÿ==<ÿSSSÿBBBÿÿÿÿÿ,,,ÿ444ÿ%%%ÿ:::ÿQQQÿSSSݻȊ®áÔ˜¨ßÿ}ŠÿTQMÿ<98ÿ'''ÿÿÿ ÿ ÿ ÿÿÿÿÿ!"!ÿÿŒ‹ÿÕÐÎÿ¤©¯ÿB_~ÿ;GWÿNPTÿ9?Jÿ")2ÿefeÿIIHÿÿÿ ÿ$$$ÿ666ÿÿ+++ÿEEEÿYYYÿWWWqKciXiÆuuvÿ__\ÿBBBÿ***ÿÿÿÿÿÿÿ!!!ÿ))(ÿ00/ÿ)'%ÿXbiÿÞßâÿÛ×Óÿ…•¦ÿM]nÿFIPÿJOVÿdgoÿ48@ÿ468ÿXVWÿ1/0ÿÿÿ:::ÿ###ÿÿ888ÿPPPÿ___éXXXB“‘’ÿpnoÿRRRÿ666ÿ###ÿÿÿÿÿ&&&ÿ111ÿ:::ÿ=;5ÿZ^cÿ†«ÒÿžÂÞÿ±ÉÜÿ~ ¾ÿPXeÿIIIÿY\`ÿgipÿ05@ÿ*+0ÿÿÿ##"ÿ--,ÿ==<ÿÿ+**ÿBBBÿ\\\ÿ]]]{oooņ††ÿeeeÿJJJÿ444ÿ'''ÿ"""ÿ%%%ÿ,,,ÿ888ÿCCCÿMKHÿW\fÿ©·Ôÿ®Ãßÿ’¯ÐÿŒ¬Ìÿ‚¡Åÿc}§ÿAQoÿAFOÿAEJÿORZÿRTYÿÿ011ÿ///ÿGGGÿ'*.ÿÿ775ÿQQOÿiiiß```;;;ƒƒƒÁ}}}ÿcccÿNNNÿ===ÿ777ÿ888ÿAAAÿMMMÿZZ[ÿtqnÿ¨·Åÿ–­Ûÿ·¿Ïÿ£¯ÁÿŠ›³ÿvˆªÿ^t¤ÿA\žÿ6†ÿ2@^ÿFJPÿ8ÿKzÿ>”ÙÿsÆóÿsÃîÿq¾éÿqÀìÿuÆòÿkÅøÿd¬ÿ4CXÿ_SHÿ ÿÿ))'ÿ>;:ÿFIMí8BT³P[qÿmw†ÿQXhÿ$2Mÿ3@Wÿ^fwÿ,Pÿ:Á=—]]]ÿ¤¤¤q]\\ÔAA@ÿ-+*ÿÿ ÿ;kÿ>“Øÿ’æÿÿzØÿÿoÓÿÿnÔÿÿoÔÿÿqÔÿÿ‰ßÿÿxÒÿÿ]¦ÿ3Eÿÿÿ/..ÿLJIÿYWTÌ09D[ÈHVlÿ1@ZÿV_nÿ9G^ÿ"4UÿIVjÿ310ÿëüÿÿmmm²˜˜˜Ê–––?bbbZ___a``ËIB>ÿ4!ÿ,5ÿb£ÿÒÿeÊÿÿ[Çÿÿ5¶ÿÿ'±ÿÿ%¯ÿÿ&±ÿÿ-³ÿÿD¼ÿÿ\ÎÿÿD®ñÿ]«ÿ=]ÿ  ÿ5*#ÿKIIÿiih² Z6E]æck|ÿ1>\ÿ5DaÿGHKÿ20.ÿ111ÿvvvÿ···ÿÿÿ111ã^^^Љ‰‰û‚‚‚ m`YÃK?8ÿ\‚ÿ˜òÿ †ÜÿK·öÿ7¼ÿÿ®ÿÿ©ÿÿ ¨ÿÿ ¦ÿÿ §ÿÿ¨ÿÿ«ÿÿ&²ÿÿCÄÿÿ/“Ýÿ€Üÿs¬ÿ033ÿSC;ÿnji !'?&9[ö]fuÿQOKÿ,,,ÿ"""ÿ===ÿBBBÿ•••ÿ”””ÿÿÿÔa``¸{¸ÿ¬ÿÿ‚Úÿ/›áÿ/ºÿÿ¬ÿÿ¨ÿÿ ¦ÿÿ¦ÿÿ¥ÿÿ¥ÿÿ ¥ÿÿ ¦ÿÿ¨ÿÿ°ÿÿ3¶ÿÿs¿ÿ‘óÿ’âÿ:XiÿucY‹ BBD–rpnÿllkÿ:::ÿÿÿDDDÿLLLÿ¤¤¤ÿXXXÿh]Ž ˆÍç§ÿÿqÂÿvÃÿ´ÿÿ¬ÿÿ¨ÿÿ ¨ÿÿ¨ÿÿªÿÿ«ÿÿªÿÿ ©ÿÿ §ÿÿ §ÿÿ©ÿÿ²ÿÿ¡îÿa­ÿ—öÿœñÿr£œfge…¡¡¡ÿ°°°ÿSSSÿ%%%ÿÿÿKKKÿ+++ÿ+++¾§¢òÿtºÿn³ÿ¬úÿ°ÿÿ«ÿÿ«ÿÿ­ÿÿ¯ÿÿ°ÿÿ±ÿÿ±ÿÿ¯ÿÿ­ÿÿ©ÿÿ ¨ÿÿ«ÿÿ²ÿÿ“áÿr¾ÿ œòÿ›ñÿq°I‰ˆˆ4´´´ÿ¸¸¸ÿ£££ÿÿ+++ÿ+++ÿ###ÿ)))Ã8±òéD·óÿa³ßÿ_ÊþÿIÉÿÿ4ºÿÿ&³ÿÿ±ÿÿ$´ÿÿ+¸ÿÿ4¼ÿÿ7½ÿÿ4¼ÿÿ*¸ÿÿ ±ÿÿ¯ÿÿ¯ÿÿ%³ÿÿ2ºÿÿOÈÿÿUºñÿ9¯ðÿ°ÿÿ„Ñž•••¡¡¡íç©©©ü˜˜˜ÿ“““ÿ{{{ÿOOOÿ"""=„Ôþ”hÜÿÿ£øÿÿžõÿÿˆêÿÿvâÿÿQÍÿÿ0»ÿÿ2¼ÿÿCÄÿÿQÊÿÿXÌÿÿRÊÿÿCÃÿÿ3½ÿÿ6¼ÿÿCÀÿÿTËÿÿpÛÿÿ’éÿÿŸîÿÿjÚÿÿ"¸ÿÿ/£â_¶¶¶C×××ÑÑÑÑ•••ÿVVV✜œÿ¡¡¡ÿ<<>>ÿ***ÿÿIIIÿ»»»ÿÈÈÈÿ{{{ÿÿÿÿÿ¦¦¦ÿ÷÷÷ÿõõõÿÌÌÌÿ555ÿ(((ÿRRRÿlllÛbbb,[[[ÿHHHÿ444ÿ###ÿÿÿÿÿÿÿÿÿÿYYYÿnnnÿ%%%ÿÿ===ÿYYYÿjjj€aaa«TTTÿ???ÿ000ÿ"""ÿÿÿ ÿ ÿ ÿ ÿ ÿÿÿÿ ÿ888ÿKKKÿ```õlllccc___ïPPPÿ???ÿ111ÿ&&&ÿÿÿÿÿÿÿÿ!!!ÿ,,,ÿ888ÿHHHÿZZZÿcccqeee;cccüVVVÿFFFÿ999ÿ///ÿ)))ÿ&&&ÿ%%%ÿ&&&ÿ(((ÿ,,,ÿ333ÿ<<<ÿJJJÿ\\\ÿccc¬iii,kkkÐcccÿVVVÿJJJÿCCCÿ>>>ÿ>>>ÿ???ÿ@@@ÿGGGÿNNNÿZZZÿeeeÿkkk–lllooobnnnÑhhhÿaaaÿ]]]ÿ[[[ÿ\\\ÿ^^^ÿeeeÿjjjÿooo¾nnn?ppppppHoooŠooo¾nnnÑnnnÒoooÀqqq‰pppAoooÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø?ÿÿø?ÿÿüÿÿÿÿÿÿÿÀÿÿÿÿ€ÿÿÿþÿÿÿüÿÿÿøÿÿÿðÿÿÿàÿÿÿàÿÿÿÀÿÿÿÀÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿÀÿÿÿÀÿÿÿàÿÿÿðÿÿÿøÿÿÿøÿÿÿüÿÿÿþÿÿÿÿ€ÿÿÿÿÀÿÿÿÿø?ÿÿÿøÿÿøÿÿøÿÿø€ÿÿøÀÿÿøàÿÿððÿÿððÿÿðð?ÿÿøü?ÿÿø?þÿÿÿø?ÿÿÿÿø?ÿÿÿÿø?ÿÿÿÿø?ÿÿÿÿø?ÿÿÿÿø?ÿÿÿÿø?ÿÿÿÿø?ÿÿÿÿü?ÿÿÿÿüÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿàÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿ(0`    !%)+/2466640.*($!  &6BMU_n|‚|vqqpnoph[OF=4*!   5 \!‚ –£"5½*?Î"Í Ê%Ù;Zó4NöÛ»¯§©² Í 0ä#4Ü ½¬ ²³›}q\B*  '4"4† —ßÿz¶ÿGmùxµÿ€Ãÿc•ÿ:XÿJqÿd—ÿT€ÿ?bÿ áżÀ Ú8UþUÿe™ÿ@bû+A÷T€ÿu±ÿl¢ü-DêZ†ñx¬è/z.%  $+ >Fg– •àø ŽÙÿr®ÿn§ÿ`”ÿIpÿ<\ÿIoÿDgÿ:Xÿ$6úÙÎÕ 1õ>`ÿIqÿR~ÿCgÿKrÿg›ÿxµÿs¯ÿƒÇÿ ¥úÿn¡½ D($  #$TNx¬c’Ý[…ûIlÿ9Yÿ,Bÿ &6ÿ#,ÿ!ÿ!ÿÿþþ"$ÿ#(ÿ*3ÿ-<ÿ /Cÿ?`ÿS€ÿd˜ÿo©ÿq¬Þ5P|&!   1CHqØFdü')ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿ#ÿ&"ÿ")+ÿ:NÿCeÁNxf &    5V|<•Ú.—ë $}ò3Œý3wÿ%8ÿ ÿÿ ÿ ÿÿÿÿÿÿÿÿÿ$ ÿ-&$ÿ)&%Ê $Elu$Gƒ·4«ÿ1§ÿ2Ÿÿ^q˜ÿdužÿ%˜ÿ)ÿ1Wÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿ"! ÿ0.-ÿ41/ê(((Hk©¶5d¨Á*¬ÿI©ÿi}—ÿ(h­ÿ4}Âÿ4m·ÿF¥ÿqxÿ=X¥ÿ0eÿÿÿ ÿÿÿ ÿÿÿÿ ÿÿÿ###ÿ333ÿ<<<áWWW*Dy²‹# ÿC¶ÿnÆÿn™ºÿ+‹Íÿ k·ÿ.bžÿbºÿf‘¼ÿ+S­ÿ&¡ÿ$4Hÿ:6-ÿ[[[ÿqqqÿ|||ÿ~~~ÿrrrÿVVVÿ)))ÿÿÿÿÿ***ÿ???ÿTTT©]˜­62žî1¬ÿ jËÿyÑÿŠØÿ†Úÿ@†¼ÿ‰ ®ÿƒÍÿgÏÿM—ÿ1OŠÿ ;sÿUSLÿjiiÿ~~~ÿŽŽŽÿš››ÿ£¤¤ÿ¨¨¨ÿ   ÿlllÿÿÿÿÿ,,,ÿHHHü]]].e ­>>K…¾Y7¶ÿZÈÿˆÖÿšÙÿ ‹Øÿy¾ÿŠ–œÿJ‘¦ÿfˆÿ)L\ÿYQNÿ`dcÿnz|ÿXbcÿ˜¤ ÿ“§¸ÿ ,žÿÀÿ·ÿ'?¢ÿjuvÿb`]ÿNOOÿ555ÿÿÿÿÿÿ;;;ÑMMMO‚Á]?ºÿjÎÿ2”Ùÿ5–ÙÿŒÙÿaœÀÿ€§¯ÿ$l‰ÿ#7Aÿ!ÿHBAÿUY\ÿ%*ÿÿKLLÿÙÛÐÿµÂÐÿ"¢ÿ.ªÿEU}ÿW\\ÿNLKÿ>>>ÿÿÿÿÿÿÿ???ÇOOOaœÃH$QÃÿ7wÖÿYšÙÿb¢Ýÿ\¦ßÿ`©Ïÿ<†£ÿ&BOÿ"ÿ ÿÿ4?Eÿÿÿÿƒ„„ÿíêÚÿ—¬Õÿ8Qmÿ`ZDÿLJHÿDDDÿ+++ÿ ÿÿÿÿÿ***ÿKKK›z´ÍR~ÐÙYÖÿ‡«àÿ™Àêÿ‹²ÏÿWw‡ÿ2>Dÿ ÿÿ ÿÿ ÿ  ÿÿ&''ÿ¤£¢ÿ¸¸·ÿ ¸ÿ:FQÿLHCÿEEEÿ@@@ÿÿÿÿÿ---ÿ111ÿGGGÿSSSU€®Ôiz’ßÿ¬¿ïÿš«Àÿ]adÿ/+'ÿÿÿ ÿ ÿ ÿ ÿÿÿRQQÿÕÒÎÿw‰ÿ/Wÿ/9Fÿ>@?ÿRRRÿ,,,ÿÿÿÿ333ÿ,,,ÿEEEÿTTTåSSS ‚¥ÊˆŒšÄûihfÿ=96ÿ"!!ÿÿ ÿ ÿ ÿÿÿÿ&$"ÿ³¬¨ÿÇÅÅÿRi‚ÿ8CQÿILTÿ/5>ÿZZZÿ877ÿÿÿ111ÿ!!!ÿ///ÿSSSÿZZZ‚INQž}{zÿMMMÿ+++ÿÿÿÿÿ'''ÿ220ÿ640ÿh{ŽÿËÜéÿ¨ºÊÿSbqÿGGIÿcflÿ@CMÿ+,/ÿ/./ÿÿ**)ÿ...ÿÿAAAÿ]]]èZZZ&'$!2……†ñkkkÿAAAÿ)))ÿÿ"""ÿ...ÿ??>ÿKJHÿwÿ¬Ääÿ•¶×ÿŒ­Îÿe}¢ÿDNdÿFKRÿIMUÿ67=ÿÿ111ÿ>?@ÿÿ,+)ÿYYVÿiih|cccO„„„ìeeeÿHHHÿ:::ÿ<<<ÿNNNÿ[ZZÿzywÿ¨»×ÿ¦³Òÿžª»ÿ€«ÿdu¡ÿ4M—ÿ*?wÿKQUÿ(,2ÿ114ÿRPNÿJMSÿ'1Gÿ49CÿQQSÒSQR9yyyÎlllÿ[[[ÿ^^^ÿiiiÿ<<=ÿ-+(ÿ¥©©ÿ~®ÿgn‹ÿ]^qÿ?Faÿ-:eÿ^frÿusmÿDGJÿGHJÿccdÿbfqÿekyÿ*5Nÿ,Aß etttxxx‡|||µiiiéBBBÿÿÿkjgÿ™•ÿEMZÿ -eÿ1yÿ;yÿ-D^ÿngaÿ‹‡ƒÿ\][ÿ#)ÿBL^ÿPXjÿ&2Iÿ^guÿ^fyÿ)0AÆ $I#6{{{```z???ÿ$%%ÿÿC;6ÿhggÿQ‰ÿQšÿHŒÿIÿPœÿ$GtÿwohÿJHDÿÿ')*ÿ7?Nþ@J_ý†Œ—ÿ†‘ÿ;F]ÿ%3Oý$.B¬/2TTTM‡‡‡ccc;MNMû.--ÿÿÿ*f›ÿpÉöÿÚÿÿzÕüÿ{Öþÿ†ßÿÿUªãÿ%Jrÿ'ÿ ÿ10/ÿNLIö9APp/9Q¢U`rÿ3@YÿJTfÿ6Ebÿ$4Pó###–yÌNNNõŸŸŸy›››,bbbgca*XQMò6$ÿ-=ÿ\ ÿPµôÿhÓÿÿ<¼ÿÿ4¹ÿÿ5ºÿÿIÀÿÿgÖÿÿ-’Úÿ=nÿÿ:+"ÿ][Zæ[]a +&0FP.;QÑU_sÿ/?`ÿELVÿ-+)ÿCCDÿ„„„ÿú,,,ó___Ì{{{®uuu``a&\PKéhÿæÿ0¤îÿ<¿ÿÿ¬ÿÿ ¦ÿÿ¤ÿÿ¥ÿÿ§ÿÿ ²ÿÿ>½üÿ‰Ýÿu¼ÿ,FRÿhUKÕyg^&@w:E[Ý]\Zÿ11/ÿ)))ÿEEEÿƒƒƒÿUUUÿÿž]‰+ †¿ó”íÿƒÔÿ'²øÿ¬ÿÿ §ÿÿ §ÿÿ §ÿÿ §ÿÿ ¦ÿÿ ¦ÿÿ²ÿÿ$¡ëÿ{Ôÿ”ëÿ5pŽÏEi}hhe°ŒŒ‹ÿSSSÿÿ!!!ÿ\\\ÿYYYÿ6u±ƒÆ¡”æÿo¹ÿ íÿ¯ÿÿ©ÿÿ¬ÿÿ®ÿÿ°ÿÿ°ÿÿ¬ÿÿ¨ÿÿ §ÿÿ±ÿÿÙÿ ƒØÿžööxÀbˆ‡†/µµµý¬¬¬ÿzzzÿ'''ÿ$$$ÿ'''Õ---H¹õD¼ùå]ÂïÿrÐõÿTÓÿÿ7¿ÿÿ#³ÿÿ&µÿÿ3¼ÿÿ;¿ÿÿ6½ÿÿ'¶ÿÿ ±ÿÿ#±ÿÿ5¾ÿÿ[ÏÿÿcÃñÿ(·ÿÿ“௠ˆÑ¡  !ªªªå£££éÿ”””ÿhhhö&&&S…ØÿhŒÞðû ñýÿåùÿlÔöÿ4Áÿÿ:ÀÿÿaÑÿÿnÕÿÿfÔÿÿJÇþÿ>ÁÿÿQÉÿÿgÑøÿ”ìÿÿ™òÿÿ^Ïüë2ªëLººº!ÜÜÜ^ÊÊʺ}}}äþfffw”šžtvwíKW\ÿ08<ÿeptÿ‡ÌêÿE¿öÿ~Øöÿ¦ñÿÿîÿÿSÃñÿ\ÂóÿÃçõÿ §ÿ6KQÿNgpÿ—œ¬ÜÜÜ&ÎÎÎ~”””mTTTojg+WSQï ÿÿË¿ÿÿóíÿºÖãÿ†Úúÿƒä÷ÿzÞñÿ‹ÒòÿÙÛÞÿÿüõÿëäàÿ5,*ÿ%ÿg_[Ÿhhh+[[[ñ ÿ```ÿÿÿÿÿЉ‰ÿla]ÿÂÇÉÿŸ¬ÿIcnÿÏÇÄÿkdaÿ‰‰‰ÿúúûÿ†††ÿ***ÿcdd˜lll,^^^ñ!!!ÿˆˆˆÿØØØÿÿ ÿ™–”ÿÀ¶³ÿd[Yÿ“ÿÿ###ÿ×××ÿ±±±ÿ222ÿiii‘mmm,___ò&&&ÿdddÿÿÿÿÿÿˆˆˆÿÞÞÞÿÿMNMÿÜÝÝÿ„„„ÿ’’’ÿüüüÿ˜˜˜ÿ666ÿmmmlll*```ï333ÿ###ÿÓÓÓÿÿÿÿÿÿÿÿÿ÷÷÷ÿ333ÿÿåååÿ÷÷÷ÿøøøÿûûûÿ\\\ÿ@@@ÿoooˆeee]]]ÓBBBÿÿ666ÿ···ÿÍÍÍÿYYYÿÿÿ___ÿôôôÿøøøÿÿ###ÿTTTÿpppq```ŽNNNÿ333ÿÿÿ ÿÿÿÿÿ;;;ÿPPPÿÿ666ÿ___ìlll,ccc#\\\åEEEÿ000ÿÿÿÿÿÿÿ ÿÿ555ÿQQQÿeee”eeeN^^^÷KKKÿ888ÿ+++ÿ###ÿ!!!ÿ"""ÿ'''ÿ///ÿ===ÿRRRÿaaaÅeeejjjAjjjÇ]]]ÿOOOÿFFFÿCCCÿDDDÿIIIÿSSSÿ```øjjj«eeeooo qqqcnnn®iiiÝfffõgggökkkÞoooªpppPqqqqqq]ooonnn½nnn¾pppžqqqXpppÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÀ?ÿÿ€ÿÿÀÿÿðÿÿüÿÿðÿÿÀ?ÿÿ€ÿÿÿÿÿþÿþÿþÿþÿþÿþÿþÿÿÿÿÿÿ€ÿÿÀ?ÿÿà?ÿÿð?ÿÿøÿÿÿÿÿÿ€Ÿÿÿàÿÿøÿÿüÿþþÿþ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÀÿÿÿÿàÿÿÿÿøÿÿÿÿü?ÿÿ( @    /?IYkkcb`^_PA6(  .#57Q¶!3ÃFjÙ':Û#5âGkù)?í®±Ô6Qì#5ÖÄ0HÉ!2°›!1~6  (*>t ‡ÉðÅÿ|¼ÿ]ÿEkÿS}ÿCeÿ!íÌ Ú4PÿX†ÿLvÿMuÿz¸ÿv³ÿ ŠÐÿZ„®1  +D^„ X~ãE`ÿ%1ÿ%ÿ ÿÿýþ"&ÿ&-ÿ+7ÿ @\ÿ[‹ñe›È8Vq   2<%i 0zà8vþ5ÿ ÿ ÿÿÿÿÿÿ!ÿ&$"ÿ!09Õ'%3Wi9 öD¨ÿ=d§ÿ9[§ÿ:“ÿ 3Vÿÿÿÿÿÿÿ ÿÿ+&#ý30-Ç##$^›ÁI 7­ùXºÿV¸ÿ!z¿ÿ%a¬ÿL|´ÿ&L¬ÿ Lÿ1.&ÿQQQÿ^^^ÿUUUÿ666ÿ ÿÿÿ222ÿ[[[¨j§µ F¢ÅA¸ÿ €ÔÿÜÿÅÿI–ÀÿsÏÿ7b›ÿ9R~ÿOOOÿwvvÿ‘ÿ¢££ÿ©©©ÿˆˆˆÿ!!!ÿÿÿ888ýWWW5S‰®I4®ûkÌÿ –ÙÿŠ×ÿ:…µÿ¢ÜÿÀÿ´³ÿ‘¬²ÿ=IPÿDA:ÿdcUÿ†„zÿžœœÿ©©ªÿkkkÿÿÿ$$$ÿ===q>r¶@¾ÿ †Õÿ•Ûÿz¾ÿw¨ÿ€«ÿ>dyÿ™˜ÿ–ªªÿ—ÿ:zÿ':ÿP[†ÿ~ÿkkkÿAAAÿÿÿÿ===Œ5g¼‘ TÆÿ*”ÙÿÚÿ_ÀÿN‡™ÿ8DÿC=9ÿNRTÿ!"ÿƒ†€ÿ™©Îÿ "¸ÿ*?–ÿ[_\ÿGEDÿÿÿÿ ÿBBBT‰Åx7kÑÿj¤ßÿs²åÿZ—´ÿ)FRÿ ÿÿ"ÿÿ555ÿØÖÌÿ~“³ÿHLIÿLIEÿ---ÿÿÿÿ,,,ÿNNNcy°Ï'v–Ý䤹éÿ{Š–ÿ345ÿÿ ÿÿ ÿÿrojÿ¤¬·ÿ9Lgÿ@H{{{zzzhuuuÁdddõ&&'ÿ.-+ÿ‘ÿ>Hdÿ+dÿ6gÿb`bÿtoiÿ>AEÿPWgÿ|¶ÿ=q£ÿYWXÿ ÿ),1ÿ>GXát{ŠøP\pÿ,9Qî&?ƒ%Eeeedžžžh_Zi>1'ÿ '=ÿ1…¿ÿh×ÿÿPÌÿÿWÏÿÿbÑÿÿ gžÿ!ÿE6*ÿTRUd#=95@UÁFSlÿ7CXÿ&&$âHHHó@@@úeee²tttWL\g^ l—ÿ‘äÿ2ºÿÿ¬ÿÿ£ÿÿ¤ÿÿ²ÿÿ+°ûÿwÆÿ.\vþha]H'&>gQRUÝHGEÿ889ÿXXXÿ888ÿ)))cx· ‚Ƨ‰ÛÿŸíÿ­ÿÿ©ÿÿ¬ÿÿ«ÿÿ ¦ÿÿ­þÿ–èÿŽåþ¼~a_^?ªªªÿeeeÿ+++ÿ;;;ç###@¹úYÊÿÐ~Ýýÿeßÿÿ(ºÿÿ.ºÿÿHÅÿÿ>Áÿÿ&¶ÿÿ+¹ÿÿhÜÿÿf×ÿÿ¦ó±ŠÙ«©¨½½½Åšššÿþ333g¨³ll‰ÿWtzÿs¾Þÿ[Ñÿÿ‘êÿÿ|âÿÿ]ÌÿÿŸÙïÿcŠ’ÿr–œõP¨×FÁ¿¾ßßß$ÁÁÁyHHHldae$ÿ]TQÿèÜØÿ¥ÂÎÿ†Ñãÿ|ÂÕÿµÂÊÿìéãÿzpnÿ2'%êige(iiii111ÿ«««ÿmllÿHA>ÿ®¬­ÿƒ~~ÿOIFÿpppÿÁÂÂÿBCCæiii(lllk222ÿ‰‰‰ÿÈÈÈÿ½½½ÿ˜•”ÿtsqÿ¼½½ÿÉÈÈÿ±±±ÿFFFäqqq&gggYAAAÿ'''ÿ···ÿÌÌÌÿ%%%ÿÿâââÿïïïÿSSSÿPPPÞsssdddXXXÚ)))ÿ ÿ ÿÿÿ###ÿ666ÿ000ÿeee¡nnndddYTTTù444ÿÿÿÿÿ333ÿZZZÞggg%lllKfffÂWWWñNNNÿPPPÿZZZïhhh´ggg/sssrrrnnnÃpppÄsss{qqq ÿÿÿÿÿÿÿÿüÿþÿÿÿÿþÿüÿøÿøÿððøÿøÿüÿþÿþÿÿ€ÿÿÀ?ÿàÿàƒÿÀÃÿÀÇÿàïÿàÿÿàÿÿàÿÿàÿÿàÿÿðÿÿøÿÿþÿ(0  "   8!e~&‘Ÿ 1· £ŠŒ¤š ƒuZ @ Od•Õu¯þf˜ÿCfÿR{ÿ)=÷Ñ ßCfÿIpÿKsým¦ÿn¥ø<7ÿLLMÿ::;ÿÿÿ)'%ÿNKI£]”·= @´ówÒÿ Öÿ1ŽÅÿ†ÐÿJu©ÿFTgÿfbYÿ’‘†ÿ¨§¤ÿ•”•ÿ***ÿ ÿ444ûTTT76f°ˆSÄÿ”Üÿ#†Âÿ<˜¾ÿ"¬ÿ¢´±ÿ„›ÿ-;UÿFNkÿ‚ƒˆÿ••“ÿLLLÿÿÿ;;;i(\¼¨oÏÿ!šàÿXœÁÿ9iwÿ7@CÿMQQÿ]d_ÿ€‘ºÿ3´ÿKVxÿTRJÿÿÿ ÿ@@@tQ„ȉ]àÿ}³àÿMxŒÿÿ ÿ ÿÿ´µ³ÿj{šÿFFDÿ-,*ÿÿÿ///ýOOOH}±Ö%“ªÚÓprxÿÿÿ ÿÿ]ZVÿ–Ÿ¨ÿ8ESÿFGIÿÿÿ000ÿQQQÎUUU o‚•D]XRñ)((ÿÿ++)ÿTX\ÿ¥ºÐÿ„™²ÿEL\ÿ7;Bÿ&&&ÿ'(*ÿ;:9übaaYnnm_hiiìNNNÿJHGÿ~„‹ÿ—¤»ÿN[‚ÿ8FpÿNLLÿKLMÿKR`ÿ7>MáHIM6‚‚-sts“+++û2'ÿYhzÿI†ÿ-V‰ÿeiqÿ=61ÿ4;IýS]pþFN_ç%=€,tts sqo+=3*ä-DÿJ£ÓÿRÅúÿTÅûÿB”Æÿ-ÿA3*âFCP`:DZ¸?Mgÿ%+5Õ-,*ËUUUÓsssktttBh‘, e“å–èÿ ¶ÿÿªÿÿ ­ÿÿ´ÿÿ€Òÿ.d…Ú6Qh&9g[[YèJJJÿAAAÿ000¯+++`#¡ãcBºøÿ6Ãÿÿ°ÿÿ'µÿÿ!²ÿÿ­ÿÿ5¿ÿÿ-³÷ö”æK¦¤¢ˆ‘‘‘ÿMMMú)))S!!!h¸â=} ¤íc™§ÿcÎúÿwâÿÿjÚÿÿvÖÿÿy­¸ÿk¦·Ü"˜Û(ÑÏÎ ÆÆÆ˜xxx{pki'90,âƒwsÿ©­¯ÿ‹¿Ëÿƒ°½ÿ´µ´ÿ™ŠÿD<9¾ikkmnm-CDDåœÿ‡…ƒÿž–”ÿƒ|yÿˆ…„ÿ´´´ÿUVU½onmkkk$AAAàTTTÿÓÓÓÿVUTÿOPOÿôôôÿÿRRR¸uuu\\\Ÿ)))ÿÿÿÿ222ÿ999ÿeeenfff```±BBBú444ÿ555ÿ@@@ø___–jjjooosssglllÈnnnÇttt^jjjÿÿÿþÿøüøð?ð?à?à?à?ð?øüþÿƒÿáÿãÿ÷ÿÿÿÿÿÿÿÿÿÿÿçÿ(   ,<311  !:SšaŒìCa÷ENÿ&$#ÿ"""ÿXVU”pnn&njfÈGA<ÿ|}ÿXf•ÿ:>^ÿSG?ÿDJZÿHMZš 7A0'»7JÿB£ÞÿJ¨àÿ,;Jÿ>+(ÉJGY¿&1Hà ecbyyy3 ·¾¯ÿÿ »ÿÿ»ÿÿŸöÿ#v¨¨/4Cxnlgÿ777ÿ%%%[Q¸ïd¯ÍÍVµ×ÿWÛÿÿVÙÿÿiÄæÿ=¬Þ¸ÖÓϦXXW…TB7°˜†~ÿ¥¼¾ÿœ®¯ÿ¯”ÿYPH…HFE¶†„‚ÿ‚wtÿ‚xuÿ¯­¬ÿ[ZXˆaa`S///ÿÿÿBBBÿhhh5mmmF```Ì___Éiii9ÿÿàðàÀÀÀàðøøøøøü?þtuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/icon.png0000644000175000017500000003631511273045225023117 0ustar julianjulian‰PNG  IHDR``â˜w8 pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF1êIDATxÚì½y”[×uæû;wÄÅTj"«XœgŠ©yže–§¶ÓNb·cÇÃËK^Úé~yÏÏí Ž­Ä§ÓZi{ÅÃJ"Çq'±9’âH‘,K”¬‰2ÅQœŠ,Ö\…BaÆÎyKEJÔœ^ÁZgáê¸Øß>{{Ÿ}öJ)þýñÖ=´Á[û0~ý×ý-¿!®ë"¥DÓ4t]GÓÚúa !Ö!v(¥®¶(¥ú  !*À”âyà~¥Ô.¥Ô0 ”RH)‘Râº.a¾.×ëy7ÝtÛ¶m£V«áº.®ë²wï^ÆÆÆ(•J<ðÀŒö3”RMÞÆ>!Ä”R Ãp{†"Â0DJ‰R !Bˆ¬¦iC†a\ ëúGu]÷…ÿ|øg@½­gÀÛí!„ÐOJ)?Á2Ïóp]ÏóˆPJu€¦i†aX–eÚ¶}›iš· !îþ3päßxfH1¤”ú–ïû×4 êõz{z{žG†m:ß§ë:º®c¦ibÛ6±X Çqn3 ã MÓþðoKÞ.LH)µ1 Ãò}M½^§V«Ñh4h4xž‡ïûAÐ6? ¡iZ{Dضã8$‰.Û¶ÿøyàïÞv”J¥·ƒö/B|ß÷ý5Õj•Z­F½^?e,´ÿgÀó¼SLV"‘0ÇùsMÓŽ)¥ž}Íô±E^„oíÿSÏó6Öj5*•J[øÑ ð}ß÷ÛŒf1"3dšæéÀJÄb±¯ëº~à¾VsÇ_³õ0LÓ|Kí~õ<ïŽz½ÎBío4¸®ûó³€N?Ðé¨;Ïiùˆóâñø¶,ëK¯VxRJÇ¡«« )å¿m',¥t‚ ø/žçµµ½s¸®K½^Çó¼6wî °¦iA€ïû躎mÛÔëõ6SÒ4 Ó4‰Åb(¥>©”ú†RjîÕpÞyç‘L&_‚ x+MÏÂ0ÜQ͈íD€ lÛ&‘H0??ßðbf3 C.½ôRÞÿþ÷“Ífyì±Çxøá‡©T*§ø…0 W…ax»Rê[g{½AÐÛÛ˺uëh4X–õoÛ(¥nðÍr¢Q«Õ‚€_üÅ_ä–[n!•Jñ /ðÝï~—Ç{¬mV:gÅ'?ùI~ó7Ó4‘Rrýõ×sýõ×óÅ/~‘Z­F,k›1]×ß|ëÕhÿêÕ«1M“F£ñú8áŽÿÍ~t !®’R¶ù}ÀþáòÞ÷¾—r¹LµZeÕªUÜpà |éK_âî»ï>Å Ýpà |æ3Ÿikydv®»î:¤”|þóŸoû†V:b‡"TÏBYˆÇã¬_¿þuKi†ñÖ¸!D_}Ñ‹NµZåWõWùÈG>B±X$‹¡ë:¾ïð{¿÷{>|˜Ç¼M ?ýéOc¾ïcYV›)¥xç;ßÉ#<ÂSO=EWWWä ãš¦%”RÕ³1?kÖ¬!™L¾¾¼|öU—R޵Ñh°qãF>ýéO#¥$‘H`FÛtT«UlÛæ³Ÿý,·ÝvW]u]taÒÛÛÛÌÞYVÛ·¥R)n»í6üqÂ0Œ>Ë2 Ã9í·,‹M›6½®ë[j‚„f§ —RÒh4¸üòËI&“T*þìÏþŒ0 Ù´i7Üp—_~9ëÖ­ãðáÃ\ýõôôôP­VùÇüG&''I¥R¼ï}ï#›Í°mÛ6ººº:c °ÎFû×®]K.—# Ã×Íoj ¹ô›<ôNíWJ¡iW]uUû?üásçw²~ýz~ðƒpçwbY]]]\~ùå ðå/™/}éKìØ±ƒûî»O|âíY088ÈÀÀ@;Ÿ$¥4^)J) Ãxݵ¿ À[™è ¬Â0Ķm–/_ÀÃ?Ì~ô#2™ ?üá9tèßýîw™žž`íÚµd2J¥ßúV“ÔÜsÏ=Ôj5vîÜÉÏ~ö3¢`3•Jáû~€¦”zE¨ïû¬X±‚ÞÞÞ×Íö¿-1ÕR§Èüt¦˜\×%›Í’L&yî¹çðÏääd›Ë·À‹½Û¿dÉ’SÀüßi=@F‚´ßó<}ôQ®»î:4MãóŸÿ<÷ß?õzîî^¶n¿€ÒÔ~’ŒpÃ9%úÕjÒŒ061͇?ò1–/"ŸŸ#›ÍrË-·Çq]—ýû÷sòäIººº:ãä+q¦7n|cÓѵZí-‘¾®ëa'ÿoE¨<úè£ÌÌÌ ¥Ä4MÞ÷¾÷Qm„T‹ÓdÜè·aXð‰_Úâ\d±@~în¦Œ¸éÖ÷àXw‚R©D,ã©§ž¢Z­’J¥:ƒ¾ä™ÌJ,_¾œÁÁÁ×ÝöŸÀ{ßûÞ7!Â0–;wî<åõX,ÆóÏ?Ï·¿ým>øÁ’Ÿ›§Z—˜î6:àÄ|Dbì4J"œ$Y÷]þ786ñÊÉ I&GOÌáÕçÒgÊDk§¾”Ã0¶ô÷÷rxxøžùùù÷öö^´dÉ’¯ŒŒüKµZ=ñ¶ §ŸÜñïÑõeñˆd*w à ¦Yši@cT´ˆAªæ{Üýé„B[›Ã®=ÎÖ~‡­¿ºŒX] Ùà`¶Bqü÷&~`-½rÿb×W,•ÚÁá)ÔQÓ„”Ò(‹þòåË_Ó´w:t¨§P(|}zzúÓ–e}½««ë õzýsëׯ×[4:\láë-ÀøúøèW¿™ÚNWóR‚:!øuð+PŸojº_æ;H At;RCàUÀ¯‚ Ak€3R@¨¥C\Gj4t4iÓeÌ®,íüÄߌ‰W+N² ˜Î¼ÏÞDP+Ÿ§Äb±wmÚ´é.×uÍuÝéP,ß166v,‹±fÍFGGó²Ë.ûi.—»×²,Ý4ÍE㈷Ô|í¿&ô|,¬T œE×p‹àÁ-5Ÿý„.­93¤ß´f6°”Íÿu@„ÙôfŒ8ØY(a6æÑ«S?Àp§¶Ž¼£îqw§ÉvtøöóÃÓ×rþ¹Ûë¿J)t]wkµÚò•+W~m÷îÝ¿üøq955Õ=33Óýîw¿››nº‰?ú£?²Ö¬Yó·Ï>ûìFGGï+•Jhšö¿ ”Røõ›™C)AþŸ?ðdF¿¨à/¥PµèÉYôdBtY¯ÜÔú°Ñ: 4 „ºÙ¾Ö²ÛJ6Ï =ý–ù’Í÷£y®n™D™iª Ò|™¸V$¡©”Ëì=î~¢æñ ­%›d ž>¦ø¿ô%8ŽÃM7ÝÄ­·ÞJ­VÃ4Í´Rê/”Rï©Õj^6›5ßõ®w‰o|ãÌÌÌà8ûöí‹›Ù»wïçž{îȦM›Ú)r€;ï¼³9¾ÿ»ç¾©3 ”Яí>o­s‘ô\Æø,‡l^o³a¥@S^KÛC@F» B¨7ÛšÔ2K*l ?lý­šç­y¾_%_œåàáñXÀÊ¥ŠÐò˜È{sSEù°B!€„-Øù‚ä ? [_]¯×¹÷Þ{Y¹r%+V¬¸)›Í¾§¯¯C‡Yù|ž‰‰ ¤”ìÚµ‹Z­†aQ`Ù»lÙ²O~ìcû¬®ë/¡©ÀÌäÉ79ÿó†qg—U׆evß¶UŽx<þ˜¦X»Ro _Ê&JA‡@µPªyŽ”MÍW¥ 4Ð(•B},O6²bÈ n„LÌz—ŸuD`‚gŽ þè>E±öÒ„Ü?üÃ?ð|€T*µÎ÷}®¼òJ‰÷ß?wÝuh'û<Ï£V«EAî/?ôÐCÿã‚ .ÈG«}§˜ ¯~ªï­Ha™Æ;·VïÙ2àûÓyÇuý¤“aÓ¬DZMˬD‘UóuÕ©Y¢5cšæJ ‡)6æ¹ú"S96#¸gäâ§æÂ%똦Á‘cÇù»ûžÅ O»~Á 7Ü>÷ÜsŸèîîÞU^ìÞ½›£G¶SQ%ǺuëXºt)=ôRÊ+‰ÄÎNG<<<Üœ‡¬÷¿%LÈ—úžƒÇŽyw4¶.ZQgÇÇl°ç`K/DÓÊÔ@zMç«Â ‡S‹žEKð-“£ÅšLÉJ²ÿ@ražw\&05ŸÇø»#QŠmÓ“q«••Ôøç'vžVø1]C+V^ÓÓÛûE!ÄæÙÙYjµGebb‚ N)‹Éd2|èCâÚk¯åæ›ofxxø†B¡°s¡6Be¼̦U«£ÎÆ+kÒ]ª}u÷eŒÌïâöÍslZ¥ñ̾iécË–¥Ð˜kÒΠÒ}Ññ}—h™#­é˜… z ¬³{på‰p÷“~pd3Äûpqa˜¦ìÚõ ùÙÉE¯³ßfÇŽ¹/n»ñú›ÇËž˜œœÄó<Ž=J>ŸÇ4M„tuu±nÝ:>ûÙÏr×]wñÇüÇ|ÿûßgzzMÓ~NJù?t]/¿€jµüÚ͉eaÛöK*—Ï”ìBX†ðô¼ç«Oof×ÈQ>zñ$›W)ž>xˆÞ¥WÒ׳¤8iU[ÌHµ˜Î)ŽÖÍj ?Fœ€O?¹—-+|Áç¾ßÃãcCd36½I0 €955<ñÄ/¹¾Ážîeë{ìÏ-ëÍ}ذXyì˜ÔÓþ±'¬™éi¤”d³Y²Ùl»îHA>Ÿ§^¯³oß>öìÙ­àm~>ŸÏ­sßùÎw^3‰DÇq¸øâ‹éíí=¥vÿ a(t„Püð@;è|ì’®^Ñ`Ï“Ïsé;.'žH59¾›‡ Ü4I*ì ¢›˜é&†Ås'(M°Û7øòw³ŒW3ôåB4ÂP"¥L躞xòÉ'ë®ûb©h R뺭O]zé9Ÿ\wNöÐs?Ej&ù‰QmI¦O«Õë2Nk]]]äóy<Ïã›ßü&<òÿøÇùÑ~D­V#•JÑßßÿðºuë¶_ýõÙz½>tðàÁSRF´òôš#[Ï£P(P¯×Û³ ³4DÓ4¤” I¶W§dHÌ7øÍïuqëæ2ïY=ÅS?ÙËÕï¹a8PŸw¦„í¸¢9¬fª!ÖÂgdï^ö<½Ÿƒ^Н=¦¡:¹t€j¥½Ã0DÓ´ÜáÇŽ92 ã¢-ë>Øg‡ÿ-ÛÓ³¹^«Ss]â]Ýä'F0t“ù‘CúÆ5kÂgž{^ ‚˲˜››ãî»ïæÈ‘æb±è/[¶lüøÀŠË/¿üwíÚõÄôôôÿW,g»»»ßÜH82A¶m£”¢^¯wþ¯§³ŠYJ‰©…˜Bñ7?Õ)ƒ¼»:LÏS{9çÚ+%`e›&¨í„Å‹~@³ÁNPšá¡{ŸfŸ?È#³Ë‚½$­°Cø­ïcããëçãâÒ5}]w^vÅ¥×TËeòSc®Ëø‘ ¬ÙÈìè0J7¨WË¢W¸FwOÇ—à ˜¬T*Ý_øÂrRJÒé4ùÈGÂU«VýÚÌÌÌW:tâC###÷麾káVãͤñxMÓ(•J´‚’‹:+⚣Éý3¤doágæzÜûB:“`ùöõ LÀìÄ:Ù©Ä›ãž?¿‡çæºワ%=ŽâáA@Jê —¾Lú¶Û/Ùv£ƒÿ‰­—]ÍØÈ ºú—áž8 JRÊÏÐÕ»”%«Ö39üÒ­qìÙãõØWÇÇÆþÒ¶íQ]×{5MûlÛ~ßµ×^Û¿~ýú˜eYbÿþý[¦§§cÙlÃ0v !^RÒb¼ÙÜ?•JEåƒ"‚ë£À%ZÌRŽã°fÅv’ý~ˆ÷?³ü±°’]!¸n€ï‡˜¦ŽiX–NÌRœnšf9‚r§À¥¡o&BÇÁ÷ýó}ßßãv‚Ùl–¾¾f€X²vpL@éÙǨ%óÕfÒT¶,&ÀР+rI/…•7’îÊ‘pl4M£§§‡cÇŽaÅê•2k‡X’²©fBÉÄÉãd{ú)ÎåY³i+Çì#ѕŰc*c‡ö†ÇǦ¾(þV¾Ê…k-ÁJß÷ËõzýÎ(XÄç½5ÙЖˆëºþA¥ÔJÓ4Oš¦ùß÷õhÿW§/‚€\.GOOO³ÖÓvÉkç3iZ¬,=É:QÆÐÁÐB@*J¾É } “©óH&³$ã±v•t.—ãàÁƒØaƒ5½YrFÀÒ›9Z*âû“Ç⤳œ>¶l–MÛÏçùgŸ¤w`Gî¿ï'.¿5ï<òÊbñ²ìïMw–e]šJ¥¾"¥Ü•›¦Ioo/º®·7ãuš¡ 6Íæðü³Ýó=z—­`flÝШóÌOO0—ÏÏ?»{ø¿à+Ãw/o”ð5Mëêééù†eYï¯V«íõÕ€h-Ö4MÇaóæÍ8ŽÃ<ÀW\Ášu0T ïÐA¬¥kÈ®ÏR-—¨–ŠdËeÜj¿ZAVJ07Mzî(•5çQª‚_«‘ŸçéÇ£g`9=½ýLNN’L¥(×\FsîE—°o÷s ­Û̾Ÿ>‚[¯22‘ÿ«ÑŠÿ™¢äMKoð—-Y²äï5M»¸T*Q.—©T*mS9®Î-¥®ë200À­·ÞÊí·ßA¶+†:ô ªw% ¬¢ZšÇ±u’ŽI#ná5\= .ˆ.̱q’¹#åãG“îéC3-*•2B4Ø=ß'»dO=þ6n$?v¡iO3´ù*¾Êï»ÿ¾757ÿº`YÖúåË—ßÁ†R©D©T¢X,R©TšBð¼6;hµhïjñ}ŸD"ɉ“'ØÒí¢ca¬Û„úİ…KC4ð„E]ÆðHêU¿Ì”•ä¹Ès™l7¦#žL3_,Òh4¨Õj„å2z_?NW–‡îù{<©˜ ºÖ‚`yæS¿ð ¿ð‘‘‘'‡‡‡) T«Õ;,_¾|ömÛîÖT**• Åb‘b±H¹\¦^¯ŸBÏ:ˆè¨m»ìÞ½53ÂÏÝz=BW¨À…°„aIbéž%‰i!år|nŽu“ Í&³y=“#'ذmµjÃ4i4\fffð}¿µ§K°´¿‡ª™"´“X˜TË%L]£j™Vww÷Ëd2ïܼy3¥R‰£G299I¥Ra~~þ5ïŠ|C¸ãŽ;îJ§Ókfgg©V«D3 T*Q©TÚû}£x Úv ÏóˆÅbX–Å“G]ìÇvñî+·¢*³X–– ÍdvºÎ³ãeö/л| ÉÂ,==½Lž8ÆÉãÃ8É4B4#àÃÇèîí£^¯#¥$™L`ez)ÎÏã{.žgµ·ÅV«ÕÛëõúû<Ïû]×Y»v-k×®E)E>ŸgzzšR©ÄÉ“' ‚€(º}ˈ'âÉ®LæœJ¥ý¢YP­VÛ-"®-dDÁK´ÇË´,þå‰ç°Â7^0D¨âعuhæ>ËTMrp|žÁÕ˜=ÁÐÊÕÄ,ƒÁ«Ù¿û9âÝ}ŒŽŒO$‚°½ù;æççéíéa®•ÉŒ|P´/Y×õß¶,ë^!D££ˆ%K–088ˆRŠR©„çyèºÎþýû9|øð« Š¿jÁËP‹ÇćÞ{ío8²18ïkízýÎÍֻݣ ¾Ÿi`Y¦i¢ëßûÉótå2\}ë-'G©gªfaØ1rqA½V•J‰ÐsÉõô`ÆãLOOqÅ5×ÌLÏ0›Ÿm›ÀB¡ÀÀÀ‰D×u±m»}®ëâ8ÎV¥ÔÏišv÷¨72AÉd²p]z饌¿:¾ÿçŸ}ÕŒ§áZ_2ù5ýdñ—2\`Òk@)†(=ÝYÝYÕWFšïûM†dHà/ï{š-×N×ð‰Õµ”Ú‰# æbì:<Ê’¡ÕŒ?Êê ›ØûÜ38‰Ù¾%,Zξ}{™™¡T*µ)°¦i‹Eúúú8~üxûZ£Y`Yaþªaw¿\œÍŽ /¼]»võ ›I½:õ×5lßÿSöMü²Õ¿Š zVÒØóû …VVóÅ6¡yçÅGÀèºÞ+ êý0|ô0ßùηùèG?Š”ŠLÿ ПÄÂ%£Õq=TW†ÉÑ1ª•"¾ÐY½q …ÂÅb±])„¦iÌÏÏÓßßO&“¡R©´É@4S¥”¸®û4MûûW" MÓØ±cÇŠ·B¼ì® @ qÖCjêÿ wþ¸n$p2)†r .ߺ–m«—’NÆÚ‹ ”¢nVQ/¸N¡wÚâ¨_P­VCJÉ“O>ÉÈÈšÖüþÁõ;hÔj fŽï}`rìúV®ÅNõ033sŠÙˆfYĆ*• sssär9R©T»EBd†Z¥(ÿ1ò/7¢œV?†aP(h4m%:ã 0hœµé±â‰óxö…ß‘å:zNP-`t¥êcn_C.íðì~“ýGNâù!öúÙþHH‘¶DMû"SU­V9rä===͵إ«If—pìàXªLüÉý,]»…ZCÃq …Éd’T*Åüü|[#£d_½^o §»»›r¹Ü!Z4BÜl‚S3 /„¢”j;å®®®öÎÿè7¾d= ð½³4=:ÚìôïxûÚÚ’¤W ¬+4[¢[&ý)smŽ®øJr{ŽŒst$OA½4SØÙÿ­ 躥Š-%¢¿-„RŠ\.wŽeYƒJ©±7,aŸMÃ,MC¯–7Õós«¡c$B¤ë¢™UT¨£”Di!ºòqðèë_…fDz3lp©5â#;ã}ßgíê•ij+X¾tŠÍ—¤®t ß÷Èv¥Øºu ÎÙÊÌ¡=»ç»l¹ú<fcÔ‹V«Pª³®3·[ŸEÂíXœ'\×=%A¨”Âqœ´a缡„"vï0Ñæ§zÃr‰ ǯ t/„˜‡ô«Ó@ºJhxH%(ö}Šx*O¶ô‡k Ö,…º¯s|"FJ´ dpp+VP,UHõ ±¢oœ³`èaØô ;ÎÛÁùçogÍêÕ¬\»†òÌÿú۟©yÄžÚË ×öòÓdŽRQbˆà%«Rñx¼½úÖÉŒ¢ØGëõzD"q¥âGo\2Nú¯Üž)Pz<ô\d Ô!t%Fà£aè Bº¦(·ÁÄÞïÓµéCÈÔ¥$ÊûÉ46ÖI™>“sØkéîéi·ÍÑcÝlÝz.Þþq¦gçÃ;¶³ýÜ­tgÓÄ‹é±<òÛ¿‚ùº© ©<ÈÕ›Ö2™éa2×ËxÉio/ŠJ#ºØéü#0:)«®ëmŠ)¥\•›¿!øÞÙfI,%†Hß#t%A]¢§dh ¡# ‰>¡b ŸTáa¦G/¤;w%]•ý¨@¢Ë[ƒ¤éQÔb¶ƒil;†’ÞµÛZw.=þ$Éd’›Þq-¦âyU …Iž¼ë°Ÿ{†•YYQh4¦ëÔì¡wmõî›(„IL£wDÔ²§§§³aGÛDunAêŒØ[ç9 ÙËë @àûg!‰éXóÊ0ðv ê!ZÅÅÔ ¤®¡9a†(·Yº°Ô(2=úCÜžÿ‹xî\,ÁÄĉéØ&œ˜&°0M]¸t¥cä2&ÉD‚ÿøþ›ÑuÃÐÃ:¾ŒóìŸý9ò‰Çè¶ùÝ£©L çÊ•LŸ1“µnÒ …o5ÀNsÔ××Çøøø)©å(³Å!í0•R…uý¯/á+Ïq+ VÜž1Ïmx–”„u…î„`DL Y YŠ ¦HÚ&ý…Ç™ž¸Žôаýç14—T±BŸ9U/q28JfpKû–ÒÓ“Ã0Œ–“T(@×5©8'ù•ݲîâ5؉82î ­$E_§È0ëôR*ÇIÆ, §™mµ, Ã0Ð4J¥B<'—Ë‘ÏçO¡Š»õ[Û¶ñ}¿üF564 U_sQ°oX? c1d¾ŠWÓ°}.5‚˜¦@zÍ"eÍ=„°!Œ7˜ýj˾HwÏ;Èéÿ ©„¤u }t?Cn¦wé2„’„Rµ2¤!R* Ó"?qœ]÷S<ŸŸiI‚ª"¨4ÝF×mbµ8¹”N&cÇÛ>%ã8±Ø‹¥*Žã`šf”ýl¯ÔEö?‹Ç£sògÓU¬sØ+cAáÙM/×0Qý=|6ëÖvE`¥ÊéI¨ ô˜†nR }p ›eìatä'ôí¸™Dx¶}·dàh‚Ú|?¿Ÿøºøõ "”´æ^x¡Q/ÍñO÷>ÄȬ‰ãhº‹i­^ IÇ"•tH&›‚Ž„¥âñx»‚;Jü:tˆB¡@.—#Ÿ²Ví8étšZ­†eYG¢(öårBFFF˜™™yå;å=ïì–Ù„ 'ë‡öÔž{á*ÏUÔÊ »&°¬æŽQtEØPèŽ@3%ºÒôÇ$s“ßçèá!lb¤ã %@÷aiÆäà±'¨l¸Ý´|Ÿ (¡á• üôÁ›“dÒi,Ëlóu˲¢Ý$ âñf)¢mÛ­5…s@±X¬í …B»gv¡P ·"ìfÊÀ²,J¥Bº»»÷¾œ0MÓ¤T*qàÀfggß8 ü7—ûK‘I_åÖJèuA­ 0“t… AE¢Û:hÝV„˜¡Í6ÌÄþÿ›Ø2—͘6¤b&ñò“Ÿ¦{Ã%øJ5ýÓèÃ÷3U qâi'vJwô¨M}<‰ð Ê0 öíÛ×Zƒ¶Û¹&Ïó(—Ëís‰CCCEÓ4ŸNû#@Oœ8Á8[gÝ̆jgK¯Äb?4¶®ž©ýø¹^ÃiÍ‚¢Âéiú¥h‚à4Ó†nC‘5¹%"w.ž;ލM¢Y–}qƒ»þ£o=š®ƒa0üO?ÄŸ¡œÜD2®·ÍK4:îÐþ»Óév¦½£\ÿÎ;9|ø0–eµï9ÐÉ|¢öf}}}d³ÙÆaŒ/ **(•Jìß¿Ÿ'N¼z'œMŸ¹wÈ—Ú?)¹eÕŸVžyás^½fjó ÓJà1M572 0…[2™KÞÎ|°Š.§Fïü_cÖf¤b&©Ñ fžù1™ ¯còᇨ>õ±k.ÃÒI9ÍûDNÕqœSfBÄ\"­TJÝ–Ëe|ðA~ü㟲Få€:oüN§Éd2X–õ× ÍOÔ}ïÞ½EÐ&h!+é¼—ÌÂ.½Ñë …ù”NßbÆýù|þŽãÇår™7ê¡”zm¼X"ضi;ÞqÎm›Ë3U~ô¹®†¦Èfu<P“ÐÓБT6ÝBnËex®‡?9LåÁoJB=dº™Õ-ëùúÎf&‹†Þp§ ;¿„…å0‹iÿb ´6šÿìðáÃ7ÏÏÏO½Ñ•ѯ´Zg „ºöŠ ýÒÖÜß4žx~U­X¡·[Gé‚ðÂÉøÙ oÄ0-ª»þsô¥:ÄKz8éã»O1Ÿ/cYÆi…{&@j~'Ñsä:o{åûþ³‡~OµZ=I“MG«°,r¼Øßo âeŽÃUkú>tåê»&&þ'F1U€« ¡Qð$UaÓi×ÅÒn:M¥¯—'k=3Š  ][Tó ¼³ŸÛéš„Gæç%³ U}gYårùïOœ8ñzž7 8œÚžE-8>0ê@œáYtü­µŽ}Ó6Õ%Û—ßqÅ@üW6Ùòj56mVç«T=I#Pt¥c2¾¼O×ã<›wyúhé™¶¡½Ä¶ŸN¸§3M‹iÿB3¤i:šnjbrjúwç ³ß¢ÙKÚh _v^v|­ˆŽö…Bïú‚a´†Ù:ß™ lWŸ3¤ß·Ô¶J]Æ« E#И«ÛÌTc”=) ¨—z¡Ó]h‚:×_hšÐÑu¸é‘µk $JtÇ=ÒŽ ÐC¦w Ë<úBxÏtQjý.Is‡dÐHx–€„¯³C#Äi„ntü¹¿õþ¤TW“-áG ø`,6#:ð3EgJEè‹_[ üNl 8ï¿Äxç|Ðü%CöÄ|Kð5Å\U‘ KPn(¼P`誕J€œ 4|¦À…P¸"f*Æòrn¶¤¦ßó¼VCQtObŸú«µå¦–)plm ,,â¶Æ¡I‰lõx2´f—DSÇ‚DL0<­P…R­5©øÅ+ôk7Ø¿ø¿Ü/Ì”Ôñ'»ÐÔè œp';4ÐÚS÷œÆñ.¤˜â4ŽØhi~ü—®1Þÿÿ‡õ)MÞ˜WªŠ¹Šbª1CÈœ@ku’ìŒ ”j6ÚXÙ«·›Sã6ĬfN)f * U?1«&;ì±KÓ4¸€?_SóÃ3j&f t­›:˜&X† ¯ A eÓd) AØìcšK@ÒÆ}ö˜lŒ$…ª¤TWä+Šwl×7|ø*ã-%‹-`†¼Œ¬¢¿õÓWƽTûÅjsR.ˆ™¸%zM(¯ÜPætQ‰‘¼ ŽÉú®aYüômf6íˆx±ÖüÑl©‘‚ñ‚rÝïâu¤æ«Í–ôJ51u$áþQ5&õ3àu° ¨£Sr²;)Ìí+E&”´f8Fó#;$§¥TÚ¹+ôäÊ^bK2Â…c5y×dQU¿ò/þ‘•½"¾iPKô¦)GÔ+ 5qßsᠫÞ«3ÐÐÓY•pá9 }€hÙóÓñú…¬ÇÒ@Ð dâ¶È%Ò…Š²ªns–Ü~ž1xÉ:­¯XSF¡ª˜.)r^¹“óÊ™U”ƒññëÌåiGX5Oáà0STþO†ÃÓE•oi£%„ˆ]D³ÐbBà¬[¢-Ù<¨õ¤ãXº†ªyÔöŒÈ©ý£2úŒÐÐ12qKÅÐlKø@íø´Ì7|ª@ ¨·¾«̵ž Çîz,bÿpÑy§uÂzÇ X‚X„ï›­)™R@²5b­çÎ×ìÖëN½¥Cx†c‰ø@–l&.R ôbêèœÌ»>å“ÓèøáŠcv|‡¥kÄ Kï”rë½õŽÙCK8¡×hÞ_2:Ïmzk¸ŽXžFøj6¤ÌØ— ÿL—8#ê<Ž˜Q¬5ìº9v«ãÿÑ9f‡S ˜‡¦:®ÓèølÕAZí-`/Ÿß9£›§ ÆÎ&JÏÄ‚Ô/.:>´3íЉþB¦´e5:»Xgµ†±€…±€SsšŒ¤\„¡È&b!e 1# )e°€ã‡ 4ü儾XŽ(’é)ˆÖ‡ˆE4«ˆÎóæÄièëéŽõEþ·Øl‹$ÏD %\ˆ\$Š•§Éû¼œ†ËEàLÙSµ gðàê +\$)wºã3%Nó÷bßËË04N†:}^L°ò4ï?“Yy¹Œ¨Z„î·›F«E€P‹Ì†3¥¦µE¥á˜‚çU þL³átÔY.bÚÔ+ —g»> Î`2¶#WgHœÁ|‰Óœ#NsÌ˼—3¼Æ+XQg˜)¯Vƒ_•À>þÿgçêZ®<³ûIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/layout_compact.png0000644000175000017500000000656711273045225025220 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF”IDATxÚ´–»NA†¿™õe¹,I—ƒH„KG(("¢¼BŠ~ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÆIDATxÚ´–MogÇó<û¾v"«DÐS¥„T8@"P9öÞ§\úúªô[T=páÖcÕk*ÔJ‘ZU¨/Ix)¢ªJj³kïf§g-+Øl`¤ÕìóÌîÌ>ÿ™ùÏŠªò.Å™\ˆˆÈúUN.³¼¼|ºÕj¹FÃÉóüÐÇj6›îÆÆÆ‹õõõ;ªZ°QÜn·/t:oTU‹¢x£«Ýn_bUÅ”P©ªEñVpWU)áw&6™vÈÓ“\Êw7oqû)W/'ð=²,/«0ÆàX‹ã8„aHøÄQDGDQ4½ŠTuùÎ݇ôÒ!ÇŽrtá=v»£gPAD3Ò®ëbÁZÏs‘Ù'( ޵ ³Œ4IéE1r,‚AŒÁ÷<ºÝq1?7_Ýåø±Y–Q€ˆŒµ1†gÏþ"Â0 Ë2’$­†Èì·ÚƒÍmææþ¡ßï£ ÆŒœXkñ<4í3Ì2¬1£Ü8¶¢b_Ÿûäìø‹gI·×#ð}|ßgoo»ïk”lñÓퟙ«× ˆEQй¿Å¹¥ED„Ö‘&/’k-­#MD qUHú/øxé4q¤–Î,ðëo¿ó|ç_>»º@žç³“<‰Ûç×.²õè)tîb¬e/ϱv„í½ÍmêµÇuøöÖ„¾åì™Åqnjµ¸ºÑ®¬\æÊ ̇Ã!'O~À×_}‰µAàÿ?º.#O£ŠÇOþÄs]vº½±½ìÚ×QËÔ2öƒÍ-¾ÿñV>=QÉU“v3ËpPžït8ñᇟh¥ÔjµWön\ÿ‚׫&IòÊxCDjq¿¿¶¶v* C84_×ëõhuuõvš¦OT5)@ ˜¯â§ªy ä@ø[UwÇ3ð÷- }2४ò®[þX*uYÈýIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/layout_multitrack.png0000644000175000017500000000700511273045225025735 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF"IDATxÚ´–ßneÅó­×k¼¶[ZJUÑ"PRZEå¢ ñï åòyž([®ˆª…T5 ¶i«@'¶w½»3\Ø^¯]¯Š›Õ~»sÎÌœ™Ù3ãMš DDìf¬Ì€···7šÍf,"ÿ‰ ÙÚÚ vww™™V¦çµ££#ë÷ûû€%ã1?>~Æ8UD ü6¹3”OnߤÕlÈÎÎΠ g.Š¢eœ$<}vÄ8QDq3ð9ªš)f š±~óꌀ8Ž ðó-kðG§Ëù Âó<œÌ"/¦c¨f†s‚êÜ¿ˆU)‚š"‚ïû|qÿ.£(b8Š99Â<WÚ ª¾Wñh6Âr‘—I|ßçËÏ7èöžóÃã<ÏËëo“”ùæ³»„ÆÊÈK3pÎågý‹??z‚Éå”>Ýø0'(ëîJ\Uã¬A¦Šˆc8ЍùF=¨"Ó–2Süªç¹‚¯/‘™Ç÷&ä Ë26î¬soý}ªµÌ0Àsa’¦é¢2"å"gYF2Nxòû!Ã8Í#nÕ¾~°A½Þ˜ë`$ɤ1æ Œª®&03Ò4EU9?;á´?@œCU7C¢Q„)èÔYæ!/D_š™‘$ âß~uŸxç“[«þyÌÅ(É䘓«,Lö7ÞÆLË3n\wÁQ0¾ÿiŸ©x"Óhs|™\U¹r©Šié ) ¤ÙR'8áøø/~;x_ñr ^5ãÞÚ{%'gŒâliÁ! ë\§9ã­ª›_a@+>AP]X9A’$ô^ž0ˆ ºÍj¶Ú|ÔlƒL–Û­k ._j¡jK‚¯Y‚ p§§}ŸŸáyB±¼ ó]g (·®Ý “Gy÷¾ï»eëõzã_yøÝaç¥9ç•Q œWÃTÛíöª)–n·ÏF¦´¾¶¶öq§Ó%I¢Ë{sËä½W­Õj¹ÍÍÍpoooßÌ3¸ ´VmØò\VZœ§f6ž¸)°ÇëÃÿ7Äš™Ê›þmùg¦`£àuúCIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/layout_page.png0000644000175000017500000000746511273045225024504 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFRIDATxÚ´•[leÇßÌì}»í¶Û-·Š].ò *–V ¨„(˜˜1&è“áÁ£/è±â‹Äð $>i‚Æ/1^& «…Öbì¶´ìhË^fwvfgf?J¶TþO3™™ó;ßùŸ9GH)¹—Ò&/„*P÷?ÅÍJ)Ý*PŸL&÷¦…Ï£áJ‰WÓ0M“’U&aYªªNd§i€Äu\‚A‰Dâ=`t:À“×u>8øÙë/ïxš`0H¢¥…±L–‚^$Þ#—×qIm4LÀë£\v9}öÖ¢çt$ð<“A•;ª+2¯Ïφõíø¼‡Ÿâô…^šbõø<Ba? Ñzüþ ·ÆÇ°MSÈ x½SqÕ|‚ç·m ¡ë:¶ã²kçv‚áÔuT—`À˹®K”Œ¶e±ó…ç8óëyƳ9Z-”KFµRJnwRs2™< o«R©È¹ôξdwoÿ¬ÏúûûÍ“qµé°)U*¸w*¥DAç[¯V%i;67GÇX8>•Jeö6(Y?=F몕ø<*Bhäó9L«L,Å,[T„ÃaTEAÚ%¯"qIÜàÉ£(J ê® ìûðzûúÈfu £È¥Þ?9{þ"™L†äà CW‡H§FH§Òœïêæ÷îK8¶YaøZjÆQ“"a?¡@€æ¦~üù$]=´µ®äâå2¹<‹-便ùÜgpèOt´c;EÃ$Þ½D¡@€Î·_ÃÅË»±õ‰u,_îaÅ’e%›ºH ÷/^ÄÞýóXëJ¶lÞHc,†*MÌ›'•JÍ ª`íš6F®²~Í£¬_»)%¦m³¦uŽãà:.í­Ø–IS,†?ècÙÒ–e1}¶U•Èu]²Ù,‘p€-›ÚÈêy Óäïþ~9qŠbQGóøØÔÞFf|Œ‘›£Ü¼1Æç_~ËwßAÊÊ €6Ý”špÓ²p]‰¦jx=<ÚÄkgÎ]d 9 *¬X²”xcŒñL†x}-¥’‰ÊÝ=(Šìî|Ÿ­›;è»ÒÏ#.GQU>/‘H˜áÞ4m«Æëõ`™eFÒ#%ƒCßc׋Ûèéé#ðÎ]¢²ãÐ{e«dð@Ëbj#êÂAŽŸîâÓ¯²ú¡|uøƒé1rÙ™L†PMˆ7_ÙÁÂqt½0ãU$ÔR­¥¡±!ÀEòìSëðûüüt¦›­Wѯã‹#'IÝ£âJ"5aÇ¥¡!Š;1»g/Q8dïžÝHÉT&Š¢P¶,^Úþ ñx=¿ýqTýo`ÛBÄÄ AQ†††æ¸®K29pp¶%„ •2QäD§•JÆíàgWe TõÝd[ !¢À<À÷×¥\—Rf¦<@ðÎmô/e†”Ò®Ü+)Ücý3—(+ôÃ×IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/layout_score.png0000644000175000017500000000651411273045225024675 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFiIDATxÚ´–KOSAÇgæÚZ@ "-‚‘DX°ð± ,ºd§ã¾ß†&®Lˆn47Ú`‰(ñQ@K{ÑÞÎÜqaÛôq¡a’Iîâœó;ÿ9sÎ\qÎqšKÚ"’Ü Ä ;"¢òùüâòòòØööv("ÇŠìœcddDû¾_][[[wÎE4¤ …’볬µÎZÛÏÌ …% íœC5àž1¦o†ïÞóüÅ˾vXÐ0H±Ãz×6:ªæRG9ã\vн0AuÿÏÀ>ª›|ØN%“ '=î­>¢\ ô96 ´½Cþê,sÙ ÷Wûƒ+ÐZK?@ìÖ ·o®07}–Ÿ ® Š"¬µDQtà6ÆP©V1ÆpçÖ ¥ŸA¬ÖºÕH^»k-‡5™,ÆüKÄZK:åa­mNÚ“í4PJ‘L$¨`­åG©ÄÔù±X€RªW Ƙ€ˆpÆÓT«D@k1†õ7,.Ì·]>=QJI·±ˆ€‹ø´Ufëë7vvqåÒÖZ²““ŒŸkvmGb €tœsÄ)xûq‹gÅM<­A72Œ1Ì]ž¥V«u&Ó¸êtPJÅÖàé«Ï¤‡“¸2IÇÄÄx«È=jÛz©§Mr7`rÔcw/`(©¹6?K½^ïÛ\ZkâŠÜ3¨D„ë Y¾”ÊŒyärÓÄMÝî+« •JŲ¹,33±QDÖûNÏîXÍÈ÷ýr±X¼†¡ù¯÷RDù¾_¢ö's¸Œu„Ç5ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFdIDATxÚìýwx$×yç‹ΩÔhÄf09q‡ÃL‘")&Q’)*ØJ+É»rX‡µµk_¯tåµ­½ö^Û?9¬äëµVrZ+ÚJ´$*PbÎa8$'gL0È@ÇJçüþ¨®žBÀ`È!9¢ÕÏSO7èPõéïÏ{„ÖšŸÞ~z{5nò§§à§·ŸÂöÓÛëîf|ô£}]ÿ“Õj!DãR"eô9BÌøÙÄ×`uýX ô­@¾~Þ40Œ'£Àþú½Ð좄a€R )%®ëâûþkrN´ÖX–Å{ÞóZZZ°m›J¥BµZÅ0 ¤”>|˜ÑÑQ&&&AkÍÀÀ÷ÜsÏ9ýž°ýôÖ8Û€·o¶j­Å',>šÁLuÈOßîŠ?=µ?…-¾õ?ü;`S†R)…RŠ0 QJ¡µnÜ7«¡”!D¬–a¥”…Nÿ üuÅû)lÿFo]ÀÇ´Ö¿ µ.(¥‚€ ðqÄàÅ %k6ËRJ ÃÀ4MLÓÄ0Œ%RÊß~Yñ·Àÿ Œü¶[·_ÒZÿ‘Öº[)…ïû# [ Úl°%}¾fØâò,,ËÂ4Íœ”ò??'„ø5àÛ?…í߆Éü¬RêÎXÉ<ÏÃ󼆪%Õ- ÚlþZRáb§ºYÝLÓĶmlÛŽ•î_ÿøƒŸÂöú½mÓZMk½: ™çy³ªZ3üµXÕ’þÚl¦4†.Ͳ,<ÏkgÛ6RÊß×Z/~  Ûë覵¾N)uÐáû>®ë6 k†-©jaΉ6«Z³ºÅf4 \ßá8†aüÀBü¼þ7RÆ1ŠÅ×gt^WœË”RßRJÍm6UKª[³ ˌƾÛ\Êfšæ¬G¸†1†áÇ^ Þâÿ«9×øŠÂ'_‡°õ†aø­ugÔjµYU­ÙgK¦>æ‚-Ny4›Ò¶¹"Úäû8Žð_…ÏJ)ÿùÕ<7aR(H§Ó 7áUÍ0Œ×%lJ©¿ÖZ¯M‚gíãû´fUKæØfSD"·^¶æHv.u´mÓ4ÿRJù8püÕ„-›Íâ8Ϋ&6fs’òõr ÃðW•RïTJ½Èt&Mè\°ÍœÍg‹Í0ŒYa›íµuóÛ+„ø#Ó4?üjŸ èìì|U¯½ J¥^oŠÖW©T~_k='`Im¶à ´³•ª’ðÌ—2iÎÍÅ„”òC–eý­iš½Òþ›ÖÛ¶éééáÕôM€J¥òzSµ=±b%²æï%Ó³%rÏ–gK‚ƒš|fÐâ{Ó4 ‚ ¾ÿmÃ0z¥Ïïûlذ•+WâyÞ« ضýzJs, Ãð?Ä•X±’›¿ŽA‹úæZè|Q[6­uÜt:mÛxž‡”’\.7ï3 ãEA‰Öúmžç]<ýJújù|žK/½” ^ýÔGµZ}= Ûû´Ö1@g;Â0¤V«Q­V_tòMÓl@”ôÛ’à5ƒ¶råJÞõ®wq饗’Ëåá±Çãþûï§\.Ï"’À)¥Bõ¼Û+[¬ZµŠÖÖV¦¦¦^}ØLóõ“ÛUJ½;©TÉ‹Ù\d‚€ééi:;;¹í¶ÛX½z5–e188È3Ï<ÃîÝ» ‚ ‘Kkö{š~/ï|ç;ùøÇ?ÎâÅ‹¿Ó0 n½õVÞþö·óçþçô÷÷7”-ŒÄŠ*¥|;ð `ú•ðÕÒé4]tÑ«®j¯Çht“b[l“y®øâÇÏù¾O­Vãýï?¿ð ¿@oooü†aH¥Rá‘GáÓŸþ4'OžDJ9§ß¦”â½ï}/ÿãüfK’ !¸ôÒKùÔ§>ÅÇ?þqŽ?ŽeY3üÃø– !¶¾&´··—ööö×$·*“Ùï×Áq©”ÒJú\³]и6úñœ?û³?cÕªU3raZkR©wÜq÷wǦM›^”/‹¥—^z)¿÷{¿GýÎ’Ú V«±lÙ2>ñ‰OÉdð}Ö¿¯þÚÕsE»/÷Ø´iÓk–W}½%u×7›fð´Ö”Ëe~õW•ßú­ß¢T*!¥$N¿(PÃuëÖñ™Ï|†~ðƒ ¾È,I)ùßùZZZ¨T*Hs6à‚ àª«®âýï?ÿ÷O&“™ñ7&`[üJU -Zôš˜Ð†²½RŸ¢×àè˯Š/j¥Rá²Ë.ãcûX£?•J‘J¥H§Ód22™ Ùl–l6 ÀÖ­[ùÄ'>1ë ¼å–[xã߈çy3 ðq/›mÛ8ŽC*•ŠËS¼ï}·ß÷_”@®×5›Š¾œ#.ºè"R©¯UÝÿõ¦lm±/Òœ¶H*ÛoüÆoÐÚÚJ­Vò¬†ß¿¹q2ÞûÞ÷òå/™Ç|fèû¾÷½¨¾w€ÌÖz$¥dÕªUÜxã|ãß —ËÍ–—ë8Ÿ~t†´··³jÕ*‚ hüϯ l¯£[v6Ðâ‹X«Õظq#·ÝvZkLÓl¤1∼ž‚Àó<\×m¼>ŸÏó‘|dl===¼ño¢¢º‚t:ÝHîÚ¶ÝH‰$“¹7Þx#wÝu×\ÊV8ß&tݺu¤Ói\×}Í.ޝ“[z6E‹Ïó¸é¦›J+RŠýèG<øàƒ†ÁÊ•+¹é¦›X¶lÕjµÂ-·ÜBgg'£££ óºlÙ2jµZ£1òÉ'Ÿä±Ç£R©P(¸ù曹øâ‹KöbØ6nÜH[[žçÍæWfΗ²Å鎥K—Ákšyx]ùl€=W‡E¬dW]uÕŒ²Qüæoþ&?ó3?Ã~ô#–,Y‰'øÈG>½÷ÞK:n¸Ë—/gË–-÷ܲeK²L&Ã_üÅ_ð¡}ˆþþ~6nÜÈ3Ï<ûßýn¾øÅ/bYVÔtuu±xñâFTÚTµÈžÏÒÔêÕ«) ¯Z+Ѽ°½Žn2iF“éŠ Èçó¬Zµj†Â|æ3Ÿá¯ÿú¯ÉçólÚ´‰·½ím¼ùÍo¦T*ñ«¿ú«œ8q¢áØÇ©ƒø¶|ùr jd¸ë®»øä'?I6›åÚk¯åŽ;îàŠ+®@)Åoÿöo³}ûöÄ4M:::fÔcÀ¥ã|©ÚE]tAô,¾®`ÓZ³•–bð²Ù,mmmŸ/—Ë|á _ ›Í’J¥8räÿëý/¾øÅ/âyÇç›ßüæŒ÷éí=ðÆï¥”â _øŽã ¥ä¾ûîã3Ÿù O?ý4ÙlÏóøÊW¾Ò6V˜l6û¢*B ›ÖÚz¹¨çy¬ZµŠB¡pAÀöz ôlf4þÚ²¬†J 111AKK ©TŠÑÑQî¹ç”RT«UZZZ8|øpÃÉw‡L&sæ“ZWª‰‰ †††( !Ø·oGŽÁ÷},Ë¢½½ãÇÏ0—IqŸ-%¥4_NŠâBSµ×#lá\ÁA¬ÉÙ™L†¶¶6J¥¹\®¡Lq²Öu݆ïºncF|‹ ÙRJ …î×8×fÛ6AÐÑÑ‚ „ø½š«J©”RÊz9°ù¾ÏæÍ›ÿOa;ÿ75—I‘RR­V™šš¢¥¥… èííåo|#?üáimmm@§I„\}õÕ‹E*• B†††¿l``€r¹ŒeY\{íµœO:nä²<Ï£Z­rà 74` ɉ‰¹"g°^j䨵ÆqÖ¯_A­/yÝ*[óE”R255Å©S§Xºt)¾ïcýèG9qâ“““är¹Æ²;€·¾õ­lܸ‘±±qüª.ìÞ{°ñËöîÝÏôt­ï~÷»Ù¿?CCC^¶¸%ýÆoä-oy µZ­ñÞÅb‘†’&}6¥”Y^²ª-_¾œÖÖÖŸÂöJÜê=ez6Ð’ÁsÏ=Ç•W^ÙèÚ]¶lù—É7¾ñ Ž;†‚ÖÖV.½t›7oabª‚ç–Iëa$§¹ãŠËû6sàØ$“£ýœ85L.›"—Íò;¿ó;Ü}÷Ýœ8q¢QÌ¿ñƹóÎ;q×u ÃÓ4éïïgppÓ4_TŒ×Z›uu{Iª&¥dÓ¦M\7ÏëMÙüæ  y!xàøÀ>ÐH¦ŽS(ø•_ùŠÅ"µZ Ã0¨Ö|ÆÆ'É©ý,³vÑja!ÿù—6€±j#“kw3©¯£æuÒšËñሩ©iÂ0¤µµ•ÎÎÎFËR\ú’RòÔSO1==M{{{³ª¡µ6€—¤lA°|ùòFËÔÛ…â@¾¬NúI5k†Í¶mžxâ vîÜɺuë¨Õj.ØÜxžO© ¼!VXÑDØi ­h ¯Atõe誤RíçxåZÆÃKɸ>™t:^„L±Xl˜Ê¨b±È½÷Þ;Ä6ý½à¼TUÛ¼yóyÌdrò'´b±Èèèè¼cMÓdbb‚/|á üÁüµZmf›Ró­áNÖ¤'““àtƒÌ€á€Œ @à‚c“1ÆYWú'+ý oÆ[I{^£ó#®@ÄõÒ‡~˜;vÌXÕÖôÁÕj5u®þ–ïû\tÑE¤ª5`ûøÇ?þ¯lÕj•?ýÓ?õ<8cöFóü––¾óïpã7rõÕW3=™¼ª7Í2}+2;‘ÙNе¥,êÍ#-'Ê ZƒÁp˜.{”'$‹òY–‰'ÉVŽs<|¥ô*2Úo”Éâ¿§Z­òÿø ß-ù7Æ…zß÷¹õÖ[+VœÓÔX½_NP° ¢¬>¯°½nétšT*H)=jI“/›s‡J¥Â§?ýi:::XÔ»”r¹JÊ;Àî¦Ã æ8°wвÖlÚ܃´lÀˆ@‹¢‘ú½I>ŸãôÐG޳ªKÐÓzœ\ðyNÕn§$߀)Ó8ŽÃ?üÃ?²ýÙg) õ>·4©tÇIaZ† [¶lImÛ¶íœÏÞ={Imc‰jË¢õë×ÿ}KKKùÞ{ïýe¥Ôdlî_NÐñzMÚ²,e;©ÈÚIa¤F dd iú(b§Z›æÿäÿÇ'~ëß³¥³ŸNãa,YC© ;Oae:¸tSNNDæR6«EdJ>kW´>‰Ä¡»C³Jÿˆ’w”)q9¡\iøÆ7¾É—¾üUÚÛ»ÈdÒä²iZ[sä³iÛDišxøÁ¹G£¾ï7:_h))e¯eYG…7f2™·¶´´°iÓ¦Á§žzê£Bˆn˲†_Žy6_' @`ÚY¿£eEEw›Ä±èßWÄug\“KiúÚ<6î¦E#˜´‰![V·`çrHY‚šÓ‘P¶èêÔý¶*xÓ,î€ÎtR{ -0²äÌQrá +YürŠ«»OóŸ¼ Ã´°ìH}3™)ÛÀ>~µÄÈÈ$Oï­0qú`.=§Q,ñ}Á°Å• )eGOOÏ— …Â-{÷îýü©S§>óÄOŒ uf³ÙwvvJ×u/QJ½ù¹çž«$Îû9™Ù×lP*¨æÞ°fjñÒm‚žÅyHeÁ°ê§$ŒÀÐaÝßR 5ðKà±E ´eDð*¤¡] é³uS;˜ Ò# 2½oèƒgÑÝVccÏ0•©¿ù½ÚÑÔ®ÔÊ;·/ôDŒ-¨å;Ù S.—éììü…¾¾¾ÛFFFعsç,—Ëß–RþÕèè蟜œ,ضýŸ²Ù,A|0‚ÏÅ–äâ‹/–årY>|Xý[€M¡r'sþ¾?ÿ§Ë—œ|“È-3:¡ê`…upT¡ ~ |/ºÐ¡Á#dô¶Zœ‰:M„™P¶ø½üúûT"… ½èuRQ>iE ¸!ø †¶"Â@ã‚N!‚ Y9²ºøÔ¯}Giy³Õ}Å^ÂÚ< m¨cã“ Åš´t:½Ö²¬mÅbñÁZ­vÚ4ÍU;wîäàÁƒlÛ¶íß=óÌ3766ÖX€†!Ëå~ýùŸÿyëÖ[oMó›ß,OLLN§_÷°iz”Ÿý½?O{ûÞ)Ú/m‚°ÐÄ€y¡ù`A¼bt•èyÔ…²®\Ô_ÖòŒ Õá™ôGP_å×_WY‹ÔKZ`ÔUÌLGЩzÀ¡Òè0D ö}|„ *aq¬Þáûþýߎ•ä›@Ï™ ÚÇs–1½êO´‰VÁ|¦3oÛö7/ºè¢ÍÝÝÝGüñ;¦§§ÕZÿÇ}ûöaY•JåµZíV­5­­­\vÙe?~œ‰‰‰ÅW_}õmÛ¾£X,ŽîsŸÓ‹-RW]uU#Ÿøº6£Óûÿå:Nýà—eïE¨ÀßEˆJ ¡üHu‚*„Õ3ƒ*øeÊÑcåG Ý˰žÞðϨӋ`«+bèE‡ "¸ÑÏ #RDÃ#U?0SuT`ÔÐZú5ð¦0¼)ðÊà»h’²ôÜjé}ž¯ÿi®@P  ‹‡Ù1úm½ÈçÒ3ê­Í¦µT*ÙµZË.»lÕ–-[þåž{T*}kbbâA°}ûöŒëºß÷yï{ßËå—_Α#Gøë¿þk€7¬Y³æ»?úÑÞ],=Ï'Ož\Pºå'6wüÀÍvàº%“(£ŒaY˜øVA%Z Âøð΀g`Óa¤tÊŠ ‘F6ùw±²© z}ãqÝ„ÆöMÈ:¨v¤pÒŽ`³Š‘¯gd"v=íÁ›DS¿Š |´R ä5ZðOÌ[Ú§‡|âóIKK Ë–-åMozÝÝÝd³ÙF'KÝŒƒ ø/GŽùâ£>ÚvçwnêîîþÔ®]»Úã8ˆzô\×åĉär9Nž<ÉÄÄžç‘N§¯¹îºëîzøá‡ßöÄOŒþ› ü€¬ªTIU¦\ÍDi’rÕÄIY´´XdSÇð@×a­nòê€)?J«3. ”uÈ‚:$~]¡ê Ý6¨Dà¡ÂĽJj¢þúºÊI3‚Î+¢Í)Bl<ªÀ­`Q%mV0U•0ð¨y¥ª*»þÌ`8¾j|îÇÑÔÉÉ &''صkZk>ö±±|ùò«ª\×}F)õÿi­Bkýr¹þð‡iiiáSŸú;vìà…^àÀ>|˜Ó§Ocšfl2¯\½zõŸžžþõM›6±bÅ Ö®];o€bì¸ë'³‚ ›©þvö E¶2M(|*c’Sƒ®«ii1é[lÓÝ)+ÀÐuß­™Ö£St=Рe]ÁBA"å!›‚}©a]ÍTýýÔ™ˆ7†->dÝ´†&ZT°¨º#c>S“.¦ èhU8Ù%|/`¢2Q ~†úE°lþâûЧ¿xÐ À=÷ÜÃ/þâ/bFô¶µµ}Åqœ›Çarr’ééi¦¦¦hkkk,c\¿~=§Nâ©§žbjjªQéH¦L|ßÏúõëÿä£ýè‰\.wÖiX&ÀÓßþÓŸÌè@ƒa[ߣ/ÛŸÏ”V¤Ÿ¼mОQ Lû;0|R°eCŠ¥½Ž"‰P‰@@ŸQ6!Θ?-þWSŽmF‘|?u¸dÐ,D …CBPu=÷¨‘ÍÀânIÚÔâ«€ñRÈ©qõOÉK93¡e 4üÉwÚ;·š<ûì³|ýë_ç-oyK¼’Ëhmmmw]—L&Ã;ßùNNœ8Á—¾ô%<Ƚ÷ÞK*•âÉ'Ÿd×®]añ|”¦ÅÛ•Jå¿9rä#ëÖ­;ëšT@›™Ÿ\3ªë?íýaÎQ××ᓱLú:YKÑÏñS=QáÆkr,Y$†B4 ¨ÃÒTˆÀJ€GâëD Øtòýthq†FFy»8ÇÂþƒ%vï+ÓÓ)XÒiÐÙ*p Óå€þÓêØøtø›Bè;s¤,Aà þâšÇœ=¯öàƒ²víZºººÐZ/*—ËKK¥7ß|3Ë–-#›Í²fÍjµ/¼ðÇçÀ”Çl‹râûJ¥òÁ]»v}zóæÍÏŸ­”õºh1šôøûƒ§‚k!qQ›MÊô¶CÎѤLÍÞCO<£¹ý¦ùŒ!b§ëù´ä×ÉÚ' 3Øœ4׉ÈTÍYZY‡Í@a °8zÂå™ç¦YÒ V´·…˜FáTÅçÀi«xzÚ|ŸÒ^ò}MC°oPñ¥G;O,ìü„aÈöíÛ¹ì²Ë°m{ƒišaräÈjµZcÔëôô4G¥¿¿¿ñºÙFì—J%\×§X=ôÐåžç=Ÿ DâÛwÞ9¶|Æá'ýV 䯾0˜^y±š¸¹§Ý$m ÚspñZȦÏï©òüî×\Ù†~dN Aõl|’Ô±4?xq…&i†udˆz2øL€ ±˜( žxæ4­YÅ%ë%]í x¾fªìóü`+MÝr80ZŸ”⌦I)ñ<—úþ¿29U>§ó·Ã·´´ü§xšÑóÏ?Ï©S§£T*qäȑƤ¦xèM²Ø”^wÝu¬^½š»îº‹ááa‚ ¸è?øÁÂ¢Ñæ~âaÓÈ VÕÏŽ¸ÿæƒ,î°HÛ‚L 6¬„Œ-xaÿ$ÇNµ²zE­\>(  â€3J§t2s:+k/2—I5æ™CZ(aá«Om?EèÕ¸|«Iw»F MÍÕŒN‡ÿüóýqÖïÞ½å…ñˆ×xau>Ÿ§««‹ßýÝߥ««‹|ä#Üu×]ŒŒŒ°bÅ ~øÃÆ­í)¢ |?zÖ<ÛkµI×+ðžPØÒçÐô"þêƒÛGrÛº z ‚´-ظFòÄs'8°7÷ ‚"RX ¡"®qú‘y%‘ÖHÚO‘T²hÒ:štÀ°ÑØø:ÅSOì&çÔØ´6*ÖŸƒ»^háۖ㉅¼Xq>,£µÎC4Žëرc<ýôÓg…Ì‘°4Í›—¶:ÿÏÊõ®tZÛ9ôì£dWm+·wtäFFF¤a”Ëeöïß߸¶mÓÑÑA{{{££xtt”­[·²aƇ‡¹üòËyðÁyüñÇy衇âí,c³ûËZë/†ñô¼°½ÚÓm¤”½b¹NŽ€°e‹[¤ÏT%Å?ìXó'xß%§¹di@.-X¿vîØEgo'Ý]­èÀ@H¤•§Âºi•~¢" f*Ü ß̘ Z\–’ -3ìÞq’Ácƒ\{™À45O1øüclè$“±Èg´¶’#­uK¼¾â‘G™×d:À¥[7^Ö%«¿Ÿ1Å‹Voc#L:N&›cQÎJ*¹®ë¦GGGéïï§µµ•ŽŽ …¦iR­V9}ú4…B)%]]]ìÞ½›¿ýÛ¿eéÒ¥<òÈ#!ë*b_Î0 r¹\Ê÷ý_*•JOÏuM€¯~õ«¯hñ€—®®®F¦zñâÅ1¡Ñu/õ½ g’ŽC„Rñè±vž?iñö£üì¶½èn­ñä;¸ùío$cç†fªÞÖÕu¦vŠj2õH3a6‘v=ò” Š<ýØ>V-tVó¥'m>ûHcµ…œÂá¬ó6Û¶yþùçžÝùè.‡Þ>›]²¢ç—/¹åíé'¾÷uú졽»‡Î¾UŒäÀ3Z_}kðïÜ­„Öò’K.i(X\!0M“_ÿõ_ç—~é—øáÈ?øA*• Ï=÷–e1==w…ày^°lÙ2íڵ龾>nºé&†‡‡Çž|òÉ9çÀ™“““¯n§Æôt#ÄîììdÑ¢ET*ZZZ¨V«UGÉï¨l…æå{hEʘ¬üÍ#mÅrȃ?Ú‰cø¤[ô=‡¯ïÈaZùLˆÖƋƜƥ”=Íæ³QXkµÈ.NñË+zÛ?¶ì¢‹¹A@ÿჴvõ`ZÅ©)ŠSSX–Cij’Úð û²K/ öìÞmOOO7¶w‡ééiÊå2}}}”J%/^LKKKc7ÃjµÚ˜•r饗²~ýúßÊçóÅL&óK—.¡}úuëæ¼fL!> V{ö ­«Ë¯¿mµ „¿Þ8øÅzŸ[Øä·‰D½TÖMg ¬°ZAH”;IX›æ±Ÿbdp‚Å+mþèÇi~´SÓšÓØÆÜ£îCûžzê©dHº³%kÜxÍå?7¾÷éß]¹aËæTk'C'ú! È·w±xýÅ<}÷¿`Y6 Ñ*ÄÉä8¶ócåµ·‡ýÙœrkU9>>Žïûär9ÚÚÚhii᳟ý,<úè£ #„ CÊårÐ××7uíµ×v¼óïdÍš5×?ýôÓïÙ·oß{NŸ>ý–©©)¦§§. ÌkF/Øè²U< 9®vÄ>^Ó­])ÕÞ¼#Þµˆ¾N›Š² ÿïÝ6Co´yËŠ OÞÿ ]KúX¾© °"h¤w…è¹q¦ÍÛÌ€™A«©=ž}|'»Ÿí'ÓiòÝ¡‹Ù9:MÊ<…ÀD©ù÷jÐZ311±ìðáÃgZ‰ t‡Å5+2Þ]{ÃM7­[˾gŸblì ]K–âyGw?G¦}Ë7_Æág#•ÍQ«”0M !%ÕÃV&“ñNÙ½½½(`zzß÷¹ï¾ûðêë^]×¥µµ•;ï¼ó[à8Îý“““‹žþùÛÓéô’¶¶¶Ÿ?xðà_(¥FÇù“xìOl‹Q<:ÁqlÛ¦T*Ͷ¬¬G)•Ÿí¢Í8Sj<òèÈÅt,ª±.ý÷~ë~~¶»–ŽN´YPÑódr›rmB¢C¡]Žìíç»·cå žp/cDõÒÛy‚É‘™+öç®>FëºzS¬ê͈ÿ¶dé²u-[mîÝñ4‹W¯'›Ëctt128èJ¥9¼ã ®¸ýœØ÷<µr‰t¾…j)2›Ãâš+ßdŒŒ°gÏ].—O(¥˜¦!6۶ݯiõ<ÞÞ^~åW~…믿þæÃ‡ÿösÏ=÷Û/¼ðÂ¥”{»ºº&}ß/ !>dÛv#h¸àÍèB¡s˲˜å´±¹†7t–)YÜ]`Ÿ×Ehi–Œîäû_½ŸýÈmH+¢®¦É’•žƒ³¸l¸ásúÄßøÇû tÀ>ó&YJ!¡×6cäB³éL»}ß'›Ë/»bÛÖåy¿øÛ›ú;õZ:Qhkã…'aŦm´ö,¥÷vœtŽÐw1-›jq’c{w²áªxöÇß¡V.‘km§45Æñ=û(OMú¥iùÍñññφ±Ý²¬éúßÕ†á{ß ‚ ¯¯¯Ï¿õÖ[­ŽŽvïÞÝnƶ–––/íÝ»wG6›imm-%ƒ³e~âš'ãnÒ|>O±XLîuÕ\5?ÃÇqèèhÇq,Žz— ÛåÝ»ùæ?ÝÏ[Þu¹Öl}E•œ½,Ú ^½³wt`œ/ýïû)‹Œ,¹Œ){5;Z ßÑ!Û÷Öšñ5Ï÷™:¶ùê‚ýøõwþzï3÷}Ñáa.¾ú,[·Á“'Ù~ïÝ\ùæ;9ypJ!©§Éär ÚM÷òUô,_Íèà NìíÕ¨hó»öûƒ §âÒT<1˜PJ}ø‘âgººº8zôèÿ¬¯ÜY³fÍŽ––„{b?ú\¸ŸÈN]­5Ùl¶±Ï»ÂQJÝ˜Ü h6UKnªÑÚÚJ¡PÀ²BŽ{W²¬'dÏÓûØ¿gˆE}]Ø)iø¾Âõ?Ä÷B,ÛÄ4%¦e`Y†©”AèyÚ}·4Éô²­Œg7Ñš¶±êãlÛ&›Í266ÖhÕN~<ßÇ4-ʧS+г¨ÇNg³½ÇŽÆNgÙvÍé^º‚éñq6]z%Çÿåÿ0|òk·]ÅŽ¾O®¥@*›£R.á8)†ûÒ³j={ù1¾”ϬÈOV‚o×½‰F"¸y‚Öú°âÓa288hAðÖeË–ýu©T:ïéðRn?±°A4¥»~¢n ‚à¢æò\¦´¾,\.×ø9Ãô8%®aéRMax?û¶O2]‚Š A¼Ü´^›×±‹–ˆ ÚrÐÛ ¥¥›9ÛJK&Eʱ1ê°Å³ß†‡‡gŽ_U ßX´¨5|œ–”dñ–mŒŽŒ0xüV&ÇêK®âÐöGYyÑ&´Ö´w-býÅ—±ë±¸áÝbÑÒ•Œœ:N6Ÿ'ßÖÎȉ~ïãÒ·¼gx*Óý?öœþœ‚ZSÏ”Ž£üæ=T•R”ËeÇù ˲þ"¹aÈK½™?© Å[LÓ¤V«ýâ\½W³ùlB/^L&“i˜´ú>íœàZé°¶°åB¹fàùšP%®N´Ø¥3 HY!Ò–Élátîbri›T* h,ËjüÝñ<¶†éÔzU¬©A6]½••7ßÈ?þ.Gí§£»—ž«9~`ù޲mÝÚõ/» ß÷X»ùúì¥Ïó,½èb*Ó“TŠS Ü ˆâ˜'þ×ç¿ðÏÿÓÕz¨©@?g6[6à|ÝÌŸ0È †a|Ø Ô„»mÛ.V*•Ÿ‰K'³A×ì[–Å’%KÁF ›¨·ƒˆ«˜–-¬1wЙ/#ô™4‡Œ õœ›Ö/€QÕÊûbJé•äRN}3Û¶¹*¥­­­QŸ¿ï£UH:(³¬#Ϫ͗3vzÂâåä ¤³-LŒ¢&'Ie³Øñ$×¼å]ì{êaV¬ß@¾ÐF&›cÓeW±ó™ÇY±ñbT2rüxX“ÆWŽ•Ô}u ¹vúZ^Có'²úÈÐ÷d2™?V%{ᥔ´¶¶bš&aR,¹¸Yö ÚÚÚèíí%•J5@ð¼!%*,G˜p-Ÿ^CG0È’Ì4YŒFÙ!ñµ¤ìÛŒúyÄbÆåNž¬cà8dÉý°âÍtMÓ$ –õ-¡7gÑžK“-´ƒ”Ô¦&(Ž ±|Ó6½ûë¤2Y4Q›xàÕ8¼k}ë6ñà÷¾M÷â%¤³9Nöæä=H!i]¶öñ{ŸÞó±i>|!Aö[}èIO>Ÿÿ«T*õ³ñNÇÍ['B4f~Ù²e´··sêÔ)Nž<Ù€®y+Ä%K–ÐÕÕÕð£ÂP#å8aióô ŒÁ ÒU7Мz8UìÀ2|lá"•a…ü¶%x²Ó¶IÛÇ1%§MzžG©T¦XœÆ0MîxÛ[iÍç(´·óÜÃ?¦X>É»>ô Œ òÀÝwñ¦w½%«ÖsêÈRé4•b'bøøúÖ\„B°ûÙ§8AP­¡McÏ£;výáè“»¿*¼ ² ¶ºi{KGGÇç%q䙄-)¹‰l&“aÆ ,^¼˜Ý»wÓßßÿ¢¨oãÆ½D…0ƒ1>FíÐ1ìj@{g7iã)çù¸®u8x>çç"Æ+¤õ8m«òø"‹”&¶mÎ-6ëåJ…¡„´´¶ÒÑÞŽí8¸žGºµƒöB+Â0èé[JWÏbv?ù(—^ 'ï§V­mi¡R,b’Áþƒ¬¾ø2ö½½½\qÅÑn-Ù<¹ŒOfò8fÿ …Îz¶^J÷ú ´/^L[G;…B í…<í-Y:[3tµfèlËÑÕY 7]!ò‹Û\œ”gÖUFcS}ÆFGxî‰GØõìSÑdð¨ ÅÔä$a¨h_¼Œƒû÷r¢ÿ©tš-W\Éà±#Œbãe×à»ÕJ…ÖŽN\·Êcßýc§=kÑÊ¿Ù5®/=QR^M\È ]pÊV7‰­íííÿN§ßéºnCUâ{ÏómËÉÂ|<&Ô²¬Fß¶íÆÎy?ü0žçñ–·¼…Å‹# Û¬Áé~Âþ:ÖoFt/¥Z.Q«”±M‰g¸¶‰_³ð‹ÐsQžKèÖ @ÎAŒMÓrì0¹-Û8>lFã|Ÿ©ñžâaB$Ò¸nL6K­îsú¾O&×Bkg/lš¥+V±|õ:VoØÈžgãšÛßN[÷"JSìn;™üÿþŸ¾òU4»ôè—ýDÀVwö×,]ºô_lÛÞƒæºnCµša‹ýµ6Ã0ÃÃ0°,«‘®Y³Ï󘚚âÆoIJlRi §ÜOñÐI k6cô­¦V­ ‰–ÔùŽY?,<Ç$pMš_Va lA*CØ?DÇ¢#„=8Ü_alàG²åªké]¶’ûP®Vñý ±2½Z­6†,/Y½žÝÝÏþ/°zýE¬Ý¸…á0><Ä¢¥«xᱯҾ¤“e[®D;¹Ñ½w}k—Žf튟È.(ØÂ0$N_ÕÝÝý-Ã0zc¸â>ªjµÚ/é³5Ãfšfcs²æÈŠ+( d³Y2Ù,Y9„wô(¹î¥dÖmÆ÷]¤¶0Í –)ð}ß1 lßøBá+?4P¤PhC£uˆò-‚¢B a'ãÇèZÔ͉£‡HçÛ"'ß󘞞bI_A4þ¿0 )ÚX¹i+Ü÷CíÝI6›aôô÷}íK\÷Ž÷²ø’Kií]ŠÓÒJkKþ߽ᚫ¿ôÐCÿ' ´ ¶zçî­ÿâ‹ôÁâçbSš\ùÌØ‡=N4¦i288ÈŽÏóÖ7_u¼ŸÐ5É_r1¡Ð`ia†K*¼²¯4©lçH©…Æ'@išuŽ8Æà©¸îŽw³rÃú÷ïeùšuL•«¤²9ü‘ÆGÇ–8}†!A{¡ÅËV2tìÅÑ1¤m`´vñäŽh)´£ÂÏ­Q.K.¹dÛ'{zz<11á#S“<}ð8Ù‹¯£óM3½ûyž~ðÇ\sóíØ¦IGw‡¸|k–uŠÉÉq¦§§‹}ã¿3JÝdɶu0ùì“èL‘ëÄȵ€0ð=ß4îC­V»²¯¯ïV¬XñÙ­[·âº.ÓÓÓìß¿Ÿ055uAíYuAÀ¶mÛ¶k®¿þú/û¾ŸŽAŠ,Ž0“Ñf\%h(ÌH{Ä@%Õ,¾·d4M“ÇžëÇܸ‚·_RÀõk2 QÕ1 åc¤L,Ë$ Tèc™àŠXèР¤—µ{ÊTh›˜`EW¶i‘Mgò,iKrùšN”[D:)¤ˆ–íiÚ*šÅ]?~Œ)Y`Óõ·3x×רþÈl»ú ôÆw«¤³yº/adðƒÇa¦Ò;z„T:ÃéáR™,ãÚ;y¿øï6 ƒL¦J_ßFGGÃ0fÀ–ûÒc{7¸V]yLרÝ’râ¤7oµÝ¬^Í&!öy’‹œc ›U­yKÈ´8"üÞÝw³¨»›­[·bÛv´ÓòØ8…žåôïÝu|„>ë–wsïã»8yì(×Üø&îù×opüÈ!®½éþå?ÇáCGY½y½K— ¤¤R©P.—ùÂØœÇæ*ù¡1M“ééi …ù|žr¹<#Ó¬ú–e!„°kµÚ¯†ñËç#ª´,‹›o¾™'NP.—Ï¯Ï¦ê«Æ_©Ã0墎\êëåÇ÷mðÇJt^¼•î¾%,ëigÍâ.:ÒVÔ÷Ú]&aˆ¿N~6ø’ê˜ôóæóåâ _­V¹çž{âY±õd°•ÊÑ»jµj¯Z"CÕËóü3ORèìfÍEyòûpÝ€öŽ.Ò˜šžÄJe ê¿3YjK¦o’Å>kܹ/"nöW“ÿ_œ> ‚àç´Ö+ÎWùжm–.]Šã8ç­2aFÊc¼bª&„6;ZRÿP}d×%þX…öM[0- ztå3¨e=C`‚£¾G¥ZCʹ(î‹ÁlZÔ¸l6©³œ\ÌqðàAöíÛǦM›ïå»U–_t)Gž˜ TE èrFl›ƒ{w³xùº÷av>s?«6m`¢èR*»ŒÓÓÓû"ÅžÍ%hn((‹ –-[Æ©S§Ñh eœÜ“ÂZëBïþø|\·â¾¾¾†Ç–áe­®J;¯ lJkRYç¼{ßâ&¿ö"@£Ü2†™%eJ²c–%ɤ-?ÍÉ¡Q¤4°LëE¹Í¾ZìW4›ßfàâ\R3`ÍjOÌ^»vmc~¥RÁN¥YÙMS:`ÕªU¤ÓéFËx|“ '¢“.DüýÖÖVz{{yQ\,¬µÞ"„¸ øáù¼ŽÍX9}útCá*• ñ®} UºhÌ©´^‘„‡%ô'+Ÿ§Z­bÛ6µZ ÃrXzÑeìùñ×¹êΰåÚÛøÇßÿ/è¾eL{¤ÐèºTJ5^7>>NKK ÓÓÓÄ¥¹d$š¼Ÿk¶Y.—£½½ÉÉÉ ÞÄ‚ øGß'„øáùw‡ÄŒ­ÀËårc"ã8d2™VbNØ¿rÞUÍΦoWûÜêŸÀZ²‚2¡'° ¡«1Œ´¶e’³}D‹ISÔH[z;LŽœšäÈÉ)Ƨ«õüÅKÿ“‘i³ÿ݃z†Ym-~ýÔÔCCC3æÄ¥R)&ÆFè]w þ“/ñ¦;~–{þö¯ðÂ2Ò.–À2ÅŒ.”øwÑÓÓC>Ÿ§R©%³Ï ±R'k>Ÿõž?r¹\cï‚Xq‚ ˆ÷$@kýf­u;0þŠWêç¬V«ÍÈaÎ Ûøxñ<Ãøï žxÓ”‘J¢}M•ŠÐU l3Ú.J˜B“§-@«ÄÐSäRY–v Ž˜¨09íÖ7_3:?â‹4pBP/Ö«É“wÑNLLÐÙÙ‰mÛär9LÓ¢P(àûí=+¨TÊ„Åqz;sL¤Óˆ2sFÊA011A.—#NS«Õ^ÔPLDÏ–Ú‰ý4Çq6ù¿Æ lšf¯Öú ZëレU¡b±¸@3*ÎoÓa파ÜZì$ߙŪH„Ò„®F˜ !}BÏGjL‰ò5B åcë¼ãA.Ä *BEj©AO«Í G5'FĬQèl ž°qÍbú:mî{æä m¶h6ÆFÇèîînl‰•J™tʦ»« 4tõô²(ïàel´öf8þÍù3ß÷©T*d2™FKx²"’+ùuò¹¸†œ¬óÆÝ.¥R‰t:›³·¯*l ñÛ¢B|œWU3Sââàø`Ÿ_,ãç Ì@"T PAˆ0¢]ˆ•’ˆh+k­„Håc£Èš:å!…A€Va:`ë²Ï7ž|1lI•ˆŸK96ë6]F ,éåÄpÓ˜¿~X®”˜žžnÔgS)‡¶B+½ÚÚ0‡‘ý;i©UXÜ‘âÐ1V³œ|.žœN§gm—J¦sbÓ™üf–ÙŒF^,Ä©L&s½Â$w~a5O:Öù…-e‰Kj'N£Bß«a{ékt ÁP®0=¤°Á4"U3A"´BªS„Ø:$#«h3Dd]t¢ølZ¢©¸)ŠúLÄŸìf•X½z5Ù\+^ÅeeoŠ¡qw†Ùl†Í4M‚ééi´Väs÷.bùŠåtwuQèèdzð¾÷u:½ëÛBžÉZ¨@#åÜIçØ73MÇqæT·d¤4—ÉR[ìZ–Õ!Oò¶m{½išk€}lJž¿^4¡ÂþÈ8Eèy._c8!*Œ€ÑÔw)5ÊÁÐhB…Hb — ¿‰®åï@ý6ÊJBß§#ã²n±ÉÎãiô¥®0 ioogåÊ•LOMN·ÒÖÖÉ¢B™¡IÍíH¿>›Í²lÙRÒ™4==‹X½j%K—-£££ƒl6K*›å{ÿý?žÆ´¡pì(—lÚÄcOO͈éˆÙÌKÁ%« ³ùoIøâRÚ4£= Aèúˆ@ƒ Ñ:@ E¨k ZËhÓ‹]w`ï ç PKe(KhËû¬é.qèt ?PHCa¨3&(›Í²~ýúFš R­‘Êõ±²w”ñr¥1¤, ªçy,_¶Œuë×’N§YÔÝÍ⎴ZI9v6ËŸýSŽ|ëŸXœ“Ø ¦ï}Ž«?¸o[;{T •Ä0¦)gäÍš{Ëš‡á4`šÖÉ5I厎« õ@b‹a_»à`“çs;!„aA¹µúžéDûXH_¡<…a…è ¾Á…a€)C7@õ=„" ]ªÓÛ™«X²¤U¸á=@à°Ëä­€%ÝY,cšSc£SWD~L[›C__ù|¾‘[ |•-PhÍÑ“c¨œÃ4fúH¦iríµ×ÐV(Ëe)ò8¶…R!X}ùóä§ÿ€¥9AVIL¥ JãŸÿ!W¿íJV_µŠCc’±)E©¤Á“Ì5Û,—Ë5àˆ›=g«–ÌVîJ~?6©É-­õºfÀ/ØÂà<¶’HK‡!Z…h@mÍn„ |… C0 tà!-­ˆ6ÕÊ ¡>¶PaM=Í„µ‰RK žsU±Ÿ6ç²ÐIH•TqœîVIÖ®Ñ ™¬˜^J&_ˆ6O«·Š›¦I­ZÅ4%N÷f®êXÉS;O0<|ºq¡k®Ë®¹š-[6‚¢Ï ¨¹%¬ŒÍöïþ ýéÇèKkZ ÓÓ„iV|†þÏ#8}»Ù¸n1åö¦:»8X,P®s×ÚÚ:£¹Yáš#ÓfW!NT7ö•RÝIÿõÂ-<™Z¢Pšh{êP‚Ö¨@£<Ð)Â4PDê!5*ÔHKáW„Ö 4¦Ö´YeFG` ³œEÝݤ;®Â×8þ$­i¡lÌš!m„®€ªQ¥´! ‰Yw¨MÓ¤³«»žoKÑÓ»îå¸ï¾‡¡_í œŒÅÁ§æþ?úK„O§mbùQt*ÐF ´åã{'¨m¿p-mÝxF…³ŽãÐÖÖÖðÝâñ§³¥?f ff³®¹Ù^óšÃæ{ç1‚0ŶIXQ(_¡¡4A-D:&¶0m­ÊŽ@ ¦FZÊ £æ'­h± òSÏ22v)µÂ1Rk1í')ä&0µBbbÊ[ºXF)ªŒN ­eÃFO· Cß+Ó’O¡¼I: yÞuçÍœ#›É°¸·ièh£4L‚ †Âf¸ÿ ýÙ'ÉU‹äshf¨QJã×÷SBÕ Ý“¦÷ÝWÐß»Žò€C:¥ Cƒä<Ú<ß÷Éd2ttt0<<ü¢ÆÐdcs x¶œâBs^¯lÑî%ç6BĈ‘±qÇ5a¨ üH¥t¨ÝaøS"S’° Â)PZ!Œhßu탎âUz²Š‰Ó?d¼u}}Ëñ 7`O#ºŠe¦¨Y‚TÍŶòŠŒNíÃé¹Ë4ž;mjzº[( ¤Ó†!Â`ͪ¾úið@F 8h,*Å žý›?';>DWÖÀò5~ 1T–vA× ôÁɘ´Þ¼yÛ¥ìó{95hJEûʇ¡9#m‘lô ‚€l6;'pI8›çß&ë‘Mï=Ù\öº0̨:¿y6óù4(Ej‚PÑ ­ 4¢"ìrå ŒŒ@¡@:š° ZEñb>eÑU:©ÓORj뤵°‘ z9ãY¤Èc§qÌ žã-ÂJñJØ‚aäÑa™EÝ9º:ÛÉçsض!Jk´ŠZ¡Dk;ãÕW¶žù‡ÏãïÜÏ’´j…Òv°26¹LΠ[3„­øË{è7ÚØwÂ& Ò)sÆôÉ8ë÷„5w}d2ÚÚÚ›¶dÒ7NÄ Þäc¥ÔÄ ›ÒÆy…-Ðb¿(ä"u / ühÓ;*2AÚÈ(_c(fô=m€´4ÚFt[@w^21y?“cÛhmÉ#ÛÞŒ1º|.Àdʃ=BØ"È ¥}Ƥcã´w.§­­…\6ÝHØ*­ ÃD× ¨«ƒa`;û¾÷mü“»YuÓZºÚ°rYuEHh¨P6AjåÒš.²jíå˜Rc½¬ÂÆŠ­¤Šl'ÅС] Lô£·\Á£¡Cñ¤¦æi\ÏÃójh]ÆãXV´«]6“&›M“͘8¶ÙÞ7MÆê?Ÿ$n݉G¢Æ¯‹´$ǺÎ6ã¤^5À²,ÇAkM­V+&§”ŸÚçùM¯ÏŸÜ ðÔQ±¨í J;‡A€”¿V ÌT´‘€Ðº i×[{\ÐŽ®oá)J#úîÙº[lÆÇ¢8rmmd]Ovàk¤Ze¢<«š”¥YDʲð}…W˜)€i ÂúVžR€r5ÊÓií«@"Ð6‘òš¬aЛ™äðÀ˜èZI×úM¸å÷Ñêþ5vÆ"šPƒéjDV²(ïPêgjp?Ý+·xµ¨ &¨§WâOmôµ4LÜò<ð{‡d²)lÛzÑzˆd¼šø¹f³—,ª'ÁL~?†M)ÅØØù|ž\.7£ >9LǶmÒé4ét×u)—ËtttœHL|I)ÓzÀqôèQúûû_öâå(õœ_Û®5TBóûΚÞ_-ÂT#߯¦1kD&Sh‚*ØV8UtÒõ‹#u“¾@…@¨é̤˜{’ÒÈ ôg;±Ë]´{&©<àGÛ~J0 %-(˜!û¤sùft¼Ø¹¾ý¢ÒÑØw¥4H‰W.²û‰ûØw¼B*“%•r^´ü/9¾!6[ñ+K´ØL6G IX“A„Öš“'OR­Væuzz×uiii!N7Œøo‰¿ëºŒ“ÏçÉd2Ç^®šU«U`Ê„ö¬Ã¡“»;y˜\×Bßo˜ÑPi´ÒÑVAaÈѾÏP¹‚¦Éfœ(Ím=1(1l±º5+[2BL®JÒZ7Šè±ó«S©TâèÑ£/ò“|ßg||¼±ÿU6›m¼§çy–ó\.GKKË„mÛ‡^ªš†ÁñãÇ9pàÀy]7™ÑW ˬ|5é·¾ã¬èúO•CŽDߣ&ðŠ3%&„5e ”‚°†µê¨P£H[cø ¡¦-e³È=ÎÔÀßÓ¶ØÆ0²B¦¢ BšÃÔØ²¶ §k ½ð Ëox¾çÕ÷¡RõÀ„ãpèÛÿŠ®1¦–à8ÁŒÅ)18É#é”7Öü¹¤26§:âºfRMvíÚÅÄÄD¼øøEýqA099I±XœaÚmÛ¦¥%Î!¦*¥NŸ« 5 ƒR©ÄÉ“'9|øðy¯>¼"Ê÷5nh|ÁÞ´â×J¤h¤!ð\0l…W•˜%ÝE¦¡«– ¬E¦ÕL×ÿ*%R#-´êßšeí66I§¤_E‡†ŠfHY‚ö”ÅуÏ0¾æjÒmݾ Jc8'}”ñÇ¡ëm×3¾[‘N9/‚&©f³ÍQfóz׿û±ï/œ†hÍêŽ;æ³ùµÍÎyì³9ŽC6›¥µµ•|>O*•zü\ùX!'''yê©§¨T*¼7Àz¥g…ê)cåâûŒîÂ-ÁÄ$†i‚¯¦ ~5R7aG]!†EŸAQcXºQÜB  åEA…)¬L+AçÕ¨L£¸9¶a™#úI ¶9Û T9ý̽,~Ó{P¾Ò`¦†¢ÿ›w±|u£A ¥jØ)k†ÏµÐ# ålj–lˆŒ[¼kµaÒßßÏ~ðƒ›¶Í¶H»yÒ¦eY¤Ói²Ù,---d2lÛþñBÓñ0›þþ~öïßÿŠN¨Œ:uíWnE¼´³ÿ3½mÍ-S?xik¤¾'pk £"1eˆh&/ª"%´£¼º^IQJÄp@!~˜a²ã=”é&˜öhk»˜Ö €5ô ¶VtQ 4i i‹©CÏ1±lù•Íäñãøê?“öZV-áùq…•0}ÍŠ•Lg$ALšÌ8ÕÑ\–Jîuš-<È·¾õ-J¥Rãõ͹ÍU‚øw9ŽÓˆDÓé4¦ižB<² CöïßÏóÏ?ÿª ®¯ˆ?wi‹r> °éZÜÚ¼âÇ¥gÞâONÕÕM㻯¢±ê‹–E´¼Ï‰’½ÞtÔÄ‹NÌ_× mQ “«˜ðZÁ£æÖðªeTË%¼§ž‡´e=¥ý“9SÒjL=r7°©ŽM0xïÈ–Š´´9Ô Œ„X¦1c>o³™löËš!H–”’ë âöŸ´ >ŸíÙgŸåž{î¡V«Í59Š!™jiö“‘p]¿+¥œ<[022ÂóÏ?ÏÐÐЫ[A8=V:çÔFg[†LƦæ„óA§5f>ÿÇÙ«/ºeò;Oâù‘ïæû «ÃÃ[ ´Ô„2R³ ¢1L…´B´`˜Qg…`I&ËŠÀóYÚ»˜š[£êyLNM’®IL_#l½$PˆPc#hµ-TiŠêwÿ•RHÞKBÛ²NLAµâ“ËÊy¬æ¡yRsJc¶æÇäR¼¸ßlpp|]»v5ºlg¨“®9¿—TÚÄâÿ3—coÛ6“““<÷Üs ¼ê£ìM€_ø¿¿unª¦5K{ ÜvÝZn¿~-­ùžί ¸/µiå—½'>àˆê…Rã{‚jIc9¤ÂLÉ(éjtàã»-¹ð&‘î0ZØ€F«v’“§úÉeÒd3)¦¦‹ˆ‘=„µ2„º¦ÂG¦rh4Ò-‘ÒyC’ ­Iðü{ÕR¯E%¬Ð<ë|¸æñ ±Ò7Ê›KL¾ï3<<ÌŽ;xî¹ç¨T*ÚéÙ ›ïHRêñæA‰ñ‚é;w²ÿ~jµÚkR³í {.·žÎ<zç66¬îfù’žâù³8™†\á >9ñåû» Ò#Ê¡Y‚LNoX™zmÔðñòkp×¼“Ði!eAzø>¬‘Q¡…°`|2àðDÖj„™ÁñFYÊ>ºR!a‚Äú[K¯@JÿÀL<þª5¨¹`¡©CèìdèÒKø×GÇÈgÓ¤R)lÛ®— RDm²ÖÙìW5§'’Á€ïû |ß¾}ô÷÷S­V¯Ÿ­=h¾¼^Ò¬'®žþ¸]JùÃf¿lllŒC‡qòäÉW°¤Ê¾ì8th´È§>ÿé”Å­×®áçÞº…•KÛë³rÃdèÓo.íùoÞu›?Wº÷Y}šS§N188ÈôôtÃgJšÌä™ùT­YõšUÕ0ŒA‹!>}ú4ûöík „¹0š'ÏíZóùö½{¹÷±Ã\µµܹ¾ÞV´Òx^<_^nZs]zhâõÝG‘†B£4§£DlJ+Š*ËdMÐÙi“6;ð|©b é·“ó†&Rj ŽÂJ…¸Z"•‰ð¡VR„ÊdÔ\LÚ«‘Ї»ŒŽ‘ê\C>Œ(ü’¢óÖKùÞ`=ûdppÃ0Q^&“!“É4T.6{qáfl{ ô-îíÕž(26xáƒ[Rtl]Év+ÇW¾õXCq’sÜâéccc/¹ä3×êøsQµùrm±ª9ŽóIÛ¶w‹E:ıcÇ.Èí„^¶ÏvÖ/×.âʭ˹jÛrºÛs(X­¦Æï›üÚýËôävÎÂב)m+H°BŽ=”—\NK{7¾WÃÞEÏôNZ³†îÚ;ñ»¶¢THÖ1qŸúÅ=Û¡>]{H´3µâF¯X’ñ„Oþ€ÜÈ(ÙU= oÝÀ§þéI¦§*3Ÿ- ºççÁÐ ÙB¢ÏÙ"âØoL§ÓßTJ½{xx˜#GŽP*•.(Àft¿Ò°%oÝ9®½l%oºz K–®–cßùçû:D±„ȘxJ“Ë ²YA1 ªfS¹tÈi މO¸hîæwS+MS«VHåZéHI&¿û7øÕIÑ 9­òÓ=ÑÈ«ñA²Ót¯]DõÊÍüÙ—¶3tzrÆÌ±ùÀ9—çæƒl.Ú [2íÒ,$?7<<|óáÇÇã’×…v{Í`kØnCòÆ+VñŽ·\|ÝʼøæðWïëR£xŽ0 %#°SPQ OG ÛÙ”m|×cºg ©­·ÓÕ–§Z©âù¡ïã?ðO”G'R¢´ ì†L”5®é–mZÂÔ–uüÕןcpp¢ÑÚ30ç `óëæ‚-©l±Ém­9@IÂ'¥ì?xðàm###¹€7¹}Ía‹·c›ú¦7^´í—ïØôõò÷[5±÷ž-qA!#°ìhÀ‘Ò"Z#`€ç…ŒZíèKngÓE‘rFÇ?¼gÇ÷ð@¥ìaÛ’ø,Äߊï“çj®ÜÚlMÙf3£I›VMíêïï×øøøAÀš½à8Çï]°°‰|O4=ôt·:ùÀÕÿ÷%yñ_´=]>>Bk2iIPN)AT˜ò”å`X¶_%‹Âå+JMͲèÚ´”êÊ%ܽ}Ç·ÇCÎïäŸíþ¥¨Ú|°Í6&.ß­V«}÷СC¿èºîi ]DÏ™ž$½@Ðô…›XÀóg{,êG×^½æÊŸ{Óº?ÌŽÞVÛu92ŽC|Ê|-¨„Q¤­5 ¦%f{ Îê%œÎåyæd‰Gw 01Y9kgËl€œ ló³-(nî,ÁBm||üO:õ©0 5`7¦fMÏóÜB Óç¾óÛB šë91ËãØ÷¨f3ŽyÝU+ßzùº®¯oKߘ.TŽ Q™Â¯z¸¾ÆÓ€!ÉdZ;[H/í¢ÚÞÆÉ@°ãè$ϼ0ÀØXËH)æí:Ë©_Ló½ÇBü¶)›Ã$BÚõ܇F†‡þ°8=õ©Ÿ'•L%@šëX(€ú%BøŠÂ&š€™ .q–Dz ´äc ¸ë×ö¬ãU«o_ÓW¸*«Ã•Nàw+/0‹ßu•.YYÃdØ9yÄ9 Ñ’b鿥\»¡OÜÖ–½P˜\_àúPó5A¨qƒñZбªCÕ7PJG{ ,¸ÙFÕŸ ¶…øk/ªiÖUL)¡Å®Ñ‘š¦#U&cئı) ²)A>šD[=8¤ºoWøõÝ'ÕvÀ«Ÿ£fíM烯 ùԨꕆ-†a.õó(—˜¬äc3˜UÿZæ²N±þÖ‹·oY*o°MZŠ5(×45ܪžÆ ÀõÁ Àó5Ò¸¤ä;L¹iʾ‰¯êõO¢ã\+ U»Yï…¨ûaÑÄ&Kj2–GÞ,ÓbWÈ[.Ž©±-‰c  RØ–À1!eCÆ´f¢™×»OèǾöDð厫íuÐDý>†.œ¸XùÂYLïl&x¾à#\ˆ9}9°Y LÌ¡Zrõ2ëïoÅ?¿¬S¬{Ï5æ»®^c\/¥v¦*Pq#«ÕÁr}]Wµèq­hü‚P*§L*C5t¨øž’Ѥ0A¾: ¬{Î `l¸e2)¦Ô8f4G.-kdÌ iÃÃ65–©Xt@ÚÇÇXXF´J,eƒcBÚ² %á#{Õ{ð¥£ÃaÍ!ÑFiApÁ<Š7›ÚÍÌÆïýŠÀf$Ô†&µ³@v6Àš!³ëmY–|øzëw\fÜ–²HO”#ÈÜ:d5_㨬¸ªn ëÏDƒúp° 0 ¸¡M%°©nhá+BF-è ˆ¢Ñó™P¥¢³9ú PXR`Ž’6|Ò¦GÊðHÑ^åZ´Áˆe$³ë@YѽcQ‡+2å¦A+^ _{VRóuõ‹ßø»ûý¯•ÝÆ6B^B钠ͥzê%øwÁÙÌéK…Íi ä7¾BðCçë(€F'éð0ƒ£E&f9ùÿ·!¿©O,‘›»XlS``H0êÊgÑf6ýà /„\Jq ç²)È:‚t]ÕRu-í¼@3ZŒþ—Œ©\tÊBF %á_~Ïÿê_ÜíYkjuÜ:Xþ,ÊÎXèyÌk¸`>sz®má"a>Ï ôËbÈR€ùÖmÆõŸú ó‹Yòc¥²@EÝõ£Âz̓R ò)A!+¨zeÆ[ŽGæÌWÑ…?:aý´ô¶Eßë )•&T‘ß'„ D(,©96ÂèhQ'œá0q¢ÿßd…éã8kzd—u° eFþ•eFjfÄÐI° A_§äà ª+mÜûÑÏF šfô\{N 5 Lj|UWhÄ s?]ÓdlŒß·ýï6.‘KãÜ¿ªxLÖ¯Qmžª@|$ÓZ*‘Ó“Mÿ»J¸SF“êÍ«X Mu0 dœ%X˜Íg³êeû7o·Þùûï¶Þ_óãåHY"E‚r-2eW3]…|ZÐÛ&ð‚袙¡Àºq¡"‘Ž&Kz¦«EÐÕ)ƒeD)T(A44³e„Ñ{ÚŒ)ŸÕ#Mæ&ù‰—ÉÐñQ=Ö™×™Þ6‘•2R]S‚Y‡Î4ê_ס3%,iL–ÅšF×»Zt}l½«êL›†ˆžXÚ) ”ÒÃSZ„uEŽÿŸ¨û[ €ñ¢â××kõ‹ÿÛý4P™Å7›ëšéÄ׺鞦çâëo°€}²äUm¾2”˜'‰ÛœŽý³ à|èzóÍü~ë5_‹R-òÍÊ®¦TÓLU`²¢™,C± ) ½®Gj˨Gñʼn¦ŽÌc´Œ.2/«ºe=²ÛŒŽ8Â;câ"%±¢ÂƒCjPŸ,H˜ ÙŽð÷žRC^@`º½õ+Q!¥À¬ÿž´ €/Úˆ¦÷GàÔÕ74Aû˜‘ªBSÈÿȰšž¬hªžfºS•è|kÑs^“e͇¯7o¼|µ¼¸~ÎÓõó/ç¨i/4%1[ÕÈXÈëå9¨/±=E4Á›ÏÖÿôfë)ê)ŒJµ3'¯XÕT\MÉÕì9¥Ê¢œuJEýma~A@ãÂ(]dË„ª§=ÇDYu³dH)`ÝÔÆ@Èú¦€¦ûÔ`Åm(AД»j°ñ½ªGeçq5(„ÐRFЫz„ Âèo‹×s§lÁ‰1]zh_8:ZÒ¾¨ÿ] ê:^  •&P°¶WØ;Oè±OßßÏ áȾUœÔz¼¤™®jJ.LWáôÞW v9­+@¶îº˜M×|¶êÀKéæ!‘}IfTÌñÍ’š”U=GC"qûkÖg¾ç?õ‘7™YÇ¢Åõ1Ë®–ãeôXQ«á)íÒå玅“ƒ“Ô¾uµ¹Î4"ÿÌã$nýb„ÑEŒÁ™ª<Û¯Š“e]»õbcQ4"«®õ‹Ì0?Ñ@Â=§ôÈÀ„›4•ø›£6shR?uXÉëÖËÅÒDøaý$È3~¢&JgÔ<ͱQU™Öåïn§·©Ôªn™YÑ-29aåÓZG.Bh‰º‰ì;¥k'ÇÔÔÈ´žþ×gÂ!ÓE.%Œ¶,"Ÿ!P-Õ˜˜ªè‘‰²>©4妔•žÅùWsøpçR•M¾Ý‹š'5›JSÍAsIj¾¼š]79 ¥~䡾=|Jt¶¤)X†ÈÕ|mOW1Ê®J5Þ×ü¿~ÆZqû%Fë#§«šÉЦX…rMëÉ ádEû'FuõȰªœ×5?ŒÛß¼ÝZ²¶G¤GëGœw ºÖMî ÇÕèö#êÄ,ªÌ᳉„ßf%ÒÝ­¢pÅ*¹xQ«HÛV¬ª‘¯fàøî Ÿ=ªÆ›¤ZŒ”‰ÙšvÆÆ° ¡-“Ðø~HíØˆš*»Ôæ0ïn=¨Ô2P¬Ó@ ¨Ö.ùš­Ê æ©,¨9j©ªÙw[HêC$ª4å׿‚n®Ãl ²õ#Wÿ:“0­±o‘®?¶99£3/²-iÒ¬ ÄÂH=ŠU¸A㟠ÈiÍçÍ[Å}í¢ˆ(Ý)¤Àx÷…cjàðiu:q’þXФjºéƒf&þÆÆß+NW‹hYT9)0D='5ZÔ¥ái=åúT›Lr8Ë{Ç©¯ˆWÿ»¼¦ç¼¦¿;†®š€¯V?Ü&—@Ÿ%åÁA£©¶`ØŒ¦(³(ÜÙº8ŒÄ×f"8p`¥ù6»)-â$€³>Gòâš³T0šÓ-`äÓ"Û•'ïXÂQ‘¯§«º:<¥§E-Qæi>Â&S£g |fKT[‰¿C$ Þ,°Ä¿K5½·Nü]Íp¹³À4•«¼9><Íp…óègS·ù5u2ïv6ØÄ;;櫉6ßÏ•Ø5@Ì–ðµëÀY “°³ün³Ie¬¦ŸO¾F%Ô#˜ç¨³Bs•ã’–J¼¿Û7‡‚ªY’Ù@ ç(À‡ó$mÒ²Þ75_WÈÙ’º³9ÿs É|ŒlÊɨ¦F¿°þµ?KKÑl~žu 窿6'­Y”P6ýŸá95ÅÂ賤’Žølà³ü^54sê,…öæ€@Í£^4ýïjŽ·¹ZÍÅB£Q±À´†nJêYÔNÍÓ(œ¥Ò8 ³%r5šTPÎÒªçèåZÈ9˜+} ç‰üÔ,sµ©s€i¾Þ…˜Ési'ç,ݽ/Z2hΚ^Às$ÔKÌñÉVMjÇMî|åYs(^óûÍ¥B MvÎ×ŪÏâó¨9¾VM>ÔBž›¯5ü¥¶¸^òúó,IZ1KyB7ùo³•4𣩿&ÎpÈsðÅž³¨™œ#Ò>—DæÙœe5‡Êq–Î =” ñ¯æk€l~~!màðÒÖ§Î*s_m6ó"fùžžH1Ëû©yÔälëæ HÄ<@‰(ÙÙîœ lÌaFY ê1ÇýB_»¸`á \ÎEÅ\ˆg¡“9Ìë\¶z.@aaë惑³@u¶çXÀý|ÿç|çDŸå‚©Y‚%Ì¿6àl?·P_K/ðCµ ÀfƒMŸC€ ΩÎö~s©ÞÙ ügSqxÏÔK1g5ç`’ôY =[ðq¶÷àž;?ì%q0ðÃâeÐ,f9 gS“…@!^ÆÏž *q–ÿå\j†ô¿·P€ú3ç ® «1ÏñÓ{.Ä\9=OÔ»¿i¡pžëëY€  <¹úŸÓ ’s€w¡À¼Ô1 ç¼Jþÿ?Ê'±ä(IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_add.png0000644000175000017500000000720711273045225024256 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF¤IDATxÚ´U[hœEþΙÝnvsÙdw³M0‚Á¡>åÁ´^@Óˆb°Ú‹QÚ  ^¢V"­x‹V%xA£"Ó‡Zm´Š††¦ŠAmƒ¨x©±Ñ”4d7ÉnößÿŸùçøÐD“67cý`à0œ™ùæœïˆàÿD`:èî>rMz<›ìéûa¤4¯Ž–Å¢JRbí®›ï}`ëúôrx:ð}?'Ön1Zæó”õm3Džµb?ðù½y÷+÷.‡€fJôq×á ½ßüÔaUñòrAh­‘ÍL`b,|ÞyÛh³ýµ=;3ÿZ"ð­ø¢ÊøÄPÊ-!b@ÄBk뮫i¬»áêÆžc}½Ÿô¯$ «@ ¡=/™Íd*œÜd¡“›èÝ—[ÞwAÝMëR{÷8æòíÄ 0ÅÏÍÃq²€ÁÁ?×hí®ÖZcày.rÙ |ß‚ê8€}³þàÍüŽâHÌ ˜`}ÚóZ{Í8.r6Ÿ)£]÷ØœMþ¼€1<‰‚•âûXU•@}í­³r75ü¿ñ~N;ˆD ÿ;ߘoÏ«¢ilÚ¼Ñq2 ŒÑÈNŒ-ø‰ÙÌ¥Ìì3ÑQP©y ÀE¸“M Fÿ÷¿¢~ãݨY[‹ö7ß¼Ôö*®­­GÃM:=f³+ž´"]ím»í¼€ }…|: •ÅÊ+*±"B4CA8(,Žâò+ªQZ–@¤¨L Ù2ñDNÌÙh3qÏæÚ¬vCГ‡ K:Kc‰?Š£¥^ ƒ+¤,ž”D²áH!X)€8OÌG_”ÜÌhGîÌÉí[j7X¡Uý_¹úùÚž»êú›Ó}š6FÿbÅž$PŠˆ 3 1óþ×_l±ó6ÚìjÒGò<´í6ÓÜ´þ7Ï$+«Þ*,*‰¥F†ÉŠ ˜Ö2ó]Ìê”RªoA«8ílyT€½»vµü¼P%íi?°ÚqrgÆÓ]O>Ò$K’hê=FëºÅüæ¾;oéWJ}tîå‹ó…6æ’¥˜ÚƒÛì‚v=Z[ŸÖܱãþK—;px±„á3#Ý€ÜøŸ'Ú\ª’@(¸²¦zk8KÑh.?*Ë8ÓˆÄ@ÀJ¹ŒˆªˆÁ §rùQ}!€ €ÀYk&`¦–@–òšyû R'˜yÉ\{Ë&¸Pøkؼ² ®HIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_first.png0000644000175000017500000000724411273045225024656 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÁIDATxÚ´–kh\EÇÿç̽{ïÞ½›÷K«1­ Xý$‚ÒжKE­6j¥h±,)Ö%’¶b装JCAú²R葊_LiC5­V ‚V4Fj³d7»Ù½÷ÎñC$iÞê™3æ73Ì9gHDð-ÐþÑÉb˲"æ{‚À/MÄG“ñØÅ‡XY^\è¯ZõHKYüíݶµéŽ*!è@#ð}øžÑút­7´‹lmj‹¦ñm‡7çóy„,Šˆ­Å."vèh}ýêž[Û^ßû$ a'Rv"ãn4zUÆßuwU9—zù¹ú¶ÒmË|,—ËUÕÔÕ`$™@ ˆÊ0q{…;èàËÉ›º ТïÕ~°>“NA2FëÎ-hnïDi¡‹ «Ñ}þî^~'ŸZ‹öýÇ1É„Qä†>_×°6>À7:^.wž˜R D0žŒ%ظ¾¶BI¡ƒ­/=ƒ¢Âd'ÆAD˜¢Ž’àøôk½ |ÿ{ù‰ˆAÌð¼< c飯,‡çyxqÓT”—"“Í03ˆ`³?äyù¯f(CÅ™¨›™¥J)üþÇŸøðÀ!Äbq(¥päè $’IØ–e`Å×N@øÙÏŸß”phÿn­EN³âqfe¨¬(G×¹ìiï@*FÏ·?`×;{'a˜&˜@ ö'CøÄL/§ŒD~dâ~fÖ–eá­¶÷±¼v%²>ãð'§°ìŽj þÃÇÇNÂ4L€"‚ö'âÚt/̘Œs7ˆk#nã¸Q˜FétT~ë€v))@ßÀP¾rYõˆ€ÎJ.u9ÈeW4½ü\zÞtv´hf>ÅLWB–í»naÜ´¬>¥Ì_í°=²A¥ÌWF‰Úï¾9·âµÖ<›îëÏ¥bÇg Î["Y)u‘Y]bæuŠ–3":CPeÙÌxÿ‘ƒíSvš÷ò÷èÓ… •2Ló0lßÜÐ;iêêtmssKñÖ¶–ìlžîxw×6QJ}Ñ´å‰Þùr“ïyë<Ï;;—†gr¾ùêÓz!ÉÏóýÏ÷¿^4`!¶cÇÎZˆ ìÛ÷ž7—ÎXz­’LJ†Gºæ—‰,ª…­²CÅeõ®9 —•5æÒ/ªd:v©  š÷‹ XD‰è2€!¹ÌDL/銻”p-õÀ ‹ø×Û¿/ú×AÈLÄd.ßò«X¨ý3½­ì öIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_last.png0000644000175000017500000000726711273045225024477 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÔIDATxÚ´•[lTU†ÿ½ö™9g¦C§2½¤HÐ4A¢ò`â;*–’Hˆ¨ 1DPcj$¡‚©)õÚ’¢XªFª8Ð)%"‘(ÞlmÃïWû ¥„”"Ê‘§¥&£3À†¯ƒTšÇƒh4Ž»›pî»a&“hz­]§Î¡¬4 ©i ’ I)—¹³í­=î¬×øÖU™¨€Gó`ÿ‡ŸàÚõ*,ÄûÁR„[«–`{ãÐuDä’ ^0_œö£MÖÓµÕIÇ¶Ž¹¶ù"Cth^ï`ÏÀp¶$\ÃÀo½C.¯ä²ŠJTT.DA ”D§HÌ ÛŒ´§Gzzë6T¯½pöÔm‰X¬JJÏf¯á¿føŒ)=Ý]ï ‚Q¯n("1HD‡öµ4¸“ãh3Ç9Áà&8òñ{6€ûj7×4 ß"f÷föƒÄ2"zœHöK)ÏÏú“§j÷®†ø¨±±áÊlå`oÛᥖ•¾ÅLÄ:_ÞùßÔgqR9NÍ\õæÙM^’R~>5øÜ¥¾q”Zt3Eí¹'vg-×Ó©¹ùUÌ[·n«Ê·áÐ\Ã#7º~ ï–ÆÌ3šFó´ßüÐòû«ß5¼Åó}zHÌæ?MûŠüF Д1ób!Ä!cÆEýéLÄÉ«áLH3CÁÔ¸åp:á¼ã“ƒL7—7à¿ÒŸhø¢«5sAIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_list.png0000644000175000017500000000711111273045225024473 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFfIDATxÚ´•]ˆUUÇÿkí}î¹3©£÷ª½ùæC=Õ[fÐKVãKh„‘•1¡QÑ€QD Ä0ó PéT5(ZPBa ãÊUçÞ¹sîœ{ÎÙ«‡soz烛ýaÃf±ÏúµÖÞk‘ˆàÿ”noÆÇ¥tU¼ÿ3M“ã;¶ï+•Ï‹Å%Jë•&ËV7¢èŽfÉÏ3E&M¼©Èm“ýPd[¨åHëÌŒv2‰éˆZ¶("§œµ¿Î x¦ÿé&ló+¦üX1‚BA¡"‚@À¬ ƒ¬˜¬”b0³c¢cJ«êœHÑ3Â6ˆÁ”; Â0O Zkh­¡˜ÁL`f0+°â/26ôá>?/ÀK~ö6©@y‘™L "+"@y”D`fÏÄ9Ùñ¡ÍÖKý&möiô–€F¬51iîà¬k­Òº 'Ä|L€ú‚H£ÉáøÊ™‰m›7lòB÷˜,[ãD³,©dizÚ‹?C *YfºÄÌ?ý`ÀwìE7ß&sD oÀ®­[Cý/ì-µÎÙk"Ò ¦™ùyfu^)ubÞ—|£ÞÜ3ð†£{÷ü5_;Ø?ôåºf3¾;ª×ÆÞyýEYTŠZQµÆl\¨ß¼òìc¿+¥¾¹ÑùÂk2Ö®]LSÛ¹õI?o»î¤ÁÁ÷ D.lßþê½Ý^è@åÊÕq@þÏ­“µL‡a8qÿë·ô„¥•D4'“ÒõÀi«·Xf!€ÛEä>"º‹5œp>N&Í­(-" "`[ËÅD3ç;è-– f;édëp«ô÷½ï¥Lð‹sáIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_next.png0000644000175000017500000000721711273045225024505 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF¬IDATxÚ´U[h\U]{Ÿ{çΣÍ$3MšÖ¾‚)ôC,þT[(VÔ¦?b©"Š£©VbÅÐ*­HQh ÉG jõ£ ­•TM#Š?Œ $Æš™¤w÷ι÷l?Òдy2Ö6‡sÎ:ûµ6‰þOXÓFwwÏæìd®¦÷Ò¯W+SéúdU*©”•c~ó}ïBÓîDzåð´†aAŒÙh}6 ‚wMhš!òžóe6·~ôb943D_w}óÄ…Ûr®®†eÙÐZ#ç^õ‰,<¯øY ƒ>>¼Ï-‹àÌé®ÔðØÄ#¿¢*•+­Kp''P³044 #µìÈñíl©éùnà'OéR©&纵ÅB>Q,ä':ñaÛÞ“7å¶n{8ÓÑyêô„ÏO3оm ›Ñ÷Ãz/ö¯2Æ4U%(i ;bJ%…œ‹04`K]pò¦Üp)l_wÀ¬"<¿ˆõëVcÇã ØµóQØ Ð%}ã¢ÈÔy&Wûþ·³ªhZ—ÎEcyDW’˜b <ÏCÔqP¿©õ›êày>Œ ¢©1ƒˆ!þAÿ¬*šÆŽÆ§ŠŠ_0Mýˆò,Ìl—³Ý½ý €‰ÁJA)3‡Lt^Y*3/øˆupàÄ`RP¶x,Š\.ý­±ÿí6¸¹<”²ÀL`f0+°â¼é:v¤ÕÌ"0ö²>xÙ Ù‰”@ ô}‡Þ?‚‚`õÚ;‘L&AÌS^™ Ad`ÎF›‰çÊi¿xÆøî›êPÌ£G?íÔY†ÚUëPY™–CGOˆmÛ ¢ëDìóy&甊YarÇÛáŽ×¾ÚÜÔr÷=÷'ªRÕw¬Y¿ñÁX"±WÙÊNÄ—»'ª”$¢ faæSŸ|Ðb–D µîÈ[Ðß×›0`°qWÓñªÔŠ N,ö‰ÄAô3?ì®(¥.-ØÉ·â}-¯ Ðyà@Ëï ÉÁácŸ×‹…µîd¶ëמ“Es0ËÞ@ë­‹éÍKO7ü¤”úêÖÇ'‚‹:6,EÔ^yv»YP®çB[ÛA ‘á={^ÞXîÀáÅŒý}µ-ÿy¢Í[UXŽã Ý{_ýZADão\Ê8ÓˆGÓ À°RDî"¢5DÈŠ`À•‚7®o`°DD$‚ë+ KñfÞ>ˆGÓ3™k¯l‚Û…šÓ¥8-Ö»èIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_previous.png0000644000175000017500000000717711273045225025410 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFœIDATxÚ´–]hUÇÿ3çìÞÝûÑÜ›DÅH¥ÖV«ÁO,BK5Ö ‚¶‘ªˆšKŠ"¢…„JC,‚¡ED-ÁV¨ ÚÖ–ª˜ŠÖâKÔHC›\’k“û¹wÏžñ¡iHÒ|£ »³ÿs~çÌž™YüŸFËtõ|š‰Å¼‰ùÖ(2µcÿäÆ.åFOo¸ï¶k25Éì¦Mû@/gò×;ßÛµ"î°®M)!ØÈ"2& !Ö‹¢¨ýŠvI€Z;RÚÑû=ÏßY­VáÆ<(V ¬dV$‘ðÜCMMýt å•½ÛÙáÇi?ž(&S©!Çu³A¥”Ûø@ãíGŽžÈjÅÍ,öú†ëj1^6Ci ×&Ç#}5uQ“+v5Ñã¥BJkãCij"S“@5¨ÀDÖß…ûïićGNbF<á#t¿Ø²õÑܬ€0~ÐŽ“Q S>|X Á8šðìöm¸÷î;T«¨e@&F*‰éÖI@d̯Jë߉x=1Oœ1‚µV­¼û»ÞœT©T Ö‚™A„™á0¬~3ÀWn”V9&:ÅÌ‘R V L—'¸pq_÷œ$h­ÁŠ'v €)¾£y{yNÀûïvZ+rŒ™˜Ì¥4ò…"Ú÷v£½s …"â¾å8`R1ØTÀÿd¶“ÇÓžD~câf¶<_bFMM V®Æ÷ýgÐüÌ‹èÿù @D°¦’³N²6À´<`Œ˜Ox 1ljŽãàížC’N×ÁubT(Œ£çƒÃáM7ß2" ï$ÈŸ‹‚òêÖçŸ*,¸ƒƒï´Yf>ÊLˆÈ(çÆ¼¿ñÔÊQY?‘L$W´\ü{Ý—Ÿõ®}ùéÍO–²ùÑÞ¹’óªLVJfV¿0óˆ:®ûmÌ÷KÅB¡¾X¸4ðñ®i+­†Õ; txñ­òÚq>"âó»vn=;åÕÐLíž=mk ȵw´•çðLÇ[o´ˆRêxës]¨6™0܆áÉù4<›óµ—ž°‹)~¡1«Bc~\2`1¶{÷«k r¾»{_8ŸN/¿WÉ#ÃÙ‘¾…e"KºüX-yn¦¾éáÍ~}­æ”žO¿¤–÷ê7¡Q$¢s†¥Ê¨]VOŽ{u„Ë¥_M„U‹!€hÙ€ ”*£2Ÿï?ù«X¬ý;òL [·ûÓIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/marker_remove.png0000644000175000017500000000716511273045225025026 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF’IDATxÚ´•]h\UÇÿ3çnönÒºÍÝmb¥j*~€|ñE¥>[A…ªé‹V¬HÅ‚µU+‘VT ±TT ’‡Ô6UPCúa¥cEPZhk[*iÍn’ݽ{ï=ãÃ&qÓ¤,ú‡ÃaÎüΜüŸF"¾¿8Qn;xü·ËK‚ÜÝÙÖ «”Wç~ãèÈæç+¢ñôÀZŠsëŒÖßYcÞqÖm…È{NÜWÖ˜?¶îøðÅF3À׃߬=òÓÉ>§ÒÈ-] ÏKAkri“ãEDQõS£ÍÆvn+5Ø¿o08?:~æb!¾®5ÀJAëåÉ L ˆÂÌêO?“ù,äÎø¾¿Hy^^'I[¹Tº¾VZªae Ïw÷¼º¼zÚê5úöîù b€ÔLDàDà¬Yf­ÝbŒ†À‡sÆ$IŒ°\‚µ쩟ì¹âþIÉö-nNƒYD "S âĹÚå1ƒ¨n¹HÍŸ©¤ãø‡éio6@ëä{Ÿ1ZßN"3î½ç.<²fÕŒßðÑü8r ä©ÚƦüDì¯Ö˜‘½¢i=Õõd¦ú%SmG¬€ ŠÂ+üª•2´Ñ`b°RPŠÁÌ–‰+O®šÄÈô³‰Ö[¯L€—JáÀ·‡ðÁ®Ýˆ«!²­9ÜvçJtÜr;˜ Ì fV\q‰ öîÚáæ¸Ô¢cˆŠJµB@*•F[û2ØÄ@ë­ù6ܰü&¤Ó͵,‰ÀÌŽ‰ÏBäÄœ­^/tu–u\ÝïâÒ›êqRM~œ ròíÈ.ɉŸiå©©GÀqḊ˜Xqi¬/¼túìÆukÐ $7;ëžÑ…$‰F“8>éÄ&Pˆ 3]d潟¼ßíêãxWh­‡òlÙð¨0  ·ëÙÍMMékÍ_"Ò ¦û˜y=³:§”:>ïOž­7¶u¿.ÀÀöíݧæ+;{¿XY­†7–&Šƒo¿ö¼\ÓMeqÐh½z¡zóÒÓÿ¢”:0;øÂcŽjc:®¥¨½²áq7o¹žK==ïjˆœß´éå[Ñ x!‡ÑK—‡y°QÀ¼íÎãÅ^K&<°ªóc¿©5ŸIÔpˬW³Ÿcií"r-'BQ'œ £1ÝPÙPR< 3e€„ј4˜‚Ô™k®aÀ¥¿,{5‰‡à3IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/mixer.png0000644000175000017500000000744411273045225023314 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFAIDATxÚ´–Mk\uÆçïLf&Éd'a4!¦`j…BDWAégPĵ A\¸q!‚¸ìÆ ~±)….|iWµP)±–6oÍ$3y™™Ì̽ÿ—ãâNƤ ¢BÏærÏ}8ç9oWT•§i1€ˆ˜Ï¿øêãéÚ³KÎY „!â8¿üƒ/{1qdrÍæÎõÏ>ý䊪†xð%ÿÜüÂ;‹‹^MmŠ‘ˆ(6ØÔžˆå2¸·îC.ŸÃ;GJG" Á¼×58’U½òx}•×^>Ïë¯,ò¸Þ 1Õj‚ǹX6‡*…‚ }zLV3$H§ÑØáÒ¥K,-½A±T`oV]!h EB1&Ã(x…ã9Ì 8Å9Kš$ܺ}—ÊD…úvg-Î9D A3ë6xD¡wÐbk«ÎN£IœËƒœõ§3°ÞÒKR¬õÌÖ¦Y˜Ÿc|t”^’ÒKSúIŸÔyRçè%)i’²µµMÚipù­%ªåÖVÑï'¤g$ý”~¯µï,ª–Ä&$}Kï0¡×K°‰Å&ŽÞaŸn/emuççgyÿ½w¹üö›lnlÐjwé'Éi‰šûmâ}º‰åÖÍ_)Y{¸†u:Paãq¡23 ê9ètXùóãUöZ”»´:§ ¼œ:ò¥q®Þ¸É~c‡…ó™®•Ùiì"®ÇÅçA…úæ*¦0N»Óe¬T¤V«"â±Îã¼#(§ €By²Â¼¼D±8ÊܹE48v›{ÌMùèÃøòë+Ô[D"T¡”Ïc€  zlÓü=>ë91†|.¢P(`DdÃÓhîòÛÝ¡ÕjAÈS,æÙØXeùÚ2ív‹|Ÿ˜‡“HÖë2èq¼T•€›˜J¹ QerêîÜ{ÀòòuÆ'§¨Í¿€1rz›f©hPA³êɆ e¢2Ž`CPF #Ì»@ðŽ™ÙJ¥14 âœ&¨¤(ø@ ›ˆ49äןBUéõû3†ª‹#ÆFÇ(äG†Ã¨êÏÎ`¸BD†EC`´T¢¹½Ï·ß}…±ªµR¶ØDÐÉj4 Š|–DAÅ{ªYÑ2Ö¦ƒe£Tª3eðÊĈâï)ŒM ªÙРæóabïSFè6êƒú "åò´;­LR²fÑOöPQ”Ç9W~’@õµ£x»ãlêŸ8ŠÿÅ$Ο&7†UED ÀP¢3.ï¿ ~$ÐvU59"0ƒ?yÆÿ‡é€Äªj§ýÛò×sŸ1¨ÚôðIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/new.png0000644000175000017500000000644111273045225022755 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF>IDATxÚÔ•_KTAÆ3gæìì®ér4±’a‚¤@ Ã.ô*¼¨Bè¶Â«¾‚}oƒ½ „@#¡›ˆÄ›¢ºÐ1K+ÿíéÌt‘Šîºën‹A œ÷Ì™çyßyÞ9#œs%ÔÞ@Qê;HÂõØ*LXU„N§Ó÷<¼ÕÞ~Ò3±RÊ¢„ÆÆÆŽŽNûV;çvÇAäÙlöÌ«×3Kó Ÿ\†ÎZëÂððp7P¿—Ï9‡,—yOOOúùÔÔÓ|>lòµÆZK)ˬµ@1_)Ýßߟ™œœ|E¶UûOyå<Úݲ&ï¼Ìܾs÷æÛw³§<)i9Þ„1­um]ˆ¡¡¡ÌÕë7®57·ŒÄ¡®.ICý1p0÷qÖ–&qS±@áÅ"Ùw±÷^gÇiN´µÒ$ Ö7óŒ?›fñËJMhcŒJ¥ˆ" 8<Ï ækh’#Æ?AÄþ†(ÿ „ =Èçr¹Å(Š.Us• !˜˜˜ø „Es{‰„h¶¯ÉJ«À²sn³œ€üíʪñÇ¿€¼sΖø/»è÷^šÍ°×Ú!%IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/open.png0000644000175000017500000000736311273045225023131 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚ´•ËoUEÇ?szo·\¼Öˆ”HX°"FbHÊÞ­$F5îp¡+–ÄDWnÜÃ?`LLÝTS„D }Q^j‹Z^½½¯sî9gÎÌü\ÜsIÒàƒI&gfÎäûùe¾óûždË,»˜É¬. ëúúú6õ÷÷o)‹SÓÓÓ?ÿ+‚ˆÜë¹\®÷ðáÃÇ&''gççç£8ŽEDdÿþýŸµö^OOÏÖÁÁÁ÷<øÅºÞÞ—[ÿÚÛ;ûžßþÊÛ›v¾ßZSKhÆ »gggG•RXk1ÆÐÑÑÁ¡C‡†‡†††v½¸cÇ®m/lÛÚ»ö¹¬Ö o¼õÎØ¶…;w¾¶ý¥W÷lÜ´¥ðñw?¸0qòsà~Àúõëw‹ÅÉ|>ÖI¿Ç”J%ænÞ¢TñiÄ Ý–#“í&_èÁóÖ:®ý~¥üчonN}÷!¢( ã8Nòù|¶%u®ÎÌrãv…Zhp^7™Î5´¯ê¤3£P@ˆººsLœ<6Ü_h­55ÆÇ—®üÁÕ;†®Üºz²(@Ä!Ö!¦9øµ*c§~ür©¦·t¢µkµZ¬”Â9G¥\fn1¢»ð žç!ÆâŒEŒqÍ–L¶ËÆ›¿~íØ#¯©1&¬V«a c±Z!‘6:D@BêÙ’ôqbq"ŒžþFDô#"×ëu¿ K¨U|”u8ì=aÁÝwÍJ·oÚËS£_?˜Þó$‚@EÔü¥¼¦ 4ÏÛ‰mæÄ9¬sxªKgOŸ­×*VˆˆAÐ0Ɔ~˜àe²M1\3Z+‚‡qk ÚhÆ9þ•,Sw*¾ï7œs4Ÿ0q´çÚ–ˆ 6ÍPg-Μ·ggW§/~÷Xµ¨R©Ô¬µø ã<:½6œ³X'Í#²—f¹s–L¶3#? ÅqøçcJ¥Rɘ„F!*ƒ‹I£5Æ`“g”—aáÎ-~:zdhâÔñO•R«€PD슀¹¹¹ù(Šh„Ž ‰ŽÐ:Âè­5 ¨UËLœ>>5>2|¤V«Œ¦^> ,(¥q”RJDdffæ¯z½JÝoÅ9tRÆšjåÎOž*Ž8úmµ\*@(§ãèþ IJ)èRJu ……ë×oPo4ðë†lG¿ZáÜøÈù©Ñ‘ï+‹wÇRÁXª@ "Ér(A)¥€n`-°nß¾×?éß±go©Ù+çΜ»xöÌpµ¼0‘F¤€$‘žÅ{å:…t=ÀÆÕO=½Wkí¢0øµåaÐòï­ZnRªX•וŠW€:Ë?xÈÕJ{SoÚSã̃Wð?þæñ„Ûßó_Ìp8ÔIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/openrepeat.png0000644000175000017500000000614111273045225024323 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF~IDATxÚì–MKA‡3ûâšÚ®»&¼x’ÞHC*‚ºôUêctèÒèEyòÖ©CÔ¡oà¡ ÌTÐ}™Ýé`Al)#]úÁÀÀÌŸ‡™gfÂ9Ç(C³‹ÅuYQ²œsÍgìüþöúiz.¿ÿpw³÷[€6h¦ÒѱXÎØÝÎ3€ÓxBß `¥'uÃÌ1ÏC«Ùh@,žh‹B±ø8tÂëÚ`Œ"ZT@–(ªÚë+ €R:à‡Ùœspp`ÈÓF. ½’åµ²53_Ø$€žLÕLk¢²T,m íà»H}€‘¬«j$C¥FB(àÓÇ€òUõâL(À÷}ÀÉÑaÀ™pý§¥´¹cVË#LIÿÂÕ4-Zɯlˆ•LiOrB7ê²¢f%ÿ’¿&øŒì©x @é5€¡\…:p'kw;p]®c›Àß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF"IDATxÚÄ{y°feyçïyÞålß~ïí¾Ý4M. *(j!¸Å1ŠÆeBFK¤jƵ$ƘѸ‘š™$j’‰‰©8î3Á¸£Tp4È€(š¥éý.ßz¶÷}Ÿùãû¾K7¶Ðt·5§êTߪ®:ç}¾gûý~Ïsè™Ïyê"DD‘€\]£,s”E³‚6ÆhmÁDÌt¦6¦"¢³XˆüD§ó®®އƒ{«½÷N nþ.€‰èAç£ÃþVJ?¤=ý¿Çp‰H,YÛó­Î56z޵ö‘†w.Te¹ßÚèʲȿTùÝUUÔÞyˆ„XD@NÔùN”Á ÀÉLtZš6âV§÷[ÍVç²F³…8Na£Úh0«yÈ4 ç—e¾< ÿ4þGžO¾ŸOFwOÆ£ï—Eñçy>^««²-"@@ýÿß`A@JD£´Ñ¼maiùm‹›¶\Öí-"m4`m m ˜ˆh‚²‘®®QÅDç“Ñy“ñè¼Á`ý×ë«çŒ‡ƒ†ýkÇ£¡Ðyz €;fÏì8ýŒ‡ÍáY¬nX("ðÁŸÈ{Aü=‘p··8iwz¯ìôßÓ[Xúx³ÕÞÇé-ÚØ­Zë’™¯QZoVJ­²R©bõ¥õ¢µ‘‰âIši£5n4[q–µBÇ!ð¯Cän¥Õ÷œ«Ç!Q@ÀèH9ÌÌ'Ö`‘"úwQ”|Sk»ÀD4ÆVqšAks~ÖlÝÅÉÕÌ|IpKa§„p·@Öœ  „H'„p·ˆì"æíJiRÚŒ±}kã¶,1+â©È'½ºª¾¡”îWUYÏ Õ¶(ˆÈýâ iš(úL³ÕyoœfÁÿûºªFD„ª*@®•¾žï\]{çG!„Ó™ùÙÌ|:³Zd¢Mqa‡HpLÜ"¢˜‰Û BðUYüÏÑpðêÁÚÊ'Æãá+]]íd¥†!x„ "*ˆh@`|´ó#¨¾§ÇiöÝÞâ “,{ŸÖú ­ÍPDæí#xçî û;†ƒþƒõõáh8xg‘Oözï:ÞÊÌž™ÁÌ "„ÖCð× Óôœå·÷ãñp2o-Šü€„p•ˆô@)=7*°‹ˆ–<úhíà£0Óêô¾×[Üta'/ƒàíÓŠIýY)fH_ÎóÉ×&ãa8X¿,ŸŒßë½ß B𞘦E ´-„ÐàE6j"ðÎý®wî¹Nà)Jé‘„°•ˆHk"š÷æÑ~§Ízøñ, ¢sÍö5îbËó'!„«‰¦†æ“8(¶ñ‹”6OQ̯ÈsEBðÞõ¼s>xïÜ>ï}Læ%<§vn\WÕïê”6°Q¥ôË´±wÓ“Y©·½HË6Š'éF¤QŸ™×œ~\m‰ˆv´:½êt:^_×å_„ ؇"ƒ˜¡µyy«Óý›4k4µ1û òÓ rÐû-¥ôh„à+ïœÁ0«¾Rê (u*/®ª®tÀßëo06:MS§YÓfÍæRYæ Wxï^¼k]Uÿ À^‘ïB²Rv‡àÏÑ-?ÏÕêÔG"üì tÒFóïz ›«”ú‚sõ!ˆuU!Ï'ˆãJk4šíË—OÚþ¬î¬WEäùDhGqüß­ö“³FkÁXë8"ÞΊ'¬ÔVš/íêú\ïÝ3˜Õ¹J)GÌ#çjS•å™UQx"ºØX{1_è꺄ÈÍÄ´Ñ9X©Z+ý2cíÓ™ù'Rbî3|k">bÞÆIú‘Nwñ"VêÝ>øw3£, ìº÷Nï±iù$kamtC£Ñ‚"Œ{;@÷{ç׌‰vgYëœ$Í µŽB›‰èAôLÄÌÐFCBÔ â/žå¦ !ôˆø/“$“V·û^cm™OFÖ{µÑß33ò| ÖÄ|a–5> ¢Kƒ÷—yþº.× >‡E ”ú•f«ýRmÌ·½«ß¼f†÷÷Üu;Æ£!ò|Œûî+ùÖd2ºq<~(ŸŒ¯í¯¯¢,óø}"@k m,imͬN!"E 3”2°qŒ(Na¬1Ã;‡º*·ùà>amôÕ(N"¥´#¢+•ÖýªªP–LC[ÛJ³ÆI£ùƒ4k¦ÆFCm̹ :=ˆpÁ¡·VJ=ػۛ­Î§â4zïþdÆ®®±óŽ[1 ¡¦F"ŸL°ÏýH³Æ–ª*¿F ·Ø·ýµUdÍfÇéF«}[+„3™˜"òxž‡”R8ô Þ{ïPWå?Weqz]UQ×嫺ìi­Áœààþ=>À6cDq<Š¢do’d:W頻òï!;$„§øÎa9|úcÏzã '韶;½§Ñ› r1 ì¼ã6 ksú1«×*¥Ÿë]ý/Þ»õ|2þ§µ•ýÈ'cdš/6eYã¦F³ýQ›¹Ñó÷=˜êÍÓÉ»EYزÈO-ŠüÔÑpØ-‹üz{WìÃx4€b“OÒTŒ±7¸SB¸v2¡ªJ„à׉èd+DäæïÓt2!Â)ÍVçQc2ýë»Î@qœ‚™ @im´¦”:«ªªÅ|<:蜛§icÎ2&²I˲¸¼ªÊ8x¥ô<,ǘ E’f—ïá½Çd<|cáfWWð¾F’¤ÑK•R¯ >¼Çÿ“ ²;xº.·‚h7ƒo’^‘Om´%æi8 ˆ“äÍv*"׋„ïOÉ ÁÕÕ´@3ƒ´ÍÚh“ÒFB_%æ†à€DQ­ö³Ö»ÍÖçµÖï Þ_à½?ÇšœfMh¥AÄ(‹üë«+Rä“?SJ·ã8½"Íš‹ÆÚcæÿDÌ?&¢gyç/ Á¿°,Š÷TªøH¡‘ÇïS“™Á @ÀÐg¶ÚÝWÅIŠÑ°»÷AæØ4A]×Þ!`‚|]‰ì"&Ǭž¨´ù1&n4Û;z‹›¾ßîô®Ž“ì¢(IvQ_æðñaÀ•BÄ+8ç$NÓÌX{ž*4Œ^ÑîôÞÑî.üT³ A¾L„+”ÒO&c¬­xk}õ#e>þ’ð¹jxˆâ8ù­VGkcrï]îêJ)¥Âx8Àx<€µu]ÏOµê}]xï "÷FqRgæ9iÖøh³Õ‰;½ÅëšíîEQ”l×F¿3J’Ya¢£ô1b!„;ƒ÷/ÐÚü4I3$iöè…¥e×jw+AäT¥µQZŸ|€Z_YÏÇ£¿N "÷‹ÈM6‰Àë©4k^”6ZðÞU!„¢8©ƒ÷Ø·û>€6JÔ~ª¸xç&Ì|Gœ¤¶Ñl¿§Õéþ~«ÝUY³…4mœ‘¤ŒÀ¬ ´‚Òæ‘é "ð!`V©Ÿ§éOE¢8á8I4uDäyJ©?76j03J—¿‚k½w;]]¿ À]¹†ˆmpŸff0Ñc²FëñQc<®{çv‡°ßý¨](Š 0´P×BÐÚ´:Ý…«—6o½¤·´ŒF³h&ç(m ”ÑCWå‡ íê#œ‘FQQæ'GQrn™ŬÞî\}Ð9we’d‡à»£áà_DÂÎ<¼«?@D¿§´Ù'1@òi-kŸŸ5š‰6!øœˆwùë+7X‰Ìw'ÐÆ xV§wÙæ­'_²yË6´» ˆ¢¬Ô¹þ fuI»³ðþå“N>{yëÉètÍØË‰¼X)¤YÞ•E1ÑoWe‘×uµ‘í‡FR «+û±¾º2uT5kã›l½^±Z®ªê4ÍÌ‹qœ<1Šb¨)(ïkc£ KÉåÝÞÒ“£$AU¿<P—ÅÿâäÍ‹›¶\°´y ÚÝØ8>áÆÎ±»6ÖÆ°6ú\³Õ΋Ü@$`ŽÏû€=÷݃¢È1MU†â«‰â5mÌoyïÏÒJ©3¢$YÖfŠcEäÿ˜(º) ¡f×oݶY£‰ª,1öGùd¼/N’ÇvzKhµ»ˆâG" 'Nè$xÔuÕtu c,‚µÕ‡ª0Ö¢¿¾ŠÁ` Ì ~&Oå¹&¥Ô´6ß«Y©Ó­i "ÅÊY]Úlu–Z.²¬‰ª*aŒi$iöTc£´Ñl#Š“_ˆg©Ôâ]¢È‹"ß\Å!^)´:]°RØ·û^ÜqÛáœsب!ež“b=ˆâøëÞûs´Òz‡±J1$´Öçñ%F›31\]ÿ°®ëx±‰¢›ˆùŒ±ÆsÜEéᮼLòq¨ªòuJ›kˆ*0.ËjmpçO~ˆÝr#æz™LEÕuEe‘ «LTk­Mo ` JRŠ“ô]e1¹´¬Šß úßÞ[Å/&"¯”þ 1?o ä¨ÁÄ1x®®y2Öe‘9k´¦ÃäTðãï߈ûvþÛ¬ÒÏPݼwÊ;·­ïe¥tcN×´±È-´:Ý‹´1·”ù䆵Õ«ÃaÿKÞ»”ˆ.á©Á»Ë뺚8çx`‹QWŠ|òyïêÁûö(³‚5öqÿ½;¡ôC“’Ùœ£ àÑLSdÀ¬$ÚÍÎYJéWÔUÙ¬Êâ¾”ÃÚ9÷ŸË2¿¾,òÏÖu]ü" 8W¡ªª;½÷ÁϘ“÷aZÄppÿ^dÍ6²FëçEÚ¥ƒ˜•bž³ˆ¹èn­EÖh£Ó]@Öl½ž•îïÏÞ_O”6=f~Ap®¨Êò›uUÝ2ÿõOÜ5µ WW—ކ5 0¿'£öcþÚT@ÐzŽ!È´?“bvZÛ'jcž¡ƒ„5™Í#§²‹±Y³…ª*³üç˜ø™Þ»åiù"B]W—è²)S–Þ‹æGD”Ådßsh±š ˜3=€' êªü™_Ž™EYk·+­k->Ü÷€‡d£áGq‚f»ƒü檬^¢-Så_m ­ÍìÅ'¶xÔxüD)½gþ ,r„éŒkpØ(F³ÝÁhÐ?lV®´ñÆÚÓm_P_¸Ó{·QÊ7´¥Ç)|Ó¡Ðùo(¥¾é¼;­È'gyçnÁßLÄ¿LD;Xi0ŸèŠM3Í[+¥}í* HÀÐòðËØh žB˜…3“bf­Mƒ•Z…`¨žxþÓ*ůn4Û‰5ÑÆ™‰™ë«ɘh¨µùÂhØÿ‚÷îóÎÕKÌê1³9Óñù—¦á¼‡sõ™E>9Å;÷…ù\©®*(¥Åéó³Fë«iÖ¼H+ýÛÂMÞûûCŠˆÈh£Œ"Vê•Â'5_ÕÕuuU>=„¥øð%­gÌ¥@U•ÝÕû7‡àï™éÄ3iÕÝ^×õíE‘ÿ¸®ÊkÛ… â4ÛP(yZ¯4Í66m9 AÂköíÞµ½,ó‰—¯)Vï‹âäìÎÂÒ¥­V ºxØ_Çî]w]]ùR áÑÞ¹‰@nÕŠ¼s_,‹â¼÷úˆ[0xW£,‹±â]J+@°áŹöUWþÀúÚÊ‹ëªúãf»{^še1&:Œ#?R¶dm„V§!Š’Kë«—Öuu›â3S„4kÀ;k£ñ°¿6 ÖA911;mÁ €×S‚n*ŠÉí®®gŒý™Ã¹ºF‘O>7Þ¸w÷.0ÑœY!m4Üžñxt9q]•oJÍ÷'iZÛ: +5zŒ(IÑ[X‚óîLc,¢(F4$êªDYæY’eï36z­RŠb¥”'¢åÂ?OE<"Š|ò²,Ç)èI€ˆ ®JŒ‡ƒþúÚA”E1õ¬î¹ëvÔ®ÆIÛO}4C`VE>_YÕÕ“˜ùåœf˜KÂÇæéZ$i6Û c*ì0Ýi¼$Ž“·icZ›S˜ù,ÛiEuU~|2½6ËZ°2Ø{¢ÈÙ‹8Ž7ö ‚÷˜S¶Ã£B0诡®*Ñ0ѯPqœsxÏë‰ú9^Å ÖFHÒ,DqbŒ±,@¥y+¯ŠH=›LÛOrýx8øjYó™ëÜdf(¥/àüF»ƒfkz·» ÷ïEðþ0CŠ"GU•¨ªòÎõµ•g®®xÃÚê›GƒuùÎÕ˜®:œ¨¶=M3f1s¥µacLOk½ÌL9§Žšè»Räã?ÌGÃgÅq¢˜-æÀÛX‹F«Õ3Í'Æ£áãˆHõѾ=»Pälݶã0Üàêê†AUþ­RúYqœ<ÁFñs¢8¹p6é?nn‚‡«kÔUùÇ>„}¬X3«gø.€{çWç>õ™ýVDîÑÓ£8yÔ¼xÀ;·0¬ß¼»5„0£†S/MÆ#Ôu…f» Á¹2Ý«‚16Š1Û ù©¶æzWWŸ*&“œˆ2¥õ¶ãmaUYa8XÛ}`ßž7 ûkUðþ$¥Ôkú¯ŠCfWS±‹‰¡X!ŸŒß5¬{w|SZ#Íè.l¢Nwáļy>èrÎÁÍPÏÁý{±Ï.ð€Ç|ñS)…º,Ñ_[­Vì}ÿúÚÊÿvu}\lk*T(&“»óÉxÍ{'Ìü;DtÖÝlÐ?£ü…ðþÚê›ã4û Rzƒ\ÏÁùÒ¦-O(‹ück+^ÂàÁÕtÿÞݨ« Y³5òa:+š‰€XÙ¿£Q F·»øâ$k¼%üÜÙרªrÉ{ÇD|mðÖ‡]j™Q¿ ××.·6¾ M³y1@'è.lBU•Ï-Ëâ+“Ñð…ŽŽöïÛƒü®Û±eÛöùôo6ä®fT’`lôTc£ÏZYÅú¸°·ˆ ø¹A)µ¨”úMïÝ[Ž´ŒªY©#Ê+£Ñà•ʘë´ÖÛm˜J@ÍNgºJê8¬Gïagºr«Ým´º=$Y¬ŽÏÅ€ˆ¼«¢(þÌ#^L›®úo­­¸¼¿¶RÍ‹3Oó¹ÕA··„¬Ù|R”¤ˆgw§(òÉùm€²* ´~M»Û{i–5aôñɽS`äP•e»,óo‰È³ÖÂFÑoýp$<ÿwƒõ5VJªÑj“1 ‚1Óm8cì¦ò ž:X_:ÔÆª1‘ÏÐÊœ×î,¼¥Ýé)M ûñ¸Ö¹y>ÁhÔ¿Ò;÷¶¹*òóT'}4.ÿ™ÕƒûW«ÿW»Ó[¶63à cì“êª`¥t(Š+ömÔkã¹÷ÎJͯö6miw{è-lF«Ó…1Ñ1{wÞŠ†ƒu·¾¶ò»uUðhžuÔF‚ÿêp°þìüÇš­î¹ÆZ(­Åñ™“ɈGÃ~误b¶Ä ƵҬù†¥Í[¶,,-#k´¦‘a#âcFUeQ`4ìï ú¯óÎ]{´¿ÛÑs¶é4.¨Êò¿4Zíw@œ¤;\]½²¿¾òѪªfj#ƒˆ¢³³Fë-Ë[·_°´¼Óг00¥Ÿ5ŠÉýõÕO•eqDö=’g=b’JÄ®®ÊwÖVofæßcV¿'Ù¬o­«ê»¤Yܸ¬ÙîžÚí-þIoq37-£ÙêÀFÇ6V=¤0a2Þ6ÿª®ªñtí ´cbå3Ü}MžO®)ËüeƘw¥YãjyRJ: Kÿ°¸i½…Íh´Z˜ æ;› ¡* ä“ñ}ùxüçëC09ÖÜ?®¯Zf†Î{-+õê4k\'éjoaÓÞÞâæåv§7U$´>ªò|»ÞOw«Q•Ÿ,‹-Ëâë®®ÿV ßc…Þ'껥À‡‰ùÃJ©DômW×/)òÉ/ï—çŸñ0óLÀ§CÆ\Ó _ÞÕ¨]½^WÕ®®¿è½ûbá®Ã†ã›rü¾LÃÝ"r·«ªOO&£å"ÏÏJ¡˜ˆ¹Ã¬"²HDê !ïAÂJðþ®‚È]ô ÉèDÍ®þßxÍ)Àý:EIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/option_skin.png0000644000175000017500000001413111273045225024513 0ustar julianjulian‰PNG  IHDR<<:üÙr pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF vIDATxÚì›YŒd×YÇÿçœ{oík/3žžévÏxfì “‰œ@¢dañòÉVœ„Ì Qx@ a ‰‡DHQP£H$<‰ØÙŽÙÆÌÒÕ]kwUÝ}? ·ºg륪»‡H±¯tT*ݺ߽ÿs¾óïûÝSD)…·ÒAÞüc~P¼ÅŽ·œà}]ú§}ÀyZÕܧ«Õú/åò…%B)‡BÜr1!€99'o¹ A~ÒÁ!”âÇ%@J©ÂÀo»ŽõU)ÄW˜¦¥ðÂ÷þi×ßkû›tÆü‰Sß]9{ñÝåJuú-¦iäó…‡5-»\*…8 ûi’|Rz_._xŸ®ëT ’$Iâ(ü¾RÊÏåò¹üÈñVÙ½Onö;ï¹ñ¿¯Ðu̧’îõû}ëºÑ¨Ö_¼tù=ï6òù¿œ?'•äçü¹R¥ú%]7`™£o+)Ÿàü©b©üw…bI÷g›ÃÓ$”æx«ž3rZ.Wq\£{›h²wDÔ¼œ4æqáÒ•Ï\×^{Ìsí\þâòêùŸ9uz†‘Çù‡Þù,!ô}¶=þ]Ó—––Wniå¬V,U°röâR’Ä?tÛß•RúÍùÅ{ðòb¾XÚ•ãa2Y!8M“«qþg¡PòN.!Ÿ/|Ïý@.WàÕFóß eŠóÍùEo›£V’Ä ”Π²¬Ï±Æþæ ó›žk«iÆ€Nù„0ÇÃ<ÏŽG[=DaEÚin@¢0Àp«ϳcË~_BÂЇïÚo¾‹­Awj»„PpžbkÐçÚY­5ט¥$ ¥2s‹¿øîiš@) )§kJIÁá¹ö•jµþ•Zýx\Z)J)Nœ:Ã\Ûz~íÚ_ ÃàE%åÁ‰ëÄ¡” Å÷/ßþ—O,Ñ(cÙÚjäpÿç@ð­^»õßqö§®‡A¤®µ…“§ÞµúÀCùB±<’Ц›¿@±XÆùKïÌÏ-žü¤çXŸœe-dŒ¡\­£9·˜ñ±[òÞr¥†‹—®Ð3+ç®$I|e–‚XÓtKeärù¬âÚ)ƒVf¨X,£¸\¾¥˜>sÚŽºwó.‚\¾€\®©fc<ÛÙöô9öLKJ‰4M¶¤Ý™3vJ×…;’A¶“8~^IÙa©” ¤fƇsùâOL[ŸkÓ>0OS8¶ùe!øoÄ›ñ@•Ó¾P©5~}û5«R ¶9úA?¯é†5kê­…Áç˜çþMsþijL;XÎôˆÇ½>>•¦‰GÝq§ieišzãáàS¶9zm»ã(Äp«ÿ'¶5¶Ò4¥lz›”AJÇc´5ø#ßsä1"˾è¹N2Üì# ‚©óYÊ¢ Àh³ÏuRËÜzQð›ˆÇsí«Aàa«ßÍ ÿ)ìfÔ#Áf¿ÏsønÇ÷œÑñ!.‡AÌy‚$Ž0ènÀw§D<®‹AwqóqFBdˆ'C3©’B I2ÄxÞ¾v)¥àI‚îF QàCî žôT¶ào#ž¢ßiÁÛ…vÜšyŽ^§ÎwG<ØñôÚkð]gOÄ“Ä1:?2Äӂ똻"×±Ðk·fG<»žkß…xâ(Bgýú‘¨Ç‘ ºmxΈDZ1ènì[\”'÷;ë|š®CÓu¤i‚n{ |JêÿñôÛð}wç»ïâ¡h]qB0tùBñÈx˜¦Ã±F·!ž¥3«¨Öç Åá¶cQÊG6Z×M檦é8½¼Šrµù£B<Œ1Xã­ â¡Ð4„PtÛ-Xã­Cè”1„‡õµkàizñ‡¢(ÇŠxÌñýîFÆ,nA<@¿»s<œ ñ0†Ð÷3ê!n·þÖDÏ ˜ì4Æ4Xf&v»¸³ ÀD´e§G<ÁñBèž²×iÁ¶î9â‘J€‚À2÷æY»”*Õ}øâ"ÝUìnèHŽb© !Ä=@°rîÂÇï[šl]”Ðu+« J©¿íµ[Ÿãh ”œñ\^}à!£P(A( ^M’ø…=¯Û/}\.ÿôéûÏý}±XFú·àº$Ÿ~-¤C¹RGsnùBqÒOjç3M„¾‡$‰gÚó é: Å ñJáXã°³~ý!øË_ú³ß}„cà<ýÆpÐûÄ܉/æ Ź§Î`Q.aÖ]<”fÛ$””»¼ŸÒQ­5µÌ(d/ìÇ»1Úêÿª”òåýâ€6M€HÓôë¶eŽÒ$ù f z˜ôNí³G‹ì¸éÌb³Eñ üBüÛ¬üí¿ñ¼-øÇëxËýçÿŒG¿„zíÒñIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/option_sound.png0000644000175000017500000000746311273045225024711 0ustar julianjulian‰PNG  IHDR<<:üÙr pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFPIDATxÚìÛOh\EðïÌoæí¾?»o7i!"ä$* €Ð“¥àÙ‹ D²6Z“¡Ø&1B5ÄZm-b¥§BoÞ=ˆ·B±×@àA¡  ‚§Ú4›÷f<¼MHK{HÔºIæwÙ˼¿aÞÌû¾ÇŒ18LÅqÈÊ‚-Ø‚-Ø‚-x€Jì— íž]'¢utTYvnÝøú¥}îÎÌrÎ;œD‡ˆwˆD‡“è´Úà ! „„1y–î¯ON_p8Q‡s'¢± Hfk(} !%ˆ„àœ@$P9âÍÁwgæ_éã¶»Ö‡Ž‰>HÙˆ$ˆDÆ98ç`Œ`ƌшÄËžœ¾ðºtjB:cBˆNØrIlÁDÕ9ª€œˆW8ÆÆv®£&ÑÚDZ©U¥ÕªV*-w}ñ‹ëìú·}?˜®»¤t*” mØÓ] Œ1÷µÖ‘Ñe¤´ŠT©¢å¹©ßž7F–&ƒ3¥]×C£ÙBÝó!„ØŒÑëÆ`«k‘VåŠ*UôùÂûùnÆ(Š|pÀBHp`ŒEJ©Èh)¥"¥T´<7õàßC+58`¥ò,}gynêÇC±ñ(ò ›Zž–*K¨²<<`­5ô€vØž–,Ø‚-Ø‚-Ø‚-Ø‚-Ø‚-Ø‚-6[Ìšœ¾0‰N8*emåæ÷—W8ÑÁŸž]|Ãqjß5[CÇ…Õ”$ÂùϮޓÒq ¸;3Ô]ïV«=üVÝóá85lc(‹âxšÆ£Ãݳ ßhþ4Â1?h¢îºÒ©¢0TÉ¡Råà€9ŒÙÛC<ß®7ÃöX#lÃu=)Á9õ£ÀU–àœÿñÂÁݳ '¤”Dâclœ„XáœîKé„fO-Ïœ»8Új™ š!Xºró””Î1¹RåêòÜ{+ûåxÈì7lÁlÁlÁÿ[ý=$t¶ÏJ¬ÄIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/option_style.png0000644000175000017500000001066511273045225024717 0ustar julianjulian‰PNG  IHDR<<:üÙr pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÒIDATxÚìšÝRG†ßþÿ™‰o.@¹ö´— ƒ=Ijcƒù1Kc¼2Žq`‰ã$å-/Ê®«R•#s p ë[Ð-¨b’f4={ ~ˤ,\•ÂÓ's03­~úûúýÞîÉóS#p\Àp\Àp\ÀÃ4Ь])ðgSK»ŸM-½ü(Rúæí•q¥íÿ Û9üôųǭkaëùQ©<‚ T†±¶v­Szrn54Ö<¿Ï/ÁX?¾ÖÀJÛH ¥ ´1ÐÆ†·–E×X+¥!¤„ Jkhc®'𭥯#ml(•cŒ1H© µŸZ\«^;`ml¤´ç„J!„„6JéÚµžºó ª”B‚ÒAW„0Æ!¤‚66šœ¿þ‘€ùïyYHYc\´ó<_vÎmJAe BH(m ”‰lþNCSJA)Ý\!ȸ¬¿™¦ÉÞÏÏ·ö>h„'fW+Œ‹(w®y÷Ë¿6“¤ÛÊú}äyB¸PJCë÷¯/fîÆõ…Fî¥ØÛzñìòŸ׉_*×GFo`ôÆ'Çþ—Ê£»“s«/?(°¢F)E’t›Ð9lÿÆzU?(ÁóëAJÊØ9÷–$½vîePÚÀXÆó¡´¿z`!bBië‡Çñ9¡èu;;išÀeÙiZ ¥-´±CG™ Ñâ\€sJc`”µÏ>ã\†/¥Mmrnu¨õdíN=IzÍ^¯ƒ^¯‹4Mö2—ÕÏM UBO‡O¥”±«-KBˆˆRÚN“ÞÎE÷»NSi³Í¹al`D¤„66Tzøõpi¢ þÖFeþ~l­¿”C0Ær B׫žœ¿_ñƒr1¾ùÝÆbû¢gœËvœsyž‡'F„sÈA”ß»&ùÕ£˜{~)ÔÚìH)÷¡ÛäÃ¥L¤µc<^Zû!îu;è÷ûé+•†ç ä|ª16X_ÚØÊôâZõù“ÆÞe–Rz[[á\@scu¦þàÉ‹(Ïräxbö^X‹„T`ŒR .rçŽÉÀ(ò(ÒôhŸel `oÈŒÚö¼ 2Öƒ YÖßY_žª@š$Èt†Kò,¤Š¸až»¿4îL¼sÀÿü÷Ë]BI•1~e©%*ZhTšO×Zïðé»å‘±ª” ¥B–eHzÝåÓ²Ô…ËüKG˜/V2rε¾þ**:oÞì¤Ir’ƒ%¡µR:zGÇA9¬–ÃQx~ \HdYgcuæd’\æð>§qCOÝy1Î+YÖZpÖ–n6{ÝN;˲s%J* ml41{q‰úbænèùA”ʰև” @Ž4I^sZx¿ÃÇ¡€¥Ò£¬ÝOÓËtÞív6Ïúëã½²16ü­©ô¸µ~¨…„8—ù윃¢„‚^P‚Þ¥Úïž^\‹¤Òã„ÒÖß,·/Üëî¤Iï$­OÄKhãų÷ÞŠ2çBJ0ÆA(Ž ã¢6?®©Ænï` šŒó÷÷Ò“s«ëZp~ù­óVc¾Õï÷_eg6Œ j²µ^¨wÑéæ¹Ô=ž$­ ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF lIDATxÚìšyÕÇ¿}ÓsuOϵÃ.DYaeYÔ5^Q@V%‚eX«¤,©WI!D–’ŠKIaL4¨@‰J ÆD<ÊbV]‹à.»sîÌìÜÝ3}äeñ¨ X‘0ƒû­êêþ£û½þÔï÷{ïý~ï¶mãÛ$b x x ¸¡Eâ[¦1 {Übôù˜ÖãÉcZ'ޱmÛ‡åjmë mÛÆäö“]ûïÔáêëë\߸K·M6že¹v†ãN`ÖAQ”‹ ˆŒmÛ˲`FaÔþnÔj¶aÔÊï¿÷¦Ý1<¹ýd•Ä…¢Cš-9]“E‡$²œ@3 S#H’±-«`šF¦V­9ªUý ­R~O×Ê麾§VÕÿõöë¯ä¸µ­ƒà8~†Cr-v{å =² ·G†Cr‚åx‹¢h’ Ë´LÒ¨ÕP«ê¥ª®9*•2´J9ªUÊ5M«¼])ÿX._­”K™÷ß}ã°Yþ_>>îø(Q”®uy¼Ë5VÔ å‘UCrºŽhšfH0ŒZŸ®i»«„¶¶íð!€fšfŽçyA×O¡…aØ_Ø@«;àISN”D‡t“GöÝè6yÔ@“%+*DÉEqO’i°«ºþ']«?$ÉU£†þ ì‚ ›a9BrºQ«V[ËÅ‚À@Ý·ŸôÝëÜåLÉå9KVÔ /†Wñƒã6Œª® $ Š¢@’ýÄÀ°,D‡T\ž#ž}é(ÝÚÖáEi‰[V–)¾éUTx¼>8Ý^ˆ‚ì×uín]+`æù Ã^Ï‹¢‹DÐ43Ó°m•r±šJÄžéûwïõýuª.-Ì0̱§k™Ï"CMÍ?‡–å`YÖÇ¥baþí7w½ ®¹é‚(æ=²ïN¯¬ ‚CM3Ÿvݬè®t{åž ;¯¼{ëæ'H^ú¥.FRô^Žã7:n¸=Ê~ËJ IÊÖ´òÒQXX·v•µï“=kb}kSÉX²Ë¦+å¢aÔj°,EA%x¼¾«d_àܺœ‡ÿùÎëæiÿÅn –ãa ùa$¢û¶ öï÷ÜS(ÔezØ9·«Möfò¼ðÌC÷ýlÏ¡v0kN×T°i‰ Ïóx‚eyF ¹lñhÿêþ½?ߺé‰ìQUÓšqÙ9n~(jšãöúÀrjUÙÌP%>з&:зrûóëGUoú¥óýÁ¦–ß‘K¼²4Í@×5dÓ)3Ýw|°oÅöç7”Žš2í OÆ£ý·¦âÑwòÃY˜¦ Žà•U*Š, „ÇÝrþÌË壪.ý³ë>LÆnH§âC¥b¶eDxU „Æu‡šZîýQçgŒ¾?qòT¢¡`(-¼?›N*ådE•C‘–k‘ñ«gþøªøøƒÝö˼ üÚŽ­f:•x0•ˆmÉ g ëH’„ààUT„šZN GƯíœÛõƒ3~x!9²¢vlß<œNÅÉ %>)s0Œ(І :à‘}„#ÓB‘ñøƒ‘Ùß?gÕÛ³ËjmëøFþ•ÆÒp6ý²èÎ;9^$)šEÑàyAAvPµ’¢håÌó.~¸·g—ÑÚÖAööì²ÎÂðÆ«/Z™têñl:¹³Ë¢ªk#;$ Žãár{¡ÂB‘æÁð¸¹#±.6Î<|0]tɼÎq&>jjޏ=2–;RÖª:JÅ—EU×1j$I‚e98]Fñ‡øá  Ûž[?Œ.M'ãÑb>‡ZõSè‘L€Ëíu¨þÐ=s.>»á`ËÓ½œˆ ,O%²¥bþ4A ) ‚à€GöMð›V^6  Ÿ|ø‘D´ÑP2->M3 D‡Y œE5§kÒ×]w×í9W]7?iY¥¨A¿ärctgÃ2M躆|.ƒdlp[l°ås~ÿ×ýUV¢·g—ÝÀ0ç'‹»Ã‘–û|þãpºTAmË‚®kÈeÓH%¢ïÄ£ûnÞ¼þ‘‡]×Àg_Ðɇ"Í7†#nWÔ+JNPÔÈjزLTuù\C‰Ø‰ØÀ½©DôñálÚÒµ ]÷ǖιè26iYlj¹NQE $E}ÎÒÅBCÉX!6Ðwé³O¬}©.“‡CÕËy¶zތ˗R4­Ò s9EQàxaÄÒû×Ý$IÂ4M‡V)åÀÕ'ñ^üóS…Dlðž¡D´7ŸF­Z=0r$ ’¢À²ìz†a_?*€`ë¦'ÞMÆ£+²éd¦\*À¨Õöo ˜¨êÚ+¥báŽ5«n/À'µJnI%bÛ†³i”Kh•rªTÈÿ.›ºvåòîz>˜Î>ûÄð¸ñË}jPáxaV)oÿÕÝKÒ “]M;ýlJöœ¯Bnxì7™†+ü¿5<<<<<\GúÏ<ÕÈÄ€±ÇIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/option_view.png0000644000175000017500000002170311273045225024524 0ustar julianjulian‰PNG  IHDR<<:üÙr pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFàIDATxÚäšy”\Wß?÷í¯¶®êMÝêVKÝÖbI^$¯²ÁÈ+àÈç€Í‚Áa30€É žÀp’'Ì8 É89J&dž2Øà#` fƆ1¶16X’­]ÖÖ-µÔêîê­ºk¯·ßüÑUå¶,Y’“?òι羺UõîûÞßz¿¿+¤”üÿt‰O~ò“ôRJ„躎®ë(Š’nÞEѺ(ŠÚSQUeXQ”_K)EÑþ0 ñ< Îi®(Š0M“øÃ´¶¶’Ë娱cÏ=÷¿øÅ/Þô^Úïm%…@qwÿÁuÝŽãà8Q!¥DUUt]_nYÖm–eý[MÓþ‡âÏ€ÊïSÂÚï l*Š¢o”J¥ J¥ŽãàyQ ( º®cñxÜJ¥R_‰Åb7ŽœFý?,„PÂ0ün±X¼3ŸÏ“Ïç©V«Ôj5|ßoª¼¢(hš†aÄb1*• étúêT*õEQnˆ¢¨*„8ë|u³9gàZ†ðµZíÎÙÙY ……BjµŠëºAð&ÀBªÕêë6¦iW´´´ù$<ò•Jß÷5!ÄÞ p†´µµ±xñbÎGK5]×/à(ŠÂ0$òù<·ß~;›7oÆ0 Çá½ï}/÷ß?ccc ðàƒÒÞÞŽïû|úÓŸFUU{ì1|ßGÑóV¶)„ ¿¿MÓð}ÿŸp]EQáº.­­­<üðÃtttÏç1M“÷¿ÿýLOOó™Ï|†Ï~ö³\~ù匌ŒL&‰ÇãÜwß}üú׿¦R©†aìLæ†!™L†¾¾¾sŽÙMÀ ›º€-Š"jµ×]wÝÝÝ<öØc¼ð Üpà lÚ´‰M›6‘N§¹õÖ[yꩧعs'º®ó©O}ŠŽŽسgQ½¥$–-[†¦iç–ÎÅõŸ+`)¥Râû>ýýýlÞ¼UUÙ¿?®ërï½÷²¸§‡t:ÍÃ?L¥RajjŠ®®.>þñcA†¡)¥| )%±XŒÎÎNÂ0ä|5Ti<ôB´(Šd†H))•Jlذ ÐtƒÅ½ý%›aøD–‹W¯azjŠD"ÁŠ+¨T*MÀ§{á hooG×õfs^®V«DÂuEQ„¢(¼òÊ+ÌÎÎò•¯|…_ÚJKÊæÒ¾JùÇ|óO.îþ–÷Ýñ^z–ôÓ×ÓÁúõëçÈ‘#ÔµÄrç ¸!Ýþþ~ÞntÑî½÷Þ 8žxâ‰ÐBtÝäÕWwò­oý5øÐ½¬[³„EþS$„ÙÛÍ?y7ÑÔ1ò¹GI^óA´ôÅ8žäû?ØÂÞ}è[º „f­[·Nhš.:+Ó4ˆÇãorVRJE±¤”Î[-†¶qãÆ –¶½²Ó+ghK[´eb¼ðüϹm½ÆÚø‹”‰Ì¼I¨eðKXl¦,îäähÛ^|’[oXMg{šÖŽvý?÷9yª‡Ù¶mããã4I¤‘ÂÈ,j#¯Ô|ÏþÚlnî?yó±û‰Ý…ïV ‚˲2étº/¿ozzúKÏ>ûì)åõ'NœøÊààà_tvv*®ëFBž~úéy ;S»÷ …ðàùËÎc9±Ë *ãàOAmü2„„5Ð,øUp‹óãÕit«d;Ô,¢P`‡³¶ýÍ×§‹Ïû!Û &½ /É8ýý$“ …B»mÛ?Íår¿ÜµkW"›Ín¸çž{ضmÛŸW«Õ“GŽyüTO/vÿès¿{†%ÑR~a[Ü2®ÉÅéí„ît œ„ªª ŠRBèÍxó˜6%/Íä´OWbŽj9í8ê]«ñªªyÖeË6IWW<ðñx<“H$^®T*«ÚÛÛåÐÐdrr’jµZºÆuÝýB&''çóã ¥”·¹éæKãOºŽ–Ø$`ãu)Ò©‚ H€Pç{$DÈ¢p~LÑñ#ƒßl/±¬Ë'Õ‚|yP~¹äDÿÕ þ×?úl?úº¤ÞñÎwò®n¸qÆ ϧÓižxâ vïÞÍÔÔ¾ïã8±Xì¯2™Ì祔lݺu^¥GŒÛ.@Ö~¨<_šøÇ{Öì»ë]—‘cW]Ù‰"ç p ôëÀç; (ʼtí {vTèIWèl•|wߺ࠳îïZìˆ'~ñ<Žž\8¹é©‹ò…Â×vîÜÉØØ»wï¦X,R­VYµjŸøÄ'øò—¿Ü{üøq4íõm¿VŠ­?gK"Iu›x£ÿšà¥\_øÚ3 Zs„-³;ÑÁòK¡6ABwÞ~¥œWmU5±VNŽ‚îgTX|ý'˘Ñ/Öûz[;FóÅáÁ3ó±^%Œ•©_võåŸ-K­GfbbEQPU•/~ñ‹ òÝï~—B¡pƒçyë<Ïk:*홟?yn[Óhmm¥¿¿Û¶›ÙU35 ×Ú=µˆ†Ü{ù7-dnñ-d:»æ=²3²¾³QtÐ[Àné îy‰}9øÖ«‹1“­¬Xæ!C·ó…çŸÅwkØõò¥mÿòoüÚÌØ‰¤—ËRÉ`z&§Y–ÅÆ1M“oûÛ”J%¤”C›6mZžN§?033ó:àC‡s®¼téRzzzˆÇã(Š‚‚ ‚EQðEÇ!#þìÒü¼{†/Uö±é£AI-‡Òè¼Ý"@(`µƒ™`ÏOÿžGw[lÙ-èl‹H). :Úvüø0«»3ÿlÃúKÿÔ«7ÔüÅNQ˜‘—_ËWj/>|ø¢D"ñÀÇ>ö±Û»»»¿ºuëÖ­Š¢ Ïggæ…!ñêéÉd’ÙÙÙkÇYìû>Aày==$.ºžçÆvsü?=¡F©&‘H M7Ž«]8·²ÊÐØ»Ã¤R­’N¥°½Þ-K.¾”•ë¯aèà~¬DŠêì4cƒk‡NN<44UüËJu2ðx"‘xöÀ׆±+ C§¡…„µ¬ƒ½HQ”OH)Ó¦i^ßØí¸®‹çy,_~-íaÌR9¶?Obr-–‹nJ"CÖ\IÐs­iÂÀ§½½¨R`mO+mŒäø‘CÄâI"¯Æìd¶thtòoF¦‹ß«Dì<•ª­÷/×9ñ GÓÖ ´ÛMÓüÛjµÚ^.—èééÁ4M¶oߎ¢®Ùp=‹ZtÂ#ÃLÅ{Èud˜ªæ‰JÔ®Åh=kh±-Šù9FFNpÅWâs\Ô߇S­aØ J³Ó Øí~eÛÓÇçÜ?©FüN©¡övÀÆãñO†±ynn.677G¥RAJ‰eY´¶¶rå•W⮺œðÈ+ÄÖ^M‡ë27™¥œ›ÁÚ£ÖÙÆHÙæäÐarùñdŠP5§«£ ;ždfbŒ×ŽžøwrÞCÿ䕇(Šèêêú^,ûh6›%›Í277G­VCmÛ”Ëe‰½}Kѧ‡X¼|5UE£%7N›éQ‹KÊj…ãNžcƒ'ˆ2]Äb6ÇOŽ‘Ÿ›Ãq]¢T‚}Oý Ëйd5WôöÞµlMî¿íÙ³»:;;Û;o«úp΀]×cí%—Þ×ÚÚúÑl6ËÔÔ“““‹E\×EeY4jH¥r™-ÅYþðîwc{9´XHB3Z˳cÆaªӫµ*ñdŠJµÂØè(BUÑ5ª™!ð%±JÏqÖwvvüѵ×^ûçaR.—'›Í’Ïç‘Rž3U«­X|nÛ?‰6°tñ§ŠÅ¹\Ž\.GCë´*žçáy®ëÇÙS®òƒŸýœݾxïfFql¦Â¸«aêKúº9°o/3ãYÚÚ;p]?@,gjjŠj¥B¡P@UÕ­ªêMÓÛ¶MWWaR­V‰¢ˆ}ûö1;;{vÀÿï?>{±JÉh¢ôýÝg7¼œ¥\.7Ë' Ò‡çy8ŽCµZÅ4Mžx~Zzùà?ßH^­15 æEŒœÀó}:»cÚ ^{m?ù|žZ­FOOŠ¢P©T(•JÄãñ”ªª_BÜ/¥$„Í$hÆ Åb‘¶¶6æææšÅ8˲n‘R§c3„ P.—‰¢ˆ3…&õó»ED§mBËs>#ö ?¤¥[iIÇXº¤ƒdÒ¢\©1[¨FȨÁZ6Aû~@øø¾O>Ÿ'•JqñÅ«QÍ8îø!œ™,®B‹·Q«VÑu¹¹9ÇijŠeY¤Óé¦ÉhšÖ Ãpc®…s6êMÅb±9f¶msË-·Ì¾çý×âºî››ãÆÕ]{·(33-¢ÅDˆ€x ºÚ :Ò ¦æáx’R-ùúäH‰¢Hü $Š"<Ï£¥¥…U+W‚¢qË¡8~„cùM3Ã0ÃJ¥Ò<Ðp††aày^Ã1ÚQ}ÿ-¨bÂ0ÄuÝæâ•Ëeîºë®z¹Ô+i·€,×vï_’^C­šøz‘Ð7Д€eÉú:“®$<ÙDÑ< ßÞ֯о /ï$ªÓp³³³ŒŽždõÚµ˜ºN{iœtK¥ªÀ¶ÁqR©©TªiÕj•†W6MÏóÐuýz˲º¤”ç’34r„¦ ¦v¦ý bªtI);‹£;¡™#ô”ynJ1‰õšeþßpÍl ´óQU•‹V¬¤³=Aïè£3A20ÐÏ•W¬ã²«¯âåÿø%ô_½ÄÕ7ÝÂŽD/nÑmÚa&“Áu]¤”¸®K­VÃq4Mk°éE‹] üÃy–ê$^Õ?S!­æÚ‘WïÊyŒñ ÂT]—È©2êïÇj½®öïqÍr‡”©áY«iI¥ªÆµ×¿‹pûâñïy÷´uµ±ýño‘ÿÙ£´DÐõôóÜ8ÐÇѵë9ª´ D‘L&C¹\Æó¼º/ð ðYVq] ÷|ªþo<ÕÎxUP£™ð*U¼B€°TtS-ÄÆ'3þ¦?¦oÙ"Æ(-¦Ã‘™)”D7‹ÚLz/ç²ËVaÚ-i“]ï‰ï1`Y(1ßNR¸™ZÂ"[P2õfí¸qøEQ”æQ‰ÆîǯǞ·ØqN_Ÿ‘tÍ<˜&n¥Dè ‚J€šTQíy±G›&?õ<æš÷°\üwú¬q’¨ÿ*V]v2 ð½¡jÌMŒ°sûoI¬¾ŠCF KÆZÑbdâqªB2Ç0ŒfmªZ­¢iZSÅãñ8¶mS«ÕŠg{¶ Ú[jij{£EÙê`¾;YÑÐS‚ aÚ Z\`z&]խ̹w²¤­ KÏa:!'£AÉñjeTUÅ«–ùõo^åP¹+Œa&Iß Û²ÉÄlRɦiÒÒÒÒ¬7²¹T*E2™D×u’É$¾ïcF¶±0 FQÄôô4SSSg¬k®ç¿•›+è÷ÿÀ?pôÂd„žRP,ðK-© Æ5Ú2•=ÿ†°§†‘Tèlµ˜9¶éìºÀ™›ãµ~ÉÈ$t¶µ³-‰©TŠt:M2™$‹aYBˆ&;‘Ëå‚ ¦,Ë" Czzzr©TêPlƒyÉçóìÝ»÷¬é¥–н¹¾„Ñ<##ÔÞοözÝ_ž™0쌂–PyJ„¢K úb1œäF*ÕWÑ•,é`Ž;~Eòª÷0þäß‘‹4ìd/é–Éd’T*E<oJÓ0Œ¦'u‡gžy†Ã‡‹Å0M³yª¯££ƒîî礔͂ø±cÇØ·oŽãœÝ† M½ipIw ‹¥p½€@Q—¯|¤üdö úd„™)‰DGOi œ VâÊ ´ÍŒÐV&®ÙÄ÷¿ÈÜ¡!”R™éŽõÄ´y•l¨­mÛ˜¦Ù$K¥ÃÃÃ<÷ÜsìÝ»˲°, Û¶›‹”ÉdÐ4íõ¬‹l6ËÁƒ›U…s¤Ðß|µ¶ØÜòŽåÜöŽåô/i#Œ¢S?³[?ë0ÈtGäû7A{?ß'›-2Zî¡WŒ£µ®Æ¸•êó?¤vh˜í‹xz\eYÏbzzzÈd2$ 4M#‚æVoÿþý As1,Ë"‹‘J¥H$¤ÓéW’Éä5•J…044t^ÄÅ÷ó…?|j?{ö wÜ´š+/ïìyç•_0ÿ‘™Ñ -B%ß®"U Y•x¢‡%ªAxÂ㤙Di"?I!ÓÊOL31Sbtø–eaš&ªª"¥lî;Ã0°,«yBÏ0 t]oœË¤V«mappZ­öv‹$çvõ-iãnZùþ«Æ†\›P´v_ÄLåæ/ ÆÓþþ›Nœ¤D ¥ùÛ£ŽÎ¡©Jã ÈÈûFµ@Q”fÓ4 MÓ0M³)åD"ÁÔÔÔçGGGÿªžx¼-î|7Èhy×+þÅm¦¿9–ÍhÂg·ÙîµØ±ÆÐN|©0ÝÚÆÿ9æ01QÄ4ÔæQçlßÐNX7 Ã"f›LNNÞ?66ö @}ãæ¹àþw,NÓ”zï,[Ú¾v}ZÿÀ†Åñ;ÕªÓ[(VÔdZ«æ®YÉPÞ¡\¬¡k¯ƒldIoXUTUCQ CÃVÝÁc£³Z,ä$ëÀ¢Sš\ÐËÓ,ÆY+õ•l€l|ÖêM¯Oશ½èÚ•±Mk{äG|ß[3˜ Ìã3:5Ï BAÈh¾JÚ&N#e¡(¡¢¨*º¦0|–¦ ô§‹eÇ—Û·eË®ãѯêg©~½ëíÔϰRÔÚ¨`ÖÇbk{•«ïÞ |¬3Å•¹²Ôr%Ál •ˆ\U'ïÚT}/R(o` æïç§WhªÀÖCLťժЕtèHBkB¥-!èJ NÌD¯~çWÁ·v~[Ö™wð`ð`!è36HR«ƒ4 °sE—XÿÕ÷Ÿ\Ý+®(VQÇfçéž|E2QŒÍJ\_’Ž JŽJ¡&˜«ˆàè”—RRJR6©UÝ¢=“¤c’¤ɈÙ2,J+ôd¥º:/²þ…¤MøÂð¹ÿ#ÿΖå‰:p§Ú?EêQ}A¢3…¥†Úª îJ6¾j±XÿÓ/[_OZ"~hìþ«H’[ Ò²Þ« lXm>/­žÆCÖ¿Ëôµ+—nŠòǧeíðxâ¾›µŽÓ’¹ŠddFú‡Æ£ÚíëÔdÜ"%º&8>-g³sdëÒpêšÎ2ÒžbiÜv$ÁõaÇp8ˆìœbvg„Ö×.¢ßŽ&wŸˆJ—,fo«pre†4_VžÆñ6L3:5/´]uA3êã   hÚë}+YÚ!:ÂDÅ…|U†R¢.ëíkz•î Dšˆ¦MÉ“@¹ît‚‹ZºÒ¢Ý6Pòrs9Yÿmãª9`(Å:Ðbýsm*û ÖBOœjÃê‚Õ§€VOQí†MÇë a±úoã¦×_Ä[`gÑíi8Ɔç­-XoÁÿªõïÜÏñêÀüj}:o=_G¨#giê)¡ia¯-°y}A¯Ÿâ ÔSžÙ,UB¶`Ä~Ïî¬1ùTÀ§SqÎxœjâÍ8uL9å™gòÑiús¹çÙpT§KËÂS@œò‚œa¡Î6öVÙ<Ã=gI'åù<ãÿAºK}žüIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/print-preview.png0000644000175000017500000000710211273045225024772 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF_IDATxÚ´•QKcG†Ÿ™99É9ÇhLL„­"]£¶.FoÔbYJY)ý¥Ðý-ìÝ^Ôà/(ì…Ð;éEïB.”•‚ÞäªÁDΦ$'É9™3½Ð“º&‘–Ö†ï}çûÞw¾Æž2¬Ç… ÈýKL´1úQ!Djnnný‡ß|óâÅgÊs]”RÉÙG€Æ˜øî2f8÷÷÷ßÍätl©R©´õó»“æû‹ßÍ`00ZkóO¢Z­¾>I°ä¤›/--}þþââ— Û[°”¢Ûí=:Îhõz=úý>Zkâ8¾Ÿ/áo\ë!øóçÏ7ÏÎÎÞùí?Ÿ¥Ò)aŸf³‰Öˆ¹o ­5årÛ¶?‚™(²ÂZ__ßüîûׯNýmEÏJE\Ç!—Ëáº.¶m#„@JIÇT«U‚ À²¬‘>]$„[[[›_½úúåÊʧߺ™ ³sYlK!„b¨õX¢”­5½^ÏóPJ!¥œjS!¼/_~ñÚ¶SÔëu‚N—?Ú>Åb‘(Ðþð)%B„c8??Ç÷}æççY^^fqq‘‡ï*!°]×µ‹Å:€ÓÓSòù<ý~Ÿz½>ê÷o2¹¼¼DA­Vãðð­õD ¤ã8w%wI¥RX©ŽÄqLÇcåcÈf³ Z­¾ïÓëõÆ’,3ãeSZkúý>Qaâ[Ç!PJ-!–eáyaEaN¯ TZ°Œ1ÄwÀZk®¯¯G‚Nx/ÜÜÜÐl6Éf³£œiˆL&#â8ù:NS©TF7NZ“ì[­Fƒt:=š‹L†&)»Ñh¬®®NjQqttÄÕÕŽãŒ\6ñ¡EQ¤•Rd2ööö¨V«¸®‹ïûŽÎf³I¹\f{{›t:RÊL¬ Ýn‡J)<Ï£R© ¥äøøøVð F"þîî. ÜÛ‰;™ ­”Âqòù<;;;¬­­%Î#PJaÛ6®ë’ÍfG£dÈår¶”˲˜™™Á¶mfggǦåýQ‘Ü?ªAxrrÒ¨Õj?%NÑZ‹¤5q‹ æ^«Ì$ˆ;Ûe€0¨ÿø €†1Æ¿O 4ù" 0ÆD#‚§ ÉÇ_Ëã¿ÎU™N³IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/print.png0000644000175000017500000000703211273045225023315 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF7IDATxÚ´–Ëk[WÆsΑ®äG­XF~Ŭ4&uC¡í¦‹BéÂtW¼êªÐ]·¡ÐvÙ®º 8@—%ÿB¸”.Y´¸‹8-›XTº¶^¶t_Ó…Û²-20‹{ÎeæÌ÷ù截ò&Mú¬™T*5äyÞ°ªšb¨ª†GGG‡@Ü»éú$LVWW¿Z__àûþ•Ñslmmí¬­­-H.K@鉉 æçç‚ass3RÏ®ý 0€”›Îxý 7} ’ _Å¥ô*’“S%a&“,²ÎY€æE$‹µöFaúæ©T:Ç‘ˆËÞzúìÏöôôŒ†Á¥Áã(f{w_gæ?7ÆFƘ¤Y¯½ª”K›@K€¡âòÊ_~ýíOªI: C Òž—Ïç³qœ\ŠK’$êWÊ5c­±Ö’ÍÛí—/žÿòóÃû~¹´áDd¤05ûþ»÷Æ«eDN <>nmŒ»ŒʼnÈÂÒò˜XKÅänäHg2wÇó…würiéj* ­×iÖk r†­5õi»}Ì[#Y†Æ<*4êÕV…§·È¨&FD8ï×1c„¹© VnÍv í¨€¸î‚#‚1ƒßRå¤èÝ’Ï~ù/e»Jt½åÆqB«Ý& C’$é,í#`Š æÖ8r¹\W7¸³2 hÌÞ?qà—˜™½ÉðP–$QŒ9MÏBžu¥±„a@iç_Æ s˜|¾§Ä£ª`, Å·ùô“øðÞ{§7ŠÎ)O!é©Õøý鼪4ˆ¢c1ÆX@Jج×ÊQØBH°¸Xdttt`ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFüIDATxÚbüÿÿ?-Í-`a```ˆI-| $"þ‘‘Qˆ†þû÷áÍ«g¯–Ï›¬ÇÂÀÀÀ &)#!(,úéÓ‡wß~ýüI+þ3üû÷ÿ'ÜLŒL _¿|þ×]_ @³8øõóŠ„‘¹Õâè›X ‹qIÉ*XØ»úš¿yõ|ÙÕ‹g~R-]ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFûIDATxÚ´–ï‹TUÇ?çœ{ïŒ3;;»îªéêê®éZš©™/JR,‘ ‰ÞE/zÑ›þ€ zåÿ웃Â~‚E…E F`K˜dëº+Ž¿¶É™gæÎ=ç<½˜™mfÇÝ0èÃ=çÞç÷ó=Ïs•ˆ ”R€TkµIøwêä÷€—–â CyðÓ/_½|m~r8}½P©˜ù»•-‡ŸÚ÷M* ïTkõ´A:…¥r5¬ÔÁ`>…Fë+s×’r¹¶¯\©ïÞ»kìÄ{v¾£”²""A‡ÁÕëÅ׊Å2SS³Ï_º8Ey¡ÊË/<»5ß߇óq„†wßû„ÓŸžáí7ß`÷£;8}æ;r¹3Wf(•Jo'Z‘¸¶ „ {7›Í08ÐÏàÀÆDA“E‰B­l¹„bñ6ÐÚ°ml#{v=‡¥¿0FD@£Ó€Và¢0DZk”RhÕL¯n `¢U©4J+Òé«× üþÇ Þ Q*`ÚuÑ]ERÍ£xï´V=­VªnÜÆ9G(´6xÚ(ŒR]…º$EPÊ€I=ÆÙ¤r>x€Áþ[7#€1† 0-µÝ  º (‚ó–‡F6²*“!nXΞŸbÝðõ8Æ&Á‘ SlÛ±ƒß¦ œ»p‰z5&0ç¥ÔÝh°Ö¡¼îËYøõÒ,?V/ãœÃ‹'1Z<ÖZ¬õhåI§SÍgdð+/Ôã:Ú[Ž<³P8gÁ«VF(A¡Q”R(¥£ˆJ¹ÄäÉ^=´Bh*÷êlX“c|tý}¯lµV'³*ÝûaÝ õF¿4)÷]ðÎÇñ²=áûó?óí¹ ø¥¹ð‚M"Ü×€jVZ´àÀÿãÅÛó]ë^­Æ\až“§¿`¡Rí ÞZ”Ö+ÔAœÇvx7yêsúûúÏ##ëÙ¾m3³sL¾ÿÇb˦ MMoÄÝDpÎa–Ü­'÷ïíÛÌúµÃ=MÐy!IøÄ/Û‹¼‘øƒ|.=žN…ñôìuÛ¨6ÄŠñ-$7ó[,–X¼RD©ˆ¤áôÄÖ-Q_T\›Y‰J)¤€,i Ń“êÀPt ê¸×šD¦ÃÀƒ ý¶žFkߌ`É_…þÞ·‘–rY4ðÑßÅ]Ì<’‡…òIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/save.png0000644000175000017500000000704711273045225023125 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFDIDATxÚ¬–Ï‹UÇ?õ^ÿ˜ìîìÌìlŒ?‚&YBV !Fñ "AÁ›G¯¼ú‚à)ÿƒ‹¹)½ä¢ˆY$.Æd³.Y!†13;™éž~é Ó‰;2 Ý õ¾ßWUßWÕ¢ªˆˆrMLùo›ö@ÐXTuýôóÕw®íܹ¸ZO¾Úë÷í»ýcç_9÷ušÄ †YM•¨–&q·7ˆûÃQÔj,&±5æÆ;E¯7<×ëgg^8}ü‹gŸÿpªªÑÔ ¢›·:ïv:=66¶ßܼºAooÀÛo½±ÖX^ÂzˆbËÇŸ|Áå/¯ðáûïqæ¹u._ù–z½ÎÖ-ºÝîÀ…2?!0@,¸»‹‹ ´šË´šM¬Mˆ¢±‹¨ Q™-_ÐéÜÆÆXN?ÊÙÓÏòY÷o¬5 0š&0>‰c0Æ "§×Œ7`“˜Ci 1B­ssg—ß~ß"x%IS;©‹©IÆŸªB@U1Fªè ?`÷ÏÛxï‰#ÁK`¬`E*…*;U± J‘åxWLB®ØùW_¦µ\çÔÚ3(`­%Šl []T‘¢*>8ê(‡ÈGŽo¾ßàÈj“,ÏqE@ñ¤qÊÉõu~½¾Ëw?n’ r"kðAu5Îy$(µ¥‰ƒ_6·ùap ï=A•¼È1pÎá\ÀH VKÇÏÄfhP²<ÃÇ믽Þ;RfT@Á D!Nú½./}ÎêJ{Fú÷2ž<\çÄÓO0—i‘F¨†“2}ß•àyž3·ÅUþ•@Æ•V£xan|UÎ!Æì¢¨¸ óG åõ‚ªxï±2?>:N“>p¸j ldФ§ÚØghPBáðÎßù‚¢ðû j›+ût>9VÚmÚµgÙ6 YQÌMàƒR#BöíEÁjþi£^;QKãüúö-7ŒÔi ¥LÊüŠp_ð"$iB1òæÔÚ±dy)~â<™HE`¡Ñ’2`ªª‹¦uÜ+'‘"˜gèOpFåû8Eªª"â¦ä„ª%ŽVš]ù›áËõ¿Ù?=ª†Óü&q‡IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/settings.png0000644000175000017500000000705511273045225024026 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFJIDATxÚ¬ÒLeÇñÏ]¯…B{\)?\Ënki¯£eÄd“­Cq,e„˜¹¨$K@ŒÑÄDÿÐ%31šÅLÍÜË\Æ4¸L– à§ “È\TÔM± -¥Œ°Rèï»ëù× Y`žïÿž<ÏóÊ“'_B’$<(g­[¯ÎÕ–’$I<M&bÁ¾KQl0â~x÷ÓûÔFÖüfñ¦’Cê\ +¤ÓÊXl%]‰LÄV–—#K׋¡Þ?~XZ ¦V/jö6¶m¬£„5×ji<Ÿ–ænOuGÂw¯&â+iQs r¥T-èݼ«ú…£â‰N“¥Ì©ÑÐ HRJ%“ür$|¾ó³=«/•W>I®÷ÿ(aÍu†Ó=•­btŸ×5<÷ÔêKž?3ëÁ”³Ö]hdK_4YËÞRªTX /Ä(J™›£ÑJUò Št…ÅÆ=®ã!"Y3×cÙV~\K3Ås3·®znîþëíù¹$qde«Q´ÉØìr0<,  >Â|h&âózu;õwǧú­uÒ?z1‹"__TÆš¸U5õŠÂ :O׋.gB³Ó'¿ë½ðû½ƒÏî¿ùÑÇÇ»é<Ý£Zšq€Ùä®ëÿOs|U5õ$g¯8Ú¸Qä9r¾ý“£²apº²ìÛÿ~óV‹3™LHßÈщ±á÷¯÷_N¯;nkõã•oRÁ‰±WÂw´4CXlåGlŽÊ³NWƒF ß~ýåÈtÐÿA"ÍäÃlµ7söŠ®êºÆBY0Üžš8=;ü‰O§ Íc°ÕlÛk±9Ú«jꕲà¾KñI¿÷ÕÐìtHhi¬Éº‹™;, €Ë=Cñ‘—çïÌŠbFÍäc‹Ùv¸é…¶}²`øª³½×?êi]¼3'J’}aqv)çø¢ñ`Kµ,ºÎêðy=¯‡ç¡ (ï»êM%¥T¹ ‚@:•ô‹‚”ýbp¹XY÷ƒ$eFoMú^»r±Ëû¿À°Óé2d2™Å_¯õ¥àŸàbU!q#IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/skin-preview.png0000644000175000017500000024454211273045225024615 0ustar julianjulian‰PNG  IHDRÂD´ñ>€ pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF>IDATxÚì½wœ$uÿÿ¬Ô¹'ç´9/av—(ˆ( †;9Ìù‹§þTäÎ{èy†Ëžž§çbNwf A‚ avÙ8;3»3;9v¬ôû£»jº{ªº«ggvAëãN¨®úÔ'¼óûõ–?ö©Ï™øä“O>ùäÓŸ(‰þøä“O>ùä BŸ|òÉ'Ÿ|ò¡O>ùä“O>ù‚Ð'Ÿ|òÉ'Ÿ|Aè“O>ùä“O¾ ôÉ'Ÿ|òɧ?’+^aVW]á×bøä“O>ù´Ü$Tý¡JAè üÌ’¿›K$8}òÉ'Ÿ|ò©Z2]›P"ô'ÙTòY¹œ 3K_¡4MìŸ|Ùç“O>ùäÓi6„œ€4Íb˜ÿ·H(CÙI– @Ó4sß[ÂϤäß ¤O>ùä“O>-­Ü+²ðrÿSÁŠ„ )ŽÂPv‚EÂÏ4H$ÄÆµ+Y³ª I’‚AûãZ&ƒ¡ë ,H²šŽžÍäî]@¢(P‚ˆ‚ˆ ¨ZMÓž.Eã-ýÙëçNõ8}:µs"Š"¢(ÚžÃ0ìg;CDEL4UÃ(Ùc‚ `†¿ˆÏÑ}ºÏ›Ûóÿù@µïdŸïÿä7¦™Œˆ9aišÅÂÐÑ",‚– 4ÌÜnmnäÌÍk‰†Cè†ÁääûïýÉáa"­ml¼äÄjj0TÓŒ¬Ð»ûqN<ö0¦®Ó¸õLVžs.¢¡ÛÏe™d"Ńÿ’c£½ÄBµœö¥´·u ªÙEOžiše‚£…_ȤÇk+ÝÓ˳˜£Óµ•îáenÏ­æþ‹yçjçÞm¾—ríOöž•„`bf†¹t†P@&Q©©­#TŠö–õ½(ÉÈdØóÌAPâôt·!‹óc3 T*K¬¦MÓ]÷Éb÷bµëå¶wªýìÉ^·Ø3éõ^•ư˜³±\{Ðm,K97ÕŒÝiOÕJÿ&Š"/¾d¿ºëADAÁÑ] BK›µ¾ ÃÈ BÃ`ç¶Í˜¦‰!ÀÔè(¿ûÄ'X‹sÑë_Çî¯ÝÊ¿½ƒKþæo¨©­Å4 Ä@ƒwÿšñŸ~‘m×¾Ž`m»¿ýiæŽþ›¯ýKÐ5A ™Hñ¥ïÿ=jd˜ë.+<ùsþé[?æ×~’•=«Q5ÕUê— ±ršƒ›Ð;Ùk£Ù8Y™ÕŒÍÍÒ(Ýx‹áfªV +o ‹ºŸÛá®t¯S©+Ã<ýôÃÿ…/#4tÖ²\tÕËÙÐÝB:“E IL±_/+;H©2+{Z14QVÐu EQÐ5M7Êž…jÖ±ôn{ôd÷•—óZÍÚUë±Y®}Q­§ÈIH¸)Én‚Úé>nüe±ó馴{å_N iµûb±k&‰bÎK)š¢ˆh0/ KÜ£r¡[Ô†fÞ4L#' uUUsœ$qø7·sFß.ƶ Î&(KÜñÓ[ùÃa“[>ôö>r'½ÃY®~ÅKyèÞ{QÃ\ýÒQ1,Î"’a䯴Ëí[¯ÌÏË>öª9¯Ü8ªeØ•ƒj»ïñºŸË r×: b/|ÏëZz’åÞ¿œ÷ò¾e³*z>\'¦(€iäܤ¹¸¸F b‚¦ibæ… ^ UQ$~bˆí]ÄEsÏÔ( çtwòèð0élTuz„ëÂ´îØ‚@&i8{=›“ifÉ6w€¦1£çÜó7ÒT_C"û,‘œ{ÎYìž™`.1‡$‹K¦Í,¥/ú¹ä‹_ŒV\f2l5–ñRhÚKeáV;Ïšž ;›@×Tfg“Œ߇ÚUãƒLG[ؾ±†÷Üô.Þø¡¢E¢©³3›â™§žDì?ÁÙ×ðäÑ=¬Ûº’½{ž¢{õ‚Ýí4Åjc­L>~7ý}‡900Æ5¯ºž¨¤‘Θ§|U²þ½ìµå>?ÕzŒªÝ{Ë£[ªyYì}¼œíÓŸ¬d¡Z¿WÕyAh >Ñ1 d¦P*Íר- ]×Ñul6kßLnoG2TBgoCoiAG~b7r{;j&ƒ©éhb€L]3‘öFˆ…A!­¡Ö5¢¢dÓ)LA¢6ÒŒdÓUÛFTŒ’22 6Ø‚a˜èÙ¬'ŸðbãfË峯æ9Ký¹Sõ¾ÏuZŽ÷u½§ªš%•Í i*º.r`ßSŒßÃúó×r°w˜µ·q¤wkÏêaï¿ä÷ëÖ°÷×·±f×N„Ù î¿÷~ŽŽ`˜º¦"ŒïçÉƹçñ#‘ɉQB-Ä‚"©t†E”/z¾–j>—k>Wî[M¼s¹ö¨×矪9>™÷\ìgUUC×5{.r™¤¦i Rѵ®¡‘„†¡£iªšÕé:‘;é{"@CW7á¶6R¡0}33DÎ8‹l*†®eªfG°rk‚(040ư¼±¶“l&‰†Èêö³8<~œÄTšº¦zR™4ÃGÒlh{º®¡éª'×G%aRÉï]M ÖÍmX­`öêB¨ôŒjçÂë&+ç]lrA5Ö{¹øHµ÷¯ö½½<§ø 3PÏEÛ#¤f§èÜxýï¡eû¬¨—™R»¹åæ«yⱇ×wó¶k¯àá'vìZOÏêÄ4£I®¹êå„‚¶nßFcG#ãSO ´­cÓ&ƒpt¡pŒíèÙ$fY÷—×ùò²~åâTåÜ¢NÏ,g].æÌU²T«ÝGåΗ×Ä!¯ó²Xå5á¬Ò3¼Ä„½ì‹rûe± 4nüÑ+¿Éª*š¦å3°EADóe%÷>ö©Ï™–4LÃÐ1ôœð˹D³¨ªÊK_xžý IQ‘™j#fÒ)±8)@WU»^#H¡96‚$ÃÈTéÐ2Ù,‚i`²¤ LfÔý„c)Ò)¹š€Ù@FMyŽT¬ô·J‡d)ã“ÕÄ*1¡JÙk¢\lo1±¯®T/qÅjÖa±óS.Žå3M%‚ŠD:“A”¢‘0†®“Íf‘d…L&M(&“N!*A"¡`’˜›C† ȹà~*AVTU# “Ig†‚¹à¿¡‘QULS°Ã•âš•ÜÃ^ÜÕ^㵕8ªI¬*w¾*í/ûÓkL°Ú÷­㫤ôVx•šr‚ÐKì¾Rª×hµsXéÞ^æ£ð_UÓ¸ó¾GQE Ë2’,#‰¢$!æ­Äùd™‹Ð’–¦%óqÂD"Qtéœ$ŠD˜Ô¤çæ0òÒ׺WRH +mÌ¥z´‘Eš,NÎ1MDQ"Z‡4'ÖMÒésÚXYɺ³¿|ú㢥Z÷ùS’bnv¦è沤ùZÝ3E*áÈs³¹_Lûkô|ÞK>_9õçVÓ4 ]Ç”dÌ|à<(Œ ²Œ]HO¡{4ç"Õ…‚Ð4Mf¦¦Šü¯Î¦ê\NîåŠþç}µVþÀÏÎÎÌ×Y‰â’øé­ë—*yÄ«+£œj†g·ÃRøÐã_·ÆŸSR&+-p+Tiñ-Gü Z×ôrŇ—ƒá¹í§sô\ŠõTrÑ{É´ÞÛK‚ÆrÆÀ—¢†¸’•çÕ/åC…Ï+aXêý¸Ø¼Œ¥ŠY‚Lx¹—¦éycNÇ0$»6¾tA²L±´¬B«|Âà/ÿò/=¹‘*ùtÝ|È•üê•L}7W\¥8CµBÅ‹ £Ü»”KöºÀÕ0ÿJ.ªjW¥õ÷:_•\Ú^\DÕÜ·Ò:”2f/1¬J®ÆÅšWë–öâz«4'^bt•Þ׋kÎ-f·˜R¹3_­k¼Rž×ý^ Ï)çBö*X¼¸¾½ð¤¥b^Ë2ª‰5WŠQ—›ûd*Å#Oþ]^d˶ü®õ £40Mc>k4O¢(i^âW^6m%¿w%AY)R­¯½Ò‚—Óf+1'/–UVú^ÕÔÙT²æL‡:4/I9Õ¬‰—Cmí+AÐu½"ƒ8æTºçô|\ÜiîË1ÿ@ °hËÊ«ÒWÎ{áeïV*b®dµjáÕ$fyQнì›å°ô ÷}¥˜“ëõìWˆ¥^±ROÀb“Õ¼òZ§=_MÂÍb †rq>/Š‘ÛYR³Ù<Ô¡Q$Ï@Z†íØ}Â,ù²p 277G @QÇÅ*5˽Å-áê…áæLN”$Š˜ä\»Nî$·Í*Š‚m »-–“;ÂM€8=»”é{q¥ÓiLÓ$ U<Ü…ŸwڥפR)dYFQ×Í_8ÎR7]9EÅ‹\zªªd2¢ÑhY¡\zðÊ1™Âë • ë÷¢(222bÏ…›2Rú~™L†¶¶6"‘È—”¤pΜÆêô>¥×yñÊTRPËiêétš`0è:ÇÖ™ucXNcðbVk½U£h¨ªŠªªD"‘²ç³œ Ò͵YmLÐí$“IdY&¸ž·JJšÓý½(L™LEQy^¡QÊçË/Ö¹³Æì¤Ô—K˜ñRp¿à} ÎLÑ3æ¬|‡zÓ=jÿþýŒ;Æó, ;“É ª*ÙlÖqÒ _&™L255… HR®ÆC’$$Qpeª‰d†D2…¦iy°‰®LÏ&H¦²›Ñ$“U™K¤H¦ÒhºŽªé¦‰ªjLM'Ð4Ý•ñjšF:&“ÉØ_åÀÁ ÏbðÙlÖþ²@ J¯/ýwpp#GŽ7aöáÎæµ /Ù‚‚ päȆ††l`1}ëËbzXÁJGvÚ¨¢(æÖL’ jPs_…̲ÜxR©O=õ”'MÞ‹†XÊèKç§p¢Ñ肯H$B4E–"‘ˆýs4µ„Óó­Ò£r‡Ú)¶•ÛOæáç& •¿BfUºFn ©$I®±'€£G–}v6«V´²JÇ`ñƒJ ¯T1(d¨NïRÊðÜæjff†gžyÆUé)'@ܸۗ“ò]ª¨: í#GŽ088ˆ,Ë®ç-“É,f/çª7MÓ>ŸnÆ$Iôöö:¾'S)æææH¥ÒhºæY L6K:fff†L&Sä–,|?E– JîK‘e%÷PûûªbŸ&Û!Éî/2ßoÐéÀ*Šâ¬õ©Lšd2E]m­=àD"A,[ jšÆÜÜñxœt:ÍÐàq‚3³sHJ€´* ‹kVu£ç±EA`z.ÍïwïãØÀQÞó–ס(2?þåݬìî`r&A2™ä;·"æz.ņF§¹çGhk¬áU×\Áì\ŠŸüê.Î߱ǟ:@w{gnZnÈD"A"‘ -ÀÌÌ 6WἌŒŒ"Ë2ñx¬( “É Ë2Á|7í°ðÀ–ºO4Mcff†xv533ã‰)9i¤’$±jÕ*"á0S3sî;ÆðTš³Ä릩­‰YCˆF£ttv"‰ƒ'ÆÈd5MŽç’ªòñM/q+/V—+°TpäP$p…ç,çFt–®ãȃQ¼èâó8>x‚ƒ‡zÙ¸aÝ‚x²“pQd™ã'ظv%ccã¬\Ñm[…®)éF¥IÓuR©¡PÐCšxI’=½»“5Šà=Ñd1˜º‚ ð›»îg6‘¢¶¶I’9Òÿét†€,ð†×^GDÎ?ç”êTªbG9k9çNËr7«°0DTWWËÀ±ôbçö3ظn5‚(07—(r›Ê²L8&•J¡æ-N§X“kØòLWÉõä¤Q™¦I  ‹òÌ#<ºç]äGŸ!R[/*m(Ôü‚Š,óÄ3™D’D$A õšË¨‘å¢qUª«”ñZI–½Î¬nO—Khr3)Là ¥fèéîäøÐ ;ôP®”Ã4!ñâK/àà᣹˜¸é#œ·®rÙΚ¦F%±¢õ<ÿ·\r™€^1Õ1–W&©ÎUÁ)pM»=£ð¬«ªÊK/-ÍMyÓõu¹ØûØ8²$#Iccc¼å-oaÅŠ|ìc«JÑ*Mz%ÉòëT´(uMcpp]ÓXÕÓÁÜÜœí6› ½­€P(įýkþë¿þ‹·¿ýí¼ô¥/-Š»¹A ­÷ÉÉI‰Û·o³­¿é#‡©5 Ò&&&hhhp<Ÿºn°nÍJúúÑÙRÇúÕ+íe¨äí+ý9Éð‚ vÒP_ç¨Ü•zG^ýgWÑÛŒ¹Dr^…JÏx®Ø=«ª456pÁyç bÙ—Å ½“„•zAY?ëºNsC gn\ÉäôëVv¸ºFç3*³ÌÌ¥0m|Ó©©iš£&uµ5¹ÃZú¢¦i»LJ³¿ ã* ”™‹öfß¡~"‘™l–•Í9ÆSrØsÍTÒÉ9R‰i%`Ÿ~ÔœA:™ÌeíYIF¶Ö“K?lٲŎŸ 288¸hËÇÎ5sE¡AE!“UóL±š69N³ªª$IºÛ¹ü¼M|ï¶xÕ«^H4µK9JµV+s5•J±ë¬u¹ÒŒ| ªªiUõƒs|V’–˜ÿBͺ’e 3æÊ1î\’‚ ¸Ç”J-;Y–e…l>Û¶&[ÀtœÎ–¢È€I8dÇö3›G|ry7ÃÈÍÉ;Îæà‘£˜†Y…«] PòkJÕ Y @’Dטoéó%ID–ä|Ù“³…ê$ìEŠ’³| `PÉA»æí]×iiiaíÚµ¬_¿žP(D*•ª ô¡Ð-:;3‚èÉQN #I:ÛÈfU$I"“Õ§­µÉNLÚ²e l޼ٶƼà»Z.WËË%Š"©±QžùêÿhieÝ5Fp|’‘‘Qššš\cĦirÏ’L¥Ù¼n²$¡Àbº•å˜y>cYÿÁ`€û|„ºšW¾ä2G7eáýþ÷·‰DY¹¢«@sbr*I 5@@Î{)*…è–ª¾T>Ù¸ekµ4ÔÒT_Sö;{MU™™K‘Lé¤s¤fƨ ô¬YKVÕŠ2T­À­iâ¨ùZLN±RÝ0mfa'}˜¹´]‹±”ŽQS5Pt^rÑÙÔ×Õå‚ý‚€€@"™äw<›K„gvŽš››™ššÊe’åÝšŠ¢°fÍb±XE íLÁ:ÖfÓ/‡n¤ë:Ç‘UU^pÎZÆ'¦™™M¯©u¬™³î›N§9v|(ÏÔAÕ4¨©©ñTð_N$‰ãÇ™šžf.‘¤³£Žö¶À¥÷•$‰T*ÍãO>M:¦©©±¢u–ûœH:áøàéL¶(I¨Tƒ¶>§(2'NŒpìøÍÍB.Žâ”ˆRø½$IôõpâÄH.;äçÐÍÅgYï™L†¬ªÒÕÑŽ$Ëž˜„§Y³²;¯¤XÕTå>oŸ àà¡ÃŒŽNÐÖÚŠ,Ëv9“#IÙl†C½Ì%’È’dûVM3o™ ªlňòclá/Å›³Ù,7ß|³]‚SMUaòÙ×¾ù=úGyóë^ ÁTh@¬ë:›7¬Í+‚ó¥Eõu5ìÜ~†-ð4M£­­/~ñ‹ö³JÝönÉ_ó®U‰@0`ó©î—]IëgÚž«H>iÐm½ê% R[WÇÁ#tuv,PP½t™WU3·n¤¾¦¦È"tŒaž¿“±ñ‰ÏÎ,æ7†A<á…íp‰—ãÉ F¹Z¡W)¨«išÍs™?ØEòN¤ª*SÓSì{ö“sYšjdÎZ×ɪU«ˆÇkl²`Q%Ý0„â ±aš„Â!ûÀÖAÈÁU૽…æÆ:††Ç t´512:A0À(Xˆp$JSÂèØµ5ÛÀÊx˧å™ÔÄ1:Ú[ ‡#EcÕuU«V ™œœ´×ÓÓCww7“““v ¡’ˆ[²‚åZ5 Ãf sssŽY–•²åJ7ôÆ ‰ÐÒÚJmm-GÍÅ‚;:Š’¬ïãñ87n```QÙ¸r%º®³ÿ~dY^u[ÎÕQx DQ$“ÉpëwÌK/¿IRøÚw~Äÿ{ûˆG£öš9¹u]çî{ ’H¦Ñƽu³r @i~ö›{816Í9[×!˪ê¾÷Eaï³øñ/ïÆ0á†?9õy÷‘S&£åRd…ûz”Ûï}˜šh„µkV#KM¶vïä®”ås»÷÷`Û™[èéj'œ–+þι٦¸ëÞßÓÓÕÉ™[7•TBME‘Û~s7?±•Ýí¬^ÕÃ3{Ÿåì3·:ÞGE2™,ßû¿Û8Ü?ÄyçœÁàÐ &§¦sV¢¢°fÕʙȚ¦ÑÛ7@(DŽ'›Q‘e‰£} ŒÒÔÜäèáð jPø^Éd’D*ËEœOgG+’$Ìg®º¹—³Ù,®µ»…¥QÖ-SsÙ“º®ÓÜÜÌðÓO“H$ˆ¶´mɹ]S©©T‚5kV9Zƒ¹ý,ÐÛŒ¶¦ŽŽ"ç3O+¡qÍÏ™€i˜䔎æÆnZ[šÈäÄr€ kVöJ¥˜œšÉ%=¸Ý„§—PˆS,t±ñ¤-ÂBf%Ë2½½½Ž×E£QÇ—•$‰îîd²:†®ÑÝÝECC²¬,8ö&¢á ­5ôööå…Òü‚«ªÎºmÅqŒ<µ6ÕJ¥9|øyûœ¤šâàÁidA§»½±˜\Evž³£GòûßÿÞñ0ì<ç,:»:míÖz¯L&Ãþýûm÷šu}&“áàÁƒÔ××{Öl :066ÆÈÈÈ«AQ+27Á;99i[›â y„›‘‘Ç2]×í¬Ðl6Ëèè(¢(FÑ4‘‘ݳѲ¶Îßµƒ‰©9ÚZÙuîvBEínGÓ4ꙚIÐÙÞF$Bײ10QH&SÂ5œ³}5g¬mGÓôòˆ'Àäô,í]+Y·ªƒÖæ…n*'DÝЙI¤Y»v=[ÖuF*B€Y??üøSL'U¨¯«[ 8ºód‰‡r¸oˆÛÏ& ¢iº'åÄR^“Y-gœÉ¹[WT¶ÀÑå,æ<'È!vìØÁÎmëQ3iEA”Äœuè @~yûÝÜyïx÷›_Ëž§÷qëwÂk¯»’¡#|á¿¿Ë9goaç¹Û 7W÷”¸÷¼í4Må¾û$å{Ibç¹ÛвC-ÅG×u&&&ï[SSc׆¼†B Ï©iš„Ãaº»»yì±Çèìê²½XG¥§§Ç>kN¡‘lVåÒ ÏcbjŠ‘‰9·7=ÔaÎgJ„PÞ*-L`tʸ¶Æ ª9wq0  *H¢`ãZ{Åu-‡FUMƒW#ïcŸúœYØ‘^Ó54UEÓr(%ÙL†L&ÍçþñïŠ4ÿ§Ÿ~š––:::Š&ßÚ”Nî)§Ôyëž’$¡ëZ^ a³ Ã@×44 HQÇú"Ã0Ð4µ¸4ïnµÜ–…fég4åÂÝRüJ§ì°B+'8ºå ?300ÀÜÜguV•A°ÜIºcÁ¯…ðâx/|§ýû÷‰DX½zµÝƒrvvÖv;;ùäeY&‹'!e2EJ ±­Ï…B!»Pßi@®îrïÞ½ìØ±ÃqÝeYfn.iÄc1ô2Þ†ÂÏ¥óµ£uµµèšžÝ-¨W¶3ûìõ²ª–³Zd¹H¨Y…×õõõvq÷|2A–H8X^_¡—aÞQ¤ª*á`°è*ec&SidI"”/SòÒ3R„\\Ç0 ‡CŽ!ë>ûöícÆ ]rHN†]ª!I’í&ssÃg²*R¾,§4s¹t ¢(2p|Ý0YÑÕÎèØS3s¬^ÑI2•¦ÿø0mMÔ×Ö,pÕWœœäÈ‘#ìÚµËæWE9ŒŽsðHŠ$±qÃZbѨc D)òO¹øs5n¼ýû÷‡Y½zuQv§,ËLOOsâÄp¾~Y¢¹¹™ÚÚÚŠ N‚xA/´JM“¢¸p¹8§ÓZhºžãO.E€^ö½×2˜D2ÉÍûÁPˆ` „(èK(ÉvOÂ…ý=ZVb„“·ây^3µ¬k4;hk:Z+¥GE¤`¥Š}éØ †*-Faúr5Ÿ‘eÙvíziVê¦e³Ù.2;~âb5–Ã@,¼®p-†Vh¥VBu±> í:Ér‡¢Äš¥<¸½—¦i„ÃA@pU‚œ> ‰„By-˜@–¢SèÚ3˜?ô…c²ÆYªY߇ƒWÄ7‹E‚ÅQ°—suÆ¢G<àr.qÈ%Ÿ‚›»1šx<îx¾rõ¶’½/Ëuz°Ö=Pò¥%FÙÏX {Ew9đ֖F:ښɪñX”³·®GÓôã/²Pèru+eÉ­›IKsím®5k¥Šp¥g{Mø°Þ=›ÍÚJri試¦Æ|Ö~-ån–¥—0„µæN¼ÓËY+7ÿŠ,{rwzm<ìež—Ô5Z¨1ÌÎÎ277gCf•ÃÑ+çÏ­”⦠”ö*+}®ÓA¬½Ü-#ÖK Ùí¾NsR©7¡åÖ¡««Ë¤\ ¹R¬(N355µàÞå´¼rõÒùwê“V9C’$†††ƒE±”…ë°0Øîe  `‹ñƒA’ÉdY!\ú³V^h 6¯ÝA ÇaeTVÊ€-O¥¾‘ne*¥1øÂd,AX¹rå«©pïò/]î­ò"7K°¨{€ªX#† ±˜+dÏ–ôåâ›CCC6¨»Í=/[Ñ[ãEøz@Nç²³³ÓñÙ… X9lW'žæ…çõôô8ZÙåø©¯ôÊîí°_©eÅ=¸1BË—þ’—¼5ñãEÈUrTjSÉúªÆQßÐKŒ¤ÒxÙN‡ÄŠïΩ$I\|ñÅEng7-Ú‹à/Ü@áp˜¾ð…60vÎ=­{š‹Jsä–¡êÖ”Õú›6m²!¤¼´ýñZ_nì†aØiçÕ*M3·’¡¼ærMg«iqTmï¾B!çu>E¡6ì´­$¦éééªc¿¡Phvo¥óUn]½ô­3 ƒmÛ¶Ù5Š…ŠD©PvdðÚbÈ«5âd †Ãa.»ì²¢Ö`Õîi¯NеÛpêŠá%•¹\‡i/h1NÂP×uúúúèìì,´Îg H¢€aÌ[6•Ü,²,´Òr>À–ÐÍf³ÌÎÎÒÜÜ\sRÅ|•ˆP”`QnîÉ»-¤d/Ýöx+$>'{ίa¢;Ä@ÊÏÀ ³³sA‡Jn$kçææìø§×°Àèè(µµµE= K=¥ã×4ÉÉIšššÎ‡9_´m–`Ë–òd2ɉ'Xµj•§º¾rBÚk{)7Æ=ŸÜ’­XâT­àõâjt²´*)n9NgÅ‹ûÔ««µ"àÃrX„¥G–eû`¹ ²ršˆuX¬…¾h·z-ÈeLZÛf¾°rµ(¥±LÍ0Ð3âñÙ¬êÙEkc>."ù㽺J+ik…ó244DKK‹Ðuþ#¤²ÑH˜¦º(€lwÓÈ1 ]/žÓt:MoÿH2ñH˜–Æ|F±(Ʀi´¶¶Ú¡,Kù¢xÓÆ^œaf.¡eik®' /p±ˆb.ÕÚÌ ÀLFåÄØ ‰dŠ€ í-Å]/€ÙÙ9NŒM¡BÔÆÃ4ÕÇ1Œ\#MQAÀvÙógšŒŒŽ35—& ÑP% cèFŽ¡æ‚Ê%þX4<¶x}#™T‚îæÎ:c=’(‘Îd1 ºšXÑž“e‰‘ÑI~æ(õõ dS3œµq%=]m†I:“E–DjâQ×6-NmÅ,6º{Ï>z:ÛÐ ƒP @8DÓufçÔÄ¢(Š^ÔŠJ×uæææX±b¡Pa6æ¼U’Éd8qâDQK²t:M8B „9Ð{<ÏìsûZU5V÷´" &³ssE D*•¢µµµHxkšVÔÍäĉE‚Ùêi”Î…%Hgggæ¤rv²išDÂ!xè1v?sA”1t37®â…ŸG2•^ Œ¤Ri¦æÒLLN‹F †‚ÌÌLS[[G*9 „ƒ õ56?‘e‰ñÉiŽ˜X€Tc™‘†aÐX§§£ÅnÒíÖzi¾öY¨ ̹’ª6Öë5IÍK˜¢\ÌÍË»Uëöôê²®ÆeêÕ²;Yîª!Ö*¡U QWWËääm 8A@ ÐаÐr”e‰cƒ<øÐ#Üøú¿`ff–ûø>ù4ï|Ó_ÚXq™…È÷=ÌÈäÁ`À¶)‰$Vµ³vÍJÒi£èLH¢D¸¦‘;ÿ${沋vÑÝ݉ªjŽ µ9Æ(ó¿?û5M \~é´µµpÇ]¿£¾®ŽówSÎmO¦$ÑÛ×O{[+©TÈÕï„B!b±h™¢j÷äõkºOõ¡ë&ÉdŠéÙ=q£GzyÁyg±sÛf²†Zÿ ±am7G†fѵ,<¾—Ã}ƒtv÷059ÅÄØ(~Í‹hki\})I³sI~ø³;iljâÌÍkI§ÔÆÃ$²&ëWwErH=–¥®(ì8Êoîy„ή.ºÚ˜cEW+‡O„Y¿¦Iížc¹::ƒ†ºÖ¬ìàÄdš†Ú\iÆ{C 2plAÏòÚk_l— ä6¬ènãèð ÉŒFw{3CÃc Ê$ÓYî¹ÿQ¶¬ïáe/:·’B¢i:mÍtvvÉdQd‰ÉéÉ õÈ’„®© H$IBQLÏÌ‹†sʉۃÁP`0ÈÐÐPCÑux,N axìtÓ˜%6 ¶l\M$ 25=]$ à®®Î.ÚÎd³ì=ÆÖ¼R 066æ˜2_Ø]UU;aȺïìì¬ç„¢º`Q¤oà8iU§såzê똞šD5TŽí£­ w^¡K ™LÒX"Í ©3SS466å±;"á†O68¶‰`iç–"R(j/WÎ-éÅíèæö¬$À¼XB•²ä½dœ{ˆÕ„l*¹ËÅ·ËY¤å°i½â‰–³¨—­ ¾R ð¼õ2€~¤'ž~–¯¿ŽïþïϹ檗М/..ž,e…Úºz8Ìí¿{Ù”ACsG^Ót˜`䣫›–ž0A%`׃%S)êB8º-MLêêèèYÅðÐßýñ휵y5ì:‡P(ä e˜46·Ó{|„oüàç¼ðÂs‰F£„ÂáœÛÏÁÂìÞ³—ÀÞ¬[·ŠßÝÿ0«Wt±qýjJÀª6¶Óâé†NC] ÑP€h$Ä9›Ï¦&# rÇý#+2í­ y7’PÔ„¸½¹Ñº¬ +2YM'£êd²* õqêëâ¶õZZÿXÐÔXÇÌÜ­qd±Y‘¹÷$M§£¥!:PœüÑÖÜ@8 ‘ʹú®~é %™}G惡6FsCm‘Å\XšÒÑÒÀ‰©!…«®¸˜‡ŽpßcȪ*=­ D¡"¡m˜±h˜–†Æèho¦. ‰²÷`š¦ÑÕÞRu˺kl¨' Ú­ÄDY¢­UannYIiê‚3¡È2Ïìå™ý‡¹òEJgY–ˆè»x¼”±dU•¦æ(vÅÜqÿãÌÎ¥ˆE‚¼øâs‡ÃŒŽŽºŽ³P›™Mq°÷ëVu•ÕŒÕ<ªeMZ®ßl6ëØË /À4$‘ñ‰)B¡ º’k¹‰Dbbj†ö¶¶…q#ffféÞ¸†¡£$SiLɘ¹ÚµT @µí6ο¿šÍäPŸ¤|ý°)äÁû {ø¸{¹Ê*£.aj±s½@×y˜.—DVN@8e‹VJÔ*W~å&Ø*è»e¤{=Ÿ•‘pXAX)9Crq¡p$Æïþ°‡æ–~{ß#èR$©é„i èãð±1⵬ín"57i»ù_,ŸPa2ß@7÷³ûÊÅz$:»»ihlâɃGØwð(¯½îe466.È~µ²ÚV¯^G*äÎ÷€¡sÅ%»ŠUáû†Nkk;÷?²1F—"ì朳ϰ?S}V"CAÚâìÞ{˜{Ÿæe/¾˜ÿ»ínbµMtw¶ÑÒÔ`» ‰Úš(±°BVÓÁÄ\]£$ˬ]ÙA(@UuçŠÌ†5+ØýÌ!n»ã~²é$ss³¬X·…x$B}m¼ÈkæcY õ5ôt¶1‘P™M$ùÜ¿Æ[7©…‡CŽÏ† uq"ÁQÒ™,_þŸo’ʨ4¶¯" ²nuwΦ—@¡I2Mõ1ŽÍñðc{è륥µ )¦­­™ž®Ö\}™ZN§ƒ¸óÞ‡XÙÓI&“%R[[ÃÜ\‚d*E}]-µ5qGë ”oJlÅÀ Sÿ[™&'F'Ÿ"Thoª#TƒeëMí¶™ót·Õ15›bv.A<-»Ï¦¦¦¨««+3°@¼ÆZJ{) y ï¹dM“0CyàÁ@.B´B†i05=Ç¡C‡˜™K£ A&ÆÇHdt6®êÀ4Mõgëú•ÅV»®35“@D"a™µ+:ebjÃÐtƒšHÐîãxÛ é¡vÙk&³[CµnÏJ bå¬ÒÅ&2zy/É8•yʶ…*ó¼eI–)gÂ[ÿ¦Pèìì@QÚkÎØ]Áµ$hnj$^Û@2kô7+tu>Ë,Ž0ßÖE Lö¦`¡Ã亀oZ¿Ž•íµ j!‹Æf˜˜D¢1Ö®YK:9ƒ æ3Ù»˜çšõ¶··ÓP_ÏLâ<Œ‘—ÒçÍ­1^tþY Œðð#O°zõ²šÀêÎzŠ’·” 7[.Þ¸º½–µ+ZiŒ MÐÕ+»Û1tÓÕÕ ƒžÎŽ%3>z‚Õ-ÍlÝЃ„n#Š”|Y’X»ª‹}½9¤–H¼Mר±e I@D C_pðsiãA¶¬j&“Õxddˆ@(J@–hnª§£­i%iýÛPcû†¦fâdÒâuõ‚BK}„x425[†a,V¹ä‚s™šMÑPWC(˜cîªn°zõJtM'‘˜s<š¡“U5²ªÊ\"‰ ˆ(²„$Kˆù$”…LÊààá£z'P5ÍãdPÔdÕt±º„üºn`è*]-5lÍc:ªªKmžšaVS¬h¯gûæÕ<µw?™tÆNï.ð\v¥É…Û7 ‡DPD“t&ƒ Ô"¦'ŽRFo!ˆ¤R)vœ½…É•]ÄbQ&g„ƒÄ©d$ Yyѹ¤ó™‰Ó êbŽ‚eÞ‚6©‰G9ûFêëâHâ’ÉSSÓvÍai_7 º;š©«ÓXG¶ >1Œ\Xâ´¾Š¢TDºÚÛÙ¸n%jV%“ïL ‡Ûq†A$"JpÎ8sS®ÀL" Ú¸”=,ù>͵À±cÇIgUšêÙûì!šê‡œ‘?Úš1óY§ëY×;0ÈÆµ+‘¥…u|äáÇÎܸŠÍk»˜šIð“;´›"ˆt7G ) 19UU%“Í’Jg8xtˆºh€¦†Z;sتuJRË•FÔp´¯Ÿúúz"‘ˆ$ãŽQiÞDQ$™J3<:‰ªÍetŠãS3`ª¬ºK–ÅÊ~†ú†F$%ˆ¡i´·µ *<úøSè†FW÷ŠyÝ·äýM@׌ŒN°ïð#ãy€{lX'+¬’kÒ‹…äµÞ®\XÄ©„Ë)Ùd±L¿Ú&Å•²I›_»<¯\¼ÔÕ€ñàÞ] Zt?BG!¨j¬YÙC8¢³-›¹x×Ùvß@7k*™"Tؾe5-µì~êYÇn–©˜sÃiÒ|í¡k`Ê6jEᄦA:¦®ÎäŒM+èlk´3òܬ2Ó„p@bãšÖ¯ê" æ@˜Šc`×zÿ³¶¬# ¢ª*-M $“)dY*›†î$Ä ‚a„B!&'§Ð ƒºÚ Ó¤¹¡ÆŽï¸m°H$ÌÌì,ÑX<Ÿå'ÒÖ\·À­é6¦¶æ:Û¢7 ƒééY»Ë†“Æh l¬M€lV%™JÓV€‡èTp/Á`é™Yˆ’HX  m×¢Ó8s¥&s‰¡P®&¯¾&’¡e‘ñÝ’¢(<ðð45ÖÑÚÔÀ¾Ã}Äc14M'‹`”à¼Î BÎöVVöt’Ng8t¤ŸÝí\¸s¦i’Éd¼·(ÌÎ%Éš ¢(0;—!“NÉÄÂ9רTìë ûçðÀ(/:o#¡P®ŒÃ*ÿqjÒl555†ÉØØM(Šb7{MQ/=Óªª²vÕ ÚZZؽÿ†a¢kÖ¬ §³9_SÂ01tÓÈ7Ré xøQ"­A×ô ¸O1 Q™žMqïÃ{ȪzNÙ°¹WK§šBõrYN••Ü«ÕZ£^„Ÿ›Ð¨T.æõ~^ÍÜ`*)$n©‹iß¶l‚ÐËDåW¼¨À^E»‰jé½ #—pÉ…;ÉfsB©³­‘æ† Ú¹Æ¡.9ï,;šך,Íg#–Nê–µœ±i_é½ Ãà’ó· ä,®T*Ãö³· ‰RQ¯ÒE ƒùôîÜÔÆò®¹rÏm³–n>UU9qb˜ŽŽöoB<µÑ&lI>¦X˜™Y¸¼sÛÖ|w ½bà¸Ð*°Š™ L¢ù”s¯`âVi@U.9—û[c™tMÓýº°\ D"‘°‹ß«õ©&SH¢D&“u¬»rÒž5M#•J塸²vmš›Ö—ͪù^€IÏÍ|5MÃ4ònÂLfAGrÚ§)Šbw˜0MP$Y”Á4˜œœB{|Ö½,ô¢§žzÊÆÞ¬(:xpu_n$Zâż©Ä ‡çÊ$I²[kYï Š"ÇŽ³¿˜š_pïÂR KBÂ9¹èÝš<{Í|Ä]Ë2;3G4kùk ùù²iu™LÖî ŠÝ60‚aÔÖÔØùf¾h0 P ØHGE¼À- É»¯½¼{IŠ)—ØR)ñ£’)ÎïÖÍ+u9ïˆÒ—ä¡ÅTå ñSR ÁfÉ,ÂÂŽÚÕ,²óÂR¼ëA¾i½°\ 0Y¤t"4½|Y¹^`BYÅûUr½9ùέ C'(I+Vô)^’?B¡›6­·ûï9mË2(Þ.½¶¾¾ž¦¦F»/_%h9ëçžžî(%n  ¦&N}}Ý‚k š ãRmí­´w¶å\le/œæ¨°0¼P4559x1 ×÷E‘úúúÈ2¥I"…jˆB[[›ãº¾¯¢(EMb£Ñh‘báxÀóP …ga±¹Žò•¦Âkœ09;Z‰DbȈ’dn—ž—p8Ì%žÏ|ËVa’+ R¨ªFWG׿òeKEYtó×–xpJ÷Pi‹¸Â÷)ç-—ÍXŽÇTŠÏU*W('P¼<³Ì[µîÚržšJ™©•¼c^“¶* Õ%·A ‘H088hk¨^zQUb€å€´«Í*ò’‚\)ƒ³\a©×ZÀj|é¢(266ÆØØ˜+/Eü÷ê//¯9¡U:::(%¥ÏqJX©¾ëÔ¡¤œÛGw±Ú+ÁO™ºéé—þnjjŠÑÑQ6nÜèi¿8ý.›Í’L&==;NÛ§©TÊ1~ìd¥Y ÷º®/x–Û¹°®·>›L&˺ƭw·Ús•ôûcöÉ´DQ<¦¶&—…šÉdŠÆªiZ±WÁ…–óÉp¦‹€EÉ––B¡ä¶o¬^”³³³ ºÇ;%®¹elVkÉx±l¼taðó^¬@©¦»M¹qW2pÜ2X«1Zªñø,ZJ~QY»v- ®‡ØmѼtŽð¢±”óe»™õ^6„[PÛé¹^›—ÎÊV\qóæÍ6DV5¾n/n˜rß[X‘NÉ,^âÄ•ÜIå~.e$^t9ÔJsâÔ4zÓ¦MEÐd^â/…VWKK‹g0k‹ ]«Õ|®¡¡¡ê}m5R®ô~¥g¡ÐEZ:ŸõõõÄã¹$¬æææ²c)èÇ\’äd8*Å^ùÅüϦ£‚ç¥2³yóf×ýçE(TŠVãŽô_sëz_ÎUèÕZªæî5ƒ¶œ:™Xk¹½[ véI¹F-WÆêÕ«‹ÚÖT2³½úĽÆÍœ²‘¼d‚¹AyÅüó"ÊìrÖf]]«ráU›órÝ•Ðn¥VV^à“Ê1O=ì b[NIT^ÝÝN÷·:2455µå)çfqRºâñ¸'…Äëz”K®ðÒ~1.¦j²øA`ÕªUhšf·f«osÚ“n^=ßÉÜk’…×y/‹a´··Û±f§R¯mɼÄßËÅØ¼â…znVø¬ÎÎΊÈíü{©Ot^„üÉX²^yÈ’ºF­ÍóÔSOÑÚÚJ[[›c·rí8¼hûÕ‚»z¦^z zxÕÕfк K+1cttÔV2*Y ^\&¥¿+¬ÿóêÒ¨æðxqMxI9/½aôõõ±fÍšŠs^î@:Í› _MBCéïÝ´r'áT“-Œ1hjjr¼ÆíÞ†Kû)/˜nºRŒÛ0 Ž=JKK‹Ý‚j1½èœžÓ××À† l¥«Ñ­¶ÍéY…Ð jL¥ýZ ÁÈ­TÊk©„išEÀ^”€\Ò—·±yÅYõê…«&ù§Ï^ ÷Jbµa¡0,ÍÐ,¸R+£Rœ¨p"­ ±J–™—^/Ÿñr}N`å ó|G š·$ŠÌÍ%˜K$lFè4gN)ù^ƒÒ•z¨LLLzNk„\¥J®ˆj©\wìÒw)ü»•(Rz°œ°1+Yý¥c—€"¼f͹í7¥Èjæ´ Û•sÁ—s»Wò–¸G{‰o9!Û”ƒär¬­àZ³îWXÏXz^JÇìȾZ³r–wiéE%¯’—LÓ ºL#e§5ž_gªêla%ê‰.e%¥Š…e­[ã“ Æé¦è–S\½x]s”¢jù’È"©\†,Ë6E‘@@YÀüK+Š"s‰‰D2‡!˜G/)Çd ŸçÅ,všðR[ÊHæÛKI âàá>FFFyfß~N °wÿÁEC] µ51æIFÇ'i¬¯#¸úrUUå¾c×9g ¸ÿsÑyÛ©«‰¥M—vÀžK°ÿP/goÝH0(* ­KÒ ƒ¡#´·µTÔŒMjkâ<öäÓ¬[Õƒ,ËŒŽŽ“JgPdÅFQqÈy ƾãÃÔÖõ’ÍdX½²›€𬠕S *iô‚Oî;LÊPس÷/¼`»«óÖë“O?K{[ «Wö8ºj Ÿ“cÊFéC]ã¥tààzº:864„¡›fÓ†µ´·5/lÄë°ñuÃà‡Ÿä‚gS[ËõŸTU4]'˜oë¦\(ŠL2•æÁÇž&›Nsù%ç¹0 5«ñÄÓ{Í×34<ŒnÀ–kyzß‚ŠÂª‚yrØ=×+Ô¥ÙÏ÷ö“N¥ÐEMÕX±¢›šx̵ÔļSœËá·µÚíËܼÖúOLMcèñX”¦¦zWt×¹vfGúŽ333Ë™[7Øçs1±!«l¢ÿØ 5ñ¢ 253Cks£ãDÂ!š›Û¼bvŽñ‰)ÚZ›Ÿ˜D–%Zš›@0àñ§öq´Ðnâ\Ézµ²M ÓäGöðÀ£OF€êK£Šï)1:6Îà‰zpèÈQ&&¦ØóÌ>N r´o çVvú¬$q¨·±ñ ö8ÈàðýÇŽ“L¥­[{>€t:Ñ£ý 333[ÔØ­ÑïÁ#G96x‚þãôàhßã㠎ڀ!¥ühàø LJ8Ú7@ßÀ1žyö0+WtÓÞÚ‚á K``pI°fUÏ‚¸q)ŸE‘ãCä2*MMLÏ&8sˆ¢÷+µþgfçgõŠn†FÆY³rƒ#ãlÞ¸Žp8´ sÚ Xep±}—%FX®CrNPè46ÔqÙùg211É3Ïfbb‚Kvm¥³½Å†?[8I&ÇOŒÑÙÞŠay¼Æ&¦fm†í¬—%‰_²‹Û6óûÇörÿÃObšÞcÿá~²8Ò7˜Ãr,‰}9Y­m-tu´115C]MœæÆúF¢‹©.Š97ÇѾ~lµñ8石…†úZA¬˜öoÅ”žxêY2™,ƒ'Fسïí:)u3¸¹­DQ$‹"‹°¢«ÝÕåðÄS{™™evv–s·m%“É0—Lòø“O»jð’$"ÉYUEö>{šš8¡`ˆÉÉiÛ…W*¤snP‘æ¦FdYF×uFÆÆ‘%Ù5Tº.±h„æú/zÁ.$If6‘æçmgýÚUhšî—„C½ýÄ¢a4ÝÀ0+ôÙEDI"™N£È2áPIè;6H(È w«Ýú^Ê»€óC(›é\ø¾[6­§#D„Ù¼iÍMõ=>‹½'€BCcûP_WKwgû‚ZP'ïN$&åJ0]Áܬ†‘Ñ1~~Ǥ3Y®{Ù%¬YÕSOt A”·rŒX–$dY"U d‚/!ŠÅ…÷Ö³TM#™J QU=×2.Ρ•‹¯ç]šn òýK÷²õÌt&C( µ¹ö¶–ÖqV% ÈÄ¢QǬpÃ4ɪ*í­´µ4£(æ’ijb‘Ü8¸¯öÊèø‘pÐnßU6> N‡˜œš! DÑ9?B86”3Ré,† sÉ$ºaE$Ù4ÜIAw‹•º%BU:W‹ÍW8)ר›[N× jãq.8·•ÃGøåoàüsÏàܳ·0—L‘ÍjEÚF±Å´µÌ뎸½›}ˆòEÓṳS¶“$IFD§³¥–C#¬[ÝI(r ¼êºNG{Éd’ý}ÃLÏ¥éêRY·v5Ù¬º »o| ÉOí%³eãjâ1Ò™,E)J´qõ¯ç-ÑÁŽô ÒX§÷ø(†®sƦuEŠBY†¨(¤®6îÊ€%I¤³½Gvïᜳ¶ÒÚÚÌÔô ¿ÿÃn6¬]ec…:%9Å£Q‚…ýEééêd|bª`-Ý…«WöÐÜÔ@mÞÅwlð›7®]p œ@DI$‘L ‡#ŒO²¢³…šxŒLV­˜ý(LÎ$$’©2I]¹ë3Ù,q%ÊÖÍ뙘˜¤®&Æ‘Þ~¢á£Â¶4A`zf–D2C³Ç‚}뚦#È9½ hªVkÖBUÙ²~%‚ qÿÃO’Lg9÷ÌMdó}ŽÏ´öi261É™›ÖÑÖÚb»5+%$äŠßsñTÃ0 æf¾­šS¥–:¦iÉdij¬§&ãpo?]  ééêÀ4œëDçææ(2í­LMÏH$Y³z<¶ª›ëMÌg\ÖÄ"¬ZÙ“kÒ\©«zºAÀÚ'NŒ²¢§+˜ïÒ »§³1o®K¦›˜¢«³ µ ®´Î·ð¹¹²Dw{s®9 O²c­Š ¬_ÓÃl"IW{3Á`€LVuÜ›¢$¢( mMÔÖÆélk¢©¡ž¦ºqšH •Ëú,WÞãÅmZ©F{1 32K@Ö dIbt|’{~ÁÔ¹òò Ù{ —ŸÝñëWuÐÙÞæˆb­Í ²yý*D†GÇ©Gm m'A!Š"š¦q÷ý23—ä¢gÐÑÞbC€¹i¦ar¨·36o`z6Á]ØËá£Cœ¹i# ·ÍŒT•ß=ô3ªL$^Ïýì% ÒØP‡éÖmu_»z¡Pˆ#}Çe™h$œÓ,+¤ûš¦‰ž¯Û¼â…çs|h˜ŽÖf¶lL2;—°ŒSz²e‰"€(ˆ8Noÿ W\z¾m)•~N×MÚZ› ( »÷ìeÝšé`Óú5tu¶‘ͪ®=%Ç'§˜œž¶µ•©éi»ï “–D‘`0ÄO`j6™ë-X'‘LD0ó`íåJ\TU'‘Ì05=“5.Оݘu@ÉYéL†goB¥Ÿ-*.EÖ®YA*•"ÉÒP_K*Á4ÌZ~)“’$‘}òø¾Ñdíªžª\>‚ 037K*bjz³«½lœÏö&d²<øÈ“¬YÙE, 6µ-&·x‹/åI¥R´µ4ÒØP¿ SK¹ù5 ƒæ¦z®zÑ<þÔ³üô×÷²sÛÖ­î^ÏW»Ë0 ֬&N:嬭‰F"H’ûw¶šr`â¶nZO<'  $Ù±ƒHœ£aÐÐPOG{+²¬8Æ¿JÇ/ËŠµ•¨æ¦FZšmh;7¥'‹Ú ˇ†ÇUõ–,399Ã\2IMM̆±P ÎÌÌ195͊9só4ÝBS5†NŒÒÕÑJÿ±!êkã<‘îT®+®WW© †“Åè¶ï— YÆí%‹6„(0—H°÷@íØÊª]¤2*¿¼ûšëãtw¶£i -]×Ù°f¿¾ë†GÇ©‰Ç8ÔÛÏ…;Ï.bLNcH§3ÔÖD¸ä‚íÅ›Æ ¹$ç瞥&¥¡¾Žh$DwK-ãcd×öe‘:ùÔ·¬_Å#O÷2;=ÅúUÔÖÆXevo>]§©±žá‘q~~×#9—o[ 5ñ8šCí¥Ûâ犋Vtçæ õµ4Ö×-ÀO-üÜìÜ£c“¤ÒYÆ&&sŠÂγ‰Fö tÒ´TU¥¾¾–ÛÎà»÷°eÃZ:;ZÉ–h‰ÅžŽ¶–\k¨|²‚@My¥œ°(œ“H8l[m^! -«Ï0L; ´^ÑIÐç¬×$GzrÖÖMvâOÙ½¼Ä=ÔÛOks¡` ,¢#ßè õµLNM hl¬+z^ágdYæhß±\M§i0;7KGk‡{û¹ø‚sÔ’{iÔ[Î5_i¯”Ë_ ºŒð±O}Î4M3_T¬éšª¢i*Ùl–l&C&“æsÿøw¶00 ƒ§Ÿ~š––Ÿrž9iÌ%’DÂ!»/_"‘$œ7¸‚üŠ"S3¹´~% 07— ±¡~À¶Ó–e9× ŒõPޕͼ+õÁR™cÇO0<6Á¶­­ÒÔñÉ©iß{ˆî¶fÖ®ìrïE‘™™FFFX¿~}QÊt¥bùR¦/Š"LJ8Ü{Œx,J}]-]-J‘,çr°•ÝŠÍKçÔŠ‘Y²vZAÈd³  ÓÕÑF8ÂÆ‹ ›Õ8ÚŒÖÖ&"á°=†C‡±qãÆ’ºÎœå«ë:8–—Ó>gfg©¯«s_,,} Û䘗h[#ns+‰"3ss>’óDˆÍreY¦¯¯`0Hkkk‘ÀrsÛºís·º»rØ¡Eç1_òPºþ…ó§(  ­­h4êˆ)kí ;|ᇳ··UUÙ²e Ùl¶b7v/P{•ÜrÕ\ïd»’µSJ2ç^Î…"Š?388H$qga<¾ðÞÉd’ööv‡æÝ‚îpú\ñx ,W×uº:ÚXÙÓeß[×B°Üz:Õå¹Ï²ÎJ‘NÜŒa…µ«W¢kÚÂx•kW¯@+h~ë–Ñkš&ª¥4FÙ½YzŸúºÚ²©Þ¥ïk][*LJcuNÏ4òqÚúúZtÃD”¼ÅãÝÒʽövsKT¨ƒ¨ëº£ä‰©pî K&ÊãJ¨6•jÌÊy®Üžá4žJ‚¶\w¯ßå,˜ùñž¬ÝöE%kï–›óùq‰EÉw–Âì“çÆÓ*­{¹q{ËjãƒU'Ë”ƒç)r –tuݽ‡a‘¶ZðûRÜ¿rQ¯Í^ Êõ×+Lœ13ÜÒ}MÓ$“¯9¹9J[òxé‚]i± Ã,B0qsxЭ¦£†°c;“¯@–ÎE©ëX»Ï`¥C^n~J›WÚGnˆ-•=œ< Á`U+z\±d-KÌ UÉm¾+uNwd^;§”ë²bY”S&œöm%@j+þïŲ÷g*×ÈÕ £µÜy)ÔP©w«WÆ-K²®f9,e¯¼Rû¼Â¿•zÊÕXºÝ³’Yâ·˜úÔEÅ%IbjjŠãÇÓÙÙéÊË ÌëË{Ñܲ“ÊaMVÚlån9íª’-·˜˜yWWWðÂ\Ê­A9œ×rÐw^æª\×·9+·7Ê¥W‹¢ÈªU«Š2îªÝ.×<¸RW†j\j•îåÖbʲ8[[[m«ÓyWRL¼âÎzQpË=OÓ4zzzXn ^ÖØ1Á,›¥··—U«V¹®£…Õ t\¹{TR *) •·Aé4§ò“W㥒ä¶f•,ñr¼Ùí|—ëµè›¶ZïÉ’ ÂB—I,ãòË/·c@Õd¿yq«xÑV•íöœjzV Ø– n{‰9”{fõíi*ã§Vj{R”¹’õäEó.§M;µ‘ñÒ±ºšØª›°öæQßk_97«²\üÒ ‚köô"úÍy±˜«å)¥ #Š¢pñÅ#ËrQ|°š1zFÕXeÕzKª™G7åÚi>;;;ÂJ–n^ƒra7,i/<­’Âí….fîCbµBËr[v¨¯¦_žÛàÝ´¢jZ •o.w*ýÝ,SÌZi¼â1–Ó†ªYðÊoÓ3Ðp¹¸Üb7žWÍ®Z…ÆÍáöw7·S9« ’æ^iî½x<Ü ÌÝÜé‹iƒU­Å[Nðò|/qŸÒµ*Äõt;ë•ÜgåpG½–‚¸¹D«Š^ >p%w!FoaV{)T¢õåå¬Vãí:KÍMÉtÃ6-·½bõ.©ktþ{òÅ秊ì—©uAÁÆÏåÍTUÏ£u ÅŸ0…ùËJÿfýÁú¬}QÁµEŸ>_ò{ëû¢g•tɦøo¦™ÿQt¸®ô÷ù{ ¢hC± ùù°²ÃŠÆžÿw¾k7Ì™Zÿäo>ã)·9X,+¨]ðp“‚kó÷+Á¿´Ç‚0ÿ>h;Åë<Ãeߎ’y´ŸYªwl’¢ý"”Ì·Pü7û‡RÜÎ’1àpQX¸–…û0Í‚O/wÁ^+Ü/°pŒfáû¯›#›P²æfñ«å',œSsáÙ©ô¢àa—ž…áÄ‚=Xü^&Ö¾Šçºèlâò`ÁýÌ:~Î\¸W(ýלßC…k*”ðüórã/‹Yp6òûÛ‰/8½“Y²ç ÷ 8.þü1,<ßC¡ô܈ÎûJ(á›bÉØŠ~_°W„’ýíp.‹æÂaiŠyWé¾SŠÙÓ¾s`úbP¡È°åIþ6ÊÏ™¿nY;Ô[)£A2k …‡˜Ê–‰YþrÁù–VýŒëK e_Íßœ®Š7™}‰Yé~¦ûüe˜§ÛŲ2÷KcµS˜WìG¸¼áßç×Ôô06ž0/À+já…J ¥J „E¥1,ã&ÎÊ–YÆB–±Ü>qùÛüÁ­êàoR-»h¯˜ Þ»X¸9ÏÚæç³DÉräß…ú#8`ì–›ƒ¢½ç´\‹Åcö`µ %ë'xÙ–®°Uóï&8¬uÉ{ê ~Ÿ¿×Bý°`œ¶‚\Àü1 q _ð¸Ç\˜Ë¾Êáßš ù˜ãÙ+T,¼‚¯r_G¡ä¸Ï¿K©\1]÷[@ˆ* Š,_²Œõ"iÍäá£)žèŸ±µ ÓὋ˜Žà¼†n²Áý~å~Wª–“]T‡ËßÜxh¹q:î ³€Q¹\#8üëø7“ËÒÅÐ-ü¼Y¨˜Y§ò<,0&+]e©™®Ÿ5ˬC¥¹¬üìâùpz‡ŠÏ÷8@Ót_HÁÃû˜æB¡½Øay½Çbç¼pWsv¿órn+jÞÑ_U:ÇBÏ,ËSæ²Òý½®—û×n!ï¨ü¼ùy³¼»SiþÅPx¡ÄÝ0!V¸xmŒu-ÁåsæŠÞ¦R&O›cçÊíu¡“8†'sT—ê˜?©šw«tíbYB%‘s*Öêt¯q5s{²ëð\ßÏ^T¾å˜çåR‘ûû?ÞÂ2®åòóˆññqÆÇs-ÅtM'  …("ôÏòÔP•ËÓвU=‡¹¸c]+Mµa|òÉ'Ÿ|òéTÐX ¨]5´wt07;›ÂÅ„‚ÌýôM¶{¹š8aUýM; üAŸ|òÉ'Ÿ|ZÒ PuQ jˆ2¹ðNqRN5aUý}òÉ'Ÿ|òét’U2qÇwpûí·ç§Š³ž—bÍNsöÉ'Ÿ|òɧÓ@²,344Äÿþïÿ’L&¹øâ‹m¢2k©¡ ¼ù)>ùä“O>=/È\xó›ßL*•ʃ/X5%ueK- D¢¿>ùä“O>2 ƒ–––|‡"%»ü+D²¼õöÿùâÐ'Ÿ|òɧSJ‚ ‰Ð{ðYöî' K¬_»Šž•«sRÉ4l •e+ŸX;å“O>ùä“O§†Yä¡Ýûù‡Û§è¥Ž•q­ü†·¼ì,D±«¨gâ²X„ “eLU|òÉ'Ÿ|:ed¨YþåöÈ®fçºZV·×aèøÕïCÏÆ b eQ’©Ê‚úyKЃ>ùä“O>J›Q™šøØË;è›2i¨ ÓÕÞÀ\¦›É‰1Bm‹²Óª¬#œ‡ßò£>ùä“O>JÊê°¢!Ìú– ÑŒ¢ÈÔÔ@4šoç´ˆûVéPõí@Ÿ|òÉ'ŸN ‚€ 缓AY ¬D”ˆÀ*¥aUy}1è“O>ùäÓé"S!,EjC2µa‘º„•yé·¬1B«9«ïõÉ'Ÿ|òéôIC0 ƒ¬fÑL2húB+pÙ@·í8¡/ }òÉ'Ÿ|:rP7ÑtÈhY 2*è'i¤U•5z2ÁHŸ|òÉ'Ÿ|:yIh’Õ Rª‰¬š$³ êóriù“eìvß¾8ôÉ'Ÿ|òéÔR®;=ˆù–K Š ˆ£Åd³,ª ßOšñÉ'Ÿ|òéÔƒ&‚( Ë!E$+ ‹ åÒ²ô#,‚~kBŸ|òÉ'ŸN“Yˆ, $‘€A$ñä,´ªÊ' °¤Þ'Ÿ|òÉ'ŸNµ QÈAY@‘A[. ˇ,c›ƒ‹xˆO>ùä“O>-‘Ä0L4ÝDÍgêó9,%ÆÛÒ Â"èKCŸ|òÉ'ŸN-™†‰‘ÏÍèÖ Ë'·«k4/…Å?Љ†‡‡1 Ã_aŸ|òɧe ‘‘t]ÿãxÃ$«™¤²&é¬I: švr&ZÕ®ÑyÿëÒY„ããã¾ ôÉ'Ÿ|Z&¯ÊUøœ¶ɹF ÓD3L´|EŸmš™9cmY²FÍüÍÍe°%IòwªO>šœœüã± |òÎèEñçeE *!E $ƒ,Í›f‚ ä’:—-Fh|ùä“OÏ;úæ7¿Éôô´?>=…z.K4 ‰e’+Ÿ8±TÄB‘ý¹„~ÞºÌf³hšF$all Ó4yê©§¨¯¯ghhˆ3Ï<“®®.7øäÓ"èÅ=æÓÒñXQQUI’xðÁÙ¶mÛs›Ç ’$ØB0(ƒTR×Wí.—«ÃI!º¹ B–í…úÛ¿ý[êêêøð‡?Ìý÷ßÀ~ðš››Ù¿?ï~÷»}Aè“OKÀ}úÓ¡BûñœX,ÆÍ7ßÌý÷ßOSSÇŽ#ó/ÿò/ÜtÓMÏ}kš˜&Faýàâ÷zÕ‚pÇíä5Ë'Nð·û·¨ªÊW¿úU>ö±‡hoogëÖ­ÌÎβsçNzè!^üâû»Ú'Ÿ|òÉ ó·û·d2¾öµ¯ð×ý×EpÛm·ñþ÷¿Ÿ±±1†††¸êª«PUµhåîU86/×:]—H$¸é¦›ìñ¿â¯`óæÍEã(¼§(ŠÜzë­üà? ¡¡OúÓÄãqG†ýOÿôO¶looç/þâ/PU•l6[4Ÿnc´îóóŸÿœµ›·pææ31 ¾Û;)ŠÂ÷¿ÿ}¾÷½ï¡( Ÿýìgijj²…¡õl·ïKÇT:嬮눢ȣ>Êðð0ñx|à/÷ÞåÖÕR ¾ô¥/ñóŸÿœ³Ï>›|ä#(в`ÿºí‹rï#Ï<ó Ï<Èk^÷z²³3Ž×:í3k|º®£ªjÅw®4`×®]|ðƒdóæÍÄãqR©”­¬ ‚€¦ihšfŸi§÷ñ"¨ÜöQé½>úÑràÀ6mÚÄG>ò®¸â ‚Á ©T Ó4=ݧð÷étš¯~õ«¼û¯Þ©ª˜ùsávÎeYæá‡æá‡fpp]»vqùå—W|·½]z½Óµÿó?ÿÛßó^‚hyå¦Ü™­´ÆÕœ§Âýð«_ýŠ­[·ÒÝÝÍOúS^ô¢í±jÇá<&Ðt=—5ª›dTƒ`¾ŽP_P>QÑvå•444ÄÌØ-ÍÍ´··/øûöíÛ©­­¥±±‘Gy„w¾ó´µµ¼ûkzˆ§&¹î»˜«kXô=eYæ·¿ý-¡Pˆë¯¿ž5kÖœrmkjjŠ«¯¾šU«V±k×.^õªW¹º¶ Ãàmo{ßüæ7maö©O}ŠŽŽÇë7lØÀ[Þò¶lÙÂu×]GOOÏ¢ÆØÜÜL{cíõ åè–[n᳟ý¬-ønºé&¾ô¥/ñÉO~²¨Þi9¨±±‘®®.4MãÝï~7Kêf~Ç;ÞÁOúSöìÙÃg>ójkk—ìŒÓZ‡šxÕŸoii¡««ë¤ÇÔÕÕÅg>óÎ:ë,ûw±X¬èšÖÖVÂáð’œéJd¯ý멯¯çÿñ¹á†¸âŠ+¸ù曹ä’KçÖ4ioô¶¯÷íÛÇþýûyÇ;Þ¢(|æ3Ÿá oxòïçî¦Fdù´VÂÑÜÜÌîÝ»I$lß¾½èEËòœÉ„¡¢ê&)ÍDV!¥‚ª/p ._Œ0ç‡õŽ,#ËrÙZµjýýýÜqÇìÛ·oÉ&ïÿ¾û-6]~5í¦ˆ~.™õë×ÓÖÖF(â{ßûO?}êã™L†ë®»Ž]»vñßÿýß¼ä%/ahhÈy“LN²wï^.¾øbÚÛÛY½z5õõõ®÷Þ¼y3¯}íkyòÉ'ù³?û3þïÿþoÑ.šj˜Ë¿ýÛ¿¡ë:±XŒ|à\z饼ÿýï_RQN»L§ÓìܹÓQ[?:tè-›ššø×ý×SòN•èç?ÿ9W_}5Û¶mã7¿ù ÑhtIî»X÷êèè(ýèG9óÌ3¹þúëÉd2K"kjjx÷»ß;}ûøÏÿüOöïßÏ¥—^Êå—_ÎwܱìóüÈ#ÐÜÜL"‘àÛßþ6¯zÕ«øS¡ææf6nÜH8æ™gžá{ßûÞrúÁIÌ%Ɉù/¡èœ/#ÄZ±ÁéÍ•L&âðáà Ü#@€x€_ÿú×¼ð…/$pðàÁ“š AKð|iÅö>¹Ä‰¯óÝK7qÞºv´*âP¦i255EGG—]vwÜq÷Üsápø”õNL&Ã׿þuî¼óNû÷{÷î%‘H,p' b±¿ýíoí¿>|ØvW’¢(ô÷÷i¬÷ß?;wî¬*®!IÇ'FËÎ LNNrÅW°iÓ&ÚÚÚ¸øâ‹"‰päÈ‘e[I’콘Íf‹Ü@‘H„ÙÙY†‡‡imm­ºm$I>|˜«¯¾šM›6qÉ%—°uëÖ“ÛÏçéÈ‘# räÈ‘ŠqUËmý¾÷½¯HY:räÈI!EI’ÄÀÀ™L†††Ç5“$‰¾¾>æææì±Š¢Èøø8oyË[xê©§èëëãÈ‘#H’tRcÊf³ rèÐ!dYæÚk¯å¼óÎãÖ[oåÛßþ6/yÉK¸ì²Ëxë[ßÊÎ;=Ť3™ ###:tÈ“uqÖYgñË_þ’|Õ«WÓÔÔ´¤ëï´FFFxöÙg ƒ§MJ’Äôô4£££\{íµ$“I¾õ­oqÎ9ç,µËЉi$%ˆ, „d‘,V %BÚô.›NÚ5ZMèÙ0 ‚Á Ž.(Y–éëë#Nóå/™ööö“O,04þé‹ß`jj”wÜý3B+·qÉŽ3hŒªÉ+À4MúûûÙ±cwß}7ãããÜxã§~hnnއz€ŽŽn¾ùf.½ôRÇ„–ññqî¾ûnLÓ¤§§‡¿ù›¿a×®]Ž× ‚ÀÞ½{ˆF£\}õÕ|ô£¥¶¶¶*a$´¶¶zr3†Ãa^ò’—000Àg?ûY>ñ‰OpÛm·!Ë2k×®µ“ –K±hhh ½½½TXE~ðƒð¯ÿú¯<ñļéMoâóŸÿ|Õ÷?|ø0ïz×»¸âŠ+0M³HØ.¥ktbb‚ÎÎΊ÷ÞÞ^ WX}à 7ÐÖÖF]]555'5MMM×¼¥¥…P(T4Ö±±1[nÞ¼™Ï~ö³¬[·î¤2™ uuuEëÚØØÈ¿ýÛ¿ññœ[o½•O|âüÝßý»wïö´.étzÁ=+ñ»5kÖÐÖÖF2™äÛßþ6õWµ¬üÁß鄞ññq[Q{衇xÛÛÞFww÷’?k&s Ó˜C–ùbú ’³ÍBùW¥,\\÷ Á»HE‘@ à¸P–¥óþ÷¿ŸU«V-Ùd­Ý¸™ŸÿðkœyéK Ô˜ M&éh¨þà·¶¶b[·nåúë¯?-›ljjŠ›nº‰Ë.»Œ3Î8ƒ––[ sr;~øÃæ²Ë.㬳β³!ÝbŠgœq?úÑØ°a›7o^ô­õõrÛÚÚøú׿n wQÑ4o|ã|âŸ8)½Ø±þèG?â É\ÉdrQŒ% %‹,‡– …žïýÉO~’+¯¼’+V°aÃþó?ÿEQNšqƒA‚Á`ÙûX׎U>ùÉOrñÅsÎ9çØnÚ“q•ã3µµµÜtÓM¼þõ¯ç3Ÿù Š¢x²øA¨j®~ùË_"Ë2o|ã9~ü8ßùÎw–]@)ŠB8>­!@}}=étšh4Êÿ÷ÿýD"‘e;¿ Š$©¸ þ”%ËUˆÜ.œ¶ ˱··—·¿ýí¼å-o¡¦¦†ééib±Ø’¤Ñ ‚ÀU¯z#]ü&T6õ4VÏ0M“úúz^þò— šSåµÞcnnŽ•+WÅOK3W ¯]·n—]vYÙk ù+^ñ › ™¦Yu] v¦©Û³ ¯M&“ôõõ 9ï¼ó¸å–[8ï¼ó8ÿüóÑ4í¤ÒúË1ÉBF›Édì± ‚À‘#G0M“¦¦&®½öZ>ùÉOV=k¬¯å(±±Ê'¼nxÛûXsåûùï[^‹¦jŽun©ò¦i2>>Î]wÝÅ#<‚a¼â¯ TLv*ó(÷ûrtüøqFGGÙ½{7¿øÅ/…B¼â¯X`å ‚À±cÇåÑGå¿ø555\y啎گ(ŠŒ±gÏ}ôQ>ÌË_þrÛâ¬4Fë½%Ibtt”X,V/rKÃáõ¯=çwO>ù$ûöí£»»›ÚÚZææææŒªH%wz^áø ÃàÞ{說¯±±1Ö®]‹(Š˜¦‰$Id³Y¾ò•¯°iÓ&zzz˜err²*æbÅçææèïïGϧy{)Ã($åö¹(Š 2::JŽ)¸ŒÑ0 4M+r5[1º¾¾>»K}µc´ÞuxxÓ4éëëÃ4MR©”mýXóZ8š¦Ù¿›œœäðáà æHÒé4²,;z1Ê•±d2&&&8zôè‚=dý+###=zEQì¥ÒýšN§í{†Q‘mß¾UU¹ï¾ûˆF£ìß¿¿(cÖi½½ð7#Š"ôööÍ}µ¥ ¥{¯R9Oé{H’ÄØØ>ú(wÜq½½½\~ùåE.q·ò·óìÄO`ll¢çë³:ùò‰‚’6ë« eª*A(XÒÖã<†A4¥££ƒµk×Ú¿桇â›ßü&·ß~;ÿøÿˆªªüð‡?ä+_ù [¶l99µÁHó³¯ícÍÊ::Y½zqe­­­<ùä“\sÍ5<ðÀìÝ»—×¼æ5§TÛêììäž{îáu¯{ÖpÙe—qî¹ç:Ædî¹çþò/ÿ’rH/}éKÙ¸q£ã½Ï=÷\>ô¡qÏ=÷ ë:º®óOÿôO‹ãêÕ«‹Öغ»»ùÝï~ÇßÿýßóØcpçwrçwrã7.YF£Eccc¼õ­oå¿øš¦QWWÇ?üÃ?¥úwttpùå—Ÿt3Ò¡¡!fff–µÌ&›Í’H$Ê>Ã4Mžxâ A`ëÖ­ æýúõ']¦ÒÝÝM{{;k׮娱c?~œ‹.º¨Èòžehh¨h¬cccÄb1ÇñOMM±gÏ6nÜX¤yµZ[[+‚ø·¶¶²iÓ&O®QUU=ÝÓ¢‰‰ Nœ8Á_üÅ_‡ùÞ÷¾Ç§?ýéeåÖûx±p—“vìØÁí·ßÎ5×\ÃÙgŸÍücþþïÿ~é÷¿8€¡’ÕLRª‰œ5IeóåB©×² ¯Ñb“´‹wýìÙ³‡îînêêê¸å–[¸ù曹ꪫ¨©©áª«®²µÕÅÒ#¿ùMÛ^Ä®¦ftS\ô}ÆÇÇyç;ßIgg'™LfS9¤( ÿñÿa Á;v¸2AI’øüç?o Á‹/¾¸lmà]wÝÅwÞ‰®ëD£Ñe«ý)ýÇü‡-Ï9ç›1/ôW!ý×ý?ùÉOÐ4ÚÚZ.ºè"GwÕR¸°,«ãtÓ±cÇøÄ'>Á¾ðÛ ÿ¾À‡?üaöïß¿$ñ$ËøêW¿ÊÇ>ö1:„aüüç?çø·Þz«cìÏmŽ~ûÛßòá˜»îº €‡~˜~ô£üó?ÿsÅdšjæÝëµÕ®å/~ñ 6nÜÈyçÇÀÀ;vì8e®ÉÓM\yå•\pÁ?~|ÙÞ=ߎÐòMæºÔŠ>3·V¥xª bÍ4 ëO ”Éd˜œœ´])¢(244ĺuëxüñÇyùË_ÎG>ò>ñ‰Oð—ù—¼îu¯ãÛßþ6¯~õ«« ‚‘柿ðyÚe$ý+î}|'›:«®)ÄÌÌÌI½ëøø8Á`öîÝË•W^I4åúë¯çûßÿ¾}íË_þr†††ld›ÑÑQ{¿Ž_î¿ÿ~Î=÷\¶oßÎÇ?þqþþïÿÞŽ3]tÑE¬\¹ÒuÌÙl–ééi›Ï¸í¿ééiŽ?î)9'“ÉT¼g!­\¹’ïÿû<ðÀtwwsÕUW-+¿(|ŸÓ™,cíËÛn»{ï½—®®.®¼òÊ%w˜œœB”%d)W>Vòå’I¶À5Z-ÉÕLúRô`2M“3Ï<“{ /¼ûŘ››ãe/{SSS‹;¤& ›\ûê×3£êü65‡‰B(XÔ87mÚÄ[ßúVEA–å%)ü­v ³³³Üxã¼å-o±§[zvv–w¾óÜpà @.Æá¦I›¦Iww7wÝu555†A*•:©±VZ3ë}®¿þzÞþö·#Š"™L†L&³l€æ^x!÷Þ{¯]§fAÊ9í¹N…±¯r×lß¾{Ÿþô§ÌÎÎÚBpÛ¶mìØ±ƒd2¹è¬¾BKP×u‚Á ^x!¿ùÍoÐuÝ‚¡Pˆú§b×®]E-ÖÊí“Ë.»Œ[o½•o|ã|æ3Ÿ±áo¼‘µk׺î{Q=¹:½ÌßÉ쉭[·²qãF à ‹-¨õýc¦p8ÌM7ÝÄÚµk ‡Ã'ÅKÜÙû<Ôš,‰$“€”ï>aYŠVEƒ°ìY£Þ¢išƒA;[Ë¢ÖÖVvîÜÉáÇùà?H*•bãÆ 3;;ËÞð†ªc…ôç7¾{oÿµ -Ш©m¤¹¥®êûÄãqWx²SE–ÛÒŠi•ÂXR"‘ð|-@MM vmäbQP¬:ÂÂ5.ÇHãñ¸=¶åJ³vÛMMM´µµµ¾¾~ÁïCÍÍ̓Á“Ú»•hllŒ‘‘‘²Ïxê©§8xð 7Ýt[¶laÅŠ¬^½šë®»ŽŸüä'466žâa´´´ÐÞÞNcc#¿ûÝïØ´iïz×»l¼ÕW¾ò•lÛ¶ÍÞgµ´´ Š¢ãøxàâñ8—_~9Gޱc·/}éK+Ž)›ÍÒÐÐPq kkkéêêòäN´ÜéÕî UU™=éýä…jkkéìì<íkuuu´µµÙÉAË…¨46«a0Ž$ e‘€  £*VÎèònSXBxršÎ;Þñ¾øÅ/rèÐ!6oÞÌ#<ÂÃ?̇?üá%éZ¿þŒ]üø·÷")‚ñ>-ÖëÆ0¼º­l½Ï}îsÜzë­H’Ä~ðâñ8ÍÍÍËòŽ¿üå/ùÏÿüO8@CCW]uÕsz>+ ¡J!ƒ .¸€O}êSlذ††.¹ä¾ô¥/ñ¹Ï}Ž+V,ÿò¡‡âßþíßxì±ÇˆD"|ë[ßB’$n¹åâñ8õõõÜ|óÍ‹ž£·½ímd2 Ãà•¯|%¯|å++º.?ÿùÏóÝï~UU¹è¢‹<¯‘&i•~UC¿þõ¯`vv–úúzÞøÆ7.ë~Ð4íOÆê,”A¦i¢›`šB.dgȧEœÅE•Ox%K;²é…¦ôk_ûZüq<ÈØØ^x!›7o¶“=J_¨ôrYVÒY@`zºn·Tlëûááa{,^:VxM9.§­”¦“Ú°`¥ °ôÚÞÞ^Ë^[Ø5bxx˜ýû÷»fjzé>!Ë2sss ‹ÅŰj˾ÿýïs÷ÝwÛ×ìÙ³‡ï|ç;|à ¡¡aA=Z¥±¸Y’$î¹çÛ­ Ø®÷±±1{üÖþ´ÒùöC¥ÔrI’8zô(sssEóïö•Rç±$I ’H$8|ø°]>á4¦ºº:ffføÊW¾ÂG>òûÉd’C‡9ºÝö¨(Šì۷믿ÞvaŸqÆ‚`Ã{™¦ÉÊ–‰¢HoooQùD©÷# rèÐ!ûlQí¬Û>Ëf³†ÁÁƒ]º¥]_üq†††¸òÊ+m¼ÑR^¶ÅÊmX­¾öïß¿‘É ?òÚ‰¢’ueíËÇcšfQ©‰Û>w_Åg™&'Ff… ºa’Õt2šIZÝ,îIX-U×°ÊREÃ0‡Ã466.È^|ðÁùÏÿüOÞ÷¾÷ñö·¿_üâLMMÑÒÒòœÐpLÓ¤¡¡•+WžÖqˆ¢hÏ_¥yQU•£Gzº ¡¡žžÇ6Mžµ3Aào|£ç"èt:mÇéV®\ÉÍ7ßÌÕW_ÍW\±äY£Vÿ=Ë=÷gög|þóŸ'‰ØÌÒ‚ˆëê겋û¬#GŽ =ÏÿbhÅŠžŠÎ-f2šïQרØÈ›ßüfå}æ™g˜››# ò’—¼„ÿøÿ ³³³¨–ÑË;;vŒ@ à8GÖ}R©çÑŠ}öôôðÁ~÷¾÷½³X±b…çrƒM›6yNÚ{ä‘GPU•ýû÷³{÷nÞþö·/ ÌX!}ðƒ<%½<+íý¦¦&:;;Oê y¡„~ ]ŸFÕs½yA¨Y妺a‰“ÔÓ$ɲ¼@cùä'?Éoû["‘çwCCC¬Zµê´×Ôj:ˉ}é…²,{š—j®µÞ/ žÒwœššâ]ïz/{ÙËØ¸q£Ýc¹0\ßûÞ÷rÞyçÑÔÔäêr·æìdçaçÎhšöœÚßüä'¹öÚkéî§‡/~ñ‹Žç±]sÍ5<ú裃Á¢2¢jïc%ž•›#/×üïÿþ/Ï>û,›7o¶á+G–e‚Á`U15¯ Úk_ûZ:ðCúÐ)Ëä\޲£ª-ª%:C^žc&ºžC–ÉèÕA3òI¨F:-BZm˜–жoßξ}ûxÛÛÞÆàà O?ýtŘÀ©¶ŸoãX̘Oõ{ªªJww7çŸþ); §êYÏ…–KYMq%Iâ /,šÿT*EmmmÕ6–¾›ÀÉQss³k\YUUGKÉzÿX,¶dõwTœ œwÞy@έjuq©ÔŽÎ§ªMPdI „òÀÛŠ'趬1ÂrôÑ~”ÆÆFn¿ývæææxÝë^GƒÇÆ®>=Ÿ÷°°,„'C…±Á?²Úâ„Ãafggùõ¯m× ^tÑEÔ×ןòN*§Ò‚™˜˜`rr²èYV°%ít’Íféëë+R,¬˜®ë455ÑÔÔäþ%2 $I$(™e) ‹ó‚0Wj¿Lå¦Ypó%P¤jkkùЇ>Äèè(555§=ݧ?]ª­­=í.ð¥¦ÆÆF9|ø0o}ë[m—ÝÙgŸ}Ú-;§þ˜KMnå<$ÙR¢±„B!6lØà¤SE¢€"åÊ'‚r¾ŽPÌך œŠ~„K$‹Ü>ùt:éÕ¯~õs¦j9èSŸú”-Õgq))ð¶·½§žzŠ÷¾÷½§½Nw©©¿¿Ÿ|.¾øbvíÚå°%& BM@K°¯…S,Ã⤭O>=§–ðÇ»§ßð†70::Ê™gži#´œNZ¿~=×]wŸùÌgø÷ÿwÞûÞ÷ò®w½«,&îbhjjй¹¹"w¥YØßß¿¤EèÙl–±±1ùÅ/~Áå—_ÎÖ­[ùÒ—¾Dgg'555ËÞgóO‰¬¬nÖL²Ú|ùÄ¢Ìj.ØßÿiL¸ì>d†gh·j®µÞïO­÷O.¹ä~ö³ŸñÉO~ò´ Aȹ¡¿ñoðÄOpíµ×òÙÏ~– 6ð¡}È.‡XŠ0‰$IvöiáWioÊ¥R¤Eá`íÚµÄãq~üãÛmåªMJz>R6›=ue†‰ª›dTƒ¬ZP>Q`1Z2kÉ!”šœü Ô+RÅr3¯Hî UÅ.¸à?6ëÓi¡³Î:‹o}ë[ìÞ½›k¯½–üÇdݺu|ô£¥··÷¤…U<§µµ•––û«¹¹™ššÚÛÛ—T*ŠBss37Üp‰D‚gžy†W¾ò•¼øÅ/¦µµµ"ÔámÛ¶í”$åjh4Ã$­™¤4HåáÉ8vÄj„ \z饧}õõõžÓÿ­.ÕX ¾ ôét3Ðï|ç;ìÞ½›ë®»ŽOúÓ\vÙeŒ/Û3—Ë RWWÇÛßþv®¿þz6mÚô'µŽ;vìXVŒÝ"L0‘YE¥\²Œ›ÌòBË^Pï“O>ùäE ~÷»ßåÃþ0_úÒ—NºöóĉLNNP…C‡‘N§9qâÏ>û,k×®õ•Àç#™9¨F9Ÿ5Ê·aJžª:Bs¾Ç…/}òɧe¡³Ï>›/}éK'}Ÿ––ššš˜ššâ#ù?úј™™á’K.áSŸúÔsŧŨƒf¾ ^$(› Ú0Á«-— ,z€Ÿ_áÓIÐr4­õɧB²z~ðƒäë_ÿºýû7¿ùÍ>ÊËóœ!'ˆdIÈAa>’Iõ ‹Kgò¥¡O‹ÞÄ‚ï’òé”Qww7uuu\rÉ%üèG?âúë¯÷'åùobæ3GUÝ$«ƒn2j-BÌÅŸ>ù”CöxÝë^çO„O§„þîïþŽ÷½ï}6(·OÏEÚ0M4à «d4Ȩ ¦5º;í´nûô§I¢(ž6ŒKŸþ4É‚dd˜dU“¤j"«&©l¾|Â6Ö̪ µê°FÍy«Ðwúä“O>ùtº,CÓîLoA«å‡BÕ5…UÕ ¥ n>ùä“O>ùtªÈ4Ä|ù„"äÊ'©ØH«ÖL«YFàä*ø}òÉ'Ÿ|òiQròÝ'D‚b®aPÉ•O{,—QZÉ=Ðwúä“O>ùtêIA‘E)‡.S 續m˜¬‚úù”ß,ôÉ'Ÿ|òéÔš„BF'«Ìet„´É\²ÚBOå²€nÿ©aúä“O>ùô³Hë&² `è:YU#]aюʪêý Ÿ|òÉ'ŸNÕ†DFføÞîI’@3Gû"Ós464µ$a•Ð2U BßôÉ'Ÿ|òétQ,"óÒ•>}O?-uliÏÒÓ¿W­•Ðj9‘6e®èž/}òÉ'Ÿ|:u¤"×_Çúððp‚æè,¯¹à¬Üu ‘4òÀÜÕåúm˜|òÉ'Ÿ|z^a˜ )\±³™×DÃ(ÁJ0 "˜æì¢¥“g±¹\Í,}ªLš¦qÇwÍf+kLªÊwܦižîýè£Ò××çO²O>ùôœ'AÈÉ¢¬Y˜R ³@ ùk½‹Ãª³Fç (|ÁxªèW¿úÏ>û,@ âµ?ùÉOèëëóÔjfrr’[o½•ÎÎN’}òɧçå ?Íœ<:‰‚úE4æõSfN5mÙ²…;vxºvÛ¶mÔÖÖz[|Yæ]ïz—ߟÍ'Ÿ|z^ Ábk-'ªïGXuù„/O=­^½Úóµk×®õ|m<góæÍþûä“O$,³E‹koá“O>ùäÓsƒ†††xöÙg9|ø0CCCLNN¢ª*†aË“|“…p8Lss3+V¬`Ó¦M¬_¿þ´7Ööû[®Æ¼ó1BsqOòÉ'Ÿ|ò锓aìÙ³‡|ƒ’N§ÑuMÓÐuÃ00 Ãv5 ‚€(Šˆ¢H2™djjŠÞÞ^î»ï>Z[[9ï¼ó¸à‚ ˆD"§å}J]¢¥‚QX„tòƒC>ùä“O¤tèÐ!n»í68€®ëd2TU%›Í¢ëºýU(`,kP’$$IBEdY&Édäà¯xÛ·oÎZ†ÕT:T•,S ±æG }òÉ'Ÿž«Vàm·ÝƯýkTU%“ÉN§Éf³¨ªŠªª¶,´ ¡(ŠE‚PQÁ`L&׿üe^úÒ—rÍ5× Šâ){·RhšæФºò‰*c„¾øóÉ'Ÿ|z.S*•âk_û?þ8ªª’J¥BMÓÐ4ÍÑ-jýk¹G-Ë0 ( Á``0H(â¶Ûnc||œo¼ñ”eŸ{²ô–+kt^ºú±AŸ|òɧç"e2¾øÅ/òôÓO“ÍfI&“d2™¢/KÆKy}¡ ´,ÂL&C  ›Í’Ífí{<ðÀ(ŠÂ 7ÜpJßuð.’æò¹FíB Ÿ|òÉ'Ÿžstë­·²gÏ2™ ©TŠT*E:.‚¥‚p¾(=G¢(.pJ’„¢( ܩֿ÷Üs]]]¼èE/:eïºÀEš—OBîËç-–»–¡ibb"âé†a€(xjƒeê:š ¡x²‰ašˆ§úýtƒ¬ ÿøö®ª˜Šâg¡ý‰’šÍ"§…;Þu×]üþ÷¿'“ÉL&m!è$KZ©ue C+F(IRQrM©;U~øÃ²qãÆS†Te=>F¸x#­*×hµ‘$ AÐuUUŸw›zäàcüä7ÏðÖ÷¼á´ŠýÇnÿ?Ž&yåµ—–¿PKñýýŒ‰i‰n¼–ˆ"•½<9v„[¿ö+Þôw: Y(Šâ­Ò•Œ,?ýùÏéÌrï¤6ø£a‚ZrŒÿùî/ˆÇÛyÍk®Xah1Rw–OËC–ðBãƒøŸïßÍöí;¸ü’í§t|cccüð‡?´c‚–´¾²Ù,™L¦È¥Y4MÓ1Fh¹FK“jJf2™ä;ßû!ïûï^>ES×–KBδÕûe„E¨GéÛÐÐÀèè(###ôõõÙiw»/ø¾ôgëûÒßj-¥?—j n÷.Õ(Üî—N¨Ý”GŽ̲÷uº9-ÆéÝœ~'Š"Ó)xöɽ=g¦¦ƒÛó’Ãì?q˜ðÑqžÞ·…–xÈ^%§¹2õ$ƒ½Cì݈ú¸ÀÊw›³ÂßI’ÄÝwßMgg'k×®u%cE‘ºº:öîÝk—IXu‚…_ÖߒɤÝÅF–å²JŸõo&“¡¥¥…Õ«W#ƒƒƒLMMQ__oÇeY&›Í‡9xè/¼ì²åñÒå*§q’KViYc„ó k¦§Ez>»q¢Ý¼öµÝ§}+·œËÊ-Þ®=s×¥ÞÝ*¡zþü/_»$îºj´¯ Û.`Ã%ë¹ðE/[Ö'Tc…ùtòn¸jêã„` /»úÚS»ãD‘|t:m—D–GX?OOO#I›6m¢¾¾ž±±1öïßO6›E’$GAh%ÃÜxã¼ño¤½½Ã0èëëãë_ÿ:¿ûÝïl!h=K×uöíÛÇØØMMMKþ¾åd‰íYZè¢"C&x~e>?)37ÁÏî'sšåøÄH?{÷{ºvlè(O÷÷¶©2sìÙ·—™ìÉe[Z¡W8HoÿÐsI÷gï“}$DW;×jjš'÷í#©=wÞáXÿö{Îϵ,ËUŠëì{b7iýÔQöíÛ‡išE¯ðkzzšóÎ;¯ýë|ó›ßäßÿýßùÊW¾ÂÿüÏÿpá…¢ëz‘‹Ôr›†Á-·Ü§>õ)ºººlWü† øô§?Í«^õ*fffŠh,ôšƒ.›àw7Óæ[V{”«tø U/’åÊ9~üøóª¹¯ ¤¦‡ùÆwÄ+^ùFÖ7OKáˆ(Š yНÜñ4õ–×Ü¥²(Iöq¾vß>ôæ×"›F¹DKÍð?üg\újÎ_ÓÈb–GEFGG‰Çã455U´þA`ÿÃàñCY^ûú—>'¼‚‘æÇ_ÿ_.¿1FWS˜çê6µÜR£££ UNâ²s|÷{ßãâ«^ÏÙ±Óþn¢(°ï±øÕ^%†þÜõe2&''=ó.ÑÌòÓoþ¿6ÌÊöø²Ïµ Œ1==]$À Óôô4¯xÅ+øçþg333d2b±;wîäì³Ïæ¯ÿú¯ùéOºàþ×^{-ïxÇ;˜-:§™L†`0È>ðúûûÙ·o‘H¤(îØÛÛKw÷ÒzÓLÓdnnΆÅkb:›‡Ë!M»F£:F©( ¡Pèy'gG³2YB²@(:-LDER)˜–!(+„¡ì\§Ò:q-ƒ" Jfù÷KL"¦U"¢I(^ÔúXëk¡MTº‡ „bQ¦æFPB!„ç€ ‘0EƒéD’µ] ÏÙ}*Á`Оo/JGzZEɨD$½ÆK+M²i]% åJƒžÃ<@–eϼKL¦IB¡–eŸkËÛ¦iZ‘°°¾‰›6mâ_ÿõ_©©©!‘HF ƒ¶µ ù‡øz{{Ù³g}ŸššÞ÷¾÷Ùï`%Åf‘ÖÔÔðîw¿›ÿ÷ÿþ_‘E¨ë:©TŠP(´,ÊIÙy]dOˆª‘eÌ*¤­•eTSSCcc#Ï7ª‰†øÿ>´–ÆeðuWCgíº˜-».¥¶¦¦âµÛÎ!g_ôRjⱊ×Öׯx÷_}€¦æ–“_mm-ž×øœ‹_Äší*Í Ï™µ~Û‡ÞK´®™hPyNïÉÆÆFjkkið8wµ±ÿï¤ù$×x)é‚_Í¥ÑZ¢áÐsz®UU%WÅ»Þò÷®i :5eA¡P¨(¦WhjšÆ?øAZ[[I¥RD£Q[ˆo766róÍ7sýõ×Û¿âŠ+8ãŒ3˜% ¡(ŠK´!ÀE]ĶmÛxæ™gˆÅb¶ 4MsÙb„“““¤`õUîUÇ…*mOkaž¤„"§]Dâuž„ @¬®Ñ“åÀI Aksz­µ„ã´6ŸÅÈ4 OšyKkÇs^¶æíYÓ †ŸSBþöþ;<®ó¼ó‡?§NÇ z!{)J¤ºU,Ë’e9‰ãôê$Nv³›8N~Þ“lò&»ÎfS6É'N±¸Û’Õ,K² U(Qbï½N=õýcpÏ Î@¤b{ñ\.3ç<å~ÊýÜí{CmCó÷<\ ­Á¦±©å]c‚ÎÞs~{¥ÁL&Ãúõëyà¼ó–¢(„B!A`dd˲hhh ÍŸïÿûÙ¶m›[ï>ðÂá0Ñh”¦¦&t]gjjʽƒA€ûöÛo/ɰ,‹l6{]Ç[‰A-V«?Pì%5ðý\¦Gûù¿_ø —Æsÿ¦ýè¿pˆ¿ùâ“dÌÊñÒéýü¯/?ƒ^ÅDefÆøÜ—¿Ä¡Þéwu<ƒ—Žð7ÿú8)ýú¯¦\rŠ/~í˼y~‚ÿËÌÀ)þéÿ~ŽwÇCãë÷¿9Ý÷Îi½ïɯðÜ‹¾¯hmjižzê<ùæÅw­Mo  ÷ïl6Ë­·ÞJ(”W‡Ë²Ì£>Ê<ÀŸýÙŸñWõW<úè£D£QE¡¦¦†÷¾÷½D"vìØáš´þüÏÿœ?þã?æsŸûÿîßý;Ž=J(r¥Â­[·"ËrA¾wøoY®KáRŠ“ØñÊ•+œ={¶€›W  Ês— ´u>÷ d-~§´+ºÀØ…c ;ÎÀ†Í䯥*Þ)?)åjK½#Jg_{•éA›óçΡ؆P_<Q’8¹÷f&Cœ;wÁÔ˶37ÒGÿ[in]Ë™lÄ÷’S‰æ²,344äÚú!?@1‰"çö½ÆTŸÆ…óçQ³"Í*­—RÙ6¤wÿâ =œ1ÆJ^äÞiXB¥d¡‹(·Ÿ.]ºÄÐÐçÏŸ/° •¼Açf8søÇN&(PUàz5@ ~ô—e‘Á)´7ßF̭²ì’ë¦Ô^pÖñÈDŠ3GÒÙÃ4̪‚íýú¹Øýæ}6—Ë1::ºàì*Õ–™å쫯Ӵ+ÁÙ3:¦e•ìËbÀJÑ[’$fgg ˜ —nܸÑmcïÞ½|ä#¡¥¥…ßÿýß'Nó«¿ú«H’Ä?øA7·`CC---ˆ¢ÈŸýÙŸñßþÛã/ÿò/¹çž{øÙŸýY~â'~‚矞¶¶¶¼6¥©‰P(TÀggg9uêTI/Ïrç|¹u™ËåJxM nz$»Šz—̯"| Uë_-Ë"ÓÚÚÊÚµkù~+³÷_ÓÉŽ6ù7Œ9úÂ×éÚ¹›-ë+öZ¼ý$=»v³qmeƒsÓ½(+šØ¹k;ᥰ­­®®®ªçøÄËߤsǶlXsÝ¡ëz]Al®gç®í´Æ¾ÿáܲÙ,©Tªj€Šôä›Úiïè¡!r½U¿6«Ö­ fU;k×¾³HÑÌÈ%’a“µkÖþ›Òº©©©êu=3pŠl8ÀÎ=;YÛšxWúXSSãz:ŒÃ²,$I¢¹¹Ù}îŸÿùŸ±m›P(Äç>÷9—ÑþóŸç¡‡B’$ššò*ôp8LMM SSS|ík_£±±‘—_~™³gÏ"Š"W®\á©§žâ—~é—€¼ÒzsÌ$¢(²fÍåÚ®¹ááa._¾¼Y âÙ»$ÚKuËù>,7½ÿ§¹é{ þØ®Vç'ýª®wÍî÷ñÉÝï{×ÇóC¿ôÉw­­U7¼‡ÿtÃ{øµ„ëÚùµ_ÿػԚÀòç®IMÛo¿Ÿíßg´Ž·oà?ýÞý7Qz3A8 ÀË„’É$ ¨ªÊÑ£G±m›X,æf©ð:ݘ¦éÆ$ úúúD\IÔxгQd³Ùëîâ§Z*[Z´À×Ùw3{ñry÷‹ƒN_m™ž¸Â¥á±w¥o––æ|ï¥*ì«ßÅqc¯¶è™Î÷÷óŽÍ±¶Î¥¾‹Ìd¿w9;5ÂÅ+#ß3´ÆÖéí»ÈtÖxW÷ž—:?¦iºŒ òÞ¡Pˆ††š››inn&‹±k×. Ã`n.É•á<-çæ’ S[[ËæÍ› Ô××ÓØØHmm-õõõ®ÕiÇqŽq$BÇ#õz×_âË«G—’ˆb ªQìêßÑ4™™ÆÇÇ¿¯â—Kõ szzšñññêæX˜ºÈ?=z_þ¥'¦\ß5ajižùæ7iÞö^îÚÚò}MkAczzš‰‰‰ªnÜZzš¯ñQvÞûÃl_U³ôÆ-}Ï›™ØV>|÷úïÐé‘^þáûø…_øIj¯ƒj.—cvv¶ú³Ë6xã…ï0ÚÈGîÝô®Äf2™LÐA™¹x1ï´“ÍfùéŸþi.]ºÄÉ“'Ý0Š÷¼ç=<ò¡âÊÈŠ,qòÄqYàÊ•QŽ?Ë·ÞÄ/ÿò/ñ¿þ×ÿƲ,‚ ð‘|„={öJ¥P…¾¾>’É$ªª8Ë ‹Å®©ä;33ã2Ã…X£vA–Àë†5ê0ÚÅH„Î Áq¯õv¼Zƒi11J¡Ø{ÿ®dì/—E¢”ø½ôýRûÅ㯑~1´(§:(÷þbÇè|.Š¢;¿º®jüêE^üê¿’h܆*èZ>›ÆbÆíGãRô¼|ôuΞ<Á-|ÈMVŠnåÖNñ:ó[ÅŸ/&D94~ï†wð½û©=N½ö,£Cƒ¬¨,H…æG¯RÎG³ƒ§yó¥—ù¡ÿx'º¦Wt:ªÆ9¬‡¿ùuÊÞo|‘hx5!ÙD×­ªÖt5Ù7œÏ4Mò,ßuí7¦ä•sì{áùõÛÐu ˪œAg1뽸}Q„Mx3ü¼ñÆn^BUUùƒ?ø<ÈØØ‰D‚+{0´$âô«Ôª}üÂ]WøÐ âäéÔÔÛ uÐÕ½žßýÏÿ™ã'N`===Üxã†áJ —ËÔëºN6›]F°X'¬â5å•2œÕEŒêºÙ…elu ©««£µµuY|ú- ´¶¶V=Çüܯ’”â´·^ -¾›ŸY±žukº‰üdËœœdbb‚––êh¹÷Ôm›euW;ê;0ë7ÕFøÙßúm:×®£>ü½oùÞŸú%¦‰²ò:­#Ã0H$U¯k³.ÊÏþÖïбv= H^õ¨#½½ñÆ;vŒ®®.7}ㆠhkÖ1=›Ãž;J—òñøHAêëZè’V°c×Z˜ëc|îó ¦ï!_ý÷Þ‹ªª(ŠB6›ucÆÇÇ]ðmo¡išÔÕÕU½N«-£££ÌÍÍUÖ®²Œm»k‹g—“ˆþ`çXmé\½å]ë[8Ñ̉æÿgioê`Ç5ˆ§—CqvlÿÞJ›µ²g3×37Œa‹:»¤`Í»N#‡K?’$1>>Î?ÿó?ó{¿÷{¤R)LÓ ³ÉeR¬àUºãg P‹èDC ˆù{¶†¥hˆ ’È~Žów3”ÙC4$ ÊȲ‚mÛ„Ãaž}öYNž™…" ¬h‰qúÄ)Å¢»m?õú8“¹;±” dÓAþìü—†hmm£6#‘ˆ ª˜–DVcttôš×P¯ë:ªª2<UˆƒK·\~0UHËsü½Ië]þ,»\¦ÛRµÞL •JMS¿öïã]íã–i~òF‘psc^µ)ˆ€¦¶–ZæF`v,ì!Y„ÌX&¨é<#˜2Œ,h³Ú AÑÃAIA´S$B ;··€¨€%¢ zb&íñŒS¿;ÿ7rÍ;c†¦i"I“““477óôÓO“ÉdèèèàСC†Acc#=ሯËgÞ0¯#ÄÚbï“^WÞåòƒ[–íÀï^Eqy?-¢Ùã© -õ‰8Zký³»þEˆm3v0Ï  Ì,èiÐæ 7 z*Ïàò±ó¿ 0C ÈWÅ(ËÈ?§§ó?–dóõ‰A‚ùöL;ÿw ˆX¢€­ƒ ¨ÉȹK$_þ)w} %¶bIc¼|ù2ñx]ב$‰d2ÉáÇiiiáµ×^#“ɰnÝ:LÓ¤ïÄ›ºU„m[Xœ‰fÑWøÅ, G—;55ÅÜÜÜr@ý(œžžfjjª´áz¹\³255Åôôôò~ªê¬²yîù'8xà ?ò㢻cqî³™Læ{v]ÛÙqÄßBiÞ¹ I)VôdžéiÉù¿ç@›ÍÿmÍ{rÚfþÇÒÁÈä¡(ä¤e\e¤F6/5Ú6h2ˆRžùÉà„óÏ™:¶ `æRˆ¹1ÈÍ€i 'Ï2´ï¯¨Ýý{Kf„½½½¬[·ŽÙÙYΟ?O&“áСCLMM±jÕ*>ö±qéÒ%þîïþŽPò;\è ±yÃÚëã,ã„OxÂJ+¾óßÿûgttÔký‚­¤î}Æ{— L^Š4º˜Œ¥2`” ]jûR€–¼ÁªÈNP|ÙÙºu+‘H„©©)¬"ÄýjÛ(µhKÑíÌçRƒ›+Íc©¹/·~¢ ‰D‚íÛ·3==í\ì„|=hW-­ªÙ¿Õ¾Wí~q%:,Æg¯`§†™ 6¦¸±vÕôÛ4Mî¹ç¦¦¦ÊETsN-†vÕÐONž&šI¢§ÆI'm4{”P8@(`"[i0晡ž# fnž ÚóaFþK1 ˆóªQû*ƒ4ç¿· p…å¼T 䙢: ê–-£gÒX™iTkIKa˜&s#'°''½þmÛ¦±±‘ƒrøðaV¯^͉'hkkc÷îÝ<ýôÓŒ±oß>Ο?Ïðð0Š2Áçþéøw¿ök445]{F¸ÙpãÆn*åòƒ[V®\¹L„åò=Y~âÁŸàÔ¶ vÞ°•¥(ï{zz¾75}W˜›M¡F˜œš¦wÐD–E:Ú´5بB¬lÞVhêyæÆ¼Ÿ‡ ‚ ç¥;S¾jÄa„Ö<£4óLÐ6ç?³æ« $)o#ÔfÐì㓦¸N@ÈJë„znaÕªUKç¹sçˆD"ˆ¢ÈáÇ™˜˜ààž{î!Nóä“Oò×ý×d2—ŽñØ·¾Å/~ô£×žæm„y;¡P¥D¸\–ËrY.ÿ–%Ú¸‚]+~àÆiÜÈE½èÜ(Q¥F2¹Ô§1pÎdÇ–k:%$¡ˆ‰¹ŒpžZâ„"‚)ÆÙ÷öa%Ãî­AÕ$•ʱ÷|”ÏŸ»“!}Õ’ÇuèÐ!>ûÙÏbY pðàAÞ~ûmúúúÜì™LÆõZ|ò“Ÿä _ø{öìáô©Sh¹lUí-ÁYfY\.Ëe¹,—ï…’ÍiœHmbð¸Åg²seŽHHæ¦Í¯åÒ`3=]ùXB!“u°ÇW]j3Ïô„ù„³Â¼œ$Ì3@¤yOQ1j”3§SŒ]ç¾=á ÉЄͷN6ñÜÐ b Ù™EçøÁ·Ù÷òwyãäE$,A`nnŽóçÏ377‡iš†,˨ªÊöíÛÙ¼y3O?ý4¯¿þ:Á`þþ~ÆÆÆ O\{F¸¬ ].Ëe¹,—ï¢k 9.&Wð—û>8q‚÷¯Ÿ¡).²¥Çâðñ‹4´ì& €> †2÷—[›—ü,(@®z† ò|¸Ä|¨„9ÌôœÄ±C'ٵɦ.nòÖ%‰ÏîoçØT'uq‰(©Tºêq  òÕ¿û+ïý.Ѻb+ÖÓ?0ˆ"ËÌÎÎrîÜ94M#F ¨ªŠ üÁü===¼øâ‹üŸÿóø×ýWÒé4²,sòøa:ºz¨ÁkïÑå²\–ËrY.ßÅIˆ« S¹0ûÆ:ö÷^ægw²£VLÎrðÍóÜqßv$AÊ343=(Ÿ›‡b3=Î4àÆºñ‚êUD)€)„yýÕã4ES45Â?¾â³û[˜5ëhL˜ˆ‚…iYÌÍÍaYVYÔ©äÜ,/<õ-žùüÿÅD,Iabä «Úº°,› .0::J<§¹¹UU±,‹ææfr¹—/_æŸþéŸØ°a###H’Äìì,¶m£( µ‰8c£ÔÔÔ^K‰°È}v¹,—å²\–Ë¿YÉf³n2\I0E‹gÏÖóÆE‰ŸÜ9ÎGvf=w‘Cë¹ñænsyƧOçgÌغ#tb EóLäGÞêgrp€õàw¾å±cµD ‰˜Žm«nR©¹\ŽPÈ?ëÉ3ßü ßþ—¿§aõ&Â- ?‰‰` WΡuÕΟ?ǪU«$ Ã0˜žžfãÆ|îsŸãõ×_çÁäôéÓȲŒ¦iH’Ľ÷ÝG}]‰D‚›nº‰GN­…l%y¹,— å?ý§ÿ´L„åò=-:?¶m’uÆ“2ÿ¿§¼rnŽ_¿5ʍk¬§{ë° M@f4@ciä½B½÷R^"”c¨Ï3DsŽËç/óöÞcë$þýׂ¼¤¾ÆBŒ‚ìô¦i’ËåH&“ áÑûùâ_š±á! [`úèÖÜx+#}HÍÌ I2³““t´Î±²£“áÁ,ÛvsqŽŒŒðï|‡S§Nå5•‚@6›¥¹¹…Gù ý¥_Á2r<ö­Ç9}ú4©TI _F˜Xô*G—m„Ëe¹,—åòoY ÃpƒÈÝÛFMBŠÉÓGezÇ¢üÆm9ö=ó*õí«ˆ·6æ¥=92/Î£ÎØÅ1†ó¸¢jDÔHšŸ:À¬ óÄàôU ,Û.ìƒe‘Ë妱±€KçÏñ•Ïü%b8ÎÔL’tNGQhé#ý—hXÙM߉ƒóB©ÄxßYV¬ÚL_/Á@MÓ˜åìÙ³üôOÿ4†aÍf‰F£üÿñ?âí$‡ÏqêÔ î½ûn¶ßp_ýúc„k긖¡àb,—å²\–Ërùa„ÎÏUÉ0ÏØÂ²Á•t-/f6²K™¿ö4øÅFRC …æUž~‚àù­afÒ<ý•—èKs2v;f¸–†ø³³…©·/9McrjŠÙ™¾ò™¿âµgŸ"T“@P#4®ZÃÌáIÒé4X&ÃN³~÷]ÂQ´\E J΢®¶–––fvïÞƒaìÛ·çž{]ש««ãçþçÙºu+cV=½ƒÃ4&¢(²k×.¾ñø³UÑqIi˜–eÁå²\–Ërù·/¹\Η:ÌÐ4MZã]ɑܽ¤Î>‡úÅïðÞߎ «ù¹€Ø&v6ÍSÿú*‡÷2´ò.ŒÀJšTx<ÁÔÔ´ÛNÁw„yö_æÐËÏñÖ‹ß¡¡m%;n»“—Ÿ| ÃlF EЦ'°Ñ5‘¾ tlº³û÷’NÍžbë­÷òïÿä?¸˜ÕÃÃÃüÔOý‡â÷~ï÷hjj"—Ëñꫯ²îÖGhßv÷n!ˆ‹× ±¶\–ËrY.Ëå{EÔ4Í_=:Ï-Ë¢©©‰†š0³™ú„ûÐßz–ógFˆ·4#Ê šn£kšf"I"²"¢(2², LÑwq€ÑÎ;0jÖPQU•††.\¸PжiÙyìÌ,²¤saì"æ¶›©kïdõ†ÍDb V­[ÏécGé\¿…¯QRPÔc—/ÑÜÞ‰(Ø´oº‘Ÿÿ­ßeÇ®›ŒÛ²,zè!V­ZÅ… 8zô(ïyÏ]Œ€ xã® #, Ÿ¸v ÒÁÁAZZZ$iyu/—å²\–K•Ò —K…Nf÷ÖÖV‘²’cVéfXx/òÀsŒíŸ`" ™\>˒ż™PÌÇÔK"Ô„ ¶&:o%W»žDD% P…ÆÆFAp f˜si6¯ÝDf¤9˜@Ó4ÏŸ¦cã6F¯ Òк‚î [9{ì(étŠÆ•ÝL õcèY¦‡é;Ï/ÿÑÿäþÞï/Œy >×­[G[[÷ß?Á Âû/»›Â}Ía>áUx-3’ë™9$©mye/—ï«â=xœk® .*çâœeì<8wîÉÚ༎yád ¶Aÿà,gF-lIIpåÈâ%•J& ŸH# BIõ«0ÿ¦ŸI×.Qo~7X Û„d›-*±˜Šnúo†rÄ/ÞÐÅïxëñ&Eõ~VVÚ®¸·šd¦~‰@+õµÔm˯O•—«¿Ò祒/%n9:”êƒßÿÎ _¦¢ë:;n{­Wó1Ýÿ#—/ ËrÕÑ4Mt]gçíÔ¥k9žôŸQUµ@[â0‹uÛ÷йzSÅ罌®¦®‰›ïùa÷óoå3ˆ¢H¢¡¥àóJå¥'¿ˆžËм²‡7Ýuu?ÏͰ÷é/£(ŠËhUž¬¹ë¡ŸX@/I’°,‹XmcÕý¸tæ™ô}g¡(ŠËÄÊÍO¹ÒwþgïsûR<®RåÄÁ×êCÏe® CH$B8.üÂá0º®“L&Éf³èº^À¼u]§££ƒ––DQÄ4-dEFŸ59î&‘’h MÑÑ)¢$  &µÍfF•Ôp-5!…@ €,Ë®G¨iš„‚šëji KÔÆkHÔ7pþØaÖl»‘+ý½Ø¹,²¬0xî4÷ÜÁ‘·ÞäÊ@?ÙT’‘KPƒ!nù¡Ÿá=ï{ˆºúz}ÏJgý„ÃaæææEY–ó4°L2Fž‰/Å„·(g‡ñXVþ†ÔÜÜŒaZH’„¢(hš† €–Iñw_~“¿|IâÆ«XßÃl,ÓÆ²æo’€ Îß@¨Å˜±°Mþ;,Ó²óñžGœÿ ù:M;Ÿ%DQço5`[6–abg-Þ8=Enæ2ÿí#5¬jO`Z ÁJŒ«R6åJ̰ZÉ»R†ûRŒ¶ã*ÅxJ1¶J̰¬TO)&TîÝrsP-Ë1ìJõ{3Á{õL&ãnN§d³Y²Ù,Á`°êQÓ4å¶¢ˆ7´25:H (8äs¹—/+`„Š ÑÐÆÔØ  ?åC6›eE¢Ñýlbô étI’PÓéE™LËÐÜÔ7Þ‰ÅiëZÏåó'ˆ¢ˆmÛhš†fX¾ôRUÃ0Ñ®u[èèÙÈÛ¯ËÊ3“±+—Ée3‚W–2;9\ð¼Ó_MÓX½qûU‰ê܉’”Ë 2iö¿úüõ¦$I¨J^ýJ2šm7ÝÉÄðeD,TUu/ŌСW0œ¿H—î€rÓm÷<­Ip׃?ÆkÏ~#—FQt]÷ŸÓÇ26<ˆ(ˆîy)Ь`hù Lñ%Â)Ó“ã=ð:[vî!Q×Pðý†í{8²ï¹´_jQU•h4Цi®Ô± zUËŠ¢ÐÖÖFSS‡âäÉ“˜¦I0d×®]„#1Lô¡ —."D‰·ôÕ 2é™tš\:ƒžÍbi9„ä,¡É>äõ5dŒ$)O{c>Hþâ™SLMMѽf¢$“Õ "õÍÌNO’LÎ²åÆ›xñ©ÇÙvË] ]:‡ešÂ!.=Ħݷ±á¦;xè'~Ž]7ïq´5MCUUúûûgíÚµ=z”L&ÃÍ7ßœ×4¤RLLL¸{¦øo±Áëf#ÄÎ+ EQfggIgsüýßÿ=¯¼ò ò'BSC½#S¤ëêÙÔåèˆÀHFD– ™3ɪAYB•@r†@N7Éè Š!E$ ¨²ˆfZh¤uˆ" JYÄrºEF·Ð,È"Y ˆ¢„¦›äL›é´Îð”Áºž†L Q”ˆÔÔ¸Ä|§ÅOŠ»^åÝl«ZUñ÷Û˜–r ùõYÅÊzÛ¶ÝÃÉ«,)…ÌÖ+Vù3ÂŽžõœ9²QÝ~8öŸd2É…ÓÇØ¸ý¦‚ç{Ï.xÞQ+5¯èB \¾xú(5±¨¯äšÍ¤9~àuB¡PÁ8dY& ‹ÅPUµ¬íí†[îãЫßv¥4]×ÑMÝ—Ž†d¹~8uìßû,»n¿›o¿¯àÙí{îåÍï>êÚ˜üæg ÷<—Î+°ö#‘±XÌ•|ŠÇ535Áñ¯#Ë2GÞz…{þ1ÖoÞá~ß¼¢IÎ_,üÖÌböƒªª2™ ™LÆ•œ•¤Ó7Y–]x±`0ÈÍ7ߌªªìÝ»—{ï½—-[¶¢U¤©S¤/вù&ôp”ôÜ ™d’LH%T0B*FVÅL§°ear‚øÈ’kv01 ˜&¹T’Þ3'9ö4r8F(æaÔ²9±(Ⱦ±äGYÙÕÍPÿEº7oçØk/’œž$VÛÈ]ï{ˆûÞÿ÷¢à˜r¹œ;ÉdMÓ8sæ ŸùÌgøð‡?Ìþèæ½QÍä¼)vÌÛíì«©‡…Eh–¬µ± ƒî„Ý}÷ÝÌÎÎæ+TTb6Ô$éi­gõÊcyF˜Ò g€*A@† œ÷LÊ Ñó¦Ä  ª’N7óïd¼¹/$çßU•|òåœY4Ó& d(ù"93ÿþTÊ$ "Š“ôØ#ƒ!‚Áà5c„Ë廸14Ç#¯ˆÞ«Ò©Ä;N¤¦–úÆÖ’ϵ­ZËôHSˆmÛD"Æ®\#TA -ä’Sî󎪬¾yECPd‰P(ä2£‚ý. Ô××Ç uÇ.ãHM†a”T×64ÓÖµžÉ+½îÅ@*’údYÎŽ%úQSSãª,Óé4'¾Nm]#k7m/PÉ6­èfnòŠ;Åó …hll$‰Hm²,£(Šë¢iÚ‚qI’DCCƒ+½ž<øF#%¹À i±Å4M¢Ñ(étšt:M*•r™¡#:g²ÓoGÖuÍ›7£ª*<òÑš8Ak˜\_/õo®m$=7*Z„‚ ¹t-¤ ¥´9 ÝÎ*¶C꤫­Žd coË ÞØ‚D6››gDsÉ9 Ó ©£‹ÁSÇxýùçhhiå­—_$±kYÝ$²¢‹{ÞÃ{n#‰,Ø‚  i¶mçpæ÷Ð-·ÜÂîÝ»]úfŒ«üÉ…Š»®ªÑy– ‰ÅbØ‚Èm·ÝÆ7Þ˜×[K27Þ°™»<ÊèT Ñ57ÐXŸg\é,dÍ«L0 ç×}ÎÈÿd4¤<³SeP<Œ0£åÝ{CÊ<£”Á´!§Ïÿ˜A%_g@ÎÛszþ}%$1;'Ò’»Àƒ›"5ñ’žuóÓS\êc³mpl[EÏ9ßUqõ+ýœóûŒwrKLô‚w|Ú¨¦ÍJuzéTqÁù3<ØK(r™Ë­.¸’#aÍ4ÍŠcì^¿É‘_ kÁ%ÛÇYÎéGMM{yD"(ŠÂ‘ý/0B€DC “#ý(ŠâÛ7EQˆÅbÄb±FèõD-5.AˆF£D£Ñ¼£.T™ç²‚êÒl„Ž—§ ¤R)R©Édr#tlÖ‚ ¸ÌÛ±:̰³³“T:K"b`Ÿ<ÚÔ…Ú± -›F®‰ *¹´€.™hB€¬•E·ƒ蘒‰ $sA^ùö>„¶–™É1,Ë$QßHo©d„¼T˜Íf%™Æ•Ø÷ F&Åìô4s–@Íš­„Bæ’Ižyæ~åW~¥`H¢ˆ(¤Ó)‰íííyðì{ïåá‡?€$Ɇަ騖•÷ Åñ-;ïé*,Î`éªQòÎ-¦MÞÅÎOˆ¡k¨ŠìþÝØÔÂÇ~ä.^xõ-’N1%Ó²I‹ó)çÕô–=ﮜÏÃÈœâ¼Ã‹5gÍŸwéùϽ,Á²®~'zùÑüYfX° ‘û7Õqãöõ˜¦…adY.Ë¥šbù8ËX¦éûy>ñ·•ÿ¾Â†Ô5L:ͪµ›ÝÏΞ8ÌÌäx#¬klA FÐr9D‡ÁÚ6²$ 8ud?Ûo¾Ó}~e×:ÎÞ‡®i0ï¤R×´¢@-Ú{ö8u‰xÞSÛ²J8‡‰‚€ä'ñÙ6¶ea;›¯”Z9¤sí6ÎÝç¾ãG/‡f‚X¾’("ƒ˜Ñ(ÙñqΟ:Âê ÛÜg›Ú:8ùöËóŽt¦/ƒËŒËé‡ß¸œDtάvt¯/ø~lxCËa[ÿµQ¦¤R)VvtËåH¥R¤Ói’ɤûã0B]×]M–#M{%BÇn›ÍæxûÀbú0·5×"u¯A7uÔ „Ò„ ²lb†$tA%@˜¬`` &sF–ÃçÇÐV¬g<ÔÎÜ™s¬ß¶ƒæ–FÇÇ%Û²¦¶¾l6ëÚè:V®D%†§f 6uƒˆsIDA$£*:tˆãÇŽ²nÝ:—æU£YªÊ–Í›Pd C׈FÂyµ¾®Í›æLL ²¦Xp¿Î§Èy,ߟv‘ÀÂ¥#b+ņ’$VDBªèzÛù­4Ó4±5ƒÕ«W»ß\ºpËÔIÄk8üö›Ìd˶í?zd#+ùz-YF±ƒLO359Am]ýU§™Ž•\8{ E0QT‘µë7¸ß?s’X$H4@–$²¦ˆ*¤¶®žßü­O.èýÜÜ,O=þMdEĶE=ïÁí-¯½ôë6n¦®þj¨ÆÝwßË?ÿ÷ˆ2&yž^UD·öC‚²HXQÕ«ô4$Á` ÕºÉ&¨ˆHöÂùyàÁú®‹7÷½J_ï%$YÀ’òã’ŠúÒݳƗ&/<ûC½Ô$ê †Úµò)UR099I6›uí‚tTÞÐ G•+Ërôþ¨ªŠ$+|ý¥7QeV7‘K#‡Âˆ’$Y˜º‘‘á9^;~™IêèïïeãÖíLŽ D©mj¦ÿÂY”P˜t2…$J ˆÌÎÌ2==í¶mYSS“„çÕÎZ.‡2ç§i¹yF871ÄìÅ·Y»ãöÒF~?J¾”æ ?ÁÄ6¶¨t×ËÌûr^G¯Qò^mq™¶¸\dŠ*aO±çoÿï ŽnQ&)Ÿ>—гók³\\¡PÌ…}_B?‹Û_L0y%òTŠ©[ÌgP]`}Åù,êl1í]_5k¤Ò¼”èÓKµÊB[PÎd¹è¤ª"-52±Xyg™\Î"%ɬYw•A \$Ä t÷L6“fÿ+Ïç=/çÁ+$Y&@ÊùÉÙ¡Pˆ©ñ+;°-;÷¸Ÿ¯Ý¼ƒ¡Ë—–`¥¨ÁZzÕÊåeÿ|9uìãÃCóÀyçEQHN¹k½T™šãðþW¹áæÛÝÂÖöNÞ|9EMMŒp8Œ,ËóL°È.áÛYÈHgs.³pÂ$¦á09Æ+ºXŸÄ‡:¨+Š¢Éäøü³‡ùµÜAû†› Ôw£#ÌÌe:Û‡)HlèYA_«Ö¬çÈþ}ÜpËm¤SsÄëéèYá·÷L4°mç$µ$S)’É9FFFÉf³n˜Ìôô4Œ/V1ÎÎÎòòÞ½¼ÿýï/:#¼gJéy´«`‘×b­ 'Ø*àòÞ3Êãméõ+FY J\H€‚ J¡ˆi/^¼Ÿ-”. ßYhô2o»¨OW%8¯DwÕÙ²àa·…ã´ o>7#¿Ã€¢6½ôXèWJÝëü¾:g¥!á,È6_d˜¢þ,èSIšâàØÊpw•Poì¢uà…ã]°y éQIUmãÏ௮ ËÊ&·u^U‹Ca~êW?Yv¯uô¬çäÁWÝCζqòÙ‰ F¯ ÐÔÚ^`›;}ìmZÚW¹Ÿ ö ÝÛ4M_y6“æØ×\`ÇCщ!,'ñˆÅ8üæK¬Ù¸ ÇÖ¹û®J2¬rª¬«Lêêµ, U-d„³Ó“ .îÞ2Ð{ž‹§ºˆ7ŽK~4u=6Kõcfj‚Co¾Œ¦e¹ÿƒ?î~~ÏC?ÆËO}iž¦R‘  ôú]ו`SÐâõ·Î“‹·¢Ï3 /ópT¡ÅÙ%\‰yþ2SœÐËeYF–$ú’süë çùÿnú0Ùl–+CCØ‚5d¦úYÑœàøÉs´´¯$QWÏ•þ>šZ8uä0M+;@Vinnfû»èííenx˜éé7ÐAÔ™™™¡¥¥…D"Áìì¬+z¡ªª¼üòËÜyçn8…íã!”„G\¨![z,rÕfÅjà³JaÄ•€3ª´!®n »ìçÞ¿‹oÅíyŸ/§’³+¸Ó—Ú€~*G¿~.úž¼·~o»¥ÆUü¹›U9ÜPï­µÜÜ_ªÝâwK­£jhU†®ÔÚ¯2O rŸ à M”,UV¬ZçJN?œPŠKçN<ÛÐÜFGÏÆ‚Њ¡¾ó¾X¤~ôJ$466ÒÒÒBss3 $ —‰2ÿ«EQÂá0Uá—Ÿ)øÎË«Uy/¸°Îb[–Eçê ÏŽ ºcó«/RWWGcc#MMM466R[[K$)Peç/c…ã%‘ššzÏgfê*þl,^ËÚ-7xt–š§ÿÛÖÕrw\$<£³aû6‚…¦é˜¦U þôÛ«^Æç0=‡Ñ8¥£buÔ¬©tÛ2yó7øÂçþ‰‰yiÍ2 ­«IÎÍ iV¯HpöÄ1ÖnÞÊP/5‰8ãã£ì{éEÚÚW°fÝz¦&§˜gvv–drŽt:]ÀäÒé4³³³455H´Îs†a0;;˾}û*îQïçåxÍ;)‹ôµ´åð9ýw¥§ÔáZޱK&ÅXœ•ÉJý.Çø*õÝïð¬ÄðË|W# ùõ§p?&TÍüùѾÒüûÑ«Ô"¯öRîÒV‰WÂsõëc5¶fËBÓ4ÚºW¨Ü޾ýz`³eç¹µ·ÓÚÞé>ÛÖ¹š¡ÞÓctÜ/9ÆÍwÜ_Ї=ïy`ZÔ‰±«„é …ˆD"„B¡«&‡ùøÛJ— yàâiΞ<ÌZ´ÛB º¼Dè§q0 ƒx}3±xmÁ³Ã½Wƒó}Š¢(n, ZÎGèÂwƒ%¢ì¾ï³Üç‘ ×n¹‘¹é Ò³ã¾ôñ®…M«kÙi§ÈZ4ïØIœ bœë#™œËË‘>Ù5¼}ó»P;ø£ÞL†a¸ëÊæ™gعs'uuuX¶A¬®™ú¶.Ž¿FK¹¾Q2™ ]=ìýÎwXÙÕÉÌÜ ÌysS.—uwœ¯7k&“qÕ£ÍÍÍŒŽŽH…3”$‰—_~™;†Ïï )‡\jÏ.†YV-–“2ü‰âŽ~‡„wÀ¥ÿRÁÊ~ÿW’ŽJ¨¥²6øÝÌJ9xÛ®Ä4K1+? µ)%-{ëðcñxýÆèǘüúWŽV•˜z¹ïJÍcñZ)'ÑûÕ_L?ɾ-Õ'Ç;¹ÔZrœzÖ_uù?~ð Ny“ó'rþäAÎ8Àù9}d?ö½XèˆÒÔJ(_€7©ª*’(pùÒ¹’{¸ïÂ)‚Á`I|Ñ·äy×|ùÅQ§.Ø;,ÜK²,‡©©©áоÉfÒU_DK}ïöHùöÝw/P]öŸ?Y2˜ÞÑž9¨%Þ±Ó£Ôz „ÃaF‡zé¿x¶àûuÛnF7Ìä—âuÕÖæ–Hãò$Ñ•+ÁÒˆÉ6ëWµrã†U¬[ÙH4@%$ÚÓG‡!¯K¯ÐËl¼N*ŽCÎðð0‡çaø$QBÓrtn¼ËÀ2èn óÚwŸGU`ΠaÒºz šcc£ %gÛv¥tÇá'N355E,£¥¥eGk.—ò,†††8qâD¡‡GÛàÇ_J]´‹÷ìu³–òfôû¿š ÞüeŽØOW ŠÛ×u½¤Š¤¬7h‰ pŒÒå$+I’ÜQN­Wб”º¥—SgV{ 8Ž"nW1úK˜( K"ºaù^fŠ™H)5gñ»Ží ¹Rº¤J)œÃ¡øµß%£ÜE¢œ§n9•­·8(.Žó@1Ýr¹uÍíNƒ}çhhh »ïضM6›et°—l&] RllëdèÒI7#€ƒÑ é=’•]k|m~“£CÄk®"ª”“jmlWÍVLgÏ–{ß±]F"r¹I½ñrtZ½‚íâù3B¢¹£‡îõÛ8ʼðÔW‰D". —_ßœ,ÅÌÏ›[Я5X’$içØ×èè¾êð­I°vënÎ~ÍÍQèU¹{umïÂ=k°ôVFB’£Äƒ2ë: %êãaŽíã\ß4Í ÈGO{ë*Îë蜟ÎÙãýßaœÎZÉf³=z”›nºiþ3hM-wqðñB›š¡ÉÈõ¿Íª­70—UÀÔŒŽŽ‹ÅˆF£LOO{œƒ®Jê‚ ÉdÜöêêê$‰ÙÙÙæìôëÍ7ßd÷îÝØ¶…>¯6 H’è}JšÊiw®9#¬t;.g++¥nEÑ“imm-°{T²ë”rõw~úúûYÕÙé›—­Ú:ï3™ SSS´··»},~ÞË… ʪêªU —R}–rN©tû›‰9‘KÃA2n𾓮Ê,Ób}WŒ›w´¡¥qX3™ 333¬X±Â]ø¥h˜ß<ÇŽ#“ÉTÆß,r0„Ò¦¦i²bÅ 6mÚäª}JÙr«¹Vc§¬Tn½çe¿íÙGinïrÿï¿tÁ6I$ê]`ig އæÉ#ûÙ±û.÷ž Ûè=s¸ Õ“#^é¿°€q ô/ð-uùpJi±ØËôòåËLOO åíŽÑ´z;u­]Ü÷›¿Ä+_ûWNNŽ’ÔƒÈ¢óë+›Í2>>N"‘`rr’L&ãÔ;Z çLðö3‘H‹Å\˜8‡IG£Q>ÌK/½D¼¶Ž±™W®\ÁȦXÙÖD]m¼$C ¬ZµÊÍбX)pIŒ°ø†ïkýê¼G›] Aùüš|:.É8üìb~RC1s0Íò¶¦âwº„_­ÛÛÇRLË0 Ž;Æ–-[hhhÈ{´‚È’ˆièh†‰·äUÏFÛ#˜™™áí·ßæ¹çžãÞ{ï½P…ÃV9û`µ‰ƒ—²ñ ËbÕêWá…ÓyÇ’@À×v‡ê;_ÀÕ@†Ö²s“Z•|r‘Á¾ ô¬ßRÐîå g\oQ¿‹© .n¦aº ÉÅïzëõªH_áI>ôS¿º€±x÷£(-äÌñCyëL-Cmm­‹ÇꬩÅÎONË]½‹þæGšŒF£¼ñâÓŒòé˜ö¿øxÁù¨*"k¬QŒË—‘Ú[±³3ØAK³±ÒB(€`ˆe‘ư‰Ô@&JCM#]- §{§è¿’$•ä™,>kmÛÂ4ó1ß^Æée„ŒÓÐÐà:\‚q~ô÷?Cgk3ßùÌÿ@Ž7cçòNBΙ077‡¢(ÄãqR©T²Œc+ôJjÎ¥5»yk5ª#] pòÒ5m464°iõv ÓœÇõñ+°abr‚çŸÿ.6¬gýúõär¹E ïØYf``€ÆÆFB¡Ðµ”$I  …¨««+«¶òn†R‡Ž£ëv9A @€ýTX¥µ½Dò¦ôp²h8ª ?µ¬ÓÇRÙl˲‡Ãój1Ão¾É¹ÞVoÝIw½Ê…Á Ö®]‹, v>÷â+?NÓ ·°¶9JZÓQË01-+ï/åܶe!ˆ"¶ib˜Šª `£i:‚( J|÷™Géܼ‡•µ.š»KY`6m28 ¦m#«!ž{ô_âÇ?ö ô\Í Ä9{%Å-[ErºUÒpí3¿Å'Š"sss¼öÚk|ðƒdÅŠ®Q]V/ä}›žwñÀm;æë´ÑuýqO ÷rðx/wÜs'2Ø&ºç¦‹Å¸çž{xüñÇyóÍ7¹ãŽ;®Î4•nÊ™œÿ%Iâò¥3ô^8i˜ØØy2q•ÒkáØwf§'ysïw°L Q¿ÒO4öµÙ9j¸©©)ö¿ò,Z.ë d’sx–ޤ 9sì-F¯  ú¼JNevjÔm§x|¢(¢eÓ¼õÊsä´Ü Â˼=PVdDájÊ©äô$û÷>‹išyfŽ]°—œGÓÓÓì}ö1„ùUUINO¸ÌY’¤Â~˜‚(¸¹'®u^kpxÿ^Âá0±XŒšÚZ÷ õ2¬Ë—ÎÐwáL^ZqæÇarK¢„¢*¤æfæ¥Ùäü\麎$æó£:ª@Q ‡ÃärSì}ö1DQÆÆvç µÜymL˜ÇN ëY$cL!/ Ê&fVC$0 ŠeS4Zã&’e¡ˆõ‘ Ï ŒNÎGózö¸×YÅ´`çÆÎ_žd&©!‰ …t:Íðð0²œÏ' …0 ËhÀ²LºZâÌJA¦røJ¡³³³®´ïx1{m…^µ­óY6›u¨œócff†h4ÊÑg¸çGHgu¦S+ÚÛ‰×Ä*ò¤©©i¾ùo I«W¯öÍiy]T£Š¢ðÖ[o‘Íf¹ýöÛikk+ÔdYæâÅ‹œî¼y Á`°ÐÁ¾ê­iµµµy4£©)×,µØXÃÅ'æ¿ ÔÖÖ²{÷nV­ZUÀ#h `×®]lݺµêp ?LÓ4Ù±c—.]â†n ‹¹ Ëï EEUÊ"_˜¦Icc#Û·o§¿¿ŸÍ›7»„®6öÑïÀt’•æ% Ñ6xñÛߡ妇XYcóæä0‡†yÿÏ‚Ìkÿ—“SÄ‚ ~ñ£?˱'þ•iÍâ}?|wܱ+5††käßÿÌ/òŸÿýɇùÒW¿Ãso¿Í¿ðïh˜|~îk`†ù³ÿþ)þúÏþŠ+§Žðú o²ç®I&Sy5ݼH•󇲄Ó9äM ]cåÚm„¢1DË" JH²TVŠªæÂät@ÀÍîüè†À¯þ—¿àé/ÿ-¿ÿ¿Cc4È]?ù+üÌûvqà¥GÉÉtm[ ãÛ\Î*¬N´bjf>æH0±m ËÊÛ«½êòrö•bËñ–²m-Æégs*N/òÐôÎÅ—“b§ïç@`A_¼ÌÉÛŽs89mT£Zö¶ç0£â1÷× pÚ(¶:ÌÈñA(Zäg®ð»¨T²– ‡qêu˜·íbš{Õ|ÅsëÐ[Aͤ1³L]@Ï‚¤™ˆ¦–†edAÈÓÅÌ’…`Èv’ÑØûvþ¡Üÿ¤>ý$Ùl µAVg ÎÐ I¾7ØÕÕ5è2G¸¦®Ö!Nög‘Ä«k8›ÍÑÑÙÁöí[©««cÍêZ[[©mná­/ýç¿ú´Gä×sßýïåù a2IYE)¼Ð†áJ…ÞxÂbIÕ‘yq$Açò–Édèë룻»UU¸eÇžßwœï¾~˜ÛoÜH$ñÕx%s?ǽë":Z¿~=­­­444,°†AKK ?üÃ?LgggÁ-¡T€{©çÿ@ À<@$)p6)´†qñbož ”!ŠalÙ²…µk×ú&ã¬Xî÷œs TYЈ$ZùÝOŒ/üù§xfß"±ZÖÞ¶–çý¹“‡¸éÞGørˆšpA PÛÜÊþçÕýGyßÍЭ$µ51’H(G–$5Êmk7óݯý=Xiî¹ûŽí}œÿòÇÆé“ƒÜû¾û¹å¶C„[;Ø´¹IÈßN ba‘¶ºa [´yü/ÿ‰‘þóüî?>K #Í¢ÈRÞaÁ.óWé€w‘\.ç2BQD ÑÊòØ7¾BZR×ÜÎÝ›×óͯ~%;MæüœïS˜5M.ŽLV6ïþ‡.}‹ëW±²%¢¥«7Í\.ïà ªjUÁ÷¥ÂRñŽå.lŽôPйV®2ˆ¼Øî]j/•Š_-.á—¡¾:’Ÿª¸¨E5çÅc-åí] ]‹ÕÅÕ2B?‡ºJaZ~¦žbZK¢€ldÈX FÌHš…¨jØFœ~:–n‚``Û9¦/BSNQ[{öøY¤t†P&˪&›€˜£o¦“2V´úúúS ©!N{ÏÒJ#7lZÃíÛ»9}á û…êtâ“?už¦Ö&EF”$¢a™Öú‰ˆ |ì÷þ”ôÜ,u˜:¤³!Ѫ¬cÙT‹S Á¶mZZZ8wîk×®uÕa Š*7Ý´‹á‰9~è'·Y³y“¹0›ÞûûÜt¡—p>Ž$Ëx 0 ³ê érO pU¥È`0H<祗^r÷~ã%™€ª¹ržïôZ’¿Ô’³m’vÞK»8G;ؘ†ÍZEaõÊ­èVi\¿`0Hssó5…ß´aÃ.\¸À‹/¾èÚPËÙÞScýÖ­[‰Çã lÕÀ3•:нåSŸúTY©§œÔQ‰‰-EZYì^«dzXJ+Õd ©F*/—Ÿ³šK@¥Ì$åú¶<áò’¬Å¥§ÿCó¨M†²©cf Œ¹Š$a" ("ˆù !ga M¼ÈÙ¾ïMü$ºÛ Ø_B²%²HHUdeFo!\߃m¤ÀJÑX¡±¡Ž`P ‹³bÅ y“‡•C°mƒ$§Ç9ö¿þŒúñaêdÐ' $ DäHˆè®vænÝÎY{%éihØÆ0d×ùÊ{ÖÕÕÕa“““¾^Ô^­^1ŽªmÛô÷÷™»Úê#ØÝXFŽË—/»uNOOÓÛÛKCC===%ãÖ¯‹³Lµ6ƒJ7=ï¡ZìÕU­gÁmTlÀ4­²^5õy=Þ§Ra–eÑÕÕESSétºlß«S§TfåÔE¾Òóà².#¼šgÏdY¢&ž˜ÏMh—TiyéQ‰™Ù¶Íš5kX¹r%333¾HK)‚ ¸1d^ˆ¾rjÌjÕ^ÕH$Õ0¡jìàÕ"Uk³´ËÌ[%ÏçÅH­Õ8UëpV­ö¨Ò”S[–W%ˆÅjp%(k›C7Ñ5ÕlC³5Q°r …DDÙÆVm¬t¾¯Q™‘‰ï23¶‡Öö]ˆÙ7IH—P¤ Q%Eƒ2J0›âÜäId¹XmˆÖ–•ÔÕÆÝt]¦k·$U pô_þ‘Ðä [WPÁj<Ž¡)*³¡ƒB‚¡‰Y"Q]†¦ªêÜZÓ4I$èºÎÜÜ\Áyé•Ùƒ§:33Ñ#GÐZó¶Ä£G|FY¿~=U%l¸¦6Âj¼Jý>óSMùÙßsÛóS÷˜U,Üj2"·á=hýžuÔ¬N|U¥›åbl6‹Ý„ÕÚY|/óqF¥â½z¿¹ôkß ´nll¬Êy¤’ý©x^üâýÔ}å2^Tºd”J³UI²,–Q*ÃI%U]©:Ê9ÈTZëÕ0ÕjÆ®•=®ÜSIåºX–ßÞ($_mhß÷Á†nìHkf-+È (&ö|`½ VN@ ÙH ئh‚™µ ˆí¡QN÷?C®å׉Ô=@hòå ¶8‡‰)!Ìܺ:Èúˆšg–m»©LÓ¶òˆ9`óoíeÜœEÝu½É6ÍĘRfTl[B–T¢Aˆ×ÈDÂy PÉÕÈ8 îCtB"‘H>lkÞ‰ÅqHtöªb\4 ÎÎNî¸ãŽª/ÂÞs÷jÖÞQbÞÅ4^ SXŒJ¨š[nµj›ÅlÖJî÷^{f9ÀçÅäÒ«ÆQ¢[U5‡—ߦ’ýÔÏé©ÔåËW ¬ÚKÄb°d+1£Jš‚rŒ©Z'”J’S9›ÚböH%¯ËJ}ó³³VÒJ¼“ý_M*´J »Òe³œí±’é¤5©÷™p]'´ÔaŒM!j ¥A‰ØÂ–ncë` ä¥Â €¨ȶm X9›†p€ú©½L ÜAíæ;ˆéD‚çÑÔfÚ&¢ØØ+zçNS‘C˜¦må¡a X¦…iZÈj€¾³Çxú•£Ì™ „É,¢ !I"Š,#Ë6¡H$¬ ªD£A‚Á<t¤@áËÈ…Bðv¹\Ž™™|ÒÞD"Qkému‡L&CMMoÄb5×Õk´ZõD5M¹ÛôbÔ†Õ´QÊÑ¥””TÎ_ΞT)sDµy󪑸Ëå9,õ]¥ì¥TyÕ8”º|T;¦J9&KIVÕ^ˆ*IÀKÉ7YÎøZ©p1*ºjöÐb$¡J k1¡KÁw¬&We¥úË]þª‘^Ë… T2Q,v®Âñ„·n!yð’i“Mƒ’PklDYÀÌÚÈi1(!äI‘‚` "+ÃIŽ«½Œ?£ëú’ÀÖå¥,' uáß’¹|¯´û½8ÆïWZ\«~_Ïñ/6Ö÷Ë:¾í¾[tÿ~*RÃF”Õ­¤\D Úd³ ÌÚ(QÂfÎF èI!0Ÿ" )hcå,M¤5l‘ûGê 1ÀLZŠ€P$›ÚH€¡Þ‹ Ÿ9Dm×fôlDQ"75Gÿ³ßbR#©yu§Ãü;Ÿ£þôJy:Tq"c¸ b☃TUehhˆ .HŽ@øÄÄ333n¾FÇ#¿»»Û¶^Ò¹æØ l‹-‹v–ɃÑfø…_øÜÐ/ n5úÜÅÞÔ¯•DQÉcn)·¥Øjó}5ê™J}|'ÒÜRÇ^R9ufµô_ªv±óU®/‹õ,­–6×JðØù-¥^_lß+IÁïtM•Úã•læ•ú¼Ø=U B–D~ã}+íÅ0lÄœ@6m£Ì@$ `¶œÏj¦òL;ïQ*…ÀÔl‚‚ÈÆ& ©¦[ c&¯€,"Ê"’!E ^±¹|ðyÔ¦.lCÏ{K6§¾üU"jŠ)e%¡€åJΗ úýí0/ïïÄ;èN###¼ð ®¤è¼SÍd^5 …H$466Ò××ǃ>¸ä˦¦i|ä#áþèÈår×z;‹Å˜e``ÀýÞñ”,x§FL?b8·Jºâr·‡ÅziV{€½“ñUŠá*WÿR6ªñâ[*zŠs)*eg]ʼ” &_J]ÕÄÏ-Åã±RœÜRÖËR×H¥ø½R{u1·qo|X¥ö«Y{ÕœÕÄû•jçzì¯tTn>u\âÇ;›Éõ]A”riP’jÄFŽ ó¡Ú”E°A„¼yQ9(`Îiä¢ë™®}[Q§ž&8ð8¢b( ‹y©ðJïF½IÝÖ[°L‹O>qêâûoen‚Á«*P‡Ùyí€^U¨_˜„#üèºîâŒòµ¯}ÉÉI7£Š×öèµE"‘555D£Q<Èàà`UsWj}8˜·×•z;ád ¸ë®»øÔ§>ECCŠ¢ðÌ3Ï066†ªª<úè£.üU¥„¨‹¹%Z–źuë¸÷Þ{Ù»w/Ç÷ͳ¶Ï®rmmÚ´‰;çž{ŽsçÎ W’<ýÆéw0˜¦É¦M›¸ë®»xî¹ç8{öìË¥àV˜wwwó¾÷½×^{#GŽ`1Vòà­ogõõõ<òÈ#\¼x‘—^z©$ q9 £Üeæá‡&ðo|Ã0 0.Ëüåhgš&7Üp7ß|3O?ý4}}}î/Ö£ÙyÇ4Mb±úЇåÛßþ¶/.iµa NÈŠ“†ìÉ'Ÿ¤¿¿ß]÷ÕÔSÃ+IüàE‘G}tGo%ÉÐùÌ4Mš››ùà?ÈéÓ§yå•W|÷H%éÐ4Mw_¿øâ‹œù$—/_^å£Ü:Ú±c·Þz+Ï<ó /^\@‡W ð¾ŸÜFðÒ0’f#HIZ¨!‘°* ˜`llM@ ØHÛšG¯RÁDŘi‘Lz”\Ý:šÌvÔ¹‹H!ÁH6 A‰ýÏ3-(Lž½@ò´u&°£˜(AÙer3t~;Ÿ{™—‰Ë ƒÐ4ÍÅ =uêO<ñ“““.p†Ãå•<ƒÁ ápØÍ’233ƒ(ŠÜvÛmlÚ´‰Ç{Œ‘‘‘óÿÐC‡ùú׿^àaºÔ<„KRúýß}÷±cÇž{î9vîÜÉÇ?þq÷™Ó§OsìØ±ˆ×¢lܸ‘?ýÓ?åWõW9räÈuiÃ)»víâÓŸþ4}}}œ>}úºµuã7òéOšþþ~N:u]ÚY»v-Ÿþô§ùÄ'>ÁÁƒ¯yñxœ?ýÓ?å‹_ü"Ï?ÿü5ïÿÇ?þqÂá0_úÒ—®ißï¼óNþËù/?~œ‹/^“ºEáOþäOØ»w/O>ùä5©óî»ïæSŸú‡æÒ¥Kï¨NÃ0øíßþm¾ô¥/½£~Õ××ó§ú§|æ3Ÿá¥—^Zr¿¶nÝʧ?ýi>úÑ.ùì¸ãŽ;øÃ?üCŽ;¶¤¹¼ûî»ùÝßý]:Dooï¢Þß³gŸþô§9wîçÎ[ð®¦i[¬­Ê«J ƒÌÎÎrçwH„• мëºÎÚµk1 ƒX,V°v«‰1ô&{]¿~=Ùl–•+W.Ø•T›ºººÈf³¬]»¶ä\–Ú'º®ÓÙÙI:fýúõÚ¯J²aôôôÍf}Ï>÷y¦6‡‰ô‘Ëê’D:i£óX£¢ ¢h’®ÛƒÙºƒ 9A`äÛ颡ɷ8y@@ 'P§OÐl ¥Á $×Þ…`É(o¿@hjQ–‰ªš¢2odäxšx4¼ W #é9鑜ÿ½v=‡¾©TŠË—/sêÔ)N:E2™tÕŽýÏË\½’¥÷G›ÓÐÐÀwÜa´µµ‘J¥\ØDgî•s8æÂ… %Óæ½« ÛÞ2>>ÎÔÔÑhÔMÐè$Šôf޾V΂Óu·Þz‹ááá‚6–âôQîI’Èf³¼ñÆLLL¸H ‹qè)§þõ.°\.Ç›o¾ÉøøxIº-Æßo,¦irðàAªž›rL½Ø&(IGŽáäÉ“‹š—J¶+çîíí¥¯¯oA¢ÙjçØ¯I’H¥R¼þúëÌÌÌ”œãjQhœ5ª( 'NœàèÑ£ÔëÜâe8N?çææÌßbvFxéÒ%Î;ç¢ú/Æ)ÄK?Q9rägÏž-»GÊS’$4Mã­·Þbdd¤êzŠ3§;4š-»ýþ—$‰d2É믿N2™,èC¥½g™L†7Þxƒééé’m ‚Àþ>‘÷ݶÜso")"6³S6²b0 Rñ&w’#éfEünB}b‰ZÓ˜CÏIKÔMÄ„DN™]ó0I¥Û2©ÛÕŒ5ðÐ2RÆ"¶g-ŸÙ‘Þþ9šë©­­¥¶¶Öe|^æçU…†A6›%™L266Æ•+W`||Ü=çU¨³¼a1ô:Û8m:’¢®ëLOOóꫯ’Ëå èçЮ¯¯·ß~{Îñ;ñѸ&ŒÐÉ|éÒ%.\¸à¦h ƒ=z”^xẩ,7oÞÌ믿ÎéÓ§¹ž¥¦¦†•+WòꫯÒÛÛ{ÝÚ‰F£tvvòꫯréÒ¥ëÒF.—cÇŽìÛ·ãÇ_óúÛÛÛyà8|øðu™û|àœ;wŽï|ç;×´ÞÖÖVâñ8{÷îehhèšÔ™H$xøá‡9vìØ5£ÅŠ+ˆD"¼üòË ¿ãú~øaΞ=˳Ï>ûŽêéééá¾ûîãàÁƒ¼üòËK®G’$Ö¯_Ï믿ÎÙ³g—<—‰DbÉs¹råJ"‘/½ô###‹V777³wï^._¾\öÙÁ›»ùèö5䎜CH(¤R MÚÔÚã’ŠeA{K33é,#2­,“ õaÒö–.‘™±H a&¬(ÍA…tJcÆ£I1²ÓcÔmí♤ÈñyçÆäÜLþðŸ—â¼¶Aoâ\Ç&“ɸŽWíï\ì¼ÚÞäÊÅ’ óŒÃ¬R©o½õVAŽÙM›6ÑÕÕÅ /¼Àôôôš=ôÐCéÿÞ ó[2#,]__϶mÛÜÁ9NJ çw¥[zµÞÎmÁA=Üß•¤Žrê(¿>jšæB9¢¿7w5ê¸jn蚦ŒÉIô[IµTj¹¸p8ì&Àôf2¯„êPÉcV×uB¡0ëÌ}%ZTuå|ï@9WJ¬$ •Z_γ^Ú;ýõ›ãj$DïMÚ¡…ߺ©ÆKµxLš¦ }8k¤Ú¹òþï¨üœºœµV /µÜ~òîÇây¯Æ!ªÔøÊÕSJ•\n.«‘î÷5æ÷~©þ8t(~·”)áÍÃô¬ÜÊÝ+È^D®‘™œ²‘% +{™¡Ó‡1{¶NÍ œ{‹Œm …£hÝBmêT?³¯=F:•#g';{„@¬YqåèȃãÄ»š8PSÏW¿yhÁÜ:9S©TÙ3ÓkK,ƒpn{$Âr’ W¼té’›aÞ;wý`n/„¤ƒ^S ±†õ;f„¥`…Þ~ûm.^¼HOOuuu <8«±Ï•‹ó+…¯iš¦Ëtý¢ËÁó,‡Ô1{= «òZll•£*ðŽ©&WM÷S_.e-ø»8®h1ÀÕåÖfñW›»°Ræ”b-B9‰¢Tª£r}%U_)õ]±ÄúN¡ÎеåR+•[¹½¶Ø3©šTZ¥.5Åû°’¹Ãû®7ùl5kÒûy{ÏÍüÏÇ¿ËûîÜEüô%&†F¨ ‚©ˆ‚€a‹ˆZ’™W¿Í\(BXK5t $S@ji"Ù³‚o_˜eß³(.,ÅäûÛa¦^ Q¯$YJUjÛ6™L†{·ß~»¤É«Ôùäõ2½`ùï81oq,Š·8ÙÈ5M«ˆX®?æá${uÚô" ,¹£¦ã¸ø:‹Ü¯­jð«±'y±[½ÞTåR •‹ñ*¦§Ý–"Y–:u]/py.7÷å¦Jµïl.o½ÕÒ§’¤$ËrÙ9.§ðc-¼ŽÕ†'”Z÷~k±Zõc);˜¶PIâ-×G]× œJœù©$AùÙ½{Àñ¬ZÎû¿—Fº®/*äÈy¿¸å.×ÅëÈy×oú­+g¯'Ó6¿÷ùýìÞ¶’‡nÞJýÌ4â•1r³t  ‚¦N 5M",¨«Ãjª#S“àåÁ$ûŸïcz:M$èþãgë+õL¹wŠ™ ß‚„-ÈLMM30p™;v¸˜¤¥Îl'$îüÖ¥w-eÝ¿#FXIõèÆa~¢(²råJÖ¯_ïëµõNŠ éîîvc¶–:†rßëºÎÊ•+ ƒ¬^½ÚEi¯¤âªVzò¶ÓÙÙI0¤§§ÇϹ–·]×éîî&°jÕ*2™LÕsS ÂC8fÅŠKšûrÁÒ‚ PSSC]]›7ovêï”Fº®³bÅ B¡kÖ¬!‰¸*Ã¥ÖíÔ‡B!š››}i±Øúu]§½½Ýíg,+ˆq[Ì:´, Y–]znÙ²¥ª¼ ¥úµzõj‚Á íííKÞóÞ}ÝÕÕå2ýÅî×ööv‚Á kÖ¬!–•õëC[[›Kãšššªß÷¶ÝÓÓãæî«dVr€$I¢½½d2ÉŒ¦ò/'t nÚÖÉ É ”I"¤4´œQÑ‚\6D^=›âô[ý$gÓ(²@4(©Y*§î¬$–ò]àU*JX(ÄTKOb…Bôôô°bÅ lÛ¦µµ•5kÖ,ˆ6 ƒ††k×®ezzÚuxrÖf4%N_s©ð{:ð;Î-À¹…‰¢Hkk+6l(«3_Š*Æ0 —9uttèå˩ت ¨õC|q6FWWáp¸ê`áJã(S[[áp˜U«V¹9Àë8SNªpè …èèèpu<”r‹7 ƒÖÖVB¡ïÜ/VBö+555ÔÖÖº¨地ªUõêºNKK ‘H„îînÑb©—g_$ "‘ÍÍÍlܸ±¤7uµój---„Ãaº»»©­­]DñÅB’$b±uuu%éYMß¼û±­­ÍwÏ;þ®´Pâòà0úU«V¹  ‹¹ÈÏe"‘( {%{¯®ë477»4.ç_\Ÿ3?Nÿ#‘HÁü”rtrÞ¦¦&4M+P3žš²8fØv‰,e†ˆ>Fòô4“Sf“*"X¡¶m!bccW4T’+I„Wíƒ b y¸€lÒ§=6EúhûùR˃>ÈÁƒß1={zz¸çž{xá…xã7| ‰D"ÌÍÍ-PwyK.—£§§‡'žx‚þþþ“¹lll\2ÔBßúÖ·«ú½‘‘V¯^Íw¿û]_0x6­€-+¢!dLA >& ´èsL¤Ld‚dtÓÀ¶ðÛ¥aJý]N"DD E´ˆ(õÁ9BsÄAU$hMÌpSx†¤Ölj¯ðÊK8s¾Ï—´¶¶òØc‘Éd|Ï=÷”¼Ø,6vpÉa)ÑÞ‘ ;¡7ø(ð"¬6÷\¹8®\.çaF"ß`åjЫÓ4Í­;/t¯VÕUI òkÇ«ž«6 ¾œ¬iš;ápØ›jÓUrnr¢d!¿Àôjóû•»ˆ9L•âþJÙ»Š¿Ëårîí4399Y1ˆºR¿€z˲ªH¨Fê.îçôôtÁÞªv}x%BÛ¶]d¯ª¹ÚÜ„Åó^ó cñ ì/Çнuƒt,F5^ïYîìô~nY™LÆ=äë£6?q‹ÈoÉh0™Ì+;U "AIQ´EQ˜Ï$!HØHä¨QsH²HÖTHëÒ†JÖ1, Ó±çû*‰ù\¶½ö–m# ùúÑB• B²IHшȪ¤‘Ë鈂M@("AU$¢B$á€@8ó~3duH„->ýã Gmþôq“ƒ½óòkðw)Z— åq¡“ãºÛ‹c켩;ü”J¨1¥Æru¥vüÚ«;Wî°(n«R˜H%ÏT?&ã´³Ô$±åÆí¥¯_åÞ«æðð.P?†R.¾¬œ&À[·÷€«6œ¤R˜A%Їr`•b‹iáw`—»\ù1Ûr—Œjì¡~ÌËÏ^Tn}”ÒN'¦µ,‹X,F p7œÛ~$avvvAöR’J‘âþz%ÛjsHÓ¥Ü^¨´ÎŠë¯tÁpÒ ¶ÎíùÄC ² cs69#/ÉÙ€ª¥<“Ó¶1-ÐMPD(ŸñÞ´4l;‡iAÖHë2MD3%L$&,²º:ïe›Ÿ?XȦ½ÖB!¤˜D&a²…” ‘%‘\@ddÖd2„šg‚‘€@P…dr:͘IÛ¬nøúo*|é5‹ÿþ„Á¸~ÕçÄÏs¿Òùë ¯ðJ×M5ê—Z×u©ÔÍÚ –ÃDô‹á*MUοçŒrª—j$Ír‹½Ü RìÚb‚ÙË!ŠTcï­&|¢}ª=+Á¬U:¼+]^*ÝäCZ Ê«””íg«('­/FSPíÜ—r{'°Õε_püÜÜ™L†`0è¦J&“˜Ä•æ×AW¯\|N,fÍ–ÒÄT ©¦2“_ßMÓ$=v–¿øð;W›µ™IÛèF^}˜ÊÚX–M]D «çU—¶ecZš‘W•˜´$¢œ‘ÿÞ´tl,SÇAÁæÂˆÍäL¾é¢9O%mê2- E„€,TòRŸ*$åUžuQÈê6)ÍA˜gy†P@U ¬ „U˜´0mlI˜Ëæ¥ÎŸ¹]äžÍ ?þ×yi®”3ŒC'o,q©³ú*S¯Ò?ãZؽ€«Õ,êr·¥ÅÜp«5Ž–ƒ=«öp¨7Ô¯o•°ðJˆ¥ÍrÈåÆ^ŽûÆË©S«¥Uµã,3Vi URó–¢}5rl5–Rý­&®Ô:¯ _ ‚MúËç¦]-¢J¥ñ‹¢ÈÔÔûöí#›Í¤»òJƒ‹i¿’ ¸”Vixÿ®t€–Bÿ)÷n%óEW|‚ÿ°ù vtšŒÍÚ$³ÊÂLÚf"i‘ÖmÚjóYìUT9o#”ç¥3lÐL¨ ´× Dƒù¿cAH@ ¤‚* H’@@˜H \™)­°Á¹†-dQ@‘ó6¿àËDJ$3Ik6Ó)›ÑY›ÁI›Ã}©Ü»29æÕœ6YÃF7ó’—,‚a™aèhÈ«%³š‚í2LÛÎ3FI蟉a Ie¡&ÈÛ?EQЄ('†æ¸¹ÛÛF7Wd°‰óªÚS£Q.Mdé©ÏÒÓ”w°E²±í<ì Ld#|m¿Mý± +ëmZâ€e ŒÎYÈÍ«©m2Ý3×Ñ4:L±˜—,%Îúš0ÂržzÎBr¸÷¦M› CµvªJ@»¦i²mÛ6‰·Ür «V­r=V«•Šª…w3 ƒ7RWWÇm·Ýƺuë¸}û¡×;PAåp.Kµsûí·³nݺt«dG­d3uÚH$ìÙ³‡•+W–mÃ+ÕT’ªœ›sKK 555ìØ±cAõJÒe9Z9Ÿ544°fÍî»ï¾²R¼³«ñ`5 ƒuëÖÑÐÐÀí·ßÎÔÔÔ‚¹«Všð¦‹ŠÇãÄãq¶nÝê†+”’ýaü²Þ¯Y³†ÆÆFî¸ã¦¦¦|ç¯+‡6uuu¬[·Žûï¿¿â-µÞœ@øššvîÜI,«8ï~ç‰alݺ•ÚÚZn¹åº»» æ¡Ôº+¶µ­[·Î¥ÑäädA_*Íiš¬Y³†¦¦&î¼óÎÏU1&¦®ë¬]»Öõ”˜˜(xΫQr’ÞjšF6›åß}+@sm€‘¡^ff“Ìf`&c“ÑêÂ&g‡3Ô-¦S“I›éL¥¦²*}cFmR9ËS=ͦe“ÓòêR}>¨Ð´áâL–!‘ œ‹í˜ŽSS0db"ÁþÞ$›ZsÔEóuÙv^:7!ðÚùpM×y{ Å‘+Ñ€EMÐ"¬B0 Et!BFYIkë$Ùl–ÁœÌ•qyZvÁv´®¦¾¾žn¸Ó4QUµØ;‘H”53•Ú®#,eoPUMÓ˜™™!#IÑh”—^z‰G}”ëQxàV®\ÉW¾ò•ë–ÍÝ)º®SSS×¾ô¥ªÝe9?±étzQíd³YêêêøÒ—¾ÄàààuËÝwßÍÚµkùÚ×¾V1 Þ‰W[ ¤Qgg'·ß~;O=õÔu ¨¿óÎ;Ù·oÿøÿXö9'ž-›ÍVU¯óü¿üË¿\³€úúúzî¹çž{î9¾ýío—|Ή·­¦¯‘HÃ0®Y?ï¾ûn^{íµŠô¬TÖ­[Çž={xâ‰'xóÍ7—\ÏÔÔmmm|å+_¡¯¯oIuxçr|||ÑïG£Q4Mã _ø“““ß…ÃáÅ% ñõ¯ÑÑѪÛ\»v-Mí·ñÆ©#}–$‰qàgÿÖ¤&4b`å,A¦»§ƒ¡¡!7ðÿÑ7``\¢«1¯’4l0 ¸2esô²EmsÃÐ+ȶá§Flnn&‘H033Ãp&Ãù¨å½V! 1•´ÑÍÛ·w333ãöݯΖ•[niáô™ó%iã@Ó=ûì³¾õ·ÞzkYµ¿÷2Yì³rM%ÂRÌÑIïãä¦rÄX(¥|1Ù'ŠÕÁ`ÐÍn\œ z±¶Àr1JN†úRmyë5M“M›6±sçN‚Á ccc¼òÊ+Œû¦ø)&vÚ)•%}1`Ò~@¥±xoæÜrË-ÔÔÔ077Ǿ}ûèíí-{CÏårîEÈYÞÌç•$”rðŽjÄI±ãd¨÷ §Ø³gkÖ¬AEz{{yõÕW ~ý€º”³g–S•9õ-DQ,PÑY–…ªªÜvÛmtuuaÛ6çÎcß¾}%“:€Îø‹ë¬Ö¾îÐÓ›GÎo¥7~62'³¸s§âªV}å­Ç»ªHôîWGŠ(î¯d7-¦±ÓAH$ÜqÇ477£ë:‡âèÑ£€ιäÌOñ:*¥šuÌ/D"&&&e™îînêëë±,‹ññqúúú\;³išÄbyLÖ¹¹9¦¦¦òÒ'ðæy›ýl)¯Â´È«N-ËfÕÚ¸ø¯( +V¬ cš&£££®ëH„õõõ2™ "cs F€$ ´··#Iccc.¼œiš 222‚eYÄãqzzz8|ø0cccg‰C‡ºº:b±Á`Ð ¨÷ÎU1(E)Éе%VádKôõ;|MéR­äñW.§]¥d°Åéxªñà+ÇTʹG;m•såvÔ‚·Þz+‘H€+Vpë­·ºhôÅcô3°/F×½Øø6g,årôY–E$áŽ;î ¾¾€ÚÚZn¿ývb±XAŠšRóR<7^U¥_+% .î©C^×u6lØÀöíÛQQÙ¸q£«f)§.,žãâþø¹á—&öªÈK©ð¶mÛæbJ’ÄÖ­[Ù´iÓ‚(ï»Þ~V{¡(µ‡«Íïý)µÖJ9&”K²í·‹Ç¾›e±{}q{¥<×ýö»£B¾å–[èììt/ø7ß|3ííí úë‡vTN…çÍ¡XWWçÚ#»ººØ²e Ô×׳iÓ&zzz Î UUYµj±XÌçÜÐM}>|Âi»¡¡x<Ž(Štuu¹¸ªñxœÕ«WSSSã®Ù`0HSS“{ñK½äÔÛÔÔD]]7n¤££ƒD"Ass37Üpµµµ.khh(À_]Àæ/AåæÉ/¦Û+–?¹&Œ°š0‡jôµåÐRªQÇzU²~Î;å*Åí•k«ÒækllDUU×ýW×uƒUK¾Å’H9Wðj—ú½ï«æµ¿ÖÔÔ‹ÅÜÔ0º®‹ÅˆÇãe/ ÞúýÐ9JÍw9[\ñ<:L)­AkkkA ‘иF¹µ[ ]Ça'‰õÛð­­­.2“s iii)»Vü¤ŒR±uåö“×뻨t5gà 'Vî2Wê ¬FŠòsV)7—Õ\ÂKõÁqÞqÔ¡ŽNSS“oò_ç\*%Åú!#ɲL,s÷Mkk+Á`P(D("ÐÚÚZðž$I´µµ¹ïâD¹~mµ´´P__ïŽ) º¶ÀššâñxD¦Ã½}÷CKª««£®®ÎetÁ`EQˆÅbî…ZQjjj|ȼŸ£•ñ;#­c¹Äã•bÙß#ôsáöë@5q[ÞÉYÌ!^í†ôS­-Æþ¹˜ nï;sss7B'nÊAÕ(G‹jj*y¾U›(¸ÜøA “Éà&:ùêÒétÁm·Ts©¸TrÖJ’c¥qxÿž™™)Øh’$1;;[¬ \†ûr“r—¸rN?¶m333Sp;vúZíú®Fó±˜øÏruTKZ*·]5¨‹éS9íM9§žJq³¥èjÉdÒ+gÌÍÍ•s)ɹœ# 9k7NP…@ àbo3|Ç‹¸œ†Â[êêê\©OEb±˜‹ô … Î*Çû»ØóÕ¯ÿŽƒ”mÛ„Ãa—¡É²ìÚ¾EQtÍ¥ör±V±x΋%ÑRã½ .\[FXjgsöÞˆK©…ªQYVR%8îØ¥bü™ßͬ”ZÔ/kr9ƪ( ýýý?~ܵOd2öïßO6›-Ù/oÛÅcòÛT~(•˜dñ¸ÊųɲÌôô4o¿ý6¦iº¶¸099¹À›ÒOeægYj~ªÅ×ô&þ-eR…ãÇÓßßïæåàÁƒµâ‹Xñû1íJ™»KmJGuæ÷ÜáÇv=æ8zô¨¯WrqôR—„R’i)†ïôÏOz+ QêÒêök¿€Gš/·¯ýæ X}\XÎÃ×O+â] †a°ÿ~æææ\fuæÌ.^¼¸@Íç³X­tí=àÏœ9ÃÈȈ+NMMqêÔ©'œ¨#ô«7 ¹?çÎC—2>>î2*G¢sþ/¾{Û …BœH__ß‚ž¥*INÅ6 ƒ]»v±bÅ ~øa†††|£‹oÙN¡_<šŸôk7Ýtmmm<üðà V•4·’í½õêºÎÖ­[innæÁäÂ… eÛð&].¾ùúÑÔIÌÛØØÈÝwßí&¸-—Ò§ÚtIÎçmmmìØ±ƒGy¤,¦¨#9îܹ³¬táÐ~Û¶mtttðÈ#0::ZURär*>Ã0H$466rçw.Hí¼ëhvíÚUÝÛÏÎÎNyä7ÍÏR’{“gïÚµ«d˜A5õ:‰y¸ï¾ûhjjòÝåìõNRÜ›nº‰––~øaúûûË×êKñ\V›Ü×éÃÖ­[éììäCúëñ]¬±q½‹×ÑŽ;hooçá‡fxxØ×Þé§zݲe mmmûÒ˼ëØÑêÔÕÕ±bÅ îºë.ÂápIÏt‡:1’Nÿ4MsëòîqoŸ:::xà\-K©µÙÙÙ‰,ËLLLd$ræÏ‰mnnæþûï§»»{Á¼8qÎÍÍÍ|èCrÍÏSGª,Ö¶Tr´›ÿô1ÂRiŒ¼*5GæÄo9Ìj±†ËJѲ,Z[[‰ÇãÜyçÌÍÍU•¾¨Z‰·X-ÚÑÑAmm-wß}÷°àJ ªl–7{åÊ•ÔÖÖòž÷¼gA;Õ¸ìW¢¡eY477ǹýöÛÙºu«/ÞcµvÅâgó.Ýy§š;wÒÑÑák;.§òª„ÙÙÚÚŠªª.#¼Ų,7›ù}÷ÝW` ]Ê…Í9|‚Á µµµlݺ•¦¦¦ŠYC*µgY===ÄãqÞûÞ÷’ÉdÊÒ·R®MAhnn.ë©W-ýâñ8555ìÚµ‹îînß=âU7–ªgÅŠÄãqîºë®ûº½œ5ØÝÝMmm­ï\Vª«˜ÆŽY£Ò{ÎþZµjuuuÜsÏ=¾mû]†}™H$Ü}YiÜNxCSS;w½½$¸ºWý¿zõjÒé4?üpYÓ’ã¸ÕÜÜÌ{Þ󞂹ð EY¹r¥öPêlp<`o¹å6mÚä ±nÝ:TUåþûïwí•Þ¶jkkI&“×Ì7ä©FýþÎf³ÌÎÎÒÖÖ†ªªÄb1þ÷ÿþß<þøã×E]yÿý÷ó‹¿ø‹|üãg``€ëY>ò‘ðÐCññ|QY§[~äG~„Gy„üã‹ Æ]L¹ãŽ;øÿñ?ò‰O|‚ÞÞÞk^ÿŠ+øÌg>Ãý¯ÿÕ7Sù;-Ÿÿüçyùå—ù‡ø‡kZïG?úQn¾ùf>ñ‰O033sMꬩ©á _øó7ÃóÏ?Mêüå_þevîÜÉoÿöo»Ž5ï¤|ñ‹_ä™gžáóŸÿü;ª§§§‡¿ú«¿âþè8xðà’ëyðÁù™Ÿù~ó7³*ðŠë1—ûØÇضm¿ó;¿ÃÜÜÜ¢ÞýéŸþiî¹ç~ë·~kQ€·ß~;¿ù›¿ÉïüÎïT RWWÇ?ÿó?óñ¼ôÒKU½ó·û·\ºt‰¿ø‹¿¨x¹»ï¾ûøå_þe>ùÉOÒßß_öÙÏ}îs¼òÊ+|ö³Ÿ-ùÌÎ;ùýßÿ}þàþ€3gÎø>óÉO~’††>õ©OùL|þóŸ/°‰–sâ\ÌåõšÔ;rDXÇØìÍP_)AhµÙœÀÕP(äs‹]Ê«ÉXêvVLÜâ¶uT9Ud5êÙâwœ,ßÎ%blllA0qñm̯Ír€NÀ{1ݪl+EËâ€úh4ê" ‡¸,Fêôƒ­s4Ž;y%{A¹y/¢vœb±³³³R5뤘Fº®FQ…h4Z2ø½’ʼ8pÝ»FæææÊþ—Ó@8ª{Y–‰D"ã­6˜Þ»®"‘ˆ;VïºrÂWvïÞM<grr’7Þxƒ±±1W•Wj¯ù­Ïrcrêjjþÿì]Ë‹]E·_{ïóêîtú<º;6Ú¤chÌËQÄ E‚AAÌÃ@È Âå~â½\äb¼8qftàÄAôp 1éøJ„ö#&t÷yí;8gUשSkÕÚ'(—õs`wúœ]µWÕªU뽺g-97ˆíw+•JæûóóóÞ´ßïø]œ?Ö@µÉª×ëÆ´‰ïMñ ~÷®Ÿ[|€:7óù¼ ˜ÁÈp_ÁÜköšúèˆ|‰ÏÅv[nàî‘\.×ó<{°°E©T‚ÑÑQ¨×ë}åñ\W“Íÿ’4> ™Ò'¸ˆ·f]–0óP·wêå|~ˆPß/îo\H?•»âËÓ î\«w.7ŒjíâË¿±¿OÕ¼ u þÆ­‹D(…Z«Øã ß5K$2õî3܃™êø@ÍÏ·\Ó%—Ç*adô»Pi(\¤¨o8¿Ù’Ëµ×Æmñ422ûöíƒ 6@©T‚;ï¼zè!s‘ñÑÂÇ>þ¢ö-Î…ã_A —Æv…_„¶ïñÍ_b²s¿ç;;|ûÒN5àR9ìrjnä)§”øü‚¾u‰ãØ”U£ÎAŽ6Ôþvé펳R BŠI\®Ë`!#Í¿r‰·Yª"§¹r Ѿï#¾D…›S‰¡Ô;ù™BTnfè€Îw»QSÕp–;ŒÜÍNU÷àn¬’ÖFvN“ÎÔ¡êEèÒžJqñ¥²pZ^>ŸïÛ7¡ƒŽ»l¸{‘Ó€¹¾öAÇ]~ÜÄpÎoì®;tT*¨×ë&r¶V«A¹\&÷ˆ{ r{TÂG’ÜT{ÿà¥ÞÎ æ« åZŠ…„/%ÈÜï¹ß ùöñ²âÛç.QBÇGC—/¹=Âipv· ßs|9Ò¼Ö„­À.)%„¯2FÈ4ƒ·ÍF£AöO£:ÓK:Uûþ­Ùlö•Nâ´Iþ‹/XÀ~'®Ð€Ds >ãŽÁ%âg-hàÒÊw°r%ÌBÏLj4_‚D¤h×n·Éy‡ŒËUs#ÛB·ëPЋ;Ϭ& _Ä¢kböi ¡‚ ¾üQ4‰ÙÿŽæR»ö«û;©[b•ré‰4 5…æŠ+´Z­>ÍI’‰<Ìõ:¤æäÒIòÎöw$¹£è¶ò•!ó¹g,WZÑþ>¾t‹‹pû›â'ßüo›FjB‰¡¾˜ƒCItns„jRU $þFI=NNëåne\¹0®F¥ïÀqmÞ¾ Ê52¥L ®CBcII,_Îg·§´CIåwî-B©Fê3GQ57©çS ËE÷IèíÎ…ëÜÎ *:‘º$RkîãÇ\.ssspöìYSˆ:I8sæL_«+ê9¡Ê,¾=NiR!?*õwIÑ©fz‰?¾çw.0!^”“ ­eáÎ6j¾ÜåÔ÷»Û2JªÌ„0p°Œ{›¶“$F£a’CoE²;V=ÁdÏ[‘|n¿Ÿ=Ö­JÞ¿ã4›M(‹¦êJÕûq3®ôó±6æJ¯wš¦P,{Lx7 NÀµ]‰g¦ijÚžÝ,}±1–лÙu/‹&¹Û^ŸÓ§OÃ…  \.ÃüaZŒùŠ3`º›ÙŸÈGƒÒ;ƒ ²ù2Kr<&ÔÛ7B@— ‘œ±’µð¥ûŽÔg‹Å¢)¬à~ÆNÓ£„ g¹¸iAH™éÐ&Ž•€F¦§§M'©ÆÉEXÙL7== CCC°}ûv'5_I|Qvú¦M›`ÕªU°cÇÓ‰›2Çe‰XuË’aû’;v˜Â¸Ôm,Ë{áßêõ:ÌÌÌÀÐÐÜwß}&ÂKr™þì¿7 ¸ë®» T*ÁÖ­[MÔåëÉz8a9¨7ž={زw¡9»óÞ¸q£i,{ùòå¾z‡”æFù&±CýÐÐÌÌÌÀý÷ßßjæþç‰yš¿ÿþ{_¶$úÚnÃ422SSS°{÷î ¹¢333P,aÛ¶mpãÆ¾Dx4iMLLÀää¤wá™122Û·o‡±±±ž`P#m|ÆÔÔŒŽŽÂÎ;áÒ¥Kdr?%Ð7lØårvíÚEÒØ76òðªU«`çÎ=E1¸èãF£[¶l1|Y,Éýg sÏÌÌÀ¯¿þJ·ù¿\.C½^‡={ö˜6G>^©×ë°yóf†íÛ·›¨`jo!_îÞ½Ûkº¬×ë°uëV(•Jpï½÷z[À5 ¸ãŽ; R©ÀîÝ»{¬(؆‡‡Üñu¢´¶nôÿüŸ4MSH»þ½f« ÍFšÍŽvW_Z‚¥¥Eøßÿ~Í„¯.--ÁÃ? gΜ}ûöÁÓO? SSS&I…ã¹sç`nn®O½ä t‰_«Õ`íÚµ0;;kW³&ÑsBß6e¬Y³jµ\¸pDÁYßLJóçÏ›di‰°–¾K»Ý†Z­“““0;; ׯ_2¹?Sæ˜v» ÃÃÃ0== ¿üò \¹r%ÓZS•blݲe \»v ~ûí72’1ËXÈ`ëׯ‡ÑÑQ˜…ÅÅÅU´™×®¤?33—/_†¹¹9¯9˜‹nöÑçyáÂþn‹k#é6Ç1lÙ²þüóO¸té’è"ì{vš¦022wß}7üôÓOpåÊ•ÿš´Àvš¦0>>k×®…óçÏ{Ò¹u@­[·V¯^Ý·–Ò}±~ýzXµj•¡±$RÇžœœ„r¹Üó]ɺV«UX·n\¼xæççƒã¡cóæÍpéÒ¥¾s–âÿ™™¨×ëðóÏ?÷Õõt÷pµZ5gÅüüù$8p:ç΃[‰çž{žzê)8xð`0±ôfðì³ÏÂþýûáÀ·lœG}Ž?G޳gÏ®øó§§§áý÷߇'NÀ—_~¹âÏÿôÓOáôéÓpòäÉ}î‘#G`ïÞ½pèÐ!¸|ùòŠúè#xë­·VŒŽ= <ð>|ø¦‹.DQŸ}ö|ñÅðöÛoßÔ³¶mÛï¾û.¼òÊ+ðÕW_ üœýû÷ÃóÏ?€üq g¼ôÒKðàƒ¼–ÇŽƒ]»vÁáÇ3Ðxá…à±Çƒƒ°<ò¼üòËpäÈøöÛoEß™œœ„?üÞxã øüóÏEßùàƒàâÅ‹ðꫯëË>ñÄpøða8tè™øä“Oà믿†“'O’²bïÞ½ðúë¯Ã±cÇà›o¾ñ~æµ×^ƒÉÉI8zô¨·ÂÇl‰7Ëe-ɵÙÚ óväæ«a§z.©”2…úÒëõºQ«Qu¦W9ó•äoKKKƼAÅ™?%ôÄqÜ燺|S»}·x›nî»p4‘TîÇßÑ?ˆ¦ êùÔ~ u¨·µp·$X¨T§-¢_Ó3ÜäaÊüÂ9ùÑgfnPÏ”–XÃy"]í$}ÊdK%ž·Z­Ó”k–ò¿íö­Ohÿ»ÉìÈkø^ÒdvêT!Êäkk!8¶d»g…=ÿÐùâKŸâÑh4Ìþry¢µýn.Ÿº{ÑwÆúö¯í"Ã9ø¬Fø<;)Þ}žH{»þ©Üe÷ð\ #@Æô ߀v8.æ€Ø ÁÌ’ö<\;ìà2µéC­]¨ÈOôyRIœT>!ÕÃ:©w¢’ê¥-rÜõrÇp߃KÖ x ¶ÓB-|?So³Ù4µ%§”ÙÕGŒxö­•/1$80üœºysýú¨èCL=Àõ“t§„™=?.i]RxÂ÷®¡^}¾½e¯µ—©Î.¨T..–Û î^ó]æí±9¢öŸ»W¸¢$Í}9ÎvÌã….'¾µ Î¡z½N>—zGßš"ûò)íùK\S·D#¤Òp1|É«¿–47ÎÇÄvø·$™ª¼ê‹g÷ªó9d©* \…Ê.o¿“乡òM¾‚åTØ<—Ççú³¸´ ´Ýsûˆ ð]hÜ<(Ÿàãüv’@›.\>®×%ÕÛÎWÆj ·~Ô»s~M,†Lœî:Sü7ߺSþS®@´ÛÐgõàr^‘F”?1+9~véj-Uì÷ñ¥O¸p¹¯>*åóôöœ¸”1û¹Üùo?/D?_Ñ{¿†4Â,2sV"U%‰Öl6ûšSféü@åQßÁH¼Ð‘–GãÞ™«ž@1÷^¾ÃÍ#ÒËUbº½á<¨2VÜ%„;¼|Mr¥›‘Kö1²my™ß¨n)”VjÓ>´‡¨Þg.»õ)†õåÂQ<‚¦\®.Õ¹Û]wªUV¨À‚oÍ|ë>Hr¼Û²Š;/(í“*õG 1ŠÆ!m˜ªâCªÁwh?»cs´òiÜv#\ orå%íŸÝ¼PêâïÒÆmNŽÖEßú`´3•#Z«„œ©¦Õjõ¨¶Ô! ¼á{û@´oÛ¡$zªR¥±º·ªš‰ä"IoàÆ ùFB•Z¸w¡Ì€RAàÓº|F$‰ì>¡â~Ç2-ÝO!³4w[uÍ£T);Wq•‚|cHsði„ÍBé<ÔZq—4îpá,áèòuhLêßñ"ηààîIQw—¿|Ú —HnkÔœFå« $±Š¸üÃñ¶M/®Š‹[ñ%¤ÚkKí‡ÅÿÛoéßn·!ÍP4sB½KÀ$IÌ-…"æx -}ÒF²œǽ9`·c´K%(CZ0ŽeÛä¥ï%ÑTí|{.€(4ŽÏô€ï‚6÷г»Pã;øÊeeéâÎåhyàz¤IÞÉ]3j?Iò4Ý«Ñh@.—3>#jJÝ6(úJ›ðÅ/пCí ,‹eóH–œ]—¯1yÛöKsF]¹>))߻ߗ¬ç‡ëêäážgHÏКb8nžî\‘êõz_IAŸà¢ædåUYÌ}®­oØÝ*lž±Ç1‚®ûÎï½÷ÜsÏ=P©Tz‚s‚üõÌ‚Ð]HÌÕ˜ŸŸ‡¥¥%£¢FØl6attÊå2î*mšëF ­^½r¹œ)êë¶,¤k7ÅL£££Ïç¡V«ÁÕ«WÉÖ0’gr8NµZ…+W®#ï²¼ò˜¤\­Vƒk“eþøµZ r¹”Ëe³.œ¯D2®íƒ( 022ããã}7ï¬kkÏ{xx …ŒÃâ⢗öÒ&ÂÈäH‹±±1¨V«ânëT@¶²) P­VÉyJž‹‚[MLL°‚!D¿J¥¹\*•J?JLWvô¤¯¹³ÈǯH£Z­ Á=è¶²¿oW íáz½nŠ{T«Uo›,Š~ØyãK{žFªÕ*$Iccc$­ÜqŠÅ" ÃÄÄ™c‰g®E­Vë{¾»—òù< “|i¿c¥Rñ¾£Ýfl||¼Ï…ã-..öTœÙ¶mìܹ³_³ÿã_òsÒM¨oµPõ'ÔãâÆpêÔ)¸ví¬]»¦§§¡R©Àš5kúzƒÙу’v©ðÂj6\¤äÖ(a®|>oÊù ËJQÈô뎓…¡qðwŽnT‘rê6íµµÇ1”J%sã¤.%\Çî27OéÞ‘¬W¡P0·U»bÍ —›v¤›D p( ¦¨…;OnÎÔHO¼¥…—$  s –Öb¥øšãÐÞáh$¡»»²œY>–¬1¦¡Ù¥ÏBñQÁÐÐá5Éþ*•J=å͸1ð¢D±Y÷Ö›Åwôí]¤=Z|Ì~øΞ=k4Ïgžy¦§§{>÷ý÷ßCÅðÏÿ:¹B õQ¿z[,áÅ_„\.g˜Ü®øŽÒ0JM$RÿkK–h¡òSœ) ÇZ½zu¦–R¡¼%ß3Úí6Œ‰h@åB…šÉ¶Z- vpÈûùívÛ¬½4ŒËyóù8²V ™÷Üý4ˆ©Õ÷94I|múûöâ åm¿Ô ôt÷•äY¡vN­V˼_È@¥r`%©Ë‚òSIÓeì|W;Ä‹î÷[­–iâÌ]âíç´ÛmÓÌWhÆ]0ÐI{nª…/}¦on¾îÚùè´iÓ&xüñÇ naa¡ç3ç΃v» åʘóýˆ7FöÙi£åÿ<›áúõëAÇ¿/'ÄLY…šÛå"¤…„K袘'Ô™^ZÔÞ¬¡ÎôYü¾pg* &k§gj-9Óe(Y=4ž/H€3‹Kk‘úöS–‹œoOøü%¡.õ¡ "Ç[Yýí¶I"|B–—ö ¹\P=9CõcÝyHë¹úÞ‡²˜Hø™ë÷Éb¹A†’øû;Y¢ä*m‚ë®=Åã¡ùÚi¾}l›FíÂ-Ëš`g¼¥Å®Ö ';ÖZîHH_TŸ9¨0nIÿ°,‡ K°P(?Õ^È'@B&!.ÏÍî.d>F Š.ÍB‘b\^õl_X–µ ™Á¨ä}.„;©wäÚIè̵ÞâÞÉý=”¾CåMQ ̃jî’ü+ªÎ+•¿É vnI|-CmÑÜK9•·)ioƽ»tÏR—QI•¡ÐZré>údm-š$…!TLC’oMíaûbÿÝwßõô3D?u-+tËÂÍ£ºÐh„fò1,..B i;…(‚ÞŸW@«Ü|¸ÛY3XHH?7h×éBs“˜ìB7¯Ð!+1Me¥yHÛ’jK͉[)½¸[¼D» uxÏb¥ÈÒmD"è¥ZuV—€”ŸB{]ñ+MO ­Ý š§”7C|–Åw.±TpfÏÐ%]ºwBîšïdµ¼øg>ŸïFOǰzl–— É%p£Û¸ ŠcˆbçRq‚0ZþÁÔ°ëÚüÿíßO@£¾FÝ8Ä[Í&´ZMh·Sh·[ P( Åí*i˜€ŸärÝ`«äó(‹=õ~lƒ€F-pYÕŽ£â¤3P;ÉõÚw¡×qª&ÐÑ …B¡¸å¢ÐgÅqÜ„y“Ûù÷¤ôw»Ž¿Ð†9[L{„!JÛ’8$ÉA;×ëäŒ#‚§´ŠA…B¡PÜ1Ø•C]a—är$IGvµÃØÄhù;°ü³W#쨂`Ì¢qCœ$´“¾úpqœ@’´z²ü!UQ¨P(ŠÛ! £^Y'–‰4I’ƒ¤k6E¥.êÊ87`&×óÐ4íj„1DqÚµ½Æ¦®Œ!iw…`ËÃWA¨P(ŠÛ£^²lÅ„ù\¾£óhugP'´„aÎ'aÑ7˜Æ˜t =B°ÕNL%Ûg˜ªF¨P(ŠÛ¢F=rÉø“¤£ vÍ£¶ÏФQ!,'ÖGQGrbšb.×µšF1ÄI ’V Ú˜7ˆ‰Ùª * …âöê„F^Ù±#øóÓ¥(îA7n4×'»ša 1´c€¤G·¡ÝŽ!µ{¡µ»BPå B¡P(n¯$ìÃØðìM«0i€Q'z5B:X¦+Qm´…aG[¦PU•† …B¡¸MRz«ê`­Ó8N:2 5Å®ŒÀÉ¥Çïæ—4í©9j4à …N MÚU=;¯#øÔ/¨P(Š¿T$b5´82i&0¦«!%3ú4Bèê…QÜ5ƒB§¶šB_P…¡B¡P(þ)Ø•]V²|=1‘åöóqëIŸ«bLj©‘i7µ"µ„Þ²ÔuP( Å_) aYÚ/êM•ð™Eû5BGôÐDi EÝ 4 …B¡Pü-eb ‹-Ò/í8(©ªP( Åß^Bófý’B¡P(ÿ_+  …B¡‚P¡P( „ …B¡P¨ T( …B¡B¡P(* …B¡PA¨P( … B…B¡P(T* …B¡‚P¡P( „ …B¡P¨ T( …B¡B¡P(* …B¡PA¨P( … B…B¡P(T* …B¡‚P¡P( „ …B¡P¨ T( …âoÿ*\®Ú&¨4IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/skin.properties0000644000175000017500000000024411273045225024533 0ustar julianjulianname=Lavender author=Sascha description=Simple, elegant theme with lavender color. date=2007-12-10 version=0.1 preview=skin-preview.pngtuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/song_properties.png0000644000175000017500000000673511273045225025414 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFúIDATxÚ´•OoEƳ;³»¶³Þdc»)ÁÅ‘j¤´BŠEâ 'zÌ—@9ræ;€øù9q ‡H\è¹j‰KÒK¢¢¦MCíàXM6Þ?3°-ÕMbÔGZi5óêyæygÞ÷ÆÞ$Ä(B˜öÒÓ\”#«ùùùw¿ûþ‡»µÚ Ûs],Ëêíõã666~B<4ÆD¯c.ýµ¼¼üÞý¿½xrðÔ$Ib´Öæ"¬¯¯¿9¬«N¾²²2ÿ˽{?ÇqRr”BkÍeÕZ¯óÉËÈWWWoommýÔ<þû­“v‹Ç>Æ{î2;û6‡‡ÏPJ!¥$ CÇÁ#3T@!?¹sçÖWw¿þò×ßÿxGg¥©Ïó(ú>Ž£H’€³³3<ÏCk-.:¬ kkk·>ýü‹ÏªÕßòy&& LM(¥hµOAµZ%‚WˆlÛÖC€B>úðƒo=Ú¥Õ‰8n¾àð™ÂusD©¡ÕxÎ̵ #ÕÁ €òq3==M¹\FkmFªƒÜnϱm›8Ž)RÆ@†ýÜK)±m{t=ÌÍÍEQÿ½§iÚß+òݶapçÊ4]º³³³C§Ó¡^¯³¿¿ß'‰¢ˆR©„ëº4 Ç¡^¯/°¸¸Øÿ/•JÆÔjµ¡…6ØýD†î™\a:£tÓxssó(˲Ç¥B¶··äÊ‘)„ð€i ì1 dÀ Ð4Æœ_%`N×™5†€R 6Æè±‡þÿÅÆ?‡ŸD7» ™‘IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/splash.png0000644000175000017500000044620511273045225023464 0ustar julianjulian‰PNG  IHDRô,5»AÈ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-ÛbKGDÿÿÿ ½§“ pHYs  šœtIMEÙ *48_ò IDATxÚì½k¬%Wu.úZµöÚî¶Ý¶ãö#üˆ16Ç6\Ø„„GNr¯¬›ˆ@”EWQ¤$"Š‚ ü‹"Ý(Q"¡$'É!'9Ü\‚cNrÆæqm^~Çclc·Ý½×«ªæ¸?ªæ¬1糪Öîn»1½­í^{­Zõ˜5k~c|cŒoÐßßüU&Àõßõ‹æ-€"²/ë˜ADÍû €Üw)sßlßG»¹jÞg0äo#wÓì‡äÔ{àv_höå> ®EýÛ^~ó‚í!ìv,®‰bo_õæ™w.öTíy!kǶÞS}ÍðΕƒ1Îeöà }Ü8¾‡Íí`v·³>{»jwæÝÛ݈›}³Ø€ƒqó¦¿ðDÓç°«ô‘WÙš“oó./„W<Ýxs^õRøÚÕrz ^áÀ¼Â‰ò€ñ_éJ‚!cæôýao…‹(~v(zÖì½&ùf»sò·åvõÇgo]`7ŠÍz"®Á>³&\J˜ÝZ!Ç›ÿ׋ˆ=¹»äžsR&¬L³ãÚþÝ®í‘7¾õûÁ:Ò,`öZ쩃¹]ãŒÝ¦þ’ ×1ngš¿ŸöÜ™Ú}º³•×aêƒ1³ØŸ¼¦úÀvl¼5Q›Å5ȧ ÙÖ•¸¿¹½0JM@òŒˆ”…ž¾Í írýM§ãÙüþª?íŒÔm¤‘A©=Q°g8$¾a÷GíCCÚHBx‡SÏž¸dXžØ|çE8Ü7ìuÈéKšà¤…â6rqj®•VÑU¼ñ{]õø' ?oÞøqrŒx}þU€|ÐñJ÷õD¹ºCÆ:1ÆÜ;¶>¢qï˜rt~Ì©šÅ˜“wDÕ´ãÞ[ì7E®¸i,Y ÒgGrpë·¼p{}Þ˜räݲ1-‹©­ŒÌÑõÖë¨qŸsbÎÙ3ÊSÆѪ€I§t (›þò1ívòSb;í}ŠãõŸJˆÁ0Q ˜¤³$B ü“Œ´?Á‡nvÙVÂÜN&ö¨x ìŽÁoŒÉ&´xkŒ0· NÒ3 ˆ!\ÍM?iõ]ù3­~œœWœ 'ÈûwJ*ó CÌ:¾'Þà•Æ–;¶¡„Ko¹l»Îi± î¹{t˜Më+–÷ßè` mcX>´¤zÙ =Ò®uÃÛ5”h@ßiÔûw‚o! j?תg’ò*€Oèc|ø  b¨÷aSë‹„ßÊÑã'súŽMÒfˆ¸¹欀¹ôЉɋ÷³ùIóŠÉ¿"Í@aiÕÙý‹0±Ï"8oÂëàÖ»ü:÷‚ºv÷¤òSññüäŠ?W@Î-?uˆ‰»œÄ³6HÑËá4W D^ |и epÏj¶O«·Wã­3ƒX#VƬO9R¡;Ç`îß×MÜæ<$iã?;9í¹WY>&ú˜}ñÝ9ïÔo#´‰Â^IyZ¼ÜqêðÊåöÖ PP;Š7 ¶#R¾ÌÁµs`$8¯›<œ¨Kp‡ƒðÃ< Ô»hvJàÎñ ÕÈOÅÇ_˜ñq^iZ½ÃÒãn›ªßÃŒà«c\¹ËELòÂ]PÆ‹“r=ìbÈ©ûUdàžñUP¿ý>w "yo3{i‡ðÍ‘aì­zçàÁd:cÑ´Té÷5LÔ£`îåPÒ¤;½ØÝ¬aì²Áɳ`Võ¶õ†ùó¤¢j^®Ëˆ§Ðƒ÷Žz¨u1ùp;?Vo½`ò¡5º"";­š¤61š¬0CÔëmØÑø–¿×ÄìÏ+ö¸VAÝ2S'>1@~*>¾Âè M¼ê`|œî•°Z||¨93€V·¬EÌÊv©$7Öp:ÍRØ1©D^Ñ  q¯WîšW†ý0_¢¶çã2Ò ÍÉ;÷öB(cÃéTVÜ€ZW(¬à´E¨2i«À¦nôí¡J{Håe»¥ÞcϾ+|h¢Çà÷p(­î{—<ìùq,·•.ÚÇ/xÈ´)á– “Ë6²2ƒ¨chIÀ”«wAýÀ!åhð¾çvÛ$ÈÝ ôJÙ߯Ë}÷>#äÑȺ/™›Ã½r žûΞ¢x³ÛŽÈ(YÎTßG±e¯Þ[&ΆK&øosöÀš"û £Ø±¶ÿ’Â2d*2¼ E"é[ÖAL]$¦ÇI‚ìæÜÓÜ€ºæ©×ûah¥´œ°îOÅÇOf aÆÇ™yøø¯÷”L÷UÝâT¶Á7ˆû+–¬Ó­åA€ŸEm¸æµËúq:=eŽæ7ùÛx¹ìŒ $ )¿ÞD=ÆGˆZ€Ë¬Œe:IÈDv‚mrlìäòÂtPìÈ~k¨'¸¢€Ðqùy.Bé©Ä|ò½òÈs¶@m§ µæ)qò(žƒ„9Å´ ÒïEñ|öÎGºæ,>ó'(ûqvÏâVµÇ'ðíÀ1±—l4­7Ϥ  æ8C”†ù|§âã§âãÇåÞ<_ññhu¶0Ü‘4Õsç˜ú{ò³åX½»5Ìʸ‹ó X]xª%K«  ¾™cQë=ó’ @,sz¨uƒ•ò;ÏGÑ’ó¼íY°ØºB\‹û€ƒ1nþ16Yޱæ$òÀ÷èT8¸'+œH|Šæ…¤.c€ºßèË|×è{ßÓÎ嶘#Î —Ç˨õÜUe<‘èFʶ’—ªx n”éH"È—Àì‰Ý•!Ÿ"Œ˜&¦­ÊÍIZ¿žrZ*Ýæx%tÑhãïR*!| ˆ¨Y¬ü;Í– àaèv*>¾BáT|¼‡î]Èi áÁ Ôm©ì¬sLy…ç‡9u0ófK¯¸çÌØ†}ÅŠ uX¬7Ïq˜ß°R£³•ÅáÎ1bÖÙx*uú‰«(×¼wzÄ*vŸ‰·;‘À5ä¸~ò +j`,= ¦ÃÇ“D¢[”äFŠwOŠ·ÈËFL5D™GæS×££f§w‡(PjÓ„r¿öÖ£¶^»w<ö³ÿ½¤I;%@=sÉ0!5Ï`ƒw"4ÔfÔ;^ÒZ!¨s+^cNÑêÇä§âãÇ;>~lúê«ÔïšVGí±v›$5AÑí A«sZ.¥O C:Ylg:¯™)`98)ÔBíu8ÉU?6àž<'Úúñ¦§†>w9!/—™´'ÖDÑÍ…8™¥úÀy—³Ö…®úÛ´•Þ¹%uxé'0G®£iIÁÀÖ ËHòû…Ìqœ}-x›iNzŽCùAö%%sŸ]ó‚p‚‡G(k“a1e g)øÐC¡0Èôe½ÿðù©øøsß½,kß;)s°ÇN ÷ÝÏ>Z½{Ì›µ¡'ŸÅÅ–{Œ ꘣˜+`Ï`Ÿ®öþ%1ª~¦93GF‰6áÚnh’ 5SÜ…Òf“\§|Š?OrŽŒ\ð”Ø_ÓÒ‰njß'ÍB¥!Ìj nƒ½ð^Nâ‹À 8Çß%!,Ó¤‘‘f0ø®vý©"o¢åm°ó%•-§îh+KÍ«Y¤¾ŠŸDÞx¼¨=ÿ@~òÒê»r^ùÞžx Ù«!<;Ûn™Dîl6ŒÒÔê(Ë‘~¯‡NQiuÑêÊ4Oº3«=PŽ¡¡Â9Á+Þ‚uäi#Ôh×@ØDÙèqS%Dq³ž±gèC‚b‰] Òòqn 5â8¹‡øž^m Õf¸‘‹Ý5JY½ãš/yÊ]8®‚«l¶"Á<Š‘SðZlçÓÛ~½ O• ¶1{Æ|ºƒƒ¿§Ÿz|çÛxæûOa6›bvÊbŽ˜å'±±±‰3Ï:¾ø"8÷|œyö9X_߀W •@ð¢Ï»¬¯cèµÍL”5ì³l“?ÖMX½v*>~*>Þ±õqí?Ž~ÏràÓ  S1ªÊ 2ŒŠ›ZôFÍ¥¬ŒîarT;ââ¾ B–Õy4YV;,£Q†QdÙ”qo’Šš±®RËÝþ±Ë¹a}0Ë Ák]ª•ƒ‘ïñ{t{GR-5’°‘4kØ0ÃåˆÌvE%Î0''yK«Û…•ϵŒ=öB9yÙÔYÞfŸ¯²òÅzîùcø!åšÙü¡1§vH ½ù0sa†»JˆÛ¸~/D8ôì³x쑇ñŸ÷߃O?…í£G¼{ÃÌîWû;9DîWþ]އqôÈa<ü­§~Î9p>^ú²Wâ‚ _„Éú†°é8vÛ­„«³†m½}/#ª94œFAí¡“hzÀ‚•¢ „ý|ù©øøsU?Þc'íªÿøpZÝÎÂÊ”•AUÕÿ–Eí6R3b?}ýÇÅŽªª‰ó–ÍúR¦éäEDÈG„|4BžÆ£QÃ7îü2îüÊm˜Í¦ÞVUåýJïõ®ROs>ËTêÝzâgY†Ñhä½öo?t?^}Õµ¸ú{C@ Ô5³V”[ˆX»|¨¤áÅlüÖª kÁà@”úì‡$>~¢Û–® ä?hññ¡æÌ.âã•aÌ—æË"~F’¥RipŠ“ƒF)=ÎVïØQë–Å °5EH tQ–( ÆãÖò‘kB?‹Ü‘ŸØŠõùçÑï,L 2óm ·á:OǤ'³« °°õ½2!ê ãWœ  wUä'+2{™¾žbBÀgGnJ~=שôa5çC<ã¤êuÅqViÐ2À“_ä¦%Kpžšœ*b¼õêë7²@fU޹ýæCÜ‹[ÿã|ú©öáÞ¸òÐCÁ=E¹KÊ^óÎ5O]ºý;èö5a>Ÿãö/ü/<üíqý[ßó.¸ÐY¨Np²K›øæ€Úu²ðqÃcöü# çÂ&êˆÿ ùsߥ7þüùIB«sÏ+´úl±Ä¢(“ BLï€{ÑÓ]ã çô ôXf£Tò4UÆ š̹ÄÚÚ“ñYÖQ¦píÌéIÇðç@¾‹îVá0hå5RÑvVÚ¬°ŸÈ¤¼]唃PÂä@DÄOÚ'/þO›.^^Q`DÐß~æN&È„©FD%ÐA({*ÐÊo:B‰ìFz²f$v›å)½sßC¶b%Ô&SP# ã¨r_­­þœ€¬6"2(#_æµén?³ûÉ$'Õf-ûpçL-?›ÏpÛç>‹¯Ýñ%Õ#/Ë2tùw*!.;×À<ì2.èȳ,CžçÀÛŸñx ׿õíøñ«®ñ&,{q:ñÚ½_ÿm‚ë0¦~¯ïÁmË‚íøT|üÄÓê»òç/>¾ë¶¥Ñ‚oÜ?‚a`¶Xb¾(¼’)JGƵ¶®¡ ¶ eL­À õ¤lº)NãʸB:·^ÇŒ§|f×Ñöì*4]eȌɫp_0Y{²ú……|«”9uë…Ç>yòÍQê,së»ïÆ 7Âöb÷¢c™¿¦°ÇÙýÑ™º­¸©U<­1@ìGáÛÄ;¸ :Æ‚û†ü ÕÃ1‰{$…m¸ IäUÅe!PêmT5ê»[\fµ¸ažý8|Øq­kÇ^X=,Õ1q©—Ic&òØÉóÚíäzì±GpË¿ü<ýÔî-X—eQìCÐÈ:)ú'Œ¥!B0‹eé¼ðZCé;@âæeßí1=¤e¿!dAª{ìÚF "÷¼i0bCeF›}kQTXÖòÖ'cÑA#ÝT†ÁÍ3.Þ$îH–‹Ç‰õ«®×æ@çºY4›a¡ÅÑæ´žµ˜¹Ò–~Pªl8îªF¢ÍMÃX²1–±M6002µ':JVšQ,ëz\üföý$úðŽkì y¬€$¨µéa3–¶Šï‰»&'ìà®o܉Ï~æ`¹\F^¹衇žô”wž¢Úûhwn—¯CºÝ¾¶ÞzžçÎ0øÊ—¾€#Gãg~î±¶6qר%ËqTWž5=ÐYHJ¥9˺¸}q@§¡¥äy…Y÷¼Ðê«ËniõNªüT||¨Å)ÊZyiŒÁÎl‰e©Ät£eÓø/©«bø–¦'iõ†¢ )µqÿø*óÔÀ‹! M± !Nf±¬°,k`_Z66ÈVE\÷Úðáx2Ã4s«KæáxϘ‡™J” J}ÁÖîÖ´>Cà_§`=„l¶]NsI¹ bC/4,] kÑ;Äebµ¸ÝxÚ]^úîÍ UÆQþmÆ{Öné¤Ç¥n­‘aå^à¶ÏÿOÜú¿nT1{^–eDµwÅÐCÚ=L†"*“òÒ5º=èØ«ªBžç¨ª ãñØú}÷|‹Åï¾ñ&lnnµÑ“ᨃ“•Œ%d–Æ;°§ #›¡1»¥ÈOÅÇ(Ú–>ÝÎE‰ÙR4#J«‰1ˆ(qùÆ÷4ò@N]‘ö¨œŒÐÝ]mKá·…Õä—SÙê Ì—%–E‰ÉÚky+VÃŒ¸'šÚÖ4¾@Nµ$eV×1©W®Ùº3ó|º !Çox‰òä·TE‡‘ j‘èÛ^ï=wä>Ù}3ªŠa¨–ÿ˨«ëYМûwVÔÓŽûòPC°-œï¶4­A%',ÃmÞ€ljòo·ü3¾tÛçÚÉ`Œð!ÞyÝ&ÂõÕŸ¡ÝûbèUU©@nÏm4ÁƒñxŒQ£&õ­Àû›¿ÄÿÇ/cccËKmæ'·Rh§¢Lþ”ífëX× óBØxhéÚ©øø‰òÕâã+Óê;>Þ´ú*@Îv¦ ,ŠÊÓåˆ7¦/ÛºëCxHÓÙï»__ÝÈ%kc¦[‹iDý‰naKP6`Æ|¾Ä2˰>c”R™ýdÁzðÆé$7¿>]ÉVÔ†µöçMü›WÃsúñ¦V×IŠÚp46ìu€£@\Æêxø"òZ¨"÷ÀT¤z3׺Àù(‹Á Ë¥¦`±Ö9|Ï'ô6׎Ӊͳž/[ï/˼Ök>€GÞ}ô×ìì³7 _¾ýón[釞¹u-ËÝRôZí¹ôü¥¡•v Þá¿Ð5OÝzæö¼,˜KP·ç’ç9ò¼ž^û!ü÷¿ÿkÜø‹¿„ñÚ¼RIǼ·qq;Ye<d>ølw)Ë: ȱj ãèt²4ýñN gÈ)ÔF7²­çž8°ýÀY¶÷zãÜŠP+Ò¨{\‰}!f ªJ”³“|Œµµbµ¿Ñ)ÉÛdA˜¼Hñ¼`ÛM©sæiÂ8å}ɹ$3ã‚À„wì±á±!Å»ÀÐUÌmiвöqv ͺ> ,-ê«‘¤ÕåÃÛ„·Œ|<4»0x<0$üÇ¿_¾ýóܤ'zè2»=•åªÄ­J¹k€žóz 2U1®6v2ïßÑh¤²ØàÁîÅÍŸþ'¼ígoll=rŒŒµ^]½*qÐÿ€½îBî;pý%ÔÙt*>þù ¼~œngYÝ™Cöh´zbE²Bæ&1<‚ösIQ„NJ˜™1(öÛ|«ÍpÏz„s”Q3>3©Þç ‚+îÅP',–%e‰õñãñš5ÔùHÊ ˜`#’â}sFÐ-5 8\mØ»¾HÉ@òöd®ÛBöt¸8„g&Aû×›çÚSŒ,6Xy6ÂhDŠ“MÂCLPóÐbç<ùû©ÿh/äOOŠ“áÚ*6Eqû>·^ºT‡#_õÁ¸ó+·y1sc Š¢ð]‚xQªw.=s лâÂZô.¯<ü×zàÄíkù¾¥×»ÎEÖ(¸ã+·ãœçá¿\ûz×µ–omyuv‚?þƒ›`šRC¬ ñcE±–òóH«W ?^hõðƒ¢¬ptgÑf±ùtùÜÆÍ€14¦ü ñòÖ5$õÕ·ØõIÐïðú&åf±ÂÔ‡¾³|¤ c¶(PT“Q¢,ž‚yȱN½ÆÞsÚßcB£‘ IDATV@Z¶fNöf¶Âc—r×~õ89f€d“o 8yÔRïrlò®¢íÆ”•aÂx”Ž¿»ž84 ±éÝ{s=zï É“ƒµÿªÛ5ÿ<ü­‡pó§ÿÉ£Â-˜[ —Ríöï”ì«ÌUŽ. oþYŽN­L'a˜7®´-ÝUý¸¬o6Êö¢®c›IÀ* E¡-¡&YïË&ÇS ¤šö›†ÓyqnjQI­GÌû—â﹣ÀÙ«ÿ–D;á'ÍrèÒ‡ç0‘»\QËçUµ AšH¸^(b’0\ì5H7Ýsâ¢æ,IÄõµÛ Eµ·nãœ"ÑÄeâlH꘳Š1Ñüݼ×ÇÓï &ÿ4ºWÿœiqgß8¸ùÓÿÏ>sÐ+M“¿ZR\WvûÐrµ”‡œöT2œ¤ÜCª=ôÒeüÜRêÕoBº'¾÷8>ÿ¹ÏâM×ÿ” ¨‚úqJEdȉÑp£¹¯«Ä©øøñ¡ÕñˆwéÒ‚9ŒßmkÀ,bu±]Þ>4ŠbG¼~® ÂúñHz–á’N£Æ2¬-Áìy(aK!ËI¡¶Å"n{=È¡( ƒªZ`}-÷˜F•<`Nòîíü£˜Y‘Ç3Þj…À8Ñ]ÐíÜ„ ©çFFì‹h/Q!·ÑŽS(om¶Üwñ}ïŠ:]ç–X–Œ|TgÃïÚÇf n½š¢ú{´Pê!`d”…ÄO;—½Î}Ux ö_½ãK¸û›_sï…`ÞWª¦%ÃuuYëó!Ò¯)0û¥Ëc¨~è:^—h a<nÿü¿ãò—½ν@4 "ÒšîVIK‚©àDèïY}*>~|€ü…×¾²,JÎʽñÐq¤n ï7–¡h‡{j¬¬¹ÞK-l;š‹ˆkw×f¼sJÓê]¸+ûŸ‘¡2Àö|‰õq޵q®´b)sxdu0¯¤4u i&ç‡Ñæ‡P±d½ØÞ+Ñ3Ö#GG Þ;r*ˆ¢.J#  yvI5tfŸ×±uÆ8ù€FE!Òiu‚>Ý5®w÷½ópS™HׂüöÑ#ø÷[>íö¥yÝC~wèÕ®-]^zWOô.@Ëä´ciÍ_¬|Y–ø·ý4þ÷ÿóý~ìý!göõ•¨ùE³£pá¡TÙÍ©øx×ö|ÒêÏ'ŒEQb{ºpø7ˆV?^†G'q|óˆÂo5uíä7Ti™.A—{˜mV+JÌQÒŒíP›FÄôëæ/Â#Yßóe‰Ò0Ö×rÿºB—ö¯Ý.|º¨½®?;ÇN¦Nà¨Ûº¦¾§Šì¨óÄÈX¥ËTµC£0d„f¾L¾ËU7–cÙ@×5+I­×±õeQaœg@@?Åg¼÷Ë¿ÆßKŸ)׿$H‰7S Ü,2àYôÍW>ÿïÿŠ£G;슇^zªT;—j—RtC¼æ!€néñÝž2 ªªŠ@Ü^“s«ÿnüÏûðà÷âÒË^&ìû¸å!µù‰uü\Ôgr“1¦]Òêlêä§p+¿”¦<^€´ú 8>®}P”¶·^æ‰ò}õ!=ÛªD Ds°Â«s7Èl+*÷X£:éÍ^ÙYÒ5c㢠u‰ª_ÍÊ¢ÂvYas=wm®£ã÷ªÝùêê|bŸ˜ˆ×yï9r*êp: \õšRxÞ5³¸JéÜØ}½/¼ 0k€ŽôÈwž”¸ð§,&«½õ^q™T¼N±“oj¥Û¸3õ:e®¥EIÆ­|«¯ÙN^*Áã>‚¯Þñ%÷yJ &å‘k Þ¥ßÞ¥ וÝÆÓåû! Û×ö˜R%ެüZf»ôÎíõ[àÖÿø,.¾ô2P–µY¨¡Jœ nÖló•PãZ;ß²2¨*ƒeiêׯ (ëk-J#vb"bRþd!0jׯ#LƵ6õ©øøÀ³=‰âãÚ·ªÊàèöb8­Žc£ÕÙSJaôÛ<³G቙”Þ)â‰ñ f»8ÆÒ°õÚjÚ¤()x¢Õ<#¦ µ0¢{!XõLÜŽûμ¨Ÿ»~Óêñ‡†‡·~·´crà3¯0n‰ŠnN)“š™}“D7ßm.¿A[ ¬…cIz•þ<‘þ07YíôV°Öˆ°Â^F4šðUɘLr5éßž1)Úó@Ý”„¦y˜G~M¾lÆbÄuR0‡mÇIw}QøKÐê„-ã/¬QϸÂ]uúÝÌÀ²0£lÔC™÷©Å­ø3 Až:¼L{Ѥ´Š%?þ]ÜwÏ7¼ºð¾¶§)×Táú’áRÀÝU¶¦»F¿Ëûc)øøCãÀÒîÔSlƒ¼6"—¿x+.¹ìe­È‚£·d[¥ …üG®, æË¢VšZÖm™{`3äf0‚é c ˆ#; “{7'XŸä§âã'§¢£; /¼%3¨ž+Z}蘑 äAň°±¦ÑÔÀ=yQŠ<ÝÔuØCþ|KÓêìÕpS¢k #îJãÑÞÛ\”%*c°±>VÇ:f‰ ϵq|†ìùFR‡Ý†X6M•;|Žç…ÛOTfËÉqkå|ëƒZ­Ø<žÐÂú ”@–¨£‘ŠPp)*†AUSðêÖCÔâú©zøî¶'?oÅN²ÀûT/Üñ¥Û<0—qñ.ð»¯ÿy— [—wÞ×=¥ù.h–Ë¥Gµ‘k•:™L0™L"O\‚¹¥ÖS€n¿ûÈw¾Ç}çÿè‹b} i­ÚȪ*ƒÅ¢Âl±ÄμÀ²¨`Œ—„å}¼wY7ívÛ³Û³ãñû6ÇØ³¹\/Ôøø®iõa@~¬´º¶Ít¶Œó'= >üEýø¹v•4¼_»òÌþ)úš+·ÝÆØ)‘ÕfÃÛ$;6¶cx«+êÇIaZçXïŽfãÌ#TMëÚõIŽQ– Ѫ–Ùkû¡‡FÇsŠ}'ÂöE÷©ñ ’tk§ÓHg­›žÂГ@{!ÀeÇÅWŠ#¥B‰g-Q'×Õ|¥2 .L\³ž—j‘¯)d{܆rÏD‰’-ZŸ}öÜs××D¬­JyÊóîòÞW©;ïð>:0T‰³@^Î<óL¼úÕ¯Æ+^ñ \pÁØÜÜÄáÇñÈ#à›ßü&zè!L§SlnnFÞºø°S›¼æ<Ï‘áëw~ü苜g@ÌA§¡Ú _f³óeábàU%ô­9Ùn F«ïª~ܤÉû¢08x¸À³Gg8cïönNzüõ“ƒVnüãã+ÐêÚ6Ë¢ÂlQ¸O ûeªê-gî\ƒúZrêñ[4¶PHg±wžz6juYT©ûË¡ÏOñYWäçÞ)ô;szµ“æRõÒM< ˜³Yõõ5dÄžíÃ*›Q¿aÔŠj¥V•ùãɲÊFSðÖ0ÖÝøMn\ȾMJðxÙàÅæp;òäsÄÅÓè9€o®ÂƒeIXó@}(·N=ýÑÓzî)ÛH2¤F§dwN„ûîú:–‹…¬°+ZH—ý• ¾X,œº\ø3’poòMà‘‡ r‹Å[[[xÏ{Þƒo¼/}éK1™L¼ìufÆÑ£GñÕ¯~Ÿüä'qÇwÀƒõõuGϧھ¦¤l¿õÐØÙ>ŠÍ­½ .×sfÙÄÁg‹ UYx=&ÒO AUùõ¥»‰¯\vfRêG0ãà¡)o/pƾ l šðdòj|ˆåréÑãÇê¡[cäâ‹/Æïþîïâºë®C–eX,˜ÍfÑw'“ ÞøÆ7⪫®Â?þã?â¯þê¯0›Í°±±áÑìòZSÍeò<Çtgßzè?qÅ«®DQ,Ê Ëe…Ò˜:iƘH?¹M²ëÒ}¬ã? Á¤(+<õÌ6öl®áÌÓ6”’ÐÁ~ó©ø8†ÇÇS¼ËööÆpã÷HN N“¬Nä%áqò‹)JtK†„X¯ì5°Ð¥Þº„`’.RÓþÐaK/R D`(u©±N~Ý„LD .Þ÷çËÆdXçeŸ6òtIªVyÆ$ŒöjÌc &°Hr#uÖ×åm~ EÞ}K³û Y/oã©Lw¥#mP~¬'§DŒ¢dpÖQ×»‹PzWò^ô¼°”£Ýðæà÷ñ½Ç¾[O¬ êjuª}g6›amm oyË[ð¶·½ ¯xÅ+°¹¹éê¶‹¢Àb±Àt:Å}÷݇[n¹Ÿýìg±³³Ó)…8Ôí9]y啸ÈG>‚Ë/¿Óé´ÓH0Æ`6›a2™à¦›nÂùçŸ?ù“?Á¡C‡¢öTBŸ|=pß=wáG/~y 75Ñ”Ù5†Yc3Êæ¡à%j{FŸˆøø`Ÿ¿ÇÛÙž.0_8ûŒ=˜ä£Sññ!{Üe|<µ“ÙEe:œ™“ë‰+öâˆdgGÂøñ Æ:âãÔ3w9eåæèàÆ[GûAܽ►NVvD J´ñ!mDüü!* ýph‹¢‚aÆd-×ÇŽýu„Ã>¯Ð¨u¡ÿªÄØ£{,ûE¹ ;¹³ Šg©‘ßBÐVF”¶ÙŸo=x¿çÙK`ïªÓ).¹ä|àÀßøFŒÇcÌf3¯íªKommášk®Á5×\ƒ·½ímø³?û3ÜyçQý÷ Xyþ/{ÙËð±} —^z)vvvú 67¢ 5\ýõÈóûØÇ0ŸÏ½’·®±çùô÷ŸÄ|:ÅÚd=šÜ–´x–\èÜØ[*û Õ3wRÀñ»åÒàñ§Žà¬3¶°gcí9£ÕŸ[ ~ãã©q,Ê óE‘¤Õõb¨´ÊICrJÌRÆÖ„­T:Ù JŽUÒ3 K½( ääó jC]î=òÊŠ}}õ(Ú_ì,´#ˆüb$à›H‚~kYU0sÆúd;ÞÁ¸„}н¶©Êäbj¥9sT•N‡?SÓ”Qå@ôÌ /=S=è0ýÖ…HIˆÓ¸/UÆŒÁ²¨”kÝZ·ÙÑfµ“߉ڬv—*ˆÇ}Ä£©SÊmC=õÙl†7½éMøøÇ?Žw¾óÇX.—Ȳ ãñØý®­­a<»¤2fÆ5×\ƒ?þã?Æ»ßýnµ[ŸWn¿³ÿ~|èCÂ¥—^ŠétÚ äa3 N¤»þúëñ+¿ò+Q||ȘÀ|¶ƒéÎQ¯ç|(”y¹mÄJ`°‘½4á¿Ø§á4ˆ‹µ/ƒÂð"ºô«}ŠÓ4z6ÌÀ÷ŸÙÁÑE’ÖF­s²osxm—ºgË¡›Å©!¾¨Žp°{~hZ23©‹Æ~s,tУnadne]Åv†9 ævO†Û±#ø—ÞìãFÌMàÙS0Ð&ðQI–¡c¡û¾†³ŒM0EÕP“Üj8­•kܶûS[©GõwavÝ=g×T¥vZ¦³eãñrä±!@WûOP¾HB±ŒSA{ äÌ‘!(¯—Y–Ó%ô8™ÍCJ£-QKdº‹ ±Aõ饿ÑòÓ·‹XËGÈ(ö²µã¬"ÿÚ P%Dd<}¹\âÙgžV½áBÖâÇá¶³Ù ?õS?…øÃØ¿?¦Ó)²,ÃÚÚšûÞh4JÖ¥—e‰3Î8¿÷{¿‡={öàŸøÄ`57i!þÆoü®¾új桊œö]M¾( ¼ç=ïÁ½÷Þ‹›o¾ãñ¸×È‘Â5UUa±\(¤Ègg9Åï}ˆå. _Å?Æøx`:bOš¢2§ï]?iÛ–öÇz‡Ñê‘ããïÚf{¶tqs£l¶0‰±S{£ôÑê@ðdσzCB¼òXÑ 9Êà¬C…³ÄT•“ž·JÁ,ð¼)á ÏãeŠdY}'”«åXž†[/{gQÔÛ(1DÒîR¶ Äg§hCúm¢n¼_¿b€(pÅïçD¹]Û·¢~3÷jÌyÓ¾Šr+§3Ì£Æ-ÌX%ÖÆ£¶ßxA!õüºTî\ïl$,?a¸däÃ3°\̱½}Ä%}i´IWœXþ=Nqíµ×â#ùÎ>ûlL§Säyîy®È¥W®Qúø­ßú-:tŸúÔ§úo‹8ç7¼á ¸ñÆ1ŸÏ“€òÎÃ_ N–{ßûÞ‡o|ã8|ø0òÚÜ•Þ< ž”:ôt¨‚ÚF%@ /ë·fJð£ÌBöUñ:›ó¡]åRa ”K(a³Ÿ°Ó)7À;[ÔÛ²,S´ß)¢0ØI­Ê-\M#'Ãw ¨v† +¶F’ !“/Ù“»öì¸Á°h—ÒߤM«.U+RëвBUñ®²¶Ñí‚j$pw$ÊÕ„ÙlêÊÕ$È Iú’Àµ\.qÞyçáÿðqÁ ,KŒÇcäyî~-Í.í{“ÉÄû¶¶¶ðÁ~/ùËÎÚÚÞÿþ÷ckkËÓm·¿¡d«ýFѯ=着ðÒ—¾ï~÷»QÅJaØÙ9¢Ò²õÃ`@Ä-åE‰úW•µån0WiutÒêi±‘4­Þw’;xhŠé¼è¡Õ‡Që-" ¥Õq|hõ$ œ Š¹ŸVÇ ´:wµGwæ5­Þmé I%¡‚Ա尟Y0®ÆõgÐXÛ\'î¸ãòó„@‡idp9í³ 9‘Î2FajCÜ¥ÌÍ3Ây#n®œõñ#}Æ‘‰Ç†œtj[>_”¨š.¿U·Ér”0OŒQÛšúú ¢ú¦ š$+¡JÇ"0ÃPÅ÷ãPC»ßll†-Þ¸ÓѵÄ;TåÈü¢iœ1„ºjdWTc‘äÇÎ'ãílu@'¯Më@¾%b?ðફ®Âr¹ô@\»êò×»Ul»à‚ ðÛ¿ýÛî゚7¾ñxÝë^‡¢(0TàNxh|Èó€Ÿù™ŸÁ\Ð ê2¾ Ëý}ÿÙV8çdŠ÷™J'A|<û­ãæ†;öÄrìºÆWw³¢ªIîŒ|'†ÅŸÐ|¼âã=Æ59]µøŽ"N‰íPX‡ß®¡•ÆF¼IFŸä&7/ TVÓ"Hlù¨ý¾ŒwSû©gºN&éåz1¤6ܲÁ,Â'!³–—|˜;ÿîò¨ûí˜ç)+ƒ¢¨V47RãLÉIÙNQ¾B ³Ù4Ùû[pMÅm±XàÚk¯Å/þâ/¢,K í¿å{29.|=QUn¸á¼ë]ïê³,Ëð ¿ð ØÜÜtžxÊóÖØƒ”bÃ]tÞüæ7G€ž¢ÞíxΧ3¡9‹ ÝIaòÂ/=þ¸‰©u“òÆ{½Â¤L/›Ö÷ê c ž:´³c(uÒ1y7| HÞŠ<}cúÜŽ_Ý_¢Â|Yª\›L‡®'§ÇÖÖu7Öf?X‘§wíZ È1ÈÑ”‹Ö×ô.¦‡ò€9E^Z˜¨&ÆÎëöfÚFfÅBÀ${«qCðµ{šN‹¢V1M² C1ðÌ¥×ÌÑS"“ÍãJ¯‹]DM’‚õ{øÍëLƒBöŠõWv‡›¬K}Ò1NÁW¦¡ñlÇ]2ñaÑ‹6©¡AE¤?µ÷Hƒ€[.Ûeì½ï}/N?ýt%`‡à)ß“ÿþê¯þ*öìÙÓ9—\r ^ÿú×£ªªh߈§Þ¿+¯á†nÀž={œz\8&Z²àb1kå,9dHͰÛ¶$ÝpZýØ<ðÆÍ Þø€p¾1Œét‰é¬8þ´:£¢Õ»œ9§^ ï8D†Ø™-¢ø¸i{sz+ ðÆÓc‹†:显 .×påK«2y@}¶Ñ¤Ø N‡ØRÛÜv< ×k  Å·–ÃBMV£‡üñÉc‚çI·ž²ÑžãÍRqÎ5R!åÙeø.Zã©/­§xÙ4Jñz€P®ÑËñbNÍäT‚{r»ldò›Ð†ÂÖ™‡»”ˆ‡«¥k”b xÏIMä.ᆰšÎYÑ5+4wb2–‹ç•³hïgK-Üä„ï)Zu6;OÑìšG:ŸÏñêW¿7Üpƒs-NÝð!ˆ†¯1¸êª«ðÓ?ýÓ`qýõ×ãÜsÏõ}Ç · Ï·ª*\qÅø±û1,—Kµsœ6^‹Å<¾Å¢tÍ·ÌÛX§$wA«Ÿèøx÷Ö\g^‹zúƒ‡vb’l×´ú‰Œóó÷ í`£Ù¼Îj7=cg:âãÉá4>ÄEcf´Ë•s=¯”¥£Š88–µu;œ=°ÑC”íÜ5·ŒPkKdŸ§C‘¾zRëZ>“—ãâËÖêùóî”B,–%ª²ró˰¢>‰à:…Uâ8~ždÈc¸lV®W뼞S[¶Fé2¯0Ó=\hÃÏIFDºz–wÖ¼ù‰l,—ÀÚ8ï.“SöÙá\k}Û[ÿ°,‹¤’êQRËïxÇ;°¹¹é50IíÓ‚»¥^euÍp°¯'“ n¼ñF|ò“ŸTµà³,sҮ㱯#n {ì<Ï=yY™‘Þ•õ{öìÁUW]…¯~õ«½™ÿv¿…R¶:&®»”ªð ÒÞ­ìLùd…Œõ¡¬’'wZ”‡·ç8mïú XÖÉ­¯¾ªVýPAîܦ2Œé¼Hf«ïjÜØwZÔ¦j¾(u‘MwhZŒã NÊiñi€Ü_©¯ØÔ•$,$ã8è¿ÎÚóQîuÌ’”Ò`N#ÛÓ“+.-3u@? Ù)µíóe‰É8G6Ê¢LzˆãJ˜a©–ï®UV@ù5äĉÞèâ\˜CS¤]/)`©Ãùž‡ DC2Ý¥k.Štãʨ£ö…:§¾¸Š‹¢ÄúÚ¨Uvë4@H# |ªV•¹µ[oßßGÕzH±§ú“‡tû™gž‰ë®»ÎVoÜ‚ö¥‡Æw¿û]looc}}ÀÙgŸ,Ë¢Ö¦òߪªðº×½]t|ðÁhÎ9çüøÿx=ò<Gë:tßùÎw°½½<ÏqÎ9çàÀX[[s±ñÌÃÜ‚+¯¼Ò5méòvœÊxbÍ^#ÏuI< ùê_?î80(‡ÓHϬÒmϱoÏziÐIä<`ÇRvæí€²½£;‹$8¤ÿøÊRŒº¬Ýd‡ÎÃÜsFr +'£AW­›«:rÞýÐÙ ‚þ'!ËêÖeæ¨LÚªá‘Ò†Eiù%õîjÏs9Pv¡»»9 g`QXCÓ~UXÜQ¯Í2¼ÂŠÊd%ŸÇº¼Mž#ÝrLx­‘–÷žMwM¿]m…JÉ0zl@ cÿõ.Šª®Uïj#…i¼ñ%ËD̾•;4ªaeYªÞ¬Jõ×P®¸â \z饘‡HDxøá‡ñ‰O|·Ür Ž=Š­­-œyæ™Ø·o.»ì2¼óïÄ«^õ*”eéÎ)<î¹çž‹ë®»Nô—¼ä%8ï¼ó Ëc¯¯¯ã{ßûþáþŸûÜç0N1ܵ¼n5#ž IDATä%/Á{ÞóüÄOü„ ‰ÈkïÙE]„­­-ÌçóA5ú¦ªPU%F£<¶¼©·Ù{ì²àM+iŽ7ŸoÜ{"û=mª²Ät¶ÀV ûÃV?>ÈåØ-–Šàù ä+>ªvzR¥¨S»ŽˆµÇˆúg$,…Ä£FÜÄÆÒle0q-ÕlBJ< XuÛsä^o\©ÌòÓÉB¤Dhž’­.× ê‘Ü­0–E…qNȲtqÃé9ãb‚DÒ­¤;ÇR9®-Õ“¦Žï±g]ŒøJ?o+''7#mÛ! 3˪ñÈôâݤöHÈÙ-í´J•«9½*Uï;T<Ó¼ö¢(ðŠW¼ÂQè¡a`ÿå_þoûÛñ¡}÷ÝwN;í4\sÍ5xÓ›Þ„¿øÅøÂ¾€÷¿ÿýøó?ÿs‘£ÄÃ_¸æškÔ1|å+_‰­­-‘?ߨØÀ—¿üeÜtÓMøèG?Š'žx—_~9ÞúÖ·âõ¯=¶¶¶ð¯ÿú¯¸é¦›ðGôG®äNÖ¬‡Þúyç‡óÏ?eYª^yì¡×a 8¨éæÄ,è&ò¬øx< ú™ú— ˆ€£;ó¸iP"N™ô,_ ññè¨l› vfK}VŒ#O–©å.I®nì'yËÏâ¹FLu}¸ê±×Û™H–‘çØ7–IÔUŒÓEÌšqnØŒ÷' Ä£ú˵ùE1FE’­aÈ´.[u¢\DN{ApƒT}sh¶Äç&Žû³ÊggTƒšà#W–=ÄK{îÙ &Ä3Y–\tz¼„…ðð `±¬jú½YäµN€6Á £ÌÅ·2i[“Í‚uGH7X6ah©šü̶}Õ«^yîòçæ›oÆ/ÿò/ã©§žÂþýûqàÀ\~ùåxË[Þ‚W½êUøÞ÷¾‡µµ5üó?ÿ3>øÁb¹\â×ý×=°”çóêW¿“É‹Å"òÐ¥!ëëëøÊW¾‚÷½ï}xøá‡qñÅãŠ+®À›ßüf\uÕU8xð ÖÖÖpäÈÜ}÷ÝøèG?Šù|Žßÿýßw¼ö3qÎ9çàž{îIzåò}cª:´1™¤¥¹^ô¨i%È*VVycqòÆÇã)çøÏèâg‹˲Â8Ež¥ÚìéÓ꽄þs÷Ãþ†Óù2GÙM|œy`ÿñ´GÎ’ÅV˜íI`,õNJûîÓW7m2WJ‘œÑŸ{!“±ˆ£‚µ§.²Ð¤i®¬WÌ´ÅcGѨq@þ’פƟiœ2&3ü5š<29eë0X©ï “5€E9N9¨‰¤šˆy"µôÌí5Ç õ$äz3¿>ƒÓOx¢IK§¢›°†Ö¢s?Ïæ¶[•|U¯‚‚Ø{ôL°è=´’ð¦‰Ê„ UUöíÛ‡ /¼P¥¥à±ÇÃïüÎïàûßÿ>öíÛ‡ñxŒÉd‚­­-ìß¿çœsÎ>ûlìÛ·§vàÃþ0n»í6G›KqÎ9çàœsΉŽuþùç;ÚŸˆ0ñÌ3ÏàþàðàƒâŒ3ÎÀúú:öìÙƒýû÷ãì³ÏÆYg…ÓN; ØÚÚÂÆÆþôOÿŸúÔ§z%bÏ:ë,GÍwBÖC¯L•žO¦õFŒ“{^rd‘??õãÞÖ¦̽¶Œl]_âȈßm«7D´ãÕ3z*×O@ýx×ø¥ÊªÊÊ`¶(ÕúqJ•ë™Ø# ‚Èë4i\zãŠGn H“˜A0r,§ÈÔ¹a=ÈÉÂóö$Ä"9F:U]"9öÖº– ‰BGÅñòbãM¶¿½S‘†¾x¶Mà¶иêV6Õ?™ÛCJ:ábYÁTFýœ%õΡ +ɦBØÒ>‰`E¾„ëÅ0×YJh¦‡ ó˜e6{OÇ–HN8¼6J©%+²©=õÉÚ£,¡øN‚ž ¨­Q¤Ðr#D}‡í%U¦R3Ëû c 677±ÿþ¤!ð7ó7¸ë®»°wï^Gc—e‰ƒâž{îAUUxúé§ñ裺>äO>ù$>þñãꫯF–e^ö»5"Î:ë,<òÈ#Þ±Î:ë,ϰFøÌg>ƒ[o½ûöísZõÏ>û,xàdY†#GŽà±Çs­Q766pøðaüå_þ%n¸áìÝ»W-ã#"Ws/‹°uª*•ÿ°E‰²bŒF4 1_[ëDÐê»òA­_y:ãbQ¢,MŽ0=ûöB/;k½ñö&j–VçZ8ó>ZfMÛ&-uW$ª5Þ©?#H±4¡˜¨Ø»^Ù$s2X1)PèòšÔ°qþ2A™Æk5%î#œ«H⸉K¸ø·â9Œ ý¼n¹ì®×Dص,*¬©í¢¶J¸Æ3]ØåH Ho³+)´:{èYפ¨]Ï4ïÊtgׂÁîÇk¯tMÃÕØuí"påÍ[4ñŽz‘‹­qY@Ê ËÊò理KÕº³X=ÏslnnªúO<ÇÐó‹oûÛØÜÜt’²ÌŒÃ‡ã[ßúüqTU…Ùlæá\óù÷Ýw®¾úê$c¶Qí QSÁT¥¿Xõ)„er­o`­òzá4©hò $7œ0 '±ã¶›p»ˆ-¨>0]Ø»9‰bj¼'Bw2î ó\×ÝÇÇS‹)3cg¶KeÏ0¤F:QvÖÜX¥£õÍ÷È™| 'a@¤©HÅøƒ7Ãè‘Õdžûã Îñ6röJ]½7.LÞ<#Õ«ox€tø<‘<Í*Óãuw$ŸI_6uê. •©Çõ¹±À‘W±@б<¬ZÎÚ%çA¨^’X{Nˆ{f·Ó°ÒµÎçGìÁÊ y_¸×EQbF^&y+¯ß.®isN'ùƒ 8„f'”éð»Dä@Ú6]‘ÊkÌŒétŠÅbc Š¢p²íÜväȯݪwƒó˜„)ŠÂmŸç9¦Ó©£ñ­>¼ýÞt:År¹t¹£ÑãñØeÓ—e‰£GFà,Âøy—TUª² ¨)¨TŠL€%PSKÊÉøø o¼ÛÕŒ·6Ãæ4IÜ=fÔzÒ[1züZþ5[Ø»1ѽ€@<#˜¾ÏKýxj¹ÃñòàÅt¶¬5ºWr¢4³bÚ/%ÜRëÔa8šÆcO…,ÙDb^15]Ÿ£¶Êr”›ä¯z+×Ö÷µ#VS.„ôs'¦K’ÃUžC‘bÐv†±á˜!Æ…ÙØ%wo[ŸÊÛÁuú8j¨›©òºÎI‰}°2ÜýPÚN“ öZò‘‰âÏÁc6g,F‰Ø†_Ò%¤{=Ï\ÔºëÍg¾-$ñQæoQT˜€œ§NÁ€2)– …¤¹X‰Î¤¡0ÀC·390Ö2Â777±wï^, èRR5lejK»¬÷»¹¹‰¢(ú(–Ë%‹–Ë%æó9Þð†7àŠ+®3{^úd2Q-ð¿ãïÀþýû]\>ü],xòÉ'=ƒ /dQePÃLÞÊV!˜fúVÌJ¥‘ ÓÕ&\™’ÃêÇ½Ò !>dKélŒ5£:C6cjÒAšqV¬Hf”R´žd``P‰¨â¢,…8(¹ˆÔÜü·8¢ó™Sêrm¯N—DÍ)JÛ€Ùú3þm[›êUØCûË/ìL—Þ·«`ωÖË€·2Â-DIõAvcÑÔ[DPB6›™ÉÕŸ3{_WlŒ/;@11À]jnh³³)¨Nöº±q×ÁAÏõ ‹ï ¾O¼µíðFì•àûÇìÒ†â nr¬ûÆM»m)Š ÕI{Fä½òæ1:d”þäμwÇ©ŒAYVm‹TV…ÁÂÔ2OPSNe[ŽË^R­·_£ôC×€Ô&è­OIMÀñ”è;Ä­õf"òº)¦KêwÁq c¾4¨*vNAl¬]x›µª#n—eYìT([Çýè£:zÙzÚUUa±Xà /ÄoþæoâŒ3΀È766Üßyžc}}?ÿó?—¿üåØÞÞÆb±p½\.Qž|òI<óÌ3‘$ì<à’Ý‹f³Î8ã üÒ/ýÎ:ë,0³Ëv·.AÞfàßpà øÉŸüIÌåucpèÐ!<úè£.þ®å„ÙùE±ÔíAŠ™)f?HæÛW¾,kŸéeûc 7²¬h«<7¯³FYËä ¡3-ámÿ“¦(@†PUäkA‘ŽdŠb8e*þz 6+r,¤-ˆ÷ȲòÞí YVïZ@ÎK”e- m¸èXÜäÜ&-“è-.!ÏÁ–cÈ„[Ë®-úø)›Ùµ§##[ž‹9J-­.¼OÒ| «˜˜e%+©ÊŒ šjÙ×€'-f#?×çO ôáÝlSø&ß­éÜ$º&ó4Â9C©m|B–» „£È>}¤å0×ùUe<¶@Ïìƒ=Éç‰|9\è9F¬Åï³A­Ù•G[LXƒ×'$*RMT@}Ù.¾Í“yœ¼(þ'Ù &X¬£¦;¾FmlË¥M€œLÆ;w6} ;àáöD„ù|ޝ}íkxûÛß541Æ`:âúë¯á/þâ/pèÐ!G{ÛŒs ”§Ÿ~:ÞúÖ·âÚk¯Åt:u-U™R¨}åŽo61ôÜüûxO<ñ„«G·û½òÊ+ñk¿ökø»¿û;9rÄiÅÛã[ºˆðæ7¿7Ýt677±X,TFøÖ·¾å˜‰TíyÔ™.j¢Ñv]± cäÃecš€D&t f§ÕïõÆ5Û”e"Ñ(‡  ™4ŒC›¶N™ÕÖqÕµ± Á©v’APœh«ëA·þBǺˆãÖ¶Ô„´>cgVøÓaH™^¢ÙÇð„@?ü ¥-|z^*¹ÙÙB-KÑÌ gô*ªŒÇÌ¢ N”ÁÈs¨+QÐ{Z Ò¢L.]À©æÜ¹CC¥õÖ¹£\™Á³8Õ_'’× jlÛköä  ÅPIúüeªÕn>N=M87Éë‹ë•=A´ zi<ç9×ËLc&QÜèÈ•d-¦±@nY²hÖ2XV즭sbWAÔ’PÆÕ¢“lÂ`Z?Á( ¶´Ý ØϤ„k¢'6+@ÞßílÀøq»ÜÒÒ†tÅ·ØJTÜ2 BúnvЬ 11 `ZÖ•‚£æD²|õº·½ëÊ¢þæEejÆ™ü¹B '¨– ú?e5³jÃÂЈä³v#t²³³ôD††$¸&½qüLЦRz ÎhVöå‰|Í R²ÑMŸs« Ü2PJÆ:…wÁDl§uædh3Ðõ¼qb-[ÀÍ:ÚÍæô„ÅÜqL”û°IÑÜÊ·rk Ñ$à0FD]sŠ‘e„lÔ€t–euKêñ(ƒ1ʲ¨Ý³ÔÂgö«.¼n VÓÄëkcêÛÞîl)÷@zÕQ+)€KÃ0s\`P‹¼MH[íBõRãp¤Éâ¬()XO2Gˆå¢Âh]0âα8'Ÿ8¢(˽Äåû¶&û3Ÿù ~ögÖS i{ ŠÛÛÛ.nÝ&›,J`bžÄ…£/âGÖÃhœ£}å¨é‡Q èޢݠMYÿæönÌqiñ?qpy/[¼3ó"¬_E®( W/ÅmdW7éi[Pϲ _üâñøãc}}ݽ×%Äyèš×ÔÔÖÚ:…ˤ”*y–³¼’ /?¤‡VWc"Œ²Ì%vRÖ€¹"ÙÙΩ–ÿ#6Qk¼q"Kµ½›‰êkºŠÊÔõ°²Þ9æÀöº´BíR«ÌõDKÎrŸGλr .S[,Ku+m ñ@2#oȺâã&d,m³'‹5~t\;Fé*"Öš¸‰L*>î‹üG=¶9$öÃ.cþZ7Hõæ&YíI—ŒY‘ ’¥¹;~îÖocÙ‚þf‰ ^Æ›l5QÛAíPo8Ê2PV·ÝβºÜÐ2qeÍß$Èc×Ò0uYæéšøÂK¬Îlf}ÑË(CFu)²ìj–²¬PFYUÈSé¿ÄÍ=] Í·€ïéÈIjÃ}Áë´Ö(X 5ÞÀv›ñž4gSí®»–¥@çË ë#äÔ€Œµ(I™P¢+™ÖBµ‹š”¯'“ î¸ãÜvÛmxÓ›Þ„étmÆ¡mÍyUU(JFUœÁwáÅk_ÁÖúÈ÷£ 042 èäç5ØÒ èf PŽ cœMckñßðÝùkñìø¿À`mlÔ$7 Ìö7l}jã˜GŽÁÍ7ߌªª¼Vª©Üùoè­*ˆäx’ M#ë½7^U³€zlB ër¡ðY?X6cšR4jÀk“´t}üªufdÆS$5$½d¥ç²^#²–êš}ŠãÖHé—sÛNšIépøc³K57õ[f8ÛŸíé<)?ÊR 7Ìz2u€ZoXÆ1Ø…”nÐ*yKá"í;(Ñí02Y‚‚á Àc·2¯ÝÍ@¸É²'ùÜ%YvnÑ®/°S=˜_`€Ì–b[€H»2Tã&­ ýj°FŸÕóhDXå óª©1Ö۹狷°iúEXð'ö)‚6: S¿¯ˆMÜ£t¬†êùm[ÈŸ+$× ÏGȬ!GÞz½ïº+1ŽÛŽg>]Ùa½±6%J'á ²$ã…Œ\k –>²@ÞÆÿëë+Šª±ÆÄPz]n|fBKŠKUøžõng³þú¯ÿ¯yÍk¢–§ar™æf*žÅŽnÃù“O6Àù^P¾ŒÖ@ÏÊ]96E¼LTãø›ÙÄ6.^ÜŒ'–âqóLÍé˜ä-oÏIjÇ5åv›Éd‚/|á øú×¿ŽµµµÎû† ,Šˆï“ùÌ5ˆV~ÚpÝöµ.HwÆ™Í*¥¦É‰òÆ.1“Ð+É8Ã(#ä¶<ÍÅÏÉ?ej^¶¹kãØÛp³ jo¯œŸÆ^B•1¬ëR°Ò‚‚Ã.àáÀ¶ñKJ«Èv'ºÉ0§Û¡ññt²V­3Q”FÍc@hæoÊ IDAT¦Ø©e¶±bHe_ävL-ûK¡Ó˜R.ÕSÚ$e|HïÑ A/l¥£š•r§hä¬É‚ÁÊe2èÆ4·Æd2ƒƒ°³@VæPÜ)‹rZÐb/ÍBRÖ{hÃQ³eÙ(Ã(Ë!Õk|F„<ÕwÃø jµ6ºiço²ÑKÝf‡]M£«j¢¬*ä£Q¢ ‹lÚÂm(Žu£2•Äêá.³ˆ¡[u4%±-Ý´ ¼Ž Õ¾C –…~¯-]sõ—Þ~‚•‡JLlmüF$©dTgÛ/Ë £,Ç(x˜˜M±,Î|}}Ƙ(ömþÚ÷¥~ûææ&¾øÅ/âÓŸþ4Þõ®w¹Ä²¶®ª ¦ªPTE5ÂVõŸ¸8ÿ7œ¹ö 0ÞŒ6@ãu ß@QåÑ:²|,èö@§ÌŠ¢ÂÚÈÔ¨a*äãçóØ\>Ž‡Ë·c:¹ë\FÉk2\ÆÒ­Ñò÷ÿ÷ÿ?iolÙq]‰­yι÷¾¡æ…*€˜HŒâJbB«©v·²”²ewwXêK_úòC¡Ùákh(ä°Ú¶BíPHá%v³IJ$’ #A€*…ªPÓ{õ¦;œsrodæ9™yò¾mF«Pï½[w8'÷Þk­½æó9VWW³ïK®áñÿó*w &I– óœÇ«‡ºR}=õ€¶ðš¹c!÷“‚‚Öd93 yó˜èDò!Çèjò˜C?én}3 ~r4{[1 ßAI&²Äl&là…£BȲDŒ$ü18ô1‘g¦q¾cù½Ù"Úy—„ëè®þ¤ˆ“SA‡)Š$iHÕP<Ä©`8¥C‚)nY±§Àøjʱô`uE‚úfL‚P‹€\ ¡—ˆéÄšñÚYîN h<ï5.K¹oOy ‡¸8€‘뱈—_3]9Q²‚2­íT­µB¡”ÖЄ.¼$‚º%ìÖ’²(IvDµFÉzЇ®³A@L‹°Ž$xZ½v§ ›‹t_²ø8óp¦‚¡õ©þfÊHE$Ÿ´'/Ðp>éoó0YÅÊV”t(vz‚ã?|NîæP#X4+Z¾y1 ö‘Ž9Šº®#Y)ÕAÑþwcLô÷~zìúš1üÇŒ'žxwß}7f³YÄû_µ!˜¶Å)~÷•ßä@¯ET#ÌkÂû—o£¯âìÙu(]ðp»J’iza  \ßÜÂÎÖ6ÎÕ8°bAâÁ‡ÕÿïÏÿ1¶ñ°(Tï†{ˆ*-Æãñög†çŸ“ɤƒæ½}ì²àÿmÛb2™ä®€Hó ¡6»¯Èìl`ÅÛÁÆÜU4ñï³âÝïÛE+ Ë‘ê ùÀ¯ÀÝx®¡ùkœfàÒ–±}  W^Ê€÷,€áØ »·|íÓèöõÍ|\”E”å'Z;þ…]οøvääÁ% x!e¡PêÂo7yëBÅá)û5™à4 4E)Ò.‘É t¹ë‚a¹÷èq°¼ùƒËb÷¸Ù¦€Ròos¿‡Na·îºL¡$a‡‚&“•¾_ÜÅk”TúèÂêBæ)/ÀõÏ“;?۰ت 'fQÁn¼°MÐWE°Êf;Broìî¼ÁÎt%Ÿ¥…<ä›Ã©ÝóÈþëEQàÊ•+øýßÿ}üÎïüVVV:/vfFkóF¡l?Âýø:ΔoB•#@­Uº.\ÚÀåë5Ž;ŠÇ?q E鋹 øsŠÇ‚à#Í8yê0nßÞÁ÷_»†)±2)™`µZàÁö/q}þ>ýGhÔipâéßx<Æ;#?þã?†ÖUUEEÜ»Ìy³œ0&Ö¿§"ÁØáAêo&ëþçô[ý`ï:ãÅz¹‹&8Dyéx.gn»Û@tM\&ÛŠƒ›ª;Q1‹ÓzE˜”76wÁXë¦^RÊÄÁÅiæNx” YÊ}K"œÎÚ’‘;M㜬þÿðãËÖΘóE[ý†p$ÛÛ@(Y=“”~X~°Ò`±+}¨çÇ3Ó¸8(KÁ°3@‚¢WíÝÃd îC¶ u!”’ý~»°d§qûXÆê°ÏÚ¢ótöÓHß1M/à ÊBC©U©Ü¹`!s Â}$,Ð û± Ì~lºŸrr^H %K|ù²kœ±. ˯-Qè sa•}¸wûœŠˆÇ¦ÆFQÎêF!ÌñÞx± !×%?/ƒ´ó0…(»Fö%ÑÉj]wHÈ)ûî5ܽ7Æ*f«²èž‹`o^co¯±ö›ÒCè^Þ!®Àû ÞG¥†ßBëUUᥗ^Âþáâ7ó7QUêºAclZo_ƽô·8Plj¨­a\¸pï^mÀªÂ¹sgðÈÃ÷ ý)ª8H2{B=lT ~ò4ÆE‹‹ï~ˆ®ÞÄÙc>uvŒQU¡ã´üëÍ \×0¥O£U«ÐÞ"“¥[FØÜÜÄïþîïâúõëX]]í^¿/àaèŒÏ‡÷¿û`˜ŸMŽÀTŠ@ h­¼.PÔ_§ÊÅPrp#"£aI yw]²<œƒô(áÌý÷›ÌáÅ<ä¸ÂSc¥4xêÓŸÀ©“'pûöþíßþ¦8åÚ<ôžƒémHDë G‰™&µE¥"TãfÐÝt"O§GTì;ïËOÌó–Á¾÷;³ cÅÿ–DI\ÁªS–IP&áAA‹è¥îMIƒ~’Ð'éÝÈB®ÔtÎïbKÍ€¨åïà@ÉO ò!©aJarp_H|òR0}ri¡Ù§;„™šP eQ¡(4J­íúÜG_Á»g´´¨ÉòÌûp ˆ”ô"™ ¾ÕŠnlŠ2âû¼ÁЉI!7KØ¥dîÙ°KFïñÅ€»I$‡ƒsîzÞ°$S`§š_äH艠+ Kº,·í H?Õ¿bw:/í®PÖ$0þð‡1@K”„íé{³Ú© {ØÞ _ÄýÄéÓËʲD]×Ñßy=¾F#|ó›ßBÛ2þ‹ÿòŸâÐÁu¬óœägq¼x…·W4Á‹oï`c8|ä Μ9»Ï‚Ö ÐP”.–cndPÜìÎ0-Hj¸|ÝÜÅÖö Ÿø &£„ ë´‡ùwØY¼…Ûxµz¬Ö@TJ¡,4¶¶·ðÿêÁË/¿‚ƒY.Kk”~"/½¼…- tÇkÕo°‰¦hážCò‚ñXgÞ‚IL[rE:݃BY(Ë›G+1—Þüœ«Cƒ4Æ¡1pòÄqç)°ÀÏÿìcøëg^F"hU‚Ð)äÒBj–ê„"X5;éŽKŒ$…þã ÝxxÜüÕ…‘l'XÍËît6hÆ8óþwk],NŠiû¦IkqCR¥VÔäZM±AÎpå;¿ÊE+¯û™K¢huëDQ>ÉþA©’¿ã™¥Çe;‰Q.-]þ )òs½ŠVí–qèí vU ] ,\rä ÖXbåx€,Y’î1‘¢q¼<Ù׉| +nè%whL“ïOž™»Æ…90§è¬höçe„#ƒè_ÿb‡#Ê(—ªŠ‚k€’.”¢ÍîÜ–b_ÈÙ¯Ãe!„<÷ßݲþúPñ×ó€õPXc×7wÑÁʸ´jIå“ ¥¢œò¢¨Ð ‘“6 ݪ£†ý]Ádeâp’Ö Ò´.ñÆkÏãÍ{üWÿá9Qo¢TÛÖ1¨ƒ k£kkœ›\|¨ Z8DW°Þ~s~óâ^4åPuÛÛŒÿãÿü <ÿÜwqìØahe t¡ ŒÇ%F£­±:amµÂ¨Ò,šÀ­`{*Øš‚Ât6íaáð@äžqŸ›ò›¡àôìÂí¹‡¤%â eéd©¡pÆŠúb®”D+l j!oÆį¬N ¦óÓÚ!lpíÚ5¼ûî»xÿý÷qÏ=÷àžãc¼¿e?ç«ï`|ð$F“µ!NéÍwxX_Ž[r§¬òžô“%@^œu!ûNä²lÈ>M‚d$ÛC_=ɼo‰‹K•óžïq!Ç@I–UY2!7±p®ˆô «öR°<*äâDI”[/£,Ï’ÆÙõ\u|sIi¿Ä[]ÜÂ$ˆ X×Anº¸yaÛ¼i±±¹‡ÝY R°ÝµˆæóÚÛyжª®0Wxøn£÷Ϊpp­Âx\……Ÿm›d6²Ë‰íÂÝô¬0­-¬Í ¨g@ÍÁ: Ü@ÑŠ[;•ëI?Û „ Dqy9Õ‡˜Þ1ÎÔ€™Û߹̊[(°r© ž·¿ò]WC°¾¢°~à}ýÞ ,hç`¬Ô‰{O¸*шpø€Á'Nnáïß¿W/Ý€2·°PG‡/¡ËgG…Œñ7 Ùi ÷ÎkT]Š{ÓðR h²ë/Z+ë©N½K”¿;™‡Š„ŒÌ'Ö Ÿ~ô>ŒF#{ø75Êö6´¬`!P[`D6·þÚµkX[[ƒR×qëÒE¬­­§7Ñ4wC—ãz6b¢¢ì‹9‹dȆK¾rÊ@J*%B"Ä™²pW´9«'H¹WI•í|Çã½{£wwÁY—hr:˜¨Ÿ•!:%û ÿGу}œž÷Û''âöI\bïq4ºÐ …C‚ta‘¡B÷1ǘÁbwlj3ij ø¹E"¾Ägc¨-ÈùvJkTšPŽJTÚp_øiûŽ›ìÚa3™|ã‘´¿.©C7†ék„l_ÛÕf~lèkùæOëŽ$¼Ð!XN|l ÑXDq(RÆ\Þsè1û-™ü¡°åÕ…)8á‹IÏ»Sta¥ûåþp¡De×îá„Ïaòû°*7£0@š0¯¸¹9ÃÞ¬Öý –Pª»XæµÒ¥5ÀºÞÀýô>uïjwï&vÞÿçøàî‰Ûŧú^¢ë$ ư㻠Â.5ŠÊ­ÜI½ ú~Š%ì­'³výƒ¡€¥“Ê&6"a!Hy÷=J Μ<‚ÑhfÆÎΞ{î9lll€ª5¨ƒb·aoç 677±»»‹ . m[ŒÇc´m‹ªj1½ù>ÖN<îÜ ÃÞzèH['xlôœ Cµ·d²Çýö€w¾3&T‰sväK¸,é1—ýp@cLg5jÃ}šb7µÜ)ˆ„³û`Ì`Yº¡edŸ$œ9<*{%8‡Ó°éßÓ ê¶ ™k†R•E©QZ°½ôÂ.“ºoJàƒÔ'¼±ƒX_\•R…¼‹U¡:ËëÞ|KÜuáÏt^*Öøáµ*ŒÈ wè™\>”®%yKÜO;í !ïü cfb—t€M úÁzy¬Ú–@ga¯ŠÉñÙ«’²Yá8ÿsÇyø¹E_“<ÌKÜY°¦Ê>^ $Q*ýÎc,,É@D¡??âô¶Ýù·§˜-h¥»FkùGÁ¾OÒ f‹ZiÜ?>{äÿBù‰Ã@100Ô¨/TøÌG7qS\Ü»Ô;·‰-šì§gÿgGÜ¥…ºk  Š~z&ÊàO?·1ìε+ðm/>à #VžLóS¶ŸÔ o¥Ö??=ŸÎ+@U®°»)^Œã  H•îq4‘+ÕgÞù5ðÙÿ [+¯ŸNܵg ~bHÍ¢ãî¢TƒI oHD/ZIDÁô‡õ7Rx¢cPbKL ƒƒÖ:›Ü>ú/^ÄÆÆNœ<‰õñI¨jÞ¿†[W,œ<Ÿw1¶>uo¬60ßÛDµr0šØˆ†k»ÚçFµ KAné-íuœ3Äqðjs²¦&2œ¼’1K–Àõ9¨ÐhpŠ*0v§‹n"Ì÷™Õ»ÌÉLiz–äES~¼ë©S¶^7ÞŸÀ{ÞO–ƒæ,m!,š‹¦í;¥¥Ò¨Êe¡Q–n¥+Zm”LR\òØÎ‚¸[=U¶qW%ʲ@Uh°?³H²‰%IbAý;L½|=˜=C“§¸¤X{©÷MˆK‘ ô,•¢‡ï'.¡ÝÚZ(4M:@qΔ‰í:9ˆ36ìùtZ¶4Üs91ÜðŒ/†=H9׸Þ»ˆŠgžû¡ˆÛŽëc¿Ú¸Ž{P¿ŸÜ=Ê0ÒCAžü¾½µÀÍí)æ5£*œ£·ñT}޵¢á–pŽ¿‰³;ÿ7Šõ»x‹ÕÊsWŒ:åÕáÄÍ^”æ§ä¦‡¼¹µEUÜ/æŽÛºI¯D•6*ˆAw<ùt»W¹7V׺_Z×Hxî¹Èùç­Z7uëþwa[¨ýG ÜM¾™~Š'ñB X´ò1 :–Ã^]9€»Þýoaý lãtŸ.V ("Pž“rP˶8K+ůßåÄÂóãäÌc(<ôÙArëCŠ=G× ŒË[{sÜž:Þ¸ã‘í´Ó¶-.]º„7nàÈ‘#ø©'žÀv;ÁÝB: ¹©ëº[Ùó†<ÕÎûhËOAë 8XY¡ `éMVbG, bK»$:±Mçäƒ2˜%*ä©5jjxÅYr=ûGDÆ’Ÿwgu´¼ ž A²Jï/áý°!%ð à«!2Y@ÙjN^ã”êùÆ$÷ÞP…+m84iñÓ߃b6›áõ7/â•=Ô¬`Dco¶aoo—/_Æt:ÅÝwßÉd‚Û×oáǯ¼ŒÙöÍÎê·i¬®®b<c±X¹ò¸½ó2Žœý)*À®±k½¡ˆQQgúú†‡îUâšë“ÛLqjš$.f’nÔgÐqæKxRÎ õYöµ5³ébß: ‚B>8šƒ3*0Yï~RºrœNÒ¦ko¢>S’’] `õ¤ ™}sÙ]nz}§Ð3rŠâ& Ë4ŒYc°€1‡"¨ÒJ;qk…ª,Ü/Qe~’^è&zH]Ã#©Æ[bˆƒ‡¶ðë,áç,ı„GGNdIû)Ýi‰Ö]2aíB6"Ð î!9Ï GeÐÔHtŒ ³ …Áÿ€Q‹í!=r]XQ†S€w¶s™52÷äLäÙÂ]ñH!Il{ï´vÖÁ*á¾™÷y'Ê([3ùHnèÖÆ ×6÷P7-”Ò¨ moø.ƒÖüFÄîBÆH¿“.«nâÜ­ÿå‘~öév¢I¼Á?÷.«"ÁtÝE²í§ïîïë@e>Ú…+î Ë‘›6Äû¤­û¢NèÊØ"«4`§8 U‚‚Î?'ßlpË·Ù‹à|Sô>ñ&÷E]5î¿R Z@sð\”Éå›b,wOí¢C È5⊺c6°~é°ùÉÿÑ"0ÞíO b (•n¥5Ü)åÎ8C‚°¥œîA+Œ ‡2=Gh»» 9hQïÞÂùóçqß}÷áĉøügÅÚÊ;øÁùhPà­_Ń÷ß‹­­-\»v­s|á…põêÕÎÿm[ÔuG}¿ø‹¿ˆ#GŽàí·ßÆ×¿þuììì m[¬¬ì^+'„R򪌯 ã…™8Rwð;§v¢Ò¯L!–yX8U†Â?‚>éÒ C;3² ò°}òÅÝz0èög”é _ÿE•9†S§¿ËMd\«Œ2°zG„+øŠÐ169[ÒäÑÆr·´µÐø$ÿ'šh"*wOª Ueaô²ì‚~mŒ‡úÔLÎ!×%9³s iJ†„†äœ—–^ äY >2òÈO=ô>¸rïo|t[ðÍg¿ùî&¶··qøðaÌf3L§Óȯ>Ÿã®»î¯ýÚ¯áÔ©ShšgΜáOÿôO»é}4Ÿccã&NßÿyP1²È†kxB~Í+ÏEbî[ªü%rВć”(6i‘H],m®`Y½f,ÉPçý„G1¬¾¨[,š&aÖl™õ4¯½%hIaá}ME\/ž}6Ý|žQwõE<€JEuχƒ2jÆd w ¨ŒHÈM=J1oʈ3NÆ£“ÊnÚLFe4L1̳…Û/ çЦa£µãüv î"'>Z¦xKD}rV³”`ñ©öqøž`0h Þ vRQ‡ÐpÈÔ[^6'Æ€è¦þàºKtë¹µóè±GUÍpýÝqøžÏ:ï~ÏXH¿«`Äi0 §÷w›t6›‰Ò6™^9ÒIz˜!†ê—Áïûrÿ?ëÔLÝÆ@`lWKàÛ4Qã’^†ÿÑÐ9,IˆÉK“ìð „ž€ü$ÞÑ@=G=©JLFeWÀ-GK§@ÿY0¦mÝ}ÁîUÖ±‘:;lß`y 9¶bItîÀJL$Š÷L)Ù)¤ ôú1È`/|'Àl¥Žï%Y’XÇ./ô´¦ ÝÀ†ncßq~ “áŒedÐ|Åé;C;Êò_ÖQuü4K?¹³IcO=e”Áe$ôîMu¬Ô5Æ0®oìáú­)Œã`;›Ï@…ßJ¿”¯”MQfÒð â_ñÝ> V‹H»€˜Ü.@ª„P1£  ˆ.¡´†"Ûñ*bë Ç-D[Ô½’œÞ<„ã¹íáïh2OüEÉMåJÜ$ncP­Â=P·{õ9åHJî›6±@/*äÁÞ<#Iº WÓŠ¾°sáš h_ÔG€žzQ#@WÖü„ä³›9¤Añ Ä3©!® 33„]K›^FjÛ U˜[´Â®€•;1ÉOÚ°ë^šz—@¸KQ‰ØQ”&%A;3 £#¨Í<ßÃîî.¾ýíoãÂ… øÕ_ýU|òž£xñµw`önb2¡®kììì ®kf³š¦éê/^Ä«¯¾Š#GŽ@D0ŸÏñÎ;ï`ss³ÖõB¹mÌæsœzè PT8°¦‡1ӈѰƅ†25>)m…h,4Y‘\XË 5+ýš,Ç&9_äg‹ÆpÃp,¥F fMƒü=äÇ—ò\~+ œ{“ï苸¢¸QBħrkŠErzþ@5*0WWÆ£Q¿ðÂCÀ@„¥GhÒ•¼¦5hZÆÞ¬FQ(ŒJkþDó{”2L=òB!Ç5pdYâ§Æñ¤/9tôÒ3kY©Ý-e ª,Ë(_®ÓhÒsEš†O7nÔ’m 7 ‘`h‘KË©›ˆ‰Þ ït(CÎ’“­göø(¼w°ºÄ BQcH …r?WŠKs;­F²1„œ‚†_âçu‹k·ö°±=³“ ¬+’ŸmEP€Pø”,¶Ñ‚Ì‚‘"û<\›ï9zk#jùµ¦šJi4À@‹µ™¡1%˜ (¥QV…&”P(@Q[°H Ü$E<ËùBËñÍOÔïj#X#ïۮ씎jáI„tÑÎ Ìž@î>M“O©û7š‚Å‚Æte's¡Ð„ °(ˆ´¦…iˆ£/ 1ƒF Å® fÓ2Ú–;!˜9Ѝ[¿a@Ql)Îe‹{5õE´+ñv] ­@Î%NÒ¼ÄnÑÀ ©&wa1»‰­í«ØÜÜÄÛo¿¯~õ«ØÚÚÍ·AÜ`QרÝÝÅñãÇñÅ/~‡»ヒ¿üË¿Äõë×Ѷ-®_¿Ž+W®àÀ\¹r/¼ð¦Ó)ʲDÓ4ñ}²» è N=ð¹€ òŸsjôD‘Û×@‰¥Ò‚ë}åÆHòP¹É(Ëå?6ë|¾t\‡Œ,ý†Ô;-ja!ï¤Ë,V8¦t%צTM·b˜ÄÞú?²‡ÚCÁ1€Qa'ïr\`\•PZ%P5cMy¨8OÕùáÝþ`Û´m‹½ùÜ*à«•*‚õdNxdé7c1¼äVÎ{#2J!ÊØµJ^wA ²þêáÊ/ïçÀNCe¹,õ— CI‚ ‰¬ø/ £û’¶Göeá³ÍJ‘Šßt7H¹Ä³X»ºõ¬”BE aœ@È{6÷» ¬O½@gwZãú­)¶öæ?­ÖAÐ:1 ¹çÌÆ†*ø½xR€1 å|†ÅQ…kL”³jŒÆ|Þ YÔn¥‰ -cajìNöf„¶UP…Æh¤1[òqT…&E¶`SXÐ¥íáîn…ŒÑ&¤äÅE]u½ÿ³˜@m ƒ(QÄ#Þ‡gŸ.ñtšÛD,þãVýóòÿ® 8vÕt1Ž—¦€ÖM+hƒ¶±E¦F©TEƒR7(¤µÓ¹i!¦EcóFÐ',]ÒÉcBÒ7vðN]Ôï\“À@œ9JØ'Q¯’×6©®[_‹L½©{|ÆIÓ.À¦é1ÖÁg?ûY¬¬¬àÊ•+¬>ŸÏ1N1ñË¿üË8wîà€Ö¿÷{¿­5žxâ ¼ÿþûxî¹çP666°¹¹ÙÅòVaD0»ðVÝ }ê¨ãìÂBKÏòå¡\–0iÞ'8|l/º|ü'-äþöf‹AÐJèÉì ¥É/tôžæ*f«á %”eL3¢ÁŠ»V’‚)ÚUïá Ùõ#ÊBaR–+ŒFz¨v¦þý·Ÿ£ Rã7‡`?„9ÌÌË¿ÚëjÚ`º×@+…ɸÀxTA;‚wÖÝ£² p¿ AÉ× óà‚ ÑfäoÆJûÅLÔÙè.Õ‹KSHðY¢z“å÷Pˆ%H¢ËÛW.'AQ'ÊÈòeâ¹ôIx¿;Ñ}@jPðc¸BºÔ«ØJ±_S+´ 윧Zcí©³hakg†ë›{˜Î›¬u!Î9Î÷Ì}¨Ò HST—ºÝK×D°Š¢l ç^­PÍ ‹…&h˜ LS ž;›‚éÌ¢e©°¶ZàÀºÆêªÆÊX0©…òEÝ€…<˜ŠÃ¢%Ü'qWÔ©ç±ùP½’Hq"q\­¿søß’áš$0‡ ‘Õ ç¤XÛsÒhÑhZ…y-˜Ïó¹Á|^CØ Ô“Cei d Ò‚±Ùðµ`w.Àñ/v0§dp06Ò²øa2—ùELÁ†Ÿ¸Ô<ëÆ¥ˆº®Ú+ÄýxF~+F´ØÀñUBS/ ‡×Ñ4ãJ¯ëºûµ··‡3gÎt<¹çÆ;†#GŽàá‡ÆÆÆ^zé%,‹ZWNBAÈJŸÖ'Ó)®]ú~êч"—t¥L:‘N^‘ðàÁñ#òq ½D¢å;rŽôI9¬Ñê c6oºO·w[ó“t¯BN‡Trø:ExŒ¬(y?Bàs1 ºƒbÉ€Ð`-‚méDÞ¿&xè²Ð˜Œ Lª “ªôÂvd÷¡$ú*.Îhßw§ÐÿMÒ÷6ØìÎkTEQ¥1)«^gE®Iä ùA4ÎL‹„î´¿<<~U”™ˆ—cײÄX(l—ÆÄ9”%L['Ä®oCü]&<Ë>é,TÌuGµÝpP„hݺàð /",)×¹wÐAØuQ® J.iîEUì>ú HÐ¥BYØu¡¦eÇ™›Û3ܸ=EÓ˜„íðÕš»nÔOR Ƹnz´™ÑÖÔËÞÅu½¥7M èC„a¯üö¦(5P Ûð‡V£`k±ÇµÁlj°k€­›‚ÍãÇ =\`\ Ê’¡á…]œXÂJlDª<¢âLñ¤î±Ã‚y¸Ó°˜Gj÷´hKlO £Í†”˜øóWÆÒ°|Ë u­0«éL°µÝ`w·†0c\zÕY½³qÞj7óš±3eìŒGuâó3°½š›`é¢>8UHºÕ©¾ûA§“ e½´ËBA :Pµærs§$ˆiA(ÀÌX,Ý4nŒÁt:ívÉ›¦Á‡~ˆ_|@Y– "\ºt O<ñÞ~ûmœ?¾Ëà½â®ˆ ¹‹Þef|téGX,þÊêÀÐlÃUlÓm‘d õà5 6¶²”%Øç~Ê]ðÒ”Ú.2™÷;ÀšÈt²‘€ yü*Ô­u;%úu•À¥„8èBíÇÓP%*ôŽsg"£s#ò4¹ÖN‰>*±2.­µ´‰—eeMò¥,øã²+†Ždi!OWÌ¢ÐA¿<œ×…·jÓ¢®[ì¢Æd¤0Y(¦hi!OÔÜ)"i2ÏÂ~³{vâ–(ƒd¸èÌ)´Ž¡`16N—}уá2YFzN¡ »ä‘‚ˆÒ@·*+J ¾Y–Â/”z¹»K3c×Nî±ú½W«wˆ;K7Õg•†¸E+ë³~cgë·v1«ƒŽ˜‚vŽ1Üßñâ‚"‚=Eÿ™°Hçë-n² ­?Ùˆ…X5°2.°ºZamRÙM9ˆ[ÇÛ7þ ªXCJ4ªBau,hk†Yì.³š±·#ØÞæ§*Ü}¦ 4b(o?–rÙ•gº«à tà£î » ÆžÎg¿>=¸s…<„æ‘ñ×fDòW(‹:D0¯wºb[̼&ìì ®~4Çöv­€• ¡šÆ0r lĆ-æ‹V°;lìøìc×µ¤Ï8÷kGž&7îµøÐ›ã¼ÎEr´²Ÿ¹ÖV÷P6CCõS½{¡.ÐPÌì·E]Ûb>›Íж-yäœ={·o߯÷¾÷=¼÷Þ{X,¸té^yå|æ3Ÿéàø7nàÕW_ÅÅ‹»xcŒ{|»õq»éßc0¿òc<óÕ¿À/þg¿ñ¸P`Û“ßœNžgÌØÈFÉtväÜdsÎd—‹¦EÓ¶½íj“‹ñУQq‘L$iÏžšøêàeWK0zq¦(H²Âwâǹo¨Oæ05]†·Š.cÐk¡ˆMÒȉ¾^â¯_K-k3ã2å¸LÛ9–e•q…ñ¨´Jñްàý"6}Z¢dõ¨ÊÐ0›)A49¤bö;8ó=^èFÊ6Ïbm>o0›Õ¨F%Ö&ŠBG–E…‹1™šzÄ¡ªJ#Ü-_.Ÿìvæ‡õN2)r9h<ÓŒ¸óKöU°c%H>‹h öìçgtxF8àÓ¥×3 ôf¶Î¹"Cýœã°ûn,ĽÜ<ñþaçöÖû?Oç5¶wk,š6±è M8°2Bm³yº §„dÏÖ?.9%»»9É9ÿ¶ûÛ‡×Ç8vpVíͧ]lܿճPŸü Ü:ÿ? TƸ2ÐJa\Š *€qÉ(µà†1Ø®óã­·<öɱ]gsð¥ÜtÖ#Yz¬3CoÄB¹”oÏME‰vê}çw4sÆ‘#]Ü+³m+h p{Ûàµnc{§Åd¢°:&^­ VÇ@UZ[W*ÂÚvgŒ[;ÀFù0V>óßå=L‚ŒDv¾¾`´"h†]W$WÌ­©†rFCÖÓ_\c)ÜìÞó»ÓY$Hm3‡YLÁ`6›™ñÐCu“33c<cee=öNŸ>—_~ãñ{{{xñű½½Ý­¤y›×°p§¿ûÉ<ü{fAÓÔøÁs‹{z4Þ ç´&qœb%±Î1šèû©Ú‡–„=Ð>§ÛPN Å7›5`nƒ45Á¤µXü<—95ð'Z§@ù‚«â‰\§°¡Ïï|×­aUQ&c;‰—E¼v©t–ãÂ÷¸ìŠõIuœ˜ËÇæZР ˆ‰ha7A“/CX›h8Ä’3ޤ;Lìwªé‚ý¹ˆ‘aÀ'ÏFzå{¾4gDq‰º‘ʃ,ôÔ´!§ÝSÉÚ¨ýÿÖv§ ìîÕn¶çÓ½-kÈÀ”…B±:FÛ fó Ó½Ÿo¦ë•ŽœàèÁ98±«eZÛC<0µ±]¬RCÙåáÇþ ®\ù>ÊoZx(Œ\ÒѨ ” )ÁHÛ_WÀظͨ‚ßÅ5…ûï©Ð¶¶¨K›HžEëî€ØÉ¯/êÉÚä¡iØ< V4(>Úñ(FF à÷AÎÚ•Ð2¡Ât.xùµm\»Ycm…ppMpòpäceB(K‡ Z4F°3gll3n¶waü… =:ÂxT‚H\¼€…Ð £ M‰¸ïé(é~t!R8ñÔk_½µ}¡“ëŽJk¢S*B1J%—‚ª \¿%˜Í¯¾¾‹c‡ãðAÖJÌŠ/Tì’»::>›B(ɇ³”³LÒ†ðþÀ1!¯‹wd ë]ä `X¡5„Æ(¼úÆm\¹:Çd¬pä pö”àè!`2ŠRº÷ßÁ¼öæ‚ÍO`õéßEqèÁ}ìž%º‘Y€¶1h CÄXk_Ò(”²Q¹…‚‚…Û‰2ОÏÕA²ÖYªZÍÈlgÍî.‹‹8€ܼyÓ6EÑqç/^Ä<€k×®áÕW_íLb¼õëpêŽ zXÄý4@ÌŒ­Í›¸uí*î:{Ÿs,âß™l{·AÄì²´38êrB·ð”°ã…¼Ÿáæ³&^™ c…á($Ô[ŒRRÄÃhÐNèÄ“²ÅÛF'´&¨X„`<²¡&#— ž½³~ˆî’I*\­„E‹€L,&Á×6†­a‹x1C¸íšÚÔ_„ª‚)ÝßË6b(a£%“»–dÕSÐØ¿›Í˜ÏXWX™TÝÆSvh4¡ð*%>úhÿœr0ퟎ¾‘•t%Ž–‰ðî ðš‡ýRãpçM Å™½÷Ú<š®døþ=+rc;Eþ¹Ç£vâ¶€+ÄÞ>½¾Ð´»Ó¦óbó/Pj]Zµ¹Ö6ùG»p­mœd`Ï5ŒtHc‹ºAÝ V'%V'#X©PÎú•aiÙÇh¥Ý¤æÖ”œ*–T\ðüÍR®Çñ/ý.6¿ñ/@[WÑ ŒJò¢ Ð%¡P‚R F%P•„® ¶·x击ø¹¿wJØ9”õϯŸ‘T¥žáÖC¨¾3ˆ¦Á†Âß¡LQÏMçÊ(kpA!wйŒ@Á0¡e»‹þãw÷ðÎ…8zHpÏ]ÀñÄÉH uo~bŒ`ÑÛsÁíÝïÞ>ŒŽü3üôñO/_?éüÕí×½·AkZˆT¥…ÔµVPÚMç®ûvŸ`wÔû=înÐn³Ï€cÓ,pûú%4³m´m‹sçÎá¾ûîÃÅ‹ñ½ï}Ÿþô§1™Lðío[[[xä‘Gpþüy¼ùæ›ý!Àì9ˆ=œÊ}aŸÍf.þ²Ât:…ˆ ,Kë,7›bgk|}^–`Ú]&³†Ìz„¾ØëŒ=„ d×sÓ`œ)=< 3êÆôâ/¿µnl;w¿.|”rêÕîÁõ¡•BQ)»Ž¨í½JAè ¯ŠJc\–U6s¼ãs3Ùíƒå‘L…§À0ÆçʧÁW阙»cu©¡E£Lì? ´­AíL—ºØÝδCq£äʉd ¤±ëΤxmxYd©°;]`6¯q`m‚ª*‡Ró%4mÉKwÀ­ùc`A¼¸2æÃàYësÉü7-i~Rq"É 5¯nõJˆB%f¯œ@Ž"ÿ‰rïxÇÀO±ûÌ$ëÕàÀ÷OÝ›aØ ^´vÍ­âX98Œc÷ð Pñ4:àë"YVÇ%NYŤ²‡ša¶j ¾éÖ9•Q’r›Kä`6{ã+ß,8)6 ÂäôÃ0?÷¯pñ¯$7.q`…€‚Pj»¹Uh`m”0*q \þHáýË{xçÝ<ú©0l ”@È ·\`'.ãÀ תõ$t~YAv„àH¸ç´àôQW̵xÔ-°·¶fŒÍÆ+·Îá»? T±Þ칕HC’ÑÔÁÙ´-Œ±©zZ)èB;$Ä ÉAÐ( ìˆÈ OD,¼)!§.‚¶©ñÎëÏáƒw^Æ™3gðÄO`ww_ùÊWO=õæó9þæoþ§N©S§ðì³ÏâÆ_î u:¡{>4‘ñ;î£Ñ¿ýÛ¿/ùË0ÆàÉ'ŸÄÚÚ~ë·~ ³Ù J)|ðÞ…d1!Ö¤Á$¡@®7¯‘üaYÂÓQ¨à'(䔡ëÆÚú*PVž/¨`o‹å½¥zFZ¡pkˆ½>´_åñ¾ã¥ÖW%Æ•FYNXP¯ uÛádI¢w]v[éE ‰¿GÕíE-)4áš^UÚ¨TŒBÓ¶¨ƒºiѶÍàCP²< Ë6 ,áܘîÕS}af ®ܨkX`2®0ðvãø3ʾ%ñBð÷%Zм®< —éó(z”N<7²Yrªäʵ,±l÷B^Zr.gÀ‹\×lØfQ¤”OÁ节©9ì*#¾œzs~Ãv çZ:±Wj KªOS‹$Ó>š‡^TJ)¬¯¸„¡Rg>/ûïhEPº€1î@F nHHAcŒÇ }² mØÁ1|wë`Þ<‹O™ë0mY%¬ŒìËÒÊ^ÐU ^JŠðö{ ^~ù:þþÏ߇QYÀÀ@;mmðÒ&¸ý·¥º‚tÌ IDAT§D†ÓzRj—‡aÍËH3J¦õxïrÈBïv`0PUâü[7péÒÖVΞ"Ü}а¶j•ìVÌ[`wlï\ÝVxîÚÃøÑÞc(«1&0hêÒ3cp‹:/ÖmITeaUÈZA‘ é y'îáèbq*r¯ýpb9pãêe¼þwßÀÎÆGxâ‰'pÿý÷ãüùóxíµ×pîÜ9<ù䓸pá^{í5<òÈ#ÐZãßøvvv²Jöe¹ÿoÿýD„••<ñÄ8yòd—ÆVUÖÖÖpìØ1¼÷Þ{PJὋ籷»ƒÉêZ"tZîæFÌÙ!uœ¤­Ѫ8ÛÕ\!Vq$?wsµk<æóÚù3¤}$õŠs ùDûÙj­-µJÖÖÄÅÛm†qYbTj›(æ¶YlošZé%¬î½ñ¼Kà´ìœ ”Œ ¡èJr:—>Í´;gBBê3g7UQ * `2‹ nÌÖM,,–Èû=Fäã¨Ó"6¶ä d¶vç˜/, _(ÕQ1ì<4¿!ƒxe/ü~¡„ŠÌ´&|'†[ö‡RÙQJ¸“Ó%$*vJ׸3낹¹j@Oe1z¶èT¤©ÎÒåÕRnB 4–Ê*‰[Ã.ë6/½÷]ÉÉžI˜*{ƒI˜Ä¦°2*°2±7¤r¹\„kW¾Ü_Û•¤Mk`Øô b(…ÐûIû›ÜK)GäþÌ-¦rÏnþ¶êñ9¾„–53audר ·&UÀú*pú80¯ÞùñÞ|sŸþìÝ`^@‘±¢?Ò®x76I͇= hi ·Ì‚)… ¢±,FA¢ !#„’\u‡°¨¢çÍ©€@£5D—¸~}Ž×^ûUI¸ë8pî4áÀª¥#l#Lk`glO Þ¹¹Š¿½ò®Ôg±2&(2ÑhÛiPéÑs †a+jYPÚ…ª(ç=m¯ã°u ú!OyQœquáÁf˜±sëþî{ƒ¿ý*Ž:ˆ§žz +++øÚ×¾†+W®àÉ'ŸÄƒ>ˆï~÷»¸té~ög»»»øþ÷¿ÅbÑ혧ki¡àÍ+Ö±mÛbuuŸøÄ'pß}÷a2™`±XàÊ•+FÖhB©ÎÎ?Þõ«—ñÖ›¯à§ž|j š)Ô∃) ;?T÷;%‡K(ˆ“;òΰŠ‹Ep„.@)‹»¦ŠJiç :ª€ {ªB£ªl É¨´¼£k¨Ÿa²ç4¥O¸—5‡¢³ÁBONü—ì9wb-JŃÉV í3Q°û0ÂÜV•C(kEvï„qYaTX}À¼iP7-拺SÙ/E èãqÖþ’’AóM¾¨ nlîâÀêãQ¹?lï¡u‘躕ÐÄ<ü03³^¼‘ÅQÓÙ)쳂ºÄLI²£3>^‚JHÊP7Ìe±]®,õ²LÙµ57KHo§qKZpk‚‹¼'ì)0s£’œyt*î»ó8ª4VÆv‡ã¹EâlõôÖ¤%8EUjˆ(4-[~ÐA°á§-˜ÖV¥z·0ÏÓ„«ió˜o1—¾»ñ$nÎVñÔ]oƒÙ 1ëc`RºIÝñêë«À]Ç »{ çô!Nœ>‚»ï>à ²Éköw¸ÿîC[¨çØCþgäžõqÏPÂÎ%êÒ…®¸©œ WÌu÷gý3CƒIcÑxéÅ XÌZœ=¥pî4áðº Ô¶ˆ.Z`olÏ·÷Ïx ߺò)ìÉ!¬ÛÈB‹A[רª*Éçö™1nºeAYX¾\¡Ce óIà%r›¾1é Üúð]¼ó·†Gú§1Ýü'ÇÓOÿ®_¿ÞAì_úÒ—pðàAüÕ_ý‹žzê)\ºt /½ôR×t†0{n:÷“¸ÖÄÉ“'ñ3?ó3xøá‡ñÖ[oá[ßú®^µInÓé¿þ뿎£GâÖ­[øó?ÿs\½zEQt÷ü3_u:Ì\r, qÎã#¦Ý&†‡ÖU²ìmvs>)QÏÁ0 êÖš•7öÄ"n¥E[¢ÆºÀ¸ÒJ›v¨T4'Ç(º€’s_ˆÌ&eŠŠÊ1Xœ_K˱[–2b?âÄÒrNî&â:Î[öU]2àÂlš°™ ¶ P©±6¡i MƒymµOǘņ3K°fáÄ/¢í}sÃ]1¾½3Ť©p`uÜ EÒ.†²,#EÈMžâÍ}%è”'K?‚áˆgóJrQ¤p¹,Ù¾Ñê!VJÁû'™-¶+‚nH)ü‹õ·…Ñ]Ò‹‹?%n»ƒ?í.ÓAo`ÑÇé›ßÿ‘§LFÆei÷ÀÃN%7‘ù+”ƒÃ•ªJ™ªÀ ­;†Ì@¢¬©‰¹+Ê\"´AŒ%Á€ xeóA\Ý[Á?¼ûM<|bm«aV€I”°MD©‡Ö³§ »{-^ú»‹8|üóX™¬ÀH 틺46 µ›Ò[t¡Ä‘º=¼P$OŒKFà&©ï{pdE!/*žÊ•¶üyWÔ‹ng)ÐrèÞzý2®|°‰ãGÎŽT•}ƳZ°3vf‚K_{÷,^½uº¨0µª½¨çcmø’Ñ+‡uaA>ªÒ9Ç1ukÞ,ÅOÞâÖÏüX"¤ ˆ±½y?úæ_à·þ õÞFã—ÿÓÿW>üÏ?ÿ<^~ùeÜ{ï½øÒ—¾„ÍÍMüÉŸü N:…/|á xõÕWñÖ[ou6®¹_~7Æ ª*?~wÝu>ŒÉd‚_ù•_Á/üÂ/.\¸€gžyW¯^Åd2Á×¾ö5\¾|÷Þ{/Þÿ}¼þúëÑ”çø¼õúKxèÑÏfŽ ÄAUvgÎ$OŽ<jz`ºÃnÚü¸ýæiÝ8ò LÅ™ÀN̨”?[ìU £ªB5Ò—E r gÓ¾ˆ‡ô…"Þ´>Gþ ‰Cx{±$Ó:eEéü&úÌ»c†Rþ°ZР‰Hwø;à ­‚‚ʏ"ÉËùŠû¯•†.5VW`§öºÁ¼nœ&êÃùçþ~ô•ÿ ³Íë8zö8ý3a1ÝÅtãÞxó<¾õ­gðôÓ?‡Ïþóxýõ×ñüóÏã‘GÁ'?ùI<óÌ3¸|ù2ªªBÛ¶K‹øh4‰'pîÜ9=zUUáÖ­[xñÅñÀà‹_´irW®\Ö¿ôK¿„×^{­+–¯½öZ‡E%±ùFèßÿåŸà¾O=­Kw5ôd&§Å/)ø"”WnÕO¸ŸœRXÅ©Õ -,¢•¬Æ0LËð– V™®-µF.ëgT”¨JmwÁ«²›äsE<5×@Úìw†Ná Ð7¾L˧m öÃié„7l‘BÚ®kŽd‰lY%’ûAÄVZÊ[Ò¿vI²Ö½~º+ƒÚú²P(ôk+cÔu‹ùÂw 7¸/sN&ƒ²åûº5¸u{ë«+WzIhIå>"zÓe¶oxIù¨DôŽûÑEaÓE©Ì™ž*£Ë;ÐG;õûí¸‡Ý[$½hŒ±E¼*ÎÂížY³a!%„^î=0¢a2*1U(tr ¤Å¬pÅÝÇ®¶èòÌý/J¹…¥ 7!O2½‘ãóš½¾A1×Q1g*°¨|ÿÔu‹ûÏΜVÆ@ÃVž=|¸Iø·çâ™÷NiŒ•±¥9–M³ÌŒºžÇáán¶´£ØZâb‰ÅBê†ýgfz®„[¼ýÒ³xã+ÿ7Þ}‡OžÁC¿ðcýèI\ûà.¾ú"n]»Š'~ñŸb2áܹ³øú׿Ž7ß|O=õŽ?ޝ|å+ØÜÜDUUhšfPÈÇã1N:…{î¹ÇŽáæÍ›øÁ~€>ú³Ù eYâË_þ2˜?üáqûöm¬­­áøñã(ËmÛºˆ×b_.¾õ:^øÎ7ð…ŸÿÇQ¸ÌÒBí ¹ƒ=i`Eà-žã›”RÙ†Äq¤Q„2z i>¯»À»¢°®E¡1© ”UQY *u—–6™QÆœ2X`£¸d«}–†R“ŨMÈ´ Z÷ÏÅ»¢õû¿ïÊž}q8­»®SçN÷øi'@)µœµDL !E‚È`TYcuŒ0›·˜ÍîHB* ‚™‡¡Åy~ÿ=Æ›;{XŸTXY$rŽÔˆ’Á$—MãËà‡$ÉÙ%é‚4¨EM˲æÂ» †M×’´½¾›¤åLAÚ/&N˜Ðáò‰k¤zïTÀ½;O÷,Á â õ²èc,Ú5ж¾s’>©¢·XeÕˆ’ë‚^½+þºMe©J¿?Øå¯3 üºd:4M=Xoð‡©&†!Æ>:‹·Æøîû_üÄŽ­‹1au,¨4°¶œ:lí^zî‡8râ(Ž]óÜòm¢]Q×·ö—(»ÞÆ­âárÕ‰ã©M´‘‹IR Ö™=ºmIJ¥€¡n‰|I¨‰„ê)Ò¢H¾@Ñ‹#b œê !ÑJÇf6f! †ô ¡ù„24´LÊZzÛÉ(üî¢å1[+ñŸNlä£É.>÷,{Ö´h¸‚Þ2”lèë±µ‚³yóOýܧ°­`aKߤEhc:ÖQN¸ñ”.‚‰]ɘ-fŠýÉ0H’SºH1Ø1dhÑŽ<ÜŸÛþ<(øÚÂӬ׮Lsêèe*eX; Õ^¿˜×]ÍÄ‚àû'«üðì 7œÊZ[üÞ'¨f|èÐÒ4LT û–˜Å¥÷ï îø”¯gWÀôÄ3W©OžãÆ©wÙv߯vÝC³ÙâÌ‘w¹qñ,]]Ýì}ô Ç62}í*?ù³?bÇ㟧`{÷ícff†wß}Çqv¶ §§‡õë×366Æàà µZééiΜ9í[·ÐZÓÓÓÃsÏ=Ç®]»X]]åüùó\½z•©©)fff8qâ/½ô£££œÎL•yfç,ÏïYf¬_Ó]ôó¿‡úý¢~q|Šãïá¡OÝ‹ç5‘AÈ„„ Üã´ ÊÏÝò'vü½PÆÝð,)rÂé cWnîÍmƒÅn§´æ2°×”¸Z¢„ÍÒR“÷ß:ƒë)Ö úýyÝÑ¿aó‡ïôrr¢›bÑ¢\Œw´í®[ú£Õ¨%ô¬±z&y€ùºWAòQXZ,/Ìsö¿äȾͦ½{yæïý6¶m±¼¸È¥³g¸rúšÝûfÃŽ»©7êœ=v„é«ç)WºÙoÃ7¿ùøÃ?ü·œ8~‚B¡@?7nŒˆmõz‰‰ Ž?Îôô4–e±víZ}ôQúúúx饗xñÅ) \¸po~ó›9r„®®.lÛæüùóüÞïý…BÕÕU¤”Ä6&áÿ[­]]]Üu×]T«UvìØÁO<Á–-[¸:µHÃ0È;*  ä'% b‚HsNC¦yŽ<Í  ó‚å{  2ðð™ìMÇÍí„É:Áê2¢ËË{þôü’EîÐu3Ë̯qªWû»Á;è/ë,4,Ú@ÇÚ(¼ 2”Næ:…RDæiÚ”Ójø î—!ë3~±j_‚Ã÷•‚ž®"ÝeÛ/ìž2WÒØQ·ñÔùÕØÓš¹…Uª]eºÊÅä²\gÁñhëØV ySyê÷\bwÚ¶/Ì·$âË®3hr§Õ¸0lnTÎSÈ•×E͉ÿ‰¸Ni)¦H% )ÐB%LlKR,Ú”l;*~±[Sñ™Q%w‰o_dh'¦ÿ±2#Û ‹D¡s/‚ÙÉÐIÊößÒž§Rt†ø‡Í‚Þ&Ž¿®)يņäÛðáÕ¿pÿ"nmÑ_öíbGaqNù˜þ¡~vîÙŒ«š~xŒe W]ðZ š ›~q†¼-Ê57òÍÓ~© išˆ÷åÂ0Š‘ˆBPØ‹±d͸'<%ð´Äq>Íô­úƒ`Ù°ÐÐüð£ÿñ½fëEºKþ:BkyGEÜ„•õºÉ“4šódñµå:Yé ©Râ´>~ûGûë?fîÚ9†Ç630ØO£¾J÷èF^ùη¨-.°içvÞ÷ ²Xâ™?}œJ¥‹»y¤äÈÿ’û^ø2µZ½ûö±yÓ&úûû©×ëŒóÞ{ïE»ô±±1žzê)úûûÑZsýúuFFFxá…(ü׎;øÊW¾Âûï¿]—ЄÆqœ€ &P{³ÙD#ë·qàà!½ÿ.„LMM±cÇlÛæúõëÔWVñºmŠåÞ”´L mÜ¿™ÅT$ –Ðs;PØ#™e[‰JúÈ’Ž ]2H³ sÒ yÛ‰sÏÛ®§!x-²™ï¡­ì5òÍPºmR™Î£W·áʉ»Y$÷¦´Té_ŸŽF…–±9ER¤€v‘†u; ‘K°Ò™J"„ «R¤R.Rk:¬ÔèÀW^´az;Úü—Ñóg–¥Õ:®ëÑÓ]‰Øá"@¥%þ¥ˆÓÝÆ•Í(x¦WNn[¦«ÃêÜÉÌĹpªíàtG¤­2±á£·Í¥Lœœ)HR'D GI±$)Z~áM«I(É@D ?EŒÏ(m, #e!ÿ*îÆ ökZôî~„]j ýY…\ƬÀ1Ìð Æ'š5ƒ‚ž.Ly°qø¹-5ÚÖœ™*rþÇ<µk…¯oEÑ åsÇû«åÈŠÕSO+”ë'ª)-PއBšim9—N¾Ç‘¿úÜ8y˜þÑõìúó ¬ÝÀÔõqþöÛÿއžÿ{<ˆ-ƒë62~ñÎ?ÊeÇ}2´nŒ/0qá4¶] µp‹øßþóÿâÒ¥Kܸqƒ••z{{ã‘G¡§§‡f³Éìì,§OŸfjjŠÅÅEž}öY®^½5+RJ ……BÏó¢ÈNÓD)4q˲xä‘G¸çá§¡÷.úªNssò£££X–Åêê*+++ÌÎÎÒ?Ö]êÍL¥É>/YLC˜Z£ -?LÉ V  ·²FgÑûMIXÈÃ×Õgµ5aÉʛȰº0ãX:qs¥$²ø»HÌ9t›ÄôÙÎéͼn9fL™¦ ÉŒNú° së 9'–ÐÉô6­“%;=é)’¤¹ü ÆEÇÌó°˜Éœ–"T2©Œ†1yµ¯s¦«R R¶©Õ–kõzÕ¤,HtnèPÙʶÒhÒrý½ÿ.HÓ 7iD)&û¤É†¨tã¿ëà¨óf*Ý!{Õ|è6 ÒpˆdhçI(t®F¡-ÁÝm[’RÁö n9·µÎ88a¤Ž‡Ý…N»O˜˜{,uÈÈDâW $Ó™&Ñ@š‡“H,‰Í]ð©ÒKèÄ¡bI‰%ÊK¾ZaâUžYHÞ}MkJ¶¦åÀŽW8}Ýâ×8¸Õ¥X Æo4yãÇïñÂ/>CO_7JØÈB7X¥ ™m‚WkÜxM~W®QÐÛx¼G‡]H‚“Æ›ÒØÕ[Ee°+`•}œöÀk¢Ý:®Û)¸vé&¾ó å ôV5çgÿçOÊ»^¢«¤)Xú¶E;}Ò×uueÙ—J¥õi,°íhO®ƒiÊq]´¸®fòò9ï9ûÆË”»*ì9øk·íbyy‰ßz•©Kç¦(ŸþÅ_ãõïüGÞøëïQ[œcÓŽ]lܹ‹¹é[¼ÿ·/cIÉ®R®V9ýΔ«C|röS7§Ø±};7n¤§§‡••&''¹zõ*3338ŽCww7ccc:tˆjµÊÑ£GÙ·oŽãP©T8~ü8õzR©”»'oµZH)Ù´i=ö_þò—)TúøÑ‘IŠå V÷–5E±X¤Ñhà8³³³ÜšžfdÛC1ÂedY›÷Gé6ËþÔ-­(™L‹,C:Ú vB„e%T!ŽçÚç <‹ÕM˜;h}çÓxJˆ–Ö:gYltØãêüÑ4q‰6ësE[æ\49ªÔy)ÈæoWmÈ«"S‘„ÑIóÄT‚Îù…œÙÉ/õ´U8qê¶T7MþŠ£»«H¹h³²Ú¤VoÆœE…¢òT¡›£ÿ_Ëq™_a ¯[ŠÄs)œ[‘4:MP©¸¯<Ù&m:EÍ0{Äüe{’ÿ•[ôu»û17Î/3¾k³¶i­M†¼AmQÑ›OR´%…‚0EbL»¸ôÎ-q“¥õãá³P:CËŒ#ê´ñf£Q$œìd²k"®#Âù»…ñü„8í[“FEÝg~ÛRÞã®ãP¯¯æ:~u’™ÿ—ÂÏL¿pËâŸý Â×4øÅý½UÜœ˜çíW>à™/>°KQDX¿àêr05ýbë6ý"¯ZÄ26Ã; èbvSw.ƒ¹U«âtYò¿®´XÅsHXœ[æð«'h4å.èëÕ\®õò¯ÞêáØ•Eª…V. ;¯€›Écá×Â?¯®,¡\…,ȸãU*Žû ,„…” 6‹ó³\;{Œïü‹‚ÓZeËÞûÙ´ç^šŽË™#ï2~î4¥r™û=ÉÚM[¹öÉG´°i4[m›ûž‘F½Æ‡o¾Jce‰mwïcÝæíܺq³¾C«ÑdÃÎÝüÃßùÞzý§,..réÒ%ÆÇÇ™ŸŸÇóqE¤0†2žF"éë©ÐU*°°²Šëªl=Òí›!üß^W×ÓÌͯÐ[­P*âïT"¶(m·jN!íÚHnËDa´µ#6›ûÈ(< ÞWžÇ€ncI£u»;rƒÊÝ"u†¤8a¼ƒÃeÁ–Á ýtJf.ñEr_ Ö&?V‡ð›P†”-Í,uæÛ\§, âÃB)M1û5‚ÕE|£ )²D£;ÁîGJ°-êµõ ‡úN÷è¦g·ù½¥4Á¿~½ÄÄœæ×¸ô÷iju8{ò*ƒk>âÀ3Aaös1ž\¼HÇ/æ:˜Ð31©º=õ& ¿ éïέBÐ4”ýi= ·(ÝBaÓr›~õ7§V)vA_Æ›ýüÝÔ=̵f)Ys€uGÄÁ¼¯§³ÀëµÆ*Ý…¾ OQ‘¯¸„¤Õ¬óöËÎ¥ÞæÓ_ú:{}˲¨ôrù“³\>s å8ì¸ç>¶Þ}Žçqæø®}r–ƒ_<óËŸþæ;œúà–fo²~Ëv6>ú8««+}ó'¬ÌͲqÇ.ÆvìbáÖ‹W¹pñ2‡ßz)%}}}ìÙ³‡ 6022‚ã8LMMñæ›orëÖ­È×}bb‚ßýÝߥX,FÁ-¡ukÈfo4Tûúyüs¿ÊØŽýVÏãº5––ü ö[A¡JWW™Í»dey‰‰qšÍ&ÃkyìÉèHvÿ ‡8MQ2&a¾™Œ‚ÊÎ4±ÎÜIÈhF!Ï‚–ëv¼qi­§ jfžÕ‹Ý^¡›7~ƦYBˆ\!RŒ˜w&ºuúw;…ii‘‡“§ljIÂ&VàŸÁ:±HXM‰T<šŽØ 'Atz )©c½ÏfÑh)›Yhnì‚Åp••F‹•ZíÅ?kØ¥yß™/…*¸hæ—V©vWè.A)yú{ç/bó LÔÆ™œÈæüŽª ü.2ªˆD}ÉŒúíH"wo­\?@¡m<_¢ë“Ãì0ÉH˜:t™jkD¢àF–i"±i¿ÿ^ò÷ÞiJ¿ÿó")…dvLB$l¢©\‹8¿ Ì‹%öƒ÷“ÕtĦ'Ô$›ºùœE}Æ»­&«+˹éXöéíþÎRèþâX‰bïF¾´ë:ýÍ&¼÷ÚqÖlXÇÖ=;QNQ(YïÁ»Ù kº›Ë´Å|òBXÒÅ]ºóB@Žó]ÔtèyŽäèÛg9{j‚bzá¦àÕ›{iŠ.ûjLOYmŸo'ؽ}3¤™šœd{µ/ŽÕ*ºW•ÖœxûU~ú§ÿ’ë§0°n3Ks³øü/ñÚwÿ„co¿ÁÊü,·ïâ®ýc—J\¦À 'ÝJYšæj׳]¹ÏU:Ö½‡O¯«T¤\,°¼Ú ÞðQEpò¬jãÆÇíšÈ啎ãÒ×Ó•%¦¦ñ4ü.Lr_­ƒ}kÃ[=wrN·`Zw¸+EÕjøDzÂ×i†½Ê‡ûÛÜ¿ˆ`‡nÛ>KÕ²’¥-‚»SDiÓ£Û©)^¤¹õ1ŒdJc2-­ÈÖ¤„÷q8!ˆh·jºÂDðzœH#…ŒÐ™ÐƒE ‘/1ÖúBÀÊòRÆÖ³ÓÄ™ íev늾j7ôn~49ÌSƒÇp¸>éòÊ÷ßâ—FèÄsu`åNQ!S]“0ÞNmDÈÛ F'«NÒzC’\È`Q.Êsðœ:³§/søµÓ ú«0#x}þ~<«BYjèë\ÍÚÁíyN§†HkÍÌôÛwîXì>™LiÍåO>â'ÿé_ññÛ?¦«o½Ÿþ Cë7sáä6ï{˜f£-áÐç_¢:4Ê+—¸pìCZõUvì½ÑÍ[˜¼z™c‡¿Ç ‡§¾ôUºJg>x‡[×®Ð70ÄO}†rw•ñsg¸qá,Õ¾>îýÔ§±ì»6¬åK_ú2ßÿÞ_pòäIæææ"òš”’R©Œ´,Ü´]p [Oÿ'¸gžy†¯ýëìØ±ƒ‰[‹\[ômÀk,póæefggñçY§g-‘›ž½Jè|ª»JÖ­ì¤mLøRÄÅ#N¦sÏ ?NÚÞñ¢kéñÓP†ü ²ZJì°ùÚ*úkÌJÙÆuKµ:Žã¡Uà+¡óÂYüßÓ:гFËõ˜_©Ñ_­ÄôñàLTI†ÜÎz7ãvª +óüÛN™ˆVÂy>Æ»tJ®˜xÑè$9Ãåhøµé8×>ή” V§6!•öi9B'$A'—MÉ]yN`HZð¿;ʼn”ï¤H0þ‚©\&RD „  v®ð§<)ãF9®ÍÌÍÍܱäêN‹½RŠR±À`o™ë­¼:gñD 9Œ_Ÿçoÿò-¾øõg° JyHÛÎÙlåØNEø§Îeá&[ûŒ)2Úsк…ç4‘ªÅø¥üð;ïÐjyŒŽÀB¡Ÿ·WDº(Ë`L£¡ýi[‚àmàw³À»®K½¶ìwHÖ’[7Æùéwþ=þø»Kr×C‡X»yާ8ñöܸxžO ‹ç~å7¸pôm¦§oòÎ+ÍÂä$·ídëÞ},ÌÎòÞ+?å²ï‘Gé*H&¯#ʽÌNLq÷C\·Ék—9ñÖkضÍÝd`ý·®_åú±÷™¾q•O½ÄÇgÏâ´Z ¬aÃælÝy£ë7ÒÛ7€‚ù¹.~|’O¾ÏÂÜt¦Ùq‡8ÀsÏ=‡eYLLLøMU¢æ¨®ÙI½^gzâ¥rÃ#;±íBb Ê«- ©S!‹ÅÒ$3Ç&æqÞ‚Šñ„45µwœÀ@¨S!çÿÏB.r_Y5ä¹ýd%Ú¤ ½ÎéŸi·ÍTú¨$Ã^§ä@¢±OFYÑë/É5b÷í’ã“\똃dÉÀ1ðñ€øÿÂ0ŠHË$ÓÅâç+)ÚP.©ÕšÔ­@A¥ âðœ1?ãÛN«Àýû³ÑhÑÛÓ…mÉ@™ õs¸ÓÖh”ÊÙh3Ï#¯‘KZ%$ôåÙ6£‹~¸NK w)òN`ÛÉFÓ$É%üÛÓRNqæt. Ø=颖*!¦ºÉIm Üé7¾9Ç8‚Š0»l ØMÕá"„“…Àõè?ØÝh$s ¿3ô¼ÀkÞòü§Ðt&d¼ÅjròF" ,½ïm÷yônµþþ~J¥–årÓÛÌ[+‚ƒ¥r9õá%GûyöçÆu<ÐE„ mYeþò‡6cOǃÑ<ú©tžÓí07=Ï÷þó[ÌÏ׆Z¡‡÷êáú¨H_ë>ŸjµJ­Vë¸jHâÒ ká‡çy~Þ·×¢·»ÌäÍiÞ|ùÏøé·ÿ-Íú›îº‡M»ö±Z¯á8£k×rda–=q“’/ájÿ$ÐÝU¤X´YX®ù+¶ö2ûä~\ëÄûla¹FoOÛ Îï0W@[YXBÄE?ÔÖ+­¢B¬µÆÓíöã·A_s¢Â\N…ÎgÎ¥š”,I|7Pm›¼mM¤-ц<$ayÂæ RMÒjPobiî4Â`£ÛO¿“"¹›HaÚ6¦!÷àðô|Zm…£oþ”•¹6±±1foNRZǹcÿžÑõÙ¾o?N«ÅÙ#ï0ó†Ÿo_,P”PY³ gpŸùì³tõôFöÁ*d ›ÄW­^˳/þ=ö=pˆ~÷?pæø»l½k/÷Þ{Ës“,..277ç71JÑh¶ܲ)QW eg(miðPÌAO$·S) -,®Z鄼Th…±qGäÙ bJ’ïqÞ¾‡Ó¸ãyFt©aÜ!rúð&•dd¦‹‚È‹GÓÛ×c·Îø€ê¶\±4¤Ñ¶8g–í:³ûÖ:ï‘è¤ÿ‰YvÈ®=“œ±:Ñm{:xÏZ–ô-(„ðá&¾—›±b–•5\ßAi³Î°,Á@_«+MM'U¢ÙÔ¬žCRÔŠ…å=]%ÊÅB°:Љýyb7ˆš¾‰… Ÿá™¯•ŸBê¿^Ê|Ê!ê62ÉŽ·±Î"Ý9uMÒ‹>ýãé,»hB÷ÝÖR,ˆÄ~Üd§g®P¢ç3/ÒI6iÉ(Ã{]ä¢üRÜ@¶ä)•zñ-ãýƒ.Ls’RŽa"×$ <ñ¤.2~æbauy‘ùÙ™Ìy;ÙZ»Âf®ªÕj»ikíyÜt·sÂó¸§÷CzŠ¿üÏïÐj¹||R¸(W¢¢=ºL¡"cÈ“—§›1ÉU üߥQoò_þäNŸ¸Áè0z œ‘Ò(¬£»(‘R"­¸ [–EOOOž4„ûÂÏCÓ”ÐX%}-ÃÉÜ.øûá•錿ûcÞœšâɯü¿ðËT‡†¹~éÿí±$|íý÷¬Û²z½A¹ÚÇÉwßbyö{×­§»·‘-wñÝ?øßY?ÊÁg?‹‚aæÆ8Ãk׳÷ùÏ# EÎ~øgOÄ/þÃÊç~õpóÚ®œ=ÍÍñ‹håQ°-lË¢ÒÓÇØÁ/pïÓ_¢§w¥=ÿ>H6å1ähx|!X3¶™_ý¯~—7_ù>{ö=DWW…—¿ýS¯×±m›jµŠã8T×ùäG:<AtjNÁ‰ºcÑÄOP4#†M NüŠd¯ "†p¼n:_y®GÆ¿J¤½ÖcjXÈógòîGÎ÷‰Û2Û…Áڂ̶¼M!Rm'/ó¯dÛ<ýš %°lþ`ót÷"°{¾Ýpo<ßT!–B9òKŠÜ\ÏÎä¿<–¿ÈJ;÷U"¨}ERµ»L±h³¸R7`•iit"Î…× VV¨Š¦«\Ê? §óÛf¼¡<=)­àŒŒ¿èg::Kª öáÙ@Ö<'À¼ìÚÐÓ„d¾½ñJ7™"övÚáMltŽZø]¾[”e¥ÜÜâ=º)!I%½¡q]\‚…Œ óèð¾ŒÏ½ð‹G8™ O RV´B$´ëRˆT¯ï?Ž›“שÕV;N— ÷øôÓôô1~þc®ž=CwµÊ¶»÷R››atû^ÿÞ·Yž™£X¶ü©¼P`íŸáÞç~™Ñ Ûü¿ç&ÈdfUÚM†Ižœ÷EBU µNd²§ G"çÛ$ºªÒG!E˜P¨Ûû•t0šÑ9,òx¨ÌÙQ ßê¼ë’úc±h3Ø×ÍÒj§å¤ Ò:²(„K^­5ñv•#ïcÙ„eS,Ò'ƒ(««-”§š §åÓ³¤ÒUŒHo…‚E¥RŒÈ#å²E¥RÀs\\Ç¡Q«ãµš¬Tû*÷1[ÚNWѦP,d zøœB>@­Vë˜ÛF.Cnß—Z;„¤Ùr𔦷»­€uÊ<'AW:–eæÐ½ïÄwcU%­å.¢=½œuBéLž«<0xcy$õ°>ú;ŽEÅ0“HÂî¤ÜtfÛ¥3ÍŒÎé*¤ñ³éfÃCãµ^¤O ¶ˆŒa´±´.l&4‘ù4¦msÇŽué±r1¢Ü°ÿ0Û•åEƯ\ü™œáò¬`ó&Õþþ~*•J$[ }èí-„Ë qB+6qŠRA²´*X^u©5]–Vj8®¿ïRژ̂ `[þÁ­´ÇÊr-±»›K˜èøO¹]eè­JÖH*ݚ˕}L—î¢R²)‹Ø¶t³™SJÑÓÓC©Tbeeå¶Æ;~#¤ñ”Æ’ÎÌ šsØ(¶íÙËÖ»ïGØ6>>Å¥ÓÖ ¯]Cµ·—»>ÅwÿÍïsëú8>õ<Ò.ÒrægnQ*8ôìçX»i ³3üÕýkžÿê78ø™ŸÃiÖ©¯Ö9òÓ¿£±²Ìæ]{Øt×–9ù¶¿OW|üîë<üäg¸uc’M?ϾOƒ´|òŒRHXè¬%_ê£S‡žŽ`<¿_M‘DBF32¶á±­Ébî—‘±Û¢¶°¢É::J rKÜò³†u)´F†¾ ÁãPfSj*7óÏžNÁÝ0Œ#zÿiƒ¼3ñeV£šÕÕŠäÖ_äÈÎn_ȳ‡¿èÄD¿ÃBžOÔºelôz¤ Zžƒ±¬·}\f{€Û²$¶e…jµ¶OLßþr¥Gðì®_䓲ÈÛùê$² Ú•û—ËE¤m±¸\šÑÖ].õ[ü #Ça~Ù£·Ú…̹€ê6/¾&›å"2±¸©f(⇥î=!|ôØà$ꉉÎèÎ܃vGX×ìø¦3L%”95'×îißÓTFè”$-É 3âlãßÔr®m•â.Mï¨`·gLßQÉ•!ô“x¬p×Úß„äÓõ4Øï†lO™¡¼úñ¹3¬®®´ÊogÛ®  !X·n]4éš&>žçÅze×Åh-Ø"OQ)Co Õ4[’FË÷ˆ÷”0R‡B›TƒšIé_[l*%è* *e»—*û˜*ßM¹hS ‚DÂbžžÐC˜}hhˆ™™™ÌóÎwÀuÖ öñÜgžãõ?ý#ôð÷8Dwß ãÎqþäQšµU6ßµ‹»î{×õxã¯ÿ‚ÝŠÁ¡5ÔVVÑÒfyqå´èê©R¨TØÜ?ȉÞæÄáwÙ°m¸MîêsüéïÿOL]ºÂØÖMÜè <¥8óá{ÌM^ó5œËÖLž;Í™{yæ·ÿGºúú}æ¶ò‚ƒ, *TíI2ü¢ó“ïÑý{-I.õŒ÷¥Lí,E Å*€Ë-(Ø"SÌu˜µ-¤/• $.~`Mž=á»ú†.b"yo˜Ö¬:½7×FC°Úc’N±°ÉÉK‰ÉSˆl!fÅvÂ<ÊÅí*Sû¿d¬/:Y”êÛÏÖ©õµ6¢ͯ‰ü(±&• ¾CâÚ–eû>S¦5í ¹¾ƒÇ¬órDt.?'~éüÈév:C¤Ë.Å3­h[ öu±¸T÷3tžO 56~Þõ K«ôvW°M¾ÄOë :NBj@»´×ìõPmÌ_ÒœNº öü)>Ü7›¦¼Çº–6‘Æ;*L¼ˆæd2lW~û¹ÀËØÎØ‹+hynQH´Û‰!xDhxjò¶d|ÐÈì¡…öÉá¬"’;?iî}rX‹áSó<—3'f`õvŸçÉ×Ò,øð?)%###‹ÅÌ×ÃbñL°G–Ø!ŽÓg»¸e ÇÇ8-p•2Ý“÷yÂ,w†a6[ø®¯[S°]\iq¾r/7K»)- ›B¡€eY‰‚6žçE}pp°m³#„@H Oƒí4(,Oã4§ù?ÿÿ†ËgN²¼¼È±w~Àü­IÖŒmäÑgž£§ˆËç?á“?À’°ç|îëßàÏÿàåÕïýžyñ%¤Ý‡«<–æ±¥àþ‡(–JJ%^ÿÞŸqðÅ_bç¾ý¬Y·žþ‘µ\»ø “—Îá:…‚Ÿ*VîéeËÁyàÙ_d`t½ÏEp=?€$„ÍcÓYÚ'”éP#&XùF1<¤éY"UÈcz•ˆºKçKÌ\÷ð7[mê~ñëaƒéc ¥ÔÑ×&ŸÄ¶M÷ÄœBnž®¿0Œ ¹¾m!7vý2û¾ºíX³äÖÿï y΀ßÉ 5÷·èN €ä¤‡Üè\?Çô4–toÍîÍ}.PèèÔ=õàÛ“ØÚÝÚ,hÛ6¬Ðm÷ã™õuÚ=¯ºjEíïíbyµA£Ù"‡“ sþó<ÅÂRjO%ŠÈ&½n0WZt~ÎJgƒr^# , ]'Hyæ…‘ø¨Y8k+ÿ=®ô’Œö6­ýz´#&˜#b9GšÔ®Í S";»hbÏ{«М«|B>@R?¿¨ààô§öò“á>]Äí°¤”Æ/&ËV›=¦ -²œH—/|ÂÌôÍ»“ýv®gPK?ƒƒƒX–•`Þ‡Ó®I8 §¡›ì¥!zØÙ{^Ù«ƒÍ¼¿Â©EÇB™¢}ÒJ»4”;+äíVõAS&’Åü6¿¶æ?Ýó-b·½lðI:aKgýø¦ºo}lN›·‡Ûr‘©èwà‰ŸÞCªØêˆx)tl“m:XÊ×'Ô™¯ÔÆõÕéô™ÿ üýŠÅåUªÝå Ø%±àHqTv2Nù®è„Jü¼…è„’ï¾Ô?ªÛð$-¥?€âëã}4,Dý‚FÊhŽl0xÒö3V”dš’¦<¥eÏpŽãá¸:2…Ñ©ÃB$2‚El€&Häû:ò˜%*ƒíˆ"2„IÜÿF1½äàQ«qíÊyæg¦"†µeÛTºz];FOµGßÅu]\צÐvæ2¦ÍüzjBàº.ƒƒƒô÷÷ZP+ñ}–eEªq¡‡.`Ilå„ìccãcú:%Ûƒ‚¤h$ZÄÿÊ‘~3+åËÿ”Ò4•䆨ÈåÂ>œB?[P(t.æ¤vA!Ñ/ä!ð‚îM èR5ºœUª]e¶>ø›wïÅq\ÞúÑ÷™_^a×ý£:[öìci~w~òcn^»ÆúM›yèSS[]åÈ›¯S[^fë=÷ñì/ÿßùƒÁËßúC^üʯÒ=< –M£^£Y¯±s×ÝL?zˆ¾‘.{ž¡5ŒŒmâÔáÃt÷ØØÖî~„û_ø»8èëL•—̪V†—BX× ¯Ÿ ¥âÕSƆWGÚt³;7awVuñ‘âÂÔ+‰Ä7;Ò¡>6xcLWÇLr¤3 3¨(9•“7•“¯›“sèñŸö˜MòÑVˆÔî5Þ¤æ%°% ÔºýÜ„Ì)äÂ<ÈÍG§ïl.:zËe›‘Ætg™O¤R©IÝ¿n![=6’ùÿ¸¿C²iËTÓ€(´ˆ9ÎIgœ¼¾JkŽh¿3ÖZS)±,ÉÂJÍHÂ3»ä4k¶TX^màº]•²áÜ–,Ö‰‡6ƒO):ÿ¹¤K¸ÈºÓ‘"Ë8N4\ç¤Å#…KDŽz~C'¢rüºNÊÆ rŒ0îÚpDˆMe É[h3g¸È8žÆq=ƒõ*{k!db—fNÛ"p€3¥™(E,0‡ë°¸t3áÞ=lC•§¸tî4W.œ¡ÕlDS·Y”Ïž:Š”’f³e]·Z-ÇÉLéyü䥯Y³†®®®h5Úæ=,œ"èD”פ¨—hàò1Û™ðºÙ¤'±W¨XžïðÚ–LBìÚ˜ÖtÏ+`UÙL3̸µƒEk …B²MD~KCíé7Yˆ\„צX,R©TXX\D(E¡`Ó¥ºZ5ª‹»ïfÛÞýØ–ÍÕ ç}s˜F±-;øÔ×¾pøÇÅÄ¥ ô ñØsŸÁ*8ùÁ{ÌNM°yÇN6ú4—?:J©§Áõ›?}œ–ç'{ÍOŒ#µ¦§¯Ÿ¾µëY»eïþÝ_3?9V‘ÏüÊo0~úC-ÁýŸÿû«PB+DZª@¯0Äeì}â…šÁ®0Ô¡Yq³„Oø‹¬(Év7§# šÔT1÷¼ßÕʧ…¤D1*Ü•‹è ÕÄ> ‰—¤Ÿ„0"Ðò3‘X¬úÏßIóX­Xxþ¬…Î’Ò_³èö¯yÜA"på­Ú’Âò‚R"ǤÛ5@Il=¹dƒ"·èêl‹Þn—kþºG'°ÞÃiŒ_\‘ÕF Wiª]åø÷µ¼-Ï1PuéÛàiY­;Ýg)Ú¿æöˆ…‘­§©ýsÝÎàþÖU§å&Æeéx¾`œÖÁÂq”¯i6áï c†CMÒj6žÖÃb-…ƒ‡’%E\ü Í’ûÂp²7)ÿS7®rîôqj+‹ =œ¾Óæ/RJ*• år™jµÊÒÒ3334 \×m«=OOê鿳,‹Í›7göѦ銔Òo†4x­%¤;ƒå.c9u µºÖb®VäVk==,3RYf´§I_Å¡b+l©±Tƒ ÒÖs¡¥-^9¯Ê¬7Ȭ¥&± Eʶ¯O7™ìa1 ƒÉÆWJá8NôÑl6£çç´Z”¥æ‹_øV&®0qñw?ø0½ƒÃL^»Ê¥3'9ðø”z„ÞÁaìB¿ŽeÛ¬ÌÏrßÁÇèéàÒÙ™¸ráÑuzî<íqúÃ÷™Ÿ {`˜ç¾üU^·àOþ¯ßChÍàð¶ßE­¶ÊÅ3'™Ÿºv=Ê]‚+ÇsvÏ}ì~î«ÜýГTûüô6¥/˜¶fuÐuF¯]¨¯ÖÊ€ßãÃDi°öý˜GûÔdÍÊ@ºd±Éè€~Ô-<ÿ÷Mt8”Ç“~x"©Ø)1í¹ì")ÍÔ"&‹’Þ•§`E|s§È\Ä6Ρ3dším:晥^¤#‘Óþê" ÏÒÆ•+1håòÛ±ÕÛO®·›È“Lcwú6½‘ò•FCiU蹑ÊmCt?ãĮۻ²x‡èØeeÙ5BÆôÎÜG‹¼ç¡sIx– ôv³´R§ÙrƒKcø:cžx ÍV åyT{*ñÚ´gm×¢hÝöåKÜeZè7Pç46:õó"ù Óý¢¦*Â@×¥ð!÷8ÓÜ`à†÷0³„!≉ÀUc=±ca‹ÐVÏ  q)“/_ÈTiG·Àb4¹{ÓQw¢PXÁ¨.bÇŠèñ9ÍgN~ÀÔõKÑlóN;ððq FFFèïïg~~žÉÉIæçç£0’v»ôôdÂÒ6lˆ eº {žògϦ —ñêË8Ó˰TG4[Xž¢äyXžbÅ«0¿ZæÂœKIºt[m…%•/±*—нUꢛU5ˆkõ´±mAÉ–Ø–Ì@ë&ß„ØÃÇòV«E£ÑˆlKwïÚÍÖcP_Æk4ØwèiúGÖ²²4Ï™×^áæõ|òIž}éW¸59Å«/ÿ;Êк5üê?þg¼ð•_çðßý5'Þ}‡îž*}úiJ•..œúˆ—/282ÌcŸyÕªsåÂy*½ƒ,Í̱ûû©örîÔ &¯œG¹¶mQ,Û”*Ýlìó¬Ýu€[ïò%å!ð|”Ç“AŒOMh¢ýý¸Q9b4%¸žÂ#–ã©Ô¬Bï£ 7'ã¨>#Z¹Úמk-„_ȵßd†Læ$P§¢·š”"i•œãò˜È(ÏLå:"u!âB. T& û0Ï®¼b64²MHŠJì®u›Õ¹èlÓ¦ëÛTînœ€ôÎ:ÁAL\ç¼=¼NP«$ÉÐC½CK¡ÛYÎêÑ-!úÖm!â´ÁIæ…êXÄ Ù•èÐȾ¹µ¹¢Ì#ÓðzoO…åÕ:õ†5SéÂ*RÒûñ–뱸T£·ZñiM¶¹ÈS’¥`‡4´ßÎX·œ‹<Æ|Ö&îÒ&8˜ÐsÂ7af æÎÐÓÚÂK@ÚØÉÅfÂ`–‡šo)“šWawL\H¨!\¯}}Ÿ¡¼õwëñS½5u³'ß§Q[Iò°˜‡·KF ‹šeYŒŽŽ244ÄÂÂãããLNNFѪ횂ðs×uY¿~=ƒƒƒ™¢ à)pšèæ ¶žÆ[]™œ‡ùU,WQ«TÄÓ>dë!(znOy( ËžÆkzx®‹v[àz \ Ey}rŸBéÚ*)i21‡ù¸LÂ^øá8õzf³I½^GJI±XdÇÎô÷÷ûžÙ`iµÆÂò G~ú*}½Užxás|êùÏsëÖ4Íf¥¹9Fׯgûî]œÿèÕ!–gçØsÿƒ ¯[ÏÕóç¸|ö4¥R™ûbhíz®_¹È'¯ý„éé[|ù·‡¢-8{ü(çO¥Q[Ŷ$¥¢eI¶<ð~þ×Ù¶ëÞ`íâ®_4St$ÜM Üx –”Ò¸žÂS ÇU¸žîày*Ø—kÒÁpmÙjÊЊ5œèE 5ó ¾Â…ÀŽW£”¤äÀGA)&©Ëp>L¸µ¥X쉩œ´+ªŽ”ªá{Ý<8\¥â¸KÈ%˜FUãùfÉhÙ-Ò¬r?m¡X29+w\ÈE>›]w ºµ‡Buj.²l}•²”M3ÛCeðê.wºí´®ÛOã:·4&  Ö‰»â¿Îù‡ tG¥ˆt"­ÿ1û<2‰ îÁjw Öh%^ k³ Š«<kôõT"›pMZM¨syº“ì-—ž ³éx‚œÕFޱH’Û¬jLÇŽèõÂ0B2€Ú 8=mˆèq[ް¥å)Ñ;1ÅWŠHþc>¨©.!‰'ñ„0™h&´†s§qíÒY”ò"b›9™›‹U8E›AøyÈæ÷ÞCCC ±~ýzΞ=ËÍ›7Sl»Ï·mÛFµZEkdŒ–Ó@:ÓH±‚7½ŒŸE8.ÅR»,ð¬"ºPDYJ‡¨ˆë»¼¹þ[+…ç¹x® ž¸"]¯ÁøMЇ(Ù¸º@K÷!­ÀRÊ„Æ\^÷¦G»çy´Z­h2_^^¢Q«1²f-B+++HiaÙšõ:}#kØ}ÿƒ 3°fŒùÙYð††yñ«¿Æ»¯¿Â‘·c—Þã7þÉÿÌó›¼ñò÷8ü·?Äi6ÙqÏ>6nÛÁôÍIÿø‡¸­wíÝËÈГ׮R^ÇùG±-|2Ÿ„5;ïçÀÏÿ}î=ð„ßPz^¬qÐDk"èýCŒ0j1q¦BÏó xËõpƒÏ=mrÃ9ÚÇ÷ª04ª^ }S:"0j­|ï€Pâ4(PÁ{2$º…D)aðO’Ó¸HòD³ãöfJxDÞÄígœk­rŠVª‡Ðz=ô·m6Ò¢=£­=™Ì$ºÝAÿY`õŸ±çÂð:Ï»]dfóû’™;Ùc¶7íìj5w¦™Ï1L'é*—ø}:.lmcqt»sú¾Ñ¹Úëô„šüŽ8¶»«ˆ’åÕºq‘UªJ¦†àÛ<å»T{*Ø–4 "KfÌR.s ™F&3: GÝæÕÐ1ƒDß#Ò™ ]Ó÷Í*áèdÒ•ÇÃõ¼¬ó›¡·é0â¶*D¢X‡Hg,MÑ•Èj þN¦hµ Á‹€z}•“GÞbya&*@fAOt"²Å°¿LÕÂâ.¥dݺuŒŒŒpöìYN:1ÔÓ¿+ôoß¿T<ã‚n¡½¨YZªŽsi 9³H©`a•KÈž^DO/ž°ð<·åÃÝn«…kY¸–…çJ”ãâiíY(K¢<”BmD¥„n6ÐóH4»*´TƒZ«ŠVà¸'2p!^§V«…ëzÔêu®_¹Œã8¬Y·>ÊCw]—z½ùÓ[–EOµ—±{8ùÎëœx÷0/}ýï³uÇ.”RX–EmaJW7»îÝË…S'Ûv³·n18<Âîý²²¼Ìû¯¿ÆòÂ,·ngÛž{h6|ôÁÛ\õ$ƒk×qáÌIÎøFm••¹Y†Ö±õî{Y·ó^~íø_ØûÀÊ¥««u„6å)DaèdUø¦2'ŸZw >ÑáâA&*œvB6ÂVt`~$CÓJ Iº»Šôv—ã©Ü ˜p»¹?Os{šçÄ Æ˜W’åy·gB§zï\³“#£Ii¿E炚§øÁ8>‘N¥²HÉWÛIÖcqM:sMî¦_r³Í66¢ À.‚}¹ù–Ó9k„Ü™[·]çw>9űÝõ×é…§Ðh"ûªXk7#FqœN£mùœmI\Kâº^0+ÏÅs%žmá¹ÚsжD¹íyày%Ñ&$R–áÆMtÙfä¡]ضÃìJ9ØçªŒÎœ@?¿¼0ÏÅÓ'¹véZX ¯_‡°‹¸N !º£ïQ ˲¢k\,•¸ÿГœýð~üÁ/|µÂ=ûö‹¿h§Emy‰û~˜é‰+lß÷7'&˜šàÀ“OÒ;4ÂøùsŒŸÿ·ÙÂ.øÅ§T(Q«5Ø|÷#<÷ÒÝ>àæºXÒe\^m$P¤k¡B9Qrˆ yËõp‚‰Ü÷Rð's/  …?ûënq)>Šð£æŸp~‹¸*Ê·< Ïu%5ëåϷƒV{Ä7ÑI–´ò—¶Qx F!שµ‰¬ƒ†'l²é,‚ä–¶b¿C²†[éaÍ0s JSço05³ÈÍÙ¥Äï¼÷®1†ª¬Œb˜Ã!#!×éÛÓ:ÑP(§tÅñ˾Ceç‰=[‰E´/ïGy cRœ!ì2÷ÖEÁSš–ë$7óÚ 0y¡kZP`@>’›8‚ÔcKM0yv®¡äJÊÐâÕ¸ùƒ½§ÿÏxœüð0 3h­3Å<¯¸§wêi›ÖtA!g³ [–ý]˜.V¯×äÙgŸåÕW_ebbÛ¶q]—gŸ}–Í›7Gä±b±ˆ´ldk[Ö¨_œD,Õ)÷õboÙìÁi6(¤.ày>͵$®-q U°p ·å lUpP-åI´g¡] íºh×A·ÿ¢ O D}uz+lx`7­ñ‹õ"¶%P»°,œfÏiqâðk,ÌÍ2¼~#åž^–VV˜™ž¡V[ehx8Ñ8Ž“í-»€B²vÃY˜ŸÏ£««Ì“Ÿû"ÝýC\ùä,õÇÈ~³Ì~í·8úÆ+,ÌÍpöÕ±º¸Ä¿‚mØùÀc|ñ·þ;î¾ï¿;Aê—ô÷aÝ•õ†ãkVƒE–§cͯ0ö”§ü{Ýó x³å7°Žãù,vO¡Eœä†·gdc§ÞÈF¡B¡µŒLd¤±Ó2.æJ†ï£XÅ@ÚV`Ô“´‰è.Ñô¢xïÄ.^»uû•]›/­îå¹C{#t#ï|)9’îP„hÏÌÎæº‡ƒ‚ÏÑùäòœºÒöiœ8{€5CUìßN_Omi]tœŽ:/æâì¥ Þ?y9úÚŽk8°2ð ù;¾/€ŽP!1‹yGF¸ùÝê—Ô©]µÎ\Ðl¥s¦ß6Ÿ•ôßqÇž6wÑ9OR¸Ö9EšxDÛ¶Å@µ‹ùåZTÔó¨qZ›}/x¤µ†ŸÖÖS)ç^¯ühºÛ¸§²[Í| ÝFy ; -‘g!sÓZñ©‰:öþBÐh¹xžŠ§anHQ„Ih¾ÌBÇ Ò0ÐÈèïÃéžîaÏ i#‚,ô8ÿ‰F­ÆGGߤ±º˜€ÎÍâîu;Aìyšq“îÍÃâmîÐmÛÎ@Ó•J…§Ÿ~šW_}•K—.±sçNž|òI¤””J% ……b™Ë ËÔ.Ì f) ôRÚ±ªƒ¸ÍØ¢Tò¢\Ç'°Y‚‚+ý½¹gáYO ”ëâyeI´ìÔ%xÊAáúÓiÉF¸\ÿ.…Æ={FûؾeŒ/xÔZ¾S¹ vâç>fjü*>ûYî~ðÓS¸Z09qƒ™é\W%ìjâ2ÿÃf‡`ErïC\8y„W~ðC¤Ò<ùÂçÒÆ²lÊ¥NŸdÓŽ8µEªC£´šGßx—®n° ~kXîaÝîûØuðIvï»?(È^TìLä¾nfæ—£ƒ!ÌŒaýx¸o9®?•»^€6øEÅœ°köŒ=›Ì‡0ƒBîŸÇ‘ØÜÿ,p Ã&©°%6b ¡X4´¶‘r—`­›.pAV»ò¼œƒðÎ »ò­ÿ‡´÷|’ä¼ó;?Ï“Y¾«Ý˜žîéñ~xK@ì’XÃ¥°"¹FKî­.d.tº‹PÄFèþ…ââ".tq:™]írµ:-¹ô ;ƒñÞvOÏ´7Õå2óyîÅ“æÉ¬¬ì©#&¦MuuVVU~ækºR†A<Ù’ ñ^”è3F¾Ÿu¶V ?xÿäe®ÞžûFö}ΑR¡rÄr Âóì8fp¯ÅûÙÇ4šø÷þèk_0€Ÿ#ëë—˜¢ò5S<8®´ðôùRgÒQ>cýs|<ÈÎ5!Ý÷7ªI½vDŸ¬rY¥ý})%#ƒ5–Öšøžo½@uï:Qôâs§ãøM*ù/Ô¾™®9i£ù¢]:&‘¶ê…¸› ºë)¥ ë'!ó*®v3ϸ´–eQ’“ŠHçÚŽmKù’ŠØÑ*½[‹â¤L3棻»º²´À¹“ïxíÜ=y?@·ÞÏÂ59FÑ— g;¼Eãwûÿr¹ÌË/¿ Àk¯½ÆÈÈHæ*…ÚÓ{Ù°cµz¹»wøøø1ž~îEDä¶g{ këHª•’½G¼†̽@Åãô®g˜ë®3Ø»9GQÚ·®³2KÖM]’e¼‘’ñûE*k7&-Ù™$Ý•‡`™3Ò¨ñ ˆÆæ61‹9®B/È ÏÄéA ²è»A¨)–Ü/÷´¼ôþ#b‘³rV¹ç,m–Ÿ¹Æ•[³Ÿë!DŸ6šÞx÷,¿ùÒ#T+åÄÁòsvã}!*Lݳ €ZéT«éûA,AŒîÖ| ²˜bhÿ݉nŸ¯%Nž=‚å´¼Y“µIËí3ÿï:G_Þ ¾¡A“èß¹§ƒit2ÅÕ÷UÝKDŒébB0R¯²¼ÖÄóƒž ²Î•‹?¼À0à‡j„L¸ãκïúƒ”"à{7ÑËç“OóV6Xá<$Nq±£x¾ÂóËùH¤füvîDö%Û†Xæ¢ñzÄhGétÒË›4cyƆl÷äêpwú&×Î :ˆÛf´G`ýÌþßîÐm§8[®f³Üm0—RÆ$8{ÔYP/ ¼úê«ìܹ3¶R-‹ŠEÊú6n§EãÆ=GRÛsˆâæI¯‹(¸H)J†1íð=åJàž‡r*0zÁÝ.öñE€ã E”h_`/d\i…ÒZKd±€ßlÒ:~†M¯<ÁæQÉÔt“oýŒÚ@•GŸ{Z}ˆ›W/Ñò|*µ:¥R‘M[·âй¹9æfÑZÅNV"èºnªK?üij,L]å̧óóÿö=6oäàÑG¸{÷·¯\dêÚ%:­€OÞþ)Gžx†Ç¿¡µÚþ IDATôe>ùèC6î=D}xé8øÝ.àÚås<|”úÐpæ½”¼ðëµ­vÏ bã—¨ @Üó•á‰ø /¼8Gnl:ŠOË‚y©™Š+îÌujn¡’i†´.ñÑ )ÓF]¹0³x¤ÄDg%i$ò˜ˆ4ª­+ãçÚèI´Ô:eÛyÙ À¼Ö½h.܇<½Ÿ¦f8wu¦çB¹{b˜½Û6P'csKk\™Zba¥ߦÑlsáê4ÚN.Ä™àZ÷¯N¢kþÞclß2l&RBR,•b¹ž‰’5d=myA€ë(„ãô( úƒ¸È¥ Ažg8q`Gß:-땞Ãfïq=Ó‚²E!!­ëþ¯ aËç>ï¶=í¸—ê~E4á²÷ÎV§}B0a¹G; ™ø²G×58Ò[¸†ží2ê4tŠ8æ´Ž§·o^æÖåÏ‚@GûrÐ#ölgîy^›Ý›ÛLï, Û„¸¼˜P»î÷Ò¥K ±}ûv„t)‹UÊröYD³E}ÛN*“;Q‚0Q ÂA æ0Ç¢´B¹®+ ºåC ”13Bhœb%A9†k „F ã©§…B+‰T/(¥J™å+Ó¼ykŽ¥ÂF^þ­o ºM4šõF“;·opïÎZ­6>÷EpëÖMæææh·»¬7›x]/ŽSµ ¦hnïÒKå2í®Ïòü=÷4ÇÆ˜™ºÅ­÷ßÁëx\A¥+ówùÞ_þA±ÊèžC8…žç‰Fx~æ¹xî3ž|öÅÞ‹b”&§Cî-¬(E·˜1{×Éžf´î…„8£& R¶’ID·4ñ¨2y[f¶Væõ¯­¼ˆ€œ8TˆÌˆ]#Ñ2éz#Ww©dø·$ÒÉØ¶FÄ-RÆLÒ‘<õð.Ù?NÙ‡’˜SWî25»Ÿ¥ ƒžyh"td »áà FÊh]0Äß©«Ì'>=p,¯5ïsæÊTϘõÙ‡¶1¾i„BÁ5ª4“å2c‡øðÌ-fæñúÜ•;<´B: ê¼QµÈǪ C_âº&I)RâHª¢×¼¶Ì…À<–À1Sã_"“B’iQj4#0…"ÐŽ)´$P%%Ú‘¸B°æ|6¿Ê§³Ë¬{ ¢ŸCO<Ǿû¸tæ"O¿ø¿þ.]8ÇÊòJHfïÜ¡X©PÝXg}½ÉÚê*Õ~‚]8EÒúÚ“{0:<ÌüÝ)>9öKÖWVq ‚BAâª<ˆãîÊ:¥r@©TÂ÷=G¢,ö¼ïûœùìö8Âðð†Üî@)ë:” .+]Ï'Á :¿©ÀÄÈ eŠÔ¨¸MÚ-º`Ó@žXÊ '&yÊž»ÙPɸ@ñ…8$ÃÉäsÃrÏê3F1Râà" :.ÚõJ!{RáÊ• ®[@J‡@%ÞÐ(üéØîa‚Pâr—8Õ“™.C”d&x‰‰Nti™Í.¬pw~5õ$Úµ‰­c£KeœÐ¿A£ÍÛuxhï8wf/ÅÏH§ë3¿¸Ê–ÍÂǪ µŒ%¯Ykc3Å!Åd7aq¹ÁôÝÅx´;0Pe×¶M\¼r—ã'.÷š‘høË}÷Oþþ—N¨Bð®N3·¸Êå›wS¯ÙBÁå¡ý“ìÙ¾™¡zÍ’/i¦î,0·¸û®ÉÍÔkeîÜ[äÔÅ)ff—¨×ÊüîkÏÆ¼¤< Ï# Š~;y{ßk|sgtQg+‰SÍÜV[ÛY­ÉFÍ å[Ýgí^Õ BHš­Nj¥m悦LJÝhÃ+õj‰BÁí­DubÕs¤"]ËÜ?W[$™Ç—SPg92.h3b÷T*eÍ&†e% Vñ^´¬=L¤ =ý„%‘Ñaw5„†H)’ G¤uïqµŠàú¥3ÌN];s¿/ã?îγ ɪ²±¨ve%RÚ^ÑÓ™Gcd¼£Q¼=†·»ûµFƒ_¼õ6¿û1<¤h\¹ƒ,¸ ì>„[©àu;á:B#–\(“‡xm´×¿‹R>Z*œ¢DÉ/PŽÀu~Çtí…ÂEé'‚‚t]¼n›{²Lñ™9õƒRâéG!8þÖyò9†FÙ{x?O>ÿEœb‘•÷ßãÜÙ³yòyö:Äüü<ËKË´Zæ©Ôj¹’Àl´¨”’Jµ†p‹œûäãðV4ŸrŠøÕQÜú(²XHlûäÒ+¥h6×ùôÃc¼ò•ßI¼´MVÔÔÊ,7Z±µ©¼@SpÌùRáÉú12gÑA8Üv@h?e_š°Õ“Q¼ICU©Ç›±«XÍ!£\Ë)Q†{óðóð¯9;ë4ífuöÑŽÝ- Ý„&£T€Ém:3I¡X¢X*!pðÍŸýí{)øößû"Ž”ÆR6ä!\¸:ÅñÏ®Æw´oÇž{l3³Ë¼ñîéÔÅëŧ°{ÛX˜å­¹vëï|x!>ŒbÁå¥g±eà ӳ‹‰¾MÁuسmŒb©L¡XÂq’Ì-‚ÑáAŽì3YöB ¥>ÿ*}+þÝùe Æþá7^2÷¥E¼?wyŠ÷O\Žos`ç^xòJkî-¬ðÉÙ„m¿oÇÛ'Fð}/±uÕýã\º¾‡«aµÑâ­÷ϰ°ÜÈmŒ;ON_ç“Ó×yþ±½Þ· !Aš»óË|j1þ‡*\¹1És·b  ”Bù~ÌÃùï%¹AŸ-pKÂMtVÐ[Mè¾cŒ—yŸÓO)tÈ’UPè”SKòwj•"R Öíĉ1"Yë˜iÍÚz‹j¥D¹XÌ/ ì°¤–ÚF:Íä·•ey»Ä,J§­m­Çîv¼?ˆŒ´åÙn¥KE›ºp쮳3²8^U—"v»I9¿É(ÆŒ«’xSØS’eÛfû¥³'Y[¸Oü”³£öèÿ,˜Ûc÷ìþ<Ï,Æôlwµ=V>·Çïöˆ^J‰t–——øþÏ>âwö3tq·í¡4ºßë"ÃÇ„^h„+QÂ_[Fx-D q%Èb¥Ð*4 pO ’&JÏÓ>B9:í"|ê˜ÁÕuÞ9{Oò_ø¯ÿÁqõÂYæfïqåüYÖ×lÛµ‡ßøÆïóé±·Y]]F:Ûw°ÖXÇëv¨ÔY¾x!ê,.,0>±µgäž-–ÀèÓWWWß²…}áú¹³héÒ,ÔP¥:…rG+ÃÔÎLD¢ç>â3D û«—Îsàð#LLîÌíJ¤¸Ž¤^¯0¿Ôˆ¹® ž„ lŒyæËáúH‚Æå-"%;K€ZÆä‚yìÅ(¬®¢P4ƒ¥|üÀO‹ƒð=¶it€‡÷o峋SñŸyÿÄeF« Öhµ;¼ÿéå”·ù“G¶³yt¥—Ö1j6ŽÔ¨ÖÊÉ@ŠT‡ä¸.EàèÁí±‚ë: Űë7#q•á¾n¢&PQXÇeSh”ä©à b“­ÔW *P4;-~üË4ÖÛŸËííØ§—Ø26ÄH}Àð?Â&$ú¸7·ÄéKwÒr³À'pzG⢟ .ÇÆÎÊ ¸ÑÍÜTõ2¸E^„¨ÎtϽ$ ­óGÌ:¯õµî å¦Ó“„0rˆR±€¨ VÖšQk»6ãÓ«¯7;J‡Zuò9÷ËA×ÖÎÝZ¡$ÛælâšèYWØIöyr}_Y)K"C—Þߤˆ."oÿ¥SûTj›Ž.:F¾¦•F:Â’¸ar–«MÔÛ_æ¶Ý»Û{tܣ߱És2üý{³«ü·Õß||“Ûváù]PÆ\EJ3Þ‰[Äæ"x-×AºfϪ;¡ ÂÄ£(PZ¹xZ3Lqà(]æ£ ·xóøi꣣9z˜µ…{lß³Ÿ{wîpê£O˜Ü1ÉSÏ¿€ÐŠå¥%—–¸}ã/}õ·{ö1=5ÍÉÞcÏ‘Gغ}'‹‹ 4 îLÝfûÎ]1).z~줹èÜv»]\×¥±¾ÎŽCráòuÖœ*N¡LA3•ñηMjl0¾ö}ŸO>8Æ–­Û‘V.¯ãx}e—£õ ­f›F«ƒ” íCÑqð®˜õPØA›Ê?Úx(H! Ð 0ñÀ6'#vm9˜cÀÜ'JFï*î¶#ð×`ºI›X …È7Š!JLŒº#3³­j£ ná$DQ• › ” 7L• Ò@(ÓÁÝcܹ·Èìâz,úèô5¾øä~Þýäí®ÿÞÖÍClGõ ËëñŽ9ê¬\;ÈH“ᯨ¸PŒR¥4ÀozvWíf…£Ãl ˜*ùÛæú„“ •JÒS!nïŽ1vL Óívøé»—h¶’Çöõ—ã†dX4\½u—ÕF+¾Z¥À£·2¶±f¿³k|xv Ï âkúÕwyüðnT”ègM/Î]½köð}ÒÊúª’Ôç–¥ß4÷A­ôk+›5ª{ºö~Zìt¡š¿OV©n7W5‘‘ò]—¡z•Õµfž˜-!cg|øUx¤­v¥ŒÏEžÓmo$­EžË>^t_²]lkyˆ,Ã=-[³(üöS£D*>’‰t„”aªgÎd<š—ÖÞ]D¡m†Üf»ÂÅÃ{!Ǹ}ýƽ&{VKuéöØ=ÛÛ;ô¬þ¼ ÛÝNvìÞÙnËÚìïÛ÷q·𽫋üÑÞ6µrÑäræÙr„éÕÚ""há GÆüP-‚ÀhÿÇ·F ÇD*í:Æ€ÄwðµFºV[-ޏÈÀþ'˜xöUò$Ûwïb}½É/úžxáyúyjŒoÛÁ½™>úá÷Ù{ä(Ïù×8uü3Ó·A8lØ´‰ù¹Yºí¥J•õÆMCüq ¬®¬P®TRÏS?õ€ëº´šëÌÏͳJ‘"G)”PJôŒÕm ·ÁÝþþ½™).œ9Éá‡_«J[< aÞü£C5:ž:Ê\Èehè"‰ö3)q%Z+DĪ ,•‡ŒXªA{9Î'‘`F†IhË®X&œƒÿ¦3»ï4ø;ŽeÅœ YÈóØ<§§Ò©Tc$nR«NºtÊÛ6U•¾]®Nè+ðøámüüýKx¾1à¹ygö»g¸·°PµRà‰ÃÛMÑ+Ì¢Hé¨`5·)ÜY¤RŠüâSîÜ[ì‹[wó¥gŽÄ]|èœy®Væ6Q`€*¾°šŸëTO(¨È·Î‹u¿¥r9t…tÁBjú»¶n`ÛÄ\ÇE“[KÌ.¯sùú\ D*PÚʰ‡×õq]Éþ›8°{ WºŠÅpµ)ú©©þÿëÇûl-µî“‚#òZØ¿‹P“åË‹ž¸ÐDº¦S-´Jò ŽÃp½ÊòZ+<Ÿ:I:?¯-zíŽYßTËq€Yö\¦\•ÝŸœ™ëƒ¯-ŸîQ”ØE‹›Dò˜3©eQ¥ í'\‹ÓÐfÀÛ‘Š¶ °*f­uh¶ÉÙ£h¶$luqaÅ»×Ъ×c=ë—7^ïg(“•Tõ e±ƒYl@¶G±höñBš šßX€n Y*˜"H€pdÌŠ5÷m–ºAhñ)a7B ¥@¸.¾[à̹+üü½ÜYZçéú8O¿ø ÊkóÎÏ~ÌÌ­›lÛ±¯¹Æá—¾Œ×íð«ŸþÙ™»lg°^!Â-ñÁ;¿ä…_û*·Œ3s÷.—ÏŸeËŽÝlØEƒ½—¶c©äö$Y+Ë65#©t‡áÁ*Ë«ë 2×z=­9ˆkÏ'h´LŒ«¹ºø·@÷éâuZ™cËz³Þ´år—žÔ¹öÔ%%S³*ñ¤ÈKÔç¶OŒˆ.>"1Œ¡\H$*Û¤ð±|Ø#;W¡EÈæMÊk—NQqÍŽ—º°g;t»Ïµw»ÝðÛ#á¼”µllª=>·¥Wý eòFóYPºþ³Woó7—׿ô¸á QÝUTg áŸwÓ5éD¤yäû„¾ÛŽ@áG€[p8}ñ:zãî9£P­óÕ/| !Ÿ}tœ¡ ›X^XdûÎ]|í[¿Ï©ÛÿÕÛ ¢µæ™/¾ˆ[*rê“Lß¹ÇK_ýmZëkÜ™¾tŠ”ËJ• V‹r¥ÊÒÂ<­V›••Úívê¹²%}öc÷Lkm• cãœ?}†™[·ù£ü?¡µàÄñ÷ŸÜŽ×éòÈSOQâÜg§¹víÏ}ù«lÛµ—kW¯ÒXkÐévQA€ßíP©Òj5Y[m0?;ËÄä¶žsmÇÉF«ŒN§ƒëº 366ÆÍ›7ã¢'êÎóÆëY¢\è¾ïãº.BÀ»¿ü9¯ë;‰ÏaâNŒ}p ÂâjÓŒú<z8hº1dtÍÌvÊŒG{¶ ÷s@k‘fºÛ#öx"`ƒ9ñŠJôìÇE/˜çytÁSÙºRùÛå(묘ûLuÈÖŽÕ¼wŒùÊÕ[ót3]v£ÙáÚíy>¸#Ôd¦'Ñh^wf—hµ:f,¾/Ç¡T,ã:.AP4©„A¦ƒÖ½~=»Ø,@‡œŠäv*u •Ê.¤ãù¹uê÷“ûW!,¯6øþb\ÎÇу,,­3}w9£äNŽQ©„mV.ºÆàF:i³Èò¾BhaÝ×zVçëtÞ둬 úe¨Ûãg&Éi³ÿ–{Ï ïû‘#Â3k_ÁÐP…ÕÕV\xjË/õHRÀªc®ÎÊz‹0W=KŒÓ–iZ6]­çõ*ò ³ þÔûØLÓT9m‰þ“ó%s*)™®~ℨ( ]Äà/âŸËØ@ÆÖFob¡Ã{Ñ„æô\ij ê~ jyA-vA`ßg^—Ÿ·³·Éwy¾ñy†MÄëç^gþFÀÞ;ͧ—nQtòÐÚ7ãíãû¼À#(oBŽ=IeòIj“ã!èx]:N»C'(ŒNðð‡lܼ…uŒ|÷ÏÙ¶k_û½oòÜK/¡üÍ_üׯ^á×~ûë oeêÖMꃃœùø86mâõo‡ù¹EÞ}óM–¨V«¬7VÞ¼…[ׯswf†N»C¹Zc­±ÆÊÒ®k´™Ë‹ ´šM‚Œ´°ŸÏ~§Ó¡Õj11aºµ)†k 4…‚KÑ5*JF¹tŒ—¾ ‰kQ5¯ ’se<Ú£W·ˆGìaãæ÷•$ ´O:ñÌ#˜ŠÓ m0O 0t/˜ Ìu0'Ü“¿”J³€=»uÔbû[«Ëé„»î4Û\§s«kMÎ\žI h­É‘R||æ&+«ëÉè<,vnÝ£9ÆNÇçÜ•©ÄKãèº …"…B‘@ ®ÜœKý»§Y+mOätŠ­ Sx;s –‰V†Y¯µê1:ÓdÜ#u´62Ì_¼wš•µfüóÍê|勇ø¿óøµ§9²w‚Ñ¡jr*;=廒 ’®¼tºËía¸Û»oM¿ öø6)"sicÖ»Ò} Š0è©cšž}»ÎÙ)Û«ý¼Ñ”Ð"=-¸O\­D28P¥Ppã°ä½—)œ£çÆ*üКF³M»ÝM÷ÒÕPNÑeeñdkN-ÒÞ€±ÙMNå"SŒA­ci‹°q±|#þ5Ó‘Ëðvqþ°‘¦J‰Ð‘)JމG[AΊDƒ5±yD´ÃÉ#³åv¿xT[wê>¦%YàÈjà³`•%äe=×ÉÎ÷ét=¾ÿÑ ®Î,áJ”ï·ñü.^a±é1*Ûž¢:ºG(œÊ0îðZÍm/ ëЭŒ±Ú•¨Î ·.œàîô *å=ñ4'>üˆwÞx~‡}eaa‰ïÿÕ_°kï^^ýßâÄï" eÚÍ“Ûxì¹ç@Àñ_þ‚f«ÅÖí;F¾ï±at»vîäÀÁƒ<öè£:ò~ÿb)kÔl6)—ËlÚ´)eö“Ýç=?Ùç&ñ;ŽÃû¿zÓ¬_BÏö(ì$rd“R0P-S©#n7WRt„4r6ב #ü•ÈÐ’UGÖÆÂr€3úq{›·NEÀ‘­‚-¨ IDAT5nìù*cÝ;á1*azö(°+^WYþï"ÏÇSˆôu,¾MjJ§ƒDìû(„ ÿl§ï.Å2-­Ì•çνå@ëTþ¸ÆÞ8v†v׋ºZrbêt=~öî™ð9Ó!ED°yà #ƒå0~xê:7oÏšT½è¸E8¹‚Ï.Ü¢ZW+•„à:Nüs¥4·g¬×˜)r¦î-&÷]“¬ìä÷˯õO jÀ“׬)4*0 ÅÔäþ]GòâÓ»Ù²iˆb±D©T¢X,âù*ù;QQJëxušFþz ßÄB÷K9Á6f"gNp?î[ºˆÔ"ëŸi¡ÒZl ûƼêt¾äMªÔ2;¶;SÍJA} BÉuó9Úî“dwÏë­ÍV­z ,[&¨íŒö<Öv< îs¦¸I̤=M°“Ðìýx2$ˆ÷êVeæu ú™ÈTkänN„e’1…”´[ëÌßx©VñƒRjÇíÀûíÖó.þyr5Û%Ne!Â1q4úƺÑcÈ’é²ä¯ìXÞÞ¡gYóÑ}.5|þúØeþø+‡,áG)lÚOmÃ.Ê•ª9ëÊW>ÕÍû™ºA'pXïhÖgi¯Ì"U——¾ôö?ê£TÀ?üO|á%&¶ogóØÃFxë'?¦Ý xùµßäÔïróÚU†GFøáÿûWlß³ŸoþÉÿÈ[?ú[Ξ<ÉòÒ2ÃôÖÔ†GXk48üÐ>¶ïÜ…”’F£Áúú:Õj5~š­­V3­žQØS‹N§ÃÄij³³)í¿+«:°GïQ0ÎåK瘺yÉ»Q_… ~ÖÎZ¦á:­f-µ±> Gˆgfôn¬RȘ4e6Qöˆ]›®·“d£ …"ÉBﱓ+!/’iö¬m–™%’ÙûYû¢S-hw=õǧ¯3±‹7_¡Ñꂆ¹…5Þûø/P-²°œ<¦N^c¨^ctd¥o?Ëô½•> ˜VÂdµÕBJ‹‘ž\Knß™çàÞŠQî,¯¥Ìm´TˊŲY×iÐÝ7¦Ò¦#¤wèJåë˜uÏN<¿MÖ©cèÓëÜ_ì],÷áéÑtžªî/RKN÷ƒkâ×µè'QìU¨Øãk ”Ym¶ !ÓÚ±%.tº¯DP«îûŠZ97÷\‹ìs‘HùòSE7CÄçF.)æ¼ù+"õ8UÇ;óèbHŠu fè(E4Y´½du¨‹´ïöœA˜ øêâ,;ï¡KËܽ;_Ÿ4#Ðût–±žíÈó˜ìý¾Ÿó<+X[gl“T²`žç—Õ¨ÛàÝ­{+üÕ//ñí?øõ‰ƒ”«5ŠŽ@^Š…ïuÚ¬·}¼ê$ 7ÏÐ][Du[Ô( îdÄ)rûcüâÍwh~ì)¾ö{È_ü_ÿ?ÿÑŒ t›ìÞˆ“}Àü·ÿ'ÿüOÿ%ßúöŸpáÂEö}Œ¥¥e¼®Ï£Óéz\½xžý‡æ7¿ö;Ôj5Ö××Y^^¦ÕjÑjµh·Ûñd"zœžç¥ôÙ‘ÙŒÍ#p]—V«E½^gtt”ùùù”,0Ë|·6Îþžëº 5¼÷“;v§2“µ Œ7LXè— .µ2ë펱Âg póŠ ”qÓáTJYòN²íïƒ|DþŒJ]”J“è2ò4P±‘´–óÂÞ߉û¥ØŽq™Ë¢ŠSÁò@@ÇE·#$;&FYX^o7·Ôà/þöø}$IÄÆ-JÜ]âä¹›©ÛZëÒEB$ñÖDbûY(¸h•¸À½qìo;À·_ÿBJ_ßîø||ê_xê 1,étxóØÖÖZ©qm‹´Îäâ[˾lõ~À“Úo뼂H|8½$ HõByšè&2d==÷Zôra¢éh™-Dò+yéd")>ûÚ½ A½ZAТÙö°£Æu޲Bë^¾œçû¬6šFÖ"erÅý¥ú 7Qçö4ßÍÈØRU›°õç!y-Š ”"Ñ«k NÈÞ•B¤ˆŽN*ü@Äj2w é6fxtr•Õ» ´.ÜŹ7×up6ާFXy–­yºç¨ëÎ~¯÷MŸÎAÏ i±%TvŠZV–Mb³Á:K†‹>·»ÍÔO_™á“×ù½ýOÒívè"5%X[[3 çº Žnfñz‡@jêã»Q¢ÀÊÂ,k³7)wØ»o/[¶nå³ß§X­1>¹)cããœüà8~ yüÙh7œúìSF7lâ©O…"_ùúïrüWosçÎ4ÓSÓŒlØÈÃ?L©\¦ÕjÑl6ét:t:¸ËŽ8¶‡»-?‹ÐG€Þívév»LLL°´´”:Ÿö¿èØdDÔíÏÇáêå ÌLÝb|rGzÄ&‚ŠRŠ¡ këíðX%B*ŠHüÀ>eÈv7ކ µÉ?p¡G>ñÔJFcøHg®­l¶BTn¾Œ“œŠ½ÛãÝy ÈE_}y/a'‰ÞLѻ±xŠÅ­Òý”)îÞʵÛó,®4sÿR±àppçŸ]º“ú©ÒŠÎºÇÏÞ9•ê$;4ÉøæQÇa|ÌåО1Î]™‰Aä'¿üŒßûÚóT«FþSp <ýÈ.æ–Öz´ëý:èbÁalCÛwWR¤&‰DK‡Ã{·ríÖlªP±±¥Xp8²w 'ÎO[ô-‘Âö,Éž2 `×ÖÌ-¬å:¬ûìŸ{—Ü:m ƒÍF§o>xvžëÏ.ÈeߣI9˜öaÄpµ ­sùXit:£1Ö<Úæ=Ö*ešnêïôÏRO§3úAÀêZ‹jµŒ®‘é lI¦Þý=ÜíÇ&Rȯ•Q@9_}ýÛÿ*¢ÛöÈB†ZòÄž5Šÿ2J’aB’eÄ"’î5²©t"g8!#ã=  ;šAgžƒc‹s ,|…örƒNàÓö|¼r ­éÉ<ÏÛ]g™ìÙl–Ùž—²ö ¯ûuÙQÞ×ÙnÞ.<ìãÀåË™grr2&â5›MYXX Ûí²yóf†FFq UšŸõõ&s·.ÐZœ¢VfǾ#tº¿|ëWL߼ɞýûxñ×^ãâ™S¼ó‹·Y[YelË&ž{ùUÚÍ&ÿå?þ'®^<Ͼƒ) l߯¥óg¸pîŢ˗_ûmFFGét:´Ûí¸3o6›´Ûí¸Û<‚Ï›f'„```€v»M£ÑH­#²ÿòbm³_k­ét:ÏÃ[€(ãÊ>8Çx¾b­Ù!ðAà!a}"Q‹ª{G˜)–’"íø桊xä'âa3ê1˜‡Ëøxœ æÊ¼1 ‡áJïÄ36†9—ƒä6æ=¡¸~ûó‹dêµ÷Nu€­Ïu»·"P,,7w œä ïfp B¹ä2¶±ÎĦA6odÃp½ýY8j7£CU^~îÑJŠH)ÛXçÆô­@ÔéúÜ›_áðÞɘcƒìžÜ:`&ut.öx Zâå§÷Q)¹9½ˆÖ°q¤Îž[B:ãHöîØ„ÐŠ¹¥F•«'ÚÆŸÜÇ`½B¥ä0¾©ÎÄæaÆ6Œ°iãÁ½¹enLÏÇçnÓh=;ÇÃUsG›6 P,—×AŽNúç'ÞÅP½ÌµÛófý“z<æõX,8“¡;¡”ÒÈ=Ï7S˜‚ãR(–(”ŠHé TxßÝŽqrÃX/CW5ê{£Ûuéz]>;w›;sËÜKöò£CUvMnà‘CÛ‘Ò¥Óõ8eŒ pxßöÐ….º?ÏëÄ×ÂÆÂqܸ€´Wf®[0†1<¿K7>w’b±D±XÂ-[Ws­éâu;ø¾‡ïù&`JºH×Áq]T XZ^åì¥iN_¾?Qõj™»Ç8¸{‚r©€ÖеF‹SKH×áéÇö"„Ä÷<ºÝ:P׃1æq@8¡ÕaÏŠßrÌŒnuoç›ê3!!:#O$åJª#…Ä]÷÷6ÐY‰š-ŸÂa² mQQ[KûRJ{–âõCÚ‘/5•ÑiÙZ»Ýem½tá) ’ãÑšL œ9Q•rr©˜(²ç'$V ‘(ΔUAö¹‰HŸ±é{”Šf•dZ‹”7´O°»6E.ˆ2UE¬Î±+,)’û‰.„55Åî s´.ÎÑ8s ´¢T¯Qݺ“Z±†ž§Õé⯭³äwÔ=úYk|žíÌÚÔ‘ÛÞQÕ]ˆm‚\lg]´3¾Ó¶ÙL4ж÷èvA`çÔÔþçÎ׿þu‚ `ppz½nt¼333”J%ƶŒ³ûУ(¯I¡\cîö5š SÔ†7pôÙ—(ݘágocîî<õáQþÞïÿ’€_½ù æfæ8ttWók¼ü›¿ÅwÿÝ¿e~öžŸ}ø>/ýÖëì=¸Ñ âГˆ­ßétrYüiIžê)¢Ï³»vÇqhµZÔj56oÞÌÌÌLîØÝV+ÈLˆ‹}›è¼v»]>>~Œ¯þö7Âש¶ªðÄpÆq$7Ö¹;¿JAJ<¯ƒR†ñí)Ð!Qš¡HÊ 5JÙ±§½#v¦£§ÁÜêÊu†üfI×T^ƒ# Ïß9ËÍ ¢õ€ãB‘ÐfÔ\”ÇE:nl”Wé %é&©jaý ÇL9„å&&Œc!€’f½äІKà8¸ŽjéÍú‰¢1BQ¡Ï»éºaá#Â5P(!¤) žzdIC‹ì„C—6×qÃ˵Oßbdx˜ñ}(Í«gY½~…jQòå×^E{]Ξ:I}xZ+^~íËhoþðû<óâË8NßÇÖú2—N½G¡èP©Ç@™I›Ud‰ŠÙsûè¹p'uÇqcuu•V«•j{on3ܳ-AP(âß=úGŸx7R(¸&GJÃúMøÜ(°au®×Å „‹pÌqº&{^ÉXþ%‘„p‘s›æ Ñ"rK’–sË%ËîÊ# W`Â{ìj_t>®§ÈG"5¢€v܄㕙5KßÏŽ‰œÊIÒÚBðJ[Φ/îR˜!tb›r[T„cj-U,›5œÁ®ó@ IAšT †”DWufŸKGÄ#ç@¹I·¥M*œ w enR„ÓˆÄm(âö¥N8• ý0¢sâ¸%ݰ ² ²Dä­!‘B# "&Û”¶u¬¡töÑH)q¤qì•ëq…gŒcˆ½òM-É…u¯~¶¬}Œ`r¯â-=nh÷s¦³öÎqĶmºÒ‡$!Èìûñò [|dªmYœë<}xžkhxûRÉ¥.ª4!q1Ûó–ÐI~¯ë™¢´V+%êq%íõ°]É3D²oäF­ñÌ>ÏZ¿ÆéÉ'|ãH!C›»ø‰/–q ¤î§ªçÙ5z—î廬~r Y‡FÞ}§>@×ïR-™‹kE `9ßëÉ,·=(#’šíÍn[³Þo_že»ç}Þ¸=Øí?ËnÏ~ô¸:'Nœà‘G¡Ñhàû>•JŹ벲²Âúú:['·³ÿÈã¬ÏOQfñî V§.à8EŽ<ñ<ã^‰c}ÆÅÓg˜åýoŠVŸ¾Œë—/£Øä(¯ýîïóïþ÷ÍØX•‘ñ-¢B³¥Xoubc<"b¶{Î~/¯ŠgÔÙÛ½V«199ÉÕ«W{ºïlWÞ/¨%""šóØæâ¹“TžzÝêRtŠEוFŠ&Bh ®`Ã`•» ®cï2t2ÔJ#] ž¯L—¦C ¦B!”F8šð«Ð\&æÑˆ]çKÒ¢‘½­¤Œ9¹BÄ#Áþ@M*+UJvõÂÊn0‘Ü.›3urQS‘ôOh‹ôšæŠØi'[žšÉš–’ååU~úÎgÜš6Ò³±C¼øÌavmß’áKh´r¬^+;‘*ô%šŸ¼}ŠSË~ÿž ¾úÒcT«%ÎQ´œun챫2&Y ‘Ð î=ÝÎ Q` ‰l)´ Žã"¥Ÿ§è÷b‰cLHvÂç[%¤¼0†OH«=ü»ûâ` Þ+;=$:}¿ûµdV=a+ú~E‚H¼NÆEÏë1‘TkkdÈÇè„=®ò)þ¹lÓôÉÒZS*8ˆ «Vê9Vk.òV")_¼ `µaœå\lj¹© JTÏYÅ•Yƒ[Þ֊ŵÇh=êXYå±»M¾1+V§ÈV›Šº”dDTÔ«ìÙpuë+^BKI±>Ìà¶]G ¼Žt(JÉ@¹€Öµdô( Énf1Àóü¾§ýö~€ÛÈû±ãíÛåqÞß±Á?;r·Á>;m8uêW®\aóæÍÔëuJ¥Rì°¶¾¾^ `pl#ã{øì­ïRs%· :¼…å¹{Ì_ø€Ùkw9tôaÆ'ƹrñ6så” ð»ðÆ÷ÿ+OñEú ¢4@Ë+Òíú ]ÖÂn¹P(ä*²kŒìJ#›‹žíÒ£ÇuêÍf3õééé¾ žÕ¦g?·ÁæüéOxè±ç(‹x~@×7ÓbÁ¥èº±gÂÐ`•f›vGáÊP–†‘WvƒáHJRhÐaº6Y­",( ÿÄq¤ÅX7ˆ§/Œ…Ê×ÛúrA PAoîòo¼s’ö?ü†A¼Æ¿÷Ó¬ñ¥gJI´~úËO9}þfîõÿ_ü“¿—6†RŠïþí±˜íý»&ø_*!oEÅ øîß¾ËÐ@…ÿù;¿À™KS|ïgñµ_{’Ý;ÆÃÂ(¾ðÓ_|ÂÐP•çž8˜*~»[À¿ÿ«·@kþø/2T¯Ðîxüð­“ü?õ þø/S­”âûÓÚÄÇþå÷ÞaeµÉ·¿ñµJ9Æ”ë·fùñ[ŸðO¿ó!¹·w.ÝoD¹íÍÌ.òÝïã¿ùeFGÒѦ›éŠÔÆ|å‡$Y­áú­{|tò·§çñ|ŸÁz•ƒû&yá©Ã n"Î#Äé¼´³œHÎ0ÞµÝs+Ñ'yM§5ú~µEÂ7ÓŠüô}0¿ïšIç·äM'z&*/íM÷¨æ4PpkeVÖ[qdl,Ÿ Õ`:m‘4vÊܧ 4+µj‰bddcµ•"g7ݤʘDè2u£Æ#r‘ݘ1™”–ÝX#¡t$OÓVgnvÌÁ G"é²½~¹¼ÀÒ±3ˆ@QÚ@mlÂø¶{]Çhr ÒAá + dÍœ,i:¥bA2=·ÊüŠ©‚ÂYV>–ÈöE?×ogŸù?Ô#0·l²nïÑíïÏÏÏsíÚ58@«Õbee×u```ÏóXYY¡:PgßÃO0}á8ƒ£ø&·O½KsyžÍc»xýà3\žYæ£÷ÞçÌgŸñ¿üËÅ‹¿þ?ûÞ)xs\>÷T7Óñ% Æ v»]æççÙºukÏÎ?»öèw®²¬~Û¸'ú×ívãÏÛí6###8ŽÃôôt®j!«^Èú¼ÛÕêò"·®_dχ㋟4ív—–î"… Pp(\FëÜõVq3ÝvƒŽ bBk”Ú8Ù1­IŸ¡g@  o8Qžª°6aá|=óô…6 «/σñÌSjÕÐÉmïÎ1~ù¾ÃùK·9´oRšn{½ÙâÂÕiþá·^A«jóeV_zö0GömM©Y¢u‡tdÜQ*@+ÅKÏæ¡ý“ñ®¬µø›Ÿ~ÌûŸ\ä¹'"eøÜ+ÅâÒË+ë|ë·ž‰Õ0ÜN»ãqòìuvmC8N$ŠC©€@+3~Ïü}(ÞûøÍV‡ø­/åŠäõ¯<Åýñ‡¼÷ñy^yþ¨Ù÷ #³S ­V—·ŽâµWžÓßtÈ€ ðÌÎ\Ë|xêü›ÑȉÓWøñ['’ç0PJÇÿ󎳣¯Þ9~†Gìâ+/?n|šmŽ}pž¿ùÉq¾ñÛ/dÆÈŒÓŸï擄ËnÌE¿ &!géÔˆ¾ ,iÝ{4_V=wÍhËÕª÷ìʳá'*þÓ]/@ieÞ¡r*òèx‰Ãž kÊÑ2'ÆüÄ VךƧ"&¸ Ž“za¸Ò¤à92âeèpJdìbËÅ•RÉ"Òˆ|O}Ýÿ9rÓ ”è‰÷BBÆ`m¬ tŠ'£Nâ➢íÇD ­ØRºÍ€ZaùÍO Ù¤¸a#•M›…×A:%P~|!,Jaƃ²²Ž”†¸äº’bÁ¥Rr˜š]ÆÏìSm0>Ï–làJž[Üߥ;Ïv§6IÎÖ­ÛcvÔóòØ…xžÇùóçyâ‰'p‡Z­F©TŠÓÊ‚ `nn޽{÷PgÏã¯òñþ=jmžáÑ1Æžx…®¯™½~ žgiÍgqnwßy‡ý‡Žpã܇lÞ6Š(m ­ê¡‰Šœ8aîÞ½{lÞ¼9Þs»®Û#-Ë’íó”ý°Xò  è>†††( LOOÇ;÷¬%¬­÷ÏÆ«ÚÏÍ¥s'Ù{àáä *RKsñV¿ãÓêx\‡¢+ð}!”!µ©(ÁÖD¯B9”ù¹¸ƒ•%C‹..&ÉÍôéfü-ùZ[æ#Tj—×/R)Ýc“WöJsdÿ$®L±ÏR'Ï^cÛ–QêµrJ5dþáš-ô¿IkÒüK{°„ñáŠÂØÆÇNó¥g„ä]™¤²)ÅãmçãÓ7Ù1y‹Ãv†ñ°!±3ÐÔä}R93Øuôð.íÝJüëÿûGÊGë ­m§—˜¦3äˆèëï|ó•TWZ¯UøòáßüÛïg¡§ç¸òˆ^:wΓP† úë<í|–—3ŽG¨”Z.½™¹yœËž"Ä%@ë]ÏUyž‡(‚@áAÚ XXãlk=ÂÐÈ&¯Ü±Š›‚ë0\¯1¿¼†ç«ø©Œ$nÂ2 Èd­¸‡e4ÕJ‰zµbÖ€–b,>X•%ĉÔSâæ­øÓø Gho‡¸ › ÓÆoÑþ=ìV„#.Ì31Ü`é§§èÜ£´q”òȨé̃.ø ‚0ã[ ¤ë „ ( 9é"D WŸi×u( Õ*Üœ™ãÞÂ*~«Ô IDAT™ÊÔ΂³ëº±SY^¼©íòfï}í½{ÖP&«5·ÁÈvƒËŽÒ³ ožDîÊ•+,//³iÓ¦ØÿÜu]c&÷úz“²‚ûâüÛU&Ÿ¦<0Êâ­K,Þ¸ˆêtÙ5\`¾åS‚‹?ùk¼Ýãì>8N—!ÖºaˆI’¦—ÈwŒ›ÛÜÜ›7o6lÞPÏ[w䥭Ezä½ÞÈý¬R©°}ûö¨÷ÛÝÛBöãöõ+,/Î12º™(ŽH!q¤N…r´ü.A`¤C¥¢‹ë8¸®Ä < u¤°…ûÐÈP1r”#*€¥°‡]!NÆc|BDþ±±F] ‘¢ëÞ·§KyN •h!Ø»kœ_}hºØZÕüÎÅ+wxøÀ¶ø6¶/µV*6Ÿ±w÷=S-e5ȑޛ[æôùÛ¼ðô¡ÿp)$¿ûÚÓüüSœ¹p›r¹È3ígx¨Fìµ·ÕÄEƒMTáè¼Õê2¶qG:1ó]k“7¶iˆV»k •C4ö.º.¯]ß§ÛñéxQp¢×§D±¥cYR@‹Ä¸FèÄe.®c„ƒÙc ‰–›FY\nÐñ}ëlIÑ„ML¤ih^×-Zíƒ5\7ÁTG„ÅtXHG9éƒ0€nqW-¡{R÷"íyÂîLØëFöQuÇר=t‡í# t®Þ¢sî*²ZÃB8íw¡P@év„±Ép‘„0߯”q¤û¯4JÁ@Åe¤^æúô+u£¯-$ a“âòØñöÎ5;îÎ#Ïõ»Û nÿŸÞèØÇaÿSÆZ³´´Äââ"ƒƒƒt»ÝXwÝnw³HwíHAed3|å;œøÙæÎùOPëk ŒëYMµØ7T`c]]|9@ÓÀqÂÝEܳãcÇaff†‘‘‘8HÂv[†f“Õî7‚·Ÿƒ~šÿè£\.³uëVfffrí^óø½ìzŸËçOñô ¯&ZqÓ¼"%(줆kÌÌ7XYZCJÉ@¥HµRÀ‘å›7˜²˜Ý*ndTÌù°©2Ñ,Þ  •V¸(•ºáUÁ‰Øîà û"­TÿàŒ„t%¬±m|”ÏÎ\ç™Ç÷±¼²Îòjƒ½»ÆCyUT„©xcúówÏðówϤ. ÙÅk_~2¾ˆêÄìš7áÍc§S‡ñ…'÷³o÷l‹,ÜoÙ4¼þ"Á©ó7xÿÓ‹ÜœšãµWc׎ñžÝc^"búvÛ¬ldøX¢õ IÉ3ÒV«K½æ&ÈKnaßî-Ì.®òã_|Ê7ûù^ÿvx x‰ÈQÓHåWÁ~²/m'fÜG–óqáÊ?ç$ÿàᅵBËRÕ³¯ÉK2Ë«ë4!N=ˆŸt{ZVBÓý ‘‰K Þ÷Ú]vÛ£ãyaÆ@zÏœ¸ŽæúE*iMdHkB§©lÑk+\A Ë ¢—†”‚Ñ‘VV×iw=ë‘ ‹À©c}½‘»f†BàŠåÕõZÅÈä4Ú¬ý’ê1w'x!E˜‡ÛJ&'DˆðɉÕkÔâ ‹´„"p¬$Cøh'¿¥z‡B{™å·?À‘9P3ï!¿,•Í(Ec@=p 虆@£…Ä•\‰¨M˜{AR( ®a”\­—¸}o‘›3+¬·Úñ¨ÝÑì/«9·A5Ïâµß^Øëìíí=¡Ÿ¯ì×Zk<ÏãÊ•+LNNÆ*yÌu]Êå2ÓÓÓ 22ºñ=‡ø´µJ{e×-Ñ\YQà¥oý ‹·oqêço"÷o£0:ÊòrÕ }…î™"d'Ýn—™™&&&b@Ž%õx¿j9¶õÓû«>yÜyÌi¥•J…±±1fggs3ÓíB)ú=“‘ž<®+Ïðä³/á®>nGJ´à„»× PlâÂõ6]ßg¶Ù¦Pp¨– T*ÿ{ïcYvÝ÷ýö>û¬gWõk¦‡3ä 9$5”,Š¢(9ŒK6d²c[y–$@H‚8@>ÄùIÄv ÑÀ¶à±ìÄIäÈ–lI¶”IQ¤hŽ†äŒæÉ™ž~wU×ë¾ÏÙ{åÃÞûœ}ν·ªg$1‚ã Ý]uë>Î=÷¬µþëÿðð°E+´¡µsSK¼!´Ô]U1·´å³MdOW$Wm}aŠÂ:§)Õ4ïjdt7 ÕæÄΫ瞹ÆK¯Üä“ßþA^yãÏ}à*ý^§îú£¼há>ó1^xþF‹|š4VF1ìû?ó<ßö‘§HR']»÷à˜¿óÓ_à™W¸ñÄ~5i‰ÀýǼõÎ}>ýÏðíšOXáí[ù¿æ‹ü¹ÿðЈjÄÖîk­Àp66zÜ}ṗž¾ÖÐfã«“§ôºyë>½ˆ¸×õÙïþ8ý'ÿ)_üÊ«\ÞÛjž»rÑt+7>þ (Yæn­Å\Öx†£\ÈÐ/á%^yý?ö£¿ŸÝ–š!V)œ#o†ò.ËÕt4â®kÔc𧍯Ø(,‡¤öz(¸Óù‚ù¼d6_0_.Ÿ¼ñdTs­äù* f¹ÄJ;?Fä°°R}éÐc±uK®Z¨Œjø:¹†ykÈéhÊh:NÙV¦¼mº4õ¦*&º*¬NGSz¥aØsª Q±Ü¿gÖ¥øA×!VZw¬\ʫڧÁŽWXš÷:„®:ãêî„ÑçƒòàtØ'餈™a‹9Ø%P‚] å± 0bK°%JJ´YŠ!K¡×Qlt5»]ö¶ûìmõØälmtøÈ]>õ±«<}m‹,ÏtåJv¿1Tþ§6±nÝnwÕ½Šé½Êîu•í*Ø8þÞb±àÁƒ.•ÉZÎÎΘÍfdYF§ãRéÂä¬:½ >ö?Æd:™ðνŽN«f@i¡–ž{=ˆ¯9~.W¶šê—Ò+•ËQÚsݺ†ZS|ldE[u鱞\©¥+´ÛÉižûàuŽOFܽÈo~ãm^øè*xx‰]ì?ïIe“8Ýw‹Y­™üu"I¼¦:I¸ze›×.ñö­‡NSå¥?:>ã«_«’Š)íÈD—/m2-˜Lfú ‘<©*v‘Î^€|ð/~㛞ì&Q®»ðâ7Þâ½ÑFjF—oõf1ÿú}'¿òÅW¸ûà‘{,»\\Õø*]uœ”Õ¶F]!hˆTÍÛø_ÿÞ/rðèŒïßù!®]Ùm=µ–8ÖlöZYé«öãÒ*›ƒž'¹†p&M;=¶9Mûás<›-8>›`¬&yÝ:÷ê(å´Ò³UN4ª6šY"?¸.A©xõ°bu±ÚYÎ?Ã˽»ÈÁæ/¾ŒÊ2t– ìÂ1GK…*ÒÔ?¼ÅíNk§u†(í]ëm|žiƒ$%d ú š M‡DF”쪌]âú^—oÞ>áÎÁ˜ù¢ M³%È{ÕÔO|í0–öÿWéÕÏÓ±¯"Ñ­3£i_0=zÄñ±‹¬ v©“ɤòA¿{÷.·oßæ…>Á¾ýûøÄü7yá»>Ãgÿس³}‰/ýâ?äÝ—¿AoH6p| ‚ïíÛë‚øç÷ïßç©§ž¢×ë1›ÍX,dYÖH¹‹%fm"ܪ}z¸ÿÀsXÕ,…Ÿç9[[[ŒF£%r]Œ´(¥ªãÓ×_y‰'žz†X"ª[] Vg@ÅÕý-ŽG:’RÇ”1Ž8:0èwØÝì‘wzäFj…hw)Ð~ÏhCúJhTWp¦^3 Æ’…ÝsØË·µì*ù:E¼öÛZǶíws¾í#7ø…Ï}Ç¿ñÃßC¯ÓáÑñˆÿçç¾Ä'öètR·¿¦=~µäVÊ!‚ßóÉó[¯ßæoþä?åÿÈg¸´³Ád:çÿü‡_àødÂþÁO¹æ'ºÆI„3:%‚æú•KüþO}˜Ïýú«lmö/`¤_ÀWÇOÖȧšb#HU5µë|ý·Þáçù«|÷w~˜ïýÔ󵔯‚²WK½í€¡eÊÞzºQX¶ØÇF'ê÷EQ‡¶,;œ –ÉlÁx2çl2£4f™:FõU¥r¨Pä%4" qCk›G: ï–µ‰…•ç@Ô»¨V°K€â«óF5~—$ÑœœM–^ÛR¿=åjgïPÃÑ©KlëdÉr«yô{–»®‚âŀĨˆ‡ÝëXÕ*ÒM|Ò”gÄ×¶BW²•=`üϾ “1úÒ%¬Y ­Ó튀-’yâ›¶tÙ*1Îì#M¢c–ŒDAŠqïLb¡£Ð¤h•‘1žLg%—·sv†ÛܸÒå›wFÜ;œ0›C’²¶˜Ç…ginݾ¼Ý‘¯“Ã]d_Û¾]¸Ÿ‡r||ÌÎÎZkf³Yµ[Î2ç<µ¹¹É`0 , ”Òü?õçxòÉëÎÃ{1ç­þ05ììïvº”&!Í¤ÒÆ¶wÿqQoCï>dww—N§ÓðÏÓÎÚ„Áuf>¡cÖÂó¡ IZ–eôûýÊ9/ûöÊ#<Ÿø}¹ùÍ×X,ft;=D9·8¤'J‘jMa-I¢éu2v·†0¦ ©¿ÏÑdÎÙhF·›±·9 ßÍ‘ÊPÆO­ª®cKE3rùj߯Fÿ2Ö TŽV\c[͸¢vTþêôü³Oðë/¾Ág?ýQ')õ…L­ Þýüç~“Ÿÿ•ß\z˜ÿò?ý·«KtÈm¨]՜߾X7w;9oßzÀ÷}꣑A†¢ÛÉùñ?ñY~î—_ä/ÿÏ?]=ý|è:ßÿ™ù!C-K¯B¥rF2JiR@"ü»ÿÖð³¿øUþÇŸøÙêæÏ?{?õcŸ¥ßë: Õ€D¨šíî"+œÅªˆð=ßùÞ¾õ“³i%©;¯Œ/}®¥¾D®Û¡KTðÿÊ_ÿi>ù‡øW>ó1lxÝÑmÿÁÏ €_ýâ7øÕ/~£q?ÿÉð£ zµ•¼¹WKƒ¬Ðq·(ì+ªˆZ9’a\HÆÓ£ÉŒÉdî<bÑhØÔ»”Úà¬}Us§ h0©šùVǃâˆ'ï—Þ²cU­Üt–Šx„H½nÐ@¯““jÍÑÙk¨¨²ºÒ­ã×ÛµáÒr®|ý‹NæÞcgxQ!"•Åÿð·~^êÎ fU×c°y p]à™$ÞGY{ç©Ò'°mË«<“¾ÊñßúGäXôÖ&t2t·ƒêt!ï :%íwÜ÷’ T†J3’†ñÎ>†úÛ«‘ðch?ݧ¹X¦rÑwvv¿ïÇ~üÏðħï£õñ”NWíþ]”†é|Îo½y—Å¢Ä",üq) ¥#®ض›§ìlõô»nM¡ÅÜ4Iî¶Uήïm³³Õ¿°Ëy“¤µ”><ŃòkÇ3Ð ízY–,æ ÿžI¥~?ɦIRŸ۸ϒÂ9±i¯7Æ`¬©šŠà›.Õš¥l4râÝ(“4!K\8ŠÒî"Ρp_N‡®+v¶1†Ò¯^ÄÚqKûóHûÇçyõ¼Åû³k÷ÜŠbQ¡>Yž“øð™u¹âõ5¡¿Üõ¤Àã-j½”®ecæ\­';%Õ$Ø0ФŖˆ‰n©ä’Mã”ÖD.­.BÑ øðĵã!Í€–&%LѦ¶!¬pZ–†³ñ”ñtÎd¶hæ)‰${¾ÉT–È_ݶº µ¨(ê;~=qa´1sMš÷ÖxÆœ<%+ÈuR…•U¯[T“JЪóáa5ŸŽ) [#äB³ak{¸DO#î§Ò4a8è‘$ªáÙ¯”"­èl¢ü®À}b«ºØmGÇÜ}í§Tåü‹ã…½ƒJ¶ò‡L~ë&ӇǤW·H)°Ä(” Ê[‹)@%^> ¬Á–Z,¤IeÄ …€¤îÙ’DÁ`µ¥Ÿ–ÐGnQÚ'¾ ‹¹AËþ–f«×áÆ¾æí{sÞ=€¢P¢pt¾*`ä¼îÜZK–%\ÝÛâöý£%Óƒr¿èO¸Íl6ãäÄe)gYV°6©/?‘‚<ÏÐÊé¬n<ÿq6sØÚì0ISŒ£“e"^ÌloËîâ©úÑ£GÕ”>ŸÏɲ¬‘I¾ÎInÝô½JmІÜC‘×ZW$¼ØR7ü-"t»Ý 5»þÔ»2½ñ[_ãɧžö§ºgC+gÕVT¤*­Ý<ãÒöƒ£‹ÒjÁwa-•u +åØÖÓyÁôà„LÙÝöû4}A!×ë ¹F“$Î.òýòzýé½4£jä´NVŒa®¸å¢€H¶æÊ*…†h¬MHµ?W¢&VkEbýîO'õð¸]»5ãuåâ-¥• ;x]]ôU=g¼‰O·ª×–$¤¸¤qáD·6.ÿ=hêUàP$šŒœ$±•4)f:¯EœÛÜíʇ]Eqj‰dæXÐõ~TVó›;ú% •nLã²ê¾d§^–&r%²—®Yd5ú1°¬p|6æôÌI%Ö¡Çë è/ñÎiÒüýgÄÚŠœ½|’kg­,¶’[6ެÅÛ·œ6JËkJ{ jVÖ8&N&­Ú”Àf÷¼œÝ­!'§æE@øT˧¦>ÞÊJ—÷°‚R‚1–ÓÑ„A¿Kž&ö-¡ò£¶ hÆ{K³s¨‘w᪽¬}˜€®!€Ü1°œ|ãm,Ö]Ë*U`5ع[‰h³ÛÒkx3 6E¬AL†ˆvV™‰c[ÌÜÁ„Ö ¶D‹Z‹hƒMKTnœÙ‡¸UÁ Ðæb±¥akÿ@ÂÎ ååwÓ9¤-¾Œô„«`ø6¬ÞÞ +<÷Ä%>ûñ!Ÿÿºåëß<&OõÊÝûªÂÞþ~ ÆÑëõ;âxbu:g)Û[Cò<õ'°±³K?…~ªÉ6zh½X"ýÅûþ¸¸Çy\@OOO Û}Õ$ÞžÈãuG»¨ÇMUl$SOT¶*â1é.ü?¼Ž°†˜Íf ‚ÐÝ~÷›ã`õʾQð“`¢5J\!Ý¿´ÉÁÑÈ5€¬ÿ…Ò*ŒHUØÅ( ,÷Îxx|ÆÎFŸ­žkÀl±ŸSÈÁiPÑî'EkEta!oEEÆçUâÉmªÍ¡kÝN'©»(¶0ïP°ëaÏGŦuÁ¬&QîuTûáfv¶NR”Ž<à#R¢DûäªkÝX»†I !Kê®JUÁ0îKëÅÛqÔèJï8×H¨x¿‹,¡âªrí¬ÿ_IÅ_Ÿ#¶\­H©ó3¬ÈúÕKû[JÖ0çš»ýxGÛN]•õOgœœMMçu¼gЫfŒ­ÁmÚŽdmÕ‰©W³ýã'Ròˆˆ’K‡Û­r¼>Ýöáoé»^1‡sΫ¾t•Ð-^e7¥œdôt¼ÝBu#QK| ”Ôæñ9DF§ÌÞ}€V ³(( EÞñ™ËFü”î\äl *uÎL¨ L‚(ƒ’1 YMÚkÁ:‚²¥‹³!Á«IJ$+QbÐÚ¢•ϳVenc¹¾ãöo/ÝLYjíž;.ñ¸ª8‡BØétøø'¾“‚‡<ÿÜ›÷ÇLfeµÎX%c;wçs±XTìö*Sñlæúý;Û›ôz=& :I=¼KÇBÏlîäd©j”‘USz;H¦4”eYù¼b\x>m6ÛÔ§½®hývCÐvlÅ…>—6RÐétxxÿ.'Gìî]ñS§;‡ƒ¥´cmÛj•ÔÍ3®îmqçà›-4:S”8½¸ÛyŒ×%‰Ç#OØöÙÙ¸ý»¾¸ÇÊÒ\è!N++úÞ«lY« YíѾÒ?Uk?~>_œŽ¦œœ1V*ó1QÍc¨hyÌÛ˜p&p”ðl[Îmþª1az‚¦+£jFŪez€ëiš) ´ôæÕñ¶^j¦TT¨›çZAAˆ!úð»Ã>I2g4™ÕMHðÄ)ªûõmÑÞE('ÆÐ÷^ðiA¨+ùAay£ ‡¨Z œu¦ZZ"{Ï„íéC÷QŸ’õ;XSPŠ´•Š3Æ6Žz«çÍ,¥…ÄÓU‚˜Òý »PÞÛο‰Ækym bI¼>5Á’Q¸‹iZ 0¾—(,J,ʰ†™5\Ù2<{EóêÝ´ºL„é1."1C{UèJüá3Æðì³Ï²¹{ÑÃiñuž{²ÏWß8#iI·ÎÛ·YÞZ)æ¾ ÇÅÎZ!I­œ{Þö{—.±½½Åp¸AžwH³ ±†›_ù<™@r2bg˜²»•óðØ®Üñ·íiÛÿŽ¿XîY–USz˜ÔCA}’ÜyMULŠkïÛWý?ìÞÛÅ<4gZkî¼û6—ö®D&ÑvMyG7í.šF »ÛîatÚ€õÅ7qM¦CÑ­'ŠHÑ Nxt:ak³ÃÎfNž_XÈÃE¥X˜Ç‚Õ/8›.&*Ÿß.<ž/¸¼·Ç]Ë?÷¿rÁÏßóÃ/?¾zoÇÖÅ–®¸SyŒIz}[V³êc™9¿ÌŽk¹ÖÏ¥«W= »~ál<åèĨ4åáˆ2! VBQpÝ"µ•’ðZ¤‘®< ¬F‰{ŸšÉžJ-5ƒVj!ޕ׌vb²\˜ˆ+…Ht¿Ò$ËUÕÝFï¬jöF# ½i¢9M놷3}ZEë†àÊ”<Ê µãñœEV’†'eÅÖLR]ocB ‘s ·‹M´ö†™:J²(Ñne úÙ‹ÛÈ|ÝS:ãS*R/#´´µ¨TPÖ` ƒN´AYÖ&â4}*ÅÁñä¦tgðaѸ¢.Êëté•]qЩ8²Œ5οyn,Oí.8v¸}”’¦ÍB¦¼xZm[·¶åg½^gžy†ÅlFÖ¿Äbv‰'®Ã›wfŒgE¥~ÜÝyøw’(ŠùœÅ¢ˆ hG¨éõºl·¸ti—ÝÝ]¶¶6‡Î÷=Ïéè…±Õªë[YÈ/ªaòØ”ûó~_¿ˆ_x.,˜Ëe\=f‘–sÈpçÀÂ+~}qÜz{ØÇ–­ñW_ëûÚûì³ììì8ö®$é’Ñ‹|`_ñò»z%Ôy‘†ÝZËÆæÃ!³Ùc2”‚^7g8è±{é{{{ììì¸b>Ðévét:diFšå|ùÿø fw±»§ÑÇcÊwîðÂGžã¥×Æ%kwéñt»ªÀÆÅ9LÐiš6véñ»ÝµcNW¡mâ\[Ó^AoOçEQT ùƒw)Ê‚$M«n_|ƶ5®y-}¸C Vím xðð„YQº±ÊÒUpåÏçZM£ýµÄV<¸à£ÍÂXî?:åàdä÷ì]¿g_}½^,Jºlå~ü½r¹ ¿ÿiü[SÈg?t*Ú¾-‡‹®òZ“UÑWkžìJÓ™V–µÈÈšƒ³Jz¦hÒ×ei­¿:r´A0tŠÓ³)ÓK]¶ IDATG§co·ZßmÔšä­ª‡u@¼bl½ˆWPyžÇǺ¶ÅçbÕ6D#w ¿Ù•ôNÝt–Il¤¿BÎW6ªVè×GEº‚ùUÍۨȶ¶‚÷+;¦šíí§gSç†WyÁD±æ1Þ Úo_½ðVÒª@˜D÷Ú†hÿ¥¨Éˆcÿ¿ö¸aÌÔ5Sž¹‰ßZ0‚-¦„Ä8KKŒEJARA§)F@JqÅ—¥RÄèêuSµ R…øP‹°ƒWÖºT,"ð D§tŸüAºùãƒ/#Ç/cqŸ°$¥`JË +ùðþ _¿³ÅLÒ¥i2Þý®*Ja’ßßßçCú>$Iúýy—b²Ã×àæÁC&³Ed³Ùô4_¥A°úÖæ&»»;œžžÑévØÞÞd{{‡=?•ï^Úõ:ô!Ýn‡,KItBos‹W?÷OxñïþM¶· E“b™|é®~âY>üTŸ_“$rn jŒL„†¦=1‡‚ zÛs=ü|Õ£]ÀW­3V­>âÕ@»à¯’Æ¡,K=:àäè—ö¯TÄA§R¢Ç+$‰æ‰+Û¼yëÀ±s= æ yÄÕE0nuHºkæt¦–¶æÆñèøŒa¿ÇÖFn'_×çó<ý= «ÿÞ)äï V_WÈÕã6C_°zÇ.ç¿QrÞqò(¥•–X\â¤0ÅR˜À0Låeiyt2âøÔïÆ£ß´Í­ÿò5Büg'2 +¤F»4ïC´ŸfßSM7·öq ¶¬*.¥AÂÕôk§±Ò®ÙìJÕHòJ/%Ë«’°Þˆ}b$vÕˆt©¼¶Ý³ïÚ¾¬à õíÍ>£ÉŒé¬hQ9j öFNºR¨³ôÓjʼY¼샱ˆR *‹u;E“X‹—¬Åà?h ˜Î)G ÀÜ‘í¬u„7eA)é‹¥Ê9F Ä8/w¥(ƒ1޽®å ÷°·» ‹¶ ¦;?ÊàÆcgkȼ÷„ÝNŠ1ƒ% ¿ØÆÚí ƒiIhàlƒ'K°º±p2šr2šÒëælmôØtª`ŒÙ¢dó_îÇëKhÏÚ{Pï{?.bßó[qQà™´óUÜK÷# @]@š • ¾åt¾àÑñˆÓÑ´¡Xr…U­sÁºûsÅÓT¡]**8*²—.w«ÜUû禗}¬{T¶Š;•êö!VEÃçrm8Í7“«"/5}…×»n“Rlø $imGbÇùʨ€ /CMf®aˆBÎâ€ÒeˆŽ8©«ö>0Bœ÷ºòv‘•öω#Çi­¹,îM×.©ªnÑHÔ)JìhâMmJDÄ8‰š1Š$â¬û^š9ƒ+ÖÁàI‚ͨÑÎ.±°(±ÆçG+_¥=¹#¨¤ Ð]Î÷8»s“^vm°ü«t¦/ÓÉæ”äIáŠy§Ã\_c^l°1ñCÞ9È™ÝÐc·‹J<™§iʇ?üáJÝï;ñxì Qz[˜|ÀS×2îž9·¤¥`‹5Zx¡ÓéðÑçŸg0è1ôèõûll ØÞÚfss‹á`@¯›“çi%ñË:¦£~êÏÿN_y™½ M&£\Sd-‡?õ®ÿG{üÑÜãg~ùˆÃ3¡“9ËÓ¶3^\¼W÷¸À&IB§Ó©ïa*_WÐãfiÕc®"¶ÿ“ù*‰\$Æ_¡Áxôð>éÇ^¨-N£=¸ãðh LÅBïUþä•]Þ¸ùÖ’êÄ[¥ºÐ­Ým­ÈrJU«¯ú3ΘNgÜO´ƒã7Ì‹ò_îÇßÃ4þóøcru 'v{^)÷ŠŠµ°ú*È^É㋉ºdÝ.Œ&3ÎOç¾éú¦²ÜJ+n±>ãb¨/?aÕÈgQ”ÖP–Æ©?JCi*3~”@áóç—êTÈupQZŒ¿]ž¥• ZÜ,Ô¢¸:<¬“¥K‘ëY’x¸ónÏ’¤j ÚÖ6¢ˆ¶Ù1 ®&<Õu\Õ)s!جYÔ}á„Nž‘¤šÑxæ³Õk[õªP VµÖ¶îAÓЩ…Ý·Ö±N0Î0PMŸÆv앆Ð?<™`FS$À²Æzö¢ÛÇ;‚$F;«×ÔV»s%%’àˆ}):´.1…8Íoâ3¬ ð(J1,f–™}È颇² v/í¡ºO1ï~’¼üò$¡ÈôàåbŸât†š¾K¿x@o;£Û»Â›÷NÏrdùÜñθÛíòôÓOséÒ¥Fñ?::b:rãÆ ´J0[E?úÏì¼2OÑJ–bSW9Ï•eÉ7xöÙÑíºØÒÁ`P}u{]òÞu‡¸Ø/›U½ Ý_dò³Jò¶*%.|o• 1†‡î6>I¢ãÖ7¥ÏO”F¥.Íz•ÇÎfŸA—ñdŠÏÖ7þXiY‘çñx…Óé‚é|ÑhHTÄ!Œƒ^‚ÿB¹G~É>aÆí¡µ{ï­ “HºfÝÎCTðǵX¥Ý[ëJï-e¤YÅÆN}f´.¦(Ñy‚²ªšÜU柭ծ(Ù•%>É¿ñ™…¸¼X”vI:„Âî/…ÅäŒtöef{78>>f02ô9Štút·C‘<ÃôL!Ó› Šwèæ†y÷3µÇ0óÜþ]Ó§ÛŒ§9 ¬-«Š,ËØÙÙáúõë ƒF¶·µ–íímvwwÑZSsTÖGD±ßq¿?àx–6˜åë’Ú>ó™O³±9DkM¯Û£ÛíÐéädYBê}ðÅ–…!Ë:±üÜ_üó¼öÓÿW·5ƒDÑÁ) ”u(Ö€Êß|È;ñ²÷Ç¿‡?ôÝÏrw4à­w¦¼{ß0Ai5¦BhjÏõvVÍœ-‘uÍn]ªªÆÅêãÑ„‡N(% KoÆ`Ê’¢°,V`¶p…e6+°b™-ži4ßÁU4ê'ü>[t½×V /ÚQ­¦“©ˆl5Vý‹sÊ£¹¢Î©ÝdUd‹Ó*çôx÷2±ê;‘犱‚)êß)ËE]Dc†{„OäY™s+#I M–¸ÕqšD+ÕÖ¸†¦ßëe £ñ,JÞ«M™Ã„²œJãeÙúßÁ1+$Eø}oH‹m½»–öû’ª«4;[ ÄÏĹÝX«IÅ:ËÌÂYgê¬Ñh±ØRйv;|£R£²Ô±ƒ­sçRZЉÁ,lÈ‘e*±½”Á›ÍøÈG>Ì'?ùˆµdyFš*ÒD“h¼¿uAY‚ˆA§š¤ÛáçÿêÍKû'¸¾«é+EÈutE ¤J+讦<›rëþ%º¿ò [ß÷¾ã™Ë<÷dãÑ‚ã3ýăEi“ÚteE JŒ^„לíÎÎÎVÁ¬ƒÔcâ:~UÙï« z{Ÿ?Œ1eélE£lE·~r¹õYßÖ{’[/íö; {ÎÌ@9”$ìVíEåãâBô°áÏh2£ÛÉM\ØEž¥ô:9ÝN†Öüò÷±¿PW-¿Ã°úÅÀú{Þ·ò³Õ{!º­DDb)Ø2CK–fðº5\zXÏÄ®4Û´…hî÷NGS2Ÿ—,†Â”Ì‹²dQZŠEÉ|Qºõ¥Ô ó MVªþÚŒ€ÚF5[/wŽnÕ š.r8.â«—>–yΗó‰ÆkÕ4]ÕÒ[T޹†BWÅ»š¨õy")iÇ¿ÖÏ)ÊÒ­²Ë¹sᔹDŒw÷{i’8fze¿¬ý¿_»ò4c{Cs6™SÓ0wk ÒêÍ[‘ª œ QŽY®ÂÞÄ%Õžu[æÖí _-ŒìXëk*ó_c )KtdzÝMâ::Iüâß5b,:MÜÊ8C- ¶4®CÓRøbÝI×I,svïW<ÁÙHÓŒ±fÁIñÝù/±§_¢Ø¼Ì„ïa6íQÝ!Ÿ¼Eªf˜í«LíÅø|~“KƒœÍ+LçŠÑø|óC¤Y^¤Xƒ\ÜBÌçþþ¾+ðJH{ì>û¸úäÓl¼}‡Ïþ K»ßð5ŸÏÙ»t‰ù‘¦Ûí8òâ“A¬¡4 ôB@J’$¥“ ùµ¿ó|õoý5.5©¦#YÈ}SYŠŸÎýas>>Ãäå{L¾~½;@ÝØC_²ûÄûOîqwØåÕ»=¬4wéç‘‘Bá c8;;[ »·åq1d¾®¨¯Ú±¯;ž«Âu¬µÌçsf³)ýÁ†u’M«Œ_'ºÏ„;·5¥±Î+ÜO×/ïðÊhÖБְúHWÖyÄ­/äáÏÙxÆÞÎFU„æ waæ ºyF¯›Ñɳʟü÷ê~ü·;¯+ãMþÉ{ï¥)WΗj¿Ï§¼t¬ìyï‡,­gV±Û—$ÕŒÒÏx÷î!G£ óiÉt6¯ÒЬ+Fv¼…¨¸sJ"»qi¹øºˆD)€RCéq³SY÷¶ùê¶²omðqlÝX)¥«OS ÆÙ¹­¶EmèÇ#|]I3ÙÜ5 QþHØU@·× Ò¸ÿ¨=i4 ±ûœøÇ@Gzy”ÛÿÛºø7xôIâ®aišg b…Âט³R×+ˆ´‚ØU|rÛ*‰¨Ê;~킯ˆN,í.lI RX_vüd“ˆÅ¿S°îÍO¼š§, ) *sr6-ÖÑ|ÓÄ_”RãÉuÆöЩÁNðHL‚'Ú äÃ^ÂÉá«“o"ÃïâÞ½{ ‡C667QêÛIË”¹y‚ÅÉ#ôä«lØCìöUÆr•éø”lú*›Ú²Øy’©écN‘ÉÔRuƒ,ߤXÌ|‹K:‹¥S!d8F¤-Íàò‡Èû}~ßw¼@±˜ó•þb½»gÀ¿XÌÙÛÛãþ‘?Ì'¯`Ê‚4õÌ~qIqe9GkëDV¶ ¿µÃ7~éó¹¿úÙM„a–ÐCèj…6„"&®¨cê‹Fè>U®æhLqo̘ØüÁ³÷‡¾ƒw)&sjºÄë†u…vccc £Ñh r_gØÓÞÍ?ö¥~ âöÐ4”eÁb±`0¨/–uöq­$ «‰:´Rôº»[=ŽFžõÉ{.äçA¹' ×¾ÿÙ¢`º(P(:y=¹+õ/¬~ñ~ü½¬ÞÛ~¼éÄöøÏUcS«uä¹Ü'VÄOÛ†bQR˃£SÞ½sÈÙxæÖÀJm'º¬×VQn»mœ3nf«ùëuèŠje¸DÞùQÃ$Aæí *ž½'¹É½Îx¯ \©½¶]´.uÔª—ZCóQF@ÅÁ“†[A+Q&¹ÔLøxo]íýÃðÙâ„ã 5‚]ïÊ£\‚€ƒÄk:p×…u 1†³Ó‘KL4‰rî U"e Uêš­W1ê‚Çzw!Ac½N7XÑ[©'(í_•1 ;wQ³îÉZãY‘ÖyåÙ0 P™3µ¶¥&I+LÅAœ¢Áú¢mµOW©Egz·ÞG^× Y)B?6:†û·~±ºNšfloo³¹ÑçßËÙáNÿ惭}&Ÿf4š‘ž¼ÆÐŽ0ÛטÉf|Bgò:° ¹t•ÛŒÆÌé’æ9Ýn·a¤Ç~ÆÐriJ”,ÈÓ ùìg?Ãò•ßäôô ò<áùçŸåû?û½ì_Þ£, ²4õ¦ÁJ‰5 L)”Z@ éæßüê¯ó‹á¿¡[LS:r¥è„‹/ì® [#‹Ê;›UŸÇD‘tA…þþíß÷'EŠU9YÖª†®|U˜M» [kÙÚÚÂZÛ(êmŸXï¿*í¢d¼U“Úú ÎEŠŠO2“x7]£‚¿» rq–¯ÆCñ ¸¶·ÅÑјEc‘Xc*êŸÞo!?žÏLgszÝ|m‘„Ù|ÁÌÃ~<%ÏRºŒD'ïVÿ½]ÈE.¾]}ŒÔê_ñmµ¶¯ûi+šS.2“YÃ’TíîKUû¢(Y†EQ²(K7éù?§£)7ïp:šÖ°y‹7×ðñÅJîÒZ´z‹›Â­u[c!I¼M,ÑîâSHÉ4:O)çÆíkW@¬QnT±^vf-å¢$K4ÖjÊ$uIT©‡2JŸ‚NœVÞuQ´EgRÙ·6rzÅ’ ôSa£§˜<ú"‹ËŸæî$cw{“Ëû{œu?Íì¤@~Žañ6v¸Ãdð½Œ'–ôäu6‹Èp›iúLŠÎè&,î£ô¶_`Z–,f#]Mäí¯ù|ÌlzŠVÂÆÆÀéÅ{¯9Lƒºœ1èjžûàõŽ¥c•»±I]l­w ³ [y‡ÉÙ1¿ö?ý%ìÝ;ìo%t-t­·Hö;á4@Æ&4<ŽàhâNr#,Æït¸òc/°õCçî¤Ë×^K˜›”Ìû ¶Ùê1ÔÒbÂ\(ÎI’xk\ÃxWd²¥1_Es©¥‘?N£ÇuªÒVG4Í)¾F¨-¥"ºµŠ•ÚDÎm«^þ>•öྶX·£¯MÇ;rÙÄÆö³ýw=…Çf,*`)¹*²ŸUMN¢Š¾°ÑÑ„[ÈÅ!pHfoŸoª½’QB·<Ý^‡¬“1Mܰ„·~ ÂÿÊØ^´ßG[¬hOtP‘ >–(Dª'çRrTž£ºz>«ÌyŸ9íJƒÛÙ­™ŒR$=]Úå'·ŽB´rö°a¼ôoŠŸÝho©EÑÓÂv?c4¾ÍÑ;¿@zã×,lRæv‡ÝôÙø$£Å&êÑ çßDº=f[¿©œ¾ÃÆìèö˜m|œt±ÝåôáËÈ–¡ùã()IM’¤$IŠ)ŒÎŽQR°9ì2ôéözôº²<'Ot’x®„jq”ß·kíãkýû!R:ö¿vP»N5¥)øÊÿò78{å®m¥ô2Qä"(ã§pÿAÔþ‰·Þõ&{ŽlX2s§ÏΧnpõO¼O_ç•·^¿aUB'WKüv´j쫾n÷dm»»»ˆÈRQoï¾Ûioñd¾ÎÕóYWì³,£Ûë»ó[ûãN{+5øhkRޱõ÷ÂÕ!IO\Þâ›·Ö‚ aõÆõÞ®.RÆã¹“(¦Écò¥Ò#nzŸÍ‹Ê«¥È³Äù<%OÓÕû÷߃ûq‰ýíÏÝ«s¿Ýž¿¹ÕïgëXYk}Ñ6Ža^”ÞË;*•Òܬ¯ö™Ìæ¼s磣3–6 kN®‰wª…Çk‹^Âý•ZÝ–8£“ ÷ôµB׫٪‰Ž`é¦ë™CÆãé5”öTcÊŽ†ð4uˉ®b¿‡P˜P”u–(oZsNôiÞ4(P±Aj®Wë+©îW–(øQÉnؽJèD$ôDk¶6‡Ìfs&Óé|îŒXK_ë0$ÞÆ/!DÞY§AöI3Ì¢Áˆƒuu*_H: ªß…ãS§ç EÄ:•YbCì§{âÖD¡%(cHRÿ˜e‰IÜ^WçTÑ”nñ *÷¬‰ (íNègÂÖ cròë¤O~§gÈ—/_eœ³£)úì—¿Á  óÁ'—WàäýÉo2L ¸ü<öÉÆ æ_G숢g8¼I¢ž'Í»$î“ÂlzBi¦ô{ÃKôû]z½n寞¦AÞô–¨ÃSÚÙ†j¥Ð‰vFI‚N–Q)E’g|ýïÿ=þÚ¯reÐWÂ@+ÒL'‚) ô8z*@!” ‡|H ¶IºßeçÓO²óÙgÉ>z•7îÃË_ÒœL3²4%OÇq;>5@îa¾n:nïÓC¡ÞÞÞ^*ê«Èl«~?Þ£·es«šŒ8À%þ~§Û£ÛíUò4ì>Av>oÆ„Û(J#Ìk­kžv·†Ü}xÂd¾hLæb…ó6çMãq!¯ƒåàè”kûÛòB*9.a¾°Ìçgþgyæ,Œ³,!KÝW+¶û[¶ÿÐ?¾Ì:2\tB¬#¹‰P”†Ò8»ê¢0”¥uΉÖ6âF›Ï_–ŽH{>™-x÷Î!ÔèjÃ=² Då¸:‰Z9†)ÛV͇qûóÈT¡0~@SÑXù;RÔŠ#ëUSZ$šúifƒP•ÕIh‘#i$Qk€ÙÑÝ„.ˆx`Q±%àùš&Êy˜„«n”u:÷v2L‹Ö:ëL^§8Æ(Dƒ’¿d·ßdÏ« yVQñ—×N¯C–§¤ ñŽCÚÉ’ýBU$ñ„¸‚­Z”÷\WlµBWx­°Ê)U¢YH—¹ÎI¶,nZÿ¶‰uÖ²ÆD$,힦ƒæñ‰-*ó;ëXñÁ[¥õ;¥ ë }ê/ô¦–R÷¿Ž†ÍaÂhzÆÑ;?OýQdØuð-šOp‰[d[`,ÆŒŽèN¿@ŸSÊg˜ê¢f§ Ç_G©GÌ{šLR„„òøÎÞ¢óÄwSÎŽXÌÏÈRØÝÙa8ì1è÷é˜é¥!É¥!§vIö7°»Ü=—¾Zrë0C%)Ýõ†R¡N·«­Ô?ˆ"/$bq|}¦$Iê!÷È-.L˜‹a•Pµ,5ëQ¤¶­.¼Ê%Ÿú,l—dgàƒXÜ$m`¬vN©|‹ë˜*¶¡±ˆvËx)*÷d7ã¡P뚥£7H)›àÌå¢Öý6‡)㣯¢ìgO7Q¹zõ*Z?Ë"ý÷)'_&+_¤'·)·ž`¢>…Y:£W–÷ L–ÒIkƒ~k3NN¿Æ¢Ó¡·óý!ýAŸÁ O¿ß¡ßí’w2’4õ² Õ€;]QNoÒ ¥¸Ž/N¾¨já€[/~•—þ·ŸdKÎrdØE6út6ºäƒÍ.½í>ùîlsƒlcƒ!6I˜#L Ëdn¹ùhÁý[w_œr4J°*¥×IHÓºøÅ0.Î1ì÷v |¬Åw8b­e6›5 ù6lvõmy{Wíø¹µ•îï´¢¨Ô´‘(¹Án’+ãšÈ–jkا×Íçk Œ½V?§‡oO§£ñœa¿s.¬þ»ÁV_”†Ei–*k–&Uþ¦Î4C+õ-Úÿö§ñ¢tfUÆZgê!ÎbÔZ‹)-EiõŠâqWÎqw†çìÙëïEÉ;·ypxµM S56Þ—78íëd@ÕØ³›¸Urµ*EE3¹®cǬDÄ1IÈÚ„Ój"n‹Uÿ“(*ª´jZÐ{hD–YáA®¦¢hÔ °ñpLtƒÙ_;Èö~ØÍ‹^ÞÉ(iÊ#ª=¹R ¿÷С©^X%ˆŠ#l¥á?Oƒ)Iß$FX„´b=†ýyœðrœUÔTéx¢½¹gW´ •Qs; ³·é`瀱P–$Óˆ(Œq]œÌioìa”ŸÊ]²šu±çè,âRh  ÿÆk…N-R^S˜º„ŠÍ^Âx2åðŸ…ýiòlˆK’&œª§Ù™ýï †cæÃ`>í’œ½ÉnùªS`íÞf E*Î ]IrÌÙÃ/³ÿÁçèonÑédôz绞e¾pÔ¬ gpXÒ>µ"u:Oµ÷ & |AË»]½ý6/þÝ¿Íp§Ëµ<Íå§®°qu‡îæÝé`tÆÙlÁýñŒñ¤ÀŒãCÃhvBšÎ˜Ì-§£’Ѹ¤0 # I’‘åÝŽ¦›§¨É}nM û踠‡à•fÖ.èíF Lèqî÷û•¡N{?Î:øöŽ<.âuñnu—ì—TEÄÒò‰·µ²ÃZwq•Z»]ºÄкπ~úú>ßxãVc2Üýøº²cWT‡‡Nö÷¿e…ü¼ê }ˆŒ]BÅÃõÊ##nB Å^I‹ ÿó y›GQ¯|Yñ$ c½Ë>çÞÉÀŒ'>Ö»li¹‚Å]†ZAA|v¿¬¤ÜËšco¬åÖCn?xضièª&ºyB™jRÌšÅÎÒôQï—–…‚çlTU%×lk̓S؃W DëV±Mr]oIK«Dµ`뺘»v¦‹v늆éºPßWcŠ—¨€z¹ZÍUªñ‰–! {-m\4Iã¹HÒÚÉ7ÒѪf#žõ[~îñ§QEr5ÕZÁëÜ%8IšP¾‹OµÆ_;^Zx#}ŸÂf…D×™³U®­VÞ1ËíÄÅC •{ .ob³œ²(É'ÿ±L!èÔ¢KåwçŽGæ/úV°F9‰Zé‰aÊt[B’:C—°#8¸8ÃOXÒÖ_V¼IO¢„A [9£ƒ—±ã×°[ŸæÁƒ‡\¿~½ÿLò'™Ì^sÈ®üIg„Õ Vl¿H(ÊT‘ºü —ZF†=“Ìïråês$ÊVšAèÊt'-n­á Y-ký÷+ËQ‘V½#o-&#^ùgÿ˜ÝöÙúIJ2Þš'¾¶àðxÄ¢€É´dQ¥…EQÇ Ö“SJ–9G»ï²¦c½¹¼4Ñ Ïõi÷L:d¡¯rcl•“.+Î,ñï]¼Â¨×A·Õ¹äx¡:&þ+š €6¨vKé:µ*G.Ð饚†¤bB†`óâM_ ÑïTBGk}'5c—tgˆÞR>|„Î’ijÜK!)•‹R-Ÿ»ƒÔAç^^UZ«]‡h,$Þ|f!ŽVVyù[­ƒ×9È\*Æ£$ 2Í^¨·àáíBÑ{†[N⦎Óoc{öØÍ=PÎ2l”‚¤`¼ìÏ$Ðâ%ZSšùý¯1øÔ¿æã·ÿ®Œ "˜K¸]»Ô.Qֻؚ›† è4¥4%¯}õW˜w Góþù¯Ÿr6¥ëà ‘³RìäÍ ¹YÔGÒ[QôÚPu˜ÐýmÇÒÕâ"nkôÛYå1<îw<3™LØÙÙA)EY–ç’åVô¸‘ˆ xüúÎÎÎèù¨ÛU{z+R…±Æ6²‰­mBš6Tnßµ?qe—ƒã1Ö”žüø…Üž[!lC}÷à˜§®^z_ûñ5ôñsj£\\¸ˆù ¿ýýøE%U.,äƒÊ_p¬Víèåœ=| ÁJëQV‘áüõôàè„oÞ>`ºU[ý°šsgáùLüڢß·V®Tÿ֫×U4õ7ÌS£=qÝ«Jß-ÁÒUjCi}fZ™çZ+|ÌYšøkBœ4q¿‘ƤÞ}Õ²RiþeY^EªŽx‚íøÓjzöÇÅ µµê«¸#C팻BG$¶ÙÖkR7»¶v °–¯*(kbR| ÒÔjö4D¥K%<ûO¨H¼°_ü´@Z=X½ã4WÛÝM:7.qrçDj#}cêi[Œ›Ú+è÷ø¶tR¶4UU( ØÙ ÕñÝžvA{=<"¨ÔÁõ*L§þÉ%@OÃöV‡Ñ½7˜Ÿ~½ó¸ÿ×®]cwï Öü êô%²ÒžÆV€{ÓÍR ©‚TÜãX v#ãÞỌ¼Á“Ï7¶˜×ûê8b-âa,[ÁYÖŸô"NoY¥'JÍ TJsóå_ã7ÞäÕ{“ùÔMÙiÒ(Úíˆ×xÿ¼jJ§ð¸ðµ `{B§m© ìPØÛ÷׆ìS>Iʲd2™0¶¶¶È²¬bÐ?ÜH{íךeYeÇ›$ Óé”ñxÌ¥½+õ‡¿µþˆ“¡´VX«(M‰1¶Ú…k¥(­öeÒMÅ“W¶yûÎÃ߬¾ªÇ7~ppÊû;ÞÅîwV¿˜Ñþ­ÙÇSÎã±úÕjBÞŠ@3uîñR­ã%6>ƒbŒÆÞ|÷§ãÙ…ºÂΣév•ì@sxƒZ¶ÄèV‘t¶19âC¹$ö)ÑKÿj³«Tƒ<–'š$õäZ­éä™ RísÌÕ2Ú#«ÈˆªîN"›òf€B³Á‹-V›بÚZ£HLº[g&Ôt‡#B¦¶6bÅ42v¼Í¿>†çåQÚ„ŠáŽ¿¶„u²DÅ¥"/wOr éjŽÃæ ò0¡‹Ïl*$²ù ìr/ïÑŒÍ6Ý»ŠÒE°êÔÝWi]*tá'ôRLù)Ý¡vÒñûã»0 f.¨ÌËͽv@žÒà~æÏ?ãx†b3×lm¤<¼ûOo}Œ¢¿ÅUkØÞéqd~€bú+ôË/¡û}Œ81 ]åò±f® úBi4ÃŽåàÍ/qã£ßíJ¦ýŽÊDDÙ†K¡V£™‰èqšw¸ýúoòõ_äk·4¥h:¹›®ãb½N®³¾Ã¤ÙÌïù×ÁÒ«&÷¶4­]ÔC!/Ër©hOéqœéx:$Ë;œØ§ÚgèL_&ô c]Ó ;ÎÍÌýaMe.ôR¤ §vʽ—KןuD¿º K ݩԵNï ÿ/woÚtÉq‰='«ê®ï¾ô†nì$E‘â&Љ£•#ihɲ=Šðò/Æþò'G8l‡²Ãž%Íxi¤Z¤(.ˆÆÚûúîË]«2?dfUfVÖ½· Eª#š`¿KÝ{ëÖ­sÎsžÅìSX)$­wîáÚ+/àÆn“qŠvG½„wÖTîK´’(ÔNåá”k q8a»Ð¾õcwYï~·EÚÕŒ‡¹ä“ÉÑfa0 Ïs¬®®¢ÓéDw›îyp‘f'"ãààNËË+èõz%ÿƒXI%•ÇîD0q>ɘü›Xy,ó…å~›«}ìž>Ð~¼©«H‘’qýÖž~ììß«ýxüuó•‡ÚSìKe¶Ç9ó s“j£A¶›µÓº.ê"Õ zUÀØzê³ÑJµ{Ü`°Ó{_­ý7¸yó@XŽqvr )DK# œ–Ü  cìgsC¶K€N‹ÐKôÛ Þ~ §?û«è,¯CÊÜ£+Ç0eäMl¦<ëÙ¬l~|šatpˆ·_ü*Nä·÷Z-ÍBošÎ]ؽ©˜ÏÛ™ÛI=Ænw§óíîÅCÓ{ŒX1·Imï¼óF£Q•ùLßyžcooÏâet:ò˜öwÂ×î°¿¿v»v»­í3X]Û¨ •sŸ±¹Åì$ *e‰+.CÕ¾‚©NÿãÑ ›Ø?¢ê¡`õ¦BîþÙ9<Å™­U,÷;/öã³Ê³»ëœ «Óâ¤À¹«Š†ý85ý£º À½Ý#\½½‹iî' ‹„6=3Ž’=™VçVæ# þú®5³÷¼²,Ár¿ƒ¥^ËÝzÝv使ŠTVF‡º‚,ªs¾9r^ÍtÎÄõ)»lT5 zvã ßÔœQ{(·¹vÜã8tzs]UëMW³^ÁÞU «‹{0û–/¥­+*¸jÛö_WƒÛÁÅr­ÜöÓQC¥‰H4%cz#Ÿ"ްÂò•u½aëË¥Vš vQÆÀQÇê"¶¿‚¤é oH%¤zª( BbÙî9!Ÿ0’À‚ 2 Éj¨ º¦I1½‡šêi_ïÒ«;EQbwé’\%±ŽÕf3-Œw¿‰¢÷pî³Pœ£ò ÄuHÊ @Ú×hu«KRm Ï>1E=#ô[)ŽpëõoáÉOý#È¢(o@VÂ`ÙÑú¿•1‰Õ:CŠÉ¯ÿù¿‚X+°;èb’+t;©Ç6­Lg9¢¹{Œø#Á…<,æ¡Gº»Ë¶ºëòfÛ2âíãµÛm \½zµ±IpIoãñ“Éív[C潞÷:C–;L§Sa0 Óé Óé Ýnãì¹óhw:U‡ìÀç€ãÝnS®ìÐü‰ &°¥Þ+n´¾úâÙ \½µû¾r÷Ÿï\¿‹<{IK%L°úOå~œêņfþZÈLç¹Íý¹ý£S\¹¹ƒá(¯?˜²y\ÒXÛÒI%‡>íN†´,ØobJŸó;ýN Ký–zm,õ:þ®›zìÚ,ƒŠ{RÊw'çp‹ÀÌ.:ÂÕc»îiµ÷•É/ì£(¶ pNLö8¤íö åϸ?F½h~\/×h~—ãèF¬ÚÝ¿r¯M-O`õ\Sfë6ã8m BJ‰¸ $Žç¸•ÝB¢$JT”%‚ÃäQ`kí§ÏaøÃ DäHèI[*F! ThÈ]Lb d™i°RÍl/¦ŒVË‘LQ—9CzÿNYuÍ’+ÒOô¤¯Råf’7Ÿ…L³™ñïþsŒï} ­L¢Õ¾œi„€š(ÈDèÆÁì‚ëFC¦ 5"dB¡„ÐËî¿öMœ}îóH² \Hgª°;.½ÃMú“†Eš´;xóßü&û×±õÌÇqçÝCtÚY” +èq7´d&Ë=vìX‘œWй *Ij~ë. ï¢ Y–á7ÞÀ`0¨íØ›˜L&˜L&8::B»ÝF¯×+_G«Õ*eq“ÉãñBt:t»Ý² Ÿ;ÿˆ#:&2:ÿG›ÉX´²PÊÈ:µ1’^)#[SÕ-¼@À™eìœàd8z ýøbD7}€ñXáÚÍ]ùŽ‚©Û5˜ª½»ûëÁóHK,!ƒJú¼åXèÑÉÖ5E\ |b½ÉÝ.U_“­ ªsè~ð"N^»Ô@íRjù—’@‘"Ñd¶$×0»h¢œM-9e$Ý’G¦Ã\&¥úK†ç²I‰ô¤ždölÞtÒ[?#¬/e$1¿…z+-d‰@b z9Rš€çº BÒÒÏIHF–Rb´°ÔÎpzx;o~ç?ò Èå´du²‰Ô´û¯’EmKz=\{áoqûë_Ç3¿÷ ¸v 0˜h·¬˜¼i*õ,ËfBï1-z¬¨ÇXîá.ÝNçv‡JÎìϦiŠ+W®à7Þ¨¹ÐÍ yq¿¯”Âh4Âh4*¿îf«gY†v»V«UrûßÇžüBàËODóŸ³e™æ¹ò¨¹ìÀõðAߨæ‰KÛøÁ›7ôñbrãƒãÜÝ;ÆêJ«ýŸâýøû¤ŸENCô¾í³Ûç‘á"ëˆÑxŠëwvqïÍT…8àꟿʀ…#4?Ÿ«aÉÒ4ÁÊRëË=¬®tÑÊR×Ý8ú’(R!OÁõ5§ÁVåÊšÎz˜3®¤1'y«ïšÜw‚ï'¦U뉑-2T×"ŽáJϪxyÝù:9ò™íádïùå3‡wç:#O:¸Ü®'ô°uòº!á?„ÇL®´Šºà[‹;á‘ µMŠc~ gŸ¾†lkòø$HcÞH ANJMc”Å\¤zzW†/R£a/t·G¹!ïeVâDæU °¬:e’@&€õ!MLŠYFXíÚ —–jÊD™cž£ôóHRº9ÉBG0:Dè'„{ßÿ:Öÿ((É L˜‡r "嚥(FÒéàÞk?Ä[ú/±ya½³[x÷›»¢îÚ iris¡ö¦}ú,c™¦ÒØ®;,êî®Ü՜ۜôÓÓS¼ð (Š¢4{ ÛbÓyÓãºÿß•¬µZ­²Û ½×ëë Ý™F-cÝòJƒ TaöëRÉr’/Gƒ¾ÄaI ÓÎpéÌ®ßÙ{hX=VÈÃÞàë÷Ð}溭t¡i|î<>#¶ôÇ «ûigXÈç¯ÕkS9Ï„õÝ}-a2-pýÎ.îî“d£ePmìäp>·¨pµo]îu±¾ÒÇêrËKç†ïžóP¢fÃOÂC@-; þ9ê_¦Çžá ÇÞPòÅ‚cçmN†^i›æ—\‰9&=ôN!”BŸCTÄÓò£ä2¹dx{푇DÔh˜ý Õ9.ÁÜ^qØÇ=j69!.îç&­&ªB'ˆ<ØEï©2Š÷`á$Ù˜0 㻎ÒT…1é<ƒœ€Î³qüÂëH[ZÏ-!1ÝJQÈJÙÍL—+g3SºŠ #¤ ­4(ׄA©6Á1±Wž1‘>"5¶²Jï< $£Û!d A é·2 Q \˜×@9®®4¶—DF ±·½Š½£S †“÷½Û¯¹Âå·oáÃÏ\4™é?öãŒyd¸Æ.$ÊYk$º5íaÝ{ ùVQH\»½‡»;‡%âæî´MîYdÇJŽcXø ¤É¾×RD¬¯ö±±¶„µÕ¾¶55ª ;–ÒŽk¦8þ”F ³ËÔæÒ–•#uŸ#“®ËfwcY8h]¾Võ|¹Öøðw·39à ¹Pº‹ÜÆàsÇ™"Sµã®G‘çRéÍ©r¡sž[@Pˆm9¼&Ì5žñávöeó^¯wèÖI߸íF 1+ÖD3›ˆâ ï„‘OØPu® ¹•Er²‚~ ½çïàè;oƒ JIáÌ!ídž$l¤fF«>Õ.p"ÑLx.iØð £G'€Só…óÑ1…—Òr9C’K%£(Rd®wö T¤@Öƒ’ $O!À(¤ö›¥„œ$:Ó€¤ú¹§h¥„–`´ è·v_ù[¬<ñtv,6PFÅÞø7ÿƒ+W°Òú›+ÈÖ–póíS¤ióN»iç+ê³~¾iê·°u,)Í-ìîÎ<ük‹xžç˜N§Ès-ãûîw¿‹^x¡vì¬ÂþM°|˜°t»G·ç牧Ÿqø FJèÀîÖ –LÖ9—{KölGËžY÷øžÑ-aÝN —ÎnÖ ÷yûñh!Wª±pÆxãÊ<ûÄyˆyZéŸðýøì)ì³—‹Èù¼Ú+»JáöÎ!nÜÙ3h;‡ï¡n@RшÑPøË•¥ØXíck}ë«}³ÞTµ³ä;òÊÂ,¦†#Pdn®˜ÉÌU_{Þ(ğ©ø¶«æ~¢l½ 4áµÁÖ1¥Q.jÂðowÓ/#£¶Þ0 ¨rì¢ù¡© ÏÚßÓLPÝÇß=ä“ gÁíÞÃ’3Ö;ÔjÌm¼»K`gÉïxÄé-¹q&bQ=°læMS†qi/Û"»€Qú–>±‹áë7Á…„L $uL ¤.¥öp—‰€( “=Ѳ4$æ†Y0X–¥‘Þ¯cl ­PzJgG™R˜ÉݼQ"% ÅP¥A‚š2†g¿€ÑÙ/B$-ÈÉI–¢µtÓÞshßù×Èî½YdP©¯±L}7^0¥@‹€Ž–2ƒï¿€å'žG{e²˜V7 AHÒoÿå_áþ·¿‹õ%BG2Öž<£ °w$Ëô³ÅÞ´wwå³YP}“aM“Ý«»+·Ìr£ZEYÈm1ùå—ñÕ¯~ÕÓÇ€poÚéÇH®®Þtû7MS¬­oâÂÅÇ<‚‰• "㧪´$£ü) åW˜©•ïbŵjV?¿½Šý£Sœ '1W…|Þîûð诽uÏ=uI"~b÷ãÑMþû©ršÓµ¸Ç)”ÄûG¸yw¯Jk,äÕýÚ%°Ù_Ò]² "°¹¶„íU¬­tM‡W4ýä8‚Gñ®Èh~÷â 6VÅÎr*t^»“&ÓŒÆË1Q –Ï%”[PämæŠ^ížÉߣùÆ0TXÔtm8F;!Ün¡t®­œdº 7R.1–)Ú y6±ßòPÐPQ($h/wíWµ„leW…ÞN-v×7b¿›°V«J Ì¯µf3ÖCgÐù6Î_A癋½zi?A¡$-+ž!%¡ÈJ4Tž¤(Mb’Žù™BC‡$@Ž5,ÚÍ †'4ÜN jJ'³›ÏÌž^N1ìK? GœÜÁp0“ÂÒòΜ½¹õ«èÝArü¸ÈÌ®_7îÚƒ4ô,Õ°{/K1qï[…G~å?×´’ ,áÊ_ýî~íëXîRZV?‹îILrB§Ý,M›El õêó whéÂë± ÝqûÇÝ»“yžçeñÅñõ¯½t“‹MÛá¤îó›þÆ´ö­V«,êÖ4‡ˆðÄSÏ Ýé–zòª°(­ËŸ¾±I'G»ü í¥PÁï¸y\L„§=‹¼yJɇ‚Õgr>ŒðÚÛ7ñÜST;õŸ"ý¸‘:³ˆS3¤°ˆ›×›¤¢¸½s€›÷ö#¹šy8âPaÎ%ÍW kK]œÙ\ÅÖÆ2R!¢®gueUC[Buò^ƒ ~}u¤jÁ`\÷Ow`c)ÝÔ°Ö‰iÚ8ZôÉÕn—QæUÕñYÞõ‹¡‚æÇˆ˰3Qs°Û®ÝPC€ªHS§©¡à}±ç”³#|I>ŠR¢ Uäl=òµ^ñSr`“ò töá–dÁÖxF ,æá•Á¬Ì„Å¥ÿ¯`ÿ ›$0é<‰ÞÇw0¼|ªPZ#.) ¬.%lÎ PLµÛ›œh;Õ±«ÊعÚ÷Tš0‡Ôœ„DÛÌklœmˆ†µ,NŒË\®¡÷ƒÎ‡0O!äR*dY¥NO ¾…õí‹àþGÐÛ{ ÈРà¤rѳ׀vÃk£MŒ¥NŠã+¯aÿ»ç±ö‰/@ …Éñ!n}í¯±ÿÝ—±Ú!d ÐD¡}qÉÆ ®½q‚$™­3AçMlõ¦XÔYR´2ž5•[Ò›-ænA€ápˆ¿þë¿ÆË/¿ÜHxkš¼›4öóœð,!Îu¿³(À3Ï}´Üm³ã@NaÈ ©oÜJUÅž+j–Þ¡U´WÒÂnD¤j†Š;íO\ØÂ;×ïýH ¹¿'xåÍxæñóè7°Ÿ–ý8¿×i<^ó¼Ž$†å…Ä»{¸}ÿÀð#bûñ†×eKˆ£4;ûhY+ÃÙœÛZG»z¡\Qö{8q£2sœÃýNqë_&Ó¦µC岯•÷¹Í5wC®«¾f¶^ìôÕ¡½‰8u±×(Pœïàm8hô8@,ÜîGÍ6;ÖªpÐÄØæ€«á¶Æö¯ÁíƒÂ•èׂ!çÀþI݆C8k|!PÝÆ1ÎÞ˜,Œa„êÊ8ÆYH[€2úteuà ^t>Õǯ¢ûáG1þþ»@b¦t¥'h°Þ¥Kc&#KŠc e˜èªÐ±¦”T'UNL‘Ú  ¨\éæÄB ªÊÑ ‚ÂhÒÅQчX[ê¡ÝnCJ…¢œCJ…áà’WÑæ6¨Z×+¤–³YòI^*-0º ¨,Åè; utN»Ø{õ‡˜ììc¥Eh‘@€[~ò vŽ Ü?È+ ?‡Á+ME=ü~Œ­›ÀCƒ—Aî~Ýrw2w¡ö<ÏËŸ¹~ý:¾úÕ¯âæÍ›^‘žõøî×cÆ6³ø1ûZ÷1Ïœ=‹=a`PUy>+† &{ Û”„"7þóÊÛ)Ø©;ôY0ñöÆ2ŽN‡¸¿ò@ûñ°«yûqŒF9^yã:ž¸¸³[«WÈy6¿|þ~üÁ`ufµ`!§ØG ¹yñã<ÇÍ;û¸»{Tð0ѼˆSÈÝŽ¡®B`scg74¹Í'A/Þ8US r²¹¹‘h©Ÿ½g^êã¾\©¡9ÜJ»V¯®J'Ôs=:¤bÑÃq•cÏó‹UÏ€§,üÍ`©Mò¢5ŒF›°ÿ#©0ýŒËXdP€æ…øHÀ—©øeMp{ETvx.!u RZ«N¯æŠ`î=i…ÍÛ›ãjÞt‡%isŸKh¾LÌ1ÇïÆ;1´eþ)fLÓ3˜¶ŸÃÒ§ö1yë6”Ù)Kһ˄´ñ ÖN2} A™ hÉõ.ªÙúÄ{Ðu¥¥wºžæ¨T‡OÀ®al%͇šSWlO¥¢¿b·Ul?á½xÕnݨ² T¡>̤eiNŽ.cØþVμ…ÞÏ<‰“oýH¢¹žÔIkÅ¥x ÁH2#LRSUaBXÌIW à C˜¸A‘1½i±v¡–õ}'€§ Á}œ¨>§œ¿pÓi^2µ÷öw1åHŽnAŽsP– F>4in m:£šlGLHÐ"‚L*W ´;)ÐbLsB>F9r®°òôä®ÞÞ@Z:­YHÛ 7q‹ð,ïóPîÃý·RJ¹ËŸsÇxã7ðâ‹/âîÝ»¥#\¬ˆÇ`öXükXÈç}/vlfF¯¿„çžÿ™r'ka”•¡Ùó½7·“;+†TlRÙ8tiowÅ‘‰Y¨¡Wì~Ÿ<‡WÞ¸‰ÿ±O ¿¼âìµ+‰Ššwa ½ýk3ÐIhÕ…&ä˜}:£¦u§fíÏÃ)ªexúñsxý[Á˜¶x!g5—ï:/ ¼uõîíâ©KgÐë¶ÿŽõãÇVŸYy#f)ãiŽÛ÷po÷Ó¢0îe†)Mj&žÕ<ìÐëf8wfg7V&Iä9ÖÕ(vl pÎÿµöv¨Š]Iõ¤8vîïÜÀg ‡{U•8VŽE-×]ê™ëp»ûØÕ×Ù™Þ|Ü)#P|í!¸]ù2ÿN'†Ïq‡|B@žu’çhÜîjB£™ºw{ÅðuïÜàäSt ˆ‰Î[ĕɿ0¨äì7˜§]—%Ï ‚„‘¸Q©c‡Ãí$F½ŸA¶vK_8ÆÁ\h{UI†t'ëU2’!kkcÚÔFæ" ä9Tw ÓGÿhû9ˆŽÎ¹¦á¤·ÿÒ“iKÖi…$ MÑç=¬ýýáÕËo£ÝºŠ$I!#Ãë'ßEF»à$ƒšê‹W€œš]¿õ<èÂG!zëHÆc¨›¯ï|œOA*ƒ` ãÊ–¶Í’W0*´Ïm#¹¸×¾}€i®$RR#ìl‹²;)Ïó>wá{[À›¦û&â[h‹:™L°··‡wß}—/_ÆíÛ·½B{Œ&&}l¥õEÿ†fF»ÓÁÏ|âs¹ÉrX9ÅÛ\Ça¤y¥U¯âa·Ô¦ÛÛ)Ç4èó§ËÕ¥.žºto_»ûÀûñ)äá³:>áåׯa{mÏm˜Íý~|V!¯‡°<Ä~<ø(žâÖýìÖ rv!rZ¬SФnm,ãü™u¬ö»µçIÁÔÇ!Cf5#îBÕ!Ã9BMUAìKÜ=zH]{ÞDº«¢NmÑ#8Wº ²d>Ž_*c¸¶kçÒCÞ_ønhîK #a9z9yË r|ÙF·;rvBc*¢œK¦οK^¤œåÈÐtÀJÜè&·3 Ì‘îÏï`Rv¾Af„fËb¤pàhÎË£™›¦pÃÛ‰›0þîæ†d)^€¢ÝÏ ÿÈ}tæ) ^|B¤( ®£(ôt>2ÆC M Ö„8‘Ryž(²u žø}ðÚ£PÓ1ŠÁ1²v†nÿqäOþ·h_ûcdßS P:ÕZ†¼ÖN°:¼†$? ½„‰X‚b %ÑÝD›‘¬fÚžMXL®ÀŠ žþ ˆ§~ ¢ÕX!ÍZÈûyàÂÏbòµÿêà¬ó‹@.õ!e­ÌXûøãØJ¼þî>ˆ29îN°M…-,ÚVfáôXaŒòØ®Üð-‹ýðð×®]ÃÛo¿ëׯc2™4òY»ÿy¼i*o*ò®¿¼ûøRJüì'?‡µMçz60:W®}ŠUåúeX»Ê%e•¹ö6ƒ}xVa~šÙy{c¬ï\¿ûÀûñÈ,¶7¿¾³‚ý¬¯öqéü:–ûÝÁ~œ,ö ìÇÃÉ7rnÃ1vNqo÷ãiœ;® ÆÃbQ0MœÛ^Ç#gÖ‘eÉ Â EÏ%G{ÖùŒí¢™]Sôr ÁwÈbìïÆ9(D•ÞKWÇ–Õ…Ð=v;J>yÏÅ)îä›ÜPĹ”khLÅåâZå Y•ê1¬nèH„Ÿ}ÛƒâëÃí\íþÉAï¼\wÔÒÖ\eÙ€rWu4ƃ’\ª9ì•õ«*åùä=e…ìÖ»\“ûf’óÞkã«ÏÕ‹t.‰uʼÀ¢ý(Šþóè}z„éÍ=÷÷‘¢€žÌ‰…ñ.ã!#Í€rj‚òM’8ºôYŒ³3»÷pzrŒi1ÀX^YÆ™óBmÿ pt bºæTÛÆ* @'ºí<:D6ÚÃtšB)BÂ:-V;…0.v`Òæ7ã)&ÿ"äÅ/€ONpz|³$mlnaùâÇÐþÔ£÷G…Òò Æí® ™(t;‡¥>Š?þ—¯àÕ×®`uuËËËXZZÂÒÒ’·Gw§ñØDÊÈš `ÓT6ö1OOO±··‡»wïâúõë¸wïNOOËãÌ+äRÀð™¦ÂÝÔØ„¯KJ‰¥å|âÓŸ‡Õ¯*— ¸Ô˜ëU‘ƒE­ùx(gß^vüÎ7k±˜Í0ñ"±¥Û›Ë(”Ä•›;µÐBþöÁÑ öŽNÐïu°½±Œ3ë+heéVoûñ£“!öO±³w\ñ°×±äZNù,Ϲ¥^ÎmàÌúJuÍ‘oéYKÇjøSZGON½âSÉVln2ysŠYU%‰hÞY6oI0ê"ÐW×l]}¸]q|7톚T{fß Íã—{®§\/Ð5w7vŠfÀÍ01±¡”êí\iZEPÁ*Äin‚p € Ïõ€ôʬ‡üº ö±’Ôž`a_¨ˆq%Ø‘TZC2¿›@èÿ&†He>Š«=º0FþÕÙŒÑògÐÝÁÚoü,vÿùß@NsP[€$&”rIa:Æ=Ýêl% –¦íU¶…‚•DÖn!IS(–†8ع‡åõmpçiô†ß“ÞkÉ´v ,u– J4 3R¤èB5¤°¬ÂD,ádëc ÓcL‡L&c(ŘLÆn᜺瞃8óä•· ‘ëZÆT\H´úœýÒ'ñýGøú‹ï¢( ìííaoo¯4FYZZÂÊŠ.ò½^¯ük÷æ¶À»ÿ µm f«H)ËÒápˆ££#ììì`gg8==õŽÝTÄgrmh"Æ-ºG;|.eøÂ/ÿ:–VVK^GlòR¬ÓÔ€Ð0G•¼rådqžD­©l>dþøùí50Woí¼/°º÷/ÕØTßb`0c0ã꬯ô±½±‚Íõ¥š7üû½ŸK† XÂÌŒÃãvO±x‚I^„/ уթáç77–ñÈ™ ¬-õâÓtVo’yW“-/ÈKpÝÈ#ä/Çi#¤óòAÝ Q {šÀqÍþ_U‘¾TØ&K†C°·ç¨Ålé€ݧ;lz޼êh9×¶ìé”ëÎó+í]íJÀõ@g} ïÁ˦ I%袕k b'ŽAz\˜ÉîpÙˆà[ÊFÖèšJÆf'AU,œÛ¹JÈÜâå%ƒµœ™+Ƚr²×/VãC›‘ÊNV¡ƒñÚ/!ÅV>ÿýû— 2­C'÷7i¼´‰0i¾m´Mc.a0šbIdXZZF!s(%µž\æEáp%—ÑÊ(5SW¡-g“ÐÉhr #3¨Rcy« `2ÔI,1Ê6p*StÆ#tz=dY RRa:™âäèH;àKàwÞBn wV@Q0dA8ó¥Ï`¸²‚ÿëþ&ÓÂ+FÖ e8âþýû YZZB–eèv»hµZèõzÅQJ‰ñx\²ÑÇã1F£ƒ†ÃaùµápX›(¬[ã”±Ô¾è„>OÂ6 §óÇžxÿ¹Ï–’”¦±ŒÅ+J¥F¿›÷@jÙ†,dåý¦ªÝ¤mZkÓ•§ÕŶÜ?ά¡(nÜÙ{ï…|F yìÏÞñ)öŽO‘\X]îbµßÃÚJK½Îˆè6{"?Žqt2ÂÑéÇn#Kú¾±àŒïeÙÇ y’œß^Ãù3è´²ÈtÊ•.¶Æ5 ™´ÁXmjà=ÕÝßœzÝÔÅ_¹ÖÂÂÝ)Ÿ}çÚÛw#naïjÙÏŠ Ìc˜ÃÏBØWÂðº"̆‡¹ ±··öQŒ0¼’߇ét\ÛJÉIË![]¾ƒ‡\¸$7å´Oì1å+TÝÎ)Br¬R"SrÇrÓ¡p!›'î/ìµA,´Ÿ;›é/!ÃÄU¦ƒW&%J$¬Õ¬b°º7hÃiç³XýÙòà'ß~´”¢Œ”4L¯CVS¥‹:_@±Àx8Åh8D«ÕB¿ßGžPJ'}1Æã F£èt€é@¡Õ×…œÈ©>;‚ ´  $£B‘&(¤ÐNvæŒFE“ÀÉé­õ,/-c:žjù–’h·:È‹ÃÁrªLh@†)¬þü‡@O]ÄÿþG/âêͽÆÉÙe[÷µÁ`€åŸÐŒeÑâ›ÎÛÜçöðù)¥¦~íý.ˆïÃ"-)ZQ¡bôE*¥£SÝ5X3à¹»ËØU¢èdÉó[s'výçÒùu¤)iøù}ƒÕkßâ&øÞÿ†,öØ?Ð×`š¬,÷°ºÜÃr¿N;C+Mz?ƒ¦C 'Sœ Ç8>4e·`>„¬j+t?‰¬ÝJñȹMœÛ^E"D‰ÿÒ,Â`ðþÕç3:®£5°|æÎ7ôAçF‡Á˜Ÿœ)¹¼F¼\oç'cÚó’S•¤8Ì€Üý ãø.zä$·Õ7 .I‚[­Y1$ïò|±ŸËÎa&|içJ>*áv(N±dâTh·›ö§¸žÍêu_á{EÞyJ¹ì,8èRŒ·ziJ ¼H7wrgóÆ ÆQIKÏQiú¢àNïì'”Ѫ°ú1 Õ!úÿ@A1~ãÐOu!%Ýw(#ñ©d¨k¶»€£8ÞÅž"l®o`kû ò"Xa4bwÿE¡ÐÚ¹†i. “ŽÅ– ÓItóhëQnƒOw‘ì^ dfÌiŒ¡Ma/Ö#LNq$9ÿ:«]Œ'S½z;;;˜LP÷ï"1Ò=¥€b¨°ü¡G±ñùãÏþí«øÚ|«‘î&›5‘Øb…v‘?¡aÍ"Çý\S·ÁÃàe¹Ç wË%ø‡¿ñ;¸pñ±Šàg‹©‘åHÉ%ÑM)šT•{ ½›Ï’,'oWŸ¯¼êÊ«7ò:üÞigxóÊ]äRþø ¹j†Õs©°wxŒ½Ãcg·HèwÛètZè´3´©¶ÓÎ9äE`<™–z4ž@J…Áx™+ F£†§@ñBN<»–³,®0ÊòF¹Üïà¹MœÙXŽÝQ‹-µd¦ϱ69—kÒ °zY+\;T›ñ›õëñÄ3â ÞerÈpìòäÙ“L•ˆ­ùêìÝõ½?‚8q !ß"t—c3"F]€½ä4 äøD¾é=‡™-Áε”YòÖ\ç6º:ãWkk›#âNã³’ÕJ¸½ÖKùd8ûö¤ew@ŽË›™ÒÁZϨ3Ñ•éVÈó¹e¡/bQ@XYVfâ§ p7{i«ì¾][Ææk?1±ò› r8Âôæ.ÐO‚‘¤©Bæú%‰f䋌 Š ²»—q|a —ß|œ °º¶†Ét‚Ý ¦íã+P·QtL'@š, 0 äOü:øñO#é®êt#èðòïþkÈ+—Q ó2j Èɰw{êi¼õö;øÀ>€^¯édŠ{;·qx2„<Úƒºy}^Ãc‰äâ6Î~éSøú÷nãOþâ4wžU°g‘môXn¶ù,´ iw'üE'ZÒŠ IDATôy.q‹ððõ(¥ðìsÏãs¿ðÅàVÁžYL¶¹…-i‡¥‚äÊÞU9º\vîglŠG벃ŸòÇ×–ûøè³âµ·oa<™¾çýxóO-VÈ# êjŠgÆñpŒãḱ’òìÅ84Ö7oÄ^|?^¯·õ£om,ã™ ¬.u»z~zó9"Ûð5 §îèûqTkNÁ³àØ QõfGÕR9ÃU;êøY$ï>cA+­¶•µQƒdÍ#Æv΄~öáö€Ÿab?ÎÐY©È¨›µõµ%q nX» r y…PàÏ%-7QÐH-B†³ßL}z'H@U‚G”(_ C·/µìºï`gŸ.9ƒbÁއ7;Ÿ2a÷ )&«¿¡XýÍOcÿO¿âàè¦Æu‰ $ʘN¡1kI™AHÑ9º 2 7?€‘¦)HRAhî!Ýy DŒbj³ÒŒñ¿ ùè/b<c|pRètzXY¿€Ö§þ“ÁÿâÆmoüæ%d¤7~‰®O&¸·³‡åþòB"/ ˆ|„âû‹l8Fž%H¦íí5l~铸Î;ûø£?ùòB–ä¶y…Õ p`øE õ¢Ó|R0¯X/ ¿/ÊV_”{RJllnáË¿ÿ_b¤#!Q•qŒ½Ô•¹[(6F9’“,. «â(uêNÑ®1Ü™1\ÐüñN;ÅÇ>x—ß¹£ÓÑû¶¯Ö»7ǽ©FâÙ…\şσîǤÿðõgØÎR\8» ÛëH­oö¬õ½*yÍ»;Î9虊ÜšázŠìgêîs ©©'Pˆ] Òàu—ômQÜ*Þ´å ŠDæJäÜ"WƒÛ©ò³%zY{ìwŽxÖSUßìy"ל†ä#„Ä9âJȾۛÛ9‘»™PÕüMŽ4#÷—h{ËkœóRâŠþa÷Ù¾·.U$6wb§J è>!bQV|mÈ!@ÖÆH§t`zõæ(³'gÒ l£Õ_Eþëÿø°ÿgßÀôd±”cBÁŒ¼`Œ&zžµtJ›`|Œtt„‚´N­NŠ HjiÝ´b ·/a2)Ð¥ívI’B)‰¢8 Ñ:ØG«Ü[‡î¢`*›f†@‚,crýL¯^†JZ`)!¦ct h¥4”Hέcë·?‹+'þ§ÿó?bwÿ´,æaaŒAÞ³#‚þ ä·YÓù<©ÚƒBî±d¶!paö4Mñ[ÿÙ…'žz¶LbRf·D8¥*M¿õl·÷8KˆSÊש—°<X©úÍ|¬Næ“פÃ]¤‡3ÜÓ—Îb}¹·®ÞÕÒºÁ~üÁ§q¿’.2G¡þ™…¼ùºVj~«Ñï¶qñüή¯– z퉹Ó3jC{ó<>÷…WÃtDïHÕý7𡚜Ã\„uf>JóûK@/Ú£ÚãʈKâÉd7YÉVÿ«¸>mל_œrŠ®É/¼åðÍxGè,G\7üáÜnŽS[¸ðˆrÉtT?.» GÖ 8á{ä¹À#µ7#v-~\R†0“,ŒŽ•…ŸÕ6Û y0…‚€Ñ Û®O¯]ó•yóU.B¬ŠlšC2€l£Õ_ÃZçkØü}½ñ¦{Çh/'¥çqÞbß¾¤ô¢`FjŽŸ1éx9 H ©_Ç H‘Ÿ°²±Š~»…É$GQ¦¨+LÇH! EÌŒ¼¦æ˜#•„¶P)À“ãQ0 ”4–èžÛĹ/ oLð¿þ³—pgçèå_SŒßË¿ß$O[dJ“ßšÂXÜf ƺw'ó4MñÅ_ÿ|âÓŸ7+ZÆ$9)U)OSŽŽ”Kb\ÅVgiºi¥¸&ƒrùÅÕÍ`u"D;ú‡Íß\[ÂÒ‡ÅWî”üz?þãƒÕp?N³Ÿåæê.žß,õãññ'«sSñ6nfÑxWšùn6JÕ¢Ú¾†NlW®wˆdî¿^ Km.÷µÐ&'”gµç\9–#ïW0%¬n¿?!çë¶9!9JÉ× bOåÛ+¸ÚËrWõ–Ñm†j’·šmøa¦Ð1Ư¯·Ü­‘á®[Œ g›À´bÙ±g&Àžf<Йýº0::›tV‘< »×!$¸4™ HÖlx!BkûÈt;Å/bí’ÀÖÑÂþ¿ø&¦wvôµ|¤(ì.T?ßiÊèÈãPgNžÔ¯S ÏZ(`:eŒŽŽ1Y"_YÂÆÆ2Òt‚<—`Ö§GǧPEur°€RÀ4×S¿å$ŠÐ#¥‚uÀ)¦ Ýg/àâo ¯ß:ÁÿòÏ^ÂÝÝ/ylÖ4¾hÁ}/}‘&"V¸›’Þ…Úe°‡E¶“³rÓΨÁPˆëk?f¼´)gGÿN!@AU¤+s3ÒÅ^ÛÂUÈŒ7h³Ãþ¡ÇpóžžÖ­gÂßÕ~|n/× Âê3že"¶7Vpþì:–{Ýú¾›ýeuȂƌý8ÅN Å{šÓ y (ïߪºùRìÝwgåðuEÉа]Pv]ÀA¸ Õ8þn8Ü>Såâ!ÈìćVÖjî¤LäšÐ³*ûGõøìqRjä®'šÕÒÜÈï•Jcozwë  ’ßD¹¾ó zV#ÃÁñ.% ¡ZaPáLçÐÝÆi ÇDÆ.ÏÍî©dk–Ó;[&¢Þ½¤ u‰7—P¦Ží)æ ±1W HVH[=Œ³/âøÞ·ñØ/wÐ~d»ÿî%œÜ>·Œƒ“íð%#MEIÕH±ŸmËÀJ@^ù!0Íqºý8Þ: ¦¹#¹þ ÚÇ»@ªÙñ 11¨SÖr)<•аôáǰò©gp?g|åÏ/ã[ß» #Ë’¨ìl/ô÷R¬ß¯I~‘ýy$þûA£Pc €e³éËÿ%¾ðÅ_Ó¼iÈl–`£tñÖþó•RC²œ khx!…”•õ£™Ø+ízó™íE_Æ1rmVMã\ŸÆÝ{“ר-–?î1€‰péì&ά¯àë÷±wxúÓ¿÷îÚþÑ;­ œÝÀÙíµ’­b. Í,pûŽ2a¦?s#¹+ªM„f¹ß ƒ¿êêTk4½{n$g¼æÇ‘sb*«¿ï®CPÌl¸3Èp1í9Õýnãd¸j0f°žÐ­#œQ-cQ½]‘®YÅf¡—Ð¥õ[7»ÒîVknwŠ¹ÜƒuRš.ì†`•hzº&"M0#*÷FwãÜl#/á±ß]BûÉóØûæ1º±Ît UYí€Â¹ ”1SRÐ’º„ Ðdã!/ÐJ¤¦ù(ìu,4QPSK]¬> ë{ ûá+ÿïkxñû·1žäè´Ò™ÐúƒLÒMsÌ`fÈþa‰YE|q­iÒžWàÃõ‚O}àƒø­ßû<ñÔ0޼²Ø¥éùɇä·À1Ά5)œeøWÓ2Šë¾a2\}©§µÆÈpì_ÍÆ>’NaÃâÀòŽ¿´'õ û7çø©ÆKÇ ¡»‚ReíVÄ• œ×æøNBÂìc”aý $©Rg^ö1ÆP³æ«Üs¥ÈÈ׬Ѿ2‹ßK‚I‚õG>‚ÓÓG1Í_ÁÚ'·°ôôy ®í xç.äÝûP§#¤Ba £53ç]™¿Bs÷@ dBÿ;-±6¢)ôSË}t/Áòs—о¸Û‡c|ã¥ëxéÕ»¸³;ÐmgÑ";«/2‰?h‘}(~VÓ0«h?ètÞD [Ä”æÌÙóø•ßüÇøä§yžãôô¤ìf¹ÔûVJYùš[¤«ÿ¯XA*ýºóB‚é†À²ÞU¥Ý¶74¦/n¼¤û¹¦ZÔey£p¬Xùׇ]ÿ{Ìß\[ÆæÚ2O†¸¿{ˆýÃoùqÃêÜXȳ$ÁÖÆ ¶×—±¾º\9¾µeeð\R}MÎÔ8œsÓ›ºšÕ4ÑÁt1‚á ÎÝÊÙüŠbÏ…¸=r•ëá(Dí“á8Æ(‹Ÿ4æ’áTÍ*–*ÏôÀh‡ä“jWÏÞëßmÜ^ÍáwØ»m8‚f ‘Ж¹ F†cW¿®Ñn¶T­¤Ñ@ÿýþ1Û"ŽòÅGgåíý,¬AÂPâ-˛ȻäHTo§0E”ìômÞtAFšfl¾'D¢Ÿ‹  4!ƒ"IgsºÚ´ÕB;káäh“½WÑš\ÅÖÒ4`rõ.&oÜ€Ú?Äèh„|ªÊ—V°6§), oMh´R Óm¡½µ‚ÖÅ3è>vâÜŠpíî)^úÁm|ï‡w±w8ÔY´‰ˆ˜…,š²hÑ}XÂÛƒìêfoÞT„cÉkó&öêûúši·ÚøèÇ¿ú¥/csk#“ÓNµ±>ìšÑ®/~©ª‰F*† kΪJT³Ÿ=)¹$xZw.ûA±±©% éø·‡Î#T“Å0EG¢6§ p“Ó'óCò¡ Ðë‰ýÜÝ=ÂÑÉðǸgï—×WúX]îa}¹¯'q8NmMEœb¾æ×ÊÔ£öV1Eôä‘)¬¶*; |êÅîíMçN‘ˆ5 õé<>M7¢ðAñQ® Wf1ì ÿt.lj›V>>\•à2™-¸dss×ï=*Yã:a-œþ=»&¤¡J¯~ãF3MèE}€/%,¯£*ÅïfÆ1ÎôOÿðÙÆšÚãhº½^TÉx‡;Á[ÉU‹|ë€e ±ýUò;XišíÄ´«.þ°…]? ³ÐǦy(Ïn|Ü8$IŠ,M1Np´{yç–Ñ–ûƒòû‡8½½‡ñî1ÔÉr"‘OrLà$Ò­•.:›Ëèm­ w~­>F ¸z믽~—ßÙÅõÛGOr$‚D ¹{ÑÇ ÷YÁ*‹óEÉnóöè‹îÐ…Üg÷EÉrŠ Yšàɧ?€Ï~á×ðìŸCQ(da®k9i²rÊ‚\!/®ïrQÈr–Fg.{Ò36„RgNäØˆVA.žÜ·AÒ ŽOS‰ˆÈÙ/6ͳ ÷ÙE|‘Bû™i^àèdˆý£N1™æïŸ~ÜÙK½V—ºX[îcmµ¯óÆÓàS|$˜EK?«8ÜÎõ_ä`)KµŸ#o²âZ1ç@¬Ú{ìA®®Í(Ø›¼üâR5~.€#‹ÕíZuŽù²‹˜Õ 9…[®7¤NöAÍï=(`ÞãQÐ2 ƒ‚Æ—z ‘BÉй ¥Û_ ¡G^;…ˆŠ}ìÊ™Uɬ^c <³³:œM2ä ú»×EjÙÄÕÞœäÚÁÓBG¬r°æ—öfÍ%¬BIõá0F2²zÂ#Òd×*Qq×ûì2_ª˜=y©AÖ¶ó£¸sr€|xôK‘=6B—O Љ~œ|ŠbZ ÏLеºäÜÝ¿»¯^Æ[÷ñî=Æ•]Â4Wh¥„v;‹»é=ÄŽ|ÑŸ}Øbþ~÷ý*èMм>åÖ­íãÑÕ-Ðô>vﯡ·´O§€œç’E4‰Ò+¾ì@忥$—EQIŸÐSþ\àÇìÏkîpä‡q¸ºoòAŸ¨„/cÎ2T¿]6ÚÎÊb_lvn¥)¶×—±µ®sÀÇ“‡'CŒÇSŒ&SŒ&9N‡c}ž,äý^v†~·~·^·…^§5·€‹ˆÙ°úÌ)q>Ætª  ÉîzØ?fßfÞ><äÞTÜcZuËö^tÊŸ5ÏÓÂ?HAŸ«:k*W¬™“K­g{‡Øn¢ähgíŒÐ^}Øþ,6ÿV·.!Ë2íäfî>$¨„®Xù,W¥ô5bí]ɘ)©rŸnì‹Í„N¢ÊHPÊÿD€²Xµà4ĈN|d%ÀPîè ªìîÃÛ Eo2<·Hó"Dl¯Í½bCFãr áþIn§5ÓŸ¾öÜø¨pxžrŽFØÆ~Á )÷*u2ÂÝgí3NOº>{ï ‚WTåD‘Æ„œÐÄÉp±r«ÈG2†t˜å¸vè q}Æ/dÅ¥ÿˆ}ž (p®¹*“È=T¹/ŽéÔZ 7c¤½:Ü›i}b^H†‹q† ç†ë4“ábÓ9Ã@îe=§ªƒ!s•1Á‘Tg¡ V!+É`Rˆîõwµ;wzC[ ]v|©·Óò8Ëv7Õ¦ˆ£Ü?Áh3”^¸‚?ì"•Óq2¡ÙòRJÞ¿ã[/#¿ÿmðé-Œ F^$k¢^!QúÆK&œä]ì ;8 TDö³`ø…ÜgØEäpïÜ;æ¼=zó× LÚ›`)›b«{‚­öÚbŠ$!¤‰Î±ÏRÍgXjHºP«ÏCm}k¯úÎ š‰A¬h"^5†æÌÎÜü ~,.GÙí•…Mn÷Þ¯¸¨Ë»™‡MXm]@MK~—þÅÎ}¾ñMЂxúñ ˆSàô“Š2VÕa‡Z+v iX@C8¨üü˜Z7¥¦…Œu‡RϑƖÜëÞ)ž±"Ï‘ ò:“·ßõüYÊ&†ê°¿ƒ.Ö?<1©× äîbÝìï¬ÌœØ±{µ¥rDõD H¯ó,IvÌfw)œÌY­{×…\˜RÃzTÕ› Ê \–åÂÔëÈ•=F鶤J̧ çz=oÆûÉà§;—‘¾ŒÖðM,c s`’Z™ I¥‰A¡,•Öýl‚“n»£NÇfõ@Üçפrcr&zUMç– Â¨ïÇY±Óh·p¯Ø/XÈÏ5 Ú IDAT4ï³ 9?@ÁŸ‰Ì@ÁVG}ÐŽÏîá26x nöL¯ÆÖE`ø`×ͱéAsß#ÛP„²6övî^±ãÀ;-8)äàÓ®3\dÃã¹TG6÷á~—ØÐJ؈›‘xRß5-c°­éÌUí¦WYÃ:,ÜtP5ãðšb*coyÆ€Cî… p?&µÖ• „k$cß“r:w>Ÿ©§Yt`!åß[} …”0æ0¬oͬ‚©ƒ+Ç8. ü¥‰SüH™Èà²+r7+GUT‘1ÀʘØ(úл}-ÅP:>ÓæeQ`¸­Óïcyô¬ó.ÆS`¬…R¨Äêçõdnoµ‚Œ¡ RH)¬¶XÊFôº8wp2MQÊùfkÄû…«]]¬è7™É,Ú ÷^üÛç/jÑZBê Ò„Ñ9–[ôÅ)úÙ-ÊuüìÿOÞ›õZ¶eéAߘs­µ÷>}œènÞ›7+³W¹œeÙU2P.²‘ædð / ‰ò¯æðŠ„’…„xŒ%«Œ]U6T¹Ê.¥3+û¼MôqÚݬ5çàavcÎ5×ÞûDĽy³*¤¸q#Î9»Y{­5ÆøÆ×(“»âMhýT®EA×D±°·þkv—ÎÆ3ºÆ×ç¿ sý;øöë_Å«ÃßÀìøËq?”VH¹éœ »÷p嚨ÖP®%D˜~ýxîn§tóD.Ãâî‘iJ9haÓ‘„®~ ½l[aDc™ß¾¿CX}ªç×À¶BN;æñí/±ÊàÞ’?^ÉŒÞ$í•}sãäÏÑŽOiD+Ÿh”*­Iæ GÏ(ÖÅŒ WŸBYJÕj>9HÍ€¼wÈpÙ{}ÕLNü¬øRžš+Íl"çÆd¸ì0–FN™qPð¿Ó¾í¨7EòYÃ#s1l‡×Ö>01.AòÒb¬ÍöÙad›…ªÄ ¹]4˜A~òõÏnrÆ µI×¼´ÝžÁŠï±~?XÌÖOfÖ¹‹€HÁôkàêð3ø-|Ø}Ãp½r® W $¤Ú’ƒî{qûU&õÁ79ç/o(¤s9÷¹¬0Ÿ­poÖâf˜a9,p³Ñè­rä,²Õ†lŸ©¸V¼§c!ï>¡ïSÜë_OE’ÙÏF1Í€…ºÂa³Ä\Ý¢!­š”VRx(à­JE»ÑîxØ]«4­‡¿ƒ€õÌš%~íàÿÁ†¿÷ñ¯áÅâ×1;~ c hð…Û³ã)°ämb‰†¸^ŽÅÛCô…‘Í'uÂI"%&.‚ ­@)=#™ ùë•Je kY®@¾Õ=û°o-â{@ ŒíñĶSÒ¿­¯œk¾íÓP~þ†)³e¥Ú<ž$ÙÖÉpÈ¥fy!¨7g‹by–åò¬|¿›OÐUûšÌ®mâ£Èàö2Oœ§sÃÅ*¡ê`K¿ ÒfÖ“¶…T57äñꥰ‹•JÈ8qÄ’“á56‹&…³Ð6ÎΣܷ}BʆzªZ~3©Mèᤵ6D£Ó„m²ï³Æz˜£[绩‡‹Â€†DæÉ\nÅ÷SðÒŽ1¬6Æ»†Ljçþeœ'’µ`;Äݾé7Ð7„_l?ü} ÖrãŠ@.r-ñ}oÜó*Ž7l°¡uÁ/ä¡x%ýŠà&<Èö8mzë˜Yƒµcif¸Z¬‚±äW˜,ðSÓù>dºZqÎ&¾-»öí®qÉoÀ]&nç­È`ÖsµB§–Xè ¾q E J)(%¦ï8Sü{,êÚíÐÛÆ[„Nh¼ÙŸŽR\Ó¬z`ÖÞâ/?ø¿ñróûø§ÿ*^ÍÿÚÅ †aˆ¯ƒü¦”FRf¨8µ“ rÅßåŠ8LêòUØ'™´ƒ|ƒ §v'ÆdÁLõ„Oäšu‹R³œ¬(!H{_Ôý8>£ýø¶ï¯2±§Ì9˜·rÚ¿]Ai_ÇÓå~„¬ÄÏx "QÖìZ„.cú’v¬!³»„ìsnFî¥Á,r'\1E‹k(p1ªE‘¢°½Å„[þµQèJÆMÐÍ`ŸŸ Ãɉ›Ë `L8ÞÜNNç%[a—T­ÚÒ£ ‹ó±Ø=pRÊÉiă(3L"6¦øÉìÇ-óž…¸KðI½È5 ÿѯdšrI#ãmoxDË«š••ln"ã8£0qNNMµ>£{I† Ã„Š 0@ë( ¹˜^G´²`Óx5Tí?(+Äq?îíkåú90è%^%Ãñ˜k %îÊÞd¸XH÷%ÃaL†“MùhÃq(¨§ªåf@9.½Ž&=™ò»>Î÷\A+ÀÒ´Xm€ Ø›N{a_Db"T°ù.oö8ŠX׈㊗V„®%4Ê Å -cÖ0f´DKk7]cð¢0'\´ÀÕR¡7½€ã#È¢ ó8™«4™Ç=¹ŸØ[ ¨–ÐÁ÷;w {ª@T EÔ2p»¾zü¿xïÁ?|òÏñÿ^ý%àà}·!EJ9¯(ãš«\Vä²”—ez'9ßÞùBîÙéÖ “Žl{&w§5»*> ǸÏ>gÆÈJŽዠ«¿ÉDÎÛ‹èÄ›À{ý\wÍ“ßËàúø/—µ¥¤nj²f ­×Í€Pq†“ûåd‹Z.pÇÏi ø_ꦓiZ…Fô°o¶rœ“áRC!ëý ;úJ)¯‰À¤o¨ù9Ër?ŸŽÑXWž‘á¸0v"ˆ†„s¨)2îJ†«Ä¤fñ±Sd¸zªZX…‘Œ€ø)tÁdd;Ù]±UÊMëì’eãF&kP„PG ™#Ήóúp“¥µ0!€-0Õ+ ëVwÅܸà 㲆Í-ÞÇàßýðŸâþü—+`Ý»=¨,"ª€Éá™ìŠü„¨c Ópð –¥ñä>ñ¶­u¾Ì·¶¾I8˜Q¼¨’¡â‰Ð*`Æ8nžnÑr¿±À†gè`Ý@u`jÒÂÚ”GÆS»qåÙylmà ;€í¶´Z¡iÜdÜÒ€·hÔ€®!tšÑP&N￟šaq¥€YKxyÅèdÍrD8t€Ë}a×§üôžsŠ}« ËÞ¥ä)ÌC3fØk09 )ô>–LÆyA×§ WÄüÛ‚ÉUŠo ”K}³@ƒÞ:]af”oÀ Cð×7“ƳÕ16†"q«ëÚxêõ}Ÿ E¸Ñû¢Ó=Þ[¼t/Z ¶f@·£n÷gCŽeîàv -øTù‚+¼êøäµL $ƒX6Y$awºsŠ…¾ñ…¾mÜ÷^Þ&’¢2yÆÆlçëî›,°ód¿^³¶Çögþ/üãO¾ÿóÙ¿¼aèa­…ÒZ+— èedî&D ­<‰ÅÉ•õû(@YXëÌ@‰ÙÝ ƒ”gΊ"gW,°Ñ*çAìðx‚CÁ™ñÉOÿ~¼úè{}/ß$OOú5¨¾q¯{€G÷O±Þô>І*<<‘áNpt0ÃGO^ ÿðÝ'G ÌññÓ—ÈyÝT|áÀ£{'X÷=.®—E; ƒÂ“Õ 3EùÊÈñÿ3~Ѥad˜6öM.±ðNkLõ“[Ù\m7.ñŠýOÆjµŽ1ôBLëaBg6ɈÆZWÄÃtnŸì ¬5°ƒûÓ˜ÁYpnnðõÅ?Áøçþš ®<á-A˜9ìÍL0n7þwˆN=š»â±|7ÓÀ|ÅQÓ¸VˆE¸ߨýÑ1¥ïc1Õ§2Mª•Í"Çi½‘¬~ŽÌœ¥éØHVKéTÁzŒ:’×b‘ò#iЫGÉ'™Y¨j¾ R´4™; š5®[ãLhËïáoüì?ÆŸ{üK`5$y›Ê…Š÷`ÄŸÆIãúÁóù#͵J6w” &_ˆÙMæn(‹‡TyX#Lc‡Ç„£ÁWXÂÔÿÖ:R^h ¬ŸâãÎË3ú‰ÓžÚ“Â>]ÞÃÊÎ#4¢hAù$œ³Y½JêqmŽpÕœÍnÝú_ ¢™rׄl§vàìIcÅÄퟷQÀ—î®V c=!#‹$^>g„áCkQäů=:qûô›5ö®!jãéÆIê¥wë📅;®×+¼[ã¿þÕ€ÿñ_àw—ÿ¸™Ãƒ¦±PM'­#xÝÇ»*D·D­´ã‚°ï"˜²•c™unë÷æµèÁ™$]8»dÇIaD4«§¿-pvrˆ¶q Þ‹W×xuy¿þðüÖZ,æ3Ì:·…{}yã¦ñîŸáÞÉ¡SlzwöÏ`\Ý,q}³Ž-ÌññØ2º®AÓ(yú îa³pqs_c¼&¬,V¹¦¿kð¼Ã?~†Á¸{úÙɳ?üô†Áàþ½#<<;Á'Ï^‘‚¸F#yÕ3V½›ìEøÒY2.‰¬w-dP¡˜Äâ•z""Á³‡Í}~ÿ 8˜¹É¶kÒï¶q{õ®q­¶¡hsÚm¶"L÷õÕ0ÇËÕq$칉‘˸¸aüÕ¯~ÿñ‡ÿx}k †¾ÇÐ0Ãc°µ0Ö¹dä“ä‰U6"X6è4„#‡Ã ^GV¥¼ß‚5‡)ãIóh1ë‹\\¹ÿz³Á«Ëkœ-²Ç|u龇ÙM§—×KoÊ8<˜áåë+lüDþìÅ%ÚFcÖ¶ñ1Ö›>NÜ«Í7Ëæ]ßÛzÓÃøÉ®Œ»‰‡s@)ÌðÑ“—±ÁÅíèp^Ũ(äá W·xuy¿W+…£C7AßzúüšR¾ÄáÁ Ï^_;4ÀÓh[¹G,Ê=¹Gº\êW¦,f®o–¸]®6ÀëÛó.CÈnW\ß®óÊ*÷Œ\®F*1©ÂÂ\æ´îd¡ß+s±‹!Ê]þ KÚœI•Sú·–sx›ÿ Cà‘IÖäûwEºŠ+„ø¼H¯©„×ÃT®ÕøßB#pv|xNøþó¼ô]-KžƒßÌX%ä6…‹ûcá.bÂ/½Oø—ŸX¼¾a,¬#¥aË0†`›T踡l%>ï‹[à7>üOnþþ ¬}!R„k‚W[(¥`È­Ø»Æ s~>‚íZ^æìwìÂI)r êuk;/;Üt£±\m²Â³\m"›R“¦õ¦ÇÉÑ<þ\Ûh|éÑùèy´JÏoŒ­«t}uqƒƒy‡Gç' ­°Þô¸ñ¯­múÞ:R¬øu»Z{Ýÿ„#cäo†üU´Z£ïM,æ`×P|òôuü¾¶Õøàñ½B ÇÎ28CAiÔ@e·Ë5ÎNŽpztàvÁZ|iFoúLÖµZ®anT\1ÈùjÓãp1ÃÃû'PJ¥UgÁžf*)”í|XX¶B fÈ~®i4?8ËöÒVÓÏšVa>ïð•÷éÀjÕGdV)¦Dí&ßDyd­©s*º¹e!rZ)¬¡‡8‡.æé<'øTÆýÉp)J~7.îåi|Næd¸7‘ª¡2c¤ãk"“Én5\å¶ë3çŒñXÈmÈ$gq`üãY‘ Ä.©Ê’¿ðm2ŽÌàvæÖÀšÃ0€Û5þÆ×¾ç猗×B·ÖíÁ7ÆMäk_È7âïuï`õMOØ÷o·`Ñ¿üa1SXm8óR£Ib@tÃc!o‘}"‹º¯>R8èÜó)• }µh˜,|пP˜kÞŠ ÙÕ(¿³ýÁå)6Ü&ý¦—¢åÙâ!\HH®ð' mØ»[kñôæ'í÷6ñvvêIKÎir'‰\ä$9¥Ò¾8>P˜·vÄbJè<ÚB‘Èf¼°RΞÕÒ8<èá[/V¸Yùbn]xޱ@oOþO4ŠS8.—À𧿇ßùÆ·ð’~Ì}ô´&E°–„Æßýœ1Ö¡š UÃ![Ýë7WRs ~É$£‚Ùθ‹Lºè‡a@ÛäöÀ‹y‡ÁæM£³3{Ö5Xo†ølý`ðôÅ+¬7}¶SïýTÇQ˜x‰÷ÏŽñòò7«K¿£=Àý³#¼xu…¾7h‡$Ù¸¢ónÖ›Ê 0íX­Ýn¥³´†&GŒ ?÷þãs|÷‡Oãžûé g‡1éÁéúÍ ‹[¢½zïÁ=·ï]ñ8?;ÂbÞdhg«›|52k`,cÓ›¼Ù ;ùÓc ƒÁÅÅ5ÀŒù¬Å‰ßoç¬h hŸ™0ë””g¦"ž“a°xþêµø¼û|0fLô÷Ç~°¸].ñìåU|üyס v‰íÚ&¢D„¶Ñèû!C%ò~ulÅK™ÐX§P‘d¸Y×x.WîŸ;¸m'ÃåyäŸî.RµÉé<]w*ƒ,y8} 5 IDATÑdKx+ÜXLñ°–3„py[ªtéløÑM;Òd—i=ô†ñP§ÁŸ?þ]ü{¿ø^Ý8)Q`*Ç]xÏX÷ŒÕÆÁ­·ö¿©Èí†q»fܬîç7X̬ÉIcRFÆ‚Äf-{&;‰â-¾Ï§ˆ«pv¤ðÞ©sGk¢E)ù½³—~ùßáªXC²A)÷»k¯× \l=‘ÌÁè$Ip¾˜Ç¯ySÈb¯üï`iJéë \¡·ÎIŠþä”Y@ì–È_aJ0Þ•æðÑëŸ^µ˜·RVF­p 'F£³ÇŒû{@7$Ê0[¼¸ið÷¾y†×«ÆåÕ[·^¹]‹sÁŸË \º^Ïn%3¸óhðäÉ®>˜c Ãf¢ç³I«¨Bóïr|Ó'Õ ¶fiý•aQâ(ô±ùDÎ[ ù8ÁŠq}»ÆÙÉ!NŽ ©k[œâòê6ûùÓ£E„á»®ÅñÑÂí¶ýÓ^ß®ðèþI$ÖÝ;=ÄbÑa3 {ù±‡éîKOãk;˜ÍâãYkqu»Âï9å €G÷O×7+7ÕöŒ±8õ…ì`1ÃÑá|{£Ã®éº¾YâýÇçñšzx~ŠK¿† ×·k<ºê^ç'G˜/f~ÅÀ[ù÷ÁG |^ºQ8öðùÁ¢ÃÉѼ4FCÓj<:?õ ÂÃ{§¸{øRoÞ¶óEÑ’÷Nü¹AÙdíBˆÒ¯ÞX.æhükMŸ_˜ÊU(⎸•<É˰‘à˜ä¼ã­—±‘uûôPÛà;¯Nðgß{ EÅ‹“á…õ6¬á5ªhªC°BmЃŽñ‡Ÿ.°ü©G+tœí­óʬtYÈQ‘C.Œk¡Ù ã¯ÿÊ ÷ÿ;Ç7Ÿ>Æ×ίñ –øà¬Ç霒C\f7A)BcÜg¸GsÂ_ÎðÍWï¡×+(Ý€Ðg|„(OÓ©{ RPwÄR|là™8»xíÖêŒu4V¹ì¡_oz<}y‰û§ÇxxÏȯ¯‰Ë]§×·89Zàáù‰‡Ç¯½..Ÿµ-~惇~?ÚG]ð¶ñØ {ç篯ðÁ£{ø…¯¼YìO_\Żғ—øÒÃ3ü܇â×?zò"ëT^¼¾Â£û'xtÿëµÛÙ+EaGF0O^\â½GgøÙn–k<u%Þß5f­ÆW?x€°Ü¬ñéÓ—¨‹ärX÷ñýSÌç->zò äUãþ½CëûôxóÓC¼ôƒë›t£ñs_yìaú ž¿¾šü$__^ãñƒ3üÜWÞ‹Çra,>xxÏkÕÝkyt~ŠE×áãg¯®®—8œwø™/?xyy‹&"6”­D$)ìâê³®Á‡ïÝXõž½xEéÁND0ÆâÙ‹KœŸãìä àõÅ5n–«øtŽËAxÿÑ™çU qï‚hàoc,Œa|ðøÏ_^aÕ÷¢ Æàâê'‡‹Øð]^û:DVzœ¸¹‹Z#јúw“ájæý ÕßîÛ^öq LÉ”QåáŸÿ«¿ý?±ŽÅ”Èq$HmÃø³6ÌÖz'9›Þ|œêLœÔ-°±0ÃàŒ=ŒÁ0¬aŒA¿Ù€íe.ðßý•¿‡ÃnÀÕÒÚ6½#»-7ä&󞱫ÞÃí‹ÞzãàÍšñý—süîðKï1þÖ_»Âmo? Âõëè}cà&6Â`¹®7Œ>NsŒqÏíš—£þ½ç.V þÓsfÆ0°Ÿú|“ÀÅR:ˈ©a?%zF~ nYC,ážÞÃMßE—¶`ù¼Ç•'º)R~¯b¡ÉÌ^Ö¦IOò²ÞFן,Wøúãë©7у½|ŒûÝ=ìÒµHMk4p²~ë»-þîﺉå°c|å|¯ÝßàÁ!;w‡SHò8­Ç!íæ Ðµ„yÌ`Öf­ûÿ‡'„ÿâïœáŸ}t³ÉÏzœ/6øÚù÷zœÎ/€ã9ã`tŽú®´ÆÆhÜÚCüÑëûø¯¾ŠMs¥4ºn†¦íÐÍÜŸMÛ¢iZèFC«&¹ïy´$yÌSDLˆ;`é“V"!°&ØÈÆüõðæ‘š,ú5äÇ‚šLo½‡~üÁù †Ád²w¥— ‰û›ÀTn\;ÕSèx*àœKy»˜øÊ(Í*ÔZÊ•8Êz³Ïˆ&$ë?~ÚV¡I¤É&§kä«ÛÜþM§W š|áVhÏ©BæŒ]Ì¥ åZ·n;.m1»ùq­FòHj¬~éãÎ¥OÁø(VÃdòÏŸÇ›4ÆèØgö’ Ç<îJÃ{ªIØ*ûô¸C§”eîXØÛÔÝH=Ðç)[6û©…L‡”Oaãd,`Ýôê œÃzËÝ…¬Xk<Ô9ÃûóëßÂ'·˜unѱöæ)ƒ%ôL.5Öó‹¥Â‹…ï<_àG¯;|zé ªÿò¯¾‚n^«8i[ÿ3ÎS]ñ¶.€eðPloC€‰ýDä[¯oüᓟ\tøù‡]ãƒ0N98×39Ÿ’>^ìÙïyÃI¥PøÖËÜ3ânôÉ …›’®¥‰ÏûàXܶÁ¦ÑzBJpþ{º<Æ·^~ùѼÛkäU€¬7¿!ï'˜ÛiÐÞÜå[O;(å »•!|ûy‡ï½²xpÐãý“œmpïÐâ°cèþÃLò–ïÐXÄõ‡VÀ¼%Ïßþ~‹ï¾\@7M¼P®úWÃ!~xåŽÏ¬aß 8–Ö- ÍÀj†èºZ_À•5к)Bd•ÅWea™,H4rþJ° Ã碔òQÀ‹•’¥wj31ÏóÊøbK±§iÌÖ7¹G-Ï—®¼Ï÷s–ó¸þTßà>ç-Gæ¯^Z½nb‰¡4&SŠæ~¯ÖßÇ·íü1)‹HdIˆÎbd¹ÂÞΪ-ç¾2û<#œ…/óöάZ+†0µ WßÉDµIg¸TªÆd8:×Bßw‘á$ voßvl1’᱑LùÞçèfÓ‡íC$2Á½Ô-F¯þ¤m”>ÍÄ“ÅèÉ×b©XÚhÚÒÝÂãYkñÍ‹ñß|ãf/0WW8nÖ˜ë mØ›Áâõ-áfExvÓà¶'¼ºmñòFÇ÷¤”3ÅÙX®1®y¹ÛÀ*êz 7.ýlã'fõ»¯Ö@oeOxzÝà;Ï:|rÑÀ2ãÕèÀ¸ÂmÓªÀMê.µÌÄÇõ_7ÒuÉïÏ5ðÍgGx¾:ò ó4™ÇÂíár0¢F»ñØõË.Ty ‘k6¬ñûƒG˜]c`…?óø¶^ŽÅ`Cо[þüäñäD iþÑwføÖÓ”ÎwA–5ž-gx¶düÞ'ŒóCƒÓù€N<8´8?pÐ1f-cÞ0:Ƽ#Ì7§Ú«u‡ñéÿäGÇXsƒ¦EÌ:_€œöp …Þjh£¡¡¡u­hÝDG8·uWÚK7$ü§óÐeV: ÙP3ËœÒÛÂel¹z—€¼µ‰Œ8UËëpên]+ÎÁüåM¦ñÉGÿ\ 9;¥ï¨ª‚î<¹w§‰P¦­1ªÕg–Ä(®a[>ÏèBõä6”žë,îÕ©‘gŸ^Æ£ùWTJªgÙ Å!Ïí‚9û1Î OdѦ¬Ê­h3ÒF/±)FF@‹ráòèIg¸`c>á ‡’ ‡]d8¼1.#”¾íÌØšª†=ŒdÊ3±q$@!£Q$àsq bØŽÞd#Ê!Bä]b°Gݶõ†á¬b.©cµŠéÅ“¹”V°VË3üxùÆ>„z }ã÷ìÖÚâ´ÂÖZkдÁFÖÆƒù?üöf¯ñÕû=Zfµ‚± íÖ˜¼¾®ØozÆz \­5~ôºÁË›Ÿ^vX ž7Þ&?ãz£ñûµøµ¯8òÕ`]0XÀZ÷ðŽÍMÉÍÎ{‡H5ß|~„OnNSœ«ŸÂã>”&vJ°{º—(q)µ!\ߏ׸×6ÆÈ:4"!Ê»Þ8ä'b ›ZiÏ-Ð"Œ&ñ RºŠE¼iŸš¶ñ¶ÐºAÛ´ÐM Õ4ÎË]k@¹üwH£b¢9Qî6Š}ÌJÇ0PMC\FÃx±Gk–ÊM?¬îTÈ?Gõ’å;=îÒñÝo‡y 0àíï¹x.®áô;$ƒY Ù6´¤ê–öÇ÷lÑÊB~æQ€¢!!Î ^,ÅÇ馕#¼¹Eª&rÂl26L5EÎ)öï±|ðìNoN†«‘ÓÜ·Qá‚+Z¦8\Eö'ÃÝÁ®âÛN#˜}©“k(-ðgl/::J.U®PÒQ³—`÷ØøD¶ÐͺHhJþîÊŠõAˆÕPÊ:ˆ3:ÏQ ¹ðlp6€2 )4JƒÛ™+èÖ`XÓ8ãk|B²‘õ“ÿ³e‡¿ý÷ð•³5o i`a‹ÁëÐÖMé†p³Ñxy«±ê}†‚5 VŒ®õP93X§Có›ßiÐ5Wøêùk¸uÀ0XÇÞ hÃÉlÅøãß4ÀõZãÛ/Nð|yà˜¾ iOz#’B±È»t0b®·$cI‡ Ò‘V»dʪˆŠR1gÅ üþ“gó5,VxpÔãd6xÉ¢wHóçÉõZãÅ‹kÛáG¯XÛ]çzî§f˜÷ÈOòDT±±¯ ¿B1×Z'¾€7Ìa( u|Q×¹™ŽÒÊ«<ï@kg¸£5´öÓºn ÛMøÿ¦…nè&ü›ûþØ@¢W{<§ƒü,\?‘¾ãTNÇk³}£$u1c”Êl2â]öãoTÈ¿(°:½Y!¯2G´}žç­8ȸi¡iµ•ÄéJÏlL8‡gkÓy©zàwä¯ó¶#+‚»PX­ŽÊQ.RÄÆ¨¾×’3WŠU].×9ƒà£•r)C¾ûÎø oI†ã;‘á¶ù¶ P&U›8K¥KrD"æ¡SLÇ>ÒÞ(ƒeüš0¦¦Œ‘&ùè@æÙάÄ6‰²Ù½hƒ¡9øm7P´Ò.«šxvf&«%,»)ÒX ;Øø÷àæeã&ÞÁFhA«Ëûãå!>¾ p?ÇBfmð˜OE¨Î a‰À,"]Sa)sÿû7[üÂÃ~áÁ-ŽÚÖgbK¢NˆÛ´ hX¬Mƒ/ð£«# Ü:éX°©#-¦LJ²4 {tA¢BŸJb“ÜúÒJ#næÆMé‘4g|àŽ…µ×C‡Ë‹üàÂ@+¿-÷; '•!XjÜÔ¬H;¹Ò –ý{ûŠ’=ök„´v‘g(v± +­]v¹ÖÊÎzn=º“ »›ìd ýßCÑUþ{†\ûÇvÅ[k¥—.×4îg›&6*䙇>%Ž»$%`_ˆƒiá¡9ˈD©qá @©„„"úc¾ßUÈy{!¹ŽÑÖ‚míÁjNÞ´ý­Ñ‹ŠëŸgÕô0•—¥|BÄ´§D—P¥›“1ÊsA¼Fļ ®·—Ë`ŽGòŒ£ñAã²Ñá’69b!ŒƒXLìÐyLp«}òàVbRc½”Qñ2Munµ«p”ª†qMi$Sy¼Æ­µYPñSÔ݈I§(±;¼x˜6ȧGY (óqàÙEHZ/=²Š¼ï,¡!‚õ‹µ2m ¬npÔXΈ Ý0…†E¬ªÅRÙ<‹Ûì¬Û• ‚ECCÊ%·)šÕXëíDÏâd”f!ƒœEþ»ñWšÜ×pu€]`ÞœtkÜ[l `üë÷fš0XO¯¸: ì„ÚM(vZƒ À$‹7Å)5›ÐcXÎÔ%’Ôˆø[NLwoä ¼;Þä'Ø–FëRŽß .öºñŸ¡ÛA»B§µv»z¸&D+•tùZÅ}F©KÈBiü*FiÏ´w]k…FkÜ.Z–<< ~ÛP|NR䊵ŸŠÃ¤"¦Zn<¯ß@4 ²§dWAòÍnr²â˜¡.›-¢bWáË ðWñSÚ ® 3ïÜ¿sX}ov;O³È°GÌßò8\Nºûô <ü3&“ÕŠiœª…'Ih,ÑìÚÃS n·9d-ÈZª]Ùq¸Hšú9ŸÓ¸F8H çØD§„Û‘ÃÌÅj¢dH2 ¸:ÀíÙZœ*+®sÈg¶'“´ÔNÔ‚XJ2\ ÷¶d8B%=>!T'ÃU§ó-bÕ&NÕ!ü9² Óù–àõ\?Ç^ë ïÆL·€¼ý«Ïzfë!GG"c"5 ¶ÐJÃ*·Wº7óƽEc¼Ã÷w0œM,Ã'²/3®H!Ëb†± b"÷íVȸÄÂÌÞ¶2‡¼˜Æqš‡gÊs`z}¾‹ÿ›c`ÆóÅóMBƪ5„©PÄâ­‚«ö)rÈE(ê‚ÑžÈp×;u2‚߃?42Ö0ÑGÀSÿ>…¹ÜãpA&qÇO¾ jèÆtÃZ;ïz¥”ƒÀ•Ê`%*•üä „ ·лsgÓþXÙ¾H¡Õ„V+4ÚÃìþµ¸?½Œ,˜öxƒ„˜X¥ÁD¸é[0µ±ˆ‡¦)Lþ &$7*¦ôð¹ !(©Ë÷æ¯2D‡D£,o€òT—™BŠr6MyàŠDWUø[¹ÄÁ[¤è½;5åÝ¿‚¥© cõ¯Ûµ6áñ•gŒÃøà ÃFiÌ›†S;{/ê0]‡¢ÍpS;û¢lŒinÖ¿V­B‘å˜b^­÷<{ra)òE-ÊRªG‹X …Ô0„d.ùøq?X™^ú§ †zœüTbm»P•ÉŸ2F»d>gÄ*‚÷@‚Œh¡ILVÂôQwèÉŠ‰ì¡‘W T#¬®Àb‡®³"©’âU D$öç]ï).VÝ JÓàyBD Rn;ù ›ðXÊïÕSü£;¿›Ç£0Œ!xK]!“—r›F‡|±X}ÄJ1Ÿ"ºÕ ýÔïÇéíˆn;Øæ%z<æ^Ù*d;š÷w¾7®ÂívÛ=…æSº­Ç‰^håÂìI¸ȃd²9ŸóP©|X–(ì4Üž&Ðr^jÏ%Ú4¡=/Yæ5í9vhÏQ¬ß@{¹F”CÉàæ]‘á¦}Û§¤jñS¡í'TÃÁ™Šs2†S¯Qb²¤&`d*å9ìÉ\bçݬ+÷Ød½×8gƒ”'À‘…†›è7VC©5æÍà.Aë˜å®˜ë8!£ V“ c8ÊÖ\„«·™õÏ¥)Aæ¡ØÆìp)‘ã¢Ç»‹… MûHM·vnxŠë'rfèq_•÷¤¢ã΋¾Šò'ò¬nYLD2œÿ ›Xä¾ø²§»oP„ÐÓ¥¤X—mi;5 e¥Q’ˆŠg˜Ø}á´ìV‰ÔŠ?@Zʼn•Ay´&øÙƒ0.Ê~Âwýu®Þ\³fkÔoÐx"€8—p{µðóîI\ÛcdÊÒÞÄ9fÜ7s¦ñiÏó'•8Ul>‡â©úiáaI{^¼Æ‘ö©Nմ练XÄñýÜÈpHë„mRµ #™|±ã†ºF8dxG7Ÿ¾GÚ‚ä'Ñ-À4RÊ鯉n#BìÈrñSQádÑþ<°QËkغiÔè‚ñ˜±f Ø5m˜A¬e} §uîsþ=4ßs‹±9Òì3†m,²1\†­ç $ŸzæC°ãKÞøBB¡˜èÇD.‚;Èù€{tì þÃß•£JIS8[%LÆä“î"#Xþ¸çÐ0N÷ŸE¦q¥R- “*š QÔál°‰aqoMi .î¬)>Nà“)ᮦ(qëÒÙÎÕ¤_9NûÀ©R£©¼~olx%n‘›àÑ(FzYöÕ=¬™2¤Ì¤T¬™£ñ WFq*2YÜP>ïý8o{ÆÝÊä]`uz»ýx~ÓWhÚö3¼a¯²À΃Nx¢C ;·ž—ãí>ü±Å‹Ýfp;Mõj$ ó ë+6­¸=ppêp;Õ’‹É™.ƒÛ…ö×E´l,ê’(çaiš Ù]q!ûp/\ìCH4†'. z ç©,J½(×1†Fà^kô`ˆF6OBR䉉ÊëCc5Ä‚. *ö÷Òƒ@D;';H³€EÉ|Úofw`lØA±•½Y$»AL÷òœÑ>Ürê0¹ÀÌò‹L8…=Š KH_}˜+ç#_ëžÁUpIHqP´RŠŸ],îþ|ñµÊC×¶ôé< Ê%[p–·ü>P„Ýå»å0±Sæºä*i7Ѝòç^rYãäBG‰XH…W:žœ|òªŸÁªYXbˆ×/ûǛ֡ÙAü€4ƒqþšL IDAT9<*Ír’S=«i¾ûñ]’÷q0{óýø®—¸k_²ìÛ eä‚ÃkL-®ÊZÄúV3™Ô[ef´;ÞCÄS›‹;Àít7¸]LӨܓ¤Õ+ÞÊꕪDƨ=gÛŒiíyHíy9a ‘ˆ:æ·$ÃMø¶Kx_ØôÒ‡á‚ñI.m-¼í‘GÌáJZºÇyø‡¿A)¥c‚&HZ~h)£ ä ¿¯dÅ'¡É ‡pÂи4ômã˜åDˆ'&g¸I»Á ½óRü˜[TKUܙ봢± ¥šx±b_TzØ7ì“Èüq%/ÎÄ»P"¹rƒ RÀCé XÁ~×A@YdJõp•Ð+SÌße¥¦“]­Tj ¤M¹òis"Ñ(Ò¼Dqe†#–‰=;Äÿkéëî£ÚéM ?à´sg@æ‚'h‘§‘Œbò]É©<@ìfÒ?&”ìfU@Iï¶`,ÃÈŸ£`¸sÌ?—ús5¾µR1U¡^Ìk…œ¦Ù~âûq~Xù¤´wñß·»áOLøEÉÆÈÍ­øœh×î¿hOâíwJºVYÄdÐ<| KòÔÔcÈyü³„Û˰.àvl‡Û3*Áݬ^GÚó@QÈßöÖž•D&¢z+Ã?Ês~_2\éÛ>NUË%‡µé<ç55.!ùae¶’ÈÕÂ"1è”ÜQ‚j-bNw´7ЪI¸­‚N]œ‚Ïä.òìgËq7o·,n¸EÓop¨{híXí¤"-Ù¸Kp6¢Ý­”K„‰ºI÷®Å0¹ëtÑ…øÐÐDò”±`åaf©¡ôì¼@BK¹÷ä‰rÉ>×m HL”ú˜ ‘‚DT91Å¥äyÀ îâs} u?¯áôúá¼Pé¤R,ÚH—¸ÙÚ’£bÙ“ë˜#£=8\…âIñg¨Iÿö×IÁ©Øz¢Špv˜º9j¾)" *6‘é´R¸ég¸sˆ‡Ux5*×Ê›K‚Ús`ºP)CUíJ!Ÿ.â¹(‹þ„íÇwõ¼e"®Ô+ÞÒ ,Hyü};ï9A‰kÎsÙ^y±„ >åâõñ¤Fº€f ïîpû]Øí@-Ym+ÜŽ NÚ»´zÍN ª@3{jϧ‚X²É]*„y«3&|ÛkRµ]Mn¾€i¤1`ZcEP> ,Ýð!"ßÒ>ˆ@ÙT²îr„܆/Äq_áWvŸH˜ )ÛÖi7¢EÂ¥®l‡kÌõ`â.@:XɧéŸXFXl‘þ£‚”ÃTŠ8UKˆO‡m›U9¡) \G Bgª<£8­!\£@‘EÌBä„$ÕY©†ÇÊî:øäDøÚÉV¹åé•‚gïSDà ìÙñÁ²Ø‡^en’nåp¼d¼S´@µ$E‰õ.&ùÏûUMx=aB_ -Öv¦&ÞÔâ–›S×{$ù`Nx ï¥Ò* UhÂĤ·¥×й¼9¾}!ƒi¼(äw…Õïü“ï|?¾¬>yw¸ÃUƒ·ÉÑóÛ¹Í5[iæf¹éEA–p;ÊøèR;äf2o·#‡ÛeÖ{¡­®Ãí¨Àí²ÁV¸]~ÏH{MÑ*¹çY“°M{Î õ§ñ9Áí;ávø¶o•ªa %úïm¸\ú“˜ö¤f/Ýá„§FNË Ë)y i‚Ó‚ÄrgHb_#ü•¿áY²ÙÄðìwƒ†áöëéäm°AƒaèÑ©3=äû2âÄ\š’¤Š¸Ž»"޼‚èrGåÎÎ|=Þû²û ’¼Ñˆ³qI»Ë MGÂegP W\IL¢Ò:9?iý…¢G·‡¤Ï$ ÔÙŒÀÅñ´ lûôÙ»ÏÙŠíW `ççá±p ½BÑK¶À8{yo®(èØ\„yÐMš©ˆ;KT_†,{ {‡ Z ƒA§Öhõà f ÐÒúAœúÄÉv3@@¡0•d¶E£Èâ!ÉÓÆühm9̲*3 !ØøóZ o!"=²Yòd,÷>E`Ž5ìAÀŽ&´™;`”I Bs¸x¾+Ä Þ5[I–금9©Wóäµpqi•ŸÓ¢KæE‚ùwÝîõº=º# Þ˜z´ íÉpáC×*›«ãç¢Jö°Ì,§<§€Æ%ÈÁŸsÓ$·»ÝF…ü‹¦Ûiüm&ò©bμ¥²R¾®Üó—ü2¸}â5Pà5Úˆ *+¼“(WBù<rÇÔ€)¸}Ê»ýó‡Û±Üž[½ÆÆ«×âzÝ·ïÒžËà®éC}w2ÜÖTµRª–?oSm£ŽŠû›èß?jAN6œ…ãÉ7meVº„í½¯{Ú›*€M‚÷å.šƒó–uV²yÙ²ˆS;e-­ÆŠ56ƒA«Öh•Mp ¹”¹xE±BýLIî=a. gÜx2_8­4¬·kµâÓT°)¬Æ"sxc¯u¶Ä¹3r¡E§2 I^ÓTl`¤´‰*|°”-\’$;Q R㌅€\*ÂÞ)а?/ükR!øG^’‡Ù¤÷"\èüúd—,uâ”ý3 KÛa@—é$öĆ l"îÙ¬gÊ0NoS…<@o´u}3ý8ýqßÓ>¯’GÍÕîaz¼ç©ùÎçæÝJ·çl+8?̆¢X¢Öp{}Ë™ó®ÞíÛÍdPÀí²Ìs­´ŒàöqèÊ~pûÝ­^±Ãê5XíÒž—¬s©Ë§ñÞŸ ·5UëÓyÀ¨%ž»"QT¡`MÆÙˆ¼(Þ öM¼?ÊnÚ!­Ía¡œup)f’˽%Ø!äLçA¾Jì‡mQòÂ>µÁ :3@¡G£6 êa yQµ öjÄä¸è¤<,Œ¸š`f »üofßs‡¦%žVí]Ê?åéöŠªí^±a-¶a$‰@Ž©ÿU„{PȨhÌã)|•£½`y¦†Â¿{ŽŸIÓZï/ ž3 ýQåFÚKKM¶h¦Üô¯°²- æÎ†VvìÅ»‹±¤jÜEëZŽˆ°°ÁU…ëñÖʺ³ËÆc,ùiØïú)ú‰îÇùŽÈ¿|W,äCµ©‰°=–GЮäãlq‡#Åjª¼4Ú·gÃÁça&SÛËÉøÃí<†ÛwY½b‡öœGÚóitˆ32¢¨‘£EIN†«c3 Rª&ßnuƒ4>ÏcÑU:ýÍÊÙ¼Õ•Q`…Saj 2Å=,ò›V6 !+TÓEVê(ää˜ë¤tb»«ÖÔAñ:ä¶KBƒå¬XpdÕ's—¤ÓöiXä !-»P¹pV“„Á (ÌKòiœEÁæîQ\üQ³-¤(ygH2þ!C#8/õÉ®ÔC 9Y„«Ä-Œöó*A”ämwaýTÎYÒƒtCP±Á#æL²Æ ,MK-à£RK4#™ï‰]h(Ç…&ñ´Î±óžÅå®úñØ0ÑvFÕçºßòs¼e7ý®aõí_ãécº}T®4…dìNPÅTµÁ¼.W£’÷<»W™óŠr(Ø#*5Ý ÞÄ»}?3™·Û‘Áí;’ÕFO\½¬sëÊÉ ŒµçEÖ UÂ\H¨™¦ÈpcKÿÜH¦üÕH¡¿À…cNJd£à!žiø²)"”èÙÅ©!žŠ’|Jìnã¦4(t´™>r’äT2ÖïÖƒ‰Íê`Ø`°Š6ÐÄôˆprIï¢R°–’[Xy_°Öéó½v=·*µ>ŒvJe†ìÃd0&/–£’Ô‚¬HEZjÉ˰ñ\Âhὓ‹¿çZDkP<\1ôg‘[AôLÐÔ@q€ãm”©(¯||E”Ô B2Ƭ±F ¦Ô4Îz8úÖÉ‹1æ—’“ﵓqOíYîÑߦË]æ@bùöãŸ=¬.‹ß¡øO{Þ omm˜m„£-Å{¼ÌòÈUø^éÚfL–ì&]¼ñ¬l%Ù¥Ð%Únq·üÊKú¿”måSçvïö·5“Ù“Ýþ&p;’N½„ÛwZ½Vµç4¾¹2¨ã]áPÎÃ?7ÕÛP€˜+H¶[¸6\î6œsá{]¦v"Â9¡v°„¥1A`Ô H qW+÷£f·o5$NwE ´ ¦0‡ ˜7 ³†Ö£eN‚IR0€Á²7㈠X銊D!±.›.é>(µ£äãD³ {S悸#ÒôPÁÓ  ƒ•²,Žwͬ!§³@ aP¤Bj`‚¡kh² 2ÂÖ”2d,$n`1é6~Æ$&²³÷Ë?Ë—·ÂßwÍßo?˜¸sÓBþS¥ßÿUò¶ªºug!~v§þ\~ÕÆëeõÀÖ×Mûœ ;ì^å­µˆ­ËÕ |åsÃíåk¡âŠ—ûó’0]<à[Àíu3™Ïn¯Aüœï¥y'ÜŽ Ü^מïŒIÝA†ãꘪÈH“ yªtv¯H.pcŸÊ;[KMùç7Qª¸k¥q’ãž>8“ ¨$šÂP¦±:ïèñœ‘¨8’œy©M…U„ÐtÎÛÜn`íà^+ÛBÁ d¾ÿpyŨˆ ¤&ƒ²ÉŒ¼*€!œÞVØ­†×š£o2ÅNœ0ˆ‡‰Ê yýÖ÷Ý”v¿ŠóÒMrM’´qá5ÙÈP—½çœ Hv~Ž(¸)Ò hhe=¡Ž#êÁ¤0PÒÓ?DkÊ\*B2ΗÆMI­hHb^ÎÅÈo‘´Ã_=k|¶ìiy4ùó“ýø;€Õß¤ÃØ»ÙºÛ4¾m©t\{óåŸUJUpÞüšß-WCqÎ D“ˆH’«%”’9‡.XÒo·½ÛwÃíñ¢¼ÜÎõs¦„îbõšÉøŠ<Åšö<Ú{o'Ãa´ÒÊG~IŠnÆpXqò¨â*„«Üb–ÝRœ\e0 rk>’Œæ©M‹ÒŒ$B""É-À»qºfM ¥“cªS£Ñ¶ Ú¹£Ao,6ƒMoBrl¦õ§òÖ/*¯ p—+ô(œ+žr ‘“)òé»V¹ {Á æÒä-ÕæYmz"ñB¸|#¨„+Õ˜Öh3 ›Í¼‹kp¼$! ç­Óß[ìÇyçB#¾–ÔHÕfþÄïÇ鎅œ÷¨¸£ÖºâóÍ{ŒÐ»AþíMò^m®㕆ž|^ìj·|ŠïF®6åWid¦öYÎù6DØ+*5]bÈÛêÝ>uœÞnϾµnõ*]ŽRE¶E²9“:¾àÆØ€<šMÉ¡[%ŽÑ8³w\` Èò‹Ùd-N"Ɇ ?[vN²ó³(%iëi¡ŒA« @è ÌÚ€Œ) eS[¨ã "&Ǻ– ÓÁÂvÝ;â™ÖhºÝ¢…™7X­lzƒÁfA§#ÒYª4ÅŒr° ôÇÆÁ#rcOVÌ Óo°²šv†¦í2A¶ìÇwl:÷Æ­yOYò7c¬þûñÏÍÍmÿ7RÈw'ULÂêÕ@µ=Ùl†ŽÓ¾çÒVKíûó©ægLû+öç“Þó•œÅ©“pìW†Œ ìÑ¡/’ÐjSw–;Œ½£ReªÃí¸›™ IB"ÅDÙ ºFiÏ¡TÞûÈדóËY·´ —âS˃NâC“ó߿FyMd=:CtYˆG]‹€[S2—ðŽ/ÛZ*P®'zã²=:m ÈÀnØÍ26MÍÅÝ_^˜mL©¸(IJ)X†50 °JƒE§1ë4Ö½Áfm|6;[cÃC„-×^QÌs”†Gp8³»I›Ér'YEx"B2¿¡ráXÇA£.•Cç sù^˜ªH)`cÐÛ%¬Ðu‹*"€w6ï«ò öHäø©Üo•íöX¿kß÷sbÞ^Èï «ï8cîþX\Ü„ó¹Õýù]í^™'¼§xÜ/ŒêO’«A¤†÷çÓîpÕëfKK­Ó6/áö)’‹ð—jTjvvîg&3‚Û'W%y!â!°n/µçÓpÓ„3•p»{ïͶ%‘8ñÆúNO]qošv-‰8¶¾ F31ø/6I¯7Ò³Eƒ]ka6=úÕ¬sX£±QɈhGùYÇå…˜Ùí #˜p f0  Au ºó¶ÁrÝc³1nGÝíÆ%‚eÍŸè¦-Ë“m ù”]nøO6aÓ4„ŒÃå´au¿Š(V$™:SúŒ'¿¨“ã®ÅØÈ¶èêŠ=³ÅÐoÀƢ͡u“_ï#ŒqK!ŸD¦õãe1ÿ,òÇ¿Pûñ7ɯ[z§…|ëDÎEJÙ^OK[¡õ*ÏcBž×Û‰v[ÓÛÞÙþœ Ý4žŠ«9­³ö—«MgŸ¡òiw¸ñv‹yŽýêÕ T¿·æ×I%*uo¸½~ú”pû¾V¯[Ï?Ú'§··‹?Ö¡sæÊžu ñcö7n&Ñqî®&YH\µò鬴{wFn“A÷á5 ˜·È 7kðfˆ²±à·’Œä87¹Ö¡q‰7tðÚ図͛a™ä)rïìº=kqt8æ5¸YöŒEѾTnX4q“¦±We1]±(¨ÄùTÏþß9\4m9ºXhè+7|á?šØóøADÚQ• žœ²G·XñšŒ`W·hÛ9ÚvVìðoµ/·ã´Ç.õOª~¼«¾ÍD~çIú®ù>ª.!²·˜î·Myû<Δþ<Çñ·ïϹ¾?Hï¶ý9òRàíäjÙi³ÅŽ…W÷„Èt˯VÊî‹2í[¢R÷ðn¯šÉl‡ÛGÒþÐŒt{T‹ï“ŠútxÙˉˆ“Çö¨9”Ú:bq²Ð–Ý"U÷GrBdä1v9{^@Î>²Sñ€™6àÍ€a¹†5^‚&]j£%ó]º©QfBa¶TÒ튺éaõ.y< Ç‹…¹Ù€ƒnÖBµ¸] X¯‡x"eJ½p6¤WŠùd T¶¢+å3²z›c›7< H:`ŒóÉò+½FúËÓ" þck·¾lÅÆ.Ún†·ËÜ%Ÿ´'ôã;gÒŸõ/ü~œÞn¯Š:î`(“Ÿ)öΰ:aRX²ÇQk›k_zcýùöçû¥«¡Ödï’«¡ÜŸ×¡óQ¬:ÄñÄšŸ³C8bôoJ¥Qú^f2[àvT"¶sk®Ý‰ùAØN† ¿šÜ=$Û€¦‡´u-¬ehê‘a]@GôGO9fFo”Õ”äº/z M´Ê®6°ë^èÛÃp.Àh „·ñ…A\ »ÐZkíÊ k•3ÉÁ éì‰ÈGLb×h jÖàhÑB+Âr9lr“þdÃStm\°×s£æ;]ÛOÌœºø!a‘¸Æe sÙ=†½7Á1•©YÒb¢¨s~ÎuGI8Ͻž~³`ÑvóäÉ¿µˆ¿¥~œïR²Þ°aöãwÕï8¿ ̰­©}£ zûy°¡Ì¾éζà ýÛ'õçåà°eNÕ)šG;ý©ý9Õ ’k{3)ßÇ¢9˜p‡yO£4ï°3*µ8Ñkf2$!ú YIìöºÕ«ÀˆwhÏ+œ¬l4£Û»*tÍ@µÓ㪦WŠÎ’ ©L`Ëh$Ä‘[Ë–ä,fƒ™@<ÀÜlÀÃuãòtÊ yYð¢†>'HÒ€vQ›mÓFÍì ]V@;m–ñýD;Òx"Ùl5`­k:”aÌ[4Záúvc9Ðd²@qQç 2®N)ú´dòD1 -wãÔcr½ùߟÒñ IB ºtqÒÈÌwÊ!›Ò :ùÅc¼ ¿6›5@ÛÎSH´XßÂþi‚ÕÊ 9íÿBË3Šíî2ù¦…ü.°øt©§-ßóvþí™"h—þع?/ß5‰ë°ÜŸÿÿí]ËrÛH l åÈY;ùÿÏÜJ¬Š(’Ó{> H‘²Í!qå`ëAj(€Fwc>¤0îC› Øå,A8‰Üá,4îÖ.p‡‹T,6;€3Ðb¼¸^;ø}ê ,¿e=oã„`ìÖžkD;†ÛgÈ=D`LwIÄè†g¶»o+ˆ‡–k¹(ü@ªls¥›Èòå C±„UA¦°Ù§ j"Ö¹S·ÇO™bÓ"hRSVÎˤ¦TæIÆQ²ËcÅΜ&?ðòÖ|ë00ãürF’/øq)A]ç+âP%VðŸó$ßï¢kÝHRcjzÔ .¬5bUë„>±q÷RÔ;3Ô=" جM£þ8ѵ­‚ß7Âøî {;çÀæÿ ä.¬¾9»|'´¾ûT  Ö¯Í)\œ¬âÖ•_çßîÉlk߃Uýùáþ9ÌäFäý½v¯fýËÕf`K®†mw8‹PxÆ~z¹î®Q©‘ßvdC¸}—Õ«Oq §ºÉ©±ãþ¦»j^š“º–Ij{VUi‰ªÌ ól¡32žN¤ï‘/-˜¤$¶*Us×];Ä%i‹]Û¬SÒ<&3s˜3<_À4Âë©xÀÏ7T6Ó¼8yßkF<ˆÜ èßZœþ9ãÛëo—}Ÿ•®®F=ÔãúÒæ ÷ظV;§wHÀì t2ô¹þí{Ç¥FGåñþy`÷ZËï=œ¼O®¦7YMéb Ýú)q“=qèî@hˆFÇèßÁn×­‚' ´çÁ‹ý—jv°²y ²Psù”¥`t÷ê eUE!uOH÷>9óSÓ]üvE+s›žq®¼evi/ÌÅ<²Ô33r0xf›„%I`F·2ñ+3ˆ\¤Hᦪ™NE.R [¾L”QNec¢Ð6þS|}Æ©I b ÎuFMÿ „T×¢åW.÷ŠùÏ1‘á2v1¼xÓñ¦Ÿ\[qN758îÜEay:MÏK¢Å,¨?,몄ºîŠ®oëõŒ¶4¿®î½£ËfÐÜó\¿FvUví¿ÕZî| W’–;Å.·žÆ¾±üæÞ ¸ò©ö|L©Ñ€…휱>=w‹á;ìvÊleá§Û™äú¸Ô;Ÿ×T ÚlÞîu²Õ’„@œ•TJ„/Ž{}¦Ã¾·¿j&Æ×·ì[®BYÃÖŽ•>¹&ý[¡ÒžHnO᳤ÆJ—>‚Ô94¾¿Ì3×8²µÎJo<ÿm.¼3Né ÌŽ<Ú¿bÒC/¹(} "’ ”®»ò,7c–RÆP çÅ)®I©û¾óPžŸÄmzeT,N' 5öNê;0†/ÀárÅéåß_ŸñïÏ_X†Ì‚w†Cš LãU{ ¨N¶±Ä«• Úž¶n%:Fð:)1¢6ºkõ¹Õ©§æi¨oË.”D×^‘$!5OÂê²½¥3¶ºý\Xý@yùÇÝ>¶"?jËúþrü!îôn!êÕõZÿ|r[¼ãß®uDþ;úçÖ=XöjrÚûäjnWä`*$vâ„E½q½–kf28ÊnáöúûÅ8 kÄ}õ`.zˆÿ&xo_‘JBLd3¨Eù"x’$w.× U³b­Ê¦€é ¹y¡uY®iÀÜ*éƱªHÞ‹UßIDAT[äÓבä6jÇEš@»_Ë뒀͠i ¤Fètº+0 㳌þrEz9ãÛ·3~ü¼? µ0‘š!ÚéåÑþ0ï°wî~Ït.htÉž¬a ÃWIˆgð‹…ÖEõ‹,†TO‰*ÉZªníç¯Í¬‚ÕéÄ1¨üoüÁ×>ÈãhL䟄Ÿ¯ʬ¾‡lÂè[Ò5ómªk_ ºNÙþí±þüwôÏõÞ¼9]m^(K請håjêÈV®¶á·ÁÚ9µ¾F ¶Ð}f2·ÀªÝ>S t}IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/tempo.png0000644000175000017500000000555011273045225023310 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF…IDATxÚìÕ1 B1EÑ3jceeåÜ„`eëÄu¹2— ˆ•öcã+árá•s a™©øZëV/ÞüW]ÜÅ]<³ÊóÂs,«Ì™ù1ØáŽRšÉL%é·w)Î5âRÇ‹W8TÕWúš"b‹=®8eæeñÏ­Ûsö:}1£<ëàIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/tempoicon.png0000644000175000017500000000725411273045225024164 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÉIDATxÚ´V]LUþîîìÎ0³Ðf)І]~”¢µ¤ Yþ’’øC±á¥4†Ö´øR“Š Z±‚¡é‚TÃÏbÙò»KgÙí²³³“æø`c´î.Hð$÷éÞó}÷œós/#"üŸÆöJ088ø €ç4"òx<¿íægÚ#¸=©ªçÔ”¦—––©ñííÂÃè¼~cìi5©.kšöÏóŸ*Iõ´®ë:+8AdQ1fZ4 Cå8.*Š¢`µZ“BÐÕÕµº±±>{ìhɪÉd ÚŒŽ~ÕÝÝÞÍ—Ûí€ÃápµµyµýåöÖÚÚÚVfb‚$Io¬­­mllžœüñÖ¾UôJgg_ooï»ÕÕÕGxžGH–¡ª*œN'ÒºŽH$‚ïnߺüÉå7·B[3‚QÆÕãñ¼?6ö=ý43C~¿Ÿt]'Y–iee…vvvhss“fçæÈë¢K—>ž/..qdÂÉÞÜÒòÚC_R $]×)•JQ6‹Çã41ñ½õöÀ·‹Åò$Ö¿Š,Š¢½­­ýƒ¢#…8TP³Ù žç³¦1??•.œ8ñÜ‹nwÃ뻪¨ªªúlyy¹³¾¾‚ äÀöò2|7oB‹DPýTjŽ÷0ÆL9UTæpœq8Ê———µfÁ‘,^»†¤ÙŒg/\€ëäIrEEÅu’$¹,gŒ€1–'Š’K×u„B!†ñמ¡ëŽŽb¸¥·zz`9u /]½Šª¦&¤R)°X­‡EIªÌ•"«Åb1s‡¤¢àïþåÊ|}þ< §ÓÓh@ÞãÚp›Íögˆ–\)J+JB¶Ûí¨¨üÇEPÚÞŽ·•MMxr™L&äç@M¥â‰Db+¶üÀ?‡Ï)Š$ PRSƒ’,ÅN$ð-."ÞúUUÕõ¬)"¢¥¥¥Ñ…ùyym}Çíé­à8ñx?ß›ÍÙÉluuuïß™ GâYÌ0 R…4M£…õ÷÷ße U{êd®ŽŽŽÏ¼SS‹Å(R,£t:M>Ÿ à MÓÈï÷ÓýûKôÑÅ‹K6›í¦½0.·ÛýáŸGggg)ÒCY&¯×KáH„MNÞ¥¾¾¾žçOà2a圦Œ±C‚ 4677ŸmhhtWTV” ¼ÀE¢‘ßïÍÌÌßY[[ý@ˆŒ}?úŒ1@!€Ã•° ø?ÿ*ök fútîºQèIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/tgdoc.icns0000644000175000017500000013572011273045225023437 0ustar julianjulianicns»Ðics#H?à?ð?ø?ü?ü?ü?ü?þ?ÿ?ÿ?ü?ü?ü?ü?ü?ü?à?ð?ø?ü?ü?ü?ü?þ?ÿ?ÿ?ü?ü?ü?ü?ü?üics8ÿÿúööööööøÿÿÿÿÿÿÿÿúööööö+÷öÿÿÿÿÿÿÿúöööööö++öÿÿÿÿÿÿúöööüüù+ø÷öÿÿÿÿÿúöö¬þÿþ÷VVÿÿÿÿúööþõýõü+öö+ÿÿÿÿúõöüù‚÷¬+õõöÿÿÿÿùõ ÷õöùÿÿÿÿùõö;:øõûþÿÿÿÿùõøþ ¬ýûˆüúÿÿÿÿùûü¬]‰þüýøõöÿÿÿÿ¬þþýö¬¬þ¬+õÿÿÿÿ‚^þàýW¬ÿýõÿÿÿÿ‰;ƒûùÚû¬ÿ¬õÿÿÿÿ‰54]¬ùüÿûõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿis32ƒ¡ßÞÛ¼…‚ÕѾބ‘ƒ×ÍÆ×ƒ‘€Û@BŒÏ¥³â‚ •ßß+ `¹žš€ ™ãÝôðBÏßÞÓ šèÞK†¾2Ëèèâœíñÿü¶íÝ„ œñÛ³ÿÿþ»±ðT € œõ± úÿD!aP?v œX@+ŠbQ/«ôå D Õ;6/Ðýç ŠŠ ®.gþç »|Vާ]+2ùç uÏË‹1d@Wýç¡ßÞÛ¼…‚ÕѾބ‘ƒ×ÍÆ×ƒ‘€Û@BŒÏ¥³â‚ •ßß+ `¹žš€ ™ãÝôðBÏßÞÓ šèÞK‡m¾2Ëèèâ œíÁնýضíÝ„ œñÛ[œš£r±ðT € œõ² ÈÏ=!K=@v œX@+t&I(«ôå @ Õ36/Ðýç fs ‡.gþç Pn[TŒ]+2ùç 7„Šx1d@Wýç¡ßÞÛ¼…‚ÕѾބ‘ƒ×ÍÆ×ƒ‘€Û@BŒÏ¥³â‚ •ßß+ `¹žš€ ™ãÝôðBÏßÞÓ šèÚK‡F¾2Ëèèâ œíVm,BA{¶íÝ„ œñ× ±ðT € œõ± lq1!C0@v œX@+k D#«ôå ? Õ/4/Ðýç LG  {.gþç Fx]+2ùç (U2d@Wýçs8mk¿ÿÿÿþþýâÐÿÿÿÿÿÿÿþÐÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿÀÐÿÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿÿÐÿÿÿÿÿÿÿÿÿÿÿsÐÿÿÿÿÿÿÿÿÿÿÿNÐÿÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿýÐÿÿÿÿÿÿÿÿÿÿý!==========)ICN#ÿøÿüÿþÿÿÿÿ€ÿÿÀÿÿàÿÿðÿÿðÿÿøÿÿøÿÿøÿÿøÿÿøÿÿüÿÿüÿÿþÿÿþÿÿþÿÿþÿÿüÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿðÿøÿüÿþÿÿÿÿ€ÿÿÀÿÿàÿÿðÿÿðÿÿøÿÿøÿÿøÿÿøÿÿøÿÿüÿÿüÿÿþÿÿþÿÿþÿÿþÿÿüÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿøÿÿðicl8ÿÿÿÿÿ¬¬¬¬¬¬¬¬¬¬¬¬¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ++++++++++++++÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö++++++++++++÷ø÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööööööööööö+++÷ùöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööööööööööööö+÷ùõöÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööööööööööööö+Võöÿÿÿÿÿÿÿÿÿÿÿÿÿöööööööö÷øø++ö+øõöÿÿÿÿÿÿÿÿÿÿÿÿööööööûü¬¬¬üû÷+øúûüüøÿÿÿÿÿÿÿÿÿÿÿööööö¬¬þþþþý¬üø÷Vùùùúúÿÿÿÿÿÿÿÿÿÿööööù¬þÿÿÿÿ¬ÿ¬ú÷÷÷÷÷øøÿÿÿÿÿÿÿÿÿÿöööö¬ýööÿV+õýøöö++++ÿÿÿÿÿÿÿÿÿÿõööö¬þý+þõúÿûøööööööÿÿÿÿÿÿÿÿÿÿõõõö¬þý¬V¬õÿûVöõõõõõÿÿÿÿÿÿÿÿÿÿõõõõýþ++ öõþûVöõõõõõÿÿÿÿÿÿÿÿÿÿõõõõ]34 --4ùöõõõöùþÿÿÿÿÿÿÿÿÿõõõ   ‚+õõ+úüüÿÿÿÿÿÿÿÿÿõõõõ4ee4ú+õõúùþþþÿÿÿÿÿÿÿÿõõõõý::_‰üùööý¬þþ¬ÿÿÿÿÿÿÿÿÿõõõýþß þþ¬ùû¬­¬þÿýýÿÿÿÿÿÿÿÿõõõ¬þýü‰Þ‰üüþýûû­¬VVÿÿÿÿÿÿÿÿÿÿûûûÿú‚¬Þüü¬¬ýàV+õõÿÿÿÿÿÿÿÿÿÿõû¬ý¬û22]^‰ýý¬ý¬÷õÿÿÿÿÿÿÿÿÿÿ¬þþþýý32¬û¬ÿþþýû÷õÿÿÿÿÿÿÿÿÿÿûýþÿÿþþý÷ˆ¬ýýÿýþüúöÿÿÿÿÿÿÿÿÿÿ,þþÿÿÿÿVû¬¬ýÿÿýýü÷ÿÿÿÿÿÿÿÿÿÿ34^þþýÿÿö‚ü¬þÿÿþýVõÿÿÿÿÿÿÿÿÿÿ4;Vƒ­üûþøÜkdü¬ÿÿÿþùõÿÿÿÿÿÿÿÿÿÿ;;_X_úVùˆˆûüýþÿýúöÿÿÿÿÿÿÿÿÿÿ;5;^5eW‚¬üúùùþÿþþùõÿÿÿÿÿÿÿÿÿÿ;;;W;_ˆüûúùù¬ÿþýüVõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿil32í‚z‚yzwxvusvÔ‡ÓÐÍŽŽÕ‡ÔÒÍï³×‡ÕÔÑʸ„֌؈×ÕÑÂö׋ىØÖÇœþõ×ŠÝ‚Û ÚÙ¿¢¬ÅÎÕË¥ÿÿöÖ‰Þ‚ÜR@3/4AS´Ç®pWKH¦ˆàÞÝÝß3+ .I©¹š‰„€yw‡äááàŒ026~ÂÁ¶´´¯¤‡å€â4%hÛÙ¡Ñê&a¯ÝÙÔÓÓ͇èääâ2ÿ"Ï öpý]¢ßâ€ã߇êççå-ÿ#d*¡8ê[žáçæ‡ìééè(ÐË÷ÿðßæP›â€éèæ‡ïìì麳‚ÿ ÓÜÀàëìê⋆ðîîæêÿþ‚ÿ þý÷jÏíîÅ}<<†ñðïèá‘„ÿ ¥ØoÐïío …õòòï¿É‚ÿ ±xF…àÞ67 ,†÷õõó%ó€ÿ é;…_B>:,+…ùöõó/&R_J[LI3^i9Gn–ž‡ûøRPP{rFBFaA7H4d”Ëëî‡ç[7)5MÀºœƒk-$7*3i³é÷ùú‡g7 &(ÄÁ?U1%M·õûûü‡V'  ²`4'"<}ã€ý‡Ûm d ?I%RW 3n–Ÿ‡ûøRPP{V(Ga@)5e”Ëëî‡ç[7)5M§¥R#!$70h³é÷ùú‡g7 &* £7L+%M·õûûü‡S'  ³G.!"<~ã€ý‡´_ O+/)&(<Áúÿþ‡“’o _àX?1 #™òÿþ‡|˜T)BO± =D0çÿþ‡~|\Šg…š‘2JVemK |äÿþ‡kŒmhK™W4D_† „êÿþ‡Viz…hOIAMk‹„2 =œóÿþ‚z‚yzwxvusvÔ‡ÓÐÍŽŽÕ‡ÔÒÍï³×‡ÕÔÑʸ„֌؈×ÕÑÂö׋ىØÖÇœþõ×ŠÝ‚Û ÚÙ¿¢¬ÅÎÕË¥ÿÿöÖ‰Þ‚ÜR@3/4AS´Ç®pWKH¦ˆàÞÝÝß3+ .I©¹š‰„€yw‡äááàŒ026~ÂÁ¶´´¯£‡å€â4%hÛÙ¡Ñê&a°ÝÙÔÓÓ͇èääâ2ÿ"Ï öpý]¢Þâ€ã߇êççå-ÿ#d+¡8ê[žáçæ‡ìééç.ÐÐh}dßæPœâ€éèæ‡ïììéNiL3cpSNQxJàëìê⌆ðîîÀKQ'%,#O*?ÏíîÅ}<<†ñðïè  #oÐïío …õòñî"    E„àÜ6 +†÷õõó'kPKSO ;†I7,+…ùöõó/&5€ 7IJQ)n–Ÿ‡ûøRPP{C Ia@%/e”Ëëî‡ç[7)5Mšn=$7.h³é÷ùú‡g7 &*yƒ4I*%M·õûûü‡R'  ³/*"<~ã€ý‡•N A/)'(<Áúÿþ‡OC( !^Ý??1 #™òÿþ‡$˜AI¦$C0çÿþ‡ /p{2FdmK |äÿþ‡&|34D_† „êÿþ‡e 14Mk‹„2 =œóÿþÂl8mkpqqqqqponlhfa; 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿý5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ'5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþM5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ.5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé¶Q5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘=5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ` 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR g}}}}}}}}}}}}}}}}}}}}o/it32eà‘*°*UÿÆ|™yxy‡w uuvvttssvob,Çÿó¥ñ€òñððíîî€íåÃfÄãÑ—ÎŽÍ ÉÊÈÉÉÈÅÃÂÁÌÞØCÂçÔ¨ÓÑÐÏÏÎÍÉÉÈÄ¿¹¸ÞŽÁçÕ§ÓÑÑÐÏÐÏÊÉÇÄÁ»ºµ§Ì”ÀçÕ§ÓÑÑÐÏÏÍÊÈÇÄÀ»¸²®˜ÉŽ¿çÔ§ÓÑÑÎÏÏÍÊÈÇÃÀ»·±ª¤ŠÛ‚¾è×§ÔÓÓрРËÊÈÄÁ¼·²«£’•òs½è×§ÔÓÓÑÐÐÏÊÊÈÆÂ½¸³«¢–Çìp¼èרÔÓÓÏÐÐÍËÉÇÃÀº´­£š~«âào»ëبÕÔÔÓ€ÑÍËÉÆÂ½¹²©ž†ŽêÑãnºëØ©ÕÔÔ€ÑÏÍÊÈÃÀº³ªŸŒ{åãÎãl¹êØ©ÕÔÔÓÐÑÐÎËÉÆÁ¼¸­¢”sÕòÙÏãk¸ìÙªÖÕÕÔÓÔÑÎËÊÄÁ»³¨™sÄÿãÜÏãk·ìÙ«ÖÕÕÓÓÔÐÍÊÈ»µ©žz¯ÿîäÜÏãk¶ìÙ¬ÖÕÕÓÓÑÏËÊýµ«Ÿ|§ÿ÷íäÜÏãhµíÚ¬×ÖÖÕÔÕÐÎÊÇÁº­£‚˜ÿÿöíäÜÏãk´íÚ­×ÖÖ€ÔÏËÉÁ»±¤‡ŽÿÿüöíäÜÏãi³íÚ®× ÖÕÔÓÐÍÈ»±¥ˆŠ€ÿüöíäÜÏãh²îÛ®Ø ××ÖÖÔÐÊľµ¨ŽˆÿüöíäÜÏãh±îÛœØ×ØØ××ÖÕÓÏÊĽ´¨‘…ýÿþÿÿüöíäÜÏãe°îÜ—ÚÛÛØØÙÙØ×Öר€Ù×Ù×ÖÕÐÎÈÁµª•„øÿþ€ÿüöíäÜÏãd¯îÜ–Ú€Ø×Ö××ÕÖÒ‚ÓÒ€ÑÒÔÖÖ×ÖØÖÕÔÑÎÇÀ¸«–öÿþÿüöîäÝÏãd®íÜ”ÚƒØ ×ÔÕÔÑÐÏÎËËÉÉÊÌÏÑÔÖÖÕÖÓÑÍÇÀ¹­šñ„ÿüöíäÜÏãc­ïà“Û(ÚÛÙÚÙ×ÙÙÍ´}yutvy ¶Â¿ÀÃÆÊÌÐÑÔÖÔÒÏÈÁº°†ó…ÿþöìãÙÎãa¬îß’Û ÚÜÙÛØÚÀ|C129??€@BB;8:b¢¸¸ºÂÅÊÎÑÑÐÏÉû°¡‹îÿý‡ÿóáÍá_«îßÛ ÚÛÚÚÜÛ’;2?GHGF‚B*DEHJMI<;¯°·½ÃÊÏËÌÉÁº±¦“Šyf\XZ^amŒ¦ÅÞñ÷äê_ªñàÜ?ÛÜÚÝÞ§):HJD@=:86655679=>BDJO@9™¦¯¶ÂÈÉÊÉû³©š‡saVQMIFA;4-,2Px¬Õün©ñàŽÜÛÜÛÝÚX/KGA<730.ƒ*,,-/248=BIL0uœ¥°ºÂÄÈû´«Ÿ’€ohdecb`_][XRI<7Jä~¨òá݉Ü8ÛÜÛÞÑ%;H?;50+(##!  !#$&),15;AJ:V˜ ¬º¾ÂÁ¾¹­£—ƒsjijkjedc€bcb_S@G¸t§òáŽÝ1ÞàÉAC;60*%!#'+17=G:]𩵼Á¾¹³§œtr€spomm€lkjheYA¡H¦óâÞˆÝÜÝßÖ?>83,&!€/$).593+$ €#)08E9z}‘¤¶¼ÄÀ¹³°¬©¨¥¤¤£¤¤€£ ¢ ž›™–”‹¦W¤õæá†à Þàân,>6.(‚‚…$+3>HKw…š®¿ÆÊ¿¹´³±±°€¯ °°¯­­¬ª¨¨¤ ›«†¤õæ‰á àâãÝ<92*" StY€&0:J@ƒy¤¼ÊÑÌÊÁÀ»»€º¹¹º¼º¹¸¹µ´²°­¨¸•¤õå‰á ààå¢?6.&€ÿüý‚ÿôìÿÇ€qÿáøÿîüÿ€öÿ•*;GE}d}—²ÇÖÜÞááäãáàà‚Þáà€âÜÜÚùèˆä ãââ×#B;/%ª€ÿÛBŒÿýúÿ€ ÃÿÿÓ/2~ÿÿûÿ×8EBtc{–°ÅÖÜàâããâåã€âáá€âãääààÝó¤úëæ„ä;ãââ×$A8.%èÿÿà†âBÿ÷ÿ5îÿÜé…Lÿþÿù8CAyay”¯ÄÔÝâãääááåˆãââàõ¤úë‡æ çäãâ×"A8-%€ÿj¨Óÿÿlÿÿ )ªt×€ÿ5D>z`x“¬ÄÖÝãäççäãäçˆäãá÷äúìç„æ äãâ×@7,$€ÿ€% ÿÿ~ÿÿ —ÿüÿ4A=}_y‘¬ÂÔÝã䀿䋿ãúǤúì‰ç äã×?5+$€ÿ'$$¤þÿrôÿ(0/°ÿüý2?;€_y«ÃÔÞä‚çæçæˆçäûȤûíè„ç7æäã×=5*$ðÿÿ˜46 äÜó7Íÿˆ+??üûýä0<>q_u«ÂÔÝäçæŒçèèæýǤûí‰èååØ<4*!Àÿòÿ„$LÆÖ½Ö€}éëq%0Óÿêÿ¶-:?d^uŽªÂÔÞäèçŽèæýǤþîé„è7çååØ<3)lÿäìÿãÀÊàÈÆæùÿÿË´ÊËëȧ¹ôÿëäÿi+6;h_rŽªÂÔÞäèçŒèééæýǤýîˆéèçæÙ<3'îàÙÖßãÌ»à„ÿöÌÀÞîóìåäáë*5:h_tªÂÖßåéè‹é€èäúŤÿïê„éèçæÚ:2(‚ðÉËÀ®Á÷ÿüÿþýÿÿÛ¹ÆÓÜáÛö–)58f]s¨ÁÔßåéè‰éèèéèèäùĤþïˆêéèçÜ:5) ÄÙ¶¯ÓÿøÆéƒÿÍÝÿëÄÅÓØêë &36q\oŒ¨ÁÕßçêé‡ê ééèæååÝÖó¼¤ÿñì„êéèçÚ3(ƒ¦Íéÿݣ݄ÿû·¶þúÞÓÚÝ‚  hWnŠ¥ÀÒÞçèé†ê€éèäãÓñÁݵ¤ÿñ‡ìíëéæÛc€‚yodabmÊ€ÿëó‡ÿæûÿÿúûÑzœ¯ÃÎÈ¡eQh„¢½ÒÝåêêíƒì íéêèèÛåÖͯ“³|¤ÿòíƒìêëèäÞȈÿþ™ÿ ûª`|ž¸ËÜãéêêƒì êëéåâÌÿž¥ NVj0£ÿòˆí€ê÷‚ÿþÿÿþýÿþˆÿþƒÿüüý‚þ ÿÿv“±ÈØâéêì‚íêîåáÖÝÙþE „/2Gr ÿóí€îƒíêëëæþü¢ÿüúÿüü÷P‹¢¾ÐÝçéì‚íéíÃÄÿÁ¼ÀDtF@ÌÌ]]¢ÿóí…î€íæé€üþ˜ÿþƒÿýú÷üüòÿ\—µÊÙäêîí€î€íÞ‰Œá©lU?LõïUHQ¡ÿôî€ï‚î íëìÚãöâÍÜóýÿÿ€þ“ÿþþÿÿþúïäìøðüVx¬Ä×âêìí€îíîëëÃVƒ†[¾ÿW/‚g"2A< ÿôî…ï îíìÍÎðÖ¦—´çü€ÿþ–ÿýùݺ¿àöîçDsŒ¨ÁÖâêîîïëïÊ—‰w[>ÒÿŸ7 #((+Ÿÿôí…ï îíëä¨äçÏ£šëþþ—ÿ+þþÔ•©×ñïðo[q¨ÁÕâêîîïïîïêï¼€–ÿ¾/{5#$" ! žÿõï€ð‚ï îîèæÐ®êðä³qšúþ–ÿ(þÿß~àôðêŽC`tªÂ×ãéíîïîïïéðWüÌpb   €3žÿõî…ðïïîæÝ¹¼î÷ôÃt½ÿý–ÿø‡Žéúôá¦)Wg}˜³ÉÛçíðïêòêYqn†tR&  #žÿøð€ò‚ðïïíçàÐHÉðöûÒ‹áÿþ“ÿ%þÿ®}âüôÜ~L/^m„Ÿ»ÐÞèîïððëïóÚ]fcaZH€8ÿÌ ÿ÷ï…òóðïìæØM·ïöÿÈ™û“ÿ/þÿ×uÑýôÅW%R?cp©Á×äìððíðõß}+PHVVB; 2Ó¥!ÿùò€óƒòððíéÛ %-“æ÷û«¶ÿþ’ÿúжþï™$8T1#+€“ô\ƒœÿúó€ô„óòïïÞ72 „ìÕó€ÿþþƒÿþ€ÿ-þÿÿþÿÏyà± %-8M>hw–²ÌÙéõ½Hw;=JFSZ,422Ù†‚2mœÿùó†ôõôññÏ80%0ų–ÿ‰þ€ÿ&íx®y $-7IDhx˜¯ÊâÑQ(5kYEFA=i0*,%#mÿÈ‚0]™•Uœÿûô€õ…ôñò»7.$€’Ž«ÿ&Œ„^ "+4DDev‘³Á€&A=>E=@=,HF €s½, ¡ÿüõ€ö‚õôõñôí^#2( &P@exì‰ÿ,ÊWY_LHaaxumemry|‰ƒZYAPVb 'Uh 8OY^l| ±½ÊÖßçíðõõöøøúù÷ÿΤRÿÿý¸Hc\TJA920..037FYpn‚š²ÆÖãëñôöùúùù‚úùÿϤNÿœYi\TI>2*# !%*/4;?=2‹ÕÕËÊÁº´²¯ªŸ˜œˆ>?SGXf()9""'AL!*5DAqq…Ÿ¹Íßëðõöúùù‚úûûúÿϤL™ii`XK?2*!"&+24:9' àÌÈÂÃÃÀ¼µ°£ROBa;!TSB 3.G&0;EUO…šºÑãîöùûú†ûúÿϤLxrb[MB5) #(,15.§Ö½ÇÊÈÄÁ¾|T>b:fT 8H9%!@"+5ATE€–±ËÞìõùûú†ûúÿϤ ‹j]SE9,$  $(,0%$©ÌÂÀËÌ´±jh!PV\e5;€/9 '0;GTEŽ¡ÀÕåñ÷ùú„ûýýûÿФM|eYK?3&   $(**¶ÄÎà᥊1JWaOmX70) ;#,6CP6š²Ëßîöúüû…ýûÿФ cdSF:-$ €=  #$<àÛʶ§|ˆlk#;[>_6DiD)  ,0(2=HGE¡ÁÖçôùúû…ýûÿФMXNC6*#  kħ¯½m|36bj06kJ) 5$-7EI5‚—³ÊßîöùûƒýþþüÿФN´nF=6+#  ˜¹ª´¨cr_ h6/`@b> %/+3AF=PŽ Á×êõúþý„þüÿФÚ¨m?,+$ €<  Oº±©Ây[p92j<9#&^< *'%0:E?5‚˜´Îãï÷úý„þüÿФêÓª{I% ‚  «©°°²SjP;A35,JI -."*4A=9bŽ£ÂÙêõûþýƒþüÿФêàг‘e4 €  ‰Ÿ£Ÿ¾yDH9F962&,R. €,-&/6:?<„—¸ÑåñùûýþÿФéàÜÒ»œ~W) €iœ™œ› eñe9€:4/$=D‚('!))7>5}’¯Éßð÷ü„ÿþÿФåÝÚØÍ¼œ‡vQ&  K“¡¥­ÝýGG4=;84.)B/ € "#09:WŠŸÁØëõûÿþ‚ÿþÿФàÛØÖÏÉ· ‹~nC  .4{€Ž’’ÇûyZ1>?<83-18"  &,<:”·Ðäôúþþ‚ÿþÿФÞ×ÖÓÐÊó ‹wpA 7Y€%edo‚°íëp†1=@@;83/2,   //{«Éßïùûþ‚ÿþÿФ8ÜÖÑÒÐËÈ¿·¢‹ui0 JN).Ob“Çäÿ™f²M0CC@<83//$‚ $1j‰¢ÀÙëöüÿþÿþÿФÚÖÏÎÏÌ̶ȷ™†pX% 7?ED€d ÐèÿÉW†¦ 95ACA=741+ „ /S‚šºÕèôûÿþÿþÿФÙÔÑÊÍËÏ£’¶¡Œn`T, 1@87G&ƒ›¥ÅÛøÏWƒš™¢¡nRFBC>943' ….?}³ÏäôúþþÿþÿФØÕÑÌÉË˨{§š‚n^XD-,;=AFQJ[y0e‘”¤¼ÁPq¤¨¢›—ˆ{xŽcKKC=743 „  )5vˆ©ÆÞïùûþÿþÿФ€ÓÑÌ€È5¢t˜ž™‘vl]A>DIJAEat€s‡…“¤·cb¥§¡”‡Ž¦yTYSLD?842 ƒ  *7t…¦ÃÝï÷üþÿþÿФ>ÓÍÒÑÎÉÅÆ½ƒ©ž¡•‰y^;NGC[vƒ…‚„‚ƒ‹–¬c^“ž¬¬©¨¯™hXdb^VNF?73-  ,AFKQY_hpw€„‹Ž‘ƒsq…€ /hu“¯ËãñúþþÿþÿФ8ÄÆÄÉÇÐÓÏÐÌÄÃĽÊÑÌÐÒÎÀ¤n‹ž”‘ŸgcT"7;@DIOV\cjqw~ƒŠ‘’’‡yz;€€ 69jx–´ÑåóûþþÿþÿФ7»ÇÂÅÄÈÓÐÏÏËÁÃÅ¿ÄÉÉÍÎÆµ†i—›uG:0=BGMT[`fltx„ˆŒ’‘އ{}I€ !-@Ho~ž»ÖêõûÿþƒÿФ6²¿ÄÂÄÁÌÐÍÍÌǼ¥“²ÂÄËǹžlv—wHgy*8@GNW\dkpvz„ˆŒŽŽˆ{{=€ $.;;cs‰¤ÂÛîöü…ÿФ,§µÀ¿Â¿ÃÊÈÊÊÍ«–³¤ ²¾Àĸ§‡poYb€S&;DKT\clrw{ƒ„†€‡„€|~h€  &-4D;ku’®Ëáïùýþ‚ÿþÿϤ3Ÿ©º¿ÁÀ¾ÈÊÉÈͯ}²´­º·¼º©™‡…}sˆ-)7AJU^fmrvz|€~}|~|g/ %+1:BDJO@9™¦¯¶ÂÈÉÊÉû³©š‡saVQMIFA;5-,2Px¬Õün©ñàŽÜÛÜÛÝÚX/KGA<730.ƒ*,,-/248=BIL0uœ¥±ºÂÄÈû´«Ÿ’€ohdecb`_][XRI<7Jä~¨òá݉Ü8ÛÜÛÞÑ%;H?;50+(##!  !#$&),15;AJ:V˜ ¬º¾ÂÁ¾¹­£—ƒsjijkjedc€bcb_S@G·t§òáŽÝ1ÞàÉAC;60*%!#'+17=G:]šªµ¼Á¾¹³§œtr€spomm€lkjheYA¡H¦óâÞˆÝÜÝßÖ?>83,&!€/$).5;F6w‰œªµ¼¾»³­¤™Ž„‚‚|{|{{xywuqnhV¦óâ‹ÞÝßáâ;4@91*$ € 1 "(.5=F1ŠŠ›«¹¾½·±«£œ–’Œ‹‹Š‰†‡†…‚€{wqy}¥ôåàˆÞ8ßâ!@82*$  "(/6@CM€¡²¸¾¾¸³ª§¢ Ÿ›š˜˜€— –•”’Ž‹‡…{£¥ôäŠàÞàâÕ>93+$ €#)08E9z{£·¼ÄÀ¹³°¬©¨¥¤¤£¤¤€£ ¢ ž›™–”‹¥W¤õæá†à Þàân,>6.(‚‚…$+3>HJv…˜­¾ÆÉ¿¹´³±±°€¯ °°¯­­¬ª¨¨¤ ›«†¤õæ‰á àâãÝ<92*" StY€&0:J@ƒy£»ÊÐÌÊÁÀ»»€º¹¹º¼º¹¸¹µ´²°­¨¸•¤õå‰á ààå¢?6.&€ÿüý‚ÿôìÿÇ€qÿáøÿîüÿ€öÿ•*;HE}e}—²ÈÖÛÜÞàäãÞàà‚Þáà€âÜÜÚùèˆä ãââ×$B;/%ª€ÿÛBÿýúÿ€ÃÿÿÓ/2~ÿÿûÿ×8EBtc{–°ÇÖÛÞáâáâäâáá€âãääààÝó¤úëæ„ä;ãââ×$A8.%èÿÿà†âBÿ÷ÿ5îÿÜé…Lÿþÿù8CAya{”¯ÅÔÝâãäãßßåˆãââàõ¤úë‡æ çäãâ×"A8-%€ÿj¨Óÿÿlÿÿ )ªt×€ÿ5D>{`x“¬ÅÖÝãäççãàâçˆäãá÷äúìç„æ äãâ×@7,$€ÿ€% ÿÿ~ÿÿ —ÿüÿ4A=}_y‘¬ÃÔÝã䀿ääæäˆæãúǤúì‰ç äã×?5+$€ÿ'$$¤ýÿrôÿ(0/°ÿüý2?;€_y‘«ÄÔÞä‚çæçæˆçäûȤûíè„ç7æäã×=5*$ðÿÿ˜46 äÛô9Íÿˆ+??üûýä0<>q_u«ÃÔÝäçæŒçèèæýǤûí‰èååØ<4*!Àÿòÿ„$LÇ׿Ҁêêq%0Óÿêÿ¶-:?d^vªÃÔÞäèçŽèæýǤþîé„è7çåå×<3)lÿäìÿãÀÉá˸ÂËÐÕž˜ÇÎëȧ¹ôÿëäÿi+6;h_sªÃÔÞäèçŒèééæýǤýîˆé7èçæØ<3(îàÙÖßâ϶½Ñ×ÜÞßãÚĸÃÞíóìåäáë*5:h_tŽªÃÖßåéè‹é€èäúŤÿïê„éèçæÙ:2(‚ðÉÊÀ²¯ÇÚØà€ãÞ×ÓÌ·¹ÈÑÜßÛö–)58f]tލÂÔßåéè‰éèèéèèäùĤþïˆê7éèçÜ:5)ÄÙ¹¯¯ÆÇ£Ëëæçèæà©­Å¸ºÊÔØéê &35q\p¨ÂÕßçêé‡ê ééèæååÝÖó¼¤ÿñì„êéççÚ6,ƒ§¼±Â¥|¹çƒåÔŒƒ¾¾ÂÌÛß‚ #kWn‹¥ÀÒÞçèé†ê€éèäãÓñÁݵ¤ÿñ‡ì9íëéæÛ\tvlaVSSV Çº¼®ÁÛÚÞßßÝÞÚ×ͬ¼ÆÇÇÓ°_wƒ–©±§ƒYQi„¢½ÒÝåêêíƒì íéêèèÛåÖͯ“³|¤ÿòíƒìêëè䨤áïôöôññîíÖ¿¸·¿ÆÉÑÕÓÐÉÁÁ¾ÁÇÉÊÔèéíðóîæÙ¸’a}ž¸ËÜãéêêƒì êëéåâÌÿž¥¡NVj0£ÿòˆí8êêàÀÞáåäâÞÚØÒ˹µ³¶ºÁÇËÌÍÌÉÆÀ¸µ¶¹½ÁÄÊËÏÔÞãáÙʽ°uw“±ÈØâéêì‚íêîåáÖÝÙþE „/2Gr ÿóí€îƒí9êëçžÅÒßâàÝ×ÒÎÇÁ¹³°¯±µ¹¾ÁÂÄÂÀ½¸³¯°¯²µ¹¾ÅÇÐÙÛ×Ïij¬žMŒ¢¾ÐÝçéì‚íéíÃÄÿÁ¼ÀDtF@ÌÌ]]¢ÿóí…î€í8ΗÀÊÑÖ×ÑÊÅ¿¹µ°­©©­°²¶¸¹º¹·µ°®©¨¨©ª­²¶ºÁÊÌÈÀ¸¯ž«?—µËÙäêîí€î€íÞ‰Œá©lU?LõïUHR¡ÿôî€ï‚îíëì¾±¤”¤¸¾»¶°¬©§¥¦¨¨ª­¯±¯®«©§¥¢¢¥¥¦¨­²¹·¬ž£™¡8y¬Ä×âêìí€îíîëëÃVƒ†[¾ÿW/‚g"2A< ÿôî…ïîíì¸x£Ž_QoŸ­¬¨¦¢¡¢¢£¥¦¨©ª©¨¦¥¢¡  žŸ ¡¥¨§ln‹›•‘ÒÿŸ7 #((+Ÿÿôí…ïîíëâa—V+K˜¥£¡¡ ¡¢£¥¦¦€¥£¢¡ Ÿž-ŸŸ¡¥€>R••—E\r¨ÁÕâêîîïïîïêï¼€–ÿ¾/{6#$" ! žÿõï€ð‚ïîîèæÄT—šŽ` G£¢¡ŸŸžŸ  ¡3 ŸŸžœœžŸ¡¦Š G…—–‘WBauªÃ×ãéíîïîïïéðWüÌpb   €3žÿõî…ðïïîæÝ¤f—›—m j«¢ Ÿžœ‚žœœ™€œžŸ¡¤¢.3Œš—ˆm%Xg~˜³ÊÛçíðïêñêYqn†tR&  $žÿøð€ò‚ðïïíåàÐw”™œv,‘¬£¢ žœœšš€œƒš*œœžŸ¢¤¯[…›–…NK/_m„Ÿ»ÐÞèîïððëïóÚ]fcaZH€8ÿÌ ÿ÷ï…òóðïëæ×5o’—žkC¯¬§¢ žœš™™š4œž £§²ˆuœ–x7)S@dqŽ©Â×äìððíðõÞu.PHVVB; 2Ó¥!ÿøò€óƒòCððëéÜ )!Y™™Li»¬©¥¡Ÿœ™šš™™ššœœž¢¥ª®¯.\ž“[7Sfw–²ÌØçó¸,h!1,:Y,422Ù†‚2mœÿùó†ôõôññÎ80%{[FÀ¾¾·¯ª¨¦.§¨©«°¸¸»§ZH $-7IDhz™¯ËâÏ:`H+/&[2*,%#mÿÈ‚0]™•Uœÿûô€õ…ôñò»7.$€;U5cÔÌÊ¿¸´³³±±³´¶ºÃËÇ¿94;"+4DDew’³Ãz$ :v(+5T'^!\Î a5œÿûô†õ öõó÷£5,# €QÚÉÇÄÃÃÄ(ÃÄÅËÏÖ^=  +3?N\{•b[\42WS((W/ „xM€I*ÿúô†õôõóö‚3*! A;¯ÔÇÇÆƒÇ*ÆÇÆ×y77@ '2HR %2?21q6£D5^)%K`Lglsx€V.J_¤ÿüõƒöOõöôóòö¸9/.% >^NE+56( $04B;!CQUb%'e=z€i4$*oBfkpyƒ“š›†3S¤ÿûõöõöôõôóðôN91,# Yf_UF-‰,.DS]ak8 5/01%;jK—˜Bl,>ckoz‰” ©±±®«¶‡¤2ÿþöøùùõõôøöëåêá0/0*  rokcWJFE>86689;<=?CQ\filK‚ Ox33REw¤™dC"]ilw…” ¯»ÃÉÍÌÅÍœ¤2ÿþöøö÷öùùô™II\pG;& …wvpgV@08HPTVPI?:BOZdihcP€"%;gM$#c;s5TTjlsƒŸ¯»ÈÑÙÞàßÚè°¤@ÿÿøùùöøùÈCLVTSPZ^Q0 F“††}Z/1::ENW^fe`MD+MK_bl##IT€%Sfms€ª¸ÇÒÛâéêîîéù½¤ ÿÿöú÷ûö@][UR€OR[cP?z˜—‘V,=FE=1(;SLVZ^acC*EXcN xRK$%kIdjo}Œš©·ÅÑÜäéðñõöôðÿǤ ÿþ÷ùûí\P_VQKF€CHGKQ_d¦¡¦fIquhZOG@97)RbRZcY(M=E[!œ^s'#X\dk{‰—¤³ÂÏØáêîôõö÷ööôÿʤXÿÿúþÓB\^TME@;98:=BFLVg­µ|]›‘~wmcZQH;3%n`R3AP==GOf£,K_+OY_l} ±½ËÖßçíðõõöøøúù÷ÿΤRÿÿý¸Hc\TJA920..0377!8l+07O?14L9A8R8a<[i{¡µÈÕßèîñõ÷ùúùû€úùÿΤ8ÿÿ¢Ig\TH?6/)$$%&*.38?DIC…Ëq¡µª©¡“‰~rf_RIC5_76B<')3Q'€5>FYpn‚š²Æ×ãëñôöùúùù‚úùÿϤNÿœYi\TI>2*# !%*/4;?<6kž½°³¦š“‘…thgS2S@T`"(9""&BF#*5DAqq…Ÿ¹Ïßëðõöúùù‚úûûúÿϤL™ii`XK?2*!"&+24:9'Á²§œ¤¤ œ‰y)B=\1OL=3.G &0;EUO…šºÒãîöùûú†ûúÿϤLxrb[MB4) #(,150!´–¥«¨£ŸšYC8^/aN0E6%!@"+5ATE—±ËÞìõùûú†ûúÿϤ ‹j]SE9,$  $(,0&#ˆ¥ ¼¼’“WdJPTb+7 € .8 '0;GTF¡ÀÕåñ÷ùú„ûýýûÿФM|eYK?3&   $()"•¯ÊâáxzEQ]FfT 6/( ;#,6CP6€›²Ëßîöúüû…ýûÿФ WfSF:-$ €=  ##:àÝȸ¡fvZh2W2Z0CjD)  ,0(2=HGE¡ÁÖçôùúû…ýûÿФMnXNB6*#  kħ¯¿sUc/^g& 3lJ)  5$-7EI5ƒ˜³ÊßîöùûƒýþþüÿФNbE=5+#  ˜¹ªµ£IUEe+%[?b> %/+3AF=PŽ Á×êõúþý„þüÿФº’`=.+# €<  O¹±©Äg8L#,g46"&^< *'%0:E?5ƒ—´Îãï÷úý„þüÿФÁ¶“nD% ‚  «©¯±­0F()415,JI -."*4A=9bŽ£ÂÙêõûþýƒþüÿФ¼¸³œ€Z0 €  ‰Ÿ£žÀcD:62&,R. €,-&/6:?<„˜¸ÑåñùûýþÿФ·±¶°¡‡lL% € iœ™œ™@í5"=::4/$=D‚('!))7>5~”¯Éßð÷ü„ÿþÿФ­©ª­¨ƒsdF# K“¡¤­àù:6<;84.)B/ €!##09:W‹ŸÁØëõûÿþ‚ÿþÿФ¢¡¡¤¡Ÿ•shZ9 '4{€Ž’’Æø+J3>?<83-18"  &,<;‚•·Ðäôúþþ‚ÿþÿФ–—˜˜–•‹}o^V4 7N€$edm¯îãi5<@@;83/2,   /0{Ž«Éßïùûþ‚ÿþÿФ8˜“‹ŽŒ•ƒkZN' JK-Pa’ÇâÿeoQ.CB@<83//$‚ $1jŠ¢ÀÙëöüÿþÿþÿФ”‘…†‰‡‰ËªvfTG  7>E:€eŸÏæÿ²+‰@4@CA=741+ „ /Sƒ›ºÕèôûÿþÿþÿФ“Žˆ|‚…s’¶‡pXIC% 1@87Eƒš¤ÄØüÁ.}mWJBC>943' ….?~’³ÏäôúþþÿþÿФ‰x}ej©•shWFC3!+<=AGQI[x0e’¡»¼'! €KeKKC=743 „  )5v‰©ÆÞïùûþÿþÿФ(„ŠŽˆ|rvx\]›™|t`WNE.:CIJAC^q}p~…„¡¹  kwTYSLD?842 ƒ  *7t‡¦ÃÝï÷üþÿþÿФ>}ŠvpspLyªŒse`Y;&PEBYu~‚‡’¯+ *YlYcb^VNF?73-  ,".58>AFKQY_hpw€„‹Ž‘ƒsq…€ /jv”¯ËãñúþþÿþÿФ8`gdqo†„…}lfpl|„|‡Š‚lP|œ‹¢?P"7;@DIOV\cjqw~ƒŠ‘’’‡yz;€€ 69jy—´ÑåóûþþÿþÿФ7RdbjhsŠƒƒ‚wff|™¢ˆs€‚nZ.2—‹œbL1(" X/(7AJU^fmrvz|€~}|~|g/ %+1:BDJO@9™¦¯¶ÂÈÉÊÉû³©š‡saVQMIFA;5-,2Px¬Õün©ñàŽÜÛÜÛÝÚX/KGA<730.ƒ*,,-/248=BIL0uœ¥±ºÂÄÈû´«Ÿ’€ohdecb`_][XRI<7Jä~¨òá݉Ü8ÛÜÛÞÑ%;H?;50*(##!  !#$&)+14;AJ:V˜ ¬º¾ÂÁ¾¹­£—ƒsjijkjedc€bcb_S@G·t§òáŽÝ1ÞàÉAC;60*%!#'+17=G:]šªµ¼Á¾¹³§œtr€spomm€lkjheYA¡H¦óâÞˆÝÜÝßÖ?>83,&!€/$).5;F6w‰œªµ¼¾»³­¤™Ž„‚‚|{|{{xywuqnhV¦óâ‹ÞÝßáâ;4@91*$ € 1 "(.5=F1ŠŠ›«¹¾½·±«£œ–’Œ‹‹Š‰†‡†…‚€{wqy}¥ôåàˆÞ8ßâ!@82*$  "(/6@CM€¡²¸¾¾¸³ª§¢ Ÿ›š˜˜€— –•”’Ž‹‡…{£¥ôäŠàÞàâÕ>93+$ €#)08E9z{£·¼ÄÀ¹³°¬©¨¥¤¤£¤¤€£ ¢ ž›™–”‹¥W¤õæá†à Þàân,>6.'‚‚…$+3>HJv…˜­¾ÆÉ¿¹´³±±°€¯ °°¯­­¬ª¨¨¤ š«†¤õæ‰á àâãÝ<92*" StY€&0:J@ƒy£»ÊÐÌÊÁÀ»»€º¹¹º¼º¹¸¹µ´²°­¨¸•¤õå‰á ààå¢?6.&€ÿüý‚ÿôìÿÇ€qÿáøÿîüÿ€öÿ•*;GE}e}—²ÈÖÛÜÞàäã€à‚Þáà€âÜÜÚùèˆä ãââ×#B;/%ª€ÿÛBŒÿýúÿ€ÃÿÿÓ/2~ÿÿûÿ×8EBtc{–°ÇÖÛÞáâáâäâáá€âãääààÝó¤úëæ„ä;ãââ×$A8.%èÿÿà†âBÿ÷ÿ5îÿÜé…Lÿþÿù8CAyaz”¯ÅÔÝâãäãßßåˆãââàõ¤úë‡æ çäãâ×"A8-%€ÿj¨Óÿÿlÿÿ )ªt×€ÿ5D>{`x“¬ÅÖÝãäççãàâçˆäãá÷äúìç„æ äãâ×@7,$€ÿ€% ÿÿ~ÿÿ —ÿüÿ4A=}_y‘¬ÃÔÝã䀿ääæäˆæãúǤúì‰ç äã×?5+$€ÿ'$$¤ýÿqôÿ(0/°ÿüý2?;€_y‘«ÄÔÞä‚çæçæˆçäûȤûíè„ç7æäã×=5*$ðÿÿ˜46 âÛø=Ìÿˆ+??üûýä0<>q_u«ÃÔÝäçæŒçèèæýǤûí‰èååÖ<4*!Àÿòÿ„$KÅÞÄÉ€Šíçq%0Óÿêÿ¶-:?d^vªÃÔÞäèçŽèæýǤþîé„è7çäåÈ"<3)lÿäìÿãÀÈäÏ”k_bj8S¾Öéǧ¹ôÿëäÿi+6;h_sªÃÔÞäèçŒèééæýǤýîˆé7èåæÊ";3(îàÙÖÞàÙ¬i\cpvuvaUÍßìóìåäáë*5:h_tŽªÃÖßåéè‹é€èäúŤÿïê„é7èåæÌ!92(‚ðÉÈÁ½…Wdu‚…†„~tbMh»ÎÏÛßÛö–)48f]tލÂÔßåéè‰éèèéèèäùĤþïˆê7éççÙ94(ÂØÂ°bFREs‘‚J>AL¢Ôרçè$24o\p¨ÂÕßçêé‡ê ééèæååÝÖó¼¤ÿñì„êéççÚ:1 ‚ª–A9,[‰ŒŒ‹ŒŠ„nIVXUcz~…Ž”Ž~dBea}ž¸ËÜãéêêƒì êëéåâÌÿž¥¡NVj0£ÿòˆí8êêÊ@qˆ‘‰{ul^K7,(,4?IPRRQMH>3,09BIQ\ags‡‹z\B2Fw“±ÈØâéêì‚íêîåáÖÝÙþE „/2Gr ÿóí€îƒí9êëâMn„Œˆ~sh^SG6)#!&+2:?BCA>7/'#$&,1:DNTf{„}jP3,*AŒ¢¾ÐÝçéì‚íéíÃÄÿÁ¼ÀDtF@ÌÌ]]¢ÿóí…îíëí K^nvreXMA6-%$'-1342/+#€#+2:I[e^O<*7—µËÙäêîí€î€íÞ‰Œá©lU?LõïUHR¡ÿôî€ï‚îíêì†74.@MI=1&  #%€&# ".ÒÿŸ7 #((+Ÿÿôí…ïîíëÜ"€%& *€%".\r¨ÁÕâêîîïïîïêï¼€–ÿ¾/{6#$" ! žÿõï€ð‚ïîîèæ¡)$€ .!€4 +'&*AauªÃ×ãéíîïîïïéðWüÌpb   €3žÿõî…ð ïïîåÝq',,€ 3   '2%-+%Xg~˜³ÊÛçíðïêñêYqn†tR&  $žÿøð€ò‚ðïïíåàÉ ++/#1 €  € + ";!1.&J2_m„Ÿ»ÐÞèîïððëïóÚ]fcaZH€8ÿÌ ÿ÷ï…òóðïëæÎ-+1?0" € 5 $;"521T?dqŽ©Â×äìððíðõÞs.PHVVB; 2Ó¥!ÿùò€óƒòCððëéÑ1-10L1%   )6C;5%7S1,8S8fv”±ÊÙåæòõ•`@0#+€“ô\ƒœÿúó€ô„òðîîÍ60€@: OJ8/$ '/7O*4$"-8M>fw–²ÌØçó¸`%.Y,422Ù†‚2mœÿùó†ô õôðñÀ70$€.]UUD0$ !#)5EGLF€ $-7IDhz™¯ËâÏ.[># T2*,%#mÿÈ‚0]™•Uœÿûô€õ…ôðò®6.$€wwmTE<:989;*CQUba3t™yd)i@fkpyƒ“š›†3S¤ÿûõöõöôõôóðôQ81,# Yf]X?‹+CT]ak8 2%#&1eA“•8g!6-&)KMU[^acC)EXdMtŒMDgHdjo}Œš©·ÅÑÜäéðñõöôðÿǤ ÿþ÷ùûí]P_VQKF€CHGKQ_d¦¤”I9im_SH?6/,8ZUZcY%M=E[šWnV\dk{‰—¤³ÂÏØáêîôõö÷ööôÿʤXÿÿúþÑ@\^TME@;98:=BFLVg°ª[K’ŠtkbXNG;-"O\S1>P==GOa "EZ#NY_l} ±½ËÖßçíðõõöøøúù÷ÿΤRÿÿý¸Hc\TJA920..0372*# !%*/4;?<7Vа ¤~{uqi\QN=+Q=Q^ (9""&CC#*5DAqq…Ÿ¹Ïßëðõöúùù‚úûûúÿϤL™ii`XK?2*!"&+24:9)®¡}„‡ƒ{pla ;:Y+ LI; 3.G &0;EUO…šºÒãîöùûú†ûúÿϤLxrb[MB4) #),151!˜t‚†€}|x=94\(^K,B4%!@"+5ATE—±ËÞìõùûú†ûúÿϤ ‹j]SE9,$  $(,0&!jzsw¤§jsFbFNP`&7 € .8 '0;GTF¡ÀÕåñ÷ùú„ûýýûÿФM|eYK?3&   $()q‘Äæáwdi BO[CbR5/( ;#,6CP6€›²Ëßîöúüû…ýûÿФ TgRF:-$ €=  ##7âßǹ›OaIf-T-X-CjE)  ,0(2=HGE¡ÁÖçôùúû…ýûÿФMgXNB6*#  k篿c5+#  ˜¹ª¶,9-b%Z=c> %/+3AF=PŽ Á×êõúþý„þüÿФ¨…W<.+# €<  Oº±©ÆT1'd+.!&^< *'%0:E?5ƒ˜´Îãï÷úý„þüÿФªŸa?%  ‚  «©¯²©*#!*7-JI -."*4A=9bŽ£ÂÙêõûþýƒþüÿФ ˜„nM* €  ‰Ÿ£œÃP :=52&,R. €-.&/6:?<„˜¸ÑåñùûýþÿФ•‘Ž‚lT; € iœ™œŸ”å=::4/$=D‚('!))7>5~”¯Éßð÷ü„ÿþÿФ…~|zr\MC/ J“¡¤®â÷9<;84.)B/ € "#09:W‹ŸÁØëõûÿþ‚ÿþÿФsnijedZK@92! €4{€Ž’Ãö(7=?<83-18"  &,<;‚•·Ðäôúþþ‚ÿþÿФe[WVRNKB3-&& 8:€$edm«ëÝ@7<@@;83/2,   /0{Ž«Éßïùûþ‚ÿþÿФ8WJAB@;:3L0 LC,O`ŽÃÝÿR@E2AB@<83//$‚ $1jŠ¢ÀÙëöüÿþÿþÿФJ@0/0-%@Ô…" 7>G'€b|›Êàÿ¤ ]=:ACA=741+ „ /Sƒ›ºÕèôûÿþÿþÿФA3)! •»:!$ 1@89?„— ¿Ñõ³RUNJDB>943' ….?~’³ÏäôúþþÿþÿФ:- F±†""!&€<C9J8j–¢³Ò±€€-=LGD=944"…  +=y¬ÉáðùþþÿþÿФ(4)€©N>=AFRHYt+^††•¬¬ ‚&WMJC=743 „  )5v‰©ÆÞïùûþÿþÿФ"0! 1¦‰! 4EIJ:7Nanbous¦€ƒB_WXSLD?842 ƒ  *7t‡¦ÃÝï÷üþÿþÿФ!. q³WU@6Galnlnlns}š„5X_]cb^VNF?73-  ,NY€W%RZfmnkc[RH?5.&  29r„£ÂÛîöüþÿþÿФQ*  d»g |‹‰‰†„~~f073-&&*0;IYdntvurmcXL@1&   %-=s…¤ÂÜí÷üþÿþÿФ?( ·O¡‹ŒŠˆ…ƒ€Œv "$(-08ALWcmv|€~ztkaQ?. € !.Isˆ¦ÃÝï÷ûþÿþÿФ:& WÒj˜ŽŠ‡†ƒ‡‚%-135:?EMW`ks|…††…‚}ugQD€#/St‰¨ÆÞðùûþÿþÿФ9)  r(`”€~}€$"0479=BGNV`iqx€…ŠŽŒ‡sdJ‚$&"dvŽ«ÊâðùþþÿþÿФ , €*{zxxˆ#.48>AFKQY_hpw€„‹Ž‘ƒsq…€ /jv”¯ËãñúþþÿþÿФ8& Yro‡%9'6;@DIPV\cjqw~ƒŠ‘’’‡yz;€€ 69jy—´ÑåóûþþÿþÿФ7   ^e'|oH*30  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþýýýýýýýýýýýýüüüüüüüüüýÿÿ÷#%Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýÿ¿(.”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûÿÆ",7›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÇ#,8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÆ".:žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÆ".< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÅ".< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÄ!.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÄ!.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÃ!.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÁ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÀ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÀ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¿.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¾.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¾.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ½.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¼.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ».< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ».< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿº.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ¹.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¸.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ·.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿµ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ§ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ… .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿùN.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÅ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿ].< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¦ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÖ'.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿä: .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿëK( .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿñY2 .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöd8$.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúj;&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûn>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüo?'.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüp@(.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüqB).< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüuF. .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü~N4.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ”YA' .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇhP5" .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü”^M1 .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó‰U?* .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿô…M;&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿèeI5# .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿ£YE/ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïtR=( .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ¥_K3  .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÂkX=( .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÞu`G0.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûhQ8# .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÊoZ?) .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü’_H0.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþœcN5! .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ºôÿÿ¬dQ8$ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóþÿµ¶ÿ÷ˆ_M7$ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉêÿȃ ‹cVD2! .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ¬Ísi]SF8).< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿǘ†saVJ?5* .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ§Šw`M@5,$ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýšxbL:-# .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýgQ:( .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüX@+ .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüyL5  .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüsE. .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüpA) .< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüo@'.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüo?'.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.< ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿün>&.:žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿük<&,8œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüh:%*1›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüe5##1vÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúôóòðîíëëêêêêêêéèåãÏU10CPgv€†‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ‡„sbM?*  #5KZdmnqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqnkbWF1#0ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFBIDATxÚbüÿÿ?-ѨiégÒÔVÚú€‰™™¶022ñHµ`ÔÊ-`f"/£±à“ÔÔ5âaec·äääbàæå¥®:fö|BKyxù¥¹yø¶200L§ŠZz&r¼ü[Ä$¤yDÄ$¸yø~ýüñšj>`ae5àááãc“``gçüøñûnªE2#ÓnF&æéŒ Œgÿýý7÷Çï&“;*¯‘ ÿÿÿ' û†Ä§Ù»ù b“ÓÖ7Ô10 Å&ÇB¬CÞ½}¥ÄÈÈx×ÖÙ{õÿÿ gÿÿÿËðÿ?ƒ ##£1¿ °ñ¿;±ó¤Tú¶ÎÞ.œ\<嬬¬ÆŒLL‚ ïöüû÷¯bÛº%÷(¶¼ƒbÙØÙ™˜ß¯[:ë=ÞŠŠÖÍÀ‘²ˆ%‰¦XÓIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/timesignature.png0000644000175000017500000000640711273045225025046 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF$IDATxÚÔÕ¿kSQðsÿz/ÉKÒTD ¢£ƒB@‚Ò’Ö(‚R¥Ú. Z)ŠŠ DqpP,‚Ž¢®7ÿµ¢’_//ï¾÷œâš@žPÏt†{îg8÷ËEI’À¿,´a€={Ç—µ6ËÔ :¶Ýlìþðîíç~stÀËñÈèæ±œWt1ÆÐ¨ÿ^ù…¿ƒÌhã”r^aÆ+!| yé·›«°¿ß,0N¦¬ër.0Æ^ ©^iãzƒÌö*Se¥ôc„ ÁykÃÓ”2%•öSŒ›=®´1pĆÝ”6¸zð „l‹ãøM§ã »Á=´S BÈ1ÆÅÍ¡—üâù£Ã½þÔ™Åíã*¡(c cìv*¯¨W­Fý¤”j-ŽãµŽßæ6 /À…T‚V™˜ò¼BId½¼¥”á‡wW~¤²ä¿1^À¯GÖþl5ê_'kÓ[RÊ•*Íå‹[óÅQpÜ,J/ÅqdR¤6%7“›1ŽBª+”±uBÈ“Ô㸔6œRvRúIõL§ì«ÖÆ•2÷àË­K׬ OPJAi¤“d'3+•ÆI³ó W‹À„T •ᓵ鑡„qEv5üšív/#„wp!@±‰1¶˜F’ç{ýܹ¥]„£”q`\pÆÅÓÔrÐlÔçüvë[§ÝztüQdÏþ?ò†þ š1¯!¬¦Ú.IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/track_add.png0000644000175000017500000000722511273045225024101 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF²IDATxÚ´–ÏnUÆ÷ÏÌØJ%MHªXÈ¡v„T*H6EB ±…%¯/Ð`Å; ñ H,ú]€Ä.À"QZÚ:qÒÈ!$±±gæÎ½—E2ƒ»,@½ÒhFs5ßw¾s¾sîï=or ï=Bµ··÷¤Ñh|ìœcœT”’ÓÓSz½Zk„S@Ææçç©×ëýÔjµ>õÞ[}³_ ‚ V­V_‰Öc RÊ™ûÖZ¤”DQD†5 ÄÊóÜü›Ô~¿O·Û%Š¢ò]¡Ô{O–e8çØØØ MS(€‚眿¹OK)Y\\¤Ñh ”*…xïñÞãœcaaak‚ Óé µ&ÏóéB AÜYZBI–õz}¦Úñ–Ãá~¿?“@)En2ž½8ÄZKó·YZºC½^ÇZ; ¨õd튇^¯GEXk'"ÀîÉ+v3›íqÿ½àý”r£$h6›lnnN(ÐJQ©FT£ O÷wyÚýëa{ëï° Bܨ3øj9aã’`ee…µµµ[Ét<ûãR þ:¿ÀØ\^öyypH2Jh5›D•*… ¥”³k$ Î9²,Cˆ¢ ¿îüÆ·ß?fii…(ÔÔæç@À?’>yÎùŸ§<úò3>|ø°tßíF·)Y–aL‰BŠ·æ<Ò]âãœ[F ð£3"¥Yž‡PkrcÊï¼÷“i·Vq !0ưÙjñÍ£¯ðÎqÐ~Îw?üBn=_ñÍÍw‘B0W[$7€'pΕR‡Ã!íöƒ8ÁK…õ’a’3L  B1ˆS^¶èõz!pÎa­hÖ)EƺÝ.Zk¢(ââòŸöð¹åü¢Ïáái–‘¦)QQ«ÕfϰY)*fK·Û% Ãë |þÉ}ð!$¯NNpΑ¦)«««×vѤ3 ¬µh­©×ëh­Ëº¬Ý½ @žç(¥pÎaŒ¡Z­2ʦ›YäÂIÖZ¬µT«U¶¶¶PJÑn·I’­5ÖZ*• ÷îÝ+‡]žçìïï—MˆëU: çççŒF#”RåÜ___/›JAÇäyN¤i*¦‚ X~ÝYÇ1ƒÁ T0ëT‹ã˜,ËŠƒiù6ßÝÝ}|uuµ¦i×£EÜÌšN§3‘"€‰¡x||ŒµV„a¨‡ÃáN‰q#±¬µñÞøËàÌ{Ÿoý¬ȼ÷N¼éß–¿ɪ= üS/ÓIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/track_remove.png0000644000175000017500000000701611273045225024644 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF+IDATxÚ´–»nãV†¿s!)Á–ׯvÁBÞÈîÆUŠ ¯‘gH‘GÈ ì;äR¤L‘ÞI n6d‘í8+Ùºç2),2¢D§Yì "Î|óÏ?gH%"|Î¥D¥”¹¼¼ü¥ßïcdª”BkÍÝÝãñk-J©@Î9¶··É󜛛›_¿‘`—Ï;I’ôºÝî«™XkqΡµn}B@kM–e¤iÚ:À´ï½û?©“É„ÑhD–eõ•R¡,KbŒQ… @ Æ(ËûFp­5»»»ôûý†¥"‚ˆcdgg§«‡XkñÞo¥ÖZ¶¶¶ê`N‡<Ï[Õ®zXf³“ɤ°¾¼÷µ¡!„f@k›ÞU?Æã1Y–BhdþÀ{ˆl´Ö5`0prrÒP`Œ!ËRŒRÀ°(c”R­q+{bŒÄjÀþþ>‡‡‡kÅŒ|øð'!^ö¨ªÈ„ ø0ä‹wïÈ:Þ‡ZA«‹Å‚#eY¢dY‡ß~ÿƒ÷?þÌ›Ý}ÖÛ_þùûï¾ý†³³3btµ‚V@Ü9·ÌÄ`ŒFùø×³F1"!`­%_ï‘F™íjkU—R ç'Ç'¼ÿá{Šb¾a¸ˆ¦¶vÞPe£=[=¨ú;ƈ1†ÙlÆýý=Y–¢µA)Y1Z@`^Î=<²··G¯×#„@¡qX7T8çF¯·Õ‘e½^¯}†µ•¨Ú8HÓcÌÆÆÊ̲,988ÀÓzH[ai^žçXkkÉ«³ÇZ‹ˆàœ£Ûí2ŸÏëC×jr•UUÇn·Ëéé)Æ®¯¯Y,c!`Œa0Ô@ï=WWWub›õ²êzÇ)Š‚$Ix||d>Ÿ×­5yž×‡J)Åt:Å{O’$E¡6I’¼}m¸M§Sžžž–=ZŸN§”eY½˜Þ®äâââ§ççç/‹¢ð/}øRsc ÃáÅbQÎÏÏCñöö–‚JÓÔÎf³ó:ÆRbØz€þÄ÷|ž€YT ¤ë¦Âò@)"Q}îÏ–¶rGIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport.png0000644000175000017500000000646711273045225024230 0ustar julianjulian‰PNG  IHDRàw=ø pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFTIDATxÚ´•¿nA‡¿Ý»Ä±MŒ"…? PÐD‚(yÄsÐPÑðT<ÏÁ ¤£LÄŽ"$–±Ä±}·3Cqvsg”ÈòJ>¬Ûýæ7³óofÌóçÌŒy®xüòîý‡W+««ÏMf:ïèvÚ›oß¼þ8¸³~ÿÅúúƒ—"a&€÷žæÑa˜¨HOTSfªˆÈY.Ef†©Á¬ÀL)U~"§Îá¼GEGÛ¯¹tÆ@uàœ§wzJ·ÓâöÝ{DQ|MF}±´HˆB@U'¢7Œ[+7è·HÔS]¾™ý?IJÇâp„4äIš2&Y.-‘ÀÆÆCjµzƒýƒß°Pa©TÉ00—IšôÎúý\URÒ4P*-ñèÑcÖÖÖ¨76ð‹â…Å‘;ßÛïò€Nçõe¼÷xïpÎe÷E‚¤U¡º\ãÉÓg´šGl×ëüj¶‰+˜*j†ªrr|š’$¹(X¦šØ)©Bˆ(Î)>r”ÊUˆª ’..ôÅ“©Ö)·(çK£¼ŽËEžápÀÎöO¾4~ÐëYˆã‰ô0µÔ°K7(û0£xïA•ï{ûl}Û¥Õ>!Šqä1•‚n.RhQW:hÿéðugŸÝ½ƒLIì³TLéz+rÓs«øg…Ÿ·vHň#Ÿ‹ð¬͆±ªÈ;®:;¦xÿ=À®ex T”lØlVê*€$–C·‹èl'ò1&ÃrÞ*zÝOjݶ„qLäÜæy÷Ì{èÏðwiïÁy·Ý÷IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_first_1.png0000644000175000017500000001040111273045225025636 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚìX[Œ]eþþë¾ï}Ι™B”‚FŒÆøÖ«­L¡-ƶFR/‘–r«…jkÐVã¥`Œ‚€FÑTk0ø"âƒ&ø`mH©š¨ÑW}étΙ3ç~öÞÿ͇±Ó™éœaú`R“YogŸ|kû[ë[ÿÚ›8çpµ¹IQ\…AÖË·ÞSÿK¥6mžô ¥ÌYkÎýC¾Ö$›6ßLe7:k'Œ1¯ýåõ3zm¸IB(}·³Fž;{úÜŠJaübŽ ŒO½gë­ÁZ¿wr»ŒâlK§SAZJ­÷¾m;¼(NwÆqú“ Œw-þ/þ'©áB@+eý7®ì¶Ûw_“UÇöIé=H®/ŠâŸý.Ìj˜Íï¿Q´±RHqŸs+Šá¯G’ ÂBxPª€Öjdâ-·ìð‚0¹©:6~$г]BJb­A¯Û¡ª,Fâ¶~àŽ0­ÔnIÒìh'Û„ÐJ¡×m“‘¤„ôáy@8¬˜xòö]×fÕñ»“´r8Í*7Dq Æ8Šb£µë ±²ªÛ÷ÜP©ïOÒʃIVˆ¢„RäÔ*1’c Œq0¦A[Þ2ŒâMÕÚÄÑ4«îN+U§ø~k-!àB‚1N–ªº3ˆâdKmlâ±4«~0ɪˆÓ žçÃçø²á—û‘€ F/õÔäm¾¦R¿+I³‡Ó¬úŽ$«"Ša ÎTY È‡ ”YƘ]Ôso©ÔÆ?‘f•û“¬¶1M+ˆâ~‚1޲ÈÁ‡PJͪ¤!`œAx~;öܳµ:¶á`’UîL³*“l>q@ €µŒqp!ÈË¿õÀÑë³jm/câ‘0Š7&iQ’"#Hé J¬1 X¨´IŠR .$8çoöüà„sn2 ÂQœÀæÝÉ¡„PÊ „DFoð”µöCRJ釢Eê0z ·,ت¤„ðƒ`3cüfJ¸ðýÒó!„\0ÀBbBæqÒCÅÛ„‚P!$¹sÎY­QÅ¿KU|•€¼Ê…xÔ÷ƒw9çV.û*=µD)k-”R ú²ÓjÎ=qüà‹s³}í¹Ùï÷º¼È‡ÐZÁY{Iç`ŒRƒ®÷ø±‡/œ8öÐss³õýíVó…A¿ëŠb­–áVQê2RZ•ȇ}tÚsžý汿ÏÖ§·šõöÜ_‡ýʲX˜ÆóJ)Ub8à“ðÌ_<;[Ÿ><7[ÿL·Óú×p؇RånÍKÞÅ2¨²ÀpÐ_¸þãgo5fÎÿ¼Ù˜¹§Ýjžì÷:&ÏÐJÁ k-Œ6(‹ÜzÝ…;þèéoÌ4êÓÏ53{;­æ¯ú½.Š"ŸÇY wi<ÙU'º`ŒA¹ì´?5õ¤ð·ý‡Ž}¶,‹?ÆIö…0Ô7r! µ†1Zk”e±¤?ûá·5€×<ú¥û˲x5Véç‚0¾–q6RµËÝçæ]c­]QÚçŸ91׸pþd³qao»Õ<Õïvu™a´†³†³ò:5õݯ×3ÓO7ggîj·›/Ï«6ߣÖÚÑî3ÆÀ c ¬½«šúŽðçû9~0ŠÓ3”±ÇÊ"«R%³ÆŒH?ýÁ· §þò?¢(ÙG9Rù„Vj´ûT™³"ϡʜ­¶ä-ê™NýÂùç[³õv;íW†ÃPª|ÕuꩯÕ3ÓO¶š;»ÖëE>ôF¾8ìØý1Ÿ Á´Ræ·/½_ÉÔܵ÷Þëʲ¸nÐëüéô+¿)׈!ÞVÃìw/ýâÜúËè:©uRë¤þ_¾ºügŽÚ¼nsÂIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_first_2.png0000644000175000017500000001040111273045225025637 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚìX[Œ]eþþë¾ï}Ι™B”‚FŒÆøÖ«­L¡-ƶFR/‘–r«…jkÐVã¥`Œ‚€FÑTk0ø"âƒ&ø`mH©š¨ÑW}étΙ3ç~öÞÿ͇±Ó™éœaú`R“YogŸ|kû[ë[ÿÚ›8çpµ¹IQ\…AÖË·ÞSÿK¥6mžô ¥ÌYkÎýC¾Ö$›6ßLe7:k'Œ1¯ýåõ3zm¸IB(}·³Fž;{úÜŠJaübŽ ŒO½gë­ÁZ¿wr»ŒâlK§SAZJ­÷¾m;¼(NwÆqú“ Œw-þ/þ'©áB@+eý7®ì¶Ûw_“UÇöIé=H®/ŠâŸý.Ìj˜Íï¿Q´±RHqŸs+Šá¯G’ ÂBxPª€Öjdâ-·ìð‚0¹©:6~$г]BJb­A¯Û¡ª,Fâ¶~àŽ0­ÔnIÒìh'Û„ÐJ¡×m“‘¤„ôáy@8¬˜xòö]×fÕñ»“´r8Í*7Dq Æ8Šb£µë ±²ªÛ÷ÜP©ïOÒʃIVˆ¢„RäÔ*1’c Œq0¦A[Þ2ŒâMÕÚÄÑ4«îN+U§ø~k-!àB‚1N–ªº3ˆâdKmlâ±4«~0ɪˆÓ žçÃçø²á—û‘€ F/õÔäm¾¦R¿+I³‡Ó¬úŽ$«"Ša ÎTY È‡ ”YƘ]Ôso©ÔÆ?‘f•û“¬¶1M+ˆâ~‚1޲ÈÁ‡PJͪ¤!`œAx~;öܳµ:¶á`’UîL³*“l>q@ €µŒqp!ÈË¿õÀÑë³jm/câ‘0Š7&iQ’"#Hé J¬1 X¨´IŠR .$8çoöüà„sn2 ÂQœÀæÝÉ¡„PÊ „DFoð”µöCRJ釢Eê0z ·,ت¤„ðƒ`3cüfJ¸ðýÒó!„\0ÀBbBæqÒCÅÛ„‚P!$¹sÎY­QÅ¿KU|•€¼Ê…xÔ÷ƒw9çV.û*=µD)k-”R ú²ÓjÎ=qüà‹s³}í¹Ùï÷º¼È‡ÐZÁY{Iç`ŒRƒ®÷ø±‡/œ8öÐss³õýíVó…A¿ëŠb­–áVQê2RZ•ȇ}tÚsžý汿ÏÖ§·šõöÜ_‡ýʲX˜ÆóJ)Ub8à“ðÌ_<;[Ÿ><7[ÿL·Óú×p؇RånÍKÞÅ2¨²ÀpÐ_¸þãgo5fÎÿ¼Ù˜¹§Ýjžì÷:&ÏÐJÁ k-Œ6(‹ÜzÝ…;þèéoÌ4êÓÏ53{;­æ¯ú½.Š"ŸÇY wi<ÙU'º`ŒA¹ì´?5õ¤ð·ý‡Ž}¶,‹?ÆIö…0Ô7r! µ†1Zk”e±¤?ûá·5€×<ú¥û˲x5Véç‚0¾–q6RµËÝçæ]c­]QÚçŸ91׸pþd³qao»Õ<Õïvu™a´†³†³ò:5õݯ×3ÓO7ggîj·›/Ï«6ߣÖÚÑî3ÆÀ c ¬½«šúŽðçû9~0ŠÓ3”±ÇÊ"«R%³ÆŒH?ýÁ· §þò?¢(ÙG9Rù„Vj´ûT™³"ϡʜ­¶ä-ê™NýÂùç[³õv;íW†ÃPª|ÕuꩯÕ3ÓO¶š;»ÖëE>ôF¾8ìØý1Ÿ Á´Ræ·/½_ÉÔܵ÷Þëʲ¸nÐëüéô+¿)׈!ÞVÃìw/ýâÜúËè:©uRë¤þ_¾ºügŽÚ¼nsÂIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_first_1.png0000644000175000017500000000614511273045225026660 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF‚IDATxÚì”MKQ†_qŒ¼3wṵ̈ö-2¢…ô±ˆ> …!´ ÂU‹ZD›‚hÑoè´õµˆ²ÔÔÑ&gN‹²Di w8pïyïyàÞsîña^ ȆàÿOMÏ&]ƒgæ[ëDj~ù¡SOÍ/%˜¬œòE'Aæ*ÀÊú6Eb¯ &ÚÚÂò…cAüý¬¨´µ(OÞ ¢˜l÷ûêæž‰Æïy0œ´, ®ÁLæ4`w<NÀLJ ˆÆâwŠJ3™Ã0jîÁ& ÁH,«ð, ͆ܩvOd®Â'I°¬–{°ä¡“` Ló €ÉÜôùý`Lùª¼Wpßn˜d“nÛ6ˆ­~¦‘mÿÆúÌGpÓ¨ÓÕEN«VJºQ«¢ñýž7—'Z¥ü¢F ýŠç®×Þôóc­øü¨—_‹?ÚmþL+ŸôF½êü{ÚWêöL¥s¿wp”ï>³›éµÝ3œÇCp}éÁ·d£+IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_first_2.png0000644000175000017500000000614511273045225026661 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF‚IDATxÚì”MKQ†_qŒ¼3wṵ̈ö-2¢…ô±ˆ> …!´ ÂU‹ZD›‚hÑoè´õµˆ²ÔÔÑ&gN‹²Di w8pïyïyàÞsîña^ ȆàÿOMÏ&]ƒgæ[ëDj~ù¡SOÍ/%˜¬œòE'Aæ*ÀÊú6Eb¯ &ÚÚÂò…cAüý¬¨´µ(OÞ ¢˜l÷ûêæž‰Æïy0œ´, ®ÁLæ4`w<NÀLJ ˆÆâwŠJ3™Ã0jîÁ& ÁH,«ð, ͆ܩvOd®Â'I°¬–{°ä¡“` Ló €ÉÜôùý`Lùª¼Wpßn˜d“nÛ6ˆ­~¦‘mÿÆúÌGpÓ¨ÓÕEN«VJºQ«¢ñýž7—'Z¥ü¢F ýŠç®×Þôóc­øü¨—_‹?ÚmþL+ŸôF½êü{ÚWêöL¥s¿wp”ï>³›éµÝ3œÇCp}éÁ·d£+IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_last_1.png0000644000175000017500000000614011273045225026467 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF}IDATxÚì”;OÂ`†ßRè{)!ì’€!8 Ñ/ƒQI0'\LµqqÀ™ÀÊÿ1Žro‹\ÚÏ ‚b:°ñ&ßòœ|OrÞáP„¬"¬(kñÿâÍ­íäJᝑÎîÆçY:›ÿLer3–Êä&¶Å¢$ÇÅÜØÉø§,ŽÆEInìžúÀëÛâ`HF$–HJáh}ÿ¸È€$G‰%’‘Dýäâšñú–‹Ë¾@‚à/¸ ½N«àJ”d¸\ ºífÍÐ5ûb–åà Á n°œP¾½W>¢Ž@Ó4h§³LQ”i[ìpÐ`Y,Ë…ñp8â8/€aXŒÇ#èýžýŽ ! „À²,ËR+êƒB0ψJ€‘m±iš0 ÝNS}{ºS``h0´>úݶúúx«|ºýŽz–9Q«ïÏÊ”uZ_ .µZQеåUÌV^|祛—EV¼üÍŽÎJÝeÿ©õ=^‹ÿäg/M¹Èøó.ZIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_last_2.png0000644000175000017500000000615111273045225026472 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF†IDATxÚì”;OÂP†ßRèi+—RJA³ƒ!‘Äè Dc¼ F%qÀ`\\œtr1ÕÆÅAg6þ+ÿÇ8ŠRi‹\Úã„ñv;°ñ%ßò|ùž“¼9çp”RŒ£¸‰xìbPJÿì™ÙR‘5ûO‡XFcñfia9ÿ••ÊOsóKŸln~iÈÚgŠUMÏ«)½¹X^OŒX*Í«šÞ\ÙØI@,¡ÐÀâdJG&W(jéìÃêVEMÏ"“+3Ó…‡íý#!g‹Ã¬A\IB–£ä©µ·öKÀ¡ªéˆDX³^[ ×±ƒ‹ W’ä)Q®œŠªA”dð<>®qç‡B<‘@ˆp½^_eˆ’ A  úp:oÁ3]ß÷A}ß¼3Ï Š¯Œšè{ž×µaµ[æíå©]׆kwб^Í›‹ãÝu‚gÜu:ð½¡Y¿¿2F¬ýò >1ëw†ŽÍŽ‚ùröªÇ×?Yåà;ÛÜ­Z¬ýÉï6ÿ®X[o½èIÚIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_next_1.png0000644000175000017500000000632011273045225026502 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFíIDATxÚìÕ¿kAðïÌîìïÝûÁÅÓD±µˆJ4‘‡H Q¢……­ŠiDNA1  ƒÿÁÊF°°ò?Aì wnöööövÝÝy ŠÜ «\#¾úû>¼æ1Œˆ0â˜Rý#ðác­­ù…Ö¡ß5Î/´.]\ŠKÁõFóâ®Ý³¯—Ož¾~äøRc\Æ«ÔDµÖ0KÁ3ÍÙxnßúÜþƒw›{ö¾8±|êܯÓ¶Év¼‰'RÇNS­³ZýÛ ®WYt\ïY{eõ|koß¼úšÐ t½¬i:¯]7`Z6l×3m·rÁïn·Û+«UÓžÚ¶sÆÊÁŒŠ¢Â0,¡C7LX–Çõfú¿AR¶çQ‘çå````œCå–â@Ótè¦ ×«"˲3i2B4è—‡LÏ (*8WÀ¹!täÙŠ¢p”&#믄ˆ@RBʲÈ?E~¤ìèÏ7ˆP9’$F?ð_öºŸÎÞ¼zi= ü0M’òWA HY Ï2Œâa7ìïÜö{Û›O6î  Øé1)©Lö”Ñ |ø½ï­½û9‡B+§éÈ„ÁG’²³~ëÊæ¸LQäP…(‡ÿ(M’[￟Ԙg™É¹2ù5ýÿA¦­¾†j}ô5IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_next_2.png0000644000175000017500000000632011273045225026503 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFíIDATxÚìÕ¿kAðïÌîìïÝûÁÅÓD±µˆJ4‘‡H Q¢……­ŠiDNA1  ƒÿÁÊF°°ò?Aì wnöööövÝÝy ŠÜ «\#¾úû>¼æ1Œˆ0â˜Rý#ðác­­ù…Ö¡ß5Î/´.]\ŠKÁõFóâ®Ý³¯—Ož¾~äøRc\Æ«ÔDµÖ0KÁ3ÍÙxnßúÜþƒw›{ö¾8±|êܯÓ¶Év¼‰'RÇNS­³ZýÛ ®WYt\ïY{eõ|koß¼úšÐ t½¬i:¯]7`Z6l×3m·rÁïn·Û+«UÓžÚ¶sÆÊÁŒŠ¢Â0,¡C7LX–Çõfú¿AR¶çQ‘çå````œCå–â@Ótè¦ ×«"˲3i2B4è—‡LÏ (*8WÀ¹!täÙŠ¢p”&#믄ˆ@RBʲÈ?E~¤ìèÏ7ˆP9’$F?ð_öºŸÎÞ¼zi= ü0M’òWA HY Ï2Œâa7ìïÜö{Û›O6î  Øé1)©Lö”Ñ |ø½ï­½û9‡B+§éÈ„ÁG’²³~ëÊæ¸LQäP…(‡ÿ(M’[￟Ԙg™É¹2ù5ýÿA¦­¾†j}ô5IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_pause.png0000644000175000017500000000570711273045225026431 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFäIDATxÚ앱nÂ0†W ålœ mJOÒ©#}^V&^ƒ• JÛH »ŽUkÂ!¤ü£ýÝ'Ÿt'+AyBKyß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF/IDATxÚÔ•?haÆŸï’ËýÏÅ–65GŒ­NBC­b*…\ ŵ.v*-.Š¥u©6©.\Aœœ´ŠZ¡ 7AÜ„ú'—»ä’Kî’û¤¢Ñ%×vð…wy‡ß÷|Ïû~ïG(¥Ø‰`°Cñøàááǃ‡†´­‚I»'sã”aˆ]·íùJÙX,¬¿t¶Eq4Ö‹>-%$’{¯Çâ‰÷éã£?à`{At!Ò(…¬¨û‹røéHvìAÙ,M¿][Ýð fCd9 ŽÀ $% 9¬žÑ¿}É ä®Xs©°þªÕ± à  ‚D¨»ºű[KAKí“ÉþÛ±ÞDáȱÑtÇŠu•ƒ,$IA(ÄDH²YQH²²–ÉŽ­” ýâ»7ÏõŽç˜&@ˆã¡„#èŽö žHBÛ3-Ù?ÑÓ§}:š9u®#Åÿ:€D°l/@eð‚¨²,»{ÂôÌIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_play_2.png0000644000175000017500000000642211273045225026475 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF/IDATxÚÔ•?haÆŸï’ËýÏÅ–65GŒ­NBC­b*…\ ŵ.v*-.Š¥u©6©.\Aœœ´ŠZ¡ 7AÜ„ú'—»ä’Kî’û¤¢Ñ%×vð…wy‡ß÷|Ïû~ïG(¥Ø‰`°Cñøàááǃ‡†´­‚I»'sã”aˆ]·íùJÙX,¬¿t¶Eq4Ö‹>-%$’{¯Çâ‰÷éã£?à`{At!Ò(…¬¨û‹røéHvìAÙ,M¿][Ýð fCd9 ŽÀ $% 9¬žÑ¿}É ä®Xs©°þªÕ± à  ‚D¨»ºű[KAKí“ÉþÛ±ÞDáȱÑtÇŠu•ƒ,$IA(ÄDH²YQH²²–ÉŽ­” ýâ»7ÏõŽç˜&@ˆã¡„#èŽö žHBÛ3-Ù?ÑÓ§}:š9u®#Åÿ:€D°l/@eð‚¨²,»{ÂôÌIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_previous_1.png0000644000175000017500000000633211273045225027403 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF÷IDATxÚì•ËkQÆ¿;™›;3™L’qšØR Ý»¨J´b¨P„îŒ E(®TT|‚R\q¥ÿ÷îý+܈TÚÔÆ$M›É<îÃ…ÒM3%³ÈF<»sÎ=?>îý8—(¥0ŽÐ0¦øGÀ§çü¹jíÆQƒsÕÚ‰“gj“úú°b±ä™qÓa½Sg¼¼S¸^>>µ*„p\œ³„QpÈ.ç.,5*“Ó÷JÇÊóŒ1 ¾ŸJ1e JɃ¼z~qÖqŠ/§gfë®W1‹®è´[$X#4Ëü¥ú›GÑòäÔÌCw¢2áze8…¬œ0 ÐßßC:ÅYC×­œ}‰hZ½PtQ,yÈ内L&Î9A:03LØùÂUf˜ ”²ó°,:¥Ð´ €€i·áŠi¹¼ãÛ¶cê4K3 S òWâ(k`¨””Ï„à«Rð_R ()‘f¯ ‡A€^·Ý{|gy­µÓ¼¼ÛmBð‘á àº?Vzóôî—ÍoÖÏæ­ýÞîNR@A¥ Îá÷ûùûõý×n®777jvëÓÀïKÇP*ùïX~¨þöÕƒ¯Ïï¯4ZÛ[+{½î÷0©ÀqDZ™4´öäö‡í­{Ýö»¤3äÿ2vðï§ÃÀØt„QIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_previous_2.png0000644000175000017500000000633211273045225027404 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF÷IDATxÚì•ËkQÆ¿;™›;3™L’qšØR Ý»¨J´b¨P„îŒ E(®TT|‚R\q¥ÿ÷îý+܈TÚÔÆ$M›É<îÃ…ÒM3%³ÈF<»sÎ=?>îý8—(¥0ŽÐ0¦øGÀ§çü¹jíÆQƒsÕÚ‰“gj“úú°b±ä™qÓa½Sg¼¼S¸^>>µ*„p\œ³„QpÈ.ç.,5*“Ó÷JÇÊóŒ1 ¾ŸJ1e JɃ¼z~qÖqŠ/§gfë®W1‹®è´[$X#4Ëü¥ú›GÑòäÔÌCw¢2áze8…¬œ0 ÐßßC:ÅYC×­œ}‰hZ½PtQ,yÈ内L&Î9A:03LØùÂUf˜ ”²ó°,:¥Ð´ €€i·áŠi¹¼ãÛ¶cê4K3 S òWâ(k`¨””Ï„à«Rð_R ()‘f¯ ‡A€^·Ý{|gy­µÓ¼¼ÛmBð‘á àº?Vzóôî—ÍoÖÏæ­ýÞîNR@A¥ Îá÷ûùûõý×n®777jvëÓÀïKÇP*ùïX~¨þöÕƒ¯Ïï¯4ZÛ[+{½î÷0©ÀqDZ™4´öäö‡í­{Ýö»¤3äÿ2vðï§ÃÀØt„QIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_stop_1.png0000644000175000017500000000562611273045225026521 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF³IDATxÚì•M Â0F¿‘š´QŠ‹ˆ'qåÒûºuå5<àOÓ$B%ã^Áfa@¡³œÅãÍ0|CÌŒ5B¤ú?pòÚXo¶.y–¤iàÑu¸;‹Ã~GÁõbåËj!rQ/ØYƒËùÔo\N+Ìë%r526º [E&$d¡P¨I1ˆæ:œÛþ90¾Ÿ$³GhN33¼÷ý`kÚ£Ö7ᙃ¼M«á¬yŸzø ÑÁÏBÞ8­³¬„ÅIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_icon_stop_2.png0000644000175000017500000000562611273045225026522 0ustar julianjulian‰PNG  IHDRÄ´l; pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF³IDATxÚì•M Â0F¿‘š´QŠ‹ˆ'qåÒûºuå5<àOÓ$B%ã^Áfa@¡³œÅãÍ0|CÌŒ5B¤ú?pòÚXo¶.y–¤iàÑu¸;‹Ã~GÁõbåËj!rQ/ØYƒËùÔo\N+Ìë%r526º [E&$d¡P¨I1ˆæ:œÛþ90¾Ÿ$³GhN33¼÷ý`kÚ£Ö7ᙃ¼M«á¬yŸzø ÑÁÏBÞ8­³¬„ÅIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_last_1.png0000644000175000017500000001040711273045225025460 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF$IDATxÚì˜[Œ]UÆ¿u_{Ÿ=gΜs¦3Ä`1Ñ’FmKë ZJ+£‰â-‘ ñÁ@Ô`Ô,åÒ K,a¸Ø-à”0US_ª>aÔ„±¶ç²ÏÙ·µ×Z>ìéÀàÜxkâ¬d?ìd;¿ýý¿ÿí½‰÷Ú¢¸×ÔÔÿóɆØ@(+¼s>uòĪfÅ¥ïÝÂcï#”žñξzêäoW=c6lœÒ„Ræ³§NžÈu*£k¢¨~´ÕwnžÞ¡Vsc) Âè3QTŸ©E£—mšºR®F÷þ- ‚0š­Õ¢AFÇ–,_m¤nëæ†±VûÑF³ýËwì^¿qëË–Xim£ú¨kN5šíÇGÇZ7Ooß5±”Ò!¢‘ºC4R·KCÕFHc¬…Öød«5>ñµfkÝ#õFsç–~8\Ò)¥Q‹Fh£ÙFk|âíñÉ=c­ö‘mW}lëe—/í¶T A" #a¸tЕÕGÑh¶ÑŸDkÝEÓ­ñ‰£fûëÓWî^¿h(…@„~¤Þ@³µíu“¤½î¢]­ñ‰ÇFÇÚ7Mm¿frQRCi !õÒAçBT`Q”1è°¥ô¸Rú›RªMÛ¯þøÃAüÊ+¿ùyz^Ã'\Hh"ŒF@)­t:X¯”Þ'¥ÚºíªîK†ƒS¿{éùbÞ ÆÀcŒ•KCQJ-çRiH¥¡t)”Ò:ئ´¾DHõÀôö]³/ýò™TPÌQÊãJi© •†Ri¦´þˆÒúÝRéû§®¸ú‡'~õÜëÀ(! dù‘€B@ƒBJ0ÆÁ…€Rª‹¥Ò·)¥7ïÜ}ý}„öãÇ‹/|åÛ„1Æ9„”B‚s!„J_"•Þ/¥Ú´c÷õ‡Ÿ?þÄËBéŒq² (”RPÆ@)cl¬rM©`g2¼ÇZsè†o9Vo4-ãÕµÕq^ÇÁ9‡T R*®Tp]2\zÝg¿|wF¿RYBHåØrN½ù„J„ sà•ƒJ!¬EE±‡Rº9k‘”2Ì»=§çBœw a-z—1ÅABÈqJé;ʲ¥é²Pÿ³!¥à”‚’9׸€ÖŒ)¤wþZ!¥RÒ72²@7ççU#•ÆÔ³7X[YšVºe Ê%Áæ:FÊ B)¸ðÎRZ2Æ!tAFêä¼®, lY¢ÈsgŒ¡dÙ ™¬f‹¨^¡=à}ê½ÿ€ßÖŽëqÀa/¯¸!¿5S !g-Œ)Pä²,ýki̽þ)Ô·ªòpxïçòÞÃ{ç,Jce)ò,ùƒ1f¿wî×¶,ÚÒÀ;ÿöœòÞÃ;‡ÒäyŠdû^÷Ü“³g>û­7=°÷Ö/¾ž$±2&‡µ˜{€y]ig)q?ëuÎÞß9ûŸÏÝñ/ëwÏu’d(1pέ>èÞ{8k«çÒdðÏA¿wWÜï>ýà¡=ÿ€OÝx³m´ ƒÚ;xøy1ò,E’ Nãþ]ý^ç'ooú½ŽT:¥tE(W•ÜÃ9çŒ)¥ ’a|<îw÷ö{?=vdÿ|C$ƒØAÍÙÒV[E‘!K;ijq¿»/îuþ2;sp¾Ni2¥œ x¿‚SoxhO¬µ°¶¬d)¨ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF$IDATxÚì˜[Œ]UÆ¿u_{Ÿ=gΜs¦3Ä`1Ñ’FmKë ZJ+£‰â-‘ ñÁ@Ô`Ô,åÒ K,a¸Ø-à”0US_ª>aÔ„±¶ç²ÏÙ·µ×Z>ìéÀàÜxkâ¬d?ìd;¿ýý¿ÿí½‰÷Ú¢¸×ÔÔÿóɆØ@(+¼s>uòĪfÅ¥ïÝÂcï#”žñξzêäoW=c6lœÒ„Ræ³§NžÈu*£k¢¨~´ÕwnžÞ¡Vsc) Âè3QTŸ©E£—mšºR®F÷þ- ‚0š­Õ¢AFÇ–,_m¤nëæ†±VûÑF³ýËwì^¿qëË–Xim£ú¨kN5šíÇGÇZ7Ooß5±”Ò!¢‘ºC4R·KCÕFHc¬…Öød«5>ñµfkÝ#õFsç–~8\Ò)¥Q‹Fh£ÙFk|âíñÉ=c­ö‘mW}lëe—/í¶T A" #a¸tЕÕGÑh¶ÑŸDkÝEÓ­ñ‰£fûëÓWî^¿h(…@„~¤Þ@³µíu“¤½î¢]­ñ‰ÇFÇÚ7Mm¿frQRCi !õÒAçBT`Q”1è°¥ô¸Rú›RªMÛ¯þøÃAüÊ+¿ùyz^Ã'\Hh"ŒF@)­t:X¯”Þ'¥ÚºíªîK†ƒS¿{éùbÞ ÆÀcŒ•KCQJ-çRiH¥¡t)”Ò:ئ´¾DHõÀôö]³/ýò™TPÌQÊãJi© •†Ri¦´þˆÒúÝRéû§®¸ú‡'~õÜëÀ(! dù‘€B@ƒBJ0ÆÁ…€Rª‹¥Ò·)¥7ïÜ}ý}„öãÇ‹/|åÛ„1Æ9„”B‚s!„J_"•Þ/¥Ú´c÷õ‡Ÿ?þÄËBéŒq² (”RPÆ@)cl¬rM©`g2¼ÇZsè†o9Vo4-ãÕµÕq^ÇÁ9‡T R*®Tp]2\zÝg¿|wF¿RYBHåØrN½ù„J„ sà•ƒJ!¬EE±‡Rº9k‘”2Ì»=§çBœw a-z—1ÅABÈqJé;ʲ¥é²Pÿ³!¥à”‚’9׸€ÖŒ)¤wþZ!¥RÒ72²@7ççU#•ÆÔ³7X[YšVºe Ê%Áæ:FÊ B)¸ðÎRZ2Æ!tAFêä¼®, lY¢ÈsgŒ¡dÙ ™¬f‹¨^¡=à}ê½ÿ€ßÖŽëqÀa/¯¸!¿5S !g-Œ)Pä²,ýki̽þ)Ô·ªòpxïçòÞÃ{ç,Jce)ò,ùƒ1f¿wî×¶,ÚÒÀ;ÿöœòÞÃ;‡ÒäyŠdû^÷Ü“³g>û­7=°÷Ö/¾ž$±2&‡µ˜{€y]ig)q?ëuÎÞß9ûŸÏÝñ/ëwÏu’d(1pέ>èÞ{8k«çÒdðÏA¿wWÜï>ýà¡=ÿ€OÝx³m´ ƒÚ;xøy1ò,E’ Nãþ]ý^ç'ooú½ŽT:¥tE(W•ÜÃ9çŒ)¥ ’a|<îw÷ö{?=vdÿ|C$ƒØAÍÙÒV[E‘!K;ijq¿»/îuþ2;sp¾Ni2¥œ x¿‚SoxhO¬µ°¶¬d)¨ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF‚IDATxÚ´•MhE†ß™9g¾ï»ßýmÒ, º©RÄ(‚…ŠíÂP0Mb“´ÆHDEºAЭXâN‰ñZRq‘Z« $±¨)ø¡"Š-Š»(…¢M,¹÷~óç" ¦sïBÏræ=Ï̼¼œ!üE{ïíD”R sÁZ¾üb~ÛÉFà|¾øl±Tö¥ò_*ï°ÅRÙ¥iþ¹F}b³ûÜ%•ºOJ5ÿùüì¯÷>–ÆIúKœäŠÌ¼À›,k¯®^_ýce¹åâ…óµ†Vìïèº5_(-Ö¥èjïÑGo/ËQœ+FQ´¢ˆö¨ó„h³ÖÞàbC+’\ÚU(U®”+­Oµ´¶µVZwî/–*Gri !ÕÌ©ñ×OŸ°RÈ­5¢8nÊc"žÕQ|S.Í¿\(UP(–ÛrùBÃ;;½¡³ÎÎ)ÁZuö=È ÁsçÏü(„¸‹˜?Žâqœ{Më( !\­ÕªsºZuõ“àý2™õÝM¥âì›?YcF²"’R*xïÞ{ûô+Ù†æÜ[¯çì!ˆ¸·é¸~õÅ¥,«?ï¬E@@áÓ¿kœuïH)ÀÌ£½C²é›,[òÁc-ŠâxßÐc7è¬5…2E¼‹XßÖ4ØZópðBÑf}|óþôÔÉkÞû¥T`Ö£MÝ  '„1G̈âx¬{`äæÍ:ïý¬”D|¨)°RÔ 齿ì½ëBüÅI1Ir“‡ú‡Ûÿ»iFÝÑ30²»!˜™ŸŒÉÞ}é…gêι'‰¹40Móßô >òÄz:®„à”"뇶wŒìVÄwzï}½VZÏígÞ{ñ±(N~Þœ]ïýûR óÛ‚£(:ÂÌðõäÄØ"LNŒçì‚ê,±¾…™¿ßÔòT­õÞî‘–-Á½CBGÉã:ŠADçnBôÑ Öº/Š“76ÖÏLŽ/2ów¬c¥u4¸åØìên¯´´}›æóp9Ëê¿›Ìh­A̫އVcêÆc”R`Ö æ=ƘÂʵßf¦§Nücl ÁÁ9)å)y`ý`ïýÚ¥A*!%BpÎÂ{iËyl²úWµêª”"8çXk!Äšk!xÂ9Xa`²êµjø×俬?Ìžú|IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_mode.png0000644000175000017500000000766611273045225025236 0ustar julianjulian‰PNG  IHDR×c,Ï pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÓIDATxÚÄ–[ˆVUÇÿûvÎÙûœï2ó©óP™‰õf!da“·Ô‘¡4-‹²&AªIƒœ1H(ÒKI‡2­´¼¢¦©ƒâ RH!JzR ³¹|÷ïÜÏîa2&o£öàzÜ,Öoýaý÷ZDkÛüFÇ6N¹C!çŠR6Šú!Zë¿t’üÇñ…( Ã( ûNï*V ¦xÜÄéYÓ’÷˜–Üb†Í…A9ç&!Ì@ÅqìFQ…A ßûÚ÷Ýžëöýpô@tÓàÇÆOËJePvj²‡¤TL˜8`Œ‚ B´ÖH’q! ø^ n­Õj•·k•òÁ#w½að㓚ÓN:Óé¤2ÏÚN RÙ0 ŒqB@(é»T@º¿QÂó\¸µ ªåÊ¥Âì®ï¶nÜ8¹¹>­_›ÉÖϲ4,©À¹€£ú‚N’‹ZëÓZkƒ”PÚH %  dJœÄuaÀ­UP.‚b¡÷廿ýæºà¦™/6Öç†Ieê`Y„Ò“qu¿ªãå݃ Í›‹ßkBÍ›`B†w7Nn^{´kϹ¼IÓgÍÔåžÈ iX*„a2Æ‘ºü~Õ/3 Ãóqí×ÀT!”“B’$MB˜MaàMÔãìA<ðýÖj¥,&N›¹Ú÷½ó'ïÓ“¦ÏnÊdë×fërw¦ÒYXRâ$¾…áνۿŒ®i§–Ö¶ ¹! ‡œt”RA€À÷E!þ1-44|ÏC¹”¯–‹…µn­ºš(;Õ™­ÏMËdspR0Îà{ ùžSk–/yäºK¢Z)Ÿ–Êî0Lëu©lXRÁ²$.5H(…Nøž ƘM / ãWg•ꤳPŽnÄQÏ­õÖ*å¶Ë9ôò‡-ÖK…üâr)ßîÖª¾N0Æa˜&¤²!¥‚T6”í@Ú¤r¤rK*bZRsÖ¯%ôý¨Z)õ”JùëÛ?82(¾êü¨œïí~«ïY*æ÷ºnõb†H’¤_5!! „&„`'Ži?â8ê?®U*¿ }só½Ý£:W.;~Kk±¥µ9©ôe§:¤²‡ aÜKIùž§ËåÂîR¡oyµRúqóç«‚æ-\$ áe_t,×ÿkŒmï·¤ZO)àûÞ¶J©°¢TÈŸÙ²±=šúÔódÿ®Í7\ì¦ÀsZ¤¤Ts e#ÃÐÿ¬Z.ý²cSgr+§¹]7ÅmŠ¿Xì6ؘJqkIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_next_1.png0000644000175000017500000000760711273045225025503 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF¤IDATxÚì˜ß‹UUÇ¿ûÇ9gïs££¢ùÐS¡Šf:e‚XAöEa`(šYù#͇RÐð!%2%SjÂ_ì¡B!©©{Ï9ûüØgŸÝÃܱɜ{gî"höëZìõYßµÖÞûb­Åm‘i¨i¨ êþEËæ0Ææ]¼<xð¡^Î…`L1üíùÓWÇó¥ã„ô—•êžå«ŸxvéÊÇæt åû•G+ÕÚPµ6c(¨Ô6·òåã‚Jµ”~°„1~Ÿ)ô—«_¿'QꛯN6Ü TP©Â* ”"Mtåû§ÖÓ[¸žližLSµ( '^³ng’¨ï¿<‘LJHA¥J)¡-}ǵzBJm›Ù;³úæ¡oî‚ù}sç?7«oÞ‘žÞÙϯèX8(Çõà WH¸žèL)î¸ÆóüJ®+`L!}H?¸G†Á¡ôW>2ðÔá$Ž;uüf;(Æ(w@)ã¬3(B¨Ë8'®+ ¤BÜf¶BúDÊ`Uä‹ÃF}Õªµë'*:~þÌçÅTL*oa ¥àÜc ŒqpÇ…ë áCøAUÈ`ƒôëKâ°¾låšu_ºpö‹òiN Teì~„RpJAçŽsK5Hß¿KJÿÖûã(Ü¿¢àDš&W.ž;i§Z)õ×rŽdJ)q(ãpgÎ2€ *÷ÊF}K5⨱oEÿÀ™Á“Ÿ^é)Þ܃tåМÛá!°„À!”1pÇëzRBÊÀ“~°\Jq¢âO6lÜïzb¨ZëcÖ–]A•·ýM¹fIeàÜãzp=OHH?*ŽžÑ:_Ê;ê ù‹ã80Æ€´Q«k{q6K: G)cìV¿I?€Îó…^bœ_#„ K€te&|«öcpšÓÊ9‡ë …FYX‹»KS@ë¼mWµ‚Ê'ý䫜ãÀZ À– ¥µ× ؤ+¥|v2ŒµÖZ”¥A¡5´ÎQh}£,˃n”Æl·°@›7\«›1mBMÆèüô¦7¾œ¨èfžg0Æ´Ýtb‡g °e c ´Î¥)ª8ÜG£ìØ\@ÖáºLQ´UŠ·TŠŒ¯¤µv¦Yªß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF¤IDATxÚì˜ß‹UUÇ¿ûÇ9gïs££¢ùÐS¡Šf:e‚XAöEa`(šYù#͇RÐð!%2%SjÂ_ì¡B!©©{Ï9ûüØgŸÝÃܱɜ{gî"höëZìõYßµÖÞûb­Åm‘i¨i¨ êþEËæ0Ææ]¼<xð¡^Î…`L1üíùÓWÇó¥ã„ô—•êžå«ŸxvéÊÇæt åû•G+ÕÚPµ6c(¨Ô6·òåã‚Jµ”~°„1~Ÿ)ô—«_¿'QꛯN6Ü TP©Â* ”"Mtåû§ÖÓ[¸žližLSµ( '^³ng’¨ï¿<‘LJHA¥J)¡-}ǵzBJm›Ù;³úæ¡oî‚ù}sç?7«oÞ‘žÞÙϯèX8(Çõà WH¸žèL)î¸ÆóüJ®+`L!}H?¸G†Á¡ôW>2ðÔá$Ž;uüf;(Æ(w@)ã¬3(B¨Ë8'®+ ¤BÜf¶BúDÊ`Uä‹ÃF}Õªµë'*:~þÌçÅTL*oa ¥àÜc ŒqpÇ…ë áCøAUÈ`ƒôëKâ°¾låšu_ºpö‹òiN Teì~„RpJAçŽsK5Hß¿KJÿÖûã(Ü¿¢àDš&W.ž;i§Z)õ×rŽdJ)q(ãpgÎ2€ *÷ÊF}K5⨱oEÿÀ™Á“Ÿ^é)Þ܃tåМÛá!°„À!”1pÇëzRBÊÀ“~°\Jq¢âO6lÜïzb¨ZëcÖ–]A•·ýM¹fIeàÜãzp=OHH?*ŽžÑ:_Ê;ê ù‹ã80Æ€´Q«k{q6K: G)cìV¿I?€Îó…^bœ_#„ K€te&|«öcpšÓÊ9‡ë …FYX‹»KS@ë¼mWµ‚Ê'ý䫜ãÀZ À– ¥µ× ؤ+¥|v2ŒµÖZ”¥A¡5´ÎQh}£,˃n”Æl·°@›7\«›1mBMÆèüô¦7¾œ¨èfžg0Æ´Ýtb‡g °e c ´Î¥)ª8ÜG£ìØ\@ÖáºLQ´UŠ·TŠŒ¯¤µv¦Yªß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF›IDATxÚìØÏŽÓ0ð¯±gœÿ ^g/ˉOOO³—=pÙ½ð@ˆn'±Ç P£ P*!¡"ì£åý’‘¬|ÙLÓ„k[›kD%¸Âµ‰ãûÔÍ«7ïÒ¬ø`ŒÒ„$™§B€÷coñøénó«Æ·¯ßN&ËAÄPJö§éôÖ~üüpÿþçZ½Ö°ª[ÔíEYMŠ$™›Šx ¶Ã~¿;û´í󗨪i^@k:íG¸q€íöØ}ý²Z»ŠÊ‹M»EÕæCwxúíªªA»}¢¬AÌ3*ô½…&‚x9ŠMŠ,/P”5ò¢\¼~çFÀ0ôgQéú²nÀlã×DApxÚ]ŽRš ‰ÁÆÀ˜J/ób$«5˜Ál`ÒlF‰ CkýïÜSQQQQQg­~$ñïàÆZ”,ƒƒw"þlcïÜ)h,r£ὃˆ\Žú;hb„àW#Ö`»³¨Áv§(¶±lw€‡ø/!¢þ_ÔUÞSßÜòÂÙÖ~IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_play_1.png0000644000175000017500000000771211273045225025467 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFçIDATxÚì˜ÝoE‡;³_³{ÚÓH ÑÄ;? h¨…4¶%‘Äÿ½ñJ1„ˆ"(#‘˜h¢BE>Úb ‰’½ÑD…pŠ”ÝýÞñ¢çÔ‹iK{Ê…“ÌÍìÅ>yßgÞwf)%î·ApõÎ…å+Z BÈ2)qí»Kýá})Ã`0«aO¡¡qêµí¬lYGçŠÙ6-65·75—{›Jå­ ÅRGKkG©žPÊ¢wl~áñbSé²a2]Êa\Ü="|>,„ÿÍÐ…Ó~Ý2 sA¡¡Ñµ eJUDQ¸Ì·ìmœ»ßžÛµ¦mÓP¿ ÷÷…uKŸªiÂ0YÙ.4¢±© Ê‹Q^¼ /}¬¼hI¥T^´«ØÔ¼qõú Kë)BHJ©êhºQd– E!Ð &c`ÌVMËn7™½ÒçΧë;·ôÂï¿xîÔÈœB()ŠbB@© UÓ@Uº®C×M&ƒeÙ%îÙ/šÌi÷¹{¤µ}óP üá¡ §ÅA)×EQ@›”PPªBÓuèÆ(œÉì-ËÞÎ=ç ÷ܽkÚ6 ‡ømxà«h–¡d€PEQFÓJ)4B@UªªA7 &³,˜–½Ü´ìßsOùÜ=öԺΠ_Ÿ¼1›éÓj@BBJ EQÆà(UA”ÑÔjZ-j˜ekÌ*l4™ý¤a:Ÿ¬ïÜr~¦¾Mu€ ”‰‰­‚¨„€ÐÑÈiš£šRƬ…̲^æžÝÉ=§·õ™g/øv:¾M*:€[JL~‚Ké8ßTUƒªi0 “Y`VáafÙ;¸ë\æÜ=ðtÛÆÁ0×. œIf":”'‹Ô]áÆù¦i:t]¯n ̲W0×z”{Î>÷>oií<7xöäÓ‡¢¬ )›ÜxßÔªo¦É`šŒ™–ý¼ÉœÕ†é]×¾y°Ú²þš*T¹*ûôšè$¾©šM«îTfÁ4­%†a¾¢iú…ƒO¬n»4Üß70¨ßg5™oŠBÆê¥*(¡¤Ì²ô¡( Ÿ‹£ðÔT#¥ˆj;ð^áP-'„RJBèu…ÐÄJÿ™·¦ U¼W()Gë›Ìs¤i‚8ŠÒ ðáóãÂ÷º?®¼ÿãLêTÃLa Ï3diŠ8޳8 "!ü³¾çìÛ÷îë}3­S6€‘j½šŒÌsdY†$‰EA ñƒï{¸ëôîÚ.ï¥xššÆÿð¿ÊB-M¹Ì‘& â(LÂ@Üð}¯×÷ÜJ僷oÌF›¹ ¯õ¿»ýË›8J£0àÂçŸùÜíÞ¿óÍ+³Ù›¤wù6Ñ›,CGY†±ü¢à^W׎׾œ‹Cž@ŸŠ7qÅà? îâžÓÓ³w{„Y“A¥Õ©O€‘yžýãMÜÜ;ʹ{ ²{ëÕ¹>/¨E«vžªy“$qA~Âçî¾î÷ÞªËÅ€ )›¥Ì‘gÙhØ’8¯zsYp¯{ï;¯¯ë½$Ïs'MÓb…È¥LÂ@ü*|ïwž÷lóê~ͳ¬”$q1~š$ñHÇÇ|îî?¸ë­ŸçíÕ%Ž£?Ÿß–y~ŠÒUÙ½õܼ?BJG^úèàÎcóö@5V™«sÕÚíεzOåÿçÅ)Ž¿ÇñÒYËÉDIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_play_2.png0000644000175000017500000000771211273045225025470 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFçIDATxÚì˜ÝoE‡;³_³{ÚÓH ÑÄ;? h¨…4¶%‘Äÿ½ñJ1„ˆ"(#‘˜h¢BE>Úb ‰’½ÑD…pŠ”ÝýÞñ¢çÔ‹iK{Ê…“ÌÍìÅ>yßgÞwf)%î·ApõÎ…å+Z BÈ2)qí»Kýá})Ã`0«aO¡¡qêµí¬lYGçŠÙ6-65·75—{›Jå­ ÅRGKkG©žPÊ¢wl~áñbSé²a2]Êa\Ü="|>,„ÿÍÐ…Ó~Ý2 sA¡¡Ñµ eJUDQ¸Ì·ìmœ»ßžÛµ¦mÓP¿ ÷÷…uKŸªiÂ0YÙ.4¢±© Ê‹Q^¼ /}¬¼hI¥T^´«ØÔ¼qõú Kë)BHJ©êhºQd– E!Ð &c`ÌVMËn7™½ÒçΧë;·ôÂï¿xîÔÈœB()ŠbB@© UÓ@Uº®C×M&ƒeÙ%îÙ/šÌi÷¹{¤µ}óP üá¡ §ÅA)×EQ@›”PPªBÓuèÆ(œÉì-ËÞÎ=ç ÷ܽkÚ6 ‡ømxà«h–¡d€PEQFÓJ)4B@UªªA7 &³,˜–½Ü´ìßsOùÜ=öԺΠ_Ÿ¼1›éÓj@BBJ EQÆà(UA”ÑÔjZ-j˜ekÌ*l4™ý¤a:Ÿ¬ïÜr~¦¾Mu€ ”‰‰­‚¨„€ÐÑÈiš£šRƬ…̲^æžÝÉ=§·õ™g/øv:¾M*:€[JL~‚Ké8ßTUƒªi0 “Y`VáafÙ;¸ë\æÜ=ðtÛÆÁ0×. œIf":”'‹Ô]áÆù¦i:t]¯n ̲W0×z”{Î>÷>oií<7xöäÓ‡¢¬ )›ÜxßÔªo¦É`šŒ™–ý¼ÉœÕ†é]×¾y°Ú²þš*T¹*ûôšè$¾©šM«îTfÁ4­%†a¾¢iú…ƒO¬n»4Üß70¨ßg5™oŠBÆê¥*(¡¤Ì²ô¡( Ÿ‹£ðÔT#¥ˆj;ð^áP-'„RJBèu…ÐÄJÿ™·¦ U¼W()Gë›Ìs¤i‚8ŠÒ ðáóãÂ÷º?®¼ÿãLêTÃLa Ï3diŠ8޳8 "!ü³¾çìÛ÷îë}3­S6€‘j½šŒÌsdY†$‰EA ñƒï{¸ëôîÚ.ï¥xššÆÿð¿ÊB-M¹Ì‘& â(LÂ@Üð}¯×÷ÜJ僷oÌF›¹ ¯õ¿»ýË›8J£0àÂçŸùÜíÞ¿óÍ+³Ù›¤wù6Ñ›,CGY†±ü¢à^W׎׾œ‹Cž@ŸŠ7qÅà? îâžÓÓ³w{„Y“A¥Õ©O€‘yžýãMÜÜ;ʹ{ ²{ëÕ¹>/¨E«vžªy“$qA~Âçî¾î÷ÞªËÅ€ )›¥Ì‘gÙhØ’8¯zsYp¯{ï;¯¯ë½$Ïs'MÓb…È¥LÂ@ü*|ïwž÷lóê~ͳ¬”$q1~š$ñHÇÇ|îî?¸ë­ŸçíÕ%Ž£?Ÿß–y~ŠÒUÙ½õܼ?BJG^úèàÎcóö@5V™«sÕÚíεzOåÿçÅ)Ž¿ÇñÒYËÉDIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_previous_1.png0000644000175000017500000000756011273045225026377 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚì˜[ˆUUÇÿë¶okí½›ãh`ú ÑC`¡¦Vf–ö j6]˜ Ó¤D£ˆˆc@Á©H»HEõ$ôÒCYQD=ô>DL3:gfΜ˾­µz8ΤåÌxöXù‡ý²×^{ÿöÿûÖÇ·±Öâr¹¡(.C‘+á›+Ô-+Ö,fŒW (òS?~÷eõR|péòU7i­‡~þá›áéžáÓ Hõ !²Ö"KÓÇçsûšõ cë¥ wdY6à“Ž¡Â(†çù0Æ Ù¨Ï澊·vUºŸd\Ü­u![͆™iδP¾/Hc Œ1ÃܶjïûÁ ]óºŸVa´Îó‚…„2diRQ Êq=8žk4’ÄíhÕÚ_Ué~P©¨WEñõ*Œá8.¬µh4&Xš4I)(Æ8ç0†‚±‹+g+ïÚ°À—rceþÕ[Ã(¾S…1‘*B ãȲE‘ƒ G—‚êD+VßËý@mèš7kÅëU‡2lÃø¾„ãz˜\åŒsBu.Ô…Ý^~Ç=ÔäÍ•yó{doRa|ŠbH ¸®!0Æ µ¡¤ý®‰KîÔ²•k‰çùKº*Ýë¤ ·«0¾QE1d#$ׇã8`œƒRÖžd΋˜š!Œñs“øš¸«²Zªè ¥¢e*ŠÝɼñ¼Žë‚sÑv…´ç_@ÍÒP„”r8®‹Íî’Yš,­t/Øîr³ cO…15 ã FÙÐ4Ê¥ Ú1ÆàòZJiŸÖz“Îâ@*2„/åyyC(=û33®x \ñ!`ŒÁõ|8®·Ó÷å"ŽÏàz„à\€2v10çUœ’N”18Ž Êø¢v(8Ž!œÙòf&érM!  Œ ñ»¸S×€ +>kaaa´F|ÀBJiµv!!\`j¹wfgKt:ÓL­5²,E«Yî{¶÷ùÚXu[m|ôx£^k&­&ò,…ÑÖZtÐ,ZI¹ðY ]H“êã€{¿|ltäô㵱ѓÍFiÚB‘ç°ÆtW®xZX£‘ç­fcêþ{oô>Þ±wÿÉ0Œ·úRíòý`ɹu 3Õ)ZÞ)ÖZh] KÓŒ½ûú¡W_Ùwdäô÷ޭׯG’fyžÁh sÖ¹2E{Öždl:½3ðò¯‡÷ïy¦:2´i|¼úi£^k&IEžÁ˜ió-ÿOö}G½øÕ™¡ÁmÕ‘Ó»kc£ß7H“d*ßð׬m,¿ø3»Þ?ÒßðÑÎ}}_È0z8j‡ïËE“ýÔ9pî¿Þäý]Ç^ëû ÀÁ§žëÿL…ÑÎ@ªÆxœg)´.ˆµ¦\¢[c§þ®ì~õíÃ/ýrfxpoõÌð–ñ±êçÆDž&-¢‹¢«”SE‘#Ï2c ‹¼´k¼y0p¢w÷ ß2ÆIÓdOš¶ÊužiÒ:E)ýÉ‹4Mç¼;þð­C Ç6né=‘´âÊǨÿýIÞŸVàÛRá©ÅRIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_previous_2.png0000644000175000017500000000756011273045225026400 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚì˜[ˆUUÇÿë¶okí½›ãh`ú ÑC`¡¦Vf–ö j6]˜ Ó¤D£ˆˆc@Á©H»HEõ$ôÒCYQD=ô>DL3:gfΜ˾­µz8ΤåÌxöXù‡ý²×^{ÿöÿûÖÇ·±Öâr¹¡(.C‘+á›+Ô-+Ö,fŒW (òS?~÷eõR|péòU7i­‡~þá›áéžáÓ Hõ !²Ö"KÓÇçsûšõ cë¥ wdY6à“Ž¡Â(†çù0Æ Ù¨Ï澊·vUºŸd\Ü­u![͆™iδP¾/Hc Œ1ÃܶjïûÁ ]óºŸVa´Îó‚…„2diRQ Êq=8žk4’ÄíhÕÚ_Ué~P©¨WEñõ*Œá8.¬µh4&Xš4I)(Æ8ç0†‚±‹+g+ïÚ°À—rceþÕ[Ã(¾S…1‘*B ãȲE‘ƒ G—‚êD+VßËý@mèš7kÅëU‡2lÃø¾„ãz˜\åŒsBu.Ô…Ý^~Ç=ÔäÍ•yó{doRa|ŠbH ¸®!0Æ µ¡¤ý®‰KîÔ²•k‰çùKº*Ýë¤ ·«0¾QE1d#$ׇã8`œƒRÖžd΋˜š!Œñs“øš¸«²Zªè ¥¢e*ŠÝɼñ¼Žë‚sÑv…´ç_@ÍÒP„”r8®‹Íî’Yš,­t/Øîr³ cO…15 ã FÙÐ4Ê¥ Ú1ÆàòZJiŸÖz“Îâ@*2„/åyyC(=û33®x \ñ!`ŒÁõ|8®·Ó÷å"ŽÏàz„à\€2v10çUœ’N”18Ž Êø¢v(8Ž!œÙòf&érM!  Œ ñ»¸S×€ +>kaaa´F|ÀBJiµv!!\`j¹wfgKt:ÓL­5²,E«Yî{¶÷ùÚXu[m|ôx£^k&­&ò,…ÑÖZtÐ,ZI¹ðY ]H“êã€{¿|ltäô㵱ѓÍFiÚB‘ç°ÆtW®xZX£‘ç­fcêþ{oô>Þ±wÿÉ0Œ·úRíòý`ɹu 3Õ)ZÞ)ÖZh] KÓŒ½ûú¡W_Ùwdäô÷ޭׯG’fyžÁh sÖ¹2E{Öždl:½3ðò¯‡÷ïy¦:2´i|¼úi£^k&IEžÁ˜ió-ÿOö}G½øÕ™¡ÁmÕ‘Ó»kc£ß7H“d*ßð׬m,¿ø3»Þ?ÒßðÑÎ}}_È0z8j‡ïËE“ýÔ9pî¿Þäý]Ç^ëû ÀÁ§žëÿL…ÑÎ@ªÆxœg)´.ˆµ¦\¢[c§þ®ì~õíÃ/ýrfxpoõÌð–ñ±êçÆDž&-¢‹¢«”SE‘#Ï2c ‹¼´k¼y0p¢w÷ ß2ÆIÓdOš¶ÊužiÒ:E)ýÉ‹4Mç¼;þð­C Ç6né=‘´âÊǨÿýIÞŸVàÛRá©ÅRIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_stop_1.png0000644000175000017500000000577111273045225025512 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚìØKNÄ0 à¿“ô=eÄŠ%‚À}زâ@ˆ¦$NË‚*R% ª„½v¢O¶dÅIæyÆÞ"Ù#*Å#‘öýu}s{—å僵Š4Òt».Ïóf†w#†¾|y~ºÿšCKë¦EÓQV5ŒÍ¦j3Ô4MðnDß½ãôöº˜³ˆ*Ê ‡öˆúp…,Ï¡m‡ŠÃЃ´‡°el†¼(QV в‚RÛU*ÆÒ12.çÓz”" ÒÆZX›AÑv•ŠÌˆ‘¡µ}sï.ç” %(A JP‚” õ7AËïèÞ9i(ÞvqÞ!f^ú\;6ˆ1üÊŠÕwx7Ê_‚ þ/j—sêcË?~°ÛŸçòIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/Lavender/transport_stop_2.png0000644000175000017500000000577111273045225025513 0ustar julianjulian‰PNG  IHDR%%Åž  pHYs  šœ MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3gAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚìØKNÄ0 à¿“ô=eÄŠ%‚À}زâ@ˆ¦$NË‚*R% ª„½v¢O¶dÅIæyÆÞ"Ù#*Å#‘öýu}s{—å僵Š4Òt».Ïóf†w#†¾|y~ºÿšCKë¦EÓQV5ŒÍ¦j3Ô4MðnDß½ãôöº˜³ˆ*Ê ‡öˆúp…,Ï¡m‡ŠÃЃ´‡°el†¼(QV в‚RÛU*ÆÒ12.çÓz”" ÒÆZX›AÑv•ŠÌˆ‘¡µ}sï.ç” %(A JP‚” õ7AËïèÞ9i(ÞvqÞ!f^ú\;6ˆ1üÊŠÕwx7Ê_‚ þ/j—sêcË?~°ÛŸçòIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/1.png0000644000175000017500000000066211273045225023263 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î</IDATH‰í”½jA…¿»ëâ ®[„­ìÁ"…¥¤‹……MÚX¦H—Gò&ûiÓåb„@^`7?$ ˆD<©”€Êq›à ÃÌp¾™{g®I¢Hy…ºÀðO¥åÀÌNdžÏ’®W¾Ëfgfp¶À§¤Ç5@Q*m[0³Ïó.‹Å;p'éu'‚¤µ¨×ë÷ιY¿ßŸv:IßιÁ¦½yñ»ÈG@hFQÔͲ,ÀÑhD»Ý¾5³10É9󛤇M)Š+Ïóš½^¯´4hµZÄqì§izŒs/À °v%à¸\.φá$i>Ÿ+IU«Õ þ𢓕Jeàœûj4“0 §µZ-õ}ÿb—l}¦fæçÀ‡¤§œ´lUáÿ ð^ô±õŒ^ß®mIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/16.png0000644000175000017500000000075111273045225023350 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<fIDATH‰µÔ±jaàïJÂc“XØØX¹ÒÆ&ä R¥ÐçðÒ§D‘ Ä*`aƒIP´3ˆ@b6 x-v×$›ÝÙùæÀ…™áœ{fÎûGfj7펩ºÄˆhã~àSfî×ff­Â2¶½ÚÀô8]iDÇxm,amœ vD=´°‡uݨ^ED+3OG* #úì"¢¯x‰‡UºÒ/ØÇÜÆc´1_%(58ÎÌg«ø‚£*ÁÄ{™¼ÃI#=¼ÆL¡4¢+È̈8¯mw+¸s˜Â9|–™ßÿ÷¼|ØEÄA…Át¯þTpú·.ß”ìÁ›ºüIŠb rDÌcEw™nâ~Mä0"ŽºÿwÿX8Å!Þ–F48äMÌbÁõù‹ŸØ­ñÒ‹ýëÁˆžã 18Ç&>Œ3tÑ:.":Ão´J#epOñMw¸«¸_ÚüÚ š@ã{ðýR¦NÊ~Y´IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/2.png0000644000175000017500000000065511273045225023266 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<*IDATH‰í”½JÄ@…ϲ™h£¬ÜN°K—°H%Ä÷Øgð´S¦YHaðìƒUA 36îvMGöÂ-†¹s¿™sf†ÆØ aµ{É!ÉCkCVKÅ °ü€ÓÜ^P»Àÿ¡`Œ¹™õlv$ï¬sßó±`½=è”ç]ë§ù·Lƒä¦âHJy¬µš¦90YŠðݱ¤”—Q=eYfŠ¢0I’<»®ûࢯDŸMX“Rî×u-”R³¹0 uUU·®;lú`žD§vHî‘üàRêU1ÖZ¿!ÑUÇMžç¦,K“¦éË`0¸àõ•hÞ•ÜrgAåûþÄó¼»}›ñÀFXo¤³,׃ QIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/32.png0000644000175000017500000000104011273045225023336 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰ÕÖ»jUAàïW#ÞÀBÓxAA Ëê 6yA°ÄJ,ÄJ;Ózé+!àRŠm¼`q5¢Ëâœ$Í9{ï@  ›™½þͺ̚IUÙLÙ²©ì] $é%YHò,É•$i¬ªV=|G ÆýV¸Ž¦q×°ˆ©&\Ú&9I{ijxUukn[+ö5yƒ}¸€I¼ot­¢œÇ)ìÀÇ&@Wp'›]=xŒçXÆ ìntõàjUõ’ìÂS|hlè$WÕîaO“îªI.ajŒîNÌ$Y^àL’‡é=ªªÙ è—ÜÜӘǷ¡µEýÒ–/Ó®ípUõ†Ö¶VÕ¯q¸‘9Hr"Éå$ÇGé4‘³N%™Ä+ÄOL$YÐygNòQìÇu¶~±–Ô¯ œo«êó*ïJ’ÜÁE±ÛßxÝbÓ7«êÉêl¶ü?¬õýÒ¿fÚ¶ö±÷~ìßé—ãÒ€|“10²L“œÆ9¼¬ªù¡YŸç¿Uü2¬H*RU¦IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/4.png0000644000175000017500000000056111273045225023264 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<îIDATH‰íÔ=JA†á§dÅ@PMLLŒÜLð ÀÀÈÀ{x¯ ™x‚… ̼€¹., šø ¶;:ÌþÍ,´ ì]P]oóUwGJIN-eíÞíˆ8Ê@YsiXþ UN"bgJí&VgÔ€”ÒÃOÏògSö-ã¹`£œÔ ãªn};ƒB±…œb —èÏE˜`Ç ^†ñ†'\7µ¨:äÖq`ô ¢‡»‡>,ÖU‹.°‹ý1€tÐ¨ÒÆYt‹W¿½c€•¦Mlã ÷¾‡{޽¦ÍGfCÙßÁå¯/Æ":IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/64.png0000644000175000017500000000101111273045225023341 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<†IDATH‰µÖ½kQðß ˆQ$)«Ø Ú Æ"ÒÆâ¿¡í–‚ÊtÁFíbKQû`R%‰‚1Y}oV—I2˜½paf¸çwÏy÷1‘R2Ê81ÒÕq²iaD\ÁM¬ã]Ji«0¥Ô(q«HE¾B§×V¢]¼À[Ìb±Ж` Sx{¸§+ÿ!Ñ÷¢›U¸Æ&±ƒyôð×1QhKp/±)ë?UhëAÇ#¹£_ÇIÐÃSÜÁ®ªQ¡­DgÐ-ž?ʦï6&ˆˆKµrOp·ÑÁÅ2.¥ôùïšÃ—]D|­ èùcP.w´/{3Lpnø¥Í,—¾u1wœWE9–Q9ɇš“ò)¹³XÂv¹.¥ô!"ªÊr¼Áž×Bß𼩤ƒ,›¼"Ñ5gä·<ÁŸ*wœ7=;x.·÷ —å*ô±‚×ue¶Ã$Z•ß@¢Ÿø‚Sm%:Š`±&›û3m?àÁ(bä0žQ·ÃúÚIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/8.png0000644000175000017500000000070311273045225023266 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<@IDATH‰µÔ±JaÅñß•ˆ…Øh³„€é¾à#XYØH@È3¤X'XHJÁÂJÁRlAl\¢…¯Å®º®«;³ìø`î½ÿáÜùNd¦*5Pét|(Z_1}leæE¡ÆÌ,t0‹$î°\¤¯¬E7¨7!ß#b©[CYÀqfÖ0„E,ô2ó>3á ">÷Т5|©ðWîj™YÇne€&ä°R@7½¸É1þNí(†»Ô€Ìâ:úUÏ<º{ ¥Õ*ï|¸LÛü_óÍ D~XVP¨r!WæWKUã¾[wâ|'†-ÔpTüIЀ!@¢®_iÀ‘ìØ.r ¿Qqÿ'F0ßôÀû>®¯úü‚íñ6¨SS»ÖÀÔ¼>Y¬ðÁOî4ÅÍS«aÄÿÎ÷y7zÃt.­K œ×'«žþùž±ÄcïøtÑæ× UÞ…ˆ(7ê"¤Ÿ ?¯ß©–Ì=·ïަ©ã`´¦ùeÛåQ \3Ë™W°¹2Sàç÷^iÜß.ø¶²}©ÆOç+|§¾dø ð%‚rYÝ“€·´T€”ÀpŸ¸ÚHËg:Oe±e2‹[Æç1Ro2]æç Uueóó¡u xŠƒŸdtYèêÍàs/Ww· >6ò ®¼£PÏ–lî]ÙzT§&VFI`‘ ø¦ S€‰Ð›ÔïJ.8¾.1‹®Ä&Å,Ä…ç)"âÑmYœ\(Š›ï¼1>ÇÄnuZ‹{ç+Ü«9nbŽÌé$2 B AÀÕKÇ¥“4”ICDA"›.20 €¦³u’ÝÚ‹1Û•¿Ì/¬¼çóŽšÏ¡QcÁÒº!€Á.€šAºy–€ièÚºQ`¡Æ˜)1LQooÒÏÀ›ì‹ÃÕxÃñé2_ñbVL‰·vj>ÀhEÙ•`ÒIÂöÂÄœ†iÄS=¨/Úg4ðÔQl§arØò O²UY‡Õ! ±6ðþØß ï ª7Mh BÁ‹Êþ­(žÝ5<Õ¾.ÛãÂÁ=©SqØbÁ[–ùÓíêóÇÏé±ø‰ã™ I.ïØ·ãt‚á5åè$ žÄl®¶Àu#W­ß¿¬Ou\ô,pårc—EvØh0õì ×ajl}+‹ºÛÅŒ«ðÐE;¶àùšÄ½³%¾«™þ+— ("òQQŽ`I½^óRÅè"3j·Z Í`lÈU4Ç8jIŸ'ñžëãîoO¾µjð?.ßœÌêëE,€•tÜ6@È–Šµ-Æ;’”l¶¹ÐqÍ祃]†¸>ÞÜ}_ßßïük'原Ó:Z·õR`¤OàÄ´‚æhƒ[9Ãõ¥Ã×z+[\?pzÙå–_±n{äè0Œ¡ ïtCSóøvÒ$Ꜷ‹à~m¾´Me0 AÁ妃ù-“Г&Ì-ð^ÿF÷QÀz°íÈ~Oþål‘ï¼ðR!ÆÓËèKÞ:§Pu4.‹É²1¾^\ƒÅ…~k a+lþø¤™-³=•žï}6q$6ò§sÊVx¿e„)lúÝ)›§la оÑE´1f׳œ”Ag߆˜%Ò6ÒGOég\ùWÆåß 6îè”æ:@x{FAñâ+¬v¦Ï“€ãÛæpaƒÕÆÕv+ uè„Þûƒ»¯EF~°J5Ü” z+'IÀñiCæ*Öo%€î4¡\cœÉ3v Sý~¿8oœ>+ch@? àêHð<‹OñƤµ–Z{=[ NAI³sÆD²¢Þ–ê!¤“ŒwÏkܰÝhÛܲs«qÅC¿w¯üŽÖ{¡àsõ­žQ'§¯F©4+s¼£·ÏŠ.BWŠP¬16÷ĽÙmfÅæ2· ªoøf(x_á#’íç Y…t"|:JU¡ÐúÙöÛj¸O [Fú;sêöúê“H<ñü&ðeÛíÌ©ys—%ÌN"r:Ï‹À;Ü9+R àí±MF[Ù¾ÑÅ&#“L;û€ÔKMà?ºÍzÀȱi\>WV'dRØÜ›"³•˜š¤“qÆ·ÿö5¾°­_@jàÂ2ÑWóÀS]ëëÂǼ õÅæßï8£52~Øe‰;z, f,$6X‚–3]Ô˜¯ò£:×r\ë3ýdޱ{»ísøtN×ÎÌcöTN½þδ÷˜gwnP>üRùë l!éúÌ; ÐM “v& l2 ºÆ2a¬>‘­þ ðڤ§w™°=æªYqàMTöTžžÊò¯JiëУàFaZÕ— 9›ÇðÙ‚:™±leüж*'-m vìœvÞ˜T÷¸M+CÍÍRê|+°ËeMßäÌ»ê+j>ÔtþÏjXÚ`Å•›Èzê°œúí}™#í¾ººhà¯Ûjðÿ/²®??½~½Ê%ðëU._¯ò_=GÏqxØIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/about_description.png0000644000175000017500000000166711273045225026646 0ustar julianjulian‰PNG  IHDR?9óÂsBIT|dˆ pHYs  µ€7ttEXtSoftwarewww.inkscape.org›î<4IDAThíš¿nAÆ»w A Xüm¨ˆ” $ x JjJ^€@¼ @M…”Ñp%ˆ ! Nnw(ÖûÎkc+šK´Î'­|·^ÛóíîÌ|s^#"¬*ìEp‘¸"¿ªXiò¥ò÷›ªªuêÝzºíúÐ=ÛÙ9P¶ P&_UÕàÄó³>åÐ 8p„kW†W/àcíßk?€ûšvEh¯<¿N9|ù©¼±ÈØÛ뛿¯mS„ªÏ×€óË}Æ÷(;ÔÞ2dpÞ¨ÙÒ…:ùf©Ñ—ÓÊ/CÆ"8=S¿§‰zqò¡0ù|ÍâäK…fÉy¨§º ËÖû‡ÍQÌó1§; M¼÷N´mŠ0Ú%íǪÚhuTPÍ¿yïÈ¿ØÝíeÔÉ_f¨nû·`ïU†k/‡“÷£Î“ _?Ùþ¦iW„*ùGŸ«›Î˜½ïÍLø¼ð^‚°ñ.À®{ömM»"ÔÞŸ†ãw_í­©6º¥ÕkðôŽjÛ¡/r©+æôØJ3Nuùˆ IÄÓÒ´[œ;c¼ÔENW±F(-3[6 Ú Ï S«ÞÞ‚sUu“äç/MˆÙl{“±ÿYõÒ@Á(íõý• øyÑic_¿ŸM=_×!€ÍöñàçÅÄ}V¯™C¾;Y¥:­|ÜÞ‰ ×€¬|¾µíçä÷ì|™””í®úY´ï‘¼ja³Oˆö³‚\‘ðûÌ|ÞLoñ„®ÍõøpE½¤u>äfø¼í9à©“oçùù*Ï 4=þc£¿ò,–çK¶û²ÿíªäk€³?ÞB¿ ¯Ÿh?SÒJË÷ãø¾p¡%mWógùô6%e“Ú>?y› t’˜ŒQIÛc¸×'Ïüö¬ªº¬JÚéT7CâZ°9Õóád†]XÛ&§39^LÛgö0àÔËæÞo{à ÄDÂñ´x% /Ðx±'^NµmŠP=™aÀ<ÿP ’‡Ž : ‹c¿å¾¼ºÛËÁã•>–²Òçí¯È¯*®È¯*þ¼MZ;$ŽÈ&IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/about_license.png0000644000175000017500000000101311273045225025726 0ustar julianjulian‰PNG  IHDR?9óÂsBIT|dˆ pHYs  µ€7ttEXtSoftwarewww.inkscape.org›î<ˆIDAThí›AŠƒ@Eµ³p“Å@ 7Áµ;Á9‚{Ï!s€\!w˜Á¸"Äè¬28ƒÑÎT$JÕ[…¦èî'þêˆ õ}©˜Woà•¨¼TT^*¢åß\ £(ú²Ö¾MÖãvM§æ™›ƒˆP×u“çù§Ób#8ËÇqüq:b"úÙôßÏccKÖfYvþ¯8 ü¶Wy©ˆ–wnxc\.E1Y3ìèišr–{:,ùý~$IÌwð5Â’7ÆÀó<nÇ×Úy•— +óPUÚ¶­{4óÃzk-Â0|xos°åƒ ÀápXô»ýRÍ’-oŒ1fñ›%ÐÌsÐÌkæ5ó›B3ÏA3¯™ßšyšyÍüöÐÌsÐÌkæ·‡ÊKE´<»á5Mƒ®ë~5¦±fEDð<ÖZî’Oƒ-ïû>ú¾¿+?¿½×[ lùÝnà±ãk-ˆÎ¼ÊKEå¥"ZÞù¨+Ëòz<ÏÀø“Ö½ßÊŽÕºŽÝ›÷V[–åub˳þÇF(*/Ñòß–—Qª¿öEŸIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/browser_back.png0000644000175000017500000000162211273045225025563 0ustar julianjulian‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYsHHFÉk>IDATHÇí”KhœUÇç>&™&±(ml¥±Z[k Šh¬dF¬"©(m-h¤>VZÚ¥4!EW.t'>p!( vãÂ.‚âBºÐ‚fPë¦>ŠØši›hH:c[Û13“ï»ÇE¾ _BB¦ ºñÀá^.çþ÷žsïÿí¿6¹’à{Úw@®[[Œ9|˜¸™=®YñüA÷ÂÚÕ×?‰A&ôÌ[ïofŸm&(7d½º}õë;¶íiÛ°n³?ýÛ/·\ÛS¿x¶Žýc@þ€ïi˶ôXß3m'Î0y©Hï–3'OŸØÖywüÍx!ŒþmÀ½tßRèß¾÷ªRµH±üLŸÃ:Çíó™ŸÏü°»+g‡ÇFâòRféœÓœ=ºë¾§W[c´|gÖxNN£—èËíì@£ÏzpÍúû±ŠûdûÖÇ»:W­1?M}…5>q"|;ö)mí+$G_§ñîÈûðM&n´oçºû¶voêñ?N|‹wž–LŸ1¨­c¼òõØ0ë×mp·n¼«;»Òjª¹A7¸å†žçÊïÉ~ÿëçDRÃ:Á8§Tâ2ØkL`òò(½›vç/œ¿©ý¶ a¼¾LëÍûh½vÇú5›>|vçóYçš±2xvòTöÅw÷Î^ÏKõ¥}ïµúŒ£RŸdÆVðÞ €*'¼ùþËÕ¨®­‰Ä œ ‹F^‰î_.5Öâ3žËµ)|‹Á@UÅZ!ªkkáÕhÉ–³l«0F¨D¿£6ÂeãAƒ"vùV¶<@,Õp1`¬à¼Á8!ª¤‰V¹@’×5÷ªQ4@ˆUÐx¶Ðs¹‡8ñh)€>YsÉUx k?*cADf#B˜#t$Â3ÉØ˜«[³)q”†ÞxjÕ2Y(5“2mÜ(EY î@MâÉù ‰G©ÔÌõÄCCt1K×Á¦Äu )Hœ‚è¼ÊüöV !¡~Ãä"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/browser_file.png0000644000175000017500000000100511273045225025575 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö Öoyœ¥IDATHÇՕߊÚPÆs¢WݽUÄPT4JÙíÛô!Ja·ݵXû`ýGAQ¼Ú^ …Ò‹%™^Ô¸gcv“S¡ÐCÎ0É÷Í7ß9þ÷;OF¯€ËcUõêÅó‹—™Åñd¤ÇÆx2R³”E´^¯ñ<UEDù#ÔÞ'¹Õ9õzý+“ÀšÏç`éèõz¨jf-— ÝnS*ݾEÑÆ7c ªJ·Û \.ç&øôù#ÁÙa:æ‚A@EŠΟS«ÕÃ~¿ŸýáÎû„9( CD„Õj•« Óé¸{¬F£ñ ÏóÜŽiZzbºMœ‰ÓˆÞxÇ“áSD„Åb‘;"ß÷ï­eçC*• Ûív?"cÌ^…=šdDZ››Ía¹\Ràd²Ífóà’¥}qV€z0 þîØÑjµöÝ&§ŸªêvL«Õjî܋Ƃ8ޝ߼}}q à×/ßžÙù}‘pœîÖ ð0€(pü¾?€Ÿ»<ÚÕÿMüeʰ3¬!ÁIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/browser_folder.png0000644000175000017500000000124711273045225026141 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö ÖoyœGIDATHÇí“ËkSA‡¿™›Ö´‘Z+辦+Qúg¸U)Dª7>@p¥¨+IkE¬âÚºE­m‘´]¸PÛhí#ï›{sgºÈÌõ¦mÓº¤tšzzv7ô¥”8ŽÃ£Ç¯¥R©¡t:]hªàTj@÷9ÊóiÍØ·?=éFkó®¾¾7xi‚d²›/ƹp¢×Zܸÿê"°099ÀRÉc>_mió=ÝÇh®ë’Lömìl€Š×¨\F;VÁfZ(—Ë›£ R˜ùk r¹²–/® ° :Úý æSÒ¥@)RšÀx-âe·ŠÔÁ´]o_‘ˆ*¨ŠjM¶h´04QŸ´@£ÙñciÉ—A¹d’W €d²ý™7HGRõU}/AZ½!¦´R»’ï?óBºó/Mòž´L|ʰmûN²ËU\£ÀîB¢¥&Ì Ñ£ê+æ— Alá-@{Ð ßÕËÞ„Cf®„Tô"¶9žº4õD¶´)¾ÎLéB¡Tø’™.@Ñ*ã㟌lð‰âÔ³[s³s³á€© $ 9n$JcSŽ®³cŒ{Æ+@¨ˆÈÇ\LÌ܉Œ$ˆUµ2s ¨E\è?n+’PÅ|IIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/browser_new.png0000644000175000017500000000125211273045225025453 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰Õ•±kSQÆ÷=_rõAžD!›H éP¤ƒ[+Y3Ò%.v)]üÁ-³PìRJ  ¼AºØÁ "””@‡¢mI2y4”¤yï8ÔÄĚט’Á.Üsîåûî9çÞs•ˆ0MSen„-*¥–b±ØëH$Ò—°Óéœ{ž·""û¡¦i¾2Móã8¬¯¯}âÕÕÕ–çy·û¹4,ËÚrGr¹œ¤R)ùÌÎÎþ÷¸†j ”ŠØ¶]L$ÙR©ÄÂÂÝîØÙù+ú)RJݱm»277wo{{›X,F£ÑÀ÷ýP‚r¹LÄãñËz¡h­?òçH§Ó¡)±¢–Øl‰ÞJöyvtŠ´ÖjmmÓÓSÎÎÎèt:ø¾O¡P@Z_Z´_¶ñ¹íà-­5¶m‡¸®K¥R è}u¿J³ÙÔÀ²Rª."µÐw0 î;';¨”‚€ <„ÚA ß÷£¸d©ó˜L@‚g,8Á_ü•¢çÔ/¦µŠŒS›Ú€ðLm‚ìr«·w"Íw›}?âðàãâ¾u!ó$Cò~ÒCX>½hÇÁqœßŽ]à+è›˲8‘öă˜4—ó˜ÉÌP-V‡Ö¯-°÷yoÈvß»CöÔÿƒÿ_ _‘|>ß-‹áíó GmÕûô•ROäuȰ%"߆¦…©×à'„Ç-[QÓ IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/browser_refresh.png0000644000175000017500000000254411273045225026325 0ustar julianjulian‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYsHHFÉk>ÖIDATHÇåSkLW=÷ÎÌÎìì‚àò. ¨±HP‹Vj«5McÒ‡ÆljZ‘Ú_}¤‰IÓþiš4š˜T[b[-`£MÚjlmb Šè"HQB} qYö=3÷Þþ`1°²IõO¿ädî$ß=ç;çÞ üojóæcÒ¿é{¶êhîêwŽÍú'ñKw^¬(ê' XgY,“ (%~JÉãâ,ü8ó×jwšS{V½Û˜Î©¸d1¬k;T~/Ž€ e»~ªÈÖ矙g[’—&;*(%0 ‰{¼¬­{00<ÁW~ªìsJ…AÝŒóÅ‚ðœkµoõÍ*P¶ëè÷¹™I[¶½²L˜ ãþ0tºª@¢¡?ASëÝð•†à\S”³ £wØôŽó¯ÔUô€<¼¸òÈ*‡¦¼±¡tþÍq7õ)¥gB+Ãå ­*Ìv=! „Lu% µ•ÙZïýG /­Ì!×»‡,ƒK|Š“NÐd¥*Ñ©:ê~k“Ø5%Ì8?v¥¶œ†(Ò‡ýN5÷üüÅwÍÁ«]C¡J áQÀBIAQd Æ8d-<»^îòWR‚gQnF›aX€ï€ŽêrOË¡ò«—ªßÜjì¹?/ö¸þÒL¶SÌOÕÑÔ1E¢`œ“H<‚CÕíêÀüì´š9ºVB{˜°ybÏÉ}°üºaZ»'†”`W00 )Œ ¢pù±ÀŒ3`œSœö¯ìÚIÃPŠ9œ0/m"V ¸²~©Lɉª×Wª©É:2SX[˜U‘`qAl,Ž€=3+ïÎñÛ7rÄ©âÊ3‰ §úãîˆàB“_Î…Í`Çûg\ӒʆQ8g#>Bù†G6W—Ó7l7€" º¿=ñ„IõŸo”m2@@6,|ZÛ¹;ìýðjͶöh_dÒM$ëe…EaW‚‘Üþ÷ý²þ‘‡µI™5"A4›Œ³à (ËOEã™[‘¾ßwME}ì´2w¤K*¯Ví¾_½až:î÷ï´É2›ÞsM'§6-Žì€öÞQA YZ²ýè¼'òÈ_íõ+:ïôì „s ÅíCÌ0A€åyIè bÀC±÷ýµÆ3]ëO]ìí*ÝÙ°Ÿ3ÑAú¨ÂdÎÉ^»ª$uÝXkS$ᚣ›žñP]\IÁ‚§æ b1´Þñà…¢ùRiA–Þrkè£Á‡¾ð਌’ Ý¥#?/ )IÒðûõ°n q(!äîƒ ìþ¶iœÐkÙ^,ÎÑ< LEù™r!Ëp2™­É,‹cÜAÃm~fš4ý°=<3Åië¬â×>»|£?ÐwóܦîÓû÷Ý$^èô,ôúÂE–h¢ÃFœvBŒsø‚Z:ûùÉó]ߨƒ=­Gª¢œ‹}ZñŽz°sK÷©/o°G¡e­Ø´<}Éú­Šž¼”¨U1ƒKàß…‘žæê¾ËíBQ£˜!@–UT¿úWý{çhÔiP¢$‡K™›]87èòFz<Œè»ˆDÉ}ѵˆˆN‰cŸ0£0XS±ü§õÛé68˜\¹"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/browser_root.png0000644000175000017500000000162211273045225025646 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö Öoyœ2IDATHÇÅ“OoEÆ3ÙÝÔnŒÝ8ºˆÚBªhDUªÐH½p€€ª¨µdU‰ (ŸÀ§j+*_`…TH' ‚ Ò:R/=÷ÐB9A‘5‰B\»±w‡ÃþÑÚ‰K1ÒhßyçyæyÞwà?¢ßÄd€Šÿûú,üü¯Ý¢çJ vMS횦*ò Ÿ]A Î?åM³cݶ,€³°Þë¼ìüñÝ»ázui Ÿ°r˜Ùxóþ}†ÒéŽý~IÄaàíÕU¤¦!s¹Àò¦ÉV¹Œ‚áK—zÚ%{«J™H„à¿M]dí½lËbäòeÚJªDtÏßåMU«y ÇŽa[õÞgóô+¼ðüqNÕvX»v¼i²Q.côPÒM ò¦ ìíA2‰mY<5¯ò׋'{•x,F³Ù$¾¾Áù9Ķ1¤ If#¸ZüH«F1<ŒmY¨O-d:ÍkÙÙlÖÛW°÷ÒIôÛ·Y,˜)ٰ틬Eâx(Ëøæ+ښ΅ó¤R©0Q)@*•"}ï‹Ì‹ý·é[?â,|MKÓƒ¡¡!Ç阭V ÇqL§™|ð€Åùù¨Õ!nG îœ=;÷hyyáüêï|ôñ‡ûˆo~þ®ërã³y”@µ›íÊyÊ'ׯSN$9s¦øîÊÊ̓,bryùÛ+Ó……‹ÃÞ£;!¼{8ŽƒR %$¹IÚ«KˆìÛ¨‡wPJQž.;ùò—¬¬ô¶(ðØ0 t]GÓ4t]Çuݤ²½ À/lá8nxƲ,Õ«Z”@J‰”C®¡‰*®ëâº.m ~ýs€Gµ'´Å`x¯÷·)0Ö¸dh4=ðL&ÛÆy'v©Žó–ÔÙ\'JÆ{hí(ðã `X \×àqm ±³Ý!½Z­Ø8Q"°Ì0 R©ÉdÄ㌎ŽR¯×™ššÚW·x<|Fu@u³ ߢĕéB•g?|Kìé–Ø4èê9ßÏ æï9~î®·€ào`xÉÙïW—"éuÿìÊŸŽ?ÿÇøê'V( µYBIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/chord.png0000644000175000017500000000113111273045225024212 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ÖIDATH‰íÕ=hAðßæ%Ä ‘ˆ"¤òƒ ©DlÄÊÔb)ˆb¡6b#v ‚XØHZÓb¥I°S!…¢ˆ $…A j$f,nß»Ü=-|…àÂ2wóõß™ûï\н\}=ÍþàOV“!¥4ˆXÇRd6¤”0ö›¼_"bDDÇÆæñ‘÷7<Æ>ìoÓ7íe¾ÔNÓ”ÒM\ÄÜÅK|ÇœÅf\èRÁ)ìÀTDÌuT€}[j*Ö1Pc?žã¯vèÛ±‚‘jp›Ï¼ÇÁŠ~[Ž}…þ ˜Ìè÷›’—߸AGA†CU[IÓ‰,_4ô¶l熹’RÏ•=Œˆ'U{IÓíY¾­IpCõÓˆ˜ÎÏ—÷ézÝ¡J€OYVÁ —xÉqÓ)¥!œÄBD<«([ô&ËɪCDìˆÑˆÅžŠùq¯.y™ ZÆgÝY4¬ ÃL~ŸÉﻚbú2È:.c+¤”F«É#âtE=ñ®km'¼¦ ÛW<ϙâž^ã0ZXÅ|Wj×´á(f±æ×lYÅsœG+ûgÛ­n³¨Ò’MŠñÐÂbD¬Uì» šˆ…¦5ü­õïÿÑzð­"Žé4•ÈIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/closerepeat.png0000644000175000017500000000062311273045225025426 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰í–±JCADÏDAÐÞBlµ²be‘.ëþ†ÿ öZØZ –i$`eiBФ2ŒEvuóxòÞ lpàÂ^vöÎe‡»¬l“­¬Õݸt™æ  ~È߀§Þ—í¶kpœñXu&ûm¿@S“€‹$?”Ô)á538Ïf²¤+`(é¶Š[†:ì6H=8 …à÷ ¼=à¸aåø¤ã`i{²&Ì€¨Wˆeˆ¸Ñö ÜØàº@T,BRŸ•¹÷À0J¶?m¿—K;¨Â"t4¯Ám.`ûhÛ¾ÞD ö …Ê3hÿ¯iV4}M§Àðòq•ÉÚú_Å7I•þ@E蜠IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/division-type.png0000644000175000017500000000110011273045225025712 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<½IDATH‰½Õ»kAðß¹Fr}‘ Š#*þ‚ ((ˆ–b)X‰Vb#––6þ B@ðQØ F ¤ì")¢…ˆAr#ø@űØ]–»ñ®zXØùæœùæ|眙H)åè´uˆˆñVöm"ˆˆ XƒÝ8ŸRzó;Ÿ¶\Áu¼Å¶aÚ¬Æ>EŸþ)ADtÐÅ5,`çP~+å "'’tpxǨœÇRJwþ„ k8)z)¥-ƒZ—iÛ16„Í=\Îæ§ð¯3ìâßôRJªIDÀÓ”Òb†irþ¿EÄtm}ëkø$¶FÄç [—Û¤”^ýÜ3¯¢ˆè8D½©ºø‚ï¶3‚IÙ¤ñ+7›©a—°«†ÝlÚcä9H#b^ÑÅ"b""®FÄ]l(±ý1§Wd Ëf,)®>îã–_º÷°7³YÆ\“Dõ$ÏbJqßWÑõ‰®šox‰XUbïñ$;ô‘ê¿Þh38¬¸)+‚ìÉ>`Û3‚ÅÒw(‰¦ð®  Çp_K‰žaSf³Œã•ØPžGñg؈xˆéÒæPyòsè •ƒQŒ‘÷Áã~¿þµIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dotted.png0000644000175000017500000000064111273045225024403 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÔ¿J\QÇñÏ/»!E m”`›T±|±Ú*EȤ·µLí+"ˆyÁÂÎ,ÅÂB@lò<^Ͳ¹{ïÝÀ- œáÌ™ïœßNJ)ú´g½VŸd%É»ÞXA¯€²'Àà? ǃ$Ë ¹ xÙ’J)5Ç?»$_Î=¯ü[ÀüxÐÉñûÕz„]Î k[h°$#|Æ IJ){MùµCN²˜d3ÉY’Ë$ŸðªÚ^r/Õë­M‘ãßQ*ÿ‰Tû±‹A›D“C>ÄÖjnw‹+œvhzãa=9ƒ¼Áj à7qÔ˜¤ÕIt‚þHô _ð¢ë«{¬5ð[8Ç5¶ñvÖâÍ ëý/ºúÑ·—ê£IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/doubledotted.png0000644000175000017500000000067411273045225025604 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<9IDATH‰íÔ½JQÅñß †)"ƒÄ[\$B v‚U*+[ÁÂשR¦¾eÈvéƒ`,,„ˆùOŠœ˜aoaÃYsÎYÿ™½‡RŠ>ãN¯î“’,%Ùè €%ô ¸QÜnÿ`ª)’ GœÅýœ¥”ãKÏæ°KòeĽ»5ÏÇL7ÅX‰M¼­ë¶{sxÙuoê*t$àO’<ÄNÕO“Ì•R¶šç;›œäQ’IŽ’œ$y]ßð¸®7ü‚ƒª×“Ì´ëÕUŽ|E©ùgxW÷WñƒªŸãöW»É{x€•ޝ»Ài5‚T¸¶.¥¬ýyØîÁ.±Üø‰=ì›$®)Ñ{|ó·D?ð÷Æýë.½®Ìã>âÞàÙ¤æWzÐGô>‹~%Xÿâž&V¶IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_f.png0000644000175000017500000000054611273045225025055 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ãIDATH‰íÕ1JD1…áï<¬ì,Dì+qb5‚‚¥¥ p®À5Ì,]6®Á^°ÐA„k3í̼ >ôBŠÀÉýïIn’T•!£4û?`P@’.ÉE’q’Ùªj¸Ä ¶q3K×ä I‡+Üb “u€]Îi—vd§Óé{’Õyú–-:ž&8ÀúÜ‚ZžŠ$wèªj´HÛÚ¦{¸ï#l9ƒMlàaöñ…Ç¡#DC-Q[.µN¹åÐiùöòöþ/© äËå<ðœçœs禪¦8ÔèÇ.är’Õ$kI&;l1Éz’ù¡œÖ)JrøŒ×8‹q¬ã–ªêÙ~*x‚Y¬b›xŽ·øŽ‰¡¬ªj:x‰ŒuþüÂÊ(Þx_ÚINã*îvY_I²‹‡¶“œ«ªÃø--ºˆ%Ìà'á>º f1õWvc{¦P˜ßƒ­áS·õ‘ov÷ûì]±Uà6«j’Œáú€à¾nù3ÛL:ˆ ’œÂ½`𵪾õñGŽi’ø€]¼Ir—ð¯ú‚côá#¾`¹óŸv‚[8ß4=¸6€MãLëh^vÿjGë?ø?~ ×SheIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_fff.png0000644000175000017500000000104211273045225025361 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ŸIDATH‰íÕÏ‹ÎQÇñׇ1=™Ådlld1™šBŒì¦XÙL¦45 Vþ%%%å¿{D Lš•f£Y™D")%®Å\zæÛó#2Ù¸õíÞs:}Þç{î9Ý”RlæÚ²©êÿd<ɵ$g«½-ɹ$7“쪾±$W“Ìý Én<ÃŽ&À\Æ-\¨E|ÄÞ$ÃDJ)]?ÜÆ;´°€=ø†K¸ˆó¸OÄClߠѰ‚ùz¦Q0‰Tÿ2îþŒijt,Q’V’QŒa)I Ã8‰/XÅ`-á>¼HÒ*¦¶Kæ³xT³½Ìã-ÞÔót-I©ûlG­å™ÃW µùVq½ÍžÁwŒtÓéÕEX.¥|®eÛY/y¡³RJyßM¤àq›}¨îMÀ“]/y+6ÄãU)e­Æä8Ž¡`ÊÆ?šÄŽ~€Fæ#Uè˜õÞ~dKzªNêŒb±”ò² Ù9Gðp¢úîàT{Ï­OøT¯AíØ¦8€ýmöNc°Í7މ~⥔_ã¾iëß¿ÿ?\Lý¡ÜIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_mf.png0000644000175000017500000000071211273045225025225 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<GIDATH‰íÕ?K×aðϭ‘‡(D"Ð-¡…@’ÀE*zØÖX/ Ðá ø*¢=ˆÈ!ššl’OƒÏßßð[ Î=‡çr.O%1κ0Võsƒ±TÕTU½¬ª÷U5ßIJ2òÁ;|Å^uqªWL«ê1V°ˆI<ÃkLaÓ8ÀŽp”dç_K}&p‡I–«jO°†·¸Ž…ÆûäS/‘~‹Ølø"Þ$IU`÷ñûô±Ué1Š~“IžMrÐð-üÁ=üÀS|Æq—HgŠªê¾7|¿.L$yŽ`7ÉV’Nqt§7°ÚðUl4|Û]ð``ÒFŒç*N03ˆ;ê¢ÝÆ~’Ÿƒˆ£¬ããPÌ3Žæî8MÌÒ0==7¹«ªj7ñ-É£¡zÎhPXHòeèžó/óÿ7ø mDã`1*ÿIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_mp.png0000644000175000017500000000061311273045225025237 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÔ±+PÇñÏÁ –W²X,”b0Ú Êô²ú,ä/ð_EŠb°Ù”2Ø¥d ”,²ð”"ŽÁ5xzï)½É»uëÛ=§ßïÞ{ν‘™:9z:ªÞ5ø}­‚±Š*¦q‰=¬à.3ç#bëe£ÃXÊÌão"™Ùtâ …/°XøÌâ ˜ÂV£F»+ªb·ð6 ¿"0µÌ¬ãƒM "bW™ùýxÌÌ—®žÀmY›Áa£N«Lâ´ð8΋ñ®ËújQÇ2æ~}Üc¿ð3¶¿‡ˆèÁ|6A-3~¨´*r›Åf»¼¿¼ƒ^ì´KŠîwÝ5ètÞà倩^_´93IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_p.png0000644000175000017500000000047111273045225025064 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<¶IDATH‰íÔ1JCQ…áo‚^p‚ˆNP7ae-¸·‘-ØYÚ¸µ2]ŠÔ6rlBÚÌ#¦¾S ÜùïÜ©$ö©É^»€ÿ8êVÕ#.1ÃIVÛ|C&¸Æ*É >pÕ1 \ài/pòg€ªšà,ÉrºÅKÇÛÝÁ)¦Uuc|'ùj=®s‹ªêç˜âó$?@w‚^“<7ë7ê.ùoC›Óü¢]tø§bŒ€Ýõ Sº-MÕÁIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_pp.png0000644000175000017500000000057111273045225025245 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<öIDATH‰íÔ¡J„Qào‹¦QÑd°È²‚ X,f“øú&õA„Å&"ˆÁ$V‹ˆÁh°h± nËÕ°ü»?›ü ‡;çÌ0÷ÞÈLãDk¬êÁÿ0˜¨;ǘÃ:ž°_ê.ÐÇ"2ó¦R 3Gn±Wòst°´±„«aõµ`½’¿a¦ˆždæGD|®#w³hef¿P«x@·˜ÁV™²utÑŽˆm¬á>3?#¢ƒéˆxÅ!vþj°‚#lâ.3¯ ?…³Òýnf¾U¨YpËÜ<.ë.ÇOÔ½ƒG<p“8­©ûE4ßucÐŒßàÀPŸ:Û$aIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/dynamic_ppp.png0000644000175000017500000000071111273045225025421 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<FIDATH‰íÔ¿KÕQÆñ×G”0®›JДD rƒ¦¢-+[rnuuq¶þ€œüZ"(rJ\úAƒCkmÕ¢[ÐħÁãÜ/´Ü©{à,çóð~>çóN%1Ì56TúÈàÿ0ï*TÕ&~ã¶“¬VÕ<Äf±œd·ªÖë*^c%É!H2pã#î8ºåô°„·˜Ä ¬7íûV+lcö˜3pDUu¿’lµN¾b}l$ùϘ©ªqœÂ“¹}iZtg0oÍlgð —®·n/b?Iªj søp êÊ sUµ€{xœä°ªÎc©ª&q ¸‹³Uu‹x–äà_ Öp»Á_UU¯ê.c1ÉϪêãnáE’¿H¿DïÄÙ< }Žé®ÇÒ•ÁV’ï'Îðt€v'É^G¾ë‘ÁÈ`øìÇ·…AaÌEIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/edit_mode_edition.png0000644000175000017500000000140511273045225026563 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<‚IDATH‰µV]HSa~ÞæÎ6ç6wtmÇ’$ýŒÙ²Ì²È°)±èÏ›‚©”è"Œˆ"(ºè"‚ ó¢sös$E¸2Žie!‘9é"HF:Qß.öÓ¶dž¶|àå|œïûžç}Þ÷;‡˜s‰ysAš"J劈è…Rb"R\åMú%E5Šä)$׊·>°î¿°[o¶Œ…Þ§(Í..¹É$¦—îugU*S5ðªÿÌ%- ËÊÍKö4çì:^¡UÁ¬fŒªþ“€>oÙJ㺠+«—š@føÁš°€ÝnÏNÍuÝul¯^`Q FZ„ƒ„Ž)QÙz×ÕÊüŒ´”ÏžQIË´@虚¬ƒMל=æX©Õ’©Z»£Ökrä$c:™ÕZLR —/ÞPs°jŸÕ’©€û õÒˆÓ^«†!éO[¾|ìíºv;ÛUAD#Ìl Ž 'j´«?²"rMKë3ßsyØ—m›ïoj¼qH–åGáIfŽFBãm[Ên}ïäéŸ}QÑùÊý«xua¿Ó鬈ݯ¸Eù‡/_<¹Y£CÃ#S·›Ÿôuöô{Ú=òÍÁ¯m3íûK€ˆ\.P‹eѪBG]Ï»ºöŽ®Á¾þOo^¿ívËÝïï0ódÜÌbÊQÀ` À$€ ?ÒMFÙd4´Ú%ëQi³•5Š3Fà!€iŒ)ãlÿBáSDD5¢1Î̺¸eˆƒðwÀ̆fX3(y”@ר{~×’ˆí Àã ñ€{2­T"ADüÌÜ›TöPpU$‹9ù«ˆÄoŒ˜‚mÅŸ­»IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/edit_mode_edition_no_natural.png0000644000175000017500000000105011273045225031001 0ustar julianjulian‰PNG  IHDR szzôïIDATXÃÍ—?H[QÆÚ4Ä­–&˜nf‘ E(.Ž‚n uÐA']]‹…]ºÄN¢àßÉA]\DB EÖvMKlCãr.ïOîËKâ—\¾wÎ=_ι缚Œ'| Èe Ô a @(Fð~­ü¿ä€ã0îåówÒ@g-lK°Ì\K#30¼³q¨w ô/l”"àœ¬7â8è–>Žô8Q— |ž|%LþT´ø$û6—àEà½MJ†€,Ð Ä5àÔ°ßÞ”ä‡m;U€y`Eöκº û3Ãæ?ðÈ{¥>Ãê ;à°§,öçêÙµ´ÀNXêÀ1áž…+öÓÀ¦<;R|hýJ@Zñß…ûåq¡­uÀ²MÊþÄÅÇ/Ð60e;: Ä]Ê2êá§3ðÚ¸YCÀ3•þÏ>~iÑœ\`ݶÓÌqL»²ÿèózí0škßF@§rü*·ÜÇ~RƶWð9ÉbÕH)ç20`ê´,3$T&TÏÏVaiß^Õ2 ŸVÕ8TÁóQ "[¤€7aQ,"?eY#Vç̬º¼ºë ³¡‡Å•íÄ‹ Ÿ?¼(M­?Äk¾IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/edit_mode_selection.png0000644000175000017500000000215511273045225027120 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<êIDATH‰µ–oHÝeÇ?ÇÉuWïœzõ·ëorï²iþ»×Y35¦¾¡Õeôb­š!í_Êre#†,ˆ%rAÒ›ZØ"š2¦¤KmäÌHÝÈÚfÄd(³;4wÑÛÓ‹«·Ëý3†¬¿7¿ç{¾çœïyÎó<¢”âÿ´ˆ‡A""6É‘#Akk­ --­(33ó@DDÄvMÓæÛÛÛ_š”R5þ¸ÈÈn° èVJ 6:Σ""š¦ý1??ÿ"Ê?¬D"+"©@Rê0°Àáp<]]]Ýl2™6èº~Ûår½ÔÔÔôS8žˆˆØü t‰È€èº^¦iÚÆÅÅEfggçš››¸Ÿá*˜LÀqÀ¤Ÿ †D£ÑˆÇ㉠ål³Ùâu]/ @)倓Àmà] `aaáÎ*nff&În·ïñ÷µÛíÛÓÓÓLJJR^¢(À Vàeà–ˆ”æææÆ­â‡¦iÚÉÊÊʲâââ(—Ë•[RRrV)µÜ××w)(€ˆ€W€·€ä•ßO;LÖÇÖ©„Æ®ýJNF:‹ÅT[[» Àívc0ÜÓÓÓ]>ÎÕ9‘ à t_WëDG'lL/z²±Í–jŽáÎ`›—fÈËu`0<"²l4Y\\Œt¹\ëêêÊ•R_Ɇ€O€¥Ô]_ƸGâs .4~”²%. k´Âj„ÞSÇ–’âgŒN§³appÐØÝÝ]¡”zÆ_•U‰Ü@±RêÿÅ(³9ËœWz¡°áƒd›i—<®õwz~¹òáèèhƒˆìùï0–ö3@)õ{à‚!Ñš›SÖùÔ÷’m¦ùèùŽ¥sgNk‘Bà r°Bô­·l-Õvî¾^svJíïR'.ÝT_]¹©yû^vvvýJßÞî`ïìœ ä Ú¦ëSÒ« *Oí9lµ•/óÏÛ¾=_7>>þÅ ô5þ;¢ñÎÔ¦ù4ßœõü¦ÒÚÎú/±—¼çÓÖ?/×·obb¢@D@b`n¡ò°lÍhÉÜ–wpK•3fK x³‡oÚŽO öìõó›%øð¢>PqžÝÞþÎë1^íbÃÜ ¬ÑÿÐñþÑ—û/¼@ŽRê0Àµ|TÂj3òóó÷÷ôô,«Ý{ë—kŸ}nR×õÇCm‚•&Wámì<ÞmÞ Dáü¤¼¼üãÖÖÖ™ŠŠŠßÌfsf8r?Ÿà teŠˆÜUJÍ•»[óü öP^÷³Ä¿:FÁvIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/edit_redo.png0000644000175000017500000000177211273045225025064 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<wIDATH‰Õ•MH#g€ŸùËßägÆ 1+k¼y(¥T ½õ’›õ°o¡÷Ò“'îÍ-EÔË¢öÐÚâA)HVª©½Øño75Æ4ÉL2ùzи®Ýº…¾ðÂÇ|ÌóÌ÷¾ßËHBÞeÈï”þ_Ô‡6%IŠ1à#à} ìËÀ¤¢øVƒâ‚ÀSà(âNæ€à+@ªÅ¸aÕ€7IÀª¾›Y`ú!É]¸ø¨\ÎeY~iF2 ý®(Ê àåÉ%ðoq"÷ žE ïóùΦ§§s¹œH§ÓâøøX$“I1;;›1MóàüNÉ~>¾À%„¸:ÚuCeà0ÚÛÛ3ñx¼1•JUvww壣#ÎÎÎhkk£©©IÔÕÕI¿Õu×í´€à2Bˆ¼~‹>B‘Härcc£auu•D"!är9NNN0M“t:-…B!b±Ø{KKK;;;Uû:JUèmÁÀ³°° Åãq9‘HÜld³Y„hš†eY¬¯¯355¥´P;j š;;;¢ÑhÃÊÊÊÍC·Ûªª¨ªŠišÌÌÌ0??ã8÷°ÈT·'9ßßßoïïïkÕ—u]' ¡( ¦i200@__@à!Á‹Z‚twww8“¹’{<t]' ª*çççLNN²¸¸HWW###466âr¹j Nª‹Û%*çóùl0 J’„×ëÅçó¡ë:===ôööR__ã8‹Er¹£££ŒÛËËË—À£[¬ÃZ'ø¢££cÁ0Œ²¦ihš†ËåÂãñ‡innÆ4M ÃÀï÷ãõzq‡X,¶ |¤x5ý©7Bˆ Y–¿÷xÿß<_ó*RJ^¤ù^¨úОç¢(0¼Ü’ÀoÀÀ×RÊÓ;ƒ¥”Ït`xü ÈÀÀ Ðæÿ7âŸea/Pè¼ÄZÄ?õ¿éº~¤ëú±¢(E TçÖË| (€ |¼|Tš„+Á`ðÁÆÆÆ¶af©T’gggòøøX®¬¬œëº~\Õý‹f€ÒØEQÖ›wèu(MMM}³¾¾þöå奶¿¿¯ NNN ³³SF£Qenn®|xxªgÔ+¥¼nòÀK­CJ¥rù|~dooíímÇ —Ë122@<§··×Éd2f¡Pð÷¥”ßÃí=°¼¦Ì0ŒW3™ŒÌf³X–u3y¦i¢ª*ªªR.—ÉçóÚòòr»¢(!à½F|ó\x*•Šomm UUczz×uH$8ŽƒmÛÄb1988X=88èkÄ7gðÈ ‰Dgff†X,†ëºhšF"‘ ‘HljÅb\__+mªª ¯ žÚÆ@ à&“Ißìì,ýýýD£Q¢Ñ(§§§øý~VWWéèè §§‡¡¡!,Ë"•Jù"‘HÍ ð{‹þåä䤽¸¸Ø¹»»«„B!Âá0‘H„ÑÑQR©ÃÃÃhš†eY˜¦I±XD¸+ƒ¹¼›Íf_3 ã#UUµ@ @0D×uÚÛÛI§Ó„B!\×Å4M¤”¸®K2™4…ó^=8çÉ6~ I)·„[€ÖÝÝÏçCUU4M#‡‰Çã´µµ …ðù|‹Åšã8_J)ϽßoJ)ïK)Kétúg!Äç}}}×~¿ÿVý_ÜxI˲®‚Áà‡Íç´¦€ÇÀ-}@ñã8ã]]]÷ªÕªV«Õnjî8†aË國‹ ¼???kÜo6ùY¶³³3Móc!ļmÛ.<¹#*•J­Z­úkµÚÇqÞYXXøµ5ö¹ ÛÜÜ|Eñ–âeÛ¶SBˆ_lÛþ©\.o---yþ þàߨÿÿÒÿ üb ÅÎÞâ+IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/edit_voice_1.png0000644000175000017500000000043011273045225025446 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsïïyxÛtEXtSoftwarewww.inkscape.org›î<•IDATH‰í•¡ Qg] Ð5 1Tq = )‡„A$—Å€f8ñ“óÕ¾Ù—߈`H&ƒ¦‚öêR=«ÛìÌ´¸ÐX—ì@ººÒ›¿I5P×À©ùó×{JðÀ±*ȹ‹ˆ^ÝU©ÑWƒK‚_±ò£©3`Ü#âöwÁ7´ƒöOm…¼ª=Ú²IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/edit_voice_2.png0000644000175000017500000000054711273045225025460 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsïïyxÛtEXtSoftwarewww.inkscape.org›î<äIDATH‰íÕ1J„A †á'²…°žC ,·<€`£Ý‚"xï༰¶Q¼bao%‚b,vDa óÿ ²a`È›$|Ld¦yž¥¹V_ü A51"FØÇ;.2ó¦fæ¯u¼"[¼`µÂVGt€eÜãCŒ+`uD›í>Á.±Q«Œ± VÚÛS‰¬ÌñÇ.¸5ÝÃq‰é(pÚŠ?bØ«ÖðÖvÊ\«Vü¬K×¥%GĶL½ð‡±ÛÛ’qîÛd_qݧÑFż™S5Ú‘YÏ62SËXjÚ}ø€ˆ¸Œˆíflà&"N#¢ß™™SûxBâ;¿Õ|«Ÿéë¸À;Þp†~5ÀÐ.Æe›1†U²†LÊ6çÓ¶™Ç¦= °\/x[äÓïᱜh„ÍZ"pUOp„^‘q€çÒü[UmŠërãc¬v5ÅÊ ¢Þã03o;á3¢LÙ,þþ7]š>¼>é3¦÷òöIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_bend.png0000644000175000017500000000065211273045225025346 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰ÕÕ½.„AÆñ߈UøH6"*F¶Uo#Z½B4 7 7àÜ‚Bá hUDE‚„ˆbcÄQx‹%ï›]»#b’Édrž<ÿ™9gfRDøÍ6ô«î¹)¥fJi¸4uÔpÒxÀ&Í Àn @`;7`§Ã<ÐÂd¦ÑþìæÔPÇBa¼^Ì':u}—iD¼FD«0…³ˆhED»S—ãÌãUY0`/¸ËH)%¬â "ÞKE–é²Ï/UiR!ìgõã8Á3QaTþ@u7Áf°XeŽŸæp„W¬uÕ÷`XG+ØÇîÑìiA%†ó8Ä)}}.±…©^w\–ƒ§b<Æ5n:úye9Vå«ß*êµý?ùO^µ~HÖ.åJIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_dead.png0000644000175000017500000000063611273045225025335 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÕ».ÄQð߈lÖ&¢X­J-žÀC($žƒŽZ¯”è$*¡"›ˆ[áhu–ÄeIF±§öòÑà$“ÌÉ|ß|sfÎɉÌô“käG³ÿ ü Ñ~ˆXÅBÙÞgæ\Ì1ÆËv'3×* ` ³Åo÷ÁÌ`¢øç½U[Ôˆˆ^ÅÔ†àOh`Û±˜™ˆˆeÜ`/8é™%3‡š¸,ÉêXÁêC¹UŠÈNq…=Ôªð*_ÓÌl㢴¬‰±*¼Ê±ŽILãGѬRY¿–,¡Uì›)±vq§Û¶–¾4l ‹=#>ÄGÑy‡ÙøÎ óÃÏ”™¯xFôÎt™mé= þÓŠÿ/ó÷ ¼?Jÿ¨‘…*IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_fade_in.png0000644000175000017500000000051311273045225026017 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÈIDATH‰íÔ±JCA…áol,m¬ŒQò\b‘Bˆ•ZA´Q|! IÒŒ…Sˆ(÷^Ø Øf9{þ™ÙÙÌ4fŒê¾üo@DL#â®S˜™ƒæXaÛ©h|Ž'$ÖX4 p]¦‰Gœõ:ÛÃ|†—2~ÅÅ ª;²^`SæK½¯_§(?)+ìjë‡=‡¬ÿá÷UÅ;æMZôèozƬ)  <dƒ›¦€/ «jWÛ‡ö rŠÛ.]”x´ø»¿éÐ,>Œo<ÖÐy”IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_ghost.png0000644000175000017500000000063511273045225025563 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰í•½JA…¿#FE‹Xò 𨥲 ˆö)|ì|I‘ÊÆ&&D0]*[Ñ&Ø%¥DñZäRḭ̀‹i$ Ã9gï7;+3c•ÏÆJ«¯t,i$él©¯,i é&I0³`v€ —á]3à$Z#¸ ¨ex›À0,ÊÀèG2·>€ËP&¶éF2 ï*÷ÝibÇÀ¤È¹Ž#™…¿/i7ËŒJ®³àËu+/àõ’T€O3›æ \ë¡€¤  <…21@øÎ#™¦×x &;äžùWþ3ðl=ɇÀhgxMæÛ¸UøªðB-àh,õí¯ÀCê}Ùú—ùï¿>V¬¯ô©EIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_grace.png0000644000175000017500000000070011273045225025511 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<=IDATH‰ÍÕÁJUaàoUN ¡“†ÑÌ£fBPà ¦Ñ 4iî8Ì‘o!8²¡NE(*É`*»Á=Òx÷Ï+¸`ÃáÀÚ묵ÿŸT•ëÄ­kí~ã’|N²d9Éý±HU5v᪫O¸{§5¢?˜ÇKLãU’¹I:ø6ôü[ØDFqî4:Iâ#nãEõœõf$oðï0UU§½„†x¦ñë˜íÞÍ\ʳù3ìâ@OÞÍ÷ä=v°`hÈãÖÈ$™Åö𴪎’´Žìbx€/XuL¯æúîÁ•#ªª½$ð÷°ÒžÏˆˆº¯}Ž_83X‡ØŸdDþ-¶óúÙ*з쎻¦Ãø:Ɉžà'8íâZlu®Ù…èVñkƒ!¯VÕ÷V½“ÀÍú'ÿþ Ù‡ }àHIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_hammer.png0000644000175000017500000000073211273045225025706 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<WIDATH‰íÕ¿«ÎaÇñ×GÇÁQb‘Á3D”Õf ÊÄ? €AV‹Á&‹ÁdQNÊp’QÅQJ‰I û‘qž»<ñ<ߣo¾uW]Ý?úôyßw×ý#UeÈØ0¨ûÀ €$sI6õ$YL²gl¼ÒÚ™$·ð¯’\ï舋،ƒ8€CINöìN2Ÿd~L{w«êkU­â^››3k®àSëomí.¬Œižá\_À¥ªz˯àŽàqÅûi}jð’lL2‡óXü—€;øftŠ^àeU=œ&NßÇ®­þ{U}éÔ ýšv9ÉvœÂ ÆNÌâ#Þà UÕë©&UõGb·±ŠZ#` §'zýf¼ 7ŒŠXxŠkm{î¬Ñ]8†Ë¸ÏM¿„ý]€«M| “V4eÇ;얻DZïo'€¶àìøÜà§hý~8ëðKÓóe3ÔIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_harmonic.png0000644000175000017500000000075011273045225026235 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<eIDATH‰ÕÕ±K•aÇñÏÉJC— ´BÇ hhotPÿÉú¬¤%hé/hOhi¹K n.¢B£Ñ&C‹œ†û\¸\îûö^ïUèž÷}ÎùþxÏ{žÈL©+J¿ ƒ«U1 ™ù³<ÏáŽ0×ÞÊï1ƒ›ø•™Ç½œº/˜ÇAÇñSØÄóò~Ÿp¯/%3+-l—õ^”õ–»ò¾V1*[TÔÂãˆXÄNÏÞ£ˆ8+ëñ*@“Ÿ¼Ž·u:ýÓ 3`[»-ÝÚÍÌVf¶pznƒ¢wXi˜ÛÌ "Vñ "îfæ¼Â…ûX(yK8‰ˆ…¾ º)ê3UOñ “k€¯á ‰/˜™žuÁ;ñ׆6Ð>±½ðN|ÄØ¹ ð¤Þ‰7ÃŒáC üw†mQà}øfF9E[]ð}LtL‹ÉkìávÓš(…׳}²›åj0¨þÿKÿ/Pžn/Of+yIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_heavy_accentuated.png0000644000175000017500000000057311273045225030114 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<øIDATH‰íÔ¿.DQÇñÏaCÂF‚’DÉ xÑÙN£P)(ˆ„òÞ@¥Ò‰h*dÅŸF„ÑÜâdí{wï&„I¦83ç7ßó›â¤ˆ0ÊéôÀ樂SJËu4­zïqŒìTVDD¥Ä<^ðŠ…ªº:+:Ä4&pÔ¨´ÑEùŒÙ&ìáoŹýF`wØÄIæâSßê+vq‰„|dƒ¡Ç :Yí4Ü¢5 ` =µÕ ØP¬ä ë}zgàiÀÎKzk=.:esR!ø)¥9¼GÄcI©p OÑí{¯ ÐTü¬ïúo> \ÐÔ#Èô`IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_palm_mute.png0000644000175000017500000000076211273045225026423 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<oIDATH‰íÕ±kAÇñÏóNä@°Ñ& Šæ°EBzKc bá ÒYÚÅÂÂHlT0µU‚¥‰6&$ø,nö–ì¡‹{°ðæ÷f~ßy;;ld¦£ŒcGê>ü€vu±P‘Þb5˧÷1'™ù¾¶ö1&q/3wûz½ƒÏØÁ)<Åu<«Ô_ân×Ì/cëØpÌÌw°\òNv*õ7øT[ó lî\Ýoèdæ¶q¥"ÄnDÌV´Óøz˜ÇP@D´0…µÒ Ü,sÎàK“G ],a33Öêk}n”ñ?ná5Nƒzl`&"ÎâRfn5Ú újf.4ÔdæAD¼Â<~5Íc´‹¶†‡zŽˆˆ8D^Ço¼ûk@D´õnc'"&‹vÏKÞʼnˆ˜ÈÌï8_^W-½3ÚÁ,æpw‹¶‡%„™~-3w*ú7¬DÄñMÿhcÀÈñmF†å<‹F/IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_popping.png0000644000175000017500000000047611273045225026116 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<»IDATH‰íÕ1JCA…áïŠ] KuîÀEì² ‹ôº{Ñ5Ø¥H—eˆM6:ÂCŽ…©DÞCóBæÀ0 œ{ÿa—©$v©“v?þà´ËPU·b€%Ê×ÅÞð˜dÑÚ IçÂÁ`s¾Â \´Õþ鉒Ìñ€KÜ´y·Éàl³7m¦Î ¾é¼ª\㯘ô ¸ÃVxÂK’÷>ã$ëßþ U×ðà͒<÷ØV‡ŸÁ°À'äma8Ó0TIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_slapping.png0000644000175000017500000000056711273045225026260 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ôIDATH‰íÕM+ÄQÇñÏOÌRY°‘R²UJ‘²¶´açðx)æEH)eg©¬fça!v6ºþ‹¡ÌüËLQsênN÷{¿÷tN”R 2FúúPðÿIIÆû.H²™¤…kœ'i'9J²Ñ.¥t=XÆ;v;r3¸Âa/~´F+U¥ŸºM²‡É~T°€‚`¶ó…¯u‰UœV¢‚Kl!}tˆæ°»JÔüµKXü–C /˜èÆ×Óm4“¤£o¯xÄžºÁu¦èÞg£Ï’œàë˜ÇN%û1Rg$™Â¦ÑÀ ŽK)ížìpá _ðÁI4±ûCªIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_slide.png0000644000175000017500000000061411273045225025534 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î< IDATH‰íÕ!K%PÅñßÑ­ ´¸(XvA·ˆ`ƒÙ 6·ì"ød b°Y_´˜Í6ƒÝfPü6 &Çà ¹\áá ÜræÌüg.nªÊ cd Ý‡€!`p€$ß“üMò¹O~4Ér’©$GIþ$ùôf¶°&{XÀn±„•¦³ªš‡˜hè‹8ÇH6ƒVŸæZý"Ét𳪞ºÚ8Öpݪù/ޱ_Uw=Ú6~a®UðæW”ä7þUÕY¯^U;XÅλI¾a³;m+®0ÖJ4¯(É$Æ1›ä'جªÇW¾yÜ{Ùà²Õ«ßë˜Â.~ SU7 ßW\`§Ía‡ÎðñÏšêg\UýˆîIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_staccato.png0000644000175000017500000000047611273045225026243 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<»IDATH‰í•1 Â@Eßk hå!¼BZ଼·ðžÅÎ+Hl,EH÷-\$IÈJŠ|vv`ö1³Ë¬l“S³¬§ éìrBšàÏI…¤bp€¤¥¤3PUòç!‚íVŽ@ 8Y Ü"¹ŠŒkI`õ~Ú^´åFïàÚ»„2ƒ-*ŸÖÔÉ/k€¤5°OÛ“í{(¯Ë—)i“ªnjY£bOí«mZÀNôѸFE½€Ù™;,ª–0IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_tapping.png0000644000175000017500000000046111273045225026076 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<®IDATH‰í•1 Â@D߈­…­…E /`›Ná)Áƒx;A»\FK‹±H”€Y]Ñ øÅÿËÎ+þ,+Û´©^«î ð€~è@ÒÈ"<ζ‹·À˜ûªK`«ÙÈiÐÅvck`SëG€Um–EÈÃvÐ|ÄT÷S”/õìÜ%iF™w€\ÒÉö6ênÌ iBÓ›.¶_|¢î/9~¸Ý’âXæ·IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_tremolo_bar.png0000644000175000017500000000065211273045225026743 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰íÕ»J]A‡ñßÒ ^ˆEÁÆBAð$©…àø6Z ¾€¥&ZÛ¥ Öv¶‚• óbl²RdŠ­žË8§ .Ø3Ãÿû†¹°#3 ³F†J L+±×èFÄÂÀ™y‹õˆøÛ˜ÉÌ_U‹«½¦ñHlfæSMîCý_=âZµpú;äC£U¶©®2óEþ´;/߸§Æ|`“oxmkxÀׯØ*¦ýÌ7àg¸ÄxOA -ã;íæ_­ü´¼£ „q‡Ý.ðïÝà]2‡´ëï)(°Y\㨀'5ð̬{h1…Ÿå\ž±„­ÌüÝ3ÛÇKÇŒÖÂûÉF2ó¹:óþËüÿtŠe×”ÔIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_tremolo_picking.png0000644000175000017500000000066511273045225027627 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<2IDATH‰íÕ¿J\Q€ñß,AmAa+QXˆJZ›<€`%vZø ©­$]Š6¾€………h!ŠU»`²ñXxìtïÝ\…-˜f8ó}sçþ‹”’·ŒÚ›Òß1Vt¦þŸàlãKíÎv|ñ§XÀ¿Â†”R©D_ž:åÜÁ§Â¾’ðY\dðï<}«E½mWµˆØÄƱ‡IŒàS•V„yê?XAû¹öË•V”‡˜À"®3ü Ó­*¨a»|- â;~Tôâ*Ãa_p™k•O÷à'†ð ­\ÛG£ª óøŒ“ ¾Å¢Ô#^ ¬{ü$$¡YÜéŠZØÀ‡Nàeç˜éü”‘AÏFDÔÑ“Rºiÿº¾m¯ÝýGë Áb fÀ6jLIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_trill.png0000644000175000017500000000065111273045225025563 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<&IDATH‰í•¡O1Åo,HÜb„ìÆþ Åc‰Æ“ 0sh !$K€„¡™@îKb9Êzaœ!kÒ\ó¾ëûÝõë×Ê6U¶Z¥îsÀÌI’º•€  Q% žS&’V%5£AÛß:°ä€Ï0ÎÝ?n€u Þ;y)Vh’–MàØnC¨gûMRX@nûºÔèvø²VA_>€!ý4Ò§å`-,ÏkAo‹À‰íd~R€¾íQAo‡çEÊ<èO}¸›Ð"¾E3àÝöà×Iõ0Œåmౌ9@=&ÚI:v$­àØö}\•L[¢}Æ5 ÆùJª/ÀeY@´Ðþ²ýóû`øÏs –Îü–cIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/effect_vibrato.png0000644000175000017500000000043611273045225026104 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<›IDATH‰íÔ±iBaàï¬cÄ2€N RHVHcå.‚à.ÛŒH-nÖÀµyÅ+ò°,þ ·9pÏ×ÝT•1çaÔö4 w$Ù$9%yïe³$Ç$ç$/7…ªús±Ä' ¿Xà߸tùÓ¡ŽªzЮ+ûÁÖx©Ë?0ÿ0ÁöxíåÏØâ€ÕÐ}Ú»n@Æ®µ›8¦Ì¸ÂIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/firstfret.png0000644000175000017500000000732311273045225025134 0ustar julianjulian‰PNG  IHDRÀÛh9+bKGDÿÿÿ ½§“ pHYs  šœtIMEÖ k`$p`IDAThÞšÛ®InEQ%iÆ=~°ÿÿßÆî¶­éTI?qÉ’°„TÕ9ʸ“›{“!fW`F¸#MhŽ…!4†îÆ£?„Gp§ñÆDB¸`x"BÓ€»(NÿþúжOD(ŒÐTA Ç\QB@Dè/û•ˆÐÑDžH<ÐÖD#@A DÂè×ø5§Èƒ (&škÓ–Ÿ("¹4!øõ×ßè×÷ß*¨|¦Óh(]:ˆ "HTcñl(_¿~¥_ß¾"†ŠáÑxxNµ‹‚4T! €À_ÿòWúõý#PtSx4E´4DÐÄ jíøòGú×ß~§ôþ$žŽ|TÚˆ>‘xÒBˆ‚Z  ­Óÿþ÷¿ñ§__>¨­Âü #'N5'ýãúÊÇÇ“VgןyØa†‡£ÙA¤Õº…Þ:qaf\f˜;nŽ›áaDäæÙ8¡‰Ð%3Ç,mØÃñ"f{™ÿ†¬t|€;¸Ç­aD™{·;X“AÇÜóàȨ†qkxþ'ПýgP Ï‘#nFýùùIo "¤ÕEÞF à z뎨"²­g-Nö*C4˜GÕ;¼ö2ÛJu&·Î|zB¥·Ök…ÇÕ¤ª3ÙSª£ú&¸Vg#ei³¡0ŸÙAM$@_—a–ç< c7n { {)uT¯×cnàgcæ´÷ˆËÜj:<0w!ÊXö´Ñâ°®— 4¤WCˆ´%è<{9SÒ<%\k¼9rì™Û²š(êQ#¢µÞùp{ùý;€úoY-:­_£¾7$ «´Ä'ÏwsíQ_|5áøžŸhú²Ù:k†é¢?z]mêuy"‰{vâAXnËh(»ù4 ×Ëj䍯‚DÁРl# r½îà–!6×=-êçhb*‘gœ£in^H!æÏ&Èj>AÚõ4ÓXxÂça:áè°k¯-äŸÎ4Ãͤ"h`µ9Ó-·±,ŒÃ¦ ‚Ρdû oÍß¿UoºÌq†¢½Ñr@1“¦wE5鄨ß<è6üÛ>’^u® î ñÖÑ1o5{/ñóèñ“ßëô¢˜Ç1ë'›tn¤G$¹rgцáÿó't­®¹ÃñS‹|&ÔܶqÜ–vˆÓžóKÚ…º¥…y5ÎõÊ:ï[gó:ªîv4ôýnÂõÞéˆØ“.LËÝ./Š.ªµœVuúw€Š¢zLyÙaÛ“ÜL9h„™Ù°“Ä|$5ªÔ¨3Vªëx"6Ô¥±ì5OÖ¿ˆ”*>FQD¿—l Ù1ZQ ÛMÅwcűãG)¶¯VtÔ‹íxшdÝ9Péó<+Þ`ˆxùwúcÈ#Ô:0\¼¢¤-Ÿ¨Ïwìa“}Ù‹T ¢Ct„ŽÄ¡'+:ÜÀ é$* è@Gx |ªïrgÛFÑçã™D)):L}—ÅÉæ§Ü:PqÀR@ÄHfh›g˼YÕµ8È<&#d\PDu-z²äêC{IKCd bÙáyDDZ‚ªt$¢8•…ÏwåœóvŠÕ‹w0à† ÷îßéåXav ,ÚSÞ;BF ŸúÂ'–¹ÆÏlcM]£'³‰ðòä¤ä§oOè™?÷M¿Ç7By|BûÕßA'è‰ 1)åD–¿Œ’­¡òDxÂ|â ñØÚ*NŸÎNôË—/( ‰žžIdóóÆ÷€ižá†ªÔF¦Š‡$ŒbÎЭñ pGÔ5ƒx\G÷†s|í´’uW=#E—Oí\§÷ ë!¨ÒêhÌ—Ktûúy³¤sÕ=f„´Iæ ³áÑø'|Pǰ4ÏiÛ1Õ¬ªÖ#œ"è(èõÙ ¼:²e²s6Qç=w_}"O½”Nb¸i‡°7æŸOÍÔÆ 7GÞ G¯'FOÉ Aè¸ÐâSˆ¸Ì¸×¦åÙ’Î&¤Ñ_îàOš(¸^!÷¶i^Ôò2×…závÒ ™Kc2ð î÷ÔC¤×jœiŒX"79ÓZ ‘"í Ìò”dÉßÒsÄŽò@]ôÄçRîg'K„·•ÞÒ^*5Ž2Å7Ò¶z?Ôü‚^Ù^³ÐQŽÜÁ «4-{™9ÍC€gÞà±›SËÑsªzŒ~`öB’J4­èùž­8G®—滚î R K7íÑäí(óhu‰©¡‰ì[ÁO`¼uQ¤é² UA«!µ„£ãÜÿðåK)âEŸm‚6–ÚÙ;KÅë·Ìí&ïe.á‡(÷ƆìÚÀ·‰)+.½+÷3 ¥9ÔÐËæyN4[¸Ú ¯íAkíErü=Y„ü@Ó+$%QËô¦¥– ½q’tø¤õ@ÿÙRhÅÃ-k†]|€ ÜfXp³•¾M9’"ÉõÑj/d†•û{0?âtÄRCk ¡¨*/,>‘•G‘0$Äñ«ê !tuA£Ñ¥eA€Ê¢OåQr¡0Ü7zª‡ƒäÈ æDQÑdœ)¼¸¥2G–šè: Õ#a(?ŠÓ ±¼ Aªì§u,ìºëñ¢Ãá¥¦Š¡yÄ,HSÌ@U¦›ŠlN-‚ÌéËÖ=zÝT¯±èÛâNÂ_?÷æÐCŠÖ¼Ë;2ÊÍ(Ã’¬ŸÙa‘uäè‹HÊ~·á¥hJ'Þ„Íïž^"X±¼›ãÉI+q®Ëº@èúìøt–‚)‰»œš±y=‘0ÐéŠ4Жy€¹>U-¾·Æ3× ‚¶4‰ÄêJÏyø:[¯4ÈÎ}ÈN·ˆôe/þUÜËÌ PfÂÁ+g°sÝ.ˤ¡×bEÚ2]% 'îYú$d”z÷yà˜#ÍIQžÄ]JÂ@o]eÌ%„1Ò¢¾p}sPI™ h&»3K“BZR§#r2áå=ºÐSTO2£‚QÒ€+ TÚ*t¬RË,‚ü$pôÑàÅ=Ÿ±H9ºª òžp²¤ážUMš1Üpÿ' S€Þ›Òz/kÊÑ–½gFõ>âÂ01x 4ÚŠi+Ùúc`|ÓÎ{î–»W“ªñ0#̸ §É±Ù ´Y]‰½›h¸ã^H2ÿÎóVŽØi¾BéQC—ОI¦#˺ U$uùüÜ1½Ôþ.„úA˜êÆã¢7h ´µ{:M¼Š]ìá(Î3"ê̬_IzgT?ª¼rSpg5¸‘îhda@ç '˜Uàâ'R7T\×÷JKÇBÜ:9%q=}kO)-UÿYJE×÷âjÍênh+º´¸úæÞ*“‹n!:S¸jcdaÇÁC–®œÂô‹ª{ú®ùL’WƒEd¸Å°#šÑ“IĪ(Üøå¡%åmEU;r8RðµÃ±KŒg­²†ÞŸOå­n¬D:Å„\‰”Èb%D‹‚Ðè­}Bè•LŸFàhÞ“ªûqî`f -‹™yn¸çÆõqq…£Ñ&˜ æR^×'¤TN ñ–w\G(ÃêºÃX£*Ž’w/4³>ÓBŸðxП_þ‹ÆËÝá‚E^Eˆæ÷Ât÷߯ÎýÏEÿÿü×õ{qG…Ù^pÔѺÎ7¯†z|áoÿùþ÷÷¯üÛ!‘¯TÐÇIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/fret.png0000644000175000017500000000305611273045225024063 0ustar julianjulian‰PNG  IHDRÀV2îPLTEbR*Â¾šªª†®¦|©¢ƒââÊ’~Jjj:âÚ²âÖ¦vzZªv‚r6~v6nV*ÚΚ~j>¦–jþ¢òòÎjjJnb*¾ª~ʦ²¦~jb>ff6rrMòæºzj2IJ„¶ª|ÙÚ»ÞÚºÒʪnb;¾º–rjB¤’`zr2ƲŠêæÆnbB‚zB·ªÒºŽîêÊÚ΢¾¦Œº¢næÚÉrvTf^6òº¦‰¾¶”º’unBÖÖ¼®ª’¦šnvvNΦúêÔnf=²¢zÞÖ²Îʺª¦Œrb1ÕҺª–ή~r6ʾŠeb>˜‚Rv^.þúβ¦Šrf6¶®švj6~vGk^;¶®†Î¶ŠÐÆ–zrBæÞ¾¾ªŽnj6±ªˆznFÞήòêÎnZ.]V3ÚÖ¶îâºzn6ôîÒâÖÃrn>vb+vr>zjFmnNÂ²š¦ž‚ŒzJÎºŽ²¢‚cZ5êâÂvfDbbFnj=«ƒrB®®†ª¦„f^;~rD¶¦†âÞÉÆ¶–îæÆrb7Ò¾’¾®–rnFʲ~º¢†rf>¦vf.Þξº®”úòʰž‚‚v:²šfÒÆªrZ*’†Vúî¾¾®‹vnHŠvBêÞÉf^EÊÆªjf:ÆÆµvrIÚÖºÖÆ¦~zRvf6ffJŽ‚ZÞÚš†^‚vF¶¦Š±¢ŠúîÓæÚ°rj:æÞʺ®‚¹ª•rjJzvPº®ŠöêÔʶ–vn1›†V^Z6njFzj:ÚÚÆº¦ŽÎƺ²®‚öîÊöæÎÞÖ¿vn<²®‰íâÊÎÆ±êÞ²~n9nfErf*n^0r^4vrNrnJòîÙnrVvvVòê×zvBÎʲrf:Îʾª“zrJÒʱ~r>Ʋ—º²Ž²¦„¶žÚÖÂâÚÆ®¦‚rfFª®†ÚÒ´ÞÒ¼¶¦ŽÒƲ‚v?®¦Šrj6ÆÂªzn>vj=Ê®jbBòæÎnjJ¶®Œj^6ºª€Òʺzr>zf0ºšÈ¾’ÊÆ²þþÖΖζ†þöÊr^.rj>vb6rjFÆÂ¤‰éIDATxÚ]Ðy\ËqðEî#BÍ¹Š„Òˆ1ËQrÕ¡C#¥K­#äVJ†\:P-9*µÄR:´‘ÊÕr3åûÛV¯^þy¿žçûyžç/f½’Ì‚‚‘Ícîˆ5ë°©ßýküãð5d.éò]¯†Þ§bô°*sæI,šté*†~+®CÌ·µ6Ï…š‰p9ÔF‰ _Å«¡¦)¨EyË“&”´Ä7}&žªÌžaP1áSÃ|Å0Ùí h"Ša3BM¼Šò³-P?@Kƒº&Í êÞSœ°Í;×”T¹¨Ÿí&À<Š*%Sø˜7í©QÓ8ᨪá0`õ½‘ÿŠf…5"+â’køKH«xóÏ ¸e õ©ÏRá¶@È£Ržò@û]qënÛ%ñuøçSdÄU£„:Zò½ÑúùœëÐgrä19NxÎì/Çó‹rÌ(ôô"-©o2&­5e¶¥…ž Ä2Ãt±ôn˜ ‚>“*È܇—©~,ÈRmXXqNÛ÷ÞêR:#}£ÇbÈιR]þ ý²Ç ¤¼îE±ì€ñáÛé¾þÂ÷NiéqÙèh.&Ð oèÂlì.Ô"¬ ñµH§_à‚]*®û²E¬ÊìÉo”%E ò†{2"CýDªÊ(iYkjß–NÁØÈ&)ŽºH9”Å‚á»flCX˜o´–…¢Ðb-Bˆ‚CM ;œ¼<În ‚wkôÄ͉ácps½ÁA'±9üj“jìͧao^³[óFOÀ‹[òJ좸-?Š]Å›*]©l)¡^D×-¤¡hvàŠ/°½Up† œaÜ €|ñþ݃0~ÈøB1„b3ŒC"¤Ü`HñÞH[ŠHGm.¢R-–#ªÔ“PfÁ%¡-j7LX¨þÛw¥{ÞÝ¿öÀû¶gû »AŸÓ˜làêŠc+¯t†Þо–H0'–Ÿ>%þ WŸ˜òâàIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/fretboard.png0000644000175000017500000000175711273045225025101 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<lIDATH‰¥•ÏO\UÇ?÷ÎïdÊtžÓh€2š€ŒQYZŒ‰ã¦tgœ 1Æ`â‚Æ-‰!.LtãÂ?@vᢘ Tc !“–J"ít†f ¼7o¦ ×E¥TxÓ>âINòî=ç~?ï¾sÞ½B)…»úåd€*§ØªäŸûàÓÉ:Y+ „øo¬™4ÍÜ žÀ{ŽÞª •J¹[[Z¾¶µ}|Hü×Oh¶€¿Ö×ßݼyóm³T:rIÓ4{•Rììîž··¿ pýïÝ6»\!Ä#÷e_!@¥Rñݹ{÷Ó˜®ôë•Í7ìR["‘¯ÎÄb—»»»uÇ÷žó…Â/ø<g'z0w{§¬tttø„”¯d¦¦’–iž³ÓrÛMúU!-œN§é Bþ2?\Y¿p¡µµ²W­>?yñ¢ÞÓÓƒ¶mmÏw…`ð3Ã0Bœg«´bŸóo½Ð:[ø$‰099Éììl¹AÓ~r XÎfóM†‘(‹ìã¸ÏDx&`äÚ//-]_^^Þt ðz½¿IMÓКšhhh@ÈÃÒ-..2??ÿc-š—” =00€”áñÜ<”·°°@Ðï¿z"@*•r—,ë5]×e+—£¸µ@ ®Žý~Wö÷÷c˜føÚ– ”:溮§¥” PÓÓÓª–­­­©B¡ ^J&Wa§e»Ó0ÞÜßß «« €Û››looãóûyRÓp{½tvv²ººÊ‹CC·r¹WKGµŽýh}}}­¦a$Æ¥R áñàòù(Y¹\Žl6K¥RA×u&&&¤eYãŽj°S,¾n”J¡ƒq&“aeeŸÏ‡išX–E¹\fxx¥š¦‘H$8766&„˜RG/˜£ß,fåĽ^¯š™™QKKKjnn®’H$ž:ªw Ћ»Ýî{N!€ŠÅbêÙîîüàà`à±¥Íáð÷'ª9þÍNËö4­ …Þ?_’>êX(Ê=Q_ÿ¡]LÔºô…òéhtÊ4Í˲¦e–B ¥Ü“RZ.—«âöxnýþŸµºº/þÌf¯ð°Åãñ[©^—ËUôH¹íªV e¿¬¯[[ëðìbRÒ¨åuÌŽIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/grace.png0000644000175000017500000000061411273045225024201 0ustar julianjulian‰PNG  IHDR u$ubKGDÿÿÿ ½§“ pHYs  šœtIMEÖ &!%1;tEXtCommentCreated with The GIMPïd%nðIDAT(Ï}ÒÁ*„QÆñß;É쬔fn@v(bgoÁÂÒ‚­;p .ÀÖÊ](+–”• ©‘bŠ^›CŸñ}óÔS§·OÏ{Α™†kœcS¿óøY|ŠñÌÔR¯/Ìb XˆnSòmå<‡3œŒ„1]º_ Ýc=¬b£vÁÒñGè”Ùä?K¸Ââ_PZØÅ%ª V=¢ÅÌD„&Ý`³éê†æº£îùOÌìGÄ vÐÆ¾ZÆ >Ë3?㱩ÆqåÓüø¡ná­UõšjÌc€w|”J+uÉ‘™"¢‹­²àAfÞÕ¥~?_6 ׳èIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon-16x16.png0000644000175000017500000000174311273045225024637 0ustar julianjulian‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× 6·}׉pIDAT8Ë]“[L[Æ¿sN{NÚsZ…Ö- A ’ 6À,ÌÜ·!`|1ñRÝËÞ4QÙM§#š˜ŒìEñEê6º,ˆ âv1K‰8Mli»žÚe–t½@/çÒÓÓžãƒqþoß?_¾þÉï#°ezºŸ2¶ïÙ3~àÀÁ1‹ÅâH&“wç¾›ýìðáá ƒƒ[í0l]T˜+ÞµrÖñ••_A€Am5µµî“'>¤Loõ“ÿç'Ï‘kÑèÑöÝ»1øâVW}e a>Där¹³/ ô Y¡…ЭýYßÕÑMîéoškGOo.{fÐÿü‰>:s’,;"|¨/¸9)ÅqñÁÝW‹Št{Ó ©Tro" Á5\F_B­ ©T´ÂPwçôåå¹Öû]Y÷3ÛÜ«p|üò[÷ôY’Þ.•JEQÜ߀ WçæÇ•…U´¶4¡Œ1F%ª¿pÉSøï(÷ïýuL„m6›ÉjµáM— ÷¢FŽ^YdQi¢àYXD¾¤[8–kml¨Ÿ÷‚*Pc#GžçgkjjËA8qê4¾žú b&“’Gj#Q×1”WT`aþ{ÄãñY’ˆXŸ^ïŸ>¯ž™‹`Y¶!ÈGx0X­V– Iܸ~ º®£³« ¢( {€p˜C3Ø×ý4 ŒF#.{.ìÕöµ ù$¿u*æ±¼t§Oˆ¢„µhÍÍ-ØQ_MÓ ( $II’³_Lž—¢ &HŠD"Ùl€édu=B¡èLd €?~»•3™Lïwtt¬~z**æaé¢ñMg'šV5Ã`0@Q”úO>Ú‘ •¾Ó¡á+¯¨¢¿Iθ'¥pÉë·Lr’^×‹ÅªÌ ‹Šp×l‹+ý(°ê‘“©‡mÁ#ˆŠ2vº 44~a¡õg‘ÀXÉÀ´p¼n7oÌ{5uαi9hÝ·ÞüΛóÜ.×ÎH$RÈqV¬\…?@Ý\;$%ñô—Ðç`°c×ôŸëAÓ’ZP }=Íh|hͦ·o>ìT^{u÷òK/n ‡Ãk5M£@Qìúx'ÚL&è_‡’L;Þßþ9>þG7R’‘™3 êŒYhÝ¿_o¹kÎøëÀíúC0Ü€2E%%¥XýË5ðü¨^¶ùPf{Y¼ŠY3Œè´ŸAwo/ŠKËR ƒÍjÉ;xér¿ôߪ¸ov(|òÌf°,‹JÛ|lÙº 'Ož€½« <Ï£ïÂ0ö~°¾ñ –¯YÒòrH’„¯:ŽÁÞÕUð¾Z÷̯R¦Ý e~#IR­Á`@VV6FG½hÙºÛ¶¶à›ÎN04LƒÁ¾n@oDÓs‘›‡šÚ:|±÷3ˆ¢ˆP(QŒf¹\ÃÿòŽŽõÞHMNzGUÕìU ‘˜˜ˆeõ È4™°hñRlxþšóข4sžzf=x¨ª N.!'Ž eñxüP î™JòòÆúÇ/^8_\\\‚†Æ‡Qµ°<ÏC–eF°,‹Æ¦f¤çäâºÓ‰½ŸA@Ó4$IÆ ÃA Š"†¹b¶X>u¹”Š?¿·yÀjÍ·¨ªŠp8ŒêšZèt:ˆÑ(ô‚€™S‹UU…(Šp8p"¦Ä`Î3ãO|'¿û ôºF|Ëox¦ Ã&Q…ñ±1x½^´·ÁC‹#Õ`€‰ #çÑÑq ËÁjµ¢´¬  iòóçüšVÃCÿ>ª„^ïFGGñ÷¿í¯Ó¡¡¡Æ™3¡iþVk>ŠŠî¦M '!d ðƒâ2 Ûv3€¾víê›×¯_“¼##t8àõz±}k $I˲8w® Í )) Š¢€2möŒxÀ²ì@îìÜöi€Ö_^êï¿ÜâñxàtNVºÃáÀ•þ~BÐ}¶wÏ;-(Qbˆ+Äb Μ>¥ò<ÿ≓§È4dçÌzÃét~í÷û§š„ÝÞ…‹ΣªœƒN:8‘AFHçNÃb¼ ËÌa´ãX9t[©èîî!•óîÝïv»,„"p £ün÷¦€§#ˆº;ãK1›ù)©™Ðâ!hJ<«âþ’$kZp‹ýÝ=c·íhCCCæhTZrõë¥o÷^–“K 2P3ߢhPb Bžóów£+çm DQ&‡ñ"*ë/‘ü÷ðF–IQ"¹ªF›%ž¨i€š¦i4§i*P i•lPÓ0β”LÓ´›ãxË2N“ÉtÃ/ã?×Ýë¨äIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon-32x32.png0000644000175000017500000000512111273045225024625 0ustar julianjulian‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× 5"SêÓ ÞIDATXíWytSUþîËËÚ&i’–Ò…nØÒE´ÕŽ(Ô‘² R* -ŽñȨCÇÑñxpÇÄÜdP`„–\¡H© *Ë"`™–Ò´é’.IÛ¼$M^’—÷Þ? e 2çxÏ[î{ç÷»¿ï.ß÷»—àËK+^d««öÍœ;o~éÄ‚‚d¥R™Cìíéi¯Þ_µÿ|cÃÖšÚcÝø? ¹£ÉwO²¨Ôª=òèâéiii  = !$Õû«<••»—¯\ùæ¶¢âbú‹ØøÁ¦bû¶sKJJ"tÈE72ŒbèqúÇSrÍ¡ƒOÔýa³ÙbùeÜ5!jjjÚ·111ärÀa—.„|_{Ä£ÕjójjÚnûsbX\Úçt’p8Œ¹óJ††cß×{‡ÐáÑ „@©T»»»þÜÔÔ´hܸq×l7ÈÙ)Q¾nðõëÞÓ¥&%ôßœ5Ž^hj¢<ÏÓ`0HA •{vÓÜñÙtë–Íôx]ýçÖ-ô¶[ÇÓ”¤š7Ê?{ÖLó·Å÷Ù0Øv2ÎßzlÉ`sí^w÷| U¯0×PUµ/?XfΚ…¤äd„B!Øl6̽¿QQQØøáfØ;;á÷ûQ|߬^û6‚Âá°®ÍÖzx›kcü-GŸ•<ÝGCv½q ï´ÆÒ ÷•H¶_w :ÚÛn¦”"::zø_—ÝŽãuuØQQމ“ °î½wPW÷Þß°Ù99HLLDgg'xžŸsªöà§”’ÊP(8w4²µ6b—ftöR}Ú/(®Àhˆ, …BãAÀüB’$˜Í&ܦÆo b“Æ€H^”<\³%Á`åÛ¶çyhU*cv¬a޳×qgld¸™e•{”ꈽ*SR™!½ ð³,øé§³Êû‹‹Zü~ÿX¼ä1<³üˆ ï„f`B‚0?Æ0 \oóBìüdÖ®~cãP2µ:­6¦xkâ]·ü5¿øqþ†hølÙïUuu?”9Ž¢ÁÁÁ_SzYS"##«Å;+a<ƒ ÏíY„òª[}8rø0ô:-˜2f£g›mŸÌ(.)]òä²£á+/¯ÐTlßöÏç[<’±ßï«NÆëT¬y¤·_Õ„PñéaID”>Z½YwÏD‹µõ­µÓIÍ¡8=?+DN‡ƒL¾§`Ý@ÿS@)E”ÉÛ J)&NÁwL@OO78ŽÃ‡ÿX9ÌA¡KÇ÷ßìÃßU¢ÏãÇŽªðH;S§NƒÛí>Úçt>¼ëó/ÛG0LÃY÷ÎÈs ,½ô}Sz:tZ-`ÙSOcåª7a³µâ‹Ï?ƒ^¯X BòhT•„ãÕ•à IÙ¹ „!¶ÖV|ôá&´Ùl“X%»ÿ9³3¯  ···ûUJ© , âââÑÓÓƒù ÄsÏ¿€ÖãÛo¾ÏóE-Pþöh8} aFé¥aѲ§±ný0Ìey9yò:ÚÛ3½½Ÿ¿µvuÄÿP@g»mŒÕj}—Rʲ,‹©Ó¦ãÐÁˆÅÚwÞÅú÷ßGuu܆ŒÖkáí°"ä!k(]¶ÉicA)EjZÜngΜâóùÀó|LW—½²£³Ë~Õ¸=÷–GíöÎ`ÊÔihn¾S” ·ææ!ÿWw =#  £Ñˆ5ÑòãQ„$)ãóqß‚R°Jåpƒ”Rx½^L+¼n7w9!0™ÍS›¬‡®`Á¦Mٷ׬ž ©©iÈÌÌŸÿRRR¡R© Š"ôz=Xvˆ0cY„÷Zš’úf+LµµÈÈÈ€N§ƒ(Šðx=èïïÇäÂB|õå—çšajS’“56Y¯dÁÌSÿ’•ýruU~ûÈ"degãöü|DFêÞ¥R…˜Q£.'¿¬R¯×‹sõõ°Û;!†Ã Ÿì¨Àô3ð÷U+‡}L&SÑùæÖ}WÑpÅ‹/Øæ•ÌOq{<à\.p‡ÌÌ,¤gd€R QAÅ0 &3 ÃÎ’$A8œ9}ç‚B¡@n^,–h̘Vˆþ¾>€^¯/´Ú:j®"Fár¹àv»áæ8pnµGCo0 ::‘‘‘ð<|^Ôj5Ôj5¼^/×Ô ±± à 66yy·Á=”R\RÏÔÔ´a£bFµ[mWÓÐétœàÜnpœ .Î7ÇÁjmÆ{Á`”R˜Ìfhuev»[¶l†N§CéÂ…x¨t!&N1* ¢(BEH’Qa2™†¨¦PôŒÍÈèQ½½›Z[¬”sqC#Àq8W_C`oåȲ †a`2›!Ë2**Ê1wî<Ü”žY¦$éš· —l]^ö¬4"€EKÛ{î\ý!Žšÿt]¤jùöá÷ûA)…,ËØ³û+def ÷òROGªK’„ŽŽv0„ñññåçç˜ ˜¢ÙÅ7àzÎfk rœ Ý]]÷z@{[@)…ßïG}}=²sr®\¼XïêêB{[4Zíªº“§¯¹AUÀkKo´Ù,ð~ZŸÓIÀ°xŒŽ‹ÃwMDí‘ÃÈãBD¤2Z—•È §`T; g`¥6|½{'NýÔyÒb1-îqôI×0,ÚÏ,/{Ëãö¼ëóù®08y⺻»árÔãÎIS¯k멆,Ë$ ŒØƒÍgHHLB”% zS¢cÓ±üÉûñý¶Ü–O¿î!exK¶k×§ôwËžü®©©É …î¾”˜½½ðqçñăc@„nP9 pÕàåDH ’ékÐFå@õBÚ!» ì$|³à¬\Sλ¡ƒ‰ÃáP‰¢8îBÝ ¯íß[ù@›Ã„Ü,_µJI¤$Š@ÿY ² £JEK!G΄$H†m$‘Bðu#4Øi—o=ú’’%õJ¥òüèÑ£ù8£Çã9Îó|†QÚ‡$ùUˆ°@”´E 1L‡Þ¡ Bþ~ °%àõE˜µ2" ÉFˆ"(ÊCv‚Á߇b|ÉÛÁ0€F£é7 ÷$$$4\µ%S©TµZ½ À½‚T”ë–Ýã!tÃP©ªf$È$„5f„ÕE`‰ÌJèä³) 2ZȬ`@”eF„q¶O§Ñ4*Šs*•ê B¡hºá³!ÇqL8,¤Š¢¨EII‰`¡”*eYV\ÎtD"„áô3 )•*?˲³ÙÌ_/ÆL ‡•ÆÊIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon-48x48.png0000644000175000017500000001102411273045225024642 0ustar julianjulian‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× 5›=@S¡IDAThÞÅšyxUšÆUu×ì+I²„E Ò""‹Ý¶¶(Ó£l↢­€½ŒÓŽ®ÓÓÒ¸¡v7:¶¨ˆ *(› Ý-BT”I !IHr·ª›{oU3$Bl™™®ç9OÕ¹·Î©÷=ßw¾­Já<-[6³l髽[[Z§¹llæðÂÂÁqqñ…($ Û.¯(/¯ùæ›oŠUUY—Ù#ëÀÓÏ,²ù_<”ó|óÌ=ö|[¼`Üø Ó¦L–Ò§o_„(€¢*¨ªJ(äã>27mÜða$Òöðc¿ûýþk¯›üÏ%0qÜØ¡€Íí³ï\PP€”PPNQQ: ( >ŸW–ü¥¡¡¡á¿|áË×Nž,ÿ)æÍùEÊömÛÿvÛ¬ÛGdeguN¥t™±{À²-–-}Í óŠ÷îõŸB pXþïFŽùŸ}óòN…ÊÉ“Òå §÷cÑ(+W¼ÌËëù–¿þ½äÿ•À‹/,N{cÙÒ²#F¦K);&PH”ýQ”®ÓžÚ?q]UUEéþ}[{ÿWßû«_›?”€v®Z››¦»\®›¢‘(`!%Æ‘Ÿ ‰ ÔÖÖR__O($  ;®»öjkk.¨««-«®©ýÁRpœëË´îl ‡ ƒ\zéûÝïÉÊjßRJ|>/.þ3ë×}€ªªH)ÉÍÍ%!1‘cõõCATUEAÁáp8𛿭\±âÝ›o¹å{IÁ¨Ù38h¤H»Õ•‘·ãœTèÅÅîñôSOŠÅb)}úöeÃÆÍxãâR¢iŠ¢àp8‡ÃÜ1ëVŽãéEÏ2|x!¬xs9ùï°,!lTUtaþ§Û?;|úóbºèñ E¡Ø‘«E¹Á6cùB‡†%;úÄ9Ià¯4:‹¥Ø¶Ím³î )9™X,F,ò,vîøœUo¿ÅC<Ê¿Ý÷ïäôìI}]=;wî`ä¨KHLLdî¼{Q…ç=¢(!Ü¡PpfCñÙÙ9™¤ØÑüXã_(0Î4|báV[‡ÓÝèôÄ¿%ž¯UoZñ9h:Þ4BRRXø£®ªeYüaÁãT­¢­­—^~…íÛ>å׿œ‡‚~„iÓoÄårqÓÍ·°|ÙRZZZÚûýSŸ_ôÌÓ@L/ûä'¨¼Œêé3ü´µT#Ì6EÅ›RâÌ05)otÙ‰çªçB@éÃ$‰Fºü§ª*éé!ØW²Û¶)/;Ô©^JK…Bx½^z÷éÓ96Ù[R’öMÑ'ÙQS>eKµ¿Ñ\ÑP†0#íàã“>rħŽ;ü9Y¡•o.wmÙüáÓ4S222˜0ñ lÛÆ¶m„Œ;ŽœñÌšV@ït?ƒúz9X^OzfîÿˆÇ¶mEáÕ«hn>~bó«zç6f»x¾®¦fxÏtÂhÆéŽóišÚâIHÝæHÊ™‘<ôªÐö7N›2ü³Ï>ûÆ4c@BBkÞ_Ï€‰F£X±^ÿsxcŸ#<ÃÁ;¡x°Ûêi3¢ÄÒnÁ”qÄb1êëê¸yæt,ËB{å0㪠$'ÆÑØ’…ù½¶=ò~e·ˆèxÒ{“Ô´5³a¦icZ^â-¤ìÀ·Ô›9PVÏêÕoS}ô(McÆU㸰OoPà¸_'Ø~dè¨ ¸cÎÜó%æÞ}WÂŽ;^?~¼éz۶ϺW¤”¨Šä¡{2¸ëÆ‹‰Ô¯Å4%û«3¹ç©(¤=T=±^zé¼.°¯•ÊÚ:üFÛËýmëÜ¡C‡Êó %{ôá´ ë×/kii¾^J©ž ¸Ãá`xa!=²rHèq/íŽ$^ÊÄo µµ5hŠÂeÆr¬Å‡”’k&MbÚÌ[}ùô¶UU•Ý·¿´îKàÙEO»^}eɲ֖–»Ê‚Ëå"žÜ@S¦N'³G&I‰I,}íUnœyóœO[õÜÙ×£º³‘R²uóF¾þø}\N‡ëذmmÑ(RJòòúó³I“ÈÊÊæ‹;J,˺ëšI×îºõ¶Yg•D·ÕݰnÝM¾ÖÖ™§“³o›M|BBNß[¿½ÿ¶}º•H¤kphš&–e¡iZÂѪJõ¬ƒ«Ÿ@áÅcÆb<0ÿ! è—ןôôt<š¦¡iZ{fÕ±rƒ¦±êUeŠ ìHäÖ{îEUÕï¢ß·_?®™t-k×¼×M ‘ì ‹üCGöÕW_*¡€ÿâªÊʇMÓŒS5‘£.¡×pÝu“?a"}ûõ#)) §Ó‰a!ˆ‹‹ë$ ( š¦1è¢aìÜú #¯šLé¡C¼²äeŽaY¶‰F£èºNKK3ÕÕÕ(-e×®¯ÈÈȤhû¶îTUk 8ã÷ þ¡#ûõ¯æ]R^V¶É4ÍŒ=ß~KÏž¹L›1ƒÂ‘””Ì…ƒãt:QUÛ¶±, Û2IHL"11±Û„ õõ¤¤¦bÙ6ÇŽ£dïÊÊÊimmFØEmwˆ^o<ɯ¿Æ 7LåóÏ‹8\QÑe®ôŒŒ‡J–?qƤ~ïž=÷?0ÿ¡ —ËÅgÛ·34?Ÿ¸8/º®wÖ´öˆÃ¶m‚Á nM%`ûq»Ý¸\®.f÷ìÉÉ}4€¼¼¼N², Ó4Ñu}ûJ(Ú¾;ï¼›[gÍBJÙ@Ø0jÏZ•ðx</èÕ Ý0?aºa é†ÁñãMôéÛììl„¨ªJZZ~ŸxM¥¥¥…ìììnºÛ^]WUU²{÷njkªq»= 2„Ù³ïìÜà£.¹„e¯¿Š¦ŒðÝn·ó¬’“SRÃá0†n6tŒ°¡F{Ûñy?½êg8<O;‰ôtBÁn§‹ææf233;7iš„B!**Ê)**â@é~TUã 1jÔh®»n2N§³Ó[Ûv{±:¯ÿ€n¡Y|\\ÙY 8Îã>Ÿ¯O4ímíašš ‡Û¸öºÉx<¤”x<DB"áP·ÃÑ©f>Ÿ5ï½Ë§Ÿ~JÏœÆO˜È”)S‰‹‹Ã²¬.€Ó­QJJ ®'×îU9ô¢‚ÒÝ{÷Ÿ™€mÛ:xpdFf&áS „Ä ƒÚšÖ®]Cnn/.;—Ë…”’äädEiÏT¿ßÏò7–Ñ#+‹…O<‰ÃáèôбX¬ Øï É5MÃív‡p¹œ_º=^ÿYc¡#G®Ü·¯Ä‡Ãè†Þ¹ú†Þ~.=PJ4áÏ/¢©©©‹MOMM%--h4Ê;«WqÁ½7n<Š¢tz]!Ä?l§lËê"§ÓõêÜy÷г1êhmmÍÒÆ†cºŽnœÔÿ¦¦&Z;j7•Gްaýºn«iÛ6‡¢¨¨ˆ£Ft ¸ý3‘ñùý¹†ªªÕÙ9ÙkGŽyÖ„F½âÇ?–Æ ²¸¸¸Ò0„ ]o—DMMu'PEQظa@ ‹*†Á‹/ü™gÎDœþL`¿«U”—uêjJêúgŸû£ïûdd*ÀSÏ<[6ŒEÕÕG…®躎Ò;+g'ŽÚš<Щ¶mSQ^Ž® šFU9ÓoRJŠŠ¶ãp8p:‡ øä¥c.ã{è›—T9¼9`:`€h¤{òÅΘ¦‰”’H$ªU«¹ýŽ»ÚÃ…³®¾Ä ,¬f¤m è†Á§Ÿü êv»ï^¿qó÷Ή; Ü=g®U0¼ðÞê£GktÝ v³Š¢P¼{7±X Û¶©¬¬$^«çâœíhúì3G$›ëèåx~É_Ó/­šÞñ_ÒC¬¢®ø)Úôf²²²—¼ºtYÑy½¡™1mJAÉÞ=[LÓê v¡</›¶|LFF/½ø¼½ç3 8‘¼òyîe¨=îDvè{{££u\ YVÉ“ÓÇnþä¼ [3¦MéõÍ×»ž…B7œž;kšÆ}÷ŒæÞÛÇ mÙaïAJ…Б7 ÄMÇL Ø¿ .mÒÙ!A ‰t^ ÙÑ ”b6oÝåí?\êû¢çõŠiõ»kjÿóчoÊŽÛúùÚõûG¬Ò°lèÝÓËoîÄϯÌD!Û›ÝÂ68üˆ¥NÇ#+ñ²MCØV;`ÑNVˆv¶Èޱ¦QñýH‰ÚS[ZZ×¥§§éçL ©©)%Þ‹Å&Ú6—÷ˆìO½ë§_ˆôÄTrHòª(ÒÄ6ÊÛ­ŠMçÙŠø°£ÇQ‘ Á!›Q°ú.¤;Œ°•SÈž+l°m‹˜–i:ôHêr¥±!Z^^Þ iZ‘ËåÚâv»ßËÌÌ4ÏJ ‰, sc±RB<9$JI’£[ú¶­`ÛÛ–[b[ËŠaEu¤”„¬êjkpX:}r(Ò@èÅ™€jÇXNocECËBâ&*’U{~Š¢ôóz½·%''K`ÕY ¸\®Ç›MÓ¼Ú2ÍÜ œë1ƒxøaµaÛLáÆ’.l4¤lCÊBF±™˜žÞDãïÀm9ñ$_L­ò ér=Šôµn,áÂÆ…ÄDÈ(RFŽd¤+3é_q$ BÓ4©iZÓé<ât:×jšöÁ9—×›››£Ñh8‡ ;ÒϲÂ.Eu ©äض@Ø™Ž”I v²D‰“hHqj5[T„…¢Ø é€_¢04MEU¥â°ªyš5Mó© ߪªZët:222Œÿ³¯UZZZ\RJ‡Â!¥Ô:<åt¨ªª¤ªª¶ªª&`¦§§Ÿ÷§7ÿ\ä(V²DPIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon-64x64.png0000644000175000017500000001573111273045225024647 0ustar julianjulian‰PNG  IHDR@@ªiqÞbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× 40¹HQÚfIDATxÚí[wtUU¾þöi·¥ÞTR( •.vFEi㨠ê€ËØpÆûŒKE+*ˆ"#££©BÞ¤ $NêMrsË)÷œ³÷ûãæ^Ô ¾5o­wÖÚkåì{ÎÞç÷íïW÷Áot¹Ýøèƒy»wïèpDdu–žqydTT_t'ç–ýþ½åe¥.w“§ÜÝØ°öÖ[GOºoŠÿ‹ù-}þ¹g¢W®X>Öbµ>2bÄïÞxóH³[·n»ÝŽãŒ1(ª‚ââ"¶oï^ïæï¾Ëóz=Üqç„U{æYßÿ9þõÙ"nÝÚ5}<ðé°+‡_qß”.!1Œ20°æ I«Ù ŽpðxšðÅ¿—˜[r7HHH˜ñî{ÒúöíÆX«e&mfmÌypAQQ>žÿ‘’ðÀ´ûg,™ñÀCì·@¸ƒ|ôá¶·ßœ=ûšk¯KKLJBMMM˜Û¥þùø·"""£ÇŒµ}³bÙûë¿]WÒP_¿ÃwÉà/Å šêÇ{~À€¼ßçƒ,û!Ë2E†,77E†ì÷CVd(r‹~¹eŸÒünð}»Ý·Ûm=•ŸßÝUçZµgï>忎Ÿÿk±å­9³§fee‰µµµm` hÖù–ºßÆ´ÛGÐ¥KW9sÍ®];¦xû¿€?ìï¢iê5=€Œ1H’„.]º 11š@yyª««Áq¤…þ-:ÏF„@‰ÅÙ³gŸxêÏ3WÍyë3ÿU””çB¢\u® «cÀïn¼Sr¦!%5<σ1¯×‹ýû÷á“磦º¦Õj3ÆZ™Žp­ ¥(ŠÐu=m÷®]“N:õ=z\ô÷ªgE0ƬÎÎÆ¯öGá'Oºg»Çã.ò@€i÷?€G{¢(¶’1†‚‚üåÉ'P\\ÈèèÜ0b²{ôPXXˆ]»v¢¦º< š Ó@“» 111§'Lœ8ôåWf5tä;ýuÅ‘FcÅe¢(N2jgª+LàùíLt¼÷«°eKnwccoMÓ 3†¡C‡á¡‡c ²,7»4„‚žç‘••…ÇŸ‰Ó§bØ•Ãðʬב‘‘  ”Â0 TVVâõW_ÆÆZ€ÈàõzÒss7w­ªªjèÔ©Ó¿K®+&Tñ8(ÕÇr¦6‚x«®ãy®K@Sjà9Œ‘†\ïøUìÚ¹ãjÃ0bcÐu?ò¬6t]†Ã0 ë:Ö¬^…Sù'ñèãOàÊáWbúŒ˜ùä_ Ë2 N!5µ3$I!©©©˜õút¹›7…A0MSÒ5múºuk´ñD Dq•¤ò‚8‘6U\N8~ –ú`é6žkV¯D]m ÔT‘çqàËqÓ°þ¼¬j$ŒPvæ¬gmZ&{ê²# $Gl‡²Æ‹²ÇŽS5í¦ö~[0ÿCL˹ùù'¡$#’= °3ü`j9 ×Z(…/Âð s9¢2Fè^ Âñà8{vïÆ¼÷ç‚pcHˆ‰ÂÃãÇà¦a—¡É€Å* ªÞS™”7õŠn¹kðïï?ÕQá;¤ÜÇó?ºü›•ËûÚ,ÖQùùùBúþE)…ÕjE·îÝ‘”œ‚ÔˆÃxéoWBR‹`¸÷Á0Ã`0 {ö« Bª‹w&?ˆ’’J¬Y³ Ë—-…€‚þÝ21yܸ=¬Š@½Ç¤$çd[rö’œ/¾Vð‹xò‰ÇóOžüøÄ‰ã7ªªjcŒýbàc Œà–áï½:6½÷Þ :9Ë7»1çs(ã Ë2c­ŒžÃfEZR<²ÒSጎ…ÕÊcÙÆí ¼0"¿°èûß´ðÈÃf®]³zniiÉm†aˆ5œ„ÄDG#¯0€úº:Üxý`€Ø`(`”à»]xfžÝD(¨H(A¥cfüéq0KŽŸ)ÂÚÍÛÑäó#$~Þ-_±b…ù›ðâ Ïe®Z¹r®×ë×QÁ)¥°X,ÈÊÎÆ„‰±g÷N<ôä»èÝ»'˜îc"„˜áˆ¾bºe÷…×ãAuu5†!½³Ñ»kŠÎVcŸV‹C†Å­£FcРÁP5 Ý›šÜ§æÌž“÷Å—_^Zxï·#?øàý/Ýî[Û3–á8PJÛ‹?Nš MSÓ§Oã«/¿ÀG >Áø ã¨^‰@Ó8º?ÂG„â|¬ûfömX並‰}y§°ýð±pmJÖ‰Çïb¬}£–•ÔÔTx½ÞV L~?–.ûiiiødáÇÈÌì‚e˾Æñãyày‘‘Íu€AJÜXºàŸØ·þÈ~?jeXm"üª†#…¥È/.mS*#‡ŠŠr|<ÿCìÛ·N§ÓŸðìŽíÛžø×âÏ¢~o¿õ&W\Tôg]דÚ{Á‡¡C‡!ïǼ°ÑbŒaúý3ðò+³`³ÛðÉÂ…ˆ‰‰ÁÆ ë‘÷ã $hÔA¥4œÜüx +æ¿u Ê`P ¿ª¡ Ü…ëÆÝ‰9ó>BïÞ½Û¨YKзmýG¥4F¥YK>_üÒâE‹Ä‹ /ïXÿ††úIí>Ìó5z ŠŠŠPYy„`¸:á.<ÿâ? vîØýûö¢¸¨GŽnÞ Z Ö V@Ó»j9Ö¾®šZ˜Œ@94ùè‚“ý ®½i$ÒÒÓ±pÑgÈÌÌl•¶©L=‚ŠŠ Qöû^¾ìëi_ýç ®ÃTWW‘“ÇÿÉ0L©=ê¼y$ô@‡ ÷õë×/¿ú, ÊÊJñÞ;o!"";wîhE]Ó4áij‚«¦k}€c;6ä&ª\¨2ºãñç_Bv¯^ád*--ïÎý'ÇOÆ…§à÷ù ªªTUU9»¢¢¢G‡ 36¦ó¶m[gºyþ}ûöÃaÃðÍŠåðz= „Àb±`ÁÂO‘‘ ǃ™?†˜X'6}·±…Oo€R$DF ôÐ^ünH¢¯¬Aèpûdô½êFÜ3V›­Õj3Æ’’ A±uë–Œj}…æ3  JÍý'óOí¶oûþMUÛè~\\n»ýv¬üfêëëÃÔŸxϽHÏÈÄž=»1éÞ{àpD`ÇŽm$ 6› I‚U’pu¿^ˆƒ‚€*£É§Â :5áÓî}x&n›páZ¥Ñ¡f¦LÉÁàÁC~RÜn7dYF À©üü®*‹>tPxèÁ£)¥üù‘Ü}S¦bÝÚµ(.* 6(¥ÈÝ´ %ÅÅHLJÆ'M\}͵HLLDdT$$QBUy6ü{1ºf¦Â*—Ц£¶Ñƒ„ôLÜ—3‰II­ …[ Ë f>ùäÜ7 ¦i^!#k­Yü³ìؾMhlhÌ:ŸúwM¼@UU%.¿b:wìlôíÛÙ=z ..6› ”1æ4–çùfËO`\qêÏ–#ÿÀ^(ºøXÊkÑØ5¸'g*AØÊŸOýóû†]9W_}-¶nÝÒîÎRÈ3«;@qQIÀzµhÈС¨­­Cvv6r¦MCBB"RRR`³ÙÀóòÞÿÇ Èyä ŒihÀ¢O?Á~?Ù=z`øð«Ý£’’’`³Ù‚Ì1L¨Šw“õ.jkkárÕ!##Ý»g¡¤¤øBÂ{;uêô÷»&ÞS³e뎟ϾøbIì¢O~f·ÙÇœ8qœóx<à8™]º`̘q8hEA¿þýŽãÂM×u¨ª §Ó‰ªª*ddd´Ë‚¨ùyy蜑^àóùQVZ‚¼¼<äå塦¦>¯§Yÿž Iìöˆ ¼6|»½z÷ÁÈ‘·à½wßnw.§ÓùճϿ0yÒä)_¤_ÿçË«uÝõÚÜ9Ü_|Ž¥_}…Þ}úà·ß‰„„È~?´€]˜q Ѷ©É¦kˆŒˆ@uuÒÚùíÕ¯_øÞjµ"&&}úöņ6l!ú‡<ªjðz=Xúõ×ÈÈè‚ÿþxžÇ¼y!ʲüãè1cqR$È~ùñ»ï¾G€;ѣÇA hîóËPUŠ¢ ²ò,"##ÆÆbccà÷û¡»`qD¢±±N§óç#0Žƒ$IaaC‡XårÕátái>|¥%¥0`V¯û¢(Âï÷!)1 ÕÕUí+8q¿¸B$4º¥ŒÌL(JPXUÕ ªJXð`ŸŠ‚S§Ð©S bb‚j*[[­V˜¦ F)8Fáóûa³Ù`³Ù~2r ùw]סjêëQXX€C¢¨¨’( GÏ^¸îºÐuj7H’Ž l6;ºv놪ªÊ6l“$©C…^!**:Þ4i³°ç„WUj EƱ£G0dè°æ]>Lט˜Ô××¼ÁÐQSSƒÎ;·²Ô!¡UU…,˨­­Åñãy8|è Nž8 Ó4ÝW¿ ã'L€ÓfGЯ­Ø“••…;¶·Àj±œê))©´±±«¥YxŠ¢BSU(ªUQà :xQÑÑèÜ9 111­t611Õ55ˆ²ÛÁT HHHG>ŸÕÕÕØ’›‹-¹›ÐÐЈ®ÝºaÈ!˜0a"’’;Aøv>?6€”ÔÎí Ô-;ûÀÑãù¿«ÍºûÌ™Ó}bbc¡( 4U=Ç‚«š Ù/ã×fá™ç^€Ýn‡(Š­V%)1uuuHNJ‚»©)¼‚^¯›7m‚óÑ»W/äL›Žìì°ÛíaƒÊ…®Ó |~_LLL›ßEI’ívGY‡ê±±±K O2UEª(PZ4Y‘›U#ȄӅ8ž÷#.øMMMaCjV«ñññðx½ˆŒŒ <|>|¿e öïÛ‹wß›‹¿>ý,úõëI’`4[ÿ–[i-[KoÓ²R »ÝÑ&1á›GD‡Rq#~wãa—«î—«Šªiß¼ú!6(Š¿ß3g΀çylÛö=6}·Š"‡?2\Âv8»ÝMÓp"/Ë—-ÅŸ} ‡ºh%ÜOµóhÙ§ªÊù Pm6ûçÓg<б¡[n¹ÕÛ9-ý³=»w›š®¾¬´6†ªŠŠŠrøýþðžEŸ.DiiYø0Äù@†—Ë…Ù³_Çø w]P¸ûû%}-ihh}JFÅc={õÜ3hРE9øÃíw,©(/ÿ¡¡¾¾ÙòŸ§ ²ŒŠòŠÖ;E õønÃz(J›•c ~YÆÚ5«Ás<úõïßF¸öhÝ^_{l€ÒÒÒVSZ­ÖEÏ>÷¢§£UaFëOJN~òС>­¹ÒrƒŠ¢Àãñ ©Éݦ0¾eËf¸Ýî6é©a¨©ªÂâÅŸ!gê´VÁN{ô¿P{¿QJ¡ë:Nž8v’$ÕÝqçß<Ü2zÔAŸ×·òlEE #dƒ«®®„T”—£ àt]oõÑŠ¢`ãÆ ÈÈÈ@ï>}Âtþ%Âý\cŒÁårátaa(K ¤¤¤ÌzcÎÛe¸ˆ+ ÀäIS}ûöýÛÉü“Å¡8h4¸ÝíÆ÷¦ibÿÞ=­|¶išhhhÀÚµk1%gj+OñsV¾8ŒÒæ:h ³wÏî0#EQüdÈÐaó/ÉÖØ¾ý?x xº´´ä.«ÅÂ)ÍAQmmM»¥éPF8jôhØí‚MÓ»y<®Ó=ö Lc?mõ[Qʈé‡`œ†dœ€¤Ÿg”€˜n˜L„Á¬xõå—ÐÔä†(ŠEñqΜÕë64^,m*ŒC†[ýîÙʳ†¦iPd¹Ý¨,t•••¡®ÎNd<Ö®Y…™3ÃéŸ Kãb0Ã^Á «G]ˆ,@ºø92â]HKKGjסHËè…´)üjpåÏ!àÉß«wŸ—r·í®ü5»ÃíÖ•–/[êxãµW_•eùQ\Ëäá›×g¿‰1cǾþê?°IM¸ïÞÛÁ(…á9 ÷™%ðØï†a< ÕÎXÑæz$ÙŽBHÌÄN`Ìlž3´“Ô¼^T†¿d1ŽÚ~$»ßˆ›’ÏuýÚ­1ßqçxÿƒ=òTdDäRÇsAáCìÛ»n·ÇŽÉcÛp×mWÀ”Ka*e ¢ÑÝïGDãàš6ƒRœ·úNýs¤ØBH¸Œ@µR0­T«ÕΞkjLÍKòX\1tÔå¢wÓÒÆ#OÄÿ&çV­^Mx`ÆwÕUU¯×Û1f¿ÐþÿÙ³g!Y,XñõgxáÉëà´`†Ìð‚êM`¦ Þ£t.ŽkA¹¨  p°}èL>‰»Œ*`†ÌðÍï›L÷€ê^Ðæ1‰­áH&SË:ýý•®õÎ×ô’©@Ë+??Ÿ›>uò˜ŠòŠWdYé×^1–2†;%óîÀÀ>)0Í–z0 P€çôB(Ò•PSg  LG7öì’ ÄÞ FMÐæçÃﶺöYD 5‚Qÿ½*%¹>áʯö] ?[<èÙ³'ý~K¿úòˆ îس.·&¥ÉG@HðX#!À ~N¼üçè›êÙà‰1üP PPC55ðþ½€ÑÆGÁŠbØX`ƃigƒ†²ùÝ Ð!aÑìYøž1C­†ð[y¥òîºzÏ3illÇJý$jjj’LÓìÊAMux’|ç(Oí ΙÚTˆAÿ¬ôÍŠl^eÖÜÎ}|ȗ뾳КN€R ræb˜Öžˆa›‘Éže"˜m(97k!xh Jf²  ¦ ŵ¦î¢ob¤×¢“ ÚQQ« !+A¨³X,…±±±´Ã p¹\UU_ñz½·tÃ0@Íœ4§¸áò&\/:À¸X˜†Tõ´šRjïMÝÝW~ŽÒŒ6ïó0F Pÿ01” `ô<ö„Ç öSÓ„®Tƒþ ¸È ½ Ó{7ïUÌEÑ'IÒîêêêG’““ ;€aÝ5M›áóùìçb2é+c¦Z F] °€QrNðЇšÁfš:L]¥Afª† ¥~˜8 Þð!)Û‘ª‚*§Á˜Œ Áq‚ã„g0M ª+ ¦:` Ãv5À ç š¦EØl¶›A˜àÅ`±XŽQJ'r÷¨aCu]2 µìQH¦6¡23Ó¥<(åaR”r T3 Pãfp"ÀR ÆÝ‹š ‘ça³_jŽ"‰-Ï\3ÀLÌäAYË1) Ç3Íf¯,œzäµ0œãÁslj¢(RžçH’´N„7/Ú444ð@ Þ4Íh# ÓL5ð¬~3DjhÄd«ÉD‹I9˜ŒXÒ`:3@L ”8@ùX0biW0ð!  “BÀ`…Bx0"€`€'„!á,'Å›ÇBöò<ïåy~'c,O’¤Æøøxù’½ÀéQ›i}LÓÌbŒÁ4L˜Ô@b8ޤ0Æâ °NŒ1 ¥T¼@oßs†à_hÔÖÖ¢¥¥YÚüÅc÷í+æŒiQ”RrrsÇ›ÍæRJ%Bi§$I-Íëœ]*Ä9¹yÎ)S¦ìÍÍÍuçååáÿ—A¾ïhmmÁ®]»è†µk²këj'ÖÕÕ-¶'Ø9Ê{þ„ó“ssó, öDkœ FPBÀƒ,˺Óåd­-ÍÂÑŠ ßÁƒ‡uµ5»’S’·deeï T8pÅWø.½ìòÿpªñè/~ž÷ùª•sÚÚÚf¥gdL™uíutÚô80Fƒ:ÓÁcœóèSJA(… PPJáõxQQqŸ|üJŠ‹Û‚ÁÀò±ãÏ_zÇíwî¾hÚ4å?ôŸ.ûØüæK/Û»wÏlq¶ÁsçÎ/½ìr$§¤€3ÆÞý˜äM(! „‚s†šêj¼ÿÏ÷ôíÛ·uY,Ö÷‡ öëE‹—t\3sÿþôì3IŸ.ÿô‘#åeó ‡¼xñ ÓY?4? ‘㜃 P57nÀ{ï¼Í}>ß›Nžüʘ¢±{ï¼ën-)9ù_ñ»¾áòO—~óøc766Þ{Éôâ¼ù7À‡ÎÎŽ03“~øƒ÷s,Äùàý ïŸ\ôÆk¯Ýáv¹Ÿàù·ààÁ ‹ܼÄáHµ&&&ÂårEõþ©×ï‡ï{#§?FA~~êjkŶ¶Ö:°À‡ÿÖ´··‘—_z± £³sÄØ1cáv»À8ïCÊèžÈ1B¢à~Aé}=é÷pÈ!ê BfV6ÊJÇÇfµÆSJCÜßK5hšÎŒ&Ì&DQ„?„,Át¢$…ÏÕêÝ\NHOwµ·®Š½–R »ÝI’àöx¦.ûô“«>ÿ|Õ[W]u ÿ·`ÕÊ©íí­ÓâãˆÇãAì¯ÔuFƒ„Q£Çà’éÓ1hð`$ÚBà÷ûQSS’â}ر};::: Šâ)£á~‘¾Æ °Zmp¹œ ®®®WËKËVèú·@„[‚rp”ÅÁíqG÷3!++ ‹n[‚‹¦MC||<!QÛ””„ôôtŒ5Lœ„÷Þy {÷îA?J œspÎzRœ„8ŸÚ׋"RXªNœ8a*-=|iEEÅGçL dW‹©AŠ’b´п3<˜¥©šÉðƒBžŒ®ëÈÎÎÆïžx ù a}Ï{ÙA‡±cÇ"-- ûë+XöñGE)ÊðªªÂd2að¡ÈÉÉ=1·'Nœ@eåQx<D)$!¤[t¦eVþèøý~B÷ÏeŒE3.—sØ'Ë>|6tÖ;êSJ/Ø ÜYŸG%)ÑdK":cŒ0•Bv+LñNöTí|üœÐÞÞ†¿¾òJßçÀ9‡¦…Ò/²,cöÜy¸`â…Ðu=J UUÁ9¥4”v&¢(Âh4†RÏ„Àápà– ±¿¤.— ?ùÙÏqË‚…HHH€®ëaUÄ!Š"$I˜1c0th>rrrðÂóFkk+A衺Àãö$Ÿ¨«ËijjÚ‘‘qÆ¿QñvAówQÍÓllŽ©š§e–Ú^u¾Q’ÈÒ#cPÝ.p]DA€(‰Q.8›¶3EJKÏÒ4=9–ë23³pãM·@E¨ªÚƒŒ1hšMÓMMضu+ív\=spþ„ ¸ô²ËQP8 wßs/!Ð4à ¢$AQz¦þ­V æÝp#âðè/~¯×Û'öàŒIÁ`àþÊÊ£Ÿðž‘ji­ïk*Cu9K2˜Ôœ'âEQã ¾®(>'˜8ƒ$L4\Ô`íàÄÜî÷ú7K¶´.!Á´ïœ°öóÏ…õõ‰Š¢öûqãÆ#=-½šé­ûëëëðÈ⬴„P=z÷Þÿ, n]x ¡(2¾Ø´ Ÿ.ûª¦bò䩘9ëZ J!Šb(=-¸èâi˜;ï¼þ¿=S`€Ûåºbùò±ÍÍM[ÒÓûJA õx|°³!K < „Ìg®º+‚”N q\UdA xàó´AW‚àL P Élñ‰¶´ÄhûDÃac€@bJNÓ97‡² †ëº½“÷qÞˆ0 §¼VÓ4,}ýuì/)Ñhç ï¼óFaÆ¥—"=#V«¯ýãïxê‰ßÂå yW«W®D]]-î¼ëPò~Ìf3$I‚ÅbÁ®ŸÏ–/CGGGôxŒÄ¦nX¿nÂì¹ó¶ÆÆ…à9þÕyJgݤñˉ)á&CZÁ³¦¤ÌSÎMÍͳãöÞûkªªzßþ†ÅbÁ7ÝAj]סk*„¹—#%% áÚq7x‹™™Y=ökš†`0Qa6™Oz_Ÿ×‹†'"?^{K[ÍÑ »™1Î4Û«!w5„Ø©ñ ’£Õ~€[Óï°šµÓhKÒ¿—‚ÌW_í0¾óÖ›÷»]Ρ½¹[Ótüàúëa2™Á‹ºŽ½?˜ƒÌ¬,2,VÆŸ?wß{²23 Žä80H()9€` Î(¥X°p®¼êꘙGÁ0 ضu Š‹÷, KEIܾvõʪ«&]po[Ýñg«U&'§Øa‰‹G ½ª·¥ ¥$º%‚5i——öCû°é{¾×TÄþâb«ËéLè­i(P^VŠ={öàò˯8¥8®ž5O›µk'M50 _‚·¬„$§7MKEºqVn鄯ãqþ„1˜={NTÿ£WÞIQÔÕ×Tr@ øü‹w¬ùìÊ¼Ôø™uuuq »¶ïÁ´iš§ Fƒ"™!m\WN€1œ©¢5)ÄgÜŸ3öð÷ž Ú·wï$BèÈþòeš¦ãÅçþŒ‘#F‘–ÖCUtŸ(Ì «÷u¤h; %ÛãP@#©*·ãʉ:fŒô‚™óAÓ/L,ÐÔ`¿ ÖÕÕ¢dßÞ~¹ŸqŽx‹—O=MRet¶·Ân·¢¥Íº†lþò+L» À-Ú’ß“>«z:3-À¹ª„|}K âsƲ‰d\{{Û ¿ßßï EûöíÅÿ>û ~÷Ä“}ÜA€Â Ãêú#ŒòpèÁè¤ ²A¬ãAŒ¹ b<à ~¨êF y¼îɼ Ä>­_Ö®]ƒÖÖÖ÷ŒHCVJ2®Ÿ1 Ãe¡¹Õ ¦K°Z( & N¯z¢=°­º]}.'9uCRÎ8ß¿t6Ôç÷í‘ö&Æ[K_‡ Püø¡‡áp¤…Ó‚rñžßA´fCu®·z t­¬}`É1Ę @5¤Â–w; Éåè8ô,à¨Í\ @êþââ}xûÍ¥=¸ŸqpŽk&䢑ðûexý RS¬¨orÃàH¶[:$³ãESrÖŠ‰³ïÙwÖ³Åç üxÞ?ß{÷·n·Ûv*_Ÿ öï/ÁŽmÛ RRS`0H ¢ ‚ZAë…`¾òšåœ0]ƒ¨ƒæ.µ 18BY~"‚ˆ6ºJ€„‹@-ƒ¢NÊ®;ñìžBScc”û9çHµÇášÉࢰšpètù ˆðËl›`0=6bÂÄ7“äÖ½¾téYgÖoݱåË/éÖm[Ť¤D{[k«£©©é¿V®øl¡¢(gäâjšI’0xÈä`À€¨£ïãÚ97€+Zã«`ºº0Æ¡k Ä4æÁC0ç3ú7¡Å_šr YFScÖ®]ƒ×þþ78]Ñ€ ?; ¯M#U$ÄY ‰Í~x|äf'·ɸ 7.¾ûžsV'øV|ºlÙ5Ÿ¯þA}]íG òz<6ÿ˃®‡q9Œ Ï<¬bþó!ÒT(uÓýÐt€ºÊ Ú§"nèQµû¼¿Þ)íz¸]8~ü<ˆŽö¶pý€DKÎ6³—^09©ÈËJE{W²¢Áb!¥Ç±½¤tåä©“oyáÕ¸ÏeÊþð嗛ȧRTVVújeå±óü~¿…ó³Ë$ŒñŽŸ/á¸õÖù ºJÓ[ÐTtÐ5"$ÀÍGàWÏíÇú=( uRGê}|Øáä&“)vd$§À‘”ˆä¤D´wv`Ó®xeùÀ€ŒóŠ>vN+†ßä"ƒ@G­_·î·µuµ—¨ª*í‡Òu\×!k¾:ÀÏ‹1jÔPû¨»ÂVˆŽŒßüµ ëö Š¡éáCU¶P¨[8(%˜=gn¸édç AS‡‡ŽÃÁ² ì+;U×A€t³Årô‹Í[ö¾ôÒKü_€÷Þ}Ç5 㪕+W<ãóù¦á,wÖE¢á¢1cpÑÅÓP^v ‰©˜:óWâh†/û4hî20]‘2°«ùj¬Þe‚"û £E¨oo6!Õžw }XI2àö;îÄŒ—bÊÔ©¸üò+pÑÅÓš–Àg—Š¢€1Vä÷vìܵëÄ÷À¡CɆ ë/^þé²»ü!â g“ã)¥ˆ‡Ã‘†ù7ܓɌ;¶Ã‘êÀc¿þRN‡æÜ ®ËâFAõVÃ6üI ø\sÍ,L™zRRRÐÚÚ—+Ô{”™œ„k¦\€qç壶©Ÿ”R躎-›¿Äöí[Qyì¥HNNÆÐ¡ù(*ììlt´wÀétÆI’Èž|òÉ |ø¡ö½Ù€ŽŽv<󇧲–}òñrg—sԙȱ“èßžç0ÆQ8¬·-þ!ö—Ãn·#oÐ`|ùå&¬üì3¤g ÀÊÕk0xð`pÝ_Ù#Ѓ 0f-„)}@zòAcc>ùð}l^ñ1&„$JÐ4 N_˿܆­¡\Nx]Ó`41hÐ\tñÅwþùHˆO@gg'öí݃]»v•ÅYm\=kÖ_î»ÿÖïE©É«W­ú{Ksó¤ÓŸsI”™• ¯×ƒþl3 kÒÓÓqßýàñßüí8p`?FÁï÷ã«íÛÑÞÞ‡Ã[. µ­P#ÄÄ ZóaH¹„ö4?L×ÑTW‹ŽÊrŒ+¿_c€¢ê0H8RáóÐåöD´ Šàœ£££û‹‹±¿¸^¿‡G²²²SÛÛZÏß·wqñ’ÅÎ%K–´,[ö)ûÎhmi1¿õæ›ì/)^£g¢NF!=#5ÕÕýæ]TEÁˆ#ñÜ /cöܹÐ4O?ùFޓɄÚÚìÞ³r0ˆÔTnºel¶p\G- æÜ>œ¯ª vmÞ„-Ë߇ìu¡ËéCæ€$´¶»@% n¯V«]./šÛ;z$ä"m1„¸\.”—•¢±¡öÄDÄÙ✜d ”N¿¯»»™èŒá‡K~ˆG{Ö°:©««Å+yãÇÇñÊJ¬^µ@ Æxsˆ’Ó¬q3ƒ6-ÿGöíÀÀ´xD n6ÁíõA2Hpy|àà¨iU1oÑ1qòdeº®ãwÞ:u[|Dº(…¦ªØ³{ä`™YYÐ4ÍŸ0¹üHù ²,?`Ý9‘€—^|Áòчï?®(ŠýtÄçœcÚ%Ó‘œ’‚Š#åhjjìÁe²,cÁ‚…xä§? ÍŒáÁ`Ï<ý4,3(¥X½j%¼^o/Ï)ÜMÐC꫎ãÝÿ„£û¶C$À‰fââÍ`ºB8Ý>ȺcRîûé/qáÔ©!0›ÍøïGÃÍ·,€ªžÙÔaBt]Ç¡CÑÔÔEQ”ƒ „ ;ZQñ?/>÷\Þ9 ±±aœËé¼’sNN§zòóó1fÌX4œ8ŠŠ èºå0]×QT4ÿýËG‘””-®^µ%Åû0dH>Ö­]Ó§ÀŠ¢@Sµ({·mÅÇ{ ²³²¬‚ "ŠŠævâИ§Ç¬‚Ѹû¡ÿÂàü¡Ñ1†ÄÄDüôgÿqãÎïS5;š¦¡òØQø|^h²MU”ƒcwìØö‡÷Þ};é¬ÐÜÜD‹÷îâv»³OGüÌ™¸î³ÑÔÔˆ½{÷ÀåtE‰ÏCVV6þð쑜œîǤøbÓFüá©'pÉô騱c;Ž?Þ/ñ !èêì„Ï烳£«ß[Š’µ@"\n¬6 œ/IB[—u-.pAÀ57-Ä}ÿ쉉=ZC5i )©©øß?ý¹¹yÑöÈ3Áår¡¹© Šš¨(ŠtèÐKkkk§žUÖ|¾:³ªºjþéÚG$IÂÕ3gAìÚµ-ÍÍ„žm"wß{/FåÂÇâé§žÂðóF ²²e¥‡OÞ'Dœ.'îÝ^}GKv#>Î I¤ŒF¸<~A€ÛãCPQáTDÌ]r?.»êÊîÌj ñ#¿G×uäâG>õ®Îtt†BQ(ЧÓe?°ÿ˜c•ÇèY ¾¾žlÝüåD%Ì;îŸ~ée4h0v~µGŽôÉóO»d:æÎ›m>¿"ËxúÉ'¢=ùš¦cÆŒ]T„òò2\?g.ÒÒÒmCøرòSt¶4cÄð!`œ Î"Àëáñ@í]>¸¼~è¢ ïYŒ‰“'…ò:g ÏcÁÐu¹¹y˜Ãxåå—¾Vò0BüðwŠN§óìPXX8fé믞ìá î¾÷~´47aé¯C–e!’$Áh2ÁnOÄ Aƒ0ü¼ó0ü¼ÈÍÉEn^L&dYÆåW„¸UÏàœƒ (88g¾Z³íN¨z<㌰٠p·ÁÀÑÚåDzN>xø!$§$‡&ù}‚P칊¢àÖ…‹°iÃz9r䌤 bÌc¢gOÎ ûö"O¦gÏ Yâ£?B^Þ ¤gdÀáp =c²³³‘̬lØív˜Ífˆ¢ý&“)îÇn±÷¸âúÙhonÄñûÀ@ h ÉvlVJÊkqÅu³1û† zªœ3¡÷9œsdd Àܹóñ›ß<~Æj(vÆ’Üœ\ÏY ¶¦vz'ªª‚ÉS¦¢°°/¾ô2æÌ™©S/`O°#cÀØl¶(±#[äoBHôïÓE¡É))˜³h þøh”@:œ^Ê*Ž¡¶½ S” UÅjªªQƒûu «R.¿òJüõ¯¯ ­­í´iô^LYššúÆø ¾Q^¨Ü6¬O[¿víÃm­­y½õ~á°a?~Þ~çÜ~û1eÊThš†¬¬ldfgÃd2A„[„ð‘[Q{t-ŸjÄ'$Àžâ@Yñ^ø}>’20fòTTTÁ²O>ÁŠ+àrvÁ I°Úl0 Ñï­G€§1ŒAhhc ª¢ Àd¶ «³ %Åûθ“’îŸ9kÖö™³®Ó¾±ìÞ½‹îÛ»wà¯ýÅC55Õãb³…Œ1Øívä-Àú pýõ?À¸q㘘ˆ”ÔT1œÞ;Eár¹à÷û!Š"`·ÛÏsÁDÔWWaÝïaþó1¨p8Ο0ׯǦMñÊ_þ‚×__ŠÙ™(,†œÜdY³«G*Ž ¢¼e¥¥¨;q.§~ŸŠ"G‚ѹƒÉ`‚Él—&êëjðû"àÏÏ=‡·–¾ââ}§µV«µvêE/^úÖ;_|«lè–Í›…?ýñ™)+›öد~-$%'ãž»îˆöð›Ì&ÄÅÅáŽ;ïBVV6~?TEN+D¸=R‚Œ¤#ž‚ªª!0¼nج´´´À`0À`0œÑÚââ0sîܨêŠt>ÛlV¤gd`Ê”©ƒƒøýƒQ•G™A IDA Û ]Ó¡¨ ž~ò÷ظqÆ/Â…NÂÑŠ ìÛ·÷´Ï¥ªj¹Á`Ø‹o9Ä/6­qøðá‹.¿ò*Ã¥—]Yâ¶%K°aýzج6\4m&\0³@ªª†6MC0à‡5¬±+ hš-€744@÷{áÈ̆ª¹ÐÑÑ´´´3Öµ±Ü±/ƒ!ÕÚl¶pCW8iA qG4FÐ4-º¨“³«ëÖ¬Áþýû1sæµøÑDªÃ¢1c`6›O;‰„1=z´þ­p¹Ü †¡7Ýxs(¼VU,X°sçÎOÕá÷ûà÷û£ÄWdŠª ©¹‰IÉ á‰4¦Ø­ª*h¸Û ¹¹h¬©Fê€L8=tvv"%%å›w„¥!Âݱv'2ÝU×´è³È²ŒÎÎNTTÁî_¡¤¤iiixþù1yêÔÈZ¤È/(@zFêjkO³„Ý»v}ëÚ°¸k×ÎöŒ™HÏÈ€,ËPŠª@×4±d¤IDAT(ŠY ¥^UE@ ×P_ì¬lÄ'Ø{x7‘ÎhJCÁYzz:š››‘ž1AŸq ººº`µZa6›¿uQ„Ã#[„àN§mm­(+-Eyy9êëja2™pÞˆxô±Ç1xð`˜ÂÜ‘^»=ƒ‡ ÅñÊÊSªII2˜’SRŒ‚ß MÓ†¦§§P9DdE…ª…ˆ®ö&¾¢„Ž«*<7ŽWUaĈáh˜DE=ve³ÙŒÄÄDttuÁjÁ`@cc#åà3 ¢"×ÂÜ‘RYÂét¢¶¶ÇŽVàÀþ¨©©‚,+ÈɈ1cÇaΜ¹2t(Ìfs4[Ú[Õ bÍêU§~@u¤¥}ëš°g§”†¸&JpªJ·ª=¯tVUhšŽŠò2$'%!3++jxiLŠ!2£Ç?œm­0ØâÑÚÚŠôôôSzB…î’LŸÏ‡–æfÔÔVãЃ(?r 'êéé]4×^w-†æ 99¢(D³¤±sú à† Ú£ŽÝŸëh6FŒù­WäÓÒÒyD¯k«v>ú9"Jì~^¯Œ’’b$%'# †òA19öh®‡R$%%¡©©  Œ´Ì,¢„Ʀ&¸\.$&&öù±u ¡( ¼^/ª«ª° öíÛ‡òò#ƒ~¤¥90rT®™9#FŒ„Ãá€Õj ¯3"ºzƲÑvj/$$%~žŸ_øípá°aì«;à÷û é:Yî«r4jŒzRzHŠŠã•Ç`µZQPX»=’$õáèÈ"hll„ÅjEõ‘ƒÈ4.— ¶p4K|¯× ŸÏ‡Úšlܸ_lÚ„êªJØ“’1jä(ÜÿÀý1b$²Ã‘x„»9çPUµGCnŸ¤âIŽéºŽä”˜Ì&Á“â!Cò ¾½VUuE0¸¤££«5ê E¸>"Š1À1Ò¡)Q_ÿõ×þù7Þ„I“&Ãh4B wœõ&“ ©©©hkkÃàá#`4™ ‡UKMÓàóùÐÜÜŒO>þË–}I1fÌÜ{ï}È/,@RRrôŒ1~íÅ©ÔÚÉ$ÂjµBNÞ0"Š¢Ê9*ÏFc–8vì¸ÒÍ_|ÑU]U•XPXU-Q ¢*'Lü˜¿#[KK ÊËËðÁ?ßE^Þ Æhn¦?bÄÇÇCUUt:Qƒ1ĺ®ÃçóÁívãå—^@II Ýv¦M›†ä䔨¡p{ =}ìhç ‚“Ù §ÿ§Ýž¸Ý`0œ•‰zt`NΆ¬¬Ì]ûöîA0ºò¬Ò½­"÷XÉVQzîóûü8Zq”T”—㵿ÿ5šÿ‰Äûÿ””Øívˆ¢‡ÃI’¢ÄoooÇË/¾I2àµ×—bîÜyHH°GUbì÷Æ~õßÓyT½ÏØ«ÈâOýÄj0xwìØqgeéc:vì8V4vܧõõµgW4-l`cÔOÏ‘¿ÃõÐÖ¶Öèê#„Rlß¾›¿üþ€?ª{+’¡Œ‹‹CBBBxEY–áõù°jåJi·7OwNïYùýmº¦Aû]HVÄêÁƒ†l»pòdœ@ +ââJ»yÝê&ÖíVEj´+ ®®6êKBÀǻCG!‡;ÑúãÔØˆ6œ[ÏçÃþ’b¼ùæRÜ|˘Lfháï>žŽè‘ítÇdEAÀ@ÝûF“qùÏùËŠñãÇŸ=Fµ ÌøRIñ^ÅÙå K€ E {D½¶H<ÐÙÙ‰Žööž¥-ÍMXñÙ§ðû»¥àTz9bDÛÚÚðÜŸþ„aà qá…“¢Ëœõ^ã›÷LŠ´ž(ýtJPJ[“’>Í8𬵧S¸dútýÚë®_–å=GŽ”ƒé,+Jwô@ÿßÒÜÜÃÝ‹åê]_í@MuuTgŸJ+ŠŸßÖ£´¬ sæÎë‘lë_‡£O'½hkkC ¯ Ê%IZ=dðЃC† ÅY®™9«iÂ_,)Þ×èr»bü|9‡íBDüþZ[[úõ“)¥p:X¿~-‚@Ÿ¢yïr ßïGÕñãXºô \:cFÍÏœŠS¿®ñ=Ýy‘ýÇŽV@ÓÔÞ’­egÜþàßµe ú4fM™zÑj‹ÕºòÐÁƒ,âv†$ Ìý1‘±Ûíìã{÷¡¤x::;{³Ÿ¼:dYÆÚ5«ÑÖÚŠ9óæõHe|[ý/Ë(;Ü·[Ïf³–ß~çk'^8‰Ÿ3æßp£ûÚ\ÿFMuU{KK ´c«(Jø… ! èêì:i0 ¶¦ÇŽ…¦i±=4=t¿¢(hmmÅgŸ-Çä)S0r䨓¶~£Úßy'ÛOAGGGåÒB™OÉ›™•ýÔâ%·×ã,>‘‘#GíÍËË{åÐÁþH @Ø p»O?< ¢dß¾>¾{UUð°qÃzȲ‚›oYðµ]Êo⎞ì8¥ö— ¡±!VýÝ®_‡s0úpÅWªW^uÍ !»*+õHÊEòBÁ@Š"Ÿ¶pM)Å‘ò2„â ­Ç@ÚÚÛ°råJLŸ>ùùQiùºÆõd\™ÔÙXx -þÙÏ£)­[6C•£17›rrs^~èáG:¾àλïq7rÔCmm­ !OG UÁŠò×Ϥ·^œ8Q††ÑþXã ±kçN45¶àæK@cô…mß„ëû[ŒBËÒèNPµ¢r¢|T;°Ð‹$ qäH9vïÚÕÿ”ÒÆ8›õ··ßq÷9[/⤧ñãÏ/Õ5í{÷ì~2==à Š"TE…¦k`ŒãtÝ%„x<?^‰±ãÆ÷p)ƒÁ :;;±fõ*Üx™€AÆ÷á÷Œ #ÁÀc_ävfÍVÝÅ Âô2˜´ƒ0ñã©A0€ÐЊ[L @Ue(š ²0Šq >[ö œN7$Q€(Š,+;ûïO=ýÌÞK¦ÏÀwÀ½÷ݯ544¼xÇ’Û ªªªnu¤9ÌŒ1hªN‚Ù 4UEYii´Nù? bÛÖ­ðûÝøáƒO"I(ƒ¥c|η°\5îòÐÒe\@Î0±FÀ!À¬î~« ‹@m Ã@´$<ÛR€k]`:(]_!ÐñWL´µCuì¯ù ¹ËÆŒûÚ%Ógè8‡ã´düø£Ó_~ùŇk««b·ÛÁC{{;dùÌrQº®cðà!xåo¯!##V«~ÍÍMxðG÷áÁ/ÀÌ«.ךç0|ÕoÀëñÂïø ˜qÀõÓ'Ö @ä]p¨Ï!Þ䂺°Žˆ0 ïžâZ,ÝoâÀYÜýZË^Ŧí'Xá´§.ŠöŽ;ö\Òÿôó„?øàCï óç×ÕÔ¦:]΄@0xJ´÷ð˜>}’’’ÀƒÇãÆ;o¿¤‹]‘ùÁ5/˜î %Œ… ·‚5¾]Ì3ä†URÿA ÀÀk¡>„„xPÇ€! œùÝ ®ûÁY`@‚³ À‚à,:¦ùÀ™bÈ€9y †¦µÃ®®ÊN2·~êÕâ–ïض}Gà©§ÿ°éD}Ý%ûK3Ÿ\Ä‚ææbÈ¡Ðuë֮úÏ?ijO.Ý 0Í®‡Ä4À5ˆñ#Àƒ5àÍïC3“BëÃõIì@âMÈÖƒÍfRïq»îô@ æ~Žþ½·€7Ѝ[‡"P}ÉÏZ°åéWv¶|¯À§Ë—+‹o»mc—³Óët:‡3ÆŒ8“•w @(A{[ææâð¡CxÿÝ×ð_÷]‚¢aèŠ7¤ÃDâZˆ \÷‚šÒ¡¹öÎPm‚Q{uŸ9(Tdê¿…M¬’n ëw?¸ ^º?ú¹'ñýÝ÷Á5À01 JÛ–dÊ£{ôŸ=ùü*ÿ÷bzíÛ·XžøÝïo=tpÿ¯dYðu*N v;|>?~rïTܵx ˆêf‹õÅ£jšs€Pø›Ö!аrò"¡ç<2v¾9úÏë q>8×ÃׇΠán7æ‘ï爼Äïd÷æL‡·f)¨\¥2ÞntïRSÒ˜ïÎ :Ù˜<ù"¿³«ë¯?ûÙ#›wîØñß­­­ó5™N×eÈàõ¸ñÓ{'àî[ `"f$ªËc¦(µ€ѵ4þ*0SaØ ºÂÞ Nm€Ö p5út» Ûýš²(0bïÍâ *Šˆö ?¦Öá›Ôï€=1‘±icERRÒƒÇ+öuÖÕy°ª.Æ¢Ëçw>L€,¸û–BÜüƒ\pµ œñBñðž‘(5B0 ¦„_s«u@ðî‚n p9änò£0¡׺­œë¡ëY÷º <†Û£ ³>¬›è QIa`ª štϵkWÑ¿ ¡  ËSÿªµ«æ°rŒM»E­3¢ÓZˆÉ` ˜aÂäqIX8;ƒÆAלà§b‰Îc&cP}Õ!à\ ŠQĄ€wH“*õ€a ÀÅ^Üß31!Œñ°ŠâQU+9ºæ‡l ÜVš”þ³¶O…²ŸRZ•˜˜üÎhii§ëzç|,ç|¶¦ÓþÀŠÔÌ7aᵜÞ8t)yPT«™"5A‚Å,€° ´@ üC»E?ÂuŒÅp!õ9«Vè–(Q¨ÒãŽHh‡®uþ2p)+DøHJƒ¡— ƒÏzJ\7œ(Þãàª'œ2W¨îsMöw9ÇQÈAJ©R__¯RJW躾B’$E’¤Ò”””¦³@{{;eŒMQUõ@ 0IUÕÑvo‚ë>pÆ pÀLS|Ò fp!)ôCµ˜Ì»hØöøÁa®ç¬[ 0-Í[ ÎÕ°Z !ñ à$,1®0gàòñÐõÔÒ€ˆºaÝÏÁ8¾7ºïÍ8SÝÐü'ÀÑ-•ª¢ èõšš„p#²(Šw‹¢x·ªª²(Š%MMM_ˆ¢ø§ÔÔÔ¶³€®ëS‚ÁàÇ~¿?%RdïöÈ$œ˜À¡vØ_ N:Ái8§}9Œ!Ê…Ñkôî}L €)N°H)3¹RS 8“¡sLw€ë´{Y4®+Á…pXà îûÅÜ»xC|]õ€)žk"“C«±ðÐ:s‘YóáYžFA&šÍæ‰V«5À­g ιû„žÉ6† òÀPذ'd #×éžP„É%pPpF¢ºžE8/†Ls(SÁô¾ó~QRiAsåPhÊ*âÅNÌ¿ vƒ'&ÅÌÀÕ.0îÂ÷f=¹7‹‘FÆ ë*8Ózm€ƒ h–q á@°¿…¨bÆ€³ª‚ŒFã—œóÅ”Ò?)Š2$Ò¡]s'¡ ÷` o€‘4 ¬(BDƒ0„“‡Np’0ç“ôÔ» '¢F4üe\‚5 Æ9H‘ $Q„Él†ÕR§”Ž8¼ Oô’Ð=4p&œÄÜ·Ûå k4N5q€„‘˜\½NãL^Ý4àZt^sì4\Q#Ó®þ!ÂoÏz ÖÞÞN4M3QJrÎoPUõ<]×mº®rÎsu”hM°èÛaÒKAõvp=æh :Ìй™À B'6pNÎ@˜ œë Z D‰°Ma `Ä]L‡f¾ªy4•ÕþQ5HaÂqÄñ0ñjPæ¸V)&0n€#8$0˜ ÃŠ¡™08×AõB"è çê0Á]ʃ7Ü”~UIt&N)­¤”EÑ+Šâ*Îù:A\)))ÚY ¿ÑÙÙiÑu}¦i™š¦ T0NÇ4εAºg*Ñu]à FÎE猲½‰NXWE ƒC ¥¤AÀ¹œ4ÿ/„ãÂÕ¨ "…¿£û5¶¡‘ú¡eÉ('ÐB *¨T0PQÊ)áNBÈvÎùvBH³ L„ZAª’’’Ôï4q¦£««‹HÔu}8cúÅœs »‡:‹ÝBH6!Háwp @6#¼’c§U—!h0Œ€BD-Dá@døãU”RÕiè}:!B ¥¤žRÚpRzÜnOÔpÁ÷<:;;MœsNðΙ™sШJçœ0ÆÈé  ”²ëA)¥2F‘ !:F)õ'&&2ügügü?ø5Ú«6³VIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon.icns0000644000175000017500000014256211273045225024231 0ustar julianjulianicnsÅrics#HÀàáþü?ðøüüÿøÿøÿøð?ðü?øÀàáþü?ðøüüÿøÿøÿøð?ðü?øics8ÿÿÿÿÿÿöööÿÿÿÿÿÿÿÿÿÿÿþùùùùùþÿÿÿÿÿÿÿÿÿ¬õý¬ýýÿÿÿÿ¬ÿÿÿÿÿõþõÿõþÿ+,2ÿÿÿÿþþõ  öþ]]ÿÿÿÿÿýþþþÿ àþüþÿÿÿÿÿþþ¬þöÿø]þàûÿÿÿÿþÿþþþ]ûõVþþýÿÿÿþûöúûõõõþþþÿÿ÷øøõöûþÿÿÿ÷Vúöõõõûõöööþÿÿÿýúûàõõöööö+þÿÿÿÿûþþõûöööö+þÿÿÿÿÿÿþþù+ ÿÿÿÿÿþ+ .+ ,ùÿÿÿÿÿø÷ööö+øù¬ÿÿÿis32©‚ ãÛØ/‡&€…†‡I†/ëþ#:'Ý óíèUúäô ^öòüîÛ•º‚/€ì?‚ B>Ùþ·Œ g ÿ–jö :€Râúÿ‹]òðï½°¯ïá€ÿüù^_€ ¿šzÚöêñ]ïäãä€ =zP ôýçÞÞÜÜÒ VïWØØ×ÖÖƒ ûôÒüüøù‚ ¿ãò÷îåÑûöïèÙá âçâáßàáàãÖ€‚ âÛ×)‡"ƒƒ€…D†-ëþ 7"à óíèUæ¿Ò XöÖåÑÛz‚,€¸?‚ B;Øþ¨rd ÿ xUö8€QâúÿxWòðï »®¯ïÝ€ÿüù]^€ ¿šyÚöéñ]ïäãä€ :xNôýçÞÞÜÜÒ TïWØØ××Õƒ ŒêÝÒ×êèæ‚ ¿äËÏÆ¸ÑËÍÆ½Ëá âçãáßááàáÖ€‚ ãÙ×)‡‚ƒƒ…D†+ëþ3 ª‚ óíèUÑ™¬ Xöe—zÛm…‚)€€>‚ ?9 ×þ£fa  ÿ hOöš 4€OáúÿrWòðï º®­ïÝ€ÿüù\^€ ½˜xÚöéñ]ïäãä€ 8vLôýçÞÞÜÜÒ RïWØØ×ÙÍ ƒ ‹«ÒF©¨«‚ ¿æ:@9&Ô ;:6¡á äçãßßáââßÖ€s8mkšÿÿÿ+ÿÿÿÿÿ-ÿÿÿÿÿÿÿ<ÿÿÿÿÿÿÿÜÿÒ.ÿÿÿÿÿÿÿÿ¿«ÿÿÿÿÿÿÿÿÿ`ÿÿÿÿÿÿÿÿÿÿëÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘ÿÿÿÿÿÿÿÿÿÿÿâÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿý¢sÂÕüÿÿë”?ICN#?àðÿøÿüÿüÿþÿþÿÿÿüÿÿðÿÿÀÿÿÿÿ€ÿÿÀ?ÿÿà?ÿÿðÿÿðÿÿðÿÿÿðÿÿÿàÿÿÿàÿÿÿàÿÿÿàÿÿÿÀÿÿÀÿÿ€?ÿÿ€ÿÿÿÿ€ÿÿð?ÿÿøÿÿðÿÿ?àðÿøÿüÿüÿþÿþÿÿÿüÿÿðÿÿÀÿÿÿÿ€ÿÿÀ?ÿÿà?ÿÿðÿÿðÿÿðÿÿÿðÿÿÿàÿÿÿàÿÿÿàÿÿÿàÿÿÿÀÿÿÀÿÿ€?ÿÿ€ÿÿÿÿ€ÿÿð?ÿÿøÿÿðÿÿicl8ÿÿÿÿÿÿÿÿÿÿÿà¬øö+ùýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ÷++++++úþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþVVVVVVVVVúþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþúúúúúúúýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýü¬øöùüüüüüüüýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþàõ+à÷õ÷àýþÿÿÿÿÿÿ¬,]ÿÿÿÿÿÿÿÿþûõõÿöõöõöþþþÿÿü+,,ýàÿÿÿÿÿÿÿýþùõöàý+þÿöõÿþýÿ,,,3ÿÿÿÿÿÿÿÿÿÿþþàõõ+ ‚öööÿþàùW,2Vÿÿÿÿÿÿÿÿÿÿÿþþþõ .öVþþ]]üÿÿÿÿÿÿÿÿÿÿÿÿýþþþþþÿÿ úýþý]]ýÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþüþ ¬ÿàþþöùÿÿÿÿÿÿÿÿÿÿÿÿýþþþ¬þþýVùýõ+]]þþàVûÿÿÿÿÿÿÿÿÿÿþþþ¬ýþúùàüV]]Vÿþþþüûÿÿÿÿÿÿÿÿýþþàûþ¬üþþüõ]]ö+þþþþü¬ÿÿÿÿÿÿÿþþþùþÿüþàþý]]ûõõõõþþþþýþÿÿÿÿÿýþþúÿàü÷õõõV]úõõõõõõÿþþþþþÿÿÿÿÿýþ¬ú+õõõúýöõõõõöúþþþþÿÿÿÿÿýVÿVøõõõõöõö÷÷÷+ü+þþþÿÿÿÿÿÿü+÷øV+õõööõõ+ùõõÿþþÿÿÿÿÿÿû÷øVùúööõöõ+ûü÷õõöööàþþÿÿÿÿÿÿ¬øVùú¬öõöõüöõöööööööýþþÿÿÿÿÿÿþVùú¬þVõ¬ööööööööööþþþÿÿÿÿÿÿÿ¬úûþþÿõ÷+ööööööööööÿþÿÿÿÿÿÿÿÿþûûüþþþ+ýöööööööööööàþÿÿÿÿÿÿÿÿÿýüýþþþú+-öööööö, -‚þÿÿÿÿÿÿÿÿÿÿÿþþþþþþõ,+++ Xÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþ ++  ƒÿÿÿÿÿÿÿÿÿÿÿþW‰àƒ .-+ 4¬þÿÿÿÿÿÿÿÿ++, /53+ 55+++þÿÿÿÿÿÿþù+, ---.-++, ---.-++Výÿÿÿÿÿÿÿÿÿÿÿÿþþþý¬¬¬¬¬¬¬ýþþÿÿÿÿÿÿÿÿÿÿil32 -ˆ3HÅßÛ—M8“ ÀÅÄÄÆÆÊ|2’œ™š€›œœy>`k€oprrt$N &D=°àBGGFGGF2Žª õ÷ûýÑ ´ëµ *qáûúù„KXøîçÞè`ÖîÙP‘èýîãîÞÄ„SŠøîÖ&Æáí"÷ïããñ‡& ûîçÒèôcÖàß³«íòú‡ÿnñ÷úò÷ùÜá’‘“‰Z êòêô}"–”<ˆƒ D÷è;à†U‡1/%¡Œ#ÿþÿÕ˜ˆ •^[…E-"pø Aýþ§€—J[P„% _?þG>óŒ†}ÜøÑD6‚\‹üM 5ˆŽgõõôõc€d‚r~ N½æé驪~…ö€òñó€D‚:;Òíõðÿ s(ÖðòñëÝp€‚ =˜“®èîñó߀ÿ þÿôÚ»´ºÅAÅ5‚ HÍÀ­›Ïìçååóÿ þúïÇn„èê4‚]¼¬œŒz×åðßîüÿùÏV?ºçèääå ?‚D­›‹{j8âïüæøñFÜæââáàƒ d™Šzi.šïúÿû=â‚à€ÞÝ„ =yiXçùÿµÏ€Ý‚ÜÛÝ$„j^XCÐ÷ù#ÝÚÚÙÙƒØ '†LF(€÷ÉØ×ÖÖÞëîâhˆ,€évüøØÔÔÕúþüüûýë‰<ùóôèÒÐøþüùøôôñ戟àUwøòðìâÖÑÿüøöôðìéãÒ¸„‘ÞÎÚüøôòìèäÞÕÏýøöôðêæßÙÌÍÕÆƒ®èåêïèàÝÜÚÔÌË×éæáÜÝÞÜÚá廉£¯›¸ÏÉ€ÂÑϺ™Ÿ”†ˆ(EÅßÚ•K8“?¾ÅÄÉz+’š—˜€™›œx>`h€mp‚oq!N#B;¯à‹>€CEFC-Žªõ÷ûýÐ³ê´ UqÊããÛ„BVøîçÞè^ÖîÙ PHÎæÑ½É¾œ„P‰øîÕ "Åáí!ÝÙ¼¼Î‡" ûîçËÒÙYÖàß—ÇÎÛ‡ÿlñÙÈÀÜë¸áœ vu|‰XϾ¶Þx ||/ˆ‚ AÖ³2 ß„U‡/+"¡Š ÿúÿÍ|o ”[[…E+oø€<ýþ‘uhGYP„%]:þD <ðpmgÚøÐ A3‚\ ‰ üK "muVõõôõa€[‚r|K»æéï›ni{ö€òñóD‚78~Ñíõðÿ \~'ÔïññìÝn‚ =—’¬èîñò߀ÿ þÿôÙ»³ºÅ>Å 5‚ EÍÀ¬›Ïìçåßóÿ þúïÇn‚çê4‚Z»«š‰x×åðßìüÿùÏT<ºçèääå?‚B¬™‰yi4âïüåøñFÜæââáàƒ d™ˆxh+šïúÿû;â‚à€ÞÝ„ ;xgVçùÿ´Ï€Ý‚ÜÛÝ$„j^UA Ð÷ù"ÝÚÚÙÙƒØ %†GD&€~÷ÈÅÖØØ×ÖÖÒÒÔÈ_ˆ*€éqï寀ÔÜóðïïîÁ‰8 ãÝÛÂÎÐÍçåâßÞÛÖ¾ˆŸÏA dÖÏÍɳ´ÏÌÚÖÓÑÍʯҸ„‘ÞÎËÊÉÇÄ¿º´¨²ÌÌÉÈÄÀ»¶ª¦ÌÍÕÆƒ®èåÖÎÈÅļ¶ºÌËËÈÄÃÄÀ¹½Öá廉£Ÿ›¸ÏÉ€ÂÑϺ™Ÿ”†ˆ#BÃßÚ“F8“? ¾ÅÄÇx(’ ™—˜——˜˜š›u8`f€kl€mnnpN !@7­à‰=BBACCB+Žªõ÷ûýвé³*q¬Ìͽ„BTøîçÞè\ÖîÙP$´Ï´–¥‰„P‡øîÕ"ÄáíÅÔ•©‡ûîç¶{|:Öà߉~Ÿ­¼‡ÿjòc…¼Hᜠkir‰V`”l mn(ˆƒ ? f" ß‚U‡,) Ÿ‰ûëÿÊog“X[…E( m÷~9ýþ‡i^Œ EWP„ [9þC9ðfd]ÚøÐ?/‚\‰ üIchQõõôõ^€[‚o{I»æéï˜c`zö€òñó>‚66}Ðíõðÿ V}#ÔïññëÜn‚ :•«èîñò߀ÿ þÿôÙ»²¹Å=Å.‚ CÍ¿ª™Îìçåßóÿ þûïÇm€çê4‚Y»ª™‰v×åðßìüÿùÎT:ºçèääå?‚@ª™ˆxf2âïüåøñDÜæââáàƒ _—‡vf) šïúÿû9ã‚à€ÞÝ„ :weTçùÿ´Ï€Ý‚ÜÛÝ„_[S= Ð÷ùÝÚÚÙÙƒØ †EB#€~÷ÈÐØØ×ÖÖ¤owpHˆ'€ éWƨÔÔÎkǀĿ:‰5 ‘‹ŒEÂÐŽ€Œ|<ˆŸ^VUUMÈYWXXTTFÒ¸„‘ÞΓ MÅ ! ÍÍÕÆƒ®èå†NWbiTFfÊËšLM]k[J\Ëá廉£Ÿ›¸ÏÉ€ÂÌϺ™Ÿ”†l8mk2ÆÜûóàw ÉÿÿÿÿÿÿÿûLÆÿÿÿÿÿÿÿÿÿÿ^%ÿÿÿÿÿÿÿÿÿÿÿü ¹ÿÿÿÿÿÿÿÿÿÿÿÿÎùÿÿÿÿÿÿÿÿÿÿÿÿü DÕî‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿLYæÿÿâ7 RÿÿÿÿÿÿÿÿÿÿÿÿÿÿØãÿÿÿ¾¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÞÿò¾­ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþƒvâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|uÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«müÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô?òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø#œâøüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýùè§1$69;;;86% it32n®‚o€Xiqqrtvp<20KsåqaE09a–´¾ËÒÔÓÕÕÓϰ’€Y-BYy\ß U!(6M\ˆ³ÉÒÛåéëìêåá×ŬšyWNK;!?ÿÛ!HN !½ÖîóíêçäãââãæçéïòòéÂvO.LDÙ ªW4a‰ÆÚÜÙÖÕÔƒÓÔ ÕÕ×ÚÜÛÒ¯S$1Ö ªrD+°ÀÌÌÊ‡Ç„È ÊËÏÐ˵yX 8gªÒ ÿ:C(U§ÄÉÅÁ…Ĉ ÂÄÃÄÆËÊŸ}/3WÒ q7%Dn¹¿¹µ´†µ‡¶· ¸ºÂÀ¢)O_Ð<%C“ª®«ƒ©†ªŠ« ¬°³—B!/MÎm4„¢Ÿž„“ž¡¢¥^ =_ÍNR•š™—‚–—–—„˜™‚˜‡™š w).FËd'>‰‹†Š†‹„Œ‚Ž€”p %†Ë,FNg…‚›€ƒ†„>5YÉâK1*brusŽr†s†u vwxyc'P?È®H%9eqm‰l€mll…mnƒo popqrm3 AR¿Ç‚DNadƒ`]\ZY€Z]^_a†bccbb‚c ddccdejI4&G“ƹD3%SVUSSTSQG?:>FKIA;?GPTUƒVU†WVVX]TC2GÆŽ('1IHFFEB>=a¤½ÌÌʦ„oG=EHIIJMMB0<‰Å‚%#4BA@?;98Q‡¼ÐçööôëÒ­”^<;?BCCDCCABCƒDFH@")3Å …)3765/9[·÷…ÿúïÉi0*2799861,*(''().279:<9)gž-£ U**)"®ßÿýþýþÿýá„V$++% 6]moaB%+€-/.':ˆ¿˜„Ìúðîêíñª¿Œ3™çúú÷ùùúý%üüýÿù׬1DŒ©ËØÜÜ×Ê©‘X !!"!+QE“»¿Ôóùüüÿÿ€ûÿ÷ô™›Ÿ‹( ,ÍöüöòôõöúùùûüþÿÿþñÍV€vÀÜöøøùöñØÂ‰' $B3b»Ýäéóûûúûù÷÷ùÿûýÛiu"€ˆþþøõòïîíîïïóõý€ÿþ™÷€ÿüùùø÷øøî .€- Üìöû€ÿ úõóîìîðôûÿÿëš!Uc]:åÿü÷õòîîëêæçìÖ ’¤óÿÿåOrŸƒÿ üø÷õôööõ´}‚.EâŠÝãæíÿþüýùñíçããåêñôöøèó÷Þš¿HD2iýÿú÷õòïîìêêçÐO€‡Ýõó«ÒèÿÉŠus§ßîðíðñó÷á¾O!J†…uÔÙáöüþýûûóðìçååâæêìîæâáܸ»É\šmFBG€ÿÿø÷õòïîìëì⯀OÁåöËï÷áK84g¸ÖïëììòòïÖ|>bƒ›Çåìíöúýû÷òìéåââãäêðóóßÿƞ"mLIg¢ÿÿø÷õòïîìëêÊS¸÷áûè‚ J…çäàâëñôïÆ&1ƒÎÝîþÿýþûõñêââáââãåëøõñ£!P+&s¯ÿþø÷õòïîìíâ· ;wùãç¹€ #¿èâÞÜêñõèH 0?†‚€ÿ ÷ööôïæãáââ€ãéíöõǤ6|? p¬ÿþø÷õòïîììæ¾* NõæÞ¬ ¥ìãßÚÝêòïl#*iÝû÷÷óñïëä€âãéïñã¿¥6qDi£ÿÿø÷õòïîìëéÇJBòçà­ ¥ìãßÛÙçðóx X€sæ€öóðíæáâãäæïñô̦^DOˆÿÿø÷õòïîìëíᢃFðæî¿ #ÁéâßÜÖáêõ‚<ƒÅå÷ùóòèåßâãäæï÷åÔ¦#¶<. Zûÿù÷õòïîìêêìæ‘C&;’¹îêÿì‚K„èåáßÜÖÞçõz‚±®¯¡Öé÷êãâåçèèééîòõÕZ§7™-$ !ÌÿûøõòïîìêçèêÙÀ¸°ÂÚâêìõò׉O>;e¹ÖìäàßÜ×Ûãï[‚¶±–‘©¿ðæèëïôð€ïöøáO¨ƒ)!. ¡üýùõòïîìêççèëçåãíòñîðóôñ¿‡wu£ÝìéâàßÜ×ÜãäE ,‘²°•Ž™«àèíñóöõõóôûýÕ©n," 1Þüþ÷òïîìê€èïõûÿþüúù÷÷õôôúñìæâàßÜØÝÝÆ€+qœ¤¥£Œ†‹«ðô辰U$‚AcÞÿüôïîìëëîôûüûùö÷øúüüûûüúöëÜáåèãàßÜÙàÌ| i‹¯•™ž§“‚€¸"²O‚o£òýõñíìóøþýûúøö€ò(óøùúùúù÷ðßÛßäààÞ䯛N€Œ“§§”“¡‘Œˆ²mD„" =iÄêñðññøüÿþûúù÷óòðïõöùøøúý÷àÙÝå€âÙ¡r -q –”œ©”Œ‹£œ—³¶¯5…; Ëàîóöùÿÿýú÷öôóïíìîöúøúüûåßâéæçã§8 \y¤ª —‰›—†Žq²²‰{o†€.[yŒ´ÿÿþ÷õôóïïêéë÷ûüýóóöüõáÇ‚€=™œ—¡¤žŠ~œ¤”± ºxfN(#‰ „­ðÿÿ€ó$ïîëéåíú÷Û’˜™ŽnB-+b¥¥“˜š–sTKg° ?sTJ="‹ ‚sÎíÿöóñïíëéåëõê±YaaU5€ 'Sj†ŒƒƒŽ’Ž^/°K`H'’o§üÿõñîíëéçéÛ¶:ƒ€ !A[pr] -®lD%“ š÷û÷€ëêéàt;  f–‚k2‚.¬+”3+>U#žîøøóëèèç·A ( .§àåß˪{_# ef©3kX!” E`s0·ñõ÷öìççé½a>  3D )ÈÛâéÙ­T$ZQ©Ln#“ ™†Lõÿ÷óóôçèøÿñäÁ})€<{ŒB! %Yx¯ÓÛØÆ•I&DFU§…=(†… ‚’gwœ•Z6êÿÿýíêôùƒÿ ðÕ‹D|••ƒj"‚ hŒºÆ³žm-9K™¥›B0†'(ƒk¿¶œW”›…8@î€ÿúõýþƒÿíÕž™–”’‹„f/ € Az ¨›~]P>|‰ª¡fw5'†!75(Q«ò¬ˆ]ž•z(Fð€ÿþùþƒÿ÷Ó¿¨Ÿ˜ŠŠˆ}AK~Ÿ•l]FXR3 ÿ†d$†HWH € ªÞÿôfL‰~^Kôˆÿû‡Œ¨¦ˆŠ~~ƒO#„ $C€–„fB@M ?M"†" 7vJ1  bâÿÿûu`ržn% Yýÿÿþ€ýþÿÿðÙ›„ˆŒŠŽ•¥wqa& „ \~„{mMDZªªGA…!.je0 =oØÿÿùÂ1x‰v# $^þÿýþÿÿä·¤Œ…އ‹‚„‘{Š„X†K`ul]WFa_ª›‘?3…=*FxT$ p¦ùÿÿê”>~…U #]ýÿþýýÿÿþìÆ§œŠˆ…}z}‰§¨ˆ‡  4Ijj_XGNJU›z;†\tt,j߀ÿ'è¹-zsZ(bÿÿýüþÿû禥™†ƒ‡xsj_¿÷ÿøq€‡  Ec]YR=LZš8*… V|xI cèÿ"…[Mƒ4)bÿÿýÿÿç§’„‹Œ”§‘†€uioˆ×ÿï~E ‡  JRRJA;>™™/$… -‡u\"  B×ÿ-ÃG?wI #]þÿÿøÑ™ŽŒ„‡‡”ž†x_|ÀÜøýúùüÿÙ¨ˆ )DKF=4:b‹U—t(„ QdH9uúÿÿþïILs*€# Zþÿòã·†ŠŒˆŽ†„‰™tjžßôýø÷÷øþõÏKˆ ;CD;14Q…_–LH„C–x7ªà€ÿóªis:Ló󺣎„‡‘†ƒrxwƒ¹ÿÿúø‚÷ýúÓˆ '2B3,)+€•‘‚*„_‚–? …ç€ÿä³U\L ‚ 5Ö†£˜Œ‡‚ƒ{tcZ¶Üýýø÷ƒöøüýž ˆ "51'"ZU•cd#ƒD‹‘`  5ÚýÿÿáoKGm1 ‚2ˆ‘†‰™ ˆ{}ea{Êíöúö„õôôöüèg2ˆ *+"9Q¿”DT„nŽ‚> mòüøç«F5Y\„ :P‰ˆœ“‹xnioíúúöõô óóõøú—\ˆ #) +Gå”9=‚J±pE 8½äØ¿t1O_†M¡—…Œ~Š–nM™Âýýöõ‚ô„óõüê´Š .”“U34‚ :Ÿ…*€!€ T“iZq~–¢©¬°¨scYŠœ ¢‰‚uxrg¶îüùõˆóòôþáfˆ3ª“º\  c„‰!„'+ 0”“s>€ mˆr#BNd}™¨ÃÝìñùøùøùøùúûüýþþ‚ÿ÷܇blt”ŠwHœêýûõóòò†ñððîðîïöú–%4¿“W>€O™0q´¶¸ÆßìïòõôôõùúúûüþŠÿá`dkqpG.Žãýÿûõôññˆðññ€ðñôùà9‹7"“"ÃN:'?s4_}´·ÉÒåëîïóñôõõøõõôûþþŠÿ´teckwb7YžÏèñ÷úùø÷÷€ö÷öö€÷ ø÷öòðòòI‰"=“"\_=/:Ne¢À·ÐÛêíìîðòóõõóíëí÷ý‹ÿ؇jU}3_”·ÅÖàæéìî€íîìëèæàÞÙÔÌÈÅΔe Š/L‘$o1SRt´Á³ÄàèêîðñðòôôòáØØÛëûŒÿ¾“JÇîëÄ3Ps›¬µ€¸µ­¨ž|q_J:2$<“‡‡#’%ÓŠ>##31‡¿º´®ÖçëíïîïððôòêÛðöïÓí÷‹ÿ øá áùüóèÚÊ£yM1Ž’0†"?`“&aB|“u4t·º²­ª×æêíìîïððóðåÕôúîßÞäü‹ÿ'ûêûÿÿû÷òîæÙÊö« ›—–——–™Ÿ¥©­®°±Y,±Ãe‡0f’H=)¬¿™R˜°¿´®ª§ÕçéììîîðïòïæÓìñçèÛßõŒÿþ€ÿ ýúø÷õõíëæàØ×ÒÑÓÖÙÛ€Þ ÚÆY%CÊØ†!q’xdèæÉk"A‚¸Á¾²°ª¦ŸÏâçë€í îðïîçÒÙÚØñãßäþ“ÿþüúúøøúúü€ýþúúøõêåàÊ|NÉò쪆'’)|(:ÄâÙ×ÕËÉÇÆ½¶²¯¨£Ÿš³ØãçëëìíïèçëèÐÒêÔçèÙêý›ÿüùúööð騳yV4»ñòòîІU’*A1SÝÚÑÎÍÉŽ¶°­©£ž›–šÍÜãéìííçèèëîæÞÕäååâÛñú‘ÿþýüûùø÷öôíãÝͦ…sTRj| ÂÝçïëêëâ@†(\’*)8`âÖÍÊÇþ¼¶²­ª¦¡œ™”‘ÁÔãéëìëäæçêîìåÒääåëÜëôÿ þýûúù÷óêäÚÇ´ª™{f[Pbˆ¡ÏéïìèçèìéW† ,s’+)LsáÑÉÇÀ¿¹¶°®©¦ ™–„£·âåééåáåçêîòïáÔÛåøíÝáûÿ ýùøõôíêãÒµ¡|A€ 5s“Èìôôïêçæëï… +q’,9PtÛÉÁÀ½¶±°­¦¡ –‘‚„“ÇãääßàäæéíñóôßÝáîØÛÞãýˆÿ ú÷÷ôòêâͬd.€ #g™±Òèîîìëéèçç‚åé旅'5¿’-NOn׎¼¹³­¬©£œ˜’ŽŒ‰€z~ÙÚÚÝáäæéìïòõòÝÜæîòíÜîüƒÿüûùôòêâÈŸt\,$3Tv™©¾Ôßãéëêéèæå‚äç/%“.bNhÓļº¶°¬ª¦ œ™”‹‰…€xxˆËÔÖÜâäæéìïñööãÝàôïéÝçùþ‚ÿûùöéÖ¿°jK9!%G[„«ËÙçïîëéçåääååäãåìɃ6?’.‰IZÉÀ¸µ¯¬§¤Ÿ›—”‹†ƒ{upj”»ÈÕáäæéìïñôùöíÕíÓÓíÛòû‚ÿóéß¼s"€:c¡Ðëôúõìéæåæåå‡äãåéÚ)ƒON“G|:O¹º²°¬¦¢ œ–‘Œ„|vrpf$|¢ÓÞãåèìïñôøüûìÖíøÿâñ÷ÿÿýüóâ–d?g¦Ïâçííêéææååäˆã„âäéä-ƒ<”A;G™¸°«§¢ž›—’Ž‹†~{wrojT0\Â×áåèìïñô÷ûýùãåèðÞóûÿýöóç~9;t­ÈÓâæéèçæåƒãâŒá€àçç8 ƒ*"”@¶EIƒ´¯ª£¡›™“‘‹ˆ‚{zsqldF;¢Óßáèëîðó÷ûýýîååëä÷ýÿüóêÅ]I^ªÛêíêæåãâã…âŒá€àæé< ƒ.•+[TP®©¤Ÿš•’Š„‚zurpkdU#AÀ×Üåìîðó÷ùûþÿõñîù€ÿ ôãÁZbÊêòèäã†âŠáà…ßàåëD ‚*–%d,¤ š”‘ŽŠ„~zuqnjhT@Ã×âìíïóöùûÿ þÿÿþøî£t×éèãâ‰á’àáäç= ‚G–&ŽW=v™Ÿ•‘ŒŠ…|zvqkifd=* #•¼Ýéîïòöùûý‚ÿ üúñÅL<‹æåâá“à€ßƒÞ€ÝÞäâ2‚?–&™UK^œ’Ї€zwrpigb`0 v¤Üèíïòöùûý‚ÿûøèš29·èâà߇ހÝÞäÛ,‚%–Uic1{‘’Š…‚zurojecaP € 9i×âìîòöøúý‚ÿöïÏ=qêãàˆß‡Þ‰Ý€ÜÝäÉ#&<˜mm,]q“…~ysqnid`^Z7€ -·àêìòöøúýÿ ùîØ†‚»éãßßÞ€ßÞއ݊܃ÛÞå¶€?™NU:Iˆƒ|yuqlid`[XQ!‚ wÕçëñ÷øúü€ÿýóÖ«'µÛãŠÝÜ‚ÛÚÞã’2)Ušy1>x‚zwqoiga^XVK‚ UÐäéò÷øúü€ÿüòÂ]ÉãàŠÝÜ”ÛÚßá}€B0›£<„ ¼Üäñôøúü€ÿùïŠP®ÜãÞ‹ÜŠÛ…ÚÙÙÚÝÚR*|‘œŠQ,bpphc_]XRQJ-„—Ôåòõ÷ùüÿþýôÛ:AââÜ‡Û‡Ú‡Ù…Ø ÜÛÅ@ž‘N?<_ie_YXSOJ@ …fÅâïô÷ùüÿûøìŸ¢äßÛÛ†ÚˆÙŽØ ßÔ™ +fžÿ[P1U`c^XUPNG<†M½Þîóöøûÿúöãt;ÅâÞÛÛ†ÚƒÙ‚Ø× ØàÎ|$7™ŸUb4:'ˆ?qæîôöõò¦x$äù÷ëßÚ€Ø×ÖÖ‹ÕÖÝéò÷ü†ÿ þûóí°†'4d§ _|D&&54#ˆ IÚìôõïÚG8¬ÿúëåÙØ×ׇÕÔÓÓ×äì÷„ÿþýþÿýöÛ˜“¨ ÿUS,'$-ˆ +ÇæëëâŠVpëÿÿüüýøõéÚØ×ÖˆÔ×çõú€ÿþþ…ü ûûüüûþþøãæìÊ©f3-((‰³åéåÊ[vœüÿûúúûúùðßÚØÖÔ†Ó ×àñüþÿÿþþýüüƒû‚úûûüõïîáo©™VG‰ ‚ÙâÎÁóÿú€ø ÷øúûìßÙÖÕÔÓÓÒÑÖÞóÿ€ý€ü€û€ú€ù øøùøúüñðõ؈©LdAŠ /«Ÿ{Ÿíÿú÷€ö õõö÷ôæàÙÕÓÒÑÐÒæñý€ÿýüü‚ûú€ù€ø÷öö€õøóñêö᪩d;.‰  5#tæùù÷õóôóôõêäÛÕÒтРÜòúýÿþýýüüûúú€ùøø€÷õõƒôòïåíç䪿W?!†€3ªùûøöõôó ôóôêåÛ×ÔÒÑ€ÐÑã÷ýþÿþýý€ûúú€ù€÷ööõôóôóòïäè俬 3`/ €€"p¬ÿüöõõôôóóñðïïñëçÛÙÕÒÐÏÏÐÔðüþþÿþýü€ûú€ùø€÷õõô€ó ññïððïåâèêÌ®ENRSS‚TS†UTTV[R@ 0GÆŽ&$/EFEED@<:^Ž£½ËÌÊÁ¦ƒmE:CE„FG…H‚IJJ? .9‰Å‚#"0B@?>975N„ºÏçõöôëÒ¬“]96;?ƒ@?@>?@A‚CDE=&/Å ƒ'2443-7Y¶÷…ÿúïÉg-'/46653.)&€"#',0367€8:6&dž-£ S''& ­Þÿý þýþÿýá„T ('"€ 5[mn_> (€+,+%9ˆ¿˜zºäØÒÌÍØ™¿Œ0˜çúú÷ùùúý%üüýÿùÖ«. B‹¨Ë×ÜÛ×ȨW )Q\“®¯¿ÚååäëèåäãáÛÙ›Ÿ‹''ÌöüöòôõöúùùûüþÿÿþñÌT€u¿ÛöøøùöñØÁˆ#">3bs§ÃÏÑÜåâáãáßàáàÝß«›iu€‡þþøõòïîíîïïóõý€ÿþí«€˜÷€ÿüùùø÷øøîž( - ÍØßäçèèãÝÚÑÒÑÒØàãåÍš!U\]6åÿü÷õòîîëêæçìÖŸ‘¢óÿÿåMqžƒÿ üø÷õôööõ³{-@âŠÒÑÏ×íèäçáÖÏľ¾¿ÃÊÑÕÙÊØàÚ¿BA/hýÿú÷õòïîìêêçÐM€†Üõò«ÑèÿȆrr§ßîïíðñó÷á½M‚G†…N»¹ËÛåæçååÚÔÌÄÀ¾»¾ÄÉÐÄ¿¼Å†™ªšHbƒq«ÎÒÔÞãåäàÖÍÈ¿¼º»¼ÄÌÒØÃ´´Æž"mLG d ÿÿø÷õòïîìëêÊO ·÷áûç~‚ I„çäàâëñôîÅ"/ƒ¶¾×êèçèéâÚʽ¹¹º»½¾ÆÓØÚ£!P+$q®ÿþø÷õòïîìíâ· 7tùãç¹€ ¾èâÞÜêñõèF/=†‚èêíæ€ãÓý¹º»€¼ÂÇÒÞ®¤6|?n«ÿþø÷õòïîììæ½& KõæÞ« ¥ìãßÚÝêòîk€ )a ÐáÝäáÝÚÏ¿¼ºº¼ÂËÏ›¥6qB h£ÿÿø÷õòïîìëéÇH >òçଠ¥ìãßÛÙçðóvS€ bÒÝÝâàÚÔÅ»»‚¼ÀÇÎÓ¬¦^CK†ÿÿø÷õòïîìëíࡃCðæî¿€ ÀéâßÜÖáêõ~‚7sµÊáåáÞ˸»¼¾ÀÉÔÆ¼¦#¶:-Xûÿù÷õòïîìêêìæA!8‘¹íèþé~‚K„èåáßÜÖÞçõw‚¡œ™…¼Òå˽»½ÀÁ€ÂÅÊÓ¶¨7ª)!ÌÿûøõòïîìêçèêÚ¿µ¦³ÈÍÓÓÜÛÄ{H::e¹ÖìäàßÜ×Ûãï[‚ {ž—yt¥ÕÂÁÆËÓÍÌÌÉÖÚÇ©ƒ%. ûýùõòïîìêççèçàÛÑØÛ×ÑÒըשwjn¡ÜìéâàßÜ×ÜãäE}—’wq}ÂÂÇÌÑØÒÒÑÎÞãÅ©j* .-Üûþ÷òïîìêéèäØÔ×ÜäçéèçåãÞÖÏÐÙîïìæâàßÜØÝÝÆ€ Z‚…†‡mkpŒÍÒÏ–±R!‚@bÞÿüôïîìëäßÐÌËËÌÎÒÖâæéèêìèàʵÍÚçãàßÜÙàÌ|Vs‘w{€‰zjgu›u³M‚? l¢òýõñíåÙÖÛËÉÈÇÅÂÁÄÎÞåêéëêç×¼ºÏãààÞäÆš  >iqxЉwsy†yvyc²mC„"9gÃéñðñéÛÙãÑÊÇÆÂ¿¾½ÃÔÜçéëíñ溲Éå€âÙ p  [„zx€‹ysu‡ƒ…‰³¶¯3…;ŽËàîñàÞåçÒÉÅÃÀ¿»¸»ÃÞêëìñíÆÀÔéççã¦6 Icˆ‚{l‚€qymU²¥‰{m† €,Zx{—ìèÛÃÁÀ¿¼¹µ¶¾âìïíÒÝéüõàÆ€ .|u‚†phƒ‹{± ºxdK' ‰…”ÔãÜÀ¿¿¼¹·µ²Èåä½wŽ•Œl@+€"Ruˆ‡xu~~`CyŸ¦™}XK<|‰ª¡fr5'† 41 #N©ò«‡[“x&Bð€ÿûîûþ‚ÿóʱ„‹‚{r€pi4 I|ž“iYCUR3 ÿ†b †ETF€ ¨ÝÿôdI‡›{\ Góˆÿùºzlqn‹ŠnqghoBƒ A•Ž‚d@=M ?M…  5tF-€aâÿÿûs^pœl"Xýÿÿþ€ýþÿÿîшfkomvsyŠ_^P„ €Y{‚yjLBZªª?=…! ,hc, :l×ÿÿùÁ-wˆs" Yýÿýþÿþߦqhtwoqjlxd}{T† I]tj\TB]_ª›‘:0…9(DwQ o¥ùÿÿê“;~„R  [üÿþýýÿÿýç»rmstongdgvŸ¤…€‡  1Fhi^WCIJU›z8†Yrr+ hÞ€ÿ'è¸,wqW&`ÿÿýüþÿøá—c~…{wllpa]TP»õÿøo€‡  Ab[WR:HVš6)…T{wG bèÿ#ƒWK1 &aÿÿýÿÿä™}hlnv‹unj_Ub~Ôý€ÿî|B‡  HPPH?8;™-"„ (…sZ?ÖÿÃE;uF!\€ÿöʆuqhtmnzƒobJq»Úøýúùüÿئ ˆ  &AHC:18`‹U—t&„ NcF 7rúÿÿþïŒGJr' €#Xþÿïݪlnpnsnlp~l`[—Þôýø÷÷øþôÍIˆ 9BA7.2N…_–LF„?“w5©ß€ÿó©gq9 Ióï¬mrjlxiol[bdv¶ÿÿúø‚÷ýùÒˆ  $0?0*&'~•‘|*„]€“>ƒç€ÿä³T[J‚1¼ƒjp„|qmjme]PJ°Øüýø÷ƒöøüý ‡ 2.%ZM•ca ƒ Cˆ\1ÙýÿÿàmHDk/€#txjl}‚xpeiQMpÅìöúö„õôôöüèd0ˆ '(7K¿”DOƒmŒ€; kòüøç©D4VZ„ );etonszsbZXc—ëúúöõô óóõøú•Yˆ !&)Gå”3<‚G°nC8½äؾs0M]ˆ:v…}jrqer}xX;’¾üýöõ‚ô„óõüê³ ˆ *“U.2‚  8žƒ( €€ Q’hXp~•¢©¬°§fO?q€ƒ…piij_a\Y±íüùõˆóòôþáeˆ3ª“ºZ aƒˆ…&)9a…›¨ÁÕÜÚÑÔÙÜâãçèéìžxC_ov€zjedIZxËî÷öôŠò€ñò÷ñÁ Š€4£“¦U ~‘e‚)&?^p’·ÏÜô÷ñðòõ÷ö÷õö÷ùü¾•JRemzmeYTzïúöô‹òñôôâ;0”“n:€j†p?Lb|˜¦ÂÜìñùøùøùøùúûüýþþ‚ÿöØxAT^j|td:–çüûõóòò†ñððîðîïöú”"-¿“W<€ M˜/p³µ·Åßìïòõôôõùúúûüþ‰ÿþÛJHQ^\5ãýÿûõôññˆðññ€ðñôùÞ5Š3"“"ÃK6 #¸Á¾±¯©¥žÎâçë€í îðïîçÒÙÙÑïãßäþ“ÿþüúúøùúúüýýþþúúøõêåàÉ{KÈò몆'’)z!5ÂáÙÖÔÊÈÆÅ¼´±®§ ™³ØãçëëìíïèçëèÐÒêÌãæÙêý›ÿüùúööð騳wR0¹ñòòîІU’$A-QÛÙÐÍÍÉŽ´®¬¨¡š“˜ÌÛãéìííçèèëîæÞÕá€àÛñú‘ÿþýüûùø÷öôíãÝÍ¥…rSOfzŸÁÝçïëêëâ=†(\’*)6^áÕÌÉÇý»¶±¬©¤ ›™’ÀÓãéëìëäæçêîìåÒãÞàèÜëôÿ þýûúù÷óêäÙÆ³©™yf[M`‡ ÏèîìèçèìéV†,s’+&KqáÐÉÇ¿¿¹¶°­¨¥Ÿœ•’Ž£·âåééåáåçêîòïáÔ×áöíÝáûÿ ýùøõôíêãÒµ¡|@€ 1s”Çìôôïêçæëï…+q’,6NqÛÉÁÀ¼µ°¯¬¥ ž›”Ž‹€ƒ‘ÆãääßàäæéíñóôßÜßìÒÙÞãýˆÿ ú÷÷ôòêâͬ~b+€ d—°Òèîîìëéèçç‚åé$/¿’-NMkÖĽ»·²­«§¢œš–‘Іx|œÙÚÚÝáäæéìïòõòÝÜäëñíÜîüƒÿüûùôòêâÈŸs[- 2Sv™©¾Óßãéëêéèæå‚äç,%“.bKeÒüº³°«ª£ š—’‰†‚vv†ÊÔÖÜâåæéìïñööãÝÞóìæÝæùþ‚ÿûùöéÖ¿°ŽjJ8!#FZƒ«ËÙçïîëéçåääååäãåìÈ„6?’.‡GXÉÀ·³¯ª¥¢Ÿ›•’‰„~xsnh“»ÈÕáäæéìïñôùöíÕíÍÌëÛòû‚ÿóéß»r!€8b¡Ðëôúõìéæåæåå‡äãåéÚ& ƒON“G|7M·º±®ª¥¡žš•‘މƒ~ytqod!|¢ÓÞãåèìïñôøüûìÖëöþâñ÷ÿÿýüóâ–e>e£Îâçííêéææååäˆã„âäéä+ ƒ<”A:D˜·¯«¦¡š•‘Œ‰…€|yuqnhQ-[Â×áåèìïñô÷ûýùãäçðÞóûÿýöóç}8:t­ÈÓáæéèçæåƒãâŒá€àçç5‚("”@¶BF³¯©¢ ™–‘‰†~ywqpkbC8¡Óßáèëîðó÷ûýýîååëä÷ýÿüóéÄ\I^ªÛêíêæåãâã…âŒá€àæé:‚,•[TL®¨£ž™”‘މ‚€}xtqoicS€@À×Üåìîðó÷ùûþÿõñîù€ÿ ôãÀWaÊêòèäã†âŠáà…ßàåëD‚'–%b(œ¢Ÿ™’މ‚}xsomhfR>~ÄØâìíïóöùûÿ þÿÿþøï¢sÖéèãâ‰á’àáäæ9A–&‡R9u˜ž”‰ˆ„€yxtpihec;&•¼Ýéîïòöùûý‚ÿ üúñÅK:‹æåâá“à€ßƒÞ€ÝÞäâ. ‚?–&™UH\›’ˆ…xuqohfb_/ u¤Üèíïòöùûý‚ÿûøèš/7·èâà߇ހÝÞäÛ' ‚%–UWa-x‘ˆƒ€}xspmhca_N€ 7h×âìîòöøúý‚ÿöïÏ<) ‡ ^çð÷øùöÕ©u¿ÑÌÎÒÕØØ‡×…ÖÕÒÑÐÐÒÕ×ÚÛÙØÕÏËÊÊÒr@?8¥ ÌPJ 6=<6$ˆ=pæîôöõò¤uÞåÜʺÃÊÕØ×ÖÖŠÕÔÒÎÌÑØåòøúþÿÿþü÷ðéÚÊŒf 0d§ _|B"#22ˆGÚìôõïÚF7ªüú÷õè˾¶Îר‡Õ€Ô ÓÎÎÕêõøúö÷÷‚õ ö÷öö÷éܳxxˆ¨ ÿUM)#!*ˆ)Ææëëâ‰SkçöóðñïåÜÆµÆÎ×‡Ô ÓÑÌÔÛìóõôó‚ñððññððñððï⽽´©f3+%%‰ ²åéåÊYp—õòíìíîëæÓ´¾ÅÔÔ‡Ó ÐÍÜãòóòòïðïïƒî ííìíîíëÕÆÂ·/©™QD‰ Ùâ΀¸èòë€è çèëëȰ°ÈÓÔÓÓ‚ÒÐÎÍØíòñî€íìì‚ëêêééèèéèêëÌÄıD©LdA‰ +«žy“Üîæã ááââß»°­ÏÓӃрÏçììê€éè€çææ€åääããâááàäÚϸ̳w©];,‰3g×åäààÝÞÞÝÞÆ¹¥½ÌуÐÌÍÖèèçç€æåääããâáàßÞÞÝÛÒ¶»½Åª¿S:… €&šåãßÞÝÜÛÛÚÚÛÚÜɽ¥³ÊÑÑÐÐ€Ï ËÎÙèçæåääãâààÞ ÝÜÛÛÚÚÛÙÙѶ´ºÃ¬ 3`+€€a˜éàÚÙÙØØ×ÖÕÔÓÓÔȾ¤§ÁËÐЀÏÌËÎÚåäâáààßßÞÝÝÜ€ÛÙÙØ××ÖÔÓÓÒÓκ­·¾¡®5(€  'tÅÜÝ×ÕÕÔÓÒÒÑÐÐÏÐÐÄ»¥¤¶ÁÒÑÐÏÎÍÌÍÖààßßÝÜÛÚ€ÙØ€Ö€Ô ÓÒÑÐÐÏÑÏÊ´¨·½®®À»¥^1‚,=ZœÈÖØÕÒÑÑÐÐÎÎÍÌËÊÉɺ³§¥±»ÒÑÏÏÍÍÌÌÐÞÜÛÚÙØ××Ö€ÕÑÒÒÑÑÏÎÎÍÌËÊÉÈ­¨®¶ÈãÓÁ¥ui£ªÈ§áÝÎdP3"DnŒÇÛ×ÓÐЀÎÍÌËÊÈÈÇÇÅ´®¨¦­·ÒÐÏÏÍÍÌÌÎÙÚÙØ€ÖÕÓ€Ò ÐÐÏÎÎÌËËÊȀǼ¬§«±ÈàÙÒ½°¯*¥ž"XËÓãéðíäÞÖØÓÐÇÁ¼½ÇÔÛÛÔÒÍÍÌËÊÊÈÈÇÆÄ€Á¹­©§¥©³ÒÑÏÏÍÍÌËËÏ€Õ&ÒÑÐÏÏÎÎÍÌÌËÉÈÈÇÆÃÂÂÁÁ¶°¨§¨­ÁåççêñêåÎÕ±ƒš ÑîìíçâÞÛÕÒÐÏ΀Ï/ÕØÙÖÕÐÏÍÊÉÉÈÆÅÅÄÂÁÁ¿¿¾¾º®©©¨¤©²ÒÐÏÏÎÎÌËÉÊÎÐÑÐÐÏÍ€ÊÈÇÆÆÅÀÁÀ¿¾¾¸®ª©¦¤¦·ÒÓÓÔÖÜàåéëî>‹ÒóäÝÙÒÒÐÎÍËËÍÌËÊÉËÌÍÍÊÉÈÇÆÅÅÄÂÁÁ¿¿¼»º¹·µ®«¨©¨¥±½Ü×ÖÕÑÏÍËÊÉÈÊÌË€ÉÆ€Å€ÁÀ¿½½¼¸¹¸´®ªª©¥¤§¹ÏÌËÍÍÏÑÓÔ×Ûèí·•ªÜòáÙÏÍ€ËPÌËËÍÌËÊÉÆÆÈÉÇÆÆÅÄÃÂÀÀ¾¾½»¹¸·¶³±­ª©¨§¦ª³ËÇÄÂÀÌÌËÊÉÈÈÉÉÇÆÆÄÄÃÂÀ¿¾¾»ºº¹¶µ´°«ªª©¥¤©½Î€Ì€ËÌÍÐÖåñΕ»ãóàÙÐЀÍGÌÌËÌÌËÊÉÇÄÅÄÂÃþÀ¿¿½»¸¹¸·³³¯¯¬­¬ª©¨¦¤‡†…}‚ÂËÌÉÈÇÆÅÄÄÿÀ¿¾½¼»¹¶µ¶´°¯®¬€ª§¤¥¬ÄÎÌËËÍÐÒ×èõÖ—ÜðîéÞÙÖÒÒÏÎÍËÌËÊÇÅÅÄÀ€¿L¼»º¸·¶µ³²®¯®¯«ªª¨¦¥¤¯©¤£ª¯¸ËÌÌÉÈÇÆÄ¿À¿¿¼»¹¸·¶µ³³²¯¯®­«ª¨¨¥¤´¾ÎÌÍÍÎÑÓÖÚáìïîŘkÈÇÏæåäàÞàßÝ×ÔÑÎËÉÈÇÄÄÃÂÁÀ¿¾¼»¹·¶´³²±²³¶½ÆÈÈÇÈÉÊÊÌË€ÊÇÆÇÃÃÂÁ€À¿½¼»º¸´³´´³µ¶ºÃÌÒÙÚÝßââßãçàÌÇ¿œ»îíëåééèáàÝÜÙÕÓÒÏÌÍÌËÊ‚ÉÈÅÄÂÀ¾¾€º»½¿ÇÎÏ ÎÎÍÌËËÌËÊÉÉÆÇÆ€ÇÈÈÇÆÅÄÄÁÀ¿ÁÂÅÆÊ×ÜÞßßâçëèéëð壣#¸ÌÎÎçòóóòîíéèèçäãááÞàÞÞÜÙÚÙÖ×ÔÕÔÔÕÕÔ‰ÒÕÒÒÓÓ€Õ ÖØØÙÛÛÜÝßàá€ãäåéìíðòóòîÙÑÑߪ³Ççèììééçããèëíêêîíîðï€íîí‡ìííìíîëîîêïêìéíææçç€éîæãÛ¿Ä«¾U°¬±±¢¢ªª¢ªÃÇÁÄÓÉÖÏÔÕÕÐÔˆÎÔÎÖÕÕÍÔÓÌÓÍ¿Ҭ§¢ª¯¦–8Ë\‹œ›¼Áª€°‹ª °¦­”·´™ªj\qÿª®‚o Xbloosvp7)0KsåqR=,5[”±»ÊÑÔÓÓÕÒέŽ{U$:OsEß 8-IZ†¯ÈÒÛåéëëêåáÖÄ©˜tTFF6!?ÿÛ!HN|¼ÖîòíêæäãááâäæéîòòèÀqK%GDÙªW/\…ÂÙÚØÖÓÒÑ†Ò ÓÔÖØÛØÏ¬N1× fA %}®¿ËÌÊÇÇ‹Æ ÇÈÉÌÌȲvS4_ªÒ ÿ::% P¥ÂÇÃŽÁÂÁÂÀÂÃÈÉž{*-WÒ q, ?j·¾·³²³´´³‚´µ€´µ ·¸Â¿¡! K?Ð 9 ?‘©«¨¦¦†§ˆ¨ƒ© ª­±”;/BÎg/‚šžœ›Žš‚›œœ‚Ÿ¡¢{Z 5ZÍGO’—–•‚”•””•ƒ”•”•–ƒ—˜žr!(@Ëd 8‡Œ‰…‡‡ˆˆ‰‚Š‹‹l Ë,A Kc}‚{‡|ˆ}†~€ƒ‚9.YÉâF+"]nqo‡nononoop€qpƒqrrqqrrstv`"M?È®E1`mi‰h€jiij€i€jijj€k…lmoh- =J¿Ç|? J\_\\€] ZYWWUTUWXZ[]€^_ `_``afE0?“ÆÐ?-OQP€O NJC935@DC:79AKOQ€RPRRS€R€S RRTTSSXP> ,CÆŽ$#,CCBBA>:7^¡»ÊÌÊÁ¥€kC9AD…EŠFHI>*6‰Å‚0>=<;742L„ºÏæõöôëÒ©\66:>ƒ?>=<<;<=>ƒ@AC<#,wÅ #0110*4W¶÷…ÿúïÉe("+24431-&  #',134€574$ dÅ S$%#¬Þÿý þýþÿýá‚Q%$€ 3Ykl^=&€(*)" 4˜g­Ï¼µ°­¿n¿Œ-˜æúú÷ùùúýüüýÿùÖª+=‰§Ê×ÛÚ×ȧŽU$H.“®—ªÄÏÏÎÓÓÏÏÊľ»Y›Ÿ…%"ÌöüöòôõöúùùûüþÿÿþñÌS€r¾ÛöøøùöñØÁ†;3bsŒ°±¶ÆÎËÊËÌËÊȾ¿‚›ir€ …þþùõòïîíîïïóõüþÿÿþí«€—÷€ÿüùùø÷øùï%€( ºÆÉÌÐÑÐÊÄÀ¸³´¶»€Ã®š!U\]3åÿü÷õòîîëêæçëÖž‘¢óÿÿåJpžƒÿ üø÷õôööõ²y *@âŠÇ¿»»×ÑÍÎɹ°¡˜––›£®´½¨¾Ê­š¿B@ ,fýÿú÷õòïîìêêçÐK€…ÜõòªÐçÿdžrn§Þîïíðñó÷á½L‚G†…N™¤­ÃÍÐÏÑÍÀ·©Ÿ›—””¤®£žªMw”›H<=A}ÿÿø÷õòïîìëìá­KÀåöÊï÷à‰E1-e·ÕîëììòòïÖz;b„8Џ´·ÈÌÏÍȾ°¨™”’“”œ§²º³–”¸ž"mICc ÿÿø÷õòïîìëêÊN}¶öáûç}‚ E‚çäàâëñôîÅ ,ƒ—£¾ÓÐÏÔÕÌ­—‘‘“”–œ¯¾È£!P(# o­ÿþø÷õòïîìíâ¶6tùã縀€ ¾èâÞÜêñõèC€-:x‚ÍÐØÓÒÐκ£™‘’““””›¡°Â¤6|=lªÿþø÷õòïîììæ½! IõæÝ© ¤ìãßÚÝêòïg€'a ¶ÇÆÑÎËųœ”’’”›¤ªœ¥6m> d ÿÿø÷õòïîìëéÆD=ñçߪ ¤ìãßÛÙçðósS€Z»ÅÅÐÍû¥€“€”•˜£ª±Œ¦^A I…ÿÿø÷õòïîìëíà ƒ@îäì¼€ € ÀéâßÜÖáêõ}‚3s®µÌÑÐÉ­Ÿ““€”•—¢³¨¦#¶6)  Túÿù÷õòïîìêêìå@!6޵èãõá|‚GèåáßÜÖÞçõv‚ ›”r§¼Ð­—“•—˜™ššž¥²”¨7ª&ËÿûøõòïîìêçèéÞ¾ª„w~~{…‹…M43AU§y6" † …ar™“U0êÿóËX?Š·ü‚ÿ îÒƒ&ZkrodP‚ dˆ¸Ä²œh+0C™¥›=,… !!ƒ h¾´™R’˜ƒ1;îÿÿòÇ Õìƒÿé̆nllniieM  ‚ =x¥™|WJ7w‰ª¡fr0#† 3/ !M©òª…Yœ’w!AðÿÿýíÏïû‚ÿóǬ|ysnhgghb/ €  G{Žž’gW@UJ3 ÿ†b† CRD€ ¨ÝÿóbG†šz[€Eóˆÿ÷¶p`dbyyai_ag?ƒ>}•Œ€c;:F ?M… 1rD+€ _âÿÿûpZl›j€Výÿÿþ€ýþÿÿîЃ\_dckglzWTH„ Vy€viHÀ×Üåìîðó÷ùûþÿõñîù€ÿ ôãÀV`Éêòèäã†âŠáà…ßàåë@‚!–%_$›¢ž—‘Ž‹‡€}zvqmjfdO;}Â×âìíïóöùûÿ þÿÿþøï¢r×éèãâ‰á’àáäæ5A–&‡R7t—œ’މ‡~xvqnhfaa8$”¼Ýéîïòöùûý‚ÿ üúñÄI9Šçåâá“à€ßƒÞ€ÝÞäâ,?–&™PC[š‘Œ‡„{vsokfd`[+ u¤Üèíïòöùûý‚ÿûøè˜.7·èãà߇ހÝÞäÛ&"–UW_(wއ~{vqnkfa_]L € 3f×âìîòöøúý‚ÿöïÏ:oêãàˆß‡Þ‰Ý€ÜÝäÉ ‚!6˜mm$Wm}zvomje`][V2 € %·ßêìòöøúýÿ ùïÙ„ºéãßßÞ€ßÞÞ‡ÝŠÜƒÛ Þå¶ ?™NP6E…yvpmhe_]WTO ‚ uÔçëñ÷øúü€ÿýóÖ«!´ÛãŠÝÜ‚Û ÚÞã+›u-9uwtniec^YTRH ‚ PÏäéò÷øúü€ÿüòÁZÈãàŠÝÜ”ÛÚßáz€<0›£57Jwsojda^[SQL: „  ¼Üäñôøúü€ÿùï‡K¬ÛãÞ‹ÜŠÛ…ÚÙÙÚÝÚL"u‘œŠO#`lld`[WRPKD)„–Ôåòõ÷ùüÿþýôÛ5=ââÜ‡Û‡Ú‡Ù…Ø ÜÛÅ :ž‘I95[fa[USOIE; „cÅâïô÷ùüÿûøìž  äßÛÛ†ÚˆÙŽØ ßÔ˜'fžÿQK+P\`YTQMG@5 …I¼Þîóöøûÿúöãr6ÄâÞÛÛ†ÚƒÙ‚Ø×…Ø× ØàÎz 0™ŸUX.8B]UNLHC:/† ¥Ðìô÷øüþõíËM~äޅن؇×ØÙØ‚×Ö€× ÚÞ¼7E¢ L"'DRJF@A0% †‰ºçò÷øýüòÝ‘žÒçۆ؊×ÖÖÙÜÞØÌÆ¾°°´¾ÈÔÙÞâÁ ¤ [G:(ADB=;) †lŸçñ÷ùûöå¿=t™µÐÙۄ؂ׅÖ×Ó½®xonprqokjoz•½wJ*¤ UdG'6?@;8& ‡[çð÷øùöÕ©5pŽ©ÁÌØÙØ†×ƒÖ×Ôʲš‹zmnqz€}ukil{—E <8¥ ÌPI3984 ‡ 9nçîôöõò¤s¸Ÿ‚S9t™ÎØÖÕÖŠÕÒÄ™TTb‹¼ÒÜçïïíäÖ¿©|R0d§ _|@ 0/ˆ DÚìôõðÚC)”äÞØÓ«_CB¯ÑØ‡Õ ÔÔÖÈuUNÈÕÛ€ÙØ€×€ØÙØÒ¨…<f¨ ÿUM'"'ˆ&Çæëëâ‰CQÁÑÌËÊÄ©WD’¶Ù†Ô Öиe[i¡ÀÊÌÌÉ†È ÉËÊø”M<@©f0*#!‰ ²åéåÊUWrÇÄÀ¿Á½«v)fŽÌÔÔ„Ó ÐÁBfƒºÄ¿Àˆ¿ÀÃÀ°n=2ª™QC‰ €Ùâ΀Œ³·²€¯ ®°µµY1›ÒÔÒÓ‚Òº‘-FŸº¶€²±€°¯°†¯°´µV>@ªLd=ˆ (ªžwcŸ«¢ƒ ¡¡“8)²ÏÔ‚ÑÏm?† ¤¢†¡‚ ŸŸ¡£ƒc'P!ª]8)ˆ /8™•‘‘‚”R/l¼ÓÐÏ£58Ž„”‚’‚‘‘Šo#04`ª¿O5€… Y“މ‰ˆˆ€‡€ˆŒ[8E«ÌÑÐÐÏÊ} CŒŒ‹‚Љ‰Š‰‰€ˆ‰ˆ‡€ˆ‡r( *I¬3`( € € €,RŒzyyxxwvw|[>ƒ²ÑÐÏÌ·9 K~|‚z„yzyxx‚wvw{m2*:¯$ 2kvtl€jig‚himK2WŒØÑÒÆ– ;nnlkji€jijjij„hij["&2(®‡i6†Gbfc_\\€[X€YXXY\09o×ÑÒ¿w []]\][ƒ\[\€[XXƒY VF+wÕÙÁ¥ui£ªÈ«¢z;†,Xc[VSSQ€R€QP€QN!,bÖÑÓ¼iJSU‚T€STRSSQRPPQQPPQRF6 vÚÙÒ½°¯*¥žXËÓãéñð´€,148;LKLQY[WOIDCBB„A@?AA-QÖÑÕ¸Y %?FFCCBBCCDCBCB@A@€AC%€ læèçêñêåÎÕ±ƒš!ÑîìíçâÞÛÛ£o!%9EIFC=:74433223211€232+‚QÖÑÔ¹Y #/7€5 434332233211€232&‚bÓÔÓÔÖÜàåéëî‹ÒóäÝÙÒÒÐÏЦu  "('$'#$$##$##!""!0fáÙÛÁm%"#%#€$""‚#"!! €nÏÎËÍÍÏÑÓÔ×Ûèí·•ªÜòáÙÏÍ€ËÏ®‚  ƒ4hÐÈȲh € €ÏÍÌÌ€ËÌÍÐÖåñΕ»ãóàÙÐÐÍÞ: ƒ   ‡ /T‰„€sI    ‡8¥ÎÌËËÍÐÒ×èõÖ—ÜðîéÞÙÖÒÒÏÁ‘! ™E„™œ¢©­±{- —S„Í ÎÑÓÖÚáìïîŘ$kÈÇÏæåäàÞáÞÑ¡waG9310389=ADGOONKB@:86-€,;5DTy«ÀÆÆÇÉÊɼ‘wT@41/-35:"F‡¨°ª¹ÃÍàéôøùôîçØÙÎǼŒdM*  =V…ÅÝáÜèîóýÿÿÿÿÿüûûý÷óìÇ¢Šb3 1w²Òýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúç¥^9 :kÐðùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþöåÊ„a£ÇöþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûõÝ„?  9œÓêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú»{U .õþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÕpC|ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÙQ*›Ïüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ÷Ã`0 KÂíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþîW!“æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ¤$fåûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÙx 3°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþôÎLFÒüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýìu-iðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû»@ e¢þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþíD‘ÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÜ  3¬Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúà vÙùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖV  Œåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî®8uŠŠ‰]¸ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Ò8  0[•²ÃÝãâááÓŽ_,ÎöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûáI &DVjšÔêóýþüüþùÅ‘+Nãûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðf CcœÈÝêþÿÿÿÿþýýü÷ôÎ\$Ž÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¾7 .Tf€ÛïõùüþþÿÿÿÿüðáØÆ“ƒk/*Ÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýß]& 0Ey´ÏØßùþÿÿÿÿÿÿÿøê¿{YMB$ 3µûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþìs9.Zn„·ç÷üüþÿÿÿÿÿÿÿýáă@"Iíþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûš\*KŽïûýÿÿÿÿÿÿÿÿÿÿÿÿüíšb LèþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿןÛóÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÚ†) )dîþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðº"<ÄôþÿÿÿÿÿÿÿÿÿÿÿÿÿçÀ]$ ?{óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÂ+rØùÿÿÿÿÿÿÿÿÿÿÿÿÿôÁŽ(l«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÅ7oàúÿÿÿÿÿÿÿÿÿÿÿÿÿùÈ[*‡ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÔWR‰éýÿÿÿÿÿÿÿÿÿÿÿÿÿòÂC“Ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ襂¾ÝüÿÿÿÿÿÿÿÿðáÚ×ÓÛ»N¤Ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóνç÷ÿÿÿÿÿüìßȲ¡›˜”€JÈôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþúç¦v"fÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûì»a% Šäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð³ŒR§ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüíÉ|T%=Þúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþí´V %FžöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÂH Hhœ¶ÄÏèþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿИI‚¥ÚðùüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌ’BÄë÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿݨ'!K¯÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýØb6‡³ëþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ½5 _¸ÞýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúâZQ¬éüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù¤3 FÈóýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓŽ_p¨ðþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÞ¼j- 1£Õüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøã£\ ‚âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÁS$+Áòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô´ƒ0  |èüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþêÓ™<0¬öþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûðËo)VðþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÚq; p­ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÏ—-¨ÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÕHÂîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüì³* wßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüæ]'¿òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö„!QÝùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù˜,mêüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¦2 (øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÃ< <ÏüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÅ< %`ïþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇ?.lùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû½: 3rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö•']œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÕEˆÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÔp 3¦Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä¶A 0Úôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³z)U´òýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþâm5cêþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÅD„¿úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¹6 7²äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû´4˜äýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûµ2‘äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¼9 •åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû½9 ²ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû·5 Àðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù¢+Àðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöl¿ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôUºîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ uÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþì"QÊõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÂ5µçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ韆ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÒ[QŽöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä°+"Zãþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶z ?Äûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú—Ysíýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþåc**¼ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù©5  lÍðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþózA¯Ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüæ\r®üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¾'0jëþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÏ[4¡ñýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¯z#lßùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþçIªìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø±6 5ºëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÚJoªúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýä‘BzâüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÈa )–êûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ»ƒ'Šäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýl- .•Çûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ°z"_—îþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÕ¬U 8½ôýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÐB 0„Óðüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¿= &p ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþïu:=h¹åøýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüœ^ -‘ÚóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ¥w°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÆFs±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûå J) $3:•Æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýò͆eU?:*  @Sx—Òèøýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ñîê寋TP.8‡¯Üò÷ùüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúøóîȬx 9¶àîùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþôíÛ† Jàúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¯*JÖöýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþõ·, Q»åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèš1 3Eaš¶ÀÉã÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûâËÁ·…[E(  "[w‚®ÈÐÓàíóùùùùúüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþüûûûùùöñåÙÔÑÌ­Ž‚xF  (=DIy©ÀØØÙÚÞäñöøøøøøøøøúûûüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿýýüûûúøøøøøøø÷ñîèââàÙØÍ»Ž^IC@'  "Eu†ŒŒŒŒŒŒŒ’¨¹¾ÄÓØíõú÷÷øûÿÿÿÿÿÿÿÿÿÿÿÿÿù÷õðóîÞØÇ¿º±™ŒŒŒŒŒ‰seN84+ !!!!!!!$/7:=FGQVYWWXYZZZZZZZZZZZZZXWVSTRKG>;84(#!!!!!    tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon.ico0000644000175000017500000021475211273045225024050 0ustar julianjulian hf ˆ Î  ¨V00 ¨%þ@@ (B¦D`_ “Ά(  áááÕØÙRiÒíxwÍæ“}Èß„ÆÛ­ÇËͰ’ÑᯀÍã§{Èà—kÃ߈ÂÒØlÜÜÜ<èèèÛÛÛ;œÈÓ¶‘±ÿ0²Öÿ:Åîÿ$·åÿƒ¼ÎÿÏûÿ<Îöÿ:Æïÿ+ºæÿo¾ØÐÕÕÕŠååå 247%Øÿailÿ˜Ñáÿ}ÐêÿÈÐÓÿ„Úðÿ¨êüÿ¨çùÿ}Ôïé&¹èGIL JLNÚ "%ÿÿÈÉÉÿ¨µ¹ÿÓØÙÿØØØÿÖרÿ¾Ùàÿ¾ÙáÿT_cò""nprƒvxyÿ@BEÿ8;=ÿðððÿåååÿ½½¾ÿÞÞÞÿÞÞÞÿÝÝÝÿÜÜÜÿ‘’ÿ¨—˜šç™š›ÿyz|ÿºº»ÿðððÿïððÿØØØÿµ¶¶ÿ¼¼½ÿßßßÿãããÿš›œÿù79= †‡‰Ø„…‡ÿ»»¼ÿëëëÿääåÿûûûÿüüüÿ÷÷øÿÍÍÎÿ¡¢£ÿ•–—ÿjkmÿÿ #&#(+.Bÿsuwÿ¤¥¦ÿ×רÿëëëÿ¡¯ÿw{…ÿÙÙÚÿèèèÿ×××ÿ*,/ÿÿ‚SVXê+-0ÿ(+-ÿ¬­®ÿ479ÿ58>ÿˆ¤ÿŠŸÿêêëÿ‹Žÿÿ"ÿ*-0…"pÿ$'*ÿ,.1ÿ‡‰ŠÿUWYÿì÷úÿ­²ÀÿmvŠÿÿ368ÿTVY®LOQ {}~!#‡ïÿÿ8\gÿ*ÃðÿPv‚ÿ'*/ÿNS[ÿSZdäVXZ #&c!$ÿÏÏÐÿƒÐäÿlÏëÿŒ·ÆÿÈÉÉÿ $ÿZe{銢¿š¡ÆëH¿Øñ469*FIKÿóóóÿz|}ÿ¤¥¦ÿegiÿÜÜÜÿÿ%(,FÁÙð“¦ÈéðŸÅé °Ïî’“•,/2å±²³ÿÑÒÒÿY[]ÿz|~ÿTWYÿ"%(åIKLÍàóÄÜôEºÖòWGJL{€‚ÿ‚„…ÿƒ„†ÿ„…‡ÿxz{þ/25];=@npq‚¶·¸ÚÄÅÆô°±²Ï_acZðÀÀ€€€ÀÀðððø?ø(0 ìììèååÝàá;ßßß[ÜÚÚaÚÚÚrØÚÚƒÚÙÙˆØØØ‰ÙØØ‰×ÚÚ…ÛÚÚwÛÙÙeÜÝÝ^ÞßßEåää+èèè ÛÛÛ‹ÒÒÒëeÏêÿÈöÿ Ãñÿ&¾êÿ ¸æÿ¯àÿC¯Òÿ°·¹ÿ0ÊñÿÆôÿ"Áîÿ%¼éÿ¶åÿ¯ßÿ‚ÀÔÿÑÑÑ÷ÖÖÖÊåååäää ÜÚÚi&˜³òn‚ÿ5—²ÿMÏóÿLÊïÿGÄêÿ¬Ýÿ»ÏÔÿÏýÿOÖúÿNÒöÿMÍòÿLÈîÿ6½çÿ@¶ÝÔÙÙÙxààà?ëëëMOR ¨ÿÿ025ÿv¥²ÿ•àöÿŽÛóÿl¿ÚÿÐÑÑÿbÕòÿ˜èýÿ–åúÿ–âøÿ•ßõÿoÑðü&¹èEdfg358½!ÿÿÿ…†‡ÿÊËÌÿ™ÆÓÿÒâÿÒÕÖÿÕÕÕÿÉÔ×ÿ¡Ýíÿ¯éùÿµêùÿ˜Ôåÿ1fxµHKMˆRTWÿ+.1ÿÿÿ¿¿Àÿùùùÿ””•ÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿØØØÿÖרÿÐÖØÿÖÕÕÿ+.0ý"LKNP+rtv÷jloÿKMPÿÿ257ÿèèèÿýýýÿÇÈÈÿ²²³ÿÞÞÞÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿcefÿÝ8;=rtv¤˜™›ÿƒ…ÿlnpÿ'*-ÿ¡¢¢ÿðððÿùùùÿøøøÿ¯°°ÿÒÒÒÿâââÿáááÿáááÿàààÿàààÿßßßÿ{|~ÿÿ K‘꯰±ÿ™šœÿƒ„†ÿ™š›ÿáááÿðððÿååçÿóóôÿúúúÿµ¶¶ÿžžÿ¢¢£ÿÄÄÅÿäääÿäääÿãããÿrsuÿÿ“‹ŽÞ®¯°ÿ¬­®ÿ ¡¢ÿâââÿêêêÿààáÿééëÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿôôôÿÓÓÓÿ³³´ÿ­®®ÿÍÍÎÿMPRÿÿ¯MOQU!$úCEHÿ©ª«ÿéééÿðððÿéééÿûûûÿÿÿÿÿûûûÿ¹ºÁÿš›œÿ™š›ÿ¢£¤ÿ¤¥¦ÿžÿoprÿ ÿÿ×:=?!ÌÿY[]ÿY[]ÿŠ‹ŒÿÁÂÂÿÚÚÚÿæææÿœŸ¬ÿ_jÿŒ˜ÿïïïÿñññÿñññÿñññÿ‘’ÿÿÿÿe"%„ÿ!$'ÿCEGÿ"%ÿÉÉÊÿ`bdÿÿÿsz‹ÿhtÿƒ’ÿæçèÿõõõÿáááÿ#&)ÿÿÿ #&ÿ'*-c9<>÷ÿ146ÿ'*-ÿIKMÿÕÖÖÿORTÿÿËÌÍÿÃÇÐÿr~˜ÿls‡ÿÇÉÎÿGJLÿÿÿ,.1ÿCEHÎdfh!$&ƒÿÿ#&)ÿÿACFÿŒÿJMOÿÄÅÆÿÞõüÿçèìÿz…›ÿ]f}ÿÿÿVXZÿfhj½RUW{}~!$™þÿÿÿÿ),/ÿ\¨¾ÿ#¿íÿEm{ÿÿ!'ÿ9<>ÿ€ƒ‰ÿ149äVXZ¯¯°69;7"ÔÿÿtvwÿR ´ÿÈ÷ÿ(ÃïÿšØìÿ·ÀÿTWXÿ"'/ÿdp‹ÿfsŒÚx… "%„ÿ˜™šÿðððÿÂÞåÿb·Îÿ™Ûîÿ^Žÿ×ÚÜÿÖÖÖÿ"ÿ ÿmz“Ò†›·ïžÄ鈢Çëf¿Øñ.13KÿÝÝÞÿðððÿ‘“ÿ"%'ÿ¼¼½ÿÿ¬¬­ÿäääÿ"%(ÿòƒ‰ ÅÛñº±Îëÿ–½äÿžÅê¦ÉÞò []_û««­ÿòòòÿáááÿÄÅÆÿ‡‰ŠÿËÌÌÿíííÿ…†ˆÿÿ ¥ÉÝñÅÝô6¾Øñ…®ÎìÒ³ÑïÜ·Õò036ÈGIKÿ°±²ÿËËÌÿƒ„†ÿ;=@ÿBDGÿIKNÿ=?Aÿ+-0þ+.0IÁÙð¸Ôï369_jlnÿsuwÿsuwÿtvxÿuvxÿuwyÿvwyÿtvxÿ/24·’“•ehjKNP³¢£¤ÿ­®¯ÿ®¯°ÿ®¯°ÿ¯°±ÿ«¬­ÿZ\^Ò-/2WY[MPRj§¨©¿ÈÉÉäÉÉÊí´µ¶Éfhjv248 ÿƒÿÀðà?À?€?€€€€ÀÀà?ø?øüCüpüÿþÿþÿÿ‡ÿ( @ ïïïéêê#åææ,âââ1ãããFãããYâââ^àààaàààaàààaáââ^âããXãããGããã3äåå,êêê!îîî áááBÚÚÚ‹Ñ×Ù»vÕíè\Ïí÷bËèýiÇâÿjÄßÿbÀÝÿY»Ûÿk¼Öÿ¶ÃÆÿÄÄÅÿŒÌÝÿ]Êçÿ]ÇåÿfÆáÿkÄßÿeÂßÿ]¿ßýeÀÝù±ÏÙí×××ÄÚÚÚ˜àààVèèèéééÚÚÚÙÐÐÐÿ†ÍßÿËýÿËùÿ!Èõÿ Äñÿ¿íÿ»éÿ´åÿ©ÞÿV­Ëÿ¡ºÁÿÊûÿÊùÿ Èöÿ!ÄòÿÀîÿ¼êÿ¶æÿ«àÿ,®ÙÿÏÍÍÿÏÏÏÿ×××ëååå*éééååå-\®¿®bwÿ KWÿ.t‡ÿSÊëÿVÐòÿUÌïÿTÉìÿ%µãÿa¹ÖÿµÏÕÿÎþÿVÚüÿW×ùÿWÔöÿVÐóÿUÍðÿTÉíÿ:½çÿ°àãâßÞ_ããã2èèè ƒ$')oôÿÿÿOgnÿˆÙïÿŒÝõÿ‹ÛóÿFÀçÿ©ÈÓÿÏÐÐÿGÐóÿæýÿŽäûÿâùÿà÷ÿŒÞõÿ‹ÛóÿeÍíÿ#¸èu«¬­.03ÿÿÿÿHJLÿÚÚÚÿ‡ž¤ÿÅîúÿ”ÝóÿÈÛÿÔÔÔÿÓÓÓÿ½ÒØÿ~ÝöÿÀñýÿÄðüÿÃïûÿÄîúÿ¨ä÷ÿI½â¨pÐï;=@u=@Bþ$'*ÿÿÿÿ}€ÿôôôÿ´µ¶ÿƒ³Âÿ¾ÓÙÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÒÕÖÿ¢Õâÿ¦Ýìÿ¨ÞîÿŸ×æÿX|ˆÿË+/2GIL1SVX÷SVXÿ8:=ÿÿÿÿ¸¸¹ÿøøøÿòòòÿwxyÿÛÛÛÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØ×ÿ×××ÿÀÀÀÿÿ!³´µY\]½uwyÿegiÿSUWÿÿÿ035ÿâââÿùùùÿýýýÿ¤¥¦ÿ°°±ÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿ479ÿù147!QSVO†ˆ‰þ‡ˆŠÿvxzÿfhjÿ247ÿÿ‘ÿíííÿúúúÿÿÿÿÿôôôÿ‡ˆˆÿáááÿàààÿàààÿàààÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿSUWÿÿ…ikmµª««ÿ˜š›ÿ‡‰Šÿwy{ÿ_acÿTVXÿÝÝÝÿïïïÿøøøÿííîÿöööÿãããÿŽÿ»»¼ÿáââÿãããÿâââÿâââÿâââÿáááÿáááÿáááÿY[]ÿÿæZ\]€ƒêº»¼ÿª«¬ÿ™šœÿˆŠ‹ÿ„…‡ÿÑÑÑÿåååÿðððÿææçÿâãåÿøøøÿÿÿÿÿñññÿ±±²ÿ‡ˆ‰ÿ‰Š‹ÿ ¡¢ÿÒÒÓÿæææÿåååÿäääÿåååÿHJLÿÿÿ46:!wy{ßÌÍÎÿ½¾¾ÿ«¬­ÿš›œÿÃÃÄÿéééÿèèèÿäääÿßàãÿñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿöööÿßààÿ¯¯°ÿžŸÿ ¡¢ÿÑÒÒÿåååÿ&)+ÿÿÿ!$@CFH‚mpqÿ$'*ÿƒ„†ÿ­®¯ÿáââÿîîîÿîîîÿãäåÿééêÿÿÿÿÿÿÿÿÿÿÿÿÿóôõÿùùùÿëëëÿ¾¾¿ÿ¡¢£ÿœŸÿžŸ ÿ   ÿEFHÿ‹Œÿÿÿÿ"%(J˜šš#&)¦ÿ358ÿ~ÿËÌÌÿìììÿòòòÿîîîÿûûûÿÿÿÿÿÿÿÿÿüüüÿx|Žÿxz€ÿprsÿ°°±ÿÖÖ×ÿààáÿÜÜÝÿÍÎÎÿ¹ººÿcegÿÿÿÿÂCFI.03^ÿÿUWYÿ/24ÿ@BEÿqrtÿ§§¨ÿÌÍÍÿÐÐÐÿßßßÿŸªÿbm‡ÿ`j€ÿ”— ÿííîÿòòòÿòòòÿòòòÿñññÿãããÿ"$'ÿÿÿÿÿ$')ARUWøÿÿaceÿÿ*-0ÿÚÛÛÿz{|ÿ,/1ÿÿÿFM[ÿjuÿgs‹ÿv{‰ÿßàáÿõõõÿõõõÿõõõÿsuwÿÿÿÿÿ!ÿ7:<8"%±ÿÿ$'*ÿOQSÿÿhjlÿóóóÿprtÿ!#&ÿÿgikÿ×Úàÿx˜ÿgq‹ÿjs‡ÿÆÇËÿøøøÿ±²³ÿÿÿÿÿ69<ÿ47:Õ‹Ž /242ùÿÿ58:ÿ*-0ÿÿ|~ÿÛÜÜÿgikÿ!ÿkmoÿýýýÿñòôÿš¢µÿgqŒÿdn†ÿŒ™ÿ ÿÿÿÿFHKÿUXZ×LOQ(ééê%(*”ÿÿÿ!$&ÿÿÿRTVÿ‰ŠŒÿoqsÿ^`bÿêùýÿÙôûÿþþþÿ´¸Âÿgtÿ\e{ÿ!ÿÿ368ÿwy{ÿgikÄQSV{}~ #Ÿÿÿÿÿÿÿÿ<>Aÿ;JPÿlÖõÿ%¾ìÿ_‹ÿ!$ÿ%ÿ"(ÿ,/1ÿžŸÿxz|ÿ'),ìVXZnpr69;v"%Áÿÿÿÿ #ÿ&7=ÿA²ÍÿÁóÿ·ëÿf¿Ûÿ]vÿQTVÿÿ%ÿUavÿdpˆÿCKY§ÑÒÒ"âÿÿsuwÿäääÿßôÿÌüÿÆõÿvØõÿ±æ÷ÿ‡Îæÿáààÿ‡ˆ‰ÿÿ)/9ÿerÿn{—ønz’†œ³Ì #&¥ÿEGIÿõõõÿïïïÿæççÿ‚¯ºÿˆÇØÿ–ÖèÿEq€ÿ¶¸ºÿßßßÿÛÛÛÿ&(+ÿÿ%æ{ˆ£Çˆ™´ÿÃèÚŸÅꞤÈì‚¿Øñ(+.jÿ…‡ˆÿøøøÿïïïÿ»»¼ÿÿegiÿ¡¢£ÿÿHJLÿàààÿçççÿ.14ÿÿ"¯¾ÃÍ ÄÚñȽÖîÿ˜¿äÿ”½äÿŸÆë©ÉÞóHJL>ÿqstÿøøøÿïïïÿ×××ÿGJLÿÁÂÃÿÇÈÈÿ€ƒÿ¾¾¿ÿíííÿ¼¼½ÿÿÿ&),`ÃÛòÅÝõrÅÜóÅ®ÍìýÂæÿŸÅéË­ÎïX¸Òí!’“• !ì'),ÿÙÙÚÿöööÿøøøÿúúúÿ±²³ÿ*-0ÿžŸÿÉÉÊÿžŸ ÿ-/2ÿ ÿõHJLÌàóÆÞõaÃÛó´»ÖðÚ·Öô~025¨@BEÿQSUÿ¥¦§ÿ¿¿Àÿ”•–ÿHJLÿCEGÿBEGÿBEGÿCFHÿDGIÿ79<ÿ #&¡äïø479CVXZþkmoÿlnpÿlnpÿmopÿmoqÿnoqÿnpqÿnprÿoprÿpqsÿ247ð;=@!–—˜8:=«ŒŽÿ—˜šÿ—™šÿ˜™›ÿ˜™›ÿ™šœÿ™šœÿ™›œÿš›œÿgiký%(+c;=@ADFº¡¢£ÿÃÄÅÿÃÃÄÿÃÄÅÿÃÄÅÿÄÅÆÿÂÂÃÿyz|ð*-/_³³µy{|/25L„…‡¥ÀÁÁÄÅÆÆïÆÇÇâ­®¯Ãdfh{:=@ÿÿÿÿðàøøÿàÿàÿÀ€€?????€ÀÀÀà?àðÿüÿþþÿÿÃÿùÿÿÿ€ÿÿ€ÿÿÀÿÿðÿ(0` íííììì êêêééééééææææææææææææçççééééééëëë ííííííììì ååå$êååRââãsØÞßyÞàà©ßßÞÂÝÜÛÂÛÙÙÂÚÚÙÕÙÙÙãÖÙÚò×ÙÙüÚÙØü×××ÿ×××ÿ×××ÿØ××ÿØØ×ÿÖØÙû×ÙÙøÚÙÙìÚÙÙÜÛÙØÍÛÙÙÂÝÜÜÂÜÞÞ·ÚÞÞ”âáà€åäãoååå?ççç#ììì èèèààà‚ÛÛÛÉÖÖ×äËÕ×ÿ[Ðíÿ+Ëõÿ"Çóÿ&Ãðÿ-Áëÿ3¿çÿ6½äÿ-¹ãÿ'µâÿ ±àÿ#°ÝÿA³Øÿ¢¾ÇÿºººÿÁÂÂÿËÞÿ3Éñÿ"Æòÿ#Ãïÿ*Áìÿ0¿èÿ6¾åÿ1»äÿ*·âÿ#³áÿ!±ßÿ2³Ýÿ‚ÁÖÿÒÒÒÿÕÕÕþØØØáÝÝÝ¿âââmèèèâââ–ÓÓÓÿÍÍÍÿÍÌÌÿiÌåÿËýÿÈúÿÇ÷ÿÆõÿÃóÿÀðÿ½íÿºëÿ¶èÿ²äÿ«àÿ¨Ýÿ&¤Îÿµ³³ÿ¯·ÿÊúÿÉûÿ ÇøÿÆöÿÄôÿÁñÿ¾îÿ»ëÿ¸éÿ´æÿ­âÿ©Þÿ§Ûÿ¬ÆÎÿÌÌÌÿÌÌÌÿÍÍÍÿÖÖÖÿåååXêêêãããqÝÝݱÝÚÚíPÒðþÌûÿ Äìÿ9Åçÿ;Îõÿ<Íöÿ;Êóÿ:Èñÿ:Åîÿ9Ãìÿ9Àéÿ(¸åÿ©Þÿ©ÛÿÒÏÏÿ›ÎÛÿÍþÿÌüÿ;Óúÿ<Ðøÿ;Îöÿ;Ëôÿ:Éòÿ:Æïÿ9Äíÿ9Áëÿ5¾èÿ ­àÿ§ÜÿÈÕýÖÖÖöÛÛÛÞÞÞÞ¡äääYëëë{}:‡—Ê9Eÿÿÿ07ÿA‘¦ÿ`Õõÿ`Óôÿ_Ñòÿ^Ïðÿ^Ìîÿ^Êìÿ°áÿ/¯ÙÿÒÐÏÿ¯Ï×ÿÍýÿEØýÿbÜûÿaÚúÿ`Øøÿ`Ööÿ`Ôôÿ_Òóÿ^Ððÿ^Íïÿ^Ëíÿ:½æÿ¬áûŒÐç[îíí SUW!$«ýÿÿÿÿÿK~‹ÿ„ÞöÿƒÛõÿ‚Úôÿ‚Øòÿƒ×ñÿ&µäÿ|¿ÕÿÐÐÐÿÎÐÐÿ3Íôÿfßþÿ…äýÿ…ãûÿ„áúÿ„ßùÿ„Þ÷ÿƒÜöÿ‚Ûôÿ‚Ùóÿ‚×ñÿXÈëÿ´æÊ×ïMOR<!ÛþÿÿÿÿÿŠ‹ÿÿ{ªµÿ¨çùÿ§å÷ÿ§äöÿŽÚòÿB·ÞÿÍÑÒÿÒÒÒÿÒÑÑÿ©ÐÚÿI×üÿ¬íþÿªëýÿ©êüÿ¨éûÿ¨èúÿ¨çùÿ§æøÿ§å÷ÿ§ãöÿ:ÁìõIÅíBSUW-$'*å "%ÿÿÿÿÿÿÿÔÔÔÿèèèÿw}ÿ¾àçÿÎñûÿáöÿbÃâÿÈÒÕÿÔÔÔÿÔÔÔÿÔÔÔÿÕÔÔÿ¦ÒÝÿlÜùÿÂñþÿÏóýÿÍòýÿÌñüÿÍñûÿÎñûÿ½ìúÿP»ÜþIÂèFdfg136â<>@ÿ+-0ÿÿÿÿÿÿACEÿåååÿöööÿÓÓÓÿ[w€ÿ|ÑêÿŸÍÜÿ××ÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÕÕÿÌÕ×ÿ‰Òæÿ…Ûòÿ™äøÿ¦æùÿ–àõÿ€ÔìÿW²ÿ ÿ)+.’½¾¿—˜š47:´PRTÿGJLÿ9<>ÿÿÿÿÿÿsuvÿëëëÿùùùÿôôôÿutuÿº¸¸ÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿØ××ÿÙ×ÖÿÍÕ×ÿÄÔØÿÍÕ×ÿØÖÖÿÎÎÍÿ#&)ÿø #>DFIjWY[ý_acÿSUWÿHJMÿÿÿÿÿÿ­®®ÿðððÿúúúÿüüüÿÌÌÍÿVWXÿÝÝÝÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿÙÙÙÿfhiÿÿØILNsuwOQSÞvwyÿjmoÿ_acÿTWYÿ-02ÿÿÿÿ-02ÿÖÖÖÿóóóÿûûûÿÿÿÿÿñññÿacdÿ²³³ÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿ¤¥¦ÿ ÿÿ$&*“¾¾¿DGI’€‚„ÿ€‚„ÿvxyÿkmoÿ`bdÿKMOÿÿÿÿ|}~ÿåååÿôôôÿûûûÿÿÿÿÿüüüÿÏÏÏÿYZ[ÿààßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÊÊÊÿÿÿá69;‰‹Œ aceô™š›ÿŒŽÿƒ…ÿvxzÿkmoÿaceÿ%(*ÿÿ257ÿËËËÿëëëÿôôôÿüüüÿÿÿÿÿÿÿÿÿöööÿ–—˜ÿ««¬ÿâââÿáááÿáááÿáááÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÚÚÛÿÿÿÿ #cUWY{Ž‘ÿ£¤¥ÿ˜™›ÿŽÿƒ…ÿwyzÿlnpÿOQTÿÿ¦¦§ÿáááÿíííÿõõõÿüüüÿîîîÿíííÿýýýÿîîîÿŽÿ¤¥¥ÿàààÿäääÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿÞÞÞÿ!ÿÿÿÇabcXZ\˶·¸ÿ¯°±ÿ¤¥¦ÿ™š›ÿÿ‚„…ÿxy{ÿlnpÿŠ‹Œÿ×××ÿçççÿîîîÿöööÿíííÿààãÿêêêÿûûûÿþþþÿíííÿ˜™šÿXYZÿqrtÿ±±²ÿÞÞÞÿèèèÿäääÿäääÿäääÿãããÿãããÿãããÿâââÿâââÿÛÛÛÿÿÿÿþXZ\SUWàÇÈÉÿ»»¼ÿ¯°²ÿ¤¦§ÿ™šœÿŽ‘ÿƒ„†ÿ“•–ÿÛÛÛÿßßßÿçççÿïïïÿïïïÿàáâÿææéÿêêêÿÿÿÿÿÿÿÿÿþþþÿùùùÿìììÿÇÈÈÿŠ‹‹ÿ_abÿbcdÿˆŠ‹ÿ¿¿ÀÿâââÿçççÿæææÿåååÿåååÿåååÿËËËÿÿÿÿÿ+.2<CFHÏÑÒÓÿÆÇÇÿ¼½¾ÿ±²²ÿ¥¦§ÿš›œÿ’“ÿÐÐÐÿèèèÿæææÿèèèÿíííÿÜÜÝÿäåèÿæææÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿùùùÿôôôÿèèèÿÇÈÈÿ•––ÿwyzÿ€ÿ¨©ªÿÜÜÝÿèèèÿæææÿ§¨©ÿ ÿÿÿÿ!$'b;>@ªµ¶¶ÿ»¼¼ÿ}~€ÿ¨©ªÿ±³´ÿ¦§¨ÿ¯°±ÿåååÿìììÿîîîÿêêêÿÛÛÛÿÝÞâÿââãÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿùùùÿõõõÿðððÿäääÿ·¸¸ÿyz{ÿ„„†ÿãããÿqrtÿÿÿÿÿ ]jmn6DGIë?BDÿÿ*,/ÿƒ„ÿ²³´ÿÁÁÂÿéééÿîîîÿðððÿíííÿéééÿäåæÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿååçÿöö÷ÿóóóÿÚÚÚÿ«¬­ÿ††‡ÿrtuÿpqsÿqstÿwyzÿ‚‚ƒÿ‚‚ÿ!#ÿrsuÿ58:ÿÿÿÿÿ%(*yÉÊÊTVX2!ëÿÿNPRÿwyzÿ¹º»ÿáááÿíííÿñññÿôôôÿéééÿîîîÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîîðÿaezÿ¨¨«ÿ^_`ÿ@ACÿ€‚ÿ´µµÿÏÏÐÿØØÙÿØØØÿÐÑÑÿÁÂÂÿ®®¯ÿ™š›ÿ“”•ÿÿÿÿÿÿã:=?%(+¯ÿÿ #ÿgijÿaceÿŠ‹Œÿ·¸¹ÿÚÚÚÿíííÿõõõÿøøøÿûûûÿýýýÿþþþÿþþþÿúúúÿ…•ÿX_vÿV`tÿcdjÿðððÿòòòÿñññÿðððÿðððÿðððÿðððÿïïïÿïïïÿñññÿdfhÿÿÿÿÿÿÿ©»¼½368…ÿÿÿ57:ÿfhiÿÿÿ ÿEHJÿxz{ÿ  ¡ÿº»»ÿ´µµÿÉÉÉÿÒÒÒÿ£¥¬ÿSZsÿlz–ÿdn†ÿZatÿ…‰“ÿççèÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿÐÐÑÿÿÿÿÿÿÿÿá‘ ILN;ûÿÿÿSUWÿUWZÿÿÿKMOÿçççÿ ¡¢ÿQRTÿ*,/ÿÿÿÿ!(ÿU_vÿgq‹ÿiuÿdo†ÿim{ÿÓÓÕÿõõõÿõõõÿôôôÿôôôÿôôôÿóóóÿZ\^ÿÿÿÿÿÿÿ!ÿÕ®¯°¢£¤ #Ñÿÿÿÿlnpÿ9;>ÿÿÿ¡¢£ÿûûûÿ±²³ÿVXZÿ!ÿÿÿÿxz}ÿ™Ÿ¯ÿm|™ÿfoˆÿajÿ]dvÿ·¹¿ÿøøøÿöööÿöööÿ÷÷÷ÿ¥¦§ÿÿÿÿÿÿÿ*-0ÿ'*-ÿ479¯ÛÜÛ479qÿÿÿÿÿoprÿ"$'ÿÿÿÏÐÐÿüüüÿ’ÿ^`bÿÿÿÿš›ÿûûûÿÀÃÌÿnw‘ÿhqŒÿm|˜ÿ\dyÿ‘›ÿððñÿùùùÿÌÍÍÿ ÿÿÿÿÿÿ"%'ÿEGJÿ479ðdfh7ŒŽ Ýÿÿÿÿ,/1ÿWY[ÿÿÿ)+.ÿÓÔÔÿöö÷ÿnpqÿ^acÿÿÿ›œžÿýýýÿýýýÿãäèÿŠ•«ÿju‘ÿfp‰ÿ_h~ÿxÿº»¾ÿ&),ÿÿÿÿÿÿ #&ÿ\^`ÿNPSïHKMY;=@`ÿÿÿÿÿ;>@ÿ)+.ÿÿÿ&(+ÿ¹º»ÿÓÓÔÿstvÿ`bdÿÿ’“•ÿþþþÿþþþÿþþþÿ÷÷øÿ©­»ÿjtÿmz–ÿgrŒÿRYkÿ%ÿÿÿÿÿ7:<ÿyz|ÿ`bdëLOQAÜÜÜŠŒ$')¦þÿÿÿÿÿÿÿÿÿklnÿ€‚ƒÿŽ‘ÿ*,/ÿ„…‡ÿüþÿÿ–àöÿçøýÿÿÿÿÿþþþÿ²µ½ÿao‰ÿitÿQYlÿÿÿÿ247ÿ|~ÿ”•–ÿZ\^ÒVXZ6¡¢£{}~!#&¯þÿÿÿÿÿÿÿÿÿÿBEGÿACEÿsuwÿ…ÜöÿTÎòÿ4Áìÿ˜©¯ÿWY[ÿÿÿ@#ËßóÍàó6ÅÝô}ÆÞõÏÀÙòú¾×ðþº×óý³Ôô„/14Â),/ÿ*-/ÿcegÿåååÿüüüÿüüüÿûûûÿêêêÿ|}ÿ,.1ÿ.03ÿ-/2ÿHJMÿUWYÿ;=@ÿ-02ÿ/24ÿ025ÿ ÿ"$'Ĥ¤¥Ñãõ(¹ÔîN¶Óï<Øçõ368_8;=ÿGILÿGIKÿTVXÿŠŒÿ£¤¥ÿ’“ÿ^`bÿHJLÿILNÿJLNÿJLNÿJMOÿJMOÿKMOÿKMOÿKNPÿJLOÿû8;=Z“”•146ìegiÿdfhÿdfiÿefiÿdfhÿegiÿegiÿfhjÿfhjÿfhjÿfhjÿgikÿgikÿgikÿhjlÿhjlÿHJLÿ"¾’“•+.0€_adÿƒ„ÿƒ„ÿ‚ƒ…ÿ‚ƒ…ÿ‚„…ÿ‚„…ÿƒ„†ÿƒ„†ÿƒ„†ÿƒ…†ÿ„…‡ÿ„…‡ÿ„…‡ÿ„†‡ÿ}ÿ #&ñCEH-ehj'),̇ˆŠÿž ¡ÿž ¡ÿŸ ¡ÿŸ ¢ÿŸ¡¢ÿŸ¡¢ÿ ¡¢ÿ ¡£ÿ ¢£ÿ ¢£ÿ¡¢£ÿ¡¢£ÿŸŸÿ:=?ú+.1d;=@*+.1בÿ¼½¾ÿ»¼½ÿ¼¼½ÿ¼½¾ÿ¼½¾ÿ¼½¾ÿ½¾¾ÿ½¾¿ÿ½¾¿ÿ¾¿Àÿ­®¯ÿEHJç-02h³³µWY[&),šegiﺻ¼ÿÚÛÛÿÚÛÛÿÙÙÙÿÙÙÚÿÚÛÛÿÜÝÝÿÎÏÐÿ‡ˆŠú:ÿÿÿÿÿÿÿÿ:@C£Z\_ÿdfhÿ\^`ÿSUWÿKNPÿ136ÿÿÿÿÿÿÿ¦§§ÿèèèÿõõõÿûûûÿþþþÿñññÿ‘’ÿSUVÿÞÞÞÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿÅÅÅÿ!$ÿÿù147oVXZ9JMOóvxzÿmoqÿegiÿ\^aÿTVXÿFHJÿÿÿÿÿÿ.13ÿÍÍÍÿíííÿöööÿüüüÿÿÿÿÿúúúÿØØÙÿ467ÿ³³´ÿÞÞÞÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿDFHÿÿÿéruw³´µ >@CÇ~ÿ}ÿuwyÿmoqÿegiÿ]_aÿTVXÿ#%(ÿÿÿÿÿrsuÿÝÝÝÿðððÿöööÿüüüÿÿÿÿÿþþþÿññðÿ”•–ÿPQSÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÞÞÞÿopqÿÿÿþ!$h`bdg[]_ü‘’“ÿ†ˆ‰ÿ~ÿvxzÿnprÿfhjÿ^`bÿ?BDÿÿÿÿ"%'ÿ»»»ÿæææÿñññÿöööÿüüüÿÿÿÿÿÿÿÿÿûûûÿâââÿMOPÿ°°±ÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÜÜÜÿÞÞÞÿŽÿÿÿÿÉMPR·¸¸ BEHÇ•—˜ÿ—™šÿ‘’ÿ‡‰Šÿ€‚ÿvxzÿnprÿfhjÿ\^`ÿ"ÿÿÿ†‡ˆÿÙÚÚÿëëëÿñññÿ÷÷÷ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿöööÿÅÅÆÿYZ\ÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿàààÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿßßßÿ ¡¢ÿÿÿÿ÷%'*Gsuv>WY\üª«¬ÿ ¡£ÿ˜™›ÿ‘’ÿ‡‰Šÿ~€ÿwxzÿoqsÿgikÿ?BEÿÿPRTÿÍÍÍÿãããÿìììÿòòòÿ÷÷÷ÿýýýÿôôôÿêêêÿõõõÿýýýÿññðÿ®®¯ÿstvÿÖÖÖÿçææÿãããÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿàààÿàààÿàààÿàààÿáááÿ©©ªÿÿÿÿÿ!¤efhbdeš~€ÿ³´´ÿ©ª«ÿ¡¢¤ÿ˜š›ÿ’“ÿˆ‰‹ÿ€ƒÿxy{ÿorsÿegiÿ;=?ÿ¸¸¸ÿÜÜÜÿçççÿíííÿóóóÿøøøÿõõõÿàààÿ÷÷øÿèèèÿþþþÿýýýÿðððÿ««¬ÿDEFÿmnpÿµ¶¶ÿÜÜÜÿæææÿåååÿäääÿãããÿãããÿãããÿãããÿãããÿâââÿâââÿâââÿâââÿâââÿáááÿãããÿžŸ ÿÿÿÿÿõY[\ Z[]Ô¢£¤ÿ»¼¼ÿ²³´ÿ©«¬ÿ¡¢£ÿ™šœÿ’“ÿˆ‰‹ÿ€ƒÿwy{ÿrtvÿµ¶¶ÿÒÒÒÿâââÿèèèÿíííÿóóóÿöööÿßßÞÿééìÿàáäÿéééÿþþþÿÿÿÿÿýýýÿñññÿÙÙÙÿ––—ÿQSUÿ@ACÿcdeÿ™š›ÿÌÌÍÿåääÿèèèÿæææÿåååÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿåååÿŽÿÿÿÿÿÿNQR(?ACÖ´´µÿÂÃÄÿ»»¼ÿ²³´ÿª«¬ÿ¢£¤ÿ™šœÿ‘’”ÿ‰ŠŒÿƒÿ¦§¨ÿÞÞÞÿßßßÿâââÿèèèÿîîîÿóóóÿàààÿåæçÿàâåÿßßßÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿûûûÿóóóÿéééÿÓÓÓÿ§¨¨ÿtvwÿKLNÿGIKÿnoqÿ©©ªÿÕÖÖÿèèèÿèèèÿæææÿåååÿåååÿåååÿåååÿèèèÿrtvÿÿÿÿÿÿ(+/\035¶·¸ÿËÌÍÿÃÄÅÿ¼¼½ÿ³´µÿ«¬­ÿ¢£¤ÿš›œÿ’“”ÿ•–—ÿÖÖÖÿæææÿèèèÿäääÿéééÿîîîÿãããÿááâÿâãçÿââáÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿûûûÿ÷÷÷ÿòòòÿëëêÿØØØÿ²³³ÿ€ÿ]^_ÿaceÿŠ‹ŒÿÀÀÁÿãããÿéééÿæææÿæææÿçççÿMOQÿÿÿÿÿÿ!$'ƒACF¼–—™ÿÕÕÖÿÎÎÏÿÆÆÇÿ¿ÀÀÿ³´µÿ«¬­ÿ£¤¥ÿš›œÿ¼½½ÿäääÿêêêÿìììÿêêêÿéééÿæææÿÛÛÛÿ×ÙÞÿääåÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿûûûÿøøøÿóóóÿëëëÿÖ××ÿ²²³ÿ‚ÿ`acÿ’“•ÿäääÿéééÿÝÞÞÿ*,/ÿÿÿÿÿÿ!KNPM<>@ûÕÕÖÿx{|ÿ!$'ÿLOQÿ ¡¢ÿµ¶·ÿ«¬®ÿ¤¦§ÿ×××ÿéééÿìììÿîîîÿðððÿêêêÿÖÕÕÿÝßãÿééêÿäääÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿùùùÿöööÿòòòÿïïïÿïïïÿîîîÿîîîÿìììÿéééÿâááÿÔÔÔÿ~~ÿ./2ÿ¹¹ºÿ¼¼½ÿÿÿÿÿÿÿ{íî¦@CE±JLOý"%ÿÿÿ479ÿ‚ƒ…ÿ¶·¸ÿ­®¯ÿÛÜÜÿëëëÿíííÿïïïÿñññÿìììÿäääÿöööÿÝÝÝÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÒÒÖÿññòÿõõõÿêééÿÊÊËÿžžŸÿrrsÿZ[\ÿLNPÿKMOÿKNPÿOQSÿUWYÿaacÿhhhÿZZ[ÿ ÿ8:<ÿ€ƒÿÿÿÿÿÿÿ#&)¨ ¢£˜šš368Šÿÿÿ),/ÿMOPÿwyzÿ¶¶·ÿÈÉÊÿçççÿíííÿðððÿòòòÿôôôÿæææÿâââÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ×ÛÿSWnÿÀÀÄÿ®®¯ÿKLNÿ')+ÿNPQÿ‰Š‹ÿ°±±ÿÇÈÈÿÐÑÑÿÑÒÒÿÎÎÎÿÅÅÆÿµ¶¶ÿ¡¢£ÿ‹Œÿvxyÿ–—˜ÿ247ÿÿÿÿÿÿÿò+.1L—˜™nnq!$'òÿÿÿFIKÿUVXÿwxzÿ´µµÿÊÊÊÿäääÿíííÿðððÿóóóÿ÷÷÷ÿøøøÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñòóÿfkÿRYoÿPTcÿ"$*ÿvwxÿÚÚÚÿôôôÿóóóÿñññÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿðððÿñññÿóóóÿ¶·¸ÿ ÿÿÿÿÿÿÿÿÍ=@BŽ’"$'ÉÿÿÿÿjlnÿQRTÿ),.ÿBDFÿ^`bÿ„†‡ÿ²²³ÿÙÙÙÿìììÿõõõÿôôóÿôôôÿöööÿùùùÿúúúÿûûûÿ÷÷÷ÿ‹Ž›ÿSZsÿ`iÿkz“ÿSXiÿ—ÿòññÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿñññÿRSVÿÿÿÿÿÿÿÿÿÿ&)+uÍÎÏ368¤ÿÿÿÿÿ…†ˆÿCEGÿÿÿÿ ÿ-/2ÿQSUÿijkÿ¥¥¦ÿ¥¥¦ÿžÿ³³´ÿÀÁÁÿÆÆÇÿ¨©®ÿINfÿdnˆÿq‚Ÿÿdn†ÿ_g}ÿW^rÿw|‡ÿÝÝÞÿôôôÿóóóÿóóóÿóóóÿòòòÿóóóÿòòòÿòòòÿòòòÿóóóÿ·¸¹ÿÿÿÿÿÿÿÿÿÿÿ!%(BFHYüÿÿÿÿ#&)ÿ‘’ÿ257ÿÿÿÿrtuÿçççÿÀÁÁÿGHJÿ_`bÿ#&(ÿÿÿ ÿÿÿ8?Pÿeqÿfp‹ÿeoˆÿky“ÿ`jÿ^bpÿÇÆÉÿ÷÷÷ÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿïïðÿCFHÿÿÿÿÿÿÿÿÿ!ÿÿ&),€ƒ…† åÿÿÿÿÿ=?Bÿ„†‡ÿ#&)ÿÿÿÿÇÈÉÿúúúÿíííÿSUWÿbceÿÿÿÿÿÿÿnqzÿpx‘ÿm{—ÿm{—ÿcl„ÿ_g|ÿV\nÿ ¡§ÿòóóÿöööÿöööÿöööÿöööÿöööÿ÷÷÷ÿŽÿ ÿÿÿÿÿÿÿÿ%(+ÿ%(+ÿÿNQS^çèè369›ÿÿÿÿÿÿ[]`ÿikmÿÿÿÿ=?BÿîîîÿüüüÿÞßßÿNPSÿ_acÿÿÿÿÿÿµ¶·ÿãäçÿ‹”©ÿfqŒÿgq‹ÿfoˆÿai€ÿcpˆÿ€ƒŽÿèèéÿøøøÿ÷÷÷ÿ÷÷÷ÿøøøÿÃÄÅÿ!ÿÿÿÿÿÿÿÿ ÿ:Aÿÿ´´µÿÿÿÿÿýþþÿùýþÿþþþÿþþþÿüüüÿ¹¼Æÿr|–ÿq ÿjv’ÿen‡ÿbkÿ/3=ÿÿÿÿÿÿ.03ÿ|}~ÿŠ‹ÿ`bdíJLOu…‡ˆŽ‘ !%'´ýÿÿÿÿÿÿÿÿÿÿÿÿ "%ÿ~ÿvxzÿŠŒÿfhiÿ ÿ©©ªÿþÿÿÿ®çùÿzØóÿóüþÿÿÿÿÿÿÿÿÿüüüÿ¨«±ÿVczÿkv’ÿhsŽÿAGWÿÿÿÿÿ147ÿz|~ÿ©ª«ÿ‹ŒÿNPR×LNQMÅÅÆ{}~ !#&²ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:=?ÿ…‡ˆÿÿ¨©ªÿ­èùÿdÓôÿ8ÄîÿWËïÿËÕØÿ˜™šÿFHKÿÿÿ7>MÿCK\ÿÿÿ-02ÿy{}ÿ¹º»ÿÏÐÑÿ¨©«ÿTVXÿ ýOQS[²²´hjl  #­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ "%ÿÿ"\mÿcÔõÿ<Éòÿ·ëÿ³èÿ ~£ÿ ÿÿÿÿÿÿÿÿdfhÿ·¸¹ÿ‹ŒÿPSVÿÿÿ ´¤¤¥nprEGJ± õþÿÿÿÿÿÿÿÿÿÿÿÿÿL\ÿ]Ñíÿ;Ìöÿ¼ðÿ¸ìÿ³èÿ5Àëÿ%|˜ÿ#ÿ!ÿÿÿÿÿÿ"ÿ-4?ÿHRdÿYavÿ\i~ÿ"*ÿ"%(AïïŠ2489^@ÿUVWÿ$brÿ]Ùóÿ;ÑùÿÁõÿ½ñÿ¹íÿ¹êÿ™ßôÿ§ãõÿlÂÝÿÔÚÛÿºº»ÿkmnÿÿÿÿ17Eÿs…£ÿlw“ÿp~›ÿjw’ÿ_iÿq€–]—˜ŸÑÒÒ'*,çÿÿÿÿÿÿTVYÿÈÉÉÿééèÿªâñÿgàýÿ:ÕþÿÆùÿÂöÿ½òÿ½ïÿƒÛôÿ¶èøÿÃìøÿÞòÿnÂßÿåãâÿßßßÿ  ¡ÿ ÿÿÿ$,ÿ`l†ÿsƒ¢ÿlw“ÿrƒŸÿdn…å{Œ¥`µ·¼ .14¢ÿÿÿÿÿwxzÿõõöÿñññÿíííÿÒæëÿPÖ÷ÿËþÿÊúÿ!Ê÷ÿOÑöÿ”âøÿ­çøÿ¶èøÿ“ÜóÿR¿äÿ¾ÚãÿâááÿÝÝÝÿÚÚÚÿˆŠ‹ÿÿÿÿÿDK]ÿrƒ¢ÿn{˜ÿržÿhtŽþmv‹²›±Ë'ïõúFGJjÿÿÿÿEGIÿðððÿõõõÿñññÿíííÿêééÿâååÿ›ÜìÿlÛ÷ÿoÝúÿwÜøÿuÚ÷ÿlÖôÿ\Æåÿt¶ÌÿÚäæÿçææÿáááÿÝÝÝÿØØØÿÖÖÖÿ&(+ÿÿÿÿÿ28EüuƒŸür ÿjsÿ{‘®ÿœÃéè­Î킹ÔíH­Ìê9¯Íë8׿õMPR.ýÿÿ ÿ²³´ÿúúúÿõõõÿñññÿíííÿéééÿååæÿ¡¡¢ÿacfÿ}Œ‘ÿ½ØßÿÈæïÿ¯ÂÈÿ-14ÿÿACEÿÔÔÕÿáááÿÝÝÝÿØØØÿèèèÿPRTÿÿÿÿÿ!œ™¢´;†¨è{Œ©ÿ¿ÕìÿžÂæÿ–¿æÿšÂéü™ÂéùšÂêø©ÌîÀ¿Øñlmo#&)âÿÿÿêêêÿúúúÿõõõÿñññÿíííÿëëëÿ¨©ªÿÿÿÿ®¯°ÿéééÿ[]_ÿÿÿ ÿƒ„ÿäääÿÝÝÝÿÛÛÛÿîîîÿXY\ÿÿÿÿÿ#&(q¾ÃÍ*¸Ñê×ËÞòÿÄÚïÿžÂåÿ“¼ãÿ”¼ãÿ”¼ãÿ–¾æÿ¦ÊîʺÕñ¶¶·#&)¬ÿÿ #ÿøøøÿúúúÿõõõÿñññÿíííÿìììÿmnpÿÿÿÿÃÄÄÿæææÿ[]_ÿÿÿ ÿ‚ƒ…ÿäääÿÝÝÝÿèèèÿêêêÿBDFÿÿÿÿÿVX[N¸ÔïPÊáöûÍßòÿÇÜðÿ¦Çèÿ”¼ãÿ”¼ãÿ”¼ãÿ•¾åÿ£ÉîÊÉÞó8CEGšÿÿÿêêëÿúúúÿõõõÿñññÿíííÿëëëÿ£¤¥ÿÿ ÿRTVÿéééÿäääÿËËÌÿ257ÿÿEGIÿÔÕÕÿäääÿëëëÿðððÿÅÅÆÿÿÿÿÿ #䣥¥ÚéøÂÚòMÂÛôÃÇÞöæËàõÿ¾×ðÿ¢Åçÿ•½ãÿ“¼ãÿ•½äÿ¥Êîë¾ØðMâíöPRT`ÿÿ ÿ··¸ÿúúúÿõõõÿñññÿíííÿéééÿäääÿ•–—ÿlnpÿÜÝÝÿîïïÿ}€ÿñññÿçççÿÐÑÑÿìììÿòòòÿòòòÿòòòÿåäåÿUWYÿÿÿÿÿ/25˜äîùÄÚðÉÞótÃÜô¤ÆÞõù»Öñÿ°ÎíÿÂæÿ•½äÿ›Ãéö¥Êî½³Òð›¯ÎëXÇÛñ.Ž$ïÿÿIKNÿññòÿõõõÿñññÿñññÿóóóÿôôôÿøøøÿûûûÿùùùÿµµ¶ÿÿORTÿרØÿ÷÷÷ÿ÷÷÷ÿõõõÿñññÿ×××ÿZ\_ÿÿÿÿÿù69:4ßëöÑâô ÌàòYÅÝô›ÆÞöÚÅÝôû¿Øðÿ»Õîÿ»Öñÿ·×öû²ÒòÐÐÑ*-/Å!ÿ "&ÿ #&ÿ‡ˆ‰ÿöööÿûûûÿüüüÿüüüÿüüüÿûûûÿúúúÿÔÔÔÿDFHÿ!$'ÿ!$'ÿ136ÿsuwÿ›œÿ›œžÿvwyÿ:<>ÿ"$'ÿ$'*ÿ%'*ÿ!$&ÿÿ"$'Ûz|}ßëõ ÃÚñ<Èßö™ÀÙòµ·Ôð´º×ôvÅÜóJMO‰$'*ÿ68;ÿ58:ÿ57:ÿy{}ÿÜÜÝÿ÷÷÷ÿúúúÿùùùÿìììÿµ¶¶ÿNQSÿ79<ÿ8:=ÿ8:=ÿ8:=ÿ79<ÿ7:<ÿ7:<ÿ7:<ÿ9;>ÿ9<>ÿ:<>ÿ:I"%îz|}ÿºº»ÿ·¸¹ÿ¸¹¹ÿ¸¹ºÿ¸¹ºÿ¸¹ºÿ¸¹ºÿ¹º»ÿ¹º»ÿ¹º»ÿ¹º»ÿº»»ÿº»¼ÿº»¼ÿ½½¾ÿŠ‹ÿ!$&å7:=n³³µŸ ¢RTW.!$ÌXZ\ý¹º»ÿÏÐÐÿÎÎÏÿÍÎÎÿÍÎÎÿÎÎÏÿÎÎÏÿÎÎÏÿÎÏÏÿÎÏÐÿÏÐÐÿÑÑÒÿÂÃÄÿfhjü"%(È7:=&…ˆˆy{|&),\.13Èqsuû¸¹¹øÛÜÜÿåææÿçèèÿèèèÿèèéÿççèÿÞßßÿ¼¾¾þ„†‡ñ>@CÅ036[†‡‰ „†ˆ JLN?VWYdqsuq‘’¡žŸŸÍžŸ ñ ¡¡á•–—©vxz•hijxVXZ, ¡£ ÿÿÿÿÿÿÿÿÿÿüÿÿÿÿàÿþÿüüÿÿÀÿÿà?ÿÿÀÿÿÿþÿÿüÿÿøÿÿøÿÿðÿàÿà?ÿÀ?ÿÀÿ€ÿ€ÿÿÿÿÿÿ€ÿ€ÿÀÿàÿàÿàÿðÿðÿðÿøÿøÿüÿü?ÿþÿÿÿÿÿ€ÿÿÿÀÿÿÿøÿÿÿüÿÿÿü?ÿÿþÿÿþÿÿþÿþ€?ÿþÀÿÿøÿÿÿÿÿÿãÿÿÿÿÿÿ€ÿÿÿÿ€?ÿÿÿÿÀ?ÿÿÿÿÀÿÿÿÿàÿÿÿÿÿðÿÿÿÿÿøÿÿÿÿÿþÿÿÿÿÿÿàÿÿÿ(`¾ îîîííííííëëëëëëéêê!ééé#ééé"ééé"èèè#æææ$æææ$æææ$æææ$æææ$æææ$æææ$æææ$æææ$ççç$ééé"ééé!éééééé!ëëëëëëìììíííííí ïïïïïïïïïììì<éêê{èéé…çèè…ææç…ãää…áââ…ááá…âââ¢âãã¶âââ»áâãÑâââÖâââóâââúàáá÷ááá÷áááûßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßààÿááá÷áááõáááïáââóáââÜââãÖâââ½ââã¶âãã¬áááŠããã…âãã…äåå…åæç…èéé‚ëêêbìììEîîî*íîî'ïððîîî ëëë,çççGãããJêæå„êååÄæääæÞááæÙßàçÖÜÝêØÜÜñÜÛÛýÚÚÚÿÚÙØÿÙ×ÖÿÙÖÕÿØÕÕÿØÕÔÿÖÔÔÿÔÓÒÿÓÒÒÿÒÒÒÿÌÑÒÿÌÐÒÿËÐÑÿÏÐÐÿÓÑÐÿÔÑÐÿÐÐÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÒÏÎÿÒÐÏÿÑÑÐÿÌÐÑÿÊÐÑÿÊÐÑÿÏÑÒÿÓÑÑÿÔÒÑÿÔÒÒÿÕÒÒÿÕÓÒÿÖÓÓÿ×ÔÔÿ×ÕÕÿÙ×ÖÿÙØØÿרÙþÔØÚøÔÙÛó×ÛÜîßÞÞîãàßçåãâæäääÖååå›äää`åååHèèèFëëë'îîîìììèèè êêê'ééé~äää©áááµÞÞÞÝÝÝÝýÝÚÚÿÄÖÛÿ‰Óåÿ^ÐíÿJÍïÿBÊîÿAÈíÿFÆëÿOÆèÿSÅåÿ[Ãâÿ_ÃàÿkÄÝÿlÃÜÿjÂÜÿ[ÀÝÿX¿ÜÿO»ÝÿLºÝÿA·Ýÿ?µÜÿ@µÚÿL¶ØÿdºÕÿ›ÃÑÿÊÌÌÿÏÎÍÿÎÎÎÿÎÎÎÿÍÍÍÿÍÍÍÿÏÌÌÿ¬ÌÔÿtËáÿSÊéÿCÈëÿ@Çëÿ@ÅêÿHÄèÿNÃæÿUÃâÿZÃáÿbÃßÿlÃÜÿkÃÜÿgÁÝÿZ¿ÝÿW¾ÜÿN»ÞÿK¹Þÿ@¸Þÿ@·ÞÿC·ÝÿSºÛÿt¿Øÿ¯ÌÕÿÕÔÔÿÖÖÖÿØØØÿÜÜÜÿÞÞÞüàààØâââ°æææ¤êêêYéééìììïïïçççLâââÛÜÜÜÿ×××ÿÓÓÓÿÑÑÑÿÏÏÏÿÐÎÍÿ¡ÎÙÿÌ÷ÿËþÿÊýÿÇûÿÅùÿÄ÷ÿÁöÿÀöÿ¾ôÿ¼òÿ»ñÿ¹ïÿ¸íÿ¶ìÿ´êÿ³éÿ°çÿ¯æÿ®äÿ¬âÿ«áÿ©ßÿ§Þÿ¦ÜÿO²Óÿ¢«®ÿ£¤¤ÿ§¨©ÿ°±±ÿ»»¼ÿ{ÊÞÿËûÿÉýÿÈüÿÆùÿÄøÿÂöÿÀõÿ¿ôÿ½óÿ¼òÿºðÿ¹îÿ¸íÿ¶ëÿ´êÿ³éÿ°çÿ¯æÿ®äÿ¬ãÿ«áÿªàÿ¨ßÿ ¨Üÿv»ÒÿÍÌÌÿÌÌÌÿÍÍÍÿÎÎÎÿÐÐÐÿÒÒÒÿÕÕÕÿÙÙÙÿßßßÿåååœèèèèèèCàààëÕÕÕÿÐÐÐÿÍÍÍÿÌÌÌÿÌÌÌÿÍÌÌÿ¾ÌÐÿ8ÍòÿÌþÿÊüÿÉúÿÇùÿÅ÷ÿÄöÿ ÃõÿÃôÿÁóÿÀñÿ¿ðÿ ½îÿ »íÿ ¹ëÿ ¸êÿ ·éÿ ´çÿ ²æÿ°äÿ­âÿ¬áÿªßÿ©Þÿ§Üÿ¤ÙÿN‘¨ÿ”‘ÿ‘’ÿ‹ŠŠÿcŽ˜ÿÅîÿËþÿÉûÿÈúÿÆøÿÅ÷ÿÄõÿ ÃõÿÃôÿÁòÿÀñÿ¾ïÿ ½îÿ »íÿ ¹ëÿ ·êÿ ¶èÿ ´çÿ ²æÿ¯ãÿ­âÿ«àÿªßÿ¨Ýÿ¦Üÿ¨Úÿ¡ÄÏÿÐÍÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÎÎÎÿÑÑÑÿÚÚÚÿååå½ééé>áááë×××ÿÐÐÐÿÍÍÍÿÌÌÌÿÌÌÌÿÏËËÿÌØÿÍûÿÌþÿÊüÿÉûÿÇùÿÈøÿÊ÷ÿ!Éöÿ!Èõÿ!Æôÿ!Åóÿ Äòÿ Âðÿ Áïÿ¿íÿ¾ìÿ½ëÿºéÿ¹èÿ·æÿ³äÿ­âÿªßÿ©Þÿ§Üÿ¦ÛÿDµÛÿÜÖÕÿÕÔÔÿÙÓÑÿuÐçÿÍþÿËýÿÊüÿÉûÿÇùÿÊøÿ!Ê÷ÿ Èöÿ!Çõÿ!Åôÿ!Äóÿ Ãñÿ Áðÿ Àïÿ¿íÿ½ìÿ¼êÿºéÿ¸èÿ·æÿ²ãÿ¬áÿªßÿ©Þÿ¦Üÿ¥ÜÿnºÓÿÓÍËÿÌÌÌÿËËËÿÌÌÌÿÌÌÌÿÍÍÍÿÎÎÎÿÑÑÑÿÚÚÚÿååå£ìììêêê>ååå«àààåÛÛÛÿØØØÿÕÕÕÿ×ÒÑÿŽÏßÿ ÍüÿÌÿÿËýÿËüÿ$Ñüÿ6Ôûÿ6Óúÿ4Ïøÿ3Ìöÿ3Ëõÿ3Êôÿ2Éóÿ2Èñÿ2Æðÿ2Åïÿ1Äîÿ1Âíÿ1Áëÿ1¿êÿ1½éÿ1½èÿ)¹æÿ­áÿ©Þÿ¨Üÿ¥Üÿ+­ÙÿÔÐÏÿÐÏÏÿÖÏÍÿ_ÎéÿÍÿÿÌþÿÊüÿÊûÿ+Ïúÿ5Ñùÿ4Ïøÿ3Î÷ÿ3Ìöÿ3Êõÿ3Êôÿ2Èóÿ2Çñÿ2Æðÿ2Åîÿ1Ãîÿ1Áíÿ1Áëÿ1¿êÿ1½éÿ0¼çÿ"·åÿ«ßÿ©Þÿ§Üÿ¥Üÿ[¶Õÿ×ÐÍÿÏÏÎÿÑÑÑÿÒÒÒÿÖÖÖÿÚÚÚÿÝÝÝøáááÇççç†ëëëééé3æææJååå|äääÎæáàè™Úéý ÒýÿÏüÿÉôÿ½äÿ<·Óÿ;²Íÿ=»ØÿBÊíÿEÓ÷ÿEÑøÿDÏõÿDÍôÿCÌóÿCËòÿBÊñÿBÈðÿBÈïÿBÆíÿBÅìÿBÃëÿAÂêÿBÂêÿ,¹åÿªßÿ¨Ýÿ¦Üÿ-­ÙÿÓÏÏÿÏÏÏÿÖÏÎÿ`ÎéÿÍÿÿÌþÿËüÿ+ÑüÿGÖûÿFÕúÿEÓùÿDÒøÿDÐ÷ÿDÏöÿDÎöÿDÍôÿCÌóÿCËòÿBÉðÿBÈðÿBÇîÿBÆíÿBÄìÿBÃëÿAÂêÿBÁéÿµãÿ©ßÿ¨Ýÿ§Ýÿa¼ÚÿãÜÚ÷ÜÜÜïÞÞÞéãããäååå—âââJçççDììì™ãóšÃâÿ {–ÿETÿ'.ÿÿÿ ÿ5>ÿ.hyÿMº×ÿZØùÿXÔöÿWÒõÿWÑôÿVÐòÿVÏòÿVÎðÿUÍïÿUÌîÿUÊîÿUÉìÿUÈìÿSÆêÿ³âÿ©Þÿ§ÜÿE³×ÿÕÐÏÿÏÏÏÿÕÏÎÿvÎäÿÍþÿÌÿÿÏýÿUÛýÿYÚüÿYÙúÿYØúÿX×ùÿWÖøÿWÕ÷ÿWÔöÿWÓõÿWÑôÿWÑôÿVÏòÿVÏñÿUÍðÿUÍïÿUËîÿUÊíÿUÉìÿUÈìÿKÄéÿ®àÿ¨Ýÿ¬âýpÇäÄóíëZííí*ïïï½¾¿uxyBQV18ÿÿÿÿÿÿÿÿÿ+1ÿB†™ÿhÖóÿjØöÿiÖõÿiÕôÿiÔóÿhÓóÿgÒñÿgÑñÿgÐïÿgÏîÿgÎîÿiÍíÿ>¾çÿ¨Þÿ§Ýÿr¼ÕÿÖÐÏÿÏÏÏÿÒÏÎÿÎÛÿÍûÿÌÿÿ7ÕýÿnàýÿkßüÿkÞûÿkÜûÿjÛùÿiÚùÿiÙøÿiÙøÿiØ÷ÿiÖõÿiÖõÿiÔôÿiÔóÿgÓòÿgÒñÿgÑðÿgÏïÿgÏîÿgÎîÿgÍìÿ'¶ãÿ¨ÞÿµèòXÆêMïïðcfg(),/¡÷ÿÿÿÿÿÿÿÿÿÿÿH€ÿ{Ý÷ÿzÛ÷ÿzÙõÿzÙõÿyØôÿx×óÿxÖóÿxÕòÿxÔñÿxÔðÿzÓïÿQÄéÿ¨Þÿ«Üÿ©ÈÒÿÑÐÐÿÐÐÐÿÐÏÏÿÃÏÒÿ4ÍóÿÌÿÿHÙþÿ€äþÿ{ãýÿ{âüÿ{áûÿ{àûÿzßúÿzÞùÿzÝùÿzÜøÿzÛ÷ÿzÛ÷ÿzÙõÿyÙõÿyØôÿx×óÿxÖóÿxÕòÿxÔñÿxÓðÿ{Óïÿ6»åÿ«âÿ!¸çÎ×ïÂÅÅ GIKgåÿÿÿÿÿÿÿÿÿÿÿÿ #%ÿÿS‚ÿãöÿß÷ÿßöÿÞõÿŒÝôÿŒÝôÿŒÜóÿŒÛóÿ‹ÚòÿÛòÿGÂèÿ§ßÿ`ºØÿÑÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÔÐÏÿÏßÿÌþÿ<×þÿ’èþÿçýÿæýÿåüÿåûÿãúÿŽãúÿŽãùÿŽâùÿŽáøÿàøÿßöÿßöÿÞõÿŒÝôÿŒÝôÿŒÜóÿŒÛóÿ‹ÚòÿˆØñÿ)¸åÿ±çûeÌí_ƒ9=?ƒëüÿÿÿÿÿÿÿÿÿÿÿ247ÿ£¤¤ÿ’’“ÿ19=ÿr¦²ÿ¢éûÿžäøÿžã÷ÿžãöÿžãöÿžáõÿžáõÿžáõÿÛòÿ$¶åÿ'¯Ýÿ·ÍÓÿÔÒÑÿÑÑÑÿÑÑÑÿÑÑÑÿÒÑÐÿÍÑÒÿGÎïÿÑþÿçþÿ¢ëþÿ¡êýÿ¡éüÿ¡éüÿ èûÿŸçûÿŸçûÿŸæúÿŸæùÿŸåùÿŸåøÿžäøÿžã÷ÿžãöÿžâöÿžáõÿàõÿŸáõÿyÔïÿ´èþ8ÁíÅ–ÜóŸŸ  ?BEÄÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ€‚ÿÕÕÕÿÛÛÛÿ•”•ÿ2>Bÿ¦Ûåÿ³ìûÿ±éùÿ±èøÿ±èøÿ°ç÷ÿ±ç÷ÿ·è÷ÿRÆëÿ¯àÿžÉÖÿÖÓÓÿÒÓÓÿÓÓÓÿÒÒÒÿÒÒÒÿÒÒÒÿÓÒÑÿ»Ñ×ÿ5ÍõÿDÙÿÿ·ïþÿµïþÿ²îýÿ³íýÿ²íüÿ²ìüÿ²ìûÿ²ëûÿ±ëûÿ±ëúÿ±êúÿ±êùÿ±éùÿ±èøÿ±èøÿ°ç÷ÿ³ç÷ÿ®åöÿ/Àíÿ)¾îØpÐï.uwx*,0ž"ú$'*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶·ÿáááÿèèèÿÛÛÛÿzz{ÿVkpÿÀëñÿÄïûÿÃíúÿÃíùÿÆîúÿºéøÿfÎïÿ-´áÿ›ÉØÿØÕÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÓÓÓÿÓÓÓÿÖÓÓÿ¶ÒÙÿDÍñÿ[Üþÿ¶ïþÿÉóþÿÆòýÿÅñýÿÄðüÿÄðüÿÄðüÿÄïüÿÄïûÿÄïûÿÄïúÿÃîúÿÃíúÿÄíùÿÇîúÿ­çøÿMÊòþ*¿î¶eÏð/«¬­?BCŠ!$ÿ.14ÿ,/2ÿÿÿÿÿÿÿÿÿÿÿÿÿ247ÿÐÏÏÿèèèÿóóóÿêééÿÑÑÑÿÿ7:<ÿ358ÿ #ÿÿÿÿÿÿÿÿÿÿÿÿ[]_ÿÜÜÜÿëëëÿõõõÿóóóÿéééÿšš›ÿAFIÿ²ÛãÿˆÞ÷ÿTËïÿD¿äÿÉÛÿÕÖÖÿÙ×ÖÿÕÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÖÕÕÿÙÕÔÿ§ÒÝÿSÍíÿSÕøÿƒãüÿ¹ïþÿÓõþÿãùþÿêúþÿêúþÿá÷ýÿÐóüÿ²êúÿyÙôÿFÆëÿ¤ÿ 4Cÿþ569¬gij”•–[]_r%(+ù>@CÿBDGÿ<>Aÿ8;=ÿ#&)ÿÿÿÿÿÿÿÿÿÿÿÿ†ˆ‰ÿÞÞÞÿïïïÿ÷÷÷ÿùùùÿñññÿ×××ÿOPSÿ+k€ÿrËåÿ¡ÏÛÿÎÕØÿÚØ×ÿØ××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿØÖÕÿÒÕÖÿ¬ÒÜÿ~Îäÿ[ÍìÿUÏðÿ[ÒóÿbÓôÿaÒòÿXÎðÿQÉëÿYÅåÿ{ÈÞÿ¬ÏØÿZ_bÿÿÿý257€½¾¿_ab/&*,äBDGÿNQSÿGILÿADFÿ>@Bÿ,/2ÿÿÿÿÿÿÿÿÿÿÿ #&ÿª«¬ÿâââÿñññÿøøøÿûûûÿùùùÿéééÿšš›ÿ(&(ÿÉÄÃÿàÜÛÿÙØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿ×××ÿÖÖÖÿÖÖÖÿÚÖÖÿÝÖÕÿ×ÖÕÿÈÔ×ÿ½ÒÙÿ°ÑÚÿ°ÐÚÿ¼ÒØÿÈÔÖÿÖÕÕÿÜÖÔÿÛØ×ÿ¯°°ÿ"ÿÿÿä#'+7—˜š147¾@Y¨©ª9<>™MOQývxzÿprsÿjlnÿegiÿ_acÿZ\^ÿTWYÿOQSÿ@ÿklmÿ›œœÿÈÈÈÿÞÞÞÿéééÿêêêÿèèèÿæææÿåååÿåååÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿèèèÿ¸¸¹ÿÿÿÿÿÿÿÿÿ268QÙÙÙ?BDÁ[]_ÿÏÐÐÿÅÆÆÿÀÁÁÿ»»¼ÿµ¶·ÿ¯°±ÿª«¬ÿ¥¦§ÿŸ ¡ÿ™šœÿ”•—ÿŽ‘ÿ‰ŠŒÿƒ„†ÿ†‡‰ÿÂÂÃÿÞÞÞÿãããÿßßßÿáááÿåååÿéééÿíííÿñññÿóóóÿáááÿÝÝÝÿéêìÿÓÕÛÿáááÿäääÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿøøøÿóóóÿïïïÿéééÿÞÞÞÿÆÆÇÿ¥§§ÿwxzÿOPQÿ246ÿ246ÿJLOÿ{|~ÿ­®¯ÿÔÔÔÿçççÿêëëÿèèèÿæææÿæææÿæææÿæææÿåååÿåååÿåååÿåååÿéééÿ¡¢£ÿ ÿÿÿÿÿÿÿÿ!$)š±³³257±Y[]ÿÔÕÕÿËÌÍÿÆÇÇÿÁÁÂÿ¼½½ÿ¶·¸ÿ±²²ÿ«¬­ÿ¥¦§ÿ ¡¢ÿš›œÿ”•—ÿ’ÿ†ˆŠÿ°°°ÿÜÜÜÿäääÿéééÿæææÿâââÿæææÿêêêÿíííÿñññÿâââÿÖÖÖÿÛÜáÿóóõÿëëëÿÜÜÜÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿúúúÿöööÿóóóÿïïïÿìëëÿäääÿÔÔÔÿµµµÿŽÿ__aÿ=?Aÿ78:ÿUWYÿˆ‰Šÿ¾¾¿ÿãããÿìììÿéééÿçççÿæææÿæææÿæææÿæææÿéééÿ|}ÿ ÿÿÿÿÿÿÿÿ µ„†‡ 69;ŒACEÿÔÔÕÿÒÒÓÿÌÌÍÿÆÇÇÿÂÃÄÿ¼½¾ÿ¶··ÿ±²³ÿª«­ÿ¥¦§ÿ ¡¢ÿ™›œÿ”•—ÿ˜™›ÿÒÒÓÿâááÿèèèÿëëëÿìììÿæææÿæææÿêêêÿíííÿèèèÿÑÑÑÿççéÿÜÝãÿååèÿÚÚÚÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿüüüÿùùùÿöööÿóóóÿðððÿëëëÿäääÿÔÔÔÿ¾¿¿ÿ“”•ÿjklÿKMOÿSUWÿ‚ÿ¿¿ÀÿââãÿëëëÿèèèÿçççÿçççÿãããÿTVWÿ ÿÿÿÿÿÿÿÿ!ºmoqnpr &),ÿ»»½ÿÙÙÚÿÑÒÒÿÑÑÒÿÈÉÊÿÄÅÆÿÁÁÂÿ¶·¸ÿ°±²ÿ«¬­ÿ¦§¨ÿ  ¢ÿš›œÿµ¶¶ÿàààÿæææÿêêêÿìììÿíííÿíííÿèèèÿêêêÿèèèÿÐÐÐÿéééÿÍÎÖÿèèëÿÛÛÛÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿûûûÿ÷÷÷ÿóóóÿðððÿëëëÿäääÿÒÒÒÿª««ÿqsuÿ@BDÿWY[ÿ°°²ÿíííÿëëëÿêêêÿÒÓÓÿ/24ÿÿÿÿÿÿÿÿÿ²Y[^|/ #%ÚacdÿÞÞßÿÖרÿruvÿ-02ÿ9;>ÿy{|ÿ±²²ÿº»¼ÿ±²³ÿ¬­®ÿ¦§©ÿ¢£¤ÿÍÎÏÿäääÿêêêÿìììÿíííÿîîîÿðððÿîîîÿèèèÿÕÕÕÿÝÝÝÿÑÓÚÿîîðÿßßßÿæææÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿ÷÷÷ÿõõõÿõõôÿõõõÿöööÿöööÿööõÿõõõÿòòòÿïïïÿëëëÿäääÿÞÝÝÿÌÌÍÿÿ ÿVWYÿÆÆÇÿñññÿ«¬­ÿÿÿÿÿÿÿÿÿÿ¯’” ÁÁÂLOQœù˜™›ÿ«¬­ÿÿ ÿ ÿÿBEGÿœžŸÿ¹º»ÿ±²³ÿ«¬®ÿ©ª«ÿ×××ÿçççÿëëëÿìììÿîîîÿïïïÿðððÿòòòÿæææÿØØØÿøøøÿçéìÿâãäÿÜÜÜÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿþþþÿÿÿÿÿüüüÿøøøÿóóóÿïïïÿëëëÿãããÿÛÛÛÿÑÑÒÿÉÉÉÿÄÄÄÿÁÁÁÿÀÁÂÿÀÁÁÿÃÄÄÿÈÉÉÿÌÌÍÿÏÏÏÿÐÐÐÿÍÌÍÿÇÇÇÿLNPÿ ÿ=?AÿÛÛÜÿz{}ÿ ÿÿÿÿÿÿÿÿÿ·ace ·¹¹9BEF¹!$ü369ÿÿÿÿÿ58:ÿ+-/ÿ†‡‰ÿ»¼¼ÿ±²³ÿ®¯°ÿÕÖÖÿçççÿìììÿîîîÿîîîÿðððÿðððÿóóóÿêêêÿÝÝÝÿõõõÿðððÿØØØÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòóÿ¨¨°ÿáâäÿùùùÿîîîÿèççÿÖÖ×ÿ®¯¯ÿ…†ˆÿZ[^ÿ>?@ÿ./1ÿ"$'ÿ!ÿ!$ÿ #&ÿ #%ÿ"$'ÿ"$'ÿ'*-ÿ/02ÿ89:ÿ:;<ÿ889ÿÿ ÿÿ¡¢£ÿACFÿÿÿÿÿÿÿÿÿÿ"à[]_AÉÊÊ•–— 58:‘ñÿÿÿÿ"%ÿ]^aÿ123ÿvxyÿ»¼½ÿ²³´ÿÃÄÅÿåååÿéééÿíííÿïïïÿðððÿòòòÿóóóÿóóóÿäääÿÚÚÚÿÞÞÞÿíííÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÿŸ¡«ÿFKeÿÀÁÇÿêééÿÁÁÁÿ||~ÿ9:<ÿÿ""#ÿ=?Aÿfgiÿ‡‡ˆÿ¢£¤ÿ²³´ÿ¼½½ÿ¾¿Àÿ¾¿Àÿ»¼¼ÿ²³´ÿ©ªªÿ™š›ÿ‡ˆ‰ÿtuwÿbddÿSUVÿFHJÿVXYÿžŸÿ ÿÿÿÿÿÿÿÿÿÿý!Ÿkmo¥¦§»¼¼>?B¾ÿÿÿÿÿ69;ÿuvxÿ&'(ÿ‡‰Šÿ»¼½ÿ³´µÿÐÐÑÿççæÿêêêÿíííÿðððÿòòòÿôôôÿõõõÿöööÿòòòÿòòòÿúúúÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÂÈÿTYqÿKPgÿjiqÿ‹‹Œÿ.02ÿ ÿ-./ÿƒ„ÿ¿ÀÁÿäääÿðððÿôôôÿôôôÿôôôÿôôôÿòòòÿòòòÿóóóÿôôóÿóóóÿóóóÿòóòÿòòòÿîîîÿèèéÿããäÿåååÿstvÿÿÿÿÿÿÿÿÿÿÿÿñ#&)Sy|~OPSÿÿÿÿÿ ÿHKMÿ‘ÿ#$%ÿuwxÿ´´µÿ´µµÿÄÄÅÿÞÞÞÿêêêÿíííÿïïïÿñññÿóóóÿöööÿøøøÿùùùÿûûûÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿááäÿX]rÿOUoÿX^rÿW^pÿ27Fÿ!#'ÿ‘ÿèèèÿøøøÿóóóÿñññÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿñññÿÔÕÖÿ$'*ÿÿÿÿÿÿÿÿÿÿÿÿÿÞ69<4êëënpr?ÿÿÿÿÿÿÿegiÿˆŠ‹ÿ(),ÿ469ÿMOQÿcegÿ}~ÿš›œÿ·¸¹ÿÔÔÔÿäääÿíííÿñññÿôôôÿöööÿöööÿ÷÷÷ÿùùùÿúúúÿûûûÿüüüÿýýýÿýýýÿýýýÿþþþÿëëìÿ‚‘ÿLSnÿW^uÿbj€ÿjz“ÿdp†ÿEGUÿ—–œÿîíîÿóóóÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿðððÿôôôÿŒÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!$'”´µ·¢¤¥=øÿÿÿÿÿÿÿ‘’ÿ|~€ÿÿ ÿ ÿÿÿ!ÿ-/1ÿOQSÿz|}ÿ¦§§ÿÆÆÇÿçççÿïïïÿèèèÿéééÿîîíÿðððÿïïïÿîîîÿññðÿòñòÿñññÿ™š¥ÿMRlÿV^wÿdn†ÿk{—ÿl{”ÿ^ezÿ]exÿLQaÿrpyÿãâãÿöööÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿòòòÿÚÛÛÿ69<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Å”–—z|} .13Ðÿÿÿÿÿÿÿ$'*ÿ•–—ÿsuwÿÿÿÿÿÿÿÿ7:<ÿ;=?ÿ;=?ÿ89;ÿqrtÿ¡¢£ÿwyzÿopqÿ…†‡ÿœžÿª««ÿ±²²ÿ³´´ÿªª«ÿZ^qÿBG_ÿfq‹ÿn}šÿqƒ¡ÿfoˆÿaiÿbj€ÿ\bwÿ]g|ÿdivÿ½¼¿ÿ÷÷÷ÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿøøøÿ{}~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƈŠšœ:=?“þÿÿÿÿÿÿ ÿ>ADÿ¤¦§ÿY[]ÿÿÿÿÿÿ!ÿ±³³ÿàááÿÕÖÖÿ‹Œÿ./1ÿOQSÿdegÿ ÿÿÿÿ!$ÿ"$ÿÿ&ÿ"ÿ9?Rÿm~œÿmy”ÿbk†ÿjuŽÿ_gÿgs‹ÿm~˜ÿ\eyÿPSaÿ©¨­ÿññòÿöööÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿõõõÿרØÿ#&(ÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿÿÿ¿–˜šããã]`cU!ðÿÿÿÿÿÿÿÿY[\ÿ™™›ÿPRUÿÿÿÿÿ ÿRTVÿëììÿúúúÿýýýÿÌÌÍÿ=>AÿRTWÿhjkÿÿÿÿÿÿÿÿÿÿ$(3ÿV_wÿlx”ÿbk…ÿmx“ÿp‚ŸÿhsŒÿ^f{ÿ_g{ÿLQbÿ€€ˆÿååæÿøøøÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿõõõÿîîîÿbdfÿ ÿÿÿÿÿÿÿÿÿÿÿÿ"%ÿ#&)ÿ ÿÿ,/2˜ÈÉÉ Ÿ "%'ÏÿÿÿÿÿÿÿÿÿvwyÿŠ‹ÿ8;=ÿÿÿÿÿÿ•—˜ÿùùùÿúúúÿúúúÿÐÑÑÿ@ACÿ\^`ÿSUWÿÿÿÿÿÿÿÿÿ"$ÿ®°¶ÿ{•ÿfqŒÿs…¤ÿm{—ÿhqŠÿbj‚ÿcl‚ÿ\cyÿV]pÿdepÿÐÐÓÿ÷øøÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿøøøÿŸ ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.14ÿ(+.ÿ #&ÿÿUWY€ÛÜÛçèèDFIyÿÿÿÿÿÿÿÿÿ)+/ÿ‡ˆŠÿprtÿ),.ÿÿÿÿÿ+-0ÿÊÊËÿüüüÿûûûÿþýýÿ¸¹ºÿ036ÿwy{ÿ?ACÿ ÿÿÿÿÿÿÿ/14ÿäääÿçèëÿœ¢²ÿhx–ÿkw’ÿaj…ÿlw‘ÿ`iÿgp‡ÿ[cxÿ`k€ÿdnÿ¯¯³ÿúúúÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿùùùÿÐÑÒÿ.03ÿÿÿÿÿÿÿÿÿÿÿÿÿ),/ÿ9Aÿéééÿýýýÿüüüÿûûûÿª«¬ÿ57:ÿz{}ÿ036ÿÿÿÿÿÿ ÿACEÿïïïÿûûûÿûûüÿ¾¿Çÿovÿlx”ÿbk†ÿlv‘ÿbk„ÿhtÿo‚žÿak€ÿQVhÿ‡ˆÿççèÿúúúÿøøøÿøøøÿøøøÿúúúÿääåÿ@BEÿ ÿÿÿÿÿÿÿÿÿÿÿÿ"%ÿBEGÿ?AEÿ58;ÿ,/2úUWZ«¤¦§“”• 035šþÿÿÿÿÿÿÿÿÿXZ\ÿz|}ÿEHJÿÿÿÿÿ ÿmnpÿêëëÿýýýÿýýýÿöööÿhikÿTWYÿxz|ÿ!$ÿÿÿÿÿ ÿGIKÿóôóÿûûûÿûûûÿûûûÿÚÛàÿƒˆ›ÿgrÿhsÿgqÿuˆ¥ÿhtÿdm„ÿ[cxÿXasÿtv€ÿÕÔ×ÿúúúÿùùùÿúúúÿéééÿkmoÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿEGIÿNPRÿEHIÿ:=?ÿ46:È‘‘”!‡ˆ‰îÿÿÿÿÿÿÿÿÿÿfhjÿnpqÿ-/2ÿÿÿÿÿÿsuwÿòòóÿþþþÿþþþÿßààÿKMOÿvxzÿjlnÿ!ÿÿÿÿ ÿFIKÿóóóÿüüüÿüüüÿûûûÿýýýÿôôõÿ¢¥³ÿhr‹ÿv‰©ÿlz˜ÿlw‘ÿakƒÿfqˆÿ\dzÿ[dyÿZ^lÿ½½ÁÿøøùÿñññÿlmpÿÿÿÿÿÿÿÿÿÿÿÿÿÿBDGÿ^`bÿTVXÿMOQÿ9<>Ö[]`FÄÄÄ8:=úÿÿÿÿÿÿÿÿÿ%(*ÿnpqÿSUWÿ"ÿÿÿÿÿÿstvÿëëëÿþþþÿþþþÿµ¶·ÿBDFÿŽ‘ÿgikÿÿÿÿ ÿADGÿððñÿýýýÿýýýÿýýýÿýýýÿýýýÿùùúÿÎÐ×ÿ~‰¡ÿjv’ÿdnŠÿlw‘ÿeoˆÿgp‰ÿ_g~ÿftŒÿdnƒÿ‘’™ÿopsÿÿÿÿÿÿÿÿÿÿÿÿÿÿJLNÿkmoÿdfhÿXZ\ù>@CÄbdgC‚…†X[]# Ðÿÿÿÿÿÿÿÿÿÿ479ÿkmoÿ369ÿÿÿÿÿÿÿmopÿèèèÿÿÿÿÿõõõÿsuwÿgikÿ”•—ÿbdfÿ ÿÿ ÿ@CEÿïïðÿþþþÿþþþÿýýýÿýýýÿýýýÿýýýÿþþþÿááåÿŒ‘£ÿfqÿitÿfp‹ÿkvÿgsŽÿvˆ¥ÿZbxÿZcuÿ*,7ÿÿÿÿÿÿÿÿÿÿÿÿÿXZ]ÿz|~ÿsuwÿegiøBEG¦]_`6ÜÜÜ ééê [\^…ÿÿÿÿÿÿÿÿÿÿ ÿACFÿPRTÿÿÿÿÿÿÿ ÿ9;>ÿÅÅÆÿúúúÿèééÿNPSÿ‚„ÿ”•—ÿqsuÿ!#ÿ ÿ358ÿçççÿÿÿÿÿÿÿÿÿþþþÿÿþþÿþþþÿþþþÿþþþÿþþþÿøùùÿ¸»Äÿmwÿjv’ÿgrÿzެÿcmˆÿis‹ÿ]e|ÿen„ÿ<@Nÿÿÿÿÿÿÿÿÿÿ:AD¹_bd(‰‹Œ368¶ûÿÿÿÿÿÿÿÿÿÿ-03ÿÿÿÿÿÿÿÿ ÿ&),ÿ‡ˆŠÿáááÿ©ª«ÿXZ\ÿ—™šÿŽ‘ÿ8:=ÿ ÿ.03ÿãääÿÿÿÿÿÿÿÿÿéùýÿÀìúÿøýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüýÿÑÒØÿ†¢ÿz®ÿjw”ÿku‘ÿfoŠÿgpŠÿZbwÿ+0:ÿÿÿÿÿÿÿÿ*,0ÿfhiÿœžÿžŸÿˆ‰ŠÿQSVô=?BŒ‚6¡¢£twx!%'Íûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ69;ÿ™š›ÿgikÿwy{ÿš›œÿX[\ÿ ÿ$&(ÿÜÜÜÿÿÿÿÿòüþÿfÒóÿKÊðÿ©æ÷ÿüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäååÿ“ÿ:CTÿgsŽÿlw“ÿhsÿ_hÿ#(0ÿÿÿÿÿ ÿÿ57:ÿtvxÿ©««ÿ¸¹ºÿ¦§¨ÿqsuÿ:<>ÕFGK“”•ÒÓÓvxyB"%®ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!$ÿ-/2ÿŽ‘ÿ‚ƒ…ÿ ÿ.03ÿåååÿæøýÿkÖöÿgÓôÿiÓóÿ·éÿžáõÿðôõÿááâÿ»¼½ÿxz|ÿ,/2ÿÿÿ!%/ÿS\tÿal…ÿ"'.ÿÿÿÿ ÿADFÿsuwÿ®¯°ÿÍÎÏÿÑÑÒÿ¸º»ÿ…‡‰ÿ68;ÿÿFIKšª«¬ ¥¦§kmoLÈýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?BDÿegiÿÿ$&(ÿ”›ÿdÏîÿ`Õ÷ÿr×õÿ¹ìÿ´éÿ¸éÿX—«ÿ989ÿ ÿ ÿÿÿÿÿ#ÿ#'1ÿÿÿÿÿ¤¥¦ÿââãÿðððÿææçÿÇÈÉÿ‰ŠŒÿACEÿÿÿånop9acf. "&²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿy™ÿe×÷ÿuÛ÷ÿ¹îÿ¸ìÿ¶êÿ³èÿ§Ûÿ G[ÿÿÿÿÿÿÿÿÿÿÿÿÿfgiÿ™š›ÿ„…†ÿOPRÿ(,/ÿ&ÿ ÿÿÿ(+.lÖÖÖ¾ÀÀlmp1ACFÊ"õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿ›ÿeÜøÿkÙùÿÀóÿ»ïÿ¹íÿ¶êÿ²çÿµèÿ=´Úÿ EXÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿ'/8ÿ;BQÿLTgÿ]fzÿJTfÿ$ÿÐ,/2%¯¯°$efhtFHKÌ"$îúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿÿ …¡ÿaÝ÷ÿvßûÿ Áõÿ¾óÿ»ïÿ¹íÿ·êÿ²çÿ>Âëÿ­çøÿ@±Öÿ5lÿ†ƒ„ÿstvÿNQSÿ #%ÿ ÿÿÿÿÿ"ÿJSfÿ_l…ÿtˆ¦ÿlw’ÿhq‹ÿl{•ÿm~˜ÿS[mÿ(*2³cgmÀÀƒ„…”–—~€‚,egiŸýÿÿÿÿÿÿÿÿÿÿ ÿÿ69;ÿ]`aÿ|z{ÿo|ÿ’¯ÿoåýÿnßüÿÅøÿÂöÿÀóÿ¼ðÿºîÿ¶ëÿ+¾ìÿáõÿ¾êøÿ¸è÷ÿZËîÿ£ÙêÿîíìÿçææÿÌÌÍÿ„…†ÿ!$ÿÿÿÿÿ+1>ÿmœÿn{˜ÿisÿs€žÿr„£ÿhr‹ÿ_g~ÿr„žèy‰ŸD—˜ŸÑÒÒ+.13èÿÿÿÿÿÿÿÿÿÿ<>Aÿž ÿÚÛÛÿéééÿàêíÿhÚ÷ÿeáþÿnáþÿÊûÿÆøÿÃöÿÀôÿ¼ñÿºîÿ!¿îÿÝõÿ¶è÷ÿ»éøÿÆìøÿ¿éöÿF¼âÿ£Ñáÿæäãÿâââÿßßßÿ¦¦§ÿ035ÿÿÿÿÿ#*ÿMUjÿsžÿt‡§ÿq}šÿgp‹ÿqÿl}—ÿgq‡Ãt€–T­¶Â ¿¿Â@CE ÿÿÿÿÿÿÿÿ ÿoqsÿáââÿøøøÿïïïÿîììÿÀäíÿ>ÕûÿZÞÿÿËþÿÉüÿÆùÿÃ÷ÿ¿ôÿ ¾òÿ?Êòÿ’à÷ÿ¯çøÿ´èøÿ¾êøÿÉíùÿ ßóÿ/²àÿ…ÈàÿæãâÿßßßÿÜÜÜÿÞÞÞÿ«¬¬ÿ!$&ÿÿÿÿÿÿBM`ÿo}šÿhsÿs‚ ÿvŠ©ÿhqŒÿgsŒÿqƒŸìv—€’”Ÿ3KMPnÿÿÿÿÿÿÿÿmnpÿôôôÿöööÿòòòÿîîîÿìììÿìêêÿºâìÿHÓ÷ÿ Ìþÿ ËýÿÌúÿ+Í÷ÿHÒ÷ÿ|Ýøÿœäùÿ§æùÿ¯èøÿ·éøÿ©äöÿeÌíÿ<¹ãÿ£ÔäÿãäåÿâââÿßßßÿÜÜÜÿØØØÿÙÙÙÿ€‚‚ÿÿÿÿÿÿÿ#'1ÿ]j‚ÿyŒ¬ÿkv”ÿp|™ÿt†¤ÿlx’ÿ`húlw¾—®ÈOÄÕç `adL"$'ñÿÿÿÿÿ ÿEGJÿââãÿùùùÿõõõÿòòòÿîîîÿìììÿêêêÿêçæÿÜäåÿƒØîÿIÔ÷ÿUÚüÿzáüÿ“åüÿšåûÿ™äùÿ•âøÿÛõÿ`ÒôÿEÇïÿwÐíÿÑèïÿíéèÿåääÿâââÿßßßÿÜÜÜÿØØØÿÚÚÚÿÈÉÉÿ%(+ÿÿÿÿÿÿÿ#ÿNWkÿs›ÿr…¥ÿu…£ÿgpŒÿgpŠÿu‹©ÿœÂéñ¯ÎîšÍáò&»Ôí²Ðë¬ËêªÊêÉÝò”•— #&Äÿÿÿÿÿÿµ¶¶ÿüüüÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿêêêÿæææÿäååÿìåãÿÓØØÿ›ÇÓÿ{ÏäÿjÒíÿ^Íìÿ^ÐñÿdÔóÿyÓíÿcš¬ÿQ\`ÿ_[\ÿ‘‘ÿãããÿæææÿâââÿßßßÿÜÜÜÿØØØÿÛÛÛÿçççÿY[\ÿÿÿÿÿÿÿÿ!%¿z„–¦ˆ™·òju“ÿlw“ÿz‹¨ÿ®Ëèÿ”¼äÿ˜Âêÿ¡Çëÿ­Îîì§ËíÐ¥ÉíÊ£ÈíŵÓñÔÎáò,ÆÇÇ035µÿÿÿÿÿ;=?ÿêëëÿûûûÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿêêêÿçççÿåååÿ—˜™ÿJJLÿ88:ÿVWYÿª®¯ÿßäåÿÝäæÿîøüÿ‘“”ÿ "ÿÿÿÿvxyÿàààÿâââÿßßßÿÜÜÜÿØØØÿÞÞÞÿíííÿwxzÿÿÿÿÿÿÿû),.^ÈÌÐ › ±p‰“©òv†£ÿ¯ÆßÿËßòÿ©Éèÿ”¼ãÿ•½åÿ–¿æÿ–¿æÿ–¿æÿ–¿æÿ™ÂëÿªÌíÈ¿Øñ/WYZŒÿÿÿÿÿoqsÿ÷÷÷ÿûûûÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿêêêÿéééÿ¦§¨ÿÿ ÿÿ ÿ025ÿãääÿáââÿåææÿ+.0ÿ ÿÿÿÿ #ÿ¶¶·ÿåååÿßßßÿÜÜÜÿØØØÿäääÿðððÿ}~€ÿÿÿÿÿÿÿó9;>8½ÂÌ]¬ÄßçÉßöÿÌÞñÿÈÜðÿ§Èèÿ“»âÿ”¼ãÿ”¼ãÿ”¼ãÿ”¼ãÿ”¼ãÿ˜Áéÿ§ËïнÖï;oqs?ïÿÿÿÿ‘““ÿüüüÿûûûÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿêêêÿßßßÿKNPÿÿÿÿ ÿ-02ÿåååÿâââÿÑÒÒÿ!ÿÿÿÿÿÿš›œÿçççÿßßßÿÜÜÜÿÜÜÜÿìììÿìììÿtvwÿÿÿÿÿÿÿ "óUWY)ÜåïÒäôT¹ÕðöÍàóÿÌÞñÿÈÜðÿ®Ìéÿ•¼ãÿ“»ãÿ”¼ãÿ”¼ãÿ”¼ãÿ”¼ãÿ—Àèÿ¥ËðÖ³Òð8îôùace!$&çÿÿÿÿ–—˜ÿýýýÿûûûÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿëëëÿÙÙÙÿ@BDÿÿÿÿ ÿZ[]ÿíííÿßßßÿáááÿ+.0ÿ ÿÿÿÿ #ÿµµ¶ÿåååÿÞÞÞÿÜÜÜÿéééÿðððÿæææÿSUWÿ ÿÿÿÿÿÿ258Ðloq¼ÙôàÏäøúÍàóÿÍßòÿËÞñÿ¶Ñìÿ›Àåÿ“»ãÿ”¼ãÿ”¼ãÿ”¼ãÿ”¼ãÿ—Àçÿ¤ÊïßÇÝówåîøopr@BEìÿÿÿÿ†‡‰ÿúúúÿûûûÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿêêêÿåååÿjkmÿ ÿÿÿ!ÿ©ª«ÿíîîÿßßßÿùùùÿ•–—ÿÿ ÿ ÿ ÿwyzÿàààÿâââÿâââÿëëëÿðððÿîîîÿÅÅÆÿ"%(ÿÿÿÿÿÿû,/2tÇÈÈÇÝó+¿Øñ€ÃÜôöÄÝöýËá÷ÿÐãöÿÈÜñÿ¯Ìêÿ™¿äÿ’»ãÿ“»ãÿ”¼ãÿ”¼ãÿ–¿æÿ£ÊïôÇÜò†Úèõ œŸ:@ÿÿÿyz|ÿæææÿðððÿÆÆÇÿîîîÿòóóÿ°±²ÿ^`bÿY\]ÿ–—˜ÿäääÿêêëÿìììÿðððÿñññÿðððÿäääÿstvÿÿÿÿÿÿÿærtv>Ýê÷ÂØï*ÁÙòFÂÚòœÁÛôäÆÞöüËá÷ûÄÛòþ³ÐíÿžÃçÿ–½äÿ“»ãÿ“¼ãÿ•¾æÿžÆëôµÒï±ÁÙðNÇÝð"áì÷åææWY[Œÿÿÿÿ&(+ÿÜÜÜÿüüüÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿêêêÿæææÿæææÿÌÍÍÿ‘ÿŸ ¢ÿìììÿûûûÿæææÿfhjÿ‘ÿùùùÿúúúÿø÷÷ÿöö÷ÿûûûÿõõõÿõõõÿóóóÿòòòÿñññÿíííÿ¤¥¦ÿ"ÿÿÿÿÿÿÿ'+-ÁÁÃà ßêö4ÅÛïe¾ØñÆÞöñÀÙòÿÃÝõÿ¿Ùóÿ¯ÎìÿŸÃæÿ–¾äÿ”½äÿ—ÀéýÆíî¨ÌïÛ±ÐïǪËêˆÁ×ïwÉÝñ,ƒ„†?"ìÿÿÿ ÿƒ„ÿøøøÿ÷÷÷ÿõõõÿòòòÿïïïÿîîîÿðððÿïïïÿðððÿôôôÿûûûÿüüüÿûûûÿõõõÿ°°±ÿ #&ÿÿŽ‘ÿìììÿûûûÿøøøÿ÷÷÷ÿöööÿõõõÿóóóÿòòòÿçææÿ•–˜ÿ%(+ÿÿÿÿÿÿÿú035UÞêöÆÝò ÜéõFÅÜñ“ÁÚòÈÆß÷âÈß÷þÄÝôÿÀÙñÿ¸Òìÿ²Ïëÿ±Ïìÿ´Òðÿ¸×ôþ°Ô÷ü¯Îî_¸¹º'*,Òÿÿÿÿ,/2ÿ¿ÀÁÿúúúÿõõõÿôôôÿ÷÷÷ÿùùùÿüüüÿûûûÿûûûÿûûûÿûûûÿúúúÿ÷÷÷ÿßßßÿRTVÿÿÿ "ÿ`ceÿÁÂÃÿéééÿñññÿñññÿîîîÿåååÿÁÁÁÿvwyÿ #&ÿÿÿÿÿÿÿÿ $&çNQQ6ãî÷ÆÛð/ÈÝótÆÝóËÂÛõìÇà÷ýÌá÷þÊßôüÅÝõþ·Öõø¸Öó›ÈÞóGIK—ÿ#&(ÿ$&)ÿ$')ÿ!$&ÿ>ACÿÔÔÕÿûûûÿüüüÿýýýÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿøøøÿÝÝÝÿuwxÿ!$'ÿ&(+ÿ&),ÿ&),ÿ!$'ÿ),/ÿNPRÿmoqÿ~€ÿqrtÿUVXÿ/24ÿ"%'ÿ')-ÿ(*-ÿ(+-ÿ(+-ÿ)+.ÿ"%'ÿÿÿ035¾¡¢£ßëö%Ìáõ{ºÕÐì“«ÌëŒÄÜô`Øçõ uwy{÷-/2ÿ257ÿ257ÿ257ÿ025ÿLNQÿ®®°ÿîîîÿüüüÿýýýÿüüüÿüüüÿüüüÿøøøÿîîîÿÆÆÆÿikmÿ479ÿ47:ÿ57:ÿ57:ÿ57:ÿ57:ÿ469ÿ258ÿ258ÿ358ÿ358ÿ368ÿ479ÿ68;ÿ68;ÿ69;ÿ69;ÿ69;ÿ7:<ÿ%'*ÿÿÿ_acUÙÙÙéñùáì÷ æðùrtv #&É/14ÿ@BEÿ@BDÿ@BDÿ@BDÿ=?AÿBEHÿstvÿµ¶·ÿØÙÙÿééêÿêêêÿàààÿ¿ÀÀÿŒŽÿQSUÿ>@BÿBDFÿBDFÿBDFÿBDGÿBDGÿBDGÿBDGÿCEGÿCEGÿCEGÿCEHÿCEHÿCEHÿCFHÿCFHÿCFHÿDFHÿDFIÿEFIÿ "%ÿÿ/25÷‹ŒŽ¿ÀÁ 67:‰$'*þMORÿOQTÿOQSÿOQSÿPRTÿPRTÿLNPÿJLOÿRTVÿZ\_ÿ^`cÿVWYÿNPRÿKMPÿPRTÿQSUÿPSUÿPSUÿQSUÿRSUÿRSUÿQSUÿRTVÿRTVÿQTVÿQTVÿRTVÿRTVÿRTVÿRTVÿSUWÿRUWÿRUWÿTWYÿKMOÿÿð@CD^µ··ëìì‚6ðKMPÿ^`cÿ]_aÿ]_aÿ]_aÿ]_aÿ]_bÿ]_aÿ]_aÿ\^aÿ\^aÿ]_aÿ^`bÿ^`bÿ^`cÿ^`cÿ^`cÿ_acÿ_acÿ_acÿ_acÿ_acÿ_adÿ`acÿ`acÿ`bdÿ`bdÿ`bdÿ`bdÿ`ceÿabdÿaceÿaceÿbdfÿ;=?ÿÿ!$(³’“•ÑÒÒ+.1Ä147ÿmnqÿlnpÿkmoÿkmoÿlnpÿlnpÿlnpÿlnpÿlnpÿlnpÿlnpÿmopÿmopÿlopÿmopÿmoqÿmoqÿmoqÿnoqÿnoqÿmoqÿnoqÿnprÿnprÿnprÿoprÿoprÿnprÿoprÿoqsÿoqsÿprtÿdfhÿ!$ÿòPSVUFGIb!ô\]`ÿ{}ÿz|}ÿz|~ÿz|~ÿz|~ÿ{|~ÿ{}ÿ{}ÿ{}ÿ{}ÿ{}ÿ{}ÿ{}ÿ|}ÿ|~ÿ|~ÿ|~ÿ|~ÿ|~ÿ|~ÿ|~ÿ}€ÿ}€ÿ}€ÿ}€ÿ}€ÿ}€ÿ}€ÿ~€ÿ~€ÿƒÿ=@Bÿû+-0…€‚ –—˜$'*•(+.ÿ~€‚ÿ‰‹Œÿˆ‰‹ÿˆ‰‹ÿˆ‰‹ÿˆ‰‹ÿˆ‰‹ÿˆŠ‹ÿ‰Š‹ÿ‰ŠŒÿ‰ŠŒÿ‰ŠŒÿ‰ŠŒÿ‰‹Œÿ‰‹Œÿ‰‹ŒÿŠ‹ÿŠ‹ÿŠ‹ÿŠ‹ÿŠŒÿŠŒÿŠŒÿŠŒÿ‹Œÿ‹ŒŽÿ‹Œÿ‹Œÿ‹ŒŽÿÿkmoÿÿ"Ë ííîace9á?BDÿ’“”ÿ˜™›ÿ—˜šÿ—˜šÿ—˜šÿ—˜šÿ˜˜šÿ˜™šÿ˜™šÿ˜™›ÿ˜™›ÿ˜™›ÿ˜™›ÿ˜™›ÿ˜š›ÿ˜š›ÿ™šœÿ™šœÿ™šœÿ™›œÿ™›œÿ™›œÿš›œÿš›œÿš›œÿš›œÿš›œÿžŸ ÿƒ„ÿ!$'ÿèQSVT˜™›9;>]ñMPRÿ£¤¥ÿ¦¨©ÿ¥§¨ÿ¥§¨ÿ¦§¨ÿ¦§¨ÿ¦§¨ÿ¦¨©ÿ¦¨©ÿ¦¨©ÿ¦¨©ÿ§¨©ÿ§¨©ÿ§¨©ÿ§¨ªÿ§¨ªÿ§¨ªÿ§¨ªÿ§©ªÿ¨©ªÿ¨©ªÿ¨©ªÿ¨©ªÿ¨©ªÿ¨©ªÿ«¬­ÿ’“”ÿ258ÿë7:?ÿŸ ÿÆÆÇÿÅÆÆÿÃÃÄÿÃÃÄÿÃÄÄÿÃÄÅÿÃÄÅÿÄÄÅÿÄÅÅÿÄÅÅÿÄÅÅÿÄÅÆÿÄÅÆÿÄÅÆÿÄÅÆÿÅÅÆÿÅÆÆÿÄÅÆÿÅÆÇÿÈÈÊÿÃÄÅÿ‚ÿ#&)þ SVW8…†ˆ­¯° NORNØ%(*ûz|~ÿÀÁÂÿÔÕÕÿÓÓÔÿÑÑÒÿÐÑÒÿÐÑÒÿÑÑÒÿÑÒÒÿÑÒÒÿÑÒÒÿÑÒÓÿÑÒÓÿÑÒÓÿÑÒÓÿÒÓÓÿÓÔÕÿÕÕÖÿÓÔÕÿ²³µÿY[^ü #ë(*-”QSV³´µxz|!,/3tÁ036ýƒÿÂÃÃÿáááÿççèÿäååÿâããÿáááÿàààÿààáÿààáÿââãÿäääÿæççÿèééÿÜÜÝÿ´µ¶ÿ`bdÿ.03ê%(+›Z\]<ÀÀ²³³jloKNPW-02¸=?BÛklnÏ ¢£âÁÂÃìÑÑÒýÝÞÝÿäääÿååæÿããäÿÜÜÝüÌÍÍú´¶·ý‘ò`acé@BE²SVXtprt:stu ÉÊʈ‰‹7VVX6RTV@WXZTwxyˆ€‚§€‚à‚ƒ„å„……Ó‰ŠŠ¹orss^`cnbcdRƒƒƒB¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿøÿÿÀÿÿ€ÿÿ€ÿÿÀÿÿüÿÿÿÿÿÿÿÿ?ÿÿÿþ?ÿÿÿüÿÿÿðÿÿÿàÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿüÿÿøÿÿø?ÿÿðÿÿðÿÿàÿÿàÿÿÀÿÿÀÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿÀÿÿàÿÿðÿÿðÿø?ÿø?ÿø?ÿø?ÿü?ÿü?ÿþÿþÿþÿÿÿÿÿÿÿÿÿ€ÿÿÿ€ÿÿÿÀÿÿÿàÿÿÿðÿÿÿøÿÿÿÿüÿÿÿÿþÿÿÿÿÿ€ÿÿÿÿÿðÿÿÿÿÿøÿÿÿÿÿø?ÿÿÿÿüÿÿÿÿüÿÿÿÿüÿÿÿüÿÿÿüÿÿÿþ€ÿÿÿþ€ÿÿÿþÀÿÿþø?ÿÿþÿÿÿÿ?ÿàÿÿÿ?ÿþÿÿÿ?ÿÿÇÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÿÿàÿÿÿÿÿÿÿðÿÿÿÿÿÿÿøÿÿÿÿÿÿÿøÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/icon.png0000644000175000017500000001573111273045225024056 0ustar julianjulian‰PNG  IHDR@@ªiqÞbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× 40¹HQÚfIDATxÚí[wtUU¾þöi·¥ÞTR( •.vFEi㨠ê€ËØpÆûŒKE+*ˆ"#££©BÞ¤ $NêMrsË)÷œ³÷ûãæ^Ô ¾5o­wÖÚkåì{ÎÞç÷íïW÷Áot¹Ýøèƒy»wïèpDdu–žqydTT_t'ç–ýþ½åe¥.w“§ÜÝØ°öÖ[GOºoŠÿ‹ù-}þ¹g¢W®X>Öbµ>2bÄïÞxóH³[·n»ÝŽãŒ1(ª‚ââ"¶oï^ïæï¾Ëóz=Üqç„U{æYßÿ9þõÙ"nÝÚ5}<ðé°+‡_qß”.!1Œ20°æ I«Ù ŽpðxšðÅ¿—˜[r7HHH˜ñî{ÒúöíÆX«e&mfmÌypAQQ>žÿ‘’ðÀ´ûg,™ñÀCì·@¸ƒ|ôá¶·ßœ=ûšk¯KKLJBMMM˜Û¥þùø·"""£ÇŒµ}³bÙûë¿]WÒP_¿ÃwÉà/Å šêÇ{~À€¼ßçƒ,û!Ë2E†,77E†ì÷CVd(r‹~¹eŸÒünð}»Ý·Ûm=•ŸßÝUçZµgï>忎Ÿÿk±å­9³§fee‰µµµm` hÖù–ºßÆ´ÛGÐ¥KW9sÍ®];¦xû¿€?ìï¢iê5=€Œ1H’„.]º 11š@yyª««Áq¤…þ-:ÏF„@‰ÅÙ³gŸxêÏ3WÍyë3ÿU””çB¢\u® «cÀïn¼Sr¦!%5<σ1¯×‹ýû÷á“磦º¦Õj3ÆZ™Žp­ ¥(ŠÐu=m÷®]“N:õ=z\ô÷ªgE0ƬÎÎÆ¯öGá'Oºg»Çã.ò@€i÷?€G{¢(¶’1†‚‚üåÉ'P\\ÈèèÜ0b²{ôPXXˆ]»v¢¦º< š Ó@“» 111§'Lœ8ôåWf5tä;ýuÅ‘FcÅe¢(N2jgª+LàùíLt¼÷«°eKnwccoMÓ 3†¡C‡á¡‡c ²,7»4„‚žç‘••…ÇŸ‰Ó§bØ•Ãðʬב‘‘  ”Â0 TVVâõW_ÆÆZ€ÈàõzÒss7w­ªªjèÔ©Ó¿K®+&Tñ8(ÕÇr¦6‚x«®ãy®K@Sjà9Œ‘†\ïøUìÚ¹ãjÃ0bcÐu?ò¬6t]†Ã0 ë:Ö¬^…Sù'ñèãOàÊáWbúŒ˜ùä_ Ë2 N!5µ3$I!©©©˜õút¹›7…A0MSÒ5múºuk´ñD Dq•¤ò‚8‘6U\N8~ –ú`é6žkV¯D]m ÔT‘çqàËqÓ°þ¼¬j$ŒPvæ¬gmZ&{ê²# $Gl‡²Æ‹²ÇŽS5í¦ö~[0ÿCL˹ùù'¡$#’= °3ü`j9 ×Z(…/Âð s9¢2Fè^ Âñà8{vïÆ¼÷ç‚pcHˆ‰ÂÃãÇà¦a—¡É€Å* ªÞS™”7õŠn¹kðïï?ÕQá;¤ÜÇó?ºü›•ËûÚ,ÖQùùùBúþE)…ÕjE·îÝ‘”œ‚ÔˆÃxéoWBR‹`¸÷Á0Ã`0 {ö« Bª‹w&?ˆ’’J¬Y³ Ë—-…€‚þÝ21yܸ=¬Š@½Ç¤$çd[rö’œ/¾Vð‹xò‰ÇóOžüøÄ‰ã7ªªjcŒýbàc Œà–áï½:6½÷Þ :9Ë7»1çs(ã Ë2c­ŒžÃfEZR<²ÒSጎ…ÕÊcÙÆí ¼0"¿°èûß´ðÈÃf®]³zniiÉm†aˆ5œ„ÄDG#¯0€úº:Üxý`€Ø`(`”à»]xfžÝD(¨H(A¥cfüéq0KŽŸ)ÂÚÍÛÑäó#$~Þ-_±b…ù›ðâ Ïe®Z¹r®×ë×QÁ)¥°X,ÈÊÎÆ„‰±g÷N<ôä»èÝ»'˜îc"„˜áˆ¾bºe÷…×ãAuu5†!½³Ñ»kŠÎVcŸV‹C†Å­£FcРÁP5 Ý›šÜ§æÌž“÷Å—_^Zxï·#?øàý/Ýî[Û3–á8PJÛ‹?Nš MSÓ§Oã«/¿ÀG >Áø ã¨^‰@Ó8º?ÂG„â|¬ûfömX並‰}y§°ýð±pmJÖ‰Çïb¬}£–•ÔÔTx½ÞV L~?–.ûiiiødáÇÈÌì‚e˾Æñãyày‘‘Íu€AJÜXºàŸØ·þÈ~?jeXm"üª†#…¥È/.mS*#‡ŠŠr|<ÿCìÛ·N§ÓŸðìŽíÛžø×âÏ¢~o¿õ&W\Tôg]דÚ{Á‡¡C‡!ïǼ°ÑbŒaúý3ðò+³`³ÛðÉÂ…ˆ‰‰ÁÆ ë‘÷ã $hÔA¥4œÜüx +æ¿u Ê`P ¿ª¡ Ü…ëÆÝ‰9ó>BïÞ½Û¨YKзmýG¥4F¥YK>_üÒâE‹Ä‹ /ïXÿ††úIí>Ìó5z ŠŠŠPYy„`¸:á.<ÿâ? vîØýûö¢¸¨GŽnÞ Z Ö V@Ó»j9Ö¾®šZ˜Œ@94ùè‚“ý ®½i$ÒÒÓ±pÑgÈÌÌl•¶©L=‚ŠŠ Qöû^¾ìëi_ýç ®ÃTWW‘“ÇÿÉ0L©=ê¼y$ô@‡ ÷õë×/¿ú, ÊÊJñÞ;o!"";wîhE]Ó4áij‚«¦k}€c;6ä&ª\¨2ºãñç_Bv¯^ád*--ïÎý'ÇOÆ…§à÷ù ªªTUU9»¢¢¢G‡ 36¦ó¶m[gºyþ}ûöÃaÃðÍŠåðz= „Àb±`ÁÂO‘‘ ǃ™?†˜X'6}·±…Oo€R$DF ôÐ^ünH¢¯¬Aèpûdô½êFÜ3V›­Õj3Æ’’ A±uë–Œj}…æ3  JÍý'óOí¶oûþMUÛè~\\n»ýv¬üfêëëÃÔŸxϽHÏÈÄž=»1éÞ{àpD`ÇŽm$ 6› I‚U’pu¿^ˆƒ‚€*£É§Â :5áÓî}x&n›páZ¥Ñ¡f¦LÉÁàÁC~RÜn7dYF À©üü®*‹>tPxèÁ£)¥üù‘Ü}S¦bÝÚµ(.* 6(¥ÈÝ´ %ÅÅHLJÆ'M\}͵HLLDdT$$QBUy6ü{1ºf¦Â*—Ц£¶Ñƒ„ôLÜ—3‰II­ …[ Ë f>ùäÜ7 ¦i^!#k­Yü³ìؾMhlhÌ:ŸúwM¼@UU%.¿b:wìlôíÛÙ=z ..6› ”1æ4–çùfËO`\qêÏ–#ÿÀ^(ºøXÊkÑØ5¸'g*AØÊŸOýóû†]9W_}-¶nÝÒîÎRÈ3«;@qQIÀzµhÈС¨­­Cvv6r¦MCBB"RRR`³ÙÀóòÞÿÇ Èyä ŒihÀ¢O?Á~?Ù=z`øð«Ý£’’’`³Ù‚Ì1L¨Šw“õ.jkkárÕ!##Ý»g¡¤¤øBÂ{;uêô÷»&ÞS³e뎟ϾøbIì¢O~f·ÙÇœ8qœóx<à8™]º`̘q8hEA¿þýŽãÂM×u¨ª §Ó‰ªª*ddd´Ë‚¨ùyy蜑^àóùQVZ‚¼¼<äå塦¦>¯§Yÿž Iìöˆ ¼6|»½z÷ÁÈ‘·à½wßnw.§ÓùճϿ0yÒä)_¤_ÿçË«uÝõÚÜ9Ü_|Ž¥_}…Þ}úà·ß‰„„È~?´€]˜q Ѷ©É¦kˆŒˆ@uuÒÚùíÕ¯_øÞjµ"&&}úöņ6l!ú‡<ªjðz=Xúõ×ÈÈè‚ÿþxžÇ¼y!ʲüãè1cqR$È~ùñ»ï¾G€;ѣÇA hîóËPUŠ¢ ²ò,"##ÆÆbccà÷û¡»`qD¢±±N§óç#0Žƒ$IaaC‡XårÕátái>|¥%¥0`V¯û¢(Âï÷!)1 ÕÕUí+8q¿¸B$4º¥ŒÌL(JPXUÕ ªJXð`ŸŠ‚S§Ð©S bb‚j*[[­V˜¦ F)8Fáóûa³Ù`³Ù~2r ùw]סjêëQXX€C¢¨¨’( GÏ^¸îºÐuj7H’Ž l6;ºv놪ªÊ6l“$©C…^!**:Þ4i³°ç„WUj EƱ£G0dè°æ]>Lט˜Ô××¼ÁÐQSSƒÎ;·²Ô!¡UU…,˨­­Åñãy8|è Nž8 Ó4ÝW¿ ã'L€ÓfGЯ­Ø“••…;¶·Àj±œê))©´±±«¥YxŠ¢BSU(ªUQà :xQÑÑèÜ9 111­t611Õ55ˆ²ÛÁT HHHG>ŸÕÕÕØ’›‹-¹›ÐÐЈ®ÝºaÈ!˜0a"’’;Aøv>?6€”ÔÎí Ô-;ûÀÑãù¿«ÍºûÌ™Ó}bbc¡( 4U=Ç‚«š Ù/ã×fá™ç^€Ýn‡(Š­V%)1uuuHNJ‚»©)¼‚^¯›7m‚óÑ»W/äL›Žìì°ÛíaƒÊ…®Ó |~_LLL›ßEI’ívGY‡ê±±±K O2UEª(PZ4Y‘›U#ȄӅ8ž÷#.øMMMaCjV«ñññðx½ˆŒŒ <|>|¿e öïÛ‹wß›‹¿>ý,úõëI’`4[ÿ–[i-[KoÓ²R »ÝÑ&1á›GD‡Rq#~wãa—«î—«Šªiß¼ú!6(Š¿ß3g΀çylÛö=6}·Š"‡?2\Âv8»ÝMÓp"/Ë—-ÅŸ} ‡ºh%ÜOµóhÙ§ªÊù Pm6ûçÓg<б¡[n¹ÕÛ9-ý³=»w›š®¾¬´6†ªŠŠŠrøýþðžEŸ.DiiYø0Äù@†—Ë…Ù³_Çø w]P¸ûû%}-ihh}JFÅc={õÜ3hРE9øÃíw,©(/ÿ¡¡¾¾ÙòŸ§ ²ŒŠòŠÖ;E õønÃz(J›•c ~YÆÚ5«Ás<úõïßF¸öhÝ^_{l€ÒÒÒVSZ­ÖEÏ>÷¢§£UaFëOJN~òС>­¹ÒrƒŠ¢Àãñ ©Éݦ0¾eËf¸Ýî6é©a¨©ªÂâÅŸ!gê´VÁN{ô¿P{¿QJ¡ë:Nž8v’$ÕÝqçß<Ü2zÔAŸ×·òlEE #dƒ«®®„T”—£ àt]oõÑŠ¢`ãÆ ÈÈÈ@ï>}Âtþ%Âý\cŒÁårátaa(K ¤¤¤ÌzcÎÛe¸ˆ+ ÀäIS}ûöýÛÉü“Å¡8h4¸ÝíÆ÷¦ibÿÞ=­|¶išhhhÀÚµk1%gj+OñsV¾8ŒÒæ:h ³wÏî0#EQüdÈÐaó/ÉÖØ¾ý?x xº´´ä.«ÅÂ)ÍAQmmM»¥éPF8jôhØí‚MÓ»y<®Ó=ö Lc?mõ[Qʈé‡`œ†dœ€¤Ÿg”€˜n˜L„Á¬xõå—ÐÔä†(ŠEñqΜÕë64^,m*ŒC†[ýîÙʳ†¦iPd¹Ý¨,t•••¡®ÎNd<Ö®Y…™3ÃéŸ Kãb0Ã^Á «G]ˆ,@ºø92â]HKKGjסHËè…´)üjpåÏ!àÉß«wŸ—r·í®ü5»ÃíÖ•–/[êxãµW_•eùQ\Ëäá›×g¿‰1cǾþê?°IM¸ïÞÛÁ(…á9 ÷™%ðØï†a< ÕÎXÑæz$ÙŽBHÌÄN`Ìlž3´“Ô¼^T†¿d1ŽÚ~$»ßˆ›’ÏuýÚ­1ßqçxÿƒ=òTdDäRÇsAáCìÛ»n·ÇŽÉcÛp×mWÀ”Ka*e ¢ÑÝïGDãàš6ƒRœ·úNýs¤ØBH¸Œ@µR0­T«ÕΞkjLÍKòX\1tÔå¢wÓÒÆ#OÄÿ&çV­^Mx`ÆwÕUU¯×Û1f¿ÐþÿÙ³g!Y,XñõgxáÉëà´`†Ìð‚êM`¦ Þ£t.ŽkA¹¨  p°}èL>‰»Œ*`†ÌðÍï›L÷€ê^Ðæ1‰­áH&SË:ýý•®õÎ×ô’©@Ë+??Ÿ›>uò˜ŠòŠWdYé×^1–2†;%óîÀÀ>)0Í–z0 P€çôB(Ò•PSg  LG7öì’ ÄÞ FMÐæçÃﶺöYD 5‚Qÿ½*%¹>áʯö] ?[<èÙ³'ý~K¿úòˆ îس.·&¥ÉG@HðX#!À ~N¼üçè›êÙà‰1üP PPC55ðþ½€ÑÆGÁŠbØX`ƃigƒ†²ùÝ Ð!aÑìYøž1C­†ð[y¥òîºzÏ3illÇJý$jjj’LÓìÊAMux’|ç(Oí ΙÚTˆAÿ¬ôÍŠl^eÖÜÎ}|ȗ뾳КN€R ræb˜Öžˆa›‘Éže"˜m(97k!xh Jf²  ¦ ŵ¦î¢ob¤×¢“ ÚQQ« !+A¨³X,…±±±´Ã p¹\UU_ñz½·tÃ0@Íœ4§¸áò&\/:À¸X˜†Tõ´šRjïMÝÝW~ŽÒŒ6ïó0F Pÿ01” `ô<ö„Ç öSÓ„®Tƒþ ¸È ½ Ó{7ïUÌEÑ'IÒîêêêG’““ ;€aÝ5M›áóùìçb2é+c¦Z F] °€QrNðЇšÁfš:L]¥Afª† ¥~˜8 Þð!)Û‘ª‚*§Á˜Œ Áq‚ã„g0M ª+ ¦:` Ãv5À ç š¦EØl¶›A˜àÅ`±XŽQJ'r÷¨aCu]2 µìQH¦6¡23Ó¥<(åaR”r T3 Pãfp"ÀR ÆÝ‹š ‘ça³_jŽ"‰-Ï\3ÀLÌäAYË1) Ç3Íf¯,œzäµ0œãÁslj¢(RžçH’´N„7/Ú444ð@ Þ4Íh# ÓL5ð¬~3DjhÄd«ÉD‹I9˜ŒXÒ`:3@L ”8@ùX0biW0ð!  “BÀ`…Bx0"€`€'„!á,'Å›ÇBöò<ïåy~'c,O’¤Æøøxù’½ÀéQ›i}LÓÌbŒÁ4L˜Ô@b8ޤ0Æâ °NŒ1 ¥T¼@ˆ­ à7Vë9ïÒNÇô”þ˜¦Š[ÔjLót½Á»ŠyêrJ2ê=¸Ÿ¹5ßóz© `ä/b q½6íI)õg¶KéüÉü38±eÜoÉIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/layout_linear.png0000644000175000017500000000060511273045225025767 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<IDATH‰íÓÏ.AÇñOùl,q q#Üœ< «'pò¸{„½s.±ì˜vÐ#=“lHdd:©ÔtUO}ë×5)%³\s3­þ@Dìÿ°PZÄ|³-üADÜvb¥OÙêÂW)¥ºÀ ®pÙib€5ìâ |÷lUñÜV€ ±ž;iºäø0ÇÆE®¼aRÔjÔµfPçC¯ù…mœa/ǻօMýKcܧ”®!"npŽÓœßÄ(¥t7­Øw€elEÄN!ñ8Â!F±šsÍ™FÙ¤°ç”RÕ<ø¼š%íÀqnàEûî_ö5`ˆÿÿ'÷€ÐzÀ>­ÃUíC¿Ç7IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/layout_multitrack.png0000644000175000017500000000124411273045225026674 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<!IDATH‰­ÕMˆQðß33b2Ñ !wAD6ÈB Íb666ÊB‰µ,XʆBJ!eeÁN,HùÈÂR)’¥dŠ|‹÷ÜÛ¹ï}ï0“îy>Þóœç9Ïÿ¹RJþua×lüSJ†4 "ưÏj¦VD¼ÍûÅø\ØJùsJ©Ú×nx˰·2˜,ö»k¶Ý3fû0‰;˜‡…Ñ*n¸Û"âU–—×ì¥ÜÉ` mM)ÝÆ£¦’eψ|z0ÐGÿ¿ð­XÇp‹p+³¾… )|¶ª?ò;|Ï~è~Ä6¾á#fû{|Âý¿ òu!"Æ1…5S½sú¡¹‹þ“³ñŸ‰-UÍ/ÕLE§¬ÃëÂVÊ Ê6=Œ%ø‚ÇØø—2ŒÕÔe]%ÂÖü{EÑpWçL´”Ò‹ˆ8…[š‰¶ÓY7ª›Xu¹—hqÏõ'Û5œÃZÜÅæ¬ßƒ{ªëÁP>þNtÚ4·ævÕý8áÆ¬KR¡ó<øŸø‹¿Ú Re1IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/layout_page.png0000644000175000017500000000113711273045225025432 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ÜIDATH‰íÔ;k•Aàg4ɉ¹já $F1-ô7XÚû,k[;AÄBìEÑV,””±PÐ*¶F ¢±ÈE“µØý<ß¹%B i–¹ì¾»óîL¤”ì¦ìÛÕÓÿ "Ní ¯vP?öWfmˆÏm¾úÚÍ·šRZkÀ=ÌãEÛ%†0†),ã[ñ_Ä›?‰wí0ŠqŢ0ZVË:RbUÞ |ªÅÐÊÁ&~b ë8ŽÇ˜.þ ü*ëF9t³h*/ìú Vñ%¥´ñOð Äc!¥´ShT¹%¦¶÷`7€A‰ˆIM²žânâ"bw1¯ªó1gŠ=Þ àk)MC+p«\`¥ø®ËåÝÞüÀ\Éßüó²ÑÉq‹)¥ùŽØžŠˆ8·€z'Ÿ–ë¼®•ƒK±"™tò£Í7·)¥ïÙ“’R¦û¸RÙ5ÿå²ÎàX{¼KþCœ¯ì^ß´’ŽßF#bp›ª c 2zq˜Äsœ•¿b¥}Eûk:P´¡90±E'ãCDÜÀ3¹®³x”RZÚêú±,óØ0¤Ùi òŒ¹&wòˈ.±^$·”¨ðKò°k—Ûš¿h;y-O…ü¢=o´ÿ¿ǵ¼Jl¡!IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/layout_score.png0000644000175000017500000000174211273045225025633 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<_IDATH‰µ–mh›e†¯“~¥MÛ,¥µ]ýX˜aÝ,Ó QŠ´*hiÆ*²® ÎJ7´E˜îÇ@²ý†(²Ñ*LìÂG¥›‘:ØêTj«¨³3nj`mMצInäMÉbÒ1°‡sÞ›s?çÜϯIb-͵¦Ýo†À̼f¶cÍ n– ÀÌj€cÀ 0–Õ4+€ÛÌìn§æ|À¥,\5`’Nàˆ\h—D.Ö¹x,n3°-:ÌÅNô›Ù=(#V·›Y£S«î0³MY8?Pœ]Y°äÄIIßgîÐÌÊ€ƒ@ —ôƒSŸ $gáÝ€;çš`3×Û‹À ¼™ñ½>þ.§oÞ ¾Í:ÑA§Ù,pHÒ‚™U:y2ïÔ]þ¯È¤nBÚ]ŽdøKÀeààiRû.öW€Ÿæl‘‹œx«3âjæ'%x˜îtê€J`¸¶2•$̬øH:ÐÔÔäoÛñLOÓ=èv{¼‹±þ8÷õ—¿±¿ï¨™ù«’f³Ö¹ø[Ò\6AÐIê‘Ítww÷>Ûýzû•ÅZ÷Ì|ŸÇðyŒÚ ñ×¥ñHðÀ+ÁPèôéÌÞY1!il… m---[À»ÍO=¿ýøWËxK _™Q^´Ä->7¾²Ñâü\üãÁ`0¸ORlÕ…¦Åèèèè …B—“I)8¼ ¾¡˜‚Ã1Ý÷p›jÖoÐÎçzuþ·¸.FúýjBÑù„ÏGò½þôዺºº> ‡ÃK’‰&´çƒyõ Å´ûÀ ™¹Èë«Öç"ºIhz.©_# IÒÄÄÄLkkëËù\’–£Ñè™ÑÑÑ0@Y±QâÜ©ú÷Rê© ª¦ŽòÊu,ÅÁ ¦§§ãýýýÃ###ÇòmhEƒÆÆF[[Û;½½½­ŸN”º¾ '©ò“£'™û‚'Ûw±íþ­TyŒ©9Q8ûÓôÛGÞ:<00px5 ® ³³³/°«g_¸`Kݵ­ëó¤_Nˆ gOýúäý½CCCŸ­*p.€†††êÝ/¼z¤vÓ£—”Wy‹KÜ.‹Çâ³Ñ©©oΜ<þÞ¡½¯IJܨ9@^õ3nÁú­Û›Ÿ*n„Íå9'ø?mÍÿ*þ¬õ¦þtt'IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/logo.png0000644000175000017500000006737011273045225024074 0ustar julianjulian‰PNG  IHDR››uaéŒbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIME× 2ªÍª) IDATxÚìwtåù¶¯)ÛwÕWÅ*–dY’»qÜp£L7˜H#JBh¿@hI ”¡—CÀllãÞ-«X.j.êÒJ[§~¬v-÷ N>Þsöi5;;š÷ž§ÜOLÓäÿ×U]]ÞÖÖ¦µ¶¶Z÷îÝ[ØÞÞžÞÖÚš G ‚p‘€€ ëeY&--”””ÅÙÙÙ³½^¯#%%¥Íëõ*©©©|»Ži ÿ¿€­¾¾^Ú³gwæšU«ž©¨¨Ü¶{Ï©¹iÏ.LNõ$$’“›397'×›”ˆÇíÁãvƒ ‡ðtvt´ìÙ½‹ÆÆFLÃôZ,–ÕÉié0räÈß”””,ÉÏÏ÷ «ÿÁæóuÊ«W®<í‹/%~¹tÉËÕÛ¶¡©ª·°°ßê#F ?e¸wÐà!äååáöx°ÛìXlV$QF…ýÎ¥išªŽDìÞ½‹Š-[Ø´q#k×®¥±©±ÅãöÔŒ5jÓÄ3&Í=æÔªâ’’ªo!ö?¶––fë¼O>q|ðÁ?'­^±êÍŽÎv—×ëåÔÓÆ2í¬39r4}údãv¹Ð ÝÐÑ5 Ý00tÃ00M“ÜA@ÅèK’eI’$‘p8Lcc#›7mâóÏæ³dÉ÷°pÃä)SžwÞùÿ7uÚ™¡o¡ö?¶·ßž3âW_~dÍêÕ#¿×›žÁä)S™1ㆠ†'!]×QUS1M“Ø=„}ÒL@8äùMö+²,c³Úe™P(Dee%s?þùó>¡¾¡ž”¤äÕgM?oÁw®¹ö… gœQû-ØþVeEEß§ŸzjÒ‡}ðJ—χÝagâÄ3¸bÖ•œrÊHd‹% 0UÅ0Œ¢¾!‡ÙᎽ- "’,cµZ¨ªªä9oñé§óèèè ;;§jæÌËoùÞõ×VÔ¿Xÿlÿ¥kÞ¼¹ÿÈoû•——ý+ ѯ_?f]} Ó¦NÃãI  ¢i˜ûÐ!IÂ1áëÇ›˜fTâI¢ˆÓéBQ–-û’×_{…M7a·[:dØõ·ßñ«÷§Ÿw~Ç·`û/[¯¿úÊ̇~ð™Öæf¯¦ëŒŸx×]wEEÅ„Ã!"%.ó q?5y4°EU®Ðs´yб¦abµYq:ìÙ³‡7^¹„aè¤gd>pÝ÷¿¿ìW¿º{þ·`ûoÚk¯ yð7÷}ÞÒÒê•e™ógÌàò+®$)9™€ß¡û! ·MvÔó5kš&‚ àr¹‰D"|ðþ?™óÖlü~?N§“k®¹öÏwßû$§¤ìýl'ñú×ï÷¹óŽ_nljÜëµ9\zéeœ;ý<$I"‰p¨ÿë`Pì'‹Ž Þïõ:ÿAÇöúÝ4M0Áf³!É‹¿XÄo¼N{k N§“‹/¹lÒ>¼"5-Mùl'áZ¿n]Ú ?üÁ£;vn¿Îj±pù¬+™:íLTMEU”6_8"fŽÅ 8òáÇ.eYÆáp°jÕJ^~ñ|>‡ƒ /¼èÔß>úØÆ¤¤då[°D«³³ÃyÓOn¸áÓOç=n˜&çŸ>çœ{º®£© èÍy‹ÃcãBT8vwµ÷i$IÂnw°dÉbæÌþ;‘H»ÝÆõßÿÑOzä·ý_›üßvÁ/½ø·é Ì\Ó4ÆŸÀ¸ñ (вÿV Â~ªîPàzÿ`3Â.¬y$‘'ì÷u^F8fĈ´·µ1÷ãPU•W^zñ¾ù}ø£Þÿl'ÁZ·nMÿ—_xq@$¡ÿb&Lœˆª*„#„CqdB8FNíxù·£|Öìu‡L¬V+cN=={v³vÍj$Qò>óç§g iÜ‹8öcNEQÈÍÍ£o~_¶UW#I’÷õW_ztò”)׌5jÛ·`û¯²²ÍcæÍ›{¦$I"IÝÝÝÇäT—ä9@ê «½¥gLÀ Ùq8èXÀj³Ò¯° hªJsKó˜ž{vÆÈQ/>ñ-ØþÃkÞ's ÷îÝ[êõ’š–†?àG×õcÄÏNÃáùƒØáènÁ>+L8ªÞ´ý(ÉÌ̤®¶Y–™÷é¼+þõþûË/¸è¢•ß‚í?´ÚÚZÓ~öy¢(ŠÞ ¯L“€ßµÕŽÓ41Œžü4ÃÀè  ¢ç¼DQ<¬ô;ømá8M½c?¯Åj%33“½{ö ë:‘pxÌœ·þžpÁE}+ÙþctÇÚ5CÊÊÊžq8¸Ün‚Áž ŽCñf=¿ëšFDQ0 »ÃËåÂf³‘àA%|¾.Âá0ápˆp(š×h±Z‘e9ÒCí@B.öæ1û±‡;^UTv'‡ŽŽLIbùŠåŸÎ›7wÔ9çL_÷-ØþkÉ’ÅéJ$$¥¦yÀÏáP“p(„išdçä2tØ0 @NnÉIÉX¬VLÓDQ:::ص«Û«ÙR¶…††t]Ãnw IÒA^î‘ù[ᨒC¿Ï&‚(I¸Ý:;;1 ƒp(Ä?Þ~û“sΙžþ-ØþÍkïž=™«W®ºD”$¬V ápÝÐâÄA@Ó4‚Á}údsÞ2iÒdòóó±Ûíû’%{¤@^^C† !žBC}=«W­äÓOçQ[³»ÝÕbÓä¨Äp NÈ!ÈeÁ<ø3’,a³Z÷û_,ô.ûréÀqã'T| ¶ã*//¿«¦fÇå¢Íÿ…B¦qÐTEEQ"Lš4™üè† €a躎 û¥~›¦‰,Ë躎Óá ¤¤$ ¾¡CùÇÛsX¸ðs‚€Ýfã(4^”11 ÃÄ0uL#Š,AŒ&Q ¢ˆ(ˆ½4ð¡mM¡ç3ˆ‹%ž¹âïðÁûï]ú-ØþÍkýúu~wI–¢’+Œó& EAU®ùÎwùù­·‘œœZop(ÙLÓŒ±8BFz&É©)Ì~ó BÁ v»ýl9Š¢ ( ¦iâp8q:Ø6 Ã$Q"QÀjµb±X–tÂþ€31E©—š5Y´hÑÕÕÕÏ7Ÿ¬{¥t5_l(Á.A’‘l®•²39ð_¶5«WEír!ÿŒ¯‚-¯ …Ã\wý÷ùÕ]÷àpØ£ù^ÕP‡‹0ø~Ì3Mó¦qÍ5ßE× ^yé"áV›u?Iª(*¡P»ÝÁÀƒ~Ê)ôë_DjJIÉIhªJ{{;--­l«ÞÊÆ¨­«Eõuâ°;‘eiŸÄQ±Ùl¤¤$sÕÕײqý6oÞ„Ëå"ð“’šÊO~ú3¾wÝudffŽÛÞ߯®ë8JJK),,dÌ©§òêË/ñî?æÐÙÑÓé<¤rð!PV¶¹ï’%_¤Mœ8©õ?¹_ã]š¿¥»õZÙPJuCÅ“”†díƒfŠ„USÓPÁ0@ k® 'š¯þ:t¹»àT÷I ¶ò-[Šzl¿'LUÑuk®ý.C† C×CòY¦iîºb@E1ÎÁõ>·$IX­VŠŠŠ¸ø’˨ÞZEGG¹¹¹<òÛßsÙW â~e1 ÷Jì{ Ã@EJJJùÕw‘ŸŸÏÓ|’®®®(àŽ’ aš&¾ŽŽÒ¥K;'Nœôo¿÷áö]Ïkþ–aj mŒ¨kX=‹ˆ¢ˆ„кÑ#A -‚©«`ꈀ$‰È²„l± ‰Vœ'­{«\î‚SONÉÖÖÖzʦëo;‰ )))åâK.íÙLý̾ßð˜w…Ín§µµ•Ý»w#K Àát¢j6› MÓ˜pÆDÞžSH]]=þ$_r)š¦VÂ8θmeŠ¢ô½gš& ‰‰\ýï¢ë:ÿáQ"‘V› Ž8XºtécßËÌÌüZ+ìÕ@§G ´]fÛ_Òhá Ž„’’Ó0L‘ˆ¡«³%Ô…ö£«A0 LÝ@Àa•‘-Q(EÂ:’ÍM@ÕZD«„*¥ÔX33O^›­µ¥µm÷žCEí"ÉS¦Ò¯_Ž5E*f·ÅT¨Õje[u5¯¿þ* ,@3tÎ=g:7Ý|3y}ód ›ÍFff“¦L%%%%4Ó4q:øý~ü~?¢ ˜”„ÝnG8b¶bL2õVßv»Ëg]I}C=¯¿ú ²$!Éòÿع½zò¦Í 33Ï-ÿÊÞcwë,¥«ùV5Ð:FT-®Ä$oÍDSBt47¢:Ð#ݘš‚ijˆ DKív6‹Œbˆ-ªÍS#»½5.‹3esRbÆ#ÿÞhEEyrsSÓ!o¾¦ixÜ Œ3Y–Ž9 ßt‡ƒM›6òë{ïfÕÊ•=Æ?<ûì_èêîâž{MzF:‡I’¸à‚‹8h ¦i"I¡P?ü÷Þ{—š;‘d‰Aƒ‡pé¥39j4ªª ‘$ ‹Å^ t’$‘œœÌw¾ó]6®[GYÙf\n÷QUiww€•ËV\yöYçÞ{BëØ¥t·ü@õ·]e•ŒR5¬˜’‰É^™P$‚ÖÞŠÚÝŠìÀPBû²ŒA´Äï¡Ûi#¢©ýW»RóH²í^C "H2¢ÅŠ¡kˆ’|òƒm[uõóš¦ÖSë“Õ‡ââ’:·Õj£££ƒ¿<ó'–/[NB‚‹%z#‘0ï¾û¥ò½ï] ˆÈ²Œ7=·Ûƒ tuuñ»Gâå—^¤£c_QûÊå+Xðé§Üzû/˜yùå`š„B!ÂápO‘‹‹Å²ßÔ¯¨ˆé3. jk%š¦"Ë–£]¾wéâÅEMM¶ŒŒÌÈ1øíõ?øšîW»ÛLÅkµ»HLL@lH‘zHE 4£t5¡‡:1u! °Þ^1 —ƒÖOÿ1oŠÿ6¥i+j ÓÐÐ Ip$¤#&çáH/B¥“lÕÕ[ ÷7Ý0HHJ$;'çÁfaÃúõ|±p!.—s?Øl6"]ݼûîÛLš<…ÒÒdYFUÕ8hþöüs<óç§1 ƒ„„„¸TÔuúú:yøRRS8óÌsÐt=Zõ¥iD"<6›-Õ°X,L˜xï¿÷.Û¶n=°±mûÖ+ÊË·üøh`‹4onÙy¡F2lN·×æÅ­hºIP704Ðу>ß^Ô`;¦¦E3bDé `ÌSOJp‘Ü-žü±ï‡wm¼­õÑMé¡>èª]hÙ7 ÑbE<Ù€¶«¡ÁQYYÑv}‚E¶àt:ûÜ¢(¢i:55;QUù;É4Án·³}Û6V­\ïÝÆŽíÛ™ýæë¨ªŠËåÞÏE‘ÄÄDZš[xgÎü~?‹%þy]×ñù|„B¡ýx¿hŒv(“Wª(*_.YòÀQ%ZëŽÕ‰ÞÔ›ý®0©T‘`HAQÔ¨/¢Eˆ´Õl¬DénÃ@äêâ`þO–%ÝB‚w¿‰ÏÛÔŽ¹Ò ËIT‰°ª£(*ªf1,¬i¸2ú#v×ܵáä”l»vír575µÙX>†ùÀjÆa³8$I"²zÕJ®˜u%6›-ÎÕíØ¹ƒÆ¦&,Û$§•mÕ[ÙÕPGqIiœE]×éêê")) «ÕŠ Øl6ú—`±X1 #.)´6¬_wVgg‡œ””¬ÖÃŒDÐP -JMD-Eô p{=ª¿AA<2 ,²„ËiC³¥­öôi¨±jWw$x<Ô'%õQ^¾e|0è ]×Q”ÈqŸÛ0 d»Ln^.‚ D?@º‰b4h¾sçÚÛÛéÛ·oOÔB$`èúA])”ž‘HŸÏwP6ˆ(F¹¹@ €,ËñˆENN’tlÎŽišl)/O­®®öŽsê!]ö`cÕ*S‹ š¦Ëý‹J,Õ×L¸­C FAv„ŒÓ4±Ù,Ø­ WÎ%Ø5+´á_ÇJ}ÐC}pÒRÛª«o0 Ó{¤Íìîêbïî=xÓ¼ÇÏ)©*#Gæô±cùä“OIIID¥85³¿:Ú;ˆ„Ãñè…,I¤¤¤`±ÈÆaϯë:n·‡Ì¬>Š”!ZÆçp`·ÛãëñÔhù»»½kV¯RÆŒ9õ ¿uîÙñ’ÐZ5&1#°.€iD%({ ·Õbê‚d9*¨v’(`$ä·øwWÌ:õjó »½ôPxìnD‹5îÁ'ŸÍ¶£fGò‘þ.Ë2---lÛV}bá—H„to7Ý| C†¦³ÓG°§¢> ãóù%‰©Ó¦Ñ·o_º»»°ô<µƒ fÀ Á„CáCÚW†a ©*§ž~YYY‡­þ2 #®^£”Çk¬^±|ňßܸzUågïξÎP tÑÞsbh­=@¥£Íé°"K2–Œ/wïÚ’Ž–¨ó JxÜN A‚Ôþ¸J§’<è’Š'âÊ€51ÉæÚh'ØÊÊ6gìܾmÌ‘Ž‘$‰ÎÎNÖ­]»_HèØM6“`0À¨ÑcxôOpùå³ÈÈÌÄíöàñ$1`Ðpn½ã>~|Ó–$:»ÁéÉ =#ƒŸýürróñuu£ª†¡Ç£>Ÿ‘£Gqíµ×aí‰@ŽëS%Ñ0 4MíIn9fù6¦²²"gó¦MqãñÓwß17~þa)ºÎ¿>^LKýv¬6 ‚$¡u·DfD&ô&¹qrËŽa ˆƒ^î¬Ýp½ Jqi&  .š`ÇÓ"ž~cq¤ä"Ù\G½è“JîªoHòutr¤ç\’¢¶Î¢…ŸS[[C~~Á Ùnáp˜SNAáCýÙ¾³¦¦,’Inv ¹}d$mþÝ+°†ºp[’Qš˜R"çNÆcO<ÁÓO?Kyy9J$€i(ØlV¦Ÿw>·ÿòW”@ 8"àõ^´Hcc#Úœ–C­¦Æ½¶ 7 /)ÈéþäíÙ/w·î%ÁacKy5&&;·ïÀ”ŒÅá&ÒÖ€¡+ˆ’«,E%uÏ—‰1ÏØ¤'©TBÑÀž7ìSß¶å׆úÀ“?[rŸãºï'ØÊË·äÁ£ª§ÓÉ–-›ùø£¸ñ¦Ÿ!Š"‡ ÚÆÇ@× ü!›+áƒ5äþÍØ”•ÈÚ´îL­'QÓPšº†a@Drp^q_ÝWÄꪡԶ¸‘¬©”÷eô¨a¤¦¦á÷ûx=±hBLVVV * v»ý˜®_ÓuÂå¹ï¾ãM5¶f¸½›uÖ­ÝL~aN·‹ù ׃(2jXšD¶Xq;íD4ÝžŠhOhL£FQ5è: `ZPœùCµW|~ÎÔ‡Çi'$xHè7KÂñ—EœT`«¨(¿£0&‹…P(Ä«¯¼Ä¹çN§°_¿Ãª¬C'‚C´#©µØópj«°I>DK¦³Ù“b˜¦)"*¦Ú‰ÞK$\KŽ­œìÁ4ÛpäÌ«°fžIÄpèjÃ8F¯Ò0 êÙ²y3`“Uu “A}s½§—æcjº·ªº] Q\ZT–o#!1‰­Û÷"醖ä"ºœÐâÈ.~^ówÜÛ›úà.ìûüpÔž~㱸’OhO°ÕÖÖ”ÖÕÔž}¬v—ÛífËæÍ<ñøcüቧ°Û£É“Gý¬è#„;4wày¬ÊLk.†<]LÀ¤d ¦¡€i"ÈGÖÄÓ00ÔN´ÎõhM ¬»&!ç߆41걩Á£Ì‚(ñåÒ%ìܱY¶Yõ›&ª¦á¶Ú8oüÎ4–°ëוãñ8˜|Æ0vÔìeí† (-$¨*¬\W…E€75€-­`Nö€‰7wíXÕ|‚ÔîÂÓ‘íîÞã“luµµb}CÝqEN'o¼þÙÙ¹ÜuÏ=8Ž#ØJ¦€¬Vãî|GèADŒÈnŒ`&ºéˆJ5[D×0ÇÀÔ1Õˆ v$KRæEX½g!7~‚Ç«Ö]‰%ÿF,y?E= ø{ýv»ÚÚ>þèCE9b ^Q£Aò½©œ=n Ó&ŽÄ.¬Z·•ôŒ4’’Y¸¸Œüœ$N;ueU 4·´1zÄ@vµv½¼¢Vë’!¹ó}Û–Ÿ(õ»ð4d›ó+íñI¶êêê¬îîîcn"dšQuªi=ú[0 n¹ý¸\.‚Áà©€‰„%ü±Š] É ©‚ ¦N…Œ wc(ÝÝh+R¦ yFƒhŒB3†† »på^‹5e¾ÊÇTÿÝ_ƒ\p;‚5SW!-ìhºÎ¯½Â¦°;‡ýêJªÇÅð¢&ŒA¿‚6mÞŽÝãǦfWeeÕ¤¦¥€ÕIÐ߉,š TL{wèîÒQgl={ÂÀùqêÃ8vêCeäôy£,Ö¯¼ÇÒý÷ßR€íÅžûseEeÿãýœ¥g˜Æ²/—ÒÔ¸—þ%%dffƨë:&LSÃå{ {à#èókHœ] 1õ¦ cš"&"˜"fÛnš*F¨µk¦Bt"HIQÀ R”•7 LSCvöÁ‘y.†ÚLpûL¤Ôi˜¦ÑóŠÆP­V+v»ƒþãþöܳèºÔ±9lhºA¢ÝÎ%“Oã§×œ$[Y³¦ ‡ÃNVví­í¨‘ )éé(ºÁš x½iŒ^ôéΖîÉcϹ¨füð¼¥Zw ¡–ÇE}èX²†àʉ$[¿–=>)ÀÖØ¸wÊ‹/þíçÍMÍ®ù|¬Ò}ÍšU,ÿr™™™¤¤¦bw8D¦µ?};Bà#H¾\§cv/ÆÔB˜‚„IO¬ ¦u DL#‚Ö½CiFv—"XR0 £‡Mï)», Z7ÍG5L¬ù7#Øs0 5NÇ gÞýÇÛ<ùøctuuÒ¨*š®Ó?+“™gNb̈¡ø|]tw¶áp%žåeku í¾C‡¡*!6–ïdà€þ-­Ýω®Ôg/¾öõYRËI’6nGWCˆ’ŒU–°Û¬X,‹„ÍjÁn³`³X°Zd\º!bÍ'oÄA9i_eÍÌŸÿÐO~üý{üþÀ‰ÿ#=1Ó@ €Íncðà¡Lž2…#GQPOJŠÑ’Š Táiù!nÇÈy3ÔˆV{+¦âÇ-ºM•1¢õ†Ñã9ê:†rÒì7#X³ S”äD,ø*G÷žÅX=‹”r¦Ú( ˆ¢„$KìjhàµW_fö›otãtºR_¡ˆBnz § êϰ(ÈÏ¡²bÝÝA¦N†Qù|éf23¼x’¨Þ¶ƒAÅ}HNMcÅÆšó‹Oý™Å·;RQQÍYÓF1jXí»d)N}ŽTD{‚i )zQˆ¢€3{άү}Ÿ¿°íܹ#mûömÎ=»v'¶¶¶\±ø‹E÷¬Y³æk;¿ªôôÙ %%•4¯ÇCJJ:n´î-Ü:³Œ3Ïî Þ?£ÑvÞ‚©09 °8Ø¢c‚  Ý@WM¬gã,ø9‚`Ñ¢u÷ó¨­Ë‘‹ÿˆä=S ¡ªE¥qï–-ÿ’wæ¼ÅšÕ«ãÉ”û-J°¦'z8oühf]0‘ú½,_¹…ÔÔDúädÓ´·™”™Ää$vìî`ÛöZrs²HKMÀjÑÿQ0bÒk×®hßV]‹'1‘ä öQ–,Å83Š-ö8À…ž,S×0u é+:ß8Ø:;;S–-]zû§óç\¿~íˆ;¶·™†Y+jùw\†aÑ9¡šÖSKuBŠ…OÞÚÉ´³ú‚÷Oè¡f”í·b*ݘ¢¼ŸT‹ƒÍCÓ1L gþØs®A@Eßõå«g³×q ©EWc(tuu²«¡-[6³~Ýz¶n­"Å×ìÏüEI挤¦ŒÆé£‡á°ˆ  é2‚l£²r;‚ Q:  *wìÁáIBÓu>œ¿”ñ“'œ?27ñãÞÔǺ UL8uc‡çaK+ {èD,ΤoLƒýGÀö¼Òã IDATÁûï¿5ûïo¬\¾lŒ¢Dâóž¾I Þéè—mðämœ5-²žAó7¢lû†æ‹K¸ý$›I¥+¢3Ÿ„÷c ¯aíÂg¹÷E+›ê2IO±b>Š!cšQ{-Ö’ë°Þµ$‘™žŠÛîÀPu.8s ÅùÙlÜTƒ7= —ÛÉÚUde$2éôÁÌ_º‰7?øœ¶@£Æœ:èµ×Þ¨Z6ç/FŒú<°?­¾.r‹J¹ôÚàIHøFÍ¥+ØvîÜ™õÌÓO}ñþûï%ƒAoì¦~Ó+Ö)¼³[ _¶Î“?÷qÖ´lèóWÔ@ʶ[1Ôn AÞl†Ù#Ý ’HÍÏæõ+¹ëÏ>¾,wc“#˜¦D«¨¢‰„–#¶8ˆêˆ(øADÜ.É.'¹Ù 8€îŽ.òrûàò¸¨©­cí– ¶ìÜ…ÓaÃnwüö©§ÿtŸ¿r‰Z·§‹Ô´4Ú»Cô?åt.˜yÙ~µ±ÿs`[¼xQÆC÷ÿæg[ÊËî9Y@§zjQ¤Ë…ÙÞèã¼)9û J¸…ðÖŸc¨¨—zØLÜ5{­Üþ'Å›,x\ K½úåö¤kòP4^«£ªEýû“–æÅ×ÕŮݻñuúüôIOcôðÁ45µQUÓ€fjX-rÜ‚Àå³®8(ÕR9¨+ªö2fÊùL˜4餹ïÿ°½ýÖìá?ø›---'Yë{UU£´…m- ÝÉÿ©Ê…g¦!¿€n'Xq ºÚ¢Ôc¿EÕ¨„Aínxðu‰O×'àqÈÒÑÍÝ01LË!R¿5-Zµÿãnä;×^Krr þ@€æ¦&Ê·la媕lܸžê­[ CØ6vÇ~-%òûæßòÒko<¿aáÇ¡i—Ì"=+示÷_;ØÞúû›WÜÿ}S}?<Ùf,D"¼^/S¦N£µµ•%K£©* œ6á<ΛVÂŒïc׫‘JþŠ©t(¿ ]õaІa"šÎãÿÌâÙ·ДN¬–¨º´Z­‡Í¯S5›EÆ&ËøÃDIÜo}(ÂépðÜ‹/3cƽp8„ßï§®¶–µkW³xÑ"Ö®]C[[[¼U„(Š`š<ôÛßO›yùŸ'|ÃöÙ¿Ô}köß/ùõÿÝ{YW—ï\Ó4]ßèSÔ÷ŠõãÐ4 ·ÇìYWræYÑxÿÚ5«ñû»ÉÉÉåÉ'cê9cI;­s%‘º¿bɼKÚ¨m‹1´¦f"ØsHþ …cnaʤq 4A”ðwwãóùˆ„Ã=öšÔÓÜDÑ46 cŠû1í´‘t…ÃìnnÁ"Éñðœ,ËhšÆªU+Ù¾mÁ`C7â›LCÃívÓ¯_#GaÐàÁ8.Z[Z£mQuI–A®½êêk~ÃI¸¾6°}òÉÜKî½ûÎt_gçõ¦iz¿i E"èÙôôtEᜳÏe„‰„B!Ê6—QQ¾]×±Zí\xñEädç ZS§ ùÖ®{kæeXR§iš`M%aØ_pô¹oj2%%ÅŒŸ0‘ /ºˆ‰Ï OŸl‘0MMMøýþhØKÈHH`ÂLŸ2Ž¢‚<"{ZÛ „Ãû’‰&´¶´°fÍj>[°€Ï?ÿŒ­U•t´·#Ér¼-¤¥¥1hð`J Àj±ÑÖÞFwWMM 4hgQQÿÍÿ“`Û²¥,ýŽ_Þö̞ݻ/ùª@;¶AGŽ"tuu!Š"“§Låö_ü¿?€ÅjeÆŒ D@0IJ/—PWW-BÖt¦ŸwEEEÑóÈ È©g w®'T÷7$w HvÜÅwaϺô ïµZmääæ2ñŒIœ;}:Å%%D•¶æ&òR’™>n gŒ…nÀÆ öÍf@q?¶Tï ;ŒWäÇb½‹UUimmeÃúu,]º˜•+V°«aN—AQ"8hù…¦Áž={ذ~ýâ¬Ì¬Ôâ’’mÿS`koo³Ýñ‹Û.Ù´qÃ_Uuº-•;†ÚÉC­`0ˆ¢¨Œs*wÞ}÷ÜûkUåÍ×_cÚ™g‘••E(¦­µ•e˾¤»”ÙÂe—ͤ°_¿}À•±¤MAë\Ad÷\%`Ϻì¨×àv{6l8¥ý IÒÚ9¥¤ˆÁƒKÙ½·…íյ俒œ@Gs'ù9Y"ö6µ"÷jD#B¼êÊf·c&MMlÚ´‘U+W°cÇv à 99‡B$''S\2€Œ¬,êjkÎùÇœ·®nikë4xÐ6·ÛúŸÛÓO=õÀœ·f?þUUUq:öë‡ßïG×µc+ééÞÝÝEŸ>ÙÜzÛm<ðàÃL<ã º»»øé ?"==ƒñƺºZÖ¬^mþ¬ª¤¥¥råÕW“½¿÷&È,i“°zÏÆæ=§§öòh´ŠÁ’ysùâ½w8¥4—’âyy}ù̓1ëÊ«÷Ëðmkkãwß×ÑyÂTG$!))‰ófÌÀåvÓÜÔÈÞ½ÔÕÕÅS„P0Hbb"<ô0“'OÙOâÄŽ©««å×÷ÞKJJ*ÓÎ:‹ÆÆF>™û1Í--8S“Ù‹Ž6Zﭖ%I¢µ¹™×þøï¿øWò²R(XBYÙ6ÚÚ:9eä :ºÌýl-¥ýsXšÇš H²L~~–,[K{Hஇá;ß¿>>m/ö Ä ª*§Ÿ>–ßýþ1¼Þtü~ÿWV§@|òà¶mÕ´··Ç MC‰D%™@(0æé'ŸšyR­¬¬lÒ’Å‹î<œÅæ ÀÙçœCqÿbZššz‰Uð¬>cì¾išüìæ[¸òª«ãª3 I’ƒüúÞ{¨­ÙÉÅ—\†(JÌŸ7ÚÚÚclÔ"`˜&F¯)1±vò׬æ/ÞGùŠ%Œ1—ÛÃúõå¸=n-eÛ¶:vïi$· »Úéîhe`i_,V™O® à)üþé?2~â„xçÃqº®3ýüÜy÷=X­Ö¸ºû:çï¶UQ0tMÕÐ{&ßX­V.úìž·çÌ^vÒ€mÁüyé{öfžˆMaJ$˜SOeÜø‰tttÐÚÚJUUÍÍ͇´Ób<ÑôógðÓ›~w,bA–eLLžzâ¼ûÎÛœ3}:ùù|±h!›6mŒ7O>–¡³£ÎÎÎ8Ð_~òÿzáiô@;§ŽIsK[Ê«)Ðoz2«ÖlB”DìÏŽ l®n Ù›ŽMTXµ¡’‹¿ó=îûí#äæå‰DâNÑþdñ> ë×výõ?àÚï~p8ÌW¥–zS#­­­´µµFm7]‹KTMÓe‰7_MîèèÈýÆy¶¦¦Fçgó?q¢Y·¡Pˆ‚ÂB.¸ðbt]§¥¥™ÊŠ jvîì©«JKK¹ûÞÿ#)))´¨½ì¿¿ùxôQF9•qãdzní¾\º$n$ëF´··ÓÕµ•v××ñîË/²§jSÏFP“Y½¶Ã01r-­ílÛ^OQQv‡ƒ5kËINM ¸_.ï~¼”Ä´4îzè!&N™ =^àÑ¡<혙áp8øÅwR^¾…/—.“Í_lÑûÞ¥GŒ}@‹ÞWظq㘅 ?»ûÒKgþä•l6l³¹¬ìšµÓÜ._r)i^/-ÍÍlݺ•ŠŠò¸*<ðæ‡Ãal6·Üv;C‡Cë5o*:GT`ÁüO¹ó—wàMOçü3ØÕ°‹ÏÌ' Öó<U†¨¯¯§|ýZþòà}Ô”­£dP)í~ö–F22R8¸?U[khØÕȰáð‡"¬ÛPÍÊÇó—âÍ/æ¶_?ÄS¦¢÷x~‡’bG_8&''‡»ïý5™YYƒ¯Å~E‘@ €ÏçC×÷•8ö~}¾à³À7®F~¶`–ÞK²OÜÓ0 Î9÷<† A[k+[·V±ní"‘È!KÛ Ã  rñ¥—2óò+¢FtÏwÇæ‡.Zø97ßt#†¡1ëÊ«PU¹s?¦µ¥å¸«ˆtÃÀb‘ùì½·yõÉGqɧMSs;«ÖTáÍÌ`È€6nªA`ÀÀþTn­¡©¹!CŠÙ^[Ïç+60cÖÕ<ü‡Ç(PJ8ŽM;*¨÷+Ú ]aòä)üà?BÓ÷Ÿ*x¢«÷,†˜“Òh¦i²¹lCáöÛ ¾15ºk×®œÕ«V ?j¾CÜÄp(ÄicÇqÞ Ùºu+Ë—-Åçó@€‚ÂB~vó-¸\n”žz¬…üì¿¿ÉwüŠ`ÀÏ÷®¿Žä”>xÿ=jvî84)jš=1ý^Ãm{T—ªid¦&S”‘‰ÛP)ìÛä”D6nªBFŽDùÖ=XE…ñcP×ÔÍÊ5e¤§§PéeÑ’•5‰;îû ç_xAüA9œÔ:Öp˜¢(ȲÌõ?ø!K—.fñ‹zÔéW—páp˜P(Ô3€D‹;'¦iÒ¸{¯XWS#õ+úfÀ¶iㆼmÛ·:{M‚¹yy\}Í5¸œN6®_ÏgŸÍ§©©ù°@Ó4 »ÝÎOn¼‘SNÁÔÔÔð×gŸá¹¿>‡Ífåêï\Mvv.óç}ÂÚž,ŽØÛ{ho‰’f˜&“’ÊùãNa`ÿ¾HŽººü¬Zµ™¬¬t²²Ó©Úº“î@A‹0Ln_;ùù9¨šÂ»̧pÀºçn Œ¢(‡ì~"`ƒh"hVV7Þt3e›7޹ ê‘Ti¬Ÿp,Å<æñ#@ »«¡ÞüÆ$Ûš5«‡º!ÐÂá0v‡ƒ«®ùEý‹Y³r%ó>™KC}=ö#„dt]''';·þþf´]¼¢°qÃz¾X´ˆŠ­ÛÈÏÍᢋ/"'7E‹>çËe˰X¬$&&âIðàñxp:ȲŒÇ“€$‰˜¦@(&ØÝE¢`à†ˆ(Š23ÉÏËcÀ€6—爐²–ƒú#É+Wo&5-™ÁƒJØP¶§ÃÊôÉÃùbes­ç‚™3¹áæŸáõz …BñZÔ×!5C8Ì™gÍyçÏàµ×^ýÊ`;Rе¥ˆ~! ˜ÞÖÖVÏ¿ lG-å›~îY«6¬[7æXoš®ë„Ãa®¼ò*¾ÿÃSV¶‰—^ˆæZÅFóêĤOlòq$AœN'V«Ä¤DFŽÉÔig’C{{;;kv`µÚHLHÄãñššBRr 'bŠJ7Ùj£±aï>ûG‚¾ND‹…Òýp84Ô60¸$ Áæ¦bÛ.÷4QÔ¿S€-å;ÈÈH%19‘Šò TAfúÌ«™9k²E&ØÓé²·Wy$øÿql’i’ÀŠ˹öš«hnj:*I}¬€‹M”éýý‚@Ë­·ýbòwÞ]þ—l7¬¿®vgMÁñ<Á@€ñ&rí÷®§®®–W^~‰-[ÊâOeoö<¦òb“-2‰ IdeeQXTDQQ1¹9¹PÔ¿?ééX-V"J„P(Ä“&aw8âÍíLsßðÛXÅ»$ŠÑÂb‹ŒÜ·/ Y9´46’‘˜@gW7U;ÉÈHCr$ÐÝÙ†¿»›ÒÅ´¶uPS¿›AІÂ|ðÑgô)(æ¶»ïäôÓO#‰Äv8OóxÕèþ/ÄÕéèÑc¸ì²™<õäØìöãÎ{;Ô÷ºáµ€(I¶oDnÝZµÃï÷{ÇÎÈ/(äg·ÜŠª*üõÙgX³z56›p8Ü“Ö,#ŠÑb—Ë…Ûã!55¬¬,òúæ3dÈPróòHIM%%%»ÝÕb‰sEš®c1-ûU$Åê4c6Zï©É½¥¦'ËÃE×\Ë‹Mt´6ÑÞᣰ>‹¹ V1rhçNÁ¿>[O·?̨‘C(¯ÜÆÊuåœsÁ…üìöÛè“݇@ pXµùu©Ñ˜zÓ4 ‡ÃÁå—ÏâÃ> ¾¾—Ûýµ·³è¹WÞœìý[}]]ºª*Çt¡±yL·ÜvYY™<ôÀoXºäKRR¢’*1)‰ôô Ò¼^’“HózÉÈÈ #3ƒ>YÙ¤z½Q[Kê™&Ò#õbyl±ŸeIоz®%Ã×9xèP.¸æ»üýOO`—:Û}ì¬ÙEaaAƒUë+Ò¿íAƒ¥Ë×ã iÜ~Ï=\rÅåØìvº»»©¿ª}v¤¿…B!Êù3.à|²GrýÃyçæåmýfÀV_ç: ©jÔ»ùç·0lØ)0ü”ÿÙBssó°ÎŽŽ£¹~7ãÇO䪫®áO=É{ÿúˆéçœÅÏo¹•ÄÄD›öÒåó‘èI °¨ˆ4¯7¢2£À‘e9þê ®Þ*2–÷uà&}E•Á×ÿä>y„ÒSX»¡‚²­uœuáEL˜v&²,³g÷^þþæl¾Ýw¹éÆŸðÞ?ߥ¹© I–ð$$àr¹°Z­û]ÿ ˆ™½9ÀÞê¿÷Ã%÷TÄÛl6N§·ÛÕjÅíö0ã‚ INN>&Nï8¾¿õ/îÿÒ¥—Íô·¶¶ò•l{÷îíóç?=uú_,¼XW/U%%¥üø'?åƒ÷ßcöœw˜~ö™ÜtóÏILHÂçëDU’’’)È/ÄápÄã›±›{ 1 Q éêêŠGzoèW}²“SRp&$R¶~-!_ˆ2WÿøÇ̺ö;Œ3†Ü¾ù„‚|í4µ´³aã&>_0%K¾`{õ6ÚÛÛ‰D"Q'ÆfÛWÅn³a·Û±Z£…,Öž‚šØËf·c³Ùã •e9*-£¢Ã0èôùhjl¤¡¾žºº:**Ê Cô/.fÕÊ•ÔîÜyĤÐc–6ÑÑŸÜ}ï¯3/¹°õÔÓNgÜø ÿ›mÃúõî»ïÞ›W­X~ƒa˜‡ÍžˆDÂddf1cÆ|øÁû¼ûÞœ7ýln¼ñ&¢@SUdÙBŸìl¬v[¼Doÿu0“X±ž±L…X ÙëõÆUÙ×±ÆM™BC]-ÿzùyRSRPRLRb—\r cÇŽeŲe|±h!ee›ih¨c鲕,]¶»E¤o~>}óú’›×—ìœ233IOOJ<›‡ÝQ¯&&¿UUQ5Žöv‚Á íím´·µÓÑÑNGg']]]„‚‚¡jDÁçë$%-ß?ú¦OŸÎŠåË™pz¼Ëf·ÿ䆟ܼ忛¶ ‚p­/ŽlkÖ¬þ¿Ûn½ù¬ªŠŠñº®c·;ikš†ÓéfìØq,[¾”/-eæ¥sÝ~€ÛíÁ×Õœ’‚ÓéŠgxĤYo[¦·zìÍ/µ··“@Ÿ>}Ðu;v iyyy8ޝÅf€ó/›ICM uÛ«¥èœ—ËE(";;›K.›É´³ÎâÿµwÞáuTgþÿœ™Û¤+É’,[²äÞ+¶Á l ¡eC1BïR7m³I6e7Ù”%$›B²›_6» é”Ð L·{“lY¶šmYýö™sÎï)š+ËX²!ûì<Ï<’nÓÜ9ßó–ïÛvÕÕ±yóF6oÚÌž=»9xà ÍMÍ쬫÷?+l:sÒ…0ˆ:µ ž]æ¹èîîv© ¶B)Äž  °0ŠénÎ-[w°ê™gX¹ò*jjFÓÒÒìk‹c9ªkjÞüä§>½ýÓŸüÄVOSŒ®ý΃m÷î]Ÿù‡/|vîÖÍ[æG£Qn¹åvêyú駈Šò€‡©®©fㆷhljäö;nçêk®!ÓÓÝíµRÚþ{.þÍ7Ú=°)¥èíí¥°°If/ãÆ§®®–¶¶6ª««ó¸¶ã9Š‹‹¹óŸ¢»»ËiÁ 5~w.—£´´”E‹sÚÂ…ôv÷ÐÓÓMKs3 {hoo§ãÐç¬ñ~ IDAT!js7;’(—Íõ}W·W›) ÆO˜èªP“òòá˜fˆââbŠKŠýõ†i²cû6^yy5RJg£’Ä–6ÓgÎ`ÖìÙ44ì9戂‚Y³æüåÓŸüÄ‹A;vÌØ±ï<Ø~øÃ.~kíºs´RÜqçÝ|á‹ÿÀÏü)O<þ¸ŸÔç¥À†ASS#e¥¥üýg>ǹç.#—ËÑÛÛë§Ù–…”öaû5X;p¤ŽFI¥R>—Ëf(ˆE¨ªªâÀÄãqÊËËO˜:--+¥´¬¯m»gð{c‰¼SJÉ𠯨`Üøñ,>ã ¤TXngðœwô2oƒßLãU±GÂð+ÚWâXî}+6ŒõëÖ±qÃöïo!—³7~ _|)ååÃY°pO=ù„¿ÇÀýP?êƒiÓ§¿³`[ýÒK£{äá™ÙL†•W_þ‹t:Í™gžÅ²óÎãÙ§Ÿ&“É8âÜ4‰ÅY²äl.»ür&L˜@"‘ “Éø^£’©œß½Ý=Ù_•zRÍQÓ…tvvRWWÇ)§œÂ–5oÐÕÑÁ9—üétš––¢Ñ(EEE'”8̃rU8öË?Z‡|3PöÚ«¯^­l›‹.º˜)“§ÐÓ݃T’l2ËÈŠJ>|÷½ôôô ”$‰" ƒd"A2‘É™”^-¤ó»RŠöövÒé4EE¡<ïi Ó È{ÞjII –e±oï^fÏ™CÕè1¬~ò/Œ™4™‰'RWWÇÁƒý)|ïôÑ?6ú ~'ŒAièoH÷9绚ìomaó¦üõ¯Ïó /ÒÛÓÅ%—\Ê5×^ÃÒs—Q\\ì›)†a0²r$ÓgÌà•—_:FA#„›5mJ[(âÃ÷|”qãÆ¿³`k¨ß³ë¶m”WTpæ™gRär9ç¦Ø’Þta8JlÛ"í¦<«ÀëËøtT‚ôÀæ¶L8xàñx‘SÎ 1ƒQÛ¶óR©½×•——“Íf©Ý¹“Y³gSPÇ0LßKmii!‹1|øðf¿Kl3¨ƒÀòrÇúK¶D"Á¡C‡Øºe36¬gíš7ijl¢´¬” /¼÷¿ÿý,\|:%%%d2Y¿ZÞËG‹ÇãÌœ9ÓÏfº*Æã"‹ñá»ïeåU|ÇïShÛö­Í©d’3f0fì82Ù,–•sŠ"¤T™³ýŒ i;S}ƒ@ ¦{^¨§N³™ ûöí£²j±X Û¶ýx¨'Ý‚uPM !ˆD"TVVÒØØÈîÝ»YpÎ2R‰›×¼Î„©3(--¥µµ•X,öŽÛoýiš °<ûË‘dÊ•âÂå$³¤3iº\t×®:Ö­YËŽÛèé¸˜yóæsó-·²ä̳?~<¡PˆL&C·ëÝm[çÞL›6ƒâ’Ú²*@Qqñ„¯}ãŸ÷}ðêkßvÔÑ ÛÞ½ #PS3šh4J:›v£òì/)UŸ4S é̶ü×úªÔv€©ÜÎ<ì§±±‘É“§øjÀ“\^—˲ŽH R]]Mcc#MMÄ#aöìØN͸ ŒŸ0-[¶ÐÚÚÊØ±cOH6ë‘$WP2õßlÂpæ(·ç\:•¢¹©™ææ&êêv²qã&hntªÿÇ›Àg,áì¥çpÊܹŒ?XÌÑÙl–T*uDºÈ´Í¨Q£¨®®áP[ÛЃþ哼öC׺ìñ¸ÁvðÀÁjpXyÓÀιªPy`R(­|ïÒ3àó~÷$žt³`ÚÊFiE&¦®®–Ê‘#).)ñÕ©ç}+ÅdlQUUEsSãÆŽå’koÀp â ãÇûö[uuõ Ù¥ýí-OzçÇ95mY´µµÑvð {ضu3»êv±gÏn›öƒ²^QÁ¤ÉS¸ôÒKX¸Ðé²YYYE4CJI:¢§§{жc.—cXi)ãÆgãú·ÐZ )íHÁ¨QÕ­Éd’“5 #T2lX³èNÉœ-SIhž´Ry¶™ô3b-K"¥åØiJúÐò“a˜hm¡¶v'óæŸê«§%§•çñBC!ß~kjn¦¤´”xa!¯<ó$¦M§¦¦†æf‡Q?Vû-(¹‚_àyÏ;öV·KênÛº•]»v±sçêëêèìéÅ@/,dÚôœÁ…Ìž5›SæÎcô˜19½|]g(îªÃö•ø³•£Z=ÎÍVn*3ìÞ]Lj‘#™=牄ŸæÑ!o·ž$(..¦ººš¦¦&ö8@Ue%¯=÷ áH˜™ SWWGgg'•••G4~=9sH%ÑJs`ÿ~Öox‹Õ/¼ÀÆM¨¯ßMO"CØL˜0‘+®¸œE‹1}ú &MžLeU%±hÌ­[Í9Ù¼ã~(ÕTA¯óh¯÷ìÆ‘••Äã…~ñÍ`iS§‹¯õ+ÙÿÑONØFªNMœ0žû8Áïx¼Ï£ Ø-Žê:ЂŽr$£FÎõL’W£”fõK/ÑÛ›`ö)sÈår~‹ª£yEA^®´´”L&CsS…TŽVŠÂÂBFå·(,,P=[–E2™ô¬ÔïÞÅs«žå™§ŸaóæM$39J‹ ™6m:‹ŸÁ¢E‹˜1s&5cÆPXPˆišþ{‰„_­4° ¶ÂêèNQR\L$²7:yÊÔu8!9qƒÛßÿÞǧϜõ±Ç{„––FŒéÚk* NeíP£Ê–ù’Îs\GÁ–Êý»Ï“ …B¬[÷ëÖ®á3ŸÿãÇO$›Íú€ìÔaÏ~Ëf³4440kÖ,¬%%%ôôô X®æqzÉdË’twuñç?ÿ‰_ý×/Ù¾£–‚³gÏfÉ™g²dÉYÌ9e.Ã+†»¡Ä¶s~Qò@v×P€u<¯÷6Mqq‰·t¼7fúôõétꤒߡƒ²pÑb~ó?ÿM]íNfÍœåÇ:Ìóí2OŠy*´?èú*л³³“ÖÖìßÏÿð{îúð=ùf¢-⛼Œ‰Q£F±wï^˜0aZk:ä̤êçxx4‹WŠ×ÕÕÅ·¿ùÏüç/EUåHnºñz.¸ð"æÏ?•ªª* Ó$çÇ»»»IR @C±Û”ÒNmì¨! jÔ¨sçγ÷ïo=¹`+6Œ ~£¸dØ?ÔÕÖÒ“èÅp;EæÇ:û«NéÍ·ÙÜ ¥ ðqZköì©'ÑÛKAA«ž}š ã'rÙWøêÔsŽTLüÝ0 âñ8ÕÕÕ´µµÑÚÚŠÖÚÏè Î6ð$Z*•–’ÎŽþù_åчæ†ë?Ä 7Þļyót¦œE*•Ê“G ´/ЮÃí6I8¦¬¬ÜŸmztGK0göìo]°|©uÿ¿ÿ褂Í;v,眽䋧/^D]]-Í(7ûÂQ}Ž‚Ÿ×%û$Z~¯ü¿­¼–LÐÙÙAÓ¾}D£rÙ¿ûíoxkÝ:p{„xa«ÁÜ|/ûwذaTWWûNFUU%%%y¡/Û¶I&“ä,‹Do/ßù×oòòK«ùÞýpÿ÷ÀâÓÏ@kMgg'‰D¯¯&ÛW­¤áX‹rúŒ·û_†0†=ýô%¿.ŒÇ©®®9¹`ó¨å+γ³³mÛ¶äÅülŽ%±mËÌ9-lËÎã×¼×ûa+7¼µwï^zÝþ¹Z;4ÆþÖþç¿ÿ‹Ö–Àiéd±œÓD¦˜‘#G2räÈÀæõñ8´_üÇÏyüñ¿ðÅ/…]¶tl7¯Kä`ù¹wXC~/­ƒi§%„`DEÅ -%e¥ ^qrÁæQç,[þêQÕm×o ·§ÐX¶å“¶ªŸ‡™§>ûÓ!îëm÷ýZkº{ºimiÍõB â…lØðüýïH¥S~l0hÜ)¼ÊOÿŠ­ –J¥ÐÀSO<Áü#.»ü .¿ü º»ºH¨Š#I–Á‚b°ï¬d|»÷ !°r9zº{Ü”¡£nÎ)ópéEd§MNUUÕÉÛ¨QÕLœ0žkV^ù«¥K—í©¯ßM]m†aºRL@dç9 ^^©>;M¼Ö>ÊDÑÚÒBooÏaô†i8íž|âq^^½>¥dÚ‡ºèÐ<;MkØ´qßýö·>¼‚[o»~’cYðã=ûדåµÁ^ ‰Dâ¨ÝÌáß®8Ås.õñŽ%leeeLŸ9‹®®®\yÕV©ëÖ­uºb -»ŸZìg£I{Àþ¬– 4­5ÉD‚–Ö–#†Tb±==Ýüù¿§¹¹¥c~àN;ƒW3RJ¿A`GG;?ûé©«oছnbò”)$“‰Ø,\HqÉ0êjk¹îúÿèM²víZ2Ù ó,=/ÕÉ\@²¹¡ é&OØ¿û(U@†a¢•æùUÏÒÔ´Ïgù¸£I/è­µfãÆüê—¿Ä …¸î†3f ™tfP`ŠtªÊ?~Ö ýÐ!ÒéÌÛÞ[Ç1ñË._ÙëRÔŒ®ywÀ6eÊT<ê£qß¾¯\páû~±}ûVê÷8ªÔeÎû2<úr×¼@{ž u«½•Rt÷ôÐÙÙ9¨Œ„h4Ê®]µ¼þ꫾=’׊ó0„ÜSŸ9Ë¢··—ß=ôêêXrÆb–-;l.‡Rò„ÙSýßw¬Æfâââö]w]Â¥>X°hïÆá_á9Ë–S5ªšë7ÐаçÁ+®XùÑÚ;¨««ÅÂIýÖùiâyiG^º¸´‘ÒB¹Mì:;;†tAáp„Ý»êØºm+Té`Ò£:¤”tuvòðÃâ@[ .ä¼óV`[¹<ÂöDRÇò9Çò>¥áp˜ÎŽöÔ¿m 1!—\réO>ðþKÒ.õÁ”)SÞ]°Mž<™¥K—áQ·Ýy玲áo¾µv ]]]¶«²Ñl)QŠv_fH¢·‡d29¤¬ÙP(Doo‚ÖûÍ÷;eسռ*­7ßxÕ/¾@a4ÌåW\IUu5©Tê°â‘wC2 õÿ÷iš´¶¶ø`xú4Œ¨¨ØqýM7­òЦWœ¿â¤¥l!3Ä•+¯Â£>Ö­]»ñ–Ûn{¶¹©©mË–-ÎŽ’*Ï>ë‹‘:©E¶ìšmÛtuuy:‰—õ±yÓFZZ[ý‰~oWÜßUJÑÕÕÅc>ÂÁön/^Äy+Î÷Á{4oð½È«ŸóîѶ­Ûèèìp¾¼®«®¹ö¶K.|ßV—ú`é¹çònyÛáì¥K9wÙ2<êã–›oûéi íÙºyÓ8\¢Y¶;Öò=T%%Ùl†ÞÞÄ ƒÃù7)³·¡ÚÚàêm=9OªyàÞ´q#¯¼²šâx×^w#GŽzÝõ7lðþ^¾ü<&½CÓ[† 6Ó4¹îúñ¨‡~ó?ÿÙÏݯµfã†õ$Ý¡«ùI•¶Ÿ¿ÌwK§Ò¤Óé!×qz]’‰[6o&›u(Šþ=ûûNkí6³‘$S)ž}æiöì`éÙg±ôœsœõ9TûìD{”Çj·™¡ûö6°aÃú#V’E"‘G?ò‘û~°dñ”K}pÙå+y7Ãý²åçqÁ…ïã>¶nÞü›Ûï¼ëêæ¦&vìØî/ºOâ*WºyªUI”t:FærÙc»(WM쪭¥½½=ÐÈåÈ ãäû;ÅÕ;¶oã¹çž¥8^Èå+¯¢´´Ô/b9ÿݶۂ1áµkÖ°·¡aÀâd!xó—]ö¡û>rï*]Ï[ÁÜyóß[`+((àž{?Š’ ú¸ëÃ÷<¹`ÑÂÚºÚZZš›}JBº¤nâTeY¶E:Êk3TéFÙ³§ž½{öô›ÄJûÛjÁʨçž}††}Í\xÑûXºô\Òn‡¥÷&¯&ÐÁSã— (ÕL“Þž'Ò2@a·‚ÉS¦|û¾* >øÐu× ™ï-°y¤ßW¬Ä£>þãçö~þ¾ô¾¢âb¶oßæNîË ‘ý㥖E&>®&Ë¡Pˆî®.öîÛ›WhÓpÞ‚{j²qß^žzò)†—WòÁ«o ¸¸„œ;÷s¨ìþ‰§? $H ‘¢%âhbþ©Œ8Ê(BEh£MM_wòX,Æ[o­cÃú·ˆö³Õ„Ä ^ýôßîá³ÎXd¨N;mïö1 Â7C&·Ýy'«ž_Å[k×0¢¢‚gŸ~ªá¾}âS_þÇ/|·®v'S¦Nsw/ ïŽTŠL6K6gwûx©•˜ÉdÜ Àêmé­5ýëólÛYËÍ7ÞÌ‚EKHfL¤(ÄÐY´öB_bPa¯¡Hâ#<h¢h­*EH5bÊ& Ù圪Ãí»k R”Q†2ËQ¡¤Y FZDBšD"Écþ™®®Nâñ¢þ×ÑvÛw]t×·Ùêƒëoº‰ÐIèòtL`˜3çn¹í6¾õõ¯³eËæÏŸÏï]}íuwüö7¿ž‰D¨©T:J$})sŒÑ_‚ò«!:ÑQ$*v7È^´@Ë$ÈØ ç§J¢e-{Ñ2Zb„J0â3 ?Ÿ‚Š%Œ®°9}ânfM`D+¹ûÓ÷dåå—¬ †©®¸r%¹ïc„Bá¿° !˜1c&o¾ù:Û·m§¨¨ˆÂxœµk׬¿ëÃwo~é…nïêîvkœC6“r˜êˆN‚”„Lƒ%gͰa¥þ¼xËrÊí„!xåå—ùο~›ë®¹ˆ{î»ÃN¢rI)´Ý‹–)Œp ¡ÒÓ1KOƒt-úÀï0­Ý¨è4T¸¡sx“1†V¶§Q!È0Òú1•Ù¢ > j¾ïc¨^´Ý * 2í€[[ ,´¶ßQîï**2íÒN"Rƒ.> £ š‰e;9gN‚ÉS&­ÿþÏW¿ >ø—o}‡‘#+y/b°ªcõê—¸óö[‘¶ÍœSæ‹93D/½ô§~ã«_y*•I(..&ÓÛÛ{Xnÿ1K¶l–a¥¥üÓW¿ÎYg/õÆxNÉÁƒùè½%“ÜÏÃü7ÆNƒÝ“@ ;Î×ë3ÚE¨euÜýÒ{ÿŒU8•tÍ· ªÇ{àE!&]TYßf¸õ [Žªú,"\ ²´tÿûùw:ߥð1Ÿ²é{TQ0ãä:ßBíû6¹ží„Fßù»¢ÿrË´©³Sß½ÿ|à²Ëy¯G•lÞ1nÜ8LÓä©''—Í2lX)ZÃÖ-›ZïþÈ}/¾þÚËwx±PÛ¥@NÈn@N§¨©ÍüSOõ㟎s`ñÀ÷¿Ï }–ï|óÎX:»»¥s lÐ9´²)¢-´Ê¢í^„Q@¸t.ÒjGzƒPz=vl*2Þ‘& pE!!ÝCü åöŸ d ºê³ˆÐ0°G·ø’+çH.ÿz¼ßsþ©•ûSçÜ÷åú½ÖBÉ4ÚNŠÕ ¢“ЉÍèŽU³r™ÎKeÉòŸÜzûœÌVX'l2‡–ÖVÞxý5К¢¢"l©ØðÖºæ|ôã3_ý•Y©Tú„ ÀÙL)‹N?ݧ@„!øýoË~ðCî¾õî»çRt:´2îâäüÅñ[9 «e/BDNÀNî@wïÄÈnAÆ¢ÃU 2Gs]PDØŒRߥÜú=DG£G~B`rTbP=ã©Kt>°ú?—¿Y<ÐieÊ¢e3:)ŠÈu­ÃL¼QµpÁÜ÷ŒºèAÞƒÇÀ 9Å1k׬¡¶vBNqi±nÝÚ?|ñ¿üìºuoÎI&’',Á]ά÷ƒPVZÆì9s°,‹Çy„ýÖwX|ê¾÷/7RThK9v Ê• Ê‘ÁÓ·‰dŠcar=ë™ a¢ÐåâŽd¥™(âT¨‡©þÝi}PöA(˜ ²Ã‘RÊ:L"i•u§‚’,°Üëë³Ýr¾í¦ûýî€3ëØ£±J²É6TªX_M¤¦:R:ÿ/Ó`óâl³æÌæÕ—_¡±©ÑŶm^Y½ºñþûk[6m)hoo³´æ„€Î£9êëëilÜÇs«VñŸ¿ø/Fð³ûodòÔád{zÜ]ßCö`Ìb¬D-2Û‰™m@…*1‡a@[M ‰SÈF«¯RèÈhİK]u›òÁ”§ÕÀRÊÛB÷T@ªå}”ÎóZf8™ºÉCˆ†²¤Ú·ŒU^°ÊŒVìÿ›@UÕ(ÆŽÇóÏ?GgG;Aêãñ¿<ÖöŸ¿üÕëMMë0ãaIDATMÅ {v-;ajš¤’IgnÀ¦­” +ào\β哰º{2w˜ÚÒ ‚Ê¡RCKlBìì!ìÄP a5c¡rÐö€R $£Ô(æǼ‹…³A¹ž¦êS¡Ž¤í“T¾D€ú°¿½ëÍ·étð{¸ ¬D=ÙT±pWúØã¯Æ ÿ²uë¶¹¹L&‚ ~<&«N¹_"¥¨®Æw¿|>+?0;•ÀÎf3¸uPºN-s¾šÓ2‡T¦\Ï`ä:P‘*dáB— :  ( Î&ªõ¤°Ì‚è‡CÓÙ|ƒ_çòT§¿‚ªÞ{î'½t¿÷%Ÿì§†«w7Vê á°ÀJ¶ÌT,ûy¨ ª÷½¶ãj¨zõÕ×’N¦ùÆW¿BG{;õ!¥dêä R±æ¡ßýáÎúãy/½ðÂÿK¦%†áÐÐfÛš®Þc«‹ùçÏ,áêË'c§º±rv€VèC…ö~êƒàΘõ~j­Êv0Ÿõ<‹5ì2´YꀧO¡0L¿Dˆv „Æñz‘I´L÷ÑšÀÿÖ‡_ ow]}¢ó~‚Vþ?„éþí„ß29ˆ†I6=ú«hÙ¼åÿ+À&„àæ[oÅ0M¾þÕ/ÑÓÓC,CzÃ^óÁ•ßùî÷Ò¿úÅ÷»aó^º C$ìFfÄ‘ØyJ“Î87qÅ™Õ|þîSXzæhìdY˱8Ðâz0„Õo1û^+Ð2‡Ê¶»ï 4ff7FvvÑ™™qQ¨Q„ qˆ"½&|ÚîDØ]Nlå_‡P |ÚDç]£÷ýtðºG—>¬³„û}Ç<°…P2²{€mCaDcw®ù^R£ÇÝ*ZÁM7ß Zóõ¯}™DbàFŸþÔ'·áéó»þÕüâ±om3ÙßaàŒ—¿S·;*K*bƒ“K¸êâÑÜ|åD*GÅÉ%»±m…8LBh_2x’Ké>ÚLig1A³8ybÊÂN7ù’M @&0Ò[!~º£Tþ튰Ÿ(õyV+Z¶QGºxÿO%í‘Áæo_réÀó‡ƒÍ%ÂýN"„LïGæé¼Î²@õÖïj]ó¡ÒQ ý¿lÞqÓ-·PT\Ä×¾ú%ì?xØóuµo颮k¹èï2œ³8Ìæ¯n2Ø\W@}K1míY29‰aL*‡G™1)΂¹¥,_<œ c‹H2](¥`(/î.†Ê[pq„«Æ´öÇ>adö 2{Ð×¢Ú]q#Û€Ð}*Ú˨èFL’ÇM°;ÐÙ½ˆðh×)þ_OÕ|pCT¦¶à¦ ¼GõÛPB{Wm"“{ÑvÆßH9´l‹÷ªý;6÷2d/¦i<(„¨/--­ÿ›À•+¯bTu3fÌ^¤”zŸ”òRÚe’8½]‰ôv54…1X|šbñ‹ltXHZåtu§ ™‚ÂB“xÔ ²,L¨Ð„œÆJ÷`K•' ´Òy*E©üPPP (‚éÖ€0œI4½;ÑÒê“|.@ ë€#¥„Ag6UˆN2Ï ÔÊrâ­¢MÔñbƒÒÍ“Œ*†ê;û‚ùÎKó2‘J6­5Z ´Bæ:±R }¦`+0H‘ém$ÛÝs•©ÁUB‰¡PÃ0:C¡ÐÇËËËÿëo lmmmÏ*¥VŒ7ÑoÕî nµ¥$ªz\ZÀ½éY˜DÃYFÅ÷@aŒ7̤AÚÈ\Žl—òAà5XÔJ»ùúªß"ßï/9‰áX^ÚMß±SMÈŒ#Õ´î„+c,ò¼Wöäút˜¿¸&؇PéˆÈx÷Ú¤ð<)P뎚àÙy ·A÷L9ªÝ¿~Õw-•Ëbõ֡팛0„ r¹ v:‰a'BûÍnóIJP(ôËd2ùK!„×@û÷¡Pèsï„ô;.°uttÜhYÖ/-Ëò§¤xÕë} ë4¶2J¡´ÔJHÚ2 ÛNnƒÈ´ˆ¸ "æp°¶ÛÝL×ü ,’w:Ž‘™vìtkßÐ'ÝŸO3ð\zÀ[æ¨XrÍÎFm8íG•@’½Ô|•¯|1¼æ ØÜhec§[P¹nGÂê~} RI¬œ¶Ò¼Á©ˆ†aø³C¡ÐUápø*7ÿ®òòòßu°µ··3•J}Öߨ׍¹_1ˆÖØ:‹)bh£ ß0öT7*k!Ì 0bŽg§tž$ ¿÷P1ÎÍW~ŠÖžJê{½Ò”²º‘ÙNרùŸïçf©ëmJ@8³C…‰!*vT¦ÏðÔ¬P(«­R³ tå^ÈaÞ¤îçÔc0[Eõß,Þëd™í@Ù©<‰–'9ÅŽ * ÷óTÞøt/B“ËåòZņÃa¢ÑèONàŽl–e}Ö²œþ·^/¶þý^…Ëk˜Zc3‚5² /o¬o©„£ÚT%[Áˆ;žWüåÇS+÷r`ðÁ¦ûl5e£ì$Zf]CZ0@2f(Ddä"¥Ã2éN´°lM¯]¥ “€ªq» %Ó@DØÕº¨µÄwnœæËú0«`ë“ÌÚ•|-³(;Rº›‹¿‡U "ãܪóÂÁ~'ž6òFrzkéŒHÊþxwÁ&„HqO {»¥/ GÉX(ŠèæJy…&B^ò–¦O’Èn”6Á-csì¨àt¾±ï-’R:O=)Wí8ÏÙn˜ÇQCqzatiV?ÕLÚøoBF­!•JLÙôtâú³#œ{9Tý¤ µr(Â.ùkôI¬€=©”î'ésÁæS Z£¤å; ºŸúïãà4B]0›‚À>bÊTP8xÅáE@í¾«`‹F£“€ç ØåÙlÞŽ6Öž!C»>bãUÊ'0T¥MwáEÞb99ã'ƒEäI®|Ä‘¿ˆyTƒpí»‘Õ?Ú§cs ….¤áPv¶ŽX,L8vfbU•1vü4dÅL²òGDiÀ@ 1Ì;á˜h} £/¥H‡©R'V¦|›m ïá|òmؼRÄ|q&\2YFG‘~Ú(Bؽ¾6 †   +2•Ôˆ{±â+0I»Þ3y’ʳϼÇÂá°?´Ä­óøVyyùç‚äýI[ÿa°þ[­'*¥VضýM)e™ç,xÏS±–Š`¨4ö+©—‰ÈDhCè Èœ{Ó\•¡B(¢nÜÀÖq´6ÑH”(ÆÖq„Phm µ@è4†êò98ÃNŒó,ZÊ>§P;%wʈ"ÍJìØ¬øRì‚yÎB`ùÞh_|R»? 1"4S¢WS¤×U{é^„››¿)ÂNå•)BHQèHe(É g ÙÐ)¨†vÔ°´¬kë96«"Œ”ˆc‡'"ã§"KÎC…ÇbAF¸< æy¡®SÐišæƒ¦i>Ô‡B!x]Ðs=i` 6q±m›Œ[Ør$êcôèÑ•R+¤”wJ)OÓZ¹ýÛ l¢ r˜êZö€êE¨‡é— µ R´Ža¬c(Ï !17þ©{O[•FNÄ•FBaX]r./æ0fÚ†6ŠÐÆ0”Yæxu25ÈzRálÁ$AHwai Õ‰©3}v¡Ö(QŒ¢FBÅ0NC1NHL` ¡²Nêabhƒ,ÉӪ.6BDœ&b.£BeˆHiß{ÜÔ,ObyêÒ0ŒNÃ0V™¦ù`SSÓª~Ôá°c:D"b±˜?öxí·!K6)¥?ÈÂéT4ê#FL´0Åø…l£sBÇ ­Õ )Å Eø4© G¸üš´m”!*Cãòn ¡Êuç¤ÌùzDB#´B¸4•Bh7B4 ¡\›ÐP>gåÈ9¡,'arH­©¡1ÂdÃ%mÔ(”pžÃyå§0 '†kb …Æ&Gmƒé.²ÃšÂôtC`„ DZ2…Ä–+‰ÌN!D½iš !êëë÷¬ò ר j P‹ÅˆF£Ç]ì<$Áó4½)ÄÇJ}”ÖW®ÒZ¬ò`ßæPh"3sÿD(¥W(%ïÔZ¦]oÕ¡+4è˜?ýXSpê£ÿ¢äŸ} 6[z/æÉÍÓ°³©<ê#/&+gÎÄNÎý#¢²­R›>¹ê{¼€8‡ƒB»ÚÂKxoR¾3ñ®Pžê5ßóFÿüõñ¿Šú ‰‰Dò¦žt°yj28¯Ê+îG‡üõñ·C}ø§'Ý‚­ÿÈÍc9þ?-¾©î¼g)IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/marker_add.png0000644000175000017500000000103411273045225025206 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<™IDATH‰å•±KÛQÇ?÷~ùÑ$’ZQph%CW¡]:IqíØ¡‚‹ÿ„(mõÅAtu)b·èÐ!„†T¤…ˆ Rmãï|–Bò{±¡CîîÝ÷îÝq*ý$Ó×è@¤Óaî<ØÜ+6ÆsçZ+^Üpƒ÷`À7Ô8»ÒÕÏ3±¥ž<4󉕂ObB&iKFÂÆq#û«ûÔ­‚Ž-ŠÁiæ±7÷rXJ¾""v Bá’7Ùw\?(À䈷;1äm¦Qõ äËÁÙÏK]ÈÎD¿wàªaØ,Ö¿Ìï×êSÛ¿×BbPÕÐSÉþ¥Õ?i¬&çÓt‡¯ùb;‰wvvB¡PH)µômTJeå­'ßßµ=y·¥•••{‚Áà£p8¼‹ÅÔÐÐЇÌ×cú&teúêÞñ ÃÃÃÁ`ð¹[Okkëùžžž]]]7¼^oÑÔÔñx<«Ow™ ««øýþ €ÑÑQ±q¨¼¼¼´¹¹y°­­­£ªªª(‰ ¥DJÉÂÂBn€ååe‰DB°¸¸¸^ohh¸zÙ¶ÓãrÞiš"®JJJ*êêꛚšÚËÊʼΘ#œ÷LÓ”Ñh€™™™õõõïkjjŽ$ R©T–¸ó3 N¯[d†5;;›R¢ëºëÊÚF;·X–%’Édl||¼unnîŽÏçë...>”)ì¤a9[$‹ Ã@)µô ! èº~VJéÍÜ…eY9[¤9¥R©õºRjèB´·ãnó7…Û ^iš¦Öòí=^`˜áï[¥€¬›¼àp hŽnõT¬õú§€•à.P´°ËœëÀËœÞ"@ìýÝlõc Yß  +ùÖ Y‹nBŸR*‘/À-\ÿ2þþmåEÁ>5ÿIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/marker_last.png0000644000175000017500000000151311273045225025423 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ÈIDATH‰µ–OHqÇ¿¿ÝÑÙ-ÿÂÊêA„Ö° ÌöÐQ„ÈÐà *nIH]ŠEÐ!"°:ṽ#-"òVXP­Fì!C׋ÒîÚ.íÌ/fÙÜ?¯C¬»³8˜>øÁð›7ïó¾ß÷ÈGŽ#­@8àwž7ßµ'+?ôêoaƒD@•“¤³ÚÄòHÍêA?ÝÖVÒtsK!±­–ÁWÏà«w ÁÅh.¦½^©Yþâó-­Á“BÄ-U ÊÁó1mm‹\Cf^ §§çnkk«ÛƒÎ¶—Úœ‚À»¤¾)8†>÷!W0::zqjjêS(êßpª™ ŽëÞcl[Γ’úͼ VÝÛÑž3==ý!“ÉP$É…Ãᙦ¦¦šÒó¨àš|}z¶þÞ*§L,ˈÇãEÑ=66vm||ücoo‚p8üjaaaó6×]Ù¶Ê)Û"I’H$` Ã@ggçÇó4 Î/--MH’ôËÌmnnf^€aXÚXey€ˆ`†»»»ûj]]] ««ë^4Î9’É$ˆ;;;–¹¯‚b×ë=fý~,›Þ fÇ‹»/U#ú|¾Ë‚ øS©”šH$…BÁžÎù®‚R€y§iÒé´$Š¢ËTÏçídY¶,j>çr¹¸¢(3Ùlö~cc㢠PUÕþ E±ê>¯iÚKUU'‰hÚÛÛQd‘½(Šb•÷ÀC"zQ|É9‡ªª¦EN[€’H˜p‡ˆò¥/9çç ëº=‹þ…`Àm"Z­D×uý€:ÇôÙp׉h¶Ra3ˆh cnìú‰H߯xIè,gPæÛŠ-µ´›Ö_c¬–ˆÊVðЕ⊠á/‚eŠÙIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/marker_list.png0000644000175000017500000000110611273045225025431 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ÃIDATH‰Ý–¿KQÇ?óö–Ü©xQðG„,,ÒB0¥•ˆHo‘Æÿ@Ê h A$E0…)$hwZX¨ æ8%¹‹g‚ÏónÇÂw²\.º›ä ÉÀðoæûf¾ÃμU¥–bjz;¹Î¸yäÍ/¥Š÷7ô,õ­D ¡Îz×Pð´>ó]g—‡b“¿ ³ÙŒ7°²žözZbBwÜp/n¸Û ¼Þ)&N²±—71¸¶D1øÔÝäŒ<¼#i× Éb2™c01ÌùoxÜá¼{ÐæÌß¾EÞ5°•õ2Ÿs:‘ŠîÝ„@Uƒ¨y±VXÿpVè{{ú* U üy]qw ûqc?~}ж_fÂø‡ap•OHÿÚ7ÚÈ@Dž‹ÈŠÕ§æ? xdµ%ì…•pí™øí"PÕ< "Òôú|ÊXÇ—ð{UÍ`cÀ«9.K¡ÀW{–Úi ßgÿ™>)÷Ayš*Ð\…a£] +òƒ”œ[vßd³Hy.ËV²‰‹¾l= hW¬ïþU„*ã`έ°Mýu£¢Ú‹¶ ¼±ûÝ ÛqØòÏÿU\‹"L–ÒÌVÌIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/marker_next.png0000644000175000017500000000143411273045225025440 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<™IDATH‰µ–?hQÇ¿ïîzw ¡Å4ÕjÁ€Ñ:´$¶à`¸4ê""èØA3I‡¢:¸‹qqPD(¥‹DDE*”Ò°R°µxg¤i´õòç콟ƒ¦œMr5Õ~á-Ç÷}>w¿÷†cD„ÝŒ°«tR#åÈ3HÊ·âÕ&‘µšÀ˜hSàÇÚœ>(M¶«x±#Aê6&ÏÉýÂ%W©KëÀÇuŽÏa:Ëq¢ƒ-·«¸mßÓðˆÇ”kÏ5ë•,2´È€Kb ¡}‚~ÈÛtÀGßïocŒ¹$Ö˃“‹üÄI¸#¼W¸¼O·v«@ wllìu<¨'˜;ÛšÏøÅÌ*×$èí¦‡¥dÍ2ý±"‘H6›¥t:ý}hhè®ÇãiÙÚ©¬3ÆõdjUŸZ&O½NÕƒp8Ü?;;K 4??O£££sÑht°æf@òºÆëÁ‰¨ú™¦ MÓàr¹@D…B]>Ÿï^"‘ˆ§R©Ëù|þ«­n}zŸ.:W• \.C×u¨ª "çœsW,;ïõz{º»»Gfffü/1ÆobM¦iP¥ßùýþ£n·{¼¯¯¯?“É\Y[[Ë9Ák ,Ë‚¦ieyS`—pÎÕ`0xNQ”žÎÎÎ À®ëEÑÝ*,ËG𛛇EQœÛÑ‚P­,Ó4•••‡¹\. `¸!A¡P€®ëPõö–e¡X,¾´,k¤T*Mc¬±U¹µeÀ7‰hÑê$~É–€'’D´ø·`G-oÜ"¢G‚·dŒ&¢òNáõoD‰(ó/àº"ZúàJØ¿þU0ƺˆ(½k‚íò^q¾Ÿ³Ô·IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/marker_previous.png0000644000175000017500000000135211273045225026335 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<gIDATH‰Õ–OhAÆ¿™Ý’¦†(k±A¡¶kµÁ[/i©Ín!«=80°;oöû½÷½va=_WuòŠk©X…¡¾¯’øZ``èQ¯ÂQ[$ß|&^¦<ÜD¿WœeŒ=~SÛ·öp úýª¸ÿALM§<»­à‹ú|f÷nÁµP€ dp<ú(Þ}2›IºnXGlSnîò‚WfBa ¯æ…^±h|fÌ_uÑ4mc"‘¸h“í5Ÿr¼¼ùçÐ÷:ißj¸1uÔ3í$žN§S¹\î’iš:€+ˆÈvÞ)þÐÆn¿˜uЇÃáMÙlön±X´*• åóùgvûl+€»ýŸ<¹wªÓöÑÑÑt&“™H$;cÐuÕª½ƒŽ€vL¬\Ð4MD"ùd2yDUUE×u0ÆÀ9w´–nb±ØÉx<~!Y–]×Á9_†á®UUû®êííUV /MW=¡Pèy0ÜaLÓì^‚¹4…R©T%"H’d›ùßô@¶,kfnnn¼\._öù|ã^¯·ÏNÜm$-"Zpž16)ËòUEQrΕÕ65›Íî+ÀŠ×”ˆÞ8ÌË8`×Ï.µ¾ç  š°@@åŸÚ:0à)€_n­5â ¢×D4à4€…n*°Ýp¬[€pÊÊb› ûïÿ*~.ôÚÁùIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/marker_remove.png0000644000175000017500000000072611273045225025762 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<SIDATH‰íV1KÃ@þÞ%ÁÆ¢• ®‚‹£»Hÿ‚ƒB7â þ;‰®."ºE‡v UD¡¥±±MÓ<+E$ÍE3üà8¸ûÞ}÷ï=Ž˜IB$z:5l³X §e¶Xãfùµ6ƒ Ö¼€ÓU—÷ÏrúvlɬÈgžpq] fFt‚iLÂá­o½9ún/¡O¤æ°²>?FMT¨8¶}Û®cÙZAëW°0®œÌ*…¡44”œ ú\ç +—ºï `æ(Cl]y—ùó¦·xô~1Ì9‹‚)C[rînŒVj5bŒ”|ÖËž _ÆÁ×}$ùÉÚ¿ƒ?Fh/úLD -”Ä܈-`ÀZÇ%"³#"+ÐA6*1Ž@éÛ:uÍ>º“A²Uìô}«x‘ ¾ÿU|p)-4lôIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/mixer.png0000644000175000017500000000136411273045225024247 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<qIDATH‰Õ–±J+A†¿Ín1‚båØD ;‚…Oaa ŸÁʇHi!(mÑF°bÖ`!HDMtvfç2Ãn67ÔâX8üsæœóÿsfXGkÍoZæW³žqþ,...ÿDÒ‡‡‡f½^¯% T*•åÍÍÍ…Ÿ(p||l}[ C„váââ‚B¡ÀÊÊŠÅ®®®X]]µØÍÍ A°¾¾N<—1{J)„ökµZ´Ûíæû>¾ï'°v»M«ÕJ`J©¯H)‘R¦0à˸8[@)•XPJ!¥LañFƒ»»;>>> loo3333š‘h¸À0gpvvÆãã#Íf“µµ5òùüx‰Â0doon·‹ëºœžžrxx8R¢(Šˆ¢È&3g0R"S@ÁÓÓN€b±Hœœœpoc·¶¶ð<¥¥%úý~¢ÉJ$„ —ËQ*•>¦ÆæææR{G2èt:ÍÛÛ[†íùù9…½¼¼¤°××׸ß4¾óßÿUüTÔ¸5 ø IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/new.png0000644000175000017500000000106511273045225023712 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<²IDATH‰ÕU=HBQþn&µ¹DCKCb!´´44(ÉzMaÒ$´:6‡næ¢àbÑP´´ … Ï¡à-V¾|Cùz×{5nCÂÓüy:øÁî9‡ï;‡Ã!BŒ#e0Ù­@’¤-·Û=×+¡¦ij.—»ú !:¾@ ˆÇã¦è™L椕££I’rÉd2¤ªª³×îÛÁ2Bˆ3 ]d³ÙmÇã$„Øá·:eùT–åb±(—ËÃðûý< öLp|v ê à”#ºí.Ð/ ôeFÉÀ®±kÉe8ã¨ÓzÛÜ@Rç)”š%€>­ƒ~R°I†ƒüîK÷káõpZ\‹½*¢‚Gß#8ã ŸfÍ# WÚ¼6‹W,ÚrðÕø‚Y5:o2ÔiôƒÂ¬˜hêM LýÖ4ƒßb,†CÇ!ff@kì‰!½”F„E®qƒ}[¼ ^x¼€Ämô¢a4°º²ŠêKõMhâΖ@+ij€K¸À+í¶Þ¶ÀåÑå¿ù‘߃ñ°Ì@Q=ŸÏß J¨(ŠÞú'côG.ð ý1ýâã]×IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/open.png0000644000175000017500000000164511273045225024066 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<"IDATH‰Õ–±O#GÆ¿7»öÚ†ÈöáÆ"…#…" :¿‘š2-M”鮉RQPA›¤H—*]*:$::ŠÓâH8³;6ÆØëÙÝ™})â]qो”'v¿§Õ÷Û73ov‰™ñ!C|P÷ÿ`OK‘PP`1sgV¥k°¾¾þëº/úý¾“)eÁó¼ÀÌüë,ÖÖÖ¾ØØØøJk]¼¾¾ÆÕÕŒ1 °,«hŒù–ˆòÌüˤBÀ€|   à53ûS+ØÚÚúquuuíôôT\\\)e®ßï[AXQ ÇqD©TJ*•ʨP(8…B!ï8N¾X,æŠÅ"c¬½½½ï™ù§©Ôj5—ˆ°¼¼üÙææf)—Ë™†Ã!´ÖOç–(»7Æ ^¯¿<88øòðððçýwQùBˆOkµZÒívAD(—˨T*¨×ë°í©{áXYYi(¥ûûû¿Ñ' 3ÿiÀh4ò-Ë‚1†µÖPJáøøQ! C„a¥Â0Ìr©~|=::zà÷Dôu ¶mÓxž‡ÝÝ]Üßßÿë[O‹8ŽÓÞR¤ RJIDÐZs³ÙœÙ!D¶S“‡:Í=Ô–eaqqÌ̽^ï÷ À̼½½í{žGqÃuÝgëƒ A\¶Ûí·Â0”gggv¹\ÆÜÜÜûƒˆÒæ,%IÒJ×"ŒÇc_)%ªÕ*æççŸ5J§*¶T33”RùÁ`ÐJ}3@¿ß—¶m‹jµšUðOFõÃêÆãqþäääò  ÓéÈ¥¥%+°|“›Ü{ΜsgΙ3gfΉ̴¡bÔH30’xMø ´ðõ¢“ˆÉØS±½Þì*<ˆ{p/ÌÌÕëÒa ÇÚ7ÂÎÁáJà­ðPÃØ=x a¶—)ÍÿvÁ¶X¦âr\žÝ “™C~ÔlÎÁÝø9Æ›5ƒ¸>Ÿ†—)x?æáNÕ /Ýüèh,ÁU˜¾¾…ïÂüEiä ƒ0”NÇã—øöi!‡ÀᄌW`ì@´¥ˆx=®of|vfÞÞÕšdæ­8Oa~DlÒ‰v0‹|!ægæ)Ù ëú@Dìµ.í3sUf~L-ó"ì¤>'*uïwíàX†Ó5Ë;áK¸·©âJ{úÊvÆ m}îƒ+±gaLKÝ,Ó¼ㇰFc!æ yÍcS<†­èø<|‹pTSöG|¸v öPÚu‡Úõ1Ÿb§–þBYì™ø‘Z³Ÿj©? G4ýÝÕ… ØQm‰cÚë:99s0/3í¨2µ¯?¥x("öÆÆ™ùcˆˆb¶Ä™ùhD,Å´ˆxÏeæ}-ýMSjaDÌÁiØ$"¦6ƒ9Oã-Xûdæ¢ø™yD,Æpik]'áÆgé÷B¼€•ç5S"bTf®ÎÌÛú#blD¤fáÏjVOiëï^¬Šˆs”v,oÚNÇ›”椈¿cóAøkÅ÷ð mÂwR•`“.·˜yx®â'muÛà3Ê)Ù[-™Ñ8»´Ð½QÙ¾~öhÊ·Ã/š÷oâÀ.yÛF?K¥?±¼›Î[ÚޢŨ 0HÛâ‡8 7aÇ6šóq2+çåügã~œ‹Ã»à+°¢½¼¿­îuxv¨úÔ‡ˆ‡­•QëDs îËÌeJ}ÏUnòìˆØ?"~ÖB~ Æàåh]­,÷h\£4cHÈh/ïIT×àRe¾÷¨¥³*3/j¡ùŽiÞÿ¦ìÄ®Êò߉ý"âT¥¦gá™ùpDl¦4e"gæ‚^0ÜKá¯Q*¹RíÉû)cˆ——ßdæcMÑ8S Âï2suDìãU°trfÞÐÐÞÖìÛ©%Ðô³>¶ÀÃYó½zpüËÐçSCYó#ŽÌüþúøÏ+Røõ…ׄßPÑsá#b\D:Í„ˆxw[Ùèˆ˜ÕøòíôûGÄV±gDìÐ3f{m핾t€úq¸·”mûðÒÎk£¿J9)“pÉ+ÂÚ7³µsD¼="6î§~ZDŒoùÞE%¶h#=s3ó¤Ì<#bFSw2.ËÂr<³Ö…ï—0Ü™W®ìŸT„ök•®ž¨f~…J„\­ÜÓ¾dÇtì‰Ys棛÷Q*JœÙ|/æ-´3µhƺÌüº€–LL3Gú_è¹{SþI,hk»†ðmƒðÝ>zåæ.i£Ù Ë^.µšƒ‰p3VFÄ܈X¤²6}îò#™yGó¾ ©1J¥ºvUùwêpâáVºÌ|Z%96¬Ï¶¾×ÊA®%|f¾ ’o¤Ï3TïB¥‹[úßB·Ê¤ÄÜF¸pHf®lªþ…7´ÑŽmþóÜ üµbkh­Nï˜Ñ¡®“”ñZØÐÎTá0l§FÄ$|Z…­át•üü¦GÄÞMÛ»Tv¨5ªÝ‡½Mí&k “ð‹•0áë*½´Táê(<¯ÂϧT˜;_hk»\%8[™{_U ‹³ñÎÌ|QÅíÓZh÷R‰nðq6¯‰Æas¥ú{ gOíåƒCq^Ë÷BlßEûU²u£A­}K£Ù*Ù¸VÊwൾ_é¢]_Þþèþê<¢Žˆ¹x23OëRÍzŠ&“ó¢Ê/>›™Ï±Ý7013ë·~á7WŽÊ?U‚¡ëÜÞH Ù¦ÏWÙâÃ2ó™þèto3óßxŸ2P·FÄ”^3ÚkDľ¸A9k‡tC¿œ€ãð(¾¦ ƒ³íBïÏçÛ~0 ŸWÖó ÿ=‚OÂA†y3c¸wrÆ4?ܳ2sÅ´Ôõ•µòæ]¢ïNÎTuÂ;Yy€wæœá¦®ÏT¾À`‚ÏÀÅÊizz˜ÿêÃ*9^¡^šÝyyk£K5 œƒßj 3;ТNpß3Òö Ó3ä™o"£¹ÊÙ8$3ÿÓn/åú®ÄŒÌ|bøSó2cˆ3>—©Ó’µÜĆfªZ{KpÄHÏêPžAÓXMÜ|-žÄ±YÁFký;"â•̸»e敽›ž—ƒÌøDÞ~±­|’:oÿ+nW9¸AïȼҞŸ¬Oh¾wÀG”»»L]Øm¤X—§ß}>"vWÞÒ<®bûêÔõ:\×®þ¯Ft~¾º=qcóÜ”¯d«=Lt~T®ãuîW†åÞþ¿àµƒÊ ´ðÿY€։múIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/option_skin.png0000644000175000017500000000724611273045225025464 0ustar julianjulian‰PNG  IHDR<8¡m›dsBIT|dˆ pHYsXXE&T½tEXtSoftwarewww.inkscape.org›î<#IDAThÕZixUº~¿SKw:B"²1¢ìîŒ w`.h`ôÁA½î ‚Àu˜厂Ḛ̈¸ŽÈU¸:2À̈Ù“!! !KwÒÝÕUç»?ÒIHwÖû>ÏyêÔYß·¾SUßYˆ™q¹AD*€îÒô †D°Ðë-xµ˜‘ 'öØÄÌV³}]jÁDà&ýô„~ÌèÁ€,ÂÑv:M§U…ü‚`Ô2„€Ÿ~#µ²Fvòx95`qû`½l¿°&’ðK"˜ˆ’ÜA„»Œc†¦˜‰±¢,%I”]•¬”tï¨ꮞ?Ä^èJµ`ÀdB ʼnaÓÆ¿?j¨O½W•ù¿9Æ,ŸÁ}ä˜ÆÌ;/©`"J0™÷Å ¥]¼(¿q vøçãmnn+ÒU2êÄÀ¤ ]ÇÆ%l>øóþÏLšõEK×0£”^¿ýˆ1Ï´Ø ‹™×5楞ÃôüDƘ9€hŸ *FÕ¾ÿÅDÛ‘‰Ãõâz%šxÖ‡‹3R¶çÜ2u‰|Û|öæY_´¦ÿ­/&o]µ¹f×#ïV¬ðx-¥2óïp¼&¢h §¥D‚«¨?\;1m’~tL†^ ‰ÕYÃl8TCúÉÂKþû1ßæÞ|/ ï¶éç&Íü"TÇ2kGÞÄx¿ácz~|²±…)?x2€aÏ—¼^kð-Æ1ó–×ó²0E˜-ž“톤«%O>hÛ<9ÓVÒ”#¡ÌšŠï86éþ‡×mébXv›Û›Ðшî$Yѧ zuf¤6Ò;iækÓýNy_Kb5 `æÓ Ú @Dc„@6€—§+¼á ç?¿YóMöÕÒ9»¨¦[Ú”¬R¹Û•ºg€òÏô[RÕeDÛM²bsÅæ9mèË9͵5kŒÓ34Í6@€ß†Ò[má U—˜Ó1Yx–ÏúîÖ‘ZYpxá°ÏŠ[Siô&À\áŠþ¾%mº}‰Ú»[\·#wÒèlûpåY¾Y™ Þn)×oºöFgå¿ç5ø~"zž™KZ%˜ˆ®«¥D_Ü¡.›kÏqF £þ°Í5d,¬:ãLÖRœ»÷ú͘]µVì~ÃŒóJÐÊö1ÿ€Â3Ý£ÿ¼u^Æy£¯7L{tsý÷l¿÷Ãa]¾*‡l9çaÝmol;ä›`€Z,˜ˆî!ÂÚv X±0êàmc´ò¦¾´'‚‚`e¥?ã½*ÿàC ¥ÍMt|Š»½‰Zµ7)Ö´t{K8tJ8v¼¥|CØò|‡z íßžºivÖ¸Þ¼Ø5éЦ/ÞŸÖ\;õñ?Ou8 @ÿ&=-"r }Ý: çw_D9l0zFA¯Iþäã–›ÀÂ"o—?–ûû†ë83J;¸­SÜúHžÖÒÏß³=ç–{ûvÚ±á7?›¼¦5¾4ÕçÆÖ5ÁPfämc†ï ‘ ÂZUAº7ìg¢ì`ÏNGtŦ؄HO1I!syªãp” 3\™o½>kŒäHí¸âòJuÙúéoîºóƒHåZ AØ oSïÂs̽ô[eÿ>"ü'tÛéuñÉ X 7¹OEj8E%÷1ƒ +Þ¶ûévQû·y̸Ý>3ñ°ßJüSµ¿ÏÍ[Q¸ú÷d¼ºÏ¡×ìj­KÚÔP&¢dA˜7q´â›=]« uj¨:(]•Ø™füMžS`UÍ—gsÅšžx“'®Ò…ç˜!J´ïzÍåØ&³[œRk?þÓä!<+‡­ÆºbÁ@€êÆ~ŒÛ¢§õ3õýź-T«ô턴ʯœÉ2Í.½¤@ìµÇ@uù]5áÚξkqÇþ‹A¼ÍàF‚‰(NÌ™8Z1úõgg9¾C6›Q¨ÙÎÖc"¾î Ý+Q2<µ27t¿8Åq¸Þ+J,š¶ð)á|æa½<;ö3ŸÄGûÙ"º}ñ·zrÕË×ùíŠ8d/#âÔMˆÈ¡<~Ãp%0Øe“y»<­ÙŸ»šdy“èL\1¨ÒÙ¡ßÒ–DâœYZ@ëŸ8Us}M-QdS™UŠ-PªØ"ºBÀu® ¥(àQ™Â½«a¦ü,¦f·½£7׿ —% §$04Ý!ˆ(†ƒGf*aǯšlž•î«êôäéƒIwUsõk)–»ì㸞õyÀkpÀÀf(#3…?\-Ù øŽØà¸ÆW•úli©83P~Ö—¶`E˜^v˜’‡ø‘™ýÀ(U_?L »p¢u0è!ÞªÔ¹¥y¤51ÛWèÀ$Kb0€@Ý"^—Éd9¢€p´ãF{ªµ)¦|åJk·ü¾´'꜎@Ý2ml|läá¨w H\ÛŒm@vI`T0º¨ßöõé+nŸœ `3ç€PÄÇÅ\¹œóÁ}ožv™®ða(M!6¶™!ýÿ÷xïDÝ(þI03bb/ ÛPåaå@®mY—ÿ?UUË“ìeæìPšÊ {T‹–ÁÃ#'OÚ—¾e¥}ý-R«Ý† ‰ vÿµýä±ùj»{uV*ϯ‡Öcæ›å©‹‡˜W?]ÒS§ÛÞðSKÌ7L5FùÔ‘ÿ´îcåÀ‘ƒ\R^*ßzw­îU®íuÏ“ÖmÅeò’O0Öïª @X[?]µ,œ(,’Wµ¶AK<+{oßãtmÞ¶ ®yÔaÂÄ bæÛ3‚'ó ›?ýÒsæË»%º¾Þº l²Œ®ëxnþñcŽÕÙ¼„ïô«f0à `Iã<àdñ)VέßϾ ¸Öþ9Òºu‹XvÈÁlø-uÛn3©U¬Ûˆõßy£K*­™62óÞÆùÀIÀ(?Ã-¶ÀüWÐuFÖý|u¯«›-ë÷ûaZb£qgâBá¾å/KF"€EMå«NÀÉb¦¤ˆKíu¨©e±ã쪵·ÈÕüõ®Çpˆ™kšã¤2³ˆ>ût£5å÷ ˜b¢#¿ÊDmA~‰(+-“í“ÃÇ@A~¦Ý{¿N;4¬¿ZÕÔ´rý?ýCá¸%yDsD/B³¤ånÓ/Íú\]¯FjG»ù²eaŸLNv65 )q%+_Ô¶7UæO¼ÝZÝ%cU¹· ˜y3~ûçMíýõfÄmXñެü¯7ø?¾DE……)%²¡G~õ+\—1 zT]¿Lÿ»ÝF笤˜héêÚñD(ðê… g÷‡‰H_ñÚ"ÝóÀ4½:´KŒ@ãýá[¬è%+DÚ¡\ŸÓåj/ËJË…%%2Ù Ÿ˜!~9T)E½ýÜú'ñž_Q›þ»5µw˜Î̹,‚ƒ¢íDø€·Ï}T¯ž÷¨^NphCüh«{ȨT—¨éžJÕí„·þFwcÁ…¥R\3­b¦»–2#ƒ/ñùåsN‘à-Y³¦jî?,²— „Ü`gþœÓP°×Ç2cFåϲ ¬TfÜî_y1qÎÒ3[Ì<ÀÒUk1“gy]…%|Þ§nM tëãÕŽä[iÌȺbg-™ùY}¹ÍÔÓÇzºÎÅßÞçoÛàD±´^qç?~ô0Ÿ™W·•ðù¢ÙãÃDÔƒ/3ãö”öä]ô˜½púd½¬¥CzÕ_ý)s_¯Qéa;3bæw.‘¶¦õ´ô›ADc…À2)ÑwPºR•u·^|ï$íT¼Sø .¯½ý©ßõæG¾ô‚S²È“w3ó§y­ùH?h¿/J —¦ÂÐ[©¼Ê%j¢lÈ9!£XÎ3Uì!p@J,°Ž™Ãžî¹”hÓ‰x"n0E2@HcF r¤Ä~Ôù¶ß0óæ Ì÷¼ñ¯ uß[IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/option_sound.png0000644000175000017500000001244511273045225025645 0ustar julianjulian‰PNG  IHDR?9óÂsBIT|dˆ pHYs  µ€7ttEXtSoftwarewww.inkscape.org›î<¢IDAThå›ytÕÕµÇ?ç7Ü{“›‘„ŒB @@DPyˆ©àPµjÕªuêÒ÷ª®«­ÖõÞ£Õ竞Hõ1ë@_[ŠeTDA#†@ !#ïð;çýñûÝ_~7$Š‚}]ëíµ~ëÞÜsî¾û{¾ûì³Ï>'B)ÅÿW1¾*ÅBˆ<`*0ЀZ`…Rªâ«úÍ/*â|3/„¸øPJ/ƒ[XXØ4eÊa†”RJ˲””2*¥<$¥ü(nBl[²dÉAõ»åWþaà9Ó4÷E"‘½õILLdÆŒƒA,ËBJ龯Þ[–UiYÖ<¥ÔÂU«V:¯F:¢o…=ôP›išVRRÒ!¹¹¹L˜0ÒÒRÒÓÓéèè`ÇŽÄÚ½¯1B !žªËÊÊþ8}úô1çÛÖ³b^aý•R'úêóä“O…ÃáRÊio½õÛ¶mcòäÉŒ9’H$Bss3R*ÒrŠ8Z}’uËÿÈÕ·|—‚Á%X¡N:* µ5ƱßãÕRJýÖ²¬]¿~}Wvj@ögÙù…À ›’Ñ@p(WJÉXû¬Y³4Ã0‰F£OI)-Ë¢±±‘¹sç’ŸŸOgWˆ†úS}#&Q4ú v¬ù¾|Ãôio¤óÔAZ«÷pªü"]m½ Â)å½7nÜÜÃN?vpMŽ(¥Žœð#€!€tÀo‹¢ùóç›õõõÿ#¥üfœ‘J±ä5T”ïÄ—$ÔÑz†^M7~éõ ¾h:Íø.²‡2¢aÿNî\Nkí¡ž •RlÚ´éy&0 Hð¡Rªö³°}æœB\€µ Ø>kÖ,_SSÓëBˆo:}Ѓ™¤¿Ÿ+ï¥$Y‡ºútä dÉéÙH+Ê×P³+:¦šgÚk†Ÿþ_+cäs(šú šã±f¥Ôï&NœøÃØJ©° ðAà2!Dògâë‹y!Dp-örþ¦”j˜3gŽ? -µ,kF7# 3<ÁÁSÑtMÀSw¦ñd%£/¿‘ÒÉ×Q<~„d$pªæ0 Ÿ¸…H¸‹Û‰ü¡ã±$X , =­êj>ÁÕ¿¡áȤ”´··£ë:À[·n}Êcwp6±-ÀÎÀœ!½2ïޝc»P"°) .f¸‘ZÓ¿ž”aWá3ML]ajŠ+où]í­ôëŸË‰Ã»˜÷ãëøùíÃyòެ˜ÿ8Ón}Ó`Ç›¯bh SWší·^ ¤å2ê¶_‘[:ƒh4Jcc#O¦§§/BÜ&„М¹þ©cwöTèàÞ˜BŒtÀkÀV¥Ô†XÛìÙ³o:~üøâ””LÓÄ’’ÀЙ$äŒ@ ]€¶ G#]|榟æúã½0üâé4œ8Æ£sÖLÏÁ’UÂ~•œ @±Õo©Üº€®®.vî܉ƒã=àu`ðM`öt] ”jé©é æ…:¶Û$:}àžÝÐаà™gžaÍš5$A0w¸Ã˜:øt….¢$üL»éšë“–™Ó+øò­kÉÈ)`ËŠ˜:˜Z·hˆ#H0lÆ0f'NœÀC``6°ßy’€Ë{ûíÞrûñ@¶Ó¶N)Š5èºþBfffú#Ên¼‡Û}šå¿ÿ¹ãîÊP¦Ï@é¢éd¥ëâ§Øýîb—õÎÎÎÞÀƒíÅ×Ì•žn?íxX_¸pa?MÓî´, !ŸJ ÿ….ã†uÕ‡hoª#˜œLÿì|¦ø#ÇN`بñ¼ó·EŒ5„ö¦ZB¡û„Ãüɨ>ð1ùCÇ ”BiARr:­Íõ„ÚOÓ|ò鹃زt6áÎ6ú÷Ϧ©©!ý{“<`0 XûÐe^Àv“°Ï»ŒF£ß¡;âÏ…® —¡Ž–zªíAYa²²r &ø1u…OW˜øt˜vÕ B]¼·n iii\pÁŒ9’ââbòóóèj­'Íbí¢§V؉#ÊfßÔIIÏBFÃ4Ô ¹¶’­oÌ 5«€ ×ÞOII ƒ "!!¡¯ëëŠ×í‡c»{;Sêî¤iSÍÀŸ]‚!×ÔàÀîÍÈHˆä”Trrs1uœé¦®¨)Ü4“””víÚEqq1EEEäääPTTĨQ£¸âòËÉÍÍ…ÎzÖüþ17€jNÄONíG09 +bý«³èj·W®É·þ˜ /½!©©© :”üüü•ÀÇ=À§c¸vøRìÔP{z|q‚›¾&e£›~4Ǹö–:šêjPV„!Å#Ü%Êt’–pë)ŽÚERR3gΤ¡¡;w ILL$11‘„„‚Á “'O¦¤¤„ã;8ôÑ[Î(w2r ‰t¶R¾ÑžëÉyŒýú}$g_H°ßרŒŒŒlà`¥ƒr€’ÞÀvÀï÷.osçÎ-²bëIY®Aº•ûw"­é$%=ÀÁŠ#»7!€üü|n¸á|>Ë—/h𯨱c ƒl\ü,áÎÓhN¤ H&sd÷Â]í\zóÜaê€om`ÔàÁƒn¼…ŸCr7x'ÍLà˜—r]×'x”b³\cPQò1ÒŠ2°pp\44·7Ò~º‘´´4RRRÈÎΦ¬¬Œ={öpôèÑ8ð>ŸŸÏ‡išŒ7ŽÎ¶fŽíÙìü–B`…;(ß¼ b2ãf~×µ3-¿Äk¶/11q´Câ_<ŸG±£óIØ‘ßÚ¼Z„q©™ž˜î¦¯m-tu´´ÈË/°=³îwµ5œœŒßï'pçw°xñâ^kšFNŽý“uUûÑbé2°eù|:NÛ: F\Ša\»RóŠiii¡ªª )%BˆØv2¶†°]?­'ø ó^ÇNn\‰Eýûš®Am-(%Ñu ¿ßçÆû1C“’’0M¿ßOii)'NdõêÕ´··»À ÃÀ0 t]w=¢îاî@[ÑëÿükL"yCǹîvÒ[:ð±¬'Éy­rNíyîm —yIœH„¢³í4H‹„`RÜÜÔœxîê@h¦i¢ë:†aà÷ûyðÁ‰D"¼öÚkn›®ëhš†¦i6Õ¡9t}°ò´8›£A£¯@7LB§ã,ËÎÎfÈ!F\úÿ©ƒÏoôè@OðØœØ@ œ¶pØG€’² uæ§&É)©()Ù³g»w廉¢MÓ6lÙÙÙ,Z´ˆ{î¹ÇÖë)`*¥hnn&oè8 ­o½úKÁTžJ¨«Ï„¦§¤âb°ÏRz‚÷n›â²„šš³¼¼œ & QVÔÝk÷Ï- ½µ™H$„O÷㌇ýè‹-bëÖ­Þ7ntß/[¶Œ²²2·])Ekk+‘H„œ‚bðþªWi¬µãðÄk@× „¦“”æÆ.pr|!J)d,釡À_±ƒÂžû@·ÛŸÄfØ ¼à—/_î[ºt)GŽØõ@«ý”;RÉ©é$&¥€Ðhô) ¥äߟxŒ-[¶ÐWµà•W^‰ÕéÝÝáÇÈ),AJ‹U/Û¬û’(z‹]%33“¡_cÌ”k¸ã‡Ï1pèX¤lÛ°œcöON¼úÛD¢4Ý$c@1 )™î÷£¡vjv®òª±OqÇ_y iÙøSÉXŒTݺÚëR¹éÀM¿»”RózüÔìüþ4žØ=êöÎiìϱ“ÿzàÞÓŽùóç?$¥|!¶c$’=þ6|>ÓÝÉš´sþh„DgÏ~ìð§ìß»ÕÇÈ/DñÈqääǨD:}T ¿{ »· i:?{é#’2¢R‰*Ýõ ¥$;^úšªËÝs<¥ÔnÙ²å1žl`vÎõ¾Rêå>Á;_¸ (Þë•R˼ísçÎ];¦’Rb¦ ¤ÿÈ™˜†æVrug»« 0 =îôEÑ(¥.ë1à»¶®çɯ`â׿Í¿ˆ¥t"Rq¦ÀÁµ¿£jÛRïáåžúúúñ!‡¾]ƶ€ß(¥ª=¦ôz\µ8 t`W<ã2>Ã0îB¸é\WC%µ»–‰Zq J $aK¶ð<‚ˆûǸ%a‰3×…¦Qv×c(tg:ØÀáus9òÁkÔ××ÇÜ=¢iÚ]1àŽLÁ®ÜtbGý8གwÊÕ‹ð]ÀuÎtàþûï¯UJÝÛí !èj¨äÄŽe„"TD:…ÍZìñ¶IìþΠíÛ±™O¶¿ ÀØ+n"sà0gj¤©•æs|û_©¬¬dß¾}„B!€ŸmÞ¼ygÌF!D¦¾{]«’?ó”v v `/°Ú[Ñ3gÎRÊ—¥”zÌõ„?™ôaÓ¨«­ãÔñ#ÔV!ÜÙÎ…#Æ2dÄ8²ò ìô×Y"cO à/¿w5{·®EÁc/}LVáH¢R‘ÐÞt’Š7Ÿ¥¥j7RJ"‘áp]ןz÷ÝwŸðØnqXø³R*®:u6à5àVìò–Â޿㽕1gΜ£Ñ蟤”¾H$ÂöíÛyûí·innîUg¿¬|¾õϳ¸ìÚ»@t€%÷nã÷Úc=jÊõÜûÔR{:D¡fçJŽm~…h¸³çM[·nÝÏ{¿ûœNözYϼ£,¸;/–@%°Ñ;Ï>ûìÕX¼`Á‚Äh4Ú»¢2xäÅÜýãßQP<Æ€ç~ô v½·€Îÿþ‡P[¾Ú}oÓÑXsÆÍ )åO×®]û«À§ý°+RGw½¶~!ð¥W`,à8ö±ulÎ ÃØF‹ûÖr¦øü <þâä}£vñÔwì”õÂã)»þvš*?" Ÿq9I)µ_JyïêÕ«Ý%gë: {‰6°÷)~Þ=¾Ï½©”êB¬ÃNz’Æ£ùÒu2ûáiÜzçý¬]Õ½š-ȤåèG(iõ¼¦f !~%¥ü÷Õ«W‡z¨‹M€8ì9› Œg} щø¹J©*ÏgyxvI_FŠŠŠÜBI^^Ó¦MëÉv»”òOápxöŠ+úÜ*:1*G)Õû-ˆ^ä¬ïÞ:K`U/é­ï‘cǺqiiiŒe%„Ø , ¯.Z´èt_ß÷Ø'±§äY˹^<>gð–eïRÒÒÒj³²²þC)µÃï÷ïZ¸pá™÷×η(¥¾ô<qÕ«sy¦Ÿ‹-_æ9×»·Îñû1)WJ­=OºÎZÎüFìºß¹ˆ=G_JÎ ¼Rª xömøP)õö9êøRrÎ÷í%ðmú¸îõ9Ò \¬”ú䜌ø’rÎ÷í%ðVà‹PÀ]ÿWÀá<ý³s»¹ø)öe¦Ï“}À7zJþÞòUü›Ið0ûBc:6Ë5À!`>ö6³Ï ÇßKÎ;ø8åvº–Ô{¯ºü£ÈW þ]þX},D&aÒrIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/option_style.png0000644000175000017500000000342711273045225025655 0ustar julianjulian‰PNG  IHDR?9óÂsBIT|dˆ pHYs  µ€7ttEXtSoftwarewww.inkscape.org›î<”IDAThíškˆUUÇëÞ;Wm²)+ì%3惚Q¡ô¤${@Ei_üEÙCÌúY} ¢F¬°Ð”„ BíᣇÉ © ¾²ÔÑÆG8ÙØxÏ9«ç>ι÷Ü9Ïëã‚ çì½Î¯ÿ^k¿Ö½¢ª VI ´)gÈVÉœŽNä–“ãn öc›ú$;NGßýÚUëOÚùƒé@ÎUz1ÙBŽåÔÓ®ó9QSC¼l«%yYÌ* nq‘®„BÝar|‡A»¾Ëç53Êi_­ÈËû|MŽiUIWÈqœí¤x^—sª&R#ò²„oÉqMHÂ^u«9Áý†ß·3iòò!?b09&i÷û)À`;sõ>KÌÖ$ÉËR:0h M.\ÝQ fêÖøƒÈ>/’elEiÅ,ÀÌËQÊëÌuöû¹˜|*ͬah,»ãz^a,ÛPZ\JÊóýéôbp“vñ}Ûcy^V¥…N”—‡ Þò«‹õlFîŠbdò²Ž¡ìÆ@$Ãà BõÁKc²Rêy$,‡Häåê9È.àbð0,™(‘ ˜¼-Âèš’— ç,vMÅÊZ…u¸Áˤ`}.¡ÈË{Œ ÇàBñÚ†uàÁS¸L$xø&/+hd»FºNOXû¨h‘Љ’—%œÁn ±‚øé ëþûˋ„ û¿ï}^3Šz:Q*K(&Š…Eå&}˜ôb’Ãb(C1Èb‘Å"ƒE&©$"AÜG&›b“§žéX,#Å_À,Ž’¦›>‘æûøSçcøâxˆÜÃhLnÄ¢ “‰˜\…ňÐÑQ)£ @¾æÉŒ°"ShÆäé|æ§Ñï¤'î0K•vß¾’ /"÷¨ê±Áœ¸c™‡É äÈVñ0_á*U¶øâ'D¾ <¤ªKb:±›ià$û0hâuÀ²”tìØ·:™ Åíon\¼rÑô ´abT,zÞr$(vWÚWÏãDä¼0]¢ØÉçVçî V\€,ö,TGY³j_gë4†©’UETÏb€ÖÅŒëùy@èqÔ͈‰YMö¶º~¼¾N•Þ €qÉ?tãý¹=&n¥ôÑTœïÞbåí ,Ñïó"mÀ@;°\Qq«Šrƒ×ßP ™á1ß×bÎæß×Qš÷&xîê¯N7÷3×÷EÁŒô[ˆd€ë€oUµð£Â\`cþ9¼<ûàìóù(`? ßAúØxÑ:¯O,…ÛÂöDó<ð"¶‡§”Õ¦äýÃ!1[€°ç®ÿbgìóx—«°¬Âë s"GSDòCõ¯ãÞö¦Ä»ÒAô-`L©­í^dROTøØI|q¬©ø¤¼‘ <Ú†cÏ÷ùu1ÿÊë¯hËêzäˆÂùyÌKTPM¡?Å!•üW8:öŸäs@Æh¹¿ØV¯­¤ ^žQÔvuƒö‹¤„ËáÙ ÝõÀ7ZZèÊe¾ã9ƒÿy?îÝ{RñÉdi©åœbµrí£ªÑr. éõyØ£ßæ£×CÉ“ûྈúÛ€U…!úlÁë¶çg9£ãæ¸^WÕpWZéÂÞ~üF=N*È8Uí ÜÏ0®&×µ c³ˆv tkpœ¢oQÕ5 ¯"÷yiÅ&¾Øà“û( Àk€o¢Ã¾Ö-DÆ?Œnƒ2áÒ“ÊßÿÉÞC„üشпR Ó¾úË ÒJj¦"…íìKа„Ã>(ñ öʽ>Ä`ÍĽŠ?^E/ l¶uÒJ¶CósÝ]àÐÛ9P䟋Ò)pÒaðÎ*:K‹:u/+uª } ·–é(òÝ€V–y¿ÉCçX±=»QIë!Ц2¦2œDÈûîó"2;Ggæ÷ù0òLÙûk:#ŠOæ†?0¹H•e:å+{sH;¼¥¯5ÏâNS­F‡ðüTÜ3i.Õëhÿ½ìûLž¸lpè­Í·7'öØÉí§ôR%W‡Æ:NenÏYN‹hÔ) ïè…”åhë>ÀΜÀ^hÈcw•Ù ÀŒ¨ä«…ñVüëÞZ¥þÐáó-0¬‹WH·Nkð.öµvövaGÚlU-¤£oÞ&bGÃ"U]áß—· ØÏU2’«9Â/šÄ=ª Eþÿ ƒúÿögÈV9C~°Ê &ÿc“’4 •UIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/option_toolbars.png0000644000175000017500000000531611273045225026341 0ustar julianjulian‰PNG  IHDR?9óÂsBIT|dˆ pHYs  µ€7ttEXtSoftwarewww.inkscape.org›î< KIDAThåšPUeÇ¿Ï9çÞ ÷žs¸fÀ¸M˜ÀFæ’Ê´±¡«¹íÆ–?Êɰ-45§Øü®šëº••Ój£+Vêjj#¤Š#!¤¥™ã8¹l¶; ®Qî¬`xá÷žsžýƒ+?.\¸àmûÎ0œó¾‡÷}>ïó¼Ïyß—CÌŒ«„mÀÔ^ºÑôFDDˆ½öc6›ou»Ýg˜ù^·÷C˜óD”¦ªêr£ív»Çápªª–êêj999¹úý÷ßÿ 3{zÛnÐzžˆL¢(NµÙlyÆ ‹œ8qbdbb"àÊ•+8tèkÇŽž£GïÛ·¯×à@zžˆîVeç¨Q£”ÌÌLÕáp´Ö}õÕW\]]Ý´zõjKyyù‰]»vM9xðàÅïÕO°Á˲¼Èn·/˜7o^D{h8|ø°{èСÚܹs­%ï¾ûî”#GŽ\ù¾}UØ[­Ö§‡ºxΜ9vIj3M×u6LŸ>™™™¶-[¶äçç?ZYYÙÔ—þ‚Æó&“éçÑÑÑï-Y²$Üd2µ–;N¹^xáŠÉÏÏkÕªU³˜YïkŸAïp8*.\8<""¢CùöíÛ]›7o¶oÚ´iíš5kªÏ XäQF|||Œ/8Ȳ EQÄuëÖ½Hp HàUU}0===¼«:]× p:î7(àEQ¼=&&¦Ë:]×E±ºß €7 c°ïk­]@–åÐ@÷ðt‰÷|hhèÿ§ç× }åÝÌ $$¤Ïž'"±ý}PÀ‘î>..Î\TTT/‚ÒÇ>FXÙ¾,(àhþàÓÓÓÍ¥¥¥æÂÂÂIDÒÛ†‰ˆEÉSåsI’:,…ƒÞ¯ç ##Ü©ªêÇDÔãð'¢(UU?9rä¢ððpMÓ´ííëƒ^„ëÂÀ=÷ÜcÉÊʺ]UÕ£Ddë®M“É4!,,ì‹3f¤¥¦¦*v»½‘™/µæ†olˆèfY–Úodü)==Ý,BrAAÁ§D”  À7Ììlמ),,l]BB”§žzÊв²2TUUíñmï†ÂQª¢(Å3gΤ(=Ëg£G6‡††&:uª ¶¶V«««#»ÝÃ0š%IªUUU7n\ôرcCˆçÏŸ‡ÕjÕêêêþâÛÖ€ÃÑ(’Ìo| ¢ât:q¸¬‡ƒ êQ©©©bjjª½}3£¡¡a°aPUPSSƒ[n¹…ËÊÊþÁÌ_ø¶3 ðDô(á-yXšyÇ/Ȫ†ÁLÎí݈åË—###“'O†÷ÕÞÛ¶!Ërë}}}=4MƒËå2ªªª²ºú›÷.TVx>zbn¾6I€U¬ãÎ ¡òÐ.^¿ ÈÌÌìSçÎCLL ²³³1kÖ¬ÂK—.Uvõ\¿Ã‘ ¢ô÷'伄¸{'Ã&V‘aá½–0&ëQð•o±ww>RRRMÓpá˜Íf034Mƒ¦i0 f³!!!$ ‚ Àív£¹¹Š¢`êÔ©ˆÅÖ­[Ï?î×¶þ<Ì ¢›I2,¡‰‰ Þ’b’~Öêí6px¯ײïC¤jÅøñ㋬¬,„„t^Û\½zµµµhnn†®ëeqqq­õ%%%U7nÌþä“O>ök_ÁÑ]$JEæ¨ø°¤%Û¤ðÁ7{A¹ ZlÞ2«·¬xË:”ï݉}{÷bÈ!Z67‚Ðý’Äív£¬¬ìÛŠŠŠã'Ož|½´´´üzÏ÷KØÑ4Â%ùn1)÷ A‘e/wòvÛuËïèA‘ht¹`2™°k×®Ú‹/–VTT|&IEEEEØíöY–#m6[¸(Š¢¦inMÓÜß>}úè¶0s}Oì (¼7±­°4zÂHÌ΃U¼f¿ÞnF¤# yyy…û÷ic{öDd…(í æß$ä¼(ÄgNõãmðv9àâÙ3xnÖã\ï¼zÎãñ¤ö'8 ÏÑ’ÌûsÈm‰ Þb’ïj÷zÛ´½·mðÙG°|Á³lF‰¦i“ú<¥‘(™#‡Ø“žß&…Žó3Ÿ}¾Ýàì~ó lXû AXoFn Îä{¢>ÁÑÄmJrº”»ATÙëá®ÃÚ7Ù™t7^ZºÅî3<­ëú†qõHß Þ›ØVX=þqÜš½6“ØÅâ¥x‡ðg¸¯ÖbþÜ'øË¿Ÿq1óo™ùP@Éz ^÷$6q;1Hxr5âÇ=âÇÛm‰Í&¶ „MþSõ/ü>ç1½¶¦¦Z×õñÌ|¶?àºS¯à‰è&’LûsÈðÄùo 1)£º~u™ìZâ‹O˱ä™Ùº¦i'<ϯ™¹¦¿àºSá‰h$‰Ò~sÄ{RÞ6)|p|Çùì×ÛmàîÜŠ×V¯d; ÃÈafw?²u«ÁÑâß”¤1âðÜ ¢ª**þ½Ý28èX¿jöìÜΞgæû«gº.¼7±-°,ê—QâŒeMb— ×æsÇðg.'çÎÖO~v\ð3¿7 d=_x" ‰Ûˆð`üïþD ã§ùñ¶ÿWÛwßþÏÍœá©þúâ]×ïcæS ׺„'¢Á$™Š“%9qþf!ö§cº\ªvìZîÿyúsÌŸý„ÖÜÔô¥¦i÷1ó7 ×:í‰(ƒá¬hUSs7J7Ý>²ÈC‘ཾvÏ­÷Š·L–€òö`nö#F£ËUäñxF#8à³±!¢A‹åÒˆ#{dŽ;†ˆÔ ŒÈùªzo·DE¨Àxûõ—±%#ü@˧]È7ìNKKs¯]»6\.^~å5É›ŠI¯î¬ØºÜƒ[%†èvaÅ¢\½¼´„<ÉÌ[§wêö’$ IIIi=3²Z­X±l)ÒïHÆÁ•9½5ÄÓµ0g4Õ\ÂìiiGÊJ†aÜûC:ÏùF§ÓÙiá±xá„M¨()l7ï[æ÷×gÏ`ƃ÷{*ÏŸ«Ò4íNf>2@¶÷Yà5M+)//oô}ˆˆ0?÷ìÿëX wkò;ñÑäL›¤_½Z÷±ÇãÉÌçÎô¾Ë×óÇ/_¾ì:qâD§‡Ž˜˜h\8sŠìÎ_ÅÏÌ®k›4M›ÀÌucràÔ鋈&ÅÇÇ¿½{÷nÙ÷Ÿ‡6l@3L¨ýï%ãÀûÀÌÏ2óº48êôžgæ=—/_>–——×è;0ªªâ½ÝÛù`ÑMÌü«28àçÿó ;vìì¼yókkk[Ë?Þìjh¨Ñu=™‹ÌÊ~’ßÓ["2[,–?ÑÓ)))Z}}=UVVÖ555ÝÖÓsñ`W·G×D ànnÅÌܧ/ƒIAóáñPP|“s£ô?Ðÿ íž0ƒèIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/option_view.png0000644000175000017500000000267011273045225025466 0ustar julianjulian‰PNG  IHDR?9óÂsBIT|dˆ pHYs  µ€7ttEXtSoftwarewww.inkscape.org›î<5IDAThíZ]HWþÎug£A+m}i ¶Y0Ûò(Ä&Mj Š”"tA)%m!ˆFчE«"úàÖ•ÚB±ô‡ÒZZŠöI*ô¥Ý44-¡Píú"¸&fÜÙñöA]gg7î²ûÁº—sÎ=÷ûæÎ½3÷¬Ä9½ 7?5¶+ïœá|·a MCB®¨ÁÉÄÇâ 7c²Ñ`øucc£•s~—<_`°þbËuª¢úéõ"#ûm!hßkST»ÀF¤j#¬M1ì{>µ}CdNµ=œ§Ú®æÉ û%|ÿí7¼­Õ±µµµU£Ó›‹?²5 Ÿª8s…„¤¦íxaêù6A<óìs¸üz@Q:Š¢À`0à†«ø­×?xßÅùñ™§«/žÙÿþó7îÞù þ±÷áœ~üî+œ}å<Ξ;/?Ÿ Æ8qý½wpùÕZȲ ¸té5’$é%8×1˜!O‚O]âÞ_·ì­é©¯† ˆ0MxÑvŒD‡sY{á"Þl¼ûËçPP°·Y­V(Š¢×eCÀQÐÙ7±¶Àûß®¿Û‚3 wnÿ÷ÇŸaî§ Ë2ýá~NBAº:º!FÛØNÒ†÷ø‘ÄwÁ аšÍžZ‹ÕbÚÑsò­Þ=$A©’ØØ¾Ÿ©ÄGÄÓ!у Bª İ/0<×9¢Ãxõ¸û}/Dx_ŠˆpЦˆxÎ9é”ÀŽþÞoG>ƒÔ6R9£¡É)N|hŸ(£îé÷ûõ$_^^ÞÏO!ß±Ú‰Ú²‘3Ñ>&“ 9Œ\bÞoR€g›D–°Ë¾›mY‚œëk>w‘Ÿ«H‰ø‡¦"MÆqdñ 8}ú4¦§§SÁ'£ˆ{ž‡ÛíŽéçœcuu²,crr)'˜NÄ¿¹¹‰ÖÖV´µµEõ;Nô÷÷£¦¦&X%9IмíEQDQQQÄÇëõbxxf³·nÝÊ×”#îÌooochh¥¥¥hnnÚ9çp8ðûýp:(++‹™ÃápààÈœ)X,ÌÎÎjÆÅ¿²²¯×‹––””” ¶¶àr¹°°°›Í†k×®ÁãñÄÌ!Ë2ü~’ô†DÇ‹+¾²² ˜™™A}}=æææP^^Ž›7oB§ÓÁívC„¸”””Ä%CáåŸ#‚ˆ`2™ŠÕ¬ÞÚívTUU¡³³uuu¨ªª‚ÏçÃ7P]]­9ÀÀÀ@”š`x;•-$TºîèèÀúú:FGG1??ÊÊJtww'4Ààà î߿ӟ(Y­8µßh4ÂétjæÔ Iúúú°¶¶†™™ŒŒŒ€ˆ I€økÌãñ`iiI“H*a±XŠ‹+Þ`0 ··½½½!¶¦¦¦ˆX»Ýž$ÅìƒA,// @zª¦>ŸŠ¢¤}Í«}D„ââb­êíNÚ®*,,Œ z\6¼ü‘6W‘Ÿ«È‹ÏU©’£†ÍfÃÄÄDJHe GªäÀãñ ½½=¥Ä2Í—£Ñˆ¢¢¢¸1V«5e„2‰´¿ááÁƒ!¶dNhÉú‰¢(¢££C“[ÚÅ/..fåT—ˆøünŸNôôô@–嘷ê“l¢ÙÔ}KlNÓ.¾¢¢@þTwì YÉéêêBWW—f¢|%'É>éÈ™ÄÿáíäômŸŸ«È‹ÏUä´xÀEQÜ 1¦ø—ÓãI’Äÿž s>·OÓ—IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/print-preview.png0000644000175000017500000000250311273045225025732 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ÀIDATH‰µ–_hSWÇ¿'¹·ùssï]Œiº´&^lÖ„&R ÿ»:ûÒù$®†ø8Šï"% ¸çZd(ÂtP|´È`uDº)ŒjjÄQÛ™Xš6ñ„Üäþ={±¡iul‚?8p8‡ß÷Ã9ß/œCcø˜åø¨ê¸ÿÛÐÛÛ>pàÀ¨ßïw2Æ Ë² Û¶ Û¶¥¥%211‘™žžži40ÆþóÐ’Éd~aï(Ó4ÙÉ“'^ßCÖ{pðàA§ªªßlÞ¼¹OE™â¨V«teee¶µµµýâÅ‹ßÎÎ΢P(€‡Ãp8Œ‡þqôèÑ~ÆXý½W´k×®vEQ~8qâD´»»›_]¯V«¾\.÷õãǹ\.‡d2‰d2Ùè[XX`·oߎD"‘ß|¾V³q‚w8¾qöìÙ.·ÛÝtªB¡ ˆ¢(ȲŒÑÑQ$“Iø|>ضÞÞ^Ü¿ÑhGŽùþÙ³gß­ím¤Èår}™N§cëÅu]ç9Žsñ<Û¶1<< J)úûû±oß>€×ëÅ¥K—r¹ÜÈúP4¢(~ÑÕÕµ!¶år9äv»9A`YxžÇüü<=z„B¡€ÉÉItwwãéÓ§3Œ±â{–eÍ-//76LÓä(¥’®ë‚®ë¨Õj°m„x½^(Š‚––,--áêÕ«ôùóçc„¶õ€†»wïŽîß¿ÿÇÇGÊår¸¥¥…óz½þÖ­[hkkC0ÇqxõêÆÇÇqïÞ=Ôj5ìØ±‰D‚ BQ²öJ$IB{{û§<ؾ}ûÍóçÏ+±X ét===`Œ¡Z­"‘Hàøñã²,CÓ4d³YÄãñ&ñÕ !$Ðèìì ˜¦‰J¥‚jµ ǃÎÎN$ ȲŒŽŽÄb1ˆ¢Y–Çɹsç ëú€ªª €ÖÐ4ͬT* ”¾sT*œ9s~¿~¿[¶lÁ… Þ°T×,J)æææP,›„WÁÇadd†a"‘–——ñâÅ‹&€a&{φÉoÞ¼Q)¥¸qí˜eA7M‡§NŽƒËå‚ËåÂÀÀNŸ>S§N™<Ïs{÷îÅØØ2™L`Û¶¹:oJ¥R‘R Y–Q¯Õ`©*TU…aš0MšaÀ4MlÚ´ Éd¡PHM$ÒƒJ¥p÷î] t]·6TUýýòåË©h4êkëè|>J¥Q*•P«Õ Š"(¥¨×ëöÐÐR©®\¹‚ׯ_³l6û2ŸÏ¿¤”Þ\Õmz!A[AèE±Çápls¹\Ÿx½^‘çyÉï÷{B¡ ¥‰‰‰òÐЛšš*,..þ¥iZ‡a3ù|>½Ö οÕÛloõx<Ÿ ‚ÐV,eŒý¹f?›ÿ`À‡ÔGÿUü¿Øn•¯*>IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/print.png0000644000175000017500000000215011273045225024251 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<åIDATH‰µ–MHcW†ß“ŸsÕ˜hllB-*m“š“ÒN ݈5E¨Ð΢³iÅÍ€ÙEê”Y´‹"³éBFËHZJJ™î„V£H¬ «ƘJ­-;%!7&zós¯çtS­ã$þ øÂsï÷|‡÷òCc¸N)®µ:ÕU N§ÓÜÙÙùÐ`0(cÒÑÑ‘D)•(¥R<'“““ƒ¡PhíÄÀ»ôÀ ΰ"’e™õõõýøŒç*€žžž¯%Ibáp˜MMM±@ ÀfffØúú:óûý¿({.€Ùlns»Ý€\¬ûh4J;::bõõõKg½—ÊÀd2 ø|>skk+æææ Ë2(¥ ”Âétb~~ž Ôuuu]9dBÈËÝÝÝV‹Å‚d2‰––pµZ µZD"žç1<<¼³±±ñÕYÿ…¿©ÕjýÂårÕy<‚€íímD",--!‹! ¢¹¹ápx1–¸ô !µÇyGëÖÖ–——QVVžç¡×ëÁq8ŽC<‡ßïOonn>$„ÏBc „'*ÐÀ2짪ªª7m6ÛËå²´µµY8Ž#‚ àààÙlÙlù|…B©T 0™L²ÕjMæóy) ÅÖÖÖÞgŒ=ù !·àP}¯Ü#‰÷Þj¯|4öH¯P(°²²Y–¡T*O–N§CCCÀív£··÷äÒé4|>ß\$yçé ^SjéÕK³/üª¿ù¡ F@£Ñ@£Ñ€R Q‘L&QQQ\.‡þþ~æõzÙéâ Óé`±X^,2_Ïaõƒßñù“{¸}ï6‚‹A466Âf³Áápœt9;;›óz½¤X~555儚g§”»‘Çzϸ›» φ¾‚ Èd2Èd2ÐjµD¡(nE‘ÈŸ 8–tSÂ__nâ¾e퟽‹Ñ±Q¤R)(•Ê’s^E àðR€c)Ó*ð”Ç«–WJ¥Àq\I€$I2ûo:^<*þÊ¿)‡½Ì{£¼¶¢("ŸÏÓRJ©|¼/ î[5Œ;ÕhÒ7BÎR„B!TWWÃn·Ÿ ( G¥ ÐÕ0oÔá“ö¡z[…½½=‚€l6‹ÊÊJ¤Óiär9zª  ÓÓÓÿD£Ñt:=^°C%öKaGNMòÒÈÈH“F£Ñó<_©V«uƒA»ººª«­­Õ‰¢ˆññqaaa!ÇÿÜÝÝýaÿgƘøtÃŒnÁ¬ˆÃ¨¸€;çF«ð†V«ýÈh4~ àÆEwÉñ,jcŒ=.™ÉsŠ\÷³å_v’ïÜzø‚IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/repeat_alternative.png0000644000175000017500000000045611273045225027002 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<«IDATH‰íÔ!Â@„áÈ*$ š‚Í•¸áUÕh‚Bj:˜­¡iE»[Õq»b¾¼¼äÉ69³ÈÚ>$=€°JØý´}ñ±ÞI• â1µímBèÙ¤] üH:Kà,éÜlWCÖ¶ à\rL9tOp¾À^R1iq$½l—C‹›t.9Ey/*Óœ `Ô9Íçzf ?ð‚6r ¯IIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/save-as.png0000644000175000017500000000210711273045225024456 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ÄIDATH‰µ•ML\UÇç½™7|8 :Pb ôÑÓÒH\ Tˆ&Jªi4G]à† CtáWW&4¦µ‰\1m “ 4SFб1… RKS¾+P>J™満â 3„Øö&wsrÞïÏ9÷Ý¿(¥x˜K{¨tÀr¿yxH|J©¶ J©ÿµƒÀ÷@P€²Z­¡ÔÔÔÓ‘y»*«|D¼vƒ)6ä6~FiµE‘ÀY /¢LÓ´&%%½,"*¥6¢¶H­©Äb¬ÚëÀ›ä[qÈãá9qX:XÚ˜Z€¬Èï4MÃår‘––f÷ù|Ûñ¨3P!ux[D4Bús$«Z õlµwéS˜W ¬þ{ûD]×)**beeåö½ÓLj˜Oè:Ä×HÔÎrÌš@pi æÃäååGYY%%%tvvþÉØ×-‘CÀ;,„íøCPb…§ ì}6LÓ¤¸¸·ÛÍÂÂÂøÐÐЧ;Z·øà[àË ~[Lj7r7fn’ŸŸÓé\ëéé9ÝÝÝ=´ï D$¸Œ»’²L…ÐŽ[Y´/325ª|>ßgÍÍÍŸïbÄz*D$‰Íþ?ÏÉÉÁívs-pà k6ƒÕ–»õæEãDm‘ˆÄo|ÜårQXXˆišd¤8‰K7˜Õg&Ò&ǶªEDtÉÙS8‹ deeašæö¶§Ø™Ñ¦ï,9'ä¤8É/¤XÿFˤñÒžþššš¿SRRÈÌÌÜÏÍÍeðÚàÔŒÅ1-U)­,äqË—¸q²Ä,çî±v 9==Ý^__±®®îP{{;MMMdggcš&ŽdÞ_½\î¸<;þÆøŒö(}“¤~‘Um$|q]©•ívGYDâÚÊËËŸ ƒ”––ÒÕÕ…Ïçcu®p…[žÉåyçü† £º}Sdíy5¤~æÔÖº»‚ªªª·<O…Íf#ÐÓÓCEEÃÃ÷œN§>è\›››»­V‚X6áX`ã+îªÎGÂwÍÀëõžill< ך¦á÷ûG{{{Oµ¶¶¾¸8~/ìW£j‡Út°ê<×Õ¸êÚ5Ðho½Çãù¤¿¿?ÔÖÖ6QYYYõ°hGh±þÉU#Ì€f@`FõX†R[[ûquuõÉfcÓŠøÚz“cší ÎÅ4¦ûp´Dí(ßé/ò#ùÀ¶D’yŒW÷ʉù=¨õÿž`ˆøìÍIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/save.png0000644000175000017500000000143211273045225024055 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<—IDATH‰µ•_HÓQÇ?Çij2Bd"¬iÛÔßþ!)IF¨LzéH Føàcá‹ïù A‚„LGM†¨ì!_ ¥ÆBÄñ©!¾DB)Œ¡´ÛKÊoóߦyá¾|9|¾çžsï=¢”â2WÁ¥Ò‹Dä6p¸ Ä”RÑŒ¥Ô¹6p˜’€TQQÑ^EEÅ`FÜ9á@â (Q ªµµu0ÄæÝ¹¼œz½  ‹Å‚Íf3êõ¼z "M@0gé ¼^/©Tê—RêOÞ"âÞV½ît:)))¡¥¥…ÆÆF>å}qa²Êât:ñx<¸Ýn<»»»ß‰Äk}Ì™=‘ë@pëu»ÝŽËåBÓ44M£²²r?.--%r60ÜÔë6›í¬iÕÕÕé©©©`(z“Í8Ñ@D®³@“^¯©©É€[­V‡CãããÏãk "¥ÿ2¿£×-ËaY\.v»H$ò~ll¬ï¤DO:ApK/˜ÍæŒÌkkk™žžž}ªNù15¨««ûÒÝÝý³¼¼€ªªª x}}=sssFFFžèï|N&“ÉØÓÓ3 CCC8ŽŒ²hšÆüüüÇáááÇJ©ýÓàõD¤t```¦¹¹ùîÊÊ ]]]”••‹Å³_\\ü *¥RgÁø|¾¾@ ÐV\\L2™$ÓÖÖÆæææt:mX^^Þ˜œœ|´³³ó;8€d÷§··÷Uÿ3£ÑX¸ººŠRêÛÄÄ„?N_ÙÞÞþº¶¶¶•+8þ»/×××÷¢ÑèV{{»ï¼3ãÔyà÷û_tvv>¸\)u´Dÿ{]úпtƒ¿ >¯ÎòýwIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/settings.png0000644000175000017500000000200311273045225024752 0ustar julianjulian‰PNG  IHDRÚ}\ˆsBIT|dˆ pHYs/Ú…tEXtSoftwarewww.inkscape.org›î<€IDATH‰­“_L[UÇ¿ç¶÷öÞë¤Ð®··ÔkË{Ž ulJÌœk$> q Ι™8§ [Ýø#º©Qj¢Û$ áEg4ºln$5†Àƒân'ƒê0¶…R°ÞÂñE±M(x’“s¾ù|ÎïwÎ!”R¬vX,wvvöQEQ6†Ãa§ Ÿµ¶¶^œ1®^XXØXUUõBAAÁzMÓ®–••]íîî~ciެ¦ŸÏ×P^^~Ôl6 ããã¿äçç_jnn®joo-Í2©Â !$77÷q»Ý.hš-))­­­­¸|UI’¶¨ªšDZ““““¡P(q³|Ê“ÉdEÑ¢(ò±X,ífYBˆ!e®ëúü½¹\.C[[[:!D\š“$É­(JwʯhnnnÝüžaøýþ;ãñøÇUëºþ¥”æååU—––6NMMM¬ø1¬)KÌÌ:¡HÖ­O?ö°9##c±Á`0‰D¢‰D"êñxrX–å;::¯HÀZÛÅÛ=Õl6v?Ÿn@åö­°Ûí ”‚² ŠÇãày>Fëêê6.Û"NÞð¼¥è×}ûŽ¥9D2׿…Îwë±§z׬Ãá º®S]ש p:ÆÞÞÞPggç½À|4Bá2sÞËܱs·b//ó2̯§ê÷'Jýþ5Mkr¹\é6›Mžžž¦ÃÃÃÁ@ гÀ¹‘€"pÎ;Îæî®ß¡nÙfyÀñXb“hzõÈŸ}ßw ,×ëZD‘y÷¦‹wmÈÊ&‹OmžÂñŸ‹^¾ôÓ#ápø›åà×U`L³úxE=³ù¥“9Êzó5-a"c8vhßÈÀ?l£”†V¿FÀI®·ªw¿Y|àíÛ¢ŽEð?.÷Ï½Óørÿ•ÁA?¥tb¥ð)3ç¸tߣ{‹ž<`[z™_‹µ¼hÚE)M¦c–'ÿ»ME›‹å‡ž0*"…lúWpþt`¼ýüÙB¡PCªàùÁÜãóZO42š»Z°.ò+pp:N¾rpôâçŸÖ¬L,e5Ï>…ß{. =9×öï¾Òõí×###­–e“V«õ~·Û-~yáÜ_Ÿ´4 ô÷õ=833\+@)…ªªÏTVVöx½Þ3n¡”âÿšÉÑ–ÕH\5³IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/skin-preview.png0000644000175000017500000001660211273045225025547 0ustar julianjulian‰PNG  IHDRÂD´ñ>€sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<tIME× o¾a“íIDATx^íÝ1Òô´Ò†aþ’’““³VÀXûø6øžÓTMýÆÇµdyÆž¾¦Š€ïµ%uë¶ž§myæÿ¾ûÿþç#2 2 e3Bè?9À0€ª AFÀJ3P:øªîGÜœ?0€ÿg€r‚À0PšÒÁsD\10€ BNÀJ3P:xNÄ0€BÈ bÀ@iJÏ r‚À0@9A `(Í@éà9ANÀ!'ˆ `¥(<'È bÀ!ä1€ ` 4¥ƒç9A ` „œ 0€ ”f tðœ 'ˆ `„Ä0€Ò ”žä1€ `€r‚À0PšÒÁs‚œ 0€ BNÀJ3P:xNÄ0€BÈ bÀ@iJÏ r‚À0@9A `(Í@éà9ANÀ!'ˆ `¥(<'È bÀ!ä1€ ` 4¥ƒç9A ` „œ 0€ ”f tðœ 'ˆ `„Ä0€Ò ”žä1€ `€r‚À0PšÒÁs‚œ 0€ BNÀJ3P:xNÄ0€BÈ bÀ@iJÏ r‚À0@9A `(Í@éà9ANÀ!'ˆ `¥(<'È bÀ!ä1€ ` 4¥ƒç9A ` „œ 0€ ”f tðœ 'ˆ `„Ä0€Ò ”žä1€ `€r‚À0PšÒÁs‚œ 0€ BNÀJ3P:xNÄ0€BÈ bÀ@iJÏ r‚À0@9A `(Í@éà9ANÀ!'ˆ `¥(<'È bÀ!ä1€ ` 4¥ƒç9A ` „œ 0€ ”f tðœ 'ˆ `„Ä0€Ò ”žä1€ `€r‚À0PšÒÁs‚œ 0€ BNÀJ3P:xNÄ0€BÈ bÀ@iJÏ r‚À0@9A `(Í@éà9ANÀ!'ˆ `¥(<'È bÀ!ä1€ ` 4¥ƒç9ÁC üüóÏ_¿ýöÛןþùõíÛ·¯å'þ?þý÷ßÿŠã,´Ö \–ËÌÂña"õ/•HþÏ/¿ü’â ÙÜæa½‹Ó?þøõÇ uçÅù=}u4ñ¤ž±:ÖzzSLÜM'®k1½BŒ£kó?üÐŒu´í8/››GTx[Ÿ¨ú~úé§µ‚ÿ¾õ‰v2qÅØÞýÉæÇqÖÒ3`ònÚúõ×_›cØ‹%ζ×q´„sÉBœmD[{Ÿ«°cÖêÜ“Û\äªö‹oK°– sˆWO®B·>ëª-Óæ^Uíg«º8nïÓŠmë¼gÏ{„p´¹õÉäÈ1ÖÑ›3`o>]q¥X£Ù«”zÿ­¸Ö·1[‚³ÕÆ3ÌTsË6ŸU]ÏÆ¶ÎETÔÏæqT£Í­jýJÌ‹õú$$ö¤ÄÞV ^™gâ°^ÐC4³Xİ®pz«Á½ )ÆcÉÓ³*xOX—yÈô{D#¦µ9‰Ó9ÖÕ›1`Ân6aC ðUcŒª°çó×_¥ãÛ¯ËOˆ¶ªÕ¸õ:’Ó–ðo=o\Æ©B[ùl{=ÆÖñþn ýLâLâТ|•¸×Ok!ï¡e[=ñîí}´×#ªË~[¿µ1èÑg¦Œ¾ZŸL–UaæxÇXGo΀ ¼ùÞZ× ÷³Û‘Ë>{›sDוäZX²»X÷¸jmZo„yôŸ53„p¹ÙÈõa,À€I.0É—˵X=Û ²¬Ž2¯?Œa«ÿ‘M7KÆZí¯oÿ>bÈÄ;«"\V®®kdLrI¾•Æ|„´>™ç…#BØê7óœîS­ç„ÑVô¶úiïÖ< ü Å{Ø«x—yµ¢u»°Wã–këÓz¾ÅSëÖkôŸýj9Bø^v[síï·™ŸÛ ôÒU àÇ9Ú«Ï {…pïEüe;¯ÂÖ»‚Ïxk 9VÇY•»ÍÝÇF8oò¥ÝÏÄ*óulÏvSö ak·h´7c1l‰UŒc´ŸVÛ£í:ÏZùÁ ˜ÜžÜáÅô•9i‰Uk—eœ¿'­¶×qfúš‘›–XÜVÛ3Ư ëæ‡1`B?lBo!~Ëœ·ÄêÙ÷t.ÏÝÚÄÒj{=÷-9"P{1ïõ9Êe+†Ñvg­ü`LîOî-D1#V{¿þ°^ô×Ïï2m¿J ^Õ!´¦YÓºè>á‹+î3¯Y±y^˜mûÁKKDT„÷áÊ`®:¬Žd1'lÀé«Ì+Ë—=m™Ï ^ZýùöšVÛ3Ư ëæ‡1`B?lBo'Ö=b•y/Ú{¼‡×Óvpy‘/-±²kÔº4ƒ3m¤9Jx»÷˜Û^±Ê|3K´¹Þd“á!sûõï¶¾(àY,-‘ÍäÁ1÷¸vÌÓ´yšÖ¡<á¶aÐ{…0r’yßoý*D&—™M9¯Âì—ŠoÅD­iÖó/N@ˆ÷20"„1g™ç…½m·~&)Ú{Åwa’¾—ç#sçÜ·ÍÝÛ:VAª ÿa W¬‹Eöyá£ýì"ÓzNxö¯OùzµÌ†Ÿlgm,Ä€É.4Ù—4£Bó–ùnÐ^!l}Çé‘1æÖ·×½õª"´¦YÓºè>á’‹©‰¿ï<˜÷V×+„™6G&©uëõÈnÑÇ5@ï{-XÇÞ6wo똠º5úÏïî-?#ÕP´‘y^سȴn»Ž>'líx®=ã´YÆúu”çÿÃäà} ¬gôwø2¿#Ø;ÏÏDëÙ/^<ëçÙmÑQq]÷§"|ϽŒ9þ2su™v ºß\ÆÆ“åçÈó·ÖóÂ>Öã[޵W¸ž ëÑ 8ËØáý®ƒ63už§6FÌTØiö6¥…gÏ GŽgb˜½•ùì4ŽÄ»Ž)SVÝ£ùsž5ö ˜¤LRZ\®KÜ l½·C z_,ÁÙ{^x$7{Õ\ôÕz®ßSoU¹CÄ}DEœyVcä?±5ö#9s®µõF ˜¬MÖ­±uËîÙß{æh¯ÒìicOpöªÔVE»k`õ¬±É)!´öÍâðÚÃLâ´…U.ò×C¼¶¢¢»'Œñïñ÷¸ 9úî¡9Éω\ÉÕ 7˜8âcc0€Ï`€B `(Í@é๹ÏpsæÑÃÍ™Góˆ a€r‚À0PšÒÁqÎå@1€ |„Ä0€Ò ”ž›û 7gÍ#0p„BÈ bÀ@iJÄA8—Å0ð BNÀJ3P:xnî3Üœy4ÀÀ!'ˆ `¥(üá\ÀÀg0@9A `(Í@é๹ÏpsæÑC·ø q QÌp6ÂoÆeú~3k ½íôŒÑ±S4lJ#)°ï:aqñn}bQ‰)œñÞ‚¶wÁÄñ?ýôÓW¯øF_¿üòË×ßÿ½{->Ú‰åqÎì-Ç1ÄâUxæcùí·ßšù:«Ý#yl{fž£ïÞœ¬ÇŒFØú–{Ç“ûVžð×j;îž´òÔjÃß§ëÖô‡ÄáªûóÏ??½¦Œ;.ˆÌâ Ë‘~ç®Å0þ¿÷vÕÖ8ÎÌѺ¿¸Ö'™Þ|…ж>#íöŽãÙñ¯ÌsŒ#““½ñ¶Æ¹þzò“ÏÙs”COL{yêiñS4lJ#]@ßiâZBÕÖÑxZ}Ä¢q´8éÔÃ9‡Ïh·5þ9Z޳%X£1ÕîèxÖç½:ÏÑëó,¶Le˜½MúèçÈxfÍÃì1l‰á¬±j'­oé§,šwš˜¨–ZŸ^W»¦Ÿb²ŒeF{Kfì3rT]ß‘ç£BÕYëÓ»é¬ÕÞ+Ö—3Æ×ãòóŠ8ôñ/í#„{@dŸã͸½ØrûGÅdé:£œu¼2GgWg,pwÎóQ!Ìœß{·ã stÖ–ô,n´“Ö·ôÓÏ»LN øÇßG7Í,óy¦rDpc ûãÓ{;êÙ|½2G•…ðyÎYëZÎŒ»ÕÆ+î\a ˪¿g<Ž¢aSù8‘\>oUk½®vܽÅ$Älúõ;~#mlóŽÍXœ÷âo-Ú³òÖÛλò<#×­œöÞéhµ×›Û‘ã¯0†‘q;ç©ÖÂ-@;,Û¼[ðÏxæ–Ù‘6²Áe¹ÓrFõúÈ×;r4cq¾›¾+ÏGs¯G´>ÁfÏÝj¯§­ÑcgŒaiNGÇἩÚ5µ±.¨¯:‘ˇükU…½Îvt1î]8¢Ÿe¥9"¤[c½rŽF¹š±Àö½wÞ;ó|T[ÆnäYõæhÆ–Bf3£½!M:é#o˜­‡Ög?Ã{Œ¥µù¤wñXŽ{Öûˆ1ÖwæhÆB´5÷gµ{dazgž á³[ýñ·Ì õëÜ]aŽfŒÁƘËéÎåôV‘]Þ²X?“k=ÛqÛ1s;)Ä-»¸./¸#›m–ý½;G3¢;á»ó|DŸÝA &GïLœ5÷ÙëéHN}¬_…ééÛ±§éÕi §ë+MîòyÚú[*ZÕÚ¬M3­‘³·a— iöœÌ\¼;Gg-†gµ›ÉéÖ1ïÎsï¢ |ŒyË0Æ¿ÅõsÔŒ]aŽŽŒaëÛ¤FùpÞTíšÚØ-Åo Ôã"ÞŽLµ6cÓLæ6l櫤– iOÙºÀÞ£# ѳØÎj·•Ͻ¿¿;Ï!lå,L]†ÕlŽZýeÛ9rÜÈbíˆg¦[&áÈXœ;M¿¦5t{\ ÐÞ»v¯Ú4óìK²ãBÌ<ï{\t½ÏŸ]\WÈÑÈB”Y0Îj7Ó÷ú˜+äy†>r¼Æ55ò\p™›+ÌQk ½áÃ9Óukzƒ·Ä¥Èí=ÃÈTkGoÿä­wq±={Î’YHG.¦+䨵ЌĕYôGÛ9ï yÉIæ×N"¶Ñ*ñ¬¹ï™£ÖzÿÞÓ·cOÓ«Ó¾• .o{¶^\Ŧ™Ì"ôlsÎr!uñ\%G­…f4Þ³ÚíÏUòœaðYl-3—¹«±nÿ s42†˜Ó½ŸCëåÃñ§hÖ)ÞJ¬åF˜–[}Õ¦™V?{·<— 錬 ï*9Yˆ2‹ÇYífú^s•<ÂÌŠ_º½~¼ÒˇãOѬS½>ÁÌîÊWmšíg¹}&³õ|æÝ9:K°Îj·wẋ3r2ãy÷#‡3ÆÓ;³«R¯O\Rs.9¨— éú'PZ[æï±È\#¯R,7(dúÈs¥µòŸ‰g똳ÚíÏ•ò<£"Œ621eŸ«_aŽfŒÁ õ—ÓË è¥"j˱¶Àßû{ëkfìÝœ³\tfôÿã•rÔšL^¯*„WÊó,!ÌÜÙh=—ÿ¤Š0bñk—ÓË è¥B¸¼M‘½ekÓLo{{ xO?Ë/h„õyWËÑ…p){órµ<ÏÂL;ÙW|ΚûcfŽ2±d¯»G,ÙãwªVÚøKEm”åïôõVPËÖ÷.Ðѯ’ZÆÒÚ}÷x•bë šGr²>çj9:k1<«ÝÈçò¹íÞœ\-Ïg,úÏrœaõÝs43'C”ɉc¦hØ”F./x[°ý ²õïüm]¤3~7ÓOˆòã¹CÖ]g. +æè¬Åð¬v—9Ü{eàŠyž¹è·rÏðØj'ÓFk-h½ÖqÖãòüð-šô–NSÐB=oYiü¼Qô³tñ[ȬM3™W)ýÏ|eâŠ9:k!:«ÝåÜí-²WÌó,!Ì<#Ì^'ǺrÖ¢ýåíñ– g×9Ç¥4.uÐ%„kö„.Ÿ½¾f°¼¹wÌøžÏõ–ëgãŒÛ±\_1Gg-Dg´»®æ÷·+æy–f6|eÍÛ;çèB¸Ü,E_ªM/íì2‚º¼8³ntOˆ[;ýfÝúžÓX$fõ±^5Gg,†³ý5#ë×_¶æçªyž•“Ö+@1Ÿï|}"3GËy=‹¿õžƒ™×òì"âÛ«)„3×Ì÷¤ž–qÖ½~žõwÕµµÚí­´·ækëüUóo$7{¯R}eb4¦³s4:®V®gµûªvÎÎsæ6è¬X³¿T?«¿Þv–Ô{îÌã áKµé¥½ELGá|Åâ3"†[n;»ënvL³Û«Öyëq¶Ž¿ÚßÏÎóBwJâù_T~J¸‡÷wÍÁòöê»Æý½ÃÓ“kÇþ÷Y€$È0€ fÀäž|&ˆÄ0@ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `(ΊÀ ª0€ê BBˆ `¥(|u$~•0€.ˆÀ0€â  8ܠЍÎ!$„À0PšÒÁWwAâW `à‚ `¨ÌÀ$ëtA*s¯IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/skin.properties0000644000175000017500000000025311273045225025473 0ustar julianjulianname=blue_serious author=licnep description=A more serious theme, where blue dominates. date=2007-07-17 version=0.1 preview=skin-preview.pngtuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/song_properties.png0000644000175000017500000000136311273045225026344 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<pIDATH‰½–½K#QÅ“Œ :†d!à ‹X b/¦Ima#ÖvZ/VŠ•.Ö‹h'.Vº•!ù Bb­$‚߯™Á$¾»ÕËfLÆo÷Â…÷fÞ;çÜó>f á3ÃÔ Ã0¾.--ýI&“Õv QJ‚îííýÚßßÿé#ÌÉÉÉïÃÃÜžžÒÓÓC__ÙlÓ4!—Ë‹Åp¡··—››âñ8]]]”ËeÆÇÇÉd2¿5hè±Ja}}­­-D„b±Èññ1Ñh”óósjµù|ž££#\×åððÛ¶‰F£lnnÒÝÝí«ÆGP«Õbgg! aš&"‚eYŒaY‰D‚T*…išd2‡Ã-ÖµTËåPJqO©TjL<ÏCD z]Òé4gÍ$Ík@½^gww—ååe...X[[cnnŽ……ÎÎÎED(•JD"”Rœœœ088H½^§\.ã8Žßí;ð-ŸÏ‹çyt]×—ŽãøòîîΗ¶m‹mÛ255õCãšd> ÞÚo±HzxxàêêêU`±XŒŽŽ€à5ÐT*¶··ŸU×ÓÓÓ$“ɧ+Жe1??ÿbõºÿ¬Ešàòò’ÕÕÕ«˜e``xÆ"¥‰D‚•••¶íÈ^]ˆP­VÛN êwvvbFËû¶»èúúš5A*fffèïïš@_ ñxœÅÅÅWïûvWøÿ=hÍþ¡A¸‹Ç[¿Ý>‚B¡àÞÞÞª÷þxžgè¶¡Á Ã_Þ…ü/*"âù>+þúÅ ÛD\nIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/splash.png0000644000175000017500000017521311273045225024422 0ustar julianjulian‰PNG  IHDR²E¹¦ pHYs  šœtIME× !!nÌ IDATxÚì½i”\Wy6º÷Ùgª¡»ºzžÔ­Öd H–,yB6° f0!N vÛŸË]—›ä&»– ÄäcX+ë#¹Y˜ÇÆ1ÆØO’IÖЭ©ç®®î®ñœ:ãÞûìûcKår §K²$ck??¤ªS§N:]û9Ïûì÷}7¿×€â\XocüÁ¹û”Úà[a TSR™•–ÝóM9úç&M@ÖÛŸ›Â ¨jK]mÕÌ>çš°šÙ"ØM@Ö[•›šÜRWpñÝÂUX8añ÷6©ãÂFþ¸òhüÁ!¬&ÏJ°ž ,A%aƒsÙñßäñË;—Ç|…?­$²F§Ú 5{. –s¥Vù¥òU:ãCUr« BAXo¿Tý¤š'‹æÉ«ùت–8Ê[ê¾½–°ª8¨Úªû´òA#­Ü³îȬ<²£ºjŸFo©eU'ÉAP÷ï[õ–e9è0Nù½~U'ÐäÔÄ‘´‚°Þ¬Tw¼Un©WUŠ£ŠªŽ|ºÔS{2áªêtɱò¬*…Oí‡6³g#“«É'¬rÄW¹[åÓ ¯síЭhU­îù,«Îjÿ|•§Z{Ïkòøá?¡3{é« ¬óª•Â-äZáP¥AB%„Ïà^2ÔO‹¶*é¦*ê©+—Â5W¸†jÒ,kRRUóZǪÊÕjr¤UE|µOkm²f$X#æª{'¨ûYËêÊ}Bv¨â÷3£*~W„u¾!˲$Iµ£±¬*„½Fc>œ×ήÿU;J+O>äw>ý×$‰7OX iË¿™@oÙ§ë=Õ²RË×ën¯û öéœ(8ŸS¢APJEHø¦AÓ4UUkÇmU5ŠzÂwkrôžk±Ý|,Sûj…زr­Bl¯7îI7â¯Úø®®Xk†kê¾¥’k*…X£wUí°,[qs-$:>wq\•áèûþ[W[½}<,UU“ɤ$I•ŒÊx§J|…ËeÀpµ¸ÙM5|…XZU¢²‘¹NÍe•n–Õý¦§õÝ«\­Ób·F—«2 ç íå+;úölf¾4çú7¹ç²áñ‡$I”RÛ¶ßö4x[!400F+ån¥Ôª;øƒÊ ²îk4¶ÃïðnæÍ¸³á髨ÑÙ69"£Âg0CÆ^ˆ…tÆqbyf°Ì,•ÜTõ´v˲œ®­Âÿ¬g ¤NKs5r*ªî(B×uÇy{Œô·Õ,áÐÐÐàà ¥´<Ó¢¡Nk¤U €ª±Wé1Õ§{c¯úá†ï|ZlÕÌìx©Õ^*_¿Ñm?\U…ûVu‡ñ²á^Ý XF-—Õ¤žàÌüÐÊ; ¿†áûþÛfŒ¿ÝÒººº¶oß.Ë2!¤nxxºÁWÝŸc9ö¬½‡pWÕ[™)§kÇ4râÏóÐ á pFE9!FøéRUøK!¢xÙûÄyf¥p¯ªsø¾ŸÍfßê¦ÕÛœ°Š¢¼÷½ïíëës]·ònÓ¼¿~näŒTŠªýki«ÑX 6MZñ Y–1Æe¶ª²`ÝÏëJ¤Ú-œƒ*E\þ·vŸJR« O7©oÙŒÇ&y¡‘%×<5£àªÎ§LŽgÜ…¨­F.U¸oUk,«dëæÜ7rý–ý VMÅ.;ÝQ›ý‹r]wffæ-iuá@×õOúÓkÖ¬)ßp•à„K§ZÝTÉPU"‹RZµ¥êA¸ÔjTy³¬©™U_ª‘܈8ªŽP>“ª¹9ðú’š&}¢F³uh¥–Y–U^Í„§ë‚Æ ß`ÅUxJ`ø„P.—K¥Roï}A?üãÿð‡?lYVaÕÕYµ$R¥‰øí«LRµ ÅÔîP0òOä¬[¡§;…ÔÍUÍ4Ã!P;nð53±l¤ÖÈÚ QdHvY‚ TÃcÞ³X\·‘F­†ª›kÂýÙ©©©B¡ð¶ËJ·†Í›7ÿÕ_ý•¢(•áa­6© ÐÊR¨2Ä«"£J…ÅÿåyµTUKX†e£@£Q*Sóa“~ö²§rcÕ4²ÓMÒS£¹ŽeygYÕhÿÊÔÐðÜ·3˜¬h²AHxxXû*BÈqœ±±1Œñ…0/ ö2‘Häk_ûÚ† ª¤VÝx­ÍT÷Õ¥*^¥Uµs-sÕHªÞBf –EáQd£¬±ºÓšÍÌ“6C@á èuUm¸ª ׆!Œ¶ì<@xì\å%n1`xi}]KžË¨ª€QQ”t:}ôèÑ g_pý°î¼óÎ[n¹¥T*Õ•-•’ªòA­D*³R¥WUÖV¼­ï¦ìÕþ.C&Në®âj‡(¾)ˆe9ë è,DxòkXé•5Q£Ì¸ºT>®Új÷¬-{¨*¥hÒ½Zöqå]–ç.<üÞ÷¾·qãF˲ªº;Ô¥­*û©–³êòWˆWh4#ššé R7÷=Ä;¯ŠkI¶2i#$É£n|NdšKò¬«Œên–†(ÐºŠ¬ÉÒÈeƒÁÚWCúÿ@UUœœ|î¹ç.Ì‘{A÷tÿË¿üËO}êS†aÔµ´e„Ö}\96"¬Ó5›*›“TÙÃu3!ê­¶g3QX£Y‚&3c+O;<õ¿jcÕ´l“†z“Æ|¸_~ÂjYéý5Z¤\›QÅVO?ýôeZ Âz®¼òÊ{›ªäÒºR«n´ØH‹…‡HÍûåËź½:—5°ª¥Š>jc´«Q«Å–›´É]ŠfR4j¿i›4Yº²½É^Òµ0ªÕÕY²,»®{ß}÷ñû« ¬ º®ÿüç?_¿~½mÛü¶†ªâ,ðúy«º%8•nh<ϵl^h"á41 X·-T¥¡ÒÌ`Y‘Õˆ—=¡ŽRP/œ~Œpr 1Ý›S§úæšß–Ÿêº>::ú“ŸüDŒVAX'ñ¥/}éÎ;ï4M“[›åkïáU|!,O†óTx JÝÖfÆa£†¿!~p#+„‘Cê%kk’P“ñ²œU«ꪹfêAMçâJsª¶_#Ó=<*¡ 'šIÂj¦§®­ÌP«Ë&!ë°Ö%…ª³Ž;cÚj´"Y£núeD£ÑÜ}÷ÝbT ÂZwÝuB|aPSØ2•¾lBC£|á…¸!kjÕ§®-]7/©.×4ÒMÍ< ’@há!x}TÕùŸVkÀe¥M“%ÊU]íOësO×D+#ßsÏ=<ð€Œ‚°šÂÕW_}ß}÷yž'I—Z܉/[µí†ëvà]¶6¥ 5²c-´Ww˜-Û!BˆÓV™³­0^7ê 笺ó܆J£y@p:í7Cì¤p³©ré‡ÚF! ÂÙê x*dÙº¶zÝIª Ê*.k´"ImƒüfùµiV!b$9pàÀí·ß.FŸ ¬3Ä׿þõÏ~ö³†a S¨"¬ºK ‡·šjV­zPùoˆYÓdg¨eβ\N³/ hºê¸œ[UØ(à­Zÿ¢.—Õ6®")Po‰ìF®b]bªZ•£.1Õ‡Ö]„1ÖÚÚú­o}ë;ßùŽt眰Îbc ßC¼ûÝï~衇ÇáTUÉYUëKƒ‹ë„p]½®ÕL«pîh¦@§îA­ ºl‡<ÐÄ’eu¥h`Y7¤ª»P[•tªºÙ„HªZº )œ®«˜j[EVþ[y­EùÈG>266&(IÖY€¢(û÷ï „”g«îÕu†ªå¬ÚÖz ÁÜ|HêòéÝá¹!Gk+~j5NíKug uÔ«Ò¡áj4¨°«mn¬iÖȽª¼Í„+¬FíÉ*«#ê~åFÎz¥Å©ªêèèèõ×_/ÈH„„gÿôOÿôéOšÏVei5⬺Vw¯5ز¨)©p sº‹Ä4²]Â}åÓúèZÅTK7TUU$ØÌžußÛÈF ¿u•hÜ‚±ªÓlkkë7¿ùÍø‡ƒKÖ9Áµ×^ûØcÙ¶]•\ZÔê‘Óª°©ýÝ×:ÃÉ¢Ib QUÔh0OÚèdnmÌUW[Õ®ØZÙЮ–ðÖwh&bñ×CBÑÚ{O¹™‡®ëïÿû÷ïß/†• ¬sY–'&&ºººxN|#3«¿Ô%šF5" ÞJu•W#½êuJ©¢ÔJ–¬›Æ’™’>ÖH‚Æít-´WU\Å>µ±[ízÔ>¨‘#–[iÔë¾ß(O¥|)x—G„ÐÔÔÔå—_.F“ ¬ó„ï}ï{ögæû~93«ÊÇ w‹šY¢=ÄÐ]Ö¼1¼kó¼C,ÿf¶„¨°&·WPùUž”ê•Ú…4f©õ˫Ⱥ‘¡^—ƒ Àª—*þ€zÕ?<¤”Æb±oûÛû·+‘ ¬óŠ÷½ï}¿üå/ !Ucæ´ò9«¤Y£ñV5ØÕýV2í!¡JÝ&'uU^#_&$åµÑÁÉ“ºã4αâW¬\rبä¥n–|]C½®ªjtÁÝ]ùV<$„Äb±k®¹f÷îÝbøÂz IR&“imm-·/¹¨Šà–YB–º#¤®tªë¬ÕLuÍæFZ¬î@­«zBÚ×¶*Ï*DÄKLÖµ–jT5"©ÚP´î©{ õr¯ÊÚ ÉdV­Z%F ¬7?úÑþèþ¨Q…rÌX[%wÖþŠg)­¤*· ¤ p“ÍêêÚóá)ã ÁbÈàL+u Áeíó3 èÚֵТÜ{⦅úÔ§Ä`„õ{ë®»îÑG ÿ}/«SÞD4ßTþMû¥†f·ŸÅ/RÕ¡¸UFUÈ9T9q×]wÝO“-pa!$.¹€ð°a „% K@@@@–€€€ ,AX‚°.ˆL÷sѳá‚W¢^(,AX‚°a „% K@@@–€€€€ ,AX‚°a „% K@@@@–€€€ ,AX‚°a „% K@@@@–€€€€ ,AX‚°a „% K@@@@–€€€€ , ²¸gÆ!äOùƒÊ—*_­z{ygAX烪ªx§ÌYUÌUEm‚°Þ4aÅ·H’TWIñ-UTU)Ça œ+Tª'BÆØó<Œ±a„ß÷)¥e’‚F£QEQTUD"š¦©ªŠâì& p&¿@q ÎCèôÖ:maùôaåo„×ólÛ* ™L6ŸÏ™¦I‘$)‘h“eY×u]×EAÀó}Ï÷}Çq<σF"‘–––X,ÖÙÙÙÒÒª©*”à)±x@Y)ÊÞºZLHHAX‚°Îë9óÇ)c’Ëe——&§&3™Œaº®wuuuwwwuu%­±X‹$I²,#„Båƒ!„ú¾ïûžiš‹‹K ¥RɱöŽöþÞ¾ÞöööH$!D ö}oË–-švRg½¥sa ¼A…u2ߪh÷íÛwb|<—Í®]³&Ù–dŒ yÛ¶¹â^U#ÙxºDVµB ” ŒD"žçwvvnذáðáãccŠª.¾x«ªª•œUI^‚°. GÀ÷üÇïÝ»wiq±»»{xx%cA±XpVÙqálV£K–E éééYµj¤d•Ž=vøð¡ b±øÚµkE©Œ7[ ¸à+ØìÜìÞ}{s¹\kkëºuë £èyžã8BY–yBÙ±: ëu¿HYN¥R±Xlåð°ë8ÓÓ3“ºÑu}ÕªU‚§a \Ð0MsßÞ½©TJFhpÅ Æ8›ÍB1ÆBÏó<ÏC©ªÊË߸’ ÙŸ1¦ëºeY†aôôôö÷÷ Åt:­jzkkk[[[2™¬Ìƒä%KàB°©ÉÉãã¾ç ÈHžŸOB(¥„^ꪞ繮+Ëò¹&,Û¶99NOOwvv å ùL&sìØ±îîî;v¼' a œ‹…±±±’iF"‘D¢µPÈ‹EI’Ç)§zr-ïû•…Ío„˜mWÅ÷ýSçV„¶¶¶tvvÎÍÍ/..8p »»{õêÕ¡·h3 AXgŽÉÉÉ™ÙÇqV®^XX$[–Uv¬Êª'€$Iã³BLàº.„°T*iš&˲i„àd[2•Jçr¹T*Å9«­­Mƒ‚°Þæ¨Je*‹c££¦Qli‰™¦a&زJÆ`¹‰h¹k‚$I„Rp*m PN …¯O­ª˜X À© ørÊc¹Ÿ2?x™ùvÛÆB„繚¦vv´MMM%“­ÓÓ“c£‡/»ì2IBìÍëèpº“‚°Îe6YZZÊd–|ì«P±mÛ0ŠcŒ1¯ tG–eEQø^‘%‰Û[àdëå$ûTŸÛ^üUJqe ‡2I•ÃLþ´ÌSeWÞS’$ŒU]×#‘ÈB:­ªÚÔôÔȪU===ðÔžç?<¬mú,~W‚°Îþ0++&ß÷ÇÇÇóù<`Œ`R*™¦izžÇCàÄÄË›ycÛ¶„º®sò¢”–©§%ç1òìÓºæNåZe;Œ›•;sF#”RJ‘Œ²™L²­-=??55ÕÞÞŽ\©ÎÞÖT%Kà\‰>º<Ï›µ,Ë÷=ÇuLÃp;Û¶ySvJY6›¹á†vîܹ~ýz=Á¾/!ĉc|ÅW …§Ÿz꥗^:|øp©TjiiáéT¶mKR}õQ.ô)G…|5¾VE­ÈÒ(õ=BÉ4MÃ4 Åâø‰kV¯nK¶¿)A™ )AXçÉdaŒ‹Åt:í8Žëyù\®T²<Ïó<cÌÝ%Ûv?ðÜrË-Û.¹À?„&¤¼ÌDŠ¢ttt$“É¡+Ö¬Yóè£îÛ·/—ËñÕ(‚ ¨lgÊvn“UfxUƆµŒÀîBº®3Åb)Ñ–^HOÏL·&Ú* ñ¼‰,±–µ ,óG[Åb1›ÍÚ¶í8¶i–ÇÆ󘎛ë·ßþßn¹å–CC¾ç)Š‚dÙ÷>~ðàÁé© ^ƒ­ªªëºš¦ñž °{²¤±µ5a™f!—O§ægggËѧ%¯`ðu×Vô²d bJ“ŒBFY@J¥Œ‚@I–%Y• %@ þ„%pµÀqÃ0,˲-˶ìÅ¥EÛ²ª¥Ói³dÿÉŸüÉ­·ÞÊø¿eAÁU•ªªåL+Œ1!$‰ø¾ïû¾®ë½½½7ß|s:¾÷Þ{{{{MÓJ&“SSSÂ믿þ¦›nºüòË;::"Ñ8­ÈAu'›Íæóù§ž|â™gžyî¹ç\×íêêò}ß4Íh4*CÀC²0&;¶iš†iF1N ñUvšI"­ä «$¦Sk›¾ #¬ ­€RâSê3J ø‹’¢À$À”Æ ¡„ há+Kà¬q”…B!—;ÚŽí¹c̲¬B¡°é[î¸ãŽ¡¡!×uËîRåBˆó”ã8|g„eYò)¸®;44ôñ|ÿþý{öìim‰:4ºaÃE·ß~ûM7Ý´jõj€ÿZ¶WÀ3¿4MèêêêïëÙ¶m[OOÏ#<2;;ǣѨëº2D¥IÈŽX%Ó,ŠSSSëׯooooZjž¢'öK’XòŠQJI@iàÚ2Èþ `€m(A„$ ! H€QFqÀ˜¤hâ—&KàìņËd2ù|Þu]ÇqÆI„Ó4c±ØÍ7ß|Ùe—•ÓÍ+×Fåâ…bY„PUU˲,Ëjkk‹Åb|×uBŠ¢¬[·îcûØøøx±[½zäoþæo>ùÉOJ”Ú¶­iZÀ˜ïûŠ¢(Šâ8Ƙ ·D"ñÎw¾spppxxø»ßýn*•ŠÇãc ½ÖDcœƒ6£ IDATßuÝRÉ,Y¥………………d2ÙL8 @y=듯@PÖDŒ”bŸRÂ(aŒBè FŠi@¥„”€AEbB‚YÕdUG²Æ˜ô:' KàœÍfK%Ës]Ïó}Œ ¡®ëA°jժ믿¾\ëWîD *êŸyn§eY¶mG£QÀäääÜÜclûöí±XŒ/¢‰D6mÚ444”VÐW¾ò•?þÄ'\Ç!„Ä[Zâ--€1O®Æ×žÀó²g®¹úûûo½õVJé¿üË¿¤Óé¶¶6@ 8UôãûØs=Û¶bÑ0Œ™™™U«Višöz!YMU¯u‚—Œ,`€z%„øñ%@‘$IŒ2F±ë`âùžƒ±Ç•ª(UÑe„€¬B¤Yc’@"JHüÀa œ au*¦s'“É8Žíz.ƾçºA@ !¡K/½tóæÍü18•ÒY >þ5M+•Jøào~󯨵×^{ë­·^|ñÅãd2¹aÆ]»vuv$o¼ñF€¢(z$’Ëf !A YíêêRUµX,òìvJ©ªª€QEQlÛN$ð0==ýÓŸþÔó<]‘+Dõ±ï:®iš¥RinnÎ0Œ®®®rnWÕ ¯‹‹O€Œ,J(Å”Rx0d@€q±ï»vÉóœ€2(1 "IQdEWÔR£ªËj):D €’°Ûa œ}‹1f•¬B>﹞c;ã `<± _uÕU§’°ìʆSeÂȲlš¦¦i‰Dâ™gžùú׿þÌ3ÏðHððáÆa|á _ñóž”088˜L&„ÅBák_ûÚ~ðÇqJ¥„ð‰ß<µiÓ¦Ï}îsûØÇ‚ (•JÑh4‚öd"“ÉD£Q„ÆxݺuW^yåîÝ»+Û"AàcŒ}캎ã8¦i¦R©uëÖéº^·L§-Ñ+G’@Ò ”NR<¹F"§A–ÀYOk²mcŒ &”Ȋ‰L–eUUù_9ýª”RMÓ(¥ÓÓÓŽã$ Þ÷ʱ@Doc|ìèøž={J–¡¨ `ž®GÇ=ñÄ“ùB1Ñ$ `ìâBZZZ2™Ì#<’J¥‰gIJ©ã8¼φO&“ëÖ­«<n½cß÷|ÏõÜR©”Ïç³¹, Nu§aìPì» šŠÅØu¨ç1âQßòœ¼mfìRÁ¶ ûÄ÷B £ 2BH‘U%Ô¤ëÒ[;ÕH+’UEà'Kà¼È+Þz8ŸËqÂâ:0ÆWHå‚UMjÁ‹“5MÃ{ž!Ä÷}]kA’¦i1Çñöï;`š¦ªª’$IP™žŸŸŠèMS$ÄT  G£Q>'xìØ±¹¹9pª›;ïôP*•xõ„0‘Hlܸ±–7 ¥ØÇŽãØŽÏçgff!ܬc¯)ÊPÏ÷,ϵ)%Ì£Ì÷©[ò¬%ÛH[Æ‚ce±kC) `’Œ„%ªi­j¼WkéQ£I¤F€„xλ ,AXç†a‹E×u±ï”Bǧšµó–{œ¿A×užS:88ØÑÑÁÛ]A»è؆®*²„ÆOX†«É14!×tº®bŒ=ÏAB‰:ŽÃWåq‡¯ÈÛiqðÄT^`¨(JwwwùrG ì:®c;%Ëš™1LžŒÒ °ÀsK”8aŠ}ì9Às½RÞ6–+ƒ}0¢ BYB2”¤ÈPÖ€•µV=Þ¡'zåHÊ€+g›ŠÈO–Ày@±X´Ç÷}L!”ûÐ\X†±¸¸È—M !,Ρ­[·îرÃó<Û¶u]×"¤%!Sf[¶•Ïç]—øc eêš®ø¾¯¨òI@@<§”êºÞÝÝ"„hšÆΓ¹xþª¢(µëz•£Bß÷lÛ6 cnnnvf–¿ ŒzvÉwM‰@|Jñ‡'N;tp¬T²55&AŶ Œñ5×\óÑ~T–eÛñ*ûÍŸLAÀ˜÷œ±,«VèAÀ‚€`lF$•³™±±±+®¼r``À(3³ÓÅ|®˜]‚¯Y1Ðß`Ée}o @IU Ee¤A$ñ²B(É!(+PÊ‘¤m“Õ(Ø©ÂÃ2c ¶„%pŽÁs'—Ë9¶ãº.Á˜ÂQñ…óFéÀ¹\®œÍÔ(¨T¥½½Ý¶mEQvíÚµqãÆÉÉÉ¥@24Ü×ÓÛ‰ããû=¿ÔÙÕ–ÍD!@7~èÛvÿãÿï¾½‡}Ÿz®§Gåë®»îÓŸþôŽ;!’$¹®ËC?NRœ°¸­fšf}…Eˆ¶m—J¥ Ž?6~âD2ÙvâÄ kq–¸ÞÂÜœ],´éz"¦3‰aß“P +º,·"9 ‘,A‘%(!@H*:Ò[áÉVð$[ìF#²Ùa œC’*ËÀÒBÚ±JVÉ ö´x}é¯ï{KKK–e¹®ëcŸÌ‚€/›Ç Ã$)îÞ½ûž{îùêW¿mMòI:žòn†,ËÉdÒp°®Îkn;#.ßÒÐFt ö^ )@@RÔ)Œ@²¢³R¼3AoÔ!xÜ2ö³æfŸWgÚÚ>©%·ÅT½D#8&øŒ2§mµíR,ÿüòËǃ’¤iŸ”eY h@Æ,ªªØÈ¿çï¼î½ïÁŽ;qüD<¿hãªL6ŸÉ¥û†s ¹–îÞVWkëî–µÈI¶zý5«óD• ,ó€×ú‹ž²Ï-ËJ/¤Çö<`Rö‰¸gÄ›[µ··B~ö³Ÿuwwÿß_þª¢(¥RÉó¼¶¶6UU à „P˜ñ¤5Q¶»3ÿ÷ÄKˆiù¶Yx’!™!Ií@Y¡ªëTm­¦ôI €EIÚ"] Ú¦µnJèã’uOÇ' 9g}ãߘššºýöÛ·lÙÂ+“ù£¸âoþ„ù 9Nuû[li xq°Ä B¡D£Àq†Ç=lJëT´I-.v)9QdYŽ‚ÖŒ¬^ð¿2þ.ɶĵ @õUU¶ ¾ªª†QøÉO~òÈ#b±¶ BP‚L’eϵ‰ï öõ\~éeú±NNœØ¿ïUFý+W¤Ó 3ét[¢%W4òÅÒ%WîX¹’4°b¸½³;8Y}jâ¯âÉIžb§Œ,AU‚°Î?gqض}âÄñ’iEÃu\Ê«§Š™K¥/‚áS‡Éd²äºÿöoÿ¶ÿþ[o½õýïOO,Ë„R`hþ'¡|Ÿÿ-VÁ@ô_]°Г_’"Œ©a>!A”èCoŠƒ’žØ¨ÉQì#âk2јêA"#­_is`¼ê…xAɈÅ:dYž››{è¡üã§ÓéX,æºn<ÒB)ƾ‹¦«ÚàÐàå—îX¿~ýÜÄ(ô»»[Ñ££“¾ï®]»cB˜¼eû¥e5¶zõjYÓ°\hÈÿg’JÔ[Åî—àܱƛø¹å„Ji:þ—ú_““³3³¦i‹!˜W#„LÓäU2|ýŒqPÑ}ß7 #‹]rÉ%ï~÷»·mÛ644¤÷uôH=-ÅÇqá‹R«]Ÿ6¶ç¾¢;avL"a Bô€hšŸÁr%/‹õÜ£—ù¬%€”‹q%2¶÷ÿqŠVÿÊO‚ž+-ÜÅ —ÌhÛôôôÏþóïÿßr¹\GgòäZÐRJ#=]]ë׎ì¸dÛ`ßÌô¤RLm»ìŠ¢_zõ@k{R‘%»XX¿icÿúœe¯ß|ñðêµJ$ `ŒUzUçú·/Ö+„%«VFñàµÀ‚€¹®c‹…b1=?ôè‘ßýö·™L&—ËZ¥¯+æ6VÈÁù‚€žçaŒeYnmmÇãí½ë“-1fÂHüÙ÷}töc7^ÖÑòç Ðj¦>c‚~)ÈF¼ qyµ5îX9ÅÛoìúÕº Š Åÿ†C‡=×Ç»vØA„Ôµ…ÙôOþâñÇþùç)¥‰D‚ç‚ɲ l»µ%–ˆEßsõÎ}øCó³Ó»Ÿ¶¿·¯«¯qq1‹FZZfÒ©L®ØÓß¿jí:5ѳcûŽž¾^(!X^·ë|­ -K– ¬úlÅã>%x²`0—››››™™™žšZZZ, ÙL&ŸÏòy³dÚ¶O-³r|òºèr‰„0g["], ¬¸ýsÞM_Ñ©ßæÙ ÿ ë…#EVÇܹ@v óT¢ÃÉö´ô¾¨tvéwc{Ž04œè¾BНœ]ÌON?~dìÄØñýöq¿Œ7-'âŽL&Þ}ÕÎwlÜQ•˜&KAP,§§§6n~‡$£Ñ#ÇÛº:ôXë‘cǯz﮿á†h4NÚyç›Ga K r<œ„ð”Â"˜.--?~lnvv~>•Ïç‹…B>Ÿ·¬R±XäKr4°BµUy¼•gy4§­Á®VBÊ’££ãÒþ-ÁÜG?òîŽÛÁÀdþA”›ðBÕ„fϹxº ŒËR©8wžhI$Ý<ÝûÜ£wcÔ§ñ@~ĺ阎]ÄŽíZA¼5Æ“Tc¼ø™·™Wãñ¥bñåŽNœP ¼ô’m+‡WÌç =+†c/îÝ×ÑÝsåÕW>rì‘_þWKkbaa¡6-Aˆ ,7“³NÚÆŒ•JÖÄÄÄáC‡æS©ÅÅ…b¡`YoDå8v±PĘ÷kñù¢5ËœgÀóÎîåö~!·È$`W’F2¯¾:¨~7¤=Ÿº.Cû¿¥ÈkØ‘¯RlÊQ„T×WL|ÀˆJeS=>ï»=ù[ûß¿w|t0äS°È„©Æ£-­Šò.7¼Ý ƘÉÈÊÁ£Ç=—Ê;E’ÉäÖ !„mí©<ôÈá£G“É®t:½¸¸¸rdäT˜,ØJ„„o¦‡ÅÊÖU6“}õÕýÊ,---¤ ÃpÇ4 ³dúžïcß¶l§ªfäU•ÝS~ „PÁ-j™pÚeÊ"’Ù…>ëÓÿ»tÝÎ]=›î‹ îè?8$mÇ{ž`€ €0 °xçÁé»ÿ¾ôË_CÐÖ&«òg˜0cA É¯^ä϶—eÙ ¥´%ïëéíìì(ärÓ“S’$™ìàPÿŠ+|ߟK¥‘„ºzûúúûW¬ùà7¾ë]» „ÊjT„„Ba ¼Yl ”SS“‡:tèP.›Íæ²¥b1ŸÏ—J¦mÙûc¾§çù\X5I£ÜêìäÇˤ•¨3ªzD…¤OŽ›{c'º¿ü¯äŸüÊ þ?ë?›ÿ`ÌÁ®º `0xåçßFžz‰)]íÒð‚ÀeÈ,† .©@‘$$A^0Ä?Ž—gC)eŠ¢ÝzËŸÝvÛm‰DÂuœùÔÂÁƒ_~é™—_~ù•ƒ‡±çKêíí•Ý÷i@ƒ™éi«TjI$@Å*gâ—#KàMpGyú©§–––òù|:^ZZ´LÃ0 ßói@Á©ØªªL§IÀíöJ¶’$É N@ÖnÝvñ;–Æ÷î{Ñ ZÛ‡£ÛFvéCYïwÚ¯”Þ?‹÷\‹­I×ëÆ`É¥À§É¼×wð„òêXº€K*ɶ²nÆ\²¢B†ƒ„:¶oRb±ïQîAêy Xw_ϦM›×®½c Ûáððªµë6~ðÃ×OLL¼ð /<·{ttÔÈ ‹KÑxÜ,™©Tj.•º¨5QÖ:Bõ¼ ×>W¸ë®»Î©533ûàÿ955eÙv*•šŸŸ·mÇ(äJ`|*T¬2z? „8C•[’B<ÏÃÜÛÛzãõþÐ ŸT´gﯗòÆÀððO¾ù?/»îVÜ·+?óLÛÒýrrN^«Ú¿€0ÈyÛºú¢¿\·ùŽm;¯Z·eJrv6O|‹b—aøBÀd@+I^|ñÅ›6m‚f³Y¾D«,Ë’¤ò…#cGÆFzF’Œq‰D\j·';׬Y»uëÖ‹.Ú‹ÅŠF)Ÿ-Äã]ÓÛÛÛGV”k•ÎgZ׿üe1„‡uzX•­ø¿s³3{öìþÅ0ÆLÓ4M3ŸËú pª¹]Ù~â‹Üð‰?>þ !|®<È£?.©dY–5=“É$ ¾:Žçy===Ñh´T2®¿þú]»vE"‘|ð±Ç+•Jýýý÷=ðÃÍë®Ðà+‡¿í'.ê»HÛÇý©»¢sÕŸ'VÜèV¢,pý=ûžá…¸ÿ?ìÛPªHH••d¢íš-«·^²½­»û7Ï<óôs/®‹%IB $Ìó<¾þEKK˪U«.¾øâµk×îܹ3™LʲÌWó}ÿÈÑ£c£c33¢KwlÿØüÁðð0+ç·3PU·$<,¡°Φªe«B¡°÷•—:tðÀÏó ù¼e[|fK!ÎV<‹Š÷Jç« òîÄnQñ<Ü+ï†ò<,––²ÉdÛ5×\sÇwðÓ¹öÚkÛÚÚ2™Ì+¯¼211¡(Šëº×ðW¯\ƒ 5©uPßÏ޹ÞKÑè¶¾á뢽;ÔM¨D†S5¥o ÿòK/¿ñÆnݲÙ5­B.3<Øwåe;®½ú¦UŸœZ³v]ÿàŠ£G EUV%„TUD"º®û¾ŸN§>¼{÷î—_~ùĉŸÏf³º®SJÛÛÛÛÛÛ ÃP*¨0 HLN^>¤%|Tî¼ 0À€2€ h@%I *²‚-ë©Ç¹ç™§Ö¯êéH>÷ìï,Û_½zu¶PÌÍ/¶%;»{ÙÖKÚâmSS<;ŸG¯ªªròRc5ÿܳÏ‹Å-[¶tttV^Õó µa]Hc…áÂËd2ûö훞ž^ZZJ§Ó¦i*Šì㓕̾ïsªì^q3Ëó¼ööö 6pÃ˶mž¥ª*Yžç)ŠÇK¥’aŠ¢|àøüç?ÿ®]»<×|ûÛß^ZZºùæ›yeÆ8•J†‰D<Ï“eYU0 °†4€>U)¾%ƶxP5a³"U¦¦zðþc_íïí0r¹Å™ÉÁޟɳ3³8`½½½fÉ1ÍBwww²£ëÈÃ)žPÊõ g.¡,Ë|áBBH*•š››;~üø¶mÛ.½âʶ¶6Ã4ƒƒƒÅbqlt´X,nÛvÉÀÀϤ¯¼ ΄%pÖ ,þØ÷ýƒ?~Ü4Í…tºX,Ѐõ<J|ÑfÞ¡Çw<[]’¤+®¸bÅŠÓÓÓ¼R¯loq߇ïlšf±X\·nÝ 7Üð~á/{zz|ÏÓtýW=öè£^qÅ}}}žç^|ñÅ£GróžS$ž£Œ$$ðdU#L’$€@ U@B]ëľÃ>øŸÅBnÝš‘BfatbvåðÀŠá‘½û2Æz{{çÓ‹Ù¼±vý†\®ðÜž=ðõà—¥\žÍ'’ɤïû“““³³³GOŒïܹsã¦Mžëš¦ÙÙÑ)ËòâÂÂsÏ=·cÇŽ•+W*Š"¨J–À¹â,BÈÌÌÌádzÙl6›µJ%ßó |!,ò†Vܱ*¯ùFW®\yÑEe2™ééi×uE‘e™×r…âņ6løÜç>wǧ>  TUu>•úÇüÇd2¹uëV¾ëÁƒŸ}öYÓ4ù2ÎAÄãñxDG0 ÚPÁj…#,@@‘ žž;öòßýñš5k:ú{æ§&(Åë/Ú@(~èÑ |A IDATÇÞõΫLËzþÅ—b‰¶µ›6<ÿâK{°]““Æœ,ËüjðógŒÅb1níBt]WUÕó¼ÑÑÑl6kÆ–‹/6 £/tvuÆb1Ã0vïÞmÛöE]¤ëºà,AXg9$äÁ ÷ÚÓét©TÊd2–UrcÌã“}ŽãÄb11ñ±Í™«££cûöí€T*•Ífy*W%ªªòå]×-•JÛ·oÿÒ—¾tÃ7¾Ö°Âþç>räÈwÜÁÆW_}õ7¿ùiš‘H¤ÜóO×õD´0 "Œ $Eé  «PúHŠ 0y,ýëÇÞ·÷‰Û..YÖ䉣±–øððªé¹ÙÅÌÒÚµkÓiŸÐõë×§2™çw¿017—·KŽë'¢-<ÈåNÿšÜïç¤Y.<ä yaaáþûïO§Ó;vìPeqa1´&’¶mïß¿ŸRºaÆH$"8K–ÀÙ‹ƒ=<=5aùÅ…”ë”×-»æ<.Ó4ÂÇ0—,Ëêíí½úê«ûûûGGG—–– …/ÓãbÄ÷}¤EdsÅ]»v}ó›ß¼ä’K”€Qácÿõ_?úÑ®ºêª®®.ŒñSO=õ»§ž„Æ#QƘ%È #Ô'&­Š(ÅØF©ŠB c2ð\¬«ˆ9ù}/>ÿÂïž´ K[WÏe-ËZ¡èÚþƒ‡¢ÑèæM[Ž=Zôéå—_>3›ž˜Ïßúß>×ÑÕ}×ß}õ7O>èçGþ¯,Ë¥RIÓ´²–U”¨Hž»çù犹ìæ-[º:»Ë,•¬D"áAðê«û%7½c“¢(¢bG–ÀYâ,¹\nzf:—ËåóyÇq,Ëò=ŸDUïR%—˵··[–%Ëòe—]600°¸¸˜J¥r¹Bº®sçKÓ´ÙÙÙk¯½ö‹_üâŽ;A¸®êÓSSßùÎwúúú6nܨªê¯ýë={ö€Šy.⸢q UT€ VTõd’ª,»¶£G4Ï(üâç?}ñ¹ßnÙ°v튭{^xž2µ¿¿tò؉þÁ©ûöèèèhíKÜÿÀƒ6mþë¿þë[¶"=òÅ/~“à·O=>´¢ß0 þé–eñVô!ʈORJS©’å‘•+{{{ó…¼iš---GމF£«×¬æŽ^™ìÄoO–ÀéQUåÈ ‚`rrbbb"—ÏŠEDZmÛÂØ¯›Iïy^4å)T—]vÙ¶mÛ Ã˜›››ŸŸÏçó\ˆ•«‹yœxõÕWùË_Þ¹sgÙ†×4- ô_ÿõ_Ÿ~úé;¯¯oß¾}O=õT6›GôÊõxx¦ªj²½›Éq<$É’$3Æ<ÏUUUWå#¯ìý¯G~‘žò,÷xîĆu OÎL†1<²Ê´œtz¶£§—úü3/\wÝuxó¯X»Ö1-]VÞµëêÿùõ¯ý_ÿÃzå•Wmmm¥R‰ûnµ°`Ý÷F"Û¶yÙ clvvvnn.—Ëqîã1#¥T–e>'ø¥/}içÎ<Ñ„ÐÃ?|ï½÷^zé¥7n{ä‘Gòù|2™¬<·rN€$I®O)‘ˆ t‡Ñ Ѥ€>ûËGðÝ™9qlåà ™/ŒŸ8!#µ¥%™3òªª /fr‹KÙžþ~ËÃ/í?xëŸßöüÅÿX±n­cZ‘ÖÊÁøÒK·ßu×]«W¯öò‘éééÇ|vv–OÆU*‘²Ñ†1vGb2`?¢*bSGÆîýîw~òƒ{{Û“Ö®-d–0ÆÃC#„‚gžß388ØÞÙ‘^\t\¿µ½}ÿÁ±ùLþïîþ‡[îøŠÆe‘D %ëºã€Ðw½ç=_úÒ—†‡‡ççy²(Oת¼ðH×uMÓLÓŸŸŸÏår®ë.-elÛžO¥FGóÆ[‚°ÞPlhÙÖÄÄD&³d[–icLHÙn¯…eYº®_uÕUëÖ­³m{aaa||¼P(ðÉ~>ŸH1MS–åÏ|æ37Ýt­dY¶m[–ål6{÷ÝwONNÞ|óÍ„'Ÿ|òøñãñxœg<•s xvÓGúúúüñ£GòRÛ¶5M“XÀ¥ ¹xV½išùLzh  j,Ì¿¼û¹g÷[ìZ;¶n˜›œ2MsddXD_Ù·Wèk7m:>=cæç¯~×®¥¼qp÷ËïýÀwü÷ÿMR5Böâ- YAŽëhšæx6Á¸¥¥Ås-½ýöÛçææ¾÷½ïñ>¹ NcÂ*‹¬rMe6›F£’£Ñ(Æ€¬"+²¬?~¼¥¥…×{WéGAX˳ÿwrj²Ï»Ž[(|›¦É‚€Òh$õ÷÷_}õÕ=vìB(‰ð,-Çq¢Ñ¨ïû›6mºãŽÿŸ½w ŽëºÎD×Þû<úýD£ ’àK”(вDK–-KЬèíŒÇ%)®x\öÍܸ’©8ž{c'7®ü‹«r«î$smÏÔ²2–•ø!ÙÛ²-ÙIñ!QH‚" ’ ñúu^{ïu,àè°E›’=öY¬B5ºOwŸ>ìýá[ßþÖZTîî߈ë_þå_¾ð…/\{íµ7ß|ó¡C‡öîÝKý‚ H$Œ1¦1š†#ìÏÅÀ?îÜ¿~ýŸÇÇNm^Ÿ²Ã^dÛ¶m™™›?y|¬R]LœCÆ6lØðôÓOg‹]Ÿùì_î¾åv0L Âóe"‘ré¾Á¸Ö,N{žÇ´ö'“Ï?úè£/¿üòžïý ¯·{uNÔÙŒsîºîÔÔT6›åœÛ¶5;;›J§Ž;¶iÓ¦(`ÅV—Œ±ééé±S§k õÚ‚ô|&žp\š§ÎñDô}?NèCªT*ûÙÏT«•÷¿ÿc¯Ž<÷£g½V3‘Hh%Q)iš¦Dš¡eœò¤%æ¦'ξzÈtæ¿ýíoÎL\¸zÛVÝj6[º·»bæ*/?®µ^»nãôôôÔÔTOO|íGo»í¶øÃ;vìÏó8C V¾¹´;Jšº(Æ &Ld¬Þp6_uÍ_þŸŸmô$•^[|±²eYaÝ%,µ¬ˆ^R®•×jŽŸËçó‰DbvzJåƒùT²P(ž:u²T*E„ü˜^ÅV—Ê)@k=99Y¯×êõz«Ùt]WZšy6·ª@€»îºkóæÍóóó‡:uê5œ¡‚a)%•ÚI)ï¹çžÛo¿]eÛäÆ2 ãßøÆg>óß÷ïºë.Çq~üã_¸p¢y9T¸‡ˆ¦i© p[Ž`(¥ô×6=Ï<óÏÿüUßqwíÚ5;;;22RîêÚ°aøÐ½™T¢¿¿oll¬Vo¬[?>5óýÿôÑG}ä‘GvìØAó¥•Rd¶À‚Œd˜Ú¾}û#ŸoµZ?þø¾ð…ñññüã7nüú׿~úôiD¤î1Ôpf1yä‹zhÔRYœW{ªkt_µ§P̽räÓ[¶m=zô8"þîïÜþòÈ«¯ŽÊÕd6¿÷ÀA©à?ý翾ힻ©¸ÇqœÐi±ÊÅ!w‚”²Õj …?üÃ?üá¸wï^ÅE2™ Ç‚…î*ò“RŠöLQkÓ²ZͦÓj5›ÍÙÙ¹V«•L¥Þ˜G„1ÍŠ+Ž•V³jµÚøøx³ÙlµZ®ë2PJF'J„Ce&&¦¯¾zÛüÁär¹gžyæÀ$´S÷:2•JÕjµr¹üðÃïÞ½2Ù¬VjddäË_þò—¾ô%!Ä£>Ú××÷ÄO<ÿüó¨µmÛ-ϧ^¦i7QJ™œå²YÓ@§Ù¨–K7í¾qÇÕ×påû¾?rä•dÒ8}úôÜôÌ5×\355ešfO_ßô\í‡?Û»yûµúç1¼i‹i12²’øí8ŽmÛ‰DÂuÝe/móQíQ«ÕøÄ'>1::º03™J¥¨F'œüº `Ñ£A¸®‹ˆà›¾ëºJ«F£ÞrZå7þ?â¯d Xq¬ŒVm‹jzzºV«5›ÍV«éùžZš*HÇ„Ùççç«Õ®|àÛ¶m{î¹çž{î¹sçÎÁRW,ªfŒ5 ÆXOO”ò›ßüæôô´âðáÃÏÿô§###}}}÷ÝwßÀÀÀóÏ?¿oß¾D"Q,òù|*•J$étÚ¶mJÇd =§é5¾Ó4¬_ÛíÕÛ7½öòËãgƺ*]ù|þÈ‘#™LîÚ]×>|8WÈ\÷Žwüäùöxé®ûÞÿÐ#\?Ôh©@zt’¡Wžì+íúù¾Où)5´,ëî»ïþîw¿ûÏÿã¿7d2ÙÆOWT@–[µÔyG*©µ’RR[±èÿ Ä»„¿†‰H| Þ º,†Å ‚€ÐçÔë£çΜ™œœl4žç†wê¼N¢ÏC=ôÈ#¼øâ‹=öØ«¯¾Šˆa’E+¥ìTºV«…M²Èš$„èªT¨³h__ßÙ³g§¦¦¨aKwwO¡PH§ÓÙlÖ¶m>àOžÝó§N}u°¿§·\Ò¾#8_³¦OJ937{arªP(ggÏŒ§²™R¥ûÅCSÙ½üÞ=¼?‘ÉNNÍ%Ri޾aÔ'“ÉpÎ[­–”’Z‰v´aŽã$“I¥T6›ýÉO~òÇ~ôôéÓ™L†8à%/{h3 öm˲²¹\ooßÀàºÍ[¶¼ïÎ÷mظ‘Ž{c^Å/šàÇK fX¿-á8ÎÄÄ„ã8žëz¾'•Œæƒ°´?hÆ{Þóž;ï¼óرc_ûÚ×^zé%­µmÛáÌäP˜Ÿ˜˜°,‹Š~‡†††‡‡{{{7oÞ¼~Æ|>ŸËå|ßß¼y3í*f2™VkÑœEý[ÈÀåû~W¾lpñRÏ‹'½¦|?ðÝVmkì_Ó^m~!›J»®;¿P/wWÿúô÷×®]ûþäOo¼ùæV½Y›_ÈfRAàûÒ'Ø%۪뺌±|>Oý—ùš@Óuh47ß|óƒ>ø•¯|…4)ÂRßW‚­¨'ƒ¤úÐ¥%„†ˆÿ–ǀǛ¥W!h6›TAâºnàºÃÚÞl6c½½½þð‡«Õê_ýÕ_=÷Üó¶m…óo ½ù|¾·`ãÆ›7o^»vm¥R)—ËétZJiÙ6YØ9ç…BøW³ÙL¥2Dô¨£C&“!IK=08xóÍ7Oœ;{òxШõvw ôöüô§ÏmÛ¶}×®]ûö¿85;·nãðéÓgöíßËøä'?9¸n]ma1ÆCí3P´³I›AP1s­V[)%¤Ïåû~.—k4‰D‚ÎíþûïÿÎw¾366B3áø%ioØ„‡Èf"‘HضiZ‹©%Éí±èV+eKM€36?7ë4ëN³Nr»çù´¼©£15¨3MóSÿñ_·aãßüÍß|ï?ªV+•J¥»Ú›Ïç+•J©T*‹ÕjuÍš5•J¥Z­R7ÎÐN©4 p­‘YV¶Y8&†e×|"‘@ ðŽ[nuï¿ÿ×jø­yGN¼2Ú½aÛtKÕUû†R…ž}‡_žjÔÿÃ_þç‡~D)Õh´¸0 QÊd2IRI#0¢Âì•®ÙLÓlµZ„qBÇqv\·ë¾ßÿw÷wé\žvK ËVÀø š9½—eYAÃÈd³¤Ó¥Ò™T:“ÍfÃÿ ,F«°â¸„êA€²0?ßjµZͦç¹JJ!85ü”R¦R©z½¾Ðh~þóŸþ›¿ù›={öüîï¾ïöÛoïïïçÂ4 #•J …b±H uì£eO°H»’f턽ÞWf(À8€‚k¯½vòž»Ÿ~ò›s µ®Rqúü„ëºkÖô’•ƒûö¿<òêïÞ{σ÷=@oäû¾ã8¦iRºJîyš{F¤§U·]JNÃédt’žç ¹Ûn»í±Çïîî¦ç˃ m&’ï?—͆‘H$òù¼iš½½½¶mÃÅÛµ±V«g…ˆ¨§§§ëµºëºÍfS)íy^­V³,+•J5›Íz½ù‡üáõ×_ÿÿøßúÖ“÷Þ{÷G?úÑM›6MOOûJ¥Rù|>›Í&“ÉpŽÈ˃ ƒ,Ýán#D¦®Ò¶€V*W©Üu÷=gÏœÞÿÂÏëŽcsc``íè©Ó?zaß©³cãç&Ÿ~ú™z½ñ‡?rÕUWõõõe³YêéLç@ˆÂ%ÂA„þ‰ÎI\d¶‚ÈŽ¡Rª¶°°{÷îÛn»íK_ú ia´á°’+ÜT®d"a'ŠÅR.Ÿ/—ËýýýQÉ?†ª°â€Kj+Tš711±°0ßj5¥”¾ïÑ’¶,‹œÙ·Þúî{î¹ç«_ýê×¾öõßùÛ?þñ …ÙÙÙéééµëòù|±X ­I´¹4C4ŠÖ8,+ô”¯¾P9­[Pgº»î¾ÿé™™×^}u¨§zðàá–ÖÛ®ÛÑ»aý~ðìñ'GOœüáÏ^¸ùæ›ï¼óÎ]»v ær9Xòš“%•·°=ù°¢SH<©³ õä#À ‚@« •Nß{ï½ßúÖ·šÍ&Ù/Vaˆ¤pѾ§iZ•îî®J%ŸÏW*•ÕûÕÄVí)a½^?|øðë'FçæçZ­jÝh4 ŸÏ×jµZ­ñŽwìzøá‡üñÇüîûØÇ>–Ïçiž`OOO___Èžˆ­—á‘PJ9ŽCu-Ô.9•J‘êÍäAR)Ë2Pg›vì¸ã®»§çks s‰Lößý»ï¼÷¾‰éé×îú·§¿7røåãÇŽŽ>ùä“Û¶m»á†¶oß><<<00Íf àùòÙÍ ÷ì轈…ÑC´EØjµ–ìi­f³97;MMœo¹å–§žzŠRN¥”|%†µÈ1M³T.“u£¿`Ë–-m•Ïq·†_Óe_‚·š4½ù˜žž>ðâ‹?øáÆN¾^¯×¦¦¦æç=Ï«×ëBˆV«µ~ýú[o½ujjêß~òÖ[oýÔ§>U*•¨—“ÖzÛ¶m™l>4j…)¢÷h­[­MŠm¥¤yQBöcYþC ÆT …Á½VëÉo}û+ÿÏÿ½vhýÇ>þÇÃ[·úÙ±c£üÞ÷ž£YŠd¸_³fͺuë6mÚT(ªÕj¥RÉf³‰D‚ΖDñ <Ïs‡\þRʱ±±V«5777;;K€E€ÛlÔº»»?ûÙÏŽŽŽþíßþ-$“Iιò½eÿ$˜¦™L&S©T&“X;ÐÛÛwÕö«w¿ó‡7ͼRêU v1Ãú ÉÉÉ—^zé¹çŸ›™ÀÙÙYâ¶mSå`OOOÿ믿¾gÏž{îàÿøóùü… H½^³fM.—SI;'ÅŠ†Ê„ú:aAYØÉ+¿°°`F©TºäJS€!7„F´S™÷Ü~ÇÑc#c'OiÙ\©^«ÕwÓ¶­Ýk×¾÷½ï9yòä‹/¾822266væÌ™±±±×_ý™gž! 5MÓ²,Û¶éc’˜%¥ô}?²€… QÉ\fš&<›¦i66vvÿþý·Þz+]²Ôf’‰åÏ_)Æ"›Ë¦Ò™õ6¾ó¦›6lØZ·b­=¬8.­V‹Š–æwîÜ9rä¥ýû÷ÜÌÍÍQ ½b±xêÔ©ùùù‡~ø£þQ³³³¶mÓ€œL&ãº.ãoTäD]ÑÉõd­, ¤(5›Íz½Nf+"Y«/W À\ϵm›1îyAWwå“ÿñOêóµ¾î*H™ÍæÍdªæûv6¬§§çú믧±ÒçÏŸ?qâÄÄÄÄÜÜ\£Ñ˜››[XXp‡$-ÒžÅ(QM¥RÉdÒ4Mr“Cô<ïäÉ“### w$®»îº7ŽŽŽÒ0Ðj9ŽÛ‰B‘J¥’‰äÐÐІõëà ¢ˆ+ŽÆ”RÇ{ùå—ææfvïÞ}ß}÷?ùä·ÿ—•Rš†ÂоүŸxôƒ¿÷Ýw·Z-Ê›ÍMKÝD¹0CŽΩ'?‘5!D£ÑÐZ‹EhÖ¥B‘!Œç³9Ðhš&ðv Rx¶ÆÒI{‘ÂØ¶ ùB%_¨…ˆ¦)ÊfZœ“^N€»víÚn¸ëõ:Ñ=êÎÂD¸oH€ZÃcétznnޏä³Ï>û¹Ï}naa!ðý­[7ßu×]©TêÝï~÷ÓO?½¸‡ÈVºì ¥RaÙÙBÞ°,dŒü¡Ñ­Ò8bÀŠcEäª×ëG;þü¦M›o¼ñF!øÚµƒ·ÝvÛ“O>Y¯ÕhK«P(¼ë]ïº÷Þ{ëõz89lŒEÜÃ~~ä½ T²C,&ŸÏOMM'‰‘‘ÇqvïÞÁøøøÀÀ@(ÕG—îå.ãðøp>ÞÓSýØÇ>V,<˜N§7lØpýõ×oÚ´‰@rÐÏPâ©×ë¾ï“¡<ô^E+u¨Æd% šÈ000033cFµZ=uêÔÔÔT"‘¥ Ë\v>´,º…ðÅÖOÙR„ÇИŒðQRßè×d2 /¼ðÂW¿úÕgžy&™LÞÿýû£GvïÞíûþüÜÜÖ­[·nÝzáÂÃ0PË@ç Àitaˆ•7âˆ+ŽŽÅ5êÞØÛÛ»°Pk6›ÙlvýúõùÈGþàC¢Y͆axž711AîJê Lv*"V¤—»º£ólH†w]7„Œb±(„¸pá¶-[·lÙòóŸÿ¼T*õ÷÷;vŒ<ßmHôæ×tÛ‘QY[åM›ZDçF'I(22­u­V{î¹çž}öÙ}ûöù¾ÿ¾÷½ï÷~ï÷ÞûÞ÷fÒI˲fggóù|µZúþ÷¿¯”â+^v†!„à‚BaÄhV—­VëüùóJ©¡¡õ¶mOOO†Q«ÕÇÉd2¦aJÕl6ikü Ä;hmSCw)åääd±ÔEÊ1%ƒa·)j³IòÖšöþëõú+¯¼²k×."b¹|¾»»{jj*•Jå‹z…(ü]AÙ.Ü·h[0“Éø¾O– ß÷Ïœ9sèС£G>ÿüóóóóÙlöÖ[o½ûî»o¾ùæR©¤µ®×æµ÷ãœoÙ²%N×jµB6³Òi,‹åBašF̯bÀŠãÒK7*`-,,ärÙB!/eພR‹«waaÁ÷¼ð`2|R‘01ªt )Éùóç{zפÓéÐÚ‚‚ëºá$zÂ/ÆXÿÙ±3ÇŽÛýÎw6êõÇ *¥Îž=Ë AnÒ_ø£E WXˆR}ºÙlŽ:tèÀ¯¿þz«ÕBìÞ½ûúë¯÷»ß=<<œJ¥\וR¦S *‡nµZÙlvëÖ­¥RéìÙ³+ç 9äOµ,+Ö°bÀŠãMåM´DF¹\Ö4MÇqii3ÆH®"Ç÷ýV«E¹!8ŽCÀÔ¿8Ä‚©©©sçÎõ÷÷çr92a‘ä8  ·í °²ÙìÚµk=:7;«”:qâDµZíïï U°ƒ¬Þz"ÓÉÂûÃBe‰¥úäÅjçùùù³gÏ’‚vðàÁsçÎ>}Ú÷ýÁÁÁÛn»m÷îÝëׯߺu+õí#O?UAê…Í Ã(—ËÝÝÝ“““«\yƘi(8§~2ñ2¬8Þl,6E1h|¼+¥2 #¤7´,±ÙlÒ>=J¸Öµ415âB IDATÉÉÉJ¥Km Èéy^(ÃÓ¯–eÑÀwD>tèÐŽ;î»ï>Ƙaš===§ÏŒ‘³”`nYöôfxVÈìB´¢3™žžžœœ}íµ×FGGÇÆÆ&''ëõz¹\þèG?zã7nÞ¼¹\.Ó&©ã8333J):óð#†R É+•J„Œ£t¹¸ Â0¨0(n†VoBÊ€ÅQz‹MQ]Ç¡ySJÊp+ Ÿôt²/«¢ûÉ`Æ«¯¾’J%Òé$pœC³Y'O¥a-4ÙR™tƒC뎿æškR©Ôž={6nÜØÓÓ3>>Žˆ===aq_¨‹…Ñ©áÝOY*Yè0×uI5 ‚ V«ÍÏÏŸ?~dd䨱cGŽ™žžžžžö}¿P( ßqÇ›7o~×»Þ•N§s¹œ½ÔY°Ñh„eÛäØˆ6áÓÈ42Ó´ÑT±Ô5´~#ã] :™pà+0†–eh-i«´P(B콊+Ž7ŸRã\R)…¨ÃlŽÀ(º_þºÒýpüøñ\.·uëV‚ r0¤ÓÙ6¡•¹ Çq^ýõr¹\­V© ˆ†$§ÓéB¡@[“¾ï‡„+œáJ*~ØkØ÷{ RÛ©ÉÉÉñññcÇŽ=zôÕW_=qâÄìì¬RªZ­®]»öŽ;î¸öÚk·lÙ200P*•lÛn4„J¡{#ZZ´•‹ŽËçó¶mèeXÎ9F=ÂÈC£U Xq¼)’EK%›ÍZ–¥•’2ЈA ‰.… è×FEÅ Îû…ããã–eõôô$“Éùùyj|¼\R©d2Iþ/Ïó¶nÝjY–”2ŸÏK))ËçóDÃÄv°Ô+†fvq£ö8/¿üò‘#G^|ñųgÏÒ6h±Xºÿþû·nݺsçÎr¹ÜÕÕ•J¥ˆ¦9Ž377—ÍfÃnëÑ«´ `…vS"}Õj5™LN£íYDЄa0Ɖ¤a…Eh‹3ĀǛʀz ¥i˜~à“ŠN5+m€ÞŽþ¼³´æœŸ9sæÀÛ·o×ZÏÏÏ—J¥èšŒfUÔdJ)•N§K¥ÒüüüÌÌLooï¾}û’ÉäàààÌÌL£Ñ(—ËaêGÙ_"‘ éa4ù&‘H4›ÍsçνôÒKÏ=÷ÜþýûÏœ9Ójµ,Ëêïïàvîܹ}ûö 6tuu‘,E@n&!r¹œã8aöGÄ*Üè\ °¢óS °lÛö[õh›ü¥F`†iÔ½/™HK¥_`4ް~«Ã¶íR©4==å8N¢`«¥Á¤”«Ë Çu-Ër]÷ç?ÿy£Ñعsg*•jµZé´€¥ÆxQÌ"oÙ*•Šçy“““¦if³Yê#¥t]—T3ÿ‰DZ­̓طoßóÏ?¿gÏž#GŽ4l6{õÕW_}õÕ·ÜrËààààà ½ ½#™3PÂ9¾ï“¾µÂ/«úu¦„aPáÉ‚¡å5|:ç̶¦e¦™L& …BØ:þƀǛJ Ãèéé9zôµùùù|.O2åYmšz'Ãê¼Aˆ ><22’J¥n¼ñÆf³iY XRÍ£T‹È)ܦivuu‘uxx˜Ò%Ó4ëõz½^'£fxò­VË÷ýl6{âĉ'žx‚ºªA°}ûöÛo¿ý†nؼys?õJ%†çy”»Ñ&µoâN¸ãÙC«ïNÒY‘ÞˆÉdÒ¶íÎ×!p4L#™LضÏç ùBü%Œ+ŽKD[ÎyµZMØöÜì\oo¯F4i±…›ƒmÀ´i­¹ALOOŸ={–’»r¹Ü××G¾§èû†D&¬7 ŬóçÏ“‰Ôqê÷K}ŠÉ EÆ®W_}õŸþéŸüñl6ûÀÜ}÷Ý7ÜpCOO!'áÔRíž!¥ ‚€„0Ú1ˆ¡ · ÛÌÃÅ#!V,ר1™L¶Oê5®I§3étºÒÝËçVŸkG Xq,Ùl6›Ëyž'I³È~½ì.aôžÎû]ÏCÄÉÉI*ÙùÙÏ~644ôÁ~04@µe@„AaƒDÌçó®ëÖjµsçÎÑX­l6›N§i£0‚pp||üþážzê©;î¸ãŸøÄæÍ›»ºº¨»©ï¡ìEƱ¨©Ý÷}jåLâ:í*F硆XFpvIÀ ç§Rï°6÷çœ3nšç"ÉäóùR©DÕÔ‹î1`ÅqI’þ䜋ÅuëÖNÓR§¦zDO:Åu:†JsÂr<)¥œžžž8wÖ©×J¹ìÂÌôSßüFµ\ºã®{È¡JÐ`Û6Ù’É$‘/ÂbR´Ñ&¥lµZ•J%—ËÑ®%üÄÄxž÷…/|áùçŸÿû¿ÿû{ï½—øm)†ÓÃVšA0}(çÏ: !i%À"8# Î÷ýD"AaÛ|[Œ1Û¶’©d:WH¦³v2=0°–sqIúǯ[ÄcB~-b`` •JMMM1N}Ö¹mÛT‚õ^­äiG`yžwáÂ…F£n±ûÛß!Åæ°R£äUöȨÃg¥RI$¡JJIçyÞ¿øÅÇúÓŸ¾ÿþûÃ3‰6¹Ô|ÃË‹Õé¡[ø¦4z'ŠhÂ0¸–e'“ÉL&ÓÓÓCF ø…ZïÇÖo{ôT{Ê]]Ó33¾ç›¦©”¤~2rå qxV8ïoaaáìÙ³ŽãP_ª¿;pàÀÓO?=33C‹™H©W+mØ% jPEGRM¢Öú»ßýîc=¶cÇŽ‡zˆÌ !ï‹Öuÿt¹×¦¸ÓçjµZm–!„mÛÔp9“Éôööf2™6ÂG Xq¼ÙH$CCC033cš"x¾ON¥e÷;uw²nMMMÑ|*ˆ±,+—Ë1ƾÿýï¿ð FC)Õl6CÆ´ @„ä…25𠦵þÉO~òÅ/~±X,~ò“ŸÌd2§N"Ý-:§ë’€W(è$£E×D/B+Ã0-˶ìd2™ËåŠÅbh¿{1`Åñ ¨Z|pp°T*‘)<‘HøžOêLècˆ¢­ZèIN“““T!LÆÚª³,k|||Ïž='Ož$­'Ü\Ee‹ÊL4kçææ¾üå/ŽŽ>ôÐCW]uÕÄÄDh°j¬¶2 ·(è$)žhØEù 0LÃL¥RÙl6ŸÏ÷õõuww·¡gü Œ+ŽË,(ŠCCCÔ‹JöÚFÝDMX!l…­G=Ï›™™™›› ·ÕhÇ0+•J:thïÞ½Ô²†¼ «¤_R£C´Z­'žxâ{ßûÞM7Ýôþ÷¿Ÿ<¥Éd’í¤NW°V¹tѬ(jȰˆ^Y–™L%³¹\OOïÐÐÐÖ­[Ù©ÑêŸ8bÀŠã2B¾aÆJw÷ÔÔ””2kª”A**`EoaŠÜ !ß!ë&Óét³Ù|þùç_{íµ°Cé*V4É")Íqœýû÷éK_²,ëƒü`¿çyÉd’†Œ…ØÑWêâ¬da‚é©©©f³¢•mÛ¹|¾§§gÆ 6nܶm[¬^Å€Ç/¹ *•î¾Þ^JålÛ6ûabg«ª4 ƒLLµZZÙQ†*ñ´žmÛ¦– Ô "[lË¡çä‹èØììì³Ï>{æÌ™o¼ñ¶Ûn“RÒ›pNWTWjÛ.|ë½]HµÖ ݨ·* µ.—»*ÝÕJ¥ÒÝÝMƒ|â¯\ Xqüò$K\·ëú|¡819Ÿ”2€¥.!Zù¾ÏQëÀGèÀgZ9ú…sg[õZOTþB¼0p³IËoÕü£ž;;F2yØØÒ¢hý]è}w]—ÖÞ½{{ì±D"ñ|`Íš5ÔæHVô¹¡Œµ:3ºRÁ œ)ÔŒ!çà{ÍWŽ ü7 +™0lËN¥J]]…R©«»R®TúúúÚÎ0ްâøÅd,ÉdrçÎA´Z-šçLšTX3JìQ§;ÁÊêPH®Ñ .ŒŽŽRÅÌ*}¦È´å8N³Ù´m{||üG?úÑÌÌÌ»Þõ®«®ºŠRQò¸ÒàÒ·ž.”Sù´iš4\šè¤iš–eçóy;‘¨V«ÅBqpp0tÒÇ$+¬8®@X–5<<Ü××7== –mK©)C¡%J;}”ŽAP¯×ÛÌGAåÍ öxäEX©Þ˜P€Û»wï÷¾÷½d2ùàƒnذ8WhŒ¸â àe¥„áH Ó4O:uêÔ)!D"‘4-+™L–J¥îîîR¹ÜÛ××]é~°5ް~+èU¸,Óéô®]»LÓl4‚ ;a“HD³I/‹~Öëuê$µ ZѼ/ß÷GFF&''9ç4ÃbÙÖ´ñGÅ€“““?øÁ&&&n¾ùæ[n¹…4{š6Fž‰6 ë—Üõ»,†Eä1Üñ|øÇ?þq¹\~ðÁ{zzÂ=8‚­°Óü/ÀŒ®ˆq”Î!N×ëõ#G^QJ¥R©d2U(Êå®B¡X,•× ®ë*w1¿\¾Õ:@1`ý/QÅLÓ¼æškªÕj³ÕÒZ§Ò)Û²¨yejQ׻뺴/¶Ê·Ÿúä!ZXXx饗ˆ‘­‚,ÔéevvvÏž=“““´9ú3)Á$U~u?×[‹Mu8·m{ttôر£‰D²íl6[*–º*]ÕjuM__ÿÀZÓ2c˜ˆ+Ž+ü—6ÄŽR©´sçÎl6ë¸.–L¥ ôm;Ú7™ÂqR¾W±)D½àZëW_}õܹsË3²¡’ŠðàÁgŸ}¶»»ûþûïïêꢭzµP³¿²FÐ˽n$··Z­^xabb"Î$‰B¡P©twWº×®Ü8<œËåÂã­Ð*ÖþcÀú_žd… ËÆ,Ó¤ÂXœ¢J~…МIâêmRÂ)ad§œœœ¼páBXØyô²Fcÿþý§Nz÷»ßýÞ÷¾·V«…§é5¥”‰Db•šÄ·šy™¦IB[­Viµœ\.W(‹Åb¥R©öôôõööôôÁcdˆ+Ž+L²¢Ux¤7½ãï¨tw;Žk™V:•²,Kƒ´'ÏóÈy0??K%Ê« X |/—NMŽŸyíÈa R´ßG¤iÑBÑ ¸°GOùîžÉìïôa³(šbÚ´%ºÈeÂåÆ|"UOvIÅ2þ¬^!V6ò3J ¥ Z 4f|>)¥¡u0Ë 'XNðçcèBÖ‡LÀ3š§‘Ûš›\¶<­m Ù»oßó¹B‰'²™R_µZªV+ýýý6[¦§¿!7ðûµŽb±tà 7Ôëõ çÏ[¶­µ.•ŠŒ1¨#°Þ|Õšœœl4ÙbÂqr-u¢mGPM!Ù‹?ùñØk/~ìá¯_ß_hUÌÚÀŸfÆ‚a`Ò/ØÍFÀNÊ„ÕÈnwö²ÎÁeÓFPµÐ`b^ë†öÊ‚÷ɸ1ÊÁ`’3LO œ5p1'-‚,­Ey‘‰Yà¶'v& êÄéƒOýÛtåòks¹^Ûê*÷Vºª›†7çr9„ºÆžcÀŠã-%Àœõ÷÷_»ãÚçf£ÑU©LNL¦Ó™† @°äox3ô-t´“J}òäÉéééBW•@Š)¢WZk8~úì“_ÿŸ…Üwgžû7ù”ö^×FÇ:Çœ±l°¦W5°9­Ne1{YŸËFS!ú¨ÚOš 8…þY®"Ì‚8Ǭó´ mÈ LskL¡PÚ ”­‚„ôRZ€F"ƒå\u|ßñçž~EbÆ®& ål¡œ-»·nÛ^­V9g€ŒÅ$+¬8Þa LӼꪫÍÆÞ½{€4#Ïi ×u'lÇþf –Ên„gΜ9wîÜúM[©‘q8ÄÆÛøú×ï|ûèè«ñç¾a×¶Úü ¾N2i©=¦¾3×I;íL-P²€†ºÌÏ%Üõ*qTš Jö Lê% Ÿê™8#D·e æ†=Ĭn0’`˜ÀÊ [¨¦Ð?ã»§ç”çŒË`Á™ù©3ÑsÎúâé… Ìx¢Á-«»{xxÓÐÐzÃ0‘`*«°âx„-€d*¹cÇŽF½qø¥Ãù|>‹hóT»s)à{Ã*IzÖÜÜÜÉ“'o¼ÙO§ÓÔB‹sÞh4Z­ç|äÄÄWÿõkÛnÜòè'þ¬ØU(Ï߀™WÿÇ^í5µð²™ý€Êm«ñšÉj9–h¨ËÓ´gRcIÈ¥ý¬F9|ß´fŒbo¥›€gAtÙÂ5ss}™7l=Çw$T2x t0ó–wà]ïÞ×U…ý‡ô©I¥9ïí[wõÕW¥RId€€;EcÀŠãí X ¡X(Þpà Žëì}á…f£éA8dvÊÞ Ï ÇC¥:~ü8•ÒTrHó«ÿí[33“ýýY±'¥[Œg®e¹«º³×7‚SOµÎ=Óºð¶ÞŸªÜ…vy^.—ùE’)ÅnÒ;RÀ§,ë˜aoƒÌƒ,ùNÇ(ƒh0>ËØ(C΃,È2“]iý:0@à’2‚¡%€3+õhºõÎM•ý›·Ù²åȱÆ‚“Ï;·—+y@ À.^Ç8bÀŠãíÀ+âZÐ]íÞºuëË/½äyža˜ÊPB\Ó41ÔšJmVÏ µÖ4s~âĉ™™ª¯&-Œ¶úÓŸ>ûôÿøýûïxð®;µž¯¹-KLhÓB°·—­MeûÚ©s_žmþ=ÌŒðì‡Lk«†ËK ûçŒ?i§þÅ6„!óßC2ág_a>×ZC`k }Àg“œià$DB™’™ Mä*C‹3Lôp¸—é«6oÙ\*u›ö@ù‚Rë…HˆtczVo—ŒÅÐÂÛ¶uë>øÏ=Ö¨-AàyžeYSSSžï)) w`ÕFWaÓ;ÎùÔÔÔÙ³g{zz¨ú7œ;wîË_þro×øúÔ¿O@ɯ;&ÜP-gÁGfÉ´#Ò‰ÂÝ£ÛÿêÄô÷=w:Qz¿Ÿ¼õ²>Ô@íÿÒó*5¨3¿©w½€ê´®¹ |˜€¦bL ¦HèÛŒ#gÜãÐ2µB¥µá:Ú2 Uœ­'J‰÷e2½iëå…©Cks.SeL0`‹ü*®ü_‚·(>÷¹Ï] kQ¥bŒ!碫«ëÚkwÒ€ `Ì|HÊòˆ:Q{å°K,uã K…ÃæœŽãô÷o¼þfåqש[–377ö_ÿË—¾ÿÌÏþÛÿûé-[úoxΤÅ=ZB\)œœlªÈØÅ«}?ÌLµžH‰^7øFÆ3LCq­\€\À¸2¹ŸVè0ÃMÉrÞ{-Ÿóì#éÒufñ>amvÑ•r-|ÁGÔˆÁCí2å2åré1t™vA»¨\T¾Vj…¨µöô[¦” ¤•N¹fªÉ²é¹çËp«ÜZâX ÙÛEµ>ÿùÏÇK fX¿µ$ëDϲ¬J¥òÞÛn{áç?§{Zé……ùL&399™Éf©dš:#S¥4¾T8NöþüåÛn?¾qxs@ÓI|í±§Ÿxâÿ{è᯾j³`ÊiÌ¢ôj‡À9¤Â@ä2t6[ÔÙ.Ùœj‡Xf@×q,Jæo³µ ´FÆD‹1Aq”ß5Øk¦µ…‰>PIDèó¸68&”VmŸwñ6ãÑ®ÍoTh%•DdJi` 2,ÎI5¿Ï¦•Û "½”UÇVo}D'ÐP t?{ç;-Ëzå•#°~ýÔää™3gº»»8ç‚sÏó¨6Ø0 j½—Xf9ùÜsÏeò9;Qzæ©=ÿø_¾rÍU}ŸþôٜݪÍQåRŠiiVàLûˆ& PÚW‚åÓ%–˜nNs?Ìàf—°¶{†ƒÂ5UJkZh@.ôðÏšæI9a$?btBKqÞž´…Z, Ó¼mâáâJ+Z+!µÚÌH9iÚNóm˜Ü̉ôzdŒ(‚qÄ€Ç[‰Vé?C·×ô÷'ÉD*uøÐ!¥¸˜œœLùcÌ4 Î9õ«¢ŽÑ)ðô‚‹YakþkÿóëçÎÏ:.~÷Éoô÷¨¿ýëO ö²ÖÜù  Ã@-ßB02h™ Pº ¸’–V˜v*]åvŨý}zá›{¦gÎô÷ª¿ø³ì¾®¯¹pù"!é5=-¥0M­„¡%2®•bœsmÉÀZif%’]Šë ¸´ž5ìk-sS »5ãP¯ÖY0uö¾›4ö'|ôà °¥µÚ3˜Ç€À¸MßÂÓæ+'K ÒJi-Pf˜•Ó*Üi¿ö K®µP‹ã',#™Pó3'·­µ?÷WÝqû°[?ch\*©je™‚1å{a ¹ÖrdhKÉ[R3íƒm›¶)d #ü™iV5DÖäB*­X†Ö6IϦ¸ê¨¢n fˆÈ™DµÒèn-›jmt惈 €¨´r´f¨|-} ¤…zR7Çeã„•ì«ôöIîqÄ€G›žfˆBˆ5kÖ¤R)Û¶Ïm4õz=™Lúž’Ä,èP² Èæf!!äUáÓŸºã÷î½Z{3-וŠYÀ}ß7MS0Æ‘3` <¥™–6¢ƒB#¸L[ QIGJÀ´ßÔÎ>°¯1= $èŒæ³–¬XlÚâ?Iȳ `)P @ä9“€ ™bÚRˉî¬èO.‡4*Kc¬Å™ô”ï Wn0m«YËOªú¨L +‹`Å€V¿za ŠÅâ 7ÜM§,Ëœšœt×u)Î99BÛðnqn˜.m»¦ï3ÿÛÍï{×Zgêg7cÓÒ`Â÷ý–ç% Ð:RG®Pz¸à ô|í)*†\ï Ω&CUÐü4¨õÍ4_2 Ú³îˆ×Sú %"ÙM™fJB „AzY†…RuHt8¨@kÅ _‰Z#ó¹–ž<…:H©¤j‘­×­Ü:-¬¸›R Xqü*sÃh~dÆÕ×l]Ûsl{/ÿÑRÏïmmÕž“`€iH\0ð(¿«œìééúó‡j·Ü²£o0é7N)ô‘qå)Á˜FÅóÉUÖrçtó¨Êü®g" ¦M°Z\N'e3> ¤šìIšh@”Œ!357ÁÐ|f‰2@½d#…‘ ¦Þì 8 ˆŒ) Šk—1Æ 0Öá¤[—h»¦«pZÖN›Ù #]ÔLÃr-’Ãnñ÷*¬8Þ*´jKñ<($Ôõ»ôÐ Þt+{å õòëô$?;9廚iÈf¡§+¿nÝàÕÛ×oº~xÖ¶íÖÜ4 FÅ¥^¨%D(¡&ш€Z(¥5ª¦ï5‚ Á50Â_£'•Ç,Û²Èq³D 4 µž` c& u€¸4]".¾)11 ­Xôñ9""Hú•!pЈÀ5Òk*å *Ì+ªuÁsÐ’ŒëÎF‰mèÃV Xq¼…PEò99°qõ z s•«×&šw”ê:éøw*?@íÛ&O¥ fÙ ·RuÝÒNk6Ë0 RJPJë7ü¨9r‚¥|¥oNz YSh®´òhd-Æ( ÈRÚw<1%ù¬ €ÚPˆ¶¤ãÌ–æf1 ¨%‚½üû¢?;Áèb"Œ°¸ÃŒ Ô‹£U•3¨¢TR:®Ó@Ëåð¥ˆbV'xEµÂø[V¿,ZEÛº‡3) 9Éåyíƒër´RXKå*¶^¦ç €Ýôz}¡…¼LC º­¦OþøÀ83–ˆÛ0¨¹FƤ”M,Ho–é&¢¡µBH@)[ZyRZLƒifДB¸L¸ Ád)†ø¾”gË("× ,@†Ú”K~+öf-¾o%, X°´ÝÉQ#jø~ÚoCBà ­…/¦Ys^[.7PD‚-pñ˜È8bÀŠã—UÑäçp4syÀ‚–à”A€ŽršÒ̾ÂÀ´Ps†cŒ³ ‹¯”bŠI)Á÷-Û dÐbœpBŽEÌÒ 8Zk µ¯¥£ƒ:(×­”b&ÃP:À‘sa™ ×ó,!„Rjßdr @Ö c\i„""ˆGû"&õFJˆt>ˆHlk±Õ"j ZjÐZ*?ðýÀó9 5è )µø ¸ ªå£¯Î† IDAT1†Å,Î9ýŒ2¯¶?1ÉŠ+Ž_œ^…¬*[“š±@¹¾tQùIàÌ´MK5ã†Hpžb4 D†ÈgÉÑ.„0D ƒ–V\p­Â’Ws‰Î0DDਥh_I¥kh „žR2@Â6s˜È¹†¡<— 0Œ‚m–mV4TS"! –Úeà#«kTÀ,Ô @iP å ÌNG45IhI×´¯T€~:`\Àâ•Ö³<ÐJ€Ê§NQ´¢0 ƒê¢˜CU Xq\ØjË©­;cLKÆ„!x’‰$pÅøœ– O ©˜ˆК1Æj(¥”>—mÙRj@a:K}i ÒG-9h J‚\k‰‚' Ã2%–*Ë`Bú:ðjªá¥dž%'…¯OiDÒBd }Ô š<ë‹ÅÏŒ8Ô’>ÅuTÛ‚E åZs­%*©QöQKÊ4¢©cÀ„0L‘ðµÐ !bC£úð°H3Œ˜UÅ€ǕĬ¨ZLeÌdk°Ì›pBaur° $˜ ”P ³!j…LÇ@§5gˆš3¶•ÐRIWJÌ@@êâ²$*¡B_i ƒ0Œ Í”eÊÌÄÔìé.°§ê<°±Ö æÏg»ý·^ýÚÎ-ÈqÓ´…4‚Ö¨5¨3ž``¨¨Pµ(À#¢T ÈÀ8hEÞSzf K0©5\ˆ¤ÒB˜9ËJì¢Ô/ÔÝݦ«Æ±JÄÿOoywÅ_0*·‡ë©fP*ÆõyGð’­^çÒaî´RˆÌ°Pû¨ƒ¨bÊFDÔQ ™ÖµòQ¡V¨”` @W@ šÊgl^]sfnhôBvzÁf[–Á³é‚ÝÛ“Ot¿ÖW}º;ýRV æƒRDÜÔqQ1`b‰UQ6ª¥ 2Œq†À‘¨CDtés0ŽˆŒ Θ@`6šæ>³¤•`É<}OnC»‹£¢…³è¶išQUë—O cŒë·°Ú0+\êox• \M }Vèq†“('PNY)ÖŠ ¤WòR0‹)@@T蛥«•‹¨QK`™bZi@`€\3Fâ÷t+igÍܵ*±ÅªÄ´!LÓâM˜µtÞÆdælxÙŸ õ*¨‰<[Ò¤–ªé|<\l¿Ž@MI´ó”VÀÓÈŒEéÒ¬AD&8àÀLÆ-GŒ'ÀèçæVno{­ ..Æ©g…8Õ&ºÇ€V XWòe1bî¤3@*tA×AÏ#΂šÚE­=²–j Ê"j@Ј 4"  t• æ%ñ/@€è¶Åì¥ùŒ ` Û„cvYE‰¶’ˆ¨Ó(|`h‰ )4XxŽ›#Ü8™ NàâÔñ%Yø:~-Ãæ]Z¶´²¸H¨ÉŦdžœC@3Æ™À ÆÌÀ¬ £ÄÍ5Â\ÃD 2®„0•ÚòAjg؆2¿ èÄ€V X—xåÐäJB @{€¾&Ùœd¡E„PhÁ’Ç;|¤ÖJ>‚F½ˆnˆÈ ¨·b|±ó°èÖÀ5p¡Hm∨màŽæj‹éŒ@f &æ8:íß=ÐP - +)>áäA©pO°U…»Ë®êe÷ø–ݰ‹¦‡âݹ’ŽÞ™6v^–¨fßyä*}FÔ‡Õ6³+ìÚzÖ£¾ªðŠ­”me›Ën®â¿§Ä0›ÍFxß÷c>¬·5, Õjµ¯¯¯»»;›ÍRýMT\¿¬g¥?à´ZBnE|Êó<Ê£” .Þï[‰.ÑÚŽŠ8†£e—nT¨Šf@á«E³¤èù·í$¶}Þp'.zJp)×Uq¢b9Dçml+ô[-ûšm/ØvÑÍÄ6cZg¾¼,©´,‹ÔÇq(1 ‚€1'†qJøvD¥RéééèîîÎd2¦iBÇ0›em3CEW~¸Ø¢‰$a“ ú5œñM0;±2,OéÍe³›Nå» #VÊû:_¼Ó]Ù)G;X¹_ÅJZUgïÖ°r(Ì Cƒh´sF§Ò¿ºÏku ²3#^V CJçljð1`½åQ­V»»»Ö®][­Vs¹œmÛÑõÜæ/o¯•.vZEЫ¢oyh_h³Åwú!ÚˆÃ*Ñ•”¬•„­ÎÔrY:¹zªµl‘óeU Âre:¡`ÍCVt^Îå*ú+m,‹ÝT+:§‡Ü'®ë¶Z­ØÖ[¥R©\.¯Y³f`` ···P($“IG–m·pI´Š~³£úzÈ­­Hk÷Û$ühžrI²°zþ²¬â ])‘\v¡S)‹Þn“ŸÚ&3·mP,ëh‹ÂVçœgX®òñMbÖJƱeat¥× )^³lÛö2¸T–eä†úŸNë@‘ËåFFFÚív«ÕBIðüü|©TªÕjW7ÝÕkåú1¬^½zÕªUÃÃÃù|­Di }6p©=C\ŽC8…ÿ&¨"!»®`ÐõVvÒaüÃvD°ã£„(¬o8–ìã™=̽Þb×ꘔ¤a_ •áZQ;ôßH|Ô¾1EÆVF+hÜ3A)¯Þwuµhx5ÂZù1::Z*•†‡‡GFFÊå2–#ùƒfNæÚ ï7„$ÝÍ*®=Ðþ‹†/{¤)û€ÁDÉ;!¾-&’T2d_Ä‚<´Ñ”дd´ÝÄ Ó“Å:îÀEûöT*…¡±þÕ V[5DÍ%‹û‡]ˆ€‹šÞt:<êHQ¹r•€¿ X+<Êår¡P¨T*X$´Š|Ã'hpâÐ*ŽkGҊЊpÍ0~Á“à6‹!§íŒë¶ÍŽ#óÇÈÙ9qç4 ©õïÚF4Æ-D1# ¶ìkÖ+°¶ê û‡ôIÉ¢Q Œ„*ê1ÐÌ.k !Òét©To·Ûèó‡4õzý꼚.º*•J£££¨cÊårXß…Ó÷Ј<ŽÊ µ ’Ø*Y-Ù׊3R™ÜõmÁ1h»¸—ÈT1ŽàË%#Si;Y‹ü»Coü˜úq©h‡kݦäí QO9õx™à ÕÂ(Îr]÷jbx5ÂZÆ‘ÍfÑŸ¯R©‹E* ÆÙ‡F¦K‘ðA @a”Ͳ£_r'‘èÙ]ÍÉ´qdkÏÝJ&í Ïn 61=˜2ì ô(Ì$ŽH³V껦óPHeã£>b3°ü”ãRBˆRr©±ã8™L¦R©`…‰áââb±X\ZZºº¯FXýááár¹ŒáU¥R) ¤º‚•êÚõ9A•^‘äʰ9Nv}ˆìq±©¥¾T:$*§â´T£¡ïKÆGŠ ¤_=ƒž‡~ul¢¦Cò9ø?uÒ(Ëè4i,n·Ûõ<•¯W#¬Ø£T*år¹r¹Œ±U.—#FU§OŽ Â%°Ë"3£H‡–¸øH¿Tû»zPcÏ} H-²9rúiB(”lmjKðx}ˆòH°=#ÒêŽãèJ]ü±ïº£Ã€ªÆ•Çųq±*ÝÚf SœA«Õºº¯VÒ‘Ïç³Ù,¢"—î# QRòAr»®oL¤®f½ùf}¢/ý¸î–H³¡Aé`¥CÀ€EcëíÜ3ÒX*!¥ 0#¾Æ!&N“dž*jÅ0VÇ,ƒ-C™•ŒY¶–І###hLŠ¢¥ÔÕºáUÀJ¢®°É¹X,æóy¤®D¶M_†ÅHIÈÝ}ª7ß$,}'§ë³ª"!Ì–èX³¿’Õ ÐÏñå¶añ€€Q-“p©¿ >P{ò#bÛБ9rhvrE>.ši”ÉdJ¥ªIQ”†a¡P¸Z4¼ X–ÑP‰vš‡º2´ŠLaHÇ Ïæ"W›±²gá%ll‰Œ³Œfæ¾¼.Ç×C»«Ù “í©ÎÉv¬‘7’ð‹öˆH«B#öKEí‘›^ ŽäËã ,g÷ÈRC¸f aVˆ\A­V»ŠYWË<ŠÅ"…W…B!NãÌ.[ýœ0+Ô^Á´h{ÐdyJ õØÊf¯’;c"# =ûÓ½›‰¡ ±€‚+œ3F¦Š‘¶èÉÙ«Ñi¶9·&òÇŒ‚#)³¨;ÇèB…y"G"l²1aB¨eTEíßu]7›ÍV*¾c¹^¯çóù«¹áUÀºpär¹t:mƒ…B!“É Zés%úf| ) Épt¥¨ž Ú¾1Æ&Ôóµ¸ˆÃøyc€3h.½4Ä…9Éã!â$¦öWŒŽßH”4 ,U#ë0X/”ýš¡ìÛnÄw冃°–Éîcq}š‘á›ëº¹\N³‚ h·ÛW÷éUÀºp¤Óé|>_,1Îò¢HÑiää÷8fÊÞá«Ç¥–4æÃè^Fba‹42·[²ô[K®ZÆ­h˜Ï燆†0ÈÂ¥’ËåšÍæUÀz¯ØvƒÒvhOž‚³,‹ IW3¥ uØû0좸]ŒÃ¯¸‰UÆŽ ¾â¨1¸TV‹…ahðbq–mŽÒêk—´R×гHÓét2™Ì{Dÿž‹°ªòù*•”¢‘^½eÈi·×éFº¤ Ýò ó/È$¢\V"‹qS¶"©Mcëõ¸H³-[žfg ƒ;Á§%ýž¿c™7O5.æí U h)gÑ1+—Ëálp”õµZ­÷Bb謪7c|ûPW©T +ƒ©Tм%!¦Ãyðâ`œAÕ€";£±Eçv3­þTV³Ã·¸Ö<›üŠËlp^qBBÓXÉúÏëø§‹„ÔdÔhÀµmH[ ³H¥·ÆJ\¹p¹áUÕE%„8b‡Š†ívû]g9nH]søN ¸PÔžN§ñ¨cHhÁ‡(ŸÈV_›Mu*צ*"Å„‘ɈÙ`gHFP"aÛØ±R¤ƒ•!§€DËyݲÕ65`× Þmê*n<~múÕ&€©a/ƒ¿HÓ˜…zÛ¹Ý6p9AV\ÎYî4îNáy ôÁ%Ýn÷ÝYËH ßq!•ž º®‹0f…^%XÄ%çzq!˜m^nt“Å ¾m®Çf¦úÚâzq ;Ý)4á–!~²ñd“"˜t.Ì HŽcµ"Q22ií+F¥'Cì1Ù6£×°ŒJEä§l5"•h‘q~”ص£»ª!÷žŽ°H™ò°\×E´ÂØŠÐÊ^1q|ð€‰¡QY”ž{’¨nÛ( ¢zú dŒŒÝ ´¦ÓííÌ(®_$Af'§°¯ÍÎO#}!JNiwDÆ…9É‘WÜl:Œ OÆ ú0çeVòXلл/¯Ÿ/Æq³01l6›žç½[‡°ö,Âx'‰g; IDATY(¥”Ù+}åÅ©%“³‰d ‹«éè¯÷aé:œÅ½"5Gú/b2ôl1Áq´ïôVÛ£.Î}ÐઠjÚ}_ o»€E¢X²Ä~nF~Mi QÕ; ¡ß #†Šã1W€Y:ØqÎñelÄYïb2«?`ñKwV„¥W©‡ÐÊŽAìP(’»]Ö½ëu7¶ôPÈg9BÊð¨ÒKŸ†—yBäb» D‹ãÑ`Y©±Ù";r"müú¾9úqù£]Â¥*|#¢‘RÒâ1VKBV–ÀÒ^'#‘Ô˜MèÚ!¤!SJ“g‘$f$ô@Ô®8ãJŒB!Dy=C¼¶+ŽÏŠ$òÔ^†;¶a¥€©†Ñ|38fÙø5ˆai F3~P²c˜Að.ìA9,¬„ѵoÃdÐq"Úuêªï·¦9- Îì-§¿¢i®gd«`dæbSï(F«6\ª´²¹§8p4¶Jä äg5øÂ*Z½‰ªwcö¢=ê&î#Ö)!Rä¡^4²…@—¼G2 ýê ’ÑŸ[Ü?€GÌÒçò®ØŠò XøñPx¥çSogÀB®Ê»x`· ^Eò,ƒ„N+»k›&£ä+èö°¿„IÂq˜õíJí&F(”¯%OZ4öKøy›;O­š<0úõ Ú6~ÆÿLøàéÐn”p_£„aˆC h-%KÒ!Æ„:¹F±2ÌBqV:Ö‡ŠK);N*•êõzï À¢ÑJÏ ß¶dbXø ¯ bº@ìW¨þ•8cÂTQ¸´2Mã[âh¬8—ä„N #¦ÓuüzDæ} ]A¶×]Â4f{bd‡c¤w³¼Ë}a${xÆ M_¢‡ÆcÑóDÚ‘Î&­ìF÷áb*Æ·„Žã`n¨cÖ»‰ÌˆÃ­ŽãmXxÈ^éhEùl$m1ãd‰³"ƒ‹¸ˆC·.ÀÌBÏàâú„íy‚ É;\Úº‰_6­‰UãD˜}e 9FZË:É¡GÜÇd´[Åñ\v7’~wF^©ÿJù Æ®+ŽxJ½3ÈòŽ<³Ž}(tH§Ó4œ —A¯×{wÄYÆVHcGêPÞ>2ëU˜ â5³›ìdÐ.f­,%´;ŠmäÒÓ })ãR"Ʉ뱛Wt«M?ÙH Xµ›âD©Ûtévä`Ädùn$˜\è°Æúþ¢~‚ÖMmsõ9.ÚM–pc_mäÍFþ˜ÍT’8‹â,2¼}`–3Èö£ðŠ4âoOÀÂË£ú ]°. Ž"S»êo|%à"ÿ–±É€ä£v¨eŸ$!<¡–Îì$w¨!†à‘ŠóÈ IºÇ @Ö­uŒ5rGBz\˜9àAŒX—¾H“up!Ù3VQcõÕ‰Îq±­ý·Œ “ Œ³tÌzðNß×®6=ŠkùÕ¸žœ‹†ZÉ•Á8 ŠìG‰û݉g{‘r£´—ÐþWF´3;bÇ’ÓÞ¸ñ‚ö«¸à(a³Ý…gö>‘§ŠË#)¼4±%õ bzè_!†„t›ÉáÄ’Œó)LÎv1hÆ!¨@¤™rHf½Óƒ¬A#, [¨Pø¶,e£C/kFŠ¡ÉŒ§’£³¸‘s`) ìE™ìÜbü "Ž«²ý["§ìÙL¤[C\%1ᑟúé&ú„Y::èJ}[gɵGΗ†D—»ÕÃ+ü ÿŠ´l¶Ã«A`+9ŒÄ¬¸‰>¸øS©”>¸§Ì½£‡°:–îÊò¶,¡Z%“è‘!C$X$ϳIÄEXzÙÎ0w”JFŠ6íít~ékd£‘,U ÛåQ[ÍŸìÜ`\ªíÓ ‡K "ûÈÝÛ—íêË”ÙMKºJŽ+’òKî(Lðt6â¸H?’¾ˆÌèuÌÂ8K'à•Rïh2«„¥3îXq{»iÄô#²‘(¹Óírèö„p#îµ9b'lJþ»zC¢®æ×Mu ˜îO g̓܈½7"Ù®H±U{¨w\Æ•íÁ¬äš`‚CV‚þ^¿MÔdÅu•Ç…W0ÀpÉHǸ׀ ñ‘>a–çy((%YÙåÄY+Ûû—?áeUBºí·`áf3 *Rr5HͲªƒC^$Mkt~Dò²%:Mˆb0ò7º»íŒOçûðà "y"ry&¯g]0eØ7ã?0裂€1ÄP¯iC ã#Án\n¼t¤Žü€"·€®FÔ[ß8:!²ïWïJ^·Ægj`èI†N’¢΀<}^ô¸¨yú†=Pv¹(6Pó3®lÒa¾}‹¢¾z$W}c‡+^%“¦†=1.µ¸ñy}C-c¹`Ѻ‡Kµ…¤ªEû | ÙÕ »`O/ç РÓéèE(#Ü ÃO„8P½µ4õž ´q[ &vzO/aÛ‚/ãäø]:ˆôÕ-÷P(€ç'äÒÅ}/L5bj{”·ÎÐGfLÛµÝÿ#•JÑKÚ¸0¶ÂO™ôív[)Õ71$ 6Þ¾ÑO:8Øò"Ôð6Ó§JHä"-qûºå\;á”ýÐ=[’  H²`8K°¬K8áå̪J(x3Æp‚95ŽP„…_D§L&“Ëår¹ãÀ9²%ÅÒ{}|ßïõzN§ÕjµZ­v»Ýn·¹ôÝ¥‡uBˆÌŃhPýâM:N·ÛE'Cý™!Zá{½d““U4^p§Óñ}¯ºâíë¡E:C(c¼ Hwˆ4ÄMôÂÿ⣠çÐëõô+#heŒQ·,Ä °FDèt:FCišw/¥LH 1FÉf³¸T #¹þiüDºÝ.zÒã( üÐ/+¢ý€¥ý•–=BΈ'§¹—ÁÝVû~7nÅ †ëÙ$qzCA¾o²Ùl¡P(‹¥R ÿAƒ¯q5GªFéü¸¤êõúÒÒR­V[ZZj6›­V‹L/éñíy^>Ÿ/—ËÅbARÞ5.ßf³¹´´D<¡ddít›®ëâ‹E€({õ}¿ÕjÕëõZ­†éºn.—+‹…B1T6A¸LAöãÛš‚²H5rßÖÂ82K­\–––¿ðië ÿ:Z÷ᇘÉd @!€À™:KKKx§øWPåGfa™Íf‡†††‡‡‡††òù¼çyôÁ­l¢Þ ½ðšÍf£ÑÀŃø…o”„tuPÒµ³ø{;–ÎADÎéÜØBX\¶¸¼'cJò¤ø¸Š `z£ p hÜo81¸T*U*\‚¥R©T*ae¼Ÿ §D†^׸ªÕêâââüüüââbµZm6›jº*î«b±8666<<\*•pkQ`‚5¬F£±¸¸ˆÙ¢î4©Y7†Ç‹ÅÑÑÑááaÄ,:9nN§³´´4??› g»Ó¯ fé×C—Ôét0cr'“Évµå·¬"fdËŽþ(ªÕ*ŠTõ=¬ëqÁg2™R©dŠÅ÷z½V«µ¸¸˜J¥Á1¨!”40 ÏŸJ¥r¹ÜðððÚµk'&&*•J.—[q¼¢V·Ûm·ÛʵZ­V«U«Õ¥¥¥z½ÞjµèÚVHº“p–X·`é\ ^çêKŸ/‹\ï;½jXL €1·v#ç/ ^+TJ*Œ±^¯‡ïZÖUU*•ÑÑÑÑÑÑ‘‘‘J¥‚!F¤mtdM ×7XNc–ùùù|>qÊüü<´Ûm ï)ù*‹ÃÃÃkÖ¬Ñ×½Ž)õz=NÓîÂjȌꙚçóùáááÕ«WW*¼zIø¾ßn·ÇÁ+gŒyž‡û|ÕªU•Jƒ>J¢1éõzívwÞf6`­ :9X[‡W!„ïûÍfÓqÚçºõ f©Ùl¶\.ŽŽŽ`­“˜xª\.Ç9'°À,?&)%>º$üàr¹ÜÐÐЪU«Ö¯_?>>^(<Ï3âÊÁKÏÐÛív³ÙD¨ZXX˜›››ŸŸÇ7†–Óö£ˆt×#,¼â_-`E–ä!±fYôÓ €‰>—‹pcžÓ\îûR*ˆ«Ã@¢g ó+¥8c sv‡+õt».¡FÄår¹R©ŒŒŒŒáâÆð †ˆð„2…~mÕcV(òù<Æh´çÛí6e1¸ô1ªT*ccc…B_{au:l6‹`‡o]êƒ(!¨®~ “ ŽŽæóyâãzpÛû¾/pä¡1ÞD/ `Ò v»]ÄM,а°èt9u§„Ñó˜nc¼Óh4(ô3ê›”h#`ŒŒŒŽŽê¡+\êDˆ€E ˆOᘘG›Æ?Q(*•Êøøøš5kÊå2q+ްð6 7kµÚâââùóçgffÎ;‡ãþ²#,ƒt/—ËÆW°âz/ùkµZ6唌VË"Îá¹ú†ZŒë:‚ƒR¨±ÐA(P\)`c*“’Rô|eLˆˆ3x³þJ¥8‡ž¡’ޏx5@I ¼N§C Zh5~ñÀØ 7QWœó<; aMÉf·á‚RM>ƙˀ3–wœñ1«j4 C²É×Ý\‘,×:Ü ZÛ2™\.‡±ý<þŠçyŒ±N§Cœ®1¸´ÛÈR©9Æu]/Îårù|^GCš-ˆðŠgÆ”ƒ&Œ=õ_ÑyÏó0ÂBŸ)å+ûÂÖÕ-È?J)ëõz6›%a•RhË…æ”ø0Ëå2f÷zJ¨ÏaÃÓ"“µ¸¸X.—«Õj£Ñèv»X¡ƒ‹Í’º‰°Ù\ÿÊÐÐÐe–^´Å8ÃJ¥R.—1ô¦û%®mUBül(ªÕj_ûÚ×îºë®ËüÀð-AD/~1“É 7›ÍÅÅÅÙÙÙ|>·Ýv~6‘ÄûùÏn3Äüà—‹P}Áë‰'ž°¿þàƒÚÑ™ë ÁâÐ-¦Ï•³ç›¡0ôð‘KÆdÚþˆ—Jwzá Ô†[y)px+—ž)gªíN>  Bå6{Å@¦”rs¹,Îòù|.—›˜˜˜˜˜C´"¦ÙuÝœVþ©0œ;ÇÀŸQ²†‹¡j€j3*`J9 ¸9•VQbmÚÝÈÒëEnõRwLoØ¢-G‰F·Ûů3ÆøEA@&“yüñÇñ-ˆh%¥¼ñÆGGG± Es¹ çûÈžÄ Õ}!!Ç9|øpµZM§ÓD •J¥-[¶`= ݽxT«ÕÐËIè±±±Ûn» +T‹äœïÛ·onnN÷oXÁÖÜÌxBß÷³Ùì­·Þj‹ºb ÿ:LHJ"7›Í—^z©Ùl;< Ãë®»nÓ¦Mù|ž~×F»Ý&Ž —ŽY\.*ÆÓéôæççiÏöÕaI)ñç1ÇÆ·‚ïûø…B!—Ëaö†_ÇêÑ2PJH:Ôø×jµþð‡ÿaÙßÎ;‰53òÁÇÜþùßüÍß\1BÅÛ=ö˜ýÃùÈG Êù@)•rS¹ÔܶUÏV¼S,tÅeÀTOñF8ñÊôÃÍÎj`®T¬//«£•ëpÁ;y·¾iloÑϱg¡T;Ǧ?Ü莃bŽ#\×ÁýY©TV¯^=11±R³+Á³Ý—¡ó¢êìíõŽˆÎi61T SÀ$@*dJ8aO„LIžgî:‘¾2wÒw4½vcR+®_n42Î_}õÕ?ýÓ?5fÿýå_þåŸÿùŸ#O„¡Ù{Â¥ãHMßzüâÅ“ÿÝßýÝÁƒõ3¯_¿þ‘GùÄ'>Ù±îëÏ8B|÷»ßýêW¿:33£G¿ök¿öùÏ~ýúõ¸Žãìß¿ÿsŸûÜÞ½{ßÒ¿jÕª={öæ‘Àw/8rSrD·G}ô _øÂ™3gìsþÞïýÞ¾ðÔ²P"ŸËåÉBå„n¦zá #å‚L¨=öØ—¿üåW^yeY·344´nÝ:‚ _sÍ5›7oÞ´iÓÆ¯¹æšl6K3bðf©¤Ól6I†² À2R·ڴOaŒn§Ñ§Ðo°(‹ ¨]‚Äë ‡çy¶¢/ÜuÁqK=9È™‚˜uyÀ\½\”Óó&D˜ Â$À²hfÈx2-ÚEgIùã‹Ýñáòó§ Ü pîdÒéžÊK%Zž—Æu<66¶nݺ±±±±±1$­ða:¯Bð}ÙûYØ~%ì4x×qTG0P .¦˜ 0¡øÐò™%ºa¸è'üÎk"}<¹‹gw¨t^)%Ã0¸è&®n¹@6€R  P(Ø£‰i\qÛ¤¿×;¢#|ct [)„Èf³zKü/ ó%`´ä°¬‰ë¼\.#º)|Bd2"§íùÞ—OËêÆaº-i—hFqpº2ãäÉ“:ZáI°öwêÔ©C‡mݺ•Ê/sˆŒdax›0€Y¤4'áX\\¬ÕjpQ|¾gÏÜ5×^{í 7ܰ}ûößÿýß%ë]L±tHI«þ¨ÒaaMtû[wšRÌI¬G–…V}×Pܯ`²s%*d£g¿^íl¸¡ü­”˜ã8Wà8Õ-Ã??¹TœïlöÃL*ˆ”êËÂsÃBêìÚÂÞ1ïeW†A˜óx‹1 A¥9îº%'ȪnÇóÒ™LFQ,W­Z…h544„ QILAk_Ø|ÚoÿLõ¦xÐ ÷…’€é%p€3¡ $‚ÓeRÒ‘~Økt{/½)¼’V¯ ¥o„Ì=Ä^!ZaTÖ$g}hmBü/¥i¤†7œ…mv†È²¸IÚ¤ª·kÒeS‹ˆCA:‰R6ì®ø{štˆû7Ø:RŠP>¨gR/¼ð±cÇŒuK—zòäÉï~÷»7ß|s&“Éf³ù|ë-פR)RNP㎽0ß_Á­qÎIHA_?vìØÔÔÔáÇ÷íÛ÷±}ìá‡ÎåóȲU«Õ¹¹¹óçÏ/..b ¸<Ò =®ë^‘öű¸:ñ <žÀÀ‘Áù©å‚” X†>S°’{!ë*VPjžIÅ XPNØ8ôküNµ»¥ç§~ɛǗÀ¨|º¾±øÜXfoŠ- ɾå+V6¾Yÿ­L0.R)™N§óù¼RjxxxttY|³½Æeã ÕúwæÏò0Áƒ0d 0œ—@”@dA8Œ…’µCÖc~Ãí-2è‚b€Õ–á)®ê*œRÍŸ ­Z§ÔµT“"|JìEâa–ž Öc¬§™ºLœšœ ÞTïÂÊá\%^ \jx@i)aàF¼ºGŒøôMê…B°Ð˹|>{QôûÔSO8qÂXB‚333Ï<óL­VC¤££n·ëº.%† \Êà8€/{)¥0Œ:~üøÜÜÜÒÒÒoÿöog³ÙR©444„Ulê‹ Ê@À¢F-ŒÏ#ƒ—·¼0%„íñô‹P¿¾²‰^úUE²—Œ·ÔÖœšu‚æ…ØZ¢süšÔOduuËY„ýgÃpæ—¼jÙ=âªEÆ$s€«PhKgIn<Óy¸©nd"ãyJ)èõzXÚGe9ŠËÓét15.ý¸»ôý°¹/ÔÓ˜J1¥(ÑóJÊ)»|˜»k¸3¢ <Å”js 7#åK !¨l1 ) À]P éPL†Å=®·)›Íb}”åívÛ÷}C~(  âÙ¥= ÚºöÇ„'‘R*©uJû„\·"ŽX<¡¾µ0!¥oüIÌX;µ|QµA¿#©çœãH›Hëw×uQK‘Édôn½äŠ5ù|>ŸËe3™”çqÎ÷ìÙ3==­?%¢ñ‹§OŸ>pàÀ]wÝ…âø|>O¼>&k®Ò3äœcþïbNgoŸb±9ëÌÖÄv:ÈÔþ¿øE­Vëv»ŸúÔ§2™ %­ÔƒAxݰhQ¤1:)îÀa¹¤%`}O5T|"ø†1›tï‹#ƒÀÓe:I˜¹ VÍÉû2lR¨£.ø 80®8(é§älJô$~È%MWdœÆ¸·?Ë“€?+AÉ03þGÛlˆBJ\p˜zžW.—ó…B6—Ky^žwà̃Þÿíú§ÒR:0éC7¡ðs…áÄ_É윻‡5±ÕxŒ×J¥Ò ×gƒÆ>Ùü6kþ<ÕªŠ¶`!rO3Z?÷9V8žú;ÜKXeǼÃ~+ýؤ$°}ôt/.RR‚eÆi¦L?£W)u²£- mhÌŸã8·Ývjå Ó騑`&“aŒ:uêìÙ³½^ /<[±X¼çž{ªÕ*!¸Þ:çº.’ß×_½¢^¯7 Ô"éP‚qæƒ$£{úé§_ýuÚM¸Ã ŸÈv»ýè£^wÝuU˜¢r‚ú"1¦Ü“1æÁ.¦‘‚›B¡ðÈ#är¹¸losiiéÍ7ßÜ¿ÿ¹sçôê*µC9rä«_ýê®]»Ö­[§_FXËH As›J¥Rßüæ7‘̲“y}û¾?;;ûgög¨WÖ±©X,~å+_ѱ„ªNˆ/ˆ•ËÊ—¥)ïû‡ô·‡pÜ.\.ø]á|½Ç ” €©@ ZYgNªk\·àK^)‡«,k”ùAG69PÀÈzÒë‰u¡ÜÄÕÃÀ/'³)›ÏåÒž—ËÐz zÿÌ»g¹’‚{,äVȺék õq7sÛé3ιéY×jµN§ÃËf³¨®ìv‡o»e¸¸eÆ_”ê„mÆ3ʪwޤýŸˆü: ’»¸æ°X> HGƒhöP–ÒpæIø(¦]êA–æ ¾s[Œ>ó™ÏÔëuT]è% 9ç³³³ßûÞ÷¾óïLNN’Þ÷¾÷ýÕ_ý"ˆ\ºª ŸùÑ£GQù]«Õ°XF„º ‘0ñ{½'žx¢Ýnë[oË–-(ò ûêõz/¼ð¹sç¶nÝJ­ïÈ‘¸ ·9µ(è,vÜ‘Ëåyä‘‘‘ýìUW ‡þñüì³ÏbS„^T9}úôOúÓÏ|æ3é‹’:R¢éžÔËPºc+@±XŒ´H7>ò~Ž$Bº®A½¯S#M€•åæ­ Žnƒ¤„ýö¡ä¬Øe·Ì¸ü+™ðMÆ$Sà–‹«Òß=¹fx WyY"t„tX#+§˜\T,d XRBWzM¾å<ü®×8<ë'¾ñ%Œï(Ÿîu~˜ñ_2äœ3Èž<½Æº‰çï`ê·]œ›;=333333;;»¸¸Øívcù|~dd¤Ñh 0úÖ›ïÎV+¸¦~Wv»ª•R B?¦÷ëÿ#›J¥¶àfÀ Óéè­Îƒ±R2H ˆý[˜Áé¤{rì|àb|©"ÔS§›†èç—­šåò¶mÛ:„ï3Ìõ0ÕÈçó[o¼±}±sii ûæèœ$XEâyvvv~~ž*e¤fÐ_X|â‰'te5ìÚµkbbbfff~~žD!§N:räÈöíÛñ år™VUt³c°SÜk{|b¢Q¯cKé‚¡GÅçƒT.—wìØ±yóæ­[·~ãßxýõ×)$ÂGýøãðƒÄþªl6‹I«^ üôѤvGäá8N§Ó±m1.(•.Ré+ …|Þºþ¡C9¥Á„϶,Áî›wU€‡ûY86$¾)ÅŠA(³‰™âõœ:8:r€B™¨ÓeÄÇ}~‹PE¦8À%F@X"Dæ°sªÑú¹l½½EE*äaèªt‘nrмì?47===55599yîܹÙÙÙZ­Öëõ8çù|ßó(2ìõz##£Û®ùOÒ_ XõNº¡âXÀuÚo,:é»Vm\ZJ!݃…sZ-ql®µé-Б†¥Tì”Fåç”ÙÚ<,..ž;wn~~~ii©×ëéyÕ£p7Ž1Æ\ÇÁ\´}´  ´ÎÍÍǧ»5ø¾ßív‘ÔÉ&ÌЩ̗J¥8€;_OwîÜyË-·8pàÉ'ŸDù.tÏ<óÌM7ÝD"RTf2™f³IQ I½é@RJù½^³ÙœŸŸŸœœœžž^XX@K ½!“Éàóév»Ÿýìgççç¿üå/SXƒ‘ÝK/½4555>>NŠ<’Î-C8JA–>¦/`¡²ÃF1 ƒñé¯8w»‚)áŠÿÖL°[t8sÆÛòÎ |Ö…S ‡Ð…Ð ¦SÎ$ð5ŒŒ¬ëzrr4üŽ'˜0 $„,ßrw…b+‡2€+àï'L¢©•Dµ­gX{Š…)! Øp*·Uï…ôîC‡Î;wúôéÓ§OŸ9sffffqq9,lœ&ë!FÛ®ùHWœÆ4k· t!¥®Ö;þ\·BÞúÝW`{Fën™ó IDAT,µ1¢B‡ªþC½0€ÕĨ} _ûõz}nnîìÙ³¸É‹‚«T*…^ø¸ŠÅ"¶âߥ ¦äÌS«ÕfggÏž=‹‚ ¹­¢øSÑf³‰u†’åfs¯¿þú‹/¾h¤×]wÝõ×_ûí·ßÿýÏ=÷¶Câ“òÉ'ßÿþ÷oÛ¶ Ý~ Ã]ØÑ×þÄ€õjµŠ«hff¦^¯“ÝnvìNGèDŠêw÷wçææ}ôQ= ÃÛÔq¨"1——Â¥bw}pNò^%%D·Û¥G–ø­·J®` r Ð.’†‹Ú-ÔªÖûá‚6˜sðØ\I}£Á =v›„h^‚‡B5‹þá´Öa¾r#,_y±©ãÞ |œ)ÏaÂPùbÒÜDIí¶~­× åÊtå’/KWxîAæÝsäxçüùógÏž=uêÔ©S§¦¦¦ôPûûuÆðjíÚµØÈöгú}£·ÊÎË¡|]ø¸¯ôºí°þoéÔq€;ô‘k‘žVÉ–žꃣu–3ÔŽ¾f»†[Þ Æ;1óóó¸±e„òÔ'b„R(Z­]’¾¥uR t°Ý«cäVHa#‘ýø-ÌH°ê(ƒàC‡½ð ú¤8!ă>xÍ5×À]wÝ544Ôh4¨b¸´´ôÊ+¯`HX(P@€ x ÆŽb÷”êõúââ"jpýÀÅŽd¸°Æõë×oܸÑŒ¤”h1D†ìzºŠ¶lÀÂ%ذ0‘Ô{ëõXOõ+ÌԮȜ¤—’[W ü.t¸a—bL¥x¨à¿ÑH­ñMJ LîSÚ™ðµ‚ÿ¸ð—˜ËH¥ §#65²¤œVplŠã8C¹žªÿ›ß>àt›)€PHÖc®t*éÜÍ,¿ãÄTfqñÜÌÌÌÙ³g'''Ïž={þüyäV&ð(üÃà“T*ÅWoUî͘cœI!Kõ ÝñyojMÙ™œ¼$ü4²J„‘ÊÜ'zUk¢sa‘ß ™a¦LAî ô™ÈçóH“cªÁâ։:~«Õ*¾t17ýWo§Vv$ž°Pw~ðàÁ'N\ÚÍê>ðÀ×^{­Rê–[n¹é¦›šÍ&ýÀñãÇŸyæ™]»váÙPñ”ËåÐ:qf’•ņo:mÙ 8’qö4™RBÝÂÅ¢5ˆori‘wŽçy+p¤oAêJ} zà0Èu)É}±½Áÿ˜©¯±îGµàÌS=oúpøºòŒqÅ täùBç›Nï$c!0¤r}çúŽ÷ô¶q>ĔذåÈ#ò”ßù7èÍ;!óh†NZx7¤²÷AfC³YÅÀáìٳȪT«Ut³²Õ’¸±J…l(¤6±Ì}Ì•;r%E–« gmp=/-ÑI™/šc6ˆøÎp(¶i, µôKF#ÍÔa±ïÅ虤3ÐßÊabAž™º –vi÷ɨ Ýn£Ç4î”.×3Y_U*•¡¡!¬}ûöQþâêÕ«o¾ùf2ɸÿþû?Ž †?ðÆo<öØcøÀr¹ª4)ÁŒ”w ˜K¡~jhhHw¹Àï¦R©B¡022‚öDóSÙJ/¬c0䯔êI%Ú†©´íOÓèKøòÓŸþôøñ㺌«R©Üwß}«V­¢ðøáxâÄ z€óóó{÷îžžÆNx¢Þ©c×|ôM5L'&&”RiâÍ`¡IÃøø8ö´¢¶ƒ”úbÅtµž€/£J¨ëÝ— X†g«Îß¿£k™Ö…ÄCR×úÞ*hO§T ¤P\õ\9)ÂSZ'ÁS ˜j»á9v…Šƒ •’©P¬b©1æ»"'•c[Ò›Vp™u–TðfL§eËð(`íÏ žáaºÐn/5ùùyD+ª²ë±Òç¦3³³³RÊo|§•Íf]w#FúJAÎ òÊ333 ívÕX¸óÑd‘‹Àˆ¶´ÍËâÝ—›Æ¡§è(+%ÊIŸ£¿ªuá´qB°t˜Ã|-[1BgQ!Äž={¦¦¦ðGšlddäÀëÁ_ß°aõ×^K§Â‹YXXØ¿ÿƒ>ˆ5G2žÕ½žcƒŒX¥RQJa¿=±rpÑT ­»†††È‹íÌ™3o¼ñ†ñ· …ºuëÐÛâYòÿ¸‚%§N¿´º8–f@YµDÐ?ôE€çù•¤„¿ª .xQpÅ×÷ò€Zd½Žd\rÆWçsê8… µ8ˆà€×ú'Ì3á*„¡ã§¶µ‹ÿ›Lß"xQ‚ë3Ô'}ræ‹pV4¤{mÅ儌’ÐuÛnö^‘¾szž“DZ® Ò»‘IaD5æl6‹2zôÃDw£ÑнF±ciiivv¶Z­"KôÍà",Â,ÚÛv ”nk7xJhç\}å¬6¸×C’½7ìªîFc˜}Œ1œ DVV(§|â‰'toü• 6Üÿý8Š÷]*•Ú¹sçÞ½{_yåº÷Z­ö­o}k×®]Ô ~a(@±‘ aa©§T*éÞÖ”cΈÒ*+üâ¿xöÙgA›k•J¥n¿ýöU«Va_×ÒÒjý )I·}Mä°„_¤w‹Ñå”<~òrŽ·ÚOBÿCË,`ÌU¾M†¿¦ÂYV™Àc=×? šÿ½Í>¥˜Hu¾™’Ç8ërXè(6ÜÍÿŽÌÞ ¼à9܉|Áü’èQ çyû”„]Þb ¸Á÷d*sƒpßOîf³ILemd髳Tu¡ÍV>ŸÇ&s\šh”N±¾!1âSŒù‰:Té€e¼MušcY)! ܾk@ŒX”Iè:ûÙÊN—mŸÐPüëÞ øA º½Õj=úè£è}NbdddÛ¶mŒ1š`„–8»víºóÎ;°ð';ΓO>ùÆoÜtÓMäK>zÏÐ ËCoâªì †Ñqäȑǜ¬µð‡Ëåò‡?üá‘‘‘Ó§O/..¢/Ͳ 4úï Xd)÷ÝA*¦ï² §”ÀÕd‚—þ¿K&9ã€A‡õ^Ê,MIw•r¶2vx¸/e*YÈÜÀ2pÀeŒ'ì.Î9(¥TdOA£­•bÀÉ ÄЄ¨_Ô+Ж#.ÓZAt)©«hæ•=T W|·ÛÍårø'ôA> WgÙ€E¼»]…ì = MêË©ÙõJ°l—›åžÐè×ßñz>…cÙ½:sæÌÞ½{ uû 7ܰcÇ œ±QA2ˆ-[¶\ ð/\a»Ý>xðà-·ÜBY!5É7›MZ ƒÐŽFøßÈô\u„Ï<óÌ—¾ô¥çž{NÏ”=ÏÛ²eËC=´¸¸ˆ3)°¤ÓaË#ÝWa%{~¾E€õ6°€1®—|«_øßYïÿ’í#i¦ ÆA[ù¯3ÙVl‹ •êÓk™;ÄxXŠs‘¿\=@ɰK|.€…ŠpÎ$ðpO)ICu/Zº5¬–ËåU«V­[·nbbµHylÌÅÒÃ"TÒx•F£Aƒÿ’5Ó6m¤£€=om¹V$¥½ªÞNôVèÉK°ÈYƒ t:Í9þù秦¦ 4¹ùæ›wïÞJú¹¹9¬u ø†nX¿~ýéÓ§©j©”zòÉ'o¹å–믿žD¤¥Riaa[w÷Aܽø¾ÿòË/W*•Èt/FãÈ‘#GŽyõÕWOž<955…Ú}R¨íرã¯ÿú¯ÇA‘ñªª/ÃÀÏ.pÚ6 ?ß÷lWGþÃfù¬X«ÂSŠ*(o‡ú/þ!l²Ë0éÏ ù®ª!S¾òüÌͪø¿‚s ã.ç~^Rªv¶9ç’ƒœAÀ¸Û“žR-ƒ*2Æ,c>ˆ•uëÖ­[·nxx˜ºç±£ÆàuôÃÊçóX— -«]~±SZût!‚ñ3Ôé¶\´ÒG–-\â",ã‚9aB©ÓC^a>èyÞ‘#G~üãëö'èñrÓM7ÎÎB =rRÙlvãÆ÷ßÿ?ÿó?#áoíÝ»÷àÁƒÛ¶mÃóãˆB¡€Ò°i¬Z­ö¹Ï}ÇFÞ,~LN§V«MMMÍÌÌ]Æ6l¸ë®»>úÑÞ|óÍóóó4¯,C–ç8 —[° Ÿ«ú{°.n<‡©dîJ…½ÿ“Ë%tøcŒ1 <Ç@e•÷~(ÿ)Ïì^TàòÌc ¨n¨|GghÂc ¸âÕÂzú¥tÌ511€Eüº^“Ñ£[b¯(¾±=%!øÅ¿¨Ïų!ƲŒðjÒúùXA@´‚@®Aב™59ɽ\.£øàèÑ£{÷î5×í·ß¾eË}Æu½^Ç—v»=<<ü¡}è_ÿõ_kµQlÕjõðáÃÔèW©TpTeµZÅö†Av,¯` àйU«VÝÿý¿õ[¿uÝu×á6|×ö²uXW#¬+XÀ˜Òå¢ÎjÅ™b “C"Ƙ¯$0w =Â3;/*pÉvµ§ª$þ? cœ³ &íf¦£oibˆhV ÏÊå²®ë¤Ó~¯çè­Úò¢i»J‰ Õ½`e| Ö§©m>"0ö³€ØU—Å£ÇÁ__p‰Œ%WvZ­Œr„áqˆrT3àPk,Ñ?~évö¾ï¾ûÖ¯_@Óëõ°P$ ¸õÖ[×®]‹öêTŸ9zôèüãûî»G4âit\ÐgÖ^ŽÏ0Y$¡ô¦M›>ô¡íÞ½ûÞ{ïÅJ«.öŒ“¹Ã É ÈµbÀäÞÝ€B8 %p¡€)–’¡Ra „bŠ+)9Ì–eÌeL Ðh}1&w!%\0Ž—À jPÔÓH×½ Ýóag^u[i&@e L`=à]éHp€3¥zNV¬‚¡z½šÌd³Ybd®\ûuýAä R§N­.ë³X.ZA¼# úË:¡NÒQ? E¸ˆV¤nüñÇ_zé%£.\.—ï¸ãŽl6‹V¨Ø¾Gc_ñA‹Å;ï¼m'Ѓ·¾óïüÆoüM߯ö,R#%¿ ú>s !±‰ŠZÂ0Ü¿ÿ±cǾò•¯lß¾ý“Ÿüä‡?üa¼lòê²e–a]ÙGfÂÕƒb GÔ(RIP’1ÒeÒgª£ä´‚÷døòÆgp!<Çñ˜„0À¸R*Ji·«w\é;ßš-vá¸eKQÍ~M¶OùáY‹Š“Y¦0Æ}¥Ú~*W àaP`î º¯ù@µzaØ*zo&` –,í=oDOt…†<ÞÆW ªÞê”ЖqB3}V6–h‘Àzúé§:š|)›ÍîØ±cÆ úoõz=Ô(àtR´½ï¾ûöìÙ3??¹$Ê#Ž=zîÜ9,A’™ú™Ò\Ü7’}{ÑívÑÖýÍ7ß Ów*QŠ“Œ„ˆT,dÙ®Sq åÁ4(ÁXÇáÐí,©Î¢ã¬C6§E 4]Ó½™P¢Õív;ÎäL¸&s}£ósG5=•?ÝUK® ).!A2J8Í uV9r®zIÅGW-R(A«pzzúÌ™37ÜpƒAHE&ª´«qƒ®Q¢W±1öâWI-—¥&óŒw°ÑO)õ½ï}orr’òA¬÷mÞ¼yçΈ_¨c@!æ­†‡Ý¯ÿú¯¿öÚk?ùÉO(ž]XXøú׿þGôG›7oÖƒ,t:5„ÁöáºîÖ­[†ïûsss8IаH¦Û©T*ûØÇ>ñ‰OüÅ_üÅSO=e_ÏŸ?¿oß¾Ûo¿h,ó¥ˆÎ ^5¿ZÀŠ™·üN,¥B.›Ü?ÁO‹ÞqRJq.Cyá¤ÂU€RBùª}T.þƒ]«xVªXeƒ®¢æÀ9+q6ŠW…’Œ $H`cê¨S޳!“É”J¥‘‘‘‘‘, ‘é\´šk6›KKKµZíè«gÖÜu_š- Ùv¡¨ÁT‡;“²yz³*l0…*y,va˜3‚ ïû465rèB›a ’ O¦"±Ã]CzàÒéöƸ¦•…Zÿ1…èÍ@3%=Ï;uêÔÐÙŠ¶À¶mÛî¿ÿ~ДØäC§Ï¢@顇zñÅò“Ÿè¨Óéüâ¿Ø´iò_ø<—––°Û&9ÈBçåF£177i‘Œ0ŠîW«V­ ‚`bbb÷îݯ½öÚk¯½šž®×ëMNNîÚµ ƒ,joD>a 1_Æ ê Öe®˜d(|›–R’/ýI¾ôí {†A 82¥ ¸£RãçXP—aÈ1%YïMÕ;¡œÕ œ»ÉV† X¨F]wCÏý¾’ÀX&AÚQ'„<šJ}-AFFF&&&ôH^H)©Éãüùó…Bá™}kïxÿºc®R zaëE¿7¯Ây!•Ђ'J'ÉÆ€ú6â>)Êò°ÝíqÑ5ÅøEŠAP¢M¥t:m/Z[ ñ+Y-ƒµ:#p`ÇŒbïÞ½ FÔÁ‘#G¾þõ¯CbÛ\TºÕëõãÇcó£þ”žxâ‰[o½uëÖ­Dó#ŸC†Ÿ}-’§§§ß|óÍ™™t%?,T“÷z=ÌRï¹çžgŸ}K¿ÎóçÏ#Û…k€Ú*ô9oU„õÖ…'ÿÁÖ íoË:‡P…K¬ûŠlïgªØùAÀR2w[XxD)H-ý?aã€P à,˜vjÿ¯YðvJȾ}ôX¨û? åäÖf7Ë®mG)ΔàxpFt eO÷ÒÅbqddD‡ëäõz½F£±°°pþüy„ƒ}œ‘‘‘R1ŸApGpþfOJ6=Ë»ÖnÖé dAÝ™y_”}åI¡»£Ø éJ¥‚¶pX #+^Ã6%¬qЧ·[x…ÛeœXétúرc?úÑȶØq䌎;vìØ±/}éK+Ë=iïÙ³çðá÷Þz+NÓYZZ¢Š^r¹|ŸÐ ²Z­’Í!Bp±XDâ ß1×\sÍÚµkiÝÒ‚A9Rð°áÒ "›Q“?õ8žUÿîÊÖMrÛ*j¬¯à2ŠduoÏe^|²Î;/ŠÚãÁÇUJ’ ¹+Ó7÷òÿE¦v0U÷Ó»S7 \TÂaJ Ù…æ~ÿ½;4*ázÉR6™Eè€ €Ç†6rwsŽ20ÆCîÕæ`ü pŸò¼O¡Q»ÝF·Lòqo6›xkA ;p­V[ZZ*‹Ýn×ïâ’àòŒ+Ï820Õ]ö0T²o.—ËÕjUÌÍÍ?ž:®‰Ð˜1F£ˆF¨EC¸‘‘,„-..ê³{i[¢ì"”ÿÒ!þm…V4€‡œEGFF°‡M<ýôÓ†µ­ƒÌ6ƘYv= §÷z½Ã‡·Z-,Œ°PhŽ’ˆä /6c!P­V±õšæ¦R)4€, è Ýn·õpØxø¾Y¡p”ÞúÛráh_À²;Ô<È.NŸ4R©tW’QEÆ#“É >ÛõÒd°ÇƒÓ©ê—yû pzŒáØ.b¬›ÄwnS*ÏTJ¹÷ ï%ÕûwŠ©Àå¨ô^SÝ£’)V²Ûtð‘âÒÁ‰{«]÷î®x-®„ä¡Ã€õ`çdæÙræ¡03Œš pðŽR©†ôØÿŒ-5:îÐ_LgewÊõEà„Ì· +Âw‡¼®]»–B'<&''Ož¸è€¢¿6¼²äGu.æqDÆã·^{íµ'Ÿ|ò£ý(Îæ©T*4õ,=ï!{XºH<9¦º—‘^Ï%†‘è‚Hû³>€Eœ¥aQdt™€eÌAZn„…Q=–·ŒïNMM‘'ì9¦¦¦ì/ŽŽŽ"t¼ô† šÊÑm~…‡çwAùð¼LßÜÎü±«eœc}#bƒp¯cóLvàÀx ºGR¯´ ãJl/5Æ¢·V÷ºÝîk¯ŸßyÃöTúVÞöÁ_@gwà¡’]Õ>íïçĦÀÛU(¨ ƒƒéñí ħ + ‚ÔȨY輬ü’)ł䕀sp±rÎoºé¦gžy†F¹ žhjjêàÁƒ7Þx#ÎõcŒ¥ÓéR©´¸¸ˆ€…ífz 2>>>:::44”ÍfOŸ>½gÏžz½nüu´î%·B4­¦„décÐíhÎyäÈÝ—\J™N§ÇÇÇ9çMr~´Š¥ÒÞüü|†hA#„XZZzùå—'''GGGQßÐjµh|òå8o,ü·nç©g¦}ïe ·z{4b‘œI4we€…«|õêÕdÂOÇ«¯¾zûí·_Á•D¾ˆú±zõjÔ \ Övü½Þãþ!RB TFÍÀ®ç~¯Ç¶aŠs%‘RR˜˜wÛÐÙ¢«„Ã@8¬§‚ס{2tÇÅõ*)§Z­bú×½[V?¨šsàŸç€t@I~ê‡@þ¨T,{+@‰IŽŽ¢Ä.Ýœ—&›rs°ø=Ùþ Nº0ì³V±‹÷ ’e‹‹‹Û·oÏårsssú¼éééïÿûcccÃÃÃX›ÇÔÛ§õ”'­£‚ŒLW:tòäI]ލ”*‹6lèõzív½UñTqÊì˛ˉ°ð~‹ñi£ÜÜó¼F£qâÄ ˆK¥Ò=÷ÜóÑ~týúõH5&ŸËmÕj•$Õjõïÿþï=Šo&ÜSsss?øÁþäOþeSív›¸^¾/¦Á Ð uä¶!^E‚Ì ¤»>;äW XØØðýÔSOßÝ¿ÿ'?ùÉ+¨ã?8`wÓ¦M¶ñEâEBž.¶þQ¨×B$HPÅÀ¹É l¼§Vù2­àZ](&2/dÛ õNoØIÆ$ç"äálºõ?üÌh ¶„fÚìU’ â(¥Òé4[¿œ€êªÐQn 0*¿¥–ÏBf“ÈÞ‘Éb|1 ›îéŽ:ÇqTã¶D‰ÖIDATÕnõ{¬öïNPã)Ô¸ÿRKo@º¿c9òºë®Ã6$8;Μ9óè£îÞ½ûÐà Êãˆt×/ –^xák_ûùzSÞ¶mÛ¶oߎ© ýu²X²1/K <°íR$)ŽÓ1‹bþÜsÏMOOÃÅx…CCCŸþô§ï¸ãôçD)ÛëNÇS½9±R©ÜrË-ßúÖ·Ž;¦ßr£ÑxüñÇ?þñ£ ù\EoÝlRA055…I¨a\¡ãš3ˆ”Agܯ`Ó{–uà5Üxãö·žþùC¡½þ”RÏ?ÿ¼ýÝo¼qpÀR*t Éƒ×ÿ Áz 8c’±º \ÍýDGNHÅ„ŒýrµJræ)ØÔpï.¨9¡ª\)PÀ•ïø'…ø·ž;¬Øh Ä,ÝAÇ@ø¾ŸJ¥ö¾’Þ¹ù?1QƒêÓû 907”~'h¿"Ô÷³­T˜[Ç3w!‡Bq;å)z¿aj¢þsÕx”/½Ì{UÆ ”j(tÚŒw¸€”Wß¿Èò†aˆûª^¯—ËåÝ»wW«Õ¹¹9ÐR'Ožü‡ø‡V«õðã!›ÍâïSXô™¾ûöíûêW¿ºgÏž ’[!h…ìܹóÎ;ïœÅB'Î1Ã]môîÁ¥B-{ ·NžÚ 2°"gq&¼ˆQ0‰‘¬çyJ©oûÛgÏž5~eíÚµ»wï^\\œššB¹¦!ý5þt*•Â6C&„¸ãŽ;Ž;F9 Vc<øê«¯îرÅ%¸÷ñ­ wnéÚÌ•í/©è¯ tg¾b)¡>¤/`é¼Zäw «æåf…J©;vØ«gffæÅ_¼õÖ[¯`íÛ·Ï&Ýcïÿû´§”,`êÍ‚ÿ?…œaL9 €ã½–Úbs‡¯ëž‚1»Ê&CVVâ'<œ pÙB@5Ý{¬+Ç|±K±’/M¬AM<¢ U&“9àÝtëuŸRTd ¹¸+ÂnŸr~H¤7gWÿônÌ•h?ë¦Ø9oF¶:jéûré_Xóp*Lº œ‚‚­!¼Îa$(é(Å„TèÁÐe¨8<¹\.ü㟞žFɵ¾î{ì±jµZ­Vï¿ÿþ5kÖ`ã é—túôéƒ~éK_Ú³gº è#N׬Ysûí··Z-œ±ŒuL–©ýHõ’=&Éo“6\nôÝAKÔvµ×+ed®‚mtˆ³³³?ûÙÏPtN=::º}ûöv»]­VgffN:uúôie¬¾E*r=ÏCBÕ›™Læî»ïÞ·oQcµZíé§ŸFÕ;¶v†aˆ.þqµ‚a=îIꛈ~W˜†QDz˹ÀÂbÖåÀ³”2›Ínß¾}ÿþýÆwÿéŸþiÛ¶mW$%üÇüGû[Û·oÇ*á ux‚³Žšf,` (©ÀyÏY· þs+‘€‹,ªm“ó@]«àcŽštÔ4—ÀDè²ÁëL~cNz¸5€ ÚéÑ„B>ô!B)&\¿Š,ǃÖQîŸóB )d ΛîÔø[]g•ç½¥7·Â(XO§8kAoRÍ=Ûk¼t^äþLŠsé '·ÜÛÔbšÓÀTn e|ÜÝn·^¯ã|b±¸víÚ;î¸ãÅ_¬Õj´"±Íõ¹çžÛ¿ÿ–-[|ðÁM›6 £ÿ/R]o¾ùæÙ³g_~ùå^xáĉóóóx§¸Þð¿CCCø‡ˆƒÚqB"5@"Yî)œm>…>zkYo8½TollZðö¾EÀr]×»x¤R©0 ô£éƒ3ð¸é¦›zè!—ÏÌÌLNNž:uÊЗÛ)¡çy˜_;Žƒ}?×^{í† ôèÝ“O>y÷Ýwïܹ3“ÉàÞÇnDš~¨ß—Ý3àãÂÉ`$¶ÀJJOàÒY¨†qP?]g[âò ¿»bⓘÚ|ä#6`ýìg?Û¿ÿåcÖlŽ ~øáAíq”tx;ÍŽ”ä,0¦˜ 0)U«êަÜ(Wª0îƒö•äà(¶¦Ë¯õ Æ!Ådƒ‹ÀU=)óoœ“•ÖKåàSµZ-ä p<½oívü©ëþTò.´¥ßqЊ”s®„¯‚ôÜQ®Î0W07Ž›®®B¥‚З TO¨*÷çÒàpQQN³©º<5êeïÙ_ ܬ¨ÿŒ€bL¹\Æ\NB¥E¯×CFŸøÄ'Â0ü¯ÿõ¿b.M|°ÍfóàÁƒ“““Ø•"„Èår4䥉mC´¾‰áB­ã®]»>ùÉO¢øäääÔÔÔììl­Vk·Ûžçé!›­Š¼Ðyi¶2ˆŒ Òí’®ª/Þ~›“““?ùÉOŒaäO·mÛ6==½´´4777;;;;;{þüyt@ÜSˆ†¨ÞÌçóÃÃ㣣•JeË–-kÖ¬9{ö,‰"9ç/¿üòÁƒï¾ûn€„Òs=ÛEC>X‡h?Æááal¹'(gŒ;w®ÕjaÖO3Áh†À ­9úpm\sƒŒùÂARqßÅS]~¥æ¾ûîûâ¿HžtüÍßüÍ¿øÅáááŸynnîoÿöoí¯ŒŒÜ{、gIN!Sp¦"¾‘‡ƒB5P $dªÅ6.vïh«\úAâ8™0ä•sì7_PPÉÃ1Ö8€ ]G¾É‚×%TB•B!j#±.Öh4pµ¡Žæ™}plI `­£aoI2pÈ‹°Êä„Rv¥d Ø t´§qC–!ÓãéЭ8ىܖ™õMx.ú˜R*ìÒWÆÅX&ÇKúßùÙÙÙoûÛµZ8Aäw}ߟ™™éû p¹ã¿ÿÿö®í·­jͯ½ö¶ãØNœ„4·†tBÏšKƒF=@O[èÑ3Ó#@¨ óÀ @ ñÄ âOè ðŽT!$¤Œ43BâQÛQ94M#BÚ¦”8íÄ—ØŽ¯û¶æá×|gÛqœ¦q“õ=D´4Ûk/ïõÛßå÷ý¾@ pâĉwÞy'›ÍF"‘p8‡—––‰ØÛpäg»:ŠAxˆ”ÜWÔàá¬'+ÊduÔ;åøôúõë?üðU?ð‹===ãããørW×-“É º‘@oŸÏ—J¥’É$d8pìØ±/¾øB^’mÛÓÓÓóóóv#‡UA¹’+ruºD+n[ŠlÚÚÚš2£¹g||œJ+¨óƤ¢!‰d  p 7× ²fëž©X²½ñÆçΫ&O}øá‡ï¿ÿþÐÐÐ=\saaáܹs¨ÎTØ™3g0U¡‘T›æ4wÞËÑEîn5Oc–ÍóbÌ}9çùäñãÇëŒ`“]Lƒ[:û¥§õ«V-¡ó»¥~W°ë\,ý)í»rå Mñ”Ù t(oˆÞ" gppð½÷Þ;yòäÜÜܯ¿þ ÀZ\\ŒD"{E²\1”ËePŸ’É$fUÙ¶ ¶ò€¹\Žè¦4á¦NH»3 9Y Ì&4NUó*dIJ¬©©)Ñšƒ£„1ÎÃÃÃóóó‰D"™L¦Óiê[ªšð$&•¶··>|¸»»;‰Ðà"!D,ûé§Ÿ‰ê…@ÙÕòûýÕ7U3ã ò0q¹\îñÇýî»ïJ¥Ü7«ï¿ÿ~bbbdd„ª*CƦ ,ùmƒC#€E^hð¾ðcgÏž]YY ‡Ã¿¼¼üÑGŽŽŽíÛ·¯¿¿¿««+ Êf”ÛS©²¹³³³³³³5?ehhèÍ7ßlÌ·]0¾ô^ °%Zœ‚¹B/‹öŒ;5 –Çv­ÆU›qÏžœge&,¯[Òô"gÌ«Ùíüç½-ÿ–+· ·×²Lj}Q oú Ëç»ÿpôE½¼—GXaŽ—EqŽY–`jLLŒ›L7u³8˃­þ£¾àïxðq­upægCÓâœó®ŽÖÎào4ß?3g„óvn„ŸÁ‰Ÿf"h™Na% vY X.—úøãgff¦¦¦.^¼8==MК±=9^¯wll ÓØ:F/_¾Ç£ÑèÒÒÒÒÒR,Csü2*øP³îO<ñÊ+¯Äãq¨à>öØcœóxNÇãñcÇŽ¡ó›L>æüü<”§Âá0©å5˜¦¡Ü(/úý~ÒÓ§O#ÝIrÏŽã´µµ¡ß“Ë0ŒS§Nåóy¨$⟵´´\¹r…nj#X§ÂËêêj,Cý±»»ûÌ™3S%H±m»»»ûÒ¥K+++¤_JÒ å°äŒ; įó‹Á¯‹Åû ¼ûî»çÏŸ¯ÙIo<ªoxýõ×ûûû«{­k¡¼Ð„j½¹?øŸíúƒ9Œq‡ æ &„`ÎZ©=orË61Ëo ˜UvJF·ðx0-´¢ÐÓ™Æט.,nGÌrÐ2¹m›8 –ea“KëFcu“ÉdGGǺTžÏç;ÐÒÒòâÉ¿eΊp’Â-3æ<¤iÝ‚wþÇ7Ó¥R©X¼ ¯ '¹X¯×{ëÖ-J4àÝæ*@á qz)ƒ‡)ÄËÑÈÖÓÓóüóσÁl6‹Å/G¹°··7 ÍÍÍA ‹Ý¾}DÓé4’Ê©T*Nƒx%³“°¼B¡J¥µ}úé§@Q ¹KÈâ`G"‘T*µQ Ž‚|>ŸL&[[[]×M§Ó:K×$bG"‘  ’Ë jçüüùóXåûnÒéôÊÊJ,[^^ð5ÈÁÆR‹Åb&“AC¨eYÙl6ú|>bT°dÀº~ýº\TÝè¦jî¶(•JÁA+ ñx<C„2tÍx<‹ÅÀDÁF5”ÃÂgSꊓZÃkþ/dzÙ9ÕÖÕÕuöìÙK—.}õÕW÷ñ²§N:zôh h ­˜Ç`ÜXÞú¦­åÙ.Ó„«›Ü5`ÙìHzò%ž/™Ž#‰Æáx˜Wð¬í×x{À“7X‰ Á…æ3òCâ¹6ËêÂA–†übl8|.ìD"æø›Ôæ9J©Vu‡è]`"aÀBÁ[R g®+\×)K8ZÈ• "ù"Q*x:ôÏЫ ƒÁ æ&T,†¶b~~žýp)ò¥)çˆPð—ߋð©s¹*Ëù|Ú„2Ù‡bFB@øá ž ëºkkkh”!@†¤T*%ŸmÒŠÉårÀ¸B¡°¼¼Œù ò( …Œ{&“»½ñH…°IÀb±˜L&ÑÐNŒ9•^X2+ªÎMÕô°°øt:´@:F¸ƒ'G®?âaËd2¸f…o»ù Ùám°hLyÍJg±Xìèè¨î­ß¦éºþÌ3ÏLLL|ýõ×—/_ÞæÕžzê©“'O†B!1ÒZqM8¦–/¹VÊéð0¦9L0­`n'ÿn5?X´;LÛS2Ë®{OòÊ®¾j·ý9ü–øoú¾xÓ†ºÐ„ËŠB”ÌR©Tpœ2çLˆ»|n :(¨Ç‹ZWDVÄIB»Úƒ@ ¡Ü~ê’“›r1G`‡|¨èÙ ¼O&“imm¥ù7h±®^Lõ’€Jˆ7É‹”Û+ÞöäaijÙ,ÉZÊ€·L¬¾êP L]œIÂùlc͸&4²‡u«Âœç­æU°H|P>ŸO$„­2`Éê,l}€sÅ×ïz£›ª8#öÄ.ZQÓOÅF!•Qfn’8£```ß¾}Ôº]°¨é_Ö»!†‹ßïÇÔìgÅbñǼvíZ4ÝTÜYnëï˜8tèM4Ø brÁt^ö·¤uÍYß Í¼hmÑ"„./—ï1Ö4Íëášæpnú[²†fkw'Ñ3ËղŶbId2¹_–nݺ‰D C ¢&â<ȃ^ôJ¯xvÉÅÆûœ.(s‘åàEÆGˆU=ˆÏÚŽ=ïÑ?º!¦;•u@fyèk7•·G¨`o×ÿrë0Z6j³¨ùßÛ¿…ê^ßšVý%Ýó§?ˆ/¥ WµýÏú?›MµeÀbÒtdÂhÊ–¬æ,DþÛ¡fM6°ï!šÛ¬ìAÛxX¤-««i _Sƒ–2e; °(M@9,¾ «Ù •c¬Æ3ÐÊ”íÀ":<*»h5 œ«¬æ,bÔήLÙ åú*`5-`‘6C}­eÊv&`1‰»Œn °š°6eN*S¶c=,âæÉúÈ °š°¨g•F-¨Q¶»<,¶®þ…6Zj×V€Õœ€%wÏ(S¶ë<,9⻬¦,œÚ’ ¹2e;°d!}¤-£« ‹|aô‹nsÔ¥2e·‡À"j¬&,¹%XyXÊv`1‰ìŽVIêJ­*RöÿhDñ%á…VÊv)`ÉÓ`59`Ç]–²]X4—K…„Í …byµ3Êv`!i´rN)ÀjNÀ’e‘Uk޲]’î-µ=+ÀjZÀbë‚vª‘PÙ.,¹PHÚ2ÊšÓUªD¨l—–<<hU!°«¬ =,yºÚe»ËÃR‰Û‡ÎÉÚÒ8eÊv`ÉëÿjÞŽò°šÒÃúË7•ÃR¶ãLo°ªÇ¢(kZÀRN±²] XL’Uûõ°xX ³”íHkÈiªé[©raSY5B©Œ²] Xu`KY“‡‡Ê”íRÀRø¥@J™2eÊ”)SÖý/cNZ©0*IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/tempo.png0000644000175000017500000000024011273045225024237 0ustar julianjulian‰PNG  IHDRáß3çgAMA± üatRNSÿ[‘"µbKGDª#2 pHYs  ­#½u&IDATxÚcø0-Ì0*LŒ0`3`f Cø?V³‘Dÿ²²\`òþ%IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/tempoicon.png0000644000175000017500000000111111273045225025106 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÆIDATH‰µÖ;kUAðßÄÄø‚(ÑNÐømE­4…]À:–~ÅNð+H»HPÐÂF‚;ÅÊF¢‰ "’ˆ¼JÆÂ½z<÷‘{óXöœÙÿÌfÎìî‰Ì´•2¸^ÈÆaŒá'°˜õˆ3³íÀAÜj£?†)¬ kãÎü‡ïBpó5Ý~¬V6#ÿ^Ñ­àdÓf ÏÊlC`ãÉÌ1ŒàZÁìÀí^JÔ.ƒ\êbó dÑÀPßdærf>ìyYæ!ìCß%ZKΖù]f~ÞT‚ˆ˜ÄÅòzçïB?ß  ö¼4‹uµiÜ)|+Î_a´º¾¡EÄ.Ì`71ž™KULOGEDœÃöšú+&pŸ¶œÈÌOuÛ^Ï¢i¨éžxœ™óí {"ÈÌCíôñ¦<¶DÞ”–oõRt“á2ÿê,N÷à*®àHD<Å£ é…Š³¦|Á=ŒâYÇJ«ÝÔzü6𾬿.«c¶—=Ø‹ØYã^ÅÛÌ<Ú)¸ˆ¸\2[ÈÌ'pÃXÒzy40³Æ&[.ØéN˜Ìü¥D«…´QæëkÛ£4Ût 0‰Ó¸»™¹¸Q‚Øê¿ŠÍ¾Zä7E«±?ôÑùIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/tiednote.png0000644000175000017500000000063211273045225024733 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÔM+ÄQÇñÏbX(;J’dc!/ÄÃÊ‹à([+òd¯,”……l)Ù°SV–¢Ìx¼34æÉ¿Ñ¡æW§nçžî÷Üß¹ÝH)ÉS…¬…QˆˆñÜÂnž€ŽÔtWo«ˆ˜Á æ°‡“Ž)¥†ÀÊÕHxÄ=N›Õ·‹¨ý‹"bcXF_]/o¸Ãq†¾7RJ·4Zt…&yè©Þä" ô½jaÑÞUìùŠ2¶Qle&°X›kõŠV±g¼âëÆyD,DD?DÄ`DLGÄÎ0úã¤vBSu¹yá¡jÅ‹Êl¶0òÛg1Ác5u¥&{—)¥'41™ÐNK)¥ë@úÿÑÿ|jÉ¿BÁabIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/timesignature.png0000644000175000017500000000107211273045225025777 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<·IDATH‰µÖMˆOaðß™ïAR&‰ÙØÍVYùˆš’”²±Pš¤±S6Ê’…Š•,”’Ïl˜)‰…²¶QSRĬcqß©ÿ¹÷Îäê,Îóž÷9ï}ιq™úi}eo+Ã1×\!3{:Fð‰;+åµùÐ 'ÅL­ùäÅþ‘¨?Â$Žt!‰ˆÍ1ÓZ "ÆðÛ1¯È7a[ DĸJóm˜ÎÌ.äñÏ2óRϤZCçð ûTÚOa·ªÉK÷ãýzGÇlƦQ*0K2¨0„À›m\´²E`¹p1Ì B{ƒ)1A„¢MÑ@A0´ šÉÞM{µœ)æ¾s\ÌóŽ—(Eð—û?çÞóñœóœç^™ÑCõÄ’Ogv¾yüä賯>QøˆÜ•q3‹ËÜ[T÷POkKY¼·ŠZ™{1ýýÔÜÄÄÄûÁ_¸xif—â @lf^?ôY}hì¥m­L43ÑÊD+­Œ»rx6ëÚ};I£f6ÛçëR¢G?€Ì I‡§Óņ-{òæàÍ0¼ëÀ‡Ã[_ȳDdr©“2/ œÂGe–ˆ4¶¨ðÑR–ˆsgOŸšœœ<W‚ْ͛þùûêÜE€}ãßÛ½¡ð¢žŠº‡*¯û KµÂ멘úúË…u)Ñú €K‹ÁöÈŽ}µzjddlÇ(Àæßr¾ì.x‡Òr'Kœiãã[ÊŸ§¿Š]Ô‹Š<]Ú³÷2 =(ÑívTšüÜþ£wï?üL#Ítyˆš´2ѨÈÍT°x‹W^Þµ·ÓéœËÀkÀ0ð[ȹnf?­¬@Q­Ws)±q"\"\.‰_¾¼Ÿ ô/ívû÷N§Ó æ‹f6'If6w'¹º‹î Ÿ~ò×®üÊÌÌÌ{€ê\Ò  %iÚÌN­éÁ½â‹Ï/ðÝ·SïVÔ›€ñÀ/k,üy¹wõ—fo{èF=×(’ņ‡,îÅ•¹³¨ðpãÆõ@ú9 Hz¾/T'y“™HÚ¾ú„”4lÛ€.p®>mfgúv÷]"3;Y úNPÏ›ÙÕãº4­º¯Á}¯`ÞfùKxéÿÜJIÛƒ<*­$µYR 4$ýUÑ͆w:Á¶¯_ñ­Gþ¯âÆ,ÝhDÜÌIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/track_remove.png0000644000175000017500000000144211273045225025601 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<ŸIDATH‰Õ–AˆUUÇÿûî¹çž{ï{O}NC6£/q¨@*Q!¡h寋6îW ÔBfÑF‰pïb@¤…aË‚ d„´qpQêÐŒÁdôfÌ™ÊûÞ×Â;ãÅtáîÿÎùßw¿ïžs®ÌŒ'Ù¢'jˆ$vç^9rêL÷¥ƒÏå>"seÜ q™y‹ EÚ„x·óF™yqùûKóÓÓÓïUö:Àï.Í째"9›ÙU€7ßý¼Ø·»D+ˆvíL´÷y5·ºòÛ­u¤®™ÝXÇCIÑÓï@f†¤)`'p ÙþFÖ򼆮ö==¶ëÕ,$"xȤN ^Var•!ilQî£AHÄ…óçÎÎÌÌ|ל­šÙ’þúsiþ*À¡³'G'öä^©(<Ôq᫱T¸HÅ¥‹_­ %EÃÙh.Í·vÆ÷jİeôùññ‰=]€m¯½í|Ù[ó¥ dN–8Ó3Ïn/›!&"môƒ¡ªAžˆ^¯ç Vä—xlÿá©›A´Ò{›¨ D³Æ[©àî ¯ØûÖâââ5ààç*Î1`¡Â…™]ÙxE~Ã¥ÄNĉp‰p ¸D$þ^÷|*Ðßt:› ó’‚™ÍHR wa˜5x”öÝ·ùú‹ Ðÿ‡¹¹¹$-mI+€€-’Þ1³[ÿq°öÇ/ý¥ë?ܸã¡õ]3Oî6=„¸7sWf΢Ùo¾l~öé'›+É‘‡Ä±OÒÍ V]8SÀÇf¶Î'k¸[=7ïö?½[×=VŠ€Yà8÷Ïý0üZÍKuÁã:¸ff—8÷'¸Vë‚¡}Ew€RÒdÅ»’Ö×l“”Í*ÊÛµ±‡­Ý°­§þ¯â_°àt¹0š\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport.png0000644000175000017500000000137711273045225025163 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsØØïútEXtSoftwarewww.inkscape.org›î<|IDATH‰Ý•OHQÇ?3³3³ÿuS«Mé›HÑ%¢RèÑ¡Sç@¢K§¨suéPtðVî©‚ Jy)¡¢ÍÍ=l6¨‹Î®Žëêì밻Һ^ú^æñ{óû~Þï½ßÌ“„ì¤äuÿ/žâ ±±ña0ìÜSÛ¶çLÓì*hšf„B¡cÛFŠÏÆ™„H§ÿÉÕ˜6h’šJbe€\ ‡}Â. æ?PL`˜:€ À†Ô2À¦ò‘Oœ+dÔ¿C@¨­œZ]Íž!@+€– ±}€J¾²MT]‹€ì/dø Æqò•„Éoa5ÿ’Ÿ†ÁjŒZº;/}óŒìjvËuø—üù…¸ê¥úõƒÚ]¦çÚ]®v_gt$ÆàÛ×üˆ}­LÊCe€d2‰išÌ§™N;èuÍ9ÝLËÉsLŽÆx÷"J´ï ”‘H]×݆a ªj¾š={™ËH+i#í\ºyœŽóWxßÿ”Ös‹y®MÓÐ4 €`ÐÀ´kY#`Ŭ#P$ -ÜF×£´ 3ÔßËì¯xùþ°E›æŒ§=ŒÏ爧r$—™5È:°â–Ññl§õÌ…ŠëX–ÕgYÖ—¿'[Œ†]ºG¹S«J²&ƒ*ƒ*K¨ ØYÇI&~޽º×ó<.iR!„UKn7Zï·Ì…Ue¢Î‹¢Ê H0³Œc¯òYVœ[·Û½Üv ¤‚Í´Ã'!K‚©”H/dÅ€WáñýSú@þóÝZ® 0­ÜTjE¼ô©k ˜U¹V ðf¼‰ÉYZ£—q@w{µ¢\Ï`;´ãwòÞÃÓbDúšÄIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_first_1.png0000644000175000017500000000303511273045225026603 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<šIDATX…͘mlTUÇçž{gæNÛB˰õ%(,¾!º "¾@ØU³ûA à®ߢAcXÄå k²Ù¬1º ë ÆØÄO›5Cc"Æ+]]¤P ¶´tÚΔyéÜ{î³n;ôe.”‚à?¹¹“ç9sÎï<ÏyÎ=÷* ‹­·mû­u½RÊæID|cÌ€ïûÿ,—Ëo(ÁuÝ÷Óéô­ÍÍÍuZë ÅS‘1†¶¶¶ÁžžžÏŠÅâ=ÊqœõMMM/-Z´¨î‚ÓLPkkë`WW×FÇßYºté–e]l&WYZëú‹‘²jÒZ£µ®·ÎuQ_vÙå\·páùâB)eO;gZkÖüñ!þú÷™7AÕ63R)žÝô<µµu“ìOo|ŽY Uÿ7­(]1÷*ßð,¿˜“&‹adr›%Ë–³úÁ‡I$ Tžâ7wð‡ûV“p]Ôû´¡´móÀº‡ùÕÒ›©¯ŸI}0Á)*7YÃú'Ÿaþ‚kI¥Rd2}ÌjœÍ£6Òtéå$“Iû©2—³ƒš;ëÛÀÌÆ9hÛ&ï‡]*¨Dêú—pÿƒP×Ð(ò¾P6p×½÷³xÉ2Ru3 ï Ã$‚jJP÷¬þ7._I"UGIï”ÏRàÄ]zz3W^ÝŒã¦Èñ«D ‹oý-–g6ÑãêÞu²ð¦ñ$òÔ´‚›Vý‰%ñPxÛ¨xxŸ`÷¦—¾»×>Æ/};E+9.:ãÆT€ªA"ü‘ò§‘¾ß­}œ¹7ÜÆI\ð¢æ4}ÙÕJötPw­y‚¦ëo!‹ þyç q6é»cí“44ßÌ€ü4•e¦µjÍS\rÍ2Nø.~^ xA¸(ý@(ü¥°(m)’6¤b gŠÏˆ˜!’ªµ`É j¯]Nž8"a{EXò–m)F÷%©@šàh Z1Ãú„BWß´qEª Ô¡¯>cÞ²;Qé«©q¾€ T% wm_ÂH±£€Œk_2÷„î‚´µ1EÒ?pYE§¯ì 0|üÚ H'yO¨±¡Æ{)jl5rŸ`¯øÆÛ]­ðè)Éô…¼^Ã~túÆ­¿<Ìî×¶"Ùãá,SÉ)&íhÀ¸¥(ø) CåpG?c¤F5œÏ±ç­¨Á.¾9ap¬°ÓSœáœ0n+ãL  0ØÇÞ×·Ïvðé1’’võ(EF0pÜ“è2ô” Cì{} µÿcwG‘od¤óÉÚ:{@­¢3§ÝU¿Ìþ·¶’:ú½Yv~çQô™”–¯{Ë´õ ®ž¼Î\»: žJõEI$àà{Û8¹{;³ƒ~þõµÇžnsj0Gq)ä²YÞ=臕;"Sö7h‹ØÐwº—§)ŸÑûþ»‡C;¶°XýÀ¾K¼²ß';,Ô8ùþ+²»¶1Ïîç݃>ûzÜ‘tÎt<æåý#>?æ¥)gºé›¨r.ÃÁ773ûh —˜ûÒcow€B¶}?íom¢ÙæûE¶·ùœ,C\ñÿüƒkL'­=%>ú!@Û:‡ôM”H@×®í>ÞÆ n†ÝG ݽá9Ü/ähßñjÛwѨ†xµÕãp¦H9×GûÛÏ1«ã’~Žw¾õéÏGÀ¦ýŠ5td?Çvn&]8Œcζ"ô¶ì ÷ÁË,Nô“)©0MÐûÉ›ä?|™æX†“F¿H•)ä8öïçúîóI¾ÂÑ6ºvüÉtL²wïÜ„ôŠÌŸJ¥RÇW®\™>¸3JE¬ê*ö–––KD~¢³åE•Y»ˆø–1fÀ˜Ó¼ï\@c0Æ h¥T¹T*ÝžN§êÀƒÙlö…Ÿç—¼Ÿã7ÏÿÌ—î­YIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_first_2.png0000644000175000017500000000256411273045225026612 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<ñIDATX…͘[lUdz³ívÙ–ÒëÚJk-6}ЀX¡´%„D%b Š1i¹©Á ‚_ŸHôA}}0"*V,HÕr©­ …¦]éUJ·]ºÛÎΙãeévgÊvËí{™“ÿ93ÿߜoF‘R¿Æn·oTU5EQ;÷)¤”º¢W×õ]š¦}  H)q:‡Ün÷ü‚‚‚)ªªÞ/žP!hllôvuuÕ¥J\\ÜšìììO‹ŠŠ¦ÜwšQQ__ïmoo¯RǹsçæÚl¶ÍDzzz‚ÇãÉ·©ªšò Rfªª¢ªjŠm¢‹zêÔfÞ-.E±Çœ3UUy½r;v~´é3LÇ$&%±éƒm$'O‰Ð7Tm!-=Ãô¼˜f)7/ŸuÞ#÷Q7‡!#ÇÌ™WÌŠÊÕ8@QBzÉ¢Å,]¾‚x§e„3”j·ójÅjžžWL®;›šò6•s’‹µë7òÄìY$¦NæZû¤ed²öÝ*ÒËA$»ðu]Çä^Æ•7}«Öm`ZNI q!]ÆðÕ‹žœÃ++ß +ÇT‚@PÂ’eË)š÷ ŽGÒÐm ºiAÔ²×V²`aùY)ØFÍxP‚Ýádͦ­Ì*,$5c2‚ac .1‘§–,—mX`šò¨¡^®x“òò2¦¦ºÂtcØ (¡xÑódfºPãlGëÉÎÐØ‘°†Alé{©â-ÊÊK#€n]Xز³“ h£ŒÍÚ·ŽF,é{±båe%äŒ2»c¡XÕ–VDVPK+Þ¦¬t¹i·¢5‹LÊq¤ï…Êõ”—<Ëãé.ëÙ¹ D»¦ž«|‡ò’bò3\QÏN¬`ŠÄ’*5sÎBÊJæ3-#r·Ü 0E‚´  ½ûšêj¨m¼BPÞ|èqs7ÊG&ÆGà÷^ãÈ®müx²‰¿˜pÚŒH ‡uµkYäi~?ìþ_ªÿ¢½g0&°Ñ³32䯙1+OCרùâ#~ý®†¿/zѤ9„¯OÐÌf' Šq¬©ˆ“¥Áù¯wSsàsÎÔv2 É°Ž‹]t6\gÈ0Y;ÂÜÝ£t‰ºFïj8ÅɽÛ8ûó%º;ÃÀºÿù“³ûwÑñ["î¦ù†è®íFházÌéZuû¶pîà1šÏ÷ Ð$BHz/Ÿ£nÏfZ_ÀwÕ?Â\RÿÕN<Ç›è éÖéSGU^^^bôhoÓ¼žVŒI3±»\´:Í/b‡è>ózÐ ö,\™NúÛ|x¾ÿ†ŽS‡ ê‰(q™¸2øÚh;q 1ä»zKKË@ P7c¨·“kçO ¦èlÅßv)Ô×¥os¸ ЃvºOÅÐô_>;¬ÏBñt×Ã0šÐ·ºð÷Ó´+½5}žF.|ö>×[šÃõÖF.ìÛLOÓ%Ëü)III¥¥¥î‰ÀÝ1Å|U›èÕÕÕ]6)åXϸ»VÛÌD—Rê6!D¯âSEB„½ª¢(Úàà`‰ÛíNxÐP Þ¾¾¾Î?yã?Ïÿ'– ~‹‡IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_first_1.png0000644000175000017500000000177411273045225027623 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<yIDATH‰µ–_LU‡¿;3ûw`avÙV H 5¡‰Am¬¤i«iªM,‰Ð(ŠML|(¦I£‰‰‰1õA“>鋾5Ä'ÓTj45õ±bW¢@ [;Û…Ø™{}XDØeˆþžî=Éù}sNÎ=è‰Dâœiš=ñx¼ìLÊuÝÇqs¹ÜF"‘8×ÑÑñžeYÚתŶí®ÑÑQ4Ó4{þcs,ËÒLÓìÑVÚ²¥víÚM}CCY\Ó´Š÷x<Þ¨±EÏ…t÷œæíw/²¯eÿj<óÚoòàCªKsá‹45ï]—nlf~OC#ý/¿Â}m0t‚,Æ;¢ût÷6sõ«¯9ÕÛG×ÑDZ’)”ZïQðä3}<ü5É:}¾ÂˆDyqàUÚ:&7É-+Nô¾@mj7š®“ËÈíºÏœåþG!0v¾˜¡ xìd/±š4KÀÒJ\ÔÔs·B)d‰WàdÿYš:‘ B”|N´Žå¼*MYc¦P%=Z8þü©Ž’-„ Pѧ¢Â‚Ê-:üì±G˜÷ ü¼Â y RBH‡ˆQ] m2s1MQZŸnj¥º­ O„ðð¥Â À“àK¸ë©â9(öXa R1ATÿÇÌ×ÕÆÌý6ÁÏ—>bÿ‰—°ª¢xÀ—¬‰xR­ž§†€ª° ¬4¨<¦7‡¯(Aóñ34'Mµb¶æI…¿Ìõ9yͧhú»! ôÓ¹§Sˆ•*¶Ëbë‡öûÈ ÙCÏÑÙTËžj /PøR0ž•ԛŻ'Ëa Ø%€ ·èìõ!æ?Ÿk7¦¸4U XÁ⟷¹2µ¬H16fKªB+*0C¢lŠ*®é…©Ÿ˜ûä-rã#|ø½Ã-G1ÿÃ#Ÿr93K掤&‘Ù ßÜ\ ›‡D¨üèÉdò|:¶6‚¨ÀgqìÕ†"£Y&ûãe´Ûc,Ôìã—|-¹«#'¿e>ÞÌL¼_â;Yæææ²›nÓ¿•þŒðô(Bgdù ¼Á Ô>už p'¯£ßú•èÓ¯—M‘hmmhoooÙh# Ý@köЦƒ Èd2“šëº3ÿÖXo«æ®ëÎhŽã Ú¶]ZÙŽeÛ¶tgPð?ÿ¶ü¹¯šXuIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_first_2.png0000644000175000017500000000163611273045225027621 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<IDATH‰µ–]HkÇ3»›îŽN¬¶Z«áWt!$}qèF½0HªcDÞD‰uuDDPWA_Ô)¨K霋sq¶‹"2+ŒNbJÂZ¶H©Ø¬«3›»óÑÅê¶;»«’õÀ0ïü™ç÷ßç}ÞaÀ!Ër§$I-§ X^Xš¦ªªÚ‰D®:eY«»âõzÅe‚S£ZQ”?úúú%IjùÅp¼^¯(IR‹8W–E£¤¤”5~†.ŠbÎgÇS&²HÍA`oK+ç.\¤ªz]Rw{<œ<}–[¶P¼ÊÇ™óY[Q™–î\¾Ú_FûÑ6m¨Åét`X }Ëöì9؆¿º’§Ož°»µm õ¸WcY錜ÍûÛhhl¤Êï@7Á•—O{ç)6oßJÞÊfMØuà«Ñ]N¢³:æR ¶£¹©Bw÷¶R^QŠ.À7 &‚´®œY ˜˜6V†Áþ#Ççà+`.1è"ø+K“°øÜ=ulZ`Ùj”f°ïH{šê)t¯À°%ÛïÙÆ¦Eî5îàÏ] Èn×¢À\š Øø ƒ’µ54ÕïDr»µ]"ЮYYV Œ‡‚\»u‡ÐT”(‰ L½ÓæÇ1‹Œ6M»þîG\¿~›O_ÕdB6H6í‰N3„Ì.J;çƒÝîßü‹‘ñé%Ï>–’oå;r¯`>†žxxûÁP8söVº‰a˵ȱöî ðÏ•K¼~1œ„FáW!"3±ôYéD{åüLOûy|ù =÷ Df‰šðñE€77îóõýXò½ÿ¾Eý<€gé"GQQÑ ŸÏçÍfbqÆþÆÔ¤ —3Öû’//ÿcòÝŽ‚*¤ÒbÜe´û.¹‚ü•…ŒÄÕ0á æczdÉÁ~â3aô™0ñi…ñÞ§èÎrfBA¦†zëí†ÂõL ½AO1jjj‚µµµÕ ,‚Éeè?Ñfbû†EMÓF¤Ã! Ð4mTTUµKQûùXv(ŠbªªÚ%ð›[¾º4Žû6€ÓGIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_last_1.png0000644000175000017500000000201511273045225027424 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<ŠIDATH‰µ–Ýk[eÇ?Ï9IÚžÓ$;}¥ëºnIѵëªí(ÇV†îB(ÖôÊ?` x%x¡ A… ^(£ˆ"õesv ² Ñ^´#vjK»¾7é’æäœ4iÎy¼Hº6Mâ ÕßÍï>Ž¢ëúÐ À0 E×õ!¥P¥Xg÷ åàAššš÷$¢iZ«ÂŽš·µáÍ·/RßÐÀ£'ûyíõ7¨Ñ´û/ uðÖ;yzèy„x`»„ZWW÷jcc£<`pþ¹—89ðšVKÊ4yòÙx¤¯Ÿäz‚¥…yZµ30ø8ácÇyøxÓÝ!ešeéÑh4Q$àôž>‡Z]ËáŽN ¡VùñéAêî¥õp;ë‰8áî~²®À_×Dwß5ºÎßÜ.+àÙ9áëY‰PÁîed~QÕ8Ò{†æP'‰¬Ä-L£×Ó÷Ä3TÕùîòÇ%"ERJ̬$‡,Ùx?ªØØØ½î¥­ï,O¹pe¸X¤Ø„d²ÿ¯^êOœåÜË‚ÑÏ/Up$³’´[YÁ•°áH2l: (P¥€Ox5ƒœ~n|y©’‰ål l8°––dÝüÀ«‚o *ó'“H\)ªÿ±S4¶ý‘È…d².¤²’œÜ‚²"v€W…œ'Sܹöѹ©2€hLGâPåÿ.h>C}Š@0{Ïbvô2wo^¯Ð ›‚¾½A·ž¥„±y“•_†Y¼5ZÔ³’èß'J¡…š/Y.”\0oºŒÍ%°~ý‚Õ±bx©@÷ Œêü3slUñ*`å$×gÒ´+qŒæVà‡éÉå»X7>Åœ)ý’Ë:x!‘‰E“¦ô,ÁÐ n­¸LÎGñM^#æuYj…¯&mŒµ ¢W>ÄÉØeáe{0Ë‘^[Dþ6LÌããë†.6W§Èýü ©•)r]gøövŒšÈU–ÿ¦"¸¼@®þ‰ýý{8i-ÜOnæ&ëW?ÀÝ̉Í!|—ÔòÔá"Ouuu…PTpíEÕƒtr{•‹H$2­Ø¶½°mÁ)Ú°8€mÛ ŠeY#ñxÜÝ©LÄãqײ¬ÁÿüÛò˜@uí³°ÚIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_last_2.png0000644000175000017500000000171411273045225027432 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<IIDATH‰µ–]LW†Ÿ™]¶î Ì:èB]Ø,.ÄTÄ*Åhj(šÔ6cÛÛÞš4½kÚ«&jL/Ú41Õ„F­1Z›¢‰?7{¡Æ˜Ø” Vti#"–YYf™ãÅ®Ë,; íw3ç|gæ}çù¾s&#>MÓö¨ªÚª(J 1¿–eõ™¦Ù>22rЯiÚžúúúot]—ç)쎸a:::UUmýÅÐu]VUµUΖYÎ÷™>X‰PVV>'EQ*d\5ƪøbï-঑Ï>ÿ’ ¢äZ¯á«ýø u’4k»$_iié§ápX-ÔÙøñG¬Y·žâ`1£©Û?ÜMÃ굌$“ ô="ñnó–/_AMíJtßc4•òTJ攄tê››ñéUuµÄ*ãuТ…¬\µš×+b$aÖ5½IÀ/S¹¤œo4Q´@¥»ëާßp€12(ò£ÖT’l *fÃÖwˆ-«% (€X ³{×N”’§.0É3Bä œ¬°í$ˆT•3 ŒE@( ¾Æ{-[°…Ä/ÇÍlàˆ)‚éâî±;gçL¼ß²‰³Ç¾Ÿ ûfò+Ämœ“¥Ñ”;·mfÒóÇ3&yý%A:kôòêÏ–SƒE´lz‹²hµW`BdH¼Ê1—ÜãgiÚÚŽð¤7áÑÀ–2i¼ËñªÜÀ°É©¶£Ü½vy† |¹ùÄ¿ è’âü‘é¾~É-Y¸‹ùßkÛEã¶ÈPºÅ{{“\=q‚žùâ…Ó…-|RŽflt‚gƒÄš¢Üìá·Ó?ðO¢ð${ˆ 9bðV‚øŽ†ï ò×…‹È~AYã'˜£ã$®ÜæÎÉï°Ç-OñBÏM›§w{yÐ~Ù ºuý7»¹ÿÓaÌþ‹ÞæQçS^º@ÿ¯gfö&W;é9ù5v:…¶¬‘?ÏÝàÅy>€ùø!¿ÜGz 1«8€T]]¨««‹ ûÀ±§}~„=9'!¯èêêê‘-Ëê›B°ón˜8€eY}²iší†a8óRòÃ0Ó4Û%þçߖ臽UbúIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_next_1.png0000644000175000017500000000157311273045225027447 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<øIDATH‰µ–ÝkW‡Ÿsv¶YgdÍFmR´&AÅÒÔ+½ðªˆ-¹(‘~üE„B+Š÷B.¤P(5B@Ü #´V¬E$M°JB6bÂj´ÙÝugvgvfN/6šMöƒ$¶?˜‹÷ååyÎ{†@(3 £O×õv@ðvQ¶m'-ËÊår?jÑhôXwww,“o ®L‡išûÇÇÇ‘†aôýÇpb±˜4 £O.\KÝ„B¡5Kt]o—TÜùÁCŸÒÑÙµdè³ÃŸóÝ÷?ð^[ÃsÔ‹Ð*«õÐ{ø+¦S\¼0ÈÌ“id¸‰{öpòT š_±a‰ èMëù`W_»™é)\×!ã(„ÞÌÎ=û8±m;Sréü9ò¹ìꎦ£ÊÅ;Q6ïÜ*{ÆFºöàhç.þ¸ußn\^…ÀƒŒ³|$U=@—݇¾ ukÃgÏày¥•l ÈUÍÁÚ‰°aÇ>¾üfW~9M6õOcA±òŠVÑÜÉÁ#§xpuÄØŸõŽ…ׇR¾RøJ(TyN’ ÉM¼ß{œæ¶+<¸¯/È;‹Û=…냠É2,,š O¹§É…™Ü<‰Ñ»7˜/¨7À°„u„—ÁÊÏb/[ô(ÍŒq/ÞçØÐ$Kj+ê°Ûƒç©¹±›$nÇ©•ª—¼9BÕú¯š(÷=§œôs^ÜÀœ­ ¯¸>´DÄP*(¥>Þ*ƒ}¸70›ÎÓ’™$yã'ÜWf]x•À `cDð² øuÖCäçÙº^¡kmüþÌgt®D»û”ànœ'Ó5×(†>ùü+Z²“¤oýLro/ý…OhuçˆMŒ¼ÔÊ¿•%‚‰x9‰¼3Èܳ \+Gkò™‘³޽bp¥àÍqÌ‘¼ì‹%™ûë:ñ²(iÛvòuµ^Y3Û¶“Ò²¬!Ó4ƒ5SêÄ4ÍÀ²¬!ÁÿüÛò/æ…P`9Û¤IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_next_2.png0000644000175000017500000000152211273045225027442 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<ÏIDATH‰µ–MHaÇ3³¥îÔØjH¨¤‘HIÖA+ªSÔÁˆô*"»ä%:tèV§:DYXu°O[¼X„E•¢¶ôafø‘‚:ìèLêŽûvp¶v–ÝÍ´þ—wÞ÷}æÿ{ž‡÷FMÓjUU­ðz½Ù€ÄÒ$,Ë2M³É0ŒKMÓj‹‹‹/ú|>y‰ÆÑÊÕu½¬«« YUÕŠl€Ïç“UU­¶$”¢(‹†x½Þl™¨žïÞw€õyù® ƒGŽròÌY2³’æ‘H’'z–S¼™Âc•ØŸzi¹}“¯}HËSHݶ•êÜòóÎßH<¹áßåÇË42JÀ ÎAž7^åû‡Ž¸æq+ˆn€l l„p‚U 8<Åë7Úï^ffROh·‚H{CÝ#X†MAù:Ò&C¼jÿBϓیîLjœ0Œ&ú‚ wø|ï ëv¢¨4›žŽzÛZxñÄÂ/¤ 0’ø{èonÀü€e´Þi¥¯ùákÁÆÑ€_éô?®ÇŽºF^Þÿ«Œc$d˲†"³XóùE›cYÖlšf“®ë‹ø %—®ëaÓ4›$þóoËO*å&% fIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_pause.png0000644000175000017500000000140111273045225027354 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<~IDATH‰µ–ÏjQÆó'Ödt$Å]w…tÙu¡ô)ÚwèÆwð Џp#‚;)¾…àJ(îD± ‹vLæO2sïÜãbfÒ;“± Td‘;ß9ßù¾sn&à…aø$‚ãÑh´8Ü-$˲Ë4MÏg³Ù ? Ã'ûûûÏÆã±{ÇÂvìFQtxqqÁñ?.Àx©øíÔÈ•~~„¡žNÒ/fÐä°„†Hõr =ª° YÌÔ}†î^Â÷f0¦¾‚: êÃÒAÁQ ä<¼b÷Ë é[çq¬Â´à)D5ACDà+x›÷1KÈâJo“黎çŒý¸z,Wñð³O1Ÿ'\ü„ùô*£^Î:m‚á¯YJžc>éÀ-æj ~®5œ¢Ø~üª£Z¤¤mÛéŸ+¿lÍ%Û¶ÓÒ²¬.Ã0ü9£NÈ0 ß²¬.Áþmù×5¾ªI”IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_play_2.png0000644000175000017500000000137211273045225027434 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<wIDATH‰µ–ÁjQ†¿ÌD$ & &ÔP,¶uc²ÑE)¢`ÛW(ŠÒ¤.ŠE\ݸhÚ*EÄM²ˆX¤Š8–¢ÓªAM[BèØèLc2™ë¢I™¤ÓhûÃ…9—Ë÷ßÿܳ EQ†ü~à¡= Ó4³†aL …;Þ@ 0‹ÅnƒA©M°S]º®÷«ªŠ¤(ÊІ %EQ†¤j[öD~¿¿CÂÑóx<ÎÕ±1bñ8O»O€Çë¬|>Gâq.õôPÌçYPUOO“ËåZvð6nX€åóá‹FéF9Õ×ÇZ.G*™$™LR*•Ú3€ T€2°?¢3b¸»›4M#‘HP(Z3¨Áåê÷V-Ë„#‘½½½¤ÓiÆÇDZ,«©Á¶ñ´©Wö‡ÃœäÆ­Ûœ>svwbpͰ&¯,s´3Êð…‹\¹vήc®u-@E€íqO"WÏ8øà'OçÐåQæ>0qÿ.?×u÷Ê¢ژęÂy3Ë”lh– "e!°ñl{dg §–˜¨‹_yò Árf±y‹,{s!ooMc £h1§eI=âýlÊ-—[‚ÍIMÀÅ ¼Ò–y3û‚ôÌv¥ù˜ÖTß`Ÿ ¸P´ùôy•Œ¦‘zt_ëMÁ®–Ø\rj XË›d3«|œ{‰šš¡ü{ãŸÀ;&(Ù Y°ò%O.ó·Ï§XÑÞí º³€•¥<ßç_£>{ÈÆúZË`§ÁÖè®.Í35za»N{+’išÙZU.ÿŽišYÉ0ŒI]×í¿ßt]· Øô°Ç¿-Ô?@sÑz¬IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_previous_1.png0000644000175000017500000000161211273045225030337 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<IDATH‰µ–MhgÇïìn²ÝÙÌvvýJ¢‚»¡6Û)KQQPQñ#"‘B *BAz¥ÅS顽õÔƒ%(ˆˆ‚/‚Q£FˆDâÆDÔIv3“Ìdö}=ìv»»ÙæSÿðæ™çùÿæý3ï0†qN×õÎH$Ò V&å8ΨmÛ=¹\î aç:::~3MS[¡q¥’–emïïïGÓu½ó›`š¦¦ëz§VŠeY óÞD"­Ëȼ¹¥• ¿\äèñUõdª½ûT–Dp)ÆñÄ*ººO±¹=iš ¼`ã¦$ÇOv“Lµñrð·oÝ,Ï, 5bûáGÚÚ¿åËø*&\ESb ?ÿ•É6ô¦˜ñeÕì‚€û³mÏts5 °\U¾·¡ý;D(Œx¥º[¨žÿ_@0âÈéŸYŸÎà…¾Àsëu…¡¦îú‹Ä«9tænæè{+‰ÿ‹ªÿÄ—¨ˆÐ[ ÀË[ ÿs y÷w¬Ñ!þzîò`L âÞ[gǹ=â㊠±Õ*Ÿ}J~øæ÷‡™ÝÅÃñu´d{™ztƒøž³Ü™úŠh´‰\à Í+¥°z¯£=»Ãš]§ñì^þc×.nÙŒØÑ¬ E¤R©Wét:¹$PyZCåÇÖâOŽ000ÕÇ]–9Ì1ÊæŽãŒj¶m÷X–%çt®P–eIÛ¶{Ÿù·å#£žHËs4IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_previous_2.png0000644000175000017500000000154111273045225030341 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<ÞIDATH‰µ–KhQ…¿™¤’ddâ4ÕQÛRjÕŠЍˆ;­O¬ZðQ7nªîêBt!ºŠnT¨¾ ¨V|(iV4š> tÚÔÓdšqÑiœL´­ø柹çÜsîÜË€K–åfI’ê|>_) 0=˜º®G5Mk‹Çãܲ,7×ÔÔœSEœ&±eªª® …Bˆ’$ÕýcrE%Iª­X¦—Ë5ásŸÏW*2…Ìç–”rðèq¶ìªÏê/(¯`æÍö–àþâÂ@;÷îgÎâÅŒ)‘ó–±±qîÊ ôp'Ü»““—ÀLÙÏŽÝMÌ_º×Ü #¤MP³i:r ©ª’Á€Ÿ `ÔÌ;©ÀúÚí¬«ÝÂÌyŤHZ}¬XÁ°ßËwëÀÈæÿ³€Û]@ýC,[½’Ù›!‡)@ÂïÅÁ‡‘ÎC`V HCs K–Ubº…ò‰`¤'‰¨jù*¶6îcQe))RAšÈÁÚm l¯ß,{ÑêQ«ìcÿôm;#ÊÚÁá—OèþÔh€$l•dÌ‘i ¸¬Ú·›s‘³z#\>у{Ï!a0êpa¿6GnÀ x€Q3Û[Îd$ܾtŠÖ+7ˆ÷ !8H‚öÅÉØñêîu®ž?G×ë¯xͱÙþÎENo¢5p¢·ë57Ï¥ýÖ ´žïx¬XÆÉ1ÌÌì3îòu0Ž‘a•ŽË'i={𧻇S̰„ÂÏ¢DC}`þŠÉéÀUXXx8 *“ ýèãóóûô~Kb¸ÌʼmÀ»kIRŒÛ#ãQ<ôw~!ö¦€X,6˜·À8â‘."/1˜TÐb }xEìm}ïä„’‰¡Ç¡¼¼¼»ººº,_,˜Ž£Á_Œ1Ô@8þ(êº9är]×£¢¦imªª¦sÞœ&TUMkšÖ&ðŸ[~ ¥6y6:i·IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_stop_1.png0000644000175000017500000000136111273045225027451 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î<nIDATH‰µ–ÍnÓ@…¿Oø‰Q„•Tlú}¢ªú}V¬x *õ ºf[©;,Z¤‚ŠKRÛIæç²'±ãÄE*ÜEœ¹™9çžs¯í( F'iš‡Ã=@ñ¸²,¯‹¢8L&Ìh4:988xŸe™~$p3öó<{qqNÓôøƒe™NÓôØÔ¶pttÄáááj“•…ÊCå„ÊÅkéaf×ëÊÕ{¬p{õ…oß0÷ ÏÇã1Y–­¼ÀÀq`œXÐNP”p V¼kõòUSˆ2»$Ú¥ƒÒJ¼Ö•–6~_æJ[«rqÿÜ·q¶TžöÁ¿ Yþ¶xˆ`îaºXê’N¸·0wÑB£ãçðZ+f^øt#» (¬0]4+[W{[ …¥0 ž&`4$*^µÖÌC‚ P8˜,j+j’•p7`´j Fżé·È…èoSÁ×IÀÉHm€BÒÈë{ðd Ñãií÷Õ4ÄQÝoU¯U‹¬—ÀY)¸©.tAšÕ­:VÙ¾8{+ü¬¢—+ðúp²áy›,ªì%°>6yî…&NË–ª› I3¯Û#ºUÁÝLº–¬€¶UÝž¬^ øeSû-I6ó:žëW@ž%]o“ŽUÝÉJ$A0ƒÝž¯•uóÝõ¨£`f…Ï¿ã-Blš°~¦+ÔÆ:~hº#º$XµþþîoÂ/P)aV¿Hf«—ŠPY˜y¡òñ·ƒé÷æRLY–×À>Àåù—çgÝSñ„öݺ+ʲ¼ÖEQœæy¾EÜã"ÏóPÅ©â?ÿmù/Šœ€×ûüIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_icon_stop_2.png0000644000175000017500000000121511273045225027450 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYs 6 6ØU‘òtEXtSoftwarewww.inkscape.org›î< IDATH‰µ–ÏnÓ@ƻٰ%KN½õò<‡Rå5ú œ8q玩OЇˆzNž—ÿIcïôà5ØNl'jid{5;ß|ßîÎZ£ .}ߟ{žw (žf’$É*ŽãÅz½þ`‚ ¸œÍfïÃ0ÔOL\·³(Š^/—K´ïûógN@†Ú÷ý¹q²ðöâ‚7ççÀt YY!¤[ØBZ@¶uÏ\Èr“ ?¿}åó§wxžwj¨ižœp;òF`ŒÝÓ¼¦"÷m 0¸Ï„Òz}Ê´©m€˜U¡Ê*ЀA1qELœ±°µÍ|Ϫ½<´vb9`)ÙVú*À¼Tl é(,¼¶.©v뮥`Ó'‘hPŽ™P” Þö ¨w ò=Ö¹îH\w ;5 VþtUÛçE+å8ºã#“k’È–)T][s H ±‹ª5xÕ1yd_nXÝ/M›a)£‘bŸtƒ…=l;ví³–D‚Èñ•$©jô];®Úrý}äv\5~—î¶CÙ…¸~ñû˲ÒÂ]$/Hs!ÍËË'ËaS;T•þúî¶ž_L’$+à àæúŠ›ë«²M«î>K’d¥ã8^DQdb¶(ŠlÇ Åþmy@HïRØ"VIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_last_1.png0000644000175000017500000000312511273045225026417 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<ÒIDATX…͘kl×Ç÷Þ™Ý]?ƒa‘KÀB vmÑ ÔÖŠ’´ßú¥r¥*Eꇪj£ˆ$ªJ ô!h«R)¨!jUÈ×(MiS”ˆ8 UÒ¨.Å}Pl\CüÂo{_3sçöÃØ ^ï®±Ì#GZÍèÌ=çüö¯Î0ƉDöY–õ¤RªVaq‡Ìãk­Ç}ß?âºîo„1ÇqþL&w555Õ(¥îOÞ´ÖtuuM Íd2_¶m﫯¯ÿYKKKͧ)°óçÏOô÷÷ïWÑhôå;v¬•RÞm&êêêb}}}÷I¥TíÝØ²b¦”B)U+oå¡ÞÒÜÌš5÷.+‡Â*ºg+êVòýÏRQY9Ï_]]ÃSÏ<·À?g6nâùŸ¦ýkO°õ‹B !hlnåàá#ìù|ÛØÐØÄó‡~ÁöZ§ Äœ8_xä1þô—¬m¸ïÖA ÍQU[Ç—Û¿Îs³bå*R™5÷¬¤}ß7ùÖÓßÉ'®C†ŒŒ¬¿—o?û}¾òÄ7PÖÒNˆŠF£û*nt:ñŸÙÓ†ˆÄ@ÙT֮ঢ²šºÕkQaGX±ºží;?ËÈð Ãý¬ß´™ [ZqðPQ‡úµëÙ¶s}—/116º(Poooª$Ô»Û0–ƒ7[@D’kÖ!,kÖ/P±-[iØøI2é4Ÿ¸¿ W“ó‘Øñ*š·n§ªº†‹:…*ª«Üß<±A…~»‚µÍ;X·©™ŒoÐ…aN5-»Úv„ߟx©,Xq(9r^ÙØ‘/Œ/j2ÎýÛöðE#8uòØÒ \mð½RÙ—c [wó(‚7N¾xóPÈõoÓ,Xý§vñH»àô+¿ºy(WCê¶(Z ‡ºæ‡iûªäÍ“G‡Â@NCú& xL»†´ö*ƒ 0³‰KBD‚%–[‚-3Ò¡ªq'Ÿkœyå…òPCNRAq¥´ñ¬aƃ¬6è”X"PÒ\¿bÖR„?1‹k ¤„Cõæ‡Ø´ý\üàrPaKH0¥=˜t iß ™Äì°h!Hx^-Qúrں̥ϖWŠÙ–0§TƇiÏ€ ;JÌK¼T¹5cYƒšèã­c½Øö…gjÚ [B•¥Aòe@®Ç ”„Þ©€Èô oû¾››W¿$Ô¸¶ D-‘/¶¹˜ÀÀ߯iª2¼wü¹ÔÔ‚ú%›§g$ »4ˆš+VN‘‚õ“®á/ý>«²}œ;~7=]´vÉ׌³&žQóT ¯¾$¬ÂõáŸê øÏµ «S=¼â‡¾[JÒÛ§$ì… R„=çFEÐ9õ<ÚÖEfaó3‘3¼ÖíQÌPyõot¾~c‚’@%¡¤„„%nPÎ jk$kd^…±¬áÔeM½šf}Ü%a¯Æ’áôØñ‘æÌͧãã ¿ý2#ÿ|¯,Ly¥ ØsJIè™4¼?¤iv¦¸Ç® nG‘À»Ò´:ã ž~‘Ѧm$6?ÎpÚpü_ÏÍÑ*ú¹tâîÔâ^^¢P„*àÏÿ 8?”¥Q÷qõÕCD̸ðë.Ÿÿ^ËФ{è>þ “ݘÀpn àGxTé)V]éàâo¿»$ ’JŒ¥Â’dë§+…R ›ÅÌ¢¼lÞûðc^\ÿ:šqj3D3›Ísrrl¡NK’•§V¯›‘˜€Í‘NQñJì¶d™Y$&[1[ÌÌÍÌdYq w\]¸:;ÈÍ_̓˞Àh©6 ósPX\BkKîžî¸@­­­ƒQ¡–¯Zƒ²[P€`²'áÌžf4aH4 ‚”Tù˘——ÏÐàK—`cc™sf¥_XD’=•ËõãBEÔU>$`½×£ÕŒøB}@š#™§KVpëÖR| ¼£þàÜ0XèL#qíZ4SÕU߯‹ ¥À§ƒ†&^U¤¶É€Óx+}!ñÐY³¬”¯*GGðkÕ7Sƒð)…˜,Pð*mo„xPµy³¬¬*/CÇÀÁª=“‡R”1 &­àh[ I–=ÛJyY):‚CU»'å×íhSQpâ³`Aº•UÏ=‹﯌ÅèœR÷¨J¼gƒªå:¬¨Ò•è~ß¿+žRj jº&ÆóVdi Í—ê¸rîïXP%áA)`ħ8ÓÐÌÕš“±•Bö±à|xP@©8r®…•躌 ¥@—=N’{òép¬æwmÁï—?*”²% B|~•»—7OÃ>Å©švŽîþ„‘Áþ°üQOݬ…!â©6™2ö IÎm毽x‡"掺͌þóŠhAÕ¦ t«ÛCí™Ëœún+ºßuüèå‹Î£É&n'þ>?Öc8¤‚Æ+nšÎŸ§îçJ”Òc޽|‘¨(DÈI×Hú/õàö]ä4âU4]pqé·}¸êOÇù©1 "•OzÝn“²(sªùÿ°âö….«÷±¼˜¹EÎ1 ž.íµ×©ûaÞþø¼ E=‡ <Øå¡íØUêömC…ÐÜâú±©Ùõ>½M‘RgxDáÕ¡¥¶›‹R³{ó”€ Fù{8öz2 v»½«¬¬,c¼WD8šíøñã.ƒRʉ–øR(¿AJÙ+¥Œÿô ˜”)e¯&„ðz<žÒŒŒŒÄ‡ U__ïîëëûôÑü’÷(~óüãÌÍ*^cBIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_metronome.png0000644000175000017500000000170711273045225027245 0ustar julianjulian‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ2cÄ{¶TIDAT8˵”=ˆ]EÇÏœ™¹wî›;ï¾»f·XV_‘• D--ãG j±…ARJªØÚ؉¥•¥àW‰J:m‚"®Äba‹e]}ûع_sð”e÷YdªùøÏ3ÿùÏÜ£&Oc°( hÛV!äh4Ì }ß»O¯®®^“RF)eÌóœ±O’äÿU±µvu8¾(„ø3„p¨µ¶ˆ¸™eYÚ¶íVŒqV´ÖOÑû1F:Ñç܃ÖÚ¿œs¼¼¼¼gŒY)ËòRQl­=ÐZçRJeŒÙuÎqY–O/d…1æì*¥ÞžN§§ƒÁ“Ì|€™7C‡}ß“Rj3„mÛ¾¾¸®ëJ©û»®û@J !„)å¹ÑhI’\¿ë”›Y–AŒñ’ÖZ/kíºsîf–e¼¾¾ÞEÁI’ì)¥’9°NÓt2¹,ËÇJ…÷þ÷ã†sî`:b𦠔ú‚ˆº™¦ïû€ˆßîííAŒñüÂqóÞït]÷n×u@D`Œùîˆlšç9t]·¡”Â…sl­ÝAD`fhšæŠ”ò¿'»ÉÌsn5˲‡{ïß`f`fÐZ?UÅ•ùõ®ë&Bˆoªª!ÄÆBà,Ë–Ó4}>ÆÌü5½g­}`^§µ¾±´´DôìBàÑhô\–e·½÷/#âoˆ8TJ}äœ;;Óíïï_ïû>¬­­=l­=½ˆW Æø9µð–à"ú)ÏóËMÓìVUuk2™À`0xíX°µöôááá#MÓľï?¾ãç÷I’"¾ªµþ#„ðèL/„øÒ{ÞûŽgYvQk ˆøcUU[mÛr]×·ˆè“¦iÖ…¿ÎôMÓ|eŒcÌcišÞw$½y' ŸÍ‹ˆè|Œñ‚Öú%"úp6_UÕýBDÒZ{a~˜uòŸ7þ8•Jy)¥ÝÝÝ_^¿~Œ1B Ë2ÑÖÖ†––Ÿ±X ÇÇ;w>Pe€ù†(™¦y ¿¿ÿæää$ž>}ŠjµŠ@ €Ó§Oãþýû-ÓÓÓ+\ÉdRôûýý+++·×××áõz‘J¥@)=æóùf!™LÆ| `ttTr§1ö#Y–¯f³Y˜¦‰h4ŠæææŸlnnfLB¡P}<¿­ª*\×E"‘¥ô˜ßœœ\~[PÈd2æ•+WVEù'¥ôX"‘!š¦!ÿ#×€J¥¼„sss¨Õj]×ÿâóù¾Èd2;xGËd2UŸÏ÷…aã@)ÅüüŸ°³³ƒ©©)¬¯¯ÿµ¯¯¯D)4 #N)MT«Uäóù¶··?6Mó½áááú—nùþáÇWVWW¯NMMagg„ôôô@Åʼn‰ Ó­­­v¥RyhYÖOkµ8ç`Œakk sssàœ išæ¡|>jµ ÆX§,Ë!Y–—ÛÛÛ7:$PJûJ¥RöÖ­[xöìjµÇA]]š››QWW7Â9ÿ*—ËÙÈçóV,c¿~üø1t]‡ã8°, º®CUU ‹Å½>Íc¬C’¤ïù|¾%I’tUU …Áõõõ½V+ššš0:: MÓ>I&“•l6ëzviŠÅb¬X,ÞH$ckkk°mŽãìÀ9‡mÛ/ôlÆ\×í …BßH’ô´V«¥K¥R¯a²,##N£T*‘$éñùóç-ve³Yƒ16·¼¼ÜöìY´··£©© Š¢@„×Ê…üoBB,I’à÷ûFÑÙÙ‰sçÎa{{û}Y–?Ÿ˜˜Ø“ çùår™G"‘•B¡ð[EQþ>44ôójµ ×uáñxö4 ‚  ¡¡­­­Ÿ…B¡ËuuuË–eµèºþÁ¾}û022Ó4SÅbñ7š¦-]»vÍ|«E ··WllllàœwŒŒÜž™™ÁÂÂr¹8ç…BˆÅb ‡Ã¿á~ à”ÒgΜ™¿téÒ !9MÓ*/Ïá7?_@ ð‹¢¸¿R©|¼´´ô+BöïßÿY8þ½×ë¾qㆺÛÜÜ,–ËeþΫϷða¹\þCCCßêëëÇ !3÷îÝÓÞ¥—{¿C,eŒÝƒÃŽã,›¦ùÍìì,}×!ò_ýå+ÐØÁârIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_next_1.png0000644000175000017500000000260111273045225026430 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<þIDATX…͘[lUÇgf/ÝîZX[Ù´BM«±I D«ÔßL0ú`4jBR4m5‰&&Ä_Ä”%¢h›Bx!Uªˆr ôb ¤¥´té}»—îÌ™ãÃö¶íîÚ’¥åŸœdæ|gr~óÿ¾œsf„R ‡Ã±Öf³UèºîBؘ%)¥L)eŸiš›£ÑèB)…Ëå:äóùVÍ×u}¶xÆ$¥¤©©©¿««ëd8^-ìvûÚ¼¼¼MÅÅÅógf’êëëû;::*u§Ó¹«´´4_Ó´¹f"'''£­­­PÓuÝ;)K$]×ÑuÝ«ÍfQOGB[œ>šòÁŠÊYùÜ !î XB—Ö•„&4öÔìàüÙ3Sâ )¤dù ^yí öÔìäüÙÓi…Jè”T¾Ü<ÊÖ—óEÕVŠW<J…îpáËÍã÷ÊÙøÕ×/OTB§ © Í™‰×—Éšõ ö÷±¿¦š¦KÆâ8\dç.¤ìýJz»ýìÙñ×.7§Ê´ dNèpzÈòyxs݇ú{±¹Üñq§›ì‡ («ø”'ûª·qóƵôAE-Ƙ(‡·ÏƒP2q|dŒwÑbÊ*7pãJ»·m&:™Tš2,‰[0 ƒ†ž4>:fØæaÑOQ¾q ‹ Ï*qMY ÃLâÄŒ$Ð2³yýƒÏ¸øÇ/üzà'FwQ# Lcò°dåKä?^ÂîÍ)G'M_ÐHoë1È xû“Mx䥄J²$@(-é‹WÈ»-‡WË7R»³Š›W¦µÁ¦OªØRbZ •B*°(ººˆ5M@·6Ò·*yàX ÿüU;=(Ó‚`§6b.F%X(” @ŒLªk±‰Ç!X€{^°"ƒÇJ_¤åôq,Kþ?”!!dÅ®-[³†%H „6þÆ6!Æ\ÐÆÜcPš˜êV£µÃ;¿œ”Ê‚SaŽØ¯ °kà´ÅO  1ʼn.ÅúÅØ}ÐP8d;õu\w÷|ú}ž{îzB)@~~þ"‹Å²\×õ!„…1’RÊRú ÃX‡·¥6›mŸÓé|dÆŒu]+žk’RÒÔÔÔÓÕÕu8 .yyy‹ÊËË×ÔÔÔLsšÿ¨±±±ÇãñÔëV«uGmmm¥¦iãÍDYYYÛí®Òt]/’%“®ëèº^¢eSg"!„%iÍn¯º#íKêW0÷ÑÇBŒ XR¨×—ÕñÉú¯˜];'éA·ÞVż·Þfõ¹¿öÁ±Š ÑR9•§ßYÆë6R=ûë↩ðÚmôVNåù%Ëùpíî­™•3¨¤ýd˜ŠAç&Ú™Plgþ’wYàõ±gçvšþ"bF®Ð[<|G%/×ÕÓw¹›o¶oælkËh@ ­‡x&a+-â¹¥uÌûÇ‹µ þ„ýM‘Ò"ì%E,\±ÿ¥NvoÛÄÅógs¥†à›ìÀ:ÉAxÀHz2S€e²ƒ)“,^ùg].¾Þ´Žð`(+¨¤=•èÔ°˜=öL ìN÷ÍCݧë™VuW. ’X5åÛt*ªœ¼Vÿ>ϼðjÆ#$k§²•¦AEE1OÌ–Å«Ö`+,!TnŒºN“K ˜Y}'o¬ZCÉ-å#€Ê¡S‰š`Ìš>…WÞ[Í´éÕc¥b‹"@ÁØgP˜9½Œ—® úá§²€JS> ÐcK¼mÍDLˆ }@ðÎÒBîyèI4møJò9%‡ Èíÿq3ãîh ÛéÖ-€¿{€ÇNòÓÖÏ0M™”TPØb0‰Ž$&"!– Ppá\/ÇýÂÑï·%K*bBqìD2M¢øöܲ…Zýùa­‡÷§J e˜êZÃfZRÄŠ€pÀàÐén~Ûù9>wkZ ÔP* ”*Ñœ‹ŸØaBÓ™Ú\§8¾k=2œÙ=0åSBb#gã–…hé®J¶ø8¹g —›Žf“JE%Ž+Et h€ˆ(̼-'é8° #¡7œøÃÇå3§9¿oFON`ÒB…#’柛éØû%ƒÞŽaqo[#í  v¶å&-”û»µ„¯¤nTÏÍ£—¦”ö/ ÐhK)ehRJ¿”ÃïÔã!)%RJ¿.„‡B¡ÇœNgÁxC¹\®ž@ ðñÍù&ïf|çù/@* kÌ;‚±IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_pause.png0000644000175000017500000000175411273045225026357 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<iIDATX…ÍX?OÛ@}çsDEb©+#b¨*10æ °ò:ô03tèT‰¥c×~–¨íDƒ*T©CÔRQµ%Qšøìûóëà85Îݹñç¤H–}ïùÝï÷îbFD€z½¾†áSÎy“1â–)­õ…Rêy’$ÀˆFãM«Õz¼¶¶¶À9¿-=“¡µÆÉÉIïüüümEmV«Õv———÷×××n]Ma÷ÎÎΞñ™™™W+Aܵ&,..Îv»Ý‡ç¼y-³ Î98çÍÐeêlnn: b ü‘„O§ŸñúàÅä~»ÝÆöö¶—`(oç?ñroê9c,tî²¥¥%¬¬¬€16õLˆ$p!_ .=k6›X]]µr€‘ú1aÌ;…{dˆÆ¦~œ1<¨3cH´ýå6c óµ/4UU6Mˆ-¢JqÆ+¥1^¹U;VìÃIo¥¼ÉMcòÿ²ëT”{Ū0?“ˆ•û½¥Ç‰‹œ!Ý®JqùëDÂÓ¾ÒJùÈ…ÕèyQ¶ÅªbûÊÈ…&ÄÆŽ“–ùÙulèz•ò“ûÛg«n€´í¢ª§²ö¹È…Æ•>i_ÕJE PÜot›§„Tèöbåöi“[ÄLÈ-¢([LxF—c`©Ñõ4.R æöbÕHȲÄgtaÉ©TT‰Ñ W©Tbad!ÍÖV)¡ÊC·R¥2rn!-¶/€*¶–ù×6z¢SàŒ‡\ètÞl~1Dˆ4P³àòíšP¿ª¨ÌèEL1§f ¸¬R¾Ð W•Uªn!Í_³¶×,óó¢Çñä% iœƒ<;§pˆ4аÌÏç›oø#Á²‹ò׶ŪÿÈ7ϱW"ʤ•ð‘Û’FB¤üùFl©¨ÌèeäÅ¡ÆF÷…§ÇN~QY¢ûÈí•J=å Ïê¢Æç#wŠ*ñ¢¯u^QRƒðîH`$ C `ÆŒ Àïg€‘$|8ª7’ÿ¢ƒèÉ«,$"ëf|ÿ°9DŠ0’é?[Y¨{ ìu/ÝþèBœ¾Oq*­š-j¢oDDŠ5[[[îÃG­5;œ1–!ž´Z­ÙrØÍŽN§Óë÷û{÷óKÞ}üæùXý5’íøÃ:IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_play_1.png0000644000175000017500000000235411273045225026424 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<iIDATX…͘ÝoTE‡Ÿ9svÏn©¦…šM@Š£&Mj4¤¡‘(1*±B¢ iHˆƒÞyá…þܪnõBŒ‰(Q>ZJLV”Q¤l j±K—"»[hwÏÇÌxqh)tYÚR¶¼ÉääÌLæ<ç÷{ç##Œ1D£ÑM¶m(¥¬BØT(Œ1R*ÁÏó¾ÆâñøîD"±²¡¡¡FJY)ž‰PJÑÛÛ›Ëd2‡ …ÂZ‰D6-^¼øÓÆÆÆšŠÓÜ===¹t:ý‘tç릦¦z˲曉ºººØÀÀÀ–”²v>,+RJ¤”µV%“z:!„°Kz¶´~/¿úñªªJ3PR¥š…‹Ø°ñ}Z7l¤ïÌi:ÚvÑÛóãËǼ@×§ºz Ï>ϲ'ŸB)MòPÞËPz°òPƒ« •±œXÀÊWZXþÂ*®äéìØÍï¿vS,ŒUÊpèàö œjª©fÍúwYÓúçÏž¢«c§S'æÌÞÒJððür‰‚>óë{Œ¢»c'¿ìÛï{seWCàOs« !`EK+ͫߤkÏ$;Û ¦=À4 ´¢2¸ÌÔŽ–ˆÐôÆzšW¿EמíëÚ‡VêÞ¡ŒOÁ˜ž!ÓD8Háдömš__ÇÛèI¸7(M˜è£÷˜¸#D±­(ÍëÞ£qU m_}NörzvP³QJDI¸ j§õãO8ÙÝN²ý;´š2µËCçÔh*e€BW´ ë& )X$ -°-¾ °-È ¶–¬haÃò—èÜöé¾Þ’P%÷>ä<Á¿£†ó#†³YÃàuCÎ5¸ Ô iAD‚#!&1)plAT l+„‘7Ô3@` ã;\²±æƒÍÔ7,Ÿ™RYOâáß;vøœ(€%Ä­uSÚ'—°/€Ôûרµu C}©éC›Ÿ Cˆ) ·öÀ˜µV?÷Ó¹÷T™öŽJAhÇl &·ç=‹S¼ÊÁo?#—î¿#Ly¥L¨T¬¤me¬ã¦2™‚!ð]j,³û·ÓdFOo:ßq2ÚÇÝ!Æ‹F žç±Èö¸Ð½ƒcG:Ð3ÜnÊ(ñIöMLùÖ]÷ çòšÀ÷HD|.ÞÉÉd:˜ÝÆ\&§¸ißm–ûôå5ÿŒh2£,Œ mç·£í(¯8+˜²PƒbrªuÃÃÉ+𼫍w Ô]âÒ¡ï9×wüÖÕt®¡´ bväkHý§9uUS…Ë’¸B\8L_r'ÅìМ€ÜÊÜØÇ2c†ãÚ̘aid”zQäJò'R©ƒhßs˜²PèÏd‡Kãvö WüÈÅ‹ß7»BU¶ÆOíáÂm¨Ñ\E`ÊBOs~ë&Ð3;1ÎUØÆ˜)íæƒï«,¥TVÍð }¿B)…R*+…^±X|1‘HÄæ*•Jåòùüæó&ïA¼óüI!!‹ê üIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_play_2.png0000644000175000017500000000214611273045225026424 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<ãIDATX…ÍØOh›uÇñ÷“'iš.ý·F‚ìØ *©ô$c½ÔC7ì­8µÎÎáM<ˆàAõ ¸¡Ç©´=9Ü\ÓÎNj¡™E‡´%uˆÖni›®š4éòçyžßóóP"%>y’v1ÙrxBÈóÊç÷{¾Ÿ"¥ ®®îŒÓé|UUÕVEQœT)RJC7 ã#MÓF)%gÜï÷?ÙÙÙÙ¢ªjµ<ÿFÁââb"‹Íf2™“ŠËå:ÓÞÞ~®«««¥êš‚,,,$VWW_SÝn÷g===;ŽZ›ðù|õ+++‡ªª¶Öbɬ¢ª*ªª¶:ª¹©Ë‰¢(NË5ëèè ¯¯†††j›°l©­­á³g:}šH$ÂD0ÈÜÜùñQ@Ê0Èx½êîæ•@UB¡×&'‰F£µAIÀ2€ÓëÅ ôž8ÁñÞ^’[[LŒ …H§ÓÕEåaù—æp 66r°±‘¡áa†††XZZ"Xáåµ}òLÀQ€sPÝnœn7wwB066F0DÓ´{B˜…-6—¿À¯—¦æfe``—ËUyTV. Îí¦±©‰gNbdd„þþ~ö3˜ËjªÜîÔ××ÓÜÒ³ÏqáÓŽï­ªX+V8«-~ Áƒ¯í /¼ô2o¿ÿƒí÷†ÂS gy|M }äo¼wާŸCuÚÿ³•lªœýdµ„…ñ¸òyyªÿ$ož¿À‘£î eJÐÍò÷Óîk»( <Ôâápû ¿þ.Çž°üœe¦Ãüï|*ÄYÍ0»H Æ3DÿÚæâ'² ï •oÊêÆv8 X|gJ“Ü\¿ËÙi¦/}Ž¡°Ö($†)m1v¸Ý(Ý„Hì.·6þæòǰq{¹(Æ%A—åaŠát~»“!šÈ2;ñsß]Cš¥v])”¹ó‹ËÅä¯s&,m¤‰&4~øæKæC“C/ SJ⺫%ˉfVYnL]a~æ*Âfßì e˜ Rº¥TN²²š$±­1?s•ðõ¯ÑsÙ}aJ¢t uX·"$$’ѵmâ±5~œ¼Èí›?ï<óÈžF‚fHÖbi å¹ï™ŸþŠÔæzE e¡vÏtZ²y+I:•fáÛËüþÓ †ž«8ÆèB!¹©“\ϰ±!`¬[bø:qVƒ°C1© f'j˜ê]¯†[  ŽSÞR§Ïq$?Ÿ8Š­»É.­ÄÔÝ"¥;‰kq—›R%Äqu©3®\¬qfô„«ïÏïNP|û&E•/Ðf…( &F)•ùa5L$Cˆ£ÀV`¦ãÔh]¿ô#і딽¸Ÿ¦Î,‚†„å–9f ¹9? Á¶SSMj“׹ʅ£µxšëèëíå—Ĭ [ôˆÄÙMòáÝ7*Æ“8®x÷I3NýéÉYZAÑ–½œoaxèÌó‹„SIékpɧr¦ùî­[¿Ñu£…[öâÊ_Æé«! B‚Ê2Ô¹ë>¬ÊÑ ¸ÆÌ;ýã@MinÅîÐtö3"gÞg…øÝìã«z‹3M’‹át•…V¼Û$0’Ê€ ìq6yÓúãÐw+Bãñà œÿšµôÄL>ýÃâÔ5›;¦¢¿§‹þŸ¾ Âè £×äË¿,ηH‰9•VJW]—ˆ^«#gÍvòK*iìÉàÃ:‡ A“hSÝÿ\&{õVV¯|–«Ñ ~owXÖ0f2}©¤¤Eû…SDN¤(z™2£—øà W9’Û—¾åÆñ7É¿ù+eF/×¢ÎÌm‡ï%»/JëÙ#øç/F-ÛÜ»ÃÍŽá °dó«HÍ?;PCе5kkJÙ7ÐÑLÛ©·ñd/HÙ¯)¥îÃömr2ÿ‹ÜÕ¦”²5)e—”ãì¶fYRJ¤”]ºÂŒÇãësss}êÊ•+ÑîîîÎ/yã7ÏÿI¢ ô‰Ä“oIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_previous_2.png0000644000175000017500000000243311273045225027332 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<˜IDATX…͘mlSUÇçÞ¶·¥Ûº–²²Á–±À`§¾1ñƒA’ø2ä%0‚.$šŸH0¾ðEÄHü@b ”—LÌ‚f¢f0‘1*lck»ºõe÷Þã‡uuëZÒmÝàŸœäôÉúM[‰y ¹êÊca{GÚ¹¦ U¹x)·¼KÞÜ"bî|ÂŒ„mÈÞ˜«VÔòZýÌÙüž|耞°ç ª´¼’×·îÀ=¯Å[À3ÅG³;iØwËœÙôz ˆŒÐSÿ0Y(›fçÍ»©\¾ûœtexÕéwå+vÓŸÁGO¨‰A•V,â­]{ñÎó¢:ÔŒ0# æYè3¥H !xyC=«V¯¡¨Ä…©ŒMÃd5éšr8óÙôág,¨(Åã±£3¾v&•~üPî¢ÞþàSª*çbÓDN¢3j¢5UúX5ë¶ïae¥Õ’¹˜§5‘HU?»†WÞØÄ’RR@”ľÂp-™£šL´i…R•%O¿„Ïã$$þ‡) ™úPGÙ2¥=SúƽMÓàûs¶©™@÷ ʨ‰Í,ú£¬ZK4k8 •6í)Á4 N¹Æ“ܾÆ6°Ô6bœ8}#ÛHÖÅG9óÝ·´üÀ™XU6QJXj_a8rC“Ý<¯Ÿ?M¿@ýj—ápY“¹®&R™6Ϭy}þëü¸7g~ºÀÕkA\&ÉZË&2™úYz&ñ(Ží§ñ›Ã4ýÚƒì7p1n"CÎN ÷Z/òs[+]k·3i5+«ÌÙótuFq΄=6ä⑃\þ¥ƒ¾"Xäð>•L_†H©š¦5”——çMn°çÍUúô"ÚN¡óÒþí׉Êùvl¸3D×¥ÓcæjooÈ Ò$të2÷þ8G¹ôÇœ Æén>Rö_¥û·&"º›hÌ…Óã ÷vˆžæñP9¿béAþ>¾ŽâE¸W¬k‹„i?qˆ»çæ\»au¤cÚnÇ‘»7ˆÜ½‘Öë½ÃÍ£aó–¥µ+RÊé8*e¥ø}ÿ¸1)¥®†0Œ\Ÿ)''Ã00 #  !âÑhôŸÏgØPW®\ †B¡ÏÍ/yâ7Ïÿº«CYër¤GIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_stop_1.png0000644000175000017500000000213111273045225026435 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<ÖIDATX…͘=nå6ÇÿCêùÙEàu`à"­—®âÜ H»pŸ"'H½E.°Íæ)’#¤JiØðf 8ðÆ~ÙçÕ‡³)‰’(­ô8K@)é™?ÎügøA"ØÙÙyž$É÷Zë"JðDED 3ßc~*Šâ%ˆ`ooï×Õjõõñññ3­õSñÔ…™quuõp{{û{š¦ßÒb±x~ttôâäääÙ“ÓtÊÅÅÅÃÍÍÍz¹\¾:==ýR)õ3áððp÷úúú«Dk}ÐuÙþþ>–Ëeô‡âÿˆ¯‹¯#¨»»Lú¶øçÎ5h­¡µ>Hb¢>??ÇÙÙY(g àê.ÈmS¯žç V‚o›wíçÀÕ‹ï`MQ÷ADɠϬµ}(ˆ:E€"‘«ëÞ‚6A“ ±R[.,ƒ¡_¥Š°q#,Ë”6¨3PXgÒWVm ¹ºñíX™”¬¹m€r×yÏ5Þ¥xÇU… ],ÛCÛUEDG!@Á@îÂAä•so­ÙPÍè»@ÃÖéZ¤€J ”,È|}6” ëZÄv­ÀÉŒëT,4a™Ÿ U#ú»Tpù6N5  5Óõò®<–×q7«zÕÑ|MìFÜwG£—œ·™`S ¬Töê»jRDjkN‚²pþNyX/ëø+µÞ2 Ð8L˜§dž¦Ø:wUîkEÞ<:ëè–Kh"žD§;Š˜*%.Ée†ZÖI ðzcQp»Ãº3ÕÖ‚2úbª¥Œ¸ìœšFЩþÜX°m VA©˜Uú.ëZ°´˜eýÔáÿ&j FD¾@fN3,Nè™qB¿K(õd@«ÑP³„^M¼©<–. »@ÝüSij*´š›§¬ŸÁ3ƒ:ÊúK®+ã@-ø OÅ—-£–*­à½q±»MÈ,OÑÐ ‹ÔkŸ:ä'FذûÐ3¡\òœ`‡æ±¡<5 z6”uyjêu¤B¸ô°Ûg[*g sÙGB~,OiÆ6tÃP¶ó"bý7yj ÷ ¬y”#ÍÌS³-UZàïÜe’æç@\Fö.PÊß}gî¹ÔíêQó"ÂëÍ@æƒ"R¸~'­¥piÝ2¹ºX¶´Úa}nŒ¾DátÕÞåv·Yí•(5»æ`dzMIDÄtþñËK¨ß~ŽŸ Þú·Îªs`W€%€Ï¦زÕ“0ó=3rd›õ̱5…0>…Œf3ßk"*²,ûfµZínMò•Ëˡõzýã§y’÷)žy~¾QmÊ>Õ#IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/blue_serious/transport_stop_2.png0000644000175000017500000000164211273045225026444 0ustar julianjulian‰PNG  IHDR%%Åž sBIT|dˆ pHYs^^pg¼ˆtEXtSoftwarewww.inkscape.org›î<IDATX…ÍX±nÛ0}'Ê–=IR C×35ýƒþ@× {†~Aç ý,íth?¡S t0â5CP0PÀvÐ6²Ìãu hK¥JŠ›øš'‰Ô=Ý{¤I’ˆÚíöI†gJ©" ñ@&"š™ÇZëwI’\‰ºÝî§^¯÷âàà`[)õPxÆÌ “ÑhôåöööµZ­“ýýýóÃÃÃíG³bý~2ߨ(ŠÞ= ‚à±1aoo¯s}}ýQŸžžâøøØ hÆ@®ÌÌÒw÷g $F2m—Ïò÷Áùk,bQX8Ê~ƒ¾RP*ý:@ @H¶±D]º"€P&E¶/¥5¸|ñ"sY+‹à*màŠ"‹# åŸåü²g¶þ“æÆûÑÔm› Jo(`\]’©ÿòw¢$)ÀŽ ÀfÀ šÝÝÚød^Êß¼Hœö£4°àül!4ÈTß«60Kƒ8«|…Rú|ïÕ”ÀÿH•IÁèÌ‹êBM¡³)Ï”ÀXf§IRú<ïU2\Ý;š‚ÉÒW$t/(-ËÝu—é«Lè~M™»Ü_D•€µè« Š%/ô–Ä}ôÔHè:£) }OeSBeP&3ú:/-£¯ µ„â ºTè –º&ÔTÑT‘hJ Mq–ÖUj‚²ôE ƒU¥¯(c)ôQwß© 9(4hmÖFŸ!i,â*Ô6 O u}½ÔÉl(ïzŠ˜kÁ ùEšÛ‰°+;׬ž>P¦vóÑêœ4‰‹×F… Œ 0º1 ÌÞÍ·£l4#ù¶X¶õeòÛk‚2Ï úçv¹3cýŵóäwÍ $éι`uRj¡ˆèÕ›_?^ øüÁN€ÅÖ?w>àÎ ±sÜ“*ÌEŸþ)ADtÐÅ5,`çP~+å "'’tpxǨœÇRJwþ„ k8)z)¥-ƒZ—iÛ16„Í=\Îæ§ð¯3ìâßôRJªIDÀÓ”Òb†irþ¿EÄtm}ëkø$¶FÄç [—Û¤”^ýÜ3¯¢ˆè8D½©ºø‚ï¶3‚IÙ¤ñ+7›©a—°«†ÝlÚcä9H#b^ÑÅ"b""®FÄ]l(±ý1§Wd Ëf,)®>îã–_º÷°7³YÆ\“Dõ$ÏbJqßWÑõ‰®šox‰XUbïñ$;ô‘ê¿Þh38¬¸)+‚ìÉ>`Û3‚ÅÒw(‰¦ð®  Çp_K‰žaSf³Œã•ØPžGñg؈xˆéÒæPyòsè •ƒQŒ‘÷Áã~¿þµIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/1.png0000644000175000017500000000066211273045225022260 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î</IDATH‰í”½jA…¿»ëâ ®[„­ìÁ"…¥¤‹……MÚX¦H—Gò&ûiÓåb„@^`7?$ ˆD<©”€Êq›à ÃÌp¾™{g®I¢Hy…ºÀðO¥åÀÌNdžÏ’®W¾Ëfgfp¶À§¤Ç5@Q*m[0³Ïó.‹Å;p'éu'‚¤µ¨×ë÷ιY¿ßŸv:IßιÁ¦½yñ»ÈG@hFQÔͲ,ÀÑhD»Ý¾5³10É9󛤇M)Š+Ïóš½^¯´4hµZÄqì§izŒs/À °v%à¸\.φá$i>Ÿ+IU«Õ þ𢓕Jeàœûj4“0 §µZ-õ}ÿb—l}¦fæçÀ‡¤§œ´lUáÿ ð^ô±õŒ^ß®mIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/16.png0000644000175000017500000000075111273045225022345 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<fIDATH‰µÔ±jaàïJÂc“XØØX¹ÒÆ&ä R¥ÐçðÒ§D‘ Ä*`aƒIP´3ˆ@b6 x-v×$›ÝÙùæÀ…™áœ{fÎûGfj7펩ºÄˆhã~àSfî×ff­Â2¶½ÚÀô8]iDÇxm,amœ vD=´°‡uݨ^ED+3OG* #úì"¢¯x‰‡UºÒ/ØÇÜÆc´1_%(58ÎÌg«ø‚£*ÁÄ{™¼ÃI#=¼ÆL¡4¢+È̈8¯mw+¸s˜Â9|–™ßÿ÷¼|ØEÄA…Át¯þTpú·.ß”ìÁ›ºüIŠb rDÌcEw™nâ~Mä0"ŽºÿwÿX8Å!Þ–F48äMÌbÁõù‹ŸØ­ñÒ‹ýëÁˆžã 18Ç&>Œ3tÑ:.":Ão´J#epOñMw¸«¸_ÚüÚ š@ã{ðýR¦NÊ~Y´IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/2.png0000644000175000017500000000065511273045225022263 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<*IDATH‰í”½JÄ@…ϲ™h£¬ÜN°K—°H%Ä÷Øgð´S¦YHaðìƒUA 36îvMGöÂ-†¹s¿™sf†ÆØ aµ{É!ÉCkCVKÅ °ü€ÓÜ^P»Àÿ¡`Œ¹™õlv$ï¬sßó±`½=è”ç]ë§ù·Lƒä¦âHJy¬µš¦90YŠðݱ¤”—Q=eYfŠ¢0I’<»®ûࢯDŸMX“Rî×u-”R³¹0 uUU·®;lú`žD§vHî‘üàRêU1ÖZ¿!ÑUÇMžç¦,K“¦éË`0¸àõ•hÞ•ÜrgAåûþÄó¼»}›ñÀFXo¤³,׃ QIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/32.png0000644000175000017500000000104011273045225022333 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰ÕÖ»jUAàïW#ÞÀBÓxAA Ëê 6yA°ÄJ,ÄJ;Ózé+!àRŠm¼`q5¢Ëâœ$Í9{ï@  ›™½þͺ̚IUÙLÙ²©ì] $é%YHò,É•$i¬ªV=|G ÆýV¸Ž¦q×°ˆ©&\Ú&9I{ijxUukn[+ö5yƒ}¸€I¼ot­¢œÇ)ìÀÇ&@Wp'›]=xŒçXÆ ìntõàjUõ’ìÂS|hlè$WÕîaO“îªI.ajŒîNÌ$Y^àL’‡é=ªªÙ è—ÜÜӘǷ¡µEýÒ–/Ó®ípUõ†Ö¶VÕ¯q¸‘9Hr"Éå$ÇGé4‘³N%™Ä+ÄOL$YÐygNòQìÇu¶~±–Ô¯ œo«êó*ïJ’ÜÁE±ÛßxÝbÓ7«êÉêl¶ü?¬õýÒ¿fÚ¶ö±÷~ìßé—ãÒ€|“10²L“œÆ9¼¬ªù¡YŸç¿Uü2¬H*RU¦IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/4.png0000644000175000017500000000056111273045225022261 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<îIDATH‰íÔ=JA†á§dÅ@PMLLŒÜLð ÀÀÈÀ{x¯ ™x‚… ̼€¹., šø ¶;:ÌþÍ,´ ì]P]oóUwGJIN-eíÞíˆ8Ê@YsiXþ UN"bgJí&VgÔ€”ÒÃOÏògSö-ã¹`£œÔ ãªn};ƒB±…œb —èÏE˜`Ç ^†ñ†'\7µ¨:äÖq`ô ¢‡»‡>,ÖU‹.°‹ý1€tÐ¨ÒÆYt‹W¿½c€•¦Mlã ÷¾‡{޽¦ÍGfCÙßÁå¯/Æ":IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/64.png0000644000175000017500000000101111273045225022336 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<†IDATH‰µÖ½kQðß ˆQ$)«Ø Ú Æ"ÒÆâ¿¡í–‚ÊtÁFíbKQû`R%‰‚1Y}oV—I2˜½paf¸çwÏy÷1‘R2Ê81ÒÕq²iaD\ÁM¬ã]Ji«0¥Ô(q«HE¾B§×V¢]¼À[Ìb±Ж` Sx{¸§+ÿ!Ñ÷¢›U¸Æ&±ƒyôð×1QhKp/±)ë?UhëAÇ#¹£_ÇIÐÃSÜÁ®ªQ¡­DgÐ-ž?ʦï6&ˆˆKµrOp·ÑÁÅ2.¥ôùïšÃ—]D|­ èùcP.w´/{3Lpnø¥Í,—¾u1wœWE9–Q9ɇš“ò)¹³XÂv¹.¥ô!"ªÊr¼Áž×Bß𼩤ƒ,›¼"Ñ5gä·<ÁŸ*wœ7=;x.·÷ —å*ô±‚×ue¶Ã$Z•ß@¢Ÿø‚Sm%:Š`±&›û3m?àÁ(bä0žQ·ÃúÚIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/8.png0000644000175000017500000000070311273045225022263 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<@IDATH‰µÔ±JaÅñß•ˆ…Øh³„€é¾à#XYØH@È3¤X'XHJÁÂJÁRlAl\¢…¯Å®º®«;³ìø`î½ÿáÜùNd¦*5Pét|(Z_1}leæE¡ÆÌ,t0‹$î°\¤¯¬E7¨7!ß#b©[CYÀqfÖ0„E,ô2ó>3á ">÷Т5|©ðWîj™YÇne€&ä°R@7½¸É1þNí(†»Ô€Ì‘}òÞ^ü‰o˜;² ´*Àm$àܦµöi<ûe"„8ø ð o_:pÖù/}ââkÞ·¿{éú’BH!…®M&m©lÚQ]Ó_a‰`©Žü|m*!R ¥4 ËB P±Bk”!%ZT§–è8& B ô}”R¦©•™8:“¹íĸqìtÀŒìÍíýÉç7 ï£tŒ”†6ìLq°”ûîÓÃÖ™;øôöö'îù§ CÏÜ·±RœèðUà£Zë£ÏŸ@„]ÀG€;×Ö7xéµt×ÖW¼ç˜B €è)kÛâÕ±ï¥Ð!¦ea˜&Bʺø©”KD¡aX¤2Y,×MʈØ0 ˆ£ÐIQà†JéäYB ¥!B‚ 5 Žq¬Ð( Ã;;pxÂ½Ý dqbNLDJD§ëܴúñ;ÿç5¥é¡~ ¾üµÖzôæå/ˆ"üWàL*Û>±åê~zåþÛS†RJê`tç£5îÜ«â°â À²l ÃLDa(,ÛA‰Öš R&¨xh­1LÛq1-! š( ࢨ®Ý¥i$âJiTM“ë ) ¨¾/kÃ0BÇ!¾ç% eÙJ›ÎL1Îî<8æ<4ëɹSûÿÈwÿêü'¶ñj¿4Õ ”€¿>­µ^TöYóôçDñà³@»ífç.¸â­÷\õæïqœ”–iT?]¹xe§;û[*ª8R¸™4‰ÔU;W,ÛAFòüê{”Š«³%­†e»Øn  R)Q)•ªO7ŲݪS¨0„”õ''âL¡´F I+â8œ7Ó´JÄ& ‰a:a(Ó§82cÔÍá(ðä·üÙÖÿß«ÂÄŒžÞ¯µþêÏÅ×ç ˆÂ>¼Ï0oíE¯}à•oÿ»G2ù6eJd ŒŽlÜß›ž}]T\Ã8© vÕêAëº)…HF°’ª.f¬¤ˆÖš8Š*Q ¤$•Í#¥A…x¥"*V˜¦…0 l7$º%Žcâ8B)…Šc”R ’†"Ä0¨ÞR"¤Q“l(¥ý aPA)…4L,ÇŠ*ÿÎã©h-@¥8iÝû?¾ìÈîï¿XEA ø<ðA­uðKD±ø7àâ|ûÒ7|à«·ô­ÜX4 QŸ–µ¦£øF‚¹~)N*“r«²?¥@ ÃÀ° Pª®ˆ…H ¦T7¼_iMif­cÜtÓ²ÑZ†!AÅ#Žc ËNfš4ˆ•¢\,>Ò°@Jâ(DÅ*@Hâ8B+…a9H!†iÚHÓ¨ZƒŠÂºˆ´R™â£…ÏΔål­£Gw~ø…·½µj•= ¼Qk}âyDqð  }Ù9Wîxã}ãGétFRHCb˜²;­ép¦¯Ã@Ú¶K*›Æ0 ´R¨("Ž" ÃH”ŠX®0€ù•4’™G1AÅC 1L«:jÅÙ´RXŽ‹í¦« KFràW*HÛq ÿ\)Ieri¢tM„%ߪ¶ZÔ*±Üª¦´W.b˜&†i‰¸4lÛq°ãß+cZ¶ôÚ¿úÌȼ•TŠÆŸûí× ¸ÿE$"ìwµÖ?~^©®×þ ø¸ftÑ5ðý—½é/÷R“Ï|}Ú [ )Œžöô…’8×¹d í=K°l3áTœˆƒ0ð@)ÜtÃHÄ‚a&³$YVÅ”H¤|F„Ÿˆ"Ûfldˆ¶Ž.ür ­5'…•Äz í½tõ.' }*¥qUo(¥°Ý4N*´,…q%÷«ï–RBUÅqŒ7;Kq6Yœ[¶aÚ(­Ð±ÂrœêìTx¥¹Dy¥ÚžyðHîŸc%êÓú[þû¦½wÝôz­bø(ðIý3þlùGàÝn¦mâUï¹é›ë¶\3fHa¨°dõw½éÍo|ÕÒZÙÁÁAØ3²³Öú¦ic;* +n:eÛ‰žÐ)–m# QW5@qÕEÅÈðÏì}ˆ ¶¼”t&CPñØ·û>Þò;¯ X,rç=±ö‚KÐ <¯Là•“Ù !•Íc§Ò5U*ŽUÕêJ”†&‹T„W,%`ó¢K©˜Ð÷‘Rb9. ñ+‰uf»©ðÐtÛM˜Gj<9²ë{=w忼Í/Owÿ¤µ~Ï™ø-¼;ß±üØ;þúþ\›€!MYšI-ëïÎ jŸžžŽ=u?‡÷݇iZØŽaÐ Ûu°m )AhMX)Vè8BÇ0¤À)ÀÓ€À/31|€Õ«V`¯4M.ŸÇFý½ù|žã‡÷ñèöGJAÊu ¥ÄrþU@‹·*g…H˜ @ÅŠ¨V|@$¦¹iÕ ­R8©4†eG!n*C*“­­³ÛgoX¿$ØTãáY›^3rý¿ïeÛ–Þ]åésDqð·Nºeòòo´vôÆsVyã…%=í- ë TXazb€T&ƒíXH!0-»Î ŠÐ1¦!1‡B)¢J!4Bkž~b×¼üŸ®Ã‘{:Ši™X–ÙÐ^¯4ËÄè`ªià¦RX¶…ú*¥"¡_©3·f@‘ÌŠÐóñæf©”‹žG¥TD©­UÝ|0¨ „À0ýRóH)qR)T‰.sìwVv†kkm˵/­¼ú¿õ/vª0üm•·Ï!ÄFàkÒ°‚W¿÷Ÿ¾ÚÑ»º’,òkÊ1µ»¶;xs{[kC=Ã0Èd2ø^Ø–‰aHlÛÆ²ÌúèhLÓÀ0’aJP1¡W"•ª†éØX®Ia¹N:M…bEkéu ÛÕÚsvé¥ïü—¥aÀת<þÙ€!zïƒp/¿þ/¾¹zÃ+&Œ‘²uzmÇô7cæóùEloo' CJÓ“À0D"¤@J’o¡1 i$3Æ4¶kaH@EX†drâ$ù´dÝÚd •ËÅêz1§ÁƒÐ/G~" åØdryR™ :ŽP*‘ïQÛqÉ ¤sùä“Í“-´à¤’5Šc¢0 ‚º9n¹6¦m! £>ó ÓD:ªº¡•+.¸æäE×ýù×@¸À÷«¼>= B ¸è;wÛ[îØzͪ:Q¥ˆ–Œê<»}ú÷#ß³Q>ÍéëëÃ÷}ʳ“¨(¬zb“™‘€RÕ2W†QeœaN§±-ËD¾GgG{ý¹ººntœø°š“&ò}‚ÀK<\„ÛIá¦Óhã{%´R¦ecYŽë’Êdq3iœt 'Æ´sÛ/—˜›¯šËй™ÉdÁèùèS|ÅZkTxžÜ°,¸âÔÖm|ÅûŸ^û¢7Ýô·VyÞàíÀ–žUí¼ú÷>÷PÍ!(…R"WfÞùÃI%Œ«ù¡ÒÒ¥Kñ}Ÿ¹™ñÄ·$À²M )«Ê †!«ß‰È2 °,ƒt:…eHÑœáR€iU1r*9®‹ø^ ¿RFÇ*™YÒH\ôqŒR‰ïPh0-Ó±’Î’@­¢ˆÀ«PœžÆ+Í!„œ_ƒ„¥Ùi”RDA¸`(@䇤²y,ǥÞ}Õú%ÁæSÛø’·ßt_÷Y[% U¿½) BøS!ðª·öÎjÄHTµèk ×G¾çš–…_ñhkÉ5eH{{;¦iRš›J,)0 ‰i›Õa¢†ëD¯HêºÄ¶M\ׯ4šË$)®›Â¨®â¤pÜÄ]¯âˆ8 @«ª¯¾Ó41ŒdM"ÍĪbEÇDaLèùg¦)ÎNEN*C¾µƒ|[;…Žnl'EP)ãg‰£(1Ñ•"ªøh­2OkM·=þÆþ¶hÙ©í¼â­Ÿ½CH#þ´Ê{š*¿ ¬î;{Ûƒýç«<ªÅzD›3÷&^Ú¹™Iz:çÅÉþýûY³f –eQ(°m›ri–0ô°m‹RqŽ™é †Ø¦¤³³“8ô™!Ž# ‘Ó××Gà{ÌÌL‘r;:1;;ËøØ(¦i4UêQ±ïñ‡)ÍM!¤ÍÒegc9)b­ÌÇ{…ipüð“xs£(¥0ݽË×aï'+þÀgvz„Ä ff&èèîcøØS„Þ˜@TC‚Ñ‘”&#t˜¸û­KV#ÐâìÖéwLv|´aàö[ì]sé#COß{Y•÷_¯R]X]ö†¿Ø^ ºUÁHfŠ +y˲A@Å+ÓuÖ¼…µ}ûvºººèèè ›ÍbY•Òl²B}ŽÜOWŠl6 ˜<úØãôt_Eè{<³œÍäÄGƒ ã'YÒÛêU«êïØ¶mË–-㙘œ_¤ÔµÖø¾ÏÅ›ÎfåÊ•z· D² 6*çÕókDA™B!IΨT*LLL055UQww7¾ïã•?OmE[£™é ví|€Ù™éùÐl•v=öÃCCÍÚ$biÇ#÷3;;Ýp}ùòå\tÑE ×.»ì2<µ“éñaК ð‘jŽ.Xôܶ¶6^|ùEìºïßBP©x„A£ç|y_;©T €cÇŽ!tÈØ±Ç¸rÛE‹žÐÛÛKw{š"ãèt³2½ö£wƒP$þB¤b pq{ÿyû–¬¹tjAjÚ‚_ÚÑJ% Ô B¯>ŠÅd}022ŸÂÔßß_¤Èi ¬t›Ý?CúOúà2™ ïz×»°m»¡LOO™L†£ûQZsrè8W\¶µ©u°eËâ`†vRžª/k´~ýúúïcÇŽáº.]]´µµ¶—\r 'ž¦\ßìþ’5—M¶÷Ÿ·¸X±DWt.ßt8éé|Ÿk?”ïË( }( qíy¥Z,1 ƒÑÑùpr?A†R™$nÑŒ ËjzýY꿤LŒ„Sɲ,2™ Sà <;ÊʳÎ:íÓé4«W¯føè”Ò ƒeíÚµlÛ¶­þ÷èè(A°zž{øá‡ùÄ'>Á£>Z¿¶téRlÛÆ,=Ýte x—Kàr€¥ç¼ôX5ьڧúC ËÔ¶ã‚ÖÌÍLÑÖ:/Û§¦¦0 ƒ©©yÒÒÒ‚mÛ”æf’èœÑèwª‘Öó#7N×ôy:cÝ* „Ïà‰ƒrÖ‚A0==͉±£Í›7359 ÚDzÝúuÃ0êu+• år™ èêšWÖwÜqApË-·P®ê8Û¶±m›¸4ܺ6.=ç¥Çª?¯0BÈhņWÍË­5ZTs@…±2S.¦i36r‚þ¾ù):22‚ã8”+ó¹c…B˲(ÍMWãÓÍR.•ª™#Ç1ïÙÃúuëhiIŒ‡ááa>Ìððpµ‰u”R<ñÄtvvÒÓÓS¿žËådèÄa.Ú´¦~}ff†OúÓÌÍÍñÞ÷¾·.Žzzz°m›¹©!šŒ={ö099‰ïûÄqLºªS*• Aà8ÙöU|ï¶qìèA&ÆÇˆ¢Û.¦ U¶c™^Ò]±áU#BÈHkµÑ:L'S4LG-HÇ\ž©µ°Ý¢VÊ5m›XÇt¶ÏŠÑÑQlÛ&Š’PªeY¤R)\×¥TœÆ÷+(ŸÚ†:ã›aå¦2œšÄ2²eË|ðA~ò“Ÿà8ù|~Q½={öðÿðtwwóḮO\×MbQÀ’Þîzù‡~˜r¹L>ŸçÎßU¤­­ Çq˜›ÂMÞqüøqn¾ùæÄkmuŸ€ã8´´´011ÁÆ­—à‡1…n¯\BH'ݦD<çÒÃt”édŠae®C–“)AUBéùÜØÚ'4 ëÉ‘WµãããX–…aÚuÓ ŸÏ>³ST¼JS@LÛ­f‚4R*•"›k©Gk”ÍfYsö¹œ¿éRÒéFOÁ}÷ÝG{{;ÅR¹AŸ™¦Yõ/äróužzê)²Ù,™|;‘ÈT-*˲°m› R\4vìØmÛ -¬ÙðÚ{ÖàU%ƒ‚÷¼ç=¬[·ŽÁC»(§)t®`Åy/ç¬ó_MϪK£Èêžå4TÅ CÓN{µõ³Ö5KWû±9ŽTJ%Ê3 ëƒb±˜ÄÒ…@z{{ ‚¯<»ÈZ©‘F4×BbXnS=‘v3,Yº&±ÐÐÄĦiÒѳ‚ÙÙù~×Ñ:ª[†µò†akía133ŸKJ¥@«E€9r„T*E*×…i·‘ïXÉÔô| Vkk+ï|ç;¹á¯ã‚'íÆtrHÓ Žt‘3Pƒ‚f¢ œª3©63d‹—9¦â8ñAÕmñ ð«¹Kn¦µýýýT*¢8FÈæJ]Å‹uAýž–MMbi»(-+¨Jq×Gx:ÓŠ„‹êEaPWÊQUuW¾½—X‹z?`^ÌéS)•JH)Iå:‘†A.[àÈÑÅ %¹\Žm—½ˆ·]Göß‹Ö0%ûnoÞÓjû f$0ú¥úÐIâʵd ­”B}c°ÈfëØÕuFTŠãá|z{{‰ã˜rqã4f¯ÖºéÑ@¬tÓÙ#M ËÍ4€†a}]b»iÂp±¡ µÆ¬¦õÔ3l¾ËɆó Ú¶]wµ×H)U/c˜.q"¤dbÆ«[T§ROO—\x6÷ÞÍÁ1÷Œ¹ÃU ÆM`<òK+ãÈ—†é¨äåh•ä‰T±"Šä¯Dgû¼+“Éð±}¬Þ¹…Ø––Ç¡47M¦ÐM3 ££‰I’UšOÄÐIžU•28•mi*ê^©¥HÃÂtœù<-йù6„aX/“Ê´Ê·bÙAðØ®=l»ì’¦íݼy3?üáÉZ÷l*æ¯ÜÕ¬Lù2òKY`¿vk­Ì£ßÞÓP(ÉxQJk+¡Ð¯R¦«£1l[³8Nu‡×LßrqšX5×!Ź٦ÌÓZW¡“ÒšX52káoÃl¾“MH£ÎÐ$ ©–È*Ð*®Ï¿šU"ùÁ²pæÚ:qS ä§oì:Äž½Í'@kk+…B”÷Ô¢`UŽ>~{ÖÊvKà^€ûïZÞÈ”­´@•f'é<Ó‘eY¤Ói¼Ò A¥q‹”I2uÅØMVë*Ž)Î5ÏWŽ¢ˆ0Šêé:‹H4w‹€¬‹˲ê€ÌNŽã—çÜ.A$ÛâF‘UŸUr>-(Ž"z–¬ãÖîäsŸû3ð+I%šT6’áÁ£”Š%6]ù&=ìµï»ýŽÔ­„ZÛpjQPdèÀýmûÎÖZÕ†À'AËGþýã/nÖÉX¡†¦Ìr¹ò´u‡`3ªÅ×àÒС­[·’ÍféÈ[ôõõ-ª'„ÄÉäLÛB¡@¥Rarr'Ç´šëŠÀ÷›ÚÒ±¢M›6Q.—™ž8I_O{Ý<77·ÀâjbI:—ÇN¥:ÄÐpÂ\¾©‡¹©ÁñûwÿùXæ•_924WsR©T’§÷Ôç%<×ø$̇p¿ì9üÈæÑ£;Òµb󢧯([[2u4”RìÝ»·Á\X·n]52˜ÄE IáYhç·µµñ‘|¤A¹.¤Ä±)‰¢ù:çž{.^x!žâ•˧!Ò²šÞIe²96ÈÚjZÑÆÙ±c³Å“¼âª·ÖËQ©TH¥RM¢ˆÃd#iÕ¼çMFMüÝ}ßßùÖK‹©+îη¦ëJ©X,ÖŒ†7ztgaäð#›½$$€h­µâoÐêk}çcW^ûÁïßzjCJSîÒ5]ußÃÌÌ _úÒ—F~©Tâ†n`ëÖ­óñõ¹iJ¥F[}¡U³¨ÓÕO• ¼\.Ç»Þõ.þí–o11:@Pinû§2ùE.€L:ËÁCÇë[–Å7Þ˜l]`!>ýôÓÉ߆]ñc9¬8¥mὃËþ„wlžýíšëÿ•/»´ïæ›oî³g&R/íê‰ ÃÃÃØ¶ME˜ >¤‡¾ó±+I¬«¿©%a/äÊ7xࢉÁ'îjï;·a©_žuû{—ÖHÍe’ÏçiíYæf¦Ÿær9,Ë"ŽcNŽMp^îܹ“Í›3eâ(¢R*2YžZTÞ¶Lžzävò­=‹îUÖô:Àœ§˜šš¢µ51vDuŸÊBÚµkÙl–HäÅ^p ÉôKr”Æ+…‘“£qgg§pÎ9çð¡})å‹::uSSS8Žƒ’Ùºä™|";|à‹€ƒ$¼L!­u |J«ØÚþ¯ï¿æÔÎdäl[{[K}ÎÎΆ!†ém]N®mí½k˜š™ÇQJI6›Å4áø‰áE šœœä¶Ûn[t=ÙSh39µx¯¾S]Ä%Í]LIžÔbP‚0ÀtZÙµûô æ&&&RX½N[°JùžõÓî~º!Þ\Kö¨Ñ¡C‡(U·Ü…ÎÒÚõíÿúþk´Š-àSzAgNÛ_=ydÇ–Ÿ~ùÆm o´8^×B kll Ó41­$%_ki9LN6ƺk;9:Ù Gz衆X|’QÈl)¨›ª5r]7qÛŸf%?;5ÞÜÊŠ"ZÚ:yxçþ“t!Ýzë­8ŽƒÖ¨RzÓÏ܃žiYâ?öäÉgúðÞ©5wÝu™LYòÝU'~úå·<²c É9+_^XGžò€¸|úÁ¯¿z÷>[ÏàÎXAÇB÷u-bÚó±{)^¥QÉ×RKýÝ9ï9˜ššâž{î©§t%ñ#™9öìÝ×pÇ©»9NãA>ƒÈ’ÒÀÉõñ[ïHLè´}ûv8€ëº„V×ã±ÕqFïlFÍ~ëÖ;N5­ ÜuÿIDATn ‰áʶ.¯ë¢‘O‘²•Ò*¼çѳ|¥b‰+_´žL&Ím·Ý†çy„aHOßJ¢ LxLOOÓÙ³Œž³.AÅ1ÃÇ÷qé–µô÷/a``€íÛ·S.—1ì]½øå)¢°ÂÌÌ Ùl–ΕWèòäaLCSš9)J¥dÓM÷ŠMsm+.9ækgäÀS{+úÀÖ—]yq·iš<ôÐC<ùä“ 42˜l}ýgBgédtè«—÷u˜Kpr5*È$ïȇ'{?ð‘…üš:zÏùm‡®Ée.íêê"vìØÁîÝ»“…´4ý©¶ë?sà©=ö¾ð¶÷©8TÀeZëÝ‹xºUÝÃðm;U˜zÝŸþøs­=g—:ÆnþÏfÜL^íïÿë_G]ñ‚ŸÔPù”ó²œLëØ¹WüÞ/ºîÏŸóÑwBhyiÏÑOžºžqR½wzù'šWõBÓ¯ÕyY 9åD¹LË’ /ÿÃ;.xÙŸí3Vw‡ëÛƒïX˜œf»)ýÔÜŠ¿›,“¿p#ŸGúµ=QnÑÃN9sÑͶŸ\rö¶Ýç^ùîÇûÖ^1q¦ºÛVN¿·29Pß+`Ù.'ÂeŸ˜²©Þ¯Š~£Î\\ôÐ&§’fZûŽ÷¯»òñó_ö¾Ç;úÏ_4¥¯X>ò±òÌxÀ´lfþïìI?ô¼7î9Ðoü©¤‹~šs{óg^vîU»×_þŽ'k°åm•5½ÖÐÛ…@E×ögïþ¥5ì ôÿå¹½M_tš“­-';“mëlé^3ع|ÓÀ²ó^>رô‚_‰ÿw²õi_ú3Î~7Ìl®µ°Ð½z°Ðµj,•ëðR¹N/]è.g[û¼\ûrïg™×Qàɹ‰c©âÔ`ªüðCuBBB»<<ÏcÛ¶mØ¿? `³Ù@)E\\ €É“'#333¤ð-[¶`ÆŒ^‡Ãñ‰ÏçÛ²‘„(èš’¾Õ÷–Ä2ˆÑ*³œ!F–‰€((%n‘J.^¢N'/I.Þ¦äkõ½9¹TSJ¥ðÔE‡ DB”f³yáý÷ߟòúë¯+ÚÞ·Z­X¸p!V¯^ §ÓÙ¡€¼¼<|øá‡0›ÍAï×ÔÔ ;;ÛWYYù“ßï¯Ð'V#Ë’’é¥tQ‚V)#’FÁtrBõJQ00¨eÄ `X£ZÆUŒÜ ”±z%‚^Á@.#ð ¼…·ù3 I.^Üœpó’èæ%©é“zx v¿HjÜ%ð+eL¥´Èî§»Iú–Rzºs7qÚ–hB1›Í¯Î;·ûóÏ?/VhóæÍÈÍÍ Œ3YYY0›Í¨®®ÆÏ?ÿŒ½{÷¶ä2döíÛ¥RÙrME¦¢¢"®ª²"¥¬´$éÙ'È’ˆËI×(û[”ŠÞfúÄ*£dºò|‚GPbPbãñK¥Ÿ[{Òá­öD*’y>°º3u¶#:&&æ¦k®¹ææõë׫CÚ¼y3žzê),X°·Ür T*U»q¥´*l6¸€hBHr\\Ük………êP¯:x½^¨Õj4§Cc̘1رcàŽ;îÐÎyø¡L{C}boËö0+ˆ¬MñŸ·mÅ®oÖà¹zTº|_ìÁÞ‚3vŠÒz/<¼ˆ„ø$$gÀ”¥Î¥ÖµFט´Z¨5:PI‚Çí‚Ïë‚×ã‚ßÙÎcƒÏeƒßí€Ïí„Çã‚×ã†Ûãã`VË1¯—?X‹OþY (t’=“®Â ÉéHJÉ€F‘ܶ  „€!CÓøÙüwC} ŽÄîC;ñÁî]¨ª,dzÙz<8ÔYSƒïl”Íÿ±æJBˆ‘Rjª ÍMQëõú÷+++U:®SÔ[¶l‘O¼þº¡,ƒÄÌx%»jÙ¤_ß¾Aóú ªˆr +ÄoÅÕ˜2cN—ÛÐŒHˆ&`˜Æ¿ !°Õ[ñÁ›O¢èð|•gBŸØÆþ妷]èšF)ý!š6´6NY¹¹¹ôbüÞ»ï¦æM¹qbßXyrnoüñ{ïIr…3€­g9Sû£ß«qóÔé(?W„θ:B´µÅÆÅã™%ã–‡_ÂK{¼-×ÇõÔÆę̀hå·­R©’‡Þ¾W‹v»]3랻Ǿ°`îÐQÝdŠþs÷]waÚ´iAó{ GjEô: –ÄT€Z­†^§‡×Óñ°ñ„)Ó°ýœõÞFAvІÑ*˜ñÑÖÓB´^¯OëÝ»wǽ[8qâxÆ´[óÆŸÚº6vLwÜbÔãé§ŸÆäÉ“C–)µ‹ˆO΀Z­½àzbb umJd A¿^x…¬\œ 7á«`p‚^^ê­¸¢ !1qqqÑ–;r¸ßë _¤,?¤H‰‘“øøx¼öÚkÈÊÊ Y†Rà¬3KRZ»{£>¯»Sm¹ȼr,XueX†0„e˜b …è@ P}öìÙ¨ñëÁ—•—žéÇî+›ÆkóçÏGRRR‡åì~Jµ Eûör¹²c+&X»r)ž¼?Ë/€½¡6¢öRJñíºUxìO±ìµ¨³†¸, ¿Zw6Æ(™€¨¼j-Ã;»Ý~¶¨¨HÂ…d‡Ø·wÏ圽6u ÆÍÒ€ÐjµHOO[ÖÁIÐ胷ÕïóC†è¿-šƒ½?oB@àqúä!Tœ+ÆÂeÿ+÷ï¯=m›×‚ã|8uü JÏœÄß>ù¶Ã2IÉi¨rð% C`TËijÁ :¬À&´*IRÙúõë}‘<]PгצŽJS³RÉ P´s…4zcÐ{ÏeƒÎþ[p¶¸‡B¡ÀŒ3 øì¨*/ ] ÉìÇù`0ðÜsÏA­ (+*hÉjtoA…«Q«cU2‚Îj4€S§OŸNŸ>>}útXHÙ™Ó…ƒÆ¦)Ùæq§\ÞH ˲–m†§HÖŸ€°, QìØMÍÈudæÌ™X¾|96lÜÎV®LÖØ¾éÓ§cÑ¢E‘=0µï'ÚÂh0¢Þ[‡4ƒ­ŒA”D·h4¥”r÷í[o½Å‡+tâØÑ~©12¶ÙGžžŽ5kÖ`Íš5x÷Ýw#ìã%(ÕÁÝ)r¹¡ãfÜûèˈKHƾ}ûqâÄI”U4„| Zkéý-Bl|6÷~øñ':V•Z$ç…ˆ1Å¡Þ×øã[´¬%ü~ÿ¦üü|×®]»Bp»ÝªÊŠò^ýãä-žA`·Ûa·ÛápD)…Œ î7ã¦)Spü—ípÚëÃ=ã)uÞÆh‘I-C¯4ìñ{L3ÆÈ‹UJÙíáÊG¼€†2Ì£Û=óŠù„I“‘Öoª#¼¼‹I…x‹ ¬Œq®Â$5ƒqJH’„òòr””” ¸ðJŠÎ ÂZM%<.• ‰JÐiu0™ÍèÙ#—ŠþýûƒeYlß±ßoÙ›fü¹k,¡ýÐ .ôI†iÿ·µºÏ݃_ï‰EWDN~%Žÿ8g+ܘpïVWu¥ÝÉ?jJd³‹Fˆ½u¢{n&1=¾r5Õ‰6Ø‚QÙƒáNLF}µƒ à¾â<Þú|7Ô¶J‰ÉFzôrû+À÷Ñã€MăO¾ðû÷žþò¡ÌI7ÏÙ±ƒ2…Rº½ù^X¢ !z“Añ㸉}V¼:z]ÇΞÖ0Ç(à(bÛ\OÔ±°5X#ª#£wæ—̬l¼ôØm0 n·6[´º(J(U*È*(•*ÈX9ì µh¨·‚aÑ­[7¤¦¤àîi7àËO—C­VãÝ÷ÞCBJ ½jtèFP€óû nš s" J4Œ–€íŸ]k¸úöÖB†5/wëhBH’1F±ã¹‡2ÓæÍuô% R›Ú° •$H’&Ä4< Žy/ýë>~ûöî†Éd‚ÇãÏçƒßï‡ßï‡Ïçƒ$IèÖ­, &8)ùùùX¼äm¼ñÏuaårœj¶‘.@¡”‡n÷€^F¬^2Ò4ãñ][!—QJÝ!‰&„ô3ÆÈ·½¿è*Ëԉݣ^ÙXtÖ§‹og6š§WÂÞP s\T,ÀU£sár4`ô˜üëóÏpÙe—µ,ŽŸ¬\‰E/¿†×Þ]‡¸ø¤ÇÐ@“F7Í‹‚Øñò¼Ic“ɬ[{%|ðÅ™žúSBFš ŠÝß¼76±3$À‚W~Ás#ÌP´]%Ó„n1 Øêj:S5`üwbÊÝO`â¤ÉøËó/@„ð…œ9sSònÆ›K–âÕ&’ÃðûýP7é 'R/´ó/ýý„&ü¹‡2Õ C!„Ú­TÈnM²¨7íúüzss§ (¥˜ó—}ðV¹q÷àöN©ftÓ2hèÑpå¨ X¼b ŽV"£g/üù‘G±cÇŽv¾ìªª*äççãž™Âøë&¢wÖx¼µâ{˜bã#–Åù}Ð4uO\€‚Û–­*øêò¼o]Nwp—®Ù¨Äý·õRjÕìœ ˆÖkå÷uOÖ~x諉†þ½B“ v·=¼Ž3õØ05LÓì-EC]Ä‘ Pku˜õè+xù½M€>ϼø:“º!Î’€n)©HNIÃèœkñéÚïÐ+ût;ÆåN a·u6qœ*¦ñ'RÀ]gãn/-w¿’s×OÎPš}Ëõi*½–Íi1 „Á‰qª%ûò'ÌÆ¨¼ ”âóoJñ—%‡ñÈP¹!1¬/#E#¢ØZ•œŽ`4ÇcÜ Ó1î†é-×’(B¡Tµ¬@ŠÂ3ÚŽóÃioK$ø¼¼I’8pº…7bÊk6l-¿.ïºö‘š¾1àx© „Q/߸vÙè¨IÞq ó_þ‰2Š­·'£»1²˜a7= §õ\T²¢ËÊQQQ]uçŠQq¶gKNá|Y\;ü>xžÐ8 W*•$üÈ/ðÂ/ˆðB5U£ÑL‘$‰Q(”‡×ÿtÞ™w]Z»ØœÙ¨'ˆFÌÅò¹÷ô³Œ¼\.œNÎr8êÜøuû¿±´ ƒ‡Æ£r1èŠQ˃¿M…'⻄ã‡v!3s ¦Lºݺuë°½ ÃDô#Z­Vˆ.Ð3UTø¾#u`ìbÕJÙÌ{nî©`#š4Ø9Œœö=½Ò$#ÇîM‡<ÄÐ-¦np ß•cÐoÌŒîÕ ÷dd Gˆm;o I’ @Kr:غu+6l\‹U˞ǯ¬@jÆï‹)+—½€£û·àšœ1È]ðDÄQúfB:Lååå~1 ô¹!'xþ§½Õžz;ÿ«Õ°?0­wDÞš¹¯t•UzÖÖT#ïÄ0“1+1ò5‘çí~ìùô_!giáÌ«Ñh0aÂŒ?Û·oÇÓ fàî?/ÂU£'¢ÎZ‰7Ÿž‰¤x3þ<çáNçÏŸ îo"ñ±í¹p{|¾±,àkF©.X¦`X÷Ã9™Ÿ°ùÄÜq«ÎÚU…v ] — Qk:Mr3(¥!Svv6V¯ú+–>ƒÚšr¼<ïv ¿b0nšrcÔ$7#œ6BPUU¥ž߀ Ô{ŸŸæ©DWSJí ßÇÙ&Öôd` ¥t¯Í'^{íê³ »Ï{Ö+³óÈèžÕC¶E¸¥III¸ëÎéxó©?!½{2²²†tZ^8mn¾ïpØ™)ãÚ› ž±øƒß|·ð*Ð@p×ÔG¶lý»cŒ³r­^+@‰Í'޽a͹ŠÙ«<.ôT´Ô& ½Gψd„BGÚÜúGHKME}m9&MœÐ%y@Ç 4NËõZ9‘ÉÚ¿©«¾.E‰nlÞXÄ8\üâÇ_ÿ5¢Uß½ÓcpjódÜ»ú>fÐËËbtòûì~iì'o÷zçŒó³Ž l—9dôÐéŽD››ÓÉ“'Ñ##£ÓæˆÜ>9r:^ß…A’(^|瘫ÁÁ¿Ð|áiõ±Ûé¯~<Qð0Ö¤Äkg©ÎmÏ‹Ypÿ€S“4Y%;Ã-bÕëŽÿ¨Ì¹¥Ô©Um¥½zGúœA‰6@II "Ÿ„B8Ûìr¹ðùgŸ¡¯ÁèsÝwØ{ø÷eÃë~8Gý¼¸‡RZÜR_ãŠ!Ò;>VõËþ/'ÒS¢ßÃr¦Ì‰µßŸ>ú²Ècsòµ¢/àczäõ‘Ý—eT/>,bÁ»ù>|x§Z’¤ †umSëaß´©·âòaWbÈÎÛg†aZ&&„8pµ55ÇÁëõ¢¬¬ ÷Ür þòÈ#øåØ1Üþðlì_›ƒîÉ:ô½þkÛéRW¥ôhs-Qp9ËL6«·¬sYßèO.hÆ3oÆkËOÂd0xY–%¯W©R)Éo§ H°ýä‘@ʼnn®?·Ý~ÒÒ¯ †aZf„{öìAYa!îÌ˃V£V­†N«EÖÀP´ }}úÕWøbÃr<ñ§¸ûÉ=»ëüW·®³í†Î«M1Š _¿7ÆØé²Õté'çÈÊ·ßEÖÀ€Ö¬ŸûmÉérEkƒŽˆn;‰É1‚Î_°€tew™L&kÑè½{÷ÂIJXôøã–áݳGP­JtU×ùs(¥¿¶¾AwI)Ýesò£'?øsÝúŸ"³ÙÍØº·‹?,Áö/¿i!V®[çP©Õ‘ ¸C Rû B €®nákm‹k­V”U„÷2*är˜ Éå ljK2|‘ãq»K6óÉ=•䟉h€íö¸cÞ.ºbÉ2bj³5).N) ‚îºñãñÐàã+"©2b´&½¢¢J¥ò¢mPt¹\8rø0>|ýõˆò Ñëñž v/èˆRZFÉZðæáG liKž¼\­R†ŽhýkS3'F ÚÎ<|ùÏjÝÊÊËQZ^ŽÕkÖàØ±cx{éÒˆéøŽ= “ÉÕ>œ`hÖf†aÀñ<8Žƒ2Ì–J)Ü^/t÷QÈQJkíN~Ègß”­0ñçáßB¯ì\úI¡8{úÌ6X§Õ"³o_Ü8n^œ;»vîì°Ñ‘¢-é°X,]:Ô¤õøùÌ™3Hˆ‹ƒ,‚1ùÎ gÙc”R.ØýyJ©ßæà*-÷LɹóGëKËŽqb›èïéR'*­>Ù¬Ûn ÛQqÛœ9xê™ oW¨6DlŸKJJhbbbçg*MhÖh‡Ã1W]mˆ- ­ñU«lõ6ÛâP÷#zÅ(¥?;ÜBï¿­*Ø00w£ãÇÝ¿¿ï}~šï×{€‰ÃH&“A&“aĈ‘ˆ¤]mmt 66¶Ëf£)))Øqà@Ø2UV+vþò‹`c¨<7ŠRêl°sS Kîxl×þÁ7n´mÛWµß£“rÆE¿š”„âââð—±FÛívîŒph=âØ¼i^?¿ÃüûAöÍ7ÛŽ{ £#æ¢~Í(¥û '„dßúÈŽ¥.w`×ï„'ÿ}åJ…#GŽŒVl¨¶\|>i !X,|º~=!6htÚß½¡¼ `Å_½óNÃåº¾í¢Æ¶è´=£”îp%!$û+Wnº3/Ϙ&<ÇÊ/F‹¢HÔØÓŽÐZ£oŸ>{öìÁ›}„ÓgÎÀl0À ×ã\e%Ün7UÈå;.×­Á–é¶E—;JéFó@v^ÞK_xAwknnPعïñ¾Ù°¡«"›å^Š‹‹¡V«Ã­ìŠ 2™ 999¸öÚkÁ²,l6DQDrr2¦M›æq¸\×DZ×EÙõãõzóíNgÖ£ »ýÿþÏ]TVÖ.Ïþ#GðÄüùØjÖÑhóñãÇa6›»t*d8]||´@0†¢\쯙|qlÊ´(>< «¾?vìÚí–ì¢^êî¨RbãJd¶a-ù–ÍõÚIWÆ&íq%~ÖéªoëînÓ¿’> <Ö !-Õï!° J‰V&ÑÞŒ­˜¨›|C¤züõ%»ø&ð ÏçûðóvFŸ€g©~?VÎFÑuËBÓuÌ|ÛìEËe1º;ÈE£ÂSY³42aÊÒ#Ž‡Ô‡Jq( K);Jvñϸ:ó5]õý[ƒùÝíÆœ•ÞÖ€‘JQÊd)e²ÍÃà ¡ ªBô7E gDeÒ¶ènnªÈes†ñŠ”²©do*ÙÅ…»¹cÒnãÀ’]œ’éî:ÈÎö"\ÏݱQu¡ª(jEUô‹©vt¯›¦…c[¿/m]ÌŒG«ž‚‰v²÷;B߉NšÚèõê÷áZò-»«_Ãi·¥³JvñêæWŸ½ÞÊç@J=G¨*ª×O)Ùƒ],â˜&Òq0 V¬yŸBîmúR½(Âf|UE¢/E:f|õ8Æ/¾œÏ|4N©ˆpL4ic{ýøÇO à jê[ÀÀŸtÕ×½[:X¦Ýƹޞ ­\3—G(Çvp,=C¯›†·f¥D7v²«˜Gõz± ƒt¡•³Ž¬;‚´KnqŠH;Œ´½H»À£ëž¤ÇëCJWÌU‡Èü}1 “D² O0t€?8Àëõþ¢dŸÃÕ—ÿ§«¾y&{‡ !f(‚·¤$Ì'¼„BS5ŒÆÝ¡ «Lö‡~y!ª> éÛRŠäºßcñ¹/3ÜJ#\… ·«MŽŽpéHÇqœŠÝÈ[š¦>dÖ¹£=½3œçH*—-ñ ë„ª¡(*Š¢¹EÕŠŠªhˆò¹¢¨å£{O¸î>£ö_W·_ï¶»½•s¾0Åã  »„t¶ŸŸvd€ÆRã&ÏD—HGnÿ[:å"KÀQ¤ã(î߃®z~û¹{ÿí÷X·¡uÌì÷ÎÌÔÏÖˆE}¨Uó¢i:ê@tîÑÑ4ïè÷ÊE+_wët®é¼øä„£ãËb;÷¹% •˜=ÍDZg|)m¤ãà8öÀßýCýKiã8Nù~ùº´Ýß º>üGÚ$ú²¬Û0öðËÎ,¼¿Á¢ºÒ D‚hX#þ×Ó4‰4_ŘÀI§Ìv‰ ½‡l6O0¨ÿSïMgòôô&Iô¦èI¤éM¤éMdú‹µµ©G¥±~¿3ת >¿ÂÜKbza»é÷©V8è‘ш®D#~-õˆEƒÄ¢!âñ0ññб˜u/zÕ:ŽXZ¢{GÛáå°}½<ùæ›~äa#ê²m‡žÞ>º»ûèéIÐÓÓGwO’žÞ$==Iý@õ¥1Í¡©Åp8„a†É‚… Þ×<Ù•V®ø‡±Ú½ËnŒâu`)ðp/P].ã€j!¨Ñ4µ®2ŸÛ›èô†6LQ‘px‰30j)åã£=P²‹§7½üôƒ¹Î2¹<‰t†¾L–T6G^Ó±#•tuuÓÕÙIOOoîæ­ëéééÅql674s÷mß# Ž*¶ý%‘èãë×üçßl ²ªŠšÚƯaê”Tøb±‘HdHEû-^ÌÛ«>✠¯bÖn67§øÖîâÞŸá3'žLhÒT À b¤S”2) [6Òð·‡øø±?’êîFUU*'M¦n¿¥T/>„ÐŒ9è•(^/H‰æ÷!TEó …#ØÙ,k×mÄçõ2©®–†Öjì÷ùóI8°W„×ó€§?lk¾ÒÊåÎûÃ,)I{ \W•t2…eÛx½^Bá^¯wDT¡iݽ=445a–Jø‚>U¥fÖ<¤”ÄfÌ#Ù¼§X Ó°ÏG¾§ é8˜ùùæ:^}O$ÎÄCŽÂ âŸ1¹çl²É>rmMXÉ´@=ZA)™@Ú6뉄‚Ìœ=‹Ç_xUžqÚ™¯þõ/ý—¸—ûzÊPÉ.ÎÌ6mž`[Ã'<±qã®øü>|~ŽãËåHõ%ªB0Äç÷¡(C…¢¾~.Ò±ysÅÊíµ á2kRJŒ½’él£oí{Ã@ÕuÒ[7c2•@UÕ!¿ Ç+Ç+0 ƒtÃ:J™$f6ÃæÆ­dry‚õŒõ‹;yô‘G§ëÿa…ã:`%.6 ~F:ÎYF¢·ì:Eq­ªàŸ4udÌ (ŠB8& a™%£D¢7árW<6z=zûÐý>ô©{P9eùt†tëV2×àÆ†8˜òÉ> ]hZ4ÊÇm]x4•B±È„‰ñz½Í¥Riÿ €¸Üç”K®ÏB(²,§}M›/+eÝ 3ˆ²ñxý~¢SöÜ)¯ÇÍØ” ôP˲%v„£‚ÑÔÌžOº·Í;v¤RJöb—Š˜Ù,ÒqX¿­™{LeýÇD#‘ ¥Ri®´ýy¬:vňÔ›€0Ûu ˜P²‹d›CŽÝï8LÏÀŽ‚ªáŒ’]­óùLŠŽ¶vúzz±í‘“¤ãɤwZ—”®ñŠVUf úÉ4MÌîv¬B«XDÑTÖml`Ï 5H)ñù|•û:¦Û»à* HH)¸¹_žeFZùß?õ§\v5U±j*",®ß¯žÿeV­|Ó9&¤ª*ã§L¥j\5ª¦a&£I¹î.lÛ&›ÉXóá”Ighom£³µ…B>?"*ÈötSêKàXn¶ÛÈåùhóV¦ÔŽGUU&Nšø¶Ì1iW܇íö•¯­æ•ì¢Ç4̳üãkðÇbhekú·WÞâ×}‚s¾°˜·¿žÇ~sœ´˜ÞÖ|ðaœsæ9¬^µšt:=„;…ƒAÆÕŒG×uFQÄë&¡( ¯E( º»º)•J@…#abqd.CϺ÷i]¿–DïP®.õt`—cY&­]Ýôe²ÔŒ«" Zºêk)÷sO!„o,pv–PÓÊÆqEx@àèd[sÄèëEõzQ5 Ã0¸íÿÇWŸÉy§:P×þõ38ï”CùpC7þÏc,;|·þâVŽ8ì¼þ‘h½ì+ !PÔ‘ßVx4`(„?àÇãñ ÙLÃ0P‘Ä««ñûýøgÎv­}&C! …PU•R±ˆ•êEQUlÇAQ65µ¢AÕ¸q€èÞ„«ûg«GÃhg¸Oùøes¹o”Z±ryìb é8¼¾j ùb‘YÓëF­pþ¬ÉŽ{SkÓ&Od|]Ý/Ë} `#îØÐ¨õެš¥”= ãÀd[ËÓÆW²¹¥m ck65ЕHsøB ^¯—»¿=Õk?æ¤ o!™Þ±Q9nY=©TšÆÆF,ËÂ2­Ž´t$íme€²94M#‰ ‰ÅbŒ¯OÕøüÁ¦aŒˆÁ3­Û†ø~–áêÜu [˜7¾©«¾ŒTWn,<ªï ÀU忾JÉ..̵4VM¯«¥µ»—BÉu;^zç–ÌT‰†¼EC(j*ƒ<}ër©nùâY³¾iô7ÁX>Ÿ]×Gõ…€@ @*™¤½­®ŽN²Ùì@tãÕ½D"bñø°ú%ÅÖmåaÌ¡3í?jÜJ´²ò•ò£C˜¥LcêÁO`€eY_*õt3¥¶E¶´uðò{ï²|¡…P<åâ¤WW„øË͇sÔ’ zò5œóÍ;Fò¾‡^ÄëõÇÑuïb¬( ^]' p¤$ÙÝEws3½=½äsy¬i5(K˜™´ë¤+îŒ0UÕHes´uõÐÙÙù»á}ÝGu˜Ê¡ËìAÆ­%»¨$·5^\ÊfðzlØÂš7±|¡‰P¢;@±]´'M¨äìi3QôŠ7Jg¢È~r wµŒö¶6Eƒ!ŸË£ª*áH!†aÏåË>¢ÏRLs€F©„‘IãŽÕ8åá * ë[:0 ãÍAŒÃDXJÙ"„HáŠñ˃ï¥ë?€ŠÊªÊl¦¹ñ»Ø-öœXËÆ¦Ö4´°|mغ¢;ä¨z†Ýï¿§ñØS/0wÞ\ê÷­§®nñx| £CH‘0ºOwËçql‡P8D À¶lJÅ^¯w€ùt=GÑ<å!W¨>ïøQ¡X,¾U~4ääè GÕƒ;âÀÁƒF—_ñíùÅÎVŲÌþ¾0}R‰T†éµö¨MlµíG1¶hÿßcÏpâçNtëU>¿¯î¥8Ìw‡T2I$°Æ¶mc—¨TÿÈÔ½”#À‰ z=î¤NÃÀ±l¬X5­­m>F1–c8ÂÁB0Ÿ¡?`¿ús‹‰íâ+¥dÒøjt,_hÂhb;*˜CK*çåW^ãÄÏ0F»‡´B¢›Î¶vú}¢ëõ޽¤¤Ë!Ó ŒròTõûñÆã„gÎ¥µhçqs ƒåpý×O£ÆÄ£qà\ÀÛ_©Âø‚vaº3L/å EL ŽÚ[E É‘¢:TdQ4¶6wñû??Àûk7Q]]Žw>O\AÍ3Ü_6G*•"‘è% EGŒèä:Z0úz‘¶íÃ@ñzQüž|üÉ RÊþiÀãÁ´øÉð‹£éÀz WJ¹­|ð›…‘Áë|DeDaÁ4ïHncÅÇë·qÐ1çñê›ï‚Ðèîîá{ßý>…Q†F#EQGÂÔÖÕR[W‡®ë£H)qJw®Ÿmcôgj„@Õ<þØi†ézv,Â1!Ä„!måÁz\—e Ò@ í\n`´­Ÿ^^µŠcöqvÀqž¢Ðøêe?åóË÷åÙ‡~Ì£÷ßÈ Ïþ•§Ÿ|š}ÔóÜߟß%ûIUUÁÀ@²t0òy°ŒòÄv/z(èú^_(Ü»mÛ¶ SUŒÁe.íb˜`¿ÿÇ 'ž°0 «œ«ëÏn˜–ë?⨽•19m´~Ñ/¿µŽÍ[Z¸êKó1“›0“›X4+ÂÊ—ÿÄ_:›“>g~¥bñ“à8*¥·5`fR(>Z8Œ¢ë(þÞñ“(¥û½Øu„Q,ñËûµ,\éþKŸ úGÔôæšÐ=°d¯¡¡ÛŽ ‰‡¶ÎSë&ÌäÆrÙ¹F®¸èV¿ý½= ^{õu::ºv)K=†AzãZ²mmä;:)õö‚xãU„ë&qÕW­Tv‘Ë´cq¿H`p¥šU<& à+«VsÄ|‰ªy‡…oÚI¾hôX˜ÉeðÌã&¦Tš<óÈüêŽ[éììåŒ3þ‹ÆFWKÇÙiƹŸz·6`K€À,)¤Óä::)vw ëú‡÷ÿî÷Q SÝfGFd—¬ÒÀf€’]<0ÑÞªE‚„¨ªk´%‚WÞ[ÍQ OìºK¯5´íG#µ3垟vÜ>¬_ý3fÌâØã¾ÄÊ•«‘R’J¥èêè$•Laƨ`Ú¶MaË&”ò ©~êŸð$„ø=#ƒ…~w&ÂsÄöui£ø¾,¿5“è¾&ÑÝC$à/ODtÈš†-”L“ƒçíßmß´!â][3Ž­ŽëçZ0’›\ÐReU»¹ïWñø£ÒÑÑG>_`ÅŠ·ñüX–E&!Ñ›fª¯+Ÿ//ÉPÊQ‰@( zeµÄ]x3€;áu¸:mG®(ÙEofkòT:C4F-O˜Xµ©‘E35tÝ;LlwdÝçN<îH Gçö§ÜJ3=‚äFÞ§†ß~Šo|ýkœ}ÆÙ\zÉe$zòyÌòÈ\wgm­m$zä·nÂ*‡Œ‰hšŠ7$2uæ>Í߃ëï~"”R¦&‰ñ€åŹý³Rg$zD2“% ã‹Dðè>TU°OŽ!²;6&~ˆë¯û!w>çÝé¡©œÛ°óC@¦ZÚÆ¿s&ï¼ù[·pø¡‡óøcS(Èe³H)ñx³^~ê·\óëùÑÌE^L{{;Žã¸—OcòCzìæ5ôêZxWÒRÊ­ƒ‹àZåÀzÜ•IJv1ZhÝ:MõxÈŠDC¬b Û¶Q43ο€J4v2È×Ûqè6pMxø¿ÇžæÔÓOã·ø÷Ýÿ;Z9Žoö²º¼HÕ)vЃAµR›¸à”ϰö½©¬¨âØcŽãž{î%›ÉPlidxÈ$¥Dóû‰N™þœ®úÒŒ À_׈ÄÄÃ\-¥tz6oú‹Ëâ …Hç TO¨C󻮌mšDÓrà"~ýta˜Èî8(77³aã&–.=b¡Èa‡Æ+o¼É²Ï]Ài?W¸æO Ù"à”°2ÛÆk#¹‘*_Š‡î¹–‡ø_~ðœô…Sxo廡 ( šæ&eEÅ£ûwêëh$)wî#­ö*']F¸ ß²åT•à¸Z’™,Ñx o,êÎl7Mrm­\òÅãy|E‘ÇÞÊŒžÿë/ê W<üí‰gY´x555/öü\ýýïó÷ŸgMb&G]çåïå©xû–¹ŒsðSnúÝÉæ‹Ø¶…ªªx|:þÚÉ&ð´BÃÕï1”væÂôÓz\QŸ9À}€U%»8ÙW3AªÆc™lŽêêqE-¯xug“ìY;ž_ø%.ÿU36ÆöÿÄPô±§9úèånMÛ÷Ê`ÆŒü퉧øÊE—òß¾|'t$9Èåé/5T7êV 7ÿ諼ñò3|ÔÞÃIß½ŽßYmÛ¨^/± “,oV1œì§¹0ým.àúÉóBLªÊ•^=s.">ŽT6çÎYŽÅ°KÅÎ*ŠëS-?`?Î<æNºú]ž~«cT‘,âí½¼óî*Ž=îX,˱m ù?B(ã«ñx.;ãd.¼þ ®»g%¦TÆ4(>þwæ/˜Ïœ¹s0 ƒl6‹ã8‡M*RU•P8Ĭ9³¹é–k¹ó…Ÿ»YaC‹{¤Ë³q˜N¦KÎ?š5«^ÁÇò3¾ŠOó×—#ˆ}, pWD¸ÀíXðC)¥ «¾­ºê»aŸõ§"諞>ó¦ŠÙ Ûb —™³€à„ xÂ!<>UópÒ²Cøßk®ä×^ÍÞ'ÞÎÝ¿IÑê'vtõñÓ›oãœsϦP( û|î s!†UU1£þ³Ÿ=œçžÿ3Jd:ÇÿnzTP4»<Ûãè—§,Úu‘<{ø—Ü{÷Äãñ[|>ß*à FŠ/좰?#=šU¨°-»[W}Wß×ÔDMíF±tz¦·+jôvb%{±rYΚÁÞ3g {<üÏï^å†ÿyšs¦3wö R9ƒ^YÁ¢%K8÷Kç¢i–e‰Dܹ0>ÇvÇu½úÈô|8âÐÖÒÜÒÍ+ÛâT½è3ÅÐì}L˜Èœ½öD÷é3ôH„èœYhš†ÇãÁ4MŠ…"y{ûT\Û¶1¶m¤èñ¨ŒcF—Çã᪫¯â¤SNæë~•å×¾ÃUŸ39é×åqŒô@ÑÊè)d™C—Ì­eÍÊgô[nÿ}íu×ßø¤®ë†q ŸÀˆH)-!ÄF`ž†Ë}ð!€"ˆƽêÆ‡¾æóiÕ–åd2Y£=™.u–M–ËÃRÊzøË·6=ßû€•F&½¤ÐÑ$ÔžNŠÉ‰÷ß"·e=þ‰ÓˆMžF8°êRJz[›)u¹3ç Í[)&ºA{«=÷œÎ3/¼À¯n½•ÿäZþú¶ÉõgØì1ÞÆÎµâi4#5 ښ銵¨áªKN§|á³êW¾vù‰+W®ü¬išý}ÙUZ ÌÓ…#kÆ…rkB¯sØ´ŠSŽßËSóyâ1Ÿþúʶ°Ç£jŸ»øPÐG©d“ÎH¦ V"™Ë'ú²ÅD²hö¥ŠÖáK''S=ù¿O‘Ê‹ŠV!_sºiç¥Ú[f[·RèéÂ\·šÌƵxBaÔ`4f²‡boŽe#XÅ"M-­LÚsê ö Š…‰D‚ŠŠŠà_²}þû:þûä³×¿Ë×–K.Z^2˜©Ì ½ØhT#Í´ê^zòwúïÿü¼þÍË. a?¸ïüq["aŸeYNÉ0m·NÉ´œœ”²Ç²œö¦¶Ì˸“Ï—ˆÉuÑô¢…µáEõS˜=k³öšN0Tê‰ð­«ïfâÄ |ÿ»— w ˆtLl«ˆmå°J::ZhjjbÛ¶&Ö®oäé>2šZsË¥”/÷w½dçg2™óSÛÆ;[±r9¬¢-¸œïnMfÙ6WÝþ^_³Žûï¿Å‹÷F:6®]Ï9g_JU<ÆÝ·Ý̼ý–à é|ã9ìR O À[ïÈo¿ ÈpËʫ̄@ Ô jÑÊÇá牼‡Ë¿{=yäþëËGóõ¯ƒGsûëØ%J¥ɾ>z{¬^Û”{éÍ-ÙµzzÅäºØùg·ðöcÛ+ðöš&û½umv"U”¹‚)×7t{ⱜ;kªŒWÄÕd2夒IiY%)C(Â!ÖÄøJR÷(àðÛ¿n{¿­«¸_ÿ:ºÁTÞ7õ@àÌ\*yv¶µ)döuae³Øe¿ðò[ïâÖñ«»næ¨#fðNæÛ¶6sÑEWÓÑÞÅÍߺ˜Ã—.¡˜L"„À‹"‡\*Í]~Œß>ö4'.r¬«¿ˆu'1 øªÐ§jЂCÏ_zs=_»äÛx<?¹æJjªCliÜÀÆ ëÙºu+Ùlšl6c'“9§©-Û%¤”Ì›YsíÇ-¸èkg.ª2-ˤmY˜–IÉ0I$ó$R9ü>¿O`šî=÷÷ùŽž·ýnÓG͹¥RÊê’ò޾GgæÓé/®{û ïy_J{w·Ýv-ËŽ<´¼çËÐ}`²™,W^u#Ï=ÿÿuò \pâÑx¼^×§Tf±H ²Š­"°þ„ãŽËëór:Þã÷+¿Xñn± ž6Œ# ãŠüŒ{﹇ʸŸo?Ÿê¸—HHÅqlJ†ÉÿfCÃRìÚ1¥.ö…½çÔÞtÓËöŒ=º Ìà›«:2?¹uEKGád)ej—Tp¿fBTTT|%ŸÏÿ|ܸ ÿ¯ïºQì5k/Õ3*€î9wþên¿ã~Žõ¼Ãš uTïxøCî{àIžý¾É½Ïãï¸éÊýyqEkæ™W[ßÛÒ’=IJÙ cì#„ðÕV‡Î„½Gøu­"à÷„}^%d˜¶Q(šÙlÁÌ•JÖ¶­­ÙŸK)7üÀí |¸pêÔ:çß»H[²¤¾¼”w—”ŽMww?½ùžyöuö¯_ÀU_>‹¥'ŸùRUUÝ᣼÷8¯Æ½“«ˆþì| ¦–¯{Âbœ¶*X|îüôL‹£÷w7ÃY¿@Nª ?ÖÖ•¿¥P´^RçîÚ?p”Æ×'kšzºeÙS"‘ õåóNÔN;õ³è>ÿ ½µ>€ýûe½ñæ*®¿ñnš[:ˆF#§Ré_×ÇBˆ¦pƒ#ùÚY‡Àå' Ëk1U ¯n pÉ/·°êg..O¯‚ïÜOS®$§ŒÚ¯Ý  âóš¦ÜdYÎ ¿ßkvðBuÙá‹X¼x>^Ý?dó±@DZ1̯½ö=þ²|õõ÷e9ãò¸”òl9ì¿à!öÕ=Üò1ý†3Ñ—-p¯?ô†‡?¼bñäÕ..ÿû"Üú8¯åŠòàÑú·Û·AVñmËrfÌܳŽË¿ùu¯™S]ÀFYÆðÏ’GÓ8ìErÐ>âÙçß×Ýðò…âç€CqCÏ’R¾'„XP2¹ôkwsý¡s×žŽ·­×¤6¶ý¹§ß§X4XÉôipàlàrE§8Ž M™<Þœ;{ªg=&2}údfì9‰“êÐ<¾˜Ûۻشi 7máã·ÉUï¯7;»^UU?.ÿ댟ïh¬C1E÷p/pÈÒ½ðôdàÑ+á™÷á›÷Q°¦J)»Fýí§¨uàhàxMU÷v¤œå8NÀëñØ“'×Ú•UZ<U¢±(‘h”p(@8B÷j¤3’})’É4©tš¾¾”Ó—HÙÍ-"Ÿ/hªª&¥”8Žóð)å[;hÒhm<Õ£òkÛ!úƒ“Ꭷ)õf¸FJùÓ1ói8êËÝÉŠsÊe&BÄ5M­BÄ¥”ÛvÂŽã蚦f„PR ¶íô8ŽÓ‹›ÐØŠ» |”²í_Ц˜®ñ,0Ç–IDATHÇí”KhœUÇç>&™&±(ml¥±Z[k Šh¬dF¬"©(m-h¤>VZÚ¥4!EW.t'>p!( vãÂ.‚âBºÐ‚fPë¦>ŠØši›hH:c[Û13“ï»ÇE¾ _BB¦ ºñÀá^.çþ÷žsïÿí¿6¹’à{Úw@®[[Œ9|˜¸™=®YñüA÷ÂÚÕ×?‰A&ôÌ[ïofŸm&(7d½º}õë;¶íiÛ°n³?ýÛ/·\ÛS¿x¶Žýc@þ€ïi˶ôXß3m'Î0y©Hï–3'OŸØÖywüÍx!ŒþmÀ½tßRèß¾÷ªRµH±üLŸÃ:Çíó™ŸÏü°»+g‡ÇFâòRféœÓœ=ºë¾§W[c´|gÖxNN£—èËíì@£ÏzpÍúû±ŠûdûÖÇ»:W­1?M}…5>q"|;ö)mí+$G_§ñîÈûðM&n´oçºû¶voêñ?N|‹wž–LŸ1¨­c¼òõØ0ë×mp·n¼«;»Òjª¹A7¸å†žçÊïÉ~ÿëçDRÃ:Á8§Tâ2ØkL`òò(½›vç/œ¿©ý¶ a¼¾LëÍûh½vÇú5›>|vçóYçš±2xvòTöÅw÷Î^ÏKõ¥}ïµúŒ£RŸdÆVðÞ €*'¼ùþËÕ¨®­‰Ä œ ‹F^‰î_.5Öâ3žËµ)|‹Á@UÅZ!ªkkáÕhÉ–³l«0F¨D¿£6ÂeãAƒ"vùV¶<@,Õp1`¬à¼Á8!ª¤‰V¹@’×5÷ªQ4@ˆUÐx¶Ðs¹‡8ñh)€>YsÉUx k?*cADf#B˜#t$Â3ÉØ˜«[³)q”†ÞxjÕ2Y(5“2mÜ(EY î@MâÉù ‰G©ÔÌõÄCCt1K×Á¦Äu )Hœ‚è¼ÊüöV !¡~Ãä"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/browser_file.png0000644000175000017500000000100511273045225024572 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö Öoyœ¥IDATHÇՕߊÚPÆs¢WݽUÄPT4JÙíÛô!Ja·ݵXû`ýGAQ¼Ú^ …Ò‹%™^Ô¸gcv“S¡ÐCÎ0É÷Í7ß9þ÷;OF¯€ËcUõêÅó‹—™Åñd¤ÇÆx2R³”E´^¯ñ<UEDù#ÔÞ'¹Õ9õzý+“ÀšÏç`éèõz¨jf-— ÝnS*ݾEÑÆ7c ªJ·Û \.ç&øôù#ÁÙa:æ‚A@EŠΟS«ÕÃ~¿ŸýáÎû„9( CD„Õj•« Óé¸{¬F£ñ ÏóÜŽiZzbºMœ‰ÓˆÞxÇ“áSD„Åb‘;"ß÷ï­eçC*• Ûív?"cÌ^…=šdDZ››Ía¹\Ràd²Ífóà’¥}qV€z0 þîØÑjµöÝ&§ŸªêvL«Õjî܋Ƃ8ޝ߼}}q à×/ßžÙù}‘pœîÖ ð0€(pü¾?€Ÿ»<ÚÕÿMüeʰ3¬!ÁIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/browser_folder.png0000644000175000017500000000124711273045225025136 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö ÖoyœGIDATHÇí“ËkSA‡¿™›Ö´‘Z+辦+Qúg¸U)Dª7>@p¥¨+IkE¬âÚºE­m‘´]¸PÛhí#ï›{sgºÈÌõ¦mÓº¤tšzzv7ô¥”8ŽÃ£Ç¯¥R©¡t:]hªàTj@÷9ÊóiÍØ·?=éFkó®¾¾7xi‚d²›/ƹp¢×Zܸÿê"°099ÀRÉc>_mió=ÝÇh®ë’Lömìl€Š×¨\F;VÁfZ(—Ë›£ R˜ùk r¹²–/® ° :Úý æSÒ¥@)RšÀx-âe·ŠÔÁ´]o_‘ˆ*¨ŠjM¶h´04QŸ´@£ÙñciÉ—A¹d’W €d²ý™7HGRõU}/AZ½!¦´R»’ï?óBºó/Mòž´L|ʰmûN²ËU\£ÀîB¢¥&Ì Ñ£ê+æ— Alá-@{Ð ßÕËÞ„Cf®„Tô"¶9žº4õD¶´)¾ÎLéB¡Tø’™.@Ñ*ã㟌lð‰âÔ³[s³s³á€© $ 9n$JcSŽ®³cŒ{Æ+@¨ˆÈÇ\LÌ܉Œ$ˆUµ2s ¨E\è?n+’PÅ|IIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/browser_new.png0000644000175000017500000000125211273045225024450 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰Õ•±kSQÆ÷=_rõAžD!›H éP¤ƒ[+Y3Ò%.v)]üÁ-³PìRJ  ¼AºØÁ "””@‡¢mI2y4”¤yï8ÔÄĚט’Á.Üsîåûî9çÞs•ˆ0MSen„-*¥–b±ØëH$Ò—°Óéœ{ž·""û¡¦i¾2Móã8¬¯¯}âÕÕÕ–çy·û¹4,ËÚrGr¹œ¤R)ùÌÎÎþ÷¸†j ”ŠØ¶]L$ÙR©ÄÂÂÝîØÙù+ú)RJݱm»277wo{{›X,F£ÑÀ÷ýP‚r¹LÄãñËz¡h­?òçH§Ó¡)±¢–Øl‰ÞJöyvtŠ´ÖjmmÓÓSÎÎÎèt:ø¾O¡P@Z_Z´_¶ñ¹íà-­5¶m‡¸®K¥R è}u¿J³ÙÔÀ²Rª."µÐw0 î;';¨”‚€ <„ÚA ß÷£¸d©ó˜L@‚g,8Á_ü•¢çÔ/¦µŠŒS›Ú€ðLm‚ìr«·w"Íw›}?âðàãâ¾u!ó$Cò~ÒCX>½hÇÁqœßŽ]à+è›˲8‘öă˜4—ó˜ÉÌP-V‡Ö¯-°÷yoÈvß»CöÔÿƒÿ_ _‘|>ß-‹áíó GmÕûô•ROäuȰ%"߆¦…©×à'„Ç-[QÓ IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/browser_refresh.png0000644000175000017500000000254411273045225025322 0ustar julianjulian‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYsHHFÉk>ÖIDATHÇåSkLW=÷ÎÌÎìì‚àò. ¨±HP‹Vj«5McÒ‡ÆljZ‘Ú_}¤‰IÓþiš4š˜T[b[-`£MÚjlmb Šè"HQB} qYö=3÷Þþ`1°²IõO¿ädî$ß=ç;çÞ üojóæcÒ¿é{¶êhîêwŽÍú'ñKw^¬(ê' XgY,“ (%~JÉãâ,ü8ó×jwšS{V½Û˜Î©¸d1¬k;T~/Ž€ e»~ªÈÖ矙g[’—&;*(%0 ‰{¼¬­{00<ÁW~ªìsJ…AÝŒóÅ‚ðœkµoõÍ*P¶ëè÷¹™I[¶½²L˜ ãþ0tºª@¢¡?ASëÝð•†à\S”³ £wØôŽó¯ÔUô€<¼¸òÈ*‡¦¼±¡tþÍq7õ)¥gB+Ãå ­*Ìv=! „Lu% µ•ÙZïýG /­Ì!×»‡,ƒK|Š“NÐd¥*Ñ©:ê~k“Ø5%Ì8?v¥¶œ†(Ò‡ýN5÷üüÅwÍÁ«]C¡J áQÀBIAQd Æ8d-<»^îòWR‚gQnF›aX€ï€ŽêrOË¡ò«—ªßÜjì¹?/ö¸þÒL¶SÌOÕÑÔ1E¢`œ“H<‚CÕíêÀüì´š9ºVB{˜°ybÏÉ}°üºaZ»'†”`W00 )Œ ¢pù±ÀŒ3`œSœö¯ìÚIÃPŠ9œ0/m"V ¸²~©Lɉª×Wª©É:2SX[˜U‘`qAl,Ž€=3+ïÎñÛ7rÄ©âÊ3‰ §úãîˆàB“_Î…Í`Çûg\ӒʆQ8g#>Bù†G6W—Ó7l7€" º¿=ñ„IõŸo”m2@@6,|ZÛ¹;ìýðjͶöh_dÒM$ëe…EaW‚‘Üþ÷ý²þ‘‡µI™5"A4›Œ³à (ËOEã™[‘¾ßwME}ì´2w¤K*¯Ví¾_½až:î÷ï´É2›ÞsM'§6-Žì€öÞQA YZ²ýè¼'òÈ_íõ+:ïôì „s ÅíCÌ0A€åyIè bÀC±÷ýµÆ3]ëO]ìí*ÝÙ°Ÿ3ÑAú¨ÂdÎÉ^»ª$uÝXkS$ᚣ›žñP]\IÁ‚§æ b1´Þñà…¢ùRiA–Þrkè£Á‡¾ð਌’ Ý¥#?/ )IÒðûõ°n q(!äîƒ ìþ¶iœÐkÙ^,ÎÑ< LEù™r!Ëp2™­É,‹cÜAÃm~fš4ý°=<3Åië¬â×>»|£?ÐwóܦîÓû÷Ý$^èô,ôúÂE–h¢ÃFœvBŒsø‚Z:ûùÉó]ߨƒ=­Gª¢œ‹}ZñŽz°sK÷©/o°G¡e­Ø´<}Éú­Šž¼”¨U1ƒKàß…‘žæê¾ËíBQ£˜!@–UT¿úWý{çhÔiP¢$‡K™›]87èòFz<Œè»ˆDÉ}ѵˆˆN‰cŸ0£0XS±ü§õÛé68˜\¹"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/browser_root.png0000644000175000017500000000162211273045225024643 0ustar julianjulian‰PNG  IHDRàw=øbKGDùC» pHYs Ö Öoyœ2IDATHÇÅ“OoEÆ3ÙÝÔnŒÝ8ºˆÚBªhDUªÐH½p€€ª¨µdU‰ (ŸÀ§j+*_`…TH' ‚ Ò:R/=÷ÐB9A‘5‰B\»±w‡ÃþÑÚ‰K1ÒhßyçyæyÞwà?¢ßÄd€Šÿûú,üü¯Ý¢çJ vMS횦*ò Ÿ]A Î?åM³cݶ,€³°Þë¼ìüñÝ»ázui Ÿ°r˜Ùxóþ}†ÒéŽý~IÄaàíÕU¤¦!s¹Àò¦ÉV¹Œ‚áK—zÚ%{«J™H„à¿M]dí½lËbäòeÚJªDtÏßåMU«y ÇŽa[õÞgóô+¼ðüqNÕvX»v¼i²Q.côPÒM ò¦ ìíA2‰mY<5¯ò׋'{•x,F³Ù$¾¾Áù9Ķ1¤ If#¸ZüH«F1<ŒmY¨O-d:ÍkÙÙlÖÛW°÷ÒIôÛ·Y,˜)ٰ틬Eâx(Ëøæ+ښ΅ó¤R©0Q)@*•"}ï‹Ì‹ý·é[?â,|MKÓƒ¡¡!Ç阭V ÇqL§™|ð€Åùù¨Õ!nG îœ=;÷hyyáüêï|ôñ‡ûˆo~þ®ërã³y”@µ›íÊyÊ'ׯSN$9s¦øîÊÊ̓,bryùÛ+Ó……‹ÃÞ£;!¼{8ŽƒR %$¹IÚ«KˆìÛ¨‡wPJQž.;ùò—¬¬ô¶(ðØ0 t]GÓ4t]Çuݤ²½ À/lá8nxƲ,Õ«Z”@J‰”C®¡‰*®ëâº.m ~ýs€Gµ'´Å`x¯÷·)0Ö¸dh4=ðL&ÛÆy'v©Žó–ÔÙ\'JÆ{hí(ðã `X \×àqm ±³Ý!½Z­Ø8Q"°Ì0 R©ÉdÄ㌎ŽR¯×™ššÚW·x<|Fu@u³ ߢĕéB•g?|Kìé–Ø4èê9ßÏ æï9~î®·€ào`xÉÙïW—"éuÿìÊŸŽ?ÿÇøê'V( µYBIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/chord.png0000644000175000017500000000115311273045225023213 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<èIDATH‰µ–¿K[QÇ?ǦbP°d)iQJÆÒ–€Su\;(èÚ¿À½‹]:tèÜîi]òÒ¡âR…B$CuBpP¬Çá®7ᄂи¼w¿çžŸ÷œóž¨*ƒ¤¡jr!†ˆÌ›¶}§ªMËÀF½_U5@USðP[oü¹ƒ‡Özr>°ÜX”à“áÀç€Ì+ t2ºdù4L ­ªå g™ð@U',õ’Edx Ô€˜‘Båeà ðÝÅCU´`ÏÈŒqš²hÙžßþÕ@dïýP¼Bt´ÌóqàØÏ¨¸Qà ¨û¼®DäP~hL-àx!"Þ/Ãxéô͛瑃E@x0šÿ$ÿ5Ï„ïá5p‰Sÿýp#¨y¼ÙH™öTõÚçç¼Ã9à%qo‰H  #=~5ô3g¦<™]ÃgÒ*ÌŸE‰‡»ÀO·hü ðÛ"ÎUàTUõÁó¦šRëkÆûà`+†} öˆ§¤ üÆR Lš²C{oØjOÀS;|”ѱçæÀ¸íOl_ɸešVž>ÕˆK{NDJ@‰x<\„ÜK>¶ñ‡Õ}Úê@›¸³·¹ß]üàü/ø_Å{È(¯nsIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/closerepeat.png0000644000175000017500000000062311273045225024423 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰í–±JCADÏDAÐÞBlµ²be‘.ëþ†ÿ öZØZ –i$`eiBФ2ŒEvuóxòÞ lpàÂ^vöÎe‡»¬l“­¬Õݸt™æ  ~È߀§Þ—í¶kpœñXu&ûm¿@S“€‹$?”Ô)á538Ïf²¤+`(é¶Š[†:ì6H=8 …à÷ ¼=à¸aåø¤ã`i{²&Ì€¨Wˆeˆ¸Ñö ÜØàº@T,BRŸ•¹÷À0J¶?m¿—K;¨Â"t4¯Ám.`ûhÛ¾ÞD ö …Ê3hÿ¯iV4}M§Àðòq•ÉÚú_Å7I•þ@E蜠IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/division-type.png0000644000175000017500000000110011273045225024707 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<½IDATH‰½Õ»kAðß¹Fr}‘ Š#*þ‚ ((ˆ–b)X‰Vb#––6þ B@ðQØ F ¤ì")¢…ˆAr#ø@űØ]–»ñ®zXØùæœùæ|眙H)åè´uˆˆñVöm"ˆˆ XƒÝ8ŸRzó;Ÿ¶\Áu¼Å¶aÚ¬Æ>EŸþ)ADtÐÅ5,`çP~+å "'’tpxǨœÇRJwþ„ k8)z)¥-ƒZ—iÛ16„Í=\Îæ§ð¯3ìâßôRJªIDÀÓ”Òb†irþ¿EÄtm}ëkø$¶FÄç [—Û¤”^ýÜ3¯¢ˆè8D½©ºø‚ï¶3‚IÙ¤ñ+7›©a—°«†ÝlÚcä9H#b^ÑÅ"b""®FÄ]l(±ý1§Wd Ëf,)®>îã–_º÷°7³YÆ\“Dõ$ÏbJqßWÑõ‰®šox‰XUbïñ$;ô‘ê¿Þh38¬¸)+‚ìÉ>`Û3‚ÅÒw(‰¦ð®  Çp_K‰žaSf³Œã•ØPžGñg؈xˆéÒæPyòsè •ƒQŒ‘÷Áã~¿þµIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dotted.png0000644000175000017500000000064111273045225023400 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÔ¿J\QÇñÏ/»!E m”`›T±|±Ú*EȤ·µLí+"ˆyÁÂÎ,ÅÂB@lò<^Ͳ¹{ïÝÀ- œáÌ™ïœßNJ)ú´g½VŸd%É»ÞXA¯€²'Àà? ǃ$Ë ¹ xÙ’J)5Ç?»$_Î=¯ü[ÀüxÐÉñûÕz„]Î k[h°$#|Æ IJ){MùµCN²˜d3ÉY’Ë$ŸðªÚ^r/Õë­M‘ãßQ*ÿ‰Tû±‹A›D“C>ÄÖjnw‹+œvhzãa=9ƒ¼Áj à7qÔ˜¤ÕIt‚þHô _ð¢ë«{¬5ð[8Ç5¶ñvÖâÍ ëý/ºúÑ·—ê£IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/doubledotted.png0000644000175000017500000000067411273045225024601 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<9IDATH‰íÔ½JQÅñß †)"ƒÄ[\$B v‚U*+[ÁÂשR¦¾eÈvéƒ`,,„ˆùOŠœ˜aoaÃYsÎYÿ™½‡RŠ>ãN¯î“’,%Ùè €%ô ¸QÜnÿ`ª)’ GœÅýœ¥”ãKÏæ°KòeĽ»5ÏÇL7ÅX‰M¼­ë¶{sxÙuoê*t$àO’<ÄNÕO“Ì•R¶šç;›œäQ’IŽ’œ$y]ßð¸®7ü‚ƒª×“Ì´ëÕUŽ|E©ùgxW÷WñƒªŸãöW»É{x€•ޝ»Ài5‚T¸¶.¥¬ýyØîÁ.±Üø‰=ì›$®)Ñ{|ó·D?ð÷Æýë.½®Ìã>âÞàÙ¤æWzÐGô>‹~%Xÿâž&V¶IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_f.png0000644000175000017500000000054611273045225024052 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ãIDATH‰íÕ1JD1…áï<¬ì,Dì+qb5‚‚¥¥ p®À5Ì,]6®Á^°ÐA„k3í̼ >ôBŠÀÉýïIn’T•!£4û?`P@’.ÉE’q’Ùªj¸Ä ¶q3K×ä I‡+Üb “u€]Îi—vd§Óé{’Õyú–-:ž&8ÀúÜ‚ZžŠ$wèªj´HÛÚ¦{¸ï#l9ƒMlàaöñ…Ç¡#DC-Q[.µN¹åÐiùöòöþ/© äËå<ðœçœs禪¦8ÔèÇ.är’Õ$kI&;l1Éz’ù¡œÖ)JrøŒ×8‹q¬ã–ªêÙ~*x‚Y¬b›xŽ·øŽ‰¡¬ªj:x‰ŒuþüÂÊ(Þx_ÚINã*îvY_I²‹‡¶“œ«ªÃø--ºˆ%Ìà'á>º f1õWvc{¦P˜ßƒ­áS·õ‘ov÷ûì]±Uà6«j’Œáú€à¾nù3ÛL:ˆ ’œÂ½`𵪾õñGŽi’ø€]¼Ir—ð¯ú‚côá#¾`¹óŸv‚[8ß4=¸6€MãLëh^vÿjGë?ø?~ ×SheIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_fff.png0000644000175000017500000000104211273045225024356 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ŸIDATH‰íÕÏ‹ÎQÇñׇ1=™Ådlld1™šBŒì¦XÙL¦45 Vþ%%%å¿{D Lš•f£Y™D")%®Å\zæÛó#2Ù¸õíÞs:}Þç{î9Ý”RlæÚ²©êÿd<ɵ$g«½-ɹ$7“쪾±$W“Ìý Én<ÃŽ&À\Æ-\¨E|ÄÞ$ÃDJ)]?ÜÆ;´°€=ø†K¸ˆó¸OÄClߠѰ‚ùz¦Q0‰Tÿ2îþŒijt,Q’V’QŒa)I Ã8‰/XÅ`-á>¼HÒ*¦¶Kæ³xT³½Ìã-ÞÔót-I©ûlG­å™ÃW µùVq½ÍžÁwŒtÓéÕEX.¥|®eÛY/y¡³RJyßM¤àq›}¨îMÀ“]/y+6ÄãU)e­Æä8Ž¡`ÊÆ?šÄŽ~€Fæ#Uè˜õÞ~dKzªNêŒb±”ò² Ù9Gðp¢úîàT{Ï­OøT¯AíØ¦8€ýmöNc°Í7މ~⥔_ã¾iëß¿ÿ?\Lý¡ÜIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_mf.png0000644000175000017500000000071211273045225024222 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<GIDATH‰íÕ?K×aðϭ‘‡(D"Ð-¡…@’ÀE*zØÖX/ Ðá ø*¢=ˆÈ!ššl’OƒÏßßð[ Î=‡çr.O%1κ0Võsƒ±TÕTU½¬ª÷U5ßIJ2òÁ;|Å^uqªWL«ê1V°ˆI<ÃkLaÓ8ÀŽp”dç_K}&p‡I–«jO°†·¸Ž…ÆûäS/‘~‹Ølø"Þ$IU`÷ñûô±Ué1Š~“IžMrÐð-üÁ=üÀS|Æq—HgŠªê¾7|¿.L$yŽ`7ÉV’Nqt§7°ÚðUl4|Û]ð``ÒFŒç*N03ˆ;ê¢ÝÆ~’Ÿƒˆ£¬ããPÌ3Žæî8MÌÒ0==7¹«ªj7ñ-É£¡zÎhPXHòeèžó/óÿ7ø mDã`1*ÿIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_mp.png0000644000175000017500000000061311273045225024234 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÔ±+PÇñÏÁ –W²X,”b0Ú Êô²ú,ä/ð_EŠb°Ù”2Ø¥d ”,²ð”"ŽÁ5xzï)½É»uëÛ=§ßïÞ{ν‘™:9z:ªÞ5ø}­‚±Š*¦q‰=¬à.3ç#bëe£ÃXÊÌão"™Ùtâ …/°XøÌâ ˜ÂV£F»+ªb·ð6 ¿"0µÌ¬ãƒM "bW™ùýxÌÌ—®žÀmY›Áa£N«Lâ´ð8΋ñ®ËújQÇ2æ~}Üc¿ð3¶¿‡ˆèÁ|6A-3~¨´*r›Åf»¼¿¼ƒ^ì´KŠîwÝ5ètÞà倩^_´93IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_p.png0000644000175000017500000000047111273045225024061 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<¶IDATH‰íÔ1JCQ…áo‚^p‚ˆNP7ae-¸·‘-ØYÚ¸µ2]ŠÔ6rlBÚÌ#¦¾S ÜùïÜ©$ö©É^»€ÿ8êVÕ#.1ÃIVÛ|C&¸Æ*É >pÕ1 \ài/pòg€ªšà,ÉrºÅKÇÛÝÁ)¦Uuc|'ùj=®s‹ªêç˜âó$?@w‚^“<7ë7ê.ùoC›Óü¢]tø§bŒ€Ýõ Sº-MÕÁIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_pp.png0000644000175000017500000000057111273045225024242 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<öIDATH‰íÔ¡J„Qào‹¦QÑd°È²‚ X,f“øú&õA„Å&"ˆÁ$V‹ˆÁh°h± nËÕ°ü»?›ü ‡;çÌ0÷ÞÈLãDk¬êÁÿ0˜¨;ǘÃ:ž°_ê.ÐÇ"2ó¦R 3Gn±Wòst°´±„«aõµ`½’¿a¦ˆždæGD|®#w³hef¿P«x@·˜ÁV™²utÑŽˆm¬á>3?#¢ƒéˆxÅ!vþj°‚#lâ.3¯ ?…³Òýnf¾U¨YpËÜ<.ë.ÇOÔ½ƒG<p“8­©ûE4ßucÐŒßàÀPŸ:Û$aIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/dynamic_ppp.png0000644000175000017500000000071111273045225024416 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<FIDATH‰íÔ¿KÕQÆñ×G”0®›JДD rƒ¦¢-+[rnuuq¶þ€œüZ"(rJ\úAƒCkmÕ¢[ÐħÁãÜ/´Ü©{à,çóð~>çóN%1Ì56TúÈàÿ0ï*TÕ&~ã¶“¬VÕ<Äf±œd·ªÖë*^c%É!H2pã#î8ºåô°„·˜Ä ¬7íûV+lcö˜3pDUu¿’lµN¾b}l$ùϘ©ªqœÂ“¹}iZtg0oÍlgð —®·n/b?Iªj søp êÊ sUµ€{xœä°ªÎc©ª&q ¸‹³Uu‹x–äà_ Öp»Á_UU¯ê.c1ÉϪêãnáE’¿H¿DïÄÙ< }Žé®ÇÒ•ÁV’ï'Îðt€v'É^G¾ë‘ÁÈ`øìÇ·…AaÌEIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_mode_edition.png0000644000175000017500000000133511273045225025562 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ZIDATH‰Õ–ÍkaÆÓhÉK¢6M!X=mm´Ú`D ÅbDÄCñd½ âA¨ýz(þ~`­‡Z´"H=<ª=õ# !bºALLMv0ìÀ;ó<3³ï¾ïŠª²¨ÛRñËÇßQ1XdZUψÈU ÏU˜eûƒªš´c=f”ITµ¬¦ý mÀI`ÁöÛ¯½np„In¡ÄxìäWìÀª¦´ˆ€¬ª¾wu¹‡Nžç |Ä"Sõˆ*AvË~bLç>R˜XüÜ Ëq:á, R,ãå ù-è ––AÆÇ)àµ+/Ú29ê7-ÐÛË=Oþ‡I’…Óvõ&^L2´lJ ½}CC„B!<³ÝdßE˜¦‘>L|˜|'T ®v›:ÖÑÁű1V, µ,4F›’à=¼¦&®]¥üZ€†ÁArÇžNðcïAF1¸ ÄVå×"Ð×Çx6»šÜ²Ðùy2‘‹@÷ºüj¢Q®ÏÎ’qH—–ȳØßÏÝÖÖõÄý’E¤ ¸ d€`PE£ $33|ššb—ircnŽ'ªš/»#ÖT{ È ¬ßæü~&ÃanaàM¥Î7ð‚â)©¶€_@³+&P‹@é>‘zà ®ëŠMªYv ePPÕàó1þ•|•€ŠswlF`í.ºœz(Žê%ð@D¢À1ÀšDäšóLU¿V%`Ïú¼ˆt9U}ëZöR|Á÷]~ÙóLþË¿ 7þXuñ©Ò®°IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_mode_edition_no_natural.png0000644000175000017500000000105011273045225027776 0ustar julianjulian‰PNG  IHDR szzôïIDATXÃÍ—?H[QÆÚ4Ä­–&˜nf‘ E(.Ž‚n uÐA']]‹…]ºÄN¢àßÉA]\DB EÖvMKlCãr.ïOîËKâ—\¾wÎ=_ι缚Œ'| Èe Ô a @(Fð~­ü¿ä€ã0îåówÒ@g-lK°Ì\K#30¼³q¨w ô/l”"àœ¬7â8è–>Žô8Q— |ž|%LþT´ø$û6—àEà½MJ†€,Ð Ä5àÔ°ßÞ”ä‡m;U€y`Eöκº û3Ãæ?ðÈ{¥>Ãê ;à°§,öçêÙµ´ÀNXêÀ1áž…+öÓÀ¦<;R|hýJ@Zñß…ûåq¡­uÀ²MÊþÄÅÇ/Ð60e;: Ä]Ê2êá§3ðÚ¸YCÀ3•þÏ>~iÑœ\`ݶÓÌqL»²ÿèózí0škßF@§rü*·ÜÇ~RƶWð9ÉbÕH)ç20`ê´,3$T&TÏÏVaiß^Õ2 ŸVÕ8TÁóQ "[¤€7aQ,"?eY#Vç̬º¼ºë ³¡‡Å•íÄ‹ Ÿ?¼(M­?Äk¾IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_mode_selection.png0000644000175000017500000000210411273045225026107 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÁIDATH‰µ–]L›uÆÚ—"Èpƒ&¼|Tæ –P‘eÌX™sÄÍ,f˜93QÈâSÁÈYHÜãˆ3âÍbf¶3gBÍ–˜84³ £‰Žø°¥P-Ç ‹)¥%çIþ7ï{žç9ç9çýUåÿŒ¤{A"")‘kîm¤9ü¬ª_¬\s:;\.×ñ¤¤¤J»Ýèëë;t¨êh¬eä-ÀP&"Cª:\]]ÝÞØØxJDÄn·”xø„‰H¹ˆ¼|ž²²²½ ]ééé÷›¦yÇçó½ÔÑÑq3O\)š€‹@ °h®š¦Yg·Û7Ùl6¦¦¦f:;;¿Yϸª: Ø€1ÀÞþTÕaÃ0²RSS ‡Ãñð‡ãÓ4k Dâ]àc`TU'€¯æææ¦W&''3ÝnwS4ÈívWÝÈÎÎVˆ³E"²xØ ì–€i`ðVVV–477¿¶’?>>¸È ç¥çÕK.´ÞÞNÏqùRRR:òòò‚^¯wS½ªî_ÕVÄ¢ U%öl†’ýFòè¡Ó5¨ÿ9t¾=wĪÜf=ªK±I¬Ÿ"U» ¹ú¾#œs_>XòÁšçn[—Þ¹î¾qënP""Ÿ‹H žä5U«*Û ¶Éà—;Åèô.tö|=sв°}+¯D*> ,a`˜>‹åZCî„}­)ü>áB§ëÐÙÐà ôôÓ–Àv‡£,lÚÊ ß®+à‚C'mŒL” 3tö(ìDO=ň;ŸQäeÀÝ]W 8;ût£³0ð“Ktf:Û„.t¡í~+ͧ~L CÞ‹;dwm­ûõóÓ.ì:ÊðfK´]ç×Ë?ðü÷Ãz%fn£À1ã\.$rUUU«×ë êñgw„šç–#‹Gã-A¤‹}‘Á€Eà”Ð"@<ÏÙžžžÉúº'†r¶àJD…I^ÊåÄ{Ù™€_Uq÷ú_Ɔ¾Éÿ%îÉ_Åzñ‰>F#ç_åÂIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_redo.png0000644000175000017500000000215511273045225024055 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<êIDATH‰Õ•]h[e‡Ÿœ&iÒ䤋éç¤_l‹ z¡ Á k…Š^Ø»uƒÝ EzQ(öFEe Ì›^l ²ŠÎ®Sd­ˆ›£jÇ,¶Ëh»âÚÕ"]›Ò´]Òô˜ôœääõbI·5µó þÎ{<Ïyÿïÿåµ !x’‘ž(ý¿({}´ÙlåØy ?/’ædbÀ]îñ3qº„[5!rnÀCç8Ä çH1Œ@G°ˆ`ÁÛ蔲L€Ó€m7Æ6kxEÌñiÁ‚åÌsö2¼AŒÝ{IvÂíøë¤Y@ÐLD*•Ö´ 6ç z—KåUŽ²Æ­‡Do²I_ÒCœâÝ%tÒÁÏߟîþª{A×u±¾¾.–––ÄÜÜœèéé‰úúîr‚É[èø¹¼ÄS|† ÈBÜŸZfA%ÊY íÀ—¢£×GKB¡PzrrRZ\\$SSSCYY™(,,´]¸táÎÙÏ¡ð97IP‹“ˆŠ?D1ÙÚeuÔòC±U¬Ï Ïø¥©©)t]'  ðz½TWW[-ï´Ìß~ïv%;:çiļØÿh›–p’;8ú~íSGGG·á±X !ªªb###\üö¢<Ÿš¯ä…m ¤Hf‡*‡ë/–—— l¿¶Ûí(Š‚¢(ø|>._¹ÌÕŸ®buZð àÜ!ˆ2ÑìðÁNÞ"~¼ñ¸9;;«Z–€ËåÂëõ"Ë2>ŸS'Nq¬é§ `†Ü¬«¹‚0ëGž;âFïË.—‹‚‚E!‰ÐÕÕE?µk9óúJšKÈû0Ò;‚åÜA*Ç<Çf³át:ÉÏÏÇårQ__OCC@˲ØÚÚB×u:Þíàü¥óægolÒË>ª2‚8 ¹3€ö`0اiZJUUTU%//‡Ãßï§¢¢ŸÏ‡¦i¸ÝnœN'–eÑôrÓã¼Êó„øƒ0‚¡bC’¤+‡CñûýȲŒ¢(deN§MÓp¹\Øív’É$ÑhT¤R©N!Ä0«yŸoh'Iz·5*++¿3 £§ªª*%Ëò#»Ó4oš¦ùKkkëÄãÀÿHðoäÿèÿý{(UÝÿ­ºIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_undo.png0000644000175000017500000000235511273045225024073 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<jIDATH‰Õ•}hUeÇ¿Ïy¹ï¯ÛìÊv·ÝÜ E&Ú–CÂ2ÿ(YXb¢EÉÈjôøGai2•J’„EÅÀ­¦N7Q3ÂrÜ]ôîåÞÝ·sÎvžsÎ=¿þ¨]î\¡ýàpàðü¾Ÿóû~ŸsFD¸%ÜVõÿ ÝÌ"ƘäÅõ•>y¥(²yd£Â»8®ðÞb±ø %ÿ±÷FTú\²È^y¢¹Ö¿nIµ¿¾Ò‹[ÆÅkyœÎ÷åòSÆ¡±“ˆÔ[Tù]ﯚÇÓ6ÝtËbéyA7ÁÀàwI°‰ðI_ÜxíËŸGÇ úR"+×(YÄ Q¡L|Ïà "?Û²4(0†ßÇUt=ŸLd‹·[µ‰]羇Ìw¶- Å*½µöŸ:Ák&"^"ü5fD‚®}VTyG6¯¸3o´ž&?h£öòus‚WŽ;Ö§(Š–Ífitt”âñ8½·{wª>J}ødóäîÇëÕ!W'aú*Y«ò^Û¾z~Å™øÄä’º ÷¶Ý–MX±³'ÛØºòÛƒ]‡Û2™ŒtáÂidd‰DˆD"ä÷ûÙ¶ç6ç7Þ-;wuÿšMd&k‰¨8#ƒhØ3|u皺rÿzKã…¯ƒƒ¿\¾çܹsèëëƒeY€³gÏ¢¥¥ …PWWg½ôüÍi‰ì#Dô=PöØDºY´g„Ü\†W0o}v3uvvB×õ’­š¦AEˆ¢ˆ\.‡x<.mÛþzðÒHÁYro™Ö(DM¤>àqˆèÞÚ"¬’.³£Ÿ@O÷we’$A„Ãa„Ãa„B!X–ŸÏGK—,R†Ø,O©3ÌëØÕGëòû°f]lÛ†(Š3@Åb‘5µ,ó6JB¥mjÚ”¼~‚=½q{Ï©qaõÚ hhh€ßï‡ßïG2™„Ãá@WWªªªPSSƒ… B×uÔD£ÂÉæ,€ÆÍ«Ó$sSX¿÷d¦vñrcïÁw#ýýýÌårÁãñÀëõ¢µµÑhMMM$ º®CÓ4¤ÓipΡëº2  èVr¬ÀÍCý ¼üùùtfJßôÅOû–)Šò†(Š’Ãá€Óé„ÛíF0D,ƒËå‚mÛÐ4 DÛ¶QQQ¡†Ñ> õö×—lYN¤þe‡‡‡oUWWƒsQ!I< Ã@±X„ªªH§Ó¦eY‡‰(5+d=¹IsõxA”ˆ²P__’s¾?‹eYž‘ÏôO߇††H×õI§Óùjù:©¬a À×ï"Îù‹–eÝ?wîÜyªªJ¦i–<·, Š¢```Àš˜˜ Ï´··O”÷ßðw §OŸhšöç¼Ý0 øóŒÈç󦪪²išW,Ëz¬££ãüõ½7˜®ãÇ/✯åœßeF”s>hƹ\®{ÇŽúßõÜàßÔÿÿÐÿ€qEÿˆ5ˆÅIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_voice_1.png0000644000175000017500000000043011273045225024443 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsïïyxÛtEXtSoftwarewww.inkscape.org›î<•IDATH‰í•¡ Qg] Ð5 1Tq = )‡„A$—Å€f8ñ“óÕ¾Ù—߈`H&ƒ¦‚öêR=«ÛìÌ´¸ÐX—ì@ººÒ›¿I5P×À©ùó×{JðÀ±*ȹ‹ˆ^ÝU©ÑWƒK‚_±ò£©3`Ü#âöwÁ7´ƒöOm…¼ª=Ú²IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/edit_voice_2.png0000644000175000017500000000054711273045225024455 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsïïyxÛtEXtSoftwarewww.inkscape.org›î<äIDATH‰íÕ1J„A †á'²…°žC ,·<€`£Ý‚"xï༰¶Q¼bao%‚b,vDa óÿ ²a`È›$|Ld¦yž¥¹V_ü A51"FØÇ;.2ó¦fæ¯u¼"[¼`µÂVGt€eÜãCŒ+`uD›í>Á.±Q«Œ± VÚÛS‰¬ÌñÇ.¸5ÝÃq‰é(pÚŠ?bØ«ÖðÖvÊ\«Vü¬K×¥%GĶL½ð‡±ÛÛ’qîÛd_qݧÑFż™S5Ú‘YÏ62SËXjÚ}ø€ˆ¸Œˆíflà&"N#¢ß™™SûxBâ;¿Õ|«Ÿéë¸À;Þp†~5ÀÐ.Æe›1†U²†LÊ6çÓ¶™Ç¦= °\/x[äÓïᱜh„ÍZ"pUOp„^‘q€çÒü[UmŠërãc¬v5ÅÊ ¢Þã03o;á3¢LÙ,þþ7]š>¼>é3¦÷òöIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_bend.png0000644000175000017500000000065211273045225024343 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰ÕÕ½.„AÆñ߈UøH6"*F¶Uo#Z½B4 7 7àÜ‚Bá hUDE‚„ˆbcÄQx‹%ï›]»#b’Édrž<ÿ™9gfRDøÍ6ô«î¹)¥fJi¸4uÔpÒxÀ&Í Àn @`;7`§Ã<ÐÂd¦ÑþìæÔPÇBa¼^Ì':u}—iD¼FD«0…³ˆhED»S—ãÌãUY0`/¸ËH)%¬â "ÞKE–é²Ï/UiR!ìgõã8Á3QaTþ@u7Áf°XeŽŸæp„W¬uÕ÷`XG+ØÇîÑìiA%†ó8Ä)}}.±…©^w\–ƒ§b<Æ5n:úye9Vå«ß*êµý?ùO^µ~HÖ.åJIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_dead.png0000644000175000017500000000063611273045225024332 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÕ».ÄQð߈lÖ&¢X­J-žÀC($žƒŽZ¯”è$*¡"›ˆ[áhu–ÄeIF±§öòÑà$“ÌÉ|ß|sfÎɉÌô“käG³ÿ ü Ñ~ˆXÅBÙÞgæ\Ì1ÆËv'3×* ` ³Åo÷ÁÌ`¢øç½U[Ôˆˆ^ÅÔ†àOh`Û±˜™ˆˆeÜ`/8é™%3‡š¸,ÉêXÁêC¹UŠÈNq…=Ôªð*_ÓÌl㢴¬‰±*¼Ê±ŽILãGѬRY¿–,¡Uì›)±vq§Û¶–¾4l ‹=#>ÄGÑy‡ÙøÎ óÃÏ”™¯xFôÎt™mé= þÓŠÿ/ó÷ ¼?Jÿ¨‘…*IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_fade_in.png0000644000175000017500000000051311273045225025014 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÈIDATH‰íÔ±JCA…áol,m¬ŒQò\b‘Bˆ•ZA´Q|! IÒŒ…Sˆ(÷^Ø Øf9{þ™ÙÙÌ4fŒê¾üo@DL#â®S˜™ƒæXaÛ©h|Ž'$ÖX4 p]¦‰Gœõ:ÛÃ|†—2~ÅÅ ª;²^`SæK½¯_§(?)+ìjë‡=‡¬ÿá÷UÅ;æMZôèozƬ)  <dƒ›¦€/ «jWÛ‡ö rŠÛ.]”x´ø»¿éÐ,>Œo<ÖÐy”IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_ghost.png0000644000175000017500000000063511273045225024560 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰í•½JA…¿#FE‹Xò 𨥲 ˆö)|ì|I‘ÊÆ&&D0]*[Ñ&Ø%¥DñZäRḭ̀‹i$ Ã9gï7;+3c•ÏÆJ«¯t,i$él©¯,i é&I0³`v€ —á]3à$Z#¸ ¨ex›À0,ÊÀèG2·>€ËP&¶éF2 ï*÷ÝibÇÀ¤È¹Ž#™…¿/i7ËŒJ®³àËu+/àõ’T€O3›æ \ë¡€¤  <…21@øÎ#™¦×x &;äžùWþ3ðl=ɇÀhgxMæÛ¸UøªðB-àh,õí¯ÀCê}Ùú—ùï¿>V¬¯ô©EIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_grace.png0000644000175000017500000000070011273045225024506 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<=IDATH‰ÍÕÁJUaàoUN ¡“†ÑÌ£fBPà ¦Ñ 4iî8Ì‘o!8²¡NE(*É`*»Á=Òx÷Ï+¸`ÃáÀÚ묵ÿŸT•ëÄ­kí~ã’|N²d9Éý±HU5v᪫O¸{§5¢?˜ÇKLãU’¹I:ø6ôü[ØDFqî4:Iâ#nãEõœõf$oðï0UU§½„†x¦ñë˜íÞÍ\ʳù3ìâ@OÞÍ÷ä=v°`hÈãÖÈ$™Åö𴪎’´Žìbx€/XuL¯æúîÁ•#ªª½$ð÷°ÒžÏˆˆº¯}Ž_83X‡ØŸdDþ-¶óúÙ*з쎻¦Ãø:Ɉžà'8íâZlu®Ù…èVñkƒ!¯VÕ÷V½“ÀÍú'ÿþ Ù‡ }àHIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_hammer.png0000644000175000017500000000073211273045225024703 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<WIDATH‰íÕ¿«ÎaÇñ×GÇÁQb‘Á3D”Õf ÊÄ? €AV‹Á&‹ÁdQNÊp’QÅQJ‰I û‘qž»<ñ<ߣo¾uW]Ý?úôyßw×ý#UeÈØ0¨ûÀ €$sI6õ$YL²gl¼ÒÚ™$·ð¯’\ï舋،ƒ8€CINöìN2Ÿd~L{w«êkU­â^››3k®àSëomí.¬Œižá\_À¥ªz˯àŽàqÅûi}jð’lL2‡óXü—€;øftŠ^àeU=œ&NßÇ®­þ{U}éÔ ýšv9ÉvœÂ ÆNÌâ#Þà UÕë©&UõGb·±ŠZ#` §'zýf¼ 7ŒŠXxŠkm{î¬Ñ]8†Ë¸ÏM¿„ý]€«M| “V4eÇ;얻DZïo'€¶àìøÜà§hý~8ëðKÓóe3ÔIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_harmonic.png0000644000175000017500000000075011273045225025232 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<eIDATH‰ÕÕ±K•aÇñÏÉJC— ´BÇ hhotPÿÉú¬¤%hé/hOhi¹K n.¢B£Ñ&C‹œ†û\¸\îûö^ïUèž÷}ÎùþxÏ{žÈL©+J¿ ƒ«U1 ™ù³<ÏáŽ0×ÞÊï1ƒ›ø•™Ç½œº/˜ÇAÇñSØÄóò~Ÿp¯/%3+-l—õ^”õ–»ò¾V1*[TÔÂãˆXÄNÏÞ£ˆ8+ëñ*@“Ÿ¼Ž·u:ýÓ 3`[»-ÝÚÍÌVf¶pznƒ¢wXi˜ÛÌ "Vñ "îfæ¼Â…ûX(yK8‰ˆ…¾ º)ê3UOñ “k€¯á ‰/˜™žuÁ;ñ׆6Ð>±½ðN|ÄØ¹ ð¤Þ‰7ÃŒáC üw†mQà}øfF9E[]ð}LtL‹ÉkìávÓš(…׳}²›åj0¨þÿKÿ/Pžn/Of+yIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_heavy_accentuated.png0000644000175000017500000000057311273045225027111 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<øIDATH‰íÔ¿.DQÇñÏaCÂF‚’DÉ xÑÙN£P)(ˆ„òÞ@¥Ò‰h*dÅŸF„ÑÜâdí{wï&„I¦83ç7ßó›â¤ˆ0ÊéôÀ樂SJËu4­zïqŒìTVDD¥Ä<^ðŠ…ªº:+:Ä4&pÔ¨´ÑEùŒÙ&ìáoŹýF`wØÄIæâSßê+vq‰„|dƒ¡Ç :Yí4Ü¢5 ` =µÕ ØP¬ä ë}zgàiÀÎKzk=.:esR!ø)¥9¼GÄcI©p OÑí{¯ ÐTü¬ïúo> \ÐÔ#Èô`IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_palm_mute.png0000644000175000017500000000076211273045225025420 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<oIDATH‰íÕ±kAÇñÏóNä@°Ñ& Šæ°EBzKc bá ÒYÚÅÂÂHlT0µU‚¥‰6&$ø,nö–ì¡‹{°ðæ÷f~ßy;;ld¦£ŒcGê>ü€vu±P‘Þb5˧÷1'™ù¾¶ö1&q/3wûz½ƒÏØÁ)<Åu<«Ô_ân×Ì/cëØpÌÌw°\òNv*õ7øT[ó lî\Ýoèdæ¶q¥"ÄnDÌV´Óøz˜ÇP@D´0…µÒ Ü,sÎàK“G ],a33Öêk}n”ñ?ná5Nƒzl`&"ÎâRfn5Ú újf.4ÔdæAD¼Â<~5Íc´‹¶†‡zŽˆˆ8D^Ço¼ûk@D´õnc'"&‹vÏKÞʼnˆ˜ÈÌï8_^W-½3ÚÁ,æpw‹¶‡%„™~-3w*ú7¬DÄñMÿhcÀÈñmF†å<‹F/IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_popping.png0000644000175000017500000000047611273045225025113 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<»IDATH‰íÕ1JCA…áïŠ] KuîÀEì² ‹ôº{Ñ5Ø¥H—eˆM6:ÂCŽ…©DÞCóBæÀ0 œ{ÿa—©$v©“v?þà´ËPU·b€%Ê×ÅÞð˜dÑÚ IçÂÁ`s¾Â \´Õþ鉒Ìñ€KÜ´y·Éàl³7m¦Î ¾é¼ª\㯘ô ¸ÃVxÂK’÷>ã$ëßþ U×ðà͒<÷ØV‡ŸÁ°À'äma8Ó0TIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_slapping.png0000644000175000017500000000056711273045225025255 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ôIDATH‰íÕM+ÄQÇñÏOÌRY°‘R²UJ‘²¶´açðx)æEH)eg©¬fça!v6ºþ‹¡ÌüËLQsênN÷{¿÷tN”R 2FúúPðÿIIÆû.H²™¤…kœ'i'9J²Ñ.¥t=XÆ;v;r3¸Âa/~´F+U¥ŸºM²‡É~T°€‚`¶ó…¯u‰UœV¢‚Kl!}tˆæ°»JÔüµKXü–C /˜èÆ×Óm4“¤£o¯xÄžºÁu¦èÞg£Ï’œàë˜ÇN%û1Rg$™Â¦ÑÀ ŽK)ížìpá _ðÁI4±ûCªIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_slide.png0000644000175000017500000000061411273045225024531 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î< IDATH‰íÕ!K%PÅñßÑ­ ´¸(XvA·ˆ`ƒÙ 6·ì"ød b°Y_´˜Í6ƒÝfPü6 &Çà ¹\áá ÜræÌüg.nªÊ cd Ý‡€!`p€$ß“üMò¹O~4Ér’©$GIþ$ùôf¶°&{XÀn±„•¦³ªš‡˜hè‹8ÇH6ƒVŸæZý"Ét𳪞ºÚ8Öpݪù/ޱ_Uw=Ú6~a®UðæW”ä7þUÕY¯^U;XÅλI¾a³;m+®0ÖJ4¯(É$Æ1›ä'جªÇW¾yÜ{Ùà²Õ«ßë˜Â.~ SU7 ßW\`§Ía‡ÎðñÏšêg\UýˆîIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_staccato.png0000644000175000017500000000047611273045225025240 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<»IDATH‰í•1 Â@Eßk hå!¼BZ଼·ðžÅÎ+Hl,EH÷-\$IÈJŠ|vv`ö1³Ë¬l“S³¬§ éìrBšàÏI…¤bp€¤¥¤3PUòç!‚íVŽ@ 8Y Ü"¹ŠŒkI`õ~Ú^´åFïàÚ»„2ƒ-*ŸÖÔÉ/k€¤5°OÛ“í{(¯Ë—)i“ªnjY£bOí«mZÀNôѸFE½€Ù™;,ª–0IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_tapping.png0000644000175000017500000000046111273045225025073 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<®IDATH‰í•1 Â@D߈­…­…E /`›Ná)Áƒx;A»\FK‹±H”€Y]Ñ øÅÿËÎ+þ,+Û´©^«î ð€~è@ÒÈ"<ζ‹·À˜ûªK`«ÙÈiÐÅvck`SëG€Um–EÈÃvÐ|ÄT÷S”/õìÜ%iF™w€\ÒÉö6ênÌ iBÓ›.¶_|¢î/9~¸Ý’âXæ·IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_tremolo_bar.png0000644000175000017500000000065211273045225025740 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰íÕ»J]A‡ñßÒ ^ˆEÁÆBAð$©…àø6Z ¾€¥&ZÛ¥ Öv¶‚• óbl²RdŠ­žË8§ .Ø3Ãÿû†¹°#3 ³F†J L+±×èFÄÂÀ™y‹õˆøÛ˜ÉÌ_U‹«½¦ñHlfæSMîCý_=âZµpú;äC£U¶©®2óEþ´;/߸§Æ|`“oxmkxÀׯØ*¦ýÌ7àg¸ÄxOA -ã;íæ_­ü´¼£ „q‡Ý.ðïÝà]2‡´ëï)(°Y\㨀'5ð̬{h1…Ÿå\ž±„­ÌüÝ3ÛÇKÇŒÖÂûÉF2ó¹:óþËüÿtŠe×”ÔIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_tremolo_picking.png0000644000175000017500000000066511273045225026624 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<2IDATH‰íÕ¿J\Q€ñß,AmAa+QXˆJZ›<€`%vZø ©­$]Š6¾€………h!ŠU»`²ñXxìtïÝ\…-˜f8ó}sçþ‹”’·ŒÚ›Òß1Vt¦þŸàlãKíÎv|ñ§XÀ¿Â†”R©D_ž:åÜÁ§Â¾’ðY\dðï<}«E½mWµˆØÄƱ‡IŒàS•V„yê?XAû¹öË•V”‡˜À"®3ü Ó­*¨a»|- â;~Tôâ*Ãa_p™k•O÷à'†ð ­\ÛG£ª óøŒ“ ¾Å¢Ô#^ ¬{ü$$¡YÜéŠZØÀ‡Nàeç˜éü”‘AÏFDÔÑ“Rºiÿº¾m¯ÝýGë Áb fÀ6jLIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_trill.png0000644000175000017500000000065111273045225024560 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<&IDATH‰í•¡O1Åo,HÜb„ìÆþ Åc‰Æ“ 0sh !$K€„¡™@îKb9Êzaœ!kÒ\ó¾ëûÝõë×Ê6U¶Z¥îsÀÌI’º•€  Q% žS&’V%5£AÛß:°ä€Ï0ÎÝ?n€u Þ;y)Vh’–MàØnC¨gûMRX@nûºÔèvø²VA_>€!ý4Ò§å`-,ÏkAo‹À‰íd~R€¾íQAo‡çEÊ<èO}¸›Ð"¾E3àÝöà×Iõ0Œåmౌ9@=&ÚI:v$­àØö}\•L[¢}Æ5 ÆùJª/ÀeY@´Ðþ²ýóû`øÏs –Îü–cIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/effect_vibrato.png0000644000175000017500000000043611273045225025101 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<›IDATH‰íÔ±iBaàï¬cÄ2€N RHVHcå.‚à.ÛŒH-nÖÀµyÅ+ò°,þ ·9pÏ×ÝT•1çaÔö4 w$Ù$9%yïe³$Ç$ç$/7…ªús±Ä' ¿Xà߸tùÓ¡ŽªzЮ+ûÁÖx©Ë?0ÿ0ÁöxíåÏØâ€ÕÐ}Ú»n@Æ®µ›8¦Ì¸ÂIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/firstfret.png0000644000175000017500000000732311273045225024131 0ustar julianjulian‰PNG  IHDRÀÛh9+bKGDÿÿÿ ½§“ pHYs  šœtIMEÖ k`$p`IDAThÞšÛ®InEQ%iÆ=~°ÿÿßÆî¶­éTI?qÉ’°„TÕ9ʸ“›{“!fW`F¸#MhŽ…!4†îÆ£?„Gp§ñÆDB¸`x"BÓ€»(NÿþúжOD(ŒÐTA Ç\QB@Dè/û•ˆÐÑDžH<ÐÖD#@A DÂè×ø5§Èƒ (&škÓ–Ÿ("¹4!øõ×ßè×÷ß*¨|¦Óh(]:ˆ "HTcñl(_¿~¥_ß¾"†ŠáÑxxNµ‹‚4T! €À_ÿòWúõý#PtSx4E´4DÐÄ jíøòGú×ß~§ôþ$žŽ|TÚˆ>‘xÒBˆ‚Z  ­Óÿþ÷¿ñ§__>¨­Âü #'N5'ýãúÊÇÇ“VgןyØa†‡£ÙA¤Õº…Þ:qaf\f˜;nŽ›áaDäæÙ8¡‰Ð%3Ç,mØÃñ"f{™ÿ†¬t|€;¸Ç­aD™{·;X“AÇÜóàȨ†qkxþ'ПýgP Ï‘#nFýùùIo "¤ÕEÞF à z뎨"²­g-Nö*C4˜GÕ;¼ö2ÛJu&·Î|zB¥·Ök…ÇÕ¤ª3ÙSª£ú&¸Vg#ei³¡0ŸÙAM$@_—a–ç< c7n { {)uT¯×cnàgcæ´÷ˆËÜj:<0w!ÊXö´Ñâ°®— 4¤WCˆ´%è<{9SÒ<%\k¼9rì™Û²š(êQ#¢µÞùp{ùý;€úoY-:­_£¾7$ «´Ä'ÏwsíQ_|5áøžŸhú²Ù:k†é¢?z]mêuy"‰{vâAXnËh(»ù4 ×Ëj䍯‚DÁРl# r½îà–!6×=-êçhb*‘gœ£in^H!æÏ&Èj>AÚõ4ÓXxÂça:áè°k¯-äŸÎ4Ãͤ"h`µ9Ó-·±,ŒÃ¦ ‚Ρdû oÍß¿UoºÌq†¢½Ñr@1“¦wE5鄨ß<è6üÛ>’^u® î ñÖÑ1o5{/ñóèñ“ßëô¢˜Ç1ë'›tn¤G$¹rgцáÿó't­®¹ÃñS‹|&ÔܶqÜ–vˆÓžóKÚ…º¥…y5ÎõÊ:ï[gó:ªîv4ôýnÂõÞéˆØ“.LËÝ./Š.ªµœVuúw€Š¢zLyÙaÛ“ÜL9h„™Ù°“Ä|$5ªÔ¨3Vªëx"6Ô¥±ì5OÖ¿ˆ”*>FQD¿—l Ù1ZQ ÛMÅwcűãG)¶¯VtÔ‹íxшdÝ9Péó<+Þ`ˆxùwúcÈ#Ô:0\¼¢¤-Ÿ¨Ïwìa“}Ù‹T ¢Ct„ŽÄ¡'+:ÜÀ é$* è@Gx |ªïrgÛFÑçã™D)):L}—ÅÉæ§Ü:PqÀR@ÄHfh›g˼YÕµ8È<&#d\PDu-z²äêC{IKCd bÙáyDDZ‚ªt$¢8•…ÏwåœóvŠÕ‹w0à† ÷îßéåXav ,ÚSÞ;BF ŸúÂ'–¹ÆÏlcM]£'³‰ðòä¤ä§oOè™?÷M¿Ç7By|BûÕßA'è‰ 1)åD–¿Œ’­¡òDxÂ|â ñØÚ*NŸÎNôË—/( ‰žžIdóóÆ÷€ižá†ªÔF¦Š‡$ŒbÎЭñ pGÔ5ƒx\G÷†s|í´’uW=#E—Oí\§÷ ë!¨ÒêhÌ—Ktûúy³¤sÕ=f„´Iæ ³áÑø'|Pǰ4ÏiÛ1Õ¬ªÖ#œ"è(èõÙ ¼:²e²s6Qç=w_}"O½”Nb¸i‡°7æŸOÍÔÆ 7GÞ G¯'FOÉ Aè¸ÐâSˆ¸Ì¸×¦åÙ’Î&¤Ñ_îàOš(¸^!÷¶i^Ôò2×…závÒ ™Kc2ð î÷ÔC¤×jœiŒX"79ÓZ ‘"í Ìò”dÉßÒsÄŽò@]ôÄçRîg'K„·•ÞÒ^*5Ž2Å7Ò¶z?Ôü‚^Ù^³ÐQŽÜÁ «4-{™9ÍC€gÞà±›SËÑsªzŒ~`öB’J4­èùž­8G®—滚î R K7íÑäí(óhu‰©¡‰ì[ÁO`¼uQ¤é² UA«!µ„£ãÜÿðåK)âEŸm‚6–ÚÙ;KÅë·Ìí&ïe.á‡(÷ƆìÚÀ·‰)+.½+÷3 ¥9ÔÐËæyN4[¸Ú ¯íAkíErü=Y„ü@Ó+$%QËô¦¥– ½q’tø¤õ@ÿÙRhÅÃ-k†]|€ ÜfXp³•¾M9’"ÉõÑj/d†•û{0?âtÄRCk ¡¨*/,>‘•G‘0$Äñ«ê !tuA£Ñ¥eA€Ê¢OåQr¡0Ü7zª‡ƒäÈ æDQÑdœ)¼¸¥2G–šè: Õ#a(?ŠÓ ±¼ Aªì§u,ìºëñ¢Ãá¥¦Š¡yÄ,HSÌ@U¦›ŠlN-‚ÌéËÖ=zÝT¯±èÛâNÂ_?÷æÐCŠÖ¼Ë;2ÊÍ(Ã’¬ŸÙa‘uäè‹HÊ~·á¥hJ'Þ„Íïž^"X±¼›ãÉI+q®Ëº@èúìøt–‚)‰»œš±y=‘0ÐéŠ4Жy€¹>U-¾·Æ3× ‚¶4‰ÄêJÏyø:[¯4ÈÎ}ÈN·ˆôe/þUÜËÌ PfÂÁ+g°sÝ.ˤ¡×bEÚ2]% 'îYú$d”z÷yà˜#ÍIQžÄ]JÂ@o]eÌ%„1Ò¢¾p}sPI™ h&»3K“BZR§#r2áå=ºÐSTO2£‚QÒ€+ TÚ*t¬RË,‚ü$pôÑàÅ=Ÿ±H9ºª òžp²¤ážUMš1Üpÿ' S€Þ›Òz/kÊÑ–½gFõ>âÂ01x 4ÚŠi+Ùúc`|ÓÎ{î–»W“ªñ0#̸ §É±Ù ´Y]‰½›h¸ã^H2ÿÎóVŽØi¾BéQC—ОI¦#˺ U$uùüÜ1½Ôþ.„úA˜êÆã¢7h ´µ{:M¼Š]ìá(Î3"ê̬_IzgT?ª¼rSpg5¸‘îhda@ç '˜Uàâ'R7T\×÷JKÇBÜ:9%q=}kO)-UÿYJE×÷âjÍênh+º´¸úæÞ*“‹n!:S¸jcdaÇÁC–®œÂô‹ª{ú®ùL’WƒEd¸Å°#šÑ“IĪ(Üøå¡%åmEU;r8RðµÃ±KŒg­²†ÞŸOå­n¬D:Å„\‰”Èb%D‹‚Ðè­}Bè•LŸFàhÞ“ªûqî`f -‹™yn¸çÆõqq…£Ñ&˜ æR^×'¤TN ñ–w\G(ÃêºÃX£*Ž’w/4³>ÓBŸðxП_þ‹ÆËÝá‚E^Eˆæ÷Ât÷߯ÎýÏEÿÿü×õ{qG…Ù^pÔѺÎ7¯†z|áoÿùþ÷÷¯üÛ!‘¯TÐÇIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/fret.png0000644000175000017500000000305611273045225023060 0ustar julianjulian‰PNG  IHDRÀV2îPLTEbR*Â¾šªª†®¦|©¢ƒââÊ’~Jjj:âÚ²âÖ¦vzZªv‚r6~v6nV*ÚΚ~j>¦–jþ¢òòÎjjJnb*¾ª~ʦ²¦~jb>ff6rrMòæºzj2IJ„¶ª|ÙÚ»ÞÚºÒʪnb;¾º–rjB¤’`zr2ƲŠêæÆnbB‚zB·ªÒºŽîêÊÚ΢¾¦Œº¢næÚÉrvTf^6òº¦‰¾¶”º’unBÖÖ¼®ª’¦šnvvNΦúêÔnf=²¢zÞÖ²Îʺª¦Œrb1ÕҺª–ή~r6ʾŠeb>˜‚Rv^.þúβ¦Šrf6¶®švj6~vGk^;¶®†Î¶ŠÐÆ–zrBæÞ¾¾ªŽnj6±ªˆznFÞήòêÎnZ.]V3ÚÖ¶îâºzn6ôîÒâÖÃrn>vb+vr>zjFmnNÂ²š¦ž‚ŒzJÎºŽ²¢‚cZ5êâÂvfDbbFnj=«ƒrB®®†ª¦„f^;~rD¶¦†âÞÉÆ¶–îæÆrb7Ò¾’¾®–rnFʲ~º¢†rf>¦vf.Þξº®”úòʰž‚‚v:²šfÒÆªrZ*’†Vúî¾¾®‹vnHŠvBêÞÉf^EÊÆªjf:ÆÆµvrIÚÖºÖÆ¦~zRvf6ffJŽ‚ZÞÚš†^‚vF¶¦Š±¢ŠúîÓæÚ°rj:æÞʺ®‚¹ª•rjJzvPº®ŠöêÔʶ–vn1›†V^Z6njFzj:ÚÚÆº¦ŽÎƺ²®‚öîÊöæÎÞÖ¿vn<²®‰íâÊÎÆ±êÞ²~n9nfErf*n^0r^4vrNrnJòîÙnrVvvVòê×zvBÎʲrf:Îʾª“zrJÒʱ~r>Ʋ—º²Ž²¦„¶žÚÖÂâÚÆ®¦‚rfFª®†ÚÒ´ÞÒ¼¶¦ŽÒƲ‚v?®¦Šrj6ÆÂªzn>vj=Ê®jbBòæÎnjJ¶®Œj^6ºª€Òʺzr>zf0ºšÈ¾’ÊÆ²þþÖΖζ†þöÊr^.rj>vb6rjFÆÂ¤‰éIDATxÚ]Ðy\ËqðEî#BÍ¹Š„Òˆ1ËQrÕ¡C#¥K­#äVJ†\:P-9*µÄR:´‘ÊÕr3åûÛV¯^þy¿žçûyžç/f½’Ì‚‚‘Ícîˆ5ë°©ßýküãð5d.éò]¯†Þ§bô°*sæI,šté*†~+®CÌ·µ6Ï…š‰p9ÔF‰ _Å«¡¦)¨EyË“&”´Ä7}&žªÌžaP1áSÃ|Å0Ùí h"Ša3BM¼Šò³-P?@Kƒº&Í êÞSœ°Í;×”T¹¨Ÿí&À<Š*%Sø˜7í©QÓ8ᨪá0`õ½‘ÿŠf…5"+â’køKH«xóÏ ¸e õ©ÏRá¶@È£Ržò@û]qënÛ%ñuøçSdÄU£„:Zò½ÑúùœëÐgrä19NxÎì/Çó‹rÌ(ôô"-©o2&­5e¶¥…ž Ä2Ãt±ôn˜ ‚>“*È܇—©~,ÈRmXXqNÛ÷ÞêR:#}£ÇbÈιR]þ ý²Ç ¤¼îE±ì€ñáÛé¾þÂ÷NiéqÙèh.&Ð oèÂlì.Ô"¬ ñµH§_à‚]*®û²E¬ÊìÉo”%E ò†{2"CýDªÊ(iYkjß–NÁØÈ&)ŽºH9”Å‚á»flCX˜o´–…¢Ðb-Bˆ‚CM ;œ¼<În ‚wkôÄ͉ácps½ÁA'±9üj“jìͧao^³[óFOÀ‹[òJ좸-?Š]Å›*]©l)¡^D×-¤¡hvàŠ/°½Up† œaÜ €|ñþ݃0~ÈøB1„b3ŒC"¤Ü`HñÞH[ŠHGm.¢R-–#ªÔ“PfÁ%¡-j7LX¨þÛw¥{ÞÝ¿öÀû¶gû »AŸÓ˜làêŠc+¯t†Þо–H0'–Ÿ>%þ WŸ˜òâàIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/fretboard.png0000644000175000017500000000207011273045225024063 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<µIDATH‰µ–_h[uÇ¿çwssó?7m“&íºuõAÛ4 ‡“©³›SªŒ­C"2ˆNÐ7q>(Lƒ½Èô©¢‚Úá‹ë6›X´º®nNF­]kúç&7¹7nò;>tjumÒNvžçû9ßs‡13îf¸Vú°ïž¶·Á|ÀÜ7pcòÔJòĶâ¸ë€š-"¢¦xÀ}²ÊØœðúBAÿª54ùÔïîNö½»·Õçþ§f¦EE÷åt–AµŠÓ_ŽÜ4^ÙŠÍØxòùþææ8@pè[:~pg»§dâØG…¢smbÕfþ-¡æþ(Ș-U´u¬£T*½LÁÆ8d†Ð~IJçÓåtjÙ´Ë'>8ýƒõà†$žÙ´ÉD©õ­8öÖë Oƒ—~–%GžafsÕ@’´~ŸÉ8FÞÆw? ÞyBˆ z:ÛðÙ١ܬi}^KcYр玘~â½w鿌O"Ü‘BOï.<Ú³ƒ†€J ï¼´/¼6ªŸôzÕÇ–Ó¡¥Ž]Äç~mӺȑ_ÝöÆÚ0åhøúªoH„*å±ûFÈl3¿bÇ›Î]Ÿ6Ÿ+:Î`]uwG=ßœ{ù‘¨§©BƒƒÍ˜Xpƒ„‚f¿€ÎÈÜ,¤™ÆÜä8¶ý*=>_x€™ÿµQ·µÈïÂŽƒ jÅr`; ²ç᪡¡+PŠ9Hsl`; ]”qøá–†€*öÔAD÷¥ò—¸Ì¨æ h $â͈Çc( ¤™^p7 í,zŠK×èéÿê-±Edš¹<¤‚ÄU~<R=€Ð¥„tŠàblgÀ–lÖ³ÌÕÌù‹ Óò‰î¨¡I3¨â€4 ¤j €%Ø)K¸`BZœ»>_˜)ò'·•»Ä[übxàq±¦]×@>ä €Ü>À味*epÙò¸65½g “éRÌlÔÜ‚$ÛƒÊùþ­Jô¾ƒ<Û(î…«Ê TËàr—§rر:{ÓâmÌË3?㱩ÆqåÓüø¡ná­UõšjÌc€w|”J+uÉ‘™"¢‹­²àAfÞÕ¥~?_6 ׳èIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon-16x16.png0000644000175000017500000000137011273045225023630 0ustar julianjulian‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<ŠIDAT8u’_HSaÆß9º)Ž6W¹e¥¶Y¶¡ ¡„hB‚WFwAt“ÐÞt]eFt3‹ ú‡’Axe‰´B‰\f†%¨IggÙÜÑ­OešÍ¾‹÷}~ß÷¾|†ÁªpˆSÀ@^ß³ÑëÃùÀ `TVVÍÍÍF04€>@lÈbMw].—³¾¾¯×K2™Äï÷£(ÊÑÉÉÉsÀ%2HBìt]gêÓÅÛ—°J1VÒËÄãqdYn·X,™YBpC’$êêê¸yõ"æð)ØdvëIžôö£ªª5•JÝšîß¹Ò’k2;tVæp«««ëD8Î …B¿±ß?À½çàr³X[KYYss³éãÇÞÊÂð–Wø%%E —ÃvZäää̹Ýî‚¡PHÚ¦ë02==0>‘/ÆFèïCÓƼ¢¤†^¿}615Ý´:‚°ÛíªªÖœ1›¹vȨ<€Z¸‹ûcãĶXÉÎ6QRVN[Çù‰H$RüßTUíPs=™äýÂ"a¢@Kã°Ùh9Û5ßÀ½‡½rÆ%†ñx¨ºZ28(Ok ª‚¥4>gáÕÔ5àóù´Œ,¶™LVû'q‡•w*RðÈòê'CÓ´™McÏ`¡Ûݘ^üÈuÛ™‹ýÓ˜L&eÃ0èîîö7²,‹Õ×KQ”xUUU> o¬I­­­#ÃÃÃ/E!®YùF4%_Îþûú‚9?%KÃè‚·S·9v³Ÿ§8ͳ,k‰…¼¬%ß3¤?gGvÁÁÇÚÁ}l_{¾Ø¤ù%¹°™¼¥VÀ“) ð ¢4bwL™»IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon-24x24.png0000644000175000017500000000251611273045225023631 0ustar julianjulian‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ pHYs  šœtIME×! #òt&ÛIDATHÇ•–mL•eÇÏ ç$8 ¨˜3E1T¨e8_"Zm5¤Íµ6g–/ÍZ5›+77[Ÿ*7?5õƒšÃM‹eÓTPò  p׃çå¹ú€³Lüo÷vß×îkÿ뺯û_7ŒPü 7ƒ@> e[2°Ïét®NMMU’““Ñu¿ßÏçòûý[-Ëú ˆŽ‡@%òƒqqq«òóó•åË—SZZJqq1†a`·Ûcz{{—›À¥ñèÿY¿,_°`6l >>!âñx0 ƒÆÆFÝçóí.õc¨ÿš§›u]WÊËËijj¢¡¡îîn8}ú4)))äææLTUuçc‘¢([€,Ë¢³³+x›Éz s]^¥•‹u—¨û½•#Gaš&6›-CÓ´¢ÑhǘG”•••çv»7ž9sMÓ˜7o»w}BÜõ=ô:Äî7sÕŸNmÝúúúPF°Ýáp¬3M3 ðчÛb"‘è\§Ã¦êºf·Åè­z||üô’’’o;;;UUeçÎlݺMÓÀ³Zƒk6ÄÎa¶ÛNUUeeeœ;wEQVÀ¯ï–Çy¦N,y2cæ×šª(6›r=ᬧ¨¨hß¡C‡$==]Ö®]+¡PH€÷‚Ȧ·E<‘;FL^¯¤¥¥‰ÃáÉnW˦— ÷¾¼8»aû+š.TÖu5žlîo®^Õß\KYYYgQQ‘èº.ííí"CC#ãΑš‘¬,ÙµK$±,éno•Oß{KÖ?7W6®^h­ÈÍ”iSÒº***žèo®¾¯/Å0ŒžŽŽŽ$€KkÖ0»­ Áï‡Ð5$s&w¶l㯄XêOŸ¤ëV I“ ö®âÖíÞõ½w‡}ÀU Ã4͇”|x`ð³ÝNÒ;0}*ÄèôeepâØQ¼Í7ГSxæÙÌÊ[Ê$c¥¥¥TVV®Ž?ê}êU®‰ìY¶˜iéݽAü¸Ó¦‘ób9O-\Šªþ#þ‚‚*++CcŠm‚ªLÒ4¸ØX)ZºH.×|/fÿe‘kÕ"¿ü$r³íú8p@€¼±t`åNŸ^ÿe½RÓÒB0³8Ÿ9»wìNÀ4¡ÏÁ\·`ªqß9111t)´äœœº¤p˜W»º0—-é˜Ü²; ×þA$-æ¯eäbH8|ßÙf³µ=cL5Œ?{³³ƒf[›³Åí&/ʼnýÆmtÃà‘ÀCŽ"B(ºÆ|ìΟ?ï æäÔ*Û·“‘–Fßü% ™ ¸uD¤ò^ÝÁÙ³g#~¿ÿ-;{)ÙÙ#F"#zøD"‘ ×ëýnÜ­ºº:Öét6“GÛ(ò` ªª~™——·é±Zæ©S§^‡ÃûED…!"L@ÓõV›Í¶¨°°°ã±:Úó³ãgC«Ž˜Q}í°8”!‰fÄùÈLôcgp¿—»¦ö£ëîÛãn™r<ÏFÌÄH˜õæBWlBTP¢½WéïñQ˜ËìÔVÔ„°ÂÄ}¸ÌÆ×€/€kãÍÀIøÎ:zj§Ð ТCLR†#îˆí¸ÕÓèQýW2ÀæÞ7¦k<ü Hï:›¥lQþIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon-32x32.png0000644000175000017500000000357711273045225023637 0ustar julianjulian‰PNG  IHDR szzôsBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDATX…¥—mlS×ÇÇ×/ ‰ó:BICš(lhF D/ÚÐ’T²Žµ…Ò5LÛ¢LU÷¡“†¦¡Œ%!±õE¬LBx e e Š’:/ kbŒ$"ر“ØÆ¾¶Ï>¤ $1%Þé‘î=ç<ÿÿÿ<ç9÷œ‹”’or ¨n#€8¼ˆgÅ?ÿä» Ÿâ7€ŒÿG€øšhš !ÞŽ"??Ÿyóæ‘™™‰^¯' âr¹p:Ü»wï?@™”r4&Ð3,¦!Ä+ÀYEQ4K–,Ál6SRRBAAF£¯×‹Ýn§««‹ŽŽ:::¾ÖK)Å+@ƒ¼ 8 hæÏŸOii)EEEèõz ÉÊÊÂét¢( 999¤¤¤ Ñh¾|ÿü™^€z½^Ö××K›Í&Ï;'GGGecc£¬¯¯—ííí²««KƒAY]]ýdM¬ˆ·&e@Ql‡Ãäææ²yófvìØAcc#—/_F§ÓQWW‡Éd¢¹¹™‘‘‘‰xN×o&Õ€¢¨ÏÎÎfûæ5twßâ?_N ¨j‡ZÌÙÖ‡Ø>NY­D£QEA§Ó‰DªB¡ÐŸâ „x///ïwɪª°víZšššÈñ_€îÃcIù@”°åc>ûK3{öì! ¢ÕjÑjµD£Ñû¡P(WN©î}ûö%ÙZ­6¢(J‚ªª‰Š¢Ø…”!ÄZ³Ù|±¢¢BÓÐÐ@UUGŽA¯×!|ùKP}»ŒÏƒ±€+W®°eË<ƒa|2¯ûýþ“O ¸rþè;Þaÿ¶Ô”¤(ÃèhÀXR<ï¼F‘#„8¹ÿ~Ãá ¶¶–¦¦¦Çä%?CÆq¬VðùXµjW¯^%''‡h4 €”ò ÑhÌøhïÎ…?ÙþªµÏÑÿkE«Û¨ªò5crâ˦…Ï §¥$%ü¾¦¦F¶´´H­V+KJJd$‘1ÍvSÊ]»¤œ;WJ!¤,@•i!|ð#0C$B8#¶û..ò U"}vf%&³ð…å¼úÆINM ¼ÜJggçs3!пv‰ã»Pn6›Ö-#Šâ¸3@¿ý+úûÑ¥g“ô³ro-‹–®˜¸`Á€á Rö !j_¤GÀÛŸ7³¸b7Å ‹YPœÏòeÖ¯6aú~´ @ ò'Üž© €”ò{ËÊ ¦tvtuãóPVöm¶l´`*)€d=Œ:áP=üíÂ4À¯8f*@;þ°déR×á¶¶\'cלo‹ü‚Ä÷w †Ç¶Ì}8û!)Ò#0wî4À¬¬,ˆ#nD£_a6ç>g³‘—ž‘Âå¡÷þn·‡Òëè¾»Ê7Á¬YSwWOOO\&Žã®®®ÎÐ[op²®¯ÉÄ£ü<·Xzœ„+¶á_dÂøýþ “Üf³IÆ.®ñ °ÙlGÝ••DæÏ'¯·—´– £>Vß¹‹{Í&üYYIä±|pp°[J𩀉%ðz½ÿlmmõ†OŸN}¾µ•ÁO?åQy9$$Œ ðû¿h|)ÒÒÒf|€)’3gÎ+..þA,à™˜ªªÁ¼¼¼¹©©©C3Ñ>ù’]ãñx¶ë'ÃÓíi¢nÞ¼yÚl6Ϙ|š‹ÅâjllükYYÙ¶x@ü~øÖ­[?7N;µ!??ªª+Ãáðœñ¶§ÍX'}¨" !DÔív78p ?^1LÚÛÛ͇ã¢bÎÔ¾$\ÒB–á!‰ÒËpÈ€WÎþW^²w ëNÎø ·É8Sþ°y ˜MB3ì §fŽˆ9ZO4“¾p1iä¥9×HÌY™KA&åÁ5RþQŠß}ˆ{é 8S¾%ñïÌ^¡0»eör2"2[ÉlÁô༕èC÷Áw„€È#ð߃ (^ò©° xhÎd yÚ@UeðÊõž?ç,5•†>1Ö‡ÿ‹€ÿð\;ñöŸÃAIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon-48x48.png0000644000175000017500000000640111273045225023642 0ustar julianjulian‰PNG  IHDR00Wù‡sBIT|dˆtEXtSoftwarewww.inkscape.org›î< “IDAThÅšypTו‡¿ûzS«µÒR$!XÙ³:ˆA8àÈ68DOÀÁq9,I*0à1†ÌæÁI…"ãr3a†±S`l2Nñ`ṽ „ÖÖÚÝênõöÞ?ZÚêTNÕ)õ»Ë9çwÞ=ç{¯„”’û%!D"ð#` Œê«Àe`»”òæ} ~’R˜Dà_V@Þ…ƒÀN`ÔýÈ}Bˆ‘Àa`L÷öØØXL&Š¢ i~¿¯×ÛÙíþVJù»Á¹ù.v €bp°¤¤¤ššJrr2 ˜ÍfEAUUÚÛÛq¹\´´´ÐØØHKK‹üLJ¹õ¯@‘œ,F£›ÍFff&¤¥¥aµZ‰Ç`0 q¹\455a·Û©­­åöíÛTUU!¥|IJ¹#Úô÷0>ø°@Øóiiidff’••EVVÆ #--ØØXÜn7õõõTUUÐÊáp¼%„(•R–F€rþÿò:°Ùldggc±Xèt:±Z­Øív***p»ÝX,, :®L ð‘")š".!!Dá Àf³±víZÆGFFF£—ËEyy9Á`ºº:ÒÓÓÉÉÉ!55)%v»Ý»w³sçNÚÛÛ;E½)¥\5Ò¥ÎÓ-5._¾\ž9sFƒAùÎ;ïÈÝ»wËP($ív»Ü°aƒÜ¹s§,//—MMMòàÁƒÒápÈ`0(KKK¥¢(ÝS¬­4 ÀBzåöåË—Ëšš¹hÑ" Èììl¹jÕ* åœ9sä‡~(ÛÚÚäøñã¥Á`=ô ò믿î!GQ©×ëK£ R üsï†={öpîÜ9ôúpÜWTT SûÞÝ‚æ¼AÉþÿ ¡¶‡ÃA0D§Óa·Ûy饗zÈÑëõèõú F£q –Nõ‰!Äc„—O¿4uÂh~úw$Ü<5ÚŽÐü]}R œ†1œ«OæÐѯxk×4Më1¿3;©ªúE ˜1h½–ŽYQ”Ïsss¥ÙlîS"Lœ8Q–••Ié©•òH±”§†ùs¥,Yþý»¿‘²á¤¬««“K—.í1_!cbb:Y5›Í™Q+%„Š¢(-X°àÛªªÆîß¿Ÿn}¬[·Ž×_ƒÁFîk‚ã/B»F|ŒIp{?Lø7°>Öå ={ö°bÅ œN'BL&Swçíõù|‹ïæà+V¼*¥ôH)[4Msët:³¢(ñŠ"RÞ~{Û/ºø÷çž{nÍÔ©S)))áÀ]B¶mÛÆÊ•+ûJ¯+ ¿€qkÀbƒ–2õƒ>ÃÊÊÊ(,,Äåra2™BtviRÊ1>ŸïFÆ;*ŽÎ¹^YÿÑh0Æ[LºvÐØî èPD(gøÐw•ãWΘ1cÍÂ… ‰çüù;!°iÓ¦þøÆœþð5BVq§k!ê6aÂ>ýôSL&Sï˜P€-Bˆ>ÉdÍ¢9Å'N_Ý ‘ªI1Äç Å5µzÍš&t)Ö5gøÐ@ž"„Hˆ‹‹ûeqq1”••QSSÀâŋٸqcÿÆwÒø  ÀŸÛw²ePTÓ§CEE×°ÂÂBÞ|óMBÝ€u8o~LLÌ!„²qÙwg®YøÄáõKžrjÿøÚ¥?g ‘X³‘´ÔxFʰô¤«‰ñæéIÙ³rYæÏŸ/Ož<)ß{ï=™-™œœ,ív»½ÿ¾”RÆÆ†?- e\œ”gÎô¦iš,((:®+˜“ãcåÌüòÇó |ÿ¸lž|vZžŒ1äÊï>áxmåâw[o–üSëÍ’/Zo–ø[o–li½YÓ=ˆõ111ß;v,ׯ_gß¾}TtxmóæÍ :ôîÞxã xùePÕð³^¿ù ,YݶÃÛl߾ǧLbLzrsH’ˆßíÂd‰3yڜܰ;1˜b˜òìÒO–-[öÃŽ©¯9*Ž’²g{«¹¹¹5Ï<óLFuu5{÷î›—Ë…N§‹lxu5¬Zöl_¾<  ý>J?ÿ=eÇŽPqõ"z³¤† ÑÔÖΕ*;¥×jФ$ •fffή¬¬l½—ÿôƒ!¡´´”cÇŽu5Úöì!éúu(/‡ÖVðùÂÜØMMàp„Koš9³ë§¦ª\:q„Óú(.\ø•”rýƒÐH)/ !6 ØÐßSþû·‡ùýÙ <œ?ŽÆÆ:~°dS&O"gÄpR¬‰á<ŽHKKƒð!ÙSwMÛó’’6‡ƒ?G\SSKMM-ÏœNçéæÄDBO? Àå•+Ùqàu§Í®œ‘ùâTÔa9p F Œh`$îæñxµ| oÞ?qþüù@Á+¯?ûŒ†ÄD† {ûmÈKBJ ®ßÄs´ߺWÃqtMŽ´Tú#¿ßOiiéÿD€”2¸uëÖ²‰ L }ôÓ6m¢ ¡]s3¾¼<Ú?9‰ïé§‘ññ+òîBeeeíõõõŸJý|y=Ïn¿ß?Õ?~<î}ûª Ý÷ݼ‰îõ6jkkOËûye¨€üüü---[âââ =:Ô;åyôÒÐаmÐBˆp:½k×®ãÇŸ Ô]Ommm}QQÑ7¢!·ß¢e̘1«UUý¶ªªÆû1l äv»7ß÷¤ñ~àðáãúü~ͬY³F÷¤PIJ1==ý‡­­­åŠ¢Ü×ÊÝÞˆ¢(juuõOˆ’ñpK¾cÇŽ=v¨ªj¸Ÿ¥"¤Šv’ÐD8H)?(**Z2h«{躇a‡zKJù“K¦Š1ÊR !!äE†|´’É õ±ë“ço|˜ð MÔèÞ÷Äÿûdüÿ¹ ?6ê™í–É¢MA•}·Š6CSÒëñÃÁd 7úšÁS ®òðÙ)¬gî©_ýeš&€ºy˜ÓÆ8dúX úÐüNÚ<~œA Á\jB#Ñdí$zëØðaoR> ¡õr˜‘9Ì=µÿ£è/ˆKlæ³$Œæ] ´ÝDq•“ØÁÃ]‡¸ä}”ª@z_´™@ ‚»£Bö7ƒû6xk:˜ü…š– <‹·&¬´ádøâBoh~¸ äîš2Út…³Žq¨¾tþÓÐttá³B^Â;êt.ZÆCï‹î¹§7ºž5?øìà¾î ðÖö0Ð|ÐË8z¢°ÆiX hH-<&äîÏøW™{êJ4ü?'ý[“Á°÷IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon-64x64.png0000644000175000017500000001137511273045225023644 0ustar julianjulian‰PNG  IHDR@@ªiqÞsBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDATxœÅ›ytUÕ½Ç?ûœsï=wÈMrïÍ!! „™*”(QÀ꣥ZA‘VõÙg -µÃs©ZûZûV—®õ|A mÕeƒm­-ˆ¥Ú ‘Á0 CÈ|3ÜyÚï›Ä„Ì!±ßµöZçìó;¿ßþþöpöð;BJÉp@a–Ó‚¶”\Nµ¥#ÀŸ¤”áa1:R^WŒÀ7 @ U´É¯×öp¤ë%¿ ¸4@âצKÀ²µÄP»€âIà@´çiš†ÕjÅl6c4Ñ4 !RJ"‘Á`¿ß×ë%Òæˆ§¤”†TˆaÀ  „0/¶çÙív’““ILLÄf³aµZÑuƒÁÐá€P(D ÀëõÒÚÚJss3x½^€W€G¤”¡á$7 >ƒq€BÞF\..— §Ó‰Ãá ))‰„„¬V+&“ EQˆF£ƒA¼^/---455ÑØØHCC555ÔÕÕ¼Ü)¥ŒŒÑÞ  Rþç´‘WU—ËEZZ©©©¤¦¦’’’‚ËåÂáp˜˜ˆÙlFÓ4Âá0>Ÿ¯ƒx}}=f³ƒÁ€¢(ÔÕÕ-hÓ¿nXöƒ;@q/°¶ýÞb±`µZ±ÙlØív’’’p:¤¦¦v8Åét¢ë:^¯·£¶5M#‹ …:Æ›ÍFcc#Ñht­bŸ”ò#¶ ÈBˆ ÀækòÐuÌÌLF…ÝnGJIss3)))(Š‚¦i "‘åååí$QU›ÍÖ1H !PUµ}`Ü,„8.¥<=|»¡_!ð*Ð9?##ƒ|¬¬,œN'‹…X,†Ï磶¶¯×Kmm-~¿ŸŠŠ ÒÒҸᆰZ­(ŠÒ!WZZʧŸ~J(Ô1þ%¯ !n”Ã5KëiKY3Ìf3=ö………äåå‘‘‘¦ÅU®\¹Â±cÇ8zô(F£‘ÂÂBrss=z4f³€h4JUUN§“={ö\ksV›Ý?^/Áþ ôõP¡ݾÑyyyäå呟ŸOff&‡fùòå¼þúëèºN^^S¦LáôéÓdgg“››Ë¸q㨯¯§¤¤„Ç£ª*™™™Lœ8‘©S§öd~C›ý‘E?3½•ô0‹ËÎΖ{÷î•>ŸOîØ±£#„ rùòå2ËóçÏËÂÂBùæ›oÊêêjY^^.sss¥Ñh”€|á…d$‘~¿_N›6­› MÓ¤ªªÏŽôL°×ж¸yº§g/^äÃ?$óÚk¯uä·¶¶²k×.žþyÊËË)--%³{÷nZZZ:dËÊÊRRVVÆñãǯµ¦i¨ªº¶­#‡>jÿËô1—·X,rãÆòòåKÒépH@ê&“,}m³¬Ù÷œ¢çççsìØ1L&ÓÀ/.x.Ã{‡a×ûpä?ñÇB@U¤§wy+3}útÊËË{³¾±úŽÍ6{Òº@sýt·'h5h*‰&AÄ–¹ûk_Ur2Š=ÁŒ¦vt¥`]Rέ¿î¬L–Ϙ1#«  €H$Âîݻٷo_y€_|qäp Nœˆ“\3€Ïž iiÝ^3 ”””póÍ7‡1>›:­ G;•Éã³·b”p€:w ¯~pŠeËîÅ«=ò¸_°™Å!G’õàN`ð>ðHRέ—®µ§éº^œ““ƒ®ë8p€]»vqôèчzˆùóçŽ| ÷Ýo¿Ýøš5ðï@AA¯¯±zõj6mÚD‚IeÎıŒIÖIMK'ØÒ€IЉ„\n‰ëŸ2e*º®¿°~ýúMmj>þ§éB™9)çVo¶ÄرcÜu×]7¦¥¥ñÉ'Ÿ°mÛ¶öJ4MãâÅ‹ddd œ|k+,^ ï¿×NÞî¸Þy§_ÞæFþñç×yó·ÿGºËA8àÚäDà÷yñùÔûŽŸåj³ŸP(D~~~8‹>sæLÝÀ šÕjÍkjjâÊ•+ìß¿¿ƒ<@nnîg䥄êj¨¯£1žL&ðûãy ñ>^R.ôlmãÆ^ ð¶òQÙvŽïŸOOFOH"'{ Á€ŸX,B8¥º¦Öw¶Áo>|æ’ˆµùVÑh|¯²²òë~¿Pä´h4*Î;Ç… º}÷+++©ùe\'OBmmÜC|$ohˆhnw÷fÞ’“»ÜFBAŽíù;G>ØÉ…SLj†B¨2& ô† ŸTµðÏwOÐŒ,1™L•Š¢Ì‚´X,Bì çK¼Âét¾ëñxtô:ciZT¸zuh/‚;ŠáñãÛ°Ó§?æà®Tœ@ïkó!B“RV !~üg_‚nà.à­œ&,½µÛóp8B½;ÄÅËè† Áp wsˆ‚·sõ¿‹†1›mŒÿÂÍÜvïJé™* Á``öìÙ”••xͰ´×ú` 0©/áÓÀÌŠ þ÷í,œ?ƒA£Õ+Qânö‹A0bÃl „AF‰¸ÒÈw¤2éb#ÓKwtYæEEEípúå~ H)CBˆUÀ~úÙ*÷JÉÊÕ?dÞܹ¬Zu?Ù¹ãqØ "¿ÏC8Ä‘d¢èÆqä† Yðû]ñ±cÈÉÉi¿l’‚>ÐÑ凜…¿žÈ‹»÷íãà‘#dCS³›úúFvnÿ-)òóƢ놋Οr!].WûåÈ´€Nx xb–ÑÈ¡PÿGõ~¿ŸÓgΰñ™õÌùÂT,æÎ2’mpc!,_Ÿ&{<› ·vKz‚Óél¿öpmswìœ?Ÿÿ\Ýå»á¶ù_äƒwÇ´ó(ÛÛG-¯¼[M• 4ÃŽ7\ÈϳTÃÌ™¶'ßy‡'JàP[: ä…@ᤉn™„ÔøNÏÕZ/ 6½okÓóã©Ú ûç€ Ù¶ñ `5¬èâ)eLñ±gêÔ›lmyÙméžkßliWœ|]C£AÃfQ …BF¸ê†{áJ øƒ 0BžxXPÛàØHDô4ù9reìØ›ÒÎø‚§7\º —j!;•}‡*Ðuy™ ƒ‰Q[ÿÕ-°ndeÅP} ¿3¶š~g¬CAOø¨¦¾žØ¢E(¯¾Ú‘)lÞŒúá‡ñ‹xfk|é|ËÜ<EPuù*›~OäÆyÈtÚïá\¡?tvJMM ŒzúæT[[KxÉ’.™'Ÿ~šCiiøŠŠâf3žQ£xû½3 * V »šp¡¥K ‡Ãו"‘HGú¼[@yMMM$¸d‰¦MžŒzâè:ïjîüƒ]gÀ’/á‰FAðzBè[ß#€ÐŠCªñ¾PSSN «Ò6tkRÊHEEÅ¡p$‚ï»ß 2~wïë:l ÿªü áÿYIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon-96x96.png0000644000175000017500000002041411273045225023650 0ustar julianjulian‰PNG  IHDR``â˜w8sBIT|dˆtEXtSoftwarewww.inkscape.org›î< IDATxœÕ{|\EùÿßsÎÞw³»Ùl’æÒ¦iÒK°¥--P.¶r¢"¨\DP@Qðkå‹_QAä§‚¢@UDä‡üø ÚrJ¥ ¥—ôÞ´)m’¦IºÙÍnövÎÙùýq’mÒfsk.ý}^¯ymræržyž™gfž™óŒR2ÞB5½Âìîß°ØlïþÝì’RêãNè8@Œ§„ó€ï—bY[€G¥”]cAÛDa\ „8“ñcQíÀÏ€_I)£ÇLØñ)å˜`ðO@ŽrßìcIÿx„1ëBˆk€Çk®46› ‹Å‚ÅbAUU„!²Ä†®ëhš†¦iýñoà)eÛ˜Tb0êBà࿌³Z­8N‡›Í†ÕjÅjµ¢ª*Š¢‡{¥®ëèºN:&N“L&I&“Äãq Ãè)vp¡”rû¨Vdœ0ªB8€?—õ~ît:q»Ý¸Ýn\.W¿B°X,Y}Zÿ‘Ìï ==# |VJùú¨Ufœ0jB/bê}, yyyÙàv»ñx<¸\.\.W!ô¨!0{@&“é—ù]]]tuu‹ÅˆF£D"¢Ñ(€Ü$¥üí¨Thœ`B„.àuà„žg6› ¯×‹ÏçÃëõ’——‡×ëÅãñàñx²=¢G=½@A&“Á0Œ,ó‰ÄQŒ·ÛíÙ<ªª‰D¬RÊBˆ´”ò£Q¯ñÀ¨x”^ÌWUÇ“ezz~{Ò#—Ë…ÝnϪ¡L&C:&•Je[}4%f{‹¢(˜Ã d2t]'‹<*„Ø ¥Ü4JuS³„7_ìý¬§U;NœN'.—+«~òòòðù|}„Ñ#‡Ã¢(èºN2™Ì2Þn·ggIGÎŽzåv»I$†ážB,RF޵~cc€b>ðð‘ÏUUÅb±dg8V«›Í†ÍfÃn·c·Ûq8¸\.<~¿¿ß×ëÅn·ljD"¨ªš R©Éd2[NO¹½§±V«µgvT üøô±Ôo<0b!òç{®4RJòòò(..Æï÷ãr¹PU•d2I4%///Ûš{ô½®ë¤R)4M#‰°{÷nºººÐ4L&ƒÕjÅn·÷Y/d5¢uã!Äw¤”Œ´Žãcé*û‹Ð4 ŸÏÇÒ¥K©®®&//—Ë…Õj®ÉzTÌ¡C‡ˆÇãèºN<Çf³¡( ‰D‚;w’L&ñx<äççc³Ù²t*•"‰°qãFÚÚÚH§Ó¹k÷ !Þ“R¾u õSŒHBˆK€‹rÅ®¾újÊÊʃø|>Ün76› ËðH$B(bÿþý8N, RJÚÚÚðûý”——ãóùÈËËÃáp ª*º®“H$èì줴´”üü|ž|òɬ € üZq¢”23’ºŽ5†-!„‚¹Ò퇃[o½•êêjJJJ(**"??·ÛÝGE$“I:::hmmÅn·³eËÀ?¦L™Â¤I“(..¦  ¿ßß'¯a„ÃaÚÛÛq¹\444ðÌ3Ïä"i6ðÌ{ÜA<ÉQ¸¨Í9cÆ ¦M›Fii)eee”——Å|0URRByy9eeeH)ihh   €¢¢"JKK™Á`»ÝŽ”’5kÖðõ¯Ûo¿uëÖevN§“`0È 'œ€Ï爬Jàkéë¸a˜æå¯1ˆ©xÉ’%rÍš5²©©Ijš&“ɤ,**ÊÆ{<YUU%kjj¤®ëRÓ4yðàAyçwÊššùâ‹/Ê;vÈT*%Óé´\¶l™œ2eŠ´Z­Ù2®½öÚlÞD"!ÿýïK!DNš„Òjµ&×D›Ÿ CîB'ð?ƒ¥Û¼y3™ÌáñîÙgŸ¥µµ5ûEE6l ‰°iÓ¦l#xõÕWÙ³guuuYâ6nÜȺuëxôÑGY²dI¶Œ'žx‚¦¦¦lÞ5kÖô4~ѽNp¨ªúàPë;nFëÿ/†¸aòéOZîÚµK¦R)ùÔSOßÓšëêꤦiòŽ;îÈÆÊW_}U¶··Ëõë×K@º\®£Êhll”š¦É÷ß_œ´(Š"‡t8Òf³¥ßD·ú>|†ê‡*@^sÍ5rçÎ2•JÉòòò£âçÎ+õtB¾þ܃ò»Ÿ›&—i¡¼ãú%ò»WÕÊŸ~}±Ü°ö5uÊ+®øÜQyoºé&©iš|ë­·ä”)S¤Ãf³eàp8¤ªª÷N4Ó{‡!™£…'ï±Se ¹é¦›¸ê² X·aýò78vþë–«ùÄÇ<¨ Æ¢õ¿™%¥ Ó{*”_Ä®ç_z›ÍÆg/>‡ÖŽ8?èW¬\¹r@Õæl«72™Ì¡T*n]Æ CÀ¯…_s:¤Óéþ<ƒâ™ï/æ²S\¨F þš(£8ˆ$­\ðƒ­¬­kR!vûÑ–’L&sa*•Z9l"ƃÂBˆ‹ìvû•Ó§O§¬¬¬ß —n¸íÛ·sÅßA­¾’œÌwB^5¸+@u­8 È?ÿ¼õ¹èš>}úÞŸãùqc°!Î,..~­¶¶Ö&„ ½½]»vÇ-¸¤¤„?üáœ{î¹}#ö>›†©¢»a˜Ì· “†®FèÜy8>¯Nù%ØkŽ®®.n½õV~÷»ß夡ÇRš£n§ÆãñµƒVdŒ‘SBˆ“ªªªÞž3gŽÇãñ‹Å²ÓÄ^âýâ’K.aÅŠƒ9Tmã*ØxÈîrü³Íà,#ÑÝÚ©øfÁ¢‡ÀÖÿBëùçŸç†n  ×c¢îRÊuÉdrÁ€n¼ñÆ¥”*°AQ”k øWQ”»…Íd2s€)ÀŸ€7(Šò¤”ò¹Ç{ìÈ¡‚„UÓ¦Mûç¢E‹<Ó¦M# b±XH¥R2ßårñøãó /äf>@ù'¡újóoÅ ¶|p–‚·À¥—^ʦM›ú¬zÐ{=ÒOç»\®Ks94H)ËrEQÒRÊ€¦i @†Ñ¨(Ê.!ÄGRÊÝBˆ e%ƒª"Þñå¹^ÊÒqdB¸§L™òÁâÅ‹gÕÔÔàõzikkcË–-¼ÿþû47÷?ÚívV®\ÉÒ¥K‡F¹‘€7/=E§Bá)<-жZß…Ò³¡êª!§iË–-cÕªUGÑ•k,ê“Éäl)e¿‡ŽC¸áÍ "ñå m>¯[iš¦‡9xð`¿„¨ªÊÓO?=tæ¨N¨¹™>Óv©“¤“`Úç†\œÕjå¯ý+§vZŸçƒÌòªívû±Øˆîܱ§ùÌ OI$Ó WÿgçL`ÖÆ­ûËCáXÙþ–Žàî½=‰dÚ±³á H¦4š†éJ¤,ÀÉÀÓ}z€bùYgußé§ŸÎüùó ìÞ½›µkײzõj¶oïÿìÓŠ+¸þúëG@¿„5_«'™ƒ­ƒðf(ùœ4ìÃá0gžy&uuuÀÀã@7%“É*9ÌýãpÛóÚ#©uz:‰NX,*F&ƒ@ A:­c³©$S:—›UÅïuõ.¦1Û„§TUUÝ[SSÃìÙ³™5kªªÒÞÞNss3û÷ïï—ûî»o„Ìp· †x3tÖCl¯9ôÇ|]‡ööKôûý¼òÊ+L›6 0÷é‡ã×C¥øÎ‹N<é¶e‹^¸ÿþ߯Šu%‰&!“Í0@@2©!tÅS8V6+Ó&)*ÈÃïuu¿R@ ø|vŽær¹î®­­UfΜIMM Á`­[·²ÿ~öîÝKW×ѧ¯¿þz–/_>TÚû‡o”_-o‚KT}ÁŒ{ã Xµ \.…L|ô‘ùÿ@7“DII /¿ü2sçÎÍî” Ò ®t:›‰ÄOú‹üŸó¦VÊâÙ$CNCq”*F%Ëìßßœ®¬ª¶uFávÚ Gâäû\X,*¥Åþ#‹ùp¿rIC¸áÍïÂ_¹¤ÅfëŸ;wîÙUUUL›6ŠŠ êëëÙ½{w6ôWÉ%ãâÔK¡t)$ZÁ]û¬^ ±Ô×ÃúõÐÙÙ7ÅùKÎ"§OŸÎ]wÝÅòåË1 £ÏÙÓø±ËåJÄãñ_|gIå$Kqå÷µXèiV[âaT‡‹L² !%‰Ö”}{›;ƒÅåA¯ËÕ¢2«jR~X<â¯\"ü•K²ƒ©Àétþ`êÔ©Lž<™¢¢"š››Ù¶m;vìÈnމ‡zh°MáÁ–/¯†ÿ{?x½ð÷¿C?‚Ïb ¸nÜvÛm<ýôÓlܸ]׳{Ò9 l ??浪f—æ ‹;†EЦX©ojå­˜7ws Xe%“I·hnœYá9¨‘k‡ðmÌVŸ“X‹âÄéÓ§ŸWRRB  •J±ÿ~¶lÙÂöíÛûmý^x!—]vY?ņ?úlÜ;v@ŽÁ>‹yóà‡nÌæJø±Çã´ÓNËž¶;Rª€“ò˜^ì¥Ìï$¯`RMp6æQÿîiõ9i´Z­ +**²{¯û÷ï§¾¾ž­[·²uëÖ£2¸Ýnyä‘A+?,Üv›©fV¯ÎÆçƒk¯…›n‚!Øz°hÑ"nºé&~õ«_eyÙ¬V¦OòQtQQàÄ,%ÙцdaèäùƒlØN—ÕGg"=Ñwê'>iÛÙØzÿ]wÝ•]åù+—4¿~nxSüþÊ%‡†BŸ¥°°ðŸÏ‡ªª„B!:::ضm[¶l!•ᮻ¢bÈ ÷Ý/¾{÷æN3g¼õ–)„àÇ?þ1Ï=÷^5ÍÌb•v¼…e¤c!‹%cZwUiŒ…±ååÓ´w'­]¶ì¯ ²aÃ8Ðõë_ÿ:çÛ_¹Ä†Ä|Q]]½rÁ‚Ÿì9™ÐÔÔD]]]¿­ßëõÒÔÔ„Çã.úÇ}÷Á÷¿ýýr;vÀŒ#zEó®Í¼ÿÆ?xwåsd2yùEDBm( g°”I……ìÛ³«ÅB"™¤+‘¢1ÿÞº—¸fòÙ0 4MÃb±PPPp[KKËÏGDL?°¨ªZ­i­­­D£QöìÙÓ/óÎ9çœcg¾®ÃË/Ãc™í`X°`ØÌoolàƒ×_bãÛ«hoiÂ,!cè—‘Ò T# ªEK±gçV ]£ÙpðΆÝˆ¦*¯{Õ,¥üJKK˨î#X2™Ìäp8L(âàÁƒìܹ3gâ¶¶îÝ«]»`ˇ¡­ ‚hÔd®¦™¿™Œ9¸vvšñ=!†!leQS3¤dí-¬ãE6½÷Û×£º|™¡’µâöAè©8ªÝ…®§9ÐcîÆPŸ¯8!š)ä´ü|ÞVUÔALǹì"8ídX~¢¬ þùO˜5 €t"Îæ5¯±î—hom!t #¥eåhÜOºóz&C^A±P;B@ÅœS9ãüK¸ò«·±¹ûd7t)儚ÀËÀyÃÉtpç("¾r5\~,šPs¢¹ÃjaûW¾Àúò;>Xƒ.%ªÅ†žJàÈóÓjÅ,¡ ?Ÿ¶æ}Xœn¢¡vüE¥|ìôsXò™/âñðÈ#pË-·ùú<)el”«4$L·'“x˜? H§®û|á˜S‰èު̈°ûäO°¡¦‚M.½´‚Îö¸óƒhÉ$6‡ƒÎPùE¥„[›pûÄcQ,ªBÕ‚sÎg®dJÍѽ¦¦&ÊËË|Üp,755ñèŠ'ytÅ“}ž_ÍeÄ)Ê&™?'?w‹f#«¦">úFsÿ¡½NîM˜úܧ£ÿàÈ}¢lDX¸àcüü;˜7g:“Š`> l*|óËpÕU°oŸù07OG b0 Žwtœ9k×h8¸øÂ%ü侟PWŸ¤aÿÍ.gÍA~ñRäg.1­¯n7€Õ O>9xþÐK¿P§Nå÷>b~?\“¡‚e-aÝšçxáÙ_vf̘AóÁ¡yB€øÒyð꾊Üòrû;Ⱥwì[ ½zÀ˜š›C®US= XùØÇ˜³z5/aNVb¶cOÚ1OvÚb  88óî;8óºOÈ?l-:qV»wnä¤Ú’a)œ¨<|ÚZ>¹ 1wî°Ê8½zÀ„úšëWRÊ”b‹ªªs™;7{ZÁ|¾;ô 9o=Ò('矀Èïû´0`£00i@‚L[¨ I lP„ù´Kƒ¦Vxc-üŸ—áõcs×ã XwL#²¬kooŸË¥—Â/™3‘†”†&ø¸ÙJ C²µ>ŒEU˜9Í‹¢:;cx½æþ² Åáõ÷aí‡p°„xl6È÷ƒÇ ‰¢ª N: ^{ÍŒëÆP¾s;ÙíÕãX¶··ÙX²ÅéD$†¹>k8|˜71Ð2NRz†HÔ 3ÒJKK; çÔÂ/!¹nÿ6ò†[Ì)§× ÂØ|(ØÝˆƒ±C Ö0l6ÄÙg#^z©ßDЗ-C„BXz¬ÚÕ€ÄÜñq;±¨y¶Óå òþºƒœû±jøú=Èú}h+WAe/‹æ12w(è¶­—#é>£ˆ°±½½]7 ÃÂ`Ë!€ÔÏ~†výõ ë¸gÌ@éÙ+Î÷e½s»œ*§/(À0tüN~ôF8NúÕWAUGen?t÷€ U?0€¤”IEQ¶¥R©­ç‡ÕbAÑ2ÓgœÁ,`V2‰Ãá@ƒ‡ÏïO›B"•áúfÊ&ù˜Zž€P¬,ܰcó./¾h¦CæçjàÝøpÌ^Ñ0 ®‚š·oß¾¥‡èè­·’éž"f,–¬#Œs¼+{™ô¸‘dÂ@yc=™ë–úôåD¿úÕqcð@¡¡¡]»v=1vl:ÝÀÝ´iÓt]@/)¡í‰'(¼ê*lï¾Ëg>ùI@ÉwôÍôý{aÛ.´¶ÑsÏ#þ§?› §qšé Ö°?øàƒ¦¯ë Ç ذaÃ{öìùiEE…HÌ›Gók¯‘ÿýLýÑPÒ‡OgìvR'ŸLbñb’gœAº¶×—;£ÀüÑÒ«'r¦7€”2ôÄO4”——g?I4JJhùÅ/@×±Õ׃®“ ЃÁ>&‚á0}<ÕqkkknãŒ!ù zøá‡:ÿüó¿1’ã\tvv¦.\è<`¢ãÖ`0ø¦i·(G|çyœÔaXسgÏ„›zcH¸òÊ+÷<ûì³»fÏž=s¬ )†ÊÓúúúãÊsâ]Çb±» ÃøóXÓF³±¶´´4ÞyçÏZ£€áÜ!#Ö¬Y³Ïápu¶{¤oMÐÜÜü‹/¾8÷æÆ`X—ø|ðÁ·e2™äÂãHÅfaµZ[æÍ›7ÓQÆqƒáÞ¢äÛºuë¶p8<¼MÝ †”Rúýþ»kkkïšhZŽÄpÝ×GÜn÷oC¡ÐRÊÑ8­rLjãñù|jkk3ÆäŒþ? ¢¢â§mmmWÆb±ª± ¨£¥Æ„‹Åòæ¬ÇFrƒFTUÕïφ1ìüã=>!¶ÔÖÖŽ²s‹ÑÈoÒ{ï½÷þw$éã2åx|].WdÊ”)K***ÖO4-¹p,WNúðÃßjii™‡1†ªªéªªª»«««s^·r<à˜î’L¥RŸ}ï½÷~‰DÆÅ¶E&ðˆ\2„‚N~º"ïȤ²¦¦æµéÓ§8®oà>¦‹Üìvû_««««7lØpW:ö÷eG¢¿ÆG;3l(¶4cWÒ€„Œnº86Lº´ÒA)»Œ…”Ó())Ù4}úô8Ι£p•aiié“¿škj:’^æWQ›WÏ$WÂâeæ^2šÉ|­ ´(-B¡þ…–ˆ‰BÍe”>§|tŒUŒÖu¶ÖW^yåÙH$r ¬’‡ú®B[ˆ3Kö`qxÁæ‹T;Õô7e~Äty™ Aê$qØ;»ü½÷Óc¯ÚØbäxîrǾ“AV"DÂV¶Í¸´+¯Ô3Š’’.’'Ié$)]„3…Ä2ƒ{¼*´u°dò>,®Ó[º£l°æ™~¦3iТ½˜Þ©6H¶A¢ Ò½x‹Û¹èÝŸ¬‚ãƒá `åÂIHËX½çcqêÌGu‚ja¡`º 6ºÕDÊô­ÇA‹Ñ™¶Ò¬UФUТ—“A=ê—Ny—ÇÎ"Ókϯ£ìj‡d«éâ²÷oï¿{»ÆWäL.xoŸäÂÐÆ€UØQï⪺›ßŽ=l~°z»ƒÛ¼tAX F “éh¦šH‡ñ¦ÂxÓíÌJí$ªÙY;&íð׊k.Ñ †½[hQS¸`þo2«ÅÌ2µ¨ù#aª¥LŠ>Ì0¸ãàüO. .€œ2Åù –Àt¬y¦+y[¾yÙ‚½ û·;X½¦ŠHw@ª£[Mtën™©A&M^æçøVÒ¬ä­ÈYèÒB©½ÞT+=޼„)@‹«[ÀŠY†‘½ Ò=Âí0ó¥ûùÚH(£æãm´1¸¤|#1d›9ý3’Ý­3bê_«TW·R1§‰ÝêGïêÕ ÷´ÃŸ(U:8*¤.V‹‘‘&#µ¤#`õ€¥»w)VÌñ]ž‚öô’tgwëï·ã{êw˜X/žºE˜þà3iH4€b‹ÓüU­‡Ç)·t£›QFÜ|–sLföèu¡˜ïêá u³ì¡\½t›n’IDAT$X5x¢‰ÃÀP ©R³È¤ =:{)ÊnHZ 𠝵×52cª¢‘Á@òÑ q¬0°MÿÂw·‚oÉ‘CJäþPæÞM›6}«®nó=/lö}7“!:JÅ…‹ÖƃOCÿµÄB,þ0ˆ±¸4ŽäK|jmßò• Ï$£é j˜øÿc!öÿ„_ÃŒIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon.icns0000644000175000017500000014221611273045225023222 0ustar julianjulianicnsÄŽh8mk  o§ÑôÛ²„ }ìÿÿÿÿÿÿÿúœ!!ÖÿÿÿÿÿÿÿÿÿÿÿðF9éÿÿÿÿÿÿÿÿÿÿÿÿÿûh+ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ` ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö/¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý%2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡vm_V]e~£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöCáçîóúþþ¶kÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§8ÆÿÿÿÿÿüäÄîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy+~ãÿøÿÿÿÿ×8yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêþÿÿÛu{ÂøŒ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€b‰Qâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•Hüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿu"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿe ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿOÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹Bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ[šÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûAQúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþŽþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎ3ÄþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿycÂúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ%“ÿÿÿÿÿÿÿÿÿÿüu€º¡›™˜——˜—˜™šNI3$UŸ¼ü€ÿûî·q’´°®­­®°¯°±³`T=".4Άÿç^€€ 2uŸ¨«¯²¶»¼½¿ÁfV2'd?€yú‰ÿ¨€ $7izQ0}~ÚïïêߨÙÙ,ˆ|œ’ÿÖ0Zwsxs&7†šµÓÙàâãå€ ¯™”’€‘ ’‘‘’”NI3$T‚“½€²µÀ”l†¨¥¤££¤¦¦§¨ª`T=". 4Îõ½²³Ã¿²µêç^€€ $aŒ—œ¡¥ª°±²´µfV2'd?€ yúÿÿø»¼Ý×·ì€ÿ¨ *Pu‰”debddji¸bT€‡*€›‚ÿæÁëâÙ‚ÿÍ€$3Nl€´¾ÁÆÏÈÃÀÞZpÁt ˆ„ÿÏÛÚúÿþú€ÿÀ€ (2F^`µÆÅÃÄÍÕÞÞ==¾¹9Z…ÿ÷ßÜ¢O4&Ì€ÿš€&$GU4-^\ÉÞÞÙÐÉÊË,ˆ|œ†ÿ„ ›õ‚ÿÖ =RIPM7„uФÂÊÑÒÔÕ€ ˜‹‡€… „…„…†‡NI3$QTQW€6Dx\c t”“€’ “•”•–—`T=". 4ÎæS6:cY6>Èç^€€ Ow‚ˆŒ‘–›œž fV2'd?€ yúÿÿìOP¦–E΀ÿ¨ >`sdebddhh¢bT€‡*€›‚ÿ½^Ì´‚ÿÍ€&=Xk™¦¨«²­©¨½ZpÁt ˆƒÿþƒ¢òÿþú€ÿÀ€$6LIŸ®€« ±·½½==¾¹9Z…ÿêªÈ¢O4&Ì€ÿš€ (*:/c®¯¶½½¯¨¨xÀké…ÿþž= ¹€ÿþ> 0< +JH«½½º³®¯¯,ˆ|œ†ÿ„ ›õ‚ÿÖ )8-657{buŒ¥®´´µ¶8->2 &9I]{˜¯»¼½½‚ ‡s[=³ƒF1O;:vÇ/;%!$.9]œ¸€½/‡ 4>04D‚ͬO/9E7:Y¦òÿÿ€I) ‚… ¯‚ÕκI>98BÖ‚ÿ ½Z1  ƒ…F€Õ Ï̾¹°{7h·ú„ÿ õsC …„ ^±Ã»¸¼²ª¿`û‡ÿ/'„S‰ … O2‹¿ËÕÕw÷‡ÿER‘c‰ †HÌÕÉv~zç„ÿYWœp‰#(ƒO¥ÌÍ‚ÕÔʹȄÿm[¥|‰5**Gƒ µÔÌÔÒÒ¨Œƒ”ý„þn^¬„‰&G=€ ˜ÓÅÀ¥lÔö‰ùX°ˆ!‰.YRÖʆžÊÔ³rò‹óCij‹"‰3lg/ÜKS€Y¼ÈÁ|é„í…ìaƶŽ!‰ 1zyU¬¼_…;Ô›™æßoǸ ‰ ,ˆŒƒtà•5"-‹ÉŠàß±ÍǸމ '” ˜˜ÚÚÙÅÒ„ÚŠÙ´ÌȺމ–°«ªÈÔ”Ó±Ìɽ‰˜¾½ºº‹Í†Ì¿ËËÉ¿Œ‹žÅÊÈÕÊ’ÆÅËÉËÉ¿„‹§ÉÌÊÆÛ¿‚¾ÈÊ¿ÇʾN‹D«µµ³¹¾ƒ¹Š¸»¹§­·Å¼ ŠOanvk]€ˆ‘¢¥‘†¦º²–qJ6DhfhkhŒ 67¢;… H’^þÿüüþîÝö†øܨ>… U±‰÷þ©ïõÜûðï…îÀš­@… O´Žçú®ýýóæ„å€ä§È°?…I·µÉÞçåމۺɱ9…?·ËÀ†ÒƒÑοʴ-…1»ËÐʂȇÇËÊ·#…#ÀÎÌÔÍʯ†qíãÛØÀ…´¶¼´³ÔÖ×Ón†ÿþõëãÙ¬«ª ·èþÿüçéâäá6† ÿÿýùøÿúòéÓ­£õ‚ÿüïò¥‡‡ÿû´„ÿúüª‡‡ÿþµð…ÿª‡‚ € Ž  ?\npbH&Gu ÆÌ«€S$@˜­«½»ª®*†ÄëÃð•»îÖó{€…! ÒA%¥Yºm¬tgrqp€qrI6€?$c[¯•¢£]Y–£ Ÿ ¡¢¤`D5VéÚ²ÄÀ½õ­ h•”—˜­`0tG€ÿÎßÖòÿÿæ)-V~¦¢¨§¤ÅDe¯€ÿöÓæÙÆèÿã.KZ¯ÃÇÑÖÙ/±`:ý‚ÿÑZ}ÿÿ· %K2V}ÙÞÕÄÄIs Ò‚ÿÈ΀ÿ.úM5RK<_wšÀÑÔ×5Æœƒ{gNlÿýДYUD0?a‰ºØÜÝ€‚H±.”cR^Ó. @"#$+E…””J‚*¹ÍÇÛàjUTy¸õÿÿtP €‚jëêàμá‚ÿ°m‚ ‚;w˜Òææ»ƒÿÕ6„&… ‚A€ö¶šÄÿè:•1…#)CƒñéôÚ·º¸Òþô>¢;… 3E]3#rèÖ—Ëö„øܨ>… Cdeo’G‡Øª×ï…îÀš­@… H`Ò"vš«Ù„å€ä§È°?…I›„ÉȈ•ˉۺɱ9…?°¯»†ÒƒÑοʴ-…1»ÇÊʂȇÇÊÊ·#…#¾ËÈ;‡½ÍÇɯ†O¾ÈÆËÀ…´³ξÂÉn†±¶¾ÁÀ쫪 ®ÁÊĸµÁ¹¼É6†±´¹»ÀÅÊĺ­£¡ÆáïáÉ´²¶¸{‡±´´¶ÃÒÛÔÆ¸±ž·ÃÈ·²²´´w‡±´µ„²±–¬‚²³²²v‡‚ € Ž  ?\npbH&Gu ÆÌ«€S$@˜­«½»ª®*†ÄëÃð•»îÖó{€…! ÒA%¥Yºm¬t`nmnnI6€?$Z1c4ClAY ƒ‘‘‘“`D5VéŸ6fZRæ­ U{ƒ†‰Š™`0tG€ÿ€«•Ýÿÿæ) !Di‘••“ªDe¯€ÿé‹¿ÙÆèÿã"8B›ª®´·º/±`:ý‚ÿÍZ}ÿÿ· 3 Ch¹½·ªªIs Ò‚ÿÈ΀ÿ.úD$91) Yd„¥´¶·5Æœƒ{gNlÿýɃ?;-!3Quž¹¼¼€‚Až'…K8F~Í.8&@t~~?‚&¤´¯ÁÇP;:e®óÿÿtL  €‚]ÌÎż®wsÝ‚ÿ°m‚ ‚8o†¾ÈɺƒÿÕ6„&… ‚8·€Õ¥“Âÿè:•1…#)CtÒÏÓ¿¢¤¦Ñþô>¢;… 3E]3#eЋËö„øܨ>… Cdeo’G{Êœ×ï…îÀš­@… H`Ò"vŠ£Ù„å€ä§È°?…I›„ÉȈ•ˉۺɱ9…?°¯»†ÒƒÑοʴ-…1»ÇÊʂȇÇÊÊ·#…#»ÆÂ̾‡½Á½Ç¯†q¦µÀ…´°¦²³Ä–Ÿºn†6Cg~‰Ÿ¬«ª  „vfKd€v{ 6†6;KWeh}{oq“Ÿ{²Ø±s<;[\6‡6;=BdŠ¢jG9{EapaE66B@%‡6;?5„6b>‚6895#‡is32Á   …FŒ“P ƒ E½»ÄÁ)"/ @Q«²_ ‹ŽŽMDyùÿÿêI (ˆ§§µbKm‚ÿ ø7DgÃâÝAòÿ%þá”\=8ÚéŽþþø¼“¯á+:#L; t¼Ö×ùÿÿoL€;q]f½‚þ•ix·èøé‚ó®u½Ûïä€àßß¼vyÊ€ÍÌËÇoÖɹ€¸»¸ÏÐG þõíÑÄ©åþøí× ‚ÿÙûÿÿýÓ‚   …FŒ“P ƒ E½»ÄÁ)\/ @I›[„ˆ‰ŠMDyðÉÑèI s›ž«bKmÿÿæ‹‹ø7/K²ÓÎAÌ¿¬9"òØ}?*0ÉÙ9egq—Ø*2 G7d¶Ð¬÷ÿÿoL€  ·îǺþþ•iHS1XÐÊó®uk z€Î€àßß¼vw¿€ÍÌËÇo|ÈŹ‚¸ÅÇG ³½Â¹¯¦ÆØº¸® ²´¾Å¸¥¶»³³•‚   …FŒ“P ƒ E½»ÄÁ)\/ @4)Ìÿƒ'  ,7BLWaluˆ—ž£§©«©¦¢•Ž…|si_TI?4)Éÿ„)(4@KVblxƒ— ©²¹¾ÂÃÁ½·°§ž”Šti^SH<1% ‚Æÿ…* ".:FQ]it€Œ˜¢­¸ÂÌÔÙÜ×ÑÉ¿µªŸ”ˆ}qeZNB7+Æÿ…*%2>JVbnz†’žª¶ÂÏÛæîôìâ×˾²¦šŽ‚vj^RF:.!Åÿ†*%3GYgrz„‹”¥³¿ÌÖàèëåÝÑ¿§™‘‹‡‚zo_RE9- ‚Äÿ†  9Vo}‰‘—€˜ šŸ§²ÁÉÑÖÙÒij¦š ˜“‹}hP6*ƒÁÿˆ) 6`„œ§¯¶ºº¸³­¤¢¦¯¶»¿À¶§šš£¬´¹º¹¶°¥mE) „¿ï¿ÿˆ(n˜«ºÆÏÖÛÛÙÔÍÁ´¦š ¥¦¦–™¦µÀËÔÚÜÛÖÐĹ£y1†¿¾ÿχ m—³ÅÕâìò€óðêÝϾ¬•Ž‘­¾ÏÜéñóôóòîâÕêa%‡¾ÿˆ :š³ÉÜíóøû€üûøñåÔÀ”~}“«ÀÓæð÷û€üûúôêÝÉ>ˆ¿¼ÿ߈)U¯ÆÜîûúîÚÇÈ×êüûôæÒœuq¡ºÑåöúôçרãòûû÷îÝ·Wˆ¼ÿˆ)+o»ÓëûûúÆw(.h·üûûôá«uh°Èßòüûݪhl›Õüüû÷ìÔn ˆ¼ÿ‰)"dÁÚîúøx9 +H]Ôûöç›ZQ°Íæ÷ú™_;&G‡ÞûùôÒe†¹ÿ‹(PÃÜðïÌ:Rp ³ðöè{78šÉèóâ`NX% 0¾ôùö»T†¹ÿ‹4¥Óîä¡(€kŽ åïÌPh¶âêÌBOt3 €©î÷ë‹6…·ÿŒP¸êã¤)žçÚxÒäÏ3‚«ïîÊ@ „·ÿŒc¯âãH  #¾Þ¶w`Y[^‡¶Üìl!€NËâ­H„¶ÿ#S‡»ŠfD‹×šÿøÀq*ƒ†“ÿedeccee„d€e†ÿ 9T]T@$‡OÄõÿê«8 ƒ„“ÿe€deecdeeƒde…ÿ >ZjlZ>†=ŠÓðüÿùê¾o$‚„ ‘ÿ€deec_cddeddcdspjpsƒÿ <`w~uZ9…K—Ø¢ÿôÇ~$ ‡¿ŽÿïïÈ¢¢¨£ž¦¡¨¦Ÿ£¤—¯ª ¨Öïïÿ 7b€ŽŒxV/„ 0¥å¤ÿýÙs'€†ŽÿïïâÖÖçØÎïÏ×çßÐÜá¿áÜÏÚéïïÿ 0\ƒœ¡“uL!ƒ-¬ê¦ÿüõh€†ŽÿïïÓ¸¸Ú½«ï´¾×Ê·ËÕ¢ÕϽÒçïï€ÿ &Q|¢³ªh;„:‘êù¦ÿþüÐq†Œÿ'ïïã×ÏÐÕÎÊÚËÏÔÍÌÏÑËÛáâçíïïÿÿBp›ÁÀ©ƒW( ƒ2ˆÙªÿùÀj…‰ÿyyv€³ÌÒÒ×ÑÒÔÏÓÒÐÓ×Ûßäæë‚ïÿÿ ,_¹ÛÞqBÒ¬ÿõÅO‰ƒÿ{{zyrusrw³ÉÍÒÏÐÐÎÔÔÕÝàè†ï ÿÿ M}®Õ꺋Z* ‚cØ®ÿõÚ>‰ƒÿ{{zx€r sy£ÂÐÈÐÌÉ×ÚåŠï 6g—ÆàÑ p@ @Ìò®ÿüõ‹4ˆ ÿttuwssuvt€s r±ÊÑÕÝåééì‰ïÿ !N~¬ÍÕ´„T(0†÷ý°ÿÐl‡ JorvxsdPGYjqrq‚°Ûáãéî…ï÷ýƒÿ 2d‘¸Æ»”f8‚ hβÿü¨?ƒ $=ZptxysK$Kovrry§íˆï†ÿ FuŸ·´›tGƒ7¤´ÿã–‚ 9Uivzs|}yu' r˜‹ruu~‰ï†ÿ -XŸ¦™{T( Ü´ÿ øÉP*>P_ikpwzsƒtl'}»Êquuÿ†ïûþ‡ÿ ;b—‘|[4JÆ÷µÿê®3'5GWbnwyssvxw|saMi”…Ï„ÿý€ïŠÿ Ef|†x^<+£èµÿûòàZ2?Xhrwv{|yutrpn^O>& =N4–ÿ#Jdqq\?ƒGóüµÿò×®ƒtv€tru|Ž…w{tl`K –ÿ%GZ_W? ƒ oüþ±ÿ ÷æÈ­šŽŠyz€vsv}{umc@* –ÿ%@LI4)Ìÿƒ'  ,7BLWaluˆ—ž£§©«©¦¢•Ž…|si_TI?4)Éÿ„)(4@KVblxƒ— ©²¹¾ÂÃÁ½·°§ž”Šti^SH<1% ‚Æÿ…* ".:FQ]it€Œ˜¢­¸ÂÌÔÙÜ×ÑÉ¿µªŸ”ˆ}qeZNB7+Æÿ…*%2>JVbnz†’žª¶ÂÏÛæîôìâ×˾²¦šŽ‚vj^RF:.!Åÿ†*%3GYgrz„‹”¥³¿ÌÖàèëåÝÑ¿§™‘‹‡‚zo_RE9- ‚Äÿ†  9Vo}‰‘—€˜ šŸ§²ÁÉÑÖÙÒij¦š ˜“‹}hP6*ƒÁÿˆ) 6`„œ§¯¶ºº¸³­¤¢¦¯¶»¿À¶§šš£¬´¹º¹¶°¥mE) „¿ï¿ÿˆ(n˜«ºÆÏÖÛÛÙÔÍÁ´¦š ¥¦¦–™¦µÀËÔÚÜÛÖÐĹ£y1†¿¾ÿχ m—³ÅÕâìò€óðêÝϾ¬•Ž‘­¾ÏÜéñóôóòîâÕêa%‡¾ÿˆ :š³ÉÜíóøû€üûøñåÔÀ”~}“«ÀÓæð÷û€üûúôêÝÉ>ˆ¿¼ÿ߈)U¯ÆÜîûúîÚÇÈ×êüûôæÒœuq¡ºÑåöúôçרãòûû÷îÝ·Wˆ¼ÿˆ)+o»ÓëûûúÆw(.h·üûûôá«uh°Èßòüûݪhl›Õüüû÷ìÔn ˆ¼ÿ‰)"dÁÚîúøx9 +H]Ôûöç›ZQ°Íæ÷ú™_;&G‡ÞûùôÒe†¹ÿ‹(PÃÜðïÌ:Rp ³ðöè{78šÉèóâ`NX% 0¾ôùö»T†¹ÿ‹4¥Óîä¡(€kŽ åïÌPh¶âêÌBOt3 €©î÷ë‹6…·ÿŒP¸êã¤)žçÚxÒäÏ3‚«ïîÊ@ „·ÿŒc¯âãH  #½×¦^KHIHq¨×êk!€NËâ­H„¶ÿ$#S‡»ˆdC:`„Ãㄆ‰‰†Œ¥ÃÙ©}W;=Qp‘žL…€¶ÿ€Š "]Ž›‡UYƒ´Ï¼³„² ±³»ÌȰ…‡•ŠLˆµÿ€>‹µ²´®l!‹ƒ´ÿ ŠKŒÀÛй„²¶¹»ºµ³²´ºØÔ³|3 ‡ƒ²ÿ $/.! ˆ 4q²Ýõúìѽ‚²µ½ÃÆÄ½¶€² µÀÚòûñÒ^$†ƒ °ÿ -HF:$†>‹×‚ÿíÒ»€²´»ÆÍÐÏÆ»³²´ÁØùý€ÿøÀq*ƒ†“ÿedeccee„d€e†ÿ 9T]T@$‡OÄõ„ÿñ׳²²¶ÂÎ×ÛÙÏ·²½Ýú„ÿê«8 ƒ„“ÿe€deecdeeƒde…ÿ >ZjlZ>†=ŠÓðü„ÿûíι²¸ÇÕàåâÖǺµÜóý„ÿùê¾o$‚„ ‘ÿ€deec_cddeddcdroinqƒÿ <`w~uZ9…K—؈ÿùêõºËÚçîéÚÊÁÉîý‡ÿôÇ~$ ‡¿ŽÿÞÞ¼šš ›–ž–šŸž˜›œ¦¡˜ ÈÞÞÿ 7b€ŽŒxV/„ 0¥å‰ÿþüÒ½»ÍÜëóíÝÍËäø‰ÿýÙs'€†ŽÿÞÞÒÇÇÖÉÀÞÁÈÖÏÃÍѳÒÍÁËÙÞÞÿ 0\ƒœ¡“uL!ƒ-¬êŒÿ êÍ»ÍÜëóíÝÑ×þþŠÿüõh€†ŽÿÞÞÅ­®Ì²¢Þª³É½¬¾Ç›È²Ä×ÞÞ€ÿ &Q|¢³ªh;„:‘êùŒÿ ùÜÂÊØäéåØÜêþþŠÿþüÐq†Œÿ'ÞÞÕÊÂÃÆÀ¾Ë¾ÁÆÀ¿ÂÿÍÑÓ×ÜÞÞÿÿBp›ÁÀ©ƒW( ƒ2ˆÙÿ ìÔÅÑÛàÝØæ÷‚ÿýù÷†ÿùÀj…‰ÿ€Jb¢¿ÆÅÉÃÅÆÁÄÄÃÆÉÍÐÔÖÚ‚Þÿÿ ,_¹ÛÞqBÒÿùéÉÍÒÖÕßðúîàÝÝÚ×ÌÆÓíú„ÿõÅO‰ƒÿEEGZJJKRd¥¿ÃÅÂÃÃÀÆÆÇÏÑØ†Þ ÿÿ M}®Õ꺋Z* ‚cØ’ÿ÷ßÍÊÎÑïüî¼…xxkhWJRºî…ÿõÚ>‰ƒÿEEPWJKKO`”¸Æ¼Â¿½ÉÌÕŠÞ 6g—ÆàÑ p@ @Ìò’ÿý÷ïééð˨‹xV:&^»…ÿüõ‹4ˆ ÿ??GSJJOSPKIJO~§ÁÄÈÎÕØÙÛ‰Þÿ !N~¬ÍÕ´„T(0†÷ý”ÿ üæÇ­”jB1#‚3¡‡ÿÐl‡ 2IENTKA52DIJIIm£ÎÒÔÙÝ…Þîúƒÿ 2d‘¸Æ»”f8‚ hΔÿþþ滆QR6„ A©‡ÿü¨?ƒ )=ILSUK0EYUIEY—݈ކÿ FuŸ·´›tGƒ7¤•ÿþüœeD' † 1“Ùˆÿã–ƒ%7CPVKUXTJrqD::m‰Þ†ÿ -XŸ¦™{T( Ü•ÿã]/ ‚ A{­Ëäõˆÿ øÉP(3AIDHQUH]XLL'}¹ÃG::ÿ†Þöü‡ÿ ;b—‘|[4JÆ÷”ÿà£F(„ 1©ÑñŒÿê®3 "04*=N4–ÿ#Jdqq\?ƒGóü”ÿ¤E‡lâÿìÉ—_LO\NIM\k`PSMF?6 –ÿ%GZ_W? ƒ oüþÿüà±x7‡÷‹ÿôÝ·”zlkRS[\MHMXUNHG+ €–ÿ%@LI3/4@KNHbƒ²÷ý€ÿŽþ耭ÿ,Ž«Œ \¸ööëÚÍÌâäÙÉæÌ‘Q„¥¹ÆÉÉÈÉÌÏÏÎÔÝèúû€üŽûÞ‘€­ÿ!‘Ã* …$€H«ööë×ÅÅáØÈЯƒh{³ÔçóøúœùÕ„¿­ÿŠÑ^„Msh=¤ööðÝÌÌçÒ¸Âq^ƒÞñ¡÷Ìx®ÿ ‚Þ–%„ i¿ñîI Gª€ö õôôñÖ¥cQžò£õÃl®ÿïzçÌ5 -’ÐíñUZ´èÎÜëõõôÆ‚B¢Ú¤ò¹`¯ÿråæ]s”«¿ØF n·ÚÔÏàôöÛ–f‹Ôîœð…ï°U¯ÿiÙî•<€,¤ˆ€·0‰ÂÓÜÉÙëݧuxâëî’í§N¯ÿ^ÈìÔh0“„ˆ¤)±äÚ»ÂÙ×”^•à„ì ëP¯ÿI¨éã’2B†€‚|_`Íñîåש€‚±Óæ„é è‹,¿ï¯ÿOŽçç¼nK†€…r$ ~ØóéÑš†°Ù¨æÛt ³ÿ @vååÚ¨5CˆvR€c´É¼§rĪäÄo³ÿ/[€âÔ¬1"ƒ€DEPWŒÈß âˆá¥’³ÿ:ÇÙßÜÒ£f3%!7YŒª½Ê١߈Þ•yϳÿf®Ñ€Ý Ò±Šo^XY`k}’©¿Ò—ݕ܇eµÿ’™Ê‚ÛÚØÃ»¼ÇÒÙÛŸÚÙÖ‘`µÿÆŽÙ­ØÔÊÊ`µÿ¢ŸÇŽÖ­Õ̯©ßµÿ¤¥·ÈÔ¹ÓÕ‡·ÿ›¡º°Ñ‰ÐÍ»ƒƒ·ÿ››µ£Ï–ÎÁµƒƒ·ÿ››¿Ç¢Ì–˾°»ÿÉÇ–Ê¡ÉËŰ»ÿëÕÌȶÇÆÆÌѽÿôÕȶÄÃÃÏÔ½ÿåÝɵÁÃÌêù½ÿûïÐ迊¾ÃÒã¿ÿòÕÄœ½–¼ÁÔÔ¿ÿÎÎÆ½Ž»£º»ÔÔ¿ÿÎÎÇÂŽ¸¡·½ËÙÃÿñÛ¹€¶¬µ·ÈÕàÄÿó׿µ­³¶¿ÚñÅÿøøÎ¸Ÿ±‹°ºÚõÆÿøéßDz›®°³µ€¶µ´²±±€°®­·ÎõüÇÿååʺ­’¬«¬®³·»¾ÁÁÂÁÀ½»¸¶´²±°°ºÌËÿÉ¿®«„ª©ª¯¶¿ÆÊÍ€ÏÎÍÉÆÂ¾º¶³²²¸»²²ÉÿÉ··«†¨‹§«ºÉÏÓ×Ù€ÜÛÙÕÑÍÉý¸ƒ²ÅÿÞ± ²´´±¬««ª©¨¨§¦ˆ¤¥©»ÈÑÖÜàäèéèæãÞÙÔÏÉý¶³‚²Àÿ´³³´¹»¸¹º»½¿¾»º¸¶µ³±¯¬©§¥¤„¢§´ÄÎÕÛáçìñôóïêäÞØÒÌÆ¿¹³‚²´¼ÿú¸¸·¶·»¿ÂÅÇÊÌÎÏÏÎÍËÉÆÃÀ¼¸³¯«§¤¢‚ ¨¿ÈÏÕÛâèíó÷õñëåßÙÓÍÆÀ¹³ƒ²¼ÿ츸»¿ÄÊÏÓ×ÚÞáääåäâßÜØÕÐÌÇÁ¼·²¯¦ €ž ªÀÆÍÒØÞãçêëëèåàÛÖÑËľ¸³²±±»ÿ-³³µ¹¾ÃÉÎÓØÝâçìðóôñîéäßÛÕÐËÆÀ»¶±¯ª¤››ŸªºÀÆËÐÔØÛ€Þ ÝÚ×ÒÎÉľ¸³‚²±±»ÿ-²²³¶»ÀÅÊÏÔØÝáäèêëéæâÞÚÖÑÌǽ¸´²²°ªŸšž¨µ¸½ÂÆÉÍÏ€ÑÐÏÌÈÄÀ»·´…²¹ÿ°°±²²³µ¹¼ÀÄÇÊÍÐÒÔÕÕÔÓÑÏÌÈÅÁ½º¶³² ¯¦š›¤²³µ¸»¾À€Äÿ½º¸´‡²¹ÿ°°±„²³µ¸¹»½€¾½½¼º¸¶³†²±¯š–Ÿƒ²´µ€¶µµ‹²³¹ÿ³ˆ²³³´´€µ´³³‡²°¬˜’™®±ƒ²€³Ž²¹ÿ³³²±­£„z—ª±–²»ÿ²±¬š{ci¨±•²¼ÿ²±±ššcd´´³•²²ÿ£ÿŽ?èÿ•âÿ›ßÿ›ÝÿžoÙÿŠ€ ‡Õÿ߆  €  „Ôÿ… !%)-/12210/,)%  ƒÓÿo„ %,27<@DGIJJIHFC?;61+$ Ðÿ„#!)19@GMRW[^`bba`]ZVQLF?7/(  Íÿ„% (1:CKS[ahmruxzzywuqlf`ZRJA9/&Ìÿ„% ",6@KT]env}ƒ‰Œ’“‘Œˆ‚{tlc[QH>4)Ìÿƒ'  ,7BLWaluˆ—ž£§©«©¦¢•Ž…|si_TI?4)Éÿ„)(4@KVblxƒ— ©²¹¾ÂÃÁ½·°§ž”Šti^SH<1% ‚Æÿ…* ".:FQ]it€Œ˜¢­¸ÂÌÔÙÜ×ÑÉ¿µªŸ”ˆ}qeZNB7+Æÿ…*%2>JVbnz†’žª¶ÂÏÛæîôìâ×˾²¦šŽ‚vj^RF:.!Åÿ†*%3GYgrz„‹”¥³¿ÌÖàèëåÝÑ¿§™‘‹‡‚zo_RE9- ‚Äÿ†  9Vo}‰‘—€˜ šŸ§²ÁÉÑÖÙÒij¦š ˜“‹}hP6*ƒÁÿˆ) 6`„œ§¯¶ºº¸³­¤¢¦¯¶»¿À¶§šš£¬´¹º¹¶°¥mE) „¿ï¿ÿˆ(n˜«ºÆÏÖÛÛÙÔÍÁ´¦š ¥¦¦–™¦µÀËÔÚÜÛÖÐĹ£y1†¿¾ÿχ m—³ÅÕâìò€óðêÝϾ¬•Ž‘­¾ÏÜéñóôóòîâÕêa%‡¾ÿˆ :š³ÉÜíóøû€üûøñåÔÀ”~}“«ÀÓæð÷û€üûúôêÝÉ>ˆ¿¼ÿ߈)U¯ÆÜîûúîÚÇÈ×êüûôæÒœuq¡ºÑåöúôçרãòûû÷îÝ·Wˆ¼ÿˆ)+o»ÓëûûúÆw(.h·üûûôá«uh°Èßòüûݪhl›Õüüû÷ìÔn ˆ¼ÿ‰)"dÁÚîúøx9 +H]Ôûöç›ZQ°Íæ÷ú™_;&G‡ÞûùôÒe†¹ÿ‹(PÃÜðïÌ:Rp ³ðöè{78šÉèóâ`NX% 0¾ôùö»T†¹ÿ‹4¥Óîä¡(€kŽ åïÌPh¶âêÌBOt3 €©î÷ë‹6…·ÿŒP¸êã¤)žçÚxÒäÏ3‚«ïîÊ@ „·ÿŒc¯âãH  #»ÊŠ6++-$LÏéj!€NËâ­H„¶ÿ$#S‡»ƒ`A5Tk“€S+38806X†±“rS:A.‹ƒ´ÿ ŠKŒ·¼‡J„6AKPM@96;L¡¿¯|3 ‡ƒ²ÿ $/.! ˆ 4q²Ýõò·S68?TcjfSA€6 >\žÝ÷ñÒ^$†ƒ °ÿ -HF:$†>‹×‚ÿΊN€6ZjlZ>†=ŠÓðü„ÿõÑ€H7Fl‘®»²’mN=¥áü„ÿùê¾o$‚„ ‘ÿ€deec_cddeddcdnlhlnƒÿ <`w~uZ9…K—؈ÿñÇb?LvžÂÓÅŸwaqÔú‡ÿôÇ~$ ‡¿Žÿ½½¤‹‹Œ‰ˆ‹ŽŠŒ„”‘Š­½½ÿ 7b€ŽŒxV/„ 0¥å‰ÿýøŠSPz¤ÍâЦ~z¹í‰ÿýÙs'€†Žÿ½½´¬¬·®§½¨­·²ª±´ž´±©¯¹½½ÿ 0\ƒœ¡“uL!ƒ-¬êŒÿ È{Oz¤ËßÏ¥‡˜ûþŠÿüõh€†Žÿ½½«™›°’½˜ž­¦š¦¬­©žª¸½½€ÿ &Q|¢³ªh;„:‘êùŒÿ ð¤ar˜¸Ç¼™¢ÉþþŠÿþüÐq†Œÿ'½½¹°¨©¬¨¦°§©­©§©«§±´µ¸»½½ÿÿBp›ÁÀ©ƒW( ƒ2ˆÙŽÿ þÎh‰¢­¦™½ì‚ÿýù÷†ÿùÀj…‰ÿ++-JŒ¨°®®ª«¬©¬««¬®±³¶·º‚½ÿÿ ,_¹ÛÞqBÒÿðÅr|Š”’¬ÙúîàÝÝÚ×ÌÆÓíú„ÿõÅO‰ƒÿ#F/-0‰ƒÿ3A/217O‚¦³¥ª¨¦®°·Š½ 6g—ÆàÑ p@ @Ìò’ÿùêÔÆÇÞŧ‹xV:&^»…ÿüõ‹4ˆ ÿ+<.-4:61.07n™°«®²¶¹¹»‰½ÿ !N~¬ÍÕ´„T(0†÷ý”ÿ øÝ¾­”jB1#‚3¡‡ÿÐlˆ".)4<0)#$630./]‘µµ¶¹¼…½Þöƒÿ 2d‘¸Æ»”f8‚ hΔÿþþ滆QR6„ A©‡ÿü¨?ƒ *.2:<1BK>.,H‚¼ˆ½†ÿ FuŸ·´›tGƒ7¤•ÿþüœeD' † 1“Ùˆÿã–ƒ"(7>0;?;,rŒb,&&`‰½†ÿ -XŸ¦™{T( Ü•ÿã]/ ‚ A{­Ëäõˆÿ øÉP ,4+-7<-E?16'}¸¿.&&ÿ†½îú‡ÿ ;b—‘|[4JÆ÷”ÿà£F(„ 1©ÑñŒÿê®3 !*'.8<.-374=5)( i”…Ï„ÿö€½Šÿ Ef|†x^<+£è”ÿè£R…,óüÿùìÖK((294=>90-.18)"=N4–ÿ#Jdqq\?ƒGóü”ÿ¤E‡lâÿéÀ‡G04E5-1ETG582,)) –ÿ%GZ_W? ƒ oüþÿüà±x7‡÷‹ÿò׫‚eUU88CE2,1?;3/4 €–ÿ%@LI73+$%  ™ÿ ($‡h{†‚jR?1-)%!3¢„ÿöÚ¤sG,/>9.*?8*.=9.*-€ €™ÿˆ &,(  !*LH‚èÿÿûê×~hK=;BSF8.,>8-.Rz{*€ÿ ÿ‰ ˜#9Vƒ =}¯µ¦ŒrWF<8.7IZD;6.@RjªÇ¼^ƒ¥ÿ§')V‹¶ÍÓ¢ Y^L86;65C17EL5D87)A<=l¦ÛüŽÿ³M‚¥ÿ–Y¥ÔˆÕÑÈÇ¿¹º©±·¤K8>-:>@CqŸÄÚèöþŽÿÖd‚¥ÿ–i°„ÕÓÑ€ÌÉÁ¼ºº¸·°¬²_A:0DhŽ¥Àßø’ÿð{§ÿ”N”ÄÐÉÎÔÒÐÍÈÀÀÁÁ¾¸º½·½©›³}YB0gªä—ÿ‘§ÿ”D’Á¨¹ÑÌÁ¼¹¶´º¿¼¼º¶±¶ “´¢‰^º÷˜ÿ§<§ÿ”.W–­¶È¾ººÀ··»¾¼¸³­°¯µÎÈ®€CÍý˜ÿ²L¨ÿ•Qs޶­ “Ž’¥·º·´µ¾ÁÄËÖÕ¼‰9Í™ÿ»Y€Ÿ©ÿ–-S{udQBaµ¸¹ºÀÒÔÕÃ*Ãû˜ÿÂd€ªÿž?´ÃÐ…ÕÓ®B¸ï˜ÿÊo€¬ÿš!Œ½ÌÐÓ…Õ ÔÂŒm¦îÿùôôüþ‘ÿÑ{€¬ÿ€ ”4p³ÌÐˆÕ Ï½yv‡ƒ|xx~ºçÿØ…€¬ÿ€$#GyµÈÉÉŠÕ ¬{O51011|Êÿà€¬ÿ€6+ @¿Í»ßÒÀ‹ÕÓÌÀÀÁÃÄ‹¼ÿ蜀¬ÿ€@C$Ž Cwš¯ÃÏÒÊÈÊ΋ÕÔÒÏÏЙœÎÿï§€¬ÿ¿EX?Žj­Ï€ÕÔÒÊÎÔ†ÕÖÕÔ€ÖÕÓʺ™cµèÿò¬€­ÿBk]Ž#u¹ÕÕÔÒÐÑÓÔÔÒÔÕÔÒȾ·³°¬ª®±´³¯©˜jÖüÿÿŽþð©€­ÿ7}„Ž f¯ÕÕÔËÃÅÐÔÒÉÒÕÒË¡{]N<2/4@IMHbƒ²÷ý€ÿŽþ耭ÿ,Ž«Œ V¤ÕÕÒÎÊÉÏɼ®Éµ„J€£¸ÆÉÉÈÉÌÎÏÎÔÝèúû€üŽûÞ‘€­ÿ!‘Ã* …$€D˜ÕÕÒËÅÄÎÀ°·œxd{²ÔçóøúœùÕ„¿­ÿŠÑ^„Msh;‘ÕÕÓËÃÃκ¥­i\ƒÞñ¡÷Ìx®ÿ ‚Þ–%„ i¿ñîI C—€Õ€ÔѺ’\Ožò£õÃl®ÿïzçÌ5 -’ÐíñUT¢Î¿ÈЀÔ¯x@¡Ú¤ò¹`¯ÿråæ]s”«¿ØF e¨ÊÐÇÌÔÕÁˆb‹Ôîœð…ï°U¯ÿiÙî•<€,¤ˆ€·0|³ÉÜÇÊÏ™pxâëî’í§N¯ÿ^ÈìÔh0“„ˆ¤)ŸÍÊ»½Ç¿‹\•à„ì ëP¯ÿI¨éã’2B†€‚|_[´ÓÒÍÚx°Óæ„é è‹,¿ï¯ÿOŽçç¼nK†€…r$ v½ÔÍ»‹~°Ù¨æÛt ³ÿ @vååÚ¨5CˆvR€] ²ªœoĪäÄo³ÿ/[€âÔ¬1"ƒ€DBNVŒÈß âˆá¥’³ÿ:ÇÙßÜÒ£f3%!7Y‹ª¼Ê١߈Þ•yϳÿf®Ñ€Ý Ò±Šo^XY`k}’©¿Ò—ݕ܇eµÿ’™Ê‚ÛÚØÃ»¼ÇÒÙÛŸÚÙÖ‘`µÿÆŽÙ­ØÔÊÊ`µÿ¢ŸÇŽÖ­Õ̯©ßµÿ¤¥·ÈÔ¹ÓÕ‡·ÿ›¡º°Ñ‰ÐÍ»ƒƒ·ÿ››µ£Ï–ÎÁµƒƒ·ÿ››¿Ç¢Ì–˾°»ÿÉÇ–Ê¡ÉËŰ»ÿëÕÌȶÇÆÆÌѽÿôÕȶÄÃÃÏÔ½ÿåÝɵÁÃÌêù½ÿûïÐ迊¾ÃÒã¿ÿòÕÄœ½–¼ÁÔÔ¿ÿÎÎÆ½Ž»£º»ÔÔ¿ÿÎÎÇÂŽ¸¡·½ËÙÃÿñÛ¹€¶¬µ·ÈÕàÄÿó׿µŸ³±®«¨§©¬¯²‚³¶¿ÚñÅÿøøÎ¸Ÿ±ªŸ’…‚‰•£¬‚°ºÚõÆÿøéßDzš®¢vgb^YTPMMQVbu”§·ÎõüÇÿååʺ­’¬«¦„vib`_]ZTNGC?AL`u‰ËÿÉ¿®«„ª©¥™ˆvrv|€~zskbXLA:6AOP55ÉÿÉ··«†¨‹§™„v‹•œ¢¤£ š‘‡|pbTF866€5Åÿ¾6655?Zmolmsx}‚ˆ‘œˆ¤¡˜ƒ‡•¢¯ºÃÇÅ¿¶ªrbSD965567Àÿ448=HMGJMPTcebbceglt‹–¡ƒ¢™~y‘¡°¿ÎÜåáÖɹªš‹zjZJ;‚65¼ÿóEE@>CNX`hov{~€€|wrkc[QKKYgv‡”œ€ žŽfs‚’¢²ÂÒáìèÛ̼¬œŒ|k[K;655¼ÿÑEEN[gs€‹– ©±·ºº¸´¬¤š„xl`SF>Dq€ž•€\k{Š™§´¿ÉÌËż¯¡“…ueUF:655»ÿ;67?JWer€š¨´ÁÍÙââÜÒÆº­Ÿ’…wj\OB9DXt˜š†hM[iw„™¡¨ª©¥ž•Š~rdVH:7ƒ6»ÿ956:CO\iv‚Žš¥°ºÃÉÊŽ´ªž“‡znaTG=66>U’€^?HT`js{†‡‡„xpf[OE<…6¹ÿ776569@JR[dmv~…Š‘‘Œ‡yqg^VMD;6@`ˆ‚`69@HOV\adeec_YSME=8†6¹ÿ77…69?FKOSVWWVUQMHB:7…68?}‰n‚6 7;?BCCA>97Š6¹ÿ77†68:;<=>=<;:97†69B}Žx=7678€988Œ6¹ÿ77ž69ClzmG:—6»ÿ7655š68BTc`H:5‘6€56¼ÿ7€5›6BBcd445‘6€56²ÿl8mkŒËòàµQt÷ÿÿÿÿÿÿ̘ÿÿÿÿÿÿÿÿÿç1wÿÿÿÿÿÿÿÿÿÿÿâ;ûÿÿÿÿÿÿÿÿÿÿÿÿ¹ÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿLOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMgýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #&1 LýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ^Á¹ÀÌïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ käÿÿÿ¶”‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿθûïžÊì]Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƵxåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼/ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû'üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¢ÿÿÿÿÿÿÿÿÿÿÿÿÿù(åÿÿÿÿÿÿÿÿÿÿÿþ{:õÿÿÿÿÿÿÿÿÿÿé-Æíÿÿÿÿÿÿÿÿÿÿÿ«>úÿÿÿÿÿÿÿÿÿÿÿÿÿÿß5óÿÿÿÿÿÿê~»ÿÿÿÿÿps8mk§ïä‡åÿÿÿÿ¾¿ÿÿÿÿÿÿCÿÿÿÿÿÿÿôØÿÿÿÿÿÿÿÿ‚Sof¦ÿÿÿÿÿÿÿÿÿõešÓÑRóÿÿÿÿÿÿÿÿÿðÔ…áÿÿÿÿÿÿÿÿÿÚgÿÿÿÿÿÿÿÿÿÖúÿÿÿÿÿÿÿÿÁÑÿÿÿÿÿÿÿÿ’ŒÿÿÿÿÿÿÿÿM/þÿÿÿÿÿÿè§ÿÿÿÿÿþg cøÿÿÿÿù.˜ÿÿÿÙîÿÿTt8mk@ šôüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛy&Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¿e kÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ¸7 3Æûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë¯+6³êþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúë},1…îúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊlmÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý°K<§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿê †ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÉG /ºôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæž) |ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøæQ;Ýöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’7(yöüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßnV½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¥<ˆðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿׄWºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¿‘àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþØh¸öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí¹.MÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûðJ %–äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw%aÙõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄX`·÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî‚ S²ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®E  %1- 1Âùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå™3gjFj{ ‚yZ~”m`ÄPzµv C¾ìýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÅ>>|Gnƒ€nDb|TC :[…<A›öüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå—'c£¦ˆ ¯w¯§‘¢² ™É™¨¹’p?&ŠèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøäPNœÑÕÖÜááçêìðô÷úþþÿþüàš^‚Öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’7“âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÛYÆôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙk %½÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðáCºíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷§C8eâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúãØûùÄ,ýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ”.9Y“ÍîùþÿÿÿÿÿÿÿÿÿÿÿÿûïË™‡¿½t-]ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝyf¹åøÿþýúüÿÿÿÿÿÿÿÿÿÿÿÿï¿H ŒòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÜv* A}¤¾ØíøýÿþþòöÿÿÿÿÿÿÿÿÿÿùÄx0Z»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÉ‘kk‚ªÓíúÿÿÿÿÿþüäãîÿÿÿÿÿÿÿ÷à¡a( šäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïàáöþÿÿÿÿÿÿýíÕ¾£¨ÆÓàîúüëÈ‘7 -Êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø·^ P†»îó²SUÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû!/=H3yÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø{˜åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜh¶ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”8ÑóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÎw3èùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÅ¡Ëìûÿÿÿþ÷ãÈœe% ôüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ…3r£ºÂÇËǶ•l5 íúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðv 0# Ùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù{ Åðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý­êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ ŒâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“!Àúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™'¢ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž.rÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 1-šúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš) gÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ• 5÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDá÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰]ÑûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒƒÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú}2”ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿówL²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêq0‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿák"sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØeiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎ_`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅYJûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®J;äøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”80Âïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw%'œæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZvÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüóDPÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ×6 +Éþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë²,¾ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâŒ#¥íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØfŠÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ@mÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÄN´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù·"–þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝŒ zîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»Y]Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý™(9–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø}_þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕdBíúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥C2Êñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýo $‘ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýø>=ÍþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÓ5´ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ#ŠÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÉ>D­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñª€ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄgU¿þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö–+,€øýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÙiDæøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþ @)›äþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúë`GÃõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþéª3 ÛþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÊT=¦üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèžiÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö¦C0ƒìúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÇg ;·éüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþùé‚/TÅõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþì¹6tÆúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí¶E-ÔþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÎ{9éùþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇu/®êþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜu *˜ìúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ‹ qÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ},ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·T"–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýš)vâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþﺼ¿»éûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ` Cžäøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýç·cW[`YªáýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÜm$(–äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¤>.šùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜutuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon.ico0000644000175000017500000021556611273045225023051 0ustar julianjulian hf ˆ Î  ¨V00 ¨%þ@@ (B¦D`` ¨”Ά(  7³ÿƒwËÿÿåõÿÿ¦ÝÿÿWšÃàN´òöžÚÿÿmÇÿÿ7³ÿC7³ÿCµúRk¦Êå²Çÿ¯²³ÿe²âÿK¹üÿ@¯ôð7³ÿ žžžÃÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÃÄÅÿÅÅÅÿ€ŸŸŸ1ÖÖÖþÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿÄÄÄòÿÿÿ——›³‘‘çÿƒ…öÿÛÜîÿìììÿëëëÿëëëÿëëëÿëëëÿ{{{fttÆðCCèÿ]eúÿÁÓíÿ¿Äýÿüüÿÿÿÿÿÿþþþÿþþþÿ‚‚‚·==Åüvÿ!$Xÿž°µÿÑðÿÿ·Ëÿÿ³¸ÿÿÿÿÿÿÿÿÿÿŒŒŒÒPÿÿ,.Cÿqxzÿ†Žÿr}§ÿíîðÿÿÿÿÿÿÿÿÿ\\\ܽÿlÿ8=þÿkwÿÿŠ˜íÿbm—ÿq{†ÿw€‹ÿ©®·ÿ)))Ùç%%%ýÄÄëÿÁÁÿÿÿÿ88ÿÿÿÿææÿÿ¶»Ãÿjr€ÿ_hvþKT_ø %°š•••ö```ÿÿÿÿÿÿÿÿÿØïÿÿ“”ÿÿ°°ÿÿóóóÿ!!!ÿûQWbÍPXeõ€—ꤹÃß´ÐßIÀÿ```ÿçñøÿN¼ÿÿ†Ñÿÿãäåÿ333ÿÿ°Ž¡©Y•§²p“§¯Y*ÿÿ?BDÿ„¢´ÿuˆ•ÿ|€‚ÿÿð µÿeeeÿÿ†††ÿ„„„ÿ$$$ÿvåÿ:::ÿSSSÿ888ÿ´¡íß„€àÀ?À?€?€€€€À?Ààðÿ(0 7³ÿ7³ÿØ?¶ÿÿG¹ÿÿG¹ÿÿ>¶ÿÿ7³ÿûa¢Ê®:²ûÙ>¶ÿÿ>µÿÿ7³ÿÿ7³ÿÕ7³ÿ7³ÿE¸ÿtÊÿä Úÿõ ÙüÿtÆùÿ[²èÿ‹¦¶ÿlÆýÿ§Ýÿÿ¢Ûÿÿ_Âÿÿ8³ÿò7³ÿ(H¹ÿ•³Æ¨™°¾þ¡¯·ÿ­®®ÿ®®®ÿ•ºÐÿ…ÌøÿxÌÿÿU»úÿX¶ï˜7³ÿÁÁÁ]¼¼¼û»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿºº»ÿ±º¿ÿºº»ÿ¾¾¾àÄÄľ¾¾ ÈÈÈåÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÇÇÇÿÇÇÇÿÇÇÇÿÇÇÇÿÉÉÉ‘¿¿¿hÕÕÕÿÕÕÕÿÕÕÕÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÐÐÐõ”””999ÏÏÏÀ§§åÿ}}êÿ¬®éÿØØâÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿ···dpppžžÙõ00äÿddÄÿnzûÿ°»éÿÏÑðÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿ¸¸¸²SSTFNNìÿ üÿPPôÿHQþÿÇÜâÿ¤´ìÿÌÍûÿúúûÿûûûÿûûûÿúúúÿúúúÿúúúÿ¾¾¾Ú ""?x Ùÿ£ÿ‰ÿCL­ÿ½ÕÜÿÎéñÿÈåÿÿ®Æÿÿ¢¶ÿÿº¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸ù! §ÿÿÿ ÿ:?@ÿ´ÊÐÿÐïøÿ¾Øÿÿ¼Àÿÿâãÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¦¦ÿ7Böÿÿ9ÿ¦½ÅÿÃÜãÿ¹ÉÎÿªº¾ÿ{Ž»ÿ½ÄØÿüýýÿÿÿÿÿÿÿÿÿÿÿÿÿ‰‰‰ÿGºÿÿ/ÿìÿiwÿÿ…—ÿÿ‰œÿÿ¯Åíÿ]u§ÿAUr „˜©T¨¾Êí©ÀÍî¬ÆÓè¶Óã¹)))7===íÿÿjjjÿêïóÿvËÿÿ]ÁÿÿcÃÿÿ³âÿÿÒÒÒÿ333ÿÿÿ¬v|~sxz5y€„7|„ˆ>€‰Ž€ÿÿ888ÿFS[ÿItŽÿR›Èÿl¯ØÿBcvÿaehÿÿÿþ5ñÿ¡¡¡ÿƒƒƒÿÿ¢¢¢ÿÅÅÅÿ{{{ÿ¿¿¿ÿeeeÿÿ±€þAAAÿ©©©ÿ¸¸¸ÿ···ÿ´´´ÿ···ÿ©©©ÿ///ÿñ/µ ÿCCCÿ{{{ÿ©©©ÿ³³³ÿŒŒŒÿVVVÿûb° þ"""ÿ777ÿ;;;ÿ+++ÿökbÆñã§8ÀÿÀÿðÿðÿàÿàÿÀÿÀÿÀÿÀÿ€ÿ€ÿÿÿ€ðÀÿÀÿàÿàÿðÿøÿþÿ( @ 7³ÿ7³ÿì7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7­öêaox”@™Ï¿7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿI7³ÿ?@¶ÿüwËÿÿ¯àÿÿåõÿÿÜòÿÿ¦ÝÿÿoÈÿÿ:²ûÿ…£µÿL¹üÿ~ÎÿÿžÚÿÿ–×ÿÿmÇÿÿ7³ÿÿ7³ÿÑ7³ÿ/7³ÿ}7³ÿ©9²üÚH®íû_¯àÿr­Ðÿ˜©³ÿ¥¨ªÿf¿öÿÙÿÿÏìÿÿÁçÿÿˆÑÿÿI¹ÿÿ7³ÿ­ÑÑÑ,±±±è²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿŸ²½ÿh²àÿT¹öÿE¸ÿÿL²ñÿa±âÏR½ÿ±±±ÀÀÀè¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ°ºÀÿ»»»ÿ¼¼¼ý©©©‰’’’¬ÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿ»»»ûxxxËËËÉÉÉùÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿŸŸŸª³³³¢ÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÓÓÓøðððÉÉÉðÒÒãÿœœêÿ¢¢êÿÚÚâÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿ˜˜˜}5××çÿ üÿwwÈÿÿÿ{‡þÿ™úÿßßìÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿˆˆˆÖ:::”ŒŒùÿÿÿšš«ÿ99ïÿ†“÷ÿ¬¸¼ÿ’ þÿÖÖöÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿþccc¾,,ÿÿÿÿþÿþÿitÿÿÀÖÜÿ°ÄÊÿƒúÿÊËÿÿõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿÉÉÉÿ$ee•ãÿÿáÿ¯ÿÃÿy‡ðÿÑðùÿÍéòÿÔõþÿÁÛÿÿ¨½ÿÿ¢¶ÿÿ–¥ÿÿÒÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíííÿE33gö'ÿÿÿÿÿAGHÿžª­ÿÕöÿÿÕöÿÿÕöÿÿ™«ÿÿŒ”ÿÿ¹ºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×××ÿfgÿÿÿÿÿ()-ÿNQSÿmwzÿ¡¬°ÿ´ÍÔÿÏêÿÿ··ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°°°ÿ†#öÿÿÿÿ@GŸÿÅãìÿÃÝãÿ«¾Ãÿž¨ªÿ‰‘ÿcnÿYg™ÿÈÍÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰‰‰ÿ§ÿÿÿÿ¥ÿ(+ÿÿ¡ÿÿ¶Íÿÿ³ÊÿÿÃÜûÿ°ÂÈÿK]ŠÿXhÿUg~ÿapˆÿšªÿïðóÿÿÿÿÿÿÿÿÿbbbÿµÔÿÿÿ qÿÿÿÿÿÿÿÿÿÿÿ ÿÿ\eÿÿšªÿÿ$+Üÿw„¢ÿZk‚ÿUd}ÿXgÿkyŽÿ²ºÅÿ***ÿ—---÷PPPÿÿÿ²²öÿ••ÿÿ‚‚ÿÿvvÿÿeeÿÿFFÿÿÿÿÿÿÿÿjjÿÿÿÿÿÿþþþÿÀÇÓÿuƒ˜ÿQb|ÿRc{ÿIZrÿ?K^æ#*­ŒiØ¡¡¡ÿKKKÿÿ©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼ÿÿ$$ÿÿÿÿÿÿÍÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùúÿ4LbÿVe}ÿGXsÿCRjÿ#ÿRRS°¾ÞïqqqÿÉÉÉÿÿ)))ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÔÿÿ^^ÿÿÿÿÿÿ‹‹ÿÿÿÿÿÿÿÿÿÿ¦¦¦ÿÿÿ ÿ+5DðO^sð4BWþ@Maügv‰ÉµÒàϾÞïí¾Þï\î®®®ÿRRRÿÿsssÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿé÷ÿÿ„ÐÿÿÝòÿÿÎÎÿÿ¯¯ÿÿôôÿÿÿÿÿÿÖÖÖÿÿÿÿÞ Xe|(HVm°‡—¥æ›­¶ÿ ²½ÿªÂÏÿ¶Òá¹¾Þï‡A,,,ýrrrÿÿÿZZZÿùùùÿÿÿÿÿÿÿÿÿ}ÎÿÿrÉÿÿ¼åÿÿÞòÿÿÿÿÿÿÿÿÿÿÂÂÂÿÿÿÿÿ S ·Âb–©³µ¡·Â³¡¶Âº˜ª¶Ç³ÐßgóÿÿÿAAAÿåååÿŸÛÿÿ7³ÿÿ7³ÿÿV¾ÿÿT¾ÿÿãòûÿ£££ÿÿÿÿÿåjjj aaa!eeehhh&ccc/fff ŽÿÿÿÿWfoÿ0>Gÿf²áÿN²ïÿK­êÿq¨Êÿ]rÿRRSÿÿÿÿÿY!ýÿÿ©©©ÿ"""ÿÿ‡‡‡ÿUUUÿ’’’ÿ[[[ÿÿ¹¹¹ÿ]]]ÿÿÿÛ°ÿÿÿÔÔÔÿ···ÿôôôÿ“““ÿÿÒÒÒÿ×××ÿùùùÿjjjÿÿÿ73õÿ###ÿaaaÿÿŒŒŒÿÊÊÊÿÊÊÊÿ‡‡‡ÿ†††ÿtttÿ;;;ÿÿ°Hýÿ111ÿ]]]ÿ†††ÿ§§§ÿ´´´ÿ¥¥¥ÿƒƒƒÿZZZÿ---ÿÅ\þÿÿ:::ÿMMMÿSSSÿLLLÿ999ÿÿÙ cúÿÿÿÿÿÿÎÎóâ¸Tà?ÿàÿøÿü?ÿøÿðÿðÿàÿàÿàÿÀÿÀÿÀÿÀÿÀÿ€ÿÿÿÿ?€€Àáàÿàÿðÿðÿøÿü?ÿþÿÿÿÿÿƒÿÿ(0` 7³ÿŽ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿý:ªïtXXX?=£áo7³ÿý7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿx7³ÿ7³ÿÿ7³ÿÿ7³ÿÿ>µÿÿN»ÿÿW¿ÿÿX¿ÿÿQ½ÿÿC·ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ>°÷ÿ’™ÿ8²üÿ7³ÿÿ9´ÿÿC·ÿÿC·ÿÿ9³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿ)7³ÿ±R½ÿÿwËÿÿœÙÿÿÁçÿÿåõÿÿíøÿÿËëÿÿ¦ÝÿÿÏÿÿ\Áÿÿ7³ÿÿg©Òÿ†£µÿJºÿÿnÈÿÿŒÓÿÿžÚÿÿžÚÿÿ‹ÓÿÿmÇÿÿIºÿÿ7³ÿÿ7³ÿÿ7³ÿ]7³ÿ7³ÿd:´ÿ±Q½ÿÞcÃÿþmÇÿÿnÈÿÿfÅÿÿW¾ýÿP³ðÿ[®áÿƒ©Àÿ¥¥¥ÿ ¥¨ÿgÂûÿ‘Õÿÿ½æÿÿéöÿÿèöÿÿ¼åÿÿÔÿÿdÄÿÿ8³ÿÿ7³ÿÿ7³ÿ"E¸ÿ …ªÁº…®Çþ–­»ÿ¨¬®ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿаÈÿrÈþÿÕÿÿ£Üÿÿ£ÜÿÿÔÿÿqÉÿÿL»ÿÿ7³ÿÿ7³ÿw³³³“²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ•²Ãÿ_´éÿJ¹þÿIºÿÿ?¶ÿÿ7²þÿR²íÿ„¯ÊÛÿÿÿÂÂÂ^¼¼¼ú¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿµ·¹ÿ¥·Âÿ£·Ãÿ³·ºÿ¸¸¸ÿ¸¸¸ÿ···¤ÎÎν½½ï¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿÀÀÀü¢¢¢P¶¶¶²ÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿ¾¾¾äÿÿÿÉÉÉ"ÏÏÏùÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿ«««q£££²ÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿ···ç´´´ ÍÍÍúÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿƒƒƒUˆˆˆnßßßÿßßßÿßßßÿßßßÿÜÜßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿ™™™¿“““Èæææÿ°°ëÿ44ôÿøÿþÿ>>÷ÿŽŽîÿØØæÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿ³³³ö³³³ùÁÁïÿþÿ‰‰¼ÿ’ÿûÿ*,ÿÿÇàÿÿ—¨þÿ“”ôÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿäääÿ@?æææÿJJûÿÿÿzzÒÿ€€€ÿssßÿÿÿ¹Ìñÿ¦ª«ÿ¼ÕÿÿsxûÿîîòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿJJJv××ùÿÿÿÿÿþÿÎÎäÿ}}øÿÿÿ—©ÿÿÌæîÿÕöÿÿ°Æðÿlnüÿ÷÷øÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿUUUÍ'''®ÿÿÿÿÿÿÿÿ þÿ þÿÿÿ‘£ÿÿÔóüÿž¡¢ÿ»ÕÝÿ¬Ãòÿ}ƒÿÿÙÙÿÿííÿÿøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿ___ó444ÞCCÿÿÿÿÿÿÿÿþÿÿÿÿÿ²ÉÿÿÕöÿÿÍçïÿÕöÿÿÒóüÿÕöÿÿ¦»ÿÿ¡ÿÿŠšÿÿ…”ÿÿƒÿÿ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnnnÿ ---ýøÿœÿdÿ/ÿÿÿDÿSƒÿBXyÿSh„ÿH]|ÿG[{ÿ[mˆÿ˜¢³ÿõöùÿÿÿÿÿÿÿÿÿ€€€ÿÿ•Æÿÿÿÿÿaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvƒÿÿ[cÿÿ>>þÿ®¶Úÿ{Œ¦ÿK`€ÿTvÿI]zÿG\zÿCXxÿ:Kdÿ#.;ÿ ÿÿͽzzzÿ£££ÿKKKÿÿÿ›››ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽÿÿÿÿÿÿÿÿÿÿœœÿÿøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿ ÿ#4ÿ:KeÿI]zÿ;QsÿH\zÿ>Srÿ!+ÿ ÿŸŸŸž¾ÞïzPPPÿÇÇÇÿ   ÿ!!!ÿÿÿéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢¢ÿÿ<<ÿÿ ÿÿÿÿÿÿ ÿÿÊÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ<<<ÿÿÿÿ ÿ ,?ÿ¶ÿÿÇêÿÿçççÿ]]]ÿÿÿÿÿÿÿý 2ÿÿÿÿÿÿÿ%17ÿa‹¤ÿUµÿ>µþÿ7³ÿÿ7³ÿÿ7³ÿÿ8²þÿ^·ïÿoŸ»ÿE^oÿÿÿÿÿÿÿÿÃÔÿÿÿÿÿ±±±ÿZZZÿÿÿklmÿ‡š¦ÿ"6CÿAYhÿÔÙÝÿÿÿ***ÿãããÿ>>>ÿÿÿÿÿÿ1UÿÿÿÿgggÿåååÿVVVÿÿ!!!ÿjjjÿûûûÿEEEÿªªªÿóóóÿ///ÿÿ'''ÿúúúÿÙÙÙÿÿÿÿÿÎÍÿÿÿgggÿÊÊÊÿûûûÿžžžÿ¦¦¦ÿüüüÿéééÿzzzÿ¡¡¡ÿÛÛÛÿìììÿ³³³ÿðððÿûûûÿÎÎÎÿÿÿÿø Hÿÿÿÿÿ»»»ÿÕÕÕÿÛÛÛÿÍÍÍÿ¨¨¨ÿ£££ÿŠŠŠÿ¢¢¢ÿÅÅÅÿÚÚÚÿÙÙÙÿÂÂÂÿhhhÿ ÿÿÿ§ÿÿÿ(((ÿWWWÿzzzÿƒƒƒÿ‘‘‘ÿ¶¶¶ÿÙÙÙÿçççÿ±±±ÿÿ‡‡‡ÿ€€€ÿaaaÿ:::ÿÿÿÞ Öÿÿÿ:::ÿYYYÿxxxÿ———ÿ³³³ÿÊÊÊÿÔÔÔÿÈÈÈÿ°°°ÿ“““ÿuuuÿVVVÿ777ÿÿ÷2)ôÿÿ###ÿ>>>ÿXXXÿoooÿ‚‚‚ÿÿ”””ÿÿÿmmmÿVVVÿ<<<ÿÿÿd8ìÿÿÿ)))ÿ:::ÿHHHÿQQQÿSSSÿPPPÿGGGÿ999ÿ'''ÿÿýl"Ùÿÿÿÿ ÿÿÿÿ ÿÿÿóJïÿÿÿÿÿÿÿû¡$u«Óõݵ‰"ðàÿÿðÿÿðÿÿüÿÿÿ€ÿÿÿÿÿÿÿÿþÿÿüÿÿüÿÿøÿÿøÿÿøÿÿðÿÿðÿÿðÿÿðÿÿàÿÿàÿÿàÿÿàÿÿÀÿÿÀÿ€ÿ€ÿÿÿOÿÿÿ€€0À~Àÿàÿÿðÿÿøÿÿøÿÿüÿÿüÿÿþÿÿþÿÿÿÿÿÿ€?ÿÿÿÀÿÿÿàÿÿÿÿðÿÿÿÿþÿÿÿ(@€ 7³ÿ7³ÿÐ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿ«7³ÿ7³ÿ7³ÿÝ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿu7³ÿ³7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ]œÃò‹‹‹÷Eªéú7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿO7³ÿ¾7³ÿÿ7³ÿÿE¸ÿÿY¿ÿÿiÆÿÿuÊÿÿ}ÍÿÿÎÿÿ{ÍÿÿrÉÿÿdÄÿÿS½ÿÿ?¶ÿÿ7³ÿÿ7³ÿÿ7³ÿÿe§Ïÿˆž«ÿ7³ÿÿ7³ÿÿE¸ÿÿS½ÿÿZÀÿÿ[ÀÿÿV¾ÿÿJºÿÿ9´ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿ¬7³ÿ;@¶ÿî\ÁÿÿwËÿÿ“Öÿÿ¯àÿÿÊëÿÿåõÿÿóúÿÿÜòÿÿÂçÿÿ¦ÝÿÿŠÒÿÿoÈÿÿS½ÿÿ7³ÿÿE°ñÿ• §ÿ}¥¾ÿJºÿÿeÄÿÿ~Îÿÿ‘ÕÿÿžÚÿÿŸÚÿÿ–×ÿÿ„ÐÿÿmÇÿÿS½ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÓ7³ÿ=µÿšT¾ÿñiÆÿÿ{ÍÿÿŠÒÿÿ“Öÿÿ–×ÿÿ‘Õÿÿ†ÑÿÿvËÿÿbÃÿÿM»ÿÿB±õÿn«Ðÿ¡¤¦ÿ¤¤¤ÿœ¥«ÿcÂþÿƒÐÿÿ£ÜÿÿÂèÿÿÝòÿÿâôÿÿËëÿÿ­ßÿÿÓÿÿmÇÿÿL»ÿÿ7³ÿÿ7³ÿÿ7³ÿ’7³ÿ7³ÿ@7³ÿ‚7³ÿ?µý»O³ñöQ°êÿ[¯ãÿd¯Üÿs­Ñÿ“ª¹ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ{·Üÿ~ÎÿÿÙÿÿ¹äÿÿÏìÿÿÒîÿÿÁçÿÿ¦ÝÿÿˆÑÿÿiÆÿÿI¹ÿÿ7³ÿÿ7³ÿï7³ÿ+ààବ¬â­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ­­­ÿ¬­­ÿx¸àÿqÉÿÿ‚ÏÿÿÓÿÿŽÔÿÿ†ÑÿÿwËÿÿbÃÿÿI¹ÿÿ7³ÿÿ8³þï7³ÿ5ÿÿÿ¹¹¹Î²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ–²ÂÿdµçÿK¹üÿJºÿÿE¸ÿÿ:´ÿÿ7³ÿÿF²õÿy±Ôÿ²º¿ÑÿÿÿÈÈÈ­···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ···ÿ¶¶¶ÿ¶¶¶ÿ¶¶¶ÿµµ¶ÿ¨µ¾ÿ—µÇÿŸµÃÿ°µ¹ÿ¶¶¶ÿ¶¶¶ÿ¶¶¶ÿËË˰ÿÿÿ»»»_¾¾¾û¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ½½½ûÀÀÀeÿÿÿ¾¾¾îÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀîÿÿÿ¾¾¾£ÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÃÃçëëëÎÎÎõÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÊÊÊÿÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÎÎÎõííí©©©ŸÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿ¬¬¬¡€€€ÆÆÆöÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÔÔÔÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÓÓÓÿÇÇÇöŽŽŽ “““€ÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿ”””ªªª×ÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿ©©©× ÉÉÉüâââÿâââÿ¤¤éÿ[[óÿNNôÿEEöÿuuïÿÃÃåÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿÉÉÉü @@@fçççÿçççÿyyòÿþÿŽŽÂÿRRåÿÿÿÿÿHNÿÿ†ûÿ‘“òÿÙÙèÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿ@@@fhhhÇìììÿŸŸòÿÿÿ--ûÿ€€€ÿŽŽÿ##ùÿÿÿŽÿÿÕöÿÿÄÝþÿgnýÿ»»ïÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿhhhLjˆˆûððñÿ,,üÿÿÿÿÿ‘‘‘ÿ€€€ÿˆˆÏÿÿÿSZÿÿËáçÿ´´µÿÍâëÿŠ˜þÿöÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿˆˆˆû.ŸŸŸÿ­­øÿÿÿÿÿÿÿÕÿÂÂÂÿ°°ïÿÿÿ ÿÿÎäóÿ¯³µÿÓîöÿÕöÿÿƒÿÿ””øÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿŸŸŸÿ0`µµµÿ\\ýÿÿÿÿÿÿÿ þÿ««öÿuuùÿÿÿÿÿ´ÊÿÿÕöÿÿÐéðÿÑëòÿ¸ÏØÿemþÿ££ûÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿùùùÿ´´´ÿc’ÉÉÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿×ÿÿÕöÿÿ­¯°ÿ´·¸ÿ¶ÓÛÿ½Øåÿx‚ÿÿjjÿÿÜÜÿÿúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿËËËÿ–é©çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕôÿÿÕöÿÿÍãêÿÎåìÿÕöÿÿÏðùÿÕöÿÿÄÝÿÿ‰—ÿÿr|ÿÿksÿÿluÿÿq{ÿÿs{ÿÿtuÿÿ××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÉó{{óÿÿÿÿÿàÿ¬ÿxÿSÿtÿžÿ)+ÈÿÅàòÿÕöÿÿÕöÿÿÊàæÿÒìóÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÄÞÿÿTWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿ÷ÿHHîÿ‚ÿÿÿÿÿÿÿÿÿÿ9BEÿ¢¼Ãÿ³³´ÿ®²´ÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿ¯Åÿÿ‰˜ÿÿžÿÿmuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÿ$-ÿ4ÿÿÿÿÿÿÿÿÿÿÿÿÿu„ÿÒíõÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿ‰—ÿÿZZÿÿ¨¨ÿÿœœÿÿ¾¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÄÄÿÿ5ˆÿÿÿÿÿÿÿÿÿÿÿ ÿ&&'ÿÿÿ¤¸½ÿ¶ËÑÿÑî÷ÿÕöÿÿÕöÿÿÕöÿÿÉåÿÿ_aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±±±ÿÿE5ýÿÿÿÿÿÿÿÿÿÿ::>ÿ’›Ÿÿ·½¾ÿ·ÉÐÿ®ÅÌÿ±ÇÍÿ±¶¸ÿª¸¼ÿ±ÈÎÿºÐ×ÿÕöÿÿÃÛÿÿƒƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVÔÿÿÿÿÿÿÿÿÿ ÿ‡›¡ÿÁÝåÿÅâêÿÄ×Ýÿ½×ßÿ±ÈÎÿ±ÆÌÿ½ÀÁÿ³ÊÑÿ«ÀÆÿ–šœÿ¥´¹ÿVj¢ÿDLÍÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿfƒÿÿÿÿÿÿÿÿÿ'ÿ!!ØÿÒðÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÑñúÿËàæÿ¹ÄÈÿ²ÉÐÿ°ÄÉÿ™›œÿŽ ½ÿ@X|ÿ;UzÿG^ƒÿ„“¨ÿãçíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAAAÿÿwûÿÿÿÿÿÿÿÿÿÜÿÿÿ‘žÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÍìõÿ¾ÐÖÿŸª­ÿH]•ÿBZ|ÿ@X|ÿ=VzÿAZ}ÿ8Puÿcv’ÿ¥¯¾ÿúûüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ ÿÿƒQÿÿÿÿÿÿÿÿÿ·ÿÿÿÿÿÿÿX`ÿÿˆ–ÿÿ™©ÿÿˆ–ÿÿ„’ÿÿ‹™ÿÿšªÿÿÍéÿÿÕöÿÿÕöÿÿ^w´ÿ:R†ÿAX{ÿAY|ÿCZ}ÿAZ|ÿA[ÿBZ}ÿJ`€ÿu…ÿÎÓÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿÿÿx„ÿÿÿÿÿÿÿÿ…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿjtÿÿ®ÂÿÿÕöÿÿÏêþÿ ßÿ$6¨ÿAYƒÿCZ|ÿCZ~ÿ1LsÿC[~ÿ@X{ÿB[~ÿUkˆÿ“ ³ÿñóöÿÿÿÿÿÿÿÿÿ‹‹‹ÿÿÿg¼ÿÿÿÿÿÿÿRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿINÿÿˆ•ÿÿÿÿllÿÿïïýÿ¿ÈÖÿvˆ¡ÿI_ÿ3NtÿBY|ÿLd†ÿ@X{ÿ1LtÿF]}ÿfx•ÿ¸¿Ìÿ---ÿÿÿW(((í777ÿÿÿÿÿÿÿ››ëÿrrÿÿ\\ÿÿDDÿÿIIÿÿ::ÿÿ''ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿøùûÿ³½Íÿm€œÿ?X{ÿ9Rxÿ@W{ÿ0Ltÿ=Uzÿ7Qvÿ>Rqÿ"1Fÿ ÿF' Y ph"+++ì[[[ÿPPPÿÿÿÿÿ&&&ÿÿÿÿÿÿÿÿÿþþÿÿææÿÿÒÒÿÿØØÿÿÞÞÿÿååÿÿÜÜÿÿÈÈÿÿµµÿÿˆˆÿÿ!!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòô÷ÿ§³Åÿh{˜ÿ5OuÿE\}ÿI`‚ÿ@X{ÿ0KrÿDYzÿ.Bbõ%/=þ ÿÿÿÿ¼ Ékkkÿ‚‚‚ÿWWWÿ ÿÿÿÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿGGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíðôÿ” ²ÿ,Aaÿ>Uyÿ4MtÿG]ÿG^ÿSpÓ9Mjf¡»È2¾Þïr¾ÞﺾÞïø¾Þï¹¾Þï áqqqÿÐÐÐÿÉÉÉÿiiiÿÿÿÿ&&&ÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿâóÿÿ¯°ÿÿppÿÿ??ÿÿÿÿÿÿÿÿÿÿççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ+++ÿÿÿÿÿÿÿý`:OmQJ]yÃ6Nqô/B`ÿ2Feÿ3MtÿJYpû ²¼ý³ÎÝÿ¼Ûëÿ¾Þïÿ¾Þïÿ¾Þïñ¾Þïcg<<<ÿ›››ÿæææÿ›››ÿ<<<ÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþÿÿ~Îÿÿ†Ñÿÿ¤ÝÿÿýþÿÿÄÄÿÿššÿÿ‹‹ÿÿooÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿyyyÿÿÿÿÿÿÿý]€€J[uq;PoÊ7OrøVarì³ÄÎÿªÂÎÿ©ÀÍÿ«ÄÐÿ´ÏÞÿ»Úëÿ¾Þïÿ¾Þ︾Þï ¾ÞïB¾Þïº]]]ÿ®®®ÿ³³³ÿeeeÿÿÿÿÿŽŽŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÞÿÿqÉÿÿ¶ãÿÿ·ãÿÿÁçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“““ÿÿÿÿÿÿÿÿ w33f¡®­³ÇÒÿ­ÆÔÿ«ÄÑÿªÃÐÿ«ÃÐÿ«ÂÎÿ­ÆÓÿ´ÏÞÿ¼Ûìÿ¾Þïÿ¾ÞïË×oooÿœœœÿzzzÿ+++ÿÿÿÿÿ£££ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïùÿÿC·ÿÿ}ÍÿÿÓîÿÿÔîÿÿ†Ñÿÿïùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥ÿÿÿÿÿÿÿÿä¾Þï¬ÅÓü­ÇÕÿœ°ºÿ·Ôäÿ µÀÿ±¼ÿ¸Öåÿ›®¹ÿ¤ºÅÿ¯ÊÙÿ¾Þï¯+++éjjjþrrrÿAAAÿÿÿÿÿÿžžžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†Ñÿÿ7³ÿÿrÉÿÿºåÿÿ»åÿÿtÊÿÿ†ÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÿÿÿÿÿe€ŠŽZƒŽ”gx~‚™¬¶W„•‚ƒŽ”‰§¿Ë`‹˜ŸŠ’¢«‡ªÃÐC0)))øQQQÿ@@@ÿÿÿÿÿÿÿTTTÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿ¨Þÿÿ8³ÿÿ7³ÿÿV¾ÿÿŠÒÿÿ‹ÒÿÿW¿ÿÿ8³ÿÿ¨ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïÿVVVÿÿÿÿÿÿÿÿÿçhhh,ggg/fff_ccc0gggHggg^fff6eeejddd^fff2Pø+++ÿ ÿÿÿÿÿÿÿÿ«««ÿüüüÿŸÚÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿV¾ÿÿV¾ÿÿ7³ÿÿ7³ÿÿ7³ÿÿŸÚÿÿýýýÿ¯¯¯ÿÿÿÿÿÿÿÿÿÿÿ`©ÿÿÿÿÿÿÿÿÿÿ^‹§ÿr¸ãÿcÁûÿ>µþÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ<³üÿ^½÷ÿvÀíÿc¬ÿÿÿÿÿÿÿÿÿÿÿïOÿÿÿÿÿÿÿ ÿ„„„ÿãääÿÿÿÿž¥©ÿŒÆéÿF™ËÿX›ÄÿF™Ìÿz´×ÿÜæíÿCDEÿÿ++,ÿÄÅÅÿ›››ÿÿÿÿÿÿÿÿÿƒßÿÿÿÿÿÿÿñññÿ\\\ÿÿÿÿÿûûûÿpppÿÿXXXÿãããÿ˜˜˜ÿÿÿÿRRRÿûûûÿ¶¶¶ÿÿÿÿÿÿÿø_ÿÿÿÿÿÿÅÅÅÿöööÿ···ÿÿÿ'''ÿ[[[ÿûûûÿÞÞÞÿ***ÿ¯¯¯ÿèèèÿÖÖÖÿ"""ÿÿÿ“““ÿüüüÿ÷÷÷ÿ000ÿÿÿÿÿÿ‡Öÿÿÿÿ,,,ÿµµµÿâââÿûûûÿÅÅÅÿWWWÿ£££ÿüüüÿüüüÿØØØÿ___ÿ«««ÿØØØÿüüüÿßßßÿ•••ÿÉÉÉÿüüüÿûûûÿâââÿAAAÿÿÿÿÿÖSÿÿÿÿ ÿ’’’ÿ¼¼¼ÿßßßÿøøøÿüüüÿüüüÿôôôÿÙÙÙÿ«««ÿ†††ÿŒŒŒÿ¶¶¶ÿØØØÿóóóÿüüüÿüüüÿùùùÿßßßÿ¹¹¹ÿÿÿÿÿÿSËÿÿÿÿ'''ÿŠŠŠÿ¨¨¨ÿ»»»ÿÅÅÅÿÃÃÃÿ¹¹¹ÿ£££ÿ¦¦¦ÿµµµÿ¬¬¬ÿŒŒŒÿ£££ÿ¹¹¹ÿÄÄÄÿÆÆÆÿ¼¼¼ÿ¦¦¦ÿOOOÿÿÿÿÿË'òÿÿÿÿ---ÿYYYÿsssÿÿ„„„ÿÿ±±±ÿËËËÿàààÿéééÿÕÕÕÿœœœÿŠŠŠÿ‡‡‡ÿ„„„ÿuuuÿUUUÿ:::ÿ"""ÿÿÿò'Tÿÿÿ ÿ%%%ÿ===ÿUUUÿmmmÿ………ÿœœœÿ³³³ÿÉÉÉÿÜÜÜÿäääÿÙÙÙÿÆÆÆÿ¯¯¯ÿ™™™ÿÿiiiÿQQQÿ999ÿ!!!ÿÿÿTŽÿÿÿÿ111ÿGGGÿ]]]ÿrrrÿ†††ÿ˜˜˜ÿ§§§ÿ°°°ÿ´´´ÿ¯¯¯ÿ¥¥¥ÿ•••ÿƒƒƒÿoooÿZZZÿDDDÿ...ÿÿÿ޼ÿÿÿÿ...ÿAAAÿSSSÿcccÿpppÿ{{{ÿ‚‚‚ÿ„„„ÿÿzzzÿoooÿaaaÿQQQÿ???ÿ,,,ÿÿÿ¼¢ÿÿÿÿÿ...ÿ:::ÿEEEÿMMMÿRRRÿSSSÿRRRÿLLLÿDDDÿ999ÿ,,,ÿÿ ÿÿ¢}þÿÿÿÿÿÿÿ"""ÿ###ÿ"""ÿÿÿÿÿÿþ}UãÿÿÿÿÿÿÿÿÿÿÿÿÿãUhàÿÿÿÿÿÿÿÿÿàhWˆ°ØöذˆWü€ÿÿÿøÿÿÿøÿÿÿüÿÿÿþÿÿÿÿÀÿÿÿÿðÿÿÿÿàÿÿÿÿÀÿÿÿÿÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿüÿÿüÿÿüÿÿüÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿðÿÿðÿÿðÿÿðÿÿðÿÿàÿÿàÿÿÀÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿ?ÿÿÿ€?€ÀÀÀðàøð?þ“ø?ÿÿüÿÿüÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿ€ÿÿÿÿÀÿÿÿÿàÿÿÿÿàÿÿÿÿðÿÿÿÿø?ÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿðÿÿÿÿ(`À @¿ÿ6³ÿ–7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿõ7²ÿS5µÿ>7³ÿ÷7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ6³ÿu8³ÿ³7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7²þþC›Ð…dddpeeeƒP‚ w7±ýò7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿa8´ÿ)7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿE­íÿ’’’ÿ‘’’ÿA®ñÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿü7³ÿ%8±ÿ;7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ>µÿÿG¹ÿÿN»ÿÿS¾ÿÿW¿ÿÿYÀÿÿX¿ÿÿV¾ÿÿQ½ÿÿKºÿÿC·ÿÿ9´ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ@°ôÿ“•–ÿ‚š¨ÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ9´ÿÿ@¶ÿÿC·ÿÿE¸ÿÿC·ÿÿ?¶ÿÿ9³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7´ÿp6³ÿÅ7³ÿÿ=µÿÿN»ÿÿ]ÁÿÿmÇÿÿ{ÍÿÿˆÑÿÿ“ÖÿÿÙÿÿ£Üÿÿ¦Ýÿÿ¥Ýÿÿ Ûÿÿ™ØÿÿŽÔÿÿ‚ÏÿÿtÊÿÿfÄÿÿV¾ÿÿF¸ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿm¤Åÿ˜˜˜ÿi¤Èÿ7³ÿÿ>µÿÿM»ÿÿYÀÿÿdÄÿÿlÇÿÿqÉÿÿrÉÿÿqÉÿÿkÇÿÿcÄÿÿYÀÿÿL»ÿÿ>µÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿ¹7´ÿ3@¶ÿÚR½ÿÿeÄÿÿwËÿÿŠÒÿÿœÙÿÿ¯àÿÿÁçÿÿÓîÿÿåõÿÿóúÿÿíøÿÿÜòÿÿËëÿÿ¹äÿÿ¦Ýÿÿ”ÖÿÿÏÿÿoÈÿÿ\ÁÿÿJºÿÿ7³ÿÿ7³ÿÿX«Þÿ—œŸÿ›››ÿj¦ËÿJºÿÿ\ÁÿÿnÈÿÿ~ÎÿÿŒÓÿÿ–×ÿÿžÚÿÿ ÛÿÿžÚÿÿ–×ÿÿ‹Óÿÿ}ÍÿÿmÇÿÿ\ÁÿÿIºÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ8³ÿ¼I¶ÿF¹ÿX¿ÿøhÅÿÿyÌÿÿ‰Òÿÿ—×ÿÿ¥Üÿÿ°áÿÿ¸äÿÿ¼åÿÿ»åÿÿµâÿÿ«ßÿÿŸÚÿÿ‘ÕÿÿÏÿÿqÉÿÿaÂÿÿP¼ÿÿ>µÿÿE°òÿ¤ºÿŸŸŸÿŸŸŸÿŸŸŸÿޤ±ÿ]ÁÿÿrÉÿÿ‡ÑÿÿšØÿÿ­àÿÿ½æÿÿÉêÿÿÎìÿÿÉêÿÿ½åÿÿ¬ßÿÿ™Øÿÿ†ÑÿÿqÉÿÿ\ÁÿÿG¹ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ6²ÿq5µÿ9´ÿbG¹ÿªQ½ÿîZÀÿÿcÃÿÿiÆÿÿmÇÿÿoÈÿÿnÈÿÿkÇÿÿfÅÿÿ_ÂÿÿV¿ÿÿL»ÿÿ@¶ÿÿE°ñÿd«×ÿƒ¦¼ÿŸ¢¤ÿ¢¢¢ÿ¢¢¢ÿ¢¢¢ÿ¢¢¢ÿ¢¢¢ÿkÀõÿ{Ìÿÿ‘Õÿÿ§Ýÿÿ½æÿÿÓîÿÿéöÿÿüýÿÿèöÿÿÒîÿÿ¼åÿÿ¦ÝÿÿÔÿÿzÌÿÿdÄÿÿN»ÿÿ8³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ6µÿ&Uªÿ7²ÿ86²ÿY7³ÿo=´ÿ‰cºïÜY°äý[®àÿe­Ùÿn«ÑÿwªÉÿ©Áÿ–§±ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ¥¥¥ÿ”«ºÿvÈûÿ‰ÒÿÿÙÿÿ°áÿÿÂçÿÿÏìÿÿÔîÿÿÎìÿÿÁçÿÿ¯àÿÿœÙÿÿˆÑÿÿsÊÿÿ^ÂÿÿI¹ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ8³ÿrÿÿÿ¸¸¸®©©©þ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ¨¨¨ÿ–®½ÿtÇûÿ‚ÏÿÿÕÿÿœÙÿÿ£Üÿÿ¦Ýÿÿ£Üÿÿ›ÙÿÿÔÿÿÏÿÿqÉÿÿ_ÂÿÿL»ÿÿ9³ÿÿ7³ÿÿ7³ÿÿ6³ÿuÿÿÿÉÉÉ•­­­ý¬¬¬ÿ¬¬¬ÿ¬¬¬ÿ¬¬¬ÿ¬¬¬ÿ¬¬¬ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ«««ÿ˜®»ÿt»æÿiÅþÿqÉÿÿvËÿÿxËÿÿvËÿÿqÉÿÿiÆÿÿ^ÁÿÿQ¼ÿÿB·ÿÿ7³ÿÿ7³ÿÿL´óúfÄýoåååxµµµ÷¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ¯¯¯ÿ®®®ÿ®®®ÿ®®®ÿ®®®ÿ®®®ÿš®»ÿj´áÿP¸øÿJºÿÿIºÿÿE¸ÿÿ?¶ÿÿ7³ÿÿ7³ÿÿ<²ûÿV²êÿŒ¯Åÿ®®®ÿÇÇÇÐÿÿÿøøøTÁÁÁë²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ²²²ÿ©±¶ÿ˜²Âÿ†±Ìÿ‚±Îÿ’±Ãÿ¤±¸ÿ±±±ÿ±±±ÿ±±±ÿ±±±ÿ±±±þÚÚÚ¹ÿÿÿ ÿÿÿÍÍÍÙµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿµµµÿ¸¸¸ùÛÛÛ|ÈÈȪ¹¹¹ÿ¹¹¹ÿ¹¹¹ÿ¹¹¹ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿÂÂÂðààà1ÎÎÎR¿¿¿û¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ¼¼¼ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ»»»ÿ¼¼¼Òÿÿÿÿÿÿ ËËËÜ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¿¿¿ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿ¿¿¿ýÔÔÔoààà‚ÃÃÃýÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÂÂÂÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÁÁÁÿÐÐÐåÿÿÿÿÿÿÕÕÕæÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÅÅÅÿÄÄÄþÔÔÔËËËrÉÉÉþÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÉÉÉÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÍÍÍçÿÿÿÿÿÿÄÄÄãÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿÌÌÌÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿËËËÿ±±±mœœœ[ÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÏÏÏÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿÎÎÎÿ¶¶¶ã¨¨¨ØÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÒÒÒÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿÑÑÑÿ„„„S¥¥¥"ÔÔÔýÖÖÖÿÖÖÖÿÖÖÖÿÖÖÖÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿÕÕÕÿ¨¨¨Ç‘‘‘‘ÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿÙÙÙÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿØØØÿÊÊÊøžžžÝÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿØØÜÿ´´âÿ°°âÿÂÂàÿÖÖÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿÛÛÛÿaaaVÀÀÀþßßßÿßßßÿßßßÿÃÃãÿLLôÿýÿÿÿÿÿÿÿýÿ<<öÿwwíÿ´´åÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿßßßÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿÞÞÞÿwww¹000sâââÿâââÿâââÿ­­èÿýÿþÿ„„Ýÿ€€åÿ þÿÿÿÿÿÿÿþÿX\þÿFGùÿìÿÜÜâÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿâââÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿáááÿ“““ö^^^ÓæææÿæææÿÉÉéÿýÿÿÿ;;øÿ‹‹‹ÿ€€€ÿ‘‘Îÿÿÿÿÿÿÿ}…þÿÖöþÿÒíþÿ£±þÿ89üÿ®®ëÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿåååÿÇÇÇÿG†††þéééÿéééÿZZöÿÿÿÿÿ77úÿƒƒƒÿ€€€ÿ‰‰‰ÿJJñÿÿÿÿÿryþÿÕöÿÿÕöÿÿÔóüÿÁ×þÿX]ýÿ}}òÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿ%%%¨i¾¾¾ÿìììÿÍÍîÿþÿÿÿÿÿþÿ”””ÿ€€€ÿ€€€ÿ¥¥ÀÿÿÿÿÿþÿËäþÿÏåëÿ¼¼¼ÿ¿ÆÈÿÑîýÿŒ•þÿNNùÿÝÝíÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿQQQôŸÚÚÚÿïïïÿ\\øÿÿÿÿÿÿÿÿÿ««Áÿ€€€ÿ………ÿ¿¿Âÿþÿÿÿÿÿ˜¦þÿÀÊÍÿèèèÿÃÃÃÿÔñùÿÕöþÿ¢¯þÿ))üÿßßðÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿiiiÿ'ÒïïïÿÞÞôÿþÿÿÿÿÿÿÿÿÿ==ùÿÂÂÂÿêêêÿòòòÿ((üÿÿÿÿÿy‚þÿÓïöÿ¹ÂÄÿÈÚßÿÕöÿÿÕöÿÿÕöþÿ„þÿ88ûÿêêòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿ}}}ÿZûöööÿ——ùÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽ÷ÿòòòÿîîòÿýÿÿÿÿÿ[`þÿÕöÿÿÕöÿÿÕöÿÿÔôýÿÔôýÿÐñúÿ¦½Èÿ]dþÿLLûÿòòõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ’’’ÿŒ7###ÿùùùÿMMýÿÿÿÿÿÿÿÿÿÿÿÿÿþÿOOúÿ==ûÿÿÿÿÿÿÿLOþÿÕöþÿÕöÿÿÒíõÿ¿ÀÁÿ¿ÀÁÿÓðøÿ¤´¸ÿÈâþÿV\þÿ88ýÿ××øÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ§§§ÿ¿j777ÿóóüÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmtþÿÕöÿÿÕöÿÿÑäêÿÍÍÍÿËËËÿÑçîÿ»Øàÿ§ÀÈÿÒïþÿ…Žþÿ !ýÿ””ýÿÏÏüÿîîüÿüüüÿüüüÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿ½½½ÿðœKKKÿ²²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠ•þÿÕöÿÿÕöÿÿÔóüÿÄÏÒÿÆÒÖÿÔôýÿÕöÿÿÉèñÿÕöÿÿÕöÿÿËäþÿ•¡þÿciþÿORþÿ89þÿ//þÿ55þÿEFþÿPRþÿIIþÿllÿÿÿÿ÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÒÒÒÿÿ$Ï___ÿmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿðÿÿÿÿÿÿÿÿÿ¥¶þÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöþÿØöþÿÓîþÿ×ôþÿØöþÿ×öþÿÒëþÿ¼Ðþÿ„Žþÿ<<þÿùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçççÿÿWú\\\ÿ==ÿÿÿÿÿÿðÿ¦ÿYÿ1ÿÿÿÿÿÿ9ÿqÿyƒ¯ÿÆåíÿÕöÿÿÕöÿÿÕöÿÿÏäêÿ½ÆÉÿÓíõÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿŒ—þÿªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿÿŠ+ÿIIIÿÿÿÐÿLÿÿÿÿÿÿÿÿÿÿÿÿÿÿALOÿ«ÅÍÿÔôýÿ¼¼½ÿìììÿºÂÄÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÑíþÿÁÕþÿÁÕþÿÄØþÿÅÔþÿzzþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÑÑÿÿ²<ÿ))FÿaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAKNÿµ¼½ÿÆÆÆÿÉÙÞÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕõþÿŽ˜þÿ13þÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½½½ÿÿÃMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.46ÿÎêóÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿ¦¶þÿ;;ÿÿááÿÿÿÿÿÿõõÿÿííÿÿüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªªªÿÿÓ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU`dÿ°ÇÍÿÄßçÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÒðþÿCFþÿààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–––ÿÿãYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ehÿ¦¯±ÿ›žŸÿt…‰ÿYfiÿu„‰ÿ·Ð×ÿ¶ÇÌÿ²µ¶ÿ²ÈÏÿÑòûÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿ¨¹þÿ##ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚‚ÿÿó1öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ558ÿ°°°ÿ¦¹¿ÿÇÐÓÿ¼¿Áÿ¹ÒÙÿÅâêÿ¶ÍÕÿ¹ÒÙÿÀÇÊÿ¼ÁÂÿ¶ÏÖÿ­ÂÉÿ°ÇÍÿ»ÏÖÿ×öÿÿÕöÿÿ¡±þÿRRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoooÿÿÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ„™ŸÿÂßçÿ¡³¹ÿÓôýÿÌßåÿ¿ËÏÿ¼ÖÝÿ·Ð×ÿµÍÔÿÁÙàÿ½¾¿ÿ¾ËÐÿ¹ÒÙÿ²ÉÑÿ¹Ð×ÿ‰‰‰ÿµÄÈÿž´Âÿv‰ÃÿùÿïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQQQÿÿÿ‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-ÿŠ—ÕÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÐðùÿÅáéÿÅáéÿÄÔÙÿÀÀÁÿµÊÑÿÃàèÿ»ÔÜÿÃÑÖÿ˜˜˜ÿ´ÊÑÿ\r£ÿ:Tyÿ8Q~ÿTeœÿÐ×âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿZÿöÿ‘þÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕèîÿÅÑÕÿÃßçÿ´ÌÓÿ¸Ñ×ÿ¬²³ÿ¾ÅÈÿ²ÊÑÿ/KÿE]ÿ*HuÿD]ÿ>W|ÿMd…ÿ”¡µÿíðôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÿÿÿ3™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿNÿüÿÿÿ/2þÿÑíþÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÊçðÿÅáéÿ‘‘’ÿÂÑ×ÿ~“´ÿ.JtÿC\ÿ=V{ÿ3OzÿF]€ÿ*HuÿKbƒÿ/Lvÿm~—ÿ»ÄÓÿüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÿÿÿÿBíÿÿÿÿÿÿÿÿÿÿÿÿÿ>ÿ÷ÿÿÿÿÿÿÿ]bþÿ¾ÑþÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÕöÿÿÑèïÿÇäìÿD\–ÿ;U{ÿ6RzÿF]€ÿ+HtÿF]€ÿ?X~ÿ2NxÿC[ÿ.Kwÿ5PvÿMd†ÿ§ÿÞâéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^^^ÿÿÿÿ<?ÿÿÿÿÿÿÿÿÿÿÿÿÿ(ÿðÿÿÿÿÿÿÿÿÿÿÿ þÿ_cþÿu}þÿ„þÿvþÿdiþÿ`eþÿflþÿmuþÿwþÿ«þÿÇÞþÿÕöþÿÕöÿÿÕöÿÿ«Çáÿ`v±ÿ.J€ÿD]‚ÿ@Y}ÿ1NxÿJaÿ*HuÿH^€ÿRkÿF]€ÿ*HuÿI`ÿ.JtÿSi‰ÿ¦±Âÿõ÷ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!!!ÿÿÿÿ,ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿekþÿµÇþÿÖöþÿÕöÿÿÕöÿÿÆÝýÿ Úÿ(;ªÿ)E|ÿH_ƒÿ/KuÿC\€ÿ;T{ÿC\ÿ.JsÿH`„ÿ-Jtÿ?Yÿ2Muÿ4Pyÿt„œÿÎÖáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿÿÿÿÿ¸ÿÿÿÿÿÿÿÿÿÿÿÿ„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿagþÿ­½þÿÕôþÿÕñþÿþÿÿÿüÿ`jÔÿr†£ÿ7R|ÿ6QxÿTÿ ÿÿì  6%%%÷CCCÿAAAÿ***ÿÿÿÿÿÿÿÿ>>>ÿÿÿÿÿÚÚÿÿ¯¯ÿÿŸŸÿÿŠŠÿÿwwÿÿjjÿÿffÿÿaaÿÿ]]ÿÿ[[ÿÿXXÿÿJJÿÿ77ÿÿ$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçëñÿ™©Àÿ]r’ÿ,Jvÿ;Tyÿ9Szÿ0Ktÿ0LvÿC[ÿGa‡ÿ=W|ÿ5Oxÿ/Ktÿ3Gfÿ"6í,)˜ ðÿÿÿýÇ'''ÚSSSÿ]]]ÿPPPÿ...ÿÿÿÿÿÿÿSSSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûÿÿ³³ÿÿLLÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ44ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞãëÿ‘ ·ÿHbˆÿ-JtÿF^ÿ/KtÿJb‡ÿG^€ÿ+Huÿ/Kuÿ?Xÿ1Lsÿ,Hpÿ4E]ÿ!ÿÿÿÿÿÿÿåJ$$$¶XXXÿsssÿrrrÿWWWÿ***ÿÿÿÿÿÿÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÚåÿˆ˜¯ÿ3Nvÿ0LtÿF]ÿ1Krÿ,ItÿF]}ÿ[r•ÿ5Pwÿ9T|ÿ1Lsÿ*Chÿ*7Lÿ ÿÿÿÿÿÿqSSSÿ}}}ÿÿ~~~ÿUUUÿ ÿÿÿÿÿÿŠŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡‡ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ//ÿÿððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÿÿ%ÿ 1Lÿ'DmÿBY{ÿ0Muÿ9Qwÿ@Y~ÿ/Jtÿ-Jvÿ2Nvÿ>V{ÿ.Jrÿ*>\ÿ!1ÿÿÿRRRÿiiiñcDDDÿzzzÿ¡¡¡ÿ£££ÿÿKKKÿÿÿÿÿÿ ÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnnÿÿ==ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿppÿÿÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿlllÿÿÿÿ ÿ .ÿ!4Qÿ*GpÿD[|ÿ/Jtÿ0KsÿBZ~ÿ-IuÿTjÿ,Ivÿ;Nkÿÿ ÿ‚‚‚ÿßßßü€€€¾Þï¾Þï-%%%ÿiiiÿ   ÿÀÀÀÿªªªÿuuuÿ:::ÿÿÿÿÿÿKKKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüÿÿ~~ÿÿOOÿÿ((ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22ÿÿµµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÈÈÿÿÿÿÿÿÿÿ ÿ!1ÿ#8Vÿ,HqÿD[~ÿ1Ltÿ@Z€ÿAY|ÿ-Kvÿ ÿÿsssÿ–œ¦ö0Iry';v ¾Þï¾Þïb¾Þ諭Þïî¾Þïõ¾Þïo¾Þï ¸PPPÿŽŽŽÿÇÇÇÿÓÓÓÿ   ÿbbbÿ###ÿÿÿÿÿÿªªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±±ÿÿaaÿÿooÿÿ##ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ44ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿ///ÿÿÿÿÿÿÿÿÿÿÿ ÿ"0FÖ/Jp×1KtýBZ}ÿ4Mtÿ2Oÿ ÿ48?ÿ7Mnÿ1Lsÿ/JsùanϽÝíÔ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïÿ¾ÞïÁ¾Þï#8000ÿqqqÿ±±±ÿíííÿÉÉÉÿ‰‰‰ÿIIIÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîùÿÿØðÿÿûûÿÿ¬¬ÿÿooÿÿccÿÿ??ÿÿÿÿÿÿÿÿÿÿÿÿWWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰‰‰ÿÿÿÿÿÿÿÿÿÿÿþ p @uAWy–/KtÛ3Msÿ9Swÿ:Svÿ/Ktÿ.Juÿ1Kqÿ{‡”ë±¾Æÿ®ÇÔÿ±ËÙÿ½Ýîÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïõ¾Þïl¾Þï »NNNÿÿÎÎÎÿêêêÿ¬¬¬ÿlllÿ+++ÿÿÿÿÿÿdddÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ßÿÿkÇÿÿ{ÍÿÿˆÑÿÿóúÿÿÿÿÿÿ½½ÿÿttÿÿ~~ÿÿllÿÿhhÿÿIIÿÿSSÿÿÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿ ÿÿÿÿÿÿÿÿÿÿÿyF|!I]{«0Kså4Msÿ0KsÿPazý•§²ù¹ÊÓÿ¦½Èÿ­ÆÓÿ¥ºÆÿ¯É×ÿ²ÍÛÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þ￾Þï!¾Þï¾Þï8###ýhhhÿ¥¥¥ÿÖÖÖÿÃÃÃÿ‰‰‰ÿKKKÿ ÿÿÿÿÿÿˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ðÿÿaÃÿÿˆÑÿÿŸÚÿÿ—×ÿÿ¡Ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûÿÿëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæææÿ"""ÿÿÿÿÿÿÿÿÿÿÿ¥,Kz16Nq¯\gxé¯ÄÏÿ¯ÁÊÿ¯ÈÖÿ©ÁÍÿ¯ÉÖÿ¨¾Ëÿ®ÇÕÿ¨¾Êÿ°ËØÿ³ÎÝÿ¾Þïÿ¾Þïÿ¾Þïô¾ÞÞïø¾Þïó¾Þï<w???ÿ{{{ÿ®®®ÿÀÀÀÿÿeeeÿ(((ÿÿÿÿÿÿÿ›››ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿfÄÿÿqÉÿÿ¢ÛÿÿÃèÿÿ·ãÿÿ‹ÓÿÿÎìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïÿ---ÿÿÿÿÿÿÿÿÿÿÿì¾Þï2·ÏÛÿ¯É×ÿ¯ÊØÿ¬ÄÒÿ¯ÈÖÿ­ÆÓÿ®ÆÔÿ¯ÈÕÿ«ÂÏÿ®ÈÕÿªÁÍÿ±ËÙÿ´Ðßÿ¾Þïÿ¾Þïÿ¾Þïÿ¾Þïã®PPPÿ„„„ÿ¦¦¦ÿŸŸŸÿvvvÿ@@@ÿÿÿÿÿÿÿÿ­­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·äÿÿB·ÿÿ{Íÿÿ³âÿÿåõÿÿÏíÿÿ™ØÿÿxËÿÿûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿ:::ÿÿÿÿÿÿÿÿÿÿÿÿn¾ÞïÅš®¹ÿœ¯¹ÿ¸Öæÿ…–ÿ¾Þïÿš¢ÿ±ÍÜÿ§¾Êÿ—¨²ÿ¸ÖæÿŽœ£ÿ¹×çÿœ®¸ÿ«ÅÒÿ¾Þïÿ¾ÞïÛ ×YYYÿ‚‚‚ÿÿ{{{ÿPPPÿÿÿÿÿÿÿÿÿ½½½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöüÿÿL»ÿÿC·ÿÿ|Íÿÿ´âÿÿéöÿÿÑíÿÿ™Øÿÿ`Âÿÿ¤ÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿIIIÿÿÿÿÿÿÿÿÿÿÿÿÛ¾ÞïJ´ÐàÁ³ÐàǾÞïÉ«ÅÓØ¾ÞïתÄÑã½Ýîä¸Öçë®ÈÕó¾Þï÷¥½Éþ¾Þïÿ¬ÅÓÿ²ÎÝû¾ÞïʾÞï5#"""íZZZÿtttÿrrrÿVVVÿ)))ÿÿÿÿÿÿÿÿ ÿšššÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™Øÿÿ7³ÿÿ<µÿÿrÉÿÿ¥ÜÿÿÈêÿÿ»åÿÿŽÔÿÿY¿ÿÿA·ÿÿìøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿAAAÿÿÿÿÿÿÿÿÿÿÿÿÿ Seeeƒeee†ggg4fff¬___fff¢ddd3gggYfff}dddfff”w~€hijpsu)1###óRRRÿ^^^ÿRRRÿ000ÿÿÿÿÿÿÿÿÿÿPPPÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ãÿÿ:´ÿÿ7³ÿÿ7³ÿÿaÃÿÿ‹Óÿÿ¤Üÿÿ›ÙÿÿxÌÿÿIºÿÿ7³ÿÿ_Âÿÿðùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬¬¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌfffgeeejeee:gggšddd fff£gggOeee~eeeœeee?eeeÄeee*gggËfffv>ùBBBÿCCCÿ///ÿ ÿÿÿÿÿÿÿÿÿÿÿ¹¹¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªßÿÿ8³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿIºÿÿmÇÿÿÎÿÿyÌÿÿ]Áÿÿ7³ÿÿ7³ÿÿ7³ÿÿXÀÿÿëøÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿcccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8Lð&&&ÿ%%%ÿ ÿÿÿÿÿÿÿÿÿÿÿÿfffÿØØØÿÿÿÿÿŸÚÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿL»ÿÿ[ÀÿÿV¾ÿÿ?¶ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿR½ÿÿæõÿÿùùùÿ§§§ÿ%%%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ–ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;~§ÿE¶üÿ9³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ?µýÿD­îÿ-8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJ5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~ÿÈÓÙÿŸ£¦ÿ667ÿ=?@ÿœ«µÿ¨ÙøÿL¸ûÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ7³ÿÿ8²þÿqÀðÿ½Üðÿ¹ÄËÿvwxÿ|}~ÿÁËÒÿ·º¼ÿKKKÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÜÿÿÿÿÿÿÿÿÿÿÿ```ÿÚÚÚÿùùùÿÿÿÿÿÿ000ÿ÷úüÿŒ«½ÿ"Wxÿ6^wÿAdyÿ+[xÿ;m‹ÿ»ÈÐÿòôöÿWXXÿÿÿÿÿjjjÿûûûÿÁÁÁÿÿÿÿÿÿÿÿÿÿÿÿÿ†uÿÿÿÿÿÿÿÿÿÿQQQÿÛÛÛÿùùùÿ¥¥¥ÿÿÿÿÿÿÿÓÓÓÿûûûÿyyyÿÿÿÿºººÿìììÿÏÏÏÿÿ ÿÿÿÿÿäääÿûûûÿÊÊÊÿÿÿÿÿÿÿÿÿÿÿú æÿÿÿÿÿÿÿÿÿÃÃÃÿåååÿûûûÿ¡¡¡ÿÿÿÿ+++ÿóóóÿÿÎÎÎÿûûûÿèèèÿ555ÿÿ………ÿØØØÿøøøÿËËËÿÿ¶¶¶ÿFFFÿÿÿÿáááÿûûûÿöööÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿ–iÿÿÿÿÿÿÿÿAAAÿÅÅÅÿåååÿûûûÿøøøÿÿÿÿ ÿ###ÿ)))ÿüüüÿûûûÿéééÿ{{{ÿ)))ÿ²²²ÿÙÙÙÿùùùÿúúúÿOOOÿÿÿÿÿaaaÿüüüÿûûûÿ÷÷÷ÿÆÆÆÿÿÿÿÿÿÿÿÿ÷ ÝÿÿÿÿÿÿÿWWWÿ¼¼¼ÿÜÜÜÿûûûÿûûûÿúúúÿ“““ÿ)))ÿ222ÿ¡¡¡ÿüüüÿûûûÿûûûÿáááÿšššÿRRRÿ±±±ÿÐÐÐÿïïïÿüüüÿûûûÿÁÁÁÿiiiÿoooÿÉÉÉÿüüüÿüüüÿûûûÿìììÿÍÍÍÿÿÿÿÿÿÿÿÿn\ÿÿÿÿÿÿÿ...ÿ¬¬¬ÿÊÊÊÿäääÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿéééÿÎÎÎÿ‡‡‡ÿgggÿžžžÿ¿¿¿ÿÛÛÛÿõõõÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿòòòÿØØØÿ¡¡¡ÿÿÿÿÿÿÿÿÞÔÿÿÿÿÿÿÿŠŠŠÿ°°°ÿÉÉÉÿßßßÿðððÿûûûÿüüüÿüüüÿüüüÿôôôÿãããÿÍÍÍÿ³³³ÿˆˆˆÿˆˆˆÿ‹‹‹ÿ©©©ÿÁÁÁÿØØØÿëëëÿûûûÿüüüÿüüüÿüüüÿùùùÿéééÿÕÕÕÿ¼¼¼ÿYYYÿÿÿÿÿÿÿÿ^PÿÿÿÿÿÿÿÿŒŒŒÿ§§§ÿ»»»ÿÊÊÊÿÕÕÕÿÛÛÛÿÛÛÛÿ×××ÿÍÍÍÿ¾¾¾ÿ¬¬¬ÿ›››ÿ¤¤¤ÿ¨¨¨ÿ§§§ÿ’’’ÿ¢¢¢ÿ¶¶¶ÿÅÅÅÿÒÒÒÿÚÚÚÿÝÝÝÿÙÙÙÿÐÐÐÿÂÂÂÿ²²²ÿzzzÿÿ ÿÿÿÿÿÿÕ³ÿÿÿÿÿÿ ÿ---ÿpppÿ”””ÿ¡¡¡ÿ«««ÿ°°°ÿ°°°ÿ¬¬¬ÿ¤¤¤ÿ™™™ÿ¢¢¢ÿ¸¸¸ÿÁÁÁÿÇÇÇÿÉÉÉÿÀÀÀÿšššÿ’’’ÿžžžÿ©©©ÿ¯¯¯ÿ°°°ÿ®®®ÿ§§§ÿ˜˜˜ÿiiiÿ555ÿ$$$ÿÿÿÿÿÿü?Þÿÿÿÿÿÿÿ...ÿLLLÿfffÿvvvÿ€€€ÿƒƒƒÿ‡‡‡ÿ’’’ÿ¬¬¬ÿ¼¼¼ÿËËËÿÙÙÙÿåååÿéééÿâââÿÖÖÖÿ¼¼¼ÿ˜˜˜ÿÿˆˆˆÿ†††ÿ€€€ÿrrrÿ\\\ÿJJJÿ:::ÿ***ÿÿ ÿÿÿÿv3øÿÿÿÿÿÿ///ÿ???ÿOOOÿ___ÿoooÿÿÿŸŸŸÿ¯¯¯ÿ¿¿¿ÿÏÏÏÿßßßÿíííÿôôôÿêêêÿÛÛÛÿËËËÿ»»»ÿ«««ÿ›››ÿ‹‹‹ÿ{{{ÿkkkÿ[[[ÿKKKÿ;;;ÿ+++ÿÿÿÿÿ¯fÿÿÿÿ ÿÿ***ÿ:::ÿJJJÿYYYÿiiiÿxxxÿˆˆˆÿ———ÿ¥¥¥ÿ³³³ÿ¿¿¿ÿÊÊÊÿÒÒÒÿÔÔÔÿÐÐÐÿÈÈÈÿ½½½ÿ°°°ÿ¢¢¢ÿ“““ÿ„„„ÿuuuÿeeeÿVVVÿFFFÿ777ÿ'''ÿÿÿÿÛ¢ÿÿÿÿÿ!!!ÿ111ÿ@@@ÿNNNÿ]]]ÿkkkÿyyyÿ†††ÿ’’’ÿÿ§§§ÿ®®®ÿ²²²ÿ´´´ÿ²²²ÿ¬¬¬ÿ¥¥¥ÿ›››ÿÿƒƒƒÿvvvÿhhhÿZZZÿKKKÿ===ÿ...ÿÿ ÿÿö. Óÿÿÿÿÿ###ÿ111ÿ>>>ÿLLLÿXXXÿdddÿoooÿzzzÿ‚‚‚ÿŠŠŠÿÿ“““ÿ”””ÿ’’’ÿÿ‰‰‰ÿÿxxxÿmmmÿbbbÿVVVÿIIIÿ<<<ÿ...ÿ ÿÿÿÿ^Èÿÿÿÿÿÿ+++ÿ666ÿBBBÿLLLÿVVVÿ^^^ÿfffÿlllÿpppÿsssÿsssÿrrrÿpppÿkkkÿeeeÿ]]]ÿUUUÿKKKÿ@@@ÿ555ÿ)))ÿÿ ÿÿúdªÿÿÿÿ ÿÿÿ)))ÿ222ÿ:::ÿBBBÿHHHÿMMMÿQQQÿSSSÿSSSÿSSSÿPPPÿLLLÿGGGÿAAAÿ999ÿ111ÿ'''ÿÿÿÿÿïC…ÿÿÿÿÿÿÿÿÿ$$$ÿ)))ÿ...ÿ111ÿ333ÿ333ÿ222ÿ111ÿ---ÿ)))ÿ###ÿÿÿ ÿÿÿÿÝ(`úÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÅ7¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî~9µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëy 2®þÿÿÿÿÿÿÿÿÿÿÿçs <eޏáóÌ£{R)ÿ€üÿÿÿÿÿÿ(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿàÿÿÿÿÿÿøÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿüÿÿÿÿÿÿüÿÿÿÿÿøÿÿÿÿÿð?ÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿàÿÿÿÿÿàÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿþÿÿÿÿüÿÿÿÿüÿÿÿÿüÿÿÿüÿÿÿüÿÿÿüÿÿÿøÿÿÿøÿÿÿðÿÿÿàÿÿÿÀÿÿÿÀÿÿÿ€ÿÿÿ€ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿ€ÿÿ€ãÿ€ÿÀÀ?Àà?øðþðÿþøÿÿüÿÿ+×þÿÿëWÿÿÿÿÿÿ€ÿÿÿÿÿ€ÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿàÿÿÿÿÿàÿÿÿÿÿðÿÿÿÿÿð?ÿÿÿÿÿø?ÿÿÿÿÿøÿÿÿÿÿüÿÿÿÿÿüÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿøÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/icon.png0000644000175000017500000001137511273045225023053 0ustar julianjulian‰PNG  IHDR@@ªiqÞsBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDATxœÅ›ytUÕ½Ç?ûœsï=wÈMrïÍ!! „™*”(QÀ꣥ZA‘VõÙg -µÃs©ZûZûV—®õ|A mÕeƒm­-ˆ¥Ú ‘Á0 CÈ|3ÜyÚï›Ä„Ì!±ßµöZçìó;¿ßþþöpöð;BJÉp@a–Ó‚¶”\Nµ¥#ÀŸ¤”áa1:R^WŒÀ7 @ U´É¯×öp¤ë%¿ ¸4@âצKÀ²µÄP»€âIà@´çiš†ÕjÅl6c4Ñ4 !RJ"‘Á`¿ß×ë%Òæˆ§¤”†TˆaÀ  „0/¶çÙív’““ILLÄf³aµZÑuƒÁÐá€P(D ÀëõÒÚÚJss3x½^€W€G¤”¡á$7 >ƒq€BÞF\..— §Ó‰Ãá ))‰„„¬V+&“ EQˆF£ƒA¼^/---455ÑØØHCC555ÔÕÕ¼Ü)¥ŒŒÑÞ  Rþç´‘WU—ËEZZ©©©¤¦¦’’’‚ËåÂáp˜˜ˆÙlFÓ4Âá0>Ÿ¯ƒx}}=f³ƒÁ€¢(ÔÕÕ-hÓ¿nXöƒ;@q/°¶ýÞb±`µZ±ÙlØív’’’p:¤¦¦v8Åét¢ë:^¯·£¶5M#‹ …:Æ›ÍFcc#Ñht­bŸ”ò#¶ ÈBˆ ÀækòÐuÌÌLF…ÝnGJIss3)))(Š‚¦i "‘åååí$QU›ÍÖ1H !PUµ}`Ü,„8.¥<=|»¡_!ð*Ð9?##ƒ|¬¬,œN'‹…X,†Ï磶¶¯×Kmm-~¿ŸŠŠ ÒÒҸᆰZ­(ŠÒ!WZZʧŸ~J(Ô1þ%¯ !n”Ã5KëiKY3Ìf3=ö………äåå‘‘‘¦ÅU®\¹Â±cÇ8zô(F£‘ÂÂBrss=z4f³€h4JUUN§“={ö\ksV›Ý?^/Áþ ôõP¡ݾÑyyyäå呟ŸOff&‡fùòå¼þúëèºN^^S¦LáôéÓdgg“››Ë¸q㨯¯§¤¤„Ç£ª*™™™Lœ8‘©S§öd~C›ý‘E?3½•ô0‹ËÎΖ{÷î•>ŸOîØ±£#„ rùòå2ËóçÏËÂÂBùæ›oÊêêjY^^.sss¥Ñh”€|á…d$‘~¿_N›6­› MÓ¤ªªÏŽôL°×ж¸yº§g/^äÃ?$óÚk¯uä·¶¶²k×.žþyÊËË)--%³{÷nZZZ:dËÊÊRRVVÆñãǯµ¦i¨ªº¶­#‡>jÿËô1—·X,rãÆòòåKÒépH@ê&“,}m³¬Ù÷œ¢çççsìØ1L&ÓÀ/.x.Ã{‡a×ûpä?ñÇB@U¤§wy+3}útÊËË{³¾±úŽÍ6{Òº@sýt·'h5h*‰&AÄ–¹ûk_Ur2Š=ÁŒ¦vt¥`]Rέ¿î¬L–Ϙ1#«  €H$Âîݻٷo_y€_|qäp Nœˆ“\3€Ïž iiÝ^3 ”””póÍ7‡1>›:­ G;•Éã³·b”p€:w ¯~pŠeËîÅ«=ò¸_°™Å!G’õàN`ð>ðHRέ—®µ§éº^œ““ƒ®ë8p€]»vqôèчzˆùóçŽ| ÷Ýo¿Ýøš5ðï@AA¯¯±zõj6mÚD‚IeÎıŒIÖIMK'ØÒ€IЉ„\n‰ëŸ2e*º®¿°~ýúMmj>þ§éB™9)çVo¶ÄرcÜu×]7¦¥¥ñÉ'Ÿ°mÛ¶öJ4MãâÅ‹ddd œ|k+,^ ï¿×NÞî¸Þy§_ÞæFþñç×yó·ÿGºËA8àÚäDà÷yñùÔûŽŸåj³ŸP(D~~~8‹>sæLÝÀ šÕjÍkjjâÊ•+ìß¿¿ƒ<@nnîg䥄êj¨¯£1žL&ðûãy ñ>^R.ôlmãÆ^ ð¶òQÙvŽïŸOOFOH"'{ Á€ŸX,B8¥º¦Öw¶Áo>|æ’ˆµùVÑh|¯²²òë~¿Pä´h4*Î;Ç… º}÷+++©ùe\'OBmmÜC|$ohˆhnw÷fÞ’“»ÜFBAŽíù;G>ØÉ…SLj†B¨2& ô† ŸTµðÏwOÐŒ,1™L•Š¢Ì‚´X,Bì çK¼Âét¾ëñxtô:ciZT¸zuh/‚;ŠáñãÛ°Ó§?æà®Tœ@ïkó!B“RV !~üg_‚nà.à­œ&,½µÛóp8B½;ÄÅËè† Áp wsˆ‚·sõ¿‹†1›mŒÿÂÍÜvïJé™* Á``öìÙ”••xͰ´×ú` 0©/áÓÀÌŠ þ÷í,œ?ƒA£Õ+Qânö‹A0bÃl „AF‰¸ÒÈw¤2éb#ÓKwtYæEEEípúå~ H)CBˆUÀ~úÙ*÷JÉÊÕ?dÞܹ¬Zu?Ù¹ãqØ "¿ÏC8Ä‘d¢èÆqä† Yðû]ñ±cÈÉÉi¿l’‚>ÐÑ凜…¿žÈ‹»÷íãà‘#dCS³›úúFvnÿ-)òóƢ놋Οr!].WûåÈ´€Nx xb–ÑÈ¡PÿGõ~¿ŸÓgΰñ™õÌùÂT,æÎ2’mpc!,_Ÿ&{<› ·vKz‚Óél¿öpmswìœ?Ÿÿ\Ýå»á¶ù_äƒwÇ´ó(ÛÛG-¯¼[M• 4ÃŽ7\ÈϳTÃÌ™¶'ßy‡'JàP[: ä…@ᤉn™„ÔøNÏÕZ/ 6½okÓóã©Ú ûç€ Ù¶ñ `5¬èâ)eLñ±gêÔ›lmyÙméžkßliWœ|]C£AÃfQ …BF¸ê†{áJ øƒ 0BžxXPÛàØHDô4ù9reìØ›ÒÎø‚§7\º —j!;•}‡*Ðuy™ ƒ‰Q[ÿÕ-°ndeÅP} ¿3¶š~g¬CAOø¨¦¾žØ¢E(¯¾Ú‘)lÞŒúá‡ñ‹xfk|é|ËÜ<EPuù*›~OäÆyÈtÚïá\¡?tvJMM ŒzúæT[[KxÉ’.™'Ÿ~šCiiøŠŠâf3žQ£xû½3 * V »šp¡¥K ‡Ãו"‘HGú¼[@yMMM$¸d‰¦MžŒzâè:ïjîüƒ]gÀ’/á‰FAðzBè[ß#€ÐŠCªñ¾PSSN «Ò6tkRÊHEEÅ¡p$‚ï»ß 2~wïë:l ÿªü áÿYIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/layout_compact.png0000644000175000017500000000102711273045225025137 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYsïïyxÛtEXtSoftwarewww.inkscape.org›î<”IDATH‰µÕ»kAÀáï˜`uD! ÆŠh!R6Vv)ýÒˆ`“Æ`cì´“6b—ÆÆB|V©RXD%„€Š ÅèX܉ܻÎîÍöÀ™óúíž9ÃDJI—²§Óêmq ".wÀ®v h-C€ˆèí¶`Dì¯à~DßEñiÜiÁÓˆ˜üâSx‚}CŽ”Ò_Åy|Æ*ú²ÿ žìçð ë89ä+oC^cbgñk8ñO½ª¡YÁ¡:Nã=ÞâX±Vɘ“/à–1^ ‡ |ÁѺ:Å{cú*p7¥´UI)}Å­ šˆ(ž~áËÇð Wvps9vÑØ"ŒãQN¸–m{1‹é†)šÏ9÷ªjàbœËû‹ø€oø—xQsf7sîBà®ìŸç¤mÝÄJÃ`,`© 03°>ˆ­ à7Vë9ïÒNÇô”þ˜¦Š[ÔjLót½Á»ŠyêrJ2ê=¸Ÿ¹5ßóz© `ä/b q½6íI)õg¶KéüÉü38±eÜoÉIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/layout_linear.png0000644000175000017500000000205511273045225024765 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ªIDATH‰µ•_lSuÇ?ç¶íºv·ë–nÓnNÜ’ù¶d¨`”!Ád/î'Œ1€>ŸÔø/ò†‰ãÃß@¢²è¢14H¢‚°I$Å‘Ž uÓ±Žý)[×Þßñ¡·¦Îv›Nró»÷Üó;ßß9ßsÎOT•›)ÖÿÙ,"Q©YÖFU‘-ÀÀ'Ày ™ÿ_h[D÷Pœ(b÷³ª{Ý/°x~v¸:Ÿ»i xOU/DP øUõx©¼EtÍÀóÀ1à} ãê§Dä’ª¾]ÊáRYÊxx8Uà`xÁ=y÷jò„ÜõQ¯×{²¬N@œÎ‡j#“€޳¸SD¸ (‘Î"¾ª:š˜ÍÌcBÑø™@¨êWÉ:`zj¢y1=³1RÛt@$«‹ˆÎŽ ‘Éܘ.’ãàË•"Àòx´"R TTfcTË$šš±‚ÁH,&8GÍbêÆõ?F[1frµ)"嫌ÖÕÜ´UŒ¨c²*âDU(GëbÆÅžø=î¹è/’Ò€ñùíÚp¸VŒªªQµÄS¥bCv,†ŠªQY8Uï8ÎäÊxU!'›¾š¸p|cۦǯ*Žb¡eþr»"T]§ÊzU53Éa;5—4@ŒK²ª~›NÍT^ùádkǶ=ó^O™3?—̤¦Æ³ÑxëÂ/CßDÙÏ6=2oö¿îÛ{z sð-G2î°ÛF®Ÿn÷ûý›+ìØGMwoê_¿uÏ×kÖu Eë›ûok¬<–HàìÞYæœ{q³ÞSžTUJ=E\4»€w€`Ý×îMŸ¹Kµ·GG÷m×ö¸} ”Èw²Ç]€-"U@ÄMÝryº÷ìùìÜŽCg¸<1G DVäè¾ƾB€¿m«£Ñî|©+­½=š<Э-5ßöR–Ê[ÀZ7E[ÜtýCTÕ Œ\l×á¾Ó‰ÉAÁÚäû`øØÍÛZàΛ `±D3082up÷áAÛïó4ž»’| h‘„ªŽ¯]8,¸i»4,Wë+öA€ràYàC ã¿:WÕÜ¥3åOEé:R¸ìAIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/layout_multitrack.png0000644000175000017500000000250611273045225025673 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÃIDATH‰µ–kle†Ÿov¶[¶K[¶»Ë.½X@nB´r 0AÊ5˜F‚ @cPc$FRàO‚ £1†pQ{ZI!)µ”-”îöÝn–½ÌñÛÒ&È™?ïÌ|çœï¼ç¼ßŒž¥é=@)eÔÿ;."Q=Ü ”¯ئÛ69Ö9VÄïÆMJ)C¤ ‚†ÂèÁ±@Ló}ê{/ŠW. 5‘ ¸¨÷M)"µS ¦†sÚsÜ-õ-¤ØS°¤Xh½ÖJš'ék§“ûbn¯OÀ`ÇÞþÎîÎZ¥TXD¼‰MçöpÞ~.5-õZNnŽŒ7Fæ¿6_:¢’?%_†Ø‡ˆk¨K.{/K qÕùê$33sNÂ7WDè‹ûU ”ÒmžžŸ×ü°¦JSK1KÿX @ÐdýgëY´wšI#H¡?r¿AÓõÆÆî¦ñÅ}óà‰‰IÓ@DrîS»¯Ë+Œvƒ{¡{ÙJ©1@fbXì€W‰Ho“5M;–æq&>(œóD‡bbõç/N7/ÕS$(‰Æ*¨29k" Còà=ÐÕu²¾¹ù«ÉRäpeçiᮎ»ƒ"iå %®YSfΘÓ3ò…°ÅšfÂ0$nòdf""(ÅÍ·ÉÎYŽÝ>‡úgg¿‹Ív€¦¦Kíý*06.ɺyíü´,÷eV*„áˆ)£­Ã1 ß6š®MJÒß¼]Yq6 ghq‘¸Y)S ºq ·ÉN³ùRͬY®ÎXŒ·1inÏH”b(?þ]S§óDÚÑ#Aç[ô¶‹eÉ«;ºÿÒEį”Êí+4ñ>¤(9™#YYX-fI]›Š«×¹¯’HµZé ´Ñìõ¶¿ÿI0üí~³iÏôyÎ/ºëJ©i)òvËjv¯’­V«UÃ"nß.¿Ÿ:%.§S:ý~™8a‚L<ùXþDó¦Í¯<ï—}"û dë¼Ñ·†;¬RòCŠl¶KÇ7ntÙ’“ÈLOÇa³õÛLaié—¥ee[Çz,™”õõçËòÜÿt¥åHUÓ¶:_×¹)’p˜†'bVM@Õ'Cñ4ú|¥ÔX fj¤¬ûhÍÜ₼Á»ª›õ’âúpµZ°à]Ó¦u»ú*¹˜Ú3qÀÍ'àôžwÆáÃçÓÝΗrJvS2× Àž‹üš¿ Ç[ïÐPZz¶¢°p¶Ö¿â?Ð6÷,vWV¦¾>té Ùt¢Ø’ŸÁÂ3ßX½œ´Ó§ðøa÷ŸÍ[^no=S(D=N6ÿÖÌ®YNŽ_häÊëx²²ìO•`xQ‘7ºzµCflÝJ[u‹?ÚFþÉJf¹\Ô:T…fJ€ ÿ¾Ÿ¾'bëÊ•{ô¼¼Áˆ( ÄÉ#KB×#ñÚZ_÷Áƒ+Ô³þ«Ðþ}ÉÓÙ?ÙHæð™†IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/layout_page.png0000644000175000017500000000200711273045225024424 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<„IDATH‰µ–]le†Ÿovö·Ý¶K»H·EZTPIJ¼ QŒZˆ$j‚Q.D/01Ao,($’xAb¢ñBLS½0F0DLôƒ`ÄBM«4ÕRDúc[±»ÛŸíþÌ|Ç‹Îê¶´KkàM¾äÌœoÞwÞ%"ÜJ‹%”R+o†€*8PJ= t¶“»˜6“@?0è%r'E$Yì`;`:ñÀ‹Àƒ@% ÀVà  q9Ìîmv£Àa ‰YgßeÀ NÜñª€m¸Ý{ñbé]@tãbxØô©å¤‡Ü¾ðiŸßoZ ËJgú”RY—é-DzpDÈY“ßÚù|3pÜyVñb¹Eö†ëÝÛâM_^ÖV9­lCƒ…m(­”ÖXJ”2tf&Lüyé1­õÞb2™×÷fQ"gš¤¶1lrVÆmf­ÄF‰Òy±•-J‹é*Wb¤?,"7쨔R5¦Û?žÏL7…"Õ©\>s{CÃJD4"J¼ZkÖJ&W+ åSJÅJpO‰ÈTq Þ­O$þê¦î®MÚ3Qô‡*ÃéÔh,Šk%¢D´Öš¡Kíµ ?’%¬9¯mgûScéÑ?~y ¬¦.à–÷*‘*o Ì-€›k¿Ÿ½½±~8ªê­ó —HÉëFE63yè׿L_é:ãÍç3«ƒ‘šêptÕ ±íØÅöOk×TŸn:v4Û°fEè­ «Ê_+!Ìí¢ÃÀA àòxîózÃ-Ê0†áº,š¡™©ñ¯[^É¿>}¥¢±uKsäTÏÈôþÏ»u ¦.ä@D’Å}Ü`ÖøL³¡y]uÛg»75øÜ.ÎôŽ¥[ŽwìLXHYöòù¨ßvwìâÔ{OŠ´ís¯>œÞ|´ÐÞEI€µ¥D€•[ÖÕt§miÛ!ö7Ï4Å+Ž޽°Šhp§½€õ@gvL/„ÊÍk£Ÿ|ñÒýë+ƒ~ºšÈ=ÿñßt¦^Æçë{—»¿GK”dü\ßµ·~ÿóØd–už=[ïx$Væ{¶°a±/Ú.à©ÄÅH]¸ü÷Î'ZÛ;OvåÞ9õÛÙ‘‰Ì‘BrÑ6u°×y‰·— ˆWžH¤?dvø]צ€£üWŸsmÍg[æ Ü*,úWq³ð–2ïã€>´<IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/layout_score.png0000644000175000017500000000215211273045225024624 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<çIDATH‰µ–]L›UÇm)íK»È ²u’•‰¸Y²aØTü3…Å€˜%£^lKôbK按ÙÜqóÖ,ˆ˜à&`:ãp36#!FÊ€"£eP[Jim_ÊçHÌžäÉ9Ï×ÿÿžóœsòŠRŠû)÷0ˆH!pðw“ºq]kÄÆ•RCƤ‘œN^¥Tï½EÄT–òë6³ÙüÞƒ®:+ê³gÃñÅýÇûº¶vµ·‰ý/Ùf·Û;ÊŸ?±'’ÿLÀ0*øÎ[´ýK^WŠe§fÓM6Mv»ýÆ;§¾Ø»PXœŸ%[hÚwü׳ë­Àš‹°ˆ¤çX5Mû¬´´ÔÑÙù­öAÛJÍàèÀûÓyLYvJ·bÍuÛꪾâ¾G†ÁDÈ?rMD¥š,J)D¤ðxM¯¤¿ŽYYYï:ŽOûûû9Ž<êO{˜ &>0ìÿ›Û¿\$Ó–GÑ·1˜² ƒ²¾sûnm¸E"R+"#‘H¿Ïç»QQQ1wýj¯Ì×s,9;pÕ}Œó౸Й¾.ˆ¼| ¼ |‹Å&ÇÇÇ_¬­­ìûæ£H•Ë´Fºf™7¯ò'·èqà7àpøØ‘–÷pÐ,Ë £É|Ô¹ÿ ›c—;3Šž›þ*è>9òã'~ õR.(¥Â)°X¢@kÒ&é;´'m•Ù ›L&G4½Dâ¥âw”R·QJ­R`70ø€Ë€¶VÞfT6úm‘\¥ÔÔº ›ÿ?±W9•Þsöi5;;š÷ž§ÜOLÓäÿ×U]]ÞÖÖ¦µ¶¶Z÷îÝ[ØÞÞžÞÖÚš G ‚p‘€€ ëeY&--”””ÅÙÙÙ³½^¯#%%¥Íëõ*©©©|»Ži ÿ¿€­¾¾^Ú³gwæšU«ž©¨¨Ü¶{Ï©¹iÏ.LNõ$$’“›397'×›”ˆÇíÁãvƒ ‡ðtvt´ìÙ½‹ÆÆFLÃôZ,–ÕÉié0räÈß”””,ÉÏÏ÷ «ÿÁæóuÊ«W®<í‹/%~¹tÉËÕÛ¶¡©ª·°°ßê#F ?e¸wÐà!äååáöx°ÛìXlV$QF…ýÎ¥išªŽDìÞ½‹Š-[Ø´q#k×®¥±©±ÅãöÔŒ5jÓÄ3&Í=æÔªâ’’ªo!ö?¶––fë¼O>q|ðÁ?'­^±êÍŽÎv—×ëåÔÓÆ2í¬39r4}údãv¹Ð ÝÐÑ5 Ý00tÃ00M“ÜA@ÅèK’eI’$‘p8Lcc#›7mâóÏæ³dÉ÷°pÃä)SžwÞùÿ7uÚ™¡o¡ö?¶·ßž3âW_~dÍêÕ#¿×›žÁä)S™1ㆠ†'!]×QUS1M“Ø=„}ÒL@8äùMö+²,c³Úe™P(Dee%s?þùó>¡¾¡ž”¤äÕgM?oÁw®¹ö… gœQû-ØþVeEEß§ŸzjÒ‡}ðJ—χÝagâÄ3¸bÖ•œrÊHd‹% 0UÅ0Œ¢¾!‡ÙᎽ- "’,cµZ¨ªªä9oñé§óèèè ;;§jæÌËoùÞõ×VÔ¿Xÿlÿ¥kÞ¼¹ÿÈoû•——ý+ ѯ_?f]} Ó¦NÃãI  ¢i˜ûÐ!IÂ1áëÇ›˜fTâI¢ˆÓéBQ–-û’×_{…M7a·[:dØõ·ßñ«÷§Ÿw~Ç·`û/[¯¿úÊ̇~ð™Öæf¯¦ëŒŸx×]wEEÅ„Ã!"%.ó q?5y4°EU®Ðs´yб¦abµYq:ìÙ³‡7^¹„aè¤gd>pÝ÷¿¿ìW¿º{þ·`ûoÚk¯ yð7÷}ÞÒÒê•e™ógÌàò+®$)9™€ß¡û! ·MvÔó5kš&‚ àr¹‰D"|ðþ?™óÖlü~?N§“k®¹öÏwßû$§¤ìýl'ñú×ï÷¹óŽ_nljÜëµ9\zéeœ;ý<$I"‰p¨ÿë`Pì'‹Ž Þïõ:ÿAÇöúÝ4M0Áf³!É‹¿XÄo¼N{k N§“‹/¹lÒ>¼"5-Mùl'áZ¿n]Ú ?üÁ£;vn¿Îj±pù¬+™:íLTMEU”6_8"fŽÅ 8òáÇ.eYÆáp°jÕJ^~ñ|>‡ƒ /¼èÔß>úØÆ¤¤då[°D«³³ÃyÓOn¸áÓOç=n˜&çŸ>çœ{º®£© èÍy‹ÃcãBT8vwµ÷i$IÂnw°dÉbæÌþ;‘H»ÝÆõßÿÑOzä·ý_›üßvÁ/½ø·é Ì\Ó4ÆŸÀ¸ñ (вÿV Â~ªîPàzÿ`3Â.¬y$‘'ì÷u^F8fĈ´·µ1÷ãPU•W^zñ¾ù}ø£Þÿl'ÁZ·nMÿ—_xq@$¡ÿb&Lœˆª*„#„CqdB8FNíxù·£|Öìu‡L¬V+cN=={v³vÍj$Qò>óç§g iÜ‹8öcNEQÈÍÍ£o~_¶UW#I’÷õW_ztò”)׌5jÛ·`û¯²²ÍcæÍ›{¦$I"IÝÝÝÇäT—ä9@ê «½¥gLÀ Ùq8èXÀj³Ò¯° hªJsKó˜ž{vÆÈQ/>ñ-ØþÃkÞ's ÷îÝ[êõ’š–†?àG×õcÄÏNÃáùƒØáènÁ>+L8ªÞ´ý(ÉÌ̤®¶Y–™÷é¼+þõþûË/¸è¢•ß‚í?´ÚÚZÓ~öy¢(ŠÞ ¯L“€ßµÕŽÓ41Œžü4ÃÀè  ¢ç¼DQ<¬ô;ømá8M½c?¯Åj%33“½{ö ë:‘pxÌœ·þžpÁE}+ÙþctÇÚ5CÊÊÊžq8¸Ün‚Áž ŽCñf=¿ëšFDQ0 »ÃËåÂf³‘àA%|¾.Âá0ápˆp(š×h±Z‘e9ÒCí@B.öæ1û±‡;^UTv'‡ŽŽLIbùŠåŸÎ›7wÔ9çL_÷-ØþkÉ’ÅéJ$$¥¦yÀÏáP“p(„išdçä2tØ0 @NnÉIÉX¬VLÓDQ:::ص«Û«ÙR¶…††t]Ãnw IÒA^î‘ù[ᨒC¿Ï&‚(I¸Ý:;;1 ƒp(Ä?Þ~û“sΙžþ-ØþÍkïž=™«W®ºD”$¬V ápÝÐâÄA@Ó4‚Á}údsÞ2iÒdòóó±Ûíû’%{¤@^^C† !žBC}=«W­äÓOçQ[³»ÝÕbÓä¨Äp NÈ!ÈeÁ<ø3’,a³Z÷û_,ô.ûréÀqã'T| ¶ã*//¿«¦fÇå¢Íÿ…B¦qÐTEEQ"Lš4™üè† €a躎 û¥~›¦‰,Ë躎Óá ¤¤$ ¾¡CùÇÛsX¸ðs‚€Ýfã(4^”11 ÃÄ0uL#Š,AŒ&Q ¢ˆ(ˆ½4ð¡mM¡ç3ˆ‹%ž¹âïðÁûï]ú-ØþÍkýúu~wI–¢’+Œó& EAU®ùÎwùù­·‘œœZop(ÙLÓŒ±8BFz&É©)Ì~ó BÁ v»ýl9Š¢ ( ¦iâp8q:Ø6 Ã$Q"QÀjµb±X–tÂþ€31E©—š5Y´hÑÕÕÕÏ7Ÿ¬{¥t5_l(Á.A’‘l®•²39ð_¶5«WEír!ÿŒ¯‚-¯ …Ã\wý÷ùÕ]÷àpØ£ù^ÕP‡‹0ø~Ì3Mó¦qÍ5ßE× ^yé"áV›u?Iª(*¡P»ÝÁÀƒ~Ê)ôë_DjJIÉIhªJ{{;--­l«ÞÊÆ¨­«Eõuâ°;‘eiŸÄQ±Ùl¤¤$sÕÕײqý6oÞ„Ëå"ð“’šÊO~ú3¾wÝudffŽÛÞ߯®ë8JJK),,dÌ©§òêË/ñî?æÐÙÑÓé<¤rð!PV¶¹ï’%_¤Mœ8©õ?¹_ã]š¿¥»õZÙPJuCÅ“”†díƒfŠ„USÓPÁ0@ k® 'š¯þ:t¹»àT÷I ¶ò-[Šzl¿'LUÑuk®ý.C† C×CòY¦iîºb@E1ÎÁõ>·$IX­VŠŠŠ¸ø’˨ÞZEGG¹¹¹<òÛßsÙW â~e1 ÷Jì{ Ã@EJJJùÕw‘ŸŸÏÓ|’®®®(àŽ’ aš&¾ŽŽÒ¥K;'Nœôo¿÷áö]Ïkþ–aj mŒ¨kX=‹ˆ¢ˆ„кÑ#A -‚©«`ꈀ$‰È²„l± ‰Vœ'­{«\î‚SONÉÖÖÖzʦëo;‰ )))åâK.íÙLý̾ßð˜w…Ín§µµ•Ý»w#K Àát¢j6› MÓ˜pÆDÞžSH]]=þ$_r)š¦VÂ8θmeŠ¢ô½gš& ‰‰\ýï¢ë:ÿáQ"‘V› Ž8XºtécßËÌÌüZ+ìÕ@§G ´]fÛ_Òhá Ž„’’Ó0L‘ˆ¡«³%Ô…ö£«A0 LÝ@Àa•‘-Q(EÂ:’ÍM@ÕZD«„*¥ÔX33O^›­µ¥µm÷žCEí"ÉS¦Ò¯_Ž5E*f·ÅT¨Õje[u5¯¿þ* ,@3tÎ=g:7Ý|3y}ód ›ÍFff“¦L%%%%4Ó4q:øý~ü~?¢ ˜”„ÝnG8b¶bL2õVßv»Ëg]I}C=¯¿ú ²$!Éòÿع½zò¦Í 33Ï-ÿÊÞcwë,¥«ùV5Ð:FT-®Ä$oÍDSBt47¢:Ð#ݘš‚ijˆ DKív6‹Œbˆ-ªÍS#»½5.‹3esRbÆ#ÿÞhEEyrsSÓ!o¾¦ixÜ Œ3Y–Ž9 ßt‡ƒM›6òë{ïfÕÊ•=Æ?<ûì_èêîâž{MzF:‡I’¸à‚‹8h ¦i"I¡P?ü÷Þ{—š;‘d‰Aƒ‡pé¥39j4ªª ‘$ ‹Å^ t’$‘œœÌw¾ó]6®[GYÙf\n÷QUiww€•ËV\yöYçÞ{BëØ¥t·ü@õ·]e•ŒR5¬˜’‰É^™P$‚ÖÞŠÚÝŠìÀPBû²ŒA´Äï¡Ûi#¢©ýW»RóH²í^C "H2¢ÅŠ¡kˆ’|òƒm[uõóš¦ÖSë“Õ‡ââ’:·Õj£££ƒ¿<ó'–/[NB‚‹%z#‘0ï¾û¥ò½ï] ˆÈ²Œ7=·Ûƒ tuuñ»Gâå—^¤£c_QûÊå+Xðé§Üzû/˜yùå`š„B!ÂápO‘‹‹Å²ßÔ¯¨ˆé3. jk%š¦"Ë–£]¾wéâÅEMM¶ŒŒÌÈ1øíõ?øšîW»ÛLÅkµ»HLL@lH‘zHE 4£t5¡‡:1u! °Þ^1 —ƒÖOÿ1oŠÿ6¥i+j ÓÐÐ Ip$¤#&çáH/B¥“lÕÕ[ ÷7Ý0HHJ$;'çÁfaÃúõ|±p!.—s?Øl6"]ݼûîÛLš<…ÒÒdYFUÕ8hþöüs<óç§1 ƒ„„„¸TÔuúú:yøRRS8óÌsÐt=Zõ¥iD"<6›-Õ°X,L˜xï¿÷.Û¶n=°±mûÖ+ÊË·üøh`‹4onÙy¡F2lN·×æÅ­hºIP704Ðу>ß^Ô`;¦¦E3bDé `ÌSOJp‘Ü-žü±ï‡wm¼­õÑMé¡>èª]hÙ7 ÑbE<Ù€¶«¡ÁQYYÑv}‚E¶àt:ûÜ¢(¢i:55;QUù;É4Án·³}Û6V­\ïÝÆŽíÛ™ýæë¨ªŠËåÞÏE‘ÄÄDZš[xgÎü~?‹%þy]×ñù|„B¡ýx¿hŒv(“Wª(*_.YòÀQ%ZëŽÕ‰ÞÔ›ý®0©T‘`HAQÔ¨/¢Eˆ´Õl¬DénÃ@äêâ`þO–%ÝB‚w¿‰ÏÛÔŽ¹Ò ËIT‰°ª£(*ªf1,¬i¸2ú#v×ܵáä”l»vír575µÙX>†ùÀjÆa³8$I"²zÕJ®˜u%6›-ÎÕíØ¹ƒÆ¦&,Û$§•mÕ[ÙÕPGqIiœE]×éêê")) «ÕŠ Øl6ú—`±X1 #.)´6¬_wVgg‡œ””¬ÖÃŒDÐP -JMD-Eô p{=ª¿AA<2 ,²„ËiC³¥­öôi¨±jWw$x<Ô'%õQ^¾e|0è ]×Q”ÈqŸÛ0 d»Ln^.‚ D?@º‰b4h¾sçÚÛÛéÛ·oOÔB$`èúA])”ž‘HŸÏwP6ˆ(F¹¹@ €,ËñˆENN’tlÎŽišl)/O­®®öŽsê!]ö`cÕ*S‹ š¦Ëý‹J,Õ×L¸­C FAv„ŒÓ4±Ù,Ø­ WÎ%Ø5+´á_ÇJ}ÐC}pÒRÛª«o0 Ó{¤Íìîêbïî=xÓ¼ÇÏ)©*#Gæô±cùä“OIIID¥85³¿:Ú;ˆ„Ãñè…,I¤¤¤`±ÈÆaϯë:n·‡Ì¬>Š”!ZÆçp`·ÛãëñÔhù»»½kV¯RÆŒ9õ ¿uîÙñ’ÐZ5&1#°.€iD%({ ·Õbê‚d9*¨v’(`$ä·øwWÌ:õjó »½ôPxìnD‹5îÁ'ŸÍ¶£fGò‘þ.Ë2---lÛV}bá—H„to7Ý| C†¦³ÓG°§¢> ãóù%‰©Ó¦Ñ·o_º»»°ô<µƒ fÀ Á„CáCÚW†a ©*§ž~YYY‡­þ2 #®^£”Çk¬^±|ňßܸzUågïξÎP tÑÞsbh­=@¥£Íé°"K2–Œ/wïÚ’Ž–¨ó JxÜN A‚Ôþ¸J§’<è’Š'âÊ€51ÉæÚh'ØÊÊ6gìܾmÌ‘Ž‘$‰ÎÎNÖ­]»_HèØM6“`0À¨ÑcxôOpùå³ÈÈÌÄíöàñ$1`Ðpn½ã>~|Ó–$:»ÁéÉ =#ƒŸýürróñuu£ª†¡Ç£>Ÿ‘£Gqíµ×aí‰@ŽëS%Ñ0 4MíIn9fù6¦²²"gó¦MqãñÓwß17~þa)ºÎ¿>^LKýv¬6 ‚$¡u·DfD&ô&¹qrËŽa ˆƒ^î¬Ýp½ Jqi&  .š`ÇÓ"ž~cq¤ä"Ù\G½è“JîªoHòutr¤ç\’¢¶Î¢…ŸS[[C~~Á Ùnáp˜SNAáCýÙ¾³¦¦,’Inv ¹}d$mþÝ+°†ºp[’Qš˜R"çNÆcO<ÁÓO?Kyy9J$€i(ØlV¦Ÿw>·ÿòW”@ 8"àõ^´Hcc#Úœ–C­¦Æ½¶ 7 /)ÈéþäíÙ/w·î%ÁacKy5&&;·ïÀ”ŒÅá&ÒÖ€¡+ˆ’«,E%uÏ—‰1ÏØ¤'©TBÑÀž7ìSß¶å׆úÀ“?[rŸãºï'ØÊË·äÁ£ª§ÓÉ–-›ùø£¸ñ¦Ÿ!Š"‡ ÚÆÇ@× ü!›+áƒ5äþÍØ”•ÈÚ´îL­'QÓPšº†a@Drp^q_ÝWÄꪡԶ¸‘¬©”÷eô¨a¤¦¦á÷ûx=±hBLVVV * v»ý˜®_ÓuÂå¹ï¾ãM5¶f¸½›uÖ­ÝL~aN·‹ù ׃(2jXšD¶Xq;íD4ÝžŠhOhL£FQ5è: `ZPœùCµW|~ÎÔ‡Çi'$xHè7KÂñ—EœT`«¨(¿£0&‹…P(Ä«¯¼Ä¹çN§°_¿Ãª¬C'‚C´#©µØópj«°I>DK¦³Ù“b˜¦)"*¦Ú‰ÞK$\KŽ­œìÁ4ÛpäÌ«°fžIÄpèjÃ8F¯Ò0 êÙ²y3`“Uu “A}s½§—æcjº·ªº] Q\ZT–o#!1‰­Û÷"醖ä"ºœÐâÈ.~^ówÜÛ›úà.ìûüpÔž~㱸’OhO°ÕÖÖ”ÖÕÔž}¬v—ÛífËæÍ<ñøcüቧ°Û£É“Gý¬è#„;4wày¬ÊLk.†<]LÀ¤d ¦¡€i"ÈGÖÄÓ00ÔN´ÎõhM ¬»&!ç߆41걩Á£Ì‚(ñåÒ%ìܱY¶Yõ›&ª¦á¶Ú8oüÎ4–°ëוãñ8˜|Æ0vÔìeí† (-$¨*¬\W…E€75€-­`Nö€‰7wíXÕ|‚ÔîÂÓ‘íîÞã“luµµb}CÝqEN'o¼þÙÙ¹ÜuÏ=8Ž#ØJ¦€¬Vãî|GèADŒÈnŒ`&ºéˆJ5[D×0ÇÀÔ1Õˆ v$KRæEX½g!7~‚Ç«Ö]‰%ÿF,y?E= ø{ýv»ÚÚ>þèCE9b ^Q£Aò½©œ=n Ó&ŽÄ.¬Z·•ôŒ4’’Y¸¸Œüœ$N;ueU 4·´1zÄ@vµv½¼¢Vë’!¹ó}Û–Ÿ(õ»ð4d›ó+íñI¶êêê¬îîîcn"dšQuªi=ú[0 n¹ý¸\.‚Áà©€‰„%ü±Š] É ©‚ ¦N…Œ wc(ÝÝh+R¦ yFƒhŒB3†† »på^‹5e¾ÊÇTÿÝ_ƒ\p;‚5SW!-ìhºÎ¯½Â¦°;‡ýêJªÇÅð¢&ŒA¿‚6mÞŽÝãǦfWeeÕ¤¦¥€ÕIÐ߉,š TL{wèîÒQgl={ÂÀùqêÃ8vêCeäôy£,Ö¯¼ÇÒý÷ßR€íÅžûseEeÿãýœ¥g˜Æ²/—ÒÔ¸—þ%%dffƨë:&LSÃå{ {à#èókHœ] 1õ¦ cš"&"˜"fÛnš*F¨µk¦Bt"HIQÀ R”•7 LSCvöÁ‘y.†ÚLpûL¤Ôi˜¦ÑóŠÆP­V+v»ƒþãþöܳèºÔ±9lhºA¢ÝÎ%“Oã§×œ$[Y³¦ ‡ÃNVví­í¨‘ )éé(ºÁš x½iŒ^ôéΖîÉcϹ¨füð¼¥Zw ¡–ÇE}èX²†àʉ$[¿–=>)ÀÖØ¸wÊ‹/þíçÍMÍ®ù|¬Ò}ÍšU,ÿr™™™¤¤¦bw8D¦µ?};Bà#H¾\§cv/ÆÔB˜‚„IO¬ ¦u DL#‚Ö½CiFv—"XR0 £‡Mï)», Z7ÍG5L¬ù7#Øs0 5NÇ gÞýÇÛ<ùøctuuÒ¨*š®Ó?+“™gNb̈¡ø|]tw¶áp%žåeku í¾C‡¡*!6–ïdà€þ-­Ýω®Ôg/¾öõYRËI’6nGWCˆ’ŒU–°Û¬X,‹„ÍjÁn³`³X°Zd\º!bÍ'oÄA9i_eÍÌŸÿÐO~üý{üþÀ‰ÿ#=1Ó@ €Íncðà¡Lž2…#GQPOJŠÑ’Š Táiù!nÇÈy3ÔˆV{+¦âÇ-ºM•1¢õ†Ñã9ê:†rÒì7#X³ S”äD,ø*G÷žÅX=‹”r¦Ú( ˆ¢„$KìjhàµW_fö›otãtºR_¡ˆBnz § êϰ(ÈÏ¡²bÝÝA¦N†Qù|éf23¼x’¨Þ¶ƒAÅ}HNMcÅÆšó‹Oý™Å·;RQQÍYÓF1jXí»d)N}ŽTD{‚i )zQˆ¢€3{άү}Ÿ¿°íܹ#mûömÎ=»v'¶¶¶\±ø‹E÷¬Y³æk;¿ªôôÙ %%•4¯ÇCJJ:n´î-Ü:³Œ3Ïî Þ?£ÑvÞ‚©09 °8Ø¢c‚  Ý@WM¬gã,ø9‚`Ñ¢u÷ó¨­Ë‘‹ÿˆä=S ¡ªE¥qï–-ÿ’wæ¼ÅšÕ«ãÉ”û-J°¦'z8oühf]0‘ú½,_¹…ÔÔDúädÓ´·™”™Ää$vìî`ÛöZrs²HKMÀjÑÿQ0bÒk×®hßV]‹'1‘ä öQ–,Å83Š-ö8À…ž,S×0u é+:ß8Ø:;;S–-]zû§óç\¿~íˆ;¶·™†Y+jùw\†aÑ9¡šÖSKuBŠ…OÞÚÉ´³ú‚÷Oè¡f”í·b*ݘ¢¼ŸT‹ƒÍCÓ1L gþØs®A@Eßõå«g³×q ©EWc(tuu²«¡-[6³~Ýz¶n­"Å×ìÏüEI挤¦ŒÆé£‡á°ˆ  é2‚l£²r;‚ Q:  *wìÁáIBÓu>œ¿”ñ“'œ?27ñãÞÔǺ UL8uc‡çaK+ {èD,ΤoLƒýGÀö¼Òã IDATÁûï¿5ûïo¬\¾lŒ¢Dâóž¾I Þéè—mðämœ5-²žAó7¢lû†æ‹K¸ý$›I¥+¢3Ÿ„÷c ¯aíÂg¹÷E+›ê2IO±b>Š!cšQ{-Ö’ë°Þµ$‘™žŠÛîÀPu.8s ÅùÙlÜTƒ7= —ÛÉÚUde$2éôÁÌ_º‰7?øœ¶@£Æœ:èµ×Þ¨Z6ç/FŒú<°?­¾.r‹J¹ôÚàIHøFÍ¥+ØvîÜ™õÌÓO}ñþûï%ƒAoì¦~Ó+Ö)¼³[ _¶Î“?÷qÖ´lèóWÔ@ʶ[1Ôn AÞl†Ù#Ý ’HÍÏæõ+¹ëÏ>¾,wc“#˜¦D«¨¢‰„–#¶8ˆêˆ(øADÜ.É.'¹Ù 8€îŽ.òrûàò¸¨©­cí– ¶ìÜ…ÓaÃnwüö©§ÿtŸ¿r‰Z·§‹Ô´4Ú»Cô?åt.˜yÙ~µ±ÿs`[¼xQÆC÷ÿæg[ÊËî9Y@§zjQ¤Ë…ÙÞèã¼)9û J¸…ðÖŸc¨¨—zØLÜ5{­Üþ'Å›,x\ K½úåö¤kòP4^«£ªEýû“–æÅ×ÕŮݻñuúüôIOcôðÁ45µQUÓ€fjX-rÜ‚Àå³®8(ÕR9¨+ªö2fÊùL˜4餹ïÿ°½ýÖìá?ø›---'Yë{UU£´…m- ÝÉÿ©Ê…g¦!¿€n'Xq ºÚ¢Ôc¿EÕ¨„Aínxðu‰O×'àqÈÒÑÍÝ01LË!R¿5-Zµÿãnä;×^Krr þ@€æ¦&Ê·la媕lܸžê­[ CØ6vÇ~-%òûæßòÒko<¿aáÇ¡i—Ì"=+示÷_;ØÞúû›WÜÿ}S}?<Ùf,D"¼^/S¦N£µµ•%K£©* œ6á<ΛVÂŒïc׫‘JþŠ©t(¿ ]õaІa"šÎãÿÌâÙ·ДN¬–¨º´Z­‡Í¯S5›EÆ&ËøÃDIÜo}(ÂépðÜ‹/3cƽp8„ßï§®¶–µkW³xÑ"Ö®]C[[[¼U„(Š`š<ôÛßO›yùŸ'|ÃöÙ¿Ô}köß/ùõÿÝ{YW—ï\Ó4]ßèSÔ÷ŠõãÐ4 ·ÇìYWræYÑxÿÚ5«ñû»ÉÉÉåÉ'cê9cI;­s%‘º¿bɼKÚ¨m‹1´¦f"ØsHþ …cnaʤq 4A”ðwwãóùˆ„Ã=öšÔÓÜDÑ46 cŠû1í´‘t…ÃìnnÁ"Éñðœ,ËhšÆªU+Ù¾mÁ`C7â›LCÃívÓ¯_#GaÐàÁ8.Z[Z£mQuI–A®½êêk~ÃI¸¾6°}òÉÜKî½ûÎt_gçõ¦iz¿i E"èÙôôtEᜳÏe„‰„B!Ê6—QQ¾]×±Zí\xñEädç ZS§ ùÖ®{kæeXR§iš`M%aØ_pô¹oj2%%ÅŒŸ0‘ /ºˆ‰Ï OŸl‘0MMMøýþhØKÈHH`ÂLŸ2Ž¢‚<"{ZÛ „Ãû’‰&´¶´°fÍj>[°€Ï?ÿŒ­U•t´·#Ér¼-¤¥¥1hð`J Àj±ÑÖÞFwWMM 4hgQQÿÍÿ“`Û²¥,ýŽ_Þö̞ݻ/ùª@;¶AGŽ"tuu!Š"“§Låö_ü¿?€ÅjeÆŒ D@0IJ/—PWW-BÖt¦ŸwEEEÑóÈ È©g w®'T÷7$w HvÜÅwaϺô ïµZmääæ2ñŒIœ;}:Å%%D•¶æ&òR’™>n gŒ…nÀÆ öÍf@q?¶Tï ;ŒWäÇb½‹UUimmeÃúu,]º˜•+V°«aN—AQ"8hù…¦Áž={ذ~ýâ¬Ì¬Ôâ’’mÿS`koo³Ýñ‹Û.Ù´qÃ_Uuº-•;†ÚÉC­`0ˆ¢¨Œs*wÞ}÷ÜûkUåÍ×_cÚ™g‘••E(¦­µ•e˾¤»”ÙÂe—ͤ°_¿}À•±¤MAë\Ad÷\%`Ϻì¨×àv{6l8¥ý IÒÚ9¥¤ˆÁƒKÙ½·…íյ俒œ@Gs'ù9Y"ö6µ"÷jD#B¼êÊf·c&MMlÚ´‘U+W°cÇv à 99‡B$''S\2€Œ¬,êjkÎùÇœ·®nikë4xÐ6·ÛúŸÛÓO=õÀœ·f?þUUUq:öë‡ßïG×µc+ééÞÝÝEŸ>ÙÜzÛm<ðàÃL<ã º»»øé ?"==ƒñƺºZÖ¬^mþ¬ª¤¥¥råÕW“½¿÷&È,i“°zÏÆæ=§§öòh´ŠÁ’ysùâ½w8¥4—’âyy}ù̓1ëÊ«÷Ëðmkkãwß×ÑyÂTG$!))‰ófÌÀåvÓÜÔÈÞ½ÔÕÕÅS„P0Hbb"<ô0“'OÙOâÄŽ©««å×÷ÞKJJ*ÓÎ:‹ÆÆF>™û1Í--8S“Ù‹Ž6Zﭖ%I¢µ¹™×þøï¿øWò²R(XBYÙ6ÚÚ:9eä :ºÌýl-¥ýsXšÇš H²L~~–,[K{Hஇá;ß¿>>m/ö Ä ª*§Ÿ>–ßýþ1¼Þtü~ÿWV§@|òà¶mÕ´··Ç MC‰D%™@(0æé'ŸšyR­¬¬lÒ’Å‹î<œÅæ ÀÙçœCqÿbZššz‰Uð¬>cì¾išüìæ[¸òª«ãª3 I’ƒüúÞ{¨­ÙÉÅ—\†(JÌŸ7ÚÚÚclÔ"`˜&F¯)1±vò׬æ/ÞGùŠ%Œ1—ÛÃúõå¸=n-eÛ¶:vïi$· »Úéîhe`i_,V™O® à)üþé?2~â„xçÃqº®3ýüÜy÷=X­Ö¸ºû:çï¶UQ0tMÕÐ{&ßX­V.úìž·çÌ^vÒ€mÁüyé{öfžˆMaJ$˜SOeÜø‰tttÐÚÚJUUÍÍ͇´Ób<ÑôógðÓ›~w,bA–eLLžzâ¼ûÎÛœ3}:ùù|±h!›6mŒ7O>–¡³£ÎÎÎ8Ð_~òÿzáiô@;§ŽIsK[Ê«)Ðoz2«ÖlB”DìÏŽ l®n Ù›ŽMTXµ¡’‹¿ó=îûí#äæå‰DâNÑþdñ> ë×výõ?àÚï~p8ÌW¥–zS#­­­´µµFm7]‹KTMÓe‰7_MîèèÈýÆy¶¦¦Fçgó?q¢Y·¡Pˆ‚ÂB.¸ðbt]§¥¥™ÊŠ jvîì©«JKK¹ûÞÿ#)))´¨½ì¿¿ùxôQF9•qãdzní¾\º$n$ëF´··ÓÕµ•v××ñîË/²§jSÏFP“Y½¶Ã01r-­ílÛ^OQQv‡ƒ5kËINM ¸_.ï~¼”Ä´4îzè!&N™ =^àÑ¡<혙áp8øÅwR^¾…/—.“Í_lÑûÞ¥GŒ}@‹ÞWظq㘅 ?»ûÒKgþä•l6l³¹¬ìšµÓÜ._r)i^/-ÍÍlݺ•ŠŠò¸*<ðæ‡Ãal6·Üv;C‡Cë5o*:GT`ÁüO¹ó—wàMOçü3ØÕ°‹ÏÌ' Öó<U†¨¯¯§|ýZþòà}Ô”­£dP)í~ö–F22R8¸?U[khØÕȰáð‡"¬ÛPÍÊÇó—âÍ/æ¶_?ÄS¦¢÷x~‡’bG_8&''‡»ïý5™YYƒ¯Å~E‘@ €ÏçC×÷•8ö~}¾à³À7®F~¶`–ÞK²OÜÓ0 Î9÷<† A[k+[·V±ní"‘È!KÛ Ã  rñ¥—2óò+¢FtÏwÇæ‡.Zø97ßt#†¡1ëÊ«PU¹s?¦µ¥å¸«ˆtÃÀb‘ùì½·yõÉGqɧMSs;«ÖTáÍÌ`È€6nªA`ÀÀþTn­¡©¹!CŠÙ^[Ïç+60cÖÕ<ü‡Ç(PJ8ŽM;*¨÷+Ú ]aòä)üà?BÓ÷Ÿ*x¢«÷,†˜“Òh¦i²¹lCáöÛ ¾15ºk×®œÕ«V ?j¾CÜÄp(ÄicÇqÞ Ùºu+Ë—-Åçó@€‚ÂB~vó-¸\n”žz¬…üì¿¿ÉwüŠ`ÀÏ÷®¿Žä”>xÿ=jvî84)jš=1ý^Ãm{T—ªid¦&S”‘‰ÛP)ìÛä”D6nªBFŽDùÖ=XE…ñcP×ÔÍÊ5e¤§§PéeÑ’•5‰;îû ç_xAüA9œÔ:Öp˜¢(ȲÌõ?ø!K—.fñ‹zÔéW—páp˜P(Ô3€D‹;'¦iÒ¸{¯XWS#õ+úfÀ¶iㆼmÛ·:{M‚¹yy\}Í5¸œN6®_ÏgŸÍ§©©ù°@Ó4 »ÝÎOn¼‘SNÁÔÔÔð×gŸá¹¿>‡Ífåêï\Mvv.óç}ÂÚž,ŽØÛ{ho‰’f˜&“’ÊùãNa`ÿ¾HŽººü¬Zµ™¬¬t²²Ó©Úº“î@A‹0Ln_;ùù9¨šÂ»̧pÀºçn Œ¢(‡ì~"`ƒh"hVV7Þt3e›7޹ ê‘Ti¬Ÿp,Å<æñ#@ »«¡ÞüÆ$Ûš5«‡º!ÐÂá0v‡ƒ«®ùEý‹Y³r%ó>™KC}=ö#„dt]''';·þþf´]¼¢°qÃz¾X´ˆŠ­ÛÈÏÍᢋ/"'7E‹>çËe˰X¬$&&âIðàñxp:ȲŒÇ“€$‰˜¦@(&ØÝE¢`à†ˆ(Š23ÉÏËcÀ€6—爐²–ƒú#É+Wo&5-™ÁƒJØP¶§ÃÊôÉÃùbes­ç‚™3¹áæŸáõz …BñZÔ×!5C8Ì™gÍyçÏàµ×^ýÊ`;Rе¥ˆ~! ˜ÞÖÖVÏ¿ lG-å›~îY«6¬[7æXoš®ë„Ãa®¼ò*¾ÿÃSV¶‰—^ˆæZÅFóêĤOlòq$AœN'V«Ä¤DFŽÉÔig’C{{;;kv`µÚHLHÄãñššBRr 'bŠJ7Ùj£±aï>ûG‚¾ND‹…Òýp84Ô60¸$ Áæ¦bÛ.÷4QÔ¿S€-å;ÈÈH%19‘Šò TAfúÌ«™9k²E&ØÓé²·Wy$øÿql’i’ÀŠ˹öš«hnj:*I}¬€‹M”éýý‚@Ë­·ýbòwÞ]þ—l7¬¿®vgMÁñ<Á@€ñ&rí÷®§®®–W^~‰-[ÊâOeoö<¦òb“-2‰ IdeeQXTDQQ1¹9¹PÔ¿?ééX-V"J„P(Ä“&aw8âÍíLsßðÛXÅ»$ŠÑÂb‹ŒÜ·/ Y9´46’‘˜@gW7U;ÉÈHCr$ÐÝÙ†¿»›ÒÅ´¶uPS¿›AІÂ|ðÑgô)(æ¶»ïäôÓO#‰Äv8OóxÕèþ/ÄÕéèÑc¸ì²™<õäØìöãÎ{;Ô÷ºáµ€(I¶oDnÝZµÃï÷{ÇÎÈ/(äg·ÜŠª*üõÙgX³z56›p8Ü“Ö,#ŠÑb—Ë…Ûã!55¬¬,òúæ3dÈPróòHIM%%%»ÝÕb‰sEš®c1-ûU$Åê4c6Zï©É½¥¦'ËÃE×\Ë‹Mt´6ÑÞᣰ>‹¹ V1rhçNÁ¿>[O·?̨‘C(¯ÜÆÊuåœsÁ…üìöÛè“݇@ pXµùu©Ñ˜zÓ4 ‡ÃÁå—ÏâÃ> ¾¾—Ûýµ·³è¹WÞœìý[}]]ºª*Çt¡±yL·ÜvYY™<ôÀoXºäKRR¢’*1)‰ôô Ò¼^’“HózÉÈÈ #3ƒ>YÙ¤z½Q[Kê™&Ò#õbyl±ŸeIоz®%Ã×9xèP.¸æ»üýOO`—:Û}ì¬ÙEaaAƒUë+Ò¿íAƒ¥Ë×ã iÜ~Ï=\rÅåØìvº»»©¿ª}v¤¿…B!Êù3.à|²GrýÃyçæåmýfÀV_ç: ©jÔ»ùç·0lØ)0ü”ÿÙBssó°ÎŽŽ£¹~7ãÇO䪫®áO=É{ÿúˆéçœÅÏo¹•ÄÄD›öÒåó‘èI °¨ˆ4¯7¢2£À‘e9þê ®Þ*2–÷uà&}E•Á×ÿä>y„ÒSX»¡‚²­uœuáEL˜v&²,³g÷^þþæl¾Ýw¹éÆŸðÞ?ߥ¹© I–ð$$àr¹°Z­û]ÿ ˆ™½9ÀÞê¿÷Ã%÷TÄÛl6N§·ÛÕjÅíö0ã‚ INN>&Nï8¾¿õ/îÿÒ¥—Íô·¶¶ò•l{÷îíóç?=uú_,¼XW/U%%¥üø'?åƒ÷ßcöœw˜~ö™ÜtóÏILHÂçëDU’’’)È/ÄápÄã›±›{ 1 Q éêêŠGzoèW}²“SRp&$R¶~-!_ˆ2WÿøÇ̺ö;Œ3†Ü¾ù„‚|í4µ´³aã&>_0%K¾`{õ6ÚÛÛ‰D"Q'ÆfÛWÅn³a·Û±Z£…,Öž‚šØËf·c³Ùã •e9*-£¢Ã0èôùhjl¤¡¾žºº:**Ê Cô/.fÕÊ•ÔîÜyĤÐc–6ÑÑŸÜ}ï¯3/¹°õÔÓNgÜø ÿ›mÃúõî»ïÞ›W­X~ƒa˜‡ÍžˆDÂddf1cÆ|øÁû¼ûÞœ7ýln¼ñ&¢@SUdÙBŸìl¬v[¼Doÿu0“X±ž±L…X ÙëõÆUÙ×±ÆM™BC]-ÿzùyRSRPRLRb—\r cÇŽeŲe|±h!ee›ih¨c鲕,]¶»E¤o~>}óú’›×—ìœ233IOOJ<›‡ÝQ¯&&¿UUQ5Žöv‚Á íím´·µÓÑÑNGg']]]„‚‚¡jDÁçë$%-ß?ú¦OŸÎŠåË™pz¼Ëf·ÿ䆟ܼ忛¶ ‚p­/ŽlkÖ¬þ¿Ûn½ù¬ªŠŠñº®c·;ikš†ÓéfìØq,[¾”/-eæ¥sÝ~€ÛíÁ×Õœ’‚ÓéŠgxĤYo[¦·zìÍ/µ··“@Ÿ>}Ðu;v iyyy8ޝÅf€ó/›ICM uÛ«¥èœ—ËE(";;›K.›É´³ÎâÿµwÞáuTgþÿœ™Û¤+É’,[²äÞ+¶Á l ¡eC1BïR7m³I6e7Ù”%$›B²›_6» é”Ð L·{“lY¶šmYýö™sÎï)š+ËX²!ûì<Ï<’nÓÜ9ßó–ïÛvÕÕ±yóF6oÚÌž=»9xà ÍMÍ쬫÷?+l:sÒ…0ˆ:µ ž]æ¹èîîv© ¶B)Äž  °0ŠénÎ-[w°ê™gX¹ò*jjFÓÒÒìk‹c9ªkjÞüä§>½ýÓŸüÄVOSŒ®ý΃m÷î]Ÿù‡/|vîÖÍ[æG£Qn¹åvêyú駈Šò€‡©®©fㆷhljäö;nçêk®!ÓÓÝíµRÚþ{.þÍ7Ú=°)¥èíí¥°°If/ãÆ§®®–¶¶6ª««ó¸¶ã9Š‹‹¹óŸ¢»»ËiÁ 5~w.—£´´”E‹sÚÂ…ôv÷ÐÓÓMKs3 {hoo§ãÐç¬ñ~ IDAT!js7;’(—Íõ}W·W›) ÆO˜èªP“òòá˜fˆââbŠKŠýõ†i²cû6^yy5RJg£’Ä–6ÓgÎ`ÖìÙ44ì9戂‚Y³æüåÓŸüÄ‹A;vÌØ±ï<Ø~øÃ.~kíºs´RÜqçÝ|á‹ÿÀÏü)O<þ¸ŸÔç¥À†ASS#e¥¥üýg>ǹç.#—ËÑÛÛë§Ù–…”öaû5X;p¤ŽFI¥R>—Ëf(ˆE¨ªªâÀÄãqÊËËO˜:--+¥´¬¯m»gð{c‰¼SJÉ𠯨`Üøñ,>ã ¤TXngðœwô2oƒßLãU±GÂð+ÚWâXî}+6ŒõëÖ±qÃöïo!—³7~ _|)ååÃY°pO=ù„¿ÇÀýP?êƒiÓ§¿³`[ýÒK£{äá™ÙL†•W_þ‹t:Í™gžÅ²óÎãÙ§Ÿ&“É8âÜ4‰ÅY²äl.»ür&L˜@"‘ “Éø^£’©œß½Ý=Ù_•zRÍQÓ…tvvRWWÇ)§œÂ–5oÐÕÑÁ9—üétš––¢Ñ(EEE'”8̃rU8öË?Z‡|3PöÚ«¯^­l›‹.º˜)“§ÐÓ݃T’l2ËÈŠJ>|÷½ôôô ”$‰" ƒd"A2‘É™”^-¤ó»RŠöövÒé4EE¡<ïi Ó È{ÞjII –e±oï^fÏ™CÕè1¬~ò/Œ™4™‰'RWWÇÁƒý)|ïôÑ?6ú ~'ŒAièoH÷9绚ìomaó¦üõ¯Ïó /ÒÛÓÅ%—\Ê5×^ÃÒs—Q\\ì›)†a0²r$ÓgÌà•—_:FA#„›5mJ[(âÃ÷|”qãÆ¿³`k¨ß³ë¶m”WTpæ™gRär9ç¦Ø’Þta8JlÛ"í¦<«ÀëËøtT‚ôÀæ¶L8xàñx‘SÎ 1ƒQÛ¶óR©½×•——“Íf©Ý¹“Y³gSPÇ0LßKmii!‹1|øðf¿Kl3¨ƒÀòrÇúK¶D"Á¡C‡Øºe36¬gíš7ijl¢´¬” /¼÷¿ÿý,\|:%%%d2Y¿ZÞËG‹ÇãÌœ9ÓÏfº*Æã"‹ñá»ïeåU|ÇïShÛö­Í©d’3f0fì82Ù,–•sŠ"¤T™³ýŒ i;S}ƒ@ ¦{^¨§N³™ ûöí£²j±X Û¶ýx¨'Ý‚uPM !ˆD"TVVÒØØÈîÝ»YpÎ2R‰›×¼Î„©3(--¥µµ•X,öŽÛoýiš °<ûË‘dÊ•âÂå$³¤3iº\t×®:Ö­YËŽÛèé¸˜yóæsó-·²ä̳?~<¡PˆL&C·ëÝm[çÞL›6ƒâ’Ú²*@Qqñ„¯}ãŸ÷}ðêkßvÔÑ ÛÞ½ #PS3šh4J:›v£òì/)UŸ4S é̶ü×úªÔv€©ÜÎ<ì§±±‘É“§øjÀ“\^—˲ŽH R]]Mcc#MMÄ#aöìØN͸ ŒŸ0-[¶ÐÚÚÊØ±cOH6ë‘$WP2õßlÂpæ(·ç\:•¢¹©™ææ&êêv²qã&hntªÿÇ›Àg,áì¥çpÊܹŒ?XÌÑÙl–T*uDºÈ´Í¨Q£¨®®áP[ÛЃþ哼öC׺ìñ¸ÁvðÀÁjpXyÓÀιªPy`R(­|ïÒ3àó~÷$žt³`ÚÊFiE&¦®®–Ê‘#).)ñÕ©ç}+ÅdlQUUEsSãÆŽå’koÀp â ãÇûö[uuõ Ù¥ýí-OzçÇ95mY´µµÑvð {ضu3»êv±gÏn›öƒ²^QÁ¤ÉS¸ôÒKX¸Ðé²YYYE4CJI:¢§§{жc.—cXi)ãÆgãú·ÐZ )íHÁ¨QÕ­Éd’“5 #T2lX³èNÉœ-SIhž´Ry¶™ô3b-K"¥åØiJúÐò“a˜hm¡¶v'óæŸê«§%§•çñBC!ß~kjn¦¤´”xa!¯<ó$¦M§¦¦†æf‡Q?Vû-(¹‚_àyÏ;öV·KênÛº•]»v±sçêëêèìéÅ@/,dÚôœÁ…Ìž5›SæÎcô˜19½|]g(îªÃö•ø³•£Z=ÎÍVn*3ìÞ]Lj‘#™=牄ŸæÑ!o·ž$(..¦ººš¦¦&ö8@Ue%¯=÷ áH˜™ SWWGgg'•••G4~=9sH%ÑJs`ÿ~Öox‹Õ/¼ÀÆM¨¯ßMO"CØL˜0‘+®¸œE‹1}ú &MžLeU%±hÌ­[Í9Ù¼ã~(ÕTA¯óh¯÷ìÆ‘••Äã…~ñÍ`iS§‹¯õ+ÙÿÑONØFªNMœ0žû8Áïx¼Ï£ Ø-Žê:ЂŽr$£FÎõL’W£”fõK/ÑÛ›`ö)sÈår~‹ª£yEA^®´´”L&CsS…TŽVŠÂÂBFå·(,,P=[–E2™ô¬ÔïÞÅs«žå™§ŸaóæM$39J‹ ™6m:‹ŸÁ¢E‹˜1s&5cÆPXPˆišþ{‰„_­4° ¶ÂêèNQR\L$²7:yÊÔu8!9qƒÛßÿÞǧϜõ±Ç{„––FŒéÚk* NeíP£Ê–ù’Îs\GÁ–Êý»Ï“ …B¬[÷ëÖ®á3ŸÿãÇO$›Íú€ìÔaÏ~Ëf³4440kÖ,¬%%%ôôô X®æqzÉdË’twuñç?ÿ‰_ý×/Ù¾£–‚³gÏfÉ™g²dÉYÌ9e.Ã+†»¡Ä¶s~Qò@v×P€u<¯÷6Mqq‰·t¼7fúôõétꤒߡƒ²pÑb~ó?ÿM]íNfÍœåÇ:Ìóí2OŠy*´?èú*л³³“ÖÖìßÏÿð{îúð=ùf¢-⛼Œ‰Q£F±wï^˜0aZk:ä̤êçxx4‹WŠ×ÕÕÅ·¿ùÏüç/EUåHnºñz.¸ð"æÏ?•ªª* Ó$çÇ»»»IR @C±Û”ÒNmì¨! jÔ¨sçγ÷ïo=¹`+6Œ ~£¸dØ?ÔÕÖÒ“èÅp;EæÇ:û«NéÍ·ÙÜ ¥ ðqZköì©'ÑÛKAA«ž}š ã'rÙWøêÔsŽTLüÝ0 âñ8ÕÕÕ´µµÑÚÚŠÖÚÏè Î6ð$Z*•–’ÎŽþù_åчæ†ë?Ä 7Þļyót¦œE*•Ê“G ´/ЮÃí6I8¦¬¬ÜŸmztGK0göìo]°|©uÿ¿ÿ褂Í;v,眽䋧/^D]]-Í(7ûÂQ}Ž‚Ÿ×%û$Z~¯ü¿­¼–LÐÙÙAÓ¾}D£rÙ¿ûíoxkÝ:p{„xa«ÁÜ|/ûwذaTWWûNFUU%%%y¡/Û¶I&“ä,‹Do/ßù×oòòK«ùÞýpÿ÷ÀâÓÏ@kMgg'‰D¯¯&ÛW­¤áX‹rúŒ·û_†0†=ýô%¿.ŒÇ©®®9¹`ó¨å+γ³³mÛ¶äÅülŽ%±mËÌ9-lËÎã×¼×ûa+7¼µwï^zÝþ¹Z;4ÆþÖþç¿ÿ‹Ö–Àiéd±œÓD¦˜‘#G2räÈÀæõñ8´_üÇÏyüñ¿ðÅ/…]¶tl7¯Kä`ù¹wXC~/­ƒi§%„`DEÅ -%e¥ ^qrÁæQç,[þêQÕm×o ·§ÐX¶å“¶ªŸ‡™§>ûÓ!îëm÷ýZkº{ºimiÍõB â…lØðüýïH¥S~l0hÜ)¼ÊOÿŠ­ –J¥ÐÀSO<Áü#.»ü .¿ü º»ºH¨Š#I–Á‚b°ï¬d|»÷ !°r9zº{Ü”¡£nÎ)ópéEd§MNUUÕÉÛ¨QÕLœ0žkV^ù«¥K—í©¯ßM]m†aºRL@dç9 ^^©>;M¼Ö>ÊDÑÚÒBooÏaô†i8íž|âq^^½>¥dÚ‡ºèÐ<;MkØ´qßýö·>¼‚[o»~’cYðã=ûדåµÁ^ ‰Dâ¨ÝÌáß®8Ås.õñŽ%leeeLŸ9‹®®®\yÕV©ëÖ­uºb -»ŸZìg£I{Àþ¬– 4­5ÉD‚–Ö–#†Tb±==Ýüù¿§¹¹¥c~àN;ƒW3RJ¿A`GG;?ûé©«oছnbò”)$“‰Ø,\HqÉ0êjk¹îúÿèM²víZ2Ù ó,=/ÕÉ\@²¹¡ é&OØ¿û(U@†a¢•æùUÏÒÔ´Ïgù¸£I/è­µfãÆüê—¿Ä …¸î†3f ™tfP`ŠtªÊ?~Ö ýÐ!ÒéÌÛÞ[Ç1ñË._ÙëRÔŒ®ywÀ6eÊT<ê£qß¾¯\páû~±}ûVê÷8ªÔeÎû2<úr×¼@{ž u«½•Rt÷ôÐÙÙ9¨Œ„h4Ê®]µ¼þ꫾=’׊ó0„ÜSŸ9Ë¢··—ß=ôêêXrÆb–-;l.‡Rò„ÙSýßw¬Æfâââö]w]Â¥>X°hïÆá_á9Ë–S5ªšë7ÐаçÁ+®XùÑÚ;¨««ÅÂIýÖùiâyiG^º¸´‘ÒB¹Mì:;;†tAáp„Ý»êØºm+Té`Ò£:¤”tuvòðÃâ@[ .ä¼óV`[¹<ÂöDRÇò9Çò>¥áp˜ÎŽöÔ¿m 1!—\réO>ðþKÒ.õÁ”)SÞ]°Mž<™¥K—áQ·Ýy玲áo¾µv ]]]¶«²Ñl)QŠv_fH¢·‡d29¤¬ÙP(Doo‚ÖûÍ÷;eسռ*­7ßxÕ/¾@a4ÌåW\IUu5©Tê°â‘wC2 õÿ÷iš´¶¶ø`xú4Œ¨¨ØqýM7­òЦWœ¿â¤¥l!3Ä•+¯Â£>Ö­]»ñ–Ûn{¶¹©©mË–-ÎŽ’*Ï>ë‹‘:©E¶ìšmÛtuuy:‰—õ±yÓFZZ[ý‰~oWÜßUJÑÕÕÅc>ÂÁön/^Äy+Î÷Á{4oð½È«ŸóîѶ­Ûèèìp¾¼®«®¹ö¶K.|ßV—ú`é¹çònyÛáì¥K9wÙ2<êã–›oûéi íÙºyÓ8\¢Y¶;Öò=T%%Ùl†ÞÞÄ ƒÃù7)³·¡ÚÚàêm=9OªyàÞ´q#¯¼²šâx×^w#GŽzÝõ7lðþ^¾ü<&½CÓ[† 6Ó4¹îúñ¨‡~ó?ÿÙÏݯµfã†õ$Ý¡«ùI•¶Ÿ¿ÌwK§Ò¤Óé!×qz]’‰[6o&›u(Šþ=ûûNkí6³‘$S)ž}æiöì`éÙg±ôœsœõ9TûìD{”Çj·™¡ûö6°aÃú#V’E"‘G?ò‘û~°dñ”K}pÙå+y7Ãý²åçqÁ…ïã>¶nÞü›Ûï¼ëêæ¦&vìØî/ºOâ*WºyªUI”t:FærÙc»(WM쪭¥½½=ÐÈåÈ ãäû;ÅÕ;¶oã¹çž¥8^Èå+¯¢´´Ô/b9ÿݶۂ1áµkÖ°·¡aÀâd!xó—]ö¡û>rï*]Ï[ÁÜyóß[`+((àž{?Š’ ú¸ëÃ÷<¹`ÑÂÚºÚZZš›}JBº¤nâTeY¶E:Êk3TéFÙ³§ž½{öô›ÄJûÛjÁʨçž}††}Í\xÑûXºô\Òn‡¥÷&¯&ÐÁSã— (ÕL“Þž'Ò2@a·‚ÉS¦|û¾* >øÐu× ™ï-°y¤ßW¬Ä£>þãçö~þ¾ô¾¢âb¶oßæNîË ‘ý㥖E&>®&Ë¡Pˆî®.öîÛ›WhÓpÞ‚{j²qß^žzò)†—WòÁ«o ¸¸„œ;÷s¨ìþ‰§? $H ‘¢%âhbþ©Œ8Ê(BEh£MM_wòX,Æ[o­cÃú·ˆö³Õ„Ä ^ýôßîá³ÎXd¨N;mïö1 Â7C&·Ýy'«ž_Å[k×0¢¢‚gŸ~ªá¾}âS_þÇ/|·®v'S¦Nsw/ ïŽTŠL6K6gwûx©•˜ÉdÜ Àêmé­5ýëólÛYËÍ7ÞÌ‚EKHfL¤(ÄÐY´öB_bPa¯¡Hâ#<h¢h­*EH5bÊ& Ù圪Ãí»k R”Q†2ËQ¡¤Y FZDBšD"Écþ™®®Nâñ¢þ×ÑvÛw]t×·Ùêƒëoº‰ÐIèòtL`˜3çn¹í6¾õõ¯³eËæÏŸÏï]}íuwüö7¿ž‰D¨©T:J$})sŒÑ_‚ò«!:ÑQ$*v7È^´@Ë$ÈØ ç§J¢e-{Ñ2Zb„J0â3 ?Ÿ‚Š%Œ®°9}ânfM`D+¹ûÓ÷dåå—¬ †©®¸r%¹ïc„Bá¿° !˜1c&o¾ù:Û·m§¨¨ˆÂxœµk׬¿ëÃwo~é…nïêîvkœC6“r˜êˆN‚”„Lƒ%gͰa¥þ¼xËrÊí„!xåå—ùο~›ë®¹ˆ{î»ÃN¢rI)´Ý‹–)Œp ¡ÒÓ1KOƒt-úÀï0­Ý¨è4T¸¡sx“1†V¶§Q!È0Òú1•Ù¢ > j¾ïc¨^´Ý * 2í€[[ ,´¶ßQîï**2íÒN"Rƒ.> £ š‰e;9gN‚ÉS&­ÿþÏW¿ >ø—o}‡‘#+y/b°ªcõê—¸óö[‘¶ÍœSæ‹93D/½ô§~ã«_y*•I(..&ÓÛÛ{Xnÿ1K¶l–a¥¥üÓW¿ÎYg/õÆxNÉÁƒùè½%“ÜÏÃü7ÆNƒÝ“@ ;Î×ë3ÚE¨euÜýÒ{ÿŒU8•tÍ· ªÇ{àE!&]TYßf¸õ [Žªú,"\ ²´tÿûùw:ߥð1Ÿ²é{TQ0ãä:ßBíû6¹ží„Fßù»¢ÿrË´©³Sß½ÿ|à²Ëy¯G•lÞ1nÜ8LÓä©''—Í2lX)ZÃÖ-›ZïþÈ}/¾þÚËwx±PÛ¥@NÈn@N§¨©ÍüSOõ㟎s`ñÀ÷¿Ï }–ï|óÎX:»»¥s lÐ9´²)¢-´Ê¢í^„Q@¸t.ÒjGzƒPz=vl*2Þ‘& pE!!ÝCü åöŸ d ºê³ˆÐ0°G·ø’+çH.ÿz¼ßsþ©•ûSçÜ÷åú½ÖBÉ4ÚNŠÕ ¢“ЉÍèŽU³r™ÎKeÉòŸÜzûœÌVX'l2‡–ÖVÞxý5К¢¢"l©ØðÖºæ|ôã3_ý•Y©Tú„ ÀÙL)‹N?ݧ@„!øýoË~ðCî¾õî»çRt:´2îâäüÅñ[9 «e/BDNÀNî@wïÄÈnAÆ¢ÃU 2Gs]PDØŒRߥÜú=DG£G~B`rTbP=ã©Kt>°ú?—¿Y<ÐieÊ¢e3:)ŠÈu­ÃL¼QµpÁÜ÷ŒºèAÞƒÇÀ 9Å1k׬¡¶vBNqi±nÝÚ?|ñ¿üìºuoÎI&’',Á]ά÷ƒPVZÆì9s°,‹Çy„ýÖwX|ê¾÷/7RThK9v Ê• Ê‘ÁÓ·‰dŠcar=ë™ a¢ÐåâŽd¥™(âT¨‡©þÝi}PöA(˜ ²Ã‘RÊ:L"i•u§‚’,°Üëë³Ýr¾í¦ûýî€3ëØ£±J²É6TªX_M¤¦:R:ÿ/Ó`óâl³æÌæÕ—_¡±©ÑŶm^Y½ºñþûk[6m)hoo³´æ„€Î£9êëëilÜÇs«VñŸ¿ø/Fð³ûodòÔád{zÜ]ßCö`Ìb¬D-2Û‰™m@…*1‡a@[M ‰SÈF«¯RèÈhİK]u›òÁ”§ÕÀRÊÛB÷T@ªå}”ÎóZf8™ºÉCˆ†²¤Ú·ŒU^°ÊŒVìÿ›@UÕ(ÆŽÇóÏ?GgG;Aêãñ¿<ÖöŸ¿üÕëMMë0ãaIDATMÅ {v-;ajš¤’IgnÀ¦­” +ào\β哰º{2w˜ÚÒ ‚Ê¡RCKlBìì!ìÄP a5c¡rÐö€R $£Ô(æǼ‹…³A¹ž¦êS¡Ž¤í“T¾D€ú°¿½ëÍ·étð{¸ ¬D=ÙT±pWúØã¯Æ ÿ²uë¶¹¹L&‚ ~<&«N¹_"¥¨®Æw¿|>+?0;•ÀÎf3¸uPºN-s¾šÓ2‡T¦\Ï`ä:P‘*dáB— :  ( Î&ªõ¤°Ì‚è‡CÓÙ|ƒ_çòT§¿‚ªÞ{î'½t¿÷%Ÿì§†«w7Vê á°ÀJ¶ÌT,ûy¨ ª÷½¶ãj¨zõÕ×’N¦ùÆW¿BG{;õ!¥dêä R±æ¡ßýáÎúãy/½ðÂÿK¦%†áÐÐfÛš®Þc«‹ùçÏ,áêË'c§º±rv€VèC…ö~êƒàΘõ~j­Êv0Ÿõ<‹5ì2´YꀧO¡0L¿Dˆv „Æñz‘I´L÷ÑšÀÿÖ‡_ ow]}¢ó~‚Vþ?„éþí„ß29ˆ†I6=ú«hÙ¼åÿ+À&„àæ[oÅ0M¾þÕ/ÑÓÓC,CzÃ^óÁ•ßùî÷Ò¿úÅ÷»aó^º C$ìFfÄ‘ØyJ“Î87qÅ™Õ|þîSXzæhìdY˱8Ðâz0„Õo1û^+Ð2‡Ê¶»ï 4ff7FvvÑ™™qQ¨Q„ qˆ"½&|ÚîDØ]Nlå_‡P |ÚDç]£÷ýtðºG—>¬³„û}Ç<°…P2²{€mCaDcw®ù^R£ÇÝ*ZÁM7ß Zóõ¯}™DbàFŸþÔ'·áéó»þÕüâ±om3ÙßaàŒ—¿S·;*K*bƒ“K¸êâÑÜ|åD*GÅÉ%»±m…8LBh_2x’Ké>ÚLig1A³8ybÊÂN7ù’M @&0Ò[!~º£Tþ튰Ÿ(õyV+Z¶QGºxÿO%í‘Áæo_réÀó‡ƒÍ%ÂýN"„LïGæé¼Î²@õÖïj]ó¡ÒQ ý¿lÞqÓ-·PT\Ä×¾ú%ì?xØóuµo颮k¹èï2œ³8Ìæ¯n2Ø\W@}K1míY29‰aL*‡G™1)΂¹¥,_<œ c‹H2](¥`(/î.†Ê[pq„«Æ´öÇ>adö 2{Ð×¢Ú]q#Û€Ð}*Ú˨èFL’ÇM°;ÐÙ½ˆðh×)þ_OÕ|pCT¦¶à¦ ¼GõÛPB{Wm"“{ÑvÆßH9´l‹÷ªý;6÷2d/¦i<(„¨/--­ÿ›À•+¯bTu3fÌ^¤”zŸ”òRÚe’8½]‰ôv54…1X|šbñ‹ltXHZåtu§ ™‚ÂB“xÔ ²,L¨Ð„œÆJ÷`K•' ´Òy*E©üPPP (‚éÖ€0œI4½;ÑÒê“|.@ ë€#¥„Ag6UˆN2Ï ÔÊrâ­¢MÔñbƒÒÍ“Œ*†ê;û‚ùÎKó2‘J6­5Z ´Bæ:±R }¦`+0H‘ém$ÛÝs•©ÁUB‰¡PÃ0:C¡ÐÇËËËÿëo lmmmÏ*¥VŒ7ÑoÕî nµ¥$ªz\ZÀ½éY˜DÃYFÅ÷@aŒ7̤AÚÈ\Žl—òAà5XÔJ»ùúªß"ßï/9‰áX^ÚMß±SMÈŒ#Õ´î„+c,ò¼Wöäút˜¿¸&؇PéˆÈx÷Ú¤ð<)P뎚àÙy ·A÷L9ªÝ¿~Õw-•Ëbõ֡팛0„ r¹ v:‰a'BûÍnóIJP(ôËd2ùK!„×@û÷¡Pèsï„ô;.°uttÜhYÖ/-Ëò§¤xÕë} ë4¶2J¡´ÔJHÚ2 ÛNnƒÈ´ˆ¸ "æp°¶ÛÝL×ü ,’w:Ž‘™vìtkßÐ'ÝŸO3ð\zÀ[æ¨XrÍÎFm8íG•@’½Ô|•¯|1¼æ ØÜhec§[P¹nGÂê~} RI¬œ¶Ò¼Á©ˆ†aø³C¡ÐUápø*7ÿ®òòòßu°µ··3•J}Öߨ׍¹_1ˆÖØ:‹)bh£ ß0öT7*k!Ì 0bŽg§tž$ ¿÷P1ÎÍW~ŠÖžJê{½Ò”²º‘ÙNרùŸïçf©ëmJ@8³C…‰!*vT¦ÏðÔ¬P(«­R³ tå^ÈaÞ¤îçÔc0[Eõß,Þëd™í@Ù©<‰–'9ÅŽ * ÷óTÞøt/B“ËåòZņÃa¢ÑèONàŽl–e}Ö²œþ·^/¶þý^…Ëk˜Zc3‚5² /o¬o©„£ÚT%[Áˆ;žWüåÇS+÷r`ðÁ¦ûl5e£ì$Zf]CZ0@2f(Ddä"¥Ã2éN´°lM¯]¥ “€ªq» %Ó@DØÕº¨µÄwnœæËú0«`ë“ÌÚ•|-³(;Rº›‹¿‡U "ãܪóÂÁ~'ž6òFrzkéŒHÊþxwÁ&„HqO {»¥/ GÉX(ŠèæJy…&B^ò–¦O’Èn”6Á-csì¨àt¾±ï-’R:O=)Wí8ÏÙn˜ÇQCqzatiV?ÕLÚøoBF­!•JLÙôtâú³#œ{9Tý¤ µr(Â.ùkôI¬€=©”î'ésÁæS Z£¤å; ºŸúïãà4B]0›‚À>bÊTP8xÅáE@í¾«`‹F£“€ç ØåÙlÞŽ6Öž!C»>bãUÊ'0T¥MwáEÞb99ã'ƒEäI®|Ä‘¿ˆyTƒpí»‘Õ?Ú§cs ….¤áPv¶ŽX,L8vfbU•1vü4dÅL²òGDiÀ@ 1Ì;á˜h} £/¥H‡©R'V¦|›m ïá|òmؼRÄ|q&\2YFG‘~Ú(Bؽ¾6 †   +2•Ôˆ{±â+0I»Þ3y’ʳϼÇÂá°?´Ä­óøVyyùç‚äýI[ÿa°þ[­'*¥VضýM)e™ç,xÏS±–Š`¨4ö+©—‰ÈDhCè Èœ{Ó\•¡B(¢nÜÀÖq´6ÑH”(ÆÖq„Phm µ@è4†êò98ÃNŒó,ZÊ>§P;%wʈ"ÍJìØ¬øRì‚yÎB`ùÞh_|R»? 1"4S¢WS¤×U{é^„››¿)ÂNå•)BHQèHe(É g ÙÐ)¨†vÔ°´¬kë96«"Œ”ˆc‡'"ã§"KÎC…ÇbAF¸< æy¡®SÐišæƒ¦i>Ô‡B!x]Ðs=i` 6q±m›Œ[Ør$êcôèÑ•R+¤”wJ)OÓZ¹ýÛ l¢ r˜êZö€êE¨‡é— µ R´Ža¬c(Ï !17þ©{O[•FNÄ•FBaX]r./æ0fÚ†6ŠÐÆ0”Yæxu25ÈzRálÁ$AHwai Õ‰©3}v¡Ö(QŒ¢FBÅ0NC1NHL` ¡²Nêabhƒ,ÉӪ.6BDœ&b.£BeˆHiß{ÜÔ,ObyêÒ0ŒNÃ0V™¦ù`SSÓª~Ôá°c:D"b±˜?öxí·!K6)¥?ÈÂéT4ê#FL´0Åø…l£sBÇ ­Õ )Å Eø4© G¸üš´m”!*Cãòn ¡Êuç¤ÌùzDB#´B¸4•Bh7B4 ¡\›ÐP>gåÈ9¡,'arH­©¡1ÂdÃ%mÔ(”pžÃyå§0 '†kb …Æ&Gmƒé.²ÃšÂôtC`„ DZ2…Ä–+‰ÌN!D½iš !êëë÷¬ò ר j P‹ÅˆF£Ç]ì<$Áó4½)ÄÇJ}”ÖW®ÒZ¬ò`ßæPh"3sÿD(¥W(%ïÔZ¦]oÕ¡+4è˜?ýXSpê£ÿ¢äŸ} 6[z/æÉÍÓ°³©<ê#/&+gÎÄNÎý#¢²­R›>¹ê{¼€8‡ƒB»ÚÂKxoR¾3ñ®Pžê5ßóFÿüõñ¿Šú ‰‰Dò¦žt°yj28¯Ê+îG‡üõñ·C}ø§'Ý‚­ÿÈÍc9þ?-¾©î¼g)IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/marker_add.png0000644000175000017500000000155611273045225024214 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ëIDATH‰µ•KhQ†¿Ûf’TƒEµ¢¢lW]_  EÁÔ…àsiAíJêNˆHuaEÁ.”uU¥]j­B­©ÑBµUñ‘NI:™ß…IˆI[Ñ3f8sîÿÍüg¸c$ñ?£è¿ªžô…1Æ ”ÿ#ݰRÖd–Em2Éé@€Q I }-!×ý½–{?•s€Í@ €IÏÀ³Àë%ÜÞŽ½b_AÀÎÊÁœsnÝ®®fÕ³gª$ AÖ $õ9õ»wãwœÂ=¹}›ÀóçjÓâ¿\—óýýô†BÌ.°w/u$ÝÊ®g>ŸÙÐ;6ÆÂ ˜Qˆø«WøØ¬,*2acLM ‘ ‹1¯¹§½þBUUÄf{0È)‰E@¾E’îXךš(®¬$Q ±‘·½½ì$½ÎŒŽr°¥O[Ó ,[Æ–xœRàDvÝänƘ]eeœ‹D—”e‚ÏtQ¶Ã4×ÅMÆpF¾Pæºl’t?[/o«tŶé:r„¹“=ñ‡>‚ßë)žaÉÐ(A‰»¹âㆇÙwñ"¥°j°ða$Çkɳ(–eŽVTpèåKƒÝÑûkYwq“I’ï_T†Å@ Fè¤!¢œ•t o#I'à))! ñTârk+Mųp¸„2ùKN\Ϫ-'Ôet&¤ Ëý~ìH„æÖVš¬ù$R’;ÉLú?ôHâêž=T8Ÿðx«ˆ{+‰™JÄÇTãzâT`SM ÅSšA¦Á˜>= <ø3|ãå÷°Ž7©Ìa˜/Ô=©e=’ú&AŽUÛfÎäó·oœìê"dYDñã]Ê–R†€êñÖþñ Òá÷›¶ D"ø»»y<ûXŠ‹—N¦ãP#©3Ï©Œ1 =ºÛqk+«å®¤è_,ˬu%=™êš‚?@ZåÿLÞÀûIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/marker_first.png0000644000175000017500000000167311273045225024613 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<8IDATH‰½”Mh\UÅ÷Î{3“¤ù°Õ ÑMÓ#Ø.¬›šü$ ‰ H7"…n\\¬ŸPT¬¦ ¸ÐMAÑÆ„ê¢ÖR+YM£´… MÌë|Ü™÷îq‘˜É„N#Öÿ彇wϹÿsx×HâV–½¥ìÿ‡@P» 3[Žõ#¿æ_obÇ‹ê imáLKúÀÔOg·üÞÙ»«g{ßP$;ïc§$vòe§¤ì’¸ä¼]RvN±sqÙ9;—” ..å]RʹâÊÂþ$.#iOƒ€1foi›~cf1Ó±}Ù"d"Pd0«’"¬‰ðZ5F‘—‰LJ‘»jSItéôhëÏ_=*i Öe éœä¿˜úìpû¿ñ{vâÍWAŸTÉŒ1»’Rabá§±®…é±M‰|÷á³Cq1Úœ7ÆÜ_ÅëBNÙÉ µ£-ÝÒµbS¡ßÔõEbƒô¯Jâ÷%Ÿú:OŽeZ·–Ÿ|ej¥{ð‰Üfø~áóïíÇ@¼]ÅׇlƒLÛtKÏ]}éÛ·9ù8 éÌï;xêlmÈ¥h©ðËׯ÷ï>pb²6ä±—žË]›ßR…¸Î"IÞs0úkî>žKØ‘L]—Æ ÎžwئÂünNLVñÙ‰·îÎ-Ï=¤š[× TjšûIWºàϹ³·]üêÐSÅÞÅ®äS—5ÏÅ:áÓÇ"½'i¶ßH Ö䏓Ï<¸8ÿmo2êÒŒ.±O-̌ߡR¡uöÌèpârÝÀÉ.IuȲU´6L‡õöå0¦PE È>ì}éÈ„;ðìäoŠ |͸RCÜl´s}=_ó×4lúÅ kã jkÏ‹ÆpD†l» v$,ú\œÆ(e-ðS‹ZÉ›»dz‚˜Sìd·†“ .÷Ơ̈ϠëÀ µA¡åžî%ûXºÈDè[þæ2ˆIq¸x4Š×úÃÃßð´ñˆIsÍ®{*Œ1!ŒÓF y–´¬cLÖ¦Ò¿µß¹£¸zuÎÊ—ß‘ôQ3¶·}`LØ{³g:ø¯ëø|qeRÛüîIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/marker_last.png0000644000175000017500000000150511273045225024421 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÂIDATH‰½ÖKhÜUÇñÏÌ$ã´FÁÚ`hEA*Ö‹±(ˆ´‹J¥ wQhµÅÆ”‚ODA݂Ѕµ‹Ô.\øÀ" TBBSÐV-B¶I&%“ÿ¼®‹LÂÌt’t”zàð?÷þÏý}ï½çþ/ÿct9-uYÕÿ@z>!\—ãm¨°°o±&®,7Éù0Æx²€›òì|žéäK$% Ef‹$’ùgRõÙªçIfH¦(Ò!œ„P[ä+Cølâ/LW}ª&nl×Å×Ó7Êý‘»bU¸®xæSÒßqE+û oÐ3ʳ‘'cͬ!„ 6'ÙɪYB+€÷y=ò#zBð ¾¾™íkIÚZ\A–ÑvVã <Ñ ðíJÎôŽ1‘©9—bçy­—÷0‰ƒóýuE!ô®à‡ÓŒtÏ%Ncê8áwb¿ª)ì~Ö¼ÖörJ¹Hå˜+eý1Æf+cŠÚÍUµý’{<ر±Ó£C5ïΰfl«Mî˜ÚíÎJÖl­øE˜aß÷´}ÞÉ>$~Ç ÷¬òܶ¬mãdÀ:Ü‹[6ب×ìªy^~Šîä†É•¢ò´Tò‡ìÑ>÷­íôî©9ÙZµéF±tcv¹Æ[“]ÚïŽz;‚r$o­æ^Mñ€Žâ^g³9.sœ›xQ‡—¤ (ÐüÄÞFñg9#KÉÿ×Û4,:ÅeHl2n£ ”;6(¥_Q®ËÆí¢T–4ãâœoœ[h¯/s8Ó#U¢Íߤ÷+”KÇiÇ=lKK€㤹lÞ~É„ðU¡â‘ð±Ø¾O¡kÆèDÞ©_²4à’jPâ@ù¨¶îŒ½9aà|^W=`?á·EÇ—u¬Ç«+_ÍÙ{«ý[­qL·AÝåìiZù«È†p$ÒS`KŒqÉâÎ[K€cÿe¾;…]”ÁIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/marker_list.png0000644000175000017500000000161511273045225024433 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î< IDATH‰µ–_hWÆggv7“Ý(!-¥BQ¤RÌ‹ µôµ…JT¬âô!¥ORZ*yТRÚ´¶ ”Ö­µZKÅP̓ɢ&bÒ|PÓ-Á“M²{g“9}èÎf³»Õ 4fîó}ßÜ3÷FT•ÅDhQÕ;¸ØÈÿ {]UGç¯gÞhŒLEÂa±A,À CÈ*ÛÿÎÆÁœÍ¾[qUŽGJ zc77¯6¶¿¿Üƪc~,yÎ¸ŽžÞ»lé»=áºæ‹@´ð TUÓ†='NM{÷Ì,¸&ÆdÙ{ %cŒyOUÇË òUÕ¯öµ%3 Ý\mí'g'R“CÀe±Ê Dd01›ãÐðý™ÈTÆ[Aϯý³™ŒÙŒ;ŽÓZiÃN _8Ñ@ºoµ½$f•«<wúÏÕ>ºßã8®1æ—2U6.¶›©´¿ ñš?È€RU«´Tõç´ñvNæ®ßš$q7Uµøç¯Ð×?2&ÛVüäwWÐôÖkâHrŒ/¿ý‰‘¿R|¡W<ÏOŠHg‰þ1QUD¤™Wøœm„xXtåÓ°ÿ¥5|ÓÑT(KâÎc6ïè ·Óð‘’åvc/ÏµŠµÌЙ7ÐYt®P›˜ÀQ R©»‹JÀEb…>zX¬ŸË·vÎo²’OÉ=öàÅ ÆEœ»p¨'1÷†<šêb¶ÛqhÓ<âg__1Ѱu¼À«Cªê©ª«ª.às¸¨êEÏçrkçl þÝÙ› ýñçXvÖk xÿJiàð)õ RÏ çóçä…hÄJ÷žÝ¥O†>ÖºxÞ¬Ä/Ó«&IU …h^¹|izÇ;ëÜx¬ætµ¼ª ‰Õ†¢{h¨–WÖ*žijUu¤jÎbÿ¶üôíMÜg-«IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/marker_next.png0000644000175000017500000000161211273045225024433 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰µ–]ˆUUÇëœ{ïÜ;67§Ñ^Ó24…À"‚-„H‚ziJÑA°¢C³¡ ¤£að)F$úÀ0#¸&†i Éé8áŒ3gÆ;÷ìsö¿‡i†ûåp‡œ½Y°Ù{¯ÿo­³ÎÞç˜$³‹ªdffv?°ëéöIªO·mX9žË•$õ.ñš±T.ñÞ¹Ô;—x缜sÞÅ^.v‰‹½\%ñ®{7VŽ_&Þ€¤ï: ÙÓË‹më{_ßp #BDˆ ‹À"LÈfÆòA0ÒÑcï³e¬o>›Õ­©Áät²ýó³Wó¥¿Fó }&ÇK×øóŸè`§¤¸`fЙxÿåÇJKS¿°·ëíþßö!Α™ÍXAp¡³=÷ZâEœz[ Iý3[ œv6œno ÿþè•uÉà-Ã…l¸ nyyO×ãËz€8Ñ4}§’vïí¿™¨„ÕÎÓ. ÞûúÒ?àæ8üþ÷‘CÀ»’®7ËI?H6°»ï|gõ|’z;pêòó+÷¼yü—¡UÍÏþ±;‘"àhõ|ÃIžŠ]ÏÉ‹7ò'/^/Ö¯ ï~pû‰_ßzêão»KC£sëGÏ\]qåæø‰’j•Tc@ô@œCÙMç:‚r`vy6Àù¬%°P˜·ä…µËΆMk[ñmµÈ·€Ò}A8úÇ©‡„>‘t©džÌ×òÙÌO^þQ—jµ¤ò=˜YÈhæÎiÍg±[þB/>A ÷¶õIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/marker_previous.png0000644000175000017500000000146211273045225025334 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<¯IDATH‰µ–ÏKTQÇ?÷ùÆy3Ó š I $ƒÚ´’‘¤$D"*©”J0úan*„2¢\ˆµhù¸©ÄÊ…åÆMÙÊÅ893Î{Λy§…Ž:šz/‡{ßážïç¾s¸—«D„½lÚžªzzâ÷«šÆ=$std«ùÆõŽƒÜ‘ùuÓ¤J×iêíeQ)¬d˶×,‘X3ËbÙ²VFÓÄZZŠF±B!¡7'Àz@*Åk‡Žh”òž~Q òwÜn¾úíóñx)"ßÒº«5‰Å¸Òׇwf†ü\s]WGƒiR<Ìô¯”ReÀñd’¯­­rŸšÂ;1Á>ç”R®MàÍ0x RYWÇR.€Š ¬ÂB& ƒ2à P»ºñô9PJx<Ì“ll$ÌÔ ´”öp˜£Ž#'7ýˆ,š&ímmxâqÔv;îîæÈø8…™¾ÎN*Ãa®‰Ðžé_wÐDä],Æ—®®ì5%PyŒ==tÌÍáMûm54D·}"ò}K@,FÛÐþÉIû©~¹]_çŽ8Cr rÁ$‡Ê¼}íN>:ûÃȺ¸ä{?¸òT!T›«- )eI¿üú…lÓ_^Ñ®×Zvt:ýíÍ{$;HÊÚ¸¸ßÇÎMÙ_ìnmÚ~±£- ÐûuÌ3=ƒc™0ÒA¨(‹¥¨(5å¥þÑ''ü°H²»þ=Éü¢Bˆ†dÂúªýñìÞG7Œt_j8Ü3ð¬Ý,  ¡5X”‰†áÂ`É«@õÔ–jÒ¶Å¡ösýïízx÷°›…*åLò?nOÏ{õ(búßÀ¢5VŠŸ¸Iû•Î ×[67f&(aáêbº¦¯$]6; Ë?ò\Kïõ¶ï®Mø«Ö$|¸0Hão¤1QµR¸ à±yüR$a[Öñ– ™!žÞ’g^xkã:wж¬ãq°÷mr¥ !’)ÇʽñÌ–_B¥e÷åß¶Fš­$KK‚ãd1›ÄÎ:'1•²­<€qqKRE"}nÒ9 $ûââb•èÿØŠÿUüQ Báü£IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/mixer.png0000644000175000017500000000121211273045225023234 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰Õ–¿jÛPÆ6±Ij;¥eüΧïÜs„bJ)ž3âÏZXð¿(¥êOQ4‹™À'M@QWJ½}"’É$š€mÛÉ4MR©•JeŒµZ-jµÚk·ÛX–E½®›8Žƒwá——7ÿ N³´Tfmí5N@ív» ªÕªæÀ‹P;; îïð‹ƒƒï´ÛïR „s¥”H)5Ìš/ü£«”ç\× p¥”¸®«a¡ÓÞÀŸó¼çÝÒ.F£‡éC½ÆüJ©qn²EW Wô_õ°GvhPÉM˜Æ‹(—S\_ßÇ)•^ü“Àd™ûû›4›M2™ ÛÛïB°¾þ‘ÕÕŸ$“߸¸øªšËü¹Pÿø-.öX^¾ûË!„x¸ˆžo!{§{œœ0Ùªm=ÎAØ…æoó¬ôV°,‹â›"‚G8˜5Yso²ç`Ö†ú·ûA›<Ù¢££ÏœŸŸ°±±©9p]7ÚAT‹ú}ƒn÷%…‚ÌÙ¢IB¡P ‘Hhx.— p³Ù,ŽãD ضmú¿ãÅb1P,ŸÏ0Ã0˜RÊôαÿþ¯â7¤”·ÃYQÎ%IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/new.png0000644000175000017500000000125211273045225022705 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<'IDATH‰Õ•±kSQÆ÷=_rõAžD!›H éP¤ƒ[+Y3Ò%.v)]üÁ-³PìRJ  ¼AºØÁ "””@‡¢mI2y4”¤yï8ÔÄĚט’Á.Üsîåûî9çÞs•ˆ0MSen„-*¥–b±ØëH$Ò—°Óéœ{ž·""û¡¦i¾2Móã8¬¯¯}âÕÕÕ–çy·û¹4,ËÚrGr¹œ¤R)ùÌÎÎþ÷¸†j ”ŠØ¶]L$ÙR©ÄÂÂÝîØÙù+ú)RJݱm»277wo{{›X,F£ÑÀ÷ýP‚r¹LÄãñËz¡h­?òçH§Ó¡)±¢–Øl‰ÞJöyvtŠ´ÖjmmÓÓSÎÎÎèt:ø¾O¡P@Z_Z´_¶ñ¹íà-­5¶m‡¸®K¥R è}u¿J³ÙÔÀ²Rª."µÐw0 î;';¨”‚€ <„ÚA ß÷£¸d©ó˜L@‚g,8Á_ü•¢çÔ/¦µŠŒS›Ú€ðLm‚ìr«·w"Íw›}?âðàãâ¾u!ó$Cò~ÒCX>½hÇÁqœßŽ]à+è›˲8‘öă˜4—ó˜ÉÌP-V‡Ö¯-°÷yoÈvß»CöÔÿƒÿ_ _‘|>ß-‹áíó GmÕûô•ROäuȰ%"߆¦…©×à'„Ç-[QÓ IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/open.png0000644000175000017500000000171611273045225023062 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<KIDATH‰µVMhTWþλïÍËd&™‰ ;ÁÓÁV¤VeÚMªø“¸ˆ4þ,ÝØ´+]”ÒMW% ƒ w-VQ(ˆM,h@&˜&jæGÉŒ4•L&™É¼ùyï6™7y3¦-äÀá{î»ßw¿Þá3c=CYWtª}ADõªª|ë­ýDË}iqj!k¸ÉÌò¿вEDÔâÒ”©]Û}ê™ã¡keq‰YC\üuZ¦K—syëìÿUp|÷ߺ´;€h¹Ë 8°¯YÛ{òÁ=`ÙÎM1ó½5x=Zøûo:›÷|¶ÕœÏê.€@eþ ϹcÓK¶Æi=‘HLyë3O×T`YrKG[ÝŒl<èî=݇¡ëzÅË}Û7œùû¹þdäþãËö×$` ùR–T/G£Q„B!!P(`F- E÷—Gêï÷ö„ˆ¨‘™«Hfä f¢A±, “““üéGüvýrF±&-êˆö7(,dù;f~XA†QZR]%NãÔÉcèxzí´oR«C®ŠùEIƒW2݃W27ll3/šUóh—†Ñû¹†6 }³ —-u[Ö­d“σógZQ(a#µU(`©ùBÞÛ°A¹‡ÑŸÛQ÷Ï.Ù¦Ê¾¢¬ŒYis‰ä ­X,¡«³Pì“Ä V­Ž%— åŠ%ùr•FIiÒ"‘>îj†p5Õ¾õ{ê¿â‹pëâÉr·BÛÝJñx;ƒ~@øÖt("<ŠÄd6g:€ÇßJO§Ð³¯þ5Àª×£ãsK%SŽ9ÔØØ""‘a\øú  úÖ«VOFçTãNgòð;|Ow~½&H¹$[ðêMÙlQu0{‘œ ·àñw”ˆ`÷ØønYÞ›Cƒ·þy*Y™¶v‹ÒÉd²³çЀ¨8è$©Þÿ}䪙ÍnÛ0ËãZQ” vôuÛÀ 0óÊSJùîiëK)aš&Kf¼~õ¦xçîp1Ÿ/„˜yÂA@DÇœ+;ö¯R˜`ø…™SU¬W¬û_Å[Ugð.ì‰IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/openrepeat.png0000644000175000017500000000057411273045225024264 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ùIDATH‰íÖ=JDAà¯ÕHYÌ6ØT#a ¼06ð^CÄL0ðš›,ÁiâO›¼§ã;ûÃ(èfjº˜)zf"3u9V:­Žµ6ˆˆƒ2/ÆvšøCÜUê¾gæ=È̉À ²Á6.jkJt~DË/0Éý"ÞÇ "+u7{™çxˆˆãw^6X¯KúXmÓe‘z8Ã-F±5ƇÌÌÇ_Ø, Ê]¶ó ÞÆ¸YÌKÍl2®ð‰“®:ù¥|­çÈÌS 3óºÆ]¨Ñ&4Üÿmú‡¦1ùÉϹ‹çYnÓXú_Å%ß& ‰3G-IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/option_language.png0000644000175000017500000000471011273045225025271 0ustar julianjulian‰PNG  IHDR00`Ü µPLTE³åÿ¸Û÷Õðÿ²±Ê¡ÑïÿÓÓÓåíù*C½šššÃÅÚgg„T‰ÞOÚíùÿWlÉ{Ëûèöÿ§h†Óhhh=cÌêêê"®€Óÿl³ðqqqåöÿ‡»ìººº`žçýþÿz¨äClÐ]šåáõÿ¡ßÿž¸ååår¼õÅÙó—»é%$v†¢Ü|||i®îS‘Ü¢»ç:^ÊÎîÿøýÿ«Äéêøÿ‘Ùÿvw”u~ÊŒŒ¥0LÂþÿÿ­ãÿ¥àÿQ…Ûõõõõüÿðúÿ%9¹ÙòÿªKJc‰Öÿ²ºåEqÒ½éÿt›Ü¨áÿ-HÀ""¬JzÖŠÌ÷6P·ùùùÜóÿx‰Ìcc´ŠŠŠ–ÇòЦäÁêÿýýý!3¶ñúÿŒžÓÊíÿšÜÿúýÿÀÀÀóûÿ1]Ãi±îÄêÿ ŸX‘áb¢è?H½BA·M~ظçÿ •AjÏ6VÇi•Ø›ÔùIH\Çìÿ43ˆØÿ‹vÄø8ZÈÞÿc á&<ºÏÏÏ+¬›¬ágªìHuÕŸxÈú%°­ûþÿ•Úÿ®ÒóVß…Õÿ'±Z•â£=nË ¥;sËÂåúÞôÿññó ¤¡¡¡e¦ë ÃîDzÒ.´21±Ÿu·í)²4SÅ#6¸baÃÝÝÝÙëû,³b‡Ï©ààà &¥2PÄb¤é‚Óÿ€€Ï'>»0µ¯ÛùtÁ÷¥”ÐùÀÀç¢Øún·ò~ÐÏí\\\»Îð>=[Ñþss®EE”?gΘ™Ÿ,+\˜äNÏ‚‚–˜Üÿñùýñùþºåû ŽW^¶ÎÏí1­W|ÉÅÒí­­­òùý¾àù×Ûò'?±!Ÿ 1¯¯Ëð’½Wà°Åì@iÃSŠÕ­ÀÜ[„Ö~Ç÷[h–xœáW„ÏP`Ã`b‘×U&Z”-1µ(ŠÎd;¬ð%BbÖ©Træ©+6˜œXåE‡ÂéCX;~ÜPÕ`01I4ɬ“ÈÚè¤ÈRS@  ëa=«³w‚ ©DªQ$ض×®ýçÓ_ßZ³¨ó¿§q#«;¨0’2,Œà™€Ä…Ì< ˜]ÿí–ËÏÚ.‹² ½Tª×g`„_m;Ù—‰)`%-‰ÇóD"?ô¼Î¶ç3ˉ!åc!ň:©X>GHìãÒ+‡›Ž©Ý¿Gm|a+zqì‹Óˆ|mYY™#HL9²S”Gäy$çX0oÔ¢IG‘—Qt¥Mâ:¹\Ì×2°ÐòõSå<[\Þ“w¸qØLé¶Cå7Pt©èÏ!ÆiT Fdd$£Œ¯— ˜·ÞiÌD[Uï.×½¾^[Qt‰ºbî‡k&âÒ  JÞIs>‰õ…ÓñÚÎC,!€Š†÷mØ#ÂûÂ_ùq9Å=B–?ÍdRh¡„=Å.Ýæ=e[u'æŒæƒGU0üIƒt'+æ F$c§Ñhäɘª?zˆJwM T„µ4€w>Ké€*ƒq2ô<[,³dLùòb¥LC‚·m~lÆpÎÔ0äi#úˆ`iñ~`BÅù•²‚°‘¶8 ñÀnL*²zVöws)œ<„¯Ç‹¯¯Øn0.ÜeÍÝV=*€âßHÔÕPŽÕÓ£†ÞÈ¥ÞGМ‹(ÜŠï^²F´*£w”Þ@ù2€ˆkvÔP?½»‘Ë]xK r¾CïòÈÿߪ,hòõªEG}†L€Öˆ3 ÉžC5ýAt:}óvÕû·ß), ½éZ°·¤s´ 4‰ì‰ÀÍ.‹wNBrv”‡GåPeÍ´«ß\!I1 æ¿Z³n4]¢ÝAÓ7\gµbˆÕšœýåñãðRà,­TFš:ùã×ì@3C«åƒeŸÞ‹!ÞgrAäL¾ªçc1øz6Ý]d'2ʴσs/ijëuUvµ.³X",ˤï}×ìDóÁÈ7c5$¿”V7¥GF9 „2T0nÅsºïAöÿ4˜/mWLiIKSz[ttAAô¤G™”¯Å&ƒ¦B N,3™³fT$$ غïR{¯3¦Ô·¤ºÄ =I Ã\FOFO3wë(‹ $ùE]6Þóê쌑T˜F"-µªÁ¨(×L²ç¡Ÿî¶_..µ 6Öº´˜L`³:9bÂîÚóÑ\7Û!I Ž±Ÿ¡’ƒ°O,aøØº†Œ@û£qD{$œä&pþ±Ê‰»í_?Ö0rAó&œG4×#ØM¡È/¯ºißês¹)8ûETŒŽ'Àí%f ˜«nt"lì0†Ò|N’Dšrs•pú˜•þ¢ú;÷P{æ&à÷ªªª2ÃþàÜ ê»ìqWövðYûëuÅd²bj{ÒX¿¹aþã¯,bøèN¾¿MþÖî r,Eçóø'A=næùá„Tòµ±âÑ#¹Ô\ý“.öylÝÅ•KAŠìkûî. ‰¥ºéžx±Ûö|—ÎmâÊUߎ$¯ ‰Ö ëxÆ×$aãüR¨¶KiðDZ%ÏþžÒ$>8Üj8\‡ÏãŸ?ÿö‰}ú.e•IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/option_skin.png0000644000175000017500000000724611273045225024461 0ustar julianjulian‰PNG  IHDR<8¡m›dsBIT|dˆ pHYsXXE&T½tEXtSoftwarewww.inkscape.org›î<#IDAThÕZixUº~¿SKw:B"²1¢ìîŒ w`.h`ôÁA½î ‚Àu˜厂Ḛ̈¸ŽÈU¸:2À̈Ù“!! !KwÒÝÕUç»?ÒIHwÖû>ÏyêÔYß·¾SUßYˆ™q¹AD*€îÒô †D°Ðë-xµ˜‘ 'öØÄÌV³}]jÁDà&ýô„~ÌèÁ€,ÂÑv:M§U…ü‚`Ô2„€Ÿ~#µ²Fvòx95`qû`½l¿°&’ðK"˜ˆ’ÜA„»Œc†¦˜‰±¢,%I”]•¬”tï¨ꮞ?Ä^èJµ`ÀdB ʼnaÓÆ¿?j¨O½W•ù¿9Æ,ŸÁ}ä˜ÆÌ;/©`"J0™÷Å ¥]¼(¿q vøçãmnn+ÒU2êÄÀ¤ ]ÇÆ%l>øóþÏLšõEK×0£”^¿ýˆ1Ï´Ø ‹™×5楞ÃôüDƘ9€hŸ *FÕ¾ÿÅDÛ‘‰Ãõâz%šxÖ‡‹3R¶çÜ2u‰|Û|öæY_´¦ÿ­/&o]µ¹f×#ïV¬ðx-¥2óïp¼&¢h §¥D‚«¨?\;1m’~tL†^ ‰ÕYÃl8TCúÉÂKþû1ßæÞ|/ ï¶éç&Íü"TÇ2kGÞÄx¿ácz~|²±…)?x2€aÏ—¼^kð-Æ1ó–×ó²0E˜-ž“톤«%O>hÛ<9ÓVÒ”#¡ÌšŠï86éþ‡×mébXv›Û›Ðшî$Yѧ zuf¤6Ò;iækÓýNy_Kb5 `æÓ Ú @Dc„@6€—§+¼á ç?¿YóMöÕÒ9»¨¦[Ú”¬R¹Û•ºg€òÏô[RÕeDÛM²bsÅæ9mèË9͵5kŒÓ34Í6@€ß†Ò[má U—˜Ó1Yx–ÏúîÖ‘ZYpxá°ÏŠ[Siô&À\áŠþ¾%mº}‰Ú»[\·#wÒèlûpåY¾Y™ Þn)×oºöFgå¿ç5ø~"zž™KZ%˜ˆ®«¥D_Ü¡.›kÏqF £þ°Í5d,¬:ãLÖRœ»÷ú͘]µVì~ÃŒóJÐÊö1ÿ€Â3Ý£ÿ¼u^Æy£¯7L{tsý÷l¿÷Ãa]¾*‡l9çaÝmol;ä›`€Z,˜ˆî!ÂÚv X±0êàmc´ò¦¾´'‚‚`e¥?ã½*ÿàC ¥ÍMt|Š»½‰Zµ7)Ö´t{K8tJ8v¼¥|CØò|‡z íßžºivÖ¸Þ¼Ø5éЦ/ÞŸÖ\;õñ?Ou8 @ÿ&=-"r }Ý: çw_D9l0zFA¯Iþäã–›ÀÂ"o—?–ûû†ë83J;¸­SÜúHžÖÒÏß³=ç–{ûvÚ±á7?›¼¦5¾4ÕçÆÖ5ÁPfämc†ï ‘ ÂZUAº7ìg¢ì`ÏNGtŦ؄HO1I!syªãp” 3\™o½>kŒäHí¸âòJuÙúéoîºóƒHåZ AØ oSïÂs̽ô[eÿ>"ü'tÛéuñÉ X 7¹OEj8E%÷1ƒ +Þ¶ûévQû·y̸Ý>3ñ°ßJüSµ¿ÏÍ[Q¸ú÷d¼ºÏ¡×ìj­KÚÔP&¢dA˜7q´â›=]« uj¨:(]•Ø™füMžS`UÍ—gsÅšžx“'®Ò…ç˜!J´ïzÍåØ&³[œRk?þÓä!<+‡­ÆºbÁ@€êÆ~ŒÛ¢§õ3õýź-T«ô턴ʯœÉ2Í.½¤@ìµÇ@uù]5áÚξkqÇþ‹A¼ÍàF‚‰(NÌ™8Z1úõgg9¾C6›Q¨ÙÎÖc"¾î Ý+Q2<µ27t¿8Åq¸Þ+J,š¶ð)á|æa½<;ö3ŸÄGûÙ"º}ñ·zrÕË×ùíŠ8d/#âÔMˆÈ¡<~Ãp%0Øe“y»<­ÙŸ»šdy“èL\1¨ÒÙ¡ßÒ–DâœYZ@ëŸ8Us}M-QdS™UŠ-PªØ"ºBÀu® ¥(àQ™Â½«a¦ü,¦f·½£7׿ —% §$04Ý!ˆ(†ƒGf*aǯšlž•î«êôäéƒIwUsõk)–»ì㸞õyÀkpÀÀf(#3…?\-Ù øŽØà¸ÆW•úli©83P~Ö—¶`E˜^v˜’‡ø‘™ýÀ(U_?L »p¢u0è!ÞªÔ¹¥y¤51ÛWèÀ$Kb0€@Ý"^—Éd9¢€p´ãF{ªµ)¦|åJk·ü¾´'꜎@Ý2ml|läá¨w H\ÛŒm@vI`T0º¨ßöõé+nŸœ `3ç€PÄÇÅ\¹œóÁ}ožv™®ða(M!6¶™!ýÿ÷xïDÝ(þI03bb/ ÛPåaå@®mY—ÿ?UUË“ìeæìPšÊ {T‹–ÁÃ#'OÚ—¾e¥}ý-R«Ý† ‰ vÿµýä±ùj»{uV*ϯ‡Öcæ›å©‹‡˜W?]ÒS§ÛÞðSKÌ7L5FùÔ‘ÿ´îcåÀ‘ƒ\R^*ßzw­îU®íuÏ“ÖmÅeò’O0Öïª @X[?]µ,œ(,’Wµ¶AK<+{oßãtmÞ¶ ®yÔaÂÄ bæÛ3‚'ó ›?ýÒsæË»%º¾Þº l²Œ®ëxnþñcŽÕÙ¼„ïô«f0à `Iã<àdñ)VέßϾ ¸Öþ9Òºu‹XvÈÁlø-uÛn3©U¬Ûˆõßy£K*­™62óÞÆùÀIÀ(?Ã-¶ÀüWÐuFÖý|u¯«›-ë÷ûaZb£qgâBá¾å/KF"€EMå«NÀÉb¦¤ˆKíu¨©e±ã쪵·ÈÕüõ®Çpˆ™kšã¤2³ˆ>ût£5å÷ ˜b¢#¿ÊDmA~‰(+-“í“ÃÇ@A~¦Ý{¿N;4¬¿ZÕÔ´rý?ýCá¸%yDsD/B³¤ånÓ/Íú\]¯FjG»ù²eaŸLNv65 )q%+_Ô¶7UæO¼ÝZÝ%cU¹· ˜y3~ûçMíýõfÄmXñެü¯7ø?¾DE……)%²¡G~õ+\—1 zT]¿Lÿ»ÝF笤˜héêÚñD(ðê… g÷‡‰H_ñÚ"ÝóÀ4½:´KŒ@ãýá[¬è%+DÚ¡\ŸÓåj/ËJË…%%2Ù Ÿ˜!~9T)E½ýÜú'ñž_Q›þ»5µw˜Î̹,‚ƒ¢íDø€·Ï}T¯ž÷¨^NphCüh«{ȨT—¨éžJÕí„·þFwcÁ…¥R\3­b¦»–2#ƒ/ñùåsN‘à-Y³¦jî?,²— „Ü`gþœÓP°×Ç2cFåϲ ¬TfÜî_y1qÎÒ3[Ì<ÀÒUk1“gy]…%|Þ§nM tëãÕŽä[iÌȺbg-™ùY}¹ÍÔÓÇzºÎÅßÞçoÛàD±´^qç?~ô0Ÿ™W·•ðù¢ÙãÃDÔƒ/3ãö”öä]ô˜½púd½¬¥CzÕ_ý)s_¯Qéa;3bæw.‘¶¦õ´ô›ADc…À2)ÑwPºR•u·^|ï$íT¼Sø .¯½ý©ßõæG¾ô‚S²È“w3ó§y­ùH?h¿/J —¦ÂÐ[©¼Ê%j¢lÈ9!£XÎ3Uì!p@J,°Ž™Ãžî¹”hÓ‰x"n0E2@HcF r¤Ä~Ôù¶ß0óæ Ì÷¼ñ¯ uß[IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/option_sound.png0000644000175000017500000001060611273045225024637 0ustar julianjulian‰PNG  IHDR22?ˆ±sBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAThµš{xÔÕ™Ç?çw™ÉÌäF.$@H „Âýn¬µH¥‚>Ö¶kéZËc\ºÛýcŸuÝÚîÖÖÕ}ì>ÝÚ*UQy´}X]­Ð.‚„‹ÅB°äš ¹@2¹Mær~gÿ8¿™ á&Ò¾óœgfÎoÎ9ï÷}Ï{;g„RŠ!!Äà>`!0ˆÛ***ÖÌŸ?¿IJé¸-&¥<òúë¯wÝЂWâãF€!fŸŸS=cÞ¼yŒ;)e¢9RʃRÊZÇq6K)×½óÎ;ñƒ É¸‘Á?ùÉOê¼^osNNNyrBÃÀï÷£”bçΜ?ÐÀ„†b’b9ðpbñâÅÿ´hÑ¢ôBÁ54"„°•R±Ë={üñÇo‘R¾²k×®1[·n¥¬¬Œ²²2JJJ°m›ÎÎNj¶Õ‹ÅXtÇ"ÇIÕÌàÖ)¥|tÓ¦M/^…K)uEí]ˆ¢(>SJµ%úŸzê)SJù˜”òߤ”fww7Ï>û,•••86œij"“^˜Må’¯9ÈÔ¥s™þ­¹„ƒ!ú;é9ržÐ¤”ƒ®‘RV×ÔÔt â% œUJúÜ@„àKè­×¬”Ú ð‹_ü"[JùŽ”ò–T‰þá½µœjàÀ-ÉßúL2¾^ÂüG—Ð×ÙÑyÉyüCÒ1Lƒ³Ÿñeø9ýá1Ì”åÒ†¥S²lž\€dV* ÅÀ¦¹sç–§ôG{Ã0Wa]Â÷`!f“xO)ÕòÌ3ÏXRʵRÊÅ É1Ì‹á0¬€ÅcSþžŒ¼,Æy “¿6›’eDû#Ü\ÇêåÏrדËìe_AâG¢RôãD%«ë8»é(RJ¢Ñ(ŽãœVJݼ{÷î&—¯l` `Ç”R;¯¨!D>0ð”R-ʼnߙ%2ïEZÀ‹4Ãü¥ 8s È¡yl{a=?Ÿÿ/ü÷W~Ä‘-Ÿ²øß—²ý¹ ˜ÒÀÆÄÆÄ@ 0á1óàLFw:¡Pˆ¾¾¾‘J©M†a<#„˜æn§ý®V¦ !†_Q#Bˆ»€  xU)¥~ó›ßÌD";;::Dvv6ªÀ&pÇ,ËÆÀÀÁùS­<2õA ËFÐ|¬é"-Ûi&Ý1‹i÷T1iÉ,âJG#ŽÃÅ;¢áµ:ÞÚã8´··säȑģ·€G]A—'”Ro]¢!D®»¥À¥”Z¹r¥GñÒÄ›o¾ “ô…EØ–[˜x„…­LŒ˜`xqoN¸«ïb^›X”ƒ쥡ö0&–0õ;Aª0K¿3Âù¥!hnnNð¾ nFÛïD׳^ mÄ 8èö= TN›6åË—“V•íñ`  Kô_èCõű•ÉíÜIgËÆÎÏÒǪùÕ'¯òÛ3ïòĶŒSÉ©}Çé9Òc“`L¢½â‘pUþÐ"ÄèêÒÙŒmÛî#/ðÀ× àËq )a;•Rêå—_6ÝAz²Ò |%YØÂt÷¹EÇÉ6âÝý˜ÊÀs¿v+9Y ]Ä·þù~F×òR>e<¯þ)(øls]€%L G ¢Šî–PŒ'3.O8‚h4êãbç‚©Bä¥jd–«°Çíû0ÜŠoF^RŠ6¡æzÛ»±°ÈÎÊÆ+l·{µïn'Ò†°Cì|S¤ûÓyä'Øó‡˜ÊpÁx m#ûãtœl §­‹ãÒ <®@%èün@ÂO|Àlj4@QíæGˆ/ž¬´$Ùçì¡“øÒ| -( Íô ÐF¿ø»÷°æ¹7øß¿Ì¨‚‘ôöôîï'³8‡YÜÊ=/åèΔß2… _zËè ÔÞA茗º×v"£q,¯MYYÍÍÍ´¶¶^Ìt`*°ÁBx]Uù€Ã«V­ÊîLn«² ÌÄK˜œøä0±ÞùùdÒ±±ð`ccS8¤€ââbvoùQ%£˜6m“&N$ÒÒúGG¶?“4o–HÌh` “율äì§Aö¼²€ißž‹?3@qq1•••x½Þ½ƒ€¤£¤×@×~t IùTt: Õ;2C/ˆA¬»ŸsÇ›° ›âÒl¬d£OrdCUUU´´´ÐßßO^^EEEÜ\u3%EÅlùõ;‰‰1Є?ÝO ;ƒã[ÒÛÖ‚ª|•¡sJHKK£¢¢âºî‰¤€ÉÆ@%à‚J©pŠÊô¶Ê°±lË]ÐäÌá“81‡Â…¤Y^møÂÂ#,:Ž· 0¸ûî»ñù|lß¾ôôt>Ÿ)S¦™žÁŽçßK0u4ÂÀ sh6Ç>Ð)VùW§[ZÀq‘ žÓ•R?Hâ&@‘ ¤1åá´ÄcˆHJ/X'.)*)r=O›´k&+3“œœ,XÀ¶mÛ0M¿ßßïÇãñ0sÆLö¡ç\W€‰ÀíG› 5]`võmdŽÉMÝJã§Nšürû"@‰öÇ6:~$hlâƒ9ÄëFpE{S+ËCn^fÒ›Ä{¢Ä£1²²²ðù|Ü{dÃajkkñûý¤¥¥áõzÉËË#Í—Æ©ý'0\ú%ØõÒ&½ñ ²Z1B)Õ‰h(B)e”R P@È4Ðcá Iû½ˆ ÚÁ‘>¿/i3¦ˆ:!’ Ïš5‹qãÆñî»ïâóùðz½Ø¶a 6œÓŸ6$í-|¶q%7%ÖÀÎð‚ ­­­Äb1\Áƒ¶ët†ža ã‡ô2ˆ„¤¾ú{Â(Gá÷û“’Ô€Lˆ)„x<lÛÆëõrÿý÷SWWGSS¶mcY–ea[NL&A;^Ü€R _v€‚ #‰ööHÕ4)//Çëõ¦²@§÷&n¹ÈpiU„V^b1%(PŽrãÆ€Áú}>âñ8ëÖ­£±±‘îînÊÊÊðx<¬Y³†åË—cBb±þôôä¼á®^v¿¦]î„Å31Lå\µ7]¾ÿ Ì2,tÁ¢ÐŸ xmm-“&M"+ž™ìÌ-ÌÅ4 :Ïw \ôº ZšÏñO<Á¹ææ¤—Ù±cB~ÿûß³lÙ²ä<ý‘~r3üš)`×êÍD{û1=¥ó+¹p¦@þÀºÊØ!Jg˜¥èzi0ˆ@³Û9,10‹5;vŒÞÞ^œ®dδ,† Í!î§¿oÀ¤Â}a¾wß´œ;§V*™Ñ*¥’F/¥$ ÑÞÖÎØ›*p¤dËKÿÀŒoÌE(…a¤Õ@Â-Ýà¨TÜ„àD'‘8kç\­$2LlÛÞ÷ÀPXXˆÓTò5|t†iÒx´8(~÷Ò«¹\ýŸäƉÇã:tˆÜùŒœ8€?­ßÍùÓ:ý˜yß—ˆGâò31m=u/¤NÕ 4 k¦•@!K†¦ ØŸø ºb8R—? ˜P5Ó6i8rœ˜Œá(EíöS%v )¥ƒÔ×× ¹õ{w$óþ k(Ÿ?;ÍF˜‚a“‹8o¼Hýþýûf°Éå9 4h†» OõÎT9Ó£<2r2)[‚tNO!‘ttt^Q 8ŽC}}=·/¿‹ÒÙ(àxÝŽ~¤³ÜyËÒ{¡OzùåUlÛžS$“W!Þá¾LrèGï·©ÕÕÕÀÖ‘† G)*fTb{m‚ A:B!Ê'V\S#S+¹ç‡ßaü-S’BÙðÂòK‡‘7¦aŒ/Â0µ<{NvÐu¼=uªwÝ÷=èŒÝïòþgÃ-êºU)ƒV%>Ä›ÃÄz"88H$œ ÆÍ¬DX'ƒAî}ð[˜¦ÉåHÁðQE<üâc”@â qh?ÛÆGk·PõíÛp‡ô‚,rË’¦ÊÙÍGS§:|à &Š>² ‡”Rm‰­´Ûíœ,„°Ý¾uÀùÄ,ÝõmI&âJ’;r(£†£„"“É~ýS<^íÁ c ‚]1†Ÿ¿ñk¼éiH¥Ç;8l\µ—ø2ýL^2 Ûï!ÜðäaD¬;Bs͉T ¯ìÝ»×q…c Û>àC(¬ê€o¸ªš|T]]YµjÕ*!Ä…DOtÝ…Q˜@"”`è¨BºZ;P¾|ÏB¦i6ïüömŸ 3'‹I7MeÁß,ÛHžœH$}}a6¿ª]nÕÒÛðIÇÌðàX$Ï»VïCöŶB¼’j‚Ë{ú6@QJõ !ö¹  !êÜÄìI`)Ú¨èÜ}Ï’ÂÒAC³‘‘8Jò‹ ¨~LgØ •”¾'޳íÍMôtt# ƒ[¿'i¹âÂA¢cVèP+ç.ÖÆ¯>þøãÓ)Ú¸ËqP)ÕŸ¢¬ºÐ®m@uuu)¹¿ìŠr~×)b*N ·©8Âk€Guû¢n‹'šü­w$Vj#Ÿ¾ä&†çƒ éL¢a޾ðÑh4±ìIàg)|VCÐ)ÕšDgˆRê°<ÎpOy衇þü!áûBœÿ¸‰¸’ÄÜC¶¨ŠU1·ip‰÷ÄoâHâJ²oëÇœ9¢ÔoýþîfÓ¶ëðÙí ½á{öìÑG³ðƒÚÚÚ>W`¾ËcMÊI(ƒƒw¡Ãÿà«Bˆ7”Rq!ă@î­TÏ6å;{$MÁfZNœ¡õä9„‚ñs&1jâ ÓLJY¹ÖÈ7–L/£dN91Gâ>ßÃÑ»é;"33“ªª*„OÕÔÔ¬wAàvt|kjR¿ˆËôûèÃâl`¡b£R*ôüóÏßá-Ö|Æs?ú%÷`0ù2ü,ú»{øÆ¿Þé±\‰KN R¿eoR Ð^×DÃ+{‰võ'ã‘eY/nÞ¼ùÇ)ÓÎG烽À&×_ˆ æ¤b pÜ,„Ø¥”:·bÅŠÛ…;jjjF¬_¿þ w÷±æ—¯ñÉÆZ¾¿òŠ&ŽBâ°qå:²‡ç0éîÙô¶uÑ´ñ0m;‚‰m” 7H|BLF—ä}èÃõcƒ×¼ÚU%ÚÍÅÑ·V‡f̘1³¾¾~w,»D—£ÌülßµeÂ'½hÛ7ÍdÎ4ž9Ùpí1˜:š$iº מ Å×ÃäápŸº¸X ,>¾€”_¯ç© iF+‚ëÄËwMaÅ“¿eØ n Ñ¿aèï¼òêÛÍ2‚Ûo¹Þëñ˜Bt8“5ÓÕ‘ 0EÙ3Óé¢@ˆ6´}ûáý½ðþ>ØZìw ö0Õ:ªTEÁÕuê—x2ÙŒ§{—t&ŽéÇêO¾•»÷V^ìËÊÊxi×öµ^!ÄA>Û¶éÑ÷ÔD89OJ¹ê§ uˆ[:•ÕÁ²Ï¡¸Šk ×7æÀ¦Ñ «*¢Ãþ/wK…åuQ:wÊ¡OÞC阦¡)øü~tU`EV³çû B7̬dbRmMØ]³öSN]phàšÆe3¦iÿxîåkŸ @‡< è;~?‚~‹?ƒ^Ý`ÀqÝ ?3 ksÁˆ Œ;ã‚û$ôÍ;‹žÃÎ`ÿ®ìÚ\H¸®]UIúˆ[6áh]×9©` c&L£pÙ ÎÖ/6D\Ç^9jdþäwÞxÖl:ž¯¾ÞIÁ¨óm×u;K)«~Q„N‰¢’2ûbHÚ°u'ôê ÷Ï…Ñ—Àu>˜v$–Éþ¡Q’Q¾ýr5guJezŸ ΘMžˆÌ ¤û‰ú Ö—Tóä;Eüïò-\}ò¼ô{Þ\ú|m[)ë×¾¡t|³qŒšÛºmÇÍRÊ…?€v!„f¼Û§ÁÙá¢Î<>úfÜL€"­ëصqéų9·;…Ã{2«_gz¦xiº¯ýñ§ôaéÂätK­_4ÿ™;l¸è{ü¿¦i%.xÆ>\ï•3/öù}Þ9?aî@;Ð4d„Þ·bñ2xs!<}\?V=ÿ^ý{ÁÚš–åÓ¬ó}ŸdÉó›-3F¡¯íºîËÝ}“5û†Û Çq²_yõm±o_óÁ §ŸCÒ²ú!òÚ¥ø0:*Bˆ«t•+'ŒÄ³u'|üŒ<ñPfôë Še1ø>q¤Ž¥À\¯ÒdµÛIï%­D¸ªª‚P(ÍQUµø‰Eÿj–C)AÎ;ç ièúï;ªŽ€¢@Sy|î¥è/¯€—‚ìNGò <Šv6ü¨Gö:<ïƒäØ–½ô£VYy'Ÿ‚eÙÛžzúìH$ÚŒéòË.ÔK„ís¯&Ô&^Oμõ‰%°ðÒ¯e¾ªÐT0THëXb=*Ié~^´e“;ô$Ó4=™ö<÷ü«ÍxÆŽ9•P(¨7tTÿà Q)8%`@Y%ʤÑpñ¤Ö•ì*qùÐÅ×:Ok´§&ƶÒZª„… ¢\Nùþ:8°Âµ5jjZŠ¢tŽÇc÷>2ÿé§®ž5Ã#„àíwßãñ¿-v+*«MUá2àŽØo€"ß„·î1©œ5sáØòjkâ´ ¤ „€®íp@WJ ËÃ<÷Õ>–ï«¥®>×ãÅâ¦àóP…”ÌÞF(“)Š"œ@ ¨ƒ)Hé—jÃu^qÕMž5k?•‘HTœÐOwÏÎä¯ÏT´°AÛ €b€«nÿjeédlܳ¦A®­+ØPA?|± ÆÚ6ömÒæÒíålŒÔ3høD†é†t8õâuû©Öb%“I«!ã)BHC×e Äq\¿”ÒB¬{gù¿'ÿf‚W,¸¥7©AUT‡î||†¢‡”ro‡Bt÷Àš«À{(‹t¸v2êüàù¿¶­à••0i¼ùÜ2´u¾M¶Ã˜jèÜ¿€ÑCÇòÅòE„7T×=‹a9)dv Ê b†|à3xð™5‰Ò²ðk@n¿STátš"¬¢œÎ)ǧU -E¥{=ö}©•t ¼q.¤Ím tؾ .› ©­ ;.¼±®˜ ™& O¡áôw•K83jÓgÄ€´ùdéÜ{B6Wœ<†´ìTÈ@º¿¡e =À?_ßd•–…WUº¦Ïæ)¥-„˜9Í87Ä ãL"1¯)<ŠÂuBˆMRÊ]í@Bœä> º^U`Â(X¾.<³má÷74€P¼¦µ±ûn FVoÒs³kýk|”ß‹ÿÔ4Þž1¦‚)NãƒBBäýò³³¯ÞkϾ¯”Σ¿¡6n)'ŸL¢°ÓïóÛ£\ñÁÜë@O£¡8ñº ݲ!-§ä¶-ü×`ÊX(ü¦·'¢²¡F0lêíl|í~ìâÄP‡ÒEßìî=]ßk@Ö†¿qV^ikk·VóæÛ’Ò2ɧŸ¢oÞŒâ8Ì>°¸m !h(VÔ øv/\pFCdo6nƒÂu`èpB*ŒHo™oµBÕÑ ‰DŒË²‚íšµl8£L4t}N,1tÐV@ ô­àŸ ž W²ùsÉøñ‡d‡…yóм^ !¼G@iô¯÷3òá³";¼íÞ¶fL‚-ƒ‡†´ÎW,!½SojJw2Àëã@Ì:*IWúzÃù®ã„ŠwnÀÆr(u­&M­…Ãל9`𤧵eGq`ÉŸ ñ°G…ž=¡d?ôÉi]hÕǰåˆÄ`BŒÈj·R‚'%‹úH5™(^ù3Á´]×mùî%W·,¯(PP€ Zæ8ÀgÁŸvÁ¼3!±TƒWqôleOWTÃì¿À•Óàõ÷àÁ“ÚžˆO@2V‹f˜Ä:p '€ÕºÑì¿È©Ø}à¹+ðÝnZ¥Q£ðøýœÞ–EJ±¥ü³ ªJ±¡CzèMÉqá’›!o ¬þf þm¤I€N¢5¥3{²#‘¤½˜ªh‚]Vóz¡ ‰wáíH8@.°íؽ»eãÆA2É©mNvH)£ŽCèøž /7áè‘Ì·>¥•`'!`ÁÃ#>‘ Ô„ËIíÒ—ZËbM¸þ¨2»¨bwYÃ8x¶nDÍJÀ½ Ghðí1Àµ×´¬çä“AQÐVkÍQ¶—”C0E;ýOÀUwÃóoB~nñ÷õ©`¶ãÍo°}4ƒÝ_¬`àˆéÌÚ[CY¢Õo#¨‹&(˜þ7iš^)ÁÖ6íWá’³Áx~Ö‚Wûï©KÓà´Ó° õmÐ €hœå«×?g4\}/¬^‹ß„Ó/o¨ÿÍšŽ\ò.öþ:œ'6!#ÉV´FwÚI¶¼ýß ;“D—þ X[̼­%|[Ãu%®+).«åO@—IIW ˆÔô,IÃÕƒMT fÍ‚ƒ´;ð.ž+Vi{Ú4|7 !ZÕ‡}™1Âk’ø®ùÛ)H¿™Ÿ‹¼ú7ÈÑ'7u* 9ѧ±-Õ¤þΑkÆ#ç"åx¤ÌGÊ!HÙ)³Ò‡”y…×”>O@žÿ‡çäÄ+”™™]% …’_¤¤eÉqçÎÇõÏMjš^ ôÆ !ܧ/•º®×î+ “‡]«= Ò£"¯…,)94­DÙ#©€í×€³µÅ/D„Ši°ª_N»i&fmöìƒE¯´lV$’Ìl,?¨\èÓ˜e9ŒŒü’£ýø²\Èt #™ ð$ *èáï–F“de÷eðÈ HIMÇMF±Q¤›dÏŽÏ­¯6¯ÓtÃxÏJ&.—R–!Æ籠R­X4wlûVrÁìõ¹ æ‚™ Ô…&ÙpÚ)pÆ90l|ò <ü o#¿aB•ϺðÔeq!DŠªr·®q‘¦òC"É×–Ír)å’Ö\ü@”œnòuAW!Ér%i„l0 ¨Ó…¨•ȺxÐ=)H×oÛ–GŠ¥éÆ^+Y_(¥\,¥ÜØDw`âÇ„”r‰BúƒÁ^¢5 €ßn°Ò=ø¤@u°,WG‚â‚bÂýÿ­,¬VjÛIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/option_toolbars.png0000644000175000017500000000534511273045225025340 0ustar julianjulian‰PNG  IHDR@:Ð_ysBIT|dˆ pHYs  k|ÞMtEXtSoftwarewww.inkscape.org›î< bIDAThÝZ{pTÕþ~w_÷îÝìÂ6!©4A1†tx”*ÂL+yHU(XGÐ â˜eÀ˜ÁdZªQ)©ÁŒ †ð°Eb ¢…¦8Z[( UBLh¬0€Ù¤l &wïã×?²`6Ùݼ6Éâ7sgîÝs÷œß÷ßùî9ç^bf\O "+€L"-IÒMf³y$3ÿ@Ó´a’$Å466®`æ’n×w½@D7ˆ¢˜ËÌK“““)))Éár¹§Ó‰ššÃåréIII ³zR¯¹¿Žˆhª,Ëùv»=5--Íš––fu¹\Ã0PQQ¡Lž<™—/_.ý³ÇõGkÑI’v»\® ™™™ÎI“&‘ÉdºVÞÒÒ‚;v|“MÓ§O—JJJ¶.bf_OÚ‰Ê ¢ñ¢(¾{ÇwÄfddX‰( ¼¾¾•••JQQ‘9!!Áüâ‹/¾²~ýúlf6zÜV´eÝ$Šâ‘åË—INNîT~ôèQnllT -Š¢¨ÅÅÅÏ—””¬îm{BŸ¢0ˆÈ%IÒÁÅ‹»:’gfTTT(n·Û·aë×ëm~饗òúBˆ²! ËrÉÌ™3ãSRRr^UU”——·.]ºÔHOO·þùç ¥¥¥O–•••õµÍ¨€ˆívûìY³fY:–)Š‚ &ééébUUÕùÍ›7?²cÇŽ½‘h7j†€(Šy³fͲY­ÖNe6› ­­­åååë"Eˆ"ÌfóÔäääN½‹---N§Sd»Q#€ªª7ÆÇLJ,W…Àn·Ë‘l7jÐu]’$)d¹Ïç3Àf³Ù#ÙnÔ@Da'$ªª2ˆ¢øÝ +hšf€Åbùn ÐÕŒ´©©‰›››Ùl6G̈hbÔÐ222¤G}Tóx<7÷µ.""‹Åò´ ¯†ŽÛn»ÍRVV6E„;{[%ˆ¢øw§Ó¹6>>Þ5‘aásÇÇÃ?l“ey» ÷ô¢L›ÍV••5yذaB}}ý+Q#£;+Ó„„¬Zµ*F–å7L&ÓüîTLD6I’6:tçÊ•+‡Ž3Æâp8À£B"šIDAgÁ¼¼¼Y–_á"J"¢ “"JEñdJJÊ‚µkׯ$&&¢±± W˜ùÌ ïX,–_Ùl¶âœœyäÈ‘=ú¯ÇãAyyy“ÇãÑ/_¾lÓuf³Ùk2™.8§ªêE"úÅ<à˜8q"@mm-pqqñïEÉðÕ W÷3àÇ‘uX\]¹r¥ÇuÅÆÆ"77×yõZ×u455Ù½^ï÷½^ï¼^/Æ·Û  mM–e;vÌçóùòÞ"¢X*˜v«o5pD%|¥1n3sæÎEO3¡;0 'OžÄ’%Kpï½÷×ÖÖf(€½Œ(A ‰€ Š xíðr=Á«1rrr0vìØˆµÝÜÜŒºº:dggcݺuž-[¶Ä_Ý?$¢,8äß”A ‡‚½í ;`—ÇGÇg0n” Û¶–¡µµµÏíªªŠšš躎üü|\¸pÁ8~üøªö›§ýžD´Àó£ ¼5B’£­ç¯ö~Çó½À•@jj*î¿ÿ~À©S§`2™àp8`6›¡ë:4Mƒ¦iPUš¦A×u†]×ÁÌeqqqHOOG\\TUE^^ÞÞí۷ψ¯¿ð›] €Åiðª pÙýd¥à"\½~ü°© X¶l\.îºë.Œ5ª×±hš†Õ«WXVV–ÁÌÍíËúå)ÐÞì²k\€Y B6„ÙSÚ°Z­ÈÍÍíugΜÑöïßÿÙ‰'ŽîÚµ+·#y  ¢±°€ÄXè ÞËçRàïÉn@²|>+ŠB¸TUUõ¯êêêO­V+¹Ýî¡.—Ë3T–e·$IC ÃÐ}>ŸOUUŸÏçk9{öì'üñÛÕÕÕï†{aÑ!à7»7€´Y†0-¦q)ø˜%‚3H™8Es8[*++ó™ùbÄm‡ˆe= à…QÞê„$!Û•þ{~shՀÇodæìHÅ4î¾f@³ãW‡€®™](²íÆ~û2Å,Ýì< Ø `3÷ýy.þ¾Öì¤ð"t̆‹*pÏfàÈiÀf~6Bâ×C Àì$`¡3tJ‡Í8Ñü¼ü¥*€™yg9†E¯ ¢L¿ÙÙ7Ë iÎ.\>ÌøßWÜ÷:اÃÃŒÙÌ|8Ò$áÇ´7»r'„QíÍ.Äs=”/3ïdŽa!Ñ“ÉôVll¬8âÆôX aÙ7f4Zý›–Rà&Ù¯éÛóòOŸýìmÁ—ã'ÑNQ¤¦¦ï¾÷¶½µÞ³_ß<SO›QËߊЉx{QD`õ_€Å[ƒqØ`LbæªÁ&×Ìü¾Ã¤iÚ †aLÉÈÈè4)²Z­cœØ°ç0²oׯ ƒÝŸwo„qEA3~ÊÌŒà#À–C‡™kjj‚Þ™™‰s—4Ô\nëýç¿Ü¨:NŒ‰Ì|t`CŽ,fþB„W Zu]ïtƒ(Џõ‡· ò °p;°¦í+Ý· ÆTf>7ÐGh𶦮®ÎSPPtªj³Çà¹ýàGëÌ ö–åz„Ìü?EQf¼óÎ;— uEùÖÈ ÃÀ¹s猆fhÛ¦ÎãÁþ¬$‚è¸g³ÙÞr»Ý‰‹-’F}ûöaÏž= >Ÿo3ÄXûÌp°Xe·Û ‚ ˆ¢ø€iïû®ÿ˜_¶ü.ÝIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/option_view.png0000644000175000017500000000267411273045225024467 0ustar julianjulian‰PNG  IHDR@8MþrsBIT|dˆtEXtSoftwarewww.inkscape.org›î<NIDAThíšL”uÇ_w'‚dx€w¤rSoŒø# «­š ¶‰•Û5Ë_“43haš&j¶J1“iTRAŽ™“´ØJË™?XÔÌœ¿Æy¦n2drÄxp×\xÀÝqèóÜ×öìžçóù>Ïóþ¾÷Ü÷û}>wá@6 j[Pl]}ÍÂöÍŒÂJ JÜߨ€Ÿ°r%©@A-¡Ã„’P_«» ÖáXŒpѶƒ•›•ØGJ€w Èª€€_ìq°8l´ÇBgPbc‚  û@í°½í›¼ <çSQÀ<à‰^q`ˆ|Jeb2`v‘;fÿ¬Òìû6à° 8 LíyJààŠG û~dßW{]ŸÖeÀE X6i¾áB?yû€© ë! Z†Lú4¹ùk|­Å«äçnâÈ‘£]DEG‘œü˜¯5y•¨è(@ÆA°­­ Óå+&Œç/b<}†ú–Vv}µ‹ˆˆ¹n;`$3 ©é_V/Íâò…K47š ëè@Œo/6Œsüªó ¡ûÊ+ÐUþÀ' öÊ,I‰d¼¹TªÛI†dT—Pá¤ó"£¥lï—RÝJR”R\Ädú‡7ˆv’[­AFîjbc–âV’Ó¯gÿ>Çú÷Ö»mSV\Â+7úÄU(0%%òêâùw¯PfÜpõêu2Ò Üó ·oßvÙ®ªb?³zÅà-ÛË¿@¦|¸4àÖ­FæNO£äF/´Š-W¯3X(|½u‡Ó ”îd^cÏ׳*• óäI^6H.XjúÌÌ›iàµKµ¤Z­Ä·Î'+s%Ç?ÐÝÖbéàxÕÏìr8ß ¬Õj¨,uŒú/} ¸pþ"WΞãE‹¥G|I«ÈòâÏhéurï7ˆÌH5k¶}L´}©éïôù <’”ÈrÈP÷,¨¥ £Gc41™L˜L&×ëq\Ú|§T¢xêIf>?SfÙÒát X°dêÙ³ÈÒÌjnæêjâããéèè@ÝØÈ({¾XÎæçc…¿ârøàÓ­ìÓhøÍ!¶¼¹™¢¼<J XØpgîO&>;ÝïÖúýáÒ•JEÊKöX40±¾žŠòr~Ü¿Ÿ4[W-¥,$„?1ñcåÖ+9nB‘‘jꀢÐ;5óõf3EË–±Hn[´Z—uJ§ß¥p ðyd$õöãà¨ÙL¦ °täHÖɧPfõ;×®]ü»ü ¾§Í®ë·BIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/print-preview.png0000644000175000017500000000274011273045225024732 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<]IDATH‰µ–kh\džŸ9gÏ^$]­µZ¯¤ÝI–šØV“ÆJ •1ND0E(1µƒqìÖ„B¡ IKãbÒ‚MâšÒýS‹¦%ÔlLDbçR™$&BAq-cÝù&E± ­·òîJ»G{æœéËŠWq/PòÂp`˜ùžyç›ïÌ¥_§<÷êBhÀãÀÃ@àÆO7”Rsÿ+@,w „xxø8\ À*`=ÐV__ßæÍ›k\וJ)Çqœ¥o__ßÂÕ«W¿½P)µÔ€€“ÀÆEw_i¯¶··ËãÇ«å:|øðtCCÃ÷ïŽé¹kåðx~áHù¸‹Cš@ë®]»:öíÛ§ïØ±€h4 @yy¹ÛÙÙùáµk×zï¹EBˆ'5ÍóP0 „bAÝîG‹V°XœëoiiÑÿz옧P(0<4Ĺsç8xð Á`-[¶8çÏŸw,ËúƒeY/Ü|™dMûf bŧªUB…-•B,ܼþ̺–GÄ3{öx2™ét3f``€ééizzzعs§~á…≻|¹EJ4‡ëV÷û½f•#„Ž£®ðÎÍìŽÕÖyV7séò†a`‚¡¡PˆîînÖ¬Yƒ”rB)uîÞ §"Pñš•~\÷öêW¥SŸ=¼"²2­Ià¢S #[J\Ç%›Íbš&GËår¯°LKMè—Šrþþp¨ñ %¥6{s¢Y²ß0tw}°2êKÏÎÑõÆÛx<|>N:}“#GŽJ¥0€˜¢x[)UX–dã±P¤vOóúmóÙÔxG(dú››š¼ápXH)YX°°¥”iÛܘ¸L.=Éèè'H)Ù°aƒŒÅbîððpqbb"cYÖZ¥ÔlI¡>W¼qö'°WojZÍûcï1GSºÒÐÑÐ¥Æý·âŒœíÂgT099Igg'Á`p)ΊgÏžýc>Ÿÿ©vW˜†®mªôæu»0Ëÿ¼…á S¯Ö«‰ˆû('†6­3ôÁŸùÍKý$k{ØùT{Ip€ÖÖV¯×ëݰ(++ûÝÖ­[C]¯ŸDÍ_癿Q6-IÚ šÔCÄoV¼EùØ{w—óùg~¶WoÂ?ÞË«‹Åp§¦`Fc[[[@×u^xþ9žýáÓ¬Za3sù=®õŸ$¤Móø÷á•—aš{é~5ÂÖòbkžÑ3tŸêZض¦i…’S¤”²2™ ¹\¥‰D‚x<¾ü_E>Ÿ§©é»|4qÈýÅ©«Úo·5ð³ïÔpôãÞé²ikßN¡P@Ó´| ÀuÝ|&“¡¯¯ÞÞ^’É$ÕÕÕD£Q"‘º®—ÀŠ®P…ø£üª{˜C[ã<»q%¯õÌ©E*ªëæJ–e]sõÓ§O£ë:~¿Ã0Ðu¯×K2™dÿþý躮ʂaš7þˆ_¾ù'^~,ÎîoE918@×è(J©\I¤”/^¼8ŸH$ˆD"˜¦‰a8ŽC>Ÿ'N355ÅÈÈÙlMÓH¥RêÁµ-´tü˜Ÿ¿;‰R°}]„ŽÚ9V–‰d‰àü•+W|™L&[WW§Åb±€išú–e133ƒëºär9|>SSSÒu]£(]®{jܧÿòŽíyTšœ-Ú¶<^RÉ‹µš¸}{­òù|ͺ®7ضRVú|>+«ªª´7nTH)•뺶ëºóJ©75åô¯­5’ÍýÉtî«€ÿ¤Å )qÔ/&ò´RjèßÎûº_Úòÿé_X§8wÐ2gIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/print.png0000644000175000017500000000221511273045225023250 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î< IDATH‰Õ–MhTg…ŸïÞ¹“™ªCFÒ¨iF“1eH¨ãJŠ¡ Zж%Ô ]wéBªPЏtÑe² B .Z\˜f()›¢âDq¢“?;w&¹s¿®LG“Ô¸pѾͅsÎû½ç=÷^!¥ä]–òNÙØÛÚÚÚzóùüh:Ž‚ ˆ|ß}ß|ßWVVŒ'Ož|[.—ÛH)w|€ÔéÓ§§Ã0”¯W­V“ýýýS€þ f‡Ä8|ôèÑâêêª,•JòöíÛr||\NLLÈû÷ïË¡¡¡yà£Mؘ¦ùýîÝ»½«W¯F›Z—R‹EÙÑÑáÅb10š±âM[$„ÐMÓ\>sæLrtt”ÉÉI‚ Š"¢("ŸÏsñâEzzz¸|ùòŸÕjõØÛšüU&“Qûûû©V«ôõõ¡ë:š¦¡i¥R‰\.Çõë×ë¶mÿð:øÉdr8ŸÏÇY\\¤^¯ãy¾ï“ÉdãÈ‘#<{öÌ~Ý‘€bð‰¢(_êº~xnnŽ[·naY¦ibº®S.—yôèããã^£Ñ˜>B¤”op5{ „Pc±Ø7ªª~—Ëåü“'O¾ÇYXX`mm ×uq]ß÷ Ãùùyž>}J†ôööÖ×××£˜A H)onhiiù©»»û³7nÄ=ÃãÂôÜ÷\ i`JƒÔ\Š‘¡–––Èf³œ;wŽt]àÞ½{œ?~Ý÷ý””ÒUšºÿzÏž=ŸNNNƳÙ,#ÅöíÚG+­H!©(fä 'zN†!§Nâøñãœ={vƒ ¯¯D"Ýð@ÑnÆcccñ0 ©Õj\úâÒ¶¹°m›‡Êááa±•‡íííÁ‹/:€ÒK“3û÷ï÷:D­V{Sª™™™AQqðàÁ-7/·y‹\ÇqÄ‘ÿ©¿sçÉd2b›·q£ÑXkh¸®«Ø¶M¡PÀ²,Òé4{÷î%o«V«ÄbÛGÈqÔ›lÛÖËå2W®\@Ó4EA¦i$ Z[[IJ,lÛÞrþžç)¯Ü@J¹jYVýñãÇ©x<þr†xžG£Ñ C*• ³³³´µµ‘Ïç©Õj[ <þÇq´×G„â¯k×®ëêêRÓé´aYªª`Û6•J…••8€¢(Ï[ZZ¸{÷.Åb1( Îòò²ªëúM×u— )hBˆð1ЩiZ·®ëFQÔéûþûaZ‰DÂI¥Ra:Ö‰„955%s¹œ;==­¨ªºèyÞϾïßþRïä£/„HÀ@g,ëÒ4-ã8ÎïÀ/RÊÙm±ÿû¿Šxg¯J‚ntIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/repeat_alternative.png0000644000175000017500000000045611273045225025777 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<«IDATH‰íÔ!Â@„áÈ*$ š‚Í•¸áUÕh‚Bj:˜­¡iE»[Õq»b¾¼¼äÉ69³ÈÚ>$=€°JØý´}ñ±ÞI• â1µímBèÙ¤] üH:Kà,éÜlWCÖ¶ à\rL9tOp¾À^R1iq$½l—C‹›t.9Ey/*Óœ `Ô9Íçzf ?ð‚6r ¯IIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/save-as.png0000644000175000017500000000227011273045225023454 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<5IDATH‰µ–[lTU†¿uæÌ9sæL/S˜mSk¡ DŸhm"Db¢  ¦’;ˆ>؉¼%„ôÁ„…Hˆ1‚%> —xc”k (”–¡-µ0ôvÚ93gûÒ–Ò  +Y/û¬õÿÙÿÞëßG”RÜÏÐî+: µ("  U)•Q#ÀüÅj¿Nž›âJ·Ã»J©ówÔ J$"š®S®G¨ô™Dì©EwZIõ\ÀëoGÒ.IñÑá¶s8à£:æ°êy±J Ð~k$õÑnÒnJ=ª”jE`„d•ÛË«V>}‘y$­ #Œîã7Â[f¿“ÙXKið Ú¦"ÇOƒîƒ÷cSX¿MOíøêÚ—]ÝÉ•£vá&¹@6`û|„ô¦ S˜DaÞ|æ–U¡e ^§¾Õ [Þ,%2©˜uïÅã7nv—yJ©4Ð6#Ïå˜ú›Ce%¢µo„Œm‚v®|!$ÕDZ!RiÕÁÐ{&ðˆiйsƒxꈦŽ×iê¹¥¢j®ëjù~5s~Hýràþ`'°tx¯ÜkD¤Ä28Q»N2×.‘¡k]wÐ"òSPeÒöMðàlvÔíëp'_)Õ?Xw×9‘BËäç•’1_&•‹£ë§,R½A‚ëÔíþ:í8Î ÃÁïJ "“ƒ¿¾LrÖ¿,¾Û!°¢hv”¥%$ šo^òô éËÀ¹Q8cI$"9Á'V-”ÂOjÄÜb×á)tôG¸š°8Óqwuƒ'áþ޾6Õt¢’Ît’K"¤TŠzçš:4j’E$# þl¹|\= \L<3Ê®ZÉ\~•`y±[<ñ'¡iª94 íé²»šÉ>¹'q w<‰^ÔuJ·¿%¦È ¸‚Q´P” ±ÅôþšC[æ_^Rëë²K¼¦¡ jàõB÷Z\W`¯›ÖRÏTkôö ”XÑ¡œ=÷)N{=Õïí •zçE¸Cã“k¹Õ×Êæ!ÒòdÛ¶ýý’e/ivî<VôÈtF!Å3g°²j[ß•æçj½c^oxë”ó'g•R £DĶmûÇŠŠŠ¢E‹Û?ÝIV^9 ^ë +] V”55ŸõïÝè’ã8eÉ.>?»g°ßóàÔt:mÔÞ¡ÇàÄéºþAqqq²¾¾^Åb1ÕÐРZZZÔÏQ³f©ª5+’–e]"7ÏgNfÏ ]ærtÎ6âF„·G¹À0;˜jYÖõX,æ655©¢¢"µuëVeFm÷ƒÁ‹@þ ™•û$ûßâ¨9™}@æ¸ X–uµ²²Ò­««S¦i:@ÙÝ|ÊÌeK¤œ¸?›WÆô±1Œ-ß²¬Ëº®»À‚a„a#ÌÀëûx“<˜0òùû/qO7ý¿qßÿ*þjXP;vÜwIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/save.png0000644000175000017500000000161511273045225023055 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î< IDATH‰Õ–[HaÇÿgfwnj¶­EfK”)¬oA`uKÄ¢h!°‡.¾TP$=Eö`a)] Sа$¶›‘H,¢Œ…îE†‰0ãÎL«§Ûm×vk5zèƒÃÀ|çüÎá¾óñ3ã_.áŸÒ8þ&˜ˆTÛ33P!.ÃB—m£Ž™G¢>Ó•ˆˆü²„¶å¹wø)Í \¸‰PÏ3ú ‡Æó8fæ)›"áHº ³ó$q›ÀÛÖ·Õ‡ç±'[Õ”E|§¯ñÌñê’ÀüPàü…`ìÎùÃR./^¦¨ŠøO©ÉN'ÈLÇ¡ç-7gâ_8<ñevæâË00¢A©V.ŠØéÊÀèËö‰Ê#ö¤5‡×­œÍ ÇŠy¨ÿ,;À¬H\J§Èá €&£þþAY'®òGý€ó~Ë4ÍÀd8D""ò)ºšê/¤ï,@ÍÚ‹· Š6î1-ËÞÍÌW±&H×pÂ_HÚ–¢Xø¬Ÿ•«yxõyV—V™–e ‡Ã-É”H(‘>Š ×z€ã-?ˆ3ã*ÿ8œ…U%{CºaÔØ¶}:À¯s`…,ËF]]ÏŸçæ£»4æç«˜_W16ðÐË+ìñ䊢Ԧ2?“á’$éÕÕÕã}}}ÜÛÛË ïxw)ÏéTŒ}GÎ¥VwÕ_¯ Hôq¯}^Hå-á%àü"Ô~A"yo2Æ µÀ€Z}¾+‘­æçWçùFWå§g‘›Ãٿﳓµ‚׉Fíï}ó=ÿÕÎ}¸k5€÷Ì ¼“Àâ·àÝÍÀ€SUu‘ã8:ñ!.P4ðê8æ'nà@*Í~Ø  F£±`·Û÷Ë—¯ýûÙäüõßob_.Ï’›…( Z(z»··÷j$°¥šª6þeW¥ìbÚ IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/skin-preview.png0000644000175000017500000016320611273045225024547 0ustar julianjulian‰PNG  IHDRÂD´ñ>€bKGDÿÿÿ ½§“ pHYs  šœtIME× o¾a“ IDATxÚìwx”וÿ?o™>£Þ»PQEo n¸ÅÆe¸f½q’uÊn’_²I¼IœâdÇ%qÅccÓ{¯¢#ê½OËï2²Q%ÆÎ|ŸgÐÌûÞ~ï÷œsÏ=W˜ôà3·$$%¯¶š èDAÄç:.¯ŸêÊŠ[esHôj)nÞ`»DAñ/ 0·{VË’Á€pÉ~wu§¶â%jÔÌ¡1ÁÖ "ˆ ‚âóI†2ÐmUý>.l}™…¹ $%%ñÞ–7¦>„Ùl­ þå *>$ÉHI1ˆ ‚øì@×ÑALb]ÓDñÉÂŇtOíYÔÚS\?z±an6ø›©:º‘¬ë—âýø‘p«r°qƒ¸æ»EëÄ,©Ý_µ)f4ÙÜû+Š»èÁ jø4 '¶ÄçîäÁi1¬8PIˆY¢Uµ"Ȇ+*žQéÄ&+è:tªFÉ‚0¨ú™µNT]Ä/Û•· zqˆ ·&™—wA\£ðu¶!»¥À¼Õ:—„94ºkÞh˜ýM8Lu>;’ê"Á®Ré¶!­Í@ÐUÖšý<ó§¹eÂhô­ùáW¿Â·žýz¡ƒ±³§qÎŽÏì€ ®1D'Ì"2<ÎÎ-Ó³yqíQ í4« FACu:ü2VYÅ«ÀŒ ŽÎ×¶b5±ól3áV™ÅL„ì¡IW©oqbÆËóO,âÿ½¼jFA!ÜèÇ­ˆ´«&B%fYÇ« ´i6ÄËH›ó†;HŠ å\U £Ócy~} 6“DˆQÅéñ]!ÂàEÕ¡ÕoÂåÀÎ}³Gàáy©T6v°étŠdí–n­¸°4èZ¢-¢ ãWš3É0‹…”(‘¡V^Ù]ƒÑl š >óÐü¾óÀTô.Ï0‡•Gžß„$ÐMŒV‘'oDzm§˜2" ¿_aÙá–²  €, ¢(àWýع•»êJh©šF¹êÇ`•X°øŽ+™lŽ.3σâS†D£jG«nãz§‡cåüâ¡iüy}>IF§„SÞÐAt˜•ì¤H~µ|·ÏœÈ7^ÚK¨Ý„ÜØIœMà±E9ü¿7ñÌÃÓyö,™9…“çªpXm:‘f…p£ÎÜñ©,ß]Ľ³³QTXs¤‚N/¢€ÏãB×4LVíª^Ÿ‚Û§`·T\?’ã窗ϛ{+DˆµéŒËˆ£°º×Ç¢I™¬ÙwƒFYÂb”1JšHÓŠ›‡çãø¹:Z8ŽG~þ.?yâVî>ØôÞÙSBe§‘v·‡˜3²("I"¢ÔƒøìCv-fíéDIfñ ùìâºPë·óîξ½t6…jù͇HöØžé² È’ˆdu0+wOo&ã2:9KF.eZ EgT$I ¶|×4Mè’ð„nIOêš» øãÌeë‘ܘ¸¸%i•ylQ.?cèz`"]".Ö·tâW5 k=ÈV#“3¢P?ñ‘âB¦ÒÝU4© p;;xâúDbÂl<÷ÁiD[x—løG@À„±Ãb¹PÛŒ®ëñ“•N|¨ˆ+Ù:l;UƒÓígîøa¬Ü_J]K'å (;ªÛ…l0n ”uóÉZn›‘Ý]æíõ˜d‘Ì+µåR×â`4HˆÐmJ "ˆkîæ*²cÛN—¯“-ä#ñWºæ¸ˆ(Šˆ‚€$Š™Juu/³(*¯Ãa53,ÚL©KEºd›CdQED‘‘7ÞÅGF Ågâ KÀÙщS7c2*Á^ âÚ'Â.¾1ŒT6u0%3’áÉQÔ7w0L«÷1nX a–jÖ<Ç’I‰Ô·:épyñ##Š‹s㉋p|4ÙdMm.&¦…w¾é#søpïLF¹Û‡F×ÁÐ5ù¬V;kW" [ì]¦R“AÆl’ñøTÉ‘âšÚÝT7uâö©ŒK‹ ª¡Y LhA”Ø{ê &eb¤Õé';1Œ‚ªJ‹åhi í^UÓY<>0»¥»Ì ÇÆ3<%’å»KH¶K„˜È’@»Ë‡,ËùD×8L‚ÊÍ“‡PÕÐÂ{ÇÛzŒ]Y±šÜ<20ÃCmÈRc÷3º®ïÐQT•߯+$-ÒȤaTžlGM=4KaÑ·ÿ®'˜€EÖ¹%Ņݤ#¡ è°®<„zWpâqíCó¹1jn¼†PDÕY8‰øt ŸhAÖ¼¨‚]”1©NDACAÆ/Y1*Nd!àpÓ©›± ^ÜX1âÅ€B§àÀ¨¹1 ÁЭ‘QQD#¢±'O&Áø/&t£ |.ÌxPðKvDÕ‹ BWyÉŒIs! ã툺‚Iwã¹$OM0âP›Ðý¾µtßøÓþúÍÛøÑk»Q$3^9AócÒ\¼ ¢Ñt‚ â3ÅïESüŸÑ‚x‰eRUTŸ§Ç;’ÁÔ­í逿u‚®"šhª|.³Qü(ŠÂ£È’$"Ë/£ä:ý‡œ8lft+Šr7²ìöJ×>d;`' ëQ LŽ‹&v>šV4@ìþÍÂE¿SK×D2w½£v}ÖîgŒû·WØ#ºßé6ÈBѽ$o3Ú%å ”Ñ†Þý;h„ôÈSUBd)áa¼¾­KDÛŽ•Ò ‹-¢ë=:öKêDŸ‘é,[ûù]S?£ZþÈ”ŠA³åH’ˆ¬éFYÚ‰á–ùhºŽÞ!:>ÉŽ1¸§D× 2mªãM=üȉíe>B#b‚gƒb ÐAÓd>L²ˆ ´ðqÆÔº>Aĵ 4ü âõ÷ôƒ¢_ÔÁ«hxež»5´ë‡`Ðí ‚"ˆ >ÿ¸è]þÐÿ±fì:¨iA" "ˆ ‚âóKÏÓÊ=UžM >ŸƒAîfÒ+×IÁçóa4ƒ½ñO†âWgn‚û¾‚×ëÅd2]³é} ª*º®#ËÁðŒA\STØý?)cæ?º{FZ€Ÿ4µÇcíM¶ïØEsS3--­ìܵ‡¤Ä¬Ë€²)8]È«¯¿Å¡C‡q»Ü¤§¥àñzyùﯡ©:V‹™³EÅÄÅö}ËÅ¶í»ºß¿R $ MÓÙ±s6n!:2’°°Ð!múúúê9vìéi©— ³ùŠÒ{åÕ7X·~y‡¢k:)ɉ}>¿uÛN<1ÑQ}>רÔÌÖm;ž•Ig§“ ›¶0<;óŸ:L‹ŠKص{/#²³8zô86› ó%“ÇãåPÞ’“.ƒé:¯½þ¹cÇàóûyïý•3¢×çÿ‡¿0}êä+®ÃÎÝ{yïý9}ºaéi¼øÒß®*½ËÁåróþ«Ù³w‘á„lÌ^÷µuõ”—WÅÁCGHJŒ’ü÷í?DtT²,]vŽ<™ÏٳŤ§¥×Þ ®!0à›ýî¾²K‰PGS{áö»xúk_!++ƒ‚3gp:dffP\\Š÷V¡ë˜ÐûdÊ;r”iS'sËM‹HOKÅíöðêË8sæ,~Ÿ«Õ™³,[¾‚œœáD„‡÷šÖª×0mêd4Mgëö¬]¿Q)<[DB|<çË.P_ßÈ®]{صgÉI‰;q’¨ÈH ™õ7ó×—ÿFKkÇçöšÏ©ü.”WpïîÄãõ"‰ý- NŸ!;+“5ë6ràà!JKËØ{à >¿ŸææÖ®ßÈÁCGHKM^s9GŸ`DvçJJYþÎJÚÛ; £ø\ þëKFl6+V‹…’ó¥¬Xù>~ŸŸÄÄþòâ+å+Vr*ÿ4™™Ãhhlâíå+q¹\ø‹ÅBÁé3(ŠJDÄåÛ¼¶¶Ž¿¾ü7¦O›ÊÉSù¬]·æÍáÃ5ëÙ¹k))Ix<^Þy÷=:LVV&eex»«ž£ÊÊj¢£"Ù´eN6mÙFcc3.§‹wÞ}Ÿßß'‰<•Ïî={ÉÈƉ“ù$$ÄST|Ž•ï}€ŸãÅWþNvV&ðÖòw)++'cX:R/¯¦iüàG?aæŒéTW×ðÒß^åæÅ7²nÃf6oÙNhhÕÕµlØ´…††FêêIJJdÇŽÝ$%%òæ²w8yª€ì¬LV¯ÝÀ¡ÃG u„ô*0­Y»âQL&#»÷ìÃér2a|.7maãæ­Ø¬VNž* ))‘“§ ðûýlܼ•={÷“™1Œ;÷wä(ªªÛ‹°¸{Ï>L-^ˆÓåÂl6³lù 9FJJ2?|æ§tvº(9ž÷V­fô¨‘TUWãv»Ù¸y»vï%** ³ÉÄko,ãô™Bšðùü¼ýÎJÚÚÛ–žÖk?mÚ²áÙY˜LFV}¸†©S&±oÿA>\³«Õ‚ªj¸=öí?ÈCy446’–šzõ–¥ ‚¸"”D@øêÆ¥xçÝ÷8Sx–¦¦f ‹°X-dedðÇ¿¼È­7-æ+™ÃÜ^3:Wrž5k7pòT>n—›SùŒ=’˜˜h**«¨©©å†ys°Ûl̘>µÏB8˜Ç´©“Q5•ššZ²33X½v=YÔÔÖqî\ H²ÄŒ©SX¿q3--­dee`6™X³vÉII|åßïGº=ÈÄ ¹DEFâp°bå*¦MŒÍj¥àL!§Osçí·òÁêuÜ¿ôÖoØ„ÑhÀd22}Ú6mÙJyE£FŽ !>އò(.)!--•ØØh\7N— “ÑÈÿí~>ŠÃagõšu<öðygÅ{L:™wW®âO?Å»+ß纙Óû,óñ“'‘Í»ïÀw¾ý4Õ55ÄÅÅÑÖÖF}C#å±xÑB¢£"©«¯gíº DGG1eòÄ^£––VZ[[©¨¬¤¹¹ƒÑ€Á`àܹ²³3Ù·ïññqDD„c œ8y’’Ò2ÒR“‰ÁívS[WOzZ*«×¬G’%BCC˜7ïzþï·dÑÂù¼³â=Ο×k½ÊÊ.––JþéÓèºNzZ*+V¾Ï“_~Œ×ÞXÆ]w.Áírsã‚xíÍ·IOK¥²² £ÑØ«…A×uÊ.Tp¡¼œŠÊ*ÂÃÂ?n N§“¤¤D6mÙ†ÙlÂj5³`þ<ÞZ¶‚Ò² Üuçm¬]·‡#-¦ªªšSùùÜ}çí$%&ô. >ÂÞý(>WÂüy×STTBnîÚÚÚIIIfãæ­„‡‡¡i*'Nž¢±©™ŽŽRR’9”w„ åå,¸aó³zÍÃb6³gï~òóO3<;‹»÷"I"¡¡!œ+)!4$„âL&±±1LœËê5ë1™L˜M&-œÏ{|H]}£FæÃá£Ç¨­­íîÏØ˜è^ó?vü;wûPÞ.¸—ÿö7Ì›Ëê5ëÉÎÊÄãñpðÐa¾øàýä>B||,»=¸ñ©A%DØ-6ë]‹Ä¥Ÿ”ä$¾þÔ“Ü´haà ]G×5Ü.7ååŒÏû‰w>þù·ûïåëO=Éœëgáõz±ÛlØí¶€ïj ×î=„¾>øWñûÙ²u;çJÎSU]Ø1£8zôŠ¢†ÅbÆjµ ( ²,ÑÞÞN}}z Ð#Š¢ô™O\l4çJJðûý´µµáõzq8ìØí6|>f“‰ø¸8¢"#ˆ‹ ×Òuv;V«¿Ï¨§ÝŽÃnÇëõ²ð†¹èºÎÚuõîÊKÓÔî6%Ù a0Ð5””$Ì&³¹ÿ¶Ñû»©ÉIˆ¢H~ÁiNœÚÚÛéèè`dΊ‹ÏqäØqÊ+*hnn ÔX³n¢ àt:iooÇívƒ®“–š :¸ÝnÊ+*Ÿ;¦ïº¡NtT$EÅç@ב%Y1dÐ?;n·›úú"#"ˆŽŠì3]›Õ‚Íf%-%ƒ,ÑÚÖÆ®Ý{9_ZJmmÝGe%ph×d \^ív{hnnA–$ÒÒR°Z,ÄÆD÷[‡¯þÇ|ë鯑1l ÓÙÑÉŽ]»9¾”šÚ:¦NžÈ¶»°Ù¬˜ŒZÛÚp¹\䌎(¤¦¤ô™‡Ãaç¡ïcÁüy¬Y»ÇMKK+ªª’•™Bàðý¥íu±ïÓSSˆˆGñûñz=ØlÖîù¹`~@È]»nC¿uü÷'åëO=É”IÐ4§ÓImm-ãÆŒä…Þ-0ÆÍùà'øù‡~.!EùãÒò¥ˆëþ.>>ŽÐÐdYæž»ïàÄÉSÄÆÆôyä"<,”ï­Âf³2vÌh.¸×ÞX†Éh$>>ŸÏGˆ#„² 8WRÒµP\Õ55<ÿû?2uò$b¢#©­­cXZ*v›ˆˆpR’“=:‡wV¼Ï‰§¸õ–ÅȲÌ;ï¾OXh( ñqÄÆÄðÒ+¯òÄc÷šÏ„ñ¹¬|ÿþò×—™=k&7/^È›ËÞÁ`0ðÀ}÷àõzÑu½»mâããÐÑÙ³o?GŸà®;nÃa·óæ²wк² åœ=[Dfæ0¬ ¡¡!$ÄÇñÁêuDGGa2™˜8>—þú ™Ã$‰„¸¸ùô…˜è($Iê~6%9‰={÷c4‰Œˆ`äȼñæÛäŒNXX÷-½›Óg )<[LΈá—MÓd2ÅKníÖîÇçŽåÂ… ÊË+HJL ,,„‚Ógp8ÄÅÅRW_¨gÆ0رko¾ý!¡ÂÃÃ0›LèºÎÝwÝαc'ˆˆï³n¡!!X­f_7“]»÷a0ÈŒ7š?ýå%ÆŒ‰Áh ­­ü‚ÓÜ~Ûͬ۰“Ñ&zMW'!!ž»îX@[{;6«³ÙDKK ©)É„……v Ó¦Nfò¤ ¬]¿‘[o^ÄŠ•«¨­«%wܘõM|l, ô˜Gf³ »ÍFSS3i)ÉDDD 9óIHŒ§¶®žŠŠJ†¥§ (ÖÖ6֮߈Ëåbþ sIJL`ùŠ÷¨ªªfdÎFåŒàﯽŭ·,fͺŒÊA||a¡¡˜-æîq6Þ^{ómDAÀl6S_ß@aWöU†Ø˜h$QìNÇfµqã‚ù”œ?ϰaéX­4M££½ƒ×ÞXFDD81ÑÑÁãZA\3|ûuýíoÍA×u|žÏÞeƒg 9p0¥÷܉ÍjûTʰaÓÒÓRû4_D¯¦Å'9qò÷Ýs÷§îQºnÃ&jjë;f“'NÒ´û‡?óõ§ž vx׌f ‚ °ô¹ƒ;>q-Âj1sÓ¢X-–O­üS§LÂd2~&Û/ˆO6«•›߈ÑhøÔÇÐÈœád K#+3cÈËrÏÝwçH×$äHPÇåìøÌU &*àõøi–Ý( 誗ÓQA ‰ñÑŸú¾ˆèÈ0Ü®Î!O;ÄnùL®1A|^5Bk·³`7 ‚€#4"Ø:ADA|îq©Ç|"4ƒµDAñ¯…`Ì£ >Ux}~LFÃ¥÷Ññ€+“¥K.þ "ˆ ‚DˆÑl¥¹¡»#4ØRŸaMZë°9B®©ré:x<¾!#BUU9~ô uhÚàœ2$Q"<"Š “§"Iÿ8ùPDÉ@G[VÛ?úÂk£ÉBscpÄ¡$É´4Ö'ѧ„‹Ú(Šˆâ•É–d͵×^9êèzÏèñ-ÍM¨~?¹¹ã„Á¶—N}] uuÄ%$~¬4@mQDü~/®Îö¡ªªˆ¢8èd‚š¦ÒÑÖœÃAq¥D8Ÿ+aÿþƒŒÆOLÞëfNëŽÐq9h𯉓'8sú8ÃGŒ!7wüU-ú—¦]^^Αû>b£Gíwqõx=´¶·" à°;%™ú†òì mØÆŸ8èŨ¥¥•3g‹E¿ÏOll4ÙY™ý–åÈÑ@Ä“ɈâWP5¸¸xDQÄår1!wì¿Ønº®4—+è‡@Äœ€6v%‹÷åÊs®¤„´ÔT</'Næ#Ib÷áñžÏªhº†$IŸÈWQAÀçó¾,c0pyÜ(ŠBˆÝ (ê'/µ]»n=ÍÍ-|é‹ö¨§×ëãLa!ãsÇ iûû|>Ú;:ÈÏ/ ïð***øÞwþ›¨¨H>ذ–Éã&ô9¯‚ü‚Ó„…†r¢ã-†¶ì‘Y˜0EQ0M½Ž³¦æfªªªÁ§ÔÓèh@IºÈXÃ(b,Ñ ;ƒ!¸âñù"B]×Ù³w?ý-,XÈ-·ÜÒã÷£GRr¾´Ï {øp7ÿœ›çÄ¡k:›·¬§ðì’““‰ŽŽ!3#㊮nQ…ï¼Nmþ/‘qræ`1ÿõ1ѽÇKÌ;|˜›—£%µ¢[|`÷áoÑèØr’1Qnª ’±X_"gĈ—£ªªšâó˜zŒšºFÉȈœvnß:äWXišF]]§›m6QQQ"D]×iim¥©¥¿ ‹ÁL\l,æ+<$ît:9yª€ºú::::9[\JtTÙYé;~bPi­Ý°…ñãÆwäEÅ%ÜvóÄ$Fó¿ëÃ'ÞÃĬÞɬ¹¥…–––ßÊ;‚Ñhà½÷? wÜØ! ]x¶ˆ•ï½GKK#,3--m„…Ú°X,¬Øø>ï·¬¥u{+éá«ÊëLáYfNŸF~~!ÞH…¨È(***xè‹ÑPÒ@XHN—«Osss3••U8âC8TxŒëç]ϺÕëXúÀRâbⰕȘMf,f3ªª‰0ˆÏ¾ÿÁjvï=ÈÃ?‚Çã!%%pCBgg'g ðz=Èý,Çböõsb¦ * ³©TÔ8iko#¿ €ªªjn˜7wÐ$¸|Ù+ ž#>ÓÇW~c⿞̡¹¹¥O"œ2y2cF¦½£“NgýÛo1Ä­ÂøŸ¯~Oæë ²ijjp9¼>ßþîxþùߢ( š¦ñÁ‡rëM ûŒäp2ÿ4³®»ŽÊêzŽ;α“,]º”£Gc±XØ´y3sfÏ„^‡Õ<^/²$QYY…É(#IR ¼z &¦Çã!))©_2¬oh ¾¥Y–ET)«('%!I’0 ƒÒ2Ë+*ijnÆçóãó+H²‡Ã†Ñ`@UUªªkú¼ýäRø}>"#¹yÑ|DQ $:„ïlû_:â;1õã-m2±ÚzF-:qâ$F“‘cÇOpð`Ó¦M¹ê¾8u*Ÿä¤XTÕÏÂó8WRJ}}ññq¬Ù¸žÕþ ¤Š),š³àêg¾®ã÷ûaŠNuj¥ hi:¿©ù+r½L¦;·ÛÁ¡!}›mµp u©Â:ï¼wYÆÄ*‘;n!ÓhÆbÑ ’`ŸC"ܶc7‹-Æét2{öìn ~ᄑܲêÆ×Œç«KžèÖ..»8ùSmžPïûggO©{Í{[ii¼À’;4©ª*«Þ_F’ú_çÇ/g“0j.Ë7´ð`fF¿ï[,L&ömçúø Ü1[àçù¡,ø©âeVî7vÀ$øþª™7IÔ裡¨Q€1£Gõû~‡ÓCu};N§“Í;2mút.T6ÐÑébï޽䎌<(.*\eµàryˆŠŽFü~?·›Ö–VÚ;: í³Ý«jjˆŠŒ"44ŸÏ‡ ´´¶ DÊk*ñ¸½dËÀjµH»¬ohàĉ“,_ñ™™ÃèliÅƹ’2êëë)9_Fttô€‰°‡&ÓZÏÿnýâh#Sí0I}k×F£³ÙDss ‡EQ9}¦õ7¡ë:N—kHúBU5"¢’É=™èèh†çLÀBYY÷üâ^nyúf²Ž¦“œœtõ<¸=檳HZÝÆþ!ˆ¢‘°°0lV+ŒPQÑHZjO=Ù»éWüÄ*ÑÛÌ¥Øì¡Œ=¦Ï{%{µ¨~âVr{Œ@EÈ]d™30«¦~‰pëêµlÛ¾“¹sf3sÆtÖ®ßÀ”É“ cîœÙC2%YbÒ¤ÉäŒ €ÏçcïÞ½¼³ñfüç ”u~îxì–!ÉK ‰öZÍ*uÕ{‘ø˜™tº¶!бÔÖVÞw™E‰PÐowÊ IDATkIŽDZ7¡ªEÄE_‡(ÊŒ>†]uy44žC'.¸Úñù#ÂËÁ,›±µÛ:¤ £jè&µË¡&PYÛÊø,?Q m €€ˆ€ÉRƒÑØÿ~Øöí[PËŸá 7º,騡·ñÊj/qÉ™åÒªÊjÆOISä%¤)|¿hWLý¤ÐOœSÙ´e.¯ˆuø3üeÃzÂb@5¤sÓ 윱cçn[:7ág<ÿỤe™p„ŒcxY(ΉP÷Dz`üMý˜›öíÛGCCQQQ ÂÃÃihhè–ä¥ï9MUYþöÛhšFLL §ŠO ggU8OE;i>þ.Íõv$ùê»O–eDI"%.—Ǹ|ØlÆl6£( ~ŸŸ¨è¨>Ó ů¨x»L¢V«Qioo'1>¿ßOKKë€ûÂëõrpÙ› ûð×Äf;9>òrnÿ¯¿µ’³E]‚ËÀÌ¿òê[¼ô·7±Ù,<°t1Óħٵ½»nÿÂÀ-fâÇ?ü>×ϾŽÊª*Þ\¶œŽö†Ïföu3‡Æ¢b6“•‘Κ5«IO†âw£´ëÜšµ˜‘£§pøp§Ïrë-‹¯Z34w¤§©*ØëjéÐT:;Û©l…PðF©”vtp®±±ÏtrÃÃát’¦c0 ù Í+„Yª¼~:=ž~çqA|.ˆ'cF¡³½“êŠó}?,Ìr‘‰Ó@/!BŠò:bbû{eeDAàÜù*:Ú™”˜É­7ß4¨Åâ¢WcQq-M)„$&pï=wPßXÏo?8Í<ë’>µA€È¨H–-_Iii)p1bV«¿ßOee%‡ç1uÒø~J£±uëVÚÚÚ·ÛÍüùóBb9>’aU[I÷Ôc®þ¼eBB|·Æl1™ÐÔ€ëq{ðxg)“&â°Ûét:Y ÄÍà˜.áóû)=}šNµŽN'QaaÁ7ˆÏ¶··òË_ü¼wó^c#×ÏšÞgáìÞS÷ÿw:[è #tÝj wÝy÷ëÀ-ê_ÿÊãX®àXÁ¬ëfpòT>_ùÞwº½2⸻ökŒÙ¿Çè¼9³qØmTVÕPQQI}Cš¦QU]ÃÛËÞ$;+ƒÛo]LzZ߇¡Ÿ|â1æÌžEuM U446â÷yhjjæ|bRÊBÆÍJ&&&æêÄK#°Ëv›Ÿß®©ØíÖ‘àÅt¬3~EAUT FÃGל æœ]xDI#s¨ ýÓgÌèŽÀ2çúY¬Xþ!!!ý:O]ÌsÖÌéž-fîœë@(+¯ ¡±‰æ–V"¶0‡……1é’KjãbcX|ãRSRHMIÒ i4™:y"ÏüøGD„‡òЃ’šš‚Í6´{l¢$¡Š¢®#ê:£û°tâÖß@hB‘Óç`‘„>ÚWDE]ǯë(ººŽ=4”&“ ]ŒB[Z‚1\ƒ¸†Ñ}Cýeµ;[Eù‡INÏþÄo.— µŸxŽ–~<,}>íííôp¨éò—‘d³É4`sJ ì–~UQi†"K¡ª*^¯ŸÏ‡ÕjÓO_é躆Õjôáí¾úñÓ„®C{‡“ÐÛeûb°Z_WCiÉY222»ßóz½œ/+')1MÓ9Up¿ÏGzZ i©)=Þ¯«­!$<š¤äþ£¶”œ/%<,ŒˆˆðÁ(¡¨ ÍõÕDÅ&öÚßçªÉO$ÙHEéYâ“Òzüæv{º, —¶±ËïÇwÉßFA ´—9¨( >¿Y’»œ®}¦jªÖ=­E ÔhD’a× >qCýÇQ[U†Ïç¹ìo96é7*jhÌJ‚ \ut¡HãRH’„Õjé×Ùg é\)êkÊñx\Ÿ©Áy%ý`±ÚP­ÛãŽ<9󺟹núå¾kšF§ÓEBÊÀâ±f K¿¢z)ŠŸšŠRL}x½u¯š¦QSVtù¶²\>ÿÐAD‘eù²‚®îñYBŸDè Å´ëÖa³‡1|Ì5Hv`2 ]ć#„œÑã¸Pzþ²1Cû6†eåþ­³(ŠÄ%¥ ™Õ¡?a":.韒WA|n‰På{çý3¡i*g OÓX_7èw­V9£Ç ‰FûYÁ`BEQñøüØ­ÿ™Þ<Ä1S#""‰ˆˆ¼¦ûãŸrç¡  _¢_+hooÇŽˆúY±M ëÚZŠ‚øŒ¡ÍFQþaS3®©BŸ?WŒÇÕIzz:`Q‡Ïçãäñ<¦Í¸>Øû—…þ/ßF“…¦ú fëgó ¸=$‚3'ö“œ–ÒW[H8gO")5óc¸ˆÕÚ¯<"öýÉçóHÙè+N¯ªª(8S,ŠÃå—|]×ñùýÐߥւ€Ñ`è3l¦¦õ/äȲܫ6Tm;dD¨iê€*5TPTq×ÿÔ×ÕššrEç’, åå"LQ¯èö‹K;Ôçóa2™®X¢Ô4––,V+Ö«²}1ð÷•:ì\®\š¦]Uû&Žÿªo%ðz}øü>ì6ÛIîŠâP¹¼^/š¦÷ºçÖ_Ÿø|>, Šªâóz{hWsîNñûúwº‚nFt]§µµòŠ t]'33û ö(;;;?zp°Žgªªv;ß)~?~EÁh0ô8++t- ½õ±®ë(ŠÒC”S¿ß$ɺMI¬)kª‚~§ÀÃGŽ!I"Âå"g É”n›aééÄÇ2Ä\uM-¥¥¥/w½W…4pµ™ª1yòÄËŽ¿£ÇN`4ÈI×ttMCõ+H²„pñJ2œNãÆŽ!$ä“÷`ž-*¦­­=ðŽ è—/‹ßï'44”ó/£íwpâä©">齉Ú:>ŸŸ ãÇaºÌÍ4GŽC”.¹Â­—²¸Ý½·íá?û÷$99éÞ|—ð}¡ìBñq1—mäj=o¼õ6{öîçñG¿ÄôiS¯Ls=_ʳ¿xŽœ#xê+_¾¢…­®®ž›n½ƒqcÇòÃÿù^¿G/zÃÎÝ{Yöö;̽~6÷Þs×UXMM-EEÅÌ{åšµ®ë,_±’ï_zUe©­­eæ-Ü¿ôû?×:q¾§ËÕãxÅ@ñÁêµ¼»rúýo8p0?üé…nR7v ?ûÉþa¦MÇ˪>ä¾¥÷°cç.¾ÿÃÿEUUœNââcYöÆß‰ŠìßÄœ—w„ÿäYþë[O3{ÖÌn!iý†MÄÆÆ ¸]</¬|«>XÍc|‰ëgÏê±øEFFöê}ªë:Í--=¦÷®={yãÍe\7s=x@˳Y±ÛíW1nB̔ɗ_ÔÎfðûð{œ¬‰<]rÙź¬¬Œ™3¦÷¦x® ø‹Ñ #Ø·ÿàeŸkni%66†´äÊŸ¢² öÆF¼N f3ލHb†¥“5c >ÕOQñ9r/sy@ss33¦Oã@CFQflDr/—[ïÛà²ß—œ/eâ„ñ8lª·Œ™‚Ž® —7--­ÄÅÅ^V8Î0aIÊÆ×T)~‚ ^vÕÞ·ÿÀçÛÚÛˆñ\½顼£Ü0wVDØ?:::¹iѼùÖr¦N™|En‡ŽÎNÊ.\`ë¶Ü|Ó¢+*Khh(‚(°cç.ÒÓþíŠÒhoo§®®žµë60qB.#F ¿:-Ì磵­íªûª¾¾áªˆÔét"I»¶¶¶@o˵ﳨë:âüùóTTV1aB.ÿóÿ¾Àæ­Ûýêä¢ë­mí8~û›_2>w--­Ì_t ï½ÿ!O<Ö÷‡ùùlݶƒøø8\]ñhu]gÝúä>Âwÿû[7Aڬݚ„(ˆ465c4šˆøYYQ‰ýØÙZ“ÑDKK+º®*­þÍrkO¿—ÖüÝ8Rr8óêMEý±mä<òSz·,\æµóKÎú (Î"ì™Ïõš†@À)ªüø)ö¼ùö'”„–šÊOåãnk'çÆ¾ÂM¾¯éläõüÌMÈÝY³‰³„]¶”}µ‰®yh<ñ0Qc_@ó× Z' ‹áŸ|Xè½m«v.G4˜qÖ”3i#¦âswbÏÈPY>ÓDx-A–en¹y©©ÉÔÔÔè÷åÇ㡲²êŠËbµZ q8¨®®½Š‰+Ngg'Ê+®š¯tttò…¥ÐÞÞ¢ª¼þæ2rsÇòìO~ü({MM̺n&§Ï2vÌèîE|ÙòÜyÇ’šƒÆ¥Z›ÝnÇd2aêljéüùR^{ã-¾öÕÿàg?ŸÏ‡¦ilÜ´…ýñýïþ× , í´w V-­­¨ŠBSs¥ee—uˆ‹‹íÕš¡ª*5µµÝû\~E¡©© ¿ßO{{;•••ÝÄß_”¨Á@íhæüŠ_Qwx#–¨DZKŽSdóàç(^¼«h-þ)¦Q¸›a‹]<0¡»££OK™»½}Àœ¡h*›Kq¬®ˆ/Œ˜Ëœ„±X¤Ám_øÝ4œxIv È!„ ÿ¢iø€=tM¥lÃËmõÌAÂ2ÆÑYsžœ‡~Lä¤AÚû-ƒDØÆçŽ£££óŠÉgñ¢…̘>•­Ûv\qÌ3míí—5# F©ªªÆf³õkZþì@gâÄ $'%RUUMfFMÍ=/Oît:),<‹ªjجF9$ãñx¨­­ÃsɾÞ`ÐÐØ„×ëeá‚Ø´y+Kï¹»;ݳEŒ3ª»ß Nãt¹‘$‘#†jÿn0P…gñ+v;Kní;°÷±ã'Ðeo¯àÌ™BE¡¥µ•3g ùŸïwÐÑBB½«ð°°ÀÞ /ÿí5¾ùô×@x6I’HJLì’žûÍó$$$`0 !))iÈÛÌ]q†Â¿ÿ€æÂ€éÒÛveAk¥ó¯é¨\†®yq5îùÔgW£«•¿[žª|îqÃá)î*.ºð4žx˜ð¬ïcˆX„®ÎÒ¡úÜ4 ˜cO½ðMÒ.rÛWÍC· rÅDX^QIScSŸƒ2;; ³ÙÔçâìõ~´©ï÷ùñú|x<=zótJ[ü=Ç‹Ù,`±Xðx¼ r¿{6^¯·ÛñÊëõuÝÉg`â„ñx<^DQè×a¥ìB9O Acc#×MŸÆ¬Y3Ù¹k…g‹0™L¤$'õY–·­â÷w‡»X·Á¶m@êTÎçõ.、¯çû6G«ªŠß¯t—ñbY.…ÑØ÷MöŠ¢ (*>ŸŸ¹sf3vÌ ˜1}:ë7lÂãñv§¡k¿ÿã_ؼe?yæ5jäU“Óg ùÍÿýŽÃGŽ’Àã=ÜcÏÉn·‘˜Ð'áž%-5•aéiÔÔÖât:±ÙläçŸ&%%»í£ôåáû?|†óçñ‡ßþzHÇ}ggg·“ګײióVÞzýo„…õ­1ÝuçíÜuçíÍ]¿B~Ái~øýï’_p:sx—PwŠÛÓéDס³Ó‰¦ªhšÆ˜Ñ£èììÄ×5–£¢"ûô6lhhìÖGIkk+Š¢àr¹hhhDÀb±^Ñ^Ÿ†ªÏqôW_ÂÓT}UéˆtÐZüß8k×s­ymëºÎ‰ºbJZ*Yš3Ÿ›Ó¦\™å® éô7ˆÈqcŒ¼óʵo¯‹ó«ÿ„·­‘ì/>óéa{{;µu½Ÿã3 dd¤½/Œ.—‹^|¥ûï³g‹ˆŒŒèmf̘Q,¸a^Ÿeimmcß¼î¿OœA×õŽÙYdf¤÷A>XõÁšî¿ÌÃëõ Ë©àóo˜ËØ1£û,Ë«¯½I§Ó ]Ú;Ú)*>×ý{LLt¿Î!çÏ—ÒÒÚÚU·Vªªk(¯¨$**’‚Ógq8Hˆë“].7/¼øòG ïÙ"bcbpº\lØ´™¢âsŒ=Šóç ¸ÏW¬|Ÿººú€¹¢¥…ÚšZŽ;NlL4¸bêË?Úg§Ï²y˶îIvðPÏÿîx½^ ªªrÿ}÷ö¹åè±ãìÙ»ŸÏKUu yyG¨««çø‰Sœ=[DiYKïý ñq8žûåÏØ´y+÷~᮫Ö5MãèÑãlÞ² —ÛM[{=ˆ>44„„øø>ó:”w˜èèHÚ;:hmm£®®žaÃÒÙwà 'äv (‚ ðпÝÉlbá‚p8CºÐ½»r•UUØl6>øp ?ö0ééiƒJcÜØ1lØ´™ýà{Ì;Ì˯¼Jbb¿úùOœ†Á`Ànw Û>DQDQvîÚÍõ³®ëe×—€$Šb÷smmíìÚ½‡ì¬,$IÂd2â@×1u‡ƈx¯»“²õ/¡ök`v ÖØ;ñ¶@qWq­Á(ÉLOÍʬAi„=U^KÄL !S/ë<3XcÓˆ›~‚l²:^1Ž5’[¶îÀf³qÓ¢ƒž¤6›§¿þ••”—W¼Ì&ŒgøðÁ}2›Ídfëþ»ä|éé©=¤Úþ,KOç?¿öΞ¥µ5°Wñÿþø ==Ÿxüššš8~â$ºXo\8PiÌ›{=g ϲuëvì;'Œô}w6›•§¿þå•”––ÃÄ ãILH ²ªŠœ+Ø#|à¾{imkãøñ“?q’·—¯àÅþ8`éÌèQŒÌÁ©S¸=EAEjjj‰‹Ãåtõë;eò$FÌáT~íí»U•èè(’““øÂ]wôx>:*Šî»wh&Œ,sÿ}÷ ë:;vîbüøqH].꺮Q__OvVfŸ ¶Çãáô™BšššÙºm'ee8Wržôô4víÞÃ3?üþ'òªò»ÝnòEÓTü~?Kï¹ ¿?Ð[·m'%ypæÃ}û²ióV~ð½ïp¶¨˜CyG¸cÉm:|xPéøý~œ]7ž®#)&³)`2 ­½@ô¾4Âöövô.䞻襤¤´;VoG—WªÅb¹j¯iÑl#í®obOÉÙ7~Œ·­1È`Qtd a756‰¶âãnÞ ™ÐU/Ÿ62“xpäÆE¦÷êEÚû!ˆ@$4ýËX¿Œ.\™ 'ŒhŠŸ˜Üyd=ð?˜ã‡ i=¯x4ìÚ½‡eËßå¿|ŽÒÒR¾ÿÃg92§ûw“ÑÈí·ÝÚ§‰Åçó±~Ã&JJ+˜1s&[¶íD×uj»´€øø8²³2û!BÑ‘üñ…W8WRJlL4÷¥ßITdÄ€ëÓÔÜÌ»+WñüïþHgg'))IŒ=ª‡3;+³_WݽûðÌOžåÄÉSDFFðÈ—êA¦v»‰ú¾†iÕ«yöÏQr¾Y–¸}É­¸=îîßÃøiñ}’´ÏçcÝúüôÙ_RU]C||Oí)ê’ëQU…úúâãcÉÎÊp>rŒ_þê7ìÙ·Ÿ‡ƒÛo¿•1cFQ^^Ass F£¡ß£&5µµ,{{úË_ñûüdeepÇ’Û Áa·£iÍÍ-DEEöa–¯à×ÿ÷;ÖoØÌðì, NŸfÎõ³Ù»o?ãsÇÍøÜq—=/uµðûý,g%Šª0}ú4$IÄétqøÈÑ.+œºúz4Më• [[Ûp:üíå¿`·Ûy{ù ò!'g8ªªýCö².jàüÓ_yþ÷Dî¼} k×o¤ºº›ÍÊ÷¾ó_dgg8½Cy‡YùÞû|ï;߯åvñÌOžå«O=Éѣǩ©©åByÅ€oç0 غ‚˜ŒFQÀa·3yÒ¤K×Õ> A°ÚlÝÖÅÉ“&Q_߈(^_L(H𣽙¨i·`K纈=‹Â7žÁŒ³úÜ Èó(ÂG½€\ú3¬‘3i-{ià”ÓŸ¥c–‡ÑÊ’ìY,NŒC¼¶€@hÆS º0„LÄ~:ƒÓÄ-QIèš‚5.Äëâ éw}Ñ2ôóúŠGÄ„ñ¹œ.dãÆ444pÓ¢ELœø‘k«(:Óåñz±ÙmŒ1‚¤ÄDbccz Ô¸×Õ7ðËßüµë7£iÑQ‘ÄÆFc6}ÔS'O`â„q}¤ÖÖVZZZP…ø¸8Ìfsü±ÿÁ¤é••UÝžjÙÙ=o@—¤þ›üºëfúv ¥eˆŒˆàч¿HJrr ¡ÿƒñ¯—Úººn³cl\L@É¢( z!­ª®ÆëõÒªiŒ3šÔ””KÖ„þëpo¢½­M×IMM%7w¹¹c+ÝŽ ˆ‚H}}.—Qp:]¨ŠBkkaaá]‡®ÿ1²,Ë,\xºÖû^ŽÉdìsa*»pî¶›8~<øó /"DŒÀýý§áé߬Àöô-ߨ'ñ[ŽV»»“*UÏ^±„Ý´MúQ‚ÆÝŠÌÓ—@nC$•wD¾·üý®†aj˜ç¢ðð ((Ð¥sOV«•cÇ“¸˜‘ÉØ1£éßö åнDEE:VDv»œÜ|žûûËdeç²tñý,¸ûŽF…$‘H*•³gN3éÆ™ÍªvìÜMII)·ßv«Ë5OŸ>ËŽ]»™xýøvmNǹ´t"Âà rioËjµrà×Cœ8q’3¦Ñ?¡_›ÏX, &K‹¾F/\Ìà‡w2dð ¦LžèÒoNÇÖmÛÑétÜu×íø©œwt_PÀÑcILš8ŸÞËŒéSÙ»?‘‰Æwø¼˜Ü̓Ң\<<<¯ˆ‹µü‚4šj‡:¹¶¶–³çÒðòòÂÃÝ#[4Ò’(¼ÈHKiâb­ººš»~F¡ðছnhä­è•Wß`Æô©Í¸þ=Z­»fWÝ™™Ysý„ñM®µäkô·Ç'²sòÈÍË£o|z5²”vîø@II—23 ¦ÏåígŽO´4îÝ/0£ IDAT—舃ÚÜúNŒ›Õ‚F£!;¿aC›NÂSOœ":*U+Û6R‰‹UÚâûªªªÈË/`èÁXŒf´eTä ¯Ñ"WxàŠ*4™Â¼¼|Lf3q±1Íj²F †QjÇC"C.’´¨ÖOI=ÉøqMǵK—2‘»É‰Ž Ãf³a··<6œv\ˆŒ!‹‰Œîƒ@k*Ÿ?¶§ýju9µ5š‚ìRZ*>¾þÝ´}õr2ΠðlºêU©|DZړJÛµún‹°°Þ- •ö¢P(ÝŒ/S§jV$jÖ©³tFÙ:]­] i¼io4±XÌ.4}r7·NÛ¤öòòaêÌ[]~Þfµ8<œ›L&œ?»#B&“ušëî„T*A)ýãE7›Íˆ%R$b e·Ó‚8=8FuÏÉž\.G„­Ç”cphäUgÞ€§§¢Õ=½žŠ®N——›µ{iZ•Lnž”åá£òÇ`ГtôF£¾íPÍ,§Uþ :²“ü'ÚÛô®ß‹…“©Ç©©V;ÝàÄb O%ÃGA.oþ,‹L¢¥·=AZŠ$HÄBܹ+‰ÉdDî®@Ôcâ^} #J¥;מ Ôë øøøô,A(K¨ÑTâ£ò'/'‹€€€VÍÚ[#ãâÌfnnmï=9Â¥½.Ã~«×ÖTc1›4h°K†(å唕”ÑüŒQ*“¡®¡€€€@w§ÝºJ‹Å‚ø7çxLf3"‘¨Þb‰y3ñÛÄbq½««Ë­«ÕÊæo···7:î²O@/´ÚZÊ+*ˆŽÆ61Œi '7Ò’RªäjNé΂¤îRFQq ¥eåŽz½¡ÅoïþdçäRVV†T*E§«÷¨R©pws'22‚¨Èˆ… €F­A­Ñrø$§öžCT#ãèÉDùÅ1fÄ<žxy)ñP´îxÿClüö;ªkjÐë Ž—²óøøëÐÖÖÿmê JöJ`±Xîî*+«Ú´BëΘÍf¾Ù°‰²²r9Ê;vQZZÆ÷ßÿ€ÕuJâ_yhÙ£|ûß­.=¥)--ã±??ũӧzÎf³Q[[‹ÑhÄh4v›ïé¨Cw›Íæpã×Yètuu‹òip/(pº:='O§á«ª÷ßïòù¿œÜüvw£Á@zú¼½}.{×—RRRFrr eååPPPÐæÀž’zsˆ Ñ=2d`˜®â¥o?âo¿|Ä‘”bŽ/åĉâVÓ¨Ñj1èõøúxã§òE¡ðàhòiÞßSÇ)¦ó]º/ ¥o§zþ/*.æ\ZúeƒzÿgÏ¥¡ÕjJgû;سgv»‹¼ûÞ¿]À¾Ù°Ééw7‡ÑhäâÅ —ž•ËåÈä2’SRñññÁb±“›Km­ÎåÝk¯¼È¹´ó$%§v»Õï†Mß’”œÌ¿?ú£©ý“,;õAg·ÿ°Ãá°+ØŸø+6›½ûöóëÁÃ|øŸu¤¤œp9½­–—_}½‰p4›Í.¥wáÂEþ¼òiöï?àÔdì»ïäÛ-ÛÈÉÉ¥¬¬œÍßnÅl6c±XX÷éØ\4dipóæ* ç®;ήŸ~æÐá#!‰@$BéãÁ"!¯°‚âr Þ~˜-V‚ #,,¬Í.å•j†+Ç2õÄ-¯ŸLðúiÄ$OçÆ¤§Û'qð°Ý{ Úœ‰Öhk)*.%ýBŸ~¹™*ù ´Šäþ„s§Sù.Y‹Z­é´ÂÿƒÿpËÜ;),¬Ÿ­îع››çÜÎÑcINÍv¿Þ°‰Y3§#‰5r§NŸ%'7×]6Ë}‚ä”ÔÍìOŸ9ÇÓ«Ö¸,Tccb0™L— ws#<, ¹\æòÀ±ë§Ÿé×/žáÆаÛáºÑ#™2yóî¼Ã)#4‰XŒ··7YÙ9ø;áJ°ãIÉþÏç/\äÈÑcOrÎGè™3g9v<‰ìœ\Nž:ÅâE Nã·}ðë¯7ròäiÞxs-iéçyáÿ^âµ×ßbÇÎÝNÐßlØÄʧWH¯^½Úý¬T*Åh4É÷?üˆ¯¯?îÜEeeéé((*¼¢A“ÛjϹ¹y±eë÷ØívLf•Uj&1غõ{ÌfŸ±Þ¥@Ûv;¬ÿzYYÙ¤ž8É¿?úÄåIÂo'ˆGŽç‘GŸ$/¿ { B£ÉŒÞh#·TGy’*…åuØì"ÌfËåfGØžæ Ðn·SZQCNq-¥+E•F.d#‹Ñjµ¨ÕjÔju›³ w™Œœ¼*´Z 5†2Ôº\´ÚjµÕhµµ] ¢<¯õ‚‹ñöRèÏÉ3é<úø“”I]ù%Ü4©¼°l2§ %­zp–É“®gþ¼»ØþãNÊ+*(**fù²‡œòþ.- ‡‡©TÊ A8tø¨Sy‰D¬þëS<´do¼õ/ÞZû.555.©6×õ Ç“RØãB F£ÑˆÁ`düø±X,ŒÆúpQ>¾¾NÏXÏžKãç={¹ñ†ÉÌŸwg‡»œ>}­V‹Á` )9¥Ã*I±XDlL aa½™<éú6CXA}d’´ôóõjz£‘)“'RT\Œ¦ºšÃGŽ:5©©®Ÿ¨dgçpéR&ñ}âÈÌÊv* 777‹Å—ûº»‹¡„Äb111Ñ̹eË–-Åh0ròä)æÏ¿‹iSs€qáBßmÿ‘áÆqâä)‡Ö¥½}A&—ãáîîØ£Ð?“§N£©®Æ×§ë àär9óˆˆp¼”JB{õâ†É“ZÖÒâ¸éîNÚùóäå°àÞù.}—»»žžž„†ö"**’K™™šDW×ÔðÊ«oðî{ÿæñGæ©•¾*åêòÁ¾´ô „õòãè¹B#ûá&—PS~„¨@3UUñ¸]ÞKÄÍǼÕ;×õ£ °ˆZ£›Fƒ¯ûVDåþ(nu \­:ÚúääR[¬¡NÍ@wåŠ<ŦàçOü`CB"i}µÛìhkulû~3fÏ%::†¼òTte(((`á}óQ~œ’ŠpB:§#Ütãn¼a2Û¾ÿÇþü^úÇ߉qB6¬ÂÖ4àééI­ *‰DÂÁƒ‰ŒçÀ¯¹ëÎÛðööv*K™YÆçŸ¯gúÔ›ZÝãmn`0~,çÒÒyý͵ 2ˆY3¦3kÆ4§V»~ú£ÁÈõÆ»ìþï·ÔÖêxç½pss#>>Ž-[·³àžy,~pa‡Œp.fdÐ+$™¬}+ÞÀÀ@6mþ/ƒI¯G,SU¥æËõßpËìYí¶€öóSaµX©««ãðÑcÜvë*«*©vrUÐ?¡±1Ñ#“Éøü‹¯\v+õNÙûÄÅ¡ôô$7?ŸÙ³f6ògÛ^üüPxx‘q‰Ñ£F8½ÚÑëõìK<ÀìY3‘H$ Пsii 6Ìi½EÅ%;vÜ¡ýé <ˆçÖ¬bï¾DÖ<÷wÞ~ãŸôîêRZÇ'Ì_ŸZÙ¡þPS]ÃþÄ\wÝhpÕVÞ.¿ÅÛKI¿øh¦Œ Ç\•†ÂRH¤¿•¡ºB*’BW[‹ÅbiÑ9±èòÌkðÀ¾Ì¿å:ú÷1ix(æR9SedyÉ/;ncúÆ­ØÄˆX%x2vH qn#¹N¿}Y*Q‘ ÂÃ[ÐEbJ¥'ÕÚZbbb‰ê‡KäJ, —{xáçÛy³Á‹—ØóË>ÊËÊYxß½|³a3¿ìÝGE+OLte¥å˜.¯šëý®æ:U¢C‡òàÒeñùºÿîd«ÕÊ/{÷±tÉ"î?¤”T9êR¹,[þgΞ㛠›yñåWžÑ0€ØØÌ–ÎÙ³P*=yãµW7n 3gLçÃ÷×"w“£»{Ò¥N_£eãæÿrËÍ3ÛýŒ——’{æßÅéÓgIJN¡¦¦†o6nâ–Ù³ˆŠl¿À0MÔÕéÙýÓ&^?…•¯/þN}øqc¸”™…^o J­fÔ¨ øMg)))uøŠÍË˧OŸX×VÕ5á¡ðàü…‹Nû£Txx0ûæ™Ä^öË)“É0[,„…õvÉÑó3]ß–?Æg_¬ï”ö¨ÑT£©®¦¤Ìuâ-[¿çøñ$ƽ©T‚Åâºü„ ã˜}óLBC{uè»ÂÃÃØðõx¸»óàÒ‡9v<‰«ëÑ'†A0þºá˜LcÉ8¸“†tNŸM$hÊ-®ìöú™»NW‡\*%(À…BÄg$ž8Ä3ŠIýïô¹ˆ VLßí6&ö‰cH¯äf=b‹ߨþTø '1u;7fïàÝìlÜG\Ï_† nuE¨ÓÕ1õ†I¼ñú?ùŸç^ 2؃ü^IdÈ•Aa¨Ó"ï¤ð>Ÿ}þ%_|ù5»w~Ï€þ degsÿ¢¥|úñ‡íŽaNHH0iié 6µZMaaQ³NqÛZE}õõþçÙ¿2lè—fb…Ex{{Ìí·ÝʧŸ¯çÓÏ¿äúëÇãæ„ZÒK©tøU‹Å!vb–)‰Ø¾ýGÞ\ûîîîLž4±SêËÛÛ‹{çÏsüÝ×wRv»š-§Ïœåë ›˜9cšÓé( î™›6oa÷Ï¿°èþDF:·jÒjk©¨¬`ð „]^¤¤ž$**²]«J›ÍÆþÄ_ùxÝgØív/«GÕ 5Õ5Ü}÷Ü>÷V§÷v¯=ŠO?_V«Åh4:µ·÷{âñ¤f̘ÆCK9¥ö«&P@``™„ö !3+›‡/Bo0“›‡Ýnwêü±ÕfEDEvާ±XÄŠåBåëúVÍmsoáü…‹¨Õ^yéÿœžøÖOæjèÚ‹ììbc¢Û­Ùh •¯/Ï<õ$Ç“’ùêë\7zÔ„ívºvöb‘ÀÀÀú¥pò z‡† Vkçÿ,f39Éû™(ÍåP] fÜçÓÓqÝÜÝë£ÅbaÅcOrûísùü‹ú†ÿú«/ƒ^¯çܾïèS~„ÏÜ4oQ‹îäÉz½ýÐ!ƒ/;Û–`4IËÎáXq)~G6&7ðqU_¿ùªã¹ÊŠr.¤&¾o_D"›·|OQq ÷Üu;gÎ¥‘zæSæý•í¨Ds7¥?ßÒ‡)ñ6$ ååex(¼‰ŒŽm¡ì¼¸x6¥UW]Ç“R¸”™É-7ÏÄËË‹ŒK™;žÌ䉜òX\RBrr*³ožÉ±ãI( ètc0íÚ§jYd¸a¼~o¥¸¤«ÕJh¯^N«KŠKJXùÔ*FÉ£,sºƒýã¥ò¯w? ¾O?|÷m‹‹¨«Ó#•»!—^UŒÝnç“O?çðá£( ¢££˜sËÍÄÅÆ¸äÐÀl±`4P*•\mŠŠŠÙ²í;fΘFïÐÐz×i"&³u•švìdäˆáM|i¶åtÛf·SWW‡L*Åf·ãv9Œ’³äåPXXÈèQ#n{v»N‡T*ýÿç¦M&<==±X,Ôéõø8¹e ÑTóýö™}ó üüZ7nªRWàí<§\Q©&$$¸ÝžÁ::&µ‡6n·5 ô';7›ÕÊÈ˱Å ‘#'óKÊ!ä~^-ƨ‹Å,¸w>V«•ääzSy£ÑHqqý1‡^C®çÔ9/£â0 -ZŽÊä2, 5Z-2Y}Ã5Mär ãû’¾’ýçÓm{¶#BÄ /¾Êá#I,Z8Ÿ“»ÞÇ­2ÿð!Œï#f|´»½ó\p5¢‘£Û>q±ô‰s^Ô+$„[fÏ`Ìu£]ÎOGÜo㽉D"B{¹®&éÂçë>j>ËžZùS&O$6&¦M!x5‰D`öŠåËš|ƒ›\NHH0K|Àµ•ŽHÔ)G”"ÂÈs¹®~?¹h°WÉdø¸°êñõõ!!¡*BŽý‘¹ÒBÐ%Õèo}ÿ„¾(==™týX¬k‡Ú#oœÕ¨5''^?»Ýζ-‘ˆ%ôíÛçwj¿¶Õ=ýú5g/p(ÄômÖçýo¿gæ´©®©á“ϾÂSéɘÑ#ˆ‰Žâ&½ž²² ¢"ÃÑÕÖWŒ——²>=‘à—òJÒ+Oww7ÆÛ­¾§3ÔFÝ…¶„¸HèM5r¸PÝ”Vaaî%Ì——°AÁ!dfœÇÛÛ‘HD >G ˆÄH¥²f;L{ƺÒáZ[G(žØì`4H¥¸¹É `õÓæé'W8»Êׇ޿ Ðk4©®ÑÒ;ªÅô+ËŠÑÖ¨…& Г¡_@~õ\ÁˆÄŠ‹ ŽÖ •É>j\§…aê < † M^n6V'­¥Ä ñ ƒñiEå¦ðTÒÈuB ë1«Ïzÿ±Www÷†©+P(<®ÉLJOE·‹<Ѧ ü=þþø;i^Ý­+E©¤ÿ€ABÏèV“´k{Â!ìBA´6Yp“c·_›‚ÐÝÝ ›­û B±ÐìþÐáæ~,ȽÔâAxî†ÁPGŸ„!˜M&2.¤¡××½ÁáŸ77ââûá¡ðlŸ ´ÛaÈuS„’褬÷bu>í4!½#é‰ÍjÁf³bµZ(.Ìãì©Fmê`CP \3˜L&¢bâ‰Àjµ8ïû´è\„×"‘«ÕJÖ…3\: «Õ´l.BkŽÚ v@&wà׷zæ\°¸æðQùãíë‡ÝfÃjµ ¯Ó ‚P@@@@à…ÍjuË´† ®ÌfG~ý«ÅŒÍfÅn³a³Ù°XLFA \ÛÈdrÆOž†É Çb6aµY°šÍô:ΜJmöÁXF@@@@à A( ðGEØ#¸æ0›Œ˜Œz¬6k›¡Ÿ®ÊŠðÀh4¡f® F£½¾£ÁÐæñ‰«"/]ºD]]P3WGꨭQS[£¦®VÛ꽂jT@@@@àšCéå‹Lî†ÝfÃn·akeU(Ë\s8âLˆÄˆÄ­‹ºn!Íf3‡¢¬¬ €3gΛ›KUUÇŽÃÚÆF§€€€€€Àoqw÷@¡PâîáŽL*kõÞ.Qž;wŽóçÏãîîÎÍ7ߌX,&''±XŒN§#11N‡——yyyÄÅÅáïï/Ô¬€€€€@§sEW„ùùù¬_¿ž£G6ú½¸¸˜'NpöìY$ ƒØØXòòò@¥RQUUEPPR©°•) pe¸b¦  €Ù³gsúôi^xáǵ‘#Gçp•••””” •J‰çÔ©SÜyçìß¿ŸÀÀ@¼½½…šèY‚ðìÙ³!Ø¿<==×|}}ñõõuüíïïÏš5k?þøãÜ{ï½B tgΜaРA]žƒÁ@~~>}úô*åZ„7Ýto½õÅÅÅ<ñÄøøø¥- Ð¥lß¾½[ššAx0›Mýõ,36«õòÑ +³ ½A¡Í6@|<ŒÙ8a©”'žxB¨k›òrøôS=&OÊãJSTß|³fAB‚ÓÛíönó)Ý)/Ý…Ï>ûŒ?ýéO.={Çœ©¼÷þ‡ˆD"|}<‘6c)šyéÒ„b1ôï_?ü „{îuëAx5èÕ n¿¶owI to ùßÿýßVïÙ·oS¦Liò»Ÿ²^œ‰±HŒ¸™³ƒ"W@ÚípàÜyg»n×ëõ¸»»#j)7=´4øÏà©§„²¸Z+ð>„à5LIII«×µZm³÷ÈC|]~gÇ¡ÅÞÞàæÖæ­û÷ïgõêÕ 0€7ß|S°¸væ„0™„²¸](‹k”­[·¶z½ººšÂÂÂ&¿OŸ2æê B«ÕʃK–0zôh¼~ø¶zÿ×_Í… P©T¬ZµŠ%K–t» °Z­”——£Óé ÅÃãËòb6›)--Åb±&œ¥l'6›ŠŠ ´Z-ÁÁÁ(•Ê+ö.µZMee%q#F@UUý?+Fff&*• ¿ÈHÈϯÿç$EEE¤¤¤tù·¨Õjrss»E^ºEEElÙ²¥Õ{Ö­[ÇâÅ‹›ü®)Ë»ú‚Ðn·óå—_\.gĈm,-ìÛ·!C†ðâ‹/¶y¿³…÷Ê+¯PSSË/¾HïÞ½N£²²’þóŸlÚ´‰’’V¯^Íßþö·.Qãæåå±jÕ*öìÙƒÁ`à“O>á®»îzIhµZÖ®]ËçŸNAA‹/fíÚµWl‘žžNuuu§¶e–ÉÍÍ%,,Œ„¨EwíÚÕ-ꫬ¬Œììì?DÛ±Z­””” Õj‰ŽŽÆ­ b{ê§¥{ÒN𝾠t–ØØX† Òééòè£òÓO?B¡p)Õ«WóÉ'Ÿ`³Ù¨««Ãn·w‰ ¼ãŽ;HNN@&“a0z|g°X,äææ¢ÑhˆÇËËË¥tÊËËÉÏÏG¥RÝèÚo¼Á?þñ‡oÚÚÚÚf-ó YYY˜Ífúõë×jǼèt:²³³èÛ·/2™¬Cåš——‡Z­&..®GS*++£  "##‰ßÃ…^yy9ÅÅÅdee±ÿ~233IOOG­Vóã?2~üøn—ï«®o»ùæ›y÷Ýw;%­‚‚{ì1úöíKVV£FjtPßΟ?T*Åßߟ[o½•§Ÿ~ºY«£«Á… Éd„‡‡³xñbîl§1Rw¥¤¤„矞íÛ·SYYÉÊ•+yñÅ*_«ÕÊ_|Á›o¾IFF½{÷&55µÑÀŸžžî¨ÃiÓ¦ñ¿ÿû¿M„ÌÅ‹Y¹r%‡Æd2ñÁpÿý÷_•r°Ûí$''³zõjÇDgÆ ̘1ÃåIÁ /¼À¶mÛ¨¨¨à‘Gáõ×_G"‘ô˜Asݺu¼ýöÛdffͱcÇû¶Ò+(( ;;›¤¤$Μ9C^^¹¹¹ ¼¼¼ˆ‰‰aðàÁ¡V«»å·H;c³Ûímêº9Â’%KÈÈÈ ªªŠªî§ žþyÔj5áááäääÍž={ðóós:½¨¨(î½÷^üüüˆŠŠ"77—ÜÜÜ.©”éÓ§sà 7JXXiii=ºÃ¼üòËlٲű:“J¥œ:uʱún'Nœà‰'ž@§Ó9„JII —~s.ÈÓÓ“µk×âííMtt4TTT4JçàܹsÈårl6›Ëû4999deeµûùºº:xàÇjP©Tb0\~ÿ›o¾É† å(•J9sæL·‰ÖRSSã(ë#F —Ë]OJJbåÊ•èõzG‘‘‘Ñlz™™™Øl¶ùö]Ãl6“™™IQQ¥¥¥dffRVVFII ÅÅÅèõz¤R)áááÄÆÆ2vìX‚ƒƒÑh4¸»»SVVÆÉ“'0`@«ßÜžúiéMY1!¡a]#CBBˆˆˆhS¯{âÄ ŠŠŠÈÊÊj¢ÒrFChh(>>>$&&bµZ±ÛíÄÆÆãtz}ûöåá‡înèС,_¾üš™9VTTàææFHHóçÏç/ù‹Ó+÷3gÎàããØ1cx饗èÛ·o£{bccY¶lY«é"—ËéÓ§Ë—/gþüù.«FÔðíÝ穬¬¤´´wwwú÷ïÏO<ÁÍ7ßì²j´²²¹\Npp0wÞy'«V­êQZìv;à¯ý«c÷õ×_3gΜ&‚P,ãëëËøñãyñÅéׯ_‹éæææ’ ì^Al6999dgg£V«9zô(§N¢¢¢‚¢¢"Ôj5‹¥ÑJoîܹÄÅűcÇn¼ñF IIIáÈ‘#Q[[‹»»;AAAÄÅŵúÍ×ìaNNï¿ÿ>eee¼þúëDEEuJº¾¾žå™ IDAT¾|ñŬX±±XÌ—_~Ù!µŠÑh$%%…ââb&NœH```—5H­V˱cÇÐëõÜpà |µv7ìv;çÏŸ'==>}ú4qa5aÂþóŸÿ T* nQ%ZUUERR“&MÂÝݽÑõŸ~ú‰^½zâ²EïC=ÄÒ¥KñóóÃßß¿Å=àüü|Nœ8ŸŸãÆë45ù³Ï>˼yóV:¨Q£xçwðôô$88¸Û¨DµZ-÷Þ{/EEEx{{·8ñÙ¿?þþþôêÕ«I} \Š‹‹yçw8~ü8%%%TVV¢V«1™LÈd2BCC‹ÅÜvÛm 0€øøx Ñjµdggsüøq¶mÛFaa!;vì 44”áÇ3{öl¦L™B||<Î5§m‹>ø€×^{¡C‡²xñâ+b|òüóÏcµZ]6ÀðòòbΜ9>|½^ÏC=Ä{ï½×%û„ƒqãÆqéÒ%¬V+k×®í¶+D³ÙÌ_þò¾úê+ª««‰çÈ‘#öî<<>¾ÅëV«•÷ߟW_}•ÒÒRÜÜÜHMMí4Ÿþþþ––»»{·ôUi6›©©©A¡P0|øpžzê© $¢¢¢¤Q’––Æ[o½…¿¿?ƒfâĉDEE1vìX4 ùùùlß¾FÃG}Dee%ÕÕÕèõzD"!!!$$$ÈÒ¥K;v,¨TªFÚŽºººkW¶¶GøÎ;ïðÕW_±páB|}}9yòäÝo˜ºÂwß}ÇÞ½{‰DÄÅÅ9½ÕY¬[·Îñ-„„„té^BAAD¡P0cÆŒF{=Û·oç½÷Þs”SïÞ½)--m´w×–Þ¿¶¶–ûï¿ß±o¬R©ðöönôLNNgΜiÕëDGö8{ö,«V­rìCõîÝ“ÉÔì3ÎîVWW“——Ç®]»HLLÄn·3{öl—W·EEE>|˜C‡‘““ôiÓ »âíÁh4:Þ9uêTÂÃÛ|çâÅ‹™9s&žžž( Nž<Ù$¼¼>žY³fDDD¡¡¡(  ëׯgذaŽÈù¿;癑‘AIIÉk0;;›_~ù‹ÅÂóÏ?Ï®]»xùå—™:u*&L`ìØ±V‘)))Üwß}F~þùgbcc]RïyzzËŠ+x஺YýoFÅ3Ï<ÃÌ™3»dej³ÙøÏþÃsÏ=GUUb±˜)S¦4ª»Ý»wãíí§§'óæÍcõêÕMTÊméý+**°Z­(•JÆÏêÕ«™8qb#íACøœÖV„Ù_h ²²™Læ°<}þùç›ìE6àì¡N§cÇŽ,^¼˜²²2D"C† áž{îq©~’““yæ™gHJJÂl6SUUÅ—_~yE/\ºt‰E‹µúÎÊÊJ.\¸Ð¦5lRRC† i÷ŠÐÙ=B«ÕÊÛo¿ÍK/½„F£A*•²dÉ’.Ù—3™L<öØc|ùå— är9ï¼óN·Ù¯|úé§±X,X­Vär9ÜtÓMDGGËñãÇyå•WÉd¸¹¹5«ÙÛ·o_«ß#•JQ*•¬=Â?þ˜ÂÂBÞ}÷]4 »w禮¶–]»vñì³Ï2gξýöÛ«J“’’X²d •••ÄÇÇÓ«W/—Ò™2e »víB,w¹—ÇœU«V!‘HºtßçÂ… <ñÄŽsŒ¡¡¡DDD4«h(7Wëó¥—^⡇B,wù^×Î;9r$‰¤S' &“‰ÿûßõP@@@«jÚöäóСC-ƈ#:Tv š0`À¦7ãÆì©§žêÔw^éÕ×ßÿþw´Z-ááá]¶¹eË>ùä‡EowSi/¹ì%l̘1DGG;úaC.((èÐÖSGÉÍÍe÷îݸ¹¹9¬Œßv«««»nEh³Ù°Z­˜Í¥qbb"sæÌáOúýû÷gïÞ½<üðÃ|ûí·8p€3fp×]wñÍ7߸üîäädyäžyæþùÏ2nÜ8d2Y“¼´w‰DØív—žïlD"6›­KT³  ”J%>>>Üxã<û쳄‡‡7*›Íæè,‹¥Å™ykeúÛçZúf«ÕŠÅbi5¶Þãl^¬Vk«G®··½FÜÝÝqwwgâĉ¬ZµŠÁƒ»ÜÞÌf3þþþÄÄÄðÈ#p÷Ýw·XíÉÛòåËùꫯ°Ûíx{{sáÂ…&V¨‹¢££Y±bE³ï´X,Øl¶6¿Ëf³µY§Î¶ßâççÇ€ÈÍÍeúôé¬Y³†¯¿þºKúwŸ>}èÝ»7‰„yóæ±hÑ"öïßß-Æ«ÕÊ<À°aÇ¿ï Ñ·Úºç÷×´R«V­B§Ó!‰Xºti£{ŒF#K—.Ån¬æƒÿÓ5‚°¢¢©TJzzz“kZ­–ôôtf̘Z­&!!³gÏÌ”)S8pà@³Ïµ‡šš.\ˆL&ã½÷ÞãÂ… Œ;Ö%Õhyy¹ËyélºK^²²²xî¹ç˜|9¼Õjm’¯²²2ÒÓÓ[] ¶õ=†âââVïi8_V]]Ý¡rkëž¼¼<ª««Ûe¥›MAAA»ëJ£Ñ°|ùòFîò:RÏ111¼üòËŽ¿[:×¶oßî‚b±˜qãÆa2™šä/::š—^z©ÕwVWW·YŸPo­xñâÅvï “ÉœŠã÷á‡:þ_WW×e}K&“±}ûöFZ”ö”ÑÕ //N×êj¹3úVVV¥¥¥­Þóû4ÊÊÊøÛßþæ‚qqq<üðÃîù駟ؼy3wΙÖuªÑ   ÂÂÂ$$Äå¼t6Ý%/"‘™LÖj^òÚš lë{***HKKkõžÔÔTZÝ#lO¹µuOII *•ª]å/“ɰX,í®«ÊÊÊ6¿³«ÚÉáÇéß¿? …‚Ûo¿+VàååÕDÞžwVVVröìÙ6ïkxg{÷/]ºDß¾};tް»ô­²²2222ºE^ nW?ïHÙÚív<<<œzOmm-³fÍâÔ©SLž<™Ç¼‰ZY.—³qãÆY_±Í°÷`;wîdÖ¬Y(•Jf̘Á×_Mbb"ãÇçÏþ³Ëé{zz:"Xdee!‰X¾|¹Ëxv»K—.±mÛ6²²²ºlS½AššÊ¶mÛ¨­­å‰'žhvoN@ 3ILLìò;½^Obb"?ÿü3Íî/]-jjjøñÇ9xð aaa±‘Ëãîŋٺu«Có[”J%ëׯo5~ýú‘””DÚÉ£]'õz=µµµTVV6¹Ö»wo¬V+Ÿ}ö¥¥¥@ý‘Š÷Þ{ÏqF¬¹çœå™gžq¨>\u¿$“ɸá†&¿Z­–7ß|³K¬5KJJ˜4iµµµˆD"‚ƒƒYºtéUχF£A«Õ¶ZGuuuTVV¶º"l¸§%Ôj5:®Õ{jkkQ«Õ­ªoÚzO{î©©©A,·«]êt:,K»ÛpUUU›ßé íù^g4,íq{Øžw¶§>Þ©V«Ûm`e±XZkšÃd2ñ /ðé§Ÿb6›‹Å,\¸°ÓÊÌÙò]´hûöí@,óúë¯wI^~V«ÅÍÍ­]ý¼­¶QVVÆÁƒ™6mF£±ÉxRSSÓ(ÄÄDV¬Xá85`À—ËD¯wÝõ^‡¡ÉdÂh4:,³~J¥âî»ïvüýÁ0mÚ´ïï*¶nÝê‚Ì›7½^ß%Æ*Ÿþ¹C'Þ§O¦NÚ%åUWW‡^¯oõÝ&“ ­VÛê`ÖZûhrmÝc0¸çž{ "&&†Aƒ9<ÌøúúâããÓf^Û“½^\.oWyÐîºÑétTWW³iÓ&¾ÿþ{Ö¬YãòÙ?ƒÁÀ‘#GØ´i,Y²„›nºÉå´jkkÛt÷ÖVùµ·>ÒjÏ;=z´càniii|õÕW!8}út E—ô¥íÛ·“˜˜è˜tÏ;·]etµVÍuuu­æ¥¹¼jµZ~üñG~úé'G_X¿~=gÏž%..ooo Ø´iÉÉÉ„††2kÖ¬Fé¼ùæ›!Ä¿þõ/—ËÄht=8v‡¡þþþͺNKIIá7Þ`Þ¼yÌš5 ¹\΂ :ÍÍZgN@@}úôaÁ‚ >¼Ë¢O4xi¸îºë¸ï¾û\2þ鬙¢Ñhlµ¾|}}‰ŠŠjUªTªVÓP*•gç­ £ÑÈ™3g8xð &“ ±XŒB¡ 4 ÕÕÕ :”~ýúáïïOhh(AAAŽºl+//^lóžŽL,222xõÕW1ˆD"î»ï>&L˜àRz,[¶Ìá|!,,ŒE‹¹tüÇßߟˆˆˆ6U£í)›ÊÊÊ6ëê­:úÝ•À××—%K–PPPÀÔ©S™7o|ðA—Œ?sçÎåàÁƒH¥Rn»í6FÍîÝ»»ÅX˜žžNppp«yù}½kµZþçþ‡7b±X‹Å¼ÿþû¬[·ŽÒÒRV¯^ÙlfÙ²e³üíok”Σ>Šýû÷ç¾ûîkÓÞ Õþ¥)é:AØË–-#%%…o¾ù†ÂÂBŒFc·Ýë:t(kÖ¬éy™;wn·ÉKwâñÇÇÝݹ\ŽR©¤°°ôôt ¨¨¨@£Ñ°qãF>ýôS‡€ !((ˆàà` Dvv6$<<œððð«:Ù1 |ûí·X,D"&Làúë¯w9½;w:„`HHˆËB°+&X/^¼â“¾¾¾¬]»¶ÛL´7nÜèø»¬¬¬[בÕje×®]lذµZÝÄŠ:##ƒmÛ¶a±XH$Ü~ûíÜsÏ=dddPXXȯ¿þŠZ­vA¥RÉ3Ï<ÓÄñüùó™?~—ïí5Ï=÷ .$::šƒ’‘‘A\\œ0¢ 8B¡à¡‡B&“áíퟟJ¥’€€bbb¸îºëðõõeΜ9xyy9ŽîQTTÄ‘#Gؾ};‹…Í›7@pp0!!!Œ9’ÁƒãïïOqqq‡a·„ÝngüøñDFF2aÂn½õV‚‚‚\N/$$ÄÑ¿î¼óNú÷ïßíêM¯×“––F~~>)))=z”¢¢" 1›Í<ÿüóþN“ÉDaaa³×ªªªÈÎÎ&22òªL‚jkk)//oò{Cˆ°‚‚‚«â¯a¥^SSÓä÷’’, aaaF, _}õ/½ô’øè¶Ûn#;;›ÀÀ@”J%}úôá©§žr¬¶gΜ‰··7yyyœ>}š×^{ ³Ù̹sçP©TÌ;—1cÆtI ó.„·Þz+©©©?~œ‚‚–.]Jpp°0ªÿ°ÙlhµZÇÁ={öP]]Mmm-dgg“››Kyy9555<þøã­¦7mÚ46oÞÌ™3g((( ªªŠ¼¼>>ôîÝ›¡C‡rà 7 ‹ fãÆ$$$íœwíÚ…ÕjÅÃÃ777vïÞ}ÅÊeþüùî«OŸ>ÝVs°iÓ&6oÞLaa!¥¥¥hµZ$ aaa :”éÓ§3yòä+â{X"‘´x6±aOùj Èr¹¼Ù¼˜Íf ÅUõÖâááѬðW*•xyyáé鉛›6›Ï?ÿÜ!‡ Æ+¯¼‚¯¯¯Ãϰ——/¼ðB“´ÆÏܹs+Ö­[×#Æ«+®G‰í²=.ŽSWWG^^jµFCmm-uuuFÌf3)))üßÿý………7òLo2™0™LÔÔÔðÉ'Ÿ`6›žZär9ÞÞÞ·Ë-ž¯¯/sçÎeîܹA«ÓéÐétèõzŠŠŠ¸xñ"çÏŸ§°°ÜÜ\NŸ>ÍÞ½{±ÙlÈd2”J%P~ذaÌ;—yóæ…ÍfãøñãŽ0P®#“ÉÈÌÌ`äȑ̙3‡1cÆ0lØ0¼¼¼P©TWT…+‘HZ\Õ{xx\±K‚ð÷‰+¥åjhUüãþ^6ø nà­·Þb÷îÝŒ1‚[n¹¥ÝÇj|ðA”Je—ÙWt[A(гY¶l‰‹Åâp‘Ô¹áßÖ­[‘Éd( ¼½½Q©TÄÄÄàããƒR©äÂ… LŸ>ððp"""P*•¨ÕjÇJÁ+1±XŒ———cFíõc³Ù0 aÜ!"//üü|’““Y·nf³©Tꘙ7zè^^^œ8qÂQG]¹oYTTÄÛo¿ÍÎ; ìR'×ééé¼úê«êpþ®P(Ðëõäææù‡l³‚ h‹ÅBAAåååTTT8öùôz=f³“ÉÄÛo¿Ýh…ø[_"‘…B‡‡áááÄÆÆŽŸŸŸÃ|>>>ž˜˜˜«ò=‰Ä¡2dC† qÌ’Vºí=×öGÀn·c³Ù8wî‡&''§ÛçÙÝÝAƒ‘ššÊ™3g°ÛíÈårž~úi,X€T*½jª»†ýêõë×;Œf¼¼¼X»v-S§N½ªåÒ«W/BBBSŽŒŒäwÞéÔ°x‚ ¸¦ðôô$55­VÛhEC@@AAAôêÕ …B\.ÇÓÓ A¥RáååÕ#ö ÄbqÛ×èlL&uuuäää°oß>233Ù¿?ééé $ ·Ýv[ø‰D°aÃøê«¯(--eÊ”)ôéÓçª[-ŠD"$ óçÏw¨âgΜÙ%Fƒ íûÙgŸ%..ަN*h@A(Ð111ñ@$1kÖ,.^¼H]]2™ OOOüüü¸õÖ[3f qqqsܤR‡qUWãææÖ%n›#00+V^„¿%!!³ÙÌÌ™3™üðC Ý£V«©ªªÂ`0\õr°ÛíŽo0™LNO«ÕRUUEmmm·ªïö~çïë´¤¤„ìììf… €À•D„—yòÉ'¹çž{ظqc—çeêÔ©,\¸'N\e»gÏæÍ›ÇóÏ?ïrÙÙÙ¼þúë <˜½{÷âïï››ÉÉÉŽ{^yåæÏŸÏ¿þõ/6oÞÌwÜÁ/¿üBuuµãžM›61~üxþûßÿvÉdëóÏ?g̘1M„¸+ìÛ· ð׿þµ[ÕwUU±±±lܸ‘¼¼¼ï»t鯾ú*ƒ âÅ_äÇäÑG#«Ž´3:·^¯o4Øô¸BJñóó###ƒÝ»wsóÍ7wY^ÜÜÜ ¡¬¬Œýû÷Û³˜TÊ”)Sxûí·™?¾Ëí$>>|ðÁ&þ_«««‘H$øøø ‹Ùµk›7o`îܹŽ{ÜÜܘ9s&o¿ý6Ó¦Mëp›­­­u¬ÞÛƒ‡‡&L`ëÖ­Œ9²Cï—J¥Lš4‰µk×rï½÷v«þgµZ §¤¤‘HÔbÞJ¥<üðÃ<öØcŽzjMSR[[Û£Ç+;Ñì2AXWW‡V«¥¼¼¼Ç`ëÑhˆŠŠêÒoQ©T<ÿüó<ûì³DGG÷èrm(ÛƒÒ·o_bbb\þ“ÉÄ?üÀ¦M›¨¨¨h¢6–ËåÌ;סölî=¾¾¾|ôÑG,]º‘HÔá²­ªª¢¦¦¦Ýé¨T*>ýôS–.]ŠÙlF­V»ünwwwRRRèÝ»7 ݪ¨T*>ûì3ž}öYbcc7n\‹uºcÇvìØÑ®üWWWSUUÕãû„À•¡#[/ÒÎhôAAAÄÅÅõèBø€àààv¹M;}ú4=~¬¸Bí®¶¢ëáµB||ù¤Ëó2{öl^{í5»ûŒeË–Ô䞨¨(Nœ8ÁÄD®3¾k¡\.ÇÃß[Ø2™Œˆˆ”J%sæÌéÒoqsscàÀ$''3uêÔ.Í‹ÑhdË–-<óÌ3x{{c±XšÜSWWGpp0wß}·Ëy•H$ôë×ôôtÆŽۥ߬Ó鈈ˆàúë¯'**ªÕ½<¥R‰B¡hw~E"_|ñ?ü0>>>:K(•JÙ¶m `àÀèõú}wŸ>}=z4Ÿ~ú)^^^ͪ§;û΢P(P*•í.ïÚÚZvìØÁ+¯¼‚O—n{pòäIÞyçY7þѰÛíÜ Âzü IDAT|óÍ|öÙgÆfë¾oß¾Œ5ŠäÃ{]~hêÓ_Ú7<5¹Ñù9—2zr«Z,d2kÖ¬!""¢Ñ>BO¤  »ÝNhhh—ûÍÌÌÄÓÓ³Ëã®Y,ÊÊÊ B*m~ΤV«Ñh4„„„8ö Åjµ’““ƒ··w‡÷Í:J]]%%%øûû·9ধ§“––ÆwÜÑîÙmqq1AAAÈd²çµ²²©TÚ)‡ë×¶Œˆ:óβe˧<˘ÍfÊËË îò>­×ëÑh4ôêÕKnN`6›ÉËËsh#š«Ç­dya&ñýúsüp"H›éc—2.2f ~›ÿú~ÁX¦ãÇSZZJ||<7Þxc—æeÏž=Øl6ÆÏàÁƒ»,R©´‰¿ÇߣR©šÝÀvvEØ]ÎK* bbb®HÚ&“‰ï¿ÿ¨wšÐQëÇC‡QXXHLL Ó§OïPZÞÞÞx{{·yŸ¿¿éÓ|÷ÝwÌ›7¯Kóž‘‘Á¡C‡‹Å,[¶¬Ç—ÅÅÅlÛ¶­Õ²µZ­üðÃÔÔÔpÿý÷7›Î† P«Õ 8믿¾Éu™LÖæØàããƒF­ëûÀ‚±Ìenºé&áïïÏÂ… ¹ãŽ;X¾|y‡VÁJ¥’ ðñdzoß>îºë®k¾¼³²²°ÛííŽ>ñÿØ;óð¨Štÿëœ^“tÒ}# „5`HX"[dS¯3ŽËà‚»þFgD®ÊÜ«^îeFqgFQFgdD‘]‘=€²%!@ÈNHÈBÖNÒÛ9§~tÒ“NïI„úa0 V«¡P(’’‚ñãÇ{$ÿøñãË刌Œ¼.nÀpõö‰úúz=zýë_t÷5\¸p X¸pá5qÏiee%”J%”J%FÕëŠÉdÂñãÇj·¾üò˸óÎ;‘’’âq™<¹}‚­v²lÙ²AS–õë׳¹Q«ÕxñŽ–ß=÷܃{)Öaaaؾ}û (˰aÃpðàÁkF·C† Áÿþïÿö™fòäÉØ±cGŸi^~ùåAQæ Æ5Iqq1Þ}÷]„„„àá‡îõ Z±wï^ìܹZ­/¼ð€êeݺu(**Brr²íœèOÙ°aŠŠŠ°téR$$$\ó}…m–a0×$—/_Æ?ü€¥K—zWÖSòòòÐÚÚŠ‡zhÀõ²gÏDGGã¶Ûn³›æÍ7ßDqqñ55ŠõɈ‚Q£FA&“A«Õ²MŒëŽÖÖVÈd2Ö÷û žçQSSãôf™èèhÜwß}¸å–[ðòË/#""bÀÊ>{ölð<Ù³gãÿøÇ€•C¡Pà‰'žÀæÍ›ñàƒö:: GDDššš`2™~6ý{@6Ëð<ß#!ƒÁ`ø W7UVVâÒ¥KÈÌÌĤI“4t_×9å¹sçøÆ¦-[¶Àb±`Μ9vËÒuµ×¨Q£~6±ØfƒÁø C† 4›1233‘™™9(ʲxñb,^¼¸Ï4o½õÖuÕWØ!ƒÁ`0®k˜#d0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0 s„ ƒÁ`0GÈ`0nqüøqj5> Æ@ÑÖ¼þ:š Ü~; —3 Ö¬V¯™>®#¶oߎ?þ¸Ï4ƒJ¥\)‹ÅI’ T*í¦™?{Ú)¦O¾úŠ9AÆÀSQaýŒÉœà`bØ0ছ˜¼Q«ÕÈÉÉé3Í矎3f <<Ünšüü|466bÆŒvÓ\®8?@ŽÐb¾ÿHKc-Îx´Z <Ü:UÏ<œ> Ì™ÃôpÒÐЀ¤¤¤~‘uÇ­Ùxïoô¿#¼ÜÐÙCYÿS_ÏZ1`X,¢õ³Ï²þ8ˆhmmEà7ºÝ&ÍÍÍ0 ¨DíI)E{{û *Ó`E&“áoû[Ÿi>ŒÑ£G#((ÈnšŠŠ ´µµaÔ¨QöGŸ¼e`F„~ø!î»ï>—~S[[‹7"''X¶lYŸsÃýõ°~ýõרµkBBBðòË/÷Ù(Œ¾Dqq1þùÏ"77·Þz+î¾ûno\)..FQQn¾ùfÖƒˆ÷ß¿ùÍoÜþ½Éd‚Éd‚Á`T}Üb± ª2 V8ŽCvv¶Cû;sæL§F«ÊÎ Œ#ä8qqqN§¯¨¨Àc=†“'OÊËËñ?ÿó?°†jnnÆòåËñÅ_@p‡^xÁ¥z1~äÈ‘#xä‘GPZZ àyO?ý4üüü|*·½½ÍÍͬÝZ­Ö£6©ªªBGGÇ jWJ©Çõú9!IjkkQQQK—.aÿþý¨¯¯ÇêÕ«êÀ=#&&QQQvÓÔ×׃çù>ójk¬Gè*_}õ•Í ªT*<úè£ÐétÚÈçÎæM› IxžÇ/~ñ >üš¡:u ë֭Ù3gp÷Ýwãpk.I8€?þeeeX¾|y·½õë×Ûœ N§ÃC=µZÝ#¯ÊÊJüãÿÀÁƒ‘žžŽU«VA&ë×ŽüûßÿÆ—_~ xõÕW‘œœìq¾µµµX¿~=öìÙƒøøx¼óÎ;}îvó6¢(bëÖ­øì³ÏÐÔÔ„U«V!==ÝnÚ}ûöá“O>AEEV¬XY³f1~b±XP]]²²2”••áÈ‘#8{ö,jjjP]] £Ñ???„††¢¢¢âšyðÈòH’„’’§Ó×ÔÔ ++ ¸å–[0uêT›Ñ(*++‘žžŽ   Ìž=óæÍC]]êêꮉ>qâž~úiÔÔÔØãôéÓÝr„Û¶mÃK/½„ææf@\\’““»M{Fdee!""·ÝvÆ×£ëëëñÐC¡  púôi<ðÀ{°Ó³²²555N÷GA°zõjlذ‹„ÌŸ?ßã)Üææf<ýôÓ8räˆíåêÉ'Ÿ„?îª^³f Þzë-FÀ¤I“ Õj{Mûå—_båÊ•hmm$''#!!ÁkeilltÉFô6"4 å዗ˆ††AU&w0¨©©ASSJJJpìØ1””” ¡¡ 0Éd Ctt4&L˜€)S¦€çy”••¡²²Ò¡œiÿºº:”——÷y6óÒ¥KójjjDdtlÿ;BBBCCNïïïO?ý´×Â@„_|7v-è_clÞ¼Ùæ###ñÔSO!22’$¹œ×† lN0)) O<ñº¥‰uuãË/¿´9A•J…gŸ}qqq°XÜ_ìnhh€F£qº?666bݺuEÑ¶Ž‘€€ô}ôèQäää€R ¹\ާžz C‡… ýÖæï¿ÿ¾Í N˜0K–,±«—uëÖus‚?þ¸Ý´W®\Á|€mÛ¶!00|ðbbbú,K×èÁ“çS¡Px”‡/¦ ýýýU™úÂd2áÌ™3¨¨¨@}}=rrrPPP€¦¦&´··Ãd2RŠÀÀ@ :Z­wÜqÒÓÓa±XP[[‹ .àØ±cسgÚÚÚ`2™ðõ×_;Ô3í€ààà>ÓA„>Ó´\©˜!!Ä¥M%jµAAAƒÊÀb±\³›c"##±|ùrDGGcÑ¢EHLLt{sÒÈ‘#1}út 6 ‹/Fddd”J¥r¨K…BgžyX´hÒÒÒÀ»qä§h4øûû;ÝŽ‚ àæ›oFjj*¦NŠY³fA£Ñx¬o•J…GyaaaÈÎÎFff¦G#]w˜:u*’““‘žžŽ ô¹ü0vìXÌ™3©©©X¼x1"""ì¾h<úè£Ø»w/$IÇq¸rå FŽéPž<[à8nP=Ÿ”Rëå ôz=rssQ^^ŽÚÚZ=zçÏŸGSSZ[[a0 Š"Ôj5‘˜˜Œ5 ááᨪªBmm-vïÞÝ»wcãÆÐëõèèèÇqˆEVV’““!—ËàPÎèÉÏÏ}¦Óh40}¦Q)UãÝáÌ™3xûí·‘““ƒ)S¦`íÚµýn(z›~Y¶l¶oߎÐÐP|þù爌ŒôNNlܸ~ø!***°zõjÜqÇÝÒ„††â÷¿ÿ½Ã¼òòòðÊ+¯àÈ‘#¸ñƱfÍší2lØ0§òr†—^z Ûå7ÞÀöíÛŽM›6õ¹³ÌU,X€Ç{ÌëíòÛßþ©©©Ö/&Mšät;1©´•••øî»ï@)…L&ÃÃ?lwÝ‘10ÜÿýرcL&“mÔš””„yóæ!** ÉÉÉÈÉÉÁÂ… QVV†ºº:=zŸ~ú)ôz= , (¥ˆˆˆ@ff&FŒŒ dffB£ÑÀÏÏ2™ ‡‚(Š×Œî×ÍZZZð»ßýyyy¶#yyyvw———£´´ÔéþØÒÒ‚ÊÊJ—ú¯3”••2 ±(iWÓ"++ aaaÈÊÊÂøñãQXXèÕ²ôÆ… `4|S·ëå ZZZ°páB >ãÇGSS®\¹‚¶¶6;v ëÖ­C]]Ö®] A@)…Z­FTTƇèèhŒ;EEE¸ãŽ;l›©©­­Emmm·vEÑá,Š3zª¨¨@~~>._¾l7M×ȶ¯¼šj/Ì!Ïó?~¼Óé÷îÝ‹¦¦&B ÓéðÖ[o!m€£Ò>|ùùù¬S·Ë—/GVVÖ€Rõz=þøÇ?bãÆ0™Lظqc34÷ÝwAÏóHOOÇïÿûk6QQQÛèÛo¿EKK !Æ›o¾Ùk»8“—3i:„±cÇö9"þøc|þùç „`Ó¦MÈÈÈð¨ÝÊËËXw ~óÍ7HHHÀþýû=^{t…ÐÐPlÛ¶ k×®Ess3Ö­[‡ ôš6<<999xÿý÷QQQ·ß~K—.푎‚ßýîwvóñ¤?\$Iؽ{7^yåœ:u C‡Å믿îR¾ ??+W®Äž={0tèPÜvÛm^¦Þ¦+**°{÷nèõzPJÁq8ŽC@@’““»ï¾©©©Ý6Q]½Äñî»ï"33Óî+Àz\IE¯ØƒS§NaôèÑ}Ÿ$ õõõ}æu.×4pS£®ì²#„à/ù 1oÞ¼-B–/_Ž””̘1£Ç.È@’$Üzë­Ø»w/ëyÍ¢¢"Ìœ9³[ºÉ“'ã±ÇÃðáÃ1cÆŒ^7!Ä©ú¼ûî»Ðh4˜;w®Ývq&/WÒô•Ž‚çž{C‡ÅÌ™31tèP‡é­+`]—غu«-"Ïó(//Gff¦Gm—ššŠ9sæØf ôz½WÖ»f0, ”J% E¯iΜ9ƒ/¾øÂ¦—³gÏbáÂ…½¦mllÄÊ•+m£ÿÜÜÜ^uØ¥[Qa4AŸŸŸWúÃÕìܹ·Ýv›m–ãüùó.ÛoSXXˆììlÛˆ¥  ÿñÿ1àvâ§\¹r—/_FFF&Mš„èèh :'N´­­­Zµ Ï<óŒSvÑÏ›½4”R[_EÑn:“ɳ٠³Ùl7Ùl¶¥0Gè*<ðÀ Ú,7ß|s'3PJqàÀۛܯ~õ+Üyç=ÒÅÇÇãÉ'ŸôŠÌ|pÀGÁ?eþüù>ÛÍk0pìØ1p‡ÀÀ@Üÿý.vz}+=wµµµÉd ŪU«ú|ÓuA°iÓ&¼ùæ›(((À/~ñ |øá‡½¶Ù¾}ûÀqüüü°páB<òÈ#vóÝ¿¿íÅ`Ú´ixá…z72JKK±dÉ|óÍ7Ðh4صk† æÕvéš’W*•6l–,Y2àý°¢¢­­­¶£¯¼ò .]º„ÁFvv¶×Öð}IGG>øà|ðÁ(++CBB/^Ü-(Šøâ‹/ðÆo ??‰‰‰xóÍ7{ØÉC‡aÕªU8|ø0n]pþôÎ_ûߊ¢ˆ'N8þÒ¥K8uêT¿.væmO¯½±{kD˜••…1cÆØ>.\è‘®ººÚ¡þISUU…“'O:<Ðî-y•••8}útŸk„………¶Q‡³S’¥¥¥N÷Ç––Ì›7#FŒ@ZZFŒa}xBii)–.]а°0Lž<QQQ^YKÚ¿?ž{î9Û1Œòòrœ={¶×c1bFމñãÇ÷yö*117Ýt‘™™‰êêê^×Çñ—¿üÅÖ;::PZZ ½^ïq¸š‰'â™gžV«Å”)SP^^Ž¢¢¢>§é|MPPþó?ÿf³S¦LAxx8Ž;æR½úo?Ÿ}ÙÄÂÂBH’äpÊ¿7y›6mÂk¯½fÛl3bÄTVV¢ªªÊ–æôéÓxüñÇm3J¥ÝòªªªÂC=d‹ùj6 Ј°kmÊ•‡yüøñƒjDØ5<L;àDQĬY³ðüóÏ;œFrTngÒìÙ³7ÜpƒÃ¡·äåää`ܸq}®¶··ƒât»tMÓ9›¾¡¡‹-òú®Ñòòr,Z´Èë»F×­[B0nÜ8¼ñÆv××o¼ñF§G&Lp*íéÓ§QVV…B¨¨(,[¶ ³fÍòJŸù)W¯…9rþ|Nœ8±ÛHd÷î݃n׬·žÏ£Gbܸq}¾|tÅpGÞš5klGï¦OŸŽ×_½G‡ï¿ÿ€õìùرcñÖ[oukÀ¼Âd2A¥R!..3³ÜŸÕ“ DƒÕ××£¦¦!!!ˆŽŽ¨¥¥UUUP©THHHð@à ÆÕèt:lÙ²ãÆë×H5]¼üòËHOOǨQ£ë39”RÔÔÔàÊ•+¸råŠÏãÔ:Kcc#ª««ÕìÑ`Äb± ¢¢F£&SÏ ,+W®ÄÂ… ޱcÇöºÖ}ÿý÷#11Ñöâ×ÛÈsÆŒزe AÀ¸qãP[Yäv™ûÕÚGDD`Íš5˜9s&222pË-· ­­m@- GŽÁÂ… 1qâDL:EEE¬73 …ÙÙÙ˜:uê€8AHKKüyó|ê ^}õULŸ>xâ‰'\÷’$aãÆ˜3g2331}úôë¦ß¹ºZQQ{s'OFff&víÚÕ#Mhh(æÏŸ &ØÝð¥V«‘iÓ¦Ù~•Éd˜1cfÍš…êÙ¯k„ÍÍÍX¶l™mwÅbÁÅ‹ô:“ÊÊJüéO²‘Q*•hhhÐùI’PUUå•ù~o®æææâ­·Þ²…—Šˆˆ€J¥rYž/Ö;::àçççÒáÅ‹±oß>‚RŠ´´4»¦³tÅU---EII ´Z­Ãè+ÎàÊZ›/Ò¢¾¾ÞåçbĈ.ýfÏž=ø¯ÿú/Ûú‘ ¾FX\\Œ'Ÿ|MMM6»åÌóÙßxb, ŠŠŠÐÐЀóçÏãôéÓ¸xñ"*++qß}÷¡¶¶’$¡¼¼UUUhmmETTT'õ /à›o¾`]:»ýöÛûMOÍuxŽÐÕ5B™LL™2«V­òŠ‘ð£Ñ½^o›‹^±b&Mš4 S£¢(bÏž=^™ï÷æayy96oÞ ???hµZ„„„ÀßßaaaHJJBbb"ÑÑÑØØXDEEõp”€oÖ]¥µµ{öìÁïÿ{äåå‚O?ýÔî1géèèÀwß}‡þóŸ(--EPPòóó=ŽˆãÊZ›/Òò<ªª*—ÛÃÕôùùùP(Ðh4˜={6n¾ùfDEE èzœ P( Dzz:þïÿþûöí»fÖ«ªªðüóÏc×®]hnnFtt4^}õU¬]»û÷ïÇìÙ³1jÔ(¬\¹Ÿ~ú)êêêýë_=òR«ÕP(ˆ‹‹ÃÒ¥Kñ›ßü¦ßö„œ==@óºÃáÇáïïØØØA³iæ½÷ÞCff&¢¢¢Ø…¼}0qâD,]ºEEE¨««CSS.]º„sçÎaË–-¶ó@[¶lN§ƒV«Exx8FŒñãÇ#""ááá¶6 ¥ëׯ·Mýh4¯z§”â7Þ°í¦T*•ƒj—ô`çî»ïÆÄ‰¡T*‹'N h”Àº ·+¤Xll,üüü°oß¾ŸNÛÛÛqüøqttt ½½½ÇßW®\‰O>ù”RÀ]wÝ…€€äååaþüùÐétX·nÞxã ÛyÓ &ôºYë£>Buu5BBBzEû ˜4i’““†ÔÔTŸ®?ýô-¿¹¹~~~HKKòeË0mÚ4󭯯·]Ü:mÚ4¬\¹’½\¹€B¡Àˆ#U™8Žëº°Ëaü8yò$}ôQÛQ›ÞFŒ!!!P©Tˆ‰‰Á’%KðÛßþ<Ï#%%›6m¢E‹ Õj¡V«¡ÕjqË-·`ÅŠ½.[èEë?GÈØQPkk+êêêP]]+W®@¯×Û¶*;bæÌ™øê«¯PPP€Ø¢=Èår¨T*¨T*˜L&ÔÔÔ`ôèј={6‚‚‚ƒððp£°°„ÙlÆ÷ß;w‚R ¥R FFƒ˜˜hµZ,_¾Ü§úøïÿþoÜsÏ= òj´íÛ·#99:®×©aFOª««{5YXX£Ñˆøøx¯\šì ---(..îõ9ªªªBnnn¿‡ˆ¹¹¹vuxâÄ Œ=.\€ÙlÆÒ¥Km¡ •J%žxâ œ8qIII¶ø­/¾ø"ž|òI›£ëZŠÇ}÷݇ììl‚` =©Óéúýmæv1›Í¨¨¨@mm-êëëÑÒÒb»6¥±±W®\ÁÁƒ±uëVÔÕÕ¡½½‹Åö¢(:ý†ûÜsÏáé§Ÿ†Ùl¶¨ÎŸ?óçÏãòå˨®®Fyy9Š‹‹ñÃ?Ø.¦U*•P«ÕÐh4HLL¥·Ür ¢££1fÌ466âÔ©S¸|ù2Ο?¼¼<ÔÕÕùÜ:¼OϼMæz"::º×£Tf³ýîëAúÞFP]ç"N²L&³»xõúߘ1cX¯N»páÆ‡eË–á¶ÛnëqåY×hð§Ìž=Û6K"“ÉÍQ7Gˆ¢ˆ¢ ç{½ÚÍl˜#ü9±k×.”——£¾¾ hii±Ý)f4m1»"4H’I’@)íæØ! DTT† †!C† 44AAAG||ÜÜ\477#''<ÏC.—C­V#66˜1c~ùË_øºc` YNNNŸ> žç1|øðAQ®3gÎàÀ=$—.]·ß~ ¥Ri»ŒùjÖ¯_³Ù ¹\îòŽè¹sçþ,û\¡ÄŒ9‹`1› $I„( 0› (È;ÍáωƒâèÑ£¶iG"66aaa ÃùóçqÓM7A.—ÛþŠÐÐPH’“É„>ú3gδMƒ655¡°°åå娩©Aã¬S IDATKK (¥Xµj•Çeæy<ÏC¡PÀÏÏÁÁÁÝÞ^»µ(Š8uêNŸ>ÚÚZœ:u §N§Ÿ~ ‹ÅI’ “É~VžÑõ×ØØˆ{î¹ß~û-$I‚F£ÁîÝ»m—D™, ž}öYüýï‡ÙlÏóxï½÷¤L]Ï‘$IøðÃñÜsÏA¯×ƒ‚¥K—ö(“\.t1„} ! …"ÇA’Dp"*‰v7ï0G8HY¾|9îºë.ÔÕÕÙF„]Óž&“ ‚ À`0Øîñª««Css3ôz=ŒF£mTHÁÇlsR2™ r¹ÑÑјú(rss1räH¶SÀÇO`Ë–¯!I¦M„©“íß,Ãá åwÞÁ+¯¼BˆíN1žçÁqd2™Í¡]¼xÑ6%%ÅvÐ]«ÕB£Ñ 44*• 2dˆm#Ê`ÜÖÌqFŽ9àgK;f³z½&“ GŽÁñãÇQ[[‹ýû÷ãâÅ‹X¶l™ÓymÞ¼«V­BJJ ²²² Ñh0gÎŒ=r¹ý²1"** QQQhnnÆöíÛŠ_ÿú׸ÿþûÌAbüøñ  7Ü€ööv,^¼Ë–-ƒN§Ã!Cú½L]wÀêõzÌž=¹¹¹˜9s&žyæ™A3…ùz½¯¾ú*! ÅÌ™3 …B9sæø¼žYYY(,,TºOJJ‘#GU™4 þõ¯±£ðç·ßD‡¡¡¡!0› Ìþœ „àŽ;î`Š`ذX,xî¹çàïïÈÈH$%%!33“&MBHHÒÓÓár¾Ë–-³ OŸ>ÂÂB´¶¶â‹/¾ÀÅ‹qôèQÔÔÔ@Edgg³†` þ!¸\u!aáÐjµ Ô@´¶4Cì ÐÃæÎY¾~öìÌn_–Ÿƒ\áøüÓùóç]:ˆ^TT„¤¡Ià9~Ð(­¡¡•ÆzÐu„ÙlÆ¥ªKHJôîºSUU½~CAii)òòó…´´´~;ŸØµ™Éd6aÚ´i a‡1(Ñ·6!uô 0 8WJ­›óйé‰pRRG!0°{€‹;_ß×»#d0 ãzàÎ×÷õ>5ÚÞ¦G~î (•ê›*š›¡Õ±·Bƒ1ðÔ×T šû ¾Çl1ÃÏO¥ªûªöv=†&§"2Ú½½:²Ò"¤Ý0!á èî܃©3ç²a0ÎÖMë<Œí–¼^¨­¹Œø¡#ßí{ƒ¡ßÞë]Gh2¤ÕB0›`±˜ÑÜP°ÈX¢`ÙÈ¢~0Ü£îò%‘1‰¨­®@Xd S Ãmáúå ,cpÀqÁ ‹Ùˆï8µZ1£GAÖyNÚ]zß5J)$Q€ÅlÆùü Tû#,"’$€JDÁÂZ„áÞÔ†ÉJEHT‚Ùlb}‰Á`¸EH¢õÂæ?¼²ëþñ!nŸ*¹+H¯Ž:ÃÑøk!I!IVÖu{4ƒár'…D)¨$YgX_bxأו I"¨$!!>aÖÿSÉû#BA°F鎉O( ¢h `j±˜Xk0ÜB©TA’D˜M(*Ö— †KtöÏȸ³nšNA yÛ¢´èb†ÄY7ËÀÐnÂ,f;ÚYk0Ü¢+æi[k8ް¾Ä`0\Âb6Âlì@Tx(Àlì@kk3‹ûË,½:Âäa#Qx6y=/€”Ë•8ö k ƒ1à¨ý4(/+gЏN  0Ô\F]MMïÓÒ'z×Êd2Œ;žiÁ`0×<,b3ƒÁ`0˜#d0 ãzÅîí®\î  G(6W~ïéÝxî–•R ³Ùìòo Å€Õ•áyû³6b0!¥e¥¨­­q`d(xžGÒЄ\u{C›¾.œ‡ÙäÈÉPhµ: Kéö½z”R\,/EMëe50-P»«PߪGT¤¿í xkk Š/œ‡ÙìxÇ’.8)ÃR=ªkåÅrÔÕ\öºñ÷Úà`øû87Áñ …\®p[žÙd¹³g`0tðÔQ(J 1Òé:0ŒkÔ¶¶4Ã,¸iÞ¢>ÃÖPJÑÞÖŠÃû¿Åä«aiIÆ¥O‚VܧqEgrOàrõ%ÄÄÆõšFÈå »‡%õ­-0šÌN•µ£]ƒûvcJè Û÷þPʹŸÈa±˜{½»M/ã8t/+) ™S¤í£®Öƒãy'¿GmÍeDÙ‰‡g±P(ì×µµ¥ íFL›µpІ•ún×jCrêFcÎ䯸ôL»éA„\.³ëøKJ.`؈1ˆˆŠöØR*¡¶¦Eçò‘6~³ ÆõìF‚‚t ’Aê;ò‡R©~2•d6›¡ rê\Ghx$ª*Jìþ½¥¥á‘Qí¼6™LÐi*«B¡!ŽGc5558SpÙóßÈmøûkœªkpX®ÔTˆ±S×DFÇ@0Ñ{»¡ Ôêhû*•ÉÃR;#Ç8ßîøªÏ4­ú6„††€ŠBï/B-- ôè Q·Q».ƒYã:‚³o¤(({|®\©ïñ~ò¶NPI²ý½¹¹ ‹©×ü(•<’D©¼{Ê‚SŠA@G‡“Å)œ”-D>ø)‡ÆŽ;pîÜ9PJQ\\Ü#ÍÚµk»ý¿·4®ðÓüì)DEk4"I@=ÅuŽäœmƒ®OqqQ¯ßKT´ÓÎ £Ÿ!(•~üˆ¢ˆõ>Áûû Û÷T¢½:2J%ÛßwîÚ?¾òLFSß FÇêxÌSD”—U@’¤ŸÈ“|™vꪩ± _½ ›7oÁæÍ[pèPNwù^4°_}õ"""ðù矣¡¡—.]¥ß}÷rrrPRR‚òòr|Ø–GYY:„~ø999È͵P(--ŶmÛÐØØÈÏÏÇwß}‡’ëÈýäÉ“øæ›oìn4¢±D©$aëÖm˜‘5“§LǬÙÙøá‡ã¶¿uÅõ–þÊÁ««_ÇŸÿü.êêê{öÓ«>ŸoúÂîß s„]~Ðj`:?ÿû<»üy466vûžÒÞÙÕ7 xíõ7ñûÿ~ ‚ tÿ½7 ÏUùI’„>Z‡[n»ÇŽý‰JËê©îrrJ¥Û¶ïÀ’ûÀ#=ƒÁàýºvÒÚÚŠ3gÎ@¯×C.—ãðáÃØµkP\\Œ;wÂ`0Àd2¡¨¨gÏžExx8âã¼ÇëÛo¿EUUÖ¯_ÖÖV|üñÇhkkÆ „5kÖ ¼¼ß~û-$IBSSN:…“'OBlÙ²¥wH¤ÎÏMY3113EÅÅX¼xÒÆŽ¶ýM’$ï¼uê÷ðáÜõ«;pソF Fƒ=ßíÅ_} {÷íGá… xç/ïâþwÊÊËÎÃk×mÀ^Yo¾ÝsUÿ`ÎÁ`ްËÀSÉö><šG{W}z3Vã$Ù¦#•J%ÆŽ Bzû½Ç®È–×W[¾ÆK/¯DQq zä1](rXV0 hkoG[{;:::`4šlÿokoG{{G_“ T‚R©À+ø?ÜrË"üùOo"kæt¯×µ‹Lž<ÁÁÁ¶‘fAA,X€Ù³g4 fÍš…ñãÇÃh4",, ±±±Ýò™1c† ‚¬¬,hµZ˜L&„††bòäÉ0›ÍhhhÀ°aÃ0}út„††¢¬¬ yyy8qâ„ÝݯW×W¡ã÷/<‡µÿø;~ðp÷xËJ¸í¶ÅøjËV¼ÿþßÑÒÚ‚ãÇOà©ÿ÷823&@§Õ"2":­Û¶ïÅ•†+Ø»o‚uZlùz«×ÛˆÁ`ü<èó¡tÕæÆiS±ñ“õøþûãݾ·¡žs•Túñ÷:þý=dÏ›ki^ý{oÌvÉÊš9ǿϱý)00Ðö·^ËÚÉ×[·£¦¶ÐØÔŒêªj\i¸bû»Z¥ÆÃ=Лènuõ÷÷Çûý3”J…oêÚ‰ŸŸRRR0gÎìÝ»0oÞ<¬\¹Ç!66„ngâ(¥øòË/që­·þø&Ôé̺þ @cc#^{í5DGG#!![¶lA^^jjjððÃãܹsÐh4îURçÈܦ;µ sçX³ô“M4žë„ÚúªÉhÆ’_ßÍ_mAåEëTqKK+L&rŽEpp0´AA8›P€çx MJÂÜ9s0fÌëuc["d0˜#ì6"¼š´±c0zäˆnßÓ^§’h··ë¹sfƒã8Ûhл†ðÇÕùÁß߯ÇÅ&ËŽ¼;~y;êë¯`Ïwû”˜Ó¨‘¸ý?nuR~÷‘„R©è&÷§åðÏ>û, ==cÇŽÅüùó¡T*qçw¢ªª ¢(âÁ´¶[Z(¥¸é¦›º9¢ûï¿2™ ¿ýío!—Ëñì³ÏB©Tâ¹çžƒÙl=>ÂóÓ8 wF)Úõ-ðVT4AÁæF æ Ñ ¢¬þ~jáÀLF#Têî#„À -ÊK/@èЈ]ª¬DRÊp»I‚ƒuû¡ÚüPZRˆºZ‡¡ËÌ&”vF3C“ñÑš¿aÿƒ>|ÆŒåTÌI&eEÐhŽZª«/"eØH»iBB‚í¦·ÖUƒ!qq8‘³×+#)_0bä(„†E8^Å>§QuÚ@H}Ô5"*…çòæ• Íæ¦&‡„2ËÀ`\G9Ë7ÐÏžÙãmmm¨ºTéÐàªTjÄÅ't›v“$ U—*¡×·ö=" "¢¢¡Óé<ª„³eU*UˆOH´•Õh4¢µÍâÂÚ Šˆ‹‹ÙéF%T]ºˆ¶6½ÃÑOdT ´Z-ëu^„RŠšš456Àóµ=‚ÀÀ DÇĸ–Á`ü¼¸óõ}ö×0úö?é~=ÇM…N„ï磭½Ãå߇…ê0zd jjëq®Ðu›0q¸¡ÛÈðŒHŠê˵(,rÞöeÜ0 š>z F“ãå-6ãÆGCC3òœ°C£R‡"""¹ùçÑÐhÿY!„`æ´ % Ÿ°›."<#S‡¢úr ‹ÊÝ’9uÒ8¨TJ|·ÿ{÷´ÌY¾6ÔVvû¬y÷õ®¸iôÛ=ŸÓ¶Ö"ÚÑ^C¦j´¨Q0R£`¤¿{æi[:_|n]8“ì ÿµüAŸÊéúÜÿ°K¿Û²éO´øÌvêTú‰£iÑ™mô¯o¾àTú7_YF‹ vЧŒë3LÆÓ y[è÷û?é3Ý¢ù7Ò¢‚ô¥çq[æ‘}ëiñ™m”çy‡å_óîë=üÝœå¨ÃsÍMçQßx-m—`0éaH^××úe2 D'ƒÁØ‚þ KžÑÐäsY<„†(aèð­,ŽÂÃT0t\ñ©œˆÚë|–hˆ‚¹ÑzÁ±— A!7B°½š¯\è´<Œ^ì¿?¶gƒ÷tjÕ­ä…ðrJ%¨¡0™Ú=«'ñN¿Õ)A ‡(Zܳ <,‡ÁÐìÖïCÜì·?Ú"×úNˆNIl‚$97úä¹N;dhtúYQ*Œ°8ñ¬DDø£££Î±~u2Œöõàß·Ìð0˜ uðä±Ã©ÑêòbÄ…Ë¡ ¶@Ò¨ SHày!˜’™ éñÇ}fü† FIQãGá©ÇÃ|â#PZÜŒ˜èáxʇõ€˜¨”·@§‹ó©,m?*JõàH°Ïäð‡ªŠ46ŸÉ0Ô¨©¾‚ï[j ƒæM'’ˆ’¢fÜ1.¥E͈ŽæV9,5Ê.7âÁû€Åâ¼n“£PRÔ„ø¸.É¥¢e¥­¸÷ž%0™;ÃèÈ`”•´@8Ä)9‘¡I(.jAöœÈœÕçrIÕÅ4\¡}æk­g3â‡Ø¯gdXJúÙT_‹£ÇŽx·Ú¡#ìh3 ½­ª€F¨åkB¡ûçe8ž›‹wÞ{ÏgF\·uõm.ÿ~Jf*BBbëŽíضÛu›0nŒ*.á½\ÓíŒi£4_oÛŽßwúw#†ÉQW_‰¿­ÙV½ãQÛ˜Qñˆ±c÷üûë\Ç/ª_",L ŸnCIÏ Ïs˜{S öúþÛ>ûõœê¸žjå/®Æ†ÛPRÖSæ´Éÿ…ËužÍ8œåeÖ;í(½ê^;H }~‰)¥œLŠþ¹À&¯.g¥ˆLe÷6 ïÉ!¯ô±J”¾­‘»Èyñàx¹Wð2µWû/¥áT Ä{e•ˆ œWzˆD9ð2$ëLA¬õô°Täà8™ÛÔ%JÀñî—ƒ9ÀñnÚ"µËz´>'¼ÓÓ„”ê'Q¯p.=§tN¿25¤>ò“Ð)ÓNR¢°®x€Ã¡(Pˆ’Â/Gäà98p Ä·ñ xÈärxíjGòg•×a& 8Èd ëbˆOåÈdJp¼oåÈdJp2ßÉày8™o†ãäàå<@|Õ½ÙG x¹Ä‹ý†çàäÞÑ-Gxðr™Çu&謧‡ý–ç:ñÄ&(Üþ=Ï+À»Ño ¬¶ˆ¸hûx^îR[Zå8ߟ\yVx™Â¡Mè²¹}¹Ž“—óvÝÏ{n{:BƒI‚ÙLA@!“)¬×Q€@ôñÝmÌÆÚ?ŽR±Sžï=!…³±Ýçu£`6µÁ·ƒj ³¹ Ô‡·> –HßE×çu`îö_“¡œ߬(¥0Û½ÚžVÝJ^©½D-°à<|†($XŒí€èY©ÁI²À]Ofµ ínÛ‹›ýV‚³¡Ãå>)X Ì¢Óõ¥°ÖNÚ!I4A0Éœ*—ÅÔîÐ&ühs‰ƒçSnW¦`n‡$x6sàxDHyˆ"ŽX/@•G©× G/ï)Ôý65j•§EÜãGú¥n2¹”H¾­‹L ßM¿r¼„÷шÈÀÉå^Ÿ'à Wª!yñ ÉU^Õ5Ï+Axâ•©Q¼B Éãgˆ€—«û-Ï+¬#B7§F‰í9=Ò­[#B¥ ’‹}’ã 2ÎNmádà|Vx™ã~jÕoßË_‘ƒ—Ëm§zÊQÂÓÉI‡?7™)LFf³Ñb†D%ÐÎb_Ô(%ÀÙU€÷åYç£%Ú²H§,_¯vÖÉÇï"õ­Þ$[þÔys|0.ù ÿR¯÷Q$/=Ì% à<¿ÛØKÏ¢H¹Î2¹YŸN}»[k¿u]~—-ruݺKžóéáRýºžgÒ;Ó~6;(õµFØù|Úê Ûãðé,", Z8H’Ôé‰uzÔÇ=$ɺøKÁ£?hÿÉ£”‚¨/±=PDîSo+Q’eˆ”€r ëæä ¢è¶!Ìký—S€RÞëí)y±ßHgíÔ›uötj 󸞒D¬›)Ü•JdÜ´ "%ÖÍHnÚ"W劔tÚ0âBr^Ï]6Ù™"ulwœ±¹?úÎþËŽ:vÉNá$H¬o'µ½¥øz}‹ã8p¼ýu[Çqà89@|/§ð¹,BˆU‡¾”C¬Óð¡#äy…Ïòç9ÀÉ/oþú±?ñ^nO¥WÛ“çåVÝzaSÇñ ^¨3!¤sZSæyÝ8¹ÛŽp¯p»>Ö:¸.Ÿ#îÙ¢å9[?×ìÇË:Û—8Uê _â„͵ÊTØ•)ó‚mpX{*Y_d Ád $ŽGlt&Oœè3ã7rø0ªµH:C€ÏÓ¨Ô$hütHNýDµOe MˆF­Eb|2&OôÝ4,D J‹¸˜$Lžè›«µd<U¢Ãã|Ö‚ÃЦ‹ÂÄ 0{yÓLlT•H“†¨È6¯å›š2~: O I ö^{ªƒ¼ÚžÁAáhkoFæ„ 0›=ÓíÐÄùcdêh¨ÕQÕ3À õŒ†QhAú¸Т7ºaƒ¨Ö"9q8Zݰ ÁAaèèhÁÄ `rA·#S“¡ñÓ!%i8:Úýþ]¨.”š‘qçÎÛ&ÆG_e‡¿‰ŠG F…´Ñã¡ïãå’C€*Ql¨Îz&' G»zÚdŽé]¦‚—Ãdèð̆9J`±ˆI$?.|vFnE‹¾‚J(¨*˜|*Ç&O ¤–~‘'Š‹Ñ§²DQ€’€`ð™J%¨ˆbéð™ Á ‚Å¥N½EC„\4B,^-?-Px¹?‰‚%D¯¶§œˆà#‹çº%’…d†äaÁ%D‹gõ”A„L4vö×ó‘D¡Ó¹÷œ* ‚묃+ºu×Éqõsâøw’`’:o‡8ˆ‰&ˆ‚¹ÏôÇAI$[Ý=©'G«LKï2•œ¹äÙK¡CG(XA %”ÁÉž—çe¸\S‹ã'}sÛúS´êG¢¨¨ÇO–ûܪ䴶¥¡¸ø,ŽŸ,ñ©,ÁÜ‚¶ö)()=‡ã'}5'.&íM(/?ã'}ÁF.·Æ ¬¼Tä³þЪ¿‚šš2œ8u F“woŸ¸9k,ÌòÏä¢â’÷â‚F…)1!=…ÎàøÉK^ÉsHtÚ;Q^¢+RX IDAT^ˆã's½£ÛÖzÔÔ–áäéS0=Óíèaá2ÄçÎç#÷lïq&ÃÂÂÐÖÖƒÁ`”î¥z64Î@{ÇeœÎ;+®¼ ú¶ñnÛ„–Ö+¨uC·j ­úÑ(*.Àñ“ÎßzÑܼµµå8•{ ú6ÇÎÁll†¾ýF”–žÃñ“Ž#ØÌ›9¢¨@~A.Ê+í?+<Ï9eT¢ÃzΛ9¢d_¦(þÄÃÝ÷Ž¡(A "DX@!ÀºÇŒöËz*QXDÉî"©÷åI°’O6dôZ7A‚¯OïSJa±ˆo^pfæ€úpÍØb½¶³±çƒ$A”:7ù¤‰Û°¢Wû¨ ˆ^ÛU,I±÷~‚+V ..f³gÏžÅêÕ«{ Pê•z ‚QòðùD·m ˆÖÍX.ÖÃj‹D—·æ»*R Á=‹¢AtîYqÆ&H”Â"Š}ÚAQ!ôñ|zÃ68ž%–ÎÍd8ÎlĺnI|¼kà @úéøO€~9?AxBúEÇÀÇ:ä‰oeðñY? ¤óD¬ò÷zkžÄ‹yrÄ{'‚ !àìÔù™gžAzzºíÿ111¨ªªÂÚµk}Ö§8pÔ#u{Ô†éê·ÔõvæˆË?ã8ŽR—ôfm/ô çªÃ;awœÑ/!¤O™¼ì›ãX£„Gä DB‰5Þc—6|í„MæèWĦ_Ú‡sïz>©ÝþË{Ø6¯Œò ’€ „X¬#BŽõR^wP±ŸFƒÝäÑ~‘%‰Ôëž{Ÿ®‚ÏG„Tòm](µÊðUæ¾ÉÛÚÆ¾Ñµ7;õbTÞëÜÜÜŒ¦&×îÞôʳH=µ!žÙ÷û­{}‡ºÑ—%É•¤óú¤Ô™~eÍö¤O™Þ°=¡…ˆ©õÁë<=B;‡Óý°–&âóÀÔÝ”JˆÇ‘Ì›,Jàs9”Àz˧φ¶°Þf샮@PŽóMÞœ£þK:ÃépvèH ñª®­ýˇþ9®Ç™/QqêÔ©†2//ϧÏ%å=k[‰ãÜ.‡­o¹«GmEçsâªr¡?õÖ¾ž”E"}×óÇ6$}ØÏú¯Ã5B¹L™Ì€ ’ ‡$Š ¼PÉã:ÎX?‰È|þÊÞtŒHdúc³LgÝ|½1‡ý¢CJd}(C"¼Ïò§¼÷_숾ژð€¯úî ïÛPB Þ«}Ô›º¥„@ßk׬Yƒªª*„„„ŠŠŠðý÷öï ÑÃzRÂw¶­ûmhäCÜ—OÜé[öõØw_æ!¸´nåZý(á:ëãœívÔ¯h§~ûÚŒD ×gRÒUg:B^$5@¢°mE x‰Bâá³]|WW‰òýÜ»ËiÈ:ÃaõÇ"!o•çkY„õAø°žm¥•|(ƒ(!I¾™… Dᓼ)ä(b·Óâà]_¸d×ÀXÛÓ‹ý†SB’¼³èO‰¢³Î½çµsçN§'«(Qž†j#ŠÎ~é¾#³†swT×Õo]·}2—ëïêsHIghDÊyÿYáœ( é ïÖ—}"ŠÎþÉÙѱÊcÛãК% ‚E$`VÃÒf†dÔÑ9. O=þ¸Ïl_bB,âc‡á–…wbì˜øš¸!Q“‚EóïÀ¨W|*+2"1‘I˜?÷v$'Ýè39Aˆ ‹Ãì¬[™éÇ!$87N]¿Ñ>j›d(r<ñp4Á»3éã2 Tq¸ïš[ ^ËwxJ’â’qÛ-waBzs¿oÝ‘ŠÒòž¿[ºd š{Í3°³=çdÝ‚¨ˆ ¯”3>6*…?å±nÇMŸüêK0cºÞí|5?öÛHê9bøX˜Lñxè~-::\??$6qÑÉXtó/12Õu›0$j¥ëºMˆA\L /øÆŒvÞö MHE°6>îT” ˆðÄD&áæ¹·#)qšãge|Ôj÷Þ­ìóY!„ D§,€ŸzTõŒF¼ƒzþ(SÑ«L?µÂãÍ^ŽC¬QUÃСG»ù2”j9rÇNÃ;ï½ç3#ž5=ºP6ý.ö¹#œ:i<"¢ÕزõŸøîÀŸÊJ3IÉ!ضsv|Sà39Cb#‘ž1»÷lÆ¿¿òÍaw¹\†ùó'bß­Xûñ!ŸÈÈÈHAnÞ¼ûÁVÞ=P ¡Ð¬ûä3TT6y-ßÙÓ¡ôŸ‹ù)ŽþPÑ[­<ÕãÛlØ`wD C±kÏfüûË“^Òm2róâ½¶9–«/î½{12'ŽÆg›6 ¯à²ÛùÄFG #³«ž'ÜÎ'!A‡æÖJ|¸ö \ihwù÷“'¦!*Æ[¶ý {ö»øb„däŸq]·3¦M@H¸_mý û9oûÆŒ‚’ÒSøÛš-з™§•‚äaaضs¶ï>ã0½Ÿ¿­ŽÇºO7¢â¢ýg…çy,\8û~6Ø· Ó§M@H¸_mý'ö*²#S„V'³+3+k,†t<5ÊY Rp Þz?ñçã€Ñ<d¡?î´®×ʨgOàªÕjDGGcôèÑ8sæ .^¼èt8$ŽrB}^7‚N9N„wâ8‰‰‰¶úÔÖÖ¢­Í¹Ø›J ÁgõPðù;Ø…¤¤$‚€òòrÔÖÖ:väÀ‰¢×wŽÊ8¾ÏþTàs®úî_úlO…“íé´n;Ûλ~e/I ¢g#KÒù|xÚ§äÀ ‚ÛçíÙ B’’’>+ Ž‚¸ÑVV¹"èU£Hgd*8€‚Ó›\{³Cñññ;v, Q__ßm·¯UŸ¢SúT^U÷ððpÄÅÅÁÏÏÅÅŨ®®¶ÕS E‡Ï§=™ ŽfÏú‰cOFþ{ggUuåûïÞûœ;ÔŠøûŒã%\¤pk¢t:Íe—]Æç?¿'ˆ=òÈ#ÜvÛmø~a¥X4 ×…U\×G‰ÂO‡\p]tÑîŸ_}õU®¹ævî,|Ä¥>Š¡Ø¸PŽ+‡ÍÃgϞ͕W^Icc#Û¶mãŠ+®`ÅŠ¢OBùˆˆ2[á“t}$~䢋–1~üžæÔkÖ,ãÞ{=ò𰏮Æ!Ù÷”Ž+2‘x³^Žçòdi øTeò)Wf)¹ü\LÞ>¾rñÅïþùµ×^ãꫯÞÇW¤«qÅPÑøFh’ŽF} 7 ¦Èé2l…¼ÍŇá8tÊ)§pÙe—‘HcºººøÎw¾ÃöíÛsŽè“pl(_Q®F1Ä´iÓøñLkk+}}}\uÕU¼þú빘ë#G‹ñR“Pù1Õn—á" n+W"UP\:ÕKpóyŒóbQ*\ ë~ûí·W8çœshhh‰BÄ?ùЃS@YRʽ’ ÀÑGÍìÙ³ÃáXM"Æ [4.Î>ûìÝI‚"î3Ï<3„\%#ï\c¬ÅQ‘§ÙäÉ“9ûìÿ±ÇnÛýï«_=s/ö•³Å ƒ#¢s>&!QÔÏr59»±%òRZÔÇøB앎:ê(æÌ™3¾Æ-¡ÔÅZ‹T]bŠÀ4hÅ”B`‘bÏTÔ /¼pw˜2e 'tÒ^òt¥QOo1ø$¤àôÓOßêëë9÷Üs÷ð)÷ð9²4®ÊàÄ|kÔæŒ[*P*0Î=#yÇ =˜Jb cD)ÃárÈ!ÿßð&e²àIF¹üH•ˆ¬_åÈ<¸X›¿‰C}}=“&M*ñN!„Œ¡ç@0;0Ÿ\J“y0§/JYK™ˆpµ@ÊĨÇ‹ñSæm@!œà†v_G}B‡ÅèMÈÜL[Šž÷àΚ„ÇÛc£S¦LÉßég·<%Bº!ŽÑƒu‰4Ó§O/J¾#ûg~L1<º N£AE(Tø[5¬ŒýJ¾ÑYp¸ctx_lˆââ·Þz«<,cñÿ„z?WÓ'?¾ j0ã"ß‚/œ¼Ç}}}¬[·®´µµÅ2òÁ¼Z› ¾)ŽK‘¹µßÖgQü‹Q¥Ö_¨² ô­ tnÊì%§­Åªä¡ÃÆX<$öc:,FoÚÈC‹kð»q—/_^œŸ„ä÷ãq¨«««àm†}¥^,¾…þŒÏêÕ«G_ïòÙ?U^ÌRe\T"T¾‡4k4¤5X«Ñ:‹5ñ^ô°X´ÕØ1;mÂá­]»–'žxb¯ßÝwß}Eµ‘ÒFÉ®Zk¿ ‘c¸ùæ›÷úÝ‹/¾¸O7|äi/ÖòK_û×_°`[·î¹â¾eË.\êøÌæþ‹Ú~ÕØ<ïkººº˜?ÿi–.mãg?›ÎÒ¥mÜ~û{ÞÇäM\~¤²–mÜ[e•+KŸZë²{ëïŵ–›nºi¯¿y饗øýã†|?ç¶xþÍÇbŸµ–¹sçÄ ti‹Bò¿[F·Þz+™Ìž÷²ï¾ûî^µŸÚä|%ÄÛ÷=PÁ݉?Üsƒ¸§§‡ùóç,‘ù£ (ðO“צ<¿üØS¸ŽÐÝ ¤H¡‚^£Vc­†˜;Ë)Ž-¯inQx„ÆËd2Ì;— ìxµÖ‘c•yR…t-*΢E‹X¶lÙîŸ{{{G·×“cQ‰ø2a°þè<¬ZµŠK.¹„d2 ÀÐÐP¨©@º”Ýàyßusö›§ér&SǼy§3X¼xðu{dëÎ:x*íðÅ/œÃôûcoÛ6•'ž:î¿=•sÎøªªFÞ66ÔÒR?™Ïœp‰t4úìlÝŸôœ$_9¿|Ùý©ƒ™Ü9™Óþê\=¬·äu"âsÚäƒÁLáüs’¡êê>IS¦Œ§£e*'Ÿt&ã:‹ mÓ¨š“*Z¶Ó§M`\ëþüåÉg1aò¦ÐŸ›4îš«¸à¼ºPu‹ãÇ·ÐÖ4…Ïø%[ Ç¡ÙIScгÏÐ|4J]¦”’†ªñó_` ;µ,>gϳ*Y…ã$âM„Ö„µ(áe¬ Þ'Ô×Ö3±³3¶ ÞÚÔJB¦ijlfbgüï ÛšZIÊ4MML쌷õY[K#I™¦¡¾‘‰ñÖÖV“RiêjâÓ•”’´¬¢*UFM¢†~·ŠÎñÑw–i¨n ©`\{;étte - -$dŠÖæV†2É}þÿïߘ<âçÆë ®&=²>kªHÉ4µÕÑé³&YK¿l›êšHÊ4m­mXªK·Ûˆø¬KÕ“ÉÂøŽq _†ÕÖĄƆÒbBM¢–ì¶µ©¤ŽEáß“Ö&kñ]Œ7.Tg™ÖæR2MC]¸8øŠ £­ƒTjh”f¸˜Ðº;æ6çå³f•H2Ô¿«,»-\P¯@ ‹§w`ÜœÚF™Â ^xåe~ò“ŸÅÄOüôá4ÔŸÍ ï๗ß=ôlÚZ/`áCwðë»bÅš3kûMþ&<:{ful8;Û8|v‹y7<ñN,®ëpÊçfÉ’ùܵð±`vH¯½¶„¹w<Ç`Äeþñ{—PWësóm‹x}_dëþõ_G"q2óÜÁK¿éiûSÀEŸ|ôdî-·Ý#®9a|‡ÏéˆTŸ‡Îjçw¿}šŸßñlÙ²ýú—Oåøãæ®{îåo—~Š3a|k$|Žkû¶o{¹·ÿm(úóÇ~jm_㡇ïäW/¬-M¶¿{šŸß^œl?{Üa45žË ïàÙeácßÓX¹r?¿ý×ìÜU¸Fùƒögê”4,šÇK Ç¡]~1 ð‹Û¥k}ï(yCñÅ“f±dÉýÌ[˜¿ÒgŽ=”¦Æóxpáí<“‡Ï^~1£`žpìíè28L„Â5AÆ„Êh^0š‰ø»¢8RŒÇ€à‰ƒÉ¼–ˆ·á ÐNÌc˜àHëúnLëËÜÚQ7w¶ßüëþøÁŠaúy“àÇí&J}*®R±ËRJÉé§ŸÎGÁöíÛyýõ×yá…F¼xŸÁ÷‘%kvø{Èý´TÛŽEÅÆ‡bñöàÈâä)BÆ„52ç#£ÅÜB˜ ʶ߂‰ÐC w_”Q ‚Òì±ÈM‰Œ›k Húñó`Å=˜W f îÝïÈCm‘RÄ2_XÚ a„Xï…ì÷úÜ¿ð2ò‚Mc"« x¶#ò|É%—pþùçïþù´ÓNãꫯæ™gžÙr#P¶0Á…Rýlø1¦dÛ¶Û"=pM‘üÚ¢ø•99‡ý~Š𾢠²À4"ÆË˜6N˜_0«cF‚/Lnˆ§@HÜ 3YHA2•Ä06õÃxqït!(LM&“Xaâ nQÆŒ“L&‹¼¶]¹‰DîfYôŽãàºNÞ2‡’wZRöku„ê lÝwM$(%ˆâ)C)E"¹/Ï®ëŽØ¥hæÌ™yùL$eó麎+KN„B~jJôŸDÂõFdþX”‹Eڤ뺹›¦![.æ…­pÇu0Ö¹˜ Ä©†c®SáºnÞdL$(³Ü4Äeaì*ŒÆÈõ%î‚zaÐ"‹›zz¬0˜1³Â`dáĽW³•/ŽUY¬21®ïa•K[?#}Œ´‘—O¡sö$"Ô¦ÅÊhõi¥‡Q:’c#|ŒÜ—çššjkk‹ãTzeói¥‘~É;Þa?-õTÞ*+‹ïjÐhéQlß„O‡öKÀ!ã‘FÊ‚§?6dL°1w4>ÿÌjĆò6 š‡°A³Sm4¾öñ}£ýÜ65æàšÛ’–[“Tžˆ4pÐP"vÞ,¡dÙOLí$l“Ö’×—XiC¾û¨ªŠÚ5[eË>^1HPNÄgÆJe“ÚaÙFñ1̳üÄ»¡žžÖ®Ý÷²I¾:Ïa_,Ûn•ÀJJ>½Úí§%Æ¡$VÙ¢Ÿ1l.:öà‰ð8ÅÄ!! ¤¯GvU0aŽ^GXÈ?wÛo¬;B£ÑÆ¡ïãé!„rÀèH|ò<ΡTZÇÝšú?ÏJ”ªÆÄŽ%‘² kâÝæ ™›ˆo}‘B*ðèU\ ü W.¢êLïý1#>á°Vá8Õh]"´¤ŠXŸ"… Ñs­ƒRU½¯,úÓŸ¢”¢¹¹€Õ«WóðÃç=\‹†Ï$R¤JoiU.&”ªÃ¦J­B9U¹ÉìEâ‘ Ê‹yáãP)U¨°ALp øÈ0¾,àŸn~ÿi„MÆ›…“FØVK´çãke‚ù^q_*‘B¢¬ÄUcs6*…DŽ^À›ÀUn¼ *H…±ã($®ŒC"q…[`Gx%pÙÇ~þ4~T`Ó qˆþ¶°iN„ö$„@YI"BY+‚õ¢xç?ì³j„[|½½½\qÅ¡í6ð}·|»NɼI!r1Á-Ù\é}kt×)RÏRäü$$¿b7Nh~ÔîÎ3£êIB&BÆxwL`æñO%Ê·ñùËçÛ…ßýì^¿\¼è!.úÆwøú…§sÌQ38púL&M:åó‚uëºÙ¸1¾,õµLßʆéé‹oÖÝ05ÔU3qBÝ7²½w0V¬Úê4S÷ë¤ûÃlÝ>N*á2sÆ6~ØÍæ­ý±`H!8lölÚ¼îM;cÁ8dæ4vîÚκîž' þéÚϰfí¸½~Âñïóío¼2êÚS&Çu-ë7|Ä`&ºÅ–¦zÚÛšèÞ¸‘Þ™ÿ´ú–íúît™S#Ƶ5ÓÐP͆îMììÏþ‡ó9cÿÉøzõÝ[ÉzÅ?¸××V3yb¶•fÍÜŸ]»zŠ–mc] &´åbQøØwÐŒ© î`}÷6|]¯¦*ÍþSÂÇ¡)Çá&ë7lÕWpÄœ™|X &„á³æìé5,xä&®ºqiÁ©'ón¹‘/uÞ^¿;ÿÆ/¼#4ÚC ƒgúñÄV’Õí8N )Ï¿ü<ðPlAü˜#gñ•/‡-äå×ÖÇžœs }ýK<ú؃¼ø›bÅš9}?.ûŸ_añ¿<È3/¬‰ g\{ ×]ù÷<ùôý<ñôÊX0GñÀ×óì¿/dácŒã7ü€wV-cÞü—Á2ÁšµmÀÞ‰ð­å˹òÚkG]ûïþöËÔ7Zî¾ÿI6lÜÙw>ñø#9ý¯?Í‚…ñ»76F£Ï¶f®»ú±äéûù׈ôyóõ?`Å»/3oþ‹#ʶ:ë¯Näè£àÞûñöªJ^§£­™ë#àóŸ¾w)ýƒ˜7)Û{ŠOd‡ÏžÁßþ·3xôñ…¼ðÊûEþ¦ë¿ÏªÕ¯pçü*¢ þèÃækœÊ˲ìÕðSUþïÕße]÷™7ÿyv…x™1m2—ûküò_`éó…ãз.>Ÿ¦fÁÝ÷?ÉúîüÍ'”’,¼ëFž{~!.úcY|~ëâóhj–y1ïºéG”û2¹p¯Q•@‰ÑY ƒàj”Ô¸lÚ²™7CŽ)…:Ûªñ2=¼¿v%o.·Ó @KC?ÛÃ]+ysùšX±’ÊÇø}¬ÿ`%o._ÎŽ¾¬ÞA÷ºU±é*á:(ÛÏæîwcÃð3}lÿ¨‹·Þ^>J‡ŽeÀ‰{ý¦§w=½£§¾ÞÍ(¥YµêmÖ|]g™SZÈf¦kÍ Þ\̓܎  wÒ½>:}úÙ@¶ËßYÎÀ`y‰ðÓGNgh ‰÷V¿Ã›ËKï,Ó7¡=>vm£¯o=+V¼Íæ­ÅŸ¼4Õ9èl/t­()& Ûíò·‹“í¸–4~¶‡÷×®(*öe†zéÙúo¿³œ¾…¡#²¹8´Š7—~àèëÙDÂ…U«Þæ½÷ów–q”BÚ~6o\=ªþ:šÓøÙ^>…ÏޞώŠ)l´W–Ý~G($j¸TBH¬Xd CkFÚ¬ßó 2Ú`|‹ïÇgl+fÞ¬µ±ãXÀ÷L¬¾oð 6-þ?c†¯~bmñM$Ãd?NZlÄöd­E{adQ„l=öüHšøZc|z K~>‰„Oík´§K®#4ÆsQ}]2¾ŸÕE_D l'ø|QŸó†ù'>ø¾Áø„º¢=ƒŸõ Êׯö5Æy1ý8e'B£³há#•DJ‰’2°R!cï.£µÆó½ØçîáUãù>Fë1À2xž;–µ–¬—'ëeÊ~£®ŸÍ¢}¿@Ñw¸¶„Dàáû6òÎ2Ú÷ñ´Žt]ƒ>=/› ¸6ž}í—}‘ÎZC6ÿð<­ËH„Úàù>¶Äï‘ÍfüRb‘.žÿ@—~h~ÑEÉ9ð5…Ê",Ùl¦àºÃ1~´¿ó=í˼˜Y/Ì\-ƒdaÇ33cÚ€5¹búøgéicƒr± L´–c'À·cÛ6ñ󷞌5Á౞¾,`…@ÄÐ#.°'ùš"Â5µAwýüÙL —ô…Õ֔ͧÁb…,ëFl`ÛªtÙJU¼dø%àk±RÁ¯(ÊF-#D¨æÚÚÀgCÅ'5ªM†iŒ);öü´ö}¬¶íaµ6™ NÅH¬·|Â"Èúé$ ²<Ï"äØ`ùcàˆ˜q<ß"T|¾„Ë×¶m"â–BVH<ÏD®ã¨eíi°2Iù„EâûDà³9ÿ(“OmUòeŠ •®C_“›*+Æ$>ølxð¼ðñ!ðÂW‚Ø]ØN‡c|² ¦Ìƒéi@Æ\GhŒ‡Î áy>Fü¬*‹RNÁíqÙOªÆâƒel ê…¬1Ø1˜>a­ÅÓ‹Œ'k &fœ¬ŽÃÓ?¦õ}mð¬Š|·©%kl¤:¶9Y˜mÔ×Q3m ž5eËrØ?L™·}mð)}B½±¹T¢¼=SšÝ|–"?ëi“ÓeÈD8óBÆXm,¾%”~½1A‡¯o Þ(˜žÖhbžPŸH$Q©RJ²Y'ëa„Õä|•¿IDATÁqUŒ¤$¤]6ÃX–*WÉŒ¤ 3oB@•+‘Ä‹S•P±b¤‰+²ÄÑÖ/á’Ê‚ö²#-U®ŒÔ~OÈ×L¹ Gx‘\s$¤\‰5Ù²í6ðòê‡“Ž +uð:§”$(+&”j·¥Æ¾”#q¥GØ&Ú2Ç_X9»ŠÐ¾&î(‘ãsù&TàŸ6fÚU8¢<(˜}_cµ &Phö4Âø4µÕÕt´·Çüêš2MScíñ¸46¶ dŠÆÆ6:ÚûcÅjjj‘¢¾¡Žö¾ØpZZZ±"E]m[lºrC’ššÖØ0¤SE:ÝL{[{Ùµnût‰„ µ¥¡TdëÖÕ7#dMít´{‘¬ÙÚØM]]tú dÛDG[{ÙƒykjQ²šææ:ÚEvÛ”ϧ›¬!©hkmGªâË'šZ@¤ill/)&H§Štª‰ö"eÛÐÐŒØ>ö)·šT¯ª*[Dj‡RUõ¸®¢µ¥ƒþÁü¾¢”ĈTÁ˜ÐÐØRÏTº×uòbÆ”wrP°³Ì=ï vØTfÍ<„ö?)"wc´¯o};âé$PNP[bÇ®A†<⦪”K]mš»éŒ/•phl¨fç®v ćå:’Öæ:ví`G6 tv4±«¿ŸÞñì ǵ6ÉfèÝ1HÔ'òÍ 5aéÛ9ˆçGwÊQS•¤º*ÁŽ]ƒe'˜8õ¥lëkÓ$Š;Ê–~ãÓU’Ö–òùlk®CkŸÞƒ%uÍI§\êˈ ¥Ê¶*• ®6U4nGK=žŸ¥§o(¸¨ShÇœph*"57T±¿€¯„ aø,„YeßãÑÅpÝ­/Å×YF©Z”¯œuwÜÿ+ž~qu4úßÄ7\Ìâ§^à–ù¿‰H¶ßdÓæ üà†%ô–—\/:ïxN:þ æÞý¯ü~]ÉëLßÄ]9>QŸ7]õU•᪟/áÃ-Å?´ÿ©iüïKOå¾GžáÑ%ÅÇ„oþ&›·là7.¡ ¼lO<ö@þîoN枇—²øWï„þÜ=?¹„;¶òß÷`>Ūµûv+zâžïÒÜPW–ÝL„[z<œ®lß¶‹m½> õýHWâ“`MצX“Ŧzyÿà ecŸ¯ÀGÛw°vC/™lüX½}»XõþGd¼x/± dxsÕ2~| ±±¼úÆj²:¾[£¯¿õ 5±L¨_ñ^7µu3"Ý toÚF÷–3Ñ­;0è3ëEwÃõwo®¡©±&Ô¢u­ßÂæžid2ºl>ÿ¸j™2ù|sÅûL›Ú‰Ö¥ñ¶uûÖ¬ï)9&¼þÖ{45Ö}±pËÖ^º6ö1”)îs¿_¾–qí„-ãìíÛŪ®ðqhå{ÝÔ××âyê­å7XW & ó™É„ÀÌ㟯¾ñ.ÉDy±§àÑh…*T¡ U¨B ”ïhTVDS¡ U¨Bús¦ÏfÎ<;n¾¾" U¨BªÐŸ Íœy`øD8ã 9Ì8hNEjªP…*T¡?yªV¨BªP…*‰°BªP…*T¡?ÛDwãì U¨BªP…þ³’µgë+_:ÿŽGV6‡ªP…*T¡?#2†­¬|éÿŒt†.ù@b}IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/skin.properties0000644000175000017500000000024011273045225024464 0ustar julianjulianname=Ersplus author=Ersplus http://ersplus.free.fr description=Default tuxguitar theme. date=2007-01-29 version=0.9 preview=skin-preview.pngtuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/song_properties.png0000644000175000017500000000245411273045225025343 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<©IDATH‰µVmLSW~îí÷ím«mQù-'Ý”ALœ›ûÁ‚J"¶‚ѰM(.3fNX&šá ~%cÉ s $þÐl‘è’i¨³É2²e„aX63œÒBm)÷>ûEP—Å“¼ÉÉ9ç}žó¾ïsî{’xšCû_A˜ À*WH^¶o ‰-œÕ\¶ÆƒA7¨ÑhÆÒR“‡%Éðê´ó«DIÔɺf’˜hð’(ŠûeÙtM§ÓŽ˜Í¦Ñçr²‚o–­cîŠlîÙYÎæ¦9/aÎ0€eS|ç ’0œß”ÏÙ Bv“ü7Eƒ¾K£]NGâ¨;+ÓäZœ¡w-ÎÀ¼Ä¹øÎÿ#^^“ž„{© ²lCt<ª˜H‹V´¦oO7­÷®Gà *€ÎX A0 ‚°ôësŸ Ã÷ƒ¶3ÍçP´aQ„(Šxþ²ulsæàæ­?àÞ°ö$»ô¥€G$·ä*ª+ÒÝ>y[#×Iú@œÀ¬Ói£)©™øåz/¬|×~Bpt’9áˆVBɦ׉ÀáLÁòåËôZ­vµ …¢^|§à«)ýït´h ƒoMf&F ×”„Ädœ;ߊq…X˜’†ÓM-X˜’çW¬Ä” ¬~q-Š‹7ÁîLAÕ®j£N§{Fœõœ÷˜V:Wâʾ+âY’q*à²ÛíAŸ¯~¿ŸýýýìïïgOOC¡{{{©ªjœ Ðê´F“ö$E«YÍãÇi0F$NÎd‘Í’$ÑåÊ‚ÃáxHû‹-ŠÍC¡öîÝ‹ÔÔTDõQmÁÁ¸éÆ©ÊS!e\9@r(Îy"‚&“)FºéTëëë£×ëeWWíévz¾ñð0sGýÅf³uÐ<ô–&'‹åN{{û¬à>Ÿ••• ÜõÞ.:ËœÜÍÝ<Ñy‚&“‰^™ñ±N!ø²¾¾^ üâÅ‹¬©©¡¢(ìèè ”$qãŸÙn¤+ÛÅÒÒRE–ånÚY ”æææ§ƒß¸qƒUUUTU•wïÞá kžá’cKxˆ‡XV]Æ¢¢"*ŠBÇ3"ŠâÎGÌfóßïz½^†B!ªªÊ®®oÙø©Äü5fn=¶•N§“ƒƒƒTU•ííí4¶ HBÅ·óòòF& jkkã$Z»ï þ|í(ŽÊ,)ѳµµ5.Ú’’’ÙlnˆÃœª(UU›º»»GÚÚÚÐ××’1‰Þ¼ù+R~Grr&¾¿š…Í›ßGaa!`ll .\ÀÐЇ· ‚'Ó©¦Ñh*rrr‚uuu¼wï^ìvíßÂcGö³x‡@€Ñh”—/_fyyùI’Â6›­GÅ=æÏš¢‰ZhdYþíÒ¥K1ðp8Ìì¬z_/¦ßïç¶mÛÆl6Û«Õ: ÕjkdÎÚSfi4¥n·;¦¨3_œfqq±âp8FeYþË`0|àÙG5«Ç‹åVEE…š––6"IÒ}Y–?÷$ %˜ )”e¹ÀÚ™>OjŸò_…øø#ÿoü^nõDÖ¤‚fIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/splash.png0000644000175000017500000024630311273045225023416 0ustar julianjulian‰PNG  IHDR²E¹¦bKGDÿÿÿ ½§“ pHYs  šœtIMEÖ þq¼ IDATxÚì½i”dWu&º÷¹9ÏYYUYs•Fk06È€$a¼Ö[îFö¯ŸŸÛ`úáö[½VÛü–±{yÀ«6Í[زÝ`À6؛ф„fAIH%$Tó”U™Y™•7î=ûý8ÓÞçÜU2 ªJq)JQ‘1gÄßþö·¿ÿùCÐ?úGÿèáú/Aÿèý£Xý£ôþѬþÑ?údzõhô_‚þñ´B@²ÿ&p§@d/ ÔáúG°úÇ÷Š€&yÔ (¥KGJæ?„€„ˆîLsY´ÀEˆÏ(`öq­ô«Ôa€‹8HhÉa2r…ÕJ¸ `À(@yY\@„ˆöovDÈ «^ý£XÏV€âìÅü=ÀTÔm€ˆDìÇþði•Ž q²üÍ &r,4f«Iôä_ý£XýãRãOU@Åà€±!÷¬€"Äø2 Sbµ#XÇIG¼œê…Xÿ”<ûêãW°úÇÅS’¡€/$ôh@òÇ¢ö# \IÐÒ"wãªKŽ]HÞÈ)9‚¶eå¬PLʃ¤€{ž™aŸ|õ«\ì8…Qõ%™'M <¤€ÕËS¶… Ó‰Õ,tÂ{ôd鉒_YêåÊDeƒâ‚ä`z¾‡®>xõ«\˜0‚‚5¡ 9¢Ä° #@«»?Î}x1‚v‚€+Q¼¤“Õh‚eDFö¥§}žîù:ºÅ*K§ÍQ\ö>`õ8NÕ2©DZâT'œ®V” º”ÀÃ+I<ª1ÜÏñ¸§q>fŸ¨+8‰øÅ¢Wݲõ$"õa«Xýã™Â©zúƒuΧSaoÔ#@ôH€=ŠM‹0L{?w¯P@\üÀÉY'=J +ñâ’—©ò§¼ñ‹Œô…‹ù[ìƒW°úÇ÷O9‘ «cç.´“+Ñ ÝG»–dU»© úâU—ÁÞŒQüƒ(zR‘¬å)X ŒŽ¨…ÊÑ+rä{Vå"´µeŸvõ«|Oq …ð}‚KygBU!Hø1xŠÄvva$ Tì³.!¦Ò”…U,Kp-GŒ°Re"i #$þ`I<J Csaç{À¸âD®Ó÷9W°úÇwU Rüç‹ÑŽ&’Á`%ç’ÖsvG±cp§H™B“•å(õâX13Ò£‹˜r« ¨°× ”–„€Dì1Pļг2c⢹À›ýý d¶ú€Õ?ž®J%[eIýƱ§FeÇ´lLº…„•jX=[ÂsÂÐË«ê΂ j?âä)@J€ÁKÁ‘E7‹.ïÚþvŒBØ /Ï÷«ôfUæ•pQIኋْN!Æ Å>¬Ò>P­Õcç«ëB䙦ǣ04 ¡BÞ$F‘ÐIè¡Võ·*ÔxúÀ›H¨pV¹"f¡ðuoxP„Ò‡j-±D}¶Õ¬þQÃ]°¥Š˜ .MÔDNN£ªG–ÅÔ 2g:¤À„µÏ=Ú# %ÛAPaúÙbˆÏðà…èh•©ö²Ä~(š¤}Ø4¸»Ù¾µX}¨ª°¤c¬9‰&b„/ÌâÁšà0bYXYƒ"VׄÁ¦ær¸e J_¯Ã°Èaå¦WÂDÖò8(ψ£=¡/ -Ÿ"N ö1­ ½;ÕתžzÙ§ÜŸûéVª"{yR‹qÊ1¿¶œr©ö¸ó´%t°*}©ÊXE–+a©¢vLÜí‚ÌQv3ÂÃÁ ’#¹àà:_…-™Ô›T­«Tv Éõ}/•úub°žMPÅ ¯n<4Ôü´ÂÍ 5s'Ð@ĺ°’¶TR¬ˆ‚±¬JÀÜž¢¼’ZU*es/”’›×ÂlEÜ©O¾$NŒÈ-fÚ;Ü…“É‚ ?“ÎÅÐ ¢˜ JuÿèÖ¥Yz=)’˜ÑcU‹0q]a„`q_# 7ŠÛƒ d40‚Àä¸ /å‚è1/êQ>"¿ª»MwŸVG'ÁœÀvøüCDPŽy¹¢d^$Cƒê•doŠLØE¿™Ø¬KUÅT¦ŠHeMÚ.>¡§@4+Ê@L­X€~åH Öéçû°Ê…ŸÇcÝ=¿ \2d sæ•«œ´ X,±~¦\DF²„*”udï3ÔyÄYQô"Úò16b¹ûr麂%öa«X—¢VQĹ0m¤âŽU¦ªð“D¼O¡-åK ׫ºËØþ``R¢ÙI¾õ(¡)þ W…<`$f’Š2á-ì°@e{‡$ÜyÜÜ¡E¦àPu ë#,|½£½µJ¸àðºOµú€uÑ£U̪0FªðÙÆ^‡P“ŽiN‚ǪÆ9X©‰ô™ª:ÍÑ™^óÔc°ÒRVa/ &t¶†ÌžE¥ge~jÝ=ºy©^”ªY¹5‹Wç$Ùù’Ô%ÿQŸmõë"eU”â'QL5§ÔZ…Sѵ*€ªr«*ÉZ©]…â°’Y2"–ŠÒ8 (°Ã\¤Å)ÒáÉ‹U”¡TQ™"‹j`O•¤a!Û 7Îyü=DrÒ aù†‘¨žkµïÚêÖÅ$Yñ"ªAGôþb€ÁX£§…0­ûPHáXUቓWMõÁ}áúª"µ=Y¢ƒR«Šç°‘ÙÛQÆ2X´#ŒÅ2@Þ‡¼êDÒDJ<·T Qp– U+jqúµc¶eHÈKIW-’¤¶BPD÷ûÀÕ¬ ©@%ZULM"›BœPWç±Ë¦=òþ#B•˜Ü4=<”#ÖÑFª Ë‚7¶A)šrdÕ%%FüàP ðsr áñËrAã‚x&ýVò…&椧8ŠK”ÅamÔߨTd5Ÿ4úG°. 2×€ùå‘OÝ1„Š¡œÄ"å £Æ¡cHXÁŠ*´0ˆœN©E¾‚G…—8ø/¨íœêˆécô™ Iÿ¯à¸¢¡¯±RŽwDFŒmŸÄf…Ú>dxA©¢°wO=Hï^é"·Ø‡ 㠣ضú€uá)Vq~ÖÖƒã&T‹]SŒÈDðêzUk„é4FÀÒVU†¦Sè=RºÜ«jsG3?èO’U¹ª1ªgCaèÏ$`Ï€†lw¿^Zî)óÊ9yËÏ8:ƒ7d™«øSs†Á®wƒ¢+à/ÛǬ>`ý`ÑJÄzb•ûINÿ™DϤ„ŒŒW+ÈÏ5Çfù4- ±B,³ðV7f‰8à9¨¢xbtpO,Õ8®¢¥Â…¾Î‹+Bàãk o ]ûʬÄ¿=ˆÍXs‘‡‚%¬YFP•X©ƒÕ#UÝ:ÕŠ,Ñèñ È9êÁ»9í©Ð‡ä"”ðƒr‡(×Ö‰"©kkÌåT(ÌŽÏ*÷F!Ÿ•ë!‚Þ“Nf“è}Àz¦ä*Án(.÷b*©õÜ…I@Æfœp%¡³{•K^2¾D¬B¬*å\øgeWSÌAhHØ &íÝÓøŒ½J(ãÛ dø:¿~ØíŸ¥ê€r?‰Û…N+󞪰 ‘Y8i¬)tȇ¡æäo ÎòÜ0u³ú€õL+V£ñ–="ÆÍ>J‘+éb¤»ËÛ‹•Óê*lYÑJ,ŠU²xEP¾($ÄJëh‚cÕ±)ÒÇD/ªÙø2y¹Û ö.ìXÒ¯ñM8HÄj ²³™ /Ì„Yhª-Ñg`èí{Ž‚QþÝÃ÷µ,ZŒíÃV°¾¿e`••O¶…š ßEäd R×(a"„¡`}¹ÆÈ•žâ=ãP~æE˜ ÊS˜èèQFV,Ã'÷˜Ök±4Æ$öôZ‘ Eœ©Râ«.Iî¦7@.ü˜B2òñ.Î’kƳ.`Õ ²_Mâ¦05JY1‹(‹p=FÜø²ñ¬~&Ñ>d;>N>ظ‚ˆÖ‡­>`}o‰UE+0”oÄ+1DH±Æ7Ò±3¬q-Ä‚:õS:&¥±ÄV*íñ=bj ÝkÐ]øŠèõª—Ž aU,Bv ²2 YÝÞMê{" ajÐÝ ›g–ÉÇ”E’y£› $‘ÏB¤Ä.ôø¨l$&·!ÏÒBæƒõ ÊþÑ¬ï ­ªVºƒ¤EÑp F­Cä7*6‰D‰¬Å ©Ú½U/caDÑ0)ܰZb¼¢X=ƒëù!÷kàžy‘øvÀÈVFl옢¥à¼TA‡b7UܔСAânÄôv@J–!ˆžÇ_·”ø$Sì½;Ôű€fq#j̺dÖþqiàèÐ÷’U¼è­%¹‹ÉÚ y÷M ›ð= Š› &/á'E%$ÅJ[wˤPED˜EU]S1¾ã?ãT‹S("Òã\dÐeÙYnU«*õ‹Æ³ÁFTÅÉÓ”–y<ÇÝ“’kP‰]_¾8Û.Ú]ðY[¨Tcj„K»…›b·I@!Ð22âwDÄ/ Ï¶t§kÖ!wd9 ]( gY8ÐıáïÇ'…Ú9­·û€õ>šWnzÉó¾ÇÜ ýA¡À&d@‡#¨Ü D{E{#ÂTz]wBI°SþfëÿþØ}gŸ8zª™]þú4‡€[Ð{žèñ7¯t¿—?±~êìÃü*ßWQާÐýaÇ-WÍ\5ÏA*:Qùwz¦N~ÄOhw÷àØg÷.=t‘hŒíüÅ›q á¯¢fÙ?Ú¢•ý›ÂO5»<˜s´v×% €3Ÿ¾¯ýÈk ciõÌC¬¶¶ÅmcçæáW¾àûñIéÜÿXç«ßìÖúPì{E¯,Žx(1o*†G&°“ƒZtŽeÊ]Eˆf1ØÍž ª@(…€ˆæ{šù¯b³™5šÊÈc%Á(:‘žV­ È9®xÑš Q:ˆãB9zQ–©f3ãèƒ}zc$ÓU¸F¼4€Ê” 9%…ØhfØÌü…="rðЊ€‘µy™ŸúÊV\,S’Ñ"WýEW€e¤¢Bhfßú•ê—„—޾Àâ€gO(çS1ÂøöEç+mþ®-¹G¥$¸ð»VÂáÍ#d™Ä UO¬R‚ä’Tõ#~¦²;t¤BSS]` ’bPÕ3)ŽDJ"&T+E®ð½â¤vB4¿P宫ÝirÏA#h È0P¶@ Ak»<ˆ?6óSí ¶†Çº€P8$Ì#²ÛÆÌ£%ì+ñ}ÀêVŠwè‚í ž" ÖûÅ,*Q|–Ð}´@žæp£¢aÒpDPˆæ°¾¬ƒ§ªÒ 1ª  Cß!­¡ñóÀ Bæn¿²„*2EòL`‹ª–ö¯!r! r/”vX£üu1¨½k´”Ê@‰¼+ц~yBëq§D½­Ô©§B¡ë}ÀbŠ•dUµ2“,ëW¬XUTFZU%`U‚Taè|^blÈU†žaUªõp.‹C¥5£6ÑPÉMc"¢ ¹ !;ù•zö¯–@èEwŽD˜8­´ì¦È…‰<_Y"›šòÛ»C—s«ôŸZjóá‘ eX׸3C»Æß½†¹8åó« Ð=wP@Ú=Aç´èÏ ÀÂDDÞ¬ð|F6ÑH¥RÞ´…°TÒ ¬UUîÕ‰V2"bŵi~©Çio%jÚ…i¯0îbåjÕ´ · ’BàNßHn÷­·HzŽ+ÕÝu ó"û}®=ÄÖŠ8½òçkŽ¡iU¦h­¤¬!ãwH³½Œ>ÉO ™êϾïF*æ„°ðð,,t{8·‚Äç ¢ÉË[çºdOÁYšØA#>¥êë¾ÞÂV¥Ô¥ø@3{jÞ8ªzÊXç£gÕu#˃©=xÐU€Åõ,%ï…ªŠÄÔÐ.îE«ay©ÜŠ}ÈÊÆ´Q•„•äËZ´èT¶LFâäãÃP#HÏGtª‚&@'ç“ÌúzÖ%X©)Á:Å%ÄD^vUeqˆÊ½ôGª¾ÊSõ{Ú%T={ˆ ý<µaV!b+Ò°zÔƒ*©z=«°ü9›Óî™lIBVÓ%Œ4,U?'HõfÑ´¤ a¡và¯9HzÅ1«ŽßUô0 0zªè ²\wrÔJ*\DŒ§‹0xlô³³—8Zyz%+Áº™•Lzú‚X·R)¨U¡RÖStW54ªgU2¼K!dÌÃ]'´ŸÓ¥EUˆV×.dt%ÓCE€”ù‘ÔóxŽ€ìœ,’­=ðØ>œÁkX:)<µ<¡«:’:„ônxð¶,Åv= dÁÍöÚLJÆ}€€”µ¬ží}ÃK°*-ìØ q´{wh¡bÌrdMÉ2jêÁ§{‚Ó.åg !„ýÙÏ!Ú_gñi¬7»÷Ö° jº0ãÆQÕ@n´\Új:«‚z2É,aå„sª^!+Лœ±µ³b’™NÄ,<x¡$e¼ÚÃr €ˆq –{ï¹26üÄjC>•þìô”^º€E/@¨+ÜžžFE–t¦¾ û‚cïJŠVª^½ªüçÓeXn–PÆœ2,È’qœó!VPä}Ä€ejSfU°;¹ç\àóU¼†U7á õ%˜®"_¡ô«²e¡- —1C—|XPe…ú¾d)ËUÍ^jr,ÊÌ9‹­÷,Ly4&û•ã )_¸áÅJ-Düg#f]‚€å8ZE­@ßÊQ²u¨ªFUªaøie•—žÙÔy—„ÊíºQ(f 9fq}JKhïÊžš³¬èÎUÊMS´Âê\ëÖ¥ÊÔIEªjl˜Ð’““\BlHEÒµÒ+’H¯ëG¢f/Šlx¿ú+ÔƒÈ%-ê@ÆhÆùóòi±çíÙ‡YK­âž JÜ p)aS¨P©”˜ÂáÈUçWÀžÅàù\-~a0µò¥Î†a©„[E€… ~Á¹ìWu–wò£9Px•;ucXªJq§ž'(iRüù • ·D)û V}ç>¬¨3ˆ²LE«È™•u"†”>™ò|ëkD»(ʪõB—‡jnãòx¶q¬K °b×B2½Ì5,€xT8“wSêtžÄ*úÎà@\†ïaEΜaõ. +ÙVo ªlY˜Lf¶^Ra:3&%!ôœÑÑç¬(g&-ñ ?³}‡Â8Љc>Â,~¦NjÉôš%_û=ˆÎæÇ)n¢3ŽZYÛ„v¿ÅFŪÈgl]Z€Ò`%-é•}=k~á¥RRzWŒ”¥Ý@ça)$©*×hï²À)qî;A­Á  j2Ká\BèérHDw¯VaØ/Õ Ó¼0¬º¿ñ\mAHÌèQ!é|¶~;kx¡2§Ie‰BKÉã<ó*Ùëà_Š‹!ÄBÀ“O¶ ·@ W£üm;Ý8Æ›·ŸMžÒÆ¥UÑQ°­Thº{JIõŠQ-1s.¨êV=ð z óáïÔ鎀ˆž15=죪Jƒï!fOkdÐ Û–ãwÈ»7\„ªwcÕY®¢?ŠÉOºágKöHÿGZñãešq7/–îµâi¥ ñWŽ\|Ûæ\£Âóà‡î=F¤­UB³1 ŸêAsÃÆO}ÀºèŠAŒWBD/Á°RJÁ‘z–êYèe5 ÏUž¼ ÛrµïV&—ÂÓ´’b½Ð. A!27»Š.B‘èÎ|XØÓÇLá†*ˇ庇!ê…\o5“ –JW)i§Ùyû;$,-BdëZÍeXÌ(…¸!ÊϼC^ K­ÑÊe VŒ$ú>`]hÅThæT@kÆŒÇk"ª¥X8’¼Œb†ž•]]=Øãο„t¢;*ït» ¡ÒéŽIð$¹}ç9Z•¢{˜-ñ•›æÞ¬z”„:q9ðª°nÎ’ÜÞþ‹»„Dèº:aFé9$yÀYÕ™ŒÝûRÍïR³8ÅZƒfE˜ÓA×Ôn¤,øP;gƒw·1 ¶ßºX·b$«ìsë—0³F!òKbŒ‘±7¿\eÊOÛxé,­üûûA»5A`B¦£!+W½sŠ­“àŒ áŠ\>qÃîšÈ»,ÕSûÖúw>ê§cÂnj¹Tu|rø?óܬ‘¥AïÇž~ðÞ§0^÷LiƒH%ÅT̯´²?ùö·Ž~û[G¹F,—¤2†e⌕úÉŸþ‘© c©ßýÌJë¾ÏK—ÚmWuŸU·ý4ä ³uÛÝGþùsQ·-•ü’.Øtí–+^~]È{5cwiý;€Ü˜ÿºU¬äPŒx.sxõí ´‹ôYˆD”9}úc§ù#7÷`*Ä™Û'GÚ‚Ñw Í˽þ™»Ëž¶Ï°.PÄÂJ‹÷ûÃgAzG=jKòdÍ7vÀC”"’¥¢`eH²@¬tæÀ0Kb«/îªJÂèa‡gÊÖR„¬ð°_ÇÑÉ@£ª´K+)U¼ü™ÿB¦¦ì_±é]äÐÄÛñ!ƒ~Ù-2@ !C;/MrþÆ4(Íà‹Û\<à ±UËî’Dä¯ëVq¹ë®YÂRg™ÒUEߨ¦‰‘|=w6vY{ ‡-‚ï ²»Í©¾4´¨î—AÛ21¼žÙÄHsvœ|ÁèkM@(Wieͬ ƒKÝLz1¯ªO×Ï`EŒ D ˜`‡çVðnj·§,åWÞú 9±òç 5ŒVL+†i É™ ¸0,`OÊ=B¶ÓÆoSuËuÜhˆwQE¦ÐÔ·¹@.K‹x–]nÅfwÝdJÕò.Kr#.|Œ™•!s%¼×²íjø0iPÔ0¬0&#ÛvÝÈúKóµNgi}xï=` ŽÌŽ­ÓÒ²àj>æ]°¨IT!u`I¤„yB@jnžVCMb¹¦ÚHZ Ë$yÿ‚ÔE¿g|ÈŸM«ÂVàÉA†¦8â8 8¨XÈ÷:‘÷+„t D"·RÙ95íSŸD¦†,¯C‘C@¥^9º4¶a,êúç2³{Ãêá4[·ù IDATEO“E©³ìã‘&,¿NYóÐ¥H³RCÜ j _6oŒ lŠƒ sÔP8Á 0DÓ\’˜Õ¸HÑÊ ‚’{q ˆí2)Z!ˆ’0Q²0^KQ×t9/Œî¥0$ωî=ˆ\Vï÷Ð,ªCyHŠråd‰U«ê:0“ti¨€Ø$„qÝ ʽzÕEQÖö…"Jì‹F7=íýKÞ«rã©åC…D¬5ÉK2Ni,ð “Ü‚UrÈwæÐâöÞ¡•/ü¦wn8ø•Çe拤£ðc6мža[ŽU¶¼cWt·3´{#ÏÃ.¼RGü˜ë:Ò%‰Y‹­Òþ ò ( O²e%ë/LÌ(D.Ž_RW’ (Ôe.ì%.Ü¢sb|×E%³´”,TLMGÛXä-‚À(1zÛ[N7ڃˊ‰8Vÿ£Ç®ÂPFò™¸8ŽÎN6;°K5 ÃjTùEÍܵDGÛ[ôRK¦Ø’D_ÚÓš±7´|t J­2™ dŒN·WÛ&wYs P&ŽP ÉEè–òtw3ÙñÆäaÈðò.@Ћ+zu=æ°pÉbVãbD+^=1=[†¬‹Ë`T<¦9Ä*טÂhqjgW¡"‰ŠŸ0::<îŽíkapO¤!+À1Úþ#¤"~Å ž÷/‹x-IÁ&9¶øNrÁÂnRÍ47jéP£ò„+¯é£5LÈ8AD PŽÚØ °®B™k «›'#‹–}Ñã›';«­&nÁyÑ6z†hžz{bƤ€`pçœÊ´ÙxPÙt ‹ƒ'¢pSxé…`_o»Nã¼MÖÞÇà ¼ BeÍ÷UÍüOáà( CF· +ÏÉêÌ¥¶öÿ#™6!\¥°e¢«ÐÚµ;¬/­®/-´W–‹vKeêà±³+Ç—FF†Fƒè‚c«)±z)F…M bÕ}$Z1Ú–nRÅÄ+ÌdÀƒßU‘*…îCmmV¡ñç‘׃„a ™Pîe"#ƒùòáũ͓©ËŒÎîÚpú‰ΞÊ(S•bL «ÐÜÖzX)q‘†woäM^!ÙFtœtî7èDÀnW8³ú€õÌIWBn¯ôa¡ØdÉSJg¢VçVÜ÷ 0±2øÂ¤Ó +œ\\Ã’Ú<¦aeõ!ÊYŸ˜ãBP*Î ÍQ´××—VŽ:õÇÚ«‹Ÿú½Ó+ G»òV'__+:­²è"¢Ê*kdͬÙÌ͉MÛ¦æwLlÚºñ²k&ææ‡'¦U£ÉùoRUyˆl¼S¦rý†ïáò P€¶^%¡Ú=½`~£Ä»e[ž½  F4Àä9 !ÛüÔêÂQÒ½F͈¨ÔyÙÍ»íusÎÊÉ£‡÷ÞcN NnÞ¶ùÊë·^ó¼­×o­-<µoá©}{?ûѬ90åõ—ýøKw?÷¦ñ ›«4-Q† ØMÁ3ˆPqcæJ"Bô¶†tf03&,å\§n·37„¢u˜£9Óð&-WD°j ¨ìgO®Ì¨èkv熣fmÑ’,™Ra£ ò>`˜b"䯎mfx¾lb˜.z+A¾ÿ„O´<1xq¥cõ!õë™í J›‚¥V®œÀTW†Ä}Îäjäµä>,è½êO@µ ¤ Ø©ƒ(ÆÃCö±yÑ]UkgÜef¿ÕWÚÏŸøêgÎ.Óeñýû]”Ýüð#÷~äþ¯}ðlý¡ù¡ÿô®}ÁÀȘô;`í"LÊIz÷Â=Û8Ýu&“Ùh0‘è ä>ú„ÑÚ™>*Ìa¨ƒ¨‹‡çvÌ‚Ì_öÈ5»cöØ#G\iÏfÐJðÌÀÏE?¦g "²3‚Ȭó„€0²g£IõCçqÿ$Èœ _È–H;?=[:}‰ô ZgQxW€”ÜGµ™ˆŽRD2¹ðð@dÕCtÓ6ˆHIÈ*î]Ї‰î*. ÃUtYœ|ü›}þïì½§ÛZëõ2zk«·•'ïàèœÞvén§µÿ¡»ö?t×Ôüö«oþ©ë^ò¿oØŒñ.=^òq…œ¸‹¢ÜCža©d½³Íts6a ÇÙÖ~qžÂ.S$t¶ø°^I,[FMJ&Îu÷©M“ͬ› Ö£¡q«j7çLRug ˦ąÀ :B664¸q\¹;ÐNt7¦<»^.®ú1&dKÅÀgéñ…—Éj\ü ÅL/ò-•)1vv‰À F·à+…•`Œò%aäAW•¢»]( HVüO·n†¹´ØEº~…Ó´>ü»ùô‡=ú@B!b–eJ)Dn4çææ´Ö ¥ªµ¾¾~öìYÿêæyÞjµ´ÖZë²,Í…+!lùØ¡¯ÿÍûüäG~èæŸú±Ÿùù‰¹yž%Äâ|™uèÀ û(c“ïÜ$$çrÈ5ì>d¿™Ô)ìœ_ Á=^ÓRð”ÚªP¬/·ò³¡‰¡4[BŒLOŽ «ž©¨ym^ùMЭxmè Û0[8´y²9:hºæùÛ .è_¢N×GÓpd´±aô(”x‘í\者X-ë¦yí>\TɨÙTØN.Þp„jœË¤J–K­!7¬'¨RqG¬$V¼2 ¢{êtÒG¾÷Á¿»cáÉoE_™¡ÆÀÀÀØØØðÐÐÌììääd–©™™Ùùùù¹¹¹×¾öµJ)­µ.5Oøá‡ï»ï>DÌ”*µ^ZZ:zôhžçív{aaammm}}½ÕjEQEïüÎÚêCŸùÛG¾ø×½ôÕ7¼æö©[˜få-çŒs ¹ÙÎÖ¸Ï^àdQ—P1 ˾ì®ôs ‹oâþ?‡ì–k#:¶îiWxPe·8sâ̈,”®w˜Û¹aíÔjHæ"å{È5vö´øìLè²jÔAÖèå›ÌtgÉ[FdOw÷ŸdmÉ0íÍ"—„‡ñ‹œe5.ljÅ 6¨ðsFÁ¡|± Hta‚Jñ[ ‡Œµö,2¾£|±{Iè“NAºx…èïQ1’¥d¦ûéƒO~ñÝpøwy¡ •RÍfshhhbbbfffãÆ³³³Û¶mÛ°anrrR)588866666vùå—gY–¾Ú###ÓÓÓ¾flµZkkkZS»ÝZXXXYY9yòÄñã'Oœ8qæÌ™õõõ<Ï=ùrubûÁOÿÍc_ùܯý…ç¼üµCcãŽH:RƒðCÌÓÀmîn–P±.!÷ø´§Ï éxLÇÍ<»ˆ¦Šó 1Là9…ÍT…xúÈÒ¶+6q¹[óf·Ïx`?Ôf6Ó嬣%ÎŒaEÃÏ0º{.دXv3" †Îþ“¾ìãù9û­ƒøÔÏE¿ì‚gXRt)§äT–5Š£910Å€ ‰˜Ä”š-^ÊéÞ “Jù ÁX;,Y‚Vëüð®xçkYòßÀÀÀèèèÌÌÌüüü–-[vìØ±yóæ7ŽŒŒŽ6L)Åà©ÙlÖ¾ÁÁAXƒƒƒSSS¦PÛ½{·ÖÚ@ØòòòñãÇ:täÈ‘#GŽœ:ujee¥Ýn—eé9WkuùKÿëÝߺó“?ñ ÿiÏs_ˆJqÃ(ßÒ‡ ÛBTC!6Éö@2ÆQ@BÃŒ¬FÏV‡yY ‘\Áèc\(©) üT,[FM P%ôŠ&7Œ tZ¹hÿ϶ )@PÞ,Wš7ö˜¹´1=:0=òš=ÑSÅ™µbiÍq5d“Nhµ3BÙ@ .µ‹º_xáÊÖ Ë(†dǪ aa¦LÐ ãæ ŸNª¶Œ«¸mç/XgnH9WÄà‚‹Ô´Æ8±º÷k÷½ç¿rð÷™gÓh4FFFææævìØqùå—ïܹsëÖ­333###†@‘;´Ö.[ŽÊ²¬{ÁV•ÊóˆªÑh âÐÐÐôÌôÖ­[¯¾êªõVkuuõرc‡zâ‰'öïßôèÑ3gÎt»]O¸>ù±ßûµkoyåKÞðŸÆ¦7°T÷9v2BðB¡[¡L> ‡—„š§3#û¬Û¤AÔ"9<èn$xWMù艘(™)_ÏחׯfƸåÝCÃãÆóC§ãiA¶a‚ÉH‰5[çï5X°Ù>ÓhØ¥{ú~e~`IÉ8MŽD+4Œò Ç‹WÊj\ÈÌJ£D8VÅ7Œr›;ÈyC…Ë~qfTæÿÍ©ÉÉÉù-ó×]wÝÒòòáC‡{ì±G}ôÀ§NjµZæŽHë‡ïüäÁ‡ï{Ùøõ«~ü%JeŒ¡ø¡9Û2$tõ˜ËkA„FbU¡$ pc·:[( Ð#Ö±ÂEÍ`EæÊJ­õÒñ3“3c˜hXæ]3·}fñð"D{‚4ñ­9`y–­^mº_˜ d#Øc{6z§¨y€šÕíý'E~¾ï:ø¸ø0`ÉR㻺HiVãBÅ+a¹YÜÅóÉu *U‚(Î9›‚VÑp5†$¹¬Êej ŒIúµVi’íH„-VÚŽ¤õa=úðcø~é;÷~ÕhL»víÚ´iÓå—_~íµ×nß¾}ffvpp@¡Ò¤‰¨Ôš Ti2çÈzi*‹‚[æÑõHí¡”BÔ¦ñ¨2•ŽŽŽŽŽn޴骫¯ºñÆ¿ýío?øàƒ=ö؉':Ža[+§N|üó9?ùš—þ›‡Æ&¢L‡WNåñr‹aX YjfÕ^G÷:U[%¦Màg†î!‘cx¨YÚŸN“{™½"] âYBVÅf(I¯}RÎxª ÒGéë¶ÉT3DÅÐóãüØûÞüµÎ, ÎÏÏßtÓM?ÿó?¿¾¾>00099éë¾R—Úp*÷"ÒšÂ\Þ9E­§T“.,`@ç‡B… 5¡B­µRJ#*"RJ5š™™™é©éÝ»w_{íµ{÷î½çž»÷í{|qq±ÓéQÙí>ð™{â‘×üÚïÌí¸Œ÷Í*#SÞ ‰;Ý£?Œ£¡â©.ÞZe›†ÉŽ¿˜²-B $Ež¡ØÇxêØ2jÊ„*ÙŽ/˜œl¯u¤„ɔ爚)Ft~ ¶WÏÎgÇ&†¹zåãe@¾¼VžYwc<ˆ¬ã‰¢éü -ƒÂ¥1«q!¢U´w/$°B+â*ñŽÊ¸LŒ|»ÌÉ)u?„dáŒQ­Œ- L O?ÒÉU(^ñt4"¶Ö;¿ûßò/ïO#Ë6mÚôüç?ÿç~îçn½õÖ™™™Ç{lee4iÒºôHNXÌrµ¡½,8 «îkUk]¥ì8 (¥P)ШP£B¥"R¦ ^‘A/¥”B5:6vÅWlÙ²åÊ+¯|ðÁxàÇÜh[pì‰Gÿâ¿üâ«Þø_¯»å§¬‡Á/àⱄ¤l#sñ*Ѱ,Ã2žòðÁô‰£ÁÁà'w¶îS"Œ÷)³j®È‹•S«S'€q+oÅF6»eêè'HdzÛµ!bÈaàY7¢}J0¶g£b÷N#(€öS'=„X¼AÑ’XƒÉ‹Û߃i­XßµQøpošÎŽíÈRnɨ˜¼ÁJ«¢vë^ž=UÛÜ3{C¤îÄ^ÐHòçiJúNWŽ|×ï¿åè·î¾îºë^ûí?ûº×ÍÏÏÉTæ€É”€ZkÒº4u`i«A ¬&ÔNÀ"¢¢§†Õ-º–}”Òˆ¨5"j¥P£RZ¡ÒDJi­U¦”ÕÎH‘RJ_wÝuÛ¶m»îºëî¾ûî{î½çÀþkkkDÔ^[ýÄ»~ûÔÁïÜòï~¹ÑlJ«’ý ;!à§YUèãeÐŽU‚ï½Övó©µ^1¦Ã]Jã´÷šÚYsË G—g6Np¹]³ÅŽsÛfŽ?y’ñfÑõ2Xñ!/’Ãøî ž[©°PÚÎ<·ŸZÀ€G¼5Æ¿9}c¸Å[™¡kÚ¬ïŠ^ÕV°°°É™§÷…P»¨(•/~ŒÁRÆ‹›HãYÂHSò§©Opò‰‡¿ôÞß^;}bÃììK^ò’7½éM/xÁ ¸¡ÔeQ¤©Ô¥áTe©m5hH—•±t*bQÙ£$4¢;Ƶ Ö®$TJk4Kiei•*Ò¤3‘"RZ{ýìììäääÖ­[wíÚõ¥/}iïÞ½‹‹‹eYyþ¯ý§+§O¾ò—ÿËÐȰ¹ ­Ó½áÈ,ïbðaÙõÎ^±áÃh+>W}Qصå+DŸÉ¥ør Sl°8ulù‡ž³ÄW86ÌOe™*K­5R2×Ètq"»‰ž@3à& ŒÎOùÞN)­uòg@¡”dº†Kä¥/|õÔ¬ïŠ^!$yUÈ äù;"(Å>Å(@YÎ;CÔà«@ŒÖØ$lË-+eY7JÊRá–*Ë@8ôàW¾ü§¿—¯­ÎÏÏß~ûí¿ò+¿²sçÎ óÖº,IkMºô4«ô¥¡Ä*F-èÁ°,œa Y­Pkea Q)B‡MZk¥2¥@AFà’ÿ”RÍfcË–-óóó6løú׿~ôèQ££=ô/Ÿ8»¸ðº_ÇØô«)+Æ„Ñfã% è-´bV/BgƒºÀŠAKÌÊÀVÃY1Y±°²UW±Ý+W±z“wf©ª’PE¦­ð£0?Önó"~ô_>v×_¼t¹yóæ[n¾åÕ¯~u%ZYÀ*в, w”Eéþ[eY˜Ÿ–EaÎg—4—êÁ°Š¢]¥d7Î(ÃE ÌÝ¢(uiîX—¥9å­õ@³¹k×Î[o½õU¯zÕUW]544dîôÄ'þò­o<}ä€õs˜e_Â÷Ÿ±?¬E‹J{mS;†ññÓææÍoýRøöwyeù5,]ŽþØ´mÙ'×,ö7Øb¼=ƒÚwµ'vm¨N1@€õ§0Í~ç` BY;|P,}†õ´ ª_]U ë8UãÀªNÁS8˜¦ƒÖ¢[O´²ßlÕ¿ˇÀÅ,÷¼ùÜGïùÈ{A—7n|éK_úŠ[_±cÇŽZ¥©´ ËR¬ÒÉîNƒš†‘†UEÝתֺ[Uå —¯•ÊŒîîõ+"v"Ë2 BÈ€Ìî<¦+•mß¾ý¶Ûn›ý‡ø‡G}´ÓéÀ©Ãû?ðö7ÿÂÿûž ÛvÛôE¯EDÞ h€- UXaø”mÚ¦agàÞ š„ãRî¹±%–"Ѐ 'Î(gµ&‡›cfn|` ‘ç…'.Š,ùK [Í€ìä<5'†‡gÆ»γŠÕv¾°Ê½ Á¸ ý¶ÛÈ£5m„l¹m°Î÷r!ŠÓIåñî‰èL@ÄjKwT•lbiE h *’3^²¯P”6 {tÙ#}ës½ûCïA€ÙÙÙ[n¹åU·ÝvÙž=µ…Úb’_¬’¥5‘ùWÞ`™êÐØz‹îU€…h­¢J‘qŽf™ÒZ)•©Ì©í™#jÊþ—2”‘j46mÚtË-·”e™çù“O>i1ëÈ¿xëñÿsö]<á/Y;&V“…´¶êÅ0sè† Ñö â° ‘Š4>P@k«íÖÙÎÈøP僛Y:¹Ä!»i0¤`‰°BW* žå+DZù©æP“XñKÌÙÐ>¼HÝ#÷Šâ£Ø^°õñ[þÃ)¼8ú…êÂ`WAGYðUîï¶e—ÙoëL€ÌÿC¦+¹„€x¾AUu•Q=¹®‚Íè±/|ü&&&n¼ñÆÛ^uÛe{ö4ï]jSm±Š/üƼ4?é†3{w »¾øcUaYòÚÓÝnéî°°% -K[4–®:4¬°,µ.K"šžž¾ùæ›o½õÖmÛ¶5ö+sñØá¿xëÏœ8âKB£ô×¾qí¯ÞV‘¦~ôEºsx•¯ì(W§Çþ^ö+,ºåâÂjVSfˆ·Nó+†‚Ð}‰Fo*)"¡rœÜµAÕŒÙ#ÀúþS=rä¾óTüå®Dï!a‰dCYx!Vdf ^¾ ˆQƒV('ÅÈÄ!†g½#WRâÄQ° ‘v¦7ƒ‰33:O}ýówÿÕ»uY \yå•·Þzë•W]Ùh4 ;ê +A$òJ’“²4˜ÃE®nQݲkN—å9Ë_ÔݲkÏq?q7î`‰ãVQ”E© P:ðA[·j˜››{ñ‹_üã?þã“þãsúè¡üÎ^]\P.ؾ÷'È ^Y”§HÙ>¯½zqJù$ ¥¼ÔèÞf'/«ªD^›¶LsŸŠWü"Šûâ‹NX prç,VÊ ©uà´èó­åRð•S²î’Q® G¸ K]ôŠ¢ A”;#(‰W”ÏåðÉäHfw1²ÇÅNA¸Ü *ƒjgCVý5Žé79ÿéñGøÊ_üQ‘w²,Û¼yóM7ÝtÍ5× ’6U›î+¥ÆBcBžë8´ š¹QÔÏXE„WEÙ-ËnÉxUYHæ„~]Æqa¹•.ÓC—º,u [æço¾ùæk®¹Æ ðpäÛßúÛ?zkgý¬ò zýG9| M ~&xÚ…J¹<ŸÖY‚xÉ”!Û‹D<~ì RàVÉšj"ò8YTZDÍ, O O «d9“ù êÕvçôjÅ=¹ÏJÀ’Á|&^¡Ìhඈú} ø×r¢mñ-~‚7ñ gó"böT}£]l±/(”‡¼€ªþ2¸tøÉÏ¿û­ùÚ*Œ?ÿùϿ馛¦§§ý` ™¤©ï–eQh†L¥Ã‘né¨T·ë¤kPÈü¯wIØíúk›Ã]µ´ÀW]ƒZ]sÛ Íc)-t¼G¨CIhH—m4®½öÚ—ýä˶nÝÊ÷Ý÷Õý÷ßÖe¡„ Pi‚±þ¸ÐaTU/¾Mvaµ»'8ÀÈ—øúQ€ív¾zf=úÕûCƒé¹ñ@ЀÃn‡xÜ‚¥LNî˜U™Rɶ$s/kû¢MNþ (†oYáÉÎ Òüê‹îµ˜É«†ÒšÅ¿LBôLU {ÐìùH\õzF‚ Î(’xƒF 0è&àyª) !Ôö̵Åÿò®ßl¯.@£ÑرcÇ7Þh&oJCOtÙCÃtERSaÊ2=C+À[Í]“&ƒ9F Oƒg±mT)…¨*ÔÞÚn‚˜ +ƒŒ4*2Ê #"ÌÄ7wé6Tê¨'Û IDAT—v~FGGŸóœç|ãß8qâÄÙ³gý³þÆ—>;½qþ¶ÿó×T£Ñ»$´~^hwÖ*-ƒ˜ßÝ:›ó4Ùo;0! ¤Ìù®©GšNœ™žJâ¦-S'/j÷O†'[•]!i Vó`«Â+ÀéñDo®=u AÄÿ¼Š¬ó¢‚-‹¾ü~gY½V6à XB{‡T9žÖ6 ½ÖLW‚¸è‹Vo2dÈ =¾`•óµ [V8EQö°h·¾rÇž9vÐüpbbâGôG¯ºêªÛò3QëçÒ°´6eef6¹Á>gFkM¤uQtÛíN£,RÀêtr“ÖàpM?Ðæ2 vA…JV² Ël+з Ý- b.ÁÖ£%– ”íÞ·oß¾}û|ô ýëß}`Ëž+o|Åk°g¯†‡!‘öÛ+È/±‡8“€Ä&H6¼…@;K§"¿›)ô¯_¹êªyUÕá€Í[§÷B˜(´áŸþ=m"@ýiã;H€ÍlbË´gU¥, ˼h[¶Ï`¦}7nC“ÅbUŠ23ú¶†s+¹Þ”äšu„t×)§cНP•”G¤³s2Hy+¼| .nœ²š½„!À¸ê︕ ¤ïþÐ{=ô5ó²,Û¾}û7Þ877Æjœ…ªWIX–âÿî/ïoðÆ÷RP,"¢n·Ûê´EÑÖy'ïv»Õ†…J™•ejM™Î´¢,3K˜Q™ùÐü•8 ×Ä¡¡¡ë¯¿þúë¯?tèÐêêjÀ¶¢øè»ß1·e““ÐP§,c¼ìaÁª11è(2Ào¾Ñà ½gàÔ©(t£¡Ê*Àš™n¶Û]¿Ñq4 ’_À>]ÏÇrm,%ØûñÉîÒz÷Ì:aˆÖ ïóK¤úµ…ÌÉìX|(üB…° At_|<ÿS8Ú£N‡O¬ªÜu*rûåImî2¼«€ ½DVí Ë#$ÉRÒͼïKŸÜwç?ù'>44´{÷î;v˜q¼ÒÈé¦Öë-ºÛ¾œÜ“ÀëGR ç y·(:íV»ÝnµÛív§íõvžwŠôpZ•pÍ{ÉÊËU¡QXH•½(µ.вpj¼Y®ÆåpõÕW›ý‚ñ­¯}äÞ¾¸xºVÃdb“5m)»°Ö¤£B¤C!Ó鱺Ÿ(/î–b»],/¯¥oû·ÂÍ[¦B£°ú}…!w‰•8½cãîsø>{à”¡J<âÍ-”‚ "Dþظ“(¦ÜLÔï::ö×gX Tqº„1‚ ^oáZ I%vy|Ž!JÔâ‹ì}͇íAõ"Õ i!‹¾hùé§ö}ýƒïæ«n¦¦¦®¾úêÉÉI°ƒÌT:+è9V¬dyï{iµ+“{åò²œƒTSÑí¶ÛíLe€HóïÑNÞ±–!T~äY)omGe¬íJ™ Ê@‘†ÙóUãe‰¨Km_t‰ÊA4›Í={ölß¾ýøñãyžó8~ð;¿ù›¿ñ7øË k4,·o‚0dú|ãåá364&„˜¹?Ј !l™Wh§ ÃÆy"8~üÌÆ ã)½²Uá–éCOÒa%D˜¤F7Ša1«gvnPQž #YkNaäP‡{% _»{à ¸r0ƒÌ0 ‘óîžè ÃBf³Š…wÙò`Û“€'ºD"tT±…\®ŠFÙ÷œt]qZÁ)S9‘£ á|-|ÁvΞùÒû/g›™³,Û´iÓž={}º• Ês–„‚ÃÞÏà»…ž •®ÍçV·ÛjzV§Ýî´;y'çæ+så.óvñ‘BçQ-Ë¢,uà{ F¹—µý“uE0nÞ¼yÏž=Üßà¿û«ÿõž?ûó–HÔpšÈšbŠ· Á{²œ ¸w¹wT!ªÄ¢uüÄE±#ÏŸžÛ4‘5TJۢΠð(\D›ÚíâºÝ]?¾²àjч4) ¶hGSn>Fnk„Š©¬áᡱ±±n·›çy›¨Ûí S¦.=ê1À"œÜ-ºív;Ë2¶šÂr‡N§St ï$òéWî?JkÝl6g¦§/»ì²Ý»wÏm˜È” žH¶Ì»–——–—— t¡€Úÿm¶–mÙ²ebròĉés_;³ô+¿ôK_øÂ¿ÌŽE&G¿¯Ý2gB‘‡ecj½ôN6fO,gVfÉŒ*!™¯“KKë[`ñÂP47ÏO­®´œÐnK7E ßU¤îñÏ:‹ã”¿ÙÕƒ§Üù¬cÙçJDžeêБõFY‹Ô=æú/Õ¡õ¬×°86ñ 1LÔ+ª.¸ÿMävˆæœ<éc«ØºfD‘íÇö/x@ÄšÜ>éÃbª­?íÔñ»>¤«Pªlxx8Ë2’Þ)«aÕ¿O~ìÇ~ì‡ø‡Ë²ìv»yÞYYY=uê”YkºººZ…®ÊÒ@•‹ppþ†¢Ûm·;Y†Ú~¾Éÿ ò<÷–ÛÒJ)Ôzp`ðò˯¸á†çmÛ¶­Ùl i7–ÛÚ4ç,˲l~~~~~KžwNŸ>uøð‘v»ˆºÔˆXê@²›õ®«oÞw÷Ûçwßóÿë› E°ÊÁÀc9Ùg—%¾k·fK!jGTÀ5/3yw;qfû–)’†)ÿÏÍ[¦žØwŒ»;Î6õx(qÂÎlŸI,ïÀZ=xš/âád123‹Ž,|ì:€~¼éÌÙ "‰îY X( A”’Æ d»RX­•«0K¶A¸í81øºÂS±ÉA…ÂÌ…ÉÊéE.“9¹©è~åÏÿÈxDç¹ØÆ;¬*ui–9×½€bT¦ÕàÀÀÀØØøüüüõ×_ŸçùáÇ÷>¼wßcû:y^–ÖÒ`Ôw˱4EÑn·³LzåÞ“y‡‹î˜)DPZa¦ÔåW\ñÒ—¾tûöí§ÒÙ] Db¥i8Ó~8·lÙ:?¿åĉ‡*ºjT¥Ò¨b¯íæøÿþû;o{Õ«^ùâ›YIh6§bx_H³hHã#¾®Ð”öÑö¤XúŒ>»@ su%ÁÑg”ü óªpãÜøÀ`#ïàè•ßBm-©.ØÏ&9 OŽŒNŽ`¢â›÷R·Ý]?±b!ÏoNŸ¨ôññ|óWÍfá?u;êøæ3oѺà\¤·"u‚^EÑ}¯;­ô=Dõ «é}\ðuŠ g9=/÷\p3„ÌêMfSY›D=øØ—þé€s]¥¸ãLž!Ñjphp÷üî7ö,Û×qáÿn6›»víÚ¹sçÍ7Ýt÷Ý÷Üwß}ëëëQÜ»ñauÚmeK{… ïæf‘ª‘š ŒŒŽ¼ò•¯ºá†üV1C"ѪþLD¿ãÎÏÏo˜ÝðÔþ§K­•R¨ ¬óµ³Šn÷ÿñ—î¿ç¾™‰1ÿ¤,QO\«`Ú“¿y•Ê“I%sk&pâ7*"Ô@€xölçìÙöèØ&2ŒŽNMŽ,,¬:˜ò^rïÆ ;ä 3Ú<Ùlf%{3“ó'ÀÙC‹¤uHbåÞQOãB(']¢¯§o(¨ös¶÷Pæ\Peá3Þ%t›ø€MóEHñFg&ƒ8Ü›ÃØUQ4C„~4/1èǯb¥5&šùŠYWN¾ÿïîèñÛ6éTªaóüæçüðs¶lÙÒhœã[$¬óK &'§^þò—¿á oؽgÖ¥Ïr°Ãn·Ûa‹Ù°ÚíNžw¥i«œšž¾ýöŸ¿ñÆ•Rî.‚òUyïç8“šÍ+¯¼rûöíˆP_«¦Nìß·ïíïø]oЦêX]TFœêc{¾â Œ²ø³h’”gÆ¥>uúlV#Kšø"O2ñLm@ذ}6úÆõ}$°ràŸ¨•ÍnfI9s+Úî27 ît ÃVÌ%.°’ðjňdq‘Ó0lÌ+NÄ¢ïìò%ƒ(ÏŒ/r‡Xä/­ñ¸û)\o€@D }Ï_¿oméT/¿,¢q`5+®¸bÏn›Ûw>1jä¾Öë°c~~þõÿþß¿ä%/AD8cq¨Ój·ÚíV»Õét:yÞnµ[íŽùwŒNMOÞ~ûí{öì‘ S‹••@V÷ODܶm« V5ôò<ß2ú'ïùÊ=÷ï«`eðQ ,v¤×Á(£²ëKXGå·NÈ«©XÝvôÄJe\²y“ÌÏO‰–wä’ñ„ÞÝì†í3•éW J}öè2[«"·Þñ ÜxìE–C4¹‘º‚ ÊBÑÐÇg)`¥‰·¾Pæ#[X~‘–%w.%wÄè2<"xäBè8R†ÏôÔ®ÌQÁÎÖäì¿ï_ŸºçÎÞXm ¥Á«¯¾zffÆsôsA•oïÕ2óó—½ìe¯{Ýë”Ê8µ;ÆÕé´ZíV«Óît:ívÞêäÁ‡Õl6oýí[·nåÍD~ÇçƒYuhåNàæÍ›·l™7pÂ_zíõµ·¼å×ÖÛàFEÁ{!ÛOŒ¯‹ÌŸO&“ü¼3+Tày܇`)™7¯æ6Œ 4*EŒ911;:2:¨ØŒ*°M½ÝµNëô*û&G®Æo‰6û€aôß`ª©í:MÞöYŽ=‹uá$1•þ' =ë „ÇD½’B{ü£hÈ™‰ìQü#ÈcƱY¾RÝ,¡°_ä­³_ÿð{µ.{ãNÞÍ3¥.¿ü²‘‘rÔ%ú„Ÿ~õÆŽn¸ág^óD4®‚n·Ûît:íNÞéXãhný£Ý<÷Á5·½ê¶]»v“@U>ÚóC+{lÙ²u||\—eQçù¬ºû®?ù³?‡w,™/õ‰hlöOÆÑ¥³bÌòß4¯¬·ò•Õ–ª™¤lfç& ~;¡d÷öM¸aûl”/š±1þ•ƒ‹@ržLnfCÖ_H–c’ôJEÅ^D2æ…çýA”„MFd3„/ZO¯ÒÊŽ3^žp–äÁ 8“! cºÎKRGßüÔGÎ?t´Êó¥Å¥íÛ·ûí8•ŸçÊöây"ˆ/¾^ð‚¼ð…/ô¤y;owÚ¯:ÖèÞétò‰Ábã„–ø"h鯒ßG¶W*îWîµ¾ç¯ß×Y[=ç 222òÓ?ýÓEb>:/È:Wc.%;ããã¯xÅ+Ê¢[…«zÕ1·Û­<ï–E1>>~íµ×ò§ó¸—ó)+ÑÊœ?xà`«Õ:ÿwÔ?}äÜóUè.—G8Þå1(¿‹;lˆp‘Êbw7Ë23‰‚máÉ¥µ¢[ÖÙ‰7ÌŒ 6ãýƒgŒNnPɻלÓZ^הּù–_I£°BdI¢ÙV ÃTe%£=Ä p ðcXˆ5 ¨Ë8°Å?f UT$`E“P ²rØh4òÉC9Öñ^B¬Xoi¯rìÑ÷?ðÕóy9^ô¢mÞ¼9ÏsJåI ƒˆïf¹Ï}îsÇ'&Š¢Ûét:í<ïäƒW¹Á­N·›e¹mÛ¶±±1ñÎ]Ò¿­8/9uêT·Û=ÿ÷iý‰;Þ“·Û‹Âú †ŠéPl:DÍ(¹ò”eш:¢¯‡ˆëíV]€G¦p~Ó$²‰°xø6n›I턼Î^4N!k°ú.Žig:n²Æ\jºB·J:†|+( ]ìYc5î6L;†q«B欇y™´rÚ<®S•Ï? ™ R›L² +œ‚½£ýÝû±?+»ùù¼/~ñ‹Ѥ¦7›Í§ñAíÉh<¤¾êª«ï½÷žN§cì€Zk²nJDļ›e¹qãFFöJ;h0²‡ðN{¦ñÜv悇~& +%@‚*ƒGr–Çy¶›¨ª˜N:&q)[SB±xç(u4öŒÌønÞÏOÝÿåc=tž¯Éu×]g}çN–e&—ø|u÷¤ÄùiUhßi»wïºë®¯u:ã¨ÐÌéˆÝ¼[Åèè¨M–B8'Z…ÉA"@<~üøG>ò‘Ï}îsGޱÖvD¸öÚkögö¶ÛnvýsvÔívéüxeth­?ñçrÃK^14<¢ÅH xÿz©ñ¬Ä,.uö[tˆ¦ÙÀ „ Kòã~.è´ëý:¹rÃmñÒ"É¡Âù͆ê¥k¾y´6nrœœA†P|æYçÅê‰ëj'¾º™;æ¥YùÒç€A2ÿ]þeßì$ã¹€ H‡ ^ÃÐÏÃ’¡ÇI=ˆ˜,#B>‹¹à€}aÝ)€p·Ë,©²WâZåâ¶a ‹¼ußÇþìü?u›6m€²,[­V³Ùô«žÏçÚíöƒ>xçw>üðÃÇŽkµ[ccc[·n½á†~â'~âòË/gÆtnÓÓÓeY˜¸D¥ÖŸøÄ'Þõ®w-..r¤7—ìv»}ã{÷îýÛþí[ë­×]wÿ©ÖºÕjµZ­(ºï<ã‡|éãýŠ÷(`ÃÌÀ’lj»]a"•G¶3É~%= eW-”¸OlAE¸´ÒjµºÃÃM-I–¹øÔÄðøØÐÒ™uK¬@F›÷ƒ2À|°zb¥ìtx <¹õ~o„`@èÂ’ÁoqöëéŸòûíCØ»hçÈQj6ƈNž)Š Ö@åB!d9ésp¿pŒ´€jƒ˜E`ÛéQÖ‰(Œ¼`È÷ST;n|IøÔ½wž’‰WçxÝ Ï/ É2(sN̺÷Þ{ÿ÷ïÞ½Fñ1JÐÒÒÒÁƒ¿öµ¯½ÿýï¿å–[~õM¿ºs×ÎJAÑ-ò¼ 6ÁÁºOÍK‘w»EQØ€»Õzc–wÜqÇ{ßû^3;]+˜´~xïÿú«¿úÇüÇÏ{ÞóøÓ?sæÌÙ³gÿ-o-¢O莟xõÿ><:f~áÊ,¦·ë$BhøQ˜t•²óû÷—´Ô}$ ¢–6œ¤—§Ï¬ožäA Úo*Q8¿ibùÌ:Õø¾šM¬ŒâÀò‘E_KÚÄ+90 ¢(Ðe¯‚Ëe ågÑÒHþ-%ŠÇŠm û,l}ßEw1Ñ'9÷îV; QÓ#Ú¦ª,£B”±ð(;& õxÀxˆ 0N‹O×>—öCŸüðÓzY–––|]Ón·óhÖ ¦%äúúúg>ó™7üâî¾çîÔs°¼¼\”ežwòNnT÷¼ÓÉó<ïvò¼St»eY>ñÄyžñzóÁ¯|å+ï{ßû<€Öµ͉………·½ím‹‹‹DTE«Õêv»û÷ï÷/ÈÓ=Oûò?}T.%Eä‹Q}@PÔþós…If‘X-ObqCpøäJV³­Ò˜ä7"˺Ø´uºb"Õœ&X:¼ò«µÇ£a?a^E`Û[Ù•Ò¤oBÆŸY~¡<Çúþw Íúˆ[üÀ‡›¶€÷Y™w„g]a5ˆ„•ö‘÷Êwƒå´—ý‡[ÁÄxmu3@ì?Pežçn§ÓíäÝNžç ¶ºeY:tèÉ'ŸÀD½íEQ¼ë]ï2…dV ?sÿþýþð‡ R·Ûm­õ¾ð…^Ïy|úCw¬YVÀ7<ûÀk1ÉÀC¤ñǾÃÈÆBAŽO³´[ó¶8tr¡¶ƒ¼in¼ÙTñš8˜œs9éŸ2/VO®ˆñCä='ñU*Ö©äb·•dQCÌÆ…Uðu©RԚúí²ì›£²*fÖ¡bë„tBŽœT£,´âM ¿Ö°*·Ï¼·ŠîÓ¥Wðå/™‹Çyž·Ûí™P«««oûÛýæ>±°²²òÎw¾“ãH·Û}àûK]æyžwò¼ÓÍ;yÞÉ»yÞÉ»Ü H—­VëSŸút:5ÝÉï|ç;?þø9;ÑyÿüÏÿ¼¾¾nžòéÓ§?õ©O}7o±SÇ|í³ûníz2ÅA+äHñiÂ’òÉÀ<".¯uήçu~—±¡™éQæ­ Öœ¹M“Y¦°Æ±td‰4EC<ÌÆŒÞÆ-—N¼ŽÎ’¢Ú`T‰ ∫[Èjègz–ÿ…éH³xIBóN¬Œ{sªÿ@läeà ¤¤÷äs9ñÌ„‡=|ÿ§>ñt_/~ñ‹†+™Ã …¡TS îß¿Ÿ Tzzè¡o~ó›þœ}ûö=µQy·›w»µ:NÞÍ;y§ÓÍÍ& }çw>öØc¦½è\QÇï*¸C£@+Pñ~#Ö>T‹íÁ­ºì'ûÐÉÕÚ$€móS †²LmÚ4Yg¥R/[_±€iáÍ'G"F}úÀC÷6¢\í䡎}tmíT«½ØlNÎNÿÅkìì±k×®,ËL­*Ú‚´£ÜZŠv»}ùå—#âã?þÖ·¾Õ)¾;¥”èSþó¾âÕ*Ëxs^j÷=)‚~™* g15Æ´NL¿b†ø—™Û5Oˆÿ?{ï.ÉY‹®õUêÜ;çÙödF£  ÀdKÌõ16çlsüÀ‘uŽÁ`ŸÇûH—k‚˜K]”³f”'J“göÌÎ{wÎ]ñûîê®þ*ôh$í=ÒðÜzÄP»CuwltÛâ IDAT…Uk½ë]ï l&[¡”‚Ì-jw û{bŠ,jºé° ±«+ŽÈ–qjÿ§U´j¡æèŠ‚c7—•ScǦq3ÏìäUùù‘–ׄÓ:tø]-ýYÖ|À[=2—püVÀòCK<þ癆^ÞÍå„êTnöÁ—›ºEØ/ÔÒ%ÙwO º`ÄVFÆš¬käË m¸o†ŒÁO¾õ¯ŒÑ×¶R©Ô׿þõoûÛ‰D‚Ï>(¥ÅbѲ,‡NeV«U[¤” O,° sØî}}}’Œ–$‰+W.XŽH%Þ&¹¯–«áºªšuÝ´ªš^Öc¬X>dQ] 2ø) ŒŽŽžwÞy»víâ£ÿ2ggÛÑÊn/\wÝuG޹å–[¦¦¦ë|;yhÿ¶ÿø÷üùgmCXorG[¦[-;/f{O0hùÌðQɉ' Ű%ÃPªj媖Œ‡˜/ú² ô÷Ħæ 6óÉŽv=È(érsy[ÕåCï°OÁ%·À8—VÖò»`n%eä ê5-‚8Ε£Ð­3ÝÜa 6ö‡Œa¡"“[hŒ×nw¡ˆž±œÆÒÒåÌÎé'Ó;'Ò;O¦v\Ø5±°kb~÷„V¨cÕ=ºÈ àê¼ðwôF4’þ˜žK=qço^ÏNyþùç¿þõ¯×j5>âX–U*•²Ùl©TªV«µZ­V«mذÁqw8έ(Ê–-[±,ªSzjSH5Jë†Yѵ’¦,Ë DдŒ®‚ë>BÈÍ7ß̧„D)Õ4­V«éº>66ÖÓÓsóÍ7=ztÏ0ÆØËÏïÊÜü~:º¥DÚjöñU^ë…^G^Á­o…€0•.NAAèŽ0A;]éí•ìLÞ…Æ"w‡E¯¶f\˜KŠßgçoÃ>ñŽ•¨Ÿò‡ˆa¹Fx ¤®º}{•ß ò}U~䤬!@sÃõ^—€º“=ž›ÍŸˆœ‰3úëÁßþè?j…ìë-dî½÷oÿöoyÔÙŽYš¦Ùüoûú¿þúëGFFNl37ÀÅ»üòËEQ(—3–©ZT£Ôh˜ãµ=\!*`…±’n ³†H"°—^~Òù&Ì]]ÀÅ_ü¥/})È·¹Q=Ú¥n­V3 #‘HtvvÞzë­ ‹~ÆÞ»saz‚Ÿ…æiwne!GE?Äî¾¶y5+ûÅ“©R`CÆþs¸?!Í †ÃRWW´]´¢¦U˜/YoæÂK¼žÃœ&½sð¼K-¦…&³S7ËÜãÕ.žÒ^å­Zºxå’mu[ºƒ‡Øâøƒ:NY.…Æ–K òëq†ïéŽØ Ø4n°MyïÖP>ÿ2âU&‚(‰Â¹ë%82¸¥ŠúÕÿü©J>ûúwÔÄÄÄöíÛGGGGFFøªÊq¶½‘GGGyä‘¶t-Æ  ÜtÓMGºôÒu8D–ˆb(ð©ªÓ¥ò^ÝÈ©ZZÕ²Œ1D‘¢¨Ö#ó³,‰ˆ¢( ""'o6lذaáC‡ …ÿ8£Ô4M[ÐöaeŒMLLX¯¾Mq: ¥T’å-o½ÜÝCtÍîdÝ­âÑçÎfæ½—¢Ã7,ºi´[H ´¢ˆ‡§t“6ëôÄš5Ì=~è¼±˜­iÊ)ï€k61¾TåjæéÅð‚MÎzÐb<³Ý]Ï0ïþóbÍø°8ÄÉ­ÿɇ¡f,#È­ø|PZ¢EMÙå’Âk!¹r{N ”™tE"~ËÄËKTDYÎ]7( Ä!˧ió†Y$D@"DŒFúVŒ¾ÃögŽÅbÉdRÅr¹<55•N§í`$B8Þ¸qãµ×^{饗ö÷÷†Q*•옯F¨þõ,ÕriÅšuË×nôäSAV .7s]½ÈY/øñO_ªˆÈËzâà3XµÿÓ kb¦1{táËÃa‚r1 ph×D¥Xo;ú(OðâpÍÎxŠ6>бSDlÏéFw÷¡îâE+÷õÝ\!ˆÑ€>"×ÛùN"ßR䤦p„úï€äñOtp‡#ãûh)v]¹\þõ¯}çwŽ]yå•]t‘ Q ‚@)5Msppð«_ùÊçn¾yÇŽ/¿üÒÄĤ,ËçwÞÖ­[7oÞÌÛFEÓJ”™€&A‰)L>qY"æA´½` ³æyu,‹Åb+V¬Ø·oß“O>ùì³Ï"Ñu-•JÍÌÌd2›¢ÁÎø´ì#wÿê²ëßoÿFÒ0FmqùšƒwŽP ãZ|&Æx!aŽK³m×4»´ŸšL—ߺnqý>ÊCöÆE‘'”D,äiàPÀÊ-”|ÎÍ :#ÙàTmغ4© à2’m©V¸ˆ ØÀô©4€[°ÁSlr»à é.­«™?Ø¢¹­ÏŽc€^Õ}póc\JÍyNždå÷Ôq÷ƒZ·äùæÊ¶ŸþÒÐÔ¥;*–e9räÈ‘#wÜqG,ëííêííM&“6„ˆ‘Häúëoغu«-¹¸F]Ó‹” ‚!z“V°€8$-K I"c"cZ"¥ÁZ „-[¶lÙ²åýïÿ]wÝuÏ=÷œíQôN,:Ó?/¼°kîÈDBÎ<ôø¾÷½oÇŽ?ûÙÏ^1Zc–ªå5-§iYÝHFÚ´r>˜%°à9‚Ç%‰È²(I¢(J’( ¢ "QTNç» ç;ßÙ½{÷ŸÿùŸÃº ×òª€óhk©Ê¸­á0@ „“Ïnlb2]&í½2û{býݱHHÆ6„†f²ôûèłݶQ^=Á‹÷ëB†>ý$_çÏÁQœ_ʸ‹÷ì.MÀòÔo\¦Ùqe^]= ’iðCÏK±¥“ßt²å&܃è®Û‚o°Ù¥WãEF×pOt_ÈæŸ½ïD‚¤ž€%Ëòg?ûÙ_|ñꫯö ¿BÁ/†êj®^ϪjJÕ4cÎ0§ŽØ °à€‡v˜H‚ D"‚D‘"!!"!B(”|µßù­o}ëSO=õ•¯|Åq?óË“÷Ým×ħx t1×yöºÏÞ†ðöª¼)¶n¯Ù²ZQ ¿fƒýgD‘6¯ôØñòÿeç‹Ô²]bqè^½-Oþ[¸pÀÖús+‡˜`7Åü@ŒBùÀ°ujp¦G])®wX<^þ–¢o^ hLÁO Èe|€VÀ ­ÙÙ&6 rz³;žÜ‘žÁ4Í&ý‰.éúÅ/~±uëÖ×ð^ENÖê9‹ AB¡ƒ'(@ 0PP¢ PB”EDÁþW@$áP×kùtEù»¿û»÷¿ÿý7ÝtÓÁƒÏð™½kÇãµr)šH6ÇžíÌž5Ç›‚ÛÍAîi $3ŽïäŒM7±|Ö„´¦3åuœsß Ž-ë¢AýAûìJÍšxR ªb­©äV¹qè&°Ä[Jp+.ö–Ð;¶Ü+\Ý­7q“Þ(Å\›=Ã0ÖdXIïÂ8à„à/=Õ3Ÿ¸ :¸^™@—J,‚Ûi¦\N“œ)Z÷þü¢$6ôíš®K´(Šò—ù—'Ož|mÑ ÂáF­Z-S«¥ªµ¹Z}ZÕÆmx à€c:@ ˆ““ÉRƒ‡…¢˜ˆ/Í¿âœsÎÙ»wï­·ÞÇÏ䙞›9¼o—+wkÌò}c— ðv§­=b¶^¦!œL—Û©4=\}Õ" Í,Ý'!?ˆnÑ+tH¢ë°q–"ÄCRWD–EA´•² ÚpWn€Œr[†³¼Kè#1´I}Ú¦–üáoß¾ýÌœÜ{ŸÛQ+—ñx ›hò­5O"Æ_Ž1iÓ݆¹’†ål“zË-ªf¹U¨j¥šÞñ<,ê+ —vMhH•€pH*kP ²@F;£z"û§Êš5Ú¾vu× •+k$=?;ÿÀ¦þ.='I†ðgƒÉ#+‡7F´ÛþÇ¿ô¢ó£²¼¢»gÓàŠÇŽeÝykÖt.±ô«ÆpÜQæo#¾AL÷EÍq»zßZSÍî³w@‡¸^Š¿9XÓš¹iqÙIk‘8“†$`ŠÐyŠ›ãqý¸Fv@…Õk¶}÷ûû÷V«Õ%=$ögö£ýhxxxQ¶fšõ‰©ÇmK’„¢ Œ ØÿE"Q€H]¯—«eà C2tÑ0DÃ$–…]]ë– ½}Qz ‘Häƒü eYnÕ¥ZÔZõÜK¶.[Þ¤ ¹V˜7ÇÇÀi;Ö¸ßò£ÖÝ$Jd ºã¡ÁΨó¨3|C›ÁKèX0Ð@Šê\á½ýòÖ^ÖKŒ-Ë{K:Ü´e¸cö¡âÁ—†díÒÁˆ*Ç?¾¹ÿ>û§Q¨£*U3ºê²A³ø_?ySg‡ )åbþ][6ØûÂÏúã·½åC +fçÈËó5æ 6<“=ŽÚ¡g?¹ý7¨S¸Øs÷W™O6Æ©·» Ð]Qºœä‚[ –yڳͥCW-èóˆÀX¹¢jÇ ÃL¯‘òú¯ê/~ñ‹ßýîwë€ \$Ë ÆDjI¦!›¦¯Çâ‰æJ N­ˆiH¦!™†hšÄ²ZHôõl¶©eI$ßüæ7¿õ­o½ªvçk[(¥Ï=ö ÇNáe7¿·¸6ß&ôšWò'¦KЍ±Ý‰tÙs÷ú(@íÀ3Gžßn‰>€åŒ­¯ÍÿËß~jﳓÙý½ÕéQ,V^zê¿üõW³¹½R³s~þ¢gg¦«“EjÍì{¦”ʯZ> E#²$„Dúíoÿ㑃?øÇ×KYÓ0´øÐ½r->¿/³îþ5¢;ž€XŽþ~äY ºs!Ñ×cð{øïÞ(æÛ×Ì 2ðKšSÁ«`ír¶ôÁ«—KûPÓ4(¶ó1ÞÒê5äáÿößþÛ7¾ñ ¡!ò»8K8Ô5Ô10‘RÑ´DÓ”ÙYUÌŽSNÌ¢4¤¢a¦†‰¦APú{·,v[?ÿùÏë[ßêèèXêó{çöǨe5ìöÀ£oåv tiÒ‚[:Z^5-Ò)sÛ85.Ý…bM3, 2XB ð¿¿÷ƒÿøÑ`@3óuýD:EMÊËg3¿üöWéšUËEeIª–Ëÿ~Û·g¦§>sãÕ ¨†Y-Uõ?ú±ßÝ}ç{?ö‰b±œÑ*Ûwîû÷ïßñ/·'Þ1:—+eË…Ç =UƒÙ÷ÄvX  nÎ +3þÒks±Ÿµ%!¯¯×i@^ ÏcOÏ;š¸¬â¸Ý™üB1ˆíË:ŽÜL¼F8HlñGW©èipXÎD¯‰s‡zù‰Ç›ñG¥×—‰F£¿ùÍo>ùÉO.EÞ!Š¡Éé§!b(^±l!a·DB¡Jµ˜/¤ u  ©}½[–\±gÞ%—\rÕUWmÛ¶mIKìz­zÉ•ïêêëw0™ÖŇ^=)þvæQídü…ºolA3­ÕýÉxXöˆÌ@³$ŒDåÈØ@xÕªQK r2WŠÇÖ¯\–OÍʲòÒÁ£¿üÍoOLOÿõßüUêäáXïȽnÿÁôØãO~ü/þK½\Ïf‹™ŠºsÏÞÙtjËæ-qYfššHô‰½ò}×^²i£nªo|ûù»cR_,l1VT ÖÇåùìÜod<Ë£ Þã)Ÿð ‡K°üJ2ÐÒçãžâ¹¶>$‹´<šZ´=òJ22ˆn«õ^äWø ÅÇAžØx¥©És‡ }’êú“ÛŸ, ía¯y§%“ÉmÛ¶½óï\¢cö-,ìTÕ" ¨(áUË×4–³@*UrÙܼ­L- "³þ£‘pÏ}±¡¡¡÷¼ç=¿ýío—.f1J+¥ÂÛ®¾@KtŘZíÌ•3x"¸Þâ[±¡|çõ‰°¼¬'Ƹ Å–V¯Û¸f½–:É¢Ý'ˆxßsÇ?œ:ÿœ ©“‡Eùß?ûu¹RÍfóCCÃýÝÉ!™b%¤„ßrÍ»¯{ç¹T^d™­sã®Ûºyôœáe¬2IÕÂpWhëEk/\ÓLezwôdRÝ%3Šå!Co…«µPuÞ ´ØÄ£º ÁZ}î,‰ R¼†ŸcßäçC@âù#¦Î‡6€r¶ßÐ&55eáˆÐêµB±ðâ /Z¼8n¯ Ó¹ûî»/»ì²%,û‰(Ëñ™ùçPQ"«V¬å–Üä7b1“ÎÌ›Z&ƒ¾ÞóV­¸n,ÿÒÓÓsíµ×Þ}÷Ý•Je‰>búäøØ†M#+Ç|N@ràÓðl¤ qhl¥i Þ%ÝÇàÜÑn¿š(mó]€¤ ƒha(Y¦pðÀŒLØÆ¾x}öd4\Ïå}â¦÷~èú·w˪¨—«vÞ9kÞyÉš Wuä§ŸÎN½¨`V­jVÐ*'žÛ>95ȱ0ASW‹Õ½/Ú÷òI jG<*€ÁôŠYœRç½}ÍØ¼¥ÌVt/¼âǦ<­AôÊÌxvÓ™L±ÖàÑqÇV²‰ ^:ãæg‹/„{¬u\SRÀÓCæ¹w#zt½®cŒwA¯…RGÄÜ”eµZen~žw‹h…|A@Äצù‹Åîºë®%Vö2<ø–¡þ‹æÓ»€0€ Hα,¢éhYHM` $)ºfì}ˆÂR·M›6ýþ÷¿¿á†æææ–z·¬}û›ë7_èìn¸w5•l@ºeÃi044ÿÓŠ1æaœ GÔÂT©^×MEy–ÐwH¡æI1šû2Ö»ä( æ³÷Щc¤'I’]z}Á,Μ¨åJÝ=ýf„™D,åôíÏìMWÎ]3˜ˆGDIÑ,ØS6§æë«ÕTG²SNŠ“e¬Žy#53¡ö”Ba%A°ŒZæð3ëú¶îœ‹¹btc¯nuw …®¦a“q&S,²DÁ \ªÚœðËÝ㨳=;ä:„Àyy»iZm¶îµP °‰¶?AÔJáé½Rn ¨e˜F¡Pœ<9é—÷µ•6_[z‹Å~ûÛß^qÅgà0 ‚¼eó_DB]%€€Ò¤Œ 1Û²ˆ[Ù?eõª÷&âËÎÌY¸yóæßÿþ÷==KU{NýÉíÿÜAu[Uº'ã‘Swpk7¸††ƒNÎÇY7­¹|Üp{/@'X"L 0Ã3÷ýìÈýwé‡sÇȼ´}zÏ£Ûv<÷øîCÇNæÔZ…f©jψOLÖöާ ‹¢ æUÉJŒªRüÅ£9µXEBê c}ËÂÉž%­\×)cùšYgÆÈòe¢jQjZŒ2j1FAÐSçEòaIð\&àž´mS»[^nSû3Ù(\ԀźÌÝ.m7©ÃÐñ¹i6 zé¨^¡޾Þ"×øk™ØäN©š ”šõZ-NÏÎÍù£’(Š¢(¾¶bðÖ[o½êª«ÎØ‘ŽE‡.Ür³,Çä&eÔÕÂb ˜ÕØ¡ËF._1zÕ™Lö7oÞüoÿöoKwî?xçÏsÇwÜCÅN'ˆù‡$¼Ôd^|¦e©â™…n5¨íçí2€0 Ð@ÀØ9—ÏΈsûfs3“€X¬êRd´Fãã EC7Ђj˜‰®Îpb¼h”ë†EY®X×,KRÂ@P¥ŒR ™‰ºz#!™hfW˜¬êíëZ;ÔŠE4“š¥Œ³ÐNP·®ì¿}Ž[T¥}B@„8ÃmÂE. xÇÄ1ðU ÛháCsìÓ¿[‚Ó1l“£ñÔÏÔ4‚W´ c¡â\lá15Æ¥–¦¥bi~n¾R)û¡+QmñâW»£¾øÅ/þÕ_ýÕ™=ÖÐß·E’$Ä,€Õî^…H†·nXwÓ(=Ë7Þ8==ýw÷wKaTaYÖÏÿý_/}ç5#+רB¢Íñš†„pSÓ¯ÉnGWÙÓXá&RÐ%x×ß›Me+M—Ö›€PèƒQH®\Aö ÏÏÏfÒâ'æRRÇH8™Ôͪn1Ù Ig˜°åÃùPÐ5}¸+ôÖ†`©J4bX,‰œ·*VSuXŠFd@ ‰dMŸdQyýà`£´Ié`°dS¹à0ã*nƒõ™ÿ/gŽú¬Ý‘s låÙ ÷׈)‡¯»ÌrËÉ]VqN‹°eðånÿñ‘dz÷м,‡ôÎb¹±ô!bŒ1ƨiYõº:37wüø1€…ˆ²,˲Ì $gbùÌg>sf˜“þC÷ Â2 À rç éB±¸fìýkW¿_x#–­[·*Šòè£.ÅÆ-Ë<ºße×½W’䦊g®an—ž×®ƒ‹ÙÐz¯ólM3·,ï‘DÁ/é (Ä’€€ˆ(™ª6—™/0€HHˆ*b¼#:Üéêì DE—IoLêK†B2„PHLD¤Îx¸;—d‰$ 1£¥¡`F!(BìÕÆ‰N€”B¡Õ—þþXÕd§Ê˜'‚¡ » ¢žQfÃâ,—'Ïià© $À<+÷º—Ÿå·ÃAÂŒ8SBO˜k5 ´|àv IDATf%Ó‡b¹qlÈÅ0ʨ¡›åJåÄøøÌÌŒVA–eEQ4M{UÁ–-[~ò“ŸÈ² oÐBˆÐ Ð ˆ†-Ø€8ºrùõõl>ó¹¿\|ñÅ»víâ%¡qɦæÓs3_ù."Ì…)c /ÉÝlòx\jÇ` 20 & @ܪ lH  ŒJ‰®ÎôÌl1f”‰DŒ(J_G¤+G@jYÔ²RY@YlÌP°¦“­ “7¼”,‹5°!Ë¥”2J[\f†áž¤ªà[fm«¥¶¸€×¥â,- }ꬮ¡ÖD:¹!yàßñT›õûMøat ÒÐhéËûd´œMjv¤FŠÓÎA¡ ,“š¦Y¯V³Ù¬?$ ‚ I’(Н*ZsÎ9Û¶m‹F£ðÆ/6ÁL;’ì5Ô¶‹¾È²üóŸÿü†nرcÇRlÿÉû·ÀÍ_ùgQ’Z¢W.£lÂóN=Èi34U´´LilÕ¬†"¢ˆØ¡n¨©Ùéû^|gUçú‹›e¸][”B~~PD@f†e:‚ ˆÔn[Ò†¶-Š ±‰Æb%œy° bˆH eD`–®Õë¢Ø}T>÷þýY—MŽS÷ùu­šR.J¹ )ZFp&…5`1Âb^ŽãàttÁRèJè~ú½¹[ðª%©¡FWï³:Rû#¥9þÖÊ(µï`•jµR©xêt»9hûŸ>¡AQ”o}ë[CCCðæZÄ7Ù÷X,vÛm·]yå•¥RiÑ7Î(}ò¾»;{û?þù/"ز0 >·z xé ΩÄ8m™Ö¹+ÒUF“ŠhÔŒ™ƒ÷ßùˆÁ``Pyþñ]#•ܵ·l¹ Ø´^ʫղ J€¥–uô9TlÈö1jÇņ›]8 R‚( ’Ž)‰>¡cXôŒ—0RÖt„D0tcúøìÙõL6_¨èxí5×Ed9ÖÙ«j—åJ‘$€Íƒ ˜žUdQB©À£ŒæHÞØé[SÎ…Q`Œ2fÛâ!„ ˆ’$‡’½á¾ÕÓØ{´*í=Z›.dUÓ¤ L‚&e¦Å,J105¢4ã°Z»¹„±ø`Çmí,̰l³#t]O( îô5³(æ1ZEwâÆLø«Ô•D±5QWÖÅX,{<’ŸB¼ø³1,£X,¶«m¡äÓÜ?ýèG?ûÙÏþÿ‘èô—?ú£?úÒ—¾ôOÿôOK³~zÛÿTB‘ënü H£Z©##ÜPNnù„DaEwl]o4`çÛÿÖ§òùªªSjD•PHÁl~>¾ù|=~v߉÷íØ³î&DºAì2\’ÆAÂFˆ=CXãÜ€‚æ½Óþ_c £« ¢Šw ÷,ßôB%¶cF;¸PÒMjÙ¸``3L{Þ*ÐÓàãþj‡É»R,wñl̰&A:ìÁ)TP-Ǽ«N¦ÄÜü5ðepÈV Ÿ‘Ô”Òl4}ر§ó,JUU­T*ž¢EQ´ÖiÖƒ+V¬øÆ7¾ñF´©Òf†Q©Ô39­X´TÍPU½V£Œ¡(‘êèˆõ÷E»»EEÁÅÙ±÷ó—¿üåx`Ïž=Kñ³,Ëúñ¿~#—^øÈ§¾@DÉo¶ì8% «zâa,Ü·ï‘£OÞñôs/åëše1°p(&M“Të•bYŸÉÆãL}ù0TÆGÖ½H± ïî”dÅÐ5×ð‡¦(c”QË¢”2jÙQ’" îŸ(+‘ÞåF÷ÚcØ÷ðœùø±”a¹\¶øÔC‘ë#ØFÓNÇ<¿Û-:Ê.\æ}Ã’w_¼€$®4ã<晌ñÇ7Ÿ6¸²ãUíâ"ó:¹Ú¯ÕRlfP“¹å\œƒnYV¥R)—Ë~Ë® !§“a ‚ðãÿxddäl‹SÀ¨¥—+噩ìÁƒ™ƒJÇN”gfj…bµR­Ukº®›¦eQ‹" "‡ûûW^vÙ…ü‘e[ÎS¢ÑE‰ÎñxüÁZ fhjý·wÜ^.æÿ/þwQ–›PAC´ «7â•,å]Q4õ˜š]xâáÛþø±#G-­’èê•Âr0©š¦ªz¦P Y6<ÔÛ1A E"Ï›¬ê® uh:€¤D㑎®RzÞÞ×È0F©e[ EÁa-R¢opý[³¡‘o?q¼ªÏZ´™@¹;Œy=Á­ Š< ÞÊš|ÁÇë3ÝÜBk'Á#Š‹{†cÛ[<0àQˆŒá{ªÜÔSæóýn³–Oµšáɨ×X›Á›]U(ªÕªçY›Ð`žN[íË_þòkv‘x•eUÓ™…}{ž}.{è`}~¡ž/TJ•r­Z× Ý4M‹R  €³¨¡æ*¥Ù鉓ö_}ógϹúêP4º(yVOOÏw¿ûÝO~ò“K÷cüÍOKùÜ_Þòh²ƒ¹S& $–VtFbÕ‰Ýû^Üq÷]ûOŒ§JÍ0-JIê’«ŒƒãÅt¾("Ê!E `™´^7÷ܸ—’ž©¢pq¶ (OÍæföä9žs™loBO)èÈi{Æ£±=XÆu™´pT(.PQ „4Ø-\Uh׃š¦•J%)ÔN¯ìzòŠ%á\pË-·œ=•Pji¹|jïÞégvä.Ï/”ÓùB1WªTUM7,ÊY9õ@ º1spÿ ¿û]÷ŠÑÑs7 ¢´(_ìŸøÄÝwß½mÛ¶¥ûíÏ>z!›ùÌWþ¥ghľ ‚2âÚÞX¬Ìì}ðÁ§wŸœ8¹óÈ Pëu‚¢(wÄÂD”LËšœ›WÄeÆPi˜uUÏ—ª”Z±ÎN)Ï•õz±Ò=<0ybá¡gÆ/ø@ ÍN³kp`œZÍÝÙ\À"2Ò@DAE1Ö=0ºåêCõäož<¦[î‰eÞ¬mÆÃµù¢ÎËi·ãs2d-O Ï(4žó»d·2•– 14] 99"ï0cͧk‚Ìe鵘ðT|Þ(èþF@Ô²8µ‚Ei‹Ïâ°4M«ÕjžÊXv´‚WšyŽD"·ß~»¢(pv,ÌTÕì¡C³OoOíߟŸžIOÍdRÕjŰ,ÆM¬4‰à 'tÁ€!˜µÚ±_<ð䎾«"‹’d‰¢øÏÿüÏ/¼ðÂÉ9؇üО¾þéÝxóß^zå5Ë’‘$©ïñùÇ8òÔÛ3©tÒþžd‡,C‰¤ ª†iššZÑ$YŒHb4Ò12Ôa ‘D,¦iZja¡R)Ë¢ kšeÀÑ™ô{Þ>öýÉ…gw–YêÆ»mIŸz¬+!*²Q¯óæ yŒR L…P(Ò·êœèê·ü`Oi÷ôq“²vp’ ¬ìÀÔùP, à”{Ì÷~'F¡«?xFP¬Å- ýó‘Í0Øbì—‘ Ä©¾¸q€VÚãű¼mÅVlb¾IgîÛ0F¦öR­F%‰RJ›H¥w·–ªªõ =BøŠéÕ§?ýéK.¹äl)Zmò‰'fŸy:wrráÄäôøx©X°hÓ‹˜Gòv+Öìý3@ÂXunö¹»îYyá%k.¹@²ŠÏkÖ¬ùÚ×¾öñKºr©¹½÷ýjc/>¸o÷övKUU×MÓ"Dꋇ»;âJw¬rpÂÐM&‹±d¤§S.”ë¹J}|>·uëe+ÇÖ‰‚0=3#Jr¥RªUJ¢(2År$v¡Y{dw%C嬀ëP•j¢»';=…œÓ ¥Ô4-ÓЩECŠ’èÙ|ÅA³ï§Më:ušuÈÕnBËoÕéèñ¾¨Þþ µB'·²m~œÍ81ÍûJæÂî—vY´ÑŸ8²ÛrÒžGøØóNºÏ5'¤ÃíÌÖø$F1HhÔ;—§Œ2‚¼ÖkMŒ0®§ľ0A–]]‚¬+ÙwÞ¹ÇnÜrþb• ²,ÿà?xË[ÞòjGÍÛ-ÃÃÃ7¬K⪎T¶pìù§3År]§ƒ]ñ¾Ø(Ó¨¤ëV©ZÓ*j4,ÉÄÐa¡6?“A „ˆ"ˆ²¼fõê-[ÎCÒéôÜÜÜüü|6›EÄB¡RÈUïxǵï¾þ²+®B¡:@ `P€(@ÀÚÐꓵb9=YÊL›ÕŠRÈt„«±ÎÁõŸ†of¾®›zÍèNw¼†àŒÇ[Rp½É'ÙÌY૦Ñ*;Ëh À#å,€ÒàÈŽº±ª€èƒzî è,ÐJÚ¢Ú '´R°æ3Ë´S*'Z1÷B)5M3pªY;Z9Ò}Ë•W^yÍ5לÑJ3`z^|1÷ÛßÙ½«V«³†5ãD¿ƵSØ£¡D”%‘#‘pWg¬§;ÒÙíNnü؇ÆÖ_ •+ÉîžET9ÿüó?ò‘üô§?}ˆØØªUkÇνæâÕ”éö½4~ìÀxF««j,êîíŒ';å(9pò¨¨Ò ‡¤®h´¬Öò¥Â¾qÖ› iI¢!O¬Z5Fˆ055•J¥¦¦¦&''+• "n}ûÛþë—¾¼zÍ[V¦`XÜý³0eñW/ÌÅ%úƒƒƒâúîPX‚¬¾w¼ðìÉÕ°X`¸aþþ^èêõÚiÜM\Þ‹î±é ?+º„jgÀŒŸÓSò5=°4§¸lŠoÿaÛ(Ð÷ÿÓh­ ¢h§W–eY–å„-§$¤”êº^«Õ<ËRvÀr–ÿÃ%IºãŽ;DQ|³‡*P®Áá£ðÀƒ¥{~7yäP­^ä‹„À¹²ÆSH„P4ÖÑßwvE»:{W®:wÓ²Íç$û0¢„È"5 å¶Ûn{ì±Çfgg_C!¼bÅŠîhx݆51EÌå3÷=³ IäÈø Ê’0<Øm21S®T«…¾þžÎHUÕ"‘Xwg÷äK@CWe¹ I‰RC&‚¤„zûzC¡ðÄÄD.—[XX˜ŸŸËåò²,‡B¡ŽU#«×T ³ý©Šˆ]ÑãÆà€ÍvGJFNf§MJ) `m"ãÌã‹'vñµ_p²d£^Œµ¹’‚e9ÝL†³‰éÞžñýÊr:kiµÏ‡Ðµ]Œ º?x'™K¼ÝÙ€iª'^BðO_'`Ñæb¿Ë^·–ŸãnÇ){aŒ2¾ð…/,_¾üÍ­, ù"¼´ŸýöÎô}÷f²Z ÎPœK£ Š±ÎŽþ5ë:V,>÷Ü•_Ü12ŠFœæî¢G+èìì¼å–[n¾ùæÓ|½$IÉäµW_µfåHmvüÀÄÌÌìD¹ªVk†"…Ö n^¹j&Ÿ-Ë3s™p8V‘Ȩ’CM2d…Bm>•EÁÐõ\¹:J;;ãáT¡* B$ …"³ss¥R)›Í UUëõz8ÎåòËßò6GñÀëêà^HŸÈØ9-e`Qz"[¦Ìsгöùâ ¡E[àÑqïj£dm&EèZmŽ^žêk½ÉKBæ yˆþqg÷1ÂöÕø˜Y€©´}¢1ÖìÑf0r³z!#’†K³Ýæ³t·ëÁz½^¯×ýœ'±²¡kA<8WOOÏg>ó™7oJÅ(…\öì³~ú“ÔÃä+%hê-a{\ÇëÉ–X‰$k/»òü|pøüs¢]ÝDÎŒ¸÷Ç?þñÛn»íðáç†ê—-[vÉæ F‡ó•y0+“GöÍL,”kõ ¢ö*’ª–ê²$¦³yE–ûº€¬R«/dj uíh,¶RÊjµ‚!™š9؜˔@’!¹|azf¶T*©ªj†¦iö />°ìê·]k_ ðëý=qQ Ójâ[Ã&£Å;à…gØÊÞZ‚ãųW#‹È>=«Fs00 ¹Ønè‰R½ }žuÄà¨æi[8 ©S‡ ]µ©íNMg0ó˲,Ã0êõºŸÓÀ¿ËŽYþºïË_þòèèè›3^µja|¼oÍ:R®Àž—Œ;¾7ûøe]C‚ÔÆàGøíë€"IìY>úÖÞtéÇþ494t†ÝÊ“Éäí·ß~õÕWÆ©‘áá÷Üpa†hi s'÷íŸ,TëºnŽôH¡h,U,¬ªõ…LU· ]ñÈyë– Õ{ò¥l¾V®UÃáˆ,ÊuÕ4M3r5YFÊ€IY*Sèˆô%ãñήX]…ÉÉÉjµjš&cÌÆ=@UÕßò÷#Š$6˜§0 #ŽF¤|Éò¦Kî€Ñ4 È€lUÁ` ÛKÅ´‚rffî§Ð_)ºTÚΛ9ÃBWÉǵéŠC³B`þv©ÓFä=W° p>EÎ…5kÓGMð7ï”u|²ÏxÓ4 ÃPUÕ߲ߨdK !Ä#ºfÍš¥æ ½vl½¿ÿÞê\¦7ž„vÖ¿÷ƒÙ½»ë¦ „Æïý ü·‰pPDQ‘G¶œwÍÍ7Ÿsõ5r4òF¨NÂUW]µuëÖ§Ÿ~Úy$÷÷-»ôâMç®Ëdf²3ÇgòVºXÐ4K ‡:’‰P´3Ç^~¹ªS]B"&¢qA€ôTAÓU½®Ë’ÔÝÙe†fºffŠZoO²8FB,ji¦E ƒRkKßò¡e«©0ìøx±Xtô…c†aØ®»ðÒ/|âc!ËÝ7òºg â`²PRƒ„@=3/ÁÈz;#.xç)]&üLSvê”Yk±kc Û†«àŽt§Ä©X›Ñh.¢jò7 «V®¥§Á0YHOØr–eYN‹Ðϵ_é,šÕ-·Ü‹ÅÞdU CÊÊ3s'øsÇNH²_ÿ²øË;Nœ4‚À€¶@TÚÂZSiÀ,"‹Ãço¹öoþfÓ;¯ß8?"~õ«_½îºë$IÚ¸qlõʵ"˜V¹Rœ™¸ÿè¡H,Œ‚5WªwÆ£C½¡bES5ýð‰‰ kúûúæ«z§,\téy?°=›×h_h¸»#[¬ëºn>„ÅI¹^ïéè@Ã0 Ãìêì8§¿?±j,5;ÿУOT*Ã0(§@)µ‘”Ð?|ó›}‘ÕhçëûýCɃGƒ îr1êGšÜÊ©î÷#¼"Ë^B÷æSx6»æª¿ø"™Çûòåvé“Ûo[`¶R6-;§×*ئñ,gÎÆX†aØ'Ÿ§TEp#5áp˜O¯þäOþäMªì;¿a¦÷šxôáòÜL!3_=rtUºPʨ 5Ú`#åªtS—2f0Äî+/ÿÔÞøŽwoô¼Ñ—_öñ?¹±WÄÑNù©Ç-¤«u“2†¢ ˆÊº‘N"æó¥Êlª@A–H4QVb¡Z*§idÿ¡ñ$ Hr¥Êpo,,CÙ@&Š‚­9\*W ᡞXÏð*Y’÷ï?ðÀ®½õÏ*ŠbSð,Ëjˆ#Úõ ýÈêÓ7¼ãrÏ…ÏÚ£CöÉÔÛ%A×MÄð0§œyƒW,s¶f‚äÒmCê ø5̯u ÚJôù"?hs W ·rTÔ‹RL±Å‹ð°´œy‡Ú¤®i‚ ð‹Yž Ë“^!¢¢(¡PÈZE"û|€¿þë¿~Q 0£Zn×äö'Ëé…¹ñc“`®œE 0Š€´¥«É_)´%[Î#æ!eˇ?¸åºëäPø üej¥0?q|ߋ׋ÓÏæêûU뺥aOG2¢ÈR„fòÚ|6]®ÖUÕèˆE@uKÏ—+‡ŽkC=½J8LÎMΚ†Œ¡(–u½¯»³®å©E ‹š†IM£¿·÷â‹/KŸxb÷¾‰‰ »#,˲CÜsb4§#c«7ŸÿO_ýŠL»€20ð&(‰p*S†¶*ëüÁaAtNXÈ;1… -­hÓ¢w«Tœ†¼U3n²3œe‰K­œÂXÐMÚbèqÈs°_ôËÏ ‹‘о[•§ºl°'@-=k†eY¼ï)Iy2,ž¬`7C¡$I¼¢cÌa†a¬]»vI%P^Ehßu£2?7÷Üs {ö榧Ç÷½4?5©kzÑDDÖ¢iVƒ Ý£bü¨µ•¤ãˇßú‘?¿A5¯Z­éå9ŬÜ×/Ø9]ȤöÏ$‘îî WMdRÓ™ÂB®®›VwW„亇NÎçËͰ ‘pH’¥DTDJ…’,Ë‘BPÙ\i 3RÓêÔ0£áð ׿;™ìؽgßíßù~½^ç3V»¡l€!ÆIf£ÉÎïÿèGCÉÀ©aðãÚ„à@_"•)ûêÁ )¨àj4ÔÞ9€xr;E6ä€îÎKØ++ð²éñ¬cº¿Æ<Ì3ª zŠƒÏ¼â¤à©?CœV=·`†ÌóµH9¼*Ó4yxÂX²,óZ4Ý'ŠŠ¢†ñùÏ^ÞHw¬ÆÉʨ©Öëé\îð¡ÌË/•ffR'NÙµ§ËY”6æb¹ó3ÜÊ< Õxˆ6P_ƒàð¹›F—Ÿáž ³ôù‰Ã‡_Ú=11›­f¨PÕt)‰Ã²þ~I"ˆ8_ËUʳ®&£á®ˆT¤ÂÔBUbX(TeI‰$#ºfé¦U/è]ñxoGت˜j¦ÅT]ÏWp㲾뷜7zÑÊZ=zßý½üòËþ– o8Â.%­)‹ÿñßü·mÞä?Uëødª4Ò—hW- &÷˜9oÛ™èxR87,.mfAYZéŠ1vš ;µÄY°ðpR3 ”Ë›Qy|u0,D_! Ü5ö*5Íz1§ëº¯{j='â”:ä,OPãG£ù c±˜,Ë7ÜpÃ+ÃI-{'ko~0gx©‘ú…›Û§TŒ¦šËOž,=^œœÔ ùZ¡8yèЉƒ‡êµšKõž5"ߨe ,@«y·n.`@,=ËGI:3ÁW­Íï|~ïÁÝ/^º¾{ÿtöàñù©…t¡¬®êüä{ÞÒëß|ÿ±cs¥JUÙêÑ‘ý+ÆzjA¥o`ç¾åJ]ïí\>20Ÿ)VkªE)A" bQWcáy–× Ó²Lð–‡C[ß÷¾ŽŽŽ^Üyçÿúe&“9Å,‘}sNÇc]ïûÜ­W¿û=’@Ú¥F¦EŸ;47ÜwúâÈ]ç  ¯'.‰‚fXm ¼Æqò8@rÝ]œ’`åáañÃ…Á-ÆSE°³tç…«jc^öJÙ÷²†Å\šÊ IEl7XØø£–¡Õªv†ådòü9çLÚáÌßô¼˜?L$W_}õ²eËüWk&Õu£®µªQ­šºF #HIdI ‡…°"È2ŠRÃkŠ DA™‹À½C©eT*•™™ì‘Cù#ÇÔlÖÔ SÕÒ33dR¦e56ÀšÄf®óG›Ç@0šÅ ˆìøJ)!òƒŒ1Ë4'N»ïî»^|ö‰bE‡ºÊ®:w÷‘lÙ0׬]Þ×#G¤™ÂÜ3/åŽLdbow‡EH±®™’5;‘ªé’eA8$eó厸dR$)DˆeQäÙ|©/Úƒ"Òš~þ…k)syõg?ÿåé‹@xB„eëÎý£Ï|yxÍ9«zãí®cP®ë3ÙÊB¾ÖÛeA©’$ ==±™¹BÐZí".yŒ|Xp¼ÁS z\€fóâìpÆ[ƒKˆaa Ž;xµŽÁÒØ© =žiêfkåd>Âsdÿ€Z–®Ö ð‹;ÀrÎE»¬óLÛð­kωK) …BŸûÜçø‡©iÕšV,Öó¹Z6[O§ÕlV+jŬ«ö,2 IDATf]5UÕÒtfY ¿sY™È²VI%YŠD¥D"ÒÑéí wwÉѨ‹%DQ$$ÄTÕZ*U™›©ÌÎVfgÕlÞT5Ë2tM/¤2sããé™YM×dÌÝFÝG€…´%#H™e'¡‹§J…üÁ—&Æ>søå½†ZxùÈä±™,5 %•âÝùðÆöM(•ê΃GrÅú–+?zÝÀOÝ»²érM«ë‚ˆ®‰)7”8 ÀåƒÑ΄\UÁдš®!šlmïÐÅ—_³êâ«J:ýÅ÷oß³ïþr±ð¾6!Âðš ïúè§Ö\ø6AVa´3vŠÜc"]fŒM¦K½]Q—ÐÖYèOÎ̃ò"4Öéãså†¬í«¸þ`Ó±©“Ň*OC¿õ<{#R¬3ŽayEÜY«a§P8ôGµe’Ay®°a”꺦ëº3½ì4zxÅQƘ(Š6w4ÐGÇ) øx'Âôôôê±1ËÐë™tizªtr²2;« F¥fjš¥–a˜º¦©u½V×5ÕÒuF-h¸Ì™5MË4e Š‚ J’$+r8,…QQÄBd%Qd"ŠŒZ¦®1‹2Ôb†nT+•R>—O¥ ™Œ^×l¹¶VåíîLÛY¬Ñ*deÀ¬àóµjŲ,B„EA±c†^ËœHïÙûøãOîX˜;Y«Ök%­£G™Ë¢¥¯«D©T3ƒŽ?¿OëíVM¡P®gæNÎ¥ áÜÓ7L«R­Y¦R$"J„ C’)éärµHM½3Ú´ù@òøácÚÑÙ¯¼ç?…ûìßÿÓþÓ§»çÎç{`azRSë§£-¡„##«7¼õ½7n|ËJ$F£ŒÅ©'¦œ"9¹P€©Tù‚µƒs:§tH"eÀÌÙé”_>æúé”nÌCNåò³vÅ`[9x15W×Ìb¥V­©‹­éfU Z§–€]=ØÍ¡ƒ²jÈxøÑ'§¦¦c=½Í • ®¼é3_üà'?;?=õò‹ÏØùÜñƒ/åÓ †ÖÌBBB‘h¼£{d͆U›Î_{Á¥}ËÆ€–ßÀP2â°œ5ÃZ(Ô U¨ÕuSRDæK² «;&IÕLvútt.P°¦OÄ©!§€~^³£ðI¬míÓ°Øazp¶H$3ΔO}:™Q8-RÇÍÂI”œ¬«Tµ©,ÝõzFQ‰ :‡Ææø9à:/ƒeólN º |Ÿ[9‚öòèC­ßÿ2VªV("$ Q+Uê™L­P¬×j†eXŒÑ–Î6Gy²“AÐ<),–*„dQ$‘¢Ù(e¦ašvRÆ(uZ؈T RÆßû ¾½O€EZ¾w4¸‹„²Ê\ºV.E"Ñׯ(µæçæîÛ5³û…'öì-ªZ:›®—k½½I),tÇ;ÇÂJA33åb'gf¢‘ÄØ`çÖuëgÒ‡ieúž§ÿô-oËèÅ Î[_T••½‰|¹*I$R¢!ŤŒ2+•R% -“1ZSëÅ\µXÍ81ï©ñ5µn†Ð$Í!0IV†WŽ ®XuÕ‡>j¦¦©Å\®Z.ÖjUÓ0û–­Ca%gŒípJÝùÊîX;ô Ò¥z¹®3U7Ò…êPÒµgš+‚@úû““ÙSÍòˆ$4f ëízF]Ù2€‡ÌâJ‘¼ù¶ÍèܾÐÈØYÚ%luOÅipëa±¸ÜòYØP `è²|=HÖ²dÀˆ JÈ€ìd‡ú;ZùÕDù¸f'VNß0§i/NÍ® E"1¬§2Õtƨ×uU£¶fK“ÿj˜²àVzROûe&¥¦niv—?ñ°e9‹þIÍý[0Eó~Ò(mN7 @ð`íи,A°?вüäTzb²»¯Ø«°J­×jÅBvvbÏ]w=8?3™¯”C@²åú\¦¸f YT„Á¾îd˜í;ž?05¯3HDÅÑµëÆ–eò•¹TéÉçϯ]ýÑw­ÑÿëÄ|¹V­ÕqäçöTòªnQÃ0-Ê2åDD–ªz¦PJgs†i2ÆRÅ ÐÉÔz-O€ÏdQ Q%¥l„6³W€³”‚#‘S”_鲃AM¦JCýIÖ¦z옘ÈáÛ>¾9k¯í‚ž÷á+•–>½þS…*„ŽuÎÏ~Êú«2knÇ…@ŽÜŽ.R(ÿ§ÿ£§Ü@DYŽÄýטí4á [6;Ô¯;ÔþO››cRzŒš›–õ£¨T§gªé¬¥iºª–i‚}®Û SÐqeÁ¿¾qµ<Ï\êèøÄ5åi[aßë(üD3C €… ,2FÀÀ¦Ê %1GBŒJÕÔ4c´05µïá‡F7lˆÄãØöŽÔJ ùÌ#ÏîxñÞm…R¶K„]“™’Z®×Ìîd|´¯3¤ÐDWg~&}èDjyŸ¢jjGw2$É:à|*¯«õÙ¹tWG÷¦Mcýƒý²¡œ¨¤''fûâñþ~&LN‹¡0WÓLà ˆ¡RÕJâB&“Íå ãTƫԲªåR$–`í£{’€Ëc¹;¢$Bò)P¦‰tɹ}L¥Ê—6ÏN?„ÞÛ'¡–å˺Ñub”£žø˜>ÔÉ¥;ÃN“«Ð´pcm;ÓÓ„‹hUß(åÀ#òÈÚG$ŸÍ—{‡0'_kj,¾¢ 24 8aD„;{Ú%öØ Ÿa9Ž8Èå¹N¨òCõp‚±‚ Ä檙¬¥kº¦ê–e2JÁÆP[9O<éîr| ×KÝ©XcöÕ­aÜœ§m e0›rà*¬¦ª†)´v¥`˜[¾áºwmÜhæÑ§ž<ñð£V© Œ™µú³?ÿyߊ•oÿð‡åPˆµ‘S¬Ugöî>rhÇóÇ&÷Lžœ)«¥L ûCŠ¡© wõÇúâ¡p<|r>»ë¥]ÝÝݱDG÷r=2—žO ª #}ç¬A)iUKV1»k!%iË7®ëÝ Èj…e²uM[˜Ïˆ„‰öô(—_vÇ>|Ó/~ù«o~ó›§UœZV1Ÿëi@4þLÁ=3ÇN ],댊£¨jÆB¡îl³PVK5-UüÁ‘$;"Ѩ\,ÖY¸›µîÉ.P>‡dôáÜøU”¾¥nn¬_:wú¹“ßûò—ÿ±ZÛT˜Ë˜çVj–㨪š,•¦òéϯn6¶./ÌOÓÅrVÕ •ñÆVýù3bRå]g|,§êå¼Ùâz»Qkµ©–Ü^.¨©R&S°ªË «ín£™Rˆ™2o¿ãm¿~ç‰]{öš‰ ¼›ã÷ X®ël­¯IJ¹Ðìöˆ%éÕÃþyGPÞzïîT_©[Í­7m×õûÉ®í.o4g’zl-Æ-—3ÕZ{P"ª8HAŽA¾üà¹^¿6ëß1ÖžDª±Þù˜ ”K‚”ËGûþAð£ k ¥Ð­b\ÀDÔŸôLMe#­º‘„›ÄôÈ4e 9ˆÄM÷…Ë^{躮*ë¹£ý Oº‹É†ÏmmíbªærÇq]ô ù¢ö-Äáð€:î>HÃ+•Á4S4d#ÁOä.@ÀåhÀ¡Ìðñƒ'n»³²{Cîn6«+íêhy F*üô9ÇÓ—ºØ\[{ôw÷¹Ï}n×[Þ¸k¼Ù&Ú«[­f«¹¶ºe$a´\ÔUZDõÒÆ²Óî˜I3iÛwnÏ6ÏÎ-­¬n„Û&Óó‹¬ió­•ó³ó&’ÊêZkz÷Ô[îyË-o|S*“_¤}ûöíÝ»÷Ô©Sߟ¢¢ÙÈEµÂô«ÿ¶I”Py0BÆóÉ«°µ—Vk!ºgv¹ºm¢€:Ðá‘ì¹sËnâ.E~=ê*ƒ1CŒ^a0&µš1á¬D,ì^:,Y*ªÞý–½¯õ¤qâ±{«µ^*$9u±¾ÀÀš?xÞY3U™dªÎínH©>ŽmÛ³Hö|üÌãªBô¼¸ [wxD»Ÿ:GÒa€H‚!ëi_ì1®åôŠ_‹9‚<›zàŽ±õK«©Âù R‚ˆÙl¡TntºëV­ë¸Ñ%èxó ks³sóWý½IåÓÉ¡’qe¹Öé¶íÖX1ëRšÏ–3)-™É¨Ü~nn®Õn&L-?>~x¿rq¹Ýhµº6îNL ¢% s~£º¸´T­ÕV¶jÃÙ”™HÑÚ Ío,fÈS™¢ëM§ðs?ÿÓ,ÁFÆgTˆè{Eùð‡?ük¿ökßÏ‘jÛ¶X?]EމBå fùEM%cè DqÄÙõFèö¹•zì[ÜÛÑÎRF¸#pS©é  1,¸ O ½¦N.ä¼ó·àÁ%Ü3cטÄzµ“Ÿåº‡ˆ’(BÄ·¢K/„?«DÜød°D+ºèw‰ò¨žÎu6WB…•ÈRy×=&>$Å õƒ>`ùô¼÷ Ow»îRÄŒ‡<#EÙÅ` Cê"ó±Aάį¤×¸§Š@°)S‡ ܘøù‡ï¶.^PIdËT©ŠÚjT_8ŽMT@¢°¶¦/çÓSǤʅÍ3—6êMÆÛÍf»ÞîfÓf±412fWV×Öç—wO•˹4-ê›Ô;ífË]^Zɤ“¥Òô®Ñn«õøç¬NÇ05ÛN ]ÞéX›ók¸}lg%SJå²É[nºõîî9vó-æUÎ7ðŽw¼ã7~ã7šÍæË«ÝN{–<Ü!Äô…Â&òIJHlKˆµ¶½*X‰zoN½Õݨµ33¶Â2Z6—\_køpŠ1OŒÀ€œˆC)ÔB}_¤‡ÄAÓgG1’Y ]±^MÀ" ;„­c¢Es´f 1:È“”ÄwPZŸ©z~ÛÞ¥­Õh3(v…þ‡!ª#v<üò„£â7n¸Àèv×ål9óT…pÇ_…!^™(Ô‹Ñq5Ø\iÖ~ê›~ôÜ®„##Ø]ÏlŸàÍ•w¾]?pT­ÿjPʨ÷jÊ('nǵڎbÙˆ £žJìxã‰v»Ñ±¬Õõª½±>»¸ÉÒ©á»w®lÕÖùËÒIci£F'•K¤R&ƒÆss­v­™N%o9¼+_¨tÚÍjãÛO^Ü>‘˜)ÚØ1zµÕ´ZÛînÖZHB×*“»y×;oºýÞlîûÍŽžššºùæ›}ôÑ—¬vÛÿ 4M>¢•†à…˜*ÜÈA€‹+µP‡‰€ÈaaµžÉ˜±ãHÊhi(³¾V—{(ÑDѰ.Œ‚a+@ŒÓ‰~kœ|1Œì¯[ÇÑžq ìƒ5Ðá%‰B¨œêQSkØJÆ=¤o/„”÷_~úq},WðC±Â e‚ùâæE…ØŽ†’«”.þ„4”Üc÷0Ø!ç@€àÔb\ ã‘ÄÔnþ«ái©\@—(ŠšJ—öì>ö¯5Û­txœp( ” Žc­Í^yê±o:Ó•Éûo[Ùh2NV;óvÕ:7¿NŽš(r.'”T›õÚÖÊÜJ3“Ò¶™fŠ* Ý“g®ŒfC¹|²RÑ “p²¾±zqvA5õœ™Ì¥‡5¥sñ™çÐ&çdXÊç ÉôÝwžx˻߳k÷UÓûÁÑGyäû¬N»%T/ý®ª×Éq@Ð7‚[Ec¬’1Íàâj=Ìö àÜru×ö¡b¿ÿªŒæN¿8?P'q^ëÒtÿ c¤L F9ˆòÍŒLñ:®:¿†€Õ+ƒðªz‰ž‰@YŒ/‰]ʼnDˆIÑ:½æ3Ž…U3étZƒÐÊëïB",6r|уX¡%ê-§TvÐâñô\¼ú;9}yMt@¡7¿ó$žVÞð6×<µ:(;à"C „ '”šº‘ͦʥÔh¥<³³²gÏøÞ]¹;Oиæ^b·Ó<}æ¥KçÏ+ؽ´¹f îtygöÊc¸oº²O5˜–2u½Óꜽ<Ûµìí£ÅòhÁ0snwy£¤EÕá\>=12¼w×ÔÂâ⩳sÕz³\Lì(—µ‰q‹4Û-<5¿P1)ép–Õo™šÜsì¦Gy÷Äô6ÃLXý@\÷Þ{¯iš¢ñ^<`µš±–?e h*‘™ÇàDäÉHGs ÑAhÕ±ÝÅÍ&†D¢€ÃÒZÃq9a4N‹åá,¡]7æ«ÂÖ :ŒXÂ`†I@_eþ9R+ ^ºÊ 7>`eÆGK €…fþ. ¥…Cˆ)×Â`a^Ë{£0œÚ³qædhPè0<?ÿoQuåÝ£–_g6î8Žb„þ”Ãþ-Þßû©ý¾Ï䌱d*1:œK•‡“ùÑT×îvZíN§a·V§í¶;¼í¸]Çu\®ªÌHg³£#ù‰ÉteXÏdÔDÒH&5Ólp¸)!´^¯?ýoÔ7V¬®}vaMWívÛ:µ°•0Ùž‘ÂèP.NJIZ[楋”ðC“¥±JÞÐPOæg/ž;LjUÊí˜è¸¤Ùi×jõ¯=þ½4C…ÑíSãÅ\ÆL³úúì•Å @Ç4´é}Û~ðî7d&SŠª†,ÐË®]»¶oßþüóÏ¿l…%2;RõíG(.ÿ_!ACè0_ktª- ¤‡íýf¶µYm I0.°šÑ”B)µ²\½. ä¤äâHx)ÅS+Fs›QäÔ}æxS†Ð÷âë°¥c˜U&rŽ!²Ï±LËËz-ÿ¥½ÊÞ3J³BÑ9ìÍ0zÓ][çŸóœÄ"K¤±¢-ahÙÐ,o;Ïÿ`°žU•Û,›FrqÛû¿&öõP¾&Í& dó…3•û‡wïÊŽŒ™Ù¬¦›ŠÂ¼±çÞ¤Û;îÑu{ûФg)ƒÈ¡Ÿq „r×u]®°€E ™Ÿ}ö;ßýn"•Lèê…¹¹$ÕŠemçh1™HŽ”SL]?}iaeU)åéL"e¨ÉâP{³.eõÆZ£yxÿ$ Q5­aóµµÍúP)QÊ¥÷ìÚûô çV–.^žŸ.@!›Nd3©7Ürë?ðÁñ™ºaRBœßÍw½ë]/X6öyFäv!Äê9cwJÈx.1ˆ½q#'ºù‚0·TÍpÉ­,W$< ÉVúÆû²’aÀŠÍÀ2 cSÂpãÕk½n[ÂÞ|A_Ü“ƒ¢TL‘ȼŸ„Cƒq¡¼-H$!„›‹¤¸ëh¢Xi­- :Ö–˜; *ÝCT—Y¤ô2£Ó.PHöÎa!^lD’ÏMÞ|læÄ›†vlOdrªêY3¯9ò–õOÖ½U7ÿ?¼7’ö26Jñöw(%¦™Ô_QJýú³gf—˜¦Ú>–ËçòIeztd½ºuêÂÚÚúZÚP MÍç²ã#Å–µ´¶¹ÖiwS Ý^AU%…tFQígN-7[ÕR!¿{bxw)okÊÂVýüÙs‹ Ëë53arJßóÖ‡Ãðöã“ÓžEú«{yä‘G~ë·~ëê÷±ºÝ0»Þ§ƒø ‘åŠKàËj1©Çâ€ÇF]\­C4ú¡ÿ£æWªû÷Ú *dÉÓÎJÆ”CˆÄ®DÔ¸€•Ë…‘˜ ŒúöáÕ›Í×Ï”PNš ±Š‡ x¬odƒM«ÀP„.”ó’*U½cÔíQKç‡ÜyéŸþ2T^…” "N‰DUTì.cIùÏ3Và˜y"GM¿CD®ª =rü§~²´c»‘HªŠB£@ç.GÞ+ƒ—©/¹¡"±¾ì „Ú,ï9¢«ÆóR0ÌD6™È¦ô\&[ÈçMœŸ½Üh´4US™C˜±sr¤h“\±pöÅóf“13ÎÛ;}znåÂì"ïXã•T!£Œ Md’©T&ñâ :µK§FJåBfxäĉï|øž™·¾¦Æð333333.\¸Ê}ËÂ@ß.nôúü{оõ:$O ,Ü#d)â°{¥Úö-_øè}â×7[펭*F¦/¥U]qÛ¶/O·8¾¬ÎÆðÈPœ/’€ü0môýi 4~ )J_g€%.üÉK‚²/¶ c”’DdrD* `0­/Åä„i,¡ì9~×â_¶ê[¡~„ÈB߯Ý'à}`ò|µüèÐ$Q|BmBžfì6ÇQCå§¼øêÏþPSgî¹çØûß—,4]UU•J€rï`§ E9z³m;ýã „F¡„RJúQ@žƒ(çŽã ë0U±Ý[Á®c9ºïâ¥3vç©/VÒDsyÂP¦&&æ.Î]Úlœ¾²À4Ýî8ɤ¶gçþs—–·jõïøÒê’ëZ篬§SÙ|¡ÜÖÕƒ#Û¶têj{y᥹ÍúVû¦C#wl[ÜØj4;Kkk­õÕ•µ†®ëÇŽíØ5³wï±ã>ôðpeäz©uî¾ûnßrã*|¥Øùí¡_rÉ —:PHê)=f‚áJWkB#æ= Wò`~©ztp.ti$GAiÍXZމzÝDô¸Q¢l~IK檈Ønöô×ÐdæÕo ‰PX‘—¥ºd1–h\Ëžã€/„¤§Ñïè €èÙâÔ‰‡ÏñOaЈ¢_j©ªê8N·Ûåœû™¬žâ*ŒŒ ð$c&ºyDd ¼÷9›ºé§ßŸ)¹Ž¥é:âÕPŽãz¦q1TMÓ(£ŽãpÇåœSB8t]¤TUUUK¤=]h,-96êªjêZ×v1™ÊÔêUŽÈ ‰©³lËÖê®[oþÜï|BÓ”¡bvr4i[UÂŒ®Ý9=»¸¸V;¶{üèhn)—nvPÁÖ¥¹åj½¡’J9›ßvû]÷üÔ:‘J{\¿ËÈÈH¥R™ŸŸtƘ¼ê,V@èû® ¨cÀ@爓K±­«¶¬FWPh „ôÕZ»ÞìšI=ÔzMe2kšI½!lö„›RÉ ‡‚ .€}_ IDAT› ¼%•¼8"ÄxýB¬Á ‘¯y¥õZ¹5øa\%¡ v{¢ ñÕ]&¢aAš†F‰}ÿ+zCFn¾õ¹Çëó¢EVè$ìÿm†eY¾y–ã8š¦ùj¬«÷Ô·ÜyU´V»•-)S:µ•n—75MSIAx À½•RêZÖá£ÇîÉ*Q(:Öêêò‹ç–÷ÌT&§G‹¹œ’H0C_¼xºÑq÷MæÒ -‘zÃw}øýÿ²4½]7¯g„}èrÿý÷ÿñÿñÀã^ÕÄ.0£€‡÷wáŠðQ–ØÖ]Z«{]§¤9—Wˆ–í®¬Õ'eo,Þ¿¢jJ~(ݨµôg[WÉ YQ–>ô(DtƒiHT“ŠÑÕÁk81|5Oƒò눃ã6|»ñY×;È÷!D|zâ cùB·øÅ¿šHÍ<ð>E7‰e:èâI™t]O$Hy¡÷!¿úÀËûê!ße¬'DF·ßöFJ™¦©Š¢yZ L׌D2©ê:¡Ä¶­­êR»Ý$)£–ÕEŽÜu˜ÂTM%„t¬6b·ÚŠªïÞw覂.w[ŽÝ±)U ]ç.8¶k;<ÂuôŽÂG·˜Ï=vôÜòÆÉ/^š_* ï˜1™l*·°ºuêÌ•¥µuMS²)£<4þë¿ø Ÿú‹Oÿ¯¿õÛc{ÜPh>øàU¾ªê:öψ²dR¨a0¬{è^t°¥ ôW%Z*ºˆØë?qi¹ÚË×EË£ù@U·-(á!Ή,†¹la$C¤º0Æ7ؾ¼>TÖ«]a V'bÃ%†›yyØÄ÷Sð¹¬ÈŠ ßíÅÐù$ÒÿňÛCZé[ò;ßþàåG?dÝG G¤´TUM&“>ïî%† j CáÒˆ¸Fé·¸Õv5°À0‡wïe*D DÓtº”äÜétÚ+‹ó[›ã.â¥ógþê3Ÿ=räè/}ô£Œ©½­Â-Ëâ.gŠ¢™fms«T.[Z½¶µ¦'“@S@£IC¯<Œ¥Þ N«›N&·ÏìüÒ—¾¼kz¼TÌ$Ói\Zº0»Dºm !¬2¤Ý}×#·Üq÷±›oÕ5®mrý÷Ù½{÷Uvt4Ã@“ÂÃ<ÉS¥Ï\õ »Ñ™þò£’B*Ðù…­›"’TÿOi,Oá¾§ ¢ðT¥N/*Í`‰Ä²#D7©‰üš‘Ç„Î×ÌÍýµm CÄ /ÒÄQÔƒ%¾„rØï&{˜Ÿ°E!ªK°<¥„LžxWíÊé­‹§DqC,úB<Æ*NBlÛ6 C×uoHïÁ–U±ò®UJ¿«À1ÇÕûk:€™†Cáäãßš˜›œ>@ºÝçÜvQUi§ÙhµZ+ëõüÇ/íŸØóÞ}àøÑã7ß|Çç~ÿãµfK§$„*UÍè¶9¨v;­…ÕâPEKåÖ6Ö4n¥–å覩(ªë¸WÇETÍ{ï:ñÒ™o?þØ©‹ kÛF³Ì…´Š:·ß}ϱ›nyÓý$óeB)ÜØ—”Ëå+W®Ä~U7Ñã×O2õ¡}’`p˜.Ä—WÞŸµz§Ö²…f {D6­F¨ÕÛõFÇL>Þ‰Xi$õdάm41¢²TˆØ“bˆí‚8/"à± bˆf!@œ˜õõ×ÕcÔjÉÀ‘+FJqŒzé{ô¡8m 3(É(*Iä3ß(Fb×;?dd‹/Û2ÆEÑ4-•J …R©”N§u]WUÕ›»ùdVôºX¬­0ú„Â\ÁAt»Ngxtll|§®*Ëæ®ë€ë,/_¹pæyä8\)‚Ãï¹û¶r¹4wùâøØäMo}èñÇ/ó‹;ÈÝf§cY¶k»¥â̾]ÛÒtMe "O¦šª¹ŽÓév¯ò†ç …l& ØÖÙ#ïÙªÖ5 `»wÞrÓvM)+Ú/ÿÏÿáÁ÷|0U¾ñÑʧ±}IO$ƒ#1'ä€(önþAE ™ÈÇX>Ö\\­cü±Œ"š-.U£Š^{Èh±’ ¹3jÄBj*i†0 ?C wXB½ ôº,£%à«ÿ®P_†é, ;bX2 ž{ \Bè<“žØõΟSD,舳’Éd*•J$Zy¡Gfy‡Ð*„YëŒ~WU¶¸€6b«ÙX]¸T,©ªÆœvõ9cš®ÿø¥/:ràØñ›Þxljÿçw~wòÀÁZuã…矩ÕÖ'Æ'N=}²Ým#€ã¸”1§ÓFpN\‡o®­¾ðÌsªÊtMk5[õjÍ%žÔÔ¹Jy¥0¦ë8{qnmeñèñ£ÿöc¿öÐ[_øÂ?—.¯=ü®÷fJ%r£6€±—J¥2°ŒD¿» N`´ÓK Zï>†B‡Óæ öŠ\Z­É'Mi¹: °°°¢±DÄ,Žæ%a„BéGÀv©ïõáíQø€ D¡«èB¯5d1ý¶ñêVX½@O?ªïaÙÓ]÷y_‰Ýû²Ÿ³ço@„Ï¿ÿž¸ü‡ Òùį’à1ýüÝßÕN–Çݨ^x‘Â,Ji&“ñQI¼‚ˆN'O!._¼Ò%°Ìh !‰@,‡J˜0^zñÔÇ?ñ‰¯|âÿk,<{ä¾w™ÉÄÈp¥22}î¥ùçžùv©<Ôn6S'§·1Ê*•á­õÅT&“H$]—'“)ÛqÐu¼]¦(†¦¦Òv§C £ŒQJº¶Í§2:Ëa9¶ÝnvîÒÍêVÒ4†JÃIÏþ‹ÅíÓýæHf2×t®¢ŒÙMéÑÑÑüã±_ºõ¾§vïGUì(Š jи§Œæ¢å• Àêû/-ZG/¼e±xäoD°mgfg…2ÊåJÍ»¢Ú…gg±ó ¨åEò å:+PHvW¡rPÍyqItru}.¯~…ƒ¼y!ˆÔóËs@ìCbx[B<{`4yR|Wå:9t;ŒÞrÿ䉇=—¨«ÔY^oè]EQEUU¯Î¢ý‹XgùWÄ‹÷È]BžÖ”K©¯”¿÷Ìÿõï?þïÿÇ“O?]˜Ò,³±¶BÉæŠ[µV¶d'‡¡ªf2fØ–óǾn9îøÌžoþýçuUdÍfTÍP5Õ²­DÒÐLsanVOçÝ$;Õ­f­æe{ñAŸsBTÝDªÚÜI˜FÒ4K•áÖò£™s¼..†a˜f—šf5úì¢ÔÄÉ:„Þÿ¢9bY´\k·ºŽØ{ù[êò±´ÍF·^kcÄÆÏû£'´t1µ}´Ä~%%`‰£à1®“ôK´^8^ I…áÉU¸ {ý@t£²w¦TeF+©ÐÅø$B€…h,ç2„yJŸ»@¦Lxxì „0K„-*_˜p }ID«XÌò..!/q÷[ÝnbzÛí7Ý»cæÃ?ýÞ7ÿÌû”l~é…ç8¢®µ¥Í\.c³º¹É˜b9-¦h{qضmf ôÍ­-B{I?LSUuÝ´ºF£Á¹£ªÌvdÒ0 1–ÉfÙ€š…2†‰´Âc,‘Ê&S™öÚº'r,çÚŽƒ^…ËÔÔÔ¡C‡â; Uõ„KçC 0P»£phq‚.x"s±jCë‚R}i…HcE¡‹cy?¢D<Ð¥ã<Ìñ'eŒóN­úVlâ½¥!’P¡Ì¥]ëCâ5aOÃùšÒïY¹$ar^ÖÿC[F@‰÷BQ“…¡ ï~t2aÊÌ›ß7~û[}7ÎP©*¯B€ÅäË÷SjyÞ°¬ï=ùüìÂê}w¼avöÜã~ï+ß|ììçÿÞ±;.òjkÙîÚÜåívÑuNˆÂõÛÏ=™Êf÷îzúÙ“Šª(ŠšJ%ÒI3™LMïv¬‘ѱé™íœótÆ$”é¼™ÎPÊ8'ƒ`‡Âw[m@H€2Î9%ªëk¶m½Îà FFFbkIEU}žÝ7fÓU¦ø;†5µœ© ª°xÏÄ]˜>Bö¡ï³Ü{‹ó›WÖy\ËǰçÞyöû’Þ`Jæ¼"¡±âs€àcúz”ccå®9¥ùêVt=2Béa‘I¨’ÂÓ<ªHÔ #þ>¶A;èIŒ§T”™ûß3}ÏOPEv…"oå#”‡\¡/ù_ õ‰ÑšË»ÞéZ>þÔgþî ÿðÏO~ákßVG†Q%í¹Y¦(F2µµ¶<2>™/”8¢¢(À9ÏÄîØ\]N&†a:w][eJ£ÖX^[A ós³WN½ 2Rjµ›¶ÕQuÆÁáȽqßüú?9–¥i:S4ïs•›¤ ë¶Ú­fãuWaÀ½÷ÞS^1–É—°#(²Wè·‡Aù#tˆ8–“,eDdáëîfÓ }‹t""ŠÈÒûâÖF³Ý±cúPȔҪ¡b˜HÂPsˆ‘TÙQ ®@‹aÖQnd„+á‚ _ÿ€E®R/b é(P’ƒ‡Ñ·&&ÁC|ˆÐœ£o D·ªLÞùŽÒÛTU ‘å!諪ï§aŒ}¿V-ÇqU¦$rÙUÇZ|ü«ŒÒÊØÄòzÍuÝÙKç6V—ÀvºéLvh¨Òj4wîÚ],Ýê¦Kx«Õr¸Ûê4P]Õ‘;ÉdJË@Wõ–Õ5tÍî¶‘óAV¡TNe3„Æ@΋“SLen·Sߨ4I¯ŸK*•Šm~“Ù¼L`ɸÂ|°_Þá2-gäøPå•Bó Ëq#ìbhWïÆvÛÚÚlÆR €–ÐR…$ ˆ¡PPîá$VX¸Ž(U ‘†C¿KB!r­Ü_Û +Äå‰dV Ë4‚1à !Y/ÒF&Ê¡ û| g „4ØI¦”eKãc CÕYƒ'z=¼¢8ý»Vo~ãÛ'?}ò…¿þê·–ææõz½¾Ùj5wí?V,W(%º¡iŠZo4f/]p^ùÛþgp]Ea˜¢j™\*‘Ê5›µ¡Êˆ¦©­f;“ËJ»V—P‚ƒYR¦(;wL$“#w‘»©á!EÓ¡ÛY»r™;îë®Äzøá‡ã&,‘ÎȈ¬h˲|ò€LäÑò AC]УK¡ÔZ†ü޽…­XYƒ÷§0^‰-±éôž3A‰"³T!-Bü—\#øRÒp¢4A0Z{sXQCq2@‰NAÜ•X|"ž¡ä»Ë“]”—Øý ”X-qË!PÇx‚R=qevöÖ=3y×Ô† ,4I¼JÁ[v…°¬Éñó§Ï䣿ü_þËï½têìK§_¢„ž;{ª½±©¨†ÕµòùüŽ™ÝŽsèà¡n§c;pl×u›£ª0UKâù—N-o®@EU8¢ew8çW©’\×±, ]ŽÞïläRZ:ƒ]kîùçšµð×`Ū"(¥ºi Ò*_Ô.àK¨CD„á´‘Ô”AåG¼¸Z•ÉÂ`Z(ÙH 2Qi)ŽÆòõ Åñ‚T DÏöÒ\fr#iòw*È‘‰00éB q½~Òå5C©ˆ†£V{U&‘løHÈéO°d A¦Äü·‹ø!`þ[Eüã£÷Ñÿ¸6†°o¨‰ÍM3•ÛíØË­ö|:…òèp€* l­ʰˆþ3t£ø-P­U¿ô•¯B’Éä®;ËÅ‘£G‡‡†Šù\¡P¸xñ‚¦i»öì5Lóé“ÏìÝ·ÇL˜Üušõ&cDQ ûöwkŠÆ¢@N q¦£œs×q<[xJ(PªéFvt|å…ç–^xqéü¹D:­Ðkĵþð:UÓ4ï»ï¾¯|å+⪦S¦H:As#ÐXB…'ò *Ô&!dY®µž£±L›b´2Ú6¿’«n6ÛmK55ŒùÈ'ô”Þ®w0jÎ…·,1ÌüÆ´s!7+K¾„Áë:¤Ô¿v€%n ÊËàBvN£ÅEÁeHÔÐ[cîïT{–æ^~6”vz ɽ°zùÑ${À>RyÐKzÀd©Òh6«][O§G¯Ìe-k>Ÿ§?ø'M4¨¡*özôFÿïf³ùÔÉ“ð¥¯ü¥TÓ4MÓЋ#¤ÝnB8ðË¿ô •ÒP«ÝT-Au‹Þ±–6Ö6Z•JAS5 ”ÄEf4åœ÷* J(!š™;|då…gVϼôÜW¾\+T*”($~ôF¬°2½kidÌóò‹,×’Ѩ@lÁT!êÅ ëÒJ]"Ú1ÄŽalêoE;Ž»¶\«L—0.²†éj¦œiÕ:“&//þˆÿ‰< ¤Z$¢v14¶ò¼HÓkþ´„ˆ8XŘ™)’h *;)bTZŠáìp97M:ndM0b”ìÝÈ•\—Ÿ»tÙ(BÒ–}huíÞ˳)Ëz5‚ÈR ’A„ô¨¢r"Ä‚@·Û­×ëõF£ÞhÔëuÛ¶†þð;ß>RAFJåR>—£„BÛZZœ£¼¥0•PF !”ð«ë…ñ¸Üu9GDEUvœ¸+;>ÕY_êÓùOÿåú¢kÛèµ–RâðfqD!ûFS6ä‡FD®ÊŸrá àÂÙÃë¢UFÇdK²ÜC¸´Z5VDê±K@„åùMC\n >ÿ¸Á~¿„*ê Ÿÿ¤¦kGöïkœ=O8WßÔµ÷¬lPÄ-Ó°…Õ×uëõú÷‰\±:‰¨bk½½O.—ýèG>BÖ=wߓ͑ƒÊ…1EQ¼ŸYª WE¡”xõ™lÎLÄ›¬ommu;mô¢¥¼.•3“N–Js'Ÿn//Í=ýÌÊ¥ TSTŠ2„ Gî8V»ÝmÔÛÍÆÖÜÜå'Ÿ:õè£g¼ººjf3z"ñŠ;»«´áß?Ú¶òwßuø¦Ãw܃AÀ³ÈkŠ i¿0B@Äñ\òèDHâ‘? Ëùú‹ –Ëåî ºn H㣌ã¸S{F‘°Ü>r¹ž ¸®Ì>;+5›G3 ½=,€x96 ¥å]r}G„ðZÚËôÂ{ ÐëË¢ÙÌ‘èy E8£=WQÁ}¹×!éGö°ïå¹yx ¤Ïõ(,¢ŽÚr Šª˜‰¥Å%×4‰iÛöP0騷ÍÎï[Y{vdèl©Ð|¥Û*¢ŒÞ·Ó jB]aì…²»O¼éƒï¯c[íúŠ™Ì:¶­*ªÂ4BÑåœoƒ"Â'ið¡Æ(åˆ@(¡A®etúÖ7ð_ùÕ¯ÿçßm¯¬¼ð·wù[Uvï=p°45mfÒv§S]Zj¬¯×—–×ÏŸ¯..µ:m—’ÄPùÐÃï|ÛG9Wº±´Ù¼H¥cT;*XÉø5Ž/hˆrL`¹Újum”–14¤qÈ#2N}è¬m6[Í®ž6P0™ñ™Mi³UmC¬íCD›%ޏÄþFpÄ’9©——,`,ö#AºûY€Aì3:A *H†4έØû·¬V‰ s_¾ï»`¦Ü51&ºÇoõ‚ƒ/zÏ13<±~ñÔ¥Åål.Ëë @ä}õj®Ó}ÓÅÙ£‹+gJ…†J+?ÜÛòráW”Û€d"‘L&(aG÷’0Í·½ãÝšn2¦* ãèp‹sîrì¿€´Ð^¹rÒ)ŠWj­"P…î¼óÎD!ÿO|bõ…«K«­¥õKßü–¢ªLU‰'—` µ«Õiwm›Ò]XøÞgÿ¶´k÷ýïý):8­çµ¾Œ©ªjÛ¶ËðäŒdÏ€ÀÁÿÃãBD¤&û+„(/'{.­ÔD&%*«÷brÑÄ1 jˆ°²°9¾{$Võ”dÇòÍj+$ Âׇ=‘¸úpC*ÊZÅ__.@®{u üBŸOßA44Ÿ#2?ï+@ÂÜ®`Ýç£dbêaSorºªÔ¬Ÿ=#¾òÁ»³Y /~ëÉ'îß¶..ãz¥ï:ÓîMó‹G—_LšŸwS×WÃ%jPñåe¦n9¸oz|´^ßÛ·¬PÞ¶S%DÕuÊZ–åºÜË{íµT”Pî§•y!Q5MÓ ¡~4ô‚€©£GË¿ýÛßù‹¿xá‹_¨¯®©¶M-›z¯—2‡›ªªžÍ0Çuª[ÖúÚ©o=vË[ß–Ïç¯Ë”Ž?žH$ªÕjÀa•‡y2¸(¼?®”JÒÔrJ‘2x-¢êΔ©áq›¤Õê£ÈêüæØî‘¨ Ëûg~¢°ðâ¼ÈËe9¾½Cˆ&AŽYÌ2µo:)±dÒ_¯"뵬 BÀ H,ߥ÷2‹i‹©o0êûûsCrí…*¸ß"zP&ú’AL!üT/}ÄHç`«ZÓÆFÉå+¸µå;½y€E8‚âò±Z}‡ÝíRVÓõMSoèšE)¾Ÿ´^;8<|k*­vm+›LZ–åñŽËý³xÏlž€—üìQÞ/ì\­Âbˆ“i@ïuAœód¡pÏ/þÂчßuñÉï]~êÉå³g[+«hu©ªªÙLÒLeF+C{w•+Ã.3¾úÛÿ—Ûj·W×êÕê+¬×dÌÄX"“í¡•8È‹h²@pqÉšºÂ¢ì•‡,[-k£ÞA±x¨+=’#†3’Õ߯rͲª) ÿïŸéÑ”Jû÷îѪ&´³ÏŸuJ#B –ëÅS{zwB1x¹{c(àð*SB!©—ˆèrNTÆ!®ëÜèȱ±wyÛƒíZ½¹¾aw:F2‘.—TÓ$ŒÌ.\°[Ýd¢h–K­ËWÀv\× 1“×z´$4¤ÉL.S(‰#Ba2 DäB@ÄmÅÈU•Xj-¬7º¶+ÜŸH)<(ÍãÄýÄ0f5kíf­,¥ce\FÆÔ3†³Öã¼$~,nÑÅÙ9†ñ(`á}" ®oumZÂ0Õ.ì?9³eˆ ‡ wH¥%¦±† 7AºEÄa³ÏbyŠ&¡sL‡½o\ÙÜ|ó]w}íä3BÁØê&4º@å\íZ™®up ±ë*¬«(£]ÆlÆlJ‘ï|9êÄÄ„ã¸gΞ۶»²c|Wc}ýâÜ|»YE w9~äØÍÈÁî:|b÷#™Íš…Ë §V³E£È9`”2¦ àØ×Ñö‹Çþ«Ã‘;›å°¼*³wßó¢DÎ9w‘ðê/îö|ëÍ\Î̼»¸ŽÛ±§ã:–‹\9ót{k‹ºœ:®ªü°Ó‰fJ<ðÀŸÿùŸ{×DÒLe%é—Q¼ûp@BÈt1…qÃÁ¾«&SÚ(ö1zzÅŸACЏ:¿™(¥£I…€ÈMk É '”)ѬŠÛÎ='Ĩ´e#ÉýÏ{‚$<—ü‘,_º RD|(&¯ŒyÐN}%úM–w=Èè÷z>{Þëý@BúÄ^ååƒ"Òž^>‹ ž)P¦p×Ñ ãæw¼ý»ü'¤Ú"bz¤°=Já¯X2Dæ8†ãèHk-ÌZ#æ§FŒ·ÜžJ¿÷ä c“##9û̳ëv‡þ‹¿ø®7Ýù–lv€vZµ­V7kèȉݨ[È ù‰Ví‚Õ±²é„íM¼xT ¨ãÞ(A’ ÛØ*Œy/%¥L¡Œ)Œ)*¥Øjw,«k»–ëpJÀ[>"„ Ë]nÛ¶m[6ç„hª’3‹§¾õ•§ÿò/ÉÆ†NÙð¶©|.{}­• ¯Òù"SUE퀡‰!€XvA)¥e UTˆ€å"^^© QY+*iý¢zúÈÂÚÜæäáI7—y²SÅÙ§.‡rªÃÖäòVÜ ¦t³˜´æ,i†Ù_ŽÙ$‰&…§æò3}Q_Y+þú•5`8ù4¾ VAÜxöŠ%)Õo ‰´üL@ ÂÂàÈ|¾/ \¼z€FYftºµ±244tö¹§›Ñ²É/µ(#’>‚@¤Æ²]#%öiï—R\BèFkö _âuÛÂ(Õ4F¹‹ _ýÆwÞÅ(³¬ŽÂTÊ:.3œáÊSX6“Ϧ“gÏmÖ[ŽêI¥”FH¯F „õkOèN×¹Ê;•NgUC˶)% cwv<¢ Æ( pUS€R×qÛ^Û\8súÌ£_Ÿ{ò{JÇÚV,Mí?XŸ(Ü3qßý¹;_q&Ø«˜Ð#ÆçŒmß% !±eˆˆ¼_®LSn_w.5ƒ.Â¥åÊJQ”-FAÎ=”%ž"›äÏq}~3;–çqïHHv²¸5·ÙT"ljË®â~g')W؉w\ [ÌA$uõG°ú¤‘ÐQ²ýN âÄSTaÒ ©WI_VêK–zÅ\ŸGÖ›ûXØG4É¿Áû@K)Ôéብç¿{ï½÷^8õÂéÓÏî…K+ *>¡ÔÇú­"e±D ÷þKa¢Ã¡”С „P ­ó—–._™Þ±‘Û.2¦ B׿#£YÝL1 Ë««kk”åŒRJ%TõëËj«L%Tñ[B :ŽÍ9U=|mÝÝXƒsÿøÅ—.^H ¨ŒiºZ*§ËC†a0…QB€N·³zþâÚ¹s›—.µ×ÖçI3±ÛޱmÛ‡&Æ ;wíÏmŸQ5í5 þ Ÿž{ï½÷7ó7½ëåñmAy%pX\âž‚}À‘lB×”X5è:îüZe—"al2G–3/¤BLP«"®]YßvË Æ-"@z¢pd#%”òq¢Š#SiÏ‘DÖjcæƒøãXáŽ-O„%”-/k¸ü™ñ•ó‚ûLºß@†é*AÐ]ýÂLÜÑA $]™ô&â‡o9±ÚÜœ~è—Þþ>ìØb5*¯H€BáfدE1„Wû(„(¢t ÀSOñzcþÔ‹3ÛsÏú±›ÖÙsç³ùœcu·¶jÜu‘P‚DÈG!`[ÖÒì¥ÑñmTe={JÉêÊ|&[à®K)EËêœ:½þ…èœ|Fk¶²†¡U†Œfýt…w»v³Õí´»Žm;®§C¥(EF™®é|~×ðpöð‘ôÐpªP4 ùDy¸¸c[v|L5ª^Å ËGçd&—Ìæ|ÈàYÁñµ}ì˜ê÷ƒ(Yþ•ÅÍfÇrB$”Ì߇²'ÂÃî ~WV[­Y›j4õ ÌrZ15«Ù j¨°y .ÿž –ØÞ;' ?òî™/”÷ðâý7ïðÙw¯öCê,±ßìÿ;¸*Êý‹0É·ž0pϾ`;oa¼o%H¸ë®´¼_Žz ýÈF1¦™¢TƶQUï—|ÞSE¦ªf:ínU›_øÒ—ÿ©}öly|tôÄ=‰[oƒm“Mï8s¿ø%·Óu[-ìZÄê@½Ý.v-äœ&1M’L*å¢^̱LVÉ•’¥b¢˜5òy#•R5nà°Õâȸn¦o†þ'œ‡– ƒ2ŽLSÑÂÊÿse¥&hÍÃSAÙ]Fð ܦoRñë.ßXÜ*l+‡Hwï Õ•äp¦{a5FÁ É­"YÏ=&‚˜ào‰ƒ÷IŒMù,`…Ö›môç€Q0 ȧ~ƒG]©(EiþÖwÂ7œ¤0±…}MVÀÊ#!ÄÈ•ÝÝ45ÃÛþÕ‡?û¹öúz/´¢¯T ±orˆÖ )'cƒ„z µÙ+–Õ1T¹ërÎ8%„)ªÂÊz¾ Ñ@8G$ܶݭ­ÍB®ˆ½Ý@¯<Ò ³R{æ¯?ë|õkEM¿ýŽô/|‚dÞWصãP¥B)¸Ž.:6A@ä¶Ói»®ˆà:ŠaèfBM&5CgŒ^czÅ„Jqt‚*ŠùA«>õîUX†J+¹DÀXÉL–‹xy¹æÚdk­HÇ'u‘[úß²~e=¿­"øy %é©ÒÆ…U|}bÔó‘Yaˆ¸©z”D[‚¥Þ(¥Õµ%ÝC-Rt4èkú³=ÿ: £Bâ;ö{<±=ì±e2Bõ½¾}V›@Xi”œHûÈÈôt6QÛu÷Îñ»ï>÷™Ïú›ŽÀeè F( )JÓq…;œOé1\ž6ÝY¯µ;mC7e@;ˆ.pD†@{^ ”Q Ôƒ8àÜQcvþr±P æQJMW/?ÿâð_çÎÝòÎwmû…ÀΠ†¦©f>s#šä5Á‰]û{q„!“†~¡ÃeqV%“ÐTæŒÖZÖz­¦þçŸ$YجFd Dý§ÿ › [ŽË¡7èk²ÒSEÛÅɶp(Ï 1Æa β®OiIâ‹kÕ×þríæÍ’é:‹ ¡ˆí—;BIK„/ÅÌkQÞ>’ˆ 9BÇ(Á^~ääæ]£Šž(VBŸ¡‘÷¾[O$¼~eÃf2@«~Ú$—Q‚H)`ý{mtÜF§ èÀä¡” ºv×¶»TaŠ¢RE!„Î×åfC¥j&“'<žPJ(<óןûÊÿòëêÅ‹·=’~ÿû`ßÞ(ZýÈ_<Ÿ†´òy+Á¼¦ÊéØù`ÀÚhvmGäïA’JÄI ÎD¿½þ³ >õF·e…Ø+‘Ìrš%4ÄÍ ›Ïм°E*m· n}7D7x-+~ì€bú¸êþJѳRô·8––N'¾î¸€MBJ.ÈÛ\aÆ!?½7ô‹$Þxûèmo ”w ÑRÇ3¡€Þ ¡º:ˆ¤ÿÙð¾“àèØN]¡šªè¶åìÞ³ÿMwß»sïL6£jTQUÊ(!žÏ8:–]¯o\¹x:™2]SR ”º®ûÔŸÿÙ3øûÓª~èöÛ÷¼ÿéÝ»®qis#”W0¾ç`­8úbQY@`B °¢+„——ª(Å  ¬àBQÙ% )0à°‚ã‘»|snC4Æ’’)IODƒªh¼³ M UU m/‹8+ððÆi¯}…%W•QÈÆP="çœFMQ>u„fº"åÙïü…MI$#œ àCÈNÌ„‡dbêW~1Y*A¿ÂŠÚÇŠ Òþá!HÞQ•UH.–ŠgG‹›Icµÿ8.€í}*,Ô,ä„ÖjÍááÌèðv­D"Q®ŒêF‚Q}UD  KÕm;¦:’Ëd#¡ÔåÝÇþè÷Î}òϦ©÷Þ}à£ÝñÐ[Íl^Ï—WÆae‹C‰L>0>îÆP¨­$ê=cª¹”^õ¯;gWjQ¨X¸qÙ9â~ìùI WÿP\¿¼êE+®Ôt9(¯P þÂ0raX*Õbj‹ˆÙÃ`É@#;Fct“<ºmŽ([A¢< FQ5'Øxøõ™P{K”d$$ocnjwôT¯ß~ÛÌý÷)šÆ<)'a*H©Ö¬E@…ÀªÊ¾j9m¬ÏÛ¸ÿ'ú.#çißXÀ E+g¹¦a&]¨m­¬­¯7[Ç¥:3#÷„튢ŒNÌŒí*MÍÍ/®®¬:®ëPëk¿ÿÏ~êo ª¾í¾ûô££Ç©ºq]ª›ë^aïÞï¿ø\¨|¸€2\Tä’ŠÒ#°\Á°ØÃ޵Z»Ñ¶äÅé4݂مY¢½äÝCï˵ŪÝw’‰ ²£9ª2¹Á`‰R R”Æ"Èä=  8~l8¬¾< #tÌ(BÒÑEýQŽS%Ñœ[±â¥)rZ\X¼2¿ %³‰R8Ât½øÖ·ê¦$€]…d™Ã/ÞÁ×!ô)J-—«@šÍÖóç^°5õ‚ƺŒ"!Þ‰d3É숮kF"ÑéâzµyåÒ…%‚vªP ÄÓ“õb*4©Œ·,§Ýn¸®«™Æ?ÿÁÍþé—ÓLÙuï=G?úKåÝ»¯£óçu¿Lì>ȸÏa|ò“+,Ž8QJ¹±¨ËÂjÝv\ɲ]x¡ïtú2úÈ¡ˆ‘ö;µvk«2´ñX½˜RÒ†og*ÈDåóg0ï"}d$q4M¸¯ÄȉöÇ®%ô9uQF~£äR+üZI‰§(ûa¸=DIÞª¤$Ó#J@”ôÈTô×0Þxkv¤BH_uõ7•È|–  xšB»Ÿ‚ápþÄÉó@Ð&¤‰œº\‚fi(ŸH«†¦*ºå:LQRCC)C2K£•Š¢©~ØŽðÒÅK‹ëÍ­Íun»T׿ù‰ß›û£?3 Ùý†7Üöo?VܹÃ/[®ÞRÝàÖ+ë !£;÷IK|Ü3Wíu…Cƒ#;Þ÷xqeMƒÛ#°¶¤&.†b¨2±Wô_æþó9ç[³ë<âÃå9 %©©bÔQ4ìû2ê°;sHÉTňɺ¶–tÁЄ-Âdd‘xÄm«À@g.?•Q0¿{@ñì¯'€ ±^N…ÂØ{VT ¤÷ ’(­é]!måóñ ˸ãpν{‘¾›:¥8 CHyfFg #ºÝv"¡ì™Ù>µ}ZJ¬¯¯w»SSJˆ0Y©p×M'|1óØïÿÁ©O~Ò2¾mû‰ÿï {÷ü@µÕõŬ×â§Éôȶ]½`>B!bX9Õ?T )#ijƒæƒ6ǹåšÄšCX!!5á D•ÌM ˆª.„­ËëQW,ÿKN—@(±¤9P8>PTk +~ƽ¬¯‘Z?®¤{€æZ c(D¡˜ï‚¨%t† ýð‚˜´t*LO€K¼²ÑŒý=òïý©ìŽ)Ò;-GêkST{Èä EJŽÜÿSï}K!×Û÷ç¨r®ûO iŒïÝ9ç„ ªj+Ë+Ë++ k§O¿teö 眷;mÇq\àÍf'iùBù‰?þÓÓÿýOL CÃ#üƺ妥Nð2îåJ"Wì›óù¼•¸ˆÓë9G-&‹ö ë Ëv!fq:lÿÀ%¶%½¨ÀuðH¢½w Ô·\Û7ó0Gò´ïB#Ò%á@kyõ'¤V …¤ 3óª¼^€% ¶ÌbxŸ@OÉõ)‰d¥Bèl=ñ[¼ã¢”7‰ˆñL|ïùœ_‹Ïdc“Û~îg¨¦©–ÆÀ`—„çÈ~ÝàRXTéøŽíwŸxè?}ìß¼ùÖCÇömÏ›º 0úÊÆÄøpylÌêtËRTÕ4RŒ©«Ë‹ë+síV‡R‘w­N×êrDB¨e;Üæ_ûÝÿüäïý~H¥P|èúwÓ¿…*ìýØÿèUX“û!\"ª÷ºBÉãлÃD9ÃCºváïÙÅ-x0 t„Q\x¡:ø)C.“öK»c×—«¡ù ÿ³XJ׊)IIvÛˆÜˇr B·ã3`E–Å£©áŒ\a>ˆRg'ötRÁ+¾ñr9& •ëáfПú>¿XíØñRùŸ|ßðM7‘¾5¨ßóž2ö öÊ(@•’UâÉT"½ÖiO]g­Ñ‰ÿ\åóÛ>ò!bÐs%ŽáôMïÑ\›R—ôl¹—)%šÑn6¿ýÝoý·OþÙ'/}ï¹s +[¼Ýɹ®÷„”|zòàÇît;mÇvlËîvÚnÇvl@䈈ªj c—/œíÔëÉBñsŸøø™OÿÕt¥²çÀ¾»ÿõ¯lû¹Ÿ¥ŠöŠ«ë…Y/ûs_AK¨êFef—Ÿ”ÃwªGey·øZ‡bÖÔtŕǂþŸV×^ßlIÙ‚áÐ0 [¹‡‹Ù"Y) úhïàÜš]çýß9:.Lö¤Gp¡Ü×@ Ó͸b9øÿÑÊ„ttº‹r£'ÝÉÿv‚bö-„DO¯2ºá݈=òÄë'ç6ý"™·}òä•Å%°š+Ë[Ôu2¶“é…½3•‘qMՆʅíÛ¦‡òyES !”¦2EQ£€Üvœ©éíJ.ÿÉÿó·gÿð&FÆw?¾ç‘±÷ç–¼Ò`êgVøj]ò•±l©Ò› úÜ&ö1HÖ‹rÀ‰r:d##Y‹kuËv£n¥bU%ë­% !Fq0ST>…-Ûr£aˆÞc,OT&Å$Ž1R Ä| ¥UßpǽNh%ŸwH –‰qCâ¹CÐ!„p Ã?‰‹²ìÂÉ08J­C&Ÿœ]øË$Sú944ÌKB€PJâ~´(pªç ¹;n=ÞÝÜØ³súö»§›íªÛíxÏš—3R9¼_Sôtzhÿáã£ãÛò¥¡\:mjªašª) ¥”PMÕQ¿ô¿ý§KòßG+c3GßsÏî|@I&_§àru |eŒ»¢TÕ$‡²6#r06” µ¢kv¡^“eF¼åÓ¡< ’Ô›D:_€ëðÚÜȵ•YDcæX^*£0DÀ‡Ú ™¾ŠXô¬æˆ¯#HÀ$€UJT¾_ˆi’[t”}ieõˆ3QÊ 7† ¬]\knöÍÒ¢—á;nËìØæÒÞ&áž¹"P¨"(*=~ø`×ÅÅzã‘w¾}}U!®[âý`¤>½çcJ:­·[ÝÅ…ùZ³ÎTP¢*š¢hŠj$ÌD*!œæcÿfþßßyüèäoßñŽw$KÅ~Övö„¯à2·Õìóë´~ÜïýL])fÍ(ãîýÓrùÂJ•‡• ÆV„¨«ÐùC ¯&Gé Tíâªéyß1ÙÜV–…£Á82:àŠÊ­"iõ7$Ù~}Ë«Í£Ų–DèùÐYEÍK¨°¦z±Õ™0ÜÙl[+õö ß#7<üÆ÷ý$dRœ ùˆ¡PrÿxÚHÚ±CÎ=uR×»G&Ÿ>yŠq§Ø±Ó¼÷¤’“£C¥qFçîúÖæÜå³³ WÚmËL¤<_vC׳¹|uvåS¿ú±•gŸÛ¶}ûþ;n›ºã¶o{kº2, ­Ð²H ¸7(f½,Õ:¢þ\¼Â¥Z ±”M¨}Oä(U­wêÿ?{ï%Éu^ ~ïEDú¬,ﺻÚ7а O€:Ј)Š’(itvVã(íJ;3kæì™³£™=³;ÒîÙI3ÒèH­–5³¢(34  ’íÐÕUmªª»LfUe¥7aÞûöÇ ó^¤ï؆‚še²"#3#n|ß}÷»·jʪ®@UÛB5ºíÉ,ù#C¨ìB¨¬8ã­:®¸aߨëæ&}Âm–³°ex¨ƒ>ûÆ«›Xò( @8¢T/•ž—¿ i°‹T)Lª”ÂJ²| gÄ_x~e9ßéJÑ4ýÙ>}ä]ïpt{ƒb ýPB¦Ñû| •J®®>ÿüÇ/®_«4‘4¬=Þ!Lß}\jD¢¶ÃœF Œh„s5'&&æXŽEtmñ•Wÿð—~)¿8ÿÀ#?øžg÷¾ë©£ÿèо}ÂíPÙ\^™‹¹ø—ó~àolk§óÁ.LîÛ‘óÙ²ª~ò\úa”P½ÃÞ©!ª˜Š\k¹²í0l±Ò+Zï|mC)@R1ákj5ò«ÒÄâ†èì0aOc%è¢ãŸ”S·–¤½SwóðJÉüRÜì|Q)5ƒ$ b¶¤@0ß9™ø™„®<ÁÀJÙK{–ª<@"-ûÑÐxzu§säŽMÏ<ÿþ~îÒ¥Ââ2áPoÿèÅN‹]›ƒ‰äÄõf3­ }ðCø“ÿçß× å1Óc躮í»÷> G¢Äa‘DüÈÌÕS©tºP̋鵗ÿàKßûÃßLiÚSøàÞ{ï¾ÿžýO?•E"2@¥÷²3È9׺ JÝ\Ž×ͽªD7‘râ‡øÁÞ}çmðŽø»ßÑ7˜0¸Z¨™ãR ¥”!è;øé!³C¬]y%¾XÛ(úûá²s©DîïÚ¥î7‘_Ì•—?N‰#Žâµ¸Ÿx:Iª–22ZÙŒg7Ë-<”ËâK >)ƒGíÅxPlÕ%"^€å¥-l±åòÿœ—˜Bšj€6*vl, Õ\»V¿E–gmìå¤*1:¡?–Ãÿõö$LK·Þ fÕföM˜Á³„÷¬˜MĆczÇ IDžúÑO×7«ñï~½±½EˆË+ Ãk±–Ͼ9<1ü“?uüþß?\ÝÚ9¨q` ¡×`¼XoèårµZœžœÉ®ollïD"ÑD2±tòµ¯þÆïš;ÙÇÞñŽ{|xßÜô‰ûGŽ¡ºØÞ9$,lkç%ßí†F)‚J1„ÀWŸxÚjÒYwm‹tuè½ Qæ#»V}Td°´Så^9ÃC¼Rذ&GSš®É < ³™¯6M;,|^ŠÞ]™·—íkB’Nß™+¬l‡d°zm‡9uÚÆ !:7F4ÊÖʈ)Bv ‰êŒÕ†pÙ¬Žç–t†{q6Dòy— |ï+ïzp•"ž?;ñÓÀ¼.ÚùB_Ä3©ý£Ÿ¯¶¾ÿ§ÊͦRê "!œý£:!yý+_= œ”K «$€FHåÛßY$ôá|¨Zª–*¹…ïüí¥oüÍ(×?þÜG<ôP|b|ìž»FÖ".VÚ-GtE£ž4èºfÛ6""´Ïv¡ˆRO¶cxÛ¸xD¢é}*2ÆÔØty5X½ÚˆûYž]/ÉÓ0­>k\Ê[€Ù©!ÞR[ Àr×׋Ú(ª8t1iRy@>¨Ô„Ö©eÓ$±+‡W¯îŒ¨€å{σ¦E÷ŒšÛ”gœT[Q¹¤Â™·z‰u TXRʪ͇˜ÈÉÉ$ˆ”®ÐÐ?„J ñÑO~F/LÍeEâc$ "¼p¤ýKðqRã£/üã_&fóäW¾b×ë\6•A@À ‚}uÝH§›ŒnoÆÑ#¶5J DÐËþíw¾|æ4D£šiMަ>ôÄ?M<0~ÿ=±¡a „£’%‡í…#^ÞYk…ȧ'`B5M³m[…˜VÂPéÞÂÅh¥}$Ú3Σ»€íKªd¿™-·£ÛCša÷‹‘L<3¸Úúå•i±í|¥g!›­vu\ˆž?˜‡LÙÂrhÀꕼÑn IDATÒV汃 õƒàW‚уxzEâj‰,l PmW^!’Ý «O‰ƒ”Nè÷)Òùè{<—ì¥èÕV ‡†"Õind=#øñöÄ'³””× ÷` íK¼ò•’žùÄÿøOSÃC§¾ü•òæ¦Í8ú='Ж֚+k„¢é„€»¬H€0‚ȹí c˜h&'ïzðþÙÃwGÒC±½ãÇHÌL£UÄG\· ½gÐYm`;N$íùù†a[6"o¿—޼™…¶ÍªÒ_ÆŒXÏcàœsoÝ{40¡l:×J  ¸’j# Ü=mÂÌÔ'[´Wâël®d;<,Jh‘­chœeS= ãfë rXºŒC×®ípÆQ£2{å\tß8Ñ(:,”/ݺF…JŒT ’íVX}6†îT‘³NÝhT·Â—j$Tê ‚Jå2ÊÛzØ„J>¢GÃKûñ90·²òâ9XhÄ:·„þ–žÝóáòïzòÉSùW+'ß(mo›–ɘ‹Ô£õ9dHEëJ7t=™Ne&Æf˜9p ³w_|l<µgoæØáøørd®½zˆ-µMg•“ÒHà8NOKPï‘h¤^¯{¼–×x#ñ÷‹­ëäíaÄÿ×ý€£FDëîËqÍÃLŸGÙÊÒ]ܪ˜bÚá”Ú»!ÌLeB ¥XëÅÐAÊO…W,P× C`§Î‡§bõØÄŸ8M«¾QŒím©Ñh*¦O ™ëUZ%ɧÃx¥.ÆÜ¬[§Â%Ê^ª™deŽb‡GäˆÈô¼ëLäÔiÿçR\j07#]{>‘æeµ aT®µ£Þ¹k$£V%é¡»>øÜÜc­:µüýï¯>“¿¶V-mÓdÌaŒ#rá/ªS=‰ %’£c£csséƒÓ3©‰‰ääTzn6>1¡Å¢„R‡1*ð»žc%È6*Œ1]ï}†¡išã8ÁvÒmKÙ{õk€– IO)öQâ¹€%Gå)ígûËí|¶Â1Dè´¬z×¼aÐqÏĽ5’Þf<—-ʹÐZþómŽÃ4–ì·ž{Õ,×oÏx¨Ôò–#kK[ѽ£\^ô4Ý7n®$ 6ÁáªÓÐÁâi°ú(²<"Ia“|ÎÉ¿/Ë$ºÇ?¿¶ˆò _ް–½›¼p~3R–¿“Cÿ ¾ÐX¾¨µ˜ @bcc‡ž}vßãU66òW.ï\¼\Z½VËæ…¢U­#cFÄH e2SÓC{fGæö<Ÿž‰g"éFü·@Låv?¥‚wH^îl%0B]¡m÷X„d"Y*—:©·d¼—>ÒnM)!$‹õ£nGDÛ¶{½ ÄO,å†s­ÔT)' ¿p98Àðpˆ­Ú+7ä¹Ú,•bùÏÇ”{:o£–]úT#lçv«Ž†oLµ¥íÌ;!%ÜÃ).ÍÿG÷Oà÷%8”L±%ÄEQõÞõÕ-TaÉÊ*ùœ÷¬ÙÝðz©‘Xy„PÙ$©îØ®ÄΡœ\Š£dÛÑ·%삆Òä£WLñ–j‹oÝ­×-òVÄí"½ *,oáÆoæ@1铜g P6Èkˆþ•®¬ ,Èbk·H¼“’ªÛ·~âÆ+¬ÎΟž° ûëÅúñÆ-¡çŸ®¨Õj£££×GÆQJ“Éd2™äœ =ºŸPJu]¨ÓlÝjõºèû¼º Mv±`¶ rGµ‘ò[0Ö¹VêŽ_ÝúGi ˆ£º.ß Ê@ÞÎA%­ÚG£˜z˜øˆQR~ÝfJ†Û°”ÕAY )óÌàK?}m(º†ª­¨wáŠJ§…æ}M¤+^ð¬¥~^¨¤nð%rQau‡$פ“ ”ºhõú[ÆìZ­644t#/‡RÚ§®ªÿûV¥\fŒI.éÎñ߬ZŒc‹u:Ç0Ba×¶.TFa‡ÂªíúU÷JÞöšR÷_âWOØéH¤•>ùëÐ_INÍÊOT§­Û{Óoe¼’YxwÝÞåщoòòÌrØÁÁSBùm£øDI¢J¨¤IÐF%£ÒeRø6ÀoœÃbÜS™õ DýóT¡®±Ç_Š…¬·|³,«^¯£?Ö‰ÒËowåY _Ï5%¹Ta©=và¡P"¼~z+lêÐ.\Jàrs§ÛaîkET(vå ‰ÉÂP©~jîú.`½å¡ì§,ªC<’‹È–~²wi0[Í¥ªJ.¯|ljKoQõTÛ)€ܘÉ4GÎ8“P"õ¶½Ø#_‰h²ú;oq±µF©UkÍfs }ÃÛ½•J¥NëƒDEð^Ê…ífÅæ²é•ÿµ¨°º£Uk߇ýu‹!PSãã‚hÕ`M)¨ü¤d@lÿtrÝÄ1(¸P]7 ® Z.„Û»ÊÒoõ”ò(d+dâ;ûÄä¹g”æ™Yƒ÷¡Ê½EHfÕ«âsk1Ø8ðð[Ðvkì<*®O@"þˆQ?u—çÉêþA>Ÿß³gÏ-òÉ;ŽS*•º¾?ÊÜ$G|c³!U1()èËxËa+ÃÍû«ª°%iÕ/äaƒŒS®ö°%O rU~ H”‚+l‘¬9ãíŽW·<`“‚ÒýÁ[Þ ìd‹š@þ.'ëx('Dt„¶\mC“Ä ~ŸøÍ,ι¨ |ëœ>J$rÀï“úm!w …ñññ>íÞî­P(˜–ê0U—íZÅ^¯1%ÚO‰/mÃFuê ù ŒU›vÒ÷ USÇec,hÑ‘*OêÕJmèvUu¥VO€ÒZ¡/ë¶v9¬·³¤À¯¶M| æ{9æ|Þ^Ä'M½µE.Å|ñ>ÔúÝ"JB‡ €S'®¿|TW ‰ä.ß ‰ÂýQ_¹dkó'œóÜfnnßÜMÿÐcÛÛÛ<ÔúJà6Í5¼’59Ê‘0Š#0Çö\;öGê²6*ʼnA‰ÛRù5¢zc…(îëÚAW5 JJySÁÜîpu[–G]ù^0r Èþm¾QŸÏvùR7°FºùPOžÉÛ)­H‡~=ê݇™—î¿^)çÈ8'½ óöGÕÁˆ#ÔSÙàv·“ß™œ˜¼éLÖöö¶iš=^mpBÕªsµì ‘L;%›ta¬Þ¥l[d±ÎíawJ¾ÅM1„P¬œïNÃ¥NP^:ôk¥ÐÊ`@Z ¼ °³áöǫ۰|²Òk‡ÐWJ‰è"Ò ˆ$£h%–™K\@ ¢1$‚«%¨¼•üsàV²{®°¸\Deà»7ŽލÐëÁÁC{,12ÎÖÖÖ>|?hÛ¶³Ù¬O·Òû ycËâàÎÂH°ô_¾¬¡m÷‡D ]Ê®ÎTä­“7à{1·Æz+»{æÒ_ÉÞ[èu®]šÄp¡ZÐ!àU·`É^RX«r`AŠAs…é.j+äÀ q@¿Ô"-m |Ù“Å××~æú‹÷næÂÉ=ÞO.`@[‡VÛ¶··ÇÇÇ3™ÌÍú¬×××-Ë꺰€~l5ØR…qI×’ºŸšÃZ‡]úcµº0ô…éÒ€Žl§ç›g¡jÔ2U¯DFçA%…‚ĵ„Õ¤Ãü.`ýàK¬ª òýòT‰©R« ¯QDà€àÜ‚'*åŸvr÷G;ŒõP€së³×Éa±,Ÿô+Pè©%%tÔ»ßz.//ßÿý7(R¿¾­Z­ä679c}6¶ðú–m1P¿¥ª¼¤ ޙõ\'½DSþJŽÉQ¢%ä¡?Åë @YäÐ"³‚°d4I­zQéö;¥Äº½ZÂ€Ä +Õ“Ý·r÷oÀغq*P±ÊM݇‹š‹«q3²Ö¡µ¤Ò$ÌB€&À_üüõrXýåýPñà›ƒ‘ö‰§aþZ­UX.—WWWçæ~Ðì;çüÊ•%§ƒ R#ƒÃÝnò…2ò€-B9ÔÏzàˆNKÈ{Û®÷R`a‡ªJÒy¡ìóÞÙj?RU Á¡dAZ+„¥ú7È¿ [ÀîÖMÀ¬@¤ ª)«’µ”¬}–yÔ/l( DðTÅ#YøîÓóTÅ“sßxbðë3,ŒôHïÕü–EÅNö}…¡-<µ©Ý¯®\Íd2?àÆpee¥T*Éðܽ†äßÌ!“ Т€Î+ƒ2Ö@W•vîþÚ ?‡Uæ2e¡•´JÐF²tµ¾iØÍ+~ÊŠˆßAhuû–Ü…z´:ƤğŸöYùÖ1¨D…E%­ƒL·£Wp…j+¿c_xl@Ử~J'™Àé_DÚ¿ÕLë.·.\Xxè¡oíx`—mggçÚµkÝMBmâj×$„MÐö' ¡-éÞeݰ‹¢[·¨x¹„h,58' ÝÚHä ‹{…WÇtxˆË÷Mæ³î°M¿ Áʯ‚1C9kÇ7t'Rì !ˆ$Žº¢*î-ŠoÑã¶T5U}²H;Vž¬œP“%ûau$Û±}h§q›¶µV?ª-€¤R)ÏÏÏ?ðÀdÀéÅëØêõúüü¼ãûjyÃÛ]µˆðÚAN%·˜ìË äágÞ¶°ó°NÏߪÀÖ%ÂPþ @»PŒQ»"_àê Ôî¡Ú0Ê­]ÀºuzC"§D#¶ñF—­ˆtG’… >Tù$…påw‚ò~Áåÿð/îè¿ AÄ`ñdŠ>X­þÅV¤½Y~|ôt¶>Jd³ÙX,vìØ±·³,Ë:sæl£QWèÉŽ‡)žq¹ k •0P‚áHš6£9Øyûhõ%‘Ƕý`;ü’’Cý ÷ÙwP °¸J`uqL†]Àº¥ -y”08¡…^+ˆA ~$\IpÞ{˜E<ê»KƒD½jBˈ\]4ô»ðŸìûE0Î9gÐ×¼³à@z×FróÔu³Õu§W®\Ñ4íðáÃof9ŽsêÔ©R©Ø ¡ÔŒ#°8|k'Âýq­ +†-AdLÐpu@¨ÐOz+¶Bð­«„J=’ä‚  ¨¦PuŒQ…ìˆÊñ´u¼jývë$²äIAo­ÐO¥÷;‰pä'kQï$ “å÷‰@%SqJ"±òþ©ÿm€÷I=^çŒñUT†}Z¥Œ"~ l÷žpáç^O;??ßh4î¿ÿþ·³Æë¯¿^,ÝIª.|UÐÕ‚XbôtÅÖø¥€P?oYÓ±-VÌW[ª1Їa Cw&„n!" [÷ì†åöHÖ,Ë=F"C[ù*§= {’\õ<ªÎ|ÅÎeƽs?ˆÕÆíXdè—?Û¿u&$X#+D¼‹‘BäéB%þ¼$ò~%=…·ñ»àk–JàÇ&ëúŒ†ñ§l ?i'Qƒ:v…¾2é³ê¦tð²a|rü‘‡Iô€ÚeËår§Nj6žWP›çÞÉ»#¼\Œ.›Qi©­E~è›Pƒ6¶3!+_\-Õ:ÒOò¸uK¡geqPMÇ+]ÕŸCK™¦³bMŒOÂ»Ý €6uÂ,€—w‰¢€Qðu€n᯽G¡ XÞ%|ë=é˜Á?;]‹h½–ô ɤ/0ƒ~<àIŸ$W;Çã÷Ýwß¾}û®[oYÖâââ¥Ë—8ã½°åÕ\mê/UR<0¿“¯v¹- .xhÕË¡ÅõEt‘ã´dðHʯ¶Ò*¹lq•QGvB0$¹ã„ÒØhA4‘ïèM¿3^†ÇÇÊ“†’ÃñÓí%÷Ò€-¤ç§L<Ê^ Þ ¬ Hkð=q[@HÞ¦¯õw ›-TSE@å %ýU\Чµ Þ„=ñÛêN­V«ßûÞ÷–——ï»ï¾ÑÑÑ:DÎùêêÚ… ó®:´{1l N_«ÆÞtT‘«µf iJAâó¡ Ú#‘";+©pᣦuI¬ºT7©ZüÖšNMÙQ[] ¼aP¥©~¨ÐêÎ,ï3$DI@–iÐ×½‚pV€€ÿ ”#ÆÔi ”¬åAò$¾AóÕè\ÄÚu¤…xÒ1KBY¬ë·—“ít:€TŸÍ&!Ø·|•X__ßØØ˜šš:|øðììlÏ´AÓ4WWW/^¼T,ÂÝfÅžOK¾Q‹—˜&ûµ¨¼»ÂÁ‡¤¤ÕðmÊ¢Ní[€5’\S)ÜP] µ«()Xj{è­mù˜AÍü!D«; °¼êÉAQEðÊY¯ê$ýúû[[[[__‘©é©ÉÉÉ‘‘‘x<îƒc¬ÑhìììärÙ\nÓ±ml] ؇¥¨{§ÉZÆe3ÆA"oÚ²T jHDZ4A_‚‡É5„ë¦ð#Ñûð¥Â­­Ë¨Üŵè?ÃQž:0x©;ü¡C«;­ÂòšK%Õ#’·»;Æ)â²Sîj¸¤Þ’¦~„RzˆìÐ D*âàÕzú ^3x›å/Ò‹Êò¬ý¨J¡»>Ü;ÀNÈ'™.{UcÐ wáãÔ.WViù]®b¡3˜n•¹ªkWº$l­¶BP®€3´€ˆ¨%h]”XyIç…2¸´D 7å2 Z÷¬¨Ï"ÝÈÞ¬; Î¹óC?ì>(¸ÀçÀƒ!DqPfß•ìCoÇòÕ*{Ó¸Ïä\ø•ÊØ é\„¢Ò„u¸z%äsÛHÒƒ¤'’¬zâö5èGäåÇÕô@ÓAB»=lÕ‰]rÒ¡êZY*5ÖXY_k%°\* ¡=±¥ T@lÃÊ·i[«<ªŠm›V•á’ØÛUŽwžmÌ7`ùêQep§f€j«¼ˆA)z½¤ËÍ+~\^Q&1ÙEn¼T~O|›ôÑ®‘0ß“*ïþH5g§ðôeVÚÛo«ïîŸö[…¯;c<@¢rR«­EJHÇ$U[~‘å“S*p„¤X È`¨ñTÄ(/¢ì2*£-¨äº Á‰õCØ Þéøœ„®-C£†FtJ)!õ+Â9 ãÈG °Ì½â½…>·C’Å<Èfa­Á%;1KâÇ"5èÖ‹õS’ȦV=Ê~Mú¢½úœééÇÔÆ_¹íkq9éŒ4A Vk™…­ý«ú,/2B•ûP"¯ B)C›â T5¨¤{»JÍ¥%(t{F0`WA\õމü°âÕ X~“§iäÞ™áöŒÜ7;|p,5™Ž$¢C1#fhqCóYiÚŒc¹iUMg§f^+Ô/oWέÏ®ª¦ ò(µT=(+‰&Ñè{͈ XƒÙFN§/ÑR©”ËåzT%„øR³L&355Õ \¤ˆ ëëëÕjµCdž“ÃÃÃ}–HËË˶ê:=–HO5îíÆwˆœDO ÇcÇaøî€¡” •ˆÞ®šg× áîBÊRƒf3‰ãÓ•†ð·Ò¸O±n}wi«Eh¬*¬<(ÚNBà‡§2q”åI—¡´{Ê/0ðÎ ‰s,Ô-‡c¡nnVš…ºÅzÄ;°â†öô‘©N̽ÿî™ÑDT£=–º†bŒ$oŽh:ü»K[ÿù•o,nÔMæõ.t€ÊÜKE ’dÄøµO>ÚÏÑrÎ_yå•õõµNküª={ö<÷ÜsýìÜ4Í?û³/úZÍ@ëíõøñã'NôeäU©T®^½Ê‹ET2vß±éá”>’¢éÙÇi$s3oNˆ_~ãÒéµD¥*‘L8bî>s×ûïžéÿņõ©ßþæF¹Ñ†˜±KaÖÜ}°Fè?ýÀ½'ö޾…¯š{¤G4mvq«rn½ð+[ß¹²¹²SÛ¬ÛcKDôÝ¿÷ßsüøT¦;NõÜ(!qC{ϱéwZÚ®þß8ÿÕóë¶°Ü“é…%µ‡¤_5D¼víÚ¥K—Zº$«òžfðà8Îùóç·¶óJj–º7ìÏF·Ñhœ:uŠüá»f§F¦ÆA ™ „Þ\´ÚØØXX\@ÔÑ ƒ–e8äx*{úÈä@OöèLüÏ˶Ä´—³¿Å› 4(ÑèÃûFÞ7ú3O.5¬s¿úõ7Ï­p×"ù–ݧMþÊGO<27ö–Ÿ‡'ÒÿöÓõüú?ûó7ò5ÓŸÂq -w˜Ç@ÒϹ‚ˆkkk¯½öÚÕ«W}S¨ekÛ$öXŽã,,,¼öÚkÅBA×Nb.޽wÕl6Ï;wòäÉ>úÌôäè ³‘{bõ›·år¹W_}uéÊUŒQP£epGÀLJî™êDßrÎóÛÛdØŸCGá(Y[؆Éún™xäù÷½ÿî™_ý›7ÿí7çÇ}³Y IDAT;È×Þ1¯$¢Ó_ùèC_ú{ïyËÑJ†­ß»ç?ÿ×ï><‘Òœ$‹8‰Æ:…îÛÖÖÖéÓ§ççç···™´qÆ÷¾dŒ9,´a/”aŒ--->}úâÅ‹µZ3ƶ{b=Ô²¬………3gÎ\¾|Ù0 ª@4 :h¡ ÆÀC¹Ó–ÏçOŸ>}þüùÍ­-#"Š/]ÙóÆ‹ÚGîÛ;Z•ËåR©”óp¥ý+Ú«`¤Uá…Ò“þ@·TTÿç?òà¯ÿø†FwëÖÚÆ“Ñ?ú¹g>÷ìÝý6(m=סñôï~ö©=™8ʾ"ÒéËq€èJÛ¶§C˜‹W<ø6üû^·MDôwÎ9gœ1ÎÛí©7`qÎÇq‡ «' „ê@tB  :Ñ"7±Â&^#¢›ºÌ•ä+t½†ñ‘ýcFSƒ”íÄ0Œx<Å%Ð.mÂ^ í@mÀ&yË6èK~ìÄÜóôaJÈq¥ß -áx*ú{Ÿ}ç3G§zžœsÛ¶MÓl4ÍfSDèºFc±X,3 CÓ´žõž¡è¿øàÝ¿ðÅÓu›ûCÔŠñC ràeŒõ/ è“Ãò§Å)P¢É®çæO %ÁÌÀ-p=(9W¡^LX}â¹–‰D’Éd*•º´š^³J–yÏøœÊ¹\“;Ü#e©ˆÈ'ý8Ï‚€7XžŠ!ï~8¬6‡# #%D—+¬ž¯z þ±ûÞÄMÈ'“8*sÎТŸI>¾|ЗªiZ"‘H&“C‰è##Ößä4DIÖ:7#Kíûù˜êõúÖÖÖÊÊÊÊÊJ>Ÿ¯×ë⃦”jšFS©ÔèèèÔÔÔôôôøøx*•ŠD"ÞRD´,ËjÔ?}$q&Wc¸ X7u#„ü¯èÝ]ÑŠsÞl6wvv–——/\¸pñâŵµµr¹ì8"RJ£Ñh:žššš››;tèÐþýû§§§Óé´at£f8ç=˜úú¥üZÕQœ¶üìå ª¤ËàŒ¤Æ÷ÕÞ×]anØï*avÁš %DCÂÅñ˜¦™ÍfK¥Rë±B4M¥J2™ŒÇãÝ/3ÆX³Ù¬×ëµZ­Ñhˆn´ ¸¸¸¸¶¶V1#(yÍ "…wò±ö&"Ú §¥4‰¤R©d2ùèxýåMÇÄÖiê.n6"£7b1ÆJ¥Ò•+W^}õÕsç΋E?÷LYº®Çãñ±±±¹¹¹cÇŽ=ztÏž=™LÆ0Œ.½iš3´¾/˵]Àº©ÛsÇg~ö‰Ã=oYçÏŸÿþ÷¿???_.—¢­'¬è°­ÇŠ<’¯®å777Ëå²išâM§Ó¾SŠÏƤZ­nmm67žjþUÝúÂRT?ýç¬ \:‡sƒ-¡?i4pKˆ¸€ëoYÖzv}aaaaa¡X,¶½µˆ+mïÞ½˜ššêr?àœ×jµ\.·²²ríÚµ|>ßh4:d¡PX[[+•JÍÑý\Ò’¢ìp‡€:%¿_—JMk”RJ)ñí´À0ŒD"‘J¥ö•¦œùR›Shµô9,Ò±ÇÉçó/^|ýô¹EÃtxùˆrÇp«Û;•ç<§Óéd2©ëz—›«ã8f£~Èh,C|°nÚ63þŜ袴BÄf³¹¾¾þÆo¼ôÒK—.]²†m«'&˜É÷=b××Y¾±‹/'‰D"¡ëºaâVßh4jµZ¥R)—Ë•JE´–Åb‘:<¢Ÿ°ˆ’—[ƒ‰oäŒB ¤°“rüºËßÔÄ©ê2/sÃ%s–––¾óÝ×N:µ²²Òl6ÛV,Û³gmÛ###].0ÆX±X…Æ… äB£íƒÅ[¡F‡†f¤Ÿ92=™Žµ}çMo㜠B3ÊG(¨ƒd2™L$žšhž/±NN§-ý öŸdëÕj¥R©b:W?Õñî…ü²Sµkµ#Õš¸¿vy3 !âa%ج›¸ýäcïžî¦®¶m;ŸÏ¿ùæ›ßüæ7›‘ôòÁwWSÓ!¦VÐ妑̇¿Ì)F76quuÕqœ’·•½­V«‰>…1F)>˜É•}!\s¼ž–0DYuñJ¾1À ýv`å6r‹PÝ-Î8àÍÚ¶Aêûg‡æ¦""DÈQ$l!Cd±ˆ3•È·ºS„¶mooo/,,¼yúÕ8[7 ªÆt.~¼u1ÃͳIcÈXF¿ÓùÔCû;Á„¸  D"¡ËÞ0 ÑÏÞ;Z²Í¦Ÿ×%¹\IøŒJSA=?&˲Ç!]ýò‘к1ô¢5t¤9ôôÐPèPC‡Mq§Ñhhõ"Àô.`Ýœ-ÕÿîSG»_ÿµZmyyùÕW_½|ùr-6zéðm£M”MàÄí¯«cé\õžÒBµZÍçóù|¾Z­š¦iY–DäTwŒ„Ošñ‘:‰úf.ˆƒ “NMúý{‘3Q ÿÚ€r»Þä‹kŽøíÕmZ¨’L̰ºBº#k"k×=€æˆÎ½‡'î9ø ÜFfÚÈlàr ¹ ÌäÌn¢SgŽ…û¦Óét÷ÎH a¥Gö¬Úr€©¿6õÉ¢1 ÙŸK}_@*Éáö¥;Оn·,kssseeemm­@’OÞeE£ÑL&ÓJ½ÇãñT*5”ˆ=2j~y‡0±ÅøÕΔôsÓBD]×ñÞ¥|ùªù? u_(ê–F£aW‹·uÛÖ³G§O¤û¡›`,xO[´ nÑ®ç 8HþËN2KëK— …cœk:£†oÆG­øˆ±¢C܈qÑTJ<8D5m4¡¿ó@z:e¼ÿèãuš¦Çb D¸#þtSä8‰öÇ:2ó±ý têÑÙÜpX¡szްŽv ¨nBGîgˆp ¹ƒh·‘YÀmd&r ¹N¹‰Nƒpgh(ÝÏE¡ÁÓ4Õâ0$’P½§öµog~%ß°ÖÖ/pù <©àù÷EÚiô±Z­®­­-,,,­\}cô±Ã“å={œÖ#ë3¢Èzj²ö•u‹c«¹ ªæ\Êñô¹Ž$–&úyp¾nmÕ¬‘d¬û…Ðh4*•J¹RÛ¬›¶}òÄ\w-\³ÙÌf³W®\)‹¹éG±‘>®EaÎF¿Õr´éÆì136bGÓv$‰TwyæPŸ†@ Å´çîûÐ]cûGbwOÆÝ¶h 9%ш'è wˆ;õb¢ÑDN+uð×¹:–fÑ?`Ùn„@(ä¢tÔÚÊFn!³€[ÈLd&ò&:uà¬çµ+Èo]×ã±XÔ ÄMXJà°ùú)ö±  ú€9" ûdIH<3>xÏl§~°T*‰Y΋e¾1[mÀ#”¶…T]×…¾a:½'cŸ)È^íŠñKÛÊ û,BíOÿ,,’º¿“Íf³\. …†° X7c34úÞ»fzöƒÙl6›Íš4º=vW_—"ø^Ÿp9~€ì9AJ«šæY*O¦ŒÜ=òÉû'ËHð$R é@€E¨Nô8pˆ È€èÀuà6-°pÐ ¢!lª»Ý*!wçÈ€ «ÄM T¢¹¶ªÈ;Èmàœâ62¸ÜDfo"3‘5Ñ®ˆÐø^—"¥±X,•JF#ˆöA¤¡2ꬖ#£í,±|ýQ=Ðñ™£S³™D§~pkkkmmmuuusâ8WÑ>¶M]ôŽ*•H$Þ5Y?[p°ƒk`È£¦OBS0eétzltš½ÿàÞ‘ý]UûŽã‹Å\.—ËåJÞ¬›³=¸wd(nt¿>+•J>Ÿ¯T*å¡}Žhÿ¾I»?yŒf‰3ïɽ±Ïž~ï‘‘L"Fˆ†Ü!D¤È`„AB ¡ÈâVU.³ ‚º&&è š Y0!Xcy¦]oîð¦D'T÷x¥¼Bn·Yˆ2˜…ÜDÑÚUîôÛ&S5ˆ ‚¸w¿˜fKKø€ P¾D×u¼ YrºóŸ~ø@§[½^ZâjìïG€³y›Q£  xÔ{y<êäšáT «zBJi*•šžž®C.ôxðL&þ¯>þP‡5ÎyµZ]__Ôòì±]Àº9Û}3ÃZ/¤Z­V«UÇq*C³×ñ~¸¡’#0Œ>1Kñ±ØSsIàDk¢ÃA3DP\ÃnADTe_ˆT'Â}’""ªjH¡uNñ^1ƒA˜r­r†èI'v@¯+âlYdø:8,ÞØbõ*¡º7ˆÊp¹ÜBf#ÚÀ,d&¢Ì·4‘7¸Ý`¨qÎúìi ˆN@°ŠhîY~…Ë"+%‚ØHïwO=¸g¤S?X,³Ùìööv3>jÇ3ˆ¸Y³/äë{§:Q.õžNÄž7¿tͰ¦´ÆF@ý ¦iÃÃÚ¦%ÆgáÂb›Ë•Ò¨A÷'ßuxâ<}×ÑÉ¡.MF³ÙÜØØ¸páÂÒÒ’‰Z%½g°nÎv|z¸ûD"žeYˆXKL\ß³È&ËâLLø¯ž¬}ò.ªi86Ç(ÑbD‹ µ‰4DD|°œ¨âbhÁ+¯.wmäp{€&šÔôæ%Ç\j$ãZ"X¨2Ç+,V_w"!º7ßÃE3ˆÜöûAàr˜Å™Í™Å™iÛ̲™isŒ¾ËÐqÅëÚ  • F&Œ”—#þ÷…û;Ä[–µ½½Íf+•JuæQa ì þÍÂæûŽïkKc Õ»(²žœª}mÝ©3˜±½¤ÅÞE–®ëcccSSS€þß4|’gb‘Ùáø¡±ôx*ÚëÔEÓ4s¹Ü™3g^ýõr¹¼3~܌춄7iÛ;’èþ1AÊ9×4ÍŒužÌóÎuGÿâùÄòþ4§¢Œ¢ºëX@ ÖÜF«D´(¡¢EÄoh„ƒ$æ­²1[Ön?Åšè45‘5Щ£SãvÙ²C#':–úKÕȽ¦¾Ï Œ3&‚g,§¾Ê4¢¹RμeA›s¹ÍG8Ù8·Î8pÑt º1À 4!DTX0ãO(‘Ž¡y=9¡!3>vÿÞ.Dg.—ÛÜÜ4ÖFö{)[øµ…ìÿâ°¨¡w‚¡zŸ*ß3l½ºÍÂvÉ"Á6 ÞÅ©ÔëmC‹‚>ë>Âѽ½¨×ëÙlöäÉ“/¾øâÚÚšIoL? wÄvû–FÉX2Úó33îMb×¾ìøtæxî¾9žz½^+]NU¢Å¸þPTªÕ’}ã·¹]ñêOÀMd&²:â¿:·+h•XsGHœûÜ¢Ñ8' YÆ9SáM-Ìá×Qa5ËÙ³ükžqÎæ0Î8dœÐéBRÐ5wZZÓP¨]]E–û3 —TXJÃ^%„Ÿ Ù^Ëe¸ðÑÏçóÍĘËø5ÑvµùÝåíwî² &"Ÿžª½ºÍ”™†–õA‚V{sX×} —išbÑóÔ©Sû·»¶¶Æˆ¶¼ÿÛHìÖÍÙ!z¯%2qrhš¦E¢oëÁX–uîܹdãâÜ8=FhŒhС:ƒê1€{û.°¬ž2Q—´vMd&:u¿¶²›ÕBÅLŒðÉ ¢”Ú 9‡¡Æ.êtRhß¡?ÇQ[Û6«•†F¡¬FÝIjJ€RÐ)PêY÷z?÷X8Ðt2H…ºF4 ºÈÝYbM½øÑ÷wUP ÀÐÈ';¨Û[úÁG¼¸6@†øå7×:–L½ß3V™‰Ûku¿)$¨~¡È›·e#®õz½X,®¯¯_¹råܹsîØ¬f¬ì{º’š…;e»cC(„yDSoßS4›M1SýÀøÅÙ¨F´Ñ"~‘T£Fº¼ävÙ)W¥ Ë´ÐŒuƒ9&³Í¦i6š¼a¡Ã09ÈÍ8j¤ALÆÀf kè¶„0˜[ƒi£EQ׉NAÓˆFÐ(PJ(ñJ*⊧(xË„‚¬ÔiCÎ ‚œC–v¯¨ f%Ô}³#îét‘‹õÁÍÍMÓ¶«Ã‚tU ðò¥Íºi'¢F/ê=þ®ÉÆ/;ª³Tl…jÀ·aˆ¹\îòåËgΜ9sæL.—CÄFldeî™ZròNº®õ;­"‘HÚxÏ’k×®-..^»ví0½âŒ8„ÆA‹*D•:¡:$H†7w¬üç6r‡3›1‡9Œ1Çv¸í ãè'TèDtѬ8%”ãà0ÐÔx”1â‰û:c(:Ñ404¢QÐ(h”P ”%„j®¶–Ro­”¥!@j Å~(PB(A}k|1ÜpI_@öcÐ;4Yœs!PÚÞÞn&&¬hýˆV‚ˆ°œ¯žY/¼ãàd§"K¨Þ‰Ä“ÓÕ?»ê4¨-*ªG6Ày%<&-Ë$l$‰F£†a´mŪè×ÖÖ.^¼˜Ëmšzb{üøæÄ½b°nꆽ ±”‹Å±(°þwÜÆÅ©û¹%¬ålu+¯éºFuB5Bu ”Fp—oÔ«ÙUŽÊ‰N¼ë\§`h^ÙB€RÑIÿ¯+b„F(Á4Ù rÕ$óäW–F´òú5B)hõ*,p!,x…È ¨nýÐX¢£Ôp‘5Ü‹Ø|Ö}2ëä%Æëõ:!¤6v ¢3Hsø_Þ\ïX>AžJ¥&S¥GšßÝf­†6×Á—7õõõl6Ûh4"‘Èøøxw¯>1ÉT«×s•æ2»²ÿP9=;¨öp°Þ®Íá¸]í¡Ö4-‹%‰ÑD„V÷ºB„n+—Ë 98¥Tø&'‰x<.|“»üùÕM[7«Qƒèh”èB(…H¢Ñ³'ÞF)Ñ(†‡x¤Y î¯Ô-^z–ì nèJÁáÀ81no%}íû@€E)è”h¢Î" iD×Ü£/@O\%-ñ¾&„P} ?e ^;!KÎá >êQ£\\y?ùð={º,Έ;M2™Ü77÷: %›Š/¾¾°ñß?w_²C)+«Þß=Sûþ6cîA­•ó°\.///Ÿ>}zqq±R©Äãñ}ûö=zôÈ‘#«¯³4MK&“Ó³{hžT{ ;Í;8Oõ¶l ׊õž€åR éôpÍÞá‘ÎW5Ç………••¡ù6 chhhjjjÿþý³³³BË×̲°Ú@ˈº†EÚGq'¼º5M‹Z"êÖPÄ7%@]À"âka,G¨¦õsˆ2PbÌð*,‡bÝàx=€E\lJ@Ó@×@£@(hDTUbðÜ•Ëey2Z2À $"0œ»cQ ´¯Ùïs*©Ï$œ,¦;ò±CÝÑ<‹íß¿¿ld* ¾õ*‘ µ.oUάž<8Ñ…z£…÷Œ•÷&­å*Çü[ë¾|>¿¸¸øÊ÷_½Tf€ ³jvk[%kš&$xV®©T*‹}nzêçŸu^Y)üo/.ž]/îÖ­²]Úªôl ‰D&“žÞa; ²z½ö½ï}ïäÉ“"hKœû†aŒ=zT˜dö\ÖÒ(::14Ð5·i24Æìšf$»ck$‰ÇãqŒÄ"¼ª*˃ÿ5€×u!„è=+,Û¶-Ë2M36äD —Ã⪦Î÷Õ˜‘îîp¥ÛœB\º]£@u©uBÅAú³J4¨³)¯8ÿè^³~Ó¹[‘³Ȭ•_à<:7~lr¨ûÛ>111::Z.ÿˆ±ÓZ ‰m³Òì羘JÄŸžj,UntºX4ªÛÛÛÛUsáÈó@9[²«ÍÊæèFvdd$“ÉÄb±›˜°Hõ]±>66úÔ]{ÿÎ|ûåK¹]Àº%¶3kŽØÅ­AÖðððØØØ=…ÒùŽ»ZÚ,~>»~ùÒZ­®A4ÇX/k;9sd§~ g0‰¸h5 4¯%Ô5¢k í*t,±@žÉd"0L4C¬Ð{°E´ ÐÂc†ôDOúVä5ˆÆ 4J8BÝÒ^¼´×‘R¦’5ø«[€RðŠC·Âò,è¼n‰›î±wݺŠ<óÇÍåU¸”¬ž‘ò“ì~—Ñu}xxØ0ŒOÍÌ|êñë<}+˜D"ñødõO—íªsCݘð_·mÛ?vNµz4ó dŒJã`­V.—‡††"‘ˆ|N¶ÞPÇ’Ñ?øÙw}â·¾qzµ° X7;½V¨™N:ft9“b±ØÈÈH½^Ò„¿Úl6:†,–Ø"LÁT›É±E€û"SSSS=å|ÄgÇÝK×û-»¾¥'¦ºÖðððääd™%ô‰ñ‘†¨Û]ÊúP%´mÛ"-ªQ¯&#¦¦ŠpÅ™ûýêÇóã™$þÞë#û¹Lƒå?ð5V6OÒ­†•ùƒ)ÈÁ+`ÀFã ÍçwXÆ_‚À(Ï3›zÄ©tì¹ã³=I¹±ºþëÇS½O •o~3ëÜÈÞç(Œ·BïÃß–â÷îÀl½^¯×…¾{á?’ˆüÎg{áw¾u­Ø¸“ë¶ R­[΋‹Ý™ÁCMNNÞpöé}שÆJ¥Ò]ügÛ—Ü.pË*]îþ7‘HddddvvvdÏ “N^éÈ=—ræŽ:#²RäF§ÞÙýÔo4år¹X,§ѸÆ7¬gþMý¯ÆŽ×'ŽÔÆ‹ÿªc‡íXf‹Ê“Œ¶]D“ "M9"CtmDÛý‚;PÒÈÁBãKæ¿c=&'lû‘Ûœ»1ÜûÕ'îß×åfÖ©*¹î"KPïÉDâ½³ÆïÔq ×ËtÙÚ©Ûõz½Ùlöc°±g(ö¯?|ŸßÞÞŽÖwùÿ²úKÿ±þé:Æ•`äëX}2¬¼üw7ÐõnÏå¸íýÇ€KßRa9 }¾ñÂ_6?Àü§„À®ÅsOGÏc†þ©‡÷ÿÀÎC½%¨÷##Ñý©·à‚¢”¶õt/˜üÊF£^¯Û¶ÝOþã‰éäO=°+½¶o^Ú¼²‘ß?‘I$m9&±ˆ#hÑñññ_ÿñôÏýá+uk€Š]£d6Ó—§ìWØû«Í4%@¡^y%ê¬C|ßo?ÝCMâñ¸€-ÜóÓVšøO¯_5‚¾°ð8:1ô¿?ôÓÝÙkÓ4···766vvv6FŸx±þ$ Z³€W&a–¹÷öïª?‹v„‰Ì"þ¢‚è=ƒ²ó¨ùU'3Óßs娸¯T~é²³H˂ʺ¦k4굊íëN·¿å›8Ç’Éd"{÷t}ùÒÛhìù•+å­% ?¥¼û½PÓ´¿gìÏæ·¶ëÎ.`ÝÌm§n}þµå¿ÿŽ9Çq’ÉdÛ;±â+>ÔÝ»÷?ýÝwÿŸ|ïÊvµçÎc†ö#÷íýoßsü=#ýÌ:ά²öfC'/“^¨íIvÂ,ÿ c±|æƒ?¾½ð›/_(5lÒÒ½èùÄûþç?¬G#ÝË+1{õêÕF£Q=, ]‰ã UÖç ½GºQ}·ÍäýÎ4 vÑ9’ÑU8FÕa=ÄÏ>~¨§k°¼õSC‰e8±6×ö41«©Tê©™êWì²ýv ¡L†¿õÆÖ¿KŠ ²x<Þå^(’¢3ñÈÏ=0þkßËrܬ›ºýÉÙìû÷'ç,‹sžJ¥:Í.øÛ»O~ýŸû½ï^þÂëKW¶«6 Ÿ¬qC;4žþÈ}{>ýð#iJú9évy þéë—ÿÎÅ-±'{Ñè/¿ïž{hÿŸŸ½öÊÒÖÊN­n:QC›LÇß?þ±û÷Þ;3Üý‚ìÕúúúâââúúz#1aÆG„+ x²Fw12TÊõÙürð\”xC™k÷€Ä³6æè&7*©ÄÐ(1„‰Ñ·r€ýc©gNwygÄBD±XÌçóår¹ÙlvÉæod"NŒŒŒŽŽ¦ÓéP^¡_Ë}ÃX2öèxóoc9óF¶þ¥ÂÇâQqFuÉ|tX<îÐðŸ/vš»€u3·­ºý{'×?÷ð¸È1O§Ó‘H¤;f&£ÿÝûîùGÏÜu!WšÏ–ÖKš™ˆèÃqcÿhêØÔÐÁ±”чÿ¿˜a$•JÅñ.þÂW?p 5œJu_÷^ s£ÉϽûîϽûn¨YNÜÐh$1" ‚óçÏŸ?¾iš…ƒ÷r ÄãÔ‘Gq¯oÞMñûª€ŠIÞÐ_?daÛR_-JBÏ÷üûRQ½Km%r/^¼˜Ëåêõz÷ûÐdÎÌÌ>|øèÑ£‘H¤ípŒ Þ…¾á™™ÚËYÇyÛʆøûg¶ŸÜ;‹Å„&«Ó9/S©T¦Ñø¹ÆþÙËëìö¯²nïá翺\>1ŒMÕLÓœœœIT:u%™¶G ØIDAT|'öŽžØ;z}O*’H677æçç¯]»fOu3Ÿ=—«~éôÕçe„µŸbPÞ’ƒL9;޳³³3??ÿÝï~wss³‘˜(Ž ®IÏþF¶ OA¦§ˆ¬+PzAÕXeà£+ ¨øÉDtúì²+Û¶·¶¶Þ|óÍo}ë[W®\éÓPLÓ´ ÎùÈÈÈøøxÛDEA½ Ù£#åÃCæB‰¿}§ýµ²õ'ç·ÿ^*&Ь¶â×Þ1—yÇléÛ«Õ]Àº™Cø³ÕâÔ÷T«õz}fffttTpØoÕºuªLÓ,‹«««gÏžýÎw¾³²²Âëy þö›³zs_¦T¯×'&&2™L´C.Ë àúI×/¾øâÅ‹¢g÷¿SŒõb-„²5z"ßð“ø5Ò"G¿Uþzà×Õ¦’#ò1»ÇòìÑ©c©.û©×ëW¯^=uêÔ¥˗÷=cIèoôï¥+Åă–Õ%!W°Bõþìt}¡ôöfj}áü·G#Q³wºIûüZ£Ñø¯-[3ܬ›¹åMü­EûgfË"M~Ïž=­jà·ªJ¥ÒúúúŋϜ93??_*•8âÈ¡žöþù&ÿÓ¥x¤(’î§§§ßZ`‡'ʇ—^zéÔ©S6cÙ¹'kÉI¡­$¨8ô’pé`%O_OÚúbxx¥{.üÔ§•!‹Rø©Çu‹J¥Òêêêµk×jzº8|ýãêãX´H3š‰Åb]O|¯÷G'«_X²‹ÖÛ ‡ÿ‡76ÿy&«V…1I§£” ~íØ„ù‘C™/.wë&oKuúû׌çÓ¹íííÙÙÙ™™™±±1aÇÑSÜýöÎk6›"[åâÅ‹óóó ù|žsÞˆ¬Í>^Êì뇸¾PÆß¹hjb­X, X£Ñhh4lÐ#hëëëçÎûÖ·¾uñâEÇq¶fÊO÷cQŠ. àƒ\ˆ„8¯€JòŸÁ÷" Ø&ts‡üC왤òþwÿhêÝG¦º÷ƒÂ¶¥P(‡ã€å^“áb…¼¿«ŠØ-I•oüõúÛ«$xéjåµÕòÓѨ0é$Ü÷ýQÆOß?þ•JÉd»€u“·3òí‰÷—§77WWW§¦¦¦§§'''GGG‡††|‹Ò÷Ÿã8Íf³Z­æóùµµµåååK—.---•J%ιIe§NäGq:@w¦b4­èck¹\n}}}jjjjjjlllhh(‘HøGØçAŠQÁjµº¹¹¹´´töìÙÓ§Oooo#Ѳ{ŸØš>j«`W}€‘»ìv«fÂõÁÓ´,Œ"´V\Ò0ŽBAÉ?“(m:}Ïh UkѶô»øýg9ðȾÖÝ"b¥RÙØØØØØhÚN1sà:¸¼¿¹²ó‹л¹añx<‹½wFÿú†Ó‰ãîï…÷â+9þû“›÷M&„½_,ëB2ˆ›LÇ>s|ø·NåwëæoEù?|¼qíÈöÊêêj&“õ¶ááát:-éħ+¯­ˆ³‡1&²vN•J¥|>¿¹¹¹¾¾¾¶¶¶µµ%V”ÌèÐÖø=Ûcǘv=nñ‹fbÇš~ªpe"›]^^Sø©T*™LÆb±H$"n˜BŸåã—8HaGY«ÕÊå²°$_^^¾råÊÖÖ–mÛV$µ¶ïåáý~áCÔPÑüÜt1l6›Ùl6—k3âošæâââ¥K—r¹œ3ÇQWk«Öj+\"yÏéYÁˆ¤ÛÕÕÕJ¥Òz1‹ÅóçÏ///‹&fBåŸ@_"W_é˜ñÂCs¢Œ/Áqœàf³ÙW_}uii©jįg½åäµâÂÚÖX”ˆ™§f³ÙqD‚/‹sFrÙŠ¶B¿X©,•J­/¼R©œ?~iiigg§Ÿœæ‹;Í/žß|þ¨¹µµEiÍ÷QœÕjõþH}&†M² X7³A;cX"£Š ãc:I&“ª|8ˆF£‘HDÀ!D •ã8†¥ÑhÔjµJ¥R,‹Å¢/ÕA¢Õãã[ã÷”2ûý†‚-¶1þer÷¡Æò¾Ü¥(\‰Çb‚øH$‰D"Š#ô1K´´â mÛn6›õz½\. …Z­ÆãT/ŒÝ•}ÄŽ¤üøc@‚´h¹T!¶ã\½zõÂ… óóóm˲,!š·, ÷a )PåçO&/JÍÖêõóÙåùùùÅÅÅjµÚzi‰¼âJ¥R‹ŽÈÁY§ ϛޛ‰çr¹“'Ož={¶X,†ÀÛÜÜÜØØ°m»4u Éõ,w4ö§¯^|rØZ[[Ëf³år¹µ²’F£ÁÛ]ŽÜÂý……… .,,,´Ôjµõõõr¹Ü }cðGóÅ»"5^-‹Åjµjšf—êL˜j=DƲ0‹»€u‹l}èìøc±ô]ÃÅ+#›Ëé«×4 ‰îm~…å[Ü 8°,Ëq!ì{«'ÆËé½…áõÄøõ¤´V¢-$_‰î+\Ùº”ºzM£Døø‡ço2ªÚ¶-Ò¶mÇqÄ©iERűƒù±cÍø˜8‹=+—°%§×*ñM6»ñÒÊê믿¾´´Ôh4º·0ˆmIj)¬´ˆ³H°dÈ9ÎÏϯͿqúôél6*…üë*†ª´›ˆ¨ÒX?þÀì'O¾üòË'OžÌçó­U†tü¤8|ðº?¸¯-äRÉõ óç766ÚVXþsBŒäVìÐ\S‹û¿¸tñbùÊÙÓ§O¯­­Ù¶Ýå…£ÑïM±hò?¾Pz ¶pue¥\.·}?CD[:329ótN¹¯n2ôËŸ‡;w#ˆ†SOU7õ|¼Y0¬ªÎLÙ´e eÔ`zÔÑ¢V$ÕŒÔãµÄ„£Ç‘¼­õ3êN3UÛŒ7ò±f1bÕ4fjÌÒ¸M¹CÂ$5ašáhQG5cÃøX%=ÛˆCì¤ÅwJV-¯€ápwš¥õí­mïªVûIõoó“÷^_;ì^0M›ùõ«•JÛ°÷ˆR¿ç‰üøÝí²àtJž?œ¼º²²¾¾ÞD úÖø=1ò!xŒmò[œõµxP=Tó‚H(G3N9{µ\*÷¤¨˜flNô—IÔ®4ªåÿ¿½;X†(ªg›6«v›ÿÿ¼~A¡c½.BdYÖ@; 4iÏYBÈ0 ÌE’%ûW¯Dì_Ÿ¿== Ö{·ÔÛK–ÜKævû^JÙ×O¹¬Y"—µÆZ—í±)Ã[õk©{ä¾Ô=²Fɨ·uÿQ"nÛS–’±Öe»÷&¯·É‹Ë÷Gˆr>dŒIÙJ¹k~=ìœÇåÇcÕLîÖøg3ÉùgmvÃáü­íüc¶ÿê¯}ù¨k Ÿ¿¼¿÷uÙJÙö‡ý'¼«D;ô‘Ç7yZ:6“fŒ/Ùp¢»7q”R»þÄ5*yçòÞùÕ/[ÂÚh«­¼µù`ä¸Áâã¢{^C[Ú%·r~Êû½QV©‘Ñïaîwã¼§>ѧW9UiºÖîdŸ—îö˜‹Ó¯ñ~ÝíZú‹ˆãMhJö9Êv÷©^3s2,ª–ýÂØ1[&‡ª„`qoFÖnú#¦áÀ]ž¶qƒ°œŒÏÚ|1òôÈ›œ¼,˜N^ÇN]„²ûZÚNƒîðL[•§t„`ñw†f“ÍN,ÃXü Á,@° @°Á,Á @° ,Á,@° @°Á,Á @° ,Á,@° ,Á,@° @°Á,Á @° ,Á,@° @°Á,Á @° ,Á,@° ,Á,@° @°Á,Á @° ,Á,@° @°Á,Á @° ,Á,àcù ÆðÎoSÇÊ,IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/tempo.png0000644000175000017500000000024011273045225023234 0ustar julianjulian‰PNG  IHDRáß3çgAMA± üatRNSÿ[‘"µbKGDª#2 pHYs  ­#½u&IDATxÚcø0-Ì0*LŒ0`3`f Cø?V³‘Dÿ²²\`òþ%IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/tempoicon.png0000644000175000017500000000111111273045225024103 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÆIDATH‰µÖ;kUAðßÄÄø‚(ÑNÐømE­4…]À:–~ÅNð+H»HPÐÂF‚;ÅÊF¢‰ "’ˆ¼JÆÂ½z<÷‘{óXöœÙÿÌfÎìî‰Ì´•2¸^ÈÆaŒá'°˜õˆ3³íÀAÜj£?†)¬ kãÎü‡ïBpó5Ý~¬V6#ÿ^Ñ­àdÓf ÏÊlC`ãÉÌ1ŒàZÁìÀí^JÔ.ƒ\êbó dÑÀPßdærf>ìyYæ!ìCß%ZKΖù]f~ÞT‚ˆ˜ÄÅòzçïB?ß  ö¼4‹uµiÜ)|+Î_a´º¾¡EÄ.Ì`71ž™KULOGEDœÃöšú+&pŸ¶œÈÌOuÛ^Ï¢i¨éžxœ™óí {"ÈÌCíôñ¦<¶DÞ”–oõRt“á2ÿê,N÷à*®àHD<Å£ é…Š³¦|Á=ŒâYÇJ«ÝÔzü6𾬿.«c¶—=Ø‹ØYã^ÅÛÌ<Ú)¸ˆ¸\2[ÈÌ'pÃXÒzy40³Æ&[.ØéN˜Ìü¥D«…´QæëkÛ£4Ût 0‰Ó¸»™¹¸Q‚Øê¿ŠÍ¾Zä7E«±?ôÑùIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/tiednote.png0000644000175000017500000000063211273045225023730 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<IDATH‰íÔM+ÄQÇñÏbX(;J’dc!/ÄÃÊ‹à([+òd¯,”……l)Ù°SV–¢Ìx¼34æÉ¿Ñ¡æW§nçžî÷Üß¹ÝH)ÉS…¬…QˆˆñÜÂnž€ŽÔtWo«ˆ˜Á æ°‡“Ž)¥†ÀÊÕHxÄ=N›Õ·‹¨ý‹"bcXF_]/o¸Ãq†¾7RJ·4Zt…&yè©Þä" ô½jaÑÞUìùŠ2¶Qle&°X›kõŠV±g¼âëÆyD,DD?DÄ`DLGÄÎ0úã¤vBSu¹yá¡jÅ‹Êl¶0òÛg1Ác5u¥&{—)¥'41™ÐNK)¥ë@úÿÑÿ|jÉ¿BÁabIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/timesignature.png0000644000175000017500000000114111273045225024771 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÞIDATH‰µÖ?hQðßÄK£©´R° E,S( RhŠ@1•X,RˆÆÆˆM´‰ ŠuüÓˆX‰¥…–"¶jT/(&æYÜ‹ìmöîr‡xÅ|3;ß›ïÍÛÝH)ÙLëÛÔê"b[DÜŠˆ{1Ò©XDôGÄÁ&0¥T¹Ð§ø‚„Ë­rs~ XÄÀ^ÙADîb;®l`ç}¸8•Rª¯ÅZItƒ8‰ŸŠî`#)¥çM ­^Ä7ìËþ¤6a¿1\/%ŸÉÉC¬%氌іgSHÄ nâ@aÍd‚ùìïÈù³øƒ±¶‡_ LJŠõ=Ô³?‘IW1Ñ®ø:‰ZhÜ$¦sñÉNϦ”ÔÚMHÅÄLá*.¤”nðÝØ‚Å”ÒRÛ)ªè`'ãRîdª?Ÿñ„ñ®%*È´Šé~_ñ¤g‚|¨«˜)áG±„!\ï‰cygKø!üÀ¹ìwO qõ—1WÂ÷âS‘´k kÜèù¾ ïñÑŽá—ÆÛ4J±k¹Ð3<.¬·•ýý•÷ "Žä„‡8›rÕ‚=Ê”m+öà5^âó¿Haw‹Ô62¾‘¨V ªGÄq¼I)­T첽à |,b½ ÿ×6ý¯â/ì!ÙÁb% IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/track_add.png0000644000175000017500000000217011273045225024030 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<õIDATH‰µ–]hTWÇsï]ÝnÜMŒÛ¤&wÓ’¦°~‰š|JŠ©¤ØZª5øRDh,‘ }é'Fi¨Z¡`c-´E‹ÑŠ>ìRLcUÚ`"±­¦¶µÆ5›Õ{wú°wo6A¥-d.f†93óŸ9sÎUe*ɘRï€ "MÀ\  ôZ¨Í_㟠 ŽZbŠºÉOÜ;wohøÀð×ß,ào—·Uõ²å €¥ª}«ö® Ô®«—ËBU±GmLŸ‰aŽ?{àì¹}íûúÜD#ªz%Ç{›MÀÇªŠª‹ÅnF£QF£º­u›vuui0ÔP(¤-[Z4“÷íoßÿSn™Ì[<€æoœ©fMM8—ñç Í?7g¡°›Ýžm7ݬfõ£{0™N›§õ¼ÿü¸Â"v$ùP碪ˆÈ& Ø @ 뙋hhô[ ,%+ ¨¢† ±·±ŽÌ1€‘‘ߦR'ßÉGVÕ "²SÌ6|Íšƒ/.Z´²ò‘ifOÏêè¸hÀCJ”O½½m%ýýŸCáØ±Ó¬XÑÀæÍ[X²äR©/ŠmÛ̘xü_ªî‡ÃÑùº#GLŠŠžgÇŽoس祥O‰4‚j†¾¾øÈä!©qùˆˆæÌiK&ëÆò´¶ž".Ë—ßµd…þ™!˜Y”‰V|àäl®_Û×äÆY³ÞÜXVöôdwG•_Òéô{W¯.';©e@ØÏÐì#Î(¹[MU=ï!°*+E–.õåê¼8Á0 TË0(¼t)Ãöí)×y)0sB&ü®` øŸäX,vP@}>ŸþÞ߯ëÖ®Õ——-Ó“:§¢ÂÞÏÙxkeÃ$É0“'ùI¿ÿÎÆõ럀ì/I$øhñblÇ¡xpOR¯ïÚFéeº—¹Ø |êʇuÙ™¼&û¯]³Xã=ïééñøk@òî]J¹‰7òJ³8|ïÊ€ˆâ™UÀÏcçà`×ÁÁ€ÛPQœõKJ áÆx ˜ÆAùÊ,/ª­­J$`Ð Óã³)~n ”ƒYU0M§8áH­SªßˆHuîêÎ]Á"Räö¬#/eåʺ/ HÕ¼g¨«¯÷äî£G &”è¿OÕ:¼ukVø¸š¾ÅçMMžMláÂrøŸOæ}‘±W¢pn9Á¶R‚¥øç=ËÛ.xËW]ý[>‚À‘jWŽˆx¡LDü@@D†Í@ äëx|ÀÿÖ&‡LÆÂ0ì?€öãÇ- ÃHݾ= î$O%Mù_Å?“6ù"^6IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/track_remove.png0000644000175000017500000000211411273045225024573 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÉIDATH‰µ–_LwÇ?³·WÃ; GêM­I¯JB 1šžÚ4-h0Rеo¥ŒUÞ ‰úܘFbŒ>h) µ’r䪅†Ô+m‘“;Ô²wÓ‡ÝÛ;¨š¶ ³Ùä;³ó÷73»+ªÊJ’±¢Þ@D: ÀY€à{Áã¾zß:ͨ)±P'!ëÊ€G#ÌŸ›ÿÐñþt°¥ª?™S ˜ªh?Ýîߺëë¹,T뉀ÇëÁðä ¿yîæÈÀÙ˜“hXU'sØ5½ªŠªFD"‰DôhßQÒ@  Á`P{Žôh¶à:söÌ­œ^ŽMžB›»6OÔwÔ—å2¾‘¹ÁáÛ¥–sŠS®î0Ãìeïó{°œ®z®ê¨o4/ðá§;H’|¦sQUDäPœ žl@ß6·øÌ-¦bóª¨!H€ Èb±ÓØŒ<‹éô¥¯S©ËŸV° ªßˆÈ—úÝðŽŽ¯Þª«k«ynšöô,¡óç4àGTHããÇËãñù’E¸xñ*{ö4ÓÝ}„mÛÞ •JÑÒò X–ÅêÕþÿU¿ãã²²ÈêBÙ… Ö¯—ññ33¶Ì²^ nÕ,±ØµôòA©wpXDÕÕ‡“Éí‹…úú®¯02bO¢.ºÿšMn …>説|uys™ Uî,,,|:5µ {S+_sÉ“.”{TuÔ­À¬©ilô‚}Î á0†a ª˜†Áš‰‰,ÇŽùV Ì;¦%Àœƒsò0ä79ÞP¯×«?Çãºß>ÝÙÔ¤—µºªÊº¥ŽEêøË¹—âudXÅ=–oòË>ß\×`|ùõë|ÞЀ•ÉPšHðEssêý“'må›ÏŽÏ€Þ<ë*ú¦§­-fÞnllÌÅÓ@òáCªØNÖ^»§Ð‚a)-ÙLº‰¡™D¢`ªJm¿$¡| ÌÌAÊå†ç¥µ;w6zŠŠþ «**BO‰7Kn€$üqEõÙ”{uç^Á"R ªƒee»>:x°ñµ;øíî]¡ÓiFÝ8Ãñxñ’#ú/äU5O´¶rgjŠ·ÛÚhÚ½›µôwvº:ÑÚÚõÿ;Àc‘ÅîÛ·9çóÑ>< ÀƒTŠkk]+½½÷ ¤KD69|XÄíb¥ˆø°g™÷øýåýýý¿H !›51 ûsW€S³³OÀÙ䕤ÿ«ø$b«†ˆôQIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport.png0000644000175000017500000000213711273045225024153 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆ pHYseeþ%úãtEXtSoftwarewww.inkscape.org›î<ÜIDATH‰µ•h•UÇ¿Ï9ç}ßû¾÷î^5û­l.wCe–²¬¦9Ñ僧T²` „ŠÿDþa`H¢ Qýá’!X8 &±øknÓe3i­Üî½»÷ýqžþ™ãîÞ÷ÎÀ:pàå<_žÏ÷<Ï{ˆ™ñ.q?-$¢šsó_˜9thQ ›ƒ†¢¦¸Q{FIÊØ €(™'$1YJ|L €Ÿ}ØñË,q«@³y~Üt#–Ìನê° 0Ë""JÄ,y6nRT]®°}EB†U^UaO=ñœÙ¶£.»õÅš5Ž-/QcI‹<5ÅoÛ’ñì‡ë˹n'qã°'¶ʨ̯ ¹4q—·ñ½ýùÁF±dVJl­ÀXh.ß·v¡e€ðØn å £â%ŽƒÒ v"2Â*j}m ½ÿv½¥5:òÏg®ÏóîµÃÙžÛÙ™ÞµOŸ­;»¬HfY¡5£ý£¾àð±«ÌØ8ËöÂ9 ¢FCRWÍ]u¬ÀN ôµÃ‹Zе-WgÎßΤ2õôߘLû›™ydNÀ4ä`íxê8(ÌwèßÜü@@cŠoRSÁ.fÎjK Zš¼1˜ €UG~+ØA3€uaÚûNò\kÞJ`C7ìÆÏPc$p*ò/Ô¨@2ÃtÄ #…ñŒž~Ùƒ H£›[i?xˆN2ó¥{šR-bFh¿@ê:p¾…tÏ›‚‰y7‰ìùÕOÖ·¼3"ñ#ùÚ"½¬$½#ˆŠ:ÈOýû|¿îx·ôš÷üˆÊä&  ©bY‹Yµ| 1t2@D‰ÈÃñ˜ñÕέµ†R³óß: œyÙÁ£¸ shÒ®6U HT5D ;Þ¯\fÄ/…ŸK/&"U0 Ñ ¢½½ßm´–<›IBW“@ªW¤‚4j™ùÛiy0ëÄZ³ò ÖEfMeüÕ}Wÿîü´ãš?ôµ†{ÚчÖÀ”b‚™³y ƈ„—ÿ©;ž—MOþ1¨3Þ„4ì»Ìì¦!^:í·fÝ UJò¯_K‹ŸôM43³²bCôblø¢ËôŒ vgÆGz!”9P(.õd&<sÔ…XT].ŒKiìÒð¥éŒ¨“†ý»P¦ )_™óÉ Y"%bϨ˜þ®ÐT¨ ý›þ—ëÕ½=x¶JÇIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_first_1.png0000644000175000017500000000436711273045225025611 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<tIDATX…½˜{pTWÇçqïÝì.»yPò ¤E ´ !”‰m-*)…:´Ž3flÕ§uZÔ¬Zuü­è´ƒŽA`ÆZ‘ÁŒ ´…„BäA0˜°»Éî½{ï9?ÿÈžÍÝG©Ö™9svï½{Îg¿¿Ç=çGÜÂ(¥ë<O3".dŒM¡”ÒÄ=’ÝÏCzs_KŸ@J)…BHûøøø_¥”¿GD‘2‡û‡„y†a´VVVªªªÄôéÓã†açœ0ƈc ¥(¥„‰N²I)AJ‰RJ°, úûûµŽŽzþüù‘h4º;3À ÃxF×õÍââ⸦i„sžÑ¤”fÀ)qs+ @D”R‚¥”(„ÇqpppPÛ½{73Msk4Ýž#„Ìóûý׬Y6 ”¦i4çœPJ!¡aŒ¥¨•®"‚¦iä‘U…'Ïtܺ|ù²)„@!†A7|qMÉ;§Ï…Ö¯_]‰ˆœ Ãhmll4”rf€¹¡”j Îí+ˆˆº®Ó榆©ºˆñ`0È5M#”RðûýìñÕL“ÃW¸Ïç£---b×®]­„œRº®²²2P\\<® ãª–K*–ÅÏ’jéºÎš\ZÐûÇW˜,DV±œhšFü~?]ý™•Ew¾À@ÐÚ5PZZj×ÖÖæŸ:ujõx<ÍÕÕÕ­ŠSº®gëT×uj1 ƒƒAÞxÿ§ó‹ŠŠtu/ð‡–ß_på/³Kû¶ÆƒAö¹‡WM»¸ó~íÐPŸÔÔÔ ×ëm戸°¤¤$®ÔqR`ò{ZcŒê‹jçœð0ÉËËã±XL†Aëïûdðâë[Ø•·^U±>Ÿ775výö[LA%À€sNÊÊÊlD\DcSÒ>Åœ‰ÏT×u¢Ôs©HçTWùêæT=¿’Ÿ; Œ1ØÒÅu¹w~Û5ÑjæÍõ§C©0fŒÃ016…SJ³ú[­tå8çÄ0 :îì)ìVŸö·¯6{ì!à÷ûÙ¬ò¾Ž_“^=øzÊâým­d´û Û—‘t !À#BB)¥RhZ4¦+G8ç$ ²…÷~"8ppíxí%®$=³¢Ü{òÇ¡ïðï2õœ…PÏÙŒëÊÇT "„WfS-›z÷””ès«Ë§ú4¹þÎ_R&¿vè 2ôöŸáúñ?e]üvÍ¥p€´lžM=Ê9'sgWûŠ|<§íÙz2>t%còŸÿÇÿ ä#„¥”PBpÎávŠy<ºdÑ‚\ÏpWÎáMuY¡þߦ Tä“9ÄýrV=//O[RW›{i÷+äÒÞŸen%>V¶Éäœ4¥ÊÞnÀŠŠrOí¬ŠÀÉ­-äfDZ;È4iJ%OH˜„R‘±¸n~ @srŽl^DÌ‘¡; • ’€{ë>Ÿ575Le½oç´=»ä®CL¼c•¥”äææòÏ®j,êÜñ<½––ï"$·Ì“Žw'ýû¶@ÉîBD"ñÖ¡¿W<ñ=»î¹_!åÚ]eKìr'ÀTxªh°,K9zb+ë͆m'Г_|w¨&ÔB)eŠ)3z¯óbäjDŽ­ØÞŽSk–Ý0)%H)! æ>))rD„Aëô…žÐâ-{eõ¾~ÇÁÔ!'À7Ðí€ 0‰ˆösB3V?ç,Ù²™‘sGÀÇ:L*– ÆeoR¢eYØÑÝ‘÷Ì·š~q}Å3?v°„b vÊ”)‡Q÷¨v{ûba{|ùÏO`ɧΘ¼àÞ ¤þ±&¥DÇqÐqœIS*7œ:÷¹»ã88|ó¦}¡§/²à;dÍSßpNÙÊ'qéwö@éŠ'>ªb˜¢˜& *©–ê¶mc8g/¼)xp½ýÀ+‡Qóç&è½z-6ÿ™m²ü¡/e,¬\Ó—}þ¿SLN´…²m;¥›¦):º/E<ÓbM¿<‹ÁÊùFEû¹ áy_ù‰œÙüå”Åg4<Žõ/µBÙÊ'³ã8˜à\±,ËÃC!ª—9¥³å7eöĦ{®^‹†óìe?<4Å “ž Ãá°óÏ“§oÕ?õrŸ<)!À™³ï…ç<ý#¤œ””b¦i‚"L !íýýýšR(ÝtiŠIÛ¶e<Çx<®F¼qã†}ìäé[Qâ±C¡Ç1‰8GŽž™µá»¢ê±MŠ "‘ˆØûæþs6þÀq+§ÀtBÈ»Ìq¯¦i«ªªª÷R½¢Ü·b®…hY–ì¸nŽKõgLÓÄ+Wûb÷=ºÁCQæñÁ˜F¬··×ìì¾4Þ°n³WD†)7¼0ž?+ÖÕÕmoo×_eˆØ1::º±¼¼ÜRŠgn¦ç9WBÄPpòýžÞØâG×çä—Íf}ÿö÷÷ǣѨ<×ÙY±ákþ@át:±£mmmâøñãÛ¶7SDÑhtíž={˜eYÅ|Éî2ŸTŸ-ËB˲0ýz<—êz8vZ÷½94&X< 9 w###Îöß¼ÖS+œ±±1yàÀÃ4͵ˆ(’…;¯×»Éãñ¼ØÒÒ"JKKí´ bòL¥H—®*ª,®ÔtG\ß•CCCúþýû ˲¶š¦9Y¸S2Ïëõ¶ÖÖÖæ×ÔÔ`YY™mºÏ„d- ²TÓß î rƒ™¦ ƒƒƒzww7íîî%”Ê,uºàcl×ëmFÄEª8œ­üaM;{I‡Ã„wc±XÖâðÊŸ#Œwø-IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_first_2.png0000644000175000017500000000430611273045225025603 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<CIDATX…½˜lÇÇß›™Ý=ßï0Ä`ÓÚÀØœ ”‡†ˆ«*B[¥i«4­Ô¨Uÿh+*UÿUBP©•¨PRµ%U!DPŠ5ªøQá€ÁØàbèqÅ‚øÇ¾Û½Ý™×?¸9ïý€´(0ÒhìÝõÌÇß÷æÍ¼‡Dþ†ˆœ1¶%´ÑrÎy%cŒåÞanôÅÍÿ¬x~¥”’R¦±grrò¨Rê/D$ æðÿ!"6Z–µ/‹EäìÙ³³–e9ç¨GÎ9äFdŒc rË)¥ˆˆ@)EJ)pâñ¸ÑßßÏúúúFÓéôf"ú¨̲¬7LÓÜÖÖÖf×ÔÔd Ã@!DI×@1V§ÅÍÍ­€ˆH)RJRJ‘”<Ï£D"aìß¿ŸÛ¶½=Nÿ.†ˆápøƒÎÎΤeY ¡ Ã`åÀ„ȃœbÈ9/P«X1"Ã0ð+ëÖTŸê¹4>44dK)IJI–e±×^ÙTûs½[·nÍŽ}‘ˆ>ˆÈ-ËÚ×ÖÖfk( ä,óCiÕ4œßWˆˆLÓdkÛžªd®ˆF£Â0 dŒA8æ¯lì˜U™þ…B¬««KîÝ»w"¶ÆØ–X,©©©™ÔP¹ñªåÀòŠ•ñ³¼Z¦iòö¶çfÿùNÁ*âb †áp˜u¾ü¥™¡î‚UÀÂ_€ºº:·¹¹yú¹sç¶°@ Ð>þ|éWEƒiHÓ4Ëufš&³, -ËbÑhT¼ôü³ÓgΜiêw‘HD¬_³zFèÌÎÎþ 8çFyWGû¬P÷N@N}ljj¢`0Ø.ˆhymmmV«ãd>ÀüïE›8çX]]m®\Ö™q¬ªª™LFY–ÅV­X œü-Çž}z¯A(kÛª+Nìà*B¬¯¯w‰¨UpÎ+-ËJûýÉoÎ2¦-ð³±yÁ…uÕAñçï |f qãiŒD"|Ų%QëÄ.†çݦÆÅa<´ üPzsÎѲ,Å9¯Œ±²>äW«X9!Z–ÅZ—,ªœáÞ1Äîv Âá0_«™ÇͰ÷o…‹÷EHô^9^t8ç(¥DÆP@‹vc‰rBŒF£|EKc4Ðwˆ±¿Að騼¹A<øsÀKï—.>202Pò\û˜AˆBKXNµrê}¦¶ÖlY‹‡põdáä#\í8Qvñ‡5Ÿb Š¢y9õ˜›-Í^Q!ÞÞŠ0/üfÏÿ äCD`Œ!€@DBÀà ìÙÖ¥Ñè耿ÿ‚k?2ÀÃÀr±pJ1Cü‡³îUUUƪgZ¦™gßFvæ¥W‰O•m*8çM©£·06wN`ùↈñÞnžŒLS¦ÔGšÈI˜‡Ò;cekKdN%«0ölF¸w÷±B•ƒÌ›2¡Pˆ¯{qÕŒHü¬ïnGÞ…¸Æj0`Œá´iÓÄÆõ/Í´Nì( ŽOŠòWæÂ{Ôãôñå» R©”v0¤Ñ}°Ü ò; L¥RòÌ…þ‰ä²­žÜ´“À<°\ZGyÅÊÁøì J)r‡.\¾–J„bŽ|ýAÕg?u°œb oÚ”ɨÔ{žGÿºÏ ŒLNz¯½C°`uéäõ­@ Û L)Ežç‘çyS¦Ô~8÷ù»çytçî]·wp8eoø•R/¾ àÛ8jiÁ×v5oxTŨ@1?LT^-Ý]×¥d2)Ïõ ¤Æ¬så7Þ"Tæ¸>|#ã®ý©¢–/—.>k!Т5ÿ›bê~ûD(×u ºmÛ²÷òÕ{×ÝHÆ{ý=‚YO@:–g/ô'5?Q´¬³¬©hÓ ¥åÀÀó<Êq(!¥L9Žàœ“”’ôaΣrñM›]_ꆆodF'ªÜÏ}}O¥ÈŒ£{+IÉdÒ;y¦g|Õ ?ŒŸJ߈àBïÅäÂ~ ¤oZ1Û¶AJ™dˆØÇ ­P±éŠS®ëªl6KÙlV422âþýtÏøÇ.w'&&¼l6K©TÊû ûÔhú¹7$}~K •JÉ¿|drõ›ž_9 vëÖ-?äžç ÃXÛÐÐàùr}Dù+6~Å|#I)Équ#ž°'''•þglÛ¦¡á›™¹«7’QÃjzfxxØî»rurÑúWƒ¦3ÆÐ¨€!¬Í\¹r%ÝÓÓc&‰ÝœˆúÇÆÆ^3gN0‰Ïü&,Žs¾€HPrpjàÚõLìù¯VX³æñ¡ÄÝt<ϦÓiÕÛ9µäåo‡U³Øµ»étww·<}útÊuÝ0"’étzó¸ã8PÆ|ùî3ŸÒ?;ŽCŽãPñól6«ôód2éí}÷ÐímÊNLLx9wP£££Þ®Ýoý{¢¢Æ»wïž:vì˜eÛöf"’ùÂ]0ü~ ØÖÕÕ%ëêêÜ¢ b>'(S¤+V•t×júw\ßU·oß69b9Ž³Ý¶í©ÂnˆØ ÷577Oojj¢úúzײ,ò爘¯…A™Êañ âßT~0Û¶!‘H˜ƒƒƒlppp"§Ti©ÓÇ9ç[‚Á`;µêâp¹"ð'5=wñí%WN"⇙L¦lqø¿¹ªÌdÖIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_first_1.png0000644000175000017500000000145311273045225026612 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<½IDATH‰µ–kHSaÆŸ3—óŽy˜hÑe3 ‘¡H‚´/E’Jõ¡‹T„x]E`7†•}в²H!Á ¢Ò4 ÔÚL+/Ëd››—97Û…m©{û0'Þ×Ü|àÀùóþßçwÎÃáü_ŠŠ¢¸° àš€zBÈWú¬9rÑS3ójŠ¢NS”íY…„¬õ2éTI½Fi¯'e?ŠcÒNBi°ÅâŒ<í7æÉÑd•¨ù™JÜl½¼W k¨”¿Œ³-œÈÜ \1+ºÀ21œ:&jzÒ!ÌfV¢—÷]|_UÜÿâsÞŠöŸÞ¾:YÏ›o…ùڱɢI5VuÜ8NˆÖ陀Á·•…’ºÛÌÅé­-–h´»®]˜¹Í0ü›Q´QÙöúèNN˜½¥½4{3l™/Ѫ³Z‘¥éÿ"l/=ž6Ûb•Ÿ`ë’…o¾‚ùjšA9pOÚXÑ[s5a‰¹-ÔËz^ŠïŸ‹Wu~ôrÆÌ1`ʸCÝ'®mfƘÔJW½ôò¾cã??_ë¼{&Ì:ý×-æàTž.ü÷VG¤æón6õz³BÜlðíbmOJä•6¶nÚ•bv?À&­?;6…“[ñ(&ë’z=`õ ‰<ÉÏÉM¼\/£{ùÎ-ø‡FYÝx±Bk‚¹éi¼²–ï~Á[¬ÀÉ(ãäU -h¤Vþ_:þŠŒ~ftÜÞÄ«¯Þ%ð SíŸþɸ¢Çr»qüùç£Qó4kØd `Çîß™SV¹Û›Á jâì;¾GðTNQ4Ð躈ôSeQ‡ –…”89Å<禙v$YÖR+j­“B “õº*‹&ÆÄ>ÍN´`G&p¸!„x,ª}àRë}lù1ÛôÃÆÖpIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_first_2.png0000644000175000017500000000133711273045225026614 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<qIDATH‰µ–]H“QÇïfš Fš•„.+0 é¢hfv¡ERQA-Šˆè"Èܰ›)Ò"’.ª› Íê"?Èʰ;£Ô@ ûÒ$§[ø½wåré’ítñÊÒ¥®9÷‡ÎsÎsþ¿ó>¼¼Ï‘„H’¤ò œÔ!Zæ̳„—‚0Uîiq”$Ig%I9«IÁ‚‡}»ø5Ú燺ôâGß;!€I…R–@îÙ²±¶< §Å €l6Ð^g@¶:§2\*©¹½·Çà{F‡wcn®¤J¯@6ÑV­çMEì´’ê?­£é~Fõ tŒãÎÁÜTNmQÂnw ­UiªŒõÝæ×ÚåJÁÖõ˜jý&ìV™'—ÑÙx—§Å‰ÞœÃj”šÿ£ùŽ£ô6QcÐð{\™«3j{f¾ùæóTÈ–›´?9Ä«Û+f¬øšûÑl€åŒ|­¥Þ”NÏÛ¥˜ùL:7ÓßùˆêÂTCÁzûä^–¶Rž—&âž\s€€ê ní}Òöäq¼¼ƒ˜U!,‰nG³e+Çî4’œ>±øE߉߰‹\c;ÎØBð§9‡öàyß°ùw%.Ù³E1 IÞ–ƒîÞb“ã½%òŠ¿ÍÈ“æþ_úÿŠ""¾°&-ƒ#·^²sŒ Ç(³N³ï²Õkœu }aENâ×ç’Sx„ÔH¢W6°.óû¯X‘T V;Ð(#óĬc€],Ü;þ9’->Ö÷ŠO ]B„­Û ^–É¢»ùõTG3Bˆ[&€( "„Ú'Ž ­êkË­ßÄÄK´UIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_last_1.png0000644000175000017500000000150011273045225026417 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<ÒIDATH‰µ–[H“aÇÿßA71Ô5%ý˜ED "5*¹~Z±Û¼^Ê Ÿ…ù¶@+ÿ¬“ÖÝjd½BPt6è↠ÃÔxŒEaÎ6~ˆ‘‹ž÷WpŸ•gid}çµå'ó'ÄõwŒ“£± ÿ:ò^;"¹lK§X ßHj®skË2L³sD&´];æ7&~^nTíStêß•f¤OK{žpûÂ<,æ¶^M^ B{Áq?y‹è–ÇsõX‹ˆÓ|ñÐ~Uû[AK˜-%.Nõâ€vô «)#fóhGmA9’´4À"ÒŒH~åÏth¾”À•–hå7­yÙXL½•y}Áñ‹Œ®ð±Fgex{ã–³L7ˆ·ˆþ[4ÚGóøÃuLΆgÀè¬eä¥ÏŠjÐóÊÍßÉÆ¸m5Lna[B9“pÌe;8f©Z¡yìà ÿû·å/ šNÌ™«µ.IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_next_2.png0000644000175000017500000000121511273045225026436 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDATH‰µ–KhQ†¿›Ìä¡‚yj„B7jð‚EÜ "º(HAÌ¢J-%ºÐ¥h³Tn*b]ê"¸)UPŠZ¢BA”¦ÍÃTFó˜¤×Eb1¯&ãwsæŸÿ»s¸—3BJ‰Âœò€ ;IÀ <–R¾V*ᇥ”—+#Pê‚"(Dy¯SRJÖW)ýQæâÇÿªu¸€)å¶T•]Ì‘[SHžª©š:ü¼z=_î%÷æ6¥oÃ/Т·êz›K>JÝÛÎÏù›”’#h‰©ésä¿>l!4¤îo#óê:F{Ù÷¡!r^¢ýÚ­`uÆCò†€âwˆ]$?A‹é(,U}²ÉpéÈ5´å€Ú= ž~<µ‘¼3LáËsÀ£? ÿYeåÊ~²ïæ(¦‡ô¬e  3÷âÒý-¤t`è÷ø"ªoÅ6«/À¼CÃyþ-&ß ^ÏÒ9`ËÑ4¶cOP{€ÖÈÖÀä][¿ Bçhó`Õnõjk€}$Žuožèd?ÊVpÂè;ºi¡½5?EŽ31z\¤´ź+‡ûÒ,–Û opœ]aó¾IŒ®T· Gà.æþ#@ºÝp(·HþSµ–±ì™Àè|Tv¹…W$ʺ*ë€Í;†É©©vΟl?¬™¥Fæqð‹ÿýÛòQ $`å_lIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_pause.png0000644000175000017500000000113211273045225026352 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<ìIDATH‰í–AKQdz›d‰Á"l K@·7E Ä*-¥‡žÄCϽô3ô"aA/ý ½ô܃B<õPJ‹Ö@PÌ­«–Щ݉›×CHßæf{)™Óãÿæÿfož(¥‘eàÂÝBðA)u”ú]ü™Rê–˜óCʆI<=Å!ÐÖxöòŠç½Óµ©­a("¯EvôâõO.Ù|ÿ•{€zõ„«ÇØtïó ÀÿÁÃ/ßÙz÷™)@^>âçò4[³>i&;ý± Gº°¾}€å‡D~HÇÛg¢ÖÀ À¨5ð¼}&üŽm`ÕÖ´V+2ÐfÞW%¯¶r†Óê°Ðê°P9ÃÑù^•|»Ë¢&‹¡'^„,‰®¨Ü6¯)5¯)Õnu~]„,ézJ˜±Béz¬P½æà<Š+ú|8üíŒ ÆÿƒAâ-ˆMIn5Sà œGq¡Ï‡#ÑÁŒÍñœƒ¥ë³©ü$Õü$ÕY'y±9kÆæx”Á/c6ÍÉZ‰¦žXž'Èe8Íe8-Ïè|­D3›æD“•‰Ûv‹»+D®åÚd¼UnŠ< ôŠÊ¿þ¶ü ̺M x¨tIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_play_1.png0000644000175000017500000000124611273045225026430 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<8IDATH‰cüÿÿ?##£ CÃOFÊÀv†uÿÿÿ?Ã5ÜþÿÿÿUPŒPEFFÆbFFˆ[ÛþÿÿÏÃ_ÞîÙ÷à̬ÿÿÿ #‹“ƒÚ˜ Áo¾¾gð\œ£Ö}tÑŠ‹/nå0Pd?™°ðóïïÿe{&±D¯¯‰Ø|óðê§^i#>Ù«¯îýö[Q(Ü|töÄ“O®t100p‘j^ ``æ™uÿ<—åZÌ=¿aÍÍ×B©nÃûïŸÿ¦ljáÌØÖ–»÷þ™…ß¾ËPÕ8ðàÌ_÷ÅYòmû,<÷ìz)!3H¶€áïÿÿ[Íe \Uæ·âÊÎÕwÞ=µ¤ª0ðèãó?‘k«…ªöLêØ÷àLU-€Õ×÷þóYšoÜutѪS/®¡$ªX€°PÃPMg¦ ³Ð³N &u _¨f¿$K§KÎ+)!éãØÔe3#c¥mâß@u‡MFRš½ ÿp©%Ùæ»”ûVŠÚÕœ œO©'ÚAN^æn×ü/62FóÕEåV«( ÒM‚˜õýN˜Ëè4000|#Öp‚h‹)±¶;å¾0×h‘½@ŠÁÈ`Tì̬ŒÍŽ™¿Ý”-ÖêK¨MŦ†HðŸ…RA÷ ÃöØ)·å+Þ’i0Ü­ & ÅHu)#¥u1´>.f``0a¤u³Ru.w¶¬IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_play_2.png0000644000175000017500000000115611273045225026431 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDATH‰µ–]HSa‡Ÿ÷ìÈ0„>ôn’–+ [¤”ÑB&Ò‡ÝA^ÔÕ(pE“™›»*Šº°ÍºXÝÔè&²°HÒ‹J‰ƒ£‚aŒµý»ØŽ,\ÛÙvzà½9çw~Ïáå…ÿ«D¥” 8$Eu`‰È”ž+ß#"ž\@åBU¡”r+•ýWŸˆ`¬y™‘èm©Ï^É|ÙmYæ'‹øèÚ!0þ™é³T·eI­PAФÜ炤ÿØÃ?ˆo«P ´bo˜Mùé®á ~â•XU®¡¨Àà)·2ÃtµG¹;çCŸå€ßÓ79]{‡s3<ƒ_– fyžör¨)„o,ÆÛó¥:Êi™`H ÐÓý‚ñpœ¹K‹Ìÿr|ÝÖÆ€ æ±´#ûʬœ=‚ž˜bi^_•S²Ñú™ ŒÔ-*™TsGÑßM²ï_+×Ö¢¹›Òççäã§12eªÙ~¾¹Iþ^ ^Aóã×ú‡—d® ³ôÞ‰â R|uü}ÿÿÊÔæÌÓ£”æb䦃ȊËÞQN6Ü`#€†ñ%Náé!~:%KKJ©%€z¥òþñÍÛíºa´îO$×î>ªE‰ Î –\=õÌÖzÁ7, ní­õ‚Ètçzrßl Ëþ‡! Ž%'‚Á‰àt4¿ï€ÝþF!İ&ŽûÛò …t»mýŒzIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_icon_stop_2.png0000644000175000017500000000100511273045225026442 0ustar julianjulian‰PNG  IHDRàw=øsBIT|dˆtEXtSoftwarewww.inkscape.org›î<—IDATH‰í–1KAÇog/··à®¹F4­A 16 J>‚b­¶éÒ¤ b!b—&AmóD1 Û 6'»ÂÞ^îf_ W²'Ê5áþÕ0¼ùýSÌQUDd˜€ð¼(P¶UõÐÍáïUõs‡â2ðkIÓ¡,I^8¾ÿÏ;ǘ àGÞX[D䓈 ÀÚ¸“]]}¤ñkžøúeëä$ÐZ­O£Èhß$ ­T«×îØXLÐwIùŦ30ðÈ ’5·Íž$“Yo´v¾ 7¾ûX{ßU ¿¹µÝ1Ã¥wo_»³3œ0XÀ÷óš†ÃŸ;¢õtiy¤¹·ÿ¼=ÖÒÜÛ÷Ó¥å¢õ"Ó)”Ú£ãªÖëÿ¾­×±GÇU`ôv¯(p³45O¦çÉn'AWÒô=Áÿ&h9ž÷ˆ'ô/ÀF«“àÔLŒ×¤Ry2\*ÌÄx 8- 4_«„ᢷºrVšžJ0xX¡4=•x«+g†‹mLº<2¸ú_:ôö¬¡ìJ·¿-¿WÁpjäIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_last_1.png0000644000175000017500000000444411273045225025421 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<¡IDATX…½˜{lTׇgÎ=wï>ðîb µ-cžK%›`°![„ÚÕ%!%Ú(¢mH%ÔVMP›–¶!¥ª5Šš4‰DÒ&´£@”„`%UyñZ0‰ëö‚؆µw½»÷u¦pÏr½kªFÝÝs÷ñiÎïÌ$"p"*Œ±u~¿Uq΃ˆÈrͽ–û;¹kò5‘¸b 8žÉd…»‰ÈóÛî/#b¹Ïçk¨¨¨˜X^^N¥¥¥†¦i ( 2Æ€1†ˆŒ1Œ®!H¶m“ã`Û6Y–E¶m“®ëÐÓÓãimmUÚÛÛ‡3™ÌZ":›æ÷û7kšöØš5k¬’’SQ䜣¢(ÀC ‡ˆòê°¡ŒF”" $ݲ¬<ïííõ455iº®o×uýÏY0D,‡ÃM»víRWW†_Þ½·'N  #‘ˆoÑü¹¡o4 CÈȱlÔlÛ–`$„©\(Ó4…eY¤ë:ìÙ³§ ‘HÜIDg"*>Ÿ¯¡¾¾Þ Œ:ùÆoÝS‡9çUUÅ`0È'0ËSת/pǃŽ3隦1MÓPÓ4ùåºëóYWUU:SU•išuuuº×ëm@DEaŒ}»²²ruuuµ1kÖ,Ÿ~l¿oà£7ÙòûöwvŸOyŒèA肋MÊ­woðõô]Ô8ç(]Q”¬K=:2Ú̳b °‰DÁàà`¿Y¶lÙôÂÂB1sæL¯vñS_çÀ`Kï{Èß}¡7SXX¨úâç¼-ÿØhéláêõÞ¾!CÂMš4I]4¿"ty8i8€ÀCÇAn}Ž$_öÔrÎYWW—‡QUii©Á9GyÚº›^Pîzð÷Sºz.¦À¹Óþú3 lKY¾ñ7~rrX×u‡y õöÚÛ O4·Œ ˜R_¶m£mÛÄ#Æ!"!¢peFDÂcÅÅÅT1ÎyÐãñ€ »Ûº›^Ïv>¢Ì­(/¸*ôÎÏCËK?Sj-(œs8}Žl­c•‘²ÐWfÍô»ô‡ªªbΕ9îÖrÎÑçó¢(AŽˆÌÑEvßsá¬tF{;ÆÜëlÜ Â6Ù¢MO†z‡â@„áŽ(¼ûƒJ¼í—ûüU·”«gZÚ’Î)&˲EÎ_ ëD£ˆ»BŒ1Pe<.è9²†;Nå­w½ó2œ~n ›1}š_®™É8~t¿¿G]\5/ …×)Ì‹”<ùîCÀÜý¼;ôw°ÒI0—ÝI š_ú9^j>¢TÿäÅpKçùd_¿î½+£¼:I1 –}Ü\õ}}üõÞ‚‘-K°æ‰ƒBü¼¥½sÔÊ ^É“,#Æ®œYç_Ùÿ°Ñ¾N8´yzúÏz«ç•‡|>sç¿ñ“[¾p³õ4|ðø=ØóÆÓjÍÂù'NœÈÝ Ùåc#p5j7ÒÚöý>y| [8wN¸¬lªW‚È«ÔzìF¹m°ùüóájœâ n)ÊÄ.3C¶´¿È»‘–¹ÔÿÚ²±ã¨÷Ž¥K “pÙˆ¹+Ë› ',N<õ=ìüÛ6uÕíK§„ÃaÅ©õ®jÌUKÝL¶\“K¹FD„7Œqæÿð Î_i5½wôr2™´ÝÙÈ2n ™·°j¶¿EÃB˼÷᱄®ë$dj`9Ð5¹¢îxö8Oa²ù?í£ãý'"w „¸áú|óG0û¾­âLkgòòåËfnŸ ˆ®l¥Ó0à"S4,ztù#‹ìSŸ¶Žf2;·ÝsC\ÕX¶›ù¢-P4jÛH#67>kïN›¦I²ƒräC¹N³, ,˺n°â%wä¹Kó×oý,úêéî ½iÙ²ÉØÝæÊ‰@¶!½ž­œzÇýP³íU(«Ûàné¡â' òÇ/Š–s’ƒCCFÔwC9Ù8ÉF®±’ÚzííÈ«b§Ý¹*6=):ÏuéàP'„añ¶ý„“gX§[ÚS¹0¹QsùåÄ„B~PÒº­¬n,ùE•~õÞ1÷f¬zÊ7ýA||êÌðèè¨ š9Vî`E‚Åb1"ã™L¦±­­mYIIIv+ËV¬‡ÈwvXݽ·W×uaÛ6Ì®ßBÓÖüÔ>ðö¡AÓ4É)òh``À2]€1sM²šoÈF!•J5r!Äî¶¶¶­‘HÄ/„ ÒÚz€ÉÓÍþ²ëB:ªª2Û¶aê²{ÑP|Ö¾7^´,‹rªNrO€rÁ®1/˃ŠÅbj4½dÛönND6"®mjjzgݺu‚&—›z~g,•J UU‘ˆD<7“3^ÝÿZ¿iš$û?§ê$ 7^C#§;_¹ÁäU×uhhh`©Tj-ÙÙRGÓ´‡4M{låÊ•zQQ‘á4¢yè¹KaEQd¤®97ËM¦n¸X,¦644°t:½=•J= 0ΨÓëõ6Ìž=;‰DìââbÃëõ^sÜäšè;ÌË›4ÊÇ„2 b±˜'B4½äD*Ôé‚Scë¼^ï*¨R%ÈœB܉\¡srg¥R©FÛ¶ó†Ãÿ›ÏÇ«ýcºIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_last_2.png0000644000175000017500000000435511273045225025423 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<jIDATX…½˜ol×ÀgÞ¾½Ý»‹Ï‡ ÄXÄcC°©ùãÒ@S0)Ä ´n 4V]Ú´jRUɇ´‘šªøP©HͧTɇ 4M#EV(F¡Q"*ÜB-‰"ƒ9"°-cØ|ñÙ{û÷M?xß±·wT ŠiôîÞîÞývÞ¼y3ƒDAAD…1Ö‹ÅvÑ:Îy"BX‚sáß ÏÉÏDDbVrpÆ4Í£BˆDäývðaDlŒF£ÝMMMóiñâŶ¦i ( 2Æ€1†ˆŒ1,F³DBB€çyä+xžG®ë’çydYŒE”¡¡¡ÏMÓì ¢þ°X,öœ¦i{wïÞíÖÔÔ8Š¢ çEÆJ8D”£Ï†Ò%PBˆT×uKt||<ÒÓÓ£Y–µÏ²¬ý0DlL&“=]]]ꦯ­M¾Ùup,ŸÏ  ¢_oi®|ïÞ Û¶…´\‹¬æyž#!HK…¡Ç®ë’eYpðàÁŠ\.÷8õ3DT¢Ñh÷Î;Ýx<ÎÆ8fOGM2™äœsTU‰Ÿ¯C¤ã»O,¬¨¨à‘H}eR5Mc𦡦iò;ÊùÀýUUU*SU•išÛ¶m³t]ïFDEaŒíY½zu{KK‹½lÙ²èCã'£‘¡±•Oü46t9¨®®Ž<˜ùHŒ|¬ÔoÙMg,Î9JU¥ Ò}7¾Y"!?Åx<îær¹Š‰‰‰ŒÇÓÚÚº¤ªªJÔÕÕé9é(ö‚ˆ9ÉVìx*6œ3«ªªÔÅt]g§Þ@•¶¤u—>–™°%ÜüùóÕ-Í•7³SŒ1ôäÒ‡\@òv-県ŒDUU÷µµµ¡¦i¸téÒh­=ªÃ•s€™K š“¬¾íGÑiÓöšW#8ü1âØ§ ºyV»y—–™¸å,X°@]V¥E—Ö7D§fLײ,’@.`%ÄâÐü‚º®{}}}0Îy"‰€4{Ñ© züeeUScEÑ|o7è'^U6ohIVTT(œs¤‘^ˆt=Ã64ÕU>\¿,ð?TUC#ó5ègÈ9Çh4 Š¢$8"2ß/0ü*l`òJñkž}4á°[_¬L_¿e‚ƒ™KÀ_ß…ËŸ|%6Í*õlÿ¥i“뺄ˆ¢œµüÝŒB "dl–c (J9®Ù§/ü0s±tþÜû9ö«[º$V˜4s t=÷S7­_SYYY©va‰¥äÎn"tÐ/*xþ€mæ§‚A Ø?_ÁXú¬²±ý÷Éó#Ó×2+èô`Œrôƒòìé⃎›»¼xp´·ôÂÀIPßڃ͵U÷­\^X†…­T˜“æ®Éþ—L^þ§ïc­5ªoX»ª2²`ü+§ˆ¬LlùòÅ1A9ô&ÏP[Y7oÞ¼yÞS0…ƒ·c/åj7¸ÇŸšœžžö‚ÑÈ4î Ù}÷ƒÛ¹Ÿ®höþû“œeY$dh`>ùèÜCÕ®÷燨žN]œ)÷ŸˆÜ?§@1çþOž{ãÓ¢ïÂÐôä䤮 ÷Í.¥_0àœ‘©:xß{‰f6yç?½8cš¦.÷‚·}¬PÍ|é2o1x{^§kÙ—/ çÇ!YAùîCaH?޹® ®ëÞ5­x ¨¶¥ôBÃfpö N˜ùËé±¼,Ùd¬?ÃîTXJÏóî*ÈÒW¾°ó Î&e´Wn-=vóNñÙàèŒa^ªHƒP~tND²…;YŒÞ 0y¥$‹¥Õß{ë‹âÊðek €zx¯R6ºÈ½Ø?`„aÂV Â݉ !„¼QÒýys;Г/5m/ºFkwƒµõ×âô™Ôç333³ ‘–ƒû‹Ã4ì$ò© ƒÓ¦i Û¶…ã8ÔÿNp!Dβ,ΣðRRs;Ì´þÊ»p¶ofA¡R¢–ÈozÎ;ùŸO²ŽãP"‘P°vØ+¾)ú>Êe³Y7¸ÓÂ=Œ`‹ ¼¬¶mƒëº9gÆÆÆ"Žã9?5·Ãôæ_ºï¼ûþµ\.çJbZÿ0¾ñ¬÷÷ã§nMMM¹¶m‹l6ëÝtçÄéÞl&“q,Ë"Û¶¥ Û¶ÉqákÙÆŠK§ÓDìå¦il­©©),%5r›žwÿÒupܲ,áyü˜fÖÿÄûàÞ ÇqÈOòèÆö‰›7À±2ûå»?Ÿ.×dI¥R`ÆQ.„8088øÛ†††˜‚`åV˜Ò«ýo¾}5ŸÏ UU™çy€k¶cN¨î¡÷Ž\w]—BY';@a°;ôËJ Òé´šJ¥nyžw€‘‡ˆ===Ç:;;EV_åüñµ7Ò†aUU‘ˆD6›unšÂþëßgÇ!YÙøY§lP¹‚FÎ`¼ ‚ÉѲ,èîîf†at‘WHu4M{VÓ´½mmmVuuµí¢%lèSaEQ¤¥îØ7 Ó \:V»»»Y>ŸßgÆkeZº®w×××W644x‹-²u]¿c»)ÐÑVÜÌ+é4ÊãGBÙ¶ ét:’J¥ •JÝò-UÚê À)Œ±N]×wÀ:EQÌOă–;ú?væ±×0Œ£žç•4‡ÿ ¥UžÖlœÆIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_metronome.png0000644000175000017500000000170711273045225026242 0ustar julianjulian‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ2cÄ{¶TIDAT8˵”=ˆ]EÇÏœ™¹wî›;ï¾»f·XV_‘• D--ãG j±…ARJªØÚ؉¥•¥àW‰J:m‚"®Äba‹e]}ûع_sð”e÷YdªùøÏ3ÿùÏÜ£&Oc°( hÛV!äh4Ì }ß»O¯®®^“RF)eÌóœ±O’äÿU±µvu8¾(„ø3„p¨µ¶ˆ¸™eYÚ¶íVŒqV´ÖOÑû1F:Ñç܃ÖÚ¿œs¼¼¼¼gŒY)ËòRQl­=ÐZçRJeŒÙuÎqY–O/d…1æì*¥ÞžN§§ƒÁ“Ì|€™7C‡}ß“Rj3„mÛ¾¾¸®ëJ©û»®û@J !„)å¹ÑhI’\¿ë”›Y–AŒñ’ÖZ/kíºsîf–e¼¾¾ÞEÁI’ì)¥’9°NÓt2¹,ËÇJ…÷þ÷ã†sî`:b𦠔ú‚ˆº™¦ïû€ˆßîííAŒñüÂqóÞït]÷n×u@D`Œùîˆlšç9t]·¡”Â…sl­ÝAD`fhšæŠ”ò¿'»ÉÌsn5˲‡{ïß`f`fÐZ?UÅ•ùõ®ë&Bˆoªª!ÄÆBà,Ë–Ó4}>ÆÌü5½g­}`^§µ¾±´´DôìBàÑhô\–e·½÷/#âoˆ8TJ}äœ;;Óíïï_ïû>¬­­=l­=½ˆW Æø9µð–à"ú)ÏóËMÓìVUuk2™À`0xíX°µöôááá#MÓľï?¾ãç÷I’"¾ªµþ#„ðèL/„øÒ{ÞûŽgYvQk ˆøcUU[mÛr]×·ˆè“¦iÖ…¿ÎôMÓ|eŒcÌcišÞw$½y' ŸÍ‹ˆè|Œñ‚Öú%"úp6_UÕýBDÒZ{a~˜uòŸ7þ8•Jy)¥ÝÝÝ_^¿~Œ1B Ë2ÑÖÖ†––Ÿ±X ÇÇ;w>Pe€ù†(™¦y ¿¿ÿæää$ž>}ŠjµŠ@ €Ó§Oãþýû-ÓÓÓ+\ÉdRôûýý+++·×××áõz‘J¥@)=æóùf!™LÆ| `ttTr§1ö#Y–¯f³Y˜¦‰h4ŠæææŸlnnfLB¡P}<¿­ª*\×E"‘¥ô˜ßœœ\~[PÈd2æ•+WVEù'¥ôX"‘!š¦!ÿ#×€J¥¼„sss¨Õj]×ÿâóù¾Èd2;xGËd2UŸÏ÷…aã@)ÅüüŸ°³³ƒ©©)¬¯¯ÿµ¯¯¯D)4 #N)MT«Uäóù¶··?6Mó½áááú—nùþáÇWVWW¯NMMagg„ôôô@Åʼn‰ Ó­­­v¥RyhYÖOkµ8ç`Œakk sssàœ išæ¡|>jµ ÆX§,Ë!Y–—ÛÛÛ7:$PJûJ¥RöÖ­[xöìjµÇA]]š››QWW7Â9ÿ*—ËÙÈçóV,c¿~üø1t]‡ã8°, º®CUU ‹Å½>Íc¬C’¤ïù|¾%I’tUU …Áõõõ½V+ššš0:: MÓ>I&“•l6ëzviŠÅb¬X,ÞH$ckkk°mŽãìÀ9‡mÛ/ôlÆ\×í …BßH’ô´V«¥K¥R¯a²,##N£T*‘$éñùóç-ve³Yƒ16·¼¼ÜöìY´··£©© Š¢@„×Ê…üoBB,I’à÷ûFÑÙÙ‰sçÎa{{û}Y–?Ÿ˜˜Ø“ çùår™G"‘•B¡ð[EQþ>44ôójµ ×uáñxö4 ‚  ¡¡­­­Ÿ…B¡ËuuuË–eµèºþÁ¾}û022Ó4SÅbñ7š¦-]»vÍ|«E ··WllllàœwŒŒÜž™™ÁÂÂr¹8ç…BˆÅb ‡Ã¿á~ à”ÒgΜ™¿téÒ !9MÓ*/Ïá7?_@ ð‹¢¸¿R©|¼´´ô+BöïßÿY8þ½×ë¾qㆺÛÜÜ,–ËeþΫϷða¹\þCCCßêëëÇ !3÷îÝÓÞ¥—{¿C,eŒÝƒÃŽã,›¦ùÍìì,}×!ò_ýå+ÐØÁârIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_next_1.png0000644000175000017500000000427711273045225025440 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î< E¤XjK•Æ@£¶*) %ÅNÄ&ídmì(ëøø²{n39³™Ý=I¥FÍîì¹üöÿ]æ›A"³!"gŒM¥R‡ˆh7ç<ËcñoæõPß̹úç(¥””rÏ­­­RJ'"Yó óFDBœèííméëë“ííí,ËBÎ9ê‘sñˆŒ1`Œ!"BÜ1 L)EDJ)RJïûP,íÉÉI611±X.—Ñ…0!Ä“Žã<;<<ìmÞ¼9°m-ËjèH2Æà´¸ñ³5)¥@JIJ)’RBET,í±±1îyÞ±r¹ðÕæ©ébÁ¶mlooû‡v­+-®8!Hj cPç‡5‘BD`Y¿té’eÑî¶¶¶ –•iic°xé˜S?ü¹ïozuüÍRE”Ïçíõ-sè6œ9{Áu]7JŠÈØáQ;{ HˆHúZ"B}}wwwHDƒç<+„(›6·m›Å`Õvóý_!Qd}öÓ?Üpúõ3‹œs\]x V®ýŽ ½¸îÊL©|­8ïé<¦žˆ42Æ(†ª1!¡Ž\!„âœg-ÆXƒoĦhHŒKWF(âÿ4?S¼á TnžƒéÓÁî}/¥ó¹~»p¹¸§35Tƒ_Å×`±ÿ[Ýô ­c,!§,Mý–þý ß¶íÃÍzNú7àêCkõöà#¶f2+ŽÎš(4£ñNÉšsŽˆ"Ö@é΋=,nú9¡ QeÖp\ 翃­¥¿âŽGF3ÓWKe×u¥‘HÁð©5u^㜣”’,€ºl®éï€u«­ÌŽ%λÅÀ[žÀžý'Ó‹Í›‚ÿ,”ü8"”a:Ý«Pq*!ý^†ˆ`Y$堻ݭùËaê/;1à ·zÛš…ÌÌsIË™™ç@¼¬ÔØûÖ÷Ì*Zko} ½Ùßðû;Ò™L†™K˜‘×tÒ­Y΀™ÍsÏTF»qñ'pýÜ—Yï¦æõëóö`Ìê 6¥ U/éýh« ‚éÓ{±c£lÚÒÓÖd,ú‰¥"Þ6e ¤ Àÿ¥…å˜>½›ÕYg×Ã}YÇqØ®%¢*˜V©j÷ûeÊšJæÞù–g~n =º½µ©©IÑ® õ‡jɬMªáþßÌe«¦Äy,Áï»)§ mðy‚æýòí¿½·\.—e}u[ÓÚûôp¿¡ìttx•JËvP8_X ‚@éŠÖ€"¥T)ï7GMË<ðIØrðïtu*ï_)–ãrÚ,³ÍÒbSš;%]C%m»î¥mxèGвõ›êbanÍu]©¡tͯ7&æ&…ˆnÅ@¤ë¢ûŬ,t ý”Ø.'/ÎT<ÏÓPfsÔ€VBThÀ{¦-Açþ“TZ¢ xµè‡a¨Â0¤(Šª½° ö1m:s‹õA\ÙŽÃДj˜oíüÕÏA êçc“©0 õ÷j:ñ}ŸÆÇÇ…çyGˆHVîÒéôS©TêÙ‘‘ÙÕÕÖŽ$íf’ÎÁt²Ö se  Iµ¹¹9g||\ø¾Ìó¼Ûw·“$¤Óé;vìÈoß¾º»»C!™û£Êo©=9L0eCNÓÑ›Ž 7Vªñ¨Ó€ãœó£étú êÃá{)Ì€0çâÃáeDüG¥RI<þ/dºƒ×r›IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_next_2.png0000644000175000017500000000417011273045225025431 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<õIDATX…µ˜ïoÇÇŸgfwçn}gðÙÆà€×R~©MiÕ¸%)…&­Š)ªú&}QÕÊ«*II•}‘þ}QÞT}Ñ*’Uñ‚Æn¡yÑ ŠT4B±I8CÃÙœ‰±Y›»Û½Ý™§/¼sÌí­‹È#æn÷nïsßçÇ<3HD`"rÆØË™Læíãœçc,¾‡ñl~’f^K>@)¥¤”+ˆx©R©Œ+¥N‘lz†ùEDBœîïïo½½½u!X–…œsÔ3çâcÀCD„x`˜RŠˆ”R¤”‚  T*ÙSSSlrrr±Z­¾DDWZÀ„?sç­ááaãÆu۶Ѳ¬–¡4 c¬N‹?[‘R ¤”¤”")%DQD¥RÉã¾ï¿]­VO6Àq(—ËýíøñãËB°m<˜{öÛ‡º~÷û?ÎEQD&˜eYȃX1äœ7©•TÌTJÏRJ’RRE$¥¤ àäÉ“™¥¥¥ÃDt…!"Bœö5”mÛ¬P(8›6¸âÕÑŸ<ÖÞÞÎÇAs!˜ã8LñÌ„ëÆÐßѯYühYVcBÀÈȈt]÷4"rÎûÑÎ; ùŽã mÛ̶mìïïÏìè¾êfé:ßµïûmW‹35DÔ÷͇³XMö¿Üž‹-‰“Ïç¥çyùr¹\æÙlölîèèZ-Çqpûöí™ÞšË–Ï p8ÜûBÛÌ̧5DÛ¶±··W|ãÐþõ w¼ºNI’&(Æ$â°)Sˆ,ËâÓÓÓ#¢}›6mªÇ²2--c ØÊẎïðG¾·¡½½Ýr‡ »§ÓrŽy¦«§§ÇÑnZÕ,öF“âiÉÕ××Ñ~‹sžBTMŸÛ¶Íb°†±•w° ¤õü±tûû…EÎ9RmDõìë_}m}qf®zóæ-_×1ôD„q"cŒc”t!¡Î\!„âœç-ÆXKlÄ®h)Œlå¯à‚âÏ)\ÿOÙ€`¬ù_àÛ^w» _²?.ިĥÁÌF ÕWñg0ÎXˆÿÀjE7cC«¶¨-l€+ç Sý|¢­qQ®/ÿ »2Ú÷?¹.—ËY±K›²ÐÌÆµŠ5ç,Dl‚Ò#fN5\y@V墮€-þ³mEüòžWr×®—«žçI£6ÔJª©ë祔`$ª¹¦Ç8öÓáªÓoTþ VýSܱíM÷öl}îÖgAœyÊp ¨¸”Žm†ˆ`Y¤Õ 5©dá,ð[¯cϺ%çñ[Ú„̬siË™Yç@¼¬4ù;5ÀþS5`ó¿Æœ|— nss¹3—0£®é¢Û´œ1³šÿæáÈV ô[6øøæ¶ÎÎN{-³;ˆ]iB%%}$V» üÖ/±s&Û¿}sÖXôS[%D¼ïÊH¦6€eÑgÀË'°'?ëì}j0ï8ΚiOD 0­RÃïʕͿ_ø æÃ³Ö¡§÷®Ëf³Žt_¨_4ZfíR ÷…Ûý%«eÄu,%½+ÐÙ9J9 ß¿pi¹Z­ÊdwÛӉƣ§²ºAvŸ ò¨þñÕ©J½^Wº£5 H)u¿ò!ꘖ} d׫4}íV­\.q;m¶Ùfë 0s§û™Ìkc´þ8„îwÔGWnT<Ï“J÷üzcbnRˆh,"Ý=(–Õýsºn”ÅÉOj¾ïk(s€9k@+%+4àç§³¹áMš_¨Õo–naª0 )Š¢ÆH6Üw%éN3^ñÈEîWä"`0Ý|£íi…Wè“™ruii)Š¢ˆ ¨À´Ñp¥‘&ÜÚPùa€®Ÿyã„Átœ9 TáÇTw¾FW>¼Vñ}_%~P­˜T®¡˜†1›µµ$£üa¨ç^T³×oÛ ”žÙý-Ýk ‹W>ªFQÔܦjaÒƒT#"°Ôª5uŒ1HSŒÚŸ?ûCyñâååîîn›D?D¯Ñõ› µRi:0tÌ$U3†J¸Zg©²¤”+Ad8礡ÒÀTþ»PËöçñÛRJ0õn:Ùæê¥Ì€jÀé8K¸´1A@Â÷ýcD$w®ëŽf2™·FFFä–-[ÂäáHÚn&íLÙPJ)H‚™ªÍÍÍ9"‚·}ß¿p§ ‡\×=½{÷î®]»¨¯¯/B¹0ºÜø+Í'‡)®l©i:ûb×±b±èù¾Ÿ~ÔiÀqÎùË®ë!¢ýúpøó´FfB˜×âÃáeDüw­VK=þ/ƒÒaÇSÃIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_pause.png0000644000175000017500000000473711273045225025360 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î< \IDATX…˜moÕÇÿçÜyð®c‡ØÄ‰CâD b+Ä AÕDªB BBU‚~‚æMûxÑJ|ƒJù*R^•¢V ©ˆ‡&rDÓÆ1±c¯õÎÓ=§/î½³³'íØW3³»3÷7ÿÿ9çÞ¹¤ªhnDd˜ùõ‘‘‘³ªú”1fŒ™ÙG~ßü=†·ægÃ÷kí}Öívß‘·UÕÜ£y!ͦiúÎÑ£GÇ;f8P¤iŠ(ŠÈCaoŒß3ƒ™‰ˆàí&"ªªäyŽ¥¥¥øêÕ«¼°°pg{{ûªúå=`išþ*I’7OŸ>íß¿¿ˆã˜¢(hÑã?š½µr³¸}ûviŒ3ßÄUUìÝ»7zxj:¹þÝ7ÙÖÖV%"°Öªˆ¨µUUéÒÒR|ñâE“eÙ[ÛÛÛçk0"šÝµk×_^}õÕÍ4M â8æ(Š(Iúù+oì[«öÄ.2æQœ8(úéßÿ´ÖívÅ3 attÔÌ?wfâÊMC——Ï?&Ø›nVðÖZµÖjUUj­Õ<Ïqþüù‘õõõŸ©ê—À¤izùÌ™3­ééé"Žã(¾ôÊSXØ~½Ò0±ËÐo_f|úÑ»«UU™k¸$Ihþ¹&÷GÕ;]QÀýŸ:Ñëóêã߻ӄªªJ«ªÒ7nÄ.\èlooŸ4ÌüËãÇ¿8;;›%IBqsÇäiþÔÇ®õýà«J™‰˜ˆ˜Y|}ÛÐËÏN§k·næQq°|îþýG)ßꂎ ÐJG1::jŸ²º±±^ 'ÎØØ˜ít:c++++<22röÑGµÍ˜òªQÇ|ô‰§ÇÞ½\ª»=ƒ˜@L`&úϪ 4q»Ý6išrš¦ÜjµLÁÅ7VU™ÌÎZöÿùJ¥ÓGfG£(b/Bý@Æš››Óv»}–Uõ©ééé"ÄT§¦¦â¥­®õ͙Ÿ¼tpèÈcí$I(I>täxëÒ5N.!üÎ=”àF'剉‰h8¹¢(¢™™™RUŸfcÌØPÀ×€ΤŸüËA°SŠˆCY`0}qÝêîÉýI’$œ¦)íÙ—|ño«õƒ„Øóa@Døä:ÓÔÔþ¤ ÊOš¦jŒ‹˜™w"ã˜FšJV–E= 5,qµŠ€Â0 ¥iê>4 —`& U( ÿ@+›‚ôèDEQæk‰|)!fæÀ@mfã®ñ=ñJÇ‚|À—„p^)#I&"TbˆYÔW‘’*9D¿ÝꈶÚã‘1†|Á¥Pߌ1DDˆˆhªÙZ­g% ˆD7­2¥iÊD ÷=  rp^«ú +iš²1ÃPÖZ€@=¼4[E¡û¾}ÌVº0’$!¯,9) GJÄÛˆÚQ†W ÖZõ#‡²»!Š"ì¤ØðøG„ÁXã’$af¦Ê¼ª‚@PRRX N¡J„0œisOD}ŘùžÁÙy úñÄ;CˆQ[I &!%¸À÷ú¨Ëg±º#Ÿ±DDÚØcÀÊ07áT"Ð@œÕP5 ;+™™r“:}€)@ŽFCBa¦éNmeªy\«…{ìlºz–ÄÎJ* L …ú¸RR‚’¹fB …JµDÔ·Ò(/3¼jä3ÍßdÐ^ ~6Æ€*¯2 ”<ŒÆþ6U¯¹>œï!;ðyµÜá=€aH çõÿ¿Mü0ÔSæ`iýÅ€:ÞÜ…ÀÅiš¦áÂûõ2;µ&ØŽ M¶@uŸMD4Ïsq¬.äÝ‘ë,d§+mPuêø! ªª~ÀP-@>`Xu“à²,•ˆT52*êñt˜3@©˜ð.  ¸~ûŸêÓà‰j¿øÎQ…ï¬U…4í €}¥\Öúkm},âr9B:tín¦êFÞHÙåRßÉ%þš¢(Ä]/*ê,©•ÓP-¡Öóþ †·©¨¤ªÎ—~… a–@]ejz -ÊBT+dhп(´ñR‚& D;dEÔZÍfQDà€UUÊóÜY)Tjû ¢lm¢¯X£a`v`s#‘`Q •Ü0*zQ8ÅhDƒ•Ú°oø\¡‚ðv4Üj+ÙQCYk5ËriÅ-“•`ópÔ¶=X›"!ЛJê3o$zY&dX9À×±¡à«%ζ;vßnˆ»P{T"¬æy®yžKDVÃw"ª"ª*ZC©*öífÚ¾»Q>H1·Ýe­E~w½Ü?Î ˜ €¸U³RjQR…BJ‰Ù?lÈNÿ@âËÈþqF¯³Z–e)UUiY–ÚTOD„­µ[yžÃ¯% ´~X)ž9"ÚTJÔ·:EæÜíÜ.ò<—¢(äîÆ­rþ0‡À¯UkÔ5}æˆ`yy©(Ërªª*Ͳ ÖÚM&¢Ï–––âáõ„ªªt}}½:´;׈Ñ0"QÅ O(¾¿ñ]V…æy®Ë7¾ëõ@êT *ª†€ƒã¹¬®®Ö`eYJ¼yófBDŸs·Û}ÿêÕ«|?¿¿¿~­ûâ“õ•’P§tf’êFÕëõlP¬×ëI"Õ¡‡‰TœÂ¢áOñÒɈÿóíå­†ZµeYÊââ"÷z½÷YDÞ^XX¸ãU«üSÈ7‹×º?9¸Qžš1T[©ŠÝ-¢_ŸV|}å_’ç¹äy._~ññÆoN+v·ýàWœš1ôܵbáÊ?»M¥‚ZËËËÉââbGDÞ®—¡öìÙó×sçÎea¡nø]óÙç_œ¼G.NT<ùˆèÕO?Øèv»õJ`‡"hµZ|òÙ3WnrX†Ò‡“êoï]ü¡(Š&ìó<× .Œmnnºe(_àÑn·ÏŒŒ¼ùÚk¯ÙC‡•C+ˆÄÌ96²¶z«\[[+›ƒÿp9 óääd´wj:ýö›¯¶766ªáP)ËR–——“K—.¥yž¿•eYá.lD4Ûn·ß9qâÄÄÜÜœÎÌÌ”išjó}`p"Ù_9 ÅÖ+f Íñp ±²,ƒ·Ž;Y–í¼ÔÙ€3Ƙ×ÛíöYU}:,?pjtŸ-ܻهkí&}Þëõv\þ/¿ƒÄÔHtIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_play_1.png0000644000175000017500000000447511273045225025427 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<ºIDATX……˜mŒTWÇŸç9wîÙfìvÙ]` ÖEÐ& ²&Ä‚1am„†dÛ(*DSS>´6ù`Œü„Æ/úÅ4!Ù´©²Ñ´µšÒÆ”dA–¦¼ÍËë¾°3sïÜ9çñÃ=çΙ;Þäì¹;÷åüîÿy9Ï9ÈÌàˆ(ˆhWW×nfÞ,„È™khz÷~Hîoé÷h­µRê"~T©TNi­_cfÕò÷AD–Rž\»vm¡X,ª•+WÖ¥”ày !ÐöB0=""˜†À´ÖÌÌ µf­5„a¥R)399IçÏŸ¿_­VŸeæ m`RÊú¾ÿÊÈÈHÐ××WÏd2èy^[³@ˆÚସæÝ˜™µÖ ”b­5+¥ Ñhp©TÊŒ‹ ŽW«Õ "çr¹¿íÛ·oAJ ê…#ßœ<{~áÂÙó‹.˜çyHD`C!D‹ZiÅ\¥l¯”b¥7 VJq†pâĉ®ÙÙÙ¯1óBD!¥<922X¨L&C™L†îÔæpRÞZº÷À¾•ýýý¾ïûh›”’|ß')%šž¤”ÉïN³ÏØs2c çyI/¥„ÑÑQ•ÍfO"¢Dôܺuë¾1<<ø¾o¡Ð÷}\³q}áïüžß¾úoܳãë¹âªÕ™¹»÷#ûBóR2jÒ£ÌÞÁÛ'ŸÏ«ùùùüÌÌÌŒèîî~iëÖ­«zzz”UËâêá' o^úª—OÃ]½è}{×ÞœP¨Â Ðö#¬Â‚¤Šˆ å‡-‘ÂÌàyž¸|ù²ç1óæþþþºQ§'ó#"|pý?W¾?Þ~ °­¸E_¿øéBEì Ú‘ÆáÑ:»¹—ã÷¢½íýƒƒƒ3oñ„y)eÕµ¹DD 4òSìÜŠ5üæý?ñ`O?ù~_áðVéfÍÂÙ˜¾W©T*ÚQÁF ÕæWæ4 æÈ€–êF "t„Š•DDxëÒ¿àÝ«gàèŽçsŸë]Õ˜›¹j­Ù&U­5*¥ØøY[*±÷Ø"„@D[ Üf0À…"B@¤–œU‹øù;¿ã ½£Oy^U×çD®o5 x˜š.”RŠ •ÍÐTh·@‘QM ¼xç <ÿÆ1xûîÇrù@ï’\.G©”Ò6N:•"‚çyÐI1ÀÖùÏ…B$ÀØá‘€cSÂ?þ3ùë¯p®»ž]Ö»¼Ë÷ýNp-Ó™ —(f¦•–ÉY1YÕ({Ž*¾jÚý`^<õkþí^÷òŸ]¾¤°l©p§°tŠIOg‰)-± è>®Y© h@ŠÏMk*ýÞµ3<öÆ1ž ot¯èËú¾`\—ILéB¹ç€qNBs£}ØQª1Æ¿QKÀ„:üòŸà—ß;AÝ«–å>Ó×+Ó0n´"bӔͯM¤†„ß*fëh¾4†Š!ÉQ|ј¥ižOîÞà±×ñ_n}(WoX·4ŸÏ èp0sf/±»óbÃg2$&NLÙT ½ºefxíì)>ôÖqˆ÷ ƒë×äÀÔlàœ$%³5©g°}“΂ƈUNþº·3}%¯gmÚ©Û9ßýðAmÂdf```óÀØ|ÃM»ñ[ëwqyêÚüÕ{Ó ·ºMÀe0©EMR€™¡YÄFùhöÚí°^¯k»ðp¸½ðÒáÚµ0b¬˜Xsα•¹µðc„±Í{q÷ší\½³P»_¹«£(ÒQq£ÑHZ °Ô5%ÛJÓ–*Zk´±Äû €ÐÄ­Ï ÷®…£O¡WÕáý·# á@µvj‰)ízÏ…SJ1pÓÿ06Vì` c?ƒØ¦Kün|é+cðda@-Üœ £(ÒZkH ¨˜V.QÌ…±Å%¦Ü˜€ÑÄ)2Þ'wâÁMÏpõÖ|pûú͆­ÝÝ\Õ¢(âÿ§3ƒ§ãÒPD„ÜŒØÎx¯*ôâ«»a6aùÒµÐh ,˜«”ÓtÊÔ6Jµ§”z†a—‚ÝÚœˆâ$ÙŒNôHÀ¶}·÷}Aߺ2]™"Í}ŠÄ-:m¤Uë¤^ ”Zðñ£R©´«X,FîJ96¶ l‚Ÿl?€s7îT>9÷ßzº\q3µ~›j¤M9 8==í#â‡^¥R9599ùôÐл¤ÉZÌÌÜÓ]ÀWŸ>„é\ýâg+ÀfÂv­IosóT›9jiç=55EµZí”`æÉÙÙÙ±¡¡¡l¡PhÙ<ë/äòÙýtÛA¾=ymnúz)Hís±£Lzp7*¡“ùÒ>V.—ýÓ§O?ˆ¢èˆÇÌ ŸÿûáÇ#'…Cow™Ö,¾?ñn5µaÕm™dM>Ç”‰I­Ÿ¥s›íÃ0䉉 Á3̬’»l6{¸««ë•ÑÑQ500¥7G:­f:øWçBÙœö“êr¹ìOLLÈ0 AÐܸ³"g³Ù“7n\¾aÃŒ¤”ì®R…$:™‹»I—ž°Ýè+—ËþÔÔMMMÍAÐy«ÓBˆýÙlv73o±›Ã®L;n@¸¿™ÍáDˆˆãRʳ;wîS###m)%xž‡B´½LDD„ˆ¦a?0­533h­Yk aBµZÍ•ËeºtéÒR³Ù<Á̳=`Rʯø¾ÿÊÄÄD°uëÖv.—CÏózš²€DÔgÅ5c[ `fÖZƒRе֬”‚8޹Z­æ¦§§E¯5›Í© Ç …›Ç_“R‚…zþ_.½ûNyíŸoÏÖ]0ÏóˆÀ(†Bˆ.µ²Š¹JÙ^)ÅJ)Žã˜•R†!LMM ,//?Î̳„ˆBJyvbb"°P¹\Žr¹ÝÍÝÆÆ£å 'N}vdxxØ÷}m“R’ïû$¥DÓ“”2ý»Óì3ö3™9Ðó¼´—RÂää¤ÊçógQ"zv×®]GÇÇÇß÷-ú¾{þÐà/¢ïrÙ{ 'ö+”6åV"; ”Œšô~fïã‹=S,ÕêêjqaaaA¬[·î¥ƒnRV-ˆ»í|›ðw=ÁÐïÓ}ºÀ¡PA3Ôö%¬Â}‚¤ Šˆ ã‡]‘ÂÌàyž¸råŠç1óCÃÃÃm£9NOæ9N:‚Šú ÿŸ…£‡¾6øñÆ#úÊŹµ(ŠØ™´'"ãuvs/›qí}hï/•J3ð„E)eÓµ¹LÞŽœT QÁoâïó¦|‰¾pøÛCQÕç¯ßlY8›Ç¬Ó3³…B"bÕeBfF¹RJ-„(zDÔ〺òSj \âyøq|ŠmR~òƒÏÉ›•»F½¡Üh´P=~eîA±`^€<èJ n¤`(JS"ÀEýk˜Åóðùñ3…R}w|ûúJ¨µf›TµÖ¨”bãg=©ÄÞcSˆ3§`ÖñR»Q2šEJf0?® XÇÿ Sïf&†?©×ù'x FƒcûK058Ò’ÙšÔóÎ`1ýnþgÖb0&&"tÞ¦U ÇÀÉwwùJ+^Ï1Qo³z¹d÷œ3I˜É„ìŠÀ) |B|ÅŸã÷þV[]\üwìV·)XªŒõ ë÷q1 2§ÕÒœ@Ùꪳ•Æð8¾ Í9Ê×®µÂ0d³`Ž»»¯‹&ÍÌv ¥SÓäXÂQñ"lkî×óÿºÝ¨×ëJ)å–Ùné )˜»SJß’Ù)Ù'P˜ €fD»óp}Fó8>†Ãó¼z=hÍÝYˆÛí¶VJ¥5¿Ý˜¸›fNÀì4¶.r0ñ `fFÇÀˆ €‘å\3àAœ¤oáÀÊæ¨6·¶Ûmm7N··€^6"ÀÄ[ãbg;’€fH 븦“¸?:ÂËÿi¶n5–tE:Š"Žã8mÀ.P×”l+M[ªh­ÑÕY3agz ÀˆÖç¶Ó8<‰g0ZðÂw–" á@õök©)í~Ï…SJ±Í1æ·±,¤¸È×ãSâ%ØRߣçÖÂ(Š´Ö2ê{f•Ksal±FDIîI‚ ó%¡ÀI®; Žácú9^¬4ƒùú­ØÖîîD®jQñÿS™ÁÓÉY("B°•&“c@@Þ(¶á ñ*ò|ø^µºí€s•ršÎ˜ÚF©ö”RwÃ0B°[›‘ã_Æ£Ð>“û*~¸ù¨ž+ßlDѪvãý޲ªõS/PJ­yˆx±Z­‹Ü ¢ Lf@L¼k·÷<_Çï®4Ê·¯¶³åŠ«˜©õ{T3 =ÊYÀùùyÿê5sårùS£££ìV&9±fæA§s¯¢¿°¹}ñ—À¦q7­iosóT9jiç»®T*ÔjµÎ f.///ŸÍvžíØ?\È{E:“¯ž¿µòßkóA朋e²“»Q ýÌ—õ±Z­æ_¸pánE/x̬ñÄôôôïNŸ>AZœã-¼ùò¡úïgÿÜÌœAXu»Y“Á1ejRëgÙÜfû0 yffFAð3«ôà.ŸÏŸxerrRmß¾=ÊŽôÛÍôñ¯Î…²9í&ÕµZÍŸ™™‘a¾AçàÎ^ˆ8žÏçÏîÛ·oãÞ½{¹T*ERJv÷™BˆLƒÅ=¤Ë.ØnôÕj5¿R©P¥RY ‚ ÿQ§'„Ïäóù#Ì|ÀßwiÔmÚ®Þ ­”ZCÄwZ­VßÃáÿ _XÌ[ø/IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_previous_1.png0000644000175000017500000000421311273045225026324 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î<IDATX…µ˜]l\GÇÏ™™{ïæfwýQ·±“ú#vJ>\§à¤i ´©,@T(nÔ€"!Šo ÁK„ªê P$!QÑù‘‚¡JQCåª8 qâ:uìÄö×ëxíÝû5sxè›Ù»ëšd¤Ñ\Íî½ó›ÿ9sfæ Y‘3ÆŽf2™A"êçœçc,þ ãÖü?¤‹Ù—þ>€RJI)KˆxvmmíÏJ©ß‘¬ú†ù""îrçTwww¾§§GnÞ¼9p„È9GÝrÎ!n‘1Œ1DDˆ+ÖSJRŠ”Ràû>ÌÍÍYãããìÂ… Kårù]¬sç¶mŸðZ[[˲PQS5dŒÕÀiqãok "RJ”’”R$¥„(ŠhnnÎæžç½P.—O&`ˆ¸+›ÍþõðáÃ+Žã€†²,‹ÕB c bÅs^¥VZ1S)¥ !ðKÏ<ýÀÛc—ÇÇÇËRJò}Nž<™)‹Ÿ%¢‹¹ã8§< ¥ À0J«¦áL_¡ (¥P)E–eñ/~á3-Y§b544˲ô+444$_zé¥Sˆøˆ`Œíîîη¶¶®i¨¸]Wµ,Q¬ŽŸ™j¡V̲,>xè‰û¼ÙŸñ"Àù !’‰´··‡}}}ÍcccGY&“ܶm›4UÑ`Ò¶íz•Ù¶ÍÇAÇq˜®¶m³\.'žzroskk«mÛ6³, ³Ù¬øüàû¼Ù‹¥Ë/""c¬jâœsìíí%×uõ·µµZ€5Ê™«Ó0%655‰½ŸØž‡h566Z¥RIZ–ÅŸøTciꇼ8õÓÄÌŒ1B ¡V¸££#$¢=‚sžs§lú“iÎ:¦M‡ŽÄ”]f¶v4¹…·>‡¹öc$Äf³Y±__þæåïóâÔɪxÆ9 ¦W®ã8ŠsžŒ±º>”R 8–VͲ,ܹ½3›³¬™ÓQú‹k?®ë²Ç÷ín(¾{‚-Oÿ2†!^</ ˆC 2Ƙ€ªšZ5Ê™¿sÎÑu]¾»·;ë-¼Â®~uGèéÙêÆž‡å™_×Dÿ8Øç\¯XRç"VAý/êiÕZZZ¬ímÞøŸÇ›s¨teöe,/žÒüp]¨ØÇ V,’R€ˆmŽèiõ˜éBÜÚ¹eCëý¶3ûÆ“è¯\ª´²ôÖº@j˜8Üc "‚>L1ÐqÖ»³k£/‰éמE•n °^AÄdá0Æ8f’››s=õòù<ßÛ¿#-üÊš{sðŽ b0s«ÚÎSjò`ÚÖÖêlßÖ¶ñúØ1\]øËÕ3ë-SšP)@BàÎÝî¦fÊ\}}†å«÷*1¡îOLi(`ŒA&“aŸ|lwC#'3sºÿ®B}X!¢LoÂÉÖ’ÍfùÀG›½Ù­ÂÛÏ!Iï³PÕCrdÖ&5àî%ˆ†¨[M°šZ©TÔ™7Ï7t|7Ú¼ïeBž¹gpæé6Óʤ.ŸX)A¿ßuðYnç½€"Š”RU¦\÷e¥]™ž¯\»•®ƒÿ ì¦CwLßÌ£7$`æM)¶3™6WJÁââûÁÄå¯=°çwªeç÷î X|!! ¥Ÿ“U©éë8¢î#¥”Ëe919·–ÙòuÙþéb"w§` ¥$)%˜€ìv0úš¥gMM_/¯©ía÷Óÿ"'¿ó#ƒ‘#à–)«.£f«ÿE‘®* C*\_ôf¯‡•Žg¨áÁgkÝмr[ßN1ó»IML©!L¸ÔL¨ÜÒÒR419¿ÚüðÏÕ¦G~Bˆ<4ßþµ?þ 4v}m=½@_xÓã$Š¥œÒÒš³  ÐU­®®ªw.L•Tþ™¨ãÀâNKl&€÷Þ»RnÚñ#Õ¸õùÿ_1õA¹-T†U5ù¾¯|ßW'fV K •®ƒçiCÓ(—Ëêï£ç—>öÙØ}<-X†a2NÌ¡„”²äû~†sNñIRo:t(¥’CÞ)ˆ¦gf+ï/åÃï5Ñ‹¦U*•¢×N.|êD3¢H®oRÊ*¨(ŠÈó}zÅó¼ƒDt¦ ÌqœïÛ¶ýÚÔÔ”_*•B˲PÑU5dŒuÁiq“wk "RJ”’”R$¥„8Ž©R©X³³³Ü÷ý7<Ï;œ‚!âx>ŸÿÀuÇq@CY–Åz !1‰bÈ9ïP+«˜©”RŠ„8óý_œÿøÔj¹\ö¤”>|8W«ÕöшÜqœ£SSS¾†Ò@`˜ ¥UÓpæX¡[”R¨”"˲ø·_œÞ8'k``@X–¥¡™™yäÈ‘£ˆ¸S0ÆŽŽK¥RKC%횪%`©b=Æ™©jÅ,Ëâ/<ÿì†|ô>‡&η "íÈððp4999xâĉC,—ËMoß¾]šªh0 iÛv¯ÊlÛfŽã ã8LWÛ¶Y¡P{§ž,•J¶mÛ̲,Ìçóâ[ßÜ»!¬ñ;`ŒutœsŽäºî´ ¢]CCC¡VÇd`—ræì4¬Äõë׋'¿úhÑÂ:[·nÕh4¤eYü_r]_û]ÎÐóc(„@"B­ðÈÈHDDOÎyÁqÏO¦=¬Í†ŽÔÊmÛ†s;*¹âÆ›(ÝgHˆaÌçóbÏSsíw86ÞëˆgœsÐ`zæ:Ž£8çÁë9†2j¡DzªY–…~y,¿aÀ·øõWdÀ}\×eOïÞ5à´~ðq¼+Ð&““‰I(AÆÐ@3³±K9ówÎ9º®ËûÊÃù\üc×~…* Öcc£.,¿Øø  * vÀ9×3¤”Ä9GDˆPÿ‹zZµ7Zãlíµ·ZómýÁ?è}Ü*Q ÅR()%ˆÄëlDϪÇÌñ'„Àч†û¶ ~ýÇÑÕn5‚óke­”RRnˆ1†AwRÌt‡MNlï/:K‚öÕ¾+ÀZÓ‰ÃKáRÅ4¹¹8÷R¯X,òÇw>\°Ûs —Þ¹g L/cd´‚™S>˜‚ 9ãŒô‹¿@hŸúÜP8³Þ¶Ò„Ê¢'Æw¸[6årüÚ«ñTj¡¾ŸZ™i(`ŒA.—cOïÞ5P—¿v¢ûu§BD)˜^„Ó¥%ŸÏó}Ïî´›¿e¸zìÿÀBé–Y[jÀ=h˜t¯–­&XWm·ÛêO~R«‹ý±ÜøC´œ¹»MÁ´2™ƒ„aHŸœøGý³›C,ýŒ@|áA@‘EJ©+×|X)E.^iŸ¿ÜjË¡Ÿôí¼Ÿ`ú `n½!3OJ‰Ïdz®”‚ååå°|ör+\ÿ²¢uî Xr ! ¥¯‰è˜¦ï1õ=RJçy²|v±ÕäSRmz•€õ}^0R’”L@v7}ÌÒ½ ÃÎ_¬xKõÁHmþ9õ¥{#" F& Àm+;£f«ÿDZ®*Š"ºZ]ò/]¹Ù–¥× úwwÔÙä~ínŠ™ïMkj¥†0á2=¡^p+++qù쿚~á%¥¿Gp{dõï!Øô# ÂÔš`úÀ›ýNªXfðAVZ³7QQ†ºªf³©þ~ê\c%ÜËÒë¼ØpáÂE/èÿ®¢Â¾^FÞY1u«Ü*Тކ¡  PA¨Óg.4/VT;Þô&3 žç©ÿò·Õvß© Ï­ieEéw%¤” rœsJv’zí¤l|Ó¡C)•nêôJAD°¸x¥}ãÆj´ë±W ÖY/«F£¿wüÏ+ûö¾8èOoDRʨ8ŽÉ÷}RÖ"ž¬T*–V(k]F1E‘Ò6jKƒ HÛ¥¥¥ðÌ×–WU¸ºº‡aHÍfS¾ûûãËM{¬ /¤ASJ Æ{)ŽcºzõªˆŸò8Ž]˲ž‹Íã}šP026¦bF›vF ԥŷëõº4”PgÏ]ðÆÆ§ûlËf€ /Uû¼Ë—/ûfÇOžiõàO­4ï‡a¨²÷£(RF#þåÛGª×—ý V«ÅaREÍÍÍ9¾ï$"™&î\×ýA.—{mffFGk¥z$鲪RÑ͵0W=Æ®ªV«öÜÜœÁ¾ïßNÜ邈ã®ëœœœ˜˜ ‘‘‘Èq2Ï™dWæ0»‚˜“Êó}ªÕª½°°Àn&Ju§: 8Î9?äºî4=¡“Ã÷²£5¶Ë÷’äp?m·Û=“ÃÿD‰4!R  IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/skins/ersplus/transport_stop_1.png0000644000175000017500000000470011273045225025436 0ustar julianjulian‰PNG  IHDR&&¨=é®sBIT|dˆ pHYshhùG,ktEXtSoftwarewww.inkscape.org›î< =IDATX…˜_lÅÇ¿¿™ÝÛ½;ßÙ±;v)ÔiƒMJ•T(4 BÀB’ªMúï¡UÔ¾U­¨hyä¥ÏHE},T*q+µÔ Šœ $Z'²6Û‰8±s—­ïnïvçׇÝÙÛ;¤®=öÜìíÌg¿¿?ó‡˜æEDRñt¡PxŒ™÷X–U&"ADÈ^f[¶Ÿl›®33«èòœi4o(¥þÄÌa[ßæÃD4™Ïçg¦¦¦¶MNNòØØXÓqH)I!„Ô Œ£ Ì ¥+¥†!Çar†!û¾ÕÕÕÜ‚üøã«Fã»Ì<ßV(~æ8Îs‡ ÆÆÆZRJ²,‹¤”B†#"BÀ²,*—ËV¹\–===²T*If†çyaµZ ªÕjP©Tß÷Ù€ã :ÊÚÚZîäÉ“ŽïûÏû¾ÿbFD“}}}';Vw1K ì;§¦Š_¸ýöb±Tõ­-¾yýººqå*n¬­¶Œ oxåÁAQèé¡ÿÞ¼~´°°u惼õõõVªÕj© Ø÷}?~¼äyÞ#ÌŸ?wôèÑòøøx˲,ÒEJI¹\NìÚµ«0ù¥]=Ûí ³§Ôû¯ÿ]]¹x‘ƒV««SEÒÎá–Ûow?ù-Úýà^yíêzóìù¹›sss[FCÅ` àêêjîĉµF£q !¾·gÏžßNOO7lÛ&¬\.Ë'|ˆ‚P¾÷׿©soýS5ëuÀð-]ãv@ ùÇuq×¾‡å×JŠà•™™«•J¥¥áâ¢fgg‹óóóÏÊb±øÌÞ½{?ßß߯,Ë" 744”;xàÀðòÙsôò¯^þð#ÃùbëZ@„$:( ‘0pùÃø_¯¿®Æwî´š~¬giy¹Q¯×C3j-ËKKK9iÛöóû÷ï'Çqȶm²m›vìØ‘{êÀ¡¿úN¼øû@¤£R_f=B‰ë±ª1¨¦+Æü;ï¨|¡ žxúhyåÒ¥†çy:UëºáÙ³g‡…eYå\.)%´£?øÀïÎü…ß~ù¡©„8} s?iBhhó;D‚@Bà­?¼¾óÊŒzüÑGmÛÚRù|Rʲ "GI)éÖ[ouóŽ+OÏü9ìè41a n–¬™{DZPA8u|&,¸ykbb"oú¶QOB$Itdd$÷ÉùóÌaØ•FDB0T2•2€3j PHDV Ÿœ?ÏcccŽ™ @Ðo)%õ‹róÒe>ÒiŽèÍ e"H}/†Ln›—.s¹T’¦bD+K¦„(é&SN‡rB€@Hc.Mem03‹8°1 VJE_‚I×™‰ˆt"‡VÌ2U1àÚÔÚ¡´)Œ´>à &13CEgÜ`@׉ãA „ ˲H)¥T¤XÆLš(£VÚ)ÕnZ z2? €” ¥@eÐÛËúRÇ¥u‹”1m¬*0q‡Z EÄZÝx~&ff2Àb_gÓ”0F;™õØ|mþµ0(ÒËÒÏ *z.UÍÈ.qþn‹<¯³nth*ÄL `(¢8 b…ôsZµ:VK¹€¹²ìÖÙlNáífIŠhŽtôDm˜/wd¬õÒ<¦Wº$H¬ü¨é[ÑšüM¢©+dŸ¡—Ñ`/‡5QN¢¬¾ÏŒè c9ÝMøÎER dNöfð ˆók@S-Ž ˜ÓºM¢”R©òˆ?Cá®H@äüñÆ’ŽµR¥ef1ëPgb¦T)@(€)Š~pÂ͉º©öèRÏ ÁÒ&TJq†É·»(ÇŠ™„Ѧ¢i‡ T”ígs´ù,s¦?6ÇÈŒ£ë„a¨Óû/Îmªi3š@Šˆµór·@?ÇH–ÙÝò“ù"m¦Œ·WÄJ™ëujë'"Š€„ˆàb£ÄÛ­v°0 ”²-˜²{R‘)ƒ @œÜ˜‘ú¶!3 @YDõ.jQ6šµR`pl˜:±ª€H3wʵz=, ôkÓEbDÎH)"Á$"}bŸcá³û¦LŽlS…™Q@Ã÷•†RJ1eþ¶ò•+Wšã““Ô­³´®ÀJ1ÇÇ*  è+× º÷“¨5~Ç´±±ÑÒÇ :— ¥”Òç Aðüü|Í-—xòþo-¿ÎSñçd€Dþ¶J)Ncªr×}÷ ·\ÂÅ‹*þ¯„RÊó}Z1ß÷ÕÛ³³ßyöWÖï¹[°J“¨¡L¢a´ÌÂÉwÚ’/33&¾öUñíg~)ß?s¦Òjµ”>Ûh6›‚À“¶mß;44t[©T tÖ½víZ«R­¶ÿäÇ%ïÆ ^[X`$ ›4eQŸ˜¾[ Hƒ<ªeÿ#âà/~.O>}cqq±nZìÓO?Í]¸pá]†aAJùÈøøxSBDØØØh­\ºÔ8øƒï—vŒÒæê*¶*•tÐdeÈíùÜ0Yö¶nœþÑ彇мùæÆòò²Ÿ=d9}ú´µ´´ô"®ëž›žž.ŒŽŽ6õæSo@s÷ßw_ï““ÅkËËüÞ«¯ñ…ÙSaàûzN–5‰|F\ÚŽƒ;¿ù€¸ç©'Åàø8]\\¬}07çU«Õ µ¼¼l¿ôÒK•Z­vWr U*•Þ99i8ŽsÑqœ`ˆ8ØÑÑ1yîܹ²aPòÁPñx\²ú_xÁ2#&76HærDÙ,²•UPÝ ‚ÎNñ8rËÂr±¨þ•Noܺs§¸ººê6C¹®«<Ï#ÇqàòåËÛ¶Ñ4…Bÿ8sæL´··×B oœsÔu „‡Úâ]]šúòK ÉÏ2×Ý’W›¤i€}}£?#þò˰¶²R½•JS©ÔF¥RQu°àÒÒ’~õêÕR¥RæŒ±ß ¿yäÈ‘ª¦ikooç§OœèÞ‹[¡«×…üãûHû;B> Ôÿ†¨ý'Ÿøú6ªk×Ñr=ñ£W_ |ñEëÁìlÙu]ÈS´,˳m;’ÍfW¸eY¿ùa,SBôቄþ«±±îð7Óœ~ÿ¤tÀóžómò< ¹9€ÉO1´w/þùñ¶/,TÊå²xòÖ !X&“ѹ¦i?ކa ¦i¨iîÙ³G?5v¢[\»ÎÔŸþŒ°M)ø¿EtëkÔB!vøÔ©¶ÌÃÅŠmÛ~©@Ó4åÝ»w»™"ªë:pÎÁOôc##qvå ª?zv@MR~ü“OØØotjšÆüH…B!àœG"²ú[‡œsìëë3#º.äÇWž”/ùñh7M­¿¿?ÌmÆjc"ÚÓÓ£ÃýHùô'o2 0}’ɤ¬ €1†>\IJ8.-mýþ<'áò2vD£"è1DQk|nñÙ&ûÓT+ð~~ƒï1€55àvZŒ1B R ”R5–º—Ö mç1ø[çƒù¹Þk•§‚`ÊP %ÀöM^ ÀüžX°³l%[ ×{’c~×éÛŽSÕËT‚`To‡wª n3X½~Ø*°úñI(ýÁA);Zõ¿EˆXK~ßcRÊ–a5z @JIÁp¶ Ì¡ôg¿Vp5Ϥ‚ˆÀó<`ŒcŒ”R-! D àI(}Û(—%Åb;G±•GùP¾cmš=zTUû÷íÐýËå\à×R¦”Rþ>Áó<šžž.ymmŠ=úÜ¡ØÑ£ #š››«øPõ£bJ)Ûqð=æ8Žºþùç9|÷±ÃÃÏêð0à»è«Û·×]×U~*U«Uð<Ïæš¦ý4‘HìD"ž_u×ÖÖÜ|¡à¼ý¶…ë¤ùùg õÚk€ïœ§Ï¦¦§Óér0bóóóú½{÷¾âRÊ0çüXoooµ~""är97óðaåà¯ÏZ¼;°²ŠP,~/ L&'õË_Ð_oÞÌ-,,8ÍK–©©)‘Éd>àDôM±Xüí®]»L˲d°é/‹òþƒ¥ð,1~Z§Ÿü˜'‘–—¿ûx§ëÀ^yàü9±·`ÖóJŸ~ñÅãl6»e󳸸¨Ý¸qãqµZ½ÐXCE"‘›ããã¶a i î14MCÓ4Ù¡C‡¬#Fc]]šÊfI­­![Y¶º†”ÍÖ¼ÒÙ *ÑÔÝMØÕ¬³ ù¼wofæ?étº\­V7íÊü£ã8péÒ%#ŸÏÑtcqgÆyÃ0ÞuvïÞ]­±à¼ç¤±XLÄãqÑÑÑ¡µ··‹Ëí–%Š¥’W,—=Û¶¥mÛr}}ݳm[…M›FßS¬\._,•Jïl³ê4Ms¢¿¿¿}ß¾}²§§§jš&4ƒ,؇™úxJõæX)åï_ÁûõT*©T*_*•¶_uà8cì¬iš¯ÀKœó(«7âÁ¡%Ð?}·\ ¨^;mD¼]*•®I)·,‡ÿ µn  kìIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/chord_dialog.png0000644000175000017500000015375011273045225025043 0ustar julianjulian‰PNG  IHDRafÕ~ˆ3 pHYs  šœ IDATxœìÝwX×þðw–"M:6b‰Á^bC1ÆK41 Ø¢¦˜jTÔD“¨(دýê½7¹M~Q°%!jŒ"*¢‰bìF )ÒwpYÙ]\fwáýøìãîÌœs¾3ìÂ|÷œ9#¬Zµ ÑÑÑZmU«Vu»€îÝ»cÆ ;v,Μ9ƒœœœ9scǎņ н{w$$$è¬M2, …7®žÃõ+çpçÖ5&bDD¤&a¤sÿ›$Ìàu-fCóâ‹/bôèÑU&DÑÑÑ=z4^|ñE£n7!!}ûöÅäÉ“ƒ1cÆÀÃÃæææðððÀ˜1cƒÉ“'£oß¾LÄê …BWⓉçÚtBÖÃ4ܽu½Î$bÁÁÁÐÍT̺æïïÅ‹ë; 2baaapssƒ ú…ê)É’°ƒ¢cÇŽ°°°@‹-°mÛ6©š6H‚ à믿®´ü—_~©¿ôÝ{T“^%}ÇV“˜ ‹ŸŸöìÙ£1!*O„öìÙ???£mW¡P`ܸqøüóÏñÑGiÜö£>Â矎qãÆÕ™“s*sãÒY<ÎËAï¯Á³‰7ÚwñEΣ,$Þ¾)i‚ @˜™™ÁÓÓøë¯¿TnSñagg§¶Î‡bóæÍX·nÊ:TQ(øì³ÏàààGGGÌ›7Oé=¯iý¡C‡àææ777üúë¯b™Ã‡£eË–(**Rjkíڵظq#²²tw2\µñŸ3göíÛ'¾uyîUÕg…( ;yò$Þ~ûm¬X±999øõ×_µ>T—}õÕW(}j–­•+Wê)Òw÷»ÂôFSBT ˜¾ÚÝ·o¬­­ñá‡jµý‡~kkkìÛ·O'í“ahäæ…î~ÃPø8òÒÈd2<ß¾ \<›ÂÜÂJÒX  ñçŸÂ××ýû÷ÇÙ³g•ÖW|ìÙ³S§NU[ß·ß~‹7Þxîîî•êP端¾Â±cÇpùòe\ºt GÅ–-[´Z?}útlÙ²_}õ>ùä@II fΜ‰Õ«WÃÜÜ\©-OOO¼öÚkø¿ÿû¿ê(2Zº~'%%¡gÏžJåu+¿t£ªH’„­X±Ë—/ÇàÁƒannŽçž{ß|óM4???ìܹS|}àÀ<ÿüózŒH7ôÝwT“>%}ÇV“˜ •ª„¨60}´¦uVîÃ?DXX˜Îb ýstvCa~Š'“¯˜ÊLaan¢Â|Éã‘ÉdðððÀ´iÓ°xñb„„„¨ÝvåÊ•˜1c†ÚõÀÈ‘#«ÕþöíÛ±dÉxxxÀÃÃK–,Qõ¢i}||<ˆÁƒ‹Cwÿõ¯ÁÓÓ#FŒPÙÞ˜1cðóÏ?W+F2nºz ‚…B™L&öVUìµÊÏÏǤI“`cc777¬\¹’½Z¤s’$a111:t¨M•>ú+V¬¿-Y´h¦OŸ®ç¨tAß© Ó0}«˜-^¼¸Ö0©Û‰‰AïÞ½«U¦wïÞˆ‰‰Ñid¨ôÿÙ}ã7Ô¾ß"""àããOOOµå/\¸€Î;W«ÍË—/£k×®âë.]ºàòåËZ­oÞ¼9~ûí7DEEÁÛÛ ÅÚµkÕ¶×¥K—JCÒ¨þx–÷xùy—º«ùóç#;;·o߯ŋqâÄ ÝNô?’Ü',++ ŽŽŽR4eTš7ooooìÛ·æææprrª=apþQ}ƳóóóôiÓ°páB,Z´¨Ö0)Û}øð!œœœªUÆÉÉ >Ôy,$­â¢}‡ gggµ×K=ÝC¥Jfffµÿnçææ¢Aƒâk[[[ääähµ~ݺu˜ª[žõ=®‰««+îܹoooÀíÛ·Ÿ©>"U$IÂæÎ‹1cÆÀÍÍ ~~~¸wï–,Y"~»Uß]¹rEß!è”1¦3Ƴ¡R5FÅkµj+“²ÝÀÀ@lÚ´©ZIØæÍ›«œÎž ß¼Åëþw‰gb“?¹¶D¡€ (äO–‡}³^’Øär9RRR°wï^ãÈ‘#Jë###!‚V_ 6 {öì©Vöæ›oâË/¿Äž={_~ù%Þzë-­×ÀO?ý„û÷ïãý÷ßðäZ1â q¹={ö`øðáZÇGÆO—ïqM1kÖ,ñVBAAAJëË'ö z’|=׫W/|ýõט3glmmñÊ+¯Hv}é¾§uçõz£i6Bmîçe,íŽ5 ?ÆæÍ›µÚ~óæÍxüø1F¥“öI¿Š‹ PT˜Â‚<äç"ÿqòóáqn6òr²÷(¹Ù‘“•ŽG™©’Ä$ÌÍÍÑ¥K?~QQQèÔ©“Ò6!!!øôÓOµªoÒ¤Iøá‡œœ¬ÔFř䞞-î½÷Þƒ¯¯/|||àãヾ}ûâí·ßÖz}QQfÏžµk×ÂÔ´ì;âòkÅ&OžŒõëŸ$³ÉÉÉøá‡0aÂ-;]¿Ç5 Aƒ ФIøøø G033«V¬š>+D€D=a0tèPÎX¦oPŒÿÛcŒßc6,ÚL_=SúhWìØ±}ûö…B¡ÐØÃµiÓ&,[¶ ÇŽãbªÚþͨΗŽŽŽøè£0sæL„‡‡kÕŽ X¹r¥Úû]VµÞÜÜ7nÜPZVñZ±ŠfΜ‰?þ˜×„ÕµñºÎН­­­ñÝwßá»ï¾\»v ÿýïµŽÇøÏãH ’%aTãïcŒÙМ>}Z«§Ý»wcçΘ>}º8 b=ðÉ'Ÿ`̘1z™˜ˆˆj®Y³fhÕª 0bÄ,^¼Xß!QÃ$ŒtÏócŒ™ ‚L&C@@ô éÈôéÓ1}út}‡Au¿ž%S迺³¾-_¾\¼à˜> õ1oÞ<}Tˆˆˆ*aOéž1^`eŒ1ëÙܹs1wî\}‡ADDDdt˜„‘îeÞÖwª5Õ°Îc&""""£Ä$L}>Ù¢ïtnZGõëŽox[ýJ=ÚµuµÚuÆ3'&a°ðl§ïjÁq}@D¤W¿Ü¥vÝ‹¾ƒ$Œ„ˆˆŒ “0)ðz#"¢:gÄ8õ7é~p÷†ÚuDDDLÂ$`è³ÜQõåd¥A.—C./…B.‡\.‡B.‡BQªïЈˆÈÀ1 “s0"¢:‡Ã‰ˆ¨¦˜„I‚YQ]ÃáˆDDTSLÂ$ÀKˆˆêGÔŽ PhøCXÕzCŒ«W¯"<<\ò¶ýýýѶm[,X°@ò¶©2Cx¿Jƒ!ìk]&“ª¡ƒ¢cÇŽ°°°@‹-°mÛ6©š6ŠJ¨Ï{VzìŸõ¢Êm óQ=™™™ð÷÷‡ œ\í:ô!..­ZµPöËèéUmÈ!*|<Ë㥗^Ò÷[¿Ü…èC{püð8ùNFýŒØ£p*ú^âiÕª•øûêYœ?ƒFƒ àé鉭[·ê :íTü×d}E­ZµÂ¹sçT–733ƒ§§'ð×_i¬çáÇؼy3Ö­['.»~ý: ØØØ`РA¸~ýºR9uÇñСCpssƒ››~ýõWqûÇ£eË–(**Rªgíڵظq#²²²ªÜ纪üç]ñç®é=¢OÚ´¯j¨þ‘$ ;yò$Þ~ûm¬X±999øõ×_­rÛ^xéééˆŠŠ‚¿¿¿áÕ>…¢Ò£ÿ’¥GðÞkØîÊm òQM|𬭭qïÞ=üý÷ßHHHÀ7ß|S [·öïßáÇ‹¯ …ÒƒªvèСJÇMŠPùçÅvëN»GÕËû¹¢ã>RûÚÉ“'abbÄÆÆÖ¸žëׯcĈxï½÷ššŠØØXœ8qB‡‘jVñ}U“õ 6 û÷ïWYGaa!þüóOøúú¢ÿþ8{ö¬Úz¾ýö[¼ñÆpww— W¯^HJJBRRºwïŽÀÀ@q½¦ã8}útlÙ²_}õ>ùä@II fΜ‰Õ«WÃÜÜ\©}OOO¼öÚkø¿ÿû?­ö›ôKÛ÷'‘$IØŠ+°|ùr <æææxî¹çTž€ÇÇÇÃÁÁ5ªtòkÌ´éW ìé…Ý$뽫vúÁ€`íÚµptt„££#Ö­['é·«5uàÀ½ùíQÝ—“•†ìŒd¦'##5éî"-ù6R“â%eûöí˜4iÞ|óMlß¾]i  …ƒƒÜÝÝeË–ÁÉÉ îîŒ· ÆÂ… 1jÔ(X[[£I“&J¿«0bÄØÚÚÂÒÒC† Ajjª¸¾°°S¦L ÜÜܰjÕ*¥XªZ¯KÇÇT®“ÉdðððÀ´iÓ°xñb„„„¨­çÀ9r¤Ò²k×®aÞ¼y°··‡½½=¾øâ \»vM\¯é8ÆÇÇcàÀûLi›£G"&&™™™xýõ×1uêTq6ï×Ó§O#..r¹\iùÊ•+„ââb””” ((Hük³?ÁÁÁ¸|ù2Î;‡[·n!11Q븿üòK$''ãÆ¸~ý:îÞ½‹ùóçkŒ[ÊÏ&•‘$ ËÊÊ‚£££ÚõP(˜8q""""ðèÑ#4oÞ¼Zà ZùÌÄÞ›¤ÿ¼ª»Â† ‚Ù³g#33™™™˜={6rss«_‘„<ˆÀÌÌ @Ù/ˇ"??»wïÆ‘#G0{öl=GùìêÌ猨žú駟йsgxyyÁËË :uBDD„Ò6ÁÁÁ°±±Á„ ——‡ ˆ¯¯^½*n—žžŽ„„\ºt ÷î݃µµ5>øàqýåË—Ñ¿XYYÁÎÎK—.ÅáÇÅõ;vìÀºuëàââWWW¬_¿^)ŽªÖë’™™ €ƒjÜÎÙÙYãõV™™™•ÎaÊGsØÛÛÃÁÁÛ¶mSÚMÇqݺu˜M°#æ®Æm òQM5¾}ûðøñc>^é…Bï¿ÿÓ¦MƒB¡@Ÿ>}påÊ( ¥Ù†Œ•º}›;@àâ½Gµ2bЀF#âwÞAbb"òóóñã?bÑ¢E}Ï“cÇŽ¡uëÖJ¿´ÆŽ‹K—.¡¤¤ñññ˜2e F­Ç(‰¤'—ˆ‘#GŠß¤zxx`äÈ‘ «Ö =»ï¿ÿãǯÔðæ›obÇŽÕ®oÊ”)JCǃ‚‚”&ÈÏχ¥¥%,--qëÖ-¥ëP€²ß“AAAHKKCjj*f̘Q­õºæââ‚V­Z)%H@Ùûøþýûøç?ÿ‰àààJ×ËT4lØ0ìÙ³GiÙ /¼€eË–!++ YYYXºt)Ú¶m+®¯ê8eÃHïß¿÷ß@åkÅ*Ú³gO™¬LJï¿ÿ>¦NŠøøx”””àâÅ‹Õ:¯|–÷ëÑ£GñàÁL™2~ø!âââpñâE­ËOš4 Ó¦MCbb"²²²0sæL­Ëˆ×n¦¦¦búôéUî·ÔŸM’°'ì믿Ɯ9s`kk‹W^y~~~J۔φ˜™™‰´´4´iÓFŠÐ¤¡¦7iRŸ&ØsOÿ½Zô„õêÕ Ý»wG£F°yófüøãhݺu-lÝP5qÔ¨Q?~<¬¬¬àçç‡Ö­[ãŸÿü§ž"$’^BBºwcÇ"""÷ïßP6l&""cÇŽE÷îÝküí-UßöíÛ1yòäJËUÍ’¨·Þz ^^^hÕª¼¼¼——‡M›6‰ë·lÙ‚   ØØØà¥—^BïÞ½•ʇ„„ÀÁÁM›6E»víЯ_¿j­W5¤»:ëUyzªzA`nnŽ.]ºàøñ㈊ŠB§NÔ–Ÿ4i~øá$''‹Ë¾ÿþ{;v ððð@LL ¾ÿþ{q}UDZ¨¨³gÏÆÚµkajj  òµbå’““ñÃ?`„ Uî+)›;w.|}}ñòË/ÃÚÚãÆÃ믿®uùªÞ¯š#44&&&055źuë0gέË/\¸mÚ´A‡àíí&Mšh]vÉ’%puuE‹-ТE xxx 44Tc™gÙWªáaʽjŸQGîÇ€á*—û¿5K'›][W«=&›»è!¢Úõ‘×Y£{hú=s«V­®ñ³4Å\ÝåUý\A¨•¡“µU/Û•¶Ý„„ôìÙ³Ê™æ€²Þ‡ØØØZ½¦@ŠãüôçoãêP|ºE…ùËK¡—B.—ÿï¹r¹ ¹ E)ä¥eËåòRüq'FOx¿Rýµñ9¦ÊâââXéfÊÕ±hÑ"\¹rááá:ŒL;ðññ1èÑ#Rþ­"Ò§ê¾×51ÕUP¤/ 2>ÏòÇš¨®‘ËåÐ*ʦCÀéÓ§Å{ÐéKçΟùwúÂ… uMõé#ñ#¢ÚÇ¿Ž’Ð÷\†pUªš ï¡úe×®]8sæLµÊœ9s»víª¥ˆˆˆˆŒ“0)è;_bFT5Å/QMg©­³ÛÕG”@Mî«EDd(NŸ>-i9C¶lÁ È‚L€L&ƒL(û_È*,Äu‡dQ%L¤Àž"2b’–3TmZ·D›vajf­ËýõgL-FEDDƈI˜2oë;ÝkªïˆH*ŽŽŽxðàAÊQe:OÂú|²E×U…ind|ÃÛÒ"‘][Wë;"’H÷îÝñÓO?Õ¨U¦ó$̳®«4ÇõQ­ ¬QX Ñ?Ý_-¬PÔÏQåïï®]»V«L×®]áïï_K7'aŠzúˆ¨®’Éd‡‹‹‹VÛ»¸¸ <<œ³©Q =aõôADT‡y{{#66¶Ê±®]»"66ÞÞÞEFDDd|jákJ}gC̈ˆjƒ··7NŸ>;wbĈpww¸»»cĈعs'NŸ>ÍŒˆˆ¨ :Ÿ˜ƒ—GÕ]2™ ⤂ 99YÏQi&uä$Uª}©KÇÌÕÂ}Â*ÿ°¢>ï(•+õ¸ï=ÂŽ“I¸™’§ûæë¡ŠA*­oذ!²³³¥KIŸT} «Z¯/qqq Äõë×U[CŠ•ˆˆ¨.R— 0IÐûg§û$Lͤÿ’àØÀ}ŸwÂêñ>˜³ã2®ßÏÕyõMÅÁÓˆ½{÷âÔ©SR‡T‰¦$Q›õú²ÿ~ >\|Í_8DDDDô¬javDÕWK)È@zNöýyßDßÅ™—Ô IDATD߯z¿’K_W„ ‚€ÐÐP888ÀÝÝX¶lœœœàîîŽÈÈHqÛ„„Œ1¶¶¶°´´Ä!CššªT—:+W®ÄŒ3j!À”’0"""2<‚ àßÿþ7š5kssstêÔ ýõ—ÊmÏž= ///¬_¿^«²x÷Ýwagg;;;L:€–-[âï¿ÿ$%%A&“‰C´¯]»†–-[V;>(..FPPœáàà€Õ«W+­¯i¼å±¬]»7g±-,,Ä”)S`cc777¬ZµJã±.ÿ¿â9hUíªªGÛsáÒÒRÌ›7...°¶¶F`` rrrÔÖm $š˜£òòc×ÒÑÖËVÍöÆø¨¾ÔÔT$&&"44ãÆCJJ îÞ½‹ÐÐP‰Û½ú꫘1cRSS‘’’‚Ö­[+­W'"">>>ðôô¬Q|õ]jj*®_¿Ž>}úˆËœœœ`nnŽÖ­[cÙ²e(--Õc„DDDTîèÑ£ˆ‰‰Aff&^ýuL:µÒ6û÷ïÇ!C°iÓ&LŸ>]«²_~ù%’““qãÆ \¿~wïÞÅüùóC† ÁÑ£G”wYXX`ÿþý€ßÿC‡­V|傃ƒqùòeœ;w·nÝBbb¢Öûª)Þr§OŸF\\är9`þüùHKKí[·pþüyDEE©­|TB¡P!¤M»OÓö\xéÒ¥8{ö,âââ’’+++|öÙgë6tÒLQ¯byV^1Xšê?wÒ_†àà`ØØØ`„ ÈËË Ä×W¯^·»|ù2ú÷ï+++ØÙÙaéÒ¥8|øp•õ/Y²sæÌ©Yp„ƒbÀ€033PöËæáÇÈÏÏÇîÝ»qäÈÌž=[ÏQlÞ¼žžž°±±ÁìÙ³qîÜ9¥õ›6mÂ{g`äÈ‘Z—ݹs'Ö­[¸ººbÆ عs'€²$,::ðóÏ?ã“O>ÁÏ?ÿ  ,Q2dˆÖñUôí·ßbãÆðòò‚½½=Ö®]«“xË­Y³ÎÎÎâë;v(•)ï%¬mÚ}š¶çÂ[¶l‡­­-–/_Ž}ûöU;FC"ÉÍšU-·³6ENA‰Êíñ_M8::,,,*½.))·;yò$úôéƒ @ØØØ ==]cÝ¿üò \]]ѦM›ÅFeß– 6¬Òr´oß;vìÀ¶mÛÄååÝò†v]‘1“ÉdbM¹ÒÒÒJ7„/?kkk¥s) ,ñ˜4iºuëV© MeSRR”n½áíí””@¿~ýðÇ 77§N¼yópòäI<~üüñúõë§u|Ý¿_ãí>jo9¥×<@óæÍ•ÊT—6í>MÛsᤤ$øøøÀÔÔ&&&pssSº4ÇÕBO˜¢òCÅò¾Ï;áâÝlÕÛã£ùûûãã?FRRär9²³³«œ "$$Äè»iõ©¸¸¿ýö›Ò0‚§=ýG¡¼[ž“w鎻»;nܸ¡´ìÆ•‰ªDGGc÷îݯwRÅÕÕ·nÝ_'$$ÀÅÅ`ee…–-[bÓ¦MèÖ­ìííÑ¥KlܸmÚ´¥¥eµÚ*çî„„•Õ¯:nnnJe*>¯ÍvµåîîŽ;wî ¤¤¥¥¥P(•sc#éÄå³#¾ÞÍSüšbûñ»*·7ÆGmÊÏχ¥¥%,--qëÖ-cˆ 22‚  wïÞµYÝuìØ1´nÝZé—ÇØ±cqéÒ%””” >>S¦LÁèÑ£õ¥ñ¨ØK(ÕƒíÖýv‰¨~?~<>þøcܼy%%%¸yó&¦M›†‰'V«///DGGcË–-X¶l™ÖåÄkóSSS1}útñ^‰@ÙÄeË–aРA€AƒaÙ²eJC«kÒ¤I˜6m‘••…™3gê,^UÆŽ‹   ¤¥¥!55µÊIÝìííÅ Iž¥]m½ÿþû˜:u*âããQRR‚‹/ê¬n}‘¬',z~_üöE|ýng´ob‡ßžÇû9úïÁ2‚ž°-[¶ ((666x饗ªL®BBBðé§ŸÖjLեꄭ:륦j(â¨Q£0~üxXYYÁÏÏ­[·Æ?ÿùO=Eh\*öJõ`»u¿]"ªBBBйsgôë×–––èׯºvíŠE‹U».=zß}÷BBB´*³dɸºº¢E‹hÑ¢<<<*®2d²³³1pà@ÀÀ‘ýLIØÂ… ѦMtèÐÞÞÞhÒ¤‰Öe«ŠW•888 iÓ¦h×®Ò0JUfÏž®]»*¯Õ¤]mÍ;¾¾¾xùå—ammqãÆáõ×_×IÝú"ÉÍšýÕ}3Fîé“M¯_{í5¼öÚkJë§M›Ë啯D—_ jHª:i2´“ª <<\iÙ˜1c0fÌ=EDDDT?™››cÅŠX±b…ÚmTGT\Vñ¹››®\¹¢uY+++lÙ²[¶lQÙvË–-•¶ïСC•çyê–•333úuë°nÝ:­ÊU'^Uå---±}ûvlß¾]\¦ir·/¾ø_|ñ…Ò²ªÚ­*M¯e2æÍ›‡yóæiU·1Ðyf`çÒuÞ¹sçàææ¦ï0êœëׯë;""=«~/ÕE õQ$IOÕžÞ½{cùòåúƒˆˆŒ.RGÕ{ƒ‰ѳÒ}ÆLRšîDNDD¤/ª©Šï&dD5¡ûáˆÌˆˆˆ 0Ò•Eè;"£#ÍìˆõáAD$!¹\ް°0Œ9R¼Wއ‡Fމ°°0£¿ÊÓêÛþQݦûሙ·u^¥Qhªïˆ¨¾HHH@@@Μ9£´üþýûˆˆˆ@DDV¯^ððpx{{ë)JÝ©oûKDDuŸÎ“°ãÞÖu•Fa×ÖÕúˆê„„ôìÙ©©©·;sæ zöì‰ØØX£NLêÛþºœ¤GXãµFå:3s¸¶sÁ‹¿ˆvãÛK™ñX$‹Ï*‚Õn'¥´Ë©ØÜv3ÀÖ³!‚ƒôQݧûáˆDDT+är9ªLHÊ¥¦¦" Àh‡êÕ·ý5‰§“Ô®+Î+Bâ©Dì›°q_Ÿ•0*zV®^Ý=õ QýÁ$ŒˆÈHìÚµ«Ò¼ªœ9s»víª¥ˆjW}Û_ct:Q|Þû3_,Tc¡"ór>GŸÏûˆëN®ŽÕGxTC®žÝ½ô QýÁ$ŒˆÈH„……IZNßêÛþƒŠ=&ž/>é11o`Ž>_ô_g&dJ—1)O\ e("Àž0"}¨…›5Qm8}ú´¤åô­¾í¯¡S”Ê‘|&Y|ýôɺ¢ôÉ0Ps3(py÷œßþ’þLF~F>¬,Ñ´oSø-ðƒk7•íÞ>zqÿý“÷û 2^=£çÌh1¤¥¸¼DŽs[ÏáÂwç‘r!Å‹ÑÀÝÞ/7Gß/ûÂá9ÇJuçÞÏÁï ~Çß#?³vMìÐab{´Ñÿéü@w[ÌJž%–ÉIÎÁϲëÀÍlÌñNìÛ8¾ì"PU÷NnxõëpmïªÔVÅrv–˜›ù €;Çî`›ß7*÷l\l0;eÎ3ËÇiy8|W¸†ÇéÑЫ!Úm‹3{"õRÙ_ÁD®jã "ÝaFDd$222$-§oõm ]êå4çl=laëÙPiýíè;âó§Oä ³ þÆ.Üú-AiùãôǸºï*n¼I¿O†W'CáJò‹ñîϸøý…J±$‰Gf|>‰ŸÈKÍÃŽaß+%‰ðè^6þÚö®î»Š·N¼—vO£´+iØþÒ6䥿‰Ë2ã3p4ø(Î~§v_îŸUnã«n_£´°D|ôG~œôÞ;÷¾ÚrîÝÅ @¥¸ŸV1§c{ÿíÈIΗeÝÊÄñ¥Çq)ì’˜@»ø8ÃÌÆ\c,D¤LˆˆŒ„££#WÈØ5úIÒÐé­Nè·è%X9Z!võIü¾àw”” rn$&,–Û7a®î» hñJ ô[ôÜ:¸âqúc\Üy ùùbû;_Ý!&2Ý?éß¹¾°hhß>ÿ §7œFá£Bù,㎔– |T¸˜€õ î‡îÓ{@Q*GÔüßqæ_Šq<„%Ÿ½/>/~\ŒË Û]‘™€ðQá ö,©+çÑÅ]i]Ï žâ1Ë}‹ÿüR.¤™€Ž“;ÖøX––`çÈ01ëóE_±­¸¯Ï"rn¤GÅŸ+Õ.I® ‚ ÀÌÌ žžžÀ_ý%EÓíüùóÚw'ú¶˜¼-‚±Äz‰¸®âwtgþýdVÌ~‹^‚ Sýüµý¼ø¼ÇŒJëLÌMÄçÿUâØí£•Ê(ä ¥ëÛ4õ„u}¿«ø<ýï‡âsÇ•{c5õ„@ÊùØê»UœÔÄÔÒ?¢íØvâ659–—Â.‰Ï_ü¨[¥};÷H|ÍI9ˆ¤#éìˆ2™ ˜6m/^ŒJÛÄÇÇÃÁÁ5Âþýû1|øp)C”Lpp0.\ˆQ£FÁÚÚMš4©Ó=aU‰ŠŠÂ믿{{{ØÚÚ"((çÎÓwXDÅßß]»v­zà ºvíj´_fÕ·ý5dE¹EH»üdò†Ïs?gøû,s.|ü}” Ã;<û°RÙûq÷+Õ§Šó Îâó¤?Ÿô¹uT=aG¹ŠCÿÜ:(O†ñà|ŠøÜÅçIý)Ÿ”qië¢TæïŸ¯£¤ ì¯†í`ãb#®ËIÎAîý²a}æ¶Jí¥_KŸ?„U,gagYiýÝwñß6ä>È-«»9Æÿ2­†·RÚ®&Ç2åü“!½OOrë·DT{ôvMØo¼E‹‰¯ÃÂÂ0vìXñuÅak“&MÒØ‹bŒ¢¢¢Ð¶m[xxx ;;Æ Ãþó888è;4½ËËËÃÆñòË/ë;"ƒ"“ÉŽž={juc„‡‡C&3λ‘Ô·ý5dÉg’¡—ýv~AyòK{K \5—w]üñ7ŠóŠÄmä¥Oþ~ñø ˜Z©˜9ñ)'ºÈ} »&vZÅYRXªTìš'÷+ëðfñyÅž®’üb˜Z–••"zÑQqÝÓ=VJC ;¹)u9eÜ|2!ÌÓI–¦I9®ï¿ŽÝþ»Q’_  ¬7qü/T^ŸU“cYœÿäX–=9> ¹¿/ø]\çÑÕCc#é–Þ’0gggdee‰¯ˆ7ß|cÆŒA¿~ýСC$$$h¨Åx¥§§#!!—.•  Â|PïïoSž|»¸¸ &&F²vwm]-Y[DÏÂÛÛ±±±Ðx#ã®]»"<<ÞÞÞF§{õm UÅI9T Y³kb×ö®H¹‚Ò¢RÜŠº…V¯¶.Û¾‡nÿ~ 9ï7ô™ç ëFÖÈÏ,@Ú•4Ü>zI§1îÀx±>®¸{â.à§·~°MCáðœ#rïçàÚOÃÆÅFì}kâÛñ¿ÞD/ŽFÿ—P˜S„ãKãêÞ+b}ßí"ÖïÚÞU¼nêø²xiQ?äÜÏÅ¡é¿(õ¬iŠøôu]š’0uC¯ýp»ýwC^R–6pk€‰GÞ¬Ô;W®&DzÑóz±¬GðXè1ø-ì‡üŒ|D~v‰§x“f"}Ñ[–––¦²×'66ëׯGll,zôè¡¢dÝ`ccƒU«V‰Ç`Íš5hÚ´©ž£Ò?…BGaýúõxë­·pìØ±ZosÀð€ZoƒH—¼½½qúôiìÚµ ;wîÄŸþ‰û÷ïÃÝÝݺuÃØ±cáïï_gz„êÛþ"u7i®è¹Á-Ä %nþ/&aW À¶—¶£8¯§×ŸÂéõ§*•-O¨Ê X>ßø%%¸õ[þùü?•ÖpáñùÀpïä=åâÔÚXœZ«´­[G7ŒýyœÒõa½æôÆî1»'WÅà䪲/ý,ì,aÑÐ… hž”ãé^2­{Â*$oqÿ0 ¬×ï_í6+•í·è%ø-ð÷µºÇ²×¬žøqòeûú“8ù“S+3˜ÛZ (§l_y=‘´ô–„íÝ»¾¾¾âëŠÃ+N/¼sçNìܹ³Î]hݾ}ûJËÔÍXß4lسgÏÆ’%KªÞ˜¨ž’Édâ ì÷Gr²æ{ ³ú¶¿†FÝôôµüœ˜ÌÜé†dc7A€¹¹9ºté‚ãÇ#** :uRÚ¦|6ÄÌÌL¤¥¥ÕÙ Þzë-xyy¡U«VðòòB^^6mÚ¤ï°jMÅ{„©º_Ø«¯¾ŠÀÀ@XYY¡C‡xøð!ÂÃÃõ*Õa¥E¥ØÞ;®ýp™ù—È‘Ÿ£ÁG9ï7eCõú‡ö×s¤DT—IÒ¦í̆;vìŸ_½zµ¶Â1‹-Rš!².«ê=0fÌÞŒˆˆj]ÒI¸ýû-q‚‹§YÚ[btØh4jã¬r=‘.èíš0"C¹ß°{Ü8q‘îxtõÀÐMÃpqÇE¤\HAI~1,í-ÑèùFhñJ ty¯+¬Yë;L"ªã˜„ÁpCO‰ˆŒ©¥)º}Ø Ý>ì¦ïPˆ¨ã|¾DDDõÎB}@ußKD5Áž0""¢z©âÉsý¸>™t…‰ѳbFDµN_÷Àc»u»]Ò%U'ÕLÌ`ÂET;˜„Q­Óv†T]íÖñv©¶ñ䛈¨¶ðš0"""""" 1 #"""""’“0"""""" 1 #"""""’“0"""""" 1 #"""""’“0"""""" IrŸ0u÷sÑǽeˆˆˆˆˆ´Ã›–ŽºuïBÉnÖÌ„‹ˆˆˆˆ “.ÃõôÏÆ¸“2GÔA ¸»»#""Ë–-ƒ““ÜÝݩˆˆê‰E`flŒûgÆ$LRSS‘˜˜ˆÐÐPŒ7)))¸{÷.BCC¤ïðˆˆˆˆêã=‘'ÀX~’%a‚ TzÔwÁÁÁ°±±Á„ ——‡ ˆ¯¯^½ªïðˆˆˆˆˆ¨ðš0=rttXXXTz]RR¢·¸ˆˆˆˆˆ¨öH–„Õ9I°Æk ÀÜÖs³æBi¶HŸ/TZlÜ‹¹ E©‚‰ E9…ˆœ)–í5«'žs¬òØÔeœ^…ˆˆˆˆHG’þ¨Þ5\J=a]<ÔÖeßÜ?…S+'˜Z™Áw^q]úµtµu¶×¯m{ Î/8+%`ðê×#ðÂèÐÀ­,¬ÐqR˜Z˜ò>®V½Ï9ÂÖ³! ðQ!îŸ{ˆ9†Üû9Êzû|Þõ{ˆˆˆˆˆtDiR-fFÔÔV±.ßÏzÃÌÚL|]1¡2µ2S*W±Îž³z©l7ûNþØô'nÿ~ ñ™(Ê)Tº¦ (»­ºõ6íÛ—v^܉¾ ‹†8½þ”¸~Ð?ÁÌÆ\eÙú„I‘å!ír*€²k¦<ºzhÜ>'9Gì!²°³„c‹'Cô”ê’ ðñ÷Q*›z)U|îÚÞUef6æpëèV©Ý;Ñ·ñý°âõfêTL"µ©šù=IÂn½„ßn¡´¨ÐÔ¯|Újl³¾`FDDDD¤Ég’¡—ÝfÈÅǹÊM“rT¬ËÂΖö–JeÏþçŒø¼b‚¦Tg'7•7Š>4㘀 Ù0>maÝÈ‚LÀ®7ÂqußU€WÏÆÕª(ë +wóÐM±wM0‘aèÆ!*ËÔG¼&ŒˆˆˆˆHª{“fm'å(ÈÌÇáÙ‡‘—’‹ÂG…8¾äÎm=plá¨4E}Å:Ÿ¾Æ¬\Ú•4ñ¹k{WXÚ["ûN¢¾ŒÂÕ®‰ë÷|2±ˆ6õ@£6ΰq±¥áÝ>ì—v®êŠÕ;ì #Ò ïQ®^:‹®½^FIq1n^;Œô0‘™À½qs4ñ~^ß!‘¨x WÜã÷ß8•ÛùÎõÅËËhœ”£b]¶¶ˆ]‹Ø5±JÛX;Û ðÇ@˜Z>9¥¯X§ºánÝÄI?¶õÛ&.wiç (ÊzßL-M•†jSo¹¦}›âÊž+Jq¾´ø%eêö„iðða œ]Üaç䆸kçabb‚~CÑÄÈå dRª“C‰ˆˆ ÑB‹ô„Ñ›“:GO-/ÔS»Ï†³#ê‰  …ƒƒÜÝÝeË–ÁÉÉ îîŒT[våÊ•˜1c†„ÑÖ?9Yé°²j[;ån\ù óð(3ñWÎàÚ…?ЬE[”Šå2R•’­ò×LÀˆˆˆ ÙBëÉ|ýeÜ?3^¦G©©©HLLDXXƇwÞywïÞEXX‚‚‚páÂ…Je"""àããOϪoH5÷0=ÜÕ.ûꫯbÆŒHMMEJJ Z·n­´^ˆˆøøøÀÓÓS·;m$¦§ ‘›'JKJ —Ë íqáÌ œŠþÉ÷n£}·>prõD~Þ#=GKDDDDÆD²$LÝ5aP(˜8q""""ðèÑ#4oÞ …B«!ŒÆ,88666˜0aòòò°`ÁñõÕ«WÅí<ˆÀÌ̬Úe/_¾ŒþýûÃÊÊ vvvXºt)>\elK–,Áœ9st»ÃF$#=nžÍP\T .sõl߯aè˜wÑgðh4rõBNv:JKKô)ƒ¹&,66ëׯGll,zôè!QTúåèè°°°¨ôº¤äɉ½ªá™Ú–=yò$>ûì3œ;wyye÷²ªª‡ñ—_~««+Ú´iSã}3v]{½ ;'7äf?TZ^XÇ{‚Õ€¾zµÙnÝn—ˆˆÈXéýfÍÿx—'Àÿ³wçqQÕûÿÀ_g†ÙWÁÝ\Ë\pËìÞ,³2\É´Ò[^MSsÅ61Ìnùûöu¹r¯[7í*Vø5Ü47ÜÓRÜT``˜óûƒ<̰Í3g_Ïóèœó9ŸsÞsÆò¼Ïg9À–-[°eË„‡‡["¬£¸¸{÷îÅêÕ«ëTäÈ‘øâ‹/ðâ‹/ÂÙÙyyyg<ŒŠŠBtttÎט<ÈN³t†%ZµAàyùy‰ˆˆW&Š"6mÚ„©S§BEôíÛ—/_†(ŠO|‡B»víàååU§ú………°³³ƒ’““ñÎ;ïÔ¸BBA@hhhÎGDDDDD5³x”w·ËÍÍEffæÝ ®¢ü/¿ürë¯[·‘‘‘pttÄsÏ=g0¹ŠŠŠÂìÙ³ë|>"""""ª™,Ý uUÙ¼y³´¬;©DcVñšT·þÓO?á»ï¾«S]>|8†®W>uêT€V«…B¡Ÿ‡3"'15ù¤ÇŸî5cBFDDT_²$aýúõC\\Þ~ûm9N×ètéÒ¥Ò¶Ç9=’°}…Y: = 5Ñiè â㇠Xý-1""¢ú‘eLØ‚ °`ÁlÞ¼>„F£ÁÁƒå8u£0aÂÌš5 ¹¹¹ÈÍÍEdd$† bé°êÅÍ+ÀÒ!Y„,IXpp0vî܉uëÖÁÏÏ®®®X°`vîÜ)Çé{o½õжm[   ß|ó¥Ã"""""¢:íeÍ=zôÀÞ½{å:]ƒWqBCëK–,Á’%oWª# ú wÜæò$²¡uM$z$/å!bb î7`Ésè¿°¿Áý2/e`u§Õ€&þΈ¼©W¾DX,-/ƒˆˆˆ'Ù’0z²õ&uAŒÛü †~O¯<'ã®%Â"ªÑÝ)Fí×rPËZ/ ‡¿QuT™ˆöŠXÙ[c^Þ\JY:1‘™0 #ÙTL´˜xQC—r¢üÏhèœ>ôÙ “Ï¿‡qã"SϦIË>ÁÞLÀˆˆˆ&aDdVýû÷·ØlžÏ+Ö²‹_]Z®ês¼ªº ¦M•–}»ùÖ;S¨x]-ñûöìÙSös™ “0’Ç€=Y8`ét?®R,ÕâÞ©{Òº±-WªÌX|WþûTY*88£ó¨Nè9£2.f¥~ÏøIuòîå!Æÿ €­‹>Ì‚Þ18¹ú$N®>Y¶"˜ùìÝÚ-ή?‹óÿ>‡ôóé(VÃÉ· Z>ßý>ê×VnzÇÒ=§“ "öEàÐLJ‘râ.TY*¸¶rÃû¿½_õµ©0f•ˆˆˆj‡IY»"RC—q)Å€s€3šø51X'ûjbÆ"ï^ž´í~r.r·^„Xªxuô„µ£´OêéòdÏ·›/`DË’ÇSRVQ€Í/oÒKàáHÚ„+?\Á[GÞ‚Wgï*Ï)(Xß÷Ÿ(U—¿$¾Ýжc ""¢ºaFDTÝñ[ï>¬Ô*õÈŒÛ3àÜÌ¥êl Û*%`}ç÷C¯È^€3kN#áéŽÿ³ú]ï.ïrè÷ty—Ãé7§ãËæ_”¶V˜—7 k¥^]mq)¶ Ý,%`=þÞ}>ì[g[ì·'¾:õC5~™“€1?©òœêEŽèŠÐÙ¡poë…Ç™ÿ¦%"ªBʯ†gFôxÊÎÍ\gÖEöÕ,@—qÁ¸l ìÝìaïfÐ9}ôÆsUìÚ¨×öty7Å´séÒ²wg¯J œY{FеãðâªÁpòmkG X<@Úïöá[Õž³óèξa8<;x2#""’[ˆˆª ;‰FÄþ7Ñ|@ó÷¿¸õ¢´üì{ÝõÊD­ˆwJë'娮%,ý\ù̈ÕMÊ‘{NZî9]² ¥MyÒVq—î9{Íì]屉ˆˆÈ<øÈ“ˆ¨M¾™—þœDC!èM¢Q݄ɻ‹·^YòÞPe(›ó£—T–w/ù©e]m]ìàÖº| Ý–0Ý2]&ûʦ°×¥[ß«£g•ç´v´OWߎˆˆˆL‰IQ÷N݃¨-k:òìè'5€âÂòI-J5¥Ò²¨±á~iÝï?Šò‰7jš”C7±Óm!«N‰ºTo=1&QZ\õ9C|ôâ!"""ócFDTî¤ƾÌã)iùвCÐäkðàöü0f;î¯þ%ÍÕuE€ÜäûÒ²*KU¹O!€À>ÒòÁ¥Q\ A~Z>âÿ+Û/—÷?t{ûé*ÏY] ™Ç„U ;ìÌÚ38³öL•ûõù°žÿt ÷Ì^ØñæÀ±ÇplÅ1€•½5lšØB“§P9©«nRpmÑ9ä6¾¸QÚþÖщhÖ»à…Ïáα;Ðä©q|e"ޝLÔ;†OWŒÚ5Zo|˜î9éjIDDD¦Å–0"¢ t[ÂjÒb` i98¢+†®÷vPX+áèåˆNáðö¯oëµ`;==¼¶õ5ö ‚•½µ´ÍÊÎJ/qòöÁ»§ßA—qÁhâׂR›&¶hˆ—¾~ “N¼ ''£ÏIDDDæ'[KXRRæÏŸ#GŽ@£Ñ $$3gÎÄ«¯¾*WO„Ý»w#::ÇŽƒƒƒŒ˜˜xyy®LD€È”™uª×mR7t›Ô­Òö¹yóª­3ó^õçò}ÚM0x^·6îxå_¯¤s‘ùÉÒvéÒ%¼øâ‹9r$nݺ…ÜÜ\¬X±›6mªrÿ: ++ ûöíÃÈ‘#å±Ñˆ‰‰Á¬Y³™™‰+W®ÀÅÅ£F²tXDDDDDô'Y’°¥K—bÑ¢Eˆˆˆ@Ó¦Magg‡Þ½{ã‡~¨´ïõë×áêê üøã2dˆ!Ê.>>:u‚ š7o޵k×Je‚Py¦2Ým5Õݳg '''xyy!::G5ï—!"""""£É’„íß¿#FŒ¨qŸ­[·B´nÝÇŽƒ X¹r%"""ªLJwãÇÇ’%K——‡C‡áøñãf©ûË/¿ W¯^¦™ˆˆˆˆˆL@–$,''åÓ7 ‚ } ‡(Š7nâââððáC´hÑ¢(B¬bZæÇ½½=RSS‘™™‰ÀÀ@½Ö,SÕMJJÂŒ3ðí·ßš*l¢ÇÜ"KÐðÕ—,I˜››²²²¤õš«ÄÄDôéÓ‰‰‰èÙ³§áYÄöíÛ±gÏtíÚ­ZµÂ®]»LZ÷À ÃÖ­[Ѷm[S†Nô˜[¤ó!ãðš™’,³#öë×qqqxûí·«ÝG·UÌÍÍMZÞ²e ¶lÙ‚ððp³Æ(·îÝ»#..¢(">>'NDjjÙ´ÑVVVP©Tpppdgg]¾ûî;DFFbçÎxæ™gäûRD&DDD$?YZÂ,X€ `óæÍxøð!4 <¨·(ŠØ´i¦N QÑ·o_\¾|¢(6º F…Ë—/£¸¸¢(¢¤¤D* ÆŠ+ R©’’‚É“']7&&³gÏFBB0""""¢H–$,88;wîĺuëàççWWW,X°;wîÔÛïÑlˆ¹¹¹ÈÌÌDûöíåÏ"ÂÂÂ0bÄ8::bΜ9ظq£T¶fÍìØ±... ÅÀ®;sæLܾ}:tÐ{—ŸŸ/Ûw#""""¢êÉö²æ=z`ïÞ½5î³yófiùÊ•+æÉ¢ÂÃëmá Á™3gô¶M™2Ũº u“# å wŸAaŒ„ˆˆˆˆÈ²dKÂèÉÖgPܼ¤õœŒ»Œ†ˆˆˆˆÈr˜„‘l˜xÉ4&ŒˆˆˆˆˆˆÊ°%Œ¨ïãÊÅÓx¦÷óǵq܃-aD5ÈÎN‡§—/\Ü}ÐgP†~ôÆ·=b¨œˆˆˆˆ`FT£ÜÌtxù7G±º€áqmÆŽ{Óm5#"""¢' “0¢jkÔ(,̇§O Š5…&?>[ˈˆˆˆžLLˆª‘›•W7OXÛØ X£±t8DDDDÔHpb¢jdg¥ÁÛ7Å5€ú¿»bĸÍßH˜ȃˆˆˆèÉÁ$Œ¨ Z­ˆ¹™~v€4¬¾t_X·ùiGø5"""¢'“0¢*äÝÏ‚½½›¸àAvšÉŽ[1ÑbâEDDDôäaFT…ì¬txøø£´¤Z­€~wÂG] u»*'""""˜„U)'+!= XSÞQ·;¡Þ¾¶f*×Å䌈ˆˆèÉ%kÖ¶m[Àµk×ä<í«ÿþ8tèD±þ“J±bccQRRbé0k²ÓPZRlé0ˆˆˆˆ¨‘‘- ‹EDDÆØØX¹NÛ`ÅÇÇ£S§N°±±AóæÍ±víZ©L„Jûën«©.äææbáÂ…X¿~½ù¾Õ‰,I˜Z­ÆöíÛ1vìXŒ7Û¶mƒZ­–ãÔ Öøñã±dÉäååáСC8~ü¸ÉêÎ;S§NE»víL6Õ“,IØÎ;Ñ­[7 !!!ˆ‹‹“ãÔ –½½=RSS‘™™‰ÀÀÀJ­Yu­{âÄ \¸p‘‘‘曈ˆˆˆˆêI–$ìQWÄG"""žø.‰Û·oÇž={еkW´jÕ »ví2IÝ3f`ݺuP(dëiJDDDDDµ`öÙÓÓÓ±gÏüüóÏ;vlù‰­¬žžooos‡Ð uïÞqqqEñññ˜8q"RSS”]•J@vv¶ÑuѾ}{½ýAà ‰DDDDD „Ù›K6mÚ„1cÆ@E½Ïøñã±yófsŸ¾Á5j._¾Œââbˆ¢¨7“app0V¬X•J…””Lž<Ù躯ó£mDDDDDÔ0˜= ‹Å›o¾Yiû“>KbXXFŒGGGÌ™37n”ÊÖ¬Yƒ;vÀÅÅ¡¡¡8p Ñu‰ˆˆˆˆ¨a3{wÄsçÎU¹½ÿþHJJ2÷é¬ððp„‡‡WY‚3gÎèm›2eŠQu+b+QÃÂÙˆˆˆˆˆˆdÄ$ŒˆˆˆˆˆHFLˆˆˆˆˆˆddö1aD³‚‡÷qåâi<ÓûyIØ)mï3(¬Ò¾†Ê‰ˆˆˆˆ¶„Õ(;;ž^¾pq÷AŸAa6ú=€›W@¥} •Lˆj”›™/ÿæ(Vr2îÖ¸¿¡r"""""&aDÕ(Ö¨QX˜OŸ@k -5Lˆª‘›•W7OXÛØ X£±t8DDDDÔHpb¢jdg¥ÁÛ7Å5€ú¿ôšwÀ$Œ¨JZ­ˆ¹™~v€4¬¾ú Ó›°ƒãLjˆˆˆžLLˆªw? ööNplâ‚Ùi&;./""""bFT…ì¬txøø£´¤Z­€~w¸ÍßÐïVh¨œˆˆˆˆ`FT¥œ¬t„ô€bMyWÄŠÝ ¥}ÿlÝ2TNDDDDÈ<;bÛ¶mѶm[9OÙ` ‚PéãââböóîÞ½Ï?ÿ<ìííáîcÇ"##Ãìç}Ü<Óûy¸yùC£ÖŸš>'ãn¥OmʉˆˆˆˆdKÂŽ;¥R ¥R‰ÄÄÄj÷ëС²²²°oß>Œ9R®ðd'Š¢ÞgÛ¶mxçwÌ~Þ˜˜Ìš5 ™™™¸rå \\\0jÔ(³Ÿ÷qô ; ¥%Å–ƒˆˆˆˆÙ’°ØØXDDD`üøñˆ­rŸëׯÃÕÕøñÇ1dȹ³¸åË—cúôéÒz||<:uê4oÞk×®•ÊA¨T_w[Mu÷ìÙƒÁƒÃÉÉ ^^^ˆŽŽÆÑ£GÍô­ˆˆˆˆˆ¨"Y’0µZíÛ·cìØ±7n¶mÛµZ-•oݺ‚  uëÖ8vìAÀÊ•+QeÂÑØÄÅÅ¡cÇŽð÷÷—¶?K–,A^^:„ãÇ}¼ÚÔýå—_ЫW¯zÅODDDDDÆ“% Û¹s'ºu놀€ $$qqqRyxx8DQĸq㇇¢E‹RW½Æîã?Æ| ·ÍÞÞ©©©ÈÌÌD`` ^k–!ÆÖMJJÂŒ3ðí·ßÖ+~"""""2ž,IØ£®ˆDDDTÙ%111}úôAbb"zöì)Ghooo´oß^oûöíÛ±gÏtíÚ­ZµÂ®]»Œ>¦1u8€°°0lݺ•“¥ÉÈìSÔ§§§cÏž=øùçŸ1vìØò[Y!==ÞÞÞz]ÝÜܤå-[¶`Ë–-7w˜…èèèJÛ»w¸8ˆ¢ˆøøxLœ8©©©Ê®J¥‚ƒƒ ;;ÛèºðÝwß!22;wîÄ3Ïn$Ü@‡×;ê%awO¤HËþÝýlèÇÐÃß"1ügý9/Qcáß,}Ÿ{‰‡ö"'{ D A€B¡€ P(Ê–‚+++¸º{"äÙ¾ðôö³tèDDÔÀÈÞGÂÁÁÓ¦M ä>uƒ¶|ùrüðÃÒz||<>øà\»v ~~~øè£0iÒ$e­h“8Ým5Õ€ÜÜ\,\¸{öìÁSO=%÷«ž¨±}ôv\ú®,!÷íæ‹ç–>‡À>°²³Bnò}ü±û\Ûun­Ýôꦜ¸+-û?k™ÄÆXz±öýüƒ†¼!û9‰£æ-Û yË6–ƒˆˆs² +,,Ä×_îÝ»Ë}ê+..;v„¿y"1~üx,Y²yyy8tèP­ZÉ Õ;w.¦NŠvíÚ™ì;ÔÕñ•‰RÖzpLLœ„6/·…­‹”¶VðxÊ=§÷Äø½•ê굄Y ±©†ÐFDDDD ƒl-aºc œœœpðàA¹NÝà}üñÇØ°aƒÞ6{{{¤¦¦"33X»v­ÑÇ«©î‰'pá¬^½ÚTá×™*K…} ö½ñê¦PÚ(ª+–jqïÔ=iÝ9À?NþWã®B•¥‚wg/ [; >!¾•êjK´8»þ,ÎÿûÒϧ£XU 'ß&hù| ôû¨\[é·¸åÝËCŒYW>'Dì‹À¡#åÄ]¨²Tpmå†÷{ªÌX|WþûTY*88£ó¨Nè9£2.f¥~ϰkÑ“L¶–0Q!Š"T*–,Y‚ÈHNL”uôööFûöíõ¶oß¾{öìA×®]ѪU+ìÚµËècÖTwÆŒX·n]ƒxŸÍ™5§QRX èþÞ³°sµ7ºnÆ¥Lh +6 ÞˆÓßžB~j´Å¥H=“ŠvVªWQ€u½ÖâÇwwáö‘ÛP?TC[¢ÅÃ;´! ßvûÒõꤞ.Oö¥ëûþWwþ†ü´|hK´h7´-²¯fáºþN®>)Åp?9‡?9Œµ=Ö@,-ëæÕÑÖŽ6µ¾VDDDDÔxÈ>&ÌÞÞï¾û.æÍ›'÷©¤¨¨(DGGWÚÞ½{wÄÅÅAEÄÇÇcâĉHMMXYYA¥RÁÁ¡l’Šììl£ë&&&VJøªc&‡k?^“–Û¾\»1ºc¬´%ZGtEßy}qûð-l¾@ÙŒ„º´Å¥Ø2t³Ô‚Öãï=ÐçÃ>°u¶ÅÞy{qâ«P?Tã—9 óó©Þ½Ó©Ò²úA‚#º"tv(ÜÛºCa¥@©ºÿ/øw/Ðw~?ôŠì ,ÑLø0AªßÐÇ®‘ùYdLØÚµkѲeK¹OÝà$$$@„††V*5j._¾Œââbˆ¢¨7“app0V¬X•J…””Lž<ÙèºZ$}m³„Ì˙Ҳ{[÷ZÕMùµ|ŒU›—Ûâ/+þ{7{ô,V±eíÌÚ3R½Žot‹«ÃÉ· ¬m0`ñi¿Û‡oéÕÓm ë<º3†oÏžPX•ýçsfÝYd_ÍtŒËÂÞÍönöÓ¾ÝÊ»D6ô±kDDDDd~²%a‚ @8;;cãÆø×¿þ%ש¬¨¨(Ìž=»Ê²°°0Œ1ŽŽŽ˜3g6nÜ(•­Y³;v쀋‹ BCC1pà@£ë6$ê<´leW»FY݉.ž}¯|’—¬«å­‚gSLŠ='-÷œÞS¯Lw,ZÅœT·%¬×ÌÞ•b¹¸µüU º±e³?>¸óPZç¤DDDD$KwĆò2à†¦¦ÉIÂÃÃ^eYHHΜ9£·mÊ”)FÕ­È’¿½«TY*@nò}£[Ã4ù©«¡ Ø7H*Ëú-KZ®˜„=š|‚½õÊÒΕóêè)-çÝËC~jY7CkGøtõ©Oú¹4iÙ»‹þq“÷Þ€*³@Ù¤ž½ |;""""jì,?;=±ûJ˧¿=et½{§îAÔ–%ž½`ãT>ÑEÎ9ÒrÅ$LW‰ºTo=1&QZ,-ëvEô ñ©ò…ÐÅ…åÝ=K5åǵ"ö/Ü/­û=Ó°_(MDDDDò`FÓ{VoàÏW$®<Žý ÷#ï^´%Zä§åãøß?õgþø^=ÝI9tÇ€5'aºIßÁ¥Q\ A~Z>âÿ+Û/(K”º½ý´´ŸnWDß§«žZÞã)iùвCÐäkðàöü0f;î·ìKš‰ˆˆˆ¨á‘}vD¢Gš…bðWƒ±{Zd£”––†-ZHë-[¶¬q777€­­m¥õ’’3EIDDDDD¦fÒ$lÐ7Ly¸FÍÇÇÉÉÉhݺ5 99Ù‘ØÑBF…ÈÈHdff"##Ó§O·tHDDDDD$&aWWW¡sçÎ0`€¥C""""""0 ³;;;ÄÆÆB¥R!==|ðÞ»Áª[6fˆˆˆˆˆ.&aDDDDDD22ùìˆEkÔ(.)†¨Õ0U+A¡€••5llmÕïÚb """""ª‚É“°¢ÂܺyIgN!#ýžÉŽ«T(áîé§ŸEPËV°³s¨¶^Qanß¼sgO!#=ÕÄ1x¡k·gh """""¢ª˜4 +Ñh–š‚ãÇ¡s—‡tƒV[j’c+J¨‹Šxô\\ÝÐ,ÐMQÕ1¤ÝïÇâåWÂز-”J+&hµ*Õ–â÷ËIؽk;œÝÜѬYÕ1UǤI˜¦X“¿CH·gѤ‰“ôba“iÒ½û À¡{0~Ò4 ŠHS¬Æ™SÇ1ôÕÑjÙ¢¨…¶Ôt/3nÓ¾ Ôj5ŽJÀ˜ ïWQuLš„‰Z-2ÓÒйKlmmakggÊÃlíl‘™š …¢ê9ED­9™éðj­¶Ô,Ý}›5GÎßWÅš"«‹Œ'€½#¬”Öf‹ˆˆˆˆÈÒL<&LD©¶Ôd]«& ´Æã‹ÐŠ"” %JK‹Í•R -ǂըX]„ÌÌtܾñ›Á}‚ÍZ¶Aëö!К4Ž# ;ÑgPXˉˆˆˆˆLÍô³#6 A@üsfDÓµÚ?ÏAÕÜM¾†Þ^†Òªæ?f¥%%8~0íƒ{™< 7¯ädÜ­s9‘)5Ê$LPE¢h¦$LÔBPpzzC´¢Ö`J++hÍô[542 Se ’¡ñ`NM¡Ê¿_ëã‹¢(ƒäST¨BòÕ ¸Ÿ›Q«…‹›Úvìk›² `´¢\IBVú=(•Vðj­WßP9‘e&È ÉqÒw9é8Zw芧ûü +k\»pwnþŽÖOuV«Åí?® D£Aÿ_‡µÎ&îÕ«o¨œˆˆˆˆHr`“ Q4üŒÛ¯ÒìŽhÝz D³íQ¬)DÁƒ,øú!3-NMéwÑ¡koØÙ;¢¨à‚Z·×«o¨œˆˆˆˆH " ŽÜÜû8~â¦Íœ_ïã)DÀàb¾\… –mááí‡w§¼"µÚ¨ºæ˜˜ƒ­k5{ø ‡÷lÃÁÿû‡Ù£ûâP¬)‚µMÙ«ŠÕj¸¸{A•wZ­¶Ò{ê •ÉÁ,I˜(ZQ4êsóö]8;7KSì;xýû‡¬cHm’™#GŽá䉣¸|ñ223µìS£ê™;aªëñA¨ôqqq1qt–ñÛ…“hÞÏ¡£þ†—^ üù¾6k[[© Púç˹Յ*½ú†Ê‰ˆˆˆˆä`ž1a¢¶üSŸv'`æœEÒúS]zIËÎ_Šßέóéº ‘°-ÿüxzx”-ö ^†eKÕ\IËÏa&u}ÉtÅzÛ·oÇñãÇM’ʼn%Z86iŠbMîg¥áæï—ôÊ=½pñôa´zª3JKJpãÚÅZ•ÉÁ,-aZˆeŸZ³ÿõy\N:‚aCþŠoV}Ž“G÷ Àß—“ŽàrÒ‘z¶„•}-cº#IëAAAHOÏ0ª;¢PÏîˆjµ&L€££#|||]á;zËË–-ƒ««+|}}‡O?ýîîîðõõEBBBµçY¾|9¦OŸ^¯XŠ6»âÒÙc8ÿ=Ο>7½òæ­ÚC©TâÄÁÝ8{|?\Ü$»„y³¦#)é"‚;w4ªŽ! Agbnݼ…–-[nߺ //OÃõL0Eý‚ ™™‰äädˆ¢ˆ7ß|³Æý322p÷î]lݺ£GƤI“pûömlݺ‘‘‘8þ|¥:qqqèØ±#üýýëk])JKJŒzY³1cìÜ<}áÐN.P(­ --EóÖ¤rA¡@«§º s÷þ°±µ‡(ŠhõTW£Ë‰ˆˆˆˆä`–$L”Z­ªÏ¨:=ÝOZî9`°´üÓîD²ƒÿú|Ï_›™ ?œ÷V½ 0gî|Œ|ý5“Ÿ£*›7oÆàååXµjÚµkWíþ‹/†££#ÆŽ‹I“&aáÂ…ÒúäÉ“«¬óñÇcÆ õг®hÖ² ŽŒ7ø"f… @³–mJš5êBhÔ…zÛŠ ó¥eQQð0ºåª<£Ë‰ˆˆˆˆÌÍLI˜¢¶ìS 'àçÝ 8wñ2æÎú;"Þù;͉–-‚ÊŽQC]CAÐërX“^={ {ÏPäà•WÂ0Þ\ƒõDÔbŽ´´4´hÑBZoÙ²eû»¹¹€4£ŸîzIII¥ýãããáííöí-3 »­½Z·ï†öÁ½ ï ¢ˆbÚ¼A5fIÂŒ¿uàH"†¼ˆû"7÷>š74jÌ—!Š?gË3Ô²’w? 0}ÚTýcº#*ê7&ÌÇÇÉÉÉhݺ5 99¹^Ç«(**ªÒ839)•VЩ )â „DDDDDºÌ4;¢hpvDøléé Ôšâ²É9´Z“|DP© q"ñ ŒMQµ1´nÛÏGNv´!˜è-DädgàÆÕ èÒ­wµ1=N˜€™¯-UŤ-aÖ¶¶ð ÄÀ¿ ÁñÃû‘•‘†RËR*”ððòÁ ÃЬy+©ò«ÁÅÝ ž ÅïÏâáýhM4õ½BPÀ¹©º<ÛÞþÕÆ@DDDDDT“ ³³s@«6O¡]‡àz¿Ð¸"­V‹RÚ@òSƒ“³+‚ÚX(†'×õß’,B£Òê©®&9ª‰›—¥# ""z²˜|vDQQ¬.B±Úr]õB Oªîý†X:„F%'ã®IŽÃß…jvºÎ5óR"& FZï2.¯üë½}2.fàÿu^ hâïŒÈ»‘u>Qc`¦)êéIeª¤L‹¿ Õ¤>-awO¤è­ÿþóïKµ”å½RN”ÿù èá_÷“5|ÙÕ™n‚…Ù*Ü9vGo›n¢æß#@–¸ˆˆˆ2&aDDTg[Âàê®kzël #""ÒÇîˆDDT'b©÷NÝ“Öí\íQ”[ˆ«qWñÂòÅd\ÊJüžñÓ;Æ•í—ñŸ×þS¾A`ãdÏöŒîë‚Tœw/1þ_¬mðÖ‘·p,ú(nìMFÑý"xuò Ï!°O NýÏ)œßxYW2!(´Øƒÿñ\]*|—¾¿Œs±IH9y…9…°wµCP¿ ô_ØÞÁ>¦¼lDDDLˆˆ¨n2.e¢¸@pòm‚¯uÀ¯ÿ8ì«YÈù=nmÜqïÔ=ˆ¥e¯ ñêè kG½c\ÿå†þAEš<5R~MAʯ)ÈKÍÇÀe¥âÔÓ÷ôv_Ûc J5¥zåÿyõ;4máŠôsizû^» Uv!Þ:ò–´Mý ß½ú$ïÕC•¥Â•®à÷ŸGÄþ7ГÝ(‰ˆÈtØ‘ˆˆê¤b7ÃvÃÚIëW㮨0ìÙÊ]ÅR-^ÿ~$f¦ÎÂÂ’…˜“3ÃÖ…I­_gÖžÑÛÿÞéTi¹XUŒç–>‡¹ç"bÿ›ÒvõC5òRbTÜ(Ì/üá;GU³¨ñŸ×ʰ·B0ãN$æÌÇsKŸ”• áÃã/ ‘˜„Q¤üª?áFóþA°u¶P>.L7é©jRŽ¡k†¡ÃkàäãA©€«=ºFÃÊV  l¢]º-aÝ&uCèœ>°ib‹f½›éu[ [†¶CÛÁÊÎ A}¥íönöÒò…Mçq#¡, êßÃÖ…Á9ÀÖÖè=«w•ß“ˆˆÈØ‘ˆˆêD·•+ gÖJ´úkk\þþî½¢ÜBý}*LÊñàÖ}üúÍIÜÜŸŒœë¹Ðä©¡-ÑêíSqü–nKØ3ï>--g]ÉDààŒ¶CÚJe3¤e×VnÒ²n+Û­ƒ7±DX\å÷ÔÉíˆÈÌþ³þ K‡@$ &arãÆ LŸ>û÷ïGqq1ž{î9ÄÆÆÂË«ì…=‚ @üó†âÝm………˜]Ë'Ìȼ’%-ûu÷×ËœtËÜZ—'a©gʺšxvð4j?"ªŸACÞ°tD²af!C‡Å?þñ|÷ÝwÐh4X´h"##±qãF£ê/X°<ÀÍ›7'N4c´µ÷覾°°k×ÇâÉïã衽ŽŠš6uÁwîÂ+aC- =æîºQ[öÐÇ«£'lœÊ&ÜhóRJÄR-Ž.?*íï÷ŒEyb´{ún)üÕ`t|£< (üçÕïpå‡+€€^åut»"útõÑ{!töÕòDË£»^¬9äH˺I˜¶´ü¡Õ|Õ|XÙ[׿ÕÇ„YÈ¥K—0pà@ØÛÛÃÅÅŸ|ò öìÙctý­[·"&&žžžðôôDLLŒ£­;{{{¼ûÎD$'ß”¶Ý¼ucƽ…À–OÁ¯Y+Œ5YYå7P {÷#´ßóð h®O÷¿7m1ªŒ [ºx>ù,šââ*Ë ý6îÞÍðÅʯвmG´ïÜ »ÿï|¹êk´n×í;wÃÁC‡¥}KKKõñghס+üƒÚ`Ò;C~~¾Ù¿#É£º±^önöeã³æV¹d^Δ–½»xî©ܺ}íÕÿþ&•5ëU^O·+¢ßÓ¾zÇ˺š--»·óÐ+«. Óñ0aî^¤çC,ÕB•¥Â­C·ppéAl~yS¥ïNDDT_LÂ,䨱cèÛ·/œœœ õnv IKKCPP´Þ¼ys3DYEEEX»nBB‚¥m£Ç¾‰ÉïNĵËIøíRZ·j….•Êÿöþt|8{&nݸŠã¶áÔ©3F•‘aíŸj‡¾¡½±ný†*Ë ý6™•…‹I'1îl¼=ù}ddfáüÙ˜?w¶Þ¾+W}¤sç±?!W/…½–D}bίG2ª8L—î,‰Ò>ƃév%Ü0`–ÙFaUËUe³*þÙ­ÚÊÎJo?Ý–°Šï«KKØ Ÿ’¦Ì?±ê8Vø¬ÀR«¥ˆö\Ž ýÿ‰‹öK-|DDD¦Ä$ÌBFމ÷ß)))ÐjµxðàÞx.+++¨T峂eggëÕ÷ööÆ­[·¤õGÝ wïfp÷nÿ 6ølùøtÙ©ìØá}èÛ'vvvpvn‚óç`ÿCR¹ÒÓ3•¬ZmTgîœYøö×ãÁƒ‡•Ê ý60çƒH888àõ×F@¥RáƒYÓ¥õk¿ÿ!í·qÓV|þIüü|áää„EÍîŸâÍþýH§§×ÕnhÛŠ»WšžþÕ-¯¡õà6°v°†µƒ5üžñÃKß¼Œ‹úKûø>í…µRZ×k «˜„]Ói k«Ÿ„å^¯: óëîwϼ‹®ov…KPS(¬•PÚZ¡i W´µ†­ ÃÐ5ê¾DDDõÀ1aRXX;;;ØÙÙ!99óæÍÓ+ÆŠ+0kÖ,äææbúôézåááá˜9s&Ö¬YˆŒŒ”-vc<VTT„õþ-EÜ¿üzò–D}‚ó.I‰¦ 3ˆ>öŸÿ‹_¬ÂçÑ1pvn‚—-Æ‹yÁ`ÇÓÓãG#æË¯°dÑGze†~pmÚ`kcSi½¤¤DÚ/5- ½û=EZ­¶Ò±èñ™2³Ú2÷vX$.®±¾kKWŒùyL•eÕÕy¯úsÎÍ›WmÙ¼‚ùÕ–¹·uGØ?‡W[NDDdl ³uëÖ!22ŽŽŽxî¹çªW¾fÍìØ±... ÅÀõÊ£¢¢àää„ÀÀ@tìØ={ö„µuÃTngg‡7ÇÑë6øÖÛS0iâ\:w Yi·qó+z­€!]ƒ±éßëqíÊ9|öIfÌœcToÊ»oãçÝ{pçî]½í†~›Úðöò¹ÓÇ‘qï&2So!;ý²Òn›"|"""¢Ç“0 >|8®_¿Ž’’ܺu S§NÕODBBpæÌãæÍ›˜2eŠ^¹ƒƒþýïC¥R!==#FŒ@@@å¡ZZQQþ½i ‚‚Ê_–ZTX;[[ØÚÙâÖí;˜1s¶^·ß}W¯ýŽâ’ˆ¢ˆÒ’R£ÊÈxvvv˜=k–}ü¹ÞvC¿MmLxs,fÌšƒä›·PRR‚ËW~äwþVßЉîo- IDATˆˆˆ{&íŽxý·$Sî±Òê©®²ŸsÆŒX¸p!Ôj5fΜ‰áÃN—šGï ³²²B§Nðÿ¾^%•}õå |´p î¼õ|}|ðþßÞÅw–¿»jðà¿bü„·qóæ-´nÕÿ³ú+£Ê¨v^1ÿ»f½Þ6C¿MmL›ú¾úÇj¼òj8ÒÒÓкU+ÌŒœfŠÐ‰ˆˆˆk&Mº÷bÊÃ=Vr2îÞÉÄš7o޶mÛ¢¨¨Æ ÃÒ¥K W’¡ÿ¾4ø¯xið_õ¶½=i‚´¦O{¿^q“ùådL„›×:K‡Ñ(åd4¬w8QÃ`Ò$̉ȓlÚ´i˜6- DT“&eu䋈ˆŒÁÙ‰ˆ¨&DDDæÃ‰9ˆˆˆˆˆˆdÄ$ŒˆˆˆˆˆHFLˆˆˆˆˆˆddú1a¢ˆbÅ%ŵZu{ÑkÃ'@P(`ee [[‚¥""""z¼Yì>²÷uþ^—×BŽû|“'aE…¸}ëÎ=…ŒôTS¾ÁP*”p÷ôB×nÏ"°E+ØÙ9è½L™ˆˆˆˆjÇR÷‘µ¹¯kì÷º¼òÜç›4 +Ñh–v¿&Å˯„#°e[(•Va+Q©¶¿_NÂî]ÛáìêŽfÍ\¡ÑY:¬†¡Ñ>‘ƒŸ¼ðw!’ {JÕ…%ï#½¯{îuy-ä¹Ï7i¦)Vãì©ãúêhµlQÔB[ZbÊS4(mÚwZ­Æ±C =á}€Iݧ"§ÕS9”?yénò'/E…¸™|§OýŠôÔ{&9&U¦T(ááígº÷DóV­ÙS‚ÈH–¾4æ¾ÎÒ1Ê…×Âü÷ù&MÂD­Ù™éðj­¶ô‰øKÇ·Ysdÿø= Îq4î§"r0ד—©÷Rxä0^xyš5o ¥’¯ $2‡ÒÒܹy¿üô\\ÝÄžDÆh÷‘†îëBŒráµ0ï}¾‰ïÂDˆbÙSÀÒÒbÓº²R*ÑÿÌÕ™¦X³§ïS9HO^'`ô›¦yò¢)Vã䉣<ü tèb‚(‰¨&®npiêŠø¸­ˆxg:{JÅò÷‘†ïë,£\x-Ì{ŸoòGá‚B þ9æ¤ñµÚ?¿síBå:á ‚¨Õ"'#£Q?‘ƒo³æÈùq›Éž¼ˆZ-²Ò3àëßÌ$Ç#"ÂZ +-=%ˆjÁÒ÷‘ÆÜ×Y:F¹ðZÔý>ß&O‚Q!ŠóǨHµPT‘PW·1&("´õS‘êœ;±Ýû F­ª÷±¬”JhM:q†-´ì‚H$#¥Ò Z<™Š¥ï#¹¯³tŒrᵨß}¾!¦o û3ÐÆ™`T&Šb•­ZO2… @c~*bHuß;'7àæêjÔ1Ê®£é˜ë"DT=þwGT;¦¼tpj UþýZ•s_÷¤ÜëòZ˜÷>ßä}$ªëvqï^*ÆŒ€¯\ݽñÂ_#>~·ÑÇupjZçmæV×®&îîî°±±A»víðé§Ÿ¢´´ÔÄ‘Y† (*ò$}©ª,''/½</½<99ÙFÏÔÍßæjN'¢êñ¿;¢Ú1tOÕ%øit ~Ú¢1TWîàÔTúxyûãå!a¸òÛoæQ6¼u¿Ï7x\SP@+}ÆGL@Ë-pî̯HK¹…… æã×®«rß*?€QÛTy¹ÆÓ$ŸªÇw"Š"²³³QXXˆï¿ÿ¿üò fÍšeÂ_Âr:OE*~ì]`ïè‚&.îhٺƎ{çίrßÇíóHÅí999xiHîß¿û÷ïã¥!aÈÉÉ1xZ°E<Ì<Ì)[®f[¥§>Œ½{v#åN2† yïO&•/Z†‡âÊÅs8yüŽ;®WÒ;“ñѼ¹H¿w{vÿ„_=Yeì‚ žt* hÉ*A¤YukÑ£þµ>>Þ˜üî;XðÑ<|úÙòjë<.ŸGt·ÙØØâ‘¯ã묂R©„R©Ä×ÿX…7F¾ÛŽgú'/5O¡PÀÏÏS§NÅÒ¥KUí¾Ë—/ÇôéÓMQcÅ1ÃDµSÝ}¤º¨;vÆ!|äëõÆHüwÇN¨‹Štîé>FVV._H‰c‡qàÀ!½ã*¯Í}]u1ên{øàV®\….;¼Ï5æžõµ×Ãñþß&ãæßqóúU´mÝs>œ¯W?3#¿_½„E >„ “‘ž«W.`Ñ‚0gnù¾ci×ÂØï²diRSSq!éΟ=…;wî`iÔ2tîÔ...8xà ´ïýÑ´iStêØÁ¤× ®ÌÓ± ›7þ ùùxá¯/ÁÛ/ã"&àîÝ©<ö_³b9üýýàä䄨%‹°3nW½ãù2füü|áèà€iÓ¦âÜù RÙ¶í?à³O—ÁÃÃøìÓezuííí–ž†¬¬l4 À꯿ªÕw®É¨Q£pñâE”””àúõë˜0a^{íµZ§!ªíƒáaÃxü„™¢±,{ü}ê{z­Z …Ÿúìk¬kê'/ƶ¬½úê«8zôh•eqqqèØ±#üýýMQ£Åéé‰j§º{ªŠG×à.ð÷÷ƒ¿¿‚ƒ;ã§ŸËçøÏ÷Û°üóOàéé //OD/ÿL¯¾¡rcb0¦ÜÑÙ ŽÎnð hŽ5ëÖã_±ëwŸ[Ó=ëé_Ñ¿?ØÛÛÁÙÙ‹/ÀÞ}ûõêÏŸ7Žãu¨T˜ûáÒúիפýjsÏm©kaìwù~Ûv½ßuEôçø~ÛvÀøqc°~C¬´ïú 0~Ü“_ƒº2KwD rSž¯¾ùú+üþÿÛ»óø&ÊÄàŸ¤' …BËQN‘¡&ÜW±UW©¸âz®º+Âz!x+þ\¿ˆ"°~uY¯ý"—x,¦ HEÄRå°+•›h)”ôžùý˜&%i’I&ÏLòyûêËdž9žùÌ3IæúõìÛ³ :uÂ=÷MVÊóOœÀ`ë0ÄÅ'¢yË\Þ½ O»<¬éí0h_za“&MP[[«¼?uª:uRÞwîÜÙiú—ý7~ƒ¡#Fãʃñ庀¦¼í¶Ûp×]w¡I“&HIIA¯^½°dÉŸç£GnÿU¤Á¿Œ\üKhÝ çÎs=¾‘þ. Ðüý//Þ~ˆ$&&¢¸Øõݤ^zé%<õÔS¬QHã‘0"߸ûùáò¸ë®;•÷wMº._áô›®K—.Êû®]»8ÍÇS¹/¿ëÜÕÊJΠô\öü¼Ý»wÇO?ïöúwnc¿YÈÚŽq×߈6í:¢Y\+$¶í€¢¢"—ÓGÇÄ\òÞq^žê¢§,<­KAA!ºvíê´] ì§iÞqÇíøêë8]T„ÂÓ§ñõ†M˜81=ਥÍ-êþ(m u«VxvÖ3èÐére¼vmÛbÓ†õHJjï}ú´^D¡Œ×„ùÆÕïÈ‚‚BlÜô Öõ5¦<ð2<22§ ЦM"Ú¶mƒ#‡ [·ËG±ta>žÊ^ü®kô·®,Ãàò®]ñÎÒ·0z̵;&Åïß¹wß{?^~éE\7îZ4oÞeeehß±kãÓ»yïU].®‹^²pó¾M›D§ízøÐa$&&²Œqq¸áúßaÙ²åeão¸-ââYhjir‹zW½È ïÄ–ï¶¢¢² §‹Š0ÿÕ×0 ÿ•Jù”)÷cê´¿âà¡C¨©­ÅÞ}¿àÞûPÊ[´hý¹¿9ÍÓÕ0¸yíjXú„Û0óÙçqº¨§‹Š0cÖsNå÷M~9ÿýÕ55eµµunzÈ<ÝÄ‘¯wûÏÚÏ1|Øj#VUe%V­þ>6µµµ¨­­Å£MǪÕÙÏeoD ïªæí‡ÈÇŒ‘#G^2üÅ_ÄŒ3Z'¢PÇ#aD¾qõ;råêpÇÄt”ž+rú»óÎ;°ê£5Üž>3f=‡ÂÓ§QPxO?3 p˜‡§r_~×¹û­Ûp~III6t(V}´Æãï\WuqVQQ‰˜˜XDÇÄàð‘#xô±¿:•7œ¾±÷žê¢·,{?á¶[ñÔ3³PPhß®O͘‰ô ·)åwß}Þûàßxÿßÿ‡»ï¾K“ ÔÒîš°§V=8ù~¼8ïÿ¡cç®èŸ<{öîÅ{ï,UÊŸþ† ‚´›nE›v1yÊŸpSÚJù´©Á¨”±hÞ¢u£Ãœ–í¢ŽÃž{v&.kÖ }ú€eÈpX¯Œ¨¨(¥<õÆñ˜ôÇ{ж}'<ÿÂ\üëŸÿ{éü4ì!•éârd÷7樫«Ã‰'ñÖÛKñÒ˯àé§žt9¾‘þ.rÖ²eK¬ýìcìÞ½Ƀ¬HdÅîÝ{°ö³•£îþý|¡Æ>D$I‰'°dÉÌ™3Ï?ÿ¼Sù† `2™0bĈ€Ö‰(Ôñéˆ|ãêwäòå+qפ;/ùý5éw`ùòößt³f"¾E ôí—Œ!ÃF`ÔÈNóñTîËï:w¿u] »ïÞ»ñÞ{xüëi~o.yÏÌzmÛw©·`è«ó4 §oä½Çºè-‹FÞ¿ðü³h“˜ˆW Æ€«£]»vxþ¹YJù˜Ñ£P]]ƒêꤌ©IjütDwÏ6ºþúëpýõ×¹ŸÎlÆOÇ»¾ëÚSO>ާž|Üã°ÒâÓ._»Ö´I,}û±ôíÿìߟ‹÷ÿ½L)OŸp+Ò'Üê¶ÎJÝÙ sâ)æ-ÄÄ 6 ŸŠ+ûõ Rí‚/>>k?û7ÿ~`íg»<ݯ¡@·+w"&“ hÓ¦ F…M›6aÀ€Nã¼øâ‹xúé§Z¢pÀ¤#ò«ï¾m[3]Ž;rÄp|ÿ½,66o¿õ¼ýÖ?”òi=ª¼öTî©Þ”»úÝyíØkpíØk Ñß¹ž~³¦¥Þˆ´ÔÊ~èA·Ó7öÞÓonGzÈ¢±÷Mbcñæ’7ðæ’7\ÎËd2aßî—Ö;€¨økÂÌf@–!ävëÏ<û<žyê TUWcæ³Ï#íÆñ>Õ]–%û:“¢±6Pr¦Àå4Fi/Þpµ.-[´À>ùHyíi}µhW®®Mñö:¼ÌL×_€DÔ8^FäÑ¿#½ùþ]Ç`aÚþÎ×äH˜,K¤º@ÏZ;vÀ@ËPTVVáÆ®Ç¬gžô©î’TÇ#a ˜ÍÆjæn½[´ˆk´¼á<~cžsADîq¿#òèß‘Þü®]Ç`aÚþÎ×àH˜ýA½FÙzp2þôàd§a¾Ô]–¤€_»ctf“ÙPm Pº÷ˆ³…yžGô‚,I¿1Û)QÐq¿#òèß‘Þü®]Ç`aÚþÎ÷ºÖªÍ;Ê뉓àã÷ý^ClSÿ+gñ‰×ùUÄÄ^ZnÏjnp+¶G½¶¢“÷‹®‚WjkkÀ9š©.4?$‰ôHª«Cd@÷c¢PgB¤9’T'ìûª¶¶‘æÆ~‹¯c°0 o2PO™«c'‹(Tµn÷^£å…ù÷©&+9[„øÖ‰t޵ÉlF«„Dœ>}-[µÈ<‰¨q§NC«Ä6Û‰BÉlFËV­‘w8-[%©CÉÙ"´làv¿ÕCƒ…YxÎÀæVmÞaŒè‚Ĥ#1éß0 úO‚Œ3E8°úŽÚêÆŸ%æ­¨È(ô·|¼£Bö_¬ˆô@ª«CÞÑØòÕ0È::`û1Q¨‹ŠŒB÷^ý°w×8ST rпî߃|ÿЬ#³Ð_þÐæø‘Á}e[)d¹f“q-[!Ù: ‰m; ò|Y@æƒøÄv8d$¶oYsg‹ø¯óD1›Íh߇ŒB›ö¶…º¨˜´hÝW^=¹{w¡¤ø $98ßU¿XG!¡‘ï_‘u fá}þ`'ŒÈ… ÷L¶lI’PW]àÞ„ØØ¦¸,.»õæd‰4¦Í~ ¬~wA@çG¤/õßU»ô úw•wû­Ø: ³Ðîsü¢€tÂNìÈGö›Ù8²å(JŽ— ¶¢Æ©¼oz_ÜþÑÄ@,* æšæ(¯gËsÜŽg¥y%x­ãk— 7™Mˆi‹Ä¾‰H¾'ƒðvú^)/9+º 'Ë2jª*QSÅS£ˆŒh\Ú¢«@¤9#|W¡ŽÁÂ,Ôó»öí‹™Ø|óÂ7€îã{àÚÿw-û&B–d.Ʊ­G±oõ>´œäW%Oì:©¼n—ÜÖåzoÆ UyYÇ•×#fŒÄ¸¿T—V!kQ6=· °ó_;ýî„q[ùǯNض׶Lf¤¯˜€˜õÊJè€„Þ 8e5pr× åµ»£jÞŒsQ(œ‚èÈñHXÇ!”×ÑÍc0ü©J'¬²ØÿCÅÞDDDDDáÆ¯NXÁžS€ˆèD_íý„²Œ}ý‚Ÿ?ø yÙù¨8S&ñ±è2º R^HAÛävʨŽ×o@ö›ÙÈ~3ÛþÆdÂÓ…OáþÇã8MZ7Ei~)^ë`¿¨9¦E,ž9;C¹Fʱ,ªY4Ø6[^þ7Deq%Úl‡›–ÞŒ¶Ú^²:e'JñÍ ßà×µ¿¢âl%Ztnä» ×ͽðö ·—µoŽ'òŸP¦Éÿ1Û—lDZ­GQ’W ©¦Mš¢mr;ôLíþw @“VM¥Ñu€‚}…¨)¯ÄuŒCó¤æöYFá/…X;å?ʸ֩Cgrë;f­º;wt Gý‘,Çz7Æ×mQ^PŽå©:u  äØ9üôþOÈù$“¿›Œ6ýë;Tj·‘l«üž‡(F®;Ùq?¦PÇ6NáίNØå×vïÿù/`χ»±çÃ݈o‚Î#:¡û ÝÑÿ®ˆmYŠ¢,ÉX^ß8y ÆÌ½MZ5Á¶ß㛾Ame-6<³÷m¾0ýðt,캉Y¥3aŽŠpª‡7ã :ƒÛ»-«9_ƒqË#Wãà†ƒXu›ýƒ¢`oÓ4uUµXuÛ*¥6fÎ ™6r„Mσÿ7»~y™³6*° +ÒÑ3µ"b"Q|¸G2cïʽè’ÒÕeæ 9^Vr¼ä’£U‰ÑÏÆÀÉg~;£”µîqi'̱³ã˜S ¶…TS‡7-W:`C‚‘ÏŒDL\ 6ÎÚˆ¬EY¨*©Â×36à®/îR¦S³Ô2ê]ÈŒZo"ªÇý˜BÛ8à×nXxâ»Å; «<[ý¶ýøâÑ/°¨û"ÝrD)ÛóánÜ`ï€uI銛߹qãÕ4 ß®Œ—·½þ§“?ŸR^·í߯eçÊ›q€GÂÜ,ılðŸcÄÓ#Ý<†wR†ÇÆ;Ÿ¸céNýzpÕ}W!eöĶŒE“ÖM1þÕ¬þMÇNXÉñåõ†_㣉áë§¾Bá¾$ß“Œ{6Þ‹.£»¸\‡†³r§¶²1q1Êû¢ÜúNX«­/ß±³ã˜S ¶ÅÎíTêÝïŽ+qÃãqYûæˆj1sÆ(ã9¶@Ý6"""""Ò¿Ž„µìÚìù3ö|¸¿­?€c[¢ìdýÍ*ŠÎcíkñè¯ößîüWýéyG2»{Lf“SG/ªi”SÇðâúÎׄ%ôNpšgÁÞT—Ù¯1»¬}s\Ö¾¹R¨máxÊ cÖ §oÓ¯¾¨ÝFDDDDDzã÷Újyy]°1ù?æ+ÉNì׿’;Tž=P?Ÿ¸ŽqõÞU^;nøé½]õõnpSŽ@m GµUuNíàâc ùždåµÚmDDDDD¤7ª„mž³kîø?ÿûgœÎ)DÍùÔVÖâÄŽ|||×'ÊxoÀ鎇fnDù©2ÈuΟ>#ßAæß2±<õC§åœ=T¬¼>úü¥ç¨y9Ž·§"6L–dì-p:¢ÖRåuÅÙúç…å|ú_H5u(/(ǯoCÖâíõõnS ¶Eç‘•×™ËDMy5ÊN–áËǾDÎǿؗ}u=8XOí6"""""ÒÕGÂŽ} ¿>€}«÷¹§oz_§Sâ®{eÞ¿æÔ”W#ëõÆ—LÓob?§÷ñ—·T~d/»a™2|òÖ)Ê ¼ÇÛ›r4ìx4öøS#ðÑí«ßÏߊïço`?Ý1&.U%Uöy:tÂ}s¹_ä*ׄ5ßÍ¿ÎeYCŽ×ƒíü×N§kîu»î Œš5Jyß~`;å΄Ÿ?¸Ÿ?hï¬EÆF"ªI¤r:bܵ-®{eŽ} Õ¥Uøáõmøáõú£_Ðîªv¸óóINׇ©ÝFDDDDDz£úH˜ãÍ”™EšÑ¬M3\q}wÜöáܾúvåYbd逇v>„«î» -º´„9*1‘hyy<úL苛߹7-½Ùižé+ÓÑyT§SÖ"c#:6ÞŒãõ‘°7“p<¥¯áü¾é}që¿oEBŸD˜£"pY»ËpÕý1ù»uƒ& IDATɨ©°_fŽŠpº{ß©VܸäFôHí‰æâ” â»Åãªû®ÂƒÙB÷ñ=.ÉÖÇ#aŽ·Ã­ÿ¾\÷G§lnûp.¿¶"c#‰„>‰2m(þ¼÷ÏÎÛ«ANÚm“Ûá¡€»“Ñ<©9Lfû]GtÆKnÄYâ²v—9-[í6"""""Ò“,Ϲô|1òË÷ó·âë§¿ô¹­&~ÌçaÍ™‚)¢«@DDDD!Êï»#†«ºê:|0öü÷ÓTž­€T+áì3Ø'ŒˆˆˆˆˆÂÞ—Ÿ„”±7¢c箨«©FUE9*Ï—¡¢¼å%8_vçK‹Q^zeÅhØ:vÆÖM_ø¼,vˆˆˆˆˆ(ìUVV¡g¿þ>MÓ£O2j¥ZŸ—ÅN…=Y–ãÓ4æˆ@ÅmÙ #"""""rC–eäµ_ ªoÌADDDDDÊdYFnÎ.œÊ;‚òó¥èܵg@æË#aDDDDDD ȲŒÜ_v¢ôÜY\Ñg Š‹ qôÐþ€c'Œˆˆˆˆˆ¨Ü½;p¾¼#Æý:wÀÁ#QZRŒã‡ó{Þ<‘ˆˆˆˆˆ¨„vѯãå¨:_Iª…ÙlFïƒQ[S‡è˜&¨¬(W=ovˆˆˆˆˆˆh•ØUåeIiŽDDt$ª«*üš7OG4¸ùóç#33ÓiXff&æÏŸ/¨FÆ0>Ð 6dfÚ‡{Sk×V+м¹ýÿk×j[g""oð{AO¹1W $¶7£ã5aaÏjµ"==]ÙQ333‘žž«Õ*¸fúfµééõ­ÌLûû‹±y*Ï̦OæÍNœ°ÿúôK;nDDÁÆïu<åÆ\)ØÞô«¦º2(ˉ˜ñÔãs|èàþ}è7p¸Õ!_uíÚC† Azz:*++ñä“ObÍš5HII]5]ëÚ2ÄÞ±ª¬ž|X³¸›§òI“€%K€±cèhàŠ+€™3)SD­¿Ôò”s¥@b{Ó‡}»¶¡[Ï+•÷Û·}‹)ײl¿¢Ãÿ‡ÿÃ~çÄ‹¹9{ÐwÀÕ>-›×„…€””L:³gÏÆÜ¹s¹ƒz)%˜:˜=˜;·¾ƒåMùž=À AÎãdND$¿Ôñ”s¥@b{Ó§ófÂl2Ád6Ál6Ãl²ÿßd2Áì0̤”Ù‡ùа™™‰Å‹cîܹX¼x1RRR¸£z!3X¼ØÞÁZ¼ØÞÉrŒ­±òþý;Ñ£ëÇß¹Ó>œˆH4~/¨ã)7æJÄö¦O3ÿ¶ðÂ.I9&Ë’rÔ ² 2d©~øÊ÷Þðy9ì„ÜÅs„/¢NIIqzO®]¼Æëâ)†))Îï=•¿ü2pß}À[oÇß<ü0ðÞ{¢×ŒˆÂ¿Ôñ”s¥@b{Ó·šêJHRd©’$]x-A’$È’Y®ƒTg.Iuª–Ás\VV–Ó™’’‚5kÖ ++KpÍô-+Ëù¯”ûû‹±y*OI.ž{hßÞþÿ… /=¥‘ˆ(Øø½ Ž§Ü˜+Û™ŠNóù‹l«0qòZÔ‡ˆˆˆˆˆHs«ß]€qiw(ï/˜‡gç-BuU…OG¾ølÒÿø°OËæ‘0"""""¢ b'Œˆˆˆˆˆ(ˆtÙ ?~F…˜˜Œ='Ožt;ÜŒ ,µZ1 ÀR«¹>Õ!##V«`µZ‘àéý­Ÿ/\ýK„ZzÏ5L Ž"éYFp!X­ö÷¢²½yâï~ÌötQ(|¾y¢Åç[(ä&¢½¹Jß Zp—ÍÅ÷‘‘‘èׯ¾úê+ÍêÌß Âý4°–-[†®]»"22]ºtÁ²eË„ÕÅ_zÊ5$:&ûú·êWewÈ”÷“&M’ÈkÖ¬‘Èwß}·ËéöÛlòà’¿ý6›Ëe4d³Ù”e;þÙ4½/õ „†9z;MCzÏU+öcKÞìr›­¾ŽŽ®bñ±øeéÒ¥2yĈÇõÔ>µØÏümþ2êç›§r­?ߌš›èöæj¡ð½àK¹îrúöÛoerÛ¶m½š‡¯åþæÈr5¸ŸF\\œ @þñÇer\\œÇi´nZ|_‡ŠUï¼êÔÇ™óôCrMu•\^Z,—ž+’KÎÈÅE'å3…yrÑ©crá‰#rAÞ!ùÔñßäGöËy‡räcöÊo/xÖçþ”æ×„]ü§ë¯¿€ý«+›çÎõixCsÝŒçn¸¯Óû[?Qôžk¸r·ú¢cY´h`æÌ™šÌßßýLoíÉ(ŸožûóÍ(¹é­½Šè\EiÞ¼9 ""B“ùõw‚;ÜOÕéÝ»7€úSøúöí+¤þÒ[®¡HóNØ™3gÍš5szßÐ霟†7”ãf}|ÞP7ã¹îëôþÖÏW²,C’$dddàøñãxä‘GTÍG﹆+w«/2–… Ðî(àÿ~¦·öd”Ï7O‚ýùf”ÜôÖÞBå{!ØjjjžžŽ£GbáÂ…˜4i’&Ë ö~¤5î§êÜrË-ÈÍÍÅŽ;°ÿ~Ü|óÍBêá/½åŠ4ï„]wÝu€õëר?¬ÝИٳ}ÞÐl7ã¹îëôþÖO “É„¨¨(@d¤ºYê=×pånõEÅràÀddd {÷îHOO×l9þîgzkOFù|ó$ØŸoFÉMoí ï…`›:u*¶lÙ‚ `Ú´iš-GÄï-q?UçèÑ£³ÙþûرcBêá/½å’uc¸¸x€|üøqyĈrTT”[ô?>ìÓ²uù°fÀóƒáD—ë•è\Œ››¾ËõJt{2n{cnjˆÎ…¹iS®W¢sanÚ”ë•è\Œš›‘鶦翞ªè\Œ››û2ÑGºt›ðödÜöÆÜÔ sÓ¦\¯DçÂÜ´)×+ѹ57#ÓüÆzÂ'S0edš¬Vûû`N®Âu?×õös#=a{$ aÓ ËÈÈ@ZZ²³³ÙÙÙHKKãi"#HK.47dgÛß{ÛÜü>\…ë~®ëí/æFzÂöH^¦Æ'S0¹kVÞ67§Wẟ‡ëzû‹¹‘ž°=…—°é„ñÉßLîš•·ÍÍßéÃU¸îçáºÞþbn¤'lDá%l:a|ò7“»fåmsówúp®ûy¸®·¿˜é Û#Qx ›NŸüMÁä®YyÛÜü>\…ë~®ëí/æFzÂöH^¦–šš ›Í‹Å°X,°ÙlHMM\3 E©©€Í\hn°Xìï½mnþN®Âu?×õös#=a{$ /¦¢SÇ|~öÛ*Lœü„õ ç!ñÉá¢×Û¸¹‰˜?墈n/ÆmoúÎ…¹iS.ŠèõfnbÊE½ÞÌML¹‘­~wƥݡ¼_¼`ž·ÕU¤:ÈR$IºðZ‚$I% ²\©Î>\’êðÅg+þLJ}Z¶nÖ,úÉàF}0è\Œ››¾ËõJt{2n{cnjˆÎ…¹iS®W¢sanÚ”ë•è\Œš›‘鶦翞ªè\Œ››û2ÑGºt›ðödÜöÆÜÔ sÓ¦\¯DçÂÜ´)×+ѹ57#3Ô5a|’¼6ü͕ۅ±=¨ÃÜÔanÚà÷‚6Â5W£Ö;Ôq»Vtê˜ìëߪw^•µà’a6›MpÉŸÍfójú`–‹¢¦ÞþæÈí"Чjé½\î§ê07u˜›:ü^PG‹öÌ\Eá~ªŽˆõ…ý4V½óªSgÎÓÉ5ÕUryi±\z®H.9[ ”ÏæÉE§ŽÉ…'ŽÈy‡äSÇ“OÙ/çÊ‘Ø+¿½àYŸûS†9Æ'ÉkÃß\¹]ÈÛƒ:ÌMæ¦ ~/h#\s5j½C·‹x†é„ñIòÚð7WnrÄö sS‡¹iƒß Ú×\ZïPÇí"ža:a|’¼6ü͕ۅ±=¨ÃÜÔanÚà÷‚6Â5W£Ö;Ôq»ˆg˜NŸ$¯ såv!Glê07u˜›6ø½ pÍÕ¨õuÜ.â¦Æ'ÉkÃß\¹]ÈÛƒ:ÌMæ¦ ~/h#\s5j½C·‹x¦¢SÇd_'Ú`[…‰“ŸÐ¢>ôñ<ÊE½ÞÆÍMüsÀü)Et{1n{Ów.ÌM›rQD¯7sS.ŠèõfnbÊlõ» 0.íåýâóðì¼E¨®ª€$ÕA–ê IÒ…×$I‚,Iå:Huöá’T‡/>[ô?>ìÓ²uû°fÑO7êƒéDçbÜÜô]®W¢Û“qÛsSCt.ÌM›r½ sÓ¦\¯DçbÔÜ´öͫݖYGþίy붦翞ªè\Œ››û2ÑGºt›ðödÜöÆÜÔ sÓ¦\¯DçÂÜ´)×+ѹ57­Ý<é/nËNÍõkÞ†¹&Œˆô!7#K­V̰ÔjEnF†è*‘222`µZV«Ün$Û#‘ö¸Ÿù¯´¸çΜÂÙÓù8Sp§OEaþaäð{Þº=FDú“›‘åii€hùÙÙXž–†I6zðb^ÝÊÈÈ@Ú…íÙÙÙHKKãEØ$Û#‘ö¸ŸFXžŽHDú³yî\·ÃÙ Ó¯¹n¶ÛܹsùeLAÇöH¤=îg¡åéˆì„‘×Nçäø4œô!ÇÍöq7œHKlDÚã~¥Å…nïŽè/vˆÈk }ú ?;ÛåpÒ¯>}ú ÛÅvëÃíF°=iûY`ðtD"Ò…1³g+ׄ5Nú5{öl§k‡Û#‘ö¸ŸïŽHDºÐ#5“l6$Y,¨d±ð¦šš ›Í‹Å°X,¼8›„a{$Ò÷³ÀàÝ)Ì…,ÏàúBQ‘<=^ïåÁÖ#:]?Èùn©©©HMM…ÉdÂöíÛEW‡ÂÛ#‘ö¸Ÿé›n;a¢Ÿ nÔÓ‰ÎÅþÀ¿9ŽC¡æÒ޵É4çÂÿ¹Ÿº":æ¦M¹^‰Î…¹iS®W¢sanÚ”Sàé¶&úÉàF}r¸È\ôx”‹Ä¨ïˆ»?÷œû©kü|sOt.ÌM›r½ sÓ¦\¯DçbÔÜŒŒ×„©”‘‘«Õ °Z­ÈÈÈ\#¢Ðãï~ªûinF–Z­˜`©ÕŠÜY¯pÁN‘ HKKSn´´´ùG¤þîg¡ºŸæfd`yZò³³ ?;ËÓÒØ3vˆˆˆT˜;×õ)Øî†‘ïüÝÏBu?Ýì¦þþèöš0 ?¥y%x­ãk.Ë"›D¡í€¶ùÌHôþ}ï ×Ìø³j™çž)‚ÿC䜜Ÿ†‘ïüÝÏBu?=í¦þþðWéÆñ¬<·eµ5ÈË:ŽU·®Ä/í b­Bƒc¶IW'±F}úôñi8ùÎßý,T÷Ó7õw7œô‡¿ÄH7ò²Ž+¯G̉ÙòÌ–ç`fé,XþlQʾ}i‹ˆêšc¶‡tX¢Ð1{¶ë»ºND¾ów? ÕýtŒ›ú»NúÃNé†ãÑšŽC;*¯£/‹Æ5»Fy:§0¨õ ŽÙvÒ±‘1‰È[©©©°Ùl°XìÿHd±X`³ÙšÊ˜Š¿ûY¨î§=RS1ÉfC’Å‚jI &Ùlèaðõ '¼&ŒtA®“ÿc¾ò¾áÑš¨¦QÊëèË¢•×¥ù¥x­Ãeø½›îÅ·/mA^Öqœ?}ñW´Â£ÿ}R­„]ïîÂîÿû§vŸBÍù\Ö¾9º]{9F?7ñW´rZ^Ãk¨¦|?ßýý;Úx•Å•ˆ¿¢F͉w'_².¾.+ÿÇ|l_²ǶEI^)¤š:4MhжÉíÐ3µúß5MZ5QÆÏùø¬N_]?“ Ñ—E#±O’ïI¶5tx¦GcÙúºl"r–ššŠÔÔT˜L&lß¾]tuˆB’¿ûY¨î§=RSÑãÂzÉ!´^áB—°””áOo¬|èСN+ŠèÜêÐ뻂}…¨)¯ÄujËÚ7w*?úÝQåµãQ²;ê;¦3Þõêªj•a½nê‰ò‚r,OýЩ#%ÇÎá§÷BÎ'9˜üÝd´éßV)s½çS˜"Ìè?©¿2Ü×eí[µßõ ä:Éiü²“e(;ù¬ÿ •Å•ý|ŠRvàëƒÎáÉ2ªK«·=yÛóPz¢ cçUгmÞ!Í;Ä©^¶¯¸Ÿ^Jô~꩜¹©+gnêÊ™›ºr榮œ¹©+×knF§ËNØæÍ›EWÁÄç¦þ¶¨î®Y’j%ämσía›2lÈcC”×ù;N(¯«ÎU"ùÞ«0âéhݳ5Ì‘fH5uxwä»J§hÈcC0ò™‘ˆ‰‹ÁÆY‘µ( U%UøzÆÜõÅ].ëS]Z…~ûaÜ+×á²¶ÍðÍìÍø~þVÀÖÿÙªt¤š:¬¸i¹OËÚ8k£Ò š°"=S{ "&Ň‹q$ó0ö®Ü‹.)]²’ë$ÜþÑDtÙÍ›¢ª¤ 9ŸþkX È2vþk§S'Ì]¶j–í+Y–ýš>‰ßO‰¹©ÃÜÔanê07u˜[xÒe'ŒÂOÞöú#O¿¬ùsMs\Ž7ræ(\q}wå½ã‘°þ“úã÷ïÿÞiüÿÚ©Ì»ßWâ†7Æ+ecæŒAÖ¢,ÀÑ-Gœ¦kx Õ„å”; Ž~v”Ò s¼>MͲJŽ—(¯7Ìø?ðZ÷l®cº"ùžd zpð%Ü´ôf§÷±ñMpսɸâ/¨­¬EEÑy§rÇl¯S³l""""ò;a¤ înOo2›ßí¶Ãdž çM½œÊ„ {bø%ÓÿôÁÏÊë¡Ó§GDG(¯Ø4¼†jì‹×8ÝÒÝU?]d“úkÕÔ,«Û¸nÈý"pîè9œ;z¿­û Y‹²Ð¼C&~t;:뤌îH1¶ÿ#‡¿9„3΢º´ R­óé„-:·pzïî†'¾.›ˆˆˆˆƒ0®º¬…û دëšyîD5‹ö0•ý¦e'JØožÑîªv—ŒS°·@yÝ.¹­SÙÉŸO)¯ÛôK¬ŸÆáªfmšáòk»9MwjwýtmÔÏSͲn[v6>» {WìAeq¥óúå•`íkñç}É<ŒS—+us§ƒµþ”ÆÙ& n¯jÙDDDD8ì„‘pù?æC–쇇û&zÕœOEl?°LæÆ/:­­ªs:rµíµmÊëä{êïrèx U\§—Ì7ûõw ºòWúµ¬Øø&H}37.œÓ(úõ4|u;þ¹P”{FwÝôuJlü¢ñèwÇ•hšÐ&³ «'¬BÎ'9àtôÊ1Û6W¶qÊÖ—eQàð9a$œÚ ;žŠØ~p’Ëq:쬼Îü[&jÊ«Qv² _>ö%r>þtu’ÓõOŽ×PØ‘^߆ʳ¨<[ožß„ÝËvZ÷JÀ )U/ëHæa,Oý{WîEÉñ$ôjži=Ñ#µ§2ŸÖ=[+¯ ©¿þ¬í€¶ˆm‹sGбé¹MÈùô¿JY§aõ§ºËÖ×eQàðH çt «÷0Ç#aIW»î„]÷Ê8ûþªK«ðÃëÛðÃëÛœÊÛ]Õw~>Ééš-ÇúÄw‹ÇúÇ×cýãë¦kžÔwþ爈©ß…|]Ö¡o#÷‹\庬†"¢#ð»ù×9M±ƒøþ˜÷•ámú·U.4‹Œt:-ÓÝCš}]6;a$œãÑ_:aŽG¯urÔ6¹Úñ'd¾ø-m<ˆ²Såˆj…¶Ú¢ÿWbЃƒ:` ¯¡z ëAl{m›ýˆÑ±shšÐ½oíƒ1sÆ Y›f~-kÈT+š%6Eî—¿áäO'Q^P“Ù„¸ÍÑet ýë0§kÎ&¬HÇ~#™‡ØOݼêþ¸¬m3åáÍí'9Ý8ÄÝ‘0_—MDDDDc*:uÌçùl°­ÂÄÉOhQ24õÏ Ó‹Ã›ãƒkÞ`?òôЮ‡ÅVÈðf‹®‘K«ß]€qiw(ï/˜‡gç-BuU$©²TI’.¼– IdI‚,×Aª³—¤:|ñÙ ¤ÿѷߌ¼&ŒÈÓQ9‡Ó÷ˆˆˆˆˆ…0"NÏÔòá&!DDDDDÞâ5a@O=3îi‰j¯O£†x"‘;ì„‘\ý7FÇìñ<^ëè;v¸ˆˆˆˆ|ÁN ¨¼&Œˆˆˆˆˆ(¨Ø #""""" "vˆˆˆˆˆˆ‚ˆ0"""""¢ b'Œˆˆˆˆˆ(ˆtÝ ›?>233†effbþüù‚jäLïõ# Oû7ûÉÚµkaµZѼysX­V¬]»VûŠyÀïy"ÒŠ®;aV«éééÊ`ff&ÒÓÓaµZ×ÌNïõ# Oû§òÌÌLLŸ>óæÍÉ'0oÞý’>DDÁÆïy"ÒJÄŒ§ŸãëD÷ïC¿Ã5¨Ž³®]»bÈ!HOOGee%ž|òI¬Y³)))š/Ûz¯Q0xÚ<•Oš4 K–,Áرc+®¸ÄÌ™31eÊ‘«FDaŽßóD¡mß®mèÖóJåýömßbôØñ¨««…,Ë€,C¾ð‡ÿõÃeYFî÷¢ï€«}Z¶®„@JJ ¦NŠÙ³gcêÔ©ºûàÓ{ýˆ‚ÁÓ~ÐXùž={0hÐ §ñ „={ö¥îDDá÷<iA÷°ÌÌL,^¼sçÎÅâÅ‹uwŠ’ÞëG žöƒÆÊû÷ï;w:¿sçNôïß?(u'"j ¿ç‰H ‘¢+И‹ç^_<ôŸ’’âô^4½×(<ížÊ_~ùeÜwß}xë­·0|øp|ÿý÷xøá‡ñÞ{ï‰^5" süž' ?/¿0f“ &³ f³f“ýÿ&“ f‡a&¥Ì>ÌWºî„eee9}Ð¥¤¤`Íš5ÈÊÊÒŇŸÞëG žöOå)))X¸p!ž{î9äää OŸ>X¸p!÷!"ŽßóDá¥O¯èÓ"£¢áõt?eoõyY¦¢SÇd_'Ú`[…‰“ŸðyaDDDDDDz°úÝ—v‡ò~ƒm•êN˜ã|¼¡ûkˆˆˆˆˆˆB ;aDDDDDDAd˜NØøñãa2™tûwÍ5׈ŽÈ%æ¦sS‡¹©ÃÜÔanê07u˜›:ÌMæú sM˜Éd²? ͠墈^oæ&¦\ÑëÍÜÄ”‹"z½™›˜rQD¯7sS.Šèõ6jn¾ »kÂö¦õ,##V«`µZ‘‘‘!¬.6l@¯^½ƒ±cÇâäÉ“ªç¥§õ wí*??£FBLL FÝhn¹Xjµb€¥V+ru–K0ëg¤ýT„Phož>D¶7-ÛœžÖÛ_Ë–-C×®]‰.]º`Ù²e¢«¤Z0¿—.¶±¨¨(ôîÝ+W®ÔlYþÒS{ÔÓ~ªõôjèá{!ß…¬¥ÖÐìRIDAT¢SÇd_ÿV½óªd^ìr›Í¦ÔÑñÏf³ù<ÿ@HJJ’È»ví’È“&Mò8Öë¥u¹ ÛÕ¤I“dòš5kdòÝwßírºý6›<¸äo¿Nrñ¥~¤÷ý4åjµ½yúÕÞ–.]*GŒáq\Ñë-¢½5'üñG€çqÑû™¿ßK”™™©ëÜÙIô~ªõôþõ½ §ßwF±êW/éãìÞ¾Iþe×wò¯»·yý×p>Þüæš0æÎëÓp­•••9½ÿꫯTÍGo륵‹9]ýõ€uëÖ¹o³›õw7<Øô^?²3J{óô9 ª~‹-Ìœ9S“ùëu½ÕêÝ»7(ÿêÞ·o_‘ÕQMÄ÷’,ËJnÉÉÉš-Çzm¢÷S­§´`}/èm½©qì„5"''ǧáZûûßÿŽæÍ›c„ €ââbUóÑÛziíÌ™3€fÍš9½oè´›õw7<Øô^?²3J{óô9 ¢~›6mž={œœŒÔÔTM–¡ÇõöÇÊ•+Ñ£G <={öÄŠ+DWIßKf³£GF‡”N…Þè±=êa?Õzú@ Ö÷‚ÞÖ›ÇNX#úôéãÓp­=òÈ#())Áúõë;vT5½­—ÖZµj(//wzßP‚›õw7<Øô^?²3J{óô9 ¢~ . Ý¿®ú\oÜrË-ÈÍÍÅŽ;°ÿ~Ü|óÍ¢«¤Šˆï%I’°iÓ&äåå)ÿ¸©7zlzØOµž>Ђõ½ ·õ¦Æ±ÖˆÙ³gû4<ª««ñòË/î¿ÿ~UóÐãziéºë®¥ózñt€†Æ¸YwÃMïõ#;£´7OŸÁ®ß‘‘îÝ»#==]“eú[o=z€ý¨;vLduTõ½  þDZÞè­=êe?Õzú@ Ö÷‚ÞÖ›<qc¸¸h:¼PX–í9Z,€l±XÜ^$ìiþp1§ÄÄDùé§Ÿ–kjj¼šÆ•@­—Öå¾p×®Ž?.1BŽŠŠ’GŽ)ççç»Ç~›Mþ§Å"ÏäZ,noB *oëFÚOUî‹Phož>‚ÙÞ¦M›&—.]êõ4¢×;˜íÍeË–É;w–Íf³Ü©S'yÙ²e§½Ÿùû½÷×èèhyàÀò×_íÕ4"ÊÕAOû©ÖÓ«¡‡ï½ü¾3 ‘7æàs‚T.ŠèõfnbÊE½ÞÌML¹(¢×›¹‰)Eôz371墈^o£ææ+‘Ï ‹ôilÁ<=Bt¹^‰Î…¹iS®W¢sanÚ”ë•è\˜›6åz%:æ¦M¹^‰ÎŨ¹…¡:azîñ빡ŠÎ…¹iS®W¢sanÚ”ë•è\˜›6åz%:æ¦M¹^‰ÎŨ¹EØß˜#TŸ,.ú‰ëž¦÷·~FªíMkZ·ÇP®ë-šQs7j½õ޹êS¸n—p]o= ëkÂ222––vɸ6›í’g_éÜØÜŒ ,w±^“l6ôðb½üÍÅÓô¾ÔO¶7uô˜›/Ó‹¢ÇÜ|)Eÿ*í-˜í%œÚ›žrEt{ ¥ýÔßòpø^ð•ÈkÂÂúHX¨>Y\ô×=MïoýŒ*TÛ›Ö´n¡*\×[4£ænÔzësÕ§pÝ.áºÞzÖ°P}²¸è'®{šÞßúU¨¶7­iÝCU¸®·hFÍݨõÖ;æªOáº]Âu½õ*¬;a¡údqÑO\÷4½¿õ3ªPmoZÓº=†ªp]oÑŒš»Që­wÌUŸÂu»„ëzëUXwÂBõÉ⢟¸îizëgT¡ÚÞ´¦u{ UáºÞ¢5w£Ö[>…ëv ×õÖ«°î„¥¦¦Âf³Áb±,‹®.ÊT«Gj*&ÙlH²XP Ébñé¦þæâizëgT¡ÚÞ´¦u{ UáºÞ¢5w£Ö[>…ëv ×õÖ«°¾;b0ËE½ÞÌML¹(¢×›¹‰)Eôz371墈^oæ&¦\ÑëmÔÜ|%òzX³§É.×+ѹ07mÊõJt.ÌM›r½ sÓ¦\¯DçÂÜ´)×+ѹ57£0T'LÏ=~=7Tѹ07mÊõJt.ÌM›r½ sÓ¦\¯DçÂÜ´)×+ѹ57£ëkÂH½p}⺧õÎÍÈÀR«³,µZ‘&¹ˆª¹³½©®ŸOžøÛ^üÍ5T· sUǨõ¹…^¤rQ´X¯px⺚õÎÍÈÀrå®n:Âö¸ò@æ. Û›:¢?ŸŒ”›¿íÅß\¹]DÑâó'˜¹ŠÂýTæ"¯ ã‘0òY¸>qÝÓzovSîn8F¨æÎö¦N¸~>yâo{ñ7×PÝ.ÌU£Ö[4æZØ #Ÿ…ë×=­÷i7åî†S`„jîloê„ëç“'þ¶s ÕíÂ\Õ1j½Ecn¡…0òY¸>qÝÓz'¸)w7œ#Tsg{S'\?Ÿ<ñ·½ø›k¨n檎Që-s -ì„‘ÏÂõ‰ëžÖ{Œ›rwÃ)0B5w¶7uÂõóÉÛ‹¿¹†êva®êµÞ¢1·ÐÂNù,\Ÿ¸îi½{¤¦b’͆$‹Õ’,—gS`…jîloê„ëç“'þ¶s ÕíÂ\Õ1j½Ecn¡…wG R¹(¢×›¹‰)Eôz371墈^oæ&¦\ÑëÍÜÄ”‹"z½š›¯DÞÑPköô`8Ñåz%:æ¦M¹^‰Î…¹iS®W¢sanÚ”ë•è\˜›6åz%:£æf†ê„é¹Ç¯ç†*:æ¦M¹^‰Î…¹iS®W¢sanÚ”ë•è\˜›6åz%:£æf!MŸ,NFÂöJäYnF–Z­˜`©ÕŠÜ ï'ÜO]c.äHô~Jêp?žî„]|²xvv6 ;;iiilP¤Kl¯Džåfd`yZò³³ ?;ËÓÒ‚öû©kÌ…‰ÞOIîÇÁÒ0>YœŒ„í•ȳÍnöwÃû©kÌ…‰ÞOIîÇÁÒ0>YœŒ„í•ȳÓnöwÃû©kÌ…‰ÞOIîÇÁÒ0>YœŒ„í•ȳ7ûƒ»áÆýÔ5æBŽD理÷ãà éNŸ,NFÂöJäÙ7ûƒ»áÆýÔ5æBŽD理÷ãà éNŸ,NFÂöJäYÔTL²Ùd± @’Å‚I6zi?á~ês!G¢÷SR‡ûqp™ŠNóùq×l«0qòZÔÇ-=<ÁˆO½ÞÌML¹(¢×›¹‰)Eôz371墈^oæ&¦\ÑëmÔÜ|µúÝ—v‡ò~ƒmúô„ȨhDDDx=ŸŸ²·:ÍdžzX³è'ƒõÁt¢sanÚ”ë•è\˜›6åz%:æ¦M¹^‰Î…¹iS®W¢s1jnFa¨N˜ž{üzn¨¢sanÚ”ë•è\˜›6åz%:æ¦M¹^‰Î…¹iS®W¢s1jnFaøkÂøDv"""¢ð’‘‘«Õ °Z­| p0÷À1t'ŒOd'""" /HKKCvv6 ;;iiiìhŒ¹–¡NGl¨±'²ó‘ˆˆˆ(¼ä¸ùçn8F¸äþÌß^d²,C–%ûµqÞC–!Cd(eçÎ ã“}^Ž¡OGäÙ‰ˆˆˆÂK7¿óÜ §À§Ü««*PUyUå¨<_†ŠòRT”—à|Ù9œ/-FyéY”•œAé¹"ÕË0t'ŒOd'""" /³ÝüÎs7œƒ¹–¡;a|";QxIMM…ÍfƒÅbX,Øl¶¹.I¯˜{`úš0ÀÞ둚jžÁöí¢«CDDDDKMMEê…ßÛùû/hÂ-÷Ï?ÏÀðáÃвEœ2ìlq1¶nýãoç×¼ Ó KIIþdðÆÊ‡Úè´¢07u˜›:ÌMæ¦sS‡¹©ÃÜÔanê07}øzÃFÌ_ð:>ùh%Z¶ŒÃÙâb¤ßq7ôï>°Í›7‹®‚!17u˜›:ÌMæ¦sS‡¹©ÃÜÔanê07}Xøú«˜:íq\wC*n=2¾\aC¬xõ•—È~ÍÛÐׄiÁl6ã×_ŰaC±äÍ·1|¨¯¿ú²ªç‚5d˜#aDDDDDDÁd6›ñÆkó1|¨·O¸&ìÏ ów¾¨QH2›ÍøÃ·ä˜2π͉ˆˆˆˆˆÈ L&jkª|šFª«¿Ç‰Kì„QØ‹Áþ}{|š&7çgDš}¿Â‹×„QØÓíØôU""ÍèÐ¥"¹M¿$Ë(*<…¼ãG1bì>/ËTtê˜ÏW–m°­òyADDDDDDz2.í§÷‡æbGÖVœ)*€ Àl2Ál6Ãd2Ál¶¿6›LˆŒŒD|ëD\y•I»ú¼\U0""""""R‡×„;aDDDDDDAÄNQ±FDDDDDDì„;aDDDDDDAÄNQ±FDDDDDDì„Q¤è „$¡²ò<êêêÈ¢k£s&˜#"ФiS4z\F–QS]…šÚÈ’æêŽ &³‘‘QˆŽ‰`jtlvˆˆˆˆ($œ//Åo¿ýÛ·}‡ªªJÑÕÑ1bbb0tÄhôè}%š4iI’\ŽYYQŽ£Gâç]?¢àÔ‰ ×Ó8"ÌhØW ²¢óåW 6¶)dÙ}‡•0""""2¼ªŠó8zô²·}‡þÉW¡s—+Û&SãG$‘ ;³¾Å÷[6£eëvèÑ3çË.¯¶º'Oæcû¶­H½õèÜ­'"""aòp”'ÕIuÈýå'¬ûücÄÅ·F§Nñ¨®vÿì„‘áÕÖÖ`Ûw›qå€d\~Eož8ŠŠóeg-ââйsgløâSôê;Àå8Õ5UØõã¸iÂ$téÖ ²,Aª« rM£GŸ¨ªªÂ÷ßnÀ¤ûØ #"""¢Ð&£ºº º\‚ü#6öfÑÒµM¶åhÖ´)ªª*ÜŽ#KŠ O¡C—+ IuìÐz¡}§®(²}³¹ñû²FDDDD!Ál2#¶I3TV”C–]_ãDõL&̦Æ: 2dÙ~½S]]MÐêed‘ð¦¯ÊN…“Ù“ÉY–/ÜÉ<1™¿¾Ë^Î<½%K’ÇLvˆˆˆˆ(D˜nÂÁ#aÞ1{¸q‰ùb§–yzE–%™ì„Qˆ09uÂôyýRÓËZâ|Y±èj(<Ý=òb¹^ó ”@mY–½º#gãWŒ„§›!×_®Ã`ËP´lÕƒ-C±nÝzÑUj”§Ìéúõ_aȰ‘hÙª ®ì?ÿ·ly@ç¯Þd&¾¥€ÓYúßöíÙøó£aÁüWp*ÿ(Ì~ô1dgg×'¨n—ü¹ÊÌ]¦Zæ?dáá??Š—þ6'Žaí>Æw[¾ŸE@·‹çLvˆˆˆˆ(D˜nˆ ø{uÁë˜;礤ŒFtL RRFcö ÏáÕ •që¶s×OèÞ«/–¼ùVÐëê*3w™j™ ^[ˆçÎÁµã®ETt4.¿ür¼õÖ?”òƒ‡#}âhÓ®#âÚá–ÛÒQPX¨”7m¥ï¼‡Þý E«6:b4~Þ½G)¯®©ÁŒ™Ï¢S×îhß±+ÞX´D)«­«Ãó³ç¢óå=кM{Üsß”–•¹Ü.þþyÊ`'ŒˆˆˆˆB„Éñvëަlû! 7üî:§a7üîwØöCVý° uûòËuøým·ãõóñ—G ~}]eÖX¦Êçúßs[ž~ûðèŸÆáƒ¹8|àWôìÞ3žyÖ©Î[¶lÁƯÖ!ïØ!Üœ–ŠG§NSÊ_úÇ/¿ä`Ûw™ÈÙûòòò•²ùó`×®Ÿðý–Í8|`?bccñÜó³/Ù.øó”)ÀsQˆðæ40-£U«VNÃZµŠGq±ó Þþç¿0ÁkødÍ* 40˜U¼„·7æ„sçÎ!>>ÞmùŽíÛ”×MšÄbΜçѧ_²Ó8 _{U™Ç´iSñ÷ÿyU)[¾b%2>ÿ:tH¼ò÷—”²þ½ k?ûX){qîl > _{æMfì„QHhx:b°µlÙEgÎ 11QVtæ,Z¶léTŸÅKÞÄ]“îÄ A…ÔÓ‘7§#ɳE‹8sö,\–gemÇs/ÌÁîŸw£üüyöã²[ÆÇ+ï›4i‚ÚÚZåýÉ“§Ðµk—uÍ?qƒ­Ãìë"Ë$é’yby:"…Ñ7æ:Ä‚uë¾r¶nÝz bq:ímÝ—Ÿã“O?ÃÂ…‹„ÔÓùtÄàݘcè+¾þz£Ûò»ï½ÿéäþº¥Å§qâøaÈ ëìj=.¼n×¶-:ìrÞíÚ¶EÎÞŸqîLJ΢ì\J‹Okt:";aDDDD&o . øûëôi˜ó·±ùÛ-¨ª®Fæ–ï0÷ÅyøëôiN7€HJJº/løàÿ–áÕ× ©««ÌÜe¨e>þ×ixaÎ\lüf3ªª«qðÐ!<ü—©JyEE%bbbƒÃGŽàÑÇþê´-]mWÇa“&ýO<5ÇóóQ|îfÌ|V)›2å~LöWý‡˜˜Ûº{õúýàáVìOÏÈ¢ÍËPXX4gÞB[{GS‹Ž#ÇL8wþB‹ŽAú,m&"é·2–­ˆ_›ýäð¡×SSå¤ óül¬­Ò®ÿ›ýâQhÈÊ_öì“ekðà ´—ˆ$mÛÚ¿_eek«íI[¤·ä.^öõ`lnãìæ³ïÀï‚EzF‚x`/•Îçó£¢cº:›Yuš·  ®®®é14=$á‰_öîsvó16·é;`èƒÌ,*Åb,2·¶ïÜÍ%yû÷RÊ "ï{"éöo~þ€Àe«‚—ç¾|rê䑌Œÿ|yq¾ µÞ¸©¨¸8ãfÊ­Ô”W¯_ÇÄÆ V/-+˼{kMhðü…%¥e÷來 [»¾éŽœzôX¿!6'7O$}kÒö»÷î_¾pæIÖ†#2*¦é14=$a®_O=sêØË§Y#† ZB%ÆÄÆ×ÔÔܽzíß ii·¤”¾hÍ÷Þ M­ ó_Ðéô¦C ÂÌöpñZøíðaCLMM$evtrÿëØa[[„Ћ/ÇL˜’y÷•íù“L6‡cjÑQ0miãPü:[䊊Š7Æ%\¸t¹®®~@ÿ¾Q‘áf¦¦!g7Ÿ#‡öÛÙuD•––õî7èqæ),2+8„Pcc£µ]Wj×Ýœ=N8jme‰ÊÎÎq÷î-¥¼ ð(IYVQZ”—ý¤®¦ !Ôkàm-­Êª*}=½fnzï/»6'ÅÅoÑÒҌްnèàAMó”––YYYRÓVV–¥¥e‚EÔÕ«ª¢"<ÍãñšnÄØØ(ikã~ P×Ô²´qÐ50nˆTW–¿|úÀÁÑMÏÈTIY!äéá~éÒ•É“&ˆnBI©±±QMM !TQY)Hwqv:°ïã // Z1ô10ÐÏËË·±±FåææéëëÉRf=]ÝUÁËm:u¥f Ï>abbܶ5k` Ÿÿê5å‰äç¿’RÞÁcg‰|¾$¿²´øá½4U5 -í‹HÎó‡Ý= Í9l‡ÃF/]0gÞBCCÞ=½_¿.Ø’˜¼-q3BÈѱËö?øWUU¯_'ØÂ|ÿE+–/³±±Æóy|*Q[[ëùóT!4nÌèÕáë¶%& „BÃ"ÆÝŠ¢N›1;0`¡»›K]}ý?þÜÍÑ‘JŸ3{FЊÑë-ÌÍž>{¾ekòÏ»v6=‘Ù2~ìèðˆõ‰[6!„„Çhš–·¡®NDà³FMCÓ¡›[ö³L'Ï>$Ÿ'Þa‘´r}M•ž1›ÍâóycÊIܼ)"rƒ•ä©3|}¼©œ‰›7>sÎڮ밑ãz÷òlaذ!³æÌ·°¶ŒŠùag2•°°ÿà‚;a«ƒ ôݼz»yõ666ZÜŠrÎùzæÆ¸x»®nž¾YY~úq•¾tñ"oOq¦š[wZ°0pĈabAdöƒ¬^µR£C‡.^={pwwQVV’R^ø¼ÁX]S«¶ºBEEUR‰«×.œeú¬ÿnÝ€ª˜7jP_Û2O!„h4P±¬ ¬ªª.)) _5|ØP¨@ñ‘|_Þi ––æž>~îÞ½µµ´BC–C…_2JP­Àþ\ÿùs¡<@DD@DD 9À«r Æ\›Ëãb’D^_Ú ”””UTU¢É²!y„ÕXŸ—ûòÞÛ%Å…P@{@'èz†Î®–6 u,ë¶ "rÃ)**HO½>bÜTK[{:]‰&[CMá“ügïžýë¨SÏ‚Éá°@D—}çöÍQ¦[Ù:`LJúœÈH§.=Ølö” Óg"DVåL’%%fVI’O’䨱ã1Æðÿíñoba]Q\L2é€Ô/› _ ýøÔ×VýöëO+Âø|î¸ñýyêν´K~#9솖®X[SýóöØe¡1õ5•R²IWèÎÈ#@c’üóȘ$¡B€fú°")Tô]&³iæñ&ýyô0&I‚&kwDD¡4Œ1Æä„‰SŽ94KDð{"RYY9|ä„ÐéS'˜Mtäè‘C““4BÖa{™Dˆ a+ò[¶…'BCaŒ>ˆß¢ÖAûÿÛƒ…8wîµÚ¸åH_ëìÙsžÞ¾ÚLÇnοî;€¹ç­ˆ¼£¢¢bøÈ1UUUUUUÃGŽ©¨¨YeüÄ)ÔAû¤"B…°gÛü œ€4«¼èš0iªpúî_öðù|Áì–­Im¾ë›ii GGE–½:yòÏk×®9>;*++GŒëÔ£ûý»·ïß½íÔ£ûˆQc++ßõ8zø ÈÉöiDD˜ªªjû.NåÔ,—Ësèê\VV¦gd‘¼ý{GskûÅË–³9*ŸÏŠŽuèêlfÕiÞ‚€ºº:°ý»î êÎà#ü.ÜÚôêåûÇG¨Ù3gÏÙÛw´?¬€EKŒL,ŒL,.mld½õVλyxk3 :wíþËž½cu „º†Žº†NÓ6móæÄ¨Èˆú+++ÛX[ÿðýéÛW×Љ‹71³²éhêïÓñ [Ì,ll:Ú_ºt¹™¤lù§Ÿÿ×¹kwm¦wÏÞ÷îÝ£™žˆŠŠê”É“¶oK¢Óét:}û¶¤)“'©¨¨ ¯2á'‚hŸÖFGG{ܸѿî;ðf8÷ú WWg}}}„PêÍ´ëÿž¿›q£´´,6.ʰ5iûÝ{÷/_8ó$ëCÚ!䉼±ëÄ÷=ÿó6oM¤Nš˜q‹¾,ŠŒÚPXTøàÞíûw3ò_½Z¿!šJŸ·`aØšÐâÂüΞNOÏ@Õ×VRÿÔ„©7Ó† ðTÒöB¥¥¥Ïž>ŒX6gμ’’’'3#Ö†…„®if)[NI¹vñü¹×¯rF¸dœÍD]]mÉâEƒ ˆ%‹©«« ç9òΑUDÚæ¯ž‘Eyq~NnÞ˜q“3Ò®)++­^ݳ§÷ø±£õŒ,2n¦ØØX#„^¾Ì3aʃ;é!g7Ÿ#‡öSÁ+KKËz÷ô8ó˜!T_[uâÈÿ .»Q8½ƒ–n}MÅä©_MŸ6UEEy×O»ÿy˜JDÙ9t={ú/»ŽBÏž¿>rô³ÇY!‡®Ýƒ–-5b„™™©È¦Äî]‹iPYVD§ÓEÒ%m¿ƒ–î«ÜL&“Íf똦 M,ª+Jš“áƒ[F546š˜YQù¦dݹîá7²¡¶²ù«Lœ<íÈ¿×ÖÔÞÿÃü¥a²Üâmˇͬ­,]]OžúcœrýÆð¡ƒ©tKK ÁDII)5]XTÔÓo€¡©µ‰Uçn.eeåp*¼ç‰`Œ1ž8yš°ËŠ1^è?Süæè˜ØE ‰ã’’Rk++jÚÚʲ¤¤”š>°oïÅ‹—½}ýºõpýûôáM‰E[[»é œ”í#„ttt0Æ***ÂÓ<¯™>¸eŒ±ƒ!È|°;SßмmŸÏ§fù|~ò¶õ «>ôÛ›UBnº3þ?îÚ}+㶇»+ƒÁ óòÞ8;ùù¯ ô©i#CÃ{·o–䔿–ç—åvÝyc—Ç~YÔ¯o›ÕÈb èßO8ÝÐÐ 7÷Mæää êÙÍÕåƒr_>Mˆ]¼4胻ööò<áRÓtIÛ—öÛò ›Å:ôÇáÀ%Ëx<Ç \²ìЇ٬÷lŸ4eºÈÉ&/"âæê¢¬¬´!&nʤ ‚ݵëËÊËËÊËׄGN?–Jœ3{FЊìœ\÷ðÑãy Àöï:™ #„1ž8EÔÁg¤ÝÈH»AÍ 'Œ·rUhIIiIIéÊЉãÇS鳿™÷èÑc‡ƒIÌãñîÆÓ§ÏĶiß-[²6"òâ¥Ël6ûåËì…‹¥o_¸;ýÁ ÍÙ²tï ñDtttN?zÿþ'WO'WÏû÷œ<~TàÖQüqðÍÍ{š¼y"¡À€…Ù9¹¾=})^^¾~Ý|˜ºÌÐTâÒÅ‹¼==ÆM˜jnÝiÁÂÀ#†vy"oìzøàoÍ\eíÚ5††=\Ü{¸¸‡‡¯¦ÒG >}æ×F¦–á‘?ïú^Pù½ûÐÔÓæ{yynKN 01·;aR¯^=¥o_vÚoË_2L&óäñ£Lm¦ŽöÉãG›>l6iêt‘“í¬ ³ç×ý¹¹yoOǰڢÕs§ŽÌòf7ÖOž6ãß÷CÒyü ÍÃodme©H:õlSÜcïµµ5§í›é¿RŽÞ©©©ýþÇŸþì*ãÀ*Æ$IòØK’|¨ 94=U´µµÄ¦#„¦NŸuð·_I’/ûÀj[Šˆž‘A7Dššš€EeëÎc’äO›1û÷ý{ BéØuq©,}Ý¢U~Ûÿ IòÛä¼¶)/Î/-Ì7w¶H"ظ¥}L:N’|’Ï?°w÷Ô¯¾&ù|ø‡ÿöøçñ¸MŸ úôc"€Œ4Ô×ÞMOqptÑÑ…›@ûRŸ›ŸûlÀÈ©uÕò2&ÈŽ²’rGÇwn::{êèÐáës@;ÀGdUyé‹§ÜzöçÉðmD¹UU=Ãîî=ŸeÞ©©ª 1|”h{¡¥£ëäÙÛÀÈŒÕ Óë¯ "ò8&Â`¨kh1Í­ìeM$A’$ŸÃ–QA@DäŒ1—Íâ²YPÀgàÔ@"ˆ "|ÀÀª\‚1—Ãæò¸˜$ÂP@;@£„’’²Šª*’-Ø3ˆˆ<Âj¬ÏÉ~q;#½¸°jA'$.¢t}C#7oëŽv †ºà£$ "ŠÃ),xz-eЈñÖ¶t:Øh% Q!q;Ä."Iþ“¬»§ÑfêYZ192<´ '¨ÜÁá²o¥]6vJ×î.P€, “$Ë»ÔξëÀ¡#S®ü3kþR"¢H`’,+.11ƒX‚€Ì"B£aL <ÁÐÔ¼¬¨HÆ£áîŒ\Ê"¡È 0I’|õËÉÎ6|dNv¶ … ÑH™GîADä´JÚÈÁ$É'I~NNŽÀ¢þýúú,ÊÉÉ¡I’OÐäïCÍmÙûóŠ.ûÑÊþn@oâ±¾ñDbãâw$oYºøÛÉ[bãâ©DÌçËEÍó.õé?ÄÄÜÖÝ«×ïv°ž‘…ž‘…‘™£“ûÜ2³>¹x‰|±îôéÓ}úôa0zzzS§N}ýú͇ð0Æ!!!L&SWW744T–»t€bz"å‰$I&'&˜›™‘$inf–œ˜@¾åÓ¯J¿•±$hEDøêÜì'‡¸žšú9Öuyq~aþ‹‹çþööô;aʽ{éŸÊö³ Ë–-+**ÊÉÉéÞ½û¤I“¨ô]»v]½z5+++33óÊ•+»wï†Ëi“<í+"IÛvF„…öï×GEYÙÆÚj{ÒÁ¢_öîsvó16·é;`¨ yg³Ù˾ ¶¶ëbm×%hy›Í´ùßÿøSwO}cK„›Ã \ú¹µ}çn.Ûvü Øæ…‹—}ý›Û8»ùì;ð»X7„ò,¤ïNÜuKÍŸ7'4xEü–DODì~õŒ,’·ïàèbnm¿xÙr6‡#²ÍœÜ¼¯f~ciÛÙÔ¢ãäi3ËÊʪªªí»8•W¼‰ƒËåòº:‹õB…g/]º4nÜ8MMÍï¾ûîÎ7A‹÷îÝmjjjjj½gϸl‘1„±ôß§IOÏ8°¿ØEׯ§ž9uìåÓ¬Ç-¡£7n**.θ™r+5åÕë×1±ñ‚ü·oß¹|á Oscl|yyÅÝŒ)—ϧ\».ȸlUðòÜ—ON<’‘ñ_S‡‚úxRv'‰Q#‡§§gˆ$JÚoêÍ´ëÿž¿›q£´´,6.Ad­é3f/ôŸûôáÝÇYwí:v [»^GG{ܸѿî;@e¸vý†««³XE{lõõõIII  f³²²ÜÝÝ©i77·¬¬,¸lÑ1„¤ÿd‘õ>buM SGGì¢øM1Ô¢Àÿ„-ITâÑc'þ:vX__!½~Ì„)‘aÔ¢ ë#ôõô¨é#dÛ¸!Ò³g*Á`—”—•››™%mý°"HÙÄ!=ÝêÑÒJÚoLÔ:jã1QëÆL˜ñ~ô¶)—«‡¯ qvóA}ë?̸Éß*++ý}ú줉ã?è‰'^¿þFUëêê444¨iMMÍÚÚZ¸l€¦ýâK§%ŽTzöòéãÎhkiUVU .~a⢦¦Æãñ¨éÒÒ2++KjÚÊʲ´´LߨØH0]RRjii!È&HßûË®„ÍIqñ[´´4£7¬:xôÓ²;‰ã#å:ÚÚ"‰’ö+8HKK‹’’Ò¦F‘Q1÷d544TÀÚÊÒÕÕùä©¿ÇrýƆõk?8&B1®©©IJJúæ›o®^½ŠÒÐШ««ÓÒÒBÕÖÖjjjÂe¼ß!ÂGN‘”¡¦ªòÓÇñôp¿téJóóèçå½ékäææéëë‰Ífhh È&˜@¹8;Ø÷¿§îÅÆD ºH²ïN˜¿NöòòI”´_ÁÆóó_5 gÿÍüoçÍ“u/£¬(/çù#ÁÝ“Àÿwí¾•qÛÃÝ•Á`4ÓAiii­X±"==šuttÌÈÈxÛ¼íèè— ðÞ‰DÐB|>OÒ·Åó²ŠÈÒ%‘6^ù7…Ãåfçä.^¶\zþqcF¯_WVVVVV1~ìh±Ù&Œ¶v}YyyYYÙêðu‚ôùþ‹ž<}Æåñ0Æ|ž˜‡yµµµž?ÑÒÝ!„H’,..ùy÷ž¸ø-+¾[*²TÒ~ßdyùšðȉãÇŠ¬Åjd1TUUª¹yùA˃én®.ÊÊJbâ¦Lš Á }Ï.³fÍzôèÇ+** óññ¤‡……„……Íž=.à}O„†0’6°Šä``ÕÓÃ=qó¦ˆÈ V6“¦Îðõñ–ž?lu°¾›Wo7¯ÞÆÆFkBƒÅf[½j¥¶Ž¶“«·oŸA¾=}éÆ ™5g¾…µ}dTÌ;“›®°°ÿà‚»*ÍÜž‘…±¹m¿AÃRÓÒÿy¨G÷n"$í×ËËÃ×o ³›S—²Bd­äÄ„°µ‘ÖöcÆMöòô9Îìœ\á¢IñDF5uêT555''§òòòC‡Qéþþþ½zõrtttttôóó›;w.\6ÀûžÈ» |IPp~þ+Êk^,6O+÷ðZž‘E«$ÙóëþÜÜ<‘XŠúÚª“GÌôÑÒÖJdaç¦Õ_/\Y_SÊõjIPp¿¾~—¯\MÞºÉÂÜ!TWW{öäs—¬©¯©”²éjïÎ|jjj¿ÿñçùsçH€6Á˜¤Þ‘135IÜ{ùÊÕÄͱf¦&oß!iŸüî Ð ÿ… ˆ"MMM¤Ø* h“1ê±wjÖÌÔäðï{B‚L’ DäÓѺ¾L3Ö¢)Ñé¤äo@@³=‚z‹WR’Ï£+É* "òhx]}ƒ²²B]=¨ @FO¤ª¼PJ†ÚºZ]}Cc"¢ (+)wîꔑr^¡fbfMÐéP'@+E„ ÑéÊbaŒ«ª*^<¾ïå7˜Ç‘)`+ˆˆü‰ˆª*ÓÀØÅ«WzʹêÊr[ à‹öjiÄ?§KÐB›©çÚ³Ÿ¡‰…Œ1½ADäÑô †º†ÓÒ¶3AÀm õpÙ,eU†¤¥$Iò9lDDNÁsÙ,.›UÈ‡ÝØî&¨e@DD@Dà‹  6ãrX\6Kzð5 ©¨uP’ð?_¶ˆ°Y™™™i7®HÊ@WRòðòõí;˜Ãj”ÛŠå3eí½5PpÁe¤][™¨Êÿ”>›ÅŠ_¿¢ïàÑ’DäÜù ë£6¾|™mkk¾zð íZæó.mˆ‰{úô™™™éò ¥Ó¦N‚óZMÛŒ‰ðù›Ï}€< ] Úà‰U yxûÆG­àóÄ?QFWRòðî…0c€âÑ"¢ª¦áÛwHßÁ£¥e˜ËaCuˆˆ8Gƒ®Äa5pX m~pЗù¾'ˆ "€ˆ""ˆ "€ˆ€ˆ""=# °(šˆÍ™·ÐÖÞÑÔ¢ãÈ1οðÉ…Fø ò."óül¬­Ò®ÿ›ýâQhÈÊ_öìûä%,/ÎüÀÞ ï"rû¿;Á+‚ ôUUT|{z<°—J—)&'7ï«™ßXÚv6µè8yÚ̲²2# Õ…Ëå…­]oßÅÉÖÞqÇ÷»»û`”±.†ð–Åå†;/>>’ˆ8õè±~ClN®è—“%EŠ™>cöBÿ¹OÞ}œu×®cǰµëßé‘PT—¸ø-Ÿ<¹rñì[©…‚<Œ2#^é„¶,öÀ(ŸEØyð1 ‰6ø<¢0EEÅã.\º\WW? ߨÈp3SS„³›Ï‘Cûíì:"„JKËz÷ô8S4Vfcc£³›Ï“‡w)/ ë^† &CwÏãGvìh+âS<ò€ŠóÐØØhm×µøu¶ô¡òâ|‘-K:0‘/3öpñZøíðaCLMMा4Ú÷óˆ¥EyÙOêjªB½Ž166¢B4•WT$oÛ9w~ÀÙ¿£·‘bBc’$i4µzú­ŒÈ¨˜û²B‚tô~T—ââá`.>e‰û²‘ð–%˜{Ù•°9).~‹––fô†uCºváœ[ÀgÜ¡êšZ–6ºÆ2nJ&©®,ùôƒ£›ž‘©’² BH Uzºº«‚—ÛtêJÍž;}ÂÄDôp¿™ÿmTäÚýújjjÔÕÕ[Ûu»###ÃÜÜ<O¤Mt`"Pác0Æ.^^´bèƒAƒÇ΄ø|!I~eiñÃ{i*ªjZÚŸLDrž?tèîahlÎa³86Âxڌ٠ÝÝ\êêëøñçnŽŽTN*RÌÆèõæfOŸ=ß²5ùç];B¬FCUU•¡š›—¿!:VÒŽ¦Nž²:›Üç†1Éçó%e045/+*"Œ ÆmÁ®å¾r0‰HptÛ¦ÛL˜$I>úådg>2';[BÐhäGÝã*‚q?ƒ[¼§HÛ5V˜$ù$ÉÏÉÉñXÔ¿__ÿ€E999T"Iò?rmƒqÀ¸ŸA#@#à~½lmmZí‰PÊÅçó³²²–-[VRR²uëV0hWE!´`Þœuëc¾Zb€ËæDŸ)¹††F]]––B¨¶¶VSSN f{¼BxàÈ)’2ÔTUŠŒt6Ó¦’‚5bý† GíoŽq¥C§Ó{ôèñÛo¿uéÒD¤Í+wÝ„P¿Þ,‹ÕØØ¯¯ŸŒ~šð¬££cFF5}ûömÇ·¡m€×$ACñù}ú888lß¾¬ùÑŒûiÆDÄ> "Hl:!e­¦Ýf¶iÓ¦M›6ÁyÓŠÆ cŒI!´"(pñ²ýúú]¾r5yë&*“¤¤ÆJºM‡2|ØAúüysB'½äóíéãÛÓçƒÆ•ô ȤI“&Mšl'ã*¾'ÒN£A_f·c’zÂÌÔ$qsìå+W7Çš™š¼}½‚üÈÏ¡ƒqÀ¸ðîÌ×X F%ÍLMÿ¾!$Hi¿Æ Œ«ÀÆ•¡)Ñé$<\ÔFÝfêEOIH>®¤Æã*”ˆÐBWß ¬¬PGWNÙ«ªòB)jëjuõ ?Ú T0®bWÞEDYI¹sW§Œ”ój 53k‚N‡Ó¥õçA£Ó•Å.ÂWUU¼x|ßËo0ï£|Œ«0Æ•{QUe»xõJO9W]YOÉÔòÓˆN–p ÚL=מý M,X u`\0®B‰0êZLKÛÎíÛŸŠ —ÍRVeHì3“$ŸÃþh ÆUã~wg0Æ\6‹ËfÁ‰";v#ŒÛÆ=)¨z>™ˆ4BÊ-%䓲?ï'Óú´tª+Ê|œ >Oj«*;hé Ù¾8)“ˆXÛuÍüïFuE9‰a\>3¤ª¼ôÙÃÿlºËx_L¦Um¦ž­C÷Ü—ëª+áþ|F4B]KË®³“¡±9[¶mYïÎ0õ ŒÌ””U‚€~ |N`L’$—æ¢Õ|2Añx\ €/Ô©*D@D@DÞ‹5ãý‰Ëà½P3Þ¯‘("ð^ €Òœ÷kh’BF!„*ËKòsžÂ{1ðeB½_cmÛÅÄ–ÍfIz:^šˆ „”””á½ørÁ˜$I—#åÕ–¼;ïÅð‡ª@DDD@DøJP@Ë I«Ïç#„´„4‚NWSWßÄbÌå°¹<.&IE¬ ”””UTUjî›. "@Ëh¨¯}þüqzê5#ÉíU¤ªªêíëשs75µM_=e5Öçå¾¼w'£¤¸Pñ O'èz†Î®ž–6 uܼðš "@ `76äåeßJ½ÖÝÉÙÒª£*C¦Xofb„ÿK»z#劎žq'{ƒÆ†:á¥<§¨¨ =õúˆqS-míét%R¨âóIþ³‡wÏþuT‹©gaÁäpX "@ÃãqS¯]éÖÃɦcçÒ¼Ɔ:ŒÍ¥×ÖÒ²´´¼pú˜C×"‹8\öŒ›£&L·²uÀ˜”1pœ|Ò©K6›}ãê…ésˆÐM5‡Ã¶°êXRëÓ´B–ðÒ©ß:¨«³Ùb O’å¥ÅfVI’¯xê)ÀĺüÔa‚hî] e4‚¡ÖÕX÷“w4MÂWE1ƈNÐù|Eþ>†Þ"…Zx4†1Æ ý½;A“œ®àeÇ$)©ø "@›x"´·2ù%³i:ÆX±ËŽ1IÐ@D€ötõßyöu †ºª\L±éŸË€Hëj cÜ¢›nðÄ*ÐÂ&šh÷sæÌ™³nÞ:º†nÞgÏž“«bÊRüsçþñò饣kØ­»Ë¾ý¿)Œ•AD€Ö6Ñ·Ç/=ýV@à’ÍñqÅy›ãã—ܺuëÍÒvÛé{¿z"­ÚìÍ›i £×¯+)Ì?yâèµ”k©,­Y'´kõ¶;Ó>¿„Í[#×­íÓÇOEUµO¿ˆµa ›ñÛ'Ì©‰ÿîܵsèº}çíq"ÅlZüÖmvó–ĨÈuPVQ±±±ùá‡TúËœœ‰“§›3õÇŒŸXRZJ¥«k2ÚýKgÇÚº†Þ¾~÷î? Ò9\nHè k;së¤äíT"ψ´´é¤gh2köÜÚº:‘ké @D€vôDˆvõDRo¦ ~ó;wo¤\Éyñ”Á`„…GÈè»Ñh-PXÚfı­¨ªªÒÕÕÌêê2«ªÞ þ¸ëçøÍ[þÍÕÕ¬bŠMoÅÞµµµ+*+õõõEÒÓÒÒÃÖ®»ï~}Cuõ 6®Ãdâ7ú¢Æãñ¨é¢¢bkk+‘((,tóôAaŒI’ÞH+º3Àç=°êíåqöì?‚Ù³gÏy{yœó³gþúóØñÄÄäÏn`ÕÛËóüù‹MÓg~=gá‚yÏždÕV•¾ÊÁ’ÆDßÎådçˆlÄØÈèQæ½êŠ’šÊÒºêòÚª2™»3 "@;6ÑD»¬-[ºn}Ô•«)lçß”k‘Q‚–- šššž=}jï¾ý [ÛéDŠÙ´ø­ÛìwAK×®‹¼xù ›Ãy™½pÑb*½±‘¥ªÊPQUÍÉÍ \„„C䨨‰éÓ§._òª  ªº:$t •8wîœÅKƒ^fgsy¼Ì¬‡_Ï™'óÀ*Üâ>[OÄËÓ#9qËŠ•!Ʀ–ËWoKÚêéá.Ü®š9uò÷ƒ‡âââ?'Òª²{yzlKJ [kbf5vü¤^¾=©ôÛ“V­^cdb1|Äo/Ïw—à‰„†¬t°·÷éé×­‡«¹¹•øÝ²%>Þ^#G346ÿfî‚Q#‡LOä½@˜úÚªsî7dìóGw|ŒQÈ2^¿x‚Íæ”Î\\_SÙ´ø³¾]Åa5(°•kkjþ>º§iña`h#ODÐQðð‰éŠþò!Æ$€[¼@û‰¼utI’ÿ%³i:Ƥb—$ùðЮMô!"R>€1Vì²Ã§€ön¢ß8º$_/$,á£D4%B‰$ù ]vÄãq•ˆ(ˆвZUEõá½4•Œµ\.WU•!Î !ttõ^ç<ÓÑÕW`×T–ëèé“Í÷[¼@  Óé]Üêkk8\Ž‚ÆÁ.‡ËfyöÈãqD–)+)Û98fÞ¹YQ^B"LC4û‘W”—¼|ú ‡[O§¹!Aà/Ð"H6›]UYžõ_*‡ÃVȪ¨¨öðèmiÛ¹¡¶éç|0›Íª««y–y§¦ª‚T¸ï›4BKGס‡»‰™5ëýp "@Ûg¡¢¦N§++²Rò¸.!¦¤¢ª¤¬ú>ÎôiÊN’|›ÃiAd2dkW  D@D@DD@D@Aù?Ì×UÕ3F¸ÄIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/ed_lyrics.png0000644000175000017500000002261311273045225024373 0ustar julianjulian‰PNG  IHDRÑÅ„‘_õsRGB®Îé pHYs  šœtIMEØ 'èˆÀ+ IDATxÚíÝw|eþðgfk6…´Mï „Ð!H³  9DÅSš§R¨ B ´PNÅó¸ò:OäõAù¡DB“$ 1Ùôl*)„lùý1°†mÙìf“ìòy¿òÊkv÷™§íÌwŸyvg†bY–@· Ñˆ¹ˆ¹Ð•1wñbBQÄͼÿ>ùôSBQD ­­è)èí·FBHD¡(âîNÒÒœ¤Ez E„ï¾#ƒ9ÏVN(ŠP9~¼K²§Œ‡–›Ky„´¶’âbò‡?K—°ûCÑmœë×É AD¡ “´Hï¡C·¨¶– B^{¬]ë [\N‚ƒIS¡(;Ï-”—“!C!$+‹Œ‹½z’nk$„(•$3“<þ¸\½>tèýéOD.'3g:ÉV——GZZˆ»{ˆðõŸ(*"ÑÑ„Ç#Ÿ|r7æ>ù$özèz[cC™6“¯¿v’é=tôíÞMŽ#}û:öGHûMX–\¹BâãÉ;ïtMþ¬¡¶6vÿ~ÖÓ“eY6<œ•ÉX€ž¢Û ÙØXvÅ –aœ¤EF:t‹üüXBXBX>ŸU*ä=R©Ø?f~¸«ò¾?æJ¥,!¬HÄ>ô{èëêʾÿ>v|èz[cdäÝý™öæMgh‘ÞC'hð¡¡ìéÓγÕõéÃÒ4;b›—×U%P8  Ûà÷¹Ý‡ÿÑGqK7nÜèß¿?zzçÛÑ"´ˆóÛÜEažz çÛÑ"´s Ý 111ss11Àùýv!¤ý2@Ïr¾­-B‹ÎCƒÞ ç8¡EÎÚ"Ì-tÄ\Ä\Ä\@Ì@ÌÄ\Ä\°ÔÕ«W8vìØêêjBˆL&«¯¯G·8œ‡æxþýïçååB/^<~üø;w¾õÖ[ÀÉšÙ%[ã’%KŒþÊ=&&&11-B‹º¿E8ÍñlÙ²%99™tøða'kcWmE}~ܸqÙÙÙhZÔý-â#„9œåË—{yyåää„……i4777ô €ÃÌ-  q øê«¯rËüã×®]‹>1å…^`Æðù¸¸8´-ê‘anÁµ¶¶N˜0áâÅ‹Nù¹‚ë§ ENÙ"ünÁ>|xâĉ肘ëÀöîÝ;eÊô€#¦1·à šššâââJKKù|'œ”Çq+Zä¬-Â8×Q}ùå—“&MrÊ€ àÄsÕ‘#G¦OŸŽ~p,8ÍQMš4©¶¶Ö‰ß2Ük -rÊa>z#Ì¢EÎÚ"Ì-t|ΦS‡‡‹-Bb.€M,Œ¤øºæs;©²²òÑG‰DãÇ—ËåZ—º_7—ËçóxìØ1{w‘a»¹à<1799ùÔ©SŸ}öYvvvJJŠ9°÷t[¹\q'NœÈËË›7ož½»È°uÝ\pž˜Ë Óžzê)BÈ·ß~ë@庻»Bx<^Ou]W1×ñ444B\]]uË%‰BCC8ÐåÖÔÔL›6²yóæé·¯ÀƒÆÎC[´h‘··w]]]kk+!ÄÛÛÛò†,Z´ˆ;ÄþþûïŸxâ‰E‹ÕÖÖvO¹jµzæÌ™¥¥¥Û·oOHH°kçý¿;+`[êcùºÝÙjœµ…rÿ<&ë°æÌ™CáF©sçε"‡¬¬,BH@@@·•»`ÁBÈÖ­[»³£Ú¿é=RËëiõº~øa—§ìÙõNh‘•¥8G–——ÇÇÇ ‚qãÆUVVZ†ø|þСC¿ÿþûn.×ðÃÏ®ÑÖ’O_Ä\D(´È~œäœˆàààS§NY=Òw¸r{qàÌß¡ æv·ŒŒŒj]ûŠeY…Baaz…B¡)÷Tœ=æ2¸œù|~llìÞ½{»mŠÓ–&8âº6¾G~øáäÉ“•Je‡‰•JåäÉ“u³Ÿ¤[fŸ1Ÿ‹ÙO§l‘¯Ÿ{òäÉ &xxx455Y¸ wZªÕÕ°¥ ޏ®-(ŠÒh43fÌpuuýç?ÿ) M¥T©T/¿ürkkë_|Á:Ñ u¶¥ˆÞy]1\m-º;µßð™  C‡ÅÁDïÄãñöîÝ;oÞ¼1cÆ|öÙg±±±†inÞ¼™¹wï^G9W —g„q>—¦éñãÇïܹ³³ëZwJXA"‘8p`áÂ…ñññ3gÎ|ø¦M›:»"wJضmÛðöb®EƒÜn^À!à<4§ˆ¹VŸ­„ÓœÀYÙñË«¿iéþ ¾Cs„:`œ ˆ¹ˆ¹ˆ¹€˜ €˜ ˆ¹ˆ¹€˜ €˜ €˜ ˆ¹‡o×ܹkƹÎ5εú’Œxcã\@Ìp½ô;´™^è©9 ½r»í ˜ÃÀ8×&©©©T¹Z?8ÜØ À鯹ÝykEYøQ6&;æR÷ëÔNî¸û?"ôLÌeY–›²Ð-&0³®ƒ†<ÌÒ@o™[ „,Y²ÄÕÕuåÊ•ºø8{öl¡P¨+ͼÔaÀÕ¥o_ÖÞ½{ýýýÝÝÝW¬Xa>“!C†dggñÅcÇŽíT¬óÍ7uµÝ½{wŸ>},lEûº-\¸pÆŒ3fÌX¸paûÌÅbño¼Á-/^¼X"‘dffÎ;×ÕÕuõêÕV>½ôÒKnnn»wï6ZìvÙIûÌ !§OŸÎÏÏwuuÕ½Ô¯_¿áÇÿãÿ0\ËèK§W–¯¯ïÝš6¿îÆ,X0f̘ƒvªÜo¾ùF«Õr™xzzž;wŽ{©ÃV´¯›J¥ŠW©TÜ«ï¾û®‡‡!„ÏçseggÐ4}úôé‚‚777«ßš .\¸pÁ××W×|K: l ŒÝsÛ/pÿ ž}û¸€¢—ÒèKæQÕÖÖfX–Ï¡C‡4M‡U---•H$111Z­ÖºX¯s;lEûºÝ¾};66vøðá\+X–‹Å—.]:{ölûN3ºÐ%1×’Ž޹„@0gÎõŒ¾dÞ”)S(Š2,ëàÁƒaaaæõº—† òÁX×Lná£>rww·°íë6oÞ¼—_~9!!aþüùÜ« ,‹ÅÜTC—ÇÜyóæI$®±–wØ¿ÏýZ­ÿõ×_%‰s·T÷áNûZïçââ²dɧ¸Ð“#Œw0Î@̘»–cjr¢n™ûý)âñxºåŒÍṲ̂49Ÿ»9cý”gŸõññ!ES˜Ã° aÙúúúoŽIN]Õ¹˜›šœøûiÏ :¥²JþÕÿ™íšœ[Þ;C ,'½w}çb.ŸÏGßt–ùàiò5K¹²â’ë7ò !ƒ  F_t‘­^ódö™ÝŸì©¨¨àñxa¡¡I‰o ‡°jœKÌsY–ýêÐá§Ÿ~Z&“©Õê©S§f<5p`t(@×sµZ­R© )(( …Z†AoØ%æòx¼q¸wËðÈõPq•нÄoÖ½ªP¨ø|ßÂç— Y„A#'Ú)O{ä@a´LCc£—gŸö§ñãé¶;-s^˜i¸¢J¥–Ëkš[nB<ÜÝü„BÞÚ0hš/«½N•‹øûàÐh´¿äÝ „ ПÏçu˜þjnžÑç‡ `j•[åUuu 1Ñ‘\ö×B™B©¤ñññîʘKs÷"S‹£|“;kë+¹M(J&|~EóÂòè‚Ü«ßû!_VJÓôsÏ>Í]½û·€«Vç2÷f!›šš[ZbûÅ»Àü&aÆà‘“ì´ W%ÃÄVW…J­.,*æÞæ_ eÑQV‡3[‹§§gm]ƒR©äŠ „+•J±HäééiÝff:æš½ÿã­¦–OθçT‰_ΰÔî“mEò6úÓýš›3`Ä#1ýbGŒîêꦗIUU5Ã0îîî¡Á„²Šª–––ªªêˆðPlCsï½›JEëÍ«?ñxü¸añ4§R´Ý¸zV$–Äy„rõü÷ "FMæž2j2÷LCmU}u™¢í_ ðŠôö ²dócY¦¢8¿±AÎh½dºüuEç^8¡+‘eÙÚª’úÚJµR)‰|¤ÁÒÀ°ö+¶¯*Þe ¸J¥òî©TÇDGvv‡ ¤÷Ì•«¿˜‰u>?&:ò×B™R©Ì/(äî[(‰b¢#ÖÎvz5–e³OŸ;vüï‡ÇL8™ÿsm]}+åä^,“-Hy[êoòŒáæÛ· !a!A€[¸vý&÷$8‘ØÕÝÓ·¥±®¾¶BÖØPMñð’¶Oã# ïKÓúG|õÕå%ùîž¾q±Ã(Š’WÈ,,´º\ÖP[) ó‰¬.—ÕÊK$ÄwBHmU©¼¼H·¢¼¼Ö/(¢ÃªB¯U\\ªT*Åb±B¡ „p ÅÅ¥ýúFwyYB &:2¿ °²ªšèoIpïÊqî_r?ûü¿¹¹¹žžž…Ų1£Fæʪª¬jnm æ Åf>4(B¨{ˆn¹£15ô¶q.!Ä?(¼¥±®N^& k¬¯&„xzûµOÃãñ W¯•—B‚#ú „"BHHD¬ñ©·v#С£#„p¥ø…óx|iPsÛ—hj¹¾¶BoÅúÚJÿàH3U…^Ž/¸¹¹E„‡^Ë»I‰‰Ž,.)ãñxæ#‰.òtø¤Ñ4\ªö¬«Ç¹ÆòÔÔ”„ݺ6²oŸëylyYÙßöʃ£V¸»ðbqeÁ¯EŸøñäÌÓLeéáá~ëVciYEhh0!¤¬¬‚eYwL¾9HÐýmÑÕÃSâêq§µY^V¨hk…w½½Âèêj¥‚"¹˜Ó‡>ò˜Þ3jµ’ÂEø¡‘­ÔIJF©¿¢F©lŸ€¯MtT¸î°›" úõ²äÝp«3úä}žJ]XT¬R©ü !*•º°¨8&*B`í—ÿç¶äžåËLíç­yîšV­ÕzÅèê‚ÛA*+« Odý8ë¿7•gHpPKKkËíÖ¼ëùw‹ç B‚ƒ0Îu¸q.!DVRðKMe !¤—TïU£ Bˆ@,V)ÚÔj…H$±¼,Bˆ@ R©ŒVÃ5jµù±mûePE¾Hd*18Ú6Ù‰w¢hc›%mfuZS(+Q(‰KßèHBHA¡¬­­­PVÒ7:’/°æðÈLÌ5öÓ³>~ÍçdJ&ö8"H«žqüh¶WÿøáÑqJÐÐÐà*q¥L_lW(ˆëW^QuûömBˆ››[Hp £ ‡Ù¾ï{g½|«JU)„>>þz¯nÜ3~AáåE7*dá1EW—›^0\ÝKX]!«­, ‹©•—&ã–y<¾V«Q+•B±ËÝý«Ëï[Ñ×?ÄpEpD}úô±ü¤(êÊÏ׌͘\½±¹E¡PŠÅâ~1Ñ\„í}³àW…BÙØÜ"õõ±û8×{Ä„ò/‚©F jukVžÊú÷mïA¾nÞ7nÜ8{ö¬··÷äIÍæ…¨Èpl+Ž(çÌ1ÝòCñOQåQ.»Aóøž>ŽsýÃy4¯¦ªô—‹Ù|¡ 04Æè£W!$(èô5Ë ã¦F£¹sçN%ö›òôåÿ¹t§É×K(ÒH„<"uS‡zµL ºZ‘wÌ=äwww‘HdÉ™!à¸Ô*eiÑuŠ¢¤aø”°unGß7ÇÁ²¬F­Q(rÙ•â+§ˆÀ5*”¬RÕQ±„i‹T2ÂàÊWæÆÅp÷þ.b±PÀçј¨uZ,ËþüÓ|0²ï`Oo_t€­1×päââ"øn£žˆ<îÎ;£[ïpçPÅçó]\\\%±H$þVEQLœŠ~躘KÓzgóxD º¸H<ûx¢ãŒš½ø¸™¹ŠÅ¹ D[7Î%÷NÕåŽ$ÑfÇ·,±àN’æbnËít#@§¸»¹Ysͯ …³ss1À1Øpy|–U«”jšeBØÎ¯OQ4Íç „"‘ñ ¤Û;йжÖÒ’¢Ÿs.ÖTWY±:æùHý†=4*,2Z,–þ¨ÍÞù€ÝÙ:rêUºfgeÌÕ¨Tryåù³§§LŸÕÇãwö¶ÃZF[wåÛC=¼|BC½T*EwæÝ@ÑÖZ,+¼tñ|uU¥ƒ„UsÃ8_?ÿ#‰ˆŽ±egeÌU©•9Ï=÷‡„ð¨X–e­ÆŠLúÆ Q*•gNOxå rL´wþ`o•ªª²âì©ì'¦Ìˆrˆ}ny?uuÆF_bíÍkWŽ|u —OX¸õÃ8+{e˜úÚêàðh†ÑÚrØQx?MÓÝœ?Ø›J­¼ðÓég~ÿ€ÁÃ¥Î4M± £Q+¾ÓoÀãOOÍÎ:6ïµ·H7Ç\î¬bÍÓjÕ¶´Ï㙈¨öÎì‹e˜ºêšÀàPª3MQ,ËhµZS ü‚Bêär[†qÖ¯IÑ!,Ë06þQ4Õ#ù€Ý£.abJ¡]Ø¡Y†a´î¯X&{æÙ©Å2™îš¢Û¾ ´!ZS˲,ËØøG›˜µ¶wþÐ ÃF‡«0˲ £emqqñ‚ÅK&Oš¸`ñ’ââbîI†ÑÚØ(ë?‚¸Ë}#!dÕʦfLÝNÂLþæó´0ÿ.äãZ_]† ÀØÑªCU˜¢t_ÚoÌØüÁÎma¡¡Ó?ucÆæ¿ìÜFaµZCŠ ã\ f4Ö§oäâ£ù˜Ïß’œÍäããjøg× lï"¬Ø í½YÒÔ}{ß‘#G&L˜ ‹}||fÏž]QQ¡‹tœžçÒÜ8—afçö-!ÁÁ Äïܾ…¹‡¦{pœË²Äô8wý†ŒõéW¥¥®JK5™Œ%æÆ¹&òç2¼;ÚMK5;Ð5ž¿nXÚ=CT®Ä\è=ºçÈL/}º§§§»»{bbbNNNoëZ7Ô3ýG÷ÔÜÅ5«SzúÆõé½½½W¿³ªÃPÝÙü¹¿Õï¬òöö^Ÿ¾1=}£ùºt)çÄñ£uòRBHÂÜ—.x5?ïÊkWb¢£ß~w-—&có¶7of}ÿmÎ…³••÷”üÝÿ~΋›7®_ðګ؇Áá´ßþ×oØ$¯®¾x.ûÂÙìòŠŠô›uÉjëê~¹raUZÊk ߨ©­»šóÓª´Ýb0r2¾÷µ¶¶îرã±Çëm@Q”ù1kóxÜÖïÐLÐwA>–7Œµ¶žzÖ­]íëãÃ-ŸÉþ[‹Åï¬J6b ÷pßþ_ø<((²þýÕºu÷üý_Ûvìúü³ 6{/8ÄÀVož¡ýöðËÿúr¿¯¯/!dãúµÓþðÂ{«ßæ^JMN”H$³fÎxkYrrÒRnyyršå{÷¤ŸŸßéÓ§{Ý8—¦!?Ùo*Á¨GŸê±ù\®`£ñneZ*!$}CÆÚuékV¿c>\š™[0O×®KohhX™–º2-•í|þ†üuËç/\|ïýô«¹×îܹÓ~Ó©®® 3\÷ÃÝýÂ,\p†ó¹í·ÿÚÚ:ÝvV[[§{ÉËÓ“" Û/k43{±þ^ɲÍÍÍ;vì˜?þÉ“'{ÙÜMûøÔL%hn¼ES=4ŸK™øX¹"e劔-[3Ó7dt4·@Y‘ú†Œ-[3¹R¬Ëß¼ù¯-úÓ«¯\ûùb¼´ø×뺟¬ùûû•””¦?ôÕÿ}}x×»±3ƒJ}KKïå’’R__Ÿ®=öððHJJ:þ|¯›[ )BˆV«1õÇÚü8›~+f~Ö#--5mEJú†Œô›Ì~ÇEw6ÿô›Ò7d¤­HIKKípòź³ôm ±H$‹JJË–-OÑ=?ûù™©+ß©¬¬jjj^õÎ{ºçƒ‚uàÓÏ>ß¾ã/ØcÁÑMŸö»•﬩«««««K{{õŒßÿÎê(Ñþá¼yó®_¿®ÑhärùÛo¿=f̘^7·@Q„5÷5!=ùÅ'˜í¦­Ha­çšÈŸeÙ4 F¸¶Œswnßòö»ï…Fô›6ýùÑ£FêžOIJì×·ïøIO>4jlHHÞ¡Ù¡/÷ïÛp˶†sgÜô~¥ áí•)R©ïˆÑŽýh@€ÿª´”.ç>÷Üs³gÏvqq:th}}ý¾}ûtɸ”=þ+Ýö¿{sYJYY9!¤¬¬üÍe)FÓXÁ†ù\˺fåŠëò1“‡yZ^Oݬ–ÞôÖ³Ï<õì3Oé¾ö§W¸€Ÿ¾nMúº5F3ñó“ž=uÂ’¹3€d¸Aê=#‹wfnÙ™¹ÅL2SË÷sïÛûfÍš5kÖ,Ãd½ç–w/9À0„¤eoüyiÒ¤‰ãOdÜ™¹‰{’e˜ž;÷—¦É½ÊYeSöÎìÂlï£hŠe†ÑB‚ƒ·oݸtùŠí[7rO26_6˦q®®rV3sÁ{çÝÂíCâÜÃà Àý{ÿŅڻøçÞ½MãP³×r´kþ`ïËçñ­Ö‘jLÓæÃ£Õðø6]’o}oÒ|†ÑÚØ¡šOó{"°{üòö•ÖÕUyzû8JiŠj¬7wÓÛ–Û-Þ¾~Œ sž|«{ÓÓÛ§¢¸ÀÓÛ×–6ߪ÷ôñ5l€½ó{ðý ½˜ý.b—ÀàšÇs€˜KS<žÀøA3Ë666Þ¸:zü“î¯È·º7cbþ’snÀ°Qž>R^çs¦%Lc}mQ~“ `ïüÀî1W$ò’ =î|öwM·êbèCQô±ÃûM„cº—ÏCc'ù†*îÜîö˜+õññôðØ‚_rš¶Ó½IS´‡§÷Qúú6ÀÞù@7D0±XâæáÕßQî«V*"±©W†Ñª”6ƾ½ÞÏêÞ4Û{çvDz¬Z©P+é@S¥l³kþü^Û›ŽøntpŽ.@Ì@ÌÄ\Ä\@Ì@Ì@ÌÄ\dåyhÇïC߀hgõ⢂K?®­•Ó4MSMÓEÑ4Å=äóù^>ÒAÃF…DtwÌ%„>>Ç7Ú±›6mò÷÷wuu?¾R©´¤>lÀ-¸ž“Ÿ—S"»Ñ…a×.17++ëôéÓ·nÝš>}ú믿®÷ê¼yóÞ{ï½_M?IDAT–––“'Ož;wÎL>æS¶b›/:==ýÒ¥K—/_®®®vqqIMM5Zœ——×ìÙ³ÿú׿rOœ81jÔ(???½d?ýôÓåË—õnî´fÍšk×®åääÈd²òòr [j´b›6mJLLT«Õ&11133“òÜsÏ-]º´¦¦¦ºº:66611Q—IMMMyyùºu몫«KKK×­[×>A{'OžÌÍÍ•ÉdÕÕÕï¾û®%õx@nÞå–¦[ÑqÃëkKeù]vYcR’–ÕW—™ùÛ·g‹Ñ¹îa}}=·ÜÚÚÊçóõ’…††îÚµ«¬¬Œ5ÁŠ”æ‹¿qã·,—ËýýýMeUXX¦R©X–]¸páÞ½{ “UTTV $$äæÍ›z‰;¬¿©ŠÍ;wË–-Û¶mKNN6\«µµU*•ê5Y¡P´_Öµ]¯òÜr~~~HHˆ^+,é(g²oÏ]X[“²@¥RÜnnhn¬»ðã7'Žì½ÓÚ|«®ª¦BvâÈç—N}'/+¨,¹Y.Ëûxë*ó2%i™©í2Îõööæ$‰F£ÿßÁƒ;6lذèèèC‡™ÉÇò”æ‹®¨¨8p ŸÏçñxzÓíEEE5êÀ,Ëž8qbÚ´i†i‚‚Œü.¯ªª***ª³õ7U±™3gîÙ³gûöíóçÏçž9sæÌ£>êææFQ”«««nD×d‘HÔ~Ù°Û9‘‘‘º¹\na}4¾!£'LQÞie´š¦ûá.¹ôÒ¹óFŽùõ×_×ÖÖîÚµËpæÁº”æ–””h4­V˲¬ù{>'%%íØ±ãìÙ³cÆŒqqq±¼ˆ¢¢¢ÎÖßTÅ233—/_¾iÓ&î™çŸþ7Þ¨¨¨`¦©©ÉêÙLÆ-ûûûÛÒQNÌ[ lkeïÝqœOóEBQ—Üž²bîœ9sòòòÔj5˲¦†c¦ôôô¼yóf‡%.\¸ðõ×_/,,Ôh4¹¹¹³gÏ6“xôèÑ`åÊ•/¾ø¢åz饗þüç?———766.[¶ÌÂú­XVV–\.å•W/^|ùòåÜÜ\BH[[›X,‹Å2™Ì–ŸÄÄÄÚÚÚÚÚÚeË–%$$ØÒQÚo—äÒ1wÚ´i3fÌpuuMMMýôÓOmI™””ôðÃwø#Ù+VŒ7î±Ç“H$ Ó§O7Ÿ>))©°°pâĉ–7jõêÕqqqC‡ŠŠ ³°þF+¶fÍšuëÖñx<>Ÿ¿}ûöäädBÈž={]]]'Mšouç7nРA>>>k×®µ±£œŒZe÷SFRS“S“ͬvüð>'¾ÞÂÇ\TT”‘‘ádí¢( ?(hï¿ߪ»ÆÍ®­ë’ßÍ`†a–Ñ2 Ã2 ËÞûϲ £e†a´ß|ñŸ™sšÉ6có¶ŒÍÛŒ¾ÄG§ëijjÊÌÌ4úûVpn[×¥ÑEÝ»˜ÞuŨ»ORÜÏ󭃘«?¤izÇŽ!!!è €MÚÚí,˲,sïW¨ ÛîÒbÜ`—eÙÏÿ±1·k8÷¡7&:¤V)FËÞ›F¸7ÕÀ°¬–Ñ2 £e­-ùãZŽÝ111ss111sÑÿU nlƒMIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/effects_bend.png0000644000175000017500000003123511273045225025025 0ustar julianjulian‰PNG  IHDRa÷Ú7ksRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ  α%n IDATxÚíy|eþÇŸICÚ$¥¥ô¤Ø‚œk9Ö•K¬«Xêê.À²h±+¶ý­(uAÑ…]aûs=~¬ȱ‚)H[diËYíAÚB¤-½“æšùý1kÓ¦m:If’Ïû•?’§3ßyò™é|ó}žï|ªQuÀ$à#øH>€à#øH>€à#øH>ð‘€ĶíöÍ¡¡Àå™·èÜÝáÜqì# !KŸø3ÎÀ…ùäï[qctŸs×#kà#øH>€à#X¢(ˆ ‚wf,žžž³fͺxñ"4p †a†ijjZ²dIJJ ð d2YjjjYYûÑd2effÉd²äää¶¶6sܹgÏž¨¨(‰D_TTĶëtºåË—Ëåò-[¶@OøHp´Zí®]»د¿þúùóç T*•T*MOO7o©P(Μ9ÓÔÔ”””´bÅ ¶qýúõõõõJ¥òÂ… 'Ož„žC À~˜ók¼½½srrØ÷ûöí;vìXXX!dÓ¦M“&MÚ½{7û§Ý»wBžþù7²~ø¡B¡ "„¼ýöÛqqq>Ã0lùî»ï¦¥¥) BHuuõ¸qãØ¿Ò4Ý5O•u„™Lf4Ù÷uuuÑÑÑìûQ£FAU‡±V°;R©tåÊ•ùùùìÇÐÐÐÊÊJ£Ñh2™X7i}÷¥Rɾ7¿ð‘à hµÚ½{÷šCÀU«V­X±¢¼¼Üh4^ºt)99ÙúîË–-KKK«¯¯W«Õk×®…žƒc­óçÏ?zô(Î  ÿÌ™3çÛo¿åaÇØqT±X–žéíV&‰233333­ooþèååµÿþýû÷³×­[ïå0Ö ÀGÒå$ÁX†Pjé6mže¨5 ð‘|¤óؼYx–¡Ô€ÀG:‚Œ áY†Pj ÀG:dëA ¨5€ìdëA ¨5€à#²õ Ô€ÀGö ²õ Ô€ÀG€Ë2øîü,ÏCø¸îGJJJNN!$""‚]z»ªªŠ]Vt-ï½W•“£–å”áõj@ Ç[æ¹3“H$ »wïž8q"·‡(((HNN.))1ËÛÛ;11qÇŽ·ß~;œÜ`Ï`£êº »}sèã¥OüÙ~W•ÖÆæF1 ÔpÊ}ã“¿o·è‘ÁÜͽÒh4ï¼óÎþýû/_¾Ìí—}å•Wš››·mÛfnliiÙ¹sçÁƒ Ýö6;Ðs×k»#“ÉRSSËÊÊØ&“)333((H&“%''·µµ™]מ={¢¢¢$I|||QQÛ®Óé–/_.—ËCBB¶lÙÒÕòáÇ-ZÔµÅ××wݺuW¯^µr 3½mpíÚµûï¿èС^^^óçÏW«Õlû‘#GÆ/‘H¢¢¢öîÝk݈ €¼V¾[†Pj¸Z­v×®] ìÇ×_ýüùó*•J*•¦w©­ P(Μ9ÓÔÔ”””´bÅ ¶qýúõõõõJ¥òÂ… 'Ož4o¬V«KJJfÏžÝõX---o¼ñÆäÉ“­ÈzO/^¼víZµZ­R©âââÒÒÒØöÇ<++«­­íÔ©Sùùù}~ÁO¸ÕX+Öm‡eXv]Ë<k5¿÷ööÎÉÉ™2e !$**êØ±cqqq„•J5iÒ¤ºº:vûÆÆÆ€€BˆF£ñõõ5 „°°0…B1zôhBHIII\\ûe?øàƒÃ‡úé§ÝŽš››eå@¬…Þ6èŠF£‰ŠŠbCɈˆˆ^xá 3oÐ#c­ †aF£Ñdee™£±êêêqãÆ‰ÅbóH&!„u„™Lf4Ù÷uuuæÔ¤Q£F™7>tèÐÂ… »‹¦é²²²ØØXv2Òʬ÷$77wöìÙÞÞÞEÉåò††¶ýàÁƒÇŸ,,lÖ¬Y~øaŸêm­Vëååååå¥T*;íÉÕ«W Ã0æ0w _>À­ÀŽ¢(Ÿììì°³fÍš;w®L&KIIIJJ²ndãÆþþþ‘‘‘&L˜3gÛØm µO?ýôûï¿ßçzÛ`ß¾}iiir¹üž{î™9s¦yû%K–<øàƒr¹<===;;Û¶¯#¤ÓçV9;›7Ûk¨Ç~–í—ã5 †k©ÁÇœ»ûñÇÇÇÇã‡ÈàÏâHöÇŽð,C ¨5@”””ÀAÚŒµð‘ÈÖƒPjÙÈÖƒPj ¸¢Ì „P¡(’™ùóO.Zræoœå ² j@ ¨Ñw võZa–aÙ5,óâÙåcàWøÀ31?pòì‡RW„„‚üàN¬¸—D¶Ô€Pî`}xý|$²õ Ô€öõ‘ð*ð‘à$Ý÷zö««C ¨5ìì"¼øð‚´T¡„PjØ=Ž´ÿëß«Ç9ÝO^½~ŽÀX+pGvýøÙŸÆ³oŒ&¦L­}/§¦¢±“Û.}þÞðÕÿ[b>V§.Qiöž®½~S×ÿ®Ú ËîÙO {€¼V¾[†PjÉGZÜ®Øu™â)-˜ðܽáÏ~XÊíîˆz®¢ýÈK&ñX4)à¹_‡?÷QÙ€ºj,»g?)à# ²õ Ô€v${jÑM_]hHI f?Š(êÑiÁ¿¾Ýßkˆè{eÛ;ßÞÐêiBÈçk&ìQTÿvjP€\\uS·ã›ëʆNBÈêsFμÍW«§¿(jèz ;¢¼ÿ™§úé#CÑèŸÔ/½#ˆ¦·™7îmƒ`ÉS³C'„y{ˆ¨KÕíoÿçF‹ÖH™9ô3CFúyÞì0~rNýŸ«7­é±{ö“ ^+pGv}™[†xˆLVªÒ°š:<&Hºö£²Ç÷ëŒôãÓCÌÛéþå)ï_Í+oY}OÛž’ì#?ýÁ©ÿ*0Rn6ëã%áçy¹º£ë±¤C<’â‡+´Öd½'/.Šú²¨ñ±½Åï-®nÒ=1+”m_;/ì_ùêGö\ÉÔÛéó#÷®-¨lÓèLR‰ÇÇÇn_R§ÙøeEÈÔ¨¡Ïþ:üìß®öf¤ÇîÙI ÷ò‘)))999„ˆˆˆèèhBHUU•R©|Ë{ïUåä(…e9%Ex}†PÃñ–ùã%{l‘ˆE÷Žó¯kѱ\jX3wäûŠju›!<ÀsiBðG*{±ÀBN•4?5{ÄŽo®Š<}w(Û>n¤üF“®Ec°:«:]ÒÌn¿hû…®»³%bjÍÜðY·ùjôôgçë—Ï]´ýÂÓwhë4}tVÕmc–øÈ¡˜ºö_%ÖÔ[O¦Åø>u׈ Ÿ!톟¯_9g$»ý]q~)ÓBB}%ÕMº½§j *Ûz3bÙ=ûIay.÷ù†“µ±à#q„P>’3¹¿u®Ã¾òßþ0vÓ×åj-?ψs»÷{ŸœøHäµòÝ2Ô€PCH8° ÛÓÿ(.Wiy[%ÎÉÝãê·—[Å‘X·–aÙu-ó"Žü åWˆéùÀ|OrG"¯8# z­|· 5 Ô€‹ð‘ŽU(¡Ô€öõ‘H£‚Ð#7k!/ð‡8›7Ûk¨Ç~–¡Ô€âôk ážøÀ'ÿ;îõìVW‡Pj€8òg(ŠúåÇ_üu0“ö³ €`ýH÷¹‹Pj z¹‹Pj`wÏke„á#3ˆÅäžáè+0„ *Ô€}ðWH0€›Ö²ÜDÈ_9<V}ÕÝwßm·ÃU÷Q“–a¹O2)Ї9³æÌ>ooï™3gîØ±#66Ö†Ý%IBBÂîÝ»'Nœ¿åH0 ö ÷†a¥R9uêÔ””ÛvojjZ²d‰ »øH`#È]„PÃa®_¿þâÅ‹æñ­·Þ ‰D„“É”™™$“É’““ÛÚÚºí.“ÉRSSËÊÊØ½mOQÔž={¢¢¢$I|||QQÛ®Óé–/_.—ËCBB¶lÙ‚»|$èä.B ¨á0^}õÕ®#¥gÏž-(( išòú믟?¾  @¥RI¥Òt‹ŸZ­v×®] ìG+Û+Š3gÎ455%%%­X±‚m\¿~}}}½R©¼páÂÉ“'q÷ë?®¿~$eu>’ÃZþåQ°Ö<Ô€޾o°Ø°~d·£ù.!—Ëg̘±cÇŽ1cưíÕÕÕ#FŒ`ÿuìØ±¸¸8BˆJ¥š4iR]]]·›Œ··wNNΔ)S¬oߨØ@Ñh4¾¾¾ƒ¦P(FM)))‰‹‹sùœž;÷#†¹zõªB¡¨©©Ù´‰éÆ -›ùÇ?j ÅÕ«W9±ì°Ö<Ô€޹1 ÓÞÞ~üøqÖA²˜$!¤ººzܸqb±ØÃÃ#$$D­VwÛ]£Ñdee¥¥¥õ¹=ë !2™Ìh4²ïëêꢣ£Ù÷£FÂ/*øÈ_ÐÜÜLñõõµ_­È—_ö5H( &'Ô€·ï‘7úûûGFFN˜0aΜ9¼ÿ¸~ÎNqq±Z­Ž µ«”µµµ%%%AAAcÇŽåT äe@ ¨áèûËàsv€³@ÎN1OFÚû@ì!„5% À}}d·ÉH»fëÉd›’Dî"Ô€¸µì:I쟭'¬)Iä.B ¨€[ûHväÓì#í { ·€kà‘¾.͆ݮ•\?ÃN}*-- ¬¬¬dÆßߟRUUUTTdCKuu5!D"‘ 6Œ2bDU{{'–»µ°– !ƒ!<<œ+Ë¥¥Uvì³°,C ¨Ñ[KVVÖ† ¸½])Ì;ž'7F`×s×®œ×ªÑhÎ;'‘H¦OŸî°“——§×ë¸z¹‹Pj8ò¾Ñäµ äµöM·ÉHÇ ¸§$¸£´œŒt@¶ž€¦$‘»5 îî#»>é€l==%‰ÜE¨5pSé˜2­–î)Inç#{œŒtLJ¡LI¢&'Ô€¸©ìñÉHǬ®.”)I¬55 ní#P¦ÕnðŠ¢œn>Ò™ô6é˜l=¡LI"wj@ x#–¡C‡Þwß}%%%¶íîéé9kÖ¬‹/rÞ‚‚ØØØn]7oÞÕ«WñcÂe}doOF:,[OS’È]„PÃ0 Ã0ŒR©œ:ujJJŠm»755-Y²Ä†ÝûäСC‹-êz¬7nÌ™3çÑG…ƒtYéà2­– p+ +ëׯ7‚E½õÖ[ááá"‘ˆb2™233ƒ‚‚d2Yrrr[[[·Ýe2YjjjYYû±·í)ŠÚ³gOTT”D"‰/**bÛu:ÝòåËåryHHÈ–-[ºZ>|ø°ÙG²øúú®[·Ž#ûìXo\»víþûï:t¨——×üùóÕj5Û~äÈ‘ñãÇK$’¨¨¨½{÷Z7i_i9é°l=ALI"wj@ ‡ÑÐÐðꫯNœ8ÑÜröìÙ‚‚š¦ !¯¿þúùóç T*•T*M·I«ÕîÚµ+!!ýhe{…BqæÌ™¦¦¦¤¤¤+V°ëׯ¯¯¯W*•.\8yò¤ycµZ]RR2{öì®Çjiiyã7&OžÜŸŽõ¶Áâŋ׮]«V«U*U\\\ZÚ­Âà?þxVVV[[Û©S§òóóûü:NÇëµ:¥L«%\nEMN¨5pßè‘Á×k5ç¶Èåò3fìØ±c̘1l{uuõˆ#Ø¿FEE;v,..Ž¢R©&MšTWWG~™ãíí““3eÊëÛ766°wB___ƒÁ@ S(£G&„”””ÄÅűZ}ðÁ‡þôÓO»+444777**ÊÊX ½mÐížņ’/¼ðÂ<fÞ ?Fì}îÜ(ŽtJ™VKP¸@~šäkoo?~ü8ë YÌ’R]]=nÜ8±Xìááb™4ï®Ñh²²²Ìј•íYI‘ÉdF£‘}_WW;5j”yãC‡-\¸°ë±hš.++‹-,,´~ ë=ÉÍÍ={¶··7EQr¹¼¡¡m?xðàñãÇ'OžóÕW_õùuœ}dû ™¢Hfæ­¦M›úßÒœ“sËEYl“3Ó`,[i±´ì—ŸOiÞ³g–3ˆãúÌËPjôÚ"dBCC+++F£ÉdbU· ¤RéÊ•+̓“}nߥRɾ7¿1 'NœX°`A·À7&&&;;{õêÕmmm}¨· –.]ºfÍšêêjš¦[ZZÌ!~BB—_~Y__¿sçNóPð@¿ŽCiT]·áõñ¾7»aþéd¹¹¹ …¢£££'Ëöës÷–ŽŽ…B‘››Ë¹eûõ–aYÈ–¹7ýñ¾7ycì­WÝÚ_{íµ ”•• †‹/>òÈ#Ý6Óh4Û·o;vl?·ïöñùçŸ_¼x1;;È:E†a¾ùæ›ÄÄÄÞºôÐCíÙ³§Ïõ¶A@@ÀçŸÞÙÙY^^þÈ#˜·ONN¾råŠN§;tèP`` u#Žø \.OOOÏÎζíë8WËÙ©­­-)) ;vlO¢½Jaõh¹¸¸X­VÇÆÆ†††B {åe8X Ž® ¨5¸¿oô†k¯±ûñÇÇÇÇ»äÏ®rvÄ.¦‹õ'#\…ÒÏÏO­V777ÆGÚÔä„PÃhÑ÷ÄÕÆZX¦ÕnøH¾Ðçd¤ƒ«Pò|J59¡ÔÀ|dŸOF:¾ %ŸŸ’DMN¨5p#éô2­½ùH ·|$/|¤•ÉHÇW¡äó”$jrB ¨€»øÈþ<éøl=>OI"wj@ ÜÅGò¤L«%(Ü ÅužìÏdäæÍöê±b™·OI:E Þ5 '|ò÷­ð+®„ëÔÙéÏZTö«KbÅò ×êrJŸa–hÙùuv€ëá"c­ü)Ój ·€@ñH_—fÃn×J®Œ‹Ÿa§>•––VVV2 ãïïO©ªª***²ÒÒÐÐÐØØh2™¬ï5bDU{{Ñ€,÷³Åºe±XÜÑÑ¡×ë‹‹‹j¹´´*0Ð }æ§e¨5zkÉÊÊÚ°a·÷¢+…y£bÇÃO¸3.2ÖÊIõpûa½Òº³Æ¦y½B ¨ÁÝ}£O0Ö \d¬•WeZ-AáV"®×ÚÿÉHgeëu’äÏŒ)r¡Ôà†1èu£¡iBæ;|4A$‹‡H<= ¡¸±èc­ýÉtb¶žÍ£ÁÈ]„eX¶Ç}£?Ø0ÖÚ©i¯ª¼v¡ð¿jU-\–ƒñy 4yÊÑ1^^2N®Wˆ#yX¦Õž¯% ²ŸOF:wuu¾MIb­y¨58GDQ Ã0 —_"Š3)ì±V>—iµ„ŸOIp+úåm¥ÛM†Ÿ³k}¦œÞg¶‚˜Œ”yûiÚ]°° Ã0…8’2ðÉH§gëñj-Iä.B WÒ™/q¤ˆ7ÕcÇŽ'NŸå4~Bü?³?tùˌó l9Ð'#ž­Ç«)Iä.B WÒ™G¡-ÃðꕟvÕê5¯½²A]{ýË/~wú»["„o]åèE(Œµvõ‘¼-Ój ·’““úÁP ÏjÐmݶ}cÖ†¹óæB¢££÷ìyÇÜ=öÉdÊzåÕý²;:Ú.Xðή·½½½ !ÊŠŠ^Èä.v}JÒ¹"“j¸’μ‰#ElÎ^iÏ¥¾´!ëÄ· ^M©\õ§gÌYEì›'Ÿ\þLês×”JƒÑxùÊÕß/Šm×j;==½$žž••kž}μ=ù¥}³ïËàÙ"¨2­–ðê)Iˆ@žyLɳ¸*ñ΄ooñÅ—BGF>ðàófÎèÿ¥­}vú´ÄE‹“‚BžxrÅâE ØöÝ»ÞÎøŸ¿‡†/X¸dZâ?/Ä‘üǶÉHžT¡äÉS’¨É 5̨Õj…BqöìYš¦vÜ0IDAT†Ù´‰é?ÕèÖC;õy`·T^fÿæÞy¹ßå4ªk.œ{tY2ÛØÖÜ`Ž}ÿœ¶öʥ›õµgóNÿöÁ$¶}Ñ—ŠÎ77ª®^.Zµòióöæ7=~äE4iÛ“‘<©BÉ“)IÔä„fOSYYI‰ŒŒd€ãÚ°=މØÔ¼œöbhJäÒÏ~ô‰°Ê´Z‚­€oA¤V«•J¥AAAPcð ÃÐ4m‚΂¦Mî^ÓÜæÉHþä.òa-IdrBƒH\ƒ‹#)†aà#yIsº6– }¤ÍOFò'w‘OI"“jôDâÚ°ÙEŠEbš6Ñ&øH§a4Ä"Î\›€}¤€Ê´Z‚­€·A$D)ò V]Qê5œEkS£ß°@š¦9±&¼œÁLFò'w‘OI"¯jô6‰kÃ6†ˆ‡ŒŽw¹0ÿf£š& j ;øEæf£úZÉ¥‰SgõÜüîiT]·a·o}¼ô‰?Ûë·EYÉÛ®­­-)) ;vìÀ-ó¨rfqq±Z­Žµ>ÜŠ:¢°l'Ë Ãœ;wN«ÕŽ3&88XøjPœ?ïñÉß·Î[ôÈ€DÕé:ÛÛ[K/¶6ߤš"¢D>~qïÕ©içĦðÆZZ¦Õnü "Á`<µ——ÌÛÇ?,2–Ÿ‹-»<4M›ô:®$O}dJJ »X]DDDtt4!¤ªªJ©T²-¬Ôh4V¶é­å½÷ªrr”ÝËN–Ù)IµZ­V«­ì•’£>;Ý2ÔàP ±XL‰ŒŒ¼~ýº ¨Á†1è: ºN¸+ùÕ#¬±VFsîÜ9‰D2}útP?//O¯×'$$X™[uùµ„x2Rçnj¨Tª~øA*•&$$¸F¶?ÆZ«!°ÑA—iµ…[³b¤³à‚>r“‘|ËÖsnáVä.º­}ÎDâÚ@À>Òæ'#ùV…Ò¹OI¢&§{ªÑŸ ×,BÊkz™VKP¸ð0ˆƒ‚¦;;5&“é§¥ƒ¡DR™Œ«PH>rð“‘<¬BéÄ­¨Éé†jôs&׆í?å;ÚÊÊ~ø>ï;R[á ===§Í¼ë¶1ã¥R9'¥v„ä#ÿd$«P:ñ)IÔätC5úDâÚ° VSU¥<—÷Ý„I“#"c<½dH‰rèO@œ=•{Zá7,ä¶ØáZ.ž’žt™VKP¸ð-ˆ6c4ò¾SŒŸ8):fL}m•VÓÎàY%ßQ}|"""¾ùú³¸Û'rbP0>’“ÉÈÍ›í5Ôc³e'NIòP 'âjô&׆ͿCôz]xdŒº¦rú¯î‡Çr<'}(—Ét:-W“×ÊÉ“‘üÌÖsÖS’È]t+5DâÚ°ý–J‰¼¤òNmÃÐx9þE¡(JDqæÚGºL™Ö}$ ·Z¡Û ½ÛícYœ‘`P—«ˆb+þ04 š;ó,¸©äd$?³õœ5%‰ÜE÷Qc 3‘¸6GR?iéü³à.>’«'#ù™­ç¬)Iä.º "qmØÁüì#…=Â!óöÓ´7 ý,pànñ…]¬L«%(Ü øD‚AÝR…¶$Ö‘#G§&Ló šš0íèÑc8 ð‘„ÜZV:3“miÎË#„øed˜[ȦMݶéOKÎ|[ör€e?…‚°Ã­ÛdžöÙ–[wí*ÿÓŸúLÜC ›¯ õüùZ­VÚÑq+ˆtQ5xÁ0 ÿ_ßnõšg·nÙ¬ª©Úºeóê5Ïž;wîÖ_òº¿¸Ž#…±6VÖêŸež®®neÍ/a®?(Ë­­­õõõõõõ:Ž2gÎ+çåå >|øðá>>>.©Æ -3 sîÜ9­V;f̘àà`—VÃùkcu´5öÉ…,++.œ}ïƒü·I~tÑ¢ýîQöãfýõÑþ•M‘õïhk"„-MNY›úìŸV¯âÿ7:}üß:¾¢âÚÊç^îhm¼AÌGº^™VKP¸ÕÒ5B<==‡n}/NwãÆ7n°ÞYºHgux)ú9Žä=yùgwíxËÜÕûî½wýKY?÷œaŽ=¶jõ3ïìܾhá­ÝJ¹Õ³NFò9[Ïñ…[y¢Fo®±ŸÞ.>>Þ¼û`œ¥KfrÚ<‰¼ÖÁ„³êmsss@@€ùc@€×û÷Þß»eë¶ÿßÇS§Ä»íY â,rå#ùœ­çø§$«Æ ]£Ÿ˜˜˜®mp–.™Éis‰¼V›ýôdž b.??¿Æ›7Í£57›üüüÌ=ß¹k÷£)˦L‰g{ÜÈGºX™VKܤp+W®Ñ~ÎÒe@:«“#!ŒLNKL8zôøc¿Ka?=zlZb‚¹çG|5áý~¾¾kSŸqÛ8’ïiÊÜNFòyuõ®S’ŽÑÖ‘j´¶¶–——çççÞ¸qC§Óyzz†……ÅÇÇO›6-&&ÆŠ÷bºðËOL9¬§œ6mZ|||XX˜§§'ë, óóóËËË[[[…um88ˆtI5ÁˆÌq$ÿ_Ï­MÝðÊFÅ©Ó:½>çôwY_}nm*óS’«ÉHžgë9xJ’s5Ìh÷nÝÎwr–_íY^n—®:>“sð3‘Èkµ=œ5µ¢¦9΂‹ûHΟŒäy¶žƒŸ’äJ û¥á8ÒYb¯Çgr>ˆD^ëà#š6ÁW!Ž´/._¦ÕÇ?%éV®q@‘¥@³a‘Îêì>’GgÁÅ}$ç“‘ü_]Ý‘S’¶õ¹?®QˆkÍ¿û®Ozº]œ¥ƒÕàd&’ÿÿ)<Ž`nòÑ&øH§ýPäpe^çµrU¦µ‹e¾gëYnåIŸ5ºFŽ(W²#û<ÈtVŸA>äµ¶ä~{Dæí-‘HੜE{{»Ñ`xàÑU.ž×êeZ-á[áV×Pµ !Ã"Õ¹xxxÜ>iê•¢sÄÇG2d!ëvt©7 ºÎÄ»c4ê9±ÈG™’’’““þgZ«ªª”J%!$"""::Úæ–÷Þ«ÊÉáÀŽ]-ëõzBHyyù„ !))Nèsppð!CººFÐÐÐáÇ777+•Ê7n8Eg§¨SZZZSSCºR÷ðð0™Lκ꺩Á0Lyy9!D«ÕVTT¸üJ·>à%“†„MJ”^)Èkki†Ër<‰ç”¿ Ñ´q£?ÇZ{| ÞèV6Á~cSBŒ©ÿ…ꦆJ¥úᇤRiBB‚fëða¬•"‰$R™‡Ç¸+gA ZM;WÖø;Öê&eZ-q|áVwPµ Ã"•/7hšîìh‡.OëµÚi2RU(V¸õwl¯¡ê,í‡m}îOmXǨÁíL$êµpk|‚Ÿc­555–iíbYÙz]Ç™9ï³¢F«}:HyU*Ï©SíYšûÌU:«ÀÏ /ÆZ‹ÁÓ±V·*Ój‰=ž’tä½Û±† ¶û0,ÒYpGÉùd¤PªPr8%i%jüë_}–.€Žó>›å¦M­?lÇ9K{ÌD¢^+·Æ'x8ÖyàÀ®ÏÑ»!æú r¹ÌN«A òz¥±r­ƒN «†›§³vQƒc­ cÐë FCÓ]4Žº D"±xˆÄÓ“«‡SùGNž<™¸ñ@+‹¹p+!ÈZB†*Ÿ±G6,ÒYùF§¶£ªòÚ…ÂÿªUµPÃÁxˆ<† š<åΈè//'¿™ÜËG ¨ ¥yJ’¾§$ms¨Éé,58t–vš‰ÄµaF½¾®®æû¼3 “’#FÅzxˆ)”Úq &ÚTzµèèW}ü‡…‡ûëõD¦<kýì³Ï8,ÓÚ%L¶ž¹pëŒÓ{³<ȨѳOùfÙ¶S)3¹¹\¦³ \gçµj:ÚŽþìW¿Y9*Žah†ÁX«¸\tîü÷§S–¯Ñ¶·¸Ni}˜ÈÝ.µnjtÓ¦¥¥ª.Fÿ#Ën×Fb¢[ÿ§ð †¦ëU##chÚ„sá,Bã}*âh™e±[içÙz………œ¸Fä.òP>%þSxî%†xˆG~ÚžürwóÇ””ä?¯K¿QSÓÜÒ’žù¶ñÉ'—?“úÜ5¥Ò`4^¾rõ÷ËŸâ_Ξý~Æ‘<§ïLØùöö_|)tdä>}üúN Ôsm­­‡~ðت:Z›o y­À])±©,ÂY0 M‰ðìðE1 MÓ&Há,hÚäv5Í@ q$Å0 |¤3ãH¬üt‘b‘˜¦M´ >Òi±ˆ3× \‘"¿€aÕ¥~PÃY´65ú ¤9š†n"2:nÜåÂüÛ'ßé7l¸®s,&B77Ö_+¹4uƯŒúNøHà“ôôô4þŽ¥— [›oÒ ²[ŠˆùøL¼sv`ðÈNM»“}ä'ߊS] ¼¼dÞ>þa‘±üYlÙ­ iÚ¤×qå ‰Í5×M! ÀGð‘|$ ÀGð‘|$ ÀGð‘€à#øH>€œÀÿäþ¢ðरáIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/effects_grace.png0000644000175000017500000004656011273045225025205 0ustar julianjulian‰PNG  IHDRi»Žïó=sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ  §.îÁ IDATxÚìw\ÇûÇg¯pÇÑáõ舀TAÑÄ[Ä’5{c FÅ^b‹1FÓ¾ßÄäg“˜Ø‰ŠŠ E° ½^£×o÷÷Ç™ _àð€CáxÞ/^¼vggçöyfös3³·ó`b~ h#$p €vÚhh €vÚhh/];8®C‡¿Ù$å…§€ÇúÈÖÖæøÉÓàDíh›7®Û¾c·R¥j’®P(–.Or÷öw÷ö_¶b•B¡Ðu:8®ºÞ‡F£Ù²m‡_@ˆ3ÏgμE‰êz„vø÷òóÍ·ß5IßöÑ®J>?ýæÕ;7®––•mß±!¤}Ù_Ì/ѽõÿɧîg>¸”röIvÝœ¾iËv¨è.`í^¿Ãã*æ—…¢¡Ãß¼ò÷ykm B(08üôñ£žž¡¼¼üø ïdÝ¿£;EWBHX¿ß~ùÁÛÛ !$м6ôqVT t (†g­V<‘ÔÕ „ú‰×&²XÌéïMÙ»oÿ¦ ɺœB¡ˆÇsÓnóxnB¡¨Å+*+câ#„‚ÀqÃ0„е”“P+ðRG‰aeíæágÏâ_;j«ÅùOú†9pœ(T³Æ‡Ο;àµasfÏÐ¥°XÌââw„PQQ1“éÐb™6ûüŸ'ÿçr‡u /×T ù9™·Ìhæ–Ö6FÖŽÂg9~Al®‹R!W*ˆ t‡ètzÒÊe[·íÔ¥Œ‹³fÝÆÏöíA­NÞ0~ìmºõ³gyÚA Bh挩ËV®úhÛfWç§¹Ïö~²ÿ¿_.•ÔA]ÀKÆÜÒʯwXAnVpä@\£6¨·b`Ñ u5,®B!×hÔ…CË[ãÇæêv“×$±X̰¨aQ¸\ÎÚÕIÚôÄE ^6J÷œeÉâ„èȈq&¹¸ûÌ[8jÔ¨Bx5Ãʺ¾¶ÊÌŒfà†Î•^K99,~ªT*i.˜Ïoó†zcö;BÃ@8ÀÄÁ03Âû,´Ð@;í´Ð€6½ÏÒ% •R¡R«G@[Á0‰B¡šÑha)¨›i‡\Öþ´òØõ¼Ü21´h‘×mrõ"“ÈL6',"ÚÝË›NgøÅVwÒµR™S\õåùÇo 2ÆÕ…L&C+€æÜý&qÃ΃-ÂqÍ“ìûžøÍÆÎÁg§TÊ{„v(UŠ#—þFâPh  Fà¸Z¥hñ¨·oÀᣯ^¾ðÞÜ%¨‡hãyeÕ£¡q@+0Œ pF£/ÛÉETYI"uèQI÷zÎB¨4¸n¨‚a´hF"8ŽkÔڿ‚‚#GèRH†wøQ<£“ìw8®ÁqMaaáüE ¯¿6hþ¢„ÂÂBm"ŽkHþꥀ£ÀÔúF¸v Ÿ;wÜ¿×ÍÕuÜØÑ;vî>°/BˆÐh:Þmïh¿C3A÷צ0†!ˆU«VÙÙÙÙÛÛ¯^½š€%!IÛïÀqß¿o‹³3Žã.ÎÎû÷íÁÿDzÕÚþ ›Ð8xÂKã믿NMMÍÎÎÎÊʺ|ùò7ß|í0&A1RGï}ãÏw8p\¿øê?A¡‘L®ÒÀ©yœ§öñý÷ßoÛ¶ÍÉÉÉÉÉiÛ¶mß}÷´ i—éjõ„a]N;Bwïf\J9+ª,Fz85óÔ>ÉÎÎ×n‡……eggC» ÄZÿúÂ\iãÛ^«[7o`:<«ðÃ?ÿöËNNŽ¡ Ék¼6t÷N£Å“H$–––Úm++«úúzh7 ËøûÏ£ú2Dx£ãóFÐŽæÓ\.G·Ýb'C 1KKK‰Dbmmª¯¯·²²‚v$Œ„1dô;ú2ÔÕT“0ҫ׎Öi1€“± LOOýõ×BwïÞ „v Ciô‡Y!þÉÓåæ;£ àTPX¤V«s=ž3o‘6]ç©Åá¼÷Þ{ÉÉÉååååååÉÉÉ3fÌ€v$ Cjm®uÕ¹ÒÆè àÔ$ÎSû˜?~ÿþýãââfÏž í?}YRII)B¨¤¤ôýeI-æy5c–æóMRH$ÒÒ%‰K—$6ɶ|éâåKwp¾ð]»víÚµ š 4îwAà8Bhå²ÄÅKW¾6(îÒåÔýŸìÒ&8Þ ú¼üù‚Àµï­8;9îûxǥ˩û>ÞáìäøÏû,8F‚÷Yh©ßã¸v×ÙÉñè‘ïBº£ô;º—v`T2I£Ñ DEÁÛ+ §ßAÒ¾G«/®Q“)½÷IÝË#^ÎvåÐ8 õ~G¸B÷º}ó¿zI½=“­ë†˜~¿ƒJ¡NäÿñÉóõWX¯ôi #“©-"¢¦¦*ïñƒ¨¸aê,8ØÝ´ƒF ð`-›ùÓ…Ôã'ªTZ 4gN0陣zd…dcçÐ7æ5¶£«\*é)ÚF§3¢íú‡øHð„ZF¥Sit}Gq×(Žn§ˆ •B®RÈ¡}@+(²N—í´Ð@;@;í´€.~¦RÊU yëï´b23· èù==R;ò¬¬¬[i—õe S(Q±±ƒ†)å²—i›Çõ凪ÐC!J¿uíÃMûhô–B¯Ëwo^9hؘµC»d)…Ba2¢£"—¾ŸÔ»—;wà¸ö ¹xî´áÍ1Î|‡F£Ö'!ÞÊrï!1¿¤¢$ï¯óDGFŒðNfæÃNµÙÖÖæøÉÓP÷ðêµÃ×A"q¹œ¹sf®NZ¹{ï¾$©…X¶¡Â¢âw§Íróìåäê5qò4‘Hô¼ƒ£T&.YîâîÛ«wèg¿Ô÷Y›7®Û¾c·R¥jÚ?R(–.Or÷öw÷ö_¶b•B¡@-…ÎÕwUÚñ*ysôÈÛ·ÓµÛ-ƲEM™:cÁüÙOsî?ξïí啼~³6ý£»ÅâªûéiW/]¼zíº¾ðïå7 6æ›o¿k’¾í£]•|~úÍ«wn\--+Û¾c7j)t®¾«ÐŽW‰ƒƒ}m]vû‡Þ¹}‹““£¥¥å†ä5§ÿ8«MO»ú÷€þ±t:ÝÚÚjÝÚU—.§jÓ;vbû–L&“Åb~´uS+Ÿ²zÕʯ¾þ¶¶¶®qâïÇOêNß±móïÇO¶x®¾«€E—[¿C,®²µ±Ñnë‹e{ûNú¦-Û<Ì–J¥¨QDo@èæö|dÁã¹µò),sú{SöîÛ¿iC².Q(éÎâñÜ„BQ‹ça ßñR9}æÏ¨¨í6‡Íμ{SP^(¬(óKD•ÅÚôYsΙ=3;3]TY\øì‘nÁt6›U\ü|d¡ÛÐÇÂùsÿ_ðßo¾Û¹{ïÊåK´‰úbÙÊer:F£ÓŠŠK–­ø7LÞ„qñÉë7‹Äb‘H´fÝÆÖ?‘N§'­\¶uÛN]ʸø1kÖm‰D"‘huò†ñcÇhÓ›„ÎÕwUÚñÒç88®\Ï׆ޏqëö‰c¿ô ê­M×Ëvÿ¾=Éë7¹ºûÆ›¡+g͇ØØÚ÷Ž846¦ß ?÷­ñcó u»Ék’X,fXÔ€°¨\.gíêçªÔ$t®¾«€f௞®¥œ6všTR×üPC}Í÷ß|ùÁú=­ÿ6ìƒõ;êªÁãÐeiå6oŽæJ1 EDÇîÞ²R£nù`d %"º?‚0n`BA;hæ–±ƒÞ4lLk™B¥T€»´£Q·‚LQÊ¥J¹¼ =X¿Ð@;í´Àpí a$×€¿ÀTÁ œ„µ¡3ahV kÛÚ*‚wFÀD©¯©¶°¶5ü7œ†j‡»w@Ö½´Ú*1Nààe0±GX˜›sÏÓ/Ç ½Á1ÃWñ­ J ŸJj« /€® #1¬­Ý=ý]= 9ÞêêÂíÑ„…B¥PÍH$ ^À¤ ÇÕ*¥Z­2T ÚT¾Z­2¼hL¹·.´Ð@;íí´€n ÚðÎW7Ï^oOšš——ß¾Bšl´¸ €Iõ;´ž3ÒÓ‚ûô™»0±}%´)Ó³8ØÛ°bINÎ#í®B¡Xº<ÉÝÛßÝÛÙŠU ÅóåÑSþº7˜ëâÖïðG÷/tÿ›wCô•æÀq=ôýá°~\Aƒ‡?Ìʆº€n¦⪪={? ð×înûhW%ŸŸ~óêWKËÊ¶ïØ­M_”¸ôäEùOΜú-=ý^ó^†¶Ó¤p}¥!„®_¿qöÌñü§Ù£F_¶bÔ%¼L°vt]ƒ¶cÛfo„P`pøéãG===ByyùñÞɺ!Ô'4êýÄ…#G¼áä䨏íè6š¤ë+ÍãúìÉC;[[„L&s÷à—@uÀK£ ïÂU +‹ žHêjBý‡Ä뛕 E<ž›v›Çs EÚíï}½çãOwîÞkmmµmëÆáÆò¡úJCi…!dnn®V«B×RNB@›G‰aeíæágÏâ_;j«ÅùOú†9pœ(T³Vr²XÌââw„PQQ1“é M þñð·A¤üuéýe+‡?4H;ô•Ö"ÃÆNƒvmÇ5ÕB~Næ-3š¹¥µ‘µ£ðYŽ_P›ë¢TÈ•JE+ “‹³fÝÆÏöíA­NÞ0~ìóX“sç'¬\±ÔÃà ºéÒ§66ÖÏžåy{{XZ‹ƒ€&˜[Zùõ+ÈÍ ŽhàÚ?†Î•6ÔÕ8°¸ …\£Q·¾¢aòš$‹5 ,j—ËY»:I›>bÄïÍœëêî»iËö/?ßßä¬ÄE ^6ªùÏ:ô•€1!†•u}m•™ÍÀ3 +½–rrXüT©TáìÀTy~›7Ô³ßBÂ&ŽÁˉÂû,´Ð@;í´ÐÐ@;í´ÓƒbIJœPJ•j¹×ˆ„Q($ B¥S~Ð=¨dI•$÷YVQi®H,@1™w7Ÿ€€`º•9™j´α§Ö$o EÆ]¹ÉÂe¼ íPÉÔ¢ ñ¥ÔSöLÖðø‰N.<„PyiÑõËN>2iú<2…¬Q«ôÝ´Ú 3*544d÷Îmÿ,}Ú"6mý¿Cÿ‰Œïš zFè8ÑP-½–v64*vʬDž§/ÕŒF5£ñ<}§ÌJ Š=ñëa3:Óÿ~žv•ãüÜìÇÍ[ð‚X •áaPsÐíµC)U>aqc“J¥‰‰‰l6›Íf'&&J¥Ò˜¸¡v¬œT3zë嘛›ÏŸ7»  P»«Ñh¶lÛáâÌó™3o‘D"Ñ~«Áäºi{+­D`øâ«ÿ…F2¹núŠjÎþ_ø†º¸û.^ºB¡T¶r¡Â¢âw§Íróìåäê5qò4‘H„Z  zQË5y9á1BIIIR©tôèÑB¡ðàÁƒIII¡ð~q™÷nR^´‘\.ÿï7ß…†kw?ùôÀýÌ—RÎ>ÉΠ›Ó7mÙŽšEch%ÃÝ»—RΊ*‹õÕœ7o]¿rñ~zšP(Ú±sO+—š2uÆ‚ù³ŸæÜœ}ßÛË+yýfÔj°01Ú²nØØi-.Z/høñ—ÏW&ï4£Ñœœ†Ž:tèBÈÑѱ¼¼\©´~éÚ­ŸÖU [™ï@YXXœ9q´OŸ „PHX¿ß~ùA»‚©P(ðÚÐÇYM&Z‰À™Îår´ÙôÕä2Òo^õðpGåçÄOxçaÆmÏ•Éd!aýžä܇ù [ÓÊmÞŠÑ?^«-É©•ùm¿ãÛï'oØ|êøQ„PEeeLÜ`„A8Ž·8]ÒJpXBÈÍÍU·![?÷öôM[¶?x˜-•JB¢³´ •Ìt`WV”"„Æßøv·²¢Ô•ç…ëy΢ƒN§Ïxï]]È8›y÷¦ ¼PXQ$æ—hGMÐF`Ðn·Á¢Bº¢JJJY,fëçΚ»pÎì™Ù™é¢ÊâÂgXíh³vÐ)>Þ½ÓÓ® „víÚ•Àb±X,VBB®]»Bwo¦†FĨTŠÎwþñˆ®1sÆÔe+W©ÕêœGçÌ[Ôüm‘H$‰Z‰À`HQ¡äõ›Eb±H,^»nÓ[ãǶ~®\&§Óh4:­¨¸dÙŠWo׋€†€v¢doï!¿2-õ"ƒÁ8pà€@ `0i©««DA!J¹L_ ÚvàPÝoÃÒR/ÖÕVOžž€a•BÌ+˜+¥PId yÚœÅÒo¥œ;ί(GqƒÂúFÆ(ä `bí9‹F­Â5ê ÐðШX2™Ša®Q«TІºj‚ÀÁÑÚ¡‚ ” ™R!·€ÉëwÚh €v€vÚh €v€vÚÀËbJðJµã¥Å”l¬KÝxÌ¢’©E¢³­ªŸ˜´~wÒúÝÃǼ-®œ:}„D¥)ÔVN?1%6n°£‹glÜà ÿz%Ž€Uàe÷;Ç”Œ8L—Îóôåyú¦¥^<ñëá)³ÉêZ\L<ý˓¾þâ³ÈȈ۷ïÌ_ôþáïþÖ7êL¼ßÑ8¦dó£/Œ)¹oÿÁuk>Ð?–ff6 ìÚ“öí?¨ë úþpHX?®‹Ç ÁÃfe·XÄ‚€n©cJ¶Hë1%oßN6ôuÝî°¡ƒoßN×í^¿~ãì™ãùO³G¾lŪK€XÐ-µÇ Q•€ëè¢/×Ñ¥¤(Ÿ¢gÊ£¦¶ÖÎÎN·kgg[S[«Ûݽk»£#—Á`$.š¯¯ß±}ËF&“Éd2·oÙøÛ±ÚÄ~üyçö-NNŽ–––’לþã¬6=íêßúÇÒétkk«ukW]ºœ ^Í|‡¡è‰)ikcS]]Íd>ÃV]]ckc󝔨Új7ÌÍÍÕju‹%@,Hè–ýŽÆ1%[¤õ˜’a.þ­Û½pñ¯ˆˆ°6]Ä‚€î©bJ¶Hë1%—,^´eûޫ׮+Uªk×Ó¶~´sÉâEmºˆ ÝT;þ)Ùüè cJFF„²gçªÕëÜ<|“>Lþäãámëw@,Hxù@LI ºÍ›vŒò‘SzS€WªbJ@OÖï´Ð@;í0\;H Ç5à/0Up'amèLšÕÂÚ¶¶J„à­S0Qêkª-¬m‘Áo‡ªîÞY÷Òj«Ä8üÐ L®ÇQ#ææÜóô ÂqCopÌ𕲪ł’§’ÚjÃK ëCÂH kkwOGWO…BŽkÔFÖ„…B¥PÍH$ ^À¤ ÇÕ*¥ZÏ:;-¨A›ÊW«U† €)÷VÀ€vÚh  €vÐ ´Cù™ãì>{Þ"}ÛWr+»tû~‡˜_RQ’÷×ù?¢##ÆNx'3óag\"Ä—³H$.—3wÎÌÕI+wïÝ×zÇÁãúÅWÿ drÝB…EÅïN›åæÙËÉÕkâäi"‘H—YÛ©irºB¡Xº<ÉÝÛßÝÛÙŠU …B—áÐ÷‡CÂúq]< nÄ¥:Þ=òöíôf»{7ãRÊYmtØ)Sg,˜?ûiÎýÇÙ÷½½¼’×oÖõ2Äü’æÝmíªäóÓo^½sãjiYÙö»u‡®_¿qöÌñü§Ù£F_¶bÔ+t6X»GׯçªÕjgž¿¬ ù!Ý®Ç5;3Ëå4/M&“…„õ{’s¿•ÓƒÃO?êééÊËËŸðNÖý;Ú Ïž<´³µÕ–ãî ½ :6¼ W%¬,.x"©«AõßtVB\ekcóÂB Çí;é›¶lð0[*•"„°½›+Šx<7í6ç&Št‡´Â277W«Õ¡k)'¡vÀ ÑFbXY»yøÙ³¸Æ×ŽÚjqþÓ‡~a' Õ¬y†ÓgþŒŠzšB¡Èd2sss„PUuµ¾2gÍ]¸eÓúÁ¯ ²²²”Hܽý[¿‹Y\\âááŽ***f2ZÉlTóŸu$¯Ib±˜aQ¢p¹œµ«“ ÊÀ8Ãʺ¾¶ÊÌŒfà†Î•^K99,~ªT*1|)TºÏoó†zcö;BÃ@8ÀÄ1x9QxŸ€öÚh €vÚÚh €v€ péÊupB7ÓŽ[w2 ž:ÂÍÛ÷Ôj ø¡ƒ¤\íènÚ‘šv+¯ ªªÝÜÉxWP~è 2åçþ?t'íÀùÀ×?”Wð¡¶ÚN`Ÿ}u¸‚/Wt†…å/§RRÓî€+´PŒXJ©R-×à‘0 …D¡S¨t Â:T¬··GxXÈ¿ž>i,›Å4íúè z¸»Q(f_úeÁ¬I\6ÓäÛt'µC?oÏ>½¿ÿù4Nàƒb£@;Œ¦*™FR%É}–UTš+ BL&ÇÝÍ' ˜neN¦¶¿ƒ“WXÍ3bÈ•«·Þ?Ê„+£“|X]];bè¨êÈo§ΚL§ÓÁ‡í ´B°|Ñ´Þ¾{>ûÆÆÒ248´Ã(¦Uˆ/¥ž²g²†ÇOtrá!„ÊK‹®_¾pêô‘IÓç‘)dZÕ¾Âíl¬Žž¼ðÞÄ7]]LºÑw–erÅÿýòçÚå³kkêîg=ж¥Ruê|ê;ñC×®˜¿ÿËï{úQ)”ž¬äU,7$_qþ¯^Á*¥¢Å.b½¨árêéàˆ~£ÆM¶µs “)d2ÅÖÎ!(4R­Q]ûû|HDŒF¥lçpǣ‚n¤gªUª?oSífwžsžŵOó _‹Ì/(ññr¶ƒÔ´»9¹EL;›À^^ ¥š/zð\L̇­ÜæÍ1Â\©Rª,(|Ââ:Æ&•JÙl6›ÍNLL”J¥1qCíX92¨fíì*—–ósžæ¿7ñM†!¥±›í ¥2yâ܉<Ç“g/Q($ðaûÊ÷òpsws:rü|úýì!ƒúöôP§FhIj¹&¯ 'ððÑ?=ɳ´²íè(8Nˆª\G„бcÇÒîr]JŠò)j;û¢>aÌŒ„]º~ÛT«¡±[¤#>´µ¶¼}?ûÔ¹+a! sø°“)*%‰Dz½xòò¹'þü›í`Úad:tèС`íü,¸ú»#§b"BÌzöÔT»}8(6âÃĹ%iwîknÛ§Ú –ƒíâyïò…%íh'*™éÀ®¬(E?¾ñ!íneE©+Ï oïü¶#‡íìÄúåÄ9'®©VCc¶HG|¨Ñ¨yn޳'yý¤º¦|ؾò5\·ÍföôN‡‘´ƒNññîžv!´k×®„„‹Åb±víÚ…º{354"F¥R´¯|:sò؈Þ…Å&Ûîù°E:âC\£‘˶¶Ö¶6–– ða{?áŒÉ$ÐŽŽ×ÙÛ;@ȯLK½È`08 Á FZêÅê*QPH„R.k§Þ+Õ¡¾Áþ!}L·ÝÿëÃæG;èÃGOó”*BÈÛÃÕÎÆ |ØÎ±Îÿv@;Œ0ƒ€aÍŠöÖ»3þôMaÞÓØCu¿ÉIK½XW[=yz‚LZGx;Ç™jŽã$‰ÁÚêç IDAT0ÙDv® 'p„\¡`³À‡†—ÙÐ =›rE(ªvwsÆñO”Éä0WjœÙG •D¦§ÍYü ýVʹãüŠr„ÇÑ90(¬odŒBÞ RÈÛQliY…\®(*)F!2fÊJotâ8~'ã†ar…ŠB¢h;Ý––àCy–W¸çàw‚D£›g>*ìãïñoË,¯ˆŒí0µ רƒBÃC£bÉd*†a¸F­R)êªÛñm‰ãøo'Ï^¾~— ‹‡D"©Ôjkk¢nDVUÕ|qè§‚…BeÙ[ÓÌiâª.—eeÒÚaD64È>ýêG+;¶­“B¥Ö×ÕÚÙÙéŽúxy Qߣ%¥B¦TÈ:^TzÆÃó—oÛØ1A¸¹9#„¨ —Ã6ùú0–>þg…¨ãèŠã8Ã’JBÈÊ’aeiA"‘À‡†ð87ŸÊ°f;ºX[Ûi4jJׯ/èEgi‡17§³8 _§1Ãb žÚ<ø'Q¬mì,¬lX¶Œþd2™L&ƒ[ ÇÇ‹ÇaÙ“H$FmNE#ã:;²Á-Ý@;üý¼gObhpÂÝ…K§›A=µ•ÉãGäWÐhf•ÔV^:]FbX[»{ú;ºz*r\£6²v „(*…jF"‘`ð&Aà8®V)Õ¯Éضߤ«Õ*u{—{À¤z+à@;í´ÐÐ@;xi´ÍAŽ+BˆB¡0™ÑQ‘KßOêøÒ®ÛãÚ¦_µ/móh‚Ñ«L× š´h]Z;´MÇq@xúÌŸc'¼sì×#ÁÁA/纡etqtÔ©·±¾’¡ytƒ1 ‰Dâr9sçÌ\´r÷Þ}55µ¾þÁâª*íQ•Jí"‰8®‡¾?Öëâ1hðð‡YÙÚ …EÅïN›åæÙËÉÕkâäi"‘H×à>þd¿§o Pßsç/îûô€·_Pß+©W›|­©Têäõ›}ýƒ=}~ñ5ÔhWî‰|ñÕ‚B#™\·Ö«¾Å¦’òץظÁ\°~‡<Ò¸èþëZ…nC¡P,]žäîíïîí¿lÅ*…BÑú§¯`¾ãÍÑ#oßN·µµ7nÌÿþQ›xízZß¾!L&!týú³gŽç?Í5rø²«´¦L±`þì§9÷gß÷öòJ^¿YW P$ʺgíꤹ BуŒ[kW'5Πeç<¹ü×¹Œ;7ÊË+ F»2wïf\J9+ª,n½ê[l*‹—~˜´¢(ÿÉ™S¿¥§ßkÞËóKšw7¶}´«’ÏO¿yõΫ¥eeÛwìnýSÃÁÚÝ»kÒU«ÕÎ<~YAaQqü¸‰é·®Q©”•Ikbb¢ÇãÀq}öä¡­-BH&“¹{ðË š(“ÉBÂú=ɹ¯-\›_¡T:¹zé¶Ý<ü´'ê>=(4òÄo?{yyB]vÙî†nJ";3Ëå4ÏÓbÕ7i*}B£ÞO\8rÄNNކÏw‡Ÿ>~ÔÓÓ!”——?á¬ûwZù Sæ;ª„•ÅO$u5¡þC⛎0ÅU¶66!wž[ß¾!§Îü1~옫×Ó¶n^¯Í ­'„¹¹¹Zýü%ßÛwÒ7mÙþàa¶T*Ea^ÏÕæ§™™5ÞÖ¨ƒÏðxnS®¥œ„zí”>*FbXY»yøÙ³¸íh!¡ÆÂñªoÒT¾?ôõž?ݹ{¯µµÕ¶­‡jÈ5 …"]óàñÜ„BQ+ŸÒc[Î k¶CÚQ[-ÎúÐ/0ÌãD¡¶¨íô™?£¢"´Û‰‹æ¯^»ÁÕÅ9"¼/No¥ØYsnÙ´~ðkƒ¬¬,%’woÿ¶šÍá°‹ŠŠ÷;†÷yg€ãšj!?'ó–ÍÜÒÚæ…-D*©3bÕ‡†ÿxø[‚ Rþºôþ²•ä,³¸¸ÄÃÃ!TTTÌd:´’¹Ç¶œÖk¶£ÚQø,Ç/(‚ÍuQ*äJ¥B·0ŽãB¡èô™?wîÞûûÑŸ´‰a}C©TÊÖí;?X±´õbå29F£ÑiEÅ%[·íh‡Ù“&¾µjͺýŸì±°°Øµç“m[6´ÞdŽ`niå×;¬ 7+8r`“bôµcUýÜù +W,õðp'B£nºt®õ³gyÞÞ^MÒÇÅY³nãgûö „V'o?vL+Ñ“[N+5«··b`Ñ u5,®B!×hÔºfáÀqåºx¾6tÄ[·Oû¥OPo]þÄE ‹bcúµ^ìþ}{’×oru÷71*2¢6'­\îëã÷Ú°¾‘1..Np{w.Á°²®¯­23£ÒBŒXõ#F¼ñÞ̹®î¾›¶lÿòóýMŽ&.Zðú°QÍT’¼&‰Åb†E ‹ÀårÖ®N‚:lkÍêÃйÒk)'‡ÅO•J%.…úÝÿýPTT¼aݨÓãych¨ïH ºKÍvtÌ‚Bf`³¨««ÿâ«ÿ?z*ÃdiqÑIƒ[ÐÍj¶£ÚaW‰ôÑÖMŸ¥`b_;àçÀЀ÷hí´Ð@;@;í´Ð@;@;h/Æ|Ÿ…À ¥T©–kp H…B¢Ð)T:a¦ïÇζ]&“§¤Þ,-­;òuGG6x 0íPÉ4’*I¢Ò\‘X€b29în>Át+s2Õ”;8/Áö_N¥Dµ3'ü;õÆ;ãF‚—Ñ•L-ª_J=eÏd ŸèäÂC•—]¿|áÔé#“¦Ï#Sȵʢ¾ùáÝœž—_âãé2y¨ò þÉsWTj¼ªºzê[#½=yÿ÷Ë)2™œWTæáÂ}÷íÑ$éUßF³=5íNAq¥@T­Tª&ŽrüKr…bÙ©R©âi!ÿ¸¾Yž:rXÝS8Úï%ŽkßЋçN7N×µMa¾ƒÀ‰†jéµ´³¡Q±Sf%ò<}©f4ªçé;eVbhTì‰_›Ñ˜akŠ— {ûy¯[9¯¨”/—+JÊùõùÂÞŽzãN&B¨¤\èëå¾nù\¾¨¦^"yåp£Úη²d|ø—˾}7ëƒÄéî®Î⪚¢ÒJ*•êîÊ}­T\LD·kd÷’­­Íñ“§áv55íPJ•…OX\ÇØÃš‰jçÀÊyA5£¿°(…RIÆPpo_ ì,uiY…°t*•jgm]/iÐh4J•:<$Ã0k+FmÝ+Ö#ÚŽ*+’IŒÂ0 C¨ºFR\.67·@AtÏU¹{I*•&&&²Ùl6›˜˜(•J ñÒæë¶ïØ­T5혴5ì›F£Ù²m‡_@ˆ3ÏgμE’WýÝÓÓµC-×ää„Ç Ô—!¼_\æ½›ÖP--¯´µµA©Õxmm=ËÁ¶R ¶·µA=ÊÍð󮈭,-0 à B$ªvvä¼Z÷Ñví`eiªª©å²™!aUMQ¹ \XkiA»v3ÇñîØÈ{)))I*•Ž=Z(=p?óÁ¥”³O²3èæôM[¶ƒ¼JíÀqBT%à:ºèËÀut))ʧP¨†|ñÖJ¤ró8z*,$ðÚzifγÙO¯Ý̈ )-ç7È9OòŽüögïo2™üjÝgDÛ…â*k+BH©T’0„"B*•Ž}c€R)óp²÷íQ¯ÜÞŽ{騱ciw ñÒêU+¿úúÛÚÚÿ ƒðûñ“Û·ld2™,sǶͿÿ78Óî]Û¹ #qÑ|]¿ã‡Þ¹}‹““£¥¥å†ä5§ÿ8 Ðn(/ëTi9ÄkÑE†öèå-—+,47gN~AÑÊ„éT*µ¤´òA‘²žô ô ðë6n6ÀvF3(6 !$“+†ÄE"„ärÅÀ˜¾õ R¡¨jHl“is‡j‡—X,æô÷¦ìÝ·Ó†ä·-aßB••1qƒµºŒã8†ÁÃáWÚï PÉLveE©¾ •¥®¤Ý5ÐK çÏýóÜ…’ÒÒÆ‚R\üüË Ã¾!„8lvæÝ›‚òBaE‘˜_¢ª ¼:í S|¼{§§]Ñ—áîÍÔЈ•Jñ¢ýÜéô½B¡A½gðöt±¶²ìBw…ñl×GI™ÐÞÆÒ҂ѵ£‘—víÚ•Àb±X,VBB®]» ÷NOZ¹l붺mØ7‘H$‰^ö !4sÆÔe+W©ÕêœGçÌ[ðjµƒìí äW¦¥^l~4-õbu•(($B)—½°¨ø‘ÿdÔÇÛ£w€ïÿd5´‹ÝF³]¹¥®ŽÌî=0nä%ƒqàÀ@ 8À`0Ú䥷ÆÍ/(Ôí¶5ìÛ’Å Ñ‘ã&Lrq÷™· qÔ¨ 툷!.ÜØiúvªU8™J9úÓ7Ö6ö±‡ê~ù“–z±®¶zòô Ó¨r“ô`çÙ~úÜßA½>ÿ¿S §Žöpwé:&·Ø …˜­WbÓ¯# hId yÚœÅÒo¥œ;ί(GqƒÂúFÆ(ä &Ü,:Ïö’2þã‚r»K ´À˜ÚÒ¨U¸FK&S1 Ã5j•JÑPWM¸i;±“l_8kRqiÏÕ ¼˜²v „‚P*dJ…¬ú±3lÇ0Ìd„Zˆé//Úh €v€vÚh €v€vÚh €v€vÚh]£®9ˆJ©R-×à‘0 …D¡S¨t êÁ·:Õv'._¿ýôYQLdŸ>½ÀK€Ii‡J¦‘TIrŸe•æŠÄ„“Éqwó ¦[™“©¦ÜÁélÛSRo^»8süÙ”«ÝW;ºZ qà¸`èDíPÉÔ¢ ñ¥ÔSöLÖðø‰ºè×/_8uúȤéóȲƀ¸Š:~?uA¦P”TpYvÓ'Å5š/¥™ÑøBáø‘¯õêJ·„‘moÚé ˆ´»úxÕ74PÈ¨Û Gû½äÀyOÓŒJ Ù½s[`€?ܺ¦ N4TK¯¥ Š8L—Îóôåyú¦¥^<ñëá)³Éê‚0°Ìâ QH ÏÔ·GñÝQ>_¤P*«k%.~«^ÒpäøÙ®£a{Ê+8¢¸:±¼Ü]½ºgTÚŽ{IÛAÉdÿýöûy ¯§þ·î+ÇE¥TYPø„ÅulÜ,tÄÄ µs`å<È šÑ /³¦¶®t(BÈÆŠ!i–U¢Bü º½µD"í:îkl»T*MLLd³Ùl6;11Q*•¶ÏöÆ”•WæäÑéæt33…BÑM™±Zˆ¹¹ùüy³ þ‰)©Ñh¶lÛáâÌó™3o‘D"ÑõS}8$¬×ÅcÐàá³²µé ¥2qÉrwß^½C?;ø%Üü¯^;ÔrM^ANxÌ@}ÂûÅeÞ»I1£X`]]=™L¡R(¡âR¾Ϲœ/²³³Ae?~æçÍë:îkl{RR’T*=z´P(éµ³µÕ sÔjµv[ º¹=Ÿ0âñÜàæõý •Ìt`WV”êËPYQêÊó ~ÖPTRîÉsž8v¸V8ªªkÍ(XŸ@Ÿ‰ãFhG.]HzÙ>~üøÆ‡´»mµ½é¼OMT®twåvï/(#µ:>ã½wÓÓïiw9lvæÝ›‚òBaE‘˜_"ª,nýt6›U\üü¡¬nx¥ÚA§øx÷NO»¢/ÃÝ›©¡1*•¡S}.\–÷ßþ¹\¡èÔEïŠF¶ïÚµ+!!Åb±X¬„„„]»vµÃö&–V`y¹»toí0R ‘Ëå‡<¢ë2Ìœ1uÙÊU…Ejµ:çÑã9óµ~ú„qñÉë7‹Äb‘H´fÝF¸ù»‚v½½„üʴԋͦ¥^¬®…D(å†F0=b0‰ôï…9qÙQ!]õ®ø×vƒqàÀ@ 8À`0Úa{róKØöÖfffÝ\;:ÚB´óüÀÆÖ&¸otìÀ¡±1ýàæïèÓÀŸÖ]K99lì4©¤å©~µ 'S)GúÆÚÆ>vàPÝ/ÒR/ÖÕVOžž€a•Bn’ì$ÛoÞɰµµ=~özl„\¿°.er‹Zˆ Ðz%6ýJ0Ò€–D¦§ÍYü ýVʹãüŠr„ÇÑ90(¬odŒBÞ`ÂÍ¢“lç «®ÞÎ"pu¿ÈðÐëÔXiÔ*\£ Š%“©†áµJ¥h¨«&ܴضÇ\V^Éb3©d2x 0eí@¡TÈ” YôcgØîìÄ/]X¿Ð@;í´´Ð@;í´´Ð@;í´´Ð@;èúuÍAœPJ•j¹×ˆ„Q($ B¥Sfú~ì Û…"ñ_WnKeÒ©ß433»~;#ëѳ@ߨð`ð`:Ú¡’i$U’ÜgYE¥¹"±!ÄdrÜÝ|‚éVædª)wp:Ãv•Fóߟθ9s£#C2³ž`$òÉ 7fŒû;õf7Õ£{ÉãÚz„f^½v¨djQ…øRê){&kxüD]ôë—/œ:}dÒôyd YÓö¸Š)WÒÊ*Ä|!F=u¼•¥E—¼%:Åö»÷s$2õ€èà¿/§ }½ÿÑ?Rý¼x–æ²i÷Žö{©¢¢rͺWR¯Êeò¾}C'.|cèÐS˜ï p¢¡Zz-ílhTì”Y‰8ôÝá&@8º«v(¥Ê‚Â',®cìÀaÍÆÄ µs`å<È šÑÛZr%_<$.!dceY__ßÝ×¶+ŠÂ’rAU‡mψùBqÆÃ§f4†…¥yCC·ŒNÐA/ݽ—‘´r‹Å¤™™ÅÆDÿüã÷ÍÇ&Ï]§T&.YîâîÛ«wèg¿ÔeÐh4[¶íð qæùÌ™·H"‘Àß%´C-×ää„Ç Ô—!¼_\æ½›3Z›ŠÅ ¢ºVbmm…zZPàïÓÝ×¶×ÔÖÝJϪ“*1‚¸÷ðÑ£§ùž•H¤Ò2¾@$ꎬƒ^ îÓgóÖ…EÅ/ü vì‹«î§§]½tñêµëºôO>=p?óÁ¥”³O²3èæôM[¶Ãß%´Ç Q•€ë¨7V;×Ñ¥¤(ŸB¡¶©X@„Èä;9¯Ü$cËÁ¾ º¯3lç°YCEɤ ‘Á>£†Æ Š`Ù[1¨hbüžkwldôÒ÷ß~ÝÐÐ0jÌxž—ÿ¬¹ ËÊËõ•óÛ±Û·ld2™,ó£­›té?üøóÎí[œœ---7$¯9ýÇY¸ó;åå}Ö6*.­ݧ´¬ÂÁÞzÁÌwº·›Ûj{I…LÖàáæø+øŽ{ÓoŒz¼Äår>ýd7BH\Uµÿ³ÏgÏ]tîz¾o„nnÏå•ÇsÓ¥WTVÆÄ Fãx;¦Ÿ€NéwP¨d¦»²¢Tï´EE©+Ï o㳆¢’2G6sÜèÁq1$R}ÄÛI¶—U í¬ÖV–!Çù¢žK7Ž/i,/9ØÛ˜´â~f¦¾ l6«¸øù¼©n!Äa³3ïÞ” +ŠÄüQe1Üù]C;èïÞéiWôe¸{354"F¥R´©X{[žsW¿+:Çö2¾ØÕ‰õ|»B R«½=\º±vtÌK“§Î¸žvS¡Pˆ«ªöîû¬w` ¾r&Œ‹O^¿Y$‹D¢5ë6êÒgΘºl媂Â"µZóèñœy‹àÎï"ÚAööò+ÓR/6?š–z±ºJ¡”·íÁëqýl¬­ºü]a|ÛU*ua©ÀýŸŽÆ£gEVt;Ûî¬òÒÌéÓ>Ú¹ÛÃ; ,26;ûѾ:¨ïƒÖ|ø­MpßèØCccúéÒ—,NˆŽŒ7a’‹»Ï¼‰£F€;ßCLŸ_K99lì4©¤®Å£jN¦RŽþôµ}ìÀ¡º_þ¤¥^¬«­ž<=Ã4*…Ü$=h\Ûúý€^¾GOý½nÙô‚â2IƒüvæSž3sôÐ]Çä´ õJlú•`¤-‰L!O›³øAú­”sÇùå!Ž£s`PXßÈ…¼Á„›…qm–_ZX*Ý›N§ Dâ[÷Keòo/]®NUF­Â5ê ÐðШX2™Ša®Q«TІºj‚ÀMÛ‰F´ýÃe³…‘³!40&ÒÏÛÓÖÚ’N§ƒ—“Õ„AJ…L©õ@?Ëv3 E+Z¸l&x èšÀú€vÚh  €vÚh  €vÚh  €vÚ@×Ǩkâ„RªTË5¸†@$ŒB!Qè*‚z@.#Ú^ZÎOMKwsåö S«57Ó3ŸæŒ5ÄÎÖ¦¼Bz#Ãtx-.ª‡{ 0íPÉ4’*I¢Ò\‘X€b29în>Át+s2Õ”;8F´]\U½ÿ›ß†¿]R*ЄkNüyéq~é¬É£.]½=x`¿ý‡~{=6\\S×Ð ³°0ï±^LG;T2µ¨B|)õ”=“5<~¢.úÆõËN>2iú<2…¬18®âÑç•juAq%‡eÒÛ÷Â囿´¥ ¦ÕÔÖþõ‰,‰ßŽØË»kÜÆ´ý•t++븨à­]SW/§ðAaÙžÙÛÛ^ºqŸN·x½ØÖÝ_¼ùÆ€î&í÷’ǵI¡æ)@·œï p¢¡Zz-ílhTì”Y‰þd¿§o Pßsç/îûô€·_Pß+©W Ì Ñh¶lÛáâÌó™3o‘D"ÑøÅWÿ drÝ@;:ŠZ®É+È ¨/Cx¿¸Ì{7)f}UŠÅÕö¶–$ S*U‰J&#„ÔjœB&W Döv6¡œÇyþ>]Á}F´=íæÝ_O_2£ÑsóJîdd}÷óé‚R±9þ¿œ¹—‘uäx ÕŒVTZyýæÝn×ÈŒÛB3eêŒóg?͹ÿ8û¾·—WòúͺCB‘(ëþµ«“æ.HE2n­]dx†O>=p?óÁ¥”³O²3èæôM[¶ëN¼{7ãRÊYQe1hGGÁqBT%à:ê ÔÎut))ʧP¨†”VP\êÈf"„JJËYL„P¥@dkeŽªªmÈÉ-Ìyòìüßi¯ èŒhû Ñ‘Áþ²†úYSFÅD†&ÌšHj d ØIDATOg»„Y£#Bú…÷–JꦽõÆ ÑÝ®‘uÜKׯÿ îÕ¿ô¥ÓéÖÖVëÖ®ºt9UwhÕË ÆÛo—J¥¬\ªÝ~šûÌÀ ?üøóÎí[œœ---7$¯9ýÇY݉[7o`:8À˜…òò> 3H§¬,á¡! •ŒÂq<.&Œ ‚Àý½Ý=É_¶pš£[=e0Ìö¢² +…ff†ªohà DÂ{i—T˜›‘,æ¦Üõ{©ù\©vãöôM[¶?x˜-•JBGsv¶¶!­3uÛjµÚÀ ••1qƒBAà8Þ¸d.—Âaí PÉLveE©›{Ë>*+J]y^¸aÏü|¼´£Ú^ίrsdi·KJ*Dx»»è¹p»ëwq½Ô˜YsnÙ´~ðkƒ¬¬,%’wo£µ ›}þÏ“ŽŽ\ЈN³PèïÞéiWôe¸{354"F¥Rth̬ÑD†t¹»Âx¶ã8ÎÖð\ž7Ö’r¡¥¹­­µö«¯RTíæÒ]¿î:¯…Èer:F£ÓŠŠK–­H2â5Ïœ1uÙÊU…Ejµ:çÑã9óXt†v½½„üʴԋͦ¥^¬®…D(åŠ`ìæâÔ7¤w×»+Œf{n~‘R¥òöxÞVTáâø=¼höäìGÏúôî…ruv|oâH¥RééîÖý˜¬v „‚P*dJ…¬ú±ƒ¶»»ý;—A§ÑÂBu».N\ðЗí´Ð@;@;í´ÓÐFÂq ø À œÔÒBÐBLµf;ªÖ¶µU"«Ñöxêkª-¬mA@ é!5ÛQíp÷Ⱥ—V[%ÆáÕƒü½T#ææÜóô ÂqZH©Y}`†Ç¹¨ J ŸJj« /0©ñ-FbX[»{ú;ºz*r\£†ÒCj¶£Ú¢P¨ª‰D‚®i… pW«”j=ëB 1Õšm¡®ÛT¾Z­R·}QI ç-¤õVÀ€vÚh  €vÚh  €vÚh&\`(8.—K5 B„‰Zˆ‘Èds£åo‚P)*µŠÀqSô†‘H ÕŒFCóA;Œ‰´¡þٳǷo\S(ä&)4-:6ΧWoss‹æ Ée ÅEù™é~…éO&‘X쾑n^t:ƒh¶fg7´£ý(dÒââ‚;7®‡¸ñ¼htfZëbˆ¸w+5íêe[®/K&•4>ªV*++Ëo߸>jÜ$7O_2™‚!“2_ƒkrsîŸ;ý»µƒ««R)óA;ŒƒZ­ºqírï>Á^½„Å2©„ L­ãjcmíææ–òçq¿€>M)UŠŒô›oN˜Âóô#ÜÀõ,»>þ} EZjÊ”™‰èožn>hGG¿˜•J…+ÏKP^Ôïõ1&iáßg~²`0 Y Æã¸XÈwæyá¸ÆôDS‡£«»øÌQ‰æƒvF¢›[Èe „éÆÀ0LOt‚ ™DÖhLy-R ™¬Gz¸ù ¼¯H†aA&@#aúÓMÜvÇÁ|ÐŽÎèw`ÿ|á=ÁÌæéA˜¶íƒù ÒŸÿ·ÿúraXÚJ%5/ÙÌÓ;Ãö—iÝ‹nâå›ßuL+æ·¬§ †zŠÔé¾:{ö\XD´­=;,"úܹó]ÊL£˜þü…¨~ýmíÙ½ƒBÿðS7ªåŽ˜ßõ­nŸ™ mÿB&ˆÎø»}û΢Ä÷?Þ½“_^üñî‹ß¿sçÎó£ö¡ÿó÷Â~GÇÊ¿yóÖ‚E‰Û6oT”œ:ùûµ«×^ªuýß|½VwvUÕ|ÐŽJò?c–ÎùÛóñ'›6®80ÎŒF80nÃúä=ï#þùý³vã^Æ}o¿€ŸÙÐÄÌææw°ü÷îÛ²iãà!ƒ©ff_~y°‰ujf݆Mn>lÇ÷fÌ®—H´éù……oMœÌæºØ1¹ñãß…Út†•ݾ9Ô+°=;:6.óÁÃŽ;Áèæë³º­F)UªU«×ºº{;º¸ºÿ@ëCÆ6´£ƒýR§ö;nܼ5|ØPÝîðaÃnܼոkäìÙscÇ¿ýÉÇ»ÎïÌ~©5ó;fàÆ´ò%¹{÷Ç÷Ó®^.Ì{J§Ó“×mЦ¿õö¤ÄE ós óžøzû¬úp­îÄ«W¯þuá\YIÁ˜Ñ£/鸌n¾>«ÛjÔ¶í;rrݸvåQÖý²²òÖ=ÖîšÒg>Ì•vÊ$¢±¨©©±··×íÚÛÛÕÔü;ÝõÕ×ÿÝýñÞc¿ýÖ7ôΕv„ÚÚZ;;»V2|ÿ?œ:ñ»³³Bh˦ Q1ý÷í݃º{û†6ƒ¹9}ãÆuþÁºSöíÝ£-sÉ’Å;víé‚æë³º­Fýtäç?NŸÔ:gçŽm­{ìå4rÐŽöŒY:[[[qU‹ÅÒªmmmuŸõÙÏß2¹oßPâe™ÙbzG>ÝÆÆ¦ªºšÉd¶0ÃB¨¼¢",²ŸvÂÇq ôé·nÝN^¿ñA惩TÛ¾u—akgG<¿ÍÕjuCt‚ùú¬n«Q••|ww^“ Ðç±ö]*ŒYºë\itTĹst»çÎŽŠÐuAÏ=}ìø‰}ûöwß¹Òè¨È‹ÿjeÌÂåpeeÖV ꪅ’Zq}H›>múÌóæä>É®¯U”úfQ5F7_ŸÕm5ŠËá6)DŸÇ:0fíèÌÇW4Wºlé’›·\N½ªP*¯\½¶iËÖeK—覾œœœÎýyæûÃ?ìÙ»¯“.à…);XþòeKÖoÜô×¥Ë ¥2¿ `AÂâ&{³gÏ\¼dY~AJ­ÎÊΙ>sŽ6]&“Óht3­°¨(ñýe¨Ñ7¹~cÌ•Ù|}V·Õ¨)S&­ø`UiyyMmíªÕk[÷2¶ù ]ºß±ßÞ•¬â:¹­X™ôÙ§ŸDF„7þqärΞ9uäç_vîÜýjú³=*2â³O÷%'¯wtæÿvÿؘ&_’Ë—¾ß/:jô›ãØ\—Y³ç½9z¤6ýóŸ~¸f-ÇÑu䍸è¨È/ã%÷;ÚU¾>«ÛjÔêUøùúö‹‰ëݧ¯‹‹së{9ýLÌ/]x! õ5çO}í±ÏeÄŽ7I¯ÿuR¡P øÓ$5ÔU77ÿ½…*åR®åúºº?~ÿÌob>Ì•v¸ß¡³˜ø»p$½é¦þ Aà`>ùrOÎ÷ž{u]Õ@~#€ஸ+pWÜwî €»à®À]pWஸ+À2D–öï/¿€v§g΂E81ÚWÕñº+BÈ3K^ƒè'æ/ûßë!»jî„nó"æ{›FW Fî ì Ã0#à®Àzî À]üÜ«x+ø+¸+@twÀêÑÕ?~5™b¢M©¢¥û¼UÑÖk~ká‡W ÜØÃ] Š®žÜ}…¢ˆT"º7Æoó“Qoþ«®FÝÃn‡\cE˜ÀªñÕ„†a˜݆ÿ½Üö§‹ªg¦ßÁ¾õÏå“ÍON“}öÒ_,MZ1{’X8؈“=œ(ºš;wî±cÇ0ë£gæÌ™ß|ó £«þ[Î^Õ,š`Þb~’âµâÕ„Wç„>;#ð³³×ð…:†»:vìG·ÚQáè>X†eX¶·eŠÿ'ÜΓ—»pðö½§›5=FBÈÞ3-¿]wå0î ”Á?µûoññuéMæ-æ'×4}ìók½¿D„ÒpW$'Çñ,C ¨5Ê] ·å¾ßòæîÁ‹¾â–Ž>BÈ>âÞ궸VªE~¾ãY†Pj8–ÜjAQÌ/Ñ‚”‰Y÷þù¢ªÿ[ì“_>âç)ôó¾ü“‚Êv¤Z º[GWG^M¡¦Cg,kêÎû[MÝ­û®úï\Öܽû žn‚o«:œ¿†è ÑÙ±Ãñ,C ¨5*¶bú?æ¿W<ÿ½âÇÞ/ynOYþÿÕ)Úzú¿Å>!„üí?ªÅŸ\yj÷å_)õFz€'{À]ŠÜ\dz 5 Ôp,eÉÚãJKÁb X3º²ÙQ®2ùnj@ ¨á`ÑÕ™·³®h4sÖ¬¶à°Úª²ä´û8SuuµL&«¯¯gF*•B”Jeqqñø·ÄÇ[ÇŽ--WW+e²b¨5 Æð[6mÚ´qãF랋ʊÎGÇOÓ‰±¨7 ~exÒ<cRÕ u]Õ`Áaÿþò‹g–¼ÆÑ‡¡( wÉõSƒ@ ¨5ìrÞøËþwç,X4¦ãþöŸâ»ž%ÒoƤª‹.îØÁÕZw–¡Ô€D÷8¤Zú‹Ä¥¢+ÔXƒeXv^˼ˆ®¸;1: cUÕ ˆp\Ë]!ß j@ ¨à®TBƒPj¸+îÊ Ô€PÀ]9¨„5 Ô ï»Ê%„pÓÇš!„pÓ –a–íky;/ϰEBD"Q@@@FFF^^^jjªù-ÔCpøè*ŸŽJ×çæ0g™" Ô€PcÄG_O² Ãèõúï¾û.##cÖ¬Yr¹Ü¼‹C;Bä;A ¨5lžBBBV¬X±yóæ-[¶˜£«’’’˜˜³ßb&&&æòåË&“)/// @"‘dffjµZø*‚Ì@°O?ýôÙ³gÍ/SRRüýýOž<ɾ>>sæÌ)//繃ä³ËDf pÃ0 Ã466Μ9sñâÅîjT ß j@ ¨aüüüÖ¬YÃFW&“)/// @"‘dffjµÚ;µCmmíã?îãããáá1wî\µZÍn?zôèäÉ“ÝÜÜ"##÷îÝ;¼‘Ñ^o½õV`` ——×’%Kôz=Ü•MA%4¨5 †]Ðh4o½õVjj*!dÛ¶mr¹¼°°P¥Ryzzæ òáCíðØc­\¹R­V«Tª„„„Õ«W³ÛŸþùM›6iµÚÓ§O_¸pax#£çôéÓ¥¥¥ …B¥RmذÁîºV¿+GÙ_PjØë¼1þ~Wý/Ÿ;w.22222òøñã „•J•’’ríÚµþa¨ú£Óé"##Ù+<<|íÚµO>ùdhh¨y‡Ñ,šy EQÕÕÕ±±±„êêêY³f544ØEU®ï5 Ô°1 ÃÐ4}õêÕøøø¢¢"BHSSSrr²H$ …AAAæ5=3CípîܹxÀÛÛ›¢(//¯¶¶6vû¡C‡¾úê«ÔÔÔ˜˜˜#GŽ oäG@  iÚüÒd2 ?8s›æ¨¨¨Á®Îö 3ï–¡Ô€NùÅÄÄ8p`Ù²eZ­688¸¾¾Þh4šL&Ö™ بžyæ™åË—755Ñ4­ÑhÌÑôéÓ>ÜÚÚºk×®ìììá øCÕÕÕæ—ÕÕÕ!!!æ— …‚}RWWhwùx›pVVVAAá²î]©T²ÂsKV–² @˰ ËÎg™ÿ„††fddûìúõëccc†1ÃéÏâÅ‹—/_þûßÿ>22²®®nÅŠÏ=÷œùÝÕ«WïÛ·²jÕª¬¬,û+x]Õ`Áã‹}ï0œAn¥~ZœÆá,s&Ô€N¦†õåøbß;ã<1ÕñãǧM›f2™¶mÛ!‹'Ožüç?ÿyÀÎCíðü#::Z(†‡‡ðÁæýÿô§?%$$ˆD¢äääcÇŽ o¤?z½~íÚµ“&M …“&MÊÍÍíëë3fÇŽlbá /¼ÐÓÓc/UͤZð—Ó¡Ô°Ïycü©Ðsüªºèµ+ 2ùnj@ ¨Af ÿ-C ¨5€íáá,@tÅ3P j@ ¨à®TBƒPj¸+€+øXÕ"—‚®š·`!j@‘Ø à®lO>!Û¹IJáî¶JX†eX¶¯å<ŠBÖ¡sƒÅ@pW<ùNPj@ wå ß j@ ¨à®ðÊ‘³ØP3ï–¡Ô€pœZ¦(Š¢(±Xûì³Ï>c_®Y³f˜AÿÖÚµk×®]kG1]Ë]¡Ú€{Ô\H°Ö•jTɃΤà X wÅ3ïäè:cn@ `øps2ùn:cn@ ?¯]åB¸)ÌB¸©/숖oƒ•d‡Î°l{ËÛq:wvø]åB†‹Gnãp–)bUƒ#ü®¥æ†©‘‡Ó9Ü•3|'G×sj¸+àüŒXÍ¥­­ *à®ì‹ç;UUU ¿CYYYmmíøS€ 5œI we\9ßI¥R©Tªá÷¡(ª¡¡¡¤¤dœ½× 5œI wl‡N§cC«k×®1·¸ÕÝíRSSÝÝÝ5\.ooo‡n¸+ûàš•Ðhš.++£i:00°ÙÿÁcöõõMOO—J¥ƒ¡´´´¾¾ÞùÔÀÜ€îÊpÍ|§ªª*N'‘HâããG³X,ž:ujdd$!¤®®îòåË4aC.Ôp&5ܰì%+@œœ,ŒöëfÛ ˆÅâööv¹\ÞÙÙ %°ê>>>sæÌ)//~g(6 |¬j‘••UPP@ ŠŠ"„(•J¶Æþ8·|þ¹2<\áX–³²”–ÛaÿâããÛÚÚÆ:æôôôâââÞÞÞ¢¢"©T:uêTGWsÉÕà-lª­F£Ùµk×âÅ‹‹ŠŠàx,ôý×U öï/¿xfÉkÜý᨜"EŽê4òÐ2MÓr¹\§ÓÞyç–YfF¡P444Bd2YBB‚H$‚ΰÌKËÖ?oüeÿ»s,ω±ÿ¨ôz½¯¯¯^¯7™LëÖ­Û·o_WW×ã?¾gÏŸþ¡{È€Od~IQÔÎ;wîÜÙÔÔDÓ4EQ¿ÿýïóóó›››“““ÿð‡?¤¦¦òÙëŒUU,:?C]²ë) :::99Y$µµµvuuA[ÆŠF£yë­·XG²mÛ6¹\^XX¨R©<==srrÌ.êVÖî\¼x±°°Ð|ãÿ©S§Îž=ÛÞÞ¾páÂììl,:®“ï4šKV£³L&óöö.//×jµEEE±±±ÁÁÁ¤æÔ°#æ°)88øÜ¹s„}ûö?~<44”’ŸŸŸ’’òÑGÉæÎ;ï¸ãóË>úh„ „×_}Ë–-Ϊ$2ùnÙÌwYÅÇÇK$«ŒÙÃÃ#555$$„¦éªªªŠŠ “Éäj`n@ ûÂ0 MÓW¯^g/\555±+B¡0((H­VÕfHHHÿ—¬¯"„H$£Ñwƒ¡î²²Â\âââ…B¡Z­.**Òét€ÑX111X¶l™V« ®¯¯7&“‰uf·=J$™ÿÅ®_¿®0Q†Ÿ–ÇÃè/YYV½- `Ú´i^^^ÝÝÝ………·ýaˆ*yPÙ԰¡¡¡\ºtivvvMMÑh,--ÍÌÌdwð÷÷¯¬¬4’òÎ;ïètº¦¦¦¥K—Â]!ºr*Æt—•ÅÕÛ$IZZZ@@€Édª¨¨¨®®ðóUò †3©aE^~ùåO>ù$777##cöìÙ‰$++ká…컯¿þú]wÝeþ±»gÏžþóŸ~~~÷ßÿ¬Y³p~sþDöáñü!î,ÿø¯Œ6ñW§ÓÉårš¦ï¼óÎÑ,Ž?¥¸¥¥åêÕ«4Mûøø$%%yxxXË2wc†eçµÌÇDv0~U͈\\8ö~d'À‚KVãÏÑ öñña3åryBB‚L&#È…³•e¨\ >º«\ö7˜Ã®Öù !d–ªrsu>*©«‹ôQÒÛ;Ëù„q_Hð&dš·wenn[FFÙ•+a_|µgO¾ÉD¸¹D1J5,À*jØØ2ÔèÏvœÎá®lO>!Û­Ôwvv?¿avxðÁ¹ú6\ T©Tªï¿É?ÿ¹à…l?‡’ ill¬­­mÈÌì|å•ÄÄDwwwŽ~p´”ä ¿ˆ †™<ŠB/-çÆiS-hš®­­-..¶ãló‡Fy—Õ`¬›£jn—uæŒãµËB.ÔpWv ³³S.—³•îì…m ™ç.+«çh™Ûe‰Åãj—e 5Ü•}‚*öÞ#;–zÔétÅÅŵµµœ†YV) hEØvYû÷G’q´Ë'wWýƒª°°°ôôt___{ &,,ŒÒÐÐÀ]˜eY/+3Üåh;^»,äÂA Àsœ$‘¦éºººÆÆF†a$IBB‚ÙQ1œ]ŒѲL&«¬¬dìÐÐÐÈÈH œÊ0Ñ›e—¬Ìp\Nšžž^QQ¡ÑhŠ‹‹£££Ù‚ž¼Uò @tåZAUØk9\„YÜ´"îîî)))aaa ÃÔÔÔ”••9qñMÜÕgíWª¢££‡‰`lŸï$¢££SSS%‰¯fYå’• Ôp vYÈ…ƒ€ç8p¦ÎÎNv©¢¨Q.µÙ±´Ì0Ë•cµ¬R©¾ÿþ{@žžnÙ2 íÕèííe‹_‚Ûeñó„eÞ[F&ÇÀâ"Lœ5«-8¬¶ª,9í>Ž>LuuµL&«¯¯gF*•B”Jeqq±y MÓ%%%uuuƒME jhhè¿Ïà£!ÕÕJ™l„},Û2¢eŠ¢´Z-{7’Á`P©T&“©³³³¤¤dL–u:]ii)!„a‘HÄ阭h¹¹¹Y¥R±Ã¾~ýzOOOww÷ˆŸWß ,óÜò¦M›6nÜhÝsQYÑùèøÉ<91: cUÕ£+ ‚*3¹¹\]é½å±†YýÒ4-—Ëu:]``àwÞi³1[ѲZ­®ªª2™L^^^IIIc¹ûm·¹ÁŸHÅ1ÕpøèŠ‹àLÑ•#]»땪Áð!ßiÙ¿vÌhŒ Íh4zzz²u>'MštêÔ)6lªªªš5kVccãÑ£G?ÿüóƒΛ7oÊ”)åååGŽY´hÑ‹/¾øè£Ruýúõ &°Ãóóó»mÉP'Oµ°Ö•*>WBëfÙž¨!‰’““cbb(Šjhh())Ñëõ¶Ÿc¨’58‚aš¦¯^½_TTDijjbï …AAAƒކÚáܹs<ð€··7EQ^^^æ‰C‡}õÕW©©©111GŽÞÈ0´¶¶²w°.::š}ÍÞˆ2sæÌK—.uuu]¸p!//ïܹs:îÒ¥K3gÎd÷d}!D"‘X½Šc¸+keð<ßÉ|5Ë6ªòJþí²är;´ËB.ÔàŠ¢bbb8°lÙ2­V\__o4M&ëÌì?ÔÏ<óÌòåË›ššhšÖh4æÀhúôé‡nmmݵk—y nÄ¿2˜C‡edd°Ï û¼¶¶6 €âéé÷á‡NŸ>Ýßß?==}×®]‰‰‰¶pð ‡Îx|)•J Çk—Àh~“eddÉÍÍÍÈȘ={¶D"ÉÊÊZ¸pá€Ý†Úaß¾}«W¯öòòúéOzÿý÷›÷â‰'žzê)//¯œœœ odðùÄÍÍ-==ýÌ™3'OžLKKc·oݺ5000666666$$ä·¿ý­Ù]i4š‡zˆòÐCi4›¹+ÇHµp²ä¨1"íííƒÁÝÝ=))Éq"¹–‡ù¯AÍ@‡À%ªZ×A*•¦§§ûùùéõúâââÆÆFh€‹ãZî ùN¤†Ûean@ ÀsD.õi‘ïäXj°í²|}}Ù³º»»cc“ñÆÜÀ܈®à2™,==ÝÇǧ§§ç£ŠZZZ  pWvƒéÇ€—V¼|ê(•Ð~üÙWƒâáᑚšâæFWUUUTT˜L&žÙ–¹j¸+;ƒJhŽ«†@ ˆ‹‹Ûº5Q(ªÕꢢ"N‡¹¹à®à#_ÍÓvY¸+k‚|''Pƒ£vY˜PðaΚÕV[U–œvGcª®®–Édõõõ ðõ•Jeqqñø·ÄÇ[ÇŽ--WW+e²b¨Ñ_ ¥R9qâÄÀÀÀöööÎÎN¥R‰¹¹±iÓ¦7Z÷\TVt>:~2ONŒNÃXU5ת?w§;.ÜUp5ºººÊËË{zzD"QBB‚L&ÃÜpṪŽªZŒ ä;9™ÞÞÞÓ¦M“ÉdF£±¬¬¬¶¶ÖâæÔ<™|· 5†ÇZí²07 €»€sìÞ. weMïäÄjŒ³]æÔpW<•М[ ±X>^ 477÷ööBà®x*¡A 3ÁÁÁiiižžžZ­V.—ïÜÙ†¹¹ø 2yÿ !û‹K5ŒFceee[[!$,,,**Šâæž?Ì îÕÀb ¢+œkµËpþßÊÃ1eeeBÂÃ㢢!J¥R¡PŒËçŸ+ÃÃŽe9+KYP €œªzî\O``³F£¹téÒäÉ“¥R)æ†cYX tªÅ@dRÁò0–ûú íííEEDDDDD@g‡²ŒÅ@,àŒ§]îÊš ß jŒ8f«·ËÂÜpt5O@f ï¿!dÙC ½^_QQ¡Ñh(ŠŠŽŽ ÅÜàýÜÀb ¢+\±¶ËÀ]YTBƒ£3W%''‹D¢¶¶¶Â®®.Ì œ€/42a–‡·Ü˶ËÒjÁPí² 3,c1ÐÉA†ÇÃÃ#55•m—UUUÕÑÑáí²'0Œ¡Oo0šf›'ƒ›?'‘Hìæînq?i×rWÈw‚–™m—åççÇ–rïîîNJJ’H$˜®07ÆDoO·²¾¶¤è?jU |”¡@8ñŽ€Ôiw‡GÅxxH,‹ƒù¸˜GQÛñõ^¢ /ß´©;*JØÓ¿sgÀ×_CžOH®½}}ußž:1afxt¼P(¢…¯†b¢MÕåÅÇŽzôñ§Ã¢úú,é âç´ÛŽüÜBh$+óH !i·ÚeU¼ñ†æÃÙvY˜v'¢rí=†>ƒ¾è?{:+":ahÚ„lÒˆKœª×ëÏþw֋ˉEî ™|· 5ø¦ÆXÛean8º£‡¡éë­ªI14m¢iš?&8,òºúšÅ?ï\Ë]åæ:že¨ÁO5´Ëb[`n8åÜ“Ãb"iÚÄ04"¡p<ëÈ ÀB¼½½§M›Æ¶Ë*++s¸vY€ (EÃÐ4¤¸môI ,ÿAf ß-C >«Á¶Ëjll¬­­mhhèììLLLtwwÇÜp¦¹1&Å0 ÃÀ]Ý6ö¤ÜÕèÈÏw<ËPƒÿj„††úúú–——k4¹\ž˜˜(•J17œfnŒ-º¢(® Ú‰·¿®«ƒ÷îŠÏòj`|}}ÓÓÓ¥R©Á`(--­¯¯‡&®‰ ÒDÿjƽþ&OIûüÀA×Ñ™|· 5E¡Úean8úÜstÅ0Ü=.\¸¸tÙò­›7ª[ÿëзg¾½ù!œþ]+=¢«Ñ‚|'¨Áõ˜·ËÂÜpô¹1ÆèbáîñîÎ÷¶lÚ8{Îl±›[TTÔÇÈܪõÄ>1šLëßÜ71 øùÿzIÛÕÅn¯­«ûÙ3Ï…JeAO<õ3uk+»]â#ݳïw&Oõ›pÏý?)¹\ÊéøN–j‘••UPP@ ŠŠ"„(•J…B1þ-YYÊ‚,ò ,»»»ëõúâââíÛ¥7 3×–y] n:ÜpþÂÅv¿{û Cyûíw‹ŠŠÏ9åççûÚšÜuëß|oç;„Ÿýø`÷ò¯ž>u‚+uæ¦>–iëRÙss¹ºÒËeî*@ NÇÌ0ŒB¡hhh „Èd²„„‘H„¹ÁåܰEönmÇ¿þöÇWV½iÐ÷ptzô•ÞÑÞvmp…e/ß Ý7!‰É)‡ÿy(..–¢V·Î¸/CqµrÀκžžÄä”úÚ*öÀÆú69H×Ó<)BsCÍÑàµ=ðñ˯®ëîlw’èŠ;ï5l6f¶]–¯¯/{c[×ÛÛsÃé —•Øýüün´·Ëd²ÛüB"„ÒÜÒ’~÷½ì&š¦)Šb·_¼xi݆—K.wët7½û­ý¥Rö¹§§§Ñhänðã\ Df "“ÉÒÓÓ}||zzzŠŠŠZZP¥ÛÉá:Õâžwýõ‰Û¼En¦ZV\)ÑÜPw¶·vi®k;ÚØíϽðâÒì_VW–i;ÚZë˜AÚ&e©£ùNPÃöc~ÿ}ÔÔÔš¦«ªª***L&æ†óFWNSV¯zuÃÆM'¾9¥ïë«U(–þjÅ€T‹—^zqÅ««j ƒÑx¥¬ü…Énïééuw÷psw¯«¯_þëUæýÉí.Ï ‘}ô ß jØE ¶]Vbb¢P(T«ÕEEE:sÃi£+.”wOßõþ{ëÖmžñäS?ϸÿ¾QÑê•¿¾÷ž [ºä¥ìÇÌc·´ûýÜß¼6oþ÷̸û‡A:Nt…šØˆ€€ooïòòòîîîÂÂÂøøø€€ÈâlÑ÷E#yxÎ#ϰQÛÑfï^[½òµÕ+ì°`þ¼óç™_.}ååÞö%¯ôAÍ@¾[†Τ†D"IKK»Ù.«¢B£Ñر]æ'Ñ•@À&9Às†ahj³™|· 5œL ¶]–¿¿ÿÕ«W›››µZmRR’‡‡æ†ÓDW CÓ´‰€Aд ÑFpp°Oyy9Û.+!!á¶©ÉÀ£+Ša¸«ÛGWÎ×@$—‚¦Aæ/˜1œQ oB¦y{Wææ¶ed”]¹öÅQ{öPcIÄÜèÏv~x+‘@DÓ&ÚwuŒFƒH`¹Ó᣻Ê'd;77ësW–aÙË"B’ ¹Ù.+3³ó•W·Ë‚Σ$¢ìžuH þ&6ÕUûO@¬|:Û¯ûO”Ñ–^ØÃmÂØ™ÐÐÐÔÔTwww¶]V{{;4qPÄ"qlBò•¢ 7®«iÂP„ƒ}Є¹q]][U:5ý>c_¯óDWÜ|'¨ÁO5ØvYííí¥¥¥˜Žç®ÜÝý&L¾ë¾ê+E7hô6F”À×ÂÔ»NêÕuY¼ºT‰[G„»Å¨ÁCêëëëë놑J¥‰‰‰b±sÃŽç±–¸e‡!rs‰Ýyx‚}¡iÚÔ§ï³4´"È €WDDDøúú²a–\.OJJòõõ…,Ã0}¯Aß )¬¢¹Ô§E%4¨Á5¤RizzºŸŸÛ.«±±sâj‹È¤‚eG±<švYЙëó†‹Ñ.öC’¢¢££“““E"Q[[[aaaWWdpW®ò †c©a¯vY˜€¿áx¸¸xñâììlBHxxxTT!D©T* ×ܲx±2;[5\Yˆˆˆšššææfö$,,,::scÀ¾,Òto¯Îd2qÙRØQÝ@(ô”H,“ÈÎÿE!$+C BQ«ÕUUU&“ÉËË+))I"‘`np}Þ°À]é´š«W¿¿tþ[=’üý¸»»ßsÿOâîœìééeYa ×Jdß±ƒ«µî,C ¨Á2¸]!˜¼BߣS*ßÿvJJjxDŒ»‡„BùSB! a /ž>wæ”ÿÄ ¸ø;z,ºS™° ËŽdÙd2±í²!‡‡¼ý6'í²hYtÕ­Õüåà’’'GÅ&¶¶({t]X(êÏõí×®©~õú›Ý–TÃmÂ8ýÛe=þxsq1Ûe¹rÑ×§‹ˆQ7×ß;ëqÈÑŸ“_ô’Hôú‹- f ß-C ¨1¶]Ö‘#å!!œ´ËÂܰ%ððôêíéfP0ðv°€B7áÑ©PÃiÔðööÎΞváBe[[[YYYXXXTT”µ®”`nX~FPì²$CÃ]Ý^¸+\Ž®.QrròÍvY cj—¸‰®nžŽ] ¯%Ǻ”R¨„5œO .ÚeanX=üà®x„§—ŸÝÇ0@¸«ÈÍu<ËPjŒÛ.K*• †ÒÒÒúúzÌ »Evírôè±ôé÷øOHŸ~ϱcÇL>.æB¸¹Y!„ps,ò}-‹ ™*Ôÿâõÿõ_uuuš¿þ5qëVqG‡ë¨±gÑ•íoá¾ôÝ–-ÿõöí¹÷žç/\\òËì/þt`ú]wÙk<#èãÑU>«,ÜÆá,S„PcTj˜LŸ}6%5U,·OŸ.?z´S£q5òø=PfÇlãÇ;ïþnÓÆ >ø7w÷üɛֽóî{Ì­bPì“Â¢âØ„¤Ý}lûá Ћ#9Bä;A gWÃ*í²07Æ=~ˆflû8áâ£?d~ùèß¿pñæKBÃ=zìɧ~þ»wßþÕÿ{ÅöèÜÀÝÝ=%%%,,Œa˜ššš²²2£ÑYø¿Ø5N:::&L˜`~9a‚´£ßjð²wÅ««þþ·/ÌŸ‡Å@ùNPÃEÔg»,Ì ËO©ö[ ô÷÷¿~ã†ùåõíþþþæ…¸]»?Zœõì´iiŒ=ƆÅÀ1ƒ|'¨áRjXÜ. sà уÍWÛî™1ýر¯Ì/;~ÏŒéæ…¸cGüýÿ|ï½ì° ø£Å@Ü& ¸©©©l»¬ªªªŽŽŽøøx¡Pe8‹®æèÊÆ¬Zùêâç^ »÷ž.^Ú´å·üy!!!ÇþïËù=a4™^[½ÒîúÀ]*¡A TC ÄÅÅùùù±¥Ü»»»ÙvY˜œGW¶eÆÝÓ?xoçëkrjjjcb¢w½ÿ»»§ßõÃ0&8(ðè—‡ç?þ¤Ñ`ÈYûºõ±àX´gäýìG >¨a5t:Û.K(ÆÇÇ8—|h ÒqüÈ_úÈ“W+ŠîŸý¦hΞø—^ß§Vµ<·t-ˆ†C"‘¤¥¥±1VEE…F£‰‰‰±o'ü a^ D‰Ûaõqw•••UPP@ ŠŠ"„(•J…B1þ-Ÿ® W8–å¬,eAj@ «¨! ½¼¼Ø´ææf­V›””¤V«@ ž`.áJÓ&8§aôÁb Ý–’`–ËrWWWyyyOOH$Ü. Ý„-^ ƒ¡»³sƃ„„ëu݈®c†m—UQQÑÞÞ^ZZY,ÀC"‘…¦Ìð,+<¯Õt@þ¸¹¹O»oVpXŒNk¡2®å®vìàj-‚;ËPjرX~ùÕu–]»ÂmÂë{Žèèh__ßÊÊʶ¶¶É“'ð…|ÛxþÐ0/í’žÇ.vY÷ûùùÝho|/öÅ‹—ÖmØx¹är·NwÓaßzË_*eŸ{zzFöùµkªÈȈckniI¿û^V.š¦û±º|X ¨ 5 †ÍÆ,“ÉÒÓÓ}||\ÍU[}ížwýõ‰ÁÛŸ{áÅ¥Ù¿¬®,Óv´µ4Ö1CeIÜzX§¨`$(0°âJ‰æ†º³½µKs]ÛÑÆñb ÜÕè@öÔ€¶3Û.Ë¥N2Àêé «W½ºaã¦ßœÒ÷õÕ*Kµ‚ÝÞÓÓëîîáæî^W_¿ü׫ȭýÉ7¿ÌÊÊ|mMNcss‡F““÷»ñ¥—^\ñêªZ…Â`4^)+áÅ_rœja¹ÓÁb €ÛÓ÷ð;°5œ*ºbãë1ãîé»Þoݺ •UÕ¡¡“Ö®yµÿÑî÷sóFÃs!ÁÁ¿^ñ«CÿÇwÀ†’—³fÝú÷Þ÷†arÖÞ4²zå¯÷Þ [ØríZ\lìÚ5«‡42~Æ]ñÑ]=øàƒãùHθ¼  Ôp÷ÌÍWòÈÃsyx΀ æÏ[0žùåÒW^fŸh;Úúïf~)‹wäoÝ‘¿uÀï‰×V¯|mõÊÆáƒ>|tW§N¤ÀÙŽ¡ž:Õ‡ؤ|ï· ®h ‹À“èŠahš6AŠÁдÉÙ¢+pØèŠbîêöÑÕøˆÀ]€Õ¼•H ¢im‚»º F£A$°ÜéÀ]€µB+ÿ„‰MuÕþÐ^ù6t¶_÷Ÿ(£-½°wàîªKð­­”X$ŽMH¾Rt!)õnÿ‰wQCü&Bw\o­­*M¿o–ÑÒî*pW`%wåîî71`ò]÷U_)êì¸A3ȼ‰€øúO˜z÷²ÀI½º.[»«¿ìßôƒòðxûJC#âÇS¾Á)¡iÚÔ§·ØW‹+²6 Ñ ¸+î ÜwÀ]€»ஸ+pWܸ+î €»wÀ]pW›ÿ}ÞÁÊÒò­IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/insert_named_chord.png0000644000175000017500000000424211273045225026243 0ustar julianjulian‰PNG  IHDRE[ª3ß•sRGB®Îé pHYs  šœtIMEØ  ò¶mž4IDATxÚí\}lçß{/wþˆíÄwްSšfÐHËJE tí ‚Š ¤e]»¦#£ÓXU èT¦©š*mEíFBú1¦ñK‹øh”*U`!¥­ø(¤@C0ùòÝùlçìóùÞÛWY,ΧqlÝ£ûã}ÿÞóýîyžßûÞë“!7xÜEF€»Ë >ƒÁÇàcð1øÜ¹‘ÓBkš†1Ž«*VUMÓ&ÅC „H„‚€æŒ±,Ëþ $I¡@ PPP iÚÈȈÍfÃG"«ÕJ’¤$I4MG£Ñââb›Ñ4Ê9>qU•$Éív;Náàà ÛíÆsçr¹0Æ~¿ßív_¹zM †~x±¢(áp8B$™‹|°ªÊ±c±X­V€Ýn·X,EQô†ªª&“éHëÉP8RUµ¬ÀaW…‹Å¬ªš£õ£ª8 êµá÷û!„cAôläyc­ü^O0–å¨ß‹F£ªŠ§RlYà£ÛÐÐP?Bˆçù@ @QT0 ˆb\Q€ ÷ßçE±¯·7‰0 “»ú¦[YY™Ëåøý~–e?ûüÜ_xúÑGBºÀqÃ0zÄnö†rzþ!ˆ¯G‘$ 8ñŸ³{‡nÿHWçŒÉôÅÇçó !Ã0Þ§‰ÏÅÏó,˪ª*˲ñxÜl6wž?ïýË Ï?KÓ4@–å}oÿrÛÖìÄ!d6›)Š¢(zyÕ’•+ªÌf“î'Bo$‰1–"‘ñÄ`AÅüçêêeY–eù¹ºú󳟒’†a::Ïmiûá–§¸ž>±A(,,ˆ¢èp8šÞ;Øuµ{íÊ%,ãL>ÏšÕ«k×m¼²ãe½›>c'­Œ×Ïñx\Ws½1Öf«­Äs/Ö4ýÓäZJpH œÖ~•$I~Ž*:ØÓÛWV6hZ p:c½¡ªª(Š ÃŒŒH ËÆ£Á"k±X2  )æ›Ãá@y½žÂÂBUUuH,|t¾ŠÅb¾¾PBñr‘O~~¾^-±XÌn·ëN‡Ã¡'•ÞHx8ŽƒfLµSá#IEQBQi𯋢˜——§7(ŠÒó¢(EQdYÎä4=>B„ŸÏ×ÓÓƒa``@§‘\?N§S–e–eÊܬ:==c±P0èçøP($Ëò¤xš¦m6Ë8mv;MQ9!‹ÅÂ`³å«*žAS”Åb!3òð3m>AÐ4HÒ:ýç휭„2u³ýƒÁÇà3CúÖÑÞ’›½ü±'SÔëïm|&×È|tø]£~ >ƒÁgjsVuû‘ökª^½&åÓ’© ‹+±ºÁü]ß»Ër¾µ¶¶V.Zl¶Xï+/ûw‘Ø ÀAvÿnwSÓþìóùÉ3?Ýýê«ÿøÄÇg:ΤÞµë•úúúysçfèù4ùN'rÏl6õôûKK½ ÜÙÙyáâÅ7ßÜ›}‹+±Ä¡{þyèP[[ÛÒeËæÎwüø‡¼ý×/íßßx‡; íWu´·Œ¹%ó¨ñô@Ó´ÖÖÖŸ=_wóFÀd¶ðœ_ÿ©˜ã8wqÉíG“5mÌoùè𻬯ÓV??¨­½tù²¢(‰_•••zã I’|¾[[ëë'Šyjš6>O­ªfSÝQð›;üí=ÝÙØ°ïÈ‘£N†]ùØÊêêê‰Ái±Tò-ëÏ?™È7cýfð1ø|ãmJëÿ^èm8öIo¿?+—ˆòÖ­¯Z±ðž4ð9wíÖkOÚ<óçÌ^ ‰,ÄSÃ8æ_;xòÏ®YT>ëNómOóé|Omc4±¦eþÐ ¤mL¾§bOóé4ħo€Ÿå^œ±ØÆ3Êâè»Ê§ªª@ kÙ.u¨Ná%Ç)éÖ´»JßF%Û¡ºnïnn¸œ–Ky°4Ãb¦¼È,Çñù›#Nò#ñLðÔì»”ö[»¾Òyü<÷Å- c퉅Îíßñì:|=C|’=–æÿèÛų (~$Þüéð¿/ €æŸWlúë L¢;&x÷ÑžòØ9nÓRW "4Åú™Ü³m§¡ýÖÙžÃLn®rµ]ÆDêÝñÀº™òˆ':Ïß § A)Æçƒ­‰öÆ·.bq\`&m&4нuÂ7ÞX½;p¸~@ŒÄw¼ß=SñIë {/Œò¼ÞÒ»¹ªhËCE’¬6êÿäzp̱zw<°~f E¬[ÄþbõìïwÏP¾i“z¾~¬°tŽmÛãÞ7‰kyÊq °™Pbà˜à„…eõƒÏ†kªŠR˜'ˆ)æÛí–ìÑ4í¥µ¥žBZ_ß!ø5àº?ºa K!è´’[«=‰c‚õ]¯§& (0£Úåî®þ‘äïÍœ¾u|%î\7§ÄAùù­½:`ï¿ú^|¼tËCn.¬4ŸZñ-‡î|æ+ñå'J½NS(ª~Ú|½¥gÆêçÿÏûý=Ÿ'cÚ»øö®Ñë«kƒÒ‹ÿèJt?<7<øÔáÔ!냻j½ƒ± a–Ÿd5 #D¤×íBÈlÏ.5òºiзí5@±;.0VµlÆj\ @±{{Í#iˆÏ¢òY¿­]µïh§ïÆ—SyÇröˆÙ®ÂjWMú°=U=X±ðž©ìE|ô`â—erРñƒÁÇàcðÉ‚ýã֞鑚IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/matrix_editor.png0000644000175000017500000006067111273045225025276 0ustar julianjulian‰PNG  IHDR:¡&íVJsRGB®Îé pHYs  šœtIMEØ  >$~ž IDATxÚìÝy|#w}?þÏÌHÖ}ز,Éò}jmíáÝxÙ%·…„@)P |{·ß~˦Ivl(7=ùýJ¿¥ü …@8Ê™âvCØd³›µw-Û+­­µ-K¶äk,Y3ÒÌïÙ(Š,É:miõz>¶ÔÍ|æ3óRä·?3‰ ú¯¨T4NÊ5@¹€r P®Ê5”k€r à&'Ã)ÈHy.ÊÇxQKÔ(EÑ´L&¯S(¡P®n+²9;ãyþ³¿¯Tm24c27:|´½«[©T‹¢ˆr  1Ž[\\8÷«3w½é÷ÚºúFFå0¶£¸Ÿ¾rñGßû–¡ÁÔÚZÏq[%*׊ ÜiЯÜí—P9»zæ‰ï–¶³Ç_ù†ê>Û{‡ã£Ï=ó«»çíÝý¢(ñX©ZîÝw º=û‹Ÿ½ãßCJU®mE6½³…&ýÚ:Óú•»ý*wW_ýÆÿUª®þôñ¯ªµú0»^½göôO‹B‰Õù>*Á€ßÞÑ-ñ’ÿ¾³µu¿ÿŸ4½ó¼ÏœÊµFÏÞùÛo+l$Pôûñ÷Ó×§ô+wû%´;]Ý^`UÝ!@%x¡.?_Âû- óB‰?Œª¯`#"C3ñ8_ò¦e #äö·tNåÇG/<ûôëçíí]…öî;FŸzò‰·ÿÑ»SýÊÝ~ UHW—–ƒ ¾ÀÁýûª÷ ÜНËK%>T/Š¢EAÈ´ÂÆë ,S"Q(ëÌ&“J¥È¹(*§wfYŽÍ—üööbGm­Á|sû _¹ÛÏÂíº8|û]¡À\îgv¯ºú’W»yáù±Âʵ*:ÛPìŸç‹­ËKèF‰ÿË'Þþ‡(ñ ÊÊ5QE1M¹r?}ÊåžÆHtk+ÆGTu²æ¦†®Nû­Giµš~#‹%-×E‘?(c˜ åA¹Û/¡Šè*EQ—'ÝU}PöWª „âëò²µv„~ð­‚ÿJØ«ríÆïΗ …V¿ñÝŸ±£«·*x®QË47EQˆF£³Þy…\~ìåÃ;þ>.m¹F(z‡‘ÀP4µ'í—2¶ è*MÓs‹Ágž»4|ø@•ìFÁVžû-žÿõχo¿‹‹† (ñ‚ª ®¢áßûq\¦«oÐS4ã9gÇÁÞä n¼ðrÎ<˜ÇoQÈÔ­r·_ÚØö¼«Eë õ_ùÆ÷šÌ¦öV{5ìÊ[ ]|]ž¥^OýCse…ÒP_ŸešÂÐT™´`ãW¦Â¼ÌdÔS4M‘Éë¾÷įårj__ÏwàÜ®$ä8ºFçÕWq'ŸxèáO<ôp–2u+Kû;¶™Kû%M,ZQ]¥ˆµÉ"“«?û_ WªòöŽÉÒZî]|ûñï9œCåØQ^mRôº¼´ÿõzò¿P(øº;_ÿº;_ ³l‹Y¨örmm}ý§£¿úÉ™1y]Ý&»²±¶Çäu µÖpmv±$µ`áåZ.EâC§yèô#…µ“½ý\ZΫ˜-jÄ¢D»(ª‘ÜõêÛ:ùŽ¾ÓŸù'>«¾Cȹ:yÕo½~—‹­â}äcŸø·¯|9迾ý©±ñËo{Çtôìknëù­;ßøýü°|5%®.ÿéOöÚ×½¾Þdinéø£?þ³@ o™þB¹ö¢P(ôº»Þ°ºººººúº»Þ …2m‹Y¨ÊrMÿþñ_¿u~bŽ–)t ñͯ::ÐÙ°´¸° +”ªéY_(´š¼òNÿÊ1º–u—REõÁ“÷ðäýt+KûR›7*¶v cËt*ÊÚUAxžÓiÕþûopô>þƒŸ™ºùpÈ†ï|÷ûÕõß¶Ï·8|Ë‘íË]“SoyÛ;ßx÷]ÏŸÿõµéË~ôCß|ì;i[H[ꕤžþÂÿîýï{wÖ}ñ¹sz½þþðOŠÜËÊÊʯãÁû/]<éâùƒößùú7®¬¬ìU‰Pòßû"!‰-¶&ž‹n¬.¿éu·Ûí–WßñòcCjf+¼Éƈâñ?„äõ³ÿ+ùè•eg=üèC§ù«{ÞêÔÙ»Eg¸’½ýS§ø«{ÞÿÐéGzøÑÂÚ/éèÚΧ¢Ü]E!ÆsÒÏïxë]¿xêYŽãŠ=©2{i·¥Ã‘FTöälBüè‡O?ò)Žç³?%š,­Ÿþìºú÷í?üãŸüìsŸÿROÿþ}ûÿâÉ_¾X²|éú‡Z:úÞóþ¿Š¾pêâñøÇz¤ཽ÷Oÿü/Y–M4øÿôåýCG­m)}ˆF£ï¿ç¾Žž}=û>ðW÷G£Qi}Q­mÛGÈ>õéÏÝwï=oûÝ· z…Bqtø–ûÊ—Óî%±m”ãÞý¾{Z:úΡ/þÝ?&šzâ¿GÝþ›Ö–ÎCG^þÕ¯}=ã[Ì6ßûî·_õªWjÔêÆÆÆ‡>ñ௞þu‘£kuuŠß}ë[¾ôÅÏ3 Ã0Ì—¾øùß}ë[êêi7¥0ºÕ&å—Ý›ï~µ£ÃtçoÜbj0JKî8~ë;ßü[V£<ã«Ü÷òdÁ?ºFKïÐÛÿ>ýÈC§ihhøÈ‡?¸ã¸•áFã,íKÿ>òá644Gÿ+ŽÝöÿþË¿æ¾ÉÒòòøÅg>xò¾?û‹w––/]øõOÞ÷¡¿y0±Â¯žþõÙ_üìâ³O---?òèßJ ?ûù/]|þÒè?š¼|A©R~ìã§ëŸ?aô‰-/zSvôÐß\ôûŸ}ú—Ïüê—sóó§ùTb`,迾}„ìÌ™§^çk3u;í^~äSÁ`èâ³Oýrôg¿m­Í1>^ü!HÛ§?ó¹ŽîþŽîþOæs7jµ½;Û’“÷ßûOÿü/kk¹~7×ý}Z­~˛߇ÿúÞ÷K?OM_}1¬´±±±±±ñôÇ?ú­o?.-ü÷¯}ãÑÓon¶iµÚ|èÔ÷ÿëG‰õ?ñàGM¦í;zì;ß•š2›yèÁǾóÝì[Y]mh¨O §Iÿ²ïå[ß~<±‹‡?ñ±Är¥Ré÷‚ËÁ»ýóŸýT]zþÒý÷Ÿúâç?›Ïm"I|òP¾[íb‰° ¿÷S+*ŠzëݯÔÖÅU*͘;ðÝÿ"—;ËK1”dºRyòþS'ï…B~âôŽ×h³\ %Y7|ð§C¡´¯=¿JÒ^}øÑS'ïðcad2F&{ðc9uò~iy¹»‰l™LõEBrš++++++•p¶%fsãüþÛ?ó¹/ä¸~½ÑHQÔÕ%ÿKúϦ­­5ñC °$ýì[\¼íößljî0ÛÚΡåå`b}«Õ’~oi¹½ýÆÒöö¶¥¥å; ݸ©kûð[Ú½K‰Þ&öEù¿_ùçÑÿyòÄo¼æÈÑc?þéÏ2á‚æ“¿<óÖ·½ã_¿òÿôtwy1t3þÂÿ.Kãñø¾øw›ápú©]€ê,×r¹M&—ßýêcѫէ®¯|ýÛ?‰lEKrïš,¾&ÿaýR§¸ˆâéG>YWWwêû2‰;O5H;põÈ'ÿöÓŸ=õÀ}ÒŽ h¿Ä±mïª(nïÞ‡i«¤]ÝÚÚ²65{)ÝNúaÏvÂÿùßöŠ‘WÿéŸüዯ]™,‰¨T*òÂ'~åÎë½ÞÙÙA¹~}Îl¾qê,MM?ùáwm6k^ud¢©ÙYoc£)ûú/ù­?úÉOÿoÏ}MMæÄ.¼ÞË»¡C¿öÕEñ‰ÿ}ïîý­±W¥ûS/ýßc}û;œúÐ|ýk‡‡Mtkë?þó›.×>÷BÈ{ßÏ¥Kcï|Çï©UªÜ»PÁåZo\öfë!Gë˜; 76,o¬ÿßÿüáÛÞøJƒ^Wdãy|GöòðäÉûO>pßé‡=ýÈ'³ŽÇÐù¶ú‘Ož~øÑ“Üw2ëHOööK:ºF§?ütÝË´¼„]åc1N[ü!äØí]>Û J¥ò¾{?ð‰‡^¼¸<8¸ïKÿO‘HÄç[ü«¿>™Wkú›—ƒÁå`ðƒþØ›ßôFiáýá;?pïý×ffc±Ø• ןþù_îØÎo¿áîSþèòòòòòòÉ}äMo¼;ûú÷Þó¾Ó|ê[ß~|cƒåxþìSO︋ßùí7Üèíòò©4±üÏþ÷»&§¦ùXLÅÄŒ©ïÒœ’—ú—þîCþè÷ÿöСƒ…}Þ^ÊèšÑhüÞã]º4vððу‡^º4ö½Ç3é?«£kP}åZ~·Ü~Ûa%Íó\Tg0FâußüÞ1žÏ|‹Hn¿¸ó ÌÞ¿SÜwòûÄ‚n©ËÒ¾(Š'W%ºe¯øAÑÂnÜ)]W_ÜøÙçž¿ãØ­Uxy{ó›Þè¹6“xø¹Oò‡?úIGÏÀkïúíW?–WS·Þ:|ìöW:òòú†ú“÷ß+-|ß{Þõ²£Ã¿ý;okéèýó¿x÷™ç¼XöºÏlnöñÓÿø÷é/§ý³Sü›ëss·Üz›ÎØ(ýÛÜÜ,2šúúúï=þX½ÑPo4|ïñÇê3±>w ªN¾—”uuw½òe›ëËñXL§7®mÑ?úùSE6žÇ—På²Z¶+¡YÛÉÒþŽmîò/ƒRí¢€v®Í^òì3qA47ÖëtiaWg›F£®–CÈWòÝ]EýìÇ/~ÛýÎÑ'^œ ðÇø¿¶o’ögé‡÷¾ûÿ¤M¿ÿ}ï~ÿûÞ¥ÛÇü¾ðÙ¿ýÂgÿ6÷MŽzü±od?Òä‡ …âï¿øÙ¿ÿâg¥‡ïy×_H?¼éwï8˜GÑ4S¿„j=ؾf_T•²‰Ñ`øî·¿)ý©5Q(|îTßèZÞ¿ìÚ[í¿ùò?93ÖhiÖ®x|­c®Cû7žûW¼§yßÏûý=ó›u¹Û/el{ÔÕÇÿë‰ïü×ÏUL&F¯üÁ[ï”–[Ìæj9Øí¿iJAˆ—£ñíÍ ú´Ë“7ÁT¨¾rí…KòÚêð}‘ÈÖÙ žz³ÅPoþÉ™Kuuò}}]/ýMšë-"y}Å{±ïû‚Ïúïel¿”¿÷¢«Ï>7öÃÿ~º¥½[g¨am5h4è«ë`Ê5ŠE±äåZϾ¡•¥ùBJ||Å;Tc¹Vè/»c·qÿÌÄ|Cc“¡¡é£Ï…#‘# h<÷Ñ5ªø÷}QÈøÏån¿ÄUö®wõÂåI³µ¹ÉjW©5[‘°FAôwU×!Àî¿Ã0 #q!¯Åb<Ã0j¤\#„Œ¼â(~rz>d¨7éëÍßùÉÓjEÝ>Go™Ê5JFËŠßÅx-Û‹öK™Úžtuhÿ>_ð"EQ<ǵZô¯¼íx³2«èlC1WÐõ ó3ÓÆ†Æ éÒúJ°ÞdŠ» PEå!äÎW¿â+ÿß÷7Ù Š¢tê:³ÙT@ã9ýº¥hÚØ`*þ}}%h45n³.wûYt;…ù|}Óuõ–Cƒýݾ@¨Á¨¯7h‹zÙUÏÙ†bÈeòîþÁ± O:j4™²—W!ãDX .¹§ÆŽÜö1n é@¡)ª˜¾)B^;rôŸ¿öý&“ñoz¥©Þ˜hJº„åš\&ïé¿ðô@¡ïûÒ›µ'Ûu¹Û/í¯À½êªZ¥ìno®êC€]-× £©iÿ-·M_X_ â^ŽiÑ­76<ú ³Å¾f‘Tªè¾-M¦wýÁ´z]L–ÜŽ ÄK9º&W( ¦&gïûÒ›õ£¯hL÷f]îöKû+°Zºzäø£Tªµúú–ö>ºæð ‚ç¢xÁ@u–kÅÞðm4¦™;/ B‰ï]+þ}?ë›u¹Û¯¬_Ù»úÓÇ¿Zí‡BE>ºÅG1 Pø/M†.×´­XŒgèœ&`åz«x¹ß÷«è÷JY»zü•oPkõU}7O±FÓÆÓÂìUC½©äo¬†r¼ 3û*N˜]ÇI¨r™¼»o`üÂÓû—pÚVâ.ðÃ/Éå.p*Ë·åÔ61ÝÚd7¦._Ø(Ý´-š¢uÆÇþ[¬öö\î,B¹¹T¢(YB&W”vÚ–t8—Û,àb(@F•pÃ7¾¿ ¢¡\@¹(×nJ9M5xâÿ3Ý+ïúÝÄÏ3žéó¿>»´´HÓ4MQ4MSEÓ”ôP&“Õ›ÌÎCÃÍ-¥)×!¿û'÷"ƒ ôóŸÿ¼¦Ž÷ë_ÿú—¿üeäEúX´äá­ùë³g~ñÄkîzskgCÓ¢(Q¼ñ¿D$"‰Åc^÷Ä…s¿”ËëÌ–æÒ”k„›Í†<`oiµZ¼ ¢ø|¾í ôýo¾æÎ·´´uÄy.&ÄAA_ø_Q„¸Él±·´ýùßø{š}¸w  Ä¶¶¢}ƒûw\­wßÁ˜Ûq5”k%&Š¢L®Ø¹c"îÜÊ5€²áÿñMA(ä[GQ®”½V{ß=ý®÷Þó{ï/ bC¹PæZí÷þêWO¿û/ÿ÷SOŸûÀ½'ó­ØP®”Ñû?pïØØøÏ~ü_ûȇ~úÃïŽ_¾rïýD¹P)^õÊßüÎcÿY_o$„Ôßú¯þæÈyµ ÃI(Ÿ×¿þNésפ‡õFã¯{ Äso£k å@éñÜÊ5€š€{×JïÓŸ8ISES4MÓEÓ4EQô © )šÞyì å@‰íëïÝ·ÿ°L^Ç0Lö5/>svÇÖp1 ¢¡\@¹(×P®ÀnËcfèÂÂBòÃçŸ> ó™ÏÔÔ¢µq BĈªEQåÞEá£kkkk„£Ñ˜i…þþþÄ tddddddxxxcccbbBZ899ÉqÜÐÐôlò¶‡cxx˜çù«W¯æ¾ëÖÖV© $„,//BÚÛÛ“û3<<,˲ÃÃÃÇMOO'Vp:ƒƒƒ,Ë&/LÛóìâñøØØ!¤¯¯/b(R?w-1* =O8‰DÕh,»råJSS“ÝnW*•‰m-‹T«ò<ŸûÍf³R© …B±X, êtºäá7«Õšø$:‹Å"}Jrû&“Iç[]]ÍÞó,AcYvß¾}f³¯°’óz½mmm8ˆ1 âÚQøèštY0QÙ¤iú…ÚÈår±,;44tâĉä8ÐØØF½^ï¥K—R¶Í2´˜i×Eµ´´‚àñx8ŽKZKî!dÇϬËÞó웬®®:Îí×p¡$Ün7N"D ˆåZNººº†™œœ\[[E1_¹r%íšÒÃ0>Ÿ/y¹^¯ß¿ÿðð0!„㸒ìÚf³1 3??¯V«óÜ ƒÁ`$]fÍÔóL®^½ê÷ûûûûM&^[P…_ ÕétGŽ™™™‹Åb Ãètº´köööNOOŸ;w.e¹tÃ>EQ*•ª§§§$»–ÉdV«u~~>eh-ããã„iJAöžgrýúuBˆËår¹\ÒÜ^Zr`GÄ€ˆ£\˃F£ܾ<¥F±X,‹eÇÕ¶/ÌRëdÚu<ߨØP*•É{ÌÔfòLˆ´{É«ç(ÎvGww7N"D ˆ¸¦ÜTŸ»&Šâ“O>FvaV-ʵüP522rÛm·Isà¦äõzq1 b@Ä5%‹¡>óUj-·Û-—Û1"FĈ#âÚQY£k.×—ëLaëç»-@U(jªA4½áðz<ÎÓ´L©Ô´¶:qN¡¬Zp1 b@Ä(×r²µÅz½c #³ÛJ¥–ã¶‚Áë8¡PnMM8 ˆ1 b”k9YZš„¸ÝîP©ô„…BÝÜÜ/=ó~¿›eW!Zm½ÅÒÍ0rBÈÕ«çDQìí½5œ[Zš1›;L¦–éé_SÕÓs4ѲtMS¡ÐØíûêꔄx<xX6$‚Zm°Z{är€ZPø½k‘È:!D­N3Óïw¯¯/Ûl}6[ïúú²ßãË( M<ÎÇbÜÚšŸ²¶æÅ¸xœW*µÉ›ÛíûìvG4ºx ®­ìvG{ûÍÍ•……I$W³B¡9œD ˆ1ʵb%ÆÕ4šúÄCBˆT–­­ù9.¢×›9.²ºº(•qÉ›'6 ‡×^h0DñzÇgf.B¶¶6\Í fp1 b@Ä5¥ð‹¡*•~ss%^“J«\HeY08'“ÕÙl½áðZ(4¿½\ˤ·÷Vé¢*@í(|tÍln§ifqñj$².Š"ÇE×(µÚƒj››+‰‡„•JK„x}½¢èúz› ÄË&®´jµ „PhAúÎu¨e˜p„ˆ"®5…®)•ÚööƒÁ wnnBbÅ$ª.‹¥›âóMBt:“ô"—+išEÑh´BŒFëòòuŠ¢ärerËóó„…BÝÔÔ%-±Z{hšY]]LL>u8Ž#¼Ú„ Gˆ1 b”kyP(ÔÍÍŽíËFžv9!¤¯ïåÉ«õ÷ß–ül¦"Œ¦«µÇjíIYž¼> 8¸)Ñ8P]0á"DŒr  ¢aÂ"D ˆ¸Öäq1Ôfì̊ãrÕ\.µvȈÇ‹CÆñâa÷F×FGGGGGwsÃÝìížt²6µµµá$ b@Ä€ˆkJáS Ö××].W8¦iZ©T=ztodsssfffuu•çy™L¦Õj:„€o>ÝÝÝ8 ˆ1 b”k9™˜˜‡ÃGŽQ©T×®]ÛÛÃØØØ¸pá‚\.w::.‰ÌÎÎ"]¨ér-‰Bd2™\.ïëëK,O¾&¨ÕjN§J¥Ú¾¹´MÓ¦··×`0B€ÇãÙÚÚ’>wdd$e}¹\ÞÓÓcµZSZóx<ñxÜétJíh4šBÈùóç×××,ËòòòØØ˜ÑhJî$MÓjµšçyŽã¤ö-KòNSŽ"mÏa×x½^ ³#b@Ä€ˆkJá÷®FBȹsçž{î¹ÙÙÙX,–ü¬ÓédYvzz:íæ######ÃÃÃÒÂÉÉIŽã†††¤g“×w8ÃÃÃ<Ï_½zu{kkkk‰.%kmm•ª@BÈòò2!¤½½=ñlÿðð° ,Ëvtt s—Üá´G‘¶ç°kÜn7N"D ˆ¸¦>ºæt:ggg———×ÖÖÖÖÖVVV’ï3™LÒÙêêêömƒÁ Ç㠇 ê!EÅb±+W®455Ùív¥òÅo;°X,EBxžÏ½“f³Y©T†B¡X, u:]CCCâY«ÕJÓt¢}†aRÚß~™zP&…®Éd²îîî[o½uhh(SY–‰ËåbYvhhèĉÉË8ÐØØF½^ï¥K—^ÒQš–ʵ´¤+’Ûû@QTKK‹ ‡ã¸ä¡5©ÍÄÏR­VpÏa×`€"DŒr-WccckkkÒ !D£Ñ$? ƒÁ Iw’" Y1 ãóù’—ëõúýû÷B8ŽË½3]]] ÃLNN®­­‰¢‡¯\¹"=e³Ù†™ŸŸW«Õf³9¯cÜ~™z»Ž1 b@ĵ¦ð‹¡‚ Œóeh-Û"SÏ*®\;xð`–gS& ¤,±X,‰Ù—Ù·JY˜v‰F£ܾ<oll(•Êä=fj3ñs¦åÕs(L8BÄ€ˆך›ü;CEQ|òÉ'£ÑèÀÀÑ1€ IDAT@–[ß Š`Â"D ˆ¸ÖÈJÞbE3Q…q/¨•rÍçãq¾*P­åÒÐÐRk‡Œˆ1"FĈ¸ÆUÊÅP—ëŒËu¦Zš…=ÔÔÔ“€ˆ"®)^ ÍT9ÇqNö¾\K”eRÝV±UÊÇ›O(4×ÐЂó€ˆ"F¹V8©€£(Z¡P[,]*•ž¼t4Ž¢èº:U<ÎÇã<ÃÈ›š:õzsò¶ …ÆnßWW§$„Äã¼ßïfÙBˆV[o±t3Œ<¥LÜþs¢VËô”´_ƒ¡‰ÇˆAP« Vk\®À+£b3x@Ä€ˆ×”Òß»æpw8Žwvmm±>ßTòSVkOgç( Ñèfcc[GÇP,ÆùýžÄ vû>»Ýn7úýîõõe›­Ïfë]__öûÝIe_Ææ°Z{2«Ùl½Cñ8\Kìbm-`·;ÚÛln®,,Lâe•£Ä£k,ZZšå¸ˆ( „ŽÛJ~Ö`h¢¨¢^o¦i†¿8yD«­—¾å)^{¡Á•äåÒÃIÃfiéõfB¨äý²lˆâõŽK·¶6ð²¨dø‹ "DŒr­(‹‹Wc1®½ý R©™œ|*åÙD­F‘jµâIua–åøToï­ÒeV¨p˜p„ˆ"®5%¾*Ñ4³ºê/`s–]ÙÜ\!„¨Õi‰V[Ÿ¼\zHa¹(ŠÑèæÚZ È>kµ „PhAê<@E)ñèšÅÒå÷{®]{®°Íçç'! …º©©ë…» !Ò=p:Iz(UîÀ̵kŠï³ÕÚCÓÌêêb0x]Z‚ù¤• Ž1 b@Ä(×ò“RÙèõæÄ4ÏL«¥ý9S…Ä0òæfÇöåƒÅ`°ìØŸ÷K¡iÆjí±Z{ðj¨ ˜p„ˆ"®54NÊ5€’Á_lˆ1 âZ“ÇÅP› '+ŽËUs¹Øl½ˆ#bDŒˆqM)ýèÚèèèèèhîËË´ë]ØÀ.(|ªA¢¢iZ£Ñôöö †ÒÖ^/öR&Óh4õõõȬÆy½Þ¶¶6œD ˆqí(vtmddÄétnllLLL$–ŒŒŒ”ª###wÜq‡Óé\[[»|ù2·Û“€ˆ"®)%øÜ5iÄ+J¥Q1©b‹D"ããã,˦l‹Å¦§§———A0ýýýJ¥2Sû‰ï•ËålPëåÚÊÊJ¢hK155Ų¬ÓéE1ylljjÊï÷:tH&“=ûì³W®\9|øpÚÆ“/¹:Ž|7‡›Ø1 b@Ä(×ò#•SuuuýýýÛŸ][[#„˜L¦”ïwZ^^&„\¼xQz¸¾¾ž©}i”.\¾|ÙívKeYî›Ãͧ»»'"DŒr-wÜq‡Ûí¾~ýúÄÄÄ¡C‡òÚöøñã‰ë›Ù566B666 Û z;Õ€¢¨ÎÎN¹\¾²² …Rž•抃Á`0¸½üº~ýzŽßª. §©TªÂ6‡›‰×ëÅI@Ä€ˆ×”Ü»Æ0Lkk«Çã™mhhH~ª¯¯olll||óU "D ˆnne]s¹Î¸\gr_^]ò=Š›ã¨+G(4‡“€ˆ"®)EÍ FÃÁ 7^Çyš–)•šÖVgdµôrÌ44´à< b@Ä€ˆQ®ílk‹õzÇFf·;”J-Çmƒ×³oâpßý#, Ÿ7C¹¶´4+q»Ý¡Ré ! …º¹ù%Ÿ¬!]dySS§ÁДX"mÉד׉Çc€‡eC‚ ¨Õ«µG.WB66–—–fx>*}4®ÔH¦•séçììó‘ÈFss¿^ofÙÐÜܵÚÐÖ¶?¹cE×Õ©âq>ç¥Nêõæä£S(4vû¾º:eòBŠ¢ µÅÒ%íJ ±!b@Ä€ˆkMá÷®E"넵Úi›­·³s(çk¹¯ã÷»×Öv»£½ýÀææÊ¤´Ü绋ñmmûŽã‰QºL+çÒÏúz;!d}}‰²±$„˜L/¾¼¬ÖžÎÎ!Q¢ÑÍÆÆ¶ŽŽ¡XŒóû=‰ìö}v»#Ý ^\(õ­³shk‹õù¦ðò*‡¦¦œD ˆqM‘•¯i½ÞLE‰ÇùÜ×aÙ!Äë½ñE[[7¾'”¢¨x<¶°0©×›F›4Š–iå\èt&¹\±¹¹*±ÍÍ¥R«ÑÔ'ž5š(ŠNt’¦™”Ñjë¥q¾px-Ñó¥¥YŽ‹ˆ¢@á¸-¼¼`/Ë5•J¿¹¹¯%W9ÉåN™Öéí½•a^òõí--ÁàõÍÍ•`pŽeC‡³¬œK?)Šª¯o®--ÍÆbœÅÒ©cR­¶£ÅÅ«±×Þ~P©ÔLN>…×V™„BsfGÄ€ˆ×”Â/†šÍí4Í,.^DÖEQä¸HÚk‘ùÒj!¡ÐBÊ×·«Tº––ŽŽ!BH,Æg_9Ç~ šfVV|uu*ΔW?Yvess…$]f•ú@ÓÌêª/¬ò fp1 b@Ä5¥ðÑ5¥RÛÞ~0ôÎÍMBŒ¢•J[|‡¬ÖšfVWó7“§&P%—+-–®ì+çØO†‘ M++>“©5ß~ÎÏOB uSÓÎX,]~¿çÚµç𪀊(×ÈY–ŽíË“k¦|¦iÆjí±Z{²´¹ãÊ9öSâ[[¬\®HÌ÷Ì¥“™>ŽD¯7'·“½çP0 °#b@Ä€ˆkMí~g¨(ŠSS¿âùhss?EQx)T L8BÄ€ˆ×YÍ9EQ÷€›ª\³Ùä8_•Æåª¹\¼^o[["FĈ#bD\;J1tttttt4÷å»&ßìy‡!-·Û“€ˆ"®)…_ M”24Mk4šÞÞ^ƒÁPÚÎmnnÎÌ̬®®ò …®\¹²}Ûµµ5BˆÑhLYÞÚÚJ „ååeBH{{{âÙþþþááaAX–íèèæ8nzz:±‚Ô–e“ŽŒŒŒŒŒ ollLLLàe•£ØÑ5i\ª®®®¿¿?SÉe2™R¾$J*³.^¼(=\__Ï}f³Y©T†B¡X, u:]CCCâY«ÕJÓ7jP‹ÅÂ0 !„ç_üjöDgVWW¥%Á`Ðãñ„ÃaA!‘H/‹J† Gˆ1 âZSìèÚwÜÑÚÚÊq\ƒRÇ—†µî¸ãŽíÏJW$EUEQ---‚ x<Žã’‡Ö!‰Z"Õj;r¹\,Ë 8q/ˆÊ‡ Gˆ1 b”kù¡(ª³³S.—¯¬¬„B¡´%W0 ƒÉË !ׯ_ÏòÕì]]] ÃLNN®­­‰¢‡×Lm6Ã0óóójµÚl6çÕáDg—Y¥>0 ãóùð‚€JS‚© ô¶¶z<žÙÙÙäë’„¾¾¾±±±ñññ”Múûû†YXXHLöÜ>ŸT§Ó9rdfffll,‹1 £ÓéntZ&³Z­óóó)Ck¹:#M)–ôööNOOŸ;w.Ç’ç4$Ï«€ÝvD ˆ1ʵ\%×(ííí‰Ê)y¹J¥:zôhÚ ¯¿¿?íínÉ4MÊI<ߨØP*•‰ùž)ûMûs¦¢Êb±$·“¶‘\–ÃîÀ„#D ˆq­©¾¯xEñÉ'ŸŒF£øjv@¹Vq(йí¶ÛðéhµÉëõâ$ b@Ä€ˆkJC}>ç«ÕZ.n·[.·!bDŒˆ1"Fĵ£,£k.×—ëLñë@áS ¤bËá8žöaIj¾´ËK¸ ¨F -8 ˆ1 b”kÅ*IEU¾BªZSSN"D ˆåZ±’ ,žßš››ˆF7ÓsÒš #ojê4šri<çý~7Ë®B´Úz‹¥›aä䥣qE×Õ©âq>ç¥Æõz3€jTì½kÒ-hYîBóû=Ñè¦ÝîhnNó)k6[ogçP<Î×rÜ£ßï^__¶Ùúl¶Þõõe¿ÿ%ßtaµötv‰¢n66¶ut ÅbœßïAÒ7Ph'"D\SŠ]K¹d¹]8¼FÑhêÓ>«×› ¡!ñx®³fãjÒ—GI †&Š¢Ó4“WãPù܈"®)»ô¹k™>Ï–¢èÒ~Ôm¢V#„HµʵlT*=!„eW67WJÒ V[ŸÜ ôjþbCÄ€ˆ×Y¹w`µvÏÍ]™ŸŸ(UƒK7!Äç›"„èt&é!ÔL8BÄ€ˆ£\ËUÊ'k$?LþY.WvvE1Y÷zÇd²ºìëï¸#†‘77;²¯–{ãn7î]s¹ÎLNž½~ý²J¥K;? w˜p„ˆ"®5²]ØÆ· „0á"DŒr-#›MŽóUi\®šË¥ÖãxqÈ8^2Е֡ÑÑÑÑÑÑ ßéžt$mmm8 ˆ1 âšRÔÅÐÍÍÍ™™™ÕÕUžçe2™V«=tèÐîô{w½ŒKü<22‚—W9twc.0"D ˆåZn666.\¸ —ËN§N§‹D"³³³»Óé=ÜuvR‰†7¨ˆrÍãñÄãq§Ói0!f``@zjû “´„¦iFÓÛÛ+m<ÏÖÖ–ôuRÉÃQÒúr¹¼§§Çjµæ¸ëóçϯ¯¯ X,–ååå±±1£Ñ844”Üš¦Õj5ÏóÇIí[,–äjµZ§Ó©R©’¦ôö×ëÅ0;"D ˆ¸¦~ïÚÚÚ!Äh4fZ¡¿¿?QŒŒŒŒŒ ollLLÜøÈÜÉÉIŽã†††¤g“·u8ÃÃÃ<Ï_½z5÷]·¶¶JU !dyy™ÒÞޞܟááaAX–íèèæ8nzz:±‚ÓédY6yaÚžÃr»Ý8 ˆ1 âšRÆòHŒŠƒALJA „D"i9EQ±XìÊ•+MMMv»]©T&¶µX,Òw‰ò|ßÎn6›•Je(ŠÅbÁ`P§Ó544$÷‡¦éDû ä´o2™¤q¾ÕÕÕì=Ø5…®I—•Mš¦_¨\.˲CCC'NœH^áÀÑhÔëõ^ºt)eÛ,_ýži×Eµ´´‚àñx8ŽKZKî!DªÕv”©ç°‡0ÀŽˆ"F¹–«®®.†a&''×ÖÖDQ ‡ÃW®\I»¦4dÅ0ŒÏçK^®×ë÷ïß?<¹bKÞ–ç·ææ&¢ÑÍ|;ó~¿›eW!Zm½ÅÒÍ0ròÒÑ8Š¢ëêTñ8ó #ojêÔëÍxAT¾@`ïˆ1 âšRì½kÒ-eùÞUf2µ¬¯/E£áõõe“)c¢‹‹îhtÓnßg·;òjßïw¯¯/Ûl}6[ïúú²ßÿ’ÅVkOgç( Ñèfcc[GÇP,Æùý¼ ;º–r92m=—²&!D«mËss—år…VÛ©qiÔM«­—¾ *w‰q5iCéa‚ÁÐDQ7êT½ÞLÓ !$Ç–ꀿØ1 b@ĵfÏ>&×djáùh–¡µòIÔj„©Vƒ*‚ Gˆ1 âZSöÉÍt›Á`1,Ù·U©ô››+,»BH~£kZmýúúrbC­¶I@•ªè/¡²Z» õüüÄü¼+¯ -–n½¾Ñç›òù¦u:“ÅÒ¤o¡ÐN"D ˆ¸¦>º–2l–ü0˜дOeÚV.Wvv. 3 #onvä¾#|HÁ„#D ˆq­¡q P®” þbCÄ€ˆך<.†Úlrœ¯JãrÕ\.6[/"FĈ#bD\Sªutmttttt4÷åUªð©RU422R¦jŒb4‡††¤%Ï=÷ÜÚÚZa{ÌTÀ•©óPV^¯·­­ ç"DŒr­"¬®®²,«Õj766¤Z­°J+±rYKLØn·ïˆ1 b”k…ãy~jj* BL&S__Ÿ\.'„œ={VÅãÇ{½^·ÛÝÝÝÝÖÖvæÌŠ¢Ž;–©5ƒÁ077çp8æææ CrÅ–\xE"‘ññq–eKÕÛäÑ8š¦Õj5ÏóÇÉåòžž‹Å‚× ìšß»655öíÛçp8ÀÔÔ”´\«ÕJÏç#„ø|>Žãxž×étYZkkkóûý›››@ K>55Ų¬Óé,Io%ýýýÃà°,ÛÑÑ1<<ÌqÜôô4^4{ ±!b@Ä€ˆkM‰G×#UÒw«K !:. ù|¾p8l±Xü~ÿ‚TÆI+$´’¯T666*•ÊK—.)•ÊÆÆÆL;•FÝ;-¾·«ÕJÓ7ÊY‹ÅÂ0 !„çñMð{¬»ßQˆ"®-»43T*Ëfgg …ÃáP(^¯7¹\ËR¡ommíIž¨Õ!R­°ûJ<ºf2™@0”Æ«L&“´\ºèÇÛÛÛiš¶Ûí'±œd¾ýßf³Ùl¶ì;5 ¡P(±Óâ{ • Ž1 b@Ä(×ò“|WþÈÈH__!dbb‚b6›¥‡„•JÅ0Œ(ŠÍÍÍ„æææ™™Š¢T*UñÇÐ××7666>>^À†i{ • Ž1 b@Ä(×r•v|†E%B.ˆ1 b¸¹Ý$£k.×—ë ⬡ÐN"D ˆ¸¦53tsseyùúÖKQ*µ­M}Yk2BˆÃq<íÃn•c˰'™††œD ˆ1ʵœjµ¹¹+*•¾»ûBÈü¼knîJKË@Y+¶LPZʵTËË×EQ4›;d²:BHSSÇìì¥ååëR¹–|iR¡ÐØíûêꔄx<xX6$‚Zm°Z{ärEÊú #ojê4šrïLÁãaÒ†E+j‹¥K¥Ò'z‚1¶Ê„¿Ø1 b@Ä(×rõÂ5PôP©Ô&&Øíûçç]€§¥e€â÷»××—ÚÚœ4-›™¹¸°0ÙÞ~ ±¾ÍÖ«Tj¯]»\ËT®vZ¦­¤jŒã"ÏyŸoª«ë‡ã8 µJÖÔÔ“€ˆ"®p“Ó“Ónš¢(š¢iš¦(š¦)Š¢_xHÝXH%éeé˵\hµõÒ÷;…ÃkÒ– B¼Þñj¾äõõz3!!$Ï8‰&å.´,•Yr½•v+– --Ír\DBÇmáå%qòÁω¢(Š%‚ôÿˆôÂ%ßøÊçËX®)•ÚHd}kkS¥ÒB¶¶6É cl;êí½•aäÛ—SÔ®ÎT]\¼‹qíí•JÍääSxaU…PhÃìˆ1 âªÀs[‚…¸ ‚AQD1.ÄAˆ B<—v /[)ŠZZš‰Å¸XŒ[Zš¡(ª±±5y–]ÙÜ\!„¨Õi‰VÛ@ …òý:öÜ9Ç¥;®)õ¦™ÕUÿöª1ãð:«@À N"D ˆ¸¦>º¦ÑÔ·´ ,/_w»Ÿ%„(•ÚíÓBçç'! …º©©KZbµöÐ4³ºº ^OTW{uðK—ßï¹ví¹”å&SËÊÊÂÕ«çî`€ê-פŠ-ûÇvl¯uhš±Z{¬Öž,kfªR–ç²Iö­ôz³^oÞ¾Icc[c#¾ï¬Ba€"D\kð¡Pe0á"D\kÊ53×v»\³Ùä8_•Æåª¹\¼^o[["FĈ#bD\;p1ªŒÛíÆI@Ä€ˆ×”Â/†ŽŽŽBFFFJÛ!©ÙíJ¾#€›¼\+“DYV¦rªØ1 b@Ä(׊ÂóüÔÔT0$„˜L¦¾¾>¹\N9{ö¬(ŠÇ÷z½n·»»»»­­íÌ™3E;v¬˜–“GãhšV«Õ<Ïs'—Ë{zz, 2¾Étwwã$ b@Ä€ˆkJ‰ï]›šš ûöís8@`jjJZ®Õj¥*ÊçóB|>Çq<Ïëtº"[–ô÷÷ ‚À²lGGÇðð0ÇqÓÓÓP®½DbôËd2%B¤²Ìçó…Ãa‹Å‡¤2®È–%V«5Ñ”ÅbÑh4„žçðÍÇëõâ$ b@Ä€ˆQ®•žTKÍÎÎ* ‡Ã¡P(¤,s/×v8 úÅa¹ÞÄ0á"DŒr­(‰¡¯Ä`˜´\]‹Çãv»¦i»ÝÇË‹iàæVìTƒä;ýGFFúúú!„³Ù,=$„¨T*†aDQlnn&„477ÏÌÌP¥R©rÜQ¦–¡Ö`Â"D ˆåZ®Ò~Ć\.L»þí·ßž¼Ú‰'òj?SËÉ«eún&˜p„ˆ"®5øV”k¥ƒ Gˆ1 âZ“ÇÅPŸŸ‹Q‰j-·Û-—Û1"FĈ#b”kåår!„8Ç‹\§øMnÍÍò9Òw¿[8u*þõ¯·ù˵rÈ <"FĈ#âʸrË5©6’дL£1X,Ý2YÝ.—z9–hlU›Å_åS©ô8 ˆ1 âšRìèšÃq\…ÕÕE¿ß‹ñííöð`PZÕ­¶'"DŒr-?E ¿ß³µÅBâñX àaÙ jµÁjí‘Ë„žßš››ˆF7·· cQ­P¨-–®‚«ò‚Çöw 1vˆ16¨úrM…µ5?!D©ÔBü~÷úúR[›“¦e33&¥!·ÅEw4ºi·ï#DœŸw%· CñxÎû|S]]·äX`V–m·½Çqj•)^'·!b@Ä€ˆQ®åY1ŒL«m°Xº !,"„x½ãÒ [[Ò‘È:!D«­E1¹– --Ír\DBÇmå²ß”»Ð²TfÉõVÚ­ ëì•Íͼ b@Ä€ˆQ®å!ÓàSoï­ “Ó¬ÅÅ«±×Þ~P©ÔLN>µû§`Ï;PÆrm;­¶a}})Zhll£(*±\¥Òon®°ì !/]“ÛhšY]õ—°¹_ÄÌÔŠ¢EQˆÅ¸]˜î ¹Ã„#D ˆ1ʵbY­=4ͬ®.ƒ×“+'«µ{nîÊüüDÊúK—ßï¹ví¹½:™:`2µ¬¬,\½zŽà¶J‚ Gˆ1 b”k¹ÊTÁÐ4cµöX­=)Ëåregçáíëëõf½Þœ{û)ËÓÞš–×V™:ÐØØÖØØ†—ì-|g(T™px'"D\Sd8Õnw¾þ¢rÜ}÷Åûî;Žˆ1"FĈ£\KÃf“ã|U—«ær©µCFÄ8^2އ e¹::::::Zü:åØª][n(DÄ€ˆ×–Â/†JÓÈÈHÚ‡¥*ûR–”¶ýìû*÷¡0ÝÝÝ8 ˆ1 b”kÅ*m‰³;SYëN€Ê*×’+žH$2>>βlÚòKZS.—÷ôôX­ÖöÅóüÔÔT0$„˜L¦¾¾>¹\žeù¯±ó IDATyò(Z.5Y.íÐ4­V«yžç8N:‹Å‚×V™x½^ ³#b@Ä€ˆQ®å]™e1==Ͳìàà (ŠW®\IyÖápètºgžyæêÕ«™ÊµìÖÔÔT p:¢(^¾|™288˜e¹¤¿¿¿¹¹9—ܱ½^ÿÌ3ϰ,Ûßßo0Î;7==r­|Ün7Þ1 b@Ä(×òr q»ÕÕUBˆÉdJû¬Åb‘¾¨Šçùw‘VbÜKú.)éa–å’ÜGòvl‡¦éı0 “ýXòµK“›üå¡/Ù=Mgzª¼‡MÓ%oGªÕ Üð"D ˆåZ‰ BH0L—*iÜ.Ñ~b/ÓòRµ{Ž1 b@ĵ¦ìßjÐ××7666>>^¾ö !„³Ù,=̲¼TíTz¹–rKYòÃäŸU*ÕÑ£GEQ\[[»páB]]]öõ³ì"ír¹\ž|ïÿŽËwœ š²B.íär,P*˜p„ˆ"®5»qïÚèèèÿüÏÿ<ÿüóz½>mé;·Û“€ˆ"®)»ñïpØrÍçÃçST¢ZË¥¡¡¥Ö#bDŒˆq+ËÅP—ëŒËu¦L=. ñ²övYSSN"D ˆ¸¦u14 ƒÞpx=çiZ¦TjZ[{u$RAæpOû°L›Tn¹¶µÅz½c #³ÛJ¥–ã¶‚Áë•y¨®n&¡Ð\CC Î"D ˆåÚΖ–f!n·;T*=!D¡P77÷o_-çý~7Ë®B´Úz‹¥›aä„奥žJ_î$UTñx,ð°lHµÚ`µöÈå BÏoÍÍMD£›…uµ°!1i+Š¢ µÅÒ¥RéWT1ƶ‡¼ b@Ä€ˆQ®å$Y'„¨Õ†ì«ùýîõõe»}!âü¼‹ÒÜì „ø|W ÛÚöKÕ^ÒÊKmmNš–ÍÌ\\X˜lo?@Y\tG£›Éd¯± (˶“ª1Ž‹x<ç}¾©®®[Žã(Ô jʵ%ÆÕ¤Q4é!!„¢¨x<¶°0©×›F›4ŠÆ²!Bˆ×{ã+¶¶6’KÃD#Y¤Üˆ–‹´›°lhii–ã"¢(B8n ¯• ¿Ø1 b@Ä(×r¥Ré77WÂá5¦¾€Í[Z‚Áë››+Áàˆ:;'žêí½Uº`º‡¯Æb\{ûA¥R39ù^(•Ž1 b@ĵ¦ðò0›ÛišY\¼‰¬‹¢Èq‘……Éí«iµõ„–]ÙÜ\I<$„¨Tº––ŽŽ!BH,Æ¿°r!$ZHE“.˜&ÙRhšY]õ'/§(š‹qxéÀî(|tM©Ô¶· ½ss‚£(F¥Òn_Íbé&„ø|S„Î$=$/ÞÈOÉåJ‹¥KZhµöÐ4³ºº˜˜d*]©´Z»çæ®ÌÏOìÚy±Xºü~ϵkÏ¥,7™ZVV®^=GpÛÁ„#D ˆ1ʵ<(jiÞ@Šä:†aä;®“@ÓŒÕÚcµö¤,—Ë•ÉWKÓJi0ùa¦º*Ë&z½Y¯7oߤ±±­±_[»—0á"D\khœ”k%ƒ¿Ø1 b@ĵ&‹¡6›ç«Ò¸\5—‹ÍÖ‹ˆ1"FĈ×”j]Ef)(ªVþ<‰´ÿã¿b€ZTøT©r)GY–²¤{É´¯rïŠäõzÛÚ0Û"DŒr­ìNÁ”ØKùªO(-·ÛwD ˆ1ʵÂñŸÕjåyÞd2ej*{•iG™–Kúûû›››‹9D;z½þ™gžaY¶¿¿ß`0œ;wnzzåÚ.À_lˆ1 b”kEI GI_â$=$„ètºP(äóùÂá°Åbñûý R—©©ìc`™v”i¹Äjµy ‰vhúÆ, ‹ÅÂ0 !„çy¼žvAww7N"D ˆ¸¦ìÒÌP©,›U(‡C¡Px½ÞìåZYŽ–¦KÞŽT«TG¹&]Ü ƒ‰Ñ)i¹N§#„Äãq»ÝNÓ´ÝnÇã‰å%ÜQ¦å¥jöœTè"D ˆ¸v{14å³¾¾>BÈÄÄ!Äl6K !*•ŠaQ¥[Çš››gff(ŠR©T…í7ÓŽ2-/Uû°ç0á"DŒr-Wiï-“ËåÉ·ä'»ýöÛ“W;qâD^-§,Ï´£LËwœ š²B.ídú „ð¡Peð"D ˆ¸ÖÈp ª(ÖÖñbÂ"Æň1ʵŒ|>|PE%B.ˆ1 b¸¹•þb¨ËuÆå:S-ÍBÕ …æp1 b@Ä5¥ð‹¡Û‹'‡ãx‘YñH"‘ÅÅiŽ‹P-—+:;#é›F 0ÓÐЂó€ˆ"F¹–«’TW%ß‘Ï7Åq‘ööƒuuÊåe|ú ì™Ñþçö…G¿z÷ʵìâñX àaÙ jµÁjí‘Ë„Aˆûý– Åã¼TŠ%ÆêclÉ£w‰‡RѶ}ó”ýòü!„ad #·X^¼á1¹M†‘75u MÉOQ­P¨-–.•JŸ²¾Ãq<ÓáÀnÂ_lˆ1 âêr÷Ûßµ}á¢wz÷ʵ”‚&åY¿ß½¾¾ÔÖæ¤iÙÌÌÅ……Éöö„ÅÅ«ëëKm&S+EQÛ ²«µÇhLý¢Ïí›§P« ››«×®=§Tê´Úz£ÑÆ0/©ÍÖ«Tj¯]»\K”kÒ~9.âñœ÷ù¦ººnÙÞ‡L‡»©©©'"D\E6V—A„¸(‚ ˆ‚ Šñ¼Z(ïÅP– B¼ÞqéáÖÖFòò††æ´ÅV²D9µ½Ù,›ÛíŽåå9– F"ë‘Èz8¼ÖÚêL<«×› ¡!ÒàœÔàÒÒ,ÇEDQ „pÜVÚ>d:€L*ýb¨¤·÷V†‘¶-E2w•¦eMMMMáðš×;¯eosqñj,Ƶ·T*5““OeïC1‡Å …æ0ÌŽˆ"®"Å_ -ï·hµ „PhA|é§@¦].UE±Wp³ ssW"‘ui¨ŒRW§ÎÞ ÔM3««þbö » ˜ÁI@Ä€ˆW‘Õ¥µey!˜[^ô.-ÌæÝyµPÞ{׬ÖšfVWƒÁëÉëX­=E¯¬ø¤i›ÒB“©eeeáêÕsd§k¬i7O)¿æç]ñ8O¥V,–®ìGa±tùýžkמ˾Z¦ÃÈd//†fªT’—Ó4cµöX­=)ëÐ4c³õ¦,lllkllËÔ~J³Û7OÖÚ:¸cß’ÖëÍz½yÇcÌt8°›0ÀŽˆ"®.{?3`—aÂ"D ˆ¸º?3”ÆI¨dyŒ®Ùl˜Yq\®šËÅëõ¶µµ!bDŒˆ1"Fĵ£âF×FGGGGG˽ T/·Û“€ˆ"®)…ß»&UH###i–ÃæææÌÌÌêê*Ïó2™L«Õ:tÊµŠ°±±qá¹\ît:u:]$™E~5ìˆ1 b”k¥! ¶Ñ4­Ñhz{{ Cb¡D.—÷ôôX­VBH$gY6Kƒ';N©)F300PØ®µZ­ÓéT©Tˆ¿uwwã$ b@Ä€ˆQ®å]–m'] ‡Ã¿þõ¯'&&^ö²—%žr8:î™gž¹zõªT®MMM±,ët:EQ¼|ùrÚ×ÖÖ!F£qÇ.eÙubÓÓÓàÛÙ ʵ”{×$Á`Ðãñ„ÃaA!‘H$y‹Å"}5;ÏóÉ¥˜Éd*þ˲ï:±‹ÕÕUd_¥0á"D\kÊ23Ôår±,;44tâĉ4»¤i©\Ë‹tMsÇ2+û®á&€ Gˆ1 b”k% `1 ãóùr/Å‚Á`0Ì´NWWÃ0“““kkk¢(†Ãá+W®ä»ëÄ.r¹¨ P Ê2Õ ··wzzúܹs9®ß××7666>>žeNwäÈ‘™™™±±±X,Æ0ŒN§Ëw×Ò.¤)ȾJa€"DŒr-W)±–üÐb±X,–ì›$ÿ¬R©Ž=ºã5Íàà`öf3í:mŸ¡aÂ"D ˆ¸Öà;CàÿoïNÛH;Ž?3CJ¤$“’H‰”©ƒÖE®-òÆînÖ@¬6 ÚôH[ Úýšy™äE^òªHÿ‰i_(ÒmšÆ7ëtm¬åõ!ë°î“‘¢H‘ÃáôÅØô˜¤¨Ã¢%™ßÏ‹9z83œŸ¼øéÎÔµS`llŒ©µ÷ÃÒÒˆAÄ âºrˆ“¡ëë*Ç몷\fgg­Ö."&b"&b"&bêÚ09ù[!D0x‹ñ~;ÞZ'ïô;ß)üà‰ƒÅü+ÆqÖµdrsmmJqþ|Àáè8Íý,“ÙÞØ˜Éå2’$[­.\'û3ª½½›ƒ@Ä b1uíu͸ám2¹ùêZ‰Cõ¶õõé\.Ó×wµ¡Á‰pNý ëìôsˆD "¦®ˆ¦©;;ñææ6]×wv⚦*ŠUQ(h¡Ð\*Ó4µXª4M …fS©¸¢¥¥Íã0›'ÌÌ··#›› ªš5n{ Þ2~jf_q£fªº+„P‹¢X=ž×W+„Pkgç§³Óü#I’›<ž~»ÝQ2>¼¥iùpx.•Š …¦&§×;hµ6ò[NE]K&#º®“j;;ñd2ÒÖÖ%„ØØx‘LnºÝ½.WOñ˦B¡Ùd2âó} „¾º:)„8>hü¨âR­¯¿Bïí½l”¤ò~V¢âFÍššœ;;[óóm¶s--m­­]Šòú½wu Ùl-óóãáð|±®Êå2ss_¬¯O÷÷¥8Þëlmõ¾z_›½½#²lYXx´¶6Õ×Ç7Ç×V,¶Â4;ƒˆAÄÔµÖµMYVZZÚ…²¬$“›F]K¥bBˆööóæÚTœW3fËŒ§UH’¤iùµµ)‡££µµkß)«Š5óù‚‘ÈJ*Íd’™L2NôôŒêpt! !ŒÉ9c…››‹¹\F× Bˆ\n×¼¶b¥3¶»´ôòûvw·ù•ªµpxÿ 1ˆDL]ÛŸªf3™¤bzúwÆ’L&©ªÙ#Ÿ 4ZQQw÷Åhtyg'®¤R±·¿2@–-þÎN:XZz’N'Þl‡¥÷ŸÛØx‘Ïçúú®ÚlÍSS÷ÊÚä㇆~Ï8· pìŽx›Üd2,„p8:‚Á[Áà-㔨±Ð˜o‹ÅÖŒ‰4CKK›"•ŠïìÄ‹O…ŠbÕu=›ÝI$ÂæõÛí纻/úý£Bˆ|^5—¤|>W¾?7j¶²2‘É$‹¥°¡¡i¿ú¨ !dYÙÚ U¶ïvqìø‹ˆAÄ âzsÄÙµdrS¼<‡(ŒÉäf2¹érõx½ƒ’$ÇãëÆ˜Æ'ÀŒO÷¯¯O !Îs?ìßÙ釿çÇKÖÿêcþ’Õjóxú….Ww<¾öâÅ}Qö ¶Š-©_««“š¦ !559‹ëÜ‹ÇÓ ÍÍÏ?¬>Ìë”eekk#]6–p¸Zã‚#"ƒˆ©kRrv²¥¥½XSdYéê*¯(ÖâµfN§Çé¬ðìKÛÝëv÷VSq£f==—*.7¯ÄüØáè¨xk’’“eÅëôzùM5ÂW¼ãŒ‰ÅV8D "× ‡gK^p´¶¦1ˆ˜ÅDL];®..~ pˆD "¦®ÈóçÏÓéô‡~h·Ûççç‹Ë«Híµþô6@]«,“É!,‹Õj..7Ï~e2™§OŸ¦R©’׿óù™™™H$R(Z[[€Íf;Èú‹§5‹[1oNÓ4cµªª–7¹T*õøñã\.744äóùÈþŒZZZbšˆAÄ âºrôÏ®µ¶¶ !îß¿ÿðáÃÅÅÅ|>_>fzz:•JŒŒ\ºt©dùÆÆÆÈÈÈõë×c±ØÄÄÄ×_l`cccåójSSSëëë>ŸïöíÛ%?Çããã㚦]½z•®v¦ÍÎÎrˆD "®+GŸ]Y\\ŒD"‰D"‘HÄãñk×®•ŒI$B—ËUòM‘HDñèÑ#ãi2™<ÚúK«íéé)ÿ¢÷/¿üÒb±\¿~½©©‰Ô@]Ô5‹Å200000°µµ5>>¾µµuØ5ܺuËjµÖnýf»»»‘H„éÙ³Ž‰D "®7G?úäÉ“D"Q(¼üÒôæææò1N§SF£Ñ¨y¹ÛíB,//Wùfô½Ö/˲"›Í–¿¤ÊjGGGm6Ûìììââ"©Ÿi\pDÄ bq½9úìZ¡Pxúô©ªª’$µ¶¶ UøÊÎááá'Ož<}ú´dy Pemm­XžÊ?ˆ¶×úûúú–——ïÝ»Wþª@ ËòêêêÂÂBÉOm6ÛèèèøøøÜÜœ®ë~¿ŸìÀ{^×®^½Zq¹¹$ÙíöŠ÷cS%#¬ßï÷›Ë–ysŠ¢ƒÁ½öÇf³}üñÇD~ÖqÁƒˆAÄõ†¯xÇÃGD "S×pŠâdèúºÊñ:…ê-—ööîz{ËDLÄDLÄD\ç˜]ÃÓÙéç 1ˆD\WŽ~©Áääo‹ÅÒÐÐäv÷67·û.’$I–-ÍnwOS“³vGÄü¾‚Á[üŠ€“õ¶³kÁà­@àŸ/˜É$×Ö¦j·£À'}}W4M]^~º³³U» ƒ·hi§Y,¶ÂA b1ˆ¸®XÞ~’$w¥U”×k{5%&766y<ýv»C±½ÙÜ\PÕ¬q[£U\XQCƒÝëX\|.Óx%3aÆSc å_í­ÜÐ`×4UÓTE±vv^p8:ø=8CÂá…öönŽƒˆAÄÔµƒ*6!I’»º†ÌåI‘Ëeææ¾X_ŸîïÿŠb}ý…zoïe£½*.Ü‹ÍÖ"„Èd¶Í ½ÞÁÖVo±;îõZ¯wÐn?7??žÍîx½ƒv»c~þa(4G]ïs]+έ®N†Ã }}W„©Tlss1—ËèzA‘Ëí»”¦å×Ö¦ŽŽÖÖ.«µq¯…Õ•t2§³ó »êtvJÒË“¿G‡,+BMãÒ•3†¿ØˆD "®7ÇsehKK»bw7e<ÝØx‘Íîôö^¾jÖÝ}±¥¥=ŸÏE£+++Ϫ,Ü‹1¯f̱™Ú[é»0jbYÉ{=Ìèj8‹¸àˆˆAÄ bêÚQ¤R1!DCƒíU[ÒJ´µ2³ÛÏuw_ôûG…ù¼ZeaE¹\&š“$Éåê©8@Q¬º®g³;‰D˜hÀûáx>»&I²ÝîðzŒ…O(47?ÿpÁ’Õjóxú«,,75õ™$)v{‹Ç3²×<:;ýáðÂüüøÛ¿#óc.=Ub±¦Ù‰D "¦®H•ãptTüü~Å—ì[†ª (ù‘Óéq:=Õ‡íõøàûƒ“ÅGD "×¾Õ€ºþb#b1ˆ¸ÞâdhW—•ãuÚLNÖ].æÛû111׃3<»vçÎ;wî!x¿½Õ•¡¡PhbbBqñâEÇóú™bllìȯ}ùž-–æææ .´µµÕh'%I²X,---~¿¿µµ•ß³c´´´ÔÛÛËq b1ˆ¸~¼ÕìZ(’$I’¤P(ôîw}llì°ÕmllìöíÛ###‰DâÙ³gµÛ·Û·o_¿~]UÕGÅãq~ÏŽÑìì,ˆAÄ âºrôÙ5UUc±X{{»®ë±XLUU«Õ*„Ð4mff&‰¨ª*^M†©ª:==F….—kxxØlž03?‡Ãsss»»»ÆwÇÆÆŠÓcÅaæñ7ZQñ ¬Œ0¯S–åæææ¡¡!§ÓYqöZXQSSÓðððÇŒi<ó _Éþ—?~Ù¦e¹©©IUÕ\.gµZßÁ,&xOêZ8ÖuÝh±X,û|>!ÄÔÔT(òûý~¿¿Ø¦§§ÃáðÈȈ®ëÆ´Ö¥K—Jú“ÙÔÔ”®ë£££Fs*ï7åãË7Z®Ø„dYƒæò$„H§ÓŸþùóçÏ?ú裊û°×½œ;wN‘L&Í Àùó竼÷â0‡ÃñàÁƒT*œNçýû÷gff¨kL°1ˆDL];¨P(¤(ŠÛíB(Š …Œº‰D„===æ.RœW3&¥Œ§UH’”Ïç'&&:;;}>ŸÍf«>¾âFËgÈž={6;;{ýúucgæææÒét¡PBd2™*ûpØ+ïd^¯÷ ‡×ëõÊòËSÕGQ!„1wXç8D "ו#~vmww7‘Hhšv÷îÝ»wïjš–H$vww¼FU*ºråŠÛíÎf³KKK?>Þ÷lTÌíímãéääd*•ýÚ×¾¶ï>jÇŒy5cŽíõ—åêï½|˜ÑÕuíŒk <ñyã ±Ð(CËËËÆDšÁår !¢ÑhqšÍXnµZu]O¥Ræõ;ŽË—/߸qC‘ËåÌ &›ÍîÕÀJ6ºc*În·O—(в¾¾¾ï>T\XQ:ž™™‘$Éï÷W°×{GuKKK"ƒˆëÊO†ëšñÔãñ„B¡P(Ô××dY^]]]XX¯Î? !ž?.„èèè0ž !fgg»pªQרkõ*²±ªª¹âS5Ÿ‹m†¨k§E<z6þ»|>otµ‰G÷ÓéTC£ýàkàR€¼8:;ùøñƒß´¹½ÑðªËÓ¼r3S×NI’. èB_Y˜îø 0r#•ˆj Ô5€Ú7¶ÁKí.OWO*=ìËùìÀ»hlÎ6×N2~„×R׎¿œåÕì¾Ã š&$êÀ;g³5N?{²ï°™ç_Zäý?™Æg׎ÙÿÙ_ÿú—¿P,²¯¯_‘*L t=ºZ]Yúä÷¿¹ïÚ¤hhyßA¿ú÷æ¸T÷õ?ývññÂÜÌŸ‹†u!dI’eY’$Y–dY–%Éb±´¹:F®Ý8ßí?žº€“Âgרk8ªƒ^j0?;ó«ÿü·ÝÝ]@‘$I_ÿ£o]:ɺ¶º²ôÙÝ_ýá7ÿ2xyÔjm¬8FÍí !þñ¾ÿýýÉ€÷ÃøÝïýè'U¨jvòÉøÿþú¿}ݽ'V×>ÿìÓ?ù‹¿ñž÷éš–ÓÒUFÊ’¤ëºQÝÎ:Y’„®ç²™*c¯ØíMŸýæ¿ÿêÛwbu-º¹ÑÕݧåsûŽ”dI× …‚Fºà= É’®ë…B¡ú0¯¯7º¹Q£}8P]Ó…P9Ÿ{£„éº>óô ··»½ÃûºÊ²Ðuº îüÇ¿üùßþýöÖfù€‘eY× ÅnÙXGCƒG¥7o~«È’^³}8P]3Nqš{¥®ë3Ó;Û—º/d3;UFÀñ*þ¦ü]{³Ûœks--LÏN>¾0¬®½œ3+¼îjÏÇ·[Ÿ|ý[ÙôŽ®J('CÔ²®i{=€ã¯ko¶ ‹b¹tíãÇîêB¿0xÉÜØd¹V÷G;P]“$I×õb- ¯-…V>¸–Íì ù #ùK@ͼþӱ컒$„P¹Íݹ²0Óîò8Û\æ‘'Y×dY2÷J·Ç·“ÞÞXYèôøJФ,s2@mq2À»TÒ‚„j> ¯÷|ÐÕÓ¿“Œ¿1òD뚬‹7ze¯XèâÙ—Ÿ¯|h‘-æ‘‚Ù5µÄì€w[×ÞhAj>7ñè¾Ëã ŒÜH%¢%#O´®I’Ð…®¿qÅCheáE^Õ”‹zq¤.t]çs$jV¸zô'IDAT×^ý¦ü]{³%c±v·7xåf*©0òëšÅbÉkùòóúúúíæÇI²¬ô‚Æ_ºŽßÍ[ߨXš©øjDzó2ÊV—»ó|O2.VÐu‹ÅR£}8Ðz]nÏÊüt›Ë]þ£]Ó]<ÄË‹]¹2¼'ÊoRVR~ ñhÄåöœd]»òáÇîý××üàŠ\µ9¾ºÔ€ºÞ‹º&K‰²¹4³B>?ùüñÆêÒ¯þAöAІ–2n}eñÿ~ûKMÓ„NpÅ2%EùèÖ7ººûN¸®àDÈê¨kÔ5P×@] ®€º@]u Ô5€³çÿ'›)Ó…g’?IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/repeats.png0000644000175000017500000000163711273045225024064 0ustar julianjulian‰PNG  IHDRqЀ"úsRGB®Îé pHYs  šœtIMEØ %U_‚1IDAThÞíšÑKSQÇ¿çÜ»»»é¼KE[:d/Q„TPýý AP‘ô HoCòA|è!ñ!z©·°”ìAb0aˆ¢˜‰i™Sqws»w÷Þ¶ Ž„¢mwwë|ßîýç{~Î~ßßa$ùcÛS]‹²0ˆL "ƒÈT>ÄÄâ2f#QLÏD°pxñò•m6gzÙ?8ÄôL³‘(‹Ë ‘/çå×oßc7yM×ÑÞÖŠëW/áÃ\î߱ſL/«kxón¥èhó¢ÿâyÑTo°œKB^U!I ©Ùc›Í™^$IB—/Þá@ Ó[ñuž=ŸD{G'²9µ"ßÓuj6…§îV¢èrCòrP”,(Çœ¢Ë6M/”ãà‘¼¢ËYñuÄf/ÜžVPš‚ªäʇH 4ŽZs)ÇÃ!î ),J©}²’é… AáPޝü:„"“‘ñðöÍzL§ Àû_úE¯¨’WUÉ–<Ýþ^¿#-žÈ#YÆ|,n9¬ùXG²\âÅJ­olbõóVÖ6ñ1ú ŠªÖ!Äbo clb ±x²Æâ ŒMLa`(\âÅJ…ú‚Xû²…ùøzzü{§ÓÓÄ ç÷û@…’×,+ ’× iGwwg‰«Ob(€ƒç°¹õ =_ÕAòÕúðÈã{XZYÇ•~ëf²×.Ã%Џp.T³Þê Æ›&zÏúí?'ž&M+œ<Ñé´ ©“kš^j!«V¥' ’Ó–öÓ}1%§K¼4º*l( ‡1:>‰Ø‚…Áf!ÑñI ‡K¼T[ɽ]ìïÕ "_yˆ…0áëî‚Eµ0بZ¼­ðƒé¥Úz2p „Æø?¯ÔRÓŸSlXOü]º §3ˆÿX8C·Dy±-DBˆí7ZO^-í‰;?“Ð Š¢@Nf³¼¾+Ó‹œNãø8MËc'›o8ˆ¤œ?çr 4Ý€¦khv»j³ÿt!gŽÁQ%p:vMÕK1!ð4¹YOdb™D&±Áõ `RU%@ƒ IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/sed_mixer_dialog.png0000644000175000017500000002545311273045225025721 0ustar julianjulian‰PNG  IHDR¸MçögsRGB®Îé pHYs  šœtIMEØ #+Ué0 IDATxÚíy\åÇŸ™]XåäAò–û~þ²¼53¼5-RóH%³ ïÌ+ë×íAy¡få‘f)jÞâ¢f*È%‹œ ;óüþXÝha—Ý–Ý™ÏûÅË×ììÌÎ~ß3~ŸçùÎì ó(+•Ð €D H”€D H”€D H”€D "EjIJ”–—)ËUå”ç ¡ÂuÂ0,+•ÚØÊd„0F¯ K°$^K5‹W‰²´¤(åþß—/]x˜•!à¦CÂJÜ<µnáߤ©]J;@a –Dk©†ñ !QªÊÊ23ÓÏþy²÷À¡þAÍ$)#¬CÇs·¯'ü)¾¡‹›ŸŸKYY©áëÂ,‰ÙRMâH¢,+W^ºpºï áAÍ)åyN%àŽ@HhK¥Ry*áÈð1S‰1;–`Iä–LŽWÍÕkI±KWœ>s¶¬¬¼e‹g§¼9±oŸ^z–wóô3ÏÝ* =™Cy>÷áCŸ€¦<ÏñýsssµVÑD§Ž×ø^£µEJ鯿îÙ«¯‹›§·oàØq¯?|øÐÚ-i¨EKÕÆþBžºÞ5ƒ= ±”——÷ÚˆÑn^¾þAÅ.ÒQá"—çææiòcÅžàÙsç{÷{Ù¯Is7O?ßÀfrs«\]=aoo¯R©j·ˆiL¢|Z4x¨fæ7ß|wâä©‹çÏ\8wúx‰M›¶T¹nq¡BóWÍc^^^ï¾Zµlq%ñ奀 ­Z¶èÝw@^Þ¿*)šèL¨FëZkÝúO§¿=-åþÄ‹g6l8zÌxk·¤?^Ó,é|kÜ*§ç3Íl¯¾,½õöÌ ìoß¼~%ñüÝ»÷6o‰ÌQÑ¡CÔC¿VùÖ¸×ßœ0~lÒåó9™)÷þºaþ+4ˆ‡a˜'}®?hšŽ­qß/Zãååéåå¹haÌ–­qU6MZs8Ê×­ÿ4¤y˜ƒ“ ¥T¥R½·p‘`°›‡×¨Ñã Ô‹éšor«hk+òêà ë×J$‰D²aýÚ!¯¶µ•ý«Gù$:˜Ô*j,Udß»_xá¿ ¸»»Ç~ô៧ÏX»%ͪµhI—u7jñG±Ÿ¶¾ÊwÍcÏB,uâØ½¿oÛÙÙż÷þ“¢ƒŽù&Ó ý[Ó¦hš;–eßš6¥AûŠË¼òOÒ¤áRukýý÷ÈÈk·dx¼µ²ÖÂ÷?|sÒÄ£ÖªS{õeI«3•tý†yºTfˆ÷Ùð°¸ÍßlÛÖ²]PHøÒå+ã6ódL¶fUÌÂü›õøj”Áÿ}jcNæ¨ÏdQºkÇäéÞ***rhÐ@ýÒÑÁ¡°°TÕ+vpú§î[ô8—²lÉGînnê…7mÚ²oo¼wcBÈâÞêØyÍêUzæ›P‘6|Ù'ÑQʘtæNc©Êw¯\¹:wîü½{vY»%Í*uaIkþ¹ó’’’Ö¬^ùd¾ŽµÌd¯¾-õèñßyóc–Æ.&„Ì›ÿ^QQ©Óq¨ã%„´kÛfoü¶Êó{õ|±WÏ5/_Ÿ0V«©U‹Ô5ß\=JJ)¥¯¼:LÓÉvpp(,,TO8::VÙ‡/̤ùSÏñòòÔ,ž‘Ñ.²CC'¹{“àæÙÙ9úç›<|(*.^·þSŽãÔ/9Ž[·þÓ¢â⊫h¢3½ ãËO8ñêÐ×¾ûö«à¦AÖn韲}m[ª<ˆžûîüÖ©Ç¡z†ÞumÏB,­Y½J¡P7kÓ>ÊßßÏÍÍÕyÙZóÕ×U¹§ÕÑ<Þ¿gËÈI³ý}®Æ’&XRK¶dæx-c~ëÍ2”ò<Ïm‹ÛÄóœYùÛ:;7¬r>!DÏs&àÕ–¬îP0Ê’fX¶%sÆ+”Dɰ”Ržç†óÃÖï¬"¼àÐ6yÙiF­¢Ž®&72P[²¢ƒÀKO X°$\Kæ×’1<F"‘ð<Çs\ܦ¯‡¾6šç8Aþ·ékžãTªr‰DbB)CcI °Kµ¯ j”ÅE‰gš‡·‘»ºžz?õþíî}†–æ¾,Á,™¯@†Þ6R›¦Íï^:Þ:Rîæ!îsn9Â+eß¹uµ]Çÿ¨Œ¼—=,Á’˜-Õ$^c)*¨âÖ'NòzîQB•ÊÒÂÂÇ·¯]z¬Èå­ðN‚††Ê]›·lߨ'°´¸ÐØú ,Á’h-Õ,^CIM¹êøoÙ³áY†aY–e–em¤R÷F^í¢ºxyûÖc¢$ ÃHmeR™i÷P²"xžçÊ”¦=C–`IÌ–j¯!ÜùëfÂÑ#ý_éãÀ²,åyžò”çyžW•—g¦ß?qtd§ç}ýƒê-Q@ý÷Ý/õ}%¨Yåyžç*&JõôƒûwÏ&téÞÇÑÉ©6;ËP°23Òƒ›ëYÀËÛ_‘›]ûU¨XR‰žw%–«ƒÇ±!Q@uÙ VDòõ+”ò”§”ò”ªŸf¨~IyÊÊ+•µÿ$tc%¥åeÊrU9åyB¨pwð¬Tjc+“büOVa –Äk©fñF³gÂ9NÅ©TWΩTÚÓ\¹LfSŸ‰²´¤(åþß—/]x˜•!àöJÂJÜ<µnáߤ©]cŸ÷K°$ZK5ŒWCoUYYffúÙ?Oö8Ô?¨™D"e#ȃ›ã¹Û×þßÐÅÍÏÏŨ+Â` –Äl©&ñËéc¿DwëÉ©T—ÏìòbA~î­¤‹í;¿“õ >eY¹òÒ…Ó} jN)Ïs*wBB[*•ÊS G†™JŒÙÙ°K"·dr¼Æý\/õƒÏ"»¾¤žˆèÒ£îú°†&JÊó¹ú4åyNH=j]4ö Ìýy—±¿ˆ€%X‚%Óâ5ÊpœŠ¢,)æT*BH~nWgÍ kÄŽ#TÂJxž{z²É þO±±µ3aE©D›R>‡%Xˆ%³ÇkôÐ[}3·ËçŽ7pt"„ÜJºèâîYÏ=JòäÉj”òÖw ƒÊß97/âªûvö5¹Ù*,Á’`,™3^! ½‰ú™p”R+¼×‹ÖwÎËËëÕ§?!dÿÏ?êzô¥¼éO΃%XŠ%sÆ+Œ¡÷“'«i=—ÒÞÁYýG-’§{îrss{õé¯P( E¯>ýsssu­[“'çi}ÔÁƒ‡^èÑSîÚÈÛ7p䨱iié°dø±¤™_¿Gš…XÊËË{mÄh7/_ÿ b— )^Kz“(«ªÎ*Š ÖÒÈËËëÝw@«–-®$^¸’x¡U˽ûP?UÎÀxM³´fíú©S&ßûûVò«ááa¯ KFKê·,ê`«/Ko½=³AûÛ7¯_I<÷î½Í[â¯ÑCoBž ½ Q½ënsÆ ½¦bSS©¿m¹'æ4ßÍÖV6äÕÁS§¼©Þ‘Ö¯Ýðég¶¶²Ê_žR˜Ô*Viiÿ/û4ÓÓ¦NY¾b¥êªwKzŽ%ËÑUï–`‰º,ÃRåùEs !Çݸ‘<ûÝùÙ³—/‹­¥=þ;o~ÌÒØÅ„yóß+**ªÛcÉŒñÈ3a-ŸÞ¬·Š÷Rž;y´öëmT’!ºë¾Vq2§¨¸xÝúO9ŽS¿ä8nÝúO‹Š‹«.H›Ü Ðñe óe<¸7iâ„7&Oƒ%c%–eÃÃþýê‹-qß‹ÙÒšÕ« Epó°6í£üýýÜÜ\¯%cÔYo«¿y¥²´tûŽSßš®R©T*ÕÔ·¦oß±SYZZ‹ñê_ËÉÉéíiS/\¸K&¯,Ë[ÆÕ—õeÉÍÍíû­›³3Óþ¾ìãíÝ­kWÁÄkV¢¿Éq¼¤N%y¥î²ºUœÌ‘ËåûöÆ÷0¨UÛHBˆ‹ÜyßÞx¹\^åÙÓ¯}«dcâ“ß™1½iÓ Gr×®ÛÑÞ’OæÔ—%]ÇÒØñ¯Ïž5³YHHjêƒÙsßп_=Ú«wKS¦MŸ?oŽ««ëo¿]ºlÅ{vÕ© sÆkžžwïÜ Õµ@fzŠÜÕ£ÖÏ&}¥vIîî$w¯8aḸ¸ìÛï"wVïiÝ?0¨ÉµoZô|éÅ1ã^÷ðòíйknnî¦o¿†%Ã¥~}ûŒŸð†‡—ïK½ú†‡|¼j¹˜-EGE<ÿŸMB¾ü꛾ß,˜x !ºs·Ÿâ¿¿÷¯ÊýJŽã2ÓRN?Þ:¢Ö3µQ=J–PíT=Î}ø¯ÆÄ"”¦õ­äÎÎ?îÞ©žÐõ…)å“:ðUZЯï€~}-\T½[Òu,Y”½z·4bø°Ç™M…9ã5„¦ÁÍmmííÛ¡ë¹ÞQ»Ë]\mmeõ–(Y–¡”çyŽX•¿³³sÃ*çW\Åä<,Á’`,™3^ñóèÝpqaþæo¿ìÝ·¯T"•HmvïÚ1sþâ’ÂǬ„µµ•ÕúdÆÝƒRj]wph›¼ì4ÓR“ ð°K°dþx ÇÑɉ!Ã0öööR©TjÃ0ŒSCg–ÔUÿÚðDÉH$žçxÎúz& R•›Ô(Á,‰Ý’©ñZ4†&J†e]\ÝÓîÝ–»º‹áà~œ÷ÈÅÍÃØ+Q` –`É´x-C{È6R›¦Íï^:ûè!O(C¡þñ„æ>zxçÖÕí:ªŒ¼—=,Á’˜-Õ$^ô(md2¹[£í;Þ¾vé±"—§‚j.´ C å®­"»xxú”wpÃ,‰ØRMâH¢$„±³kàØÐÅ7 ™î¡T¿ð<Ï•)MÚÓ°K¢¶Tƒx’( ¥´\YZ®,%–` –Ä €D H”€D H”€D H”€D "EjÔÒåe¥åÊRý7žgbkï •ØˆÖ),Á,‰;Q*K¯]»væÔºH¥Q:=×£¬´¤æ_ÎÍÓïQVªõܰK°$æDI 9æÄ»¬‘ÙÙU¹€²´t凳žëѯÊÝ–‘‘9ÿ½EÇŽ'”–”¶mÛzÚÔ7_|á¿Âs K°KÃè%Ç©tí3BˆÌÎNÏÃ$'LšÜ$0àÌÉcwïܘ7wö·ßmªVX‚%Xu¢¬ .^š3k†‡‡»ÌÖ¶SÇèmq›ž´ŠJåô™sƒCƒCg¼3W©Tj7›Õ- $` –`IÔ‰²UË–~´ìÞý­ù±KWdfe?pîÏ„iiK–­4v!K°K¢N”›¾ù¢¨¨¨w¿—š†Ž{ýÍ´ôtõüø=?.Y¼ÈÝÝÝÃÃ}Yì‡ñ{~ÔZ±Ú„,Á,‰:Qzyy®ýdeÒåóÏôóõÿúdõüì윀õt@€vvŽÖŠÕ. $` –`IÔ‰Rƒ›«ë»sÞI¼|YýÒÃÃ=%åÉE ÷笠»»i-_í‚–` –Ę(‡sòÔi¥Rù(7wõšõφ‡«çìßoþ{‹rrrrrræÅ¼ÿò€~Z+V»€€%X‚%Q'ʱ£G.]¾²IpX»ÈNII7¾üß§êù1óçxx¸·‹êÒ.ª‹——ç‚ys´V¬v!K°K–cÔ…øEŠM_>{á*ý—¿Î^¸¼èqžhÂ,Á’Ì|¾aÍ Áƒ¥R©Ô&n˦…K×Öã~™Ã0$"ºÓÊų8UÕ׸J¤Òˆè΄RQ7>°K°$æ%Ç©ìÚØÊô-Diy™²LY"Z§°K°$ê¥D"-+-.+-F K°Kâ÷£$J@¢$J@¢$J@¢$J@¢€D H”€D æÇ¸›b”—•–+Kõßщaˆ­½ƒTb#Z§°K°$îD©,½víÚ™SèZ@"•FDuêô\²RñÞ –` –D()!çÏœx÷ƒ5úï·ü\~Uî67O¿O>^>jÄpÍœ#¿ý>dø(ý÷Ätóô3ꦙõ,Á, £k”§ÒµÏ!2;;ŽSéY}Ó–8Žã4/×møLZa –`IÔ‰²†tê­y˜ú¯‡k\±ÓjÖ*þ«y—ã¸Å±Ëš‡µö ™0qraa¡ðö ,Á,‰:QŽ7fÝú”RBÈŠUŸLz}œþåÕC€GY©š±À'k7$^¾òû‘7“.ÙÙÛ}°x‰ðö ,Á,YR3o/Àß/ Àÿç_ØØÚ¸ºº„Thß dkܶ]Û·z{7&„¼3¿Ëó/¬\.´=K°K¢N”„‰Æ.úp a˜÷æÏ5aõŒÌÌŽ]»B(¥<Ï3 #ÈK°K¢N”ݺv)--%„<ÿ\×}©´¤¤ÄÞÞž’›§óijžÚÿcãÆ^ÂÞ1°K°d9ÔÏ/sþ<ñûŸ'~×jšÂÃC7lü_IIIFFæ;³çiæ;;7üë¯;š—cÇŒ˜1kîÝ{÷U*ÕõÉ&Nê¾%X‚%Q'Ê*YóñŠý‡õì3°KçNšùS'¿ñŸ½5çàÞž6%:2bà ¡¾!ߘڻwOQí0X‚%X2?ŒQW–(6}ýùì…«ô_þ:{áòº{¹åK°Kf0óù†5ƒ–Jm¤R›¸-›.][wŒ«Q2 ‰ˆî´rñ,NUõ5®©4"º3¡TÌå X‚%Xu’ãTö mleú¢´¼LY¦ï/Oa –`IÔ=J‰DZVZ\VZŒ–` –ÄîG H”€D H”€D H”€D H”€D ‰( ZÔ·¹sûæé“Ç23ÒMXWÂJ<<=£;ukÒܪw $ÀT Qê$5åþñ£‡û½2<0¸¹TbCI¾~¥Ù3áú׺•œôLXKBÇ©îÞ¹¹oWœ­ÌÎÏ?ÀJ÷$ÀT`è­SÇ0dTP³0–•ð”ç)O)Ïq*ý”òê…– 8tÌ©ã¿Xéþ€xƒ !÷(‹ 5ü„ì‡Y>~”ç5s(OÕ÷+=}ì—èçzÊTž <­¸Š¯öìâÂ|†p†lÔÁInNÝÕZª VgÉ2½Õ…%¨àÐ{èÒý5YýEwžeYžÿgÇPÊs\9!$º[OB)Ç©*OPÊW\…aBøÍß~iÈC5ëôNŸ¦Y2¿k´dÞêÎT-QB¢{½fzà\lÅ6íÉV©!šûàWž ”×Z‹e˜Þ}ûª©‡ø;ëKºKf–P-–iÉÒ¼Õµ%¨Z¢ôh(3y]žeyªµƒ)Ç©!—Ïìú’²¤¸ò¥Tk-–e¥©Tjc±ÒõX„Ú=–„í *„–(ÝLO”9,£«%Œìò"¡”S©*OTѲŒDjcÉ;X%ñH¨ÝcIØÞ Bh‰òÛ/?3yÝþ>,¯µƒyª®­äçªçTž <åµw0»{׎Z)ÏÕz,‰GBíKÂö‚J”G7L©ÉêW.T•—K$’ T*BÈ­¤‹]zäçæTž ô_gë8޳‘JgÎ_ìÔÐÙ2ë·$ µ~, ØT*Q:8ÉkxªË½‘WfúýƾÿT[(¯®­´ïü‚ºÎRyB}ñ—f•¬ŒT÷F^%…YÂ[ îj-‰AB]KBõÂzׄvQ]~û¥ãs/yyûK$¬z< 2äd=xR©4A(OyŽÂq|fzÊŸÇîü_Vb­¿a‡xƒ $J}xyûFuþOâÙEn6Çó„¥²\&«¦–¬T–Ÿþd]P³ðÐm:¼fí†àæ-B[´=vônöLxp³Ð àfAMýšøúù{{ûz5öjÔÈÃÃÝÍÕUŽª3*¹oB…Ø%0h,€J®QãMBžŒ7 Q7¡Bä*’(ÑôZorêñfqaz¼™—“¢V!ŒD‰¦O?Éׯܼ~åæõ«·n\»•|ívrÒí›Iݼþ×­ݺqçv2*¹ht¡¢Öp–Ýô¡ê¬\?l\£‹S½P¡7oB…{”hú lN¢»õäTªËçŽGvy± ?÷VÒÅö_ÈÉÂç„r+9 —šA†ÞT¢9ÑÇ3a-Ÿ^ŠÏU¼,ÿé4wò¨ TˆM†ÞIa$€˜%Îz£9©!V¢Âq¼„e¡BT*„–(ÑWBsRC<<=ïÞ¹©gÌô¹«Ã0P!¦a‰5JTlNPÉÕÑŠtîöSü÷†Œöñõ×JÇee¤ž>~¸]t†e B<*„“(Qu6jè³ÞºhÜÜÖÖîоºfÕ¹»ÜÅÕÖVâQ!œD Œz㬷nüüz÷\\˜¿ùÛ/{÷í+•H%R›Ý»vÌœ¿¸¤ð1+ammeê"/TˆG…¥ºêÌè®+£êŒ¡·Q8:91„cÆÞÞ^*µ‘Jm†qjèÌ*D«ÂꥺêªkTÕ ’ €x%ªÎ‚J.âM”¨:(«UçjA%±'J‚ªsu ’ €9A§Ã*QWrïßý«ò nŽã2ÓRN?Þ:•\„Ü£úA%$JP=¨ä€D ª•\Ìj”€D H”€D H”€D H”€D H”(‰(‰(‰(‰% Q@­aéÏ̉߹; –` *ê7æQVªe*(*P4òi¢=óqŽrX‚%¨0s –›(ÀB@(‰(‰(Àz1ãç”–—)ËUå”ç ¡u¶†aY©ÔÆV&#„±¾K°$Z‹ùeiIѽ»w.œ?›•‘^w[‘°wOÏöÑMƒíìPJ­+À,‰V…%Çb¦D©*+ËHOûóD ½_ö ’Hêj»§J½÷÷á_v;»¸ù¸”••ZÑÿX‚%Ѫ°ðXÌ”(ËÊ•çΜì9`HX‹6u½-Wwg¹Ë}ÛFOœN¬*À,‰V……Çb¦“9”çs²6öñ3Ïæ|šädf±¬•ª‚%X­ …5ß>%|Ýu§µË)Oxb}À,‰V…EÇb¾v’eÌzÞÐÌ›ƒ%X‚ Çb¾Dɰfµ`æÍÁ,A…€c1g²êm1OÑîˆS:wî\WW×yóæiÎâïß¿¿[·nvvvnnnC‡MKK3jsßWªþkߺu«G=zô¸uë––I5ÎÎε²9+²¤ëX:xð`÷îÝíííÝÜÜFŒñðáC£ŒY²%!©0äÃMµuð›1QêÈß”Ò*£úâ‹/Ž?ž””tíÚµ?þøã믿VÏ_µjÕôéÓ333ïÝ»×¢E‹Áƒµ9KO|í!C†tìØ1------**jèСMªÙµk×ĉkesVdI×±´zõêY³fegg߸qÃÙÙyذaF³dKBRaȇ›.jëà7ß猑ˆM›6ÅÆÆz{{Bbcc.\8aÂBÈÑ£G5ËÌœ9ó£>ª•ÍYÊHÊ€¯œœ|úôi™LFY°`ÁÇ\y™+VìÞ½»ÖwŠYªÈ¯¿þªžptt\¹r¥«««QÆ,Ù’TÔäÃu¥‹ÚÚœ9{”Æm+))©}ûöêévíÚ%%%i-PTT´víÚîÝ»×Êæ,¦ƒPý×îÓ§ÏòåËóóó ŲeËz÷î­µÀ¾}ûÂÃÃ}||j}§X‘%]>|¸C‡F³dKBRQ“¯6]Ôps–Û£,,,tttTO;99Tþ´F\º¨ùæÌxy‘ÍExxøùóçÕÓ.\×Z aƳfÍ:{ö¬ØúJ ,Ëår¹|Á‚ ß]¼xñܹsÍІ[W7jûöí¯½öZ|||dd¤Ö[ÕXÒbUÔäëMVÔ£4n[£FЉ‰IOOOOO‰‰3fŒfþ7T*UfffLLLå"‹åוjh),,léÒ¥ …B¡P,Y²äÙgŸÕ¼uäȆa:uêd†ª…[ªÈêÕ«çÌ™säÈMË(cBªQZ²Šš|¸®tQ[›«ÿ¥æª(­Ë£&MšÔ¹sçðððððð®]»Ž?^=¿oß¾C‡µ··oÕªÕ£G¶oß.¶¾R\\Üñãǽ½½½½½Ož<W±G0gÎó´áhI×±ôÎ;襤¤„……i®ÂÓ Ó 1f=JkTaȇ›.j+óÌÑsÁ—®0V¬X±bÅ ­ùƒÖuí¤µÔ•jøµCCC+^#U‘cÇŽ™­*d–tKz.?6Ę•^Giu* ¼ŽÒ¨tQ[±Ôÿ/s„±9X‚%¨p,ø­·…¤` –Ī¿õ&„0R‰„ç8ólŒç8©Db–`I¬*,:3%J†e]Ý=rr2̳¹¬ÌTWF³,ëìâöl›hÿ ÒâBkTÂ,‰V…EÇb¶DI†‘Úʤ6²º¾|—çy®Li]O„%X‚ KŽÅ|‰¬ ‰(‰(‰(‰( Q% Q€Ùù?ëž§å î½¿IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/edit/typing.png0000644000175000017500000000150211273045225023722 0ustar julianjulian‰PNG  IHDR¾E{CËsRGB®Îé pHYs  šœtIMEØ ꈎÅÔIDATxÚí±Kja‡ß/L·Ä1p“³H“BdsØäŸÐ؈èàРàâêàà,D"M-®ýN£ ž¹Ý{»zé¨çtÞÓó¬5üúx<ïûýޱm[œsÀꀧ„8½´Z­¯ÿòõõ5ê€c!IÆÀý»Îb±¸½½ÇãÆcŒŠs1CæïQ§R©Ôjµb±8ŸÏuuö/Èü=êt:)—Ëáp˜ç<˯¯¯"r~~FÛí¶¢Ó‰D"©Tª×ë‘yÍ|l6›kðòò’N§÷r8>>~{{Ç–eE£ÑjµªâÚbÛöÃÃC¡PˆÅbwwwd ƒÁ@DNOOÆOü95w¤T*‰Èx<‘d2iëa8ŠH"‘ðg¼f³ùÅÌkÓ)+%<íuÆd2Éf³'''›r>¼­ˆH(Êd2FƒÌÿâ…:‰DâññQרñ­°Ç™©uu>ÍocÌááa:îv»Zvu™·ù37 HcŒæýh4ÊçóGGG³ÙLËÉzÙã7ç+%>^q(xsþ7“É(ÚX=ȼ÷ïQøî†µëL=8XB÷÷÷jö…™«óŸ‡ž_òØâSµ\.‡ÃáÙÙÙÕÕÕÍÍÏTcæíF¤‚]Ç¶í§§§\.ǧө–¥.sÐvUÐp8lYV½^×rÄê2pסÕõï>'¨¨³·ƒ&ÚŨ*Úä] ‰vé†ðEýsoX»Îcšh÷Ôñs›¼ 4Ñn ¬MÞñáOíÒ®äEÍ®³ýÇ—Ì.îd€:€:€:€:¨{ºœµM7øAm2쑟õæØuuuuPPP m28€6¶6ØuuuuPPPÁÆÿÂ÷üüœÍf9 ø ßï_^^öû}±,‹ÊX€:€:€:¨¨¨:y” tøØ¢ÔIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/fs_new_file.png0000644000175000017500000003132711273045225025110 0ustar julianjulian‰PNG  IHDRÆúuA¯Ü pHYs  šœ IDATxœíw|uúøŸi;³}³é½' ôŽ‚ˆâY@OÏr¶SA½ß}½;Ï~gE°áI±+Ò¥Cè- ´Þ{Û¾S>¿?ÖÂ&ÙÌî†8ï×¾òšùÌÌçyfæÉ§>Ÿg°76僌ŒtGò›ü­ƒLŸ‚„ü­ƒLŸ‚Ä0« Ó· ;L¥Ì娱@©œ:ÌÇ:É\×WRXÅñâý«++*‚ˆŒŠŽÈ|T0¦øA5™ë ][ ™ÎmŸ~óÍEEE,ËÞzë­?l?Œ“ý£ÌuHûŠCðΘ˜˜è¨¨K—.) %‰ì~QMæú„ÄÛ>'p"<ˆŽ5š†Æ›ØÁL•hS†‰EYÃÕÙ0„Wgä°4›kKí¦F`´FMH ­6øâdzØïk»ŸL_z2懢px'ªÙ©ûWñ£(1Nc7Ô;QØB¦ý¡].­5EŒ£þ‰»3GŒ€£¹Eï»ÛNéBã}w+2½ÿmû¼Ðÿý¦Ü»G£ •0¬¨šZs’­OÔä–?SSÎ",8iNk\—8,-Œ£nÕ?ÿ¬S3bJæÈ~#Òâæ¿´‚µiµÞ—÷#ãwHü·6…ÛMŸÖžªfî+ ì£}¶‚*ÛPæsñ)SÈ!.!6eˆ“QC›êÒRWúüœÉ:5søtÁ[«·Àsó¦MO|âîɯsH©M÷õ=Éø•¶Ís¤©;Ùrq_P qÄØ‰ûòNÕÕ7X0C|¤¶¶¢„œð¬J¢p^•…ÝÜ$Öwo­Þ†§ŠkßzlôÀx»y³¯nD¦·@â8.n›ÏŸ;üSnîƒÁPP\4vÔÈ3÷VUVµZ,!a‘Ñ WÎl‡«ã¸Xæ WÎÄ1 ¿ÆU2}À¢Ù²?æJÑ“*/+ûìëu¥­˜VIP SYYUWSeÉ?$žyõO©3Ë-€gçMEuy¨.ïÙySàXn‘Rg¼ÖUò¯¯þHÇ ¨âhÖÝšbägÄ9˳<¯ûèšK戴Êʪ‚‚:ðÀàôZ¥>4nùYÃÓbÇ Løþ¿ˆ‰­Ûò³ô¡©D»ö¿L_‡Ä0 šA­ÅEº´’ŒäÃ#x{äí;ÞÐoüÐÄþF566*vf¥ÖÐb }èåUÝ™1j@<;[´ìû½œ*T¯•‡¦~w`þôÈyÃæ9‰ƒx+¦æZ[ÏåÆqqqMMMÛ·o'IrØmÒ&»ÉÈnin©.v uêÃây¨ów ‰‰ j OÜðVSÖKJR8Wnþ*¯µÕQLEQjµ:rÀx]ê ¸¶+ŒR ÔøPs™^ ‰c˜ÀsœÃVËÑô)TþwÙÖ– áTÑ$„iÙèÓðØÓUu»ëU#* AÑ8ÞÁ„ŒŒŒIà˜Àrg§šÎ8ªs  Æul®9Iö˜À*„7«(ì$–¢ iŒ$ ‚ò·Ú2½láªs Ïñ¬“sÚY‡µ[yÖ€a8A’ †¢U$Í$N&5É\’ H h%€<'ÓSHyÜHFZHyÂDFZÈ‚ªfë Ó§Àê«Ký­ƒLŸB®õd$æê222=‚”ׯËH‹\JÉH )[”Œ´xXJGÄ×UI®M¯’(ã8¸Ö/8"¾íOLAWlÐÍ…Ýúµ“âÑîmÎo·Ñ­ßCYtuâŸ]¸rÍמeèÁoÇ®=Sn‰ŒM9.ãëoðÐNßB‡OÕƒgÒI|©ÚŠÂ_wª­(üõ|éö¿‘â&g„.ŸÜŽ9^VZåJ)++?zôćïýwþ½s|mëø‰“O=³äƒwÞ?~leeÕÛï.s×½-´S®õT“Þ5º7.™Ð.…çù¿öfÿô1‰i,xÂl¶t+C78Î'ž^›4`ÀQ.ÿ¤®¿W«äžûçßóÉŠ/Ú¦|üÙÿîŸMÓ®¬:¼©Ñã'å@UuuhTbuM \Ê/=~R·øàÃþþââI7*(*.6æýwÞÓÇ_Ÿ{!±_zb¿ôg¿èp8\÷ûö{K“û8tôÖí;ßû`yê€a‡ŽÞ·ÿ ë„¥Ë>N<26iÀ“]ìt:Ýg¸k÷Þ2§EƦ }Ú¯¾ue=U׆õV®þrØè"cS2§Þš{öŽ\ëpÍׯ»ï/;u:wçÖMgsŽ3 ó¯W^w“a¥ˆ¿×Þ|»¡¡áÄá}{¶oÙàp;Ñ5å…PS^XS^Ø-qÌŸ·v݆–V“¸ÛÜÒºv݆æÏëô¦&OÊ8xèB°uÛ.…B±}Çn„àÀÁ#S2'uK£Ç³'Oêà’WßøouuÍ‘ý{ïÛ]^^ùÚ›o»î·¾®!çÄ¡ž{æ/ Ÿª­«?yìÀ Ï=ó÷üÛuÂá#Dzvn=qx_]]ýëo½ã>Ã…O>³ø™§ ór7üøí‰“¿¸ª®gâF½‡ŽnZ÷}Þ¹œ[nžú×ç^ÄjÊ ®õÿ•Øv·¦¼ 4*Q<ßµ1|Ìß~ùERbÔÕÕOš:#÷—£ý£º“" €!#ÆýôÃ×ñq±PPX4îÆ)íD»6ºË’ÿ/&:zႇ`é²OÊÊËßxõ_ÞÔ®=YßÿøÓGKß½gÞƒýû§^ÌË_óŧ,xbÎÝwdfÜØué±)e…ç ¢½gìàáã~úá«„ø8ñ~ÿx×½9'‰Z]ÌÍ6 N§3:¡¿k;>e`Eqžx‘»ÅUXTüÇ»îýåøA75aÑ‚G¦ß<5"ü×`t×zª®ÝN՛͖ÔpÇQð\túΪ««o̼B‚ \kRjëêc®´xbcb<ÈöZüå‘?ß1gÞ£?ˆ}¾rõß®iwB‡75~ìèÿß?,köÉœå¾;jÜ$›Ív2çÔï¾Õ-é:¶¹¹%0ÐØ.½®¾>6&ZÜŽ‰©«¯w_˜B¡h»Íq¼ë×ƒŠ‰Ž®­«sŸáÿ>]ößw—¾õö{:­ößÿüûԛܭRéºz T*9Ž'‘ÛÆ×ÕG])âFHHÈæõ?„‡…º¹¤S:¼$$8¨¤´Lüç+)-½Z´g² .6&}à€u6"ƒ Œ‹éÊMÑ4÷ù«† ¤ÓjøÙç+““ E·Ô9bØ®=Ywþñ¶véÁA®û-.) ìð6;Üv]XZV$¦_+ÃÁéƒV}þ1Bh÷ž¬§Ÿ}áôÉÌv¹µ»÷¹]}~O§ï¿ïžg—ü­¸¤”ãøó.>úØ“=ÌÐÅìYxé_¯444Ö×7üýÿ¾ú½NWPPxuzWXðèC}²â£O>[ðèCW½ÖMeNšøþÒ&N¼&NœðþÒ&OšØ]Ñ?ö—W^{3kÿ–e‹KJŸzæy1}ÖÌÿÇ¿ëëêëþþÒ˷ͼµëyŠª¡¡ñÿþùÊìÛfºÏð/ ŸÊ»”ÏqBˆã¹vY]ë©v]=¼{-ghß>ü±GF~ÇÝóâ“,Xôô-7ßÔ½Æ9BÔö'¦/yö)ƒN?|ÌSn?fôÕ¢<úç©3nsß­ßÈáCišffäð¡Wßݵn*3ãÆV“iâ„q€ÐÄ ã[M¦ÌŒ=ýß7^ù׿_OHMŸ{ßãÆŒÓ_xî¯ÁAcnÈsCfhhÈóÏ=ÝÁ[èp`ôˆ'O1vb€Á°ä™'ÝgxóÔÉ<¼ >eà˯¾ùá{ÿíä©^Iï’zVUz©ëÿ 2½ð˜ä^õåiã¾A/z‰ò´qŸ 7½D¬ªä¢¿uéSÈ.x2#·¥d$†,/éE™>ÖPSæodúò¢+‰édÚøjŒ¡ÑÞÐãjåâóúD.¥d$F6)‰évÅçÂK“Ï*V/!—R2ãΤŒ!Qƨ;×ûL™>@'¥Tcm¹oôé3xÞ–ú= úž#ô«+¬ßz×98Žá8Þ]7|_Êò*^4)žç[Z[;<¤V«i…¢‡ù›L溺ºÚºz³Åh4 2¸‡¶!Äq¼ƒC‡Ï”LJi­6{u]ó„‘Ig9 @R„ÍÆÚ¬RI“VרX[oª¬mÉÝO£$H’èú›ö¥,‚ Øl6›Í.µÎÁ0Œ¤HV{õ’žká-“bY®¼¢p…Ñh ÉöAkkk‚ƒŒ Ãx–ymmݹ‹‰‰IQ±IéÃF+Š/W!¡¨¸¤¤¤ÌÉrÑ‘áô€êêšS¹,Vëí3§w] Bˆç¹K%Í­§OŸ¹pît«É:}Ê2½Nà <⤈WþôúÍ_²0=­ß—ë÷hµÚ¢Â¢–––»nãt×_ƒ/e¹$â8~èȱ±ã'666^ë4’$óóŠÇŽ"BúzŤD{B„:,,$,4„ ÚÿÕVW²,ç©EAMmíìÛÿˆaÏóÇÍ(·ïØmw:õ:Cl|ܸ 78ìŽ;ò‹+êMœÊ=Öš¿§[RA`YŽ"Z­ 0è ‚P$ Â0ðlcc-€ãDr|Ôý¿ki"Üéd)JÑõ·ìKYmq8œAAA1n×´ä_bYüfR,ËUTV&÷têôyE ‚€ãÄÕ¥²›Â¶SœhiiÑjµN§!ÔÜÜm5[+«jyž§H Ç AœÀˆË—tã5ûRÖ‰m{îÁaÐÕ÷%¥IqWU]‘tîù<ǃ†¡(é?8Ã0´ÓÉŠû™sùµœR¢4RBâÄB˜[[RÂ:Ͷc`±vϱñ›Â?c¨651A’æ©W£e‰µŽc ã®øÁ0Œ p•J釿9B¨º¦–0’RhUŒF£Öë´€ ¿¨<",H¥ô´ÝÔ M›M& ÃAhnjªh´« ¡Àñˆã _«TmÀq,:,(,ذëØE@¼€òE[ Úv nŸ6šM«Êš‘14.*z6pЇÃ.‚Õb¶±‚BE\±'Ä_1&ç„*JnŸ4Ì3WÊ;„€‡®¢!ÇaÝÿxX‡²ªjád±ÙjZVý°å·LÒjT=‘uY"`8†u:z‰0 Êk«ë›iа\ÖÖW&ÕìJ¡êp² ©1‰8NžçÍV3'à NÏ Hüü©ÀóÇ OR ÞTÕ¥\×B¼Àu±|ÅzðÝçv²>ûrƒN£·##ÃS’£‹JJ?ûjýìéã¢#z& žì˲â°3vYpmƒ8¬Ùb%pÒ`0t¥ƒé]OFALOÒiT’çÌsDZV‹a¤€xŽçžã8ŽgYg1œ¬¯­¶Ô]º}Æ$‹ÅÂ0Lw§À\ „xž'ºø„<­ß¯–5rÄж'ÄÇÆ¨Uª/×nûãŒÌÔøeá8ˆ¯ÈÏmj¬‰ˆŒR«”‚€pÃ0q˜ ]é†,ë¬)­3†Dã]ê xפÔ*fò¸toäŒ`·Û­6»$ë´;vÎÉ:N  µ¥©¾âBL°jôø¡/Ô74T*•‡³Ä ¶[sG<_À}•¬ŠÊ*qà׫ժºúúÊÊê £§$Ä\Ž2Þ}YBp"61ù¦ÉF,vý\u ‚ߌ”Û΃GsªÌÇa8&ð„ϼþü¥ÄŠœ"I“©Åd¶Ú*'ÛÄs,hmªo¨¼¨œ.ÕVÖŒ)ã]‡~Þu¸¦¡ñ‘ûnÓ^iEx&‹a˜ô)k7¬2™¬C† NºwZ§—$Añ¦ƒ[V*Uê䄘!˜ît:iš¾æùÝRÈ Üõ®óÌÃ0„PkK«’QîܱTaMæ&{SyD6sÜ`N§V©ô½A¯W©UIö¼[àäŽÀβ]9™Ë:ÖÃq)7²Ò$…‡µHöL–BA%ÄÇÿùþ¹…EÅŒRÓÐ&0°”ŒbrÆØi´Z1 À}7S2“RP˲9ÙGºr2Ïsž†©Tªðð0†aH’ÈÎÎa”(!m˜N§U©T½^oЫÕjEõܘ0 p `TJ†.*­pÚœlÛ¨’£²Ê¸GŽ/%#1rÅ'#1Þ5)³ÅZ\R^\ZQVQ%Fÿècäœ>»mgÖ†-;›š`Ù'+}#WÔØÔ¼aËÎm;³rNŸõÜ®àÅ 'Ë–•W* ƒÞPS[à B\t¤÷Ä}ûãÆõ?ï ç9ö½×ÿì=Y.V»±¶¡™„ @ã¸ÑÃ6mÏzì‘û} Wt!¯ð›uÛ  4 Ià¹]Á‹&eµÚ†>yêl¿Ô~åU©É‰,ë¡›T§²:xcp$Žã7ŽÔó{]$6.–Pê9–Õëõ Ötât+¢ ½^ERTT¨¡'¹ýã­OƒBBíŽ.¹¶CÖnúÛSºR¼XñÑ4Ͳœ^§C)UJ ǽ7UÙÚjÊÍ+  š6yÂý?øt—µƒQªô†@­Þ€‹ ö¥o䊂p‚Ðê zC £ìÑ$FcPi*¥Š"ˆnÿHÿíbe/–RJ†¦TdDAPá!Á:²]À$ )(.'HzÌдä„ÈÏ¿ÞLù**N”Bômcëø¨»# Â0\¡`(…'zôq ·ZÍ‹æu#ꤻÜ$Éåj**«vïÙߨb2é z¥J{úÌùì“9ÞuñRáç_o ijú¤Ù§ò`>«€.‡þòßg2ŵú=ÿN'ë´»¶KÊ*z’•WLjϾƒUµMƒ†OLJ1›Mµ55Zn@úµ>ðçí»ëêºäBßuŽžÌ%Hêþ;¦a†)hFAÓ= Üè18†@«Ù|ðè oäðè‰V³Ù%Hrò ‹/\*<ŸW¼;ë°³k+8®FzͶlÝLDtTT\\\\\\ll¬V£Ñét)©i‡Žž¬®®•Pb}csBlÄ©s—ÖnΪ«o¡iÆjg¿üa³„"ºˆØ¢z|ÉkÿyÅÑÉGOäüçý/yÍ%Hr’âò JžÈ‰‰ô8"—Äm©½ûª´É)Éa¡¡Ç* 7™LN§sÏþÃwÜ6CªÞß_Ì7ê[¾^¿— I ¡i™ãÝ_å ÄþGdd8†áÎ.¯&í"NŽ×ED„‚×|2ó ‹“â¢(’(.-‰ ÷̪¤4©æ––â’ª‘#‡ëu:âN¯Z­6!>.¿ 0kßÁ)“'J(Ë ÖQ ÚnµnÝu`þÝ3¥Í¿‹üß3çžÏ1Dâ¢Æ W2ÌÀþIÒfÛ–¤„8P«•±=A”Ò¤ŽÏ0GŒq­Õ/¦ÂÂò“'•))IɉY{ve 7HØE2›­Ç 'HÒ¨¥ìÑÄg MKnO"®l;]ÙÖzbO ­Iå;^©l?6ƒªØ¾ýÂ_X bÀÂ…qééLuÍŽmÛËÊ+bc$óãÛ¸u׎}'Tj ø——üÅhìÑèŸgˆk¡Lf˹ —F"yþGOä¤õKÖjÔD¥ö’v»Ýd6sWSSãêm W±{÷†ñã·ÎŸO zÓŠ‰cÇÚíöòò2Aee¥TÒyž·:XcP¨F«¿kÖT»£ƒø¸>@x{âù×Þx÷Ó£ÙR7ϳsÞx÷Ó'žÍ%H*êk›%ë†KfRN'‹ãI’V‹Åõ?têþë.!6öÖ'&.^¬¤i IR£Ñ`N$·´šÏ^,Qk4·LgÐk?øìK©rî8N@xD˜Î`tz¿å8Y^g0†G„¹IÅ ßûÌ#wK•›„«I…‚2ñ ®Äˆ›oÖ•0vlÛÿ)ǵZ€øƒduÓésy­Ì7Ô ]õÝÏjÚG#rÝ5Ï z„¹IVJ) £A[WWg±X,1¦#„¦¦&þÖžÀl6Ÿ¿pÿázΙs¿^»]¯SO3èô¹B’$ÕWâú4Ïš/7Ï{ˆd&EDZÿ~E…%¥¥îCh$ÙÚÚdÔ$}èØ)šQÞ=3Ób³ O3J‚¤[MfI2޴Ïy€”£çýRS,¦æ††FGG­c„Õju:%%¥ùyÆ#ÕI’C&Ÿ>—¿3ëxc‹EAÓ–ýyçI2ï‚çÏ{© rA­VO™ÿ¾©¹¥ëö“**)ÿç›>{AܵXl¯ü÷ãm»úW«ë…´~IýS×nÙéR¢õZmltDjJ"$&Äâc»á‚{Ý›˲ßoÊ JÐOLQ«•cF É:~®¤´Gq’:ä_ýTPìë)¬úúÆòŠ*ï埀>›H!¡¬¼ê—ÓçOŸÍã¹î-·”Þ¤6lÝûÞŠ—­ÚøöGí×g¾ýÑ—ËVm|oŶî•JÜî'L6öÖ)ãÚ&fLaÐh7ììÒ‡–»E«Åñåú}¶íg}å »œØ}Ð+«DX§óök7ïfyëqä*éMÊî(•Q©åp¦Ý!£•úPJe´;¥YàaµÚOäF…ÆÅüÆÑ ˆá鉭öœÜ‹’r‘9~˜’¦ÎÕ}¸j£oŠ+“ÅR\cªlp46u£AÓ-xž 0 KOݵïA :4½ú€”î.•Þ¤žw:<Ï8Ù~#Fð<çt:¤Z†vúü%ˆä¸–˜ì—€Dn^‰$‚\ JKYô§™IÑV÷íæ#ë·îóvqµïpŽÞd Ùwä”—D8ÓoºñÔ™‹—ƒŽ¶)«ºëQ/½IÅFG Ë:lÿûf{Åz¶í9$8­A*>ʨˆ’&(yQY ŽáñÑáW T+銚fIµEÉ0w̘tÇ´1J?[X»tåúü¢RÉ¥ˆØíŽó…ÕŒJ­RkòËÍ›ä"ö8RRVÙØØLÄm·L¤iE«ÙRU[w*÷œ8y†$°_NŸëz†ÒKy9ŽÉbYþÅOŸ­^÷Ð}³¶í>x© ô™GçJ÷Üjc½®ã`¯*%Õ`gN§7 §$ÆÄÇFì9|*¿¼e펓q!ço›‘éq0Âk‘uø¤Z©dvF©Vk ŽåÜÝ÷Ì–<Ï«IMNHKIn—8 _RHP`8Bˆa$Á0ìöé7ï<˜W^Å0*ÞÞrÿí™:'-Q¯Dn‘¹~Ù¾÷È/¹—Ü?[§õ°g#»àÉü†©c&MÑ“ÃuïÜ"#9=l€Ê&%#1²IÉHŒlR2#Ç—’‘9ŒÄÈŸŒÄÈ&%#1²IÉHŒlR2#›”ŒÄÈ&%#1íÇ¥vnúÖ/zÈô:ê¼ëÁg|¯‡LŸA®ød$F6)‰‘MJFbd“’‘Ù¤d$F6)‰‘MJFbd“’‘Ù¤d$F6)‰‘MJFbd“’‘Ù¤d$F6)‰‘MJFbd“’‘Ù¤d$F6)‰‘MJFbzI½ñÆþVA¦Gô:“zþùçý­‚Lèu&%s½#›”ŒÄÈ&%#1²IÉHŒlR2#›”ŒÄÈ&%#1²IÉHŒlR2s›Ôš5k0 £(Êb¹üm㸸8 ôZí /¼ÇÍ›7O©TþóŸÿô«¦¿/®c“ºï¾ûŠŠŠÒÓÓÕjµ˜R\\Œ:vìØ›o¾É²ìÒ¥K1 ËÉÉy÷Ýwý«êï ÿ›Ô¾}ûî¸ãŽÄÄDƒÁðÙgŸµ;Šý–vG÷îÝ;nܸ¶)‡ãwÞ™2e EQkÖ¬yê©§âââìv»wïA¦ þüŸ ?þø²eË\)Ï=÷\»sܲvïÞ½S§þú1çÆÆÆY³fEFFnذΞ=;`À€³gÏ8PRÅeÜáÏRjùòåmí † râĉ¶)]/¥ Ç7a„¯¿þš¦i iº¼¼üƒ>¸÷Þ{½y2¿ÁŸ&uîܹ¶»ƒþæ›o†Þ6ý–¶‡4MIIÉš5kÄÝ)S¦\¼xñõ×_Çq™>†lR2#›”ŒÄxÁ¤Ö¬ Š‚+ó$]„çùùóçÿáà8Nz­d|…Lê¾û ¨ÒÓáÊvìØ««r›Í–——'öKúÀå½¢y>`À€K—.¹v?ùäqcèС>Öäûï¿¿ûî»Y–%BL‘Ф¦NÚaÓ0((¨/ëõ}yo¨ø–-[àt:B………b¥èp8z¢Lwùúë¯EKzùå—µZ-ÑÜÜ,Uþ¾*Š¢Ö¯_ß—.ï&%QÛ¶mCÝ}÷Ýb‹-ê‰&ÝeÍš5A±bÅŠ£GŠ:Œ;VBW¿’¤¤¤¬¬¬>vy¯0)„PZZÚÃ?ìF§iZ\çéV®\‰ã8Ã0ëÖ­C½ù曢/½ô’„R ##ƒa˜ÈÈÈÙ³gõÕWÝ*†¯—Ë%^ÎàZµlÙ²Ç{¬Ýš*7lÙ²eïÞ½A´´´@ffæwÜá±ÝâôéÓü1Ã0 ,HJJ€eË–åææÀ³Ï>+a¡[ä:¾¼—”Rm›çQQQMMM=Q£[Ì™3Çý#*--•DP·Èõ{y¯èñÀ–-[Ä ÃV¬Xa0|&úàÁƒnŽÆÅÅEGGûL™>@¯0©“'Oº–®/X°@Â~{WhW½öÚkbú[o½…***ò¥2}ÿ›”Ùlž;w®ÓéwGŽé_}öîÝ+n <دŠ\¯øß¤-Z$®7W«ÕãÆ[»v­•á8ÎU¦§§ûQ“ë?OÈlܸqåÊ•âöòåËÕjõ=÷Üc2™Ä‘FßC’¤Édò‹è>ƒ?K)³Ùüøã‹ÛóæÍ›7oÞ´iÓpw5Õe®G¼UJ‰žO.ÿ§Ù¹s§è|§ÑhÒÓÓÅ““““ßxãÆÆF/)æ_Ü?>r¹¿Æ¥Gxx¸xòêÕ«]鯾úªF£Ù»wommmO4é…¸ }ær¿U|›6mªªª€ &Üwß}°aÆ´´´_|Ñl6gdd„††fddˆî>fýúõ4M‹AÒ\¾Ë2]Äo&µ}ûvqãÙgŸ€wÞygÖ¬YçÏŸw€ÊÊÊš4iÒ«¯¾êKÅÖ®]{çwº5|''‡$/·êÔjupp0A®X±bEO´ê:ß}÷(×å/µvíZ©2wÿ@úÌå~+¥êëë`îܹ8ޝX±‚ã8‚ ^ýõººº?üð .<õÔSâ«}æ™gÄéd¯òÍ7ßÌ;—㸗_~Yô2%"33ÓÛrû~3©ÖÖVÈÈÈ€ãÇÀ’%K–,Y¢T*GŽÉq\ccã;ï¼óÁ@ssó?üàU}¾üòK±I·bÅŠ©S§Š£S£FÒëõ^•Û÷ð›I‰s±¢ëÏóp×]w‰‡âââBCCsrr`Á‚7ß|3lÛ¶Í{ʬZµjþüùEýøã>ø «O 7¤<ÀoãRJ¥~úé'­V+z¯ZµJtWƒÁ°zõj1ÐTLL dgg÷pXåZ´õ—ª¬¬\¾|ùªU«ÄC‹EZ¡×ÇÀR/÷Wó\\³+¾ûî»ÏutÑ¢EãÇ·Å7ÜpCOsƒì/%íå~«øî¼óÎÀÀÀo¿ýFŒñüóÏ‹ßçp8––&®Z³Ù Æ ó’&²¿”´øÍ¤ ÃK/½ôþûï9r^}õÕ¥K—®X±âã?€¨¨¨ÊÊJ±âÛ¼y3†a÷ß¿—4‘ý¥$Ǝ‚ Ì™3G¯×»Z477‹K¯Ž;¥¥¥—.]2 sçÎí‰VÝbÚ´iâ-lß¾]Úœ;} }ãrz"`¶råÊÙ³ggdd<ðÀ¹¹¹z½ž¢( €Õ«Wgff&$$|úé§¾QIö—ê9~ö—R(ÿûßÿfÏžý·¿ýmРAQQQ£Fr­“y饗|ðÁ·ß~[ÝÍH²#ûKõÿ{uÀÌ™3O:uôèѧŸ~:((H­V§¤¤Àš5k>þøcŸÙ“Œ$øÓ_êj”Jå!C\»ûöíëcŽS×ÇÀRÏ.÷ÖÒP„†a¨ QyžGµ$“ɤÓéöîÝ;qâD•émtñ\ï—û³â³Z­úÓŸÔju@@ÀþóŸv‡@®ò®GüiRÏ?ÿüÊ•+‡Ùl^¼x±8p "~T]£ÑøO;éY²dÉïâr?ŽKµ 7ðæ›oºmذ ³ÙÜedü‚?K©€€€¶»¢SžÈ¶mÛ,W|×#þ4©Y³f‰A,\¸pÆŒânEEÅÊ•+zè!ÿ©&ã9þ4©GyD­Vk4šììì¥K—Š½ÅÆÆÆ»îº+55õá‡ö£n2ãÏÑóÐÐÐÇÏœ9óÆoœ;wnzzzyyùÊ•+u:Ý–-[Ú +È\/øùµ 4èܹs~øá¶mÛvìØ´hÑ¢Ç{LvϽ~ñÿP§L£WÌñÉô%þ?ÎÀjÁ²v}ÎIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/fs_song_table.png0000644000175000017500000000574011273045225025435 0ustar julianjulian‰PNG  IHDR=@ñ²Æ7sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ :7Õã| `IDATxÚíÝ{XTuÇñÏL“à?^¸¡ Š)&ºš›­™‰¦‹†­ÙRj–fb©¹®<¶´šÛcY>¶¢Š»^(KyVìÑ\ÍËêBm®µij^H$ÅK ²>©à8ÃÙ?\FGÀ/03¼_ÿÀÌïœãwΜïÏ/¿ßï̘֤%ðrIê?x˜[óåöOõhÿ!¼+€—#×r½>˜yK@C@Ñ(z(z(z< èñ Õ€OVû|¥Í[¶©C§nêØùAmÙú: öfâàùîTN{bß@ÔqÑ#IÍš5ÕºOÿ^ãŽS¦¾®•+–éÃåK”ðÚëu°«¸jUô¼=óOš=g®¬—/WÛnTTÈl6Ël6©¢¢î>ßÐU\y'Njä /)¬m¤BB#ôìˆT\\ìôWÔ¼÷¨mûNŽQªä”Ejס³:v~PŸñ/Ƕv»]³Þ£tUËÖ÷+þå‰:þXQmû{sÞÑsÏÑ /ŽSò¼÷ê,`Wq=÷ü‹ÿÊXåÞ§ïíS»ˆÍxóm§mŠŠ‹upß7zcZ¢ÆŸ¤ŸŠŠõÝÞ¯õÆ´D§mßOY¤}û¿SæöÍ:rh¯|ûê­Y³¹j€:¶sç.mÞ¸NÇr)ö‰J˜zutyâ¤)úcâT8vD7¬ÕîÝßJ’J O9~Vþ^iÏž½ÊܾYÅgNÞt w²ß¨éõÜ(f·Ï´&-ɸþ™ýƒBURxJEEÅ0ðI}þÏ­jÚ´‰ãù»ÅÕ'7ÞJ\eeeêÚ½§ŽÞç8Fî‘jÞ¬™.Y­ pzÖ¦ƒ <.IêÚ½§Ö®Y¥ví"®tzEÅêÝw€¾?¸—+¨ƒ\¿>g+s:¼ÝŽ<íÒíaMž4AO ŠQHÈ}5çÚçíß­àà —ÛUÃíö®^ÏÝîgwÊu·鑤ÀÀõœæ'/p«“x£¸þóÍnÅþæi…¶é ÿ Pµ o¯’³g¶©ìl|5ªòØf³9¶+8sF<ö¸Z„„+ð¾ÖŠŒê¦ââ®b ŽUæ¨$5nÜØ)O?úp©2³¾PŸ~1êÞ£—¶ls}cŵOmc¸ýÆ^€z*z$iÂ+ãôÙ–m:uú´[^S\/› ø±cthÿnŸ9©¼ÜlÆ­­9 jÑBû÷|¥ŸòóTTpB%…§j5àîëÖõJ_ùr²÷kÎìYNS_7Ëb±¨¬¬Ìñølié-ÇC¿xpÑãëë«Ä×ôλï¹Uà5ÅU^V._ùøúèÄÉSJ˜šxËÿƘŸWÂk¯ëxÞ Ùl6Îþ^ñ/OäªÜȸW^Õ‘œ£ºl³É0 ÙmvG[Ó¦M”›ûƒËctêÔQ‹/QYY™ Îhê¦Õ[¿q³1¸ E$Å=ý”ŽÏs»à«‹kAr’f¼ù–BÃÛkÈÐgõp‡nùø¿ÿÝ«úU‡4ô·ÃÕ*ü~½<~’bcqÕndР3N¡áíõÖ¬Ùúëâ«ÓÞ“&ŽW¿_Ǻ¼*yÞŸõÙæ­ o÷€ ªÞöª·~ãfcP{Õ.d®/î¶à ¹À{r¯¡ E è èð éÊB#wpýb'w‰ ¹ÀósÝ­îÞ¸[,’t Û}>«sÇÇïîrÀíåºßþü©Ï³²j_ôÔ…Ú*5é]ë}XÈ ŠÐ 0½êEt-§¨²nsjŒ‘žÛ|€g°¸ú?ë-8º›ÅH}ÅèŽç ð¶?>7n¬¨¨(MžùD™™™Ú´i“ Ãp´ûûû+??¿ÆýSRR”••¥Õ«Ws…žï®øùù©  Àñ8??ß1ꀢÇíY­Vùøø¨Q£F*((мyóœÚ¨ ¨¨¨HçϟעE‹œÚ•’’¢M›6)==«ðà|w¥oß¾Z¸p¡JKKUZZª… ª_¿~œX ¡=ÑÑÑŽùôk÷‰‰‰JMMULLŒåÔ>zôhµnÝZcÇŽÕˆ#TåJIIѶmÛœæÿ½é<ÞÀU¾»/???9R#GŽT@@€ÆŽˉ¼iMZ’ñK· èÚ¯ ?ýïà¥Èu áåº_P¨Ó·¬ßÎ×Pô‰Ž®õ7¶ó5 Aà G@½¨ëOWg¤4= A`z Ô™>õx§³Er^YíNÜ5.ä:€Ú;[xêÎö·Rôl߸†wx5SIá)ƒÓ¼ ™E€·°HÒñŽjû–OU^^ÎÞYôüxú¤v~±]žªÈÎÝtï½>7Üá²õJa4ïišöv2gxFÑóõÎ,Å>5BÁ!-eØí²Ú/ÞÔŽf“I†a8Š ·.zJŠÎè¾V­e·Ykµ£Él’aT¨¢ÂÎYî_ô’î¹Ç,›µjñb†ŽÜ£€àVò vj3›Í’aÈ èžPôTNSUTTT-x«‹~V§Vmt©ì‚sÑSÃ~îYô8Fl*œ žì½úùÜÕ«ÿ]ºxA†á\ܘÍf¦·€ç=¦ÿØ\[Ôü”R…?žPDÇ®ºTvA¶*;:öc¤xBÑc6›ªŒôµÔ…‹?ëÌé<µjyeýÎuÌf¦·€G=f2ªL_……·— éÐþ¯Ù¥»,fËuEOÕi1÷-zL&ɸ²Žçz¡á÷ët^®l—íº§‘EÒÕmÌ&Óÿ‹%Öô(z,‹lv[ ’[¶n«F>e½Tæô¼Él–Qa¨ÂÎHð€¢Ç? H§ç¨¹@•_w»ºTyË:wo)zºtï©oþ½CÁ-ÃÙ±‹ÌËMíxu!3Ep¦’ÂSFÁéúêËm²Ûí×.Ûðÿ—9ílœ­KIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/fs_track_properties.png0000644000175000017500000005742611273045225026710 0ustar julianjulian‰PNG  IHDRÖkã,?¦ IDATxœìwXW×ÀïÌl¶°,½7 Ò»I4VЍ±¦©‰%Š%–4 j4Æ^b’Wó%j¢1Æš¨‰‰ÆÞ&6PTêÚ¶™ïÑuÝ]f Þß3ÏÌ[Î.wÏž=çÎ=Ð9.<ƒÀ5@ m ‚bÚó›lБc?î;ØÍYȤ¡4 E‹É@ í‚j ®Pã%åb¦ƒcæžt¤s\²W×!‹¥eƒ@ W¹´¬øÚ1€Å‚°´<ò Áâ éˆÀ0ìe•!Ò–Š—ÖÌÚôÚG„ä>!ì ¶s¥R0yU ^~C_-:»óÉãdžyxz¹÷›Š;›A8ißVpÓŽ`¢ææ_C.,,T©Tñññ¿ýuq 2‡tÒ®y¹#!p Qz{{{yzæçç3 6h0ƒh”Þ½p ޲´ öƒFYßP#aÙ 0&G¿ÐÁc°›hK4½C17'¦cM¤_*œU¢$øÌš !-gg–º¢!#=E¬¶üaCÀrp´wöfÚñMy}ÛáÉ í9ŠÑXö|®³'ŠZ,ÞKÊãÞ!Z{ynË4@ïämÚBÄòü e `/òâ{4åwU+äòG9oDÎÈ¡‹Ù< ¾ª\U~ïõ®N]ϱó £é¨f=^nû3îÍ8cÿÊQ QŠÀ‘ôAÜ¥E÷¾ö üÊ+O ªhôZU—²•ŸŽï×­‹àòÂ{ÿ­®uâºø5çõCl­‚#©ªk8—S´åÐ5Žk E´0T¸Ó¨—•qPåé Cgn¬—•±ù>9¡¬“õ‹ šÿþàÑoF§®ÞÓ€..غ`¼¿‡àl¡ì%*m2W ðÛwôƘn„§ Ha)}×uUI¸Vv£øê¹¬²G*¾2íµMuU,EÅOK>àڱȒ~1»vö}oÑv•Ü‘iÇkÑÛ±9z'o£a褸®ï ŠbаÕ2ÝüÝÎЭãÙ1šD­¸¬NV©V)1:ÝŽïä tEЭŒ (ÇÁ‘ïê?×P#-¯“–kÔJ”F·ç‹]ɘ²Þº<¹“áÙ1Ú³ctïämäèMw¥”×È*«õ€L޽½£ ËŽÛæoÄ ‘ËÊpIÁæyãÈËÍóÆ¥®þ¥œF´0ÓžÿßõìQoFû{ˆ6}<6uõ/€Mó÷<®øïú]{¿®MèXmR£ 5ÿ»è]Êz¿‡N ÛÎÔß/©dí©-Ê®qîŠûúûG(Yv@Ç›QWñpÁØþ\;ÖÅœû«wž|üî a3Æô_¹çÛ!¬Åï ÄÖp ýùïì÷Eõó]úÓéGU/È€ÞÉÛØ¼·zúëýºˆoW)“:wsß…ûN^Å7_¨Ü Tÿ}-Ó ¡O •Oòc|†÷íã"°—TË÷ŸÉ;x1_èüðÖ5½!´hmaÝsïN]ëJ!¯ñ`Õ¥' ð"ȾWºïtÞ½šj6´Ú; Õ\\¸ùãq~"²ÄßC´ùãq©«÷4 ‡/2lÂdÛá.Á3¾Þ³iîXÑ7 Þx» WÌøzÓ%˜Fg41bÓŽ¾âzÕ3NBÇ®=^;s7»¢R\‡ðý<Ê? õžËá:sP¾ŒZ)éX½ó"ê@žü¾zz·.~ µ4÷Í€Ø40b8tîææß/Ö+T™µýhÆä„˜)‰± Žd–i+ïù'çû#W&'ÄŽí&©–ï½øÅФX¿éû»tgÍÞ³ãD|4¬›FƒŸ¸Qj8xQùzwîúðæ5mµjIic]U‹Ë¿]:Ɖg·ðÛãWo=îìïúî˜O¶ÿ Up»GVrÃŒá~¢ÂǤ&O¾L>sý!£*Àæ91ãë½[æóv–Šg|½—æÈæ95="i£Fï‰joݼxàÆ\>Ÿ¿¨°GlLî‘Ó%OJªëêœ]=¼X,ÐHCm|EQÒÄÆŸÕD¤±á 퉲û¹“âºÎç>à8ðëªÄdùwG®8ù„` Æ£»YÃz¿ØóOŽÐ;pÏ?Ùcû‡ ëÝù—ÓvòË?YŽÞAä­!Ý:ì8ž Èð¾¯~<~½A©þõßÜIC»Ž|­Ëogž·ÒQt㊶зK¬ž„µÒŠÆº"5‡ÉÐà8ß•u¿4ïÛn!T½Y«!ðZ¹"÷ÞãO·8¼60sÍÞåÓ‡×ÊÒ¨ª`(B¼èN@QC_®î}4ÃSUü¶ðîÞ`Þí[Ä£ââÿýRêá¿ÀÑY¬'ù÷u¼wÁ¾ËP£²¹ŽWn¾Óqî»×ìü 0÷Ý€+7 Ù\G¸[»‡´=«ë\¼½õp†“G°VWÕ682µRåÄçd5õÞ^ö¥5r€ˆo§V=ÿY%­®÷ö´/«‘„<ŽF¥8 ì{ÓVsq´×è´Ò¡‹á¬S+•uåèæýýÑ+Ó†u[9u0àqeõÖß/Þ–J9\A«ÞˆÕãèÕñ³ïÔ 9YRU+OÛpàèÕ©1Ý%¯*׈ ÖÏíí*,.“áí*\?{ô¬uûêÀá971" €ó;=¾ìÆ;jâü.åiT 4t+˯uïüäIÉýû÷™ÂsáaqF;å¹ø~³ÿ¿èÎ>Ý»øï[õÔ=W]WÿÍþÿx.ŒiO?ü1ÍŽ+zuÐÛ„„œ4:]\]ïÌ·ã;°5 õ6 BVG§3T*YSÀekrò–¸JN£Ó‚”KëÜ„‰ ~”ÔÔ“ÕºÝ˹¬7„ᠺЌƺ¾˜{äüw~d°ÇGúÍÓgÄ¢_üøŽmóA¬;ž£¯ èúI²A¯.½šh¢Q+5•ëgöuw*zR9kݯ€u³FûyˆÖ϶öWœÃ¥3]Œ’c"c8UÚ)3_R'POû`ø/ÜèØ+2¶gLL ›Íf°8F"Âvà«9.¦ÿt:㎼A)oPžÎ¸óaúOjŽ ÛßX+ˆ­£;±‚»û‡tuñ  Ñhz·ÈÊ\èøå;€±ýÃÊÞ×?päü-®ð¹É0®Dùƒ;ä­ãWîr"“Û¯§r%u·ç0íÙŒž¡~çŒ|RxÇp Ãjë•w'Ëzb4ÑUɃüåSz ó‰3ï>¨5¸¥ÞUˆE`°í/Ý(¸t£€Á¶oºfCµ¤od©g¯ßÇtf:Ï^¿¯èI¥¯»SßÈ e]UcmÁ3+؈·¢Ü»OA®{€Lƒ!uöÕŠs§wÖ:vq²w¼}ûöÅ‹½BûmHâèîßPç¸æ·Ë ?°yn¸ðÑŒW†&æyKäîýËé[‚ Œ Û/¼²ªîG¯þv¡Ð3 £¸´˜¬9¶ØØþa •ú‹·>uÛ# 3‚ '2ï(TgFö 9²ò}¥J[P¶ûD†ÐÙ]^#ÓBèêýÇ®Mýë’ñà™m®EèâÞXW œÊššâëB"· tëÁKî¾ÁM¼(H;ÃÙ·Ó¢ïœýBšþ¿s¸‚3Y™NgÜá¸u°ã;ê¶ö××¢‚ÎdÝãùF6ÑÒ9.¹çˆ©FïÙIïü·ˆMÃo>ï¾[]­À1 £Óévvv~‘oÅÏÀhLãaoȫʭŒó€NÑF~¸Þ"¢âÉÃjI¹J¥¤Ñ™'¡›'[çuW2 (ê ¹ùø#ÈÓy,«(•T”*rÁ8öŽÎnv\Ñ!ÄeO*KŠqZ[®W§±®j«¤âÒÇõòÇ^äáñ‡ë‚!ÆQ+äò*1‡'Ô}CÝ —Wëêqá÷o? ŒkÔjE}¹šÉŒx“~ï× y•“€)9LpuPy j¢}rJ*þ­äÄ08öiÁ'P!VEH×Þ-¸… ®ž¾®ž¾-íÐÑÙÍÑÙ­9•E®"W&ê4Ö—ïÈ…ž_Hó`°ì,;ýB¶ƒ­_h¹eû‹F2Aà*5®n Ks¥Õ€#¡\êFm 4x Kj€[‘ŒCG®«]ƒL&B£a½í^òýÉ ´/Œ­ &‹M£Ó5ì~Õž=UŠzFƒS)º`4ƒUÏ䨘,‰b4ô¿!ÖÑãuÒÑãuKËP ùtb°d4:`²€A,@t¯~–¡ NR×(#q51dÊg*¸^ET¸eÒ º@( €† j¢F+ÕÏT0 ®¶¶®Ö¢¢A È«e´*xû¸F7$†@ H›3í@- P†@ ˆE€*@,TÁb1  †@ ‹U0X ¨‚!Äb@ @ ÃxeG/3Ë@ íIY±a!´‚!Äb@ @ ø#B‹QË13ZÏœ›£i¿n»²‚…Ð… @lжQÁ¹7òƾý¾o`'wïÀÁqIGŽþÙ&ÝB -Eèâex´´Šdƒ@ i|ûÎÝQcßIJŒÏθ\˜Ÿ·tñgûöh}·ˆ ˆËŠÉCï¼E=P#b„6PÁ«×¬Ÿ7wöØ1£x<.“ÉŒéúÓß“·4Múò•:Gxø}8ezmíÓ=‰….^?ü¸3"º‡«§ßëýçÞÈ{iýo¾ý>42ÖÉÕPôàáÛïNòöïèî0zÜ»•••­öŠžU«½ll¾´BCCÃôÔYž¾Á»DnÜü ´š!­¡ Tð¹s↽µnÃæ¬ìœS'ÝÉËd±YKÒWho?ñØÑwó↞5gþKëgddž:y¬²ô!`ü;¦MýàîͬÛyYŸ}±´õ¯ò bt¾´ÂŠ•««««³2.žûïäåËWÍ+2¤½tŽKIHÙ6Ü^·´Ehgwß’âû† ‚ü5Ýã·½»•}ÞpûF&YíÞ\Ÿ¨¯¯÷ ì\ö¸°éúyÙ×\]ì+___ÝãÎÍ,²üÙ.1aE„v2èÍ Ýr£“ð¥ºDÄ=´ß×ÇPXXÔµ{8ë MÐØìv 6ïÈæ—,J3Ф¢ôaáÚj ÷›Ã|¾D"‰œÀ3Í«UÄ%¥¥=ûöã¸nZ:rfØl¶Z­~i}]ý{åêµ%é+rróär9@/Ûݹ“‡LxQ ‚"(Çëí×ÁQäjBs½ Ùü†F'áK+”—Wxyzç^^žä œu¯,­œ½-VÁURqÁÝÜ!ÑBwèÑ£Û±½÷ÎxÃÊ.ÎÎ'þ<äæÖ\ÉšYÒäÒ—|Ñÿ×ìkkë|;éÞ˜ôn3‡ƒX 8®‘V”Ý̾Ì`²í¹¼µ5œòÚjÝ 4­¾¾žÍf$Ri륉œŠ=&­àââGd!œu¯,­™½À\tïf‡ÐgWO¥¢A©T‚˜;{æ[cÞæp8ƒ¼Éd1¯^ÍÐVž8áYsç¹|©—§ÇÝü{k×müßw[›è¼™õêXL&“Å|ð°xÙò•zwõ>›€mïСKtaþðØ×pƒ´1 '¤^…N›·~›2}ªLVõÉç‹[/ꈤÄÏ-]¿ö+€6gÝ«ŒÉ³˜Ž««– E® EƒF£&§{—λÚ±k÷žÎaÑþA!_®Z½û§d噩ÉÝcc†ëé4eZJ\#Q;-ͬ¿qýן}±ÄË7xØðÑÝbcZú ÖAp¸5UƒÙ¢v†Rõk¾úóØ ßÀÎCâ‡÷éÝ«õ’~²àc{;»°Èn=ûôïÚ5’N7Å›iW˜:{ á¸s' öŽ\^ktºC ­áé쪫Ñ+·Ú ™ŸoÌø÷®_½`þ¡!ÖFKg/Ž3iQ‚@ý Ñ…;l¤Ãȱä9gÉ2ApÀqûz1¸ÚÜ&æŸ~¾D&«*/¯ø|qúÐ!ƒÍ94ĪiùìmW{D@,ƒRI»ž¥îѼ¢]¼¬Ž¨þÔÂòï±6náIttõ¶õ ©½½=c{ôíÚ½Ë]8ޥŨ0Ði-´Ìl T’*‘Ëi¹7ä >6¬Æëý†ÙE£Š©“?˜:ùKKi@+ÒZè—.:] ]Íjµº{¬a5MpPýÜYUgþ1»€ˆõ­`ˆ‰‚:#ÕÏ#Ÿ í97~8y¢¨:û¯Ùdƒ@lhC ˆÅ€*b"Òü›’²bY^&@º•Ë%eÅ’²bÜÓS1vy3\@ /ª`H« »Bݧ}ð}ôHÝ?@ ¯PCZýÌ9ÜÍU Ÿ¿Põêii¡ ›†ã ¦ ·°W÷’ ¸Òü›æ ±5  @ ª`ˆ)Ѷê¿þÔüü“¤¬Xò¨€`2ë礑·  4舀˜íÒ%€¢ê˜®Zf¢PhS†@… TJ…J­"p+ßmAP”F£3˜LZ¾{I3€*b:´‹—5;\íÒ@§©»F7V¹1÷1\»öªÑP_÷ðAAvfFyY‰¥ey Š EÎQ1Þ~,‡ `7(¨‚!¦BôËW#ž& ¢_¾¢ #ØlË ±rÔJeié“+ÏÇ ëíŒa4„ë²MÐàšü›YÇìç „^^¥²¡Í‡ J ]¼¢"#þ>~D·f9lW ˆôV¶öªf÷MW‡Ö. T)23.%Œïãß ð–æ˜0?A Ņ³'ÇOH¨` Ãq|>ïÀ¡#/¯@^—”—{øà¸ÇqÂpóò•”•¡û¯¶ ªà¥‹?_±rµR¥Ò+/zððíw'yûwt÷ =îÝÊÊJ²\èâµfÝFÿàN¡QÇOü½~ÃæÀ¡B£þ;s–¬ ÑhÒ—¯ìÐ9ÂÃ'èÃ)Ókkk©PC1×nÎ#ëÒI:ƒeBC†á”… )TÁ:vèÓ«çöÿ§W>þ Ó¦~p÷fÖí¼¬À€mD@Ee嬫Ÿ.œ7yZJyEeNæåOÎÓVX·asVvΩ“Çîäe²Ø¬%é+Èr¡ïÿ ¼R  AนrtÃr±X,‹›n‹"T©Jj×/œ?÷ÛïvTU½\öÂÙûôîÅb±¸\‡Ï?êôí­ùÏæp8£Þ!—Ë?ž›FžßÍ¿GÞݵ{Ϫéîînööö‹>ûäÈÇ(P‚"A˜Ù&ˆg*øÅB‰D<4.ah\‚D"n¢-‚R3¤V‹DNï¿7~íúº…W®^‹Káå×Aèâåé,–H´·|>€É`èž«ÕOö%¥¥=ûöwv÷¹ùtìYY)&Ëa”ÒRJJJ'~8Í?8ÄÝ+ ~ØÈŸ$Ë›þEoµ (‚ôü­l;žÞa´¼5.]rt݉D24~˜L&“ÉdCã‡I$’ÆÚ¢&¤4læ»AQ¿Z>š:ùÏã?z¤-™4ù£?˜˜—}­²ôaѽ[D³—Ú¹8;gg\*RTQò@\V\Yú‘!ퟧN÷óõ¹|þ¿Âû·Îÿø‡ÿÛÙœVð˾Mh,®%¯•éFËÛP ©T—š“•‘“•—$•J[$së¡\³X¬ysg-[¾J[ÒPßÀb2™,惇ųæÌk~W'¼3kîü¢jµúæ­ÛN™N–CÛÒR2®gΛ;K$rb2½zvß³ûGðl" ]¼´3Jèâõͷ߇FÆ:¹z™&tñúáÇÑ=\=ý^ï?8÷FYÞÐÐ0=u–§opÇ.‘7£­òŸS½úöwõô‹ˆî±s÷/f~±Ö‚ FMÔÆL×ÖX¾z]éöÆ`0ÇŒµyÓ Ã0 Û¼iØѣ ¦Ñ¦ˆíZÁ€·F$i/7®ÿú³/–xù>º[lLóû™™šÜ=6føÈ±ž¾AS¦¥ÄÅ i{Y!¯áaaK—­,zðÂ)ÒÈ—ëZ»™§N3üÉuþüÅcGÜÍ‹:xÖœùdን««««³2.žûïäåËWµ•§§¤-˜7çAÁ£‡»ví:YøÊšh ýªžÞþ|GçˆÈ˜¯×¬Óh4m%‡Ãž‘š¬5oQ‘šÌᶨ¥27ªÍÐÄ‚è>£1tÈ ¡Ci/'8Ѱ‰ÑsEÓf¦¤ÍLib,¤9ü¸ã»/W}—8¢¶¶®¿×Ó—|îáîn´æ²¥‹œ„BÃòÕ_­ Ã)Ó§~½vYøûÁÃGí'ë/[úÅñ¿þ&ËY,VYY¹¸Rìéá±aÝjJ^’퀫 ©(¯Xµry«†7á!c‚@ltEb¸ººlX·:/ûÚõ«ç½<=>˜<½‰šFËIý `³ÙÚˆqyy…—§yîåå©­üãß:}æµ~ƒ¢c{iõò+k: (bè\ÔV‰uÝ»(І„tþáßíÜýs[9"êäò›¶h4òR£ÑlÜ´¥N.7Ú–:+ª`È+ÐÑqÁ¼9YÙÙ/¯Ú D"§âGÉóââç!èȈðÝ;wܽ•½rEºÖkñÊbò[EñgË{[¢¡aï¯ûRf¤©ÕjµZ2#mï¯û ÆA¶ÕuÁˆu2î ç/\R(b‰díúM]BBÈr{ïÞ}“»‘”øù¢¥b‰D,‘è>s4yjò»ù*µš ú©7ó•õ#(BÙ@#a· “>Ì»yS¥RN›žœ4,±­¬`>ŸøàþœœÜð¨Øð¨ØœœÜÃ÷óù|£mmu]0bL|ÿÝ/W­ö ìÛ+/ïÖ÷ßn!ËS¦Oë70ÎdåøÉ‚ííìÂ"»õìÓ¿k×H:ýi¬eÈAïMœìå¼$}Ŷ­›î¤ÝÓØ[¾“îA&&Äðá4‘«çà¡ AAk¾^e´­i‚Ã÷ ø<Ÿwøà~@ÐXMêÖÃÍ*!¯"ô8 ¿aùì´ÔÙi©ÚK=w­ö²±r6›ýÍ– ßlÙÈÏ¿·s×Óõg#’G$%êõÊú‚A¼èR¨–”ëU#+$%&$%&–›Œ^s>wè÷}äIc=ŽP¶.ª`¤-ùôó%ÏIS*•Ÿ/N:d°¥Å±FP!ÇÛlyY‹0—Çã-×mb{‹Ò WooÏØ}Š!ƒ,œ?ÇÒâX#(‚a~Ø)RZñØ„†”nÓC™ ¶¥ôPJ¡<û–U1uòS'`i)¬Ã0×àm÷Õ¨Õ* Ã(êœ*ÜP_wínéïçïç?S4Ä& c¨¯«`dï ®Ý(ʾ±!8:=.Êç;:YZ–æR- „¢6\§ %*X­TÞ|(Ùvâö 7ßLôò¤î býh4šââGß?ù©£ <€’ì[‚N£tÉͼËŠ0ë^”¥¸L\qÿnntÏ~jj¦.%*X©RürúÖÐÁƒRøQÑ?Ħ ƒ. Ûñç©ÍsFQ‘} bCЙL¾Ð9´kÏü™Õ2 NPbZ¶(‚rùŽá±}D. rJÒôP¢‚ ¿ÿXçæFEç[ÄÝÍí·GêvüƒØ‹Å±ç <}‚mb>à8®Q*(Ò¿€2_0¡ÒàZÿ¹75Al ÃTk²wÚy¸ØªC A¨ *ü=\”y5i¨¯+*¼ŸqíJYÉKËb"M<®…¡˜“³KtLw߀@µrlOC›ÒJÔJeÉ“ÇÏ7ÂË×ÃlïSø:}þ¢U[ŒÞÂqͼ¬?þƽ}`Ôª1Óä3Üsž:5ª jjˆQ”*ÅÕËç‡$éiiYLEÇÕ*…Ñ»Áßöô_ïMž C ÖŒ™T0© ÍcÀjÇ¢z ˆBàxeY¹›‡moT†"AàMd‘pv÷¬,-µ‰×«Œeþ=‚¬[·ÎËË‹œ‰‰‰,kÈ!ååO7ìP©T³gωD`Íš5zdddxzznذÁÜÒCl¸ú´ (Jà8®Q“GQaá¡ñE……ÚApëŒ4„JÑ ¯«©«©ª«‘Y÷Q%¯«Q*¨‹ÙZl^¾|ùúõë"‘°iÓ¦½{÷*•ÊE‹Íž={×®]€Å‹çååeffÚÛÛ/Y²D·ùÑ£G'Mšôý÷ß6Ì2/bËP·÷ Ù@D»ÓÂÇÅ¥Ìx³_¿©Ó“¿Ù¼ÑÛÛ ›ËXåËl¨¯{ø  ;3£¼¬ÄÒ²¼ Å„"爨o¿Š›SÁk×®%õ/ /ïiZ6›½bÅ ___òò§Ÿ~úçŸ<==ë֭ӶݲeËŠ+þøã˜˜dÿ„@´P··Ù@„ p\£¬\µzËÆµÞ^^ÓâW®Z½yãZ¡ÑX¡;N­T––>¹rñ|Üð„\úš IDAT±ÞþÁFC¬oÙœ ®É¿™uüÈ~®@èåEI`Ób~"wl‰.\èÓ§½½=‚ vvv•••dyII‰¿¿¿aÛµk×¾ÿþûPÿBLÆpã«ìììAƒÙÛÛ{xxìØ±Ã"Rµ%­`Çñë¿öôðÀqÜÓÃcãú¯ñgP·Å¢É(UŠÌŒK #ÇûvBר5•Õ€Àƒ:…½10þÂÙ“ƒIÅb®úÑ£G§¤¤<~üÇñªª*­µïææVPP`Xÿ¿ÿþÛ·oßêÕ¯z&ZˆÉè馻wï&&&N:µ¼¼üâÅ‹çγ”`ͧ9›ˆS·Ñ¸É8.)/÷ð Àq Žã&g!2'n^¾’²2Š›Vñª¯¯g±X,«°°pÊ”)Úò÷ß?55õÑ£G2™lÖ¬YÚrOOÏÿþûoûöí_~ù¥%ä…Ø‚4}XçüG‚Àq3äè†åb±X,7ÝÖ·l7¡“ÄT·<)))))I{™šú4yN_¿~ýúõëvâêêzóæÍ&F@CO7UVVܸq0{öì>úhÏž=­¹¾”ÿÜ×X…Ø>ƒ¬Ð È ÊAXh4½q¥RéÐøa€?j,}'AàÔÅom{i$bzºÉÎÎnõêÕä'píÚµ>>>’«¶ä›ñc«P-“Rg»µÒ=¢g*qìùä ƒÁˆŽŠÚ°~M—.!ºzîüy­¬•£ëŽ+•Jã’d2`hü°?Ž4ª… *]:Öø‚@¨FÏ  kâ®uBÚeº±ƒ°Öµwŵäµ2y­ìÉ£ññCߟøBò§]»Q«Û8Ñ©ÃÃBs²2r²2ÂÃBã’óAQ÷!Eý"t Õ>: =FCǬèû^ï5qâĹsçJ¥R©T:{öìøøxK Ö|Ph*¬3÷t£=ä ›ÍšþÑÔ‚‚Bí-©Tš¾lù¶o6ië˜9ºö’Á`Ž=jó¦ †a¶yÓ†1£G1L£M©ûV¦äS h€‡àI‰µ?ú1OJJ<)ʾezŸ¨I“&yzz{zzÖÕÕmÙb|2«BwÁÙŒY󊋊‹͘5Ïhë¡iu}}öo¿Žz¾ƒÒ‹–~4uJPPPÛŠÁá°g¤&k¿ŒQ‘šÌá°V¶±$öt}üëÖ:¡Q¿ésǽڹãNœ<ùù;})ʾe†Ÿ¨%K–è=oå(“þ¹³RRÓæ¾ñzßS§Ïl\÷YHีZÁ(ü8¶sxꇵ·³;qü(Yá굌¼¼¼õkW?­ßúŸÔ&ô@ˆm­ˆ 3™ýD³FÆþü×™%Ö•.b^èêçæ8gTð w겿´ëŒSµE'÷ˆðpw[¿feÚœë׬ôpw# qœÂ8~k@Qèx´ÔV‰õõ ÿÛ¾cþÂÏŽÿq0Á'ßlÙ¤Ýd±õ^MmòúúíÛHž>4„qß²uÛLä°õ a‚ lÌ &ÓCuôŽ‚{åA¨Î¾eÖ©›ZijmzžÚ7înû~ù€ë,€µN+¸éï?6›5iÒ„ÅK—‘——¯\Šé®½kÏ’šºõ(öþºïÖíÛׯÌH›““ûÎÛã UðKen T-J#`z(ˆõ‚Ð0 o|§]›AQâÙNiFÁ5jŒf«N!ŒÙ³dI}CÃÿýø“¯¯yY#«ÔVpà;ÕÈ*[ik›óùüÃ÷'& Šø¼Ã÷óù|£‚ÁuÁH› ¨£“¨²²„ï(´´,¦ƒ"ˆLÜTÄ»¦¶ÆÑÉÙzB Z³ÍøNÚå»m[Í ‰@ µ0àðÁý=š¨Üݪ`È+FïØ9üÚÙ¿Ù,¶›‡/j›ábE0ŒnôA2™äþíœn}ZOT ‚¢àY QKµ¤\¯aðåQ-)7,l)z=ðy¼C¿ï#Oëœ pêÖ–@ yå 3™‘kd·ÞWΞ¨’Š­ÐNl‚þuÔøÓÉ(Šò¨žo8»yY• žÕ $šÃqy<®ÑrÝ&6Žƒ@¬„ÅâØsÞþm7\¬R4Й¬ÆîZaT мċM"¥MhØ~¶é@¬„ö.V*ê--‚ †á¸Æ†Â¡jµŠº‡  †@ æAQ£Óã¢|¾£“¥ei.ÕR±@(¢Èae«¿Â ˆ-B§Ñ:„äf^’ˆËq@ ±æ„D\~ÿnnhtOŠ›Ð †@ æƒÎdò…Ρ]{æßȬ–Ip íÜLPåòÃcûˆ\<(r¬C @ÌÉÓX¨§O°MÄB©lB @ÌJûˆ…¶6ð-@ í¨‚!Äb@ @ ª`±0@Ì A¨” •ZEà8VžXAP”F£3˜L(Ù&ª`bVêë>(ÈÎÌ(/³öô’Š EÎQ1Þ~,§õ9; ±,tñ—[Z B-j¥²´ôÉ•‹çã†õöÆ0BuÙ&hpMþͬãGösB//’‚ä(TÁŸüwÙŠUwïæ{x¸Ï™5sÜØQÔ@l¥J‘™q)aäxÿãµ¥%z A Ņ³'ÇOH¨`ªÂqW®^›1kî¢Ï?yPxgßÞÝç/^¤h bC8.)/÷ð Àq Žã„-àæå+)+£èY>ªTð†M[}¶°ß¯1èt?_ŸÍÖ’å …"mö<ßÀN¾fÍ™¯P(ô6VAèâõͷ߇FÆ:¹zS$3¡†b8®!ÜœGÖ¥“tË„†4 Ã) Rf_¹öæ›ý Ë—ùUiYÙµKg¯^<ûèñã+W7¿BFFæ©“Ç*K„.^I@(EPÇÍ|£–‹Åb±XÜt[ê¶l§ªßªêjŸoX¾ÿÀ¡鋜œD"§•Ë—î?p¨ù–-]ä$´á|‹›à÷ƒ‡;v‰$¿ãuÏ!m‚"A˜Ù&žmɦW(‘ˆ‡Æ% KHÄM´¥.ƒ2U*˜ÇåJe2ÃòŠŠJŸ§žïŠŠÊæWpuuÑžÃåVrâúöwóôïÕ·ÿ_ÿ£-_´dÙO?|ON0ÝóµvÙˆ ]®ÙÙ9I#F¹¸z „.¯÷pàà!½ aÛñLvé’£ë–H$’¡ñÃd2™L&?L"‘4Ö–º ÊT©àؘ®ÿþ{Ú°\$rzøðé„~ðà¡““¾UûÒ Hë¹–q=mö¼•+–Ü^¹biÚœy×3É[%%¥1]£ Ï!m…Ѹ֭[·“FŽ1üÎíO}¹"}ÏÞ_u+ìÚý‹ZÝ–¹Ž¤Ri\BRxXhNVFNVFxXh\B’T*m¾ÌmUýΜ1}ɲ/OÿwV©R=HM›C––øÉç‹++++++~¶hDR¢^×V V¤5¬ß¸åóOôéÝ‹É`ôéÝëÓóÖoܺxáäê-tñÒ=œüçT¯¾ý]=ý"¢{ìÜý ÙF£I_¾²C矠§L¯­­Ï&'Ùƒå^¢õ‚ ˆ¡™¹âËUŸ,œÿöø±\.—Édv‹ýe÷Ní]©Tš¾lù¶o6cæ³iV0ƒÁ3zÔæM0 Ã0ló¦ cFb0˜F›"¶h¯_óÕ¢%Ë|ü:ŒûN¯ÝÉòÏ>™'9EwëÝ­««Ë§ çé5|i¤õ\¹rmà€çáâú_¹r o X½jub·ruÁ‹ûJ¥R¡£#YhÇu$ ëª%€«×2òòòÖ¯]ý´I+Ÿ6¡9A 6·"±fø<ž®×O*•ñy¼¦›üøÃw§NŸy­ß èØ^Çÿú›,,)-íÙ·¿³»¯Èͧc—ÈÊJ±Ñ¶ÐbÐECo‚@ ¨¬“çµUâÚ*1xæ4˜¿à“­›7’î ÐvŽˆ:¹|ã¦-†¼Ôh47m©“˶¥Î †*ò*ý×ßÿj/ÿúûŸ˜˜—„Ý"#ÂwïÜq÷VöÊ鳿Ì' ]œ³3.•?)ª(y .+&­CšÆèÛ^={üqì˜Ñú—¯\ŠénÏÚó„òoëQ44ìýu_ÊŒ4µZ­V«Sf¤íýuŸ¢Áø#ȶ·.±ff¦NO_±òì¹óJ•êÜù ˾\53uzÓM&OM¾s7_¥V¡yšŸ8áYsç=P«Õ7oÝþpÊÓNx<î½{÷µm¡/XEcvþ¼¹éËVìýõ·êêj…BqöÜyð¬N¬R{jd•mbóùüÃ÷çää†GņGÅæää>¸ŸÏçmKݺ`kÙ) 1'±1]×}½jþÂÏ ýýüÖ­YõÒÅgC† zoâ䢢þÛ¶n$ g¦&oÜ´uøÈ±¥e¥sfÏ$ËS¦Oë70®®®º 1ºÆ6´KÈÞŸw-^º,uæ,@á{ÙEµ$àðÁý‰I#‡î× èAݺ`¨‚!¯(ƒ †ãòx\£åºMlrQ‚"(AæWÁ"¥MhHé6=”©`[J¡ʳoAl Ã0×àËXÁ& V«0 £¨sªTð³ôP׬?=„Ržeߊ¥.ûĆ@PTàèô¸(ŸïèdiYšKµT,ŠðÖù ƒl[é¡ ”b†ì[‚N£tÉͼËŠ0ë^«¸L\qÿnntÏ~jj¦.%*X©Rd^³¥ôPJyš}ëÌÉñ)ɾ±!èL&_èÚµgþÌj™'(1-Û A¹|ÇðØ>"y-CP¢‚ W”‘é¡àOÀÍËW|tu;þAl„ÅâØsž>Á61p×(é_@™/˜ €¡˜F£0XvÔŒ±” u†Y×wq;[u” •¢A¥€¿‡ .‡ ™Š¢þ!¶9œÂÔ/&ð,\œÑ.ÃÅÏB 10jýP¥‚ѧ»2CüªC΂À©{ij¥´ûp1 Ú”YÁÏÒCQÔ?ÄV žm0H]Þ–¢T)23Úy¸øiôìÉñ`Ôª¡Ì ¶G;ÄœXÏ” p\R^ÞîÃÅn^¾’£¿YÏÛ1 •V0A´v{H;ài¦ ³oµ„6\låd_þ7¦o¼R!oiC†áÖi´¥X(åMê¬`„°úwbˆg©ÛèÄPµ­p±¡¨©àØøþŠ”îlÐl(j†À&uV°‘ôPW‘gù¾¨Ë¾ejcáb=Q¥RéÐøa€?jl—[‚°®U($¶ 5C`“Úp¢Åª¦j,\LÄç_,Þ¾ãÿùðƒ‰Ka=2ëŠ*•Jã’d2`hü°?Ž4ª… ‚°žU(Zl.Ju`“²„H(€¾ñì°.G„± ÕŽÿwîü…ë×.g\½tæì¹Üi~Á^ ©ÃÃBs²2r²2ÂÃBã’tS‘êb…±8ÝX(Žã¦¥ 23n^¾’²2ŠÞLªþCÏÃqÐñŠólXE @ž®[]»^üÅg®®.®®.‹¿ølç®Ýæÿ´B ¬½d0˜cFÚ¼i†a†mÞ´aÌèQ ÓhS«zÏŸñ4Šã‚ÀÍyd]:Ig°LhHi`“ÂEiІ€ÂqVd‘5ÉoÞºIžGFFܼuÛ¼B5 ‡=#5Y{‰¢¨î¥VõËC‹ec¡ÖؤØ M`Èópœ©£á⺺:;‡,´·³«­­µ¢ l‚$VÕbÙX¨µ6)ó[Óç b XÕ”@QD?‹:AØÙÙÕÖÖ’ç555öööøZ )°ö²N.߸i‹F£!/5ÍÆM[êär£m­Õ ~ Õ…mÇcÛñxBÿÀï¼;!;;Çðå 8„mÇk«w’ ‰D24~˜L&“ÉdCã‡I$’ÆÚR7{)ó?K’jCK/!T@ÎJsК€Ñß•;u¼ž™EžgfewêÔѼB5 ECÃÞ_÷¥ÌHS«Õjµ:eFÚÞ_÷)ŒGê­s]pc.)y­L&)?wætÏžÝMÈ|ö¿ Ùµûµº-sYI`“Òmz,–$b=sÇ5Ve#ä£C/þº7vÌ’ôå»~ú°$}ù{ïŒ'¬Æ¡•„Ïç>¸?1idxT,@Àç>¸ŸÏçŠJ„® :±P½r‚ quu™6u È—+¿Ú»g7yK&“¥/[~äÐïQ±­ü§h›“Í”äHõºyÓ†Í[¾!›M( lRg#Aà¸jáWrXÛf•F¿&M|¿G÷n1ÝzÅtëÕ«g÷Þ}Çü‚5@pøà~ŸGê߯<˜ÀÊœ?ZšãI–xñÒeíå‹–~4uJPPPŠA6µæ-ØäpØF+Û\{„†Ò´IRÅ%¨b h4µZEC)K×Ýr´Ž2½òôÅ_¤/þâé…1KÍRè‰Êçñý¾:«Sâ$t¬ªª"K®^ËÈËË[¿vµ6´Ûªá­,°IɧAQ¾£Ð¶’¤B(¥Z*æ (ÊAk(jcŽ2CQy<®ÑrÝ&VŽ{ Õ+×-©¨¨ÔzWæ/øä›-›H÷0pµmsy}ýöí?$OŸFÂ8ŽoÙºíƒ&rØú†0Ae`“L§Ñ;„ÜȼÔÙ’¤B(…ÌA[@eZ@”t”YZ—Ø)RZñØ„†V»MOs¤:tøHÏÝÈóËW®FÅt×Þ²ç k«Ä­ƒ lÞº}{ãúµ€i³srrßy{œ¡ n¦Ì¦A f2yBç.6’$B)dÚ°Ø>N”å m9†aZGY{E­Vafi)Œ`4 éÂËË+>²båW‡î'ëÔÈ*µuøN5²ÊÖÂÖؤÊl[IR!”BuÚ–‚ ¨ÀÑ©Ý;ʪ¥bPd=Î- øN†‰DN={ôøãÈ.!!TKB6“F,ؤ*BBÀ$©k…N£tÉͼÒNe¤ó羕9´…VKÊõª 3VKÊ[ù¨µ6­(H ˜:“É:‡¶_Géü í#²"çÏs, µ¶À&TÁWöï(³6ç.–Š…Zg`ª`È«t”YÛ‹…RØ„*˜[Œ…RØlŸ¿Â ˆu¢…JÄå8 €XóB".¿774º'EMhC óa[±P36[¬‚Qµ‰gŠ 6NXéÓ\6ÅÆb¡T6[¬‚í¸ü*I%“ͱ¢„vALjÇåÃyÕî±P]Zü-äØùÆõ U±•ÿ‚€Ø8ËÄù7¯ûwµÂ§¹ êh±Ìý;„>(¸Y[%…ŸH›€"(‡Ë ìîìê©€ÆäU”pœ@è,rñ Ñ(Š«Üb{Žã*¥ר-- b>L\¡V«ÔjUÛŠ@ ¯/QÁŽ.^摼*„J©P©UŽ`åÑWAQÎ`2 ä?\ @ÌJC}ÝÃÙ™åe%––å%`(&9GDÅxû°X*YA @̇Z©,-}råâù¸ác½ýƒ1Œ†Pc]¶ \“3ëø‘ý\ÐËK ¤à¹—¨`IYq› ´èk7(UŠÌŒK #Çûøw Üú£¯A Ņ³'ÇOHæWÁÒ†8.)/÷ð Àqõ$¨n7/_ÉÑß(z–ª`bNŠi4æ^R•}ùߘ¾ñJ…¼¥ i†S6„*˜AÉuàÝp\‰T pl~üÄhÃæ@Ž®["‘H†Æ“Éd2™lhü0‰DÒX[ê2(·¥ ºxýðãΈè®ž~¯÷œ{#,?ùÏ©^}û»zúED÷عûðÌöºxiP¡‹×7ß~ëäê ŒSÝjkÖmôéuüÄßë7lìÚ)4ê¿3gÉ &}ùÊ#<|‚>œ2½¶¶¶ ٠ŀ@ TÓX\ëÒåˆavùòmáú ›R’§ܽ}+7$¤óÛï¾ßVbH¥Ò¸„¤ð°Ðœ¬Œœ¬Œð°Ð¸„$©TÚ"™[O÷{þüÅcGÜÍ‹:xÖœùdáô”´óæ<(¸sôðo×®]ˆËŠÉ¿bEo™§N«,}Øô••7²®~ºpÞäi)å•9™—?]8ï³/–’w×mØœ•sêä±;y™,6kIúŠ&d3*¡AŒZš»výòöÛãÆ»k÷/ÚÂ?ÿ8œÇårííìRS’³³³ÛÊ f0˜cFÚ¼i©÷7oÚ0fô(ƒi´)bV0`õW+ÜÜ\9NÊô©Z+˜Åb•••‹+ÅžÖ­n¬í²¥‹œ„—1ÿãÙgÔ[#ärùÇsÓÈó»ù÷È»»vïYµ"ÝÝÝÍÞÞ~ÑgŸùãXÓ²A 3c4!¼B¡8xèðØ1£Çsàà!…B¡W¡N.ßúͶ×_{­­ÄàpØ3R“µæ-Š¢3R“9vóenLY!©(}Xx§¶Zèýæ0Ý[>Ÿ˜ÈaëÂAX‘\tïf‡ÐgWO¥¢A©T4ç+eòÔä¹sÒüü| ‚ШŸæãñ¸÷îÝ 0Ú$$¤Óæ­ß¦LŸ*“U}òùâæ‹7qÂ;³æÎÿrùR/O»ù÷Ö®Ûø¿ï¶6Q_W ymuó‚´-l{‡]¢ óo„Ǿfý­BZƒáÛòòŠþ=u⯿?˜<,¡ÑhååÎÎ"m‡™©)«¿^ÛVb(öþºïÖíÛׯÌH›““ûÎÛã U°Q™ÛŠ÷[W-Š\ŠFÝL“~ÈAïMœìå¼$}Ŷ­É”éÓú Œkl)Âú5_ýyì„o`ç!ñÃûôîÕ|ñf¦&w>r¬§oДi)qqCš®ß´óAnM•„Á`ZZµ (B¼¸8lϯ¿ŽõV¬R{Œ;fï¾}ALžúÑíÛwT*UiiÙÒôå±1]Û*ÇçóÜŸ““›““{øà~>Ÿo´-uë‚[lãN£Ñ•ÊçÎrír½uÚËI‰#t~SÌNK–jX™$,´Ë©“Ï#i“&¼kXÍè9Š¢i3SÒf¦è טlzb@,Š 8ŽÛDV]Hk0\cûóÏ{¿ZµB·dü¸1óæ/L™þÑÁƒ&Lš|û΀?ðÍ7üa{J"ÜŸ˜4pøà~AãÈQ·.ؤ”¦¹…PL…ÕÞAP” —kK.œ=^|t¸WîçÏœ"p<)1!)1A·y+ŸlÖkÎçñý¾Ö«Ãë?X÷-zÀüá'ÆCÕöi:w2Ÿ¬ÆhŽüÜCu/±Â"¬°ˆñûÁšý{Õa¡æ“Õ¶A0 Ãq ®1· 6µZ…aEC iè—.:] ]Íjµº{¬^MhÅÈáª>½ð€¢´KW8 >Å 9Ÿ-®ù}¯%¤~NsäWG„+ÇŒRõí­ññF”JZv{ÉrZV6çóÅÕ‡ö[BjÛAQ£Óã¢|¾£“¥ei.ÕR±@(©ñJA i‚ ÎHuÍóKŸ í97~8y¢MU¥³Ê z­Oíöoyo ¤e\§^Rã´HþêÏ ètUÏš¾çGÆb™Ùf¶=@§Ñ:„äf^ ‰ˆå E˜u‡£4—‰+îßÍîÙOMAÖ"U0IJà¾>@·ÙyH§ßÒrØ t&“/tíÚ3ÿFfµL‚VðD”Ëw í#rñh×R1„ÍN}ˆu Í¿ @++ù]¢ê¾\¦˜ø€ÝCÕ»G݆—?ÈÄ8x ŽŠ¤ZÎÆ0Y~¤¡Ë»ÉYö% aʇ摶]€°X{®ÀÓ'Ø&Ö€ã8®Q*(Ò¿ª`H›@;w„ºO/úà!ú葺Ï4bù÷8‹—©O›A½ŒMÑ"ùuÓ9ãÞ^u_­P¼wiA¨ *%¿ëmø‚X?ô3çp7WM`€~þ@Õ«gÓM°;wFŽAªªëg$«{v7‡”c‚ü$hiíæ- TR+¤ý­`ˆé8¾¸·†î%?2@pÈ_úzЮe8¼=‘Éï¾]¿pÕr6†iò“Ñ9¤®Ž–ÃNÿ’ù; •¹Œzy!íhCÌ ýï“oCd2Å{ïÔ­þÒFŸH&ììT={ÔþßÿÌßZZˆ­U0Ät$eÅ’²âê¿þÔüü“¤¬Xò¨€`2ë礑· MHæž}&#õõЉïÕ}µÂ²ú×ùõQ«@©¢^XHû:" ­…vé@QuLW-3 Q(ÈgÌ amÙÆYºÐ0y’|Ù³JÙ8Í—ßaÌÛŠ‰ï«»FáR'§ef±— Pw‹1«Ä¶A¨” •ZEà8V¾á‚ (Fg0™Pb.@ i-´‹—5;\íÒ@§©»F­Iê_ëû¬ïwèÞ’ÞÊ&©Õ(Í—Ÿ~ú ýô½BB /]D¹”툆úº‡ ²33ÊËJ,-ËKÀPL(rŽˆŠñö `±8;DR¥‚….^&¤%6­U›c%bØA¿|U1âiš/úå+ê°0ÂXÞ+¥%òW=ÀÜõ3ýÜE´´”`0poÕ¯5L›‚»8›QbÛF­T––>¹rñ|Üð±ÞþÁFC¨±.Û ®É¿™uüÈ~®@èå%PRð€´‚!­A¤·ž?ž[³ûÇ&êJ¬ð‹­%ò«cº’þ ˆÉ(UŠÌŒK #Çûøw Üú“Tu S(Ξ?!P ‚)Ç ]¼~øqgDtWO¿×ûÖf?ùÏ©^}û»zúED÷عû²&ùW›FHèâõͷ߇FÆ:¹zk+èö¬=Y³n£pH§Ð¨ã'þ^¿as`‡ÐN¡Qÿ9KVÐh4éËWvèááôá”éµµµMÈf(i+—”—{øà¸Çq“³™7/_IYEÏò™cEÄùó=Pp7/nèàYsæ“…ÓSÒÌ›ó àÎÑÿ]»v»DVVŠ›–Mšƒ@ÚE‚0³ L<Û’M¯P"K— ‘ˆ›hK]e‹=š¾{玻·²W®H×z'š†F£Õ×דç©´ùc¹8;gg\*RTQò@\VüR·¡2±ž¿•mÇÓ;ÈòãÇO 8„ïèìîéûî{?~b²K—]·D"‘ &“Éd2ÙÐøa‰¤±¶ÔeP¶˜ ž<5ùÎÝ|•ZM„Fý4… ǽwï~cMBB:mÞúm}}}IIéœ6¬‰Þ™5w~aѵZ}óÖí§Loº¾žÐ ´!ŵäµ2݃,\¿aSJòô¢‚»·o冄t~ûÝ÷ÛJ ©T—š“•‘“•—$mĶ£n_M‹©à!C½7q²—oð’ôÛ¶n$ S¦Oë70®1•·~ÍW;áØyHüð>ÍØ QËÌÔäî±1ÃGŽõô š2-%.nHÓõ›´AŒš¨FÍÏ?ÿ8œÇårííìRS’³³³ÛÊ f0˜cFÚ¼i†a†mÞ´aÌèQ ÓhS„2+˜ªuÁZÿ©ž#U{9")qDR¢^«Ùi©³ÓR +“„…v9¥“ùfÒ„w «=GQ4mfJÚ³ä¸õ¯½lZ ÒLK_'—oÛöÝ믽ÖVbp8ì©É:R¡º—zÀ$ö¤€« öµsè^ÖUKžßâ:D"Ñ?3lØ2LhNˆM¯ˆ€@ -(Š:µUbÝC÷nm•¸äQÑÔ)N›žÚVŽˆ:¹|ã¦-†¼Ôh47m©“˶¥Î †*˜ÓÖØ:88ÌLMÉh»dÛŠ††½¿îK™‘¦V«ÕjuÊŒ´½¿îS4Ù¶×C ˆEƒàh$7yêG·oßQ©T¥¥eKÓ—ÇÆtm++˜Ïç>¸?''7<*6<*6''÷ðÁý|>ßhÛv¸.¼š4¶ÆÖï¤{…Cš0i²ÈÕ³GノäǶ·¡$àðÁý>OÀç>¸_ 4V“ºuÁ0@Ì ‚¢€ ´O “TKÊõª‘’’ ËMF¯9ŸÇ;ôû>ò¤±ž G([ U01+(ŠŽã‹Œn8.Ç5Z®ÛÄ¥ÙRn¥Pžúb[ J„ùUp`§HiÅcRºMU*؆r“@(Å ©_ 6‚aŽkpe¬`P«U†QÔ9%*ضr“@(Å ©_ 6‚¢G§ÇEù|G'KËÒ\ª¥bP„·ÎÝ”¨`›ËM¡ªS¿@l:Ð!$7óRHD,_(¬{Q–à2qÅý»¹Ñ=û©©™º”¨`ÝÜ$ð‡'àæå+9úuÛMAl:“É:‡ví™#³Z&Á JL˶EP.ß1<¶ÈÅ£A^KÅù‚Ÿæ&ÑhTÔô± Ù—ÿé¯TÈ[ÚÒÔ/›a±8ö\§O°M|%ã8®Q*(Ò¿€ºpœ67 EýC,ˆá¿•ÜAß±ñ•í”Æ”!¶A*EƒJ]RP§‚µ¹I(êbAôþ­R©thü0ÀŸG5ö|¥©_ Û…:+øinÝBŽýÓDmövvÝ{t_óõª À@²\»I>ÄúÑý·’©d2`hü°?Ž4ª… *S¿@ ¶ eÛÿ4™›äÖÍœ¨Èˆ ?ÔR$„R¬$õ b»Põ©h:7‰££ãüy߸‘G^rìŸîNTPXøÖ¨±Î.¡Ë°á#ËË˵¾ÿߎŽCyQ÷ž}²³sÈòúú†éÉ3\ܼ\ܼ’SfÖ×7˜¼‹¤9ÿ\í¥•¤~@lê¬à¦>ob±xÕW«»t Ñ+kÔØ”äŠ ïÜ  š¿ðSí­³gÏýó÷‰ÇŠâSf¤‘…KÒ—•”–äfgäd]+~ôhé²åmþB M@¦~Ñš·dê‡m´2uOÙC ¶ eá¸&s“Øq8ݺÅîøþÛçqå"yÅf1/ú¼SH¸¶Âúµ«I'ãÌ)+W­&Ë÷íûíøŸGDNN€¯¿Z94>qEúŠ^ä9V–ú±]( Ç=ËM¢W^[%Ö½Ôým ¸|ùÊg‹–ädçÔÉåà™7ƒ¬@n¥ `³Xjµšuv=xð²Ì•GŽ9v W>wöL¶\kEnRjeµcë–[·p³ðHt0¶¡_L—ã›xelC¿˜._ÓÃ16 ðÊ8‡~0]#X!ÏÏÏϾt¡µ,Äâ°!CFD(åüUü9ºzU•?º` #˜!$'ûâÇq©©´ÅryÒ†å#"&´ÁŽ®^ì[[۰Љ üüºòWÛ6jäqíj 1 ðjâ1‚ !ºµü%„H¤RF­cu6˜ªª«?ÝõÙF}wæ›—_E=µ?+¹-  &p9ÎÑÁaŲE·ØIFŸØ-¨Ÿ‡OÀ¬9óëëëŸ-æêõéîÏ{÷u’yBT*uLì†À}»öÜñégÜ2¿ÛòóɳçÎ6RæÙ¥_ð ½_}­£[E¡P,^ºÒ׿‡¯%Ë¢ ·À—{öö $óì2b䘟òo¾¸¿¯yaQñŸ§àݵ»»—ß”÷¦WVV²‹µØ"N^ÞO½ú…ìþü‹¶ýPÀ(˜@WUW'§¤õ`'·¤m¿žwãüÙôÛ7s¥ÖÒ¸øÜ’?þ˜{þlzeY1!dSRÊÏ·o_8—‘{5«¤¤T÷.æG-þxå²¢{·O8œ“sMG!'á¿?)+/Ϲœy5+óׇ7&&q³~ø!+ýÔÑ{wnF޳dYt[ÚØ´æÓþòþ¼¹3ï\ÿùæu?¿˜Ø ì2:ZtúÛ³SÞ›ž”˜0wö̶쌿'"Ú‰írÚØØ„†ïÞ±•-Ü÷ÕÃ÷¹»»BÖŬú‡?&mz–Âß°ÎÉÑ‘ý~ðÐác‡°‹%įӽ#©TZ^þ¨ª²ÊÓÃ#mK’ŽBΑ£ÇO=äääDILØ0ñí?Å­‹ag%}²ÑÞÎŽ5nrJZ[ZÚ´æ—2¿ã*°vMt¿àAº[ôÅ?÷¤¤m;°Oÿ~}Û²/0FÝ ®*PUþàÁýÛGþw@€?[XZV6xØHw_g7Ÿî½úWVVqËËd®Ü÷òòG>>ÞmÜÑž/?;áûáoŒ’qæ[…œŠŠJnû>>Þ•Ü,6 !ÖÖÖjµ®“Ý-ÖüÊÕœÈ “½ºtstõòô ¬ª®ÖÝ¢»>›ú§w‘¿¦È¨#¸E®..y?^~TRXQZTUþ€ýç½…Å\]ŠŠ´g‰ÅâÆÆgw_T?~Ì•÷ï×÷«½ÿ¼s+/qcZ³”*EnÎå7ßžæÓµÃÐ ícüzôQ(—¾?;mFAF©Txùø=*)ôÆ¡+ËïNí·µ±Q(›Ïbhºª¢ÜÃǦ5æ÷·‡ãæå[uêH¤÷ ˆ`Þ‰(‘ÔÚVÞø”aÌvŒgŠ¢DT‹Ä0 ±Yh4æ<¸ŸØÂ°¿/ˆ`ÞQ"Š¢(†a˜f—ªÌ %jù$/%¢ØA†;¸>‰¡éÖš¯"€w¢ç×ß̸Lš4³y9Ã0æÝv†¡[k¾nˆ`ÞQ¿EpGŸ µyÍ®¡¾¦cöÕÚl¹©œ6ì'Æ0Œa7ºàé8Þp•F_ééÁ!áv.Á!á§ùÞ]‹Zkf{šúô™°A¯Û9¸ôêÝï¾ýo§ÖLD0ï~ë1 Ÿ+W®ÎúhsÒ¦ò’âÍI›æG}tõêÕgsyÛéï>ZÍlÞ|ƒ6{ùrö¼ùQ Ö?*}pâø‘‹™;¨-†¬ØjóuCðNôüB ÃÏ'yó–¸õ±Ã‡³’H†¶.6&ys*óüY`ö˵ÜëþÝ‚¶ïÜÅG´šÙ¼ù†mvsJj|Üú‘£FZZYuéÒe×®lù½ÂÂw¦¼ç"ó´w’MœüÎ£Š ¶Üæ¿ì?ÿâËî=ûtvp 2,ïÆOl¹R¥Š^µÆË×ßÍÓ7mëv¶P­Ñ¬]çÝ%ÀÑÅí¯ïϬ«¯×ú‰éûi­ù/86 XôBqwkñÓq˺œ=&âÜ䘈ˆ¬ËÙMûtééoM~wËæ¤Îå«çØ´™-6ß vŽÕ¼üw§FÍŸWxïnánúD¼†«Fffæ¹3ÜŸ0>2já"¶S¡Tþ;ób\üß—,^Ä]\rwwÏøæÔž½û’SRyª€V3›7ß°Í.]²(v}ܹóJå½û÷ç-XÈ–76Ê%©•DRXTõÑÒ¤Zµb¿L›6uÙŠè_KJjjk£W­a gΜ±pÑ’{÷ï«Ôêü››1«Å´ýƒ›ÒŒß½à°Ð­©)ËWDËܽ—-_¹-mKhÈÀ¦}:7™kú©_8¸iS’0½`ƒÚ²--5&&ÖÍÃç­Éï¾>d0[¾s{Úǫ׸ºy‹œúÛÆµöò|rUôŠnƒëÕg€§§[¸tñGƒÂÃÆ¿9ÉEæùÁÌ9oŽ'H/ç‚xgØ£«z7v̸±cš—×ÕT²_\]]r²/ñZ(¼ÍÑ£FGŒÒ*9n|ä8nrÞÜÙì®±Z“–––›¸ qÏj%-[ºxÙÒÅZ×ÚHÛáe#Eq'"ÌúU5T+ÿ‰S"1÷W1 ÝZóuCðŽëÑ´FØšðJçkzhón;MkÐ 0RÜk Í;†t¼¬’aón;^V `¼¸w™Ó3Ž!¦•W¶Sb‘˜¦5fÝv¢V«Ä"Câ À7Jb%)È˶²²Ê¹tVèÊðE¥RI$Òæå”Hdçàø°ð®ƒöæäÉã*;G§æ£G¿nJà—……EPßà§uO”*%oÏÇ ‹Qª”*…_(º¸yãz±ØÇåfOŸfÑ‹EàúÊ«¯GÅ%%LL?úÓ±ƒ¯½?1abú¯§ÏX"¼þæ;ñIi!qyja4öÊ!I’{öîOL }ô±5ÆjA²³¦ý÷ÛCÌöÏÇNÄÅÆXvñÔÓ›#b"bÖoØBĵp£qÝ“O‡DÄMHN{ã­wû=#X%H‰M̲¦®bòôÙ¡Í›7ëtº;î¸C*•¾õÖ[›7oFMΚURTÀæòzey'š2iÒîç÷×74Ú9…T&++>ÿì3›W=¾®S*»tñܳÏlÞ¶c·%B~Á¹³¿+.Ì“Jeû_|¹×᯾öfqÉ¥SÇ\-¿ÈwãïÚ³ÏêYY¹âõ7ÞfL§—^~uõª•–]{_x©½££°àÌùü3Í--ûö`Â_Ø@.Wæ9uìLîÙ~Ïo‚›P-StJCBß|óMÏ]Ì¿’À¦†ZöÃ%–çó'ÿ÷¾V«]¸hixtÂÊUO´´¶ö=Å–MO ‚{î^ªÓé6m|ŠÙ®¬ª¶DØ·g§ŸŸŸŸŸß¾=;¿þæ»^‡þϽ¸oOPP ‡‡ÇsÛ¶~ÿ¿#V öÃÿŽýù˜wl«ä¿ßbN!ûíß»Ûb¼|ýÍw–ðžßÕïÁ*Æì¡üÑG6¼nÕ*‘H^{õBH®P¼þÆÛ¬Zsô½µÀ[$Bñ¸ÜžÛf³Ù!,,Ô²ÑÙ)íux[{ûôYsB4MS…a˜­Ì?öèÃ;wïC¶}ë–Ì"©,<<ìšâ„‡I¥2f»³Sj9µ%‚3‚U€Ub[x8,?_ÿö¶f„ÐÒ¥K{îbþmok ¦Ì&«V‰_Ÿ¿mÞP\R2ˆ76^ìljj‹ýzí ð÷/¹PÐÙZ/mkw4ÉÚmv¦fÏši0 zý­·Ìê.ûYNÑÐÐèççËlûû‹-á– ;g«)±-%|vlLraÞ¯¡—^ziíÚµb±X,¯]»ö¥—^B](8–9Ýd"¬Z%÷=°âl^Ar…âïßHNJDŽ·íØ-“Ëerù³ÛwݽôÎ^{^ñÀú[êêÌfsÅå+>¶ÆNRù¹§òsOõ²\–,^´uûN™L&“ÉžÙöÜÒ;1áw-Y|íÔ2ÙÖí;û=#X%H‰)aÅÄ$J;ÚóNo¾ùfgggggç›o¾)òNS*dS3½U«äá??øÂ‹"c3¦d——_þཷ‘ã©S3³gÝ–š‘åíãýÌ–½ö>ù—µÓ¦d.¹ëO!±=¾náÂÛ,U[7‹Å~SgfL)‘<ûÌf&|ëß6y‰¼RÒ§eÏÎÉžžÕïÁ*Æžíj6Q,û«/>zùdÏÎ Gµ67ä>¦êVÞ÷çµFšÃefs€‹H BˆÅæ°¹¼K…ç**Š;ÚZBÁI3Ò§L' Ú¾:2ŒßÈŽ!)/ƒÃ0—ÏæòX,†ai6™£AOÓÔˆf¬p…± 4M ½Nݥ”•‚ÐkméÈ0ŽŒ!±¤d˜ùâóÆá*jл ƒà|V % %€”RH H %€” 7ٗŨœ@J®1®œÚ0RRòèê5‘áçÎþZWsù™-›>úø3&üæÏÄÿä³’$iù÷õ7ßz€1#%ãÊ© #%%ãÊ© öü—Áíí/¼øòñ“§4íÜ9·ìÙµ=8(õXÈ7 ´új©·HDA¡Ñ–í°ÈøŽ–:&BaÁ™ÈÈ„PmmÝâ»î-½ø[ÏR3²¾þ÷ç11Ñ!©T6óÖœ+eûŽ•È;šîh埖ÝÍárþï£Oÿóåg–’R&ÿíWQQ‘¡ššÚÅwÝ[V|!”œšùý·_1§®©©2}¶ãg /ðƒ£¶7Ö]Õ¨ºB3n[<~œÚä? G] x Ã"ã}Ä’á—’n¥¼¶²4>)Ã7 ˆÍá"„tÕ5»ÀÇço›7DÆ&"ÓMŒi`Ë©ÍO? ì¿<ŒS„U§6Ì)ú:µaÂ{9µé{Æyw>Í ?P©”vT”œãòÜ<„^Ã,%õÕñ3ý%!FÂ`4ˆ¦ï{`ź5OÎHÓhµï¾÷A;µyíà„§6/ìÝ\YUý÷W_ÿÇûoÛJ*?÷Tß@Æ©Í_FõujóÚÁˆ¦û:µéuF‹hÀ8ÁÍÃ3>9£®ª,eÊlŠ4;dË8˜´VÕå+–„$͈¦Ñ8sjã šx ÕÝ .—çàŽ»æ?4oñ:†Ñ‘a–gæÚ]¯U§U‚B6Œ:ÀÀö»Ž!H €J ôn¤¤@JpAØp €QÇ ÓÔ×Õ\(ü­£­®†ã¬^ûäÓÀ0g³9\!l( ”£ŒÙhlkmÉÏ=“³pihD‹mÒQ^Û¿uˆ)°p–¯Ø?5=3,2šÏÐC˜8ÕŒ2FqþÜÙÛï¼7qb\ãØÖ=o %’"«*Šúá¿^Þ¾ž¡ÞF£¤«Ð%ëè †åxÓ9¡íàçv¶ˆM˜DÄÙ3'–¯X‹† %0ì 8˜ ú5ƒ³J= †F(:Ûq|Hjõ8Á-ap%%8hš¦†˜›ÅúÇu %€ê8HÉ`%˜¦ij¨RBSÔÐÕ:8Câ›ïOHN·;C¾%ð‡®Ñ»ÅÓô–-[¼½½}||žyæËë«áG•H$‰ä§Ÿ~b¢ýüóϱ±±Æ>Ž Æ²ã4MÓ45ô†ã£,%¾¡Ì/,jÂ=z ¦¦öæ_ÐQ¼“ŸÛõü§}Ð÷»D—÷ùo” «o%ßÿýÓ§O————••ýòË/~ø¡ð'Ÿ|òÃ?|ÿý÷ÿú׿"„Ìfóúõë_yå.—ëbC«Ã&“©ßž8…U"ïh’w4],ÌK™4iÕëÆÕ=ÐÖÖž99´`¨OWÇÚñ'Ÿ|²wïÞ      ½{÷~üñÇvÂkjjrrræÏŸ_[[‹zçw‚ƒƒ-Zäbc%ˆ¦­þ–Þµì“O?³üûɧŸ-½k™­ÈˆFø¨[%¿?‡}|6mx²¢â2ó¯-ßT¾¡ï¼÷ÁÄ´)~’0„ÉdÞ¶cw\BJT\Ò[ï¼ßï±}òYjF–$$ò–¹ JËÊ-ÏÆ2b¢Õ74Þÿàʰ¨ A¡ÑËî{P&»¶Ê¼Á`Xó—õŒ­×ß|Çß7ZV]sù„Ò4í' ëeƒôÍ’ Îë˜-Wacø–p€òòòÉ“'3ÛåååvÂ###Oœ8qòäɨ¨(…BñüóÏ¿úê«®gÍÑYýíÚ¹cÛöo¿û¾V§ûÝ÷·mß¹kç[‘é>†áhJ‰\¡xùï¯%&&0ÿÚñMuáÂÅSÇÈÚB/øû•«W9qôâùüÖÖ¶~={6ÿÈßÖV–/üÂõ¶ ë‹ž0–gù+_ýHeEñ•òâ˜èh‹¯}û¨Tªâ ù¹¿?wî¼%MGÜhYuÍÕ÷Ô3­W¸S Îë˜-Wa®m•h4fÛÓÓS­VÛ ?xðàŠ+V¬XñÚk¯íرcÙ²e ‰äرc®bÍáL‡°ï/5eÒáï¾Þ»o¿8 hï¾ý‡¿û:5e’m«„ư¡JÁ@Öv½óÁ¾k¯[¼`JfÆþ½»cccmßT¾¡å%…IsÔÄ´)ß}ý¯è訞iÚ9–ñË…Òëõ1‰×\¶J¡×ëS3²®V#„’S38ô߈ð0„P]]ýäi3w£eË5—­S÷ ï·Dõ:f+?c­ºëë/?~ä/Û„^¢^úÒkÄÄËË«©©I("„º»»#""”J¥p‹Í2gΜ˗/O›61L6lØpåÊ’·<»ê¯ÛŒ„ÞV„â’K­XùéÇÿ—š2ÉN:j•ê›/?xä/[µ*¥#w½U†áe°Õ{ÉŽ7,‹Ž „:::{z´ê÷XFGBnnn=]sõä·ó…»öì»TZ®Óéz>ñ:;¥¡!ÁÌvhhˆ#§ûÝv°ášËÑ!•þJ4P¯cCÌϵJ’’’ çÌ™ƒºpáBÒu)¶Âžzê©íÛ·ûøøÔÖÖæääÐ4]SSãb[¤¤Lºp¾€ÍfÛŸ62,œ‘šWâ 7¬€ÿ††Æ^V‰ãž´¬²rÕ{ví˜{ë-žž6"æZŸK,ökjna¬’¦¦æΖk®á½V±êulˆù£c%=ôжmÛ¾þúk„жmÛV®\i?!tèС¶¶¶ÇÜ2z‚ŠŠŠr)±tpìÜá,Vÿ«»Ó4Ž9Ͱk/ßTuõ f³¹âò•G[c5ÚŸ–ݽeëöÖÖ¶înÕ³Ûw èØv¯°ºú÷çŒAoàóx<>¯¡±iý†Í–ð¥w.ÚþÜn¹B!W(zF8r:Æ5—L&“Éd=]s9˜¥–¨'Ûvì–Éå2¹¼§×±æglY%–I%½f—¬^½zÆŒIIIIII³fÍzä‘Gì‡Æ7¾úê«l6»×艋Œ•àצ¨ õGSî¬SÔôMµyãÓq±±³n—>ezHHÐ€Žµ°nÍãsæ-´ŒÚ¼~ðåm;v…FÄ-^²lê”LK´­Ûäáî>)mêô™s'ONãpØŽŸÎ–k.³4O]V½Ž 4?Îo¨ßøŒ¼žóÒK/)•J¥R¹ÿ~‹ÊØ çr¹UUU999Ì¿ .ìèèèèèX°`«tppš¦(Šúoè/ƒ‡:ì:F©ªª¾wùCEçóœ<ŸãÁë˜VÝõÃ7_Þÿئ^î@¿|ôÆîûY¯×õ®Ô¨ÕÇÿ÷Ÿå«6 eØu|Mœvû®®®îÎNéö{þpûh‹Nd¨ƒ³J(Š"É!þÌfÓ ãës¾°°)Y³ qûüœg¶l€¶è$JÂf±(’„ 1 Ö¨COG¥”‹|ý¨¡}8¾¤dõªGV¯zd ex€#ÂÃÒÓSÿð¿¥w.:s6ïùÝ;ln˽®·»VÝôÚòûÛÙ)µÄïëÿÀ*qV®zâÑG./)”µ7ÖW_¶¸k[·fõ{ïx¾ðBæät¾íA_ƽ.³ÝÓ½®­p„%¼§›Þÿ’ ­õÒ¶yG“¬½‘ ÷÷[â[6¤Äé°å8#=Ãa?¿ïÅ{ï¹ËÎá¶ÜëÚq»kÕM¯-¿¿w-Y|-¾L¶uûNhRH‰“bË0BhÝšÇëê²§gÙ9Ü–{];nw­ºéµå÷wëß6y‰¼RÒ§eÏαŸpa†Ág°VÝõɇïnÚñ²ý)j›v¼ØË#éÐùøÓÏŸÛ¾uÓ„éªÐï]ß—avÅ0”9-ûÀž¤Ùú<4›9m¢éá-§J¥~ç½|ûÕ—På0ê ƒ”ðÜ<²o™Ë<»NLhÚd$†×vÀqü…çwB-€+H ‹Å6tFƒîfæ{äú л€Aë•RH % %ŒŠ”àNQ$\/'P4…c05ê.u+dèúç°¸6ê.¥»PäøÌRG¥$"&±¬(¯[!§h ®2¸¶=Ò%—VUEÅO¤(GïwÌñYJygS}¥¦[éxêŒ9p …Q ¡Qa ì.Ì<)A±Ù6‡‹ã8ôtÀ•¡iŠ¢Ì&£ÙlrT”¾ÙlrÁ$X)q“žÔ(4UÕe ÍU2y'BÈÏ/ ",611…ïéÆâŒ_K|èÐÁq\G̲6Ù‘cÿQ¨¥ /Û¼ãÀæ,ºGÞÕyøû/q›ÅæØºÍúþ¼?‡ÁÁ³|úù=CŽŸ85,)Àx``ŸóÑÝÝ®>vò›äŒ)Ù³çõÚ›wúØåKEËW®1hU´íeœóÑíšš:éç³X,&dÑ’egóò”U°J°J¨3ÖÕ_KûêBhú¬o_qÅ¥‹.ßÁï÷>˜˜6ÅO†ªoh¼ÿÁ•aQ‚B£—Ý÷ L&ëetø„~ôÉg©Y’È[æ.(-+w0‚Á`Xó—õ!q’Ó^ó[¶FvÖ´ÿ~{ˆÙþù؉¸ØË.‚ žzzsDLBDLÂú [âš{0Âh\÷äÓLÊo¼õ®%>I’{öîOL }ô±5šRò;fYSW1yúl[&gÍ*)*`sy&xáÂÅSÇÈÚBËXñøêG*+Н”ÇDGoÛ±»oü³góüðmmeùÂ?,X¿a‹ƒöí? R©Š/äçþzüܹó¶2óÈʯ¿ñ6cO½ôò««W­´ìÚûÂKí…gÎçŸiniÙ·ÿþÂþr¹¢¸0ïÌ©cgrÏZâ¿úÚ›Å%—N?rµü"ß¿kÏ>hjtp~GÝ©ýç¿ßÞ¸íE.ϺÝa$ /ìxêÙç_S)¥ýö|BËK %’€¾qôz}jFÖÕŠâ^ñ«¯–z‹DL„ˆ˜ÄŽ–:G"$§fþpè¿áa¡ººúÉÓfö-5“Èý­üÓ²»9\Îÿ}ôé¾üÌ’rRÊäï¿ý***!TSS»ø®{ËŠÏ3)ÿíW‘‘Lø”é³™ø©Y_ÿûó˜˜h„T*›ykΕ²‹ÐÚ†=2娱ÓSG~;_¸kϾK¥å:!„Y[]‰‘ „›››Ùš·s«:;¥¡!ÁÌvhhˆü<öèÃ;wïC¶}ë &T* c¶ÃÃäR™%å°°PK¸%~[{ûôYsB4MS…ÁJQtpnËÏ׿½­ÙV„ö¶æÐðhjPË#­\õÄ£<\^R(ko¬¯¾L;¼>m¿ˆÅ~MÍ-ÌvSS³˜³gÍ4 ½þÖ[fõJ¡±ñš!ÓÐÐèççËlûû‹-á– „P€¿É…‚ÎÖzi[ƒ¼£‰éÁHÉu)á³cc’ ó~µ9öQp:-sºÉD "+½Ïãñø¼†Æ¦õ6c!—Þ¹hûs»å …\¡°:Ó“üÜSù¹§zÙK/Úº}§L&“ÉdÏl{n鋘ð»–,Þ¶c·L.—Éd[·ï´ÄxÅë7n©«o0›Í—¯<úØhjHIO)aÅÄ$J;ÚóNë»7ïô1¥B615ÓhÐ"+¯|yÛŽ]¡q‹—,›:%s ¹õo›<ÜÝ'¥M>sîäÉi΀»uÛ¶n‹ý2¦Î̘:S" xö™Í–”½D^)éÓ²gçdOϲÄò/k§MÉ\rןB"b{|ÝÂ…·CS\l ó Ì&ŠÅaõŇB/ŸìÙ9A!á¡Ö憼ÓÇTÝÊûþ¼ÃHapÚWUUß»ü¡¢óyP÷0šR‚b±9l.ïRṊŠâ޶V„P@`pÒÄŒô)Ó ƒÖ9uäÙí»6mxÊh4þuýƘèèçw€ad0opH³‰"ÍÓ&§MÍf±8†Q¤Ùd"´*%í¬·ÂÂB¦dÍ2ÄíósžÙ²*Fß*è¬WH %€”€”RH % %€”R2É=~.8{o³·-vä@ûÑúà`öbR%Áá–¥¬£¼¸` )ûø‡(:›¡•ÀHIÉŒÛûø‡ „ñÖ¢åk-áýÞxÌv¢õÁAd­aÑ FƒŽù·¹¡¤œNJz©†¢³9÷ø¡È¸äÖÆ ŸqÛbƒ^Wwµ´K)£)ÊËÇ/.)Ãåõ4:rŠž0©¹¾ÚdÔ Ü…1‰iž^ŽD (²úr‰¬³•Åb‡E×WWXµ5|‚äÒ6OO/„BÖ!p÷ìV^[Û™¦¨š+—¤-!q@ptü$ ÇBMU_.–u´²XìàðßàÐ4ÝXs¹½¥‘$;bILB*‹Í†¦#5Vb$ˆi·üáŽ?=îãRQ\;÷÷Ï»k¥·_`S}Žã–^³aÐë3gÌŸ¿depd\]U¹ÅC¨ý 5—I³ù–ۗ͹c¹^§í¿'‘±k.sù„Pcí•°è –]õ5F£aÖ¼»çþñ~Š¢Zšê˜•\«/›ÆÙ î¹uá}ZµÊ¿¹¾J­êÊšsÇü%óÝ=[k`yA)IJÏv»ŠÎæô¬9¡‘ &£^Û- —¶·mpI(ŠTJ;*JÎqynB¯a–’úêŠø‰™þ’#a0 ÔŸ¿+ÚL¹{ŠLFC—¬½¾ª|Ë).½—LQæºÊ2û‘Ó²nõò @™Œ†R(<=aEšk¯–ú†2 ()»p&zÂDÒl®í‘r`hDñ¹“á1¸\žN«i®«ŒŸ8à¸yxÆ'gÔU•¥L™méX ”hU]¾b AL76)µübž^«æòÝB#b¥-ÃUÈð脺ªŠßNa±XAáÑJEg?ö”¢£w 1 5WÎçþDÓ´8 81m:óÎ8":¡®ªüܯGY,Ö*cèIDATVpD¬BvíÀàðØŽÖÆÒ yFƒŽ/pNôúhT hp€ËBÓO¡º[Áåò z‡nyG—‰Î=~hÞât:M_{Ä2Y£×¬ .ÏMàá…³ØItj§¨W´^ñû†ÛŠ€a˜»§7‡ç¦îVœûõ‡œÅ):[låÊj †aO—'@ NÝÅ ‚`&ðôæòÜhš6èÔ/K"nOž›ÎÂI³Y¯S[f¬€«rí®×ª‡Ó*A! ³Ú¯±Ül½n]#¡7¿eôûñû†ÛŠPsµ4,2ž¦©ªŠ‹¾b E’vre5¦i­J©EÊ>ZLkU ­%Ϻß/¢^§ÖëÔм€ñ…ÃóÆäT+¾›Û…üIúú&¤N7:±3@'ŒI) ŽŠOq†™½V­„Š’Á`Ði : Ô8 °È %€”à2ÀÇò!„hÚd$LfMQÑc-÷†ãl6‡Ëã!„A B ‚”Œ½¶K!momd>Vc†%† <…Á"?>_@Ó4Ô Ô HÉ(`65êêèØdOosÆN_þ/?.¼wµõç1E¶5ÖŸ?“ê5“ãÉ3 PƒPƒ %£€ÑD´4ÖÄÄOòö pjž¢Ì&Âê.q`h\Rzõ•’i·ÜÆŸ”@ ‚”8KkUÝ^"§  HkŸ0xˆ|µe…8ŽC B ŽN7 ¤!š¢)ç´Š{Ý0if~:ª(ï¸^§±„`Q455RôûL£)Ф(R§U_.)ޏzé7ƒ^ÇZ ¡ƒôc3‹ÅÔW—§eÍ¥H³—·ocÝ•˜ “(’¤I¨Á1+%ƒv¬åäXÊÕ·,õÕí-õ¡Ààˆð˜Ä~Çû™F!„â’2Ì&#EšÙlvTÜDŠ¢)Š¢l,m©”wV–!„â’Ò½}ýB]riõÕ’ô¬97¿GpÓ Ôà“’A;Örr,Žxz…·µÔw+eéÓæ „._ú×Ú ·>Bô\È®ßEíj¯–&¤Låñ—‹ üÃŒ„®¶²46!ÍÛ/¨[ÑnÖ` Ç^§—c-[Þ§r Nhi¬Æ0<6!U§Qµ4Ô ‹ONùø3"b[kHÒ,ŽNHa×–û«Q¡³µ)"&Ëã#„"bj®2 ÎVø°?Ôìµ» zmpDœNÝ­Õ¨ž¢Æš .¨×tJ+ìÝ`nnýB ŽÃ\mv¼Oá,άyw'¦f]-/"Ijæü¥‰©YµW¯}!½N›uëçþñA„°¶¦zfù&[î¯FVåqÝY»§·N«²>Ìí°¿ŸUxn¥´]ÖÑÌw¤¹±®2aÒTŠ"{.p7ŠÜäú…t^«¤í- Ù9îž"­JQTðkBÊT­º !?)“"ÍB!i6%fdÓ$é!ª»»"f%ç䌙\O«R„EÅ•^È‹MLÓiº¥í-Sf.à ܵ*EXtBé…ܸ¤t]O7Š$q‹Ùf±X¤Ùl?|Ø©«¼dk—80ÂjxTÜÄ‹'hšJH™v¥¤@, &iúÄáÏi„â“3D>âÑm7¹~¡ÇŒ”Xõ>…Ô]èº, a!ÏÙ¦iÊâßSà!T):(Šâòø„AÍÍ• ÷W£c±XI2]6òú†ðaªeÎºÃæã½²Ôj¸_@ÀœEîBu·ârIAvÎ’s¿ü8!e*_àYqñlæŒù¦Q[y“ëjpÌH‰UïS¿_ÈcÔ}}eé4ªëî¬ôÞu7W6Ü_ w¡F­ôò#„´j¥À]h?|øŸámõvŒgÛ·«¡KÖZV”èîá­×ª¯õ½Õ*§¨[Þ>Šíï&×/Ôà˜+a¼Oµ5UÉ;›j+òO|çøà|yQ.E‘&Q[Y »îæ*¸´ð4I’&#ÑÓýÕ¨àR_}ÅHŒ„¡¾úŠP¨ýðèjÓ6v¿¬WHÛ„>&!Í Uõì{³X£<±è&×/Ôà˜±J†â}ÊGxáìq“Ù$–'¦^sseËýÕˆby‰ÈlXæ&†Dz]QÁI„$8Â2Èo+|„¨¹Z5Ãá}sCu\bi÷…"ESµUe&f²Xl^Þ³ïM’æÑm#T¿PƒcUJ,U…a˜$8<26¹§÷)tãL![Û1‰éAaÑ|'†aFB¯W«B8ΊŠKNΘñ»û«‘(±3i*"6)"6Éñðá|¤Ñ4Ó+ Œ«½Zêéå­”w¦eÍ5:š¢ìx_Æ1|rvŽ—O€NÝÕ³ïÒŽ’AË¡ú…ÃVIÏŽŒUïS½&XÝ6èÔ†>Úr5Þ iŠ1þY8“ÐP{%cÆ<ƒ¦›4›B”}Gî4ݳGÍô½G·8ýº7ƒtòÙ0¢Ï4KkÃqzîôQ¥¼“ é’K óŽ;[oh¬’±u‚^ŒfܶØÎ¢ó£c›ôݶJíÕÒ„”©©Som¨¾Ìáòišª­,MHóö B˜Íg¶78¹ÇEO˜Ô\_m2êî˜Ä4O/„EÑ ÕåmM4¢C#âƒÃ£™È‘qÉ­5„A?ã¶Å4M7Ö\noi$I³¯X“ÊxZÌ=~(<:¡¥±ÃðØ„TFÕÒPƒp,>9]äãÏȼ­ûf†yFþâ-dùAuEQUEIšÅÁÑ )”™¼w<}ú\‡Ëäü™ŸÒ³nµøK€š%ÈÎô3» zí5_|•ÀSÔXSÁåñâõšnäL“Ù†óe°A¯Ïœ1ßÓ˧¶êR]Uyê”Ù¤ÙÔX{E«UgÍY$pVVòžŒ{ #AL»åž"1޳JÎT«º²æÜáîá]v1·¥±&ºwÝŸº[q¹¤ ;gɹ_~œ2•/ð¬¸x6sÆ|“sÌŽæÙ®}Ýqy|ýuWõ½Ÿ®¿Hçry³o¿—/pï7Í^é;~ #è4*&Ÿ„^Ïáq*(,ºöJItbª§—7ÏÍ]¥è€4Ò¶úvpÐu_|eEùaщîÞz­úÚè‰Z%ðõôÚç:RÒIè¥ó¿ÆÄOB5Ö]ŠKî'04¢øÜÉð˜ \.O§Õ4×UÆOœìHâ=ÍáØùr´¼(7*>™$͵•e’0Fé<…Þ4¢ë*ËÂ"ãÌ&bŒ~µ 8Í`É FKBH!m7ú˜„4ƒVÕsô„År–o_F<¡Qšë«ŠòOP4™ ðYú8‚Ãc;ZK/ä :¾À=<:ÑCè£qÀ¯ò@ 9}ô?f³Éêqà…³ÇMf“Xœ˜:Ýx½/]WYÓן1àœXf”0Îöb¸æjiXÔ‡CôÍ Õq‰i¤Ý÷ÁMÕV•M˜˜Éb±5zyÏÑûŽ%)±TR¯Úê᪠‹ŠŸ0i /@ÒkU}#c& ŒMæ¹yà,œ4›ïå=£YÝväÀžÿ†FÄÅ%Mæ <1 ë5ø:ã¶Å>þ!AaÑÌ^#¡×«UÌ.Âh…±Ø“‘€»tLàœ“Jhšf:Ý¡‘qµWK=½¼•òδ¬¹fBGS”þ8Žá“³s¼|tꮞ£'!­OÜ1c•XîÉ^7gi¦«—1Ò÷5Š^§Ö÷yì÷Œfk»ß{þ«×ª9³U^¦‡Ùlnm¬IϺÍ®ÀP¥„bzÍ,ˆIh¨½’1cžAÓÍx ïçÍ M÷aFOœªt°È@?v2†aQñ“D¾j¥.0D«Ä¢8ŽÇLHÑ©”ŒŽ ¿%p6@J²“d°†c8ES¬1 %¿³Goø~¢ÌοNH àÚB‚» ½4Ý]N¾ŠZ—¼ÍÎ^ƒ^ïî%» a‘`ÌÃasB¢«¯^ê’Kyõ ‹cõ‡³Ø½¡£µ>.1Ý<6Wc«p )áñqIéõUåÚân§U“ ù'­?Ï1Ü]è?1ÓÛ/`ìz )\¡‹Ãç <„Þ’(§]ÕD8<¾­½E‘FbìêH à"Ð4m" &©{Îö-ïðc%ÜD)Á1|¬/c €ã tG£º EÝ ™S-ÀÈ¡îRº EŽ/Ôæ¨”DÄ$–åu+äcÚUŽØ#]riUEQTüDÇç¹`òŽ&£*åMõ•šn%,#. Žá¡0"*!04Š ”c@JBl6‡Íáâ8=pehš¢(³Éh¾þ‰Pÿâ0 ôÍf“ãI0Žl¸€”RH H %€”RRH %€”€”RÀVœE :’$¢]´„Îb¹ Ö·4m2&³‰¦(W¼†ãl6‡Ëã!äèÊD %À`ÐiÕÕÕW~ËÏ%ƒ+–ãñxÓ²gÅNHvssï»l A¯ml¨-¹XØÙÑæz…gá,_±jú”°Èh>_@;¶¼+H 0`½®±±î|~îĔ԰ðh_€¹Öªz4¢‹ÎÎ;ó‹ÈW'ÖßèéÊl4¶··þ–váÒåáQq,ÛÅ–$)²²¢äèᯄ޾¡¡ÞFÇ|‚”Æl6åçþ’<)%2z‚´­Q¯Óд«ù^BaXXØñ¿OœÔk—ÑD\,,XtÏáQñ4MÓ4åb…Ç0,>)Õh$òN_þð:RŒÜcÛh$Bã;[²æ,rÉžüá w€°æO¦(¹´#$,Úå4ä‚C£~:üoǧ‚”ƒÇp¾›»A¯¥]×™ †a6|JÑ4p›viG.,6{@¶&H 0¨Û Ç0 £išviO&ŽÙ,>£(®lzÒ¶ŠR £U‚]ooÔx(¦ƒáã¤ø %Àpÿ¿Ûú7‡H§éºÉÅìN#z¬X%.Ïd$n” ½˜ƒÙ®À žWøˆ·œ#GŽfdNùøgdN;zô'§*æPŠäÈьəîžñ>ýôS—©e`hkš‰ßo¿_³î¯¯x±£µñ•/®Y÷×óçÏ_Û;b'½áןU‚èÁd#?/ÿ±Ç{aß^¥\vä?üzúôM*Ë`Ž¢Á*nÂóêzgd~/¿òê®;fÏžÅåñfÏžõÜŽm/¿r¾>GÙ(ºXŸøæÛïŽDzÓjñ‘ìK/¿¼wïÞœœ—õ>`Âkëêî\z—·¯Ÿ‡ÐëŽ?.êJ™pÿÞûDÇÆ <<'O™Z\R„M¦›6‹$?xíʘIòÙmÛƒBB„"ïå<¨R«{]±þp¤q«Q«$¿àÜ‚y9–Ì›—_p®ç3öÈ‘£w.½çÕW¬}bõHZ%¸íâª\yy Ìï~ç’¥ý˺–¦ÆæÆ†¸¸¸M›6Y²ñëé_Oÿrª³½mñ¢EO¬YÄïÙ³§¢¢âü¹s•W®´473û÷¿XTTô[AAscƒŸ¿uë³C´ãl†].ººº|||,ÿúøxwuý>ÔúÞûÿ8ðÊß¿ùúßéi£5ì:Èruwûx{÷ /¹XÄl¸¹¹íÙ½+6.Þ²ë×^÷ññF=½þ©}/¼À~öù?>z$88!ôòLàGüãß3{÷>?yr毿vÓj¤jg$‰Dr…B,3ÿÊJ‘Hd9×o¾}ÿòûÒÓÓè›U̾á4BôÀK/òò’+b?¿^áùÏnÝV\R¢ÕjÑõ7DÌ.o³í&p3›ÍÌv{{{DdD¯ ´¶¶¦¤¥#„hš¦(ªg"ô`*І0æ‡]§M͢îëŸzrçî=¿œ>C¿žÉݵçùõO=iD :úãŸ|öùË?8BèUL«ÅD²›6nxvÛöã'NFcMmíªÕ3὞Çãóø¼ºúú5kסÙè•+fãÁîêé Í--Êîî›¶0«V=úÄÚu5µµ&³¹´¬üÿ<äaWx Œq«dê”Ì×þ}ã¦-’ ° 7¿ñÚ«S2'÷|ÆJŽüpøËýûÅŒŽU2¨²O›:õ·ß|æ™­~â€?.Z¾âyóoÏÊšö{â6¬’g·>3!>>3sj„ÄÐÐ&pÓ†§§ge-¸}¡·ßŸÿ¼bÑ¢?ÞL«“w4Á ­ºë§ï¿ºuþÕ—/fÏ]ì’e<{âA;;Ú||³V¥ì[ü‡×m3›Œ.\ËjU÷w_¾×·ø0ì «Ubéà¸øç|¸­p—ÿ”‘¦( ‡—ÁÀH•\7})ŠÅìNÓ”k—¢(øœ¸ ëq!%v iÚÕ¥„„E€›ð¸¾fúR¤ ßN´¥06ΦHҥˎÌf#€>€”ƒyZ󸼊’s\.·0︫Òd2ñx|k& .òñm©¯ôõtá:VÊ:E¾~”ÃãA %À€a±X‰)åÅç‘PÈåpw•2†ì£Éd" SgÏ7›{¿¦á°91ñI—.œMN›æ-da®6£‚¤)¥´­æJqÆô9f££ÎIàe00˜~4A]JyyQ¾qàkêŒ ¸\ޤ̙aQtê¾Ë,ÑaÐhTUeU] ÊåÖ‘Ã1\(ò‰Ÿ4908Âp£ã`¸[ŽsÝ,Ç•õÒlÒÛ¸‘0 csylï&,5:e§(ÒHð—RÀp<]àRH % %€”RH H %€”R`—ÿ¯ž.½4= IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_add_track.png0000644000175000017500000000245011273045225025224 0ustar julianjulian‰PNG  IHDRP!Á »žsRGB®Îé pHYs  šœtIMEØ "36„¢ºIDATXÃ홿sÜDÇ÷í®´’ïι‹Cœ±&8ñ%ÃLÈ€S`*:(i))¨èø(陡á`†‚‚’†:HŠ0ŽÇvHÙñù~étÚo)–Üç‹%gÌdr¯;i¥Ïûêi¿û´Gñò&%oXÌÏÏ¿ÞÁO?mŒé&ÙJt­µî PJ:çÆ/QJU«Õ(Šžï?]Œ1V0•óaåβŒ1†á”+9WJQJOæM)BpîeYº°°PPðù°r+Œ†˜©§ºÝnÇB÷ÓÕÄZ+¥DÄk×®I%)bñ—í|X +_pÇ–€Özü ø¾w±ÑB†RzžEÑdöÖ('øU,Îy¥Rq ƒ 8 +_ðp8ìv»I0Æ´’[Û{Ƙæõ«ÆÅ(ŠŒ1#³áœÏ`¡SY㡵v.53+h¿ß—JcFÏ›âû^¼ÿìþS‰„ù×­wokÇ“ ”""aåOeMÖZÛ3°òGQtõíÕÑS猡Eð`óþƒøž±äÎúí÷Þ¿CcZ)—"!å¦ñ‹1&„ÏÈË÷­aÜF©z9¬+_p½^_^^7–­‡Û”ÂQëXm i·»w÷†éðF³)‚Pkåžú¨Åã$k{û±A@þÕl­1V›'kׯ‹@hmʲò;ë—R!‚?ÿ¸ûÍ÷?7—„ÏkÕ òÓo{Ù¯Z‡_ñɇÎcÇ›‡â1ɺ{ïÛ~¹P¿4¾[KŽ^|õùLjª,+_°Ë@)W7F=öVÅRlÛD÷p Øô…`|©J|εRn¤›f„—›Ä,Æ(ÍÚíç6¦Ø Zc8çÆèXpú@¯×ï dóÆM¥0ÆH¿Û¶ˆ»;¾ûñwmì—Ÿ}мù¨Ôê–€³Ïóvw‡>­ÕªÕždQ€A¿›eé¸{Yk}?¨,^@´3° 4Ö"""2ƃÁáá¡¢R ¥ƒ¡Ö‘P¬—¤G»F£V«cŒ1ˆXöãd˧”Ø—¾e‰%©Ä/Z³± õRJ©8Ž9çBˆãvÛf«M븻·÷w&e–eBˆZ­6ó§ÌTÖÉÅÉ5•³±Š v!¥ŒãØ÷}Î9òéG·ˆµôÙþ>"fYvùòeÆØ)à ¬‰o gQRÊÙX%c8çQqέµ°|åŠkcˆ¨” Ã0MS7µŒ1EîŸËr¶?êŸ}f/hžnª„a¸¾¾ÎÛÙÙ‡œscLkkk.!­õææ¦K7$‹•+e‹ü*cÌÃk6›gaå  .\6Y–yž×jµÒ4uIPJWVVÜêI’h­=ÏÓZ–U[„EÑYXù‚)Lq¿$Iz½ž«ð„¯$I"¥äœS(=‡Ï•#€t:Ç·2¥ôøžK:HÐhC,"J£·lŽÎÊlˆˆV„”Ñ|>¬œÆ#˲££V?I°ÌÞ…ëo«•ÊÒÒÅÑ6E‘-žs`åvÞ;Û2Ã9÷<ïäFÔÿË‚ùKsÁsÁsÁ¯SüÃIu?]RâIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_composition.png0000644000175000017500000000435011273045225025654 0ustar julianjulian‰PNG  IHDR¼]Á§ësRGB®Îé pHYs  šœtIMEØ #6a)a¤zIDATxÚíœYlT×Çw™{çzVMì± žxÁl¡6Mh€ÒFiUEðЖH­µMU”¤ªZUꚇ4QúPJ”.MÕ¦ ”Ʊc¤&Æ1„ÅãØÆ Þ—Y<ž;3·¶i¬¦@|}!÷/Y²5cÿùÎo¾{¾ï0ÐsÙÀÖ5u©±U÷>À`o‡Œ[\¢[6ð¶lÙÀÛ²eoËÖgøH4Fk[­í\îìFדvDÿNŸåPe {ߨdph€ßþî–ñ7åeph˜½oTr¨²††Ógo»u?é?&tË](Š‚ßç§§·‡T:Mhnþ¬MæÕ¿ïãõU ˆ¤’:¿ùÕÏÈÍ™c‰@ÿéÕ}ô “J§ÉÎ °nÍÝü«¢†<ò°%üMyiljá/ÿ¬@EîÈò³lébx€Xl §S¥þÔY”- £³›²Òbt=‰Ã!›>‘tÚ 6ž"0'Q¹·ü.TE±L  C…Hš¤®ãóùp¹=–ñ7åÅçó‘,@v8(Èñßôq~ñë]dß‘C|\¿IëžF‡ùé¾=³[UUÑõ$>¯Ã0Ð24QD’¤YY°ÑÑ0gšÚÈÌÊf˦ϳlÉB^ØõgËåÔ2ðù³ðøüˆ“1RšeüMy% ÏÏŸ…S˸ùqpûÉðÈÐ2pHÒ§ÿ‘%DéÆ1þÄ©Xsª¨Šƒü¼\$ÉAðŽ9xÝ¢(ÌÊ‚]jí@’UÊ—/¢´(Ÿ—öìÇ!–J”dÊÄŸ L,(Z§g0åEDʼnCQ¥›ÿ¤‘X,¿uÿ­S´vvuSUý6ƒ#aü™Ùxý>´ §ß?ÏÉúÓ'qáb /íÙ‹ª:¸ÿ¾•œ<Õ„`©-†õ¶I¯ÌW=ŸöwÛåNë_}äݽCܵ|Å%ó‰DÂôöôàñzY¼t._*ªèëë7mµõgd?´A00PT'Šª’N§- –8™éG#ŽÕÖ™>þ±Ú:F#‘i^ÌTsK+[8ßÔJUÍ;$tÝZÀ¿qð0YÙ¹dÏ™ƒ,IÌ-(   …(,,Äãvãõz™_¶ˆãµõ\¹ÒkJàú‡)*ÌãÔ¹‹¼¶¿†¾þTÕI,®óÊßö[øÉ½ücOíäÙçwS[gÞÓ±¶®gŸßÍcOíœæÅL•…hºÔαº3Ì›—âpX§KóÖÛÇÈðdR:¿”Üœ’É$’$‘““sõ=Á``0H8&‘HPýö;<ôµ¯Ìx׿Çßßñ!øGØóú[H²Œ`lÙ¸Þ²ÀOøùùAA$‘L™6v"™Â—™M^^Î4/fgø’PY¢µ½ƒyÁ‡þ†H¡µ­›U«Vàóz‘$éšòx<Ý¢ùR 5GޱyÓÓ‚xüD¹s¼8•x,ÆÁ7²cûƒ–Þ3ÿü‰ïræ|3+—™×ó¾§|šÓÉ’…%³6ï’¢.—F¡Iç77ü‰wO’°råJ×ù†[Z訯G›?Ÿ’ÒbjªßdcúS:‘HŒ ëV ÉnW†¥AO¥&2ºSUM…}JsÊËl¨ÐÄÃʾùR+kÖ®GÓ>ºol4¾ü21Ibñ£Zºç•ªàrG'…óæÎødö|“ÃGêÈp¹1Ò)~ùÔ÷ü–~¢áH”sY³r™©ã×Ö5°hA)·ëª—Û]×M»ñxœp$B2™¤§§gZ×#LÒYUÅÞõë9¸cŽåËùâîݯ]K<§£ã2)ºººLÉ–±q@vnm_ýññ„µƒ?yfñøÓ;yæ¹]Ôž4±h=ÙÀ3Ïíâñ§wNó2Óèïeh°ßºÀ':¢(!Ë2±htZ&8õâ‹ضta!ÔÕ±áÉ'ÑTuâÑ!˸Ýn0åRÙÈh„³Úp¹Ý|yÓ:ü>/üþ‹?Qórñú$t‹V=…× ˜—;ÍËLë'}ƒ'Ù>k1¿î–ÆáQ@€;‹Š¦½–·u+ÞÕ«)Z»áSÄãñ’6Rdúg~[qú\Ucãºå2=üñ¯p©·‚>KE«ßçµö–FQ~}}}D£Q¢ÑèÕ×rÊÊ(þØ' Èç'3ØLêýsØóZ>¯‹ åwqú\ ²,ãr»í¢õ:E«sò‰<›E«¥€—$‰E ðAË%ÚÚÛ‘åë©Ë²Ìèè(ÙÌÌÄñ§PÛÜHt,N:BujH²Êh8bÙà§-YÚþ¿ZP6Ÿhx˜AƯQ†A,#‘HÐÖÖNsS#ëוÏxKR–e–/)åô¹f*kÞep$Š¢ªŒë:*Zx#m{±ÚÀår±yÓ}g‰@ ‚€€`y(n%¯3’áæä³uËfjªS]UMWW±Øý„Ãaéë룿€}{ÿÁܼÖ¬^eúØ£ÿ~‡~·Š;C¡úH­%}¥o€øXŒ±±‘É:(iÂe©Õ”—H4ÊØXŒøXŒ+}·ðÂÇý"¦ÑÑ0õï5ðA[;Š¢‘ ( ‘H˜á¡A|^«WÝM07×R÷½?nÆ1'H¥ Réî A°fö4 ƒHl I”DUUn+à?ö­.¯×Ã6ÜÚ±1‡†%™LRÊ'+ÀívÝ6 ßLÝ*à‚€ÇâW2L~J𦑝iäçåÙ4Ûºýöð¶lÙÀÛ²eoË–uõÜ õBÚ²§IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_duration.png0000644000175000017500000000723411273045225025142 0ustar julianjulian‰PNG  IHDR|äðvŠsRGB®Îé pHYs  šœtIMEØ % p"ó.IDATxÚíyu–Ç?™UÕY÷]]ÕM´Í1Ü— """:*ˆÎ0ƒ:³¡«â1«†;k„»ÎN„aìîLÄΌƬîºê::à4(—œÝÐÐÚ4WÓtCwÓ4U•ueî­-Í€NCUe©ùøETUVþêå{¿÷Í—¿ßû½ÚZŽªè¸8T•DJ‹ûi®“Á®`ôÈáüyÁ Uaê5Wi&KYÿŒÆ<^~}!Ü¡|¿æú0 Œ+Çæ­Å+¸÷®;ÈøuËA9ºÎ†q9 PÖóY$*óþšÜrã¬V+ÛwÔrýµ½Çwó‰VΞ ë¾~ÊH¸H(?ˆÑdåù—æÓÖÖ¡¹NŽ5·rۯ域˜ËÛ‹VQ]»G3Y:::¹åÆk¹ùÆ)¼³x²¬}*lá&Ì3³n™ÎúÛt'ÊQ˜ ì6+¢(ö4«ÅÂÎÚÝ,Zþ;jö0dÐ½Ž‹¢H^ž ›Íª¾Ž @…™7Mâ?ž~„¡?Äož{™D2©©Hñx‚Š60¨¼„}òaÞ|·B3™¢rŒy W1nÔ0†HÍní3š<.‹–ˆ,Ç)..ÔÇpŽÂëucwØé:îi‘h”¹÷Þ…Çíf쨡L¼r]áH¯ï˜òòp8ìY‘QÏÃÿžAQ‰8»•‡îù1¯Í_²÷>â§wÜ¢™L¢(°aK5ý‹ ¸jÜp®›<‘O·Tqýµ³.‹Õb%™lç•yKøÉm7°£z·æ65|0WO۪ͧñºìú ÎQtvvñÔ³¿GQU #AÄ$IØíN,V+ª¢°xÅ'D#a‰8Šª &“9áµ~«Gø9« ªjz}ï+½×¢LÄ{Þÿ|ÎLÖo®"k¦ßò²ú—òÎÒ¨ªÙÃô©WÓxè¨&²D¢2=8‡Ò¢–¯^‹Ñ¨½‹;ÞBýƒÜ3ç6DA/¢—³Á”ª ™­x¼ùøýxý!\îf‹Á !ÍXmN\?^_Ÿ¯¯¯·ÛOžÙ¦Gø:2ƒÔ9yæfIbÔ°A49ÆàWh4eaçg³ofÝæÌ_´Š{~z+v‡6‘lÇ™3¬þh÷ýl;jê9ÑÒšS:Õ»°fýVFÿ>€sñx‚¿¿ûv”•œ·V'p²­“d2IAÐÇùwÛÚÏÐÖqñµ´?¾ð?<òÐ=¥]b±ÿûÊk<ñø?è~f"|EUQ”Ëoê%ô“öë9ï}Iq!É„v›‰8¢(2mò•üúŸdÙªOÈ÷y5‘Åí´³½fï¯gÜè¡X-RŒ?…Ù³¦#ˆk7m×2WyBQqX­x\ÜÎs›»UÂjÎÃí´ŸwÌÍ"áüšEÛáÆ2÷áG‰ÅbÄb1æ>ü(Ç Õ#üŒ¥§¥£·ôô“>D£2>ŸGSÂÿŸ›Çú9k7h³=~ê5ã¹õ†),^ù1›+k°X,šÛ§µ­ƒÛêxlî]T¬þXwÈœ b)p‹Éȱ O›¦RIbñØEû½aÚTnžù#~ýôS=Ÿé„Ÿ (ç´t„×¹Å÷Ȳ¬i¾y*Õ[!ù~¯†²$)-)à»g±`ÙjJûhnŸ‚`>g#2 —½ÏÀ²bÝs60ìNЏØWRÎʆM•¤•€ßƒÃñU Øe%YÛå÷%Âá«×¬çä©ú—ôû«ÇÙhTÖlÑ–sžÀäXŒü€/žÂ(ŠÒ½sÓj&Wʬ^³ž–Ö6ŠúR¾ßr\äa5³çešðãñ8O?û‘X‚͘Ƥ«ÆvË+¨x=ÿùâüò‘¿cÜèáYÕó»KW±¸â#nš6™§Ÿì^Ñ^¼üCÍ#|Y޳q[5mgåûQÔìþ²•kXºò,6F£‰X¬ž{çÌè9 ²j§Ïñûÿ~ƒ”*"™-Ôî=ÄÈ!e½¾sìx3ÆÉÞ4Ž¢PY]‡ ȱFÑØã„v»M3î8ÖÔŒ,Ç8|ô8×|1‹cÈ‘(º¡ñ¿{áO¤T³ÅJÝþ# ,+ü╤­­ŸÏ›Ñ'ÿ¾ÈdT.É,]´vŠE’ˆÅ.¼0k6KYÚ_Ñç+>yªŒfü.?‰sÖ &ŽÉÆÊzì‰8»ê?Ë*áon¡bõZž|ü®;œd*ż…+ð¸i‹úP•îÖmjáõw?DM˜-Vš:) ºúÜÏ¥¢jç.V}¼•¢Òr.Š¢Ðyº ·Ë© I„ÃQþøò[8<ù¸=~Œ&]g:ñxzg ,/ËšLíí§yéõ·i<ÚŠÑh"àu"Y$ÚÚO ph@øŠ¢°xùjÖmÚªBQaQI$“8Úï´Ê2Ï¿4¿—ÃgÏ|Eªí,\²€;gÏ$ h+‡wξ UUy÷/+AM¯\íÔï;@W8Báy}vtt²{ï:;ÏP^^z—¶±jÍ¢‘(WOÈN€ÓgÂ/()îG$–â³Æ&’©Fƒ³E"O2c0:d`Và‰–SÌùñ ®;œöÓÌ[ð ‡ò«'îO߫З”x9gÞ_ÖâòôŒ—%K~õžýB…ä‡úa±Ú£l’ÈÐÁÚl°Ú÷ÙALV'ùE8R©$©Dœ)WÕŒ¼,]Eó©0Á‚bEÁj7!»‡Ý¦IuÓªê]|°n;.T•’’&£‘P0_sÂßw ‘<«“üP?œ./©TAP¸éºîÇî‚`yݯ ‚örƒ€ª äåI ªi“«n÷^^z}!ÑX÷?ã=zÿœžc;jvóÚ›KˆÈI%ÅSÝÛslãæíüßü¥äY¬(©$cG ËMÂE‘|p+Öl¦¦n?/¾ú6Ó¯›È–ª]xn¼n<#†”gu–õ/fg]·âëê?'ðñä/î¡ ”ç8wÓÕߊƒ‡š±8<½£ª&™0ªF6S]cF ¡¹­AHÄãLŸ4Y³ÍËK ¼ˆ¢H*•Äb‚[o¿Ž~Ú‘˜ qº<Ø.n+׎‚Á`À`0h&“Åb& b³¹TVȬ›&‘K(/+î¶£ÁÐcÇ3&SìNíõ¸Ý̾ãæî©;'äðºÝ(ÀìÛ˜V¹Þx§‹Ý‹ÛoA–#„BA {êû˜m\> ±h¿ï«õ ·–|@¨¨³ÅFølWÖnäB[ËÑËbŸæ'‰Ê1 ˜%ív%žî좹å$»¢Â`z¦ ºNó§W^äêÉSp:œäõáú™eŸÔbvø±Xl‰3²ÜMÈ×÷é”Ë–ð/Ïþ𙾗2ŽDeš[Ûñºxr¤ðÖ‘¦V$ÉDÐïÑ\–Ó]<ÒŒ$åQÚ/ˆÝ¦ýF«d*Eãá㤕þE!Ìæ¼´öß°¯†ñSfÒÞzyÿ¾öù¡ãX-f ƒ^Mõ¥¥ÿõê;œ‰¤°Ù,\?q£‡º×^xu!ѸŠÍnåú‰#5ì«™g~÷2¢ÉF^žDÈgã¾;oývþw_þÄI}'ü/ÑÔÚ‰$™ð».=潊K'|:2Eø:¾}Ð7^}ýýƒhÀ`/¹´Ba~÷Âñ¥–SƒhÐM¡C‡ð3J÷¢H BÄŒ”*þ[ Çc ¾qëµ:t|ôj™_“ÑÄ„ “ØU³“x,ŠðE‰…Ì7H8Êö-Ÿ2uÚ-$ã²n:tè~Æ_’•0í¦™lݸ–S­'H)ÙÙÚn øóCL¿ùvŠû—#GÎêÑ¡CÇeáÿκšê+”IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_dynamics.png0000644000175000017500000000667311273045225025132 0ustar julianjulian‰PNG  IHDR# YÃ7sRGB®Îé pHYs  šœtIMEØ &#qƒq MIDATxÚíyp”ç}Ç?{iWÒîJ«suK !B„…,dalÀ†‚!uñc»IZמ¸Í´õd:“ÿÒLgÒÎdÆ“4™4Ië+Žqh—šÃX`! ¡{ïK×ÞçÛ?$4nk$vEàý̼3»ïh÷ùêyž÷ûû=Çû®Äe3ˆˆÜáPp$Œ‹‰êê$R)r¹‚$¥ˆmñ%‹U r¿ð{áRwv›9aåʤ22³s©«o dÅJTªAŒù¢‰?—.uñÜK¯â÷̈"fF""B,†Ãjeíº:”J%J•*á”*%‹©T*6È—É(Å*¹Oíˆh,š°¡Ùÿ2𠺬å‹f$""""š‘ˆˆˆhF""""‹FœÀ¹gñû?݉ÑheïÎ6òòrèúp8]üשóøü>ž9øIII|v¾‡Þþ!ÖW¯bóÆÚ¸k0šmœî袸HOóæz"‘(]—åvµ£KOÃl±súl¹Y™lkÙ,fF"ø¼}ô8ýC&žÚ»ƒÓ]Ë®'è¸ÐËÏßÿOúGZv8凿ø5Q¤46¬çrï5º.õñáÇgyì‘fúGâ®Á59Å÷ôú<=£h4ʯþã';¯ðX{ '>=Ï̬‡ïÿø=22³pM»ñzýñÏŒ~ô³_¢JV1^<´‡ÃO?É™s=ñk'³ :…7¾ñz}ç/öòÆ7ž§´¨×ä4ãF+ …‚Ò"=Ûš7ÓÒ´iy³"AàÒ€‰Õ+òñúüȤ‰Ý+l²ºP©TæåpøÐ>ÒÒ4L»}çe“©KçÈˇâ¯Á>Ea^r¹œoÿÕ+Œ¬ÈärJòsi¸‘Ö‡6a09ÈÏÉD.“ñí¿þúm6]Tf …I ¶fu ³&‹ƒæÆu( tZ-n—h4J(aãú*$ ZM 3³Ò´Ú¸TØôÌ,Íu¤iRðx}Ø“l^¿†” … Ç—ðÎlµ¹Ø·sÛ¼.5n·;á<^/ jba¶6Õ3ÿ$F³-õÕ¨TJt:-³îø “ÙÁ‘¯œ›òyÙõd;‰ 05íaÂì"99AHw³© €0ÿKÁfŸD*Ðgi).È¡¸ '!÷›ƒA,vöI/¹9Øì.¤2)ƒ#F’”)¤ª“ñzý¤¦&ÇMC(fzÆM ,P”ŸM8&Ž`°¸HIU“™™N8Åãñ2ëSWšG8F¡PÜQ9‹ÊŒŒf+ééiD"1ffÜdg¦cµ»È˜?ß}„ªÊr¬vu*‰„˜ àtNQ——J›u#“ÉQÈç'kn’vršq³³cuª’3=Äb±eÍŠ¬vCvTªd” ÁP(aeOÏÌr®«—Y_‰ Ðýy?ýƒ#ôJ¥M6ìNg\5tt^äN¤Tq}ØÀ…ž^~òï1jt‘¬RñÓ·MwO/ÿöÁqIJÆV>ë¼xÇå,*32™Ìx|ô_á\×ê糞·Ë}C„BaÎtöð7¯½D÷•¼þ }׆é¹2@MU9²ù‹à®§þ&+¡H”+W ¤0•R‰Ã5C(%C§åÃßœäÕ?;”ÐÎl·;A&ãBOÓ³³È$²33ªatÂHÞüo0šÉÎJ›¿Ðœ¤kæ¢ê䌗¾ëc¨” ~÷Ioüù qÑâpM¢Õ¤ÌEÝP©äF#àóùØ»c+ÿðÖ»¬YQÀ®ö¦%•%1A [|óùÀŽÙ …Œ¡q™é©deêÒn¹9Ù´·næŸ~ò Í5ÔVϱ©ÙS.îi»†Ö­¤¤öñ›Óݼzä ʤ$šêøÇþ’•¹<ùèn’TÉ=~ž#‡žBrç™Ú"3#ok¤çJ? u5ìh{ˆ@ HjŠ’â‚\FFÇùæ×ŸG¡P`0ZÙÑÚÀ•Þk¬«.çÉÇ¶Å­Ò & ¶lbàúÅ…¹<½@ºšU\齯_¼ü'¤§ijF ­ë0š,(2¾öÂWÝ5ê6ÖUÏE …œ¦ùeàX,FKSýüP&ÆšòRú¯ðÚ+Ï’šŸÔ?ÒúÐÜÑÒÞÒ°ÐN7mÀíõápNR—¹ä²bK>Úš7 L’¢QÂζMdf¦}éÏÞ•þc°à÷{)+λ¥OÙÐg'®›,hRä(“’p{½ØìNòst·éLN’.ʈLìÛý×WÝR9ftÚT¶l\wû?1aäѶ-4Ö¯…ÌìÞ±–-ÎMNÍ$—°®º‚uÕ,ã+ËXŸà¼[©¬X¹ðº¤¨`áu¾>‡|}f‹ uŠ’úÚ5Ô×®‰«}N6úœ¹Õ±4­†ÆMss|ÉÉ*¶nÙHßà0å¥EwaŒ|˱̶IjVæÁ2ŒMV:M Zz!€ØœÓ4ÖW%LƒÙ6IqÞÍMƒÁ‚€@yiámS¨_|Y”UW–¢RÝ>K.ê¾àb+_Q¸P‰ñ¦PŸM¾þö%à@0È–áÿEfF:e%ÜËD¢QÖWÝZ &ijÔ©)KÏŒn ӄŻȬÛK !/'}Iß³h3²¹(ʿٯM;áH„ò²ÂÄÌyÆbØÓ4Ýb~³ƒ4u2ééÚ…z¶:§X[U–X3Ú³sûï«(ÿb{vmOX£í~ü‘ß;w#ò/'m-[¸×).̧¸0ÿžÐr}ÔHQ^Ö]ù®+iKYù2Y'A(ÊËLøÃácF;»ÛÎõ£IU‘©KOL{ŒŒ ‡)/»™©[(¼¥Æ&ÌøAV,!芷ƒˆÜ3|ôÛOX[µš ³“]mwÇŒXº›è4*äryBÍèï£jõ*¤Ô×®¦p7ÀõQ3ÖÆÊÁíñÐ;0ŒÍ9KIA6ºt-Ÿží¢²|‹çöoÇëóÓ}¹o Œ>+‚%~ÑŒDî &£f*Jr(+½;C¥dF—¯¢Õ¦a²Ï²¶"7áYÑЈ‘1£“‡kP©TØ.Îuàó8|౸—oµ98}ö23Ïî€ =½\ê#G§¦ªr%“…OÏ]ƈpà‰Ö%•'>vVäžA&ŒJŠ–>\ôº§ù—·þ™æ–mhµÚE=vö“Ϻ1ØÝDÂQžßߊ\vç‹Ï¼ÿßúûïáºãφ"v'ùú›aw’®U£JГ+Ç&LH$7=Á Wû‡XW³…|n‹ŽÑl% ±¢´xIe‰™‘È=ƒD"¹+Ft»ÁÍ‹ÙfÔÚ´›c’ŒŒ4¤R)±‡í$¹ü6#6‡&ŠÒâÛç€TJ%õë«o;Wø?4Šf$"òÜØð¸ØMÙó›c1qoD3¹ß툻²ÑHD4#‘% Ób7ÑŒDD– 2© ™\zWo͸#)2©Ll ÑŒDh+’JÉÖë$Ò»ò‘ÅÉÎË[ö§ü¡ >vVä¾D!WÐÐÐÄç—º ÃHæo ‰ÿ! ÁçõsþìZÛ'"þ´õ— â>#‘û`0€Íf£óÓ8íÖ„ý ¢L*#+GOÓÃ픯ZCÀç›C4#‘ºsK$È“”ÈÊ„ÿÄt,# ³¢/ÍN?7°NIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_edit_menu.png0000644000175000017500000000235711273045225025267 0ustar julianjulian‰PNG  IHDRJ@“[5sRGB®Îé pHYs  šœtIMEØ '"ŸpÝIDAThÞí™ÍouÇ?¿—ÙÝév»»Ý¾!/Åâ ¨ Qâ Á˜h|9h<OÄ‹1ñðäÑ‹7¯&ÆF›ˆ&/˜‰&"hB ¥T,´¥íÎÎîÎÎÌo~¶è¬¡Ý–Æì“ü’™d’y~Ÿù>ßyæq󯔥ÿ²  ª ª êÿ Êó*\¿´á7Y­V‰ãøÞ€Š¢˜ãßæÂïãTů23;‡µv}A…QÄð×£<¼ÿ9ÒŽ³ñËFJrù<ׯϬ–\‰’¾9ÉŽ=©ú^-àâø%fgçV-ïV†µ–FR­V1Æ`â˜l.·bXânÎFrì›ïÙ¹çI*žGl I’Pê5Ÿº_ÆF526ô°÷‘Ý”J¥uF•ŠO£Ñ I„”(©‘Z¢¤R´Öø^…þþ^¤”kê³/¿å¡}ÏR^œÇÛ|RIBl Æ$“,×ë5¼Å9TTaÿ£»xâÀ¾5´X.S.WB ©R qkñ÷±v¼r™ûúצôz‹Y*^¥4`‹µÍeâ˜(lP¯×¨U} ÀI¹Èl??œ›æãO>m9¤+“S,–+H¥R’$ ÆÄ˜%¥[k±Kyþ# AŤ´^;:røiæ§Î£„ÀZ‹¥©t†´ë’ÎdкiðqQ«úÄqD(»ZJ‰µ ƬMš©šå&•Dˆ%T)$ NOOimÍüÕ—žgâ®ÛA*í2{õ7òÜ$Õ¸FR¾Bmfovаà¤ÒH©0‰ÁÄaËA%6i4eÂ0$ CŒ‰Á– ^CÊ&@¿âÑß×{×÷Ò+IðõW^àó‘Sì~ìnЧ¸íšË—¯ðãÏç(ת¤2Ø$j½¢n©Ê´Öz ¸®{»Ñ‡3h¥©x›î—V Êq4/>ÀèØ¯ØèÎ-ÁÐÐv††¶³¸Xfø«xIz ¬\ ¤``ÓfG/£wŽêšZ ÃÀ0ÍYÿÃ4èîè@Q”©gw8Khš:;Ùb:ÙÛ¸& Äó½YK›‘/‰ùÃá(oí|Ÿ¶¼6äÔ¸šÄ÷ý¹ðèñó.‚÷ÿ÷“)B¤ Äô°ÌhZޤ´8“µëï"šŽªE íSöéŽ|¡#ô4ÎõÇLô€AEyÙY™sWÈû¾‡”’Á0Ûw5qçwë0í ±HêÆ‘røŸN–)Êc]j<€£‡>bèðv®.-§vý8ñÈÅQt¨é¶msöl'_;AWw«ª+YyE%ªªÒÓ7@fŒ6Š¢ˆG Z*›î¹Û2æ.¥”xž‡ãyôöñï·÷ã+¦•>·]  ½åSÚ_¦À;Éw6ü/äÔ¡À4-Âq- ïññgÇ9ÐÜ“Ïl¡õÄ©QªŠfXÃ` Ÿš¥äu†Î÷‘f›I;дóÇõqÇuéíâå†pE åt*¥Ä—ßONåÈ;žçÝëíèädÓ6òE;µ÷?AB˘tœdË˲E¬©]ɦ?`uM ¨ÇZ‡4 EY¸ñ:qjV”`ê‚H$„£.?ñ<í§ÏÎq&†#o<ÇqÑ5…h,΋Ûöb$¹Ž¥Pé'¥räljóYã;XçÛ¨ûáC(%×á yÉóžï;NÒ(@Ž¤Þ£­íœ:ÝAÕÒÅTUV\ÒvÓ‰&Ú‰Û¶U«« °×sf´{Ð Ò‚iicïf*ËrÇ-õ<ß§·5`ãk’¯:Ãè†dIY)Áô™0ñö®½tvõ²¨¸ˆÑÚS…Xüc>?Ü„mY)•“‹%Ø÷Ñ'ôöR˜ŸK¶aèÈn–”Øä\½‘HÂ!‹DQUÓ4Ñuí‚qRÊËêë* hªŠDR]YNýšŒ Àp=ÇSÐ:Rz,+É¥§·/»‡(ÈÏIzΤŒÆb<ö÷få³ +M× ‡ÉÉΠóܼ÷{4l{•ÐÐy2‚6]£«÷<¡pŒUW­¥¯«=…JÞÖ ¤ýL'Ͼò.RÑ1-é{,Iì¥´È ïæ_s¸å$Ý=}˜¦AaA>YY™èš‚@^2®¸äš|!_µt¶NÕòrtýÿÍ«ëù¹™ttõ“—i°¾n9;ö œù2¢åX;ƒüÂbró‹f, =˜Î-7® äÍí[ ¦™\]=šªòÈýw⺿{ì%ÂÑŠª&ŸÄüóµ=dæQV±‚E¥¬HsˆE‹ ¬¾—§6¿Ág_#33“%åeäçça&‰˜pÜQMVr²2Xuå²qÁÈL·¸u}5†âèGQ®ëâ{nJ&å%äe£¨*žçbépûí×ST @nN¦abY&¦iòñÁFªk¯Å¶LâñDJkÙ…EüxrâdV0‹üÂbL+41D–¹€Ón¯ïý”•WV±¬¢œ`0á©ÇKŒ¤N‰”3»=&„À2xNÇ—Á’ÒE3`F0ß<øS¾ÈU•Å yT./§¼ìF¾> ìOÂY'•Μø®?Vn\[WÍšÚ•3à¨,-[8ñvÊ’–fÓÓÓÃæž ~íµ”–.N.…úß¼Ú¦Ém×­àȱSTßPÕKQ…Ãe¢€½?úÉ=7 Ôu«+QÅ(ùQH• ÏèaEQ(,,à;ë¯GJINvV´] **ª¦LÚÖÊÌ R¿fÔƒ½‹ãILРĞȑ»B(¨ÊÌ\³ºjZSÍ(€BlÛf±ü½Pò ‘BIií¯IVb‰8yEE)ù›Ì6Ó$ÌSÑ5k®©çÓæC$âÎc”)«íÎL¢ÃÏ "á(÷7rã†[qçé±z˜ÇGëAÇèììäÀ¾=ôtKêí刪¨äæRÃÍ,]~±HhÞø?Üm{È3TIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_effects.png0000644000175000017500000001534111273045225024732 0ustar julianjulian‰PNG  IHDRÇ þ(Õ=sRGB®Îé pHYs  šœtIMEØ +4GþŠ€sIDATxÚíytTו¯¿ª[UªQó„f$$Ä<‰A€ ˜»ƒß}´ƒ=âþ"|—Ð}Wþ#^¯—ÍyGˆŠŽfì¨ì÷-ÓrÆSPr–ìai¤¦$̦÷>Úʬé9d¤%ºþjkëÀåv“”8$(íg¤ ¡¡¹•³ÕÉÊHAUTU¡©ù¨*’$!ñf­*22Z~·q¯¬[…Ùl¤×î àp«–>,V¯Á¡ãe­èõ,V•—›˜>ÙÕbök»©É‰ìÌ?LÍ¥:zzíx|21Ñ‘ôXüê¿ÍúuÕßÿ‹ãW¿ødYfÃÆÔ6^Cö)Œ•ÁS« ª­ WÛ1›BuV¿ÌÞc¸= I1þÏÍW)8z½Þ€ìó‘™‘Bîäqh4ýÙ­yûéés2sêx2†¦Üñ·}²§ÓÉskV`ÐëØùßÚÖ~{ƒ¬‚F«A£Ñ ªý÷T@FƒŒôÔàèYÆëñb6ÅÍãÒÞÙņ;yíåç/Žw䦾¥½Þ€ËÑÃë/¯½ëšóCŒæP¼^C£XñÈ¿vÈÁc§éuzyrùÜ»>›33‡Òªzv(áÕõlzìn>Ü~”ñÙ),ž7 ý Z˜ ŽÆíq³îÉåÁY<]:‡ÿ|ûüìGëÐhßCŒðP Ó'ã艳¼ÿÉ^Ff&“··‘™Éx}>ô:X‰¾‚îî/#!9§£ÛMoo;öâ™Ç—ú½ýçŸYÍï>Þ…ªª¼ò½ÕüxMæ1`¶Ø(,.EAÃÏÿö%dŸÌ[|JyåyÆ4[}èHNúÓŽŒ­íh´*±ÑѳÍãñ°cß1j[ºÑju¤%ZX¹`†_ÛŒŠˆ ,,”î^'3§ŽãHñÎTÖð£ï¯ gÂhþ°å §Ï^¸C7¶\ãÌù+<³r:Iz çñ© j®“ž,û@+qæ|ÉñÄFZQ¯¬r±¶ÿñ³Ô¶SeUì9t‡Ó‰1Ä€ÃåfhrS'Œ`⸑µe×ÞCÔ6]G£‘РâõzТ%11–y3§6hÇøØ‰rŽ•^¤»ëÛǸ£»»Ë£ 7Gb2[èsÝ;†Ð§ Á;.â×q8\œ®ª#)>Š´”„»>—$‰Ic38Vz‘òª Œ=< 5oÆDò–s®þ&uìdùüɃ‹Ük·såF/ª¢ÒÑÙ”É.Ë2QáL;œ‚£' ³™PT•¤„8&Œí¿1ï b8Œ"Ë š„,+ì,8EYu=?}ùâc„òýX,~þúzzìÞûä ¦fäÊih~b A««ÅŠÁØiËÕëœ.¯fÁÜé˜M¦»ç–¢Pyî CbÙ½¯ä¤!Ìžžs+>Ó?Hz]ݽ(ŠŠV«Ewk³^Q}‰ù³¦ “$t’ÄÄÑY”W^Š8.:QÆ®ÃeÄ%¤r®î:ŧ~GOW‹fç°dÑÞ|ÿÜ……³§°igݽ†&Fñêž ˆ}µWšØYp ŸªG§ÓðpîhâbÂ),>Í#?äÇß’‰ˆ0+n‡ÌôTÒRù‡_þv`“žœ8„¨ˆPê›Úîø»êóuD„‡‘œ‡Vû`§)²¡Éq¬Z:€®î^ÎÕµ’•žÌÜû7[7Û©:w! v]ªk`ËÞbÏÉaVî:ººù¿ïmãLÕÅ€‹ã¥‹ær¦òŸæñß²–ƒk×[É;PÌoÞý„×^|‚ððÐA5¶mlÝsœ¶74,xhBpı"Ëx<2†#’V‡,Ëw/ê Yöáñ¸QŒþݱž= ‰Ì´ø/½ftv:EåµT]l˜832‹aé)ì*(æbÃM6î*aTF=KæçÕ‹|´¸œ°ðhÐh8ZRÁªÅ³nƒtk¡^¼`ÿó×ï0ûÖâ¤ý‚9˜i Þýx' MWytÉ\ö9IL̃ýhþÏZ\t:‰–ë­Ø{»‰ 3c1›Öþ§Û÷’3.›úÆŠO•“;y|ÀÚ>Xx’ºÆë<”;éžâxËÎýèt:Œ!!$%ÆQ{¥«ÙÄ”Icýø›“(8ZŠ"{0šL(Š @ÝAjòm§BJr¥g/eÎ ÏL­žãõL“F\ÔdY&ñÖ†Ô#K˜B#ض¯ˆYSÆÍ–¢(äí+äü•6´:=qFV.È¥òB;ö—烪ª(r¿£I¯ÓjåJc ™·BÂCÍô:\Ô7634% »Ó)ĪúÀ¯G«—-¼«?=7>ùvè^\Lÿò¯Ô®º†«˜­6†ÜvºD†‡ñÈì‰t÷öÍ1äózæÍøXæÎ˜È†­‡¨8w‰ÙÓ' Š1UU•£%å•]BÕh‰4±bát¢##¾õw£­djR I‘"Œ^¼n'ïý1ïçj˜î=T„âqm–IŠ4šä_O[}Ó ´-C“¿<~6.& ‹)„–]<“ÑÈãKçòø¢i˜B´T×µòÆûÛ¹\ß”Éär¹9_w£Ù‚Ùbårs}vg@m8|¬„†¦«ttt¡—$V-™MHˆž>;×ZoRQÕŸPyº¬¤áÌÙsï£ùG(«®#!6Š|m=ãGg‘‘GË­2s‚¯Ogwÿî—ﯬ¾@yåUEªÎ]¤µµi“ÆðØÒùì-(¼£$ ªªlݵ§Ó?¥úž{jYéI÷ü¬æb=õ-¬X<á™éÌŸ•ËÊÅsü¾&È>¯˜Ë+ëŸâ…§WðY„E¨ÅLCÓÕë›®f3e®DE†#Iz»»žžÈðaiŒžAXX(Š¢`wùèéícý“‹˜ûÐdFd¥÷ j?ãtº9Qq­¤eæ„a¬X0-ùÅ”T4 •t¤§(wCs[¬w÷ô‘8$nà#ÛMfÚÎV_ ««›Å„,ûÒxð2:;·ËÉöý§Ø]PÄÍöN&OÃó§Í®þ¬Û;O—»?J@¯á„­m¼ýaÇÏÔ"iaþ´lÖ¯Yz_„1|CÏñç=0½v;ÿõû­¼³a/>»’½s©¶‘Ÿýðé€u¢Ãé „…Ú¾ò:³IO»Ë‹Ûã!Ä`è@fe¤045CÅ\nîfËþ2Òbϳjé¼€&I).Ãb2áõ¸0š,Xlá;YÎ#ssfܙӘ3sÚÀëq£³9QVņÍù¼¸vùÀØäLCÎÄ1§¢gؾg3&“Åóo/Ná¡¶ Çíí9pŒ²êz¦OÌfîC“hïèbsÞ:{úX6 cFdªÅ¿½³-fóË÷[m~ûîf¼^™ÉG÷¿g5óâºÇ0ôüèŵø¼¾aüþwÐÖÞNç¿ñôy=|Q•ØíN>Þº‡Ÿ¼´í-—gwO/§J+Iösr¬,ûúìóößœGdpòÌ9²33PeÕ™1ylÐæËÍö.P}DG†áýN¼>#Ò㉋ ´ŠP‹žçKÓÕVÞÝT€Š„ÉO-žƒÕìÿ*Fƒ^oÀíñPpô$ÑÖ;·|^ÙÃRؼ³€•‹áty%£GfQVyQ(ÐALâXž[=—ƒEå””_âDÅeÂm&fäŒdòø‘wä ^OOŸÃI]C GJ*0ëaÒØì ö—ªªì?TLé…l¡‘ŒÈˆâáã°Y-÷µo„d³Xøñ £"ñ_vq£½—W_z& »‹Ïü?u£“´hÀç ÎI]²,ãñxQTcHÈ@xA ðú|;y–鳈¶‚ÓáÀlµq®öFPëÏž(­¤°¬ÕƆOöã½uÓ$µWšø×ÿø=‡‹ÏðÒs«xîÉ%¨²ç ÂÆN\\ðâk.ÖRSÛDˆ%œ“ÕMÔ7¶àpºxëÛévÊØ"â8PT…Ýád° ª*U®žÖO‹üД$^åY¶í9Baq)i)I˜?ÂItt$ªªòÁÆ<º{íüä‡Ï<¼é½·±bÑì;âüwí=ÌÑŒåßp/—ÓyÇÓu§£€ÙÓ'ƒ¢ð/ÿþ6ÿüooƤq£‚·™êê#Ôj¹+T¯õf>¯—Ì´„€Ûd2ù«çåÀ±3”œGQ ;-†çŸXÀ‰²slÙ}0 âøB] ÿùÎ&úúìüøÅ§ïÚüd¤&ÑÙÕCGW7W¯·‘ƒìó"Ü –Æ+ëVñ£u˘6n>ö¯fÃæ=A³I§ÓsàÈ)¶î*àbírÆfòú+ÏÜ*2³)IÓ¿iu{¼ø|÷_ÓÝk6Iˆ‹¤¶¹Pù ;i]P+Tdge•ÁÆíÔ]íbã®"´²›)ã†3yühÞÝ´>Éç±¥³ˆ‰Š"ØT×ÔÒcw³d®…ßø~úò3üæ¸ÜÌɽ§Pÿ`c]=½üÕ O\>v«Õ̤ñw ÏgžXΔúF¶ï>Ⱥ5+üÖþßÿôÎ ü_ýâoœ ëŸ]ÛãA«Õ½ KGW/‘aw¯ãmÝ(ŠLrb\Àmòù|üŸw>ÅdÄ Á’¹9èuïmÚOÝMb´ÿ=Ǫª’‘ÈËï]FRQT$IˈŒT*ªk1w8¢(x¼^ †Á]’/Ø\ª­G«Õ’14•¸˜(ϟ΂9 ïlÜOãvúìþ/}yOgš×Ã£Ëæü)û×afî$FÈd[þ1ꚺøç3cb3§Þ¿¼’ûâ¶üèÓÝ´µµñãuKQo¼÷ ½<.2)6•¦–/?¥¨§ÏNÝEl¤5 ƒètºØ´ã Û”áò©ŒËÂ+ëV\+ŠÂá¢2Í™‚F£aH| ±Ü.'k(5MÈr`=êŧÎRt¶‘¨ØxôzZ­«- ‡bäãmýv?³iënB :þéo_ºC÷ïPoÿ¦ŽIeÎôI‹ ÕÜ-˜?kû³ÇŒÆÆ-ùdgØäJ›öÚí¼·y–ð8’ÒbР¡©Á=èÊÈ•Ÿ­¦ñjn·‹Ú†ÉFˆÑ†Vïæ¹'— ü0õ’Ä k–ò¿ß…Ϋ§›^‡ãY£"ÃÉÏùºk´utÞ3[ñTÅ%Btr˜hr¨¨ §ËÇÄ‘i<2?}’¹TU¥àÈ)V.ž}ÇûCS“5Åãvcµ…qºªž)Gd¡•Iå…:úzÐéõH·v着âr90hž=- ýtº¼š‚â󄘭 ª(îÛÕ Ò‡¦"øzÜlïdÓŽC\oïᑇƓàSm3¯½ô4¿}o3mÙ‹NÒÑÞÝ0a PXTJGW»öaå#s˜ÿÐä{>-êìîæÝ·1bX._à7{®^k娩J.5Ü­¶_0in«-·×Cg¯›æÖ Ë.ecʸ,ÆÊ °•–ËéÊZÚ:»Ð*>fLOzZ27Û:I BH@Hˆî^‡·‚V¤—yz鬀Õ<—eE­VH(¯:‰Ýûòwý}Ün7ZÇ‹Íbá—ÿíU$IÂív# ¸Ü‰;>~¢½) [h2e_o7Ö Fãà ­ˆŽŠD¯7™žÔï± ¢‡tÙÂÙ<4m"5—êéêîÅëó1nô0Ö=¹ä޼‰@ñÙ! q‘ÞúýfÒSX¶hî ¾çDF„±~ÍRŠNž¥°´†ýÇÎG«j¿·Áëõàõ8ïS’$áv9ð¸]·2¤ý/ ΞBMÝVö>ÅÓÞém¬:™k­¬\8-  C-!,_0ƒô üqº¼3ònÏgî„,6ï)Áj ££­•Òò*r&øß{¬Õjyzն楹í&‘1h% ‡½WoÏ?±€°ÐÀy‰jë)(®!.) ½Þ€Óч·×-”î×ÀîpÒÞÑE{gåÕ—©oiC/iX»bÙYéA±Éd2ò×?XÛ(Æ«—}½ãŧLÇ”Iãüf‡ÃábÏÁ㜽؂V+JZb4©‰±ÄÆDb³˜‘t:úútvõÐÐÜï±jh¾É–½'(>}Žå sï(æoV.šEiE uWéìê"Ä GQTt…Ô„àÄÑ;.WÎèôÍ™P^m}#¥çÐëôìÊ?Ì£+bÐKÕ*6mËçf{'y{ñèò…X­ý1ª›·çc4èø`ãvþîÕïûÝæƒŽ¾Þtz—IuòÜc Ýš•”8„¤ÄÁcOX¨©“Æ [–r!üULŸ2–ìa)|°9ï[—¦ýFÓŸ½e:zü ×ÚÑëõø÷`!ÛÓׇ¤‘¾4ñf[;h´¨ªŠÑh ÔØG—»çbs7F£ÙÕͺGçj ¨ {çBsQ1ñ¸Ý.Ún´°bÞF¿q{µ5åLžµŒŽÖæ¿èùÔÜr-»áñõ?Eòz½d›ÅÈøQéLŸ<&àóè^ø|2 *†ô¨ï-y(9s‘©G;i ñ±_ëïúìNN—Ÿ£ðTÅË?¾þâ7ÏïØÚüëðÂSËHOK;⯠èän´u‘<$–œ ÷¯êÉwq^=ˆü¥Œã7ÇÁýfßáÎT]â•ï­JÂMGGïmÊÇíÓiá¡)£>,í\þ7Û;øðÓ=ÄÇÆf³jµf!"ÌÆøX¿•lüùT¿D\L$1ÑßÌãêñx)-¯"wÊ„nžY–ñù|A/c%D•ÇbƒN •`0°pÎ4æÎÌ Z¶|dd8?{yˆ¯ALT$¯½´VtÄ_£¿å0ƒþÏÆßU$Iº«î²àÞ”–W²so!Šªð½§–“!ò5q,4èub: Á_2™Ã†ò\Xÿ!7_7ŒG âX Áw’P«uPäß­è@ @ˆc@ @ˆc@ @ˆc@ à+uŽ@ ‚[ü\Y\iÕIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_file_menu.png0000644000175000017500000000776311273045225025267 0ustar julianjulian‰PNG  IHDRÚ!¿HµsRGB®Îé pHYs  šœtIMEØ -,ȵP…IDATxÚíœÛo×}Ç?gî;˽ð&Q’u§,Å–(ù"¹¾´ñ%A 8-§0P´@èKÿ€>õ¿ ȃ“À}(Ò¤ еãºNÛqäÄ‘\[¶(K´DŠä.¹\îmvfÎ9}˜Ý%3¹Ü%dc/»f†ß=ç÷ýÝψ¥…kš d }c°È€hÈ€hÈ@DÈ@î±Kнh­QJ¡µF¯)) ±‘{×X;C`b#7~Žð ¤D“RR^]½ã5ét×qú¼R©R(X,©ÖꌎäyèÔÉm%YK𱿭 ×98‘¡Þ˜/¬ðÔéãX–AÇh–mÒhDaD*åb Aay™Åb…¹Å2O?vŒ¡”‰e™]+÷½†g­(¥h44J©»^/„À²-²™ ¦iöu7¢ÇëáÛ,¶®ˆE1×ggÁpÉcY†ñÙ(tqqñ±<ÏëÙÂ,.øà£Ë><É}û'™zø1Çáå¼tËÆ^¹:ÃÌÌ5Â(fïž]<øà—˜Ÿ_à÷ï_¤V¯óŸÝѤŒ¹4³Âòò*çÏ_àâçY­Ô9û•"—B*‰–‰bÿó÷~Ìÿý?øÇø{¦8ÆË?yL&ÕO®P.—yñëbn׊u¯áY‹Ë0 Þ|ûòË,//ß])-‹é¯òø™S(¥ÖÕ­^HÅ\™aµÚdbbÇqÖý_B´Ò ’ïRJJ++ŒŽöhm’i3ÍÄÄ&vîÀ4×·|‹ósDQLyÆÂâ"ß|á[Ç1®—â•Wÿ› Éeóì?x€'žúcÂ0âÕW_eúê,ÅJŒ?²—]{§>ýú–­tÅØ¦&öÎgÎç1MËJ–Uh°Z1™ŒX^^Ä ÃäÈÁû8uüKük¹„i„a„m;t«×÷žÛ¥Ù cß¾}ºþòô%¢(n…²F_HvåêUŠåC÷3yøàt·Ë¥>$lFý £(fvnŽ#_:ÁïψcÛ-‹cþÁ<`#¡ÂfÄ4LÊå2™L†0 ÑZ³²²Âs_ù*a³ÉÒÒ³7æùø“ë¼÷á,¡écžÀÏpÀH©¸:}o<ñhOB"À±mDK!„­Å0Ì››f:6)×Cϳ¹zmާ¯ ¤ÆqÝÄÛ ¿PxÖâRR¢õÆž—䘚0lb÷!õh“lòØq.¿ò–iR«Õ°mÖüæ¶±m;YÇ …!PZõ‡hQ3w㈠Œ°s1|¯jÇuh62™Lk3Bjµ ÓŸÌp}a…ÕFŒ2ÒXÞœ!ϠѨ¡¥&•ö‰JŸ26úÈC¢[+ ZÓ)DÆgs½ZgîÆ"RJlK`&Ja ÌÎ3ôÏí¤Ùü“Ji’Ýë=ÉŽO=ÂJ¥ŠíÚ4ÀB¡€”P·ün)%“““8kßͺlˆhqsc~a¹¼ÿáǘ†ÁÄøžçaÛö¶Vo<Ï% £®f3à—™^ŒIù;H$Ö\k…– 'ßÁÕÕ2GMô°*B 5QÐDƦùÙðãé§Î0œÍpôð~tËZZV+.ú ‹§í CàyóNBLÓÀ÷S=-†Äq’“5BÉÿüï[`÷ŽqüTŠ|>ïû8ŽÓñ^J)Î;G½^Dz¬-a±6b‘払À²2¾ÇÐPš\6¦¯\g÷Ä~ÊÛ¢¹.ÕJ!J)VJ%f—ÒùKt,ëy›k×HlÛáú'çùÆ‹ÏlÇMG­‘*fbÏ}¤|ŸfóÚ›çÙ9–'h6‰#…FâÚ.GŽãÃËsüòÜE‚zË4JÓ‹í^£µf¥\æÿ>ø)%J) +üæÝß³sb7QÞ‘d2–ÌÍxíõ_tò¦‘á<÷9Œëº]EIZkf>½F¹RG›¹¬O6—Á±L„0‰¥\×HH)i4¤ÓiLÓì:_¼+Ñ‚ C&žÀqì×±)–Vùñ«¿á/Î>ÎÁ½ÛC4Ïc¾X C–Ë+DÚÄÕmQ7s‹5 £´DiÍQÇé¥Ç¡4ÞP'†÷/Îðëú¥DÉ´¦51´"ŽcâXa…ç¹É§c¢z9Ö}à ‚€_üòm–Â!b)‰£eóó7ß'›ŸEJu'ø(¥¨U…ºÄ0ÁsS|põ‚ àÌéGºÆÇOœÂqlfff¨WkÜ(—'Šš”WV:y­­5.\ T*1<<ÌÞ½{Ù¹sgˆE1ZC>Ÿk-î¸P×±1M ÛÞ¾¾·ãº4V(±ºREa!¤B!;Ó¨ÏÄÔË‹óù$åR1 eÑ4aØÄ°Œ;ƾ–LäF¦‰Œ%ùá< 7\>½>Ç™ÓÝa Ã¥4ããcT«u^ýuFFF‚€™™™N>vûZÆqÌ¥K—BðÛßþ–oûÛ]øîÊ¥TÇU†@ xóݨ5¢HbYïž¿ÄÅékØ–É“>Ð)'÷ClË"l6“’q°Z­!ÄpB¬Á:ɪn…RZc›6+7.ñÀ×_è1"ƒj-`÷x†CûvmîÖÃaØÊ!·O½¬ê÷OÅ()©¬®P«¬vâZ!–y·ÐK´Ú ²C)üœËR©D£^ÅÝãRZ­ kضeÛ¤Z)Èzý:­5™L†ÑÑQŠÅ"¥R‰F£Ñ¢­ÿÛ„»Q(SZ­u’ÆÂJ¥rDZPª¿ÇÛ„„aHÇ4ÕF„‘²ÑJß$™‰†VÅ«]ZÞ5âô¼ *Ð(©h¶È¿ÉÝ'Ž$Zo/ž7Þü®kóôÜZ‘ì¥JÉŽ·¤‹57 ÁÞ‰1&Æó¼öÎG‰âËd»ÙÃvõRJIDQ„V7Ÿ·^¡CJ‰eY¤Óiæææˆ¢(i)õ‹h·ƒxákÀÒJ…üø žú!Ü·³/åüõ¤ÙLFyêµ*Háøæ’%¬M0%c”Ö,ÍÎðÂ3÷0Dk;MFB‹¯5¨8Fô !{'<7‹·†v Ke¾ÿßñ­¯?CfÈï9ž›`ÒÇÛLA·Œûõ…eæ‹+¸¶Im—éFÇ”VX–uË<¨”’ÅÅÅ[ª£·õ¥¥% …B§$7ÑÜ4ÑÖÐþl¶JíÛ9€†!RJªõ*±2ð ¥$Ri´V ¹ZS#JI,ÛAV®³÷¾çzŽE£ÑRwãÉ`öÏw_þ)Ù¡¡Îß{öìâþ#{¹2ó)ßý—Ÿðͳ_æÀÞÝ}ÀÓö"Š Ù$Š¢NØ%¸µ^%n#§P­Õ1 ‹|>ß“Jh[G•R¾˜ëºLMMÝ2Ý´öÚb±Èüü|§ÚÙ­žo)™ò›ÓS“d[q»DÆ1qQ¯ha¡´$ny¯8Ž‘Q„’°(.ÎS+\â…矡V«áy^O{3m+gŠ®XJ'st}Æsúч>síÁýûHû>/ÿè¿øÖóÏrôྞâ1 ´dvú}JË ìÞsi?…RI]ÑâÏÍÆ´„aE! ŸÙ±ctëÅ¢vQeYÌÏÏS¯×yñÅ9|øðò͈ï|ç;LOO“J¥º>Õ°%¢¥}瞘b»EkEÔ ‹( À8Lbh¬–Kg/²oÜç±'BIEqi™Ñ‘a|ßïÝüœameÌLßÖ‡èžÙ¹ïù\ŽtÚ§P,277ÏSgNrÿ¡} ŒáI¢x †ÉþÃGøêsOñØ#';HZ^«*Þ^Žo†üê×ïqc©JÇÉØ“T[ŽœLÓÄó<Μ9ùsçð}ŸR©tÇ{ …“““œŸ#—Íáº^oÃ\¥QQŒŒeW·Ç2"Šd_ñ<|âè-—\¾|™L.Çüüß<ûeíßÓ*6èžà±-›”çGö&“Élø®ë1”eõz…‹¸ÙÄó»Ÿ{Lö¹|Ž|.‡Ÿö±-«oÅš0Ö‚(Úô½Ri¢(DEj[ñL=8É®cŸ6îDZ9tð û7É'W®â¥†X*7ýœ”çðÜÓsüÉd†îº"šèq’7Z–ÅÐÐŽãÍf;cbëå˜m²9ŽÓß,Ƕ‰¢ˆ÷Þ}{óŠ$ãžy!¾ï³kמçaY&ï¾û^Jsè‡Éf‹“ÏåÈås¤Óéä¸HŸÖÞ´ÃKÃ>)Ïåʧ³„©“)ð$óX[W»ùÝvm¢P2uìã#>¦±µÓÌ›ÅS^YíÛ¶É岸žK³Ùäí_ÿ†wÞy»ãq7ºßÙL†G~ˆ={vẎë`uYÈjëÂ¥?¼%JjãùC¡cûs«9½¸Û T›Í&ËË%V+•uÝë’Îl&ÃÈÈpW®þ®–;ЍÕj,—hiß'›Ë’iYª~·¤”ÉzF£AF]õWLËÂs]††Ò-b}îñ´ÆDQD£P¯×©×ëÄRnx_ !ðRét?•¶í-½Ç¤ÙlR(Y]Ýœ¯Ÿ?ºì'ŸÏõŽhÉÉÝ¨Õ“ÚøÆFRFm/P?s·(Š@,Óìû;&Ö*SKâ8"Šâä dK±7¢ ík a`Û¶“Xën×ê^ÃÓÞ›XÊV;Fn*h•éŽ6–0 ‚&Rõ Ø“Jm*ZƒW‚olÉœœîú4²h•¹×NQð´=mû­\›Å$HÈÖOC½]2xÝÜóFÓ4Ù&'ú¹ÃÓN!2xê@2 Ú@2 Ú@2Ñ2{Iþ—#ÍÛ?~“ŽŽm„Ã!lÛ¾ç΋'’œ9óßüÖwHƦî³y[jþX²ü)ˆèJJÆFFØþP'¶mcû|÷¨í³FÓ´ûL^Hž/1-eþÌÑè Oz÷l¹)•TxŒïº.‹•ò …eš5Ê BÜ«Dz©ùkéòǨô4ž”LG§k) £W¹¥”\DBÓ•¸ !R²vÍêªW¥ƒCÃdÒéš$Ñ–m³zÕÊš¬lŽã,zò)¥0k ¾<}j*JÓŠ5d\CÓP€®i¸®KÆuñY®ëÎ$ZÁ߬ÿ%ž–epst€†úeÕUR)„465³¶µmÑä:{ú—¤R)@UßO§Ó¸®Ëžý‡²ÎÌd8}ñ*WRèSAAÉMeÿSHvnn%pæãH§Óøýþª¯IJÉðÈ tÝ@JY5¹”RM =•-ÍUO¾/OÅDw—T:Í_¿ü:/|íËÚ6l`ht„Øt’M´0:z×UÔÕûñ[6™ŒÇû|ÄáCû˜žšÎJ…™sU]qp=”R5+A*¥p]oQ¤’RæÿÏ8Ÿ_í'ãd*´Éo³[Ò“(Rzt´6牮”Âq\ÁsÒé4Bhz쩱ÏH¥ì½ãÿ¹¨ÉW.žr­~ÍXô¤Äƒ'æ"Z6Z½ô'P˜m»7Æn²zåÊ=[ É`ÌŒŸqâ±8‰d2Ÿð!ÐD¶¶,¦¦¢ƒê"uwMÂÌÖ»ÑXœ³ºÑ„ȧ¡Y¹]Û7æ‰~·H¾Ðy}¶MÀ6øû×ÿ‹oýΗ¨ ïê„+÷ܵÄ`€’‰žRŠŒëòãŸgwçvlSGƒhtŠT:CS}=©L‰" ¡kÊq¹Ü{ …ÇÐð(Gy8»ÁPÃd2g«WµP__ã8ùÉ”‹ØB4McddŸÏ‡ßïÃqb±xÍÆ—3LSÑž”¡‘H¦ð™Š€må±(%1-]ÏÞ‡ÅLüRþRJ¡XøÝçàŽu|Ösxýþðù' îLðrçZè|åàQJ188ˆRŠÕ«ï,ëÎý¾”’4McÍš5!ÊÆSuDϤ2üíþ‰—þìE6¬]‡m[œÿô3ÆoMòðÞÝ Ý@‚eËêÑ5ÁÀàW¯õ³mËPÙúwÀ5 ÚÌézzûˆDÆI$(š&ò7Q×u,Ë"OqtMËjwC¯iõ&NqîR_¶â¢çylßÚÁŽŽuX>”š)ËêƒÁ|96¯Üï‚”šÏâñRJ~ë©c¼õ“ŸóÓãïñÌo‚~?kW4òÚ[o3|c’gž~„/\Äï³ÙñàVêë8î"}ý?ÑÓé4ß}éoxòØa.u÷°óÁv4]Ço[D"!®:ÄÞ=;°,“t*ÃðÐ0‰d‚Wß:η÷).^¼„ϬMy1÷ýR[ð–i21ÍÏ-w«N<1#™ö˜«4!¬j Ϭ$ ¿¥$ÂJ)LÃĶ-R±J4ú<ÄRªhDïîääùþìþƒÐØ áº.mÖ‘N§ï¨å£g9D/À… ð<ööv”ÊN€¿{ù‡\ìîaõê5tóæÍœ:uгgϲoß¾‚¢z¢/ÑOòi÷u{8AdžVê"t¡xûÝS óâןæŸÿý¿9¸'MôhXÞÀÿþ×XVbxx ³Î®ySÖ\ëé½ÊŽÈ¡=÷dÇQ)ÅÐ â©YùeN‹#Fx Ü"Ûĵ¾%IJºRª9‰©`ªÂq‹Ö­Q¨ýĹë6JBÈV455äÀb¥Îìù)«._.ž]»vT«>»ÜC8²Œm[; °„ÃaŽ=Š6“ÜW‚§t2ª(™}9&P´­ª£®¾Ž€m#x(ž~l?¯¾ñ?;qŽ'é¤qY?xíG<}´‹e õDÂ!\×£±±éÄns—jÄ·&²téØÔvOH09åÚȺ.˜-¿AÜîéR ¬oÙ h€Ìbæ<ªÒÁ‹ûkæ½b-±Íƒ[Ñ8~[ggû:Ç)cYš‹Ä“³o>÷,ëׯ§uíêâ%ÎÙþ.Ïü;£P¬<)X¦Å÷þâ»3í¥·[<3é4Ïõ+477púìÐ ¾ÿÒwp· l¦i×z/#KŒQ…fõ‹äì…çžå…çʨØÄb‹?w}ÃaU]±§Œ {Ð…&HLO ÜTÑÄJúµKù+WØšK!+›"â7XµjuÑêS>—ÙÉXŽÏ*Å3Û¾ôØ‘yç0U‚§$ÑsÅþRFRzôõt—2Ø?IД$¦Ç¹Ò=UPF›}ó³a¤ëžë›Žrö“S‹ÚMÔ„6S¥©þiMÓp—eaõáò£¤›!>)qµ²ñ”òW¶¸øê³rÕJÖ®]ƒ'%™ŒSÖj™ l û¬R<¦i`èú¼xr¯Oié2O!ݰ¹ÖÛM¦œ¥n³L“ÆÆ†ª é¹vÛèôô¢jáJ) à  cÕ÷¸†IcSÓÓ1¼EÖæ5]Ÿ)‡–û¨Xqi<Ï¡ïÊÅ¢å ×,<ÏA¾ª é_žRÒeéã·}454âz‹s¦¡øl»j‰nš& õ„ÃáE'šÙÖ]cQÏDêºF$! Ö¦ëùŽÌj¥³¡%èïËnÐ-fòi@C7–èK O¢ tMG7´’[«º¡ ù©•ÍC ]Ó˺PŸÏ‡o‰´Okš†¥iP£ˆËjóùË0uêë#„ÂþEKhÓ01L½`œB-5<%ˆ.4å--(qwZh˱T&Íòö«ÿ*ÛBþB`Û¶mÕtÜÙãÌö×RÃSˆ ä€aÒÕu€ógN“I;(ÄÌVîÝ)‰x’OþGŽ~÷þÏÑ-,ß–˜¿–2Dá¯éf{©GGGùàÿÃÍ#5}€y^«é45·pàð1hßB*»Ïä2„ßÒò×Òå˜û³ÑB ËÆ0í{þ³pRJ¼Lúþ‹V˜¸.%-Uþü?n–õ!ÞGIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_markers.png0000644000175000017500000000565011273045225024761 0ustar julianjulian‰PNG  IHDRݨ¸sRGB®Îé pHYs  šœtIMEØ 1FØ™ :IDATxÚíœml\Õ™Ççœû6¯wf<3öxl絡 4BZVíRõ  š¶€D‹VKW«ý°ªÔn¥î¢U(HÍV[h‘º]–U›ÂR5+>FÙlZh¨ÂÇš¤vÖ$ÄyóÌØž÷{çÞý0vš˜Ä±gbáù²FG÷þîóüÏ9Ï9÷\‹ñs§|:º®†ÿ0Ķ/ÜGîüéN0:úX’tÔQ§ÓuÔQ§ÓuÔQGK'íz Š¥ åjr¥ÆÅB©ëX†A4dŠ…0 ­­ÀËg©T«»\(”˜,Õ©ÖëxŽC2 0 Z&áPàų’}uÝ+ !8{nœÿÚû&ñ®$±D]×ix N[?ÕÍÖ[Ö¶-8Ëg)ôöïG8râJ7PRá8…ÜEòãùÚ½w²nuödz’}uÝò2´Èö$‰GÃxžÍß½†G©Tf߯yuß›ÔêN[‚³Üx>Þlâðê¾7Ù÷ëAJ¥2^Û6xžO<&Û“$´>q<+ÙWóš3m;Ìêþ4£çË!ñß÷pœ:™în2}k84x„©b ©tênƒR©B.?ÉT±ˆÄã¶Mk¹ù¦Uz.ÏkðöÐ1þ8ò!Û¶|št*çË–ò\Mïeèè’H8L"%°ˆÛ!J¥"u§Áo¼Íxn‚›7màb¡Ü|@‰ÒtVõÚØv¸e<¡PMø¤R Ž=Áà»Ç)•*¬^ÝÏdÅm)Ï\yô¼½Ý ޼{‚?ŽœæöÏl`Ó¦OqáB×m÷•×pYÝßÍ¡Ãïsrô _¼k+†®…Âä'J”+ÕñÌ«ÓiJ±~UJc)À4õZ•J¥À±'yçøiÉ4RJjÕ*“¦ y žt|I‚3ïûx¾O~bŠ7¾G4'Ž´”çj:{1Ï»GGPJ‰Å±v~ë/ùÇ]/Ðe‡yôÁ{ùÏ={Y·¦Ÿ_¿—]Ï¿ >@HI0`ýª4¥Zµc˜–E©4Ń÷}‘ýã6\¾ðù-|vë­üüWûZÊ3WZûî¿›·Þ>Âë¿;Ìþ‡¹å3›øÍ¡? EÚî«z­ÆŽ¯çÿ-ÏðÉSܱe3»µ—ñ‰"O}û¯xòŸ_¤Z©Ì›gÞ»—=é‘ ‰” „@¯ÑÀ©×pœ:¾ï#Äe—õ}Ë2Ȥ–,a×âÁßóð½fi$¥l Ïl dRX–ѬÍ|ŸÒÔ$“…<?ðe,Ó aùÆã³£Tª%„ R*"A“žt¢e<3rêR€® žxô«ìxè~V ôR­UZÊ3W«µ «zÙñÐý<ñèWÑ5MÖá«JµDÌŽòÇ"a±Lƒ‡ø2“…<@3· à™÷–LWÂÆ¶¹ºÀo4XÓ—dû=_¹¢Í_ìxðÒßÿþÊ^Æ*•æˆ!$édŒLÏÒ%íráûH)Ñ4)›eAs„—ýÖ4Z«xf+Ó“ Œqæ\!%Nµ90=÷Ì·˜˜˜ä±G¶“NuQ*—ÁŸ _lSЕ°[Æ3³Xó¼«û³üh×?\j[­Vñ=¯¥žãÇ?y‘á“£¨ò,(ŠÙléVAHÞ9:ÌöGžàÎ?¿‡ÿc7?zþ_ùÒ=Ûyð±¿áÌØ¤”H©0M ëúšåÊêr)šL7ÍéZ i𦡤DJÑržÙ[ÐÖõaš:R*”¦ÑN±ÿƒ<½ë9¦ŠEâ»O>M.WhB5ŸÅ­’ÍfZÊ#§c¢”ÆT±ÄÎg~ÀÎï}Ÿb±D0`¡ZÌ3W•® X‹%v~ïûì|æLK(¥µ%WóU.Wà»O>ÍÁCCL‹<½ë9ö¿qîtª9`.€gAoü±ºpq©ž †ibÛ ¬@°9šFln¾u±x’`8ŒG)v”LjéK¹O|Ñ\ôJ!Bâ ©Ôt¦×&B ZÈó‘’.• aG©6¦iò§žeÍú”K“ì~åU²}œçg/ïA×ôiL.\±HKyäôzMH‰mÛôö¯åÀ[C~ü¯ùæßý-ÑržkåQ xëÐÿòìó”k.½ýk±m»Y·!³ytMçg/ïáôØ8Ù¾v¿ò*W²fýF¾óÔ³Øv|A< êt𒤻"ر8“›Sc•Òš® ë‰®4‰d§^GiÙXs¿ÄúÍdÅãÔØüFã’Y<·ëºhš>½Ñ"[Ê3[–e0ЗbøÃ¦e GÐ5ƒR1Âðèi¬@˜@(Ê^``Ý:VõĈ$MÉ–ò4×D]×ùáO_"ïÂÐMŠÅI^ؽ‡›nn9ϵòXÌxa÷¤¦'%óß¾D2•iKgóTË>¦+Õïy ž#“í#Žâ¸u×uçͳà³-«³I*å*›o[ƒ·¹Ÿ³·õ±÷¿÷sï“Le¸eËí„:®ëá5\"!‹ëû[VÊÍæ©Të¼b”× ¡ë46òÌ.é6®ïç|¡Š/u‚–…¦IL]R«LÑpÃ|é®Ûذ6K8D×ÇŸ$žM¶GbéFÂÆP>¹Ü8‘H»î¸›uiâ1Ë2[Ês­<ÞñénòwßÊðç9pè=‚D¢‹ˆm#¥Öv_}î–,ÅÒŽ|ÈÿBiŠD_`9h¹ñ,Fù|h$ŒRrÅò¬_-:¢ÙÞùM½íÒrãY¨†GFÉöv¯xž•à«Eu:×u GB ¾C.—Ç÷oì?[n< ‘ïûäryß! áºîŠåY)¾Rÿ­oþÓ|{žG­VçÜù‹¼ÿþ êŽÃøxÝÐ …Bm/ÚÉ“¿x–ìª TJ“KvMÇq9uú CG~O©XF7tLØþ:¢½ëÏųÒ|µ¨WÉ®1Ûž^@6ÇÎÀŠéÏ!ÚWw//žùÎ&3£fOwšdWâÒßædµâxV’¯ÔéfF;MSWÜp&aí6÷r㙯f6ÃnYæ e¿Ñ<+ÍWÚb4ŸßÚi˜åÄÓ‰e'-ÙH騣Ž:®£Ž:®£Ž:ººþ‰*>¤ºÉîõIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_note.png0000644000175000017500000000256611273045225024265 0ustar julianjulian‰PNG  IHDRS nDosRGB®Îé pHYs  šœtIMEØ 58š ùtIDAThÞíš]ˆUÇ“›Îlf6É&3»éâ®Úm¡Ÿ`­]*m)EAKªÄŸ,V,â› øâ£à‹TD´Bñ¡àƒ)Š R¤Vk¥E±t·Öm¶I&“lf23™;>Ô mi·f×µÍÿépoærùåœsϹ3Jµ|1¦§®(ÕCЃككÙSæ¡t7ùìðžÝµsÞ7Ç1RJ:Q„Œ"âxn…ˆ¢(¤„ -©T EQÌTja\J‰ïû\®4p]!õzâ8¦Õj‘Íf‘Rây†aN§q]MÓh·Û,]º”lF iBˆÅ³ÛÿðÍÔ‰"\×¥T*Q,Q…r¹L©TBJIµZepp)%•J…R©ÄgÎâ4fØ´i=a233ÃL}‘N/N˜°00e᦮c¹\]×Ã0±£(¢¯¯Ã_¥9ã1>¾‘|Ž0 ©F-Μ¹PŠã˜(’4$"*• Š¢ ¥Ä¶í$Ôj5¤ŒY±l„FcßoS©´Ûm¢HÎ9ßÞu0g5==ÍÔÔBjµõzUUi4Ô‡NR¯×±m›UËGq‡É‰ <ÏÃ4ÍÅ}š/´ÆÆÆ R©`Y?Ÿ8ÉtÅf÷Ö­!’q€jµŠiš‰Çþ9ÑìÕ™7ªÒé«þðÍwÇ9vj‚Ëåéë~3{@ÎG9ô¿÷ÌK—.Q.—I¥RضišŒéKƒ]«ÑpêÔj5,Ë"Š"lÛÆ²,:™Læ–ë¿»ÿ}^~éE4MÀ÷}>øðc^{õ•»Ó3…d2TUEU5ßÀ¶-ãd2}É|*•Jìt:”×ónyø¬[»†={÷áû>¾ï³gï>Ö­]swzæðð0¦iòñã|~äk^x~7«W­L xÛ¶) 8ŽC>ŸçÀÁCü~æ<;¶mÀ2‹7]ÿñǶ°ã©gxóד±»¦h¿¶¨Ú s”J­~µ¨ït’jÖ–R&vÆÈ2<² ùgÆq|Ó½_ ïv@(wzÓîy§?ƒH ¦ÊWØùÄöy‡èº.•jv8 NáÂÄ$ccBS¯×)‹H);Š"ÇÁ4MZ-Ó²è´ ZèºÞUG¸#Ïüå×Ó¼óÞü@bôçxhÝJv.p˜çóy„ŒŽŽP(ˆ¢(9t®m-gÇgÛÌ ¸4Ùœ—ˆš3ÌòôÞz{?¹“ûïÆèÏ122² aÞßßŸäÆ ÈårÉ\>ŸOBxÖ¾v¼Z­¢(ʼ¤¦9Ãî%u½4Œ †‘á^TïUofffO·¯¿þžeª4HIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_properties.png0000644000175000017500000000144611273045225025510 0ustar julianjulian‰PNG  IHDR%`ÈsRGB®Îé pHYs  šœtIMEØ 6:_*Ë›¸IDATXÃí—]OÛH†ÛóáÄ8ã„T,HDÛ®T-‚ÿ¿7•*U‚Þ€º*äƒMPHœØã™½XˆºmU‹Q+q®|q4óè=ç¼sìMF?Xøü€ñ õSC‰ÿ{@UU\Îfß͉¢­ÔÓ@•¥áôì |Eš®"„À÷¿ÿü|D;K ð^¨[ Dt»º‚ À󼯡†}ÊÒpG¦‡õTYÎú}z¯^“Ï()±Öâ¾ãxÖÚúÊw ôò·ß¹˜^r9›òáÏ„CÍææ/ }¤”!HÓ¥ιo*ø(PÆÃ!Æy¼yû[Udk aÒŠc”’7à%××ׄaˆs®žésÎ1c¬‡/B²V“••ˆµÕ)%ÓÙà±µµE’$ÿí߯j>ŸS»¿¾æýû#¦‹œ‹É_ ú­äÆ1éntØÛÛ{Ÿ*Kƒs°ºš°»ÛRJªª¢ÙlR–W›ÄñÊÓ™§µvÙ¬AàSÃé`ÄZÒb>Ÿ†!I’puõ7£ó1+Q!QÕëè·ttt„”’‹ËkÎN?Òí´i·ÛL&f³‹²BN‡F£±ìÉZ ‚ ààà­õrÔÿ½ÏQUÖZ”RcBÔ[¾ÏãV)k-q3NBòâE—ããcâ8¦( Ö××i·Û7*{õBi­ñ}Ÿ (Š‚V+Á8pÒ4]ö’b©níJíììçùÒŒ1ŸmÍ›'Ç¡”zP uxxÈb± ×ëqrr²¼8Ïs²,CkÍx•—#vÒ4íXpΓDø(=Èx—RÃKŠ"*yA°2Í H ‚  0û÷ÇþºÓÀ kÃûõמ5{¯½ö8¼]{ï5{I8Ž#h+©µй!F˜ F˜ F˜ F˜ F˜È­Ý€V“H$²™#öÚ°‰Uê„Î1 ma"AD —”æÀI=Ä(œÔCçƒsvèPÐ…v"ÑÃq\LLŒ···½½½··w\\œÁjÆ6l¶ÄœMŒ¹zõêÂ… ýüüœ•J¥Z­ž?~aa¡Áj ëÖ­óööV*•ýû÷‰‰A”ÃÿÇ´ž‰¯±·ôË£¢¢ ¾‡›6mjºš±¯«AI6á%''+•ʦ›¸¸¸9rD¿ñï¼óŽÁ:sæÌi¶Nè‚Ð+øã?îÞ½+”Rþ{©¿²þ÷µÙÚÚ° ={vÆŒ>$¢§žzêâÅ‹¥¥¥!!!DtïÞ½7ß|³¤¤„_sÏž=;vìà—|óæÍ›7ož={¶µG 6«}ÒlŒ‰¯±·ôË;Æq\yy¹P¢T*Í¬ßØ»­ÝdÒ¤IBÉ–-[øÂ'N…‹/æ _~ùe¡ððáÃ|ááÇñw< ‡K<Ðzm7ª_^]]­R©åry‹+7ýŠ6ûnk7yüñÇo߾͗÷êÕ‹ˆlnnnïÞ½ …0u³i|“<ØÚ#Às¡]999Q]]~¡ÁW‘¹qãFN§¿ÚüAD^^^üË)S¦Qtt´V«5ØöçŸîÖ­[÷îÝ žÀolÇñÖ;991 tAxÞ(´+''§ÚÚÚºº:;;;¡ïKrŸãóÁƒJ¥’ˆ<¸lÙ²?þøC«Õòïêt:"rvv¾ÿ¾0ã±þ¶ …ÂÅÅ%++ËÇǧÙf쑈êêê”J¥0(€ùpRíÊÛÛ›ˆJKK[\“ÏP"zï½÷òòòNœ8ñàÁ2oºº^½z•••íÝ»×ü†•••‘±Ø01 íêÕW_%¢ßÿÝüMøÙ䜜õË'L˜@D±±±M§›ÏÈÈðôô\²dÉgŸ}fæ^ø&;Öü†üë^S€®¦  ÀÎÎ.::Z¿Ðà«hðrëÖ­SÞóåUUU³fͦ›7Ø6??¿oß¾D´råʦûjZ[tt´ÝÍ›7-pÐ`ãpmÚÛÒ¥KSSSýõWk7äo|}}Ç¿víZk7:Ä(\`‚`‚`‚`‚`‚`‚`‚`‚`‚`‚ Ú¾};?=ÁöíÛ­ÝKAŒ€mݺU.—ËåòmÛ¶Y»-–‚K¹{÷nZZÚ˜1cFýã?Þ½{—/ןnËÍÍ-))‰////ûí·ß~ûíòòrë6L"‘lݺ•ˆöíÛ'‘HFŒa°²R©|î¹çúôé#—ËŸxâ ¾Glz/M—wìØáåå%“ÉŒÎ\kí'õ€Íúú믉hëÖ­†ˆâããùr>|6mÚtáÂ"rssãË'MšDD»wïÞ±cMš4ÉÄú;wî$¢ñãÇs7sæL":tè°rBB¿2¿œ——GDîîî¦÷"•Jõ÷È/»ºº:::fff;L<(,%44ôÂ… ·oß&"AƒeffÒ£¹°jkkíííe2=šF¥RÕÔÔÔÖÖrçää¤R©ª««­ßØØèååõ×_•”” 0 W¯^çÎÓ_Y©TJ¥R"ª©©qtt&à2±™LÆO¦ ?[WÏž=ËÊÊž~úé·ÞzkÞ¼yžžž‡‰“z°ˆ‚‚‚¬¬¬û÷ï;99ñsfee +888ð1g&ƒõe2Ù‚ êêê–/_þ×_ýë_ÿ2XY8wtt4s|nò³~ 8ðÚk¯ñÅãÆkºb,bûöíÇMž<™?óåLßhŠˆˆ ¢üðÃôhæ.fÍšåììüÍ7ß<ûì³'N4³aÆöÒ£GN———Ç_‚íÛ·/''‡ˆîܹÓLì—?šòóóãÓŠyàÀ"ò÷÷çþ~åQ¹¬¬lÒ¤I|ïõ­·Þ*++kºŽApÍ;—ˆ’’’„c+ ËÆö²yófaj¯¦J¥RµZýý÷ß7=R\€Îêþýû/½ôRiié•+Wär¹µš“z蔜KJJ’““­˜¡„)í¡7 ÀDüýüóÏE¯ Ãÿ¤^"Á…èBpRÀ1 À1 À1 À1 À1 ÀÄš1ªÑh$‰B¡¨©©áK<==%‰³³ó²eˈ¨¡¡aÚ´i+W®´b;L°ò¸Ñüüü7ß|“تàÒ¥K~~~>Œ‹‹;þüòåˇZQQ!n;D!ÎïùµZmnnnaaaXX˜Á[S—$lFFFpp°~I]]]llìèÑ£ …F£Ù¸q£§§çÇEi'€èDˆÑo¿ývÅŠÅÅÅDôüóϼkºgš‘‘.¼,//Ÿ0aBïÞ½÷ïßOD¿ýö›¯¯ïo¿ýÆ?¸ b½6úõ×_¿ÿþû|†Qqqñœ9sôWüÁæú½Ñëׯ‡„„lß¾ÝÞÞžˆìíí‹ŠŠ¾úê«)S¦0¶ÀBXc”Ÿ°”çè蘘˜˜ ¿‚Ác¢õßR©TÂóúG}ùòåuëÖI¥Ò+W®Ñ‚ ø‹¤óæÍcl'€…°ÞbÚ¹sgTT”››ÛÈ‘#/^ìãã#VË:< € †ß01£ I$¤PУáñ`ÀdŒNJ7nÐÀäädN]ÇÍœ9322R§Ó‰Ó:€¯¥q£ô÷áñ&¬X±"11‘ˆ¼½½ñóMè"ZºÅ4c…‡Sdd‹eggóýP¹\ž››;`À±Z Ðaµt‹ÉìÞèêÕ«…sùž={._¾œ±e‚ÉU©¨ € 7¡¬¬ìàÁƒDdgg—’’’ššºÿþÂÂB±Z Ða™¼6zÿ¾™µdeeñ]ÑÄÄĉ'Q¿~ý¶lÙÍÜB€Mœq£¥¥¥D!üøÝÍÍíèÑ£¢TБí.\¸?+OKKÓSSGŽ!"//¯øøx¾¤   ¼¼\x Íâ?Ø´´4":tè’%K¬Ý"h5£wê…§1q×ⓘ¿üòË+VÜ»wO¡PQCCC÷îÝkjjÚç—¦»wïž6mZ]]§§ç7Úabá?XýÚºí€6社G}úôá3”ˆ²³³kjj„—Ù·o_"5jT;ì@Ÿ81ªV«ïëÝâŸ}×ÏZŽŽŽþàƒ’’’ž}öYBŒ€5ˆ£¾¾¾·oß.(( ¢Û·o'''Qhh¨(•7«±±qÖ¬Y111{÷ÌÉÉ!Ä(Xƒ81êêê:|øð}ûöÑÊ•+ù™>§OŸ.JåÍúè£öìÙóã?FDDTVVæçç{yy=ùä“–Û#@³Ä¹ÅDD±±±{÷î]»vmhh¨N§ KOO¹±z<==ùί>GGÇ;wî8™÷ •Ž·˜l@ËSÚñƒ–ZºTSS“™™9~üxN'‘H‚‚‚,:ÚIlÐÁƒSSSçÎëïï¿eËöÊçÍ›gh½{÷¶ÐÏ[1&  ³­7JDjµúÚµkD4þü¯¾úJÄVšqèС¼¼<Q*l:õž¿¿^^ž(•ì½Q€ÎNœyê‰H£ÑðªV«×­['Vµ-â8îôéÓDôÔSO‰U§———A¢õéÓG¬ÊÀƈÓýóÏ?«««‰(%%…ÿY=´½Q Âz­V;yòd>C{ì1~ì@!BŒ®ZµêܹsD±aÆï¾û޽N€Î‚õ¤þ÷ß4hP}}}¯^½òòò EÏž=sssû÷ïo©&ÛœÔØÖO7n¬¯¯'¢±cÇîÚµ‹ˆÔjõâÅ‹_yåQÛi³0à  ³cê^¾|yÀ€:îµ×^Û¿?•””,Z´(;;ûƒ>6lØàÁƒ-×t€Þ(€ `º6ºsçNN'•Jcbb8Žûøã===·mÛvíÚµùó熅…a*°mL1Ê?ox̘1jµzÍš5Ÿ~ú©V«Õ_áèÑ£ƒ ºxñ"S:0¦½zõ*Í;·ªªê³Ï>#¢Áƒk4š‰'†……M:U*•VTTL:U˜4ÔvïÞ­T*% ÿÔQ€öÄ£•••r¹<,,ìÔ©S<ÈÊÊš2eÊ+¯¼òðáÃäää””™L–——g¹Ç”à±Í`]L1Ú³gÏÞ½{;;;óÏlž1c†R©$¢   ÜÜ\N÷úë¯øá‡D”šš*Js à±Í`uLžœùyëJKK%Izzº0ÓƒV­Zåáá¡R©ˆèøñãâŽìÑétÛ¶m;sæÌìÙ³ïÝ»wüøq"***êtã‡:]ƒÀg„þ ÆV‹wvv®­­å8nܸq}ûö---åßêß¿JJ ¿,•J£¢¢Œí¨m.\èâârüøqŽã***èÑóD:úû 'k7Ú‚é¤~êÔ©*•jóæÍD”˜˜èääréÒ%"òññá‡:ëtº   –5µwïÞ{÷î1B"‘¸ººѵkלœœøï´¦U©TñññK—.ÍÌÌtww?sæÌôéÓkkk‰è‰'ž(**"¢øøxww÷É“'‹ÓÞGòóó…ÿ V­ZED?üðCMMM'zô=ØÖG“L˜0aݺuãÆ[³f ÇqË–- $¢Ç¼¨¨hÆ ëׯONNvpp£µÍ;uê=ýôÓ–Û€1â>>W®\Ê«««ù÷¶)Fu:ÝG}Ä?Õ©¬¬LRåÒÒÒnݺ±¶ ÃcŠQ©TZ^^.¼lll–Ož<‰‹}аžÔó îîî ,à—Ïž={þüyL³ ]kŒFGGËd²÷ß???ÿ™gž!¢’’’éÓ§/]º”¿e`ÛD¸SŸ””4þü€€€°°°²²²]»v½üòË›7o¶³³³H“:q†ßïÙ³'''G¥R½ñÆaaaÂæ¶M´_1tM¬×Fº8Ä(Ä(Ä(Ä(Ä(Ä(Ä(Ä(Ä(Ä(Ä(£3ƒVUUQ||¼···™3ƒB«¤¥¥…‡‡§¥¥ÑСC—,Ybí@«á OÖ„yêlNê˜ F˜ F˜ F˜ F˜ F˜7*àGŒbܨ…àƒèì0nÔš0nÀऀ b€ b€ b€ b€ b€ ÆZ>X€ÎãF­ ãFlNê˜ F˜ F˜ F˜ F˜ F˜`ܨ•áƒèì0nÔš0nÀऀ b€ b€ b€ b€ b€ ÆZ>X€ÎãF­ ãFlNê˜ F˜ F˜ F˜ F˜ F˜7:cÆŒ[·nQ|||xx8†7ZÿÁ†‡‡Q@@€µ›m¡LpRÀ1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 À1 ÀÄèˉ¤=ÛБ™˜D½Q&ˆQ&=Uhz£L£L£L£L£L£L£L£L£L£LŒ>á ÚLÿiø½µÍCoÔÔ××oÛ¶mÒ¤I^^^r¹¼{÷îœ>}úÖ­[­ÝºÖ‘˜­ã´Óº-«Ã£I:½Ó§O¿ûî»þù§±:×?±ù©dÝã2ÝßDo´KAo´s;räÈ‹/¾Èg¨££ãêÕ«¯_¿®ÕjïÝ»wöìÙ˜˜˜ÀÀ@k·±u¸¿3ó-+Bo´«¬¬ìß¿ÿ;wˆH&“ýüóÏ/¾ø¢µ%²Û­Coèvbß|ó Ÿ¡D4sæLs2ôâÅ‹³gÏöññqtttppðööž5kÖÅ‹ VÓ¿ð×ØØøÉ'ŸôêÕËÎÎ.(((==ˆnݺ5eÊWWW¥R°mÛ¶¦ûºzõêÂ… ýüüœ•J¥Z­ž?~aa!ëa·òXþóŸÿx{{+•JŸ/¾øB§Ó™¸²Ùb³›neú:)Çq111ÞÞÞöööÞÞÞqqqM×1ó³2ØÑ¦M›‚‚‚T*•L&3ûc à Ó:t¨ðïxìØ±×OHHP(M¿ …"!!AMýwg̘¡ÿR&“mݺõ‰'ž0¨dûöíú5$''+•ʦûrqq9räˆùÇhì»jþ±¼óÎ;ëÌ™3ÇXµæ4»é»MkÓ/‰ŠŠ2XgÓ¦Mmû¬ôßýç?ÿiì( áÓïĺuë&üUTT˜^9++K*ý¿“Áƒ WN¥RéÉ“'…•õÿ>GU^^þí·ßê¾ôÒKååå›7oJ† "l~æÌ¡ôÔSO]¼x±´´4$$„/quu½uë–™ÇØlR˜,»wï6(,,,,,8p`³Õ¶ªÙ¦#LÿÝ_|ñîÝ»±±±ú-aß©‹‹‹F£©ªª2ó“ËAŒvbú§ ¦Wž8q¢°òáÇùÂÇ …'NVÖÿsÍÌÌä8îîÝ»ú…Çç8®¶¶V(Q*•Âæ“&MÊ·lÙž8qB(\¼x±™ÇØlZ™,/¿ü²PxèÐ!¾055µÙj[Õìfkhö]þD¡¼¼œý³Ò¯611ÑÌÏ, 1Ú‰µª7Ú³gϦ+WTT…ÂÊú®ÕÕÕÇ544è ý«rÂæBaqq1_¨Ÿ¹~~~fc³ieþ±ôèÑ£éšú‰Öæf7[ƒù ûNïÞ½kæg–†;õذaÃNŸ>Í/;vlĈ&VV(Â_rcc#RÜØØ(—Ë…´Z-¿Üìfó õ÷Õ,''§û÷ï›>:3ë7},r¹¼±±ÑÄšmnvîÔ³VÐ1áN}'6aÂa¹Å_+=öØcÂruuµÁ‚Á ŒZ¬ª¦¦F¬úMK÷îÝ›®YUUÕbµÍblvÇÙ)ˆ 1Ú‰EEE¹»»óË›7oÎÈÈ0±òðáÃ…åììl~á—_~ivFÁÁÁÂòõë×›=b©ßüc  Ïž=Ë/œ|xNNߤóçÏó?¬2ÿ›­ßücIII6á…Š‹‹oÞ¼9hÐ öf÷êÕK¨áèÑ£æ4›}§øËí˜ðÑéñõõupph·Ï 1Ú1áN=t9»víúÇ?þÁ/3&--ͺíη˜ÀÆ…††&''ß¼y³¡¡¡¼¼|Û¶móæÍÞ]´h‘Û¶½Q°qÆ`jooÿßÿþ·éÞZ 1 6.;;;)))###??¿¾¾ÞÅÅÅÇÇgÔ¨Q³fÍêÛ·¯µ[¶1 À×F˜ F˜ F˜ F˜ F˜ F˜ F¡,]ºÔÏϯ͛›wS\~~~Ë–-³ô^ÀÆ F¡=ÅÆÆêÏ¡”=vìXWWW¹\þøã3ÆüÚØ#ÕØ”Èo¼ñFLLLQQKåÐÕ F¡=$$$hµÚÐÐPþeVVVhhèõë×ÓÓÓkkk:¤ÿ˜úfñÒ«=Æj1b„V«MHHkGÐ F¡=8p€ˆ À¿ŒŽŽ®¯¯‹‹þø¯¨±e}—/_~æ™g¼¼¼®^½*¬¶qãÆY³f5›¤Më©««S*•æÏ¸@èBûhök~:£¦ÆÖ^÷½{÷újAAéÍe2¹ºº¶¸yÓºšÈK`¬ª;vxyyÉd2£=Yë=£lVÓxáK6mÚÄÏzàææÆ—GFFÑO?ýtæÌ">|¸±Úööö™™™fnþÇ‘——W³ Ói¬*WWWGGGaÍ4ÏüÏÀLÆb´¶¶–Ÿ¯PxW¥RéG¤L&3Q›N§Û±c 6Ìôæ8p ?…"ßýl¶aæ´ÄÝÝ]"‘xzz.Z´èÆM›‡k£ >Ó×Fõ—»uëV]]}÷î]ƒYŒÕöðáC;;»ºº:›{xxܹsç—_~ñ÷÷çgiºk3[rætÚÔ@ ôIDAT̙իW:t¨¾¾Þ××·é£Çqm¬i„ D´~ýúúúúWæ8nïÞ½¤7í ±ÍÍÐe0‘—9- Ú·o_NN5_«u=u34ýý媪ª9sæèϦe¬6žR© ÉÉÉ1½¹±º &ò2§%ü²T*U«Õßÿ}Óæá¤€ Nê˜ F˜ˆ£Ÿþ¹èutXâ_åÇg‰['@‡…“z&ˆQ&ˆQ&ˆQ&ˆQ&ˆQ&ÖŒQF#‘H EMM _âéé)‘Hœ—-[FD Ó¦MsppX¹r¥Û `‚•Çæçç¿ùæ›çÎÓ/¼té’ŸŸßÇãââΟ?¿|ùò¡C‡VTTˆÛNQÈE©E«Õæææ†……¼eðÌ}ƒ„ÍÈÈÖ/©««‹=z´B¡Ðh47nôôô|øð¡(í1úí·ß®X±‚~ßóÏ?oð®éžiFFFxx¸ð²¼¼|„ ½{÷Þ¿?ýöÛo¾¾¾¿ýö›ŸŸ{;,õÚè×_ýþûï Ï@-..ž3gŽþ ¦çYÕï^¿~=888$$dûöíöööDdoo_TTôÕW_M™2…±Â£Û·o–ôW0ñøU•JUPP Ñhø—£G¾|ùòºuë¤Ré•+WˆhÁ‚üEÒyóæ1¶ÀBXo1íܹ3**ÊÍÍmäÈ‘‹/žìÐEàiLL0ü€‰ÉÕhH"!…‚ &ctêTºqƒ$''sêâ8næÌ™‘‘‘:NœÖtx-ÍÈ ¿7aÅŠü”ÐÞÞÞøù&t-Ýbš1ƒÂÃ)2²Åв³³ƒƒƒù~¨\.ÏÍÍ0`€X­è°ZºÅdvotõêÕ¹|Ïž=—/_ÎØ2€NÁdŒªTTP@†Ç›PVVvðàA"²³³KIIIMMÝ¿aa¡X­è°L^½ßÌZ²²²ø®hbbâĉ‰¨_¿~[¶l‰ŽŽfn!@‡&θÑÒÒR"Šˆˆ~üîæævôèQQ*èÈŒöF.\ÈŸ•‡‡‡§¥¥é?‡©©#GŽ‘——W||<_RPPP^^.¼„fñlZZ :tÉ’%Ön´šÑ;õÂÓ˜8ŽkñIÌ_~ùåŠ+îÝ»§P(ˆ¨¡¡¡{÷î555íóKÓÝ»wO›6­®®ÎÓÓóÆí°G±ð¬þGmÝö@ˆsRߣG>}úðJDÙÙÙ555ÂK‹Š‹‹‹ŒŒìÛ·/5ªö OœU«Õ÷õîGñϾk‡g-GGGðÁIIIÏ>û,!FÀĉQ__ßÛ·oÑíÛ·“““‰(44T”Ê›ÕØØ8kÖ¬˜˜˜½{÷FFFæääb¬Aœuuu>|ø¾}ûˆhåÊ•üLŸÓ§O¥òf}ôÑG{öìùñÇ#""*++óóó½¼¼ž|òIËí YâÜb"¢ØØØ½{÷®]»644T§Ó………¥§§‹ÜX=žžž|çWŸ££ã;wœÌ{JG€[L6 å)íøAK-]ª©©ÉÌÌ?~¼N§“H$AAAí¤?6èàÁƒ©©©sçÎõ÷÷ß²e {åóæÍ3H´Þ½{[èç­ÐÙ‰Ö%"µZ}íÚ5"š?þW_}%b+M‹ˆˆ8tèP^^ž¿¿¿(6zÏßß?//O”Ê v„Þ(@g'Î<õD¤Ñhø U«ÕëÖ­«Úqwúôi"zꩧĪÓËËË Ñúôé#Vå`cÄéþùçŸÕÕÕD”’’Âÿ¬Z„Þ(€ áN½V«âŸêTVV¦?©riii·nÝX[Ðá1ŨT*-//^666 Ë'OžÄÅ>è XOꃃƒùww÷ ðËgÏž=þ<¦Y€®€5F£££e2Ùû￟ŸŸÿÌ3ÏQIIÉôéÓ—.]Êß²°m"Ü©OJJš?~@@@XXXYYÙ®]»^~ùåÍ›7ÛÙÙY¤É‰8Ãï‹‹‹÷ìÙ“““£R©Þxã°°0asÛ&Ú¯˜º&Ök£]b€ b€ b€ b€ b€ b€ b€ b€ b€ b€ b€‰Ñ™A«ªªˆ(>>ÞÛÛÛÌ™A¡UÒÒÒÂÃÃÓÒÒˆhèСK–,±v‹ Õð„'kÂ<õ6'õL£L£L£L£L£LŒŽð#F1nÔBðÁtv7jM7 `pRÀ1 À1 À1 À1 À1 ÀãF­ ,@g‡q£Ö„q£6'õL£L£L£L£L£L0nÔÊðÁtv7jM7 `pRÀ1 À1 À1 À1 À1 ÀãF­ ,@g‡q£Ö„q£6'õL£L£L£L£L£LŒŽ1cÆ­[·ˆ(>>><<Ã-ÿ`ÃÃÉ( ÀÚÍ€¶À€P&8©`‚`‚`‚`‚`‚`‚`òÿlÖ°eË#aIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_transport.png0000644000175000017500000000421011273045225025340 0ustar julianjulian‰PNG  IHDRÍ ±fü5sRGB®Îé pHYs  šœtIMEØ 8ëÚIDATxÚíœkl×Ç;³óÜ·×ë]?À6Á±A6¸`H¥%¥MÚ¤‰Ú¤é‡ªÊ‡FU#µjP¥ †%þ€D*GQÔ ¤µªDTD A@´ Ô<Ú†JI)Ô<Òðã]ïÎ>f¦Ö±c¤Ìšû“VòÞ¹Ò9º÷üï9÷ÞYû†ÎqÓFC ÑB4@ D#Ñ!šÿOžÜ´…óƒb „hÓåØ¿þÍO6þŠWwî¦X*‰©þ[Ñé»ï{„<úë×­½jŸþSgè{u'?ûñcžøpïwCö«øeZýKÅ"V.ËξÞêG"Y‹n˜ì?r”Ãï¼Ïw¿u­ ç.ó²¹gÜ»žæÆWí³ó=ô¾ð2¯¿ò!šOs¢ÿ³›=sÚ „‘å+»~q4;‡ycϹ8šö̇ں™"Q #€Ïç»fÿ\vŒ Ã7ÜH´Šh<®Ë…¡¶½ð*óg×óÈƒß ‹T4˜Þ{ÿ'Nö²ní V¯ì"]ÖG–ý˜°ç¾xƒ×]ž­¹çÛsÿÃSWòÁ¡a6nÚâ适aE½¬ýБwéyöEÞ:|”HU’úï„ÇI¦¨mh$U?󚟚T=±ªÄ ÷CQ5‚Á0ñDŠÚ†&fΚ˙ ?Ý´•×Þ܇ã8M}C#‘ª$o>Jϳ/rèÈ»—û«¨‚Þ‹fã¦-  Oi»ÿáǾb,{šiÂÑÙlŽÍ=½¸ÒdðŽeslîyǧx: Ц!I“z?{~€¾W^çøé³„"qf4ÕñÌ]71ƒ!‚¡È´2 €á?’$!ûý膉_QÐtÓ 2raˆÝÞãOGþÊ#~ù-s<Ô`$F(`dxßýao¿w”î»›TMbÂ_EÓ<÷Åñ)lîyާ~þ#¦€+©lîéeÓ“cšÆD,{žiÂá%Û¦wû,G¦º&@ѶÙÚûyG&¯ñöôÂçC×u¬|ž]{òô3Ïsú|šTC3µ ÄI‚᪪~a6§>Ÿ¿_!‹'HÕÍ`FÓ|jˆž_ÿ–mÏ¿L:“ñÔUU †#ÄÉrnhæôù4O?ó<»öÄÊçÑuiš‹ÌÿB,^CÞ‘ÙÚûEÛ º&…åÈônßAɶ ‡?[ùzÝ™&ŠÒ·c/£–KMªžb±Àö¾×ÎI$ëÈf½EÕèÿè,?ÅßÿÑO´¦Žh¬š@(Œ®›È²L©T¢ssÓ Ç'˨’Žß¯ j:†  qâÌOü¢‡¯¯[Å]«»=²_޳躉¢hhº1žõyóà»|tn]×PTï3M8Ã4ƒ §/²½ï5¾ÿЪªkP•QË¥oÇ^‚¡heDc‚œ<;B<‘Ķm¬\–ÝûߦÿãÉ:UŶ½=úÔtƒã§Ñtƒ†™³0ƒ!L3ˆ_Q$¹<|Ás‰x$YF7LEEÓ 3Èðà9~¿s;Áã?üž7¶ñá“$ü’„)QU Í0…£ ŒÉŸO£é†çc i:áh à Ðÿñ»÷¿M(E7Ê‹êɳC`eD£j:`ˆ@0L¡ £\Ç7xŸ®g™FQ‰Äbèz¿¢¢i:~E™Ø[¸®ø‰Ïç+Ýgâ:ŽSâŽe‹X½bIEì˲I’‘$EÑ( XÖy+ç¹}I’Ñ4M3ÀçÃ0 tÝD7LTU£X,ûlÑuïi$Y¢sÑÇÁu]\\º;ÒÕÖ2Ùæqк¸tÝÞÂÒÖY¨²DZqÇm >5N®‹m—(òÄ#Þw'kWvL9DñÚ~Y¬6ªìcië,ºnoÁÅ­Œm×ÅqºÚZèî\ˆËd[ç¢9H²TÑäsYºÚ[XÐ'›I“ß¿,_2ŸEs“d³ìñ—Wä- \›ö¬îl!°¬,¶]ÂǶ)ä- V†ÅójùæW–R]©¸`-+K4 ±º³…öàÚåùóÛ¶Éf3,š›dù’òeo.›!›I³ )NW{ ù\¶2åYv¬|a¸¬m.cciöøóijòyví;å±hròå?£®šd"Âûžæè?ÏbË ~E©Èjv³ ¦T*’·r¤b«:–™•³‹ãØ”ŠE°‹Ü>7Å¢y3QÇßœ(äs)ÏrciV-½îŽ…m#ì]ÙÁ²¶¹SbÙ{Ñd' ­YÞN&}qÊó5+“Iz»Š”J”Š“‡ ª¢°ä¶Ù47$8ô—㜻¥T,âz|¯w36”Ë›b¡Nî¶&æÍžQYœÉ×…’1ƒ/·Í#›z‘Y*–°+ðŽÜŠŽ…¬Y±xJÛ²ö/±fyûcÙSѼ°õ—S¾oøê—õÙ°îïW³+(" ³þÎvþöA?‡Þù1¾‹¥®;ý}Ô'µ´7ÁꔃÕÊÒ˜ ±ª£]S*.ܱl†j§@Ç‚Y´Îo¾bÇu*R\)/ÕKcÙ3ÑÜ  ,+Õç­ó›©OÆØ{л ¯©J¸v»06½|SÊ£È7>XÊ¥˜…©û¹kY M ÉÏm^Ú4±¦»“ꪫßXV¾œ oa|â_8ÝÚ<ñÔ6Ö®ZÊ]­øý~1 B4‚kqê£ÿÐØP+BˆF ¸y¿Ü„h!@ˆF ¢„hÁÕø/®ò<`Œp§IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/start/tb_view.png0000644000175000017500000000433611273045225024267 0ustar julianjulian‰PNG  IHDRu £% ¯sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ ¨r¼^IDAThÞíš[l\W†×Ú{ŸËœ¹ÙŽí8¶IâĹ˜4$VÕ@i…´ðBª„}U¼AA^ ˆÇJ !Q5©U[Ò4H¹›í¤ø–ØãÏ}朳÷^‹‡‰7 jfì¡BòzšsfF{Ï·×ú×e–ça˺fb Áß-¾[¶Å÷}1Õñ7kµ:"Z¢L:µ)[!¢s§ê¡a&D¼u—×ÞÆ{]0gSþ¡ƒãBˆÿo¾ÖÚ«Ó×êð_—§Ï]¼*µÇÇŽ>(„8zxÂ÷ýŽ·¢µ.ÖãÁÄ:(¥:Ö·‰JG€Õæ6`Çu¬1D¬”¬”W´1žëÞÿr—¦®×¨Í]"dS‰{wu…o¬õOþ":^2ñ“}R*Kvf¾pöÒ_kÕÒ/ŸÿþFøcHëXk&ª6ëù\n÷ž½FÇĬ”sca·ï0F€£ÔÔ•KCÃ#®ã1°Ö±Ñº-¾ÕºA7cÁ´§§BÔCÝ-ÿMøþø}¡‘™ž>×õ„ÌÇqµ\ÓÈdÓ %ff"f«­™š>sú'¿ü)H%o,Ì1ÀŽáQ£cJ?{¶·o›çzL–©]?`ÈZæö6IäJî¢þîÛµ³=}®ë0£¥” ‹Û¢¹Ê–o.Ì;ºÿÓûn.ç#Rýýý@¬”³vÜzáûÞºn{!`&†vùp;kÝoB˜[øö÷~ð‡?ŸTÊu]Ïq]©””J*帮ëz®ëýååWŸyö¹7Né.@ll>¿räÈ‘ãÇ?–übi•¡%’€ÄDÄÌ@(ƒe`æNÂ¥u\k(ÄÝwïe›ï¿Q¬—óåÙÅÜáC\h2ñºaH$…bµ\mÆÆnÄyÑq>{±'Û³œ+­1ˆ‚˜@£É"C³\YZZ^É”ã‚@k©ƒÃ$º QÔkµr©084"¥b¦õQq§lAè ßñ=»^øñ³½½™\¡téíшÄÄDÛû·=öÄñ/|þSŽãtžâÈ4£Xk;2400°ýúôÔòj¥Ç–(6€›Q¬£¸¸ZÊ$ð3'Ž{ž7?7;0´ƒLÛ|‰ÉXCkˆ <ЛjV 1‰d:‹¸&>ܪ[A„¾ Í狈ͰD~ÂsÉZZ—OÈ23/-ç¶õA‡U„ŽÆPkcfÖ‘Ž¢P7ë‘u­Ž44ëa¬õüÜüg?ýð£ýH©TúÑÏ~å%³.ë¶ÏÒØPÇëÑZ³ÿX&“™™žY\º Nà{ÜòWF@À„ƒ›Ï·X*ë»?}ìчáE#"ÃüÜó/üúì¹ OésŸüø#ñ­Ô 5"}úÍx~bþßóÚøåZ o.3bÏà°-×jS×fÓÙþ|~¥X®ùÕm‰¶×еn4ãõ±NVkm<ÏŸ˜øàŽ;¦gf–W–„(Çeæ5ÐtÍçëyÞÃÇ&GFFîÛ5›«¶d¾Õe1 ÜÖ›Ø3ì*îX,°aãé—_y³”_Ù½ÿ¡ÌJ~Mó;qùÆœðÓÕZ#$††ú­6ÖXCíBõF3W…B`ë‡ kl¬ ‘M¦3:r´°’›šž¾±R”nÐʬD”ò2›Ï7$¾óµ§Za¯_xw=” ¼‡&=4yhƒM20dz{vâD"‘ÛÇdV ÅÑÄ7¿þUxî'¿X®Ô%3®+ˆ[õRûúKÇ1ß.Ö’¶Æc-!’è%’ “a\FÓ¼Ó±w#¿1óïþô’ŸH<0±Ÿˆïj X®ÿóü•×NyüÄññûnßíÀ@„B¸Žô}_ “ÍVÏ]œBÀJ¥ä&îââÜÉ¿¬V+®RØ~y|)¾E¥Q^›Z¸<3WoFŽRë?Û-¾¯¼ö–aQkh¦»@!–r«W§¦/_¾òàáóE d"b´LÌLÀJ¨žL¤’qoß¶óW®Ÿ<ù÷toßÐÎq!:ék˜x}××JbB š_¼põíB±*%*)˜ì](6Ÿ¯â™o<ëº/þñUD±®ÑEøOñÉŹÁ¾µÈ ˆÌ€LĈ˜³=iÐj¡=ß;HÖ Žì‚Ó­jµ}1z§;#WKW®-¾=¿€R héÏÿf~¶wl'Tk %¸5di!&ct¶7é(µ{çðFvÃÐB…ÌŒ€`‰€”qT?õÆëÌÜ C!RÌè(™J¦|×kµÜÉZ|×÷Œ·.\Ó–•-ÿ/NÐÍùo:<ñ‰_zí’1º50Z'<ñø‰c›0|àµÄ‰xëŠ(…\é7¿ý=ø©Áþ¡€É"±`î4VÞ‰ªåÎRà{)u‘/ìÝ5œ:sUÇ‘R‘£p÷öŒ£Ô&ð%²Ö3øÉŒÖ1rOÿ H=Ù>@¶Æ€µ~*ËÌV@ +:r`¾gÞ{ÏÄØõÿ/|kµÐó|"GM×IÃfX½•*UkcùåVˆÒq Z«´¦^ˆB†Q‘¤t}´_Ÿ±µ¦=\ €Ø–uÈ7“ò#ÒéÀV ýÞLrãpqt{6ÉZDºWív;Ì,•È´»\3 +å²¥öæëR¨°‘î:ßj­¾´R ’µ«ùüØpvã|•R›<21n‰Z¸ïGC@I™N§U›s¥ñÝCÛÌ£c;‡ºÎ·Ñh„ÍFÃõÈÚ0lT«µóu§·¯7“I·;ÌED©T» à‘c“›„.n=ÕUÛzþa‹ïß-ÛâûþØ›T \-.x”IEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/tools/converter.png0000644000175000017500000003026511273045225024642 0ustar julianjulian‰PNG  IHDR÷ÈzL?¼sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ(š»¤l IDATxÚíÝy\gþðgfBIá¾=ð@TDÀ£Úm­¶VëÙÃ^»=¬ºÞV+¢xRQ«Ö£öÚîþv»½´Õ¶¶µj±ÛZð@Qð®§B If2ó<¿?‚)å’H¢!|߯¼4y2GfÂ|òÍ3“J«.A\ « å@Ê€”)R¤<@Ê·IY™êåi3»FLJu7aÊ¡ŒÃ­ïÖö‡îsÊO›1+*2"ûè‘‚—S’ßø÷>iϼáYà\)úLî’Å ýü”±xØÐÁ»>ûØÒ.BÚº =û ‰è1mú,½^o-Õ}¬w>lXËû„ýûãOÄ úËÈÇÎ_¸hi7™L³æ. ŒîÕ7nÇÎ÷­Ãþù—a#F†F ˆòÉg_À»öIùþýú­}sCaQq£ö­Ûwæ=÷ËáW.æº{¸¯IK·–êZu‰õNÇ=züÀßä_½8öñÇ.J¶4¦oØTSS“wúxÖ‘ÃÙÙ§¬Ïš³`é’EEùW~ønONÎx %”MÝ&*•zýÆÍ‡ÿ÷‹^_7òῤ­YŒ?dÏîO»w¨Ð hÔïr-EzÃé·ôÐ7 ìú•ó ¹!d4#»÷Qß*@õðþ½‘á¡‚‚ÂAƒ‡[†ï—4oÎßóhpp¼…p÷)_Y¡*.¸¢¯Ñ!„xd‚µ][Y¹ã÷²OæÜÿ-B( $Š‚"„`Œ)ŠÒ¨ŠmJùfÛýƒ#ËJn0 ƒây> $ÊÒž›wvó–í'Oåx{wY÷æêÇFÊ:¼ÞK@çAS´´‹wxTO¿ÀÖ‡µò\u•6ÿêùž1ñ¾Á"‘!dÐ×Ô±ÏÒ%‹¢zô±< ð÷?ôã¾  @û.†ŸŸ²äæ-K-_RrÓÚ7 ÿgŸü!äðÏ¿Ì[¸ø±ó£FO|Þu@ç±PU¡¾t6[,ñðò–ÝeÊ^¿Ô36Á?0”cMË"Bž}á¥9³fŠÓ×Õ}ðá?ûÆÄX†|ù¥.N^¿nmXhÈÕk×ßÞºãŸÿx!$“y_¿~ÃÒ“ÓôáMž8~ŪµÛÞ~ !”ºr­µýµ³/ZIx¡áÇt^]zö/¸v¡âƒXà[¬ú[™D]Î×/eM‚À#BB/ÿíÅõ7EuïŸ8ìâÅË}ø®eÈùsgNL˜4ejhdé3çŒ;ÆÒ>gÖ̇GµÓèá-[ú†—§g¿¸¤¡ÃGçæVÿ™4fÌ£}ùµ°Èè5ié¼·Þl@gDˆ´‹wmu¥X,ie¨Öúå³ï=áƒAo‰øûëÚµëÏ<÷×3§ŽÁ; ƒº®önjy„¢¨ûñËW¬ÑéªËË+V¬N{|ÌcðŽ@3AÝ2g?Mxxh⃗y{§$/‚wl"rò×7ãµWg¼ö*¼Opwàœ”)R¤<Hyò åR¤<€ŽE« Ã ÄlfÍfŽ`‚õ€ë¢(š‰ÜÄ B¤|ga2JŠòsss*Ôe°6pa Íøúù˜ÕMâ.%í;e$¤|ÇÀs¬Ju+ûxÖØISûF3Œˆj÷'<À9 X¸v)ïà÷{½}”aÞ>k„”w}œ™Í=}â‰)ÏEtíInåº0Уw?–eý–ñÜKsPûRö¾v “Êòòˆn ã‰'Bà_øþuÕ !Áa‘•j5M·7¥ït­¨‰/Â%UA]­îóÿ~´xÅfA0Ošüä7_ïu@‡p6û #Æq¬¡í£X¶ñÚšêîܰ %½®¦ª•ïÔÐcÓaÐ!½çK‚1¬:Ô×ñÆÛleUBÈG¡h:°e'Ó”º[:QÊû„µòÅÅùQ4E!Oyò™½{vwô·ãÍuë¿råÓÿþÇ^|þÅ¿Åôé³,%8cÊ“?¥|UUÕãã& „~üaŸ¢IÐ[¶qB0EÛá ûôËÊ8‡Z­å)„!dÏW»,Ývž²¦7ÒfgÏž›8ù©€ÀP…oÀ_õÍ·ûZÞ:q›æÒ,­Vûá?þ¹iãúf§ßÒ|[÷Ö†õï½ÿ¡N§#8“Û)ÿ‡ÊÊÊÇÇMÐét:îñq*++bÝÆiÊ9R>çô™¯/Ù¾¶0ÿ÷ ék,ZrúLî}üÌÔªK¬7ËC»Lçþ÷ØÜÞ 3å©©–;½Îrkt¿-._þ}üÄ)S&Oºòû…Ò›…ëÓÓvíþ²õQÚ>ñ;úìó]'Ž ´<œ1sÖ­[¥¡[·JgÌœuwÓ z≱_ìêðßr€kÓétcŸ˜Ø¿_ì¹¼ÓçòN÷ï;ö‰‰:ÝŸ6.ë6Þþ]¯öIùm;Þ]±léð†IÄâá [¾tɶï6[œ6,®ÖȾa;v¾ß3&.42zî‚E,ÇÙ4º­² ië6ôì3 $¢Ç´é³ôz}—”eÙ¯/‰ìÞ;²{ï…‹’Y–µÎâý?ŠKT†[nÙº£ktLïØelÛ¾³{ÏØÞ±ü–i¾°¨øù_ ïÚ+8¬ÛÓϾ¨ÑhÚ²\EÕÎùEÓbÁrGê%oØny8nü¤ŒŒÃ––ß~Ëœ<åiBHúúËR’Ÿnª···D"IJLüâ³OZ™ˆõŽÔKŽ’zÉ­íùO>5Õ? Dá0aÒ”òòrëð;Þy·GÏ>ž]^ðƒ‡Æ=þ¸õáŠÔå)ËRB)ËRW®Hm4÷F³3ŒÓ¦ÏTúEv~{붆¯vòÄ û<Å#pæZÞÍMüÌÓOí|g;Ã0 Ãì|gû3O?åæ&þS-_¿#ÊIjù“'sFzØúpô¨‘'Oæ´^#[+ekãñÙGdä嫨ÐlظÙÖÑm²uûμ³ç~9|àÊÅ\w÷5iémqÝú·TjuΉÌSÇ3oÞº•¾a“õ©Ó§s9|@£*¶<¬Ðh.äZž²äµ™sÊ+4çr³—§,I]¹Öòìs/¼4sÆ«W/åý~1¯{·n–ö;.}»‡îÉÛŸóm}Ùik’S–›Ífžç“S–oܘŽ:ò[æ„ñãîbíÕÕVYþµÜ±¼ž9³ÿ^Xp½0ÿjtÉ)Ëÿøž—súXÖ}Me£‰\¸pqÀ€~Í}’Ýyvkß\WS]sùâ¹SÙG;Ñpุç·j83©ÔcÞÜÙÖ"¦éysgK¥ ‡yòZÞ)o‡#)ýƒ#ËJn0 cyÈó|HDõ­Ôd‡§õaÓöœ™QQ‘¡üü‚ Sž9Ÿ{²í£·R¹kÕ%MÇ?dÏîO»w¨Ð hÔïrï8„PLÿAßóU×®Q¡7ò'LyæBÞ)ËÀÏæXǽ~å¼B.g9.8¬›õ~xTOËjiÈh4ˆråR^ëËUW«Û·ç³ W™›û}„§·O]MeÃ;Ú_}mfÿ~±M«TªuikBÞ ¿*Êò®yzûÔÏ¥Õ‰´4—?õê½cúå_µ výÊ¥  À¦ƒÉ|üµå¥"QýÎÿŸ³2uYtï¾W/_X“¶î¼ÛìÒYôèóÓÁýQ‘‘¡ùùý ²>+‚¯°N«†(Îãbîф㠵U¶ŽX[SóÕ§¼6?õþI)—ɪªª”J¥åaU•N.“Ù:‘ðð0ëòòŠvöË·>@™J5tÄHËw(ŒqK߉šN§¢Bn¹^Q¡±>ex …\Ž’ˆÅ ïó|ýVOžÊY“–~îüEƒÁ`éŠi[¿™ºj͹³çên/ŽõÙÀÀ€fOÁ!—Ë«««}|ê?]>xïkßú‡ïïl:Jõº<,4ÔÒÖðYN'—ËÚyÒÁúgi0ÿõ¯Ïž5ÓRÎcŒß}ïƒW_}YêñG9oÙÆ !´“c“ÿSÆÿ¬Êø9!!¾þ3D$2ëkOËÁ¡-).®Ô’’›~~J[G·I€¿ÿÙÓ'ÊK +ÊŠ´êk7Ëùù)­¯³¨¨X©ô½»ðÊkŸöêËÏæhTÅ…×/·1•¬GÎ6ø?>´E"ƒuUþQÿî|ïý¹³gÍ›;{ëö––aC‡ì?pÀ¦‰´äÅ—^™9}Úµ+kuš²›…mYœ¾1}òΞkÔhù°¹#¿â’’F6ygÏõ‹…@ÎŒcÙÝ_~5gÞžçyžŸ3oÁî/¿ânïäk´Ûåxy;LbþÜYié2³ŽrfsÖÑco®ß8nýa11½w¾÷¡Ñh,+S-z#å/ì2ïë×o4œHêʵ­V£Õ._±æÉÉmÝ&/¿ôÂÂÅÉ…E<Ï_ºüû´ém=¨cÒ„ñËV¬Öh4&%uÕä‰ãï&w‰Dâ.)*.Y¸hI—‹¢)‚!äÉgžmiïklߘíÛß©3n•–Î[°ÈÒþ[f–Z­~áùg§½úr^ÞÙ /B’—,N{3}÷—{jjjX–ÍÌ:ÚúDÎE&“]½zÍ:w£Ñ$‘HÄbIaaÑœy ›ßÔ£ÞáÀMË‹fg÷ääÉ)ËVXÞË>ëSß|»ï±GGÃî>àÌ{_e2Ùwßî=wî|¿ƒbûÇŸ;wþ»o÷Êd:\غ;Ëñò‰ ƒ¶nÞ˜œ²"<*zÉÒÔ­[6& ª¯å·myëLJ"»÷3nÒð†YG™3kæÃ£Ç6ìûNJJ6â‘ñC>Š”äŶŽnãÇÒìÁ‰ “¦L ì1}朱cÇ´qÄÔeKüü”ñIÃ㓆,OYrw/`Ƕͩ+ׄEFO˜ôtRbB—ËzäìW»Z¬åßÙ±í‡ý?†„Eýøƒ#†[Ó×o\™ºŒa‘H´qCzêŠÕ¡Ø¾1»?ÿô¿Ÿ|Ú½gLXD·´7Ówñi+i´‡ÿedyýW®÷vn_º,5 8ìñq'%¶e <ÿìÔïØ_¦Rµñýj8»ÔÔ//ÏÞ1ýKLäææfíˆûþ‡ýSŸy ªEàä ÅwßîõñQøúú|÷íÞ¦¿Š²nãv9^Þ)ÎcÓÑ•zÔÕêý°ç¯3–°Æº§Ÿ}áËÛ‰Üq­ß¸éÊ•«ÿù¿Ú3‘«×®MyúÙó¹9¡—^y­W¯žK—,†¿àT~?Ÿ0b\mUãÝUUU–Äo:Še¯­­ùñ›O^œñœÇ¦³ iŠŒ±°ë³1:úâ$¿ñ:Bèî$%ueòâE,Ç.[¾rìãY&òÿüà®'€£5ý˔ɼ[ú‹µlã vÙû )ßqRž¢ ! ϾðÒŸþ§3¯Š°ÐÐøÄ¡&–󨍔%‹ ÙAGLùVX¶q{­Ì)Î/Ý5m@1 ƒ±€á³ÿ5õù¿aAè´ÿNõ¥øø¸¢ë—jjj=ÜÝ;ùÚ€üßÔ7·iUÅ6õÙÇÿ‚ÀófëïÚ•p~ùÁPW“w2«gLœÜG k€Î ´¤¨¤èÚÈqSúêVƒ~yáæ&éÖ3æ|î‰>ýJ.ò€ë®Ò”߸z>~èÃfÎÔΩAÊw”‹¾þ±ƒ†^»˜[“]‰ \E—ES´·Âg@â¿€“AßΩAÊw”Ä]êé­ˆ¶ËÉHÎ cÌslû#R¾#!„˜Y“™5ÁªØðÍV@Ê€”)àž½¯pW1›Y³™#˜ dßk×PM‹Dnb‰¡öžÊRî†Éh(.ÌÏË=U®.³ï”šñõó001²k7‰»´—?ƒ”›ñ«RÝÊ>ž9nò³á]£FD!Ê^°píRÞïöÈ|•aÞ>\sW{†”âÌì™SÇÇOy>¢[OB0xûN¿Gï~¬‰=úëOÏ¿2µ/åaï+ØŒ`¢)W‡DvÃXÀ;âR‚Áᑵªý¿u‡Z¾ýY9nW ©ÖwBC3‚`vÐì†ig<¤|c2Š näœÊV«Jamàh Í(% ŽêÖ½Ù] E!DvÔ© Æ׊ê4xŽ-+½y,ë·Qc'‡Evexãp,AàK ó3ö-óQ†G4³ ”¢(Biá±5µµåååjuymM­ÒO9(~ íßÞ!å;ÎÌžÊ>:fâ3}bã`mpo(|”2¹âÀw»þ6}j.åBMk|µZ}öÜŨ®]ýýƒ¢{ƈÅâÝ»>‡ÂßÈÏ/((2™Ø¨ÈðØØ¾¡²2Õ™³ †º§&OøsÊHùN„`¢Q—…„Áªà^ ˆÒ¨ÔÍîm)‚U*õø )Šçy„›XòãƒF£ÉË«KxDDBBÇ™=òÛµübUë.  ‹C%ÇÚ> HyÍy„¡£€{ŒaD5ß'ÓR3 S]]Ý¥KŽã!:âXV«ÕÞ*S]Í/É»|“c¤¢.ÑrŸð Jpáõ O=2R¾³£) VγéQtóíb‰˜eÙ.]ºB8Ž«««½ž_tS­«1ò˜ö¹û‹½ÜÝE…ÑXGâá)ŵ¥JåƒmŸ…m¯ß…ß߀0›Úœ]Þo€½6=Š¢!Mow3Ç!„xžgYÓùK7ΛLŒ¿‡O„—\)‘H„°ÙLx‚Ò×TÇD‡67)ûÔòvHy»‡f+ô kxëdü„ 'Úô( Y~ºÒè&q—ÔêõEaŒuUU·*Mžr_š¦ /`^ ¼€F#„DnŒºøÊÁ‰ÍNÊ._à;^V]ÒIÿÔ –À™6½–ÒßÃã\SŠâ8®²Zg&Œ„DBØòŸõG˜˜o1+‹WÛÙ³<ô û÷ÇŸ ˆõ—‘¿pÑÚ¾cçû=câB#£ç.XÄr\³5»å¡õß¶—ê,Ë.x}Id÷Þ‘Ý{/\”̲lã8nÎü×C#£{õ{çÝ¬í‚ ¤­ÛгπˆÓ¦ÏÒëõÖWòþ‡ÅÆ%*Ãèk#ôËàL›^Kíb±Øh4!„xÞ\£Óc$¢L@A‚ ÂaL„Pe¹*)>Ö¡[½;Ž=~à‡oò¯^ûøc %[ÛŸÈ>z$#/çXE…fÃÆÍw,յ꒶×ìëÖ¿¥R«sNdž:žyóÖ­ô › °~Ã&­¶2/çXæ/™YG­í[·ïÌ;{î—î\Ìu÷p_“–n}êôéÜ_Ð¨Š© €œhÓ«Oà&ýén"DZ!ÖdªÑ×QM¶ä;&!„`B00¦)¦F}#¦w¯fû÷!v)íì›ÞJ ”J¥sfͰÖò¡ô´ÕJ¥R©T¦§­Þóõ·íüÆÐ¨_~ï7û,Ó÷óSnX·vï7û²çëo­¬sµýÓÏvmLO òòòZ•ºìûý¬O½¹v•Ò×·C§ªå)Š2sÏóF£Io4Ó"7‚ A˜‚æ1xžã¹?ÏV6mg<’R!—[{¦,?°³Þ)/¯hÏ,šÖøšˆˆú®•ˆˆðŠ M£ÊË+¬/À:$B¨L¥:b$Bˆ‚ÿ|ʈÀÀç+( åp¢M¯þ·¯Í=Ų,ÆØP§7š±XÊÜŽxK%O° `Ç„TÞ*zfÌ –NHFœ³Ç¦%ÅÅõÑ\RrÓÏOYÿ #õ?®¬ªºë‰ûù)­Ó/**V*×àþþ~Ö¬wBþþgOŸ(/-¬(+ÒªKœªjy:h-âÌœ zƒžÇ4M3„c7ó˱&K—6”…‡…9z«¿G)Ÿºr­F«ÕhµËW¬yròDKcLLïï}h4ËÊT‹ÞH±,“y_¿~£íŸ4aü²«5F£II]5yâøFL™4¡þh4ËV¬¶¶¿üÒ 'ñ<éòïÓ¦Ïrî‚úåp¢M¯¥ãå!˜xÞl¨3J„‰À ‚ÀskbFÖX‡A£VœûuÌÃCêôzç[î—ï8)Ÿ””0lÄ#â‡(|)É‹-Û¶¼õãC‘ÝûŒ7iøìÏ™5óáÑcÛ~ŒMê²%~~Êø¤áñIÖ§,i4À²¥oÈä²þ{pÔ°¡üŒxþÜÙƒ&M™ÙcúÌ9cÇŽZÐþZž b2™ FF´™3±&ƒ±®®®¶–5™´ÍÕ¼#]°jÔˆDAÀÑhÄ;n«§Z9”%ëð¾Ñ_4èkÚ9߀°N{»½ÔÕê¾ÛûÙ‹3’½erXÜKユ2m^j]MU£MòÇ}»_™½¬Ñ‰-'’J?¦Lîã k€{F­*ññóovïh³LQ”‡»»GPÒ×7:º‡F£5šLžR©L&óòò’HÄ67¤|'âæ&éÕ§Nf†»Ä=84Šn¡¸Ø±Š/½YpìûxØÌ™l`±X,‹e2Ç™)ЉÆöÍR¾3¥¼Xìã—ô@NV†®JƒvÙx€MÓr…2nðÿ 0“Aß|BZÝ)„$âÛûWmÜláêÞ %q—{+»ö‚ŸGpÊyŒyŽm6âBM‚16wÁ.Ç\@Êw„3k2³&X8EåEQ„Ç¥<ÁPËÀý y†f0wäÏ›Ú{à åÀöŒ§)¹oiÑu™ÂQ‡½Õê*å¾Êö^°™››¤[>rOTjË1"¢ìxÈTjËó¯žÒìá=PË€ƒS^,–ûú÷zíbn®{öFS´·Ü§_âpe@HKû~!åÀ¡(‰»ÔÓ[Ñǽµ~x¤<8\G9ì úåÀ•Aʤ<HyÎö¾À]!ÄlfÍfŽ`ÒܵžÚƒ¢hZ$rK$µ÷$òp7LFCqa~^î©ru™}§ÌÐŒ¯Ÿÿ€‰‘]»IÜ¥„´ë#RlÆs¬Ju+ûxæ¸Éφwf…ìvÍN ×.åønÌWæíÓèâòàpœ™=sêøø)ÏGtëIÆoßé÷èÝ5±GýéùWæ¢ö¥<ì}›L4åêÈn câÁᑵªý?¬…Z¾ýY9nW ©ÖwBC3‚`vÐì†ig<¤|c2Š näœÊV«Jamàh Í(% ŽêÖ½Ù] E!DˆÃ.Ï Wé\xŽ-+½y,ë·Qc'‡Evexãp,AàK ó3ö-óQ†G4³ Ôr­(ÒÂÙ(kjkËËËÕêòÚšZ¥ŸrPü@Û¿½CÊw&œ™=•}tÌÄgúÄÆÁÚàÞPø(erÅïvýmúÔ\Ê#„šÖøjµú칋Q]»úûE÷Œ‹Å»w}?0!„1¾‘Ÿ_PPd2±Q‘á±±}Beeª3g/ uOMžðç”'òÁD£. ƒUÀ½¥Q©›ÝÚR«Têñ&R%Ïó!7±äÇF“—W—ðˆˆ„„Ž3ÿzä·kùŪ*Ö]‡J޵}ò.šóCG ÷È0j¾O¦¥f¦ºººK—.ÇBt:ÝC=ı¬V«½U¦ºš_’wù&ÇHE]¢=ä>áA” àÂëžzd¤|gGS¬œgÓ£èæÛÅ1˲]ºt!„pWWW{=¿è¦ZWcä1í)r÷{¹»‹( !£±ŽÄÃSŠkK•ÊÛ> Û^g~ó|Âlj¿¿ìò~ìµéQ…izó¸›9!Äó<ËšÎ_ºq¾Ødbü=|"¼äJ‰D‚&¼€Íf„¾¦:&:´¹IÙ§–·OÊÊ8Ö¡[½Rþäɜѣ¶>=jäÉ“9w¬µµê’†E÷ñÙGdä嫨ÐlظÙÖÑ[·ný[*µ:çDæ©ã™7oÝJß°©Ñë7lÒj+órŽeþ’‘™uÔÚ¾uûμ³ç~9|àÊÅ\w÷5iéÖ§NŸÎýåðªøÐcÀ}©å[ì±A5íOw‰8ŽE±&S¾Ž¢h‚°%ß1!‚±€1M15ê1½{5Û¿±Kig‡àÐUW+ ëC…B®«®¶u"éi«•J¥R©LO[½çëoÛózšöËïýfŸeú~~Ê ëÖîýf_£Qö|ý­u€õo®±¶úÙ®éiÁÁA^^^«R—}¿ÿ€õ©7×®Rúú:CApªZž¢(3Çñü)ãç„„øúÏ‘Èh¬ÿYpeUU+).®æ’’›~~J[GoŸŸÒ:ý¢¢b¥²q îïïgÀz!àïöô‰òÒŠ²"­ºä^öÏ@-@­åBœ™AoÐó˜¦i†"`Âc,ðfžc9ÖdéÒÁ†²ð°0GoõvHùùsg¥¥oÈÌ:Ê™ÍYG½¹~ãü¹³,OÅÄôÞùÞ‡F£±¬Lµèë(2™÷õë7N$uåZV«Ñj—¯Xóä䉶ŽÞºIÆ/[±Z£Ñh4š”ÔU“'Žo4À”Iê_€F³lÅjkûË/½°pqrAaÏó—.ÿ>mú¬ûZP@¿<N´éµt¼<"óÏ› u&B‰0xAxŽcM¬ÑÈë° hÔª‚s¿ŽyxH^/ð|ËýòΑò‰ ƒ¶nÞ˜œ²"<*zÉÒÔ­[6& ª¯å·myëLJ"»÷3nÒð†YG™3kæÃ£Ç6sÎØ±c –jù;n’“Éd0š0¢Íœ‰5Œuuuµµ¬É¤Õh®æé‚U£F$ ®ÐhŒF#ÆØq[=ÕÊ‘*Y‡÷žø¢A_ãè•èæª¹ÛK]­î»½Ÿ½8#Ù[&‡µÀ½ôî[)Óæ¥ÖÕT5Ú$Ü·û•ÙË‘Ør"Ƀ‡2úÇ ÈÌ:©2Jišx3A¨¦JS©ºæçÕ7¦·\&ózÈår¹Læáá!‰šzmM;/ÿõÒ¬¥fmkPÃyl:Î×Føí+δéÑÕè²mc“Éd4†.)¹Yk0èky7‰›¾ZW­ÎRz>P.—K=¥ …Bæí-•JÝÜÜn—ÿM¿ØçìUòçk#c€3mzõÕwƒóËSŒ«uÕ?>L<ü«ôUœ®4$@ž8"^&“I¥R…\.—Ë,ù^ß³ßW:¿ýs23Ü%îÁ¡Qt ÅÀŽU|éÍ‚cÿÛŸøÀÃfÎdk‹Åb±X,“É8ÎLQ”HÄ0¶o¶ò)åÅb¿À¸¤r²2tUì°ËÆ,hš–+”qƒGø…™ úæ#˜ÒêÆH!$ßÞ¿jãf W÷îl(‰»4Ø[Þµü< €{TÎcÌsl³¢hŠŒ±à°¹ v9æR¾Ã „˜Y“™5ÁªÀ)*/Š"„8.å †Zî_È34ƒ±à¸#ßxÞÌÐvØ)¶gý‡+BZÚ÷ )EIÜ¥žÞŠˆŽ8ì­õÃ{ åÀá:ÊaoÐ/® R å@Ê€”)ÀÑ)OS´ãNÄ 0Áw¼"tkO{zË«+5ˆ‚Ë€3ªÕUyzË[»xlë)ٽυ3Çt•ûþx@û«ø*mùµKgºöŒmýŒfTëWÖ®Ò–ß,¸V[S 'çAS´§·,¢[ï Ð(–5a¿Ë”G‰Dn"71MÓÐuN„Œ±ÙÌ <ßZ†ßq:xðS-f{ÿСŸ’†< ÷ñï÷ɧŸ»Ò» )€ ÖòˆGÜNž<5kμ-›6ªK‹·lÚ8kμS§NÕ?ë°™þévÇZþ®&{âDöÌYsÖ­]]^Vòݾ½Y™Y÷hYîfDµ<¹–¿Ýcã˜Ûæ-[׬^ùàƒ#ÄɃŽXµ2uó–mÖ“ XîœÉÍëÞ³ÏÎ÷>pÄ h´˜Mÿî&»åímikV|d¤›XõÁïZÚó Ÿ|úYÿÀP…2pÂä'Ë+*,íÒ.Šþõï^1ýd>þƒ‡8{î¼¥3›“S–‡Ev ܾc§¥‘„«Ö„GõðõúëK¯ÖêõÖ˜­7š†” óÖò´Ckùã'²=Êúð±Ñ£ŸÈnX™8ppâä§¶nÙ4ûï3YËÓ­-þ]-×££iÚþäSSçÌšY˜­ðÆ•èî=’—.·¾ŒÌÌÌŸ:x«¤`ü¸±sæÎ·´¯KßpéÒåãYG._È»u«ÔÒ¸iÓ–Üܼc™¿Þ¸êîbU;¿ý´´ø-½¯¸bcèt:ëC…N÷ÇþÃÿñÏM[ÞþzÏîøq÷e1ïzñ««« EÓöÓ'[îxx¸¯^½¢wLëSÛÞÞleþü¹ÞÚliüü‹]û¿ßŒÚ¸a¥ñãÿ~úÝ·{-ikV% }`ÛÛ›ïå» )€köØ8‚\.×VVúùùYj+«är¹u^ïì|ïùçž80ŽÜ«Ål¶ý.æ.“É*«ª”Je£öìì“©+WŸ;{®Î`°Ä«uâr…‚ÔxðþäÓÍoosÐ h´˜Mÿî&ûúÂù+W¯ùù—_YŽË/(˜9{®¥Ýh4I$îb‰¤°¨hμ…¨ÁËhôª,wž{nê¢7’o––ꪫ“S–[_}õå¹óæ˜yþÂÅK{yZ»÷¾Â‘”@-ï˜R:)1aǶ·¿‘¾hñ’w¶oMLÔ°2 8ðÃw_ìÚ½qã¦ûSËßÕ²'%&¼³}[jêÊ ˆ‰“Ÿz`ØPKû{;·/]¶< (ìñ±'%þ1ñjù”ä7zFG:¢o¿¡¡!–Æ×Ì28iÜ“üC_yuúã¿Çµ<¥U—À¶€ ¨«Õúþ«‡xýrî°‘\rþ¼e¹ruÙ‹3—ÔÕT5]ü¿þ})g2¸ð»\[S³ïš.~+`ï+.TË[{l\ület‹í®~¦6B0EÑ”tVÖóXa,t†ÅlÚNvíeÇX€³•ЙkùN‘ò­œy˜âÚËg s§üíã)°àÂIG¨æ¡D´cÁ¥—ñ¼YDÛ–Ûò¸ša.Í‹Å9Ç»ê2šÍfF$júƒ"Цä>¾· ¯É}”.ü×Tiå¾Jl˾8’ÁˆÜbãêjkÌë°_¿Þç*Þ̱fÖ4øÁGykôœ››¤{Ϙ ¹'*5jŒ…(»aD*5êü«çûÅ5s&¾áÁ‘”¸ ̲l¥Vs.' ‚ƒOis?2ž šaâ’þÙ½·¡¶éõ7Çšjõ5×.æÖTUb—»bMÑÞ Ÿ^± !&ƒR€Îˆ¦i±‡”aÜ\xÞÜRÆQ%KDn’{p5•ûó1Ž1ϱ6òòàêŸý° R¤<Hyò å@ʤ<Hyò å@Ê€”ЬÿÞ%§ÇFRðIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/tools/keybinding_editor.png0000644000175000017500000004500311273045225026320 0ustar julianjulian‰PNG  IHDRBPSQ sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ  '!vx¢ IDATxÚìÝ{\TeÂðß™nƒ4ƒuä"몉f‘RÑRÑ,*e–jÝpa©µA\ÀÂ6EÓØÜ·]Ó¼ô¶]lmKS“ÕM0*‘–­TDc‰†9ïÆÄ(—Fäòû~>ó‘sžsžçœççùqÎF¨Ð]ADDDÔIØDDDÄ DDDDÄ DDDDÄ DDDDÄ DDDDÄ DDDDÄ DDDDÄ DDDDÄ DDDDÔÛÈ:ºÂ¡½;ÙkDDDd33ç…YLŸ+*À‰œ,”••B"‘@"H$‰`ž'“Éà:hÆÜ O/u÷¡–6˜ˆˆˆ¨3®¿À¢½P‚cGaÖ¼Ç0l¤/¤ DQDñ—!"`l4â|á÷8ùåç°³³Ç•g‡Ûç­1"""ê1>ùøŸ˜¯áj46ÔÃP{u5?¡öj5j¯þˆšŸªPS}W«+QûÓ ¢ÂP¯áÈúl§Úc"""¢£®Î€QcÆuh¿Ñãa4„ˆˆˆ¨wE2;‡Ž…©;׃Ýt…§ò0ÐÍ‹A>'L&ÞÛùO˜L&›nƒõh&“ 1qËñÇÿ‰Cl|‚MÃõìãÇ¿À’gþ€ì/¾Dl|’̓õXKc㑟ÿ_<°/¾ð<þ½7þûíwˆOx®ç¡;'߇;'ßסu©†Y5ˆˆúžëßïOŸ)Àä é8úù1vN?wÿÌøðƒ÷áꪸ*•صó-̘>­g¡/¿úR©R©_}}¢KuUè.ð "êgr¾ü ÿ6¯ý5÷ÝÄéç|p®95qU*17dVÏ BïíÜÍÂÇ Yð(Þ۹ˢ¬¡ÁˆçW®Â¨Ñãá=j ^ûûf‹ß©†YüVÐügƒÁ€¥q‚Úw4Ô¾£»,ƒÁbÙío¾…€;&ÃÝk$¦Í˜üÿ~k.?ôéaL¹oܽF"àŽÉxëíwyvõ02âÏÆâonÅÄ hllÄê5káÿë á‡ßG=ƒŸ~ú W®TaÔèñ¨¸|ÙbŒñÿuÊËËùžO·&êëññÞýXøØ#X¸àQìùx õõæò´—_Á©Ó§‘ùéœüê8.]úÀ/W~*tZ½ ´æ¥u(ÕéðõŸã«ãŸã¢V‹Ôµ/[,“•uŸìýEg¾ÅÜÙˆ]–`.{fÉR$þiJŠNcïž]øúë\}"¢ä­·ßÅ «Öàƒ¾‹_ù¤¿ú¿Èûæ?8|èœþö$ñâêT(• „†ÎÇÿ½õ¶yýcYÙ˜81ƒæ{~/×P_×;ƒÐ'ŸdàöÛÇÂÓÓžž7n,ø·¹|ç?w!-u5<== P܆5«_°ºî>ÜÔÕÆàÁƒ1dÈ`¬]³ |¸Ûb™—×¥ÂÃÃr¹KžùƒÅ!GGGètzT”WÀkèP¼šþ2Ï4"¢$vY^}åeŒþËÝ€¼ýžyÜ0`^x~>Þ÷ àé?DbÇ›o£¡áÚ_Þ·ÿ<ößó©Cd¶¬ì½÷wA¶À<­ { ソ ÍŸÐéô1bx§ê.++·XwĈá(++·XÆUùË=D'''¿ü¹í7·oÆú ¯"íåWpÛm.X“ògÌ~à~žDD=Ä+ë×â÷x¼ÿüGù~(-Eà}3\û‹Ã&“ ‚ Ô#†câÄìÙ»<<Ÿge#eÕJ¾ç÷R’ ;i¾¥oŸÌe׿ÝÒ TVVŽÃ™GqðÐgˆ~æ~i@&CYY9†  •Ê %%çáããÝáú‡ Œóç/`äH5 ¤ä<dõúÆãí·¶AEúô0þ'6³óùŸ‚ˆ¨§øíá°·³ÃC,Äûïün¿}TnnÈØ¿î-®³ä™? é¹0Ìk(îœ4ŽŽŽ|ÏïåFûûaô¸‰ÙÙC*•Z½^ÞWYjÏf·ÆþùÁ‡xìÑPós>M¯°…b׿>h>†„ɸtéTUýˆç’_4¯¯P܆³g [­?ô¡ùX‘üg”——£¼¼IÏ¿€GžoõöEþá8}¦ F#DQD£±‘gQ£ [€Ô”ñèÂÇñåW_ã©ß=ØøŸ+ÑhÄwߟÂ1/ÇÄ °³“!%5 a å{>ݺ ôÞÎ"\³à†ùa 3zìOñqåç‡û¦?€‰wÂË˳YªFðs[ýÛAϯø† Œ;î¾wÜ}/ÜÝUx.éOVoßœ9³ðÛ§"1L= /®NŦ¿mäÑ'"êyx>Ò7¤á7OüãÇãž»îDè£x©ý½sçαX~É3Ñ(>W‚)“ùžO&Tè.tèûZí݉™óÂØsDDdµÂSy¸ó¾y¸¬¿hóºwüß?PRr/$¯`G÷Âsâým,rÅ¡½;;}k¬3ùDÆCADD½Õ?VãﯿÿÉ¿Dà DDD½Ò Õ0H$¼”ò"<==Ø!}Ä÷§ pº °gjÌÔȇΈˆèÖŽe—Îq\꣒Vý¢(BM€(šþ¢"DÓ/óßÛþj÷!ƒ¡ŽG‰ˆˆ¬æ9ÜÚs§Ùdõ9ÑP_“©¢©&“éçŸM0™LM&ˆb#L׿›L BõõA"""êõ:„ºó;@ˆˆˆˆzTÊûòsöõÏ ´0b{Žˆˆˆºìýmniû’în°éËòˆˆˆˆnµ›„öï߀€888À××;vìèµt}pûî»ïðë_ÿŸ~ú©Mê×jµX°`\]]áèèˆûî»{÷î½%Á‘!•ˆˆ„º(;;‹/FZZª««‘‘‘#GŽô‰ÎÊÊÊÂC=„;v`ÆŒ6©S£ÑÀÇǧNBUUV¯^¿ÿýïærQy–õ– ”––†µk×bÖ¬Y°··‡¶oßn±Ì¦M› V«aoo & //Ï\VTT„ùóçÃÅÅŽŽŽ˜3gôz½¹\„6ׯ­­Å¢E‹àìì www¬[·ÎâJGcc#’’’àææ¹\Fƒêêêv÷kÏž=X´h>úè#Üu×]­ÖSYY‰!C† ¼¼Ü¼nCCÜÜÜ,ö£INN^xá¨T*888`êÔ©Ø·oŸÅþZ»oíõM[}ÛT 7Ôy½ëËÓÓÓ1lØ0ó_õìlõú ”••…6—ÉÌÌDVV*++Ѝ¨(sÙƒ>ˆ¥K—B¯×C§ÓÁßßqqqV¯ŸœœŒªª*œ;wùùù8vì˜Åº©©©8qârss¡Óéàää„„„„6·÷7ÞÀŸþô'&""jÉáýïãÈ]øüßâØ¡ÝÈþìcÏ܇/ްMº bG^;·®Û"•JE£ÑØj9±¢¢Â<}õêUQ&“µºüÕ«WÅ!C†X½þСCÅÂÂBótAAxm|¿fĈâ©S§ÌÓ¥¥¥¢J¥js{A?ÿüs‹ùmÕSXX(>\¬¯¯EQ£££Åwß}·ÅúµZ­¸xñbÑÓÓStqq,X ž?Þ¢}k÷Í}ÛÒþ·5€¨Õj­î""¢ævn]o‘3þü§?ˆ õñjõ±ºª¢Íu(9#j‹¿/þW|}ÃsbG3M…î‚hó+BJ¥—/_ns™š–Ëå0æéììlÜ{ï½0`A€³³³Åm¦öÖ/--ň#ÌÓjµÚb]­V‹1cÆ@&“A*•ÂÝݽÅ[VͽþúëÐh4øî»ï¬ªÇÛÛwÝuvíÚQqøða<ôÐC-Öíéé‰7ÞxZ­EEE1bÂÂÂZ\¶½}³Eßv†§§g—û˜ˆˆ¨%ÕWÊPuY‡ÊòK¸¬¿ˆòÒó(»tzm¡Mê·ù·ÏâÀxòÉ';µþÂ… ±aÃÌž=·Ývª««¡P(¬^_¥R¡¤¤ÞÞÞ€sçÎY”{xxàøñã:t¨ÕuFFFÂÞÞÁÁÁØ¿?&NœØn=ñññˆ‰‰Áˆ#0yòd899µÛÎàÁƒñâ‹/B©TvjßnFßÊd2ÔÔÔ@.—_»‚XQÑn;éc""¢Önµæ® º\¿Í¯%&&"11D}}= aõúµµµptt„££#Š‹‹-žq±†F£Á²eËP^^Žòòòž/ŠŽŽFTT a4‘ŸŸFÓn½‹-Â_þò<ðÀÈÎÎn·ž»ï¾vvvX±bE›¡pÞ¼y8räêêêP^^ŽÔÔTtjߺڷJ¥§O[~Þøñã±~ýzÔÔÔ@«Õ"::ºÝv:ÛÇDDD×›þÇV_¶`ó ˆ-[¶`ùòåpqqÁìÙ³1uêT«×ߺu+âââàììŒéÓ§cÊ”)jõêÕ0`†Ž1cÆàž{îEP ÂŒ3 —ËŽÐÐP«CÖæÍ›1oÞúè#( L™2ÁÁÁV…áÎö1Qs7ûÖ˜P¡»Ð¡Ú»³W}ÅÆ©S§bÕ§²líõ×_GQQÒÒÒúܾÙÂûÛ6`æ¼_žýë†<—²õ†Z˜Lølï»­®{WÐ0™a25bÿGïâ±'¢;ܾ¬/vjll,V®\ ƒÁ€eË–áá‡îöm¨ªªBzz::Ôçöˆˆ¨»´u ¬ô|A—ëï“AH­VcÔ¨Q¨««Ãüùó±jÕªnm_H$¼úê«ðòòêSûFDDÔª¯”Ád2Ádj„h2Ád2A4™ Š6©¿O¡˜˜ÄÄÄܲöoæ×bÜê}#""êK$ì"""b""""b""""b""""b""""b""""b""""b""""êµdì"""êI^Z¹A€ ¹öM ’Ÿ¿±áÚ77ü2O0—]›×+‚ 7õ//Qï5ÚߣÇM„ÌÎR©Ôêõò¾ÊêT{7åÖØþýûøúúbÇŽ½ò`‚Ðꋈˆˆz?›¡ììl,^¼iii¨®®FFFŽ9Ò+;GEó«¥i"""b²––†µk×bÖ¬Y°··‡¶oßn±Ì¦M› V«aoo & //Ï\VTT„ùóçÃÅÅŽŽŽ˜3gôz½¹\„6ׯ­­Å¢E‹àìì www¬[·Îâ Ncc#’’’àææ¹\Fƒêêêíc{u‚€””¸ººÂÃÃ{öìÁK/½„AƒÁÃDzXvݺuP©TpvvFDD ƒ¹¼®®‘‘‘P(P(ˆŠŠB]]Ï\""¢ž„²²²Òæ2™™™ÈÊÊBee%BCCe.{ðÁ±téRèõzèt:øûû#..Îêõ“““QUU…sçÎ!??ÇŽ³X755'Nœ@nn.t:œœœÐ¡}´¦½^‹/"%%áááÐét8þ|8ÆŒƒ{î¹vvvA-((3fÌ€\.Gxx8BCC;öºZGsAAA;v,Ôj5 „U«V™ËÖ¬Y•J___øúúÂÓÓ)))>>ؾ}»Å2›6m‚Z­†½½=&L˜€¼¼}:¦L™Ò¡öW¯^`øðá3f î¹çØÙÙYµ   ̘1r¹ááá íÖNïè6<ýôÓHNN†R©„¾ùæ¼ûî»Úÿ®ö||<&Mšdñ©°-[¶à£>‚B¡À”)Sló> ""ºlþ°tOsêÔ)„„„Xõ‰«¾¨¿ï?õl}îaéž 66•••(--ŲeËððÃ÷«“ª¿ï?Q¿Bjµ£F‚ŸŸ”J%V­ZÕ¯jß"""kÉúâNÅÄÄ &&¦ßÔþ¾ÿDDDÖ’° ˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆA¨Í¿µ¼¿ê-}ÀcEDD B°ÿ~ÀÁÁ¾¾¾Ø±cG¯ ,­½º+4XS¯5ÛGDDDÝ„²³³±xñb¤¥¥¡ºº8räH¯ìQͯ–¦¯_¶§lë­Þ""¢~„ÒÒÒ°víZÌš5 öööðññÁöíÛ-–Ù´iÔj5ìíí1aÂäåå™ËŠŠŠ0þ|¸¸¸ÀÑÑsæÌ^¯7— ‚ÐæúµµµX´hœáîîŽuëÖY\!illDRRÜÜÜ —Ë¡ÑhP]]Ý¡}ééé6l$‰y^óòuëÖA¥RÁÙÙ0 -ÖÕÖö4ÕÙÙ«<íí«-ú‚ˆˆˆA¨™¬¬,„„„´¹Lff&²²²PYY‰ÐÐPDEE™Ë|ðA,]ºz½:þþþˆ‹‹³zýäädTUUáܹsÈÏÏDZcÇ,ÖMMMʼn'›› N'''$$$tx?srr›› “ÉÔbùÑ£G‘ŸŸââbèt:¬\¹²ÅåÚÚžë¯DuT{ûj«¾ ""ê­„ Ý…°‡öîĈe­–Ëd2 H¥ÒV¯¦TTT`àÀ€šš( 444´¸|MM ÔjµùªP{ë{yyáèÑ£ðööœ={~~~æ ¡V«‘‘‘€N§ÃøñãQZZÚîU ¦:A€V«…§§g«åðõõ 88.\¸aÙö¶§ù²mmÛõDQl·n[´MDDÔïoÛ€™óÂ,rÆèq!³³o5K´$ï«,‹z¬%³õ)•J\¾|C† iu™¦r¹F£Ñ<„„œwîœE¹‡‡JJJ`4ÑØØh¶V\\l± *•ªÅånæö´WwwõQ¿ B‰‰‰HLLÄÁƒQ__ÂÂBDDDX½~mm-áèèˆââb‹ç¬¡Ñh°lÙ2”——£¼¼ü†ç‹¢££…ÂÂBFäççC£ÑؼcãââPVV†²²2ÄÆÆ"<<¼ÅåÚÛ¥R‰Ó§OwjÚ«»»ú‚ˆˆ¨ß¡ÀÀ@lٲ˗/‡‹‹ fÏž©S§Z½þÖ­[gggLŸ>S¦LéPû«W¯Æ€0|øpŒ3÷Üsììì,‚ZPPf̘¹\Žððp„††Ú¼cƒ‚‚0vìX¨Õj 4«V­j58¶µ=ñññ˜4iR§nYµWwwõQOeó‡¥{šS§N!$$EEEÝש|ȘˆˆÈ*·úaé>ù]c±±±¨¬¬Dii)–-[†‡~˜gõ ¤V«1jÔ(øùùA©T¶z[Šˆˆˆú7Y_Ü©˜˜ÄÄÄܲöy[Œˆˆ¨w° ˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAÈÆ:ó­ëDDD—è–!AÌ/Ìœ9ß}÷{šˆˆÚµÿ~ÀÁÁ¾¾¾Ø±c õ® \û®-QqñâEL›6 ?þ8{šˆˆÚ”Å‹#-- ÕÕÕÈÈÈÀ‘#GØ1Ôû‚P…BåË—›¯566")) nnnËåÐh4¨®®6/o0ðÔSOÁÙÙîîîxùå—-ê«««Cdd$  ¢¢¢PWWÇ£HDÔ¤¥¥aíÚµ˜5kìííáããƒíÛ·[=‚€M›6A­VÃÞÞ&L@^^ž¹¬éßæW†A@zz:† ‰DÒ¥±¦¥+N•••2dÊËËÍóàææ½^σÞ׃PUUÖ­[‡€€@jj*Nœ8ÜÜ\èt:899!!!Á¼Í^£K IDAT|rr2ÊÊÊP\\Œo¾ùŸ}ö™E}Ï?ÿ<.]º„‚‚œ9sçÏŸGrr2"Q••…VË­233‘••…ÊÊJ„††"** Àµ;Mÿ6ýÜ$''¹¹¹0™L6k\]]¡Ñh°yófó¼Ã‡㮻›z Tè.ˆYáÐÞX±ÌêDìááììl¨Õj¨ÕjdddÀßß Óé0~üx”––¼¼¼™™ ___À™3gàïïo>i‡ŠÌÌLøùù™ËƒƒƒqñâEI"¢^N&“Á`0@*•¶XÞÞ ***0pà@@MM  Ìåׇ A ÕjáééÙ¡v®¯§­ùEEE˜>}:Ξ= ;;;<ýôÓ˜:u*4 :€÷·mÀÌya9cô¸‰ÙÙ·z.´$ï«,‹z¬uÓž2™L8{ö,F…“'O´Z-ÆŒ™L©T www‹Kƒ¥¥¥9r¤yÚÛÛÛ¢^Ng1ÏÛÛ:ŽgQ T*qùòåVË­šBÈårÆvÛm‚::Ö4ÿ€PKÓMëßu×]صkDQÄáÇñÐCñ€÷7íÖ˜ ðññÁ?þñ<óÌ3¨®®†‡‡JJJ`4ÑØØhLMÜÝÝQ\\lžnþ3¨T*‹yEEE¼´HDÔGâÀ­–w×Бvšnµ]ëíú+CñññxõÕWqüøqLž<NNN<à}=5ñòòBPPÞyçDGG#** ………0ÈÏÏ·¸4ø›ßüqqq(++ƒ^¯ÇÒ¥K-ê ÃÒ¥K¡×ë¡×ëÃK‹DD}Dbb"qðàAÔ××£°°6”J%NŸ>Ýîr7c¬¹ûî»agg‡+VàÉ'ŸäÁîOA"##±yóf$&&"((3fÌ€\.Gxx8BCCÍË­^½®®®1bƇiÓ¦YÔ³fͨT*øúúÂ×מžžHIIáQ$"ê±eË,_¾...˜={6¦Nj³1 >>“&Mj÷ï ݬ±&>>………7ŒmtkÙüai"""ºÑë¯¿Ž¢¢"¤¥¥±3š¹ÕKËxˆˆˆn®ªª*¤§§ãСC쌆Aˆˆˆè&‰¯¾ú*¼¼¼Ø! BDDDýGK[ˆz »€ˆˆˆ„ˆˆˆˆ„ˆˆˆˆú‡N=#tïsûØsDDDÔeÏúô ä>Ì›GŽˆˆˆlàTï B|žˆˆˆú‚Î!öõ× Ä$DDDDý6‰LBDDDÔ_ƒÐ­ÈAÿúã<òÚ·ÿÁ\¾ùȸo”‚G“ˆ¨sv º®±ÕrkÞûÛ[Z³õç:oöó+w9‚G»â<Ø=ˆÍÿ²ôµ"Ñ"íJ¢h¹^u³“®®¡R‰`.wu–¡´ªÞ<]Ze°hW)—á‡+‹r¥\Æ¿xMDÔ‹]5˜0ÀAbJ𳿽¿­±¥µñ«â§ú·Óôóžÿ¹ÝbÝÝÏþrlþÆÿ˜èl‡?LóÄêÏ¡ÞhâÁîýA¨õ²ËWà¡p€¶Ò`žç¡´GÅÕ‹õZª£i^åU#Ün³ÃW®œn.öåWj,ËU·Ù£ªÖÈKDD½Ø÷—®bÂpnåSbÖ¼÷·5¶XSÞÑv|õ—°óqÌíÓM줖ώM™—P^ÝÀÝÃtòÖ˜Øê+ót%¢§yÂCi©äZúÃ4Oþ¾²Ùr-Õñ˼£g®à÷÷zBá$…B.EäT‹òÏÏ\Aä}žPÈ›Ê=qôô•6·‹/¾øâ‹¯žýÚõµ¿ rGÀðI…bî÷êÀ{ÛcËUC#†ºÚ·ZÞµvZŸÿÇà¡È<]‰ï/ýÄãÜj¿õ¡+Boe—âÉÉîxéQ¸:ËPyՈϾ¯ÄÛÇK­Nåoeÿ€%3†a[ÄhÔÔ›ðá‰2LRßf.3«OOŠ-‹F¸öDÿÿe—òŠQ/öÝ¥«Øxè""‚<0l #ʪëñÞ—ú½÷·5¶üëDþò›Qp´“`Þ_¾iuζÓÚü¿ˆ¿ˆ?{™ç5oŸn-¡Bw¡CñáÐÞxóÇì9"""ê²E·}Š™óÂ,rÆèq!³³‡T*µºž¼¯²,걿t•ˆˆˆú-~é*1u0 õÏ ÄDDDDý7ñãYDDDÔ_ƒÐÕËüN/"""²×^„>_3—Žˆˆˆºìým§niû"""ꯄˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆˆˆAˆˆˆè–@=? ‚Ðâ«#'x{Ë·ÖFWþ“äååaîܹP(prrB`` >øàƒNýåV"¢Î5jFuÓB‘µcÇÔ©Sù~Î Ô9¢(Þð²fÎÔßÒtG}ûí·˜={6.\ˆ’’TVVbýúõxûí·;´MDDÔ5ÙÙÙJ¥J¥8~üøMk§½1êÍ7ß„Ñhäa²­xæéÌÌLÌ›7Ï"Ý7ÿ·£I¼¥å›æµÕöªU«ð /`Ñ¢EP*•pttD`` þõ¯YU·5Û_TT„ùóçÃÅÅŽŽŽ˜3gôz½Åúééé6l$Þ±$¢þéÍ7ßÄ¢E‹ðÛßþo¾ùf›ïõm]¹’SYY‰•+WbÛ¶m< B¶µnÝ:ÄÅÅ¡¡¡F£qqqHOO¿!¥7OëÝÑöáÇñÈ#Øì·Œ–¶ÿÁÄÒ¥K¡×ë¡Óéàï︸8‹usrr›› “ÉÄ3“ˆúƒÁ€>øO<ñž|òIìÚµ ƒÁê÷Y[IJJ³Ï> ”~@v3*m)‰‹¢ˆ€€Lœ87n„D"ÁÌ™3áçç×-;ÚVÛ—/_ÆàÁƒ[Ü~[ý'ûöÛoÍ?;99!55jµÚb™W^yC† áYIDýÒîÝ»1qâDxyy&L˜€={ö`Á‚7}œjz¯ÏÉÉA~~>þö·¿ñ€0u^[áá±ÇCRR®^½jq«ª;´ÖöÀQ^^•Je±ý¶|H.;; 8yò$®^½Úbýžžž<#‰¨ßjº-ÖdÑ¢ExóÍ7­B׿§¶õKmkãTll,¶mÛÆGú‘n?Òéé鈋‹Ã²e˰nÝ:Û¦:™ 555æéŠŠ «Ú¾ï¾û°gÏž.ÕÝž… bÉ’%Ðjµ0™L¨ªªâÖDD?Óétø÷¿ÿ'žxÂüìÏ“O>‰ŒŒ èt:« ïêiŽ?ŽÑ£G[<ÄOŽ1ÙLff&JKKñÔSOá™gžAnn.òóóoXN©TâôéÓ®üøñX¿~=jjj ÕjmUÛÉÉÉHNNÆ;#üõõõ8räˆÕu[³ýµµµptt„££#Š‹‹ųˆègo¿ý6üñ>ÍõÛßþï¼óŽÍÆ‰Ž„©æŠ„:¤µ¿Ñðç?ÿ)))J¥ÉdøË_þ‚åË—ß°~||<&MšÔá¾eË|ôÑGP(˜2e ‚ƒƒÍemµ=~üxìÞ½[·n…§§'\]]‘œœŒÝ»w[U·5Û¿uëVÄÅÅÁÙÙÓ§OÇ”)SxöýìÍ7ßÄï~÷»æ·öé±ÎŽD7d– Ý…EÝC{wbaÄ2öuÙûÛ6`æ¼0‹œ1zÜDÈìì!•J­®'ï«,‹z¬Å§Áˆˆˆ¨ßb""""!""""!""""!""""!""""!""""!""""!""""!""""!""""!""""¡žƒßRLDDKè¦!Ap÷Ýwwû‰# /ž°DD½ËþýûøúúbÇŽ 0Ô»‚¸ººbçÎݾ3¢(Z¼šæQÏ—Å‹#-- ÕÕÕÈÈÈÀ‘#GØ1Ôû‚Ðúõ둜œŒúúúË‘””777Èårh4TWWüüüpúôi€V«…D"Á¥K—§N‚ŸŸŸM~hkˆˆ¨û¥¥¥aíÚµ˜5kìííáããƒíÛ·›Ëëêê …B…B¨¨(ÔÕÕY¼ßoÚ´ jµööö˜0aòòò,Æ‚æw š¦ÓÓÓ1lØ0H$«ÚéèxÓÞ¶Q BcÇŽÅôéÓñÚk¯µXžššŠ'N 77:NNNHHHÌ™3™™™€={öÀÁÁ{÷î>|!!!6ÙÆ¶¶ˆˆº_VVV›ïñÏ?ÿ<.]º„‚‚œ9sçÏŸGrr²Å2™™™ÈÊÊBee%BCCw ®¿S““ƒÜÜ\˜L&«ÛéŒÖ¶n-¡Bw¡C÷Ží݉…ËÚL½¢(B§Óáî»ïF^^”J¥y>¨ÕjdddÀßß Óé0~üx”––â“O>Á[o½…wÞy!!!7n¾ûî;|üñÇ ÃSO=…Ù³g[•ÄEQ´h×Úm "¢î'“É`0 •J[,:t(233ÍwΜ9ƒàà`\¼xÑü_QQjjj P(ÐÐÐpÃÐ|ìÐjµðôôìP;-=vÑÚ|k¶­?{ÛÌœf‘3F›™}«çBKò¾Ê²¨ç–^•J…¨¨(¬Y³æ†2­V‹1cÆ@&“A*•ÂÝÝz½0mÚ4|ùå—øé§ŸðÅ_ )) ÙÙÙ¨©©Á—_~‰iÓ¦µÚfKϵ¦­m "¢î§T*qùòåVËu:¼½½ÍÓÞÞÞÐétË4 Ëå0í¶Û<YÛNó€sýt®¿ýÖ•m£›ï¦~|>66»wïFII‰Å|”””Àh4¢±±¢(š/I:99ÁÏϯ½öî¼óN(•JÜqÇøë_ÿŠÑ£GÃÑÑÑ&ÛÖÖ6Q÷ ÄÚü»¸¸Ø<]TT77·›ò‹¼µí´ôk~§~„œœœð /`ÅŠó£££…ÂÂBFäççC£Ñ˜ËçÌ™ƒ—^z <ðàÀK/½„9sæØlÛÚÛ""ê^‰‰‰HLLÄÁƒQ__ÂÂBDDD˜ËðtéRèõzèõzÄÄÄtè}[©Tš?ŒÓ–®¶C BÂÃÃqöìÙNö   ̘1r¹ááá µBUUU¸ÿþû÷ß?ªªªl„ÚÛ""ê^زe –/_Ìž=S§N5—¯Y³*• ¾¾¾ðõõ…§§'RRR¬®?>>“&Mj÷ï uµê]lþ°4‘µúìÃÒDDDD=ƒ11111111111õí}1Ç !«ìÝ»cÇŽ…ƒƒÆŽ‹}ûöÝò“öúOf"¢žgÿþý€ƒƒ|}}±cÇê]Aè‹/¾@dd$6n܈ü7nDdd$rrrn鎊¢hñjšGDD=Cvv6/^Œ´´4TWW###GŽaÇPï Bk×®Ejj*‚ƒƒáàà€àà`¤¤¤`íÚµ©|ݺuP©TpvvFDD ƒ¹¼±±IIIpssƒ\.‡F£AuuµÅú›6m‚Z­†½½=&L˜€¼¼<›ývÐ^ûDDd{iiiX»v-fÍš{{{øøø`ûöíæòºº:DFFB¡P@¡P ** uuuV Íï4ïééé6l$‰UíttLéJÔ ƒPVVæÎk1oîܹÈÊʲ˜wôèQäç磸¸:+W®4—¥¦¦âĉÈÍÍ…N§ƒ““,ÖÏÌÌDVV*++Ѝ¨(›íƒ5í‘íÇVËŸþy\ºt 8sæ Ο?ääd«Æ†æw®¿““ƒÜÜ\˜L&«Û騛Q'Ù†P¡»Ð¡ûC‡öîĈe­–Ëd2 H¥Ró<£Ñ'''444˜SsAA|}}Æ… jµð÷÷èt:Œ?¥¥¥æõ+**0pà@@MM  …¹~kRº(ŠÁü¢ùÏíµODD¶×ÒøÑÜСC‘™™ ???À™3gŒ‹/Z564Ÿo>>hµZxzzv¨–­hm¾5uögïoÛ€™óÂ,rÆèq!³³oõ\hIÞWYõX}ÞÙz‡\]]QQQ777󼊊 ¸ººZ,7räH‹Ÿ›‡ ­V‹1cƘ‹Édº!Ì4è —Ëa4ÛÜ®Ž<dMûDDd[J¥—/_Æ!CZ,×étðöö6O{{{C§Óuil`‚¬m§µ_´›O7w:R'u/›ß ¼áSbûöíC`` Å¼ââbóÏç΃J¥2O{xx ¤¤F£æ0Ò]nuûDDýQ`` 8Ðj¹J¥²;ŠŠŠ,~é¶•Ž´ÓÒ‡pZºýÖ]ÛN= %$$`ÅŠøì³ÏP__Çã¹çž»á›¸¸8”••¡¬¬ ±±±7—EGG#** ………0ÈÏχF£é¶N¹ÕíõG‰‰‰HLLÄÁƒQ__ÂÂBDDD˜ËðtéRèõzèõzÄÄÄtè½Y©TâôéÓí.×Õvº«Nê¡A(00¯¿þ:ž}öY 0K–,ÁæÍ›1yòd‹å‚‚‚0vìX¨Õj 4«V­²øÏ„3f@.—#<<¡¡¡ÝúŸñV¶ODÔbË–-X¾|9\\\0{ölL:Õ\¾fͨT*øúúÂ×מžžHII±ºþøøxLš4©ÝGºÚNwÕI¶a󇥭j´ʈˆˆ¨ÿ¸ÕKó+6ˆˆˆ¨ßb""""¡îÄÛbDDDÔoƒƒƒƒƒƒƒƒƒƒQO B{÷îÅØ±cáàà€±cÇbß¾}·t'Ahw¾ æ—‹‹ fΜ‰ï¾û®Ý:ˆˆˆˆAÈì‹/¾@dd$6n܈ü7nDdd$rrrz|gˆ¢QqñâEL›6 ?þ8Ï"""!ë­]»©©©†ƒƒ‚ƒƒ‘’’‚µkך—ëÖ­ƒJ¥‚³³3"""`0ÌåHJJ‚››är94 ª««-Öß´iÔj5ìíí1aÂäååÙl –/_nqEˆˆˆˆ„Ú•••…¹sçZÌ›;w.²²²,æ=zùùù(..†N§ÃÊ•+Íe©©©8qârss¡Óéàää„„„‹õ333‘••…ÊÊJ„††"**ÊfûPUU…uëÖ! €gQ&Tè.ˆYáÐÞX±¬Õr™LƒÁ©Tjžg4áä䄆††k  àëë (((@pp0.\¸P«ÕÈÈÈ€¿¿?@§Óaüøñ(--5¯_QQjjj P(Ìõß°“‚QÛœý3@ÈÎΆZ­n³"""ê¼÷·mÀÌya9cô¸‰ÙÙ[d‰öä}•eQµl~EÈÕÕó***àêêj1oäÈ‘?7…Ðjµ3f d2¤R)ÜÝÝ¡×ë-Öo A —Ëa4[ßI‰&“Éb^cc#$ËÝE&“ gϞŨQ£pòäIž¡DDD}˜ÍƒP``à ŸÛ·o-æ›>wîT*•yÚÃÃ%%%0hll4”Îòðð@AAż‚‚xzzÞ°¬ ðññÁ?þñ<óÌ3Ï&ƒP›°bÅ |öÙg¨¯¯ÇáÇñÜsÏÝðŒO\\ÊÊÊPVV†ØØX„‡‡›Ë¢££…ÂÂBFäççC£Ñtz›üq,Y²gÏž…ÑhÄÙ³gñì³ÏâÉ'Ÿlu///áwÞáYBDDÄ dÀÀ@¼þúëxöÙg1`À,Y²›7oÆäÉ“-– ÂØ±c¡V«1hÐ ¬ZµÊ\–˜˜ˆ   ̘1r¹ááá íô6­^½'NÄ´iÓàèèˆiÓ¦aÒ¤IxñÅÛ\/22›7o6O7ÿ[Cü»BDDD½ŸÍ–¶ªQ>xLDDDèƒKõ BDDDÄ Ôx[Œˆˆˆúm""""b""""b""""b""""b""""b""""b""""²-»€ˆˆˆzŠïOàtA!$‚A"@"‘@"\ûWHšÍÌe׿1Q¯—¸*Eˆ¢Q4]ûCÌ?OC!BD˜Ëª*õØ÷¯·„ˆˆˆn6~qx÷¨7ÔÂd2A45þü¯éZðiúWaú¹¬+$7ãiz¹¸¸`öìÙ8sæL»ët¤~""ê›öï߀€888À××;vì°éøDtÓƒ€Ÿ/e‰(..ÆwÜðððv—'"¢þ-;;‹/FZZª««‘‘‘#Gްc¨÷¡&ƒFrr2þóŸÿX$òôôt 6Ìü`Só”.6mÚµZ {{{L˜0yyyË5]q""¢¾#-- k׮ŬY³`oolß¾Ý\^WW‡ÈÈH( ( DEE¡®®®KãGKcR{í´¦­qI¬[·*• ÎÎΈˆˆ€Á`àA·ÂÇïCeå‹y•W®`ßþŒž„ÊËË‘’’‚Ûo¿Ýb~NNrss[½¯—™™‰¬¬,TVV"44QQQ~¹rÔtʼnˆˆúެ¬,„„„´ZþüóÏãÒ¥K(((À™3gpþüy$''wyü¸~L²¦Î8zô(òóóQ\\ N‡•+Wò [áà¡OúèBsª¼r…=‰OgÚ¤~¡Bw¡C‰âÐÞX±ÌªDìììŒÀÀ@lܸ¿úÕ¯ÌåZ­žžžë4˜‚  ¢¢ÔÔÔ@¡P ¡¡á†e‰ˆ¨ïÉd0 J¥-–:™™™ðóóœ9sÁÁÁ¸xñb§Ç–Æ$kÚiijk|ðõõ 88.\è÷Çýým0s^˜yú¯R°"åUÔ×ÕÀd2¡ÑØ€gcâ}!sfaß'˜|÷]xååT"L&L¦Fìû×Ûxì‰èŽŸw7c§Ú *ÍO¸–4Ä —Ëa4ùADÔÇ)•J\¾|C† i±\§ÓÁÛÛÛ<ííí N×åñãú1ÉšvZúåÿúéëÇ‘#GZü\ZZʃn‰D‚WÓ×ã–.Ãÿþíu<þ›…xåå— L¦Æ®×Ï.&"¢ž 00hµ\¥R¡¸¸Ø<]TT777›oGGÚÍëFlqº¹æuž;w*•н#aè•—ñÚÆW¾>­Ó<±O!¥R‰Ó§Oó¬ "êc‘˜˜ˆƒ¢¾¾………ˆˆˆ0—‡……aéÒ¥ÐëõÐëõˆ‰‰F£±ùøÑÕvZ‡²²2”••!66¶ÝOTÓaH¶À¦!¨W¡øøxLš4‰Ÿ#"êc±eË,_¾Üüwè¦Nj._³f T*|}}áëë OOO¤¤¤Ø|üèj;­ ÂØ±c¡V«1hÐ ¬ZµŠ½‚ ÀØÐ±OÔ™NÆ›?,MDDD7îü OË®Xú¿­Ç¬¹ àû«_[ý—¥¿ÿÏW8WX€‡óû·Ï¯Ø ""¢c΃ ðÙ¿÷A*“`èoHÛ¸‚gET”é ½xS‚C:R;sEˆˆˆˆÈVš_€sE8‘“…Ëzˆ@«ß>/“Éà:hÆÜ O/u÷!"""¢¾‚Ÿ'"""!""""!""""!""""!""""!""""!""""!""""!""""!""""!""""!""""!""""!"""¢ž@Æ. "¢NE4ÔÐ`l€h2Ù'- H$Éì`ïà@h}Q“ uu5hlldZѯ©Nr9:{m‡Aˆˆˆ:­®ö*Ηᛓ_C¯ûÒ ©DŠACÜ0ñ. éGG9D±åSsµgϞ—ÇÁÆ•€ kIDAT`¨c終pÏ”ûà÷«±prr†Édb""¢îa¬¯Gié%|y< sC5î= R© B[W;ú©FS# ¾ËÃ?Àm®ƒ0l˜+êëo 9†Úœ?_Œ¯Žøñ>ÂŽrûôz"DäæEöç™Pr‡ß¨!¨­ù‰AˆˆˆºG}ƒ'¿þ>ŽÞþELFvL+üF߃Á€ì£‡þÔ … d46àø±LŒ½}k»OA€(²_;v2Q7“4 ؼra]M´óàsórö«õç!ƒuÿoâ?@·âù îúËÿ”½^šŸ®t¹>ù¥Mêi;‰í~L°BÝÛ¯ÝÑ7ó<ìTˆâc""êô "éÜ0" „|€·)ÃÇïWxò·Oá?ÿÉïP+žKÆ{ï¾uSnùå-ë³Îö©µ22þ»'A9Ð cÇMÀ[ÿx§ßž‡ BDDÔõßÄE±ã/5Õ•¸R¡Ã±#‡8ùÌy'sOZ]Ç¥K?àî;ïì\û­lS‹?Ûô…]²uû_|‘ƒèg–`ͪ?CÿÃìÙýÁÿ·w÷±MÔaÀ¿íºv¶î­]Çl„ˆ tºñâX„È‹à£FPÉÆ‹ âØÆÆ|›CˆHŒ‰B 11œ˜ˆ *ˆ0Ø:ÊÚu/Ýkßîüc£Ùb»ÞÊ^¿Ÿæ—öz¿ÞÖçwÉ=÷Ü]Ç~8Öß»—+BDDÔ¿{â2ˆ@·ÚŸer9tQ:¤¥-EVfÞÊ/põq8ÈÚ˜‹!qîÂÂ磡±"€;‚B!Š"‡µ½P®×cÞOA«‹Ah„sRçÁh2¹–w£_ÇÖñ=txíÏçsø[$$އ:L‹‘£âññî=>}w¹—{;Î{¸½»e+òrs0eêø+•ˆ‹‹Ã®]ïÿ+"€–V+–­X…ÈAC9h–§¯FK«UR<º»žlîbÆDˆˆˆú°"$÷­Šàæ3s’']Óô Žÿð=ô—/" ™YQD“¥Ðd©i{-Š˜7ÿI¬X–}yô—/à®aÃñêú ]W;ÜTÜ-¢ˆ%KÓ™ñª®ý…Ã_áÔ©Ÿ|ªbȼ\êÝi~WPJNœÄôiS%Kî¦< ü~æ4~+=+W®`SÞë’âÑÕØõNEˆ‡Æˆˆ¨_¡ž»õCDD8êëë]Ó»÷ìÅ–Íï :zˆ¼Ü(üâÇÏÿ|ª))“€àà`ääd¡ø»£=öÿàzÕuTW›18&;wlõæí4êëë*©ïþñNþ›Ðh4Ðj5Ø\ýJŠGwÇ®?×C&BDDäûF¤ý„¯‡Æ:6Sµ!!!®ékÇ#8Tƒ Ä “©Úã2Nœ<…©Óg@«‹Á€à0h"£a6›»ü›ðúFÛ·wŠ‹bÜÄI¸'þ>}õõ-whL­V£¦¶VÒ¸&ÄÆÆº¦cc‡Âh4IЇ·±ã¡1""º}*B7{br{+,üÆ'¹¦u‘‘8öWÔ×a©5¡±ÞŒ†ºjËXðì"¤-]‚² çÐPW Ãßú¶ËÏÛ›B¡@ss³kºÆlî¼ O¯Û[½cñÙ§ûPY~› ÞFúÊÕ>ë¿“¥Ç%%âÈ‘bIã¢ÕjP©¯tMë+ôÐh"$ÅÃëØñdi""º=*Bò›:YÚ)0\¯Â®?ÂoåcݺW\}/^„ôUkP^Q»Ã³çþÀ³‹–x¬Ú´´´B¥ €R¥‚¾²+V®éÔgô=£°mû4µ´àê5V®~ÙcH­VãbÙ¥NËîùpþÏ °ÙíE‡ÓÇŠôËç{º‚òÒšUÈÎÉEñÑïaµÙP^Q´åéncðxêcX»>FS5Œ¦j¬}õ5Ì{ODD¾nˆ¬ÖV46ZPv¶–º"¯rr[uɆñ÷#*:­Íz °Z­¨«5ãÜ/%°Ù¬ ^”JâHÆ;G¢¹¡Ž‰õ-™L…R…¿ê¦~Ý÷ÿ@8mVØ9-''·1Uµ•w›á#ÇA”h¼™cYñmÃF°Ö±ºpöD·®]_y}nÝK³(½››ëÏ»ÁQ )—Õ­¼Û|õÍÿº÷èëÐöé¡#³þ¾LÇçÜzqzL`pG¿6!S¦N—ÉdL–ÖÖ¡sx€4ôÍyñ*µÚ¨@N·zÍ{žèîÔþåWçTWWÓñ*µznl\€4´cXøÇŸ|þhL!=<ÆÇ^¹r•&ȼU*•sÞœO÷ñ£õŸ1ñ†ÖÑ6bÕŠ„¤÷ÞWk4Fñ\¥•w›Ò> íܩ˓Z÷áúvºtêòä‘?ò Ž|?~rÿÞŸs¯_3zäüøEtdÔ´—f¿6ëú•ÌìË™íBBÞY¶ŠIòÔéãGež=QZ*{/9Õ¨´´×g^¼”þûþk—/Hì%+W'Ññï¾÷~YÙý̳'ަ:zìø£1¼?uí‡O<ÑÉÌôIï½_YY™yîä±#¿Ÿ>ý—ù£mD§Žôï·ù˯âyJ©Löwæ_o/yë•ÙsKJe—.œ~{É[L®ƒ@‹DÀµXû}樂­6½oEgoåÝææµ,w77BˆB¡¶{¢¸0Ï(¥B¡èÞ£ïµ+™tú³§Ž¶m+%„äææMxö…¬ gèxºÀî=únÿá»víB!¥¥²ƒ‡gÿ}Ö½×/?ÿDgÌÉÉíÝoP“/ís²3{ {¿ä×X988ôîÕã½5«Ú·ogØG&À¤§ß†uïµw÷iP !$//¿gŸFéÍm:qi©løÈqGtuu1ªŽõ ÐŪÔj¿6!L8°mº|®ƒÀ£}åþøåÖl\]\–,ŠÇ€ÐøðÝÏÒët 3©ß±z%æ¥Wb^ ™Š£J¥ÄÕŠ_`ûÂükZØ•Ë'Žjµ #ÀÌÑ3GÄÑ„Ì3G1@ˆ£1çtÄZ0o†d[#Ž>m‚1v€ §8ò}Ï‘¢(Š¢ °â/4xïçƒ?¨F-ÝæÝ_-Þüƺ\Ðȼ`·ßªý)òî>k4κ\Ð|ój#µtt`Ò¯·!þg\Jøl BQEë>…®½ !L.hâH(’´ï¡Æ¹ÊN%¼û±Äž+­J©Xýö¼B—Þ„ü› Ô;í]c"|ÜÄ“?ù×Wkç ßZQÀ²™ãÛc‚Öì+ „Pz«2Þ¿ÿ•W^IJJêС¥×Q„"„0¹s~~#Œ(5ú«÷䛎޻û@ÅÄëôT…Bwõ^ÍŽs¥y2¥QšIŸümTft?ïäý·²‹ätb&=òæ`XB#Œ€iÿ(4y@‹GŠ$îåÓ¸ÒÒÒ§Ÿ~úÊ•+]ºtY±b…Zr=VL\ÿ7!ÄE"ß½uÜð€øs˜x€¸;ˆû†¸®šØvùîüœ…a.<œl²ïÉ)“”f›ü§„F€¢šþ(4‡6€–µ¬&Ô;c¥‰{óY?ÓëõÏ>ûì•+WÖ¬Y³téÒ§›„ðäzü !•JíOz²5ùw~GQ¹_£ÙwIF5¥—ç»ÿε9/å]s»B~žF™¸>k×Ü.×gæ /öñþ„»ÄFx&¯ê“ô; µž§[‘à•A~ýÛ¹BŽÝx°éÏ»jE'ûòؽ Ý[{8ÙLZŸµkn—­§‹'to­ÖQŸ¥zØM ÷Ôè©u‡n_¼]Mñv±}y€o—'‘PUXýá¡; -]×®ê2ê kSWLh»û‚ì­*BH˜¿ãÄpÏĽù»ævùæDÑÄðÖᱟgjt!ÄœÆ öúß6p ‘Q—qâþï9’Õ¿äSÔ¿ÿx/^¼¸{÷n:üÅ_=zôµ×^3PFB'fr=æ/f@œ%âç{zåË”FñôëøÍŠN>¬½&|œE™ðqÖ„³ 3çzx†xÙÏÛvsÆæ«*­~F_þ¢úøx8ØÌþöÚëÿ»æél3õ)¦ÀPo‡ùÛnNü§"‰8æ«ì-'‹âF´quÏú:{ËÉ¢˜_:ý;c¥{2˦oº:cÓÕÂroT—Ñ‹µ©_¿á+„AL„ïæ£÷èÚ;û9¾¹åÆ+__s³O}Ê›.ÁœÆ›¶kˆŒºŒ×ãs‘Z#Ž„wÆI™°V«ŠŠš2eÊŽ;Š‹‹/^,•J?øàþ\9»ßì²ûÍ.£;´÷qXûû7œ*:G;‘QúeiuÃ:{l8r·¬Z£Pë¿=QÔ7Ä•?ýÀP×MGïU(´äÚ Gî ý7ýæ£÷*ÿš¾~¦X©Ñg\{ ±n;SB‡ÜíèOçn¹~éNµZ«—«uÿ;QÜ=Ðɺ¦æ•*sJ㺵ÓµÕÅÛÕô-ZBȦ?ïV(´ í¦£÷…ºYÚx3‡ˆ'À²ÚhæH­Þó¯[¼X,Þºuëðá㢢BBB*++7lØàèèh”…b˜ë1güG—¸Æ– ;KÄÕ*Õ…5/¦­Åë_lO@@¨ÿ&6Íåæ ¾÷@E¿-ªP¹9ˆ™ÊªÕ†YªZBˆZK†EB¾£¯ÃKý}ƒ=í%6Bz…oÔ0S¸šzüƃý|%6Âå»r™¼EjÓFšßxÃ6ð ‘Q.qä[V//]µçß»‡Ýºu;tèÐàÁƒ¯^½jccóì³Ï²Þù6ÊõXßq¤jïârån SëÓÃF¹Êk´ ~¼YV­1³„r­—‹Í½jú¾a…BËÕ ÖJ™ð¢QA›Þ;_P%WéìmE?¼Þ¹Öîp5uB¸ç® ¥vbáä^z8×fééló@þ°‘Ö5žgˆðܘ¿¬¦VíÉ£ç†ú˜žžîææ¶jÕ*±XÌöüÁ0×cþ"<ñåá(Û­UTïm§‹kËÂZ&1 ìÏ’Íêïëj#ik»·Fò—pôúƒWú¹:ˆ\D¯ òûóÚŽfþ°­X¨ÖêÕZ·«ÍÜ¡þL|JçïnËÚÖ¦v ptwÿ~ùþ¯—d!^ik;º–—ø¹Ú‹\íE¯ ô;r­Ü¢Æµ{ˆÎØÇõ"µnæ8¡íªÝÆkänݺedd¸»»sýïeÍ…™£!¿ÄvÓSÔ¹öraÍ’í9ù2¥ùóž™ã•<×Ó+qrˆ‡“Ma¹jÛébÖÒ˜Èo޽>Øct'Bȱ¾=QdÝÌñÃC·_èçåTV­Ùy®t@¨¿ó\麩¡áØuÚÀÚÔ¨§¼¿=qO§§!2îÎŒð[ös.!äòÝšõÓ:ØÛ ]ðÝɇ4³ñFmà"Ì!|O|S9”y~û³„5ëjý…Ì…6¯cLAý²o^÷1ë21 !ˆvùÃÊ'–O^¹;—RæÞ{õÛó(=§ ž@(*sïMÏR™\ÔÓ C›Z~>¸b÷Ã_t8>Yàø¤™g1“ €zÒF¨#hl„ü§äŠ ÁVÜâ´.^x±¾F¯½€AÀ«ÑŸÇðÿB†å»r—O ¦±èïò]¹s¼ðÂëQÖFÞ2_–ÆÔЂ‰qO·æLÍý{;@KÆÝª2G׌ÁÐZ0?~i•û <¶@âG°±™éüå»ù ‹ 3ä™qSÀc$އö-«ÍšuÍ;ó!Ž-€mÛ¶Í›7¯¸¸ØpX@@™½k k ÀÌ‘´h¨AÓ/«u:-—5ë³Ï>{íÚ5;‰½N‡-æÿsŠ›b~öÌÌÌ1cƸººÚÛÛ÷ë×oÇŽµVg°š… îܹ“¾>­+Ͱ„Fçf{XÔNÓõxLAŠ#+¥¥¥ عsç÷ß¡4‚ú£°9\¾|yäÈ‘S¦L)(((//OMMݲeK­ÕÕWË ûöí[—b KfޤiÌUq4´f¥M«S‰#F--­M›6B¡ÐtM' üïB·dÉ///‡ÈÈȪª*ÖU!S‚R©|å•W\]]]]]_}õU¥RÉÚ@˜˜èîîîëë»gÏžwß}·U«V¾¾¾¿ÿþ;OGLûkˆF£‰‹‹óôôtwwgœàxÚÃß@’’âíííèè£R©,j˜a YËáš9U^^îéé)“ɘzyy1Ç4¥8ÖjÍ ,%%%%..N£ÑhµÚ¸¸¸´´4BHzzúäÉ“­žžÎRÇ7oÞ¼’’’âââ:ÄÅÅ1‰OŸ>}þüy½^Ï_‚IIIçÎ;þ|qq±½½ý¢E‹øÛðÎ;ïܽ{÷Æׯ_¿uëVBBWJJJîܹ“˜˜U\\|ëÖ­ÄÄD¦Á¬áoíŠ+._¾|áÂ…¼¼¼;wîБ<íáo!äÏ?ÿÌÊÊÊËË+..^¶l™Õ c-Çœcêîî¹aÃú£ôôôÞ½{{yyá:jÊŠo³¾~ØœJ°tÞ,FóÄOØÚÚnß¾½¨¨ÈÅÅE*•VWW¦¡€ † kü´iÓRSS×®]»páB:F$iµZ£K‹¿®†ÔÔÔxzz2É ùÌZlPPPvv6.**òööæ/ÁÏÏïúõëtøÚµkþþþ¬ „”••QEO嘰X,®µ#\ý ¸víšQ$O{ø@¹qã¾~ýz@@€E 3IÖrx¥aQ999jµš¢¨Ù³gÿý÷¸Äê›S¹4Ðq¤(*33ÓÓÓÓÖÖ¶S§N„mÛ¶™¦–Šã®]»:uêxõêU:ÆÓÓ³¨¨È¢B¸?~<""‚qÐ¥×¼üšÂ/Žb±X$‰D"f9Ì_‚¡Ðk4C­©µRð‰DÆ4²ÖöpkF3Vk9fŠ#EQÏ=÷ÜÖ­[õz}‡är9.±GË–Õ´5«££#—5+àA,Ëåò‡ö²2&>---...>>>%%…Ž8pàž={,*„‹)S¦Ì;·°°P¯×WTTÔý¿¯¯oAAV«ÕétE­ÊMñööÎËËcnÏY½´¢#¾¾¾¹¹¹õØ&c~~¾···Õ c-Ç|,Xðᇞ—U³¸çhø633³  Àh‚Še5ÿ*õüùóáááb±8((èÓO?¥ã ôÓO?Ñ ÒÓÓŸyæ:|êÔ©!C†8:::88 0`÷îÝ<…Ö’˜˜èääļýù矃ƒƒE"Q``àG}dέIþeµN§KJJ ²±± 3ºµbZ‚\.‰‰qvvvvvމ‰a––.«¹:bÔ_CÔjull¬‡‡‡»»ûÚµkÍo×$''Ó飣£ …E «µžÕ´iwíÚ@OÞA-«ùvŸϼ]¶`öÛ‰iµþBfUêçøZ$Íê‡+_|ñEnnnrr2ŽKùñˬ²f5àéác’ækµZžjOÇæ¸48iiiÌ0Aa®8yf~7 @s˜À …Â?ü0 £Ñ,Āǜf²¦Æo  ìçG€8Ä Žqˆ#@ ¹kV¨ƒ8šµ™Ó"ýœ1äò `prr:wîO†‹Gë¬SM—ØMè¡JÌv+5zëï“C‡oܸAØœèÒam$€MëË‚ýÅbñÖ­[‡RYY¹aÃÆ‘ÔýæX¡P|öÙgqqqVXXXعsg:¥^¯çz4aZNqqqpp0...f>òóó3LéááA±³³3 3»ÄŸ8qbÑ¢E.\¨©©!f?iÛ¶-(**2sÄŠŠŠ‚‚‚è°T*eMC·¾_Á³•=uZVÚµ°··íµ×N:e]vK­SšÐC•ÔæVÊeHëíí]PPÀdÄÉšL ¬Y…B±iÓ&fg)–Z§24¡‡*©Í­”Ë6222>>^&“Éd2æ¦'M#Žô™š‘‘aŽß.°úa®‹‹Ëwß}÷í·ßZWÈâÅ‹#""†êàà5iÒ$33®Y³ÆÛÛ»]»víÚµóóóKLL´®›7oŽ‹‹stt>~âĉP_Àš<ÚH¥ÒÐÐP¥R9~üxÓõ8 .Ž4uYSÇÆÆÆÆÆb A½ƒýâG€8Ä Žqˆ#4W`Í uGX³6ü»0lÛ¶mÞ¼yÅÅņi,Ú¸µðh -«aÍjÝù½qãFØýû÷›š@ñd7\¸páÎ;éËÆ:RÃa¬ø¨ÑÚИgB‹¬ âÈ ¬YkeÆ :Žy›’’„k•'Ö………}ûö5³V KhB0-ÂÀ¶Xq„5«9 4ˆùϱoß¾Ž;šþ‡W©T3gΤýEßÿ}ž)½Ô …ŒÓ©É¿_V£šÖŽ• ðÎeÜjNãùÛÀ:\#FŒ8xð ##cìØ± ÚØÒ¶q„5«¥¼ñÆÉÉÉô?ó•+W²î“PZZš——wñâÅÇ×:)à18­Õ—Õ¨„¦µceà/œp·šÓxþ6°WJJJ\\œF£Ñjµqqqiii Ú[Úf ¬YÔš•¢¨ñãÇoß¾}Ïž=#GŽdµõ÷÷gŒIi—/SÃHb­/+nZ;V3 'Æ­æ7ž« \Ã5mÚ´ÔÔÔµk×.\¸°¡Û@`KÛ\­Y-GŠ¢233===mmm;uêDÙ¶m›i`t:t(<<üÉ'Ÿ11ÑÉÉÉÌqàé]rr2ýL9::Z¡PXÔxž6°× Aƒ~úé':Azzú3Ï<Ó mà*™I|þüùððp±Xôé§Ÿ2ñ555Ó¦M£O›5kÖØØØ`Y]¿ËjX³‚æNsø­Hõ¶´M ¬YhÀ–¶A5+*°¥mâ@SÑ~×pm€-m³û9Ä Žqˆ#@âGh®Àšê ްfmr`Ê @s\VÚÕRl°Æ³¦7-¦¬õØêMY5+\{“mõL³À”€GXaÍÚÈóP˜²ÖÑ•kˆŒº €5âkÖ¦mÁ”•Ž´Î•gˆŒº !°fmt³®8ת¦¬õeˆÊ5DF¹lè—û9ŠÅâ­[·><***$$¤²²rÆ Œ'¨ûM·ºÜŒ+,,ìܹ3]ˆ^¯¯õYDqqqpp0...f>òóó3LéááA±³³3 3{Ÿ8qbÑ¢E.\¨©©!–?á/œÒ¶m[&PTTdiãÍ"ž\Ëj³€5k³¦¬õ>Dâh°fmžÀ”Õ£6X:Dâh1ݺuËÈÈ05ØfRëW­`ñâÅC‡uppˆŠŠš4iú5kÖx{{·k×®]»v~~~‰‰‰ÖÕ»y󿏏8GGÇÁƒ÷ïߟ‰_°`AÏž=ëÞ»ˆˆˆ°°0©TÚªU+Æ&ÅÌÆµÁÒ!ûu kVМÿ‹àK‘ A5+X¬Y€ü$4_°¦G€8Ä Žqˆ#@âÀX³@Ä֬͜¹G6žÀ²Ö¬Ö‘™™9fÌWWW{{û~ýúíØ±ƒ¹ìiœGŽyýúu3ÅÂÔèÕ:Ñ©÷=ÓÌ©´1Uçh$qdÖ¬ü\¾|yäÈ‘S¦L)(((//OMMݲe ó)ma‘——×£Gó7Ç45c±®mü¶6:˜o‚¦GX³ÖʪU«–/_íææ&‘Húõë·sçN£4­[·NHH¸té!dĈ|x##cìØ±VL‘jõhå¢iÍZY-X¹ºÉ¼U(ÑÑÑŽŽŽ>>>)))†¦¯LàóÏ?—J¥¶¶¶ááá™™™8-Aƒˆ#¬Y-"==}òäÉüid2Ybbb×®] !)))qqqF«ÕÆÅÅ¥¥¥YQi­­\4­Y+«k­$$$TTTäççgee;vŒ5MFFÆñãÇËËË'Mšdhä@-Àšµá‰DZ­ÖHŒÞ:::>üêÕ«tü´iÓRSS×®]»páBVSSÓÅ£u­¦Kì¦5keµ`5íÑ[ÿœœ:|ãÆ ÓôL 鯰6ÀšÖ¬‡‡‡L&£=óè ÕpyÈ:‡zî¹ç–,YRSSì¯-½›f¦G«i9MkÖÊjÁZ+EEEAAAtX*•r:àààÀ³•=uZVÚÕ"¸gÏ‹²¤¥¥ÅÅÅÅÇǧ¤¤XW©Õ¤MkÖÊjÁjøY.—?\2TÇ IDAT딕¶¹  €ÉˆS4™8X³ZBBBBBBÂÖ­[+++Õjõ‘#GøÓgddÍœ9sΜ9çÏŸÏÊʲ¢R« H›Ö¬•Õ‚Õð¬KMM•Ëå………³gÏfâ###ãããe2™L&cnzÐ4âH`ÍjÉ@íÞ½{óæÍ~~~îîî Ìã,VV¬X‘˜˜(‰Äbñºuë.\hE¥V6­Y+«+ÃÆwíÚåêêÚ¿ÿ!C†0ñ«W¯vrr ìܹsŸ>}lllpÖúÖ¬ œ…õñK˜ìììÑ£Gçææb<ùÀš´XæÏŸ¿lÙ2•J?qâD ¨/`Í m¤Rihh¨R©?~¼éz€GŽº¬©cccccc1† ÞÁ~Žqˆ#@âG€8Äš+°f€:ˆ#¬Yu`s @ƒ,«aÍj5¡¡¡¡¡¡†1………Ï?ÿ¼»»»D"8pàÞ½{™~ýõ×îÝ»ÛÙÙµk×î믿ftÍ(`¤z¢RãÄ-DY5k­œ8qB$‰D¢“'O2‘‘‘‘!!!ÙÙÙ«W¯þì³Ï˜Ä³fÍJNN®ªª:xð`­›ãš£8šÕ¾ùæ›èèè3f|óÍ7LäéÓ§—/_îíímgg7hР}ûöÑñÉÉÉï½÷Þ3Ï}ûö팂ôèÑcÉ’%¦Û²?~|ôèÑUajyÊêŒJS«ý)«­+—a,kiæø»š¶™ÇNÖÈ€ÆÖ¬ èúøÃÇ§ÃÆ ûñÇépaaá¬Y³üüüœŸþù[·n™Z¹²:‘6wSÂmyjäŒÊjj—­«©a,Wiæû»šS¯Q.ÓšÕ‚™#mÍêêê5xðàÊÊÊ÷Þ{Ö¬µ®©éptt4³²öóóÛ´iSaaannnPPÐ /<Ü¥ÝÍÍíþýûu¿Ë9`À'''@àèè(“ɘjµ?¥m]Åb±H$òñña–äÏ=÷ÜæÍ›×­[Ã_šùþ®æÔËŸ €f´¬†5«ùÿöÛoÓ¦M£o®MŸ>ýàÁƒ†bAiݺõÊ•+Ïž=K¿íׯßêX/3*¿ý)á¶ue5Œe-Í:W«ídh.âH`Íj6[¶lyñÅ 'ð3fÌØºu+!dìØ±GŽQ*•2™,))©{÷ît–Å‹/^¼øÐ¡Cjµ:''ÇpšÆƒ‘å)—3*©Íþ”pغrƲ–f¦¿«Q›­¶“ YÜs4|›™™YPP`´zÇ=GCºvíšžžn“‘‘Ñ­[7Š¢öîÝ;`À;;;—±cÇÞ¼y“I³oß¾nݺÙÚÚÒßs4çžcbb¢““óÑÏ?ÿ,‰?úè#üÉÉÉôáèèh…BaZ”N§KJJ ²±± Û¶mEQƒ úé§ŸèéééÏ<ó Oir¹<&&ÆÙÙÙÙÙ9&&F.—³¶Ü¨Í¬õòßN ¡ï9šX~oZ°fË€5+°€kÀš@ââG€8Ä Žq€&Ö¬Pq„5kýÒø7`«dY kVëô¨Ö˜Çv(h!âÈ ¬Y-s7Z¾8šµŽ¨òòrOOOÆãE£Ñxyy•””XázúùçŸK¥R[[ÛðððÌÌL:^¥RÍœ9ÓÑÑÑÇÇçý÷ßçXÀ‹€úGX³Ö#îîî‘‘‘6l ß¦§§÷îÝ›6]±Ôõ4##ãøñãååå“&Mb¬JKKóòò.^¼xøðaÖ6À‹N`ÍÚp“]þÉ rrrÕj5EQ³gÏþþûï­s=-++c¼XÅb1ö÷÷gÊ¡ [àÅ €ù6 8dÑ֬ÇŠŠ ©¬¬Ü°a¬YëBpppïÞ½·oß™žž¾víZ:ÞR×S:àààÀìÖ^TTÄ”Ãd4‚öD¥•K¯×3ËÞçž{nÉ’%555Ìúš4€«i½^¬à]VÚµÞY°`Á‡~xòäɾ}ûÚÛ?ü>@½¸žúøø0陀ðb ~Ä‘Àšµ¾yê©§lll–.]:}út&².®§ S§N¥Ë)))™7okx±PoâHëcFF«ñ10B`Ïä1''çé§Ÿfb"""¤Ri«V­V­ZEG®Y³ÆÛÛ»]»víÚµóóóKLLä¯zõêÕîîîAAA]ºt1,ÜÅ‹GDD :ÔÁÁ!**jÒ¤I„+V$&&ŠD"±X¼nݺ… Ö½U ,èÙ³'3¬õм.^X³69_|ñEnnnrr2£§Íðëø h‘ÀšµùRQQ‘––öûï¿c(hVÀ𵉧cB¡ðÃ? ÀhðHŠ#hXªÍsõŠ55xÜÀ´âG€8Ä Žqˆ#4W`Í uGX³«Á¦ %/«aÍj5¡¡¡¡¡¡Fba”¦°°ðùçŸwww—H$Ü»w/ u”ª&ÌÞlëÀJqdÖ¬µrâÄ ‘H$‰Nž<É“,222$$$;;»¢¢bõêÕŸ}ö™¥%´H0ߤ8šÕ¾ùæ›èèè3f|óÍ7<ÉNŸ>½|ùrooo;;»AƒíÛ·ÏüxÌQMga¦.©\ž«ff7JÃZ×Ly«P(¢££iÙ””ö1VûYš‹8šÕ"T*ÕŽ;¦M›6}úôíÛ·›ŠC=–,Y’››kE <æ¨\s1C—TÂá¹j~vCÌ/Ê„„„ŠŠŠüüü¬¬¬cÇŽ±¦aµŸ 5kº>þðÃðáÃéð°aÃ~üñG.ËÖÂÂÂY³fùùù9;;?ÿüó·nÝâ/ÁsTWXÃxVÏU3³[TW™þþþ999tøÆ¦é ‡ý, gÍjÁÌ‘¶fuuuŠŠög@ýý|¥^ŠÊÎÎ=z´éƒ{X³‚æÎüùó—-[¦R©âãã'NœˆM¬YA³@*•†††*•ÊñãÇ›®Çh¾âZ*õø½º‹ÃšØÏ Žqˆ#@âG€8@sÖ¬Pq„5ëcKã«ÂÊ®‰ùž±c² +WÐâÈ ¬Y›ׯÄ"ÏØÆ™ b¾ š…8šÕ|rssÇïìì,‘HFURRrñâÅæb¦(*$$äÒ¥K¦)MKãòqµÈ£•pûªTª™3gÒF©ï¿ÿ>W§X=cÍ4zåOÌ5„•+h¾âkVë7nídP\\Ü¡C‡¸¸¸nݺ¹¹¹>|˜NðǸ»»wíÚÕ4¥ii\>®y´Ò°ú&$$”––æåå]¼x‘i¡<ž±¹³ÂÊ4_`ÍÚp6ÓššOOOŠ¢Ö¯_?eÊ:òùçŸÿä“O¸Ršéãj…G+«ß©¿¿?ã°JÛÅXä:kŽÑ+¬\Aó·fµ@)ŠÊÌÌôôô´µµíÔ©!dÛ¶m¦i€éÅ|üøñˆˆÆÆ–~[^^îââRZZZRRâââR^^Ε’‹ÒÒÒ ôíÛ—~+‰´Z-Öh4Œ"³ ¬YËaյѣG÷Ýwtøÿûߘ1c˜BÌiƒ™‰-ma­hßjkVk™2eÊܹs õz}EE}¹º¹¹3æë¯¿þúë¯ÇŽëææÆ•’ CWR­4>>>L9LÀ~ÏX~wV#`å ZÎX³ZB¡H$‰$//ÏðþWLLÌÆ7mÚßÒVWb¹G+S§N¥VKJJæÍ›gš€ß3–ßÕX¹‚–#ŽÖ¬æ¡T*íììèðæÍ›ãââÜ¿&ÍСCÕjµZ­f|J¹RÂêãJ,÷håbõêÕîîîAAA]ºtyúé§Mð{Æò»³+WÐl5kƒ Óé6mÚôå—_ž>}úñ:Ÿ,ùq ¬\A“kÖÆÆÖÖ644ô«¯¾ÂP4°r ¬YjæˆAhP`å š‹8`-“aå š3ØÏ Žqˆ#@âG€8@sÖ¬Pq„5+Ëj`Íj`ãÆ†1û÷ï·Î>”'׳Ï>kè¾’@oBÌ_{3q1…™*xäÅ‘X³Öʆ  7¡HII±®žŸ!¯_¿þ‹/¾ÈÊÊ"„deemذá“O>©ßÚ€8Z¬YÍaРAÌŽ}ûöuìØ‘kÒļݿXX˜­­­T*Ý´i“ѧ&..ÎÓÓÓÝÝýƒ> „øúú&%%½üòËjµzÖ¬Yï½÷žO­µ×¶PÐ-Y²ÄËËËÁÁ!22²ªªŠ2bĈƒÒ 222ÆŽK¸íUy|bÓÒÒÚ´i# éNÑ^ <õåÂIš£8šÕRÞxãäädzÞ·råJs6’™1cÆÊ•+«ªªþüóÏS§N}ºbÅŠË—/_¸p!//ïÎ;tä¬Y³œèææ6sæÌºÔN“””tîܹóçÏÛÛÛ/Z´ˆžxÆÅÅi4­V—––F'fµWåñ‰=}úôùóçõz½‘%W½F¹pRFÖ¬ í>8~üøíÛ·ïÙ³gäÈ‘æ8äµiÓæã?¾}û6ë§×®]3­‹6˜>|ø°uµ”M‡‹ŠŠ¼½½éð´iÓRSS×®]»páB~{UŸØÂÂB._@®zrkÖ– އ òÉ'8`Ž8ž9sfܸq­Zµ Þ³g©+©F£1­kèС 2dˆuµ!‹E"‘H$¢—±ŒCì®]»:uêxõêU~{UK}bùë%ðV°fmy 6L©T*Š#FÆsùŽöêÕkÏž=¥¥¥ü±©¡¯¯¯©_ÊæÍ› ÅáÇårùæÍ›Í©__ß‚‚­V«Óé(Šb³iiiqqqñññ†ÏvXíU¹|b­«€Gà ¬Y­àÊ•+W®\1zÃå;:uêÔ+W®ÐÓCSÓžèèè7ß|óÎ;<˜?>!äÞ½{ï¼óÎæÍ›ÅbñæÍ›—.]zïÞ½ZkçgöìÙ¯¾újNNŽV«ÍÊÊ¢]^322ŠŠŠfΜ9gΜóçÏÓÏÇ ‡½*—O¬nnn×®]㯀GC ¬Yë .ßÑ &Lž<ÙÑÑqÑ¢Eß}÷Q®åË—wêÔ©[·nÁÁÁ„¹sçÎ;—~ýÄOÌ™3gîܹæ4@`€ÑG‹/Žˆˆ:t¨ƒƒCTTÔ¤I“ègA‰‰‰"‘H,¯[·náÂ…tbV{U.ŸX#,XгgO¦¬õÐ$ÀšÔíª{Uš X³€eÀšXÀï @Àš@âGG€8Ä Žq€ÆÖ¬Pq„5k³¥q¶~ضmÛ¼yóŠ‹‹ñ“€eõ€5«u²e´-˜€ Ãxggç‘#G^¿~§4ž4–6ÏüÄ .ܹs§uÊÈÕkBHffæ˜1c\]]íííûõë·cÇ£,vvv—.]Âéš©8²kÖZá²0 3oóòòzôèÁµW¦9i,j›ù‰ ûöí[ÇA0 _¾|yäÈ‘S¦L)(((//OMMݲe‹Q®òòò &`óPð(‰#¬Y‚Ö­['$$ðO”¸Òpy½*ŠèèhGGGŸ””&Þ0ðùçŸK¥R[[ÛðððÌÌLÖ•;c¦jŽíª9]µjÕòåË£££ÝÜÜ$I¿~ývîÜi”ÆÁÁ!66öæÍ›¬U°¶¤}ûöôîâ………B¡ðîÝ»„ìììöíÛç[X‚ºŠ#¬Y™L–˜˜Øµk×:¦1$!!¡¢¢"???++ëØ±c¬i222Ž?^^^>iÒ$Sã#g.slWÍiXzzúäÉ“ùÓ(Šõë×÷êÕ‹µ Ö–Œ5*##ƒ²gÏ;;»½{÷Òu=šp8ß°kÖu4g‰m˜ÒÑÑqøðጷŸ9iHmv†þþþ999tøÆ¦é !eeet¸¦¦†q äj°™¶«ü…9’á¸999;w޵ Ö–üúë¯S§N¥(jÔ¨Qo½õÖØ±c)Šš2eÊþýû¹œoa ÷AX³65«93¬G¹ÒÔ*ŽF.©¬âXkE†‘fÚ®ÖÚOOÏ¢¢"þ¾Èåò>ø`РAµÊ+Ó¹\RUUåîî^^^îááQSS#•J —ó-,a!ްfmÉpy½z{{ÐáüüüºWdíª)ܳg{{û×^{YÿšÓ{{ûöíÛòÉ'½zõrssëÑ£ÇÇÜ©S'‰DB8œoa êá ¬Y›-\^¯‘‘‘ñññ2™L&“ÅÅÅÕ½"3mW͹š°uëÖÊÊJµZ}äÈÖ{Ž›6m ¶¨%£Fz÷Ýwi«î#F¼ûF¢?bu¾…%,¨Ó=G÷™™™FT,«›vY}þüùððp±Xôé§Ÿ2ñ555Ó¦M³··÷òòZ³fM—Õr¹<&&ÆÙÙÙÙÙ9&&F.—[·¬¦(êÔ©SC† qtttpp0`ÀîÝ»î9ŠÅâž={þõ×_¬%pµ„þèÅ‹és•rãÆ ú£ï¿ÿ¾C‡b±¸sçΠ#u:]RRRPPMXXs¿ËêÇyY kÖÇ‹ìììÑ£Gçææb( °fóçÏ_¶l™J¥ŠŸ8q"€Z5ëcT* U*•ãÇ_µj€zGðH‹qÀ|ð£(€8Ä Žqˆ#@âG€8Ä Žqˆ#ˆ#@âG€8Äš>ƒ­¿üx<”߯(–Õqˆ#@âG€8Ä Žðè"Æ€‡P”F­Òh5”^OÕâº'…b±­!–Ïõz¥R®ÓéZbߎ€P$²wp`Ÿ=æGâxP*j*+îËŠïÖTW¶À%’@`ïèìéàâÞJ"q (ãë_^Suófö™“ÇT*e‹TF;;»>ý¶ïfoï¨×ëMþ­‚Ü‹Ζßky E­<½º?Ù;°mëч8N´juMMUQá­'º=åî  ‰@Ð’:¨×ëKîä\:*ìɧllìÔêÿ( J!¿u+ﯓǺtëb'q´¬îS„:úÏG3ÜZù´õTÈ«Ž~QÑÝ3'™*‰¤Eu_§×ݸ’yà—.î­Ú´q7:úGÀ‡Z£*¹{ë‰î}ZyPz½N§my}ôô“†Èå7¯´ê7œü÷òÐj5'e„uíÖ6¤cé½[ yµ™“‹GW—ÀÀÀßý¹Ã]Mþ…³§Æ=Ü¢ôú–xôÛwêªR©Nüù{Ô̹â,˜YèõòêJ·V>z­¶åé¿áî™-S(4½éF©Õª6A!%w úß"û~xïVG•JÁzôËJ‹ýƒBôz] >ú¾m¤e{b;úGÀ/% uZM î¤P(Ôs\üBPbï¨TÔP”¾¥v_ ¬Ò@Q E:]K>úb‘È"å‡8‚ÿ`z«þ1é@(EQ-zBw| ï;¥×suâj;{¨–ypN*ÿyÓ‚gކÝ4§(ªe÷¢ôBÄÔA´†â»×/ŸS«”CÇF5Iÿx–œµ¦©w~Ú¾cá[KJJJäÕmeÍß@}wprk´ò}‹¾„€_Ès‘•Ü=ýçþô_8qø—{·s­+äæ• á}†Ž›úº£‹û{·6£)•PØ¢ÀŸ`éÛ Û¾ÿ_c W7ë«ûþöTß7¯°.áÿûnks;‡-ê&fŽà?ÿ\¹~QQ.»zñTXÿ¶*•âZÖ_mllµ•¥(•r/ß@•¼Z§Ó;ÕÑŽ¦ò~ãv°¶)UýΞxK»{÷ÞS½z‘Fœ«òÍ)ªŽ-9uúÌì9s7~þéÀî&'§NqjƒŒªµ3GPi¤Ø_ù7¯´ïô¤P{ZEétÃz EbŠ":­þêÅ3¶gØ~õÒVO§ÿcï÷wòoÿcOú¯?œùó@eE9IùeÛg¿íþý¶ºâ>E­NwåÂÉŒý?=ôsÁÍ+ìýž)İ †ñ¹×Žÿ¾›ŽÑë©›W/þùÛÏ¿þø÷ùZ–«ê 'WBˆ“«!TÞµ‹fðè©CÆL­®zÀĨÿ¾%Ššª~ÃÆ‹|ÝÉÕ£àæåªŠûý‡M1y¦­Ä>ïæeú¯J˜N„ÿÎqêëÅ”FÈÑ£Gÿøí@áí¼ñcÇÌ}3–P=e®©¼_SyŸPÔÊU«ïÝ»—•yöÒ…³·oß^µ:±>[òÏ¿ûWyþ‰¯['O~fÄ0žqàêã˯Î~gé’â»·~;°ïÌ™¿èÈ÷ßÿàÂ…ÌG3òs®K$’w–×}¸ºqÖ£Õ¨%Î:ñ÷àŠ ouïkoo¯Ó¨C:v»w'ÇNbOÔ¥×@gW•Jîë/­(/“Ø;2¹ª+ʪ+Êþ-äî­°îýl%öµ*8´«9íéüd‰½³¼º¢º¢ìîíÜÎáý\Õ*¹4¤Sñ<[‰C}­7ë‹ukSýü|bcß¼x)Ë4ÁOÛw¤$'yzzzyy¦¾ŸüÓö½¬®3îîî< ¸úho/)*.’ÉÊÚ|ºþ#:ò›o¿[›šâïïçää´zåòÝ{~i¸îãž#¨ý×óJ±­V£ÒëuFñjµÒÙÍSQS©×ëì$•B)¶±S*j!¶¶’êŠ2ú!Eé…"1S¸a-E©UJ'×Vt!¶‰Q£&Ño%öŽÕ•÷靿¨”Šc¿ï4üTlc«üïχÿ™Sæ,«â§›»;õPìµZ-e’ ¤¤T*•Òo¥Ò ’’Ò†¸Kdz¬®{ß]]]ï——·nÝšk¸ú¸å»o““ß_“”ìêâ’œœ4zÔHBÈÝ{÷zôîKS½^/¨: !¾çêãrþïyïÖª¸°À½•§Ñw}lm% yµ^¯%„(äÕ¶¶v¡)Ää‹A[-”­­D©¨¡ QÊk˜x@¨ÓjéĵÚ(/õRÛÙIŽœ"qp4£#M÷@ƨX“x//Ï‚ü‚àà¶„ü¼|OÏÖ ñ£AÈôyª÷¡CLœÂ5\}ìÞýÇm[(ŠúíÐïsæþßèëW !>ÞÞ‡?èççË2hÖ <u¸ÝÈq»¦MH§«™'”—ét:yMuö¥¿èx/ß6ŸýS£Öª”ª—/xûQz½á…oxÅÅ3a/ßÀ¿ÏÓj´j•úæÕL&ÞÉÅõfö½N¯T(®ý}–µŠ"~!™§—Ü+¨¸_|÷ÖÍSé¿T–—Zþ@FÈwϵndˆñÏNž´pñÒ’RYI©lá¢%Ï=;¹aÈp~•§îUÄÍ]¶båé*µ:7/oöou“«/żr5ûšZ£¡(J«ÕÑ‘³fÍ|3v~n^žF«ýûò•è™/×Ç|•ÔA9fŽºõ¾yõBuE¹½½´]g{GgEM¥´CXÞµ¬SG~¡(ÊË·M§î}5j¼QLêIDAT%Ç ‘sæØ6´óÍ«OÞ#‹¤îËŠèøa=®_μžuÖV" éTZt‡µ6ÁîÞʽx:C¥”Û;:IÛ‡Ñm{´fŽËÞŽ_°¨k÷„I'$¼³´±gŽuîûS½{}üáºwÞYvíú€ÿ·Æu“«cFŠš6#//¿}»v›6|FGÆÍû¿´u7é^QQûvíÞZ×È3GAYñmH¨©zpåâ™§G¿ RÔðý/µ±µ³w‰Dz½^¥¨ÑÐ[? ööÎb[;BˆV­R(ªè“ØÅÝ«²¼„É˼5ŒgÂ@âàlccWUyÿTƾáfÐñ"‘Xâè"‰õzZ)—88›òpq-q°±³ EzV¥”kض¥ªªªüûìŸO~¡¦²Ü¨ûùið3o^½Ðè„yˆÿ±[¥R—ß›>û-ÖîÏx}±Z)oÁ'yUeå¾_›v3G`Ö¿VþßVkTJ ÛFÙ¬¿ñ¨(+b}kÏ„o\»( ~BOé®gkíå«×ëè–hõêê2&=£ÝF…B”òjÖ‡0ÿé߯ÂZÓ´ëJPHZü/ë)½ËjPmÔ5IÕvvögŽÔët­½ü:vë£V)¢%æl<ÑT#Ð8ðn<¡oÙ}×ëuØxXÿ¯µ©.ßiÛÐ.Ž®D P«ä5•÷bžÞ1›YµlàÙ²¬ ÿ56Òé-Ë€µW@¯×ëuMvyȫȫv ­^Ë=uz¸àjÂh}àØìV Šõz]‹î;Ñj5b¡Šq´4 œ\JïØ;:µàn*««œ]Ù¶¼ØÙÚ]¹xÚÖÖöì‰ß[j÷5„õè»y´*Ì¿áæÑºýÊò2·V­ÍßÎßs„b#¶ñö ÌϹZSUE °…½( ¦ªª´èVÛÐ.Z“Ù"‘è‰n=jª*Õu õ­¦ÔµF¥ì=`˜V«6=úí:tþû©ûe%zB ˆ …½ô„º_V’{=«k~Zµ¹Ö»ø*xxñ¨TJµZu'÷š¼ºRßâ\–„ƒ“K`»'Zyú²=ÔÖ«Tªåe—ÏŸT«U-òÛÚÚuí5 0¸#Û½ J¥RVWWÞøûBåƒûú·¸P tqóèе§¯¿´Ö¯4@É© ˆmíÄ6v ±íks@¯×ëÔ*.Ïb¡Phkï Ù´àC¬×jÒð˜}ˆ#˜=ßÄÄ Žqˆ#@âG€8Ä Žq€Ç€ÿSó¢zâIEND®B`‚tuxguitar-src-1.2/TuxGuitar/share/help/images/tools/settings_skin.png0000644000175000017500000033631311273045225025522 0ustar julianjulian‰PNG  IHDRpbÈohdsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ 27R–o IDATxÚìÝwxEðÙÝÛ«¹’Þ{#’Ðz‘^*MéMAA@¥Š*" ¨ (Jùh"„IH!½—Kr)—\ßöý±pÆ„„ ”ßßÃs\fggggöî½ÙŠ•ç!ü;84€€ @@T*€€ ¨TêóÉÞÙÔÆ**R¿öÆ ¿ P7Oÿ!CGœ:}¢,¨ìé³|}¼¯E_Èʸ»tÉÛ{¾Ù×@fxÞüaMáÛßl¶dfe§gdªÕzžf¡PhogëãíàäèðÌkèâá›~W,׌ò ?þÕ×çΞ1}êk¢½³çÆ×nÙºC]¬n¼mË'­[…"„Μ=¿rÕ™™.Î. ßš7qü+°!@s'xæ5HLJ>}îBaa‘Éd2™L,ËrGI’±qñ666];GõìÞ…$ÉgXÉð°°Õ¬Ÿ6õuo¯ºSO>3oþ¢ÍŸ~øt˶ý{¿j^kØjï왞o«R!„ŒF£O@Ëâ‚,„PX›¨ysfØßÍÍ6A€€ú¯p·wÿÁ«×nTVVVVV £ÑHQÇq†á8.„B¡T*U(*•*$¤Å¼YSŸÚ8µ¼T›•¢«ªDuí3Ôš^V^¾uÛŽk×ožüý(2}¼½† {é½eK¬yjÔšÍký3&6nã'[®ß¸©PÈ?üàýýú^:ó l‹Ðtà.•+¼|ƒí]9Ë3Ûå{áâåë7n•——kµZ­Vk0Ìf3MÓ5*†aƒã8„PZZú™söïóꦭ(ËLmgïì& …!ƒ®ê^P´³{gñBßÀ–ÖÌÇŽzéåÑ*¥rîì,¿MDø}_swæìùy  ˆïÛoØDØ| é`Y¦¢´8)îšP$±Q(›n@-,RÿzìxUU•V«­ªª*))©®®fYV à8ŽÂ0Œ¢(ooo‡ââb–e…Bá¹?.†·nåææò¤«—žܺƒ“‹‡Ål²Ẍã^™0yάíÛµÑéõ;¿ø²Uh¨5³››ëoG 1†¡é7çÏiLùS§Ï^´ðM__Žãš©°4yp«vYi á‘=X†n¢5îN‚Þ`0 &“©´´´C‡½zõÊÍÍÝ¿¿^¯ÇqœeÙáǯX±B"‘üú믻wïÖëõf³9)9å)T}U¥½£‹Ùl²¶àk¯N\÷ц۷c…"açŽwñYÍü..ÎÇŽü4ôåÑ4Ã,zkþCË8°ÿ¤×¦fgçøûíܱ¶ZhŠ8N*WTkË…B‘ÉØTªV[Å0 MÓ•••ܼy³P(4™L ˜3gNAAŸŸßŠ+(Šš:u*A (ªªZ÷4Fú+‹ÙšÒ¯oï~}{×Íi=DêääxåÒùZ‰µŽO[ÿ|yØK/{ ¶Uhâp gY–ßuúðÌϤŠŠbYÖl6ÛÙÙmܸÑÑÑ‘ã8‘H4lذ•+W"„¦OŸÎ0Œ\.—Édo¼ñ†§§'?H}JUÄ0Äq°1@Ö˜\Ïf„Êq˲F£±S§N®®®¸páB·nݪcP¹§y¯HßàÐö& ÷Ý÷?Þ‰Ob8‚¦u¢çø/ŒP\<ÜìíUb{[é…ó'û¶„Ê.V›8ζ Â%ÈÄ1[ª:ÉެÆçåÛ_»økŸn!N*/7yÃ%³,G3L…Vg1\]} àù ¨8ÆõjQ< ¢“@€1Æ*DU)Œg‘Y#–: c:¢$q¤Eç,£këUâò«Û m=Ž y±æ²hξKÝbišaX–¢ÙÜü„øø‚¢ðÖ-_èÙ¿—!ô4€ç. æîu"2‘4 ±Õ"ª5ˆÒ!†FŒ Ĉce@æ*ÄÐÈPJŠí瀌b–Á¤t1º=M~@äQ«X‹ÅR .Xtô匌ŒW^yåæ7nÅth׺ÀóP¹ŠÜ£9;·,Ýà ¹ªª‘©1&„aˆ6"Ê€pâ8ÄXcB´!é‹‘HR]^\J¹ØTŒˆf QÝ5ò òKJJýüüX–Ý·o_qqñ™³g×¼ÿn€¿ô4€ç, b÷1Dì;³åúYºG'…JÁ šFˆC†0a0âÄ2ÃÎP:æÖõ"Ê‚°÷wÜ\Z×-·¸¤„$…¡¡¡Gމ-))¡(Êd2ýåXcî¯ üÏà,_{ŸÎ1ÜHEu÷ÖÆÔL KØ#Bˆ8ÑD¥G¢ˆ¦B"‰]\2æ®Ò;Ù™L •ø¿\·Ìü‚ÂSgÎß¾}{ß¾}—.]*,,¬ªªòòòZ·n]vv.t3€ço„ŠB)ú S×ÂÇ´L T–gæ8z#c ¢uˆ1#ŽE‡p"HDH‘Ô./‘–ì|L¼þ¨† ìb4ÛÚþUTNVÖ…S¿ç¨‹ lqQ¡Z­Æqœ ˆ¹s禥¥}óÍ7 ññ ‰­[…BgxÞ*G™bKœ/Üe&†§÷òL«pëmëä‚tEȤA…B8‰H%’Ø›ŒØÝ¸Kñeh×M7‘Ü.ÐÇ¢Óß{à Ã0Ç~ü>#)±03… EªTS&‹{ôè!‰¾þúëêêj÷nݺ©K  xªÞ '‘‰fØÕ¿«NºjèãO+Pu>â„0„áHì€D6q¿ü¶?Vüc,ædÏ*p3BX±º$80àÊÅ‹7/œI»s[åî‹KÚâ<[7™H$4W¯^eY¶¢¢|èKCÇŒ©×éìmŸò Ú;{¢:oû«¯M ­Pÿ!‹ÅRPXd±X8†ãæ›jûÃY~Æ=¿ ù‚LáIÓ,B'pı<½³|+*µ—._;}îÂé³BüÓÂ-K@€¿¿·»»LqP‰N/$+ldZ³K—™|_p´S‰Å"W¥,ÔÝÎÓÃÍh¡²S“ÓSî²£¡JÖ³ÿÜÕMzcM­‚ˆ'|ßÁõ>)..Yµry÷n]…$Ù"8h×Îí53Ø;{Ú;{:ºzwîöBôå+|"˲›·lh×ÉÙÝ7¼mÇM[¶±,ûÐIÑ—¯ö4ÔÃ'ÈÝ;pä˜ñçÎ_àÓ9ŽÛ±swû¨®.¾am¢¶lÛQë>Æiié.^¾-u:B(++ÛÞÙ3ªKχ.‘¯|­u©ùÞú¯V³ÔWU«¼üüð¶í=7~º¥’kµ@@E¡ôŒ¬ïøùü…KgÎþ‘“ëîîÞ²eKÇq‹ìØÙYIºh³2÷ ÇîiD‡„êÀ|i˜Å+Jn#«ª¬¸›”ضm»°ðð€Va¥PbS]Q–q7A­VÏ\¶rÞâ%­ÂZ?“¶;sö{¾¤¤ô¶Ý;‹:::¬\½öâ¥hŠ¢SÓÒ§Ïœûйƌ‰Ú±s—Ùlþìó/B“&Ž{è¤I¯MMº›ÜªUh·®B¤€¼½¦MA½¿f­V[¥ÓéΜ=?rÌøº }iÈ /Ï{{_Ý?€Úð}¼½B§þwÆ`0|´áÓÆ7K}Uåõíó¶ÍoÝŽ™>kžõ(x<©ËfX–*¿¨Ô•'•Wét:ƒÁÀŸÓËï§¥(Êb±˜L&ƒÁ ‰Žœ/EJÑc{T„X)A-lAnŽ…¢œ\ÝD›ÄÄ„ÊÊJ£ÑèîîŽã¸^¯¯®®Öje\Œ=bسj;w7·3§~[÷Ñ'SgÌ)++—ËmZ·jõй–¼ýË2?úyÇÎÝ.ÎÎK—,zsÞì‡Nš8þ•÷W¯½yë6†a‘Ú¯Zù®u8(‹¿úzo‹Ð‘XÙaöÌéuJÄôiSÞ}o•\nÓ­[—ÆTfëæ‹/›ôÚÔG {õUÕjô¨eååËW¬^¾bõÚÞ‡!àùð¤NJªÌ¼RõÎî?^¼u3!U­VWT”ôz“ÉÄAã8.H’ …A„`Ù²¥Á!-“£»tò-éj1éK**üCÂóóó“““u:@ puu•ËåŽŽŽ®®®>>Þï¾³Pð¸/iü!èfäÚõƒ^|yøÐ¿Üµ¶{xìá‰ìò5–¥™Î@$rÑ#{´þB›~îR©\$–ŠD"‚ 8Ž£iÚl6ëõ†êêêêêjµº(::Úh0Øy·òquT ±PåìUVV&‘HD"†af³¹¤¤Ä`0ØÛÛ[,­V›sëv,ô÷C—,~g9Žã“_­OÂã¨,KWüï §É§E–Ê|{Au·–ª‘½|tróó´Kmø˜ŠâXCŒÙbá÷ggg—«)޳dSëˆÖ ! …Ç‘$éàà ‹BF£Q­VWTTp§Õj«ªª®^»½Ø0š¦[†µ+,,ÚüÉÇ]»t†€'áñC5Tæ—G_R9K ƒˆ"«J(Ài¹‘Œ¹ÈÑqV’Q€±,GQ”ƒ½} —하4–ÃBåååùùy!¡¡"’t¨.T)« ˜D‚L&“B¡P(E™ÍfƒÁÀ0ŒN§‰D‹åN|‚V[¥T* /ëícnïÍ/ RÚ"S‘Ú,•‘&š•11F„‹¤¾S}¨¯"Ë4#É* ‚ð rr°ñÈ/È×Xhšñóóm×6"¬Cû+k\êЫ÷-s•!„a˜­­­Ùlæ8Îl6F“É$L&“T*ÍÊΉo } ๠¨ŒÉÌZŒ”cŒ—é1ΘͬÉO%ˆíº8ì‹ 0)D‹8D©Pp„ ªswæzœL&í߯§½‹ýõƒ»*íW²ÈåÄùž~^¡m2p%†UÙÚÚêt:‹ÅÂ0 EQ Ã0 C’¤Ùl.¯ÿÖ @s ¨˜DÊ dÑ,Z¤ˆ@F‚(ÛÂ=¥Â%^>Î6Â|¥È”ª)Ám\íEînaaÁ"‰X©ÅÜi9²ÏO,Æ¥J"¯ökÁ)<%XµˆÄqœeY–e9ŽÃqœ¢(þ †a8†CGxÞªPîL‹Df}5cÆh=MÈ B‚r”V–œµì€mñkeT1ëÛ>8¬-ÇÒ”…ÁA…:÷öõË6!í“…RN*g¤v©£­LfCàr™P(ä8®ººÚ`0~÷¯L&“H$B!  ày ¨…‹ (Øpóš\/ ­cE\ ÃD‘‹áj…y¸§½½˜,™˜<6ÍFÞÓbÔa1èþŒ¾™¬³3R‘P$§„®b‰­T¢ÛˆD"¥R)—Ëe2Ó%…B!—ËI’”ËåEÙ>ÉGˆÏ&  H‘ã QWnh‹YRãbDUs9NÈ&>nãnÊq';±&3¾´(—”ؘ**/œÉ-FNövR‰ØÆÆF¡P¨T*¹\.•JÅb1†a"‘!TVVFÓ´^¯·X,b±˜a˜-<== #<[Oäè£[ø ˜—»®ŒÖkXÆÌQ•£gq’Š—Jj’Ð\œSÑÅ·þК¨¬_.«0Häv*¥ÂÞÞÞÑÑÑÎÎN©TÊd2¡PÈßÉÝd2>}:%%EzŸH$rttŒŒlo#“AGxÞF¨!©ÜÑ{âô”UËÉbV¤À„ ŽC$©`H›G™¹Žöš\ûª,™@"K¸X‘œŽWëJÛH¤\.ç÷îZïŽDÓtuuuVVÖ¹sçîܹ#‹Åb±D"‘Ëå …ÂÖÖ¶Ï =¡<Ÿ!äÓiHV‹½U©i"̱¥öý‘Ü×Iÿ°èÏ’´ 9VXj×ÖÜ¢MÑODrÖug¿ÛIY>în±H `f2™hšÖét……… YYY4MóQV(ŠD"±X, ƒÂZ‡B/xnªHfßêíuɼ©ÉÏgQé@p‡Š™»'!dr,y"9F«XJ®µµ;šTªÖTçgeŠÅbëÍ~M&V1  …b±X …B¡PH’$A$Iöéý¼ O9޲˜)šâX!x¤6<^†ã)‰šY@EyEoÍ^7§(³PPõ%ÀÊDþÂB¦ÒfîÔ^¾P}99«¾-ÀÔez~`j6›M&ÐÇq’$E"Žãü£iH$â©B¡pìè];w|>ºÚdÔçædÆÅÜ*).‚ /'ì"Úvðòõ‹¥÷DÆ-O* òÕ jÕ¡lúÃÁ-xú]f© Pùéã©0W!‘ÙÎfoŠN­® I ÃpGa‡ßÇTI!I’^=òå¡ ÃÜÿíña˜m^h‹E­.¼~%zðð±^~A!Àx\–IKŠ=yì°ÂÖÞÓÓÖb15õ€Êý b9q\§îý2<ü“.Ÿ7¦^CùDU5ŽUÞU8Ç”séi&]•ÉF&æ!Û£T‚À B€B’ø{Ù;q`ÿ¾Zm†a8~/vï®IXÍàÚ,â«…2ÇܺúâˆqÞ~ÁDz [?<^!af³ùòÅ3ã&ÏAO& >¶ËfX–¥i†fš¦)Š2›MFƒ±Z§S«‹å6ŠnCFµšôŽxà8*Ôã®À¯ÓäWUq4’He$) EB¡ˆ$ï­A( …„@„ ÄR¨SÁ*uKI¬:fï‰_–––êt:mUUuµNo0˜Œ&‹ÙLQMÓ4Ã0 Ë?ɼéãX¶¼¤ÄÝÛŸe–e‡ {™ã8x…Wx…Wx}¼¯®ž>åÅÅüÞÐ'{,öbY–¢iŽeù°JÑMÑÊb1[h†1ŒÙéw,Y‡±Ê„Ò*ª¬+×#­ž-3•f‰YXœCøßG–! Ç€À$$#ÂÍvb½‹Üä(Gv6„½ æ¢ÂªÅ¡¬×ÿíH'¡ …„@@à„@@ðcVAðÏ^}$>ûc¡¯®üîÛÝ‹ÞÛÈ0Ôð—Gùùü–€úÄ];סû‹Ùð¨3VWi¿Ü¾þÍ¥kõUðH•ÆG„dz˗¢i†¦iš¡š²PÊb6™&“ÅbÉÉH°+?ÒOÒ’LÁ¹¨b’#ÎBãŽ8èTmftÕ&BkĪL¤s$ÇqˆÖ9‰+URN%åä"†åØrRHp9î¬ÂHU™8_y’B»:ùbÌw¢“‹»ÅBR"Z$’¤€eI€ ‚æ8ëÑÙ¦ Çp„8Že>ô#×LÖðl÷íÕJáŸrÄÆF>Þl뢆©¯œõë>ܶý³ÂÂ"]U9|¤Ïj„*ŠÆŒ5göL>Xnß¶eûgŸ …¢šßŸ#G=ôÓAŽ{²÷*üËõÁ0 ÇÆá‡0'Ë_°B EŒˆ•±,ð,wÿRêy,c IDAT†¦(†eï]ÜÂye–e¬W¯Þÿa½• ø ‰„€÷N7ðÿq/Ëý‹QqdžáŽa¨¹Üí¿¿[Ÿïõú²5öÓ»wEY>øpÝ’¥ï~ýå.¥JyáŸ={ö@ýñÇ•­ªU«Ðõmˆ‰»|é‚R©X¸hÉò÷VnÞô _ÈÅ‹—Ξ>¥T)·nÝ>gÞ›þq!´zÍZF“”ÇqÜ´³¬KܰñÓúʹyóÖåKàƒ x†¤Rɼ¹³k|â5ÿäúk„úÃÁ¿ºlÆù7üî_ŽC–åÓ9Ž¿ †ãhrtù,,ŸˆbY®Î¸ a÷Bã½Û>à8v܉[Sðûá!T+ŽÖ ¥«Oÿ²™_˜¾`%e6ÖL—)ìôõþ FcHhxNf껾Œ¾|ùÛo¾FM|õµn]»N›:%$4ü×£‡B%%¥Q»f¥§ðeæçdð{B F£«»·¶¼!Ø"ôäñcþ~~¡´ôŒˆ¶øE7PNzJ’«« |˜OYbLt‡îC ÕpéËÈѯúñûꪪŸöïœ:yS¼l¦Vˆâ¯ø´QDÖ<µB¯u$Ê!ÕÚ±Y÷\˜ûK©ï‡ÎÚ#Q¬þYšî•ã8Ž5fÜO?|W÷' ïÚµëËW®ºwGo0 û;ŠÇŒ¹rÕFÃqÜé3ç¶mÙÄq\aQQ»ÈNÖ_3|N¾•JÅ¿—ˆÅ4Móï‹‹K¼½¼ø÷>Þ^ÖE7PŽ‹‹3œ¸xV¬ß?£ñ«¯öÌž5ƒßå˲ìg;vN™òšT"±fþé‡ïø½ x?Ë·VÜjŽwÓ}öõþ¥Q5£i]'¿¾îÃ5}ûô–Ëå:ÎÕÃ!¤T*ôï·ÿÀ÷Ç Ð_©T"„\œÏ9åææÚÈ 8;;åääúùù"„rrr­éZeú‹C5\åï.³U©Z¶ êܵ[×®ÖôG-ž>[[Û_¶U)mUÊ_®{c‡QcÇÕú²}"C£Çr/ßçÌÓ?)éÔo‡&M_l6êG¿2áÇï÷C@}’ã¯uè>¤º¢´VzEE\ë›±ººêø‘}§¿Ý¤ïåÛÙ;{6£ß 8Žq˲ÌÁ{Y– 4¬îW¥R©x`:Bhì¸I¿û–e™fpRRMñ ‰®ûøêµë ÖºÕì™Ó`?áÃ*†sDzÌ+&¿ÿh¨O@H›ŠÒ‚Gšå»ý{X–yÒ7ÇÌE'§¤Ž;aØKCân]ËJK\ýþòŸîŒ –eX†9°÷«±ã_e^á^á^ï+MSÿàžðUþx÷‹N™6«KçN¯OžXwÃ0k×oØà N¯Ø¿ïæO?æobgïì¹ñãµ[¶îP«[oÛòIëV¡ çÿ`õŠ;w©5êÜìœÜw—¿1ú2MQ]»vÞ±mïž³Ë÷)C5è«c¯_ m£²ƒ»À“R˜—“—“Ö{ÈX£îž¦Õøˆð˜G¨—.]~qðÀNÚ´e{lÜógN¤$ƈ%âUkÖZ'EG_9ñÛ‘ÌÔÄÁƒ,X¸ä¡ùoÝŠ9æ„F‹7aòŒéSR“b“cüý—¯XÝìú˜þÁ¡ñ1WËËJXÄaü¢àüƒðþ=¦,âÊËJ2Rã[·ëL[LÍc„êäæS”—Á©í=ùD~í:úa@€?B¨´TÓ­Wßä„>[zJ¼­J…2>-‹ ²ΟwÓÅŹîÒFcD»N)I±Ík„Šg6›tºª´„˜ªÊr–ƒŒÀã„c¸BeÖÞÕÝÇdÐ=¡ˆð˜OJ²U©ÊË+¬qÔV‹ÔêÎÝ{£7±«9ÿF"‘Ð4ýÐü5£éõ7W­Y{'>Ñpÿn|Ͱ¯1±Xj£°õðjúÏB€æˆeYÆb~ÔhúHs@íÔ)êÄ©ÿMš0®î$g'§SÇiüíÔ™ÿõ©3׬ZÑ»WO¹ÜF§Óû„4Çžæ8Ž2›(³ 6zh®ãàÇ[Ü¢·æ¯]¿áÐÏG««uŠŠ¾|Õ:éµÉ,Z’•CÓtÒÝä7¦Íj¸¨Fæ7Mb‘H$åäæ-X¸zÀóP[…¶<ðí×ûlÖÎ/0tÝG|û5?iþÜÙ#; 1ÖÃ'pÚŒ9ƒë9wɪ‘ù·nÞ¸|Å*OŸ ¡ÃGGEv€ðLÀ­੟” ÙG8x  P¨T@@  P¨€€ @@  P€ÈÞÙµ™}qÛ;{öî?¸V ´ D5TðÈbcïœ:}Ú  ‚%""ì£ Ÿ>pÒÎ]_Ú;{:ºz‡´n»`á’êj]Í,ÿÏÍÓ¿{¯~­ÛD:¹ù„†·?~⟇ã¸;w·êêâáÖ&j˶Ç5ëqpvNîø‰¯{ùµpóôýÊDF“˜Ô.²‹u½8ŽkÙ%1é.Ã0k>\Ü2ÂÝ;ði³tº¿ÚmÏÞ}í:¹xøöì= >!‘O7[,sæ¿åáÔ¢U›mŸí´.±r>ÿbwë6‘.^°4ï¾³8..þä©Óu'•””ž?}ŠOHÒëõü^ÍòŠŠšärë{…B^«ÌÂ"5B¨}ÇnÖ”¼ü‚fÝJ×oÜ\µfíøDƒÁ€Â0 !4rÄð5k×—•—swîü›6~„*R«;wïâ8ŽeY>'¦!‰DBÓ´uO€—×½}àÞÞíÅm ˆ¦¨MQ§Ž‘/ôêQëHê”i3‹‹K¾Û¿ç…ž=†v÷´,l w7לܼä„GG‡ç£•^Ÿ:sͪ½{õ”Ëmt:½O@BH©TôëÓûûƒ?q׿o¥Rrvr:uüWW—F–ìä䘛›ÇPssÿ?j9€ÿ 8†Úô©ï,NHLª™Â0,BH!W˜Í¦5~ô¨NŸ6!ôþšµZm•N§;söüÈ1ãùIÍô¤$“Ñ$‰DbQNnÞ‚…‹­éãÇùvÿwû|?~Ü>åµÉ,Z’•CÓtÒÝä7¦Íj¸äÇ._±ZSV¦Ñh–½÷¾5ýQË@@Ï^DDØàAj¦ìú|kP`À‹ÃFzû‡ìÜõå#Ô©S>ݸ>>>¡EhD«ˆ»¿Ú3{æôæÕ&5OfFmݼqùŠUž>AC‡ŽŠì`ÍÖ½[WÊb¡,–n]»ð)óçÎîÙaøˆ±>ÓfÌ[K³ø/*R/_±º}Çn®~~A¡cÆMºðçEèõ±¹Ÿ&–HEb‰X"Ay#.ú€wâÔi½^Òëõ'N†±zcú,_ïkѲ2î.]òöžoöA›ü3OóÆÝþ¼Ø³Ï@±Xüݾ=¹Y©×¯ü9fôÈ%ËV¼·r5t€€úxÜHȉĤPH’"‘X—{}ï9tèB(¬u+ëûC­ZëŽSùGWïÎÝ^ˆ¾|…OdYvó–íí:9»û†·í¸iË6–ekæ¯ù8—&5ö½u;fñ¢ŽŽ"¡°KçŽìåÓ³srÇO|Ý˯…›§ÿèW&j4>ýÌÙó]º÷vñðh×ißïùDŠ¢—¯XîúÙ绬…ïÙ»/¢]'ßž½Ä'$6\rbcï|°öãŽ]{5P‡§_a{gÏÏ¿ØÝºM¤ƒ‹WÍm†a˜5®náîøÆ´Y:Κÿ“M[ý‚BCZ·=yêôæ-Û‚[‡´nkY60cÍåæåO›1÷›¯¾X¾lqP`I ìí_öÒÙS¿Ý¸yûÀw?4°Žf³ùÍ·û„ø„,X¸Äl67²nöΞ[·ÚÆÃ'hî› ÍËÇåÖ?Øì]A{gÏv‘]¬$æ8®]d—Ĥ»õÍX“Ùb™3ÿ-Ÿ ­Úlûl§5½¾y;víõÁÚãââáëꃢi\ ÂH¡HL‚ „BQe•9=»º¡¼¢âܤà‹Ï·qöüùŠÊJëT Ãm”çÕyŒ7&73yÏ—;SRÓæ/x›Oܲí³5k?6tHNÆÝ—^ôÁÚ·nÛQs®É“&äf&7Á§…‡…­þ`}vNn­ôq&Ϙ>%5)6916ÀßùŠ{CŸYsÞ|gñœ̔ß~=tóæm>ñ£ Ÿ&§¤üqödÌ+……EÖB¢£¯œøíHfjâàA,\Òpɵ0 }ùêÒå+ÃÚDMŸ=ãØÏ·on Ϥ·nÅœ?sB£þ[ëmÚ²=6îÎù3'RcÄñª5k­“J5š„Øï.].Š!½#›T£<ýÇ·íÙ»oÑâeúõ=°ïëѯL<{îO6¬›-‹ ²(¹¦ù Þ>yê´›»ÛA† Xsêëðô+lïì™wÓÅÅÙ:;¿µD´ëtè‡ýþ¡ÒRM·^}“bj–o¶XÜ<ý­ï½|ƒù50cÍ…µ‰úýØaOn=ûNš0nü¸1¾ûáwW”çQíåT”ŸYß:††·?vä'??_„PFFæÐcbo4¦nöΞ7¯^ôõõAeff 1&>æz͵®ÕlöƬàW_ï½|õÚW»v „^Ÿ:³KçNS^›Tߌ5µŠèpìÈO| 322#;÷h¸;¬’SRûýÄo¿Ÿ(*Rèßw˦ ºšfDxz#Ôôì‚ ­‘$…8Žó£.‚BQbzÑhþ¯ïï=|!4bÄ0„ÐèQ#¬)ÿŒ«« Bˆ$ü.©{a©¸!äà`rtt@©Õû²n’Ñ!äââ¼eӆĸ›·oD{z¸O™:‹O¿~ãæà—^öô ¶wöôð *+/çÓ÷îÙuþ?{¼Ð¿]d—“ÿ»w4º¸¸ÄÛÛ«ná|pBI$š¦.¹&q! C†ÕÝ…ðÀ:<“ [ƒ\MEjuçî½Ü|]½[´j£Ñ”Õ*_$Ö|o]P3Ö\PIi‰«‹ B(%5mÂø±R©tü¸1ü¤ÜÜ\ggçÖ±´TcMôöö*-Õ4²n!//Oë›’’Ò†·«6{cVpäˆágÏ/+/×”•;ÿÇÈ—‡5<ã_ÍRRj­aÍè¼Ø}Ö 4MOï:Ô»iy2™´[[ÿ뉅Žc†I EbÉÍø´n‘­©´3obvâÜUÇqœÀ0ŒC¨GTk· ?¯æÕù×®ßDM>{êôÙ|âÕk7ò <ÜÝù]‹,Ëâ8^T¤þÇKqrr,,,ÒhÊœœùO,ÿ•׌ØÛÙ½³x¡o`KþÏ×§Î\³jEï^=årNï§·‰?°ïkŽãΜ=?oÁ¢ñ}BÎÎN99¹µCõ©¯äš¶nÚÈ0ÌÕk×ý~bäèñR™tð /V_žm…krvr:uüþ‡×#iäŒööö…EÞ^žA<ôʘQüqÓ¬ìœùo½=wöŒ{¥=hrsóøa\NN.ÿ°‘¬3æååó¿BÀh4J$þØŠ5󃛽+¨T*úõéýýÁŸ8Žëß·R©häŒNNŽÖæææ=´Uccï;~â·ßO˜Œ¦Aƒú°zEǨH‚ n5YOi„ZVYs7«u gˆŸ«˜D Ms‡a˜€$E"qBJnã‹:}{éºÝ×bSœì6®˜ýñò™£‡öVÙ9Ø98Ŧä8záÀÏÍìÙC‡r÷ò°—ø£¡eÅy/{‰ã¸Ã?ÿ‚òñöBú߃ÁðцOkΨPÈBu.>ИQ#B;vî2›ÍŸ}þBhÒÄqõ~!6¥“’^™09úòU³Ù\V^þéæm­BCùt“Ñ$‰DbQNnÞ‚…‹­ù§NŸ’šFÑ4Çq }ï˜ÓØÑ#—,{¯°°H«­z÷½U /±¾’k!¢KçNë?\}'æôtÆœù Ôá™WØêµÉ,Z’•CÓtÒÝä7¦Íjd_4rÆÝ»ý|ä(BèÓë·¶30$\[U%‹§Ïœûê¤ S^µu>ô¥eッÑh4ÍÒå+_öRã7•å+VkÊÊ4eeï¾·Š8"„BCC¶ïøÂh4©¾½´áfoä Ž7æÛýßí;ð½uä]ߌ5?G#†½WCfÙ{ï?´UùÍé‹Ï¶ÆÝ¾ºîƒU]:w‚h !„“³qoì‰ò÷°£iŠß‰ã)(6!9«1å|ùýñèÛ©*;‡–Áþ­Zøò‰mCý»´oi#WªlììrŠ*œ¸ÔL÷÷ÞûàfMߺycP`À¤×¦zú[ÏEä½½pR©hÙ¥1ÁoÉÛoÍŸ;ëÐÏG=}ƒþòÛÒ%‹Þœ7»Y´Ïk¯N\÷Ñ߀–í"»$&ÞÝýÅg÷ƈ›7._±ÊÓ'hèðÑQ‘¬ùì?鵩ž>A«Ö¬Ý¹c+Ÿ¸xÑ[AÝ{õkÙÙÃíá%ÖWrÚD„¿·lÉÕKç¨CÓ©ðü¹³;Fv>b¬‡Oà´sØÈ¾häŒ æÍþ|ç—±±w";´¿u=:/+eÑ[ó rÒþwâ×Q#†[³=p—/[ìèèÐ.ª[»¨n..Îï.]ÜøM%*ªC—î}"Úu²µ³]ºdŸ¸ù“Ÿ8åÐràáݺvi¸Ù¹‚Ý»u¥,Êb±ؘ—½ó¶R¥ oÛ±K¾]:wzh«^½tþ½eKø} Yx'%æ-{Žz¸9OÖ!d2S{ŽDËä €ä8ަ(]µV)Á& ïÕp9\‰½“n#W “É8 KhË o~Òõ;鱩ÅB‘ˆ¡i£A§­(Ÿ1~À?¾¯áÓ?) €çÌñ§Þ|kñôiS^>ÔÃݽ´´ô—c¿]»~󛯾xBK¬uòKÓ:))>5‹¢ÙÎmƒù?Å"2ÈÛ‘¦(~¯/Nà¤PT¤©*(zÈÕ~yEå6r…ÌF.‘Ê„BÑå˜dë$R@p,Kà„H,‘Hm$2›¢’2ØxV ìâ·#YÙÙ/é騫ï èËW'ŽZ<ÇžÆIIWn&Ù©ä~^›îï嘞_N’BB Àq‚$I‘X“”éîêÐÐ/P;eµ¹J BAHÅä_Ó8–ãX„Žã„@ ŠÌz€gÈßßoû–O¡ÀÇ¡¦ghõæŽm[ÔLôqwRÉ… sÿÔ$)‰Ós‹¾~fPÏvÁ>Nf³Ñl6¹8Èöjg”[T†á÷ÖÃ0Ç­þ `/xþG¨·âÓ¤RqË€Ú—²´ðq¹ž˜/A`8N …F#ùÐëgzw íý÷”?®Ä^¸–(WÚ*”*„Ý ¨èA·šëµ¬²:5[ݾU D,¬5)Ø×àü¹¾†P$Ž”[ûþy=~Ýgÿ¼q7¢UPÿná†câ(€çq„z;>M,–ÜNʹ“b6išFˆÃ0L(Ëdr…J"¸7¦$P(ÒtÙþ>î ›ž]ðûÙë:%ˆ¢Zûöï‘–Ïq,ÜCÀsPFó”\R(&ÇqIrüãM0ŒÀ )D±,‹sW-IŠD’Ë1© ÔŸOü™š/‘Êd6 /§þÝ#B,Ë0 ñÀsPoÜI¡nÔàö^õŸ»{üR’Fk"†aAE¢"MYYeµ½JþÀü_<¡.׫ì„BÃ0ÝÚÝ;׉a–a`„ àYy‚ÇPc3•6¯¯„ñt’S ?rÅq‚$…b±$&>í™ÿ¸W\aPÚÚÉlRèçá RHïM³ÞxžêõØä*½)2"°ál­ƒ<K1 c½~F(ǧå×½~Æ`4ßLÈ+”R©P(Bˆ³WI­S!š6 Iݘ÷ÙúhçS}ßÚfêõ©37|²ú€ç' Æ$eʤ’ÿ‡·t³ÞÚÃq’b8y³Î µ°XƒáB±DJ’B ÃX–S—Öx7Âð¿_*ÓŒÎ÷íÚ£½³§õR¡“ÿ;mïìÙ­g_Ø@ù½«Ö¬õ õnµæÃõÜÁÿhhøwCyEÅ×{¾]»æ}þϳçþ6b¬›W@@pë³æi4š†W_ºuÑü¿>饾êÕW‡ÆÌ[_}>\½r÷—{´Z¸q&ÏE@½—\Vi°UÚÔ½Z¦®@Êbæ÷úÞ;5I,¹‘QkŠc)„Ãq„a8ާç–dæ"„’³nħcø½Ëf0„8¡Õ›KŒ1!tøðQkÊ¡CG¬éÿÿ›æ»îÝwàò•k—ÿ<}áì¥è+û¿;øÏÖñ‡½8d³³ÿ玻æÌšžv7îjôy…BþÆô9 /®¾të3‚ÊŠó¾ùê‹W'Žo|õê«Ccæ­¯>®®.ƒöÿéÐÏðí@³¨e•UÞL‹%„ QO²UÈl•†eõú‘Ç…—n&ÖÌæêü×±X>îŠÅ’ŸN^[µùÀ•Ø”ˆ–~Ö‡Ù{åV|s¨Ã0 ;qê´^¯Géõú“ÿ;ƒa؈—‡r·cçîöQ]]<|ÃÚDmÙ¶£¾B(úòÕþƒ†zø¹{Ž3þÜù 5sòïY–ݼe{D»NÎî¾ám;nÚ²åO½þ{Ž®Þ»½}ùJÝž¾ƒ?Z¾l±‹‹³‹‹óòe‹¿?øÓ?+ç§Ï ÐÏúçá¿ëÓ»—L&sppXµrùõë7^\cª±uûç3¦½Ñø*ÕW‡Ù,C_Rs‡ YÔk1IßýrˆÅRY…Öüû¹E¥ Ï’”–[¥3 ޳ÞäA@’b©,ænî© }¿HÄÂ6!^ Cß?ƒ '…B±XÕ&dêØaÁÞ2AÓB …ý{Fvj׺é÷‡»{Td{£Ñøû‰S¡ßŸ4£:x¸»oßñÅ{+WGEEf¥%7fõ˜ÀÅ/ IDATëvìÜ]sÞÉ“&äf&ó#˜i3çܼu{÷Îí)ño½9o÷W{ê.k˶ÏÖ¬ýhØÐ!9w_zqÐk?ÞºmGÍ ãÇÉÍLÞóåΔԴù Þn 퓜’ο KNIùgå$%Ý {ð}¸þ¸p±}ûv /î¡Õ8yêt‹Aÿà©Ýuëð/›%<¼u|B|»ÐŒêÎoùýÜ £™H ! Çî¤ä|¾ÿ÷…«¶G߸S7ÿ‚•[–®Û}äÔUƒÁl±X,f“Ùd´˜M4E!„H¡ðZ\úâvjʵ|þní[D¹ z“Ñ`1›Ú…xŽÜq@¶!±ˆìÓ±¥›ƒÌd4˜Í&‘€Ð5´K»æÒ ÷öúþ|!tèç£Ö”¯÷ìE-Z0O"‘ðCŸ¯¾þ¦æŒË–¾-“Éø÷:^ `VªÑtîõýþoê.蛽B³fL‹Å³gNG}óíš–.^$“Éú÷ë‹j<ºüÙî4Öë 2Ù½Ðlld:þŸ•S©ÕªTªºéñ ‰ï¾÷þ¦ë^ÜC«ñɦ­sgÏügu«U‡Ù,J…B«­„o7ž²ÇyêŒIC)ÿ¦Uóuí[ù¶oåûÀIÎŽÊþŽÊfÚ C_²ôÝ\¸˜œ’záÏK$)úÒ„Pa‘!Ô¾c7kμü‚š3ÚÛÙý\ßY´úƒõã'½Žòõñ^µrùàAj-H]\Œrp°G9:: „ŠÔêšøI P“¹I&“êõ¹Ü†ÿÑ`c#ûg娔ʪêj;[Ûš‰Ñ—¯Ìš³`ÏW;ýýý^\ÃÕ8sö¼“£cP`À_]s'ùC‹Ô­Ccæm >Úª*¥Rßn4ã*øÇìlm_èÙ“¦éé3çÒ4Ý»W/[• !äîæŠJNˆ±žöRZTï펧O’‘úä±Ë—feç¼ýλuó899"„4š2ë««‹KoœÁÁ±qqüû¸;wZÿ³rZ¶ ¹s'¡fÊ‘_ŽM›9wï×»Ú¶‰xèâ®ÆÆO·Ì›û·á©µË®ÕëИy¨Ï; ­[µ„Pÿ£FŽŽJHL²¾GMŸ6!ôþšµZm•N§;söüÈ1ãë+aÒkS“î&·jÚ­kg„) ëæ3j$BhÇÎ]f³ù³Ï¿@Mš8î¡u{¶'%=âÃuÔêbµºøÃu^;ªÖ0®‘úõ}á×c¿[ÿܱs÷û«>q÷±(*R¿öÆ ¿ P7Oÿ!CGœ:}¾ƒX÷&Þ,µnM TðD”åÄÇ\Ÿ5cÚ—_ïí3`ˆ¦¬ìI/ñ?9üi>rüé³|}¼¯E_Èʸ»tÉÛ{¾Ùg­l3Íô€€ ž¥R1~ܘ•Ë—fee¯[¿‘Oä8nÇÎÝí£ººxø†µ‰Ú²m‡õÑßÑ—¯ö4ÔÃ'ÈÝ;pä˜ñçÎ_°uà»zöàæéß*¢Ã·û¿³4­ÿj =kNòð zó­ÅŠª5¤xà{–e7oÙÑ®“³»oxÛŽ›¶lcY¶n™Ž®Þ»½}ùÊ£ŽzoÝŽY¼h££ƒH(ìÒ¹ãÁ{ëŽu>Ù´Õ/(4¤uÛ“§NoÞ²= ¸uHë¶þ¼hͰuûçÁ¡m<|‚æ¾¹ðÿì}wœU½ø)Sn¯»÷nïÙôÞH ]š( ‚¢"Êã§Ï."TÔ§ïÙQTìXð! H¤÷²ÙÞwïÞ½{÷¶)çœß³;™Ü2{“€/‰ó…O>wgΜ9m¾½H²œõ BÈ׿ùíé³TÖNûðGîL$æCš²}¡™LæÎÿ÷ɪºæsþèŸêSèèìºù–Ö4̨¨n|÷{o‰D"úÈùÍï,^QVUáÅ—íÛ@ŸxÞÌ{+·“N¹˜SÎ}ÉykŽkÕT %e5ƒ€––cKÎ[ca‘ãÌ ¹ËµÿÀÁÅËVéßclñ²U2™fÞ×I²|×'>¥mÐòД WÿôgÏ]¸¬¤¬&kŠ¢~éË÷5ÏœßÐ<û'?ýùDÿ’ôŸŸú\]Ó̺¦™Ÿüôç%IÊzªP“Y`T ÌàW]xöù´?xðg÷~å¾åË—µ·¼ù¦ïûÆ·|èaíÖG>v×ö;~èÖ#û>õŸø—h×þÅ#ÿäg*ÊË÷ì|ãÕ—Ÿ;xè°Þùn}_WÛáB‚½½·³å¶÷¿ïwxô{ÿý£HQH*ýáòõû¿sí5Wu¶ºúW|ãþÿúÑOÈÏ~óM7vµ~ä9Úò‰O~ödWcþ¼y÷}ãÛ]fÂ}$²÷¶{îþÜí½kh8²w×÷Üý¹/}ù>½ÁÖ×ߨüê »·oŽ|û;ßËzüû?|`÷ž½^üç‘»lvÛ×¾~¿ù¦l_¨Áýßþn<ß½cë¦W_|ãmzû›Þ÷Þñ¡£w>°»©±Ñ8òÍ›·þó·=på—}òÓŸ×w$ïv何ۃùÌsʹ¯»xí¦-[ÿ|îA4ýÆÍ[ׯ»èÆ™r—kÎìY¯wã¦ÍZƒ×6nòú¼³gÍ4mÞ×}ëÛ߉îÞ¾eã†ôÞÌg½cÇ® /þ32}>¿óÝÿ9|äÈ+/=»kÛÖ¾¾~íâ7¿õ_ƒƒÛ_߸mëÆžÞÞû¿ýݬ§Lz‘gXåÛòÀ¿¾|[V©KUUÕõ<Ï ô´.YÑÕݳýõõõuccñ†æÙµ5Õ;·mÔ6ÎÌd2¿ùÕÏgÏžY]U¥w¸héÊήîíolª¯«ÍzËÑC{‚@î{µß÷î‡Cƒ³ç/©¬¨Ø»ë ¯È¨ñÊüEçõôöÚ·3*Õ¬®ªÚ½c«ÞlÿîmååeŠ¢–UÕCO# ~ë;ß{ñå ‰Dòâ‹.üú×î­¬¨Ð:×G~ìÈ>¿Ï'ÉrEu£þ»¦~ú`o»Ö@[=@[[û5ï¼qß®7=,X¼â±?ÿ¾©©0<Y³výáý»L†T¨ý”ÎY°ôOü­®¶ÐÞÞ±ä¼5¹`:^°xÅ‘ƒ»SÓ®×5ÍÒgTèËͺU¨“)˜/æ”kõâKþò׿ýü¡n¼éÖY3g9ÒòÇß?ò¡ÜyÓ{Þ}ñEw­˜qšL-k¹~ù«ßlyý ­ØÎoÿت•+>tÛ­SN3ëus,}êñ¿jG¥µµmÙÊ Ì74®>°g»Va7 æ.\ö÷ÇþÔØØ`¼8{þ’§ÿkCC½Öÿ5ï¼qÿîmÆ©™4(ô" Ί`•o;ad$ ())ÑþìëÐ4izƒîž^íÇ¿ð™û¾ñí›oý  ¾®ök_ùÒ•W\èíëÔTWåA¸“Ô4/”––èÿ Eð%%AýÁþcƒòò2Ïsš.îdW£¬,üÃï0þèÇ~èö;Ÿ}úïYm4Ì( ‚ñ·ªªzƒššjýÇÐÐpÖãý+Ï¿X¥Bh>¤)Ûj044\]U©ý®6ìΛ۶íë÷ïÝw •JŒjÓØív㌊‡¼=˜LÁ|1§œûêU+¾ðÅ{“Éäö;þÓ/[•N§wîÜõà¿ ãÌ y—ë†w^÷õû¿=2Æ^ÞðÊ÷¿÷b¦™õº¡¡aý¨ÔÖֳㅈÜàే é8¢_¬­­ŽßÀ¢¦–Ê÷t…¶Oxò©§—®_§ýYYQ8¼—¦"ìîïÔnÝqû‡Zì{áÙ§¾ü¥»Û;:?û…{Œtu÷œì«µ8„C¡b …JõG´ËËÊÞ–#|ásŸÞ½gÏ)<ÛÕ5!Ùtw÷hTßáPhώׇú:†û;G»§”¡§l_¨Aii‰Î uv烷ìúíÀží‘®Žc‡Ní8Y8Ù)ÿ Ífkh¨ÿů~³pÁ|¯×3þÜŸÿâ‘ææi¢(¾UƒÏ»\^¯ç’u?ú§¿>ú§¿^º~×ë9…i†B¥úQÑœÚr…áÎ;Eii‰Þmgg—ƆžT þ­ ªópRÿñÑ¿Ü÷Ío×××Ýý…ÏLPÍ|ðÕ¯ß?6O$/¾´á†oÖnÝzÛíž3göšÕ+<Çk×?vÇí€{¾ôÕááÈh,vïWî+r<øP&“ùÉOx÷»Þ©]ôxÜ€BVÌßuàÁ‡~.I’öà­·ÜT ÃTäxïû>°yËë’$D£ÿóƒÏ™=ûöK_¾/22¹çÞ¯ÝpýµYwoûÀû>ù™Ï·wtªªzðÐáäNóSZ¨ý” ®¿öê{¿rßH4: ¥™tÆ&Š¢Mììêþä§?7åt¼^æøsR·Nj §ó຋ÖþàG¬½ðÀÚ /øÁXwÑÚSg^(´\7ßtãoÿÇßýáÑ›oºñÔ¦ùÎë®™8*‘Èïýêé,×{Þ}Ãç¿xo__ÿØXüž{¿¦]¼îš«¿xïW#‘H$¹ûK_¹þÚ«³žš²…<ÿ­ j¡˜ r¡¤¬föü%?þÉO?tÛ­/>û’`PCÿç{ßÞ·oÿŒÙ æ,Xúð/ùݡݺåæ÷~õ¾ûëg¾ãÚw-[ºäáŸ= ]¿ý÷ýðûßííë›·pÙš ×77O+r >ôpeí´_>òÛ›oºñ³ŸùOíâg?ýI¯×³xÙª¼_òç?û©Oü¿;ûß¿W×Oÿûÿ¸ûóŸùÏÿÇ[¸,·½ÿ–o}ç»õM³/[uàÀ¡‡ö“Sèdùò¥«Î_·`ñ À÷ç?“u÷ÿï?Î[¶ôºw¾§ªnÚG>zוW^nÞÛ”í 5øâ>ër:ç-\¾rÍÅK–,ÔÔà€ýà{_úòת뚯¹îÝË—-r:wÝùÑ‹.¹2ïv˜Ü:)ŸÔƒë.^_xÁÀ…¬‰ÇÇ×]¼öÔÆ™ -×ùkV+²¬ÈòšÕ«Nmš_üÂg½>ïüEç­º`ýª•+Ng¹>÷™O5O›vþÚK-[YUU1ÁØ}ñs¥¥%‹—¯Y¼|MYYøž»³™§)Xp&ÃÛî”TVUßqìÍf+ÄaµÙ¿lÅù[7oÐl{Š¢Î™¿dók/NŸ½P!äþo÷÷øS"™¼üÒõ?øŸÿr¹\€_Úð•¯}£µ­­,\öéO}ü–›ßûVù_ï”t&@®çѹ4µS›×)?X ´´»ñ¦[5ç2 ,°àŒ…â)ÂÛ.¡æy0:Íû|Þë®»ú·¿ûÃÄÐ7oY´hî ;¬ßy×~ásŸîl;ò'Û¾}§µë¼åðvPÓ{îýZ,6644|ïW¿~Åå—Y‹lç ¼íõ7¿úy2™¼òêëkg~ðöõöõå¶ùØ·ÿú7Pðô3Ͼë†ëwÿ‡?}çþ¯WT”»\®¯|é‹O=ýOíºÍf‰ŒTUVj^ XpæCMMÕ²ç/9o×ã¹ûóŸ¶Ä Îø×Å¡j1o¼¹]‹yÈR¦Ýöá^uåå×_{õy«×¾úÒ³6›Mo®¬×¼øt‡uÍÅn×î=ßûï¾¹m»Çãþæ7¾zÙ%ëÿõ¾X`ç6œ‰q¨ZÌCý´YyïÞuçwßó•êªÊ¥Ke\áÐsÏ<¡Å2aá‚ùøÝ¯c/¾´áãŸüÌeûÖ[oX`Áÿ¼í*ßB1YNó‹-äyî÷çÆÉPãÂk‡õÛïø#G[UeŒ•X{iX`Á¹LP Å<ä:ÍßuçGÛ;:®êrX¿üòKo½íöêºæ¯}ýþ‡ü‘µ—X`ü”Ë÷׿ý}gg×WîýâÿùH,ªX`'KΔ\¾ñøøOö‹Çÿú¨µyX`œpFÔ`¸!ô­o|­¢¢ÜÚ ,°À ,‚zŠ`•³À ,°àl«À¸X`XÕ ,°À ,‚jX`AµÀ ,°À ,‚jX`AµÀ ,°À‹ Z`X`Á9œµÿçðÃ_þ¯µX`§ ŸøÐõ–„jX`çXÕ ,°À ,‚jX`AµÀ ,°À‹ Z`X`ÇáŒðòU¥«§ŸçùŽ®U%Uá¡HEYÈír––B„RÀÆØÚ0 ,°À ,‚šMDÇÆÆµwutõì?ÜÚÛ?ÌóËLª_$Æe”2J)¥„(ŠÂã0n}îù¹m«æÎq;RƳMGZ[Ÿ~Þ»ßM ÉD†ÉÎÇ®¼¢ºt Ù@Å5M›¶<í\á)¯0~sÏFÕß²öÒÅþÒÔuw¿´ío·–}R¥j!J`BÌò~r&ß[!DY¢ây?Qsbv²X/s™ òÜy,¦(Yçòâ¹’P^¬g2TEQª§Í¨ó=䨕W_Ùºý僱J”–¸ÀÐþÓ–.é8ØÅ cãbé=w~Q9xæ•Í‹gOÛöÚŽ…+ˆ~á‰_¿ÑÊîùÜGn{©}P¾ú—½þÚ+CŠýêË.öŠˆjZ–âÈž ÍË¥(yO‚979æ¬LÖ{ó¾¥rRˆ9˜’Øç~\æg#/…ËÛ ‹`›|¹æ kNeóŽ?/Õ7³²¬B† `jY‰þœ’Ú;º~øðŸD›{íª…¹Ô42mëè |»÷>ØÒQWS‘Lg¥”‘G”ˆ0DPVH÷À(æ0‡˜JTæxAwí;zó —=ùôóÃ#QQ®ºì"ãÒ»œJI_ß@eeùÙªíÕ€RJ™$¨ BîþEU•nÙÞÝž_\]¹}p0#Ë@!ÊØÐŒiöðÒÙØ…p4° yV*Óï“K+€ªÆ•Þ%+f”ø=Iù°Ã–,ž¿3M$˜C§Æ®ž²Eä_fÑ)RȘRî9))yJ9ûd”S“ž‹Y •$åñ$Q•ññÔpï!¥ÊFúÆœ¡E3÷½+© 19}`ßN -] f4îéØ;mNÝÁ½ûªf‹Õå%.Þë îÚÐÕÙz´;rÍ 79±š‘ØÛ±•…T&úV·b47ÅlîéÛ8OmFÅ?erÈßnm!iX»¢(Uû1Ä&±þEQßz‚:‰~ï¡ß ‚ó†+×®^>/ëîÆ-ÛyôI„9ÀWVðû¼ÓkŸe›¬(6^$*UÅéà6q,‘bŒÎk*ŸÙPþÔ«ûÒ Áát+”>rÛM¯lzãoO<»fåR¿Ï«÷/IR&#•”ZZÛ§5ÖŸ]ú^¦ÓÔ é”¢Ê²¬!®¼SŶ`! …ðÈ·{'W^®HS‰ŠÉWê(— 3ªâ ª‚SΤÄ^G)fƒUÞ2'r¦©Ô1ØíC”2"Ë&v‹âM’§o·ÓiùÖŽùÿ×:1çyE‘Ó²¤ª !èè¡}#½{›W4µ´6ÍXØÖ~¨i~ÍÁ—žÙ2­ñà³O7._Ç£›^ÛÔÛ7D%ªÂ ÂpoמÍ#¯ìjy4¶…*]"Jg¤SFq§³§oÇ.ÿkz˜Ò¸{ú[жsŸþNj´Å7V•Lú(1£žq“o1AM&Óÿö1ApΛՔKM}ƒ#¾`Èát¹ìâ‡ßwõ›»<ô›Ç)â9Á‰ŽÆŒ2ÀØxZ‚Qvìèè§ív;Ïó¢Mlïé}öå­²”Y¼pv¸,¼}×¾õkWëý‹¢¸c×–´$-]0wp8.-9%T:DUUEQ€Dze»…@Uµ½¬,m³wÆã޹óåtP íÞ˜gaGowÝœˆ`wd›†¼•²”Rj(Ÿß:Ò›Œe|%þ´”lËL/;ŸU%Љj« +db™Ò³ WZ ñ6W(ꪘ‰˜Õyµ¾Å;žL)âç5€ÓO1#7éÍpKe‚õ"GzóaÓ#c‰aGFJ!›û’‹×QBdYùfÆb±³J™´+\wUm3,™HTÌYPÇ!JH:#•ÔT+Šºæ‚ ¤ŒT]¹ŠR@ T•Y™\ªB¦ÜBZk ¹¹±¹Δ^cyÏa¡Ý1Ù÷ÜM©ç7± šØk§ô‘.Ħä%¨&VÿBîÁ&*ßb¦\¨0•s2cLUUBB!Œe 1-ÛÃ9‡ºkï¡C-]³fL»ôÂe…ÚLoª úv5ÔUÍh¬,_<·©¾æ÷Onâ8Žã…TFx0!„aÀCbŒ!„D’ÆÆ’‹çÔGöjå9þÊõ«§R™'Ÿ}é‘Gÿ~ãu—;ÎÖö.‡ÃÞPW£=~VÐTÀt¥/шj2™Ôï'0¶9QŽWl “HPUÕ±W &9¾,‘®Af¨¬ÄF! !l·Mà ÎNX&“N¨‘¼œÝÛí»hÁÛ§¶ò“g+ëX B˜J&$ãÇ_2 •'ã0f­ý[¹qÖ”wTU¥„0Ì1FÙñ\7çn¦¤Htô‘GŸðú}7¿óR“fÑÑxeÈ÷Žu+´?y;ì¢ÓÆQJ¡ñ´Š‚A1ÆzZAB%jE(4[2oÚ’¹Mcññ¬Îmv±,Žû}Þå‹ç1Ɔ†96{fóY@L'þÕµ¾ŒRJè •1ÅtCB9N0P·4L&.„ŽÇ'â Od/NÊèxj>æj«¼\?¥Ô\ït ¶™"DÚx46Î80ããÅH¢§iX*F%~úìÓDß¹;•uêNa›N­e!ž‰[¬6r_›·D£x AØ…PsñÝø•é}êù7Ng¯‹w­85{­ž'ÄäAU%”jÿc6[86ÏM§¤ÇŸ~bñêKVýž¬[²¢>ÿÒ«ñ±ñ›n¼6T¼áêõÆñ¸W^´ä™`aóu?Ö5ˆ y¼`N³ñÏ!ßuÍ¥Ó§Õ77ÖjíËáh4&˲ œI”ާ<î˜Do¾ùf^!;D®m0ÕR|á’S~6ÅØ#͵Á¹L5_$*¤œ)Zó9Rž›(î¦ì¡Ð*‰‡‰í°ºµøT ÅèÃÁT¡>&A2&Qˆ3×ôž”m/ï±/Få^(ÔüÌLùYåUh›30U¸Ë”C*ž:šÞLiù.d#Ï»8©tzÛž¯ÓãQš|ÊÎÍÄ‘‘уG»DÑVSν+ðœÏë파{ÝnobtttQBUÊí̤36»c®Ðþ!9^ˆŒ'Çãñ±Ñõ+çÕUOàðÚ–7^Ú°ù–÷\_UYæõ¸Ñh,ðÆâã¯mysÝ…«Ï•¯~&ÄTƨlðÅEé,§‰áÐ#2±"´À4®ÑÜrSèóË+.¿&y^t[€1Åy|[!q“7iââ4år™`:m!„„B(ò¤ð¯q[us»qqòÒ!AŠ— Í9°¼* “ÃP(Þ¿p© .Sz™™p–&;uš2¨~r ÙÿLȳùá/DVJ&£n x§9s„ul¦ôc*’]Îk5anrž"Ë”Òãú^FÀg`ó·† >ùü«‚ÍQ_]VY^š‡ÜF¢ã‰ÇñÛ¶ï]·v•v„û}âé kV/¿úÒ þ¹qŸLozz9^p8Ýæ D^ß+IÒ¥¯J¦ÒO<ý‚$«Ó§OßøúÎÊŠ²ƒGÛvï?¼å×]¹î’‹Vs×ÝÓ/I’8™÷̦©,+Õx扄 <Ïg}KF}މ †FMÈc !À #Ä£”eiörqB±üßR–&*—teun¤@&Ú¼L&ÃÓRZšK0YŸ½ñV:æ8Žçù\<¢¿Ý¨ÛÌˈ˜Æ[Š¢H’ät:óRn#’Ê‹Uõ»:'¡]A iÉå9Œã”$©¬¬Ìáp•&¬0T<Ê»éÆÑænb.f,ä;–+©d2Qs—B;ƹè8ë&Ri1"攌…¢(Š¢8 ùÚ Iä¹sϽ>e)cç©TŠã8ArÏd!.*«vG’$žç³>[u0b›¼|¹v2µadqºyý’L>dÉFĨ=yâï·À[§o`xÿáN›Ýð¹ó²¢M\0wÆÜYÓ|>O[GBHQÕžÞþ榆‹/Z3Mì;Úi9ƨIÝ!ÂXE»Ãåpº Çuõ ¶¼¹ëåÍ»c鮘×_²}+@öCmƒ¢Óÿâ«o–-ž¿ê¼%¯¿¹ œ]Àò¸ÿ9rddd$˪I'’$)Š"ËrÖ‰×Ïh*•ŠÅbše€1ÆæR‚dJJ¦Òªªª*¡”BÇÆ“©´|â7Ï$YI$Ó©tF%DQ eLQÔØXRUI.‘PU5“ÉH“75¿þ]i$Gž-¯…±ñß¾¾¾¶¶6A²>]J©†ïdYÎ2òåŠVmmmýýý)Ò(ÒÔ}­³°žÖR3óë.Ù„×ç}W:Þ·oŸ‰¬c­ q^úÒ9O‡Ãát:9Žw8Úo§Ó©‘¨¬þ5ëB^L—eMTU5W‘’×¢Òq±qérÙ>Œq®ÐÑÑ‘·sYV ˆÆWhßB!ômd€Á± k¨¹dC‡x<~àÀ\&/éÊ%-¹Å§Á,ŠÞÖÖÖ××Çq\î™”$ÉX· ¯zŸ1ftO1¾cÜÞÞžUù •N'‰t:£՜ۀJ²œÉdâñ¸$I0‡­ç9Nxçžç9Žç9žçž×~Lmåegzi­·@BÝôÆ.§Ëc³Û0‡(eg¯¸Ûåxž1VZÄ·utÿü7áEû¢sGÆÈ;wê¶Ù‡ÓÜÀ AÜNÛ{.»º$¨it“¡²Ê` d<%« ù!Ê@@p83ãKf×kŠß¦†ºèhŒRzV¸ûNÔmyÐÏóÙÌ8i)“J¥}^¯v“ɤËå22檪& ·ÛÉdúûzEAˆ'0/dÈ!ÚX_M Ç™-;õtwÜõá÷ñ<÷ø3êª+FãÉT*uþ²9㉑0Ð?<öÊæmeAÏ ×\:žHÿýŸ/¯Xºp×¾£Õåy3=޶’Éd2™t»Ýú§Ç@V[mFCCÃǹ'«QJ%Iâ8NÓ.ä²ê::3jÃTUÇãn·[:“ɤÍfÓt­YhNã£È²ìt:ív»6ΞžŽãTU¡¬¬LcÞu|‡µÕÛÛFµWûý~—ËE)ÕéD Öa^M`¡ˆ£4ƒ1îèì*--q9Yø4‹0Æzz{ëëjMôöãÁ¡ñøøÌ™Ó5"”+"L?®µµ"4sFs&“ɵ2蛞J¥bcñêªÊ‰(êöWB ÖÔTY¾cÜÞÑYiB¶ îèìnj¬Ï’xrb„PKk{{GçŠe‹Ng^!)¯~e¢\ωoG%“Ét:SZZ’W_ H§Ó’$Ï0£”ãyMÑ’Åä53k¤4W.Žx½žp8\Ș !äyî¹—^=z¬ý–¯s»]”šEa‰‚ðøSÏ¥Ò™úÚŠæ¦Æp¨TcˆóÚƒxž?ÖÚ‹¿¾mÏ¢…³×®Y‘ÉHz犪vt÷)*ɯdž°¡¶2ëëÐÿ=n9ç:Aíê8\ŽƒõÕzül!U*Êà !=ñÜ+¯ïv¹½œÝs¬;jw8}.!Œ9Œ9¾bC(F¢}C#AE˜DQRÔw_¹ò¥-ûÄF«—6ÕW‡ü^×ϼ. ž·t¡ÓáˆDGC%Á3×xš‹˜Òw #IЬ:®’’’,¾^Çnªª:ŽÒÒR„à¡£mãé8㜕(Š:¯Î£¿…2F(¡”%)§ÓŽDª+©tZ‘B Âø¸{$šLÌó¼ÃNûû0F㉄ªz)¨ô¥¡~F©Ýn«¨8nðîhogŒb,ËÏ%“ÉdZ •ºìv;¥T»Ý>22’J¥l6›¹ã¥Žn4iXVˆFDyžO¥R„#y+¤\ÕdýññqUUc²,»]Nˆ°(Šã,_DY–ãñ¸F§c¢(ÚívŒ±ÓéÔÍÞSúR™«ë§˜/+ʫńåמERÊ^Ùüfmm ðÚ †„büÊÆ­^¯'*Q5ïù„06¿¾mÍJTQ^–µËFåžö{×Þ €ÚIšjž!A;¨Æq¢©ŒÑ¼'DW’˲9ì6ç)Ñ(``<™•–jÜ^!õ{^í‚Þ€*+J¡­×8Œ@  ³tGZÚ].g©Ó!I’Íf3Ÿ{®®ÅhžPEK€ Qú¼®òÂt:Ó;8Z*këìY<ŽDd“¬– 0»Ó y;„(—ÌzÃ" rù‚‚h7ž"ŒÐX*³eÇÁÚÊ„€6x?ñ8à0¬«®È+òäÌ‚³up(2–”ýA/©Çå0i™Je~ø³ßGÆÒ•5.·WmÏaŽÇCˆŒzs/€`hdTQI4:ÚÑÕ·`Fý%k—:l⢙5=ÑT:ºý^àš+Öýõñgü>¯Ã.î?pä¢ VžñŠ^PH’ÈeZeY‹Ç]N—ÓéHg$»MÌÒöh§Y“±Ò©äÞ£=‘” c1t°L‰ßCu|ÁÌaw‚%Ç:û€³gΠ –<9øAÈqí=C’$-_²¸»o8‘9(Žôõ8§Û7IÐP$J‡"Á€?ôOè ‰ÆÆâv»]&Xõ¾¾¾ššP éD^Š16‹)Šj·ÛÉ‚@ÖóJ'yÕ”ÒŽŽ„ÏsªJŽu ®X8³¼¼066fkR©Ôàà „PàyŽÃ”Ò²pØãõ2Ɔ††Œ6Nªåêê ™- IEÇyßöœÏ! æâ_ãK)c‡= ¼²iëúµ«óºï ÂÆ†úC‡:û‰\Îñ÷B t:]]ݽ~ŸO…\}¯Q£`w8‡«*+òšÛóXþ0ÏD²ÿ,b% !*!ÑÑÇñ¼ÀKŠBT:¥ëÍTô |ôO?`’$éf`„ƈ1šÉHY¦ú\ÿƒBì‘Ö «»P^–e¹«««¢¢ÂxÞô}x~ÃÆ×CA_JRGc P8UˆþFŽãy€xŽŽŽ!~¿Î$eYëíï× ùšËRxÝÎå fö 6ÔVcŽ›ˆz™üWV“gœ.AÝwø˜h³s¼€™ä÷¹MZîØ³?šË«j½þ (Úuqçd½ìÄ‚heëž›·WU”Ô×–_{ù„ïÜ™ sg6dµ¿|ý…O<óŠe‹ZÚ:Ï|‚jÎgýN¥Rååv‡£§dt|xvS5Ïá\¬1Ö¬±¤Âa' @ eä°_m6Íê©U2WU"ŠÂÅ®ŽDÇU•Ø¢’¦úªhtôDy H’\_[.õ ŽRȼ>¯,+Õ•!I’ ŒpjÇþci*–>Ô=¦± BT„q{ßÈËç:ìʘ¢(!ÛuìXËÐà„93vuu544˜¸2ÃFÓé´ËéÔ¦¬¦™ ãñ¸ æÍ’0Æõõõ»=O´vö Æ2Ñq·oÌëqëò“†NgEe%F°o "É*@¬wpD^²Ü1@ÑúSfC4-µXãü˜ ǼÎS€1JÉÅkÎëíh9Ö>cú4£‘;‹žñ×Ý;0£©.©«­Ö„ÔW?¯¬ç_Úèv»êëj޳>:'7áXÆÆÇ»ºûÊC¥â$C–WäJH=G ê‘Ö›ÃÁñüðÀP*™ú½}ýƒÿó“_¹]îšêr‡ÝvãõWî?xä±§^’(.«¨öùKD»ãtl™c‡Óåõ—Úò÷\ÃóSLÁår45Ô=¿aóH460) •œuÔÔÛíöXyý¹rq£4­H5Õ•½ý Gµn³Ãn[áÊ–ÖB(`Ù6ÔIÑ U•8N„Q!|ò"#„B@òªdrŸÕËNQùÄ`nËU¥¹¿]¶îüPi‰,ËcñDÐï EF8ÌaŒ#‘ȇ?üáÚÚÚ/ùËS2FFW#4áE I´DUûúú‰ªÖ×T$ M<‰–—…6›íÙgŸýùÏ~Çw\vÙeº­:WÇ«‹ø£££ÉdrÑ¢…^kkõRÚ‘¢Ñh È:·„Ðiu]=•!_sC3Uƒg$éü•Ë~_¿eTu¼ëÚ+Û»zÉ”®F1u“¥$XyÞbQÞˆ£³Ž‚¾•u<™ŠŒŽB^ŒBP¥ðÆŽ}•cØy =™LÌhnzñµ73„+ —{ýAÁf;MÏ „Çó‚`[8³aJjªÁò%óÝn×˯níêé;ëj¡bÚoBHiÀ3oFÝèXbZ]E®ÊwÂ@‘ã‰4ˆ¢(r,6Vêd>¯‡­,ŒiJ0£ï¢n*;3 èêB0@•eYQÕ)ëeæQÍÝ A¨Éë&ªE¡( Y.šy‰ „çùIõgSܤ‡ æ8^VBˆÇíb…ýSxž€ÙíâÒEs‡"¬@)ãy~åÒ-mŒ²©ÔõPøL&3…wçäS‚ hŽ&‰0FæÊãU”EûÏ3J%¢È3`0BH(jjjjnn¶ÙlétzÊœº¾w<™H]¼ ô bŒ§W–ɲ‚1–dµh¤,\PUuöìÙ@`Ö¬Yšøh’âXSk $„P:2|àW¿Bái×\+ŽŒ —””äÚ°c¯lÞžJgfM«ç0V&3˜æ>MäË…~0·nóy\W\rQ–nVö±<íp8ëj«&¹`äÿ0ÆÈanÊ8æ³N‹ („q¼ª, ÖT•§ÓÒ¶½-•µ N—[–$9“*- @ή(ñxý¢Íá[ágË£$NO“jªÊë몈¢‚³rýCo‰ß“÷Ö„/¥¢ÄéT𤓉t<â³ÃšÆ&YQu·aéÏâguÉ/ký elÒ•—R à9NC¦ÆW«Š xrÉê~Ÿ1ª)+“©Ô«Û˲ 4{ø¤(QZZ‹Å8ŽÓô·<Ï766º\®BÒUn ˜Ìœ  åY!  €Kjî Bz{ûeE9qÓHt,>žr{¼Y›Z™L¦§·_cìU Ç$¡D^žcÜÛÛK$S•ååeÆôÆ0Æétfמý™L¦¤$ §zÀe2Ro_F’uw*p¢ß8cŒç¹¡žÞþÒÒ „0à÷gyé?0Æ]ÝCõuµ ç@Žg²Ö^I’dE©ª(Çg‚%53[c]µ¢ªŒQ-Š/oû‰@˱ÖááhY8Ìqœ’ƒÖ5§eY–Žu·'’)cMPdŒB!< sš Œ1œà8Ýø-ËòÝwß­E:™«ŽõªªúÈïþÔÙ7ü¡÷½ A¨(‡N™5½‰Rª(±X~ŸgÙ¢¹ùTUµ¬¬ìÁÔ:4êùsÖ&UÄXí뫾üŠðÜyš~Èá´ç]ó–cí‚(z}¾–¶îªÊ # X('—ÆXÏ›3Ãïñèj¶í€U+–EF¢ª†fÙ >!„R·Ë±võÒ\»{ÞWŸ¥Äõ´jdd”çms0U¥¡#­ Ÿßét˲”Nò# »ËˉÑfK¢VcDUTE./ ÿˆÃn›;«¹µ½ë,¥ …\TUÕÈ„€ åmÈj£(Jl,vèpÛhB.ñpó§UÖ×׻ݎã²ùn8ÌJ|eÌf·ièŒj¡BiUy¨4è뱉BEYÉÐpT:ùÁØÎ?òzÍå’1˜ÀséhOEyØnwè „Ô×׋¢8::ªýYSSS]]=::ªÙ– eçÉuZÑTÄz”T"‘Èò¤Í«°ÊBš3fÌèîîv9¡pØëõvtt¤R©ŠŠ ÝmDûáv»g̘ÞÝÝšQWG9räÇqF¯æ¼ê,­ „$Iúõ£_¶n Æü#üßßq«Ûé¤ùy!^Ûìt:“©4‚ð(A¥R™'Ÿ{e 2¶xÎ4ŽÃŠ’çðð<ððÑÇŸÙ@xÿWùý>ͽ9G–e<Çoz}ûó¯½éq:š8ŒK‚AMôÉÒÐrn9ÖþÚ–7Λ]SUn·‰y3Eh¢Õèhìå×¶ÔTUΛ3CA)”N !ôôsÞÜ}¨®º¼¡¾æÀÁà æÍÉz #$IòŸþötkWÿy‹çöõŒÆÆ0FÏ7Ö×´UUmïì¶ÙDawO¯,)‡;:»‡†K 5óºøfÍHa*•J¦åÕ+WTV„1Æ"Bš¿wÇ#Ër4Í Öcô£›ßN™³Ý„ÒÒÒÁýû“ɤ3r†B€t:N'ë³ÄSB°½«§¬$ÐÑ7Ì!dT‡àù £Œ&Ëri°:*‘$9‹ŽêëßXW“N§GcñI4óÒ]3G–Å÷¬#«§EP£c ^à1FŒ²ÁèXK{wE¸AäsŠe¾öÞáڪжýí/ê©7Þ ‚J3RjýªysfÖIM5ÇC—ÓÁ-egŠPkî»íííYwNgÖÙÅWW×J2¡D­®® Ç‘ËÖÀi+ÞööNýa„ ¢iµeÇÍWÂ%žt:ÓÚÚ¦”tKËIuyP¯Z¶xQGGÇ–-[²pʲÅó+«*5ÑA¡$IGŽÑ´”ZI’ZZZ~¿ßœoÕ? ÂŒ¹DzttTsµÜCÂL&344”ŒDѼyeYF9NUU‡††‚Á`ñ¥^51qÅò¥ÑX¢,\¾d‘m2÷B.ÒQU5ðÇâÉÊò2‡ÃFÍkkD¦RiÁîY¼¨anS¹ª’ü¹/¯ª›V_.=A7˜•cˆPOfšššgO«v:…Rîi¿ßܵo,¥ƒ¿ÏG øâxmíhíì_ºhÍ&ª*1á?4¾0%“Ùsç-™Ó ò‚ÑÜs#˜L¥g[ºté²…ÍŠ”áyaÄhDEñ™ç7¼ôÚÿñ¡÷îÝè×þý½×_Ñ?0ôÀ/]¼`ö²%‹²‹\õf.ùѸ«»>ò~UU6nÜ*Úmªªr/[²P÷éÕ˜BH4ÍêÁãñh±ÚºAÁÜÌ aÇv»½ººzÇŽ•UU𢍣££¦¦F;Y&YV.\u^4ŠÆ#„€Âq·“^¾Ø¡Mºc–K¹ö EQ0Æ¢ÀÛD#¨e%7Onœ7¡Ø”Õ8ÎM‚š‘eŒ9„0@@°9^Þ´ëÃ7_uÅÚ¥ u• À£í}Øë+C=ÃcçèÓ¥%Š,g‰ÆÚò“zRær:J‹jÏ|š !t8Z’ ,­`.wïr¹/ZHˆÊØ œ'ÚB—Óa5‡«åyëY–|ªª €ærÙ5²þcŽkhl¬«¯Ï’9ô xݱ"dù4êœ0é7;å×Åq\0Ì ¨Ï ž+”ÊXWWj¤¥ªªJ»¨ªjUU•1=¡–ï0™Lj»±±QC©㦦¦ÜTˆ…ì—ú­‹Ö,K$’ŒÑ¹3›I>5ƒ¶k<ÏÏ3SQŸ×KvŠì» IDATTÂ@þxU%Á€ïʵK1FÇåRJ0h¿|ñüùsd‡]d 䦕0D±uœ§(Š] ¥YµAŒKJ)»êÒµÆ6›hðž†ÚÊT:sË{®«(+!„Y³3w‹!dÏÏ™3£¥­Ón³Í˜Þ¤%Ò2æŒ,))Ñ8¼¼™‹¬še¡(//w8ƒŒQŒqmm­×ë5N9ëìù}Þk.;ä e}Ùóp„\°b!c@3]gQú, UQÕÚêJÆØôæF„PÖ¶ÓÄ¿y)+˜ª²Ó9EP…h¥Ö0æœ.Oddèû?ûÓ׬xî—y^´»û‡Çœváâå3^~³EU!Çq“þÕ§NIY®« :'—˜BJ§{ûg47¥"©æ“ÅèiÌÜùP»¥N¸°,±ÌˆtBXù5:ŒƒÉJ]VÈø¡»õOÙŒã8MmR/:­È²lTKUUÇãõzõ3`ü.råZ„¶ìY»ÉÌ»>¼á3Ì[ˆÂ¤ºÉjœãU_ „°Ý@dh`Ï–Eó¦ÛN¥"ÄÛ{¸«ÄgsØm}‘Døt–†1¦ª²Çí;©ê’:— ÁÙç?¦'vO$ZZ»¼ ?ó! yñ€|Å¿Àd cÏYkÊê¹®È&ž¹=dM§PaTMΪªªÊJî“×Ó¡%/“ÉÄb1c' Ÿ_e^¯ ãúdU Ì›ÑcÜßß/Š¢n!;q•€y ˜ã'ùÄå’E1•Jå¥ÖÆßšœ NÌ2 &…8a­(¥šël!÷cã» U“Í•ÀŒ¶|ݹ BXWW§NúËdU0“ÞgõšõïDÙÔøv]x"„j©7)¥Zµ 7ª=úûûµ"¹¨ŸJˆ L æ¥C&¤.ëÄVVVfun”,M ÿ* ·¯©©1úß™'ИÒ;·Ó[ ¢PÚbTSçAy= *¸¼ª¢ì8Ð6³¹þ®\ó—g¶Ž&…€Îþ‘ºŠ`8àN¤”±¤RLF¤BÄE‹>ÚÚ}ÑÊŸ8Mn÷wöni;Ks;hšK.¹DQÝ.bžävÞmÊâ…Sº˜ÛÀ@áô&Õ¦²=Ïóúô1ÆkÖ¬ÑÄ»¼‚ˆ  ºv»}íÚµZ^{Œ±QÝWL~€\}f?a˜ªª3gÎD“ž …øqóü yC)Õ$Šáx4£9™Û@Nî)k¨SpT§šæsçyÞëõæVUÒÜ¸ÆÆÆŠ±RÛl6céBç0ï ›T뤔.\¸P fÕ#åÎJÄa^ãÌf‰§v»ý¢‹.Ò«õs<Ì“`d1£¹³0W½æöŠ+¹jbEÔŸ93á´œt4cÆDx7B¼ 8Ý»Ãýç§6D¢cñD €0/ˆ¶ÎÑ×¶ŠÆO/»1Ó¤ážþáѱxÑ*ʪ:2ãφ2ã&h¨¥¥%‹“äÕ.f)¬Œ¶±¼‰W E¡e¹ë’A–Ö¨P1ð,I®PÁm ’¥p&„;vLÎc 0J!`AtbÚÕ\§hŽÃ#=6Ñ8Y 1i¾EZÎÞÜo#Äa”÷œµ8“á%ˆÃˆãpVa-)9„€ð7Ñ{Ãsæ8Œ §*'–Ö"„=zT –¥ù@­&Çhõôò8$(¥ªªjŽW™LF#ÕÚãz´bGƒƒƒ¹fuÕûÏÛ^ûWOqeD¾£££ÝÝÝ”RmüZâmxh’WP'A–åññq káò!<ñ{âÊ )¨€ µbLH£ã•zÚÂɰ–T*uìØ1P8F¡ —BÖÜd[':ÉFa½çdN¡Këõ…šTVÈ‹sLXXX8)cnjL“Õ;7%TŸÇEI¿žã!$Úìn¯ol”léN¦%›ÇC jëÇqýL&ÓÞ˜s;ì¡ B@)ƒ ˆt›¥ªªÑh4k:ÇaÀeLããñx"CU¹¬ÔïpØD!È(c`Œ$IˆÄ“©´ÀòPðxÆÇ‘/ؼn{‰ßM)cŒ"ˆšÊqb¾Œ Ä»Íð:Ý.;%LPND çÕ³ †B!­:›NœŒp*_ÍØ,Š¢V //Îc¬µ×|µ(¥£ãvÆ¥-¥;ÆX«Ð©×M3 ׎VÍWë\#¨y´VM…ä3'g2™ÁÁÁp8¬jâSšH¦bcc·Ëårétz5=I’‡£Pã)CR6† —ðd&TBˆ,+ù‚O0o1/1–[3§¿¿¿¾¾>/ŸdîkcRÒäø»š«1ŠÑj˜_Ï[1"WæÎkM(¤¦2Ï)LsYÿ{ÙPKü^BT#Ç1g³9ˆ[m鮯 'e5žLÜö@Øß7“ˆŠ0‡Ðé¸ûN䓦”‚¦ò\}¯–ÚíqÙÏŠãù˜A]ÉitXÕPæ\ª(Šö;×è˜ÉdFc±ò²2MP‹FGGV= „P˱¶dJK[ 4Üí÷ykª+uBˆ’3™_þæÏ¬^¾pþl'ˆtÞ£‹Å~¿514á9ìõzsÕ†<§…½N$Ó§d¢TM¡¯Ý˜‰BøöÎþŽÁ¸Ýn·sdÝêE”1•ÐLFrØE§ÃfôµÙ±÷(œDUB^qñüÏK²¢(ŠÏãâ'sèf?•‘Ñ8Çq‚À)в{_ËÀhŠlR2vÍúFÄ‘Jg’©Œ( 6AˆŒŒnÛsDA¢$Éa/_SÖÑ—VxëŽCnPJ'«K=óç6c„3’L)ñy\ú¶r}ó@‡ßÓñù3êjªÊ(eIæ0ò¸¹e­²Jûik¶sÊ2•R› Øm¢JÈx"éq9yžè¾Ê„D"Q[[k³Ù&}3“$i``@¯˜Édìv/ض÷bŒµ¢(jCM˜ƒl<‘ÐY‡t:‡uº®ªª^)h``@'ÞšX©%Á0ND#Àããã'Nçã¥vtu^Ða·m~}ÇÎ-q”¨ófÔ¯]s^*1òét&–ÈDGÇ\N§hãñ1¯×—Ní"ô{´o‡ãðÈèXÏ@Ô˜eIs„¥”ý¥yt0¡Épp8ez÷BT°Ëtîƒy…H?ds÷”J2“ºîY”uJ%°¹Üy–fÉ?-‚* pBtçk!Ï v‡K’ÒœÀm|Ð-\´b€@’”×¶êŒKEs„øØŒ¹ñ”úÈŸ¼ãýï̽ÛÖÑU aŒ8#„´P i¨¯ýÇs¯-˜7ó,Õ÷J4Ó××ïóyGGceý/'ȯ‡{ú¢[_ßö[ÞoÜüÆö=û?öÁ›5©QÇb£—6¾94šEM+“ÉÔôúò¦ÆºL†êˆ#l÷_Ú²çàÑÖ‹V/¯®®T5+7€ç¹Çž|¶$Xwáʲ²Ð /¿ê÷ùV,_¬§ÎŸ8|·wv•—…Óé L–›Íær9óåÈþ®cÀæÆª‘t'!,•J'_ßÝBìhk?ÿ¼ùËÎ’©2i(µMoªnë'ª¼m×ÁÖξÊêšØh,¾ñš‹ËBA£o-Æx<‘úë“/KJæÍjʤ“¯Ûž”YsC•Ûå “õÞ?ÔÝñÜ+Û*«ªªÊÑH¤¶*ÜÚu:ìÍ!­ô#„Pðyë*F3¯ BøÆŽ‹Ý=ýÈï½n½d!¤ÔV—u ÆS’Z]^Ú?ˆKeäW6mŸÝ\sùÅ+ôxM¶CUIEYiee…$É<‡GÇâÉ”ø9Œ‰ª}|0ÆŸ–£@’å–öž9eeÚ­H$b ºÐâ¾&]„ͯJëa||ÜÜ'åxŒ5Bݽ…TÖ5ûý±Ø¨B•¶ŽÎ²É‚ “/©T*è±edIUp< K‰Ðat0`²¨dÊdðxÅblyŠää“VÍKÙòì˲kr‰7'«&^yýƒr}þ %©.D/³lnú-ÆMä\#¨·Ãïq¢2@á¤9"Äó¬µkX‘’ÿÀUÆ„P§Ãvùù GF㩌¼ëP×P,-Úìx*)3wã1Ç9œ®ŽžÎ‡÷·Ûo9¦îÜsàû?ýÍ´ÆúøØØíï×ôiP-_lF’Æ“ÉÚšŠ³TBÍËÒ ßÞÙMÚ:wï?ü›®ô±§®¹ò’ÒÒ’Ý Çñ^ŸÿèÑÖç_Ý:ž¦Ò Œ±ÁG[“âYEUu¨Æ.ò‚ݘJ§}6¥§e€ùüŠšúÁþþG~þ¬†•ËÛl¶ì|u”KËÛ{‡~û—§Ö®Zât:mv;£,KºEaçÞƒÂÁ£Ó¦Õ¿ºé͆ڪÍCú,d‘õ]J>Ó&8¶Å³xÜ.Q_Ø´‹ã¹òp€2zü›d ¼4Ð=œ$Ïñœ¬I!’¬ün¿ÏM ŽÍšžÐãv”}ñD"tsÈÃñܦG±J*B!ÇvÊJv›LK”Ò«/;aîPdžR¯«4à%'ÖáÂW„±~A௼tÍÑcmw•¥&pØm:E§ŒºœöPÀÕÒ©(/õ9‡Ãy°¥SUÕªòP1åÃ4Ñ3ðÛm¢VÑq¸,Ì' £´ªÏq‡[Úi½ââ•錄 â8ì ΠÀÐ~ÈŠRRê¼öÒ•/lÚ5žH»âú5‹ívûððpîÛu†)>žniï™V_•WÎP…¢‰³šjZ–åBΆy¤"Æ F#јÍ&^Ä;¤£±xyYÙ ¦Gãññêýét†˜L¥#Œ´!ûü„›€"K€Q€yŒ1`2B)3fÊÌëMSȱ¹Pn¿B†)UÄ…üMj’M<Îò†™|¡by5j¹®òæç¶p¶&ðoAPBuÕ¡#]1͸b¤y„3ñøøX<ô{õ»A¿'@ÀçúûóÛR©¤ÍáÔ¼NJBu¹½¡òÊcÝÝÿõã__|þ²y³šÿøØS}‘Þá±êºæ …åN×$ËLDýýý<‡«+ÊÎj 5ÛJJ™Ýázõ½¥¡Š7n#Øár¹ôºÊz5›(töEZ{"no°©º$Õt¡Ù‡•1F)Ém˜&°ä4£”"„+««Á’=-m‡Z:Þ{ýåÁ`Ðè{¬yW64LKgR/mÝ (¹ô‚å:&ÒÇO) ‡Ë7mÛ‹;ÁŽ–ÎÁÅ æNV[/Æ[ˆ6±,àÞy°õèÁý—¯_ó·§7¸¼%Õ•e¡’!„¯N½§ËÎË* bÄq‡9®©®Âf…dœá¹éµ;{ú…Mr&•HŒ×N›ív8ü^75d{'ôÿ³÷ÞñuTgÞø9gêíMW·¨Û’,Ér¯L± $Ô—–Jè!!?o²» /©o’Ý %$Y`³ƒ!ÓíØØ¸ãnõÞ¥Ûï™s~Œ4Ý)ºr˾Ïü‘F3gΜöôgiQp0.Dã‰_ÿçSsêëXŽóØy‹…Ï:0>·ÃÊõ¥Ò™Çþøl2-øB<ÇUÍ(AIHÑ{Gl˶Ým-M… ÅZ‚Aiq@%ÝTݬÈeÙ·?Ø\^Z”NglÎårÆbñD2éq»²ƒ ðg±Xd_»’C’]­Œî¾¡Þa Ç„ Ü<Çð§›%<ê;'$‘H–ÝÃÑd4wØmº³9<<ìvfÁÅãñx<®Æš$B Ë2±DJ)ÂI’0Ä´ 8SÃ0ÁÃ#±#GŽDb) rƒýñ´TS&„i騯.Wî%i8GY-teYQgOßàp(JØiå iи®ýS×¥ªUõLÜŸÚÀ·\ìºF±lÀ ÝÓ¨®Qp¯I:€‘‚kš¤]Êúëi”¨­,ûäH¯$IEgmTIÍ™éqéDÙ,üe«¿»iw$•Lg ÃpJyÔ\¸8ËrN·88Ð÷ìßÞô¹ÿ9IØíβŠ*«Í.‰’Íf³Y-²~FAôõΞU‰¦!ô ®Ág”ý̰LQQ˜a˜ ÏÙ7’&db…‡1%Õ_às¸¼‰ 㥗áĨE2î1£±Øè˜„2ç¢j««ÊC.ujìøK1!XmöÊ™•©D"H4¶B„( y=žH °hÍ$F³oAÀg_}ƼžÞÞ-[wΘ13#ÂE–aDIRÕ¤„ Ã̹*Ë>+ìéqXYI°–—„°D´ê¯„qiQac{g± ôuÏ(ô×Ï*¥€4Ö®:iŠª¬(ÞßÔ°:Ü¢$.™=“¥ „cI}bŒ-nv…?·öv±¼¥)',4‰Å^—}á¬ðpÄ‘N¥n†L¡Çê°Y±ñq9Ç\8gÅâáhÒëvòK¤ ϘQ.‰R<ËZN"–2‚˜„X<!bhŠ¢)DÓ>Üм÷p˂ٕ‹çÕŠ’”L§)DÉ1ÒêAˆ$Š‚ÃÆaIÔÂÉž{š¦#‘ˆÛí–$‰DäÌNs&¡^˜žç¬!Å€¹Ð« •P@QD7ïØo³» |®‹ç¼ùÁ¶’€O$¢xBN ]=ý"¯Ó:§¦rfyYlïÁ†ÖLHÛ „x Yº\ʼv‚¶º{§ÑêÈ'F)ź ¥5×€i†^.º¸Q×´‹H: µ8ä·rH2 ê?[„²çÒó—=è°[.ûÜ2I’¶ímÞq°ÓbµkkƒòTŠâ8 ò"Îbõúü¢$–ûYŽã9ÞB3ŒI§ÓÉ—ßüðÚ/_„ –Û†F"õ³«Áô$ùèÑ…Lzq}EK{Ï’y³R©¤:0R ÁicÏ]>û“ƒ-Mƒ‚(š®éñˆ1¢Q!€@IÂXŠ õU%6›U4i ˆ§„dYȳ°nÆž}Ó©4ÙÜ‚ 9sá,«…§`I¥ÓºÆ‹4ëáà€‰)v›5™L.™?{¨¼Øn· E⎕&‚ÞÉr˜…çlV®ü¬Å©tc<8÷ºíYÌlL 'N‡íŒ…5·ƒBs8–M$âÃÃ#r¢ª: D¸$ìw»>·Â<Ïõt÷ÐcQ?YãÌ0 Ç âP¨¦ª\ÈiAˆÄ’V ŸUDclµð©d|ÑœYsk+1Æ‘x ä D'¿,#ˆ~Ÿ ÐÞÞ‘Ê^ϾG ¼n Ÿ°ôûÈXN‹$ŠMm5•å45!O@˜Îsk*ê*‹‡#ñ—ÞÚ4–h‚Jü6ž™€”+B:“I¦Ò‡›»Ü6¶Àë’­åL߬p¹d2ér9›[Z=Õj•Ñ´ˆ%F_ŠJ$S=}Cw ‚Ã@„°DÍJ×G1ÅP0ÀsÌÇ;öHX,.)*3î(r’Äöö îohëH<ä,ÅÑÈ$k¢í™gyêú;²°V²‚€rç@¹TJϺ¢Û]¾n£¨Ð4¥ÔÕSŸ¡B>GçPŠç­pl·B„Lb&û-µtîÌ®¾ÁÞá²ÚÊÕ¥ŠbYž¦‹Õ&ó9© BˆiÌñ– M#‘¨Ãn#õô ´µu­>{Å4å¦F#/âÌòR‹…/ BW.›/W3ÕŠ“‰$Ï1 gÏ(ô¹¶ï9€µ9‡‹˜‚£x¿’ ³°rN¥Rn7™S[VôÉ¡žZ%’`a©š™áêŠbžç‰$Ë2YQ rÿçÍ®â8N„Âo"‘¤iJ7Y"‹;* Ƙçù¡¡a c·Ë‰ ñ{D;§ÞÒV«%Úì„E¡ ß­¶ßj_ô»ec<2•kãdIîžce,\@&#$’© Ë¥Æ?sà8n$õùXD! ÅY-œlbÍz;˲“X<Éó,„Ðã´¾k¤4(Ä0ÌÆ-; |î@wC‹ÃnEÉn·bIÊrE©((/-J¥ÒG[ËJBg.]@I§Óêž#£±D†0Áh,N¥,¾úÇSPàEÉè¨Rî/--QCühB§Óáñ¸Õ7dË)`(* b ë"Ôd}šw 0¤‚‚‚‰† ¬í-BÈãñ¨‘’Ôá<,Ë*Ë0L0Ô-Ý%ÿU©¤m³ÙÔ%ü&œ54­H$!MB‹3@iÌTʯʟ²rÃ…>«ÕNSQÔxøÀسX,çœy <‚j©ˆÇ Èbq8xõ—¾0†·5K ØBTVõ”)ˆ+ê«kãÕk™'æ­‘VW=>¹Cæj  Eë~;˜¬`¸‘d0½jŒÓÇ¥•’Pa›&EËÒ.Ãp§'lÙ¾gÙ¢¹9¶Ã0tUyH¶>}¼ûHg,’hzjÅÉEA¤ 4·v¦(IƒƒÃ»>9pÓ5_™¾^neáÆãñÎÎN¥’¢Q…££\ûÞ„š»…´íþÔ†.Çë IDATµz¥–Nê¡Aõ÷÷÷÷÷ëÎ4j*ë£ÔË, –eÃá°ZòP·–7džUH×.'i”{#<9"“£Mýëððp___MM ˜ Gù5“É$ “ÆS©” èŸL&³ÛY ¥\°A’$uƒÚ%ß#ßœH$tMîrçå‚zZG8 ³³3NËh‚ã ‡ÝârÚétZé€(ŠãF…1qœE**h¶tB^Öã|Ú™BõôôD£Q¥ˆP–I·²J.ºš‰ÞfR³ÅÜ¿ž;›´j0È‹5©yg$AšAÓ«Æ8}¼Z¹¤îo¯oá8žåx€ ¿àöú׸­¦j†ËiŸRk‚ËæW}´ëð`ãÀ””TBˆ(dxY-€ðÕ7Þ+ ìv+˜Î$Ÿø¡ÊÊJ¯×«=Ý€A¸¼nøœ‰dªëAÑÚL¶¥6¤"«eó³ÉÈ«4êӥ麺:ÊnRÏŠ‰ M÷6+˜ÈÄmdÙÓýY}€šsºð:FŸ“UU¾¶¶Vù3q¤)Êbaa¡Qi<5)&âIïôz½¹¬»Ý®»–´KQ1üª¿Ýãñ8„ßï×}‘Å2¡MeNµ`F{DeR™ r™$ÅZ,–ºº:íüšp&#¯ð¤–X‡¥ÒO5_×.!sµÏ¨~œy¸².œ’çXw1LŠ|Ê2Ô’páófn;ÔEQ4EÓB–ã.wwtäÉ¿¾ôë¿l±L ˜~瞃nÙçòN•÷ˆ’HD1&û‰D£×}õŠiÍMÕf«3f(%ºŒl5æ~s—dVœžI£ÍqÔ„!évºj®ÛíÖÊæâ¶É™¥e„Y˜àFëLðÕtOR³²cÞĬ01s‹zV;’$y<ž‚‚¥”˜®­,KBr8&b‡ùXéÎù½r7ôM !¬¨¨+ÌÈýŸcA †RO$IJ9UÏ0†UZÆ¡PHö|g哘—4qäëú,Íáy;;;Í * ±:íú7ÉdÕ²X®?%]Ù|ËœÌt<–/ªu°0•JÊpù!ž·x|…}éŸþö©H4–{S‡Ž4=ýü«¢D(DOI:!„` —† bñÄ;~ôµ+/›¦Á½Úc¼k×®¾¾¾±ÑÉ£õLø 0(ǨNª3áÁZ¶g"HjoPFê:µ”£lÕÎB£X­,I\Ûs¥ ‰‰òj.ÂO:JºBC–íKv]777kG/kL´¥âÔ¿bU] ¹ LšãiÕUØ”ºlJ½6åŠÜBWW×ÀÀÀ˜ý\ÒÖ‰“/ªÿª.ý¦~‘LJI8¥3ʺZ,Ƹ¹¹Y.T§Ü©®û–uQ7n ¥¥¥©©I®{£k_1'Ó.{™•jôŠQÁ]UO7OÌ\°ÙlV«ÕjµZ,‹ÅbµZ•+2)ÑußeB¥E~Ð Êú«9;œ4ñt:âãgä ‹W-™x&“&i†u¸ÝpIJb~ýû¿ƺEmøh—Ûëwº< Ë©”¦!@fÍ(yâÙ—–.šë/ðiNY nê°[01í:ËB¢›j¢T­13‰Œ7¹ÍäBBpô€%˜ê+B±X<ËJ[Ögfe}˜‡H˜”¥2ô‡P22CMIÒªòY’„Ñ£>Œ¦ªî9¥î 5úÃÇÀ]ùLk11ê˜O8»õŠ´g õØhƒIKÖÈH“¤eµ^~¯R¬W+8šú&®}Ýêo¹0æS™¡ú<ΠΚ‹Ž‚ Lj²,ïtyüÐP<ÝØÔ–k·(ÚéñZlv9fo* `YúÃ-{æÏ©>sépj‘nXMÓòÑbYF͇Ôk!‹Çãñ„(I2è´iboÉÚjö¬Õ¨hšjëè:ÜÐÒÛÛ·wÿÁîžÞ}§Òiõ]¼¡h,~èH3ËÐYé&v³\¼A`,‚4‘H¾½qûÐH”uX¦\/Z’¤x¢iš¡i¹xª¤—R}e¥ªh–²®|)Bˆ¦)š¦)„”*&†uÈ·^TWõ׊S4E!Br÷hšO§Ñ(aò=EÑyóãUåU±ÍF !ÄÈïCH©§ëÅd†¢üÒáá-î£vê“©T<‘2 ÿA¥Óéh4&ÂH4ª•Ô]%B"Ñ( ‹é2i­JmU1)Ü„®|sºøPª( ¬ZZýî–ƒ——fX„Ëñ§Ûãõwv÷ͪ,ÏA=ÝÙÔ9.®`¦ßK‘$1W—ú.<ïŒSƒ‰šDë „ÉdßÀ°×ít9í±x¢o`ÈçqÛmV­B„7m[¶h.DZ>ÚqÖò…n§kR6BÑXüà‘¦ùõ5Ç*ÉìF> ã®îÞP°ÐHÏ ¸œŽm»>©ª(¥iº¯o ™J34CˆæDÏs-=.wS&žQ^Â2¬¹x«+i<‚]û’˜Ù½ïÈy+½äœX,¾ë“¡`áŒòRIyj ‘cL”êF"ȡåÅáö®.,‘Ž®žÚY•¡ BQñ‰‡ˆ„ñÆ-»V,™ïrÚ)„2‚ JDzºòÃЉdjÓ¶O2©Ôùç,ל•PȈ;?Ù‡ ¬«©îêé‘0˜]SùÉþCÃTŒ}ž£ Ê ˜F9”£íCØÐÔšJ&%iEA,++q:ìÚ¼ ™Iw÷ö3,S È…µ& yü‡G°„v[AG &¥ãc€aèÆ–ŽH$:·~–(J¹{ïä„™ÖöN§ÃŽ ŽDþ‚¾A«…/ðyÕuF7H4608 ø‡hš*ô˜è‘ݽ‚(†ƒ…F…Û „CÃ#‘hŒ¢(›ÕB‰FcáPPm ‘?Ît÷ö1 ÃÐtFwìÞ»`NMIqQVI(5§Ìd„­;öxœu5UFÒ!ÆxÓ–N‡5žÌ H–/Y JhŠÚ²c_<·YmÉTÂÂ[Ï\¶Ðn·+évF³c^åMWVž¾èƒ',~vuÙ¹Kk¢‘AÈÈ@  Ãñk,‘2zc'>Þ¹çﯾ½nýf‡ÓÃrœ–=E!™L̯)¾äüS„›ê./eëRÕÛ7ðòú[;vkOßÐËo}ÔÔÒÁÐTÖƒ Mnlå-–€¿ÀbáKŠÃ{ö7díXåg ÏEã©—ßø°½³‡U)Z†ASÔàÐȇ[?I$SjÅ+«MŒqq(ÐÞÙCS”Ëå`¬«ØÉèW¡BŸkû®4Esc°º–1„Æu–¡µnà,óš mQöØéêÅYPÊgZ¬ÖÁa›Õ‚4_­ü¼kϾh4NÓt2•:ÒдsÏÞ‘HD÷XéÜ{ðp[GO"•Zºh^K[»\³A_‡C¨©¥=’vîÙ×ÞÙýæû›ßÙ°¥¥µ]ÈÒ#) µ´u¿þîG©TÆí´+…zTÿš¦‡ãà‘&‡Ýq¸±U¥†¦v«ÕšU‰LÓóñ×ê£iB„¤Ói¿¿ £«BÊb±(%oµ“•H¤Þÿçv«ÕÒ?0ÔÙÝCÓ”V¡]f€ìüäDZ;öìoní”+À©Èr<0&dãÖÝ?Þc³YÈ)7Lõ8Õ×?ÐÙÝÛÔÜv¤±yppx÷ÞýÝ=}Í-mc˜u3EijéÜèpgOok{G"™ÌRG¿€T*ÝØÜÚÕÕ‰D•¢åÚâ䇛Û;»[Û:ššÛš[Úzúzúúdõ^këèlëèjnikikß{ ¡¼¬$(ÄÆ€e‚¶ÎŠfgV”ªsˆÕ» !ÔÑÕ“L ¾‘h|îìYJ?Õ&H4ÖÙ30£¬¤«w`fyYgï@]M•Å«ÅMÐ-Ld²iWñô3`¨€úêÒ/œU—IF2éÀ!Ä0lwÏ ‘nÑÖÑùï÷=úÔsÿØúISA Èéö2 7¥l!“‰GG׆W­˜wŠqSíQ2–õ(ù¼îUgÌÚ{ appðœeõE¡BA§5éèî/ 0Á¢(… ‡£ÖA‘ÅÓõ¹s–-]P÷Ïmû6lÙEˆÙž9ØÐšlcK'…&àtg)Çá`aq888q;~Ÿ‡`‚!š¢š[Ú¶lÛír8ÎX4ÛëqAˆŒHd?ßÎ=ÒéLgwïîýGdS˜ÚÖ¤µ"„v@YqHktÚ¹g_$F£‹Ô§ÓéX"±c×'Z-‡¢ESA@î;pØétð?44"<Õ\œBQÈ_à£iZ’¤Þþš¢µî:õˆÙmV¿Ç¾úìeEG㩳—/¬®¬EIëijµÛ,¢„11¨Š¢¨D*Åд…ç([Ú;yž¥iJ½¦² t²…@ ‚½•>Ï®­<ÇØ¬–ºÚ*gb9ÞqË2^Ÿû`C›Çí*) ©S{³L/V‹ÅjáY–Å€HÆ Cá4½}ý¯¼µ1•Î|ñ ç̬(Uœ¬@/¤KO1‚‘hŒ¦(š¦ReiÒbá‡}D1‘Lñ<'ÁÄÂ[X–º{„’©”(aŽcyžSt³ýè©tšçØ€ß b‚Seh»Í–ÍŽ ÉBQ(,ô3 K¤œv+˲x¢µ+ÔÙÙÝÚÑýö‡'*.wº< Ëå^rœ"ŠB*/.°»|ÍÊÓƒäñ¡)ªo`èƒ-» ‘.:ÿÌ}‡š^~kcuE¸(Ì‚ã!üÞ®ž¾ºê AO߀Ëa“±ï³BHÅw7|‰%ÎZ2'*”!÷tR 09ÒÔ2§nÖH4þÎGûš»dt*­%G„÷7ÕáÙ°uŸ•ã|^7™˜x !ÌBåŒ2žç[Úiš¶Y-<ÏcƒÐyBˆDˆÅb¹ð¼3:ºzÂÿìšD4—&Âë(þN𢢿¶Ž¦ÖÎ Ï=CÖùÔwJ ü,Ãlß½¯jfYcS[mõÌâ¢`&£=÷ÁÀÐðÐÈ `Á¼úᑹú©–‹Pq¿ó“CÃÑ!ÄëvÄ)›ÕJ Äy;‚ Åéá‘Èp$ðû°±¨N`šJ§—ί¥…õÊ}ÐUÎ,K&“©tÆëq%Si‚‰ZRŸÂ…önÞ±¿A¤²¢tR£„0‹&SÉá‘RÆ9”™tfÓÖ]3Ë‹íÖå°a==FްŠÇãÉd2Xèóy=êrFºã€1öx.^½bÇžk_ÿ`é‚ÙU3JÔ8‘“Z1Æ3g”ºœŽT*3¯¾ÆfµRt:JÉ•M3 [_[íp8xŽãy–¢è¬>ãXž{½žp(@ÓL–£QÝš¦Æ&K?þ_aOeÔJ0v» BéêéçX–eA0 JŠÄ §Ó®EåTØj$)+ wvõÌ­›%J:X¢ vu÷‡­í]—£½³Ûírb`˜“m„¹hTÓh‚½³VÎ鈔dhSFè¬Åµ×G;ô¡ÿ}íÝ€ßS5³°yëÎÁ‘È«ë7{ …¡ Ãéf9>ÇàrüQ&æ)¼¨6¼xNå)Ì;µéc6%‹Ç÷j9kI}EYq2-¼öîV¿ÇQRÅ º—$I³f–½þÎÆž¾§Ã~¤©õÌ¥óñÄZÙÊ+R©´Ëi=gÅB–ß±Y¢ÂH4ê´Û¼·ÍÊ—ºzúú3•¥JÄo–ŸfvuÅÖOš¢#ÃÕa—Ë®V"G ‹JRÏÓÓ;ðÊ;[EQ* :Q’ÌñV$IB–•I’äõ¸|·¨IÍ‚Fc±¾þ¡d*Ó?8‰%ÎZ:ßf³È 5KFÁãq-Y0ç£í»gϪ, 2AûvI’ÂÁBLˆßçÅG(E @ ÿÁXÚ¼ugwÿßç z€ƒÃ#¶ìr;­g.] 8É&¥ò’`ÿààá†æËëv*áK:é¿ G½nDzuÊdMœP(Q’†G"ñx\%†¦Λ½i륌öŠp,]7#,û&'õèÓ}Ö²"Q’€^ÆŽÌŠœNÇùç¬));ì£eÚ´òÏ çÔHbv`«#ŠBhÙÂú€ß;<1Ñ œ|@®p'Ì‚ÃnW"¡²Ì C³,“Éd¬V‹‚hä;´Z,²riù)+£9b@ˆÈº_®‹%›šçÕ×*ÉÁ: Â#M­¿—çX]àLÙðH£×ãáXÖçscU!á±(}º¹¥]@p4  šZW®X,©ö¦I±q]“¾ÑiY)0-×s:2T™ªÊÃUåá=û_yóƒ_?öçïÞ~=„àÿýJAa°|fÝé´Xí4ÍäÂM1Æ’$fÒ)HóªÂóë*˜iÝ‹ÉW×ú!ŠR8Xø•‹Ï¶Zøh,ô{ÿåâ• ¯¬êAãXöœ‹iŠ’0>sé|Ÿ×£Ž„Tßi³Y—.œ+Š¢ ˆºùì`4‹Ü:gv(ŠE¯>s¡ÌW´hG @YIˆB°§pAý,<ÑÈ©¶`S ºJ‚~¿Ï£°Fs˜BF õ ˜õ`$kïìqØmeÅáâp!Ë2 7Õ[¢(Úí¶óÏY1V¸©ö‡„9/“ç¸ò²Qå’™Êm‚( }‹æÏ¶ð¼‚›ÉˆÍ­íAPªz40Æ‹å¼3—J’ ”1 ŒN 㥠j=n·ÌTô0³Ã0g._Œ1F( T¼Yºp.ÆãI½ý²°¾¦ÂÒØRYÆÆ©«j¶!£6š0 åNŽcƒB0†¬H’GÀa·»œNùÛtÓ¬mãt—KÂAeÝšœÅZ^•U7ÞÜϧÀûåaë‚\É,ÀÝ iå3-~õ9+ D¢hÜ ×È™W? !$WƒúèÊÒÜÙ5AŒIõLH0ÑC±–Š‹ÅEAaqQ!(, ¨Ñ…æ%hLPiÎ[ŽáÙ§/C•iNíŒÚªÒ6m{ýí .«¬¬Œ³¹]n/Ç[hš†ÆÅÚdPI’$QÄ’àqpEÅþ9Õe§ƒ×¼|1MÓ>"×’ôzÝ]Ž„±Û9ê8,ðyµ6(õÍZíèa¾¨70¢(E¼ÕòTACÁ¢P ‹MN(ß&In—ó‚•K0&âÄLÝØ`Šh£®¢S–—Aÿ`…›sV¨ö½²4£¼QY¡f¦rF¹$Šœ…TÎ(Çj}=ôGAÎ/ÔÙÚõ¸]ºy ê>Ë7¨!m՞άf1!,Ãx<. D™9õ&¼¦6bÅ5SQ2*Æb‚סȈº«ÚˆÉ%GchI-ÊG– Gkx×­ªdh «¥½›£ÒkgD·ö‹²t‡eìH17ÊŽä,4Gíö4yÖkú7ù¿¦W­\¶j岡‘¶Î¾ÆöþÁh*Ñ ƒ…ŽA#© ÅD!âuZ*Êý3Jn§ œ6dš:n,UIñ’¤Å7Ž67vE : `ÕL¸» ʉn­P  ÕMIJÉjV~*´‰:ê:bêÝ›KŠc¢àþè‚üáFMZ Ç6}TIc¥êQ›²!„²zgtêé~—º¶¹Ñ¬i±ŠŒ"t² S9Ž«(+Õb&˨Z˜- ‡Š®;M`²*~º|+ëu˜”GÕ{v"lÒ"%ãºò„9|±îÓ…æ0*xl.šdqM-KÓµæÂÚ Af€v©®.n/<©6íTUú³z±Ïãòy\ógWÆéþ¡‘Á‘D:#¤3ÆD"DIEb)Äs´Ënõy§ÍZRE wttitÝÅg¾ŽMdC|ªoš3ÚÛÀ’Ôd“deº¥Åb)..VŽB“óTwˆ´x¤º'޹‘PgXû™º“¢›N€ª¨¨PLŽ“‚ãëÖ67ªßL±éMÔÖ˜“5Ý@ +»Z¾b$|è¬&+æ9QKKKÉYWAÔª¤ÂL&ÓÔÔTQQô°yÄApDÝGŒ$`\ÁÐÄãhbVîêÖã3Ú‰ºK×HN5™VÝu®[´U»€1*¡QA›—º›&š÷”œ&²gdåÊ•4Mg2™_mÎó&U"s1{LúÕZy4ëÛ‹ŠŠ²Ä2#R­ñ@ן¢Å 7ÙžFâ©ÉÎñc§×Yòìêä7ù*v*È<æÍˆƒj…ÜI+éBºë@F׉^Ö90ŽD0¯Æe”ž‹ÓN»óÍ1Íu]›¹ors¹;1Ek{Ð^×ÚýŒÊéN“Ñà˜X2´ ZË|ŽåírѤu“öM\têTÀuµ ÞÈ© êkžÏ£5öNŠŸ#$µ‘!]AV¢ëÕ€š2ê# šNªSj¥:->°î,›cGç5Ô<«z:ö@@FcøÀrœ’à PÐcW‚ã÷ý£ú¢|I¾yôoc7Œß¯©ú£\‘oŽ÷ Œ_$@šøWõ!˜Pv¦Ë`ñãrͨœŽÊ+ €2Î%%HP©k€±oJ÷È(`íÕè2>Ú£¨x£ÕW6«–SÇæf|Ž jLàøÅÑŸÔ ºªW€‰ 8a`•Ù`´û «'cªÌ^M”¾d6"!T ;à&|>™ði£ù¯ õº‚ê% ›âñ ÏñE 4MCeœ}'™0A@ý/2ex¡j§@ /0¨I2¶h!€D½Ou»GTÓªÌ,„Y£?¶H•% ÆW)T¯4”=ƒPµÓ‘ê¥ãWÆ&ªÖÉÄ;þ!ÇLµÕ+µÌ5³Ï‹J9¥FÏ®±&cKÐâtæjžŽUK¤EÈàÑyë€ÆÈÈ€èß³Ÿ–÷‘Š’^ó“^̺a|·+|ÃèY¢ó]PïÜ×~gµñ(Ü€ŽÊ £-iú¯\^bü½›޲vCÅE‘B€Zj^eôŠ ü€lÙˆèiKpâ êÎŽæâØ¡6ùÒŸµ‚2>ADÝs¿œ8 d‚T”ÍYàø÷‰(кŸ0ÞnÖŽÁpªºa¬\BÕxB“ ×Áí$œ8àª*B„+‚'Jhco1Çø D‘•7JÖ¨™A¹D#÷¨§"LL4À¬ ¨—æ¤Zò¦_;Œc·±4´1`4P5ÏPót•Ô”H¶4'w¶Fd¡’L\Ãã',ÌÞ\ZÖ¬V|ˆ†iÓÙˆ1[FoÑ\ÔþºoÏÞ›dì Öü Nü7û"*½V£B+÷EŒ–4üŠ Ú¬Ñ= #ÖÜL€YQ_’Ã0Ž ö*»€ê-†í›¾˜a…Æ}#dGÏý…æä>,Ê’˜t±AÓ_MV²Ñb›´«Ú=h´ªádÍêoŸ‰nÔŽù™<Msâf1lSË‚³Ó`|ÐXQ8VØ`·0++íU…Ó)7ò˜ª/P2ÐÓòtbµSB!8œ$»ÚcKÉ–ù IDATË­!7?•ójJGÙÑ{ŸöxLÖI£r?ÜqÀ=Ô“ÂTGé³ZdЬíxqù\„œÜ¯œ„›=n[c```` ŸaI”8ŽãyžeÐÖÖèž.®ÜDzÈ#%åéxj¨‚Dh„–T \–ü€ä)Oy:•¨ß „bg(ŽE£éLÆa·³<Å­-Ø0à|s”osKë×®½±tFM¸dæ•_½¶¿¿_ÑeŸzæÙù‹ÎWœ»úó{>Ù+_O¥RßüöwŠË«kêü¿ßþ—/P¢ÜŸ¥ ›·oÔŽ$I?zèáYuó‹Êªn¾õ›±XlZ*©@vσ´Ú4OyÊSž¦;‰!!šD  T$œ.êqf¨W_óõoÜvÓ¡};ìÝY9sæ½?|@ùÓÆ›þ±îï‡ö^|Ñç¿óowÊüð£‘Hdç¶MÞ_ÿÑG[º}£v~ùëßîܵûÝõÿ8¸woáïÿѧ£zšßoyÊSžNm’³eÞzë­7ß|“eYuÔ÷éåûÏß‘àyþ÷Ü9ÑÊŸýé=n7àŽoÞö³_üZ¾øâK/¯[û¿>àÁ~øú›o]ûFíüù/Ïýíù?‡Ã!À}÷~åyŸ{ô‘iÆSådü~ËSžòt MÓ]]]ûÛ߉ÄÊ•+e(« ÇàiÈP·lýøþýx÷ž½2–Z»’¹)Àb±(èq½½}%Å£ I%%ÅGݾQ;]ÝÝ+Î^-χIÕŽ“]CÍóÓ<å)O§4É€7ÝtS2™¤iz,G• w2Ôo¹ýG÷ÿpõyç:öX,^^Yk~¿ß_ÐÖÞQ^V hkkWK+ÉdÒb±‡†&mߨ@aᯭ …‚§€E$¿åò”§<ª„1.,,,ðy% 3,«€qŒ¢œL:Î>ÔT2ÅsÇs-­mßù·ïMzÿÿÏe?¸ïÁÁÁAµÃuöìÚßþçcÉd²««ûßþãîIÛ7j熯_󿳩¹EÅ}ûÜ|ë7§§ð6úž©æ)Oy:õBH!ÐtøÀëo½óþ¶67Ž‚7K?]‚’|å?ÀÿûÕÏîýáý%åÕ—_qå²¥K&}üûwý‡Ýf›»`ÙŠ•«/^À0£ó¯~þÓ×þñFyeÝ.¹båYg*÷µoÔΚokùÒ%W|éªâòª[¿qÇÅašk§y–š§<åéT#†F;v¼á?÷Þþõ£¤GžycÇ–ÊÈÄÓì¨>y>ò/W_·}ë??óv6¬_{Áÿ¹6‹|:þë?¾¨”~%QQ2™L&N§S¿~ôG4‚-CâºÝÃ__ûìùí—§<åéT¢þÙò~¦|i•«:俥hIï¥5‹âláeõVžñDò®<Äñ<Çò Ë0 KÓ4Eш¢„Â57}ñÄu/wŽðÙóÿ{~pÿððHooßþï.úÂç?óvNJ{žËSžò”§SŽ¡F„,øá%áÚ€Õï²ÔÎ.®’¡Á~¹<Î4:ø>{†ZZZ¼ôŒ³/_ér:ï¾óß>óvN>n:^&oðÍSžòtêQFe^Ku!gãi†¡N`sð£EߦՇ|öЃ·ÝrÓm·Ütò´sRR^5ÍSžòtÊ„ÒBÀÑÐÂ@+ ’,Ò NR^CÍÓñâ¥Ó±Ìnžò”§<å~ÊA-4K#O»,ÈmLG?WÈn€ä½yÊSžNm¦ ƧE’(MPLOSpü<(ž òxIyÊSžN]~*QigD€4=µˆ¼†:–ÉG$å)Oy:ŹŒ„“¡’ÈA=ñ¦×¹—×P§…Š Fk¸å¹jžò”§S€ÆËhì¨#ÓÊ‹šg¨ÓG€ËAžò”§SS;%Aš†<ƒ,,´0€FN¼Ó´jžN7Í×EÍSžòt k©4Y ±àh@¡i©Cäê4Ý€‚ì§<å)O§&CB–† PH®Ü €y¤¤<oýtZ­ª<å)Oyš"?Q"‚DD HxBj>m&OÇs­kÍSžò”§SMkÀ’‘pZ)QI›™fŽ®“Ɉ¢hµZûûû !{öìñx<]]]sçÎ-..Îtž>%1_Bé3ÓuŽ„ EmÚ´iÁ‚ŸÍQ!EA™›r4 T™‚Óh­äêta©ÇlIÓ´¼‘î»ï>·Û}çwnذð /øýþƒ~ë[ßÊ3Ô<}úÇzž>íì(¸ÿþûívûÝwß½aÆ‚‚‚ööv‡Ãñ‹_übÍš5ŸÙQ@!c%uú-˜3jWOoSs[SK» Š©TÚa·Ùí6BHI8XW[ä86ÏY””ÛZBÛ7ƒªZ.Q_ܶmÛúõë¿ÿýïÇb±ŽŽŽ¢¢¢O­çûöíÛ±cG2™¼êª«ìvû zËÖ®]k±Xn¿ýv†aŽ¢…h4ºvíÚƒ^ýõ•••¹>öökpxÌ]øÙðrIr8=öØwÜqà 7݇gü§ßÓw=˜ÓZEèèл^|ñŧžzjÓ¦M<Ïõ«_½á†V®\¹{÷îööö“mëf¾~÷ÿÝ f|Ú>òö?@¨„Nìfïïï߸qc[[ÛêÕ«kkkI±CH6ÃQ¤¤àxÁÊéêû0Ô¡‘‘7׸eûî¡HŒf8ŠæxžÃ° ͳÌ›÷”í ú‚…ÞB¿¯´¸Èf³€Ó˜!¹Ô‰x E›ÛÑ߯Hs¡×^{mÁ‚÷Þ{ïÏþó—_~ùÊ+¯œ2¨/„4Âï®[Û&¯¹|EŽoÚ´iÏž=—]vÙG}ôì³Ï~å+_9î2&!ä…^¸çž{"‘ ¾¾~Μ9ZqÄjµÊ’Y"‘Èê|å5×f¢‘¬²fS~¯$I‚ uÛè«:´lÙ²ÿ÷¯««s8ÉdR–¥ „¢(Š¢(/מּ™0Bí¬©üþ÷¿èСÚÚÚ»îºë /ä8.™LBLžR®¤R©'Ÿ|ò[ßù.’ÉhoÐ4½eË–-[¶tvv.[¶ìüóÏ7ê›v‘¨ïɺáüãMw|›ƒ@ÌdÔsaÒmÝmh>ÿøÇ?êëëKJJÖ®]»zõje*sy‹æu@”$Bˆ(‘´€9‘¤ MH›™6'ÿ§ÇP% ¯{í­µ¯¿i¾´¢Êë+´;4ËÓ4°r”ÃÊØx&žH¸Ö¡á‘d:N¥74¿ñî&QÂKÔŸv­ÏœµPWWW¤¿¿Ðï…Bêë .t¹\>ŸoëÖ­·ß~{0œòÄt}ÒœøâÙËbnoîÓ4½~ýzžç¯¾úê™3gžˆ±¾ì²Ë***–-[öå/YkBÄßzë­Ï>û¬Ì#üã‡Ãá¬{fÍšuóÍ7Ïž=û‹_übiiiޝöûý!Ÿ74–Ý«K÷ÜsÏ#<"3Ñ5kÖüþ÷¿ðÁ•,Àc$ŸÏW\\,Šâ·¾õ­£6ãG£Ño|ãk×®ìÞ½ûá‡v¹\G×ÔàààÀÀ@ÀéNG.÷OõuÅÅÅ?üð¼yóä_Õ~„@ `±XŽbyÆøÚk¯õx<>úèõ×_á…Þ}÷ÝçœsN®öoQôù|!ŸÙ Ù¿ÿÁƒ¿ño0 óðÃ_wÝuÇkm”øhúÄží~¿ûöíñx|áÂ…«W¯>V³ec±OHR$´’$µp“÷¡N¤d2ù·—^{ëƒÍ6‡·0Xìõù­v'ËrMAŠ ì5þ·!D!P%’ižc†#‡7‡þ½>N^*[˜ )‰¦iÝ!ª¨¨Ø¹sç[o½µÿþ£[÷ÿûß®=ÿ²èÇëLŘV]] S©ÔsÏ=wùå—×××÷‘I§Ó_üâY–ýÃþðøãÿùÏÎ&†††öíÛ·råÊ}ûöY­VÇ£m¤®®®¨¨èÙgŸýÓŸþtÏ=÷|éK_ÊqR&=Oõ«_I’d·Ûo»í¶sÏ=·²²ò¨Ù•®hŸJ¥–.]z,9rDæ¦=ôÐqìž½òÊ+O<ñD[[[EEÅM7Ýt-än%îëëûå/¹nݺúúú§žzŠã¸©2T§Óù­o}ëÆo|æ™gyä‘sÏ=wõêÕwÞyçñ‚Ûºu«ßïÇ㯾úê—¿üåéu.ùý~š¦yžß»wo__ßUW]uì'‚B€B!€Àã«==8áp‘^xqÝïnöúƒÁp±Û[hw8)š¦( J‚ßc ø\YG•ÕÂü^·ÙüÓ\-U™<ÌÌ€‰D¢«««¡¡AmõbYvãÆ¯¿þúyçDzìáǧ´Ä¡ÿë ÏSe‡öíÚï~æ¿Ï­]^'sB†‡‡ÃáðªU«Þzë­÷Þ{Ïb±ß‚¬Ât:ýÌ3ϼýöÛò•}ûöÅãqµù:Ûíöõë×Ëd ¡B ô¶¶*šÁ† –.]:©+‹¢¨ŽŽ–em6›îGA‡††.¼ðÂÚÚÚ`0¸råÊ®®.«ÕÚØØx\¢(y¢3™Œb£³Z­Ñh´§§'äR¢‹¢¨†††Ë.»¬¶¶öœsΩ¯¯ŸÚÚ˜¸ö;;;\Ųü_ÿõ_Y§±±qJ§$EQmmmétÚëõf #EQ---±XLîBh``àæ›oÞ³g ¥¥¥±±‘¢¨)½.“Étvv9r„¦é+®¸bùòåO?ýô_þò— .¸`ÕªU·ÜrËÒ¥KMüâétº··÷È‘#&ªÕ¼yó^{íµM›6͘1£  à¨Ç?k.z{{80Ubª+pdd¤¯¯ïŠ+®H$þóŸ-Zt,'\W÷Åp4‚;i„ÖÖÖ%K–¼ûî»_ÿú×OžY,Û¼y3 ß}÷Ýçž{nV<ÑÀÀÀ»ï¾K)--ýÁ~°lÙ²¬ „ûöíØl¶Ë.»ìûßÿ¾Ëåš”çA}>_ 0±µZ,– .¸ ­­í‘Gyà^}õUš¦+++å ”c&¼^o(R@ÌB/¼ðÂ/ùË;wÞxã¿ùÍori§¡¡á›ßüæ…^HQxóÑÑààààà`QQ‘Q#¦¦&€Ãá¸þúëƒÁ Ûív:Súê‚‚£a/,,äy^é@¿ÌMëêêy䑪ªª©‚`¤Ói·Û­Œ°ÏçûÕ¯~uÿý÷?ýôÓ<ðÀ~ô£íÛ·›ŒX*•R?n´ggΜ ‰Ä_þò—ï|ç;Çe_Èï=¡`¢ÂYÚ¼yó­·ÞZRRr, FÒíÇh²ähÀ1!@”ƒúp€Oƒ¡8Ü Ê總V›ƒfyJ0„ˆ`<)¾³i–„ÚêŠ)ÖN K"æÂ)˲YIÖá¾ûÝïVTTÝ«+kê^ùŸ§æžûyÖIº†aoN‡` À×××_}õÕ'hL†‡‡×¬Y³jÕª9sæMuQï¼óÎU«VÍ›7OŽƒÕúYçÌ™óâ‹/Κ5«®®.÷WËãlrfƒÁgžyFæ÷!Qÿô§?=ðÀSb!¹wàÅ_¼n,-‘Häx˜ò<¯õ£BÃó<˲æ<øàƒ]tQYYÙ¬Y³þë¿þ‹a˜©úÇq§û7FÊÑñàƒ®\¹rÑ¢E6›M–,§ªêiw“ËåZ³f͵×^ûðÃ3 cb €Nú¯½öMÓ7ÜpCGGÇ_ÿú×ãņ±X,'TCx<žT*e³Ùþã?þÃjµûz  ±4d¨q`‡|PÒjïèzõ÷<Þ—·Àjs0,;ŠT0žÚAqM§>غ7à÷y=N'}ž:‰¨F‘;©©é¶Ûn»ùæ›NçÈȈÝn?Šä áÅ_¾á¬•´ µ¥¾\œX„ÇsÉ%—(ŒíøÚ{å^Åb±òòrÅ1¬$Vn¨ªªZµj•î Ê©w饗ʧ-!dÒœù)9XÛ rC"‘hiiá8nùòå÷ÜsÏòåËÏ8ã Q§”(¢{Ê+Œ!NË€666B ®¸âŠ|0—·È_!Ó1F|Èi3&MAå$¢ .¸@žˆT*•Éd¦4ꃱ Ve©«¿EÿùóçŸ}öÙcå-r7”§&5ùªw“º'$“I“0I£Ç³îÙ³g!¤««ëºë®;Ƶ¡tO^f'TJ’$‹G¹oE€10ÉHD€„¡‚å;ôªÈP“ÉdSKûÓ}1šÂE%…N§‹¢iíò‚2,gw¸’±ád:gœ&ßI„P2™ìëëkii‘$ BHÓô·¿ýí`0xï½÷>ùä“O>ùäe—]Æ0L2™ÔMÐÆ»Ë7 šíØ÷áõ·þëÌ‹¾û‡{¾* "0Hª8þwÞygëÖ­ãK/½”eY£xú¬¤Ý+ºÔÑÑÑ××·}ûöuëÖñ<饗ªPa{{{__ßǼnÝ:§ÓyÑEe©¡þþþÝ»wüñÇ —\r‰¬é½Zî9EQ}}}v»]qæi}½½½×^{íòåËwíÚµÿþ’’—Ë‹ÅiÒ<ÿèe¹P…1þàƒZZZúûû+++å >Š¢2™ÌOÊ PÕÓÓCiii!„$“IY¥“G@ùQå_‡††ÔŸ!L¥R4Mg*t“‹Òéôàà`ss³zÊä!„½½½ÍÍÍ Ã¨'N½R©”ü8ÆØh‹-\¸P„?üÐf³,EEEï½÷Þ5×\³ÿ~ÀªU«/^¬¾¡°°ð½÷ÞûÚ×¾vèÐ!Àç?ÿùššš¬F/^ü½ï}ï½÷Þ“$I’¤Ÿýìg9¾zÆŒ&°J%%%ï¿ÿþC=´mÛ6ÀÛo¿ýöÛoýë_—ÍGGýýý·Ür˺uëDQt»Ý?ýéO•¼‘p8|þùçOµ.tWWW$9.IM™L&ë6EÙ¹s'„Pé]RRR]]=Õ$¢’’’P(TYYÙÞÞÞÑÑqÖYg)úz4íêêR:Ðßßo·Û³ú3<<¼{÷îššEl2×™€Qa‰@ P[[kbòÁäq™»»»¯ºê*‹ÅòÜsÏýä'?9.ûBîÛ‰N2\²dÉ›o¾yùå—ÏŸ?ÿïÿûC=tLëµa±/#’¤@è If€ åŠy:0ÔD"ñÜß^yõ­<¾B/èö8\«Íf·põU·ÝÒÜÞ³û`;b8Þb•“P!„Q‰lÝÝpÞ ‹ÃfyÒ9˜À” ¸vïÞ]RRâv»o¾ùæ»ï¾{Û¶m©Têâ‹/Þµk×”$¶¾ñrÁ‚ÕËvm>@¦ î Ü{b ¤Óé3Î8ãD Ã0¿ûÝïäí­=Í)ŠúÍo~#WX¹r¥nšé;ï¼#Ç Ûl¶cO§Sˆã¸ßýîw]]]€E‹UWWwuuØžB?þøK/½p¹\guV–…ð( †²²u¢×m{{û<àóùþð‡?ôöö¾ð mmm‚ …“OÖO>ùäúõëüñêêêW_}õ½÷ÞEñâ‹/κ9ëñõë×ÿüç?_³fÍUW]µeË–—^zÉçó­Y³F×½:éȘßËÀ®[·®¦¦fùòåëÖ­[²dÉñ5Éžèimkk»è¢‹V¬X±víÚcï<„£ç›lŠÃ %0ª¥†ÚÞÙ½öµ· Ã%¡¢R¯¯Ðb³³,g·²g/œð9áB·(¤·ìn$Ø+GüŽŽ)Í4u Øw8oÅ‚|8’ZÀ'DÉC…&[(N Éf1„PWWWUUÕŽ;.¹ä’»îºëøÚ×¾vÍ5×üå/ùÊW¾’“3BˆS?ÿío‚g\¾çPsoêìXZ[ä“rpˆ9rä®»îòûýK—.õûýÝÝÝÇYk‡pxx¸¸¸¸´´ôÜsϽùæ›EQT¿E¶Ë•——ó<¿zõêo¼1™LÆb±,“¯ ÕÕÕsçνᆖ.]šK?e«Zooooo¯QÚL, …B@àì³Ï¾å–[xž¿üòË#‘ÈðððQòœ9sæÍ›W^^~Çwó¾ó†¥(S˜¢(“ÙZÕØ•Ö4½(Ï Òc›Í“ß]BæÎûñǯX±bÛ¶mUUUV«5 ­[·Îï÷v#*YÍ Yý0"Àð<;ʧß|óÍ ÃÐ4-ŽÃÑ8!$ nܸñÛßþ6µÐT& ~ç;߹馛@„¡Ž„œœœ>úÈn·kšFOª#u£^· 6Üzë­cQEQÄå§€+VlݺU÷§ÔÃ%z藸穄ùóçüñÇo¾ùf0ÔÙ´´´tÑ¢E‘HdôÖ¡1ÙTUUŽãV¬Xñþû﫪ª³)Ïó<òÈ’%Kb9 ‡};«W¯~úé§Ÿ}öÙ_ýêWú†rãÆEEECGÆ8:7A{OêuÌž={ÆŒš¦Y­Öx꤀ÉdúÁ~PTTd2™Njâ ·Ì  ¤)ÌR„¥€£ÒeVݵÅV¾V«eÝÚsÞܼCÕTBˆ¦in—›áŠ3„ÏqëÎ[ÖÝç“r¸¦¥¹Óg2[Y–ãx>,KÛöTp“Ÿ“i°éqÛ8t‚Eã8ÝþP¿’––¶xñâÚÚÚ»ï¾;Θ1£³³3 Þxã£9CŠáÚ·lÝüšÃ• ¬bw¸½©£:÷²ÙlCãü-TUµX,ú9â°ÙlÂápâ`·Û].—î&;zM¸î‡ëêa Àf³é=}§‚¡ïÚãñ¤§§Ç*’’ÿu”ðz½ÇÔ` ===]]]ÃÞêàÁƒÕÕÕ?øÁfÍš•——WPPpÕUWéêÖ“:zÐ4-555##ÃívòÉ'ÅÅÅ·ß~»Žøê«¯.--Õߦ^855c<¨>Û·o·Ùlk×®­««ÓO/ºè¢‘'I’Ëå©KGvvvEš¢(‡c4oD–å`0x²ï.GVVÖx‡–s:éééº!ÕéÇØê *ôRq4fi`iˆè ßY)i挩’¬îØWÙïïÍËJ[17Ÿ¦©cò˜Í|ž9lf.¸m§¯Çát±o2[‚yÛg‡Ó½nžçÀ@LÕ{’g¨pÛm·=öØc5553gÎüüóÏwïÞýÃþ0±¡Ä°˜6gÉënEZ”³MÂãíS Nè¤Ûþîw¿{úé§)Šúûßÿn³Ù¼^ïiVõwÞùÓŸþTUUår¹ž±¶Äv#",_¾ü¡‡š>}ºËå:÷Üsüñßýîwyyy£]»k×®ßþö·{÷î5›ÍÏ?ÿþøc]¿ ºê¾§§G¯þÞu.?ÉÐÞ¦(ª¡¡! Åúgh­FòÙ´ºQÕÖÖ‡kkku·™As:@àÉ'Ÿ¼÷Þ{õŸD"‘šššAjÕ¡¯c\^^¾aÃ]a>g΄WRUU5¬‡Ƹ¾¾>æ6¯Òà8®¦¦¦ººzØVcŒxàçŸ^/ÿÍo~3~6Å­ÎÎÎŠŠŠ˜ûòз)I’¦iÕÕÕƒ”ÏñyöïßßÞÞ~ñŇÃá^x!~bŽr34ôÕè™ø*++ãcr%˜k‰ÓÎŒ$êo¼¶¶V×AŽ”‰hÐsG¼!!]Œ8U#’¢Š dPɱ”¨I„qT d¦{3ÓGµ%ÏÉJ¿4Åþú»Ÿvôõ8R<,ÇÙÎêæ>mÛžUËKvëYM¥„œøUÓ4“Éäv»ãmYwîÜù§?ýéÎ;ï¼õÖ[ß~ûm¿ßŸššzöz„—Ë•ŸŸ?®OÁëí©E²,744$(.—+77wPZ·î¿ño$Ž ‚~Ì™ŸŸß}÷]~ùå^xáéXùê9Du­æ•W^ù‡?üÁl6ëk½ 1;;[÷²ý ëêê8ŽKÜ?£D^^^‚˜ úÚÝÝ n·û[ßú–Ëå¥Ê÷ðááPˆã¸ .¸àücVVVÌÕ5Aµ[ZZX–Ô4ýWÑh´¹¹y¤Vë§¼¹¹¹wß}÷wÜ1’í´ËåÊËËKìšR\\œØôïóÏ?—e¹²²rß¾}·ÞzëiFï‹áî»ïÃä»# Ç“••uRC.Âj‹ªö˪&È„Uˆ ƒ¢»ÍHÀëg¡ž¬fó,ímÝþÞ—‡aX‹ÍQÙØC`ߺó–r ŽS ?ÊišŽß™>øàƒ~ø¡Ùl^ºti{{û”)SÎX <Š¢Æ$nm°,KÓt‚°€^OŽãƼª~¿ÿöÛo_·nÝŒ3ô,7§ÍøŽ;îXºt©Ç㪴כy²­X¼x±¢(glH<øàƒëׯÏÉÉÉÍÍ}ì±ÇÕ‘pÅWìÙ³‡ã¸˜ëh~¥[à ۴€üã3gÎÔcUŽô,š¦9Ž;á9eâ-Ôu×]§§¼çž{ÆÖ(÷4´Fŧ4äÜhDUAÖˆ¨‚¤‚¢ég§'Zõ B v›õ‚s¼ºi[Àïs¤¸9ÞäHñÔ¶ô}´}ï9KæYÏVçÔÓqœ?~yyù-·ÜÒÖÖvèСQæ&#©úËÊ(«1µ•e9''glpišÛž|m:ôìßE­X±"Ö?ÑhÔápŒ&1Îée299x½Þ¡Gݲ,’ùôú[­ÖS›z@D„ÐÒ¥K@’$=ÇÑHIÏ’•ަK#žB r6bb½¼ÌôÔ‹Î]øÏw>¥Æfwò&3RQßî(™U8½h Œ.˜Öä9¥Ó„ýèGn·{óæÍ¡Pèúë¯w%Lˆm`l·A§Ýô¤;=˜ÐS}™L¦`0øÞ{ïéN«+W®LII4Dc.¥õõõù|¾Ø õô|ÍÍͧœ>H’¤ÆÆÆØfB_ÓTUõx<ç,œ/„„€¢0GŽž*BŒàø§Œ©9óŠs˪Ûiš±Xí&“ièèkïúÜÄó¹Ù'´ ™|CœªâÃápÜsÏ=ÝÝÝv»}¼³Oøáp8Æ[Á~:p»Ýn·»¶¶öæ›oÖ•œ%%%ã-wÊ}{:ê"¥‡÷;å%ˆçùéÓ§ãö8`ÄPˆ£1GG…=RR2­ó.v.ÆxÕò….s¿¿OŒ±ÉbMq{dzëƒ]UµÚ(¼ª'§Ðsª?ÔÝ ;‰qÍ5׌· Øé㡇ÒÙÔív2cë)ƒeÙ[n¹å¾ûîkkk›È}ÒÔÔôÊ+¯<òÈ#Ÿ}öÙY>†õƒÆq”d†¾1½ÅbZ8oÈ‘p¨_QdŠ¢Mf‹ÓåQ÷þÖ}ûÑ4 c<æÁ&è8Ó-õÁˆÅhàƒd‚ãÆo¼ì²Ëî¿ÿþ]»v%vñ<}L›6íª«®úÕ¯~5uêÔ{ï½W·Ý=eøýþ–––¶£hoo÷ûýzf›S»¡$Immm{öìùÛßþ–••µnݺ矾¥¥e ¥ê¤ƒî#©š Ip›I>1{bVkæô©sgäõûú¢Ñˆ¦©Sø`‚,=c‡Ãñì³Ï8p`ýúõÿó?ÿ3}úô{î¹G§ÕSÐÖP¥ÛÇŸ˜öÔ6@ Ãlß¾½¨¨Èf³½þúëzjÅјhMH’4ÆÎ9‘U"Êš$u›9*¹Bò¨$'èûÃ-š?Ûi¡ƒý>I!cŽã펚·ï>X·ç‹ò³hï6ìljñAôE3qš —ËuƒºåË—úðÉŠyóæ=ÿüóûöí[¿~ýÃ?ŸeY†ajjjAèè訨¨(**2vccħ!DSˆ£1Ï ‘äôCÐÆhíW–d§Úý>Qˆjšª{Ë0,gµÙû‚Ò¶ÏÊ„qH 6±FZl#l©§‡’’’Çü„z‹AHMM:uªÃáøÙÏ~öÕ¯~õòË/ß»wïôéÓ'²«R’­r@!šÂ¸£éÛ W¾‰®2u¥8Ö_tO)~Ÿ$Š:»`ŒY–3[ Áò꦳aÀÍ6c ip–X¡Ÿ ÐMî¾ûî¿þõ¯>ŸOUÕo}ë[4MŸ…fÆq‰Ch Ñ¢)ˆæ‘¤²ÇL‚3H—Ëyþ9ó¥H è—¥NEsœÉd±íØWU]×tvŒ8ƒT“hu@†2p’!''Çétž{½öÚ† Œ{)U#²Jd•H*¨:~éK$GÜÈ™Ó û|m{+)šÒU¾!LQ&“%¤([vrج©^פl€jßdAZZÚõ×_oôÃdÂÏþó;ï¼Sšo`Ì7 !ЦIŠ&* Ê h¡ä“#’ÆJvåÒÒ WÎ#ý¡`@—SB4Ø-Ö¨L½þþööŽîî™\n…ÈÐ+%!0Æã¥ÖÀ—ƒMÇ‘d‘IT&Q õ¨jR©å’Éídþ¼â• ¦ a(eiÀ@‰a­vGD¡ÞûdOEuÄ帞$²éÑ“ÀPù0``Ë©Ñm€ ™DŠ$óã\2ö‚™yý¾®H(¨(r\À—/¬}ðé•5õ“ŒSBÇ…¶4`À€IBF4…8›Xdb€¡bD2-åÉaå’y‹få|½ÑpHUøÀ9RÜ âÞýxïÎϿР,' §ìÔ 25`ÀÀ¤äSгÍ`#ŽŽ ©|Á0Ìê¯,.ÌvöõvG#aMUcJ—Skû÷ÎC•5 Ç v“aÀÓû0`ÀÀ¤ÂÀИ¡!.ž‘¾mœASÔ¥¬Ìòè)Þ¢š¦"„bÁ~-vÍ0“‡Ju7¡QeH© ˜„"*UIÑB¢HHI9N'gÇ_˜xþÜ¥ó@‰úý²4` „0Æ5«('/+}òìÚ’0–¯ œÌ*‚Jh„4U•dEAU1F(é–½$.ŸŸ›uî’9b¸?*²LÑ4ÕmgÎÎcYfR6C05`ÀÀä…ƒÇÍ]—÷ùÚýÑ`0ÔÐ$EûC«•$›YR²ª®(™555Åì÷õFÂA¤Ê9óò¹ù.§m’6C<5`ÀÀ$†ÕL_”/¾úqÓý_4öÕ~±{º—rºÜš¦%—0A'é Сǭ^¹à£ûF)‘–—å5ó“;Þ›Á¬ ˜l5|Õ2ç´<ØÝöZ‚çäÑËç-ú¨*¬E4PÒ~t²¿‰¼œÌÿ¸Â ,gE`C÷kÀ€ÉM#@1.ö~Íbb8žá,€`Ò­zIŸ cl1›&1›N²HŠc EQ>øàI’FÜùÊò| (J‚›ìÙ³§±±ÑèL¾4A!DR@–P¼4r”M$O‚ql¼Ë ?Ô>ª€¡ò„wß}·¢¢"AZÊ7Þx£±±‘¦GÔÄø|¾§Ÿ~:++ËèL&ˆA‰™Ž$×’Gï/$T”\ñ·ÎfÍšµhÑ¢JKKG¢ @Ó·ß~{Æ5`ÀÀ™]îbÂI²µÏXG’AHÕS·‚‚‚‚ÄŠŠŠ°Ùl3gÎ4zÒ€‰¹öª±Þµ Dó5`À€1@{{{EEEmmm{{»Ïç“eY>Àb!„L&“×ëÍËË+..ž6mǯE¢SR#Á¸±gG7j­0`à¡iZYYÙÎ;«««APUUQUU5MÓ4m Ê)BcŒq$ñûýõõõÛ¶mKKK[ºtéòåËÍfóx‰ qŠÝxrEIµê„jÀ€“555›6mªªªRUUEY–%IR"FiºxJQEQcš¦Y–E±­­mûöí—]vÙüùóϼœš,ΡNtBâBg© 8iÁtÓ¦Mï½÷ž,Ë¢( ‚ I’,˲,ëlOc„Š1Ž*Ã0,Ër'ŠâŸÿüç‹.ºèŠ+®ÀxŒ=Dâ©”/–’äq›158Õ R œ¢ÑèSO=µÿ~Y–£Ñh<¡*Š¢(Ê }/Äi}u9•eY†a8Žã8ŽçùM›6õöönܸqlmãÉ †•¯±Þ¸§§ 89ˆ¢øØc:tH’¤H$"ÆA'ÔØjü‚#T]BE‘eYI’$IÒ²}ûv†anºé¦±âyý™Cåk` G2dT œ,ž~úé²²2Q£Ñh4!Ʀñ„z4–Æ8^ëKQÃ0ñšaýÿ?þ8;;{Íš5ã#?èTŠ:Jò¡£AvLBM9•sTk¢i€Q‚ôvDUD18á=ÁãQOU“bñ„~eª,†1V/ ²$Ñ,;NCä£>Ú±c‡(Š‘HDgÓA„O“ñ¢¡Î©ú*EQ1Ã¥xÍ0BèÕW_1cÆØFÓïô 5ù¤ˆ 1•Üi9½ÍÆìiË6šaEQBHUUY–'Bµ»ª÷¾ñþ᛿wã¸òÉÞÍÿl»¯^¿jø?+ÑW^{«¯Ÿºiãz3C [$ÒS÷ôSï~ó®ïò'C©ãøMý0Ф7ÿõ¯Æ6é¦W;LìÄZJ¤ç¯/½m³e|íkÒ§=JBñšC:%(ÐÛVõ×W¶ÌŸ¿hí¹óÇü¹===¯¾úª~n*ÄA’$QcÊÛøTBÈ 3T]åo²O·‘HäÅ—_½óû߃ªç*ƒPLV=ë;¸Ór†+§M±Û² SZZòðÿübÖÌâ³xz”pËær¹º»»»ººõ  È؇øÏú‡ø¯±ÍiüçømãЛÄï(‡þVË • Uu ,"ÃÞaÐ}†Ý¨ªä ¯ãþ(T|q¤aÁ¢¨0ôž‘ÎÊŽZSCï¡òY©6ž ©05ÒVß~¤²&…Çñ €¡ÍŒ}¥(jË–-YYYEEEƒV¢c+‚ì?ÜZ‰ª{*Îô8ÈpŠýCMoûÐÎIüCˆ3ñöÅB¢"ÝGêûZ²«++L3cö>C‡Í ú [WW×ÔÔ´zõêA_Aˆ¯êÐfŽ4䛡uÔÛÃŽ±¡õ´WZ‡AÚá’$mڴ骫®Š/„pcåÎn[ËgÖåyQÕyèË4f†VXßÖ¼öÚk—\rÉæÍ›ƒÁ xü÷–_Y“ž=¥dÁ²ç^x)¹µ¾‹=HÌ¢ ¥s³¸s®»î«æq>RÈŸµpý%‰Ì"æ.YµfÅÂDú1>åÚ¯_wRl:¬3ÓK—_xÞŠ >ýW¬Y·xî´Ó¿Ñ dz ªªžÐSqöu—¯[6Õ—‚;w ‚ {ÅÄÜcôÏýýýªª¯ZµjöìÙ¡øð1è¼»qãÆW_}õÙgŸ}ê©§žxâ‰Õ«Wx—UUËËËc‹ð)cØ…k@¯“TJßq!Ô_üò×{vmû|ç¶–ÖÖ‡~õpâë'Üüþå¯O—–ÎÓ¿n¸~ãm·~«êȊÊ üß?‹•Ü»wÿ–ßíéh€Û¿wç½÷ÜÕXWùö[ÿسgßdU%éÚ˜ R[1Ôw ¢Rg~ïëj*«mJP §½áP}k¢™,†Êʤ“›´ú&ýú•æêú¦ö3&9°_úòVžÑtˆíÿ¢¼<¢œ¡*µ4UU¶ö|YBÓô(B¨åö êXï¿*//'„(CÐßß¿téÒgžyæ¹çžûýïÿä“Oþõ¯]±b…ªª1ův÷ßÿC=”­«ñ§OŸþË_þò«_ýj ˆÙ(éA—ª««O0œ1¹2‰u\$ˆ¾þæ¿^ÕãñÀ¯~ñ³+®¾öŸþ8Áõ‘;FµX,o¿ñªþyǶô<Ïÿäþ–,X+ÿàÏ~êq»cíììêíéÍÎÊúÝ£Crféj·ÖÖÖ/ý¼!íï|ö¥×.»úÓ<Ü8ÕcÜYwðÉýç·o0¡a¨STkÅþ§¶ÕÝó­ëh¢ [Q%øç«/ÎYuͲB÷(» cÜÝÝm³Ù<ÏH*„PåîÏö×H×ÝpÑP Mxý™¬ÝhÍö˜ÎüË×õÝÝÝííí#šá $…ú^zùås.¹¡$Ë:Þ•Ä•ïÝþnz÷†‹5õKPÛˆ¢èóùOFL¤7Ÿûç9×™ò3lcÕ!¡žžžþþþ5ÆÈ¯¿¿ÿ²Ë.ûÍo~òl EÑjµ.^¼¸¤¤äÇ?þñ›o¾Ÿõë×ßvÛmÁ`06zEQä8î®»îjjj*//7›Í±#ØúúúœœœÓQo„B!S㺋 –UÏZBíîîÉËËÕ?çååvw÷$¾>⿳Y—Pÿöôs?þéÏÞzýUØýùž~þPÙÁÑHŽ×­§§§Å>?óÔüæwÿóðÿÚí¶_<øÿ.ºàüd–M «bŒ†áy~"j°[bE‰§oâÇ©:ãhTµ*"G3<ƒ†í¨ Ú‘¡9Ž"Ã×3ìÂlÆ„çM£ì7½ŸõÀ1#ý!Ä[-þPÃóhü E°ÖŽe»ÎüÛGq§÷I‚†Ð/3¢l¦`ô]}„J$A±«2ÇñäË8AÑ4x2bÄüáϧŽU‡èj*EQb\¥#?úè£v»=[,Žãt±•ã¸_ÿú×õõõeeeú¯ìvûwÞ©WI7AŠYüÚíöï~÷»ßÿþ÷cªªªÑh”çùÓÜ ßÉ–d\Õëõ455O™’M;ñõÄày~ã_ð¿Ò¿~óæïüüÿ^sÞ*›Í …ó‹†7ý--™÷Âs#„|øï-ßÿÏ»/:˜¬„ŠbÖ½ä»<–eív»ÛížÕ¶[øÿº§ÈíñŒëSæ-9gÖ’U»}¤¥ËÎ+Yy‘Ýf©@ŠÃúÝÿ¼ËãM=©ç:·Û¸«œ³¦p¾ìu¹ÎL‡ßrϧ×Â1_Êëv»Ý‡Ã•°±«ùûwÝí=É®>e,?ÿòU‡ÅÄ)"˲Íf;ádüö]w˜ì.+?–ŽU<ÏÇìŒbrª¢(wß}wZZZ4µX,:{Åâã»Ýîûî»oÆ úõ /¼pΜ9Á`çy†a(ŠÒêõXƒ+W®,--=|ø°ÕjÕ •â9½™®išÏçN“)Jܸœ¡®¿âòýäÿõôôôôôÜ÷ãŸ^uå副'† ϽðRL´¢Ïqc$[ IDATÏ565ÿç]÷Œô«›oýneUµ¬(„UQ!ÉF¡ûÐ'Ï©0ÛǛMÀls&`S°:Ý Ø0ÍzN~‰×÷æ‰Ë°&[šw,77„h ä˜Ô´Ì/‹M@—WN°yçLgŒM Å“öe±é(;€xSÓÇ–Má¨O¼?L41cƺuë€a“É„êììÔ4ÍãñX­V¸øâ‹çͰS¹ì²ËÌf³ÕjMMM•eÙçó雞çõ(ùçœsNÌëFÓ4AƤÎ#-|It†:.„úãÝãõz,9gÁ’sÒÓÓî¿ïžÄ×GÜö¦å¸Órò ‹ÿþ×þô¿Ó/þþ·üø¿ÈÉŸvÅú¯-Y<¢OºuÞø›sò§=ðó‡ì÷ÉK¥žŽÉVmWÓãϽRß#ŽëSšj÷ÿáÅ·£#R©¯ØýÇ—ß“Gî¾h÷3/¿´¿Á?æuk­ÿâ/¼–ÇìÕ‰!ß‹¯¾üYMo’Žäþ–ò§fL÷¶Ò?žx¬¢ñ¤;dçÛ¯|°eï—Þ!ªÙ´éŸoV7æ+FÌ=Zÿ Š+L&!„¦é×_}ݺu?üðoûÛ×_Ýjµ2 c·Û/¸à°X,óçÏ×~ó›ß<øàƒÏ<óÌw¿ûݲ²2“ɤ ©sçÎ¥i:B÷U=ËàÄÇXª|cN¨<ÏÿþÑG~ÿè#CuÃ^Ö{u$—Ö‹×]xñº I¢ßþư寺òòQJÀ“zBàöööªªªØvo$gvÎgFpu‡ã=ÍÝa Ô]{°ãà¡–âÙb'ãV1RÔ‚¡Å0EUmÿÔßJjª«¢Àñ¿Ò Ùº­¿ÏT]]ƒTyØ»;›>ß—–1­R°áj2´[hšnkkÓ]ÝEx9˜ ãêÛ}RmM ‹Ô‘š9Ò;ˆ€D{Zvïux +•n2ò Oa…):Ä(oŽ1®¯¯okk«©©‰Þ #…ˆý•ª–Wð„YHRcPÿÐ4nmñIŸíÁb¾¦.^ÄÐ ˜¢:{Õ_ìË˶©Šš Ú Ïa4ÑH@Å®®®øÉ8ô†ª¨útGê"gU¥¬jÚÐ0ÂÆÐ>¡(*@Üé©~“™3gê·Úºuëµ×^›žžþßÿýß‘Hä;ßùEQW\qè‰N=Ozz:Æøá‡þå/ù裮Y³æ¦›nÚ°aÇ~˜™™ ©©©&“)F¨@ ¼¼|¨¥î°«Í°o\Å!VâHO³EF¾Ã$'T㣉N0 4M3›ÍÓ¦M›ÕÔívLÍ›_:Ë2žŽ¯íy?T¸héÌi#»¨ö70Y© •xÍ'QÑÌÌÌ)S¦$îêß¼–7þœâ©cµ4ìoÇiî‹J2l.–¡ áp8qP‘H_Kî¬ììÜBe¬TÓ$z–=?{Ú´é'õ³hg}ȬN›:m\;$555ñéo)ÌÜ‚e ¦e8ÇðÑv»]·ò…£Ç@E¥¥ l>ýôÓ„“ÉôÌ3ÏèÄÿì³Ï^zé¥E¥¦¦€Ùl¶Ûí>ŸïÕW_õz½Ÿ|òIUUƸ½½}Ó¦M7ß|³.éõ³ŒñÔ©SæÔ_kGGGssóq\‹Hü’gd›10¦d3w[|ñ ‹Çÿ)×Üö£Ärû×ïøiâ;L]zѽK/º]uó½c{ÃüÒóî+=/yǰٕ}û·ínóНo<…Ÿ•œsaÉèGvñ}?yh\–‹£æH1 5Æv¡PÈãñ°,[VVF±Ùlz.š˜)“ªªºÇ*8ÎÆÆÆÖÖV„ÇãÑe_}ûŸyF„±²Þ¤•Iº¬• Lp*=º5#èÄcq¾äÆbÚ`|Â8þÞöúŽî1|¨&Ejê£ÒÀNw®H\FŽö×45ô™2‘ëëú…3Ô쀯³®½óÌt¹¡±Î/(c>8áx•¯ªª:AÀÊ•+M&“ÇãIKKKKK³Ùl‹-R% µwt@0êèèHII™={6Çqn·Ûëõ¦¤¤¸Ýn]'¬ßM7DÒ%TÝTøôëbW#Ô×V÷Ôëûn¹ù:36¯C•"ï½öZÚ¼ VÍMŸhC´»»Ûï÷÷öö&T¤ˆÿ/¾¾`íÕ%ùö“ÙGÈ;?|·ß6÷šÕ3Æ\#gÃ_ÿ¹ó›ßüzÊé‹¢N0‰²ë£÷{M3¯];k ýP£Ñ(9Š¢ÔÕÕ€ 7ÜpC}}ý‘#Gtç™óÎ;ïÊõWµwúš:røC£öö®/U}eÅâ[n¹ù|LÓ4ŽãB×^{í²eËÂá0Ã0¡PˆeÙ˜QRGG‡Íf;e™¡¿¿_çÔãcù’XÖJã ÕÀ˜Ê©£PõÝ¢nÎ#giLÍÑ'26‡ÌPíÍ ³… M  MK`d3™A V•4lùÑTU¿‚1ÖûY–åcúƒA?ÄxËß_pzç±H‘%FQóA]1´íÍe;ªŽ^¾n½ž¡ohK‡}Y0œ)ÙÐq´0Ãf‰-zXרØÚ(ß¾¹«­5ËÍÅgÔÆ¡YÖŠÏ>þ䪜+KòH¦X ÙØõÀp†u[ÿù¢Õ\d¢UYÖ Ùrô¯’$iš6h„ ª^¨½zçG]yÇJY–4mÄP0:‹³XæŸx‡™Xâ©]»véYQY–ýéOºoß¾îîn§Ó™•S¨H!ìÿ4…müæªöõ¥ëTt²á=­m¹S fÜÿ£:|XQ”ÂÂÂ… *Š¢ ¦{÷îE1ØA–eAâ£XŒÆ¬,þõÅÜã¸åÏ8C50vÛæ©&œN<Ï»\®ŒŒ £ÇÆ'###qW¯ÛøåÈÎ3iÒi^}cÖŒéS ,oÖöõõõöö¦§'j¬eíe®y¢)Ù'•P;5ÅrÓ]ÿ•7mºÛ|&¼l/¸þf?XsNû­)Šât:Õe½é®{r§ÍðŒiÓô¡(*懪ªªËåJüö£««+ Ž$Kœí‘’ Œ¥lz4{ýhJžÏ ôyâ2yEsÆö¡fgÚBgZòvˆ#5wþÉÇu MŽù%g.^Ná윱¸¢('œŒo¦éT/ÒQÕÓÓóôÓOÿä'? ‡ÃªªDD"FÃYði£¸Âå!Ú!@$å<–V§ðLMïê¶è2«‰6ñ4M3„³Ù¼yóæ#GŽ8Θ@© ©§Sç³Í=C=«Ó·Kñ!£FIgnÚ`ltõÉvH¤¿ã•½ÝØ+ BQÔ 9 è~æùî-oã—Ù¬;¤2 ò¬ÛÈårýë_ÿÚ¼y3ÂŒ?¤©Á†éêSùì¶–µ¾›ÑX0V -ÀX€µ«´½¦ƒéõ‡¦’—ÓB/ X@’¬aŠîééyòÉ'išaXŽfXŠfªªêá–Ngüèô³ç!K›¡ò50ÖÄš˜T1Æáp¸­­­ººÚSÇwÎÐtkk+Ã0z £C0Æuuu­­­µµµ ;„{Z«?ÝåLɼ¦Iß'z`‡“aª¡ü£ýå-Ѻ#–ë®Cš:Vï" bšcylK€ET”á¬Ñ¨ð›Gÿð#Z[VJGïñtøp=OLÚ´Ù6 © IGýi ²Òm‡ÛÂŒV¹Û-÷ô‰çjL±á~ä›[Ú222Sœ6§ÓfâYU£wuuwuuZcdYfY¶££Ãd2q ¥/{GeÕ$YŒå )È”œÈ&IÓ4“Éäõz§L™btØx#555''ÇèêB¡P^^^‚2ûkv‰6~~é¬nò§"Áív'!éŽ55Mÿš»duÑ”ü1|tZz†&tÏ*pºœ Æ K¢(ŠŠ¢" vVœ–þa&òƒFdò&'ªÐQ70¢5áPI¡IŒ@¬™™µÍZxW@À·]ýþåkYŽ7Y,<ÏR Fý=e•½^²{ N­Â²,ëyË}>_CCC}}}uuu(tN?ˆnúkª1!Dß§Pç¡gnÒƒmWèù´®>©YtÉM‹.9‹Ô±ô,#ÁžZxû÷îóGÏÉŠ|}!6§y¶Â2¨4¤;!M4†h/h*°@ =ÚŸ ŠRIýÞè±3óRŒ3Ôx`Œ'ýØS±'Mw;'r‡HMo-uoÛ\P-@x TäHAý ‡AtgDÕˆ5äÈÐT0ªT€5Œˆ H,Ñ´XúäznÕ«Œ-k”Umnnv8²,S …8žž¾}ûöh4:}útUUưhÞ\Is°r2„Jˆ,‰²"MKÂô'C–DŒiša9.)Œ²OXEýÂçóƒA#°Ãx³©ßï÷ù|ÃXOœ­ðù|~¿=äƒÿµooûW¯[_{bcåh4zæGzð3i3AŒ !JM9r¤È!ƒ @&ˆ š J ! )¬ ©@H4` (h Ðf`Ì   Ê1ªÆb7ˆý *t¨ªmçoS–þdô„ÚÐÐ0}úô@ PSSF÷ïßïóùòóóo»í¶úúú'žxÂz¿¶Ð4»xÚ$4J¢áƆºûötu¶%½† SnoZé‚Åy…ŸoØÐ fŒ"žÃH¦CÖhH÷DBD"]&3gâTZ‹€9 r”¨"h2„( É I€ !«Ê I )0`T…Ó€Y 8 x`û€íÖ-G#ZÔÏj}”VT5Øy˜ôõfüB¼^ï¾}û8PTTtøðáÌÌÌ¥K—¾óÎ;ÝÝÝ;w©éèè`˜Þgžúëwo¿Ý“ššÌ2ZBU$©£½u׎­sæ–Î+¯iɲcJ„Û?v¤¸rrS$IH’Š8!gΜ©gh2p““ctÂÙ† —l(Ÿ×» tî(uý………gZOÐØ „Y®³ÏçohUiçfs™Â"4T Tˆ @ HLJ ‚N¨44ˆ D¢ÑMƒ( (À Hýázú´ÞÞ¨™“R2‡¢áˆl*\žŸŸ?ÊÚVWW[,Œñz{{×­[·fÍšH$òöÛoÿþ÷¿F£:õvww¿ñæ›ßúö·'¡J²øùî¥óÛlVŽã&Ãü°Ù–¯\µõãÍ7~û0 !„;$¿¦Ý€d…Õ›µÈ›5‘khñά“3­Á. fí”Zß(µT«ó瘦æQŠcÇBE€0h„mÖT‹cSrlC¯Q€eE’šüÕu—<Ù˜ÖTA–Û…ô‹N‚ö:;;»»».\h·Ûÿò—¿ìÝ»7 íܹ³¶¶VÙ¨‡$Ô4íÍ7ß\±rå¤"T¢iÝsæ–rÇñüä˜!Ïu··O|ërlD6G ¬ÙéYþ@Ë_ÏM¥‹2)'§}qDܺ-bfì¹™h$ŽP‰¾[?*ª¢c.ŸD_oŽRé±@mG¥X šZåŸù¦dÁÔlÚbYRZü|æ¥Oðö“ˆ>ØØØØÙÙ¹lÙ2‡ÃQTTÔÚÚúÜsÏ555€¢(z¨)A¢Ñ(Æø½wßMŠW0z.!ª¦&»¦w¨ø§Nø;ƒ1  $D^Éåhî[»J‹d{¥sæC¦GÙµ'YÀ,`¥;¶Ñ@U@“A•@þ)¨húÿ h*€0 0ßá>ÝÙŸáVJ‹ÁfV)r¸•ªOý¯ÔikF_Ï–––êêjŠ¢Þ{ï½7Þx£¾¾¾¬¬¬¡¡AQQEQ”$) :ŽÅ‹#„Êœd„jàKe~C65`ÀÀ(àwã›õ êÚEY6eÕbðØ£_4:( P< f€VÑ@S2« š<À£$¦À(@,`(‹Š;÷ÍLté\ijj8,n­±>[}n›œ?úîß¿ÿ/ù‹¦i½½½---ûöíÛ³gOcc£žµ&êVôÇÝ{ï½Ï=÷ܲeË*ÊË%1 ,] ?Ôd! 0`àÄDépxVë!íêè¾9¢ÅD/ž¶ïïªoM+œâ)( ªšn…¤ h€‰;Ò#É`ˆDÅÅæµVV„»Û{Î_F™yµ­—¼y$õƒ¶RÎæQ„þÑÔíо=;?ù÷®#uh€B( ÖÔÔƒAUUE¡išeÙ’’’Ù³g¿óÎ;;vìày¾©©©»»»£­ÅæpNðÎ75¹èÔ U $‚,I ˆu¡¬Gw£+z_<£?ÕçjÕyÒ—:,ÈPPPE h* ŽO@½ˆLæ€âæ6ûƒÔÁýGÍ".‡úy=õ—ÝÙ}y.e)Ž$®UG[ëߟøí­ÿ¶º<¶¬M-­ MêêjI’8޳Z­DZ,‹úéOZXX¸eË–?ýéO/¼ðB$¡iúÈ¡¹S 9vB[ð„:Ñ¡[ùý`À€Ñ@OýÍ"É'šÿo×ôÝ Í7-ꚟY}}ŸÕ|åü Q€9P#  ‰ J½ÓñƼNÙI§"óŽO¥Zé^øÛvÓ_v§T—שb¤©š 5MÖÀ3 |´éÍ÷ž}\AX£˜ÞÎöüÌ)šFjkk»ººGZZË²š¦¥¥¥‰¢ØÜÜüÔSOwvvR! ä8½Ý]v{ÊYJ¨Ñ¨¸ù“]‡*£¢JÑ4CQ1_UÓE Eã£5²ª€Ç=Ih„ð ž?»pÕŠEM6Õ`V $„ zÞo )4Ö6W¹wÕQ__Ðsí¡«ºnÿ>÷Â%@‹@Tý AÈǪnÄeŠ@@s_|ÞÔ×Ú2£îyÍúÆÁ‹™qÚdBXýYápXE“ip¡÷^{åÝçŸôÍ2§çµÕa- Qí•_däÏ©©©ÎÏϧ(JQ¿ß?sæÌgžyfÇŽ—\rIEEMÓ’$QµöüóÝ.—Óé\¼xñÞ/ ;ûßxj(yòÅMØä**.IK±†%,*Z#ÙecQ @Ó´®³WÙi¦h õD1§Æ„Qˆ~Q×Z×ôÎ7¯»xqª'ûî»Ï脳SBÕAˆf¢åžýówœÛªƒw¬WïÝëòº æá@ê…h(!Ð$íèªN¨4Ð6àÜ@q ›kš÷l=È»¨ï½ÊïkæÝvAŠþ=·¼(Š¡P(žPËöî~ñ÷¿êîhSò—íºpEgcm¸¿Ÿ¢è@__nF0'7¯£µE#DO¦ÛÙÙùþûï———#„B‚ ¤¥¥_yåß¾ùVMßxó­ŠŠŠp8B1泎PÃQá­vؽù3‹2—ÎÎÔ^T7÷U¶K Ú)aÙÌ)4 ¹3p >ě̒^:-Ãí4@TP¶îÔ(ó@öƒ“gÕ—·¥©vóÖÏÎáu;“zz Ä8,ª0`ÀÀ0PE‡#U«&F}§Œnè¶Þ¹RÜùÞ§îì|G†0´Tq |‰wN¥€âuFáÎÈ–M{ˆþWëœ- VFAÀh„hqE±££Ãëõ@}Mõ+~›¾þPD”–“"áΦzONAãá}˜êi¬ÊÊŸÝÔØÀsœ$I@ ªªê†nPE«ÕúÈ#PŽìPGuyùᵫW—”–þýo˜í® .!‹ÛÌáʆÞ0JI±/˜‘ ä85ÇeB‘~_ï¼B—Φ“f÷˜•H8”ë¢t6OÏ̱F#a „íäÿ†ã²r¦´tEŽT7M†)‚€Ú^ ŒšPu¥T„˜i¥=âÜ=¯;"oyõ5Ü Hʬ8p.àÝÀ»>³ xIúÞyåã¦îÈ>¼\5çz¬ÇÖ±‰’ÔçóúûŸüõÜöõÆÚš†Ê oþT(‰(ŠÒQ[au{9³UÓ4šå¡ëos¥¤LÙ¸qãí·ß¾fÍQAp¹\·ÞzëܹsSs¦ö¨6YQ1Æ‹-¢XóÄïüq‘Pû‚ÃåeÂ2ÇÝŸÃJ$Øg·L¿h3áêæ^gAvüE‡—„v“Ùzj2Ñ4†å8‹CP’ŸLnI áÔ€'„(ŠƒUçTUU3¼°æ|!® W}À¾øþלC[ÌÇâ2Õ *"›^øôÀ†¶œU —“Ê"‡Ãéóùõ»P0°ùŸ/ïÿäƒÏ·¼ïÉÌ™¿òÜOÞ~CQÓ“Eò÷" ²$u6ÖæÎ*­Ú½5î|sW¬ýÞ/¾¯G ïèè¸þúë÷ïßÿ“Ÿü$55UÅO?ýtúŠ+³ç¿¶Ä†pÒHãB¨˜bX–ö÷û%ù8Níìö‡"B0ì°YbÛ;{5B:ºúrÒݱ‹½¾~Q:-2D1,GS“ÁŒÙ R ŒR<•$i°ÖWÓ!𦥦¦zìæ@4·/¾¹¦²Ó‘ž†iF’‰,)’¤R¦Ì04M#žCþŽîƺ–®¼¯(ö©n³,ëñxjkkc7W5FQ4@Srmw:o‰+;¯¨x¶ÅæÌŸ>£â`YÞŒ9‡wüS Úº›ëÓ²ó0"Ù³~ã®ûç/Z_sMÓ.½ôÒüüüÚÚÚ²²²óÎ[ÕD%•rn¼øSf-ï~ôٮЯìù¢¢+ »Ü©ïlùüÚK¿¢XWV7V7õeä|~°*'Ý•žê€HTø`Ûw֌Ӥ4Yâ Å5ãÛÓÚÚšžžn˜h00éÅÓ¡Æ ©ªªR•‘‘a¶XhF 0èºåƒîݽ½!ˆŠ i é¡0 » RÜЛ·BL™á´°Ë1 ãõzB:•JŠÊ‹‘ÙÓfE;hÞ)IRkMEîÌy]í­žŒ¬‚â¹UË"‘°7§ ·­I‘[KgcÍ-?ûÝ…ë.,3 °:}úôÌÌÌ /¼ç™ínÖÅ =PþYM¨¡OjS}ÿožøGºÇÞç+”¹`êL–åÛZÂüùµÌT[(,%ª`Ú,³ÅæNÏ{æõ­nÃÒt[o(3oo¶Àiä¹<.GKR‹§Çò:Â)Çñ—£AŠÊ4–±EVÏLIQEQ£Wñ?€ØãghìP-A½˜¦iŠ¢èóT7þ'„(Š2ÒÒ‰ÂǪ{Jüõø4¢ÃV#öÜaŸ¢—â8ŒÔü‘~«?HÏá«À Âñ%Ç0-‡Þ:BH(EQ–e=¾|<¡Z,–ÌÌL³Ù̲,MEý¨¨› ]Ûò•.MMÓ«š¦ÛªL‹[ÓĘxÃ0àp8(šŽ ÖÔTFγ»§´S¤·£ÓLow§¥½Íd6ùº:2ó –®>û‡ïM›¿¬åÈ~ÎlùÖ¿¹æúoð<ÃåI ‡ÃÝÝÝ¡Ph ®Ê(²Œ€E@á±Jxœ”„j·ðr˜8Í”yZA°ß …²ò2N'ÇsÀR“æv„BA)r:y“ !ÕœêL±•ôûú5¢ÍÍžj³Z1¼ãTƘb¡mff2¬‚T]]JááAs ¥©5PÙ¥Š Á@˜Îc‡BæÃŒ^ü=nÒ£ôNCôª21ÑdNk³±²:d“0õдØ—d{hfò¡kÖ°7OGzPÒæ‘*0t› C’«ÔÆ¡÷éÊмå£L÷=l+†>bÐgýÿÞÞÞAL&Ëòü•y3ò¹–íþ¸³¹–¦éÄ –ªª²,/8g]쇲$~øúÓ,ËÆÔ:WM/Y–W4k¤21â´»R—¬¹Z¿òî+Æ;=é±+#áã·_”Å(¤åÎ_¼j`lû·¾ó2Ã0:1ëjOšåW]º!¾EišfKñ&~J}åÁh$ØXua‡í·aÑXs¸òÀNýAñ5ŠÃû¶w·5Êbô4i!d±XÌfsL5›Í²,‡B!AdYŽñº,˹¹¹ééécUÕh†èì ¨{#Î0•iòy-’‰Ñ0…$ÄõIöV5­‹)dÍ)vÃqMÓº)¯ªª&žKs¥¤›©‡ÝéöÔ<0uÞÂö¦" 4Í´VWÌ\ö•/>ÿ¬½¥I‡:ëkYÞ´üªÏ»èR—ÛÝÚÚ:h‚ëãÌfs0ÄÓ4-ËrHS£ cŒ6N IDAT D’ëÀk\uiI|f݌ኤŸ‘Ö¹'ƒ¾ ¤¾9NKKST¢(†a$IB¤hø‰—?{ôcjá‚üy6‚ˆ¦M#!L!}o‡ Eé׈JŠB#@€4¢j„h#„a„4•h*!La]Ô'ѕڮ ŸØßüËkíùÙNU;n5‰‡¥ØœšX^–8‡%桤8”䆒åHœ:,›Žô«¡l7láa»(q«‡¥ó‘ÇízE‰F£úú¥CAxžO¼¬K’˜Ž§†åž _W+Çq1ÖE±¹¾:F¨ Ë9=™¾îV=ž\¬J‚ d9½ú×Þ®öH$BQ‰œp.D£QM‘ô¬^±‹›#sÊŒæšÃÇaŒ !’$IŠ6¨,Ë*ŠBè)S¦Ï€Ü™{¶½'„:á í·áõ@’¬?Hòž ä¬ù+`þŠ7½,„'ÜÍŒ¸vÓ´ÛíÆëÜ©ç;礤Øíö®®®ÊÊÊþþ~]HU¥  Àív©*‘5‰„›¢MåæîR!ye Ü/€"€,"»•dã²pØlb†Ñ{@’åžînA.¼à·ËÕVW%ý‹Ï»ðÓ͛ڛ2ò‹ÊˆUd©§­ÉéIÛòæ+B0\ºö’K®Û˜›—'Ër[[›Édš5k–®T iZEeÙçó9Îc™µ¡0F˜>ºÃ?» uëÎ}UµMyÈQ¼˜'%¸c`‡CAò²Ó¿²t~ò“ê@øjÄj± ŠVUuË–-3fÌÈÎÎÞº¿ì·kbnÁš¥éÙ),‘‰¢šB … #•h’B$…` …XŠÂ4(š&Ê„è%i iQ ‘d¢Â`DSˆ¥0¢jDÖˆ¢p™ÿï]ôâá7³m„â 1L¦&.Ìfó ^ÔS7Ç_dYÖd2%8_×u†i¹S]ÏΟìëäy^ÿ­¦iÐÝÞ, QŽpófäú:beô:H’T4³d@"¬>/ P`4²ûÓ㵸E± ‹€p7”Øæ->··£ƒÆ²¬¾«ˆ'T½<ÏK’4ìS€åøÅ+ׯþdµ;W]òÛ7ÿS# ÃȲ<¨ß*íëîhÅë«Bˆ¡Exžß=èð÷õ”íÝÍY°ÌéòÄ®—,ûbçñ3z°,kµZ%IÒu¼ú¹iLÅÍ0Lfffjjêþýû9¢ª*Ïó‹-2[l€T¹­V©¯C¯#½P”h$DÄHTMQ(`êk¤gØ£Š¢0(ª*Šb]e¹Ïç+˜:S´ +wZÀß æ,\¼eÓ[ó–¯j«¯ÖT•3›jËöÏZº²xñW.ݰqÑ’ezÔ{I’X–mjjêéé™6mZYYY4]²d „ÃáÞÞ^}˜ÅomI-œÕg¨½ýb„Ø0c'„—ºö„¼¡¤€D@€ŒJû‹ŽîÐ ¡€Ï”“^ÝK@0Æ@ DñÉ'ŸÜ¶mÛ/~ñ‹T«¡Óq¹gåZË:QgÓ„DUTËOS,4F¢‚DYÊ€121˜£KcIÕ$"2јÄRˆ£1e-*k’9q˜’dUT‰?"wø”é…ö6UزØíú8•íΘŠŒù «¯'BõF¹ìªƘÄÍDBˆ¾þÆô¥Ã^²LÉÊL¨¹…3*¿Ø‰1ÖŸ¢Ô…B¡ÚŠƒ3KÇÊ4Tˆ•Ñõ{iYSXn Äy]E™Ýf$ ÑÈ¡½;L&S¬V4M›L&›ÍƲ찧˜¥ËÏßÿ黺@)˲¬ÊƒZ­G‹ö)úOvoݼèœó—œs~¬@ɲµŸýûuýÌoP¿µ4ÔÔWŒIçúý-‹ÍfÓå¹øöûzíÝAÓôŸo[{ù̘=°ÅOËÊ£h†¢¨A¯é„c‰eYŽã¢Ñh4Õåo]«?”¦i=nÏóK–,aYvëÖ­k×®3g.ó”¯<ÒÜ’>{±l¶F‚ýÑP(jbžQL¬"°j$Lhõõ::kCSç÷úTU ‡*ÔTUÐf[!ÆápXD³Í 4·o×ÎK¾úµœ)mMu³Knßò÷ÙR¼«.ºôü‹/Ó7 úy(Šz/…B!I’*++ÿüç?_sÍ5_ûÚ×¢Ñè€!r, H€NØf2ªÅfOç<΢©ŠÌÑ£"TQŠfÂÇMUô:ƒïQY%]ý’,Âêëj³Ú’Þ®5¦ò%@xž×§ÓêÕ«Ð ë±qÅöPa†»(Çîµaš‚°¢, < AI¨ ž––YQAU  ,QAI%…880€¨‚¬‚/¬šM<Æ}…¤“çM<ÏŸ¡8CÓûxšÔM=ãmßcÊ·‘U?~³ØSÜÞaÎn2ó§ù;›b&<„‹ÅÒÝÞ G •åx§'] ùô2ºúÑ–£%†¦L&“ÎyÇÆ²oWŒPStÌ,k4PUÕjµ@$‰D"ápXçT]B…£F^1©Z–åÙ³g³,{å•WZí^ëÜ3“o$èg±fâ1ÂK&F 3RP“‰Àd£[§dºB\öÁÏ€¦8¼é€(A !„hÁPPQ•ÔÜ)­åw|ø'=ãóO¶8-dÕ’5eæ²ó.[i±Xâ‡BH’$BˆÃáЇÜòåË—.]ª÷Ï€:ó8âX÷"žÍ*ߣ2"RÙΩ%Ån ?*ã pTþ¢¶§_ ñ€ÿ(ѤÐ9s3¬¦ÑÚ)ª¶½¬-ª™5‰r§# €€ÉÄÛl6‚ðÊ•+.\¨i¦è…¥³Wí}½Ë—nZêuË@DA`SŽŒAT@T *E‰–æ(¡F%ÐL ð4°4¨DDDñ p4p4 ¢ ² Œ‰ qºX{ÉlÆbw 5à<ªcˆÛæÄËg„€~š÷WPcŒ¸!æ¯úÅ?‘8¹Øñ·JpÛ‘~~ì48èáøŸÇÚ˜¸9'êÀÿv賆;°ã²cözLß«(JjNþµ­¥Á×Ó=«d‘þ5#§°«¹&¦´d†çùÿŸ½÷޲ãºÏo¨ürçÜèˆFÎ$@Š M&)Фd9Ûg<+ËGÒìÎYY–×>k:{–ZϬw¼;gG;ë$z”Àœ@"9 4€Fçœûu¿TñÞýãvª+õ@ÉÌ:8}ÕU7×ýî/}¿É±§Ö·²®©ïê4[–eéº^×ÔÎþ41: Ë2Ã3—¦‰I{L:t6Ò²¬ ¦6wl›qI‡+N¥+òX-ñxœ #‘Ïó—ϱ,«š›âyÞU)Ïó±X,‹Ù€j; {[ŒF£ÑhTÓ4´’îGS ’P¬ •yêBs¹\.—Ëf³N@eör!ÃufUe˜ÚØØ˜Ë«ÉˆI»nMBÃ]ÍsñˆÀC- léPT‰jPɆ…-ˆÌ¬&}üîI¸ó‰T*µ07Mˆ•,-Ìe³¢\.§ª*Â\y}ãù“›…Üb:!0Þ¶Y–#™lö½÷ÞûÊW¾b/!æ„Ïç’Éd]]Æø©§žzñÅ0æLÓÐuƒÂìZBJÂ%ÂÕûE6ý*s^W3»·6a\ìˆDdþáuUïžêCJ BXÈ6ÔÉÅ£)€ÃhcsòÐ¥©D²äÁSJ)[T¡”ZÓÐc†ièåU_ýÙ';›=}BÄF@‹Ð<ˆ9@(¤”Z@2  „J¡€‡ÀÎG dé&²QJIÀ€žÙP²sk‡eÓT?•’/²Ò)‰X–ë €B,‹l[†®òù5íÙ»¯]Z˜›±µ¤¼Š—"º¦!É”rK¢xýò™­?Ξ©oZÛ}餡ë€R]×K*jm}ï@÷Õ’dAH G6!vI¢”RB([^ý¶(5¶o¹uå${ÌÕGÖMˆükÁAI²¢Quf¦çúåÖu[Ø5 ]çŽ@ÏHBæÆçi!«ÅÕBg_Cs‡}zbÔÔ5J"îIñ6r¹ú†MÓr¹\>ŸÏ._ P Ã`º"&ŽÛ*39«ªvîüù˜1ñ™Ênn3,C0Ìé8βdl@AŠ M­Œ©^ê™Ök;fäºÌÍ[[¶WVUMÍL#ÌQB¦&'R¥eªª2µ{C}=äðÄü¢TÑCÊdD¿xñâÕÎ+k×®Ë>Òš¦Š‚°iãžÃ¦¡G# ¥Ô4tJ) –E€j!ûD @jæÒÙû>òÓøÆ¡Z–¬âÑtY=£"É[&Ï …B.¦Äî´ê¨,Zz€’f[¤DETå?ì1ÎORwH Ä8‰›ž´¥ÔK T)ÖJ616ÖŠ­@–R7Ñe ¸$&¹JÀ`ŽÄâÀ•%yÛaÀGrZþ0\\®‚ÛvEºB£…]þ+—… ºÚx-m©­-¡+$YGoK—NAÓiW6ûvO ¥ Õv°õ„ôv%ÐU;]Áüéʱ‚î×—DQÇŸèŠæ8v¥Î‘œ3Á„¡kù¬ºÖ¡Ï}“y9ƒ‘Ã/:fD×ÔšÊJ/]¹šžŸÿéÏçeyIÒ“µ—®\ä%5¬ijŽÎtvÙ€ Ëš:»»9^ÐÔž‡Ö²›}=ÝÃsÚ¼eðYUW ©øí½È"´{lAYœ@ˆD#!¤Ï7‰·%Ú“ÚóØO±ßk×´]éºÙ?Ð/:ÚærFÿd^”€¡k®Zú¦ “ªÈ‹„µ©[¹³U¥›ãYQ² ]sŽÛLFíž—ebŒ¤¢¥XXD,K]ÙBÕ°nŒ¦KËÅm[w´9ÄßcO›S†Ê 4xQ1«Wa÷¦5ÌÙ¸P(Ø*TMÓ˜‹¯PÍåË0 A8ŽïT·üÄCabY&),pf–“8‹—- ëà u¡§oŠDFKZò³éöu®ÏÍÌMO•”•G"QÓ2d%:::*)&SJÓé4HTçÄ 11MÃ0t]×5MÓ´¿ûç×Ö>ù«ó”ùP‚± Ç™_¹º)¥Ô²E†óƒ ”Îf­-u"w_©„ªe™„Þ } µL‹šC¥®þñ– ›eq,»¸,«°tµ¦±itpp¨¯—rB_AÒó¼ 27¨…ÆJKKgff˜-ÜT]ׇ®ø…ç‰Å¢¾aÜE®ôûk/çÀ§×O¼„ʶrBW'€Ë«B‡žºäᙳE@¤ÎEºìIWj$úQ@)E2åçRáPÀÜmƒ„P!°c„PJ–¤Nj+P©ý]¥Æ§4h7›.ËsìÎr!RÂôÅ+NæÈàD!pëÐXK®ø”:i¡ì*ì¿ÞîàÒKʨÛZ)p[AΨ2lùÕ>U¸€ €„ЕªßJº¢ùË“¾$ûÂeý„=_ŽydÍ[p¦}Ø›¨ïB¨a5k–ˆÔB~°çzD‘!„é٩ɱáÊš%ž‡ªºæ›—ÆAà8BÀqœ(JÓÃ+`©¦±÷úÅuËÎM=ׯ A`T ®]S-äÏ|ü!Ƙ1`ŽEѦKt‰è²,ÏÏŒwž?¹iÇv§}ãö±áþ"?/§Ž‘uÜÖohàzçù™‰1„sDây>›ž’ æg§/9¶íáÇXju]ãé#¹x<¦( Çq¡•œ«.ÈA-óªÆ°ŠÉ0Äb¨Æ‘l u‰kwùb€Êè‡xž/´¿ÿàÒ¿û…½uëK›)²)ŒuZ¯k©\ÓÖqùÌÉm|&ŸË$JÊZÚ.ž;#%Ë¶ìØ™L¦²¹\6›™œœRU•)¥Óéòòò™™§XÌšº¸¸xäèÑÏ~ö³ŽOÃþ||F•ƒì¿ê°™O¯­Ìêö$‡äöÐÞ„—ýimÏF'YÏ µêŠ¥|;ž:}…ˆ©c«·Ët<¶Âzjã:uT·,eÚ§­n¶•ÅpùmÇ랎øí‰ÀQìmk*] R.4û¹<Œ>ô‡d%m¡›ùÈQ׊ê|x”œë0\töùÅ1 v«–ÔÇ©øv_‚Ôã¸!y: !–¦i5Kú^IV~õk¿ë» Z:º.c»6¥€ÌâììÔøHEumݼÑy®ªn ûïÄè€$I N,ËrÙàÕB¾óüqF7ÁÜVYª¯$'Š"ˆÅ.>ܶ~‹´lÙÝýÄs^8ô…»e\šzBˆ ÜÔÅôð#ÿèé»q…q3±¨h4Ê\p½µ,ÌÏ^<}D×Õg^ú%vgßç~ñÈÛ¯r‡v|ÖÃڦ䉜8Û£%ª Ó´Izm5¯3«Ì’äudÿf˜Ê• f3ÿt°çwú9UUÇÇÆ( /ÌÕV&¯vݪª«O–”Ž –UT]¿|©¢¾pBeeåÖ»2éô‹+eO UUUÉdrqq‘ ©6  ‚päȑǜ…ÐPêúŽ—Gs¥¶éþ³Ù¡Oñé'_åÄoçeÅô.Mæ`}¸oK›Íò/Îs¢³Lû_e& áÁä´¾µ)лþë(b—ìm¡ówßs±/I/t\ÞAvÞ÷–ì|Ø;k!ôeUô.žZG›aš¦Mú†Ÿz¯Ú5k™œ–#7$Iê¿uÍ~ ¬²¦¡e½K36Øãâøuõ1™L–——WUUUVV–••%“I†^ŽsÀÒÅó¼¢(¢ÀŸ:òž}ÓFÖp¥úŠã ¥ œ[×ÙLO޲FºÞ•D©¤¤¤¼¼¼¢¢¢¼¼<•JE"[mî2V!Œâñø@÷Õ…ù%jåX"Õ¾é!Û5×;þ¬=[Ö¦žL eÁX·u‹‰®–Elí®kÛ Ê”“h™¢˜éŠsù<%ÖéS§þáïþvvfÆ4Mb™ÉêÖlf™ùÖÚd÷µÎö›Ç†âÉÄÌÌÔÉÇjêjÛÖvÌÏÍÏÎÌ,..f³™|>o£f>Ÿ_\\¬¨¨Ø3û«iš‹‹‹'Ož Zºöß í~¼>•PïL á¡õîAÛ+ð£q”îâ’ÛR²·%¾ Ô×¾ÿ¾„û!âðãå÷•$\h2ž®Á W½»FøQÃ÷D„ÙA´Æ®ªCŽS+ì „èº^ÓÜj+-¯œ;a3¹J,Ëj_¿µº®‘=PÓØ:6pÃn*#aè¿ÙùðÞgì*öüÔsN}/ î b6–e9‰È² –©Ž‚‚e!„Œ½}¤ïFw×¥öõ[ý¤p Õ¥i0M3QZK¤ì&F–!V^<ϳÐR›4ÑŽC]âÏs²g@ÄØÎýàée!µ}ÓÎLz6¿8ãê—=ZS;hN%•ÛwÈj™·³Ù î¬8v¥®c(£öµs·™¦ÉfÑ÷¿÷Þ{;vì())!ÔŒ•T–Ö4\=^ço N …†¦–£ï¿_ßÔ¸¹fAHdÐl{9Ù~Å…Bi}+++§¦¦l!•a*ÆøÈ‘#{÷îµY!]ŸŒ/Ÿ¶wß/Xû©„zØPƒîx÷tçåÝ%íåëÅ!ot¿ë÷ QÏ Þ¼.®s´ëãq„¸^,tIÃ^èòŠÝö+®¦:Ûìjª ü\õúv0é}ozGÕ9A¾¿«g/\r¿z½ÕQ@]kƒýÎÜXZ:–¢G®^8uýòéž® =]n];ßsíÂËgΟï}†=,ÀÖÝO:UµC=]^VÖF÷c7ÒÙ¢¨(ÊÔØÀP_·}í–‡ Ó²Žœ3XS©<QÍá¹h}= zŒ£kªw®[³¶¾<ªˆa¼LÌĪf°êœqÛŒjc›í.Äü›&&&.]º„ÂëºÖ¸~'¡³¹\9þч‚ kAVuë&ÝÓÓS+äoÊb],æ'•Ïççççc±XUU•ÓµXÓ4BÈØØØµk×ìwm5ƒkóLËøSê§×'‰©!hx¢;g$óYpé:75–ˆ/q ù ÍP¦«tv-cßç™Õ6‰hÚÜÅSGlQxÅ  ]!âʆ–掭N¤ƒo7‰0V;5º0=j[ˆ™éT¾pÁ±òØâ,@ ÊÇx~MeD+’X]"tõM ŒÎ›ˆÚ<Iûss~ÅLluz§ÓiY–yžŸ™ž®hÝZRÝôôoþÆÇßû§®¹©¬!qˆŒAPUuff&™LÎÍÍ FìÀìs°kO&“±XŒ±!.ÑûD£—.]:|øp"U2½ ›j®¾¦¢$•ð¤(ŠkÖ¬a‰tî#ÁôǨw‡Ê<î „±îøuB ÂPÒs:p ÇqìSñ•ÏX&|>ï-—éÑ%<9ñɲü-ÎÇVF5,bWíEDÓ4;;;7mÚTVÉOúŽ IDATVFD‰ÃÈ2 Ý´8Œä®¼(C·µ _Wvu¼ XË–žÛ¥aØ7gDÒ´<Š-àÒ¶N! yü÷·®qÞµ¡R3ˆëÈbšf.—óÑšR ¡··÷âÅ‹>úhCCÏó,‘‹-Ð, ”¦A–\)XŽÏYXX8wîÜžzê©¥¿*Ȧëkkw N1›”IÈšÖõK€Ú{CQQ]VOEQÆ{l@D©¬ºAÍÌÙJA8ŒF{[:6Ù%÷Þdþ½®ÃD«·Ê2-F°î|Ø.ÁVüž8øÖ~õkN0³×**‚âûæÕ‹—Ï~lé…T*ÅhŠÙô3nš®-[‘ÛbÂÄÙh4zêÐ;6 ÖmÝsæÐöw-ð¨L™Ãø®šª T‚D§$O ,BI*W,\!r Z/oªâo ÌgsäÌ8ëÜ(%–º º6 ÎÎÎÎÌÌ”••1?2QJüü|»±ºòýoÿG.QI5€0bÛ “Éð<ŸH$r¹œÍ”Ä,©¶LÉN„Š¢°lÍL'ÌDó‘‘‘®þÙxyMyYÙ†Ö­¦eAàÉULÁìÜì‡~´n]GGG‡¦i«žÿ*Bxq!/.dòB²ÀóÂÀÈTMåå œ¡¯ y„Ô‘‘‘òòrY–ú@ŒñÄÄ„,Ë%%%¾zB{Oñî°Ì²Âvm¡MDîRzðíUnç]b9p˜ÚÊ¥OfU{}dTU%„(Š¢ª*ÆðÒéÓ·&[7ïh.zGgÛÛÛ9 !¥ßx£bÛ#í•Ѽnð½wïÞ%üÐOxA%ÄRÀ~Ç÷ßè½a™AÄR3Ù5Ì ·˜ž;}ô}b„ÑÌøP4¢¸ìL‡9??æãtM‡Š’XÈflZZ&“I’t³óìÔøˆaBç§XiÎv"„t5öãš®9¥(¸l-…r<‡àR¾¹lzîÌÑ,Ëâyj/<–C-Nýà5ˆ0;èdÓ³ ¿1Æ·k±D%4…,æPà¥3GE‰ÅbñTŠƒ ‡Ãý7{oš¦¹4nË \„yÏe ÇeÓs§¾oF!ÀÔ¤!EQ4mþè¯!ÄQ@ÙB l„Ë“Ðê¼f*63À‚– gYªŽ€0ðÄŠñzu„ð—FäÆ2r¡NÍAüÖºí4d°c}UÏðÜBVÇhÅA9ŸÏOLLpgY–,˦i³Œ«©*±ˆ¥y ¸ßÅÅE¦`ݶ%ÕÖ3³ÿªªÊÜÄØ÷²°°F¯\»¹ï¹ÏçU#Ókëêñ@NÙùùôðŒqkk«+…í¿j@Å7³¨_»Ù¿amSño]»Ù?½`4–r”9½x³+6v´ùúðØäG'®VÔ¯}ÀT¾<ÏŸ={VUÕÇ{¬¦¦Æ–)9Žëëëëêêzì±ÇlŠ8—¤â«-ħÓé7ß|“y·ïرãᇶuÂÅø×qwæÌ™7n°s÷K/½‰DlqÐ¥¦öZþ!L•$&Ö¡¾'$Z¾ÿÞÿ½ßùÆôÔÔÚµí}]W‰_S[Õwóã©H ¯7Äaî¿þó»ÏþÜëË“Ä2­‚>19/)_œŒ—VV”$ú»¯é\¬uM½Y˜ïê>päòçv– Ó=csí­Í–¡19ÍšÉcEàôlæô‰çg&~î—’¥åYÍÌ[€ã ¡$DËâreb;õ­[·êêêDAL§ÓŒÓ•£Ú+ñŸÖ=üYC‹‘¾›3YÐÚT5ÐÛ—jhÅS#g}ì©'º®š‘ÒúФa,ÒÐuëÖ9sfqqQQçú)r||˜ƒVBH’¤©‘¾\.ÇŽ_^1ækƒ1¸y…-°h4êTHÚgŽãb±ØHo3v²­–ÅbÚ+DQ”l6;Ôs•ÝX¼&³³:õ<Ïëzn¨çªªªöîìê² Š¢°òu5;Ô3aš¦ ñxœØáO–eBÈÌØ@¡P`*Äh4ª( ónÕ´¼]‹W—ƒ1®ªª’–/[ŒfÒöäpo>Ÿgp囨 #2¥w¡ë™`½¶ó¤²H$Ó£ýŒ€×±•$‰•V¡…QÀAËp !† ±jQr" ©É#ŠMªäY–LrܳKYÀr¾w]×+*«6nÙAÉÉs×g¹eEÙX–5;7+‚ªJKKš›ÖTÕÔ俦áÈКUƒs+NÃLá¤ëº,Ë6=“- 3|æ ŬòÌÓ›.)¥Ó£{¶¶€Žžé|û£“/>ýˆ –i¹H;)¥‚Àoß±ýêÕ« Å/îK@¥´Ø @¶¸Ë«ë?8yírWOc]e¸Y™®†F&'Ì5mÆ”RA«êš?8ÕýÁÑ‹¢€VQôhZT|ýšµ²¥÷¦vþIÃT¶µ ýà?xæ™g:::ìc<77÷æ›o²ü‚Ezœ[–UVVÖÞÞ~üøñŠŠŠ7:•Æ+ÔqÁ¦»-[¶ôôôd2™Ý»wÇãqçqÒµN¼Û=Û¤LÓ´,B°EL]N&ªÊªÕÌôÄìø¡÷öxôrA›ÙöÓÿ63ûøÏïëð‹Ïï;úÁ»[vT¦6"-ýýÇ?˜áªçú§*ªåXíú§Û*øÑ9$ê?û‹“gÞÒÄÁî)+;ý—¯îŸßñÔÏþ̳©ª 0ÈÈÀ¼`˜Ô$ôÙÿù/ „“jazJ5–H pñ¡¨v¿TU­©©Q5c ¤·ÈB×嫟fß™×ÿé¯_;ºõ‰ŸŽGàÑÞ¼5C~í矒ùܱ¾ûýY^þòW¿Þ^!æRa$I&“ÙlVQïöírs:{‡˜Ãí1g›¾+Ò~ÑNnê4º&”IoŒåŽÂ6P[µEÆX,&Ë2Óš2êSßËã8ŽeO³å*¯…ÂöªµS~:áßÙªH$Âêµ[Ť%»†.U »˜ï± ùö˜0×$†ÖÀϧŒ:«Ë7&m³6°u Cq§E9sÆ\š+‘L•C:A¢iiäd8K§QMDLêQ)ŠSáÈY¢k•ñÂæ:t¶_a_1!„Ùàyžokm)XJMUyrx!§´Œ[„PE–ž€TU–oذ¾®¾¾´ºúÍ¿üc³{|ýîìåÒŠlZ“lÃ*Sk±C;ˆ³Ñ`Pj_,>gI,Š,hga!=88¸~ݺ'Þôö¡Óotòñ‡7I’tÛ#.ùœëºžJ¥dYžŸŸgö û(DõGš¾ (J´©}ãÜÌÔù›ÓÖj)Š0ÆÑxIS[…¬Dìá‹Æíë6çsY]×ÀjÆ9ŽW"QQ”ühÞïo*;¦R©Ý»w¯Y³ÆLföEq×®]›7oÚ÷½1ÃÔíÛ·÷÷÷oÛ¶-‹18tmÜ!^à}j,Ë*//ߺuëÐÐÐÆÙ‡ëÚîY¾h!BQóлïW=ô¹ú8==7Ñ76ñÙÿá›…ãÿµk~6&%ýË¿Öùæ?¥uòì÷íÝ»›äæ©ãXùÿôo~ý¯ÿþõ/ÿÊ‹¯~÷ýçÎ=÷¥ÿ±lîøÿwà{ÀRþüù/ÿüÿ¿~ùÄÁÓ{žØ™Í昖@ p˜çyÀaª=—O›†^ß¾EŽÆ!¢€1‡}ÁãÛ¸EQEÑÞš ~íþwþùÿþƒ?ü_Ê£Ò¿ò•óì®ó‡÷kœhè£r’$^=õî°Ê·&«-Ý@‹F±5ð¾TAa¦¾ñò^kâªFY—ýï6£‚ÃíÖÆçùÃéjdßEÑY‘vilÿeE…¨¸í2æ9›çl &aE9 ¨ ó˜/àñp‚‡ó dCõ†$±vÚ…;‡ÅÖ…:™ B@(ä-µ`ÐPÖ-d@tbªr”RK3!&šÍNÅž•¿$kÿ¹4ÿ–ªÆËRRkÁì “`n)ö´©©)™L..f”x]SõX׊ÑÒ’PU­¡±aëÖÍ%%%m­-ÕÕթʪ³¯þ¿=ßýëºäN\zú™Ÿþ°W)d-æ»m{?0!ÕŽFuÊÄLre#ÆdSv®* ƒƒƒÍÍÍ‚À?²}݇'¯~tâÒc;×G"—¶À–ã]Þ& Ò",“ŽlV@Q¢JCÔë2ãûé:M}ö]Q’EQvjáBJXÆW\kï‹Ë4ÍŽŽŽêêê²²2§­Ô4ͪªª/~ñ‹öÑKÂàZa¿‹¢øÜsÏE"Û È¹‚Y°M_ß@6›ó]Ù¦inÚ´©½½Ý•W9ˆÁõWv0çyƒz$Yý{¯|õþÓËï܉¥Ú?Ó~`ÿßi]úҳʰWDˆÅTeõ™Co;såÙ‡×$›ŠÇDŒäD‚à ÑÏ´oüè{ÿ ü¾'?ßyô?úÓ?¿Ñ5úÔ³Ï<ò™‹JuÆÍbAx b ª)‰”+˜"úÆ_üíäPÏïý͢˫*Ïa„;*éÂc³¹jšÆ!FD}íÿ=oH%•uOnìøáwÿŠWÓ…žS=ƒü¢eõMÎ)<¿q÷.ö¿¾¾cM}U’çE„—Îøš¦Y–%BóƒwC÷FÁú§˜åÅã@ÖòP>§‰Ý»ð¼ƾ !ÎðDàçCör„¸Ä;ìõW§;P]þzAAh.sŒs@0‚œYÐLÞÔ€¥¬$èÔT«Ý4ˆahRª¥‡/êüõTjéÆù‚\P×TPiƒS åH´¬´´¤¼¼œ)=t ÔU—OÎ.Ï#Ó4EQØ»÷±êªÊ’’”"‹Hοùê±?ýzL‚s}³‰~ð¹ÇwT•Nåðì<Öõ5;‚;Õ¨ÍDsö“…†177ÇŽ‰õ5ÛÒ™ó]îöí{l„¢“˜‚éÀ2‡â}ä‘t7€ ‹ Xt>@Ô¹"²@¨›€Âùë)!”êq^ñªªa’©]'³ØØPb ¯Êɨ,p¡ $ôÍK—A)­ªªºuëV{{;Ó4zh×Älæg~ek""µm\;§)~úêP I”â ÑDü÷Så#sZi"&J˜™TB]]]ãX,˜½Î_áÔzÅ'ððUñMOP¬wöƒˆ¨Š ‘ j›×A·T¸Q¹Èþ‚P®®À4G_° +ÏaˆRÓ¢¦aY5¨©lDLjb9(䈕×&€ÒHîâôÐ1Üò ‰îJªšGŒBm©“¬ÉYÃ…H)‚”q¼ ¬yè¹fpðð‰™™ÌqÏ?õSÖ·Y–j™hGÞ?ù‡ÿ¾ kIÌ™9J0Î Ìê=ïW%b% ©ÉÝ»oÍD0^Ú|t]g§p]×™fÛÆB« #Jd™Ë嘩BøðŽM&¡WnŽœºxãÑ›˜Fá¥tnnÎ0Œh4ºªå>ÔPö2—„ !4 £b< ÔT5B  4·ö-Ö(¡K“.Äròºvp–pãôéÓ»víJ&“ìïMíl¼5í[ÖØ¸iƒ³15­ëjno¬€ÒÓÓÓÛÛ»iÓ&fóÕëºfÁµ0| ‚L°^1+ŠB©|a,yI¾¼¾l^3°Ï*  ™ôÒ??÷l_R” Ú© aÔ÷Øákû &¶& ˆnR‹X± V,Äab ,„)Ħ¥[‚RÉ™x{1µ1™Ü sçKããØÂ"GxDÓ¹ÌU"DQäyÎ4Ủµ5Õ?÷3ÏöõVV–···ZfÁ2I”Ñ[×NüéËe¹l*Éq:¥Õ Š(0³€G¥iƒŠ“ŠÌYr:{'“IÓ4ggg8jƒ"ððŽ1¥‹ÝëÇ÷ì0LÚys £¥±¾¶Ê¹Ñݸq£¢¢‚yä=Ø^¾´x¥/¥”è™mm Á"5¯†ÛÚJß?=¸„P-ä×׊ïHqÛј £ 5MŽ9”ÙlII‰išsss.q[éå$¦” 9,J°¦4B›Ë‰© ³×ÓéôÀÀ@YYYKKK1†ÂûP)€ÀålŒ!ÏA¡e™ oAˆïhL „ oL“„B!•+W¯n奈‚©eH±–Üéë?iW8å½WÏæú°8½Ãmr+ŽùH¢@°,â+}†¼ –].™›ðÒBššš***òù¼ocB5cXå«Ás‹GŒÃڙɔR Çáx"ɲ­z•‡v_‚0’RÚÖÖV__¿°°à¢O»ƒÅ¯(,Ä©E÷ír^1D A»s{8ÿT¸½–ú¤ïB ¹®"ÿFBÄYßÄ ¾Wx¢‹¡)èƒx¾€(UyÎ4,C‡€BS'H§C¢,#ÄQ*P’§€ò(79ûÑÂôžêº]H=Äý<–¢|®ŒŸ’ÔÜ­¹.Ž«‰¥äêªú’T‚%׳–Lžc$"†àÊ?þ<7Ú¸¹VD(‰B"I”˜Î ‹rd&ÇfE‘ÃшÀ`R' ³eYÉdÒ0ŒL&cã¶ÀÊ| ¸eÚá………Ë—/;!ˆ1¾råŠ}'vtt”——‡dòx T¾À“ 8HBµL‹ó.¼m©eYÐähš& äŽK ÔZ"éf4÷·„î+áËAèòñ§K UÊÙ`lo !ÉUœEÙÀ<ìöŒØ!‰ëWµ·³[…›ÍÜgJ)%ÞHSÛDäXWùŒj ¼¼<ÄÁ'Èè1Wì©K#ê›Ä&èTáM“$×zo¼‰ƒ‚Ô›ÞW|}‘‚LƒÐüwaÔôý”‚”ÆÅhŒ\‹Ê›;!<–Éu_*k¦…,¤uŠä-)´T@4ˆeŠy@-Š,`©TD¸Nžº1ôžVõï#%ÏÉsÿ% Æ)ÊÅxÙÒ& a´cçÏÈÄJYö7Ë"”ˆ (I=gÎX‹Â®Ï ©`Ò‚n™ó<\(Å¢HĹˆ"Š¢È<¹óHƧÁ쩪ª˜$j'˜cA¢(2Â©ÆÆÆ½{÷†(íáþòEº[ Rö¯h, E?ìØP–èž™«%½Ó¤Äy~„ŽÊ·h A¦U•u!D¸žmÕ½,(ÌÃ6âú2¿¯š{Ä„X Cöe@„m¾Øo#VU®zzX•39ó‚t¾àô|¸üçk§\uiyÕUê2)!îhý‡d ‚󠳯6È¢ûµÿ¤”4‚ªszé@Ï>BEƒRˆ°Ïbh Ñh™"–ÎÙ›Ú¸7f4D¤]ˆXyá)­å27â,J²e™”PË"¦‰E,‹p‚8ØÝùÎÇW2VΩê#žã8ŽÊ2Š(BT¢QI’DQ™`ÊøÔ»½,Ë6/£¦i †a$“I;ÄÖ;f‡æB¡Ç]‘0Åhh/ß»ˆD¹ 8s†ß… ”Þs~RqtUÅ]ýÉÕ‚ä›íƵƒ`?Io®ÐU%³Í‰!È»$èfPÖ¯Ú»ŸxÏáÍ J7 ü\RÃõ¢!ùdÂaÏ·ïA‘{U ]b}sæxWNЋER¼†$© *Ç÷""ûF &Š@%Q«lÞ”½Ð‹-ªæŸ‡Bœ"Z*å00óIb9€%@M€LT¯d¯Ž¼•mÞƒ£?›X8ÎG€OAe‚Ÿ™™˜ë¿X·ù Ë4!”2i…`žOO øðÄlNJÄFŽÁòÐ16DY–eYfÂ%“2í$z„vŸ*„0“Éd³YæÊ›H$lW^›=Ê4ÍL&SQQt„ úâ@®é÷3 Þ‰SÒ½!*¸DŸÜë?)6T›Æ¥˜M,QUü"å£+ÐÒ(– ‘¥Pd©Y –(Ñ ÑQµB´é¿)1)’D+K ‘yLSql oâæÅTÓFCÕ!am>3ôÁësB ’$‰ G™Y”iwm”‘9“¨ƒe¾f©all¬··×–_;ÿìììÂÂËóÊ\ý›››)¥E~¡Ì’Ê2áÜGõzù.y%­ú˜C<¼' µ˜êBÅ[JÁƒà”„* _úÒ—FFFX ŒÍèb„(F¦¹;‰*ÈE³Èƒg¸8B-j«  ^%Òª¾Á«ªm‹´†ÒB†«ÈF‚ÕHðWßDôwש»Ó.3Î^-}1 ¬ïtú¼K=ÈÔŒb–_ˆ‚ÃèëÏÖÊWL“" ªyÊ/€ˆ)””P+G±¥C,K§Dë+0Ž—PA±²ã€CˆC˜2Ky:|áC¡¢‰š`zýŸ¿ró|½,ÁqÙhêú…ᢽհ¸vFæ599yðàA&³²Ç ãÂ˲œL&ËËËŸþùâÏvº®ÿÂ/üŸüÉŸhšöÀê§×¿”Ê—R‹ÅGFFØ}æëŒ9¹ 3¾‹Ý×¹ô=o÷æ;jgP" (Z•‚õîd8W“\4iáÑŠ«ŽRcCø‰ÞPWuy Š×,rŽŠŸš Qï^U|±#A¨¹=<¦+hIyK­®zGKËõ|§þí«ø—+µÁqÄA-ø,"”‹AS§C}žHe@)@à$het-Ú‘N=O9¹D¸!¼xäMEÄñÞ©ÎÓ%›!–Þ÷Ö;æõkè³fF$-)xvÚæR[Íë ’açxÃ0‘ïèèè÷¾÷½¹¹9–ŒÈ¶ÂÚYQ#‘H<F£.\ Lï¼0ÆæP—DTºêcŽºW½ó°™• ~²Í€åã€'žxâå—_.++ãyþ½÷Þ›žžaÿþýŒ¯.(õôªvBÈÚµkŸzê©£G^½zÕ•±rUEß7lذwïÞܺuËfQ’w_L‹ýŠeY6lxâ‰'8ÐÝÝí$¤-’„Ö™ ¹¹ùÙgŸ=~üøåË—mŽÖ wè (OÓ4KKK?ÿùÏ÷õõ>|ØËxr«yñìÅ_Eñ?øiš6K-(ÚIز¬mÛ¶=üðÃï¼óÎàà êb\»Ùc–eÅb±/|á SSSï¾û®‹ì7<ˆ…E±ôo½õÖÐÐ[9!o9ƒ¤1Æ/½ôBhÿþýN×è 9,'„¨¬¬|饗nܸññÇ»–V¨jY[á‡êêê²»"5²»wï~ûí·½ß—k™Y–µsçÎ]»v½5œ^ IDATõÖ[ÃÃÃÎÜ;¾³¶}ûöG}ô½÷ÞëëësöâØù‘ge‹Ô?u 1(d‰ #E€ÐD¤T‡ºH±H),£Q´ÝÊ£B~J+Y[aÕ ™>, BÓ2 œù0 ù¹îÞì©ó5ɵLÀKCM†©ì'»cã¢Í†Æ‚at]gļׯ_óÍ7çææ T¶¼+I’¢(,×ÐÂÂBè3Ÿù̆ ^{íµÉÉIçøîsŸSåûßÿ¾í|ßeBýTB½ŸÐÔùûÓO?½}ûöìØ±ãßøûÓ7:;;WMé~­_¿þ[ßúÖ×¾öµË—/ßcQìÚµk×+¯¼288xãÆ{/pçί¼òÊÐÐÐõë×ï±´öööW^yå›ßüæ… D"ñ­o}ë;ßù·~x/íùÆ7¾¡(Ê«¯¾z×yüñÇÿèþèêÕ«}}}wQÏóögvôèÑ·Þzë.^òÉ'_~ùåK—.õ÷÷ßÑë¦iþöoÿ6àÕW_½£KKK¿õ­o}ûÛß>|øpñ5nÞ¼ù•W^ùò—¿\üDzwïÞ?þã?îìì,r`Ÿ|òÉßû½ß»xñâÀÀÀªÏïÙ³ç•W^¹uëÖ­[·œ뺾ÿÒ䯵×j·F8žÓTšKS,!Âhçˆ1g€¤ˆN†[ÎÎÎ6T­/K%'¦§²‹…hÀ¼ ‰ Šp©UÈø®˜eêª{¦tH±mN²³à9Õ¶Nžz;5›a'Ož<þ<ËGkC©ÓOØV#3wpp1?¼ð ¿ñ¿qäÈ‘±±1g¿þõ¯WTT¼þú뺮‡'!x µhªS>½ó8TJ ‚̳Õ$Ö–`Q‹ÀˆgïÖˆû§òu^###CCC,q1K•Ìq\KKË#<ât.ƒ†¦i®[·NÓ´ÚÚZ»¨ UXÐY‹ammmš¦555±}}ehïŸLÓlkkSU••fçÔ ÔôÔ ÃX¿~½¦iUUU¬(°¿¼¯ ×0 –JOQg}…ïð B–eMÓöîÝk‹—_Uaè(ÖUU×®]˶¤UÕ§.TcÜ4c×LÕë¼išfccc¡PX»v-[ÅX mµž$I‹‹‹?þ¸-¡QÚ¿†ÑÞÞnšf,³CHpª»££CUÕúúzç Rá²®555©ªÚÞÞîXïê2 £±±1ŸÏwttØ*¥ iÛ4Í––UU]ïÒ3ÌoT"CÓšj@ŒóYÊKaŠ(@Èʗ챪·KÖ¬8ù.ÌçòÜÙ®óPP’BúZ%ÔóÀ“¨ý H8þÜAy~ q\T :/L$Ê'¯æQ…¬¼,Ëb רï¶)”C.—¾~ýúõë׳Ù,Óè2C©Ç¶\kÿÎÔ-eee{÷î5M³¦¦&—Ë1fM6˜Lé­(Joo¯7äOŽq(át&p–^È+eÊ BÿðTuyêŽ^¡/¥¬h¾Hï´›bŒ/_¾ÜÕÕµêˆY Š :“o‡µ«4Œq.—;qâÄ‚w¨Ã©”ØÔó<íÚµ+W®°ŽéXdë=“É8ÇsU¿'¨ýýý·nÝbùFVuá±û‹º|ùrww·ïÒòm-ÆX×õ³gÏNNN†¿e·ÜîÚââ¢ï»~Çg³Ù'Nd³Y»Š Åišf¡P8uêT:ö!<3ˆžýÌVíÀiÌ# àâ<åx*Zf.Ñ0—|<7•#͵‰'åÁý‰ÕbÚ{¯Ç)ÉBI¬éh±íÅ,ßH‰U²«’Œü?zAÇÛÓþí3}C™ŠòÒT*•J¥ˆÚ8j«yMÓTU5›ÍNOOŒŒÌḬ݆̀©yÙ,تJm'&V,“Y ÃH§ÓÇŽÓ4Íî/ëìààà¹sçœDÙ÷ŽþhU¾‘[Ô æ¸tž^¾Ö»eCKñï^éêMçiœã)J$ÖÙ=(ópÛ¦ö"_ï;túF}ÛF†TX™,úÁ¸XFûþþþÞÞ^–ÓM’¤+W®#rE‘ ¬A²wÙöà°6¸†:DZµeÖ×L…x;›§ëºM¬Ã¦&|ÁJ?;ö"›P/½°ïڳתsäCü¿¼íô}Ë«ÖöØÑŸ=ϦÒõ¼·.Ö çÃ^³ÂéK£-õ›÷6תý£\œ››§ÆD»qÉjÙ”Ï-ð·Î¨‰•¨Þü
§Œt)ˆ5ón\SïjQßÊòÄzͼ9•U"Ñ–µçf¦¯§‰¹Š}q8«n®+—dÅ^Õ‘X¼mÝ–B.«ëÚª Æ9ž—•¨(J¡ÜâüÎ¶ŠŠTìÐøzËÎ;××××ÒÒRRRâtÇ 1púÆz)p-Ëbíb‡÷å [•à@±Ý_CˆôŠ +dê#»y!¨’æÓ¾l¦û œØ.n)'ÿ°óyæ—ëì¾/ ]=½ígë-¹ˆä$+:nNHøMȩŕíÕY©+} ð0;WMê-Ê6×ùRÕ¥³ÁÞƒ¸Ÿœ+ÜwÕy›3ìÒ×é=h—w6 x˜\­uΚoJ†ï¼y%þóÛvª ŒY ž™‡‘¨&^ÿp ç‚D Õ|&‡¨YºISÚ3cÓñÒV¾~gæÜÊaØuüBß…\t¸§¾®¬§iÍ_ýà 1Æ„æ÷~5^@µÅS/”24Eݼys~~ÞY ¼qn^BïU¿Üu*_@S])@龩 /È•5õ¤¶ †!!u$Up¿œÜ´(È·,h궦hE*Ä‹…‚1R.ÀM껹´¸Ñ—f6ˆÀw—tA 3K¶¯´äJ?î½éÜ}‚ 7È—Á7‘µô8D„ò"Š/Œ±VùRàºä9_Lõ6&D àÝî] ^_ t}|¥êð„eöF ürøfÛõöÝ•eÖwNƒ?\dt `м¯J×ìKRí«·p…/Ø{8ö+AYoÿòOýá×_Z霿ҷ` P©hFŒq€8£[³ÓfM^Sß0“ɧóDÕ€©™˜ÉñÞÌ"¨ÚPu«¡áÛ¯ujyç¹ Dô`eÊ'”‚åä¦N@uaªý_!Çq¹\nbbÂVÿx§Ì;áÞ¢„ê÷å*~«¢›ÏšeSRĈPä” ‹x¥‰ÆT$¢eIùˆ@ ºl¯<mP®GàÇbï=Â3=Œ}Z É:â‹ ÀÏy$(üÔW÷ÂXéTâ*ÍW )&îÖÖ8Õrp†‹þ¶†3è1ß㈷m¶ºçùñ~zΑ÷ê ͳï_]ªÚRx/&±-µxþ çÊa}÷:¤ø ëν^E«²rڣ䕉½cÎ~2Ù+$°«;ΡXUáÄÚã«ÏXy¦G/gRÏþl]ÕÁ¡.Î̘å), œa‚AM -Þºž•«*ê›Òã#èÆeÂL"ƒ$y®äѦSDüák†jÇ¿Wuªë޽?ذ‚¦ãmÛ¶?Þ»mz}Wmàû‹ ÿÇ'¡ Õ¥‘êRðéõÉ^Ì»ªo> _‘1Ä"å̤foáÙIƒ¾WÉ^ÒB4{ÎÏ›•VdPÍê”›‹áG q”uik‹œWË1y«òÑûNºs¨Ã¦IÛd¥fø¥*ò¦åñJ~AêP¯¶Ó)ß)A S]á›ÍWúñÕp¬ú¹…dÄóžTœ«4È¢a?lçâ™nûN]ËÃÿùž}|WâFÿìØd\LMŠž]8önFŽ(z.j¦°qUE¶¥öÝÞÅ“ç»y šzQ³˜Ÿ ƒ]*³­ºDUJi¡PØ·oß¹sç¼F%ïwg{?òÏ]„ÍÐXòûÉTðz­’öeß4M ëzû¨oi.Übù±Y±6SɪŒ9!Ç<æÙ®á*0„Ž5ÄÈgóÛ~ƒ¾Ê:ßàEgß]=wNkGŒØÞÿ¾ƒüü¼å³ýÈ.!¼_A2Çq¾Cí«pAëˆí‰¾â]9®‰¡Na^s# h ’¤}«6 Ãvùaã$ºÌ®öbn¥!¤‰öïv× ÃX5:‹=ï¬3‹±Yc»fß5ƒlÁgóô÷ÿþÌî-õŸ{xséBOk‹ƒH€db.TXRB*J ñä‘Ñì™Óé|Dr‡Q¹,£Þ?ù>æÒ÷:/1…Üü|zddxûöíŒé×»°¨&¸fÜžÍ"W΃!¡²ô1Ÿêï R½²ÅÍp!T__ßÑÑáòB¼£‹‘H’ÔÜÜÌ‹o’ï}Ã0êëë%Ijmme¹,@0êª1©,d^’¤–– wן™aÍÍÍ¢(®Y³¦P(„ZˆŠ5IQ”ÚÚÚ"ß—=BÇKJJ6nÜÈ\6î´k†aÔÖÖʲÜÖÖ‰D˜µøB±ƒ,Ë•••®ŽSŽauuu¬öX,f_®:Ë„ŽãXß7mÚ’µ×[ckk«$IuuuÅ/{{…755±@1k¸®®N’¤¶¶¶h4ê²ìª¢¦¦† E<Þ.¼¥¥…% ²ï0ê Œq]]]6›]Ð…¼f”%“mi¬Å¦\Èœ®k”F£L6ѱîܳCÙÅ<ÏÁ¨"zõ:¾Ý Õëß»Âûaø˜`#Kd¹¥¥¥¶¶–RZ]]ÝÖÖæŒ«6M³¬¬LÅöööt:Íü¼Ø¤G£Ñ|>ÿˆjw“¾> Ñî/LuêÙ¹!ÄΡêêêuëÖùÚcŠT£™¦É𡛪Á6íø**CÛ]ÜFlsijjR%<ú>¨UÎæÕÔÔ(вfÍ–¦qUC]$Íz*ËrCC³ßsnðf˜¦Y]]-˲kð‹‘¶]W<O¥RŒ^Ç7'v¸:Ú0ŒªªªH$ÒÜÜÌ8hŠ?©°•L&#‘Heeåúõë½~ãá#lšfUU•¢(ÍÍÍ©TjUJçac‹ÅJJJ¼}©Ô^«555®eÏ –Ä&Ϲÿš5k‡ÆªDçÀ&“I{d‚ŒÓ†aTVV²¡ðõÀw¾ËƵ'‰ØãæõðbOB+**t]·u­×çI§eRÅ@ð c:{#=7_XÌ "ˆY¦” ·]ÛQ1ê²€(Äa‘³*噺Ø|B¦31®–%bŒqEE…ªªvÜ*›šD"Á²ÙlÖéÄÀ8j\‡N§·Úƒ ¨RöïSû—UùZ–e†išŒ9SQ”'N¼öÚk÷XW6›íèèxë­·>†UUUU¯¿þúøøø½—†ª©©yã7ÀyÍÎÎnÙ²åwÞ¹uëÖ½”S__ÿÌ3Ï:tèã?¾—r;Ä÷¾÷½».!™Lʲ¼ÿþÙÙÙ»{ý…^8vìØ;ï¼s¯—––r·ÿ~;L¢øëù矿páÂö½¥¥eß¾}Ü{³gÐÕ‹†††êêê×^{­P(8ïïÛ·Ï{X¡÷¡yñGH=øéõ#º ²“¸mÌg¶ÇixNß8EMÓ˜{$qE÷‡'„ðóéºÎ QÅIÅ®N ì\¥ÙZÍpb_©Z×u6PŠ¢!NïåëØÅˆS•‹N!<©ï‰Ñ³Å’ºÇU…¦iLPenn.ˆO ¨%ŒØBš"¬;kO§Óö" Ÿ[B¥”2"u[ÝžÕ9òÎ[–µ~ýúÝ»wK’”Ïç’M¤·êòµ§Ú]‹D",³Škî¼kž™Ã#‘H:vÙ]c¨iëo$™™™qzz»ÜšX±ªª²µÊ•kRðùmð‘v¨é`>O³Šà9Àë”C!Êã|JVsº°¨KSP-Þ"€eõ,ÿtÙPÑRÀ<&Rc|>.¢‚®Tâ‘"bE9…Õ «$zbÓ‹è¯rߺ í^°KQMÓlesǬW^ ÕÈð`ê§×¿êÒ\±Eæ 6ÿÔƒ´©®mž¯;.f9ðÆºØi_CÒ£µß<óA® Ú76×·§¾ðæŠ%Qz]üŽ*¶iÊëâPêš8¯’3†Ê(ŠoÚ|÷­µÃMZ{\KgH*#t'4UÕ‚yB"M4MÐTMQ…TF“DBQTRèòB2£)ª ¨B:Cˆ ©JZ‰h[÷i-í!$®ëöî.-è ýªM$YpÚ‡M´KD’Y$Á|’HkÝ)‚(Y"™8lÄn#n»à¶“]-ª¢ DÓ$AèLUÓή?ÜöÓߪ™L†u>"}Ž–ì܆~è“ôCâÚ…ÿíkŒ-½òÆ3O›<ýäs/Xüæ[ïj}ÃìŦÌ̳²ÿ¢g¨”™š³R˜n{ûÕøSÞ;þúÈ'é5<ԊÓ]Ö­9䟦ž­× lXâNùµ¥k«©Ã«ò ¬JÊS+ §éi®©ÁÖê3§W —wékëâþ: ŸcȪþ¢(¶¶¶®Y³&‘HÐdvT=í·|+5±fÅc™ùX•Ëtÿdâ¼€ú+‡ûbþü„ ¥©CëJîik±.5žÖŠ¢Û.Øeb—‰M&²H yJ!^—PòÄë1ýèI´XÃŬy}Ÿ¬Þaðì=•:%Q÷z«”2Ù$|¦g¨ì æX#ùéÇÁ.v!¢UvQ†ÒL‰g‰5‹§cAE0í(Î ]iémYVr¦œPÔiP~ϰõ¤2›Rhñe°­ébÅþae Õ«Sæ#ά£²‡šX@A1µÇšÎêÁ†Ë6lذk×®üüüÎÎÎŽŽÊtaÚK,ƒ.GŠC£ô¬IVsŒ½¾ßd½tJ[mFŠ+~ÑÜך;IGÖ'q­3AZºÈ¨"ÑŸGÚâšFz3©Q5B‘­",z\BOR“D’‰ EdQ³ËB<%lÛ—±œØšÔÐíåµJ¡î½¢H$I°IÄm'IÙãÊH"Q5’VH2£I’àIZ!…~òÎV÷憞ÃKU¢ ¢@ì2If„â€0­tçºøX½«‘ž~KÏ@iè„¡B¥t¹| øtÃç÷/û $Nš0þˆ ã0lO>û|ËâË®=û¿ÎøéON«:ëßï¼D©:ëŠK/~è‘'ššc•Ã+®½jIÕ¨JBÈÛkÞ»wùïw|µ» š÷‹3çÎ9)·ÅªAH¥R³n À+‰¨¨û•Ðú/“Éd °ÛíOÑüzG¿ßo·Û#‘H<ϲ@«E²ÀBõº»»ùÜ|ÿád2 ív{(ŠD"—NT"a¼|áö@ FMÓ–õ«ÄÃN§3??¿¨¨ˆ 6’u$+´Èëõ:ŽH$ÁTÙ ý)“ÉD£Q‡Ãáóù ùa¬¦Cãóùìv{4®†~‡ƒÎɲLÛN²æ@O¥R6›- F|àóóó½^/g é]pù‚ŽF£`IægkO&“jF2Éê^¸8CȦaÛA Ñ C‰X·O*ñ”ÖÖ­5vh»[´wÝIòƒÒ“$Š*¤3Z"£¥B"‹$£M ¤é) i…>âË#ª*4vªrtd ¢À²66¬ú…+ËøòÜ8C8ÆTºïÿüéOæ–±¿®~ûÝëo¾óª+S?ÕðÓ¿×ôà÷xòó}ü©›o]¶âO÷B®¹ñö+—^\?mrKKë|4窩ó'¼À°Å©®®¦ï$ÿ˜ÐŠ\Q”qãÆùýþ©S§6 \ˆùJŸ×0“ÉŒ;6 }ôÑUUUúýe°dÀ¯–V___UU¥o©Õñ°Õy0å÷û§L™RVVfZUÚ¬”BÐ? ½^ï„ œN§©ã3 Ò†ÃáQ£FÍœ9ÓTч!æ¸g2™ªªªp8\__ßÚÚªïL¾:E“Çù|>ŸÏWSS¡,¬þJö÷<Ò—“ÉdFUPP0}úôÖÖVCr|Ç QÁ`°ªªê„N°zvL¢ÁëõÖÖÖz<«ž7¼;™L¦¦¦&L:uĈ´—ˆµŸ¢(UUUд––ú «ÎTeÔ¨Q‘HdÆŒ´+ô¨g²M§Ó£GçäX,F¥ÈòJ¥‰Ä…Ï:¢Ǿ=ÛÛ;º:zH{Ö“‚nesCש¶u«-]Z[7i ­ ûŽ&ak£Ö¾jÍTF3Šª%S$¥´¼Û›- IDAT¢(ÙÖTmy~¿LõÇ·àÒåt:c1ÿºí]ÕEÉ`¾F¢i‚¢’Θðö‡ÛŸJ§ßßÕýÑ^5ß¡zªÛNœÑ!‹i!¯ÇVVTÔ’H$v'å½Í¢Ü&“Æ„¢‘¡PèÈ#TÅn·Sž}¿ßozÖcªQä’†šM~qsÜ~Ë5¿ûÃÃç^°¸;Ÿ:¹nÑEçG#ðÓO=÷çß{çMcÇTÑÂé‡Ë/¹ØëõB~öÓ3þðç¿À÷»½¹¹¥µ¥=‰\uùâÜö;fŸìv{*•joow»Ý’$åçç¿þúëÏ<óÌ tÒI'•••=ñĆàñ#N{½ÞÇœCŠ˲ÝnÇãý––H$‚Áàã?¾{÷îAVì¸ãŽ=zôßþö7+bˆªì—­¢¢¢¾¾þ…^$±ÃŒ3Ö¬Yóàƒšþ Ñ–‰D‚S\ó裌Ø! üñ/¿üò‹/¾Èþ QΜ äååe2™=ý¸ãŽ{ûí·­Ún…ªªª)S¦<ÿüóï¾ûnöwµ¶¶?ñÄ;vìÈòÚ±ÍÍÍÙ\ŸŸŸŸJ¥yä‘––ú¥ÛíÖûãèár¹žzê©ÆÆF~±£GŽ”½ö³h5$Ij&äç˯K „(*QT¢ òˆÊò={ö­Ä3kÉ®fixàIF#™ ÙÛª}ü•ˆæg2馦&š!Ç`SF£~¿¿½½½¡§ç‹]$ä6BI¤Ik—–V’ãÇhoo‡Ên/,´OZøù¦/ØFÉâK/½d v˜6mšé¹ÝÃéýErHC„“oA(tõå‹ !míí?úäWßüàï–ÁOùëßO9iæØÃªö+¹ï³×ãÏN‡CQø|ÇÍ×üñ¡¿<ð§Gòóò.YøËéÓ&¯NUI_2Y–Á ¶tÊQÀ¦°&ýù%“I§Ó)Š"¬ ú0ó~OLMƒùR©”Ãá` ¤%(ŠR]]][[ët:›ššV¯^ÝÜÜlÈA¦Ê‡Ò ,‹‡>Þ YUŒê1åååS§Nõz½kÖ¬Ù¾}»©6“L&aCCôVg–V `ò‚a‡ƒÍ >eÊ”Q£F‰¢¸}ûö·Þz‹²¨* EzŠ ÓC\Só#;@CDQ¤†MUUívûÑG=|øpMÓ¶lÙ²fÍ64e@ýõ·óì¡í0%I‚:[åð2œA¦R)˜«0v* +k!½‹N!•&àHé$¬Ž„õ]Áï÷OŸ>=¦Óéõë×üñÇ”¸Þ8è7ý¨±&e8=)//ÏËË‹Åb²,1" ©ªÚÜܼcÇ8öVÅãq>¼³³³µµUE•w¿ÐÖmÕl!Q É(DUµa£}@+a³ÙJJJÜn·¢( (ƒ† …GOOJĦÎýj$IBii©$IMMMÀ›¨(ÊîÝ»÷íÛ§ªªÏ竬¬üðÛššè‹­ƒÇét±í@=—±H*'X ñ!ñ@oоVSøçóyÏ;÷¬ŸoÖúH&¿üÎW^{sÅcOÒkèƒ O¤ÿ3fô]·]ÿòÊ'/]4ÿæÛîpe†Ü1ª^ RiJ¬½|MSx¢ôÎë¬ZÜï¢ÁUhŸöÒiÓ¦åååBJJJ¦M›™7ôUÕ?Ôà°À‰ßè×Ç4mˆ¼¼¼éÓ§‡B!BH ¨¯¯÷x<4'ÛcúN# µë½lâI£ úý˜1cÆo³ÙDQ;v,ØÊL-¨ú®Ö?ËìaÊ{NöÏܧ¯Õ¸qã€ÝW’¤šššêêj}P ½˜>¿`§´ÁŠõÈ5 å"f^*l'³Q+úÊgy^«ç fÌdÿ(Ú`О:ujEEly'MšTZZª¯ƒËÔàIÓ²ƒA8”>|øG‡C¡Puuuee%}Åìvû°aÃ<ÏþoºV„´*(joÏ„ÃaŸÏ'ŠâðáÃ|Øçó9ÒëõÂ4p:‘Hö†¬mPB$ ƒcÇŽ-//÷ûýÑhôÈ#  Ãá0¥&ÞOÞˆ¢~Sb8Ñ`ßb62þ_¥T jÂ@ÿ-½zý‡§SÉööö??òøèQ#„¾Ä5ÑHè÷Ëïxv媇ù+ýÒðÁðÏ__wË—Ûw(™ r µZ¢”s>Ä6˜ q,ÉÔ˜lp€2å1±Š 5-Ðj*((°ÛíàFŸN§Ãá°ÓéäëÓzÝË4ž“8Úp½q${½^ÇÙ²Òé´Çãñù|¦[ ZއísÓM}¯‚–ÆŠŠŠheHçX,L'KödWúLچ寨¨˜¹`·QXXh:@‹ ë4{ÔkÝŠDžó ý³²[‚² :G48 ™v,g·Ê> ÀÒ >M‘HÄ«Þ8VQ60gɲìñx`¦9N—Ëår¹GQQ½R’¤ââbؤê“ ,,, …BP=§Ó '¦^¯×çóQ*S¨´2"­`0 Ap:N›Íæñx`j³Ù¼^¯Çj¢`D1¼`lcû“Ö¨¨=ì”4`Z‡Í=åÿþðð†›lvÛ„qGÜ|Ýš®Ìp8ôÀò;~yñeE™÷‹3u_ããàŸ3Žžzé•7ìÚ½·¢¼ô†k.Ëá#TCd‚aª™nš:ž°1‘ÙHnÃ+ÁÙ!Zñ ™®DpYgg'ìÐÁ)©½½hn— ‡óh¶¶Ù{ Ò[zzz’ɤÝnWòtÆãq½aÒVt œXX–߀ݦÀ7ííí’$t—$©££ƒel°Úâðiø4´÷ÚÛÛËËË!ä *@¸¡&{Æ¥ßa£fûå>´šùY¦.ç$)2­ÇËL¯wuuåçç§Ói˜BlþQÎÉ…ž& ŒÉ„x<G<Až‰ô2ð¸6ÕziÝ‚Á MËãñxèøÂ ìÊ4q©Ù|Á4Ms1Ø0à”]E8A`z£5ûÓÈ1ÖŽ²ß‡¡Àèûí¡=eâÑS&²²ñ½Õ«àC(xò‘ßÃ÷ôKú@ÿ9ëø³ŽŸÁ¸æ6¨S» › :~¶pZ²!‘e¼ãsôÖpÆVÌf³íܹóÓO?­®®¶ÙlÝÝÝëÖ­GeSÒ%Cõ Ê%Ë$ÌçPµŠ¶”e¹­­íý÷ߟ4i’ÃáH¥Rÿþ÷¿[ZZLýfI_7vñ嚊™4n´ÙlŸ~úiaaaII‰ |ð]w zíjSÃO¥˜" w}øá‡‘HDÓ´]»v}üñǦÞÚl¸'é/ ·¾‰G´éÌ¡S‘F]ói›ôM)bÚ3lQ®þåêwCC]ºnݺc=Öëõ*вiÓ¦mÛ¶ém¡l`«©Í\¿‡&„lÚ´)išÖÔÔôÙgŸQþ Á¢Õ0Ü4"ËårŸÔ–-[êêêàPcÛ¶mÍÍÍ4NŠô`[ß½.—‹²qãÆI“&åç竪ºyófð=Ÿ=í¶žÄÃ4gœÕÁž"t•]Ë:‡:ØõWÎA·x°74u#ÌÉdRUÕD"|2™T¥§§GÓ´d2É^ðÚk¯}òÉ'n·»¹¹}9Ï…êqJˉD‚VŒ}âúõë·mÛæóù:::ÚÚÚ §Ëzôôô(Š*Â`z òñA ú3¶t:ýôÓO‹¢¸wï^¨†)µ)¤òèééQUuÇ¡!ªªê‹Åž|òIX»©«6[Œ§èíš‹ð€î‚–è´‡P=¡nÙÏ:àíîî1¼}ûöÇ{,& Öë5NÃËÛoá©TJE¸¦££cåÊ•………¢(644è} ¨q…ß@‡Ãa³Ù2™ÌîÝ»c±X0L$z·dMÓ\.TÏ´›Íf³ÙvìØ±oß¾p8ÇéíétZ’$Ó—&0¼5úwŠ ¿¶2}甆ګ ¢<ýÖS– G–eˆ††·}Ò¤IYÆÔ[!“ÉÔÖÖΞ={ÇŽúôËÄÂIÕJ†_3™L]]]IIÉœ9söìÙc   Mƒ#:J÷ou–Éd&NœX\\€Û½^ï#ø û»fÏž}öÙg/Z´ˆÃ42ÈŽ½à‚ Æ·téÒÎÎÎ~/>묳Ž?þøK.¹¤_BŒúúúE‹-]º”Oº zè¡»ï¾ûõ×_ç\¶|ùò/¿üòî»ï¶ÚoÍœ9ó¼óλüòËwîÜizÁÃ?¼zõê?þñìOµµµ×\s͵×^»iÓ&ÃO—_~y8¾êª« $!+V¬0œûn.„\1ùö…› ¾[ Ó &à[E=±«#C™ÉdÒår3‚> ‚“¬”X°ŸÃ?õ‚%ÐÔ Ë±*ë/K¥R.— vMMMú¨|bMoêf„ ú–rh ‰uf´d2™ŸŸLUúˆ£~•]ó"Ø Âê0É´çõ|àŠâñx:::¨¶Ç}ÓÒét~~¾ÍfËÏÏg™¬Œðzš:4¦´¦V0õ˲œ——GëÌgu #˜——¦#aE“'Oöù|---k×®mjj¢>n† iwÓêÁ-‡Ãápx½^Ú±¦gð%p5Àõ]]]†ÀÃg¸êìÙViïR©˜p¡æìLƒëa¡?õÌì›n³ÙÀ/ è îK0 ´{ ­† %@²<½Ÿ ,Ëô^¢#Öp8N§Óãñ¤R)=£þ¸‡ÎNp`ŽTAëýC|›&_Óoô œlÊ'S ±ðTÔÏWÃ){2jºÌYÍ{ˆ°äp/p„–©°Ô—fæÈÖÐñF¯gk­x­*oè1+K ?«­Œ©åÙ´4«”œzáa•Îjàh !›ˆÍ@A,NÐéÓ­ªG,2èÁsYædÎŒ¥¦wÍËË;öØcC¡P:®¨¨p:Ï=÷ Ä¢%˜N!%5<È´í¦ïV õÒŽC$ÂκlrÅÃN—R ñØô¹Ì¬öaz9M¸ºúˈ¯ ìE8á@¬„cŸB¬óÝêe¿~ÆÒ 3†EÀðjµèåŽ@D± °P¤3;zH¦ÒEE‡þ¶ÈJàtqüÙfjD2•mªªÒtVhé×tSNÓªf2=+‚©ýÙT¦²ÐWCUÁO°E¿ÔE¸Ñ´üoh­$"Ÿ®’†µ† 6Uñ©§ [ÓN°Úyè,YÉaE­À>=Kÿ^¶í,±‡  ÆF}>` £gw“Tgå «¾íÐ46h’Ý·Ñ@t`e·7xR.ƒºÉ¼Òjð=æèeœ LY¬6|†¥€}¹h¸­)1–¡…'†Ö±ó¨*iY^g“m'Nýô£õ™tZÅÁ3ú~·‚(&‰÷Ö¾}Ìq'eR‰¡eò%}ŽøÀGω5# ©]‹ÝêY¾¬_ùrÑô–ùÏ”“Ï”u–ìO˜¢?_±2£‘ý¹ý ¬zí™ÓåÌgzäcH»M,"ô…˜>޳a7eÎcÿiHãlu$L˜äÞ„K·d5ô†|ц=+É $®Vû¶Û sU–åæææ7×¼$IŸ|ò‰>“{—éу޾mx®éÁž©—X¤3G+Ú Óºqõõ†7+#uЉ™#M­úÍ´¦ÓÞÐç#f”ιfòµ9…¥åÇÎ:eíêךUÒûI”‘ÂãO<µlXe"Þ5Tª­?1¢T@߃dcPÅáp@4÷ ™h=iƒgŠøKËd2‡h„Sdw~0åŸí`ú\Ó4 v203dk­I&Áô:°Û¬Žš[h  íúPðpÚoo¼ñÆ—_~é÷ûc±äø30r@Îw˜uÙ7 Rôd9Ù3¶_Æ v ©r,@I’exW8K§£83V_Uö‡ÃôúŸh ©-gÉÔ8Cu:Ý•£«;nQó§²’JúÒ”µÍ¹ 0•>¢™ÊÊJHK’á×Ô¸šJ¥*++].×øñãÁçÓª|ìž?aذaùùù&L(((€³ô¤e­Í™LEM˜0x½Ùís¿5„/S©ÔèÑ£].׸qãÀÍÒ”ÀÊ4J¿O§ÓÇw:cÆŒ/MÒ—¯é<Áãñ”••Mœ8Ñ”©Ñªú𔕕AÂm85´:ò$f§³™L&º\®Ñ£Gyä‘z·«Ü|úÿÃÓ!wß¾}z‚Žq•¦oËËË+//¯««³jµ)gÈèÑ£Guuu<×S4€ñ°   ¨¨È0”ðšäåå?ÞçóQ§+$¸¥¼¼ÜãñÔÖÖîÝ»—e`Å|ii©ßï?ꨣخ0S:??¿¶¶–r•˜úf§Ó骪*˜±‡ƒ_zðæ=z÷îÝ,§?ÿ~¿?•JMœ8Ò¨&X*•5j”Ûí?~Ò4-G£Ñ .¸À@¤`ÚKдââb¯×{ñÅÓŽå4ºÂ`ÆdÓùýþ ÀÅœ†Ô.óæÍëêê²*¬Á`ðôÓOŸ>}ºÿƒªª£Fª¨¨(,,Ô“ëê§D0,((8ï¼óºººL[]VVæ÷û+++Ùðù|ápøœsÎéèè0°U”——ÛíöK.¹˜éƒA ËF¯ÈŠ8¤)ý²§§§¹¹9‰8ŸÏw÷Ýw?óÌ3ƒ|ÖܹsçÏŸ¿`Á‚Í›7#•?çœsN?ýô /¼Ð*<ü€ðóŸÿüŒ3Θ?þàK;ñÄ—.]ºpáÂ7¦œÊÊʇzèÆo|õÕWSÎ?þñ7Þxãž{îp .¬¯¯_°`ACCÃn/((xê©§–-[6°Y´xñâI“&]tÑEʹ!ÂóÏ?¿jÕªåË—ÐÕÕÕ<ðÀµ×^ûæ›of×gœ1oÞ¼ùóçoݺ5Ë[.¾øâéÓ§gß±K–,9ꨣ.ºè¢lÈLÎ?ÿü“N:é /5³fͺüòË.\¸aÃÎeEEEO<ñÄí·ß¾råJÎe+V¬Ø±cÇõ×_oE¡Ê‚S‚›!þ Ø0å÷Ñ"šØ@¦ÓQ³JºÎò[éùÛXo SGV´ëÏ,‰i;|ôzhˆ^ÌÒaÚŸV›l¶jh»aÑ×÷¶)]Í‘b5ULWg`~·2Ò˜ŒBÓØCÖlºÂtnë{€Îß Óš[ÍXƒ<3 G6œ ³ç»†„>Î4Ú–`ºþÐ{­Úkà]¡sÀJC*"5Ô!#V *&ÌøL&£ÏQÜo*6ÆŽ½ œ<­$»èð©!FôÇKÀ 0Ve¡Ì5ü½‚áAV!¹ZDã„麬_ß©3gø¬ºÐP{ƒ•õ’Í8Ä*Á´s¬†ŒM0©_ÚôôªìrfÍd§˜õÃǺkšºÀ°™ï¬È ÝhèyÓ8W5BÇdúް*/K0ÉJG¶+¬ÔkÃô¦ó­ƒáFS7~V»5m ASF'þšcÅJö'à%fQàúFÑöRÓš¡ßÀß›ÃÖ9TŒÀ(P‡¨yMQjBa¥ˆ•7“©ì¡Ë:US¬ø k¢iÈ~CjØVsXcˆ5S}M7és¨A™VŒµ‘ò’AY4ðõp( ’L™!Z€?vVöpSµ@oõ5¨¤i ŽbÍ•† Gãg›i"Åv é.Êt=5µ .©:áVŲßÀ†Õ”ÄôõÔ'É~Ô5SJª‘›j„æ)Ž‘C?ßL'9m#û®‘ýyµ¬4TÚÉìXXY2ôõÑçmUû  %4ù x8a£ ’‚·àÄ΢øI¶‰ufx…’É$88p,ɦñšVŠ5HÏuø5äèÄ4ŠŽ–fêceUšÁô#}é»MÝ/Òé4°œvý&çÑל2ÀÞ`š~’S=}7²cljÇÕ/ÇétZ–e8Ïã0pz‰í¾Wh9ÀLr,‹²ÕpƒZýFëg80ÐCk~௾iúsAþÌ×_Ïé7? ýf•fGÿn’>’HÓîÖCÓ§ë+ó-•Jéé* B‘}ý V!–¡º…ž¯IDAT©M/t²ahhF:Íhi½‚SÓ2™Ìƒ>xØa‡êŠ([GØ£@E P”BÞ®®®d2 Š)h¨™LÆãñøý~S×s~Vp½{ž×ë•eHÆõùѬøTùJ¥RÇf³…B¡ŽŽ6[çvSWR(- ¶µµY9vö[=:× ­:d‘YØeYöûýÐc¬BÏ/™žEÙíö¼¼¼p8¬×W²édZ·Ûm·ÛÃáp"‘0t?Ã9¬zÐŸÏ õÆ·~»…ôeì²ÛíÁ`}:§¨¿¬  ÀT8Yµ7Ȳè\%ýñò³3ÜôE3ÌahZ(êéé±b}â3z=%Ÿ²š©T T‚Á !íÛ^ŸÏ5gg,}z:ƒ’$ù|>¶úÒ‡Ûí.((`ƒkᎠ…Búrôg³ÙÜn7;ciU€¡ª4Í_8ÖŸA™‰D‚r'UWW×ÖÖî§÷ÇZ†ÆrÛ÷ -ÞzåÙYsÏŠwu|;»÷OOÓCQE™N¥R©d2™LüöΛ`GÇŸ|òÉÎÎÎh4ZYY"‘ˆ>q#õ5åDYðå"0™º¿r6ïœõÈf³Ù>ŸF¿ÏÊ4­/­ß¶X•ŸM[jØ:ôë­ ãât:a§ÏîŸÓ64Ð*϶¢(Çp¾›½½—–£ª*t>?¨Ñ4Óp¦• •T?vYš‹ ¿ê3’rhM+fèìù)éÑ`öm× çF«¼lŠ¢@=­NØø`ÿáR昰ßTÁ4(Òc2´2À›îné]ªªBrNg‚˜6Ó-`Ù7WWc˜±ÓºiôihݰaÃfÏž X===ô§Í›7«ªêøt׺J(PÑ©íwÌ ð·ÿ;ÙÝÝÍî7õ±ý®AÙHJC1b‘»4{9dH†cªùõ›ÁMÿ&‹#FÓ§X­t9³ÊÃÅï+CÇššj³ÉÁ®¿ØàNbjoçsü²Ùßø,ÃpÃL‰|9[4ÓIÈßués“Ymø8‡ ú¬ÀüÍŸaŸg5FV®z×$bÛULeer7õ{âo+éé²ÞýÐjcJåéÏ9Öð\Ó¨þG_1 2Ý|Ðy¢¿€š|)MMŸn*hš–L$ !È¡íí‹^¾‡¤|ŒÞ¡†õ… N° ·0ýÌyI¬âCØgÑee¬3¿4„^p$1 šä¬¹lÉV«?¶„ïsË çeËa}m¬RœZ­¼V Ñ8½aš5Ï´z„q‡æLbM©‘½~ω8d‰ŽÙ]Ò_^«¹a*Ùà(Óäꦱ¹œ‚¦•çOvÏÇ¡¬²êXÓC»²É.gõ,Nd‹« 'Êœt³ûùçŸÓü©pL.½jFß*‰ê7‡]{÷6¶ìkŠímjÙ½§ñº%çæ†,íÕP{!& MÕ|ýáÀ•*Î~Öt+ݯÑJñÍ> ÿVå9­öËVRc̦[׃´ßîµJ Ï1°[)‚¦\ÿÄ‚˜s’Í1Hô›á‡#øùJy6‡ü¹g5a8.Óüð-«ÎÌ^ßåOZ«ÙHú;•çØ$LíºV»Xþ`Y°XM¶lì%¡k³ÙÒé´ ˆ^Ÿ'™HJ²ïéEQEAÔí,=‘:djk{çÞ}Í ­Í­±öÆ–Y–%Y–e›¦iDräˆå·O¨ÂìEñÒ_ߘN%Óéø_(™Œ¢dTUS‡xJZ0S(D dY–e›Ín³Ùí¥›î³â¡†š52ŠÚ°¯ù«½M ±}±¶¦X{:£A÷J²,ÛìáH¡,Ë¢(I’œN§âÝ9!OuF AA”DI’TIþú@‚QUUUU‰ ß@‘K"UìèK© _ˆ¢âV…Có@õP¨Í±¶½±†¦Ö}Í-±Ž–¶.؜ȲM–mù¾$õö,ô7ØEaG“ç²ç@–Vík™ Û4I%I’Uùëã}QiªhC—@@ ,–AA@vJ²,IR¯%Ëb¯Xz/#½P öâ‹/w}¸á‹}ÍmM­šF$ħ,É΂ˆG’%Q’%QD4êõŸ’$ÁŸï ùò‚~wЛöçÙíò²??Ÿö¨};4IR%=%¦(J’¤PJ‚"@ä”D¾^E©Ïðk“$YEI’@ÓÀâ+ †ªÃ§›·¶m¯Óåö DI–d ħ^%Dóæ;WÐëøÜ!_žÏãf‹J} Žû…^-TýTÓôÒT”TEUUU¡Á(PDÎITAÒ¦J’,Ûl’,÷Z}EAEôz£@í…Ýf÷xýNwž,ËTw·ÉBÀëúò^WÄï ò%±ÿ.ˤS94—Q4b® •¦Š*i”*Ú:N@ †îHW¼ÞsSI’zÏSezžÚ<ƒª¢$‰’òç‡|î€×ðºCþ|OžsE©J.¸¼½˜< °Y–ßA%ERú4S #@õ@äžLí3ûR± "þß› Dê¡WùïR ªª:sêØ1•%8‡¾–¦„A‰¨ŠDúzצªª¨Ñd“ª¦”§"G%*úâME*X{uÓ>›oo8 T Èæ‰óÇ VÁŽAe*õëeÓXâ*ÈÅ%P iæ!¢( bŸhI«÷ï=”¤êw)P5EUd'蛚F}{õTh¤—_ SyІ@ rzEè©}L7}j«Ø«u É×UÓ†Jöo_C%„" ½bT šî?B0`@䲂ÑG…Oÿûšò†CSšÌ6s¨)©Dw˜Úû¡O/%„JSì,‘óºE’^ˆ ûó9`Ø "™Jt>J‚¦AÐÈ!ž¹@ †`ýZp Œ"‹Á•©}ú¨a†Ò@ ˆ€ ƹ2ca L0Ž@  T@ P "@  T@ P "@ ¨@ P "@ ¨@ @E ÁÇP%ÇïìŠoÿjoW<^^\TR% Ç@ (P›·~µòÕ5­qY¶BDiCAÐK T@ @ÍÉTê©•onýªÑéÎ xA  ‚L§e»Ç@ (P³’¦xìÅΞŒ?Xàt¹l6» Š4¢¥’ EÉàX"â{*PEQ Y'Ò^ùÊÚî¤ê „\.·l³‰¢$!DÓ4%“ñæ»q,ñ½¨Û¿Ú»~ûö6íiˆ••F#Á@2¡Ø/Ú::·ìhôøƒî¼|Y¶‰â×ÎÉš¦išVöâX""ÇjgWü…W×|¶uÃé²ÙláhQ"#îhhO¥’‡WUdSž}-v§Ûét³ÒTUUIO>òpK@ä²@ÝÝÐôÈÓÿOä`8âp8%YE‰’I§{â]‚U ¬Ëi—eYE½F«išª(™dbÆQ£ÂŽ%@ rV vÅ{þúÜ›²Ý—ïqºÜ MAÐ4M’¤t:e“²¨%…Å‘íqUÓ´^iªª%㔵ã¦)‰†ô,<÷tœˆ•‡Õï~¬Š6¯×ß'M{ŧ  ›†C¾lÊEaÎqµë>Þº½¡=‘RAˆò*Š ÆTÊHé€@ ˆœ¨[w4¹óò.·l³¬µŠ’) { ‚¾,‹²Ûä£k«ŽÆC Ä!‰ƒËå›V‰Íæ$É M3™´¨e~0=‰5 Œ¨ˆêãb4MSU5“NÛõ”cjü E DŽààš|0µæŸo|ÔÑ“š@UUd‘ŒUtÄèIÄD7@šò\Ž3NœøUC¬½3!JbØ— !@ P e…¡²Bìj@ä2ÐîŠ@  T@ P "@  T@ P "@ ¨@ P "@ ¨@ @*EËpD‘ƒuïÞ†sæ]0btuqYå)§þè_/¿‚=Ž@ ¨ŒyçÏ>¬âÝ·ßørëgW\véŸz{@ (Pÿþ`ýÒ%‹ »}ÚÔÉýËÃð}2™üÕâ¥ÃFŽ6rÌ¢K.K&“ð½ÁfKÿŠ–ýùáGÆ×N),~Ìñ'~òé†ÞrR© —}ØáGÞ÷¿¿ÃáD Dn Ôq557Ütëö; ßßü›Ûöí{íê÷Ö¬Þµ{÷-·ÞÑoQo¿½æÅ•ÏlÛ¼aöÉ'.ºä2øò7·Þ‹µ|øþ;«_{yõ[oãp""7êÃþ¾»»{öœÓ+*Çü÷ÿür÷ž=ðýߟyö–¯ ‡Ãá[o¾áïÏ<ÛoQwÜ~KQQ¡Ûí^0ÿ|ª¡>õô?h9¿¹ézN@ä¦@-,ŒÞ{Ï>zÿƒ÷Þ.+-9÷æÃ÷MMÍåð¹¢¢¼©©¹ß¢~?|p¹\™L>766•——Ñrp8‘›•" ^¾ô’?úþYPÞ¹ó+ø¼cÇÎp8ŸeYîééÏ-­­ý‰Ðrè@ rM þôg¿xûµÉd2ÖÒr÷²û¯®†ïO;uΕW_×ÜÜÜÜÜ|ÅUמ>w|_]=fùýôôôìÝÛpÉ¥Wô[þN;õªknhŽÅ𛛝¼ú:N@ä¦@=ççgýæ¶;†[;qÚ† Ÿýáÿ…ﯺriAA¸vR}í¤úÂÂ误X ß/»ëö¾ø¯a#ÇžtÊiõGOë·ü+/¿Ôç÷›0yÚŒ™Ó¦NÁáD Äw!¶-¥F¼õʳ³æžïêÀ®@ ”YJäòE â T@ P "@ ¨@ P "@ ¨C¡SQUìøžCÕTQÈVP¢@5Až×ßÞÒL»@ ¾ÏèlkÍóú‰¦¡@ †ûéï´·ÄTMÅÞ@ ˆï§nÚkÚ²ñƒUG¨jV²©ÍÑküjûæ®öÖ,û@ ¹QÝ^ï°cŠÊF$“ UÉ @8dÙ&Ûì¢(¢í@ ¾Ð4UU3éT&“ÎJj`Y!“IgÙ‰@à*@ (P@Š@  T@ (P@Š@  T@ P "@Š@  T@ P "@  T@ P "1€éÛÄ  iéT2IkªJˆ–sÍQ”e›Ýá Ä,/²ª&qEQr±í½= J’Ëí6×¾¾ç£@|ƒHôtïܱí£õï7îÛ›{­“D)T?abùðJ§Ó­iF™ïîüâ‹Ï×­y+™Lä¤4u8“§MuØá.Wžªª8ú(PÄAA&•jhسnÍÛ³OûÏò£%I²ÛÈ(ª²e㇫žÿ»7*+ ¤RûIÍdO|çÎ/ß[óÖãÆ—WT:œnAÈ©ækDûàÝ7ßYýº?T8jtAO¼ G*8(H¥“ëß_ûÃY1¢JÓTUÉä^G©I&“ï¼ùÊ™ç, û/©™LzÍ[¯^3nxåaM{wöÄ»²Qb†|^oyyù+ÿ|¦jl Ž> TqÐ4U5í+©¨TU%÷d EQÙ°ØÊ¿‰"{ˆ¨¥RɲŠÊÆ=;¦7''ÛþÿV>–çv'“=8úÙ\Œ@ \¤j‘DIQÒ9ÜHY’¬ä…(ˆNW^¢§[ÓÔ\m¾ ¢ âè£@E yµB4MUs¸šª ¢`Õ|A4-Ç{€Óüïóè£@E ß$D'ZN/©š*ZxÑïs»8Íÿ>> Tñê.‚@Àöwð·§þ~éÒ+ã]mz¯;ß?€»,–TÍÊ}WøZ ~Û‡ˆß`³åoyô‘㌾ÉW1pÝEÌv qçûÝù~¯?\9ê°³Î>çã?é÷–+}õ_dbÃï?xÍ̾ùÆ‹/®ª­›ìFjë&¯Zõ¯Cj”Óüýë¥ISŽö#‡qä#>–“*œî¢iYýïlm‹í{ëצN™|âÉ?\ÿÁzþ-{öìTW—mùÌãŒþGúÕPýó¿uëÞ›¿àâ»î¸mßžwÝqÛü¿÷Þ{ß\»²ëF¾†: b×®}÷‚ù n¾áºÆ½_=÷ìßßZýÖ·Ô–otôQ "ˆovó.h„dóGÑD±°¨ð‚ λúª+sÛðSFQ®¾öúòá£B‘¢³qngW—FˆÛÐ4-Ït{!Û¶oÿñO~), „ O=ýÇMMp/üJÿè?Iß? !nO€~ÿ¯—^©8ÅŒV]óç‡WdYyÑÂ-…~¯œ¿;ïºçúë®™1cºÝá˜1cúµ×\uç]Ëô Ôù`ý‡#«Æ.¿ÿw£†fxô wݽìÆë¯;þÇÛìöáÇÿîwÿ ßsFùúóaÕ5¾`dò´é}ü |ŸJ§/»â×eÃF•»÷·Ë9ÓIÄ0‰" Tñmh¨b¶ÿý/›;ç‡kÖ¾ Ÿï¸ã®õë?|gõëÛ·nv:W]}-Ñ´îŽBHwGKwG Ñ´ŸñŸ æ_°}Û–í[79ê²Ëm®v쯘 !š6ï¼ ®ºòŠ}{v¾´ê…uëÞËRMÌãFÈ×ߥjÍÚwOœ5“þóÄY³h§ÁC_|qÕÜÓϸç®;.üåùSC;úL»N˜õö{Î(¯^½úÕ—VíþêË9§Ì^pÑBøþæ[nݸñ³5o½ñÙ§îÞ½‡3£Ó[5Ÿ:%!ˆÁ™|„p8ÔÞÞŸ^ñèsÿø{II1!äÆë¯4õèewßi¸þßëÖÀ—ËyÝuW©7°çº\Ά} Íͱ²ÒÒû—ÿvÍ<Ø\ƒmmmÁ`þ3 ´µ}}¢üÀïÿxÇ]w?ýÔµŽüNFyÀÍoooì÷œQ^v÷pËÂ…Ýz{ïôxìñ¿¾ðü³0sn»õæì§ÓAšä¨¡"ˆA™|ɘ|é_SsÌï÷Ãç={÷ÖNœâ xüáá#«šššÙ[Ö¾»î'œ),Íó ¢%±XÌ´XbýþþòèŠW_}mò´é‡×LxáÅU‡¸É×ï÷ÇZZè?c-­´Ó!÷-¿ÿ¿Îüé„ Gj­ýš|ÖvŸÏ×ÒÚÊ~Ïe ×hïr¹2™ |nhØ7lX…¡l¦š|Ä!©¡È%äÙgŸ›:e|.ŒF?ûô£ö–ÆŽÖ¦®öXg[3{ËY??ç‚óæmÙ´¡³­yï®íZß÷²,ÇãqøÜ‹L¾ìskÿä_ÿ²cÛæ;ï¸õ¢‹•µÑï»qJš<©nÕª—è?W­ú×äIu´]«^|þégþ±lÙo‡œSÒäI_~ùUö{«Q6öpß? £Ñí_n7’Ít:@“/ Tñmh¨â9%)ªº·aßï~ÿÇ›sÛÒ¥Kà§sÏ=碅‹¶}ùe:“ùtÃÆŸŸ3U)zz‡Óîplß±cÁÅ‹èOG^}ïo—w÷ôìÞ³÷â_]Â*¦>Ÿoó–/h9¿øïÿùìóM©tZÓ´LFÉZGé'nä )ˆ‹~µðºn|ýÍÕÉTêÕo]ãM‹~µ6°¸¸xÕ?W>üÈ£wÞ½ì k¨â Gßð·xÑÂk®»þÕ×^O¦RÛ¾üò‚ /ⲕâÌ3ÿó’K/ÛµgO[{ûeWü:ûét€*†Í ˆoGC%Ù:%y|¡`¸°~ƱSæ…çŸwÄðÓâ_] T@ ŽR‹]€@  T@ P "@  T@ P "@ ¨@ P "@ ¨@ @E ÁÅÿ`“N1’VÇ IEND®B`‚tuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoa.java0000644000175000017500000001306011255525125030767 0ustar julianjulianpackage org.herac.tuxguitar.cocoa; import java.lang.reflect.Method; import org.eclipse.swt.internal.C; import org.eclipse.swt.internal.Callback; import org.eclipse.swt.internal.cocoa.NSButton; import org.eclipse.swt.internal.cocoa.NSControl; import org.eclipse.swt.internal.cocoa.NSMenu; import org.eclipse.swt.internal.cocoa.NSMenuItem; import org.eclipse.swt.internal.cocoa.NSString; import org.eclipse.swt.internal.cocoa.NSWindow; import org.eclipse.swt.internal.cocoa.OS; import org.herac.tuxguitar.cocoa.toolbar.MacToolbarDelegate; public class TGCocoa { public static final int noErr = OS.noErr; public static final long sel_registerName(String selectorName){ try { return longValue(invokeMethod(OS.class, "sel_registerName", new Object[] { selectorName })); }catch (Throwable throwable){ throwable.printStackTrace(); } return 0; } public static final long objc_lookUpClass(String classname) throws Throwable{ return longValue(invokeMethod(OS.class, "objc_lookUpClass", new Object[] { classname })); } public static final long objc_allocateClassPair(String name, long extraBytes) throws Throwable{ return longValue(invokeMethod(OS.class, "objc_allocateClassPair", new Object[] { OS.class.getField("class_NSObject").get(OS.class), name, osType(extraBytes) })); } public static final boolean class_addIvar(long cls, byte[] name, long size, byte alignment, byte[] types) throws Throwable{ return boolValue(invokeMethod(OS.class, "class_addIvar", new Object[] { osType(cls), name, osType(size), new Byte(alignment), types })); } public static final long object_setInstanceVariable(Object idValue, byte[] name, long value) throws Throwable{ return longValue(invokeMethod(OS.class, "object_setInstanceVariable", new Object[] { idValue , name, osType(value) })); } public static final boolean class_addMethod(long cls, long name, long imp, String types) throws Throwable{ return boolValue(invokeMethod(OS.class,"class_addMethod", new Object[] { osType(cls), osType(name), osType(imp), types })); } public static final void objc_registerClassPair(long cls) throws Throwable{ invokeMethod(OS.class, "objc_registerClassPair", new Object[] { osType(cls) }); } public static final void setControlAction(NSControl control, long aSelector) throws Throwable{ invokeMethod(NSControl.class, control, "setAction", new Object[] { osType(aSelector) }); } public static final void setControlAction(NSMenuItem control, long aSelector) throws Throwable{ invokeMethod(NSMenuItem.class, control, "setAction", new Object[] { osType(aSelector) }); } public static final NSMenuItem getMenuItemAtIndex(NSMenu menu, long index) throws Throwable{ return (NSMenuItem)invokeMethod(NSMenu.class, menu, "itemAtIndex", new Object[] { osType(index) }); } public static final NSButton getStandardWindowButton(NSWindow nsWindow, long index) throws Throwable{ return (NSButton)invokeMethod(NSWindow.class, nsWindow, "standardWindowButton", new Object[] { osType(index) }); } public static final String getNSStringValue( long pointer ) throws Throwable { NSString nsString = new NSString(); NSString.class.getField("id").set(nsString, osType(pointer) ); return nsString.getString(); } public static final Callback newCallback(Object object, String method64, String method32, int argCount) throws Throwable { return new Callback( object, ( C.PTR_SIZEOF == 8 ? method64 : method32 ) , argCount ); } public static final long getCallbackAddress( Callback callback ) throws Throwable { return longValue(invokeMethod(Callback.class, callback , "getAddress", new Object[] {})); } public static final long getMenuNumberOfItems( NSMenu menu ) throws Throwable { return longValue(invokeMethod(NSMenu.class, menu , "numberOfItems", new Object[] {})); } public static final long NewGlobalRef( Object object ) throws Throwable{ Method method = OS.class.getMethod("NewGlobalRef", new Class[] { Object.class }); return longValue( method.invoke(OS.class, new Object[] { object }) ) ; } public static final void DeleteGlobalRef( long ref ) throws Throwable{ invokeMethod(OS.class, "DeleteGlobalRef", new Object[] { osType(ref) } ); } public static final MacToolbarDelegate newMacToolbarDelegate() throws Throwable{ return (MacToolbarDelegate)Class.forName( MacToolbarDelegate.class.getName() ).newInstance(); } private static Object invokeMethod(Class clazz, String methodName, Object[] args) throws Throwable { return invokeMethod(clazz, null, methodName, args); } private static Object invokeMethod(Class clazz, Object target, String methodName, Object[] args) throws Throwable { Class[] signature = new Class[args.length]; for (int i = 0; i < args.length; i++) { Class thisClass = args[i].getClass(); if (thisClass == Integer.class){ signature[i] = int.class; }else if (thisClass == Long.class){ signature[i] = long.class; }else if (thisClass == Byte.class){ signature[i] = byte.class; }else{ signature[i] = thisClass; } } Method method = clazz.getMethod(methodName, signature); return method.invoke(target, args); } private static Object osType( long value ) { return ( C.PTR_SIZEOF == 8 ? ((Object)new Long(value)) : ((Object)new Integer((int)value)) ); } private static long longValue(Object object) { if (object instanceof Integer) { return ((Integer) object).longValue(); } if (object instanceof Long) { return ((Long) object).longValue(); } return 0; } private static boolean boolValue(Object object) { if (object instanceof Boolean) { return ((Boolean) object).booleanValue(); } return false; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoaIntegrationPlugin.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoaIntegrationPlugin0000644000175000017500000000217411273336572033444 0ustar julianjulianpackage org.herac.tuxguitar.cocoa; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.cocoa.menu.MacMenuPlugin; import org.herac.tuxguitar.cocoa.opendoc.OpenDocPlugin; import org.herac.tuxguitar.cocoa.toolbar.MacToolbarPlugin; import org.herac.tuxguitar.cocoa.modifiedmarker.ModifiedMarkerPlugin; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; public class TGCocoaIntegrationPlugin extends TGPluginList { private List plugins; protected List getPlugins() throws TGPluginException { if( this.plugins == null ){ this.plugins = new ArrayList(); this.plugins.add(new OpenDocPlugin()); this.plugins.add(new MacMenuPlugin()); this.plugins.add(new MacToolbarPlugin()); this.plugins.add(new ModifiedMarkerPlugin()); } return this.plugins; } public String getAuthor() { return "Auria & Julian Casadesus"; } public String getDescription() { return "Cocoa Integration Plugin"; } public String getName() { return "Cocoa Integration Plugin"; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/TGCarbonIntegrationPlugin.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/TGCarbonIntegrationPlu0000644000175000017500000000110011273045343033443 0ustar julianjulianpackage org.herac.tuxguitar.carbon; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.carbon.menu.MacMenuPlugin; import org.herac.tuxguitar.carbon.opendoc.OpenDocPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; public class TGCarbonIntegrationPlugin extends TGPluginList { private List plugins; protected List getPlugins() { if( this.plugins == null ){ this.plugins = new ArrayList(); this.plugins.add(new OpenDocPlugin()); this.plugins.add(new MacMenuPlugin()); } return this.plugins; } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunitySingleton.java0000644000175000017500000000215111273045343033167 0ustar julianjulianpackage org.herac.tuxguitar.community; import org.herac.tuxguitar.community.auth.TGCommunityAuth; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; public class TGCommunitySingleton { private static TGCommunitySingleton instance; private TGConfigManager config; private TGCommunityAuth auth; private TGCommunitySingleton(){ this.auth = new TGCommunityAuth(); } public static TGCommunitySingleton getInstance() { synchronized ( TGCommunitySingleton.class ) { if( instance == null ){ instance = new TGCommunitySingleton(); } } return instance; } public TGConfigManager getConfig(){ if(this.config == null){ this.config = new TGPluginConfigManager("tuxguitar-community"); this.config.init(); } return this.config; } public void loadSettings(){ TGConfigManager config = getConfig(); this.auth.load( config ); } public void saveSettings(){ TGConfigManager config = getConfig(); this.auth.save( config ); config.save(); } public TGCommunityAuth getAuth(){ return this.auth; } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPluginImpl.java0000644000175000017500000000236311273045343033312 0ustar julianjulianpackage org.herac.tuxguitar.community; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.community.browser.TGBrowserPluginImpl; import org.herac.tuxguitar.community.io.TGShareSongPlugin; import org.herac.tuxguitar.community.startup.TGCommunityStartupPlugin; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; public class TGCommunityPluginImpl extends TGPluginList { protected List getPlugins() throws TGPluginException { List plugins = new ArrayList(); plugins.add(new TGShareSongPlugin()); plugins.add(new TGBrowserPluginImpl()); plugins.add(new TGCommunityStartupPlugin()); return plugins; } public void init() throws TGPluginException{ TGCommunitySingleton.getInstance().loadSettings(); super.init(); } public void close() throws TGPluginException{ TGCommunitySingleton.getInstance().saveSettings(); super.close(); } public String getName() { return "TuxGuitar Community Integration"; } public String getDescription() { return "TuxGuitar Community Integration"; } public String getAuthor() { return "Julian Casadesus "; } public String getVersion() { return "1.2"; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackClient.java0000644000175000017500000000764011273045346026657 0ustar julianjulianpackage org.herac.tuxguitar.jack; public class JackClient{ private static final String JNI_LIBRARY_NAME = new String("tuxguitar-jack-jni"); static{ System.loadLibrary(JNI_LIBRARY_NAME); } private long instance; private boolean open; private boolean openPorts; private boolean openTransport; public JackClient() { this.instance = malloc(); this.open = false; this.openPorts = false; } public void finalize(){ if(this.instance != 0 ){ this.free(this.instance); this.instance = 0; } } private void open(){ if(this.instance != 0 && !this.open){ this.open(this.instance); this.open = true; } } private void close( boolean force ){ if( force ){ this.closePorts(); this.closeTransport(); } if( !this.isPortsOpen() && !this.isTransportOpen() ){ if(this.instance != 0 && this.open){ this.close(this.instance); this.open = false; } } } public void close(){ this.close( true ); } public boolean isOpen(){ return (this.instance != 0 && this.open); } public boolean isPortsOpen(){ return (this.isOpen() && this.openPorts); } public void openPorts(int count){ if(!this.isOpen()){ this.open(); } if(this.isOpen() && !this.openPorts){ this.openPorts(this.instance, count); this.openPorts = true; } } public void closePorts(){ if(this.isOpen() && this.openPorts){ this.closePorts(this.instance); this.openPorts = false; } this.close( false ); } public boolean isTransportOpen(){ return (this.isOpen() && this.openTransport); } public void openTransport(){ if(!this.isOpen()){ this.open(); } if(this.isOpen() && !this.openTransport){ this.openTransport = true; } } public void closeTransport(){ if(this.isOpen() && this.openTransport){ this.openTransport = false; } this.close( false ); } public void addEventToQueue( int port , byte[] data){ if(this.instance != 0 && this.open){ this.addEventToQueue(this.instance, port, data ); } } public long getTransportUID(){ if(this.instance != 0 && this.open){ return this.getTransportUID(this.instance); } return 0; } public long getTransportFrame(){ if(this.instance != 0 && this.open){ return this.getTransportFrame(this.instance); } return 0; } public long getTransportFrameRate(){ if(this.instance != 0 && this.open){ return this.getTransportFrameRate(this.instance); } return 0; } public void setTransportFrame( long frame ){ if(this.instance != 0 && this.open){ this.setTransportFrame(this.instance, frame ); } } public void setTransportStart(){ if(this.instance != 0 && this.open){ this.setTransportStart(this.instance); } } public void setTransportStop(){ if(this.instance != 0 && this.open){ this.setTransportStop(this.instance); } } public boolean isTransportRunning(){ if(this.instance != 0 && this.open){ return this.isTransportRunning(this.instance); } return false; } public boolean isServerRunning(){ if(this.instance != 0 && this.open){ if( this.isServerRunning(this.instance) ){ return true; } this.close( true ); } return false; } private native long malloc(); private native void free(long instance); private native void open(long instance); private native void close(long instance); private native void openPorts(long instance, int count); private native void closePorts(long instance); private native long getTransportUID(long instance); private native long getTransportFrame(long instance); private native long getTransportFrameRate(long instance); private native void setTransportFrame(long instance, long frame); private native void setTransportStart(long instance); private native void setTransportStop(long instance); private native boolean isTransportRunning(long instance); private native boolean isServerRunning(long instance); private native void addEventToQueue(long instance, int port, byte[] data); } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPluginImpl.java0000644000175000017500000000326411273045346027517 0ustar julianjulianpackage org.herac.tuxguitar.jack; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; import org.herac.tuxguitar.jack.sequencer.JackSequencerProviderPlugin; import org.herac.tuxguitar.jack.settings.JackSettings; import org.herac.tuxguitar.jack.settings.JackSettingsDialog; import org.herac.tuxguitar.jack.synthesizer.JackOutputPortProviderPlugin; public class JackPluginImpl extends TGPluginList implements TGPluginSetup { private JackClient jackClient; private JackSettings jackSettings; public JackPluginImpl(){ this.jackClient = new JackClient(); this.jackSettings = new JackSettings(); } protected List getPlugins() throws TGPluginException { List plugins = new ArrayList(); plugins.add( new JackOutputPortProviderPlugin(this.jackClient , this.jackSettings) ); plugins.add( new JackSequencerProviderPlugin(this.jackClient) ); return plugins; } public void closeAll(){ if(this.jackClient.isOpen()){ this.jackClient.close(); this.jackClient.finalize(); } } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "Jack Audio Connection Kit plugin support"; } public String getName() { return "Jack Audio Connection Kit plugin support"; } public String getVersion() { return "1.0"; } public void setupDialog(Shell parent){ JackSettingsDialog jackSettingsDialog = new JackSettingsDialog( this.jackSettings ); jackSettingsDialog.open( parent ); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/TGMain.java0000644000175000017500000000024511273045225024723 0ustar julianjulianpackage org.herac.tuxguitar.gui; public class TGMain { public static void main(String[] args){ TuxGuitar.instance().displayGUI(args); System.exit(0); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/TuxGuitar.java0000644000175000017500000005334011273303230025535 0ustar julianjulian/* * Created on 25-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseTrackAdapter; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Sash; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.ActionManager; import org.herac.tuxguitar.gui.actions.file.FileActionUtils; import org.herac.tuxguitar.gui.actions.system.DisposeAction; import org.herac.tuxguitar.gui.editors.EditorCache; import org.herac.tuxguitar.gui.editors.FretBoardEditor; import org.herac.tuxguitar.gui.editors.PianoEditor; import org.herac.tuxguitar.gui.editors.TGEditorManager; import org.herac.tuxguitar.gui.editors.TGRedrawListener; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.editors.chord.CustomChordManager; import org.herac.tuxguitar.gui.editors.lyric.LyricEditor; import org.herac.tuxguitar.gui.editors.matrix.MatrixEditor; import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl; import org.herac.tuxguitar.gui.helper.FileHistory; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.items.ItemManager; import org.herac.tuxguitar.gui.marker.MarkerList; import org.herac.tuxguitar.gui.mixer.TGMixer; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.config.TGConfigManagerImpl; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.icons.IconManager; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingActionManager; import org.herac.tuxguitar.gui.system.language.LanguageManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginManager; import org.herac.tuxguitar.gui.table.TGTableViewer; import org.herac.tuxguitar.gui.tools.browser.dialog.TGBrowserDialog; import org.herac.tuxguitar.gui.tools.scale.ScaleManager; import org.herac.tuxguitar.gui.transport.TGTransport; import org.herac.tuxguitar.gui.transport.TGTransportListener; import org.herac.tuxguitar.gui.undo.UndoableManager; import org.herac.tuxguitar.gui.util.ArgumentParser; import org.herac.tuxguitar.gui.util.TGFileUtils; import org.herac.tuxguitar.gui.util.TGSplash; import org.herac.tuxguitar.gui.util.WindowTitleUtil; import org.herac.tuxguitar.player.base.MidiPlayer; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.impl.sequencer.MidiSequencerProviderImpl; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.util.TGLock; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TuxGuitar { public static final String APPLICATION_NAME = "TuxGuitar"; public static final int MARGIN_WIDTH = 5; private static TuxGuitar instance; private boolean initialized; private TGLock lock; private Display display; private Shell shell; private MidiPlayer player; private TGSongManager songManager; private TGConfigManager configManager; private LanguageManager languageManager; private KeyBindingActionManager keyBindingManager; private IconManager iconManager; private EditorCache editorCache; private TablatureEditor tablatureEditor; private TGTableViewer table; private TGMixer songMixer; private TGTransport songTransport; private FretBoardEditor fretBoardEditor; private PianoEditor pianoEditor; private MatrixEditor matrixEditor; private LyricEditor lyricEditor; private TGEditorManager editorManager; private TGBrowserDialog browser; private UndoableManager undoableManager; private ScaleManager scaleManager; private ActionManager actionManager; private ItemManager itemManager; private CustomChordManager customChordManager; private FileHistory fileHistory; private TGPluginManager pluginManager; protected Sash sash; protected Composite sashComposite; public TuxGuitar() { this.lock = new TGLock(); this.initialized = false; } public static TuxGuitar instance() { if (instance == null) { synchronized (TuxGuitar.class) { instance = new TuxGuitar(); } } return instance; } private void initSynchronizer(){ TGSynchronizer.instance().setController(new TGSynchronizer.TGSynchronizerController() { public void execute(final TGSynchronizer.TGSynchronizerTask task) { final Display display = getDisplay(); if(display != null && !display.isDisposed()){ display.syncExec(new Runnable() { public void run() { task.run(); } }); } } public void executeLater(final TGSynchronizer.TGSynchronizerTask task) { final Display display = getDisplay(); if(display != null && !display.isDisposed()){ display.asyncExec(new Runnable() { public void run() { task.run(); } }); } } }); } public void displayGUI(String[] args) { //checkeo los argumentos ArgumentParser argumentParser = new ArgumentParser(args); if(argumentParser.processAndExit()){ return; } // Priority 1 ----------------------------------------------// TGFileUtils.loadLibraries(); TGFileUtils.loadClasspath(); // Priority 2 ----------------------------------------------// Display.setAppName(APPLICATION_NAME); this.display = new Display(); this.initSynchronizer(); TGSplash.instance().init(); this.shell = new Shell(getDisplay()); this.shell.setLayout(getShellLayout()); this.shell.setImage(getIconManager().getAppIcon()); this.createComposites(getShell()); // Priority 3 ----------------------------------------------// this.getPluginManager().openPlugins(); this.restoreControlsConfig(); this.restorePlayerConfig(); this.updateCache(true); this.showTitle(); TGSplash.instance().finish(); // Priority 4 ----------------------------------------------// this.shell.addShellListener(getAction(DisposeAction.NAME)); this.shell.open(); this.startSong(argumentParser); this.setInitialized( true ); while (!getDisplay().isDisposed() && !getShell().isDisposed()) { if (!getDisplay().readAndDispatch()) { getDisplay().sleep(); } } getDisplay().dispose(); } private FormLayout getShellLayout(){ FormLayout layout = new FormLayout(); layout.marginWidth = MARGIN_WIDTH; layout.marginHeight = MARGIN_WIDTH; return layout; } private void startSong(final ArgumentParser parser){ final URL url = parser.getURL(); if(url != null){ ActionLock.lock(); new SyncThread(new Runnable() { public void run() { TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.open(url); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } }).start(); } } public void createComposites(Composite composite) { FormData data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(getItemManager().getCoolbar(),MARGIN_WIDTH); data.bottom = new FormAttachment(100,0); this.sashComposite = new Composite(composite,SWT.NONE); this.sashComposite.setLayout(new FormLayout()); this.sashComposite.setLayoutData(data); data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.bottom = new FormAttachment(100,-150); data.height = MARGIN_WIDTH; this.sash = new Sash(this.sashComposite, SWT.HORIZONTAL); this.sash.setLayoutData(data); data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(0,0); data.bottom = new FormAttachment(this.sash, 0); getTablatureEditor().showTablature(this.sashComposite); getTablatureEditor().getTablature().setLayoutData(data); data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(this.sash,0); data.bottom = new FormAttachment(100,0); getTable().init(this.sashComposite); getTable().getComposite().setLayoutData(data); data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(this.sashComposite,0); data.bottom = new FormAttachment(100,0); Composite footer = new Composite(composite,SWT.NONE); footer.setLayout(new FormLayout()); footer.setLayoutData(data); getFretBoardEditor().showFretBoard(footer); this.sash.addMouseListener(new MouseAdapter() { public void mouseUp(MouseEvent e) { TuxGuitar.this.sashComposite.layout(true,true); } }); this.sash.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { int maximumHeight = (TuxGuitar.this.sashComposite.getBounds().height - TuxGuitar.this.sash.getBounds().height); int height = (maximumHeight - event.y); height = Math.max(height,0); height = Math.min(height,maximumHeight); ((FormData) TuxGuitar.this.sash.getLayoutData()).bottom = new FormAttachment(100, -height); } }); this.sash.addMouseTrackListener(new MouseTrackAdapter() { public void mouseEnter(MouseEvent e) { TuxGuitar.this.sash.setCursor( getDisplay().getSystemCursor( SWT.CURSOR_SIZENS ) ); } }); this.sashComposite.addListener(SWT.Resize, new Listener() { public void handleEvent(Event arg0) { FormData data = ((FormData) TuxGuitar.this.sash.getLayoutData()); int height = -data.bottom.offset; int maximumHeight = (TuxGuitar.this.sashComposite.getBounds().height - TuxGuitar.this.sash.getBounds().height); if(height > maximumHeight){ data.bottom = new FormAttachment(100, -maximumHeight); } } }); } public void restoreControlsConfig(){ final TGConfigManager config = getConfig(); //---Main Shell--- boolean maximized = config.getBooleanConfigValue(TGConfigKeys.MAXIMIZED); getShell().setMaximized(maximized); if(!maximized){ int width = config.getIntConfigValue(TGConfigKeys.WIDTH); int height = config.getIntConfigValue(TGConfigKeys.HEIGHT); if(width > 0 && height > 0){ getShell().setSize(width,height); } } getShell().setMinimumSize(640,480); //---Fretboard--- if(config.getBooleanConfigValue(TGConfigKeys.SHOW_FRETBOARD)){ getFretBoardEditor().showFretBoard(); }else{ getFretBoardEditor().hideFretBoard(); } //---Mixer--- if(config.getBooleanConfigValue(TGConfigKeys.SHOW_MIXER)){ new SyncThread(new Runnable() { public void run() { getMixer().show(); } }).start(); } //---Transport--- if(config.getBooleanConfigValue(TGConfigKeys.SHOW_TRANSPORT)){ new SyncThread(new Runnable() { public void run() { getTransport().show(); } }).start(); } //---Matrix--- if(config.getBooleanConfigValue(TGConfigKeys.SHOW_MATRIX)){ new SyncThread(new Runnable() { public void run() { getMatrixEditor().show(); } }).start(); } //---Piano--- if(config.getBooleanConfigValue(TGConfigKeys.SHOW_PIANO)){ new SyncThread(new Runnable() { public void run() { getPianoEditor().show(); } }).start(); } //---Markers--- if(config.getBooleanConfigValue(TGConfigKeys.SHOW_MARKERS)){ new SyncThread(new Runnable() { public void run() { MarkerList.instance().show(); } }).start(); } } public void setTableHeight(int value){ int offset = ((FormData) getTable().getComposite().getLayoutData()).top.offset; int sashHeight = this.sash.getBounds().height; int maximumHeight = (this.sashComposite.getBounds().height - sashHeight); int height = (value + offset); height = Math.max( height,0); height = Math.min( height,maximumHeight); ((FormData) TuxGuitar.this.sash.getLayoutData()).bottom = new FormAttachment(100, -height); this.sashComposite.layout(true,true); } public void updateShellFooter(int offset,int minimumWith,int minimumHeight){ FormData data = ((FormData)this.sashComposite.getLayoutData()); data.bottom.offset = -offset; getShell().setMinimumSize(Math.max(640,minimumWith),Math.max(480,minimumHeight)); getShell().layout(true,true); getShell().redraw(); } public TGTableViewer getTable(){ if(this.table == null){ this.table = new TGTableViewer(); } return this.table; } public TablatureEditor getTablatureEditor(){ if(this.tablatureEditor == null){ this.tablatureEditor = new TablatureEditor(); } return this.tablatureEditor; } public FretBoardEditor getFretBoardEditor(){ if(this.fretBoardEditor == null){ this.fretBoardEditor = new FretBoardEditor(); } return this.fretBoardEditor; } public PianoEditor getPianoEditor(){ if(this.pianoEditor == null){ this.pianoEditor = new PianoEditor(); } return this.pianoEditor; } public MatrixEditor getMatrixEditor(){ if(this.matrixEditor == null){ this.matrixEditor = new MatrixEditor(); } return this.matrixEditor; } public TGSongManager getSongManager(){ if(this.songManager == null){ this.songManager = new TGSongManager(new TGFactoryImpl()); this.songManager.setSong(this.songManager.newSong()); } return this.songManager; } public TGMixer getMixer(){ if(this.songMixer == null){ this.songMixer = new TGMixer(); } return this.songMixer; } public TGTransport getTransport(){ if(this.songTransport == null){ this.songTransport = new TGTransport(); } return this.songTransport; } public EditorCache getEditorCache(){ if(this.editorCache == null){ this.editorCache = new EditorCache(); } return this.editorCache; } public TGEditorManager getEditorManager(){ if(this.editorManager == null){ this.editorManager = new TGEditorManager(); } return this.editorManager; } public LyricEditor getLyricEditor(){ if(this.lyricEditor == null){ this.lyricEditor = new LyricEditor(); } return this.lyricEditor; } public TGBrowserDialog getBrowser(){ if(this.browser == null){ this.browser = new TGBrowserDialog(); } return this.browser; } public UndoableManager getUndoableManager(){ if(this.undoableManager == null){ this.undoableManager = new UndoableManager(); } return this.undoableManager; } public ScaleManager getScaleManager(){ if(this.scaleManager == null){ this.scaleManager = new ScaleManager(); } return this.scaleManager; } public TGPluginManager getPluginManager(){ if(this.pluginManager == null){ this.pluginManager = new TGPluginManager(); } return this.pluginManager; } public IconManager getIconManager(){ if(this.iconManager == null){ this.iconManager = new IconManager(); this.iconManager.addLoader( new IconLoader() { public void loadIcons() { getShell().setImage(getIconManager().getAppIcon()); getShell().layout(true); } }); } return this.iconManager; } public CustomChordManager getCustomChordManager(){ if(this.customChordManager == null){ this.customChordManager = new CustomChordManager(); } return this.customChordManager; } public ItemManager getItemManager() { if(this.itemManager == null){ this.itemManager = new ItemManager(); } return this.itemManager; } public ActionManager getActionManager() { if(this.actionManager == null){ this.actionManager = new ActionManager(); } return this.actionManager; } public LanguageManager getLanguageManager() { if(this.languageManager == null){ this.languageManager = new LanguageManager(); this.loadLanguage(); } return this.languageManager; } public TGConfigManager getConfig(){ if(this.configManager == null){ this.configManager = new TGConfigManagerImpl(); this.configManager.init(); } return this.configManager; } public KeyBindingActionManager getkeyBindingManager(){ if(this.keyBindingManager == null){ this.keyBindingManager = new KeyBindingActionManager(); } return this.keyBindingManager; } public FileHistory getFileHistory(){ if(this.fileHistory == null){ this.fileHistory = new FileHistory(); } return this.fileHistory; } public MidiPlayer getPlayer(){ if(this.player == null){ this.player = new MidiPlayer(); this.player.init(getSongManager()); this.player.addListener( new TGTransportListener() ); try { getPlayer().addSequencerProvider(new MidiSequencerProviderImpl(), false); } catch (MidiPlayerException e) { e.printStackTrace(); } } return this.player; } public void restorePlayerConfig(){ //check midi sequencer getPlayer().openSequencer(getConfig().getStringConfigValue(TGConfigKeys.MIDI_SEQUENCER), true); //check midi port getPlayer().openOutputPort(getConfig().getStringConfigValue(TGConfigKeys.MIDI_PORT), true); } public void showTitle(){ new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ getShell().setText(WindowTitleUtil.parseTitle()); } } }).start(); } public void updateCache(final boolean updateItems){ if(!this.isLocked()){ this.lock(); this.getEditorCache().updateEditMode(); this.unlock(); new SyncThread(new Runnable() { public void run() { if(!isDisposed() && !isLocked()){ if(updateItems){ lock(); getEditorManager().doUpdate( TGUpdateListener.SELECTION ); unlock(); } redraw(); } } }).start(); } } protected void redraw(){ if(!isDisposed() && !this.isLocked()){ this.lock(); this.getEditorManager().doRedraw( TGRedrawListener.NORMAL ); this.unlock(); } } public void redrawPlayingMode(){ if(!isDisposed() && !this.isLocked()){ this.lock(); this.getEditorCache().updatePlayMode(); this.getEditorManager().doRedraw( this.getEditorCache().shouldRedraw() ? TGRedrawListener.PLAYING_NEW_BEAT : TGRedrawListener.PLAYING_THREAD ); this.unlock(); } } public void showExternalBeat( TGBeat beat ){ if(!isDisposed() && !this.isLocked()){ this.lock(); this.getEditorManager().showExternalBeat(beat); this.updateCache(true); this.unlock(); } } public void hideExternalBeat(){ if(!isDisposed() && !this.isLocked()){ this.lock(); this.getEditorManager().hideExternalBeat(); this.updateCache(true); this.unlock(); } } public Display getDisplay(){ return this.display; } public Shell getShell(){ return this.shell; } public Action getAction(String name) { return this.getActionManager().getAction(name); } public static String getProperty(String key) { return TuxGuitar.instance().getLanguageManager().getProperty(key); } public static String getProperty(String key,String[] arguments) { return TuxGuitar.instance().getLanguageManager().getProperty(key,arguments); } public static boolean isDisposed(){ return (TuxGuitar.instance().getDisplay().isDisposed() || TuxGuitar.instance().getShell().isDisposed()); } public void loadLanguage(){ this.lock(); getLanguageManager().setLanguage(getConfig().getStringConfigValue(TGConfigKeys.LANGUAGE)); this.unlock(); } public void loadToolBars(){ this.lock(); getItemManager().createCoolbar(); this.unlock(); } public void loadStyles(){ this.lock(); getTablatureEditor().getTablature().reloadStyles(); this.unlock(); } public void loadSkin(){ this.lock(); getIconManager().reloadIcons(); this.unlock(); } public void newSong(){ TuxGuitar.instance().fireNewSong(TuxGuitar.instance().getSongManager().newSong(),null); } public void fireNewSong(TGSong song,URL url){ this.lock(); TuxGuitar.instance().getSongManager().setSong(song); getFileHistory().reset(url); getPlayer().reset(); getPlayer().getMode().clear(); getEditorCache().reset(); getUndoableManager().discardAllEdits(); getEditorManager().doUpdate( TGUpdateListener.SONG_LOADED ); this.unlock(); updateCache(true); showTitle(); } public void fireSaveSong(URL url){ this.lock(); getFileHistory().reset(url); getEditorCache().reset(); getUndoableManager().discardAllEdits(); getEditorManager().doUpdate( TGUpdateListener.SONG_SAVED ); this.unlock(); updateCache(true); showTitle(); } public void fireUpdate(){ this.lock(); this.getEditorCache().reset(); this.getEditorManager().doUpdate( TGUpdateListener.SONG_UPDATED ); this.unlock(); } public void loadCursor(int style){ this.loadCursor(getShell(),style); } public void loadCursor(final Control control,final int style){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { if(!control.isDisposed()){ control.setCursor(getDisplay().getSystemCursor(style)); } } }); } catch (Throwable e) { e.printStackTrace(); } } public boolean isInitialized() { return this.initialized; } public void setInitialized(boolean initialized) { this.initialized = initialized; } public void lock(){ this.lock.lock(); } public void unlock(){ this.lock.unlock(); } public boolean isLocked(){ return this.lock.isLocked(); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/TGClassLoader.java0000644000175000017500000000317211273045224026425 0ustar julianjulianpackage org.herac.tuxguitar.util; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class TGClassLoader{ private static TGClassLoader instance; private URLClassLoaderImpl classLoader; private TGClassLoader(){ this.classLoader = new URLClassLoaderImpl(); } public static TGClassLoader instance(){ if(instance == null){ instance = new TGClassLoader(); } return instance; } public ClassLoader getClassLoader(){ return this.classLoader; } public Object newInstance(String loadClassName){ Object object = null; try { object = getClassLoader().loadClass(loadClassName).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return object; } public void addPath(String path){ try { this.classLoader.addURL(new File(path).toURI().toURL()); } catch (MalformedURLException e) { e.printStackTrace(); } } public void addPaths(File folder){ if(folder != null && folder.exists() && folder.isDirectory()){ String[] files = folder.list(); for(int i = 0;i < files.length;i++){ try { this.addPath( (folder.getAbsolutePath() + File.separator + files[i]) ); } catch (Throwable throwable) { throwable.printStackTrace(); } } } } private class URLClassLoaderImpl extends URLClassLoader{ public URLClassLoaderImpl(){ super(new URL[]{},TGClassLoader.class.getClassLoader()); } public void addURL(URL url){ super.addURL(url); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/TGLibraryLoader.java0000644000175000017500000000266511273045224026772 0ustar julianjulianpackage org.herac.tuxguitar.util; import java.io.File; import java.io.FilenameFilter; public class TGLibraryLoader { private static TGLibraryLoader instance; private TGLibraryLoader(){ super(); } public static TGLibraryLoader instance(){ if(instance == null){ instance = new TGLibraryLoader(); } return instance; } public void loadLibraries(File folder,final String prefix,final String extension){ if(folder != null && folder.exists()){ FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { if(name == null){ return false; } if(prefix != null && prefix.length() > 0){ int index = name.indexOf(prefix); if(index != 0){ return false; } } if(extension != null && extension.length() > 0){ int index = name.indexOf(extension); if(index != ( name.length() - extension.length() ) ){ return false; } } return true; } }; String[] files = folder.list(filter); for(int i = 0; i < files.length; i ++){ File file = new File(folder.getAbsolutePath() + File.separator + files[i]); if(file.exists() && !file.isDirectory()){ loadLibrary(file); } } } } protected void loadLibrary(File file){ try{ System.out.println("Loading: " + file.getAbsolutePath()); System.load(file.getAbsolutePath()); }catch(Throwable throwable){ throwable.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/TGLock.java0000644000175000017500000000147111273045224025121 0ustar julianjulianpackage org.herac.tuxguitar.util; public class TGLock { private Object lock; private Thread lockThread; public TGLock(){ this.lock = new Object(); this.lockThread = null; } public void lock(){ Thread thread = Thread.currentThread(); boolean lockSuccess = false; synchronized( this.lock ){ if( ( lockSuccess = !this.isLocked( thread ) ) ){ this.lockThread = thread; } } if( !lockSuccess ){ while( isLocked(thread) ){ Thread.yield(); } this.lock(); } } public void unlock(){ synchronized( this.lock ){ this.lockThread = null; } } public boolean isLocked(Thread thread){ synchronized( this.lock ){ return (this.lockThread != null && this.lockThread != thread); } } public boolean isLocked(){ return isLocked( Thread.currentThread() ); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/TGServiceReader.java0000644000175000017500000000521311273045224026752 0ustar julianjulianpackage org.herac.tuxguitar.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; public class TGServiceReader { private static final String SERVICE_PATH = new String("META-INF/services/"); public static Iterator lookupProviders(Class spi){ return TGServiceReader.lookupProviders(spi,TGClassLoader.instance().getClassLoader()); } public static Iterator lookupProviders(Class spi,ClassLoader loader){ try{ if (spi == null || loader == null){ throw new IllegalArgumentException(); } return new IteratorImpl(spi,loader,loader.getResources(SERVICE_PATH + spi.getName())); }catch (IOException ioex){ return Collections.EMPTY_LIST.iterator(); } } private static final class IteratorImpl implements Iterator{ private Class spi; private ClassLoader loader; private Enumeration urls; private Iterator iterator; public IteratorImpl(Class spi,ClassLoader loader,Enumeration urls){ this.spi = spi; this.loader = loader; this.urls = urls; this.initialize(); } private void initialize(){ List providers = new ArrayList(); while (this.urls.hasMoreElements()) { URL url = (URL) this.urls.nextElement(); try { BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); String line = null; while((line = reader.readLine()) != null){ String provider = uncommentLine(line).trim(); if(provider != null && provider.length() > 0){ providers.add(provider); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } this.iterator = providers.iterator(); } private String uncommentLine(String line){ int index = line.indexOf('#'); if(index >= 0){ return (line.substring(0,index)); } return line; } public boolean hasNext() { return (this.iterator != null && this.iterator.hasNext()); } public Object next() { if (!hasNext()){ throw new NoSuchElementException(); } try { Object provider = this.loader.loadClass( (String)this.iterator.next() ).newInstance(); if(this.spi.isInstance(provider)){ return provider; } } catch (Throwable throwable) { throwable.printStackTrace(); } throw new NoSuchElementException(); } public void remove() { throw new UnsupportedOperationException(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/TGSynchronizer.java0000644000175000017500000000306411273045224026726 0ustar julianjulianpackage org.herac.tuxguitar.util; public class TGSynchronizer { private static TGSynchronizer instance; private TGSynchronizerController controller; private TGSynchronizer(){ super(); } public static TGSynchronizer instance(){ if (instance == null) { synchronized (TGSynchronizer.class) { instance = new TGSynchronizer(); } } return instance; } public void addRunnable(TGRunnable runnable) throws Throwable { TGSynchronizerTask task = new TGSynchronizerTask(runnable); this.controller.execute(task); if(task.getThrowable() != null){ throw task.getThrowable(); } } public void runLater(TGRunnable runnable) throws Throwable { TGSynchronizerTask task = new TGSynchronizerTask(runnable); this.controller.executeLater(task); if(task.getThrowable() != null){ throw task.getThrowable(); } } public void setController(TGSynchronizerController controller){ this.controller = controller; } public class TGSynchronizerTask{ private Throwable throwable; private TGRunnable runnable; public TGSynchronizerTask(TGRunnable runnable){ this.runnable = runnable; this.throwable = null; } public Throwable getThrowable(){ return this.throwable; } public void run(){ try{ this.runnable.run(); }catch(Throwable throwable){ this.throwable = throwable; } } } public interface TGRunnable { public void run() throws Throwable; } public interface TGSynchronizerController{ public void execute(TGSynchronizerTask task); public void executeLater(TGSynchronizerTask task); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/util/TGVersion.java0000644000175000017500000000164611273045224025662 0ustar julianjulianpackage org.herac.tuxguitar.util; public class TGVersion { public static final TGVersion CURRENT = new TGVersion(1,2,0); private int major; private int minor; private int revision; public TGVersion(int major,int minor, int revision){ this.major = major; this.minor = minor; this.revision = revision; } public int getMajor() { return this.major; } public int getMinor() { return this.minor; } public int getRevision() { return this.revision; } public boolean isSameVersion(TGVersion version){ if( version == null ){ return false; } return ( version.getMajor() == getMajor() && version.getMinor() == getMinor() && version.getRevision() == getRevision()); } public String getVersion(){ String version = (getMajor() + "." + getMinor()); if( getRevision() > 0 ){ version += ("." + getRevision()); } return version; } public String toString(){ return getVersion(); } } tuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayPlugin.java0000644000175000017500000000172111273045352027306 0ustar julianjulianpackage org.herac.tuxguitar.tray; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class TGTrayPlugin extends TGPluginAdapter { private boolean loaded; private TGTray tray; public TGTrayPlugin(){ super(); } public void init() { this.tray = new TGTray(); } public void close() { this.removePlugin(); } public void setEnabled(boolean enabled) { if(enabled){ this.addPlugin(); }else{ this.removePlugin(); } } protected void addPlugin(){ if(!this.loaded){ this.tray.addTray(); this.loaded = true; } } protected void removePlugin(){ if(this.loaded){ this.tray.removeTray(); this.loaded = false; } } public String getAuthor() { return "Julian Casadesus "; } public String getName() { return "System Tray plugin"; } public String getDescription() { return "System Tray plugin for tuxguitar"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTray.java0000644000175000017500000000426211273045352026132 0ustar julianjulianpackage org.herac.tuxguitar.tray; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tray; import org.eclipse.swt.widgets.TrayItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; public class TGTray implements IconLoader,LanguageLoader{ private boolean visible; private Display display; private Tray tray; private TGTrayIcon icon; private TGTrayMenu menu; public TGTray(){ this.display = TuxGuitar.instance().getDisplay(); this.tray = this.display.getSystemTray(); this.icon = new TGTrayIcon(); this.menu = new TGTrayMenu(); TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); } public void removeTray(){ if (this.tray != null) { setVisible(true); TrayItem items[] = this.tray.getItems(); for(int i = 0; i < items.length; i ++){ items[i].dispose(); } this.icon.dispose(); this.menu.dispose(); } } public void addTray() { if (this.tray != null) { this.menu.make(); this.visible = true; TrayItem item = new TrayItem (this.tray, SWT.NONE); item.setToolTipText(TuxGuitar.APPLICATION_NAME); item.addListener (SWT.Selection, new Listener () { public void handleEvent (Event event) { setVisible(); } }); item.addListener (SWT.MenuDetect, new Listener () { public void handleEvent (Event event) { showMenu(); } }); this.icon.setItem(item); this.loadIcons(); } } public void loadIcons() { this.icon.loadImage(); this.menu.loadIcons(); } public void loadProperties(){ this.menu.loadProperties(); } protected void setVisible(){ this.setVisible(!this.visible); } protected void setVisible(boolean visible){ if (this.tray != null) { Shell shells[] = this.display.getShells(); for(int i = 0; i < shells.length; i ++){ shells[i].setVisible( visible ); } this.visible = visible; } } protected void showMenu(){ this.menu.show(); } } tuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayMenu.java0000644000175000017500000000354311273045352026760 0ustar julianjulianpackage org.herac.tuxguitar.tray; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.file.ExitAction; import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction; import org.herac.tuxguitar.gui.actions.transport.TransportStopAction; public class TGTrayMenu { private Menu menu; private MenuItem play; private MenuItem stop; private MenuItem exit; public void make(){ this.menu = new Menu (TuxGuitar.instance().getShell(), SWT.POP_UP); this.play = new MenuItem(this.menu,SWT.PUSH); this.play.addSelectionListener(TuxGuitar.instance().getAction(TransportPlayAction.NAME)); this.stop = new MenuItem(this.menu, SWT.PUSH); this.stop.addSelectionListener(TuxGuitar.instance().getAction(TransportStopAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); this.exit = new MenuItem(this.menu, SWT.PUSH); this.exit.addSelectionListener(TuxGuitar.instance().getAction(ExitAction.NAME)); this.loadProperties(); this.loadIcons(); } public void loadProperties(){ if(this.menu != null && !this.menu.isDisposed()){ this.play.setText(TuxGuitar.getProperty("transport.start")); this.stop.setText(TuxGuitar.getProperty("transport.stop")); this.exit.setText(TuxGuitar.getProperty("file.exit")); } } public void loadIcons(){ if(this.menu != null && !this.menu.isDisposed()){ this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1()); } } public void show(){ if(this.menu != null && !this.menu.isDisposed()){ this.menu.setVisible(true); } } public void dispose(){ if(this.menu != null && !this.menu.isDisposed()){ this.menu.dispose(); } } } tuxguitar-src-1.2/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayIcon.java0000644000175000017500000000121211273045352026733 0ustar julianjulianpackage org.herac.tuxguitar.tray; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.TrayItem; import org.herac.tuxguitar.gui.util.TGFileUtils; public class TGTrayIcon { private Image image; private TrayItem item; public TGTrayIcon(){ super(); } public void setItem(TrayItem item){ this.item = item; } public void loadImage(){ this.dispose(); if(this.item != null && !this.item.isDisposed()){ this.image = TGFileUtils.loadImage("icon-24x24.png"); this.item.setImage(this.image); } } public void dispose(){ if(this.image != null && !this.image.isDisposed()){ this.image.dispose(); } } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarkerPlugin.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedM0000644000175000017500000000147211273336573033422 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.modifiedmarker; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class ModifiedMarkerPlugin extends TGPluginAdapter { private ModifiedMarker modifiedMarker; public void init() throws TGPluginException { // Nothing todo } public void close() throws TGPluginException { // Nothing todo } public void setEnabled(boolean enabled) throws TGPluginException { try { if( this.modifiedMarker != null ){ this.modifiedMarker.setEnabled(enabled); }else if(enabled){ this.modifiedMarker = new ModifiedMarker(); this.modifiedMarker.setEnabled(true); this.modifiedMarker.init(); } } catch( Throwable throwable ){ throw new TGPluginException( throwable ); } } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarker.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedM0000644000175000017500000000206511273336742033417 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.modifiedmarker; import org.eclipse.swt.internal.cocoa.NSWindow; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGUpdateListener; public class ModifiedMarker implements TGUpdateListener { private boolean enabled; public ModifiedMarker(){ super(); } /** From 'TGUpdateListener' */ public void doUpdate( int type ){ if (!enabled) return; final boolean isEdited = TuxGuitar.instance().getFileHistory().isUnsavedFile(); setFrameState( isEdited ); } public void init() throws Throwable{ TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; if (!enabled) setFrameState(false); } private void setFrameState(boolean modified) { Shell shell = TuxGuitar.instance().getShell(); NSWindow nsWindow = shell.view.window(); nsWindow.setDocumentEdited(modified); } } tuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenu.java0000644000175000017500000000631611255427043032007 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.menu; import org.eclipse.swt.internal.Callback; import org.eclipse.swt.internal.cocoa.NSApplication; import org.eclipse.swt.internal.cocoa.NSMenu; import org.eclipse.swt.internal.cocoa.NSMenuItem; import org.herac.tuxguitar.cocoa.TGCocoa; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.file.ExitAction; import org.herac.tuxguitar.gui.actions.help.ShowAboutAction; import org.herac.tuxguitar.gui.actions.settings.EditConfigAction; public class MacMenu { private static final long kAboutMenuItem = 0; private static final long kPreferencesMenuItem = 2; private static long sel_preferencesMenuItemSelected_ = TGCocoa.sel_registerName("preferencesMenuItemSelected:"); private static long sel_aboutMenuItemSelected_ = TGCocoa.sel_registerName("aboutMenuItemSelected:"); private boolean enabled; public MacMenu(){ super(); } public void init() throws Throwable{ long cls = TGCocoa.objc_lookUpClass ("SWTApplicationDelegate"); if( cls != 0 ){ Callback callback = TGCocoa.newCallback( this , "callbackProc64", "callbackProc32", 3 ); long callbackProc = TGCocoa.getCallbackAddress( callback ); if( callbackProc != 0 ){ TGCocoa.class_addMethod(cls, sel_preferencesMenuItemSelected_, callbackProc , "@:@"); TGCocoa.class_addMethod(cls, sel_aboutMenuItemSelected_, callbackProc , "@:@"); } } NSApplication app = NSApplication.sharedApplication(); NSMenu mainMenu = app.mainMenu(); if( TGCocoa.getMenuNumberOfItems( mainMenu ) > 0 ){ NSMenuItem appMenuItem = TGCocoa.getMenuItemAtIndex( mainMenu , 0 ); NSMenu appMenu = appMenuItem.submenu(); long itemCount = TGCocoa.getMenuNumberOfItems( appMenu ); if( itemCount > kPreferencesMenuItem ) { NSMenuItem menuItem = TGCocoa.getMenuItemAtIndex( appMenu , kPreferencesMenuItem ); menuItem.setEnabled( true ); TGCocoa.setControlAction(menuItem, sel_preferencesMenuItemSelected_); } if( itemCount > kAboutMenuItem ) { NSMenuItem menuItem = TGCocoa.getMenuItemAtIndex( appMenu , kAboutMenuItem ); menuItem.setEnabled( true ); TGCocoa.setControlAction(menuItem, sel_aboutMenuItemSelected_); } } } public long callbackProc( long id, long sel, long arg0 ) { if ( this.isEnabled() ){ if ( sel == sel_preferencesMenuItemSelected_ ) { return handlePreferencesCommand(); }else if ( sel == sel_aboutMenuItemSelected_ ) { return handleAboutCommand(); } } return TGCocoa.noErr; } public long callbackProc64( long id, long sel, long arg0 ) { return this.callbackProc(id, sel, arg0); } public int callbackProc32( int id, int sel, int arg0 ) { return (int)this.callbackProc( (long)id, (long)sel, (long)arg0); } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public long handleQuitCommand(){ TuxGuitar.instance().getAction(ExitAction.NAME).process(null); return TGCocoa.noErr; } public long handleAboutCommand(){ TuxGuitar.instance().getAction(ShowAboutAction.NAME).process(null); return TGCocoa.noErr; } public long handlePreferencesCommand(){ TuxGuitar.instance().getAction(EditConfigAction.NAME).process(null); return TGCocoa.noErr; } } tuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenuPlugin.java0000644000175000017500000000136111255423241033155 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.menu; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class MacMenuPlugin extends TGPluginAdapter { private MacMenu macMenu; public void init() throws TGPluginException { // Nothing todo } public void close() throws TGPluginException { // Nothing todo } public void setEnabled(boolean enabled) throws TGPluginException { try { if( this.macMenu != null ){ this.macMenu.setEnabled(enabled); }else if(enabled){ this.macMenu = new MacMenu(); this.macMenu.setEnabled(true); this.macMenu.init(); } } catch( Throwable throwable ){ throw new TGPluginException( throwable ); } } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocListener.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocListener.0000644000175000017500000000303611255426702033335 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.opendoc; import org.eclipse.swt.internal.Callback; import org.herac.tuxguitar.cocoa.TGCocoa; public class OpenDocListener { public static final long sel_application_openFile_ = TGCocoa.sel_registerName("application:openFile:"); private boolean enabled; public OpenDocListener(){ this.enabled = false; } public void init() throws Throwable{ long cls = TGCocoa.objc_lookUpClass ("SWTApplicationDelegate"); if( cls != 0 ){ Callback callback = TGCocoa.newCallback( this , "callbackProc64" , "callbackProc32", 4 ); long callbackProc = TGCocoa.getCallbackAddress( callback ); if( callbackProc != 0 ){ TGCocoa.class_addMethod(cls, sel_application_openFile_, callbackProc , "B:@@"); } } } public long callbackProc(long id, long sel,long arg0, long arg1) { if( this.isEnabled() ){ if (sel == sel_application_openFile_) { try { String filename = TGCocoa.getNSStringValue(arg1); if( filename.length() > 0 ){ OpenDocAction.saveAndOpen( filename ); } }catch (Throwable throwable){ throwable.printStackTrace(); } } } return TGCocoa.noErr; } public long callbackProc64(long id, long sel,long arg0, long arg1) { return this.callbackProc(id, sel, arg0, arg1); } public int callbackProc32(int id, int sel,int arg0, int arg1) { return (int)this.callbackProc( (long)id, (long)sel, (long)arg0, (long)arg1); } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocAction.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocAction.ja0000644000175000017500000000370611255426147033307 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.opendoc; import org.eclipse.swt.SWT; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.file.FileActionUtils; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.util.ConfirmDialog; public class OpenDocAction { public static void saveAndOpen(final String file){ ActionLock.lock(); TuxGuitar.instance().getPlayer().reset(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ ActionLock.unlock(); return; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); openFile( file ); } } }).start(); } } }).start(); return; } } openFile(file ); } protected static void openFile(final String url){ if(url == null){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.open(url); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocPlugin.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocPlugin.ja0000644000175000017500000000146411255423256033325 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.opendoc; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class OpenDocPlugin extends TGPluginAdapter { private OpenDocListener openDocListener; public void init() throws TGPluginException { // Nothing todo } public void close() throws TGPluginException { // Nothing todo } public void setEnabled(boolean enabled) throws TGPluginException { try { if( this.openDocListener != null ){ this.openDocListener.setEnabled(enabled); }else if(enabled){ this.openDocListener = new OpenDocListener(); this.openDocListener.setEnabled(true); this.openDocListener.init(); } } catch( Throwable throwable ){ throw new TGPluginException( throwable ); } } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarAction.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarAction0000644000175000017500000000073011255225015033406 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.toolbar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.util.TGSynchronizer; public class MacToolbarAction { protected static void toogleToolbar(){ try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { TuxGuitar.instance().getItemManager().toogleToolbarVisibility(); } }); } catch (Throwable e) { e.printStackTrace(); } } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarPlugin.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarPlugin0000644000175000017500000000175211255525027033442 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.toolbar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class MacToolbarPlugin extends TGPluginAdapter { private MacToolbar macToolbar; public void init() throws TGPluginException { // Nothing todo } public void close() throws TGPluginException { try { if( this.macToolbar != null ){ this.macToolbar.finalize(); } } catch( Throwable throwable ){ throw new TGPluginException( throwable ); } } public void setEnabled(boolean enabled) throws TGPluginException { try { if( this.macToolbar != null ){ this.macToolbar.setEnabled(enabled); }else if(enabled){ this.macToolbar = new MacToolbar(); this.macToolbar.setEnabled(true); this.macToolbar.init( TuxGuitar.instance().getShell() ); } } catch( Throwable throwable ){ throw new TGPluginException( throwable ); } } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarDelegate.javatuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarDelega0000644000175000017500000000030111255443024033346 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.toolbar; import org.eclipse.swt.internal.cocoa.NSObject; public class MacToolbarDelegate extends NSObject { public MacToolbarDelegate() { super(); } } tuxguitar-src-1.2/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbar.java0000644000175000017500000000616211255525217033204 0ustar julianjulianpackage org.herac.tuxguitar.cocoa.toolbar; import org.eclipse.swt.internal.C; import org.eclipse.swt.internal.Callback; import org.eclipse.swt.internal.cocoa.NSButton; import org.eclipse.swt.internal.cocoa.NSString; import org.eclipse.swt.internal.cocoa.NSToolbar; import org.eclipse.swt.internal.cocoa.NSWindow; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.cocoa.TGCocoa; public class MacToolbar { private static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'}; private static final long NSWindowToolbarButton = 3; private static final long sel_toolbarButtonClicked_ = TGCocoa.sel_registerName("toolbarButtonClicked:"); private boolean enabled; private long delegateRef; private MacToolbarDelegate delegate; public MacToolbar(){ super(); } public void init( Shell shell ) throws Throwable{ Callback callback = TGCocoa.newCallback( this , "callbackProc64", "callbackProc32", 3 ); long callbackProc = TGCocoa.getCallbackAddress( callback ); if( callbackProc != 0 ){ String classname = ("MacToolbarDelegate"); if( TGCocoa.objc_lookUpClass ( classname ) == 0 ) { long cls = TGCocoa.objc_allocateClassPair( classname , 0 ) ; TGCocoa.class_addIvar(cls, SWT_OBJECT, C.PTR_SIZEOF , (byte)(C.PTR_SIZEOF == 4 ? 2 : 3), new byte[]{'*','\0'} ); TGCocoa.class_addMethod(cls, sel_toolbarButtonClicked_, callbackProc , "@:@"); TGCocoa.objc_registerClassPair(cls); } this.delegate = TGCocoa.newMacToolbarDelegate(); this.delegate.alloc().init(); this.delegateRef = TGCocoa.NewGlobalRef( MacToolbar.this ); TGCocoa.object_setInstanceVariable( MacToolbarDelegate.class.getField("id").get( delegate ) , SWT_OBJECT , this.delegateRef ); NSToolbar dummyBar = new NSToolbar(); dummyBar.alloc(); dummyBar.initWithIdentifier(NSString.stringWith("SWTToolbar")); //$NON-NLS-1$ dummyBar.setVisible(false); NSWindow nsWindow = shell.view.window(); nsWindow.setToolbar(dummyBar); dummyBar.release(); nsWindow.setShowsToolbarButton(true); NSButton toolbarButton = TGCocoa.getStandardWindowButton(nsWindow, NSWindowToolbarButton); if (toolbarButton != null) { toolbarButton.setTarget( delegate ); TGCocoa.setControlAction( toolbarButton , sel_toolbarButtonClicked_ ); } } } public void finalize() throws Throwable{ if( this.delegateRef != 0 ){ TGCocoa.DeleteGlobalRef( this.delegateRef ); this.delegateRef = 0; } } public long callbackProc( long id, long sel, long arg0 ) { if ( this.isEnabled() ){ if ( sel == sel_toolbarButtonClicked_ ) { return handleToogleToolbarCommand(); } } return TGCocoa.noErr; } public long callbackProc64( long id, long sel, long arg0 ) { return this.callbackProc(id, sel, arg0); } public int callbackProc32( int id, int sel, int arg0 ) { return (int)this.callbackProc( (long)id, (long)sel, (long)arg0); } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public long handleToogleToolbarCommand(){ MacToolbarAction.toogleToolbar(); return TGCocoa.noErr; } } tuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIISongExporter.java0000644000175000017500000000144611273045343031022 0ustar julianjulianpackage org.herac.tuxguitar.io.ascii; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; public class ASCIISongExporter implements TGLocalFileExporter{ private OutputStream stream; public String getExportName() { return "ASCII"; } public TGFileFormat getFileFormat() { return new TGFileFormat("ASCII","*.tab"); } public boolean configure(boolean setDefaults) { return true; } public void init(TGFactory factory,OutputStream stream){ this.stream = stream; } public void exportSong(TGSong song) { if( this.stream != null ){ new ASCIITabOutputStream(this.stream).writeSong(song); } } }tuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIITabOutputStream.java0000644000175000017500000001267611273045343031475 0ustar julianjulianpackage org.herac.tuxguitar.io.ascii; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.util.Iterator; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; public class ASCIITabOutputStream { private static final String[] TONIC_NAMES = new String[]{"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}; private static final int MAX_LINE_LENGTH = 80; private TGSongManager manager; private PrintStream stream; private ASCIIOutputStream out; public ASCIITabOutputStream(PrintStream stream){ this.stream = stream; } public ASCIITabOutputStream(OutputStream stream){ this(new PrintStream(stream)); } public ASCIITabOutputStream(String fileName) throws FileNotFoundException{ this(new FileOutputStream(fileName)); } public void writeSong(TGSong song){ this.manager = new TGSongManager(); this.manager.setSong(song); this.out = new ASCIIOutputStream(this.stream); this.drawSong(); this.out.flush(); this.out.close(); } private void drawSong(){ TGSong song = this.manager.getSong(); //Propiedades de cancion this.out.drawStringLine("Title: " + song.getName()); this.out.drawStringLine("Artist: " + song.getArtist()); this.out.drawStringLine("Album: " + song.getAlbum()); this.out.drawStringLine("Author: " + song.getAuthor()); Iterator it = song.getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); this.out.nextLine(); drawTrack(track); this.out.nextLine(); } } private void drawTrack(TGTrack track){ //Propiedades de pista this.out.nextLine(); this.out.drawStringLine("Track " + track.getNumber() + ": " + track.getName()); //Obtengo los nombres de la afinacion, y el ancho maximo que ocupa String[] tuning = new String[track.getStrings().size()]; int maxTuningLength = 1; for(int i = 0; i < track.getStrings().size();i++){ TGString string = (TGString)track.getStrings().get(i); tuning[i] = TONIC_NAMES[(string.getValue() % TONIC_NAMES.length)]; maxTuningLength = Math.max(maxTuningLength,tuning[i].length()); } int nextMeasure = 0; boolean eof = false; while(!eof){ this.out.nextLine(); int index = nextMeasure; for(int i = 0; i < track.getStrings().size();i++){ TGString string = (TGString)track.getStrings().get(i); //Dibujo la afinacion de la cuerda this.out.drawTuneSegment(tuning[i],maxTuningLength); int measureCount = track.countMeasures(); for(int j = index; j < measureCount; j++){ TGMeasure measure = track.getMeasure(j); drawMeasure(measure,string); nextMeasure = (j + 1); //Calculo si era el ultimo compas eof = (this.manager.getTrackManager().isLastMeasure(measure)); //Si se supero el ancho maximo, bajo de linea if(this.out.getPosX() > MAX_LINE_LENGTH){ break; } } //Cierro los compases this.out.drawBarSegment(); this.out.nextLine(); } this.out.nextLine(); } this.out.nextLine(); } private void drawMeasure(TGMeasure measure,TGString string){ //Abro el compas this.out.drawBarSegment(); this.out.drawStringSegments(1); TGBeat beat = this.manager.getMeasureManager().getFirstBeat( measure.getBeats() ); while(beat != null){ int outLength = 0; //Si hay una nota en la misma cuerda, la dibujo TGNote note = this.manager.getMeasureManager().getNote(beat, string.getNumber()); if(note != null){ outLength = (Integer.toString(note.getValue()).length() - 1); this.out.drawNote(note.getValue()); } //dejo el espacio else{ this.out.drawStringSegments(1); } TGBeat nextBeat = this.manager.getMeasureManager().getNextBeat( measure.getBeats() , beat); long length = (nextBeat != null ? nextBeat.getStart() - beat.getStart() : (measure.getStart() + measure.getLength()) - beat.getStart()); //Agrego espacios correspondientes hasta el proximo pulso. this.out.drawStringSegments(getDurationScaping(length) - outLength); beat = nextBeat; //Agrego espacios correspondientes hasta el proximo pulso. //this.out.drawStringSegments(getDurationScaping(beat.getDuration()) - outLength); //beat = this.manager.getMeasureManager().getNextBeat( measure.getBeats() , beat); } } /* private int getDurationScaping(TGDuration duration){ int spacing = 1; if(duration.getValue() >= TGDuration.SIXTEENTH){ spacing = 2; } else if(duration.getValue() >= TGDuration.EIGHTH){ spacing = 3; } else if(duration.getValue() >= TGDuration.QUARTER){ spacing = 4; } else if(duration.getValue() >= TGDuration.HALF){ spacing = 5; } else if(duration.getValue() >= TGDuration.WHOLE){ spacing = 6; } return spacing; } */ private int getDurationScaping(long length){ int spacing = 6; if(length <= (TGDuration.QUARTER_TIME / 8)){ spacing = 1; } else if(length <= (TGDuration.QUARTER_TIME / 4)){ spacing = 2; } else if(length <= (TGDuration.QUARTER_TIME / 2)){ spacing = 3; } else if(length <= TGDuration.QUARTER_TIME){ spacing = 4; } else if(length <= (TGDuration.QUARTER_TIME * 2)){ spacing = 5; } return spacing; } } tuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIIPluginExporter.java0000644000175000017500000000107511273045343031350 0ustar julianjulianpackage org.herac.tuxguitar.io.ascii; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class ASCIIPluginExporter extends TGExporterPlugin{ protected TGRawExporter getExporter() { return new ASCIISongExporter(); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "ASCII tab exporter"; } public String getName() { return "ASCII tab exporter"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIIOutputStream.java0000644000175000017500000000260411273045343031034 0ustar julianjulianpackage org.herac.tuxguitar.io.ascii; import java.io.PrintStream; import java.io.PrintWriter; public class ASCIIOutputStream { private PrintWriter writer; private int x; private int y; public ASCIIOutputStream(PrintStream stream){ this.writer = new PrintWriter(stream); } public void drawNote(int fret){ movePoint(getPosX() + ((fret >=10 )?2:1),getPosY()); this.writer.print(fret); } public void drawStringSegments(int count){ movePoint(getPosX() + count,getPosY()); for(int i = 0; i < count;i ++){ this.writer.print("-"); } } public void drawTuneSegment(String tune,int maxLength){ for(int i = tune.length();i < maxLength;i ++){ drawSpace(); } movePoint(getPosX() + tune.length(),getPosY()); this.writer.print(tune); } public void drawBarSegment(){ movePoint(getPosX() + 1,getPosY()); this.writer.print("|"); } public void nextLine(){ movePoint(0,getPosY() + 1); this.writer.println(""); } public void drawStringLine(String s){ movePoint(0,getPosY() + 1); this.writer.println(s); } public void drawSpace(){ movePoint(getPosX() + 1,getPosY()); this.writer.print(" "); } private void movePoint(int x,int y){ this.x = x; this.y = y; } public int getPosX(){ return this.x; } public int getPosY(){ return this.y; } public void flush(){ this.writer.flush(); } public void close(){ this.writer.close(); } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettingsDialog.javatuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettingsDialog.java0000644000175000017500000002546211273045347033561 0ustar julianjulianpackage org.herac.tuxguitar.io.lilypond; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; public class LilypondSettingsDialog { private static final int STATUS_NONE = 0; private static final int STATUS_CANCELLED = 1; private static final int STATUS_ACCEPTED = 2; protected int status; public LilypondSettingsDialog(){ super(); } public LilypondSettings open() { this.status = STATUS_NONE; final LilypondSettings settings = LilypondSettings.getDefaults(); final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout(2, false)); dialog.setText(TuxGuitar.getProperty("lilypond.options")); Composite columnLeft = new Composite(dialog, SWT.NONE); columnLeft.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); columnLeft.setLayout(getColumnLayout()); Composite columnRight = new Composite(dialog, SWT.NONE); columnRight.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); columnRight.setLayout(getColumnLayout()); //------------------TRACK SELECTION------------------ Group trackGroup = new Group(columnLeft ,SWT.SHADOW_ETCHED_IN); trackGroup.setLayout(new GridLayout(2,false)); trackGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); trackGroup.setText(TuxGuitar.getProperty("lilypond.options.select-track.tip")); final Label trackLabel = new Label(trackGroup, SWT.NULL); trackLabel.setText(TuxGuitar.getProperty("lilypond.options.select-track") + ":"); trackLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Combo trackCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY); trackCombo.setLayoutData(getComboData()); for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){ trackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName()); } trackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1); trackCombo.setEnabled( settings.getTrack() != LilypondSettings.ALL_TRACKS ); final Button trackAllCheck = new Button(trackGroup,SWT.CHECK); trackAllCheck.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true,2,1)); trackAllCheck.setText(TuxGuitar.getProperty("lilypond.options.select-all-tracks")); trackAllCheck.setSelection( settings.getTrack() == LilypondSettings.ALL_TRACKS ); //------------------MEASURE RANGE------------------ Group measureGroup = new Group(columnLeft,SWT.SHADOW_ETCHED_IN); measureGroup.setLayout(new GridLayout(2,false)); measureGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); measureGroup.setText(TuxGuitar.getProperty("lilypond.options.measure-range.tip")); final int minSelection = 1; final int maxSelection = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders(); Label measureFromLabel = new Label(measureGroup, SWT.NULL); measureFromLabel.setText(TuxGuitar.getProperty("lilypond.options.measure-range.from")); measureFromLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Spinner measureFromSpinner = new Spinner(measureGroup, SWT.BORDER); measureFromSpinner.setLayoutData(getSpinnerData()); measureFromSpinner.setMaximum(maxSelection); measureFromSpinner.setMinimum(minSelection); measureFromSpinner.setSelection(minSelection); Label measureToLabel = new Label(measureGroup, SWT.NULL); measureToLabel.setText(TuxGuitar.getProperty("lilypond.options.measure-range.to")); measureToLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Spinner measureToSpinner = new Spinner(measureGroup, SWT.BORDER); measureToSpinner.setLayoutData(getSpinnerData()); measureToSpinner.setMinimum(minSelection); measureToSpinner.setMaximum(maxSelection); measureToSpinner.setSelection(maxSelection); measureFromSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int fromSelection = measureFromSpinner.getSelection(); int toSelection = measureToSpinner.getSelection(); if(fromSelection < minSelection){ measureFromSpinner.setSelection(minSelection); }else if(fromSelection > toSelection){ measureFromSpinner.setSelection(toSelection); } } }); measureToSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int toSelection = measureToSpinner.getSelection(); int fromSelection = measureFromSpinner.getSelection(); if(toSelection < fromSelection){ measureToSpinner.setSelection(fromSelection); }else if(toSelection > maxSelection){ measureToSpinner.setSelection(maxSelection); } } }); //------------------LAYOUT OPTIONS------------------ Group layoutGroup = new Group(columnRight,SWT.SHADOW_ETCHED_IN); layoutGroup.setLayout(new GridLayout()); layoutGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); layoutGroup.setText(TuxGuitar.getProperty("lilypond.options.layout.tip")); final Button scoreCheck = new Button(layoutGroup,SWT.CHECK); scoreCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); scoreCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-score")); scoreCheck.setSelection(settings.isScoreEnabled()); final Button tablatureCheck = new Button(layoutGroup,SWT.CHECK); tablatureCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); tablatureCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-tablature")); tablatureCheck.setSelection(settings.isTablatureEnabled()); final Button trackGroupCheck = new Button(layoutGroup,SWT.CHECK); trackGroupCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); trackGroupCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-track-groups")); trackGroupCheck.setSelection(settings.isTrackGroupEnabled()); trackGroupCheck.setEnabled(settings.getTrack() == LilypondSettings.ALL_TRACKS); final Button trackNameCheck = new Button(layoutGroup,SWT.CHECK); trackNameCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); trackNameCheck.setSelection(settings.isTrackNameEnabled()); trackNameCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-track-names")); final Button lyricsCheck = new Button(layoutGroup,SWT.CHECK); lyricsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); lyricsCheck.setSelection(settings.isLyricsEnabled()); lyricsCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-lyrics")); final Button textsCheck = new Button(layoutGroup,SWT.CHECK); textsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); textsCheck.setSelection(settings.isTextEnabled()); textsCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-texts")); final Button chordDiagramsCheck = new Button(layoutGroup,SWT.CHECK); chordDiagramsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); chordDiagramsCheck.setSelection(settings.isChordDiagramEnabled()); chordDiagramsCheck.setText(TuxGuitar.getProperty("lilypond.options.layout.enable-chord-diagrams")); tablatureCheck.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!tablatureCheck.getSelection()){ scoreCheck.setSelection(true); } } }); scoreCheck.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!scoreCheck.getSelection()){ tablatureCheck.setSelection(true); } } }); trackAllCheck.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { trackLabel.setEnabled( !trackAllCheck.getSelection() ); trackCombo.setEnabled( !trackAllCheck.getSelection() ); trackGroupCheck.setEnabled( trackAllCheck.getSelection() ); } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true,2,1)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { LilypondSettingsDialog.this.status = STATUS_ACCEPTED; settings.setTrack( trackAllCheck.getSelection()?LilypondSettings.ALL_TRACKS:trackCombo.getSelectionIndex() + 1); settings.setTrackGroupEnabled( trackAllCheck.getSelection()? trackGroupCheck.getSelection() : false); settings.setTrackNameEnabled( trackNameCheck.getSelection() ); settings.setMeasureFrom(measureFromSpinner.getSelection()); settings.setMeasureTo(measureToSpinner.getSelection()); settings.setScoreEnabled(scoreCheck.getSelection()); settings.setTablatureEnabled(tablatureCheck.getSelection()); settings.setChordDiagramEnabled(chordDiagramsCheck.getSelection()); settings.setLyricsEnabled(lyricsCheck.getSelection()); settings.setTextEnabled(textsCheck.getSelection()); settings.check(); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { LilypondSettingsDialog.this.status = STATUS_CANCELLED; dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return ( ( this.status == STATUS_ACCEPTED )? settings : null ); } private GridLayout getColumnLayout(){ GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; return layout; } private GridData getComboData(){ GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true); data.minimumWidth = 120; return data; } private GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true); data.minimumWidth = 60; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } } tuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondOutputStream.java0000644000175000017500000007442611273045347033321 0ustar julianjulianpackage org.herac.tuxguitar.io.lilypond; import java.io.OutputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; public class LilypondOutputStream { private static final String LILYPOND_VERSION = "2.10.5"; private static final String[] LILYPOND_SHARP_NOTES = new String[]{"c","cis","d","dis","e","f","fis","g","gis","a","ais","b"}; private static final String[] LILYPOND_FLAT_NOTES = new String[]{"c","des","d","ees","e","f","ges","g","aes","a","bes","b"}; private static final String[] LILYPOND_KEY_SIGNATURES = new String[]{ "c","g","d","a","e","b","fis","cis","f","bes","ees","aes", "des", "ges","ces" }; private static final String INDENT = new String(" "); private TGSongManager manager; private PrintWriter writer; private LilypondSettings settings; private LilypondTempData temp; public LilypondOutputStream(OutputStream stream,LilypondSettings settings){ this.writer = new PrintWriter(stream); this.temp = new LilypondTempData(); this.settings = settings; } public void writeSong(TGSong song){ this.manager = new TGSongManager(); this.manager.setSong(song); this.addFunctions(); this.addVersion(); this.addPaper(song); this.addLayout(); this.addCommands(); this.addSongDefinitions(song); this.addSong(song); this.writer.flush(); this.writer.close(); } private void addVersion(){ this.writer.println("\\version \"" + LILYPOND_VERSION + "\""); } private void addFunctions(){ // tab-clear-tied-fret-numbers this.writer.println("#(define (tie::tab-clear-tied-fret-numbers grob)"); this.writer.println(indent(1) + "(let* ((tied-fret-nr (ly:spanner-bound grob RIGHT)))"); this.writer.println(indent(2) + "(ly:grob-set-property! tied-fret-nr 'transparent #t)))"); this.writer.println(); } private void addCommands(){ // deadNote this.writer.println("deadNote = #(define-music-function (parser location note) (ly:music?)"); this.writer.println(indent(1) + "(set! (ly:music-property note 'tweaks)"); this.writer.println(indent(2) + "(acons 'stencil ly:note-head::print"); this.writer.println(indent(3) + "(acons 'glyph-name \"2cross\""); this.writer.println(indent(4) + "(acons 'style 'special"); this.writer.println(indent(5) + "(ly:music-property note 'tweaks)))))"); this.writer.println(indent(1) + "note)"); this.writer.println(); // palmMute this.writer.println("palmMute = #(define-music-function (parser location note) (ly:music?)"); this.writer.println(indent(1) + "(set! (ly:music-property note 'tweaks)"); this.writer.println(indent(2) + "(acons 'style 'do (ly:music-property note 'tweaks)))"); this.writer.println(indent(1) + "note)"); this.writer.println(); } private void addPaper(TGSong song){ this.writer.println("\\paper {"); this.writer.println(indent(1) + "indent = #" + (this.addTrackTitleOnGroup(song) ? 30 : 0)); this.writer.println(indent(1) + "printallheaders = #" + getLilypondBoolean(true)); this.writer.println(indent(1) + "print-all-headers = #" + getLilypondBoolean(true)); this.writer.println(indent(1) + "ragged-right = #" + getLilypondBoolean(false)); this.writer.println(indent(1) + "ragged-bottom = #" + getLilypondBoolean(true)); this.writer.println("}"); } private void addHeader(TGSong song, String instrument, int indent){ this.writer.println(indent(indent) + "\\header {"); this.writer.println(indent(indent + 1) + "title = \"" + song.getName() + "\" "); this.writer.println(indent(indent + 1) + "composer = \"" + song.getAuthor() + "\" "); if(this.settings.isTrackNameEnabled() && !this.addTrackTitleOnGroup(song) && instrument != null){ this.writer.println(indent(indent + 1) + "instrument = \"" + instrument + "\" "); } this.writer.println(indent(indent) + "}"); } private void addLayout(){ this.writer.println("\\layout {"); this.writer.println(indent(1) + "\\context { \\Score"); this.writer.println(indent(2) + "\\override MetronomeMark #'padding = #'5"); this.writer.println(indent(1) + "}"); this.writer.println(indent(1) + "\\context { \\Staff"); this.writer.println(indent(2) + "\\override TimeSignature #'style = #'numbered"); this.writer.println(indent(2) + "\\override StringNumber #'transparent = #" + getLilypondBoolean(true)); this.writer.println(indent(1) + "}"); this.writer.println(indent(1) + "\\context { \\TabStaff"); this.writer.println(indent(2) + "\\override TimeSignature #'style = #'numbered"); this.writer.println(indent(2) + "\\override Stem #'transparent = #" + getLilypondBoolean(this.settings.isScoreEnabled())); this.writer.println(indent(2) + "\\override Beam #'transparent = #" + getLilypondBoolean(this.settings.isScoreEnabled())); this.writer.println(indent(2) + "\\override Tie #'after-line-breaking = #tie::tab-clear-tied-fret-numbers"); this.writer.println(indent(1) + "}"); if( this.settings.isScoreEnabled() ){ this.writer.println(indent(1) + "\\context { \\TabVoice"); this.writer.println(indent(2) + "\\override Tie #'stencil = ##f"); this.writer.println(indent(1) + "}"); } this.writer.println(indent(1) + "\\context { \\StaffGroup"); this.writer.println(indent(2) + "\\consists \"Instrument_name_engraver\""); this.writer.println(indent(1) + "}"); this.writer.println("}"); } private void addSongDefinitions(TGSong song){ for(int i = 0; i < song.countTracks(); i ++){ TGTrack track = song.getTrack(i); String id = this.trackID(i,""); this.temp.reset(); this.addMusic(track,id); this.addLyrics(track,id); this.addScoreStaff(track,id); this.addTabStaff(track,id); this.addStaffGroup(track,id); } } private void addSong(TGSong song){ int trackCount = song.countTracks(); if(this.settings.isTrackGroupEnabled() && trackCount > 1){ this.writer.println("\\score {"); if(this.settings.getTrack() == LilypondSettings.ALL_TRACKS){ this.writer.println(indent(1) + "<<"); } } for(int i = 0; i < trackCount; i ++){ TGTrack track = song.getTrack(i); if(this.settings.getTrack() == LilypondSettings.ALL_TRACKS || this.settings.getTrack() == track.getNumber()){ if(!this.settings.isTrackGroupEnabled() || trackCount == 1){ this.writer.println("\\score {"); } this.writer.println(indent(1) + "\\" + this.trackID(i,"StaffGroup")); if(!this.settings.isTrackGroupEnabled() || trackCount == 1){ this.addHeader(song,track.getName(), 1); this.writer.println("}"); } } } if(this.settings.isTrackGroupEnabled() && trackCount > 1){ if(this.settings.getTrack() == LilypondSettings.ALL_TRACKS){ this.writer.println(indent(1) + ">>"); } this.addHeader(song, null, 1); this.writer.println("}"); } } private void addMusic(TGTrack track,String id){ for( int voice = 0 ; voice < TGBeat.MAX_VOICES ; voice ++ ){ this.writer.println(trackVoiceID(voice,id,"Music") + " = #(define-music-function (parser location inTab) (boolean?)"); this.writer.println("#{"); if( this.isVoiceAvailable( track , voice ) ){ TGMeasure previous = null; int count = track.countMeasures(); for(int i = 0; i < count; i ++){ TGMeasure measure = track.getMeasure(i); int measureFrom = this.settings.getMeasureFrom(); int measureTo = this.settings.getMeasureTo(); if((measureFrom <= measure.getNumber() || measureFrom == LilypondSettings.FIRST_MEASURE) && (measureTo >= measure.getNumber() || measureTo == LilypondSettings.LAST_MEASURE )){ this.addMeasure(measure,previous,voice,1,(i == (count - 1))); previous = measure; } } this.writer.println(indent(1) + "\\bar \"|.\""); this.writer.println(indent(1) + "\\pageBreak"); } this.writer.println("#})"); } } private void addScoreStaff(TGTrack track,String id){ boolean addLyrics = (this.settings.isLyricsEnabled() && !this.settings.isTablatureEnabled() && !track.getLyrics().isEmpty()); boolean addChordDiagrams = this.settings.isChordDiagramEnabled(); boolean addTexts = this.settings.isTextEnabled(); this.writer.println(id + "Staff = \\new Staff <<" ); for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){ String vId = trackVoiceID(v, id, "Music") ; this.writer.println(indent(1) + "\\context Voice = \"" + vId + "\" {"); if(!addChordDiagrams){ this.writer.println(indent(2) + "\\removeWithTag #'chords"); } if(!addTexts){ this.writer.println(indent(2) + "\\removeWithTag #'texts"); } this.writer.println(indent(2) + "\\" + vId + " #" + getLilypondBoolean( false ) ); this.writer.println(indent(1) + "}"); } if(addLyrics){ this.writer.println(indent(1) + "\\new Lyrics \\lyricsto \"" + trackVoiceID(0, id, "Music") + "\" \\" + id + "Lyrics"); } this.writer.println(">>"); } private void addTabStaff(TGTrack track,String id){ boolean addLyrics = (this.settings.isLyricsEnabled() && !track.getLyrics().isEmpty()); boolean addChordDiagrams = (this.settings.isChordDiagramEnabled() && !this.settings.isScoreEnabled()); boolean addTexts = (this.settings.isTextEnabled() && !this.settings.isScoreEnabled()); this.writer.println(id + "TabStaff = \\new TabStaff " + getLilypondTuning(track) + " <<" ); for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){ String vId = trackVoiceID(v, id, "Music") ; this.writer.println(indent(1) + "\\context TabVoice = \"" + vId + "\" {"); if(!addChordDiagrams){ this.writer.println(indent(2) + "\\removeWithTag #'chords"); } if(!addTexts){ this.writer.println(indent(2) + "\\removeWithTag #'texts"); } this.writer.println(indent(2) + "\\" + vId + " #" + getLilypondBoolean( true ) ); this.writer.println(indent(1) + "}"); } if(addLyrics){ this.writer.println(indent(1) + "\\new Lyrics \\lyricsto \"" + trackVoiceID(0, id, "Music") + "\" \\" + id + "Lyrics"); } this.writer.println(">>"); } private void addLyrics(TGTrack track,String id){ this.writer.println(id + "Lyrics = \\lyricmode {"); this.writer.println(indent(1) + "\\set ignoreMelismata = #" + getLilypondBoolean(true)); int skippedCount = this.temp.getSkippedLyricBeats().size(); if(skippedCount > 0){ this.writer.print(indent(1)); for(int i = 0 ; i < skippedCount ; i ++){ this.writer.print("\\skip " + ((String)this.temp.getSkippedLyricBeats().get(i)) + " "); } this.writer.println(); } this.writer.println(indent(1) + track.getLyrics().getLyrics()); this.writer.println(indent(1) + "\\unset ignoreMelismata"); this.writer.println("}"); } private void addStaffGroup(TGTrack track,String id){ this.writer.println(id + "StaffGroup = \\new StaffGroup <<"); if(this.addTrackTitleOnGroup(track.getSong())){ this.writer.println(indent(1) + "\\set StaffGroup.instrumentName = #\"" + track.getName() + "\""); } if(this.settings.isScoreEnabled()){ this.writer.println(indent(1) + "\\" + id + "Staff"); } if(this.settings.isTablatureEnabled()){ this.writer.println(indent(1) + "\\" + id + "TabStaff"); } this.writer.println(">>"); } private void addMeasure(TGMeasure measure,TGMeasure previous,int voice,int indent,boolean isLast){ if(previous == null || measure.getTempo().getValue() != previous.getTempo().getValue()){ this.addTempo(measure.getTempo(),indent); } if(previous == null || measure.getClef() != previous.getClef()){ this.addClef(measure.getClef(),indent); } if(previous == null || measure.getKeySignature() != previous.getKeySignature()){ this.addKeySignature(measure.getKeySignature(),indent); } if(previous == null || !measure.getTimeSignature().isEqual(previous.getTimeSignature())){ this.addTimeSignature(measure.getTimeSignature(),indent); } // Set the specific voice this.addMeasureVoice(measure,voice, (previous == null), indent); // Open repeat if(measure.isRepeatOpen()){ this.addRepeatOpen(measure.getHeader(),indent); } // If is first measure, and it don't have a repeat-open, // We check on next measures if should open it. else if(measure.getNumber() == 1){ this.checkRepeatCount( measure.getHeader() ); if(this.temp.getRepeatCount() > 0 ){ this.addRepeatOpen(measure.getHeader(),indent); } } // Open a repeat alternative only if this measure isn't who openned the repeat. if(!measure.isRepeatOpen() && measure.getHeader().getRepeatAlternative() > 0){ this.addRepeatAlternativeOpen(indent); } this.addMeasureComponents(measure,voice,(this.temp.isRepeatOpen() || this.temp.isRepeatAlternativeOpen() ? (indent + 1): indent)); // If is last alternative, we can close it now if(this.temp.isRepeatAlternativeOpen() && this.temp.getRepeatAlternativeNumber() >= this.temp.getRepeatCount()){ this.addRepeatClose(indent); this.addRepeatAlternativeClose(indent); } // Close repeat if(measure.getRepeatClose() > 0){ this.addRepeatClose(indent); } // If is last, we close any openned repeat if(isLast){ this.addRepeatClose(indent); this.addRepeatAlternativeClose(indent); } } private void addRepeatOpen(TGMeasureHeader measure,int indent){ // Close any existent first this.addRepeatClose(indent); this.addRepeatAlternativeClose(indent); this.checkRepeatCount(measure); this.writer.println(indent(indent) + "\\repeat volta " + this.temp.getRepeatCount() + " {"); this.temp.setRepeatOpen(true); } private void addRepeatClose(int indent){ if(this.temp.isRepeatOpen()){ this.writer.println(indent(indent) + "}"); } this.temp.setRepeatOpen(false); if(!this.temp.isRepeatAlternativeOpen()){ this.temp.setRepeatCount( 0 ); } } private void addRepeatAlternativeOpen( int indent){ if(this.temp.isRepeatOpen() && !this.temp.isRepeatAlternativeOpen()){ this.temp.setRepeatAlternativeOpen( true ); this.addRepeatClose(indent); this.writer.println(indent(indent) + "\\alternative {"); } if(this.temp.isRepeatAlternativeOpen()){ if(this.temp.getRepeatAlternativeNumber() > 0){ this.writer.println(indent(indent) + "}"); } this.writer.println(indent(indent) + "{"); this.temp.setRepeatAlternativeNumber( this.temp.getRepeatAlternativeNumber() + 1 ); } } private void addRepeatAlternativeClose(int indent){ if(this.temp.isRepeatAlternativeOpen()){ if(this.temp.getRepeatAlternativeNumber() > 0){ this.writer.println(indent(indent) + "}"); } this.writer.println(indent(indent) + "}"); } this.temp.setRepeatAlternativeOpen(false); this.temp.setRepeatAlternativeNumber( 0 ); if(!this.temp.isRepeatOpen()){ this.temp.setRepeatCount( 0 ); } } private void addTempo(TGTempo tempo,int indent){ this.writer.println(indent(indent) + "\\tempo 4=" + tempo.getValue()); } private void addTimeSignature(TGTimeSignature ts,int indent){ this.writer.println(indent(indent) + "\\time " + ts.getNumerator() + "/" + ts.getDenominator().getValue()); } private void addKeySignature(int keySignature,int indent){ if(keySignature >= 0 && keySignature < LILYPOND_KEY_SIGNATURES.length){ this.writer.println(indent(indent) + "\\key " + LILYPOND_KEY_SIGNATURES[keySignature] + " \\major"); } } private void addClef(int clef,int indent){ String clefName = ""; if(clef == TGMeasure.CLEF_TREBLE){ clefName = "treble"; } else if(clef == TGMeasure.CLEF_BASS){ clefName = "bass"; } else if(clef == TGMeasure.CLEF_ALTO){ clefName = "alto"; } else if(clef == TGMeasure.CLEF_TENOR){ clefName = "tenor"; } if(clefName!=""){ this.writer.println(indent(indent) + "\\clef #(if $inTab \"tab\" \"" + clefName + "_8\")"); } } private void addMeasureVoice(TGMeasure measure, int voice , boolean force ,int indent){ boolean multipleVoices = hasMultipleVoices(measure); if ( force || multipleVoices != this.temp.isMultipleVoices() ){ this.writer.println( indent(indent) + getLilypondVoice( multipleVoices ? voice : -1 ) ); } this.temp.setMultipleVoices( multipleVoices ); } private void addMeasureComponents(TGMeasure measure,int voice,int indent){ this.writer.print(indent(indent)); this.addComponents(measure,voice); this.writer.println(); } private void addComponents(TGMeasure measure,int vIndex){ int key = measure.getKeySignature(); TGBeat previous = null; for(int i = 0 ; i < measure.countBeats() ; i ++){ TGBeat beat = measure.getBeat( i ); TGVoice voice = beat.getVoice( vIndex ); if( !voice.isEmpty() ){ TGDivisionType divisionType = voice.getDuration().getDivision(); if(previous != null && this.temp.isDivisionTypeOpen() && !divisionType.isEqual( previous.getVoice(0).getDuration().getDivision() )){ this.writer.print("} "); this.temp.setDivisionTypeOpen(false); } if(!this.temp.isDivisionTypeOpen() && !divisionType.isEqual(TGDivisionType.NORMAL)){ this.writer.print("\\times " + divisionType.getTimes() + "/" + divisionType.getEnters() + " {"); this.temp.setDivisionTypeOpen(true); } this.addBeat(key, beat, voice); previous = beat; } } // It Means that all voice beats are empty if( previous == null ){ this.writer.print("\\skip "); this.addDuration( measure.getTimeSignature().getDenominator() ); this.writer.print("*" + measure.getTimeSignature().getNumerator() + " "); } if(this.temp.isDivisionTypeOpen()){ this.writer.print("} "); this.temp.setDivisionTypeOpen(false); } } private void addBeat(int key,TGBeat beat, TGVoice voice){ if(voice.isRestVoice()){ boolean skip = false; for( int v = 0 ; v < beat.countVoices() ; v ++ ){ if( !skip && v != voice.getIndex() ){ TGVoice current = beat.getVoice( v ); if(!current.isEmpty() && current.getDuration().isEqual( voice.getDuration() )){ skip = (!current.isRestVoice() || current.getIndex() < voice.getIndex()); } } } this.writer.print( ( skip ? "\\skip " : "r" ) ); this.addDuration( voice.getDuration() ); } else{ this.addEffectsBeforeBeat(voice); this.writer.print("<"); int size = voice.countNotes(); for(int i = 0 ; i < size ; i ++){ TGNote note = voice.getNote(i); this.addEffectsBeforeNote(note); this.addKey(key, (beat.getMeasure().getTrack().getString(note.getString()).getValue() + note.getValue()) ); if(this.isAnyTiedTo(note)){ this.writer.print("~"); } this.addString(note.getString()); this.addEffectsOnNote(note.getEffect()); if(size > 1){ this.writer.print(" "); } } this.writer.print(">"); this.addDuration( voice.getDuration() ); this.addEffectsOnDuration( voice ); this.addEffectsOnBeat( voice ); } // Add Chord, if was not previously added in another voice if( beat.isChordBeat() && !voice.isRestVoice() ){ boolean skip = false; for( int v = 0 ; v < voice.getIndex() ; v ++ ){ TGVoice current = beat.getVoice( v ); skip = (skip || ( !current.isEmpty() && !current.isRestVoice() ) ); } if( !skip ){ this.writer.print("-\\tag #'chords ^\\markup \\fret-diagram #\""); TGChord chord = beat.getChord(); for( int i = 0; i < chord.countStrings(); i ++){ this.writer.print((i + 1) + "-" + getLilypondChordFret(chord.getFretValue( i )) + ";"); } this.writer.print("\""); } } // Add Text, if was not previously added in another voice if( beat.isTextBeat() ){ boolean skip = false; for( int v = 0 ; v < voice.getIndex() ; v ++ ){ skip = (skip || !beat.getVoice( v ).isEmpty() ); } if( !skip ){ this.writer.print("-\\tag #'texts ^\\markup {\"" + beat.getText().getValue() + "\"}"); } } // Check if it's a lyric beat to skip // For now we only support lyrics for first voice. if( voice.getIndex() == 0 && !voice.isRestVoice() ){ if( beat.getMeasure().getTrack().getLyrics().getFrom() > beat.getMeasure().getNumber()){ this.temp.addSkippedLyricBeat( getLilypondDuration(voice.getDuration())); } } this.writer.print(" "); } private void addKey(int keySignature,int value){ this.writer.print( getLilypondKey(keySignature, value) ); } private void addString(int string){ this.writer.print("\\" + string); } private void addDuration(TGDuration duration){ this.writer.print(getLilypondDuration(duration)); } private void addEffectsBeforeNote(TGNote note){ TGNoteEffect effect = note.getEffect(); if( effect.isDeadNote() ){ this.writer.print("\\deadNote "); } if( effect.isPalmMute() ){ this.writer.print("\\palmMute "); } if( effect.isGhostNote() ){ this.writer.print("\\parenthesize "); } if( effect.isBend() ){ this.writer.print("\\bendAfter #+6 "); } } private void addEffectsOnNote(TGNoteEffect effect){ if( effect.isHarmonic() ){ this.writer.print("\\harmonic"); } } private void addEffectsOnDuration(TGVoice voice){ int tremoloPicking = -1; for( int i = 0 ; i < voice.countNotes() ; i ++ ){ TGNote note = voice.getNote(i); if( tremoloPicking == -1 && note.getEffect().isTremoloPicking() ){ tremoloPicking = note.getEffect().getTremoloPicking().getDuration().getValue(); } } if( tremoloPicking != -1 ){ this.writer.print(":" + tremoloPicking ); } } private void addEffectsOnBeat(TGVoice voice){ boolean trill = false; boolean vibrato = false; boolean staccato = false; boolean accentuatedNote = false; boolean heavyAccentuatedNote = false; boolean arpeggio = ( voice.getBeat().getStroke().getDirection() != TGStroke.STROKE_NONE ); for( int i = 0 ; i < voice.countNotes() ; i ++ ){ TGNoteEffect effect = voice.getNote(i).getEffect(); trill = (trill || effect.isTrill() ); vibrato = (vibrato || effect.isVibrato() ); staccato = (staccato || effect.isStaccato() ); accentuatedNote = (accentuatedNote || effect.isAccentuatedNote() ); heavyAccentuatedNote = (heavyAccentuatedNote || effect.isHeavyAccentuatedNote() ); } if( trill ){ this.writer.print("\\trill"); } if( vibrato ){ this.writer.print("\\prall"); } if( staccato ){ this.writer.print("\\staccato"); } if( accentuatedNote ){ this.writer.print("->"); } if( heavyAccentuatedNote ){ this.writer.print("-^"); } if( arpeggio ){ this.writer.print("\\arpeggio"); } } private void addEffectsBeforeBeat(TGVoice voice){ List graceNotes = new ArrayList(); for( int i = 0 ; i < voice.countNotes() ; i ++ ){ TGNote note = voice.getNote(i); if( note.getEffect().isGrace() ){ graceNotes.add( note ); } } if( !graceNotes.isEmpty() ){ this.writer.print("\\grace "); this.writer.print("<"); int duration = 0; for( int i = 0 ; i < graceNotes.size() ; i ++ ){ TGNote note = (TGNote)graceNotes.get( i ); TGMeasure measure = voice.getBeat().getMeasure(); TGString string = measure.getTrack().getString(note.getString()); TGEffectGrace grace = note.getEffect().getGrace(); if( duration < TGDuration.SIXTY_FOURTH && grace.getDuration() == 1 ){ duration = TGDuration.SIXTY_FOURTH; }else if( duration < TGDuration.THIRTY_SECOND && grace.getDuration() == 2 ){ duration = TGDuration.THIRTY_SECOND; }else if( duration < TGDuration.SIXTEENTH && grace.getDuration() == 3 ){ duration = TGDuration.SIXTEENTH; } if( i > 0 ){ this.writer.print(" "); } this.addKey(measure.getKeySignature(), (string.getValue() + grace.getFret()) ); this.addString(note.getString()); } this.writer.print(">"); this.writer.print(duration); this.writer.print(" "); } } private void checkRepeatCount(TGMeasureHeader header){ boolean alternativePresent = false; TGMeasureHeader next = header; while( next != null ){ if( next.isRepeatOpen() && next.getNumber() != header.getNumber()){ break; } if(next.getNumber() > header.getNumber() && next.getRepeatAlternative() > 0){ alternativePresent = true; this.temp.setRepeatCount( (this.temp.getRepeatCount() + 1 ) ); }else if(!alternativePresent && next.getRepeatClose() > 0){ this.temp.setRepeatCount( (next.getRepeatClose() + 1 )); break; } next = this.manager.getNextMeasureHeader(next); } } private boolean hasMultipleVoices( TGMeasure measure ){ int voiceCount = 0; for( int voice = 0 ; voice < TGBeat.MAX_VOICES ; voice ++ ){ if( isVoiceAvailable(measure, voice) ){ voiceCount ++; } } return (voiceCount > 1); } private boolean isVoiceAvailable( TGMeasure measure , int voice ){ for( int i = 0 ; i < measure.countBeats() ; i ++ ){ TGBeat beat = measure.getBeat( i ); if( !beat.getVoice( voice ).isEmpty() ){ return true; } } return false; } private boolean isVoiceAvailable( TGTrack track , int voice ){ for( int i = 0 ; i < track.countMeasures() ; i ++ ){ TGMeasure measure = track.getMeasure( i ); if( isVoiceAvailable(measure, voice) ){ return true; } } return false; } private boolean addTrackTitleOnGroup(TGSong song){ if(this.settings.isTrackNameEnabled() && this.settings.isTrackGroupEnabled()){ if(this.settings.getTrack() == LilypondSettings.ALL_TRACKS && song.countTracks() > 1){ return true; } } return false; } private boolean isAnyTiedTo(TGNote note){ TGMeasure measure = note.getVoice().getBeat().getMeasure(); TGBeat beat = this.manager.getMeasureManager().getNextBeat( measure.getBeats(), note.getVoice().getBeat()); while( measure != null){ while( beat != null ){ TGVoice voice = beat.getVoice(0); // If is a rest beat, all voice sounds must be stopped. if(voice.isRestVoice()){ return false; } // Check if is there any note at same string. Iterator it = voice.getNotes().iterator(); while( it.hasNext() ){ TGNote current = (TGNote) it.next(); if(current.getString() == note.getString()){ return current.isTiedNote(); } } beat = this.manager.getMeasureManager().getNextBeat( measure.getBeats(), beat); } measure = this.manager.getTrackManager().getNextMeasure(measure); if( measure != null ){ beat = this.manager.getMeasureManager().getFirstBeat( measure.getBeats() ); } } return false; } private String indent(int level){ String indent = new String(); for(int i = 0; i < level; i ++){ indent += INDENT; } return indent; } private String getLilypondBoolean(boolean value){ return (value ? "#t" : "#f"); } private String getLilypondKey(int keySignature , int value){ String[] LILYPOND_NOTES = (keySignature <= 7 ? LILYPOND_SHARP_NOTES : LILYPOND_FLAT_NOTES ); String key = (LILYPOND_NOTES[ value % 12 ]); for(int i = 4; i < (value / 12); i ++){ key += ("'"); } for(int i = (value / 12); i < 4; i ++){ key += (","); } return key; } private String getLilypondDuration(TGDuration value){ String duration = Integer.toString(value.getValue()); if(value.isDotted()){ duration += ("."); } else if(value.isDoubleDotted()){ duration += (".."); } return duration; } private String getLilypondChordFret(int value){ if(value < 0){ return ("x"); } if(value == 0){ return ("o"); } return Integer.toString(value); } private String getLilypondTuning(TGTrack track){ String tuning = ("\\with { stringTunings = #'( "); Iterator strings = track.getStrings().iterator(); while(strings.hasNext()){ TGString string = (TGString)strings.next(); //Lilypond relates string tuning to MIDI middle C (note 60) tuning += ( (string.getValue() - 60) + " "); } tuning += (") }"); return tuning; } private String getLilypondVoice(int voice){ if( voice == -1 ){ return "\\oneVoice"; } return ( voice == 0 ? "\\voiceOne" : "\\voiceTwo" ); } private String toBase26(int value){ String result = new String(); int base = value; while(base > 25){ result = ( (char)( (base % 26) + 'A') + result); base = base / 26 - 1; } return ((char)(base + 'A') + result); } private String trackID(int index, String suffix){ return ("Track" + this.toBase26(index) + suffix); } private String trackVoiceID(int index, String prefix, String suffix){ return (prefix + "Voice" + this.toBase26(index) + suffix); } protected class LilypondTempData{ private int repeatCount; private int repeatAlternativeNumber; private boolean repeatOpen; private boolean repeatAlternativeOpen; private boolean divisionTypeOpen; private boolean multipleVoices; private List skippedLyricBeats; protected LilypondTempData(){ this.skippedLyricBeats = new ArrayList(); this.reset(); } public void reset(){ this.multipleVoices = false; this.repeatCount = 0; this.repeatOpen = false; this.divisionTypeOpen = false; this.skippedLyricBeats.clear(); } public int getRepeatCount() { return this.repeatCount; } public void setRepeatCount(int repeatCount) { this.repeatCount = repeatCount; } public boolean isRepeatOpen() { return this.repeatOpen; } public void setRepeatOpen(boolean repeatOpen) { this.repeatOpen = repeatOpen; } public int getRepeatAlternativeNumber() { return this.repeatAlternativeNumber; } public void setRepeatAlternativeNumber(int repeatAlternativeNumber) { this.repeatAlternativeNumber = repeatAlternativeNumber; } public boolean isRepeatAlternativeOpen() { return this.repeatAlternativeOpen; } public void setRepeatAlternativeOpen(boolean repeatAlternativeOpen) { this.repeatAlternativeOpen = repeatAlternativeOpen; } public boolean isDivisionTypeOpen() { return this.divisionTypeOpen; } public void setDivisionTypeOpen(boolean divisionTypeOpen) { this.divisionTypeOpen = divisionTypeOpen; } public void setMultipleVoices( boolean multipleVoices ){ this.multipleVoices = multipleVoices; } public boolean isMultipleVoices() { return this.multipleVoices; } public void addSkippedLyricBeat( String duration ){ this.skippedLyricBeats.add( duration ); } public List getSkippedLyricBeats(){ return this.skippedLyricBeats; } } } tuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettings.java0000644000175000017500000000547611273045347032444 0ustar julianjulianpackage org.herac.tuxguitar.io.lilypond; public class LilypondSettings { public static final int ALL_TRACKS = -1; public static final int FIRST_MEASURE = -1; public static final int LAST_MEASURE = -1; private int track; private int measureFrom; private int measureTo; private boolean trackGroupEnabled; private boolean trackNameEnabled; private boolean scoreEnabled; private boolean tablatureEnabled; private boolean lyricsEnabled; private boolean chordDiagramEnabled; private boolean textEnabled; public LilypondSettings(){ super(); } public int getMeasureFrom() { return this.measureFrom; } public void setMeasureFrom(int measureFrom) { this.measureFrom = measureFrom; } public int getMeasureTo() { return this.measureTo; } public void setMeasureTo(int measureTo) { this.measureTo = measureTo; } public int getTrack() { return this.track; } public void setTrack(int track) { this.track = track; } public boolean isTrackGroupEnabled() { return this.trackGroupEnabled; } public void setTrackGroupEnabled(boolean trackGroupEnabled) { this.trackGroupEnabled = trackGroupEnabled; } public boolean isTrackNameEnabled() { return this.trackNameEnabled; } public void setTrackNameEnabled(boolean trackNameEnabled) { this.trackNameEnabled = trackNameEnabled; } public boolean isScoreEnabled() { return this.scoreEnabled; } public void setScoreEnabled(boolean scoreEnabled) { this.scoreEnabled = scoreEnabled; } public boolean isTablatureEnabled() { return this.tablatureEnabled; } public void setTablatureEnabled(boolean tablatureEnabled) { this.tablatureEnabled = tablatureEnabled; } public boolean isLyricsEnabled() { return this.lyricsEnabled; } public void setLyricsEnabled(boolean lyricsEnabled) { this.lyricsEnabled = lyricsEnabled; } public boolean isChordDiagramEnabled() { return this.chordDiagramEnabled; } public void setChordDiagramEnabled(boolean chordDiagramEnabled) { this.chordDiagramEnabled = chordDiagramEnabled; } public boolean isTextEnabled() { return this.textEnabled; } public void setTextEnabled(boolean textEnabled) { this.textEnabled = textEnabled; } public void check(){ if(!this.isScoreEnabled() && !this.isTablatureEnabled()){ this.setScoreEnabled( true ); this.setTablatureEnabled( true ); } } public static LilypondSettings getDefaults(){ LilypondSettings settings = new LilypondSettings(); settings.setTrack(ALL_TRACKS); settings.setMeasureFrom(FIRST_MEASURE); settings.setMeasureTo(LAST_MEASURE); settings.setScoreEnabled(true); settings.setTablatureEnabled(true); settings.setTextEnabled(true); settings.setLyricsEnabled(true); settings.setChordDiagramEnabled(true); settings.setTrackNameEnabled(true); settings.setTrackGroupEnabled(false); return settings; } }././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondPluginExporter.javatuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondPluginExporter.java0000644000175000017500000000112211273045347033613 0ustar julianjulianpackage org.herac.tuxguitar.io.lilypond; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class LilypondPluginExporter extends TGExporterPlugin{ protected TGRawExporter getExporter() { return new LilypondSongExporter(); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "Lilypond 2.10.5 exporter plugin"; } public String getName() { return "Lilypond exporter"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSongExporter.java0000644000175000017500000000176311273045347033276 0ustar julianjulianpackage org.herac.tuxguitar.io.lilypond; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; public class LilypondSongExporter implements TGLocalFileExporter{ private OutputStream stream; private LilypondSettings settings; public String getExportName() { return "Lilypond"; } public TGFileFormat getFileFormat() { return new TGFileFormat("Lilypond","*.ly"); } public boolean configure(boolean setDefaults) { this.settings = (setDefaults ? LilypondSettings.getDefaults() : new LilypondSettingsDialog().open()); return (this.settings != null); } public void init(TGFactory factory,OutputStream stream){ this.stream = stream; } public void exportSong(TGSong song) { if(this.stream != null && this.settings != null){ new LilypondOutputStream(this.stream,this.settings).writeSong(song); } } }././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocPlugin.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocPlugin.0000644000175000017500000000141711273045343033345 0ustar julianjulianpackage org.herac.tuxguitar.carbon.opendoc; import org.herac.tuxguitar.carbon.opendoc.OpenDocListener; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class OpenDocPlugin extends TGPluginAdapter { private OpenDocListener openDocListener; public void init() throws TGPluginException { // Nothing todo } public void close() throws TGPluginException { // Nothing todo } public void setEnabled(boolean enabled) throws TGPluginException { if( this.openDocListener != null ){ this.openDocListener.setEnabled(enabled); }else if(enabled){ this.openDocListener = new OpenDocListener(); this.openDocListener.setEnabled(true); this.openDocListener.init(); } } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocJNI.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocJNI.jav0000644000175000017500000000070311273045343033225 0ustar julianjulianpackage org.herac.tuxguitar.carbon.opendoc; import org.eclipse.swt.internal.carbon.AEDesc; /** * @author TuxPaper * @created Jul 21, 2006 * */ public class OpenDocJNI { private static final String JNI_LIBRARY_NAME = new String("tuxguitar-carbon-integration"); static { System.loadLibrary (JNI_LIBRARY_NAME); } public static final native int AEGetParamDesc(int theAppleEvent, int theAEKeyword, int desiredType, AEDesc result); }././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocAction.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocAction.0000644000175000017500000000370611273045343033327 0ustar julianjulianpackage org.herac.tuxguitar.carbon.opendoc; import org.eclipse.swt.SWT; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.file.FileActionUtils; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.util.ConfirmDialog; public class OpenDocAction { public static void saveAndOpen(final String file){ ActionLock.lock(); TuxGuitar.instance().getPlayer().reset(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ ActionLock.unlock(); return; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); openFile( file ); } } }).start(); } } }).start(); return; } } openFile(file ); } protected static void openFile(final String url){ if(url == null){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.open(url); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocCallback.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocCallbac0000644000175000017500000000035311273045343033350 0ustar julianjulianpackage org.herac.tuxguitar.carbon.opendoc; public interface OpenDocCallback { public int appleEventProc(int nextHandler, int theEvent, int userData); public int openDocProc(int theAppleEvent, int reply, int handlerRefcon); } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocListener.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocListene0000644000175000017500000001123611273045343033434 0ustar julianjulianpackage org.herac.tuxguitar.carbon.opendoc; import org.eclipse.swt.internal.C; import org.eclipse.swt.internal.Callback; import org.eclipse.swt.internal.carbon.AEDesc; import org.eclipse.swt.internal.carbon.CFRange; import org.eclipse.swt.internal.carbon.EventRecord; import org.eclipse.swt.internal.carbon.OS; /** *

* This registers a handler for opendoc events in OSX 0) { String[] fileNames = new String[count[0]]; int maximumSize = 80; // size of FSRef int dataPtr = OS.NewPtr(maximumSize); int[] aeKeyword = new int[1]; int[] typeCode = new int[1]; int[] actualSize = new int[1]; for (int i = 0; i < count[0]; i++) { if (OS.AEGetNthPtr(aeDesc, i + 1, OS.typeFSRef, aeKeyword,typeCode, dataPtr, maximumSize, actualSize) == OS.noErr) { byte[] fsRef = new byte[actualSize[0]]; C.memmove(fsRef, dataPtr, actualSize[0]); int dirUrl = OS.CFURLCreateFromFSRef(OS.kCFAllocatorDefault, fsRef); int dirString = OS.CFURLCopyFileSystemPath(dirUrl,OS.kCFURLPOSIXPathStyle); OS.CFRelease(dirUrl); int length = OS.CFStringGetLength(dirString); char[] buffer = new char[length]; CFRange range = new CFRange(); range.length = length; OS.CFStringGetCharacters(dirString, range, buffer); OS.CFRelease(dirString); fileNames[i] = new String(buffer); } if (OS.AEGetNthPtr(aeDesc, i + 1, typeText, aeKeyword,typeCode, dataPtr, maximumSize, actualSize) == OS.noErr) { byte[] urlRef = new byte[actualSize[0]]; C.memmove(urlRef, dataPtr, actualSize[0]); fileNames[i] = new String(urlRef); } } if( fileNames.length > 0 ){ OpenDocAction.saveAndOpen( fileNames[0] ); } } return OS.noErr; } }././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuPlugin.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuPlugin.jav0000644000175000017500000000141411273045343033356 0ustar julianjulianpackage org.herac.tuxguitar.carbon.menu; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class MacMenuPlugin extends TGPluginAdapter { private MacMenu macMenu; public void init() throws TGPluginException { // Nothing todo } public void close() throws TGPluginException { // Nothing todo } public void setEnabled(boolean enabled) throws TGPluginException { if( this.macMenu != null ){ this.macMenu.setEnabled(enabled); }else if(enabled){ this.macMenu = new MacMenu(); this.macMenu.setEnabled(true); this.macMenu.hookApplicationMenu(TuxGuitar.instance().getDisplay(), TuxGuitar.instance().getShell()); } } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuCallback.javatuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuCallback.j0000644000175000017500000000023211273045343033262 0ustar julianjulianpackage org.herac.tuxguitar.carbon.menu; public interface MacMenuCallback { public int commandProc(int nextHandler, int theEvent, int userData); } tuxguitar-src-1.2/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenu.java0000644000175000017500000000735611273045343032353 0ustar julianjulianpackage org.herac.tuxguitar.carbon.menu; import org.eclipse.swt.internal.Callback; import org.eclipse.swt.internal.carbon.HICommand; import org.eclipse.swt.internal.carbon.OS; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.file.ExitAction; import org.herac.tuxguitar.gui.actions.help.ShowAboutAction; import org.herac.tuxguitar.gui.actions.settings.EditConfigAction; public class MacMenu { private static final int kHICommandPreferences = ('p' << 24) + ('r' << 16) + ('e' << 8) + 'f'; private static final int kHICommandAbout = ('a' << 24) + ('b' << 16) + ('o' << 8) + 'u'; private static final int kHICommandServices = ('s' << 24) + ('e' << 16) + ('r' << 8) + 'v'; private static final int kHIQuitServices = ('q' << 24) + ('u' << 16) + ('i' << 8) + 't'; private static final String ABOUT_NAME = "About TuxGuitar"; private boolean enabled; public MacMenu(){ super(); } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public void hookApplicationMenu(Display display,final Shell shell){ final Callback commandCallback= new Callback(this,"commandProc", 3); int commandProc= commandCallback.getAddress(); if (commandProc == 0) { commandCallback.dispose(); return; // give up } // Install event handler for commands int[] mask= new int[] { OS.kEventClassCommand, OS.kEventProcessCommand}; OS.InstallEventHandler(OS.GetApplicationEventTarget(), commandProc,mask.length / 2, mask, 0, null); // create About ... menu command int[] outMenu= new int[1]; short[] outIndex= new short[1]; if (OS.GetIndMenuItemWithCommandID(0, kHICommandPreferences, 1, outMenu, outIndex) == OS.noErr && outMenu[0] != 0) { int menu= outMenu[0]; char buffer[] = ABOUT_NAME.toCharArray(); int length = ABOUT_NAME.length(); int str= OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, buffer, length); OS.InsertMenuItemTextWithCFString(menu, str, (short) 0, 0, kHICommandAbout); OS.CFRelease(str); // add separator between About & Preferences OS.InsertMenuItemTextWithCFString(menu, 0, (short) 1, OS.kMenuItemAttrSeparator, 0); // enable pref menu OS.EnableMenuCommand(menu, kHICommandPreferences); // disable services menu OS.DisableMenuCommand(menu, kHICommandServices); } // schedule disposal of callback object display.disposeExec(new Runnable() { public void run() { commandCallback.dispose(); } }); } public int commandProc(int nextHandler, int theEvent, int userData) { if (OS.GetEventKind(theEvent) == OS.kEventProcessCommand) { HICommand command= new HICommand(); OS.GetEventParameter(theEvent,OS.kEventParamDirectObject, OS.typeHICommand, null,HICommand.sizeof, null, command); return handleCommand(command.commandID, theEvent); } return OS.eventNotHandledErr; } public int handleCommand(int command, int theEvent){ if( this.isEnabled() ){ switch (command) { case kHICommandPreferences: return handlePreferencesCommand(); case kHICommandAbout: return handleAboutCommand(); case kHIQuitServices: return handleQuitCommand(); default: System.out.println(OS.GetEventKind(theEvent)); break; } return OS.eventNotHandledErr; } return OS.noErr; } public int handleQuitCommand(){ TuxGuitar.instance().getAction(ExitAction.NAME).process(null); return OS.noErr; } public int handleAboutCommand(){ TuxGuitar.instance().getAction(ShowAboutAction.NAME).process(null); return OS.noErr; } public int handlePreferencesCommand(){ TuxGuitar.instance().getAction(EditConfigAction.NAME).process(null); return OS.noErr; } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginList.java0000644000175000017500000000126111273045347030172 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; public class MidiPluginList extends TGPluginList{ protected List getPlugins() { List plugins = new ArrayList(); plugins.add(new MidiPluginImporter()); plugins.add(new MidiPluginExporter()); return plugins; } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "Midi file format import-export plugin"; } public String getName() { return "Midi file format import-export plugin"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSettings.java0000644000175000017500000000054711273045347027706 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; public class MidiSettings { private int transpose; public MidiSettings(){ this.transpose = 0; } public int getTranspose() { return this.transpose; } public void setTranspose(int transpose) { this.transpose = transpose; } public static MidiSettings getDefaults(){ return new MidiSettings(); } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongExporter.java0000644000175000017500000000254711273045347030547 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.player.base.MidiSequenceParser; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGSong; public class MidiSongExporter implements TGLocalFileExporter{ private OutputStream stream; private MidiSettings settings; public String getExportName() { return "Midi"; } public TGFileFormat getFileFormat() { return new TGFileFormat("Midi","*.mid;*.midi"); } public boolean configure(boolean setDefaults) { this.settings = (setDefaults ? MidiSettings.getDefaults(): new MidiSettingsDialog().open() ); return (this.settings != null); } public void init(TGFactory factory,OutputStream stream){ this.stream = stream; } public void exportSong(TGSong song) { if( this.stream != null && this.settings != null ){ TGSongManager manager = new TGSongManager(); manager.setSong(song); MidiSequenceParser parser = new MidiSequenceParser(manager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS,100,this.settings.getTranspose()); MidiSequenceHandlerImpl sequence = new MidiSequenceHandlerImpl( (song.countTracks() + 1) , this.stream); parser.parse(sequence); } } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSequenceHandlerImpl.java0000644000175000017500000000465311273045347032000 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import java.io.IOException; import java.io.OutputStream; import org.herac.tuxguitar.io.midi.base.MidiEvent; import org.herac.tuxguitar.io.midi.base.MidiSequence; import org.herac.tuxguitar.io.midi.base.MidiTrack; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiSequenceHandlerImpl extends MidiSequenceHandler{ private OutputStream stream; private MidiSequence sequence; public MidiSequenceHandlerImpl(int tracks,OutputStream stream){ super(tracks); this.stream = stream; this.init(); } private void init(){ this.sequence = new MidiSequence(MidiSequence.PPQ,(int)TGDuration.QUARTER_TIME); for (int i = 0; i < getTracks(); i++) { this.sequence.addTrack(new MidiTrack()); } } public MidiSequence getSequence(){ return this.sequence; } public void addEvent(int track, MidiEvent event) { if(track >= 0 && track < getSequence().countTracks()){ getSequence().getTrack(track).add(event); } } public void addControlChange(long tick,int track,int channel, int controller, int value) { addEvent(track,new MidiEvent(MidiMessageUtils.controlChange(channel, controller, value), tick )); } public void addNoteOff(long tick,int track,int channel, int note, int velocity) { addEvent(track,new MidiEvent(MidiMessageUtils.noteOff(channel, note, velocity), tick )); } public void addNoteOn(long tick,int track,int channel, int note, int velocity) { addEvent(track,new MidiEvent(MidiMessageUtils.noteOn(channel, note, velocity), tick )); } public void addPitchBend(long tick,int track,int channel, int value) { addEvent(track,new MidiEvent(MidiMessageUtils.pitchBend(channel, value), tick )); } public void addProgramChange(long tick,int track,int channel, int instrument) { addEvent(track,new MidiEvent(MidiMessageUtils.programChange(channel, instrument), tick )); } public void addTempoInUSQ(long tick,int track,int usq) { addEvent(track,new MidiEvent(MidiMessageUtils.tempoInUSQ(usq), tick )); } public void addTimeSignature(long tick,int track,TGTimeSignature ts) { addEvent(track,new MidiEvent(MidiMessageUtils.timeSignature(ts), tick )); } public void notifyFinish() { try { getSequence().finish(); new MidiFileWriter().write(getSequence(),1,this.stream); } catch (IOException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSettingsDialog.java0000644000175000017500000000675411273045347031034 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; public class MidiSettingsDialog { public static final int MAX_TRANSPOSE = 24; public static final int MIN_TRANSPOSE = -24; private static final int STATUS_NONE = 0; private static final int STATUS_CANCELLED = 1; private static final int STATUS_ACCEPTED = 2; protected int status; protected MidiSettings settings; public MidiSettingsDialog(){ this.settings = new MidiSettings(); } public MidiSettings open() { this.status = STATUS_NONE; final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText("Options"); //------------------TRACK SELECTION------------------ Group trackGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN); trackGroup.setLayout(new GridLayout(2,false)); trackGroup.setLayoutData(getGroupData()); trackGroup.setText("Transpose notes"); //------------------TRANSPOSE---------------------- Label transposeLabel = new Label(trackGroup, SWT.NONE); transposeLabel.setText("Transpose:"); transposeLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); final Combo transposeCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY); transposeCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); for(int i = MIN_TRANSPOSE;i <= MAX_TRANSPOSE;i ++){ transposeCombo.add(Integer.toString(i)); } transposeCombo.select(-MIN_TRANSPOSE); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { MidiSettingsDialog.this.status = STATUS_ACCEPTED; MidiSettingsDialog.this.settings.setTranspose( (MIN_TRANSPOSE + transposeCombo.getSelectionIndex()) ); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { MidiSettingsDialog.this.status = STATUS_CANCELLED; dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return ((this.status == STATUS_ACCEPTED)?MidiSettingsDialog.this.settings:null); } private GridData getGroupData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 300; return data; } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiFileException.java0000644000175000017500000000032111273045347030632 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; public class MidiFileException extends Exception{ private static final long serialVersionUID = 1L; public MidiFileException(String message) { super(message); } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiFileReader.java0000644000175000017500000001504111273045347030103 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.midi.base.MidiEvent; import org.herac.tuxguitar.io.midi.base.MidiMessage; import org.herac.tuxguitar.io.midi.base.MidiSequence; import org.herac.tuxguitar.io.midi.base.MidiTrack; public class MidiFileReader implements MidiFileHeader{ public static boolean CANCEL_RUNNING_STATUS_ON_META_AND_SYSEX = true; private static final int STATUS_NONE = 0; private static final int STATUS_ONE_BYTE = 1; private static final int STATUS_TWO_BYTES = 2; private static final int STATUS_SYSEX = 3; private static final int STATUS_META = 4; public MidiSequence getSequence(InputStream stream)throws MidiFileException, IOException{ DataInputStream in = new DataInputStream(stream); if (in.readInt() != HEADER_MAGIC){ throw new MidiFileException("not a MIDI file: wrong header magic"); } int headerLength = in.readInt(); if (headerLength < HEADER_LENGTH){ throw new MidiFileException("corrupt MIDI file: wrong header length"); } int type = in.readShort(); if (type < 0 || type > 2){ throw new MidiFileException("corrupt MIDI file: illegal type"); } if (type == 2){ throw new MidiFileException("this implementation doesn't support type 2 MIDI files"); } int trackCount = in.readShort(); if (trackCount <= 0){ throw new MidiFileException("corrupt MIDI file: number of tracks must be positive"); } if (type == 0 && trackCount != 1){ throw new MidiFileException("corrupt MIDI file: type 0 files must contain exactely one track"); } float divisionType = -1.0F; int resolution = -1; int division = in.readUnsignedShort(); if ((division & 0x8000) != 0){ int frameType = -((division >>> 8) & 0xFF); if(frameType == 24){ divisionType = MidiSequence.SMPTE_24; }else if(frameType == 25){ divisionType = MidiSequence.SMPTE_25; }else if(frameType == 29){ divisionType = MidiSequence.SMPTE_30DROP; }else if(frameType == 30){ divisionType = MidiSequence.SMPTE_30; }else{ throw new MidiFileException("corrupt MIDI file: illegal frame division type"); } resolution = division & 0xff; }else{ divisionType = MidiSequence.PPQ; resolution = division & 0x7fff; } in.skip(headerLength - HEADER_LENGTH); MidiSequence sequence = new MidiSequence(divisionType,resolution); for (int i = 0; i < trackCount; i++){ MidiTrack track = new MidiTrack(); sequence.addTrack(track); readTrack(in, track); } in.close(); return sequence; } private void readTrack(DataInputStream in, MidiTrack track)throws MidiFileException, IOException{ while (true){ if (in.readInt() == TRACK_MAGIC){ break; } int chunkLength = in.readInt(); if (chunkLength % 2 != 0){ chunkLength++; } in.skip(chunkLength); } MidiTrackReaderHelper helper = new MidiTrackReaderHelper(0,in.readInt(),-1); while (helper.remainingBytes > 0){ helper.ticks += readVariableLengthQuantity(in, helper); MidiEvent event = readEvent(in, helper); if(event != null){ track.add(event); } } } private static MidiEvent readEvent(DataInputStream in, MidiTrackReaderHelper helper)throws MidiFileException, IOException{ int statusByte = readUnsignedByte(in, helper); int savedByte = 0; boolean runningStatusApplies = false; if (statusByte < 0x80){ if (helper.runningStatusByte != -1){ runningStatusApplies = true; savedByte = statusByte; statusByte = helper.runningStatusByte; }else{ throw new MidiFileException("corrupt MIDI file: status byte missing"); } } int type = getType(statusByte); if(type == STATUS_ONE_BYTE){ int data = 0; if (runningStatusApplies){ data = savedByte; }else{ data = readUnsignedByte(in, helper); helper.runningStatusByte = statusByte; } return new MidiEvent(MidiMessage.shortMessage((statusByte & 0xF0),(statusByte & 0x0F) , data), helper.ticks); }else if(type == STATUS_TWO_BYTES){ int data1 = 0; if (runningStatusApplies){ data1 = savedByte; }else{ data1 = readUnsignedByte(in, helper); helper.runningStatusByte = statusByte; } return new MidiEvent(MidiMessage.shortMessage((statusByte & 0xF0),(statusByte & 0x0F) , data1, readUnsignedByte(in, helper)), helper.ticks); }else if(type == STATUS_SYSEX){ if (CANCEL_RUNNING_STATUS_ON_META_AND_SYSEX){ helper.runningStatusByte = -1; } int dataLength = (int) readVariableLengthQuantity(in, helper); byte[] data = new byte[dataLength]; for (int i = 0; i < dataLength; i++){ data[i] = (byte) readUnsignedByte(in, helper); } }else if(type == STATUS_META){ if (CANCEL_RUNNING_STATUS_ON_META_AND_SYSEX){ helper.runningStatusByte = -1; } int typeByte = readUnsignedByte(in, helper); int dataLength = (int) readVariableLengthQuantity(in, helper); byte[] data = new byte[dataLength]; for (int i = 0; i < dataLength; i++){ data[i] = (byte) readUnsignedByte(in, helper); } return new MidiEvent(MidiMessage.metaMessage(typeByte, data), helper.ticks); } return null; } private static int getType(int statusByte){ if (statusByte < 0xf0) { int command = statusByte & 0xf0; if(command == 0x80 || command == 0x90 || command == 0xa0 || command == 0xb0 || command == 0xe0){ return STATUS_TWO_BYTES; } else if(command == 0xc0 || command == 0xd0){ return STATUS_ONE_BYTE; } return STATUS_NONE; } else if (statusByte == 0xf0 || statusByte == 0xf7){ return STATUS_SYSEX; } else if (statusByte == 0xff){ return STATUS_META; } else{ return STATUS_NONE; } } public static long readVariableLengthQuantity(DataInputStream in, MidiTrackReaderHelper helper)throws MidiFileException, IOException{ int count = 0; long value = 0; while (count < 4){ int data = readUnsignedByte(in, helper); count++; value <<= 7; value |= (data & 0x7f); if (data < 128){ return value; } } throw new MidiFileException("not a MIDI file: unterminated variable-length quantity"); } public static int readUnsignedByte(DataInputStream dataInputStream, MidiTrackReaderHelper helper)throws IOException{ helper.remainingBytes--; return dataInputStream.readUnsignedByte(); } private class MidiTrackReaderHelper{ protected long ticks = 0; protected long remainingBytes; protected int runningStatusByte; protected MidiTrackReaderHelper(long ticks,long remainingBytes,int runningStatusByte){ this.ticks = ticks; this.remainingBytes = remainingBytes; this.runningStatusByte = runningStatusByte; } } }tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginImporter.java0000644000175000017500000000045111273045347031060 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin; import org.herac.tuxguitar.io.base.TGRawImporter; public class MidiPluginImporter extends TGImporterPlugin{ protected TGRawImporter getImporter() { return new MidiSongImporter(); } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongImporter.java0000644000175000017500000006204111273045347030533 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.midi.base.MidiEvent; import org.herac.tuxguitar.io.midi.base.MidiMessage; import org.herac.tuxguitar.io.midi.base.MidiSequence; import org.herac.tuxguitar.io.midi.base.MidiTrack; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; public class MidiSongImporter implements TGLocalFileImporter{ private static final int MIN_DURATION_VALUE = TGDuration.SIXTY_FOURTH; private int resolution; private List headers; private List tracks; private List tempNotes; private List tempChannels; private List trackTuningHelpers; private MidiSettings settings; protected TGFactory factory; protected InputStream stream; public MidiSongImporter(){ super(); } public TGFileFormat getFileFormat() { return new TGFileFormat("Midi","*.mid;*.midi"); } public String getImportName() { return "Midi"; } public boolean configure(boolean setDefaults){ this.settings = (setDefaults ? MidiSettings.getDefaults() : new MidiSettingsDialog().open()); return (this.settings != null); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.stream = stream; } public TGSong importSong() throws TGFileFormatException { try { if(this.settings == null || this.factory == null || this.stream == null ){ return null; } MidiSequence sequence = new MidiFileReader().getSequence(this.stream); initFields(sequence); for(int i = 0; i < sequence.countTracks(); i++){ MidiTrack track = sequence.getTrack(i); int trackNumber = getNextTrackNumber(); int events = track.size(); for(int j = 0;j < events;j ++){ MidiEvent event = track.get(j); parseMessage(trackNumber,event.getTick(),event.getMessage()); } } checkAll(); TGSong song = this.factory.newSong(); Iterator headers = this.headers.iterator(); while(headers.hasNext()){ song.addMeasureHeader((TGMeasureHeader)headers.next()); } Iterator tracks = this.tracks.iterator(); while(tracks.hasNext()){ song.addTrack((TGTrack)tracks.next()); } return new SongAdjuster(this.factory,song).adjustSong(); } catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private void initFields(MidiSequence sequence){ this.resolution = sequence.getResolution(); this.headers = new ArrayList(); this.tracks = new ArrayList(); this.tempNotes = new ArrayList(); this.tempChannels = new ArrayList(); this.trackTuningHelpers = new ArrayList(); } private int getNextTrackNumber(){ return (this.tracks.size() + 1); } private void parseMessage(int trackNumber,long tick,MidiMessage message){ long parsedTick = parseTick(tick + this.resolution); //NOTE ON if(message.getType() == MidiMessage.TYPE_SHORT && message.getCommand() == MidiMessage.NOTE_ON){ parseNoteOn(trackNumber,parsedTick,message.getData()); } //NOTE OFF else if(message.getType() == MidiMessage.TYPE_SHORT && message.getCommand() == MidiMessage.NOTE_OFF){ parseNoteOff(trackNumber,parsedTick,message.getData()); } //PROGRAM CHANGE else if(message.getType() == MidiMessage.TYPE_SHORT && message.getCommand() == MidiMessage.PROGRAM_CHANGE){ parseProgramChange(message.getData()); } //CONTROL CHANGE else if(message.getType() == MidiMessage.TYPE_SHORT && message.getCommand() == MidiMessage.CONTROL_CHANGE){ parseControlChange(message.getData()); } //TIME SIGNATURE else if(message.getType() == MidiMessage.TYPE_META && message.getCommand() == MidiMessage.TIME_SIGNATURE_CHANGE){ parseTimeSignature(parsedTick,message.getData()); } //TEMPO else if(message.getType() == MidiMessage.TYPE_META && message.getCommand() == MidiMessage.TEMPO_CHANGE){ parseTempo(parsedTick,message.getData()); } } private long parseTick(long tick){ return Math.abs(TGDuration.QUARTER_TIME * tick / this.resolution); } private void parseNoteOn(int track,long tick,byte[] data){ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0; int value = (length > 1)?(data[1] & 0xFF):0; int velocity = (length > 2)?(data[2] & 0xFF):0; if(velocity == 0){ parseNoteOff(track,tick,data); }else if(value > 0){ makeTempNotesBefore(tick,track); getTempChannel(channel).setTrack(track); getTrackTuningHelper(track).checkValue(value); this.tempNotes.add(new TempNote(track,channel,value,tick)); } } private void parseNoteOff(int track,long tick,byte[] data){ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0; int value = (length > 1)?(data[1] & 0xFF):0; makeNote(tick,track,channel,value); } private void parseProgramChange(byte[] data){ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1; int instrument = (length > 1)?(data[1] & 0xFF):-1; if(channel != -1 && instrument != -1){ getTempChannel(channel).setInstrument(instrument); } } private void parseControlChange(byte[] data){ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1; int control = (length > 1)?(data[1] & 0xFF):-1; int value = (length > 2)?(data[2] & 0xFF):-1; if(channel != -1 && control != -1 && value != -1){ if(control == MidiControllers.VOLUME){ getTempChannel(channel).setVolume(value); } else if(control == MidiControllers.BALANCE){ getTempChannel(channel).setBalance(value); } } } private void parseTimeSignature(long tick,byte[] data){ if(data.length >= 2){ TGTimeSignature timeSignature = this.factory.newTimeSignature(); timeSignature.setNumerator(data[0]); timeSignature.getDenominator().setValue(TGDuration.QUARTER); if (data[1] == 0) { timeSignature.getDenominator().setValue(TGDuration.WHOLE); } else if (data[1] == 1) { timeSignature.getDenominator().setValue(TGDuration.HALF); } else if (data[1] == 2) { timeSignature.getDenominator().setValue(TGDuration.QUARTER); } else if (data[1] == 3) { timeSignature.getDenominator().setValue(TGDuration.EIGHTH); } else if (data[1] == 4) { timeSignature.getDenominator().setValue(TGDuration.SIXTEENTH); } else if (data[1] == 5) { timeSignature.getDenominator().setValue(TGDuration.THIRTY_SECOND); } getHeader(tick).setTimeSignature(timeSignature); } } private void parseTempo(long tick,byte[] data){ if(data.length >= 3){ TGTempo tempo = TGTempo.fromUSQ(this.factory,(data[2] & 0xff) | ((data[1] & 0xff) << 8) | ((data[0] & 0xff) << 16)); getHeader(tick).setTempo(tempo); } } private TGTrack getTrack(int number){ Iterator it = this.tracks.iterator(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); if(track.getNumber() == number){ return track; } } TGChannel channel = this.factory.newChannel(); channel.setChannel((short)-1); channel.setEffectChannel((short)-1); channel.setInstrument((short)0); TGTrack track = this.factory.newTrack(); track.setNumber(number); track.setChannel(channel); TGColor.RED.copy(track.getColor()); this.tracks.add(track); return track; } private TGMeasureHeader getHeader(long tick){ long realTick = (tick >= TGDuration.QUARTER_TIME)?tick:TGDuration.QUARTER_TIME; Iterator it = this.headers.iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(realTick >= header.getStart() && realTick < header.getStart() + header.getLength()){ return header; } } TGMeasureHeader last = getLastHeader(); TGMeasureHeader header = this.factory.newHeader(); header.setNumber((last != null)?last.getNumber() + 1:1); header.setStart((last != null)?(last.getStart() + last.getLength()):TGDuration.QUARTER_TIME); header.getTempo().setValue( (last != null)?last.getTempo().getValue():120 ); if(last != null){ last.getTimeSignature().copy(header.getTimeSignature()); }else{ header.getTimeSignature().setNumerator(4); header.getTimeSignature().getDenominator().setValue(TGDuration.QUARTER); } this.headers.add(header); if(realTick >= header.getStart() && realTick < header.getStart() + header.getLength()){ return header; } return getHeader(realTick); } private TGMeasureHeader getLastHeader(){ if(!this.headers.isEmpty()){ return (TGMeasureHeader)this.headers.get(this.headers.size() - 1); } return null; } private TGMeasure getMeasure(TGTrack track,long tick){ long realTick = (tick >= TGDuration.QUARTER_TIME)?tick:TGDuration.QUARTER_TIME; Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); if(realTick >= measure.getStart() && realTick < measure.getStart() + measure.getLength()){ return measure; } } getHeader(realTick); for(int i = 0;i < this.headers.size();i++){ boolean exist = false; TGMeasureHeader header = (TGMeasureHeader)this.headers.get(i); int measureCount = track.countMeasures(); for(int j = 0;j < measureCount;j++){ TGMeasure measure = track.getMeasure(j); if(measure.getHeader().equals(header)){ exist = true; } } if(!exist){ TGMeasure measure = this.factory.newMeasure(header); track.addMeasure(measure); } } return getMeasure(track,realTick); } private TGBeat getBeat(TGMeasure measure, long start){ int beatCount = measure.countBeats(); for( int i = 0 ; i < beatCount ; i ++){ TGBeat beat = measure.getBeat( i ); if( beat.getStart() == start){ return beat; } } TGBeat beat = this.factory.newBeat(); beat.setStart(start); measure.addBeat(beat); return beat; } private TempNote getTempNote(int track,int channel,int value,boolean purge){ for(int i = 0;i < this.tempNotes.size();i ++){ TempNote note = (TempNote)this.tempNotes.get(i); if(note.getTrack() == track && note.getChannel() == channel && note.getValue() == value){ if(purge){ this.tempNotes.remove(i); } return note; } } return null; } protected TrackTuningHelper getTrackTuningHelper(int track){ Iterator it = this.trackTuningHelpers.iterator(); while(it.hasNext()){ TrackTuningHelper helper = (TrackTuningHelper)it.next(); if(helper.getTrack() == track){ return helper; } } TrackTuningHelper helper = new TrackTuningHelper(track); this.trackTuningHelpers.add(helper); return helper; } private void makeTempNotesBefore(long tick,int track){ long nextTick = tick; boolean check = true; while(check){ check = false; for(int i = 0;i < this.tempNotes.size();i ++){ TempNote note = (TempNote)this.tempNotes.get(i); if(note.getTick() < nextTick && note.getTrack() == track){ nextTick = note.getTick() + (TGDuration.QUARTER_TIME * 5); //First beat + 4/4 measure; makeNote(nextTick,track,note.getChannel(),note.getValue()); check = true; break; } } } } private void makeNote(long tick,int track,int channel,int value){ TempNote tempNote = getTempNote(track,channel,value,true); if(tempNote != null){ int nString = 0; int nValue = (tempNote.getValue() + this.settings.getTranspose()); int nVelocity = 64; long nStart = tempNote.getTick(); TGDuration minDuration = newDuration(MIN_DURATION_VALUE); TGDuration nDuration = TGDuration.fromTime(this.factory,tick - tempNote.getTick(),minDuration); TGMeasure measure = getMeasure(getTrack(track),tempNote.getTick()); TGBeat beat = getBeat(measure, nStart); nDuration.copy(beat.getVoice(0).getDuration()); TGNote note = this.factory.newNote(); note.setValue(nValue); note.setString(nString); note.setVelocity(nVelocity); beat.getVoice(0).addNote(note); } } public TempChannel getTempChannel(int channel){ Iterator it = this.tempChannels.iterator(); while(it.hasNext()){ TempChannel tempChannel = (TempChannel)it.next(); if(tempChannel.getChannel() == channel){ return tempChannel; } } TempChannel tempChannel = new TempChannel(channel); this.tempChannels.add(tempChannel); return tempChannel; } private void checkAll()throws Exception{ checkTracks(); int headerCount = this.headers.size(); for(int i = 0;i < this.tracks.size();i ++){ TGTrack track = (TGTrack)this.tracks.get(i); while(track.countMeasures() < headerCount){ long start = TGDuration.QUARTER_TIME; TGMeasure lastMeasure = ((track.countMeasures() > 0)?track.getMeasure(track.countMeasures() - 1) :null); if(lastMeasure != null){ start = (lastMeasure.getStart() + lastMeasure.getLength()); } track.addMeasure(this.factory.newMeasure(getHeader(start))); } } if(this.headers.isEmpty() || this.tracks.isEmpty()){ throw new Exception("Empty Song"); } } private void checkTracks(){ Iterator it = this.tracks.iterator(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); Iterator tcIt = this.tempChannels.iterator(); while(tcIt.hasNext()){ TempChannel tempChannel = (TempChannel)tcIt.next(); if(tempChannel.getTrack() == track.getNumber()){ if(track.getChannel().getChannel() < 0){ track.getChannel().setChannel((short)tempChannel.getChannel()); track.getChannel().setInstrument((short)tempChannel.getInstrument()); track.getChannel().setVolume((short)tempChannel.getVolume()); track.getChannel().setBalance((short)tempChannel.getBalance()); }else if(track.getChannel().getEffectChannel() < 0){ track.getChannel().setEffectChannel((short)tempChannel.getChannel()); } } } if(track.getChannel().getChannel() < 0){ track.getChannel().setChannel((short)(TGSongManager.MAX_CHANNELS - 1)); track.getChannel().setInstrument((short)0); track.getChannel().setVolume((short)127); track.getChannel().setBalance((short)64); } if(track.getChannel().getEffectChannel() < 0){ track.getChannel().setEffectChannel(track.getChannel().getChannel()); } if(!track.isPercussionTrack()){ track.setStrings(getTrackTuningHelper(track.getNumber()).getStrings()); }else{ track.setStrings(TGSongManager.createPercussionStrings(this.factory,6)); } } } protected TGDuration newDuration(int value){ TGDuration duration = this.factory.newDuration(); duration.setValue(value); return duration; } private class TempNote{ private int track; private int channel; private int value; private long tick; public TempNote(int track, int channel, int value,long tick) { this.track = track; this.channel = channel; this.value = value; this.tick = tick; } public int getChannel() { return this.channel; } public void setChannel(int channel) { this.channel = channel; } public long getTick() { return this.tick; } public void setTick(long tick) { this.tick = tick; } public int getTrack() { return this.track; } public void setTrack(int track) { this.track = track; } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } } private class TempChannel{ private int channel; private int instrument; private int volume; private int balance; private int track; public TempChannel(int channel) { this.channel = channel; this.instrument = 0; this.volume = 127; this.balance = 64; this.track = -1; } public int getBalance() { return this.balance; } public void setBalance(int balance) { this.balance = balance; } public int getChannel() { return this.channel; } public void setChannel(int channel) { this.channel = channel; } public int getInstrument() { return this.instrument; } public void setInstrument(int instrument) { this.instrument = instrument; } public int getTrack() { return this.track; } public void setTrack(int track) { this.track = track; } public int getVolume() { return this.volume; } public void setVolume(int volume) { this.volume = volume; } } private class TrackTuningHelper{ private int track; private int maxValue; private int minValue; public TrackTuningHelper(int track){ this.track = track; this.maxValue = -1; this.minValue = -1; } public void checkValue(int value){ if(this.minValue < 0 || value < this.minValue){ this.minValue = value; } if(this.maxValue < 0 || value > this.maxValue){ this.maxValue = value; } } public List getStrings() { List strings = new ArrayList(); int maxFret = 24; if(this.minValue >= 40 && this.maxValue <= 64 + maxFret){ strings.add(TGSongManager.newString(MidiSongImporter.this.factory,1, 64)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,2, 59)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,3, 55)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,4, 50)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,5, 45)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,6, 40)); } else if(this.minValue >= 38 && this.maxValue <= 64 + maxFret){ strings.add(TGSongManager.newString(MidiSongImporter.this.factory,1, 64)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,2, 59)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,3, 55)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,4, 50)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,5, 45)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,6, 38)); } else if(this.minValue >= 35 && this.maxValue <= 64 + maxFret){ strings.add(TGSongManager.newString(MidiSongImporter.this.factory,1, 64)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,2, 59)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,3, 55)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,4, 50)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,5, 45)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,6, 40)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,7, 35)); } else if(this.minValue >= 28 && this.maxValue <= 43 + maxFret){ strings.add(TGSongManager.newString(MidiSongImporter.this.factory,1, 43)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,2, 38)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,3, 33)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,4, 28)); } else if(this.minValue >= 23 && this.maxValue <= 43 + maxFret){ strings.add(TGSongManager.newString(MidiSongImporter.this.factory,1, 43)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,2, 38)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,3, 33)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,4, 28)); strings.add(TGSongManager.newString(MidiSongImporter.this.factory,5, 23)); }else{ int stringCount = 6; int stringSpacing = ((this.maxValue - (maxFret - 4) - this.minValue) / stringCount); if(stringSpacing > 5){ stringCount = 7; stringSpacing = ((this.maxValue - (maxFret - 4) - this.minValue) / stringCount); } int maxStringValue = (this.minValue + (stringCount * stringSpacing)); while(strings.size() < stringCount){ maxStringValue -= stringSpacing; strings.add(TGSongManager.newString(MidiSongImporter.this.factory,strings.size() + 1,maxStringValue)); } } return strings; } public int getMaxValue() { return this.maxValue; } public int getMinValue() { return this.minValue; } public int getTrack() { return this.track; } } } class SongAdjuster{ private TGFactory factory; private TGSong song; private long minDurationTime; public SongAdjuster(TGFactory factory,TGSong song){ this.factory = factory; this.song = song; this.minDurationTime = 40; } public TGSong adjustSong(){ Iterator it = this.song.getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); adjustTrack(track); } return this.song; } private void adjustTrack(TGTrack track){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); process(measure); } } public void process(TGMeasure measure){ orderBeats(measure); joinBeats(measure); adjustStrings(measure); } public void joinBeats(TGMeasure measure){ TGBeat previous = null; boolean finish = true; long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); for(int i = 0;i < measure.countBeats();i++){ TGBeat beat = measure.getBeat( i ); long beatStart = beat.getStart(); long beatLength = beat.getVoice(0).getDuration().getTime(); if(previous != null){ long previousStart = previous.getStart(); long previousLength = previous.getVoice(0).getDuration().getTime(); //if(previousStart == beatStart){ if(beatStart >= previousStart && (previousStart + this.minDurationTime) > beatStart ){ // add beat notes to previous for(int n = 0;n < beat.getVoice(0).countNotes();n++){ TGNote note = beat.getVoice(0).getNote( n ); previous.getVoice(0).addNote( note ); } // add beat chord to previous if(!previous.isChordBeat() && beat.isChordBeat()){ previous.setChord( beat.getChord() ); } // add beat text to previous if(!previous.isTextBeat() && beat.isTextBeat()){ previous.setText( beat.getText() ); } // set the best duration if(beatLength > previousLength && (beatStart + beatLength) <= measureEnd){ beat.getVoice(0).getDuration().copy(previous.getVoice(0).getDuration()); } measure.removeBeat(beat); finish = false; break; } else if(previousStart < beatStart && (previousStart + previousLength) > beatStart){ if(beat.getVoice(0).isRestVoice()){ measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (beatStart - previousStart) ); duration.copy( previous.getVoice(0).getDuration() ); } } if( (beatStart + beatLength) > measureEnd ){ if(beat.getVoice(0).isRestVoice()){ measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (measureEnd - beatStart) ); duration.copy( beat.getVoice(0).getDuration() ); } previous = beat; } if(!finish){ joinBeats(measure); } } public void orderBeats(TGMeasure measure){ for(int i = 0;i < measure.countBeats();i++){ TGBeat minBeat = null; for(int j = i;j < measure.countBeats();j++){ TGBeat beat = measure.getBeat(j); if(minBeat == null || beat.getStart() < minBeat.getStart()){ minBeat = beat; } } measure.moveBeat(i, minBeat); } } private void adjustStrings(TGMeasure measure){ for(int i = 0;i < measure.countBeats();i++){ TGBeat beat = measure.getBeat( i ); adjustStrings(beat); } } private void adjustStrings(TGBeat beat){ TGTrack track = beat.getMeasure().getTrack(); List freeStrings = new ArrayList( track.getStrings() ); List notesToRemove = new ArrayList(); //ajusto las cuerdas Iterator it = beat.getVoice(0).getNotes().iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); int string = getStringForValue(freeStrings,note.getValue()); for(int j = 0;j < freeStrings.size();j ++){ TGString tempString = (TGString)freeStrings.get(j); if(tempString.getNumber() == string){ note.setValue(note.getValue() - tempString.getValue()); note.setString(tempString.getNumber()); freeStrings.remove(j); break; } } //Cannot have more notes on same string if(note.getString() < 1){ notesToRemove.add( note ); } } // Remove notes while( notesToRemove.size() > 0 ){ beat.getVoice(0).removeNote( (TGNote)notesToRemove.get( 0 ) ); notesToRemove.remove( 0 ); } } private int getStringForValue(List strings,int value){ int minFret = -1; int stringForValue = 0; for(int i = 0;i < strings.size();i++){ TGString string = (TGString)strings.get(i); int fret = value - string.getValue(); if(minFret < 0 || (fret >= 0 && fret < minFret)){ stringForValue = string.getNumber(); minFret = fret; } } return stringForValue; } }tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginExporter.java0000644000175000017500000000045111273045347031067 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class MidiPluginExporter extends TGExporterPlugin{ protected TGRawExporter getExporter() { return new MidiSongExporter(); } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiFileHeader.java0000644000175000017500000000034211273045347030067 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; public interface MidiFileHeader { public static final int HEADER_LENGTH = 6; public static final int HEADER_MAGIC = 0x4d546864; public static final int TRACK_MAGIC = 0x4d54726b; }tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiMessageUtils.java0000644000175000017500000000460511273045347030512 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import org.herac.tuxguitar.io.midi.base.MidiMessage; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiMessageUtils { public static final byte TICK_MOVE = 0x01; private static int fixValue(int value){ int fixedValue = value; fixedValue = Math.min(fixedValue,127); fixedValue = Math.max(fixedValue,0); return fixedValue; } private static int fixChannel(int channel){ int fixedChannel = channel; fixedChannel = Math.min(fixedChannel,15); fixedChannel = Math.max(fixedChannel,0); return fixedChannel; } public static MidiMessage noteOn(int channel,int note,int velocity){ return MidiMessage.shortMessage(MidiMessage.NOTE_ON, fixChannel(channel), fixValue(note), fixValue(velocity)); } public static MidiMessage noteOff(int channel,int note,int velocity){ return MidiMessage.shortMessage(MidiMessage.NOTE_OFF, fixChannel(channel), fixValue(note), fixValue(velocity)); } public static MidiMessage controlChange(int channel,int controller,int value){ return MidiMessage.shortMessage(MidiMessage.CONTROL_CHANGE, fixChannel(channel), fixValue(controller), fixValue(value)); } public static MidiMessage programChange(int channel,int instrument){ return MidiMessage.shortMessage(MidiMessage.PROGRAM_CHANGE, fixChannel(channel), fixValue(instrument)); } public static MidiMessage pitchBend(int channel,int value){ return MidiMessage.shortMessage(MidiMessage.PITCH_BEND, fixChannel(channel), 0, fixValue(value)); } public static MidiMessage systemReset(){ return MidiMessage.shortMessage(MidiMessage.SYSTEM_RESET); } public static MidiMessage tempoInUSQ(int usq){ MidiMessage message = new MidiMessage(MidiMessage.TYPE_META, MidiMessage.TEMPO_CHANGE); message.setData(new byte[]{(byte)((usq >> 16) & 0xff),(byte)((usq >> 8) & 0xff),(byte)((usq) & 0xff) }); //message.setData(new byte[]{(byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) }); return message; } public static MidiMessage timeSignature(TGTimeSignature ts){ MidiMessage message = new MidiMessage(MidiMessage.TYPE_META, MidiMessage.TIME_SIGNATURE_CHANGE); message.setData(new byte[]{ (byte)ts.getNumerator(),(byte)ts.getDenominator().getIndex(),(byte)(96 / ts.getDenominator().getValue()),8 }); return message; } public static MidiMessage endOfTrack(){ return MidiMessage.metaMessage(47,new byte[]{}); } }tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiFileWriter.java0000644000175000017500000000612711273045347030162 0ustar julianjulianpackage org.herac.tuxguitar.io.midi; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import org.herac.tuxguitar.io.midi.base.MidiEvent; import org.herac.tuxguitar.io.midi.base.MidiMessage; import org.herac.tuxguitar.io.midi.base.MidiSequence; import org.herac.tuxguitar.io.midi.base.MidiTrack; public class MidiFileWriter implements MidiFileHeader{ public void write(MidiSequence sequence,int type,OutputStream stream)throws IOException{ DataOutputStream out = new DataOutputStream(stream); out.writeInt(HEADER_MAGIC); out.writeInt(HEADER_LENGTH); out.writeShort(type); out.writeShort(sequence.countTracks()); out.writeShort( (sequence.getDivisionType() == MidiSequence.PPQ)?(sequence.getResolution() & 0x7fff):0 ); for (int i = 0; i < sequence.countTracks(); i++){ writeTrack(sequence.getTrack(i),out); } out.flush(); out.close(); } private static int writeTrack(MidiTrack track,DataOutputStream out)throws IOException{ int length = 0; if (out != null){ out.writeInt(TRACK_MAGIC); } if (out != null){ out.writeInt( writeTrack(track, null) ); } MidiEvent previous = null; for (int i = 0; i < track.size(); i++){ MidiEvent event = track.get(i); length += writeEvent(event,previous,out); previous = event; } return length; } private static int writeEvent(MidiEvent event,MidiEvent previous,OutputStream out)throws IOException{ int length = writeVariableLengthQuantity(((previous != null)?(event.getTick() - previous.getTick()):0), out); MidiMessage message = event.getMessage(); if(message.getType() == MidiMessage.TYPE_SHORT){ length += writeShortMessage(message,out); } else if(message.getType() == MidiMessage.TYPE_META){ length += writeMetaMessage(message,out); } return length; } private static int writeShortMessage(MidiMessage message,OutputStream out)throws IOException{ byte[] data = message.getData(); int length = data.length; if (out != null){ out.write(message.getData(),0,length); } return length; } private static int writeMetaMessage(MidiMessage message,OutputStream out)throws IOException{ int length = 0; byte[] data = message.getData(); if (out != null){ out.write(0xFF); out.write(message.getCommand()); } length += 2; length += writeVariableLengthQuantity(data.length,out); if (out != null){ out.write(data); } length += data.length; return length; } private static int writeVariableLengthQuantity(long value, OutputStream out)throws IOException{ boolean started = false; int length = 0; int data = (int) ((value >> 21) & 0x7f); if (data != 0){ if (out != null){ out.write(data | 0x80); } length++; started = true; } data = (int) ((value >> 14) & 0x7f); if (data != 0 || started){ if (out != null){ out.write(data | 0x80); } length++; started = true; } data = (int) ((value >> 7) & 0x7f); if (data != 0 || started){ if (out != null){ out.write(data | 0x80); } length++; } data = (int) (value & 0x7f); if (out != null){ out.write(data); } length++; return length; } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/utils/TGCommunityWeb.java0000644000175000017500000000474611273071764033124 0ustar julianjulianpackage org.herac.tuxguitar.community.utils; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.gui.system.config.TGConfigManager; public class TGCommunityWeb { public static String HOME_URL = TGCommunitySingleton.getInstance().getConfig().getStringConfigValue("community.url"); public static void open( String suffix ){ try { open( new URL(HOME_URL + "/" + suffix) ); } catch (MalformedURLException e) { e.printStackTrace(); } } public static boolean open( URL url ){ if( openDesktopBrowser( url ) ){ return true; } if( openCommandLineBrowser( url ) ){ return true; } return false; } private static boolean openDesktopBrowser( URL url ){ try { Class desktopClass = Class.forName("java.awt.Desktop"); if( desktopClass != null ){ Method desktop_getDesktop = desktopClass.getDeclaredMethod("getDesktop", new Class[]{} ); Method desktop_browse = desktopClass.getDeclaredMethod("browse", new Class[]{ java.net.URI.class }); if( desktop_getDesktop != null && desktop_browse != null ){ Object desktopObject = desktop_getDesktop.invoke( null , new Object[]{} ); if( desktopObject != null ){ desktop_browse.invoke( desktopObject , new Object[] { new java.net.URI( url.toExternalForm() ) } ); } } } return true; } catch ( Throwable throwable ) { throwable.printStackTrace(); } return false; } private static boolean openCommandLineBrowser( URL url ){ TGConfigManager config = TGCommunitySingleton.getInstance().getConfig(); String[] browserCmds = config.getStringConfigValue("community.browser","").split(";"); for( int i = 0 ; i < browserCmds.length ; i ++ ){ try { String browserCmd = browserCmds[i]; if( browserCmd != null && browserCmd.length() > 0 ){ String pattern = ("%s"); int indexOfPattern = browserCmd.indexOf( pattern ); if( indexOfPattern >= 0 ){ String commandLine = new String(); commandLine += browserCmd.substring(0, indexOfPattern ); commandLine += url.toExternalForm(); if( browserCmd.length() > (indexOfPattern + pattern.length() ) ){ commandLine += ( browserCmd.substring( (indexOfPattern + pattern.length() ) , browserCmd.length() ) ); } Runtime.getRuntime().exec( commandLine ); return true; } } } catch ( Throwable throwable ) { // nothing to do. } } return false; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupPlugin.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupPl0000644000175000017500000000112611273045343033746 0ustar julianjulianpackage org.herac.tuxguitar.community.startup; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter; public class TGCommunityStartupPlugin extends TGPluginAdapter { private boolean done; public TGCommunityStartupPlugin(){ this.done = false; } public void init() { // Nothing to init. } public void close() { // Nothing to close. } public void setEnabled(boolean enabled) { if(!this.done && enabled){ TGCommunityStartupScreen startup = new TGCommunityStartupScreen(); if( !startup.isDisabled() ){ startup.open(); } } this.done = true; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupScreen.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupSc0000644000175000017500000001415611273045343033747 0ustar julianjulianpackage org.herac.tuxguitar.community.startup; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.community.utils.TGCommunityWeb; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.util.TGSynchronizer; public class TGCommunityStartupScreen { private static final int MAIN_WIDTH = 550; private static final int MAIN_HEIGHT = SWT.DEFAULT; public TGCommunityStartupScreen(){ super(); } public void open(){ try { final Shell parent = TuxGuitar.instance().getShell(); TGSynchronizer.instance().runLater( new TGSynchronizer.TGRunnable() { public void run() throws Throwable { open( parent ); } } ); } catch (Throwable e) { e.printStackTrace(); } } protected void open(Shell parent){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM ); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); dialog.setText(TuxGuitar.getProperty("tuxguitar-community.welcome-dialog.title")); Composite composite = new Composite( dialog, SWT.NONE ); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(MAIN_WIDTH, MAIN_HEIGHT)); //==============================================================// Composite top = new Composite( composite, SWT.NONE ); top.setLayout(new GridLayout( 2 , false )); top.setLayoutData(new GridData(SWT.FILL,SWT.FILL, true,true)); Composite topLeft = new Composite( top , SWT.NONE ); topLeft.setLayout( new GridLayout() ); topLeft.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,false,false)); Label image = new Label( topLeft, SWT.NONE ); image.setImage( TuxGuitar.instance().getIconManager().getAppIcon() ); Composite topRight = new Composite( top , SWT.NONE ); topRight.setLayout( new GridLayout(2,false) ); topRight.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); addTitle( topRight , TuxGuitar.getProperty("tuxguitar-community.welcome-dialog.title") ); addTipItem( topRight ); addComment( topRight , TuxGuitar.getProperty("tuxguitar-community.welcome-dialog.tip-1") ); addTipItem( topRight ); addComment( topRight , TuxGuitar.getProperty("tuxguitar-community.welcome-dialog.tip-2") ); //==============================================================// Composite bottom = new Composite( composite, SWT.NONE ); bottom.setLayout(new GridLayout()); bottom.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); addComment( bottom , TuxGuitar.getProperty("tuxguitar-community.welcome-dialog.tip-bottom") ); //==============================================================// Composite buttons = new Composite( composite, SWT.NONE ); buttons.setLayout(new GridLayout( 2 , false )); buttons.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final Button buttonDisabled = new Button( buttons , SWT.CHECK ); buttonDisabled.setLayoutData( new GridData(SWT.LEFT, SWT.FILL, true, true) ); buttonDisabled.setText( TuxGuitar.getProperty("tuxguitar-community.welcome-dialog.disable") ); buttonDisabled.setSelection( this.isDisabled() ); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonOkData()); buttonOK.setFocus(); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setDisabled( buttonDisabled.getSelection() ); dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK ); } private GridData getButtonOkData(){ GridData data = new GridData(SWT.RIGHT, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private void addTitle( Composite parent , String text ){ Label label = new Label( parent , SWT.LEFT ); label.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true,2,1)); label.setText(text); FontData[] fontDatas = label.getFont().getFontData(); if(fontDatas.length > 0){ int fHeight = (fontDatas[0].getHeight() + 2); int fStyle = (fontDatas[0].getStyle() | SWT.BOLD); final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),fHeight, fStyle); label.setFont(font); label.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent arg0) { font.dispose(); } }); } } private void addTipItem( Composite parent ){ Label label = new Label( parent , SWT.LEFT ); label.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,false,true)); label.setText("\u066D"); } private void addComment( Composite parent , String text ){ final Link link = new Link( parent , SWT.LEFT ); link.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); link.setText(text); link.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { final String href = event.text; if( href != null ){ new Thread( new Runnable() { public void run() { TGCommunityWeb.open( href ); } } ).start(); } } }); } public void setDisabled( boolean enabled ){ TGCommunitySingleton.getInstance().getConfig().setProperty("community.welcome.disabled",enabled); } public boolean isDisabled(){ return TGCommunitySingleton.getInstance().getConfig().getBooleanConfigValue("community.welcome.disabled"); } }tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuth.java0000644000175000017500000000450011273045343033067 0ustar julianjulianpackage org.herac.tuxguitar.community.auth; import java.security.MessageDigest; import org.herac.tuxguitar.community.auth.utils.Base64Decoder; import org.herac.tuxguitar.community.auth.utils.Base64Encoder; import org.herac.tuxguitar.gui.system.config.TGConfigManager; public class TGCommunityAuth { private static final String STRING_SEPARATOR = ";"; private String username; private String password; private String authCode; public TGCommunityAuth(){ this.username = new String(); this.password = new String(); this.authCode = new String(); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAuthCode() { return this.authCode; } public boolean isEmpty(){ return ( this.username == null || this.password == null || this.username.length() == 0 || this.password.length() == 0 ); } public void update(){ try { String passwordMD5 = new String(); if( this.password != null && this.password.length() > 0 ){ MessageDigest md = MessageDigest.getInstance("md5"); md.update(this.password.getBytes()); byte[] digest = md.digest(); for (int i = 0; i < digest.length; i++){ passwordMD5 += Integer.toHexString((digest[i] >> 4) & 0xf); passwordMD5 += Integer.toHexString((digest[i] & 0xf)); } } this.authCode = new String(Base64Encoder.encode( new String(this.username + ";" + passwordMD5 ).getBytes() ) ); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void save( TGConfigManager config ){ String data = new String(this.getUsername() + STRING_SEPARATOR + this.getPassword() ); String encodedData = new String(Base64Encoder.encode( data.getBytes() ) ) ; config.setProperty("community.account", encodedData ); } public void load( TGConfigManager config ) { String encodedData = config.getStringConfigValue("community.account"); if( encodedData != null && encodedData.length() > 0 ){ String data = new String(Base64Decoder.decode( encodedData.getBytes() )); String[] values = data.split(STRING_SEPARATOR); if(values.length == 2){ this.setUsername( values[0] ); this.setPassword( values[1] ); } } } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuthDialog.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuthDialog.j0000644000175000017500000001356611273045343033533 0ustar julianjulianpackage org.herac.tuxguitar.community.auth; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.community.utils.TGCommunityWeb; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.util.TGSynchronizer; public class TGCommunityAuthDialog { private boolean accepted; private TGCommunityAuth auth; public TGCommunityAuthDialog(){ this.auth = TGCommunitySingleton.getInstance().getAuth(); this.accepted = false; } public void open() { this.open( TuxGuitar.instance().getShell() ); } public void open(final Shell shell) { try { if( shell != null && !shell.isDisposed() ){ TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { if( !shell.isDisposed() ){ doOpen( shell ); } } }); } }catch(Throwable throwable){ throwable.printStackTrace(); } } protected void doOpen(Shell shell) { this.accepted = false; final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); dialog.setText(TuxGuitar.getProperty("tuxguitar-community.auth-dialog.title")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(makeGroupLayout(2,5)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("tuxguitar-community.auth-dialog.signin")); //-------USERNAME------------------------------------ Label usernameLabel = new Label(group, SWT.NULL); usernameLabel.setLayoutData(makeLabelData()); usernameLabel.setText(TuxGuitar.getProperty("tuxguitar-community.auth-dialog.signin.username") + ":"); final Text usernameText = new Text(group, SWT.BORDER); usernameText.setLayoutData(makeTextData()); usernameText.setText( this.auth.getUsername() ); //-------PASSWORD------------------------------------ Label passwordLabel = new Label(group, SWT.NULL); passwordLabel.setLayoutData(makeLabelData()); passwordLabel.setText(TuxGuitar.getProperty("tuxguitar-community.auth-dialog.signin.password") + ":"); final Text passwordText = new Text(group, SWT.BORDER | SWT.PASSWORD ); passwordText.setLayoutData(makeTextData()); passwordText.setText( this.auth.getPassword() ); //-------JOIN------------------------------------ Group join = new Group(dialog,SWT.SHADOW_ETCHED_IN); join.setLayout(makeGroupLayout(1,5)); //join.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); join.setLayoutData(new GridData(group.computeSize(SWT.DEFAULT, SWT.DEFAULT).x , SWT.DEFAULT)); join.setText(TuxGuitar.getProperty("tuxguitar-community.auth-dialog.signup")); final Link joinLink = new Link( join, SWT.LEFT ); joinLink.setLayoutData( new GridData(SWT.LEFT, SWT.CENTER, true, true )); joinLink.setText(TuxGuitar.getProperty("tuxguitar-community.auth-dialog.signup.tip")); joinLink.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { final String href = event.text; if( href != null ){ new Thread( new Runnable() { public void run() { TGCommunityWeb.open( href ); } } ).start(); } } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { update(usernameText.getText(), passwordText.getText()); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridLayout makeGroupLayout(int columns, int spacing){ GridLayout layout = new GridLayout(columns,false); layout.marginTop = spacing; layout.marginBottom = spacing; layout.marginLeft = spacing; layout.marginRight = spacing; layout.verticalSpacing = spacing; layout.horizontalSpacing = spacing; return layout; } private GridData makeLabelData(){ return new GridData(SWT.RIGHT,SWT.CENTER,false,true); } private GridData makeTextData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 250; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void update( String username, String password){ this.auth.setUsername(username); this.auth.setPassword(password); this.accepted = true; } public boolean isAccepted(){ return this.accepted; } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSong.java0000644000175000017500000000730511273045343031626 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.io.base.TGOutputStreamBase; import org.herac.tuxguitar.io.tg.TGOutputStream; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.util.TGSynchronizer; public class TGShareSong { public TGShareSong( ) { super(); } public void process( TGSong song ) { try { TGShareFile file = new TGShareFile(); file.setFile( getSongBytes( song ) ); this.processDialog(file , null ); } catch (Throwable throwable ){ MessageDialog.errorMessage(throwable); } } public void processDialog( final TGShareFile file , final String errors ) { try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { TGShareFileDialog fileDialog = new TGShareFileDialog( file , errors ); fileDialog.open(); if( fileDialog.isAccepted() ){ processUpload( file ); } } }); } catch (Throwable throwable ){ MessageDialog.errorMessage(throwable); } } public void processAuthDialog( final TGShareFile file ) { try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { TGCommunityAuthDialog authDialog = new TGCommunityAuthDialog(); authDialog.open(); if( authDialog.isAccepted() ){ processUpload( file ); } } }); } catch (Throwable throwable ){ MessageDialog.errorMessage(throwable); } } public void processUpload( final TGShareFile file ) { this.setActiveMode(); new Thread( new Runnable() { public void run() { try { TGShareSongConnection share = new TGShareSongConnection(); share.uploadFile(file , TGShareSong.this ); } catch (Throwable throwable ){ MessageDialog.errorMessage(throwable); } } } ).start(); } public void processResult( TGShareSongResponse response, TGShareFile file ){ this.setPasiveMode(); try { String status = response.getStatus(); if( status != null && status.equals(TGShareSongConnection.HTTP_STATUS_OK) ){ MessageDialog.infoMessage("File Uploaded", "File upload completed!!"); } else if( status != null && status.equals(TGShareSongConnection.HTTP_STATUS_UNAUTHORIZED) ){ processAuthDialog( file ); } else if( status != null && status.equals(TGShareSongConnection.HTTP_STATUS_INVALID) ){ String message = new String(); List messages = new ArrayList(); response.loadMessages( messages ); Iterator it = messages.iterator(); while( it.hasNext() ){ message += ( (String) it.next() + "\r\n" ); } processDialog( file , message ); } else{ processDialog( file , "Error: " + status ); } } catch (Throwable throwable ){ MessageDialog.errorMessage(throwable); } } private byte[] getSongBytes( TGSong song ) throws Throwable { ByteArrayOutputStream out = new ByteArrayOutputStream(); TGOutputStreamBase tgStream = new TGOutputStream(); tgStream.init( new TGFactory() , out ); tgStream.writeSong(song); out.close(); return out.toByteArray(); } public void setActiveMode(){ TuxGuitar.instance().lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); ActionLock.lock(); } public void setPasiveMode(){ ActionLock.unlock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); TuxGuitar.instance().unlock(); } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareFile.java0000644000175000017500000000156211273045343031576 0ustar julianjulianpackage org.herac.tuxguitar.community.io; public class TGShareFile { private byte[] file; private String title; private String description; private String tagkeys; public TGShareFile(){ this.title = new String(); this.description = new String(); this.tagkeys = new String(); } public byte[] getFile() { return this.file; } public void setFile(byte[] file) { this.file = file; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public String getTagkeys() { return this.tagkeys; } public void setTagkeys(String tagkeys) { this.tagkeys = tagkeys; } public String getFilename(){ return ( this.title + ".tg" ); } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongRequest.java0000644000175000017500000000477111273045343033203 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import java.io.DataOutputStream; import java.net.URL; import java.net.URLConnection; import org.herac.tuxguitar.community.auth.TGCommunityAuth; import org.herac.tuxguitar.community.utils.TGCommunityWeb; public class TGShareSongRequest { private static final String REMOTE_URL = (TGCommunityWeb.HOME_URL + "/rd.php/sharing/tuxguitar/upload.do"); private static final String EOL = "\r\n"; private static final String BOUNDARY = "*****"; private static final String BOUNDARY_SEPARATOR = "--"; private TGShareFile file; private TGCommunityAuth auth; public TGShareSongRequest(TGCommunityAuth auth , TGShareFile file){ this.auth = auth; this.file = file; } public TGShareSongResponse getResponse() throws Throwable { URL url = new URL(REMOTE_URL); URLConnection conn = url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+BOUNDARY); DataOutputStream out = new DataOutputStream( conn.getOutputStream() ); // auth out.writeBytes(BOUNDARY_SEPARATOR + BOUNDARY + EOL); out.writeBytes("Content-Disposition: form-data; name=\"auth\";" + EOL); out.writeBytes(EOL); out.writeBytes(this.auth.getAuthCode()); out.writeBytes(EOL); // title out.writeBytes(BOUNDARY_SEPARATOR + BOUNDARY + EOL); out.writeBytes("Content-Disposition: form-data; name=\"title\";" + EOL); out.writeBytes(EOL); out.writeBytes(this.file.getTitle()); out.writeBytes(EOL); // description out.writeBytes(BOUNDARY_SEPARATOR + BOUNDARY + EOL); out.writeBytes("Content-Disposition: form-data; name=\"description\";" + EOL); out.writeBytes(EOL); out.writeBytes(this.file.getDescription()); out.writeBytes(EOL); // tagkeys out.writeBytes(BOUNDARY_SEPARATOR + BOUNDARY + EOL); out.writeBytes("Content-Disposition: form-data; name=\"tagkeys\";" + EOL); out.writeBytes(EOL); out.writeBytes(this.file.getTagkeys()); out.writeBytes(EOL); // file out.writeBytes(BOUNDARY_SEPARATOR + BOUNDARY + EOL); out.writeBytes("Content-Disposition: form-data; name=\"fileName\";" + " filename=\"" + this.file.getFilename() +"\"" + EOL); out.writeBytes(EOL); out.write( this.file.getFile() ); out.writeBytes(EOL); out.writeBytes(BOUNDARY_SEPARATOR + BOUNDARY + BOUNDARY_SEPARATOR + EOL); out.flush(); out.close(); return new TGShareSongResponse( conn.getInputStream() ); } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareFileDialog.java0000644000175000017500000001532011273045343032713 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.util.TGSynchronizer; public class TGShareFileDialog { private boolean accepted; private TGShareFile file; private String errors; public TGShareFileDialog(TGShareFile file , String errors ){ this.file = file; this.errors = errors; this.accepted = false; } public void open() { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { if( !TuxGuitar.isDisposed() ){ open( TuxGuitar.instance().getShell() ); } } }); }catch(Throwable throwable){ throwable.printStackTrace(); } } protected void open(Shell shell) { this.accepted = false; final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); dialog.setText(TuxGuitar.getProperty("tuxguitar-community.share-dialog.title")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(makeGroupLayout(5)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("tuxguitar-community.share-dialog.details")); //-------USERNAME--------------------------------- Label usernameLabel = new Label(group, SWT.NULL); usernameLabel.setLayoutData(makeLabelData()); usernameLabel.setText(TuxGuitar.getProperty("tuxguitar-community.share-dialog.details.user") + ":"); final Text usernameText = new Text(group, SWT.BORDER | SWT.READ_ONLY ); usernameText.setLayoutData(makeUsernameTextData()); usernameText.setText( TGCommunitySingleton.getInstance().getAuth().getUsername() ); final Button usernameChooser = new Button(group, SWT.PUSH ); usernameChooser.setText("..."); usernameChooser.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TGCommunityAuthDialog authDialog = new TGCommunityAuthDialog(); authDialog.open( dialog ); if( authDialog.isAccepted() ){ TGCommunitySingleton.getInstance().getAuth().update(); usernameText.setText( TGCommunitySingleton.getInstance().getAuth().getUsername() ); } } } ); //-------TITLE------------------------------------ Label titleLabel = new Label(group, SWT.NULL); titleLabel.setLayoutData(makeLabelData()); titleLabel.setText(TuxGuitar.getProperty("tuxguitar-community.share-dialog.details.title") + ":"); final Text titleText = new Text(group, SWT.BORDER); titleText.setLayoutData(makeTextData()); titleText.setText( this.file.getTitle() ); //-------TAGKEYS------------------------------------ Label tagkeysLabel = new Label(group, SWT.NULL); tagkeysLabel.setLayoutData(makeLabelData()); tagkeysLabel.setText(TuxGuitar.getProperty("tuxguitar-community.share-dialog.details.tagkeys") + ":"); final Text tagkeysText = new Text(group, SWT.BORDER); tagkeysText.setLayoutData(makeTextData()); tagkeysText.setText( this.file.getTagkeys() ); //-------DESCRIPTION------------------------------------ Label descriptionLabel = new Label(group, SWT.NULL); descriptionLabel.setLayoutData(makeLabelData()); descriptionLabel.setText(TuxGuitar.getProperty("tuxguitar-community.share-dialog.details.description") + ":"); final Text descriptionText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); descriptionText.setLayoutData(makeTextAreaData()); descriptionText.setText( this.file.getDescription() ); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { update(titleText.getText(), tagkeysText.getText() , descriptionText.getText() ); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); if( this.errors != null ){ MessageDialog.errorMessage(dialog, this.errors); } DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridLayout makeGroupLayout(int spacing){ GridLayout layout = new GridLayout(3,false); layout.marginTop = spacing; layout.marginBottom = spacing; layout.marginLeft = spacing; layout.marginRight = spacing; layout.verticalSpacing = spacing; layout.horizontalSpacing = spacing; return layout; } private GridData makeLabelData(){ return new GridData(SWT.RIGHT,SWT.CENTER,false,true); } private GridData makeTextAreaData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 2 , 1); data.minimumWidth = 250; data.minimumHeight = 100; return data; } private GridData makeTextData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 2 , 1); data.minimumWidth = 250; return data; } private GridData makeUsernameTextData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 250; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void update( String title, String tagkeys, String description ){ this.file.setTitle( title ); this.file.setTagkeys( tagkeys ); this.file.setDescription( description ); this.accepted = true; } public boolean isAccepted(){ return this.accepted; } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongPlugin.java0000644000175000017500000000061311273045343033000 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class TGShareSongPlugin extends TGExporterPlugin { protected TGRawExporter getExporter() throws TGPluginException { return new TGShareSongExporter(); } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongResponse.java0000644000175000017500000000522111273045343033340 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import java.io.InputStream; import java.net.URLDecoder; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class TGShareSongResponse { private static final String TAG_STATUS = "status"; private static final String TAG_MESSAGES = "messages"; private static final String TAG_MESSAGE = "message"; private static final String ATTRIBUTE_CODE = "code"; private static final String ATTRIBUTE_VALUE = "value"; private Document document; public TGShareSongResponse( InputStream stream ) throws Throwable { this.initialize( stream ); } private void initialize(InputStream stream) throws Throwable { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); this.document = builder.parse(stream); } public String getStatus() throws Throwable { if ( this.document != null ){ return getStatus(this.document.getFirstChild()); } return null; } private String getStatus(Node rootNode) throws Throwable { NodeList rootNodes = rootNode.getChildNodes(); for (int i = 0; i < rootNodes.getLength(); i++) { Node statusNode = rootNodes.item(i); if (statusNode.getNodeName().equals( TAG_STATUS )) { return getAttributeValue( statusNode.getAttributes(), ATTRIBUTE_CODE); } } return null; } public String loadMessages(List list) throws Throwable { if ( this.document != null ){ return loadMessages(list , this.document.getFirstChild()); } return null; } private String loadMessages(List list, Node rootNode) throws Throwable { NodeList rootNodes = rootNode.getChildNodes(); for (int i = 0; i < rootNodes.getLength(); i++) { Node messagesNode = rootNodes.item(i); if (messagesNode.getNodeName().equals( TAG_MESSAGES )) { NodeList messageList = messagesNode.getChildNodes(); for (int e = 0; e < messageList.getLength(); e++) { Node messageNode = messageList.item(e); if (messageNode.getNodeName().equals( TAG_MESSAGE )) { list.add( getAttributeValue( messageNode.getAttributes(), ATTRIBUTE_VALUE) ); } } } } return null; } private String getAttributeValue( NamedNodeMap node , String attribute ){ try{ if( node != null && attribute != null ){ Node namedItem = node.getNamedItem( attribute ); if( namedItem != null ){ return URLDecoder.decode(namedItem.getNodeValue(), "UTF-8"); } } } catch ( Throwable throwable ){ throwable.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongExporter.java0000644000175000017500000000125011273045343033350 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGRawExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; public class TGShareSongExporter implements TGRawExporter { public TGShareSongExporter(){ super(); } public void exportSong(TGSong srcSong) throws TGFileFormatException { final TGSong song = srcSong.clone(new TGFactory()); new Thread( new Runnable() { public void run() { new TGShareSong().process( song ); } } ).start(); } public String getExportName() { return ("Share with the Community"); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongConnection.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongConnection.jav0000644000175000017500000000154311273045343033503 0ustar julianjulianpackage org.herac.tuxguitar.community.io; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.community.auth.TGCommunityAuth; public class TGShareSongConnection { public static final String HTTP_STATUS_OK = "200"; public static final String HTTP_STATUS_UNAUTHORIZED = "401"; public static final String HTTP_STATUS_INVALID = "400"; private String status; private TGCommunityAuth auth; public TGShareSongConnection(){ this.auth = TGCommunitySingleton.getInstance().getAuth(); this.auth.update(); } public void uploadFile( TGShareFile file , TGShareSong callback ) throws Throwable { TGShareSongRequest request = new TGShareSongRequest(this.auth, file); TGShareSongResponse response = request.getResponse(); callback.processResult(response, file); } public String getStatus(){ return this.status; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserElementImpl.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserElementImpl0000644000175000017500000000275011273045343033647 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import java.io.InputStream; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserElementImpl extends TGBrowserElement { private TGBrowserElementImpl parent; private Map properties; private String url; public TGBrowserElementImpl(String name) { super(name); this.url = null; this.properties = new HashMap(); } public TGBrowserElementImpl getParent() { return this.parent; } public void setParent(TGBrowserElementImpl parent) { this.parent = parent; } public String getUrl() { return this.url; } public void setUrl(String url) { this.url = url; } public void addProperty( String key, String value ){ this.properties.put( key, value ); } public String getProperty( String key ){ return (String)this.properties.get( key ); } public Iterator getProperties(){ return this.properties.entrySet().iterator(); } public boolean isFolder() { return (this.url == null || this.url.length() == 0 ); } public InputStream getInputStream() throws TGBrowserException { try { if( ! this.isFolder() ){ URL url = new URL( this.url ); InputStream stream = url.openStream(); return stream; } } catch ( Throwable throwable ){ throw new TGBrowserException( throwable ); } return null; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserConnection.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserConnection.0000644000175000017500000000276411273045343033616 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import java.util.List; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.community.auth.TGCommunityAuth; import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; public class TGBrowserConnection { private static final String HTTP_STATUS_OK = "200"; private static final String HTTP_STATUS_UNAUTHORIZED = "401"; private TGCommunityAuth auth; public TGBrowserConnection(){ this.auth = TGCommunitySingleton.getInstance().getAuth(); this.auth.update(); } public void getElements( List elements, TGBrowserElementImpl element ) throws TGBrowserException{ try { TGBrowserRequest request = new TGBrowserRequest(this.auth, element); TGBrowserResponse response = request.getResponse(); String status = response.getStatus(); if( status != null && status.equals(HTTP_STATUS_OK) ){ response.loadElements( elements ); }else if( status != null && status.equals(HTTP_STATUS_UNAUTHORIZED) ){ TGCommunityAuthDialog authDialog = new TGCommunityAuthDialog(); if( !TuxGuitar.instance().getBrowser().isDisposed() ){ authDialog.open( TuxGuitar.instance().getBrowser().getShell() ); if( authDialog.isAccepted() ){ this.auth.update(); this.getElements(elements, element ); } } } }catch(Throwable throwable){ throw new TGBrowserException(throwable); } } } tuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserImpl.java0000644000175000017500000000255311273045343033256 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserImpl extends TGBrowser { private TGBrowserConnection connection; private TGBrowserElementImpl element; public TGBrowserImpl(TGBrowserDataImpl data){ this.element = null; this.connection = new TGBrowserConnection(); } public void open() throws TGBrowserException { // TODO Auto-generated method stub } public void close() throws TGBrowserException { // TODO Auto-generated method stub } public void cdRoot() throws TGBrowserException { this.element = null; } public void cdUp() throws TGBrowserException { if( this.element != null ){ this.element = this.element.getParent(); } } public void cdElement(TGBrowserElement element) throws TGBrowserException { if( element instanceof TGBrowserElementImpl ){ TGBrowserElementImpl nextElement = (TGBrowserElementImpl)element; nextElement.setParent( this.element ); this.element = nextElement; } } public List listElements() throws TGBrowserException { List elements = new ArrayList(); this.connection.getElements(elements , this.element ); return elements; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserFactoryImpl.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserFactoryImpl0000644000175000017500000000172211273045343033663 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public class TGBrowserFactoryImpl implements TGBrowserFactory { private TGBrowserDataImpl data; public TGBrowserFactoryImpl(){ this.data = new TGBrowserDataImpl(); } public String getName() { return "Community Files"; } public String getType() { return "community"; } public TGBrowser newTGBrowser(TGBrowserData data) { return new TGBrowserImpl( (TGBrowserDataImpl)data ); } public TGBrowserData parseData(String string) { return this.data; } public TGBrowserData dataDialog(Shell parent) { TGBrowserAuthDialog authDialog = new TGBrowserAuthDialog(); authDialog.open( parent ); if( authDialog.isAccepted() ){ return this.data; } return null; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserRequest.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserRequest.jav0000644000175000017500000000336611273045343033647 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.Iterator; import java.util.Map; import org.herac.tuxguitar.community.auth.TGCommunityAuth; import org.herac.tuxguitar.community.utils.TGCommunityWeb; public class TGBrowserRequest { private static final String REMOTE_URL = (TGCommunityWeb.HOME_URL + "/rd.php/sharing/tuxguitar/browser.do"); private String request; public TGBrowserRequest(TGCommunityAuth auth, TGBrowserElementImpl element) throws Throwable { this.initialize(auth, element); } public TGBrowserRequest(TGCommunityAuth auth) throws Throwable { this(auth , null); } private void initialize( TGCommunityAuth auth, TGBrowserElementImpl element ) throws Throwable { this.request = new String(); this.request += URLEncoder.encode( "auth" , "UTF-8" ); this.request += ("="); this.request += URLEncoder.encode( auth.getAuthCode() , "UTF-8" ); if( element != null ){ Iterator it = element.getProperties(); while( it.hasNext() ){ Map.Entry property = (Map.Entry) it.next(); this.request += ("&"); this.request += URLEncoder.encode( (String)property.getKey() , "UTF-8" ); this.request += ("="); this.request += URLEncoder.encode( (String)property.getValue() , "UTF-8" ); } } } public TGBrowserResponse getResponse() throws Throwable { URL url = new URL(REMOTE_URL); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter outputStream = new OutputStreamWriter(conn.getOutputStream()); outputStream.write(this.request); outputStream.flush(); outputStream.close(); return new TGBrowserResponse( conn.getInputStream() ) ; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserResponse.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserResponse.ja0000644000175000017500000001025511273045343033622 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import java.io.InputStream; import java.net.URLDecoder; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class TGBrowserResponse { private static final String TAG_STATUS = "status"; private static final String TAG_ELEMENTS = "elements"; private static final String TAG_ELEMENT = "element"; private static final String TAG_SONG = "song"; private static final String TAG_PARAMETERS = "parameters"; private static final String TAG_PARAMETER = "parameter"; private static final String ATTRIBUTE_CODE = "code"; private static final String ATTRIBUTE_NAME = "name"; private static final String ATTRIBUTE_URL = "url"; private static final String ATTRIBUTE_KEY = "key"; private static final String ATTRIBUTE_VALUE = "value"; private Document document; public TGBrowserResponse( InputStream stream ) throws Throwable { this.initialize( stream ); } private void initialize(InputStream stream) throws Throwable { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); this.document = builder.parse(stream); } public String getStatus() { if ( this.document != null ){ return getStatus(this.document.getFirstChild()); } return null; } private String getStatus(Node rootNode){ NodeList rootNodes = rootNode.getChildNodes(); for (int i = 0; i < rootNodes.getLength(); i++) { Node statusNode = rootNodes.item(i); if (statusNode.getNodeName().equals( TAG_STATUS )) { return getAttributeValue( statusNode.getAttributes(), ATTRIBUTE_CODE); } } return null; } public void loadElements(List list){ if ( this.document != null ){ loadElements(list,this.document.getFirstChild()); } } private void loadElements(List list,Node rootNode){ NodeList rootNodes = rootNode.getChildNodes(); for (int i = 0; i < rootNodes.getLength(); i++) { Node elementsNode = rootNodes.item(i); if (elementsNode.getNodeName().equals( TAG_ELEMENTS )) { NodeList elementList = elementsNode.getChildNodes(); for (int e = 0; e < elementList.getLength(); e++) { Node elementNode = elementList.item(e); String nodeName = elementNode.getNodeName(); if (nodeName.equals( TAG_ELEMENT )) { NamedNodeMap params = elementNode.getAttributes(); String name = getAttributeValue( params, ATTRIBUTE_NAME); if (name != null && name.trim().length() > 0 ){ TGBrowserElementImpl element = new TGBrowserElementImpl( name ); NodeList nodeChildren = elementNode.getChildNodes(); for (int c = 0; c < nodeChildren.getLength(); c++) { Node child = nodeChildren.item( c ); if( child.getNodeName().equals( TAG_SONG ) ){ element.setUrl( getAttributeValue( child.getAttributes() , ATTRIBUTE_URL) ); }else if( child.getNodeName().equals( TAG_PARAMETERS ) ){ NodeList parameters = child.getChildNodes(); for (int p = 0; p < parameters.getLength(); p++) { Node parameter = parameters.item( p ); if( parameter.getNodeName().equals( TAG_PARAMETER ) ){ NamedNodeMap parameterAttributes = parameter.getAttributes(); String key = getAttributeValue( parameterAttributes, ATTRIBUTE_KEY); String value = getAttributeValue( parameterAttributes, ATTRIBUTE_VALUE); if (key != null && value != null && key.trim().length() > 0 && value.trim().length() > 0 ){ element.addProperty(key, value); } } } } } list.add( element ); } } } } } } private String getAttributeValue( NamedNodeMap node , String attribute ){ try{ if( node != null && attribute != null ){ Node namedItem = node.getNamedItem( attribute ); if( namedItem != null ){ return URLDecoder.decode(namedItem.getNodeValue(), "UTF-8"); } } } catch ( Throwable throwable ){ throwable.printStackTrace(); } return null; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserPluginImpl.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserPluginImpl.0000644000175000017500000000064711273045343033575 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGBrowserPlugin; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public class TGBrowserPluginImpl extends TGBrowserPlugin { protected TGBrowserFactory getFactory() throws TGPluginException { return new TGBrowserFactoryImpl(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserDataImpl.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserDataImpl.ja0000644000175000017500000000052111273045343033512 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; public class TGBrowserDataImpl implements TGBrowserData { public TGBrowserDataImpl(){ super(); } public String getTitle() { return "TuxGuitar Community"; } public String toString(){ return getTitle(); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserAuthDialog.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserAuthDialog.0000644000175000017500000001043611273045343033533 0ustar julianjulianpackage org.herac.tuxguitar.community.browser; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.community.TGCommunitySingleton; import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; public class TGBrowserAuthDialog { private boolean accepted; public TGBrowserAuthDialog(){ this.accepted = false; } protected void open(Shell shell) { this.accepted = false; final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); dialog.setText(TuxGuitar.getProperty("tuxguitar-community.browser-dialog.title")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(makeGroupLayout(5)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("tuxguitar-community.browser-dialog.account")); //-------USERNAME--------------------------------- Label usernameLabel = new Label(group, SWT.NULL); usernameLabel.setLayoutData(makeLabelData()); usernameLabel.setText(TuxGuitar.getProperty("tuxguitar-community.browser-dialog.account.user") + ":"); final Text usernameText = new Text(group, SWT.BORDER | SWT.READ_ONLY ); usernameText.setLayoutData(makeUsernameTextData()); usernameText.setText( TGCommunitySingleton.getInstance().getAuth().getUsername() ); final Button usernameChooser = new Button(group, SWT.PUSH ); usernameChooser.setText("..."); usernameChooser.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TGCommunityAuthDialog authDialog = new TGCommunityAuthDialog(); authDialog.open( dialog ); if( authDialog.isAccepted() ){ TGCommunitySingleton.getInstance().getAuth().update(); usernameText.setText( TGCommunitySingleton.getInstance().getAuth().getUsername() ); } } } ); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setAccepted(); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridLayout makeGroupLayout(int spacing){ GridLayout layout = new GridLayout(3,false); layout.marginTop = spacing; layout.marginBottom = spacing; layout.marginLeft = spacing; layout.marginRight = spacing; layout.verticalSpacing = spacing; layout.horizontalSpacing = spacing; return layout; } private GridData makeLabelData(){ return new GridData(SWT.RIGHT,SWT.CENTER,false,true); } private GridData makeUsernameTextData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 250; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void setAccepted(){ this.accepted = true; } public boolean isAccepted(){ return this.accepted; } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGPluginListImpl.java0000644000175000017500000000374511273045344030503 0ustar julianjulianpackage org.herac.tuxguitar.io.tg; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGInputStreamPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.io.base.TGRawExporter; public class TGPluginListImpl extends TGPluginList{ protected List getPlugins() { List plugins = new ArrayList(); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new org.herac.tuxguitar.io.tg.v11.TGInputStream(); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new org.herac.tuxguitar.io.tg.v10.TGInputStream(); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new org.herac.tuxguitar.io.tg.v09.TGInputStream(); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new org.herac.tuxguitar.io.tg.v08.TGInputStream(); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new org.herac.tuxguitar.io.tg.v07.TGInputStream(); } }); plugins.add(new TGExporterPlugin() { protected TGRawExporter getExporter() { return new org.herac.tuxguitar.io.tg.v11.TGOutputStream(); } }); plugins.add(new TGExporterPlugin() { protected TGRawExporter getExporter() { return new org.herac.tuxguitar.io.tg.v10.TGOutputStream(); } }); return plugins; } public String getAuthor() { return "Julian Casadesus "; } public String getName() { return "TuxGuitar file format compatibility"; } public String getDescription() { return "This plugin, provides support for other tuxguitar file format versions."; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettingsDialog.javatuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettingsDialog.jav0000644000175000017500000001466411273045345033421 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import java.util.ArrayList; import java.util.List; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; public class MidiToAudioSettingsDialog { protected boolean success; public MidiToAudioSettingsDialog(){ super(); } public boolean open(final MidiToAudioSettings settings) { this.success = false; final List formats = getAvailableFormats(); final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText("Options"); //------------------TRACK SELECTION------------------ Group trackGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN); trackGroup.setLayout(new GridLayout(2,false)); trackGroup.setLayoutData(getGroupData()); trackGroup.setText("Audio Format"); //------------------TRANSPOSE---------------------- Label eLabel = new Label(trackGroup, SWT.NONE); eLabel.setText("File Encoding:"); eLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); final Combo eCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY); eCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); Label tLabel = new Label(trackGroup, SWT.NONE); tLabel.setText("File Type:"); tLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); final Combo tCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY); tCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); int eSelectionIndex = 0; for( int i = 0 ; i < formats.size() ; i ++ ) { MidiToAudioFormat format = (MidiToAudioFormat)formats.get(i); eCombo.add( format.getFormat().getEncoding().toString() ); if( isSameEncoding(settings.getFormat(), format.getFormat() )){ eSelectionIndex = i; } } if( !formats.isEmpty() ){ eCombo.select( eSelectionIndex ); updateTypesCombo( settings, formats, eCombo, tCombo ); } eCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateTypesCombo( settings, formats, eCombo, tCombo ); } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int tIndex = tCombo.getSelectionIndex(); int eIndex = eCombo.getSelectionIndex(); if( eIndex >= 0 && eIndex < formats.size() ){ MidiToAudioFormat format = (MidiToAudioFormat)formats.get( eIndex ); if( tIndex >= 0 && tIndex < format.getTypes().length ){ settings.setType( format.getTypes()[tIndex] ); settings.setFormat( format.getFormat() ); MidiToAudioSettingsDialog.this.success = true; } } dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.success; } private GridData getGroupData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 300; return data; } private void updateTypesCombo( MidiToAudioSettings settings, List encodings, Combo eCombo , Combo tCombo ){ tCombo.removeAll(); int eIndex = eCombo.getSelectionIndex(); if( eIndex >= 0 && eIndex < encodings.size() ){ MidiToAudioFormat encoding = (MidiToAudioFormat)encodings.get( eIndex ); AudioFileFormat.Type[] types = encoding.getTypes(); int tSelectionIndex = 0; for( int tIndex = 0 ; tIndex < types.length ; tIndex ++ ) { tCombo.add( types[ tIndex ] + " (*." + types[ tIndex ].getExtension() + ")"); if( settings.getType() != null && settings.getType().equals( types[ tIndex] )){ tSelectionIndex = tIndex; } } tCombo.select( tSelectionIndex ); } } public List getAvailableFormats(){ List list = new ArrayList(); AudioFormat srcFormat = MidiToAudioSettings.DEFAULT_FORMAT; AudioFormat.Encoding[] encodings = AudioSystem.getTargetEncodings(srcFormat); for( int i = 0 ; i < encodings.length ; i ++ ){ AudioFormat dstFormat = new AudioFormat(encodings[i],srcFormat.getSampleRate(),srcFormat.getSampleSizeInBits(),srcFormat.getChannels(),srcFormat.getFrameSize(),srcFormat.getFrameRate(),srcFormat.isBigEndian()); AudioInputStream dstStream = new AudioInputStream(null, dstFormat, 0); AudioFileFormat.Type[] dstTypes = AudioSystem.getAudioFileTypes(dstStream); if( dstTypes.length > 0 ){ list.add( new MidiToAudioFormat( dstFormat , dstTypes )); } } return list; } public boolean isSameEncoding( AudioFormat f1, AudioFormat f2 ){ if( f1 == null || f2 == null || f1.getEncoding() == null || f2.getEncoding() == null ){ return false; } return ( f1.getEncoding().toString().equals( f2.getEncoding().toString() ) ); } private class MidiToAudioFormat { private AudioFormat format; private AudioFileFormat.Type[] types; public MidiToAudioFormat(AudioFormat format, AudioFileFormat.Type[] types){ this.format = format; this.types = types; } public AudioFormat getFormat() { return this.format; } public AudioFileFormat.Type[] getTypes() { return this.types; } } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiSequenceHandlerImpl.java0000644000175000017500000000331211273045345033231 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import java.util.ArrayList; import java.util.List; import javax.sound.midi.MidiEvent; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiSequenceHandlerImpl extends MidiSequenceHandler{ private List events; public MidiSequenceHandlerImpl(int tracks ){ super(tracks); this.events = new ArrayList(); } public void addControlChange(long tick,int track,int channel, int controller, int value) { this.events.add(new MidiEvent(MidiMessageUtils.controlChange(channel, controller, value), tick )); } public void addNoteOff(long tick,int track,int channel, int note, int velocity) { this.events.add(new MidiEvent(MidiMessageUtils.noteOff(channel, note, velocity), tick )); } public void addNoteOn(long tick,int track,int channel, int note, int velocity) { this.events.add(new MidiEvent(MidiMessageUtils.noteOn(channel, note, velocity), tick )); } public void addPitchBend(long tick,int track,int channel, int value) { this.events.add(new MidiEvent(MidiMessageUtils.pitchBend(channel, value), tick )); } public void addProgramChange(long tick,int track,int channel, int instrument) { this.events.add(new MidiEvent(MidiMessageUtils.programChange(channel, instrument), tick )); } public void addTempoInUSQ(long tick,int track,int usq) { this.events.add(new MidiEvent(MidiMessageUtils.tempoInUSQ(usq), tick )); } public void addTimeSignature(long tick,int track,TGTimeSignature ts) { this.events.add(new MidiEvent(MidiMessageUtils.timeSignature(ts), tick )); } public void notifyFinish() { // not implemented } public List getEvents(){ return this.events; } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioExporter.java0000644000175000017500000000342411273045345032442 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.player.base.MidiSequenceParser; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGSong; public class MidiToAudioExporter implements TGLocalFileExporter{ private MidiToAudioSettings settings; private OutputStream stream; public MidiToAudioExporter(){ this.settings = new MidiToAudioSettings(); this.settings.setDefaults(); } public String getExportName() { return "Audio File"; } public TGFileFormat getFileFormat() { return new TGFileFormat(this.settings.getType().toString(), ("*." + this.settings.getType().getExtension()) ); } public boolean configure(boolean setDefaults) { if( !setDefaults ){ return new MidiToAudioSettingsDialog().open( this.settings ); } this.settings.setDefaults(); return true; } public void init(TGFactory factory,OutputStream stream){ this.stream = stream; } public void exportSong(TGSong song) throws TGFileFormatException { try{ if( this.stream != null ){ TGSongManager manager = new TGSongManager(); manager.setSong(song); MidiSequenceParser parser = new MidiSequenceParser(manager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS,100,0); MidiSequenceHandlerImpl sequence = new MidiSequenceHandlerImpl( (song.countTracks() + 1) ); parser.parse(sequence); MidiToAudioWriter.write(this.stream, sequence.getEvents(), this.settings ); } }catch(Throwable throwable){ throw new TGFileFormatException( throwable.getMessage() , throwable ); } } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioWriter.java0000644000175000017500000000453511273045345032112 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import java.io.OutputStream; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiEvent; import javax.sound.midi.MidiMessage; import javax.sound.midi.Receiver; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import org.herac.tuxguitar.song.models.TGDuration; public class MidiToAudioWriter { public static void write(OutputStream out, List events, MidiToAudioSettings settings) throws Throwable { MidiToAudioSynth.instance().openSynth(); int usqTempo = 60000000 / 120; long previousTick = 0; long timePosition = 0; MidiToAudioWriter.sort(events); Receiver receiver = MidiToAudioSynth.instance().getReceiver(); AudioInputStream stream = MidiToAudioSynth.instance().getStream(); Iterator it = events.iterator(); while(it.hasNext()){ MidiEvent event = (MidiEvent)it.next(); MidiMessage msg = event.getMessage(); timePosition += ( (event.getTick() - previousTick) * usqTempo) / TGDuration.QUARTER_TIME; if (msg instanceof MetaMessage) { if (((MetaMessage) msg).getType() == 0x51) { byte[] data = ((MetaMessage) msg).getData(); usqTempo = ((data[0] & 0xff) << 16) | ((data[1] & 0xff) << 8) | (data[2] & 0xff); } } else { receiver.send(msg, timePosition); } previousTick = event.getTick(); } long duration = (long) (stream.getFormat().getFrameRate() * ( (timePosition / 1000000.0) )); AudioInputStream srcStream = new AudioInputStream(stream, stream.getFormat(), duration ); AudioInputStream dstStream = AudioSystem.getAudioInputStream(settings.getFormat(), srcStream ); AudioSystem.write(new AudioInputStream(dstStream, dstStream.getFormat(), duration ), settings.getType(), out); dstStream.close(); srcStream.close(); MidiToAudioSynth.instance().closeSynth(); } private static void sort(List events){ Collections.sort(events, new Comparator() { public int compare(Object o1, Object o2) { if( o1 instanceof MidiEvent && o2 instanceof MidiEvent ){ MidiEvent e1 = (MidiEvent)o1; MidiEvent e2 = (MidiEvent)o2; if(e1.getTick() > e2.getTick()){ return 1; } else if(e1.getTick() < e2.getTick()){ return -1; } } return 0; } }); } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSynth.java0000644000175000017500000000316611273045345031742 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import javax.sound.midi.Receiver; import javax.sound.midi.Synthesizer; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; public class MidiToAudioSynth { public static final AudioFormat SRC_FORMAT = MidiToAudioSettings.DEFAULT_FORMAT; private static MidiToAudioSynth instance; private Synthesizer synthesizer; private AudioInputStream stream; private Receiver receiver; private MidiToAudioSynth(){ this.stream = null; this.receiver = null; this.synthesizer = null; } public static MidiToAudioSynth instance(){ if( instance == null ){ instance = new MidiToAudioSynth(); } return instance; } public Receiver getReceiver(){ return this.receiver; } public AudioInputStream getStream(){ return this.stream; } public void openSynth() throws Throwable { if( this.synthesizer == null || !this.synthesizer.isOpen() ){ this.synthesizer = new com.sun.media.sound.SoftSynthesizer(); this.receiver = this.synthesizer.getReceiver(); this.stream = ((com.sun.media.sound.AudioSynthesizer)this.synthesizer).openStream(SRC_FORMAT, null); } } public void closeSynth() throws Throwable { if( this.receiver != null ){ this.receiver.close(); } if( this.synthesizer != null && this.synthesizer.isOpen() ){ this.synthesizer.close(); } this.stream = null; this.receiver = null; this.synthesizer = null; } public boolean isAvailable(){ try { Class.forName("com.sun.media.sound.SoftSynthesizer", false, getClass().getClassLoader() ); return true; } catch (Throwable throwable) { return false; } } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettings.java0000644000175000017500000000147011273045345032431 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; public class MidiToAudioSettings { public static final AudioFormat DEFAULT_FORMAT = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false); public static final AudioFileFormat.Type DEFAULT_TYPE = AudioFileFormat.Type.WAVE; private AudioFileFormat.Type type; private AudioFormat format; public AudioFileFormat.Type getType() { return this.type; } public void setType(AudioFileFormat.Type type) { this.type = type; } public AudioFormat getFormat() { return this.format; } public void setFormat(AudioFormat format) { this.format = format; } public void setDefaults(){ this.setType( DEFAULT_TYPE ); this.setFormat( DEFAULT_FORMAT ); } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiMessageUtils.java0000644000175000017500000000640611273045345031755 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiMessage; import javax.sound.midi.ShortMessage; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiMessageUtils { public static final byte TICK_MOVE = 0x01; private static int fixValue(int value){ int fixedValue = value; fixedValue = Math.min(fixedValue,127); fixedValue = Math.max(fixedValue,0); return fixedValue; } private static int fixChannel(int channel){ int fixedChannel = channel; fixedChannel = Math.min(fixedChannel,15); fixedChannel = Math.max(fixedChannel,0); return fixedChannel; } public static MidiMessage noteOn(int channel,int note,int velocity){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.NOTE_ON, fixChannel(channel), fixValue(note), fixValue(velocity)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage noteOff(int channel,int note,int velocity){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.NOTE_OFF, fixChannel(channel), fixValue(note), fixValue(velocity)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage controlChange(int channel,int controller,int value){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.CONTROL_CHANGE,fixChannel(channel),fixValue(controller), fixValue(value)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage programChange(int channel,int instrument){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.PROGRAM_CHANGE, fixChannel(channel), fixValue(instrument), 0); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage pitchBend(int channel,int value){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.PITCH_BEND, fixChannel(channel), 0, fixValue(value)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage systemReset(){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.SYSTEM_RESET); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage tempoInUSQ(int usq){ try { MetaMessage message = new MetaMessage(); message.setMessage(0x51, new byte[]{ (byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) }, 3); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage timeSignature(TGTimeSignature ts){ try { MetaMessage message = new MetaMessage(); message.setMessage(0x58, new byte[]{ (byte)ts.getNumerator(),(byte)ts.getDenominator().getIndex(),(byte)(96 / ts.getDenominator().getValue()),8 }, 4); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioPlugin.java0000644000175000017500000000302311273045345032063 0ustar julianjulianpackage org.herac.tuxguitar.io.gervill; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class MidiToAudioPlugin extends TGExporterPlugin{ private boolean available; public MidiToAudioPlugin(){ this.available = MidiToAudioSynth.instance().isAvailable(); } public void init() throws TGPluginException { if( this.available ){ super.init(); } } public void close() throws TGPluginException { if( this.available ){ super.close(); } } public void setEnabled( boolean enabled ) throws TGPluginException { if( this.available ){ super.setEnabled( enabled ); } } protected TGRawExporter getExporter() throws TGPluginException { if( this.available ){ return new MidiToAudioExporter(); } return null; } public String getVersion() { return "1.1"; } public String getAuthor() { return "Julian Casadesus "; } public String getName() { return "Gervill Plugin"; } public String getDescription() { String description = new String(); description += ("The purpose of this plugin is to add gervill support to tuxguitar.\n"); description += ("The current version of this plugin includes \"Export to Audio\" feature.\n"); description += ("See more about Gervill: https://gervill.dev.java.net/\n\n"); description += ("This plugin will only work if gervill synthesizer is installed in your JVM"); return description; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStream.java0000644000175000017500000000541111273045345030043 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGOutputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class GTPOutputStream extends GTPFileFormat implements TGOutputStreamBase{ private OutputStream outputStream; public GTPOutputStream(GTPSettings settings){ super(settings); } public void init(TGFactory factory,OutputStream stream) { super.init(factory); this.outputStream = stream; } protected void skipBytes(int count) throws IOException { for(int i = 0;i < count;i++){ this.outputStream.write(0); } } protected void writeByte(byte v) throws IOException { this.outputStream.write(v); } protected void writeUnsignedByte(int v) throws IOException { this.outputStream.write(v); } protected void writeBytes(byte[] v) throws IOException { this.outputStream.write(v); } protected void writeBoolean(boolean v) throws IOException { this.outputStream.write(v ? 1 : 0); } protected void writeInt(int v) throws IOException { byte[] bytes = { (byte)(v & 0x00FF),(byte)((v >> 8) & 0x000000FF),(byte) ((v >> 16) & 0x000000FF),(byte)((v >> 24) & 0x000000FF) }; this.outputStream.write(bytes); } protected void writeString(byte[] bytes, int maximumLength) throws IOException { int length = (maximumLength == 0 || maximumLength > bytes.length ? bytes.length : maximumLength ); for(int i = 0 ; i < length; i ++){ this.outputStream.write( bytes[ i ] ); } } protected void writeStringInteger(String string, String charset) throws IOException { byte[] bytes = string.getBytes(charset); this.writeInt( bytes.length ); this.writeString( bytes , 0 ); } protected void writeStringInteger(String string) throws IOException { this.writeStringInteger(string, getSettings().getCharset()); } protected void writeStringByte(String string, int size, String charset) throws IOException { byte[] bytes = string.getBytes(charset); this.writeByte( (byte)( size == 0 || size > bytes.length ? bytes.length : size )); this.writeString( bytes , size ); this.skipBytes( size - bytes.length ); } protected void writeStringByte(String string, int size) throws IOException { this.writeStringByte(string, size, getSettings().getCharset()); } protected void writeStringByteSizeOfInteger(String string, String charset) throws IOException { byte[] bytes = string.getBytes(charset); this.writeInt( (bytes.length + 1) ); this.writeStringByte(string, bytes.length, charset); } protected void writeStringByteSizeOfInteger(String string) throws IOException { writeStringByteSizeOfInteger(string, getSettings().getCharset()); } protected void close() throws IOException{ this.outputStream.flush(); this.outputStream.close(); } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStream.java0000644000175000017500000005305011273045345027605 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; public class GP5InputStream extends GTPInputStream { private static final String supportedVersions[] = { "FICHIER GUITAR PRO v5.00","FICHIER GUITAR PRO v5.10"}; private static final float GP_BEND_SEMITONE = 25f; private static final float GP_BEND_POSITION = 60f; public GP5InputStream(GTPSettings settings) { super(settings, supportedVersions); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 5","*.gp5"); } public TGSong readSong() throws IOException, GTPFormatException { readVersion(); if (!isSupportedVersion(getVersion())) { this.close(); throw new GTPFormatException("Unsupported Version"); } TGSong song = getFactory().newSong(); readInfo(song); //lyrics int lyricTrack = readInt(); TGLyric lyric = readLyrics(); readPageSetup(); int tempoValue = readInt(); if(getVersionIndex() > 0){ skip(1); } readInt(); //key readByte(); //octave List channels = readChannels(); skip(42); int measures = readInt(); int tracks = readInt(); readMeasureHeaders(song, measures); readTracks(song, tracks, channels, lyric, lyricTrack); readMeasures(song, measures, tracks, tempoValue); this.close(); return song; } private void readInfo(TGSong song) throws IOException{ song.setName(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); song.setArtist(readStringByteSizeOfInteger()); song.setAlbum(readStringByteSizeOfInteger()); song.setAuthor(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); song.setCopyright(readStringByteSizeOfInteger()); song.setWriter(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); int comments = readInt(); for (int i = 0; i < comments; i++) { song.setComments( song.getComments() + readStringByteSizeOfInteger() ); } } private void readPageSetup() throws IOException{ skip( (getVersionIndex() > 0 ?49 : 30 ) ); for (int i = 0; i < 11; i++) { skip(4); readStringByte(0); } } private void readMeasureHeaders(TGSong song, int count) throws IOException{ TGTimeSignature timeSignature = getFactory().newTimeSignature(); for (int i = 0; i < count; i++) { if(i > 0 ){ skip(1); } song.addMeasureHeader(readMeasureHeader(i,timeSignature)); } } private void readTracks(TGSong song, int count, List channels,TGLyric lyric, int lyricTrack) throws IOException{ for (int number = 1; number <= count; number++) { song.addTrack(readTrack(number, channels,(number == lyricTrack)?lyric:getFactory().newLyric())); } skip( (getVersionIndex() == 0 ? 2 : 1) ); } private void readMeasures(TGSong song, int measures, int tracks, int tempoValue) throws IOException{ TGTempo tempo = getFactory().newTempo(); tempo.setValue(tempoValue); long start = TGDuration.QUARTER_TIME; for (int i = 0; i < measures; i++) { TGMeasureHeader header = song.getMeasureHeader(i); header.setStart(start); for (int j = 0; j < tracks; j++) { TGTrack track = song.getTrack(j); TGMeasure measure = getFactory().newMeasure(header); track.addMeasure(measure); readMeasure(measure, track, tempo); skip(1); } tempo.copy(header.getTempo()); start += header.getLength(); } } private TGLyric readLyrics() throws IOException{ TGLyric lyric = getFactory().newLyric(); lyric.setFrom(readInt()); lyric.setLyrics(readStringInteger()); for (int i = 0; i < 4; i++) { readInt(); readStringInteger(); } return lyric; } private long readBeat(long start, TGMeasure measure, TGTrack track, TGTempo tempo, int voiceIndex) throws IOException{ int flags = readUnsignedByte(); TGBeat beat = getBeat(measure, start); TGVoice voice = beat.getVoice(voiceIndex); if((flags & 0x40) != 0){ int beatType = readUnsignedByte(); voice.setEmpty( ( beatType & 0x02 ) == 0 ); } TGDuration duration = readDuration(flags); TGNoteEffect effect = getFactory().newEffect(); if ((flags & 0x02) != 0) { readChord(track.stringCount(), beat); } if ((flags & 0x04) != 0) { readText(beat); } if ((flags & 0x08) != 0) { readBeatEffects(beat, effect); } if ((flags & 0x10) != 0) { readMixChange(tempo); } int stringFlags = readUnsignedByte(); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 && (6 - i) < track.stringCount()) { TGString string = track.getString( (6 - i) + 1 ).clone(getFactory()); TGNote note = readNote(string,track,effect.clone(getFactory())); voice.addNote(note); } duration.copy(voice.getDuration()); } skip(1); int read = readByte(); //if (read == 8 || read == 10 || read == 24 ) { if( (read & 0x08) != 0 ){ skip(1); } return (!voice.isEmpty() ? duration.getTime() : 0 ); } private List readChannels() throws IOException{ List channels = new ArrayList(); for (int i = 0; i < 64; i++) { TGChannel channel = getFactory().newChannel(); channel.setChannel((short)i); channel.setEffectChannel((short)i); channel.setInstrument((short)readInt()); channel.setVolume(toChannelShort(readByte())); channel.setBalance(toChannelShort(readByte())); channel.setChorus(toChannelShort(readByte())); channel.setReverb(toChannelShort(readByte())); channel.setPhaser(toChannelShort(readByte())); channel.setTremolo(toChannelShort(readByte())); channels.add(channel); skip(2); } return channels; } private void readText(TGBeat beat) throws IOException{ TGText text = getFactory().newText(); text.setValue(readStringByteSizeOfInteger()); beat.setText(text); } private TGDuration readDuration(int flags) throws IOException { TGDuration duration = getFactory().newDuration(); duration.setValue( (int) (Math.pow( 2 , (readByte() + 4) ) / 4 ) ); duration.setDotted(((flags & 0x01) != 0)); if ((flags & 0x20) != 0) { int divisionType = readInt(); switch (divisionType) { case 3: duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); break; case 5: duration.getDivision().setEnters(5); duration.getDivision().setTimes(4); break; case 6: duration.getDivision().setEnters(6); duration.getDivision().setTimes(4); break; case 7: duration.getDivision().setEnters(7); duration.getDivision().setTimes(4); break; case 9: duration.getDivision().setEnters(9); duration.getDivision().setTimes(8); break; case 10: duration.getDivision().setEnters(10); duration.getDivision().setTimes(8); break; case 11: duration.getDivision().setEnters(11); duration.getDivision().setTimes(8); break; case 12: duration.getDivision().setEnters(12); duration.getDivision().setTimes(8); break; } } return duration; } private int getTiedNoteValue(int string, TGTrack track) { int measureCount = track.countMeasures(); if (measureCount > 0) { for (int m = measureCount - 1; m >= 0; m--) { TGMeasure measure = track.getMeasure( m ); for (int b = measure.countBeats() - 1; b >= 0; b--) { TGBeat beat = measure.getBeat( b ); for (int v = 0; v < beat.countVoices(); v ++) { TGVoice voice = beat.getVoice(v); if(!voice.isEmpty()){ for (int n = 0; n < voice.countNotes(); n ++) { TGNote note = voice.getNote( n ); if (note.getString() == string) { return note.getValue(); } } } } } } } return -1; } private void readColor(TGColor color) throws IOException { color.setR(readUnsignedByte()); color.setG(readUnsignedByte()); color.setB(readUnsignedByte()); skip(1); } private TGMarker readMarker(int measure) throws IOException { TGMarker marker = getFactory().newMarker(); marker.setMeasure(measure); marker.setTitle(readStringByteSizeOfInteger()); readColor(marker.getColor()); return marker; } private TGMeasureHeader readMeasureHeader(int index,TGTimeSignature timeSignature) throws IOException { int flags = readUnsignedByte(); TGMeasureHeader header = getFactory().newHeader(); header.setNumber( (index + 1) ); header.setStart(0); header.getTempo().setValue(120); header.setRepeatOpen( ((flags & 0x04) != 0) ); if ((flags & 0x01) != 0) { timeSignature.setNumerator(readByte()); } if ((flags & 0x02) != 0) { timeSignature.getDenominator().setValue(readByte()); } timeSignature.copy(header.getTimeSignature()); if ((flags & 0x08) != 0) { header.setRepeatClose( ( (readByte() & 0xff) - 1) ); } if ((flags & 0x20) != 0) { header.setMarker(readMarker(header.getNumber())); } if ((flags & 0x10) != 0) { header.setRepeatAlternative(readUnsignedByte()); } if ((flags & 0x40) != 0) { readByte(); readByte(); } if ((flags & 0x01) != 0) { skip(4); } if ((flags & 0x10) == 0) { skip(1); } int tripletFeel = readByte(); if(tripletFeel == 1){ header.setTripletFeel(TGMeasureHeader.TRIPLET_FEEL_EIGHTH); }else if(tripletFeel == 2){ header.setTripletFeel(TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH); }else{ header.setTripletFeel(TGMeasureHeader.TRIPLET_FEEL_NONE); } return header; } private void readMeasure(TGMeasure measure, TGTrack track, TGTempo tempo) throws IOException { for( int voice = 0 ; voice < 2 ; voice ++ ){ long start = measure.getStart(); int beats = readInt(); for (int i = 0; i < beats; i++) { start += readBeat(start, measure, track, tempo, voice); } } List emptyBeats = new ArrayList(); for( int i = 0 ; i < measure.countBeats() ; i ++ ){ TGBeat beat = measure.getBeat( i ); boolean empty = true; for( int v = 0 ; v < beat.countVoices() ; v ++ ){ if( !beat.getVoice( v ).isEmpty() ){ empty = false; } } if( empty ){ emptyBeats.add( beat ); } } Iterator it = emptyBeats.iterator(); while( it.hasNext() ){ TGBeat beat = (TGBeat)it.next(); measure.removeBeat( beat ); } measure.setClef( getClef(track) ); } private TGNote readNote(TGString string,TGTrack track,TGNoteEffect effect)throws IOException { int flags = readUnsignedByte(); TGNote note = getFactory().newNote(); note.setString(string.getNumber()); note.setEffect(effect); note.getEffect().setAccentuatedNote(((flags & 0x40) != 0)); note.getEffect().setHeavyAccentuatedNote(((flags & 0x02) != 0)); note.getEffect().setGhostNote(((flags & 0x04) != 0)); if ((flags & 0x20) != 0) { int noteType = readUnsignedByte(); note.setTiedNote( (noteType == 0x02) ); note.getEffect().setDeadNote((noteType == 0x03)); } if ((flags & 0x10) != 0) { note.setVelocity((TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * readByte())) - TGVelocities.VELOCITY_INCREMENT); } if ((flags & 0x20) != 0) { int fret = readByte(); int value = ( note.isTiedNote() ? getTiedNoteValue(string.getNumber(), track) : fret ); note.setValue( value >= 0 && value < 100 ? value : 0 ); } if ((flags & 0x80) != 0) { skip(2); } if ((flags & 0x01) != 0) { skip(8); } skip(1); if ((flags & 0x08) != 0) { readNoteEffects(note.getEffect()); } return note; } private TGTrack readTrack(int number, List channels,TGLyric lyrics) throws IOException { readUnsignedByte(); if(number == 1 || getVersionIndex() == 0){ skip(1); } TGTrack track = getFactory().newTrack(); track.setNumber(number); track.setLyrics(lyrics); track.setName(readStringByte(40)); int stringCount = readInt(); for (int i = 0; i < 7; i++) { int tuning = readInt(); if (stringCount > i) { TGString string = getFactory().newString(); string.setNumber(i + 1); string.setValue(tuning); track.getStrings().add(string); } } readInt(); readChannel(track.getChannel(), channels); readInt(); track.setOffset(readInt()); readColor(track.getColor()); skip( (getVersionIndex() > 0)? 49 : 44); if(getVersionIndex() > 0){ readStringByteSizeOfInteger(); readStringByteSizeOfInteger(); } return track; } private void readChannel(TGChannel channel,List channels) throws IOException { int index = (readInt() - 1); int effectChannel = (readInt() - 1); if(index >= 0 && index < channels.size()){ ((TGChannel) channels.get(index)).copy(channel); if (channel.getInstrument() < 0) { channel.setInstrument((short)0); } if(!channel.isPercussionChannel()){ channel.setEffectChannel((short)effectChannel); } } } private void readChord(int strings,TGBeat beat) throws IOException{ TGChord chord = getFactory().newChord(strings); this.skip(17); chord.setName(readStringByte(21)); this.skip(4); chord.setFirstFret(readInt()); for (int i = 0; i < 7; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } this.skip(32); if(chord.countNotes() > 0){ beat.setChord(chord); } } private void readBeatEffects(TGBeat beat, TGNoteEffect noteEffect) throws IOException { int flags1 = readUnsignedByte(); int flags2 = readUnsignedByte(); noteEffect.setFadeIn(((flags1 & 0x10) != 0)); noteEffect.setVibrato(((flags1 & 0x02) != 0)); if ((flags1 & 0x20) != 0) { int effect = readUnsignedByte(); noteEffect.setTapping(effect == 1); noteEffect.setSlapping(effect == 2); noteEffect.setPopping(effect == 3); } if ((flags2 & 0x04) != 0) { readTremoloBar(noteEffect); } if ((flags1 & 0x40) != 0) { int strokeUp = readByte(); int strokeDown = readByte(); if( strokeUp > 0 ){ beat.getStroke().setDirection( TGStroke.STROKE_UP ); beat.getStroke().setValue( toStrokeValue(strokeUp) ); }else if( strokeDown > 0 ){ beat.getStroke().setDirection( TGStroke.STROKE_DOWN ); beat.getStroke().setValue( toStrokeValue(strokeDown) ); } } if ((flags2 & 0x02) != 0) { readByte(); } } private void readNoteEffects(TGNoteEffect noteEffect) throws IOException { int flags1 = readUnsignedByte(); int flags2 = readUnsignedByte(); if ((flags1 & 0x01) != 0) { readBend(noteEffect); } if ((flags1 & 0x10) != 0) { readGrace(noteEffect); } if ((flags2 & 0x04) != 0) { readTremoloPicking(noteEffect); } if ((flags2 & 0x08) != 0) { noteEffect.setSlide(true); readByte(); } if ((flags2 & 0x10) != 0) { readArtificialHarmonic(noteEffect); } if ((flags2 & 0x20) != 0) { readTrill(noteEffect); } noteEffect.setHammer(((flags1 & 0x02) != 0)); noteEffect.setVibrato(((flags2 & 0x40) != 0) || noteEffect.isVibrato()); noteEffect.setPalmMute(((flags2 & 0x02) != 0)); noteEffect.setStaccato(((flags2 & 0x01) != 0)); } private void readGrace(TGNoteEffect effect) throws IOException { int fret = readUnsignedByte(); int dynamic = readUnsignedByte(); int transition = readByte(); int duration = readUnsignedByte(); int flags = readUnsignedByte(); TGEffectGrace grace = getFactory().newEffectGrace(); grace.setFret( fret ); grace.setDynamic( (TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * dynamic)) - TGVelocities.VELOCITY_INCREMENT ); grace.setDuration(duration); grace.setDead( (flags & 0x01) != 0 ); grace.setOnBeat( (flags & 0x02) != 0 ); if(transition == 0){ grace.setTransition(TGEffectGrace.TRANSITION_NONE); } else if(transition == 1){ grace.setTransition(TGEffectGrace.TRANSITION_SLIDE); } else if(transition == 2){ grace.setTransition(TGEffectGrace.TRANSITION_BEND); } else if(transition == 3){ grace.setTransition(TGEffectGrace.TRANSITION_HAMMER); } effect.setGrace(grace); } private void readBend(TGNoteEffect effect) throws IOException { skip(5); TGEffectBend bend = getFactory().newEffectBend(); int numPoints = readInt(); for (int i = 0; i < numPoints; i++) { int bendPosition = readInt(); int bendValue = readInt(); readByte(); int pointPosition = Math.round(bendPosition * TGEffectBend.MAX_POSITION_LENGTH / GP_BEND_POSITION); int pointValue = Math.round(bendValue * TGEffectBend.SEMITONE_LENGTH / GP_BEND_SEMITONE); bend.addPoint(pointPosition,pointValue); } if(!bend.getPoints().isEmpty()){ effect.setBend(bend); } } private void readTremoloBar(TGNoteEffect effect) throws IOException { skip(5); TGEffectTremoloBar tremoloBar = getFactory().newEffectTremoloBar(); int numPoints = readInt(); for (int i = 0; i < numPoints; i++) { int position = readInt(); int value = readInt(); readByte(); int pointPosition = Math.round(position * TGEffectTremoloBar.MAX_POSITION_LENGTH / GP_BEND_POSITION); int pointValue = Math.round(value / (GP_BEND_SEMITONE * 2f)); tremoloBar.addPoint(pointPosition,pointValue); } if(!tremoloBar.getPoints().isEmpty()){ effect.setTremoloBar(tremoloBar); } } private void readTrill(TGNoteEffect effect) throws IOException{ byte fret = readByte(); byte period = readByte(); TGEffectTrill trill = getFactory().newEffectTrill(); trill.setFret(fret); if(period == 1){ trill.getDuration().setValue(TGDuration.SIXTEENTH); effect.setTrill(trill); }else if(period == 2){ trill.getDuration().setValue(TGDuration.THIRTY_SECOND); effect.setTrill(trill); }else if(period == 3){ trill.getDuration().setValue(TGDuration.SIXTY_FOURTH); effect.setTrill(trill); } } private void readArtificialHarmonic(TGNoteEffect effect) throws IOException{ int type = readByte(); TGEffectHarmonic harmonic = getFactory().newEffectHarmonic(); harmonic.setData(0); if(type == 1){ harmonic.setType(TGEffectHarmonic.TYPE_NATURAL); effect.setHarmonic(harmonic); }else if(type == 2){ skip(3); harmonic.setType(TGEffectHarmonic.TYPE_ARTIFICIAL); effect.setHarmonic(harmonic); }else if(type == 3){ skip(1); harmonic.setType(TGEffectHarmonic.TYPE_TAPPED); effect.setHarmonic(harmonic); }else if(type == 4){ harmonic.setType(TGEffectHarmonic.TYPE_PINCH); effect.setHarmonic(harmonic); }else if(type == 5){ harmonic.setType(TGEffectHarmonic.TYPE_SEMI); effect.setHarmonic(harmonic); } } public void readTremoloPicking(TGNoteEffect effect) throws IOException{ int value = readUnsignedByte(); TGEffectTremoloPicking tp = getFactory().newEffectTremoloPicking(); if(value == 1){ tp.getDuration().setValue(TGDuration.EIGHTH); effect.setTremoloPicking(tp); }else if(value == 2){ tp.getDuration().setValue(TGDuration.SIXTEENTH); effect.setTremoloPicking(tp); }else if(value == 3){ tp.getDuration().setValue(TGDuration.THIRTY_SECOND); effect.setTremoloPicking(tp); } } private void readMixChange(TGTempo tempo) throws IOException { readByte(); //instrument skip(16); int volume = readByte(); int pan = readByte(); int chorus = readByte(); int reverb = readByte(); int phaser = readByte(); int tremolo = readByte(); readStringByteSizeOfInteger(); //tempoName int tempoValue = readInt(); if(volume >= 0){ readByte(); } if(pan >= 0){ readByte(); } if(chorus >= 0){ readByte(); } if(reverb >= 0){ readByte(); } if(phaser >= 0){ readByte(); } if(tremolo >= 0){ readByte(); } if(tempoValue >= 0){ tempo.setValue(tempoValue); skip(1); if(getVersionIndex() > 0){ skip(1); } } readByte(); skip(1); if(getVersionIndex() > 0){ readStringByteSizeOfInteger(); readStringByteSizeOfInteger(); } } private int toStrokeValue( int value ){ if( value == 1 || value == 2){ return TGDuration.SIXTY_FOURTH; } if( value == 3){ return TGDuration.THIRTY_SECOND; } if( value == 4){ return TGDuration.SIXTEENTH; } if( value == 5){ return TGDuration.EIGHTH; } if( value == 6){ return TGDuration.QUARTER; } return TGDuration.SIXTY_FOURTH; } private short toChannelShort(byte b){ short value = (short)(( b * 8 ) - 1); return (short)Math.max(value,0); } private int getClef( TGTrack track ){ if( !track.isPercussionTrack() ){ Iterator it = track.getStrings().iterator(); while( it.hasNext() ){ TGString string = (TGString) it.next(); if( string.getValue() <= 34 ){ return TGMeasure.CLEF_BASS; } } } return TGMeasure.CLEF_TREBLE; } private TGBeat getBeat(TGMeasure measure, long start){ int count = measure.countBeats(); for(int i = 0 ; i < count ; i ++ ){ TGBeat beat = measure.getBeat( i ); if( beat.getStart() == start ){ return beat; } } TGBeat beat = getFactory().newBeat(); beat.setStart(start); measure.addBeat(beat); return beat; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStream.java0000644000175000017500000005020111273045345027577 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; public class GP4InputStream extends GTPInputStream { private static final String SUPPORTED_VERSIONS[] = { "FICHIER GUITAR PRO v4.00", "FICHIER GUITAR PRO v4.06", "FICHIER GUITAR PRO L4.06" }; private static final float GP_BEND_SEMITONE = 25f; private static final float GP_BEND_POSITION = 60f; private int tripletFeel; public GP4InputStream(GTPSettings settings){ super(settings, SUPPORTED_VERSIONS); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 4","*.gp4"); } public TGSong readSong() throws IOException, GTPFormatException { readVersion(); if (!isSupportedVersion(getVersion())) { this.close(); throw new GTPFormatException("Unsupported Version"); } TGSong song = getFactory().newSong(); readInfo(song); this.tripletFeel = ((readBoolean())?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE); int lyricTrack = readInt(); TGLyric lyric = readLyrics(); int tempoValue = readInt(); readInt(); //key readByte(); //octave List channels = readChannels(); int measures = readInt(); int tracks = readInt(); readMeasureHeaders(song, measures); readTracks(song, tracks, channels, lyric, lyricTrack); readMeasures(song, measures, tracks, tempoValue); this.close(); return song; } private void readInfo(TGSong song) throws IOException{ song.setName(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); song.setArtist(readStringByteSizeOfInteger()); song.setAlbum(readStringByteSizeOfInteger()); song.setAuthor(readStringByteSizeOfInteger()); song.setCopyright(readStringByteSizeOfInteger()); song.setWriter(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); int comments = readInt(); for (int i = 0; i < comments; i++) { song.setComments( song.getComments() + readStringByteSizeOfInteger() ); } } private void readMeasureHeaders(TGSong song, int count) throws IOException{ TGTimeSignature timeSignature = getFactory().newTimeSignature(); for (int i = 0; i < count; i++) { song.addMeasureHeader(readMeasureHeader((i + 1),song,timeSignature)); } } private void readTracks(TGSong song, int count, List channels,TGLyric lyric, int lyricTrack) throws IOException{ for (int number = 1; number <= count; number++) { song.addTrack(readTrack(number, channels,(number == lyricTrack)?lyric:getFactory().newLyric())); } } private void readMeasures(TGSong song, int measures, int tracks, int tempoValue) throws IOException{ TGTempo tempo = getFactory().newTempo(); tempo.setValue(tempoValue); long start = TGDuration.QUARTER_TIME; for (int i = 0; i < measures; i++) { TGMeasureHeader header = song.getMeasureHeader(i); header.setStart(start); for (int j = 0; j < tracks; j++) { TGTrack track = song.getTrack(j); TGMeasure measure = getFactory().newMeasure(header); track.addMeasure(measure); readMeasure(measure, track, tempo); } tempo.copy(header.getTempo()); start += header.getLength(); } } private TGLyric readLyrics() throws IOException{ TGLyric lyric = getFactory().newLyric(); lyric.setFrom(readInt()); lyric.setLyrics(readStringInteger()); for (int i = 0; i < 4; i++) { readInt(); readStringInteger(); } return lyric; } private List readChannels() throws IOException{ List channels = new ArrayList(); for (int i = 0; i < 64; i++) { TGChannel channel = getFactory().newChannel(); channel.setChannel((short)i); channel.setEffectChannel((short)i); channel.setInstrument((short)readInt()); channel.setVolume(toChannelShort(readByte())); channel.setBalance(toChannelShort(readByte())); channel.setChorus(toChannelShort(readByte())); channel.setReverb(toChannelShort(readByte())); channel.setPhaser(toChannelShort(readByte())); channel.setTremolo(toChannelShort(readByte())); channels.add(channel); skip(2); } return channels; } private long readBeat(long start, TGMeasure measure,TGTrack track, TGTempo tempo) throws IOException { int flags = readUnsignedByte(); if((flags & 0x40) != 0){ readUnsignedByte(); } TGBeat beat = getFactory().newBeat(); TGVoice voice = beat.getVoice(0); TGDuration duration = readDuration(flags); TGNoteEffect effect = getFactory().newEffect(); if ((flags & 0x02) != 0) { readChord(track.stringCount(), beat); } if ((flags & 0x04) != 0) { readText(beat); } if ((flags & 0x08) != 0) { readBeatEffects(beat,effect); } if ((flags & 0x10) != 0) { readMixChange(tempo); } int stringFlags = readUnsignedByte(); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 && (6 - i) < track.stringCount()) { TGString string = track.getString( (6 - i) + 1 ).clone(getFactory()); TGNote note = readNote(string, track,effect.clone(getFactory())); voice.addNote(note); } } beat.setStart(start); voice.setEmpty(false); duration.copy(voice.getDuration()); measure.addBeat(beat); return duration.getTime(); } private void readText(TGBeat beat) throws IOException{ TGText text = getFactory().newText(); text.setValue(readStringByteSizeOfInteger()); beat.setText(text); } private TGDuration readDuration(int flags) throws IOException { TGDuration duration = getFactory().newDuration(); duration.setValue( (int) (Math.pow( 2 , (readByte() + 4) ) / 4 ) ); duration.setDotted(((flags & 0x01) != 0)); if ((flags & 0x20) != 0) { int divisionType = readInt(); switch (divisionType) { case 3: duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); break; case 5: duration.getDivision().setEnters(5); duration.getDivision().setTimes(4); break; case 6: duration.getDivision().setEnters(6); duration.getDivision().setTimes(4); break; case 7: duration.getDivision().setEnters(7); duration.getDivision().setTimes(4); break; case 9: duration.getDivision().setEnters(9); duration.getDivision().setTimes(8); break; case 10: duration.getDivision().setEnters(10); duration.getDivision().setTimes(8); break; case 11: duration.getDivision().setEnters(11); duration.getDivision().setTimes(8); break; case 12: duration.getDivision().setEnters(12); duration.getDivision().setTimes(8); break; } } return duration; } private int getTiedNoteValue(int string, TGTrack track) { int measureCount = track.countMeasures(); if (measureCount > 0) { for (int m = measureCount - 1; m >= 0; m--) { TGMeasure measure = track.getMeasure( m ); for (int b = measure.countBeats() - 1; b >= 0; b--) { TGBeat beat = measure.getBeat( b ); TGVoice voice = beat.getVoice(0); for (int n = 0; n < voice.countNotes(); n ++) { TGNote note = voice.getNote( n ); if (note.getString() == string) { return note.getValue(); } } } } } return -1; } private void readColor(TGColor color) throws IOException { color.setR(readUnsignedByte()); color.setG(readUnsignedByte()); color.setB(readUnsignedByte()); read(); } private TGMarker readMarker(int measure) throws IOException { TGMarker marker = getFactory().newMarker(); marker.setMeasure(measure); marker.setTitle(readStringByteSizeOfInteger()); readColor(marker.getColor()); return marker; } private TGMeasureHeader readMeasureHeader(int number,TGSong song,TGTimeSignature timeSignature) throws IOException { int flags = readUnsignedByte(); TGMeasureHeader header = getFactory().newHeader(); header.setNumber(number); header.setStart(0); header.getTempo().setValue(120); header.setTripletFeel(this.tripletFeel); header.setRepeatOpen( ((flags & 0x04) != 0) ); if ((flags & 0x01) != 0) { timeSignature.setNumerator(readByte()); } if ((flags & 0x02) != 0) { timeSignature.getDenominator().setValue(readByte()); } timeSignature.copy(header.getTimeSignature()); if ((flags & 0x08) != 0) { header.setRepeatClose(readByte()); } if ((flags & 0x10) != 0) { header.setRepeatAlternative(parseRepeatAlternative(song, number, readUnsignedByte())); } if ((flags & 0x20) != 0) { header.setMarker(readMarker(number)); } if ((flags & 0x40) != 0) { readByte(); readByte(); } return header; } private void readMeasure(TGMeasure measure,TGTrack track, TGTempo tempo) throws IOException{ long nextNoteStart = measure.getStart(); int numberOfBeats = readInt(); for (int i = 0; i < numberOfBeats; i++) { nextNoteStart += readBeat(nextNoteStart, measure, track, tempo); } measure.setClef( getClef(track) ); } private TGNote readNote(TGString string, TGTrack track,TGNoteEffect effect)throws IOException { int flags = readUnsignedByte(); TGNote note = getFactory().newNote(); note.setString(string.getNumber()); note.setEffect(effect); note.getEffect().setAccentuatedNote(((flags & 0x40) != 0)); note.getEffect().setGhostNote(((flags & 0x04) != 0)); if ((flags & 0x20) != 0) { int noteType = readUnsignedByte(); note.setTiedNote( (noteType == 0x02) ); note.getEffect().setDeadNote((noteType == 0x03)); } if ((flags & 0x01) != 0) { skip(2); } if ((flags & 0x10) != 0) { note.setVelocity((TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * readByte())) - TGVelocities.VELOCITY_INCREMENT); } if ((flags & 0x20) != 0) { int fret = readByte(); int value = ( note.isTiedNote() ? getTiedNoteValue(string.getNumber(), track) : fret ); note.setValue( value >= 0 && value < 100 ? value : 0 ); } if ((flags & 0x80) != 0) { skip(2); } if ((flags & 0x08) != 0) { readNoteEffects(note.getEffect()); } return note; } private TGTrack readTrack(int number, List channels,TGLyric lyrics) throws IOException { TGTrack track = getFactory().newTrack(); track.setNumber(number); track.setLyrics(lyrics); readUnsignedByte(); track.setName(readStringByte(40)); int stringCount = readInt(); for (int i = 0; i < 7; i++) { int tuning = readInt(); if (stringCount > i) { TGString string = getFactory().newString(); string.setNumber(i + 1); string.setValue(tuning); track.getStrings().add(string); } } readInt(); readChannel(track.getChannel(), channels); readInt(); track.setOffset(readInt()); readColor(track.getColor()); return track; } private void readChannel(TGChannel channel,List channels) throws IOException { int index = (readInt() - 1); int effectChannel = (readInt() - 1); if(index >= 0 && index < channels.size()){ ((TGChannel) channels.get(index)).copy(channel); if (channel.getInstrument() < 0) { channel.setInstrument((short)0); } if(!channel.isPercussionChannel()){ channel.setEffectChannel((short)effectChannel); } } } private int parseRepeatAlternative(TGSong song,int measure,int value){ int repeatAlternative = 0; int existentAlternatives = 0; Iterator it = song.getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.getNumber() == measure){ break; } if(header.isRepeatOpen()){ existentAlternatives = 0; } existentAlternatives |= header.getRepeatAlternative(); } for(int i = 0; i < 8; i ++){ if(value > i && (existentAlternatives & (1 << i)) == 0){ repeatAlternative |= (1 << i); } } return repeatAlternative; } private void readChord(int strings,TGBeat beat) throws IOException { TGChord chord = getFactory().newChord(strings); if ((readUnsignedByte() & 0x01) == 0) { chord.setName( readStringByteSizeOfInteger() ); chord.setFirstFret(readInt()); if(chord.getFirstFret() != 0){ for (int i = 0; i < 6; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } } } else{ skip(16); chord.setName(readStringByte(21)); skip(4); chord.setFirstFret(readInt()); for (int i = 0; i < 7; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } skip(32); } if(chord.countNotes() > 0){ beat.setChord(chord); } } private void readGrace(TGNoteEffect effect) throws IOException { int fret = readUnsignedByte(); TGEffectGrace grace = getFactory().newEffectGrace(); grace.setOnBeat(false); grace.setDead( (fret == 255) ); grace.setFret( ((!grace.isDead())?fret:0) ); grace.setDynamic( (TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * readUnsignedByte())) - TGVelocities.VELOCITY_INCREMENT ); int transition = readUnsignedByte(); if(transition == 0){ grace.setTransition( TGEffectGrace.TRANSITION_NONE ); } else if(transition == 1){ grace.setTransition( TGEffectGrace.TRANSITION_SLIDE ); } else if(transition == 2){ grace.setTransition( TGEffectGrace.TRANSITION_BEND ); } else if(transition == 3){ grace.setTransition( TGEffectGrace.TRANSITION_HAMMER ); } grace.setDuration(readUnsignedByte()); effect.setGrace(grace); } private void readBend(TGNoteEffect effect) throws IOException { TGEffectBend bend = getFactory().newEffectBend(); skip(5); int points = readInt(); for (int i = 0; i < points; i++) { int position = readInt(); int value = readInt(); readByte(); int pointPosition = Math.round(position * TGEffectBend.MAX_POSITION_LENGTH / GP_BEND_POSITION); int pointValue = Math.round(value * TGEffectBend.SEMITONE_LENGTH / GP_BEND_SEMITONE); bend.addPoint(pointPosition,pointValue); } if(!bend.getPoints().isEmpty()){ effect.setBend(bend); } } private void readTremoloBar(TGNoteEffect effect) throws IOException { TGEffectTremoloBar tremoloBar = getFactory().newEffectTremoloBar(); skip(5); int points = readInt(); for (int i = 0; i < points; i++) { int position = readInt(); int value = readInt(); readByte(); int pointPosition = Math.round(position * TGEffectTremoloBar.MAX_POSITION_LENGTH / GP_BEND_POSITION); int pointValue = Math.round(value / (GP_BEND_SEMITONE * 2f)); tremoloBar.addPoint(pointPosition,pointValue); } if(!tremoloBar.getPoints().isEmpty()){ effect.setTremoloBar(tremoloBar); } } public void readTremoloPicking(TGNoteEffect effect) throws IOException{ int value = readUnsignedByte(); TGEffectTremoloPicking tp = getFactory().newEffectTremoloPicking(); if(value == 1){ tp.getDuration().setValue(TGDuration.EIGHTH); effect.setTremoloPicking(tp); }else if(value == 2){ tp.getDuration().setValue(TGDuration.SIXTEENTH); effect.setTremoloPicking(tp); }else if(value == 3){ tp.getDuration().setValue(TGDuration.THIRTY_SECOND); effect.setTremoloPicking(tp); } } private void readNoteEffects(TGNoteEffect noteEffect) throws IOException { int flags1 = readUnsignedByte(); int flags2 = readUnsignedByte(); noteEffect.setHammer(((flags1 & 0x02) != 0)); noteEffect.setVibrato(((flags2 & 0x40) != 0) || noteEffect.isVibrato()); noteEffect.setPalmMute(((flags2 & 0x02) != 0)); noteEffect.setStaccato(((flags2 & 0x01) != 0)); if ((flags1 & 0x01) != 0) { readBend(noteEffect); } if ((flags1 & 0x10) != 0) { readGrace(noteEffect); } if ((flags2 & 0x04) != 0) { readTremoloPicking(noteEffect); } if ((flags2 & 0x08) != 0) { noteEffect.setSlide(true); readByte(); } if ((flags2 & 0x10) != 0) { TGEffectHarmonic harmonic = getFactory().newEffectHarmonic(); int type = readByte(); if(type == 1){ harmonic.setType(TGEffectHarmonic.TYPE_NATURAL); }else if(type == 3){ harmonic.setType(TGEffectHarmonic.TYPE_TAPPED); }else if(type == 4){ harmonic.setType(TGEffectHarmonic.TYPE_PINCH); }else if(type == 5){ harmonic.setType(TGEffectHarmonic.TYPE_SEMI); }else if(type == 15){ harmonic.setType(TGEffectHarmonic.TYPE_ARTIFICIAL); harmonic.setData(2); }else if(type == 17){ harmonic.setType(TGEffectHarmonic.TYPE_ARTIFICIAL); harmonic.setData(3); }else if(type == 22){ harmonic.setType(TGEffectHarmonic.TYPE_ARTIFICIAL); harmonic.setData(0); } noteEffect.setHarmonic(harmonic); } if ((flags2 & 0x20) != 0) { byte fret = readByte(); byte period = readByte(); TGEffectTrill trill = getFactory().newEffectTrill(); trill.setFret(fret); if(period == 1){ trill.getDuration().setValue(TGDuration.SIXTEENTH); noteEffect.setTrill(trill); }else if(period == 2){ trill.getDuration().setValue(TGDuration.THIRTY_SECOND); noteEffect.setTrill(trill); }else if(period == 3){ trill.getDuration().setValue(TGDuration.SIXTY_FOURTH); noteEffect.setTrill(trill); } } } private void readBeatEffects(TGBeat beat,TGNoteEffect noteEffect) throws IOException { int flags1 = readUnsignedByte(); int flags2 = readUnsignedByte(); noteEffect.setFadeIn(((flags1 & 0x10) != 0)); noteEffect.setVibrato(((flags1 & 0x02) != 0)); if ((flags1 & 0x20) != 0) { int effect = readUnsignedByte(); noteEffect.setTapping(effect == 1); noteEffect.setSlapping(effect == 2); noteEffect.setPopping(effect == 3); } if ((flags2 & 0x04) != 0) { readTremoloBar(noteEffect); } if ((flags1 & 0x40) != 0) { int strokeDown = readByte(); int strokeUp = readByte(); if( strokeDown > 0 ){ beat.getStroke().setDirection( TGStroke.STROKE_DOWN ); beat.getStroke().setValue( toStrokeValue(strokeDown) ); }else if( strokeUp > 0 ){ beat.getStroke().setDirection( TGStroke.STROKE_UP ); beat.getStroke().setValue( toStrokeValue(strokeUp) ); } } if ((flags2 & 0x02) != 0) { readByte(); } } private void readMixChange(TGTempo tempo) throws IOException { readByte(); int volume = readByte(); int pan = readByte(); int chorus = readByte(); int reverb = readByte(); int phaser = readByte(); int tremolo = readByte(); int tempoValue = readInt(); if(volume >= 0){ readByte(); } if(pan >= 0){ readByte(); } if(chorus >= 0){ readByte(); } if(reverb >= 0){ readByte(); } if(phaser >= 0){ readByte(); } if(tremolo >= 0){ readByte(); } if(tempoValue >= 0){ tempo.setValue(tempoValue); readByte(); } readByte(); } private int toStrokeValue( int value ){ if( value == 1 || value == 2){ return TGDuration.SIXTY_FOURTH; } if( value == 3){ return TGDuration.THIRTY_SECOND; } if( value == 4){ return TGDuration.SIXTEENTH; } if( value == 5){ return TGDuration.EIGHTH; } if( value == 6){ return TGDuration.QUARTER; } return TGDuration.SIXTY_FOURTH; } private short toChannelShort(byte b){ short value = (short)(( b * 8 ) - 1); return (short)Math.max(value,0); } private int getClef( TGTrack track ){ if( !track.isPercussionTrack() ){ Iterator it = track.getStrings().iterator(); while( it.hasNext() ){ TGString string = (TGString) it.next(); if( string.getValue() <= 34 ){ return TGMeasure.CLEF_BASS; } } } return TGMeasure.CLEF_TREBLE; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStream.java0000644000175000017500000004313611273045345027607 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class GP3InputStream extends GTPInputStream { private static final String SUPPORTED_VERSIONS[] = new String[]{ "FICHIER GUITAR PRO v3.00" }; private static final float GP_BEND_SEMITONE = 25f; private static final float GP_BEND_POSITION = 60f; private int tripletFeel; public GP3InputStream(GTPSettings settings){ super(settings, SUPPORTED_VERSIONS); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 3","*.gp3"); } public TGSong readSong() throws GTPFormatException, IOException { readVersion(); if (!isSupportedVersion(getVersion())) { this.close(); throw new GTPFormatException("Unsupported Version"); } TGSong song = getFactory().newSong(); readInfo(song); this.tripletFeel = ((readBoolean())?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE); int tempoValue = readInt(); readInt(); //key List channels = readChannels(); int measures = readInt(); int tracks = readInt(); readMeasureHeaders(song, measures); readTracks(song, tracks, channels); readMeasures(song, measures, tracks, tempoValue); this.close(); return song; } private List readChannels() throws IOException{ List channels = new ArrayList(); for (int i = 0; i < 64; i++) { TGChannel channel = getFactory().newChannel(); channel.setChannel((short)i); channel.setEffectChannel((short)i); channel.setInstrument((short)readInt()); channel.setVolume(toChannelShort(readByte())); channel.setBalance(toChannelShort(readByte())); channel.setChorus(toChannelShort(readByte())); channel.setReverb(toChannelShort(readByte())); channel.setPhaser(toChannelShort(readByte())); channel.setTremolo(toChannelShort(readByte())); channels.add(channel); skip(2); } return channels; } private void readInfo(TGSong song) throws IOException{ song.setName(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); song.setArtist(readStringByteSizeOfInteger()); song.setAlbum(readStringByteSizeOfInteger()); song.setAuthor(readStringByteSizeOfInteger()); song.setCopyright(readStringByteSizeOfInteger()); song.setWriter(readStringByteSizeOfInteger()); readStringByteSizeOfInteger(); int comments = readInt(); for (int i = 0; i < comments; i++) { song.setComments( song.getComments() + readStringByteSizeOfInteger() ); } } private void readMeasureHeaders(TGSong song, int count) throws IOException{ TGTimeSignature timeSignature = getFactory().newTimeSignature(); for (int i = 0; i < count; i++) { song.addMeasureHeader(readMeasureHeader((i + 1),song,timeSignature)); } } private void readTracks(TGSong song, int count, List channels) throws IOException{ for (int number = 1; number <= count; number++) { song.addTrack(readTrack(number, channels)); } } private void readMeasures(TGSong song, int measures, int tracks, int tempoValue) throws IOException{ TGTempo tempo = getFactory().newTempo(); tempo.setValue(tempoValue); long start = TGDuration.QUARTER_TIME; for (int i = 0; i < measures; i++) { TGMeasureHeader header = song.getMeasureHeader(i); header.setStart(start); for (int j = 0; j < tracks; j++) { TGTrack track = song.getTrack(j); TGMeasure measure = getFactory().newMeasure(header); track.addMeasure(measure); readMeasure(measure, track, tempo); } tempo.copy(header.getTempo()); start += header.getLength(); } } private TGDuration readDuration(int flags) throws IOException { TGDuration duration = getFactory().newDuration(); duration.setValue( (int) (Math.pow( 2 , (readByte() + 4) ) / 4 ) ); duration.setDotted(((flags & 0x01) != 0)); if ((flags & 0x20) != 0) { int divisionType = readInt(); switch (divisionType) { case 3: duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); break; case 5: duration.getDivision().setEnters(5); duration.getDivision().setTimes(4); break; case 6: duration.getDivision().setEnters(6); duration.getDivision().setTimes(4); break; case 7: duration.getDivision().setEnters(7); duration.getDivision().setTimes(4); break; case 9: duration.getDivision().setEnters(9); duration.getDivision().setTimes(8); break; case 10: duration.getDivision().setEnters(10); duration.getDivision().setTimes(8); break; case 11: duration.getDivision().setEnters(11); duration.getDivision().setTimes(8); break; case 12: duration.getDivision().setEnters(12); duration.getDivision().setTimes(8); break; } } return duration; } private int getTiedNoteValue(int string, TGTrack track) { int measureCount = track.countMeasures(); if (measureCount > 0) { for (int m = measureCount - 1; m >= 0; m--) { TGMeasure measure = track.getMeasure( m ); for (int b = measure.countBeats() - 1; b >= 0; b--) { TGBeat beat = measure.getBeat( b ); TGVoice voice = beat.getVoice(0); for (int n = 0; n < voice.countNotes(); n ++) { TGNote note = voice.getNote( n ); if (note.getString() == string) { return note.getValue(); } } } } } return -1; } private void readColor(TGColor color) throws IOException { color.setR(readUnsignedByte()); color.setG(readUnsignedByte()); color.setB(readUnsignedByte()); read(); } private TGMarker readMarker(int measure) throws IOException { TGMarker marker = getFactory().newMarker(); marker.setMeasure(measure); marker.setTitle(readStringByteSizeOfInteger()); readColor(marker.getColor()); return marker; } private TGMeasureHeader readMeasureHeader(int number,TGSong song,TGTimeSignature timeSignature) throws IOException { int flags = readUnsignedByte(); TGMeasureHeader header = getFactory().newHeader(); header.setNumber(number); header.setStart(0); header.getTempo().setValue(120); header.setTripletFeel(this.tripletFeel); header.setRepeatOpen( ((flags & 0x04) != 0) ); if ((flags & 0x01) != 0) { timeSignature.setNumerator(readByte()); } if ((flags & 0x02) != 0) { timeSignature.getDenominator().setValue(readByte()); } timeSignature.copy(header.getTimeSignature()); if ((flags & 0x08) != 0) { header.setRepeatClose(readByte()); } if ((flags & 0x10) != 0) { header.setRepeatAlternative( parseRepeatAlternative(song, number, readUnsignedByte()) ); } if ((flags & 0x20) != 0) { header.setMarker(readMarker(number)); } if ((flags & 0x40) != 0) { readByte(); readByte(); } return header; } private void readMeasure(TGMeasure measure, TGTrack track, TGTempo tempo) throws IOException{ long nextNoteStart = measure.getStart(); int numberOfBeats = readInt(); for (int i = 0; i < numberOfBeats; i++) { nextNoteStart += readBeat(nextNoteStart, measure, track, tempo); } measure.setClef( getClef(track) ); } private long readBeat(long start, TGMeasure measure,TGTrack track, TGTempo tempo) throws IOException{ int flags = readUnsignedByte(); if((flags & 0x40) != 0){ readUnsignedByte(); } TGBeat beat = getFactory().newBeat(); TGVoice voice = beat.getVoice(0); TGDuration duration = readDuration(flags); TGNoteEffect effect = getFactory().newEffect(); if ((flags & 0x02) != 0) { readChord(track.stringCount(),beat); } if ((flags & 0x04) != 0) { readText(beat); } if ((flags & 0x08) != 0) { readBeatEffects(beat,effect); } if ((flags & 0x10) != 0) { readMixChange(tempo); } int stringFlags = readUnsignedByte(); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 && (6 - i) < track.stringCount()) { TGString string = track.getString( (6 - i) + 1 ).clone(getFactory()); TGNote note = readNote(string, track,effect.clone(getFactory())); voice.addNote(note); } } beat.setStart(start); voice.setEmpty(false); duration.copy(voice.getDuration()); measure.addBeat(beat); return duration.getTime(); } private void readText(TGBeat beat) throws IOException{ TGText text = getFactory().newText(); text.setValue(readStringByteSizeOfInteger()); beat.setText(text); } private TGNote readNote(TGString string,TGTrack track,TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); TGNote note = getFactory().newNote(); note.setString(string.getNumber()); note.setEffect(effect); note.getEffect().setGhostNote(((flags & 0x04) != 0)); if ((flags & 0x20) != 0) { int noteType = readUnsignedByte(); note.setTiedNote( (noteType == 0x02) ); note.getEffect().setDeadNote((noteType == 0x03)); } if ((flags & 0x01) != 0) { skip(2); } if ((flags & 0x10) != 0) { note.setVelocity( (TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * readByte())) - TGVelocities.VELOCITY_INCREMENT ); } if ((flags & 0x20) != 0) { int fret = readByte(); int value = ( note.isTiedNote() ? getTiedNoteValue(string.getNumber(), track) : fret ); note.setValue( value >= 0 && value < 100 ? value : 0 ); } if ((flags & 0x80) != 0) { skip(2); } if ((flags & 0x08) != 0) { readNoteEffects(note.getEffect()); } return note; } private TGTrack readTrack(int number, List channels) throws IOException { TGTrack track = getFactory().newTrack(); track.setNumber(number); readUnsignedByte(); track.setName(readStringByte(40)); int stringCount = readInt(); for (int i = 0; i < 7; i++) { int tuning = readInt(); if (stringCount > i) { TGString string = getFactory().newString(); string.setNumber(i + 1); string.setValue(tuning); track.getStrings().add(string); } } readInt(); readChannel(track.getChannel(),channels); readInt(); track.setOffset(readInt()); readColor(track.getColor()); return track; } private void readChannel(TGChannel channel,List channels) throws IOException { int index = (readInt() - 1); int effectChannel = (readInt() - 1); if(index >= 0 && index < channels.size()){ ((TGChannel) channels.get(index)).copy(channel); if (channel.getInstrument() < 0) { channel.setInstrument((short)0); } if(!channel.isPercussionChannel()){ channel.setEffectChannel((short)effectChannel); } } } private int parseRepeatAlternative(TGSong song,int measure,int value){ int repeatAlternative = 0; int existentAlternatives = 0; Iterator it = song.getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.getNumber() == measure){ break; } if(header.isRepeatOpen()){ existentAlternatives = 0; } existentAlternatives |= header.getRepeatAlternative(); } for(int i = 0; i < 8; i ++){ if(value > i && (existentAlternatives & (1 << i)) == 0){ repeatAlternative |= (1 << i); } } return repeatAlternative; } private void readChord(int strings, TGBeat beat) throws IOException { TGChord chord = getFactory().newChord(strings); int header = readUnsignedByte(); if ((header & 0x01) == 0) { chord.setName(readStringByteSizeOfInteger()); chord.setFirstFret(readInt()); if (chord.getFirstFret() != 0) { for (int i = 0; i < 6; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } } } else{ skip(25); chord.setName(readStringByte(34)); chord.setFirstFret(readInt()); for (int i = 0; i < 6; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } skip(36); } if(chord.countNotes() > 0){ beat.setChord(chord); } } private void readGrace(TGNoteEffect effect) throws IOException { int fret = readUnsignedByte(); TGEffectGrace grace = getFactory().newEffectGrace(); grace.setOnBeat(false); grace.setDead( (fret == 255) ); grace.setFret( ((!grace.isDead())?fret:0) ); grace.setDynamic( (TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * readUnsignedByte())) - TGVelocities.VELOCITY_INCREMENT ); int transition = readUnsignedByte(); if(transition == 0){ grace.setTransition(TGEffectGrace.TRANSITION_NONE); } else if(transition == 1){ grace.setTransition(TGEffectGrace.TRANSITION_SLIDE); } else if(transition == 2){ grace.setTransition(TGEffectGrace.TRANSITION_BEND); } else if(transition == 3){ grace.setTransition(TGEffectGrace.TRANSITION_HAMMER); } grace.setDuration(readUnsignedByte()); effect.setGrace(grace); } private void readBend(TGNoteEffect effect) throws IOException { TGEffectBend bend = getFactory().newEffectBend(); skip(5); int points = readInt(); for (int i = 0; i < points; i++) { int bendPosition = readInt(); int bendValue = readInt(); readByte(); //vibrato int pointPosition = Math.round(bendPosition * TGEffectBend.MAX_POSITION_LENGTH / GP_BEND_POSITION); int pointValue = Math.round(bendValue * TGEffectBend.SEMITONE_LENGTH / GP_BEND_SEMITONE); bend.addPoint(pointPosition,pointValue); } if(!bend.getPoints().isEmpty()){ effect.setBend(bend); } } private void readTremoloBar(TGNoteEffect noteEffect) throws IOException { int value = readInt(); TGEffectTremoloBar effect = getFactory().newEffectTremoloBar(); effect.addPoint(0,0); effect.addPoint( Math.round(TGEffectTremoloBar.MAX_POSITION_LENGTH / 2f) ,Math.round( -(value / (GP_BEND_SEMITONE * 2f) ) ) ); effect.addPoint(TGEffectTremoloBar.MAX_POSITION_LENGTH,0); noteEffect.setTremoloBar(effect); } private void readNoteEffects(TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); effect.setSlide( ((flags & 0x04) != 0) ); effect.setHammer( ((flags & 0x02) != 0) ); if ((flags & 0x01) != 0) { readBend(effect); } if ((flags & 0x10) != 0) { readGrace(effect); } } private void readBeatEffects(TGBeat beat,TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); effect.setVibrato(((flags & 0x01) != 0) || ((flags & 0x02) != 0)); effect.setFadeIn(((flags & 0x10) != 0)); if ((flags & 0x20) != 0) { int type = readUnsignedByte(); if (type == 0) { readTremoloBar(effect); } else { effect.setTapping(type == 1); effect.setSlapping(type == 2); effect.setPopping(type == 3); readInt(); } } if ((flags & 0x40) != 0) { int strokeDown = readByte(); int strokeUp = readByte(); if( strokeDown > 0 ){ beat.getStroke().setDirection( TGStroke.STROKE_DOWN ); beat.getStroke().setValue( toStrokeValue(strokeDown) ); }else if( strokeUp > 0 ){ beat.getStroke().setDirection( TGStroke.STROKE_UP ); beat.getStroke().setValue( toStrokeValue(strokeUp) ); } } if ((flags & 0x04) != 0) { TGEffectHarmonic harmonic = getFactory().newEffectHarmonic(); harmonic.setType(TGEffectHarmonic.TYPE_NATURAL); effect.setHarmonic(harmonic); } if ((flags & 0x08) != 0) { TGEffectHarmonic harmonic = getFactory().newEffectHarmonic(); harmonic.setType(TGEffectHarmonic.TYPE_ARTIFICIAL); harmonic.setData(0); effect.setHarmonic(harmonic); } } private void readMixChange(TGTempo tempo) throws IOException { readByte(); //instrument int volume = readByte(); int pan = readByte(); int chorus = readByte(); int reverb = readByte(); int phaser = readByte(); int tremolo = readByte(); int tempoValue = readInt(); if(volume >= 0){ readByte(); } if(pan >= 0){ readByte(); } if(chorus >= 0){ readByte(); } if(reverb >= 0){ readByte(); } if(phaser >= 0){ readByte(); } if(tremolo >= 0){ readByte(); } if(tempoValue >= 0){ tempo.setValue(tempoValue); readByte(); } } private int toStrokeValue( int value ){ if( value == 1 || value == 2){ return TGDuration.SIXTY_FOURTH; } if( value == 3){ return TGDuration.THIRTY_SECOND; } if( value == 4){ return TGDuration.SIXTEENTH; } if( value == 5){ return TGDuration.EIGHTH; } if( value == 6){ return TGDuration.QUARTER; } return TGDuration.SIXTY_FOURTH; } private short toChannelShort(byte b){ short value = (short)(( b * 8 ) - 1); return (short)Math.max(value,0); } private int getClef( TGTrack track ){ if( !track.isPercussionTrack() ){ Iterator it = track.getStrings().iterator(); while( it.hasNext() ){ TGString string = (TGString) it.next(); if( string.getValue() <= 34 ){ return TGMeasure.CLEF_BASS; } } } return TGMeasure.CLEF_TREBLE; } }tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStream.java0000644000175000017500000002752211273045345027606 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class GP1InputStream extends GTPInputStream { private static final String SUPPORTED_VERSIONS[] = new String[]{ "FICHIER GUITARE PRO v1", "FICHIER GUITARE PRO v1.01","FICHIER GUITARE PRO v1.02", "FICHIER GUITARE PRO v1.03","FICHIER GUITARE PRO v1.04" }; private static final short TRACK_CHANNELS[][] = new short[][]{ new short[]{0,1}, new short[]{2,3}, new short[]{4,5}, new short[]{6,7}, new short[]{8,10}, new short[]{11,12}, new short[]{13,14}, new short[]{9,9}, }; private int trackCount; public GP1InputStream(GTPSettings settings){ super(settings, SUPPORTED_VERSIONS); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro","*.gtp"); } public TGSong readSong() throws GTPFormatException, IOException { readVersion(); if (!isSupportedVersion(getVersion())) { this.close(); throw new GTPFormatException("Unsupported Version"); } this.trackCount = ((getVersionIndex() > 2)?8:1); TGSong song = getFactory().newSong(); readInfo(song); int tempo = readInt(); int tripletFeel = ((readInt() == 1)?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE); if(getVersionIndex() > 2){ readInt(); //key } for (int i = 0; i < this.trackCount; i++) { TGTrack track = getFactory().newTrack(); track.setNumber( (i + 1) ); track.getChannel().setChannel(TRACK_CHANNELS[ i ][0]); track.getChannel().setEffectChannel(TRACK_CHANNELS[ i ][1]); TGColor.RED.copy(track.getColor()); int strings = ((getVersionIndex() > 1)?readInt():6); for (int j = 0; j < strings; j++) { TGString string = getFactory().newString(); string.setNumber( j + 1 ); string.setValue( readInt() ); track.getStrings().add( string ); } song.addTrack(track); } int measureCount = readInt(); for (int i = 0; i < this.trackCount; i++) { readTrack(song.getTrack(i)); } if(getVersionIndex() > 2){ skip(10); } TGMeasureHeader previous = null; long[] lastReadedStarts = new long[this.trackCount]; for (int i = 0; i < measureCount; i++) { TGMeasureHeader header = getFactory().newHeader(); header.setStart( (previous == null)?TGDuration.QUARTER_TIME:(previous.getStart() + previous.getLength()) ); header.setNumber( (previous == null)?1:previous.getNumber() + 1 ); header.getTempo().setValue( (previous == null)?tempo:previous.getTempo().getValue() ); header.setTripletFeel(tripletFeel); readTrackMeasures(song,header,lastReadedStarts); previous = header; } TGSongManager manager = new TGSongManager(getFactory()); manager.setSong(song); manager.autoCompleteSilences(); this.close(); return song; } private void readInfo(TGSong song) throws IOException{ song.setName(readStringByteSizeOfByte()); song.setAuthor(readStringByteSizeOfByte()); readStringByteSizeOfByte(); } private TGDuration readDuration() throws IOException { TGDuration duration = getFactory().newDuration(); duration.setValue( (int) (Math.pow( 2 , (readByte() + 4) ) / 4 ) ); return duration; } private void readTrackMeasures(TGSong song,TGMeasureHeader header,long[] lastReadedStarts) throws IOException { readTimeSignature(header.getTimeSignature()); skip(6); int[] beats = new int[this.trackCount]; for (int i = 0; i < this.trackCount; i++) { readUnsignedByte(); readUnsignedByte(); beats[i] = readUnsignedByte(); if( beats[i] > 127 ){ beats[i] = 0; } skip(9); } skip(2); int flags = readUnsignedByte(); header.setRepeatOpen( ((flags & 0x01) != 0) ); if ((flags & 0x02) != 0) { header.setRepeatClose( readUnsignedByte() ); } if ((flags & 0x04) != 0) { header.setRepeatAlternative( parseRepeatAlternative(song, header.getNumber(), readUnsignedByte()) ); } song.addMeasureHeader(header); for (int i = 0; i < this.trackCount; i++) { TGTrack track = song.getTrack(i); TGMeasure measure = getFactory().newMeasure(header); long start = measure.getStart(); for (int j = 0; j < beats[i]; j++) { long length = readBeat(track, measure,start,lastReadedStarts[i]); lastReadedStarts[i] = start; start += length; } measure.setClef( getClef(track) ); track.addMeasure(measure); } } private void readTimeSignature(TGTimeSignature timeSignature) throws IOException { timeSignature.setNumerator(readUnsignedByte()); timeSignature.getDenominator().setValue(readUnsignedByte()); } private long readBeat(TGTrack track, TGMeasure measure, long start, long lastReadedStart) throws IOException { readInt(); TGBeat beat = getFactory().newBeat(); TGVoice voice = beat.getVoice(0); TGDuration duration = readDuration(); TGNoteEffect effect = getFactory().newEffect(); int flags = readUnsignedByte(); duration.setDotted( ((flags & 0x10) != 0) ); if ((flags & 0x20) != 0) { duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); skip(1); } // beat effects if ((flags & 0x04) != 0) { readBeatEffects(effect); } // chord diagram if ((flags & 0x02) != 0) { readChord(track.stringCount(), beat); } // text if ((flags & 0x01) != 0) { readText(beat); } if((flags & 0x40) != 0){ if(lastReadedStart < start){ TGBeat previousBeat = getBeat(track, measure, lastReadedStart); if(previousBeat != null){ TGVoice previousVoice = previousBeat.getVoice(0); Iterator it = previousVoice.getNotes().iterator(); while(it.hasNext()){ TGNote previous = (TGNote)it.next(); TGNote note = getFactory().newNote(); note.setValue(previous.getValue()); note.setString(previous.getString()); note.setVelocity(previous.getVelocity()); note.setTiedNote(true); voice.addNote(note); } } } } else if ((flags & 0x08) == 0) { int stringsFlags = readUnsignedByte(); int effectsFlags = readUnsignedByte(); for (int i = 5; i >= 0; i--) { if ((stringsFlags & (1 << i)) != 0) { TGNote note = getFactory().newNote(); int fret = readUnsignedByte(); if ((effectsFlags & (1 << i)) != 0) { readNoteEffects(effect); } note.setValue( (fret >= 0 && fret < 100)?fret:0); note.setVelocity(TGVelocities.DEFAULT); note.setString( track.stringCount() - i ); note.setEffect(effect.clone(getFactory())); note.getEffect().setDeadNote( (fret < 0 || fret >= 100) ); voice.addNote(note); } } } beat.setStart(start); voice.setEmpty(false); duration.copy(voice.getDuration()); measure.addBeat(beat); return duration.getTime(); } private void readText(TGBeat beat) throws IOException{ TGText text = getFactory().newText(); text.setValue(readStringByte(0)); beat.setText(text); } private void readBeatEffects(TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); effect.setVibrato( (flags == 1 || flags == 2) ); effect.setFadeIn( (flags == 4) ); effect.setTapping( (flags == 5) ) ; effect.setSlapping( (flags == 6) ) ; effect.setPopping( (flags == 7) ) ; if(flags == 3){ readBend(effect); } else if(flags == 8 || flags == 9){ TGEffectHarmonic harmonic = getFactory().newEffectHarmonic(); harmonic.setType((flags == 8)?TGEffectHarmonic.TYPE_NATURAL:TGEffectHarmonic.TYPE_ARTIFICIAL); harmonic.setData(0); effect.setHarmonic(harmonic); } } private void readNoteEffects(TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); effect.setHammer( (flags == 1 || flags == 2) ); effect.setSlide( (flags == 3 || flags == 4) ); if(flags == 5 || flags == 6){ readBend(effect); } } private void readBend(TGNoteEffect effect) throws IOException { skip(6); float value = Math.max( ((readUnsignedByte() / 8f) - 26f) , 1f); TGEffectBend bend = getFactory().newEffectBend(); bend.addPoint(0,0); bend.addPoint(Math.round(TGEffectBend.MAX_POSITION_LENGTH / 2), Math.round(value * TGEffectBend.SEMITONE_LENGTH) ); bend.addPoint(Math.round(TGEffectBend.MAX_POSITION_LENGTH), Math.round(value * TGEffectBend.SEMITONE_LENGTH)); effect.setBend(bend); skip(1); } private void readTrack(TGTrack track) throws IOException { track.setName("Track 1"); track.getChannel().setInstrument((short)readInt()); if (getVersionIndex() > 2) { readInt(); // Number of frets track.setName(readStringByteSizeOfByte()); track.setSolo(readBoolean()); track.getChannel().setVolume((short)readInt()); track.getChannel().setBalance((short)readInt()); track.getChannel().setChorus((short)readInt()); track.getChannel().setReverb((short)readInt()); track.setOffset(readInt()); } } private void readChord(int strings, TGBeat beat) throws IOException { if(getVersionIndex() > 3){ TGChord chord = getFactory().newChord(strings); chord.setName(readStringByte(0)); this.skip(1); if ( readInt() < 12 ) { skip(32); } chord.setFirstFret(readInt()); if (chord.getFirstFret() != 0) { for (int i = 0; i < 6; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } } if(chord.countNotes() > 0){ beat.setChord(chord); } }else{ readStringByteSizeOfByte(); } } private int parseRepeatAlternative(TGSong song,int measure,int value){ int repeatAlternative = 0; int existentAlternatives = 0; Iterator it = song.getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.getNumber() == measure){ break; } if(header.isRepeatOpen()){ existentAlternatives = 0; } existentAlternatives |= header.getRepeatAlternative(); } for(int i = 0; i < 8; i ++){ if(value > i && (existentAlternatives & (1 << i)) == 0){ repeatAlternative |= (1 << i); } } return repeatAlternative; } private int getClef( TGTrack track ){ if( !track.isPercussionTrack() ){ Iterator it = track.getStrings().iterator(); while( it.hasNext() ){ TGString string = (TGString) it.next(); if( string.getValue() <= 34 ){ return TGMeasure.CLEF_BASS; } } } return TGMeasure.CLEF_TREBLE; } private TGBeat getBeat(TGTrack track, TGMeasure measure,long start){ TGBeat beat = getBeat(measure,start); if(beat == null){ for(int i = (track.countMeasures() - 1);i >=0; i-- ){ beat = getBeat(track.getMeasure(i),start); if(beat != null){ break; } } } return beat; } private TGBeat getBeat(TGMeasure measure,long start){ if(start >= measure.getStart() && start < (measure.getStart() + measure.getLength())){ Iterator beats = measure.getBeats().iterator(); while(beats.hasNext()){ TGBeat beat = (TGBeat)beats.next(); if(beat.getStart() == start){ return beat; } } } return null; } }tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStream.java0000644000175000017500000003763611273045345030020 0ustar julianjulian/* * Created on 09-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class GP3OutputStream extends GTPOutputStream{ private static final String GP3_FORMAT_EXTENSION = ".gp3"; private static final String GP3_VERSION = "FICHIER GUITAR PRO v3.00"; private static final int GP_BEND_SEMITONE = 25; private static final int GP_BEND_POSITION = 60; public GP3OutputStream(GTPSettings settings){ super(settings); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 3",("*" + GP3_FORMAT_EXTENSION)); } public boolean isSupportedExtension(String extension) { return (extension.toLowerCase().equals(GP3_FORMAT_EXTENSION)) ; } public void writeSong(TGSong song){ try { if(song.isEmpty()){ throw new TGFileFormatException("Empty Song!!!"); } TGMeasureHeader header = song.getMeasureHeader(0); writeStringByte(GP3_VERSION, 30, DEFAULT_VERSION_CHARSET); writeInfo(song); writeBoolean( (header.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH) ); writeInt(header.getTempo().getValue()); writeInt(0); writeChannels(song); writeInt(song.countMeasureHeaders()); writeInt(song.countTracks()); writeMeasureHeaders(song); writeTracks(song); writeMeasures(song,header.getTempo().clone(getFactory())); close(); } catch (Exception e) { e.printStackTrace(); } } private void writeInfo(TGSong song) throws IOException{ List comments = toCommentLines(song.getComments()); writeStringByteSizeOfInteger(song.getName()); writeStringByteSizeOfInteger(""); writeStringByteSizeOfInteger(song.getArtist()); writeStringByteSizeOfInteger(song.getAlbum()); writeStringByteSizeOfInteger(song.getAuthor()); writeStringByteSizeOfInteger(song.getCopyright()); writeStringByteSizeOfInteger(song.getWriter()); writeStringByteSizeOfInteger(""); writeInt( comments.size() ); for (int i = 0; i < comments.size(); i++) { writeStringByteSizeOfInteger( (String)comments.get(i) ); } } private void writeChannels(TGSong song) throws IOException{ TGChannel[] channels = makeChannels(song); for (int i = 0; i < channels.length; i++) { writeInt(channels[i].getInstrument()); writeByte(toChannelByte(channels[i].getVolume())); writeByte(toChannelByte(channels[i].getBalance())); writeByte(toChannelByte(channels[i].getChorus())); writeByte(toChannelByte(channels[i].getReverb())); writeByte(toChannelByte(channels[i].getPhaser())); writeByte(toChannelByte(channels[i].getTremolo())); writeBytes(new byte[]{0,0}); } } private void writeMeasureHeaders(TGSong song) throws IOException { TGTimeSignature timeSignature = getFactory().newTimeSignature(); if (song.countMeasureHeaders() > 0) { for (int i = 0; i < song.countMeasureHeaders(); i++) { TGMeasureHeader measure = song.getMeasureHeader(i); writeMeasureHeader(measure, timeSignature); timeSignature.setNumerator(measure.getTimeSignature().getNumerator()); timeSignature.getDenominator().setValue(measure.getTimeSignature().getDenominator().getValue()); } } } private void writeMeasures(TGSong song,TGTempo tempo) throws IOException{ for (int i = 0; i < song.countMeasureHeaders(); i++) { TGMeasureHeader header = song.getMeasureHeader(i); for (int j = 0; j < song.countTracks(); j++) { TGTrack track = song.getTrack(j); TGMeasure measure = track.getMeasure(i); writeMeasure(measure, (header.getTempo().getValue() != tempo.getValue()) ); } header.getTempo().copy( tempo ); } } private void writeMeasureHeader(TGMeasureHeader measure, TGTimeSignature timeSignature) throws IOException { int flags = 0; if (measure.getNumber() == 1 || measure.getTimeSignature().getNumerator() != timeSignature.getNumerator()) { flags |= 0x01; } if (measure.getNumber() == 1 || measure.getTimeSignature().getDenominator().getValue() != timeSignature.getDenominator().getValue()) { flags |= 0x02; } if (measure.isRepeatOpen()) { flags |= 0x04; } if (measure.getRepeatClose() > 0) { flags |= 0x08; } if (measure.hasMarker()) { flags |= 0x20; } writeUnsignedByte(flags); if ((flags & 0x01) != 0) { writeByte((byte) measure.getTimeSignature().getNumerator()); } if ((flags & 0x02) != 0) { writeByte((byte) measure.getTimeSignature().getDenominator().getValue()); } if ((flags & 0x08) != 0) { writeByte((byte) measure.getRepeatClose()); } if ((flags & 0x20) != 0) { writeMarker(measure.getMarker()); } } private void writeTracks(TGSong song) throws IOException { for (int i = 0; i < song.countTracks(); i++) { TGTrack track = song.getTrack(i); createTrack(track); } } private void createTrack(TGTrack track) throws IOException { int flags = 0; if (track.isPercussionTrack()) { flags |= 0x01; } writeUnsignedByte(flags); writeStringByte(track.getName(), 40); writeInt(track.getStrings().size()); for (int i = 0; i < 7; i++) { int value = 0; if (track.getStrings().size() > i) { TGString string = (TGString) track.getStrings().get(i); value = string.getValue(); } writeInt(value); } writeInt(1); writeInt(track.getChannel().getChannel() + 1); writeInt(track.getChannel().getEffectChannel() + 1); writeInt(24); writeInt(Math.min(Math.max(track.getOffset(),0),12)); writeColor(track.getColor()); } private void writeMeasure(TGMeasure srcMeasure, boolean changeTempo) throws IOException { TGMeasure measure = new GTPVoiceJoiner(getFactory(),srcMeasure).process(); int beatCount = measure.countBeats(); writeInt(beatCount); for (int i = 0; i < beatCount; i++) { TGBeat beat = measure.getBeat( i ); writeBeat(beat, measure, ( changeTempo && i == 0 ) ); } } private void writeBeat(TGBeat beat,TGMeasure measure, boolean changeTempo) throws IOException { TGVoice voice = beat.getVoice(0); TGDuration duration = voice.getDuration(); int flags = 0; if (duration.isDotted() || duration.isDoubleDotted() ) { flags |= 0x01; } if (!duration.getDivision().isEqual(TGDivisionType.NORMAL)) { flags |= 0x20; } if(beat.isTextBeat()){ flags |= 0x04; } if (changeTempo) { flags |= 0x10; } TGNoteEffect effect = null; if (voice.isRestVoice()) { flags |= 0x40; } else if(voice.countNotes() > 0){ TGNote note = voice.getNote(0); effect = note.getEffect(); if (effect.isVibrato() || effect.isTremoloBar() || effect.isTapping() || effect.isSlapping() || effect.isPopping() || effect.isHarmonic() || effect.isFadeIn() || beat.getStroke().getDirection() != TGStroke.STROKE_NONE) { flags |= 0x08; } } writeUnsignedByte(flags); if ((flags & 0x40) != 0) { writeUnsignedByte(2); } writeByte(parseDuration(duration)); if ((flags & 0x20) != 0) { writeInt(duration.getDivision().getEnters()); } if ((flags & 0x04) != 0) { writeText(beat.getText()); } if ((flags & 0x08) != 0) { writeBeatEffects(beat,effect); } if ((flags & 0x10) != 0) { writeMixChange(measure.getTempo()); } int stringFlags = 0; if (!voice.isRestVoice()) { for (int i = 0; i < voice.countNotes(); i++) { TGNote playedNote = voice.getNote(i); int string = (7 - playedNote.getString()); stringFlags |= (1 << string); } } writeUnsignedByte(stringFlags); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 ) { for( int n = 0; n < voice.countNotes(); n ++){ TGNote playedNote = voice.getNote( n ); if( playedNote.getString() == (6 - i + 1) ){ writeNote(playedNote); break; } } } } } private void writeNote(TGNote note) throws IOException { int flags = ( 0x20 | 0x10 ); if(note.getEffect().isGhostNote()){ flags |= 0x04; } if (note.getEffect().isBend() || note.getEffect().isGrace() || note.getEffect().isSlide() || note.getEffect().isHammer()) { flags |= 0x08; } writeUnsignedByte(flags); if ((flags & 0x20) != 0) { int typeHeader = 0x01; if (note.isTiedNote()) { typeHeader = 0x02; }else if(note.getEffect().isDeadNote()){ typeHeader = 0x03; } writeUnsignedByte(typeHeader); } if ((flags & 0x10) != 0) { writeByte((byte)(((note.getVelocity() - TGVelocities.MIN_VELOCITY) / TGVelocities.VELOCITY_INCREMENT) + 1)); } if ((flags & 0x20) != 0) { writeByte((byte) note.getValue()); } if ((flags & 0x08) != 0) { writeNoteEffects(note.getEffect()); } } private byte parseDuration(TGDuration duration) { byte value = 0; switch (duration.getValue()) { case TGDuration.WHOLE: value = -2; break; case TGDuration.HALF: value = -1; break; case TGDuration.QUARTER: value = 0; break; case TGDuration.EIGHTH: value = 1; break; case TGDuration.SIXTEENTH: value = 2; break; case TGDuration.THIRTY_SECOND: value = 3; break; case TGDuration.SIXTY_FOURTH: value = 4; break; } return value; } private void writeText(TGText text) throws IOException { writeStringByteSizeOfInteger(text.getValue()); } private void writeBeatEffects(TGBeat beat, TGNoteEffect noteEffect) throws IOException { int flags = 0; if (noteEffect.isVibrato()) { flags += 0x01; } if (noteEffect.isTremoloBar() || noteEffect.isTapping() || noteEffect.isSlapping() || noteEffect.isPopping()) { flags += 0x20; } if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){ flags |= 0x40; } if (noteEffect.isHarmonic() && noteEffect.getHarmonic().getType() == TGEffectHarmonic.TYPE_NATURAL) { flags += 0x04; } if (noteEffect.isHarmonic() && noteEffect.getHarmonic().getType() != TGEffectHarmonic.TYPE_NATURAL) { flags += 0x08; } if (noteEffect.isFadeIn()) { flags += 0x10; } writeUnsignedByte(flags); if ((flags & 0x20) != 0) { if (noteEffect.isTremoloBar()){ writeUnsignedByte(0); writeInt(100); } else if (noteEffect.isTapping()){ writeUnsignedByte(1); writeInt(0); } else if (noteEffect.isSlapping()){ writeUnsignedByte(2); writeInt(0); } else if (noteEffect.isPopping()){ writeUnsignedByte(3); writeInt(0); } } if ((flags & 0x40) != 0) { writeUnsignedByte( (beat.getStroke().getDirection() == TGStroke.STROKE_DOWN ? toStrokeValue(beat.getStroke()) : 0 ) ); writeUnsignedByte( (beat.getStroke().getDirection() == TGStroke.STROKE_UP ? toStrokeValue(beat.getStroke()) : 0 ) ); } } private void writeNoteEffects(TGNoteEffect effect) throws IOException { int flags = 0; if (effect.isBend()) { flags |= 0x01; } if (effect.isHammer()) { flags |= 0x02; } if (effect.isSlide()) { flags |= 0x04; } if (effect.isGrace()) { flags |= 0x10; } writeUnsignedByte(flags); if ((flags & 0x01) != 0) { writeBend(effect.getBend()); } if ((flags & 0x10) != 0) { writeGrace(effect.getGrace()); } } private void writeBend(TGEffectBend bend) throws IOException { int points = bend.getPoints().size(); writeByte((byte) 1); writeInt(0); writeInt(points); for (int i = 0; i < points; i++) { TGEffectBend.BendPoint point = (TGEffectBend.BendPoint) bend.getPoints().get(i); writeInt( (point.getPosition() * GP_BEND_POSITION / TGEffectBend.MAX_POSITION_LENGTH) ); writeInt( (point.getValue() * GP_BEND_SEMITONE / TGEffectBend.SEMITONE_LENGTH) ); writeByte((byte) 0); } } private void writeGrace(TGEffectGrace grace) throws IOException { if(grace.isDead()){ writeUnsignedByte(0xff); }else{ writeUnsignedByte(grace.getFret()); } writeUnsignedByte(((grace.getDynamic() - TGVelocities.MIN_VELOCITY) / TGVelocities.VELOCITY_INCREMENT) + 1); if(grace.getTransition() == TGEffectGrace.TRANSITION_NONE){ writeUnsignedByte(0); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_SLIDE){ writeUnsignedByte(1); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_BEND){ writeUnsignedByte(2); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_HAMMER){ writeUnsignedByte(3); } writeUnsignedByte(grace.getDuration()); } private void writeMixChange(TGTempo tempo) throws IOException { for (int i = 0; i < 7; i++) { writeByte((byte) -1); } writeInt(tempo.getValue()); writeByte((byte) 0); } private void writeMarker(TGMarker marker) throws IOException { writeStringByteSizeOfInteger(marker.getTitle()); writeColor(marker.getColor()); } private void writeColor(TGColor color) throws IOException { writeUnsignedByte(color.getR()); writeUnsignedByte(color.getG()); writeUnsignedByte(color.getB()); writeByte((byte)0); } private TGChannel[] makeChannels(TGSong song) { TGChannel[] channels = new TGChannel[64]; for (int i = 0; i < channels.length; i++) { channels[i] = getFactory().newChannel(); channels[i].setChannel((short)i); channels[i].setEffectChannel((short)i); channels[i].setInstrument((short)24); channels[i].setVolume((short)13); channels[i].setBalance((short)8); channels[i].setChorus((short)0); channels[i].setReverb((short)0); channels[i].setPhaser((short)0); channels[i].setTremolo((short)0); } Iterator it = song.getTracks(); while (it.hasNext()) { TGTrack track = (TGTrack) it.next(); channels[track.getChannel().getChannel()].setInstrument(track.getChannel().getInstrument()); channels[track.getChannel().getChannel()].setVolume(track.getChannel().getVolume()); channels[track.getChannel().getChannel()].setBalance(track.getChannel().getBalance()); channels[track.getChannel().getEffectChannel()].setInstrument(track.getChannel().getInstrument()); channels[track.getChannel().getEffectChannel()].setVolume(track.getChannel().getVolume()); channels[track.getChannel().getEffectChannel()].setBalance(track.getChannel().getBalance()); } return channels; } private int toStrokeValue( TGStroke stroke ){ if( stroke.getValue() == TGDuration.SIXTY_FOURTH ){ return 2; } if( stroke.getValue() == TGDuration.THIRTY_SECOND ){ return 3; } if( stroke.getValue() == TGDuration.SIXTEENTH ){ return 4; } if( stroke.getValue() == TGDuration.EIGHTH ){ return 5; } if( stroke.getValue() == TGDuration.QUARTER ){ return 6; } return 2; } private byte toChannelByte(short s){ return (byte) ((s + 1) / 8); } private List toCommentLines( String comments ){ List lines = new ArrayList(); String line = comments; while( line.length() > Byte.MAX_VALUE ) { String subline = line.substring(0, Byte.MAX_VALUE); lines.add( subline ); line = line.substring( Byte.MAX_VALUE ); } lines.add( line ); return lines; } }tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPFileFormat.java0000644000175000017500000000110611273045345027414 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import org.herac.tuxguitar.song.factory.TGFactory; public class GTPFileFormat { public static final String DEFAULT_TG_CHARSET = "UTF-8"; public static final String DEFAULT_VERSION_CHARSET = "UTF-8"; private GTPSettings settings; private TGFactory factory; public GTPFileFormat(GTPSettings settings){ this.settings = settings; } public void init(TGFactory factory) { this.factory = factory; } protected GTPSettings getSettings(){ return this.settings; } protected TGFactory getFactory(){ return this.factory; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsUtil.java0000644000175000017500000001046311273045345030030 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; public class GTPSettingsUtil { private static final String KEY_CHARSET = "charset"; private static GTPSettingsUtil instance; private TGConfigManager config; private GTPSettings settings; private GTPSettingsUtil(){ this.settings = new GTPSettings(); } public static GTPSettingsUtil instance(){ if( instance == null ){ instance = new GTPSettingsUtil(); } return instance; } public GTPSettings getSettings(){ return this.settings; } public TGConfigManager getConfig(){ if(this.config == null){ this.config = new TGPluginConfigManager("tuxguitar-gtp"); this.config.init(); } return this.config; } public void load(){ String charsetDefault = System.getProperty("file.encoding"); if( charsetDefault == null ){ charsetDefault = GTPSettings.DEFAULT_CHARSET; } this.settings.setCharset( getConfig().getStringConfigValue(KEY_CHARSET, charsetDefault) ); } public void configure(Shell parent) { final List charsets = getAvailableCharsets(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("gtp.settings.title")); //------------------DEVICE----------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("gtp.settings.charset.tip")); final Label label = new Label(group,SWT.LEFT); label.setText(TuxGuitar.getProperty("gtp.settings.charset.select") + ":"); final Combo value = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); value.setLayoutData(new GridData(250,SWT.DEFAULT)); for(int i = 0 ; i < charsets.size(); i ++){ String charset = (String)charsets.get(i); value.add( charset ); if(charset.equals(this.settings.getCharset())){ value.select( i ); } } //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int selection = value.getSelectionIndex(); if(selection >= 0 && selection < charsets.size() ){ TGConfigManager config = getConfig(); config.setProperty(KEY_CHARSET, (String)charsets.get(selection)); config.save(); load(); } dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private List getAvailableCharsets(){ List charsets = new ArrayList(); Iterator it = Charset.availableCharsets().entrySet().iterator(); while( it.hasNext() ){ Map.Entry entry = (Map.Entry) it.next(); charsets.add(entry.getKey()); } return charsets; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPFormatException.java0000644000175000017500000000111311273045345030471 0ustar julianjulian/* * Created on 19-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.gtp; import org.herac.tuxguitar.io.base.TGFileFormatException; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GTPFormatException extends TGFileFormatException { private static final long serialVersionUID = 1L; public GTPFormatException(String s) { super(s); } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPluginList.java0000644000175000017500000000473111273045345027465 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup; import org.herac.tuxguitar.gui.system.plugins.base.TGInputStreamPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGOutputStreamPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.io.base.TGOutputStreamBase; public class GTPPluginList extends TGPluginList implements TGPluginSetup{ protected List getPlugins() { GTPSettingsUtil.instance().load(); List plugins = new ArrayList(); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new GP5InputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new GP4InputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new GP3InputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new GP2InputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGInputStreamPlugin() { protected TGInputStreamBase getInputStream() { return new GP1InputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGOutputStreamPlugin() { protected TGOutputStreamBase getOutputStream() { return new GP5OutputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGOutputStreamPlugin() { protected TGOutputStreamBase getOutputStream() { return new GP4OutputStream(GTPSettingsUtil.instance().getSettings()); } }); plugins.add(new TGOutputStreamPlugin() { protected TGOutputStreamBase getOutputStream() { return new GP3OutputStream(GTPSettingsUtil.instance().getSettings()); } }); return plugins; } public void setupDialog(Shell parent) { GTPSettingsUtil.instance().configure(parent); } public String getAuthor() { return "Julian Casadesus "; } public String getName() { return "GPx File Format plugin"; } public String getDescription() { return "GPx File Format plugin for TuxGuitar"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStream.java0000644000175000017500000001074711273045345027652 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class GTPInputStream extends GTPFileFormat implements TGInputStreamBase{ private int versionIndex; private String version; private String[] versions; private InputStream stream; public GTPInputStream(GTPSettings settings, String[] versions){ super(settings); this.versions = versions; } public void init(TGFactory factory,InputStream stream) { super.init(factory); this.stream = stream; this.version = null; } protected String getVersion(){ return this.version; } protected int getVersionIndex(){ return this.versionIndex; } public boolean isSupportedVersion(String version) { for (int i = 0; i < this.versions.length; i++) { if (version.equals(this.versions[i])) { this.versionIndex = i; return true; } } return false; } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(getVersion()); }catch(Exception e){ return false; }catch(Error e){ return false; } } protected void readVersion(){ try { if(this.version == null){ this.version = readStringByte(30, DEFAULT_VERSION_CHARSET); } } catch (IOException e) { this.version = "NOT_SUPPORTED"; } } protected int read() throws IOException { return this.stream.read(); } protected int read(byte[] bytes) throws IOException { return this.stream.read(bytes); } protected int read(byte[] bytes,int off,int len) throws IOException { return this.stream.read(bytes,off,len); } protected void skip(int bytes) throws IOException{ this.stream.read(new byte[bytes]); } protected int readUnsignedByte() throws IOException { return (this.stream.read() & 0xff); } protected byte readByte() throws IOException { return ((byte)this.stream.read()); } protected boolean readBoolean() throws IOException { return (this.stream.read() == 1); } protected int readInt() throws IOException { byte[] bytes = new byte[4]; this.stream.read(bytes); return ((bytes[3] & 0xff) << 24) | ((bytes[2] & 0xff) << 16) | ((bytes[1] & 0xff) << 8) | (bytes[0] & 0xff); } protected long readLong() throws IOException { byte[] bytes = new byte[8]; this.stream.read(bytes); return ((long) (bytes[7] & 0xff) << 56) | ((long) (bytes[6] & 0xff) << 48) | ((long) (bytes[5] & 0xff) << 40) | ((long) (bytes[4] & 0xff) << 32) | ((long) (bytes[3] & 0xff) << 24) | ((long) (bytes[2] & 0xff) << 16) | ((long) (bytes[1] & 0xff) << 8) | (bytes[0] & 0xff); } protected String readString(int size, int len, String charset) throws IOException{ byte[] bytes = new byte[ (size > 0?size:len) ]; this.stream.read(bytes); return newString(bytes,(len >= 0?len:size), charset); } protected String readString(int length, String charset) throws IOException{ return readString(length, length, charset); } protected String readString(int length) throws IOException{ return readString(length, getSettings().getCharset()); } protected String readStringInteger(String charset) throws IOException { return readString( readInt(), charset); } protected String readStringInteger() throws IOException { return readStringInteger( getSettings().getCharset() ); } protected String readStringByte(int size, String charset) throws IOException { return readString( size, readUnsignedByte(), charset); } protected String readStringByte(int size) throws IOException { return readStringByte( size, getSettings().getCharset() ); } protected String readStringByteSizeOfByte(String charset) throws IOException { return readStringByte( (readUnsignedByte() - 1), charset); } protected String readStringByteSizeOfByte() throws IOException { return readStringByteSizeOfByte( getSettings().getCharset() ); } protected String readStringByteSizeOfInteger(String charset) throws IOException { return readStringByte( (readInt() - 1), charset); } protected String readStringByteSizeOfInteger() throws IOException { return readStringByteSizeOfInteger( getSettings().getCharset() ); } private String newString(byte[] bytes, int length, String charset) { try { return new String(new String(bytes, 0, length, charset).getBytes(DEFAULT_TG_CHARSET), DEFAULT_TG_CHARSET); } catch (Throwable e) { e.printStackTrace(); } return new String(bytes, 0, length); } protected void close() throws IOException{ this.stream.close(); } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStream.java0000644000175000017500000004763411273045345030020 0ustar julianjulian/* * Created on 09-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class GP4OutputStream extends GTPOutputStream{ private static final String GP4_FORMAT_EXTENSION = ".gp4"; private static final String GP4_VERSION = "FICHIER GUITAR PRO v4.00"; private static final int GP_BEND_SEMITONE = 25; private static final int GP_BEND_POSITION = 60; public GP4OutputStream(GTPSettings settings){ super(settings); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 4","*.gp4"); } public boolean isSupportedExtension(String extension) { return (extension.toLowerCase().equals(GP4_FORMAT_EXTENSION)) ; } public void writeSong(TGSong song) { try { if(song.isEmpty()){ throw new TGFileFormatException("Empty Song!!!"); } TGMeasureHeader header = song.getMeasureHeader(0); writeStringByte(GP4_VERSION, 30, DEFAULT_VERSION_CHARSET); writeInfo(song); writeBoolean( (header.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH) ); writeLyrics(song); writeInt(header.getTempo().getValue()); writeInt(0); writeByte((byte)0); writeChannels(song); writeInt(song.countMeasureHeaders()); writeInt(song.countTracks()); writeMeasures(song); writeTracks(song); writeMeasures(song, header.getTempo().clone(getFactory())); close(); } catch (Exception e) { e.printStackTrace(); } } private void writeInfo(TGSong song) throws IOException{ List comments = toCommentLines(song.getComments()); writeStringByteSizeOfInteger(song.getName()); writeStringByteSizeOfInteger(""); writeStringByteSizeOfInteger(song.getArtist()); writeStringByteSizeOfInteger(song.getAlbum()); writeStringByteSizeOfInteger(song.getAuthor()); writeStringByteSizeOfInteger(song.getCopyright()); writeStringByteSizeOfInteger(song.getWriter()); writeStringByteSizeOfInteger(""); writeInt( comments.size() ); for (int i = 0; i < comments.size(); i++) { writeStringByteSizeOfInteger( (String)comments.get(i) ); } } private void writeChannels(TGSong song) throws IOException{ TGChannel[] channels = makeChannels(song); for (int i = 0; i < channels.length; i++) { writeInt(channels[i].getInstrument()); writeByte(toChannelByte(channels[i].getVolume())); writeByte(toChannelByte(channels[i].getBalance())); writeByte(toChannelByte(channels[i].getChorus())); writeByte(toChannelByte(channels[i].getReverb())); writeByte(toChannelByte(channels[i].getPhaser())); writeByte(toChannelByte(channels[i].getTremolo())); writeBytes(new byte[]{0,0}); } } private void writeMeasures(TGSong song, TGTempo tempo) throws IOException{ for (int i = 0; i < song.countMeasureHeaders(); i++) { TGMeasureHeader header = song.getMeasureHeader(i); for (int j = 0; j < song.countTracks(); j++) { TGTrack track = song.getTrack(j); TGMeasure measure = track.getMeasure(i); writeMeasure(measure, (header.getTempo().getValue() != tempo.getValue()) ); } header.getTempo().copy( tempo ); } } private void writeLyrics(TGSong song) throws IOException{ TGTrack lyricTrack = null; Iterator it = song.getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); if(!track.getLyrics().isEmpty()){ lyricTrack = track; break; } } writeInt( (lyricTrack == null)?0:lyricTrack.getNumber() ); writeInt((lyricTrack == null)?0:lyricTrack.getLyrics().getFrom()); writeStringInteger((lyricTrack == null)?"":lyricTrack.getLyrics().getLyrics()); for (int i = 0; i < 4; i++) { writeInt((lyricTrack == null)?0:1); writeStringInteger(""); } } private void writeMeasures(TGSong song) throws IOException { TGTimeSignature timeSignature = getFactory().newTimeSignature(); if (song.countMeasureHeaders() > 0) { for (int i = 0; i < song.countMeasureHeaders(); i++) { TGMeasureHeader measure = song.getMeasureHeader(i); writeMeasureHeader(measure, timeSignature); timeSignature.setNumerator(measure.getTimeSignature().getNumerator()); timeSignature.getDenominator().setValue(measure.getTimeSignature().getDenominator().getValue()); } } } private void writeMeasureHeader(TGMeasureHeader measure, TGTimeSignature timeSignature) throws IOException { int flags = 0; if (measure.getNumber() == 1 || measure.getTimeSignature().getNumerator() != timeSignature.getNumerator()) { flags |= 0x01; } if (measure.getNumber() == 1 || measure.getTimeSignature().getDenominator().getValue() != timeSignature.getDenominator().getValue()) { flags |= 0x02; } if (measure.isRepeatOpen()) { flags |= 0x04; } if (measure.getRepeatClose() > 0) { flags |= 0x08; } if (measure.hasMarker()) { flags |= 0x20; } writeUnsignedByte(flags); if ((flags & 0x01) != 0) { writeByte((byte) measure.getTimeSignature().getNumerator()); } if ((flags & 0x02) != 0) { writeByte((byte) measure.getTimeSignature().getDenominator().getValue()); } if ((flags & 0x08) != 0) { writeByte((byte) measure.getRepeatClose()); } if ((flags & 0x20) != 0) { writeMarker(measure.getMarker()); } } private void writeTracks(TGSong song) throws IOException { for (int i = 0; i < song.countTracks(); i++) { TGTrack track = song.getTrack(i); writeTrack(track); } } private void writeTrack(TGTrack track) throws IOException { int flags = 0; if (track.isPercussionTrack()) { flags |= 0x01; } writeUnsignedByte(flags); writeStringByte(track.getName(), 40); writeInt(track.getStrings().size()); for (int i = 0; i < 7; i++) { int value = 0; if (track.getStrings().size() > i) { TGString string = (TGString) track.getStrings().get(i); value = string.getValue(); } writeInt(value); } writeInt(1); writeInt(track.getChannel().getChannel() + 1); writeInt(track.getChannel().getEffectChannel() + 1); writeInt(24); writeInt(Math.min(Math.max(track.getOffset(),0),12)); writeColor(track.getColor()); } private void writeMeasure(TGMeasure srcMeasure, boolean changeTempo) throws IOException { TGMeasure measure = new GTPVoiceJoiner(getFactory(),srcMeasure).process(); int beatCount = measure.countBeats(); writeInt(beatCount); for (int i = 0; i < beatCount; i++) { TGBeat beat = measure.getBeat( i ); writeBeat(beat, measure, ( changeTempo && i == 0 )); } } private void writeBeat(TGBeat beat, TGMeasure measure, boolean changeTempo) throws IOException { TGVoice voice = beat.getVoice(0); TGDuration duration = voice.getDuration(); TGNoteEffect effect = getFactory().newEffect(); for (int i = 0; i < voice.countNotes(); i++) { TGNote playedNote = voice.getNote(i); if(playedNote.getEffect().isFadeIn()){ effect.setFadeIn(true); } if(playedNote.getEffect().isTremoloBar()){ effect.setTremoloBar(playedNote.getEffect().getTremoloBar().clone(getFactory())); } if(playedNote.getEffect().isTapping()){ effect.setTapping(true); } if(playedNote.getEffect().isSlapping()){ effect.setSlapping(true); } if(playedNote.getEffect().isPopping()){ effect.setPopping(true); } } int flags = 0; if (duration.isDotted() || duration.isDoubleDotted() ) { flags |= 0x01; } if(beat.isChordBeat()){ flags |= 0x02; } if(beat.isTextBeat()){ flags |= 0x04; } if ( beat.getStroke().getDirection() != TGStroke.STROKE_NONE ){ flags |= 0x08; } else if (effect.isTremoloBar() || effect.isTapping() || effect.isSlapping() || effect.isPopping() || effect.isFadeIn()) { flags |= 0x08; } if (!duration.getDivision().isEqual(TGDivisionType.NORMAL)) { flags |= 0x20; } if (changeTempo) { flags |= 0x10; } if (voice.isRestVoice()) { flags |= 0x40; } writeUnsignedByte(flags); if ((flags & 0x40) != 0) { writeUnsignedByte(0x02); } writeByte(parseDuration(duration)); if ((flags & 0x20) != 0) { writeInt(duration.getDivision().getEnters()); } if ((flags & 0x02) != 0) { writeChord(beat.getChord()); } if ((flags & 0x04) != 0) { writeText(beat.getText()); } if ((flags & 0x08) != 0) { writeBeatEffects(beat,effect); } if ((flags & 0x10) != 0) { writeMixChange(measure.getTempo()); } int stringFlags = 0; if (!voice.isRestVoice()) { for (int i = 0; i < voice.countNotes(); i++) { TGNote playedNote = voice.getNote(i); int string = (7 - playedNote.getString()); stringFlags |= (1 << string); } } writeUnsignedByte(stringFlags); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 ) { for( int n = 0; n < voice.countNotes(); n ++){ TGNote playedNote = voice.getNote( n ); if( playedNote.getString() == (6 - i + 1) ){ writeNote(playedNote); break; } } } } } private void writeNote(TGNote note) throws IOException { int flags = ( 0x20 | 0x10 ); if(note.getEffect().isGhostNote()){ flags |= 0x04; } if(note.getEffect().isAccentuatedNote()){ flags |= 0x40; } if (note.getEffect().isVibrato() || note.getEffect().isBend() || note.getEffect().isGrace() || note.getEffect().isSlide() || note.getEffect().isHammer() || note.getEffect().isPalmMute() || note.getEffect().isStaccato() || note.getEffect().isTapping() || note.getEffect().isSlapping() || note.getEffect().isPopping() || note.getEffect().isHarmonic() || note.getEffect().isTremoloPicking() || note.getEffect().isTrill()) { flags |= 0x08; } writeUnsignedByte(flags); if ((flags & 0x20) != 0) { int typeHeader = 0x01; if (note.isTiedNote()) { typeHeader = 0x02; }else if(note.getEffect().isDeadNote()){ typeHeader = 0x03; } writeUnsignedByte(typeHeader); } if ((flags & 0x10) != 0) { writeByte((byte)(((note.getVelocity() - TGVelocities.MIN_VELOCITY) / TGVelocities.VELOCITY_INCREMENT) + 1)); } if ((flags & 0x20) != 0) { writeByte((byte) note.getValue()); } if ((flags & 0x08) != 0) { writeNoteEffects(note.getEffect()); } } private byte parseDuration(TGDuration duration) { byte value = 0; switch (duration.getValue()) { case TGDuration.WHOLE: value = -2; break; case TGDuration.HALF: value = -1; break; case TGDuration.QUARTER: value = 0; break; case TGDuration.EIGHTH: value = 1; break; case TGDuration.SIXTEENTH: value = 2; break; case TGDuration.THIRTY_SECOND: value = 3; break; case TGDuration.SIXTY_FOURTH: value = 4; break; } return value; } private void writeText(TGText text) throws IOException{ writeStringByteSizeOfInteger(text.getValue()); } private void writeChord(TGChord chord) throws IOException{ writeUnsignedByte( 0x01 ); skipBytes(16); writeStringByte(chord.getName(),21); skipBytes(4); writeInt(chord.getFirstFret()); for (int i = 0; i < 7; i++) { writeInt( (i < chord.countStrings() ? chord.getFretValue(i) : -1 ) ) ; } skipBytes(32); } private void writeBeatEffects(TGBeat beat,TGNoteEffect effect) throws IOException{ int flags1 = 0; int flags2 = 0; if(effect.isFadeIn()){ flags1 |= 0x10; } if(effect.isTapping() || effect.isSlapping() || effect.isPopping()){ flags1 |= 0x20; } if(effect.isTremoloBar()){ flags2 |= 0x04; } if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){ flags1 |= 0x40; } writeUnsignedByte(flags1); writeUnsignedByte(flags2); if ((flags1 & 0x20) != 0) { if(effect.isTapping()){ writeUnsignedByte(1); }else if(effect.isSlapping()){ writeUnsignedByte(2); }else if(effect.isPopping()){ writeUnsignedByte(3); } } if ((flags2 & 0x04) != 0) { writeTremoloBar(effect.getTremoloBar()); } if ((flags1 & 0x40) != 0) { writeUnsignedByte( (beat.getStroke().getDirection() == TGStroke.STROKE_DOWN ? toStrokeValue(beat.getStroke()) : 0 ) ); writeUnsignedByte( (beat.getStroke().getDirection() == TGStroke.STROKE_UP ? toStrokeValue(beat.getStroke()) : 0 ) ); } } private void writeNoteEffects(TGNoteEffect effect) throws IOException { int flags1 = 0; int flags2 = 0; if (effect.isBend()) { flags1 |= 0x01; } if (effect.isHammer()) { flags1 |= 0x02; } if (effect.isGrace()) { flags1 |= 0x10; } if(effect.isStaccato()){ flags2 |= 0x01; } if(effect.isPalmMute()){ flags2 |= 0x02; } if(effect.isTremoloPicking()){ flags2 |= 0x04; } if (effect.isSlide()) { flags2 |= 0x08; } if (effect.isVibrato()) { flags2 |= 0x40; } if(effect.isHarmonic()){ flags2 |= 0x10; } if(effect.isTrill()){ flags2 |= 0x20; } writeUnsignedByte(flags1); writeUnsignedByte(flags2); if ((flags1 & 0x01) != 0) { writeBend(effect.getBend()); } if ((flags1 & 0x10) != 0) { writeGrace(effect.getGrace()); } if ((flags2 & 0x04) != 0) { writeTremoloPicking(effect.getTremoloPicking()); } if ((flags2 & 0x08) != 0) { writeByte((byte)1); } if ((flags2 & 0x10) != 0) { if(effect.getHarmonic().getType() == TGEffectHarmonic.TYPE_NATURAL){ writeByte((byte)1); }else if(effect.getHarmonic().getType() == TGEffectHarmonic.TYPE_TAPPED){ writeByte((byte)3); }else if(effect.getHarmonic().getType() == TGEffectHarmonic.TYPE_PINCH){ writeByte((byte)4); }else if(effect.getHarmonic().getType() == TGEffectHarmonic.TYPE_SEMI){ writeByte((byte)5); }else if(effect.getHarmonic().getType() == TGEffectHarmonic.TYPE_ARTIFICIAL){ writeByte((byte)15); } } if ((flags2 & 0x20) != 0) { writeByte((byte)effect.getTrill().getFret()); if(effect.getTrill().getDuration().getValue() == TGDuration.SIXTEENTH){ writeByte((byte)1); }else if(effect.getTrill().getDuration().getValue() == TGDuration.THIRTY_SECOND){ writeByte((byte)2); }else if(effect.getTrill().getDuration().getValue() == TGDuration.SIXTY_FOURTH){ writeByte((byte)3); } } } private void writeBend(TGEffectBend bend) throws IOException { int points = bend.getPoints().size(); writeByte((byte) 1); writeInt(0); writeInt(points); for (int i = 0; i < points; i++) { TGEffectBend.BendPoint point = (TGEffectBend.BendPoint) bend.getPoints().get(i); writeInt( (point.getPosition() * GP_BEND_POSITION / TGEffectBend.MAX_POSITION_LENGTH) ); writeInt( (point.getValue() * GP_BEND_SEMITONE / TGEffectBend.SEMITONE_LENGTH) ); writeByte((byte) 0); } } private void writeTremoloBar(TGEffectTremoloBar effect) throws IOException { int points = effect.getPoints().size(); writeByte((byte) 6); writeInt(0); writeInt(points); for (int i = 0; i < points; i++) { TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint) effect.getPoints().get(i); writeInt( (point.getPosition() * GP_BEND_POSITION / TGEffectTremoloBar.MAX_POSITION_LENGTH) ); writeInt( (point.getValue() * (GP_BEND_SEMITONE * 2)) ); writeByte((byte) 0); } } public void writeTremoloPicking(TGEffectTremoloPicking effect) throws IOException{ if(effect.getDuration().getValue() == TGDuration.EIGHTH){ writeUnsignedByte(1); }else if(effect.getDuration().getValue() == TGDuration.SIXTEENTH){ writeUnsignedByte(2); }else if(effect.getDuration().getValue() == TGDuration.THIRTY_SECOND){ writeUnsignedByte(3); } } private void writeGrace(TGEffectGrace grace) throws IOException { if(grace.isDead()){ writeUnsignedByte(255); }else{ writeUnsignedByte(grace.getFret()); } writeUnsignedByte(((grace.getDynamic() - TGVelocities.MIN_VELOCITY) / TGVelocities.VELOCITY_INCREMENT) + 1); if(grace.getTransition() == TGEffectGrace.TRANSITION_NONE){ writeUnsignedByte(0); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_SLIDE){ writeUnsignedByte(1); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_BEND){ writeUnsignedByte(2); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_HAMMER){ writeUnsignedByte(3); } writeUnsignedByte(grace.getDuration()); } private void writeMixChange(TGTempo tempo) throws IOException { for (int i = 0; i < 7; i++) { writeByte((byte) -1); } writeInt(tempo.getValue()); writeByte((byte) 0); writeUnsignedByte(1); } private void writeMarker(TGMarker marker) throws IOException { writeStringByteSizeOfInteger(marker.getTitle()); writeColor(marker.getColor()); } private void writeColor(TGColor color) throws IOException { writeUnsignedByte(color.getR()); writeUnsignedByte(color.getG()); writeUnsignedByte(color.getB()); writeByte((byte)0); } private TGChannel[] makeChannels(TGSong song) { TGChannel[] channels = new TGChannel[64]; for (int i = 0; i < channels.length; i++) { channels[i] = getFactory().newChannel(); channels[i].setChannel((short)i); channels[i].setEffectChannel((short)i); channels[i].setInstrument((short)24); channels[i].setVolume((short)13); channels[i].setBalance((short)8); channels[i].setChorus((short)0); channels[i].setReverb((short)0); channels[i].setPhaser((short)0); channels[i].setTremolo((short)0); } Iterator it = song.getTracks(); while (it.hasNext()) { TGTrack track = (TGTrack) it.next(); channels[track.getChannel().getChannel()].setInstrument(track.getChannel().getInstrument()); channels[track.getChannel().getChannel()].setVolume(track.getChannel().getVolume()); channels[track.getChannel().getChannel()].setBalance(track.getChannel().getBalance()); channels[track.getChannel().getEffectChannel()].setInstrument(track.getChannel().getInstrument()); channels[track.getChannel().getEffectChannel()].setVolume(track.getChannel().getVolume()); channels[track.getChannel().getEffectChannel()].setBalance(track.getChannel().getBalance()); } return channels; } private int toStrokeValue( TGStroke stroke ){ if( stroke.getValue() == TGDuration.SIXTY_FOURTH ){ return 2; } if( stroke.getValue() == TGDuration.THIRTY_SECOND ){ return 3; } if( stroke.getValue() == TGDuration.SIXTEENTH ){ return 4; } if( stroke.getValue() == TGDuration.EIGHTH ){ return 5; } if( stroke.getValue() == TGDuration.QUARTER ){ return 6; } return 2; } private byte toChannelByte(short s){ return (byte) ((s + 1) / 8); } private List toCommentLines( String comments ){ List lines = new ArrayList(); String line = comments; while( line.length() > Byte.MAX_VALUE ) { String subline = line.substring(0, Byte.MAX_VALUE); lines.add( subline ); line = line.substring( Byte.MAX_VALUE ); } lines.add( line ); return lines; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettings.java0000644000175000017500000000052711273045345027172 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; public class GTPSettings { public static final String DEFAULT_CHARSET = "UTF-8"; private String charset; public GTPSettings(){ this.charset = DEFAULT_CHARSET; } public String getCharset() { return this.charset; } public void setCharset(String charset) { this.charset = charset; } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPVoiceJoiner.java0000644000175000017500000000670611273045345027613 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGVoice; public class GTPVoiceJoiner { private TGFactory factory; private TGMeasure measure; public GTPVoiceJoiner(TGFactory factory,TGMeasure measure){ this.factory = factory; this.measure = measure.clone(factory, measure.getHeader()); this.measure.setTrack( measure.getTrack() ); } public TGMeasure process(){ this.orderBeats(); this.joinBeats(); return this.measure; } public void joinBeats(){ TGBeat previous = null; boolean finish = true; long measureStart = this.measure.getStart(); long measureEnd = (measureStart + this.measure.getLength()); for(int i = 0;i < this.measure.countBeats();i++){ TGBeat beat = this.measure.getBeat( i ); TGVoice voice = beat.getVoice(0); for(int v = 1; v < beat.countVoices(); v++ ){ TGVoice currentVoice = beat.getVoice(v); if(!currentVoice.isEmpty()){ for(int n = 0 ; n < currentVoice.countNotes() ; n++ ){ TGNote note = currentVoice.getNote( n ); voice.addNote( note ); } } } if( voice.isEmpty() ){ this.measure.removeBeat(beat); finish = false; break; } long beatStart = beat.getStart(); if(previous != null){ long previousStart = previous.getStart(); TGDuration previousBestDuration = null; for(int v = /*1*/0; v < previous.countVoices(); v++ ){ TGVoice previousVoice = previous.getVoice(v); if(!previousVoice.isEmpty()){ long length = previousVoice.getDuration().getTime(); if( (previousStart + length) <= beatStart){ if( previousBestDuration == null || length > previousBestDuration.getTime() ){ previousBestDuration = previousVoice.getDuration(); } } } } if(previousBestDuration != null){ previousBestDuration.copy( previous.getVoice(0).getDuration() ); }else{ if(voice.isRestVoice()){ this.measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (beatStart - previousStart) ); duration.copy( previous.getVoice(0).getDuration() ); } } TGDuration beatBestDuration = null; for(int v = /*1*/0; v < beat.countVoices(); v++ ){ TGVoice currentVoice = beat.getVoice(v); if(!currentVoice.isEmpty()){ long length = currentVoice.getDuration().getTime(); if( (beatStart + length) <= measureEnd ){ if( beatBestDuration == null || length > beatBestDuration.getTime() ){ beatBestDuration = currentVoice.getDuration(); } } } } if(beatBestDuration == null){ if(voice.isRestVoice()){ this.measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (measureEnd - beatStart) ); duration.copy( voice.getDuration() ); } previous = beat; } if(!finish){ joinBeats(); } } public void orderBeats(){ for(int i = 0;i < this.measure.countBeats();i++){ TGBeat minBeat = null; for(int j = i;j < this.measure.countBeats();j++){ TGBeat beat = this.measure.getBeat(j); if(minBeat == null || beat.getStart() < minBeat.getStart()){ minBeat = beat; } } this.measure.moveBeat(i, minBeat); } } } tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStream.java0000644000175000017500000005612011273045345030007 0ustar julianjulian/* * Created on 09-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class GP5OutputStream extends GTPOutputStream { private static final String GP5_FORMAT_EXTENSION = ".gp5"; private static final String GP5_VERSION = "FICHIER GUITAR PRO v5.00"; private static final int GP_BEND_SEMITONE = 25; private static final int GP_BEND_POSITION = 60; private static final String[] PAGE_SETUP_LINES = { "%TITLE%", "%SUBTITLE%", "%ARTIST%", "%ALBUM%", "Words by %WORDS%", "Music by %MUSIC%", "Words & Music by %WORDSMUSIC%", "Copyright %COPYRIGHT%", "All Rights Reserved - International Copyright Secured", "Page %N%/%P%", "Moderate", }; public GP5OutputStream(GTPSettings settings) { super(settings); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 5","*.gp5"); } public boolean isSupportedExtension(String extension) { return (extension.toLowerCase().equals(GP5_FORMAT_EXTENSION)) ; } public void writeSong(TGSong song){ try { if(song.isEmpty()){ throw new TGFileFormatException("Empty Song!!!"); } TGMeasureHeader header = song.getMeasureHeader(0); writeStringByte(GP5_VERSION, 30, DEFAULT_VERSION_CHARSET); writeInfo(song); writeLyrics(song); writePageSetup(); writeInt(header.getTempo().getValue()); writeInt(0); writeByte((byte)0); writeChannels(song); for(int i = 0; i < 42; i ++){ writeByte((byte)0xff); } writeInt(song.countMeasureHeaders()); writeInt(song.countTracks()); writeMeasureHeaders(song); writeTracks(song); skipBytes(2); writeMeasures(song, header.getTempo().clone(getFactory())); close(); } catch (Exception e) { e.printStackTrace(); } } private void writeInfo(TGSong song) throws IOException{ List comments = toCommentLines(song.getComments()); writeStringByteSizeOfInteger(song.getName()); writeStringByteSizeOfInteger(""); writeStringByteSizeOfInteger(song.getArtist()); writeStringByteSizeOfInteger(song.getAlbum()); writeStringByteSizeOfInteger(song.getAuthor()); writeStringByteSizeOfInteger(""); writeStringByteSizeOfInteger(song.getCopyright()); writeStringByteSizeOfInteger(song.getWriter()); writeStringByteSizeOfInteger(""); writeInt( comments.size() ); for (int i = 0; i < comments.size(); i++) { writeStringByteSizeOfInteger( (String)comments.get(i) ); } } private void writeLyrics(TGSong song) throws IOException{ TGTrack lyricTrack = null; Iterator it = song.getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); if(!track.getLyrics().isEmpty()){ lyricTrack = track; break; } } writeInt( (lyricTrack == null)?0:lyricTrack.getNumber() ); writeInt((lyricTrack == null)?0:lyricTrack.getLyrics().getFrom()); writeStringInteger((lyricTrack == null)?"":lyricTrack.getLyrics().getLyrics()); for (int i = 0; i < 4; i++) { writeInt((lyricTrack == null)?0:1); writeStringInteger(""); } } private void writePageSetup() throws IOException{ writeInt( 210 ); // Page width writeInt( 297 ); // Page height writeInt( 10 ); // Margin left writeInt( 10 ); // Margin right writeInt( 15 ); // Margin top writeInt( 10 ); // Margin bottom writeInt( 100 ); // Score size percent writeByte( ( byte )0xff ); // View flags writeByte( ( byte )0x01 ); // View flags for (int i = 0; i < PAGE_SETUP_LINES.length; i++) { writeInt( (PAGE_SETUP_LINES[i].length() + 1) ); writeStringByte(PAGE_SETUP_LINES[i],0); } } private void writeChannels(TGSong song) throws IOException{ TGChannel[] channels = makeChannels(song); for (int i = 0; i < channels.length; i++) { writeInt(channels[i].getInstrument()); writeByte(toChannelByte(channels[i].getVolume())); writeByte(toChannelByte(channels[i].getBalance())); writeByte(toChannelByte(channels[i].getChorus())); writeByte(toChannelByte(channels[i].getReverb())); writeByte(toChannelByte(channels[i].getPhaser())); writeByte(toChannelByte(channels[i].getTremolo())); writeBytes(new byte[]{0,0}); } } private void writeMeasureHeaders(TGSong song) throws IOException { TGTimeSignature timeSignature = getFactory().newTimeSignature(); if (song.countMeasureHeaders() > 0) { for (int i = 0; i < song.countMeasureHeaders(); i++) { if(i > 0 ){ skipBytes(1); } TGMeasureHeader measure = song.getMeasureHeader(i); writeMeasureHeader(measure, timeSignature); timeSignature.setNumerator(measure.getTimeSignature().getNumerator()); timeSignature.getDenominator().setValue(measure.getTimeSignature().getDenominator().getValue()); } } } private void writeMeasureHeader(TGMeasureHeader measure, TGTimeSignature timeSignature) throws IOException { int flags = 0; if(measure.getNumber() == 1){ flags |= 0x40; } if (measure.getNumber() == 1 || !measure.getTimeSignature().isEqual(timeSignature)) { flags |= 0x01; flags |= 0x02; } if (measure.isRepeatOpen()) { flags |= 0x04; } if (measure.getRepeatClose() > 0) { flags |= 0x08; } if (measure.getRepeatAlternative() > 0) { flags |= 0x10; } if (measure.hasMarker()) { flags |= 0x20; } writeUnsignedByte(flags); if ((flags & 0x01) != 0) { writeByte((byte) measure.getTimeSignature().getNumerator()); } if ((flags & 0x02) != 0) { writeByte((byte) measure.getTimeSignature().getDenominator().getValue()); } if ((flags & 0x08) != 0) { writeByte((byte) (measure.getRepeatClose() + 1)); } if ((flags & 0x20) != 0) { writeMarker(measure.getMarker()); } if ((flags & 0x10) != 0) { writeByte((byte)measure.getRepeatAlternative()); } if ((flags & 0x40) != 0) { skipBytes(2); } if ((flags & 0x01) != 0) { writeBytes( makeBeamEighthNoteBytes( measure.getTimeSignature() )); } if((flags & 0x10) == 0){ writeByte((byte)0); } if(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE){ writeByte((byte)0); } else if(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){ writeByte((byte)1); } else if(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){ writeByte((byte)2); } } private void writeTracks(TGSong song) throws IOException { for (int i = 0; i < song.countTracks(); i++) { TGTrack track = song.getTrack(i); writeTrack(track); } } private void writeTrack(TGTrack track) throws IOException { int flags = 0; if (track.isPercussionTrack()) { flags |= 0x01; } writeUnsignedByte(flags); writeByte((byte)8); writeStringByte(track.getName(), 40); writeInt(track.getStrings().size()); for (int i = 0; i < 7; i++) { int value = 0; if (track.getStrings().size() > i) { TGString string = (TGString) track.getStrings().get(i); value = string.getValue(); } writeInt(value); } writeInt(1); writeInt(track.getChannel().getChannel() + 1); writeInt(track.getChannel().getEffectChannel() + 1); writeInt(24); writeInt(track.getOffset()); writeColor(track.getColor()); writeBytes(new byte[]{ 67, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}); } private void writeMeasures(TGSong song, TGTempo tempo) throws IOException{ for (int i = 0; i < song.countMeasureHeaders(); i++) { TGMeasureHeader header = song.getMeasureHeader(i); for (int j = 0; j < song.countTracks(); j++) { TGTrack track = song.getTrack(j); TGMeasure measure = track.getMeasure(i); writeMeasure(measure, (header.getTempo().getValue() != tempo.getValue()) ); skipBytes(1); } header.getTempo().copy( tempo ); } } private void writeMeasure(TGMeasure measure, boolean changeTempo) throws IOException { for(int v = 0; v < 2 ; v ++){ List voices = new ArrayList(); for (int m = 0; m < measure.countBeats(); m ++) { TGBeat beat = measure.getBeat( m ); if( v < beat.countVoices() ){ TGVoice voice = beat.getVoice( v ); if(!voice.isEmpty()){ voices.add( voice ); } } } if( voices.size() > 0 ){ writeInt( voices.size() ); for( int i = 0; i < voices.size() ; i ++ ){ TGVoice voice = (TGVoice) voices.get( i ); writeBeat(voice, voice.getBeat(), measure, ( changeTempo && i == 0 ) ); } }else{ // Fill empty voices. int count = measure.getTimeSignature().getNumerator(); TGBeat beat = getFactory().newBeat(); if( v < beat.countVoices() ){ TGVoice voice = beat.getVoice( v ); voice.getDuration().setValue( measure.getTimeSignature().getDenominator().getValue() ); voice.setEmpty(true); writeInt( count ); for( int i = 0; i < count ; i ++ ){ writeBeat(voice, voice.getBeat(), measure, ( changeTempo && i == 0 )); } } } } } private void writeBeat(TGVoice voice, TGBeat beat, TGMeasure measure, boolean changeTempo) throws IOException { TGDuration duration = voice.getDuration(); TGNoteEffect effect = getFactory().newEffect(); for (int i = 0; i < voice.countNotes(); i++) { TGNote playedNote = voice.getNote(i); if(playedNote.getEffect().isFadeIn()){ effect.setFadeIn(true); } if(playedNote.getEffect().isTremoloBar()){ effect.setTremoloBar(playedNote.getEffect().getTremoloBar().clone(getFactory())); } if(playedNote.getEffect().isTapping()){ effect.setTapping(true); } if(playedNote.getEffect().isSlapping()){ effect.setSlapping(true); } if(playedNote.getEffect().isPopping()){ effect.setPopping(true); } } int flags = 0; if (duration.isDotted() || duration.isDoubleDotted()) { flags |= 0x01; } if (voice.getIndex() == 0 && beat.isChordBeat()) { flags |= 0x02; } if (voice.getIndex() == 0 && beat.isTextBeat()) { flags |= 0x04; } if ( beat.getStroke().getDirection() != TGStroke.STROKE_NONE ){ flags |= 0x08; } else if (effect.isTremoloBar() || effect.isTapping() || effect.isSlapping() || effect.isPopping() || effect.isFadeIn()) { flags |= 0x08; } if (changeTempo) { flags |= 0x10; } if (!duration.getDivision().isEqual(TGDivisionType.NORMAL)) { flags |= 0x20; } if (voice.isEmpty() || voice.isRestVoice()) { flags |= 0x40; } writeUnsignedByte(flags); if ((flags & 0x40) != 0) { writeUnsignedByte( (voice.isEmpty() ? 0x00 : 0x02) ); } writeByte(parseDuration(duration)); if ((flags & 0x20) != 0) { writeInt(duration.getDivision().getEnters()); } if ((flags & 0x02) != 0) { writeChord(beat.getChord()); } if ((flags & 0x04) != 0) { writeText(beat.getText()); } if ((flags & 0x08) != 0) { writeBeatEffects(beat, effect); } if ((flags & 0x10) != 0) { writeMixChange(measure.getTempo()); } int stringFlags = 0; if (!voice.isRestVoice()) { for (int i = 0; i < voice.countNotes(); i++) { TGNote playedNote = voice.getNote(i); int string = (7 - playedNote.getString()); stringFlags |= (1 << string); } } writeUnsignedByte(stringFlags); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 ) { for( int n = 0; n < voice.countNotes(); n ++){ TGNote playedNote = voice.getNote( n ); if( playedNote.getString() == (6 - i + 1) ){ writeNote(playedNote); break; } } } } skipBytes(2); } private void writeNote(TGNote note) throws IOException { //int flags = 0x20; int flags = ( 0x20 | 0x10 ); if (note.getEffect().isVibrato() || note.getEffect().isBend() || note.getEffect().isSlide() || note.getEffect().isHammer() || note.getEffect().isPalmMute() || note.getEffect().isStaccato() || note.getEffect().isTrill() || note.getEffect().isGrace() || note.getEffect().isHarmonic() || note.getEffect().isTremoloPicking()) { flags |= 0x08; } if( note.getEffect().isGhostNote() ){ flags |= 0x04; } if( note.getEffect().isHeavyAccentuatedNote() ){ flags |= 0x02; } if( note.getEffect().isAccentuatedNote() ){ flags |= 0x40; } writeUnsignedByte(flags); if ((flags & 0x20) != 0) { int typeHeader = 0x01; if (note.isTiedNote()) { typeHeader = 0x02; }else if(note.getEffect().isDeadNote()){ typeHeader = 0x03; } writeUnsignedByte(typeHeader); } if ((flags & 0x10) != 0) { writeByte((byte)(((note.getVelocity() - TGVelocities.MIN_VELOCITY) / TGVelocities.VELOCITY_INCREMENT) + 1)); } if ((flags & 0x20) != 0) { writeByte((byte) note.getValue()); } skipBytes(1); if ((flags & 0x08) != 0) { writeNoteEffects(note.getEffect()); } } private byte parseDuration(TGDuration duration) { byte value = 0; switch (duration.getValue()) { case TGDuration.WHOLE: value = -2; break; case TGDuration.HALF: value = -1; break; case TGDuration.QUARTER: value = 0; break; case TGDuration.EIGHTH: value = 1; break; case TGDuration.SIXTEENTH: value = 2; break; case TGDuration.THIRTY_SECOND: value = 3; break; case TGDuration.SIXTY_FOURTH: value = 4; break; } return value; } private void writeChord(TGChord chord) throws IOException{ this.writeBytes( new byte[] {1,1,0,0,0,12,0,0,-1,-1,-1,-1,0,0,0,0,0} ); writeStringByte( chord.getName(), 21); skipBytes(4); writeInt( chord.getFirstFret() ); for (int i = 0; i < 7; i++) { writeInt( (i < chord.countStrings() ? chord.getFretValue(i) : -1 ) ) ; } this.skipBytes(32); } private void writeBeatEffects(TGBeat beat,TGNoteEffect effect) throws IOException{ int flags1 = 0; int flags2 = 0; if(effect.isFadeIn()){ flags1 |= 0x10; } if(effect.isTapping() || effect.isSlapping() || effect.isPopping()){ flags1 |= 0x20; } if(effect.isTremoloBar()){ flags2 |= 0x04; } if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){ flags1 |= 0x40; } writeUnsignedByte(flags1); writeUnsignedByte(flags2); if ((flags1 & 0x20) != 0) { if(effect.isTapping()){ writeUnsignedByte(1); }else if(effect.isSlapping()){ writeUnsignedByte(2); }else if(effect.isPopping()){ writeUnsignedByte(3); } } if ((flags2 & 0x04) != 0) { writeTremoloBar(effect.getTremoloBar()); } if ((flags1 & 0x40) != 0) { writeUnsignedByte( (beat.getStroke().getDirection() == TGStroke.STROKE_UP ? toStrokeValue(beat.getStroke()) : 0 ) ); writeUnsignedByte( (beat.getStroke().getDirection() == TGStroke.STROKE_DOWN ? toStrokeValue(beat.getStroke()) : 0 ) ); } } private void writeNoteEffects(TGNoteEffect effect) throws IOException { int flags1 = 0; int flags2 = 0; if (effect.isBend()) { flags1 |= 0x01; } if (effect.isHammer()) { flags1 |= 0x02; } if (effect.isGrace()) { flags1 |= 0x10; } if (effect.isStaccato()) { flags2 |= 0x01; } if (effect.isPalmMute()) { flags2 |= 0x02; } if (effect.isTremoloPicking()) { flags2 |= 0x04; } if (effect.isSlide()) { flags2 |= 0x08; } if (effect.isHarmonic()) { flags2 |= 0x10; } if (effect.isTrill()) { flags2 |= 0x20; } if (effect.isVibrato()) { flags2 |= 0x40; } writeUnsignedByte(flags1); writeUnsignedByte(flags2); if ((flags1 & 0x01) != 0) { writeBend(effect.getBend()); } if ((flags1 & 0x10) != 0) { writeGrace(effect.getGrace()); } if ((flags2 & 0x04) != 0) { writeTremoloPicking(effect.getTremoloPicking()); } if ((flags2 & 0x08) != 0) { writeByte((byte)1); } if ((flags2 & 0x10) != 0) { writeByte((byte)1); } if ((flags2 & 0x20) != 0) { writeTrill(effect.getTrill()); } } private void writeBend(TGEffectBend bend) throws IOException { int points = bend.getPoints().size(); writeByte((byte) 1); writeInt(0); writeInt(points); for (int i = 0; i < points; i++) { TGEffectBend.BendPoint point = (TGEffectBend.BendPoint) bend.getPoints().get(i); writeInt( (point.getPosition() * GP_BEND_POSITION / TGEffectBend.MAX_POSITION_LENGTH) ); writeInt( (point.getValue() * GP_BEND_SEMITONE / TGEffectBend.SEMITONE_LENGTH) ); writeByte((byte) 0); } } private void writeTremoloBar(TGEffectTremoloBar tremoloBar) throws IOException { int points = tremoloBar.getPoints().size(); writeByte((byte) 1); writeInt(0); writeInt(points); for (int i = 0; i < points; i++) { TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint) tremoloBar.getPoints().get(i); writeInt( (point.getPosition() * GP_BEND_POSITION / TGEffectBend.MAX_POSITION_LENGTH) ); writeInt( (point.getValue() * (GP_BEND_SEMITONE * 2)) ); writeByte((byte) 0); } } private void writeGrace(TGEffectGrace grace) throws IOException { writeUnsignedByte(grace.getFret()); writeUnsignedByte(((grace.getDynamic() - TGVelocities.MIN_VELOCITY) / TGVelocities.VELOCITY_INCREMENT) + 1); if(grace.getTransition() == TGEffectGrace.TRANSITION_NONE){ writeUnsignedByte(0); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_SLIDE){ writeUnsignedByte(1); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_BEND){ writeUnsignedByte(2); } else if(grace.getTransition() == TGEffectGrace.TRANSITION_HAMMER){ writeUnsignedByte(3); } writeUnsignedByte(grace.getDuration()); writeUnsignedByte( (grace.isDead() ? 0x01 : 0) | (grace.isOnBeat() ? 0x02 : 0) ); } private void writeTrill(TGEffectTrill trill) throws IOException { writeByte((byte)trill.getFret()); if(trill.getDuration().getValue() == TGDuration.SIXTEENTH){ writeByte((byte)1); }else if(trill.getDuration().getValue() == TGDuration.THIRTY_SECOND){ writeByte((byte)2); }else if(trill.getDuration().getValue() == TGDuration.SIXTY_FOURTH){ writeByte((byte)3); } } private void writeTremoloPicking(TGEffectTremoloPicking tremoloPicking) throws IOException{ if(tremoloPicking.getDuration().getValue() == TGDuration.EIGHTH){ writeByte((byte)1); }else if(tremoloPicking.getDuration().getValue() == TGDuration.SIXTEENTH){ writeByte((byte)2); }else if(tremoloPicking.getDuration().getValue() == TGDuration.THIRTY_SECOND){ writeByte((byte)3); } } private void writeText(TGText text) throws IOException { writeStringByteSizeOfInteger(text.getValue()); } private void writeMixChange(TGTempo tempo) throws IOException { writeByte((byte) 0xff); for(int i = 0; i < 16; i++){ writeByte((byte) 0xff); } writeByte((byte) 0xff); //volume writeByte((byte) 0xff); //int pan writeByte((byte) 0xff); //int chorus writeByte((byte) 0xff); //int reverb writeByte((byte) 0xff); //int phaser writeByte((byte) 0xff); //int tremolo writeStringByteSizeOfInteger(""); //tempo name writeInt((tempo != null)?tempo.getValue():-1); //tempo value if((tempo != null)){ skipBytes(1); } writeByte((byte)1); writeByte((byte)0xff); } private void writeMarker(TGMarker marker) throws IOException { writeStringByteSizeOfInteger(marker.getTitle()); writeColor(marker.getColor()); } private void writeColor(TGColor color) throws IOException { writeUnsignedByte(color.getR()); writeUnsignedByte(color.getG()); writeUnsignedByte(color.getB()); writeByte((byte)0); } private TGChannel[] makeChannels(TGSong song) { TGChannel[] channels = new TGChannel[64]; for (int i = 0; i < channels.length; i++) { channels[i] = getFactory().newChannel(); channels[i].setChannel((short)i); channels[i].setEffectChannel((short)i); channels[i].setInstrument((short)24); channels[i].setVolume((short)13); channels[i].setBalance((short)8); channels[i].setChorus((short)0); channels[i].setReverb((short)0); channels[i].setPhaser((short)0); channels[i].setTremolo((short)0); } Iterator it = song.getTracks(); while (it.hasNext()) { TGTrack track = (TGTrack) it.next(); channels[track.getChannel().getChannel()].setInstrument(track.getChannel().getInstrument()); channels[track.getChannel().getChannel()].setVolume(track.getChannel().getVolume()); channels[track.getChannel().getChannel()].setBalance(track.getChannel().getBalance()); channels[track.getChannel().getEffectChannel()].setInstrument(track.getChannel().getInstrument()); channels[track.getChannel().getEffectChannel()].setVolume(track.getChannel().getVolume()); channels[track.getChannel().getEffectChannel()].setBalance(track.getChannel().getBalance()); } return channels; } private byte[] makeBeamEighthNoteBytes(TGTimeSignature ts){ byte[] bytes = new byte[]{0,0,0,0}; if( ts.getDenominator().getValue() <= TGDuration.EIGHTH ){ int eighthsInDenominator = (TGDuration.EIGHTH / ts.getDenominator().getValue()); int total = (eighthsInDenominator * ts.getNumerator()); int byteValue = ( total / 4 ); int missingValue = ( total - (4 * byteValue) ); for( int i = 0 ; i < bytes.length; i ++ ){ bytes[i] = (byte)byteValue; } if( missingValue > 0 ){ bytes[0] += missingValue; } } return bytes; } private int toStrokeValue( TGStroke stroke ){ if( stroke.getValue() == TGDuration.SIXTY_FOURTH ){ return 2; } if( stroke.getValue() == TGDuration.THIRTY_SECOND ){ return 3; } if( stroke.getValue() == TGDuration.SIXTEENTH ){ return 4; } if( stroke.getValue() == TGDuration.EIGHTH ){ return 5; } if( stroke.getValue() == TGDuration.QUARTER ){ return 6; } return 2; } private byte toChannelByte(short s){ return (byte) ((s + 1) / 8); } private List toCommentLines( String comments ){ List lines = new ArrayList(); String line = comments; while( line.length() > Byte.MAX_VALUE ) { String subline = line.substring(0, Byte.MAX_VALUE); lines.add( subline ); line = line.substring( Byte.MAX_VALUE ); } lines.add( line ); return lines; } }tuxguitar-src-1.2/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStream.java0000644000175000017500000003126411273045345027605 0ustar julianjulianpackage org.herac.tuxguitar.io.gtp; import java.io.IOException; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class GP2InputStream extends GTPInputStream { private static final String SUPPORTED_VERSIONS[] = new String[]{ "FICHIER GUITAR PRO v2.20", "FICHIER GUITAR PRO v2.21" }; private static final int TRACK_COUNT = 8; private static final short TRACK_CHANNELS[][] = new short[][]{ new short[]{0,1}, new short[]{2,3}, new short[]{4,5}, new short[]{6,7}, new short[]{8,10}, new short[]{11,12}, new short[]{13,14}, new short[]{9,9}, }; public GP2InputStream(GTPSettings settings){ super(settings, SUPPORTED_VERSIONS); } public TGFileFormat getFileFormat(){ return new TGFileFormat("Guitar Pro 2","*.gtp"); } public TGSong readSong() throws GTPFormatException, IOException { readVersion(); if (!isSupportedVersion(getVersion())) { this.close(); throw new GTPFormatException("Unsupported Version"); } TGSong song = getFactory().newSong(); readInfo(song); int tempo = readInt(); int tripletFeel = ((readInt() == 1)?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE); readInt(); //key for (int i = 0; i < TRACK_COUNT; i++) { TGTrack track = getFactory().newTrack(); track.setNumber( (i + 1) ); track.getChannel().setChannel(TRACK_CHANNELS[ i ][0]); track.getChannel().setEffectChannel(TRACK_CHANNELS[ i ][1]); TGColor.RED.copy(track.getColor()); int strings = readInt(); for (int j = 0; j < strings; j++) { TGString string = getFactory().newString(); string.setNumber( j + 1 ); string.setValue( readInt() ); track.getStrings().add( string ); } song.addTrack(track); } int measureCount = readInt(); for (int i = 0; i < TRACK_COUNT; i++) { readTrack(song.getTrack(i)); } skip(10); TGMeasureHeader previous = null; long[] lastReadedStarts = new long[TRACK_COUNT]; for (int i = 0; i < measureCount; i++) { TGMeasureHeader header = getFactory().newHeader(); header.setStart( (previous == null)?TGDuration.QUARTER_TIME:(previous.getStart() + previous.getLength()) ); header.setNumber( (previous == null)?1:previous.getNumber() + 1 ); header.getTempo().setValue( (previous == null)?tempo:previous.getTempo().getValue() ); header.setTripletFeel(tripletFeel); readTrackMeasures(song,header,lastReadedStarts); previous = header; } TGSongManager manager = new TGSongManager(getFactory()); manager.setSong(song); manager.autoCompleteSilences(); this.close(); return song; } private void readInfo(TGSong song) throws IOException{ song.setName(readStringByteSizeOfByte()); song.setAuthor(readStringByteSizeOfByte()); readStringByteSizeOfByte(); } private TGDuration readDuration() throws IOException { TGDuration duration = getFactory().newDuration(); duration.setValue( (int) (Math.pow( 2 , (readByte() + 4) ) / 4 ) ); return duration; } private void readTrackMeasures(TGSong song,TGMeasureHeader header,long[] lastReadedStarts) throws IOException { readTimeSignature(header.getTimeSignature()); skip(6); int[] beats = new int[TRACK_COUNT]; for (int i = 0; i < TRACK_COUNT; i++) { readUnsignedByte(); readUnsignedByte(); beats[i] = readUnsignedByte(); if( beats[i] > 127 ){ beats[i] = 0; } skip(9); } skip(2); int flags = readUnsignedByte(); header.setRepeatOpen( ((flags & 0x01) != 0) ); if ((flags & 0x02) != 0) { header.setRepeatClose( readUnsignedByte() ); } if ((flags & 0x04) != 0) { header.setRepeatAlternative( parseRepeatAlternative(song, header.getNumber(), readUnsignedByte()) ); } song.addMeasureHeader(header); for (int i = 0; i < TRACK_COUNT; i++) { TGTrack track = song.getTrack(i); TGMeasure measure = getFactory().newMeasure(header); long start = measure.getStart(); for (int j = 0; j < beats[i]; j++) { long length = readBeat(track, measure,start,lastReadedStarts[i]); lastReadedStarts[i] = start; start += length; } measure.setClef( getClef(track) ); track.addMeasure(measure); } } private void readTimeSignature(TGTimeSignature timeSignature) throws IOException { timeSignature.setNumerator(readUnsignedByte()); timeSignature.getDenominator().setValue(readUnsignedByte()); } private long readBeat(TGTrack track, TGMeasure measure, long start, long lastReadedStart) throws IOException { readInt(); TGBeat beat = getFactory().newBeat(); TGVoice voice = beat.getVoice(0); TGDuration duration = readDuration(); TGNoteEffect effect = getFactory().newEffect(); int flags1 = readUnsignedByte(); int flags2 = readUnsignedByte(); if ((flags2 & 0x02) != 0) { readMixChange(measure.getTempo()); } if ((flags2 & 0x01) != 0) { readUnsignedByte(); //strokeType readUnsignedByte(); //strokeDuration } duration.setDotted( ((flags1 & 0x10) != 0) ); if ((flags1 & 0x20) != 0) { duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); skip(1); } // beat effects if ((flags1 & 0x04) != 0) { readBeatEffects(effect); } // chord diagram if ((flags1 & 0x02) != 0) { readChord(track.stringCount(), beat); } // text if ((flags1 & 0x01) != 0) { readText(beat); } if((flags1 & 0x40) != 0){ if(lastReadedStart < start){ TGBeat previousBeat = getBeat(track, measure, lastReadedStart); if(previousBeat != null){ TGVoice previousVoice = previousBeat.getVoice(0); Iterator it = previousVoice.getNotes().iterator(); while(it.hasNext()){ TGNote previous = (TGNote)it.next(); TGNote note = getFactory().newNote(); note.setValue(previous.getValue()); note.setString(previous.getString()); note.setVelocity(previous.getVelocity()); note.setTiedNote(true); voice.addNote(note); } } } } else if ((flags1 & 0x08) == 0) { int stringsFlags = readUnsignedByte(); int effectsFlags = readUnsignedByte(); int graceFlags = readUnsignedByte(); for (int i = 5; i >= 0; i--) { if ((stringsFlags & (1 << i)) != 0) { TGNote note = getFactory().newNote(); int fret = readUnsignedByte(); int dynamic = readUnsignedByte(); if ((effectsFlags & (1 << i)) != 0) { readNoteEffects(effect); } note.setValue( (fret >= 0 && fret < 100)?fret:0); note.setVelocity( (TGVelocities.MIN_VELOCITY + (TGVelocities.VELOCITY_INCREMENT * dynamic)) - TGVelocities.VELOCITY_INCREMENT ); note.setString( track.stringCount() - i ); note.setEffect(effect.clone(getFactory())); note.getEffect().setDeadNote( (fret < 0 || fret >= 100) ); voice.addNote(note); } // Grace note if ((graceFlags & (1 << i)) != 0) { readGraceNote(); } } } beat.setStart(start); voice.setEmpty(false); duration.copy(voice.getDuration()); measure.addBeat(beat); return duration.getTime(); } private void readText(TGBeat beat) throws IOException{ TGText text = getFactory().newText(); text.setValue(readStringByte(0)); beat.setText(text); } private void readBeatEffects(TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); effect.setVibrato( (flags == 1 || flags == 2) ); effect.setFadeIn( (flags == 4) ); effect.setTapping( (flags == 5) ) ; effect.setSlapping( (flags == 6) ) ; effect.setPopping( (flags == 7) ) ; if(flags == 3){ readBend(effect); } else if(flags == 8 || flags == 9){ TGEffectHarmonic harmonic = getFactory().newEffectHarmonic(); harmonic.setType((flags == 8)?TGEffectHarmonic.TYPE_NATURAL:TGEffectHarmonic.TYPE_ARTIFICIAL); harmonic.setData(0); effect.setHarmonic(harmonic); } } private void readNoteEffects(TGNoteEffect effect) throws IOException { int flags = readUnsignedByte(); effect.setHammer( (flags == 1 || flags == 2) ); effect.setSlide( (flags == 3 || flags == 4) ); if(flags == 5 || flags == 6){ readBend(effect); } } private void readBend(TGNoteEffect effect) throws IOException { skip(6); float value = Math.max( ((readUnsignedByte() / 8f) - 26f) , 1f); TGEffectBend bend = getFactory().newEffectBend(); bend.addPoint(0,0); bend.addPoint(Math.round(TGEffectBend.MAX_POSITION_LENGTH / 2), Math.round(value * TGEffectBend.SEMITONE_LENGTH) ); bend.addPoint(Math.round(TGEffectBend.MAX_POSITION_LENGTH),Math.round(value * TGEffectBend.SEMITONE_LENGTH)); effect.setBend(bend); skip(1); } private void readGraceNote() throws IOException { byte bytes[] = new byte[3]; read(bytes); } private void readTrack(TGTrack track) throws IOException { track.getChannel().setInstrument((short)readInt()); readInt(); // Number of frets track.setName(readStringByteSizeOfByte()); track.setSolo(readBoolean()); track.getChannel().setVolume((short)readInt()); track.getChannel().setBalance((short)readInt()); track.getChannel().setChorus((short)readInt()); track.getChannel().setReverb((short)readInt()); track.setOffset(readInt()); } private void readChord(int strings, TGBeat beat) throws IOException { TGChord chord = getFactory().newChord(strings); chord.setName(readStringByte(0)); this.skip(1); if ( readInt() < 12 ) { skip(32); } chord.setFirstFret(readInt()); if (chord.getFirstFret() != 0) { for (int i = 0; i < 6; i++) { int fret = readInt(); if(i < chord.countStrings()){ chord.addFretValue(i,fret); } } } if(chord.countNotes() > 0){ beat.setChord(chord); } } private void readMixChange(TGTempo tempo) throws IOException { int flags = readUnsignedByte(); // Tempo if ((flags & 0x20) != 0) { tempo.setValue(readInt()); readUnsignedByte(); } // Reverb if ((flags & 0x10) != 0) { readUnsignedByte(); readUnsignedByte(); } // Chorus if ((flags & 0x08) != 0) { readUnsignedByte(); readUnsignedByte(); } // Balance if ((flags & 0x04) != 0) { readUnsignedByte(); readUnsignedByte(); } // Volume if ((flags & 0x02) != 0) { readUnsignedByte(); readUnsignedByte(); } // Instrument if ((flags & 0x01) != 0) { readUnsignedByte(); } } private int parseRepeatAlternative(TGSong song,int measure,int value){ int repeatAlternative = 0; int existentAlternatives = 0; Iterator it = song.getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.getNumber() == measure){ break; } if(header.isRepeatOpen()){ existentAlternatives = 0; } existentAlternatives |= header.getRepeatAlternative(); } for(int i = 0; i < 8; i ++){ if(value > i && (existentAlternatives & (1 << i)) == 0){ repeatAlternative |= (1 << i); } } return repeatAlternative; } private int getClef( TGTrack track ){ if( !track.isPercussionTrack() ){ Iterator it = track.getStrings().iterator(); while( it.hasNext() ){ TGString string = (TGString) it.next(); if( string.getValue() <= 34 ){ return TGMeasure.CLEF_BASS; } } } return TGMeasure.CLEF_TREBLE; } private TGBeat getBeat(TGTrack track, TGMeasure measure,long start){ TGBeat beat = getBeat(measure,start); if(beat == null){ for(int i = (track.countMeasures() - 1);i >=0; i-- ){ beat = getBeat(track.getMeasure(i),start); if(beat != null){ break; } } } return beat; } private TGBeat getBeat(TGMeasure measure,long start){ if(start >= measure.getStart() && start < (measure.getStart() + measure.getLength())){ Iterator beats = measure.getBeats().iterator(); while(beats.hasNext()){ TGBeat beat = (TGBeat)beats.next(); if(beat.getStart() == start){ return beat; } } } return null; } }tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPort.java0000644000175000017500000000424111273045345032166 0ustar julianjulianpackage org.herac.tuxguitar.jack.synthesizer; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.jack.settings.JackSettings; import org.herac.tuxguitar.jack.settings.JackSettingsListener; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiReceiver; public class JackOutputPort implements JackSettingsListener, MidiOutputPort { private JackClient jackClient; private JackSettings jackSettings; private JackReceiver jackReceiver; private JackOutputPortRouter jackOutputPortRouter; public JackOutputPort( JackClient jackClient , JackSettings jackSettings ){ this.jackOutputPortRouter = new JackOutputPortRouter(); this.jackReceiver = new JackReceiver(jackClient, this); this.jackSettings = jackSettings; this.jackClient = jackClient; } public void open(){ if(!this.jackClient.isPortsOpen()){ this.loadSettings( this.jackSettings.getConfig() ); this.jackSettings.addListener( this ); this.jackClient.openPorts(this.jackOutputPortRouter.getPortCount()); } } public void close(){ if(this.jackClient.isPortsOpen()){ this.jackClient.closePorts(); this.jackSettings.removeListener( this ); } } public void check() throws MidiPlayerException { if( !this.jackClient.isServerRunning() || !this.jackClient.isPortsOpen() ){ this.open(); if( !this.jackClient.isServerRunning() || !this.jackClient.isPortsOpen() ){ throw new MidiPlayerException("Jack server not running?"); } } } public MidiReceiver getReceiver(){ return this.jackReceiver; } public JackOutputPortRouter getRouter(){ return this.jackOutputPortRouter; } public void loadSettings(TGConfigManager config) { boolean connected = this.jackClient.isPortsOpen(); if( connected ){ this.jackClient.closePorts(); } this.jackOutputPortRouter.loadSettings(config); if( connected ){ this.jackClient.openPorts(this.jackOutputPortRouter.getPortCount()); } } public String getKey(){ return ("tuxguitar-jack"); } public String getName(){ return ("Jack Midi Port"); } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortRouter.java0000644000175000017500000001356711273045345033402 0ustar julianjulianpackage org.herac.tuxguitar.jack.synthesizer; import org.herac.tuxguitar.gui.system.config.TGConfigManager; public class JackOutputPortRouter { public static final int CREATE_UNIQUE_PORT = 0; public static final int CREATE_MULTIPLE_PORTS_BY_CHANNEL = 1; public static final int CREATE_MULTIPLE_PORTS_BY_PROGRAM = 2; private static final int PORT_INDEX = 0; private static final int CHANNEL_INDEX = 1; private static final int PROGRAM_INDEX = 2; private int ports; private int[][] channels; private int[][] programs; public JackOutputPortRouter(){ this.ports = 1; this.channels = new int[16][3]; this.programs = new int[128][3]; } public int getPortCount(){ return this.ports; } public int getPortRoute( int channel ){ if( channel >= 0 && channel < this.channels.length ){ int route = this.channels[ channel ][ PORT_INDEX ]; return ( route >= 0 ? route : 0 ); } return 0; } public int getChannelRoute( int channel ){ if( channel >= 0 && channel < this.channels.length ){ int route = this.channels[ channel ][ CHANNEL_INDEX ]; return ( route >= 0 ? route : channel ); } return 0; } public int getProgramRoute( int channel , int program ){ if( channel >= 0 && channel < this.channels.length ){ int route = this.channels[ channel ][ PROGRAM_INDEX ]; return ( route >= 0 ? route : program ); } return 0; } public void setProgram( int channel , int program ){ if( channel >= 0 && channel < this.channels.length && program >= 0 && program < this.programs.length ){ if( this.channels[ channel ][ PROGRAM_INDEX ] >= 0 ){ if( channel != 9 ){ int routePort = this.programs[ program ][ PORT_INDEX ]; int routeChannel = this.programs[ program ][ CHANNEL_INDEX ]; int routeProgram = this.programs[ program ][ PROGRAM_INDEX ]; if( routePort >= 0 ){ this.channels[ channel ][ PORT_INDEX ] = routePort; } if( routeChannel >= 0 ){ this.channels[ channel ][ CHANNEL_INDEX ] = routeChannel; } if( routeProgram >= 0 ){ this.channels[ channel ][ PROGRAM_INDEX ] = routeProgram; } } } } } protected void createUniquePort(){ this.ports = 1; for( int i = 0 ; i < this.channels.length ; i ++ ){ this.channels[i][ PORT_INDEX ] = 0; this.channels[i][ CHANNEL_INDEX ] = i; this.channels[i][ PROGRAM_INDEX ] = -1; } for( int i = 0 ; i < this.programs.length ; i ++ ){ this.programs[i][ PORT_INDEX ] = -1; this.programs[i][ PROGRAM_INDEX ] = -1; this.programs[i][ CHANNEL_INDEX ] = -1; } } protected void createMultiplePortsByChannel( int[][] routing ){ this.ports = this.channels.length; // Initialize default channel values for( int i = 0 ; i < this.channels.length ; i ++ ){ this.channels[i][ PORT_INDEX ] = i; this.channels[i][ CHANNEL_INDEX ] = i; this.channels[i][ PROGRAM_INDEX ] = -1; } // Disable program routing for( int i = 0 ; i < this.programs.length ; i ++ ){ this.programs[i][ PORT_INDEX ] = -1; this.programs[i][ PROGRAM_INDEX ] = -1; this.programs[i][ CHANNEL_INDEX ] = -1; } // load new routing for( int i = 0 ; i < routing.length ; i ++ ){ if( routing[i].length == 3 ){ int channel = routing[i][0]; if( channel >= 0 && channel < this.channels.length ){ this.channels[channel][ CHANNEL_INDEX ] = routing[i][1]; this.channels[channel][ PROGRAM_INDEX ] = routing[i][2]; } } } } protected void createMultiplePortsByProgram( int[][] routing ){ this.ports = 1; // Initialize default channel values for( int i = 0 ; i < this.channels.length ; i ++ ){ this.channels[i][ PORT_INDEX ] = -1; this.channels[i][ CHANNEL_INDEX ] = -1; this.channels[i][ PROGRAM_INDEX ] = 0; } // Initialize default program values for( int i = 0 ; i < this.programs.length ; i ++ ){ this.programs[i][ PORT_INDEX ] = 0; this.programs[i][ PROGRAM_INDEX ] = i; this.programs[i][ CHANNEL_INDEX ] = -1; } // load new routing for( int i = 0 ; i < routing.length ; i ++ ){ if( routing[i].length == 4 ){ int program = routing[i][0]; if( program >= 0 && program < this.programs.length ){ if( routing[i][1] > 0 ){ // Create a dedicated port this.programs[program][ PORT_INDEX ] = this.ports ++ ; } this.programs[program][ CHANNEL_INDEX ] = routing[i][2]; this.programs[program][ PROGRAM_INDEX ] = (routing[i][3] >= 0 ? routing[i][3] : program ); } // Percussion Kit else if( program == 128 ){ if( routing[i][1] > 0 ){ // Create a dedicated port this.channels[9][ PORT_INDEX ] = this.ports ++ ; } this.channels[9][ CHANNEL_INDEX ] = routing[i][2]; this.channels[9][ PROGRAM_INDEX ] = routing[i][3]; } } } } public void loadSettings( TGConfigManager config ){ int type = config.getIntConfigValue("jack.midi.ports.type", CREATE_UNIQUE_PORT ); if( type == CREATE_MULTIPLE_PORTS_BY_PROGRAM ){ // 128 instruments + 1 percussion kit int[][] routing = new int[129][]; for( int i = 0 ; i < routing.length ; i ++ ){ routing[i] = new int[4]; routing[i][0] = i; routing[i][1] = config.getIntConfigValue("jack.midi.port.program-routing.port-" + i , 0 ); routing[i][2] = config.getIntConfigValue("jack.midi.port.program-routing.to-channel-" + i , -1 ); routing[i][3] = config.getIntConfigValue("jack.midi.port.program-routing.to-program-" + i , -1 ); } this.createMultiplePortsByProgram( routing ); }else if( type == CREATE_MULTIPLE_PORTS_BY_CHANNEL ){ // 16 channels int[][] routing = new int[16][]; for( int i = 0 ; i < routing.length ; i ++ ){ routing[i] = new int[3]; routing[i][0] = i; routing[i][1] = config.getIntConfigValue("jack.midi.port.channel-routing.to-channel-" + i , -1 ); routing[i][2] = config.getIntConfigValue("jack.midi.port.channel-routing.to-program-" + i , -1 ); } this.createMultiplePortsByChannel( routing ); }else{ this.createUniquePort(); } } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProviderPlugin.javatuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProviderPlug0000644000175000017500000000143711273045345033615 0ustar julianjulianpackage org.herac.tuxguitar.jack.synthesizer; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.jack.settings.JackSettings; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class JackOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin { private JackOutputPortProvider jackOutputPortProvider; public JackOutputPortProviderPlugin(){ this(new JackClient(),new JackSettings()); } public JackOutputPortProviderPlugin(JackClient jackClient,JackSettings jackSettings){ this.jackOutputPortProvider = new JackOutputPortProvider( jackClient , jackSettings); } protected MidiOutputPortProvider getProvider() { return this.jackOutputPortProvider; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackReceiver.java0000644000175000017500000000461111273045345031566 0ustar julianjulianpackage org.herac.tuxguitar.jack.synthesizer; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class JackReceiver implements MidiReceiver{ private JackClient jackClient; private JackOutputPort jackOutputPort; public JackReceiver(JackClient jackClient, JackOutputPort jackOutputPort){ this.jackClient = jackClient; this.jackOutputPort = jackOutputPort; } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } public void sendNoteOn(int channel, int key, int velocity) { byte[] event = new byte[3]; event[0] = (byte)(0x90 | this.jackOutputPort.getRouter().getChannelRoute(channel) ); event[1] = (byte)key; event[2] = (byte)velocity; this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event); } public void sendNoteOff(int channel, int key, int velocity) { byte[] event = new byte[3]; event[0] = (byte)(0x80 | this.jackOutputPort.getRouter().getChannelRoute(channel) ); event[1] = (byte)key; event[2] = (byte)velocity; this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event); } public void sendPitchBend(int channel, int value) { byte[] event = new byte[3]; event[0] = (byte)(0xE0 | this.jackOutputPort.getRouter().getChannelRoute(channel) ); event[1] = (byte)0; event[2] = (byte)value; this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event); } public void sendControlChange(int channel, int controller, int value) { byte[] event = new byte[3]; event[0] = (byte)(0xB0 | this.jackOutputPort.getRouter().getChannelRoute(channel) ); event[1] = (byte)controller; event[2] = (byte)value; this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event); } public void sendProgramChange(int channel, int value) { this.jackOutputPort.getRouter().setProgram(channel, value); byte[] event = new byte[2]; event[0] = (byte)(0xC0 | this.jackOutputPort.getRouter().getChannelRoute(channel) ); event[1] = (byte)this.jackOutputPort.getRouter().getProgramRoute(channel , value); this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event); } public void sendSystemReset() { //not implemented } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProvider.javatuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProvider.jav0000644000175000017500000000164211273045345033542 0ustar julianjulianpackage org.herac.tuxguitar.jack.synthesizer; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.jack.settings.JackSettings; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class JackOutputPortProvider implements MidiOutputPortProvider{ private List jackOutputPorts; private JackClient jackClient; private JackSettings jackSettings; public JackOutputPortProvider(JackClient jackClient,JackSettings jackSettings){ this.jackClient = jackClient; this.jackSettings = jackSettings; } public List listPorts() { if(this.jackOutputPorts == null){ this.jackOutputPorts = new ArrayList(); this.jackOutputPorts.add(new JackOutputPort( this.jackClient , this.jackSettings )); } return this.jackOutputPorts; } public void closeAll(){ if(this.jackClient.isPortsOpen()){ this.jackClient.closePorts(); } } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProvider.java0000644000175000017500000000204311273045346033070 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiSequencer; import org.herac.tuxguitar.player.base.MidiSequencerProvider; public class JackSequencerProvider implements MidiSequencerProvider{ private List jackSequencerProviders; private JackClient jackClient; public JackSequencerProvider(JackClient jackClient){ this.jackClient = jackClient; } public List listSequencers() throws MidiPlayerException { if(this.jackSequencerProviders == null){ this.jackSequencerProviders = new ArrayList(); this.jackSequencerProviders.add(new JackSequencer(this.jackClient)); } return this.jackSequencerProviders; } public void closeAll() throws MidiPlayerException { Iterator it = listSequencers().iterator(); while(it.hasNext()){ MidiSequencer sequencer = (MidiSequencer)it.next(); sequencer.close(); } } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencer.java0000644000175000017500000001614411273045346031364 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.player.base.MidiSequencer; import org.herac.tuxguitar.player.base.MidiTransmitter; public class JackSequencer implements MidiSequencer{ private long transportUID; private long transportTryCount; private long transportTryNumber; private boolean reset; private boolean running; private boolean stopped; private boolean transportRunning; private boolean transportLockTick; private MidiTransmitter transmitter; private JackTickController jackTickController; private JackEventController jackEventController; private JackEventDispacher jackEventDispacher; private JackTrackController jackTrackController; private JackTimer jackTimer; private JackClient jackClient; public JackSequencer(JackClient jackClient){ this.stopped = true; this.running = false; this.transportRunning = false; this.transportUID = -1; this.transportTryCount = 10; this.transportTryNumber = 0; this.jackClient = jackClient; this.jackTickController = new JackTickController(this); this.jackEventController = new JackEventController(this); this.jackEventDispacher = new JackEventDispacher(this); this.jackTrackController = new JackTrackController(this); this.jackTimer = new JackTimer(this); } public JackClient getJackClient(){ return this.jackClient; } public JackTickController getJackTickController(){ return this.jackTickController; } public JackEventController getJackEventController(){ return this.jackEventController; } public JackTrackController getJackTrackController(){ return this.jackTrackController; } public void setTempo(int tempo){ this.jackTickController.setTempo(tempo); } public long getTickPosition(){ return Math.round(this.jackTickController.getTick()); } public void setTickPosition(long tickPosition){ this.setTickPosition(tickPosition, !this.transportLockTick ); this.transportLockTick = false; } public void setTickPosition(long tickPosition, boolean transportUpdate ){ this.reset = true; this.jackTickController.setTick(tickPosition , transportUpdate); } public long getTickLength(){ return this.jackTickController.getTickLength(); } public void sendEvent(JackEvent event) throws MidiPlayerException{ if(!this.reset){ this.jackEventDispacher.dispatch(event); } } public void addEvent(JackEvent event){ this.jackEventController.addEvent(event); this.jackTickController.notifyTick(event.getTick()); } public boolean isRunning() { return this.running; } public void start() throws MidiPlayerException{ this.start( true ); } public void start( boolean startTransport ) throws MidiPlayerException{ if(!this.running ){ this.setTempo(120); this.running = true; if( startTransport ){ this.jackClient.setTransportStart(); } } } public void stop() throws MidiPlayerException{ this.stop( true ); } public void stop( boolean stopTransport ) throws MidiPlayerException{ if( this.running ){ this.running = false; if( stopTransport ){ this.jackClient.setTransportStop(); } } } public void reset(boolean systemReset) throws MidiPlayerException{ this.getTransmitter().sendAllNotesOff(); for(int channel = 0; channel < 16;channel ++){ this.getTransmitter().sendPitchBend(channel, 64); } if( systemReset ){ this.getTransmitter().sendSystemReset(); } } protected void startPlayer(){ // Make sure sequencer was already initialized. if( this.transmitter != null ){ this.transportLockTick = true; TuxGuitar.instance().getTransport().play(); } } public MidiTransmitter getTransmitter() { return this.transmitter; } public void setTransmitter(MidiTransmitter transmitter) { this.transmitter = transmitter; } public void open() { if( !this.jackClient.isTransportOpen() ){ this.jackClient.openTransport(); } this.jackTimer.setRunning( true ); } public void close() throws MidiPlayerException { this.jackTimer.setRunning( false ); if(this.isRunning()){ this.stop(); } if( this.jackClient.isTransportOpen() ){ this.jackClient.closeTransport(); } } public void check() throws MidiPlayerException { if( !this.jackClient.isServerRunning() || !this.jackClient.isTransportOpen() ){ this.open(); if( !this.jackClient.isServerRunning() || !this.jackClient.isTransportOpen() ){ throw new MidiPlayerException("Jack server not running?"); } } } public MidiSequenceHandler createSequence(int tracks) throws MidiPlayerException{ return new JackSequenceHandler(this,tracks); } public void setSolo(int index,boolean solo) throws MidiPlayerException{ this.getJackTrackController().setSolo(index, solo); } public void setMute(int index,boolean mute) throws MidiPlayerException{ this.getJackTrackController().setMute(index, mute); } public String getKey() { return "tuxguitar-jack"; } public String getName() { return "Jack Sequencer"; } protected void process() throws MidiPlayerException{ boolean transportRunning = this.jackClient.isTransportRunning(); // Check if state was changed if(this.transportRunning != transportRunning ){ if( transportRunning && !this.running ){ // Transport was started this.startPlayer(); }else if( !transportRunning ){ // Transport was stopped. this.running = false; } } else{ if( this.running && transportRunning ){ long transportUID = this.jackClient.getTransportUID(); if( this.transportUID != transportUID ){ this.setTickPosition( 0 , false ); } if(this.reset){ this.reset( false ); this.reset = false; this.jackEventController.reset(); } this.stopped = false; this.jackTickController.process(); this.jackEventController.process(); if(this.getTickPosition() > this.getTickLength()){ this.stop( true ); } this.transportUID = transportUID; } else if( !this.stopped ){ this.stopped = true; this.jackEventController.clearEvents(); this.jackTickController.clearTick(); this.reset( true ); } else if( this.running ){ if( this.transportTryNumber++ > this.transportTryCount ){ this.running = false; this.transportTryNumber = 0; } } } this.transportRunning = transportRunning; } private class JackTimer implements Runnable{ private static final int TIMER_DELAY = 10; private Object sequencerSync; private JackSequencer sequencer; private boolean running; public JackTimer(JackSequencer sequencer){ this.sequencerSync = new Object(); this.sequencer = sequencer; this.running = false; } public void setRunning( boolean running ){ this.running = running; if( this.running ){ new Thread( this ).start(); } } public void run() { try { synchronized(this.sequencerSync) { while( this.running ){ this.sequencer.process(); this.sequencerSync.wait( TIMER_DELAY ); } } } catch (Throwable throwable) { throwable.printStackTrace(); } } } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTrackController.java0000644000175000017500000000362111273045346032536 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.player.base.MidiPlayerException; public class JackTrackController { private List tracks; private JackSequencer sequencer; private boolean anySolo; public JackTrackController(JackSequencer sequencer){ this.sequencer = sequencer; this.tracks = new ArrayList(); this.anySolo = false; } public void init(int count){ this.tracks.clear(); for(int i = 0; i < count; i ++){ this.tracks.add(new JackTrack()); } } public void clearTracks(){ this.tracks.clear(); } public void checkAnySolo(){ this.anySolo = false; for(int i = 0; i < this.tracks.size(); i ++){ JackTrack track = (JackTrack)this.tracks.get(i); if(track.isSolo()){ this.anySolo = true; break; } } } public void setSolo(int index,boolean solo) throws MidiPlayerException{ if(index >= 0 && index < this.tracks.size()){ JackTrack track = (JackTrack)this.tracks.get(index); track.setSolo(solo); checkAnySolo(); if(track.isSolo()){ setMute(index,false); this.sequencer.getTransmitter().sendAllNotesOff(); } } } public void setMute(int index,boolean mute) throws MidiPlayerException{ if(index >= 0 && index < this.tracks.size()){ JackTrack track = (JackTrack)this.tracks.get(index); track.setMute(mute); if(track.isMute()){ setSolo(index,false); this.sequencer.getTransmitter().sendAllNotesOff(); } } } public boolean isSolo(int index){ if(index >= 0 && index < this.tracks.size()){ JackTrack track = (JackTrack)this.tracks.get(index); return track.isSolo(); } return false; } public boolean isMute(int index){ if(index >= 0 && index < this.tracks.size()){ JackTrack track = (JackTrack)this.tracks.get(index); return track.isMute(); } return false; } public boolean isAnySolo(){ return this.anySolo; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEvent.java0000644000175000017500000000455211273045346030513 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; public class JackEvent { public static final int ALL_TRACKS = -1; public static final int MIDI_SYSTEM_EVENT = 1; public static final int MIDI_EVENT_NOTEON = 2; public static final int MIDI_EVENT_NOTEOFF = 3; public static final int MIDI_EVENT_PROGRAM_CHANGE = 4; public static final int MIDI_EVENT_CONTROL_CHANGE = 5; public static final int MIDI_EVENT_PITCH_BEND = 6; private long tick; private int type; private int track; private byte[] data; public JackEvent(long tick,int type,byte[] data){ this(tick,type,ALL_TRACKS,data); } public JackEvent(long tick,int type,int track,byte[] data){ this.tick = tick; this.type = type; this.track = track; this.data = data; } public long getTick() { return this.tick; } public int getType() { return this.type; } public int getTrack() { return this.track; } public byte[] getData() { return this.data; } public static JackEvent systemReset(final long tick){ return new JackEvent(tick,MIDI_SYSTEM_EVENT,ALL_TRACKS,null); } public static JackEvent noteOn(final long tick,final int track,final int channel,final int key,final int velocity){ return new JackEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity}); } public static JackEvent noteOff(final long tick,final int track,final int channel,final int key,final int velocity){ return new JackEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity}); } public static JackEvent controlChange(final long tick,final int track,final int channel,final int controller,final int value){ return new JackEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value}); } public static JackEvent programChange(final long tick,final int track,final int channel,final int value){ return new JackEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value}); } public static JackEvent pitchBend(final long tick,final int track,final int channel,final int value){ return new JackEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value}); } public static JackEvent tempoInUSQ(final long tick,final int usq){ return new JackEvent(tick,MIDI_SYSTEM_EVENT,new byte[]{0x51,(byte) (usq & 0xff),(byte) ((usq >> 8) & 0xff),(byte) ((usq >> 16) & 0xff)}); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProviderPlugin.javatuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProviderPlugin.0000644000175000017500000000137111273045346033410 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiSequencerProviderPlugin; import org.herac.tuxguitar.jack.JackClient; import org.herac.tuxguitar.player.base.MidiSequencerProvider; public class JackSequencerProviderPlugin extends TGMidiSequencerProviderPlugin { private MidiSequencerProvider jackSequencerProvider; public JackSequencerProviderPlugin(){ this(new JackClient()); } public JackSequencerProviderPlugin(JackClient jackClient){ this.jackSequencerProvider = new JackSequencerProvider( jackClient ); } protected MidiSequencerProvider getProvider() throws TGPluginException { return this.jackSequencerProvider; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTickController.java0000644000175000017500000000656411273045346032375 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import java.util.List; import org.herac.tuxguitar.song.models.TGDuration; public class JackTickController { private int tempo; private long frame; private long lastFrame; private long tickLength; private double tick; private Object lock; private JackSequencer sequencer; public JackTickController(JackSequencer sequencer){ this.lock = new Object(); this.sequencer = sequencer; } public void process() { synchronized (this.lock) { long frameRate = this.sequencer.getJackClient().getTransportFrameRate(); this.lastFrame = this.frame; this.frame = this.sequencer.getJackClient().getTransportFrame(); this.tick += ((double)TGDuration.QUARTER_TIME * ((double)getTempo() * (double)(this.frame - this.lastFrame) / 60.00) / (double)frameRate); } } public void setTick(long tick , boolean updateTransport ) { synchronized (this.lock) { long frameRate = this.sequencer.getJackClient().getTransportFrameRate(); if( updateTransport ){ this.sequencer.getJackClient().setTransportFrame( Math.round( tickToFrame(tick, frameRate )) ); } this.frame = this.sequencer.getJackClient().getTransportFrame(); this.tick = this.frameToTick( this.frame , frameRate ); } } public double getTick() { return this.tick; } public long getTickLength() { return this.tickLength; } public void clearTick(){ this.tickLength = 0; } public void notifyTick(long tick){ this.tickLength = Math.max(this.tickLength,tick); } public void setTempo(int tempo) { this.tempo = tempo; } public int getTempo() { return this.tempo; } public double frameToTick( long frame , long frameRate ){ double framePos = 0; double tempo = 120; double tick = TGDuration.QUARTER_TIME; List tempoChanges = this.sequencer.getJackEventController().getTempoChanges(); for(int i = 0; i < tempoChanges.size(); i ++){ long[] tc = (long[])tempoChanges.get(i); double tcTick = tc[0]; double tcValue = tc[1]; double tickFrames = ( (((double)frameRate * (tcTick - tick)) / (double)TGDuration.QUARTER_TIME ) * (60.00 / tempo) ); if( framePos + tickFrames <= frame ){ framePos += tickFrames; tempo = tcValue; tick = tcTick; }else{ break; } } if( frame > framePos ){ double timeFrame = ( ( (double)(frame - framePos) / (double)frameRate ) * 1000.00 ); double timeTick = ( ( timeFrame * (double)TGDuration.QUARTER_TIME ) / 1000.00 ); tick += ( timeTick * ( tempo / 60.00 ) ); } return tick; } public double tickToFrame( long tick , long frameRate ){ double tickPos = TGDuration.QUARTER_TIME; double tempo = 120; double frame = 0; List tempoChanges = this.sequencer.getJackEventController().getTempoChanges(); for(int i = 0; i < tempoChanges.size(); i ++){ long[] tc = (long[])tempoChanges.get(i); double tcTick = tc[0]; double tcValue = tc[1]; double tickFrames = ((((double) frameRate * (tcTick - tickPos)) / (double)TGDuration.QUARTER_TIME ) * (60.00 / tempo)); if( tcTick <= tick ){ frame += tickFrames; tempo = tcValue; tickPos = tcTick; }else{ break; } } if( tick > tickPos ){ double timeTick = ( ( (double)( tick - tickPos ) / (double)TGDuration.QUARTER_TIME ) * 1000.00 ); double timeFrame = ( ( timeTick * (double)frameRate ) / 1000.00 ); frame += (timeFrame * ( 60.00 / tempo)); } return frame; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEventDispacher.java0000644000175000017500000000267511273045346032342 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import org.herac.tuxguitar.player.base.MidiPlayerException; public class JackEventDispacher{ private JackSequencer sequencer; public JackEventDispacher(JackSequencer sequencer){ this.sequencer = sequencer; } public void dispatch(JackEvent event) throws MidiPlayerException{ if(event.getType() == JackEvent.MIDI_EVENT_NOTEON){ this.sequencer.getTransmitter().sendNoteOn(event.getData()[0],event.getData()[1],event.getData()[2]); } else if(event.getType() == JackEvent.MIDI_EVENT_NOTEOFF){ this.sequencer.getTransmitter().sendNoteOff(event.getData()[0],event.getData()[1],event.getData()[2]); } else if(event.getType() == JackEvent.MIDI_EVENT_CONTROL_CHANGE){ this.sequencer.getTransmitter().sendControlChange(event.getData()[0],event.getData()[1],event.getData()[2]); } else if(event.getType() == JackEvent.MIDI_EVENT_PROGRAM_CHANGE){ this.sequencer.getTransmitter().sendProgramChange(event.getData()[0],event.getData()[1]); } else if(event.getType() == JackEvent.MIDI_EVENT_PITCH_BEND){ this.sequencer.getTransmitter().sendPitchBend(event.getData()[0],event.getData()[1]); } else if(event.getType() == JackEvent.MIDI_SYSTEM_EVENT){ if(event.getData()[0] == 0x51){ int usq = ((event.getData()[1] & 0xff) | ((event.getData()[2] & 0xff) << 8) | ((event.getData()[3] & 0xff) << 16)); this.sequencer.setTempo( (int)((60.00 * 1000.00) / (usq / 1000.00)) ); } } } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequenceHandler.java0000644000175000017500000000274311273045346032500 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.song.models.TGTimeSignature; public class JackSequenceHandler extends MidiSequenceHandler{ private JackSequencer seq; public JackSequenceHandler(JackSequencer seq,int tracks) { super(tracks); this.seq = seq; this.seq.getJackTrackController().init(getTracks()); } public void addControlChange(long tick,int track,int channel, int controller, int value) { this.seq.addEvent(JackEvent.controlChange(tick, track, channel, controller, value)); } public void addNoteOff(long tick,int track,int channel, int note, int velocity) { this.seq.addEvent(JackEvent.noteOff(tick, track, channel, note, velocity)); } public void addNoteOn(long tick,int track,int channel, int note, int velocity) { this.seq.addEvent(JackEvent.noteOn(tick, track, channel, note, velocity)); } public void addPitchBend(long tick,int track,int channel, int value) { this.seq.addEvent(JackEvent.pitchBend(tick, track, channel, value)); } public void addProgramChange(long tick,int track,int channel, int instrument) { this.seq.addEvent(JackEvent.programChange(tick, track, channel, instrument)); } public void addTempoInUSQ(long tick,int track,int usq) { this.seq.addEvent(JackEvent.tempoInUSQ(tick, usq)); } public void addTimeSignature(long tick,int track,TGTimeSignature ts) { //not implemented } public void notifyFinish(){ //not implemented } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTrack.java0000644000175000017500000000064011273045346030470 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; public class JackTrack { private boolean solo; private boolean mute; public JackTrack(){ this.solo = false; this.mute = false; } public boolean isMute() { return this.mute; } public void setMute(boolean mute) { this.mute = mute; } public boolean isSolo() { return this.solo; } public void setSolo(boolean solo) { this.solo = solo; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEventController.java0000644000175000017500000000475411273045346032563 0ustar julianjulianpackage org.herac.tuxguitar.jack.sequencer; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.song.models.TGDuration; public class JackEventController{ private JackSequencer sequencer; private List events; private double tick; private double lastTick; private boolean reset; public JackEventController(JackSequencer sequencer){ this.sequencer = sequencer; this.events = new ArrayList(); this.reset(); } public void process() throws MidiPlayerException { this.lastTick = this.tick; this.tick = this.sequencer.getJackTickController().getTick(); for(int i = 0;i < this.events.size();i ++){ JackEvent event = (JackEvent)this.events.get(i); if(shouldSend(event,this.tick,this.lastTick)){ this.sequencer.sendEvent(event); } } this.reset = false; } private boolean shouldSend(JackEvent event,double tick,double lastTick){ if(event.getTick() > tick){ return false; } if(event.getTrack() != JackEvent.ALL_TRACKS){ if(this.sequencer.getJackTrackController().isMute(event.getTrack())){ return false; } if(this.sequencer.getJackTrackController().isAnySolo() && !this.sequencer.getJackTrackController().isSolo(event.getTrack())){ return false; } } if(this.reset){ if(event.getType() == JackEvent.MIDI_SYSTEM_EVENT){ return true; } if(event.getType() == JackEvent.MIDI_EVENT_CONTROL_CHANGE){ return true; } if(event.getType() == JackEvent.MIDI_EVENT_PROGRAM_CHANGE){ return true; } } return (event.getTick() > lastTick); } public List getEvents(){ return this.events; } public void addEvent(JackEvent event){ this.events.add(event); } public void clearEvents(){ this.events.clear(); } public void reset(){ this.tick = (this.sequencer.getTickPosition() - (TGDuration.QUARTER_TIME / 8) ); this.reset = true; } public List getTempoChanges(){ List tempoChanges = new ArrayList(); for(int i = 0; i < this.events.size(); i ++){ JackEvent event = (JackEvent) events.get(i); if(event.getType() == JackEvent.MIDI_SYSTEM_EVENT){ if(event.getData()[0] == 0x51){ int usq = ((event.getData()[1] & 0xff) | ((event.getData()[2] & 0xff) << 8) | ((event.getData()[3] & 0xff) << 16)); long[] tempoChange = new long[2]; tempoChange[0] = event.getTick(); tempoChange[1] = ((long)((60.00 * 1000.00) / (usq / 1000.00)) ); tempoChanges.add( tempoChange ); } } } return tempoChanges; } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsListener.java0000644000175000017500000000031611273045346032600 0ustar julianjulianpackage org.herac.tuxguitar.jack.settings; import org.herac.tuxguitar.gui.system.config.TGConfigManager; public interface JackSettingsListener { public void loadSettings( TGConfigManager config ); } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsDialog.java0000644000175000017500000006323211273045346032220 0ustar julianjulianpackage org.herac.tuxguitar.jack.settings; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.jack.synthesizer.JackOutputPortRouter; public class JackSettingsDialog { private static final int TAB_WIDTH = 550; private static final int TAB_HEIGHT = 350; private JackSettings settings; public JackSettingsDialog( JackSettings settings ){ this.settings = settings; } public void open( Shell parent ){ final int[][] channelRouting = getChannelRoutingSettings(); final int[][] programRouting = getProgramRoutingSettings(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setText(TuxGuitar.getProperty("jack.settings.dialog")); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final TabFolder tabFolder = new TabFolder(dialog, SWT.TOP); tabFolder.setLayout( new FormLayout() ); final TabItem[] routingTabs = new TabItem[2]; // ---------------------------------------------------------------------- int synthRouteType = this.settings.getConfig().getIntConfigValue("jack.midi.ports.type", JackOutputPortRouter.CREATE_UNIQUE_PORT ); Composite tabControl = new Composite( tabFolder, SWT.NONE); tabControl.setLayout(new GridLayout()); tabControl.setLayoutData(new FormData(TAB_WIDTH,TAB_HEIGHT)); TabItem tabItem = new TabItem( tabFolder , SWT.None ); tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options")); tabItem.setControl(tabControl); Group groupSynth = new Group(tabControl,SWT.SHADOW_ETCHED_IN); groupSynth.setLayout(new GridLayout(1,false)); groupSynth.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); groupSynth.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port")); final Button buttonSynthRouteType1 = new Button(groupSynth, SWT.RADIO); final Button buttonSynthRouteType2 = new Button(groupSynth, SWT.RADIO); final Button buttonSynthRouteType3 = new Button(groupSynth, SWT.RADIO); buttonSynthRouteType1.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.type.single")); buttonSynthRouteType2.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.type.multiple-by-channel") ); buttonSynthRouteType3.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.type.multiple-by-program") ); if( synthRouteType == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL ){ buttonSynthRouteType2.setSelection( true ); routingTabs[0] = openChannelRoutingTab(tabFolder, channelRouting); }else if( synthRouteType == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM ){ buttonSynthRouteType3.setSelection( true ); routingTabs[1] = openProgramRoutingTab(tabFolder, programRouting); }else{ buttonSynthRouteType1.setSelection( true ); } final SelectionListener routeTypeListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { boolean channelRoutingTabsEnabled = buttonSynthRouteType2.getSelection(); boolean programRoutingTabsEnabled = buttonSynthRouteType3.getSelection(); if( channelRoutingTabsEnabled && routingTabs[0] == null ){ routingTabs[0] = openChannelRoutingTab(tabFolder, channelRouting); }else if( !channelRoutingTabsEnabled && routingTabs[0] != null ){ routingTabs[0].dispose(); routingTabs[0] = null; } if( programRoutingTabsEnabled && routingTabs[1] == null ){ routingTabs[1] = openProgramRoutingTab(tabFolder, programRouting); }else if( !programRoutingTabsEnabled && routingTabs[1] != null ){ routingTabs[1].dispose(); routingTabs[1] = null; } } }; buttonSynthRouteType1.addSelectionListener(routeTypeListener); buttonSynthRouteType2.addSelectionListener(routeTypeListener); buttonSynthRouteType3.addSelectionListener(routeTypeListener); // ------------------BUTTONS-------------------------- Composite compositeButtons = new Composite(dialog, SWT.NONE); compositeButtons.setLayout(new GridLayout(2,false)); compositeButtons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(compositeButtons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int type = JackOutputPortRouter.CREATE_UNIQUE_PORT; if( buttonSynthRouteType2.getSelection() ){ type = JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL; } else if( buttonSynthRouteType3.getSelection() ){ type = JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM; } saveChanges( type , channelRouting , programRouting ); dialog.dispose(); } }); Button buttonCancel = new Button(compositeButtons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void saveChanges( int type , int[][] channelRouting, int[][] programRouting){ if( type == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL ){ this.setChannelRoutingSettings(channelRouting); } else if( type == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM ){ this.setProgramRoutingSettings(programRouting); } this.settings.getConfig().setProperty("jack.midi.ports.type", type ); this.settings.notifyChanges(); } protected int[][] getChannelRoutingSettings(){ int[][] channelsRoute = new int[16][]; for( int i = 0 ; i < channelsRoute.length ; i ++ ){ channelsRoute[i] = new int[3]; channelsRoute[i][0] = i; channelsRoute[i][1] = this.settings.getConfig().getIntConfigValue("jack.midi.port.channel-routing.to-channel-" + i , -1 ); channelsRoute[i][2] = this.settings.getConfig().getIntConfigValue("jack.midi.port.channel-routing.to-program-" + i , -1 ); } return channelsRoute; } protected void setChannelRoutingSettings(int[][] channelsRoute){ for( int i = 0 ; i < channelsRoute.length ; i ++ ){ if( channelsRoute[i].length == 3 ){ this.settings.getConfig().setProperty("jack.midi.port.channel-routing.to-channel-" + channelsRoute[i][0] , channelsRoute[i][1] ); this.settings.getConfig().setProperty("jack.midi.port.channel-routing.to-program-" + channelsRoute[i][0] , channelsRoute[i][2] ); } } } protected int[][] getProgramRoutingSettings(){ int[][] routing = new int[129][]; for( int i = 0 ; i < routing.length ; i ++ ){ routing[i] = new int[4]; routing[i][0] = i; routing[i][1] = this.settings.getConfig().getIntConfigValue("jack.midi.port.program-routing.port-" + i , 0 ); routing[i][2] = this.settings.getConfig().getIntConfigValue("jack.midi.port.program-routing.to-channel-" + i , -1 ); routing[i][3] = this.settings.getConfig().getIntConfigValue("jack.midi.port.program-routing.to-program-" + i , -1 ); } return routing; } protected void setProgramRoutingSettings(int[][] routing){ for( int i = 0 ; i < routing.length ; i ++ ){ if( routing[i].length == 4 ){ this.settings.getConfig().setProperty("jack.midi.port.program-routing.port-" + routing[i][0] , routing[i][1] ); this.settings.getConfig().setProperty("jack.midi.port.program-routing.to-channel-" + routing[i][0] , routing[i][2] ); this.settings.getConfig().setProperty("jack.midi.port.program-routing.to-program-" + routing[i][0] , routing[i][3] ); } } } // ----------------------------------------------------------------------------------------------------// // PROGRAM ROUTING ------------------------------------------------------------------------------------// // ----------------------------------------------------------------------------------------------------// public TabItem openProgramRoutingTab( TabFolder tabFolder , int[][] routing ){ Composite tabControl = new Composite( tabFolder, SWT.NONE); tabControl.setLayout(new GridLayout()); tabControl.setLayoutData(new FormData(TAB_WIDTH,TAB_HEIGHT)); TabItem tabItem = new TabItem( tabFolder , SWT.None ); tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.options")); tabItem.setControl(tabControl); Composite composite = new Composite( tabControl, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Table table = new Table( composite, SWT.BORDER | SWT.FULL_SELECTION); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setHeaderVisible(true); TableColumn srcChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstPortColumn = new TableColumn(table, SWT.LEFT); TableColumn dstChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstProgramColumn = new TableColumn(table, SWT.LEFT); srcChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program")); dstPortColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port")); dstChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel")); dstProgramColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program")); srcChannelColumn.setWidth(125); dstPortColumn.setWidth(125); dstChannelColumn.setWidth(125); dstProgramColumn.setWidth(125); loadProgramRoutingItems( table , routing ); //-------------------------------------------------------// Composite buttons = new Composite( composite , SWT.NONE); buttons.setLayout(new GridLayout(1,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("edit")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int index = table.getSelectionIndex(); if( index >= 0 && index < table.getItemCount() ){ editProgramRoutingItem( table.getShell(), table.getItem( index ) ); } } }); //-------------------------------------------------------// return tabItem; } protected void loadProgramRoutingItems( Table table , int[][] routing ){ for( int i = 0 ; i < routing.length ; i ++ ){ this.addProgramRoutingItem(table, routing[i]); } } protected void addProgramRoutingItem( Table table, int[] route){ TableItem item = new TableItem(table, SWT.NONE ); this.addProgramRoutingItem(item, route); } protected void addProgramRoutingItem( TableItem item, int[] route){ if( route.length == 4 ){ String[] text = new String[4]; if( route[0] < 128 ){ text[0] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.item", new String[]{ Integer.toString(route[0]) })); }else{ text[0] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.percussion")); } if( route[1] > 0 ){ text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated")); }else{ text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.default")); } if( route[2] >= 0 ){ text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.item", new String[]{ Integer.toString(route[2]) })); }else{ text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.default")); } if( route[3] >= 0 ){ text[3] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.item", new String[]{ Integer.toString(route[3]) })); }else{ text[3] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.default")); } item.setText( text ); item.setData( route ); } } public void editProgramRoutingItem( Shell parent , final TableItem item){ final int[] route = (int [])item.getData(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM); dialog.setLayout(new GridLayout(1,false)); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.options")); // ---------------------------------------------------------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.options")); Label program = new Label(group, SWT.NULL); program.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); program.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program") + ":"); Label programValue = new Label(group, SWT.NULL); programValue.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); if( route[0] < 128 ){ programValue.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.item", new String[]{ Integer.toString(route[0]) })); }else{ programValue.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.percussion")); } Label programPort = new Label(group, SWT.NULL); programPort.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); programPort.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port") + ":"); final Combo programPortValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); programPortValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); programPortValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.default")); programPortValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated")); programPortValue.select( route[1] ); Label channelRoute = new Label(group, SWT.NULL); channelRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); channelRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel") + ":"); final Combo channelRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); channelRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.default")); for( int i = 0 ; i < 16 ; i ++ ){ channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.item", new String[]{Integer.toString(i)})); } channelRouteValue.select( route[2] + 1 ); Label programRoute = new Label(group, SWT.NULL); programRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); programRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program") + ":"); final Combo programRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); programRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.default")); for( int i = 0 ; i < 128 ; i ++ ){ programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.item", new String[]{Integer.toString(i)})); } programRouteValue.select( route[3] + 1 ); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { route[1] = programPortValue.getSelectionIndex(); route[2] = channelRouteValue.getSelectionIndex() - 1; route[3] = programRouteValue.getSelectionIndex() - 1; addProgramRoutingItem(item, route); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonCancel ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } // ----------------------------------------------------------------------------------------------------// // CHANNEL ROUTING ------------------------------------------------------------------------------------// // ----------------------------------------------------------------------------------------------------// public TabItem openChannelRoutingTab( TabFolder tabFolder , int[][] routing ){ Composite tabControl = new Composite( tabFolder, SWT.NONE); tabControl.setLayout(new GridLayout()); tabControl.setLayoutData(new FormData(TAB_WIDTH,TAB_HEIGHT)); TabItem tabItem = new TabItem( tabFolder , SWT.None ); tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.options")); tabItem.setControl(tabControl); Composite composite = new Composite( tabControl, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Table table = new Table( composite, SWT.BORDER | SWT.FULL_SELECTION); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setHeaderVisible(true); TableColumn srcChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstProgramColumn = new TableColumn(table, SWT.LEFT); srcChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel")); dstChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel")); dstProgramColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program")); srcChannelColumn.setWidth(166); dstChannelColumn.setWidth(166); dstProgramColumn.setWidth(166); loadChannelRoutingItems( table , routing ); //-------------------------------------------------------// Composite buttons = new Composite( composite , SWT.NONE); buttons.setLayout(new GridLayout(1,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false)); final Button buttonEdit = new Button(buttons, SWT.PUSH); buttonEdit.setText(TuxGuitar.getProperty("edit")); buttonEdit.setLayoutData(getButtonData()); buttonEdit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int index = table.getSelectionIndex(); if( index >= 0 && index < table.getItemCount() ){ editChannelRoutingItem( table.getShell(), table.getItem( index ) ); } } }); //-------------------------------------------------------// return tabItem; } protected void loadChannelRoutingItems( Table table , int[][] routing ){ for( int i = 0 ; i < routing.length ; i ++ ){ this.addChannelRoutingItem(table, routing[i]); } } protected void addChannelRoutingItem( Table table, int[] route){ TableItem item = new TableItem(table, SWT.NONE ); this.addChannelRoutingItem(item, route); } protected void addChannelRoutingItem( TableItem item, int[] route){ if( route.length == 3 ){ String[] text = new String[3]; text[0] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel.item", new String[]{ Integer.toString(route[0]) })); if( route[1] >= 0 ){ text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.item", new String[]{ Integer.toString(route[1]) })); }else{ text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.default")); } if( route[2] >= 0 ){ text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.item", new String[]{ Integer.toString(route[2]) })); }else{ text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.default")); } item.setText( text ); item.setData( route ); } } public void editChannelRoutingItem( Shell parent , final TableItem item){ final int[] route = (int [])item.getData(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM); dialog.setLayout(new GridLayout(1,false)); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.options")); // ---------------------------------------------------------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.options")); Label channel = new Label(group, SWT.NULL); channel.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); channel.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel") + ":"); Label channelValue = new Label(group, SWT.NULL); channelValue.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); channelValue.setText( TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel.item", new String[]{ Integer.toString(route[0]) }) ); Label channelRoute = new Label(group, SWT.NULL); channelRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); channelRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel") + ":"); final Combo channelRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); channelRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.default")); for( int i = 0 ; i < 16 ; i ++ ){ channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.item", new String[]{Integer.toString(i)})); } channelRouteValue.select( route[1] + 1 ); Label programRoute = new Label(group, SWT.NULL); programRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); programRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program") + ":"); final Combo programRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); programRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.default")); for( int i = 0 ; i < 127 ; i ++ ){ programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.item", new String[]{Integer.toString(i)})); } programRouteValue.select( route[2] + 1 ); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { route[1] = channelRouteValue.getSelectionIndex() - 1; route[2] = programRouteValue.getSelectionIndex() - 1; addChannelRoutingItem(item, route); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonCancel ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } } tuxguitar-src-1.2/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettings.java0000644000175000017500000000224211273045346031072 0ustar julianjulianpackage org.herac.tuxguitar.jack.settings; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; public class JackSettings { private List listeners; private TGConfigManager config; public JackSettings(){ this.listeners = new ArrayList(); this.config = new TGPluginConfigManager("tuxguitar-jack"); this.config.init(); } public TGConfigManager getConfig(){ return this.config; } public void notifyChanges(){ this.getConfig().save(); this.getConfig().load(); this.fireListeners(); } public void addListener(JackSettingsListener listener){ if( !this.listeners.contains( listener ) ){ this.listeners.add( listener ); } } public void removeListener(JackSettingsListener listener){ if( this.listeners.contains( listener ) ){ this.listeners.remove( listener ); } } public void fireListeners(){ Iterator it = this.listeners.iterator(); while( it.hasNext() ){ JackSettingsListener listener = (JackSettingsListener) it.next(); listener.loadSettings( getConfig() ); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/Action.java0000644000175000017500000000606511273045225026467 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to Window * Preferences - Java - Code Style - Code Templates */ public abstract class Action extends ActionAdapter { protected static final int AUTO_LOCK = 0x01; protected static final int AUTO_UNLOCK = 0x02; protected static final int AUTO_UPDATE = 0x04; protected static final int KEY_BINDING_AVAILABLE = 0x08; protected static final int DISABLE_ON_PLAYING = 0x10; private String name; private int flags; public Action(String name, int flags) { this.name = name; this.flags = flags; } protected abstract int execute(TypedEvent e); public synchronized void process(final TypedEvent e) { if (!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()) { final int flags = getFlags(); if ((flags & DISABLE_ON_PLAYING) != 0 && TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().updateCache(((flags & AUTO_UPDATE) != 0)); return; } if ((flags & AUTO_LOCK) != 0) { ActionLock.lock(); } /* new SyncThread(new Runnable() { public void run() { if (!TuxGuitar.isDisposed()) { int result = execute(e); TuxGuitar.instance().updateCache((((flags | result) & AUTO_UPDATE) != 0)); if (((flags | result) & AUTO_UNLOCK) != 0) { ActionLock.unlock(); } } } }).start(); */ try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { if (!TuxGuitar.isDisposed()) { int result = execute(e); TuxGuitar.instance().updateCache((((flags | result) & AUTO_UPDATE) != 0)); if (((flags | result) & AUTO_UNLOCK) != 0) { ActionLock.unlock(); } } } }); } catch (Throwable throwable) { throwable.printStackTrace(); } } } protected int getFlags() { return this.flags; } public TGSongManager getSongManager() { return TuxGuitar.instance().getSongManager(); } public TablatureEditor getEditor() { return TuxGuitar.instance().getTablatureEditor(); } public String getName() { return this.name; } public boolean isKeyBindingAvailable() { return ((getFlags() & KEY_BINDING_AVAILABLE) != 0); } public synchronized void updateTablature() { TuxGuitar.instance().fireUpdate(); } public void fireUpdate(int measureNumber) { this.getEditor().getTablature().getViewLayout().fireUpdate(measureNumber); } public void addUndoableEdit(UndoableEdit anEdit) { TuxGuitar.instance().getUndoableManager().addEdit(anEdit); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionAdapter.java0000644000175000017500000000353211273045225027764 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.MenuListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.events.ShellListener; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolItem; public abstract class ActionAdapter implements SelectionListener,MouseListener,MenuListener,ShellListener{ public abstract void process(TypedEvent e); public void widgetSelected(SelectionEvent e) { if(e.widget != null && (e.widget.getStyle() & SWT.RADIO) != 0){ if(e.widget instanceof Button && !((Button)e.widget).getSelection() ){ return; } if(e.widget instanceof ToolItem && !((ToolItem)e.widget).getSelection() ){ return; } if(e.widget instanceof MenuItem && !((MenuItem)e.widget).getSelection() ){ return; } } process(e); } public void mouseUp(MouseEvent e) { process(e); } public void menuShown(MenuEvent e) { process(e); } public void shellClosed(ShellEvent e) { e.doit = false; process(e); } public void widgetDefaultSelected(SelectionEvent e) { //Override me } public void mouseDoubleClick(MouseEvent e) { //Override me } public void mouseDown(MouseEvent e) { //Override me } public void menuHidden(MenuEvent e) { //Override me } public void shellActivated(ShellEvent e) { //Override me } public void shellDeactivated(ShellEvent e) { //Override me } public void shellDeiconified(ShellEvent e) { //Override me } public void shellIconified(ShellEvent e) { //Override me } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionLock.java0000644000175000017500000000102411273045225027266 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions; public class ActionLock { private static boolean working; public synchronized static boolean isLocked(){ return working; } public synchronized static void lock(){ working = true; } public synchronized static void unlock(){ working = false; } public synchronized static void waitFor(){ try { while(isLocked()){ synchronized( ActionLock.class ) { ActionLock.class.wait(1); } } } catch (InterruptedException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionManager.java0000644000175000017500000003773311273045225027770 0ustar julianjulian/* * Created on 18-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.herac.tuxguitar.gui.actions.caret.GoDownAction; import org.herac.tuxguitar.gui.actions.caret.GoLeftAction; import org.herac.tuxguitar.gui.actions.caret.GoRightAction; import org.herac.tuxguitar.gui.actions.caret.GoUpAction; import org.herac.tuxguitar.gui.actions.composition.ChangeClefAction; import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction; import org.herac.tuxguitar.gui.actions.composition.ChangeKeySignatureAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTempoAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTimeSignatureAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTripletFeelAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction; import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction; import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction; import org.herac.tuxguitar.gui.actions.edit.RedoAction; import org.herac.tuxguitar.gui.actions.edit.SetMouseModeEditionAction; import org.herac.tuxguitar.gui.actions.edit.SetMouseModeSelectionAction; import org.herac.tuxguitar.gui.actions.edit.SetNaturalKeyAction; import org.herac.tuxguitar.gui.actions.edit.SetVoice1Action; import org.herac.tuxguitar.gui.actions.edit.SetVoice2Action; import org.herac.tuxguitar.gui.actions.edit.UndoAction; import org.herac.tuxguitar.gui.actions.effects.ChangeAccentuatedNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeBendNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeDeadNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeFadeInAction; import org.herac.tuxguitar.gui.actions.effects.ChangeGhostNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeGraceNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHammerNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHarmonicNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHeavyAccentuatedNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangePalmMuteAction; import org.herac.tuxguitar.gui.actions.effects.ChangePoppingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeSlappingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeSlideNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeStaccatoAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTappingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloBarAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloPickingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTrillNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeVibratoNoteAction; import org.herac.tuxguitar.gui.actions.file.ExitAction; import org.herac.tuxguitar.gui.actions.file.ExportSongAction; import org.herac.tuxguitar.gui.actions.file.ImportSongAction; import org.herac.tuxguitar.gui.actions.file.NewFileAction; import org.herac.tuxguitar.gui.actions.file.OpenFileAction; import org.herac.tuxguitar.gui.actions.file.OpenURLAction; import org.herac.tuxguitar.gui.actions.file.PrintAction; import org.herac.tuxguitar.gui.actions.file.PrintPreviewAction; import org.herac.tuxguitar.gui.actions.file.SaveAsFileAction; import org.herac.tuxguitar.gui.actions.file.SaveFileAction; import org.herac.tuxguitar.gui.actions.help.ShowAboutAction; import org.herac.tuxguitar.gui.actions.help.ShowDocAction; import org.herac.tuxguitar.gui.actions.insert.InsertChordAction; import org.herac.tuxguitar.gui.actions.insert.InsertTextAction; import org.herac.tuxguitar.gui.actions.insert.RepeatAlternativeAction; import org.herac.tuxguitar.gui.actions.insert.RepeatCloseAction; import org.herac.tuxguitar.gui.actions.insert.RepeatOpenAction; import org.herac.tuxguitar.gui.actions.layout.SetChordDiagramEnabledAction; import org.herac.tuxguitar.gui.actions.layout.SetChordNameEnabledAction; import org.herac.tuxguitar.gui.actions.layout.SetCompactViewAction; import org.herac.tuxguitar.gui.actions.layout.SetLinearLayoutAction; import org.herac.tuxguitar.gui.actions.layout.SetMultitrackViewAction; import org.herac.tuxguitar.gui.actions.layout.SetPageLayoutAction; import org.herac.tuxguitar.gui.actions.layout.SetScoreEnabledAction; import org.herac.tuxguitar.gui.actions.layout.SetTablatureEnabledAction; import org.herac.tuxguitar.gui.actions.marker.AddMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoFirstMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoLastMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoNextMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoPreviousMarkerAction; import org.herac.tuxguitar.gui.actions.marker.ListMarkersAction; import org.herac.tuxguitar.gui.actions.measure.AddMeasureAction; import org.herac.tuxguitar.gui.actions.measure.CleanMeasureAction; import org.herac.tuxguitar.gui.actions.measure.CopyMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoFirstMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoLastMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoNextMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoPreviousMeasureAction; import org.herac.tuxguitar.gui.actions.measure.PasteMeasureAction; import org.herac.tuxguitar.gui.actions.measure.RemoveMeasureAction; import org.herac.tuxguitar.gui.actions.note.ChangeNoteAction; import org.herac.tuxguitar.gui.actions.note.ChangeTiedNoteAction; import org.herac.tuxguitar.gui.actions.note.ChangeVelocityAction; import org.herac.tuxguitar.gui.actions.note.CleanBeatAction; import org.herac.tuxguitar.gui.actions.note.DecrementNoteSemitoneAction; import org.herac.tuxguitar.gui.actions.note.IncrementNoteSemitoneAction; import org.herac.tuxguitar.gui.actions.note.InsertNoteAction; import org.herac.tuxguitar.gui.actions.note.MoveBeatsCustomAction; import org.herac.tuxguitar.gui.actions.note.MoveBeatsLeftAction; import org.herac.tuxguitar.gui.actions.note.MoveBeatsRightAction; import org.herac.tuxguitar.gui.actions.note.RemoveNoteAction; import org.herac.tuxguitar.gui.actions.note.RemoveUnusedVoiceAction; import org.herac.tuxguitar.gui.actions.note.SetStrokeDownAction; import org.herac.tuxguitar.gui.actions.note.SetStrokeUpAction; import org.herac.tuxguitar.gui.actions.note.SetVoiceAutoAction; import org.herac.tuxguitar.gui.actions.note.SetVoiceDownAction; import org.herac.tuxguitar.gui.actions.note.SetVoiceUpAction; import org.herac.tuxguitar.gui.actions.note.ShiftNoteDownAction; import org.herac.tuxguitar.gui.actions.note.ShiftNoteUpAction; import org.herac.tuxguitar.gui.actions.settings.EditConfigAction; import org.herac.tuxguitar.gui.actions.settings.EditKeyBindingsAction; import org.herac.tuxguitar.gui.actions.settings.EditPluginsAction; import org.herac.tuxguitar.gui.actions.system.DisposeAction; import org.herac.tuxguitar.gui.actions.tools.ScaleAction; import org.herac.tuxguitar.gui.actions.tools.TGBrowserAction; import org.herac.tuxguitar.gui.actions.tools.TransposeAction; import org.herac.tuxguitar.gui.actions.track.AddTrackAction; import org.herac.tuxguitar.gui.actions.track.CloneTrackAction; import org.herac.tuxguitar.gui.actions.track.EditLyricsAction; import org.herac.tuxguitar.gui.actions.track.GoFirstTrackAction; import org.herac.tuxguitar.gui.actions.track.GoLastTrackAction; import org.herac.tuxguitar.gui.actions.track.GoNextTrackAction; import org.herac.tuxguitar.gui.actions.track.GoPreviousTrackAction; import org.herac.tuxguitar.gui.actions.track.GoToTrackAction; import org.herac.tuxguitar.gui.actions.track.MoveTrackDownAction; import org.herac.tuxguitar.gui.actions.track.MoveTrackUpAction; import org.herac.tuxguitar.gui.actions.track.RemoveTrackAction; import org.herac.tuxguitar.gui.actions.track.TrackPropertiesAction; import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction; import org.herac.tuxguitar.gui.actions.transport.TransportModeAction; import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction; import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopEHeaderAction; import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopSHeaderAction; import org.herac.tuxguitar.gui.actions.transport.TransportStopAction; import org.herac.tuxguitar.gui.actions.view.ShowFretBoardAction; import org.herac.tuxguitar.gui.actions.view.ShowMatrixAction; import org.herac.tuxguitar.gui.actions.view.ShowMixerAction; import org.herac.tuxguitar.gui.actions.view.ShowPianoAction; import org.herac.tuxguitar.gui.actions.view.ShowTransportAction; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ActionManager { private Map actions; public ActionManager(){ this.actions = new HashMap(); this.init(); } public void init(){ //file actions addAction(new NewFileAction()); addAction(new OpenFileAction()); addAction(new SaveFileAction()); addAction(new SaveAsFileAction()); addAction(new ImportSongAction()); addAction(new ExportSongAction()); addAction(new PrintAction()); addAction(new PrintPreviewAction()); addAction(new OpenURLAction()); addAction(new ExitAction()); //edit actions addAction(new UndoAction()); addAction(new RedoAction()); addAction(new SetMouseModeSelectionAction()); addAction(new SetMouseModeEditionAction()); addAction(new SetNaturalKeyAction()); addAction(new SetVoice1Action()); addAction(new SetVoice2Action()); //layout actions addAction(new SetPageLayoutAction()); addAction(new SetLinearLayoutAction()); addAction(new SetMultitrackViewAction()); addAction(new SetScoreEnabledAction()); addAction(new SetTablatureEnabledAction()); addAction(new SetCompactViewAction()); addAction(new SetChordNameEnabledAction()); addAction(new SetChordDiagramEnabledAction()); //view actions addAction(new ShowFretBoardAction()); addAction(new ShowPianoAction()); addAction(new ShowMixerAction()); addAction(new ShowTransportAction()); addAction(new ShowMatrixAction()); //composition actions addAction(new ChangeTimeSignatureAction()); addAction(new ChangeTempoAction()); addAction(new ChangeClefAction()); addAction(new ChangeKeySignatureAction()); addAction(new ChangeTripletFeelAction()); addAction(new ChangeInfoAction()); //track actions addAction(new AddTrackAction()); addAction(new RemoveTrackAction()); addAction(new CloneTrackAction()); addAction(new GoFirstTrackAction()); addAction(new GoLastTrackAction()); addAction(new GoNextTrackAction()); addAction(new GoToTrackAction()); addAction(new GoPreviousTrackAction()); addAction(new MoveTrackUpAction()); addAction(new MoveTrackDownAction()); addAction(new EditLyricsAction()); addAction(new TrackPropertiesAction()); //measure actions addAction(new AddMeasureAction()); addAction(new RemoveMeasureAction()); addAction(new CopyMeasureAction()); addAction(new PasteMeasureAction()); addAction(new GoFirstMeasureAction()); addAction(new GoLastMeasureAction()); addAction(new GoNextMeasureAction()); addAction(new GoPreviousMeasureAction()); addAction(new CleanMeasureAction()); //note actions addAction(new ChangeNoteAction()); addAction(new InsertNoteAction()); addAction(new RemoveNoteAction()); addAction(new RemoveUnusedVoiceAction()); addAction(new CleanBeatAction()); addAction(new ChangeTiedNoteAction()); addAction(new ChangeVelocityAction()); addAction(new ShiftNoteUpAction()); addAction(new ShiftNoteDownAction()); addAction(new IncrementNoteSemitoneAction()); addAction(new DecrementNoteSemitoneAction()); addAction(new SetStrokeUpAction()); addAction(new SetStrokeDownAction()); addAction(new MoveBeatsRightAction()); addAction(new MoveBeatsLeftAction()); addAction(new MoveBeatsCustomAction()); //duration actions addAction(new SetWholeDurationAction()); addAction(new SetHalfDurationAction()); addAction(new SetQuarterDurationAction()); addAction(new SetEighthDurationAction()); addAction(new SetSixteenthDurationAction()); addAction(new SetThirtySecondDurationAction()); addAction(new SetSixtyFourthDurationAction()); addAction(new ChangeDottedDurationAction()); addAction(new ChangeDoubleDottedDurationAction()); addAction(new ChangeDivisionTypeAction()); addAction(new IncrementDurationAction()); addAction(new DecrementDurationAction()); //insert actions addAction(new RepeatOpenAction()); addAction(new RepeatCloseAction()); addAction(new RepeatAlternativeAction()); addAction(new InsertChordAction()); addAction(new InsertTextAction()); //note effects action addAction(new ChangeVibratoNoteAction()); addAction(new ChangeBendNoteAction()); addAction(new ChangeDeadNoteAction()); addAction(new ChangeSlideNoteAction()); addAction(new ChangeHammerNoteAction()); addAction(new ChangeGhostNoteAction()); addAction(new ChangeAccentuatedNoteAction()); addAction(new ChangeHeavyAccentuatedNoteAction()); addAction(new ChangeHarmonicNoteAction()); addAction(new ChangeGraceNoteAction()); addAction(new ChangeTrillNoteAction()); addAction(new ChangeTremoloPickingAction()); addAction(new ChangePalmMuteAction()); addAction(new ChangeStaccatoAction()); addAction(new ChangeTappingAction()); addAction(new ChangeSlappingAction()); addAction(new ChangePoppingAction()); addAction(new ChangeTremoloBarAction()); addAction(new ChangeFadeInAction()); addAction(new SetVoiceAutoAction()); addAction(new SetVoiceUpAction()); addAction(new SetVoiceDownAction()); //marker actions addAction(new AddMarkerAction()); addAction(new ListMarkersAction()); addAction(new GoPreviousMarkerAction()); addAction(new GoNextMarkerAction()); addAction(new GoFirstMarkerAction()); addAction(new GoLastMarkerAction()); //player actions addAction(new TransportPlayAction()); addAction(new TransportStopAction()); addAction(new TransportMetronomeAction()); addAction(new TransportModeAction()); addAction(new TransportSetLoopSHeaderAction()); addAction(new TransportSetLoopEHeaderAction()); //setting actions addAction(new EditPluginsAction()); addAction(new EditConfigAction()); addAction(new EditKeyBindingsAction()); //caret actions addAction(new GoRightAction()); addAction(new GoLeftAction()); addAction(new GoUpAction()); addAction(new GoDownAction()); //help actions addAction(new ShowDocAction()); addAction(new ShowAboutAction()); //tools addAction(new TransposeAction() ); addAction(new ScaleAction()); addAction(new TGBrowserAction()); //exit addAction(new DisposeAction()); } public void addAction(Action action){ this.actions.put(action.getName(),action); } public void removeAction(String name){ this.actions.remove(name); } public Action getAction(String name){ return (Action)this.actions.get(name); } public List getAvailableKeyBindingActions(){ List availableKeyBindingActions = new ArrayList(); Iterator it = this.actions.keySet().iterator(); while(it.hasNext()){ String actionName = (String)it.next(); if(getAction(actionName).isKeyBindingAvailable()){ availableKeyBindingActions.add(actionName); } } return availableKeyBindingActions; } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/CannotInsertTransferException.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/CannotInsertTransferException.java0000644000175000017500000000143311273045225033536 0ustar julianjulian/* * Created on 05-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.clipboard; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CannotInsertTransferException extends Exception{ private static final long serialVersionUID = 1L; public CannotInsertTransferException() { super(); } public CannotInsertTransferException(String message) { super(message); } public CannotInsertTransferException(String message, Throwable cause) { super(message, cause); } public CannotInsertTransferException(Throwable cause) { super(cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/ClipBoard.java0000644000175000017500000000160511273045225027403 0ustar julianjulian/* * Created on 09-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.clipboard; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ClipBoard { private Transferable transferable; public ClipBoard(){ this.transferable = null; } public void addTransferable(Transferable transferable){ this.transferable = transferable; } public Transferable getTransferable(){ return this.transferable; } public void insertTransfer() throws CannotInsertTransferException{ if(this.isEmpty()){ throw new CannotInsertTransferException(); } this.transferable.insertTransfer(); } public boolean isEmpty(){ return (this.transferable == null); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/MeasureTransferable.java0000644000175000017500000001227311273045225031501 0ustar julianjulian/* * Created on 09-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.clipboard; import java.util.Iterator; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableInsertMeasure; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableReplaceMeasures; import org.herac.tuxguitar.song.helpers.TGSongSegment; import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class MeasureTransferable implements Transferable { public static final int TRANSFER_TYPE_REPLACE = 1; public static final int TRANSFER_TYPE_INSERT = 2; private TablatureEditor tablatureEditor; private TGSongSegment segment; private int transferType; private int pasteCount; public MeasureTransferable(TablatureEditor tablatureEditor, int p1, int p2,boolean allTracks) { this.tablatureEditor = tablatureEditor; this.transferType = TRANSFER_TYPE_REPLACE; this.getTransfer(p1, p2,allTracks); } private void getTransfer(int p1, int p2,boolean allTracks) { if(allTracks){ this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2); }else{ TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack(); this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2,track); } skipMarkers(this.segment); } public void insertTransfer() throws CannotInsertTransferException { TGSongSegmentHelper helper = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()); TGSongSegment segment = helper.createSegmentCopies(this.segment, this.pasteCount ); if(this.transferType == TRANSFER_TYPE_REPLACE){ replaceMeasures(helper, segment); }else if(this.transferType == TRANSFER_TYPE_INSERT){ insertMeasures(helper, segment); } } public void insertMeasures(TGSongSegmentHelper helper, TGSongSegment segment) throws CannotInsertTransferException { TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure(); TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack(); if (measure == null || segment.isEmpty()) { throw new CannotInsertTransferException(); } //Si el segmento tiene una sola pista, //la pego en la pista seleccionada int toTrack = ((segment.getTracks().size() == 1)?track.getNumber():0); //comienza el undoable UndoableInsertMeasure undoable = new UndoableInsertMeasure(toTrack); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TGMeasureHeader first = (TGMeasureHeader)segment.getHeaders().get(0); int fromNumber = measure.getNumber(); long theMove = (measure.getStart() - first.getStart()); helper.insertMeasures(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),fromNumber,theMove,toTrack); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),segment.getHeaders().size(),fromNumber,theMove)); } public void replaceMeasures(TGSongSegmentHelper helper, TGSongSegment segment) throws CannotInsertTransferException { TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure(); TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack(); if (measure == null || segment.isEmpty()) { throw new CannotInsertTransferException(); } TGMeasureHeader first = (TGMeasureHeader)segment.getHeaders().get(0); //Si el segmento tiene una sola pista, //la pego en la pista seleccionada int toTrack = ((segment.getTracks().size() == 1)?track.getNumber():0); //si no existen los compases los creo int count = segment.getHeaders().size(); int current = measure.getNumber(); int freeSpace = (track.countMeasures() - (current - 1)); long theMove = (measure.getStart() - first.getStart()); //comienza el undoable UndoableReplaceMeasures undoable = new UndoableReplaceMeasures(current, (current + count) , toTrack); TuxGuitar.instance().getFileHistory().setUnsavedFile(); for(int i = freeSpace;i < count;i ++){ TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd(); } helper.replaceMeasures(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),theMove,toTrack); //Termina el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),count,freeSpace,theMove)); } public void setTransferType(int transferType){ this.transferType = transferType; } public void setPasteCount(int pasteCount){ this.pasteCount = pasteCount; } private void skipMarkers(TGSongSegment segment){ Iterator it = segment.getHeaders().iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); header.setMarker(null); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/Transferable.java0000644000175000017500000000072211273045225030153 0ustar julianjulian/* * Created on 09-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.clipboard; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public interface Transferable { public void insertTransfer()throws CannotInsertTransferException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/EditorCache.java0000644000175000017500000001021611273045225027426 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.util.MidiTickUtil; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; public class EditorCache { //Modo edition private boolean editUpdate; private TGBeatImpl editBeat; //Modo reproduccion private int playTrack; private long playTick; private long playStart; private long playBeatEnd; private boolean playChanges; private boolean playUpdate; private TGBeatImpl playBeat; private TGMeasureImpl playMeasure; public EditorCache(){ this.reset(); } public void reset(){ this.resetEditMode(); this.resetPlayMode(); } private void resetEditMode(){ this.editBeat = null; this.editUpdate = false; } private void resetPlayMode(){ this.playBeat = null; this.playMeasure = null; this.playUpdate = false; this.playChanges = false; this.playTrack = 0; this.playTick = 0; this.playStart = 0; this.playBeatEnd = 0; } public void updateEditMode(){ this.editUpdate = true; this.resetPlayMode(); this.getEditBeat(); } public void updatePlayMode(){ this.playUpdate = true; this.resetEditMode(); this.getPlayBeat(); } public TGBeatImpl getEditBeat() { if(this.editUpdate){ this.editBeat = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedBeat(); this.editUpdate = false; } return this.editBeat; } public TGBeatImpl getPlayBeat(){ if(this.playUpdate){ this.playChanges = false; TGSongManager manager = TuxGuitar.instance().getSongManager(); if(TuxGuitar.instance().getPlayer().isRunning()){ Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGTrack track = caret.getTrack(); long tick = TuxGuitar.instance().getPlayer().getTickPosition(); long start = this.playStart + (tick - this.playTick); if(this.playMeasure == null || start < this.playMeasure.getStart() || start > (this.playMeasure.getStart() + this.playMeasure.getLength())){ this.playMeasure = null; start = MidiTickUtil.getStart(tick); } if(this.playMeasure == null || this.playBeatEnd == 0 || start > this.playBeatEnd || start < this.playStart || track.getNumber() != this.playTrack){ this.playBeat = null; this.playBeatEnd = 0; this.playChanges = true; if(this.playMeasure == null || !this.playMeasure.hasTrack(track.getNumber()) || !isPlaying(this.playMeasure)){ this.playMeasure = (TGMeasureImpl)manager.getTrackManager().getMeasureAt(track,start); } if (this.playMeasure != null) { this.playBeat = (TGBeatImpl)manager.getMeasureManager().getBeatIn(this.playMeasure, start); if(this.playBeat != null){ TGBeat next = manager.getMeasureManager().getNextBeat(this.playMeasure.getBeats(), this.playBeat); if( next != null ){ this.playBeatEnd = next.getStart(); }else{ TGDuration duration = manager.getMeasureManager().getMinimumDuration(this.playBeat); this.playBeatEnd = (this.playBeat.getStart() + duration.getTime()); } } } } this.playTrack = track.getNumber(); this.playTick = tick; this.playStart = start; } this.playUpdate = false; } return this.playBeat; } public long getPlayTick(){ return this.playTick; } public long getPlayStart(){ return this.playStart; } public TGMeasureImpl getPlayMeasure(){ return this.playMeasure; } public boolean shouldRedraw(){ return this.playChanges; } public boolean isPlaying(TGMeasure measure){ return (TuxGuitar.instance().getPlayer().isRunning() && this.playMeasure != null && measure.equals(this.playMeasure)); } public boolean isPlaying(TGMeasure measure,TGBeat b){ return (isPlaying(measure) && this.playBeat != null && this.playBeat.getStart() == b.getStart()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/FretBoardEditor.java0000644000175000017500000000641611273045225030302 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.widgets.Composite; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.fretboard.FretBoard; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.tools.scale.ScaleListener; import org.herac.tuxguitar.song.models.TGBeat; public class FretBoardEditor implements TGRedrawListener, TGExternalBeatViewerListener, IconLoader, LanguageLoader, ScaleListener{ private FretBoard fretBoard; private boolean visible; public FretBoardEditor(){ TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getScaleManager().addListener(this); } private FretBoard getFretBoard(){ return this.fretBoard; } public void hideFretBoard(){ this.visible = false; getFretBoard().setVisible(this.visible); TuxGuitar.instance().getEditorManager().removeRedrawListener(this); TuxGuitar.instance().getEditorManager().removeBeatViewerListener(this); TuxGuitar.instance().updateShellFooter(0,0,0); } public void showFretBoard(){ this.visible = true; getFretBoard().setVisible(this.visible); TuxGuitar.instance().getEditorManager().addRedrawListener(this); TuxGuitar.instance().getEditorManager().addBeatViewerListener(this); TuxGuitar.instance().updateShellFooter(getFretBoard().getHeight(), 730,520); } public void showFretBoard(Composite parent) { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); data.top = new FormAttachment(0,0); data.bottom = new FormAttachment(100,0); this.fretBoard = new FretBoard(parent); this.fretBoard.setLayoutData(data); } public void dispose(){ if(getFretBoard() != null && !getFretBoard().isDisposed()){ getFretBoard().dispose(); } } public void redraw(){ if(getFretBoard() != null && !getFretBoard().isDisposed() && !TuxGuitar.instance().isLocked()){ getFretBoard().redraw(); } } public void redrawPlayingMode(){ if(getFretBoard() != null && !getFretBoard().isDisposed() && !TuxGuitar.instance().isLocked()){ getFretBoard().redrawPlayingMode(); } } public boolean isVisible(){ return (getFretBoard() != null && !getFretBoard().isDisposed() && this.visible); } public void loadProperties(){ if(getFretBoard() != null && !getFretBoard().isDisposed()){ getFretBoard().loadProperties(); } } public void loadIcons(){ if(getFretBoard() != null && !getFretBoard().isDisposed()){ getFretBoard().loadIcons(); } } public void loadScale(){ if(getFretBoard() != null){ getFretBoard().loadScale(); } } public void doRedraw(int type) { if( type == TGRedrawListener.NORMAL ){ this.redraw(); }else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){ this.redrawPlayingMode(); } } public void showExternalBeat(TGBeat beat) { if(getFretBoard() != null && !getFretBoard().isDisposed()){ getFretBoard().setExternalBeat(beat); } } public void hideExternalBeat() { if(getFretBoard() != null && !getFretBoard().isDisposed()){ getFretBoard().setExternalBeat(null); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/PianoEditor.java0000644000175000017500000000637511273045225027504 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.piano.Piano; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.tools.scale.ScaleListener; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGBeat; public class PianoEditor implements TGRedrawListener, TGExternalBeatViewerListener, IconLoader, LanguageLoader, ScaleListener{ private Piano piano; public PianoEditor(){ super(); } public void show() { Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("piano.editor")); this.piano = new Piano(dialog,SWT.NONE); this.addListeners(); dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { removeListeners(); TuxGuitar.instance().updateCache(true); } }); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } public void addListeners(){ TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getScaleManager().addListener(this); TuxGuitar.instance().getEditorManager().addRedrawListener(this); TuxGuitar.instance().getEditorManager().addBeatViewerListener(this); } public void removeListeners(){ TuxGuitar.instance().getIconManager().removeLoader(this); TuxGuitar.instance().getLanguageManager().removeLoader(this); TuxGuitar.instance().getScaleManager().removeListener(this); TuxGuitar.instance().getEditorManager().removeRedrawListener(this); TuxGuitar.instance().getEditorManager().removeBeatViewerListener(this); } private Piano getPiano(){ return this.piano; } public void dispose(){ if(!isDisposed()){ getPiano().getShell().dispose(); getPiano().dispose(); } } public void redraw(){ if(!isDisposed() && !TuxGuitar.instance().isLocked()){ getPiano().redraw(); } } public void redrawPlayingMode(){ if(!isDisposed() && !TuxGuitar.instance().isLocked()){ getPiano().redrawPlayingMode(); } } public boolean isDisposed() { return (this.getPiano() == null || getPiano().isDisposed()); } public void loadProperties(){ if(!isDisposed()){ getPiano().loadProperties(); getPiano().getShell().setText(TuxGuitar.getProperty("piano.editor")); } } public void loadIcons(){ if(!isDisposed()){ getPiano().loadIcons(); } } public void loadScale(){ if(!isDisposed()){ getPiano().loadScale(); } } public void doRedraw(int type) { if( type == TGRedrawListener.NORMAL ){ this.redraw(); }else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){ this.redrawPlayingMode(); } } public void showExternalBeat(TGBeat beat) { if(!isDisposed()){ getPiano().setExternalBeat(beat); } } public void hideExternalBeat() { if(!isDisposed()){ getPiano().setExternalBeat(null); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGEditorManager.java0000644000175000017500000000452311273045225030234 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.song.models.TGBeat; public class TGEditorManager { private List redrawListeners; private List updateListeners; private List beatViewerListeners; public TGEditorManager(){ this.redrawListeners = new ArrayList(); this.updateListeners = new ArrayList(); this.beatViewerListeners = new ArrayList(); } public void doRedraw( int type ){ for(int i = 0; i < this.redrawListeners.size(); i ++){ TGRedrawListener listener = (TGRedrawListener) this.redrawListeners.get( i ); listener.doRedraw( type ); } } public void doUpdate( int type ){ for(int i = 0; i < this.updateListeners.size(); i ++){ TGUpdateListener listener = (TGUpdateListener) this.updateListeners.get( i ); listener.doUpdate( type ); } } public void showExternalBeat( TGBeat beat ){ for(int i = 0; i < this.beatViewerListeners.size(); i ++){ TGExternalBeatViewerListener listener = (TGExternalBeatViewerListener) this.beatViewerListeners.get( i ); listener.showExternalBeat(beat); } } public void hideExternalBeat(){ for(int i = 0; i < this.beatViewerListeners.size(); i ++){ TGExternalBeatViewerListener listener = (TGExternalBeatViewerListener) this.beatViewerListeners.get( i ); listener.hideExternalBeat(); } } public void addRedrawListener( TGRedrawListener listener){ if(!this.redrawListeners.contains( listener )){ this.redrawListeners.add( listener ); } } public void removeRedrawListener( TGRedrawListener listener){ if(this.redrawListeners.contains( listener )){ this.redrawListeners.remove( listener ); } } public void addUpdateListener( TGUpdateListener listener){ if(!this.updateListeners.contains( listener )){ this.updateListeners.add( listener ); } } public void removeUpdateListener( TGUpdateListener listener){ if(this.updateListeners.contains( listener )){ this.updateListeners.remove( listener ); } } public void addBeatViewerListener( TGExternalBeatViewerListener listener){ if(!this.beatViewerListeners.contains( listener )){ this.beatViewerListeners.add( listener ); } } public void removeBeatViewerListener( TGExternalBeatViewerListener listener){ if(this.beatViewerListeners.contains( listener )){ this.beatViewerListeners.remove( listener ); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGExternalBeatViewerListener.java0000644000175000017500000000033711273045225032760 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import org.herac.tuxguitar.song.models.TGBeat; public interface TGExternalBeatViewerListener { public void showExternalBeat( TGBeat beat ); public void hideExternalBeat(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainter.java0000644000175000017500000001052211273045225027111 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Path; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; public class TGPainter { public static final int PATH_DRAW = 0x01; public static final int PATH_FILL = 0x02; private boolean pathEmpty; private int style; private GC gc; private Path path; public TGPainter(){ super(); } public TGPainter(GC gc){ this.init(gc); } public TGPainter(Image image){ this.init(image); } public void init(Image image){ this.init(new GC(image)); } public void init(GC gc){ if(this.gc != null && !this.gc.isDisposed()){ this.gc.dispose(); } this.gc = gc; } public void initPath(int style){ this.style = style; this.path = new Path(this.gc.getDevice()); this.pathEmpty = true; this.setAntialias(true); } public void initPath(){ this.initPath( PATH_DRAW ); } public void closePath(){ if(! this.pathEmpty ){ if( (this.style & PATH_DRAW) != 0){ this.gc.drawPath(this.path); } if( (this.style & PATH_FILL) != 0){ this.gc.fillPath(this.path); } } this.style = 0; this.path.dispose(); this.pathEmpty = true; this.setAntialias(false); } public GC getGC(){ return this.gc; } public void dispose(){ this.gc.dispose(); } public void copyArea(Image image, int x, int y) { this.gc.copyArea(image, x, y); } public Point getStringExtent(String string) { this.setAdvanced(false); return this.gc.stringExtent(string); } public void drawString(String string, int x, int y) { this.setAdvanced(false); this.gc.drawString(string, x, y); } public void drawString(String string, int x, int y, boolean isTransparent) { this.setAdvanced(false); this.gc.drawString(string, x, y, isTransparent); } public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) { this.setAdvanced(false); this.gc.drawImage(image, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight); } public void drawImage(Image image, int x, int y) { this.setAdvanced(false); this.gc.drawImage(image, x, y); } public void drawPolygon(int[] arg0) { this.gc.drawPolygon(arg0); } public void fillPolygon(int[] arg0) { this.gc.fillPolygon(arg0); } public void cubicTo(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) { this.path.cubicTo(arg0, arg1, arg2, arg3, arg4, arg5); this.pathEmpty = false; } public void lineTo(float arg0, float arg1) { this.path.lineTo(arg0, arg1); this.pathEmpty = false; } public void moveTo(float arg0, float arg1) { this.path.moveTo(arg0, arg1); this.pathEmpty = false; } public void addString(String arg0, float arg1, float arg2, Font arg3) { this.path.addString(arg0, arg1, arg2, arg3); this.pathEmpty = false; } public void addArc(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) { this.path.addArc(arg0, arg1, arg2, arg3, arg4, arg5); this.pathEmpty = false; } public void addOval(float arg0, float arg1, float arg2, float arg3) { this.path.addArc(arg0, arg1, arg2, arg3, 0, 360); this.pathEmpty = false; } public void addRectangle(float x,float y,float width,float height) { this.path.addRectangle(x, y, width, height); this.pathEmpty = false; } public void addRectangle(Rectangle rectangle) { this.path.addRectangle(rectangle.x,rectangle.y,rectangle.width,rectangle.height); this.pathEmpty = false; } public void setBackground(Color arg0) { this.gc.setBackground(arg0); } public void setFont(Font arg0) { this.gc.setFont(arg0); } public void setForeground(Color arg0) { this.gc.setForeground(arg0); } public void setLineStyle(int arg0) { this.gc.setLineStyle(arg0); } public void setLineWidth(int arg0) { this.gc.setLineWidth(arg0); } public void setAlpha(int alpha) { this.gc.setAlpha(alpha); } public void setAntialias(boolean enabled){ if( !TGPainterUtils.FORCE_OS_DEFAULTS ){ this.gc.setAntialias(enabled ? SWT.ON : SWT.OFF ); } } public void setAdvanced(boolean advanced){ if( !TGPainterUtils.FORCE_OS_DEFAULTS ){ this.gc.setAdvanced(advanced); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainterUtils.java0000644000175000017500000000073511273045225030137 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; public class TGPainterUtils { /** On swt-carbon (and maybe another platform) advanced mode must be allways true **/ public static final boolean FORCE_OS_DEFAULTS = getValue(TGConfigKeys.FORCE_OS_DEFAULTS); private static boolean getValue(String key){ return TuxGuitar.instance().getConfig().getBooleanConfigValue(key); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGRedrawListener.java0000644000175000017500000000037011273045225030441 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; public interface TGRedrawListener { public static final int NORMAL = 1; public static final int PLAYING_THREAD = 2; public static final int PLAYING_NEW_BEAT = 3; public void doRedraw( int type ); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGUpdateListener.java0000644000175000017500000000043311273303204030431 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors; public interface TGUpdateListener { public static final int SELECTION = 1; public static final int SONG_UPDATED = 2; public static final int SONG_LOADED = 3; public static final int SONG_SAVED = 4; public void doUpdate( int type ); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TablatureEditor.java0000644000175000017500000000464611273045225030360 0ustar julianjulian/* * Created on 30-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.clipboard.ClipBoard; import org.herac.tuxguitar.gui.editors.tab.Tablature; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TablatureEditor implements TGRedrawListener, TGUpdateListener{ private Tablature tablature; private ClipBoard clipBoard; public TablatureEditor() { this.clipBoard = new ClipBoard(); } public void showTablature(Composite parent) { this.tablature = new Tablature(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.DOUBLE_BUFFERED); this.tablature.initGUI(); this.tablature.setSongManager(TuxGuitar.instance().getSongManager()); this.tablature.reloadViewLayout(); this.tablature.initDefaults(); this.tablature.updateTablature(); this.tablature.initCaret(); this.tablature.setFocus(); this.initListener(); this.initKeyActions(); this.initMenu(); } private void initListener(){ TuxGuitar.instance().getEditorManager().addRedrawListener( this ); TuxGuitar.instance().getEditorManager().addUpdateListener( this ); } private void initKeyActions(){ TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.tablature); } private void initMenu(){ Menu menu = TuxGuitar.instance().getItemManager().getPopupMenu(); menu.addMenuListener(getTablature().getEditorKit()); this.tablature.setMenu(menu); } public void reloadConfig(){ getTablature().reloadStyles(); } public Tablature getTablature() { return this.tablature; } public ClipBoard getClipBoard(){ return this.clipBoard; } public void doRedraw(int type) { if( type == TGRedrawListener.NORMAL ){ getTablature().redraw(); }else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){ getTablature().redrawPlayingMode(); } } public void doUpdate(int type) { if( type == TGUpdateListener.SONG_UPDATED ){ getTablature().updateTablature(); }else if( type == TGUpdateListener.SONG_LOADED ){ getTablature().updateTablature(); getTablature().resetScroll(); getTablature().initCaret(); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/helper/FileHistory.java0000644000175000017500000001236311273045224027327 0ustar julianjulian/* * Created on 08-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.helper; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.util.TGFileUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class FileHistory { private static final int URL_LIMIT = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.MAX_HISTORY_FILES); private boolean changed; private boolean newFile; private boolean localFile; private boolean unsavedFile; private List urls; private String chooserPath; public FileHistory(){ this.urls = new ArrayList(); this.loadHistory(); this.reset(null); } public void reset(URL url) { this.unsavedFile = false; this.newFile = (url == null); this.localFile = (url != null && isLocalFile(url)); this.addURL(url); } public boolean isNewFile(){ return this.newFile; } public boolean isLocalFile(){ return this.localFile; } public boolean isUnsavedFile() { return this.unsavedFile; } public void setUnsavedFile() { this.unsavedFile = true; } public void setChooserPath(String chooserPath){ this.chooserPath = chooserPath; } public void setChooserPath(URL url){ String path = getFilePath(url); if( path != null ){ this.setChooserPath( path ); } } public String getCurrentFileName(String defaultName) { if(!this.isNewFile()){ URL url = getCurrentURL(); if(url != null){ return decode(new File(url.getFile()).getName()); } } return defaultName; } public String getCurrentFilePath() { if(!this.isNewFile()){ URL url = getCurrentURL(); if(url != null){ String file = getFilePath(url); if(file != null){ return decode(file); } } } return this.chooserPath; } public String getSavePath() { String current = getCurrentFilePath(); return (current != null ? current : this.chooserPath); } public String getOpenPath() { return this.chooserPath; } protected String getFilePath(URL url){ if(isLocalFile(url)){ return new File(url.getFile()).getParent(); } return null; } protected String decode(String url){ try { return URLDecoder.decode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return url; } protected boolean isLocalFile(URL url){ try { if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){ return true; } }catch(Throwable throwable){ throwable.printStackTrace(); } return false; } protected URL getCurrentURL(){ if(!this.urls.isEmpty()){ return (URL)this.urls.get(0); } return null; } public void addURL(URL url){ if(url != null){ removeURL(url); this.urls.add(0,url); checkLimit(); setChanged(true); } saveHistory(); } public List getURLs(){ return this.urls; } private void checkLimit(){ while(this.urls.size() > URL_LIMIT){ this.urls.remove(this.urls.size() - 1); } } private void removeURL(URL url){ for(int i = 0; i < this.urls.size(); i++){ URL old = (URL)this.urls.get(i); if(old.toString().equals(url.toString())){ this.urls.remove(i); break; } } } public boolean isChanged() { return this.changed; } public void setChanged(boolean changed) { this.changed = changed; } public void loadHistory() { try { this.urls.clear(); if(new File(getHistoryFileName()).exists()){ InputStream inputStream = new FileInputStream(getHistoryFileName()); Properties properties = new Properties(); properties.load(inputStream); this.chooserPath = (String)properties.get("history.path"); int count = Integer.parseInt((String)properties.get("history.count")); for(int i = 0; i < count;i ++){ String url = (String)properties.get("history." + i); if(URL_LIMIT > i && url != null && url.length() > 0){ this.urls.add(new URL(url)); } } setChanged(true); }else{ this.saveHistory(); } } catch (Exception e) { e.printStackTrace(); } } public void saveHistory(){ try { Properties properties = new Properties(); int count = this.urls.size(); for(int i = 0;i < count;i ++){ properties.put("history." + i,this.urls.get(i).toString()); } properties.put("history.count",Integer.toString(count)); if(this.chooserPath != null){ properties.put("history.path",this.chooserPath); } properties.store(new FileOutputStream(getHistoryFileName()),"History Files"); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } private String getHistoryFileName(){ return TGFileUtils.PATH_USER_CONFIG + File.separator + "history.properties"; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/helper/SyncThread.java0000644000175000017500000000157411273045224027134 0ustar julianjulian/* * Created on 09-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.helper; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class SyncThread extends Thread { private TGSynchronizer.TGRunnable runnable; public SyncThread(TGSynchronizer.TGRunnable runnable) { this.runnable = runnable; } public SyncThread(final Runnable runnable) { this(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { runnable.run(); } }); } public void run() { try { TGSynchronizer.instance().addRunnable(this.runnable); } catch (Throwable e) { e.printStackTrace(); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemBase.java0000644000175000017500000000030511273045224026412 0ustar julianjulianpackage org.herac.tuxguitar.gui.items; public interface ItemBase { /** * Actualiza los estados */ public void update(); /** * Actualiza los textos */ public void loadProperties(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemManager.java0000644000175000017500000003356011273045224027123 0ustar julianjulian/* * Created on 18-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.items.menu.BeatMenuItem; import org.herac.tuxguitar.gui.items.menu.CompositionMenuItem; import org.herac.tuxguitar.gui.items.menu.EditMenuItem; import org.herac.tuxguitar.gui.items.menu.FileMenuItem; import org.herac.tuxguitar.gui.items.menu.HelpMenuItem; import org.herac.tuxguitar.gui.items.menu.MarkerMenuItem; import org.herac.tuxguitar.gui.items.menu.MeasureMenuItem; import org.herac.tuxguitar.gui.items.menu.ToolMenuItem; import org.herac.tuxguitar.gui.items.menu.TrackMenuItem; import org.herac.tuxguitar.gui.items.menu.TransportMenuItem; import org.herac.tuxguitar.gui.items.menu.ViewMenuItem; import org.herac.tuxguitar.gui.items.tool.BeatToolItems; import org.herac.tuxguitar.gui.items.tool.CompositionToolItems; import org.herac.tuxguitar.gui.items.tool.DurationToolItems; import org.herac.tuxguitar.gui.items.tool.DynamicToolItems; import org.herac.tuxguitar.gui.items.tool.EditToolItems; import org.herac.tuxguitar.gui.items.tool.FileToolItems; import org.herac.tuxguitar.gui.items.tool.LayoutToolItems; import org.herac.tuxguitar.gui.items.tool.MarkerToolItems; import org.herac.tuxguitar.gui.items.tool.NoteEffectToolItems; import org.herac.tuxguitar.gui.items.tool.PropertiesToolItems; import org.herac.tuxguitar.gui.items.tool.TrackToolItems; import org.herac.tuxguitar.gui.items.tool.TransportToolItems; import org.herac.tuxguitar.gui.items.tool.ViewToolItems; import org.herac.tuxguitar.gui.items.xml.ToolBarsReader; import org.herac.tuxguitar.gui.items.xml.ToolBarsWriter; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.util.TGFileUtils; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ItemManager implements TGUpdateListener,IconLoader,LanguageLoader{ private Menu menu; private Menu popupMenu; private CoolBar coolBar; private List loadedToolItems; private List loadedMenuItems; private List loadedPopupMenuItems; private ToolItems[] toolItems; private boolean layout_locked; private boolean shouldReloadToolBars; private boolean coolbarVisible; private boolean updateCoolBarWrapIndicesEnabled; public ItemManager(){ this.loadedToolItems = new ArrayList(); this.loadedMenuItems = new ArrayList(); this.loadedPopupMenuItems = new ArrayList(); this.layout_locked = false; this.setDefaultToolBars(); this.loadItems(); TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public void loadItems(){ this.createMenu(); this.createPopupMenu(); this.createCoolbar(); } public void createCoolbar() { boolean initialized = (this.coolBar != null && !this.coolBar.isDisposed()); this.layout_locked = true; this.updateCoolBarWrapIndicesEnabled = true; if( !initialized ){ FormData coolData = new FormData(); coolData.left = new FormAttachment(0); coolData.right = new FormAttachment(100); coolData.top = new FormAttachment(0,0); this.coolBar = new CoolBar(TuxGuitar.instance().getShell(),SWT.HORIZONTAL | SWT.FLAT); this.coolBar.setLayoutData(coolData); this.coolBar.addListener(SWT.Resize, new Listener() { public void handleEvent(Event event) { layoutCoolBar(); } }); this.coolBar.addListener(SWT.DragDetect, new Listener() { public void handleEvent(Event event) { disableUpdateCoolBarWrapIndices(); } }); TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.coolBar); } this.makeCoolItems(); this.layout_locked = false; if( initialized ){ this.layoutCoolBar(); } } public void toogleToolbarVisibility(){ if(this.coolBar != null && !this.coolBar.isDisposed()){ this.layout_locked = true; this.coolBar.setVisible( !this.coolbarVisible ); if( this.coolbarVisible ){ this.clearCoolBar(); }else{ this.makeCoolItems(); } this.layout_locked = false; this.layoutCoolBar(); } } private void clearCoolBar(){ if(this.coolBar != null && !this.coolBar.isDisposed()){ this.loadedToolItems.clear(); CoolItem[] items = this.coolBar.getItems(); for(int i = 0;i < items.length; i ++){ items[i].dispose(); } Control[] controls = this.coolBar.getChildren(); for(int i = 0;i < controls.length; i ++){ controls[i].dispose(); } } this.coolbarVisible = false; } protected void updateCoolBarWrapIndices(){ int coolBarWidth = this.coolBar.getClientArea().width; int coolItemsWidth = 0; List coolItemIndices = new ArrayList(); CoolItem[] items = this.coolBar.getItems(); for(int i = 0;i < items.length; i ++){ Point controlSise = items[i].getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT); Point itemSize = items[i].computeSize(controlSise.x, controlSise.y); int nextCoolItemsWidth = ( coolItemsWidth + itemSize.x ); if( nextCoolItemsWidth > coolBarWidth ){ coolItemIndices.add( new Integer( i ) ); nextCoolItemsWidth = itemSize.x; } coolItemsWidth = nextCoolItemsWidth; } int[] coolItemIndicesArray = new int[ coolItemIndices.size() ]; for(int i = 0;i < coolItemIndicesArray.length; i ++){ coolItemIndicesArray[i] = ((Integer)coolItemIndices.get(i)).intValue(); } this.coolBar.setWrapIndices( coolItemIndicesArray ); } protected void layoutCoolBar(){ if(!this.layout_locked){ this.layout_locked = true; if( this.updateCoolBarWrapIndicesEnabled ){ this.updateCoolBarWrapIndices(); } this.layoutShellLater(); this.layout_locked = false; } } protected void layoutShell(){ if(!this.layout_locked){ this.layout_locked = true; TuxGuitar.instance().getShell().layout(true,true); this.layout_locked = false; } } protected void layoutShellLater(){ try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { layoutShell(); } }); } catch (Throwable e) { e.printStackTrace(); } } public void makeCoolItems(){ this.clearCoolBar(); this.readToolBars(); for(int i = 0; i < this.toolItems.length; i ++){ if(this.toolItems[i].isEnabled()){ this.makeToolBar(this.toolItems[i]); } } this.coolbarVisible = true; } private void makeToolBar(ToolItems item){ ToolBar toolBar = new ToolBar(this.coolBar,SWT.HORIZONTAL | SWT.FLAT ); item.showItems(toolBar); makeCoolItem(toolBar); this.loadedToolItems.add(item); } private void makeCoolItem(ToolBar toolBar){ Point size = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT); CoolItem coolItem = new CoolItem(this.coolBar, SWT.NONE); coolItem.setMinimumSize(size); coolItem.setPreferredSize(coolItem.computeSize(size.x, size.y)); coolItem.setControl(toolBar); } public void createMenu() { Shell shell = TuxGuitar.instance().getShell(); if(this.menu == null || this.menu.isDisposed()){ this.menu = new Menu(shell, SWT.BAR); } MenuItem[] items = this.menu.getItems(); for(int i = 0; i < items.length;i ++){ items[i].dispose(); } this.loadedMenuItems.clear(); this.loadedMenuItems.add(new FileMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new EditMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new ViewMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new CompositionMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new TrackMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new MeasureMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new BeatMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new MarkerMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new TransportMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new ToolMenuItem(shell,this.menu, SWT.CASCADE)); this.loadedMenuItems.add(new HelpMenuItem(shell,this.menu, SWT.CASCADE)); this.showMenuItems(this.loadedMenuItems); shell.setMenuBar(this.menu); } public void createPopupMenu() { Shell shell = TuxGuitar.instance().getShell(); if(this.popupMenu == null || this.popupMenu.isDisposed()){ this.popupMenu = new Menu(shell, SWT.POP_UP); } MenuItem[] items = this.popupMenu.getItems(); for(int i = 0; i < items.length;i ++){ items[i].dispose(); } this.loadedPopupMenuItems.clear(); this.loadedPopupMenuItems.add(new EditMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.loadedPopupMenuItems.add(new CompositionMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.loadedPopupMenuItems.add(new TrackMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.loadedPopupMenuItems.add(new MeasureMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.loadedPopupMenuItems.add(new BeatMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.loadedPopupMenuItems.add(new MarkerMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.loadedPopupMenuItems.add(new TransportMenuItem(shell,this.popupMenu, SWT.CASCADE)); this.showMenuItems(this.loadedPopupMenuItems); } private void showMenuItems(List items){ Iterator it = items.iterator(); while(it.hasNext()){ MenuItems item = (MenuItems)it.next(); item.showItems(); } } public void updateItems(){ if(!isDisposed()){ updateItems(this.loadedToolItems); updateItems(this.loadedMenuItems); updateItems(this.loadedPopupMenuItems); } } public void updateItems(List items){ Iterator it = items.iterator(); while(it.hasNext()){ ItemBase item = (ItemBase)it.next(); item.update(); } } public void loadProperties(){ if(!isDisposed()){ loadProperties(this.loadedToolItems); loadProperties(this.loadedMenuItems); loadProperties(this.loadedPopupMenuItems); } } public void loadProperties(List items){ Iterator it = items.iterator(); while(it.hasNext()){ ItemBase item = (ItemBase)it.next(); item.loadProperties(); } } public void loadIcons(){ this.loadItems(); } public CoolBar getCoolbar(){ return this.coolBar; } public Menu getPopupMenu(){ return this.popupMenu; } public void readToolBars() { File file = new File(getCoolItemsFileName()); if(!file.exists()){ writeToolBars(); } this.shouldReloadToolBars = false; ToolBarsReader.loadToolBars(this,file); } public void writeToolBars(){ File file = new File(getCoolItemsFileName()); ToolBarsWriter.saveToolBars(getToolBars(), file); } public void setToolBarStatus(String name, boolean enabled, int index){ if(index >= 0 && index < this.toolItems.length){ setToolBarPosition(name, index); setToolBarEnabled(index, enabled); } } public void setToolBarEnabled(int index, boolean enabled){ this.shouldReloadToolBars = (this.shouldReloadToolBars || (this.toolItems[ index ].isEnabled() != enabled )); this.toolItems[ index ].setEnabled(enabled); } public void setToolBarPosition(String name, int index){ if(index >= 0 && index < this.toolItems.length){ ToolItems element = this.toolItems[index]; if( ! element.getName().trim().toLowerCase().equals(name.trim().toLowerCase())){ int oldIndex = -1; for(int i = 0; i < this.toolItems.length; i ++){ if(this.toolItems[i].getName().trim().toLowerCase().equals(name.trim().toLowerCase())){ oldIndex = i; break; } } if(oldIndex == -1){ return; } this.toolItems[index] = this.toolItems[oldIndex]; this.toolItems[oldIndex] = element; this.shouldReloadToolBars = true; } } } public ToolItems[] getToolBars(){ return this.toolItems; } public boolean shouldReloadToolBars(){ return this.shouldReloadToolBars; } public void setDefaultToolBars(){ this.toolItems = new ToolItems[]{ initToolItem(new FileToolItems(), true), initToolItem(new EditToolItems(), true), initToolItem(new PropertiesToolItems(), true), initToolItem(new TrackToolItems(), true), initToolItem(new DurationToolItems(), true), initToolItem(new BeatToolItems(), true), initToolItem(new CompositionToolItems(), true), initToolItem(new TransportToolItems(), true), initToolItem(new MarkerToolItems(), true), initToolItem(new LayoutToolItems(), true), initToolItem(new ViewToolItems(), true), initToolItem(new NoteEffectToolItems(), true), initToolItem(new DynamicToolItems(), true), }; this.shouldReloadToolBars = true; } private ToolItems initToolItem(ToolItems item, boolean enabled){ item.setEnabled(enabled); return item; } private boolean isDisposed(){ return (this.coolBar.isDisposed() || this.menu.isDisposed() || this.popupMenu.isDisposed()); } private String getCoolItemsFileName(){ return TGFileUtils.PATH_USER_CONFIG + File.separator + "toolbars.xml"; } public void doUpdate(int type) { if( type == TGUpdateListener.SELECTION ){ this.updateItems(); } } public void disableUpdateCoolBarWrapIndices() { if( this.updateCoolBarWrapIndicesEnabled ){ this.coolBar.setWrapIndices( null ); } this.updateCoolBarWrapIndicesEnabled = false; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/MenuItems.java0000644000175000017500000000121711273045224026632 0ustar julianjulianpackage org.herac.tuxguitar.gui.items; import org.eclipse.swt.widgets.MenuItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.keybindings.KeyBinding; public abstract class MenuItems implements ItemBase { public abstract void showItems(); protected void setMenuItemTextAndAccelerator(MenuItem menuItem, String key,String action) { String text = TuxGuitar.getProperty(key); if (action != null) { KeyBinding keyBinding = TuxGuitar.instance().getkeyBindingManager().getKeyBindingForAction(action); if (keyBinding != null) { text += "\t" + keyBinding.toString(); } } menuItem.setText(text); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/ToolItems.java0000644000175000017500000000127211273045224026644 0ustar julianjulianpackage org.herac.tuxguitar.gui.items; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TablatureEditor; public abstract class ToolItems implements ItemBase{ private String name; private boolean enabled; public ToolItems(String name){ this.name = name; this.enabled = true; } public String getName(){ return this.name; } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } protected TablatureEditor getEditor(){ return TuxGuitar.instance().getTablatureEditor(); } public abstract void showItems(ToolBar toolBar); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerEditor.java0000644000175000017500000001776011273045224027466 0ustar julianjulianpackage org.herac.tuxguitar.gui.marker; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeMarker; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGMarker; public class MarkerEditor { public static final int STATUS_NEW = 1; public static final int STATUS_EDIT = 2; private static final int MINIMUM_CONTROL_WIDTH = 180; private static final int MINIMUM_BUTTON_WIDTH = 80; private static final int MINIMUM_BUTTON_HEIGHT = 25; private int status; protected TGMarker marker; protected Shell dialog; protected Spinner measureSpinner; protected Text titleText; protected Button colorButton; protected Color colorButtonValue; protected boolean accepted; public MarkerEditor(TGMarker marker) { this(marker,STATUS_NEW); } public MarkerEditor(TGMarker marker,int status) { this.marker = marker.clone(TuxGuitar.instance().getSongManager().getFactory()); this.status = status; } public boolean open(Shell shell) { this.accepted = false; this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout()); this.dialog.setText(TuxGuitar.getProperty("marker")); // ---------------------------------------------------------------------- Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("marker")); // Measure Number final int measureCount = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders(); Label measureLabel = new Label(group, SWT.NULL); measureLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true,true)); measureLabel.setText(TuxGuitar.getProperty("measure")); this.measureSpinner = new Spinner(group, SWT.BORDER); this.measureSpinner.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); this.measureSpinner.setMinimum(1); this.measureSpinner.setMaximum(measureCount); this.measureSpinner.setSelection(this.marker.getMeasure()); this.measureSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int selection = MarkerEditor.this.measureSpinner.getSelection(); if (selection < 1) { MarkerEditor.this.measureSpinner.setSelection(1); } else if (selection > measureCount) { MarkerEditor.this.measureSpinner.setSelection(measureCount); } } }); // Title Label titleLabel = new Label(group, SWT.NULL); titleLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); titleLabel.setText(TuxGuitar.getProperty("title")); this.titleText = new Text(group, SWT.BORDER); this.titleText.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); this.titleText.setText(this.marker.getTitle()); // Color Label colorLabel = new Label(group, SWT.NULL); colorLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); colorLabel.setText(TuxGuitar.getProperty("color")); this.colorButton = new Button(group, SWT.PUSH); this.colorButton.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); this.colorButton.setText(TuxGuitar.getProperty("choose")); this.colorButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ColorDialog dlg = new ColorDialog(MarkerEditor.this.dialog); dlg.setRGB(MarkerEditor.this.dialog.getDisplay().getSystemColor(SWT.COLOR_BLACK).getRGB()); dlg.setText(TuxGuitar.getProperty("choose-color")); RGB rgb = dlg.open(); if (rgb != null) { MarkerEditor.this.marker.getColor().setR(rgb.red); MarkerEditor.this.marker.getColor().setG(rgb.green); MarkerEditor.this.marker.getColor().setB(rgb.blue); MarkerEditor.this.setButtonColor(); } } }); this.colorButton.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { MarkerEditor.this.disposeButtonColor(); } }); this.setButtonColor(); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = MINIMUM_BUTTON_WIDTH; data.minimumHeight = MINIMUM_BUTTON_HEIGHT; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { updateMarker(); MarkerEditor.this.accepted = true; MarkerEditor.this.dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { MarkerEditor.this.dialog.dispose(); } }); this.dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.accepted; } private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){ GridData data = new GridData(); data.minimumWidth = minimumWidth; data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = SWT.DEFAULT; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; return data; } protected void setButtonColor(){ Color color = new Color(this.dialog.getDisplay(), this.marker.getColor().getR(), this.marker.getColor().getG(), this.marker.getColor().getB()); this.colorButton.setForeground( color ); this.disposeButtonColor(); this.colorButtonValue = color; } protected void disposeButtonColor(){ if(this.colorButtonValue != null && !this.colorButtonValue.isDisposed()){ this.colorButtonValue.dispose(); this.colorButtonValue = null; } } protected void updateMarker() { int oldMeasure = this.marker.getMeasure(); this.marker.setMeasure(this.measureSpinner.getSelection()); this.marker.setTitle(this.titleText.getText()); this.marker = this.marker.clone(TuxGuitar.instance().getSongManager().getFactory()); TGSongManager manager = TuxGuitar.instance().getSongManager(); //comienza el undoable UndoableJoined joinedUndoable = new UndoableJoined(); if(this.status == STATUS_EDIT && oldMeasure != this.marker.getMeasure()){ UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(manager.getMarker(oldMeasure)); TuxGuitar.instance().getSongManager().removeMarker(oldMeasure); joinedUndoable.addUndoableEdit(undoable.endUndo(null)); } UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(manager.getMarker(this.marker.getMeasure())); TuxGuitar.instance().getSongManager().updateMarker(this.marker); joinedUndoable.addUndoableEdit(undoable.endUndo(this.marker)); // termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(joinedUndoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerList.java0000644000175000017500000002333311273045224027144 0ustar julianjulianpackage org.herac.tuxguitar.gui.marker; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeMarker; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGMarker; public class MarkerList implements TGUpdateListener, IconLoader,LanguageLoader{ private static MarkerList instance; protected Shell dialog; private Table table; private List markers; private Composite compositeTable; private TableColumn measureColumn; private TableColumn titleColumn; private Composite compositeButtons; private Button buttonAdd; private Button buttonEdit; private Button buttonDelete; private Button buttonGo; private Button buttonClose; public static MarkerList instance(){ if(instance == null){ instance = new MarkerList(); } return instance; } private MarkerList() { super(); } public void show() { this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM); this.dialog.setLayout(new GridLayout(2,false)); this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); // ---------------------------------------------------------------------- this.compositeTable = new Composite(this.dialog, SWT.NONE); this.compositeTable.setLayout(new GridLayout()); this.compositeTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.table = new Table(this.compositeTable, SWT.BORDER | SWT.FULL_SELECTION); this.table.setLayoutData(new GridData(250,200)); this.table.setHeaderVisible(true); this.table.addListener (SWT.MouseDoubleClick, new Listener() { public void handleEvent (Event event) { new MarkerNavigator().goToSelectedMarker(getSelectedMarker()); TuxGuitar.instance().updateCache(true); } }); this.measureColumn = new TableColumn(this.table, SWT.LEFT); this.measureColumn.setWidth(70); this.titleColumn = new TableColumn(this.table, SWT.LEFT); this.titleColumn.setWidth(180); this.loadTableItems(false); // ------------------BUTTONS-------------------------- this.compositeButtons = new Composite(this.dialog, SWT.NONE); this.compositeButtons.setLayout(new GridLayout(1,false)); this.compositeButtons.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.buttonAdd = new Button(this.compositeButtons, SWT.PUSH); this.buttonAdd.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false)); this.buttonAdd.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){ ActionLock.lock(); Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGMarker marker = TuxGuitar.instance().getSongManager().getFactory().newMarker(); marker.setMeasure(caret.getMeasure().getNumber()); if(new MarkerEditor(marker,MarkerEditor.STATUS_NEW).open(MarkerList.this.dialog)){ TuxGuitar.instance().updateCache(true); loadTableItems(true); } ActionLock.unlock(); } } }); this.buttonEdit = new Button(this.compositeButtons, SWT.PUSH); this.buttonEdit.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false)); this.buttonEdit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){ ActionLock.lock(); TGMarker marker = getSelectedMarker(); if(marker != null){ if(new MarkerEditor(marker,MarkerEditor.STATUS_EDIT).open(MarkerList.this.dialog)){ TuxGuitar.instance().updateCache(true); loadTableItems(true); } } ActionLock.unlock(); } } }); this.buttonDelete = new Button(this.compositeButtons, SWT.PUSH); this.buttonDelete.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false)); this.buttonDelete.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){ ActionLock.lock(); TGMarker marker = getSelectedMarker(); // comienza el undoable UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(marker); TuxGuitar.instance().getSongManager().removeMarker(marker); // termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(null)); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().updateCache(true); loadTableItems(true); ActionLock.unlock(); } } }); this.buttonGo = new Button(this.compositeButtons, SWT.PUSH); this.buttonGo.setLayoutData(makeGridData(SWT.FILL, SWT.BOTTOM,true)); this.buttonGo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){ ActionLock.lock(); new MarkerNavigator().goToSelectedMarker(getSelectedMarker()); TuxGuitar.instance().updateCache(true); ActionLock.unlock(); } } }); this.buttonClose = new Button(this.compositeButtons, SWT.PUSH); this.buttonClose.setLayoutData(makeGridData(SWT.FILL, SWT.BOTTOM,false)); this.buttonClose.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { MarkerList.this.dialog.dispose(); } }); this.loadIcons(); this.loadProperties(false); this.addListeners(); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { removeListeners(); } }); this.dialog.setDefaultButton( this.buttonGo ); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } public void addListeners(){ TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public void removeListeners(){ TuxGuitar.instance().getIconManager().removeLoader(this); TuxGuitar.instance().getLanguageManager().removeLoader(this); TuxGuitar.instance().getEditorManager().removeUpdateListener(this); } public void dispose(){ if(!isDisposed()){ this.dialog.dispose(); } } public void update(){ this.update(false); } public void update(final boolean keepSelection){ if(!isDisposed()){ new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ loadTableItems(keepSelection); } } }).start(); } } private GridData makeGridData(int horizontalAlignment,int verticalAlignment,boolean grabExcessVerticalSpace){ GridData data = new GridData(); data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = verticalAlignment; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = grabExcessVerticalSpace; data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void loadTableItems(boolean keepSelection){ int itemSelected = (keepSelection ? this.table.getSelectionIndex() : -1 ); this.table.removeAll(); this.markers = TuxGuitar.instance().getSongManager().getMarkers(); Iterator it = this.markers.iterator(); while (it.hasNext()) { TGMarker marker = (TGMarker) it.next(); TableItem item = new TableItem(this.table, SWT.NONE); item.setText(new String[] { Integer.toString(marker.getMeasure()),marker.getTitle() }); } if(itemSelected >= 0 && itemSelected < this.markers.size()){ this.table.select(itemSelected); } } protected TGMarker getSelectedMarker(){ int itemSelected = this.table.getSelectionIndex(); if(itemSelected >= 0 && itemSelected < this.markers.size()){ return (TGMarker)this.markers.get(itemSelected); } return null; } public boolean isDisposed(){ return (this.dialog == null || this.dialog.isDisposed()); } public void loadIcons() { if(!isDisposed()){ this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); } } public void loadProperties() { this.loadProperties(true); } public void loadProperties(boolean layout) { if(!isDisposed()){ this.dialog.setText(TuxGuitar.getProperty("marker.list")); this.measureColumn.setText(TuxGuitar.getProperty("measure")); this.titleColumn.setText(TuxGuitar.getProperty("title")); this.buttonAdd.setText(TuxGuitar.getProperty("add")); this.buttonEdit.setText(TuxGuitar.getProperty("edit")); this.buttonDelete.setText(TuxGuitar.getProperty("remove")); this.buttonGo.setText(TuxGuitar.getProperty("go")); this.buttonClose.setText(TuxGuitar.getProperty("close")); if(layout){ this.table.layout(); this.compositeTable.layout(); this.compositeButtons.layout(); this.dialog.pack(true); } } } public void doUpdate(int type) { if( type == TGUpdateListener.SONG_LOADED ){ this.update(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerNavigator.java0000644000175000017500000000210411273045224030154 0ustar julianjulianpackage org.herac.tuxguitar.gui.marker; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGMarker; public class MarkerNavigator { public MarkerNavigator(){ super(); } public void goToSelectedMarker(TGMarker marker){ if(marker != null){ Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGSongManager manager = TuxGuitar.instance().getSongManager(); TGTrackImpl track = caret.getTrack(); if(track != null){ TGMeasureImpl measure = (TGMeasureImpl)manager.getTrackManager().getMeasure(track,marker.getMeasure()); if(measure != null){ TGBeat beat = manager.getMeasureManager().getFirstBeat(measure.getBeats()); if(beat != null){ caret.moveTo(track, measure,beat,caret.getStringNumber()); } } } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixer.java0000644000175000017500000002053611273045225026254 0ustar julianjulian/* * Created on 20-mar-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.mixer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Scale; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class TGMixer implements TGUpdateListener,IconLoader,LanguageLoader{ public static final int MUTE = 0x01; public static final int SOLO = 0x02; public static final int VOLUME = 0x04; public static final int BALANCE = 0x08; public static final int CHORUS = 0x10; public static final int REVERB = 0x20; public static final int PHASER = 0x40; public static final int TREMOLO = 0x80; public static final int CHANNEL = 0x100; public static final int CHANGE_ALL = (MUTE | SOLO | VOLUME | BALANCE | CHORUS | REVERB | PHASER | TREMOLO | CHANNEL); protected Shell dialog; private List tracks; private Scale volumeScale; private Label volumeValueLabel; private Label volumeValueTitleLabel; private String volumeTip; private int volumeValue; public TGMixer() { this.tracks = new ArrayList(); } public void show() { this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM); this.loadData(); this.addListeners(); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { removeListeners(); TuxGuitar.instance().updateCache(true); } }); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER ); } public void addListeners(){ TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public void removeListeners(){ TuxGuitar.instance().getIconManager().removeLoader(this); TuxGuitar.instance().getLanguageManager().removeLoader(this); TuxGuitar.instance().getEditorManager().removeUpdateListener(this); } protected void loadData(){ this.tracks.clear(); Iterator it = TuxGuitar.instance().getSongManager().getSong().getTracks(); while (it.hasNext()) { TGTrack track = (TGTrack) it.next(); TGMixerTrack trackMixer = new TGMixerTrack(this,track); trackMixer.init(this.dialog); this.tracks.add(trackMixer); } Composite composite = new Composite(this.dialog, SWT.BORDER); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true)); this.volumeValue = -1; this.volumeScale = new Scale(composite, SWT.VERTICAL); this.volumeScale.setMaximum(10); this.volumeScale.setMinimum(0); this.volumeScale.setIncrement(1); this.volumeScale.setPageIncrement(1); this.volumeScale.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true)); Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR); separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false)); Composite volumeValueComposite = new Composite(composite, SWT.NONE); volumeValueComposite.setLayout(new GridLayout(2,false)); this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.NONE); this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER); this.volumeValueLabel.setLayoutData(getVolumeValueLabelData()); this.volumeScale.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { changeVolume(); } }); this.loadVolume(); this.loadIcons(); this.loadProperties(false); this.dialog.setLayout(getLayout(this.dialog.getChildren().length)); this.dialog.pack(); } private GridLayout getLayout(int columns){ GridLayout layout = new GridLayout(columns, false); layout.verticalSpacing = 1; layout.horizontalSpacing = 1; return layout; } protected void changeVolume(){ int volume = (short)(TGMixer.this.volumeScale.getMaximum() - TGMixer.this.volumeScale.getSelection()); if(volume != TuxGuitar.instance().getPlayer().getVolume()){ TuxGuitar.instance().getPlayer().setVolume(volume); this.volumeScale.setToolTipText(TGMixer.this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume()); this.volumeValueLabel.setText(Integer.toString(TGMixer.this.volumeScale.getMaximum() - TGMixer.this.volumeScale.getSelection())); this.volumeValue = volume; } } protected void loadVolume(){ int volume = TuxGuitar.instance().getPlayer().getVolume(); if(this.volumeValue != volume){ this.volumeScale.setSelection(this.volumeScale.getMaximum() - TuxGuitar.instance().getPlayer().getVolume()); this.volumeValueLabel.setText(Integer.toString(this.volumeScale.getMaximum() - this.volumeScale.getSelection())); this.volumeValue = volume; } } private GridData getVolumeValueLabelData(){ GridData data = new GridData(SWT.CENTER,SWT.NONE,true,false); data.minimumWidth = 40; return data; } protected void clear(){ Control[] controls = this.dialog.getChildren(); for(int i = 0;i < controls.length;i++){ controls[i].dispose(); } } public boolean isDisposed() { return (this.dialog == null || this.dialog.isDisposed()); } public synchronized void fireChanges(TGChannel channel,int type){ Iterator it = this.tracks.iterator(); while(it.hasNext()){ TGMixerTrack mixer = (TGMixerTrack)it.next(); if(mixer.getTrack().getChannel().getChannel() == channel.getChannel()){ channel.copy(mixer.getTrack().getChannel()); } mixer.fireChanges(type); } if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } } public synchronized void loadProperties(){ this.loadProperties(true); } public synchronized void loadProperties(boolean pack){ if(!isDisposed()){ Iterator it = this.tracks.iterator(); while(it.hasNext()){ TGMixerTrack mixer = (TGMixerTrack)it.next(); mixer.loadProperties(); } this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("mixer.volume") + ":"); this.volumeTip = TuxGuitar.getProperty("mixer.volume"); this.volumeScale.setToolTipText(this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume()); this.dialog.setText(TuxGuitar.getProperty("mixer")); if( pack ){ this.dialog.pack(); this.dialog.layout(true,true); this.dialog.redraw(); } } } public synchronized void loadIcons(){ if(!isDisposed()){ this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); } } public synchronized void updateItems(){ if(!isDisposed()){ Iterator it = this.tracks.iterator(); while(it.hasNext()){ TGMixerTrack mixer = (TGMixerTrack)it.next(); mixer.updateItems(); } } } public synchronized void updateValues(){ if(!isDisposed()){ this.loadVolume(); Iterator it = this.tracks.iterator(); while(it.hasNext()){ TGMixerTrack mixer = (TGMixerTrack)it.next(); mixer.fireChanges(CHANGE_ALL); } } } public synchronized void update(){ if(!isDisposed()){ new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ TGMixer.this.clear(); TGMixer.this.loadData(); TGMixer.this.dialog.layout(true,true); TGMixer.this.dialog.redraw(); } } }).start(); } } public synchronized void dispose() { if(!isDisposed()){ this.dialog.dispose(); } } public void doUpdate(int type) { if( type == TGUpdateListener.SELECTION ){ this.updateItems(); }else if( type == TGUpdateListener.SONG_LOADED ){ this.update(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrack.java0000644000175000017500000003310511273045225027235 0ustar julianjulianpackage org.herac.tuxguitar.gui.mixer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.ShellAdapter; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Scale; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackChannel; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackSoloMute; import org.herac.tuxguitar.song.models.TGTrack; public class TGMixerTrack { protected TGTrack track; protected TGMixer mixer; protected TGMixerTrackChannel mixerChannel; protected Button checkSolo; protected Button checkMute; private TGMixerScale scaleVolume; private TGMixerScale scaleBalance; private TGMixerScalePopup scaleChorus; private TGMixerScalePopup scaleReverb; private TGMixerScalePopup scalePhaser; private TGMixerScalePopup scaleTremolo; private Label volumeValueLabel; private Label volumeValueTitleLabel; public TGMixerTrack(TGMixer mixer,TGTrack track){ this.mixer = mixer; this.track = track; } public void init(final Composite parent) { final Composite composite = new Composite(parent, SWT.BORDER); composite.setLayout(new GridLayout(1, true)); composite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true)); this.mixerChannel = new TGMixerTrackChannel(this); this.mixerChannel.init(composite); this.checkSolo = new Button(composite,SWT.CHECK); this.checkSolo.setSelection(TGMixerTrack.this.track.isSolo()); this.checkSolo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TGTrack track = TGMixerTrack.this.track; UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track); TuxGuitar.instance().getSongManager().getTrackManager().changeSolo(track,TGMixerTrack.this.checkSolo.getSelection()); TGMixerTrack.this.mixer.fireChanges(track.getChannel(),TGMixer.SOLO); TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(track)); TuxGuitar.instance().updateCache(true); } }); this.checkMute = new Button(composite,SWT.CHECK); this.checkMute.setSelection(TGMixerTrack.this.track.isMute()); this.checkMute.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TGTrack track = TGMixerTrack.this.track; UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track); TuxGuitar.instance().getSongManager().getTrackManager().changeMute(track,TGMixerTrack.this.checkMute.getSelection()); TGMixerTrack.this.mixer.fireChanges(track.getChannel(),TGMixer.MUTE); TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(track)); TuxGuitar.instance().updateCache(true); } }); new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR).setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false)); Composite effects = new Composite(composite, SWT.NONE); effects.setLayout(new GridLayout(4,false)); effects.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.scaleChorus = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.CHORUS, getVerticalScaleData()); this.scaleChorus.setSelection( this.track.getChannel().getChorus()); this.scaleReverb = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.REVERB, getVerticalScaleData()); this.scaleReverb.setSelection( this.track.getChannel().getReverb()); this.scalePhaser = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.PHASER, getVerticalScaleData()); this.scalePhaser.setSelection( this.track.getChannel().getPhaser()); this.scaleTremolo = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.TREMOLO, getVerticalScaleData()); this.scaleTremolo.setSelection( this.track.getChannel().getTremolo()); new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR).setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false)); this.scaleBalance = new TGMixerScale(composite, SWT.HORIZONTAL, 64, TGMixer.BALANCE, getHorizontalScaleData()); this.scaleBalance.setSelection(this.track.getChannel().getBalance()); this.scaleVolume = new TGMixerScale(composite, SWT.VERTICAL, 16, TGMixer.VOLUME, new GridData(SWT.CENTER,SWT.FILL,true,true)); this.scaleVolume.setSelection( this.track.getChannel().getVolume()); Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR); separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false)); Composite volumeValueComposite = new Composite(composite, SWT.NONE); volumeValueComposite.setLayout(new GridLayout(2,false)); this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.LEFT); this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER); this.volumeValueLabel.setLayoutData(getVolumeValueLabelData()); this.volumeValueLabel.setText(Integer.toString(this.track.getChannel().getVolume())); } private GridData getHorizontalScaleData(){ GridData data = new GridData(SWT.CENTER,SWT.NONE,false,true); data.widthHint = 80; return data; } private GridData getVerticalScaleData(){ GridData data = new GridData(SWT.CENTER,SWT.FILL,false,true); data.heightHint = 65; return data; } private GridData getVolumeValueLabelData(){ GridData data = new GridData(SWT.CENTER,SWT.NONE,true,false); data.minimumWidth = 40; return data; } public void fireChanges(int type){ if((type & TGMixer.SOLO) != 0 || (type & TGMixer.MUTE) != 0){ this.checkSolo.setSelection(this.track.isSolo()); this.checkMute.setSelection(this.track.isMute()); } if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.VOLUME) != 0){ int value = this.track.getChannel().getVolume(); this.scaleVolume.setSelection( ( value) ); this.volumeValueLabel.setText(Integer.toString( value )); } if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.BALANCE) != 0){ int value = this.track.getChannel().getBalance(); this.scaleBalance.setSelection(value); } if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.CHORUS) != 0){ int value = this.track.getChannel().getChorus(); this.scaleChorus.setSelection( ( value) ); } if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.REVERB) != 0){ int value = this.track.getChannel().getReverb(); this.scaleReverb.setSelection( ( value) ); } if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.PHASER) != 0){ int value = this.track.getChannel().getPhaser(); this.scalePhaser.setSelection( ( value) ); } if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.TREMOLO) != 0){ int value = this.track.getChannel().getTremolo(); this.scaleTremolo.setSelection( ( value) ); } if((type & TGMixer.CHANNEL) != 0){ this.mixerChannel.updateItems(true); } } public void loadProperties(){ this.checkSolo.setText(TuxGuitar.getProperty("mixer.track.solo")); this.checkMute.setText(TuxGuitar.getProperty("mixer.track.mute")); this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("mixer.channel.volume") + ":"); this.scaleVolume.setText(TuxGuitar.getProperty("mixer.channel.volume")); this.scaleBalance.setText(TuxGuitar.getProperty("mixer.channel.balance")); this.scaleChorus.setText(TuxGuitar.getProperty("mixer.channel.chorus")); this.scaleReverb.setText(TuxGuitar.getProperty("mixer.channel.reverb")); this.scalePhaser.setText(TuxGuitar.getProperty("mixer.channel.phaser")); this.scaleTremolo.setText(TuxGuitar.getProperty("mixer.channel.tremolo")); this.mixerChannel.updateItems(true); } public void updateItems(){ this.mixerChannel.updateItems(false); } public TGTrack getTrack(){ return this.track; } public TGMixer getMixer(){ return this.mixer; } protected void updateChannelValue(int type, int value){ if( (type & TGMixer.VOLUME) != 0 ){ TGMixerTrack.this.track.getChannel().setVolume( (short)value ); } else if( (type & TGMixer.BALANCE) != 0 ){ TGMixerTrack.this.track.getChannel().setBalance( (short)value ); } else if( (type & TGMixer.CHORUS) != 0 ){ TGMixerTrack.this.track.getChannel().setChorus( (short)value ); } else if( (type & TGMixer.REVERB) != 0 ){ TGMixerTrack.this.track.getChannel().setReverb( (short)value ); } else if( (type & TGMixer.PHASER) != 0 ){ TGMixerTrack.this.track.getChannel().setPhaser( (short)value ); } else if( (type & TGMixer.TREMOLO) != 0 ){ TGMixerTrack.this.track.getChannel().setTremolo( (short)value ); } this.mixer.fireChanges(TGMixerTrack.this.track.getChannel(), type); } private class TGMixerScale { private int type; private int value; private boolean inverted; private Scale scale; private String text; protected UndoableTrackChannel undoable; public TGMixerScale(Composite parent, int style, int pageIncrement, int type, Object layoutData){ this.init(parent, style, pageIncrement, type, layoutData); } public void init(Composite parent, int style, int pageIncrement, int type, Object layoutData){ this.scale = new Scale(parent, style); this.scale.setMaximum(127); this.scale.setMinimum(0); this.scale.setIncrement(1); this.scale.setPageIncrement(pageIncrement); this.scale.setLayoutData(layoutData); this.type = type; this.value = -1; this.inverted = ((style & SWT.VERTICAL) != 0 ); this.addDefaultListeners(); } public void addDefaultListeners(){ this.scale.addListener(SWT.Selection, new Listener() { public synchronized void handleEvent(Event event) { TGMixerScale.this.updateValue(); TGMixerTrack.this.updateChannelValue(getType(), getSelection()); } }); this.scale.addMouseListener(new MouseAdapter() { public void mouseDown(MouseEvent arg0) { TGMixerScale.this.undoable = UndoableTrackChannel.startUndo(); } public void mouseUp(MouseEvent arg0) { if(TGMixerScale.this.undoable != null){ TuxGuitar.instance().getUndoableManager().addEdit(TGMixerScale.this.undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().updateCache(true); TGMixerScale.this.undoable = null; } } }); } public void updateValue(){ this.setSelection( ( this.inverted ? 127 - this.scale.getSelection() : this.scale.getSelection() ) ); } public int getType(){ return this.type; } public int getSelection(){ if(this.value < 0){ this.updateValue(); } return this.value; } public void setSelection(int value){ if(value != this.value){ this.value = value; this.scale.setSelection( ( this.inverted ? 127 - this.value : this.value ) ); this.updateToolTipValue(); } } public void updateToolTipValue(){ if(this.text != null){ this.scale.setToolTipText( this.text + ": " + this.value ); } } public void setText(String text){ this.text = text; this.updateToolTipValue(); } public String getText(){ return this.text; } } private class TGMixerScalePopup extends TGMixerScale{ private Shell shell; private Composite composite; private Button item; public TGMixerScalePopup(Composite parent, int style, int pageIncrement, int type, Object layoutData){ super(parent, style, pageIncrement, type, layoutData); } public void init(Composite parent, int style, int pageIncrement, int type, Object layoutData){ this.shell = new Shell( parent.getShell(), SWT.NO_TRIM); this.shell.setVisible(false); this.shell.setLayout(getGridLayout()); this.shell.addShellListener(new ShellAdapter() { public void shellDeactivated(ShellEvent e) { hideShell(); } public void shellClosed(ShellEvent e) { e.doit = false; hideShell(); } }); this.composite = new Composite(this.shell, SWT.BORDER); this.composite.setLayout(getGridLayout()); this.composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.item = new Button(parent, SWT.PUSH); this.item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showSelect(); } }); super.init(this.composite, style, pageIncrement, type, layoutData); } private GridLayout getGridLayout(){ GridLayout layout = new GridLayout(); layout.horizontalSpacing = 0; layout.verticalSpacing = 0; layout.marginWidth = 0; layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 0; layout.marginLeft = 0; layout.marginHeight = 0; return layout; } public void updateToolTipValue(){ super.updateToolTipValue(); if(this.getText() != null){ this.item.setToolTipText( this.getText() + ": " + this.getSelection() ); } } public void setText(String text){ super.setText(text); if(this.getText() != null && this.getText().length() > 0){ this.item.setText( this.getText().substring(0,1) ); } } public void showSelect() { if(!this.shell.isVisible()){ Rectangle bounds = this.item.getBounds(); Point location = this.item.getParent().toDisplay(new Point(bounds.x, bounds.y)); this.shell.pack(); this.shell.setLocation( (location.x + (bounds.width / 2)) - (this.shell.getSize().x / 2), location.y + bounds.height); this.shell.setVisible(true); this.shell.setActive(); } } public void hideShell() { this.shell.setVisible(false); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrackChannel.java0000644000175000017500000001507211273045225030531 0ustar julianjulianpackage org.herac.tuxguitar.gui.mixer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackChannel; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGTrack; public class TGMixerTrackChannel { private TGMixerTrack mixer; protected Combo normalChannel; protected Combo effectChannel; protected ChannelList normalChannels; protected ChannelList effectChannels; public TGMixerTrackChannel(TGMixerTrack mixer){ this.mixer = mixer; } protected TGTrack getTrack(){ return this.mixer.getTrack(); } protected TGChannel getChannel(){ return this.mixer.getTrack().getChannel(); } public void init(Composite parent){ this.normalChannels = new ChannelList(); this.normalChannel = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY); this.normalChannel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.effectChannels = new ChannelList(); this.effectChannel = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY); this.effectChannel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); this.normalChannel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { UndoableTrackChannel undoable = UndoableTrackChannel.startUndo(); TGChannel channel = getTrack().getChannel(); boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels(); int idx = TGMixerTrackChannel.this.normalChannels.getChannel(TGMixerTrackChannel.this.normalChannel.getSelectionIndex()); if(!usedChannels[idx]){ channel.setChannel((short)idx); channel.setEffectChannel(channel.getChannel()); }else{ TuxGuitar.instance().getSongManager().getUsedChannel(idx).copy(channel); } fireChannelChange(channel); TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); } }); this.effectChannel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { UndoableTrackChannel undoable = UndoableTrackChannel.startUndo(); TGChannel channel = getTrack().getChannel(); int idx = TGMixerTrackChannel.this.effectChannels.getChannel(TGMixerTrackChannel.this.effectChannel.getSelectionIndex()); channel.setEffectChannel((short)idx); fireChannelChange(channel); TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().updateCache(true); } }); this.updateItems(true); } public void updateItems(boolean reload){ if(reload){ this.updateNormalChannel(); this.updateEffectChannel(); } this.normalChannel.setEnabled(!TuxGuitar.instance().getPlayer().isRunning()); this.effectChannel.setEnabled(!TuxGuitar.instance().getPlayer().isRunning()); } private void updateNormalChannel(){ this.normalChannel.removeAll(); this.normalChannels.clear(); boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels(); boolean[] usedEffectChannels = TuxGuitar.instance().getSongManager().getUsedEffectChannels(); if(getChannel().isPercussionChannel()){ this.normalChannel.add(Integer.toString(TGChannel.DEFAULT_PERCUSSION_CHANNEL)); this.normalChannel.select(0); this.normalChannels.addChannel(0,0); }else{ int itemIndex = 0; for(int i = 0;i < usedChannels.length;i++){ if(!TGChannel.isPercussionChannel(i)){ if(!usedEffectChannels[i] || (usedEffectChannels[i] && usedChannels[i]) || (getChannel().getChannel() == i && getChannel().getEffectChannel() == getChannel().getChannel())){ String itemName = new String(); if(usedChannels[i] && (getChannel().getChannel() != i || TuxGuitar.instance().getSongManager().countTracksForChannel(i) > 1)){ itemName = i + " " + TuxGuitar.getProperty("mixer.channel.link"); }else{ itemName = i + " " + TuxGuitar.getProperty("mixer.channel.free"); } this.normalChannel.add(itemName); if(i == getChannel().getChannel()){ this.normalChannel.select(itemIndex); } this.normalChannels.addChannel(itemIndex,i); itemIndex ++; } } } } } private void updateEffectChannel(){ this.effectChannel.removeAll(); this.effectChannels.clear(); boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels(); boolean[] usedEffectChannels = TuxGuitar.instance().getSongManager().getUsedEffectChannels(); if(getChannel().isPercussionChannel()){ this.effectChannel.add(Integer.toString(TGChannel.DEFAULT_PERCUSSION_CHANNEL)); this.effectChannel.select(0); this.effectChannels.addChannel(0,0); }else{ int itemIndex = 0; for(int i = 0;i < usedEffectChannels.length;i++){ if(!TGChannel.isPercussionChannel(i)){ if((!usedEffectChannels[i] || getChannel().getEffectChannel() == i) && (!usedChannels[i] || i == getChannel().getChannel())){ this.effectChannel.add(Integer.toString(i)); if(i == getChannel().getEffectChannel()){ this.effectChannel.select(itemIndex); } this.effectChannels.addChannel(itemIndex,i); itemIndex ++; } } } } } public void fireChannelChange(TGChannel channel){ this.mixer.getMixer().fireChanges(channel,TGMixer.CHANNEL); } private class ChannelList{ private List channelIndexs; public ChannelList(){ this.channelIndexs = new ArrayList(); } public void addChannel(int index,int channel){ this.channelIndexs.add(new ChannelIndex(index,channel)); } public int getChannel(int index){ Iterator it = this.channelIndexs.iterator(); while (it.hasNext()) { ChannelIndex channelIndex = (ChannelIndex) it.next(); if(index == channelIndex.getIndex()){ return channelIndex.getChannel(); } } return -1; } public void clear(){ this.channelIndexs.clear(); } } private class ChannelIndex{ private int index; private int channel; public ChannelIndex(int index,int channel){ this.index = index; this.channel = channel; } public int getChannel() { return this.channel; } public int getIndex() { return this.index; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintDocument.java0000644000175000017500000000060211273045224030056 0ustar julianjulianpackage org.herac.tuxguitar.gui.printer; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.editors.TGPainter; public interface PrintDocument{ public void start(); public void finish(); public void pageStart(); public void pageFinish(); public boolean isPaintable(int page); public TGPainter getPainter(); public Rectangle getBounds(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintPreview.java0000644000175000017500000001536411273045224027734 0ustar julianjulianpackage org.herac.tuxguitar.gui.printer; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingConstants; import org.herac.tuxguitar.gui.util.DialogUtils; public class PrintPreview{ private static final int SCROLL_INCREMENT = 50; private static final int MARGIN_TOP = 20; private static final int MARGIN_BOTTOM = 40; private static final int MARGIN_LEFT = 50; private static final int MARGIN_RIGHT = 20; protected Shell dialog; protected Composite previewComposite; protected Composite pageComposite; protected Text currentText; protected Button previous; protected Button next; protected Rectangle bounds; protected List pages; protected int currentPage; public PrintPreview(List pages,Rectangle bounds){ this.pages = pages; this.bounds = bounds; } public void showPreview(Shell parent){ this.dialog = DialogUtils.newDialog(parent,SWT.SHELL_TRIM | SWT.APPLICATION_MODAL ); this.dialog.setLayout(new GridLayout()); this.dialog.setText(TuxGuitar.getProperty("print.preview")); this.initToolBar(); this.initPreviewComposite(); this.changePage(0); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_MAXIMIZED | DialogUtils.OPEN_STYLE_WAIT); } private void initToolBar(){ Composite composite = new Composite(this.dialog,SWT.NONE); composite.setLayout(new GridLayout(5,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false)); this.previous = new Button(composite,SWT.ARROW | SWT.LEFT); this.currentText = new Text(composite,SWT.BORDER); this.currentText.setLayoutData(new GridData(25,SWT.DEFAULT)); this.next = new Button(composite,SWT.ARROW | SWT.RIGHT); Label maxPages = new Label(composite,SWT.NONE); Button close = new Button(composite,SWT.PUSH); close.setLayoutData(getButtonData()); this.currentText.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { if(e.keyCode == KeyBindingConstants.ENTER){ try{ Integer number = new Integer(PrintPreview.this.currentText.getText()); changePage(number.intValue() - 1); }catch(NumberFormatException exception){ changePage(PrintPreview.this.currentPage); } } } }); this.previous.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(PrintPreview.this.currentPage >= 0){ changePage(PrintPreview.this.currentPage - 1); } } }); this.next.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(PrintPreview.this.currentPage >= 0){ changePage(PrintPreview.this.currentPage + 1); } } }); close.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { PrintPreview.this.dialog.dispose(); } }); maxPages.setText(TuxGuitar.getProperty("print.preview.page-of") + " " + this.pages.size()); close.setText(TuxGuitar.getProperty("close")); } private GridData getButtonData(){ GridData data = new GridData(SWT.RIGHT, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private void initPreviewComposite(){ this.previewComposite = new Composite(this.dialog,SWT.BORDER | SWT.V_SCROLL); this.previewComposite.setLayout(new GridLayout()); this.previewComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.previewComposite.setBackground(this.previewComposite.getDisplay().getSystemColor(SWT.COLOR_GRAY)); this.previewComposite.setFocus(); this.pageComposite = new Composite(this.previewComposite,SWT.BORDER | SWT.DOUBLE_BUFFERED); this.pageComposite.setLayout(new GridLayout()); this.pageComposite.setBackground(this.previewComposite.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.pageComposite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { if(PrintPreview.this.currentPage >= 0){ updateScroll(); int vScroll = PrintPreview.this.previewComposite.getVerticalBar().getSelection(); TGPainter painter = new TGPainter(e.gc); painter.drawImage((Image)PrintPreview.this.pages.get(PrintPreview.this.currentPage),MARGIN_LEFT,MARGIN_TOP - vScroll); } } }); GridData pageData = new GridData(); pageData.horizontalAlignment = SWT.CENTER; pageData.verticalAlignment = SWT.CENTER; pageData.grabExcessHorizontalSpace = true; pageData.grabExcessVerticalSpace = true; pageData.widthHint = (this.bounds.width - this.bounds.x) + (MARGIN_LEFT + MARGIN_RIGHT); pageData.heightHint = (this.bounds.height - this.bounds.y) + (MARGIN_TOP + MARGIN_BOTTOM); this.pageComposite.setLayoutData(pageData); this.previewComposite.getVerticalBar().setIncrement(SCROLL_INCREMENT); this.previewComposite.getVerticalBar().addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { PrintPreview.this.pageComposite.redraw(); } }); } protected void updateScroll(){ ScrollBar vBar = this.previewComposite.getVerticalBar(); Rectangle client = this.pageComposite.getClientArea(); vBar.setMaximum((this.bounds.height - this.bounds.y) + (MARGIN_TOP + MARGIN_BOTTOM)); vBar.setThumb(Math.min((this.bounds.height - this.bounds.y) + (MARGIN_TOP + MARGIN_BOTTOM), client.height)); } protected void changePage(int index){ if(!this.pages.isEmpty()){ int pageCount = this.pages.size(); if(index >= 0 && index < pageCount){ this.currentPage = index; this.currentText.setText(Integer.toString(index + 1)); this.pageComposite.redraw(); }else if(this.currentPage >= 0 && this.currentPage < pageCount){ this.currentText.setText(Integer.toString(this.currentPage + 1 )); } this.previous.setEnabled(this.currentPage > 0); this.next.setEnabled((this.currentPage + 1) < pageCount); this.previewComposite.getVerticalBar().setSelection(0); this.previewComposite.setFocus(); }else{ this.currentText.setEnabled(false); this.previous.setEnabled(false); this.next.setEnabled(false); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStyles.java0000644000175000017500000000247211273045224027572 0ustar julianjulianpackage org.herac.tuxguitar.gui.printer; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; public class PrintStyles { private int trackNumber; private int fromMeasure; private int toMeasure; private int style; private boolean blackAndWhite; public PrintStyles() { this(-1,-1,-1,ViewLayout.DISPLAY_TABLATURE, true); } public PrintStyles(int trackNumber,int fromMeasure, int toMeasure, int style , boolean blackAndWhite) { this.trackNumber = trackNumber; this.fromMeasure = fromMeasure; this.toMeasure = toMeasure; this.style = style; this.blackAndWhite = blackAndWhite; } public int getFromMeasure() { return this.fromMeasure; } public void setFromMeasure(int fromMeasure) { this.fromMeasure = fromMeasure; } public int getStyle() { return this.style; } public void setStyle(int style) { this.style = style; } public int getToMeasure() { return this.toMeasure; } public void setToMeasure(int toMeasure) { this.toMeasure = toMeasure; } public int getTrackNumber() { return this.trackNumber; } public void setTrackNumber(int trackNumber) { this.trackNumber = trackNumber; } public boolean isBlackAndWhite() { return this.blackAndWhite; } public void setBlackAndWhite(boolean blackAndWhite) { this.blackAndWhite = blackAndWhite; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStylesDialog.java0000644000175000017500000001630311273045224030710 0ustar julianjulianpackage org.herac.tuxguitar.gui.printer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.util.DialogUtils; public class PrintStylesDialog { public static PrintStyles open(Shell shell) { final PrintStyles styles = new PrintStyles(); final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("options")); //------------------TRACK SELECTION------------------ Group track = new Group(dialog,SWT.SHADOW_ETCHED_IN); track.setLayout(new GridLayout(2,false)); track.setLayoutData(getGroupData()); track.setText(TuxGuitar.getProperty("track")); Label trackLabel = new Label(track, SWT.NULL); trackLabel.setText(TuxGuitar.getProperty("track")); final Combo tracks = new Combo(track, SWT.DROP_DOWN | SWT.READ_ONLY); tracks.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){ tracks.add(TuxGuitar.instance().getSongManager().getTrack(number).getName()); } tracks.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1); //------------------MEASURE RANGE------------------ Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN); range.setLayout(new GridLayout(2,false)); range.setLayoutData(getGroupData()); range.setText(TuxGuitar.getProperty("print.range")); final int minSelection = 1; final int maxSelection = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders(); Label fromLabel = new Label(range, SWT.NULL); fromLabel.setText(TuxGuitar.getProperty("edit.from")); final Spinner fromSpinner = new Spinner(range, SWT.BORDER); fromSpinner.setLayoutData(getSpinnerData()); fromSpinner.setMaximum(maxSelection); fromSpinner.setMinimum(minSelection); fromSpinner.setSelection(minSelection); Label toLabel = new Label(range, SWT.NULL); toLabel.setText(TuxGuitar.getProperty("edit.to")); final Spinner toSpinner = new Spinner(range, SWT.BORDER); toSpinner.setLayoutData(getSpinnerData()); toSpinner.setMinimum(minSelection); toSpinner.setMaximum(maxSelection); toSpinner.setSelection(maxSelection); fromSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int fromSelection = fromSpinner.getSelection(); int toSelection = toSpinner.getSelection(); if(fromSelection < minSelection){ fromSpinner.setSelection(minSelection); }else if(fromSelection > toSelection){ fromSpinner.setSelection(toSelection); } } }); toSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int toSelection = toSpinner.getSelection(); int fromSelection = fromSpinner.getSelection(); if(toSelection < fromSelection){ toSpinner.setSelection(fromSelection); }else if(toSelection > maxSelection){ toSpinner.setSelection(maxSelection); } } }); //------------------CHECK OPTIONS-------------------- Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN); options.setLayout(new GridLayout()); options.setLayoutData(getGroupData()); options.setText(TuxGuitar.getProperty("options")); final Button tablatureEnabled = new Button(options,SWT.CHECK); tablatureEnabled.setText(TuxGuitar.getProperty("export.tablature-enabled")); tablatureEnabled.setSelection(true); final Button scoreEnabled = new Button(options,SWT.CHECK); scoreEnabled.setText(TuxGuitar.getProperty("export.score-enabled")); scoreEnabled.setSelection(true); final Button chordNameEnabled = new Button(options,SWT.CHECK); chordNameEnabled.setText(TuxGuitar.getProperty("export.chord-name-enabled")); chordNameEnabled.setSelection(true); final Button chordDiagramEnabled = new Button(options,SWT.CHECK); chordDiagramEnabled.setText(TuxGuitar.getProperty("export.chord-diagram-enabled")); chordDiagramEnabled.setSelection(true); final Button blackAndWhite = new Button(options,SWT.CHECK); blackAndWhite.setText(TuxGuitar.getProperty("export.black-and-white")); blackAndWhite.setSelection(true); tablatureEnabled.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!tablatureEnabled.getSelection()){ scoreEnabled.setSelection(true); } } }); scoreEnabled.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(!scoreEnabled.getSelection()){ tablatureEnabled.setSelection(true); } } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int style = 0; style |= (scoreEnabled.getSelection() ? ViewLayout.DISPLAY_SCORE : 0); style |= (tablatureEnabled.getSelection() ? ViewLayout.DISPLAY_TABLATURE : 0); style |= (chordNameEnabled.getSelection() ? ViewLayout.DISPLAY_CHORD_NAME : 0); style |= (chordDiagramEnabled.getSelection() ? ViewLayout.DISPLAY_CHORD_DIAGRAM : 0); styles.setTrackNumber(tracks.getSelectionIndex() + 1); styles.setFromMeasure(fromSpinner.getSelection()); styles.setToMeasure(toSpinner.getSelection()); styles.setBlackAndWhite(blackAndWhite.getSelection()); styles.setStyle(style); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return ((styles.getTrackNumber() > 0)?styles:null); } private static GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private static GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 60; return data; } private static GridData getGroupData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 300; return data; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTable.java0000644000175000017500000001073211273045225026157 0ustar julianjulianpackage org.herac.tuxguitar.gui.table; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; public class TGTable { private ScrolledComposite sComposite; private Composite table; private SashForm columnControl; private Composite rowControl; private TGTableColumn columnNumber; private TGTableColumn columnName; private TGTableColumn columnInstrument; private TGTableColumn columnCanvas; private List rows; private int rowHeight; private int scrollIncrement; public TGTable(Composite parent){ this.rows = new ArrayList(); this.newTable(parent); } public void newTable(Composite parent){ this.sComposite = new ScrolledComposite(parent,SWT.BORDER | SWT.V_SCROLL); this.sComposite.setLayout(new GridLayout()); this.sComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.sComposite.setAlwaysShowScrollBars(true); this.sComposite.setExpandHorizontal(true); this.sComposite.setExpandVertical(true); this.table = new Composite(this.sComposite,SWT.NONE); this.table.setLayout(newGridLayout(1,0,0,0,0)); this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.columnControl = new SashForm(this.table,SWT.HORIZONTAL); this.columnControl.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); this.columnNumber = new TGTableColumn(this,SWT.LEFT); this.columnName = new TGTableColumn(this,SWT.LEFT); this.columnInstrument = new TGTableColumn(this,SWT.LEFT); this.columnCanvas = new TGTableColumn(this,SWT.CENTER); this.columnControl.setWeights(new int[]{1,7,7,20}); this.rowControl = new Composite(this.table,SWT.NONE); this.rowControl.setLayout(newGridLayout(1,0,1,0,1)); this.rowControl.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.sComposite.setContent(this.table); } public Composite getControl(){ return this.table; } public void newRow(){ this.rows.add(new TGTableRow(this)); } private GridLayout newGridLayout(int cols,int marginWidth,int marginHeight,int horizontalSpacing,int verticalSpacing){ GridLayout layout = new GridLayout(cols,false); layout.marginWidth = marginWidth; layout.marginHeight = marginHeight; layout.horizontalSpacing = horizontalSpacing; layout.verticalSpacing = verticalSpacing; return layout; } public void addRowItem(TGTableColumn column,Control control,boolean computeSize){ if(computeSize){ this.rowHeight = Math.max(this.rowHeight,control.computeSize(SWT.DEFAULT,SWT.DEFAULT).y); this.scrollIncrement = this.rowHeight; } column.addControl(control); } public int getMinHeight(){ return (this.sComposite.getMinHeight() + ( this.sComposite.getBorderWidth() * 2 ) ); } public Composite getColumnControl(){ return this.columnControl; } public Composite getRowControl(){ return this.rowControl; } public int getRowHeight(){ return this.rowHeight; } public int getScrollIncrement(){ return this.scrollIncrement; } public TGTableColumn getColumnInstrument() { return this.columnInstrument; } public TGTableColumn getColumnName() { return this.columnName; } public TGTableColumn getColumnNumber() { return this.columnNumber; } public TGTableColumn getColumnCanvas() { return this.columnCanvas; } public TGTableRow getRow(int index){ if(index >= 0 && index < this.rows.size()){ return (TGTableRow)this.rows.get(index); } return null; } public void removeRowsAfter(int index){ while(index < this.rows.size()){ TGTableRow row = (TGTableRow)this.rows.get(index); row.dispose(); this.rows.remove(index); } this.notifyRemoved(); } public int getRowCount(){ return this.rows.size(); } public void update(){ this.layoutColumns(); this.table.layout(true,true); this.sComposite.setMinHeight(this.table.computeSize(SWT.DEFAULT, SWT.DEFAULT).y); this.sComposite.getVerticalBar().setIncrement( (getScrollIncrement() + this.sComposite.getBorderWidth() ) ); } private void notifyRemoved(){ this.columnNumber.notifyRemoved(); this.columnName.notifyRemoved(); this.columnInstrument.notifyRemoved(); this.columnCanvas.notifyRemoved(); } private void layoutColumns(){ this.columnNumber.layout(); this.columnName.layout(); this.columnInstrument.layout(); this.columnCanvas.layout(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableCanvasPainter.java0000644000175000017500000000553311273045225030641 0ustar julianjulianpackage org.herac.tuxguitar.gui.table; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.song.models.TGTrack; public class TGTableCanvasPainter implements PaintListener{ private TGTableViewer viewer; private TGTrack track; public TGTableCanvasPainter(TGTableViewer viewer,TGTrack track){ this.viewer = viewer; this.track = track; } public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); paintTrack(painter); } protected void paintTrack(TGPainter painter){ if(!TuxGuitar.instance().isLocked()){ TuxGuitar.instance().lock(); int x = -this.viewer.getHScrollSelection(); int y = 0; int size = this.viewer.getTable().getRowHeight(); int width = painter.getGC().getDevice().getBounds().width; boolean playing = TuxGuitar.instance().getPlayer().isRunning(); painter.setBackground(painter.getGC().getDevice().getSystemColor(SWT.COLOR_GRAY)); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(0,y,width,size); painter.closePath(); Color trackColor = new Color(painter.getGC().getDevice(),this.track.getColor().getR(),this.track.getColor().getG(),this.track.getColor().getB()); painter.setBackground(trackColor); painter.setForeground(trackColor); int count = this.track.countMeasures(); for(int j = 0;j < count;j++){ TGMeasureImpl measure = (TGMeasureImpl)this.track.getMeasure(j); if(isRestMeasure(measure)){ painter.initPath(); painter.setAntialias(false); painter.addRectangle(x,y,size - 2,size - 1); painter.closePath(); }else{ painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(x,y,size - 1,size ); painter.closePath(); } boolean hasCaret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().equals(measure); if((playing && measure.isPlaying(this.viewer.getEditor().getTablature().getViewLayout())) || (!playing && hasCaret)){ painter.setBackground(painter.getGC().getDevice().getSystemColor(SWT.COLOR_BLACK)); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(x + 4,y + 4,size - 9,size - 8); painter.closePath(); painter.setBackground(trackColor); } x += size; } trackColor.dispose(); TuxGuitar.instance().unlock(); } } private boolean isRestMeasure(TGMeasureImpl measure){ int beatCount = measure.countBeats(); for(int i = 0; i < beatCount; i++){ if( !measure.getBeat(i).isRestBeat() ){ return false; } } return true; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableColumn.java0000644000175000017500000000346211273045225027337 0ustar julianjulianpackage org.herac.tuxguitar.gui.table; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.herac.tuxguitar.gui.TuxGuitar; public class TGTableColumn { private TGTable table; private CLabel column; private List controls; public TGTableColumn(TGTable table,int align){ this.table = table; this.controls = new ArrayList(); this.column = new CLabel(this.table.getColumnControl(),align | SWT.SHADOW_OUT); this.column.setLayout(new GridLayout()); this.column.addListener(SWT.Resize,new Listener() { public void handleEvent(Event arg0) { layout(); } }); this.column.pack(); this.appendListeners(this.column); } public CLabel getControl(){ return this.column; } public void setTitle(String title){ this.column.setText(title); } public void addControl(Control control){ this.controls.add(control); this.appendListeners(control); } public void appendListeners(Control control){ TuxGuitar.instance().getkeyBindingManager().appendListenersTo(control); } public void layout(){ Point location = this.column.getLocation(); Point size = this.column.getSize(); for(int i = 0; i < this.controls.size(); i ++){ Control control = (Control)this.controls.get(i); if(!control.isDisposed()){ control.setSize(size.x,this.table.getRowHeight()); control.setLocation(location.x, 0); } } } public void notifyRemoved(){ for(int i = 0; i < this.controls.size(); i ++){ Control control = (Control)this.controls.get(i); if(control.isDisposed()){ this.controls.remove(i --); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableRow.java0000644000175000017500000001042211273045225026643 0ustar julianjulianpackage org.herac.tuxguitar.gui.table; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; public class TGTableRow { private TGTable table; private Composite row; private CLabel number; private CLabel name; private CLabel instrument; private Composite painter; private MouseListener mouseListenerLabel; private MouseListener mouseListenerCanvas; private PaintListener paintListenerCanvas; public TGTableRow(TGTable table){ this.table = table; this.init(); } public void init(){ MouseListener mouseListenerLabel = new MouseListenerLabel(); MouseListener mouseListenerCanvas = new MouseListenerCanvas(); PaintListener paintListenerCanvas = new PaintListenerCanvas(); this.row = new Composite(this.table.getRowControl(),SWT.NONE ); this.row.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); this.number = new CLabel(this.row,SWT.LEFT); this.number.addMouseListener(mouseListenerLabel); this.table.addRowItem(this.table.getColumnNumber(),this.number,true); this.name = new CLabel(this.row,SWT.LEFT); this.name.addMouseListener(mouseListenerLabel); this.table.addRowItem(this.table.getColumnName(),this.name,true); this.instrument = new CLabel(this.row,SWT.LEFT); this.instrument.addMouseListener(mouseListenerLabel); this.table.addRowItem(this.table.getColumnInstrument(),this.instrument,true); this.painter = new Composite(this.row,SWT.DOUBLE_BUFFERED); this.painter.addMouseListener(mouseListenerCanvas); this.painter.addPaintListener(paintListenerCanvas); this.table.addRowItem(this.table.getColumnCanvas(),this.painter,false); this.row.pack(); } public void setBackground(Color background){ this.number.setBackground(background); this.name.setBackground(background); this.instrument.setBackground(background); } public void dispose(){ this.row.dispose(); } public Composite getPainter() { return this.painter; } public CLabel getInstrument() { return this.instrument; } public CLabel getName() { return this.name; } public CLabel getNumber() { return this.number; } public MouseListener getMouseListenerLabel() { return this.mouseListenerLabel; } public void setMouseListenerLabel(MouseListener mouseListenerLabel) { this.mouseListenerLabel = mouseListenerLabel; } public MouseListener getMouseListenerCanvas() { return this.mouseListenerCanvas; } public void setMouseListenerCanvas(MouseListener mouseListenerCanvas) { this.mouseListenerCanvas = mouseListenerCanvas; } public PaintListener getPaintListenerCanvas() { return this.paintListenerCanvas; } public void setPaintListenerCanvas(PaintListener paintListenerCanvas) { this.paintListenerCanvas = paintListenerCanvas; } private class MouseListenerLabel implements MouseListener{ public MouseListenerLabel(){ super(); } public void mouseDoubleClick(MouseEvent e) { if(getMouseListenerLabel() != null){ getMouseListenerLabel().mouseDoubleClick(e); } } public void mouseDown(MouseEvent e) { if(getMouseListenerLabel() != null){ getMouseListenerLabel().mouseDown(e); } } public void mouseUp(MouseEvent e) { if(getMouseListenerLabel() != null){ getMouseListenerLabel().mouseUp(e); } } } private class MouseListenerCanvas implements MouseListener{ public MouseListenerCanvas(){ super(); } public void mouseDoubleClick(MouseEvent e) { if(getMouseListenerCanvas() != null){ getMouseListenerCanvas().mouseDoubleClick(e); } } public void mouseDown(MouseEvent e) { if(getMouseListenerCanvas() != null){ getMouseListenerCanvas().mouseDown(e); } } public void mouseUp(MouseEvent e) { if(getMouseListenerCanvas() != null){ getMouseListenerCanvas().mouseUp(e); } } } private class PaintListenerCanvas implements PaintListener{ public PaintListenerCanvas(){ super(); } public void paintControl(PaintEvent e) { if(getPaintListenerCanvas() != null){ getPaintListenerCanvas().paintControl(e); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableViewer.java0000644000175000017500000002616511273045225027350 0ustar julianjulianpackage org.herac.tuxguitar.gui.table; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.ScrollBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction; import org.herac.tuxguitar.gui.actions.track.GoToTrackAction; import org.herac.tuxguitar.gui.actions.track.TrackPropertiesAction; import org.herac.tuxguitar.gui.editors.TGRedrawListener; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.player.base.MidiInstrument; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; public class TGTableViewer implements TGRedrawListener, TGUpdateListener, LanguageLoader{ public static final Color[] BACKGROUNDS = new Color[]{ new Color(TuxGuitar.instance().getDisplay(),255,255,255), new Color(TuxGuitar.instance().getDisplay(),238,238,238), new Color(TuxGuitar.instance().getDisplay(),192,192,192) }; private Composite composite; private ScrollBar hSroll; private TGTable table; private int selectedTrack; private int selectedMeasure; private int trackCount = 0; private boolean autoSizeEnabled; private boolean update; private boolean followScroll; public TGTableViewer() { TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addRedrawListener(this); TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public void init(Composite parent){ this.composite = new Composite(parent,SWT.H_SCROLL); this.addLayout(); this.addTable(); this.addHScroll(); this.loadConfig(); } private void addLayout(){ GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.marginTop = 0; layout.marginBottom = 0; layout.horizontalSpacing = 0; layout.verticalSpacing = 0; getComposite().setLayout(layout); } private void addHScroll(){ this.hSroll = getComposite().getHorizontalBar(); this.hSroll.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { redrawLocked(); } }); } private void addTable(){ MouseListener listener = mouseFocusListener(); this.table = new TGTable(getComposite()); this.table.getColumnNumber().getControl().addMouseListener(listener); this.table.getColumnName().getControl().addMouseListener(listener); this.table.getColumnInstrument().getControl().addMouseListener(listener); this.table.getColumnCanvas().getControl().addMouseListener(listener); this.table.getColumnCanvas().getControl().addMouseListener(new MouseAdapter() { public void mouseDoubleClick(MouseEvent e) { TuxGuitar.instance().getAction(ChangeInfoAction.NAME).process(e); } }); this.fireUpdate(true); this.loadProperties(); } public void loadProperties() { this.table.getColumnNumber().setTitle(TuxGuitar.getProperty("track.number")); this.table.getColumnName().setTitle(TuxGuitar.getProperty("track.name")); this.table.getColumnInstrument().setTitle(TuxGuitar.getProperty("track.instrument")); } public void fireUpdate(boolean newSong){ this.update = true; if(newSong){ this.trackCount = 0; } } public void updateItems(){ this.followScroll = true; } public void updateHScroll(){ int width = (getEditor().getTablature().getCaret().getTrack().countMeasures() * this.table.getRowHeight()); this.hSroll.setIncrement(this.table.getScrollIncrement()); this.hSroll.setMaximum(width); this.hSroll.setThumb(Math.min(width ,this.table.getColumnCanvas().getControl().getClientArea().width)); } public TGTable getTable(){ return this.table; } public int getHScrollSelection(){ return this.hSroll.getSelection(); } public TablatureEditor getEditor(){ return TuxGuitar.instance().getTablatureEditor(); } private String getInstrument(TGTrack track){ if(track.isPercussionTrack()){ return TuxGuitar.getProperty("track.name.default-percussion-name"); } MidiInstrument[] list = TuxGuitar.instance().getPlayer().getInstruments(); int index = track.getChannel().getInstrument(); if(list != null && index >= 0 && index < list.length){ return list[index].getName(); } return new String(); } private void updateTable(){ if(this.update){ int count = TuxGuitar.instance().getSongManager().getSong().countTracks(); this.table.removeRowsAfter(count); for(int i = this.table.getRowCount(); i < count; i ++){ this.table.newRow(); } for(int i = 0; i < count; i ++){ final TGTrack track = TuxGuitar.instance().getSongManager().getSong().getTrack(i); final TGTableRow row = this.table.getRow(i); if(row != null){ //Number row.getNumber().setText(Integer.toString(track.getNumber())); row.getNumber().setData(track); //Name row.getName().setText(track.getName()); row.getName().setData(track); //Instrument row.getInstrument().setText(getInstrument(track)); row.getInstrument().setData(track); row.setMouseListenerLabel(new MouseAdapter() { public void mouseUp(MouseEvent e) { row.getPainter().setFocus(); } public void mouseDown(MouseEvent e) { if(track.getNumber() != getEditor().getTablature().getCaret().getTrack().getNumber()){ TuxGuitar.instance().getAction(GoToTrackAction.NAME).process(e); } } public void mouseDoubleClick(final MouseEvent e) { new Thread(new Runnable() { public void run() { ActionLock.waitFor(); TuxGuitar.instance().getAction(TrackPropertiesAction.NAME).process(e); } }).start(); } }); row.setMouseListenerCanvas(new MouseAdapter() { public void mouseUp(MouseEvent e) { row.getPainter().setFocus(); } public void mouseDown(MouseEvent e) { int index = ((e.x + getHScrollSelection())/ getTable().getRowHeight()); if(index >= 0 && index < track.countMeasures()){ TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(index); TGBeat beat = TuxGuitar.instance().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats()); if(beat != null){ getEditor().getTablature().getCaret().moveTo((TGTrackImpl)track,measure,beat,1); TuxGuitar.instance().updateCache(true); } } } }); row.setPaintListenerCanvas(new TGTableCanvasPainter(this,track)); } } this.table.update(); this.selectedTrack = 0; this.selectedMeasure = 0; if(this.autoSizeEnabled && this.trackCount != count){ TuxGuitar.instance().setTableHeight( getHeight() ); this.trackCount = count; } } this.update = false; } private int getHeight(){ Rectangle r1 = this.composite.getBounds(); Rectangle r2 = this.composite.getClientArea(); return ( this.table.getMinHeight() + (r1.height - r2.height) ); //return ( this.table.getMinHeight() + getComposite().getHorizontalBar().getSize().y ); } private void redrawRows(int selectedTrack){ int rows = this.table.getRowCount(); for(int i = 0; i < rows; i ++){ TGTableRow row = this.table.getRow(i); row.getPainter().redraw(); if(this.selectedTrack != selectedTrack){ row.setBackground( ((selectedTrack - 1) == i)?BACKGROUNDS[2]:BACKGROUNDS[ i % 2] ); } } } public void redrawLocked(){ if( !TuxGuitar.instance().isLocked() ){ TuxGuitar.instance().lock(); redraw(); TuxGuitar.instance().unlock(); } } public void redraw(){ if(!isDisposed() && !TuxGuitar.instance().isLocked()){ this.updateTable(); this.table.getColumnCanvas().setTitle(TuxGuitar.instance().getSongManager().getSong().getName()); int selectedTrack = getEditor().getTablature().getCaret().getTrack().getNumber(); this.redrawRows(selectedTrack); this.selectedTrack = selectedTrack; this.selectedMeasure = 0; this.updateHScroll(); if(this.followScroll){ this.followHorizontalScroll(getEditor().getTablature().getCaret().getMeasure().getNumber()); this.followScroll = false; } getComposite().redraw(); } } public void redrawPlayingMode(){ if(!isDisposed() && !TuxGuitar.instance().isLocked()){ TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure(); if(measure != null && measure.getTrack() != null){ this.updateTable(); int selectedTrack = measure.getTrack().getNumber(); int selectedMeasure = measure.getNumber(); if(this.selectedTrack != selectedTrack || this.selectedMeasure != selectedMeasure){ this.redrawRows(selectedTrack); this.followHorizontalScroll(selectedMeasure); } this.selectedTrack = selectedTrack; this.selectedMeasure = selectedMeasure; } } } private void followHorizontalScroll(int selectedMeasure){ int hScrollSelection = this.hSroll.getSelection(); int hScrollThumb = this.hSroll.getThumb(); int measureSize = this.table.getRowHeight(); int measurePosition = ( (selectedMeasure * measureSize) - measureSize ); if( (measurePosition - hScrollSelection) < 0 || (measurePosition + measureSize - hScrollSelection ) > hScrollThumb){ this.hSroll.setSelection(measurePosition); } } public void loadConfig(){ this.autoSizeEnabled = TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.TABLE_AUTO_SIZE); this.trackCount = 0; } public static void disposeColors(){ for(int i = 0;i < BACKGROUNDS.length;i++){ BACKGROUNDS[i].dispose(); } } public Composite getComposite(){ return this.composite; } public void dispose(){ if(!isDisposed()){ getComposite().dispose(); disposeColors(); } } public boolean isDisposed(){ return (getComposite() == null || getComposite().isDisposed()); } protected int getSelectedTrack(){ return this.selectedTrack; } private MouseListener mouseFocusListener(){ return new MouseAdapter() { public void mouseUp(MouseEvent e) { TGTable table = getTable(); if(table != null){ TGTableRow row = table.getRow( ( getSelectedTrack() - 1 ) ); if(row != null){ row.getPainter().setFocus(); } } } }; } public void doRedraw(int type) { if( type == TGRedrawListener.NORMAL ){ this.redraw(); }else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){ this.redrawPlayingMode(); } } public void doUpdate(int type) { if( type == TGUpdateListener.SELECTION ){ this.updateItems(); }else if( type == TGUpdateListener.SONG_UPDATED ){ this.fireUpdate( false ); }else if( type == TGUpdateListener.SONG_LOADED ){ this.fireUpdate( true ); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransport.java0000644000175000017500000004153211273045225030073 0ustar julianjulian/* * Created on 20-mar-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.transport; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.ProgressBar; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction; import org.herac.tuxguitar.gui.actions.transport.TransportModeAction; import org.herac.tuxguitar.gui.editors.TGRedrawListener; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.gui.util.MidiTickUtil; import org.herac.tuxguitar.player.base.MidiPlayer; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; /** * @author julian * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class TGTransport implements TGRedrawListener, TGUpdateListener, IconLoader,LanguageLoader{ private static final int PLAY_MODE_DELAY = 250; public static final int STATUS_STOPPED = 1; public static final int STATUS_PAUSED = 2; public static final int STATUS_RUNNING = 3; protected Shell dialog; protected Label label; protected ProgressBar tickProgress; protected Button metronome; protected Button mode; protected ToolBar toolBar; protected ToolItem first; protected ToolItem last; protected ToolItem previous; protected ToolItem next; protected ToolItem stop; protected ToolItem play; protected boolean editingTickScale; protected long redrawTime; protected int status; public TGTransport() { super(); } public void show() { this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM); this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.dialog.setLayout(new GridLayout()); this.dialog.setText(TuxGuitar.getProperty("transport")); this.initComposites(); this.initToolBar(); this.redraw(); this.addListeners(); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { removeListeners(); TuxGuitar.instance().updateCache(true); } }); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } public void addListeners(){ TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addRedrawListener(this); TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public void removeListeners(){ TuxGuitar.instance().getIconManager().removeLoader(this); TuxGuitar.instance().getLanguageManager().removeLoader(this); TuxGuitar.instance().getEditorManager().removeRedrawListener(this); TuxGuitar.instance().getEditorManager().removeUpdateListener(this); } private void initComposites(){ GridLayout layout = new GridLayout(2,false); layout.marginWidth = 0; layout.marginHeight = 0; layout.horizontalSpacing = 0; layout.verticalSpacing = 0; Composite composite = new Composite(this.dialog,SWT.BORDER); composite.setLayout(layout); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); initOptions(composite); initProgress(composite); } private void initOptions(Composite parent){ Composite composite = new Composite(parent,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,false,true)); this.metronome = new Button(composite,SWT.TOGGLE); this.metronome.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.metronome.addSelectionListener(TuxGuitar.instance().getAction(TransportMetronomeAction.NAME)); this.mode = new Button(composite,SWT.PUSH); this.mode.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.mode.addSelectionListener(TuxGuitar.instance().getAction(TransportModeAction.NAME)); this.loadOptionIcons(); } private void initProgress(Composite parent){ Composite composite = new Composite(parent,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); initLabel(composite); initScale(composite); } private void initLabel(Composite parent){ final Font font = new Font(parent.getDisplay(),"Minisystem",36,SWT.NORMAL); this.label = new Label(parent,SWT.RIGHT); this.label.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.label.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLACK)); this.label.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE)); this.label.setFont(font); this.label.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { font.dispose(); } }); } private void initScale(Composite parent){ GridData data = new GridData(SWT.FILL,SWT.CENTER,true,false); data.heightHint = 10; this.tickProgress = new ProgressBar(parent, SWT.BORDER | SWT.HORIZONTAL | SWT.SMOOTH); this.tickProgress.setCursor(this.tickProgress.getDisplay().getSystemCursor(SWT.CURSOR_HAND)); this.tickProgress.setLayoutData(data); this.tickProgress.setSelection((int)TGDuration.QUARTER_TIME); this.tickProgress.addMouseListener(new MouseAdapter() { public void mouseDown(MouseEvent e) { setEditingTickScale(true); updateProgressBar(e.x); } public void mouseUp(MouseEvent e) { gotoMeasure(getSongManager().getMeasureHeaderAt(TGTransport.this.tickProgress.getSelection()),true); setEditingTickScale(false); } }); this.tickProgress.addMouseMoveListener(new MouseMoveListener() { public void mouseMove(MouseEvent e) { updateProgressBar(e.x); } }); } protected void updateProgressBar(int x){ if(isEditingTickScale()){ int selection = (this.tickProgress.getMinimum() + (( x * (this.tickProgress.getMaximum() - this.tickProgress.getMinimum())) / this.tickProgress.getSize().x) ); this.tickProgress.setSelection(Math.max((int)TGDuration.QUARTER_TIME,selection)); this.redraw(); } } private void initToolBar(){ if(this.toolBar != null){ this.toolBar.dispose(); } this.toolBar = new ToolBar(this.dialog,SWT.FLAT); this.first = new ToolItem(this.toolBar,SWT.PUSH); this.first.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { gotoFirst(); } }); this.previous = new ToolItem(this.toolBar,SWT.PUSH); this.previous.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { gotoPrevious(); } }); this.stop = new ToolItem(this.toolBar,SWT.PUSH); this.stop.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { stop(); } }); this.play = new ToolItem(this.toolBar,SWT.PUSH); this.play.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { play(); } }); this.next = new ToolItem(this.toolBar,SWT.PUSH); this.next.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { gotoNext(); } }); this.last = new ToolItem(this.toolBar,SWT.PUSH); this.last.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { gotoLast(); } }); this.updateItems(true); this.loadProperties(); } public int getStatus() { return this.status; } public void setStatus(int status) { this.status = status; } public void updateItems(){ this.updateItems(false); } public void updateItems(boolean force){ if(!isDisposed()){ int lastStatus = getStatus(); if(TuxGuitar.instance().getPlayer().isRunning()){ setStatus(STATUS_RUNNING); }else if(TuxGuitar.instance().getPlayer().isPaused()){ setStatus(STATUS_PAUSED); }else{ setStatus(STATUS_STOPPED); } if(force || lastStatus != getStatus()){ if(getStatus() == STATUS_RUNNING){ this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst2()); this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast2()); this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious2()); this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext2()); this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop2()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPause()); }else if(getStatus() == STATUS_PAUSED){ this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst2()); this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast2()); this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious2()); this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext2()); this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop2()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPlay2()); }else if(getStatus() == STATUS_STOPPED){ this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst1()); this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast1()); this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious1()); this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext1()); this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop1()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPlay1()); } this.loadPlayText(); } TGMeasureHeader first = getSongManager().getFirstMeasureHeader(); TGMeasureHeader last = getSongManager().getLastMeasureHeader(); this.tickProgress.setMinimum((int)first.getStart()); this.tickProgress.setMaximum((int)(last.getStart() + last.getLength()) -1); this.metronome.setSelection(TuxGuitar.instance().getPlayer().isMetronomeEnabled()); this.redraw(); } } public void loadProperties(){ if(!isDisposed()){ this.dialog.setText(TuxGuitar.getProperty("transport")); this.stop.setToolTipText(TuxGuitar.getProperty("transport.stop")); this.first.setToolTipText(TuxGuitar.getProperty("transport.first")); this.last.setToolTipText(TuxGuitar.getProperty("transport.last")); this.previous.setToolTipText(TuxGuitar.getProperty("transport.previous")); this.next.setToolTipText(TuxGuitar.getProperty("transport.next")); this.metronome.setToolTipText(TuxGuitar.getProperty("transport.metronome")); this.mode.setToolTipText(TuxGuitar.getProperty("transport.mode")); this.loadPlayText(); } } public void loadPlayText(){ String property = TuxGuitar.getProperty( (getStatus() == STATUS_RUNNING ? "transport.pause" : "transport.start") ); this.play.setToolTipText(property); } public void loadIcons(){ if(!isDisposed()){ this.initToolBar(); this.loadOptionIcons(); this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.dialog.layout(true); this.dialog.pack(true); } } private void loadOptionIcons(){ this.metronome.setImage(TuxGuitar.instance().getIconManager().getTransportMetronome()); this.mode.setImage(TuxGuitar.instance().getIconManager().getTransportMode()); } public void dispose() { if(!isDisposed()){ this.dialog.dispose(); } } public boolean isDisposed() { return (this.dialog == null || this.dialog.isDisposed()); } public boolean isEditingTickScale() { return this.editingTickScale; } public void setEditingTickScale(boolean editingTickScale) { this.editingTickScale = editingTickScale; } protected TGSongManager getSongManager(){ return TuxGuitar.instance().getSongManager(); } public void gotoFirst(){ gotoMeasure(getSongManager().getFirstMeasureHeader(),true); } public void gotoLast(){ gotoMeasure(getSongManager().getLastMeasureHeader(),true) ; } public void gotoNext(){ MidiPlayer player = TuxGuitar.instance().getPlayer(); TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition())); if(header != null){ gotoMeasure(getSongManager().getNextMeasureHeader(header),true); } } public void gotoPrevious(){ MidiPlayer player = TuxGuitar.instance().getPlayer(); TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition())); if(header != null){ gotoMeasure(getSongManager().getPrevMeasureHeader(header),true); } } public void gotoMeasure(TGMeasureHeader header){ gotoMeasure(header,false); } public void gotoMeasure(TGMeasureHeader header,boolean moveCaret){ if(header != null){ TGMeasure playingMeasure = null; if( TuxGuitar.instance().getPlayer().isRunning() ){ TuxGuitar.instance().getEditorCache().updatePlayMode(); playingMeasure = TuxGuitar.instance().getEditorCache().getPlayMeasure(); } if( playingMeasure == null || playingMeasure.getHeader().getNumber() != header.getNumber() ){ TuxGuitar.instance().getPlayer().setTickPosition(MidiTickUtil.getTick(header.getStart())); if(moveCaret){ TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition(); TuxGuitar.instance().updateCache(true); } redraw(); } } } public void gotoPlayerPosition(){ TuxGuitar.instance().lock(); MidiPlayer player = TuxGuitar.instance().getPlayer(); TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition())); if(header != null){ player.setTickPosition(MidiTickUtil.getTick(header.getStart())); } TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition(); TuxGuitar.instance().unlock(); TuxGuitar.instance().updateCache(true); } public void play(){ MidiPlayer player = TuxGuitar.instance().getPlayer(); if(!player.isRunning()){ try{ player.getMode().reset(); player.play(); }catch(MidiPlayerException exception){ MessageDialog.errorMessage(exception); } }else{ player.pause(); } } public void stop(){ MidiPlayer player = TuxGuitar.instance().getPlayer(); if(!player.isRunning()){ player.reset(); this.gotoPlayerPosition(); }else{ player.reset(); } } public void redraw(){ if(!TuxGuitar.instance().isLocked()){ if(!isDisposed()){ new SyncThread(new Runnable() { public void run() { if(!isDisposed() && !TuxGuitar.instance().isLocked()){ if(isEditingTickScale()){ TGTransport.this.label.setText(Long.toString(TGTransport.this.tickProgress.getSelection())); } else if(!TuxGuitar.instance().getPlayer().isRunning()){ long tickPosition = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getPosition(); TGTransport.this.label.setText(Long.toString(tickPosition)); TGTransport.this.tickProgress.setSelection((int)tickPosition); } } } }).start(); } } } public void redrawPlayingMode(){ if(!TuxGuitar.instance().isLocked()){ //TuxGuitar.instance().lock(); if(!isDisposed()){ if(!isEditingTickScale() && TuxGuitar.instance().getPlayer().isRunning()){ long time = System.currentTimeMillis(); if(time > this.redrawTime + PLAY_MODE_DELAY){ long position = (TuxGuitar.instance().getEditorCache().getPlayStart() + (TuxGuitar.instance().getPlayer().getTickPosition() - TuxGuitar.instance().getEditorCache().getPlayTick())); this.label.setText(Long.toString(position)); this.tickProgress.setSelection((int)position); this.redrawTime = time; } } } //TuxGuitar.instance().unlock(); } } public void doRedraw(int type) { if( type == TGRedrawListener.PLAYING_THREAD || type == TGRedrawListener.PLAYING_NEW_BEAT ){ this.redrawPlayingMode(); } } public void doUpdate(int type) { if( type == TGUpdateListener.SELECTION ){ this.updateItems(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransportListener.java0000644000175000017500000000350411273045225031576 0ustar julianjulianpackage org.herac.tuxguitar.gui.transport; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.player.base.MidiPlayerListener; import org.herac.tuxguitar.util.TGSynchronizer; public class TGTransportListener implements MidiPlayerListener{ protected Object sync; protected TGSynchronizer.TGRunnable startedRunnable; protected TGSynchronizer.TGRunnable stoppedRunnable; public TGTransportListener(){ this.sync = new Object(); this.startedRunnable = getStartedRunnable(); this.stoppedRunnable = getStoppedRunnable(); } public void notifyStarted() { new Thread(new Runnable() { public void run() { try { TuxGuitar.instance().updateCache(true); while (TuxGuitar.instance().getPlayer().isRunning()) { synchronized( TGTransportListener.this.sync ){ TGSynchronizer.instance().addRunnable( TGTransportListener.this.startedRunnable ); TGTransportListener.this.sync.wait(25); } } TGTransportListener.this.notifyStopped(); } catch (Throwable throwable) { throwable.printStackTrace(); } } }).start(); } public void notifyStopped() { try { if(!TuxGuitar.instance().getDisplay().isDisposed()){ TGSynchronizer.instance().runLater( TGTransportListener.this.stoppedRunnable ); } } catch (Throwable throwable) { throwable.printStackTrace(); } } public void notifyLoop(){ // Not implemented } private TGSynchronizer.TGRunnable getStartedRunnable(){ return new TGSynchronizer.TGRunnable() { public void run() { if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().redrawPlayingMode(); } } }; } private TGSynchronizer.TGRunnable getStoppedRunnable(){ return new TGSynchronizer.TGRunnable() { public void run() { TuxGuitar.instance().getTransport().gotoPlayerPosition(); } }; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotRedoException.java0000644000175000017500000000134411273045225030465 0ustar julianjulian/* * Created on 05-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.undo; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CannotRedoException extends Exception{ private static final long serialVersionUID = 1L; public CannotRedoException() { super(); } public CannotRedoException(String message) { super(message); } public CannotRedoException(String message, Throwable cause) { super(message, cause); } public CannotRedoException(Throwable cause) { super(cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotUndoException.java0000644000175000017500000000134411273045225030501 0ustar julianjulian/* * Created on 05-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.undo; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CannotUndoException extends Exception{ private static final long serialVersionUID = 1L; public CannotUndoException() { super(); } public CannotUndoException(String message) { super(message); } public CannotUndoException(String message, Throwable cause) { super(message, cause); } public CannotUndoException(Throwable cause) { super(cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableEdit.java0000644000175000017500000000047311273045225027113 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo; public interface UndoableEdit { public static final int UNDO_ACTION = 1; public static final int REDO_ACTION = 2; public void redo() throws CannotRedoException; public void undo() throws CannotUndoException; public boolean canRedo(); public boolean canUndo(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableManager.java0000644000175000017500000000531411273045225027577 0ustar julianjulian/* * Created on 08-ago-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.undo; import java.util.ArrayList; import java.util.List; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class UndoableManager { private static final int LIMIT = 100; private int indexOfNextAdd; private List edits; public UndoableManager() { this.init(); } public void discardAllEdits() { this.reset(); } public synchronized void undo() throws CannotUndoException { UndoableEdit edit = editToBeUndone(); if (edit == null) { throw new CannotUndoException(); } try{ edit.undo(); }catch(Throwable throwable){ throw new CannotUndoException(throwable); } this.indexOfNextAdd--; } public synchronized void redo() throws CannotRedoException { UndoableEdit edit = editToBeRedone(); if (edit == null) { throw new CannotRedoException(); } try{ edit.redo(); }catch(Throwable throwable){ throw new CannotRedoException(); } this.indexOfNextAdd++; } public synchronized boolean canUndo() { boolean canUndo = false; UndoableEdit edit = editToBeUndone(); if (edit != null) { canUndo = edit.canUndo(); } return canUndo; } public synchronized boolean canRedo() { boolean canRedo = false; UndoableEdit edit = editToBeRedone(); if (edit != null) { canRedo = edit.canRedo(); } return canRedo; } public synchronized void addEdit(UndoableEdit anEdit) { checkForUnused(); checkForLimit(); this.edits.add(this.indexOfNextAdd, anEdit); this.indexOfNextAdd++; } private void checkForUnused() { while (this.edits.size() > this.indexOfNextAdd) { UndoableEdit edit = (UndoableEdit) this.edits.get(this.indexOfNextAdd); remove(edit); } } private void checkForLimit() { while (this.edits.size() >= LIMIT) { UndoableEdit edit = (UndoableEdit) this.edits.get(0); remove(edit); this.indexOfNextAdd--; } } private void remove(UndoableEdit edit) { this.edits.remove(edit); } private UndoableEdit editToBeUndone() { int index = this.indexOfNextAdd - 1; if (index >= 0 && index < this.edits.size()) { return (UndoableEdit) this.edits.get(index); } return null; } private UndoableEdit editToBeRedone() { int index = this.indexOfNextAdd; if (index >= 0 && index < this.edits.size()) { return (UndoableEdit) this.edits.get(index); } return null; } private void init() { this.indexOfNextAdd = 0; this.edits = new ArrayList(); } private void reset() { this.indexOfNextAdd = 0; this.edits.clear(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/ArgumentParser.java0000644000175000017500000001033711273045224027522 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import java.io.File; import java.net.URL; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.util.TGVersion; public class ArgumentParser { private static final String TG_DEFAULT_URL = "tuxguitar.default.url"; private static final String[] OPTION_HELP = new String[]{"-h","--help"}; private static final String[] OPTION_VERSION = new String[]{"-v","--version"}; private static final String[] OPTION_JRE_INFO = new String[]{"-i","--system-info"}; private String[] arguments; private boolean processAndExit; private URL url; public ArgumentParser(String[] arguments){ this.arguments = arguments; this.processAndExit = false; this.parse(); } private void parse(){ try{ checkHelp(); checkVersion(); checkSystemInfo(); if(!processAndExit()){ checkProperties(); checkURL(); } }catch(Throwable throwable){ throwable.printStackTrace(); } } private void checkHelp(){ for(int i = 0;i < this.arguments.length;i++){ for(int j = 0;j < OPTION_HELP.length;j++){ if(this.arguments[i].equals(OPTION_HELP[j])){ print("usage: TuxGuitar [file]"); print("Options:"); print(" -h, --help Show help options"); print(" -v, --version Show version information and exit"); print(" -i, --system-info Show the JVM system information"); print(" -D= Set a JVM system property"); this.processAndExit = true; } } } } private void checkVersion(){ for(int i = 0;i < this.arguments.length;i++){ for(int j = 0;j < OPTION_VERSION.length;j++){ if(this.arguments[i].equals(OPTION_VERSION[j])){ print(TuxGuitar.APPLICATION_NAME + " - " + TGVersion.CURRENT.getVersion()); this.processAndExit = true; } } } } private void checkSystemInfo(){ for(int i = 0;i < this.arguments.length;i++){ for(int j = 0;j < OPTION_JRE_INFO.length;j++){ if(this.arguments[i].equals(OPTION_JRE_INFO[j])){ print("System Info:"); print("-> OS-Name: " + System.getProperty("os.name")); print("-> OS-Arch: " + System.getProperty("os.arch")); print("-> OS-Version: " + System.getProperty("os.version")); print("-> JVM-Name: " + System.getProperty("java.vm.name")); print("-> JVM-Version: " + System.getProperty("java.vm.version")); print("-> JVM-Vendor: " + System.getProperty("java.vm.vendor")); print("-> Java-Version: " + System.getProperty("java.version")); print("-> Java-Vendor: " + System.getProperty("java.vendor")); print("-> Java-Home: " + System.getProperty("java.home")); print("-> Java-Class-Path: " + System.getProperty("java.class.path")); print("-> Java-Library-Path: " + System.getProperty("java.library.path")); this.processAndExit = true; } } } } private void checkProperties(){ for(int i = 0;i < this.arguments.length;i++){ int indexKey = this.arguments[i].indexOf("-D"); int indexValue = this.arguments[i].indexOf("="); if(indexKey == 0 && indexValue > indexKey && (indexValue + 1) < this.arguments[i].length() ){ String key = this.arguments[i].substring(2, indexValue); String value = this.arguments[i].substring( indexValue + 1 ); if( key != null && key.length() > 0 && value != null && value.length() > 0){ System.setProperty( key, value); } } } } private void checkURL(){ String propertyUrl = System.getProperty(TG_DEFAULT_URL); if( propertyUrl != null && makeURL( propertyUrl ) ){ return; } for(int i = 0;i < this.arguments.length;i++){ if(makeURL(this.arguments[i])){ return; } } } private boolean makeURL(String spec){ try{ File file = new File(spec); if(file.exists()){ this.url = file.toURI().toURL(); }else{ this.url = new URL(spec); } }catch(Throwable throwable){ this.url = null; } return (this.url != null); } public boolean processAndExit(){ return this.processAndExit; } public URL getURL() { return this.url; } protected void print(String s){ print(s, true); } protected void print(String s, boolean ignoreNull){ if(!ignoreNull || s != null){ System.out.println( s ); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/ConfirmDialog.java0000644000175000017500000000640711273045224027303 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; public class ConfirmDialog { public static int BUTTON_CANCEL = 0x01; public static int BUTTON_YES = 0x02; public static int BUTTON_NO = 0x04; public static int STATUS_YES = 1; public static int STATUS_NO = 2; public static int STATUS_CANCEL = 3; protected Shell dialog; protected int status; private String message; public ConfirmDialog(String message){ this.message = message; } public int confirm(int style, int defaultButton){ Shell parent = TuxGuitar.instance().getShell(); this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout(1, true)); //======================================================================== Composite labelComposite = new Composite(this.dialog, SWT.NONE); labelComposite.setLayout(new GridLayout(2, false)); labelComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Label icon = new Label(labelComposite, SWT.NONE); Label message = new Label(labelComposite, SWT.NONE); icon.setImage(parent.getDisplay().getSystemImage(SWT.ICON_QUESTION)); message.setText(this.message); //======================================================================== GridLayout buttonsLayout = new GridLayout(0,false); Composite buttonsComposite = new Composite(this.dialog, SWT.NONE); buttonsComposite.setLayout(buttonsLayout); buttonsComposite.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); if((style & BUTTON_YES)!= 0){ addCloseButton(TuxGuitar.getProperty("yes"),STATUS_YES,buttonsComposite, (defaultButton == BUTTON_YES) ); buttonsLayout.numColumns ++; } if((style & BUTTON_NO)!= 0){ addCloseButton(TuxGuitar.getProperty("no"),STATUS_NO,buttonsComposite, (defaultButton == BUTTON_NO) ); buttonsLayout.numColumns ++; } if((style & BUTTON_CANCEL)!= 0){ addCloseButton(TuxGuitar.getProperty("cancel"),STATUS_CANCEL,buttonsComposite, (defaultButton == BUTTON_CANCEL) ); buttonsLayout.numColumns ++; } DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.status; } private void addCloseButton(String text,final int value,Composite parent, boolean defaultButton){ Button button = new Button(parent, SWT.PUSH); button.setLayoutData(getButtonData()); button.setText(text); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { ConfirmDialog.this.dialog.dispose(); ConfirmDialog.this.status = value; } }); if(defaultButton){ this.dialog.setDefaultButton(button); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } public void setDefaultStatus(int status){ this.status = status; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/DialogUtils.java0000644000175000017500000000347611273045224027011 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.actions.ActionLock; public class DialogUtils { public static final int OPEN_STYLE_WAIT = 0x01; public static final int OPEN_STYLE_PACK = 0x02; public static final int OPEN_STYLE_LAYOUT = 0x04; public static final int OPEN_STYLE_CENTER = 0x08; public static final int OPEN_STYLE_MAXIMIZED = 0x10; public static final Shell newDialog(Display display,int style){ return new Shell(display, style); } public static final Shell newDialog(Shell parent,int style){ parent.setCursor(parent.getDisplay().getSystemCursor(SWT.CURSOR_WAIT)); return new Shell(parent, style); } public static final void openDialog(Shell dialog,int style){ DialogUtils.openDialog(dialog,dialog.getParent().getShell(),style); } public static final void openDialog(Shell dialog,Shell parent,int style){ Display display = dialog.getDisplay(); if((style & OPEN_STYLE_PACK) != 0){ dialog.pack(); } if((style & OPEN_STYLE_LAYOUT) != 0){ dialog.layout(); } if((style & OPEN_STYLE_MAXIMIZED) != 0){ dialog.setMaximized(true); } else if((style & OPEN_STYLE_CENTER) != 0){ int x = Math.max(0,parent.getBounds().x + (parent.getBounds().width - dialog.getSize().x) / 2); int y = Math.max(0,parent.getBounds().y + (parent.getBounds().height - dialog.getSize().y) / 2); dialog.setLocation(x,y); } dialog.open(); parent.setCursor(display.getSystemCursor(SWT.CURSOR_ARROW)); if((style & OPEN_STYLE_WAIT) != 0){ if( (dialog.getStyle() & SWT.APPLICATION_MODAL) == 0 ){ ActionLock.unlock(); } while (!display.isDisposed() && !dialog.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/FileChooser.java0000644000175000017500000001245111273045224026764 0ustar julianjulian/* * Created on 08-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.util; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatManager; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class FileChooser { public static final String DEFAULT_OPEN_FILENAME = null; public static final String DEFAULT_SAVE_FILENAME = ("Untitled" + TGFileFormatManager.DEFAULT_EXTENSION); public static TGFileFormat ALL_FORMATS = new TGFileFormat("All Files","*.*"); private static FileChooser instance; public static FileChooser instance() { if(instance == null){ instance = new FileChooser(); } return instance; } private List list(Object o){ List list = new ArrayList(); list.add(o); return list; } public String open(Shell parent,TGFileFormat format) { return open(parent, list(format)); } public String open(Shell parent,List formats) { String currentPath = TuxGuitar.instance().getFileHistory().getCurrentFilePath(); String chooserPath = TuxGuitar.instance().getFileHistory().getOpenPath(); boolean localFile = TuxGuitar.instance().getFileHistory().isLocalFile(); boolean existentFile = (localFile && currentPath != null && chooserPath != null && currentPath.equals(chooserPath)); FilterList filter = new FilterList(formats); FileDialog dialog = new FileDialog(parent,SWT.OPEN); dialog.setFileName((existentFile ? getFileName(formats, DEFAULT_OPEN_FILENAME, false) : null )); dialog.setFilterPath(chooserPath); dialog.setFilterNames(filter.getFilterNames()); dialog.setFilterExtensions(filter.getFilterExtensions()); return openDialog(dialog); } public String save(Shell parent,TGFileFormat format) { return save(parent, list(format)); } public String save(Shell parent,List formats) { String chooserPath = TuxGuitar.instance().getFileHistory().getSavePath(); FilterList filter = new FilterList(formats); FileDialog dialog = new FileDialog(parent,SWT.SAVE); dialog.setFileName(getFileName(formats, DEFAULT_SAVE_FILENAME, true)); dialog.setFilterPath(chooserPath); dialog.setFilterNames(filter.getFilterNames()); dialog.setFilterExtensions(filter.getFilterExtensions()); return openDialog(dialog); } private String openDialog(FileDialog dialog){ String path = dialog.open(); if(path != null){ File file = new File(path); File parent = file.getParentFile(); if( parent != null && parent.exists() && parent.isDirectory() ){ TuxGuitar.instance().getFileHistory().setChooserPath( parent.getAbsolutePath() ); } } return path; } private String getFileName(List formats, String defaultName, boolean replaceExtension){ if(formats == null || formats.isEmpty()){ return defaultName; } String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(defaultName); if(file != null && file.length() > 0){ int index = file.lastIndexOf('.'); if(index > 0){ String fileName = file.substring(0,index); String fileExtension = file.substring(index).toLowerCase(); Iterator it = formats.iterator(); while(it.hasNext()){ TGFileFormat format = (TGFileFormat)it.next(); if(format.getSupportedFormats() != null){ String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR); if(extensions != null && extensions.length > 0){ for(int i = 0; i < extensions.length; i ++){ if(extensions[i].equals("*" + fileExtension)){ return file; } } } } } if( replaceExtension ){ TGFileFormat format = (TGFileFormat)formats.get(0); if(format.getSupportedFormats() != null){ String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR); if(extensions != null && extensions.length > 0){ if(extensions[0].length() > 1){ return (fileName + extensions[0].substring(1)); } } } } } } return defaultName; } private class FilterList{ private String[] filterExtensions; private String[] filterNames; public FilterList(List formats) { int size = (formats.size() + 2); this.filterNames = new String[size]; this.filterExtensions = new String[size]; this.filterNames[0] = new String("All Supported Formats"); this.filterExtensions[0] = new String(); for(int i = 1; i < (size - 1); i ++){ TGFileFormat format = (TGFileFormat)formats.get(i-1); this.filterNames[i] = format.getName(); this.filterExtensions[i] = format.getSupportedFormats(); this.filterExtensions[0] += (i > 1)?";":""; this.filterExtensions[0] += format.getSupportedFormats(); } this.filterNames[(size - 1)] = new String("All Files"); this.filterExtensions[(size - 1)] = new String("*.*"); } public String[] getFilterExtensions() { return this.filterExtensions; } public String[] getFilterNames() { return this.filterNames; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/ImageUtils.java0000644000175000017500000000312311273045224026621 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; import org.eclipse.swt.graphics.PaletteData; import org.eclipse.swt.graphics.RGB; public class ImageUtils { /** * Escribe el ImageData en el outputStream * @param data * @param outputStream * @param format */ public static void writeImage(ImageData data,OutputStream outputStream,int format){ ImageLoader loader = new ImageLoader(); loader.data = new ImageData[]{data}; loader.save(outputStream,format); } /** * Convierte un ImageData en un array de bytes * @param data * @param format * @return */ public static byte[] imageToByteArray(ImageData data,int format){ ByteArrayOutputStream out = new ByteArrayOutputStream(); writeImage(data,out,format); return out.toByteArray(); } /** * Crea una mascara a partir de src. * * @param src * @param alpha * @param none * @return ImageData */ public static ImageData applyMask(ImageData src,RGB alpha,RGB none){ ImageData maskData = new ImageData(src.width,src.height,1,new PaletteData(new RGB[]{ none,alpha } )); for(int x = 0; x< maskData.width; x++) { for(int y = 0; y < maskData.height; y++) { RGB rgb = src.palette.getRGB(src.getPixel(x, y)); if(rgb.red == alpha.red && rgb.green == alpha.green && rgb.blue == alpha.blue){ maskData.setPixel(x, y, maskData.palette.getPixel(none)); }else{ maskData.setPixel(x, y, maskData.palette.getPixel(alpha)); } } } return maskData; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/MessageDialog.java0000644000175000017500000000453711273045224027274 0ustar julianjulian/* * Created on 20-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.util; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.helper.SyncThread; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MessageDialog { private int style; private String name; private String message; protected MessageDialog(String name,String message,int style){ this.name = name; this.message = message; this.style = style; } protected void show(Shell parent){ MessageBox messageBox = new MessageBox(parent, this.style); messageBox.setText(this.name); messageBox.setMessage(this.message); messageBox.open(); } public static void infoMessage(final String title,final String message){ MessageDialog.infoMessage(TuxGuitar.instance().getShell(), title, message); } public static void infoMessage(final Shell shell,final String title,final String message){ new SyncThread(new Runnable() { public void run() { if(!shell.isDisposed()){ new MessageDialog(title,message,SWT.ICON_INFORMATION).show(shell); } } }).start(); } public static void errorMessage(final Throwable throwable){ MessageDialog.errorMessage(TuxGuitar.instance().getShell(),throwable); } public static void errorMessage(final Shell shell,final Throwable throwable){ MessageDialog.errorMessage(shell, (throwable.getMessage() != null ? throwable.getMessage() : throwable.getClass().getName() )); new Thread(new Runnable() { public void run() { throwable.printStackTrace(); } }).start(); } public static void errorMessage(final Shell shell,final String message){ if(!shell.isDisposed()){ new SyncThread(new Runnable() { public void run() { if(!shell.isDisposed()){ ActionLock.unlock(); TuxGuitar.instance().unlock(); shell.setCursor(shell.getDisplay().getSystemCursor(SWT.CURSOR_ARROW)); new MessageDialog(TuxGuitar.getProperty("error"),message,SWT.ICON_ERROR).show(shell); } } }).start(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/MidiTickUtil.java0000644000175000017500000000414611273045224027117 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.player.base.MidiRepeatController; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGMeasureHeader; public class MidiTickUtil { public static long getStart(long tick){ long startPoint = getStartPoint(); long start = startPoint; long length = 0; TGSongManager manager = TuxGuitar.instance().getSongManager(); MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() ); while(!controller.finished()){ TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex()); controller.process(); if(controller.shouldPlay()){ start += length; length = header.getLength(); //verifico si es el compas correcto if(tick >= start && tick < (start + length )){ return header.getStart() + (tick - start); } } } return ( tick < startPoint ? startPoint : start ); } public static long getTick(long start){ long startPoint = getStartPoint(); long tick = startPoint; long length = 0; TGSongManager manager = TuxGuitar.instance().getSongManager(); MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() ); while(!controller.finished()){ TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex()); controller.process(); if(controller.shouldPlay()){ tick += length; length = header.getLength(); //verifico si es el compas correcto if(start >= header.getStart() && start < (header.getStart() + length )){ return tick; } } } return ( start < startPoint ? startPoint : tick ); } private static long getStartPoint(){ TuxGuitar.instance().getPlayer().updateLoop( false ); return TuxGuitar.instance().getPlayer().getLoopSPosition(); } public static int getSHeader() { return TuxGuitar.instance().getPlayer().getLoopSHeader(); } public static int getEHeader() { return TuxGuitar.instance().getPlayer().getLoopEHeader(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGFileUtils.java0000644000175000017500000001627411273045224026724 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Vector; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.util.TGClassLoader; import org.herac.tuxguitar.util.TGLibraryLoader; import org.herac.tuxguitar.util.TGVersion; public class TGFileUtils { private static final String TG_CONFIG_PATH = "tuxguitar.config.path"; private static final String TG_SHARE_PATH = "tuxguitar.share.path"; private static final String TG_CLASS_PATH = "tuxguitar.class.path"; private static final String TG_LIBRARY_PATH = "tuxguitar.library.path"; private static final String TG_LIBRARY_PREFIX = "tuxguitar.library.prefix"; private static final String TG_LIBRARY_EXTENSION = "tuxguitar.library.extension"; public static final String PATH_USER_CONFIG = getUserConfigDir(); public static final String PATH_USER_PLUGINS_CONFIG = getUserPluginsConfigDir(); public static final String[] TG_STATIC_SHARED_PATHS = getStaticSharedPaths(); public static InputStream getResourceAsStream(String resource) { try { if(TG_STATIC_SHARED_PATHS != null){ for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){ File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource); if( file.exists() ){ return new FileInputStream( file ); } } } return TGClassLoader.instance().getClassLoader().getResourceAsStream(resource); }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public static URL getResourceUrl(String resource) { try { if(TG_STATIC_SHARED_PATHS != null){ for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){ File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource); if( file.exists() ){ return file.toURI().toURL(); } } } return TGClassLoader.instance().getClassLoader().getResource(resource); }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public static Enumeration getResourceUrls(String resource) { try { Vector vector = new Vector(); if(TG_STATIC_SHARED_PATHS != null){ for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){ File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource); if( file.exists() ){ vector.addElement( file.toURI().toURL() ); } } } Enumeration resources = TGClassLoader.instance().getClassLoader().getResources(resource); while( resources.hasMoreElements() ){ URL url = (URL)resources.nextElement(); if( !vector.contains(url) ){ vector.addElement( url ); } } return vector.elements(); }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } private static String getResourcePath(String resource) { try { if(TG_STATIC_SHARED_PATHS != null){ for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){ File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource); if( file.exists() ){ return file.getAbsolutePath() + File.separator; } } } URL url = TGClassLoader.instance().getClassLoader().getResource(resource); if(url != null){ return new File(URLDecoder.decode(url.getPath(), "UTF-8")).getAbsolutePath() + File.separator; } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public static void loadClasspath(){ String plugins = getResourcePath("plugins"); if(plugins != null){ TGClassLoader.instance().addPaths(new File(plugins)); } String custompath = System.getProperty(TG_CLASS_PATH); if(custompath != null){ String[] paths = custompath.split(File.pathSeparator); for(int i = 0; i < paths.length; i++){ TGClassLoader.instance().addPaths(new File(paths[i])); } } } public static void loadLibraries(){ String libraryPath = System.getProperty(TG_LIBRARY_PATH); if(libraryPath != null){ String[] libraryPaths = libraryPath.split(File.pathSeparator); String libraryPrefix = System.getProperty(TG_LIBRARY_PREFIX); String libraryExtension = System.getProperty(TG_LIBRARY_EXTENSION); for(int i = 0; i < libraryPaths.length; i++){ TGLibraryLoader.instance().loadLibraries(new File(libraryPaths[i]),libraryPrefix,libraryExtension); } } } public static String[] getFileNames( String resource ){ try { String path = getResourcePath(resource); if( path != null ){ File file = new File( path ); if(file.exists() && file.isDirectory()){ return file.list(); } } InputStream stream = getResourceAsStream(resource + "/list.properties" ); if( stream != null ){ BufferedReader reader = new BufferedReader( new InputStreamReader(stream) ); List fileNameList = new ArrayList(); String fileName = null; while( (fileName = reader.readLine()) != null ){ fileNameList.add( fileName ); } String[] fileNames = new String[ fileNameList.size() ]; for (int i = 0 ; i < fileNames.length ; i ++ ){ fileNames[ i ] = (String)fileNameList.get( i ); } return fileNames; } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public static Image loadImage(String name){ return loadImage(TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.SKIN),name); } public static Image loadImage(String skin,String name){ try{ InputStream stream = getResourceAsStream("skins/" + skin + "/" + name); if(stream != null){ return new Image(TuxGuitar.instance().getDisplay(),new ImageData(stream)); } System.err.println(name + ": not found"); }catch(Throwable throwable){ throwable.printStackTrace(); } return new Image(TuxGuitar.instance().getDisplay(),16,16); } public static boolean isLocalFile(URL url){ try { if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){ return true; } }catch(Throwable throwable){ throwable.printStackTrace(); } return false; } private static String getUserConfigDir(){ // Look for the system property String configPath = System.getProperty(TG_CONFIG_PATH); // Default System User Home if(configPath == null){ configPath = ( (System.getProperty("user.home") + File.separator + ".tuxguitar-" + TGVersion.CURRENT.getVersion()) ) ; } // Check if the path exists File file = new File(configPath); if(!file.exists()){ file.mkdirs(); } return configPath; } private static String getUserPluginsConfigDir(){ String configPluginsPath = (getUserConfigDir() + File.separator + "plugins"); //Check if the path exists File file = new File(configPluginsPath); if(!file.exists()){ file.mkdirs(); } return configPluginsPath; } private static String[] getStaticSharedPaths(){ String staticSharedPaths = System.getProperty(TG_SHARE_PATH); if( staticSharedPaths != null ){ return staticSharedPaths.split(File.pathSeparator); } return null; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGMusicKeyUtils.java0000644000175000017500000000540111273045224027564 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.language.LanguageLoader; public class TGMusicKeyUtils { public static final String PREFIX_CHORD = "chord"; public static final String PREFIX_SCALE = "scale"; public static final String PREFIX_TUNING = "tuning"; public static final String PREFIX_FRETBOARD = "fretboard"; public static final String PREFIX_MATRIX = "matrix"; private static final String[][] DEFAULT_KEY_NAMES = new String[][]{ {"C","C#","Cb"}, {"D","D#","Db"}, {"E","E#","Eb"}, {"F","F#","Fb"}, {"G","G#","Gb"}, {"A","A#","Ab"}, {"B","B#","Bb"} }; public static String[] getSharpKeyNames(String prefix){ return new TGMusicKeyNames(true,prefix).getNames(); } public static String[] getFlatKeyNames(String prefix){ return new TGMusicKeyNames(false,prefix).getNames(); } protected static void loadKeyNames(String[] names,String prefix,boolean sharp){ if(sharp){ loadSharpKeyNames(names, prefix); }else{ loadFlatKeyNames(names, prefix); } } private static void loadSharpKeyNames(String[] names,String prefix){ names[0] = getName(prefix,0,0); names[1] = getName(prefix,0,1); names[2] = getName(prefix,1,0); names[3] = getName(prefix,1,1); names[4] = getName(prefix,2,0); names[5] = getName(prefix,3,0); names[6] = getName(prefix,3,1); names[7] = getName(prefix,4,0); names[8] = getName(prefix,4,1); names[9] = getName(prefix,5,0); names[10] = getName(prefix,5,1); names[11] = getName(prefix,6,0); } private static void loadFlatKeyNames(String[] names,String prefix){ names[0] = getName(prefix,0,0); names[1] = getName(prefix,1,2); names[2] = getName(prefix,1,0); names[3] = getName(prefix,2,2); names[4] = getName(prefix,2,0); names[5] = getName(prefix,3,0); names[6] = getName(prefix,4,2); names[7] = getName(prefix,4,0); names[8] = getName(prefix,5,2); names[9] = getName(prefix,5,0); names[10] = getName(prefix,6,2); names[11] = getName(prefix,6,0); } private static String getName(String prefix,int key,int signature){ String resource = ("key." + prefix + "." + key + "." + signature); return TuxGuitar.instance().getLanguageManager().getProperty(resource,DEFAULT_KEY_NAMES[key][signature]); } } class TGMusicKeyNames implements LanguageLoader{ private boolean sharp; private String prefix; private String[] names; public TGMusicKeyNames(boolean sharp,String prefix){ this.sharp = sharp; this.prefix = prefix; this.names = new String[12]; this.loadProperties(); TuxGuitar.instance().getLanguageManager().addLoader(this); } public String[] getNames(){ return this.names; } public void loadProperties() { TGMusicKeyUtils.loadKeyNames(this.names, this.prefix, this.sharp); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGSplash.java0000644000175000017500000000377211273045224026255 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; public class TGSplash { private static TGSplash instance; private Shell shell; private TGSplash(){ super(); } public static TGSplash instance(){ if(instance == null){ instance = new TGSplash(); } return instance; } public void init() { if(TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.SHOW_SPLASH)){ final Image image = TuxGuitar.instance().getIconManager().getAppSplash(); this.shell = new Shell(TuxGuitar.instance().getDisplay(), SWT.NO_TRIM | SWT.NO_BACKGROUND); this.shell.setLayout(new FillLayout()); this.shell.setBounds(getBounds(image)); this.shell.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.shell.setText(TuxGuitar.APPLICATION_NAME); this.shell.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); painter.drawImage(image, 0, 0); } }); this.shell.open(); this.shell.redraw(); this.shell.update(); } } public void finish(){ if(this.shell != null && !this.shell.isDisposed()){ this.shell.close(); this.shell.dispose(); } instance = null; } private Rectangle getBounds(Image image){ Rectangle iBounds = image.getBounds(); Rectangle mBounds = this.shell.getMonitor().getClientArea(); int x = ( ((mBounds.x + mBounds.width) / 2) - (iBounds.width / 2) ); int y = ( ((mBounds.y + mBounds.height) / 2) - (iBounds.height / 2) ); int width = iBounds.width; int height = iBounds.height; return new Rectangle( x , y , width , height); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/util/WindowTitleUtil.java0000644000175000017500000000563011273045224027672 0ustar julianjulianpackage org.herac.tuxguitar.gui.util; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.util.TGVersion; public class WindowTitleUtil { private static final String VAR_START = "${"; private static final String VAR_END = "}"; public static final String VAR_APP_NAME = "appname"; public static final String VAR_APP_VERSION = "appversion"; public static final String VAR_FILE_NAME = "filename"; public static final String VAR_FILE_PATH = "filepath"; public static final String VAR_SONG_NAME = "songname"; public static final String VAR_SONG_AUTHOR = "songauthor"; public static final String VAR_SONG_ALBUM = "songalbum"; public static final String VAR_SONG_ARTIST = "songartist"; public static String parseTitle(){ String title = parseString(TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.WINDOW_TITLE)); return ((title == null)?TuxGuitar.APPLICATION_NAME:title); } private static String parseString(String src){ try{ if(src != null){ String result = new String(); for(int pos = 0; pos < src.length(); pos ++){ int startIndex = src.indexOf(VAR_START, pos ); int endIndex = startIndex; if(startIndex >= 0){ endIndex = src.indexOf(VAR_END,(startIndex + VAR_START.length())); } if((startIndex >= 0) && endIndex > (startIndex + VAR_START.length()) ){ if(startIndex > pos){ result += src.substring(pos,startIndex ); } String var = src.substring(startIndex,(endIndex + 1)); result += parseVar(var); pos = endIndex; }else{ result += src.substring(pos,src.length() ); break; } } return result; } }catch(Exception e){ e.printStackTrace(); } return null; } private static String parseVar(String var){ String varName = var.substring((VAR_START.length()),(var.length() - 1)); String varValue = var; if(varName.equals(VAR_APP_NAME)){ varValue = TuxGuitar.APPLICATION_NAME; }else if(varName.equals(VAR_APP_VERSION)){ varValue = TGVersion.CURRENT.getVersion(); }else if(varName.equals(VAR_FILE_NAME)){ varValue = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME); }else if(varName.equals(VAR_FILE_PATH)){ varValue = TuxGuitar.instance().getFileHistory().getCurrentFilePath(); }else if(varName.equals(VAR_SONG_NAME)){ varValue = TuxGuitar.instance().getSongManager().getSong().getName(); }else if(varName.equals(VAR_SONG_AUTHOR)){ varValue = TuxGuitar.instance().getSongManager().getSong().getAuthor(); }else if(varName.equals(VAR_SONG_ALBUM)){ varValue = TuxGuitar.instance().getSongManager().getSong().getAlbum(); }else if(varName.equals(VAR_SONG_ARTIST)){ varValue = TuxGuitar.instance().getSongManager().getSong().getArtist(); } return varValue; } public static String getVar(String varName){ return (VAR_START + varName + VAR_END); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormat.java0000644000175000017500000000070511273045225026625 0ustar julianjulianpackage org.herac.tuxguitar.io.base; public class TGFileFormat { public static final String EXTENSION_SEPARATOR = new String(";"); private String name; private String supportedFormats; public TGFileFormat(String name, String supportedFormats) { this.name = name; this.supportedFormats = supportedFormats; } public String getName() { return this.name; } public String getSupportedFormats() { return this.supportedFormats; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatException.java0000644000175000017500000000066211273045225030506 0ustar julianjulianpackage org.herac.tuxguitar.io.base; public class TGFileFormatException extends Exception{ private static final long serialVersionUID = 1L; public TGFileFormatException() { super(); } public TGFileFormatException(String message, Throwable cause) { super(message, cause); } public TGFileFormatException(String message) { super(message); } public TGFileFormatException(Throwable cause) { super(cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java0000644000175000017500000000705411273045225030124 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.tg.TGInputStream; import org.herac.tuxguitar.io.tg.TGOutputStream; import org.herac.tuxguitar.io.tg.TGStream; public class TGFileFormatManager { public static final String DEFAULT_EXTENSION = TGStream.TG_FORMAT_EXTENSION; private static TGFileFormatManager instance; private TGSongLoader loader; private TGSongWriter writer; private List inputStreams; private List outputStreams; private List exporters; private List importers; private TGFileFormatManager(){ this.loader = new TGSongLoader(); this.writer = new TGSongWriter(); this.inputStreams = new ArrayList(); this.outputStreams = new ArrayList(); this.exporters = new ArrayList(); this.importers = new ArrayList(); this.addDefaultStreams(); } public static TGFileFormatManager instance(){ if(instance == null){ instance = new TGFileFormatManager(); } return instance; } public TGSongLoader getLoader(){ return this.loader; } public TGSongWriter getWriter(){ return this.writer; } public void addInputStream(TGInputStreamBase stream){ this.inputStreams.add(stream); } public void removeInputStream(TGInputStreamBase stream){ this.inputStreams.remove(stream); } public int countInputStreams(){ return this.inputStreams.size(); } public void addOutputStream(TGOutputStreamBase stream){ this.outputStreams.add(stream); } public void removeOutputStream(TGOutputStreamBase stream){ this.outputStreams.remove(stream); } public int countOutputStreams(){ return this.outputStreams.size(); } public void addImporter(TGRawImporter importer){ this.importers.add(importer); } public void removeImporter(TGRawImporter importer){ this.importers.remove(importer); } public int countImporters(){ return this.importers.size(); } public void addExporter(TGRawExporter exporter){ this.exporters.add(exporter); } public void removeExporter(TGRawExporter exporter){ this.exporters.remove(exporter); } public int countExporters(){ return this.exporters.size(); } public Iterator getInputStreams(){ return this.inputStreams.iterator(); } public Iterator getOutputStreams(){ return this.outputStreams.iterator(); } public Iterator getImporters(){ return this.importers.iterator(); } public Iterator getExporters(){ return this.exporters.iterator(); } public List getInputFormats(){ List formats = new ArrayList(); Iterator it = getInputStreams(); while(it.hasNext()){ TGInputStreamBase stream = (TGInputStreamBase)it.next(); TGFileFormat format = stream.getFileFormat(); if(!existsFormat(format, formats)){ formats.add(format); } } return formats; } public List getOutputFormats(){ List formats = new ArrayList(); Iterator it = getOutputStreams(); while(it.hasNext()){ TGOutputStreamBase stream = (TGOutputStreamBase)it.next(); TGFileFormat format = stream.getFileFormat(); if(!existsFormat(format, formats)){ formats.add(format); } } return formats; } private boolean existsFormat(TGFileFormat format,List formats){ Iterator it = formats.iterator(); while(it.hasNext()){ TGFileFormat comparator = (TGFileFormat)it.next(); if(comparator.getName().equals(format.getName()) || comparator.getSupportedFormats().equals(format.getSupportedFormats())){ return true; } } return false; } private void addDefaultStreams(){ this.addInputStream(new TGInputStream()); this.addOutputStream(new TGOutputStream()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java0000644000175000017500000000067211273045225027646 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; public interface TGInputStreamBase { public void init(TGFactory factory,InputStream stream); public boolean isSupportedVersion(); public TGFileFormat getFileFormat(); public TGSong readSong() throws TGFileFormatException,IOException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGLocalFileExporter.java0000644000175000017500000000051711273045225030161 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import java.io.OutputStream; import org.herac.tuxguitar.song.factory.TGFactory; public interface TGLocalFileExporter extends TGRawExporter { public TGFileFormat getFileFormat(); public boolean configure(boolean setDefaults); public void init(TGFactory factory,OutputStream stream); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGLocalFileImporter.java0000644000175000017500000000051511273045225030150 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import java.io.InputStream; import org.herac.tuxguitar.song.factory.TGFactory; public interface TGLocalFileImporter extends TGRawImporter { public TGFileFormat getFileFormat(); public boolean configure(boolean setDefaults); public void init(TGFactory factory,InputStream stream); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java0000644000175000017500000000073111273045225030043 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import java.io.IOException; import java.io.OutputStream; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; public interface TGOutputStreamBase { public void init(TGFactory factory,OutputStream stream); public boolean isSupportedExtension(String extension); public TGFileFormat getFileFormat(); public void writeSong(TGSong song) throws TGFileFormatException,IOException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGRawExporter.java0000644000175000017500000000034011273045225027052 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import org.herac.tuxguitar.song.models.TGSong; public interface TGRawExporter { public String getExportName(); public void exportSong(TGSong song) throws TGFileFormatException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGRawImporter.java0000644000175000017500000000033111273045225027043 0ustar julianjulianpackage org.herac.tuxguitar.io.base; import org.herac.tuxguitar.song.models.TGSong; public interface TGRawImporter { public String getImportName(); public TGSong importSong() throws TGFileFormatException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGSongLoader.java0000644000175000017500000000240511273045225026631 0ustar julianjulian/* * Created on 19-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.base; import java.io.BufferedInputStream; import java.io.InputStream; import java.util.Iterator; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGSongLoader { public TGSongLoader(){ super(); } /** * @return TGSong * @throws TGFileFormatException */ public TGSong load(TGFactory factory,InputStream is) throws TGFileFormatException{ try{ BufferedInputStream stream = new BufferedInputStream(is); stream.mark(1); Iterator it = TGFileFormatManager.instance().getInputStreams(); while(it.hasNext()){ TGInputStreamBase reader = (TGInputStreamBase)it.next(); reader.init(factory,stream); if(reader.isSupportedVersion()){ return reader.readSong(); } stream.reset(); } stream.close(); }catch(Throwable t){ throw new TGFileFormatException(t); } throw new TGFileFormatException("Unsupported file format"); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/base/TGSongWriter.java0000644000175000017500000000264111273045225026701 0ustar julianjulian/* * Created on 19-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.base; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.Iterator; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGSongWriter { public TGSongWriter(){ super(); } public void write(TGFactory factory,TGSong song,String path) throws TGFileFormatException{ try { Iterator it = TGFileFormatManager.instance().getOutputStreams(); while(it.hasNext()){ TGOutputStreamBase writer = (TGOutputStreamBase)it.next(); if(isSupportedExtension(writer,path)){ writer.init(factory,new BufferedOutputStream(new FileOutputStream(new File(path)))); writer.writeSong(song); return; } } } catch (Throwable t) { throw new TGFileFormatException(t); } throw new TGFileFormatException("Unsupported file format"); } private boolean isSupportedExtension(TGOutputStreamBase writer,String path){ int index = path.lastIndexOf("."); if(index > 0){ return writer.isSupportedExtension(path.substring(index)); } return false; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGInputStream.java0000644000175000017500000004431511273045225026555 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGInputStream extends TGStream implements TGInputStreamBase{ private DataInputStream dataInputStream; private String version; private TGFactory factory; public TGInputStream() { super(); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.dataInputStream = new DataInputStream(stream); this.version = null; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean isSupportedVersion(String version){ return (version.equals(TG_FORMAT_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Throwable throwable){ return false; } } public TGSong readSong() throws TGFileFormatException{ try { if(this.isSupportedVersion()){ TGSong song = this.read(); this.dataInputStream.close(); return song; } throw new TGFileFormatException("Unsopported Version"); } catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private void readVersion(){ if(this.version == null){ this.version = readUnsignedByteString(); } } private TGSong read(){ TGSong song = this.factory.newSong(); //leo el nombre song.setName(readUnsignedByteString()); //leo el artista song.setArtist(readUnsignedByteString()); //leo el album song.setAlbum(readUnsignedByteString()); //leo el autor song.setAuthor(readUnsignedByteString()); //leo la fecha song.setDate(readUnsignedByteString()); //leo el copyright song.setCopyright(readUnsignedByteString()); //leo el creador song.setWriter(readUnsignedByteString()); //leo el transcriptor song.setTranscriber(readUnsignedByteString()); //leo los comentarios song.setComments(readIntegerString()); //leo la cantidad de measure headers int headerCount = readShort(); //leo las pistas TGMeasureHeader lastHeader = null; long headerStart = TGDuration.QUARTER_TIME; for(int i = 0;i < headerCount;i++){ TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader); song.addMeasureHeader(header); headerStart += header.getLength(); lastHeader = header; } //leo la cantidad de pistas int trackCount = readByte(); //leo las pistas for(int i = 0;i < trackCount;i++){ song.addTrack(readTrack(i + 1,song)); } return song; } private TGTrack readTrack(int number,TGSong song){ //header int header = readHeader(); TGTrack track = this.factory.newTrack(); track.setNumber(number); //leo el nombre track.setName(readUnsignedByteString()); //leo el solo track.setSolo((header & TRACK_SOLO) != 0); //leo el mute track.setMute((header & TRACK_MUTE) != 0); //leo el canal readChannel(track.getChannel()); //leo la cantidad de compases int measureCount = song.countMeasureHeaders(); //leo los compases TGMeasure lastMeasure = null; for(int i = 0;i < measureCount;i++){ TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure); track.addMeasure(measure); lastMeasure = measure; } //leo la cantidad de cuerdas int stringCount = readByte(); //leo las cuerdas for(int i = 0;i < stringCount;i++){ track.getStrings().add(readInstrumentString(i + 1)); } //leo el offset track.setOffset(TGTrack.MIN_OFFSET + readByte()); //leo el color readRGBColor(track.getColor()); //leo el lyrics if(((header & TRACK_LYRICS) != 0)){ readLyrics(track.getLyrics()); } return track; } private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){ int header = readHeader(); TGMeasureHeader measureHeader = this.factory.newHeader(); measureHeader.setNumber(number); measureHeader.setStart(start); //leo el time signature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ readTimeSignature(measureHeader.getTimeSignature()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature()); } //leo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ readTempo(measureHeader.getTempo()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTempo().copy(measureHeader.getTempo()); } //leo el comienzo de la repeticion measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0); //leo el numero de repeticiones if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){ measureHeader.setRepeatClose(readShort()); } //leo los finales alternativos if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){ measureHeader.setRepeatAlternative(readByte()); } //leo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ measureHeader.setMarker(readMarker(number)); } measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE); if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ measureHeader.setTripletFeel(readByte()); } return measureHeader; } private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){ int header = readHeader(); TGMeasure measure = this.factory.newMeasure(measureHeader); TGBeatData data = new TGBeatData(measure); //leo la los beats readBeats(measure, data); //leo la clave measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef()); if(((header & MEASURE_CLEF) != 0)){ measure.setClef(readByte()); } //leo el key signature measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature()); if(((header & MEASURE_KEYSIGNATURE) != 0)){ measure.setKeySignature(readByte()); } return measure; } private void readChannel(TGChannel channel){ //leo el canal channel.setChannel(readByte()); //leo el canal de efectos channel.setEffectChannel(readByte()); //leo el instrumento channel.setInstrument(readByte()); //leo el volumen channel.setVolume(readByte()); //leo el balance channel.setBalance(readByte()); //leo el chorus channel.setChorus(readByte()); //leo el reverb channel.setReverb(readByte()); //leo el phaser channel.setPhaser(readByte()); //leo el tremolo channel.setTremolo(readByte()); } private void readBeats(TGMeasure measure,TGBeatData data){ int header = BEAT_HAS_NEXT; while(((header & BEAT_HAS_NEXT) != 0)){ header = readHeader(); readBeat(header, measure, data); } } private void readBeat(int header, TGMeasure measure,TGBeatData data){ TGBeat beat = this.factory.newBeat(); beat.setStart(data.getCurrentStart()); readVoices(header, beat, data); //leo el stroke if(((header & BEAT_HAS_STROKE) != 0)){ readStroke(beat.getStroke()); } //leo el acorde if(((header & BEAT_HAS_CHORD) != 0)){ readChord(beat); } //leo el texto if(((header & BEAT_HAS_TEXT) != 0)){ readText(beat); } measure.addBeat(beat); } private void readVoices(int header, TGBeat beat, TGBeatData data){ for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){ int shift = (i * 2 ); beat.getVoice(i).setEmpty(true); if(((header & (BEAT_HAS_VOICE << shift)) != 0)){ if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){ data.getVoice(i).setFlags( readHeader() ); } int flags = data.getVoice(i).getFlags(); //leo la duracion if(((flags & VOICE_NEXT_DURATION) != 0)){ readDuration(data.getVoice(i).getDuration()); } //leo las notas if(((flags & VOICE_HAS_NOTES) != 0)){ readNotes(beat.getVoice(i), data); } //leo la direccion if(((flags & VOICE_DIRECTION_UP) != 0)){ beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP ); } else if(((flags & VOICE_DIRECTION_DOWN) != 0)){ beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN ); } data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration()); data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime()); beat.getVoice(i).setEmpty(false); } } } private void readNotes(TGVoice voice,TGBeatData data){ int header = NOTE_HAS_NEXT; while(((header & NOTE_HAS_NEXT) != 0)){ header = readHeader(); readNote(header, voice, data); } } private void readNote(int header,TGVoice voice,TGBeatData data){ TGNote note = this.factory.newNote(); //leo el valor note.setValue(readByte()); //leo la cuerda note.setString(readByte()); //leo la ligadura note.setTiedNote((header & NOTE_TIED) != 0); //leo el velocity if(((header & NOTE_VELOCITY) != 0)){ data.getVoice(voice.getIndex()).setVelocity(readByte()); } note.setVelocity(data.getVoice(voice.getIndex()).getVelocity()); //leo los efectos if(((header & NOTE_EFFECT) != 0)){ readNoteEffect(note.getEffect()); } voice.addNote(note); } private void readChord(TGBeat beat){ TGChord chord = this.factory.newChord(readByte()); //leo el nombre chord.setName( readUnsignedByteString() ); //leo el primer fret chord.setFirstFret(readByte()); //leo las cuerdas for(int string = 0; string < chord.countStrings(); string ++){ chord.addFretValue(string, readByte()); } beat.setChord(chord); } private void readText(TGBeat beat){ TGText text = this.factory.newText(); //leo el texto text.setValue(readUnsignedByteString()); beat.setText(text); } private TGString readInstrumentString(int number){ TGString string = this.factory.newString(); string.setNumber(number); //leo el valor string.setValue(readByte()); return string; } private void readTempo(TGTempo tempo){ //leo el valor tempo.setValue(readShort()); } private void readTimeSignature(TGTimeSignature timeSignature){ //leo el numerador timeSignature.setNumerator(readByte()); //leo el denominador readDuration(timeSignature.getDenominator()); } private void readDuration(TGDuration duration){ int header = readHeader(); // leo el puntillo duration.setDotted((header & DURATION_DOTTED) != 0); //leo el doble puntillo duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0); //leo el valor duration.setValue(readByte()); //leo el tipo de divisiones if(((header & DURATION_NO_TUPLET) != 0)){ readDivisionType(duration.getDivision()); } else{ TGDivisionType.NORMAL.copy(duration.getDivision()); } } private void readDivisionType(TGDivisionType divisionType){ //leo los enters divisionType.setEnters(readByte()); //leo los tiempos divisionType.setTimes(readByte()); } private void readStroke(TGStroke stroke){ //leo la direccion stroke.setDirection( readByte() ); //leo el valor stroke.setValue( readByte() ); } private void readNoteEffect(TGNoteEffect effect){ int header = readHeader(3); //leo el bend if(((header & EFFECT_BEND) != 0)){ effect.setBend(readBendEffect()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ effect.setTremoloBar(readTremoloBarEffect()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ effect.setHarmonic(readHarmonicEffect()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ effect.setGrace(readGraceEffect()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ effect.setTrill(readTrillEffect()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ effect.setTremoloPicking(readTremoloPickingEffect()); } //vibrato effect.setVibrato(((header & EFFECT_VIBRATO) != 0)); //dead note effect.setDeadNote(((header & EFFECT_DEAD) != 0)); //slide effect.setSlide(((header & EFFECT_SLIDE) != 0)); //hammer-on/pull-off effect.setHammer(((header & EFFECT_HAMMER) != 0)); //ghost note effect.setGhostNote(((header & EFFECT_GHOST) != 0)); //accentuated note effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0)); //heavy accentuated note effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0)); //palm mute effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0)); //staccato effect.setStaccato(((header & EFFECT_STACCATO) != 0)); //tapping effect.setTapping(((header & EFFECT_TAPPING) != 0)); //slapping effect.setSlapping(((header & EFFECT_SLAPPING) != 0)); //popping effect.setPopping(((header & EFFECT_POPPING) != 0)); //fade in effect.setFadeIn(((header & EFFECT_FADE_IN) != 0)); } private TGEffectBend readBendEffect(){ TGEffectBend bend = this.factory.newEffectBend(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = readByte(); //agrego el punto bend.addPoint(position,value); } return bend; } private TGEffectTremoloBar readTremoloBarEffect(){ TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH); //agrego el punto tremoloBar.addPoint(position,value); } return tremoloBar; } private TGEffectHarmonic readHarmonicEffect(){ TGEffectHarmonic effect = this.factory.newEffectHarmonic(); //leo el tipo effect.setType(readByte()); //leo la data if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){ effect.setData(readByte()); } return effect; } private TGEffectGrace readGraceEffect(){ int header = readHeader(); TGEffectGrace effect = this.factory.newEffectGrace(); effect.setDead((header & GRACE_FLAG_DEAD) != 0) ; effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ; //leo el fret effect.setFret(readByte()); //leo la duracion effect.setDuration(readByte()); //leo el velocity effect.setDynamic(readByte()); //leo la transicion effect.setTransition(readByte()); return effect; } private TGEffectTremoloPicking readTremoloPickingEffect(){ TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking(); //leo la duracion effect.getDuration().setValue(readByte()); return effect; } private TGEffectTrill readTrillEffect(){ TGEffectTrill effect = this.factory.newEffectTrill(); //leo el fret effect.setFret(readByte()); //leo la duracion effect.getDuration().setValue(readByte()); return effect; } private TGMarker readMarker(int measure){ TGMarker marker = this.factory.newMarker(); marker.setMeasure(measure); //leo el titulo marker.setTitle(readUnsignedByteString()); //leo el color readRGBColor(marker.getColor()); return marker; } private void readRGBColor(TGColor color){ //leo el RGB color.setR((readByte() & 0xff)); color.setG((readByte() & 0xff)); color.setB((readByte() & 0xff)); } private void readLyrics(TGLyric lyrics){ //leo el compas de comienzo lyrics.setFrom(readShort()); //leo el texto lyrics.setLyrics(readIntegerString()); } private byte readByte(){ try { return (byte)this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(int bCount){ int header = 0; for(int i = bCount; i > 0; i --){ header += ( readHeader() << ( (8 * i) - 8 ) ); } return header; } private short readShort(){ try { return this.dataInputStream.readShort(); } catch (IOException e) { e.printStackTrace(); } return 0; } private String readUnsignedByteString(){ try { return readString( (this.dataInputStream.read() & 0xFF )); } catch (IOException e) { e.printStackTrace(); } return null; } private String readIntegerString(){ try { return readString(this.dataInputStream.readInt()); } catch (IOException e) { e.printStackTrace(); } return null; } private String readString(int length){ try { char[] chars = new char[length]; for(int i = 0;i < chars.length; i++){ chars[i] = this.dataInputStream.readChar(); } return String.copyValueOf(chars); } catch (IOException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGOutputStream.java0000644000175000017500000004660711273045225026764 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGOutputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGOutputStream extends TGStream implements TGOutputStreamBase{ private DataOutputStream dataOutputStream; public boolean isSupportedExtension(String extension) { return (extension.toLowerCase().equals(TG_FORMAT_EXTENSION)); } public void init(TGFactory factory,OutputStream stream) { this.dataOutputStream = new DataOutputStream(stream); } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public void writeSong(TGSong song) throws IOException{ this.writeVersion(); this.write(song); this.dataOutputStream.flush(); this.dataOutputStream.close(); } private void writeVersion(){ writeUnsignedByteString(TG_FORMAT_VERSION); } private void write(TGSong song){ //escribo el nombre writeUnsignedByteString(song.getName()); //escribo el artista writeUnsignedByteString(song.getArtist()); //escribo el album writeUnsignedByteString(song.getAlbum()); //escribo el autor writeUnsignedByteString(song.getAuthor()); //escribo la fecha writeUnsignedByteString(song.getDate()); //escribo el copyright writeUnsignedByteString(song.getCopyright()); //escribo el creador writeUnsignedByteString(song.getWriter()); //escribo el transcriptor writeUnsignedByteString(song.getTranscriber()); //escribo los comentarios writeIntegerString(song.getComments()); //escribo la cantidad de measure headers writeShort((short)song.countMeasureHeaders()); //escribo las pistas TGMeasureHeader lastHeader = null; Iterator headers = song.getMeasureHeaders(); while(headers.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)headers.next(); writeMeasureHeader(header,lastHeader); lastHeader = header; } //escribo la cantidad de pistas writeByte(song.countTracks()); //escribo las pistas for(int i = 0;i < song.countTracks();i++){ TGTrack track = song.getTrack(i); writeTrack(track); } } private void writeTrack(TGTrack track){ //header int header = 0; if (track.isSolo()) { header |= TRACK_SOLO; } if (track.isMute()) { header |= TRACK_MUTE; } if(!track.getLyrics().isEmpty()){ header |= TRACK_LYRICS; } writeHeader(header); //escribo el nombre writeUnsignedByteString(track.getName()); //escribo el canal writeChannel(track.getChannel()); //escribo los compases TGMeasure lastMeasure = null; Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasure measure = (TGMeasure)measures.next(); writeMeasure(measure,lastMeasure); lastMeasure = measure; } //escribo la cantidad de cuerdas writeByte(track.getStrings().size()); //escribo las cuerdas Iterator stringIt = track.getStrings().iterator(); while(stringIt.hasNext()){ TGString string = (TGString)stringIt.next(); writeInstrumentString(string); } //escribo el offset writeByte(track.getOffset() - TGTrack.MIN_OFFSET); //escribo el color writeRGBColor(track.getColor()); //escribo el lyrics if(((header & TRACK_LYRICS) != 0)){ writeLyrics(track.getLyrics()); } } private void writeMeasureHeader(TGMeasureHeader measureheader,TGMeasureHeader lastMeasureHeader){ int header = 0; if(lastMeasureHeader == null){ header |= MEASURE_HEADER_TIMESIGNATURE; header |= MEASURE_HEADER_TEMPO; if(measureheader.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE){ header |= MEASURE_HEADER_TRIPLET_FEEL; } }else{ //Time Signature int numerator = measureheader.getTimeSignature().getNumerator(); int value = measureheader.getTimeSignature().getDenominator().getValue(); int prevNumerator = lastMeasureHeader.getTimeSignature().getNumerator(); int prevValue = lastMeasureHeader.getTimeSignature().getDenominator().getValue(); if(numerator != prevNumerator || value != prevValue){ header |= MEASURE_HEADER_TIMESIGNATURE; } //Tempo if(measureheader.getTempo().getValue() != lastMeasureHeader.getTempo().getValue()){ header |= MEASURE_HEADER_TEMPO; } //Triplet Feel if(measureheader.getTripletFeel() != lastMeasureHeader.getTripletFeel()){ header |= MEASURE_HEADER_TRIPLET_FEEL; } } header = (measureheader.isRepeatOpen())?header |= MEASURE_HEADER_REPEAT_OPEN:header; header = (measureheader.getRepeatClose() > 0)?header |= MEASURE_HEADER_REPEAT_CLOSE:header; header = (measureheader.getRepeatAlternative() > 0)?header |= MEASURE_HEADER_REPEAT_ALTERNATIVE:header; header = (measureheader.hasMarker())?header |= MEASURE_HEADER_MARKER:header; writeHeader(header); //escribo el timeSignature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ writeTimeSignature(measureheader.getTimeSignature()); } //escribo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ writeTempo(measureheader.getTempo()); } //escribo el numero de repeticiones if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){ writeShort((short)measureheader.getRepeatClose()); } //escribo los finales alternativos if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){ writeByte(measureheader.getRepeatAlternative()); } //escribo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ writeMarker(measureheader.getMarker()); } //escribo el triplet feel if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ writeByte(measureheader.getTripletFeel()); } } private void writeMeasure(TGMeasure measure,TGMeasure lastMeasure){ int header = 0; if(lastMeasure == null){ header |= MEASURE_CLEF; header |= MEASURE_KEYSIGNATURE; }else{ //Clef if(measure.getClef() != lastMeasure.getClef()){ header |= MEASURE_CLEF; } //KeySignature if(measure.getKeySignature() != lastMeasure.getKeySignature()){ header |= MEASURE_KEYSIGNATURE; } } //escribo la cabecera writeHeader(header); //escribo los beats TGBeatData data = new TGBeatData(measure); writeBeats(measure, data); //escribo la clave if(((header & MEASURE_CLEF) != 0)){ writeByte(measure.getClef()); } //escribo el key signature if(((header & MEASURE_KEYSIGNATURE) != 0)){ writeByte(measure.getKeySignature()); } } private void writeChannel(TGChannel channel){ //escribo el canal writeByte(channel.getChannel()); //escribo el canal de efectos writeByte(channel.getEffectChannel()); //escribo el instrumento writeByte(channel.getInstrument()); //escribo el volumen writeByte(channel.getVolume()); //escribo el balance writeByte(channel.getBalance()); //escribo el chorus writeByte(channel.getChorus()); //escribo el reverb writeByte(channel.getReverb()); //escribo el phaser writeByte(channel.getPhaser()); //escribo el tremolo writeByte(channel.getTremolo()); } private void writeBeats(TGMeasure measure,TGBeatData data){ int count = measure.countBeats(); for(int i = 0; i < count; i ++){ TGBeat beat = measure.getBeat(i); writeBeat(beat,data, (i + 1 < count )); } } private void writeBeat(TGBeat beat,TGBeatData data, boolean hasNext){ int header = hasNext ? BEAT_HAS_NEXT : 0; //Berifico si hay cambios en las voces for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){ int shift = (i * 2 ); if(!beat.getVoice(i).isEmpty()){ header |= ( BEAT_HAS_VOICE << shift ); int flags = ( beat.getVoice(i).isRestVoice() ? 0 : VOICE_HAS_NOTES ); if(!beat.getVoice(i).getDuration().isEqual(data.getVoice(i).getDuration())){ flags |= VOICE_NEXT_DURATION; data.getVoice(i).setDuration(beat.getVoice(i).getDuration()); } if(beat.getVoice(i).getDirection() != TGVoice.DIRECTION_NONE ){ if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_UP ){ flags |= VOICE_DIRECTION_UP; } else if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_DOWN ){ flags |= VOICE_DIRECTION_DOWN; } } if( data.getVoice(i).getFlags() != flags ){ header |= ( BEAT_HAS_VOICE_CHANGES << shift ); data.getVoice(i).setFlags( flags ); } } } //Berifico si tiene stroke if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){ header |= BEAT_HAS_STROKE; } //Berifico si tiene acorde if(beat.getChord() != null){ header |= BEAT_HAS_CHORD; } //Berifico si tiene texto if(beat.getText() != null){ header |= BEAT_HAS_TEXT; } // escribo la cabecera writeHeader(header); //escribo las voces writeVoices(header, beat, data); //escribo el stroke if(((header & BEAT_HAS_STROKE) != 0)){ writeStroke(beat.getStroke()); } //escribo el acorde if(((header & BEAT_HAS_CHORD) != 0)){ writeChord(beat.getChord()); } //escribo el texto if(((header & BEAT_HAS_TEXT) != 0)){ writeText(beat.getText()); } } private void writeVoices(int header, TGBeat beat,TGBeatData data){ for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){ int shift = (i * 2 ); if((( header & (BEAT_HAS_VOICE << shift)) != 0)){ if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){ writeHeader( data.getVoice(i).getFlags() ); } //escribo la duracion if((( data.getVoice(i).getFlags() & VOICE_NEXT_DURATION) != 0)){ writeDuration(beat.getVoice(i).getDuration()); } //escribo las notas if((( data.getVoice(i).getFlags() & VOICE_HAS_NOTES) != 0)){ writeNotes(beat.getVoice(i), data); } } } } private void writeNotes(TGVoice voice,TGBeatData data){ for( int i = 0 ; i < voice.countNotes() ; i ++){ TGNote note = voice.getNote(i); int header = ( i + 1 < voice.countNotes() ? NOTE_HAS_NEXT : 0 ); header = (note.isTiedNote())?header |= NOTE_TIED:header; if(note.getVelocity() != data.getVoice(voice.getIndex()).getVelocity()){ data.getVoice(voice.getIndex()).setVelocity(note.getVelocity()); header |= NOTE_VELOCITY; } header = (note.getEffect().hasAnyEffect())?header |= NOTE_EFFECT:header; writeHeader(header); writeNote(header,note); } } private void writeNote(int header,TGNote note){ //escribo el valor writeByte(note.getValue()); //escribo la cuerda writeByte(note.getString()); //escribo el velocity if(((header & NOTE_VELOCITY) != 0)){ writeByte(note.getVelocity()); } //escribo los efectos if(((header & NOTE_EFFECT) != 0)){ writeNoteEffect(note.getEffect()); } } private void writeStroke(TGStroke stroke){ //escribo la direccion writeByte(stroke.getDirection()); //escribo el valor writeByte(stroke.getValue()); } private void writeChord(TGChord chord){ //escribo la cantidad de cuerdas writeByte(chord.countStrings()); //escribo el nombre writeUnsignedByteString(chord.getName()); //escribo el primer fret writeByte(chord.getFirstFret()); //escribo el valor de cada cuerda for(int string = 0; string < chord.countStrings(); string ++){ writeByte(chord.getFretValue(string)); } } private void writeText(TGText text){ //escribo el texto writeUnsignedByteString(text.getValue()); } private void writeInstrumentString(TGString string){ //escribo el valor writeByte(string.getValue()); } private void writeTempo(TGTempo tempo){ //escribo el valor writeShort((short)tempo.getValue()); } private void writeTimeSignature(TGTimeSignature timeSignature){ //escribo el numerador writeByte(timeSignature.getNumerator()); //escribo el denominador writeDuration(timeSignature.getDenominator()); } private void writeDuration(TGDuration duration){ int header = 0; header = (duration.isDotted())?header |= DURATION_DOTTED:header; header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header; header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLET:header; writeHeader(header); //escribo el valor writeByte(duration.getValue()); //escribo el tipo de divisiones if(((header & DURATION_NO_TUPLET) != 0)){ writeDivisionType(duration.getDivision()); } } private void writeDivisionType(TGDivisionType divisionType){ //escribo los enters writeByte(divisionType.getEnters()); //escribo los tiempos writeByte(divisionType.getTimes()); } private void writeNoteEffect(TGNoteEffect effect){ int header = 0; header = (effect.isBend())?header |= EFFECT_BEND:header; header = (effect.isTremoloBar())?header |= EFFECT_TREMOLO_BAR:header; header = (effect.isHarmonic())?header |= EFFECT_HARMONIC:header; header = (effect.isGrace())?header |= EFFECT_GRACE:header; header = (effect.isTrill())?header |= EFFECT_TRILL:header; header = (effect.isTremoloPicking())?header |= EFFECT_TREMOLO_PICKING:header; header = (effect.isVibrato())?header |= EFFECT_VIBRATO:header; header = (effect.isDeadNote())?header |= EFFECT_DEAD:header; header = (effect.isSlide())?header |= EFFECT_SLIDE:header; header = (effect.isHammer())?header |= EFFECT_HAMMER:header; header = (effect.isGhostNote())?header |= EFFECT_GHOST:header; header = (effect.isAccentuatedNote())?header |= EFFECT_ACCENTUATED:header; header = (effect.isHeavyAccentuatedNote())?header |= EFFECT_HEAVY_ACCENTUATED:header; header = (effect.isPalmMute())?header |= EFFECT_PALM_MUTE:header; header = (effect.isStaccato())?header |= EFFECT_STACCATO:header; header = (effect.isTapping())?header |= EFFECT_TAPPING:header; header = (effect.isSlapping())?header |= EFFECT_SLAPPING:header; header = (effect.isPopping())?header |= EFFECT_POPPING:header; header = (effect.isFadeIn())?header |= EFFECT_FADE_IN:header; writeHeader(header,3); //escribo el bend if(((header & EFFECT_BEND) != 0)){ writeBendEffect(effect.getBend()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ writeTremoloBarEffect(effect.getTremoloBar()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ writeHarmonicEffect(effect.getHarmonic()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ writeGraceEffect(effect.getGrace()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ writeTrillEffect(effect.getTrill()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ writeTremoloPickingEffect(effect.getTremoloPicking()); } } private void writeBendEffect(TGEffectBend effect){ //escribo la cantidad de puntos writeByte(effect.getPoints().size()); Iterator it = effect.getPoints().iterator(); while(it.hasNext()){ TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)it.next(); //escribo la posicion writeByte(point.getPosition()); //escribo el valor writeByte(point.getValue()); } } private void writeTremoloBarEffect(TGEffectTremoloBar effect){ //escribo la cantidad de puntos writeByte(effect.getPoints().size()); Iterator it = effect.getPoints().iterator(); while(it.hasNext()){ TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)it.next(); //escribo la posicion writeByte(point.getPosition()); //escribo el valor writeByte( (point.getValue() + TGEffectTremoloBar.MAX_VALUE_LENGTH) ); } } private void writeHarmonicEffect(TGEffectHarmonic effect){ //excribo el tipo writeByte(effect.getType()); //excribo la data if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){ writeByte(effect.getData()); } } private void writeGraceEffect(TGEffectGrace effect){ int header = 0; header = (effect.isDead())?header |= GRACE_FLAG_DEAD:header; header = (effect.isOnBeat())?header |= GRACE_FLAG_ON_BEAT:header; //excribo el header writeHeader(header); //excribo el fret writeByte(effect.getFret()); //excribo la duracion writeByte(effect.getDuration()); //excribo el velocity writeByte(effect.getDynamic()); //excribo la transicion writeByte(effect.getTransition()); } private void writeTremoloPickingEffect(TGEffectTremoloPicking effect){ //excribo la duracion writeByte(effect.getDuration().getValue()); } private void writeTrillEffect(TGEffectTrill effect){ //excribo el fret writeByte(effect.getFret()); //excribo la duracion writeByte(effect.getDuration().getValue()); } private void writeMarker(TGMarker marker){ //escribo el titulo writeUnsignedByteString(marker.getTitle()); //escribo el color writeRGBColor(marker.getColor()); } private void writeRGBColor(TGColor color){ //escribo el RGB writeByte(color.getR()); writeByte(color.getG()); writeByte(color.getB()); } private void writeLyrics(TGLyric lyrics){ //escribo el compas de comienzo writeShort((short)lyrics.getFrom()); //escribo el texto writeIntegerString(lyrics.getLyrics()); } public void writeByte(int v){ try { this.dataOutputStream.write(v); } catch (IOException e) { e.printStackTrace(); } } private void writeUnsignedByteString(String v){ try { String byteString = (v == null ? new String() : ((v.length() > 0xFF)?v.substring(0, 0xFF):v) ); this.dataOutputStream.write(byteString.length()); this.dataOutputStream.writeChars(byteString); } catch (IOException e) { e.printStackTrace(); } } private void writeIntegerString(String v){ try { this.dataOutputStream.writeInt(v.length()); this.dataOutputStream.writeChars(v); } catch (IOException e) { e.printStackTrace(); } } public void writeHeader(int v){ try { this.dataOutputStream.write(v); } catch (IOException e) { e.printStackTrace(); } } public void writeHeader(int v,int bCount){ for(int i = bCount; i > 0; i --){ writeHeader( (v >>> ( (8 * i) - 8 ) ) & 0xFF); } } public void writeShort(short v){ try { this.dataOutputStream.writeShort(v); } catch (IOException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGStream.java0000644000175000017500000001224511273045225025532 0ustar julianjulianpackage org.herac.tuxguitar.io.tg; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.util.TGVersion; public class TGStream { public static final String TG_FORMAT_NAME = ("TuxGuitar File Format"); public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + TGVersion.CURRENT.getVersion() ); public static final String TG_FORMAT_EXTENSION = (".tg"); protected static final int TRACK_SOLO = 0x01; protected static final int TRACK_MUTE = 0x02; protected static final int TRACK_LYRICS = 0x04; protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01; protected static final int MEASURE_HEADER_TEMPO = 0x02; protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04; protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08; protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10; protected static final int MEASURE_HEADER_MARKER = 0x20; protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40; protected static final int MEASURE_CLEF = 0x01; protected static final int MEASURE_KEYSIGNATURE = 0x02; protected static final int BEAT_HAS_NEXT = 0x01; protected static final int BEAT_HAS_STROKE = 0x02; protected static final int BEAT_HAS_CHORD = 0x04; protected static final int BEAT_HAS_TEXT = 0x08; protected static final int BEAT_HAS_VOICE = 0x10; protected static final int BEAT_HAS_VOICE_CHANGES = 0x20; protected static final int VOICE_HAS_NOTES = 0x01; protected static final int VOICE_NEXT_DURATION = 0x02; protected static final int VOICE_DIRECTION_UP = 0x04; protected static final int VOICE_DIRECTION_DOWN = 0x08; protected static final int NOTE_HAS_NEXT = 0x01; protected static final int NOTE_TIED = 0x02; protected static final int NOTE_EFFECT = 0x04; protected static final int NOTE_VELOCITY = 0x08; protected static final int DURATION_DOTTED = 0x01; protected static final int DURATION_DOUBLE_DOTTED = 0x02; protected static final int DURATION_NO_TUPLET = 0x04; protected static final int EFFECT_BEND = 0x01; protected static final int EFFECT_TREMOLO_BAR = 0x02; protected static final int EFFECT_HARMONIC = 0x04; protected static final int EFFECT_GRACE = 0x08; protected static final int EFFECT_TRILL = 0x010; protected static final int EFFECT_TREMOLO_PICKING = 0x020; protected static final int EFFECT_VIBRATO = 0x040; protected static final int EFFECT_DEAD = 0x080; protected static final int EFFECT_SLIDE = 0x0100; protected static final int EFFECT_HAMMER = 0x0200; protected static final int EFFECT_GHOST = 0x0400; protected static final int EFFECT_ACCENTUATED = 0x0800; protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000; protected static final int EFFECT_PALM_MUTE = 0x02000; protected static final int EFFECT_STACCATO = 0x04000; protected static final int EFFECT_TAPPING = 0x08000; protected static final int EFFECT_SLAPPING = 0x010000; protected static final int EFFECT_POPPING = 0x020000; protected static final int EFFECT_FADE_IN = 0x040000; protected static final int GRACE_FLAG_DEAD = 0x01; protected static final int GRACE_FLAG_ON_BEAT = 0x02; protected class TGBeatData { private long currentStart; private TGVoiceData[] voices; protected TGBeatData(TGMeasure measure){ this.init(measure); } private void init(TGMeasure measure){ this.currentStart = measure.getStart(); this.voices = new TGVoiceData[TGBeat.MAX_VOICES]; for(int i = 0 ; i < this.voices.length ; i ++ ){ this.voices[i] = new TGVoiceData(measure); } } protected TGVoiceData getVoice(int index){ return this.voices[index]; } public long getCurrentStart(){ long minimumStart = -1; for(int i = 0 ; i < this.voices.length ; i ++ ){ if( this.voices[i].getStart() > this.currentStart ){ if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){ minimumStart = this.voices[i].getStart(); } } } if( minimumStart > this.currentStart ){ this.currentStart = minimumStart; } return this.currentStart; } } protected class TGVoiceData { private long start; private int velocity; private int flags; private TGDuration duration; protected TGVoiceData(TGMeasure measure){ this.init(measure); } private void init(TGMeasure measure){ this.flags = 0; this.setStart(measure.getStart()); this.setVelocity(TGVelocities.DEFAULT); this.setDuration(new TGFactory().newDuration()); } public TGDuration getDuration() { return this.duration; } public void setDuration(TGDuration duration) { this.duration = duration; } public long getStart() { return this.start; } public void setStart(long start) { this.start = start; } public int getVelocity() { return this.velocity; } public void setVelocity(int velocity) { this.velocity = velocity; } public int getFlags() { return this.flags; } public void setFlags(int flags) { this.flags = flags; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiControllers.java0000644000175000017500000000114611273045225030340 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public class MidiControllers { public static final int VOLUME = 0x07; public static final int BALANCE = 0x0A; public static final int EXPRESSION = 0x0B; public static final int REVERB = 0x5B; public static final int TREMOLO = 0x5C; public static final int CHORUS = 0x5D; public static final int PHASER = 0x5F; public static final int DATA_ENTRY_MSB = 0x06; public static final int DATA_ENTRY_LSB = 0x26; public static final int RPN_LSB = 0x64 ; public static final int RPN_MSB = 0x65 ; public static final int ALL_NOTES_OFF = 0x7B; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiDevice.java0000644000175000017500000000043111273045225027225 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public interface MidiDevice { public String getKey(); public String getName(); public void open() throws MidiPlayerException; public void close() throws MidiPlayerException; public void check() throws MidiPlayerException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiInstrument.java0000644000175000017500000001150611273045225030203 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public class MidiInstrument { public static final MidiInstrument[] INSTRUMENT_LIST = new MidiInstrument[]{ new MidiInstrument("Piano"), new MidiInstrument("Bright Piano"), new MidiInstrument("Electric Grand"), new MidiInstrument("Honky Tonk Piano"), new MidiInstrument("Electric Piano 1"), new MidiInstrument("Electric Piano 2"), new MidiInstrument("Harpsichord"), new MidiInstrument("Clavinet"), new MidiInstrument("Celesta"), new MidiInstrument("Glockenspiel"), new MidiInstrument("Music Box"), new MidiInstrument("Vibraphone"), new MidiInstrument("Marimba"), new MidiInstrument("Xylophone"), new MidiInstrument("Tubular Bell"), new MidiInstrument("Dulcimer"), new MidiInstrument("Hammond Organ"), new MidiInstrument("Perc Organ"), new MidiInstrument("Rock Organ"), new MidiInstrument("Church Organ"), new MidiInstrument("Reed Organ"), new MidiInstrument("Accordion"), new MidiInstrument("Harmonica"), new MidiInstrument("Tango Accordion"), new MidiInstrument("Nylon Str Guitar"), new MidiInstrument("Steel String Guitar"), new MidiInstrument("Jazz Electric Gtr"), new MidiInstrument("Clean Guitar"), new MidiInstrument("Muted Guitar"), new MidiInstrument("Overdrive Guitar"), new MidiInstrument("Distortion Guitar"), new MidiInstrument("Guitar Harmonics"), new MidiInstrument("Acoustic Bass"), new MidiInstrument("Fingered Bass"), new MidiInstrument("Picked Bass"), new MidiInstrument("Fretless Bass"), new MidiInstrument("Slap Bass 1"), new MidiInstrument("Slap Bass 2"), new MidiInstrument("Syn Bass 1"), new MidiInstrument("Syn Bass 2"), new MidiInstrument("Violin"), new MidiInstrument("Viola"), new MidiInstrument("Cello"), new MidiInstrument("Contrabass"), new MidiInstrument("Tremolo Strings"), new MidiInstrument("Pizzicato Strings"), new MidiInstrument("Orchestral Harp"), new MidiInstrument("Timpani"), new MidiInstrument("Ensemble Strings"), new MidiInstrument("Slow Strings"), new MidiInstrument("Synth Strings 1"), new MidiInstrument("Synth Strings 2"), new MidiInstrument("Choir Aahs"), new MidiInstrument("Voice Oohs"), new MidiInstrument("Syn Choir"), new MidiInstrument("Orchestra Hit"), new MidiInstrument("Trumpet"), new MidiInstrument("Trombone"), new MidiInstrument("Tuba"), new MidiInstrument("Muted Trumpet"), new MidiInstrument("French Horn"), new MidiInstrument("Brass Ensemble"), new MidiInstrument("Syn Brass 1"), new MidiInstrument("Syn Brass 2"), new MidiInstrument("Soprano Sax"), new MidiInstrument("Alto Sax"), new MidiInstrument("Tenor Sax"), new MidiInstrument("Baritone Sax"), new MidiInstrument("Oboe"), new MidiInstrument("English Horn"), new MidiInstrument("Bassoon"), new MidiInstrument("Clarinet"), new MidiInstrument("Piccolo"), new MidiInstrument("Flute"), new MidiInstrument("Recorder"), new MidiInstrument("Pan Flute"), new MidiInstrument("Bottle Blow"), new MidiInstrument("Shakuhachi"), new MidiInstrument("Whistle"), new MidiInstrument("Ocarina"), new MidiInstrument("Syn Square Wave"), new MidiInstrument("Syn Saw Wave"), new MidiInstrument("Syn Calliope"), new MidiInstrument("Syn Chiff"), new MidiInstrument("Syn Charang"), new MidiInstrument("Syn Voice"), new MidiInstrument("Syn Fifths Saw"), new MidiInstrument("Syn Brass and Lead"), new MidiInstrument("Fantasia"), new MidiInstrument("Warm Pad"), new MidiInstrument("Polysynth"), new MidiInstrument("Space Vox"), new MidiInstrument("Bowed Glass"), new MidiInstrument("Metal Pad"), new MidiInstrument("Halo Pad"), new MidiInstrument("Sweep Pad"), new MidiInstrument("Ice Rain"), new MidiInstrument("Soundtrack"), new MidiInstrument("Crystal"), new MidiInstrument("Atmosphere"), new MidiInstrument("Brightness"), new MidiInstrument("Goblins"), new MidiInstrument("Echo Drops"), new MidiInstrument("Sci Fi"), new MidiInstrument("Sitar"), new MidiInstrument("Banjo"), new MidiInstrument("Shamisen"), new MidiInstrument("Koto"), new MidiInstrument("Kalimba"), new MidiInstrument("Bag Pipe"), new MidiInstrument("Fiddle"), new MidiInstrument("Shanai"), new MidiInstrument("Tinkle Bell"), new MidiInstrument("Agogo"), new MidiInstrument("Steel Drums"), new MidiInstrument("Woodblock"), new MidiInstrument("Taiko Drum"), new MidiInstrument("Melodic Tom"), new MidiInstrument("Syn Drum"), new MidiInstrument("Reverse Cymbal"), new MidiInstrument("Guitar Fret Noise"), new MidiInstrument("Breath Noise"), new MidiInstrument("Seashore"), new MidiInstrument("Bird"), new MidiInstrument("Telephone"), new MidiInstrument("Helicopter"), new MidiInstrument("Applause"), new MidiInstrument("Gunshot") }; private String name; public MidiInstrument(String name){ this.name = name; } public String getName(){ return this.name; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPort.java0000644000175000017500000000024311273045225030174 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public interface MidiOutputPort extends MidiDevice { public MidiReceiver getReceiver() throws MidiPlayerException; }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPortProvider.java0000644000175000017500000000033511273045225031711 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import java.util.List; public interface MidiOutputPortProvider { public List listPorts() throws MidiPlayerException; public void closeAll() throws MidiPlayerException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPercussion.java0000644000175000017500000000435211273045225030166 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public class MidiPercussion { public static final MidiPercussion[] PERCUSSION_LIST = new MidiPercussion[]{ new MidiPercussion(35,"Acoustic Bass Drum"), new MidiPercussion(36,"Bass Drum 1"), new MidiPercussion(37,"Side Stick"), new MidiPercussion(38,"Acoustic Snare"), new MidiPercussion(39,"Hand Clap"), new MidiPercussion(40,"Electric Snare"), new MidiPercussion(41,"Low Floor Tom"), new MidiPercussion(42,"Closed Hi Hat"), new MidiPercussion(43,"High Floor Tom"), new MidiPercussion(44,"Pedal Hi-Hat"), new MidiPercussion(45,"Low Tom"), new MidiPercussion(46,"Open Hi-Hat"), new MidiPercussion(47,"Low-Mid Tom"), new MidiPercussion(48,"Hi-Mid Tom"), new MidiPercussion(49,"Crash Cymbal 1"), new MidiPercussion(50,"High Tom"), new MidiPercussion(51,"Ride Cymbal 1"), new MidiPercussion(52,"Chinese Cymbal"), new MidiPercussion(53,"Ride Bell"), new MidiPercussion(54,"Tambourine"), new MidiPercussion(55,"Splash Cymbal"), new MidiPercussion(56,"Cowbell"), new MidiPercussion(57,"Crash Cymbal 2"), new MidiPercussion(58,"Vibraslap"), new MidiPercussion(59,"Ride Cymbal 2"), new MidiPercussion(60,"Hi Bongo"), new MidiPercussion(61,"Low Bongo"), new MidiPercussion(62,"Mute Hi Conga"), new MidiPercussion(63,"Open Hi Conga"), new MidiPercussion(64,"Low Conga"), new MidiPercussion(65,"High Timbale"), new MidiPercussion(66,"Low Timbale"), new MidiPercussion(67,"High Agogo"), new MidiPercussion(68,"Low Agogo"), new MidiPercussion(69,"Cabasa"), new MidiPercussion(70,"Maracas"), new MidiPercussion(71,"Short Whistle"), new MidiPercussion(72,"Long Whistle"), new MidiPercussion(73,"Short Guiro"), new MidiPercussion(74,"Long Guiro"), new MidiPercussion(75,"Claves"), new MidiPercussion(76,"Hi Wood Block"), new MidiPercussion(77,"Low Wood Block"), new MidiPercussion(78,"Mute Cuica"), new MidiPercussion(79,"Open Cuica"), new MidiPercussion(80,"Mute Triangle"), new MidiPercussion(81,"Open Triangle"), }; private int value; private String name; public MidiPercussion(int value,String name){ this.value = value; this.name = name; } public int getValue(){ return this.value; } public String getName(){ return this.name; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayer.java0000644000175000017500000005533111273045225027273 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.util.TGLock; public class MidiPlayer{ private static final int MAX_CHANNELS = 16; public static final int MAX_VOLUME = 10; private static final int TIMER_DELAY = 10; private TGSongManager songManager; private MidiSequencer sequencer; private MidiTransmitter outputTransmitter; private MidiOutputPort outputPort; private MidiPlayerMode mode; private String sequencerKey; private String outputPortKey; private List outputPortProviders; private List sequencerProviders; private List listeners; private int volume; private boolean running; private boolean paused; private boolean changeTickPosition; private boolean metronomeEnabled; private int metronomeTrack; private int infoTrack; private int loopSHeader; private int loopEHeader; private long loopSPosition; private boolean anySolo; protected long tickLength; protected long tickPosition; protected boolean starting; protected TGLock lock = new TGLock(); public MidiPlayer() { this.lock = new TGLock(); this.volume = MAX_VOLUME; } /** * Inicia el Secuenciador y Sintetizador * @throws MidiUnavailableException */ public void init(TGSongManager songManager) { this.songManager = songManager; this.outputPortProviders = new ArrayList(); this.sequencerProviders = new ArrayList(); this.listeners = new ArrayList(); this.getSequencer(); this.getMode(); this.reset(); } /** * Retorna una lista de instrumentos */ public MidiInstrument[] getInstruments(){ return MidiInstrument.INSTRUMENT_LIST; } /** * Retorna una lista de instrumentos */ public MidiPercussion[] getPercussions(){ return MidiPercussion.PERCUSSION_LIST; } /** * Resetea los valores */ public void reset(){ this.stop(); this.lock.lock(); this.tickPosition = TGDuration.QUARTER_TIME; this.setChangeTickPosition(false); this.lock.unlock(); } /** * Cierra el Secuenciador y Sintetizador * @throws MidiUnavailableException */ public void close(){ try { this.closeSequencer(); this.closeOutputPort(); } catch (MidiPlayerException e) { e.printStackTrace(); } } /** * Para la reproduccion * @throws MidiUnavailableException */ public void stop(boolean paused) { try{ this.setPaused(paused); if(this.isRunning()){ this.getSequencer().stop(); } this.setRunning(false); }catch (MidiPlayerException e) { e.printStackTrace(); } } /** * Para la reproduccion * @throws MidiUnavailableException */ public void stop() { this.stop(false); } public void pause(){ this.stop(true); } /** * Inicia la reproduccion * @throws MidiPlayerException * @throws MidiUnavailableException */ public synchronized void play() throws MidiPlayerException{ try { final boolean notifyStarted = (!this.isRunning()); this.setStarting(true); this.stop(); this.lock.lock(); this.checkDevices(); this.updateLoop( true ); this.systemReset(); this.addSequence(); this.updatePrograms(); this.updateControllers(); this.updateDefaultControllers(); this.setMetronomeEnabled(isMetronomeEnabled()); this.changeTickPosition(); this.setRunning(true); this.getSequencer().start(); new Thread(new Runnable() { public synchronized void run() { try { MidiPlayer.this.lock.lock(); MidiPlayer.this.setStarting(false); if( notifyStarted ){ MidiPlayer.this.notifyStarted(); } MidiPlayer.this.tickLength = getSequencer().getTickLength(); MidiPlayer.this.tickPosition = getSequencer().getTickPosition(); Object sequencerLock = new Object(); while (getSequencer().isRunning() && isRunning()) { synchronized(sequencerLock) { if (isChangeTickPosition()) { changeTickPosition(); } MidiPlayer.this.tickPosition = getSequencer().getTickPosition(); sequencerLock.wait( TIMER_DELAY ); } } //FINISH if(isRunning()){ if(MidiPlayer.this.tickPosition >= (MidiPlayer.this.tickLength - (TGDuration.QUARTER_TIME / 2) )){ finish(); }else { stop(isPaused()); } } if( !isRunning() ){ MidiPlayer.this.notifyStopped(); } }catch (Throwable throwable) { setStarting(false); reset(); throwable.printStackTrace(); }finally{ MidiPlayer.this.lock.unlock(); } } }).start(); }catch (Throwable throwable) { this.setStarting(false); this.reset(); throw new MidiPlayerException(throwable.getMessage(),throwable); }finally{ this.lock.unlock(); } } protected void finish(){ try { if(this.getMode().isLoop()){ this.setStarting(true); this.reset(); this.getMode().notifyLoop(); this.notifyLoop(); this.play(); return; } this.reset(); } catch (MidiPlayerException e) { e.printStackTrace(); } } public void updateLoop( boolean force ){ if( force || !this.isRunning() ){ this.loopSHeader = -1; this.loopEHeader = -1; this.loopSPosition = TGDuration.QUARTER_TIME; if( getMode().isLoop() ){ int hCount = this.songManager.getSong().countMeasureHeaders(); this.loopSHeader = ( getMode().getLoopSHeader() <= hCount ? getMode().getLoopSHeader() : -1 ) ; this.loopEHeader = ( getMode().getLoopEHeader() <= hCount ? getMode().getLoopEHeader() : -1 ) ; if( this.loopSHeader > 0 && this.loopSHeader <= hCount ){ TGMeasureHeader header = this.songManager.getMeasureHeader( this.loopSHeader ); if( header != null ){ this.loopSPosition = header.getStart(); } } } } } public int getLoopSHeader() { return this.loopSHeader; } public int getLoopEHeader() { return this.loopEHeader; } public long getLoopSPosition() { return this.loopSPosition; } public void checkDevices() throws Throwable { this.getSequencer().check(); if( this.getOutputPort() != null ){ this.getOutputPort().check(); } } public int getVolume() { return this.volume; } public void setVolume(int volume) { this.volume = volume; if (this.isRunning()) { this.updateControllers(); } } protected boolean isStarting() { return this.starting; } protected void setStarting(boolean starting) { this.starting = starting; } /** * Asigna el valor a running */ public void setRunning(boolean running) { this.running = running; } /** * Retorna True si esta reproduciendo */ public boolean isRunning() { try { return (this.running || this.getSequencer().isRunning() || this.isStarting()); } catch (MidiPlayerException e) { e.printStackTrace(); } return false; } public boolean isPaused() { return this.paused; } public void setPaused(boolean paused) { this.paused = paused; } /** * Retorna True si hay cambios en la posicion */ protected boolean isChangeTickPosition() { return this.changeTickPosition; } /** * Asigna los cambios de la posicion */ private void setChangeTickPosition(boolean changeTickPosition) { this.changeTickPosition = changeTickPosition; } /** * Indica la posicion del secuenciador * @throws MidiUnavailableException */ public void setTickPosition(long position) { this.tickPosition = position; this.setChangeTickPosition(true); } /** * Retorna el tick de la nota que esta reproduciendo */ public long getTickPosition() { return this.tickPosition; } protected void changeTickPosition(){ try{ if(isRunning()){ if( this.tickPosition < this.getLoopSPosition() ){ this.tickPosition = this.getLoopSPosition(); } this.getSequencer().setTickPosition(this.tickPosition); } setChangeTickPosition(false); } catch (MidiPlayerException e) { e.printStackTrace(); } } public void systemReset(){ try { this.getOutputTransmitter().sendSystemReset(); } catch (MidiPlayerException e) { e.printStackTrace(); } } /** * Agrega la Secuencia * @throws MidiUnavailableException */ public void addSequence() { try{ MidiSequenceParser parser = new MidiSequenceParser(this.songManager,MidiSequenceParser.DEFAULT_PLAY_FLAGS,getMode().getCurrentPercent(),0); MidiSequenceHandler sequence = getSequencer().createSequence(this.songManager.getSong().countTracks() + 2); parser.setSHeader( getLoopSHeader() ); parser.setEHeader( getLoopEHeader() ); parser.parse(sequence); this.infoTrack = parser.getInfoTrack(); this.metronomeTrack = parser.getMetronomeTrack(); } catch (MidiPlayerException e) { e.printStackTrace(); } } private void updateDefaultControllers(){ try{ for(int channel = 0; channel < MAX_CHANNELS;channel ++){ getOutputTransmitter().sendControlChange(channel,MidiControllers.RPN_MSB,0); getOutputTransmitter().sendControlChange(channel,MidiControllers.RPN_LSB,0); getOutputTransmitter().sendControlChange(channel,MidiControllers.DATA_ENTRY_MSB,12); getOutputTransmitter().sendControlChange(channel,MidiControllers.DATA_ENTRY_LSB, 0); } } catch (MidiPlayerException e) { e.printStackTrace(); } } public void updatePrograms() { try{ Iterator it = this.songManager.getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getOutputTransmitter().sendProgramChange(track.getChannel().getChannel(),track.getChannel().getInstrument()); if(track.getChannel().getChannel() != track.getChannel().getEffectChannel()){ getOutputTransmitter().sendProgramChange(track.getChannel().getEffectChannel(),track.getChannel().getInstrument()); } } }catch (MidiPlayerException e) { e.printStackTrace(); } } public void updateControllers() { this.anySolo = false; boolean percussionUpdated = false; Iterator it = this.songManager.getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); this.updateController(track); this.anySolo = ((!this.anySolo)?track.isSolo():this.anySolo); percussionUpdated = (percussionUpdated || track.isPercussionTrack()); } if(!percussionUpdated && isMetronomeEnabled()){ int volume = (int)((this.getVolume() / 10.00) * TGChannel.DEFAULT_VOLUME); int balance = TGChannel.DEFAULT_BALANCE; int chorus = TGChannel.DEFAULT_CHORUS; int reverb = TGChannel.DEFAULT_REVERB; int phaser = TGChannel.DEFAULT_PHASER; int tremolo = TGChannel.DEFAULT_TREMOLO; updateController(9,volume,balance,chorus,reverb,phaser,tremolo,127); } this.afterUpdate(); } private void updateController(TGTrack track) { try{ int volume = (int)((this.getVolume() / 10.00) * track.getChannel().getVolume()); int balance = track.getChannel().getBalance(); int chorus = track.getChannel().getChorus(); int reverb = track.getChannel().getReverb(); int phaser = track.getChannel().getPhaser(); int tremolo = track.getChannel().getTremolo(); updateController(track.getChannel().getChannel(),volume,balance,chorus,reverb,phaser,tremolo,127); if(track.getChannel().getChannel() != track.getChannel().getEffectChannel()){ updateController(track.getChannel().getEffectChannel(),volume,balance,chorus,reverb,phaser,tremolo,127); } getSequencer().setMute(track.getNumber(),track.isMute()); getSequencer().setSolo(track.getNumber(),track.isSolo()); }catch (MidiPlayerException e) { e.printStackTrace(); } } private void updateController(int channel,int volume,int balance,int chorus, int reverb,int phaser, int tremolo, int expression) { try{ getOutputTransmitter().sendControlChange(channel,MidiControllers.VOLUME,volume); getOutputTransmitter().sendControlChange(channel,MidiControllers.BALANCE,balance); getOutputTransmitter().sendControlChange(channel,MidiControllers.CHORUS,chorus); getOutputTransmitter().sendControlChange(channel,MidiControllers.REVERB,reverb); getOutputTransmitter().sendControlChange(channel,MidiControllers.PHASER,phaser); getOutputTransmitter().sendControlChange(channel,MidiControllers.TREMOLO,tremolo); getOutputTransmitter().sendControlChange(channel,MidiControllers.EXPRESSION,expression); }catch (MidiPlayerException e) { e.printStackTrace(); } } private void afterUpdate(){ try{ getSequencer().setSolo(this.infoTrack,this.anySolo); getSequencer().setSolo(this.metronomeTrack,(isMetronomeEnabled() && this.anySolo)); }catch (MidiPlayerException e) { e.printStackTrace(); } } public boolean isMetronomeEnabled() { return this.metronomeEnabled; } public void setMetronomeEnabled(boolean metronomeEnabled) { try{ this.metronomeEnabled = metronomeEnabled; this.getSequencer().setMute(this.metronomeTrack,!isMetronomeEnabled()); this.getSequencer().setSolo(this.metronomeTrack,(isMetronomeEnabled() && this.anySolo)); }catch (MidiPlayerException e) { e.printStackTrace(); } } public void playBeat(final TGTrack track,final List notes) { int channel = track.getChannel().getChannel(); int program = track.getChannel().getInstrument(); int volume = (int)((this.getVolume() / 10.00) * track.getChannel().getVolume()); int balance = track.getChannel().getBalance(); int chorus = track.getChannel().getChorus(); int reverb = track.getChannel().getReverb(); int phaser = track.getChannel().getPhaser(); int tremolo = track.getChannel().getTremolo(); int size = notes.size(); int[][] beat = new int[size][2]; for(int i = 0; i < size; i ++){ TGNote note = (TGNote)notes.get(i); beat[i][0] = track.getOffset() + (note.getValue() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue()); beat[i][1] = note.getVelocity(); } playBeat(channel,program,volume,balance,chorus,reverb,phaser,tremolo,beat); } public void playBeat(int channel,int program,int volume,int balance,int chorus, int reverb,int phaser,int tremolo,int[][] beat) { playBeat(channel, program, volume, balance, chorus, reverb, phaser, tremolo, beat,500,0); } public void playBeat(int channel,int program,int volume,int balance,int chorus, int reverb,int phaser,int tremolo,int[][] beat,long duration,int interval) { try { getOutputTransmitter().sendProgramChange(channel,program); getOutputTransmitter().sendControlChange(channel,MidiControllers.VOLUME,volume); getOutputTransmitter().sendControlChange(channel,MidiControllers.BALANCE,balance); getOutputTransmitter().sendControlChange(channel,MidiControllers.CHORUS,chorus); getOutputTransmitter().sendControlChange(channel,MidiControllers.REVERB,reverb); getOutputTransmitter().sendControlChange(channel,MidiControllers.PHASER,phaser); getOutputTransmitter().sendControlChange(channel,MidiControllers.TREMOLO,tremolo); for(int i = 0; i < beat.length; i ++){ getOutputTransmitter().sendNoteOn(channel,beat[i][0], beat[i][1]); if(interval > 0){ Thread.sleep(interval); } } Thread.sleep(duration); for(int i = 0; i < beat.length; i ++){ getOutputTransmitter().sendNoteOff(channel,beat[i][0], beat[i][1]); } } catch (Throwable throwable) { throwable.printStackTrace(); } } public MidiPlayerMode getMode(){ if(this.mode == null){ this.mode = new MidiPlayerMode(); } return this.mode; } public MidiTransmitter getOutputTransmitter(){ if (this.outputTransmitter == null) { this.outputTransmitter = new MidiTransmitter(); } return this.outputTransmitter; } /** * Retorna el Puerto Midi */ public MidiOutputPort getOutputPort(){ return this.outputPort; } /** * Retorna el Sequenciador */ public MidiSequencer getSequencer(){ if (this.sequencer == null) { this.sequencer = new MidiSequencerEmpty(); } return this.sequencer; } public boolean loadSequencer(MidiSequencer sequencer){ try{ this.closeSequencer(); this.sequencer = sequencer; this.sequencer.open(); this.sequencer.setTransmitter( getOutputTransmitter() ); }catch(Throwable throwable){ this.sequencer = null; return false; } return true; } public boolean loadOutputPort(MidiOutputPort port){ try{ this.closeOutputPort(); this.outputPort = port; this.outputPort.open(); this.getOutputTransmitter().addReceiver(this.outputPort.getKey(), this.outputPort.getReceiver() ); }catch(Throwable throwable){ this.outputPort = null; return false; } return true; } public void openOutputPort(String key) { this.openOutputPort(key, false); } public void openOutputPort(String key, boolean tryFirst) { this.outputPortKey = key; this.openOutputPort(listOutputPorts(),tryFirst); } public void openOutputPort(List ports, boolean tryFirst) { try{ if(this.outputPortKey != null && !this.isOutputPortOpen(this.outputPortKey)){ this.closeOutputPort(); for(int i = 0; i < ports.size(); i ++){ MidiOutputPort port = (MidiOutputPort)ports.get(i); if(port.getKey().equals(this.outputPortKey)){ if(this.loadOutputPort(port)){ return; } } } } if(getOutputPort() == null && !ports.isEmpty() && tryFirst){ this.loadOutputPort( (MidiOutputPort)ports.get(0) ); } }catch(Throwable throwable){ throwable.printStackTrace(); } } public void openSequencer(String key) { this.openSequencer(key, false); } public void openSequencer(String key, boolean tryFirst) { try{ this.sequencerKey = key; this.openSequencer(listSequencers(),tryFirst); }catch(Throwable throwable){ throwable.printStackTrace(); } } public void openSequencer(List sequencers ,boolean tryFirst) throws MidiPlayerException { try{ if(this.sequencerKey != null && !this.isSequencerOpen(this.sequencerKey)){ this.closeSequencer(); for(int i = 0; i < sequencers.size(); i ++){ MidiSequencer sequencer = (MidiSequencer)sequencers.get(i); if(sequencer.getKey().equals(this.sequencerKey)){ if(this.loadSequencer(sequencer)){ return; } } } } if(getSequencer() instanceof MidiSequencerEmpty && !sequencers.isEmpty() && tryFirst){ this.loadSequencer( (MidiSequencer) sequencers.get(0)); } }catch(Throwable throwable){ throw new MidiPlayerException(throwable.getMessage(),throwable); } } public List listOutputPorts() { List ports = new ArrayList(); Iterator it = this.outputPortProviders.iterator(); while(it.hasNext()){ try{ MidiOutputPortProvider provider = (MidiOutputPortProvider)it.next(); ports.addAll(provider.listPorts()); }catch(Throwable throwable){ throwable.printStackTrace(); } } return ports; } public List listSequencers(){ List sequencers = new ArrayList(); Iterator it = this.sequencerProviders.iterator(); while(it.hasNext()){ try{ MidiSequencerProvider provider = (MidiSequencerProvider)it.next(); sequencers.addAll(provider.listSequencers()); }catch(Throwable throwable){ throwable.printStackTrace(); } } return sequencers; } public void closeSequencer() throws MidiPlayerException{ try{ if(this.isRunning()){ this.stop(); } this.lock.lock(); if (this.sequencer != null) { this.sequencer.close(); this.sequencer = null; } this.lock.unlock(); }catch(Throwable throwable){ throw new MidiPlayerException(throwable.getMessage(),throwable); } } public void closeOutputPort(){ try{ if(this.isRunning()){ this.stop(); } this.lock.lock(); if (this.outputPort != null) { this.getOutputTransmitter().removeReceiver(this.outputPort.getKey()); this.outputPort.close(); this.outputPort = null; } this.lock.unlock(); }catch(Throwable throwable){ throwable.printStackTrace(); } } public boolean isSequencerOpen(String key){ if(key != null){ String currentKey = getSequencer().getKey(); if(currentKey == null){ return false; } return currentKey.equals(key); } return false; } public boolean isOutputPortOpen(String key){ if(key != null && getOutputPort() != null ){ String currentKey = getOutputPort().getKey(); if(currentKey == null){ return false; } return currentKey.equals(key); } return false; } public void addOutputPortProvider(MidiOutputPortProvider provider) throws MidiPlayerException { this.addOutputPortProvider(provider, false); } public void addOutputPortProvider(MidiOutputPortProvider provider, boolean tryFirst) throws MidiPlayerException { this.outputPortProviders.add(provider); this.openOutputPort(provider.listPorts(),tryFirst); } public void addSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException { this.addSequencerProvider(provider, false); } public void addSequencerProvider(MidiSequencerProvider provider, boolean tryFirst) throws MidiPlayerException { this.sequencerProviders.add(provider); this.openSequencer(provider.listSequencers(), tryFirst); } public void removeOutputPortProvider(MidiOutputPortProvider provider) throws MidiPlayerException { this.outputPortProviders.remove(provider); MidiOutputPort current = getOutputPort(); if( current != null ){ Iterator it = provider.listPorts().iterator(); while(it.hasNext()){ MidiOutputPort port = (MidiOutputPort)it.next(); if(port.getKey().equals(current.getKey())){ closeOutputPort(); break; } } } } public void removeSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException { this.sequencerProviders.remove(provider); MidiSequencer current = getSequencer(); if(!(current instanceof MidiSequencerEmpty) && current != null){ Iterator it = provider.listSequencers().iterator(); while(it.hasNext()){ MidiSequencer sequencer = (MidiSequencer)it.next(); if(current.getKey().equals(sequencer.getKey())){ closeSequencer(); break; } } } } public void addListener( MidiPlayerListener listener ){ if( !this.listeners.contains( listener ) ){ this.listeners.add( listener ); } } public void removeListener( MidiPlayerListener listener ){ if( this.listeners.contains( listener ) ){ this.listeners.remove( listener ); } } public void notifyStarted(){ Iterator it = this.listeners.iterator(); while( it.hasNext() ){ MidiPlayerListener listener = (MidiPlayerListener) it.next(); listener.notifyStarted(); } } public void notifyStopped(){ Iterator it = this.listeners.iterator(); while( it.hasNext() ){ MidiPlayerListener listener = (MidiPlayerListener) it.next(); listener.notifyStopped(); } } public void notifyLoop(){ Iterator it = this.listeners.iterator(); while( it.hasNext() ){ MidiPlayerListener listener = (MidiPlayerListener) it.next(); listener.notifyLoop(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerException.java0000644000175000017500000000047011273045225031144 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public class MidiPlayerException extends Exception{ private static final long serialVersionUID = 1L; public MidiPlayerException(String message) { super(message); } public MidiPlayerException(String message, Throwable cause) { super(message, cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java0000644000175000017500000000025711273045225030776 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public interface MidiPlayerListener { public void notifyStarted(); public void notifyStopped(); public void notifyLoop(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerMode.java0000644000175000017500000000524111273045225030073 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public class MidiPlayerMode{ public static final int DEFAULT_TEMPO_PERCENT = 100; public static final int TYPE_SIMPLE = 1; public static final int TYPE_CUSTOM = 2; private int type; private boolean loop; private int loopSHeader; private int loopEHeader; private int simplePercent; private int customPercentFrom; private int customPercentTo; private int customPercentIncrement; private int currentPercent; public MidiPlayerMode(){ this.clear(); } public void clear(){ this.loop = false; this.type = TYPE_SIMPLE; this.simplePercent = DEFAULT_TEMPO_PERCENT; this.customPercentFrom = DEFAULT_TEMPO_PERCENT; this.customPercentTo = DEFAULT_TEMPO_PERCENT; this.customPercentIncrement = 0; this.loopSHeader = -1; this.loopEHeader = -1; this.reset(); } public void reset(){ if(getType() == TYPE_SIMPLE){ this.setCurrentPercent(getSimplePercent()); } else if(getType() == TYPE_CUSTOM){ this.setCurrentPercent(getCustomPercentFrom()); } } public void notifyLoop(){ if(getType() == TYPE_SIMPLE){ this.setCurrentPercent(getSimplePercent()); } else if(getType() == TYPE_CUSTOM){ this.setCurrentPercent(Math.min(getCustomPercentTo(),(getCurrentPercent() + getCustomPercentIncrement()))); } } public int getCurrentPercent(){ return this.currentPercent; } public void setCurrentPercent(int currentPercent){ this.currentPercent = currentPercent; } public boolean isLoop() { return this.loop; } public void setLoop(boolean loop) { this.loop = loop; } public int getType() { return this.type; } public void setType(int type) { this.type = type; } public int getCustomPercentFrom() { return this.customPercentFrom; } public void setCustomPercentFrom(int customPercentFrom) { this.customPercentFrom = customPercentFrom; } public int getCustomPercentIncrement() { return this.customPercentIncrement; } public void setCustomPercentIncrement(int customPercentIncrement) { this.customPercentIncrement = customPercentIncrement; } public int getCustomPercentTo() { return this.customPercentTo; } public void setCustomPercentTo(int customPercentTo) { this.customPercentTo = customPercentTo; } public int getSimplePercent() { return this.simplePercent; } public void setSimplePercent(int simplePercent) { this.simplePercent = simplePercent; } public int getLoopSHeader() { return this.loopSHeader; } public void setLoopSHeader(int loopSHeader) { this.loopSHeader = loopSHeader; } public int getLoopEHeader() { return this.loopEHeader; } public void setLoopEHeader(int loopEHeader) { this.loopEHeader = loopEHeader; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiReceiver.java0000644000175000017500000000121011273045225027566 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public interface MidiReceiver { public void sendSystemReset() throws MidiPlayerException; public void sendAllNotesOff() throws MidiPlayerException; public void sendNoteOn(int channel, int key, int velocity) throws MidiPlayerException; public void sendNoteOff(int channel, int key, int velocity) throws MidiPlayerException; public void sendProgramChange(int channel, int value) throws MidiPlayerException; public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException; public void sendPitchBend(int channel, int value) throws MidiPlayerException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiRepeatController.java0000644000175000017500000000723111273045225031317 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGSong; public class MidiRepeatController { private TGSong song; private int count; private int index; private int lastIndex; private boolean shouldPlay; private boolean repeatOpen; private long repeatStart; private long repeatEnd; private long repeatMove; private int repeatStartIndex; private int repeatNumber; private int repeatAlternative; private int sHeader; private int eHeader; public MidiRepeatController(TGSong song, int sHeader , int eHeader){ this.song = song; this.sHeader = sHeader; this.eHeader = eHeader; this.count = song.countMeasureHeaders(); this.index = 0; this.lastIndex = -1; this.shouldPlay = true; this.repeatOpen = true; this.repeatAlternative = 0; this.repeatStart = TGDuration.QUARTER_TIME; this.repeatEnd = 0; this.repeatMove = 0; this.repeatStartIndex = 0; this.repeatNumber = 0; } public void process(){ TGMeasureHeader header = this.song.getMeasureHeader(this.index); //Verifica si el compas esta dentro del rango. if( (this.sHeader != -1 && header.getNumber() < this.sHeader) || ( this.eHeader != -1 && header.getNumber() > this.eHeader ) ){ this.shouldPlay = false; this.index ++; return; } //Abro repeticion siempre para el primer compas. if( (this.sHeader != -1 && header.getNumber() == this.sHeader ) || header.getNumber() == 1 ){ this.repeatStartIndex = this.index; this.repeatStart = header.getStart(); this.repeatOpen = true; } //Por defecto el compas deberia sonar this.shouldPlay = true; //En caso de existir una repeticion nueva, //guardo el indice de el compas donde empieza una repeticion if (header.isRepeatOpen()) { this.repeatStartIndex = this.index; this.repeatStart = header.getStart(); this.repeatOpen = true; //Si es la primer vez que paso por este compas //Pongo numero de repeticion y final alternativo en cero if(this.index > this.lastIndex){ this.repeatNumber = 0; this.repeatAlternative = 0; } } else{ //verifico si hay un final alternativo abierto if(this.repeatAlternative == 0){ this.repeatAlternative = header.getRepeatAlternative(); } //Si estoy en un final alternativo. //el compas solo puede sonar si el numero de repeticion coincide con el numero de final alternativo. if (this.repeatOpen && (this.repeatAlternative > 0) && ((this.repeatAlternative & (1 << (this.repeatNumber))) == 0)){ this.repeatMove -= header.getLength(); if (header.getRepeatClose() >0){ this.repeatAlternative = 0; } this.shouldPlay = false; this.index ++; return; } } //antes de ejecutar una posible repeticion //guardo el indice del ultimo compas tocado this.lastIndex = Math.max(this.lastIndex,this.index); //si hay una repeticion la hago if (this.repeatOpen && header.getRepeatClose() > 0) { if (this.repeatNumber < header.getRepeatClose() || (this.repeatAlternative > 0)) { this.repeatEnd = header.getStart() + header.getLength(); this.repeatMove += this.repeatEnd - this.repeatStart; this.index = this.repeatStartIndex - 1; this.repeatNumber++; } else{ this.repeatStart = 0; this.repeatNumber = 0; this.repeatEnd = 0; this.repeatOpen = false; } this.repeatAlternative = 0; } this.index ++; } public boolean finished(){ return (this.index >= this.count); } public boolean shouldPlay(){ return this.shouldPlay; } public int getIndex(){ return this.index; } public long getRepeatMove(){ return this.repeatMove; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java0000644000175000017500000000164511273045225031104 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import org.herac.tuxguitar.song.models.TGTimeSignature; public abstract class MidiSequenceHandler { private int tracks; public MidiSequenceHandler(int tracks){ this.tracks = tracks; } public int getTracks() { return this.tracks; } public abstract void addNoteOn(long tick,int track,int channel,int note,int velocity); public abstract void addNoteOff(long tick,int track,int channel,int note,int velocity); public abstract void addControlChange(long tick,int track,int channel,int controller,int value); public abstract void addProgramChange(long tick,int track,int channel,int instrument); public abstract void addPitchBend(long tick,int track,int channel,int value); public abstract void addTempoInUSQ(long tick,int track,int usq); public abstract void addTimeSignature(long tick,int track,TGTimeSignature ts); public abstract void notifyFinish(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java0000644000175000017500000007517311273045225030772 0ustar julianjulian/* * Created on 13-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.player.base; import java.util.List; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class MidiSequenceParser { private static final int DEFAULT_METRONOME_KEY = 37; private static final int DEFAULT_DURATION_PM = 60; private static final int DEFAULT_DURATION_DEAD = 30; private static final int DEFAULT_BEND = 64; private static final float DEFAULT_BEND_SEMI_TONE = 2.75f; /** * flag para agregar los controles por defecto, * no se recomienda usar este flag si el reproductor asigna estos controles en tiempo real. */ public static final int ADD_DEFAULT_CONTROLS = 0x01; /** * flag para agregar los valores del mixer (volumen, balance, instrumento), * no se recomienda usar este flag si el reproductor asigna estos valores en tiempo real. */ public static final int ADD_MIXER_MESSAGES = 0x02; /** * flag para agregar la pista del metronomo, * en casos como la exportacion de midi, este flag no sera necesario */ public static final int ADD_METRONOME = 0x04; /** * tuxguitar usa como primer tick el valor de la constante Duration.QUARTER_TIME * asignando este flag, es posible crear el primer tick en cero. */ public static final int ADD_FIRST_TICK_MOVE = 0x08; public static final int DEFAULT_PLAY_FLAGS = (ADD_METRONOME); public static final int DEFAULT_EXPORT_FLAGS = (ADD_FIRST_TICK_MOVE | ADD_DEFAULT_CONTROLS | ADD_MIXER_MESSAGES); /** * Song Manager */ private TGSongManager manager; /** * flags */ private int flags; /** * Index of info track */ private int infoTrack; /** * Index of metronome track */ private int metronomeTrack; private int firstTickMove; private int tempoPercent; private int transpose; private int sHeader; private int eHeader; public MidiSequenceParser(TGSongManager manager,int flags,int tempoPercent,int transpose) { this.manager = manager; this.flags = flags; this.transpose = transpose; this.tempoPercent = tempoPercent; this.firstTickMove = (int)(((flags & ADD_FIRST_TICK_MOVE) != 0)?(-TGDuration.QUARTER_TIME):0); this.sHeader = -1; this.eHeader = -1; } public MidiSequenceParser(TGSongManager manager,int flags) { this(manager,flags,100,0); } /** * Crea la cancion */ public void parse(MidiSequenceHandler sequence) { this.infoTrack = 0; this.metronomeTrack = (sequence.getTracks() - 1); addDefaultMessages(sequence); for (int i = 0; i < this.manager.getSong().countTracks(); i++) { TGTrack songTrack = this.manager.getSong().getTrack(i); createTrack(sequence,songTrack); } sequence.notifyFinish(); } public int getInfoTrack(){ return this.infoTrack; } public int getMetronomeTrack(){ return this.metronomeTrack; } private long getTick(long tick){ return (tick + this.firstTickMove); } public void setSHeader(int header) { this.sHeader = header; } public void setEHeader(int header) { this.eHeader = header; } private int fix( int value ){ return ( value >= 0 ? value <= 127 ? value : 127 : 0 ); } /** * Crea las pistas de la cancion */ private void createTrack(MidiSequenceHandler sequence,TGTrack track) { TGMeasure previous = null; MidiRepeatController controller = new MidiRepeatController(track.getSong(),this.sHeader,this.eHeader); addBend(sequence,track.getNumber(),TGDuration.QUARTER_TIME,DEFAULT_BEND,track.getChannel().getChannel()); makeChannel(sequence, track.getChannel(), track.getNumber()); while(!controller.finished()){ TGMeasure measure = track.getMeasure(controller.getIndex()); int index = controller.getIndex(); long move = controller.getRepeatMove(); controller.process(); if(controller.shouldPlay()){ if(track.getNumber() == 1){ addTimeSignature(sequence,measure, previous,move); addTempo(sequence,measure, previous,move); addMetronome(sequence,measure.getHeader(),move); } //agrego los pulsos makeBeats(sequence, track, measure,index, move); previous = measure; } } } private void makeBeats(MidiSequenceHandler sequence, TGTrack track, TGMeasure measure, int measureIdx, long startMove) { int[] stroke = new int[track.stringCount()]; TGBeat previous = null; for (int bIndex = 0; bIndex < measure.countBeats(); bIndex++) { TGBeat beat = measure.getBeat(bIndex); makeNotes(sequence, track, beat, measure.getTempo(), measureIdx, bIndex, startMove, getStroke(beat, previous, stroke) ); previous = beat; } } /** * Crea las notas del compas */ private void makeNotes(MidiSequenceHandler sequence, TGTrack track, TGBeat beat, TGTempo tempo, int measureIdx,int bIndex, long startMove, int[] stroke) { int trackId = track.getNumber(); for( int vIndex = 0; vIndex < beat.countVoices(); vIndex ++ ){ TGVoice voice = beat.getVoice(vIndex); BeatData data = checkTripletFeel(voice,bIndex); for (int noteIdx = 0; noteIdx < voice.countNotes(); noteIdx++) { TGNote note = voice.getNote(noteIdx); if (!note.isTiedNote()) { int key = (this.transpose + track.getOffset() + note.getValue() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue()); //long start = data.getStart() + startMove; //long duration = getRealNoteDuration(note,data.getDuration(), songTrack, measureIdx,bIndex); long start = applyStrokeStart(note, (data.getStart() + startMove) , stroke); long duration = applyStrokeDuration(note, getRealNoteDuration(track, note, tempo, data.getDuration(), measureIdx,bIndex), stroke); int velocity = getRealVelocity(note, track, measureIdx, bIndex); int channel = track.getChannel().getChannel(); int effectChannel = track.getChannel().getEffectChannel(); boolean percussionTrack = track.isPercussionTrack(); //---Fade In--- if(note.getEffect().isFadeIn()){ channel = effectChannel; makeFadeIn(sequence,trackId, start, duration, track.getChannel().getVolume(), channel); } //---Grace--- if(note.getEffect().isGrace() && effectChannel >= 0 && !percussionTrack ){ channel = effectChannel; int graceKey = track.getOffset() + note.getEffect().getGrace().getFret() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue(); int graceLength = note.getEffect().getGrace().getDurationTime(); int graceVelocity = note.getEffect().getGrace().getDynamic(); long graceDuration = ((note.getEffect().getGrace().isDead())?applyStaticDuration(tempo, DEFAULT_DURATION_DEAD, graceLength):graceLength); if(note.getEffect().getGrace().isOnBeat() || (start - graceLength) < TGDuration.QUARTER_TIME){ start += graceLength; duration -= graceLength; } makeNote(sequence,trackId, graceKey,start - graceLength,graceDuration,graceVelocity,channel); } //---Trill--- if(note.getEffect().isTrill() && effectChannel >= 0 && !percussionTrack ){ int trillKey = track.getOffset() + note.getEffect().getTrill().getFret() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue(); long trillLength = note.getEffect().getTrill().getDuration().getTime(); boolean realKey = true; long tick = start; while(true){ if(tick + 10 >= (start + duration)){ break ; }else if( (tick + trillLength) >= (start + duration)){ trillLength = (((start + duration) - tick) - 1); } makeNote(sequence,trackId,((realKey)?key:trillKey),tick,trillLength,velocity,channel); realKey = (!realKey); tick += trillLength; } continue; } //---Tremolo Picking--- if(note.getEffect().isTremoloPicking() && effectChannel >= 0){ long tpLength = note.getEffect().getTremoloPicking().getDuration().getTime(); long tick = start; while(true){ if(tick + 10 >= (start + duration)){ break ; }else if( (tick + tpLength) >= (start + duration)){ tpLength = (((start + duration) - tick) - 1); } makeNote(sequence,trackId,key,tick,tpLength,velocity,channel); tick += tpLength; } continue; } //---Bend--- if(note.getEffect().isBend() && effectChannel >= 0 && !percussionTrack ){ channel = effectChannel; makeBend(sequence,trackId,start,duration,note.getEffect().getBend(),channel); } //---TremoloBar--- else if(note.getEffect().isTremoloBar() && effectChannel >= 0 && !percussionTrack ){ channel = effectChannel; makeTremoloBar(sequence,trackId,start,duration,note.getEffect().getTremoloBar(),channel); } //---Slide--- else if(note.getEffect().isSlide() && effectChannel >= 0 && !percussionTrack){ channel = effectChannel; TGNote nextNote = getNextNote(note,track,measureIdx,bIndex,true); makeSlide(sequence,trackId,note,nextNote,startMove,channel); } //---Vibrato--- else if(note.getEffect().isVibrato() && effectChannel >= 0 && !percussionTrack){ channel = effectChannel; makeVibrato(sequence,trackId,start,duration,channel); } //---Harmonic--- if(note.getEffect().isHarmonic() && !percussionTrack){ int orig = key; //Natural if(note.getEffect().getHarmonic().isNatural()){ for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){ if((note.getValue() % 12) == (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] % 12) ){ key = ((orig + TGEffectHarmonic.NATURAL_FREQUENCIES[i][1]) - note.getValue()); break; } } } //Artifical/Tapped/Pinch/Semi else{ if(note.getEffect().getHarmonic().isSemi() && !percussionTrack){ makeNote(sequence,trackId,Math.min(127,orig), start, duration,Math.max(TGVelocities.MIN_VELOCITY,velocity - (TGVelocities.VELOCITY_INCREMENT * 3)),channel); } key = (orig + TGEffectHarmonic.NATURAL_FREQUENCIES[note.getEffect().getHarmonic().getData()][1]); } if( (key - 12) > 0 ){ int hVelocity = Math.max(TGVelocities.MIN_VELOCITY,velocity - (TGVelocities.VELOCITY_INCREMENT * 4)); makeNote(sequence,trackId,(key - 12), start, duration,hVelocity,channel); } } //---Normal Note--- makeNote(sequence,trackId, Math.min(127,key), start, duration, velocity,channel); } } } } /** * Crea una nota en la posicion start */ private void makeNote(MidiSequenceHandler sequence,int track, int key, long start, long duration, int velocity, int channel) { sequence.addNoteOn(getTick(start),track,channel,fix(key),fix(velocity)); sequence.addNoteOff(getTick(start + duration),track,channel,fix(key),fix(velocity)); } private void makeChannel(MidiSequenceHandler sequence,TGChannel channel,int track) { if( (this.flags & ADD_MIXER_MESSAGES) != 0){ makeChannel(sequence, channel, track,true); if(channel.getChannel() != channel.getEffectChannel()){ makeChannel(sequence, channel, track,false); } } } private void makeChannel(MidiSequenceHandler sequence,TGChannel channel,int track,boolean primary) { int number = (primary?channel.getChannel():channel.getEffectChannel()); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.VOLUME,fix(channel.getVolume())); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.BALANCE,fix(channel.getBalance())); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.CHORUS,fix(channel.getChorus())); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.REVERB,fix(channel.getReverb())); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.PHASER,fix(channel.getPhaser())); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.TREMOLO,fix(channel.getTremolo())); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.EXPRESSION, 127); sequence.addProgramChange(getTick(TGDuration.QUARTER_TIME),track,number,fix(channel.getInstrument())); } /** * Agrega un Time Signature si es distinto al anterior */ private void addTimeSignature(MidiSequenceHandler sequence,TGMeasure currMeasure, TGMeasure prevMeasure,long startMove){ boolean addTimeSignature = false; if (prevMeasure == null) { addTimeSignature = true; } else { int currNumerator = currMeasure.getTimeSignature().getNumerator(); int currValue = currMeasure.getTimeSignature().getDenominator().getValue(); int prevNumerator = prevMeasure.getTimeSignature().getNumerator(); int prevValue = prevMeasure.getTimeSignature().getDenominator().getValue(); if (currNumerator != prevNumerator || currValue != prevValue) { addTimeSignature = true; } } if (addTimeSignature) { sequence.addTimeSignature(getTick(currMeasure.getStart() + startMove), getInfoTrack(), currMeasure.getTimeSignature()); } } /** * Agrega un Tempo si es distinto al anterior */ private void addTempo(MidiSequenceHandler sequence,TGMeasure currMeasure, TGMeasure prevMeasure,long startMove){ boolean addTempo = false; if (prevMeasure == null) { addTempo = true; } else { if (currMeasure.getTempo().getInUSQ() != prevMeasure.getTempo().getInUSQ()) { addTempo = true; } } if (addTempo) { int usq = (int)(currMeasure.getTempo().getInUSQ() * 100.00 / this.tempoPercent ); sequence.addTempoInUSQ(getTick(currMeasure.getStart() + startMove), getInfoTrack(), usq); } } /** * Retorna la Duracion real de una nota, verificando si tiene otras ligadas */ private long getRealNoteDuration(TGTrack track, TGNote note, TGTempo tempo, long duration,int mIndex, int bIndex) { long lastEnd = (note.getVoice().getBeat().getStart() + note.getVoice().getDuration().getTime()); long realDuration = duration; int nextBIndex = (bIndex + 1); int measureCount = ( this.eHeader == -1 ? track.countMeasures() : Math.min( this.eHeader, track.countMeasures() ) ); for (int m = mIndex; m < measureCount; m++) { TGMeasure measure = track.getMeasure( m ); int beatCount = measure.countBeats(); for (int b = nextBIndex; b < beatCount; b++) { TGBeat beat = measure.getBeat(b); TGVoice voice = beat.getVoice(note.getVoice().getIndex()); if(voice.isRestVoice()){ return applyDurationEffects(note, tempo, realDuration); } int noteCount = voice.countNotes(); for (int n = 0; n < noteCount; n++) { TGNote nextNote = voice.getNote( n ); if (!nextNote.equals(note)) { if (nextNote.getString() == note.getString()) { if (nextNote.isTiedNote()) { realDuration += (beat.getStart() - lastEnd) + (nextNote.getVoice().getDuration().getTime()); lastEnd = (beat.getStart() + voice.getDuration().getTime()); } else { return applyDurationEffects(note, tempo, realDuration); } } } } } nextBIndex = 0; } return applyDurationEffects(note, tempo, realDuration); } private long applyDurationEffects(TGNote note, TGTempo tempo, long duration){ //dead note if(note.getEffect().isDeadNote()){ return applyStaticDuration(tempo, DEFAULT_DURATION_DEAD, duration); } //palm mute if(note.getEffect().isPalmMute()){ return applyStaticDuration(tempo, DEFAULT_DURATION_PM, duration); } //staccato if(note.getEffect().isStaccato()){ return (long)(duration * 50.00 / 100.00); } return duration; } private long applyStaticDuration(TGTempo tempo, long duration, long maximum ){ long value = ( tempo.getValue() * duration / 60 ); return (value < maximum ? value : maximum ); } private int getRealVelocity(TGNote note, TGTrack songTrack, int mIndex,int bIndex){ int velocity = note.getVelocity(); //Check for Hammer effect if(!songTrack.isPercussionTrack()){ TGNote prevNote = getPreviousNote(note,songTrack,mIndex,bIndex,false); if(prevNote != null && prevNote.getEffect().isHammer()){ velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity - 25)); } } //Check for GhostNote effect if(note.getEffect().isGhostNote()){ velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity - TGVelocities.VELOCITY_INCREMENT)); }else if(note.getEffect().isAccentuatedNote()){ velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity + TGVelocities.VELOCITY_INCREMENT)); }else if(note.getEffect().isHeavyAccentuatedNote()){ velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity + (TGVelocities.VELOCITY_INCREMENT * 2))); } return ((velocity > 127)?127:velocity); } public void addMetronome(MidiSequenceHandler sequence,TGMeasureHeader header, long startMove){ if( (this.flags & ADD_METRONOME) != 0) { long start = (startMove + header.getStart()); long length = header.getTimeSignature().getDenominator().getTime(); for(int i = 1; i <= header.getTimeSignature().getNumerator();i ++){ makeNote(sequence,getMetronomeTrack(),DEFAULT_METRONOME_KEY,start,length,TGVelocities.DEFAULT,9); start += length; } } } public void addDefaultMessages(MidiSequenceHandler sequence) { if( (this.flags & ADD_DEFAULT_CONTROLS) != 0) { for(int i = 0; i < 16; i ++){ sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.RPN_MSB,0); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.RPN_LSB,0); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.DATA_ENTRY_MSB,12); sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.DATA_ENTRY_LSB, 0); } } } private void addBend(MidiSequenceHandler sequence,int track, long tick,int bend, int channel) { sequence.addPitchBend(getTick(tick),track,channel,fix(bend)); } public void makeVibrato(MidiSequenceHandler sequence,int track,long start, long duration,int channel){ long nextStart = start; long end = nextStart + duration; while(nextStart < end){ nextStart = ((nextStart + 160 > end)?end:nextStart + 160); addBend(sequence,track,nextStart,DEFAULT_BEND,channel); nextStart = ((nextStart + 160 > end)?end:nextStart + 160); addBend(sequence,track,nextStart,DEFAULT_BEND + (int)(DEFAULT_BEND_SEMI_TONE / 2.0f),channel); } addBend(sequence,track,nextStart,DEFAULT_BEND,channel); } public void makeBend(MidiSequenceHandler sequence,int track,long start, long duration, TGEffectBend bend, int channel){ List points = bend.getPoints(); for(int i=0;i= 0)?value:0); addBend(sequence,track,bendStart,value,channel); if(points.size() > i + 1){ TGEffectBend.BendPoint nextPoint = (TGEffectBend.BendPoint)points.get(i + 1); int nextValue = DEFAULT_BEND + (int)(nextPoint.getValue() * DEFAULT_BEND_SEMI_TONE / TGEffectBend.SEMITONE_LENGTH); long nextBendStart = start + nextPoint.getTime(duration); if(nextValue != value){ double width = ( (nextBendStart - bendStart) / Math.abs( (nextValue - value) ) ); //ascendente if(value < nextValue){ while(value < nextValue){ value ++; bendStart +=width; addBend(sequence,track,bendStart,((value <= 127)?value:127),channel); } //descendente }else if(value > nextValue){ while(value > nextValue){ value --; bendStart +=width; addBend(sequence,track,bendStart,((value >= 0)?value:0),channel); } } } } } addBend(sequence,track,start + duration,DEFAULT_BEND,channel); } public void makeTremoloBar(MidiSequenceHandler sequence,int track,long start, long duration, TGEffectTremoloBar effect, int channel){ List points = effect.getPoints(); for(int i=0;i= 0)?value:0); addBend(sequence,track,pointStart,value,channel); if(points.size() > i + 1){ TGEffectTremoloBar.TremoloBarPoint nextPoint = (TGEffectTremoloBar.TremoloBarPoint)points.get(i + 1); int nextValue = DEFAULT_BEND + (int)(nextPoint.getValue() * (DEFAULT_BEND_SEMI_TONE * 2)); long nextPointStart = start + nextPoint.getTime(duration); if(nextValue != value){ double width = ( (nextPointStart - pointStart) / Math.abs( (nextValue - value) ) ); //ascendente if(value < nextValue){ while(value < nextValue){ value ++; pointStart +=width; addBend(sequence,track,pointStart,((value <= 127)?value:127),channel); } //descendente }else if(value > nextValue){ while(value > nextValue){ value --; pointStart += width; addBend(sequence,track,pointStart,((value >= 0)?value:0),channel); } } } } } addBend(sequence,track,start + duration,DEFAULT_BEND,channel); } public void makeSlide(MidiSequenceHandler sequence,int track,TGNote note,TGNote nextNote,long startMove,int channel){ if(nextNote != null){ makeSlide(sequence,track,note.getVoice().getBeat().getStart()+startMove,note.getValue(),nextNote.getVoice().getBeat().getStart() + startMove,nextNote.getValue(),channel); addBend(sequence,track,nextNote.getVoice().getBeat().getStart() + startMove,DEFAULT_BEND,channel); } } public void makeSlide(MidiSequenceHandler sequence,int track,long tick1,int value1,long tick2,int value2,int channel){ long distance = (value2 - value1); long length = (tick2 - tick1); int points = (int)(length / (TGDuration.QUARTER_TIME / 8)); for(int i = 1;i <= points; i ++){ float tone = ((((length / points) * (float)i) * distance) / length); int bend = (DEFAULT_BEND + (int)(tone * (DEFAULT_BEND_SEMI_TONE * 2))); addBend(sequence,track,tick1 + ( (length / points) * i),bend,channel); } } private void makeFadeIn(MidiSequenceHandler sequence,int track,long start,long duration,int volume3,int channel){ int expression = 31; int expressionIncrement = 1; long tick = start; long tickIncrement = (duration / ((127 - expression) / expressionIncrement)); while( tick < (start + duration) && expression < 127 ) { sequence.addControlChange(getTick(tick),track,channel,MidiControllers.EXPRESSION, fix(expression)); tick += tickIncrement; expression += expressionIncrement; } sequence.addControlChange(getTick((start + duration)),track,channel, MidiControllers.EXPRESSION, 127); } private int[] getStroke(TGBeat beat, TGBeat previous, int[] stroke){ int direction = beat.getStroke().getDirection(); if( previous == null || !(direction == TGStroke.STROKE_NONE && previous.getStroke().getDirection() == TGStroke.STROKE_NONE)){ if( direction == TGStroke.STROKE_NONE ){ for( int i = 0 ; i < stroke.length ; i ++ ){ stroke[ i ] = 0; } }else{ int stringUseds = 0; int stringCount = 0; for( int vIndex = 0; vIndex < beat.countVoices(); vIndex ++ ){ TGVoice voice = beat.getVoice(vIndex); for (int nIndex = 0; nIndex < voice.countNotes(); nIndex++) { TGNote note = voice.getNote(nIndex); if( !note.isTiedNote() ){ stringUseds |= 0x01 << ( note.getString() - 1 ); stringCount ++; } } } if( stringCount > 0 ){ int strokeMove = 0; int strokeIncrement = beat.getStroke().getIncrementTime(beat); for( int i = 0 ; i < stroke.length ; i ++ ){ int index = ( direction == TGStroke.STROKE_DOWN ? (stroke.length - 1) - i : i ); if( (stringUseds & ( 0x01 << index ) ) != 0 ){ stroke[ index ] = strokeMove; strokeMove += strokeIncrement; } } } } } return stroke; } private long applyStrokeStart( TGNote note, long start , int[] stroke){ return (start + stroke[ note.getString() - 1 ]); } private long applyStrokeDuration( TGNote note, long duration , int[] stroke){ return (duration - stroke[ note.getString() - 1 ]); } private BeatData checkTripletFeel(TGVoice voice,int bIndex){ long bStart = voice.getBeat().getStart(); long bDuration = voice.getDuration().getTime(); if(voice.getBeat().getMeasure().getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){ if(voice.getDuration().isEqual(newDuration(TGDuration.EIGHTH))){ //first time if( (bStart % TGDuration.QUARTER_TIME) == 0){ TGVoice v = getNextBeat(voice,bIndex); if(v == null || ( v.getBeat().getStart() > (bStart + voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.EIGHTH))) ){ TGDuration duration = newDuration(TGDuration.EIGHTH); duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); bDuration = (duration.getTime() * 2); } } //second time else if( (bStart % (TGDuration.QUARTER_TIME / 2)) == 0){ TGVoice v = getPreviousBeat(voice,bIndex); if(v == null || ( v.getBeat().getStart() < (bStart - voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.EIGHTH)) )){ TGDuration duration = newDuration(TGDuration.EIGHTH); duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); bStart = ( (bStart - voice.getDuration().getTime()) + (duration.getTime() * 2)); bDuration = duration.getTime(); } } } }else if(voice.getBeat().getMeasure().getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){ if(voice.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH))){ //first time if( (bStart % (TGDuration.QUARTER_TIME / 2)) == 0){ TGVoice v = getNextBeat(voice,bIndex); if(v == null || ( v.getBeat().getStart() > (bStart + voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH))) ){ TGDuration duration = newDuration(TGDuration.SIXTEENTH); duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); bDuration = (duration.getTime() * 2); } } //second time else if( (bStart % (TGDuration.QUARTER_TIME / 4)) == 0){ TGVoice v = getPreviousBeat(voice,bIndex); if(v == null || ( v.getBeat().getStart() < (bStart - voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH)) )){ TGDuration duration = newDuration(TGDuration.SIXTEENTH); duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); bStart = ( (bStart - voice.getDuration().getTime()) + (duration.getTime() * 2)); bDuration = duration.getTime(); } } } } return new BeatData(bStart, bDuration); } private TGDuration newDuration(int value){ TGDuration duration = this.manager.getFactory().newDuration(); duration.setValue(value); return duration; } private TGVoice getPreviousBeat(TGVoice beat,int bIndex){ TGVoice previous = null; for (int b = bIndex - 1; b >= 0; b--) { TGBeat current = beat.getBeat().getMeasure().getBeat( b ); if(current.getStart() < beat.getBeat().getStart() && !current.getVoice(beat.getIndex()).isEmpty()){ if(previous == null || current.getStart() > previous.getBeat().getStart()){ previous = current.getVoice(beat.getIndex()); } } } return previous; } private TGVoice getNextBeat(TGVoice beat,int bIndex){ TGVoice next = null; for (int b = bIndex + 1; b < beat.getBeat().getMeasure().countBeats(); b++) { TGBeat current = beat.getBeat().getMeasure().getBeat( b ); if(current.getStart() > beat.getBeat().getStart() && !current.getVoice(beat.getIndex()).isEmpty()){ if(next == null || current.getStart() < next.getBeat().getStart()){ next = current.getVoice(beat.getIndex()); } } } return next; } private TGNote getNextNote(TGNote note,TGTrack track, int mIndex, int bIndex, boolean breakAtRest){ int nextBIndex = (bIndex + 1); int measureCount = ( this.eHeader == -1 ? track.countMeasures() : Math.min( this.eHeader, track.countMeasures() ) ); for (int m = mIndex; m < measureCount; m++) { TGMeasure measure = track.getMeasure( m ); int beatCount = measure.countBeats(); for (int b = nextBIndex; b < beatCount; b++) { TGBeat beat = measure.getBeat( b ); TGVoice voice = beat.getVoice( note.getVoice().getIndex() ); if( !voice.isEmpty() ){ int noteCount = voice.countNotes(); for (int n = 0; n < noteCount; n++) { TGNote currNote = voice.getNote( n ); if(currNote.getString() == note.getString()){ return currNote; } } if( breakAtRest ){ return null; } } } nextBIndex = 0; } return null; } private TGNote getPreviousNote(TGNote note,TGTrack track, int mIndex, int bIndex, boolean breakAtRest){ int nextBIndex = bIndex; for (int m = mIndex; m >= 0; m--) { TGMeasure measure = track.getMeasure( m ); if( this.sHeader == -1 || this.sHeader <= measure.getNumber() ){ nextBIndex = (nextBIndex < 0 ? measure.countBeats() : nextBIndex); for (int b = (nextBIndex - 1); b >= 0; b--) { TGBeat beat = measure.getBeat( b ); TGVoice voice = beat.getVoice( note.getVoice().getIndex() ); if( !voice.isEmpty() ){ int noteCount = voice.countNotes(); for (int n = 0; n < noteCount; n ++) { TGNote current = voice.getNote( n ); if(current.getString() == note.getString()){ return current; } } if( breakAtRest ){ return null; } } } } nextBIndex = -1; } return null; } private class BeatData{ private long start; private long duration; public BeatData(long start,long duration){ this.start = start; this.duration = duration; } public long getDuration() { return this.duration; } public long getStart() { return this.start; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencer.java0000644000175000017500000000141211273045225027760 0ustar julianjulianpackage org.herac.tuxguitar.player.base; public interface MidiSequencer extends MidiDevice{ public void start() throws MidiPlayerException; public void stop() throws MidiPlayerException; public boolean isRunning() throws MidiPlayerException; public void setTickPosition(long tickPosition) throws MidiPlayerException; public long getTickPosition() throws MidiPlayerException; public long getTickLength() throws MidiPlayerException; public void setTransmitter( MidiTransmitter transmitter) throws MidiPlayerException; public MidiSequenceHandler createSequence(int tracks) throws MidiPlayerException; public void setSolo(int index,boolean solo) throws MidiPlayerException; public void setMute(int index,boolean mute) throws MidiPlayerException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java0000644000175000017500000000372611273045225031011 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiSequencerEmpty implements MidiSequencer{ public void open() { // Not implemented } public void close() { // Not implemented } public void check() { // Not implemented } public MidiSequenceHandler createSequence(int tracks) { return new MidiSequenceHandler(tracks) { public void notifyFinish() { // Not implemented } public void addTimeSignature(long tick, int track, TGTimeSignature ts) { // Not implemented } public void addTempoInUSQ(long tick, int track, int usq) { // Not implemented } public void addProgramChange(long tick, int track, int channel,int instrument) { // Not implemented } public void addPitchBend(long tick, int track, int channel, int value) { // Not implemented } public void addNoteOn(long tick, int track, int channel, int note,int velocity) { // Not implemented } public void addNoteOff(long tick, int track, int channel, int note,int velocity) { // Not implemented } public void addControlChange(long tick, int track, int channel,int controller, int value) { // Not implemented } }; } public void setTransmitter(MidiTransmitter transmitter) throws MidiPlayerException { // Not implemented } public long getTickLength() { // Not implemented return 0; } public long getTickPosition() { // Not implemented return 0; } public boolean isRunning() { // Not implemented return false; } public void setMute(int index, boolean mute) { //not implemented } public void setSolo(int index, boolean solo) { // Not implemented } public void setTickPosition(long tickPosition) { // Not implemented } public void start() { // Not implemented } public void stop() { // Not implemented } public String getKey() { return null; } public String getName() { return null; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerProvider.java0000644000175000017500000000034111273045225031473 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import java.util.List; public interface MidiSequencerProvider { public List listSequencers() throws MidiPlayerException; public void closeAll() throws MidiPlayerException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiTransmitter.java0000644000175000017500000000614311273045225030350 0ustar julianjulianpackage org.herac.tuxguitar.player.base; import java.util.ArrayList; import java.util.List; public class MidiTransmitter { private List receivers; public MidiTransmitter(){ this.receivers = new ArrayList(); } public void sendSystemReset() throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendSystemReset(); } } public void sendAllNotesOff() throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendAllNotesOff(); } } public void sendNoteOn(int channel, int key, int velocity) throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendNoteOn(channel, key, velocity); } } public void sendNoteOff(int channel, int key, int velocity) throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendNoteOff(channel, key, velocity); } } public void sendProgramChange(int channel, int value) throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendProgramChange(channel, value); } } public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendControlChange(channel, controller, value); } } public void sendPitchBend(int channel, int value) throws MidiPlayerException { for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); receiver.getReceiver().sendPitchBend(channel, value); } } public void addReceiver(String id, MidiReceiver receiver){ MidiReceiverItem item = getReceiver( id ); if( item == null ){ this.receivers.add( new MidiReceiverItem( id , receiver ) ); } } public void removeReceiver(String id){ MidiReceiverItem item = getReceiver( id ); if( item != null ){ this.receivers.remove( item ); } } private MidiReceiverItem getReceiver(String id){ if( id != null ){ for( int i = 0 ; i < this.receivers.size() ; i ++ ){ MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i ); if( receiver.getId() != null && receiver.getId().equals( id ) ){ return receiver; } } } return null; } private class MidiReceiverItem { private String id; private MidiReceiver receiver; public MidiReceiverItem(String id, MidiReceiver receiver){ this.id = id; this.receiver = receiver; } public String getId() { return this.id; } public MidiReceiver getReceiver() { return this.receiver; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/factory/TGFactory.java0000644000175000017500000001041711273045225027301 0ustar julianjulianpackage org.herac.tuxguitar.song.factory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGScale; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; public class TGFactory { public TGSong newSong(){ return new TGSong() { //TGSong Implementation }; } public TGLyric newLyric(){ return new TGLyric(){ //TGLyric Implementation }; } public TGMarker newMarker(){ return new TGMarker(this){ //TGMarker Implementation }; } public TGChord newChord(int length){ return new TGChord(length){ //TGChord Implementation }; } public TGScale newScale(){ return new TGScale(){ //TGScale Implementation }; } public TGColor newColor(){ return new TGColor(){ //TGColor Implementation }; } public TGDuration newDuration(){ return new TGDuration(this){ //TGDuration Implementation }; } public TGDivisionType newDivisionType(){ return new TGDivisionType(){ //TGDivisionType Implementation }; } public TGTimeSignature newTimeSignature(){ return new TGTimeSignature(this){ //TGTimeSignature Implementation }; } public TGTempo newTempo(){ return new TGTempo(){ //TGTempo Implementation }; } public TGChannel newChannel(){ return new TGChannel(){ //TGChannel Implementation }; } public TGTrack newTrack(){ return new TGTrack(this){ //TGTrack Implementation }; } public TGMeasureHeader newHeader(){ return new TGMeasureHeader(this){ //TGMeasureHeader Implementation }; } public TGMeasure newMeasure(TGMeasureHeader header){ return new TGMeasure(header){ //TGMeasure Implementation }; } public TGBeat newBeat(){ return new TGBeat(this){ //TGBeat Implementation }; } public TGVoice newVoice(int index){ return new TGVoice(this, index){ //TGVoice Implementation }; } public TGNote newNote(){ return new TGNote(this){ //TGNote Implementation }; } public TGString newString(){ return new TGString(){ //TGString Implementation }; } public TGStroke newStroke(){ return new TGStroke(){ //TGString Implementation }; } public TGText newText(){ return new TGText(){ //TGString Implementation }; } public TGNoteEffect newEffect(){ return new TGNoteEffect(){ //TGNoteEffect Implementation }; } public TGEffectBend newEffectBend(){ return new TGEffectBend(){ //TGEffectBend Implementation }; } public TGEffectTremoloBar newEffectTremoloBar(){ return new TGEffectTremoloBar(){ //TGEffectTremoloBar Implementation }; } public TGEffectGrace newEffectGrace(){ return new TGEffectGrace(){ //TGEffectGrace Implementation }; } public TGEffectHarmonic newEffectHarmonic(){ return new TGEffectHarmonic(){ //TGEffectHarmonic Implementation }; } public TGEffectTrill newEffectTrill(){ return new TGEffectTrill(this){ //TGEffectTrill Implementation }; } public TGEffectTremoloPicking newEffectTremoloPicking(){ return new TGEffectTremoloPicking(this){ //TGEffectTremoloPicking Implementation }; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGSongSegment.java0000644000175000017500000000222011273045225030107 0ustar julianjulianpackage org.herac.tuxguitar.song.helpers; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGMeasureHeader; public class TGSongSegment { private List headers; private List tracks; public TGSongSegment(){ this.headers = new ArrayList(); this.tracks = new ArrayList(); } public List getHeaders() { return this.headers; } public List getTracks() { return this.tracks; } public void addTrack(int track,List measures){ this.tracks.add(new TGTrackSegment(track,measures)); } public boolean isEmpty(){ return (this.headers.isEmpty() || this.tracks.isEmpty()); } public TGSongSegment clone(TGFactory factory){ TGSongSegment segment = new TGSongSegment(); for(int i = 0;i < getHeaders().size();i++){ TGMeasureHeader header = (TGMeasureHeader)getHeaders().get(i); segment.getHeaders().add(header.clone(factory)); } for(int i = 0;i < getTracks().size();i++){ TGTrackSegment trackMeasure = (TGTrackSegment)getTracks().get(i); segment.getTracks().add(trackMeasure.clone(factory,segment.getHeaders())); } return segment; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGSongSegmentHelper.java0000644000175000017500000001720011273045225031253 0ustar julianjulianpackage org.herac.tuxguitar.song.helpers; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.managers.TGTrackManager; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGTrack; public class TGSongSegmentHelper { private TGSongManager sm; public TGSongSegmentHelper(TGSongManager sm){ this.sm = sm; } public TGSongSegment copyMeasures(int m1, int m2){ TGSongSegment segment = new TGSongSegment(); int number1 = Math.max(1,m1); int number2 = Math.min(this.sm.getSong().countMeasureHeaders(),m2); for(int number = number1; number <= number2;number ++){ segment.getHeaders().add( this.sm.getMeasureHeader(number) ); } Iterator it = this.sm.getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); List measures = new ArrayList(); for(int number = number1; number <= number2;number ++){ measures.add(this.sm.getTrackManager().getMeasure(track, number)); } segment.addTrack(track.getNumber(),measures); } return segment.clone(this.sm.getFactory()); } public TGSongSegment copyMeasures(int m1, int m2,TGTrack track){ TGSongSegment segment = new TGSongSegment(); List measures = new ArrayList(); int number1 = Math.max(1,m1); int number2 = Math.min(this.sm.getSong().countMeasureHeaders(),m2); for(int number = number1; number <= number2;number ++){ segment.getHeaders().add( this.sm.getMeasureHeader(number) ); measures.add(this.sm.getTrackManager().getMeasure(track, number)); } segment.addTrack(track.getNumber(),measures); return segment.clone(this.sm.getFactory()); } public void insertMeasures(TGSongSegment segment,int fromNumber,long move, int track){ List headers = new ArrayList(); this.sm.moveMeasureHeaders(segment.getHeaders(),move,0,false); int headerNumber = fromNumber; Iterator it = segment.getHeaders().iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); header.setNumber(headerNumber); headers.add(header); headerNumber ++; } long start = ((TGMeasureHeader)headers.get(0)).getStart(); long end = ((TGMeasureHeader)headers.get(headers.size() - 1)).getStart() + ((TGMeasureHeader)headers.get(headers.size() - 1)).getLength(); List headersBeforeEnd = this.sm.getMeasureHeadersBeforeEnd(start); this.sm.moveMeasureHeaders(headersBeforeEnd,end - start,headers.size(),true); it = segment.getHeaders().iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); this.sm.addMeasureHeader(header.getNumber() - 1,header); } it = this.sm.getSong().getTracks(); while (it.hasNext()) { TGTrack currTrack = (TGTrack) it.next(); List measures = null; Iterator tracks = segment.getTracks().iterator(); while(tracks.hasNext()){ TGTrackSegment tSegment = (TGTrackSegment)tracks.next(); if( ((track > 0 && segment.getTracks().size() == 1)?track:tSegment.getTrack()) == currTrack.getNumber()){ measures = tSegment.getMeasures(); break; } } if(measures == null){ TGTrackManager tm = this.sm.getTrackManager(); TGMeasure measure = (fromNumber > 1 ? tm.getMeasure(currTrack , (fromNumber - 1) ) : tm.getMeasure(currTrack, headerNumber )); int clef = ( measure != null ? measure.getClef() : TGMeasure.DEFAULT_CLEF ); int keySignature = ( measure != null ? measure.getKeySignature() : TGMeasure.DEFAULT_KEY_SIGNATURE ); measures = getEmptyMeasures(segment.getHeaders().size(), clef, keySignature); } for(int i = 0;i < measures.size();i++){ TGMeasure measure = (TGMeasure)measures.get(i); measure.setHeader((TGMeasureHeader)headers.get(i)); this.sm.getMeasureManager().moveAllBeats(measure,move); } insertMeasures(currTrack,measures); } } public void insertMeasures(TGTrack track,List measures){ if(!measures.isEmpty()){ Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); this.sm.getMeasureManager().removeNotesAfterString(measure, track.stringCount()); this.sm.getTrackManager().addMeasure(track,(measure.getNumber() - 1),measure); } } } public void replaceMeasures(TGSongSegment segment,long move, int track) { boolean replaceHeader = ( track == 0 || this.sm.getSong().countTracks() == 1 ); List measureHeaders = new ArrayList(); this.sm.moveMeasureHeaders(segment.getHeaders(),move,0,false); Iterator sHeaders = segment.getHeaders().iterator(); while(sHeaders.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)sHeaders.next(); TGMeasureHeader replace = (replaceHeader ? this.sm.replaceMeasureHeader(header) : this.sm.getMeasureHeaderAt(header.getStart())); Iterator nextHeaders = this.sm.getMeasureHeadersAfter(replace.getNumber()).iterator(); long nextStart = (replace.getStart() + replace.getLength()); while(nextHeaders.hasNext()){ TGMeasureHeader next = (TGMeasureHeader)nextHeaders.next(); this.sm.moveMeasureComponents(next, (nextStart - next.getStart() )); this.sm.moveMeasureHeader(next, (nextStart - next.getStart() ) , 0); nextStart = (next.getStart() + next.getLength()); } measureHeaders.add(replace); } Iterator sTracks = segment.getTracks().iterator(); while(sTracks.hasNext()){ TGTrackSegment tSegment = (TGTrackSegment)sTracks.next(); TGTrack currTrack = this.sm.getTrack( (track > 0 && segment.getTracks().size() == 1)?track:tSegment.getTrack()); if(currTrack != null){ for(int i = 0;i < tSegment.getMeasures().size();i++){ TGMeasure measure = (TGMeasure)tSegment.getMeasures().get(i); measure.setHeader((TGMeasureHeader)measureHeaders.get(i)); //this.sm.getMeasureManager().removeNotesAfterString(measure, currTrack.stringCount()); //this.sm.getMeasureManager().moveAllBeats(measure,move); this.sm.getMeasureManager().moveAllBeats(measure,move); this.sm.getMeasureManager().removeVoicesOutOfTime(measure); this.sm.getMeasureManager().removeNotesAfterString(measure, currTrack.stringCount()); this.sm.getTrackManager().replaceMeasure(currTrack,measure); } } } } private List getEmptyMeasures(int count, int clef, int keySignature) { List measures = new ArrayList(); for(int i = 0 ; i < count ; i ++ ){ TGMeasure measure = this.sm.getFactory().newMeasure(null); measure.setClef(clef); measure.setKeySignature(keySignature); measures.add(measure); } return measures; } public TGSongSegment createSegmentCopies( TGSongSegment srcSegment , int count ){ TGSongSegment segment = srcSegment.clone( this.sm.getFactory() ); int mCount = segment.getHeaders().size(); int tCount = segment.getTracks().size(); TGMeasureHeader fMeasure = (TGMeasureHeader)segment.getHeaders().get( 0 ); TGMeasureHeader lMeasure = (TGMeasureHeader)segment.getHeaders().get( mCount - 1 ); long mMove = ( ( lMeasure.getStart() + lMeasure.getLength() ) - fMeasure.getStart() ); for( int i = 1 ; i < count ; i ++ ){ for(int m = 0; m < mCount; m++ ){ TGMeasureHeader header = ( (TGMeasureHeader)segment.getHeaders().get(m) ).clone( this.sm.getFactory() ); segment.getHeaders().add( header ); this.sm.moveMeasureHeader(header,(mMove * i),(mCount * i)); for( int t = 0 ; t < tCount ; t ++ ){ TGTrackSegment track = (TGTrackSegment)segment.getTracks().get( t ); TGMeasure measure = ((TGMeasure)track.getMeasures().get( m )).clone(this.sm.getFactory(), header ); track.getMeasures().add( measure ); this.sm.getMeasureManager().moveAllBeats(measure, (mMove * i)); } } } return segment; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGTrackSegment.java0000644000175000017500000000154211273045225030253 0ustar julianjulianpackage org.herac.tuxguitar.song.helpers; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; public class TGTrackSegment { private int track; private List measures; public TGTrackSegment(int track,List measures){ this.track = track; this.measures = measures; } public List getMeasures() { return this.measures; } public int getTrack() { return this.track; } public Object clone(TGFactory factory,List headers){ List measures = new ArrayList(); for(int i = 0;i < getMeasures().size();i++){ TGMeasure measure = (TGMeasure)getMeasures().get(i); measures.add(measure.clone(factory,(TGMeasureHeader)headers.get(i))); } return new TGTrackSegment(getTrack(),measures); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java0000644000175000017500000021643411273045225030723 0ustar julianjulianpackage org.herac.tuxguitar.song.managers; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; public class TGMeasureManager { private TGSongManager songManager; public TGMeasureManager(TGSongManager songManager){ this.songManager = songManager; } public TGSongManager getSongManager(){ return this.songManager; } public void orderBeats(TGMeasure measure){ for(int i = 0;i < measure.countBeats();i++){ TGBeat minBeat = null; for(int j = i;j < measure.countBeats();j++){ TGBeat beat = measure.getBeat(j); if(minBeat == null || beat.getStart() < minBeat.getStart()){ minBeat = beat; } } measure.moveBeat(i, minBeat); } } /** * Agrega un beat al compas */ public void addBeat(TGMeasure measure,TGBeat beat){ //Verifico si entra en el compas //if(validateDuration(measure,beat,false,false)){ //Agrego el beat measure.addBeat(beat); //} } public void removeBeat(TGBeat beat){ beat.getMeasure().removeBeat(beat); } public void removeBeat(TGMeasure measure,long start,boolean moveNextComponents){ TGBeat beat = getBeat(measure, start); if(beat != null){ removeBeat(beat, moveNextComponents); } } /** * Elimina un silencio del compas. * si se asigna moveNextComponents = true. los componentes que le siguen * se moveran para completar el espacio vacio que dejo el silencio */ public void removeBeat(TGBeat beat,boolean moveNextBeats){ TGMeasure measure = beat.getMeasure(); removeBeat(beat); if(moveNextBeats){ TGDuration minimumDuration = getMinimumDuration(beat); long start = beat.getStart(); long length = (minimumDuration != null ? minimumDuration.getTime() : 0); TGBeat next = getNextBeat(measure.getBeats(),beat); if(next != null){ length = next.getStart() - start; } moveBeatsInMeasure(beat.getMeasure(),start + length,-length, minimumDuration); } } public void removeEmptyBeats(TGMeasure measure){ List beats = new ArrayList(); Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); boolean emptyBeat = true; for( int v = 0; v < beat.countVoices() ; v ++){ TGVoice voice = beat.getVoice( v ); if(!voice.isEmpty()){ emptyBeat = false; } } if( emptyBeat ){ beats.add( beat ); } } it = beats.iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); this.removeBeat( beat ); } } public void removeBeatsBeforeEnd(TGMeasure measure,long fromStart){ List beats = getBeatsBeforeEnd( measure.getBeats() , fromStart); Iterator it = beats.iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat) it.next(); removeBeat(beat); } } public void removeBeatsBeetween(TGMeasure measure,long p1, long p2){ List beats = getBeatsBeetween( measure.getBeats() , p1, p2 ); Iterator it = beats.iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat) it.next(); removeBeat(beat); } } public void addNote(TGMeasure measure,long start, TGNote note, TGDuration duration, int voice){ TGBeat beat = getBeat(measure, start); if(beat != null){ addNote(beat, note, duration, voice); } } public void addNote(TGBeat beat, TGNote note, TGDuration duration, int voice){ addNote(beat, note, duration, beat.getStart(),voice); } public void addNote(TGBeat beat, TGNote note, TGDuration duration, long start, int voice){ boolean emptyVoice = beat.getVoice( voice ).isEmpty(); if( emptyVoice ){ beat.getVoice( voice ).setEmpty( false ); } //Verifico si entra en el compas if(validateDuration(beat.getMeasure(),beat, voice, duration,true,true)){ //Borro lo que haya en la misma posicion for( int v = 0 ; v < beat.countVoices() ; v ++ ){ removeNote(beat.getMeasure(),beat.getStart(), v, note.getString(), false); } duration.copy(beat.getVoice(voice).getDuration()); //trato de agregar un silencio similar al lado tryChangeSilenceAfter(beat.getMeasure(),beat.getVoice(voice)); // Despues de cambiar la duracion, verifico si hay un beat mejor para agregar la nota. TGVoice realVoice = beat.getVoice(voice); if(realVoice.getBeat().getStart() != start){ TGVoice beatIn = getVoiceIn(realVoice.getBeat().getMeasure(), start, voice); if( beatIn != null ) { realVoice = beatIn; } } realVoice.addNote(note); }else{ beat.getVoice( voice ).setEmpty( emptyVoice ); } } public void removeNote(TGNote note, boolean checkRestBeat){ //note.getVoice().removeNote(note); TGVoice voice = note.getVoice(); if( voice != null ){ // Remove the note voice.removeNote(note); TGBeat beat = voice.getBeat(); if(checkRestBeat && beat.isRestBeat()){ //Anulo un posible stroke beat.getStroke().setDirection( TGStroke.STROKE_NONE ); //Borro un posible acorde if( beat.getMeasure() != null ){ removeChord(beat.getMeasure(), beat.getStart()); } } } } public void removeNote(TGNote note){ this.removeNote(note, true); } public void removeNote(TGMeasure measure,long start, int voiceIndex,int string){ this.removeNote(measure, start, voiceIndex, string, true); } /** * Elimina los Componentes que empiecen en Start y esten en la misma cuerda * Si hay un Silencio lo borra sin importar la cuerda */ public void removeNote(TGMeasure measure,long start, int voiceIndex,int string, boolean checkRestBeat){ TGBeat beat = getBeat(measure, start); if(beat != null){ TGVoice voice = beat.getVoice(voiceIndex); for( int i = 0; i < voice.countNotes(); i ++){ TGNote note = voice.getNote(i); if(note.getString() == string){ removeNote(note , checkRestBeat); return; } } } } public void removeNotesAfterString(TGMeasure measure,int string){ List notesToRemove = new ArrayList(); Iterator beats = measure.getBeats().iterator(); while(beats.hasNext()){ TGBeat beat = (TGBeat)beats.next(); for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); Iterator notes = voice.getNotes().iterator(); while(notes.hasNext()){ TGNote note = (TGNote)notes.next(); if(note.getString() > string){ notesToRemove.add(note); } } } } Iterator it = notesToRemove.iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); removeNote(note); } } /** * Retorna Todas las Notas en la posicion Start */ public List getNotes(TGMeasure measure,long start){ List notes = new ArrayList(); TGBeat beat = getBeat(measure, start); if(beat != null){ for(int v = 0 ; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); notes.add(note); } } } return notes; } /** * Retorna Todas las Notas en el pulso */ public List getNotes(TGBeat beat){ List notes = new ArrayList(); if(beat != null){ for(int v = 0 ; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); if( !voice.isEmpty() && !voice.isRestVoice() ){ Iterator it = voice.getNotes().iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); notes.add(note); } } } } return notes; } /** * Retorna la Nota en la posicion y cuerda */ public TGNote getNote(TGMeasure measure,long start,int string) { TGBeat beat = getBeat(measure, start); if(beat != null){ return getNote(beat, string); } return null; } /** * Retorna la Nota en la cuerda */ public TGNote getNote(TGBeat beat,int string) { for( int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice(v); if(!voice.isEmpty()){ TGNote note = getNote(voice, string); if(note != null){ return note; } } } return null; } public TGNote getNote(TGVoice voice,int string) { Iterator it = voice.getNotes().iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); if (note.getString() == string) { return note; } } return null; } public TGNote getPreviousNote(TGMeasure measure,long start, int voiceIndex, int string) { TGBeat beat = getBeat(measure, start); if( beat != null ){ TGBeat previous = getPreviousBeat(measure.getBeats(),beat); while(previous != null){ TGVoice voice = previous.getVoice(voiceIndex); if(!voice.isEmpty()){ for (int i = 0; i < voice.countNotes(); i++) { TGNote current = voice.getNote(i); if (current.getString() == string) { return current; } } } previous = getPreviousBeat(measure.getBeats(),previous); } } return null; } public TGNote getNextNote(TGMeasure measure,long start, int voiceIndex, int string) { TGBeat beat = getBeat(measure, start); if( beat != null ){ TGBeat next = getNextBeat(measure.getBeats(),beat); while(next != null){ TGVoice voice = next.getVoice(voiceIndex); if(!voice.isEmpty()){ for (int i = 0; i < voice.countNotes(); i++) { TGNote current = voice.getNote(i); if (current.getString() == string) { return current; } } } next = getNextBeat(measure.getBeats(),next); } } return null; } public TGDuration getMinimumDuration(TGBeat beat){ TGDuration minimumDuration = null; for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); if( !voice.isEmpty() ){ if(minimumDuration == null || voice.getDuration().getTime() < minimumDuration.getTime()){ minimumDuration = voice.getDuration(); } } } return minimumDuration; } public TGBeat getBeat(TGTrack track,long start) { Iterator measures = track.getMeasures(); while( measures.hasNext() ){ TGMeasure measure = (TGMeasure)measures.next(); Iterator beats = measure.getBeats().iterator(); while(beats.hasNext()){ TGBeat beat = (TGBeat)beats.next(); if (beat.getStart() == start) { return beat; } } } return null; } /** * Retorna las Nota en la posicion y cuerda */ public TGBeat getBeat(TGMeasure measure,long start) { Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); if (beat.getStart() == start) { return beat; } } return null; } /** * Retorna las Nota en la posicion y cuerda */ public TGBeat getBeatIn(TGMeasure measure,long start) { TGBeat beatIn = null; Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); TGDuration duration = getMinimumDuration(beat); if (beat.getStart() <= start && (beat.getStart() + duration.getTime() > start)) { if(beatIn == null || beat.getStart() > beatIn.getStart()){ beatIn = beat; } } } return beatIn; } /** * Retorna las Nota en la posicion y cuerda */ public TGVoice getVoiceIn(TGMeasure measure,long start, int voiceIndex) { Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); TGVoice voice = beat.getVoice(voiceIndex); if (!voice.isEmpty() && beat.getStart() <= start && (beat.getStart() + voice.getDuration().getTime() > start)) { return voice; } } return null; } /** * Retorna el Siguiente Componente */ public TGBeat getNextBeat(List beats,TGBeat beat) { TGBeat next = null; for (int i = 0; i < beats.size(); i++) { TGBeat current = (TGBeat) beats.get(i); if (current.getStart() > beat.getStart()) { if (next == null) { next = current; } else if (current.getStart() < next.getStart()) { next = current; } /*else if (current.getStart() == next.getStart() && current.getDuration().getTime() <= next.getDuration().getTime()) { next = current; }*/ } } return next; } /** * Retorna el Componente Anterior */ public TGBeat getPreviousBeat(List beats,TGBeat beat) { TGBeat previous = null; for (int i = 0; i < beats.size(); i++) { TGBeat current = (TGBeat) beats.get(i); if (current.getStart() < beat.getStart()) { if (previous == null) { previous = current; } else if (current.getStart() > previous.getStart()) { previous = current; } /*else if (current.getStart() == previous.getStart() && current.getDuration().getTime() <= previous.getDuration().getTime()) { previous = current; }*/ } } return previous; } /** * Retorna el Primer Componente */ public TGBeat getFirstBeat(List components) { TGBeat first = null; for (int i = 0; i < components.size(); i++) { TGBeat component = (TGBeat) components.get(i); if (first == null || component.getStart() < first.getStart()) { first = component; } } return first; } /** * Retorna el Ultimo Componente */ public TGBeat getLastBeat(List components) { TGBeat last = null; for (int i = 0; i < components.size(); i++) { TGBeat component = (TGBeat) components.get(i); if (last == null || last.getStart() < component.getStart()) { last = component; } } return last; } /** * Retorna el Siguiente Componente */ /* public TGBeat getNextRestBeat(List beats,TGBeat component) { TGBeat next = getNextBeat(beats, component); while(next != null && !next.isRestBeat()){ next = getNextBeat(beats, next); } return next; } */ /** * Retorna Todos los desde Start hasta el final del compas */ public List getBeatsBeforeEnd(List beats,long fromStart) { List list = new ArrayList(); Iterator it = beats.iterator(); while(it.hasNext()){ TGBeat current = (TGBeat)it.next(); if (current.getStart() >= fromStart) { list.add(current); } } return list; } public List getBeatsBeetween(List beats,long p1, long p2) { List list = new ArrayList(); Iterator it = beats.iterator(); while(it.hasNext()){ TGBeat current = (TGBeat)it.next(); if (current.getStart() >= p1 && current.getStart() < p2 ) { list.add(current); } } return list; } public void locateBeat( TGBeat beat, TGTrack track , boolean newMeasureAlsoForRestBeats) { if( beat.getMeasure() != null ){ beat.getMeasure().removeBeat(beat); beat.setMeasure(null); } TGMeasure newMeasure = getSongManager().getTrackManager().getMeasureAt(track, beat.getStart() ); if( newMeasure == null ){ boolean createNewMeasure = newMeasureAlsoForRestBeats; if( !createNewMeasure ){ createNewMeasure = ( !beat.isRestBeat() || beat.isTextBeat() ); } if( createNewMeasure ){ while( newMeasure == null && beat.getStart() >= TGDuration.QUARTER_TIME){ getSongManager().addNewMeasureBeforeEnd(); newMeasure = getSongManager().getTrackManager().getMeasureAt(track, beat.getStart() ); } } } if( newMeasure != null ){ long mStart = newMeasure.getStart(); long mLength = newMeasure.getLength(); long bStart = beat.getStart(); for( int v = 0 ; v < beat.countVoices() ; v ++ ){ TGVoice voice = beat.getVoice( v ); long vDuration = voice.getDuration().getTime(); if(!voice.isEmpty() && (bStart + vDuration) > (mStart + mLength) ){ long vTiedDuration = ( (bStart + vDuration) - (mStart + mLength) ); vDuration -= vTiedDuration; if( vDuration > 0 ){ TGDuration duration = TGDuration.fromTime(getSongManager().getFactory(), vDuration); if( duration != null ){ duration.copy( voice.getDuration() ); } } if( vTiedDuration > 0 ) { TGDuration newVoiceDuration = TGDuration.fromTime(getSongManager().getFactory(), vTiedDuration); if( newVoiceDuration != null ){ long newBeatStart = (bStart + vDuration); TGBeat newBeat = getBeat(track, newBeatStart); if( newBeat == null ){ newBeat = getSongManager().getFactory().newBeat(); newBeat.setStart( (bStart + vDuration) ); } TGVoice newVoice = newBeat.getVoice( v ); for( int n = 0 ; n < voice.countNotes() ; n ++ ){ TGNote note = voice.getNote( n ); TGNote newNote = getSongManager().getFactory().newNote(); newNote.setTiedNote( true ); newNote.setValue( note.getValue() ); newNote.setString( note.getString() ); newNote.setVelocity( note.getVelocity() ); newVoice.addNote( newNote ); } newVoice.setEmpty( false ); newVoiceDuration.copy( newVoice.getDuration() ); locateBeat(newBeat, track, newMeasureAlsoForRestBeats); } } } } newMeasure.addBeat(beat); } } public void moveOutOfBoundsBeatsToNewMeasure(TGMeasure measure){ this.moveOutOfBoundsBeatsToNewMeasure(measure, true ); } public void moveOutOfBoundsBeatsToNewMeasure(TGMeasure measure, boolean newMeasureAlsoForRestBeats ){ List beats = new ArrayList(); long mStart = measure.getStart(); long mLength = measure.getLength(); for( int i = 0; i < measure.countBeats() ; i ++ ){ TGBeat beat = measure.getBeat( i ); if( beat.getStart() < mStart || beat.getStart() >= mStart + mLength ){ beats.add( beat ); } else{ long bStart = beat.getStart(); for( int v = 0 ; v < beat.countVoices() ; v ++ ){ TGVoice voice = beat.getVoice( v ); long vDuration = voice.getDuration().getTime(); if(!voice.isEmpty() && (bStart + vDuration) > (mStart + mLength) ){ beats.add( beat ); } } } } while( !beats.isEmpty() ){ TGBeat beat = (TGBeat)beats.get( 0 ); if( beat.getMeasure() != null ){ beat.getMeasure().removeBeat(beat); beat.setMeasure(null); } this.locateBeat(beat, measure.getTrack(), newMeasureAlsoForRestBeats); beats.remove(0); } } public boolean moveBeatsInMeasure(TGMeasure measure,long start,long theMove, TGDuration fillDuration){ if( theMove == 0 ){ return false; } boolean success = true; long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); // Muevo los componentes List beatsToMove = getBeatsBeforeEnd(measure.getBeats(),start); moveBeats(beatsToMove,theMove); if(success){ List beatsToRemove = new ArrayList(); List beats = new ArrayList(measure.getBeats()); // Verifica los silencios a eliminar al principio del compas TGBeat first = getFirstBeat( beats ); while(first != null && first.isRestBeat() && !first.isTextBeat() && first.getStart() < measureStart){ beats.remove(first); beatsToRemove.add(first); first = getNextBeat( beats,first); } // Verifica los silencios a eliminar al final del compas TGBeat last = getLastBeat(beats); TGDuration lastDuration = (last != null ? getMinimumDuration(last) : null); while(last != null && lastDuration != null && last.isRestBeat() && !last.isTextBeat() && (last.getStart() + lastDuration.getTime() ) > measureEnd ){ beats.remove(last); beatsToRemove.add(last); last = getPreviousBeat(beats,last); lastDuration = (last != null ? getMinimumDuration(last) : null); } // Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio if(first != null && last != null && lastDuration != null){ if(first.getStart() < measureStart || (last.getStart() + lastDuration.getTime()) > measureEnd){ success = false; } } if(success){ // Elimino los silencios que quedaron fuera del compas. Iterator it = beatsToRemove.iterator(); while( it.hasNext() ){ TGBeat beat = (TGBeat)it.next(); removeBeat(beat); } // Se crean silencios en los espacios vacios, si la duracion fue especificada. if( fillDuration != null ){ if( theMove < 0 ){ last = getLastBeat(measure.getBeats()); lastDuration = (last != null ? getMinimumDuration(last) : null); TGBeat beat = getSongManager().getFactory().newBeat(); beat.setStart( (last != null && lastDuration != null ? last.getStart() + lastDuration.getTime() : start ) ); if( (beat.getStart() + fillDuration.getTime()) <= measureEnd ){ for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice(v); voice.setEmpty(false); fillDuration.copy( voice.getDuration() ); } addBeat(measure, beat ); } } else{ first = getFirstBeat(getBeatsBeforeEnd(measure.getBeats(),start)); TGBeat beat = getSongManager().getFactory().newBeat(); beat.setStart( start ); if( (beat.getStart() + fillDuration.getTime()) <= (first != null ?first.getStart() : measureEnd ) ){ for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice(v); voice.setEmpty(false); fillDuration.copy( voice.getDuration() ); } addBeat(measure, beat ); } } } } } // Si el movimiento no es satisfactorio, regreso todo como estaba if(! success ){ moveBeats(beatsToMove,-theMove); } return success; } public void moveAllBeats(TGMeasure measure,long theMove){ moveBeats(measure.getBeats(),theMove); } public void moveBeats(TGMeasure measure, long start, long theMove){ moveBeats(getBeatsBeforeEnd(measure.getBeats(), start),theMove); } /** * Mueve los componentes */ private void moveBeats(List beats,long theMove){ Iterator it = beats.iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); moveBeat(beat,theMove); } } /** * Mueve el componente */ private void moveBeat(TGBeat beat,long theMove){ //obtengo el start viejo long start = beat.getStart(); //asigno el nuevo start beat.setStart(start + theMove); } public void cleanBeat(TGBeat beat){ beat.getStroke().setDirection( TGStroke.STROKE_NONE ); if( beat.getText() != null ){ beat.removeText(); } if( beat.getChord() != null){ beat.removeChord(); } this.cleanBeatNotes(beat); } public void cleanBeatNotes(TGBeat beat){ for(int v = 0; v < beat.countVoices(); v ++){ cleanVoiceNotes(beat.getVoice( v )); } } public void cleanBeatNotes(TGMeasure measure, long start){ TGBeat beat = getBeat(measure, start); if(beat != null){ cleanBeatNotes(beat); } } public void cleanVoiceNotes(TGVoice voice){ if(!voice.isEmpty()){ while(voice.countNotes() > 0 ){ TGNote note = voice.getNote(0); removeNote(note); } } } /** * Agrega el acorde al compas */ public void addChord(TGMeasure measure,long start, TGChord chord){ TGBeat beat = getBeat(measure, start); if(beat != null){ addChord(beat, chord); } } /** * Agrega el acorde al compas */ public void addChord(TGBeat beat,TGChord chord){ beat.removeChord(); beat.setChord(chord); } /** * Retorna el acorde en la position */ public TGChord getChord(TGMeasure measure,long start) { TGBeat beat = getBeat(measure, start); if(beat != null){ return beat.getChord(); } return null; } /** * Borra el acorde en la position */ public void removeChord(TGMeasure measure,long start) { TGBeat beat = getBeat(measure, start); if(beat != null){ beat.removeChord(); } } /** * Agrega el texto al compas */ public void addText(TGMeasure measure,long start, TGText text){ TGBeat beat = getBeat(measure, start); if(beat != null){ addText(beat, text); } } /** * Agrega el texto al compas */ public void addText(TGBeat beat,TGText text){ beat.removeText(); if(!text.isEmpty()){ beat.setText(text); } } /** * Retorna el texto en la position */ public TGText getText(TGMeasure measure,long start) { TGBeat beat = getBeat(measure, start); if(beat != null){ return beat.getText(); } return null; } /** * Borra el texto en el pulso */ public void removeText(TGBeat beat){ beat.removeText(); } /** * Borra el texto en la position */ public boolean removeText(TGMeasure measure,long start) { TGBeat beat = getBeat(measure, start); if(beat != null){ removeText(beat); return true; } return false; } public void cleanMeasure(TGMeasure measure){ while( measure.countBeats() > 0){ removeBeat( measure.getBeat(0)); } } /** * Mueve la nota a la cuerda de arriba */ public int shiftNoteUp(TGMeasure measure,long start,int string){ return shiftNote(measure, start, string,-1); } /** * Mueve la nota a la cuerda de abajo */ public int shiftNoteDown(TGMeasure measure,long start,int string){ return shiftNote(measure, start, string,1); } /** * Mueve la nota a la siguiente cuerda */ private int shiftNote(TGMeasure measure,long start,int string,int move){ TGNote note = getNote(measure,start,string); if(note != null){ int nextStringNumber = (note.getString() + move); while(getNote(measure,start,nextStringNumber) != null){ nextStringNumber += move; } if(nextStringNumber >= 1 && nextStringNumber <= measure.getTrack().stringCount()){ TGString currentString = measure.getTrack().getString(note.getString()); TGString nextString = measure.getTrack().getString(nextStringNumber); int noteValue = (note.getValue() + currentString.getValue()); if(noteValue >= nextString.getValue() && ((nextString.getValue() + 30 > noteValue) || measure.getTrack().isPercussionTrack()) ){ note.setValue(noteValue - nextString.getValue()); note.setString(nextString.getNumber()); return note.getString(); } } } return 0; } /** * Mueve la nota 1 semitono arriba */ public boolean moveSemitoneUp(TGMeasure measure,long start,int string){ return moveSemitone(measure, start, string,1); } /** * Mueve la nota 1 semitono abajo */ public boolean moveSemitoneDown(TGMeasure measure,long start,int string){ return moveSemitone(measure, start, string,-1); } /** * Mueve la nota los semitonos indicados */ private boolean moveSemitone(TGMeasure measure,long start,int string,int semitones){ TGNote note = getNote(measure,start,string); if(note != null){ int newValue = (note.getValue() + semitones); if(newValue >= 0 && (newValue < 30 || measure.getTrack().isPercussionTrack()) ){ note.setValue(newValue); return true; } } return false; } /** * Set the beat stroke */ public boolean setStroke(TGMeasure measure,long start,int value, int direction){ TGBeat beat = getBeat(measure, start); if( beat != null ){ beat.getStroke().setValue(value); beat.getStroke().setDirection(direction); return true; } return false; } /** * Verifica si el componente se puede insertar en el compas. * si no puede, con la opcion removeSilences, verifica si el motivo por el * cual no entra es que lo siguen silencios. de ser asi los borra. */ /* public boolean validateDuration(TGMeasure measure,TGBeat beat,boolean moveNextComponents, boolean setCurrentDuration){ return validateDuration(measure, beat, beat.getDuration(),moveNextComponents, setCurrentDuration); } public boolean validateDuration(TGMeasure measure,TGBeat beat,TGDuration duration,boolean moveNextBeats, boolean setCurrentDuration){ int errorMargin = 10; this.orderBeats(measure); long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); long beatStart = beat.getStart(); long beatLength = duration.getTime(); long beatEnd = (beatStart + beatLength); List beats = measure.getBeats(); //Verifico si hay un beat en el mismo lugar, y comparo las duraciones. TGBeat currentBeat = getBeat(measure,beatStart); if(currentBeat != null && beatLength <= currentBeat.getDuration().getTime()){ return true; } //Verifico si hay lugar para meter el beat TGBeat nextComponent = getNextBeat(beats,beat); if(currentBeat == null){ if(nextComponent == null && beatEnd < (measureEnd + errorMargin)){ return true; } if(nextComponent != null && beatEnd < (nextComponent.getStart() + errorMargin)){ return true; } } // Busca si hay espacio disponible de silencios entre el componente y el el que le sigue.. si encuentra lo borra if(nextComponent != null && nextComponent.isRestBeat()){ //Verifico si lo que sigue es un silencio. y lo borro long nextBeatEnd = 0; List nextBeats = new ArrayList(); while(nextComponent != null && nextComponent.isRestBeat() && !nextComponent.isTextBeat()){ nextBeats.add(nextComponent); nextBeatEnd = nextComponent.getStart() + nextComponent.getDuration().getTime(); nextComponent = getNextBeat(beats,nextComponent); } if(nextComponent == null){ nextBeatEnd = measureEnd; }else if(!nextComponent.isRestBeat() || nextComponent.isTextBeat()){ nextBeatEnd = nextComponent.getStart(); } if(beatEnd <= (nextBeatEnd + errorMargin)){ while(!nextBeats.isEmpty()){ TGBeat currBeat = (TGBeat)nextBeats.get(0); nextBeats.remove(currBeat); removeBeat(currBeat, false); } return true; } } // Busca si hay espacio disponible de silencios entre el componente y el final.. si encuentra mueve todo if(moveNextBeats){ nextComponent = getNextBeat(beats,beat); if(nextComponent != null){ long requiredLength = (beatLength - (nextComponent.getStart() - beatStart)); long nextSilenceLength = 0; TGBeat nextRestBeat = getNextRestBeat(beats, beat); while(nextRestBeat != null && !nextRestBeat.isTextBeat()){ nextSilenceLength += nextRestBeat.getDuration().getTime(); nextRestBeat = getNextRestBeat(beats, nextRestBeat); } if(requiredLength <= (nextSilenceLength + errorMargin)){ beats = getBeatsBeforeEnd(measure.getBeats(),nextComponent.getStart()); while(!beats.isEmpty()){ TGBeat current = (TGBeat)beats.get(0); if(current.isRestBeat() && !current.isTextBeat()){ requiredLength -= current.getDuration().getTime(); removeBeat(current, false); }else if(requiredLength > 0){ moveBeat(current,requiredLength); } beats.remove(0); } return true; } } } // como ultimo intento, asigno la duracion de cualquier componente existente en el lugar. if(setCurrentDuration && currentBeat != null){ currentBeat.getDuration().copy( duration ); return true; } return false; } */ /** * Cambia la Duracion del pulso. */ /* @Deprecated public void changeDuration(TGMeasure measure,TGBeat beat,TGDuration duration,boolean tryMove){ //obtengo la duracion vieja TGDuration oldDuration = beat.getDuration().clone(getSongManager().getFactory()); //si no entra vuelvo a dejar la vieja if(validateDuration(measure,beat, duration,tryMove,false)){ //se lo agrego a todas las notas en la posicion beat.setDuration(duration.clone(getSongManager().getFactory())); //trato de agregar un silencio similar al lado tryChangeSilenceAfter(measure,beat); }else{ oldDuration.copy( beat.getDuration() ); } } */ /* @Deprecated public void tryChangeSilenceAfter(TGMeasure measure,TGBeat beat){ autoCompleteSilences(measure); TGBeat nextBeat = getNextBeat(measure.getBeats(),beat); long beatEnd = (beat.getStart() + beat.getDuration().getTime()); long measureEnd = (measure.getStart() + measure.getLength()); if(nextBeat != null && nextBeat.isRestBeat() && beatEnd <= measureEnd){ long theMove = (getRealStart(measure,beatEnd)) - getRealStart(measure,nextBeat.getStart()); if((nextBeat.getStart() + theMove) < measureEnd && (nextBeat.getStart() + nextBeat.getDuration().getTime() + theMove) <= measureEnd){ moveBeat(nextBeat,theMove); changeDuration(measure,nextBeat,beat.getDuration().clone(getSongManager().getFactory()),false); } } } */ /** * Calcula si hay espacios libres. y crea nuevos silencios */ /* public void autoCompleteSilences(TGMeasure measure){ List components = measure.getBeats(); for( int i = 0; i < TGBeat.MAX_VOICES; i ++ ){ //TGBeat component = getFirstBeat(components); TGVoice component = getFirstVoice(components, i); long start = measure.getStart(); long end = 0; long diff = 0; while (component != null) { end = component.getBeat().getStart() + component.getDuration().getTime(); if(component.getBeat().getStart() > start){ diff = component.getBeat().getStart() - start; if(diff > 0){ createSilences(measure,start,diff, i); } } start = end; component = getNextVoice(components,component.getBeat(), i); } end = measure.getStart() + measure.getLength(); diff = end - start; if(diff > 0){ createSilences(measure,start,diff, i); } } } */ public void autoCompleteSilences(TGMeasure measure){ TGBeat beat = getFirstBeat( measure.getBeats() ); if( beat == null ){ createSilences(measure, measure.getStart(), measure.getLength(), 0); return; } for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){ TGVoice voice = getFirstVoice( measure.getBeats() , v ); if( voice != null && voice.getBeat().getStart() > measure.getStart() ){ createSilences(measure, measure.getStart(), (voice.getBeat().getStart() - measure.getStart()), v); } } long[] start = new long[beat.countVoices()]; long[] uncompletedLength = new long[beat.countVoices()]; for( int v = 0; v < uncompletedLength.length; v ++ ){ start[v] = 0; uncompletedLength[v] = 0; } while (beat != null) { for( int v = 0; v < beat.countVoices(); v ++ ){ TGVoice voice = beat.getVoice( v ); if( !voice.isEmpty() ){ long voiceEnd = (beat.getStart() + voice.getDuration().getTime()); long nextPosition = (measure.getStart() + measure.getLength()); TGVoice nextVoice = getNextVoice(measure.getBeats(), beat, voice.getIndex()); if(nextVoice != null){ nextPosition = nextVoice.getBeat().getStart(); } if( voiceEnd < nextPosition ){ start[v] = voiceEnd; uncompletedLength[v] = (nextPosition - voiceEnd); } } } for( int v = 0; v < uncompletedLength.length; v ++ ){ if( uncompletedLength[v] > 0 ){ createSilences(measure,start[v],uncompletedLength[v], v); } start[v] = 0; uncompletedLength[v] = 0; } beat = getNextBeat(measure.getBeats(), beat ); } } /** * Crea Silencios temporarios en base a length */ private void createSilences(TGMeasure measure,long start,long length, int voiceIndex){ long nextStart = start; List durations = createDurations(getSongManager().getFactory(),length); Iterator it = durations.iterator(); while(it.hasNext()){ TGDuration duration = (TGDuration)it.next(); boolean isNew = false; long beatStart = getRealStart(measure, nextStart); TGBeat beat = getBeat(measure, beatStart); if( beat == null ){ beat = getSongManager().getFactory().newBeat(); beat.setStart( getRealStart(measure, nextStart) ); isNew = true; } //TGBeat beat = getSongManager().getFactory().newBeat(); //beat.setStart( getRealStart(measure, nextStart) ); TGVoice voice = beat.getVoice(voiceIndex); voice.setEmpty(false); duration.copy(voice.getDuration()); if( isNew ){ addBeat(measure,beat); } // temporal //beat.getVoice(0).setEmpty(false); //beat.getVoice(1).setEmpty(false); // /temporal nextStart += duration.getTime(); } } public long getRealStart(TGMeasure measure,long currStart){ long beatLength = TGSongManager.getDivisionLength(measure.getHeader()); long start = currStart; boolean startBeat = (start % beatLength == 0); if(!startBeat){ TGDuration minDuration = getSongManager().getFactory().newDuration(); minDuration.setValue(TGDuration.SIXTY_FOURTH); minDuration.getDivision().setEnters(3); minDuration.getDivision().setTimes(2); for(int i = 0;i < minDuration.getTime();i++){ start ++; startBeat = (start % beatLength == 0); if(startBeat){ break; } } if(!startBeat){ start = currStart; } } return start; } /** * Liga la nota */ public void changeTieNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ changeTieNote(note); } } /** * Liga la nota */ public void changeTieNote(TGNote note){ note.setTiedNote(!note.isTiedNote()); note.getEffect().setDeadNote(false); } /** * Agrega un vibrato */ public void changeVibratoNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setVibrato(!note.getEffect().isVibrato()); } } /** * Agrega una nota muerta */ public void changeDeadNote(TGNote note){ note.getEffect().setDeadNote(!note.getEffect().isDeadNote()); note.setTiedNote(false); } /** * Agrega un slide */ public void changeSlideNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setSlide(!note.getEffect().isSlide()); } } /** * Agrega un hammer */ public void changeHammerNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setHammer(!note.getEffect().isHammer()); } } /** * Agrega un palm-mute */ public void changePalmMute(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setPalmMute(!note.getEffect().isPalmMute()); } } /** * Agrega un staccato */ public void changeStaccato(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setStaccato(!note.getEffect().isStaccato()); } } /** * Agrega un tapping */ public void changeTapping(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setTapping(!note.getEffect().isTapping()); } } /** * Agrega un slapping */ public void changeSlapping(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setSlapping(!note.getEffect().isSlapping()); } } /** * Agrega un popping */ public void changePopping(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setPopping(!note.getEffect().isPopping()); } } /** * Agrega un bend */ public void changeBendNote(TGMeasure measure,long start,int string,TGEffectBend bend){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setBend(bend); } } /** * Agrega un tremoloBar */ public void changeTremoloBar(TGMeasure measure,long start,int string,TGEffectTremoloBar tremoloBar){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setTremoloBar(tremoloBar); } } /** * Agrega un GhostNote */ public void changeGhostNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setGhostNote(!note.getEffect().isGhostNote()); } } /** * Agrega un AccentuatedNote */ public void changeAccentuatedNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setAccentuatedNote(!note.getEffect().isAccentuatedNote()); } } /** * Agrega un GhostNote */ public void changeHeavyAccentuatedNote(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setHeavyAccentuatedNote(!note.getEffect().isHeavyAccentuatedNote()); } } /** * Agrega un harmonic */ public void changeHarmonicNote(TGMeasure measure,long start,int string,TGEffectHarmonic harmonic){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setHarmonic(harmonic); } } /** * Agrega un grace */ public void changeGraceNote(TGMeasure measure,long start,int string,TGEffectGrace grace){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setGrace(grace); } } /** * Agrega un trill */ public void changeTrillNote(TGMeasure measure,long start,int string,TGEffectTrill trill){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setTrill(trill); } } /** * Agrega un tremolo picking */ public void changeTremoloPicking(TGMeasure measure,long start,int string,TGEffectTremoloPicking tremoloPicking){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setTremoloPicking(tremoloPicking); } } /** * Agrega un fadeIn */ public void changeFadeIn(TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.getEffect().setFadeIn(!note.getEffect().isFadeIn()); } } /** * Cambia el Velocity */ public void changeVelocity(int velocity,TGMeasure measure,long start,int string){ TGNote note = getNote(measure,start,string); if(note != null){ note.setVelocity(velocity); } } /* public static List createDurations(TGFactory factory,long time){ List durations = new ArrayList(); TGDuration tempDuration = factory.newDuration(); tempDuration.setValue(TGDuration.WHOLE); tempDuration.setDotted(true); long tempTime = time; boolean finish = false; while(!finish){ long currentDurationTime = tempDuration.getTime(); if(currentDurationTime <= tempTime){ durations.add(tempDuration.clone(factory)); tempTime -= currentDurationTime; }else{ if(tempDuration.isDotted()){ tempDuration.setDotted(false); }else{ tempDuration.setValue(tempDuration.getValue() * 2); tempDuration.setDotted(true); } } if(tempDuration.getValue() > TGDuration.SIXTY_FOURTH){ finish = true; } } return durations; } */ public static List createDurations(TGFactory factory,long time){ List durations = new ArrayList(); TGDuration minimum = factory.newDuration(); minimum.setValue(TGDuration.SIXTY_FOURTH); minimum.setDotted(false); minimum.setDoubleDotted(false); minimum.getDivision().setEnters(3); minimum.getDivision().setTimes(2); long missingTime = time; while( missingTime > minimum.getTime() ){ TGDuration duration = TGDuration.fromTime(factory, missingTime, minimum , 10); durations.add( duration.clone(factory) ); missingTime -= duration.getTime(); } return durations; } /** * Retorna el Siguiente Componente */ public TGVoice getNextVoice(List beats,TGBeat beat, int index) { TGVoice next = null; for (int i = 0; i < beats.size(); i++) { TGBeat current = (TGBeat) beats.get(i); if (current.getStart() > beat.getStart() && !current.getVoice(index).isEmpty()) { if (next == null) { next = current.getVoice(index); } else if (current.getStart() < next.getBeat().getStart()) { next = current.getVoice(index); } /*else if (current.getStart() == next.getBeat().getStart() && current.getDuration().getTime() <= next.getDuration().getTime()) { next = current.getVoice(index); }*/ } } return next; } /** * Retorna el Componente Anterior */ public TGVoice getPreviousVoice(List beats,TGBeat beat, int index) { TGVoice previous = null; for (int i = 0; i < beats.size(); i++) { TGBeat current = (TGBeat) beats.get(i); if (current.getStart() < beat.getStart() && !current.getVoice(index).isEmpty()) { if (previous == null) { previous = current.getVoice(index); } else if (current.getStart() > previous.getBeat().getStart()) { previous = current.getVoice(index); } /*else if (current.getStart() == previous.getBeat().getStart() && current.getDuration().getTime() <= previous.getDuration().getTime()) { previous = current.getVoice(index); }*/ } } return previous; } /** * Retorna el Primer Componente */ public TGVoice getFirstVoice(List beats, int index) { TGVoice first = null; for (int i = 0; i < beats.size(); i++) { TGBeat current = (TGBeat) beats.get(i); if ( (first == null || current.getStart() < first.getBeat().getStart() ) && !current.getVoice(index).isEmpty()) { first = current.getVoice(index); } } return first; } /** * Retorna el Ultimo Componente */ public TGVoice getLastVoice(List beats, int index) { TGVoice last = null; for (int i = 0; i < beats.size(); i++) { TGBeat current = (TGBeat) beats.get(i); if ( (last == null || last.getBeat().getStart() < current.getStart()) && !current.getVoice(index).isEmpty() ) { last = current.getVoice(index); } } return last; } /** * Retorna el Siguiente Componente */ public TGVoice getNextRestVoice(List beats,TGVoice voice) { TGVoice next = getNextVoice(beats, voice.getBeat(), voice.getIndex()); while(next != null && !next.isRestVoice()){ next = getNextVoice(beats, next.getBeat(), next.getIndex()); } return next; } public List getVoicesBeforeEnd(List beats,long fromStart, int index) { List list = new ArrayList(); Iterator it = beats.iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); if (beat.getStart() >= fromStart) { TGVoice voice = beat.getVoice(index); if(!voice.isEmpty()){ list.add(voice); } } } return list; } public void addSilence(TGMeasure measure,long start, TGDuration duration, int voice){ TGBeat beat = getBeat(measure, start); if(beat != null){ addSilence(beat, duration, voice); } } public void addSilence(TGBeat beat, TGDuration duration, int voice){ addSilence(beat, duration, beat.getStart(),voice); } public void addSilence(TGBeat beat, TGDuration duration, long start, int voice){ boolean emptyVoice = beat.getVoice( voice ).isEmpty(); if( emptyVoice ){ beat.getVoice( voice ).setEmpty( false ); } //Verifico si entra en el compas if(validateDuration(beat.getMeasure(),beat, voice, duration,true,true)){ //Borro lo que haya en la misma posicion //removeNote(beat.getMeasure(),beat.getStart(),voice, note.getString()); duration.copy(beat.getVoice(voice).getDuration()); //trato de agregar un silencio similar al lado tryChangeSilenceAfter(beat.getMeasure(),beat.getVoice(voice)); // Despues de cambiar la duracion, verifico si hay un beat mejor para agregar el silencio. TGVoice realVoice = beat.getVoice(voice); if(realVoice.getBeat().getStart() != start){ TGVoice beatIn = getVoiceIn(realVoice.getBeat().getMeasure(), start, voice); if( beatIn != null ) { realVoice = beatIn; } } realVoice.setEmpty(false); }else{ beat.getVoice( voice ).setEmpty( emptyVoice ); } } public void removeVoice(TGVoice voice){ voice.setEmpty(true); // Remove the beat If all voices are empty TGBeat beat = voice.getBeat(); for(int i = 0; i < beat.countVoices(); i ++){ if( !beat.getVoice(i).isEmpty() ){ return; } } this.removeBeat(beat); } public void removeVoice(TGVoice voice,boolean moveNextVoices){ removeVoice(voice); if(moveNextVoices){ long start = voice.getBeat().getStart(); long length = voice.getDuration().getTime(); TGVoice next = getNextVoice(voice.getBeat().getMeasure().getBeats(),voice.getBeat(),voice.getIndex()); if(next != null){ length = next.getBeat().getStart() - start; } moveVoices(voice.getBeat().getMeasure(),start + length,-length, voice.getIndex(), voice.getDuration()); } } public void removeVoice(TGMeasure measure,long start,int index, boolean moveNextComponents){ TGBeat beat = getBeat(measure, start); if(beat != null){ removeVoice(beat.getVoice(index), moveNextComponents); } } public void removeVoicesOutOfTime(TGMeasure measure){ List voicesToRemove = new ArrayList(); long mStart = measure.getStart(); long mEnd = mStart + measure.getLength(); Iterator beats = measure.getBeats().iterator(); while(beats.hasNext()){ TGBeat beat = (TGBeat)beats.next(); for( int v = 0; v < beat.countVoices() ; v ++){ TGVoice voice = beat.getVoice( v ); if(!voice.isEmpty()){ if( beat.getStart() < mStart || (beat.getStart() + voice.getDuration().getTime()) > mEnd){ voicesToRemove.add( voice ); } } } } Iterator it = voicesToRemove.iterator(); while(it.hasNext()){ TGVoice voice = (TGVoice)it.next(); this.removeVoice( voice ); } } public void removeMeasureVoices(TGMeasure measure,int index){ boolean hasNotes = false; List voices = new ArrayList(); Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); TGVoice voice = beat.getVoice(index); if(voice.isRestVoice()){ voices.add(voice); }else if(!voice.isEmpty()){ hasNotes = true; break; } } if( !hasNotes ){ it = voices.iterator(); while(it.hasNext()){ TGVoice voice = (TGVoice)it.next(); this.removeVoice( voice ); } } } public void changeVoiceDirection( TGVoice voice , int direction){ voice.setDirection( direction ); } public void changeDuration(TGMeasure measure,TGBeat beat,TGDuration duration,int voice, boolean tryMove){ //obtengo la duracion vieja TGDuration oldDuration = beat.getVoice(voice).getDuration().clone(getSongManager().getFactory()); //si no entra vuelvo a dejar la vieja if(validateDuration(measure,beat, voice, duration,tryMove,false)){ //se lo agrego a todas las notas en la posicion beat.getVoice(voice).setDuration(duration.clone(getSongManager().getFactory())); //trato de agregar un silencio similar al lado tryChangeSilenceAfter(measure,beat.getVoice(voice)); }else{ oldDuration.copy( beat.getVoice(voice).getDuration() ); } } public void tryChangeSilenceAfter(TGMeasure measure,TGVoice voice){ autoCompleteSilences(measure); TGVoice nextVoice = getNextVoice(measure.getBeats(),voice.getBeat(),voice.getIndex()); long beatEnd = (voice.getBeat().getStart() + voice.getDuration().getTime()); long measureEnd = (measure.getStart() + measure.getLength()); if(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice() && beatEnd <= measureEnd){ long theMove = (getRealStart(measure,beatEnd)) - getRealStart(measure,nextVoice.getBeat().getStart()); if((nextVoice.getBeat().getStart() + theMove) < measureEnd && (nextVoice.getBeat().getStart() + nextVoice.getDuration().getTime() + theMove) <= measureEnd){ moveVoice(nextVoice,theMove); changeDuration(measure,nextVoice.getBeat(),voice.getDuration().clone(getSongManager().getFactory()),nextVoice.getIndex(),false); } } } private void moveVoices(List voices,long theMove){ /* Iterator it = voices.iterator(); while(it.hasNext()){ TGVoice voice = (TGVoice)it.next(); moveVoice(voice,theMove); } */ int count = voices.size(); for( int i = 0 ; i < count ; i ++ ){ TGVoice voice = (TGVoice)voices.get( (theMove < 0 ? i : ( (count - 1) - i ) ) ); moveVoice(voice,theMove); } } public void moveVoice(TGVoice voice, long theMove){ long newStart = (voice.getBeat().getStart() + theMove); TGBeat newBeat = getBeat(voice.getBeat().getMeasure(),newStart); if( newBeat == null ){ newBeat = getSongManager().getFactory().newBeat(); newBeat.setStart( newStart ); addBeat(voice.getBeat().getMeasure(), newBeat); } this.moveVoice(voice, newBeat); } public void moveVoice(TGVoice voice, TGBeat beat){ TGBeat currentBeat = voice.getBeat(); if(!currentBeat.equals(beat)){ if(currentBeat.getVoice( voice.getIndex() ).equals( voice )){ if ( currentBeat.isTextBeat() && isUniqueVoice(voice, false) ){ beat.setText( currentBeat.getText() ); currentBeat.removeText(); } if( isUniqueVoice(voice, true) ){ if( currentBeat.isChordBeat() ){ beat.setChord( currentBeat.getChord() ); currentBeat.removeChord(); } if( currentBeat.getStroke().getDirection() != TGStroke.STROKE_NONE ){ currentBeat.getStroke().copy( beat.getStroke() ); currentBeat.getStroke().setDirection(TGStroke.STROKE_NONE); } } // Make sure to remove another voice instance from old beat. TGVoice newVoice = getSongManager().getFactory().newVoice(voice.getIndex()); currentBeat.setVoice( voice.getIndex(), newVoice); this.removeVoice(newVoice); } beat.setVoice( voice.getIndex() , voice); } } public boolean validateDuration(TGMeasure measure,TGBeat beat,int voice, TGDuration duration,boolean moveNextBeats, boolean setCurrentDuration){ int errorMargin = 10; this.orderBeats(measure); long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); long beatStart = beat.getStart(); long beatLength = duration.getTime(); long beatEnd = (beatStart + beatLength); List beats = measure.getBeats(); //Verifico si hay un beat en el mismo lugar, y comparo las duraciones. TGBeat currentBeat = getBeat(measure,beatStart); TGVoice currentVoice = null; if(currentBeat != null){ currentVoice = currentBeat.getVoice(voice); if(!currentVoice.isEmpty() && beatLength <= currentVoice.getDuration().getTime()){ return true; } } //Verifico si hay lugar para meter el beat TGVoice nextVoice = getNextVoice(beats,beat, voice); if(currentVoice == null || currentVoice.isEmpty()){ if((nextVoice == null || nextVoice.isEmpty()) && beatEnd < (measureEnd + errorMargin)){ return true; } if((nextVoice != null && !nextVoice.isEmpty()) && beatEnd < (nextVoice.getBeat().getStart() + errorMargin)){ return true; } } // Busca si hay espacio disponible de silencios entre el componente y el el que le sigue.. si encuentra lo borra if(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice()){ //Verifico si lo que sigue es un silencio. y lo borro long nextBeatEnd = 0; List nextBeats = new ArrayList(); while(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice() && !nextVoice.getBeat().isTextBeat()){ nextBeats.add(nextVoice); nextBeatEnd = nextVoice.getBeat().getStart() + nextVoice.getDuration().getTime(); nextVoice = getNextVoice(beats,nextVoice.getBeat(), voice); } if(nextVoice == null || nextVoice.isEmpty()){ nextBeatEnd = measureEnd; }else if(!nextVoice.isRestVoice() || nextVoice.getBeat().isTextBeat()){ nextBeatEnd = nextVoice.getBeat().getStart(); } if(beatEnd <= (nextBeatEnd + errorMargin)){ while(!nextBeats.isEmpty()){ TGVoice currVoice = (TGVoice)nextBeats.get(0); nextBeats.remove(currVoice); removeVoice(currVoice, false); } return true; } } // Busca si hay espacio disponible de silencios entre el componente y el final.. si encuentra mueve todo if(moveNextBeats){ nextVoice = getNextVoice(beats,beat, voice); if(nextVoice != null){ long requiredLength = (beatLength - (nextVoice.getBeat().getStart() - beatStart)); long nextSilenceLength = 0; TGVoice nextRestBeat = getNextRestVoice(beats, beat.getVoice(voice)); while(nextRestBeat != null){ nextSilenceLength += nextRestBeat.getDuration().getTime(); nextRestBeat = getNextRestVoice(beats, nextRestBeat); } if(requiredLength <= (nextSilenceLength + errorMargin)){ List voices = getVoicesBeforeEnd(measure.getBeats(),nextVoice.getBeat().getStart(), voice); while(!voices.isEmpty()){ TGVoice currentVocie = (TGVoice)voices.get(0); if(currentVocie.isRestVoice()){ requiredLength -= currentVocie.getDuration().getTime(); removeVoice(currentVocie, false); }else if(requiredLength > 0){ moveVoice(currentVocie,requiredLength); } voices.remove(0); } return true; } } } // como ultimo intento, asigno la duracion de cualquier componente existente en el lugar. if(setCurrentDuration && currentVoice != null && !currentVoice.isEmpty()){ currentVoice.getDuration().copy( duration ); return true; } return false; } /* public boolean moveVoices(TGMeasure measure,long start,long theMove, int voiceIndex, TGDuration fillDuration){ if( theMove == 0 ){ return false; } boolean success = true; long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); // Muevo los componentes List voicesToMove = getVoicesBeforeEnd(measure.getBeats(),start, voiceIndex); moveVoices(voicesToMove,theMove); if(success){ List voicesToRemove = new ArrayList(); List beats = new ArrayList(measure.getBeats()); // Verifica los silencios a eliminar al principio del compas TGVoice first = getFirstVoice( beats, voiceIndex ); while(first != null && first.isRestVoice() && first.getBeat().getStart() < measureStart){ beats.remove(first); voicesToRemove.add(first); first = getNextVoice( beats,first.getBeat(), voiceIndex); } // Verifica los silencios a eliminar al final del compas TGVoice last = getLastVoice(beats, voiceIndex); TGDuration lastDuration = (last != null ? last.getDuration() : null); while(last != null && lastDuration != null && last.isRestVoice() && (last.getBeat().getStart() + lastDuration.getTime() ) > measureEnd ){ beats.remove(last); voicesToRemove.add(last); last = getPreviousVoice(beats,last.getBeat(), voiceIndex); lastDuration = (last != null ? last.getDuration() : null); } // Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio if(first != null && last != null && lastDuration != null){ if(first.getBeat().getStart() < measureStart || (last.getBeat().getStart() + lastDuration.getTime()) > measureEnd){ success = false; } } if(success){ // Elimino los silencios que quedaron fuera del compas. Iterator it = voicesToRemove.iterator(); while( it.hasNext() ){ TGVoice beat = (TGVoice)it.next(); removeVoice(beat); } // Se crean silencios en los espacios vacios, si la duracion fue especificada. if( fillDuration != null ){ if( theMove < 0 ){ last = getLastVoice(measure.getBeats(), voiceIndex); lastDuration = (last != null ? last.getDuration() : null); long beatStart = ( (last != null && lastDuration != null ? last.getBeat().getStart() + lastDuration.getTime() : start ) ); if( (beatStart + fillDuration.getTime()) <= measureEnd ){ boolean beatNew = false; TGBeat beat = getBeat(measure, beatStart); if(beat == null){ beat = getSongManager().getFactory().newBeat(); beat.setStart( beatStart ); beatNew = true; } TGVoice voice = beat.getVoice(voiceIndex); voice.setEmpty(false); fillDuration.copy( voice.getDuration() ); if( beatNew ){ addBeat(measure, beat ); } } } else{ first = getFirstVoice(getBeatsBeforeEnd(measure.getBeats(),start), voiceIndex); if( (start + fillDuration.getTime()) <= (first != null ?first.getBeat().getStart() : measureEnd ) ){ boolean beatNew = false; TGBeat beat = getBeat(measure, start); if(beat == null){ beat = getSongManager().getFactory().newBeat(); beat.setStart( start ); beatNew = true; } TGVoice voice = beat.getVoice(voiceIndex); voice.setEmpty(false); fillDuration.copy( voice.getDuration() ); if( beatNew ){ addBeat(measure, beat ); } } } } } } // Si el movimiento no es satisfactorio, regreso todo como estaba if(! success ){ moveVoices(voicesToMove,-theMove); } this.removeEmptyBeats(measure); return success; } */ public boolean moveVoices(TGMeasure measure,long start,long theMove, int voiceIndex, TGDuration fillDuration){ if( theMove == 0 ){ return false; } boolean success = true; long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); List voicesToMove = getVoicesBeforeEnd(measure.getBeats(),start, voiceIndex); List voicesToRemove = new ArrayList(); List currentBeats = getBeatsBeforeEnd(measure.getBeats(), start); // Verifica los silencios a eliminar al principio del compas TGVoice first = getFirstVoice( currentBeats, voiceIndex ); while(first != null && first.isRestVoice() && (!first.getBeat().isTextBeat() || !isUniqueVoice(first,false)) && (first.getBeat().getStart() + theMove) < measureStart){ currentBeats.remove(first.getBeat()); voicesToRemove.add(first); first = getNextVoice( currentBeats,first.getBeat(), voiceIndex); } // Verifica los silencios a eliminar al final del compas TGVoice last = getLastVoice(currentBeats, voiceIndex); TGDuration lastDuration = (last != null ? last.getDuration() : null); while(last != null && lastDuration != null && last.isRestVoice() && (!last.getBeat().isTextBeat() || !isUniqueVoice(last,false)) && (last.getBeat().getStart() + lastDuration.getTime() + theMove) > measureEnd ){ currentBeats.remove(last.getBeat()); voicesToRemove.add(last); last = getPreviousVoice(currentBeats,last.getBeat(), voiceIndex); lastDuration = (last != null ? last.getDuration() : null); } // Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio if(first != null && last != null && lastDuration != null){ if((first.getBeat().getStart() + theMove) < measureStart || (last.getBeat().getStart() + lastDuration.getTime() + theMove) > measureEnd){ success = false; } } if(success){ this.moveVoices(voicesToMove,theMove); // Elimino los silencios que quedaron fuera del compas. Iterator it = voicesToRemove.iterator(); while( it.hasNext() ){ TGVoice beat = (TGVoice)it.next(); removeVoice(beat); } // Se crean silencios en los espacios vacios, si la duracion fue especificada. if( fillDuration != null ){ if( theMove < 0 ){ last = getLastVoice(measure.getBeats(), voiceIndex); lastDuration = (last != null ? last.getDuration() : null); long beatStart = ( (last != null && lastDuration != null ? last.getBeat().getStart() + lastDuration.getTime() : start ) ); if( (beatStart + fillDuration.getTime()) <= measureEnd ){ boolean beatNew = false; TGBeat beat = getBeat(measure, beatStart); if(beat == null){ beat = getSongManager().getFactory().newBeat(); beat.setStart( beatStart ); beatNew = true; } TGVoice voice = beat.getVoice(voiceIndex); voice.setEmpty(false); fillDuration.copy( voice.getDuration() ); if( beatNew ){ addBeat(measure, beat ); } } } else{ first = getFirstVoice(getBeatsBeforeEnd(measure.getBeats(),start), voiceIndex); if( (start + fillDuration.getTime()) <= (first != null ?first.getBeat().getStart() : measureEnd ) ){ boolean beatNew = false; TGBeat beat = getBeat(measure, start); if(beat == null){ beat = getSongManager().getFactory().newBeat(); beat.setStart( start ); beatNew = true; } TGVoice voice = beat.getVoice(voiceIndex); voice.setEmpty(false); fillDuration.copy( voice.getDuration() ); if( beatNew ){ addBeat(measure, beat ); } } } } // Borro todos los beats que quedaron vacios. this.removeEmptyBeats(measure); } return success; } public boolean isUniqueVoice(TGVoice voice, boolean ignoreRests){ TGBeat beat = voice.getBeat(); for( int v = 0 ; v < beat.countVoices() ; v ++ ){ if( v != voice.getIndex() ){ TGVoice currentVoice = beat.getVoice( v ); if( !currentVoice.isEmpty() && (!ignoreRests || !currentVoice.isRestVoice())){ return false; } } } return true; } public void transposeNotes( TGMeasure measure, int transposition , boolean tryKeepString, boolean applyToChords, int applyToString){ if( transposition != 0 ){ if( measure != null ){ TGTrack track = measure.getTrack(); if( track != null ){ List strings = getSortedStringsByValue(track, ( transposition > 0 ? 1 : -1 ) ) ; for( int i = 0 ; i < measure.countBeats() ; i ++ ){ TGBeat beat = measure.getBeat( i ); transposeNotes( beat, strings, transposition , tryKeepString, applyToChords, applyToString ); } } } } } public void transposeNotes( TGMeasure measure, int[] transpositionStrings , boolean tryKeepString , boolean applyToChords){ if( transpositionStrings != null && transpositionStrings.length > 0 ){ if( measure != null ){ TGTrack track = measure.getTrack(); if( track != null ){ TGNote[] notes = new TGNote[ transpositionStrings.length ]; for( int b = 0 ; b < measure.countBeats() ; b ++ ){ TGBeat beat = measure.getBeat( b ); for( int n = 0 ; n < notes.length ; n ++ ){ notes[ n ] = getNote( beat, (n + 1) ); } for( int i = 0 ; i < notes.length ; i ++ ){ if( notes[ i ] != null ){ int transposition = transpositionStrings[ i ]; if( transposition != 0 ){ int applyToString = notes[i].getString(); List strings = getSortedStringsByValue(track, ( transposition > 0 ? 1 : -1 ) ) ; transposeNotes( beat, strings, transposition , tryKeepString, applyToChords, applyToString ); } } } } } } } } public void transposeNotes( TGBeat beat, List strings, int transposition , boolean tryKeepString, boolean applyToChord, int applyToString){ if( transposition != 0 ){ List notes = getNotes(beat); int stringCount = strings.size(); for( int i = 0 ; i < stringCount ; i ++ ){ TGString string = (TGString)strings.get( (stringCount - i) - 1 ); if( applyToString == -1 || string.getNumber() == applyToString ){ TGNote note = null; for( int n = 0 ; n < notes.size() ; n ++ ){ TGNote current = (TGNote)notes.get( n ); if( current.getString() == string.getNumber() ){ note = current; } } if( note != null ){ transposeNote(note, notes, strings, transposition, tryKeepString, false ); } if( applyToChord && beat.isChordBeat() ){ TGChord chord = beat.getChord(); int chordString = ( string.getNumber() - 1 ); if( chord.getFretValue( chordString ) >= 0 ){ transposeChordNote(chord, chordString, strings, transposition, tryKeepString, false); } chord.setFirstFret( -1 ); } } } } } private boolean transposeNote( TGNote note, List notes, List strings , int transposition , boolean tryKeepString, boolean forceChangeString ){ boolean canTransposeFret = false; int maximumFret = 29; int transposedFret = ( note.getValue() + transposition ); // Check if transposition could be done without change the string if( transposedFret >= 0 && transposedFret <= maximumFret ){ // Do it now if keep string is the priority if( !forceChangeString && tryKeepString ){ note.setValue( transposedFret ); return true; } canTransposeFret = true; } // Check the current string index for this note int stringIndex = -1; for( int i = 0 ; i < strings.size() ; i ++ ){ TGString string = ( TGString ) strings.get( i ); if( string.getNumber() == note.getString() ){ stringIndex = i; break; } } // Try to change the string of the note TGString string = ( TGString ) strings.get( stringIndex ); int transposedValue = ( string.getValue() + note.getValue() + transposition ); int nextStringIndex = ( stringIndex + 1 ); while( nextStringIndex >= 0 && nextStringIndex < strings.size() ){ TGString nextString = ( TGString ) strings.get( nextStringIndex ); TGNote nextOwner = null; for( int i = 0 ; i < notes.size() ; i ++ ){ TGNote nextNote = (TGNote) notes.get( i ); if( nextNote.getString() == nextString.getNumber() ){ nextOwner = nextNote; } } int transposedStringFret = ( transposedValue - nextString.getValue() ); if( transposedStringFret >= 0 && transposedStringFret <= maximumFret ){ if( nextOwner != null ){ if( ! transposeNote(nextOwner, notes, strings, 0 , tryKeepString , !canTransposeFret ) ){ // Note was removed. nextOwner = null ; } } if( nextOwner == null || nextOwner.getString() != nextString.getNumber() ){ note.setValue( transposedStringFret ); note.setString( nextString.getNumber() ); return true; } } nextStringIndex ++; } // Keep using same string if it's possible if( !forceChangeString && canTransposeFret ){ note.setValue( transposedFret ); return true; } // If note can't be transposed, it must be removed. notes.remove( note ); removeNote(note); return false; } private boolean transposeChordNote( TGChord chord, int chordString, List strings , int transposition , boolean tryKeepString, boolean forceChangeString ){ boolean canTransposeFret = false; int maximumFret = 24; int noteValue = chord.getFretValue( chordString ); int noteString = (chordString + 1 ); int transposedFret = ( noteValue + transposition ); // Check if transposition could be done without change the string if( transposedFret >= 0 && transposedFret <= maximumFret ){ // Do it now if keep string is the priority if( !forceChangeString && tryKeepString ){ chord.addFretValue(chordString, transposedFret); return true; } canTransposeFret = true; } // Check the current string index for this note int stringIndex = -1; for( int i = 0 ; i < strings.size() ; i ++ ){ TGString string = ( TGString ) strings.get( i ); if( string.getNumber() == noteString ){ stringIndex = i; break; } } // Try to change the string of the note TGString string = ( TGString ) strings.get( stringIndex ); int transposedValue = ( string.getValue() + noteValue + transposition ); int nextStringIndex = ( stringIndex + 1 ); while( nextStringIndex >= 0 && nextStringIndex < strings.size() ){ TGString nextString = ( TGString ) strings.get( nextStringIndex ); int nextChordString = -1; for( int i = 0 ; i < chord.countStrings() ; i ++ ){ if( (i + 1) == nextString.getNumber() ){ if( chord.getFretValue( i ) >= 0 ){ nextChordString = i; } } } int transposedStringFret = ( transposedValue - nextString.getValue() ); if( transposedStringFret >= 0 && transposedStringFret <= maximumFret ){ if( nextChordString >= 0 ){ transposeChordNote(chord, nextChordString , strings, 0 , tryKeepString , !canTransposeFret ); } if( nextChordString < 0 || chord.getFretValue( nextChordString ) < 0 ){ chord.addFretValue( chordString , -1 ); chord.addFretValue( ( nextString.getNumber() - 1 ) , transposedStringFret ); return true; } } nextStringIndex ++; } // Keep using same string if it's possible if( !forceChangeString && canTransposeFret ){ chord.addFretValue( chordString , transposedFret ); return true; } // If note can't be transposed, it must be removed. chord.addFretValue( chordString , -1 ); return false; } public List getSortedStringsByValue( TGTrack track , final int direction ){ List strings = new ArrayList(); for( int number = 1 ; number <= track.stringCount() ; number ++ ){ strings.add( track.getString( number ) ); } Collections.sort( strings , new Comparator() { public int compare(Object o1, Object o2) { if( o1 != null && o2 != null && o1 instanceof TGString && o2 instanceof TGString ){ TGString s1 = (TGString)o1; TGString s2 = (TGString)o2; int status = ( s1.getValue() - s2.getValue() ); if( status == 0 ){ return 0; } return ( (status * direction) > 0 ? 1 : -1 ); } return 0; } }); return strings; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGSongManager.java0000644000175000017500000007331711273045225030231 0ustar julianjulian/* * Created on 23-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.managers; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGSongManager { public static final short MAX_CHANNELS = 16; private TGFactory factory; private TGSong song; private TGTrackManager trackManager; private TGMeasureManager measureManager; public TGSongManager(){ this(new TGFactory()); } public TGSongManager(TGFactory factory){ this.factory = factory; } public TGFactory getFactory(){ return this.factory; } public void setFactory(TGFactory factory){ this.factory = factory; } public TGTrackManager getTrackManager(){ if(this.trackManager == null){ this.trackManager = new TGTrackManager(this); } return this.trackManager; } public TGMeasureManager getMeasureManager(){ if(this.measureManager == null){ this.measureManager = new TGMeasureManager(this); } return this.measureManager; } public void setSongName(String name){ getSong().setName(name); } public TGSong getSong(){ return this.song; } public void clearSong(){ if(this.getSong() != null){ this.getSong().clear(); } } public void setSong(TGSong song){ if(song != null){ this.clearSong(); this.song = song; } } public void setProperties(String name,String artist,String album,String author,String date,String copyright,String writer,String transcriber,String comments){ getSong().setName(name); getSong().setArtist(artist); getSong().setAlbum(album); getSong().setAuthor(author); getSong().setDate(date); getSong().setCopyright(copyright); getSong().setWriter(writer); getSong().setTranscriber(transcriber); getSong().setComments(comments); } public void addTrack(TGTrack trackToAdd){ this.orderTracks(); int addIndex = -1; for(int i = 0;i < getSong().countTracks();i++){ TGTrack track = getSong().getTrack(i); if(addIndex == -1 && track.getNumber() == trackToAdd.getNumber()){ addIndex = i; } if(addIndex >= 0){ track.setNumber(track.getNumber() + 1); } } if(addIndex < 0){ addIndex = getSong().countTracks(); } getSong().addTrack(addIndex,trackToAdd); } public void removeTrack(int number){ int nextNumber = number; TGTrack trackToRemove = null; orderTracks(); Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack currTrack = (TGTrack)it.next(); if(trackToRemove == null && currTrack.getNumber() == nextNumber){ trackToRemove = currTrack; }else if(currTrack.getNumber() == (nextNumber + 1)){ currTrack.setNumber(nextNumber); nextNumber ++; } } getSong().removeTrack(trackToRemove); } private void orderTracks(){ for(int i = 0;i < getSong().countTracks();i++){ TGTrack minTrack = null; for(int trackIdx = i;trackIdx < getSong().countTracks();trackIdx++){ TGTrack track = getSong().getTrack(trackIdx); if(minTrack == null || track.getNumber() < minTrack.getNumber()){ minTrack = track; } } getSong().moveTrack(i,minTrack); } } public TGSong newSong(){ TGSong song = getFactory().newSong(); TGMeasureHeader header = getFactory().newHeader(); header.setNumber(1); header.setStart(TGDuration.QUARTER_TIME); header.getTimeSignature().setNumerator(4); header.getTimeSignature().getDenominator().setValue(TGDuration.QUARTER); song.addMeasureHeader(header); TGMeasure measure = getFactory().newMeasure(header); TGTrack track = getFactory().newTrack(); track.setNumber(1); track.setName("Track 1"); track.addMeasure(measure); track.getChannel().setChannel((short)0); track.getChannel().setEffectChannel((short)1); track.setStrings(createDefaultInstrumentStrings()); TGColor.RED.copy(track.getColor()); song.addTrack(track); return song; } public int getNextTrackNumber(){ return (getSong().countTracks() + 1); } public TGChannel getFreeChannel(short instrument,boolean isPercussion){ if(isPercussion){ return TGChannel.newPercussionChannel(getFactory()); } short normalChannel = -1; short effectChannel = -1; boolean[] usedChannels = getUsedChannels(); boolean[] usedEffectChannels = getUsedEffectChannels(); for(short i = 0;i < MAX_CHANNELS;i++){ if(!TGChannel.isPercussionChannel(i) && !usedChannels[i] && !usedEffectChannels[i]){ normalChannel = (normalChannel < 0)?i:normalChannel; effectChannel = (effectChannel < 0 && i != normalChannel)?i:effectChannel; } } if(normalChannel < 0 || effectChannel < 0){ if(normalChannel >= 0 ){ effectChannel = normalChannel; }else{ TGChannel songChannel = getLastTrack().getChannel(); return songChannel.clone(getFactory()); } } TGChannel channel = getFactory().newChannel(); channel.setChannel(normalChannel); channel.setEffectChannel(effectChannel); channel.setInstrument(instrument); return channel; } public boolean[] getUsedEffectChannels(){ boolean[] channels = new boolean[MAX_CHANNELS]; for(int i = 0;i < getSong().countTracks();i++){ TGTrack track = getSong().getTrack(i); channels[track.getChannel().getEffectChannel()] = true; } return channels; } public boolean[] getUsedChannels(){ boolean[] channels = new boolean[MAX_CHANNELS]; for(int i = 0;i < getSong().countTracks();i++){ TGTrack track = getSong().getTrack(i); channels[track.getChannel().getChannel()] = true; } return channels; } public TGChannel getUsedChannel(int channel){ for(int i = 0;i < getSong().countTracks();i++){ TGTrack track = getSong().getTrack(i); if(channel == track.getChannel().getChannel()){ return track.getChannel().clone(getFactory()); } } return null; } public int countTracksForChannel(int channel){ int count = 0; for(int i = 0;i < getSong().countTracks();i++){ TGTrack track = getSong().getTrack(i); if(channel == track.getChannel().getChannel()){ count ++; } } return count; } public void updateChannel(TGChannel channel){ for(int i = 0;i < getSong().countTracks();i++){ TGTrack track = getSong().getTrack(i); if(channel.getChannel() == track.getChannel().getChannel()){ track.setChannel(channel.clone(getFactory())); } } } public TGTrack getTrack(int number){ TGTrack track = null; for (int i = 0; i < getSong().countTracks(); i++) { TGTrack currTrack = getSong().getTrack(i); if(currTrack.getNumber() == number){ track = currTrack; break; } } return track; } public TGTrack getFirstTrack(){ TGTrack track = null; if(!getSong().isEmpty()){ track = getSong().getTrack(0); } return track; } public TGTrack getLastTrack(){ TGTrack track = null; if(!getSong().isEmpty()){ track = getSong().getTrack(getSong().countTracks() - 1); } return track; } public TGTrack cloneTrack(TGTrack track){ TGTrack clone = track.clone(getFactory(),getSong()); clone.setNumber(getNextTrackNumber()); addTrack(clone); return clone; } public boolean moveTrackUp(TGTrack track){ if(track.getNumber() > 1){ TGTrack prevTrack = getTrack(track.getNumber() - 1); prevTrack.setNumber(prevTrack.getNumber() + 1); track.setNumber(track.getNumber() - 1); orderTracks(); return true; } return false; } public boolean moveTrackDown(TGTrack track){ if(track.getNumber() < getSong().countTracks()){ TGTrack nextTrack = getTrack(track.getNumber() + 1); nextTrack.setNumber(nextTrack.getNumber() - 1); track.setNumber(track.getNumber() + 1); orderTracks(); return true; } return false; } private TGTrack makeNewTrack(){ TGTrack track = getFactory().newTrack(); track.setNumber(getNextTrackNumber()); track.setName("Track " + track.getNumber()); //measures Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); TGMeasure measure = getFactory().newMeasure(header); track.addMeasure(measure); } track.setStrings(createDefaultInstrumentStrings()); getFreeChannel(TGChannel.DEFAULT_INSTRUMENT,false).copy(track.getChannel()); TGColor.RED.copy(track.getColor()); return track; } public TGTrack createTrack(){ if(getSong().isEmpty()){ setSong(newSong()); return getLastTrack(); } TGTrack track = makeNewTrack(); addTrack(track); return track; } public void removeTrack(TGTrack track){ removeTrack(track.getNumber()); } public void changeTimeSignature(long start,TGTimeSignature timeSignature,boolean toEnd){ changeTimeSignature(getMeasureHeaderAt(start),timeSignature,toEnd); } public void changeTimeSignature(TGMeasureHeader header,TGTimeSignature timeSignature,boolean toEnd){ //asigno el nuevo ritmo timeSignature.copy(header.getTimeSignature()); long nextStart = header.getStart() + header.getLength(); List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1); Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasureHeader nextHeader = (TGMeasureHeader)it.next(); long theMove = nextStart - nextHeader.getStart(); //moveMeasureComponents(nextHeader,theMove); moveMeasureHeader(nextHeader,theMove,0); if(toEnd){ timeSignature.copy(nextHeader.getTimeSignature()); } nextStart = nextHeader.getStart() + nextHeader.getLength(); } moveOutOfBoundsBeatsToNewMeasure(header.getStart()); } public void moveOutOfBoundsBeatsToNewMeasure(long start){ Iterator it = getSong().getTracks(); while( it.hasNext() ){ TGTrack track = (TGTrack) it.next(); getTrackManager().moveOutOfBoundsBeatsToNewMeasure(track, start); } } /* public void changeTimeSignature(TGMeasureHeader header,TGTimeSignature timeSignature,boolean toEnd){ //asigno el nuevo ritmo timeSignature.copy(header.getTimeSignature()); long nextStart = header.getStart() + header.getLength(); List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1); Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasureHeader nextHeader = (TGMeasureHeader)it.next(); long theMove = nextStart - nextHeader.getStart(); moveMeasureComponents(nextHeader,theMove); moveMeasureHeader(nextHeader,theMove,0); if(toEnd){ timeSignature.copy(nextHeader.getTimeSignature()); } nextStart = nextHeader.getStart() + nextHeader.getLength(); } } */ public void changeTripletFeel(long start,int tripletFeel,boolean toEnd){ changeTripletFeel(getMeasureHeaderAt(start),tripletFeel,toEnd); } public void changeTripletFeel(TGMeasureHeader header,int tripletFeel,boolean toEnd){ //asigno el nuevo tripletFeel header.setTripletFeel(tripletFeel); if(toEnd){ List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1); Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasureHeader nextHeader = (TGMeasureHeader)it.next(); nextHeader.setTripletFeel(tripletFeel); } } } public void changeTempos(long start,TGTempo tempo,boolean toEnd){ changeTempos(getMeasureHeaderAt(start),tempo,toEnd); } public void changeTempos(TGMeasureHeader header,TGTempo tempo,boolean toEnd){ int oldValue = header.getTempo().getValue(); Iterator it = getMeasureHeadersAfter(header.getNumber() - 1).iterator(); while(it.hasNext()){ TGMeasureHeader nextHeader = (TGMeasureHeader)it.next(); if(toEnd || nextHeader.getTempo().getValue() == oldValue){ changeTempo(nextHeader,tempo); }else{ break; } } } public void changeTempo(TGMeasureHeader header,TGTempo tempo){ tempo.copy(header.getTempo()); } public void changeOpenRepeat(long start){ TGMeasureHeader header = getMeasureHeaderAt(start); header.setRepeatOpen(!header.isRepeatOpen()); } public void changeCloseRepeat(long start,int repeatClose){ TGMeasureHeader header = getMeasureHeaderAt(start); header.setRepeatClose(repeatClose); } public void changeAlternativeRepeat(long start,int repeatAlternative){ TGMeasureHeader header = getMeasureHeaderAt(start); header.setRepeatAlternative(repeatAlternative); } public TGMeasureHeader addNewMeasureBeforeEnd(){ TGMeasureHeader lastHeader = getLastMeasureHeader(); TGMeasureHeader header = getFactory().newHeader(); header.setNumber((lastHeader.getNumber() + 1)); header.setStart((lastHeader.getStart() + lastHeader.getLength())); header.setRepeatOpen(false); header.setRepeatClose(0); header.setTripletFeel(lastHeader.getTripletFeel()); lastHeader.getTimeSignature().copy(header.getTimeSignature()); lastHeader.getTempo().copy(header.getTempo()); getSong().addMeasureHeader(header); Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getTrackManager().addNewMeasureBeforeEnd(track,header); } return header; } public void addNewMeasure(int number){ //Obtengo un clon para el nuevo Header. TGMeasureHeader header = null; if(number == 1){ header = getMeasureHeader(number).clone(getFactory()); }else{ header = getMeasureHeader((number - 1)).clone(getFactory()); header.setStart(header.getStart() + header.getLength()); header.setNumber(header.getNumber() + 1); } header.setMarker(null); header.setRepeatOpen(false); header.setRepeatAlternative(0); header.setRepeatClose(0); //Si hay Headers siguientes los muevo TGMeasureHeader nextHeader = getMeasureHeader(number); if(nextHeader != null){ moveMeasureHeaders(getMeasureHeadersBeforeEnd(nextHeader.getStart()),header.getLength(),1,true); } //Agrego el header a la lista addMeasureHeader( (header.getNumber() - 1) ,header); //Agrego los compases en todas las pistas Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getTrackManager().addNewMeasure(track,header); } } public List getMeasures(long start){ List measures = new ArrayList(); Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); TGMeasure measure = getTrackManager().getMeasureAt(track,start); if(measure != null){ measures.add(measure); } } return measures; } public TGTrack replaceTrack(TGTrack track){ TGTrack current = getTrack(track.getNumber()); if(current != null){ track.copy(getFactory(), getSong(), current); } return current; } /* public TGSongSegment copyMeasures(int m1, int m2){ TGSongSegment segment = new TGSongSegment(); int number1 = Math.max(1,m1); int number2 = Math.min(getSong().countMeasureHeaders(),m2); for(int number = number1; number <= number2;number ++){ segment.getHeaders().add( getMeasureHeader(number) ); } Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); List measures = getTrackManager().copyMeasures(track,number1,number2); segment.addTrack(track.getNumber(),measures); } return segment.clone(getFactory()); } public TGSongSegment copyMeasures(int m1, int m2,TGTrack track){ TGSongSegment segment = new TGSongSegment(); int number1 = Math.max(1,m1); int number2 = Math.min(getSong().countMeasureHeaders(),m2); for(int number = number1; number <= number2;number ++){ segment.getHeaders().add( getMeasureHeader(number) ); } List measures = getTrackManager().copyMeasures(track,number1,number2); segment.addTrack(track.getNumber(),measures); return segment.clone(getFactory()); } public void insertMeasures(TGSongSegment segment,int fromNumber,long move){ List headers = new ArrayList(); moveMeasureHeaders(segment.getHeaders(),move,0,false); int headerNumber = fromNumber; Iterator it = segment.getHeaders().iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); header.setNumber(headerNumber); headers.add(header); headerNumber ++; } long start = ((TGMeasureHeader)headers.get(0)).getStart(); long end = ((TGMeasureHeader)headers.get(headers.size() - 1)).getStart() + ((TGMeasureHeader)headers.get(headers.size() - 1)).getLength(); List headersBeforeEnd = getMeasureHeadersBeforeEnd(start); moveMeasureHeaders(headersBeforeEnd,end - start,headers.size(),true); it = segment.getHeaders().iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); addMeasureHeader(header.getNumber() - 1,header); } it = getSong().getTracks(); while (it.hasNext()) { TGTrack currTrack = (TGTrack) it.next(); List measures = null; Iterator tracks = segment.getTracks().iterator(); while(tracks.hasNext()){ TGTrackSegment tSegment = (TGTrackSegment)tracks.next(); if(tSegment.getTrack() == currTrack.getNumber()){ measures = tSegment.getMeasures(); break; } } if(measures == null){ measures = getEmptyMeasures(((TGTrackSegment)segment.getTracks().get(0)).getMeasures()); } for(int i = 0;i < measures.size();i++){ TGMeasure measure = (TGMeasure)measures.get(i); measure.setHeader((TGMeasureHeader)headers.get(i)); getMeasureManager().moveAllComponents(measure,move); } getTrackManager().insertMeasures(currTrack,measures); } } private List getEmptyMeasures(List measures) { List emptyMeasures = new ArrayList(); Iterator it = measures.iterator(); while (it.hasNext()) { TGMeasure measure = (TGMeasure) it.next(); TGMeasure emptyMeasure = getFactory().newMeasure(null); emptyMeasure.setClef(measure.getClef()); emptyMeasure.setKeySignature(measure.getKeySignature()); emptyMeasures.add(emptyMeasure); } return emptyMeasures; } */ /* public void replaceMeasures(TGSongSegment tracksMeasures,long move) { List measureHeaders = new ArrayList(); moveMeasureHeaders(tracksMeasures.getHeaders(),move,0,false); Iterator it = tracksMeasures.getHeaders().iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); TGMeasureHeader replace = replaceMeasureHeader(header); Iterator nextHeaders = getMeasureHeadersAfter(replace.getNumber()).iterator(); long nextStart = (replace.getStart() + replace.getLength()); while(nextHeaders.hasNext()){ TGMeasureHeader next = (TGMeasureHeader)nextHeaders.next(); moveMeasureComponents(next, (nextStart - next.getStart() )); moveMeasureHeader(next, (nextStart - next.getStart() ) , 0); nextStart = (next.getStart() + next.getLength()); } measureHeaders.add(replace); } it = tracksMeasures.getTracks().iterator(); while(it.hasNext()){ TGTrackSegment trackMeasure = (TGTrackSegment)it.next(); TGTrack currTrack = getTrack(trackMeasure.getTrack()); List measures = trackMeasure.getMeasures(); for(int i = 0;i < measures.size();i++){ TGMeasure measure = (TGMeasure)measures.get(i); measure.setHeader((TGMeasureHeader)measureHeaders.get(i)); getMeasureManager().moveAllComponents(measure,move); getTrackManager().replaceMeasure(currTrack,measure); } } } */ public TGMeasureHeader getFirstMeasureHeader(){ TGMeasureHeader firstHeader = null; for(int i = 0;i < getSong().countMeasureHeaders();i++){ TGMeasureHeader currHeader = getSong().getMeasureHeader(i); if(firstHeader == null || (currHeader.getStart() < firstHeader.getStart())){ firstHeader = currHeader; } } return firstHeader; } public TGMeasureHeader getLastMeasureHeader(){ int lastIndex = getSong().countMeasureHeaders() - 1; return getSong().getMeasureHeader(lastIndex); } public TGMeasureHeader getPrevMeasureHeader(TGMeasureHeader header){ int prevIndex = header.getNumber() - 1; if(prevIndex > 0){ return getSong().getMeasureHeader(prevIndex - 1); } return null; } public TGMeasureHeader getNextMeasureHeader(TGMeasureHeader header){ int nextIndex = header.getNumber(); if(nextIndex < getSong().countMeasureHeaders()){ return getSong().getMeasureHeader(nextIndex); } return null; } public TGMeasureHeader getMeasureHeaderAt(long start){ Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); long measureStart = header.getStart(); long measureLength = header.getLength(); if(start >= measureStart && start < measureStart + measureLength){ return header; } } return null; } public TGMeasureHeader getMeasureHeader(int number){ for (int i = 0; i < getSong().countMeasureHeaders(); i++) { TGMeasureHeader header = getSong().getMeasureHeader(i); if(header.getNumber() == number){ return header; } } return null; } /** * Retorna Todos los desde Start hasta el final del compas */ public List getMeasureHeadersBeforeEnd(long fromStart) { List headers = new ArrayList(); Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if (header.getStart() >= fromStart) { headers.add(header); } } return headers; } /** * Retorna Todos los desde Start hasta el final del compas */ public List getMeasureHeadersAfter(int number) { List headers = new ArrayList(); Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if (header.getNumber() > number) { headers.add(header); } } return headers; } /** * Retorna Todos los desde Start hasta el final del compas */ public List getMeasureHeadersBetween(long p1,long p2) { List headers = new ArrayList(); Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if ((header.getStart() + header.getLength()) > p1 && header.getStart() < p2) { headers.add(header); } } return headers; } public void removeLastMeasure(){ removeLastMeasureHeader(); } public void removeMeasure(long start){ removeMeasureHeader(start); } public void removeMeasure(int number){ removeMeasureHeader(number); } /** * Agrega un Compas */ public void addMeasureHeader(TGMeasureHeader measure){ getSong().addMeasureHeader(measure); } /** * Agrega un Compas */ public void addMeasureHeader(int index,TGMeasureHeader measure){ getSong().addMeasureHeader(index,measure); } public void removeMeasureHeaders(int n1,int n2){ for(int i = n1; i <= n2; i ++){ TGMeasureHeader measure = getMeasureHeader(n1); removeMeasureHeader(measure); } /* Iterator it = getMeasureHeadersBetween(p1,p2).iterator(); while(it.hasNext()){ TGMeasureHeader measure = (TGMeasureHeader)it.next(); removeMeasureHeader(measure); } */ } public void removeLastMeasureHeader(){ removeMeasureHeader(getLastMeasureHeader()); } public void removeMeasureHeader(long start){ removeMeasureHeader(getMeasureHeaderAt(start)); } public void removeMeasureHeader(int number){ removeMeasureHeader(getMeasureHeader(number)); } public void removeMeasureHeader(TGMeasureHeader header){ long start = header.getStart(); long length = header.getLength(); Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getTrackManager().removeMeasure(track,start); } moveMeasureHeaders(getMeasureHeadersBeforeEnd(start + 1),-length,-1,true); getSong().removeMeasureHeader(header.getNumber() - 1); } public TGMeasureHeader replaceMeasureHeader(TGMeasureHeader newMeasure){ TGMeasureHeader header = getMeasureHeaderAt(newMeasure.getStart()); header.makeEqual(newMeasure.clone(getFactory())); return header; } public void moveMeasureHeaders(List headers,long theMove,int numberMove,boolean moveComponents) { if(moveComponents){ Iterator it = headers.iterator(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader) it.next(); moveMeasureComponents(header,theMove); } } Iterator it = headers.iterator(); while (it.hasNext()) { TGMeasureHeader header = (TGMeasureHeader) it.next(); moveMeasureHeader(header,theMove,numberMove); } } /** * Mueve el compas */ public void moveMeasureHeader(TGMeasureHeader header,long theMove,int numberMove){ header.setNumber(header.getNumber() + numberMove); header.setStart(header.getStart() + theMove); } /** * Mueve el compas */ public void moveMeasureComponents(TGMeasureHeader header,long theMove){ Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getTrackManager().moveMeasure(getTrackManager().getMeasure(track,header.getNumber()),theMove); } } /** * Retorna true si el start esta en el rango del compas */ public boolean isAtPosition(TGMeasureHeader header,long start){ return (start >= header.getStart() && start < header.getStart() + header.getLength()); } public TGMarker updateMarker(int measure,String title,TGColor color){ TGMeasureHeader header = getMeasureHeader(measure); if(header != null){ if(!header.hasMarker()){ header.setMarker(getFactory().newMarker()); } header.getMarker().setMeasure(measure); header.getMarker().setTitle(title); header.getMarker().getColor().setR(color.getR()); header.getMarker().getColor().setG(color.getG()); header.getMarker().getColor().setB(color.getB()); return header.getMarker(); } return null; } public TGMarker updateMarker(TGMarker marker){ return updateMarker(marker.getMeasure(),marker.getTitle(),marker.getColor()); } public void removeMarker(TGMarker marker){ if(marker != null){ removeMarker(marker.getMeasure()); } } public void removeMarker(int number){ TGMeasureHeader header = getMeasureHeader(number); if(header != null && header.hasMarker()){ header.setMarker(null); } } public void removeAllMarkers(){ Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.hasMarker()){ header.setMarker(null); } } } public List getMarkers(){ List markers = new ArrayList(); Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.hasMarker()){ markers.add(header.getMarker()); } } return markers; } public TGMarker getMarker(int number){ TGMeasureHeader header = getMeasureHeader(number); if(header != null && header.hasMarker()){ return header.getMarker(); } return null; } public TGMarker getPreviousMarker(int from){ TGMeasureHeader previous = null; Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.hasMarker() && header.getNumber() < from){ if(previous == null || previous.getNumber() < header.getNumber()){ previous = header; } } } return (previous != null)?previous.getMarker():null; } public TGMarker getNextMarker(int from){ TGMeasureHeader next = null; Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.hasMarker() && header.getNumber() > from){ if(next == null || next.getNumber() > header.getNumber()){ next = header; } } } return (next != null)?next.getMarker():null; } public TGMarker getFirstMarker(){ TGMeasureHeader first = null; Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.hasMarker()){ if(first == null || header.getNumber() < first.getNumber()){ first = header; } } } return (first != null)?first.getMarker():null; } public TGMarker getLastMarker(){ TGMeasureHeader next = null; Iterator it = getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.hasMarker()){ if(next == null || header.getNumber() > next.getNumber()){ next = header; } } } return (next != null)?next.getMarker():null; } public void autoCompleteSilences(){ Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getTrackManager().autoCompleteSilences(track); } } public void orderBeats(){ Iterator it = getSong().getTracks(); while(it.hasNext()){ TGTrack track = (TGTrack)it.next(); getTrackManager().orderBeats(track); } } public List createDefaultInstrumentStrings(){ List strings = new ArrayList(); strings.add(newString(getFactory(),1, 64)); strings.add(newString(getFactory(),2, 59)); strings.add(newString(getFactory(),3, 55)); strings.add(newString(getFactory(),4, 50)); strings.add(newString(getFactory(),5, 45)); strings.add(newString(getFactory(),6, 40)); return strings; } public static List createPercussionStrings(TGFactory factory,int stringCount){ List strings = new ArrayList(); for(int i = 1;i <= stringCount; i++){ strings.add(newString(factory,i, 0)); } return strings; } public static TGString newString(TGFactory factory,int number,int value){ TGString string = factory.newString(); string.setNumber(number); string.setValue(value); return string; } public static long getDivisionLength(TGMeasureHeader header){ long defaultLenght = TGDuration.QUARTER_TIME; int denominator = header.getTimeSignature().getDenominator().getValue(); switch(denominator){ case TGDuration.EIGHTH: if(header.getTimeSignature().getNumerator() % 3 == 0){ defaultLenght += TGDuration.QUARTER_TIME / 2; } break; } return defaultLenght; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGTrackManager.java0000644000175000017500000002454511273045225030366 0ustar julianjulianpackage org.herac.tuxguitar.song.managers; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGTrack; public class TGTrackManager { private TGSongManager songManager; public TGTrackManager(TGSongManager songManager){ this.songManager = songManager; } public TGSongManager getSongManager(){ return this.songManager; } public TGMeasure getFirstMeasure(TGTrack track){ TGMeasure firstMeasure = null; Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasure currMeasure = (TGMeasure)measures.next(); if(firstMeasure == null || (currMeasure.getStart() < firstMeasure.getStart())){ firstMeasure = currMeasure; } } return firstMeasure; } public TGMeasure getLastMeasure(TGTrack track){ return track.getMeasure(track.countMeasures() - 1); } public TGMeasure getPrevMeasure(TGMeasure measure){ return measure.getTrack().getMeasure(measure.getNumber() - 2); } public TGMeasure getNextMeasure(TGMeasure measure){ return measure.getTrack().getMeasure(measure.getNumber()); } public TGMeasure getMeasureAt(TGTrack track,long start){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); long measureStart = measure.getStart(); long measureLength = measure.getLength(); if(start >= measureStart && start < measureStart + measureLength){ return measure; } } return null; } public TGMeasure getMeasure(TGTrack track,int number){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); if(measure.getNumber() == number){ return measure; } } return null; } /** * Retorna Todos los desde Start hasta el final del compas */ public List getMeasuresBeforeEnd(TGTrack track,long fromStart) { List measures = new ArrayList(); Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure currMeasure = (TGMeasure)it.next(); if (currMeasure.getStart() >= fromStart) { measures.add(currMeasure); } } return measures; } /** * Retorna Todos los desde Start hasta el final del compas */ public List getMeasuresBetween(TGTrack track,long p1,long p2) { List measures = new ArrayList(); Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); if ((measure.getStart() + measure.getLength()) > p1 && measure.getStart() < p2) { measures.add(measure); } } return measures; } public void addNewMeasureBeforeEnd(TGTrack track,TGMeasureHeader header){ addNewMeasureAfter(track,header,getLastMeasure(track)); } /** * Agrega un Compas */ public void addNewMeasureAfter(TGTrack track,TGMeasureHeader header,TGMeasure measure){ TGMeasure newMeasure = getSongManager().getFactory().newMeasure(header); newMeasure.setClef(measure.getClef()); newMeasure.setKeySignature(measure.getKeySignature()); addMeasure(track,newMeasure); } public void addNewMeasure(TGTrack track,TGMeasureHeader header){ TGMeasure previous = getMeasure(track, (header.getNumber() == 1)?(header.getNumber()+1):header.getNumber()-1); TGMeasure newMeasure = getSongManager().getFactory().newMeasure(header); newMeasure.setTrack(track); newMeasure.setClef(previous.getClef()); newMeasure.setKeySignature(previous.getKeySignature()); addMeasure(track,header.getNumber() - 1,newMeasure); } /* public List copyMeasures(TGTrack track,int m1,int m2){ List measures = new ArrayList(); int number1 = Math.max(1,m1); int number2 = Math.min(track.countMeasures(),m2); for(int number = number1; number <= number2;number ++){ measures.add(getMeasure(track, number)); } return measures; } */ /** * Agrega un Compas *//* public void insertMeasures(TGTrack track,List measures){ if(!measures.isEmpty()){ Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); addMeasure(track,(measure.getNumber() - 1),measure); } } }*/ /** * Agrega un Compas */ public void addMeasure(TGTrack track,TGMeasure measure){ track.addMeasure(measure); } /** * Agrega un Compas */ public void addMeasure(TGTrack track,int index,TGMeasure measure){ track.addMeasure(index,measure); } public void removeLastMeasure(TGTrack track){ removeMeasure(getLastMeasure(track)); } public void removeMeasure(TGTrack track,long start){ removeMeasure(getMeasureAt(track,start)); } public void removeMeasure(TGMeasure measure){ measure.getTrack().removeMeasure(measure.getNumber() - 1); } public TGMeasure replaceMeasure(TGTrack track,TGMeasure newMeasure){ TGMeasure measure = getMeasureAt(track,newMeasure.getStart()); measure.makeEqual(newMeasure); return measure; } /** * Mueve el compas */ public void moveMeasure(TGMeasure measure,long theMove){ //getSongManager().getMeasureManager().moveAllComponents(measure,theMove); getSongManager().getMeasureManager().moveAllBeats(measure,theMove); } public void moveOutOfBoundsBeatsToNewMeasure(TGTrack track, long start){ Iterator it = getMeasuresBeforeEnd(track,start).iterator(); while( it.hasNext() ){ TGMeasure measure = (TGMeasure)it.next(); getSongManager().getMeasureManager().moveOutOfBoundsBeatsToNewMeasure(measure); } } public void moveTrackBeats(TGTrack track, long measureStart, long moveStart, long theMove ){ List measures = getMeasuresBeforeEnd(track,measureStart); for( int i = 0 ; i < measures.size() ; i ++ ){ TGMeasure measure = (TGMeasure)measures.get(i); if( moveStart + theMove < moveStart ){ getSongManager().getMeasureManager().removeBeatsBeetween(measure, moveStart, (moveStart + Math.abs(theMove))); } getSongManager().getMeasureManager().moveBeats(measure, moveStart, theMove); } for( int i = 0 ; i < measures.size() ; i ++ ){ TGMeasure measure = (TGMeasure)measures.get(i); getSongManager().getMeasureManager().moveOutOfBoundsBeatsToNewMeasure(measure,false); } } public void changeKeySignature(TGTrack track,long start,int keySignature,boolean toEnd){ changeKeySignature(track,getMeasureAt(track,start),keySignature,toEnd); } /** * Cambia el Key Signature */ public void changeKeySignature(TGTrack track,TGMeasure measure,int keySignature,boolean toEnd){ //asigno el nuevo Key measure.setKeySignature(keySignature); if(toEnd){ List measures = getMeasuresBeforeEnd(track,measure.getStart() + 1); Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasure nextMeasure = (TGMeasure)it.next(); nextMeasure.setKeySignature(keySignature); } } } public void changeClef(TGTrack track,long start,int clef,boolean toEnd){ changeClef(track,getMeasureAt(track,start),clef,toEnd); } /** * Cambia el Clef */ public void changeClef(TGTrack track,TGMeasure measure,int clef,boolean toEnd){ //asigno el nuevo clef measure.setClef(clef); if(toEnd){ List measures = getMeasuresBeforeEnd(track,measure.getStart() + 1); Iterator it = measures.iterator(); while(it.hasNext()){ TGMeasure nextMeasure = (TGMeasure)it.next(); nextMeasure.setClef(clef); } } } public void changeSolo(TGTrack track,boolean solo){ track.setSolo(solo); track.setMute(track.isSolo() ? false : track.isMute()); } public void changeMute(TGTrack track,boolean mute){ track.setMute(mute); track.setSolo(track.isMute() ? false : track.isSolo()); } public void changeInfo(TGTrack track,String name,TGColor color,int offset){ track.setName(name); track.setOffset(offset); track.getColor().setR(color.getR()); track.getColor().setG(color.getG()); track.getColor().setB(color.getB()); } public void changeInstrumentStrings(TGTrack track,List strings){ if(strings.size() < track.getStrings().size()){ removeNotesAfterString(track,strings.size()); } track.setStrings(strings); } public void removeNotesAfterString(TGTrack track,int string){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); getSongManager().getMeasureManager().removeNotesAfterString(measure,string); } } public void changeInstrument(TGTrack track,int instrument,boolean percussion){ track.getChannel().setInstrument((short)instrument); if(percussion){ TGChannel.setPercussionChannel(track.getChannel()); track.setStrings(TGSongManager.createPercussionStrings(getSongManager().getFactory(),track.getStrings().size())); }else{ if(track.getChannel().isPercussionChannel()){ TGChannel tempChannel = this.songManager.getFreeChannel((short)instrument,false); track.getChannel().setChannel(tempChannel.getChannel()); track.getChannel().setEffectChannel(tempChannel.getEffectChannel()); } } this.songManager.updateChannel(track.getChannel()); } public void autoCompleteSilences(TGTrack track){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); this.songManager.getMeasureManager().autoCompleteSilences(measure); } } public void orderBeats(TGTrack track){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); this.songManager.getMeasureManager().orderBeats(measure); } } public void transposeNotes(TGTrack track, int transposition , boolean tryKeepString, boolean applyToChords, int applyToString){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); this.songManager.getMeasureManager().transposeNotes(measure, transposition, tryKeepString, applyToChords, applyToString ); } } public void transposeNotes(TGTrack track, int[] transpositionStrings , boolean tryKeepString , boolean applyToChords ){ Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasure measure = (TGMeasure)it.next(); this.songManager.getMeasureManager().transposeNotes(measure, transpositionStrings, tryKeepString , applyToChords); } } /** * Retorna true si es el primer compas */ public boolean isFirstMeasure(TGMeasure measure){ return (measure.getNumber() == 1); } /** * Retorna true si es el ultimo compas */ public boolean isLastMeasure(TGMeasure measure){ return (getSongManager().getSong().countMeasureHeaders() == measure.getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGBeat.java0000644000175000017500000000527211273045225026364 0ustar julianjulian/* * Created on 23-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGBeat { public static final int MAX_VOICES = 2; private long start; private TGMeasure measure; private TGChord chord; private TGText text; private TGVoice[] voices; private TGStroke stroke; public TGBeat(TGFactory factory) { this.start = TGDuration.QUARTER_TIME; this.stroke = factory.newStroke(); this.voices = new TGVoice[ MAX_VOICES ]; for( int i = 0 ; i < MAX_VOICES ; i ++ ){ this.setVoice(i, factory.newVoice(i)); } } public TGMeasure getMeasure() { return this.measure; } public void setMeasure(TGMeasure measure) { this.measure = measure; } public long getStart() { return this.start; } public void setStart(long start) { this.start = start; } public void setVoice(int index, TGVoice voice){ if( index >= 0 && index < this.voices.length ){ this.voices[index] = voice; this.voices[index].setBeat( this ); } } public TGVoice getVoice(int index){ if( index >= 0 && index < this.voices.length ){ return this.voices[index]; } return null; } public int countVoices(){ return this.voices.length; } public void setChord(TGChord chord) { this.chord = chord; this.chord.setBeat(this); } public TGChord getChord() { return this.chord; } public void removeChord() { this.chord = null; } public TGText getText() { return this.text; } public void setText(TGText text) { this.text = text; this.text.setBeat(this); } public void removeText(){ this.text = null; } public boolean isChordBeat(){ return ( this.chord != null ); } public boolean isTextBeat(){ return ( this.text != null ); } public TGStroke getStroke() { return this.stroke; } public boolean isRestBeat(){ for(int v = 0; v < this.countVoices() ; v ++ ){ TGVoice voice = this.getVoice( v ); if( !voice.isEmpty() && !voice.isRestVoice() ){ return false; } } return true; } public TGBeat clone(TGFactory factory){ TGBeat beat = factory.newBeat(); beat.setStart(getStart()); getStroke().copy( beat.getStroke() ); for( int i = 0 ; i < this.voices.length ; i ++ ){ beat.setVoice(i, this.voices[i].clone(factory)); } if(this.chord != null){ beat.setChord( this.chord.clone(factory)); } if(this.text != null){ beat.setText( this.text.clone(factory)); } return beat; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGChannel.java0000644000175000017500000000643211273045225027060 0ustar julianjulianpackage org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class TGChannel { public static final short DEFAULT_PERCUSSION_CHANNEL = 9; public static final short DEFAULT_INSTRUMENT = 25; public static final short DEFAULT_VOLUME = 127; public static final short DEFAULT_BALANCE = 64; public static final short DEFAULT_CHORUS = 0; public static final short DEFAULT_REVERB = 0; public static final short DEFAULT_PHASER = 0; public static final short DEFAULT_TREMOLO = 0; private short channel; private short effectChannel; private short instrument; private short volume; private short balance; private short chorus; private short reverb; private short phaser; private short tremolo; public TGChannel() { this.channel = 0; this.effectChannel = 0; this.instrument = DEFAULT_INSTRUMENT; this.volume = DEFAULT_VOLUME; this.balance = DEFAULT_BALANCE; this.chorus = DEFAULT_CHORUS; this.reverb = DEFAULT_REVERB; this.phaser = DEFAULT_PHASER; this.tremolo = DEFAULT_TREMOLO; } public short getBalance() { return this.balance; } public void setBalance(short balance) { this.balance = balance; } public short getChannel() { return this.channel; } public void setChannel(short channel) { this.channel = channel; } public short getEffectChannel() { return this.effectChannel; } public void setEffectChannel(short effectChannel) { this.effectChannel = effectChannel; } public short getChorus() { return this.chorus; } public void setChorus(short chorus) { this.chorus = chorus; } public short getInstrument() { return (!this.isPercussionChannel()?this.instrument:0); } public void setInstrument(short instrument) { this.instrument = instrument; } public short getPhaser() { return this.phaser; } public void setPhaser(short phaser) { this.phaser = phaser; } public short getReverb() { return this.reverb; } public void setReverb(short reverb) { this.reverb = reverb; } public short getTremolo() { return this.tremolo; } public void setTremolo(short tremolo) { this.tremolo = tremolo; } public short getVolume() { return this.volume; } public void setVolume(short volume) { this.volume = volume; } public boolean isPercussionChannel(){ return TGChannel.isPercussionChannel(this.getChannel()); } public static boolean isPercussionChannel(int channel){ return (channel == DEFAULT_PERCUSSION_CHANNEL); } public static void setPercussionChannel(TGChannel channel){ channel.setChannel(DEFAULT_PERCUSSION_CHANNEL); channel.setEffectChannel(DEFAULT_PERCUSSION_CHANNEL); } public static TGChannel newPercussionChannel(TGFactory factory){ TGChannel channel = factory.newChannel(); TGChannel.setPercussionChannel(channel); return channel; } public TGChannel clone(TGFactory factory){ TGChannel channel = factory.newChannel(); copy(channel); return channel; } public void copy(TGChannel channel){ channel.setChannel(getChannel()); channel.setEffectChannel(getEffectChannel()); channel.setInstrument(getInstrument()); channel.setVolume(getVolume()); channel.setBalance(getBalance()); channel.setChorus(getChorus()); channel.setReverb(getReverb()); channel.setPhaser(getPhaser()); channel.setTremolo(getTremolo()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGChord.java0000644000175000017500000000353611273045225026551 0ustar julianjulian/* * Created on 29-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGChord { private int firstFret; private int[] strings; private String name; private TGBeat beat; public TGChord(int length){ this.strings = new int[length]; for(int i = 0;i < this.strings.length;i++){ this.strings[i] = -1; } } public TGBeat getBeat() { return this.beat; } public void setBeat(TGBeat beat) { this.beat = beat; } public void addFretValue(int string,int fret){ if(string >= 0 && string < this.strings.length){ this.strings[string] = fret; } } public int getFretValue(int string){ if(string >= 0 && string < this.strings.length){ return this.strings[string]; } return -1; } public int getFirstFret() { return this.firstFret; } public void setFirstFret(int firstFret) { this.firstFret = firstFret; } public int[] getStrings() { return this.strings; } public int countStrings(){ return this.strings.length; } public int countNotes(){ int count = 0; for(int i = 0;i < this.strings.length;i++){ if(this.strings[i] >= 0){ count ++; } } return count; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public TGChord clone(TGFactory factory){ TGChord chord = factory.newChord(this.strings.length); chord.setName(getName()); chord.setFirstFret(getFirstFret()); for(int i = 0;i < chord.strings.length;i++){ chord.strings[i] = this.strings[i]; } return chord; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGColor.java0000644000175000017500000000246211273045225026565 0ustar julianjulianpackage org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class TGColor { public static final TGColor RED = newColor(255,0,0); public static final TGColor GREEN = newColor(0,255,0); public static final TGColor BLUE = newColor(0,0,255); public static final TGColor WHITE = newColor(255,255,255); public static final TGColor BLACK = newColor(0,0,0); private int r; private int g; private int b; public TGColor(){ this.r = 0; this.g = 0; this.b = 0; } public int getB() { return this.b; } public void setB(int b) { this.b = b; } public int getG() { return this.g; } public void setG(int g) { this.g = g; } public int getR() { return this.r; } public void setR(int r) { this.r = r; } public boolean isEqual(TGColor color){ return (this.getR() == color.getR() && this.getG() == color.getG() && this.getB() == color.getB()); } public TGColor clone(TGFactory factory){ TGColor color = factory.newColor(); copy(color); return color; } public void copy(TGColor color){ color.setR(getR()); color.setG(getG()); color.setB(getB()); } public static TGColor newColor(int r,int g,int b){ TGColor color = new TGFactory().newColor(); color.setR(r); color.setG(g); color.setB(b); return color; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGDivisionType.java0000644000175000017500000000324711273045225030137 0ustar julianjulian/* * Created on 05-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGDivisionType { public static final TGDivisionType NORMAL = newDivisionType(1,1); /** * Cantidad de Duraciones que entran en los tiempos */ private int enters; /** * Tiempos */ private int times; public TGDivisionType(){ this.enters = 1; this.times = 1; } public int getEnters() { return this.enters; } public void setEnters(int enters) { this.enters = enters; } public int getTimes() { return this.times; } public void setTimes(int times) { this.times = times; } public long convertTime(long time){ return time * this.times / this.enters; } public boolean isEqual(TGDivisionType divisionType){ return (divisionType.getEnters() == getEnters() && divisionType.getTimes() == getTimes()); } public TGDivisionType clone(TGFactory factory){ TGDivisionType divisionType = factory.newDivisionType(); copy(divisionType); return divisionType; } public void copy(TGDivisionType divisionType){ divisionType.setEnters(this.enters); divisionType.setTimes(this.times); } private static TGDivisionType newDivisionType(int enters,int times){ TGDivisionType divisionType = new TGFactory().newDivisionType(); divisionType.setEnters(enters); divisionType.setTimes(times); return divisionType; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGDuration.java0000644000175000017500000001052011273045225027266 0ustar julianjulian/* * Created on 29-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGDuration { /** * tiempo por defecto de la Negra. */ public static final long QUARTER_TIME = 960; /** * Redonda. */ public static final int WHOLE = 1; /** * Blanca. */ public static final int HALF = 2; /** * Negra. */ public static final int QUARTER = 4; /** * Corchea. */ public static final int EIGHTH = 8; /** * Semi-Corchea. */ public static final int SIXTEENTH = 16; /** * Fusa. */ public static final int THIRTY_SECOND = 32; /** * Semi-Fusa. */ public static final int SIXTY_FOURTH = 64; /** * Valor. */ private int value; /** * Puntillo. */ private boolean dotted; /** * Doble Puntillo. */ private boolean doubleDotted; /** * DivisionType. */ private TGDivisionType divisionType; public TGDuration(TGFactory factory){ this.value = QUARTER; this.dotted = false; this.doubleDotted = false; this.divisionType = factory.newDivisionType(); } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } public boolean isDotted() { return this.dotted; } public void setDotted(boolean dotted) { this.dotted = dotted; } public boolean isDoubleDotted() { return this.doubleDotted; } public void setDoubleDotted(boolean doubleDotted) { this.doubleDotted = doubleDotted; } public TGDivisionType getDivision(){ return this.divisionType; } public long getTime(){ long time = (long)( QUARTER_TIME * ( 4.0f / this.value ) ) ; if(this.dotted){ time += time / 2; }else if(this.doubleDotted){ time += ((time / 4) * 3); } return this.divisionType.convertTime(time); } public static TGDuration fromTime(TGFactory factory,long time){ TGDuration duration = factory.newDuration(); duration.setValue(TGDuration.SIXTY_FOURTH); duration.setDotted(false); duration.setDoubleDotted(false); duration.getDivision().setEnters(3); duration.getDivision().setTimes(2); return fromTime(factory,time,duration); } public static TGDuration fromTime(TGFactory factory,long time,TGDuration minDuration){ return fromTime(factory, time, minDuration, 10); } public static TGDuration fromTime(TGFactory factory,long time,TGDuration minimum, int diff){ TGDuration duration = minimum.clone(factory); TGDuration tmpDuration = factory.newDuration(); tmpDuration.setValue(TGDuration.WHOLE); tmpDuration.setDotted(true); boolean finish = false; while(!finish){ long tmpTime = tmpDuration.getTime(); if(tmpTime - diff <= time){ //if(tmpTime > duration.getTime()){ if(Math.abs( tmpTime - time ) < Math.abs( duration.getTime() - time ) ){ duration = tmpDuration.clone(factory); } } if(tmpDuration.isDotted()){ tmpDuration.setDotted(false); }else if(tmpDuration.getDivision().isEqual(TGDivisionType.NORMAL)){ tmpDuration.getDivision().setEnters(3); tmpDuration.getDivision().setTimes(2); }else{ tmpDuration.setValue(tmpDuration.getValue() * 2); tmpDuration.setDotted(true); tmpDuration.getDivision().setEnters(1); tmpDuration.getDivision().setTimes(1); } if(tmpDuration.getValue() > TGDuration.SIXTY_FOURTH){ finish = true; } } return duration; } /* public int log2(){ return (int)((Math.log(getValue() ) / Math.log(2.0)) + 0.5f ); } */ public int getIndex(){ int index = 0; int value = this.value; while( ( value = ( value >> 1 ) ) > 0 ){ index ++; } return index; } public boolean isEqual(TGDuration d){ return (getValue() == d.getValue() && isDotted() == d.isDotted() && isDoubleDotted() == d.isDoubleDotted() && getDivision().isEqual(d.getDivision())); } public TGDuration clone(TGFactory factory){ TGDuration duration = factory.newDuration(); copy(duration); return duration; } public void copy(TGDuration duration){ duration.setValue(getValue()); duration.setDotted(isDotted()); duration.setDoubleDotted(isDoubleDotted()); getDivision().copy(duration.getDivision()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGLyric.java0000644000175000017500000000146511273045225026573 0ustar julianjulianpackage org.herac.tuxguitar.song.models; public abstract class TGLyric { private static final String REGEX = " "; private int from; private String lyrics; public TGLyric(){ this.from = 1; this.lyrics = new String(); } public int getFrom() { return this.from; } public void setFrom(int from) { this.from = from; } public String getLyrics() { return this.lyrics; } public void setLyrics(String lyrics) { this.lyrics = lyrics; } public String[] getLyricBeats(){ String lyrics = getLyrics(); lyrics = lyrics.replaceAll("\n",REGEX); lyrics = lyrics.replaceAll("\r",REGEX); return lyrics.split(REGEX); } public boolean isEmpty(){ return (getLyrics().length() == 0); } public void copy(TGLyric lyric){ lyric.setFrom(getFrom()); lyric.setLyrics(getLyrics()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMarker.java0000644000175000017500000000200711273045225026723 0ustar julianjulianpackage org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class TGMarker { private static final TGColor DEFAULT_COLOR = TGColor.RED; private static final String DEFAULT_TITLE = "Untitled"; private int measure; private String title; private TGColor color; public TGMarker(TGFactory factory) { this.measure = 0; this.title = DEFAULT_TITLE; this.color = DEFAULT_COLOR.clone(factory); } public int getMeasure() { return this.measure; } public void setMeasure(int measure) { this.measure = measure; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } public TGColor getColor() { return this.color; } public void setColor(TGColor color) { this.color = color; } public TGMarker clone(TGFactory factory){ TGMarker marker = factory.newMarker(); marker.setMeasure(getMeasure()); marker.setTitle(getTitle()); getColor().copy(marker.getColor()); return marker; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasure.java0000644000175000017500000000657211273045225027116 0ustar julianjulian/* * Created on 26-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGMeasure { public static final int CLEF_TREBLE = 1; public static final int CLEF_BASS = 2; public static final int CLEF_TENOR = 3; public static final int CLEF_ALTO = 4; public static final int DEFAULT_CLEF = CLEF_TREBLE; public static final int DEFAULT_KEY_SIGNATURE= 0; private TGMeasureHeader header; private TGTrack track; private int clef; private int keySignature; private List beats; public TGMeasure(TGMeasureHeader header){ this.header = header; this.clef = DEFAULT_CLEF; this.keySignature = DEFAULT_KEY_SIGNATURE; this.beats = new ArrayList(); } public TGTrack getTrack() { return this.track; } public void setTrack(TGTrack track) { this.track = track; } public int getClef() { return this.clef; } public void setClef(int clef) { this.clef = clef; } public int getKeySignature() { return this.keySignature; } public void setKeySignature(int keySignature) { this.keySignature = keySignature; } public List getBeats() { return this.beats; } public void addBeat(TGBeat beat){ beat.setMeasure(this); this.beats.add(beat); } public void moveBeat(int index,TGBeat beat){ this.beats.remove(beat); this.beats.add(index,beat); } public void removeBeat(TGBeat beat){ this.beats.remove(beat); } public TGBeat getBeat(int index){ if(index >= 0 && index < countBeats()){ return (TGBeat)this.beats.get(index); } return null; } public int countBeats(){ return this.beats.size(); } public TGMeasureHeader getHeader() { return this.header; } public void setHeader(TGMeasureHeader header) { this.header = header; } public int getNumber() { return this.header.getNumber(); } public int getRepeatClose() { return this.header.getRepeatClose(); } public long getStart() { return this.header.getStart(); } public TGTempo getTempo() { return this.header.getTempo(); } public TGTimeSignature getTimeSignature() { return this.header.getTimeSignature(); } public boolean isRepeatOpen() { return this.header.isRepeatOpen(); } public int getTripletFeel() { return this.header.getTripletFeel(); } public long getLength() { return this.header.getLength(); } public boolean hasMarker() { return this.header.hasMarker(); } public TGMarker getMarker(){ return this.header.getMarker(); } public void makeEqual(TGMeasure measure){ this.clef = measure.getClef(); this.keySignature = measure.getKeySignature(); this.beats.clear(); for(int i = 0; i < measure.countBeats(); i ++){ TGBeat beat = measure.getBeat(i); this.addBeat(beat); } } public TGMeasure clone(TGFactory factory,TGMeasureHeader header){ TGMeasure measure = factory.newMeasure(header); measure.setClef(getClef()); measure.setKeySignature(getKeySignature()); for(int i = 0; i < countBeats(); i ++){ TGBeat beat = (TGBeat)this.beats.get(i); measure.addBeat(beat.clone(factory)); } return measure; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasureHeader.java0000644000175000017500000000754011273045225030223 0ustar julianjulian/* * Created on 26-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGMeasureHeader { public static final int TRIPLET_FEEL_NONE = 1; public static final int TRIPLET_FEEL_EIGHTH = 2; public static final int TRIPLET_FEEL_SIXTEENTH = 3; private int number; private long start; private TGTimeSignature timeSignature; private TGTempo tempo; private TGMarker marker; private boolean repeatOpen; private int repeatAlternative; private int repeatClose; private int tripletFeel; private TGSong song; public TGMeasureHeader(TGFactory factory){ this.number = 0; this.start = TGDuration.QUARTER_TIME; this.timeSignature = factory.newTimeSignature(); this.tempo = factory.newTempo(); this.marker = null; this.tripletFeel = TRIPLET_FEEL_NONE; this.repeatOpen = false; this.repeatClose = 0; this.repeatAlternative = 0; this.checkMarker(); } public int getNumber() { return this.number; } public void setNumber(int number) { this.number = number; this.checkMarker(); } public int getRepeatClose() { return this.repeatClose; } public void setRepeatClose(int repeatClose) { this.repeatClose = repeatClose; } public int getRepeatAlternative() { return this.repeatAlternative; } /** * bitwise value 1 TO 8. * (1 << AlternativeNumber) */ public void setRepeatAlternative(int repeatAlternative) { this.repeatAlternative = repeatAlternative; } public boolean isRepeatOpen() { return this.repeatOpen; } public void setRepeatOpen(boolean repeatOpen) { this.repeatOpen = repeatOpen; } public long getStart() { return this.start; } public void setStart(long start) { this.start = start; } public int getTripletFeel() { return this.tripletFeel; } public void setTripletFeel(int tripletFeel) { this.tripletFeel = tripletFeel; } public TGTempo getTempo() { return this.tempo; } public void setTempo(TGTempo tempo) { this.tempo = tempo; } public TGTimeSignature getTimeSignature() { return this.timeSignature; } public void setTimeSignature(TGTimeSignature timeSignature) { this.timeSignature = timeSignature; } public TGMarker getMarker() { return this.marker; } public void setMarker(TGMarker marker) { this.marker = marker; } public boolean hasMarker(){ return (getMarker() != null); } private void checkMarker(){ if(hasMarker()){ this.marker.setMeasure(getNumber()); } } public long getLength(){ return getTimeSignature().getNumerator() * getTimeSignature().getDenominator().getTime(); } public TGSong getSong() { return this.song; } public void setSong(TGSong song) { this.song = song; } public void makeEqual(TGMeasureHeader measure){ this.start = measure.getStart(); this.timeSignature = measure.getTimeSignature(); this.tempo = measure.getTempo(); this.marker = measure.getMarker(); this.repeatOpen = measure.isRepeatOpen(); this.repeatClose = measure.getRepeatClose(); this.repeatAlternative = measure.getRepeatAlternative(); this.checkMarker(); } public TGMeasureHeader clone(TGFactory factory){ TGMeasureHeader header = factory.newHeader(); header.setNumber(getNumber()); header.setStart(getStart()); header.setRepeatOpen(isRepeatOpen()); header.setRepeatAlternative(getRepeatAlternative()); header.setRepeatClose(getRepeatClose()); header.setTripletFeel(getTripletFeel()); getTimeSignature().copy(header.getTimeSignature()); getTempo().copy(header.getTempo()); header.setMarker(hasMarker()?(TGMarker)getMarker().clone(factory):null); return header; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGNote.java0000644000175000017500000000340411273045225026411 0ustar julianjulian/* * Created on 23-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGNote { private int value; private int velocity; private int string; private boolean tiedNote; private TGNoteEffect effect; private TGVoice voice; public TGNote(TGFactory factory) { this.value = 0; this.velocity = TGVelocities.DEFAULT; this.string = 1; this.tiedNote = false; this.effect = factory.newEffect(); } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } public int getVelocity() { return this.velocity; } public void setVelocity(int velocity) { this.velocity = velocity; } public int getString() { return this.string; } public void setString(int string) { this.string = string; } public boolean isTiedNote() { return this.tiedNote; } public void setTiedNote(boolean tiedNote) { this.tiedNote = tiedNote; } public TGNoteEffect getEffect() { return this.effect; } public void setEffect(TGNoteEffect effect) { this.effect = effect; } public TGVoice getVoice() { return this.voice; } public void setVoice(TGVoice voice) { this.voice = voice; } public TGNote clone(TGFactory factory){ TGNote note = factory.newNote(); note.setValue(getValue()); note.setVelocity(getVelocity()); note.setString(getString()); note.setTiedNote(isTiedNote()); note.setEffect(getEffect().clone(factory)); return note; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGNoteEffect.java0000644000175000017500000002214311273045225027527 0ustar julianjulian/* * Created on 26-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGNoteEffect { private TGEffectBend bend; private TGEffectTremoloBar tremoloBar; private TGEffectHarmonic harmonic; private TGEffectGrace grace; private TGEffectTrill trill; private TGEffectTremoloPicking tremoloPicking; private boolean vibrato; private boolean deadNote; private boolean slide; private boolean hammer; private boolean ghostNote; private boolean accentuatedNote; private boolean heavyAccentuatedNote; private boolean palmMute; private boolean staccato; private boolean tapping; private boolean slapping; private boolean popping; private boolean fadeIn; public TGNoteEffect(){ this.bend = null; this.tremoloBar = null; this.harmonic = null; this.grace = null; this.trill = null; this.tremoloPicking = null; this.vibrato = false; this.deadNote = false; this.slide = false; this.hammer = false; this.ghostNote = false; this.accentuatedNote = false; this.heavyAccentuatedNote = false; this.palmMute = false; this.staccato = false; this.tapping = false; this.slapping = false; this.popping = false; this.fadeIn = false; } public boolean isDeadNote() { return this.deadNote; } public void setDeadNote(boolean deadNote) { this.deadNote = deadNote; //si es true, quito los efectos incompatibles if(this.isDeadNote()){ this.tremoloBar = null; this.bend = null; this.trill = null; this.slide = false; this.hammer = false; } } public boolean isVibrato() { return this.vibrato; } public void setVibrato(boolean vibrato) { this.vibrato = vibrato; //si no es null quito los efectos incompatibles if(this.isVibrato()){ this.trill = null; } } public TGEffectBend getBend() { return this.bend; } public void setBend(TGEffectBend bend) { this.bend = bend; //si no es null quito los efectos incompatibles if(this.isBend()){ this.tremoloBar = null; this.trill = null; this.deadNote = false; this.slide = false; this.hammer = false; } } public boolean isBend() { return (this.bend != null && !this.bend.getPoints().isEmpty()); } public TGEffectTremoloBar getTremoloBar() { return this.tremoloBar; } public void setTremoloBar(TGEffectTremoloBar tremoloBar) { this.tremoloBar = tremoloBar; //si no es null quito los efectos incompatibles if(this.isTremoloBar()){ this.bend = null; this.trill = null; this.deadNote = false; this.slide = false; this.hammer = false; } } public boolean isTremoloBar() { return (this.tremoloBar != null); } public TGEffectTrill getTrill() { return this.trill; } public void setTrill(TGEffectTrill trill) { this.trill = trill; //si es true, quito los efectos incompatibles if(this.isTrill()){ this.bend = null; this.tremoloBar = null; this.tremoloPicking = null; this.slide = false; this.hammer = false; this.deadNote = false; this.vibrato = false; } } public boolean isTrill() { return (this.trill != null); } public TGEffectTremoloPicking getTremoloPicking() { return this.tremoloPicking; } public void setTremoloPicking(TGEffectTremoloPicking tremoloPicking) { this.tremoloPicking = tremoloPicking; //si es true, quito los efectos incompatibles if(this.isTremoloPicking()){ this.trill = null; this.bend = null; this.tremoloBar = null; this.slide = false; this.hammer = false; this.deadNote = false; this.vibrato = false; } } public boolean isTremoloPicking() { return (this.tremoloPicking != null); } public boolean isHammer() { return this.hammer; } public void setHammer(boolean hammer) { this.hammer = hammer; //si es true, quito los efectos incompatibles if(this.isHammer()){ this.trill = null; this.tremoloBar = null; this.bend = null; this.deadNote = false; this.slide = false; } } public boolean isSlide() { return this.slide; } public void setSlide(boolean slide) { this.slide = slide; //si es true, quito los efectos incompatibles if(this.isSlide()){ this.trill = null; this.tremoloBar = null; this.bend = null; this.deadNote = false; this.hammer = false; } } public boolean isGhostNote() { return this.ghostNote; } public void setGhostNote(boolean ghostNote) { this.ghostNote = ghostNote; //si es true, quito los efectos incompatibles if(this.isGhostNote()){ this.accentuatedNote = false; this.heavyAccentuatedNote = false; } } public boolean isAccentuatedNote() { return this.accentuatedNote; } public void setAccentuatedNote(boolean accentuatedNote) { this.accentuatedNote = accentuatedNote; //si es true, quito los efectos incompatibles if(this.isAccentuatedNote()){ this.ghostNote = false; this.heavyAccentuatedNote = false; } } public boolean isHeavyAccentuatedNote() { return this.heavyAccentuatedNote; } public void setHeavyAccentuatedNote(boolean heavyAccentuatedNote) { this.heavyAccentuatedNote = heavyAccentuatedNote; //si es true, quito los efectos incompatibles if(this.isHeavyAccentuatedNote()){ this.ghostNote = false; this.accentuatedNote = false; } } public void setHarmonic(TGEffectHarmonic harmonic) { this.harmonic = harmonic; } public TGEffectHarmonic getHarmonic() { return this.harmonic; } public boolean isHarmonic() { return (this.harmonic != null); } public TGEffectGrace getGrace() { return this.grace; } public void setGrace(TGEffectGrace grace) { this.grace = grace; } public boolean isGrace() { return (this.grace != null); } public boolean isPalmMute() { return this.palmMute; } public void setPalmMute(boolean palmMute) { this.palmMute = palmMute; //si es true, quito los efectos incompatibles if(this.isPalmMute()){ this.staccato = false; } } public boolean isStaccato() { return this.staccato; } public void setStaccato(boolean staccato) { this.staccato = staccato; //si es true, quito los efectos incompatibles if(this.isStaccato()){ this.palmMute = false; } } public boolean isPopping() { return this.popping; } public void setPopping(boolean popping) { this.popping = popping; //si es true, quito los efectos incompatibles if(this.isPopping()){ this.tapping = false; this.slapping = false; } } public boolean isSlapping() { return this.slapping; } public void setSlapping(boolean slapping) { this.slapping = slapping; //si es true, quito los efectos incompatibles if(this.isSlapping()){ this.tapping = false; this.popping = false; } } public boolean isTapping() { return this.tapping; } public void setTapping(boolean tapping) { this.tapping = tapping; //si es true, quito los efectos incompatibles if(this.isTapping()){ this.slapping = false; this.popping = false; } } public boolean isFadeIn() { return this.fadeIn; } public void setFadeIn(boolean fadeIn) { this.fadeIn = fadeIn; } public boolean hasAnyEffect(){ return (isBend() || isTremoloBar() || isHarmonic() || isGrace() || isTrill() || isTremoloPicking() || isVibrato() || isDeadNote() || isSlide() || isHammer() || isGhostNote() || isAccentuatedNote() || isHeavyAccentuatedNote() || isPalmMute() || isStaccato() || isTapping() || isSlapping() || isPopping() || isFadeIn()); } public TGNoteEffect clone(TGFactory factory){ TGNoteEffect effect = factory.newEffect(); effect.setVibrato(isVibrato()); effect.setDeadNote(isDeadNote()); effect.setSlide(isSlide()); effect.setHammer(isHammer()); effect.setGhostNote(isGhostNote()); effect.setAccentuatedNote(isAccentuatedNote()); effect.setHeavyAccentuatedNote(isHeavyAccentuatedNote()); effect.setPalmMute(isPalmMute()); effect.setStaccato(isStaccato()); effect.setTapping(isTapping()); effect.setSlapping(isSlapping()); effect.setPopping(isPopping()); effect.setFadeIn(isFadeIn()); effect.setBend(isBend()?(TGEffectBend)this.bend.clone(factory):null); effect.setTremoloBar(isTremoloBar()?(TGEffectTremoloBar)this.tremoloBar.clone(factory):null); effect.setHarmonic(isHarmonic()?(TGEffectHarmonic)this.harmonic.clone(factory):null); effect.setGrace(isGrace()?(TGEffectGrace)this.grace.clone(factory):null); effect.setTrill(isTrill()?(TGEffectTrill)this.trill.clone(factory):null); effect.setTremoloPicking(isTremoloPicking()?(TGEffectTremoloPicking)this.tremoloPicking.clone(factory):null); return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGScale.java0000644000175000017500000000107711273045225026537 0ustar julianjulianpackage org.herac.tuxguitar.song.models; public abstract class TGScale { private final boolean[] notes = new boolean[12]; private int key; public TGScale(){ this.clear(); } public void setKey(int key){ this.key = key; } public int getKey(){ return this.key; } public void setNote(int note,boolean on){ this.notes[note] = on; } public boolean getNote(int note){ return this.notes[((note + (12 - this.key)) % 12)]; } public void clear(){ this.setKey(0); for(int i = 0; i < this.notes.length; i++){ this.setNote(i,false); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGSong.java0000644000175000017500000001131711273045225026414 0ustar julianjulian/* * Created on 23-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGSong { private String name; private String artist; private String album; private String author; private String date; private String copyright; private String writer; private String transcriber; private String comments; private List tracks; private List measureHeaders; public TGSong() { this.name = new String(); this.artist = new String(); this.album = new String(); this.author = new String(); this.date = new String(); this.copyright = new String(); this.writer = new String(); this.transcriber = new String(); this.comments = new String(); this.tracks = new ArrayList(); this.measureHeaders = new ArrayList(); } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getAlbum() { return this.album; } public void setAlbum(String album) { this.album = album; } public String getAuthor() { return this.author; } public void setAuthor(String author) { this.author = author; } public String getArtist() { return this.artist; } public void setArtist(String artist) { this.artist = artist; } public String getDate() { return this.date; } public void setDate(String date) { this.date = date; } public String getCopyright() { return this.copyright; } public void setCopyright(String copyright) { this.copyright = copyright; } public String getWriter() { return this.writer; } public void setWriter(String writer) { this.writer = writer; } public String getTranscriber() { return this.transcriber; } public void setTranscriber(String transcriber) { this.transcriber = transcriber; } public String getComments() { return this.comments; } public void setComments(String comments) { this.comments = comments; } public int countMeasureHeaders(){ return this.measureHeaders.size(); } public void addMeasureHeader(TGMeasureHeader measureHeader){ this.addMeasureHeader(countMeasureHeaders(),measureHeader); } public void addMeasureHeader(int index,TGMeasureHeader measureHeader){ measureHeader.setSong(this); this.measureHeaders.add(index,measureHeader); } public void removeMeasureHeader(int index){ this.measureHeaders.remove(index); } public void removeMeasureHeader(TGMeasureHeader measureHeader){ this.measureHeaders.remove(measureHeader); } public TGMeasureHeader getMeasureHeader(int index){ return (TGMeasureHeader)this.measureHeaders.get(index); } public Iterator getMeasureHeaders() { return this.measureHeaders.iterator(); } public int countTracks(){ return this.tracks.size(); } public void addTrack(TGTrack track){ this.addTrack(countTracks(),track); } public void addTrack(int index,TGTrack track){ track.setSong(this); this.tracks.add(index,track); } public void moveTrack(int index,TGTrack track){ this.tracks.remove(track); this.tracks.add(index,track); } public void removeTrack(TGTrack track){ this.tracks.remove(track); track.clear(); } public TGTrack getTrack(int index){ return (TGTrack)this.tracks.get(index); } public Iterator getTracks() { return this.tracks.iterator(); } public boolean isEmpty(){ return (countMeasureHeaders() == 0 || countTracks() == 0); } public void clear(){ Iterator tracks = getTracks(); while(tracks.hasNext()){ TGTrack track = (TGTrack)tracks.next(); track.clear(); } this.tracks.clear(); this.measureHeaders.clear(); } public TGSong clone(TGFactory factory){ TGSong song = factory.newSong(); copy(factory,song); return song; } public void copy(TGFactory factory,TGSong song){ song.clear(); song.setName(getName()); song.setArtist(getArtist()); song.setAlbum(getAlbum()); song.setAuthor(getAuthor()); song.setDate(getDate()); song.setCopyright(getCopyright()); song.setWriter(getWriter()); song.setTranscriber(getTranscriber()); song.setComments(getComments()); Iterator headers = getMeasureHeaders(); while(headers.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)headers.next(); song.addMeasureHeader(header.clone(factory)); } Iterator tracks = getTracks(); while(tracks.hasNext()){ TGTrack track = (TGTrack)tracks.next(); song.addTrack(track.clone(factory, song)); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGString.java0000644000175000017500000000217411273045225026755 0ustar julianjulian/* * Created on 30-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGString { private int number; private int value; public TGString(){ this.number = 0; this.value = 0; } public int getNumber() { return this.number; } public int getValue() { return this.value; } public void setNumber(int number) { this.number = number; } public void setValue(int value) { this.value = value; } public boolean isEqual(TGString string){ return (this.getNumber() == string.getNumber() && this.getValue() == string.getValue()); } public TGString clone(TGFactory factory){ TGString string = factory.newString(); copy(string); return string; } public void copy(TGString string){ string.setNumber(getNumber()); string.setValue(getValue()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGStroke.java0000644000175000017500000000260211273045225026752 0ustar julianjulianpackage org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class TGStroke { public static final int STROKE_NONE = 0; public static final int STROKE_UP = 1; public static final int STROKE_DOWN = -1; private int direction; private int value; public TGStroke(){ this.direction = STROKE_NONE; } public int getDirection() { return this.direction; } public void setDirection(int direction) { this.direction = direction; } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } public int getIncrementTime( TGBeat beat ){ long duration = 0; if( this.value > 0 ){ for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); if( !voice.isEmpty() ){ long currentDuration = voice.getDuration().getTime(); if(duration == 0 || currentDuration < duration){ duration = ( currentDuration <= TGDuration.QUARTER_TIME ? currentDuration : TGDuration.QUARTER_TIME ); } } } if( duration > 0 ){ return Math.round( ( ( duration / 8.0f ) * ( 4.0f / this.value ) ) ); } } return 0; } public TGStroke clone(TGFactory factory){ TGStroke stroke = factory.newStroke(); copy(stroke); return stroke; } public void copy(TGStroke stroke){ stroke.setValue(getValue()); stroke.setDirection(getDirection()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTempo.java0000644000175000017500000000243411273045225026572 0ustar julianjulian/* * Created on 29-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGTempo { private static final int SECOND_IN_MILLIS = 1000; private int value; public TGTempo(){ this.value = 120; } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } public long getInMillis(){ double millis = (60.00 / getValue() * SECOND_IN_MILLIS); return (long)millis; } public long getInUSQ(){ double usq = ((60.00 / getValue() * SECOND_IN_MILLIS) * 1000.00); return (long)usq; } public static TGTempo fromUSQ(TGFactory factory,int usq){ double value = ((60.00 * SECOND_IN_MILLIS) / (usq / 1000.00)); TGTempo tempo = factory.newTempo(); tempo.setValue((int)value); return tempo; } public TGTempo clone(TGFactory factory){ TGTempo tempo = factory.newTempo(); copy(tempo); return tempo; } public void copy(TGTempo tempo){ tempo.setValue(getValue()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGText.java0000644000175000017500000000127511273045225026434 0ustar julianjulianpackage org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; public class TGText{ private String value; private TGBeat beat; public TGText(){ super(); } public TGBeat getBeat() { return this.beat; } public void setBeat(TGBeat beat) { this.beat = beat; } public String getValue() { return this.value; } public void setValue(String value) { this.value = value; } public boolean isEmpty(){ return (this.value == null || this.value.length() == 0); } public void copy(TGText text) { text.setValue(getValue()); } public TGText clone(TGFactory factory) { TGText text = factory.newText(); copy(text); return text; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTimeSignature.java0000644000175000017500000000256211273045225030270 0ustar julianjulian/* * Created on 29-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGTimeSignature { private TGDuration denominator; private int numerator; public TGTimeSignature(TGFactory factory){ this.numerator = 4; this.denominator = factory.newDuration(); } public int getNumerator() { return this.numerator; } public void setNumerator(int numerator) { this.numerator = numerator; } public TGDuration getDenominator() { return this.denominator; } public void setDenominator(TGDuration denominator) { this.denominator = denominator; } public TGTimeSignature clone(TGFactory factory){ TGTimeSignature timeSignature = factory.newTimeSignature(); copy(timeSignature); return timeSignature; } public void copy(TGTimeSignature timeSignature){ timeSignature.setNumerator(getNumerator()); getDenominator().copy(timeSignature.getDenominator()); } public boolean isEqual(TGTimeSignature ts){ return (getNumerator() == ts.getNumerator() && getDenominator().isEqual(ts.getDenominator())); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTrack.java0000644000175000017500000000774711273045225026566 0ustar julianjulian/* * Created on 23-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGTrack { public static final int MAX_OFFSET = 24; public static final int MIN_OFFSET = -24; private int number; private int offset; private boolean solo; private boolean mute; private String name; private List measures; private List strings; private TGChannel channel; private TGColor color; private TGLyric lyrics; private TGSong song; public TGTrack(TGFactory factory) { this.number = 0; this.offset = 0; this.solo = false; this.mute = false; this.name = new String(); this.measures = new ArrayList(); this.strings = new ArrayList(); this.channel = factory.newChannel(); this.color = factory.newColor(); this.lyrics = factory.newLyric(); } public int getNumber() { return this.number; } public void setNumber(int number) { this.number = number; } public Iterator getMeasures() { return this.measures.iterator(); } public void addMeasure(TGMeasure measure){ measure.setTrack(this); this.measures.add(measure); } public void addMeasure(int index,TGMeasure measure){ measure.setTrack(this); this.measures.add(index,measure); } public TGMeasure getMeasure(int index){ if(index >= 0 && index < countMeasures()){ return (TGMeasure)this.measures.get(index); } return null; } public void removeMeasure(int index){ this.measures.remove(index); } public int countMeasures(){ return this.measures.size(); } public TGChannel getChannel() { return this.channel; } public void setChannel(TGChannel channel) { this.channel = channel; } public List getStrings() { return this.strings; } public void setStrings(List strings) { this.strings = strings; } public TGColor getColor() { return this.color; } public void setColor(TGColor color) { this.color = color; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getOffset() { return this.offset; } public void setOffset(int offset) { this.offset = offset; } public boolean isSolo() { return this.solo; } public void setSolo(boolean solo) { this.solo = solo; } public boolean isMute() { return this.mute; } public void setMute(boolean mute) { this.mute = mute; } public TGLyric getLyrics() { return this.lyrics; } public void setLyrics(TGLyric lyrics) { this.lyrics = lyrics; } public TGString getString(int number){ return (TGString)this.strings.get(number - 1); } public int stringCount(){ return this.strings.size(); } public boolean isPercussionTrack(){ return (getChannel().isPercussionChannel()); } public TGSong getSong() { return this.song; } public void setSong(TGSong song) { this.song = song; } public void clear(){ this.strings.clear(); this.measures.clear(); } public TGTrack clone(TGFactory factory,TGSong song){ TGTrack track = factory.newTrack(); copy(factory, song, track); return track; } public void copy(TGFactory factory,TGSong song,TGTrack track){ track.clear(); track.setNumber(getNumber()); track.setName(getName()); track.setOffset(getOffset()); getChannel().copy(track.getChannel()); getColor().copy(track.getColor()); getLyrics().copy(track.getLyrics()); for (int i = 0; i < getStrings().size(); i++) { TGString string = (TGString) getStrings().get(i); track.getStrings().add(string.clone(factory)); } for (int i = 0; i < countMeasures(); i++) { TGMeasure measure = getMeasure(i); track.addMeasure(measure.clone(factory,song.getMeasureHeader(i))); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGVelocities.java0000644000175000017500000000152711273045225027616 0ustar julianjulianpackage org.herac.tuxguitar.song.models; public interface TGVelocities { public static final int MIN_VELOCITY = 15; public static final int VELOCITY_INCREMENT = 16; public static final int PIANO_PIANISSIMO = (MIN_VELOCITY); public static final int PIANISSIMO = (MIN_VELOCITY + VELOCITY_INCREMENT); public static final int PIANO = (MIN_VELOCITY + (VELOCITY_INCREMENT * 2)); public static final int MEZZO_PIANO = (MIN_VELOCITY + (VELOCITY_INCREMENT * 3)); public static final int MEZZO_FORTE = (MIN_VELOCITY + (VELOCITY_INCREMENT * 4)); public static final int FORTE = (MIN_VELOCITY + (VELOCITY_INCREMENT * 5)); public static final int FORTISSIMO = (MIN_VELOCITY + (VELOCITY_INCREMENT * 6)); public static final int FORTE_FORTISSIMO = (MIN_VELOCITY + (VELOCITY_INCREMENT * 7)); public static final int DEFAULT = FORTE; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/TGVoice.java0000644000175000017500000000500211273045225026545 0ustar julianjulian/* * Created on 23-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGVoice { public static final int DIRECTION_NONE = 0; public static final int DIRECTION_UP = 1; public static final int DIRECTION_DOWN = 2; private TGBeat beat; private TGDuration duration; private List notes; private int index; private int direction; private boolean empty; public TGVoice(TGFactory factory, int index) { this.duration = factory.newDuration(); this.notes = new ArrayList(); this.index = index; this.empty = true; this.direction = DIRECTION_NONE; } public int getIndex() { return this.index; } public void setIndex(int index) { this.index = index; } public boolean isEmpty() { return this.empty; } public void setEmpty(boolean empty) { this.empty = empty; } public int getDirection() { return this.direction; } public void setDirection(int direction) { this.direction = direction; } public TGDuration getDuration() { return this.duration; } public void setDuration(TGDuration duration) { this.duration = duration; } public TGBeat getBeat() { return this.beat; } public void setBeat(TGBeat beat) { this.beat = beat; } public List getNotes() { return this.notes; } public void addNote(TGNote note){ note.setVoice(this); this.notes.add(note); this.setEmpty(false); } public void moveNote(int index,TGNote note){ getNotes().remove(note); getNotes().add(index,note); } public void removeNote(TGNote note){ this.notes.remove(note); } public TGNote getNote(int index){ if(index >= 0 && index < countNotes()){ return (TGNote)this.notes.get(index); } return null; } public int countNotes(){ return this.notes.size(); } public boolean isRestVoice(){ return this.notes.isEmpty(); } public TGVoice clone(TGFactory factory){ TGVoice voice = factory.newVoice(getIndex()); voice.setEmpty(isEmpty()); voice.setDirection( getDirection() ); getDuration().copy(voice.getDuration()); for(int i = 0;i < countNotes();i++){ TGNote note = (TGNote)this.notes.get(i); voice.addNote(note.clone(factory)); } return voice; } }././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLPluginExporter.javatuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLPluginExporter.java0000644000175000017500000000111311273045350033472 0ustar julianjulianpackage org.herac.tuxguitar.io.musicxml; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class MusicXMLPluginExporter extends TGExporterPlugin{ protected TGRawExporter getExporter() { return new MusicXMLSongExporter(); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "MusicXML exporter plugin"; } public String getName() { return "MusicXML exporter"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLSongExporter.java0000644000175000017500000000160111273045350033144 0ustar julianjulianpackage org.herac.tuxguitar.io.musicxml; import java.io.OutputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; public class MusicXMLSongExporter implements TGLocalFileExporter{ private OutputStream stream; public String getExportName() { return "MusicXML"; } public TGFileFormat getFileFormat() { return new TGFileFormat("MusicXML","*.xml"); } public boolean configure(boolean setDefaults) { return true; } public void init(TGFactory factory,OutputStream stream){ this.stream = stream; } public void exportSong(TGSong song) throws TGFileFormatException { if( this.stream != null ){ new MusicXMLWriter(this.stream).writeSong(song); } } }tuxguitar-src-1.2/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLWriter.java0000644000175000017500000003756311273045350032001 0ustar julianjulianpackage org.herac.tuxguitar.io.musicxml; import java.io.OutputStream; import java.util.Iterator; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.player.base.MidiInstrument; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Node; public class MusicXMLWriter { private static final String[] NOTE_NAMES = new String[]{"C","D","E","F","G","A","B"}; private static final int NOTE_SHARPS[] = new int[]{0,0,1,1,2,3,3,4,4,5,5,6}; private static final int NOTE_FLATS[] = new int[]{0,1,1,2,2,3,4,4,5,5,6,6}; private static final boolean[] NOTE_ALTERATIONS = new boolean[]{false,true,false,true,false,false,true,false,true,false,true,false}; private static final String[] DURATION_NAMES = new String[]{ "whole", "half", "quarter", "eighth", "16th", "32nd", "64th", }; private static final int DURATION_DIVISIONS = (int)TGDuration.QUARTER_TIME; private static final int[] DURATION_VALUES = new int[]{ DURATION_DIVISIONS * 4, // WHOLE DURATION_DIVISIONS * 2, // HALF DURATION_DIVISIONS * 1, // QUARTER DURATION_DIVISIONS / 2, // EIGHTH DURATION_DIVISIONS / 4, // SIXTEENTH DURATION_DIVISIONS / 8, // THIRTY_SECOND DURATION_DIVISIONS / 16, // SIXTY_FOURTH }; private TGSongManager manager; private OutputStream stream; private Document document; public MusicXMLWriter(OutputStream stream){ this.stream = stream; } public void writeSong(TGSong song) throws TGFileFormatException{ try { this.manager = new TGSongManager(); this.manager.setSong(song); this.document = newDocument(); Node node = this.addNode(this.document,"score-partwise"); this.writeHeaders(node); this.writeSong(node); this.saveDocument(); this.stream.flush(); this.stream.close(); }catch(Throwable throwable){ throw new TGFileFormatException("Could not write song!.",throwable); } } private void writeHeaders(Node parent){ this.writeWork(parent); this.writeIdentification(parent); } private void writeWork(Node parent){ this.addNode(this.addNode(parent,"work"),"work-title",this.manager.getSong().getName()); } private void writeIdentification(Node parent){ Node identification = this.addNode(parent,"identification"); this.addNode(this.addNode(identification,"encoding"), "software", "TuxGuitar"); this.addAttribute(this.addNode(identification,"creator",this.manager.getSong().getAuthor()),"type","composer"); } private void writeSong(Node parent){ this.writePartList(parent); this.writeParts(parent); } private void writePartList(Node parent){ Node partList = this.addNode(parent,"part-list"); Iterator tracks = this.manager.getSong().getTracks(); while(tracks.hasNext()){ TGTrack track = (TGTrack)tracks.next(); Node scoreParts = this.addNode(partList,"score-part"); this.addAttribute(scoreParts, "id", "P" + track.getNumber()); this.addNode(scoreParts, "part-name", track.getName()); Node scoreInstrument = this.addAttribute(this.addNode(scoreParts, "score-instrument"), "id", "P" + track.getNumber() + "-I1"); this.addNode(scoreInstrument, "instrument-name",MidiInstrument.INSTRUMENT_LIST[track.getChannel().getInstrument()].getName()); Node midiInstrument = this.addAttribute(this.addNode(scoreParts, "midi-instrument"), "id", "P" + track.getNumber() + "-I1"); this.addNode(midiInstrument, "midi-channel",Integer.toString(track.getChannel().getChannel() + 1)); this.addNode(midiInstrument, "midi-program",Integer.toString(track.getChannel().getInstrument() + 1)); } } private void writeParts(Node parent){ Iterator tracks = this.manager.getSong().getTracks(); while(tracks.hasNext()){ TGTrack track = (TGTrack)tracks.next(); Node part = this.addAttribute(this.addNode(parent,"part"), "id", "P" + track.getNumber()); TGMeasure previous = null; Iterator measures = track.getMeasures(); while(measures.hasNext()){ // TODO: Add multivoice support. TGMeasure srcMeasure = (TGMeasure)measures.next(); TGMeasure measure = new TGVoiceJoiner(this.manager.getFactory(),srcMeasure).process(); Node measureNode = this.addAttribute(this.addNode(part,"measure"), "number",Integer.toString(measure.getNumber())); this.writeMeasureAttributes(measureNode, measure, previous); this.writeDirection(measureNode, measure, previous); this.writeBeats(measureNode, measure); previous = measure; } } } private void writeMeasureAttributes(Node parent,TGMeasure measure, TGMeasure previous){ boolean divisionChanges = (previous == null); boolean keyChanges = (previous == null || measure.getKeySignature() != previous.getKeySignature()); boolean clefChanges = (previous == null || measure.getClef() != previous.getClef()); boolean timeSignatureChanges = (previous == null || !measure.getTimeSignature().isEqual(previous.getTimeSignature())); boolean tuningChanges = (measure.getNumber() == 1); if(divisionChanges || keyChanges || clefChanges || timeSignatureChanges){ Node measureAttributes = this.addNode(parent,"attributes"); if(divisionChanges){ this.addNode(measureAttributes,"divisions",Integer.toString(DURATION_DIVISIONS)); } if(keyChanges){ this.writeKeySignature(measureAttributes, measure.getKeySignature()); } if(clefChanges){ this.writeClef(measureAttributes,measure.getClef()); } if(timeSignatureChanges){ this.writeTimeSignature(measureAttributes,measure.getTimeSignature()); } if(tuningChanges){ this.writeTuning(measureAttributes, measure.getTrack()); } } } private void writeTuning(Node parent, TGTrack track){ Node staffDetailsNode = this.addNode(parent,"staff-details"); this.addNode(staffDetailsNode, "staff-lines", Integer.toString( track.stringCount() )); for( int i = track.stringCount() ; i > 0 ; i --){ TGString string = track.getString( i ); Node stringNode = this.addNode(staffDetailsNode, "staff-tuning"); this.addAttribute(stringNode, "line", Integer.toString( (track.stringCount() - string.getNumber()) + 1 ) ); this.addNode(stringNode, "tuning-step", NOTE_NAMES[ NOTE_SHARPS[ (string.getValue() % 12) ] ] ); this.addNode(stringNode, "tuning-octave", Integer.toString(string.getValue() / 12) ); } } private void writeTimeSignature(Node parent, TGTimeSignature ts){ Node node = this.addNode(parent,"time"); this.addNode(node,"beats",Integer.toString(ts.getNumerator())); this.addNode(node,"beat-type",Integer.toString(ts.getDenominator().getValue())); } private void writeKeySignature(Node parent, int ks){ int value = ks; if(value != 0){ value = ( (((ks - 1) % 7) + 1) * ( ks > 7?-1:1)); } Node key = this.addNode(parent,"key"); this.addNode(key,"fifths",Integer.toString( value )); this.addNode(key,"mode","major"); } private void writeClef(Node parent, int clef){ Node node = this.addNode(parent,"clef"); if(clef == TGMeasure.CLEF_TREBLE){ this.addNode(node,"sign","G"); this.addNode(node,"line","2"); } else if(clef == TGMeasure.CLEF_BASS){ this.addNode(node,"sign","F"); this.addNode(node,"line","4"); } else if(clef == TGMeasure.CLEF_TENOR){ this.addNode(node,"sign","G"); this.addNode(node,"line","2"); } else if(clef == TGMeasure.CLEF_ALTO){ this.addNode(node,"sign","G"); this.addNode(node,"line","2"); } } private void writeDirection(Node parent, TGMeasure measure, TGMeasure previous){ boolean tempoChanges = (previous == null || measure.getTempo().getValue() != previous.getTempo().getValue()); if(tempoChanges){ Node direction = this.addAttribute(this.addNode(parent,"direction"),"placement","above"); this.writeMeasureTempo(direction, measure.getTempo()); } } private void writeMeasureTempo(Node parent,TGTempo tempo){ this.addAttribute(this.addNode(parent,"sound"),"tempo",Integer.toString(tempo.getValue())); } private void writeBeats(Node parent, TGMeasure measure){ int ks = measure.getKeySignature(); int beatCount = measure.countBeats(); for(int b = 0; b < beatCount; b ++){ TGBeat beat = measure.getBeat( b ); TGVoice voice = beat.getVoice(0); if(voice.isRestVoice()){ Node noteNode = this.addNode(parent,"note"); this.addNode(noteNode,"rest"); this.addNode(noteNode,"voice","1"); this.writeDuration(noteNode, voice.getDuration()); } else{ int noteCount = voice.countNotes(); for(int n = 0; n < noteCount; n ++){ TGNote note = voice.getNote( n ); Node noteNode = this.addNode(parent,"note"); int value = (beat.getMeasure().getTrack().getString(note.getString()).getValue() + note.getValue()); Node pitchNode = this.addNode(noteNode,"pitch"); this.addNode(pitchNode,"step",NOTE_NAMES[ (ks <= 7 ? NOTE_SHARPS[value % 12] : NOTE_FLATS[value % 12] )]); this.addNode(pitchNode,"octave",Integer.toString(value / 12)); if(NOTE_ALTERATIONS[ value % 12 ]){ this.addNode(pitchNode,"alter", ( ks <= 7 ? "1" : "-1" ) ); } Node technicalNode = this.addNode(this.addNode(noteNode, "notations"), "technical"); this.addNode(technicalNode,"fret", Integer.toString( note.getValue() )); this.addNode(technicalNode,"string", Integer.toString( note.getString() )); this.addNode(noteNode,"voice","1"); this.writeDuration(noteNode, voice.getDuration()); if(note.isTiedNote()){ this.addAttribute(this.addNode(noteNode,"tie"),"type","stop"); } if(n > 0){ this.addNode(noteNode,"chord"); } } } } } private void writeDuration(Node parent, TGDuration duration){ int index = duration.getIndex(); if( index >=0 && index <= 6 ){ int value = (DURATION_VALUES[ index ] * duration.getDivision().getTimes() / duration.getDivision().getEnters()); if(duration.isDotted()){ value += (value / 2); } else if(duration.isDoubleDotted()){ value += ((value / 4) * 3); } this.addNode(parent,"duration",Integer.toString(value)); this.addNode(parent,"type",DURATION_NAMES[ index ]); if(duration.isDotted()){ this.addNode(parent,"dot"); } else if(duration.isDoubleDotted()){ this.addNode(parent,"dot"); this.addNode(parent,"dot"); } if(!duration.getDivision().isEqual(TGDivisionType.NORMAL)){ Node divisionType = this.addNode(parent,"time-modification"); this.addNode(divisionType,"actual-notes",Integer.toString(duration.getDivision().getEnters())); this.addNode(divisionType,"normal-notes",Integer.toString(duration.getDivision().getTimes())); } } } private Node addAttribute(Node node, String name, String value){ Attr attribute = this.document.createAttribute(name); attribute.setNodeValue(value); node.getAttributes().setNamedItem(attribute); return node; } private Node addNode(Node parent, String name){ Node node = this.document.createElement(name); parent.appendChild(node); return node; } private Node addNode(Node parent, String name, String content){ Node node = this.addNode(parent, name); node.setTextContent(content); return node; } private Document newDocument() { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); return document; }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } private void saveDocument() { try { TransformerFactory xformFactory = TransformerFactory.newInstance(); Transformer idTransform = xformFactory.newTransformer(); Source input = new DOMSource(this.document); Result output = new StreamResult(this.stream); idTransform.setOutputProperty(OutputKeys.INDENT, "yes"); idTransform.transform(input, output); }catch(Throwable throwable){ throwable.printStackTrace(); } } private static class TGVoiceJoiner { private TGFactory factory; private TGMeasure measure; public TGVoiceJoiner(TGFactory factory,TGMeasure measure){ this.factory = factory; this.measure = measure.clone(factory, measure.getHeader()); this.measure.setTrack( measure.getTrack() ); } public TGMeasure process(){ this.orderBeats(); this.joinBeats(); return this.measure; } public void joinBeats(){ TGBeat previous = null; boolean finish = true; long measureStart = this.measure.getStart(); long measureEnd = (measureStart + this.measure.getLength()); for(int i = 0;i < this.measure.countBeats();i++){ TGBeat beat = this.measure.getBeat( i ); TGVoice voice = beat.getVoice(0); for(int v = 1; v < beat.countVoices(); v++ ){ TGVoice currentVoice = beat.getVoice(v); if(!currentVoice.isEmpty()){ for(int n = 0 ; n < currentVoice.countNotes() ; n++ ){ TGNote note = currentVoice.getNote( n ); voice.addNote( note ); } } } if( voice.isEmpty() ){ this.measure.removeBeat(beat); finish = false; break; } long beatStart = beat.getStart(); if(previous != null){ long previousStart = previous.getStart(); TGDuration previousBestDuration = null; for(int v = /*1*/0; v < previous.countVoices(); v++ ){ TGVoice previousVoice = previous.getVoice(v); if(!previousVoice.isEmpty()){ long length = previousVoice.getDuration().getTime(); if( (previousStart + length) <= beatStart){ if( previousBestDuration == null || length > previousBestDuration.getTime() ){ previousBestDuration = previousVoice.getDuration(); } } } } if(previousBestDuration != null){ previousBestDuration.copy( previous.getVoice(0).getDuration() ); }else{ if(voice.isRestVoice()){ this.measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (beatStart - previousStart) ); duration.copy( previous.getVoice(0).getDuration() ); } } TGDuration beatBestDuration = null; for(int v = /*1*/0; v < beat.countVoices(); v++ ){ TGVoice currentVoice = beat.getVoice(v); if(!currentVoice.isEmpty()){ long length = currentVoice.getDuration().getTime(); if( (beatStart + length) <= measureEnd ){ if( beatBestDuration == null || length > beatBestDuration.getTime() ){ beatBestDuration = currentVoice.getDuration(); } } } } if(beatBestDuration == null){ if(voice.isRestVoice()){ this.measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (measureEnd - beatStart) ); duration.copy( voice.getDuration() ); } previous = beat; } if(!finish){ joinBeats(); } } public void orderBeats(){ for(int i = 0;i < this.measure.countBeats();i++){ TGBeat minBeat = null; for(int j = i;j < this.measure.countBeats();j++){ TGBeat beat = this.measure.getBeat(j); if(minBeat == null || beat.getStart() < minBeat.getStart()){ minBeat = beat; } } this.measure.moveBeat(i, minBeat); } } } } tuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFSongExporter.java0000644000175000017500000001244511273045350027744 0ustar julianjulianpackage org.herac.tuxguitar.io.pdf; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.printer.PrintDocument; import org.herac.tuxguitar.gui.printer.PrintStyles; import org.herac.tuxguitar.gui.printer.PrintStylesDialog; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.util.TGSynchronizer; public class PDFSongExporter implements TGLocalFileExporter{ private static final int PAGE_WIDTH = 550; private static final int PAGE_HEIGHT = 800; private PrintStyles styles; private OutputStream stream; public String getExportName() { return "PDF"; } public TGFileFormat getFileFormat() { return new TGFileFormat("PDF","*.pdf"); } public PrintStyles getDefaultStyles(TGSong song){ PrintStyles styles = new PrintStyles(); styles.setStyle(ViewLayout.DISPLAY_TABLATURE); styles.setFromMeasure(1); styles.setToMeasure(song.countMeasureHeaders()); styles.setTrackNumber(1); styles.setBlackAndWhite(false); return styles; } public boolean configure(boolean setDefaults) { this.styles = (!setDefaults ? PrintStylesDialog.open(TuxGuitar.instance().getShell()) : null ); return ( this.styles != null || setDefaults ); } public void init(TGFactory factory,OutputStream stream){ this.stream = stream; } public void exportSong(TGSong song) { try{ if( this.stream != null ){ this.export(this.stream,song, (this.styles != null ? this.styles : getDefaultStyles(song)) ); } }catch(Throwable throwable){ return; } } public void export(final OutputStream stream,final TGSong song,final PrintStyles data){ new Thread(new Runnable() { public void run() { try{ TGSongManager manager = new TGSongManager(); manager.setFactory(new TGFactoryImpl()); manager.setSong(song.clone(manager.getFactory())); export(stream,manager,data); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } }).start(); } public void export(final OutputStream stream,final TGSongManager manager, final PrintStyles data){ new SyncThread(new Runnable() { public void run() { try{ Tablature tablature = new Tablature(TuxGuitar.instance().getShell()); tablature.setSongManager(manager); PrinterViewLayout layout = new PrinterViewLayout(tablature,data, 1f); export(stream, layout); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } }).start(); } public void export(final OutputStream stream, final PrinterViewLayout layout){ new Thread(new Runnable() { public void run() { try{ layout.getTablature().updateTablature(); layout.makeDocument(new PrintDocumentImpl(layout,new Rectangle(0,0,PAGE_WIDTH,PAGE_HEIGHT), stream)); //new SyncThread(new Runnable() { // public void run() { // layout.makeDocument(new PrintDocumentImpl(layout,new Rectangle(0,0,PAGE_WIDTH,PAGE_HEIGHT), stream)); // } //}).start(); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } }).start(); } private class PrintDocumentImpl implements PrintDocument{ private PrinterViewLayout layout; private TGPainter painter; private Rectangle bounds; private OutputStream stream; private Image buffer; private List pages; public PrintDocumentImpl(PrinterViewLayout layout, Rectangle bounds, OutputStream stream){ this.layout = layout; this.bounds = bounds; this.stream = stream; this.painter = new TGPainter(); this.pages = new ArrayList(); } public TGPainter getPainter() { return this.painter; } public Rectangle getBounds(){ return this.bounds; } public void pageStart() { this.buffer = new Image(this.layout.getTablature().getDisplay(),this.bounds.width - this.bounds.x, this.bounds.height - this.bounds.y); this.painter.init( this.buffer ); } public void pageFinish() { this.pages.add( this.buffer.getImageData() ); this.painter.dispose(); this.buffer.dispose(); } public void start() { // Not implemented } public void finish() { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { dispose(); } }); } catch (Throwable e) { e.printStackTrace(); } this.write(); } public boolean isPaintable(int page) { return true; } protected void write(){ try{ PDFWriter.write(this.stream,this.pages); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } protected void dispose(){ this.layout.getTablature().dispose(); } } } tuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFWriter.java0000644000175000017500000000360711273045350026561 0ustar julianjulianpackage org.herac.tuxguitar.io.pdf; import java.io.OutputStream; import java.util.Iterator; import java.util.List; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.PaletteData; import org.eclipse.swt.graphics.RGB; import org.herac.tuxguitar.io.base.TGFileFormatException; import com.lowagie.text.BadElementException; import com.lowagie.text.Document; import com.lowagie.text.Image; import com.lowagie.text.pdf.PdfWriter; public class PDFWriter { /** * Escribe el documento PDF en el OutputStream * @param out * @param printDocument * @throws TGFileFormatException */ public static void write(OutputStream out,List pages) throws TGFileFormatException { try { Document document = new Document(); PdfWriter.getInstance(document,out); document.open(); Iterator it = pages.iterator(); while(it.hasNext()){ ImageData data = (ImageData)it.next(); document.newPage(); document.add(convertToIText(data)); } document.close(); out.flush(); out.close(); } catch (Throwable throwable) { throw new TGFileFormatException("Could not write song!.",throwable); } } /** * Crea un com.lowagie.text.Image a partir de un org.eclipse.swt.graphics.ImageData * @param data * @return */ public static Image convertToIText(ImageData data){ try { PaletteData palette = data.palette; int width = data.width; int height = data.height; byte bytes[] = new byte[(width * height * 3)]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { RGB rgb = palette.getRGB(data.getPixel(x, y)); bytes[y * (width * 3) + (x * 3)] = (byte)rgb.red; bytes[y * (width * 3) + (x * 3) + 1] = (byte)rgb.green; bytes[y * (width * 3) + (x * 3) + 2] = (byte)rgb.blue; } } return Image.getInstance(width,height,3,8,bytes); } catch (BadElementException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFPluginExporter.java0000644000175000017500000000137211273045350030271 0ustar julianjulianpackage org.herac.tuxguitar.io.pdf; import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin; import org.herac.tuxguitar.io.base.TGRawExporter; public class PDFPluginExporter extends TGExporterPlugin{ protected TGRawExporter getExporter() { return new PDFSongExporter(); } public String getVersion() { return "1.0"; } public String getAuthor() { return "Julian Casadesus "; } public String getName() { return "PDF file format exporter"; } public String getDescription() { String description = new String(); description += ("TuxGuitar-pdf is an \"iText\" based *.pdf exporter plugin."); description += ("\niText Homepage: http://www.lowagie.com/iText/index.html"); return description; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTSongSynchronizerUtil.java0000644000175000017500000003253311273045350031431 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.io.ptb.base.PTBar; import org.herac.tuxguitar.io.ptb.base.PTComponent; import org.herac.tuxguitar.io.ptb.base.PTDirection; import org.herac.tuxguitar.io.ptb.base.PTPosition; import org.herac.tuxguitar.io.ptb.base.PTSection; import org.herac.tuxguitar.io.ptb.base.PTSong; import org.herac.tuxguitar.io.ptb.base.PTSongInfo; import org.herac.tuxguitar.io.ptb.base.PTSymbol; import org.herac.tuxguitar.io.ptb.base.PTTrack; import org.herac.tuxguitar.io.ptb.base.PTTrackInfo; public class PTSongSynchronizerUtil { public static void synchronizeTracks(PTSong src, PTSong dst){ applyInfo( src.getInfo() , dst.getInfo() ); synchronizeTrack( src.getTrack1(), dst.getTrack1() ); synchronizeTrack( src.getTrack2(), dst.getTrack2() ); } private static void synchronizeTrack(PTTrack src, PTTrack dst){ applyRepeats(src, dst); applyInfos(src, dst); } private static void applyInfo(PTSongInfo src, PTSongInfo dst){ src.copy( dst ); } private static void applyInfos(PTTrack src, PTTrack dst){ Iterator it = src.getInfos().iterator(); while( it.hasNext() ){ PTTrackInfo srcInfo = (PTTrackInfo)it.next(); dst.getInfos().add( srcInfo.getClone() ); } } private static void applyRepeats(PTTrack src, PTTrack dst){ applyRepeats(src, dst, new PTIndex(0,0,0), new PTSongSynchronizerData(), new ArrayList() ); } private static void applyRepeats(PTTrack src, PTTrack dst, PTIndex index, PTSongSynchronizerData rd, List useds){ for( int s = index.s; s < src.getSections().size(); s ++){ PTSection srcSection = (PTSection) src.getSections().get(s); srcSection.sort(); PTSection dstSection = new PTSection( srcSection.getNumber() ); dstSection.setStaffs( srcSection.getStaffs() ); dst.getSections().add( dstSection ); for( int p = (s == index.s ? index.p : 0); p < srcSection.getPositions().size(); p ++){ PTPosition srcPosition = (PTPosition)srcSection.getPositions().get(p); srcPosition.sort(); PTPosition dstPosition = new PTPosition(srcPosition.getPosition() ); dstSection.getPositions().add( dstPosition ); for(int c = (s == index.s && p == index.p ? index.c : 0); c < srcPosition.getComponents().size(); c ++){ PTComponent component = (PTComponent)srcPosition.getComponents().get(c); if(!rd.skip){ dstPosition.addComponent( component.getClone() ); } // ------------------------------ PTBar ------------------------------// if(component instanceof PTBar){ PTBar bar = (PTBar) component; if(bar.getRepeatClose() > 0 && rd.repeatStart != null ){ rd.repeatNumber ++; rd.repeatInProgress = true; rd.repeatAlternative = false; rd.skip = false; if(rd.repeatNumber < bar.getRepeatClose()){ applyRepeats(src, dst, rd.repeatStart , rd, useds); return; } rd.repeatStart = null; rd.repeatNumber = 0; } if( bar.isRepeatStart() ){ rd.repeatStart = new PTIndex(s, p, c ); if(! rd.repeatInProgress ){ rd.repeatNumber = 0; } rd.repeatInProgress = false; } } // ------------------------------ PTSymbol ------------------------------// else if(component instanceof PTSymbol){ PTSymbol symbol = (PTSymbol)component; rd.skip = false; if( !rd.repeatAlternative && ((symbol.getEndNumber() & 1 ) != 0 ) ){ boolean validEnding = ((symbol.getEndNumber() & (1 << (rd.repeatNumber))) != 0 ); if(rd.repeatNumber > 0 && !validEnding ){ rd.skip = true; } rd.repeatAlternative = true; } } // ------------------------------ PTDirection ------------------------------// else if(component instanceof PTDirection){ PTDirection direction = (PTDirection)component; boolean validRepeat = (direction.getRepeat() == 0 || (rd.repeatStart != null && (rd.repeatNumber + 1) == direction.getRepeat())); boolean validDirection = ( direction.getActiveSymbol() == rd.findActiveSymbol ); if ( validDirection && validRepeat ){ rd.findActiveSymbol = 0; if( direction.getDirection() == PTDirection.DIRECTION_FINE ){ // Used to mark when to stop playing (usually the end of the score) if ( canUseDirection(direction, useds) ){ return; } } else if( direction.getDirection() == PTDirection.DIRECTION_DA_CAPO ){ // Go back to the beginning of the score and play from there if ( canUseDirection(direction, useds) ){ applyRepeats(src, dst, new PTIndex( 0, 0, 0 ) , rd , useds ); return; } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO ){ // Go back to the Segno and play from there if ( canUseDirection(direction, useds) ){ PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO, s, p ); if(segno != null ){ applyRepeats(src, dst, segno ,rd, useds); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_SEGNO ){ // Go back to the Segno Segno and play from there if ( canUseDirection(direction, useds) ){ PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO_SEGNO, s, p ); if(segno != null ){ applyRepeats(src, dst, segno , rd, useds ); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_TO_CODA ){ // Go to the Coda sign and play from there. Used in conjunction with D.C./D.S. al Coda signs. if ( canUseDirection(direction, useds) ){ PTIndex coda = findUnusedDirection(src, useds, PTDirection.DIRECTION_CODA, -1, -1 ); if( coda != null ){ applyRepeats(src, dst, coda , rd , useds ); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_TO_DOUBLE_CODA ){ // Go to the Double Coda and play from there. Used in conjunction with D.C./D.S. al Double Coda signs. if ( canUseDirection(direction, useds) ){ PTIndex coda = findUnusedDirection(src, useds, PTDirection.DIRECTION_DOUBLE_CODA, -1, -1 ); if( coda != null ){ applyRepeats(src, dst, coda , rd , useds ); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_DA_CAPO_AL_CODA ){ // Go back to the beginning of the score and play from there until the To Coda sign is reached, // then jump to the Coda sign. if( canUseDirection(direction, useds) ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DC; applyRepeats(src, dst, new PTIndex(0, 0, 0) , rd ,useds); return; } } else if( direction.getDirection() == PTDirection.DIRECTION_DA_CAPO_AL_DOUBLE_CODA ){ // Go back to the beginning of the score and play from there until the To Double Coda sign is reached, // then jump to the Double Coda sign. if( canUseDirection(direction, useds) ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DC; applyRepeats(src, dst, new PTIndex(0, 0, 0) , rd , useds); return; } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_AL_CODA ){ // Go back to the Segno sign and play from there until the To Coda sign is reached, // then jump to the Coda sign. if( canUseDirection(direction, useds) ){ PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO, s, p ); if( segno != null ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DS; applyRepeats(src, dst, segno, rd , useds); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_AL_DOUBLE_CODA ){ // Go back to the Segno sign and play from there until the To Double Coda sign is reached, // then jump to the Double Coda sign. if( canUseDirection(direction, useds) ){ PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO, s, p ); if( segno != null ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DS; applyRepeats(src, dst, segno, rd , useds); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_SEGNO_AL_CODA ){ // Go back to the Segno Segno sign and play from there until the To Coda sign is reached, // then jump to the Coda sign. if( canUseDirection(direction, useds) ){ PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO_SEGNO, s, p ); if( segno != null ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DSS; applyRepeats(src, dst, segno, rd , useds); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_SEGNO_AL_DOUBLE_CODA ){ // Go back to the Segno Segno sign and play from there until the To Double Coda sign is reached, // then jump to the Double Coda sign. if( canUseDirection(direction, useds) ){ PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO_SEGNO, s, p ); if( segno != null ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DSS; applyRepeats(src, dst, segno, rd , useds); return; } } } else if( direction.getDirection() == PTDirection.DIRECTION_DA_CAPO_AL_FINE ){ // Go back to the beginning and play until the Fine sign is reached. if( canUseDirection(direction, useds) ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DC; applyRepeats(src, dst, new PTIndex(0, 0, 0) , rd , useds); return; } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_AL_FINE ){ // Go back to the Segno sign and play until the Fine sign is reached. PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO, s, p ); if( segno != null ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DS; applyRepeats(src, dst, segno, rd , useds); return; } } else if( direction.getDirection() == PTDirection.DIRECTION_DAL_SEGNO_SEGNO_AL_FINE ){ // Go back to the Segno Segno sign and play until the Fine sign is reached. PTIndex segno = findUnusedDirection(src, useds, PTDirection.DIRECTION_SEGNO_SEGNO, s, p ); if( segno != null ){ rd.findActiveSymbol = PTDirection.ACTIVE_SYMBOL_DSS; applyRepeats(src, dst, segno, rd , useds); return; } } } } } } } } private static boolean canUseDirection(PTDirection direction, List useds){ boolean inUse = false; for( int i = 0 ; i < useds.size() && !inUse; i ++ ){ PTDirection used = (PTDirection)useds.get( i ); if( used.equals( direction )){ return false; } } useds.add( direction ); return true; } private static PTIndex findUnusedDirection(PTTrack src, List useds, int value, int sEndIndex, int pEndIndex){ return findUnusedDirection(src, useds, value, sEndIndex, pEndIndex, 0 ); } private static PTIndex findUnusedDirection(PTTrack src, List useds, int value, int sEndIndex, int pEndIndex, int activeSymbol){ for( int s = 0; s < ( sEndIndex >= 0 ? sEndIndex+1 : src.getSections().size() ); s ++){ PTSection section = (PTSection) src.getSections().get( s ); for( int p = 0; p < (s == sEndIndex ? pEndIndex+1 : section.getPositions().size() ); p ++){ PTPosition position = (PTPosition)section.getPositions().get(p); for( int c = 0; c < position.getComponents().size() ; c ++){ PTComponent component = (PTComponent)position.getComponents().get( c ); if(component instanceof PTDirection){ PTDirection direction = (PTDirection)component; if( direction.getDirection() == value && ( activeSymbol == 0 || direction.getActiveSymbol() == activeSymbol)){ if( canUseDirection(direction, useds)){ return new PTIndex(s, p , 0); } } } } } } return null; } private static class PTIndex{ /** Index Of Section **/ protected int s; /** Index Of Position **/ protected int p; /** Index Of Component **/ protected int c; protected PTIndex(int s, int p,int c) { this.s = s; this.p = p; this.c = c; } } private static class PTSongSynchronizerData{ /** Current Repeat Start Index **/ protected PTIndex repeatStart; /** Define If Repeat Is In Progress **/ protected boolean repeatInProgress; /** Current Repetition Number **/ protected int repeatNumber; /** Define if there is an Alternative Ending Running **/ protected boolean repeatAlternative; /** Define If Next Components Should Be Skipped **/ protected boolean skip; /** Active Symbol To Search Directions ( D.C, D.S, D.SS ) **/ protected int findActiveSymbol; protected PTSongSynchronizerData(){ this.repeatStart = null; this.repeatNumber = 0; this.repeatAlternative = false; this.skip = false; } } }tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStreamPlugin.java0000644000175000017500000000112011273045350030665 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb; import org.herac.tuxguitar.gui.system.plugins.base.TGInputStreamPlugin; import org.herac.tuxguitar.io.base.TGInputStreamBase; public class PTInputStreamPlugin extends TGInputStreamPlugin{ protected TGInputStreamBase getInputStream() { return new PTInputStream(); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "PTB File Format plugin"; } public String getName() { return "PTB File Format plugin"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStream.java0000644000175000017500000003447311273045350027527 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.io.ptb.base.PTBar; import org.herac.tuxguitar.io.ptb.base.PTBeat; import org.herac.tuxguitar.io.ptb.base.PTDirection; import org.herac.tuxguitar.io.ptb.base.PTGuitarIn; import org.herac.tuxguitar.io.ptb.base.PTNote; import org.herac.tuxguitar.io.ptb.base.PTSection; import org.herac.tuxguitar.io.ptb.base.PTSong; import org.herac.tuxguitar.io.ptb.base.PTSymbol; import org.herac.tuxguitar.io.ptb.base.PTTempo; import org.herac.tuxguitar.io.ptb.base.PTTrack; import org.herac.tuxguitar.io.ptb.base.PTTrackInfo; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGSong; public class PTInputStream implements TGInputStreamBase{ private static final String PTB_VERSION = "ptab-4"; private InputStream stream; private String version; private PTSong song; private PTSongParser parser; public PTInputStream(){ super(); } public void init(TGFactory factory,InputStream stream){ this.version = null; this.stream = stream; this.parser = new PTSongParser(factory); } public TGFileFormat getFileFormat(){ return new TGFileFormat("PowerTab","*.ptb"); } public boolean isSupportedVersion(String version){ return (version.equals(PTB_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Exception e){ return false; }catch(Error e){ return false; } } private void readVersion(){ if(this.version == null){ this.version = (readString(4) + "-" + readShort()); } } public TGSong readSong() throws IOException{ this.readVersion(); if (!isSupportedVersion(this.version)) { throw new IOException("Unsupported Version"); } this.song = new PTSong(); this.readSongInfo(); this.readDataInstruments(this.song.getTrack1()); this.readDataInstruments(this.song.getTrack2()); this.close(); return this.parser.parseSong(this.song); } private void readSongInfo(){ this.song.getInfo().setClassification(readByte()); if(this.song.getInfo().getClassification() == 0) { skip(1); this.song.getInfo().setName(readString()); this.song.getInfo().setInterpret(readString()); this.song.getInfo().setReleaseType(readByte()); if (this.song.getInfo().getReleaseType() == 0){ this.song.getInfo().setAlbumType(readByte()); this.song.getInfo().setAlbum(readString()); this.song.getInfo().setYear(readShort()); this.song.getInfo().setLiveRecording(readBoolean()); }else if(this.song.getInfo().getReleaseType() == 1){ this.song.getInfo().setAlbum(readString()); this.song.getInfo().setLiveRecording(readBoolean()); }else if(this.song.getInfo().getReleaseType() == 2){ this.song.getInfo().setAlbum(readString()); this.song.getInfo().setDay(readShort()); this.song.getInfo().setMonth(readShort()); this.song.getInfo().setYear(readShort()); } if (readByte() == 0) { this.song.getInfo().setAuthor(readString()); this.song.getInfo().setLyricist(readString()); } this.song.getInfo().setArrenger(readString()); this.song.getInfo().setGuitarTranscriber(readString()); this.song.getInfo().setBassTranscriber(readString()); this.song.getInfo().setCopyright(readString()); this.song.getInfo().setLyrics(readString()); this.song.getInfo().setGuitarInstructions(readString()); this.song.getInfo().setBassInstructions(readString()); }else if(this.song.getInfo().getClassification() == 1){ this.song.getInfo().setName(readString()); this.song.getInfo().setAlbum(readString()); this.song.getInfo().setStyle(readShort()); this.song.getInfo().setLevel(readByte()); this.song.getInfo().setAuthor(readString()); this.song.getInfo().setInstructions(readString()); this.song.getInfo().setCopyright(readString()); } } private void readDataInstruments(PTTrack track){ // Guitar section int itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readTrackInfo(track); if (j < itemCount - 1){ readShort(); } } // ChordDiagram section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readChord(); if (j < itemCount - 1){ readShort(); } } // FloatingText section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readFloattingText(); if (j < itemCount - 1){ readShort(); } } // GuitarIn section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readGuitarIn(track); if (j < itemCount - 1){ readShort(); } } // TempoMarker itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readTempoMarker(track); if (j < itemCount - 1){ readShort(); } } // Dynamic section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readDynamic(); if (j < itemCount - 1){ readShort(); } } // SectionSymbol section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readSectionSymbol(track); if (j < itemCount - 1){ readShort(); } } // Section section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readSection(track.getSection(j)); if (j < itemCount - 1){ readShort(); } } } private void readTrackInfo(PTTrack track){ PTTrackInfo info = new PTTrackInfo(); info.setNumber(readByte()); info.setName(readString()); info.setInstrument((short)readByte()); info.setVolume((short)readByte()); info.setBalance((short)readByte()); info.setReverb((short)readByte()); info.setChorus((short)readByte()); info.setTremolo((short)readByte()); info.setPhaser((short)readByte()); readByte();//capo // Tuning readString();//tunningName //bit 7 = Music notation offset sign, bits 6 to 1 = Music notation offset value, bit 0 = display sharps or flats; readByte(); //offset int[] strings = new int[ (readByte() & 0xff) ]; for (int i = 0; i < strings.length; i++) { strings[i] = readByte(); } info.setStrings(strings); track.getInfos().add(info); } private void readSection(PTSection section){ readInt();//left readInt();//top readInt();//right readInt();//bottom int lastBarData = readByte(); readByte(); readByte(); readByte(); readByte(); // BarLine readBarLine(section); // Direction section int itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readDirection(section); if (j < itemCount - 1){ readShort(); } } // ChordText section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readChordText(); if (j < itemCount - 1){ readShort(); } } // RhythmSlash section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readRhythmSlash(); if (j < itemCount - 1){ readShort(); } } // Staff section.setStaffs(readHeaderItems()); for (int staff = 0; staff < section.getStaffs(); staff++) { readStaff(staff,section); if (staff < section.getStaffs() - 1){ readShort(); } } // MusicBar section itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readBarLine(section); if (j < itemCount - 1){ readShort(); } } PTBar bar = new PTBar(); bar.setRepeatClose(((lastBarData >>> 5) == 4)?(lastBarData - 128):0); section.getPosition(section.getNextPositionNumber()).addComponent(bar); } private void readStaff(int staff,PTSection section){ readByte(); readByte(); readByte(); readByte(); readByte(); for( int voice = 0 ; voice < 2 ; voice ++ ){ int itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readPosition(staff,voice,section); if (j < itemCount - 1){ readShort(); } } } } private void readPosition(int staff,int voice,PTSection section){ PTBeat beat = new PTBeat(staff,voice); int position = readByte(); int beaming = readByte(); beaming = ((beaming - 128 < 0)?beaming:beaming - 128); readByte(); int data1 = readByte(); readByte(); int data3 = readByte(); int durationValue = readByte(); int multiBarRest = 1; int complexCount = readByte(); for (int i = 0; i < complexCount; i++) { int count = readShort(); readByte(); int type = readByte(); if((type & 0x08) != 0){ multiBarRest = count; } } int itemCount = readHeaderItems(); for (int j = 0; j < itemCount; j++) { readNote(beat); if (j < itemCount - 1){ readShort(); } } beat.setMultiBarRest((itemCount == 0)?multiBarRest:1); beat.setVibrato(((data1 & 0x08) != 0) || ((data1 & 0x10) != 0)); beat.setGrace((data3 & 0x01) != 0); // Set the duration beat.setDuration(durationValue); beat.setDotted((data1 & 0x01) != 0); beat.setDoubleDotted((data1 & 0x02) != 0); beat.setArpeggioUp((data1 & 0x20) != 0); beat.setArpeggioDown((data1 & 0x40) != 0); beat.setEnters(((beaming - (beaming % 8)) / 8) + 1); beat.setTimes((beaming % 8) + 1); section.getPosition(position).addComponent(beat); } private void readNote(PTBeat beat){ PTNote note = new PTNote(); int position = readByte(); int simpleData = readShort(); int symbolCount = readByte(); for (int i = 0; i < symbolCount; i++) { readByte(); readByte(); int data3 = readByte(); int data4 = readByte(); note.setBend((data4 == 101)?((data3 / 16) + 1):0); note.setSlide((data4 == 100)); } note.setValue(position & 0x1f); note.setString(((position & 0xe0) >> 5) + 1); note.setTied((simpleData & 0x01) != 0); note.setDead((simpleData & 0x02) != 0); beat.addNote(note); } private void readTimeSignature(PTBar bar){ int data = readInt(); readByte(); //measurePulses bar.setNumerator(((((data >> 24) - ((data >> 24) % 8)) / 8) + 1)); bar.setDenominator((int)Math.pow(2,(data >> 24) % 8)); } private void readKeySignature(){ readByte(); } private void readBarLine(PTSection section){ PTBar bar = new PTBar(); int position = readByte(); int type = readByte(); //repeat start bar.setRepeatStart(((type >>> 5) == 3)); //repeat end bar.setRepeatClose((((type >>> 5) == 4)?(type - 128):0)); readKeySignature(); readTimeSignature(bar); readRehearsalSign(); section.getPosition(position).addComponent(bar); } private void readChord(){ readShort(); //chordKey readByte(); readShort(); //chordModification readByte(); readByte(); int stringCount = readByte(); for (int j = 0; j < stringCount; j++) { readByte(); //fret } } private void readFloattingText(){ // Floating text readString(); // Read mfc rect readInt();//left readInt();//top readInt();//right readInt();//bottom readByte(); readFontSetting(); } private void readFontSetting(){ readString();//fontName readInt();//pointSize readInt();//weight readBoolean();//italic readBoolean();//underline readBoolean();//strikeout readInt();//color } private void readGuitarIn(PTTrack track){ int section = readShort(); int staff = readByte(); int position = readByte(); skip(1); int info = (readByte() & 0xff); track.getSection(section).getPosition(position).addComponent(new PTGuitarIn(staff,info)); } private void readTempoMarker(PTTrack track){ int section = readShort(); int position = readByte(); int tempo = readShort(); int data = readShort(); readString();//description int tripletFeel = TGMeasureHeader.TRIPLET_FEEL_NONE; if((data & 0x01) != 0){ tripletFeel = TGMeasureHeader.TRIPLET_FEEL_EIGHTH; }else if((data & 0x02) != 0){ tripletFeel = TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH; } if(tempo > 0){ track.getSection(section).getPosition(position).addComponent(new PTTempo(tempo,tripletFeel)); } } private void readSectionSymbol(PTTrack track){ int section = readShort(); int position = readByte(); int data = readInt(); PTSymbol symbol = new PTSymbol(); symbol.setEndNumber( (data >> 16) ); track.getSection(section).getPosition(position).addComponent(symbol); } private void readDynamic(){ readShort(); readByte(); readByte(); readShort(); } private void readRehearsalSign(){ readByte(); readString(); } private void readDirection(PTSection section){ int position = readByte(); int symboleCount = readByte(); for (int i = 0; i < symboleCount; i++) { int data = readShort(); section.getPosition(position).addComponent(new PTDirection( ( data >> 8 ) , ((data & 0xc0) >> 6), (data & 0x1f) ) ); } } private void readChordText(){ readByte(); readShort(); readByte(); readShort(); readByte(); } private void readRhythmSlash(){ readByte(); readByte(); readInt(); } private int readHeaderItems(){ int nbItems = readShort(); if (nbItems != 0){ int header = readShort(); if (header == 0xffff) { if (readShort() != 1) { return -1; } readString(readShort()); } } return nbItems; } private String readString(){ try { int length = (this.stream.read() & 0xff); return this.readString(((length < 0xff)?length:readShort())); } catch (IOException e) { e.printStackTrace(); } return null; } private String readString(int length){ try { byte[] bytes = new byte[length]; this.stream.read(bytes); return new String(bytes); } catch (IOException e) { e.printStackTrace(); } return null; } private int readInt(){ try { byte[] b = new byte[4]; this.stream.read(b); return ((b[3] & 0xff) << 24) | ((b[2] & 0xff) << 16) | ((b[1] & 0xff) << 8) | (b[0] & 0xff); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readShort(){ try { byte[] b = {0, 0}; this.stream.read(b); return ((b[1] & 0xff) << 8) | (b[0] & 0xff); } catch (IOException e) { e.printStackTrace(); } return 0; } private boolean readBoolean(){ try { return (this.stream.read() > 0); } catch (IOException e) { e.printStackTrace(); } return false; } private int readByte(){ try { return this.stream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private void skip(int bytes){ try { this.stream.read(new byte[bytes]); } catch (IOException e) { e.printStackTrace(); } } private void close(){ try { this.stream.close(); } catch (IOException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTSongParser.java0000644000175000017500000003645111273045350027335 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb; import java.util.Iterator; import org.herac.tuxguitar.io.ptb.base.PTBar; import org.herac.tuxguitar.io.ptb.base.PTBeat; import org.herac.tuxguitar.io.ptb.base.PTComponent; import org.herac.tuxguitar.io.ptb.base.PTGuitarIn; import org.herac.tuxguitar.io.ptb.base.PTNote; import org.herac.tuxguitar.io.ptb.base.PTPosition; import org.herac.tuxguitar.io.ptb.base.PTSection; import org.herac.tuxguitar.io.ptb.base.PTSong; import org.herac.tuxguitar.io.ptb.base.PTSongInfo; import org.herac.tuxguitar.io.ptb.base.PTTempo; import org.herac.tuxguitar.io.ptb.base.PTTrack; import org.herac.tuxguitar.io.ptb.base.PTTrackInfo; import org.herac.tuxguitar.io.ptb.helper.TrackHelper; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; public class PTSongParser { private TGSongManager manager; private TrackHelper helper; public PTSongParser(TGFactory factory){ this.manager = new TGSongManager(factory); this.helper = new TrackHelper(); } public TGSong parseSong(PTSong src){ PTSong song = new PTSong(); PTSongSynchronizerUtil.synchronizeTracks(src, song); this.manager.setSong(this.manager.getFactory().newSong()); this.parseTrack(song.getTrack1()); this.parseTrack(song.getTrack2()); this.parseProperties(song.getInfo()); this.manager.orderBeats(); return this.manager.getSong(); } private void parseProperties(PTSongInfo info){ if( info.getName() != null ){ this.manager.getSong().setName( info.getName() ); } if( info.getAlbum() != null ){ this.manager.getSong().setAlbum( info.getAlbum() ); } if( info.getAuthor() != null ){ this.manager.getSong().setAuthor( info.getAuthor() ); } if( info.getCopyright() != null ){ this.manager.getSong().setCopyright( info.getCopyright() ); } if( info.getArrenger() != null ){ this.manager.getSong().setWriter( info.getArrenger() ); } if( info.getGuitarTranscriber() != null || info.getBassTranscriber() != null ){ String transcriber = new String(); if(info.getGuitarTranscriber() != null ){ transcriber += info.getGuitarTranscriber(); } if(info.getBassTranscriber() != null ){ if( transcriber.length() > 0 ){ transcriber += (" - "); } transcriber += info.getBassTranscriber(); } this.manager.getSong().setTranscriber( transcriber ); } if( info.getGuitarInstructions() != null || info.getBassInstructions() != null ){ String comments = new String(); if(info.getGuitarInstructions() != null ){ comments += info.getGuitarInstructions(); } if(info.getBassInstructions() != null ){ comments += info.getBassInstructions(); } this.manager.getSong().setComments( comments ); } } private void parseTrack(PTTrack track){ this.helper.reset( track.getDefaultInfo() ); long start = TGDuration.QUARTER_TIME; for( int sIndex = 0; sIndex < track.getSections().size(); sIndex ++){ PTSection section = (PTSection) track.getSections().get(sIndex); section.sort(); //calculo el siguiente start del compas this.helper.getStartHelper().init(section.getNumber(),section.getStaffs()); this.helper.getStartHelper().initVoices(start); //parseo las posiciones for( int pIndex = 0; pIndex < section.getPositions().size(); pIndex ++){ PTPosition position = (PTPosition)section.getPositions().get(pIndex); parsePosition(track,position/*,number*/); } //Calculo el start para la proxima seccion start = this.helper.getStartHelper().getMaxStart(); } } private void parsePosition(PTTrack track,PTPosition position/*,int fromTrack*/){ for(int i = 0; i < position.getComponents().size(); i ++){ PTComponent component = (PTComponent)position.getComponents().get(i); if(component instanceof PTBar){ parseBar((PTBar)component); } else if(component instanceof PTGuitarIn){ parseGuitarIn(track,(PTGuitarIn)component); } else if(component instanceof PTTempo){ parseTempo((PTTempo)component); } else if(component instanceof PTBeat){ parseBeat((PTBeat)component); } } } private void parseBar(PTBar bar){ this.helper.getStartHelper().initVoices( this.helper.getStartHelper().getMaxStart() ); if(bar.getNumerator() > 0 && bar.getDenominator() > 0 ){ this.helper.getStartHelper().setBarStart( this.helper.getStartHelper().getMaxStart() ); this.helper.getStartHelper().setBarLength((long)(bar.getNumerator() *( TGDuration.QUARTER_TIME * ( 4.0f / bar.getDenominator())))); } } private void parseGuitarIn(PTTrack track,PTGuitarIn guitarIn){ PTTrackInfo info = track.getInfo(guitarIn.getTrackInfo()); if(info != null){ // Remove used tracks after guitarIn staff. while( this.helper.getInfoHelper().countStaffTracks() > guitarIn.getStaff() ){ this.helper.getInfoHelper().removeStaffTrack( this.helper.getInfoHelper().countStaffTracks() - 1 ); } // If track was already created, but it's not in use Iterator it = this.manager.getSong().getTracks(); while( it.hasNext() ){ TGTrack tgTrack = (TGTrack )it.next(); if( hasSameInfo( tgTrack , info)){ boolean exists = false; for( int i = 0 ; i < this.helper.getInfoHelper().countStaffTracks() ; i ++ ){ TGTrack existent = this.helper.getInfoHelper().getStaffTrack(i); if(existent != null && existent.getNumber() == tgTrack.getNumber() ){ exists = true; } } if(!exists){ this.helper.getInfoHelper().addStaffTrack( tgTrack ); return; } } } // Create track if not exists. this.createTrack(info); } } private void parseTempo(PTTempo tempo){ TGMeasure measure = getMeasure(1,this.helper.getStartHelper().getMaxStart()); measure.getTempo().setValue( tempo.getTempo() ); measure.getHeader().setTripletFeel(tempo.getTripletFeel()); } private void parseBeat(PTBeat beat){ if(beat.isGrace()){ //TODO: agrear el efecto a las notas del siguiente beat return; } if( beat.getMultiBarRest() > 1){ // Multibar Rests, must allways have measure duration. long start = this.helper.getStartHelper().getBarStart(); long duration = (beat.getMultiBarRest() * this.helper.getStartHelper().getBarLength()); this.helper.getStartHelper().setVoiceStart(beat.getStaff(),beat.getVoice(),(start + duration)); return ; } long start = this.helper.getStartHelper().getVoiceStart(beat.getStaff(),beat.getVoice()); TGMeasure measure = getMeasure( getStaffTrack(beat.getStaff()) , start ); TGBeat tgBeat = getBeat(measure, start); TGVoice tgVoice = tgBeat.getVoice(beat.getVoice()); tgVoice.setEmpty(false); tgVoice.getDuration().setValue(beat.getDuration()); tgVoice.getDuration().setDotted(beat.isDotted()); tgVoice.getDuration().setDoubleDotted(beat.isDoubleDotted()); tgVoice.getDuration().getDivision().setTimes(beat.getTimes()); tgVoice.getDuration().getDivision().setEnters(beat.getEnters()); Iterator it = beat.getNotes().iterator(); while(it.hasNext()){ PTNote ptNote = (PTNote)it.next(); if( ptNote.getString() <= measure.getTrack().stringCount() && ptNote.getValue() >= 0 ){ TGNote note = this.manager.getFactory().newNote(); note.setString(ptNote.getString()); note.setValue(ptNote.getValue()); note.setTiedNote( ptNote.isTied() ); note.getEffect().setVibrato( beat.isVibrato() ); note.getEffect().setDeadNote( ptNote.isDead() ); note.getEffect().setHammer( ptNote.isHammer() ); note.getEffect().setSlide( ptNote.isSlide() ); note.getEffect().setBend( makeBend(ptNote.getBend())); tgVoice.addNote(note); } } if( beat.isArpeggioUp() ){ tgBeat.getStroke().setDirection( TGStroke.STROKE_DOWN ); tgBeat.getStroke().setValue( TGDuration.SIXTEENTH ); }else if( beat.isArpeggioDown() ){ tgBeat.getStroke().setDirection( TGStroke.STROKE_UP ); tgBeat.getStroke().setValue( TGDuration.SIXTEENTH ); } this.helper.getStartHelper().checkBeat( tgVoice.isRestVoice() ); // If it's a rest measure, duration must fill the measure. long duration = tgVoice.getDuration().getTime(); if(tgVoice.isRestVoice() && tgBeat.getStart() == this.helper.getStartHelper().getBarStart() && duration > this.helper.getStartHelper().getBarLength()){ duration = this.helper.getStartHelper().getBarLength(); } this.helper.getStartHelper().setVoiceStart(beat.getStaff(),beat.getVoice(),(tgBeat.getStart() + duration)); } private TGEffectBend makeBend(int value){ if(value >= 1 && value <= 8){ TGEffectBend bend = this.manager.getFactory().newEffectBend(); if(value == 1){ bend.addPoint(0,0); bend.addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4)); } else if(value == 2){ bend.addPoint(0,0); bend.addPoint(3,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(9,0); bend.addPoint(12,0); } else if(value == 3){ bend.addPoint(0,0); bend.addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4)); } else if(value == 4){ bend.addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4)); } else if(value == 5){ bend.addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(8,0); bend.addPoint(12,0); } else if(value == 6){ bend.addPoint(0,8); bend.addPoint(12,8); } else if(value == 7){ bend.addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(8,0); bend.addPoint(12,0); } else if(value == 8){ bend.addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4)); bend.addPoint(8,0); bend.addPoint(12,0); } return bend; } return null; } private TGMeasure getMeasure(int trackNumber,long start){ return getMeasure( getTrack(trackNumber) , start); } private TGMeasure getMeasure(TGTrack track,long start){ TGMeasure measure = null; while( (measure = this.manager.getTrackManager().getMeasureAt(track, start)) == null){ this.manager.addNewMeasureBeforeEnd(); } return measure; } private TGTrack getTrack(int number){ TGTrack track = null; while( (track = this.manager.getTrack(number)) == null){ track = createTrack(); } return track; } public TGTrack getStaffTrack(int staff){ TGTrack track = this.helper.getInfoHelper().getStaffTrack( staff ); return ( track != null ? track : createTrack() ); } private TGTrack createTrack(){ return createTrack(this.helper.getInfoHelper().getDefaultInfo()); } private TGTrack createTrack(PTTrackInfo info){ TGTrack track = this.manager.createTrack(); this.helper.getInfoHelper().addStaffTrack( track ); this.setTrackInfo(track, info ); return track; } private void setTrackInfo(TGTrack tgTrack , PTTrackInfo info){ tgTrack.setName( info.getName() ); tgTrack.getChannel().setInstrument((short) info.getInstrument() ); tgTrack.getChannel().setVolume((short) info.getVolume() ); tgTrack.getChannel().setBalance((short) info.getBalance() ); tgTrack.getStrings().clear(); for(int i = 0; i < info.getStrings().length; i ++){ TGString string = this.manager.getFactory().newString(); string.setNumber( (i + 1) ); string.setValue( info.getStrings()[i] ); tgTrack.getStrings().add(string); } } private boolean hasSameInfo(TGTrack track , PTTrackInfo info){ if( !info.getName().equals( track.getName() ) ){ return false; } if( info.getInstrument() != track.getChannel().getInstrument() ){ return false; } if( info.getVolume() != track.getChannel().getVolume() ){ return false; } if( info.getBalance() != track.getChannel().getBalance() ){ return false; } if( info.getStrings().length != track.stringCount() ){ return false; } for(int i = 0; i < info.getStrings().length; i ++){ if( info.getStrings()[i] != track.getString( (i + 1) ).getValue() ){ return false; } } return true; } private TGBeat getBeat(TGMeasure measure, long start){ int count = measure.countBeats(); for(int i = 0 ; i < count ; i ++ ){ TGBeat beat = measure.getBeat( i ); if( beat.getStart() == start ){ return beat; } } TGBeat beat = this.manager.getFactory().newBeat(); beat.setStart(start); measure.addBeat(beat); return beat; } } /* class TGSongAdjuster{ protected TGSongManager manager; public TGSongAdjuster(TGSongManager manager){ this.manager = manager; } public TGSong process(){ Iterator tracks = this.manager.getSong().getTracks(); while(tracks.hasNext()){ TGTrack track = (TGTrack)tracks.next(); Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasure measure = (TGMeasure)measures.next(); this.process(measure); } } return this.manager.getSong(); } public void process(TGMeasure measure){ this.manager.getMeasureManager().orderBeats(measure); joinBeats(measure); } public void joinBeats(TGMeasure measure){ TGBeat previous = null; boolean finish = true; long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); for(int i = 0;i < measure.countBeats();i++){ TGBeat beat = measure.getBeat( i ); long beatStart = beat.getStart(); long beatLength = beat.getDuration().getTime(); if(previous != null){ long previousStart = previous.getStart(); long previousLength = previous.getDuration().getTime(); if(previousStart == beatStart){ // add beat notes to previous for(int n = 0;n < beat.countNotes();n++){ TGNote note = beat.getNote( n ); previous.addNote( note ); } // add beat chord to previous if(!previous.isChordBeat() && beat.isChordBeat()){ previous.setChord( beat.getChord() ); } // add beat text to previous if(!previous.isTextBeat() && beat.isTextBeat()){ previous.setText( beat.getText() ); } // set the best duration if(beatLength > previousLength && (beatStart + beatLength) <= measureEnd){ beat.getDuration().copy(previous.getDuration()); } measure.removeBeat(beat); finish = false; break; } else if(previousStart < beatStart && (previousStart + previousLength) > beatStart){ if(beat.isRestBeat()){ measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.manager.getFactory(), (beatStart - previousStart) ); duration.copy( previous.getDuration() ); } } if( (beatStart + beatLength) > measureEnd ){ if(beat.isRestBeat()){ measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.manager.getFactory(), (measureEnd - beatStart) ); duration.copy( beat.getDuration() ); } previous = beat; } if(!finish){ joinBeats(measure); } } } */tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TEInputStream.java0000644000175000017500000002032511273045352027467 0ustar julianjulianpackage org.herac.tuxguitar.io.tef; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.tef.base.TEChord; import org.herac.tuxguitar.io.tef.base.TEComponentChord; import org.herac.tuxguitar.io.tef.base.TEComponentNote; import org.herac.tuxguitar.io.tef.base.TEInfo; import org.herac.tuxguitar.io.tef.base.TEPercussion; import org.herac.tuxguitar.io.tef.base.TERepeat; import org.herac.tuxguitar.io.tef.base.TERhythm; import org.herac.tuxguitar.io.tef.base.TESong; import org.herac.tuxguitar.io.tef.base.TETempo; import org.herac.tuxguitar.io.tef.base.TEText; import org.herac.tuxguitar.io.tef.base.TETimeSignature; import org.herac.tuxguitar.io.tef.base.TETimeSignatureChange; import org.herac.tuxguitar.io.tef.base.TETrack; public class TEInputStream { private TESong song; private InputStream stream; public TEInputStream(InputStream stream){ this.stream = stream; } public TESong readSong(){ this.song = new TESong(); this.readInfo(); this.song.setMeasures((this.readByte() & 0xff)); this.skip(1); this.readTimeSignature(); this.skip(15); this.readTempo(); this.song.setRepeats( (this.readByte() & 0xff) ); this.skip(5); this.song.setTexts((this.readByte() & 0xff)); this.skip(5); this.song.setPercussions((this.readByte() & 0xff)); this.song.setRhythms((this.readByte() & 0xff)); this.song.setChords((this.readByte() & 0xff)); this.skip(1); boolean notes = ((this.readByte() & 0xff) > 0); this.skip(1); this.song.setStrings((this.readByte() & 0xff)); this.song.setTracks((this.readByte() & 0xff) + 1); this.skip(14); this.readComponents(); this.readRepeats(); this.readTexts(); this.readPercussions(); this.readChords(); this.readRhythms(); this.readNotes(notes); this.readTracks(); this.close(); return this.song; } private void readInfo(){ byte[] info = this.readBytes(200); int offset = 0; String strings[] = new String[3]; for(int i = 0; i < strings.length; i ++){ int length = 0; while( (offset + length) < info.length && info[ (offset + length) ] != 0 ){ length ++; } strings[i] = new String(info,offset,length); offset += length + 1; } this.song.setInfo(new TEInfo(strings[0],strings[1],strings[2])); } private void readNotes(boolean notes){ if(notes){ int length = this.readShort(); this.song.getInfo().setNotes( new String(this.readBytes(length),1,(length -1)) ); } } private void readTempo(){ int value = this.readShort(); this.song.setTempo(new TETempo(value)); } private void readTimeSignature(){ int numerator = this.readByte(); this.skip(1); int denominator = this.readByte(); this.song.setTimeSignature(new TETimeSignature(numerator,denominator)); } private void readRepeats(){ for(int i = 0; i < this.song.getRepeats().length; i ++){ int data1 = this.readByte(); int data2 = this.readByte(); this.song.setRepeat(i,new TERepeat(data1,data2)); } } private void readTexts(){ for(int i = 0; i < this.song.getTexts().length; i ++){ int length = this.readByte(); byte[] text = this.readBytes(length); this.song.setText(i,new TEText(new String(text,1,(length -1)))); this.skip(1); } } private void readChords(){ for(int i = 0; i < this.song.getChords().length; i ++){ byte[] strings = this.readBytes(14); byte[] name = this.readBytes(16); this.song.setChord(i,new TEChord(strings,new String(name))); this.skip(2); } } private void readPercussions(){ if(this.song.getPercussions().length > 0){ for(int i = 0; i < this.song.getPercussions().length; i ++){ this.skip(96); String name = new String(this.readBytes(8) ); this.skip(1); int volume = (this.readByte() & 0xff); this.song.setPercussion(i,new TEPercussion(name,volume)); this.skip(2); } this.skip(this.song.getMeasures()); } } private void readRhythms(){ if(this.song.getRhythms().length > 0){ for(int i = 0; i < this.song.getRhythms().length; i ++){ this.skip(96); String name = new String(this.readBytes(8) ); this.skip(1); int volume = (this.readByte() & 0xff); int instrument = (this.readByte() & 0xff); this.song.setRhythm(i,new TERhythm(name,volume,instrument)); this.skip(1); } this.skip(this.song.getMeasures()); } } private void readTracks(){ for(int i = 0; i < this.song.getTracks().length; i ++){ int[] strings = new int[this.readByte()]; this.skip(5); int type = this.readByte(); this.skip(1); int instrument = this.readByte(); this.skip(3); int capo = this.readByte(); this.skip(1); int clefType = this.readByte(); int clefNumber = this.readByte(); this.skip(1); int pan = this.readByte(); int volume = this.readByte(); int flags = this.readByte(); for(int string = 0; string < strings.length; string ++){ strings[string] = (this.readByte() & 0xff); } this.skip(12 - strings.length); String name = new String(this.readBytes(16)); this.song.setTrack(i,new TETrack( (type == 98),instrument,capo, clefType, clefNumber, pan, volume, flags, strings, name)); this.skip(2); } } private void readComponents(){ int tsSize = ( (256 * this.song.getTimeSignature().getNumerator()) / this.song.getTimeSignature().getDenominator() ); int tsMove = 0; int mIndex = 0; int mData = 0; int count = this.readShort(); for(int i = 0; i < count; i ++){ byte[] data = this.readBytes(6); int location = ( (data[0] & 0xff) + (256 * (mData + (data[1] & 0xff)))); if( ( location / ( tsSize * this.song.getStrings() ) ) < mIndex ){ mData += 256; location = ((data[0] & 0xff) + (256 * (mData + (data[1] & 0xff)))); } int position = (location % tsSize); int string = ( (location / tsSize) % this.song.getStrings()) ; int measure = ( location / ( tsSize * this.song.getStrings() ) ); tsMove = (mIndex == measure)?tsMove:0; position -= tsMove; if( ((data[2] & 0xff) & 0x1f) > 0 && ((data[2] & 0xff) & 0x1f) <= 25 ){ int duration = (data[3] & 0xf); int dynamic = (data[3] >> 4); int effect = data[4]; int fret = (((data[2] & 0xff) & 0x1f) - 1); if((((data[2] & 0xff) >> 5) & 0x01) != 0 ) { fret += (data[5] & 0xff); } this.song.getComponents().add( new TEComponentNote(position, measure, string ,fret,duration,dynamic,effect ) ); } else if( ((data[2] & 0xff) & 0x1f) == 27 ){ //TIME SIGNATURE CHANGE tsMove = (4 * (data[3] & 0xff ) ); int denominator = (int)( ( Math.pow( 2 , ( ( data[2] & 0xff ) >> 5 ) ) / 2 ) ); int numerator = ((( (tsSize / 4) - (data[3] & 0xff) ) * denominator) / 64); this.song.addTimeSignatureChange(new TETimeSignatureChange(measure, new TETimeSignature(numerator,denominator))); } else if( ((data[2] & 0xff) & 0x1f) == 28 && (data[2] & 0x20) != 0){ //SCALE DIAGRAM } else if( ((data[2] & 0xff) & 0x1f) == 28){ //CHORD this.song.getComponents().add( new TEComponentChord(position, measure, string , data[3]) ); } else if( ((data[2] & 0xff) & 0x1f) == 29 ){ //SCALE DIAGRAM | SPECIAL CHAR | SYNCOPATION CHANGE } else if( ((data[2] & 0xff) & 0x1f) == 30 ){ //TEMPO CHANGE | VOICE CHANGE | DRUM EVENT | CRESCENDO ACCENT | REPEAT/ENDING } mIndex = measure; } } //-----------------------------------------------------------------------------// //-----------------------------------------------------------------------------// //-----------------------------------------------------------------------------// protected byte[] readBytes(int length){ byte[] bytes = new byte[length]; try { this.stream.read(bytes); } catch (IOException e) { e.printStackTrace(); } return bytes; } protected int readByte(){ try { return this.stream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } protected int readShort(){ try { byte[] b = new byte[2]; this.stream.read(b); return ((b[1] & 0xff) << 8) | (b[0] & 0xff); } catch (IOException e) { e.printStackTrace(); } return 0; } protected void skip(int count){ for(int i = 0; i < count; i++){ readByte(); } } protected void close(){ try { this.stream.close(); } catch (IOException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TEPluginImporter.java0000644000175000017500000000110111273045352030163 0ustar julianjulianpackage org.herac.tuxguitar.io.tef; import org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin; import org.herac.tuxguitar.io.base.TGRawImporter; public class TEPluginImporter extends TGImporterPlugin{ protected TGRawImporter getImporter() { return new TESongImporter(); } public String getAuthor() { return "Julian Casadesus "; } public String getName() { return "TEF file format importer"; } public String getDescription() { return "TEF file format importer"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TESongImporter.java0000644000175000017500000002652511273045352027654 0ustar julianjulianpackage org.herac.tuxguitar.io.tef; import java.io.InputStream; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.tef.base.TEChord; import org.herac.tuxguitar.io.tef.base.TEComponent; import org.herac.tuxguitar.io.tef.base.TEComponentChord; import org.herac.tuxguitar.io.tef.base.TEComponentNote; import org.herac.tuxguitar.io.tef.base.TESong; import org.herac.tuxguitar.io.tef.base.TETimeSignature; import org.herac.tuxguitar.io.tef.base.TETrack; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; public class TESongImporter implements TGLocalFileImporter{ private static final int[][] PERCUSSION_TUNINGS = new int[][]{ new int[]{ 49, 41, 32 }, new int[]{ 49, 51, 42, 50 }, new int[]{ 49, 42, 50, 37, 32 }, new int[]{ 49, 51, 42, 50, 45, 37 }, new int[]{ 49, 51, 42, 50, 45, 37, 41 }, }; protected TGSongManager manager; protected InputStream stream; public TESongImporter(){ super(); } public TGFileFormat getFileFormat() { return new TGFileFormat("Tef","*.tef"); } public String getImportName() { return "Tef"; } public boolean configure(boolean setDefaults){ return true; } public void init(TGFactory factory,InputStream stream) { this.manager = new TGSongManager(factory); this.stream = stream; } public TGSong importSong() throws TGFileFormatException { try { if( this.manager != null && this.stream != null ){ return this.parseSong(new TEInputStream(this.stream).readSong()); } } catch (Exception e) { e.printStackTrace(); } throw new TGFileFormatException(); } private TGSong parseSong(TESong song){ this.sortComponents(song); this.newTGSong(song.getTracks().length,song.getMeasures(),song.getTempo().getValue()); this.addMeasureValues(song); this.addTrackValues(song.getTracks()); this.addComponents(song); return new TGSongAdjuster(this.manager).process(); } private void newTGSong(int tracks,int measures,int tempo){ this.manager.setSong(this.manager.newSong()); this.manager.getFirstMeasureHeader().getTempo().setValue(tempo); while(this.manager.getSong().countTracks() < tracks){ this.manager.createTrack(); } while(this.manager.getSong().countMeasureHeaders() < measures){ this.manager.addNewMeasureBeforeEnd(); } } private void addMeasureValues(TESong song){ TGTimeSignature timeSignature = this.manager.getFactory().newTimeSignature(); for(int i = 0; i < this.manager.getSong().countMeasureHeaders(); i ++){ TGMeasureHeader header = this.manager.getSong().getMeasureHeader(i); TETimeSignature ts = song.getTimeSignature(i); timeSignature.setNumerator( ts.getNumerator() ); timeSignature.getDenominator().setValue( ts.getDenominator() ); this.manager.changeTimeSignature(header, timeSignature,false); } } private void addTrackValues(TETrack[] tracks){ for(int i = 0; i < tracks.length; i ++){ TGTrack track = this.manager.getSong().getTrack(i); track.getChannel().setVolume((short)(( (15 - tracks[i].getVolume()) * 127) / 15)); track.getChannel().setBalance((short)(( tracks[i].getPan() * 127) / 15)); track.getChannel().setInstrument((short)tracks[i].getInstrument()); if(tracks[i].isPercussion()){ TGChannel.setPercussionChannel(track.getChannel()); } track.getStrings().clear(); int strings[] = tracks[i].getStrings(); for(int j = 0; j < strings.length;j ++){ if(j >= 7){ break; } TGString string = this.manager.getFactory().newString(); string.setNumber( (j + 1) ); string.setValue( (tracks[i].isPercussion() ?0:(96 - strings[j])) ); track.getStrings().add(string); } } } private void addComponents(TESong song){ Iterator it = song.getComponents().iterator(); while(it.hasNext()){ TEComponent component = (TEComponent)it.next(); if(component.getMeasure() >= 0 && component.getMeasure() < this.manager.getSong().countMeasureHeaders()){ int offset = 0; TETrack[] tracks = song.getTracks(); for(int i = 0; i < tracks.length; i ++){ int strings = tracks[i].getStrings().length; int string = (component.getString() - offset); if( string >= 0 && string < strings && string < 7){ TGTrack tgTrack = this.manager.getSong().getTrack(i); TGMeasure tgMeasure = tgTrack.getMeasure(component.getMeasure()); if(component instanceof TEComponentNote){ addNote(tracks[i], (TEComponentNote)component,string,strings,tgMeasure); } else if(component instanceof TEComponentChord){ addChord(song.getChords(),(TEComponentChord)component,tgTrack,tgMeasure); } } offset += strings; } } } } private TGBeat getBeat(TGMeasure measure, long start){ TGBeat beat = this.manager.getMeasureManager().getBeat(measure, start); if(beat == null){ beat = this.manager.getFactory().newBeat(); beat.setStart(start); measure.addBeat(beat); } return beat; } private long getStart(TGDuration duration, TGMeasure measure,int position){ float fixedPosition = position; if(duration != null && !duration.getDivision().isEqual(TGDivisionType.NORMAL)){ fixedPosition = (( fixedPosition - (fixedPosition % 64)) + ((((fixedPosition % 64) * 2) * 2) / 3) ); } long start = ((long) (measure.getStart() + ( (fixedPosition * TGDuration.QUARTER_TIME) / 64)) ); return start; } private TGDuration getDuration(int duration){ TGDuration tgDuration = this.manager.getFactory().newDuration(); int value = TGDuration.WHOLE; for(int i = 0; i < ( duration / 3); i ++){ value = (value * 2); } if( (duration % 3) == 1){ value = (value * 2); tgDuration.setDotted(true); } else if( (duration % 3) == 2){ tgDuration.getDivision().setEnters(3); tgDuration.getDivision().setTimes(2); } tgDuration.setValue(value); return tgDuration; } private void addNote(TETrack track,TEComponentNote note,int string,int strings,TGMeasure tgMeasure){ int value = note.getFret(); if(track.isPercussion() ){ int tuning = (Math.min( (strings - 2) ,(PERCUSSION_TUNINGS.length )) - 1); if(string >= 0 && string < PERCUSSION_TUNINGS[tuning].length){ value += PERCUSSION_TUNINGS[tuning][string]; } } TGNote tgNote = this.manager.getFactory().newNote(); tgNote.setString( string + 1 ); tgNote.setValue( value ); TGDuration tgDuration = getDuration( note.getDuration() ); TGBeat tgBeat = getBeat(tgMeasure, getStart(tgDuration, tgMeasure, note.getPosition())); tgDuration.copy(tgBeat.getVoice(0).getDuration()); tgBeat.getVoice(0).addNote(tgNote); } private void addChord(TEChord[] chords,TEComponentChord component,TGTrack tgTrack,TGMeasure tgMeasure){ if(component.getChord() >= 0 && component.getChord() < chords.length){ TEChord chord = chords[component.getChord()]; byte[] strings = chord.getStrings(); TGChord tgChord = this.manager.getFactory().newChord(tgTrack.stringCount()); tgChord.setName(chord.getName()); for(int i = 0; i < tgChord.countStrings(); i ++){ int value = ( ( i < strings.length )?strings[i]:-1 ); tgChord.addFretValue(i,value); } if(tgChord.countNotes() > 0){ TGBeat tgBeat = getBeat(tgMeasure, getStart(null, tgMeasure, component.getPosition())); tgBeat.setChord(tgChord); } } } public void sortComponents(TESong song){ Collections.sort(song.getComponents(),new Comparator() { public int compare(Object o1, Object o2) { if(o1 instanceof TEComponent && o2 instanceof TEComponent){ TEComponent c1 = (TEComponent)o1; TEComponent c2 = (TEComponent)o2; if ( c1.getMeasure() < c2.getMeasure() ){ return -1; } if ( c1.getMeasure() > c2.getMeasure() ){ return 1; } if ( c1.getPosition() < c2.getPosition() ){ return -1; } if ( c1.getPosition() > c2.getPosition() ){ return 1; } if( ( c1 instanceof TEComponentNote ) && !( c2 instanceof TEComponentNote ) ){ return -1; } if( ( c2 instanceof TEComponentNote ) && !( c1 instanceof TEComponentNote ) ){ return 1; } } return 0; } }); } } class TGSongAdjuster{ protected TGSongManager manager; public TGSongAdjuster(TGSongManager manager){ this.manager = manager; } public TGSong process(){ Iterator tracks = this.manager.getSong().getTracks(); while(tracks.hasNext()){ TGTrack track = (TGTrack)tracks.next(); Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasure measure = (TGMeasure)measures.next(); this.process(measure); } } return this.manager.getSong(); } public void process(TGMeasure measure){ this.manager.getMeasureManager().orderBeats(measure); this.adjustBeats(measure); } public void adjustBeats(TGMeasure measure){ TGBeat previous = null; boolean finish = true; long measureStart = measure.getStart(); long measureEnd = (measureStart + measure.getLength()); for(int i = 0;i < measure.countBeats();i++){ TGBeat beat = measure.getBeat( i ); long beatStart = beat.getStart(); long beatLength = beat.getVoice(0).getDuration().getTime(); if(previous != null){ long previousStart = previous.getStart(); long previousLength = previous.getVoice(0).getDuration().getTime(); // check for a chord in a rest beat if( beat.getVoice(0).isRestVoice() && beat.isChordBeat() ){ TGBeat candidate = null; TGBeat next = this.manager.getMeasureManager().getFirstBeat( measure.getBeats() ); while( next != null ){ if( candidate != null && next.getStart() > beat.getStart() ){ break; } if(! next.getVoice(0).isRestVoice() && !next.isChordBeat() ){ candidate = next; } next = this.manager.getMeasureManager().getNextBeat(measure.getBeats(), next); } if(candidate != null){ candidate.setChord( beat.getChord() ); } measure.removeBeat(beat); finish = false; break; } // check the duration if(previousStart < beatStart && (previousStart + previousLength) > beatStart){ if(beat.getVoice(0).isRestVoice()){ measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.manager.getFactory(), (beatStart - previousStart) ); duration.copy( previous.getVoice(0).getDuration() ); } } if( (beatStart + beatLength) > measureEnd ){ if(beat.getVoice(0).isRestVoice()){ measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.manager.getFactory(), (measureEnd - beatStart) ); duration.copy( beat.getVoice(0).getDuration() ); } previous = beat; } if(!finish){ adjustBeats(measure); } } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/base/MidiSequence.java0000644000175000017500000000245711273045347030572 0ustar julianjulianpackage org.herac.tuxguitar.io.midi.base; import java.util.ArrayList; import java.util.List; public class MidiSequence { public static final float PPQ = 0.0f; public static final float SMPTE_24 = 24.0f; public static final float SMPTE_25 = 25.0f; public static final float SMPTE_30DROP = 29.97f; public static final float SMPTE_30 = 30.0f; protected float divisionType; protected int resolution; private List tracks; public MidiSequence(float divisionType, int resolution){ this.divisionType = divisionType; this.resolution = resolution; this.tracks = new ArrayList(); } public void addTrack(MidiTrack track){ this.tracks.add(track); } public MidiTrack getTrack(int index){ return (MidiTrack)this.tracks.get(index); } public int countTracks(){ return this.tracks.size(); } public float getDivisionType() { return this.divisionType; } public int getResolution() { return this.resolution; } public void sort(){ for(int i = 0; i < this.tracks.size(); i ++){ MidiTrack track = (MidiTrack)this.tracks.get(i); track.sort(); } } public void finish(){ for(int i = 0; i < this.tracks.size(); i ++){ MidiTrack track = (MidiTrack)this.tracks.get(i); track.add(new MidiEvent(MidiMessage.metaMessage(47,new byte[]{}),track.ticks())); track.sort(); } } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/base/MidiEvent.java0000644000175000017500000000052111273045347030071 0ustar julianjulianpackage org.herac.tuxguitar.io.midi.base; public class MidiEvent { private long tick; private MidiMessage message; public MidiEvent(MidiMessage message, long tick){ this.message = message; this.tick = tick; } public MidiMessage getMessage() { return this.message; } public long getTick() { return this.tick; } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/base/MidiTrack.java0000644000175000017500000000173611273045347030065 0ustar julianjulianpackage org.herac.tuxguitar.io.midi.base; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class MidiTrack { private long ticks; private List events = new ArrayList(); public void add(MidiEvent event) { this.events.add(event); this.ticks = Math.max(this.ticks,event.getTick()); } public MidiEvent get(int index){ return (MidiEvent)this.events.get(index); } public int size(){ return this.events.size(); } public long ticks(){ return this.ticks; } public void sort(){ final Comparator comparator = new Comparator() { public int compare(Object o1, Object o2) { if(o1 instanceof MidiEvent && o2 instanceof MidiEvent){ MidiEvent e1 = (MidiEvent)o1; MidiEvent e2 = (MidiEvent)o2; if(e1.getTick() == e2.getTick()){ return 0; } return (e1.getTick() > e2.getTick() ? 1 : -1); } return 0; } }; Collections.sort(this.events,comparator); } } tuxguitar-src-1.2/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/base/MidiMessage.java0000644000175000017500000000342111273045347030376 0ustar julianjulianpackage org.herac.tuxguitar.io.midi.base; public class MidiMessage{ public static final int TYPE_SHORT = 1; public static final int TYPE_META = 2; public static final int NOTE_OFF = 0x80; public static final int NOTE_ON = 0x90; public static final int CONTROL_CHANGE = 0xB0; public static final int PROGRAM_CHANGE = 0xC0; public static final int PITCH_BEND = 0xE0; public static final int SYSTEM_RESET = 0xFF; public static final int TEMPO_CHANGE = 0x51; public static final int TIME_SIGNATURE_CHANGE = 0x58; private int message; private int command; private byte[] data; public MidiMessage(int message, int command) { this.message = message; this.command = command; } public void setData(byte[] data) { this.data = data; } public byte[] getData() { return this.data; } public int getType(){ return this.message; } public int getCommand(){ return this.command; } public static MidiMessage shortMessage(int command, int channel, int data1, int data2){ MidiMessage message = new MidiMessage(TYPE_SHORT,command); message.setData(new byte[]{ (byte)( (command & 0xF0) | (channel & 0x0F) ),(byte)data1, (byte)data2 }); return message; } public static MidiMessage shortMessage(int command, int channel, int data){ MidiMessage message = new MidiMessage(TYPE_SHORT,command); message.setData(new byte[]{ (byte)( (command & 0xF0) | (channel & 0x0F) ),(byte)data }); return message; } public static MidiMessage shortMessage(int command){ MidiMessage message = new MidiMessage(TYPE_SHORT,command); message.setData(new byte[]{ (byte)command }); return message; } public static MidiMessage metaMessage(int command, byte[] data){ MidiMessage message = new MidiMessage(TYPE_META,command); message.setData(data); return message; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Encoder.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Encoder.jav0000644000175000017500000000743311273045343033361 0ustar julianjulianpackage org.herac.tuxguitar.community.auth.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Base64Encoder { private static final int BUFFER_SIZE = 1024; private static byte ENCODING[] = { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/', (byte) '=' }; private static int get1(byte buf[], int off) { return (buf[off] & 0xfc) >> 2; } private static int get2(byte buf[], int off) { return ((buf[off] & 0x3) << 4) | ((buf[off + 1] & 0xf0) >>> 4); } private static int get3(byte buf[], int off) { return ((buf[off + 1] & 0x0f) << 2) | ((buf[off + 2] & 0xc0) >>> 6); } private static int get4(byte buf[], int off) { return buf[off + 2] & 0x3f; } public static byte[] encode(byte[] bytes) { try{ ByteArrayInputStream in = new ByteArrayInputStream( bytes ); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte buffer[] = new byte[BUFFER_SIZE]; int got = -1; int off = 0; int count = 0; while ((got = in.read(buffer, off, BUFFER_SIZE - off)) > 0) { if ((got + off) >= 3) { got += off; off = 0; while (off + 3 <= got) { int c1 = get1(buffer, off); int c2 = get2(buffer, off); int c3 = get3(buffer, off); int c4 = get4(buffer, off); switch (count) { case 73: out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write('\n'); out.write(ENCODING[c4]); count = 1; break; case 74: out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write('\n'); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count = 2; break; case 75: out.write(ENCODING[c1]); out.write('\n'); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count = 3; break; case 76: out.write('\n'); out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count = 4; break; default: out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count += 4; break; } off += 3; } for (int i = 0; i < 3; i++){ buffer[i] = (i < got - off) ? buffer[off + i] : ((byte) 0); } off = got - off; } else { off += got; } } switch (off) { case 1: out.write(ENCODING[get1(buffer, 0)]); out.write(ENCODING[get2(buffer, 0)]); out.write('='); out.write('='); break; case 2: out.write(ENCODING[get1(buffer, 0)]); out.write(ENCODING[get2(buffer, 0)]); out.write(ENCODING[get3(buffer, 0)]); out.write('='); } return out.toByteArray(); }catch(Throwable throwable){ throwable.printStackTrace(); } return bytes; } }././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Decoder.javatuxguitar-src-1.2/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Decoder.jav0000644000175000017500000000422411273045343033342 0ustar julianjulianpackage org.herac.tuxguitar.community.auth.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Base64Decoder { private static final int BUFFER_SIZE = 1024; private static int get1(byte buf[], int off) { return ((buf[off] & 0x3f) << 2) | ((buf[off + 1] & 0x30) >>> 4); } private static int get2(byte buf[], int off) { return ((buf[off + 1] & 0x0f) << 4) | ((buf[off + 2] & 0x3c) >>> 2); } private static int get3(byte buf[], int off) { return ((buf[off + 2] & 0x03) << 6) | (buf[off + 3] & 0x3f); } private static int check(int ch) { if ((ch >= 'A') && (ch <= 'Z')) { return ch - 'A'; } else if ((ch >= 'a') && (ch <= 'z')) { return ch - 'a' + 26; } else if ((ch >= '0') && (ch <= '9')) { return ch - '0' + 52; } else { switch (ch) { case '=': return 65; case '+': return 62; case '/': return 63; default: return -1; } } } public static byte[] decode(byte[] bytes){ try{ ByteArrayInputStream in = new ByteArrayInputStream( bytes ); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte buffer[] = new byte[BUFFER_SIZE]; byte chunk[] = new byte[4]; int got = -1; int ready = 0; fill: while ((got = in.read(buffer)) > 0) { int skiped = 0; while (skiped < got) { while (ready < 4) { if (skiped >= got){ continue fill; } int ch = check(buffer[skiped++]); if (ch >= 0) { chunk[ready++] = (byte) ch; } } if (chunk[2] == 65) { out.write(get1(chunk, 0)); return out.toByteArray(); } else if (chunk[3] == 65) { out.write(get1(chunk, 0)); out.write(get2(chunk, 0)); return out.toByteArray(); } else { out.write(get1(chunk, 0)); out.write(get2(chunk, 0)); out.write(get3(chunk, 0)); } ready = 0; } } if (ready == 0){ out.flush(); return out.toByteArray(); } }catch(Throwable throwable){ throwable.printStackTrace(); } return bytes; } }tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGStream.java0000644000175000017500000000474311273045344027437 0ustar julianjulianpackage org.herac.tuxguitar.io.tg.v09; public class TGStream { protected static final String TG_VERSION = ("TuxGuitar File Format - 0.9"); protected static final int TRACK_LYRICS = 0x01; protected static final int CHANNEL_SOLO = 0x01; protected static final int CHANNEL_MUTE = 0x02; protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01; protected static final int MEASURE_HEADER_TEMPO = 0x02; protected static final int MEASURE_HEADER_OPEN_REPEAT = 0x04; protected static final int MEASURE_HEADER_CLOSE_REPEAT = 0x08; protected static final int MEASURE_HEADER_MARKER = 0x10; protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x20; protected static final int MEASURE_CLEF = 0x01; protected static final int MEASURE_KEYSIGNATURE = 0x02; protected static final int COMPONENT_NOTE = 0x01; protected static final int COMPONENT_SILENCE = 0x02; protected static final int COMPONENT_TIEDNOTE = 0x04; protected static final int COMPONENT_EFFECT = 0x08; protected static final int COMPONENT_NEXT_BEAT = 0x10; protected static final int COMPONENT_NEXT_DURATION = 0x20; protected static final int COMPONENT_VELOCITY = 0x40; protected static final int DURATION_DOTTED = 0x01; protected static final int DURATION_DOUBLE_DOTTED = 0x02; protected static final int DURATION_NO_TUPLET = 0x04; protected static final int EFFECT_BEND = 0x01; protected static final int EFFECT_TREMOLO_BAR = 0x02; protected static final int EFFECT_HARMONIC = 0x04; protected static final int EFFECT_GRACE = 0x08; protected static final int EFFECT_TRILL = 0x010; protected static final int EFFECT_TREMOLO_PICKING = 0x020; protected static final int EFFECT_VIBRATO = 0x040; protected static final int EFFECT_DEAD = 0x080; protected static final int EFFECT_SLIDE = 0x0100; protected static final int EFFECT_HAMMER = 0x0200; protected static final int EFFECT_GHOST = 0x0400; protected static final int EFFECT_ACCENTUATED = 0x0800; protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000; protected static final int EFFECT_PALM_MUTE = 0x02000; protected static final int EFFECT_STACCATO = 0x04000; protected static final int EFFECT_TAPPING = 0x08000; protected static final int EFFECT_SLAPPING = 0x010000; protected static final int EFFECT_POPPING = 0x020000; protected static final int EFFECT_FADE_IN = 0x040000; protected static final int GRACE_FLAG_DEAD = 0x01; protected static final int GRACE_FLAG_ON_BEAT = 0x02; } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStream.java0000644000175000017500000003722611273045344030461 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v09; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGInputStream extends TGStream implements TGInputStreamBase{ private DataInputStream dataInputStream; private String version; private TGFactory factory; private int velocity; public TGInputStream() { super(); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.dataInputStream = new DataInputStream(stream); this.version = null; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean isSupportedVersion(String version){ return (version.equals(TG_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Throwable throwable){ return false; } } private void readVersion(){ if(this.version == null){ this.version = readString(); } } public TGSong readSong() throws TGFileFormatException{ try { if(this.isSupportedVersion()){ TGSong song = this.read(); this.dataInputStream.close(); return song; } throw new TGFileFormatException("Unsopported Version"); } catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private TGSong read(){ TGSong song = this.factory.newSong(); //leo el nombre song.setName(readString()); //leo el artista song.setArtist(readString()); //leo el album song.setAlbum(readString()); //leo el autor song.setAuthor(readString()); //leo la cantidad de measure headers int headerCount = readShort(); //leo las pistas long headerStart = TGDuration.QUARTER_TIME; TGMeasureHeader lastHeader = null; for(int i = 0;i < headerCount;i++){ TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader); song.addMeasureHeader(header); headerStart += header.getLength(); lastHeader = header; } //leo la cantidad de pistas int trackCount = readByte(); //leo las pistas for(int i = 0;i < trackCount;i++){ song.addTrack(readTrack(i + 1,song) ); } return song; } private TGTrack readTrack(int number,TGSong song){ //header int header = readHeader(); TGTrack track = this.factory.newTrack(); track.setNumber(number); //leo el nombre track.setName( readString() ); //leo el canal readChannel(track); //leo la cantidad de compases int measureCount = song.countMeasureHeaders(); //leo los compases TGMeasure lastMeasure = null; for(int i = 0;i < measureCount;i++){ TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure); track.addMeasure(measure); lastMeasure = measure; } //leo la cantidad de cuerdas int stringCount = readByte(); //leo las cuerdas for(int i = 0;i < stringCount;i++){ track.getStrings().add(readInstrumentString(i + 1)); } //leo el offset track.setOffset( (TGTrack.MIN_OFFSET + readByte()) ); //leo el color readColor(track.getColor()); //leo el lyrics if(((header & TRACK_LYRICS) != 0)){ readLyrics(track.getLyrics()); } return track; } private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){ int header = readHeader(); TGMeasureHeader measureHeader = this.factory.newHeader(); measureHeader.setNumber(number); measureHeader.setStart(start); //leo el time signature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ readTimeSignature(measureHeader.getTimeSignature()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature()); } //leo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ readTempo(measureHeader.getTempo()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTempo().copy(measureHeader.getTempo()); } //leo el comienzo de la repeticion measureHeader.setRepeatOpen((header & MEASURE_HEADER_OPEN_REPEAT) != 0); //leo el numero de repeticiones if(((header & MEASURE_HEADER_CLOSE_REPEAT) != 0)){ measureHeader.setRepeatClose(readShort()); } //leo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ measureHeader.setMarker(readMarker(number)); } measureHeader.setTripletFeel ((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE); if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ measureHeader.setTripletFeel( readByte() ); } return measureHeader; } private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){ this.velocity = TGVelocities.DEFAULT; int header = readHeader(); TGMeasure measure = this.factory.newMeasure(measureHeader); //leo la cantidad de componentes TGBeat previous = null; int componentCount = readShort(); for(int i = 0;i < componentCount;i++){ previous = readComponent(measure,previous); } //leo la clave measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef()); if(((header & MEASURE_CLEF) != 0)){ measure.setClef( readByte() ); } //leo el key signature measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature()); if(((header & MEASURE_KEYSIGNATURE) != 0)){ measure.setKeySignature(readByte()); } return measure; } private void readChannel(TGTrack track){ int header = readHeader(); //leo el canal track.getChannel().setChannel( (short)readByte() ); //leo el canal de efectos track.getChannel().setEffectChannel( (short)readByte() ); //leo el instrumento track.getChannel().setInstrument( (short)readByte() ); //leo el volumen track.getChannel().setVolume( (short)readByte() ); //leo el balance track.getChannel().setBalance( (short)readByte() ); //leo el chorus track.getChannel().setChorus( (short)readByte() ); //leo el reverb track.getChannel().setReverb( (short)readByte() ); //leo el phaser track.getChannel().setPhaser( (short)readByte() ); //leo el tremolo track.getChannel().setTremolo( (short)readByte() ); //leo el solo track.setSolo( ((header & CHANNEL_SOLO) != 0) ); //leo el mute track.setMute( ((header & CHANNEL_MUTE) != 0) ); } private TGBeat readComponent(TGMeasure measure,TGBeat previous){ TGBeat beat = previous; int header = readHeader(); //leo el start if(beat == null){ beat = this.factory.newBeat(); beat.setStart(measure.getStart()); measure.addBeat(beat); }else if(((header & COMPONENT_NEXT_BEAT) != 0)){ beat = this.factory.newBeat(); beat.setStart(previous.getStart() + previous.getVoice(0).getDuration().getTime()); measure.addBeat(beat); } TGVoice voice = beat.getVoice(0); voice.setEmpty(false); //leo la duracion if(((header & COMPONENT_NEXT_DURATION) != 0)){ readDuration(voice.getDuration()); }else if(previous != null && !previous.equals(beat)){ previous.getVoice(0).getDuration().copy( voice.getDuration() ); } if(((header & COMPONENT_NOTE) != 0)){ TGNote note = this.factory.newNote(); //leo el valor note.setValue(readByte()); //leo la cuerda note.setString(readByte()); //leo la ligadura note.setTiedNote((header & COMPONENT_TIEDNOTE) != 0); //leo el velocity if(((header & COMPONENT_VELOCITY) != 0)){ this.velocity = readByte(); } note.setVelocity(this.velocity); //leo los efectos if(((header & COMPONENT_EFFECT) != 0)){ readNoteEffect(note.getEffect()); } voice.addNote(note); } return beat; } private TGString readInstrumentString(int number){ TGString string = this.factory.newString(); string.setNumber(number); //leo el valor string.setValue( readByte() ); return string; } private void readTempo(TGTempo tempo){ //leo el valor tempo.setValue(readShort()); } private void readTimeSignature(TGTimeSignature timeSignature){ //leo el numerador timeSignature.setNumerator(readByte()); //leo el denominador readDuration(timeSignature.getDenominator()); } private void readDuration(TGDuration duration){ int header = readHeader(); // leo el puntillo duration.setDotted((header & DURATION_DOTTED) != 0); //leo el doble puntillo duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0); //leo el valor duration.setValue(readByte()); //leo el tipo de divisiones if(((header & DURATION_NO_TUPLET) != 0)){ readDivisionType(duration.getDivision()); } } private void readDivisionType(TGDivisionType divisionType){ //leo los enters divisionType.setEnters(readByte()); //leo los tiempos divisionType.setTimes(readByte()); } private void readNoteEffect(TGNoteEffect effect){ int header = readHeader(3); //leo el bend if(((header & EFFECT_BEND) != 0)){ effect.setBend(readBendEffect()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ effect.setTremoloBar(readTremoloBarEffect()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ effect.setHarmonic(readHarmonicEffect()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ effect.setGrace(readGraceEffect()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ effect.setTrill(readTrillEffect()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ effect.setTremoloPicking(readTremoloPickingEffect()); } //vibrato effect.setVibrato(((header & EFFECT_VIBRATO) != 0)); //dead note effect.setDeadNote(((header & EFFECT_DEAD) != 0)); //slide effect.setSlide(((header & EFFECT_SLIDE) != 0)); //hammer-on/pull-off effect.setHammer(((header & EFFECT_HAMMER) != 0)); //ghost note effect.setGhostNote(((header & EFFECT_GHOST) != 0)); //accentuated note effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0)); //heavy accentuated note effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0)); //palm mute effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0)); //staccato effect.setStaccato(((header & EFFECT_STACCATO) != 0)); //tapping effect.setTapping(((header & EFFECT_TAPPING) != 0)); //slapping effect.setSlapping(((header & EFFECT_SLAPPING) != 0)); //popping effect.setPopping(((header & EFFECT_POPPING) != 0)); //fade in effect.setFadeIn(((header & EFFECT_FADE_IN) != 0)); } private TGEffectBend readBendEffect(){ TGEffectBend bend = this.factory.newEffectBend(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = readByte(); //agrego el punto bend.addPoint(position,value); } return bend; } private TGEffectTremoloBar readTremoloBarEffect(){ TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH); //agrego el punto tremoloBar.addPoint(position,value); } return tremoloBar; } private TGEffectHarmonic readHarmonicEffect(){ TGEffectHarmonic harmonic = this.factory.newEffectHarmonic(); //leo el tipo harmonic.setType(readByte()); //leo la data if(harmonic.getType() == TGEffectHarmonic.TYPE_ARTIFICIAL){ harmonic.setData(TGEffectHarmonic.MIN_ARTIFICIAL_OFFSET + readByte()); }else if(harmonic.getType() == TGEffectHarmonic.TYPE_TAPPED){ harmonic.setData(readByte()); } return harmonic; } private TGEffectGrace readGraceEffect(){ TGEffectGrace grace = this.factory.newEffectGrace(); int header = readHeader(); grace.setDead(((header & GRACE_FLAG_DEAD) != 0)); grace.setOnBeat(((header & GRACE_FLAG_ON_BEAT) != 0)); //leo el fret grace.setFret(readByte()); //leo la duracion grace.setDuration(readByte()); //leo el velocity grace.setDynamic(readByte()); //leo la transicion grace.setTransition(readByte()); return grace; } private TGEffectTremoloPicking readTremoloPickingEffect(){ TGEffectTremoloPicking tremoloPicking = this.factory.newEffectTremoloPicking(); //leo la duracion tremoloPicking.getDuration().setValue(readByte()); return tremoloPicking; } private TGEffectTrill readTrillEffect(){ TGEffectTrill trill = this.factory.newEffectTrill(); //leo el fret trill.setFret(readByte()); //leo la duracion trill.getDuration().setValue(readByte()); return trill; } private TGMarker readMarker(int measure){ TGMarker marker = this.factory.newMarker(); marker.setMeasure(measure); //leo el titulo marker.setTitle(readString()); //leo el color readColor(marker.getColor()); return marker; } private void readColor(TGColor color){ //leo el RGB color.setR(readShort()); color.setG(readShort()); color.setB(readShort()); } private void readLyrics(TGLyric lyrics){ //leo el compas de comienzo lyrics.setFrom(readShort()); //leo el texto lyrics.setLyrics(readString()); } private int readByte(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(int bCount){ int header = 0; for(int i = bCount; i > 0; i --){ header += ( readHeader() << ( (8 * i) - 8 ) ); } return header; } private short readShort(){ try { return this.dataInputStream.readShort(); } catch (IOException e) { e.printStackTrace(); } return 0; } private String readString(){ try { int length = this.dataInputStream.read(); char[] chars = new char[length]; for(int i = 0;i < chars.length; i++){ chars[i] = this.dataInputStream.readChar(); } return String.copyValueOf(chars); } catch (IOException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGStream.java0000644000175000017500000001225411273045344027424 0ustar julianjulianpackage org.herac.tuxguitar.io.tg.v11; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.util.TGVersion; public class TGStream { public static final String TG_FORMAT_NAME = ("TuxGuitar File Format"); public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + new TGVersion(1,1,0).getVersion() ); public static final String TG_FORMAT_EXTENSION = (".tg"); protected static final int TRACK_SOLO = 0x01; protected static final int TRACK_MUTE = 0x02; protected static final int TRACK_LYRICS = 0x04; protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01; protected static final int MEASURE_HEADER_TEMPO = 0x02; protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04; protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08; protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10; protected static final int MEASURE_HEADER_MARKER = 0x20; protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40; protected static final int MEASURE_CLEF = 0x01; protected static final int MEASURE_KEYSIGNATURE = 0x02; protected static final int BEAT_HAS_NEXT = 0x01; protected static final int BEAT_HAS_STROKE = 0x02; protected static final int BEAT_HAS_CHORD = 0x04; protected static final int BEAT_HAS_TEXT = 0x08; protected static final int BEAT_HAS_VOICE = 0x10; protected static final int BEAT_HAS_VOICE_CHANGES = 0x20; protected static final int VOICE_HAS_NOTES = 0x01; protected static final int VOICE_NEXT_DURATION = 0x02; protected static final int VOICE_DIRECTION_UP = 0x04; protected static final int VOICE_DIRECTION_DOWN = 0x08; protected static final int NOTE_HAS_NEXT = 0x01; protected static final int NOTE_TIED = 0x02; protected static final int NOTE_EFFECT = 0x04; protected static final int NOTE_VELOCITY = 0x08; protected static final int DURATION_DOTTED = 0x01; protected static final int DURATION_DOUBLE_DOTTED = 0x02; protected static final int DURATION_NO_TUPLET = 0x04; protected static final int EFFECT_BEND = 0x01; protected static final int EFFECT_TREMOLO_BAR = 0x02; protected static final int EFFECT_HARMONIC = 0x04; protected static final int EFFECT_GRACE = 0x08; protected static final int EFFECT_TRILL = 0x010; protected static final int EFFECT_TREMOLO_PICKING = 0x020; protected static final int EFFECT_VIBRATO = 0x040; protected static final int EFFECT_DEAD = 0x080; protected static final int EFFECT_SLIDE = 0x0100; protected static final int EFFECT_HAMMER = 0x0200; protected static final int EFFECT_GHOST = 0x0400; protected static final int EFFECT_ACCENTUATED = 0x0800; protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000; protected static final int EFFECT_PALM_MUTE = 0x02000; protected static final int EFFECT_STACCATO = 0x04000; protected static final int EFFECT_TAPPING = 0x08000; protected static final int EFFECT_SLAPPING = 0x010000; protected static final int EFFECT_POPPING = 0x020000; protected static final int EFFECT_FADE_IN = 0x040000; protected static final int GRACE_FLAG_DEAD = 0x01; protected static final int GRACE_FLAG_ON_BEAT = 0x02; protected class TGBeatData { private long currentStart; private TGVoiceData[] voices; protected TGBeatData(TGMeasure measure){ this.init(measure); } private void init(TGMeasure measure){ this.currentStart = measure.getStart(); this.voices = new TGVoiceData[TGBeat.MAX_VOICES]; for(int i = 0 ; i < this.voices.length ; i ++ ){ this.voices[i] = new TGVoiceData(measure); } } protected TGVoiceData getVoice(int index){ return this.voices[index]; } public long getCurrentStart(){ long minimumStart = -1; for(int i = 0 ; i < this.voices.length ; i ++ ){ if( this.voices[i].getStart() > this.currentStart ){ if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){ minimumStart = this.voices[i].getStart(); } } } if( minimumStart > this.currentStart ){ this.currentStart = minimumStart; } return this.currentStart; } } protected class TGVoiceData { private long start; private int velocity; private int flags; private TGDuration duration; protected TGVoiceData(TGMeasure measure){ this.init(measure); } private void init(TGMeasure measure){ this.flags = 0; this.setStart(measure.getStart()); this.setVelocity(TGVelocities.DEFAULT); this.setDuration(new TGFactory().newDuration()); } public TGDuration getDuration() { return this.duration; } public void setDuration(TGDuration duration) { this.duration = duration; } public long getStart() { return this.start; } public void setStart(long start) { this.start = start; } public int getVelocity() { return this.velocity; } public void setVelocity(int velocity) { this.velocity = velocity; } public int getFlags() { return this.flags; } public void setFlags(int flags) { this.flags = flags; } } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGOutputStream.java0000644000175000017500000004650311273045344030651 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v11; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGOutputStream extends TGStream implements TGLocalFileExporter{ private DataOutputStream dataOutputStream; public boolean isSupportedExtension(String extension) { return (extension.toLowerCase().equals(TG_FORMAT_EXTENSION)); } public String getExportName(){ return "TuxGuitar 1.1"; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean configure(boolean setDefaults){ return true; } public void init(TGFactory factory,OutputStream stream){ this.dataOutputStream = new DataOutputStream(stream); } public void exportSong(TGSong song) throws TGFileFormatException { try{ this.writeVersion(); this.write(song); this.dataOutputStream.flush(); this.dataOutputStream.close(); }catch( Throwable throwable){ throw new TGFileFormatException(throwable); } } private void writeVersion(){ writeUnsignedByteString(TG_FORMAT_VERSION); } private void write(TGSong song){ //escribo el nombre writeUnsignedByteString(song.getName()); //escribo el artista writeUnsignedByteString(song.getArtist()); //escribo el album writeUnsignedByteString(song.getAlbum()); //escribo el autor writeUnsignedByteString(song.getAuthor()); //escribo la cantidad de measure headers writeShort((short)song.countMeasureHeaders()); //escribo las pistas TGMeasureHeader lastHeader = null; Iterator headers = song.getMeasureHeaders(); while(headers.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)headers.next(); writeMeasureHeader(header,lastHeader); lastHeader = header; } //escribo la cantidad de pistas writeByte(song.countTracks()); //escribo las pistas for(int i = 0;i < song.countTracks();i++){ TGTrack track = song.getTrack(i); writeTrack(track); } } private void writeTrack(TGTrack track){ //header int header = 0; if (track.isSolo()) { header |= TRACK_SOLO; } if (track.isMute()) { header |= TRACK_MUTE; } if(!track.getLyrics().isEmpty()){ header |= TRACK_LYRICS; } writeHeader(header); //escribo el nombre writeUnsignedByteString(track.getName()); //escribo el canal writeChannel(track.getChannel()); //escribo los compases TGMeasure lastMeasure = null; Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasure measure = (TGMeasure)measures.next(); writeMeasure(measure,lastMeasure); lastMeasure = measure; } //escribo la cantidad de cuerdas writeByte(track.getStrings().size()); //escribo las cuerdas Iterator stringIt = track.getStrings().iterator(); while(stringIt.hasNext()){ TGString string = (TGString)stringIt.next(); writeInstrumentString(string); } //escribo el offset writeByte(track.getOffset() - TGTrack.MIN_OFFSET); //escribo el color writeRGBColor(track.getColor()); //escribo el lyrics if(((header & TRACK_LYRICS) != 0)){ writeLyrics(track.getLyrics()); } } private void writeMeasureHeader(TGMeasureHeader measureheader,TGMeasureHeader lastMeasureHeader){ int header = 0; if(lastMeasureHeader == null){ header |= MEASURE_HEADER_TIMESIGNATURE; header |= MEASURE_HEADER_TEMPO; if(measureheader.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE){ header |= MEASURE_HEADER_TRIPLET_FEEL; } }else{ //Time Signature int numerator = measureheader.getTimeSignature().getNumerator(); int value = measureheader.getTimeSignature().getDenominator().getValue(); int prevNumerator = lastMeasureHeader.getTimeSignature().getNumerator(); int prevValue = lastMeasureHeader.getTimeSignature().getDenominator().getValue(); if(numerator != prevNumerator || value != prevValue){ header |= MEASURE_HEADER_TIMESIGNATURE; } //Tempo if(measureheader.getTempo().getValue() != lastMeasureHeader.getTempo().getValue()){ header |= MEASURE_HEADER_TEMPO; } //Triplet Feel if(measureheader.getTripletFeel() != lastMeasureHeader.getTripletFeel()){ header |= MEASURE_HEADER_TRIPLET_FEEL; } } header = (measureheader.isRepeatOpen())?header |= MEASURE_HEADER_REPEAT_OPEN:header; header = (measureheader.getRepeatClose() > 0)?header |= MEASURE_HEADER_REPEAT_CLOSE:header; header = (measureheader.getRepeatAlternative() > 0)?header |= MEASURE_HEADER_REPEAT_ALTERNATIVE:header; header = (measureheader.hasMarker())?header |= MEASURE_HEADER_MARKER:header; writeHeader(header); //escribo el timeSignature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ writeTimeSignature(measureheader.getTimeSignature()); } //escribo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ writeTempo(measureheader.getTempo()); } //escribo el numero de repeticiones if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){ writeShort((short)measureheader.getRepeatClose()); } //escribo los finales alternativos if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){ writeByte(measureheader.getRepeatAlternative()); } //escribo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ writeMarker(measureheader.getMarker()); } //escribo el triplet feel if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ writeByte(measureheader.getTripletFeel()); } } private void writeMeasure(TGMeasure measure,TGMeasure lastMeasure){ int header = 0; if(lastMeasure == null){ header |= MEASURE_CLEF; header |= MEASURE_KEYSIGNATURE; }else{ //Clef if(measure.getClef() != lastMeasure.getClef()){ header |= MEASURE_CLEF; } //KeySignature if(measure.getKeySignature() != lastMeasure.getKeySignature()){ header |= MEASURE_KEYSIGNATURE; } } //escribo la cabecera writeHeader(header); //escribo los beats TGBeatData data = new TGBeatData(measure); writeBeats(measure, data); //escribo la clave if(((header & MEASURE_CLEF) != 0)){ writeByte(measure.getClef()); } //escribo el key signature if(((header & MEASURE_KEYSIGNATURE) != 0)){ writeByte(measure.getKeySignature()); } } private void writeChannel(TGChannel channel){ //escribo el canal writeByte(channel.getChannel()); //escribo el canal de efectos writeByte(channel.getEffectChannel()); //escribo el instrumento writeByte(channel.getInstrument()); //escribo el volumen writeByte(channel.getVolume()); //escribo el balance writeByte(channel.getBalance()); //escribo el chorus writeByte(channel.getChorus()); //escribo el reverb writeByte(channel.getReverb()); //escribo el phaser writeByte(channel.getPhaser()); //escribo el tremolo writeByte(channel.getTremolo()); } private void writeBeats(TGMeasure measure,TGBeatData data){ int count = measure.countBeats(); for(int i = 0; i < count; i ++){ TGBeat beat = measure.getBeat(i); writeBeat(beat,data, (i + 1 < count )); } } private void writeBeat(TGBeat beat,TGBeatData data, boolean hasNext){ int header = hasNext ? BEAT_HAS_NEXT : 0; //Berifico si hay cambios en las voces for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){ int shift = (i * 2 ); if(!beat.getVoice(i).isEmpty()){ header |= ( BEAT_HAS_VOICE << shift ); int flags = ( beat.getVoice(i).isRestVoice() ? 0 : VOICE_HAS_NOTES ); if(!beat.getVoice(i).getDuration().isEqual(data.getVoice(i).getDuration())){ flags |= VOICE_NEXT_DURATION; data.getVoice(i).setDuration(beat.getVoice(i).getDuration()); } if(beat.getVoice(i).getDirection() != TGVoice.DIRECTION_NONE ){ if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_UP ){ flags |= VOICE_DIRECTION_UP; } else if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_DOWN ){ flags |= VOICE_DIRECTION_DOWN; } } if( data.getVoice(i).getFlags() != flags ){ header |= ( BEAT_HAS_VOICE_CHANGES << shift ); data.getVoice(i).setFlags( flags ); } } } //Berifico si tiene stroke if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){ header |= BEAT_HAS_STROKE; } //Berifico si tiene acorde if(beat.getChord() != null){ header |= BEAT_HAS_CHORD; } //Berifico si tiene texto if(beat.getText() != null){ header |= BEAT_HAS_TEXT; } // escribo la cabecera writeHeader(header); //escribo las voces writeVoices(header, beat, data); //escribo el stroke if(((header & BEAT_HAS_STROKE) != 0)){ writeStroke(beat.getStroke()); } //escribo el acorde if(((header & BEAT_HAS_CHORD) != 0)){ writeChord(beat.getChord()); } //escribo el texto if(((header & BEAT_HAS_TEXT) != 0)){ writeText(beat.getText()); } } private void writeVoices(int header, TGBeat beat,TGBeatData data){ for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){ int shift = (i * 2 ); if((( header & (BEAT_HAS_VOICE << shift)) != 0)){ if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){ writeHeader( data.getVoice(i).getFlags() ); } //escribo la duracion if((( data.getVoice(i).getFlags() & VOICE_NEXT_DURATION) != 0)){ writeDuration(beat.getVoice(i).getDuration()); } //escribo las notas if((( data.getVoice(i).getFlags() & VOICE_HAS_NOTES) != 0)){ writeNotes(beat.getVoice(i), data); } } } } private void writeNotes(TGVoice voice,TGBeatData data){ for( int i = 0 ; i < voice.countNotes() ; i ++){ TGNote note = voice.getNote(i); int header = ( i + 1 < voice.countNotes() ? NOTE_HAS_NEXT : 0 ); header = (note.isTiedNote())?header |= NOTE_TIED:header; if(note.getVelocity() != data.getVoice(voice.getIndex()).getVelocity()){ data.getVoice(voice.getIndex()).setVelocity(note.getVelocity()); header |= NOTE_VELOCITY; } header = (note.getEffect().hasAnyEffect())?header |= NOTE_EFFECT:header; writeHeader(header); writeNote(header,note); } } private void writeNote(int header,TGNote note){ //escribo el valor writeByte(note.getValue()); //escribo la cuerda writeByte(note.getString()); //escribo el velocity if(((header & NOTE_VELOCITY) != 0)){ writeByte(note.getVelocity()); } //escribo los efectos if(((header & NOTE_EFFECT) != 0)){ writeNoteEffect(note.getEffect()); } } private void writeStroke(TGStroke stroke){ //escribo la direccion writeByte(stroke.getDirection()); //escribo el valor writeByte(stroke.getValue()); } private void writeChord(TGChord chord){ //escribo la cantidad de cuerdas writeByte(chord.countStrings()); //escribo el nombre writeUnsignedByteString(chord.getName()); //escribo el primer fret writeByte(chord.getFirstFret()); //escribo el valor de cada cuerda for(int string = 0; string < chord.countStrings(); string ++){ writeByte(chord.getFretValue(string)); } } private void writeText(TGText text){ //escribo el texto writeUnsignedByteString(text.getValue()); } private void writeInstrumentString(TGString string){ //escribo el valor writeByte(string.getValue()); } private void writeTempo(TGTempo tempo){ //escribo el valor writeShort((short)tempo.getValue()); } private void writeTimeSignature(TGTimeSignature timeSignature){ //escribo el numerador writeByte(timeSignature.getNumerator()); //escribo el denominador writeDuration(timeSignature.getDenominator()); } private void writeDuration(TGDuration duration){ int header = 0; header = (duration.isDotted())?header |= DURATION_DOTTED:header; header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header; header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLET:header; writeHeader(header); //escribo el valor writeByte(duration.getValue()); //escribo el tipo de divisiones if(((header & DURATION_NO_TUPLET) != 0)){ writeDivisionType(duration.getDivision()); } } private void writeDivisionType(TGDivisionType divisionType){ //escribo los enters writeByte(divisionType.getEnters()); //escribo los tiempos writeByte(divisionType.getTimes()); } private void writeNoteEffect(TGNoteEffect effect){ int header = 0; header = (effect.isBend())?header |= EFFECT_BEND:header; header = (effect.isTremoloBar())?header |= EFFECT_TREMOLO_BAR:header; header = (effect.isHarmonic())?header |= EFFECT_HARMONIC:header; header = (effect.isGrace())?header |= EFFECT_GRACE:header; header = (effect.isTrill())?header |= EFFECT_TRILL:header; header = (effect.isTremoloPicking())?header |= EFFECT_TREMOLO_PICKING:header; header = (effect.isVibrato())?header |= EFFECT_VIBRATO:header; header = (effect.isDeadNote())?header |= EFFECT_DEAD:header; header = (effect.isSlide())?header |= EFFECT_SLIDE:header; header = (effect.isHammer())?header |= EFFECT_HAMMER:header; header = (effect.isGhostNote())?header |= EFFECT_GHOST:header; header = (effect.isAccentuatedNote())?header |= EFFECT_ACCENTUATED:header; header = (effect.isHeavyAccentuatedNote())?header |= EFFECT_HEAVY_ACCENTUATED:header; header = (effect.isPalmMute())?header |= EFFECT_PALM_MUTE:header; header = (effect.isStaccato())?header |= EFFECT_STACCATO:header; header = (effect.isTapping())?header |= EFFECT_TAPPING:header; header = (effect.isSlapping())?header |= EFFECT_SLAPPING:header; header = (effect.isPopping())?header |= EFFECT_POPPING:header; header = (effect.isFadeIn())?header |= EFFECT_FADE_IN:header; writeHeader(header,3); //escribo el bend if(((header & EFFECT_BEND) != 0)){ writeBendEffect(effect.getBend()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ writeTremoloBarEffect(effect.getTremoloBar()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ writeHarmonicEffect(effect.getHarmonic()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ writeGraceEffect(effect.getGrace()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ writeTrillEffect(effect.getTrill()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ writeTremoloPickingEffect(effect.getTremoloPicking()); } } private void writeBendEffect(TGEffectBend effect){ //escribo la cantidad de puntos writeByte(effect.getPoints().size()); Iterator it = effect.getPoints().iterator(); while(it.hasNext()){ TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)it.next(); //escribo la posicion writeByte(point.getPosition()); //escribo el valor writeByte(point.getValue()); } } private void writeTremoloBarEffect(TGEffectTremoloBar effect){ //escribo la cantidad de puntos writeByte(effect.getPoints().size()); Iterator it = effect.getPoints().iterator(); while(it.hasNext()){ TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)it.next(); //escribo la posicion writeByte(point.getPosition()); //escribo el valor writeByte( (point.getValue() + TGEffectTremoloBar.MAX_VALUE_LENGTH) ); } } private void writeHarmonicEffect(TGEffectHarmonic effect){ //excribo el tipo writeByte(effect.getType()); //excribo la data if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){ writeByte(effect.getData()); } } private void writeGraceEffect(TGEffectGrace effect){ int header = 0; header = (effect.isDead())?header |= GRACE_FLAG_DEAD:header; header = (effect.isOnBeat())?header |= GRACE_FLAG_ON_BEAT:header; //excribo el header writeHeader(header); //excribo el fret writeByte(effect.getFret()); //excribo la duracion writeByte(effect.getDuration()); //excribo el velocity writeByte(effect.getDynamic()); //excribo la transicion writeByte(effect.getTransition()); } private void writeTremoloPickingEffect(TGEffectTremoloPicking effect){ //excribo la duracion writeByte(effect.getDuration().getValue()); } private void writeTrillEffect(TGEffectTrill effect){ //excribo el fret writeByte(effect.getFret()); //excribo la duracion writeByte(effect.getDuration().getValue()); } private void writeMarker(TGMarker marker){ //escribo el titulo writeUnsignedByteString(marker.getTitle()); //escribo el color writeRGBColor(marker.getColor()); } private void writeRGBColor(TGColor color){ //escribo el RGB writeByte(color.getR()); writeByte(color.getG()); writeByte(color.getB()); } private void writeLyrics(TGLyric lyrics){ //escribo el compas de comienzo writeShort((short)lyrics.getFrom()); //escribo el texto writeIntegerString(lyrics.getLyrics()); } public void writeByte(int v){ try { this.dataOutputStream.write(v); } catch (IOException e) { e.printStackTrace(); } } private void writeUnsignedByteString(String v){ try { String byteString = (v == null ? new String() : ((v.length() > 0xFF)?v.substring(0, 0xFF):v) ); this.dataOutputStream.write(byteString.length()); this.dataOutputStream.writeChars(byteString); } catch (IOException e) { e.printStackTrace(); } } private void writeIntegerString(String v){ try { this.dataOutputStream.writeInt(v.length()); this.dataOutputStream.writeChars(v); } catch (IOException e) { e.printStackTrace(); } } public void writeHeader(int v){ try { this.dataOutputStream.write(v); } catch (IOException e) { e.printStackTrace(); } } public void writeHeader(int v,int bCount){ for(int i = bCount; i > 0; i --){ writeHeader( (v >>> ( (8 * i) - 8 ) ) & 0xFF); } } public void writeShort(short v){ try { this.dataOutputStream.writeShort(v); } catch (IOException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStream.java0000644000175000017500000004357211273045344030453 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v11; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGInputStream extends TGStream implements TGInputStreamBase{ private DataInputStream dataInputStream; private String version; private TGFactory factory; public TGInputStream() { super(); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.dataInputStream = new DataInputStream(stream); this.version = null; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean isSupportedVersion(String version){ return (version.equals(TG_FORMAT_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Throwable throwable){ return false; } } public TGSong readSong() throws TGFileFormatException{ try { if(this.isSupportedVersion()){ TGSong song = this.read(); this.dataInputStream.close(); return song; } throw new TGFileFormatException("Unsopported Version"); } catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private void readVersion(){ if(this.version == null){ this.version = readUnsignedByteString(); } } private TGSong read(){ TGSong song = this.factory.newSong(); //leo el nombre song.setName(readUnsignedByteString()); //leo el artista song.setArtist(readUnsignedByteString()); //leo el album song.setAlbum(readUnsignedByteString()); //leo el autor song.setAuthor(readUnsignedByteString()); //leo la cantidad de measure headers int headerCount = readShort(); //leo las pistas TGMeasureHeader lastHeader = null; long headerStart = TGDuration.QUARTER_TIME; for(int i = 0;i < headerCount;i++){ TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader); song.addMeasureHeader(header); headerStart += header.getLength(); lastHeader = header; } //leo la cantidad de pistas int trackCount = readByte(); //leo las pistas for(int i = 0;i < trackCount;i++){ song.addTrack(readTrack(i + 1,song)); } return song; } private TGTrack readTrack(int number,TGSong song){ //header int header = readHeader(); TGTrack track = this.factory.newTrack(); track.setNumber(number); //leo el nombre track.setName(readUnsignedByteString()); //leo el solo track.setSolo((header & TRACK_SOLO) != 0); //leo el mute track.setMute((header & TRACK_MUTE) != 0); //leo el canal readChannel(track.getChannel()); //leo la cantidad de compases int measureCount = song.countMeasureHeaders(); //leo los compases TGMeasure lastMeasure = null; for(int i = 0;i < measureCount;i++){ TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure); track.addMeasure(measure); lastMeasure = measure; } //leo la cantidad de cuerdas int stringCount = readByte(); //leo las cuerdas for(int i = 0;i < stringCount;i++){ track.getStrings().add(readInstrumentString(i + 1)); } //leo el offset track.setOffset(TGTrack.MIN_OFFSET + readByte()); //leo el color readRGBColor(track.getColor()); //leo el lyrics if(((header & TRACK_LYRICS) != 0)){ readLyrics(track.getLyrics()); } return track; } private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){ int header = readHeader(); TGMeasureHeader measureHeader = this.factory.newHeader(); measureHeader.setNumber(number); measureHeader.setStart(start); //leo el time signature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ readTimeSignature(measureHeader.getTimeSignature()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature()); } //leo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ readTempo(measureHeader.getTempo()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTempo().copy(measureHeader.getTempo()); } //leo el comienzo de la repeticion measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0); //leo el numero de repeticiones if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){ measureHeader.setRepeatClose(readShort()); } //leo los finales alternativos if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){ measureHeader.setRepeatAlternative(readByte()); } //leo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ measureHeader.setMarker(readMarker(number)); } measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE); if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ measureHeader.setTripletFeel(readByte()); } return measureHeader; } private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){ int header = readHeader(); TGMeasure measure = this.factory.newMeasure(measureHeader); TGBeatData data = new TGBeatData(measure); //leo la los beats readBeats(measure, data); //leo la clave measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef()); if(((header & MEASURE_CLEF) != 0)){ measure.setClef(readByte()); } //leo el key signature measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature()); if(((header & MEASURE_KEYSIGNATURE) != 0)){ measure.setKeySignature(readByte()); } return measure; } private void readChannel(TGChannel channel){ //leo el canal channel.setChannel(readByte()); //leo el canal de efectos channel.setEffectChannel(readByte()); //leo el instrumento channel.setInstrument(readByte()); //leo el volumen channel.setVolume(readByte()); //leo el balance channel.setBalance(readByte()); //leo el chorus channel.setChorus(readByte()); //leo el reverb channel.setReverb(readByte()); //leo el phaser channel.setPhaser(readByte()); //leo el tremolo channel.setTremolo(readByte()); } private void readBeats(TGMeasure measure,TGBeatData data){ int header = BEAT_HAS_NEXT; while(((header & BEAT_HAS_NEXT) != 0)){ header = readHeader(); readBeat(header, measure, data); } } private void readBeat(int header, TGMeasure measure,TGBeatData data){ TGBeat beat = this.factory.newBeat(); beat.setStart(data.getCurrentStart()); readVoices(header, beat, data); //leo el stroke if(((header & BEAT_HAS_STROKE) != 0)){ readStroke(beat.getStroke()); } //leo el acorde if(((header & BEAT_HAS_CHORD) != 0)){ readChord(beat); } //leo el texto if(((header & BEAT_HAS_TEXT) != 0)){ readText(beat); } measure.addBeat(beat); } private void readVoices(int header, TGBeat beat, TGBeatData data){ for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){ int shift = (i * 2 ); beat.getVoice(i).setEmpty(true); if(((header & (BEAT_HAS_VOICE << shift)) != 0)){ if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){ data.getVoice(i).setFlags( readHeader() ); } int flags = data.getVoice(i).getFlags(); //leo la duracion if(((flags & VOICE_NEXT_DURATION) != 0)){ readDuration(data.getVoice(i).getDuration()); } //leo las notas if(((flags & VOICE_HAS_NOTES) != 0)){ readNotes(beat.getVoice(i), data); } //leo la direccion if(((flags & VOICE_DIRECTION_UP) != 0)){ beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP ); } else if(((flags & VOICE_DIRECTION_DOWN) != 0)){ beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN ); } data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration()); data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime()); beat.getVoice(i).setEmpty(false); } } } private void readNotes(TGVoice voice,TGBeatData data){ int header = NOTE_HAS_NEXT; while(((header & NOTE_HAS_NEXT) != 0)){ header = readHeader(); readNote(header, voice, data); } } private void readNote(int header,TGVoice voice,TGBeatData data){ TGNote note = this.factory.newNote(); //leo el valor note.setValue(readByte()); //leo la cuerda note.setString(readByte()); //leo la ligadura note.setTiedNote((header & NOTE_TIED) != 0); //leo el velocity if(((header & NOTE_VELOCITY) != 0)){ data.getVoice(voice.getIndex()).setVelocity(readByte()); } note.setVelocity(data.getVoice(voice.getIndex()).getVelocity()); //leo los efectos if(((header & NOTE_EFFECT) != 0)){ readNoteEffect(note.getEffect()); } voice.addNote(note); } private void readChord(TGBeat beat){ TGChord chord = this.factory.newChord(readByte()); //leo el nombre chord.setName( readUnsignedByteString() ); //leo el primer fret chord.setFirstFret(readByte()); //leo las cuerdas for(int string = 0; string < chord.countStrings(); string ++){ chord.addFretValue(string, readByte()); } beat.setChord(chord); } private void readText(TGBeat beat){ TGText text = this.factory.newText(); //leo el texto text.setValue(readUnsignedByteString()); beat.setText(text); } private TGString readInstrumentString(int number){ TGString string = this.factory.newString(); string.setNumber(number); //leo el valor string.setValue(readByte()); return string; } private void readTempo(TGTempo tempo){ //leo el valor tempo.setValue(readShort()); } private void readTimeSignature(TGTimeSignature timeSignature){ //leo el numerador timeSignature.setNumerator(readByte()); //leo el denominador readDuration(timeSignature.getDenominator()); } private void readDuration(TGDuration duration){ int header = readHeader(); // leo el puntillo duration.setDotted((header & DURATION_DOTTED) != 0); //leo el doble puntillo duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0); //leo el valor duration.setValue(readByte()); //leo el tipo de divisiones if(((header & DURATION_NO_TUPLET) != 0)){ readDivisionType(duration.getDivision()); } else{ TGDivisionType.NORMAL.copy(duration.getDivision()); } } private void readDivisionType(TGDivisionType divisionType){ //leo los enters divisionType.setEnters(readByte()); //leo los tiempos divisionType.setTimes(readByte()); } private void readStroke(TGStroke stroke){ //leo la direccion stroke.setDirection( readByte() ); //leo el valor stroke.setValue( readByte() ); } private void readNoteEffect(TGNoteEffect effect){ int header = readHeader(3); //leo el bend if(((header & EFFECT_BEND) != 0)){ effect.setBend(readBendEffect()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ effect.setTremoloBar(readTremoloBarEffect()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ effect.setHarmonic(readHarmonicEffect()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ effect.setGrace(readGraceEffect()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ effect.setTrill(readTrillEffect()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ effect.setTremoloPicking(readTremoloPickingEffect()); } //vibrato effect.setVibrato(((header & EFFECT_VIBRATO) != 0)); //dead note effect.setDeadNote(((header & EFFECT_DEAD) != 0)); //slide effect.setSlide(((header & EFFECT_SLIDE) != 0)); //hammer-on/pull-off effect.setHammer(((header & EFFECT_HAMMER) != 0)); //ghost note effect.setGhostNote(((header & EFFECT_GHOST) != 0)); //accentuated note effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0)); //heavy accentuated note effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0)); //palm mute effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0)); //staccato effect.setStaccato(((header & EFFECT_STACCATO) != 0)); //tapping effect.setTapping(((header & EFFECT_TAPPING) != 0)); //slapping effect.setSlapping(((header & EFFECT_SLAPPING) != 0)); //popping effect.setPopping(((header & EFFECT_POPPING) != 0)); //fade in effect.setFadeIn(((header & EFFECT_FADE_IN) != 0)); } private TGEffectBend readBendEffect(){ TGEffectBend bend = this.factory.newEffectBend(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = readByte(); //agrego el punto bend.addPoint(position,value); } return bend; } private TGEffectTremoloBar readTremoloBarEffect(){ TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH); //agrego el punto tremoloBar.addPoint(position,value); } return tremoloBar; } private TGEffectHarmonic readHarmonicEffect(){ TGEffectHarmonic effect = this.factory.newEffectHarmonic(); //leo el tipo effect.setType(readByte()); //leo la data if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){ effect.setData(readByte()); } return effect; } private TGEffectGrace readGraceEffect(){ int header = readHeader(); TGEffectGrace effect = this.factory.newEffectGrace(); effect.setDead((header & GRACE_FLAG_DEAD) != 0) ; effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ; //leo el fret effect.setFret(readByte()); //leo la duracion effect.setDuration(readByte()); //leo el velocity effect.setDynamic(readByte()); //leo la transicion effect.setTransition(readByte()); return effect; } private TGEffectTremoloPicking readTremoloPickingEffect(){ TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking(); //leo la duracion effect.getDuration().setValue(readByte()); return effect; } private TGEffectTrill readTrillEffect(){ TGEffectTrill effect = this.factory.newEffectTrill(); //leo el fret effect.setFret(readByte()); //leo la duracion effect.getDuration().setValue(readByte()); return effect; } private TGMarker readMarker(int measure){ TGMarker marker = this.factory.newMarker(); marker.setMeasure(measure); //leo el titulo marker.setTitle(readUnsignedByteString()); //leo el color readRGBColor(marker.getColor()); return marker; } private void readRGBColor(TGColor color){ //leo el RGB color.setR((readByte() & 0xff)); color.setG((readByte() & 0xff)); color.setB((readByte() & 0xff)); } private void readLyrics(TGLyric lyrics){ //leo el compas de comienzo lyrics.setFrom(readShort()); //leo el texto lyrics.setLyrics(readIntegerString()); } private byte readByte(){ try { return (byte)this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(int bCount){ int header = 0; for(int i = bCount; i > 0; i --){ header += ( readHeader() << ( (8 * i) - 8 ) ); } return header; } private short readShort(){ try { return this.dataInputStream.readShort(); } catch (IOException e) { e.printStackTrace(); } return 0; } private String readUnsignedByteString(){ try { return readString( (this.dataInputStream.read() & 0xFF )); } catch (IOException e) { e.printStackTrace(); } return null; } private String readIntegerString(){ try { return readString(this.dataInputStream.readInt()); } catch (IOException e) { e.printStackTrace(); } return null; } private String readString(int length){ try { char[] chars = new char[length]; for(int i = 0;i < chars.length; i++){ chars[i] = this.dataInputStream.readChar(); } return String.copyValueOf(chars); } catch (IOException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGStream.java0000644000175000017500000000273311273045344027433 0ustar julianjulianpackage org.herac.tuxguitar.io.tg.v08; public class TGStream { protected static final String TG_VERSION = ("TG_DEVEL-0.8"); protected static final int CHANNEL_SOLO = 0x01; protected static final int CHANNEL_MUTE = 0x02; protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01; protected static final int MEASURE_HEADER_TEMPO = 0x02; protected static final int MEASURE_HEADER_OPEN_REPEAT = 0x04; protected static final int MEASURE_HEADER_CLOSE_REPEAT = 0x08; protected static final int MEASURE_HEADER_MARKER = 0x10; protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x20; protected static final int MEASURE_CLEF = 0x01; protected static final int MEASURE_KEYSIGNATURE = 0x02; protected static final int COMPONENT_NOTE = 0x01; protected static final int COMPONENT_SILENCE = 0x02; protected static final int COMPONENT_TIEDNOTE = 0x04; protected static final int COMPONENT_EFFECT = 0x08; protected static final int COMPONENT_NEXT_BEAT = 0x10; protected static final int COMPONENT_NEXT_DURATION = 0x20; protected static final int DURATION_DOTTED = 0x01; protected static final int DURATION_DOUBLE_DOTTED = 0x02; protected static final int DURATION_TUPLETO = 0x04; protected static final int EFFECT_VIBRATO = 0x01; protected static final int EFFECT_BEND = 0x02; protected static final int EFFECT_DEAD_NOTE = 0x04; protected static final int EFFECT_SLIDE = 0x08; protected static final int EFFECT_HAMMER = 0x10; } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStream.java0000644000175000017500000002707311273045344030457 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v08; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGInputStream extends TGStream implements TGInputStreamBase{ private DataInputStream dataInputStream; private TGFactory factory; private String version; public TGInputStream(){ super(); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.dataInputStream = new DataInputStream(stream); this.version = null; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean isSupportedVersion(String version){ return (version.equals(TG_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Throwable throwable){ return false; } } private void readVersion(){ if(this.version == null){ this.version = readString(); } } public TGSong readSong() throws TGFileFormatException{ try { if(this.isSupportedVersion()){ TGSong song = this.read(); this.dataInputStream.close(); return song; } throw new TGFileFormatException("Unsopported Version"); } catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private TGSong read(){ TGSong song = this.factory.newSong(); //leo el nombre song.setName(readString()); //leo el artista song.setArtist(readString()); //leo el album song.setAlbum(readString()); //leo el autor song.setAuthor(readString()); //leo la cantidad de measure headers int headerCount = readShort(); //leo las pistas long headerStart = TGDuration.QUARTER_TIME; TGMeasureHeader lastHeader = null; for(int i = 0;i < headerCount;i++){ TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader); song.addMeasureHeader(header); headerStart += header.getLength(); lastHeader = header; } //leo la cantidad de pistas int trackCount = readByte(); //leo las pistas for(int i = 0;i < trackCount;i++){ song.addTrack(readTrack(i + 1,song)); } return song; } private TGTrack readTrack(int number,TGSong song){ TGTrack track = this.factory.newTrack(); track.setNumber(number); //leo el nombre track.setName(readString()); //leo el canal readChannel(track); //leo la cantidad de compases int measureCount = song.countMeasureHeaders(); //leo los compases TGMeasure lastMeasure = null; for(int i = 0;i < measureCount;i++){ TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure); track.addMeasure(measure); lastMeasure = measure; } //leo la cantidad de cuerdas int stringCount = readByte(); //leo las cuerdas for(int i = 0;i < stringCount;i++){ track.getStrings().add(readInstrumentString(i + 1)); } //leo el offset track.setOffset((TGTrack.MIN_OFFSET + readByte())); //leo el color readColor(track.getColor()); return track; } private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){ int header = readHeader(); TGMeasureHeader measureHeader = this.factory.newHeader(); measureHeader.setNumber(number); measureHeader.setStart(start); //leo el time signature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ readTimeSignature(measureHeader.getTimeSignature()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature()); } //leo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ readTempo(measureHeader.getTempo()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTempo().copy(measureHeader.getTempo()); } //leo el comienzo de la repeticion measureHeader.setRepeatOpen( ((header & MEASURE_HEADER_OPEN_REPEAT) != 0) ); //leo el numero de repeticiones if(((header & MEASURE_HEADER_CLOSE_REPEAT) != 0)){ measureHeader.setRepeatClose(readShort()); } //leo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ measureHeader.setMarker(readMarker(number)); } measureHeader.setTripletFeel( ((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE) ); if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ measureHeader.setTripletFeel( readByte() ); } return measureHeader; } private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){ int header = readHeader(); TGMeasure measure = this.factory.newMeasure(measureHeader); //leo la cantidad de componentes TGBeat previous = null; int componentCount = readShort(); for(int i = 0;i < componentCount;i++){ previous = readComponent(measure,previous); } //leo la clave measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef()); if(((header & MEASURE_CLEF) != 0)){ measure.setClef(readByte()); } //leo el key signature measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature()); if(((header & MEASURE_KEYSIGNATURE) != 0)){ measure.setKeySignature(readByte()); } return measure; } private void readChannel(TGTrack track){ int header = readHeader(); //leo el canal track.getChannel().setChannel((short)readByte()); //leo el canal de efectos track.getChannel().setEffectChannel((short)readByte()); //leo el instrumento track.getChannel().setInstrument((short)readByte()); //leo el volumen track.getChannel().setVolume((short)readByte()); //leo el balance track.getChannel().setBalance((short)readByte()); //leo el chorus track.getChannel().setChorus((short)readByte()); //leo el reverb track.getChannel().setReverb((short)readByte()); //leo el phaser track.getChannel().setPhaser((short)readByte()); //leo el tremolo track.getChannel().setTremolo((short)readByte()); //leo el solo track.setSolo(((header & CHANNEL_SOLO) != 0)); //leo el mute track.setMute(((header & CHANNEL_MUTE) != 0)); } private TGBeat readComponent(TGMeasure measure,TGBeat previous){ TGBeat beat = previous; int header = readHeader(); //leo el start if(beat == null){ beat = this.factory.newBeat(); beat.setStart(measure.getStart()); measure.addBeat(beat); }else if(((header & COMPONENT_NEXT_BEAT) != 0)){ beat = this.factory.newBeat(); beat.setStart(previous.getStart() + previous.getVoice(0).getDuration().getTime()); measure.addBeat(beat); } TGVoice voice = beat.getVoice(0); voice.setEmpty(false); //leo la duracion if(((header & COMPONENT_NEXT_DURATION) != 0)){ readDuration(voice.getDuration()); }else if(previous != null && !previous.equals(beat)){ previous.getVoice(0).getDuration().copy( voice.getDuration() ); } if(((header & COMPONENT_NOTE) != 0)){ TGNote note = this.factory.newNote(); //leo el valor note.setValue(readByte()); //leo el velocity note.setVelocity( readByte() ); //leo la cuerda note.setString(readByte()); //leo la ligadura note.setTiedNote(((header & COMPONENT_TIEDNOTE) != 0)); //leo los efectos if(((header & COMPONENT_EFFECT) != 0)){ readNoteEffect(note.getEffect()); } voice.addNote(note); } return beat; } private TGString readInstrumentString(int number){ TGString string = this.factory.newString(); //leo el numero string.setNumber(number); //leo el valor string.setValue(readByte()); return string; } private void readTempo(TGTempo tempo){ //leo el valor tempo.setValue(readShort()); } private void readTimeSignature(TGTimeSignature timeSignature){ //leo el numerador timeSignature.setNumerator(readByte()); //leo el denominador readDuration(timeSignature.getDenominator()); } private void readDuration(TGDuration duration){ int header = readHeader(); duration.setDotted((header & DURATION_DOTTED) != 0); duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0); //leo el valor duration.setValue(readByte()); //leo el tipo de divisiones if(((header & DURATION_TUPLETO) != 0)){ readDivisionType(duration.getDivision()); } } private void readDivisionType(TGDivisionType divisionType){ //leo los enters divisionType.setEnters(readByte()); //leo los tiempos divisionType.setTimes(readByte()); } private void readNoteEffect(TGNoteEffect effect){ int header = readHeader(); //leo el vibrato effect.setVibrato(((header & EFFECT_VIBRATO) != 0)); //leo la nota muerta effect.setDeadNote(((header & EFFECT_DEAD_NOTE) != 0)); //leo el slide effect.setSlide(((header & EFFECT_SLIDE) != 0)); //leo el hammer effect.setHammer(((header & EFFECT_HAMMER) != 0)); //leo el bend if(((header & EFFECT_BEND) != 0)){ effect.setBend(readBendEffect()); } } private TGEffectBend readBendEffect(){ TGEffectBend bend = this.factory.newEffectBend(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = readByte(); //agrego el punto bend.addPoint(position,((value > 0)?value / 2:value)); } return bend; } private TGMarker readMarker(int measure){ TGMarker marker = this.factory.newMarker(); //leo el compas marker.setMeasure(measure); //leo el titulo marker.setTitle(readString()); //leo el color readColor(marker.getColor()); return marker; } private void readColor(TGColor color){ //escribo el RGB color.setR(readShort()); color.setG(readShort()); color.setB(readShort()); } private int readByte(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private short readShort(){ try { return this.dataInputStream.readShort(); } catch (IOException e) { e.printStackTrace(); } return 0; } private String readString(){ try { int length = this.dataInputStream.read(); char[] chars = new char[length]; for(int i = 0;i < chars.length; i++){ chars[i] = this.dataInputStream.readChar(); } return String.copyValueOf(chars); } catch (IOException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStream.java0000644000175000017500000002331511273045344030451 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v07; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGInputStream implements TGInputStreamBase{ private static final String TG_VERSION = "TG_DEVEL-0.01"; private DataInputStream dataInputStream; private TGFactory factory; private String version; public TGInputStream(){ super(); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.dataInputStream = new DataInputStream(stream); this.version = null; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean isSupportedVersion(String version){ return (version.equals(TG_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Exception e){ return false; }catch(Error e){ return false; } } private void readVersion(){ if(this.version == null){ this.version = readString(); } } public TGSong readSong()throws TGFileFormatException{ try { if(this.isSupportedVersion()){ TGSong song = this.read(); this.dataInputStream.close(); return song; } throw new TGFileFormatException("Unsopported Version"); }catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private TGSong read(){ TGSong song = this.factory.newSong(); //leo el nombre song.setName(readString()); //leo el artista song.setArtist(readString()); //leo el album song.setAlbum(readString()); //leo el autor song.setAuthor(readString()); //leo la cantidad de pistas int trackCount = readInt(); //leo las pistas for(int i = 0;i < trackCount;i++){ song.addTrack(readTrack(song)); } return song; } private TGTrack readTrack(TGSong song){ TGTrack track = this.factory.newTrack(); //leo el numero track.setNumber((int)readLong()); //leo el nombre track.setName(readString()); //leo el canal readChannel(track); //leo la cantidad de compases int measureCount = readInt(); if(song.countMeasureHeaders() == 0){ for(int i = 0;i < measureCount;i++){ TGMeasureHeader header = this.factory.newHeader(); song.addMeasureHeader(header); } } //leo los compases for(int i = 0;i < measureCount;i++){ track.addMeasure(readMeasure(song.getMeasureHeader(i))); } //leo la cantidad de cuerdas int stringCount = readInt(); //leo las cuerdas for(int i = 0;i < stringCount;i++){ track.getStrings().add(readInstrumentString()); } //leo el color readColor(track.getColor()); return track; } private TGMeasure readMeasure(TGMeasureHeader header){ TGMeasure measure = this.factory.newMeasure(header); //leo el number header.setNumber(readInt()); //leo el start header.setStart( (TGDuration.QUARTER_TIME * readLong() / 1000) ); //leo la cantidad de notas int noteCount = readInt(); //leo las notas TGBeat previous = null; for(int i = 0;i < noteCount;i++){ previous = readNote(measure,previous); } //leo la cantidad de silencios int silenceCount = readInt(); //leo los silencios previous = null; for(int i = 0;i < silenceCount;i++){ previous = readSilence(measure,previous); } //leo el time signature readTimeSignature(header.getTimeSignature()); //leo el tempo readTempo(header.getTempo()); //leo la clave measure.setClef(readInt()); //leo el key signature measure.setKeySignature(readInt()); //leo el comienzo de la repeticion header.setRepeatOpen(readBoolean()); //leo el numero de repeticiones header.setRepeatClose(readInt()); return measure; } private TGBeat readNote(TGMeasure measure, TGBeat previous){ TGBeat beat = previous; //leo el valor int value = readInt(); //leo el start long start = (TGDuration.QUARTER_TIME * readLong() / 1000); if(beat == null || beat.getStart() != start){ beat = this.factory.newBeat(); beat.setStart(start); measure.addBeat(beat); } TGVoice voice = beat.getVoice(0); voice.setEmpty( false ); //leo la duracion readDuration(voice.getDuration()); TGNote note = this.factory.newNote(); note.setValue(value); //leo el velocity note.setVelocity(readInt()); //leo la cuerda note.setString(readInt()); //leo la ligadura note.setTiedNote(readBoolean()); //leo los efectos readNoteEffect(note.getEffect()); voice.addNote(note); return beat; } private void readChannel(TGTrack track){ //leo el canal track.getChannel().setChannel(readShort()); //leo el canal de efectos track.getChannel().setEffectChannel(readShort()); //leo el instrumento track.getChannel().setInstrument(readShort()); //leo el volumen track.getChannel().setVolume(readShort()); //leo el balance track.getChannel().setBalance(readShort()); //leo el chorus track.getChannel().setChorus(readShort()); //leo el reverb track.getChannel().setReverb(readShort()); //leo el phaser track.getChannel().setPhaser(readShort()); //leo el tremolo track.getChannel().setTremolo(readShort()); //leo el solo track.setSolo(readBoolean()); //leo el mute track.setMute(readBoolean()); } private TGBeat readSilence(TGMeasure measure, TGBeat previous){ TGBeat beat = previous; //leo el start long start = (TGDuration.QUARTER_TIME * readLong() / 1000); if(beat == null || beat.getStart() != start){ beat = this.factory.newBeat(); beat.setStart(start); measure.addBeat(beat); } TGVoice voice = beat.getVoice(0); voice.setEmpty( false ); //leo la duracion readDuration(voice.getDuration()); return beat; } private TGString readInstrumentString(){ TGString string = this.factory.newString(); //leo el numero string.setNumber( readInt() ); //leo el valor string.setValue(readInt()); return string; } private void readTempo(TGTempo tempo){ //leo el valor tempo.setValue(readInt()); } private void readTimeSignature(TGTimeSignature timeSignature){ //leo el numerador timeSignature.setNumerator(readInt()); //leo el denominador readDuration(timeSignature.getDenominator()); } private void readDuration(TGDuration duration){ //leo el valor duration.setValue( readInt() ); //leo el puntillo duration.setDotted( readBoolean() ); //leo el doble puntillo duration.setDoubleDotted( readBoolean() ); //leo el tipo de divisiones readDivisionType(duration.getDivision()); } private void readDivisionType(TGDivisionType divisionType){ //leo los enters divisionType.setEnters(readInt()); //leo los tiempos divisionType.setTimes(readInt()); } private void readNoteEffect(TGNoteEffect effect){ //leo el vibrato effect.setVibrato(readBoolean()); //leo el bend if(readBoolean()){ effect.setBend(readBendEffect()); } //leo la nota muerta effect.setDeadNote(readBoolean()); //leo el slide effect.setSlide(readBoolean()); //leo el hammer effect.setHammer(readBoolean()); } private TGEffectBend readBendEffect(){ TGEffectBend bend = this.factory.newEffectBend(); //leo la cantidad de puntos int count = readInt(); for(int i = 0;i < count;i++){ //leo la posicion int position = readInt(); //leo el valor int value = readInt(); //agrego el punto bend.addPoint(position,((value > 0)?value / 2:value)); } return bend; } private void readColor(TGColor color){ //escribo el RGB color.setR(readInt()); color.setG(readInt()); color.setB(readInt()); } private short readShort(){ try { return this.dataInputStream.readShort(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readInt(){ try { return this.dataInputStream.readInt(); } catch (IOException e) { e.printStackTrace(); } return 0; } private long readLong(){ try { return this.dataInputStream.readLong(); } catch (IOException e) { e.printStackTrace(); } return 0; } private String readString(){ try { int length = this.dataInputStream.read(); char[] chars = new char[length]; for(int i = 0;i < chars.length; i++){ chars[i] = this.dataInputStream.readChar(); } return String.copyValueOf(chars); } catch (IOException e) { e.printStackTrace(); } return null; } private boolean readBoolean(){ try { return this.dataInputStream.readBoolean(); } catch (IOException e) { e.printStackTrace(); } return false; } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGStream.java0000644000175000017500000000743711273045344027432 0ustar julianjulianpackage org.herac.tuxguitar.io.tg.v10; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.util.TGVersion; public class TGStream { public static final String TG_FORMAT_NAME = ("TuxGuitar File Format"); public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + new TGVersion(1,0,0).getVersion() ); public static final String TG_FORMAT_EXTENSION = (".tg"); protected static final int TRACK_LYRICS = 0x01; protected static final int CHANNEL_SOLO = 0x01; protected static final int CHANNEL_MUTE = 0x02; protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01; protected static final int MEASURE_HEADER_TEMPO = 0x02; protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04; protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08; protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10; protected static final int MEASURE_HEADER_MARKER = 0x20; protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40; protected static final int MEASURE_CLEF = 0x01; protected static final int MEASURE_KEYSIGNATURE = 0x02; protected static final int BEAT_HAS_NEXT = 0x01; protected static final int BEAT_NEXT_DURATION = 0x02; protected static final int BEAT_HAS_NOTES = 0x04; protected static final int BEAT_HAS_CHORD = 0x08; protected static final int BEAT_HAS_TEXT = 0x10; protected static final int NOTE_HAS_NEXT = 0x01; protected static final int NOTE_TIED = 0x02; protected static final int NOTE_EFFECT = 0x04; protected static final int NOTE_VELOCITY = 0x08; protected static final int DURATION_DOTTED = 0x01; protected static final int DURATION_DOUBLE_DOTTED = 0x02; protected static final int DURATION_NO_TUPLE = 0x04; protected static final int EFFECT_BEND = 0x01; protected static final int EFFECT_TREMOLO_BAR = 0x02; protected static final int EFFECT_HARMONIC = 0x04; protected static final int EFFECT_GRACE = 0x08; protected static final int EFFECT_TRILL = 0x010; protected static final int EFFECT_TREMOLO_PICKING = 0x020; protected static final int EFFECT_VIBRATO = 0x040; protected static final int EFFECT_DEAD = 0x080; protected static final int EFFECT_SLIDE = 0x0100; protected static final int EFFECT_HAMMER = 0x0200; protected static final int EFFECT_GHOST = 0x0400; protected static final int EFFECT_ACCENTUATED = 0x0800; protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000; protected static final int EFFECT_PALM_MUTE = 0x02000; protected static final int EFFECT_STACCATO = 0x04000; protected static final int EFFECT_TAPPING = 0x08000; protected static final int EFFECT_SLAPPING = 0x010000; protected static final int EFFECT_POPPING = 0x020000; protected static final int EFFECT_FADE_IN = 0x040000; protected static final int GRACE_FLAG_DEAD = 0x01; protected static final int GRACE_FLAG_ON_BEAT = 0x02; protected class TGBeatData { private long start; private int velocity; private TGDuration duration; protected TGBeatData(TGMeasure measure){ this.init(measure); } private void init(TGMeasure measure){ this.setStart(measure.getStart()); this.setVelocity(TGVelocities.DEFAULT); this.setDuration(new TGFactory().newDuration()); } public TGDuration getDuration() { return this.duration; } public void setDuration(TGDuration duration) { this.duration = duration; } public long getStart() { return this.start; } public void setStart(long start) { this.start = start; } public int getVelocity() { return this.velocity; } public void setVelocity(int velocity) { this.velocity = velocity; } } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGOutputStream.java0000644000175000017500000005224111273045344030644 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v10; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGOutputStream extends TGStream implements TGLocalFileExporter{ private DataOutputStream dataOutputStream; public boolean isSupportedExtension(String extension) { return (extension.toLowerCase().equals(TG_FORMAT_EXTENSION)); } public String getExportName(){ return "TuxGuitar 1.0"; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean configure(boolean setDefaults){ return true; } public void init(TGFactory factory,OutputStream stream){ this.dataOutputStream = new DataOutputStream(stream); } public void exportSong(TGSong song) throws TGFileFormatException { try{ this.writeVersion(); this.write(song); this.dataOutputStream.flush(); this.dataOutputStream.close(); }catch( Throwable throwable){ throw new TGFileFormatException(throwable); } } private void writeVersion(){ writeUnsignedByteString(TG_FORMAT_VERSION); } private void write(TGSong song){ //escribo el nombre writeUnsignedByteString(song.getName()); //escribo el artista writeUnsignedByteString(song.getArtist()); //escribo el album writeUnsignedByteString(song.getAlbum()); //escribo el autor writeUnsignedByteString(song.getAuthor()); //escribo la cantidad de measure headers writeShort((short)song.countMeasureHeaders()); //escribo las pistas TGMeasureHeader lastHeader = null; Iterator headers = song.getMeasureHeaders(); while(headers.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)headers.next(); writeMeasureHeader(header,lastHeader); lastHeader = header; } //escribo la cantidad de pistas writeByte(song.countTracks()); //escribo las pistas for(int i = 0;i < song.countTracks();i++){ TGTrack track = song.getTrack(i); writeTrack(track); } } private void writeTrack(TGTrack track){ //header int header = 0; if(!track.getLyrics().isEmpty()){ header |= TRACK_LYRICS; } writeHeader(header); //escribo el nombre writeUnsignedByteString(track.getName()); //escribo el canal writeChannel(track); //escribo los compases TGMeasure lastMeasure = null; Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasure measure = (TGMeasure)measures.next(); writeMeasure(measure,lastMeasure); lastMeasure = measure; } //escribo la cantidad de cuerdas writeByte(track.getStrings().size()); //escribo las cuerdas Iterator stringIt = track.getStrings().iterator(); while(stringIt.hasNext()){ TGString string = (TGString)stringIt.next(); writeInstrumentString(string); } //escribo el offset writeByte(track.getOffset() - TGTrack.MIN_OFFSET); //escribo el color writeRGBColor(track.getColor()); //escribo el lyrics if(((header & TRACK_LYRICS) != 0)){ writeLyrics(track.getLyrics()); } } private void writeMeasureHeader(TGMeasureHeader measureheader,TGMeasureHeader lastMeasureHeader){ int header = 0; if(lastMeasureHeader == null){ header |= MEASURE_HEADER_TIMESIGNATURE; header |= MEASURE_HEADER_TEMPO; if(measureheader.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE){ header |= MEASURE_HEADER_TRIPLET_FEEL; } }else{ //Time Signature int numerator = measureheader.getTimeSignature().getNumerator(); int value = measureheader.getTimeSignature().getDenominator().getValue(); int prevNumerator = lastMeasureHeader.getTimeSignature().getNumerator(); int prevValue = lastMeasureHeader.getTimeSignature().getDenominator().getValue(); if(numerator != prevNumerator || value != prevValue){ header |= MEASURE_HEADER_TIMESIGNATURE; } //Tempo if(measureheader.getTempo().getValue() != lastMeasureHeader.getTempo().getValue()){ header |= MEASURE_HEADER_TEMPO; } //Triplet Feel if(measureheader.getTripletFeel() != lastMeasureHeader.getTripletFeel()){ header |= MEASURE_HEADER_TRIPLET_FEEL; } } header = (measureheader.isRepeatOpen())?header |= MEASURE_HEADER_REPEAT_OPEN:header; header = (measureheader.getRepeatClose() > 0)?header |= MEASURE_HEADER_REPEAT_CLOSE:header; header = (measureheader.getRepeatAlternative() > 0)?header |= MEASURE_HEADER_REPEAT_ALTERNATIVE:header; header = (measureheader.hasMarker())?header |= MEASURE_HEADER_MARKER:header; writeHeader(header); //escribo el timeSignature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ writeTimeSignature(measureheader.getTimeSignature()); } //escribo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ writeTempo(measureheader.getTempo()); } //escribo el numero de repeticiones if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){ writeShort((short)measureheader.getRepeatClose()); } //escribo los finales alternativos if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){ writeByte(measureheader.getRepeatAlternative()); } //escribo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ writeMarker(measureheader.getMarker()); } //escribo el triplet feel if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ writeByte(measureheader.getTripletFeel()); } } private void writeMeasure(TGMeasure srcMeasure,TGMeasure lastMeasure){ TGMeasure measure = new TGVoiceJoiner(new TGFactory(),srcMeasure).process(); int header = 0; if(lastMeasure == null){ header |= MEASURE_CLEF; header |= MEASURE_KEYSIGNATURE; }else{ //Clef if(measure.getClef() != lastMeasure.getClef()){ header |= MEASURE_CLEF; } //KeySignature if(measure.getKeySignature() != lastMeasure.getKeySignature()){ header |= MEASURE_KEYSIGNATURE; } } //escribo la cabecera writeHeader(header); //escribo los beats TGBeatData data = new TGBeatData(measure); writeBeats(measure, data); //escribo la clave if(((header & MEASURE_CLEF) != 0)){ writeByte(measure.getClef()); } //escribo el key signature if(((header & MEASURE_KEYSIGNATURE) != 0)){ writeByte(measure.getKeySignature()); } } private void writeChannel(TGTrack track){ int header = 0; header = (track.isSolo())?header |= CHANNEL_SOLO:header; header = (track.isMute())?header |= CHANNEL_MUTE:header; writeHeader(header); //escribo el canal writeByte(track.getChannel().getChannel()); //escribo el canal de efectos writeByte(track.getChannel().getEffectChannel()); //escribo el instrumento writeByte(track.getChannel().getInstrument()); //escribo el volumen writeByte(track.getChannel().getVolume()); //escribo el balance writeByte(track.getChannel().getBalance()); //escribo el chorus writeByte(track.getChannel().getChorus()); //escribo el reverb writeByte(track.getChannel().getReverb()); //escribo el phaser writeByte(track.getChannel().getPhaser()); //escribo el tremolo writeByte(track.getChannel().getTremolo()); } private void writeBeats(TGMeasure measure,TGBeatData data){ int count = measure.countBeats(); for(int i = 0; i < count; i ++){ TGBeat beat = measure.getBeat(i); writeBeat(beat,data, (i + 1 < count )); } } private void writeBeat(TGBeat beat,TGBeatData data, boolean hasNext){ TGVoice voice = beat.getVoice( 0 ); int header = hasNext ? BEAT_HAS_NEXT : 0; //Berifico si hay cambio de duracion if(!voice.getDuration().isEqual(data.getDuration())){ header |= BEAT_NEXT_DURATION; data.setDuration(voice.getDuration()); } //Berifico si tiene notas if(!beat.isRestBeat()){ header |= BEAT_HAS_NOTES; } //Berifico si tiene acorde if(beat.getChord() != null){ header |= BEAT_HAS_CHORD; } //Berifico si tiene texto if(beat.getText() != null){ header |= BEAT_HAS_TEXT; } // escribo la cabecera writeHeader(header); //escribo la duracion if(((header & BEAT_NEXT_DURATION) != 0)){ writeDuration(voice.getDuration()); } //escribo las notas if(((header & BEAT_HAS_NOTES) != 0)){ writeNotes(voice, data); } //escribo el acorde if(((header & BEAT_HAS_CHORD) != 0)){ writeChord(beat.getChord()); } //escribo el texto if(((header & BEAT_HAS_TEXT) != 0)){ writeText(beat.getText()); } } private void writeNotes(TGVoice voice,TGBeatData data){ for( int i = 0 ; i < voice.countNotes() ; i ++){ TGNote note = voice.getNote(i); int header = ( i + 1 < voice.countNotes() ? NOTE_HAS_NEXT : 0 ); header = (note.isTiedNote())?header |= NOTE_TIED:header; if(note.getVelocity() != data.getVelocity()){ data.setVelocity(note.getVelocity()); header |= NOTE_VELOCITY; } header = (note.getEffect().hasAnyEffect())?header |= NOTE_EFFECT:header; writeHeader(header); writeNote(header,note); } } private void writeNote(int header,TGNote note){ //escribo el valor writeByte(note.getValue()); //escribo la cuerda writeByte(note.getString()); //escribo el velocity if(((header & NOTE_VELOCITY) != 0)){ writeByte(note.getVelocity()); } //escribo los efectos if(((header & NOTE_EFFECT) != 0)){ writeNoteEffect(note.getEffect()); } } private void writeChord(TGChord chord){ //escribo la cantidad de cuerdas writeByte(chord.countStrings()); //escribo el nombre writeUnsignedByteString(chord.getName()); //escribo el primer fret writeByte(chord.getFirstFret()); //escribo el valor de cada cuerda for(int string = 0; string < chord.countStrings(); string ++){ writeByte(chord.getFretValue(string)); } } private void writeText(TGText text){ //escribo el texto writeUnsignedByteString(text.getValue()); } private void writeInstrumentString(TGString string){ //escribo el valor writeByte(string.getValue()); } private void writeTempo(TGTempo tempo){ //escribo el valor writeShort((short)tempo.getValue()); } private void writeTimeSignature(TGTimeSignature timeSignature){ //escribo el numerador writeByte(timeSignature.getNumerator()); //escribo el denominador writeDuration(timeSignature.getDenominator()); } private void writeDuration(TGDuration duration){ int header = 0; header = (duration.isDotted())?header |= DURATION_DOTTED:header; header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header; header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLE:header; writeHeader(header); //escribo el valor writeByte(duration.getValue()); //escribo el tipo de divisiones if(((header & DURATION_NO_TUPLE) != 0)){ writeDivisionType(duration.getDivision()); } } private void writeDivisionType(TGDivisionType divisionType){ //escribo los enters writeByte(divisionType.getEnters()); //escribo los tiempos writeByte(divisionType.getTimes()); } private void writeNoteEffect(TGNoteEffect effect){ int header = 0; header = (effect.isBend())?header |= EFFECT_BEND:header; header = (effect.isTremoloBar())?header |= EFFECT_TREMOLO_BAR:header; header = (effect.isHarmonic())?header |= EFFECT_HARMONIC:header; header = (effect.isGrace())?header |= EFFECT_GRACE:header; header = (effect.isTrill())?header |= EFFECT_TRILL:header; header = (effect.isTremoloPicking())?header |= EFFECT_TREMOLO_PICKING:header; header = (effect.isVibrato())?header |= EFFECT_VIBRATO:header; header = (effect.isDeadNote())?header |= EFFECT_DEAD:header; header = (effect.isSlide())?header |= EFFECT_SLIDE:header; header = (effect.isHammer())?header |= EFFECT_HAMMER:header; header = (effect.isGhostNote())?header |= EFFECT_GHOST:header; header = (effect.isAccentuatedNote())?header |= EFFECT_ACCENTUATED:header; header = (effect.isHeavyAccentuatedNote())?header |= EFFECT_HEAVY_ACCENTUATED:header; header = (effect.isPalmMute())?header |= EFFECT_PALM_MUTE:header; header = (effect.isStaccato())?header |= EFFECT_STACCATO:header; header = (effect.isTapping())?header |= EFFECT_TAPPING:header; header = (effect.isSlapping())?header |= EFFECT_SLAPPING:header; header = (effect.isPopping())?header |= EFFECT_POPPING:header; header = (effect.isFadeIn())?header |= EFFECT_FADE_IN:header; writeHeader(header,3); //escribo el bend if(((header & EFFECT_BEND) != 0)){ writeBendEffect(effect.getBend()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ writeTremoloBarEffect(effect.getTremoloBar()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ writeHarmonicEffect(effect.getHarmonic()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ writeGraceEffect(effect.getGrace()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ writeTrillEffect(effect.getTrill()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ writeTremoloPickingEffect(effect.getTremoloPicking()); } } private void writeBendEffect(TGEffectBend effect){ //escribo la cantidad de puntos writeByte(effect.getPoints().size()); Iterator it = effect.getPoints().iterator(); while(it.hasNext()){ TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)it.next(); //escribo la posicion writeByte(point.getPosition()); //escribo el valor writeByte(point.getValue()); } } private void writeTremoloBarEffect(TGEffectTremoloBar effect){ //escribo la cantidad de puntos writeByte(effect.getPoints().size()); Iterator it = effect.getPoints().iterator(); while(it.hasNext()){ TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)it.next(); //escribo la posicion writeByte(point.getPosition()); //escribo el valor writeByte( (point.getValue() + TGEffectTremoloBar.MAX_VALUE_LENGTH) ); } } private void writeHarmonicEffect(TGEffectHarmonic effect){ //excribo el tipo writeByte(effect.getType()); //excribo la data if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){ writeByte(effect.getData()); } } private void writeGraceEffect(TGEffectGrace effect){ int header = 0; header = (effect.isDead())?header |= GRACE_FLAG_DEAD:header; header = (effect.isOnBeat())?header |= GRACE_FLAG_ON_BEAT:header; //excribo el header writeHeader(header); //excribo el fret writeByte(effect.getFret()); //excribo la duracion writeByte(effect.getDuration()); //excribo el velocity writeByte(effect.getDynamic()); //excribo la transicion writeByte(effect.getTransition()); } private void writeTremoloPickingEffect(TGEffectTremoloPicking effect){ //excribo la duracion writeByte(effect.getDuration().getValue()); } private void writeTrillEffect(TGEffectTrill effect){ //excribo el fret writeByte(effect.getFret()); //excribo la duracion writeByte(effect.getDuration().getValue()); } private void writeMarker(TGMarker marker){ //escribo el titulo writeUnsignedByteString(marker.getTitle()); //escribo el color writeRGBColor(marker.getColor()); } private void writeRGBColor(TGColor color){ //escribo el RGB writeByte(color.getR()); writeByte(color.getG()); writeByte(color.getB()); } private void writeLyrics(TGLyric lyrics){ //escribo el compas de comienzo writeShort((short)lyrics.getFrom()); //escribo el texto writeIntegerString(lyrics.getLyrics()); } public void writeByte(int v){ try { this.dataOutputStream.write(v); } catch (IOException e) { e.printStackTrace(); } } private void writeUnsignedByteString(String v){ try { String byteString = (v == null ? new String() : ((v.length() > 0xFF)?v.substring(0, 0xFF):v) ); this.dataOutputStream.write(byteString.length()); this.dataOutputStream.writeChars(byteString); } catch (IOException e) { e.printStackTrace(); } } private void writeIntegerString(String v){ try { this.dataOutputStream.writeInt(v.length()); this.dataOutputStream.writeChars(v); } catch (IOException e) { e.printStackTrace(); } } public void writeHeader(int v){ try { this.dataOutputStream.write(v); } catch (IOException e) { e.printStackTrace(); } } public void writeHeader(int v,int bCount){ for(int i = bCount; i > 0; i --){ writeHeader( (v >>> ( (8 * i) - 8 ) ) & 0xFF); } } public void writeShort(short v){ try { this.dataOutputStream.writeShort(v); } catch (IOException e) { e.printStackTrace(); } } public class TGVoiceJoiner { private TGFactory factory; private TGMeasure measure; public TGVoiceJoiner(TGFactory factory,TGMeasure measure){ this.factory = factory; this.measure = measure.clone(factory, measure.getHeader()); this.measure.setTrack( measure.getTrack() ); } public TGMeasure process(){ this.orderBeats(); this.joinBeats(); return this.measure; } public void joinBeats(){ TGBeat previous = null; boolean finish = true; long measureStart = this.measure.getStart(); long measureEnd = (measureStart + this.measure.getLength()); for(int i = 0;i < this.measure.countBeats();i++){ TGBeat beat = this.measure.getBeat( i ); TGVoice voice = beat.getVoice(0); for(int v = 1; v < beat.countVoices(); v++ ){ TGVoice currentVoice = beat.getVoice(v); if(!currentVoice.isEmpty()){ for(int n = 0 ; n < currentVoice.countNotes() ; n++ ){ TGNote note = currentVoice.getNote( n ); voice.addNote( note ); } } } if( voice.isEmpty() ){ this.measure.removeBeat(beat); finish = false; break; } long beatStart = beat.getStart(); if(previous != null){ long previousStart = previous.getStart(); TGDuration previousBestDuration = null; for(int v = /*1*/0; v < previous.countVoices(); v++ ){ TGVoice previousVoice = previous.getVoice(v); if(!previousVoice.isEmpty()){ long length = previousVoice.getDuration().getTime(); if( (previousStart + length) <= beatStart){ if( previousBestDuration == null || length > previousBestDuration.getTime() ){ previousBestDuration = previousVoice.getDuration(); } } } } if(previousBestDuration != null){ previousBestDuration.copy( previous.getVoice(0).getDuration() ); }else{ if(voice.isRestVoice()){ this.measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (beatStart - previousStart) ); duration.copy( previous.getVoice(0).getDuration() ); } } TGDuration beatBestDuration = null; for(int v = /*1*/0; v < beat.countVoices(); v++ ){ TGVoice currentVoice = beat.getVoice(v); if(!currentVoice.isEmpty()){ long length = currentVoice.getDuration().getTime(); if( (beatStart + length) <= measureEnd ){ if( beatBestDuration == null || length > beatBestDuration.getTime() ){ beatBestDuration = currentVoice.getDuration(); } } } } if(beatBestDuration == null){ if(voice.isRestVoice()){ this.measure.removeBeat(beat); finish = false; break; } TGDuration duration = TGDuration.fromTime(this.factory, (measureEnd - beatStart) ); duration.copy( voice.getDuration() ); } previous = beat; } if(!finish){ joinBeats(); } } public void orderBeats(){ for(int i = 0;i < this.measure.countBeats();i++){ TGBeat minBeat = null; for(int j = i;j < this.measure.countBeats();j++){ TGBeat beat = this.measure.getBeat(j); if(minBeat == null || beat.getStart() < minBeat.getStart()){ minBeat = beat; } } this.measure.moveBeat(i, minBeat); } } } } tuxguitar-src-1.2/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStream.java0000644000175000017500000004152211273045344030443 0ustar julianjulian/* * Created on 16-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.io.tg.v10; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGInputStreamBase; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMarker; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectBend; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGInputStream extends TGStream implements TGInputStreamBase{ private DataInputStream dataInputStream; private String version; private TGFactory factory; public TGInputStream() { super(); } public void init(TGFactory factory,InputStream stream) { this.factory = factory; this.dataInputStream = new DataInputStream(stream); this.version = null; } public TGFileFormat getFileFormat(){ return new TGFileFormat("TuxGuitar","*.tg"); } public boolean isSupportedVersion(String version){ return (version.equals(TG_FORMAT_VERSION)); } public boolean isSupportedVersion(){ try{ readVersion(); return isSupportedVersion(this.version); }catch(Throwable throwable){ return false; } } public TGSong readSong() throws TGFileFormatException{ try { if(this.isSupportedVersion()){ TGSong song = this.read(); this.dataInputStream.close(); return song; } throw new TGFileFormatException("Unsopported Version"); } catch (Throwable throwable) { throw new TGFileFormatException(throwable); } } private void readVersion(){ if(this.version == null){ this.version = readUnsignedByteString(); } } private TGSong read(){ TGSong song = this.factory.newSong(); //leo el nombre song.setName(readUnsignedByteString()); //leo el artista song.setArtist(readUnsignedByteString()); //leo el album song.setAlbum(readUnsignedByteString()); //leo el autor song.setAuthor(readUnsignedByteString()); //leo la cantidad de measure headers int headerCount = readShort(); //leo las pistas TGMeasureHeader lastHeader = null; long headerStart = TGDuration.QUARTER_TIME; for(int i = 0;i < headerCount;i++){ TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader); song.addMeasureHeader(header); headerStart += header.getLength(); lastHeader = header; } //leo la cantidad de pistas int trackCount = readByte(); //leo las pistas for(int i = 0;i < trackCount;i++){ song.addTrack(readTrack(i + 1,song)); } return song; } private TGTrack readTrack(int number,TGSong song){ //header int header = readHeader(); TGTrack track = this.factory.newTrack(); track.setNumber(number); //leo el nombre track.setName(readUnsignedByteString()); //leo el canal readChannel(track); //leo la cantidad de compases int measureCount = song.countMeasureHeaders(); //leo los compases TGMeasure lastMeasure = null; for(int i = 0;i < measureCount;i++){ TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure); track.addMeasure(measure); lastMeasure = measure; } //leo la cantidad de cuerdas int stringCount = readByte(); //leo las cuerdas for(int i = 0;i < stringCount;i++){ track.getStrings().add(readInstrumentString(i + 1)); } //leo el offset track.setOffset(TGTrack.MIN_OFFSET + readByte()); //leo el color readRGBColor(track.getColor()); //leo el lyrics if(((header & TRACK_LYRICS) != 0)){ readLyrics(track.getLyrics()); } return track; } private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){ int header = readHeader(); TGMeasureHeader measureHeader = this.factory.newHeader(); measureHeader.setNumber(number); measureHeader.setStart(start); //leo el time signature if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){ readTimeSignature(measureHeader.getTimeSignature()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature()); } //leo el tempo if(((header & MEASURE_HEADER_TEMPO) != 0)){ readTempo(measureHeader.getTempo()); }else if(lastMeasureHeader != null){ lastMeasureHeader.getTempo().copy(measureHeader.getTempo()); } //leo el comienzo de la repeticion measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0); //leo el numero de repeticiones if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){ measureHeader.setRepeatClose(readShort()); } //leo los finales alternativos if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){ measureHeader.setRepeatAlternative(readByte()); } //leo el marker if(((header & MEASURE_HEADER_MARKER) != 0)){ measureHeader.setMarker(readMarker(number)); } measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE); if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){ measureHeader.setTripletFeel(readByte()); } return measureHeader; } private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){ int header = readHeader(); TGMeasure measure = this.factory.newMeasure(measureHeader); TGBeatData data = new TGBeatData(measure); //leo la los beats readBeats(measure, data); //leo la clave measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef()); if(((header & MEASURE_CLEF) != 0)){ measure.setClef(readByte()); } //leo el key signature measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature()); if(((header & MEASURE_KEYSIGNATURE) != 0)){ measure.setKeySignature(readByte()); } return measure; } private void readChannel(TGTrack track){ int header = readHeader(); //leo el canal track.getChannel().setChannel(readByte()); //leo el canal de efectos track.getChannel().setEffectChannel(readByte()); //leo el instrumento track.getChannel().setInstrument(readByte()); //leo el volumen track.getChannel().setVolume(readByte()); //leo el balance track.getChannel().setBalance(readByte()); //leo el chorus track.getChannel().setChorus(readByte()); //leo el reverb track.getChannel().setReverb(readByte()); //leo el phaser track.getChannel().setPhaser(readByte()); //leo el tremolo track.getChannel().setTremolo(readByte()); //leo el solo track.setSolo((header & CHANNEL_SOLO) != 0); //leo el mute track.setMute((header & CHANNEL_MUTE) != 0); } private void readBeats(TGMeasure measure,TGBeatData data){ int header = BEAT_HAS_NEXT; while(((header & BEAT_HAS_NEXT) != 0)){ header = readHeader(); readBeat(header, measure, data); } } private void readBeat(int header, TGMeasure measure,TGBeatData data){ TGBeat beat = this.factory.newBeat(); TGVoice voice = beat.getVoice(0); beat.setStart(data.getStart()); voice.setEmpty( false ); //leo la duracion if(((header & BEAT_NEXT_DURATION) != 0)){ readDuration(data.getDuration()); } //leo las notas if(((header & BEAT_HAS_NOTES) != 0)){ readNotes(beat, data); } //leo el acorde if(((header & BEAT_HAS_CHORD) != 0)){ readChord(beat); } //leo el texto if(((header & BEAT_HAS_TEXT) != 0)){ readText(beat); } data.getDuration().copy(voice.getDuration()); measure.addBeat(beat); data.setStart(data.getStart() + data.getDuration().getTime()); } private void readNotes(TGBeat beat,TGBeatData data){ int header = NOTE_HAS_NEXT; while(((header & NOTE_HAS_NEXT) != 0)){ header = readHeader(); readNote(header, beat, data); } } private void readNote(int header,TGBeat beat,TGBeatData data){ TGNote note = this.factory.newNote(); TGVoice voice = beat.getVoice(0); //leo el valor note.setValue(readByte()); //leo la cuerda note.setString(readByte()); //leo la ligadura note.setTiedNote((header & NOTE_TIED) != 0); //leo el velocity if(((header & NOTE_VELOCITY) != 0)){ data.setVelocity(readByte()); } note.setVelocity(data.getVelocity()); //leo los efectos if(((header & NOTE_EFFECT) != 0)){ readNoteEffect(note.getEffect()); } voice.addNote(note); } private void readChord(TGBeat beat){ TGChord chord = this.factory.newChord(readByte()); //leo el nombre chord.setName( readUnsignedByteString() ); //leo el primer fret chord.setFirstFret(readByte()); //leo las cuerdas for(int string = 0; string < chord.countStrings(); string ++){ chord.addFretValue(string, readByte()); } beat.setChord(chord); } private void readText(TGBeat beat){ TGText text = this.factory.newText(); //leo el texto text.setValue(readUnsignedByteString()); beat.setText(text); } private TGString readInstrumentString(int number){ TGString string = this.factory.newString(); string.setNumber(number); //leo el valor string.setValue(readByte()); return string; } private void readTempo(TGTempo tempo){ //leo el valor tempo.setValue(readShort()); } private void readTimeSignature(TGTimeSignature timeSignature){ //leo el numerador timeSignature.setNumerator(readByte()); //leo el denominador readDuration(timeSignature.getDenominator()); } private void readDuration(TGDuration duration){ int header = readHeader(); // leo el puntillo duration.setDotted((header & DURATION_DOTTED) != 0); //leo el doble puntillo duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0); //leo el valor duration.setValue(readByte()); //leo el tipo de divisiones if(((header & DURATION_NO_TUPLE) != 0)){ readDivisionType(duration.getDivision()); } else{ TGDivisionType.NORMAL.copy(duration.getDivision()); } } private void readDivisionType(TGDivisionType divisionType){ //leo los enters divisionType.setEnters(readByte()); //leo los tiempos divisionType.setTimes(readByte()); } private void readNoteEffect(TGNoteEffect effect){ int header = readHeader(3); //leo el bend if(((header & EFFECT_BEND) != 0)){ effect.setBend(readBendEffect()); } //leo el tremolo bar if(((header & EFFECT_TREMOLO_BAR) != 0)){ effect.setTremoloBar(readTremoloBarEffect()); } //leo el harmonic if(((header & EFFECT_HARMONIC) != 0)){ effect.setHarmonic(readHarmonicEffect()); } //leo el grace if(((header & EFFECT_GRACE) != 0)){ effect.setGrace(readGraceEffect()); } //leo el trill if(((header & EFFECT_TRILL) != 0)){ effect.setTrill(readTrillEffect()); } //leo el tremolo picking if(((header & EFFECT_TREMOLO_PICKING) != 0)){ effect.setTremoloPicking(readTremoloPickingEffect()); } //vibrato effect.setVibrato(((header & EFFECT_VIBRATO) != 0)); //dead note effect.setDeadNote(((header & EFFECT_DEAD) != 0)); //slide effect.setSlide(((header & EFFECT_SLIDE) != 0)); //hammer-on/pull-off effect.setHammer(((header & EFFECT_HAMMER) != 0)); //ghost note effect.setGhostNote(((header & EFFECT_GHOST) != 0)); //accentuated note effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0)); //heavy accentuated note effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0)); //palm mute effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0)); //staccato effect.setStaccato(((header & EFFECT_STACCATO) != 0)); //tapping effect.setTapping(((header & EFFECT_TAPPING) != 0)); //slapping effect.setSlapping(((header & EFFECT_SLAPPING) != 0)); //popping effect.setPopping(((header & EFFECT_POPPING) != 0)); //fade in effect.setFadeIn(((header & EFFECT_FADE_IN) != 0)); } private TGEffectBend readBendEffect(){ TGEffectBend bend = this.factory.newEffectBend(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = readByte(); //agrego el punto bend.addPoint(position,value); } return bend; } private TGEffectTremoloBar readTremoloBarEffect(){ TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar(); //leo la cantidad de puntos int count = readByte(); for(int i = 0;i < count;i++){ //leo la posicion int position = readByte(); //leo el valor int value = (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH); //agrego el punto tremoloBar.addPoint(position,value); } return tremoloBar; } private TGEffectHarmonic readHarmonicEffect(){ TGEffectHarmonic effect = this.factory.newEffectHarmonic(); //leo el tipo effect.setType(readByte()); //leo la data if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){ effect.setData(readByte()); } return effect; } private TGEffectGrace readGraceEffect(){ int header = readHeader(); TGEffectGrace effect = this.factory.newEffectGrace(); effect.setDead((header & GRACE_FLAG_DEAD) != 0) ; effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ; //leo el fret effect.setFret(readByte()); //leo la duracion effect.setDuration(readByte()); //leo el velocity effect.setDynamic(readByte()); //leo la transicion effect.setTransition(readByte()); return effect; } private TGEffectTremoloPicking readTremoloPickingEffect(){ TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking(); //leo la duracion effect.getDuration().setValue(readByte()); return effect; } private TGEffectTrill readTrillEffect(){ TGEffectTrill effect = this.factory.newEffectTrill(); //leo el fret effect.setFret(readByte()); //leo la duracion effect.getDuration().setValue(readByte()); return effect; } private TGMarker readMarker(int measure){ TGMarker marker = this.factory.newMarker(); marker.setMeasure(measure); //leo el titulo marker.setTitle(readUnsignedByteString()); //leo el color readRGBColor(marker.getColor()); return marker; } private void readRGBColor(TGColor color){ //leo el RGB color.setR((readByte() & 0xff)); color.setG((readByte() & 0xff)); color.setB((readByte() & 0xff)); } private void readLyrics(TGLyric lyrics){ //leo el compas de comienzo lyrics.setFrom(readShort()); //leo el texto lyrics.setLyrics(readIntegerString()); } private byte readByte(){ try { return (byte)this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(){ try { return this.dataInputStream.read(); } catch (IOException e) { e.printStackTrace(); } return 0; } private int readHeader(int bCount){ int header = 0; for(int i = bCount; i > 0; i --){ header += ( readHeader() << ( (8 * i) - 8 ) ); } return header; } private short readShort(){ try { return this.dataInputStream.readShort(); } catch (IOException e) { e.printStackTrace(); } return 0; } private String readUnsignedByteString(){ try { return readString( (this.dataInputStream.read() & 0xFF )); } catch (IOException e) { e.printStackTrace(); } return null; } private String readIntegerString(){ try { return readString(this.dataInputStream.readInt()); } catch (IOException e) { e.printStackTrace(); } return null; } private String readString(int length){ try { char[] chars = new char[length]; for(int i = 0;i < chars.length; i++){ chars[i] = this.dataInputStream.readChar(); } return String.copyValueOf(chars); } catch (IOException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPluginList.java0000644000175000017500000000311711273045346031507 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiSequencerProviderPlugin; import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; import org.herac.tuxguitar.player.base.MidiSequencerProvider; import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortProviderImpl; import org.herac.tuxguitar.player.impl.jsa.sequencer.MidiSequencerProviderImpl; import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils; public class MidiPluginList extends TGPluginList implements TGPluginSetup{ protected List getPlugins() { List plugins = new ArrayList(); plugins.add(new TGMidiOutputPortProviderPlugin() { protected MidiOutputPortProvider getProvider() { return new MidiPortProviderImpl(); } }); plugins.add(new TGMidiSequencerProviderPlugin() { protected MidiSequencerProvider getProvider() { return new MidiSequencerProviderImpl(); } }); return plugins; } public void setupDialog(Shell parent) { MidiConfigUtils.setupDialog(parent); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "Java Sound Api plugin"; } public String getName() { return "Java Sound Api plugin"; } public String getVersion() { return "1.0"; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoDownAction.java0000644000175000017500000000140311273045225030672 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.caret; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoDownAction extends Action{ public static final String NAME = "action.caret.go-down"; public GoDownAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE ); } protected int execute(TypedEvent e){ getEditor().getTablature().getCaret().moveDown(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoLeftAction.java0000644000175000017500000000162311273045225030661 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.caret; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoLeftAction extends Action{ public static final String NAME = "action.caret.go-left"; public GoLeftAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().getTransport().gotoPrevious(); } else{ getEditor().getTablature().getCaret().moveLeft(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoRightAction.java0000644000175000017500000000271211273045225031044 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.caret; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoRightAction extends Action{ public static final String NAME = "action.caret.go-right"; public GoRightAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().getTransport().gotoNext(); } else{ Caret caret = getEditor().getTablature().getCaret(); if(!caret.moveRight()){ int number = (getSongManager().getSong().countMeasureHeaders() + 1); //comienza el undoable UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number); getSongManager().addNewMeasure(number); fireUpdate(number); caret.moveRight(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //termia el undoable addUndoableEdit(undoable.endUndo()); } } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoUpAction.java0000644000175000017500000000137211273045225030354 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.caret; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoUpAction extends Action{ public static final String NAME = "action.caret.go-up"; public GoUpAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE); } protected int execute(TypedEvent e){ getEditor().getTablature().getCaret().moveUp(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeClefAction.java0000644000175000017500000001335111273045225032726 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.composition; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeClef; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeClefAction extends Action{ public static final String NAME = "action.composition.change-clef"; public ChangeClefAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("composition.clef")); //-------clef------------------------------------- Group clef = new Group(dialog,SWT.SHADOW_ETCHED_IN); clef.setLayout(new GridLayout(2,false)); clef.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); clef.setText(TuxGuitar.getProperty("composition.clef")); Label numeratorLabel = new Label(clef, SWT.NULL); numeratorLabel.setText(TuxGuitar.getProperty("composition.clef") + ":"); final Combo clefs = new Combo(clef, SWT.DROP_DOWN | SWT.READ_ONLY); clefs.add(TuxGuitar.getProperty("composition.clef.treble")); clefs.add(TuxGuitar.getProperty("composition.clef.bass")); clefs.add(TuxGuitar.getProperty("composition.clef.tenor")); clefs.add(TuxGuitar.getProperty("composition.clef.alto")); clefs.select(measure.getClef() - 1); clefs.setLayoutData(getComboData()); //--------------------To End Checkbox------------------------------- Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN); check.setLayout(new GridLayout()); check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); check.setText(TuxGuitar.getProperty("options")); final Button toEnd = new Button(check, SWT.CHECK); toEnd.setText(TuxGuitar.getProperty("composition.clef.to-the-end")); toEnd.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final boolean toEndValue = toEnd.getSelection(); final int clef = (clefs.getSelectionIndex() + 1); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); setClef(clef,toEndValue); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getComboData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 150; return data; } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void setClef(int clef,boolean toEnd){ //comienza el undoable UndoableChangeClef undoable = UndoableChangeClef.startUndo(); TGMeasure measure = getEditor().getTablature().getCaret().getMeasure(); TGTrack track = getEditor().getTablature().getCaret().getTrack(); getSongManager().getTrackManager().changeClef(track,measure.getStart(),clef,toEnd); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //actualizo la tablatura updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo(clef,toEnd)); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeInfoAction.java0000644000175000017500000002172411273045225032753 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.composition; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeInfo; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeInfoAction extends Action{ public static final String NAME = "action.composition.change-info"; private static final int GROUP_WIDTH = 450; private static final int GROUP_HEIGHT = SWT.DEFAULT; public ChangeInfoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGSong song = getSongManager().getSong(); if (song != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setText(TuxGuitar.getProperty("composition.properties")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(makeGroupLayout(5)); group.setLayoutData(new GridData(GROUP_WIDTH,GROUP_HEIGHT)); group.setText(TuxGuitar.getProperty("composition.properties")); //-------NAME------------------------------------ Label nameLabel = new Label(group, SWT.NULL); nameLabel.setLayoutData(makeLabelData()); nameLabel.setText(TuxGuitar.getProperty("composition.name") + ":"); final Text nameText = new Text(group, SWT.BORDER); nameText.setLayoutData(makeTextData()); nameText.setText(song.getName()); //-------ARTIST------------------------------------ Label artistLabel = new Label(group, SWT.NULL); artistLabel.setLayoutData(makeLabelData()); artistLabel.setText(TuxGuitar.getProperty("composition.artist") + ":"); final Text artistText = new Text(group, SWT.BORDER); artistText.setLayoutData(makeTextData()); artistText.setText(song.getArtist()); //-------ALBUM------------------------------------ Label albumLabel = new Label(group, SWT.NULL); albumLabel.setLayoutData(makeLabelData()); albumLabel.setText(TuxGuitar.getProperty("composition.album") + ":"); final Text albumText = new Text(group, SWT.BORDER); albumText.setLayoutData(makeTextData()); albumText.setText(song.getAlbum()); //-------AUTHOR------------------------------------ Label authorLabel = new Label(group, SWT.NULL); authorLabel.setLayoutData(makeLabelData()); authorLabel.setText(TuxGuitar.getProperty("composition.author") + ":"); final Text authorText = new Text(group, SWT.BORDER); authorText.setLayoutData(makeTextData()); authorText.setText(song.getAuthor()); //-------DATE------------------------------------ Label dateLabel = new Label(group, SWT.NULL); dateLabel.setLayoutData(makeLabelData()); dateLabel.setText(TuxGuitar.getProperty("composition.date") + ":"); final Text dateText = new Text(group, SWT.BORDER); dateText.setLayoutData(makeTextData()); dateText.setText(song.getDate()); //-------COPYRIGHT------------------------------------ Label copyrightLabel = new Label(group, SWT.NULL); copyrightLabel.setLayoutData(makeLabelData()); copyrightLabel.setText(TuxGuitar.getProperty("composition.copyright") + ":"); final Text copyrightText = new Text(group, SWT.BORDER); copyrightText.setLayoutData(makeTextData()); copyrightText.setText(song.getCopyright()); //-------WRITER------------------------------------- Label writerLabel = new Label(group, SWT.NULL); writerLabel.setLayoutData(makeLabelData()); writerLabel.setText(TuxGuitar.getProperty("composition.writer") + ":"); final Text writerText = new Text(group, SWT.BORDER); writerText.setLayoutData(makeTextData()); writerText.setText(song.getWriter()); //-------TRANSCRIBER------------------------------------ Label transcriberLabel = new Label(group, SWT.NULL); transcriberLabel.setLayoutData(makeLabelData()); transcriberLabel.setText(TuxGuitar.getProperty("composition.transcriber") + ":"); final Text transcriberText = new Text(group, SWT.BORDER); transcriberText.setLayoutData(makeTextData()); transcriberText.setText(song.getTranscriber()); //-------COMMENTS------------------------------------ Label commentsLabel = new Label(group, SWT.NULL); commentsLabel.setLayoutData(makeLabelData()); commentsLabel.setText(TuxGuitar.getProperty("composition.comments") + ":"); final Text commentsText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); commentsText.setLayoutData(makeTextAreaData()); commentsText.setText(song.getComments()); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final String name = nameText.getText(); final String artist = artistText.getText(); final String album = albumText.getText(); final String author = authorText.getText(); final String date = dateText.getText(); final String copyright = copyrightText.getText(); final String writer = writerText.getText(); final String transcriber = transcriberText.getText(); final String comments = commentsText.getText(); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); setProperties(name,artist,album,author,date,copyright,writer,transcriber,comments); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridLayout makeGroupLayout(int spacing){ GridLayout layout = new GridLayout(2,false); layout.marginTop = spacing; layout.marginBottom = spacing; layout.marginLeft = spacing; layout.marginRight = spacing; layout.verticalSpacing = spacing; layout.horizontalSpacing = spacing; return layout; } private GridData makeTextAreaData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumHeight = 100; return data; } private GridData makeTextData(){ return new GridData(SWT.FILL, SWT.FILL, true, true); } private GridData makeLabelData(){ return new GridData(SWT.RIGHT,SWT.CENTER,false,true); } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void setProperties(String name,String artist,String album,String author,String date,String copyright,String writer,String transcriber,String comments){ //comienza el undoable UndoableChangeInfo undoable = UndoableChangeInfo.startUndo(); getSongManager().setProperties(name,artist,album,author,date,copyright,writer,transcriber,comments); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().showTitle(); //termia el undoable addUndoableEdit(undoable.endUndo()); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeKeySignatureAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeKeySignatureAction0000644000175000017500000001561111273045225033550 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.composition; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeKeySignature; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeKeySignatureAction extends Action{ public static final String NAME = "action.composition.change-key-signature"; public ChangeKeySignatureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("composition.keysignature")); //-------key Signature------------------------------------- Group keySignature = new Group(dialog,SWT.SHADOW_ETCHED_IN); keySignature.setLayout(new GridLayout(2,false)); keySignature.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); keySignature.setText(TuxGuitar.getProperty("composition.keysignature")); Label numeratorLabel = new Label(keySignature, SWT.NULL); numeratorLabel.setText(TuxGuitar.getProperty("composition.keysignature") + ":"); final Combo keySignatures = new Combo(keySignature, SWT.DROP_DOWN | SWT.READ_ONLY); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.natural")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-1")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-2")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-3")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-4")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-5")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-6")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-7")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-1")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-2")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-3")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-4")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-5")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-6")); keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-7")); keySignatures.select(measure.getKeySignature()); keySignatures.setLayoutData(getComboData()); //--------------------To End Checkbox------------------------------- Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN); check.setLayout(new GridLayout()); check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); check.setText(TuxGuitar.getProperty("options")); final Button toEnd = new Button(check, SWT.CHECK); toEnd.setText(TuxGuitar.getProperty("composition.keysignature.to-the-end")); toEnd.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final boolean toEndValue = toEnd.getSelection(); final int keySignature = keySignatures.getSelectionIndex(); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); setKeySignature(keySignature,toEndValue); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData getComboData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 150; return data; } protected void setKeySignature(int keySignature,boolean toEnd){ //comienza el undoable UndoableChangeKeySignature undoable = UndoableChangeKeySignature.startUndo(); TGMeasure measure = getEditor().getTablature().getCaret().getMeasure(); TGTrack track = getEditor().getTablature().getCaret().getTrack(); getSongManager().getTrackManager().changeKeySignature(track,measure.getStart(),keySignature,toEnd); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //actualizo la tablatura updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo(keySignature,toEnd)); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTempoAction.java0000644000175000017500000001504411273045225033142 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.composition; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeTempo; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGTempo; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTempoAction extends Action{ public static final String NAME = "action.composition.change-tempo"; private static final int MIN_TEMPO = 30; private static final int MAX_TEMPO = 320; protected static final int[] DEFAULT_PERCENTS = new int[]{25,50,75,100,125,150,175,200}; public ChangeTempoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("composition.tempo")); //-----------------TEMPO------------------------ Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("composition.tempo")); TGTempo currentTempo = measure.getTempo(); Label tempoLabel = new Label(group, SWT.NULL); tempoLabel.setText(TuxGuitar.getProperty("composition.tempo")); final Spinner tempo = new Spinner(group, SWT.BORDER); tempo.setLayoutData(getSpinnerData()); tempo.setMinimum(MIN_TEMPO); tempo.setMaximum(MAX_TEMPO); tempo.setSelection(currentTempo.getValue()); //------------------OPTIONS-------------------------- Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN); options.setLayout(new GridLayout()); options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); options.setText(TuxGuitar.getProperty("options")); final Button applyToAllMeasures = new Button(options, SWT.RADIO); applyToAllMeasures.setText(TuxGuitar.getProperty("composition.tempo.start-to-end")); final Button applyToEnd = new Button(options, SWT.RADIO); applyToEnd.setText(TuxGuitar.getProperty("composition.tempo.position-to-end")); final Button applyToNext = new Button(options, SWT.RADIO); applyToNext.setText(TuxGuitar.getProperty("composition.tempo.position-to-next")); applyToAllMeasures.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final int tempoValue = tempo.getSelection(); final boolean applyToEndValue = applyToEnd.getSelection(); final boolean applyToAllMeasuresValue = applyToAllMeasures.getSelection(); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); setTempo(tempoValue, applyToAllMeasuresValue, applyToEndValue); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 150; return data; } protected void setTempo(int tempoValue,boolean applyToAllMeasures,boolean applyToEnd){ if(tempoValue >= MIN_TEMPO && MAX_TEMPO <= 320){ TGTempo tempo = getSongManager().getFactory().newTempo(); tempo.setValue(tempoValue); long start = (applyToAllMeasures ? TGDuration.QUARTER_TIME : getEditor().getTablature().getCaret().getMeasure().getStart()); boolean toEnd = (applyToAllMeasures || applyToEnd); //comienza el undoable UndoableChangeTempo undoable = UndoableChangeTempo.startUndo(); getSongManager().changeTempos(start,tempo,toEnd); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //actualizo la tablatura updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } } public TGSongManager getSongManager(){ return super.getSongManager(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTimeSignatureAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTimeSignatureActio0000644000175000017500000001544311273045225033543 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.composition; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeTimeSignature; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGTimeSignature; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTimeSignatureAction extends Action{ public static final String NAME = "action.composition.change-time-signature"; public ChangeTimeSignatureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("composition.timesignature")); //-------------TIME SIGNATURE----------------------------------------------- Group timeSignature = new Group(dialog,SWT.SHADOW_ETCHED_IN); timeSignature.setLayout(new GridLayout(2,false)); timeSignature.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); timeSignature.setText(TuxGuitar.getProperty("composition.timesignature")); TGTimeSignature currentTimeSignature = measure.getTimeSignature(); //numerator Label numeratorLabel = new Label(timeSignature, SWT.NULL); numeratorLabel.setText(TuxGuitar.getProperty("composition.timesignature.Numerator")); final Combo numerator = new Combo(timeSignature, SWT.DROP_DOWN | SWT.READ_ONLY); for (int i = 1; i <= 32; i++) { numerator.add(Integer.toString(i)); } numerator.setText(Integer.toString(currentTimeSignature.getNumerator())); numerator.setLayoutData(getComboData()); //denominator Label denominatorLabel = new Label(timeSignature, SWT.NULL); denominatorLabel.setText(TuxGuitar.getProperty("composition.timesignature.denominator")); final Combo denominator = new Combo(timeSignature, SWT.DROP_DOWN | SWT.READ_ONLY); for (int i = 1; i <= 32; i = i * 2) { denominator.add(Integer.toString(i)); } denominator.setText(Integer.toString(currentTimeSignature.getDenominator().getValue())); denominator.setLayoutData(getComboData()); //--------------------To End Checkbox------------------------------- Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN); check.setLayout(new GridLayout()); check.setText(TuxGuitar.getProperty("options")); check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final Button toEnd = new Button(check, SWT.CHECK); toEnd.setText(TuxGuitar.getProperty("composition.timesignature.to-the-end")); toEnd.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOk = new Button(buttons, SWT.PUSH); buttonOk.setText(TuxGuitar.getProperty("ok")); buttonOk.setLayoutData(getButtonData()); buttonOk.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final boolean toEndValue = toEnd.getSelection(); final int numeratorValue = Integer.parseInt(numerator.getText()); final int denominatorValue = Integer.parseInt(denominator.getText()); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); TGTimeSignature timeSignature = getSongManager().getFactory().newTimeSignature(); timeSignature.setNumerator(numeratorValue); timeSignature.getDenominator().setValue(denominatorValue); setTimeSignature(timeSignature,toEndValue); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setLayoutData(getButtonData()); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOk ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData getComboData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 150; return data; } protected void setTimeSignature(TGTimeSignature timeSignature,boolean toEnd){ //comienza el undoable UndoableChangeTimeSignature undoable = UndoableChangeTimeSignature.startUndo(); Caret caret = getEditor().getTablature().getCaret(); TGMeasureImpl measure = caret.getMeasure(); getSongManager().changeTimeSignature(measure.getStart(),timeSignature,toEnd); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //actualizo la tablatura updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo(timeSignature,measure.getStart(),toEnd)); } public TGSongManager getSongManager(){ return super.getSongManager(); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTripletFeelAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTripletFeelAction.0000644000175000017500000001462011273045225033432 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.composition; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeTripletFeel; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTripletFeelAction extends Action{ public static final String NAME = "action.composition.change-triplet-feel"; public ChangeTripletFeelAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("composition.tripletfeel")); dialog.setMinimumSize(300,0); //-------------TIME SIGNATURE----------------------------------------------- Group tripletFeel = new Group(dialog,SWT.SHADOW_ETCHED_IN); tripletFeel.setLayout(new GridLayout()); tripletFeel.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); tripletFeel.setText(TuxGuitar.getProperty("composition.tripletfeel")); //none final Button tripletFeelNone = new Button(tripletFeel, SWT.RADIO); tripletFeelNone.setText(TuxGuitar.getProperty("composition.tripletfeel.none")); tripletFeelNone.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE); final Button tripletFeelEighth = new Button(tripletFeel, SWT.RADIO); tripletFeelEighth.setText(TuxGuitar.getProperty("composition.tripletfeel.eighth")); tripletFeelEighth.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH); final Button tripletFeelSixteenth = new Button(tripletFeel, SWT.RADIO); tripletFeelSixteenth.setText(TuxGuitar.getProperty("composition.tripletfeel.sixteenth")); tripletFeelSixteenth.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH); //--------------------To End Checkbox------------------------------- Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN); check.setLayout(new GridLayout()); check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); check.setText(TuxGuitar.getProperty("options")); final Button toEnd = new Button(check, SWT.CHECK); toEnd.setText(TuxGuitar.getProperty("composition.tripletfeel.to-the-end")); toEnd.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOk = new Button(buttons, SWT.PUSH); buttonOk.setText(TuxGuitar.getProperty("ok")); buttonOk.setLayoutData(getButtonData()); buttonOk.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final boolean toEndValue = toEnd.getSelection(); final int tripletFeel = getSelectedTripletFeel(tripletFeelNone, tripletFeelEighth, tripletFeelSixteenth); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); setTripletFeel(tripletFeel,toEndValue); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setLayoutData(getButtonData()); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOk ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected int getSelectedTripletFeel(Button tripletFeelNone,Button tripletFeelEighth, Button tripletFeelSixteenth){ if(tripletFeelNone.getSelection()){ return TGMeasureHeader.TRIPLET_FEEL_NONE; }else if(tripletFeelEighth.getSelection()){ return TGMeasureHeader.TRIPLET_FEEL_EIGHTH; }else if(tripletFeelSixteenth.getSelection()){ return TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH; } return TGMeasureHeader.TRIPLET_FEEL_NONE; } protected void setTripletFeel(int tripletFeel,boolean toEnd){ //comienza el undoable UndoableChangeTripletFeel undoable = UndoableChangeTripletFeel.startUndo(); Caret caret = getEditor().getTablature().getCaret(); TGMeasureImpl measure = caret.getMeasure(); getSongManager().changeTripletFeel(measure.getStart(),tripletFeel,toEnd); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //actualizo la tablatura updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo(tripletFeel,toEnd)); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDivisionTypeAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDivisionTypeAction.ja0000644000175000017500000000564311273045225033443 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGDivisionType; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeDivisionTypeAction extends Action{ public static final String NAME = "action.note.duration.change-division-type"; public ChangeDivisionTypeAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); boolean isKeyEvent = false; if(e instanceof KeyEvent){ isKeyEvent = true; } if(!isKeyEvent){ TGDivisionType divisionType = defaultDivisionType(); if(e.widget.getData() != null && e.widget.getData() instanceof TGDivisionType){ divisionType = (TGDivisionType)e.widget.getData(); } if(getSelectedDuration().getDivision().isEqual(divisionType)){ setDivisionType(noTuplet()); }else{ setDivisionType(divisionType); } } else{ if(getSelectedDuration().getDivision().isEqual(TGDivisionType.NORMAL)){ setDivisionType(defaultDivisionType()); }else{ setDivisionType(noTuplet()); } } setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } private TGDivisionType noTuplet(){ TGDivisionType divisionType = getSongManager().getFactory().newDivisionType(); divisionType.setEnters(1); divisionType.setTimes(1); return divisionType; } private TGDivisionType defaultDivisionType(){ TGDivisionType divisionType = getSongManager().getFactory().newDivisionType(); divisionType.setEnters(3); divisionType.setTimes(2); return divisionType; } private void setDivisionType(TGDivisionType divisionType){ getSelectedDuration().getDivision().setEnters(divisionType.getEnters()); getSelectedDuration().getDivision().setTimes(divisionType.getTimes()); } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDottedDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDottedDurationAction.0000644000175000017500000000330711273045225033426 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeDottedDurationAction extends Action{ public static final String NAME = "action.note.duration.change-dotted"; public ChangeDottedDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setDotted(!getSelectedDuration().isDotted()); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDoubleDottedDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDoubleDottedDurationA0000644000175000017500000000334011273045225033443 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeDoubleDottedDurationAction extends Action{ public static final String NAME = "action.note.duration.change-double-dotted"; public ChangeDoubleDottedDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setDoubleDotted(!getSelectedDuration().isDoubleDotted()); getSelectedDuration().setDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/DecrementDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/DecrementDurationAction.jav0000644000175000017500000000352011273045225033501 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DecrementDurationAction extends Action{ public static final String NAME = "action.note.duration.decrement-duration"; public DecrementDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGDuration duration = getEditor().getTablature().getCaret().getDuration(); if(duration.getValue() > TGDuration.WHOLE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); this.changeDuration(duration.getValue() / 2); TuxGuitar.instance().getFileHistory().setUnsavedFile(); this.updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void changeDuration(int value) { Caret caret = getEditor().getTablature().getCaret(); caret.getDuration().setValue(value); caret.getDuration().setDotted(false); caret.getDuration().setDoubleDotted(false); caret.changeDuration(caret.getDuration().clone(getSongManager().getFactory())); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/IncrementDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/IncrementDurationAction.jav0000644000175000017500000000352711273045225033526 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class IncrementDurationAction extends Action{ public static final String NAME = "action.note.duration.increment-duration"; public IncrementDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGDuration duration = getEditor().getTablature().getCaret().getDuration(); if(duration.getValue() < TGDuration.SIXTY_FOURTH){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); this.changeDuration(duration.getValue() * 2); TuxGuitar.instance().getFileHistory().setUnsavedFile(); this.updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void changeDuration(int value) { Caret caret = getEditor().getTablature().getCaret(); caret.getDuration().setValue(value); caret.getDuration().setDotted(false); caret.getDuration().setDoubleDotted(false); caret.changeDuration(caret.getDuration().clone(getSongManager().getFactory())); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetEighthDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetEighthDurationAction.jav0000644000175000017500000000347011273045225033463 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetEighthDurationAction extends Action{ public static final String NAME = "action.note.duration.set-eighth"; public static final int VALUE = TGDuration.EIGHTH; public SetEighthDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetHalfDurationAction.java0000644000175000017500000000346011273045225033265 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetHalfDurationAction extends Action{ public static final String NAME = "action.note.duration.set-half"; public static final int VALUE = TGDuration.HALF; public SetHalfDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetQuarterDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetQuarterDurationAction.ja0000644000175000017500000000347411273045225033514 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetQuarterDurationAction extends Action{ public static final String NAME = "action.note.duration.set-quarter"; public static final int VALUE = TGDuration.QUARTER; public SetQuarterDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixteenthDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixteenthDurationAction.0000644000175000017500000000350411273045225033523 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetSixteenthDurationAction extends Action{ public static final String NAME = "action.note.duration.set-sixteenth"; public static final int VALUE = TGDuration.SIXTEENTH; public SetSixteenthDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixtyFourthDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixtyFourthDurationActio0000644000175000017500000000351611273045225033627 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetSixtyFourthDurationAction extends Action{ public static final String NAME = "action.note.duration.set-sixty-fourth"; public static final int VALUE = TGDuration.SIXTY_FOURTH; public SetSixtyFourthDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetThirtySecondDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetThirtySecondDurationActi0000644000175000017500000000352211273045225033554 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetThirtySecondDurationAction extends Action{ public static final String NAME = "action.note.duration.set-thirty-second"; public static final int VALUE = TGDuration.THIRTY_SECOND; public SetThirtySecondDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetWholeDurationAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetWholeDurationAction.java0000644000175000017500000000346411273045225033475 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.duration; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetWholeDurationAction extends Action{ public static final String NAME = "action.note.duration.set-whole"; public static final int VALUE = TGDuration.WHOLE; public SetWholeDurationAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(getSelectedDuration().getValue() != VALUE){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSelectedDuration().setValue(VALUE); getSelectedDuration().setDotted(false); getSelectedDuration().setDoubleDotted(false); setDurations(); //termia el undoable addUndoableEdit(undoable.endUndo()); } return 0; } private void setDurations() { Caret caret = getEditor().getTablature().getCaret(); caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory())); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public TGDuration getSelectedDuration(){ return getEditor().getTablature().getCaret().getDuration(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/RedoAction.java0000644000175000017500000000200111273045225030210 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.CannotRedoException; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RedoAction extends Action{ public static final String NAME = "action.edit.redo"; public RedoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ try { if(TuxGuitar.instance().getUndoableManager().canRedo()){ TuxGuitar.instance().getUndoableManager().redo(); } } catch (CannotRedoException e1) { e1.printStackTrace(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeEditionAction.java0000644000175000017500000000161011273045225033211 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetMouseModeEditionAction extends Action{ public static final String NAME = "action.edit.set-mouse-mode-edition"; public SetMouseModeEditionAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE); } protected int execute(TypedEvent e){ getEditor().getTablature().getEditorKit().setMouseMode(EditorKit.MOUSE_MODE_EDITION); return 0; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeSelectionAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeSelectionAction.jav0000644000175000017500000000162011273045225033403 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetMouseModeSelectionAction extends Action{ public static final String NAME = "action.edit.set-mouse-mode-selection"; public SetMouseModeSelectionAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE); } protected int execute(TypedEvent e){ getEditor().getTablature().getEditorKit().setMouseMode(EditorKit.MOUSE_MODE_SELECTION); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetNaturalKeyAction.java0000644000175000017500000000152211273045225032061 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetNaturalKeyAction extends Action{ public static final String NAME = "action.edit.set-natural-key"; public SetNaturalKeyAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE); } protected int execute(TypedEvent e){ getEditor().getTablature().getEditorKit().setNatural(!getEditor().getTablature().getEditorKit().isNatural()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice1Action.java0000644000175000017500000000141211273045225031126 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetVoice1Action extends Action{ public static final String NAME = "action.edit.voice-1"; public SetVoice1Action() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ getEditor().getTablature().getCaret().setVoice(0); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice2Action.java0000644000175000017500000000141211273045225031127 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetVoice2Action extends Action{ public static final String NAME = "action.edit.voice-2"; public SetVoice2Action() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ getEditor().getTablature().getCaret().setVoice(1); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/UndoAction.java0000644000175000017500000000200111273045225030224 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.edit; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.CannotUndoException; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class UndoAction extends Action{ public static final String NAME = "action.edit.undo"; public UndoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ try { if(TuxGuitar.instance().getUndoableManager().canUndo()){ TuxGuitar.instance().getUndoableManager().undo(); } } catch (CannotUndoException e1) { e1.printStackTrace(); } return 0; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeAccentuatedNoteAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeAccentuatedNoteAction.0000644000175000017500000000275711273045225033345 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeAccentuatedNoteAction extends Action{ public static final String NAME = "action.note.effect.change-accentuated"; public ChangeAccentuatedNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeAccentuatedNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeBendNoteAction.java0000644000175000017500000000354511273045225032633 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.BendEditor; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectBend; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeBendNoteAction extends Action{ public static final String NAME = "action.note.effect.change-bend"; public ChangeBendNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ changeBend(new BendEditor().show(getEditor().getTablature().getShell(),note)); } return 0; } private void changeBend(TGEffectBend effect){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeBendNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeDeadNoteAction.java0000644000175000017500000000370711273045225032620 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeDeadNoteAction extends Action{ public static final String NAME = "action.note.effect.change-dead"; public ChangeDeadNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); TGNote note = caret.getSelectedNote(); if(note == null){ note = getSongManager().getFactory().newNote(); note.setValue(0); note.setVelocity(caret.getVelocity()); note.setString(caret.getSelectedString().getNumber()); TGDuration duration = getSongManager().getFactory().newDuration(); caret.getDuration().copy(duration); getSongManager().getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration,caret.getVoice()); } getSongManager().getMeasureManager().changeDeadNote(note); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeFadeInAction.java0000644000175000017500000000272011273045225032255 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeFadeInAction extends Action{ public static final String NAME = "action.note.effect.change-fade-in"; public ChangeFadeInAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeFadeIn(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGhostNoteAction.java0000644000175000017500000000272711273045225033050 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeGhostNoteAction extends Action{ public static final String NAME = "action.note.effect.change-ghost"; public ChangeGhostNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeGhostNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGraceNoteAction.java0000644000175000017500000000351111273045225032775 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.GraceEditor; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeGraceNoteAction extends Action{ public static final String NAME = "action.note.effect.change-grace"; public ChangeGraceNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ changeGrace(new GraceEditor().show(note)); } return 0; } private void changeGrace(TGEffectGrace effect){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeGraceNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHammerNoteAction.java0000644000175000017500000000273311273045225033172 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeHammerNoteAction extends Action{ public static final String NAME = "action.note.effect.change-hammer"; public ChangeHammerNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeHammerNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHarmonicNoteAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHarmonicNoteAction.jav0000644000175000017500000000354711273045225033364 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.HarmonicEditor; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeHarmonicNoteAction extends Action{ public static final String NAME = "action.note.effect.change-harmonic"; public ChangeHarmonicNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ changeHarmonic(new HarmonicEditor().show(note)); } return 0; } private void changeHarmonic(TGEffectHarmonic effect){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeHarmonicNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHeavyAccentuatedNoteAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHeavyAccentuatedNoteAc0000644000175000017500000000300411273045225033354 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeHeavyAccentuatedNoteAction extends Action{ public static final String NAME = "action.note.effect.change-heavy-accentuated"; public ChangeHeavyAccentuatedNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeHeavyAccentuatedNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePalmMuteAction.java0000644000175000017500000000273011273045225032654 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangePalmMuteAction extends Action{ public static final String NAME = "action.note.effect.change-palm-mute"; public ChangePalmMuteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changePalmMute(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePoppingAction.java0000644000175000017500000000272311273045225032546 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangePoppingAction extends Action{ public static final String NAME = "action.note.effect.change-popping"; public ChangePoppingAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changePopping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlappingAction.java0000644000175000017500000000272711273045225032713 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeSlappingAction extends Action{ public static final String NAME = "action.note.effect.change-slapping"; public ChangeSlappingAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeSlapping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlideNoteAction.java0000644000175000017500000000272711273045225033024 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeSlideNoteAction extends Action{ public static final String NAME = "action.note.effect.change-slide"; public ChangeSlideNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeSlideNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeStaccatoAction.java0000644000175000017500000000272711273045225032677 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeStaccatoAction extends Action{ public static final String NAME = "action.note.effect.change-staccato"; public ChangeStaccatoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeStaccato(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTappingAction.java0000644000175000017500000000272311273045225032534 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTappingAction extends Action{ public static final String NAME = "action.note.effect.change-tapping"; public ChangeTappingAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeTapping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloBarAction.java0000644000175000017500000000362611273045225033203 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.TremoloBarEditor; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTremoloBarAction extends Action{ public static final String NAME = "action.note.effect.change-tremolo-bar"; public ChangeTremoloBarAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ changeTremoloBar(new TremoloBarEditor().show(getEditor().getTablature().getShell(),note)); } return 0; } private void changeTremoloBar(TGEffectTremoloBar effect){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeTremoloBar(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloPickingAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloPickingAction.j0000644000175000017500000000363011273045225033366 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.TremoloPickingEditor; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTremoloPickingAction extends Action{ public static final String NAME = "action.note.effect.change-tremolo-picking"; public ChangeTremoloPickingAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ changeTremoloPicking(new TremoloPickingEditor().show(note)); } return 0; } private void changeTremoloPicking(TGEffectTremoloPicking effect){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeTremoloPicking(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTrillNoteAction.java0000644000175000017500000000351111273045225033042 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.TrillEditor; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTrillNoteAction extends Action{ public static final String NAME = "action.note.effect.change-trill"; public ChangeTrillNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ changeTrill(new TrillEditor().show(note)); } return 0; } private void changeTrill(TGEffectTrill effect){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeTrillNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeVibratoNoteAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeVibratoNoteAction.java0000644000175000017500000000273711273045225033373 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.effects; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeVibratoNoteAction extends Action{ public static final String NAME = "action.note.effect.change-vibrato"; public ChangeVibratoNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().getMeasureManager().changeVibratoNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExitAction.java0000644000175000017500000000151311273045225030231 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class ExitAction extends Action { public static final String NAME = "action.file.exit"; public ExitAction() { super(NAME, AUTO_LOCK | KEY_BINDING_AVAILABLE ); } protected int execute(TypedEvent e){ ActionLock.unlock(); TuxGuitar.instance().getShell().close(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExportSongAction.java0000644000175000017500000000525611273045225031440 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.io.base.TGRawExporter; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class ExportSongAction extends Action { public static final String NAME = "action.file.export"; public ExportSongAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE ); } protected int execute(TypedEvent e){ Object data = e.widget.getData(); if(! (data instanceof TGRawExporter) ){ return AUTO_UNLOCK; } final TGRawExporter exporter = (TGRawExporter)data; if( exporter instanceof TGLocalFileExporter ){ return this.processLocalFileExporter( (TGLocalFileExporter)exporter ); } return this.processRawExporter( exporter ); /* if(!exporter.configure(false)){ return AUTO_UNLOCK; } final String fileName = FileActionUtils.chooseFileName(exporter.getFileFormat()); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.exportSong(exporter, fileName); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); return 0; */ } private int processLocalFileExporter( final TGLocalFileExporter exporter ){ if(!exporter.configure(false)){ return AUTO_UNLOCK; } final String fileName = FileActionUtils.chooseFileName(exporter.getFileFormat()); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.exportSong(exporter, fileName); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); return 0; } private int processRawExporter( final TGRawExporter exporter ){ TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.exportSong(exporter); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/FileActionUtils.java0000644000175000017500000001547711273045225031236 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions.file; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.Iterator; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.FileChooser; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.io.base.TGFileFormat; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGOutputStreamBase; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.base.TGRawExporter; import org.herac.tuxguitar.io.base.TGRawImporter; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGSong; public class FileActionUtils { public static String getFileName(){ if (TuxGuitar.instance().getFileHistory().isNewFile() || !TuxGuitar.instance().getFileHistory().isLocalFile()) { return chooseFileName(); } String path = TuxGuitar.instance().getFileHistory().getCurrentFilePath(); String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME); String fullPath = path + File.separator + file; return ( isSupportedFormat(fullPath) ? fullPath : chooseFileName() ); } public static String chooseFileName(){ String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getOutputFormats()); if (fileName != null) { if (!isSupportedFormat(fileName)) { fileName += TGFileFormatManager.DEFAULT_EXTENSION; } if(!canWrite(fileName)){ return null; } } return fileName; } public static String chooseFileName(TGFileFormat format){ String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),format); if (fileName != null && !canWrite(fileName)){ return null; } return fileName; } public static boolean isSupportedFormat(String path) { if(path != null){ int index = path.lastIndexOf("."); if(index > 0){ Iterator it = TGFileFormatManager.instance().getOutputStreams(); while(it.hasNext()){ TGOutputStreamBase writer = (TGOutputStreamBase)it.next(); if(writer.isSupportedExtension(path.substring(index))){ return true; } } } } return false; } public static boolean canWrite(String fileName){ boolean canWrite = true; File file = new File(fileName); if (file.exists()) { ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.overwrite-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_NO ); if (confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO , ConfirmDialog.BUTTON_NO ) == ConfirmDialog.STATUS_NO) { canWrite = false; } } return canWrite; } public static void open(final String fileName){ try { TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),new FileInputStream(fileName)); TuxGuitar.instance().fireNewSong(song,new File(fileName).toURI().toURL()); }catch (Throwable throwable) { TuxGuitar.instance().newSong(); MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{fileName}),throwable)); } } public static void save(final String fileName){ try { TGSongManager manager = TuxGuitar.instance().getSongManager(); TGFileFormatManager.instance().getWriter().write(manager.getFactory(),manager.getSong(), fileName); TuxGuitar.instance().fireSaveSong(new File(fileName).toURI().toURL()); } catch (Throwable throwable) { MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.save.error", new String[]{fileName}),throwable)); } } public static void open(final URL url){ try { InputStream stream = (isLocalFile(url) ? url.openStream() : getInputStream(url.openStream())); TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream); TuxGuitar.instance().fireNewSong(song,url); }catch (Throwable throwable) { TuxGuitar.instance().newSong(); MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{url.toString()}),throwable)); } } public static void exportSong(TGRawExporter exporter){ try { TGSongManager manager = TuxGuitar.instance().getSongManager(); exporter.exportSong(manager.getSong()); } catch (Throwable throwable) { MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error"),throwable)); } } public static void exportSong(TGLocalFileExporter exporter, String path){ try { OutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(path))); TGSongManager manager = TuxGuitar.instance().getSongManager(); exporter.init( manager.getFactory() , stream ); exporter.exportSong(manager.getSong()); } catch (Throwable throwable) { MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error", new String[]{path}),throwable)); } } public static void importSong(final TGRawImporter importer){ try { TGSong song = importer.importSong(); TuxGuitar.instance().fireNewSong(song,null); }catch (Throwable throwable) { TuxGuitar.instance().newSong(); MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error"),throwable)); } } public static void importSong(final TGLocalFileImporter importer, String path){ try { InputStream stream = new BufferedInputStream(new FileInputStream(new File(path))); importer.init(TuxGuitar.instance().getSongManager().getFactory(),stream); TGSong song = importer.importSong(); TuxGuitar.instance().fireNewSong(song,null); }catch (Throwable throwable) { TuxGuitar.instance().newSong(); MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error", new String[]{path}),throwable)); } } private static boolean isLocalFile(URL url){ try { if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){ return true; } }catch(Throwable throwable){ throwable.printStackTrace(); } return false; } private static InputStream getInputStream(InputStream in)throws Throwable { ByteArrayOutputStream out = new ByteArrayOutputStream(); int read = 0; while((read = in.read()) != -1){ out.write(read); } byte[] bytes = out.toByteArray(); in.close(); out.close(); out.flush(); return new ByteArrayInputStream(bytes); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ImportSongAction.java0000644000175000017500000000713111273045225031423 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import java.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.FileChooser; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.base.TGRawImporter; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class ImportSongAction extends Action { public static final String NAME = "action.file.import"; public ImportSongAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE); } protected int execute(final TypedEvent event){ TuxGuitar.instance().getPlayer().reset(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ return AUTO_UNLOCK; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); processImporter(event.widget.getData()); } } }).start(); } } }).start(); return 0; } } processImporter(event.widget.getData()); return 0; } protected void processImporter(Object importer){ if( importer instanceof TGLocalFileImporter ){ this.processLocalFileImporter( (TGLocalFileImporter)importer ); }else if( importer instanceof TGRawImporter ){ this.processRawImporter( (TGRawImporter)importer ); } } private void processLocalFileImporter(final TGLocalFileImporter importer){ final String path = FileChooser.instance().open(TuxGuitar.instance().getShell(),importer.getFileFormat()); if(!isValidFile(path) || !importer.configure(false)){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.importSong(importer, path); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } private void processRawImporter( final TGRawImporter importer ){ TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.importSong(importer); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } protected boolean isValidFile( String path ){ if( path != null ){ File file = new File( path ); return ( file.exists() && file.isFile() ); } return false; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/NewFileAction.java0000644000175000017500000000441111273045225030651 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.util.ConfirmDialog; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class NewFileAction extends Action{ public static final String NAME = "action.file.new"; public NewFileAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ return AUTO_UNLOCK; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ newSong(); } } }).start(); } } }).start(); return 0; } } newSong(); return 0; } protected void newSong(){ TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().newSong(); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenFileAction.java0000644000175000017500000000663411273045225031032 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import java.io.File; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.FileChooser; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class OpenFileAction extends Action { public static final String NAME = "action.file.open"; public OpenFileAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(final TypedEvent event){ TuxGuitar.instance().getPlayer().reset(); final Object data = event.widget.getData(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ return AUTO_UNLOCK; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); openFile( data ); } } }).start(); } } }).start(); return 0; } } openFile( data ); return 0; } protected void openFile(Object data){ final URL url = getOpenFileName(data); if(url == null){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.open(url); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } }); } catch (Throwable e) { e.printStackTrace(); } } protected URL getOpenFileName(Object data){ try{ if(data instanceof URL){ TuxGuitar.instance().getFileHistory().setChooserPath( (URL)data ); return (URL)data; } String path = FileChooser.instance().open(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getInputFormats()); if(path != null){ File file = new File(path); if( file.exists() && file.isFile() ){ return file.toURI().toURL(); } } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenURLAction.java0000644000175000017500000001315511273045225030611 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class OpenURLAction extends Action { public static final String NAME = "action.file.open-url"; public OpenURLAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(final TypedEvent event){ TuxGuitar.instance().getPlayer().reset(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ return AUTO_UNLOCK; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); openURL(event.widget.getData()); } } }).start(); } } }).start(); return 0; } } openURL(event.widget.getData()); return 0; } protected void openURL(Object data){ final URL url = getURL(data); if(url == null){ ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.open(url); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } protected URL getURL(Object data){ if(data instanceof URL){ return (URL)data; } return new URLDialog().openDialog(); } protected class URLDialog{ protected URL url; protected URL openDialog(){ this.url = null; final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("file.open-url")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("file.open-url")); Composite composite = new Composite(group, SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(getMainData()); final Label label = new Label(composite,SWT.LEFT); label.setText(TuxGuitar.getProperty("url") + ":"); label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Text url = new Text(composite,SWT.BORDER | SWT.SINGLE); url.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { try { URLDialog.this.url = new URL(url.getText()); dialog.dispose(); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.url; } private GridData getMainData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 450; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintAction.java0000644000175000017500000001545711273045225030430 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.printer.PrintDocument; import org.herac.tuxguitar.gui.printer.PrintStyles; import org.herac.tuxguitar.gui.printer.PrintStylesDialog; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class PrintAction extends Action{ public static final String NAME = "action.file.print"; public PrintAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ try{ final PrintStyles data = PrintStylesDialog.open(TuxGuitar.instance().getShell()); if(data != null){ PrintDialog dialog = new PrintDialog(TuxGuitar.instance().getShell(), SWT.NULL); PrinterData printerData = dialog.open(); if (printerData != null) { TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); this.print(printerData, data); } } }catch(Throwable throwable ){ MessageDialog.errorMessage(throwable); } return 0; } public void print(final PrinterData printerData ,final PrintStyles data){ try{ new Thread(new Runnable() { public void run() { try{ final TGSongManager manager = new TGSongManager(); manager.setFactory(new TGFactoryImpl()); manager.setSong(getSongManager().getSong().clone(manager.getFactory())); new SyncThread(new Runnable() { public void run() { try{ Shell shell = new Shell(); Printer printer = new Printer(printerData); Tablature tablature = new Tablature(shell); tablature.setSongManager(manager); Rectangle bounds = getPrinterArea(printer,0.5); PrinterViewLayout layout = new PrinterViewLayout(tablature,data, getPrinterScale(printer)); print(printer, printerData, layout , bounds); }catch(Throwable throwable ){ MessageDialog.errorMessage(throwable); } } }).start(); }catch(Throwable throwable ){ MessageDialog.errorMessage(throwable); } } }).start(); }catch(Throwable throwable ){ MessageDialog.errorMessage(throwable); } } protected void print(final Printer printer,final PrinterData printerData ,final PrinterViewLayout layout, final Rectangle bounds){ new Thread(new Runnable() { public void run() { try{ layout.getTablature().updateTablature(); layout.makeDocument(new PrintDocumentImpl(layout,printer, printerData, bounds)); //new SyncThread(new Runnable() { // public void run() { // try{ // layout.makeDocument(new PrintDocumentImpl(layout,printer, bounds)); // }catch(Throwable throwable ){ // MessageDialog.errorMessage(throwable); // } // } //}).start(); }catch(Throwable throwable ){ MessageDialog.errorMessage(throwable); } } }).start(); } protected Rectangle getPrinterArea(Printer printer,double margin) { Rectangle clientArea = printer.getClientArea(); Rectangle trim = printer.computeTrim(0, 0, 0, 0); Point dpi = printer.getDPI(); int x = (int) (margin * dpi.x) - trim.x; int y = (int) (margin * dpi.y) - trim.y; int width = clientArea.width + trim.width - (int) (margin * dpi.x) - trim.x; int height = clientArea.height + trim.height - (int) (margin * dpi.y) - trim.y; return new Rectangle(x,y,width,height); } protected float getPrinterScale(Printer printer) { Point dpi = printer.getDPI(); if( dpi != null ){ return ( dpi.x / 100.0f ); } return 1.0f; } private class PrintDocumentImpl implements PrintDocument{ private Printer printer; private PrinterData printerData; private PrinterViewLayout layout; private TGPainter painter; private Rectangle bounds; private boolean started; public PrintDocumentImpl(PrinterViewLayout layout, Printer printer,PrinterData printerData, Rectangle bounds){ this.layout = layout; this.printer = printer; this.printerData = printerData; this.bounds = bounds; this.painter = new TGPainter(); } public TGPainter getPainter() { return this.painter; } public Rectangle getBounds(){ return this.bounds; } public void pageStart() { if(this.started){ this.printer.startPage(); this.painter.init(new GC(this.printer)); } } public void pageFinish() { if(this.started){ this.painter.dispose(); this.printer.endPage(); } } public void start() { this.started = this.printer.startJob(getJobName()); } public void finish() { if(this.started){ this.printer.endJob(); this.started = false; try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable(){ public void run() { dispose(); } }); } catch (Throwable e) { e.printStackTrace(); } TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); } } public boolean isPaintable(int page){ if(this.printerData.scope == PrinterData.PAGE_RANGE){ if(this.printerData.startPage > 0 && this.printerData.startPage > page){ return false; } if(this.printerData.endPage > 0 && this.printerData.endPage < page){ return false; } } return true; } public String getJobName(){ String prefix = TuxGuitar.APPLICATION_NAME; String song = this.layout.getSongManager().getSong().getName(); return ( song != null && song.length() > 0 ? (prefix + "-" + song) : prefix ); } public void dispose(){ if(!this.printer.isDisposed()){ this.printer.dispose(); } if(!this.layout.getTablature().isDisposed() && !this.layout.getTablature().getShell().isDisposed()){ this.layout.getTablature().getShell().dispose(); } if(!this.layout.getTablature().isDisposed()){ this.layout.getTablature().dispose(); } } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintPreviewAction.java0000644000175000017500000001147511273045225031766 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.printer.PrintDocument; import org.herac.tuxguitar.gui.printer.PrintPreview; import org.herac.tuxguitar.gui.printer.PrintStyles; import org.herac.tuxguitar.gui.printer.PrintStylesDialog; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class PrintPreviewAction extends Action{ public static final String NAME = "action.file.print-preview"; public PrintPreviewAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ try{ final PrintStyles data = PrintStylesDialog.open(TuxGuitar.instance().getShell()); if(data != null){ TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); this.printPreview(data); } }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } return 0; } public void printPreview(final PrintStyles data){ new Thread(new Runnable() { public void run() { try{ final TGSongManager manager = new TGSongManager(); manager.setFactory(new TGFactoryImpl()); manager.setSong(getSongManager().getSong().clone(manager.getFactory())); printPreview(manager,data); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } }).start(); } public void printPreview(final TGSongManager manager, final PrintStyles data){ new SyncThread(new Runnable() { public void run() { try{ Tablature tablature = new Tablature(TuxGuitar.instance().getShell()); tablature.setSongManager(manager); PrinterViewLayout layout = new PrinterViewLayout(tablature,data, 1f); printPreview( layout ); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } }).start(); } public void printPreview(final PrinterViewLayout layout){ new Thread(new Runnable() { public void run() { try{ layout.getTablature().updateTablature(); layout.makeDocument(new PrintDocumentImpl(layout, new Rectangle(0,0,850,1050))); //new SyncThread(new Runnable() { // public void run() { // layout.makeDocument(new PrintDocumentImpl(layout, new Rectangle(0,0,850,1050))); // } //}).start(); }catch(Throwable throwable){ MessageDialog.errorMessage(throwable); } } }).start(); } private class PrintDocumentImpl implements PrintDocument{ private PrinterViewLayout layout; private TGPainter painter; private Rectangle bounds; private List pages; public PrintDocumentImpl(PrinterViewLayout layout, Rectangle bounds){ this.layout = layout; this.bounds = bounds; this.painter = new TGPainter(); this.pages = new ArrayList(); } public TGPainter getPainter() { return this.painter; } public Rectangle getBounds(){ return this.bounds; } public void pageStart() { Image page = new Image(this.layout.getTablature().getDisplay(),this.bounds.width - this.bounds.x, this.bounds.height - this.bounds.y); this.painter.init( page ); this.pages.add( page ); } public void pageFinish() { this.painter.dispose(); } public void start() { // Not implemented } public void finish() { final Tablature tablature = this.layout.getTablature(); final Rectangle bounds = this.bounds; final List pages = this.pages; try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable(){ public void run() { tablature.dispose(); PrintPreview preview = new PrintPreview(pages,bounds); preview.showPreview(getEditor().getTablature().getShell()); Iterator it = pages.iterator(); while(it.hasNext()){ Image image = (Image)it.next(); image.dispose(); } } }); } catch (Throwable e) { e.printStackTrace(); } } public boolean isPaintable(int page) { return true; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveAsFileAction.java0000644000175000017500000000231611273045225031304 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class SaveAsFileAction extends Action { public static final String NAME = "action.file.save-as"; public SaveAsFileAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE ); } protected int execute(TypedEvent e){ final String fileName = FileActionUtils.chooseFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveFileAction.java0000644000175000017500000000230511273045225031016 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.file; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SaveFileAction extends Action{ public static final String NAME = "action.file.save"; public SaveFileAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE ); } protected int execute(TypedEvent e){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowAboutAction.java0000644000175000017500000000172511273045225031251 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.help; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Canvas; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.help.about.AboutDialog; /** * @author julian * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class ShowAboutAction extends Action { public static final String NAME = "action.help.about"; protected Canvas imageCanvas; protected Image tabImage; public ShowAboutAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK); } protected int execute(TypedEvent e){ new AboutDialog().open(TuxGuitar.instance().getShell()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowDocAction.java0000644000175000017500000000165211273045225030703 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.help; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.help.doc.TGDocumentation; import org.herac.tuxguitar.gui.util.MessageDialog; /** * @author julian * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class ShowDocAction extends Action { public static final String NAME = "action.help.doc"; public ShowDocAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | KEY_BINDING_AVAILABLE ); } protected int execute(TypedEvent e){ try { new TGDocumentation().display(); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertChordAction.java0000644000175000017500000001014711273045225032134 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.insert; import java.util.Iterator; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.chord.ChordDialog; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class InsertChordAction extends Action { public static final String NAME = "action.insert.chord"; public InsertChordAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGTrackImpl track = caret.getTrack(); TGMeasureImpl measure = caret.getMeasure(); TGBeat beat = caret.getSelectedBeat(); if (track != null && measure != null && beat != null) { //Si el acorde llego en el data del widget solo lo agrego if(e.widget.getData() instanceof TGChord){ TGChord chord = ((TGChord)e.widget.getData()).clone(getSongManager().getFactory()); insertChord(chord, track, measure, beat, caret.getVoice()); } //sino muestro el editor de acordes else{ Shell shell = TuxGuitar.instance().getShell(); ChordDialog dialog = new ChordDialog(); int result = dialog.open(shell, measure,beat, caret.getPosition()); if( result == ChordDialog.RESULT_SAVE ){ insertChord(dialog.getChord(), track, measure, beat, caret.getVoice()); } else if( result == ChordDialog.RESULT_CLEAN ){ removeChord( measure, beat); } } } return 0; } protected void insertChord(TGChord chord, TGTrackImpl track, TGMeasureImpl measure, TGBeat beat, int voiceIndex) { boolean restBeat = beat.isRestBeat(); if(!restBeat || chord.countNotes() > 0 ) { //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); // Add the chord notes to the tablature // Only if this is a "rest" beat TGVoice voice = beat.getVoice(voiceIndex); if( restBeat ){ Iterator it = track.getStrings().iterator(); while (it.hasNext()) { TGString string = (TGString) it.next(); int value = chord.getFretValue(string.getNumber() - 1); if (value >= 0) { TGNote note = getSongManager().getFactory().newNote(); note.setValue(value); note.setVelocity(getEditor().getTablature().getCaret().getVelocity()); note.setString(string.getNumber()); TGDuration duration = getSongManager().getFactory().newDuration(); voice.getDuration().copy(duration); getSongManager().getMeasureManager().addNote(beat,note,duration,voice.getIndex()); } } } getSongManager().getMeasureManager().addChord(beat, chord); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(measure.getNumber()); //termia el undoable addUndoableEdit(undoable.endUndo()); } } protected void removeChord(TGMeasureImpl measure, TGBeat beat) { if( beat.isChordBeat() ){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSongManager().getMeasureManager().removeChord(measure, beat.getStart()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); fireUpdate(measure.getNumber()); //termia el undoable addUndoableEdit(undoable.endUndo()); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertTextAction.java0000644000175000017500000001213311273045225032016 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.insert; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGText; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class InsertTextAction extends Action { public static final String NAME = "action.insert.text"; public InsertTextAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ final TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat(); showInsertDialog(beat,(beat.getText() == null?new String():beat.getText().getValue())); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public void showInsertDialog(final TGBeat beat,String value) { final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("text.editor")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("text.insert")); Composite composite = new Composite(group, SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(getMainData()); final Label label = new Label(composite,SWT.LEFT); label.setText(TuxGuitar.getProperty("text.text") + ":"); label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Text text = new Text(composite,SWT.BORDER | SWT.SINGLE); text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); text.setText(value); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { insertText(beat,text.getText()); dialog.dispose(); } }); final Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { removeText(beat); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridData getMainData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 300; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void insertText(TGBeat beat,String value) { //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGText text = getSongManager().getFactory().newText(); text.setValue(value); getSongManager().getMeasureManager().addText(beat, text); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } protected void removeText(TGBeat beat) { //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSongManager().getMeasureManager().removeText(beat); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatAlternativeAction.java0000644000175000017500000001523611273045225033333 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.insert; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeAlternativeRepeat; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeCloseRepeat; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RepeatAlternativeAction extends Action{ public static final String NAME = "action.insert.repeat-alternative"; public RepeatAlternativeAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGMeasure measure = getEditor().getTablature().getCaret().getMeasure(); showCloseRepeatDialog(getEditor().getTablature().getShell(), measure); return 0; } public void showCloseRepeatDialog(Shell shell, final TGMeasure measure) { if (measure != null) { int existentEndings = getExistentEndings(measure); int selectedEndings = (measure.getHeader().getRepeatAlternative() > 0)?measure.getHeader().getRepeatAlternative():getDefaultEndings(existentEndings); final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("repeat.alternative.editor")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(4,true)); group.setLayoutData(getMainData()); group.setText(TuxGuitar.getProperty("repeat.alternative")); final Button[] selections = new Button[8]; for(int i = 0; i < selections.length; i ++){ boolean enabled = ((existentEndings & (1 << i)) == 0); selections[i] = new Button(group,SWT.CHECK); selections[i].setText(Integer.toString( i + 1 )); selections[i].setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); selections[i].setEnabled(enabled); selections[i].setSelection(enabled && ((selectedEndings & (1 << i)) != 0) ); } //----------------------BUTTONS-------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int values = 0; for(int i = 0; i < selections.length; i ++){ values |= ( (selections[i].getSelection()) ? (1 << i) : 0 ); } update(measure,values); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { update(measure,0); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getMainData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 350; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected int getExistentEndings(TGMeasure measure){ int existentEndings = 0; Iterator it = getSongManager().getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); if(header.getNumber() == measure.getNumber()){ break; } if(header.isRepeatOpen()){ existentEndings = 0; } existentEndings |= header.getRepeatAlternative(); } return existentEndings; } protected int getDefaultEndings(int existentEndings){ for(int i = 0; i < 8; i ++){ if((existentEndings & (1 << i)) == 0){ return (1 << i); } } return -1; } protected void update(TGMeasure measure, int value) { //Solo si hubieron cambios if(value != measure.getHeader().getRepeatAlternative()){ //Si no estoy editando, y la alternativa no contiene el primer final, //por defecto se cierra la repeticion del compas anterior boolean previousRepeatClose = (measure.getHeader().getRepeatAlternative() == 0 && ((value & (1 << 0)) == 0)) ; //comienza el undoable UndoableJoined undoable = new UndoableJoined(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //Guardo la repeticion alternativa UndoableChangeAlternativeRepeat u1 = UndoableChangeAlternativeRepeat.startUndo(); getSongManager().changeAlternativeRepeat(measure.getStart(), value); fireUpdate(measure.getNumber()); undoable.addUndoableEdit(u1.endUndo(value)); if(previousRepeatClose){ //Agrego un cierre de repeticion al compaz anterior TGMeasureHeader previous = getSongManager().getMeasureHeader( measure.getNumber() - 1); if(previous != null && previous.getRepeatClose() == 0){ UndoableChangeCloseRepeat u2 = UndoableChangeCloseRepeat.startUndo(previous.getStart(),previous.getRepeatClose()); getSongManager().changeCloseRepeat(previous.getStart(), 1); fireUpdate(previous.getNumber()); undoable.addUndoableEdit(u2.endUndo(1)); } } //termia el undoable addUndoableEdit(undoable.endUndo()); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatCloseAction.java0000644000175000017500000001156011273045225032116 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.insert; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeCloseRepeat; import org.herac.tuxguitar.gui.util.DialogUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RepeatCloseAction extends Action{ public static final String NAME = "action.insert.close-repeat"; public RepeatCloseAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); showCloseRepeatDialog(getEditor().getTablature().getShell(), measure); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } public void showCloseRepeatDialog(Shell shell, final TGMeasureImpl measure) { if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("repeat.close")); int currentRepeatClose = measure.getRepeatClose(); if (currentRepeatClose < 1) { currentRepeatClose = 1; } Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("repeat.close")); Label repeatCloseLabel = new Label(group, SWT.NULL); repeatCloseLabel.setText(TuxGuitar.getProperty("repeat.number-of-repetitions")); final Spinner repeatClose = new Spinner(group, SWT.BORDER); repeatClose.setMinimum(0); repeatClose.setMaximum(100); repeatClose.setSelection(currentRepeatClose); repeatClose.setLayoutData(getSpinnerData()); //----------------------BUTTONS-------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { closeRepeat(measure,repeatClose.getSelection()); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { closeRepeat(measure,0); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 100; return data; } protected void closeRepeat(TGMeasureImpl measure, int repeatClose) { if(repeatClose >= 0){ //comienza el undoable UndoableChangeCloseRepeat undoable = UndoableChangeCloseRepeat.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //numberOfRepetitions = Math.abs(numberOfRepetitions); getSongManager().changeCloseRepeat(measure.getStart(), repeatClose); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo(repeatClose)); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatOpenAction.java0000644000175000017500000000263511273045225031755 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.insert; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeOpenRepeat; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RepeatOpenAction extends Action{ public static final String NAME = "action.insert.open-repeat"; public RepeatOpenAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableChangeOpenRepeat undoable = UndoableChangeOpenRepeat.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); getSongManager().changeOpenRepeat(measure.getStart()); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordDiagramEnabledAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordDiagramEnabledAction.0000644000175000017500000000175511273045225033337 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetChordDiagramEnabledAction extends Action{ public static final String NAME = "action.view.layout-set-chord-diagram-enabled"; public SetChordDiagramEnabledAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ ViewLayout layout = getEditor().getTablature().getViewLayout(); layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_CHORD_DIAGRAM) ); updateTablature(); return 0; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordNameEnabledAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordNameEnabledAction.jav0000644000175000017500000000174211273045225033350 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetChordNameEnabledAction extends Action{ public static final String NAME = "action.view.layout-set-chord-name-enabled"; public SetChordNameEnabledAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ ViewLayout layout = getEditor().getTablature().getViewLayout(); layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_CHORD_NAME ) ); updateTablature(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetCompactViewAction.java0000644000175000017500000000171211273045225032614 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetCompactViewAction extends Action{ public static final String NAME = "action.view.layout-set-compact"; public SetCompactViewAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ ViewLayout layout = getEditor().getTablature().getViewLayout(); layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_COMPACT ) ); updateTablature(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetLinearLayoutAction.java0000644000175000017500000000202111273045225032775 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetLinearLayoutAction extends Action{ public static final String NAME = "action.view.layout-set-linear"; public SetLinearLayoutAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Tablature tablature = getEditor().getTablature(); tablature.setViewLayout(new LinearViewLayout(tablature,tablature.getViewLayout().getStyle())); updateTablature(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetMultitrackViewAction.java0000644000175000017500000000172611273045225033352 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetMultitrackViewAction extends Action{ public static final String NAME = "action.view.layout-set-multitrack"; public SetMultitrackViewAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ ViewLayout layout = getEditor().getTablature().getViewLayout(); layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_MULTITRACK ) ); updateTablature(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetPageLayoutAction.java0000644000175000017500000000200711273045225032443 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetPageLayoutAction extends Action{ public static final String NAME = "action.view.layout-set-page"; public SetPageLayoutAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Tablature tablature = getEditor().getTablature(); tablature.setViewLayout(new PageViewLayout(tablature,tablature.getViewLayout().getStyle())); updateTablature(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetScoreEnabledAction.java0000644000175000017500000000222611273045225032722 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetScoreEnabledAction extends Action{ public static final String NAME = "action.view.layout-set-score-enabled"; public SetScoreEnabledAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ ViewLayout layout = getEditor().getTablature().getViewLayout(); layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_SCORE ) ); if((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){ layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_TABLATURE) ); } updateTablature(); return 0; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetTablatureEnabledAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetTablatureEnabledAction.jav0000644000175000017500000000224311273045225033430 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.layout; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetTablatureEnabledAction extends Action{ public static final String NAME = "action.view.layout-set-tablature-enabled"; public SetTablatureEnabledAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ ViewLayout layout = getEditor().getTablature().getViewLayout(); layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_TABLATURE ) ); if((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){ layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_SCORE ) ); } updateTablature(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/AddMarkerAction.java0000644000175000017500000000263011273045224031514 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.marker; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.marker.MarkerEditor; import org.herac.tuxguitar.gui.marker.MarkerList; import org.herac.tuxguitar.song.models.TGMarker; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AddMarkerAction extends Action{ public static final String NAME = "action.marker.add"; public AddMarkerAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(new MarkerEditor(getMarker()).open(getEditor().getTablature().getShell())){ MarkerList.instance().update(true); } return 0; } private TGMarker getMarker(){ TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { TGMarker marker = getSongManager().getMarker(measure.getNumber()); if(marker == null){ marker = getSongManager().getFactory().newMarker(); marker.setMeasure(measure.getNumber()); } return marker; } return null; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoFirstMarkerAction.java0000644000175000017500000000152311273045224032401 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.marker; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.marker.MarkerNavigator; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoFirstMarkerAction extends Action{ public static final String NAME = "action.marker.go-first"; public GoFirstMarkerAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ new MarkerNavigator().goToSelectedMarker(getSongManager().getFirstMarker()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoLastMarkerAction.java0000644000175000017500000000151711273045224032220 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.marker; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.marker.MarkerNavigator; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoLastMarkerAction extends Action{ public static final String NAME = "action.marker.go-last"; public GoLastMarkerAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ new MarkerNavigator().goToSelectedMarker(getSongManager().getLastMarker()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoNextMarkerAction.java0000644000175000017500000000176211273045224032235 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.marker; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.marker.MarkerNavigator; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoNextMarkerAction extends Action{ public static final String NAME = "action.marker.go-next"; public GoNextMarkerAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE ); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); new MarkerNavigator().goToSelectedMarker(getSongManager().getNextMarker(caret.getMeasure().getNumber())); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoPreviousMarkerAction.java0000644000175000017500000000200111273045224033116 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.marker; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.marker.MarkerNavigator; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoPreviousMarkerAction extends Action{ public static final String NAME = "action.marker.go-previous"; public GoPreviousMarkerAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); new MarkerNavigator().goToSelectedMarker(getSongManager().getPreviousMarker(caret.getMeasure().getNumber())); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/ListMarkersAction.java0000644000175000017500000000156311273045224032126 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.marker; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.marker.MarkerList; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ListMarkersAction extends Action{ public static final String NAME = "action.marker.list"; public ListMarkersAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ if(MarkerList.instance().isDisposed()){ MarkerList.instance().show(); } else{ MarkerList.instance().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/AddMeasureAction.java0000644000175000017500000001420311273045225032054 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure; import org.herac.tuxguitar.gui.util.DialogUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AddMeasureAction extends Action{ public static final String NAME = "action.measure.add"; public AddMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(); return 0; } public void showDialog() { if (getEditor().getTablature().getCaret().getMeasure() != null) { final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("measure.add")); //-----------------COUNT------------------------ Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("measure.add")); Label countLabel = new Label(group, SWT.NULL); countLabel.setText(TuxGuitar.getProperty("measure.add.count")); final Spinner countSpinner = new Spinner(group, SWT.BORDER); countSpinner.setLayoutData(getSpinnerData()); countSpinner.setMinimum( 1 ); countSpinner.setMaximum( 100 ); countSpinner.setSelection( 1 ); //---------------------------------------------------------------------- Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN); options.setLayout(new GridLayout()); options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); options.setText(TuxGuitar.getProperty("options")); final Button beforePosition = new Button(options,SWT.RADIO); beforePosition.setText(TuxGuitar.getProperty("measure.add-before-current-position")); final Button afterPosition = new Button(options,SWT.RADIO); afterPosition.setText(TuxGuitar.getProperty("measure.add-after-current-position")); final Button atEnd = new Button(options,SWT.RADIO); atEnd.setText(TuxGuitar.getProperty("measure.add-at-end")); atEnd.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int number = 0; int count = countSpinner.getSelection(); if(beforePosition.getSelection()){ number = (getEditor().getTablature().getCaret().getMeasure().getNumber()); }else if(afterPosition.getSelection()){ number = (getEditor().getTablature().getCaret().getMeasure().getNumber() + 1); }else if(atEnd.getSelection()){ number = (getSongManager().getSong().countMeasureHeaders() + 1); } addMeasure(number, count); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 150; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private void addMeasure( final int number , final int count ){ if(count > 0 && number > 0 && number <= (getSongManager().getSong().countMeasureHeaders() + 1)){ new Thread(new Runnable() { public void run() { new SyncThread(new Runnable() { public void run() { UndoableJoined undoable = new UndoableJoined(); for( int i = 0 ; i < count ; i ++ ){ //comienza el undoable UndoableAddMeasure mUndoable = UndoableAddMeasure.startUndo( ( number + i ) ); getSongManager().addNewMeasure( ( number + i ) ); //termia el undoable undoable.addUndoableEdit(mUndoable.endUndo()); } updateTablature(); int trackNumber = getEditor().getTablature().getCaret().getTrack().getNumber(); int stringNumber = getEditor().getTablature().getCaret().getStringNumber(); long start = getSongManager().getMeasureHeader(number).getStart(); getEditor().getTablature().getCaret().update(trackNumber,start,stringNumber); //termia el undoable addUndoableEdit( undoable.endUndo() ); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().updateCache(true); } }).start(); } }).start(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CleanMeasureAction.java0000644000175000017500000001432511273045225032413 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGMeasure; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CleanMeasureAction extends Action{ public static final String NAME = "action.measure.clean"; public CleanMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(TuxGuitar.instance().getShell()); return 0; } public void showDialog(Shell shell) { TGTrackImpl track = getEditor().getTablature().getCaret().getTrack(); TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("measure.clean")); //---------------------------------------------------------------------- Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN); range.setLayout(new GridLayout(2,false)); range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); range.setText(TuxGuitar.getProperty("measure.clean")); int measureCount = getSongManager().getSong().countMeasureHeaders(); Label fromLabel = new Label(range, SWT.NULL); fromLabel.setText(TuxGuitar.getProperty("edit.from")); final Spinner fromSpinner = new Spinner(range, SWT.BORDER); fromSpinner.setLayoutData(getSpinnerData()); fromSpinner.setMinimum(1); fromSpinner.setMaximum(measureCount); fromSpinner.setSelection(measure.getNumber()); Label toLabel = new Label(range, SWT.NULL); toLabel.setText(TuxGuitar.getProperty("edit.to")); final Spinner toSpinner = new Spinner(range, SWT.BORDER); toSpinner.setLayoutData(getSpinnerData()); toSpinner.setMinimum(1); toSpinner.setMaximum(measureCount); toSpinner.setSelection(measure.getNumber()); final int minSelection = 1; final int maxSelection = track.countMeasures(); fromSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int fromSelection = fromSpinner.getSelection(); int toSelection = toSpinner.getSelection(); if(fromSelection < minSelection){ fromSpinner.setSelection(minSelection); }else if(fromSelection > toSelection){ fromSpinner.setSelection(toSelection); } } }); toSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int toSelection = toSpinner.getSelection(); int fromSelection = fromSpinner.getSelection(); if(toSelection < fromSelection){ toSpinner.setSelection(fromSelection); }else if(toSelection > maxSelection){ toSpinner.setSelection(maxSelection); } } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { cleanMeasures(fromSpinner.getSelection(),toSpinner.getSelection()); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 180; return data; } public void cleanMeasures(int m1,int m2){ if(m1 > 0 && m1 <= m2){ //comienza el undoable UndoableJoined undoable = new UndoableJoined(); Caret caret = getEditor().getTablature().getCaret(); for( int number = m1 ; number <= m2 ; number ++ ){ TGMeasure measure = getSongManager().getTrackManager().getMeasure( caret.getTrack() , number ); if( measure != null ){ //comienza el undoable UndoableMeasureGeneric mUndoable = UndoableMeasureGeneric.startUndo( measure ); getSongManager().getMeasureManager().cleanMeasure( measure ); //termia el undoable undoable.addUndoableEdit( mUndoable.endUndo( measure ) ); } } //termia el undoable if( ! undoable.isEmpty()){ addUndoableEdit(undoable.endUndo()); } TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CopyMeasureAction.java0000644000175000017500000001443111273045225032301 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.clipboard.MeasureTransferable; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.util.DialogUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CopyMeasureAction extends Action{ public static final String NAME = "action.measure.copy"; protected boolean copyAllTracks; public CopyMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGTrackImpl track = getEditor().getTablature().getCaret().getTrack(); TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("edit.copy")); //---------------------------------------------------------------------- Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN); range.setLayout(new GridLayout(2,false)); range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); range.setText(TuxGuitar.getProperty("edit.copy")); int measureCount = getSongManager().getSong().countMeasureHeaders(); Label fromLabel = new Label(range, SWT.NULL); fromLabel.setText(TuxGuitar.getProperty("edit.from")); final Spinner fromSpinner = new Spinner(range, SWT.BORDER); fromSpinner.setLayoutData(getSpinnerData()); fromSpinner.setMinimum(1); fromSpinner.setMaximum(measureCount); fromSpinner.setSelection(measure.getNumber()); Label toLabel = new Label(range, SWT.NULL); toLabel.setText(TuxGuitar.getProperty("edit.to")); final Spinner toSpinner = new Spinner(range, SWT.BORDER); toSpinner.setLayoutData(getSpinnerData()); toSpinner.setMinimum(1); toSpinner.setMaximum(measureCount); toSpinner.setSelection(measure.getNumber()); final int minSelection = 1; final int maxSelection = track.countMeasures(); fromSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int fromSelection = fromSpinner.getSelection(); int toSelection = toSpinner.getSelection(); if(fromSelection < minSelection){ fromSpinner.setSelection(minSelection); }else if(fromSelection > toSelection){ fromSpinner.setSelection(toSelection); } } }); toSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int toSelection = toSpinner.getSelection(); int fromSelection = fromSpinner.getSelection(); if(toSelection < fromSelection){ toSpinner.setSelection(fromSelection); }else if(toSelection > maxSelection){ toSpinner.setSelection(maxSelection); } } }); //---------------------------------------------------------------------- this.copyAllTracks = true; if(getSongManager().getSong().countTracks() > 1){ Group checkComposites = new Group(dialog,SWT.SHADOW_ETCHED_IN); checkComposites.setLayout(new GridLayout()); checkComposites.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); checkComposites.setText(TuxGuitar.getProperty("options")); final Button allTracks = new Button(checkComposites,SWT.CHECK); allTracks.setText(TuxGuitar.getProperty("edit.all-tracks")); allTracks.setSelection(this.copyAllTracks); allTracks.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { CopyMeasureAction.this.copyAllTracks = allTracks.getSelection(); } }); } //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { copyMeasures(fromSpinner.getSelection(),toSpinner.getSelection(),CopyMeasureAction.this.copyAllTracks); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 180; return data; } protected void copyMeasures(int m1,int m2,boolean allTracks){ if(m1 > 0 && m1 <= m2){ MeasureTransferable transferable = new MeasureTransferable(getEditor(),m1,m2,allTracks); getEditor().getClipBoard().addTransferable(transferable); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoFirstMeasureAction.java0000644000175000017500000000257611273045225032753 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoFirstMeasureAction extends Action{ public static final String NAME = "action.measure.go-first"; public GoFirstMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().getTransport().gotoFirst(); } else{ Caret caret = getEditor().getTablature().getCaret(); TGTrackImpl track = caret.getTrack(); TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track); if(track != null && measure != null){ caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber()); } } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoLastMeasureAction.java0000644000175000017500000000257111273045225032562 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoLastMeasureAction extends Action{ public static final String NAME = "action.measure.go-last"; public GoLastMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().getTransport().gotoLast(); } else{ Caret caret = getEditor().getTablature().getCaret(); TGTrackImpl track = caret.getTrack(); TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getLastMeasure(track); if(track != null && measure != null){ caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber()); } } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoNextMeasureAction.java0000644000175000017500000000401311273045225032566 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure; import org.herac.tuxguitar.song.models.TGMeasure; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoNextMeasureAction extends Action{ public static final String NAME = "action.measure.go-next"; public GoNextMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); //si es el ultimo compas, agrego uno nuevo if(getSongManager().getTrackManager().isLastMeasure(caret.getMeasure())){ int number = (getSongManager().getSong().countMeasureHeaders() + 1); //comienza el undoable UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number); this.getSongManager().addNewMeasure(number); this.fireUpdate(number); this.moveToNext(); //termia el undoable this.addUndoableEdit(undoable.endUndo()); } else{ this.moveToNext(); } return 0; } private void moveToNext(){ if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().getTransport().gotoNext(); } else{ Caret caret = getEditor().getTablature().getCaret(); TGTrackImpl track = caret.getTrack(); TGMeasure measure = getSongManager().getTrackManager().getNextMeasure(caret.getMeasure()); if(track != null && measure != null){ caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber()); } } } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoPreviousMeasureAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoPreviousMeasureAction.java0000644000175000017500000000262611273045225033474 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoPreviousMeasureAction extends Action{ public static final String NAME = "action.measure.go-previous"; public GoPreviousMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getPlayer().isRunning()){ TuxGuitar.instance().getTransport().gotoPrevious(); } else{ Caret caret = getEditor().getTablature().getCaret(); TGTrackImpl track = caret.getTrack(); TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(caret.getMeasure()); if(track != null && measure != null){ caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber()); } } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/PasteMeasureAction.java0000644000175000017500000001235511273045225032446 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.clipboard.CannotInsertTransferException; import org.herac.tuxguitar.gui.clipboard.MeasureTransferable; import org.herac.tuxguitar.gui.clipboard.Transferable; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.util.DialogUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class PasteMeasureAction extends Action{ public static final String NAME = "action.measure.paste"; public PasteMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("edit.paste")); //-----------------COUNT------------------------ Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("edit.paste")); Label countLabel = new Label(group, SWT.NULL); countLabel.setText(TuxGuitar.getProperty("edit.paste.count")); final Spinner countSpinner = new Spinner(group, SWT.BORDER); countSpinner.setLayoutData(getSpinnerData()); countSpinner.setMinimum( 1 ); countSpinner.setMaximum( 100 ); countSpinner.setSelection( 1 ); //---------------------------------------------------------------------- Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN); options.setLayout(new GridLayout()); options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); options.setText(TuxGuitar.getProperty("options")); final Button replace = new Button(options,SWT.RADIO); replace.setText(TuxGuitar.getProperty("edit.paste.replace-mode")); replace.setSelection(true); final Button insert = new Button(options,SWT.RADIO); insert.setText(TuxGuitar.getProperty("edit.paste.insert-mode")); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int pasteMode = 0; int pasteCount = countSpinner.getSelection(); if( replace.getSelection() ){ pasteMode = MeasureTransferable.TRANSFER_TYPE_REPLACE; }else if(insert.getSelection()){ pasteMode = MeasureTransferable.TRANSFER_TYPE_INSERT; } pasteMeasures( pasteMode , pasteCount); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 150; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void pasteMeasures(int pasteMode, int pasteCount){ try { if( pasteMode > 0 && pasteCount > 0 ){ Transferable transferable = getEditor().getClipBoard().getTransferable(); if(transferable instanceof MeasureTransferable){ ((MeasureTransferable)transferable).setTransferType( pasteMode ); ((MeasureTransferable)transferable).setPasteCount( pasteCount ); transferable.insertTransfer(); updateTablature(); } } } catch (CannotInsertTransferException ex) { ex.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/RemoveMeasureAction.java0000644000175000017500000001473211273045225032630 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableRemoveMeasure; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RemoveMeasureAction extends Action{ public static final String NAME = "action.measure.remove"; public RemoveMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()/*,e*/); return 0; } public void showDialog(Shell shell/*,final TypedEvent event*/) { TGTrackImpl track = getEditor().getTablature().getCaret().getTrack(); TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure(); if (measure != null) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("edit.delete")); //---------------------------------------------------------------------- Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN); range.setLayout(new GridLayout(2,false)); range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); range.setText(TuxGuitar.getProperty("edit.delete")); int measureCount = getSongManager().getSong().countMeasureHeaders(); Label fromLabel = new Label(range, SWT.NULL); fromLabel.setText(TuxGuitar.getProperty("edit.from")); final Spinner fromSpinner = new Spinner(range, SWT.BORDER); fromSpinner.setLayoutData(getSpinnerData()); fromSpinner.setMinimum(1); fromSpinner.setMaximum(measureCount); fromSpinner.setSelection(measure.getNumber()); Label toLabel = new Label(range, SWT.NULL); toLabel.setText(TuxGuitar.getProperty("edit.to")); final Spinner toSpinner = new Spinner(range, SWT.BORDER); toSpinner.setLayoutData(getSpinnerData()); toSpinner.setMinimum(1); toSpinner.setMaximum(measureCount); toSpinner.setSelection(measure.getNumber()); final int minSelection = 1; final int maxSelection = track.countMeasures(); fromSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int fromSelection = fromSpinner.getSelection(); int toSelection = toSpinner.getSelection(); if(fromSelection < minSelection){ fromSpinner.setSelection(minSelection); }else if(fromSelection > toSelection){ fromSpinner.setSelection(toSelection); } } }); toSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int toSelection = toSpinner.getSelection(); int fromSelection = fromSpinner.getSelection(); if(toSelection < fromSelection){ toSpinner.setSelection(fromSelection); }else if(toSelection > maxSelection){ toSpinner.setSelection(maxSelection); } } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { removeMeasures(fromSpinner.getSelection(),toSpinner.getSelection()/*,event*/); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected GridData getSpinnerData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 180; return data; } protected void removeMeasures(int m1,int m2/*,TypedEvent event*/){ if(m1 > 0 && m1 <= m2 && m2 <= getSongManager().getSong().countMeasureHeaders()){ Caret caret = getEditor().getTablature().getCaret(); if(m1 == 1 && m2 == getSongManager().getSong().countMeasureHeaders()){ //TuxGuitar.instance().getAction(NewFileAction.NAME).process(event); TuxGuitar.instance().newSong(); return; } //comienza el undoable UndoableRemoveMeasure undoable = new UndoableRemoveMeasure(m1,m2); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //borro los compases getSongManager().removeMeasureHeaders(m1,m2); updateTablature(); int measureCount = getSongManager().getSong().countMeasureHeaders(); if(caret.getMeasure().getNumber() > measureCount){ TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber()); TGMeasure measure = getSongManager().getTrackManager().getMeasure(track,measureCount); caret.update(track.getNumber(),measure.getStart(),1); } //termia el undoable addUndoableEdit(undoable.endUndo()); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeNoteAction.java0000644000175000017500000001015211273045225031360 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingConstants; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class ChangeNoteAction extends Action { public static final String NAME = "action.note.general.change"; private static final int DELAY = 1000; private static int lastAddedValue; private static int lastAddedString; private static long lastAddedStart; private static long lastAddedTime; public ChangeNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING); } protected int execute(TypedEvent e){ if (e instanceof KeyEvent) { int value = getValueOf(((KeyEvent) e).keyCode); if (value >= 0) { Caret caret = getEditor().getTablature().getCaret(); TGMeasureImpl measure = caret.getMeasure(); TGDuration duration = caret.getDuration(); int string = caret.getSelectedString().getNumber(); int velocity = caret.getVelocity(); long start = caret.getPosition(); long time = System.currentTimeMillis(); if(lastAddedStart == start && lastAddedString == string){ if (lastAddedValue > 0 && lastAddedValue < 10 && time < ( lastAddedTime + DELAY ) ){ int newValue = ( ( lastAddedValue * 10 ) + value ); if(newValue < 30 || caret.getTrack().isPercussionTrack()){ value = newValue; } } } this.addNote(measure, duration, start, value, string, velocity); this.fireUpdate(measure.getNumber()); lastAddedValue = value; lastAddedStart = start; lastAddedString = string; lastAddedTime = time; return AUTO_UPDATE; } } return 0; } private void addNote(TGMeasureImpl measure,TGDuration duration, long start, int value,int string, int velocity) { TGNote note = getSongManager().getFactory().newNote(); note.setValue(value); note.setVelocity(velocity); note.setString(string); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //getSongManager().getMeasureManager().addNote(measure,start,note,duration.clone(getSongManager().getFactory()) ); getSongManager().getMeasureManager().addNote(measure,start,note,duration.clone(getSongManager().getFactory()), getEditor().getTablature().getCaret().getVoice() ); //termia el undoable addUndoableEdit(undoable.endUndo()); //reprodusco las notas en el pulso getEditor().getTablature().getCaret().getSelectedBeat().play(); } private int getValueOf(int keyCode){ switch(keyCode){ case KeyBindingConstants.NUMBER_0: case KeyBindingConstants.KEYPAD_0: return 0; case KeyBindingConstants.NUMBER_1: case KeyBindingConstants.KEYPAD_1: return 1; case KeyBindingConstants.NUMBER_2: case KeyBindingConstants.KEYPAD_2: return 2; case KeyBindingConstants.NUMBER_3: case KeyBindingConstants.KEYPAD_3: return 3; case KeyBindingConstants.NUMBER_4: case KeyBindingConstants.KEYPAD_4: return 4; case KeyBindingConstants.NUMBER_5: case KeyBindingConstants.KEYPAD_5: return 5; case KeyBindingConstants.NUMBER_6: case KeyBindingConstants.KEYPAD_6: return 6; case KeyBindingConstants.NUMBER_7: case KeyBindingConstants.KEYPAD_7: return 7; case KeyBindingConstants.NUMBER_8: case KeyBindingConstants.KEYPAD_8: return 8; case KeyBindingConstants.NUMBER_9: case KeyBindingConstants.KEYPAD_9: return 9; } return -1; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeTiedNoteAction.java0000644000175000017500000000641011273045225032170 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import java.util.Iterator; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeTiedNoteAction extends Action{ public static final String NAME = "action.note.general.tied"; public ChangeTiedNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); if(caret.getSelectedNote() != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSongManager().getMeasureManager().changeTieNote(caret.getSelectedNote()); //termia el undoable addUndoableEdit(undoable.endUndo()); }else{ TGNote note = getSongManager().getFactory().newNote(); note.setValue(0); note.setVelocity(caret.getVelocity()); note.setString(caret.getSelectedString().getNumber()); note.setTiedNote(true); TGDuration duration = getSongManager().getFactory().newDuration(); caret.getDuration().copy(duration); setTiedNoteValue(note,caret); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); getSongManager().getMeasureManager().addNote(caret.getSelectedBeat(),note,duration, caret.getVoice()); //termia el undoable addUndoableEdit(undoable.endUndo()); } TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); return 0; } private void setTiedNoteValue(TGNote note,Caret caret){ TGMeasure measure = caret.getMeasure(); TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice( measure.getBeats(), caret.getSelectedBeat(), caret.getVoice()); while( measure != null){ while( voice != null ){ if(voice.isRestVoice()){ note.setValue(0); return; } // Check if is there any note at same string. Iterator it = voice.getNotes().iterator(); while( it.hasNext() ){ TGNote current = (TGNote) it.next(); if(current.getString() == note.getString()){ note.setValue( current.getValue() ); return; } } voice = getSongManager().getMeasureManager().getPreviousVoice( measure.getBeats(), voice.getBeat(), caret.getVoice()); } measure = getSongManager().getTrackManager().getPrevMeasure(measure); if( measure != null ){ voice = getSongManager().getMeasureManager().getLastVoice( measure.getBeats() , caret.getVoice()); } } } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeVelocityAction.java0000644000175000017500000000314411273045225032254 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ChangeVelocityAction extends Action{ public static final String NAME = "action.note.general.velocity"; public ChangeVelocityAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING); } protected int execute(TypedEvent e){ if(e.widget.getData() instanceof Integer){ int velocity = ((Integer)e.widget.getData()).intValue(); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); Caret caret = getEditor().getTablature().getCaret(); caret.setVelocity(velocity); getSongManager().getMeasureManager().changeVelocity(velocity,caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber()); updateTablature(); //termia el undoable addUndoableEdit(undoable.endUndo()); return AUTO_UPDATE; } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/CleanBeatAction.java0000644000175000017500000000304411273045225031165 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CleanBeatAction extends Action{ public static final String NAME = "action.note.general.clean-beat"; public CleanBeatAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat(); if( beat != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //getSongManager().getMeasureManager().removeAllComponentsAt(caret.getMeasure(),caret.getSelectedComponent().getStart()); getSongManager().getMeasureManager().cleanBeat(beat); //termia el undoable addUndoableEdit(undoable.endUndo()); updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/DecrementNoteSemitoneAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/DecrementNoteSemitoneAction.jav0000644000175000017500000000307111273045225033446 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DecrementNoteSemitoneAction extends Action{ public static final String NAME = "action.note.general.decrement-semitone"; public DecrementNoteSemitoneAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); if(getSongManager().getMeasureManager().moveSemitoneDown(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString())){ //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/IncrementNoteSemitoneAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/IncrementNoteSemitoneAction.jav0000644000175000017500000000306711273045225033471 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class IncrementNoteSemitoneAction extends Action{ public static final String NAME = "action.note.general.increment-semitone"; public IncrementNoteSemitoneAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); if(getSongManager().getMeasureManager().moveSemitoneUp(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString())){ //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/InsertNoteAction.java0000644000175000017500000000355611273045225031451 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class InsertNoteAction extends Action{ public static final String NAME = "action.note.general.insert"; public InsertNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGBeat beat = caret.getSelectedBeat(); if(beat != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); if(beat.getVoice(caret.getVoice()).isEmpty()){ getSongManager().getMeasureManager().addSilence(beat, caret.getDuration().clone(getSongManager().getFactory()), caret.getVoice()); } else{ long start = beat.getStart(); long length = beat.getVoice(caret.getVoice()).getDuration().getTime(); getSongManager().getMeasureManager().moveVoices(caret.getMeasure(),start,length,caret.getVoice(),beat.getVoice(caret.getVoice()).getDuration()); } //termia el undoable addUndoableEdit(undoable.endUndo()); updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsCustomAction.java0000644000175000017500000003340311273045225032431 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions.note; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.util.TGSynchronizer; public class MoveBeatsCustomAction extends Action{ public static final String NAME = "action.beat.general.move-custom"; private static final ComboItem[] MOVE_DIRECTIONS = new ComboItem[]{ new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.direction.right"), new Integer(1) ), new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.direction.left") , new Integer(-1) ), }; private static final ComboItem[] MOVE_DURATIONS = new ComboItem[]{ new ComboItem( TuxGuitar.getProperty("duration.whole") , new Integer(TGDuration.WHOLE) ), new ComboItem( TuxGuitar.getProperty("duration.half") , new Integer(TGDuration.HALF) ), new ComboItem( TuxGuitar.getProperty("duration.quarter") , new Integer(TGDuration.QUARTER) ), new ComboItem( TuxGuitar.getProperty("duration.eighth") , new Integer(TGDuration.EIGHTH) ), new ComboItem( TuxGuitar.getProperty("duration.sixteenth") , new Integer(TGDuration.SIXTEENTH) ), new ComboItem( TuxGuitar.getProperty("duration.thirtysecond") , new Integer(TGDuration.THIRTY_SECOND) ), new ComboItem( TuxGuitar.getProperty("duration.sixtyfourth") , new Integer(TGDuration.SIXTY_FOURTH) ), }; private static final ComboItem[] MOVE_DURATION_TYPES = new ComboItem[]{ new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.duration.type.normal") , new boolean[]{ false, false} ), new ComboItem( TuxGuitar.getProperty("duration.dotted") , new boolean[]{ true, false} ), new ComboItem( TuxGuitar.getProperty("duration.doubledotted") , new boolean[]{ false, true} ), }; private static final ComboItem[] MOVE_DURATION_DIVISIONS = new ComboItem[]{ new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.duration.division-type.normal") , new int[] { 1 , 1} ), new ComboItem( "3" , new int[] { 3 , 2} ), new ComboItem( "5" , new int[] { 5 , 4} ), new ComboItem( "6" , new int[] { 6 , 4} ), new ComboItem( "7" , new int[] { 7 , 4} ), new ComboItem( "9" , new int[] { 9 , 8} ), new ComboItem( "10" , new int[] { 10 , 8} ), new ComboItem( "11" , new int[] { 11 , 8} ), new ComboItem( "12" , new int[] { 12 , 8} ), }; public MoveBeatsCustomAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ this.showDialog(getEditor().getTablature().getShell()); return 0; } protected void showDialog(Shell shell){ final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("beat.move-custom.dialog.title")); //-------direction------------------------------------- Group direction = new Group(dialog,SWT.SHADOW_ETCHED_IN); direction.setLayout(new GridLayout(2,false)); direction.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); direction.setText(TuxGuitar.getProperty("beat.move-custom.dialog.direction-tip")); Label directionLabel = new Label(direction, SWT.RIGHT); directionLabel.setText(TuxGuitar.getProperty("beat.move-custom.dialog.direction") + ":"); final Combo directionCombo = new Combo(direction, SWT.DROP_DOWN | SWT.READ_ONLY); for( int i = 0 ; i < MOVE_DIRECTIONS.length ; i ++ ){ directionCombo.add( MOVE_DIRECTIONS[i].getLabel() ); } directionCombo.select( 0 ); directionCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); //-------move 1------------------------------------------ final List move1Controls = new ArrayList(); Group move1 = new Group(dialog,SWT.SHADOW_ETCHED_IN); move1.setLayout(new GridLayout(2,false)); move1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); move1.setText(TuxGuitar.getProperty("beat.move-custom.dialog.move-1.tip")); Label count1Label = new Label(move1, SWT.RIGHT); count1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true)); count1Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.count") + ":"); final Spinner count1Spinner = new Spinner(move1 , SWT.BORDER ); count1Spinner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); count1Spinner.setMinimum(0); count1Spinner.setMaximum(100); count1Spinner.setIncrement(1); count1Spinner.setSelection(0); count1Spinner.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateControls( count1Spinner.getSelection(), move1Controls ); } }); Label duration1Label = new Label(move1, SWT.RIGHT); duration1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true)); duration1Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration") + ":"); move1Controls.add( duration1Label ); final Combo duration1Combo = new Combo(move1, SWT.DROP_DOWN | SWT.READ_ONLY); duration1Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); for( int i = 0 ; i < MOVE_DURATIONS.length ; i ++ ){ duration1Combo.add( MOVE_DURATIONS[i].getLabel() ); } duration1Combo.select( 0 ); move1Controls.add( duration1Combo ); updateControls( 0, move1Controls ); //-------move 2------------------------------------------ final List move2Controls = new ArrayList(); Group move2 = new Group(dialog,SWT.SHADOW_ETCHED_IN); move2.setLayout(new GridLayout(2,false)); move2.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); move2.setText(TuxGuitar.getProperty("beat.move-custom.dialog.move-2.tip")); Label count2Label = new Label(move2, SWT.RIGHT); count2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true)); count2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.count") + ":"); final Spinner count2Spinner = new Spinner(move2 , SWT.BORDER ); count2Spinner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); count2Spinner.setSelection(0); count2Spinner.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateControls( count2Spinner.getSelection(), move2Controls ); } }); Label duration2Label = new Label(move2, SWT.RIGHT); duration2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true)); duration2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration") + ":"); move2Controls.add( duration2Label ); final Combo duration2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY); duration2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); for( int i = 0 ; i < MOVE_DURATIONS.length ; i ++ ){ duration2Combo.add( MOVE_DURATIONS[i].getLabel() ); } duration2Combo.select( 2 ); move2Controls.add( duration2Combo ); Label type2Label = new Label(move2, SWT.RIGHT); type2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true)); type2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration.type") + ":"); move2Controls.add( type2Label ); final Combo type2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY); type2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); for( int i = 0 ; i < MOVE_DURATION_TYPES.length ; i ++ ){ type2Combo.add( MOVE_DURATION_TYPES[i].getLabel() ); } type2Combo.select( 0 ); move2Controls.add( type2Combo ); Label division2Label = new Label(move2, SWT.RIGHT); division2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true)); division2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration.division-type") + ":"); move2Controls.add( division2Label ); final Combo division2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY); division2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); for( int i = 0 ; i < MOVE_DURATION_DIVISIONS.length ; i ++ ){ division2Combo.add( MOVE_DURATION_DIVISIONS[i].getLabel() ); } division2Combo.select( 0 ); move2Controls.add( division2Combo ); updateControls( 0, move2Controls ); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { final int directionValue = getDirection( directionCombo.getSelectionIndex() ); final long duration1 = getDuration1(duration1Combo.getSelectionIndex(), count1Spinner.getSelection()); final long duration2 = getDuration2(duration2Combo.getSelectionIndex(),type2Combo.getSelectionIndex(),division2Combo.getSelectionIndex(), count2Spinner.getSelection()); final long duration = ( ( duration1 + duration2 ) * directionValue ); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); moveBeats(duration); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected int getDirection( int index ){ if( index >= 0 && index < MOVE_DIRECTIONS.length ){ return ((Integer)MOVE_DIRECTIONS[ index ].getValue()).intValue(); } return 0; } protected long getDuration1( int index , int count ){ if( count > 0 && index >= 0 && index < MOVE_DURATIONS.length ){ TGDuration duration = getSongManager().getFactory().newDuration(); duration.setValue( ((Integer)MOVE_DURATIONS[ index ].getValue()).intValue() ); duration.setDotted( false ); duration.setDoubleDotted( false ); duration.getDivision().setTimes( 1 ); duration.getDivision().setEnters( 1 ); return ( duration.getTime() * count ); } return 0; } protected long getDuration2( int index , int indexType , int indexDivision, int count ){ if( count > 0 && index >= 0 && index < MOVE_DURATIONS.length ){ if( indexType >= 0 && indexType < MOVE_DURATION_TYPES.length && indexDivision >= 0 && indexDivision < MOVE_DURATION_DIVISIONS.length ){ TGDuration duration = getSongManager().getFactory().newDuration(); duration.setValue( ((Integer)MOVE_DURATIONS[ index ].getValue()).intValue() ); duration.setDotted(((boolean[])MOVE_DURATION_TYPES[ indexType ].getValue())[0]); duration.setDoubleDotted(((boolean[])MOVE_DURATION_TYPES[ indexType ].getValue())[1]); duration.getDivision().setEnters(((int[])MOVE_DURATION_DIVISIONS[ indexDivision ].getValue())[0]); duration.getDivision().setTimes(((int[])MOVE_DURATION_DIVISIONS[ indexDivision ].getValue())[1]); return ( duration.getTime() * count ); } } return 0; } protected void updateControls(int count, List controls){ Iterator it = controls.iterator(); while( it.hasNext() ){ Control control = (Control) it.next(); control.setEnabled( count > 0 ); } } protected int moveBeats( long theMove ){ Caret caret = getEditor().getTablature().getCaret(); TGBeat beat = caret.getSelectedBeat(); TGMeasure measure = caret.getMeasure(); TGTrack track = caret.getTrack(); if(beat != null && measure != null && track != null){ //comienza el undoable UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track); getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), theMove ); //termia el undoable addUndoableEdit(undoable.endUndo(track)); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } return 0; } protected static class ComboItem { private String label; private Object value; public ComboItem(String label, Object value){ this.label = label; this.value = value; } public String getLabel() { return this.label; } public Object getValue() { return this.value; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsLeftAction.java0000644000175000017500000000351211273045225032047 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MoveBeatsLeftAction extends Action{ public static final String NAME = "action.beat.general.move-left"; public MoveBeatsLeftAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGBeat beat = caret.getSelectedBeat(); TGMeasure measure = caret.getMeasure(); TGTrack track = caret.getTrack(); TGDuration duration = (beat != null ? beat.getVoice( caret.getVoice() ).getDuration() : null ); if(beat != null && measure != null && track != null && duration != null){ //comienza el undoable UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track); getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), -duration.getTime() ); //termia el undoable addUndoableEdit(undoable.endUndo(track)); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsRightAction.java0000644000175000017500000000351411273045225032234 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MoveBeatsRightAction extends Action{ public static final String NAME = "action.beat.general.move-right"; public MoveBeatsRightAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGBeat beat = caret.getSelectedBeat(); TGMeasure measure = caret.getMeasure(); TGTrack track = caret.getTrack(); TGDuration duration = (beat != null ? beat.getVoice( caret.getVoice() ).getDuration() : null ); if(beat != null && measure != null && track != null && duration != null){ //comienza el undoable UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track); getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), duration.getTime() ); //termia el undoable addUndoableEdit(undoable.endUndo(track)); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveNoteAction.java0000644000175000017500000000354711273045225031442 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RemoveNoteAction extends Action{ public static final String NAME = "action.note.general.remove"; public RemoveNoteAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); Caret caret = getEditor().getTablature().getCaret(); TGBeat beat = caret.getSelectedBeat(); TGVoice voice = beat.getVoice( caret.getVoice() ); if( beat.isTextBeat() && beat.isRestBeat() ){ getSongManager().getMeasureManager().removeText(beat); }else if(voice.isRestVoice()){ getSongManager().getMeasureManager().removeVoice(voice ,true); }else{ int string = caret.getSelectedString().getNumber(); getSongManager().getMeasureManager().removeNote(caret.getMeasure(),beat.getStart(), caret.getVoice(), string); } //termia el undoable addUndoableEdit(undoable.endUndo()); updateTablature(); return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveUnusedVoiceAction.java0000644000175000017500000000315511273045225032761 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RemoveUnusedVoiceAction extends Action{ public static final String NAME = "action.beat.general.remove-unused-voice"; public RemoveUnusedVoiceAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); if( caret.getMeasure() != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){ if( caret.getVoice() != v ){ getSongManager().getMeasureManager().removeMeasureVoices( caret.getMeasure(), v ); } } //termia el undoable addUndoableEdit(undoable.endUndo()); updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeDownAction.java0000644000175000017500000000363011273045225032123 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.StrokeEditor; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGStroke; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetStrokeDownAction extends Action{ public static final String NAME = "action.beat.general.set-stroke-down"; public SetStrokeDownAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat(); if(beat != null && !beat.isRestBeat()){ StrokeEditor editor = new StrokeEditor(); editor.open(beat); if( editor.getStatus() != StrokeEditor.STATUS_CANCEL ){ int direction = ( editor.getStatus() == StrokeEditor.STATUS_CLEAN ? TGStroke.STROKE_NONE : TGStroke.STROKE_DOWN ); int value = editor.getValue(); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); if(getSongManager().getMeasureManager().setStroke( beat.getMeasure(), beat.getStart(), value, direction ) ){ //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } updateTablature(); } } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeUpAction.java0000644000175000017500000000362011273045225031577 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.effects.StrokeEditor; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGStroke; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetStrokeUpAction extends Action{ public static final String NAME = "action.beat.general.set-stroke-up"; public SetStrokeUpAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat(); if(beat != null && !beat.isRestBeat()){ StrokeEditor editor = new StrokeEditor(); editor.open(beat); if( editor.getStatus() != StrokeEditor.STATUS_CANCEL ){ int direction = ( editor.getStatus() == StrokeEditor.STATUS_CLEAN ? TGStroke.STROKE_NONE : TGStroke.STROKE_UP ); int value = editor.getValue(); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); if(getSongManager().getMeasureManager().setStroke( beat.getMeasure(), beat.getStart(), value, direction ) ){ //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } updateTablature(); } } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceAutoAction.java0000644000175000017500000000404311273045225031721 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import java.util.Iterator; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGBeatGroup; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetVoiceAutoAction extends Action{ public static final String NAME = "action.beat.general.voice-auto"; public SetVoiceAutoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGBeatImpl beat = caret.getSelectedBeat(); if( beat != null ){ TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() ); TGBeatGroup group = voice.getBeatGroup(); if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Iterator it = group.getVoices().iterator(); while( it.hasNext() ){ TGVoice current = (TGVoice)it.next(); getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_NONE); } //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceDownAction.java0000644000175000017500000000404311273045225031720 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import java.util.Iterator; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGBeatGroup; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetVoiceDownAction extends Action{ public static final String NAME = "action.beat.general.voice-down"; public SetVoiceDownAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGBeatImpl beat = caret.getSelectedBeat(); if( beat != null ){ TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() ); TGBeatGroup group = voice.getBeatGroup(); if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Iterator it = group.getVoices().iterator(); while( it.hasNext() ){ TGVoice current = (TGVoice)it.next(); getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_DOWN); } //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceUpAction.java0000644000175000017500000000403311273045225031374 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import java.util.Iterator; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGBeatGroup; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SetVoiceUpAction extends Action{ public static final String NAME = "action.beat.general.voice-up"; public SetVoiceUpAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGBeatImpl beat = caret.getSelectedBeat(); if( beat != null ){ TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() ); TGBeatGroup group = voice.getBeatGroup(); if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Iterator it = group.getVoices().iterator(); while( it.hasNext() ){ TGVoice current = (TGVoice)it.next(); getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_UP); } //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); updateTablature(); } } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteDownAction.java0000644000175000017500000000321611273045225032103 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShiftNoteDownAction extends Action{ public static final String NAME = "action.note.general.shift-down"; public ShiftNoteDownAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); int nextString = getSongManager().getMeasureManager().shiftNoteDown(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString()); if(nextString > 0){ getEditor().getTablature().getCaret().setStringNumber(nextString); //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteUpAction.java0000644000175000017500000000320611273045225031557 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.note; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShiftNoteUpAction extends Action{ public static final String NAME = "action.note.general.shift-up"; public ShiftNoteUpAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGNote note = getEditor().getTablature().getCaret().getSelectedNote(); if(note != null){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); int nextString = getSongManager().getMeasureManager().shiftNoteUp(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString()); if(nextString > 0){ getEditor().getTablature().getCaret().setStringNumber(nextString); //termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } updateTablature(); } return 0; } public void updateTablature() { fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditConfigAction.java0000644000175000017500000000157711273045225032266 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.settings; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class EditConfigAction extends Action{ public static final String NAME = "action.settings.configure"; public EditConfigAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE ); } protected int execute(TypedEvent e){ new TGConfigEditor().showDialog(TuxGuitar.instance().getShell()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditKeyBindingsAction.java0000644000175000017500000000161311273045225033256 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.settings; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.system.keybindings.editor.KeyBindingEditor; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class EditKeyBindingsAction extends Action{ public static final String NAME = "action.settings.key-bindings"; public EditKeyBindingsAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ new KeyBindingEditor().show(TuxGuitar.instance().getShell()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditPluginsAction.java0000644000175000017500000002010011273045225032461 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.settings; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.system.plugins.TGPlugin; import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class EditPluginsAction extends Action{ public static final String NAME = "action.settings.plugins"; private static final int TABLE_WIDTH = 400; private static final int TABLE_HEIGHT = 300; public EditPluginsAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ showDialog(); return 0; } public void showDialog() { final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setText(TuxGuitar.getProperty("plugins")); final Table table = new Table(dialog, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL); table.setLayoutData(new GridData(TABLE_WIDTH,TABLE_HEIGHT)); table.setHeaderVisible(true); final TableColumn columnEnabled = new TableColumn(table, SWT.LEFT); final TableColumn columnPlugin = new TableColumn(table, SWT.LEFT); columnEnabled.setText(TuxGuitar.getProperty("plugin.column.enabled")); columnPlugin.setText(TuxGuitar.getProperty("plugin.column.name")); columnEnabled.setWidth( (TABLE_WIDTH / 4) ); columnPlugin.setWidth( (TABLE_WIDTH - (TABLE_WIDTH / 4)) ); Iterator it = TuxGuitar.instance().getPluginManager().getPlugins().iterator(); while(it.hasNext()){ TGPlugin plugin = (TGPlugin)it.next(); TableItem item = new TableItem(table, SWT.NONE); item.setData(plugin); item.setText(1,((plugin.getName() != null)?plugin.getName():"Undefined Plugin")); item.setChecked(TuxGuitar.instance().getPluginManager().isEnabled(plugin)); } //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonSetup = new Button(buttons, SWT.PUSH); buttonSetup.setText(TuxGuitar.getProperty("configure")); buttonSetup.setLayoutData(getButtonData()); buttonSetup.setEnabled(false); buttonSetup.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TableItem item = table.getItem(table.getSelectionIndex()); if(item != null && item.getData() instanceof TGPluginSetup){ try { ((TGPluginSetup)item.getData()).setupDialog(dialog); }catch(Throwable throwable){ MessageDialog.errorMessage(dialog, throwable); } } } }); final Button buttonInfo = new Button(buttons, SWT.PUSH); buttonInfo.setText(TuxGuitar.getProperty("info")); buttonInfo.setLayoutData(getButtonData()); buttonInfo.setEnabled(false); buttonInfo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TableItem item = table.getItem(table.getSelectionIndex()); if(item != null && item.getData() instanceof TGPlugin){ try { showInfo(dialog,(TGPlugin)item.getData()); }catch(Throwable throwable){ MessageDialog.errorMessage(dialog, throwable); } } } }); Button buttonClose = new Button(buttons, SWT.PUSH); buttonClose.setText(TuxGuitar.getProperty("close")); buttonClose.setLayoutData(getButtonData()); buttonClose.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); table.addListener (SWT.Selection, new Listener() { public void handleEvent (Event event) { buttonInfo.setEnabled(false); buttonSetup.setEnabled(false); if(event.item instanceof TableItem && event.item.getData() instanceof TGPlugin){ final TableItem item = (TableItem)event.item; if(event.detail == SWT.CHECK){ TuxGuitar.instance().loadCursor(dialog,SWT.CURSOR_WAIT); TuxGuitar.instance().getPluginManager().setEnabled((TGPlugin)item.getData(),item.getChecked()); TuxGuitar.instance().loadCursor(dialog,SWT.CURSOR_ARROW); table.setSelection(item); } buttonInfo.setEnabled(true); buttonSetup.setEnabled((item.getData() instanceof TGPluginSetup)); } } }); dialog.setDefaultButton( buttonInfo ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } public void showInfo(Shell parent,TGPlugin plugin) { final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); dialog.setText(TuxGuitar.getProperty("plugins")); Composite info = new Composite(dialog,SWT.NONE); info.setLayout(new GridLayout(2,false)); showInfoString(info,TuxGuitar.getProperty("name") + ":",plugin.getName()); showInfoString(info,TuxGuitar.getProperty("version") + ":",plugin.getVersion()); showInfoString(info,TuxGuitar.getProperty("author") + ":",plugin.getAuthor()); showInfoString(info,TuxGuitar.getProperty("description") + ":",plugin.getDescription()); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout()); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); Button buttonExit = new Button(buttons, SWT.PUSH); buttonExit.setText(TuxGuitar.getProperty("exit")); buttonExit.setLayoutData(getButtonData()); buttonExit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonExit ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } private void showInfoString(Composite parent,String key,String value){ Label labelKey = new Label(parent,SWT.LEFT); Label labelValue = new Label(parent,SWT.LEFT | SWT.WRAP); labelKey.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,false,true)); labelValue.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); setBold(labelKey); labelKey.setText(key); labelValue.setText( (value != null && value.length() > 0)?value:TuxGuitar.getProperty("plugin.unknown-value")); } private void setBold(Label label){ FontData[] fontDatas = label.getFont().getFontData(); if(fontDatas.length > 0){ final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),(fontDatas[0].getHeight()),SWT.BOLD); label.setFont(font); label.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { font.dispose(); } }); } } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/system/DisposeAction.java0000644000175000017500000001057211273045225031340 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.system; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.file.FileActionUtils; import org.herac.tuxguitar.gui.marker.MarkerList; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.table.TGTableViewer; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class DisposeAction extends Action { public static final String NAME = "action.system.dispose"; public DisposeAction() { super(NAME, AUTO_LOCK); } protected int execute(TypedEvent e){ if(e instanceof ShellEvent){ TuxGuitar.instance().getPlayer().reset(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ return AUTO_UNLOCK; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ return AUTO_UNLOCK; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); exit(); } } }).start(); return 0; } } exit(); } return 0; } protected void exit(){ try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { TuxGuitar.instance().lock(); closeModules(); saveConfig(); dispose(); TuxGuitar.instance().unlock(); } }); } catch (Throwable throwable) { throwable.printStackTrace(); } } protected void saveConfig(){ TGConfigManager config = TuxGuitar.instance().getConfig(); config.setProperty(TGConfigKeys.LAYOUT_MODE,getEditor().getTablature().getViewLayout().getMode()); config.setProperty(TGConfigKeys.LAYOUT_STYLE,getEditor().getTablature().getViewLayout().getStyle()); config.setProperty(TGConfigKeys.SHOW_PIANO,!TuxGuitar.instance().getPianoEditor().isDisposed()); config.setProperty(TGConfigKeys.SHOW_MATRIX,!TuxGuitar.instance().getMatrixEditor().isDisposed()); config.setProperty(TGConfigKeys.SHOW_FRETBOARD,TuxGuitar.instance().getFretBoardEditor().isVisible()); config.setProperty(TGConfigKeys.SHOW_MIXER,!TuxGuitar.instance().getMixer().isDisposed()); config.setProperty(TGConfigKeys.SHOW_TRANSPORT,!TuxGuitar.instance().getTransport().isDisposed()); config.setProperty(TGConfigKeys.SHOW_MARKERS,!MarkerList.instance().isDisposed()); config.setProperty(TGConfigKeys.MAXIMIZED,TuxGuitar.instance().getShell().getMaximized()); config.setProperty(TGConfigKeys.WIDTH,TuxGuitar.instance().getShell().getClientArea().width); config.setProperty(TGConfigKeys.HEIGHT,TuxGuitar.instance().getShell().getClientArea().height); config.setProperty(TGConfigKeys.EDITOR_MOUSE_MODE,getEditor().getTablature().getEditorKit().getMouseMode()); config.setProperty(TGConfigKeys.MATRIX_GRIDS,TuxGuitar.instance().getMatrixEditor().getGrids()); TuxGuitar.instance().getConfig().save(); } protected void closeModules(){ TuxGuitar.instance().getPlayer().close(); TuxGuitar.instance().getPluginManager().closePlugins(); } protected void dispose(){ TGTableViewer.disposeColors(); TuxGuitar.instance().getSongManager().clearSong(); TuxGuitar.instance().getFretBoardEditor().dispose(); TuxGuitar.instance().getTablatureEditor().getTablature().dispose(); TuxGuitar.instance().getIconManager().disposeIcons(); TuxGuitar.instance().getShell().dispose(); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/ScaleAction.java0000644000175000017500000000141111273045225030565 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.tools; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.tools.scale.ScaleEditor; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ScaleAction extends Action{ public static final String NAME = "action.tools.scale"; public ScaleAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ new ScaleEditor().show(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TGBrowserAction.java0000644000175000017500000000114411273045225031417 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions.tools; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; public class TGBrowserAction extends Action{ public static final String NAME = "action.tools.browser"; public TGBrowserAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getBrowser().isDisposed()){ TuxGuitar.instance().getBrowser().show(); }else{ TuxGuitar.instance().getBrowser().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TransposeAction.java0000644000175000017500000002217011273045225031521 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.tools; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TransposeAction extends Action{ public static final String NAME = "action.tools.transpose"; public TransposeAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { final int[] transpositions = new int[25]; for( int i = 0 ; i < transpositions.length ; i ++ ){ transpositions[ i ] = ( i - ( transpositions.length / 2 ) ); } final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("tools.transpose")); //-----------------TEMPO------------------------ Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("tools.transpose")); Label transpositionLabel = new Label(group, SWT.NULL); transpositionLabel.setText(TuxGuitar.getProperty("tools.transpose.semitones")); transpositionLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Combo transpositionCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY ); transpositionCombo.setLayoutData( new GridData(SWT.FILL, SWT.FILL, true , true) ); for( int i = 0 ; i < transpositions.length ; i ++ ){ transpositionCombo.add( Integer.toString( transpositions[i]) ); } transpositionCombo.select( ( transpositions.length / 2 ) ); //------------------OPTIONS-------------------------- Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN); options.setLayout(new GridLayout()); options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); options.setText(TuxGuitar.getProperty("options")); final Button applyToAllMeasuresButton = new Button(options, SWT.RADIO); applyToAllMeasuresButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-track")); applyToAllMeasuresButton.setSelection(true); final Button applyToCurrentMeasureButton = new Button(options, SWT.RADIO); applyToCurrentMeasureButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-measure")); final Button applyToAllTracksButton = new Button(options, SWT.CHECK); applyToAllTracksButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-all-tracks")); applyToAllTracksButton.setSelection(true); final Button applyToChordsButton = new Button(options, SWT.CHECK); applyToChordsButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-chords")); applyToChordsButton.setSelection(true); final Button tryKeepStringButton = new Button(options, SWT.CHECK); tryKeepStringButton.setText(TuxGuitar.getProperty("tools.transpose.try-keep-strings")); tryKeepStringButton.setSelection(true); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int transpositionIndex = transpositionCombo.getSelectionIndex() ; if( transpositionIndex >= 0 && transpositionIndex < transpositions.length ){ final int transposition = transpositions[ transpositionIndex ]; final boolean tryKeepString = tryKeepStringButton.getSelection(); final boolean applyToChords = applyToChordsButton.getSelection(); final boolean applyToAllTracks = applyToAllTracksButton.getSelection(); final boolean applyToAllMeasures = applyToAllMeasuresButton.getSelection(); dialog.dispose(); try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { ActionLock.lock(); TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); transpose(transposition, tryKeepString, applyToChords , applyToAllMeasures, applyToAllTracks ); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }); } catch (Throwable throwable) { MessageDialog.errorMessage(throwable); } } else { dialog.dispose(); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } public void transpose( int transposition , boolean tryKeepString , boolean applyToChords , boolean applyToAllMeasures , boolean applyToAllTracks) { //comienza el undoable UndoableJoined undoableJoined = new UndoableJoined(); Caret caret = getEditor().getTablature().getCaret(); if( applyToAllMeasures ){ if( applyToAllTracks ){ TGSong song = getSongManager().getSong(); for( int i = 0 ; i < song.countTracks() ; i ++ ){ transposeTrack( undoableJoined , song.getTrack( i ) , transposition , tryKeepString , applyToChords); } } else { transposeTrack( undoableJoined , caret.getTrack(), transposition , tryKeepString , applyToChords); } updateTablature(); }else{ if( applyToAllTracks ){ TGSong song = getSongManager().getSong(); for( int i = 0 ; i < song.countTracks() ; i ++ ){ TGTrack track = song.getTrack( i ); TGMeasure measure = getSongManager().getTrackManager().getMeasure(track, caret.getMeasure().getNumber() ); if( measure != null ){ transposeMeasure( undoableJoined, measure, transposition , tryKeepString , applyToChords); } } } else { transposeMeasure( undoableJoined , caret.getMeasure(), transposition , tryKeepString , applyToChords); } fireUpdate( caret.getMeasure().getNumber() ); } //termia el undoable if( !undoableJoined.isEmpty() ){ addUndoableEdit(undoableJoined.endUndo()); } TuxGuitar.instance().getFileHistory().setUnsavedFile(); } public void transposeMeasure( UndoableJoined undoableJoined , TGMeasure measure, int transposition , boolean tryKeepString , boolean applyToChords ) { if( transposition != 0 && !measure.getTrack().isPercussionTrack() ){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo( measure ); getSongManager().getMeasureManager().transposeNotes( measure , transposition , tryKeepString , applyToChords , -1 ); //termia el undoable undoableJoined.addUndoableEdit( undoable.endUndo( measure ) ); } } public void transposeTrack( UndoableJoined undoableJoined , TGTrack track, int transposition , boolean tryKeepString , boolean applyToChords ) { if( transposition != 0 && !track.isPercussionTrack() ){ //comienza el undoable UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo( track ); getSongManager().getTrackManager().transposeNotes( track , transposition , tryKeepString , applyToChords, -1 ); //termia el undoable undoableJoined.addUndoableEdit( undoable.endUndo( track ) ); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/AddTrackAction.java0000644000175000017500000000257111273045224031166 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableAddTrack; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AddTrackAction extends Action{ public static final String NAME = "action.track.add"; public AddTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableAddTrack undoable = UndoableAddTrack.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); Caret caret = getEditor().getTablature().getCaret(); TGTrack track = getSongManager().createTrack(); updateTablature(); caret.update(track.getNumber(),caret.getPosition(),1); TuxGuitar.instance().getMixer().update(); //termia el undoable addUndoableEdit(undoable.endUndo(track)); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/CloneTrackAction.java0000644000175000017500000000242611273045224031535 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableCloneTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CloneTrackAction extends Action{ public static final String NAME = "action.track.clone"; public CloneTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableCloneTrack undoable = UndoableCloneTrack.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); Caret caret = getEditor().getTablature().getCaret(); getSongManager().cloneTrack(caret.getTrack()); updateTablature(); TuxGuitar.instance().getMixer().update(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/EditLyricsAction.java0000644000175000017500000000165611273045224031567 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class EditLyricsAction extends Action{ public static final String NAME = "action.track.lyrics"; public EditLyricsAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getLyricEditor().isDisposed()){ TuxGuitar.instance().getLyricEditor().show(); }else{ TuxGuitar.instance().getLyricEditor().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoFirstTrackAction.java0000644000175000017500000000175011273045224032051 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoFirstTrackAction extends Action{ public static final String NAME = "action.track.go-first"; public GoFirstTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGTrack track = getSongManager().getFirstTrack(); if(track != null){ caret.update(track.getNumber()); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoLastTrackAction.java0000644000175000017500000000174411273045224031670 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoLastTrackAction extends Action{ public static final String NAME = "action.track.go-last"; public GoLastTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGTrack track = getSongManager().getLastTrack(); if(track != null){ caret.update(track.getNumber()); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoNextTrackAction.java0000644000175000017500000000200011273045224031665 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoNextTrackAction extends Action{ public static final String NAME = "action.track.go-next"; public GoNextTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber() + 1); if(track != null){ caret.update(track.getNumber()); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoPreviousTrackAction.java0000644000175000017500000000201411273045224032570 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoPreviousTrackAction extends Action{ public static final String NAME = "action.track.go-previous"; public GoPreviousTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber() - 1); if(track != null){ caret.update(track.getNumber()); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoToTrackAction.java0000644000175000017500000000165511273045224031350 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class GoToTrackAction extends Action{ public static final String NAME = "action.track.goto"; public GoToTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE); } protected int execute(TypedEvent e){ Object data = e.widget.getData(); if(data instanceof TGTrackImpl){ TGTrackImpl track = (TGTrackImpl)data; getEditor().getTablature().getCaret().update(track.getNumber()); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackDownAction.java0000644000175000017500000000260511273045224032232 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableMoveTrackDown; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MoveTrackDownAction extends Action{ public static final String NAME = "action.track.move-down"; public MoveTrackDownAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMoveTrackDown undoable = UndoableMoveTrackDown.startUndo(); Caret caret = getEditor().getTablature().getCaret(); TGTrack track = caret.getTrack(); if(getSongManager().moveTrackDown(track)){ updateTablature(); TuxGuitar.instance().getMixer().update(); //termia el undoable addUndoableEdit(undoable.endUndo(track)); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackUpAction.java0000644000175000017500000000256711273045224031716 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableMoveTrackUp; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MoveTrackUpAction extends Action{ public static final String NAME = "action.track.move-up"; public MoveTrackUpAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ //comienza el undoable UndoableMoveTrackUp undoable = UndoableMoveTrackUp.startUndo(); Caret caret = getEditor().getTablature().getCaret(); TGTrack track = caret.getTrack(); if(getSongManager().moveTrackUp(track)){ updateTablature(); TuxGuitar.instance().getMixer().update(); //termia el undoable addUndoableEdit(undoable.endUndo(track)); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/RemoveTrackAction.java0000644000175000017500000000374211273045224031734 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableRemoveTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class RemoveTrackAction extends Action{ public static final String NAME = "action.track.remove"; public RemoveTrackAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ Caret caret = getEditor().getTablature().getCaret(); if(getSongManager().getSong().countTracks() <= 1){ //TuxGuitar.instance().getAction(NewFileAction.NAME).process(e); TuxGuitar.instance().newSong(); return 0; } //comienza el undoable UndoableRemoveTrack undoable = UndoableRemoveTrack.startUndo(); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TGTrackImpl track = caret.getTrack(); TGTrackImpl nextCaretTrack = (TGTrackImpl)getSongManager().getTrack(track.getNumber() + 1); if(nextCaretTrack == null){ nextCaretTrack = (TGTrackImpl)getSongManager().getTrack(track.getNumber() - 1); } getSongManager().removeTrack(track); updateTablature(); //move the caret to the next or previous track if(nextCaretTrack != null){ caret.update(nextCaretTrack.getNumber(),getSongManager().getTrackManager().getMeasureAt(nextCaretTrack, caret.getMeasure().getStart()).getStart(),1); } TuxGuitar.instance().getMixer().update(); //termia el undoable addUndoableEdit(undoable.endUndo()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/TrackPropertiesAction.java0000644000175000017500000006437711273045224032646 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.track; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackInfo; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackInstrument; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.TGMusicKeyUtils; import org.herac.tuxguitar.player.base.MidiInstrument; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TrackPropertiesAction extends Action { public static final String NAME = "action.track.properties"; private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_TUNING); private static final int MINIMUM_LEFT_CONTROLS_WIDTH = 180; private static final int MINIMUM_BUTTON_WIDTH = 80; private static final int MINIMUM_BUTTON_HEIGHT = 25; private static final int MAX_STRINGS = 7; private static final int MIN_STRINGS = 4; private static final int MAX_OCTAVES = 10; private static final int MAX_NOTES = 12; protected Shell dialog; protected Text nameText; protected TGColor trackColor; protected List tempStrings; protected Button stringTransposition; protected Button stringTranspositionTryKeepString; protected Button stringTranspositionApplyToChords; protected Spinner stringCountSpinner; protected Combo[] stringCombos = new Combo[MAX_STRINGS]; protected Combo offsetCombo; protected int stringCount; protected Combo instrumentCombo; protected Button percussionCheckBox; protected Color colorButtonValue; public TrackPropertiesAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ showDialog(getEditor().getTablature().getShell()); return 0; } public void showDialog(Shell shell) { TGTrackImpl track = getEditor().getTablature().getCaret().getTrack(); if (track != null) { this.stringCount = track.getStrings().size(); this.trackColor = track.getColor().clone(getSongManager().getFactory()); this.initTempStrings(track.getStrings()); this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout(2,false)); this.dialog.setText(TuxGuitar.getProperty("track.properties")); Composite left = new Composite(this.dialog,SWT.NONE); left.setLayout(new GridLayout()); left.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite right = new Composite(this.dialog,SWT.NONE); right.setLayout(new GridLayout()); right.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite bottom = new Composite(this.dialog, SWT.NONE); bottom.setLayout(new GridLayout(2,false)); bottom.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true,2,1)); //GENERAL initTrackInfo(makeGroup(left,1,TuxGuitar.getProperty("track.properties.general")), track); //INSTRUMENT initInstrumentFields(makeGroup(left,1,TuxGuitar.getProperty("instrument.instrument")), track); //TUNING initTuningInfo(makeGroup(right,2,TuxGuitar.getProperty("tuning")), track); //BUTTONS initButtons(bottom); updateTuningGroup(!track.isPercussionTrack()); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } private Group makeGroup(Composite parent,int horizontalSpan,String text){ Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setLayoutData(makeGridData(horizontalSpan)); group.setText(text); return group; } private GridData makeGridData(int horizontalSpan){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.horizontalSpan = horizontalSpan; return data; } public GridData getButtonsData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = MINIMUM_BUTTON_WIDTH; data.minimumHeight = MINIMUM_BUTTON_HEIGHT; return data; } private void initTrackInfo(Composite composite,TGTrackImpl track) { composite.setLayout(new GridLayout(/*2,false*/)); Composite top = new Composite(composite, SWT.NONE); top.setLayout(new GridLayout(/*2,false*/)); top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); Composite bottom = new Composite(composite, SWT.NONE); bottom.setLayout(new GridLayout(/*2,false*/)); bottom.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true)); //-----------------------NAME--------------------------------- Label nameLabel = new Label(top, SWT.NONE); nameLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); nameLabel.setText(TuxGuitar.getProperty("track.name") + ":"); this.nameText = new Text(top, SWT.BORDER); this.nameText.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL)); this.nameText.setText(track.getName()); //-----------------------COLOR--------------------------------- Label colorLabel = new Label(bottom, SWT.NONE); colorLabel.setText(TuxGuitar.getProperty("track.color") + ":"); colorLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); final Button colorButton = new Button(bottom, SWT.PUSH); colorButton.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL)); colorButton.setText(TuxGuitar.getProperty("choose")); colorButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ColorDialog dlg = new ColorDialog(TrackPropertiesAction.this.dialog); dlg.setRGB(TrackPropertiesAction.this.dialog.getDisplay().getSystemColor(SWT.COLOR_BLACK).getRGB()); dlg.setText(TuxGuitar.getProperty("choose-color")); RGB rgb = dlg.open(); if (rgb != null) { TrackPropertiesAction.this.trackColor.setR(rgb.red); TrackPropertiesAction.this.trackColor.setG(rgb.green); TrackPropertiesAction.this.trackColor.setB(rgb.blue); TrackPropertiesAction.this.setButtonColor(colorButton); } } }); colorButton.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { TrackPropertiesAction.this.disposeButtonColor(); } }); this.setButtonColor(colorButton); } private void initTuningInfo(Composite composite,TGTrackImpl track) { composite.setLayout(new GridLayout(2,false)); initTuningData(composite,track); initTuningCombos(composite); //initTuningOptions(composite); } private void initTuningCombos(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(/*MAX_STRINGS, false*/)); composite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,false,true)); String[] tuningTexts = getAllValueNames(); for (int i = 0; i < MAX_STRINGS; i++) { this.stringCombos[i] = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); this.stringCombos[i].setItems(tuningTexts); } } private void initTuningData(Composite parent,TGTrackImpl track) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); Composite top = new Composite(composite, SWT.NONE); top.setLayout(new GridLayout()); top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); Composite middle = new Composite(composite, SWT.NONE); middle.setLayout(new GridLayout()); middle.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); Composite bottom = new Composite( composite , SWT.NONE ); bottom.setLayout( new GridLayout() ); bottom.setLayoutData( new GridData(SWT.FILL,SWT.TOP,true,true) ); //---------------------------------STRING-------------------------------- Label stringCountLabel = new Label(top, SWT.NONE); stringCountLabel.setText(TuxGuitar.getProperty("tuning.strings") + ":"); stringCountLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); this.stringCountSpinner = new Spinner(top, SWT.BORDER); this.stringCountSpinner.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); //this.stringCountSpinner.setLayoutData(getAlignmentData(80,SWT.FILL)); this.stringCountSpinner.setMinimum(MIN_STRINGS); this.stringCountSpinner.setMaximum(MAX_STRINGS); this.stringCountSpinner.setSelection(this.stringCount); this.stringCountSpinner.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TrackPropertiesAction.this.stringCount = TrackPropertiesAction.this.stringCountSpinner.getSelection(); setDefaultTuning(); updateTuningGroup(!TrackPropertiesAction.this.percussionCheckBox.getSelection()); } }); //---------------------------------OFFSET-------------------------------- Label offsetLabel = new Label(middle, SWT.NONE); offsetLabel.setText(TuxGuitar.getProperty("tuning.offset") + ":"); offsetLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); this.offsetCombo = new Combo(middle, SWT.DROP_DOWN | SWT.READ_ONLY); //this.offsetCombo.setLayoutData(getAlignmentData(80,SWT.LEFT)); this.offsetCombo.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); for(int i = TGTrack.MIN_OFFSET;i <= TGTrack.MAX_OFFSET;i ++){ this.offsetCombo.add(Integer.toString(i)); if(i == track.getOffset()){ this.offsetCombo.select(i - TGTrack.MIN_OFFSET); } } //---------------------------------OPTIONS---------------------------------- this.stringTransposition = new Button( bottom , SWT.CHECK ); this.stringTransposition.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) ); this.stringTransposition.setText(TuxGuitar.getProperty("tuning.strings.transpose")); this.stringTransposition.setSelection( true ); this.stringTranspositionApplyToChords = new Button( bottom , SWT.CHECK ); this.stringTranspositionApplyToChords.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) ); this.stringTranspositionApplyToChords.setText(TuxGuitar.getProperty("tuning.strings.transpose.apply-to-chords")); this.stringTranspositionApplyToChords.setSelection( true ); this.stringTranspositionTryKeepString = new Button( bottom , SWT.CHECK ); this.stringTranspositionTryKeepString.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) ); this.stringTranspositionTryKeepString.setText(TuxGuitar.getProperty("tuning.strings.transpose.try-keep-strings")); this.stringTranspositionTryKeepString.setSelection( true ); this.stringTransposition.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button stringTransposition = TrackPropertiesAction.this.stringTransposition; Button stringTranspositionApplyToChords = TrackPropertiesAction.this.stringTranspositionApplyToChords; Button stringTranspositionTryKeepString = TrackPropertiesAction.this.stringTranspositionTryKeepString; stringTranspositionApplyToChords.setEnabled( ( stringTransposition.isEnabled() && stringTransposition.getSelection() ) ); stringTranspositionTryKeepString.setEnabled( ( stringTransposition.isEnabled() && stringTransposition.getSelection() ) ); } }); } private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){ GridData data = new GridData(); data.minimumWidth = minimumWidth; data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = SWT.DEFAULT; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; return data; } private void initButtons(final Composite parent) { Button buttonOK = new Button(parent, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonsData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { updateTrackProperties(); TrackPropertiesAction.this.dialog.dispose(); } }); Button buttonCancel = new Button(parent, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonsData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TrackPropertiesAction.this.dialog.dispose(); } }); this.dialog.setDefaultButton( buttonOK ); } private void initInstrumentFields(Composite composite,TGTrackImpl track) { composite.setLayout(new GridLayout()); Composite top = new Composite(composite, SWT.NONE); top.setLayout(new GridLayout()); top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); Composite bottom = new Composite(composite, SWT.NONE); bottom.setLayout(new GridLayout()); bottom.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true)); //------------Instrument Combo------------------------------------- Label instrumentLabel = new Label(top, SWT.NONE); instrumentLabel.setText(TuxGuitar.getProperty("instrument.instrument") + ":"); instrumentLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); this.instrumentCombo = new Combo(top, SWT.DROP_DOWN | SWT.READ_ONLY); this.instrumentCombo.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL)); MidiInstrument[] instruments = TuxGuitar.instance().getPlayer().getInstruments(); if (instruments != null) { int count = instruments.length; if (count > 128) { count = 128; } for (int i = 0; i < count; i++) { this.instrumentCombo.add(instruments[i].getName()); } this.instrumentCombo.select(track.getChannel().getInstrument()); } this.instrumentCombo.setEnabled(!track.isPercussionTrack() && instruments != null); //--------------------Precusion CheckBox------------------------------- this.percussionCheckBox = new Button(bottom, SWT.CHECK); this.percussionCheckBox.setText(TuxGuitar.getProperty("instrument.percussion-track")); this.percussionCheckBox.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); if (instruments != null) { this.percussionCheckBox.setSelection(track.isPercussionTrack()); this.percussionCheckBox.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TrackPropertiesAction.this.instrumentCombo.setEnabled(!TrackPropertiesAction.this.percussionCheckBox.getSelection()); setDefaultTuning(); updateTuningGroup(!TrackPropertiesAction.this.percussionCheckBox.getSelection()); } }); } else { this.percussionCheckBox.setEnabled(false); } //----------------------------------------------------------- } protected void updateTrackProperties() { final TGTrackImpl track = getEditor().getTablature().getCaret().getTrack(); final String trackName = this.nameText.getText(); final List strings = new ArrayList(); for (int i = 0; i < this.stringCount; i++) { strings.add(TGSongManager.newString(getSongManager().getFactory(),(i + 1), this.stringCombos[i].getSelectionIndex())); } final boolean percussion = this.percussionCheckBox.getSelection(); final int offset = ((percussion)?0:TGTrack.MIN_OFFSET + this.offsetCombo.getSelectionIndex()); final int instrument = ((this.instrumentCombo.getSelectionIndex() >= 0)?this.instrumentCombo.getSelectionIndex():0); final TGColor trackColor = this.trackColor; final boolean infoChanges = hasInfoChanges(track,trackName,trackColor,offset); final boolean tuningChanges = hasTuningChanges(track,strings); final boolean instrumentChanges = hasInstrumentChanges(track,instrument,percussion); final boolean transposeStrings = (this.stringTransposition.getSelection() && !percussion && !track.isPercussionTrack() ); final boolean transposeApplyToChords = (transposeStrings && this.stringTranspositionApplyToChords.getSelection()); final boolean transposeTryKeepString = (transposeStrings && this.stringTranspositionTryKeepString.getSelection()); try { if(infoChanges || tuningChanges || instrumentChanges){ ActionLock.lock(); TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread( new Runnable() { public void run() { TuxGuitar.instance().getFileHistory().setUnsavedFile(); UndoableJoined undoable = new UndoableJoined(); UndoableTrackGeneric undoableGeneric = null; if(tuningChanges){ undoableGeneric = UndoableTrackGeneric.startUndo(track); } //--------------------------------------info--------------------------------------- if(infoChanges){ UndoableTrackInfo undoableInfo = null; if(!tuningChanges){ undoableInfo = UndoableTrackInfo.startUndo(track); } getSongManager().getTrackManager().changeInfo(track,trackName,trackColor,offset); if(!tuningChanges && undoableInfo != null){ undoable.addUndoableEdit(undoableInfo.endUndo(track)); } } //--------------------------------------tuning--------------------------------------- if(tuningChanges){ updateTrackTunings(track, strings, transposeStrings, transposeTryKeepString, transposeApplyToChords); } //-----------------------------instrument---------------------------------------------- if(instrumentChanges){ UndoableTrackInstrument undoableInstrument = null; if(!tuningChanges){ undoableInstrument = UndoableTrackInstrument.startUndo(track); } getSongManager().getTrackManager().changeInstrument(track,instrument,percussion); if(!tuningChanges && undoableInstrument != null){ undoable.addUndoableEdit(undoableInstrument.endUndo(track)); } } if(tuningChanges && undoableGeneric != null){ undoable.addUndoableEdit(undoableGeneric.endUndo(track)); } addUndoableEdit(undoable.endUndo()); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ updateTablature(); TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().updateCache( true ); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } }).start(); } }); } } catch (Throwable throwable) { TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); throwable.printStackTrace(); } } protected boolean hasInfoChanges(TGTrackImpl track,String name,TGColor color,int offset){ if(!name.equals(track.getName())){ return true; } if(!color.isEqual(track.getColor())){ return true; } if(offset != track.getOffset()){ return true; } return false; } protected boolean hasInstrumentChanges(TGTrackImpl track,int instrument,boolean percussion){ return ((track.getChannel().getInstrument() != instrument) || (track.isPercussionTrack() != percussion)); } protected boolean hasTuningChanges(TGTrackImpl track,List newStrings){ List oldStrings = track.getStrings(); //check the number of strings if(oldStrings.size() != newStrings.size()){ return true; } //check the tuning of strings for(int i = 0;i < oldStrings.size();i++){ TGString oldString = (TGString)oldStrings.get(i); boolean stringExists = false; for(int j = 0;j < newStrings.size();j++){ TGString newString = (TGString)newStrings.get(j); if(newString.isEqual(oldString)){ stringExists = true; } } if(!stringExists){ return true; } } return false; } protected void updateTrackTunings(TGTrackImpl track, List strings, boolean transposeStrings , boolean transposeTryKeepString , boolean transposeApplyToChords ){ int[] transpositions = getStringTranspositions(track, strings); getSongManager().getTrackManager().changeInstrumentStrings(track,strings); if( transposeStrings ){ getSongManager().getTrackManager().transposeNotes(track, transpositions, transposeTryKeepString, transposeApplyToChords ); } } protected int[] getStringTranspositions(TGTrackImpl track, List newStrings ){ int[] transpositions = new int[ newStrings.size() ]; TGString newString = null; TGString oldString = null; for( int index = 0; index < transpositions.length ; index ++ ){ for( int i = 0; i < track.stringCount() ; i ++ ){ TGString string = track.getString( i + 1 ); if( string.getNumber() == (index + 1) ){ oldString = string; break; } } for( int i = 0; i < newStrings.size() ; i ++ ){ TGString string = (TGString)newStrings.get( i ); if( string.getNumber() == (index + 1) ){ newString = string; break; } } if( oldString != null && newString != null ){ transpositions[ index ] = (oldString.getValue() - newString.getValue()); }else{ transpositions[ index ] = 0; } newString = null; oldString = null; } return transpositions; } protected void setButtonColor(Button button){ Color color = new Color(this.dialog.getDisplay(), this.trackColor.getR(), this.trackColor.getG(), this.trackColor.getB()); button.setForeground( color ); this.disposeButtonColor(); this.colorButtonValue = color; } protected void disposeButtonColor(){ if(this.colorButtonValue != null && !this.colorButtonValue.isDisposed()){ this.colorButtonValue.dispose(); this.colorButtonValue = null; } } protected void updateTuningGroup(boolean enabled) { for (int i = 0; i < this.tempStrings.size(); i++) { TGString string = (TGString)this.tempStrings.get(i); this.stringCombos[i].select(string.getValue()); this.stringCombos[i].setVisible(true); this.stringCombos[i].setEnabled(enabled); } for (int i = this.tempStrings.size(); i < MAX_STRINGS; i++) { this.stringCombos[i].select(0); this.stringCombos[i].setVisible(false); } this.offsetCombo.setEnabled(enabled); this.stringTransposition.setEnabled(enabled); this.stringTranspositionApplyToChords.setEnabled(enabled && this.stringTransposition.getSelection()); this.stringTranspositionTryKeepString.setEnabled(enabled && this.stringTransposition.getSelection()); } protected void initTempStrings(List realStrings) { this.tempStrings = new ArrayList(); for (int i = 0; i < realStrings.size(); i++) { TGString realString = (TGString) realStrings.get(i); this.tempStrings.add(realString.clone(getSongManager().getFactory())); } } protected void setDefaultTuning() { this.tempStrings.clear(); if (this.percussionCheckBox.getSelection()) { for (int i = 1; i <= this.stringCount; i++) { this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),i, 0)); } } else { switch (this.stringCount) { case 7: this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 64)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 59)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 55)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 50)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 45)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),6, 40)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),7, 35)); break; case 6: this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 64)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 59)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 55)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 50)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 45)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),6, 40)); break; case 5: this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 43)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 38)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 33)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 28)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 23)); break; case 4: this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 43)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 38)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 33)); this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 28)); break; default: for( int i = 1 ; i <= this.stringCount ; i ++ ){ this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),i,0)); } break; } } } protected String[] getAllValueNames() { String[] valueNames = new String[MAX_NOTES * MAX_OCTAVES]; for (int i = 0; i < valueNames.length; i++) { valueNames[i] = NOTE_NAMES[ (i - ((i / MAX_NOTES) * MAX_NOTES) ) ] + (i / MAX_NOTES); } return valueNames; } }././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportMetronomeAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportMetronomeAction.j0000644000175000017500000000112311273045225033624 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions.transport; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; public class TransportMetronomeAction extends Action { public static final String NAME = "action.transport.metronome"; public TransportMetronomeAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TuxGuitar.instance().getPlayer().setMetronomeEnabled(!TuxGuitar.instance().getPlayer().isMetronomeEnabled()); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportModeAction.java0000644000175000017500000004100211273045225033233 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.transport; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.player.base.MidiPlayerMode; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGSong; /** * @author julian * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class TransportModeAction extends Action { public static final String NAME = "action.transport.mode"; protected static final int MIN_SELECTION = 1; protected static final int MAX_SELECTION = 500; protected static final int[] DEFAULT_PERCENTS = new int[]{25,50,75,100,125,150,175,200}; protected Button simple; protected Button simpleLoop; protected Combo simplePercent; protected Button custom; protected Spinner customFrom; protected Spinner customTo; protected Spinner customIncrement; protected MHeaderCombo loopSHeader; protected MHeaderCombo loopEHeader; public TransportModeAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ this.showDialog(e.widget.getDisplay().getActiveShell(), TuxGuitar.instance().getPlayer().getMode()); return 0; } public void showDialog(final Shell parent,final MidiPlayerMode mode) { final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("transport.mode")); // ---------------------------------------------------------------------- Composite radios = new Composite(dialog, SWT.NONE); radios.setLayout(new GridLayout()); radios.setLayoutData(getMainData()); //---Simple--- this.simple = new Button(radios, SWT.RADIO); this.simple.setText(TuxGuitar.getProperty("transport.mode.simple")); this.simple.setSelection(mode.getType() == MidiPlayerMode.TYPE_SIMPLE); RadioSelectionAdapter simpleAdapter = new RadioSelectionAdapter(this.simple); Group simpleGroup = new Group(radios, SWT.SHADOW_ETCHED_IN); simpleGroup.setLayout(new GridLayout(2,false)); simpleGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); simpleGroup.setText(TuxGuitar.getProperty("transport.mode.simple")); simpleAdapter.addControl(simpleGroup); simpleAdapter.addControl(makeLabel(simpleGroup, TuxGuitar.getProperty("transport.mode.simple.tempo-percent"),SWT.LEFT,1)); this.simplePercent = new Combo(simpleGroup, SWT.DROP_DOWN | SWT.READ_ONLY); this.simplePercent.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); for(int i = 0; i < DEFAULT_PERCENTS.length; i ++){ this.simplePercent.add(Integer.toString(DEFAULT_PERCENTS[i]) + "%",i); if(mode.getSimplePercent() == DEFAULT_PERCENTS[i]){ this.simplePercent.select(i); } } simpleAdapter.addControl(this.simplePercent); this.simpleLoop = new Button(simpleGroup, SWT.CHECK); this.simpleLoop.setText(TuxGuitar.getProperty("transport.mode.simple.loop")); this.simpleLoop.setSelection(mode.isLoop()); simpleAdapter.addControl(this.simpleLoop); GridData loopedData = new GridData(SWT.FILL,SWT.FILL,true,true); loopedData.horizontalSpan = 2; this.simpleLoop.setLayoutData(loopedData); //---Trainer--- this.custom = new Button(radios, SWT.RADIO); this.custom.setText(TuxGuitar.getProperty("transport.mode.trainer")); this.custom.setSelection(mode.getType() == MidiPlayerMode.TYPE_CUSTOM); RadioSelectionAdapter customAdapter = new RadioSelectionAdapter(this.custom); Group trainerGroup = new Group(radios, SWT.SHADOW_ETCHED_IN); trainerGroup.setLayout(new GridLayout(6,false)); trainerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); trainerGroup.setText(TuxGuitar.getProperty("transport.mode.trainer")); customAdapter.addControl(trainerGroup); customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("composition.tempo"),SWT.LEFT,1)); this.customFrom = new Spinner(trainerGroup,SWT.BORDER); this.customFrom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.customFrom.setMinimum(MIN_SELECTION); this.customFrom.setMaximum(MAX_SELECTION); this.customFrom.setSelection(mode.getCustomPercentFrom()); customAdapter.addControl(this.customFrom); customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1)); customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("edit.to"),SWT.RIGHT,1)); this.customTo = new Spinner(trainerGroup,SWT.BORDER); this.customTo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.customTo.setMinimum(MIN_SELECTION); this.customTo.setMaximum(MAX_SELECTION); this.customTo.setSelection(mode.getCustomPercentTo()); customAdapter.addControl(this.customTo); customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1)); customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("transport.mode.trainer.increment-description"),SWT.LEFT,4)); this.customIncrement = new Spinner(trainerGroup,SWT.BORDER); this.customIncrement.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.customIncrement.setMinimum(MIN_SELECTION); this.customIncrement.setMaximum(MAX_SELECTION); this.customIncrement.setSelection(mode.getCustomPercentIncrement()); customAdapter.addControl(this.customIncrement); customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1)); SpinnerSelectionAdapter spinnerAdapter = new SpinnerSelectionAdapter(this.customFrom,this.customTo,this.customIncrement); this.customFrom.addSelectionListener(spinnerAdapter); this.customTo.addSelectionListener(spinnerAdapter); this.customIncrement.addSelectionListener(spinnerAdapter); //--- Loop Range --- MHeaderRangeStatus mHeaderRangeStatus = new MHeaderRangeStatus(this.simple,this.simpleLoop,this.custom); Group rangeGroup = new Group(radios, SWT.SHADOW_ETCHED_IN); rangeGroup.setLayout(new GridLayout(2,false)); rangeGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); rangeGroup.setText(TuxGuitar.getProperty("transport.mode.loop-range")); mHeaderRangeStatus.addControl( rangeGroup ); mHeaderRangeStatus.addControl( makeLabel(rangeGroup, TuxGuitar.getProperty("transport.mode.loop-range.from"), SWT.LEFT, 1) ); this.loopSHeader = new MHeaderCombo(rangeGroup); mHeaderRangeStatus.addControl( this.loopSHeader.getControl() ); mHeaderRangeStatus.addControl( makeLabel(rangeGroup, TuxGuitar.getProperty("transport.mode.loop-range.to"), SWT.LEFT, 1) ); this.loopEHeader = new MHeaderCombo(rangeGroup); mHeaderRangeStatus.addControl( this.loopEHeader.getControl() ); MHeaderComboController mHeaderController = new MHeaderComboController(this.loopSHeader, this.loopEHeader); mHeaderController.updateLoopSHeader( mode.getLoopSHeader() ); mHeaderController.updateLoopEHeader( mode.getLoopSHeader() , mode.getLoopEHeader() ); mHeaderController.appendListener(); simpleAdapter.update(); customAdapter.update(); mHeaderRangeStatus.update(); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { updateMode(mode); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridData getMainData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 350; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private Label makeLabel(Composite parent,String text,int aligment,int horizontalSpan){ Label label = new Label(parent,SWT.CENTER | aligment); label.setText(text); GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true); data.horizontalSpan = horizontalSpan; label.setLayoutData(data); return label; } protected void updateMode(MidiPlayerMode mode){ int type = (this.custom.getSelection())?MidiPlayerMode.TYPE_CUSTOM:MidiPlayerMode.TYPE_SIMPLE; boolean loop = (type == MidiPlayerMode.TYPE_CUSTOM || (type == MidiPlayerMode.TYPE_SIMPLE && this.simpleLoop.getSelection())); mode.setType(type); mode.setLoop( loop ); mode.setSimplePercent( this.simplePercent.getSelectionIndex() >= 0?DEFAULT_PERCENTS[this.simplePercent.getSelectionIndex()]:MidiPlayerMode.DEFAULT_TEMPO_PERCENT); mode.setCustomPercentFrom(this.customFrom.getSelection()); mode.setCustomPercentTo(this.customTo.getSelection()); mode.setCustomPercentIncrement(this.customIncrement.getSelection()); mode.setLoopSHeader( ( loop ? this.loopSHeader.getValue() : -1 ) ); mode.setLoopEHeader( ( loop ? this.loopEHeader.getValue() : -1 ) ); //mode.setLoopSHeader( ( loop && this.loopSHeader.getSelectionIndex() > 0 ? this.loopSHeader.getSelectionIndex() : -1 ) ); //mode.setLoopEHeader( ( loop && this.loopEHeader.getSelectionIndex() > 0 ? this.loopEHeader.getSelectionIndex() : -1 ) ); mode.reset(); } private class RadioSelectionAdapter extends SelectionAdapter{ private Button control; private List controls; public RadioSelectionAdapter(Button control) { this.controls = new ArrayList(); this.control = control; this.control.addSelectionListener(this); } public void addControl(Control control){ this.controls.add(control); } public void update(){ boolean enabled = this.control.getSelection(); Iterator it = this.controls.iterator(); while(it.hasNext()){ Control control = (Control)it.next(); control.setEnabled(enabled); } } public void widgetSelected(SelectionEvent e) { update(); } } private class SpinnerSelectionAdapter extends SelectionAdapter{ private Spinner to; private Spinner from; private Spinner increment; public SpinnerSelectionAdapter(Spinner from,Spinner to, Spinner increment) { this.from = from; this.to = to; this.increment = increment; } public void widgetSelected(SelectionEvent e) { if(e.widget.equals(this.from)){ if(this.from.getSelection() < MIN_SELECTION){ this.from.setSelection(MIN_SELECTION); }else if(this.from.getSelection() >= this.to.getSelection()){ this.from.setSelection(this.to.getSelection() - 1); } }else if(e.widget.equals(this.to)){ if(this.to.getSelection() <= this.from.getSelection()){ this.to.setSelection(this.from.getSelection() + 1); }else if(this.to.getSelection() > MAX_SELECTION){ this.to.setSelection(MAX_SELECTION); } } if(this.increment.getSelection() > (this.to.getSelection() - this.from.getSelection())){ this.increment.setSelection(this.to.getSelection() - this.from.getSelection()); } } } private class MHeaderRangeStatus extends SelectionAdapter{ private List controls; private boolean enabled; private Button simpleMode; private Button simpleLoop; private Button customLoop; public MHeaderRangeStatus(Button simpleMode, Button simpleLoop, Button customLoop) { this.controls = new ArrayList(); this.enabled = false; this.simpleMode = simpleMode; this.simpleLoop = simpleLoop; this.customLoop = customLoop; this.simpleMode.addSelectionListener(this); this.simpleLoop.addSelectionListener(this); this.customLoop.addSelectionListener(this); } public void addControl(Control control){ this.controls.add(control); } public void update(){ // Check enabled this.enabled = this.customLoop.getSelection(); if( !this.enabled ){ if( this.simpleMode.getSelection() ){ this.enabled = this.simpleLoop.getSelection(); } } // Update controls Iterator it = this.controls.iterator(); while(it.hasNext()){ Control control = (Control)it.next(); control.setEnabled( this.enabled ); } } public void widgetSelected(SelectionEvent e) { this.update(); } } private class MHeaderCombo { private List values; private Combo combo; public MHeaderCombo( Composite parent ){ this.values = new ArrayList(); this.combo = new Combo( parent, SWT.DROP_DOWN | SWT.READ_ONLY ); this.combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); } public Combo getControl(){ return this.combo; } public void clear(){ this.values.clear(); this.combo.removeAll(); } public void addItem( String text , int value ){ this.values.add( new Integer( value ) ); this.combo.add( text ); } public void addItem( TGMeasureHeader header ){ this.addItem( getItemText(header) , header.getNumber() ); } public void setValue( int value ){ for( int index = 0 ; index < this.values.size() ; index++ ){ Integer currentValue = (Integer) this.values.get( index ); if( currentValue != null && currentValue.intValue() == value ){ int currentIndex = this.combo.getSelectionIndex(); if( currentIndex != index ){ this.combo.select( index ); } } } } public int getValue(){ int index = this.combo.getSelectionIndex(); if( index >= 0 && index < this.values.size() ){ Integer value = (Integer) this.values.get( index ); if( value != null ){ return value.intValue(); } } return -1; } private String getItemText( TGMeasureHeader header ){ String text = ("#" + header.getNumber()); if( header.hasMarker() ){ text += (" (" + header.getMarker().getTitle() + ")"); } return text; } } private class MHeaderComboController { protected MHeaderCombo loopSHeader; protected MHeaderCombo loopEHeader; public MHeaderComboController(MHeaderCombo loopSHeader, MHeaderCombo loopEHeader){ this.loopSHeader = loopSHeader; this.loopEHeader = loopEHeader; } public void updateLoopSHeader( int sHeader ){ TGSong song = TuxGuitar.instance().getSongManager().getSong(); this.loopSHeader.clear(); this.loopSHeader.addItem(TuxGuitar.getProperty("transport.mode.loop-range.from-default"), -1 ); for(int i = 0; i < song.countMeasureHeaders() ; i ++){ TGMeasureHeader header = song.getMeasureHeader( i ); this.loopSHeader.addItem( header ); } this.loopSHeader.setValue( sHeader ); } public void updateLoopEHeader( int sHeader , int eHeader ){ TGSong song = TuxGuitar.instance().getSongManager().getSong(); this.loopEHeader.clear(); this.loopEHeader.addItem(TuxGuitar.getProperty("transport.mode.loop-range.to-default"), -1 ); for(int i = 0; i < song.countMeasureHeaders() ; i ++){ TGMeasureHeader header = song.getMeasureHeader( i ); if( sHeader == -1 || header.getNumber() >= sHeader ){ this.loopEHeader.addItem( header ); } } this.loopEHeader.setValue( eHeader ); } public void updateLoopEHeader(){ int sHeader = this.loopSHeader.getValue(); int eHeader = this.loopEHeader.getValue(); if( eHeader != -1 && sHeader > eHeader ){ eHeader = sHeader; } this.updateLoopEHeader( sHeader , eHeader ); } public void appendListener(){ this.loopSHeader.getControl().addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateLoopEHeader(); } }); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportPlayAction.java0000644000175000017500000000147211273045225033263 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.transport; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TransportPlayAction extends Action { public static final String NAME = "action.transport.play"; public TransportPlayAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TuxGuitar.instance().getTransport().play(); return 0; } }././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopEHeaderAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopEHeaderAct0000644000175000017500000000157611273045225033540 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions.transport; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.player.base.MidiPlayerMode; import org.herac.tuxguitar.song.models.TGMeasure; public class TransportSetLoopEHeaderAction extends Action { public static final String NAME = "action.transport.set-loop-end"; public TransportSetLoopEHeaderAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGMeasure measure = getEditor().getTablature().getCaret().getMeasure(); if( measure != null ){ MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode(); if( pm.isLoop() ){ pm.setLoopEHeader( pm.getLoopEHeader() != measure.getNumber() ? measure.getNumber() : -1 ); } } return 0; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopSHeaderAction.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopSHeaderAct0000644000175000017500000000160011273045225033542 0ustar julianjulianpackage org.herac.tuxguitar.gui.actions.transport; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.player.base.MidiPlayerMode; import org.herac.tuxguitar.song.models.TGMeasure; public class TransportSetLoopSHeaderAction extends Action { public static final String NAME = "action.transport.set-loop-start"; public TransportSetLoopSHeaderAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TGMeasure measure = getEditor().getTablature().getCaret().getMeasure(); if( measure != null ){ MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode(); if( pm.isLoop() ){ pm.setLoopSHeader( pm.getLoopSHeader() != measure.getNumber() ? measure.getNumber() : -1 ); } } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportStopAction.java0000644000175000017500000000147411273045225033305 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.transport; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TransportStopAction extends Action{ public static final String NAME = "action.transport.stop"; public TransportStopAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TuxGuitar.instance().getTransport().stop(); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowFretBoardAction.java0000644000175000017500000000213111273045225032061 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.view; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShowFretBoardAction extends Action{ public static final String NAME = "action.view.show-fretboard"; public ShowFretBoardAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); if(TuxGuitar.instance().getFretBoardEditor().isVisible()){ TuxGuitar.instance().getFretBoardEditor().hideFretBoard(); }else{ TuxGuitar.instance().getFretBoardEditor().showFretBoard(); } TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMatrixAction.java0000644000175000017500000000166411273045225031467 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.view; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShowMatrixAction extends Action{ public static final String NAME = "action.view.show-matrix"; public ShowMatrixAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getMatrixEditor().isDisposed()){ TuxGuitar.instance().getMatrixEditor().show(); }else{ TuxGuitar.instance().getMatrixEditor().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMixerAction.java0000644000175000017500000000163411273045225031304 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.view; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShowMixerAction extends Action{ public static final String NAME = "action.view.show-mixer"; public ShowMixerAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getMixer().isDisposed()){ TuxGuitar.instance().getMixer().show(); }else{ TuxGuitar.instance().getMixer().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowPianoAction.java0000644000175000017500000000165611273045225031272 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.view; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShowPianoAction extends Action{ public static final String NAME = "action.view.show-piano"; public ShowPianoAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getPianoEditor().isDisposed()){ TuxGuitar.instance().getPianoEditor().show(); }else{ TuxGuitar.instance().getPianoEditor().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowTransportAction.java0000644000175000017500000000166511273045225032220 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.view; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ShowTransportAction extends Action{ public static final String NAME = "action.view.show-transport"; public ShowTransportAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e){ if(TuxGuitar.instance().getTransport().isDisposed()){ TuxGuitar.instance().getTransport().show(); }else{ TuxGuitar.instance().getTransport().dispose(); } return 0; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorListener.java0000644000175000017500000000027011273045225032437 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; import java.util.List; public interface ChordCreatorListener { public void notifyChords(ChordCreatorUtil process, List chords); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorUtil.java0000644000175000017500000010446511273045225031602 0ustar julianjulian/* * Created on 31-dic-2005 * Redesigned on 05-March-2007 * */ package org.herac.tuxguitar.gui.editors.chord; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.song.models.TGChord; /** * * Class that helps to create a chord from information put in ChordSelector * dialog. * * Also contains ChordDatabase static field. * * @author Nikola Kolarovic * * @author julian * */ public class ChordCreatorUtil { /** * Maximum number of strings variable - has twin in TrackPropertiesAction * class */ public static final int MAX_STRINGS = 7; /** Maximum fret distance for a chord */ public static final int MAX_FRET_SPAN = 5; /** mark for bass note type **/ private final int BASS_INDEX = -1; /** mark for essential note in a chord - MUST be in */ private final int ESSENTIAL_INDEX = -2; /** mark for essential note in a chord - PENALTY if not in */ private final int NOT_ESSENTIAL_INDEX = -3; /** Keep the Thread control */ private static long runningProcess; // ------ attributes ------ //protected ChordInfo info; private long processId; private ChordCreatorListener listener; /** the alteration List selectionIndex */ private int alteration; private int chordIndex; /** essential notes for the chord (from ChordInfo) */ private int[] requiredNotes; /** notes that expand the chord (add+-) */ private int[] expandingNotes; /** is the fifth altered */ private int add5 = 0; /** name of a chord */ private String chordName = null; private int bassTonic; private int chordTonic; /** current tunning */ private int[] tuning; private ChordCreatorUtil(long processId,ChordCreatorListener listener){ this.processId = processId; this.listener = listener; } public boolean isValidProcess(){ return (this.processId == runningProcess); } public static long getNewProcess(){ return (++ runningProcess); } public static void getChords(final ChordCreatorListener listener, final int[] tuning, final int chordIndex, final int alteration, final int plusMinus, final boolean add, final int add5, final int add9, final int add11, final int bassTonic, final int chordTonic, final boolean sharp){ final ChordCreatorUtil chordCreator = new ChordCreatorUtil(getNewProcess(), listener ); new Thread(new Runnable() { public void run() { chordCreator.getChords( tuning, chordIndex, alteration, plusMinus, add, add5, add9, add11, bassTonic, chordTonic, sharp); } }).start(); } protected void getChords(int[] tuning, int chordIndex, int alteration, int plusMinus, boolean add, int add5, int add9, int add11, int bassTonic, int chordTonic, boolean sharp) { if(!isValidProcess()){ return; } this.add5 = add5; this.tuning = tuning; this.chordIndex = chordIndex; this.chordTonic = chordTonic; this.bassTonic = bassTonic; this.alteration = alteration; this.chordName = new ChordNamingConvention().createChordName(this.chordTonic, this.chordIndex, this.alteration, plusMinus, add, add5, add9, add11, this.bassTonic, sharp); // find the notes that expand the chord if (this.alteration!=0) { if (add) { this.expandingNotes = new int[1]; this.expandingNotes[0]= getAddNote(this.alteration-1,plusMinus); } else { // not just add... // 9+- = 7b !9(+-) (index=1) // 11+- = 7b !11(+-) 9(+-) (index=2) // 13+- = 7b !13(+-) 9(+-) 11(+-) (index=3) this.expandingNotes = new int[1+this.alteration]; this.expandingNotes[0] = 11; //7b this.expandingNotes[1] = getAddNote(this.alteration-1,plusMinus); //this.alteration+- // rest for (int i=2; i<=this.alteration; i++) this.expandingNotes[i]=getAddNote(i-2, i==2 ? add9 : add11); // @2=add9+-, @3=add11+- tone } } else this.expandingNotes=new int[0]; // Required notes //this.requiredNotes = ((ChordDatabase.ChordInfo)new ChordDatabase().getChords().get(chordIndex)).cloneRequireds(); this.requiredNotes = ChordDatabase.get(chordIndex).cloneRequireds(); //IT DON'T BUILD UNDER JRE1.4 //this.requiredNotes = ((ChordDatabase.ChordInfo) ChordCreatorUtil.getChordData().getChords().get(chordIndex)).getRequiredNotes().clone(); // adjust the subdominant if needed if (add5!=0) { for (int i=0; i0 && ChordSettings.instance().isEmptyStringChords()) find(this.tuning[string], string, 0, currentStringList); // if it's open chord but wanted to search from different minimal fret for (int fret = ChordSettings.instance().getFindChordsMin(); fret <= ChordSettings.instance().getFindChordsMax(); fret++) { // put in all the needed notes find(this.tuning[string], string, fret, currentStringList); } potentialNotes.add(currentStringList); } return potentialNotes; } /** * * Makes the all-possible combinations of found notes that can be reached by * fingers * * @param potentialNotes * list consisted of found notes for each string * * @return list of list of StringValues, with tones that can form a chord * */ private ArrayList makeCombinations(ArrayList potentialNotes) { if(!isValidProcess()){ return null; } // COMBINATIONS of strings used in a chord ArrayList stringCombination = new ArrayList(60); ArrayList lastLevelCombination = null; for (int i = 0; i < this.tuning.length - 1; i++) { lastLevelCombination = makeStringCombination(lastLevelCombination); // lastLevelCombination after 3rd round: [[0, 1, 2, 3], [0, 1, 2, // 4], [0, 1, 3, 4], [0, 2, 3, 4], [1, 2, 3, 4], [0, 1, 2, 5], [0, // 1, 3, 5], [0, 2, 3, 5], [1, 2, 3, 5], [0, 1, 4, 5], [0, 2, 4, 5], // [1, 2, 4, 5], [0, 3, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]] stringCombination.addAll(lastLevelCombination); } ArrayList combinations = new ArrayList(800); // --- combine the StringValues according to strings combination // ----------------------======= Iterator iterator = stringCombination.iterator(); while (iterator.hasNext()) { // go through all string combinations list // take a string combinations ArrayList currentStringCombination = (ArrayList) iterator.next(); lastLevelCombination = null; // go through all the strings in one combination for (int level = 0; level < currentStringCombination.size(); level++) { // take the string index int currentString = ((Integer) currentStringCombination.get(level)).intValue(); // take all the potential notes from currentString and combine // them with potential notes from other strings lastLevelCombination = makeStringValueCombination(lastLevelCombination,(ArrayList)potentialNotes.get(currentString)); // the structure of combinations is AL { AL(StringValue,SV,SV), // AL(SV), AL(SV,SV),AL(SV,SV,SV,SV,SV,SV) } } if(lastLevelCombination != null){ combinations.addAll(lastLevelCombination); } } return combinations; } /** * Makes a combination of string indices * * @param lastLevelCombination * structure to be expanded by current level * * @return structure of stringCombination is AL { AL(0), AL(0,1), * AL(0,2),AL(0,1,3,4),AL(0,1,2,3,4,5) } */ private ArrayList makeStringCombination(ArrayList lastLevelCombinationRef){ if(!isValidProcess()){ return null; } List lastLevelCombination = lastLevelCombinationRef; if (lastLevelCombination == null) { // first combination is AL { AL(0), AL(1), AL(2), AL(3), AL(4), // ...AL(tuning.length) } lastLevelCombination = new ArrayList(); for (int i = 0; i < this.tuning.length; i++) { lastLevelCombination.add(new ArrayList()); ((ArrayList) lastLevelCombination.get(i)).add(new Integer(i)); } } ArrayList thisLevelCombination = new ArrayList(); for (int current = 1; current < this.tuning.length; current++) { Iterator it = lastLevelCombination.iterator(); while (it.hasNext()) { ArrayList combination = (ArrayList) it.next(); Integer currentInteger = new Integer(current); if (((Integer) combination.get(combination.size() - 1)) .intValue() < current && !combination.contains(currentInteger)) { // check if the string is already in combination ArrayList newCombination = (ArrayList) combination.clone(); newCombination.add(currentInteger); thisLevelCombination.add(newCombination); } } } return thisLevelCombination; } /** * Makes a combination of notes by multiplying last combination and current * note arrays * * * * @param lastLevelCombination * structure to be expanded by current level * * @param notes * notes that can be considered into making a chord * * @return structure of StringValue combinations : AL { * AL(StringValue,SV,SV), AL(SV), AL(SV,SV),AL(SV,SV,SV,SV,SV,SV) } * */ private ArrayList makeStringValueCombination(ArrayList lastLevelCombination, ArrayList notes) { if(!isValidProcess()){ return null; } ArrayList thisLevelCombination = null; if (lastLevelCombination == null) { // initial combination thisLevelCombination = new ArrayList(notes.size()); for (int i = 0; i < notes.size(); i++) { thisLevelCombination.add(new ArrayList(6)); ((ArrayList) thisLevelCombination.get(i)).add(notes.get(i)); } // first combination is AL { AL(firstOne), AL(anotherFret) } } else { thisLevelCombination = new ArrayList(); for (int i = 0; i < notes.size(); i++) for (int j = 0; j < lastLevelCombination.size(); j++) { // cartesian multiplication ArrayList currentCombination = (ArrayList) ((ArrayList) lastLevelCombination.get(j)).clone(); currentCombination.add(notes.get(i)); // if the distance maximum between the existing frets // is less than wanted, add it into potential list if (checkCombination(currentCombination)) thisLevelCombination.add(currentCombination); } } return thisLevelCombination; } /** * Checks if the combination can be reached by fingers. It is reachable * * if the distance between lowest and highest fret is less than * * ChordCreatorUtil.MAX_FRET_SPAN. * * Also note that this method eliminates or includes the chords with empty * strings, * * which is controlled with boolean ChordCreatorUtil.EMPTY_STRING_CHORDS * * @param combination * current combination to be examined * * @return true if it can be reached * */ private boolean checkCombination(ArrayList combination) { Iterator it = combination.iterator(); int maxLeft, maxRight; maxLeft = maxRight = ((StringValue) combination.get(0)).getFret(); while (it.hasNext()) { int fret = ((StringValue) it.next()).getFret(); //chords with empty-string are welcome if (fret != 0 || !ChordSettings.instance().isEmptyStringChords()) { if (fret < maxLeft) maxLeft = fret; if (fret > maxRight) maxRight = fret; } } if (Math.abs(maxLeft - maxRight) >= MAX_FRET_SPAN) return false; return true; } /** * orders the StringValue ArrayList by their priority, calculated here * * for every single chord combination.
* * Priority is higher if:
* - tone combination has all notes required for the chord basis
* - has good chord semantics uses many basic tones, and all necessary * tones in their place
* - tone combination has all subsequent strings (no string skipping)
* - has a chord bass tone as lowest tone
* - uses more strings
* - uses good fingering positions
* * @param allCombinations * all the StringValue combinations that make some sense * * @return Treemap of the StringValue ArrayLists, in which the key is * * float priority. * */ private ArrayList determinePriority(ArrayList allCombinations) { if(!isValidProcess()){ return null; } ArrayList ordered = new ArrayList(); Iterator it = allCombinations.iterator(); while (it.hasNext() && isValidProcess()) { float priority = 0; ArrayList stringValueCombination = (ArrayList) it.next(); // tone combination has all notes required for the chord basis priority += combinationHasAllRequiredNotes(stringValueCombination); // uses good chord semantics priority += combinationChordSemantics(stringValueCombination); // tone combination has all subsequent strings (no string skipping) priority += combinationHasSubsequentStrings(stringValueCombination); // has a chord bass tone as lowest tone priority += combinationBassInBass(stringValueCombination); // uses many strings // 4 and less strings will be more praised in case of negative grade // 4 and more strings will be more praised in case of positive grade priority += ChordSettings.instance().getManyStringsGrade() / 3 * (stringValueCombination.size()-this.tuning.length / (ChordSettings.instance().getManyStringsGrade()>0 ? 2 : 1.2) ); // uses good fingering positions priority += combinationHasGoodFingering(stringValueCombination); // System.out.println("OVERALL: // "+priority+"----------------------------"); PriorityItem item = new PriorityItem(); item.priority = priority; item.stringValues = stringValueCombination; ordered.add(item); } return ordered; } /** * * Takes the StringValue ArrayLists that has the best priority rating * */ private ArrayList takeBest(ArrayList priorityItems) { if(!isValidProcess()){ return null; } int maximum = ChordSettings.instance().getChordsToDisplay(); ArrayList bestOnes = new ArrayList(maximum); Collections.sort(priorityItems, new PriorityComparator()); for(int i = 0; i < priorityItems.size() && isValidProcess(); i ++){ PriorityItem item = (PriorityItem)priorityItems.get(i); if (!checkIfSubset(item.stringValues, bestOnes) ){ bestOnes.add(item.stringValues); if( bestOnes.size() >= maximum ){ break; } } } return bestOnes; } /** adds points if the combination has all the notes in the basis of chord */ private float combinationHasAllRequiredNotes(ArrayList stringValueCombination) { if(!isValidProcess()){ return 0; } Iterator it = stringValueCombination.iterator(); int[] values = new int[this.requiredNotes.length]; int currentIndex = 0; while (it.hasNext()) { StringValue sv = (StringValue) it.next(); if (sv.getRequiredNoteIndex() >= 0) { // only basis tones boolean insert = true; for (int i = 0; i < currentIndex; i++) if (values[i] == sv.getRequiredNoteIndex() + 1) insert = false; // sv.requiredNoteIndex+1, because we have index 0 and we don't // want it inside if (insert) { values[currentIndex] = sv.getRequiredNoteIndex() + 1; currentIndex++; } } } if (currentIndex == this.requiredNotes.length) { return ChordSettings.instance().getRequiredBasicsGrade(); } if (currentIndex == this.requiredNotes.length - 1) { boolean existsSubdominant = false; Iterator it2 = stringValueCombination.iterator(); while (it2.hasNext()) { StringValue current = (StringValue)it2.next(); if ((this.tuning[current.getString()] + current.getFret()) % 12 == (this.chordTonic + 7) %12) existsSubdominant = true; } if (!existsSubdominant && currentIndex == this.requiredNotes.length-1) { // if not riff. "sus" chord, or chord with altered fifth allow chord without JUST subdominant (fifth) with small penalty //if ( !((ChordInfo)new ChordDatabase().getChords().get(this.chordIndex)).getName().contains("sus") && this.requiredNotes.length!=2 && this.add5==0) { //String.contains(String) is not available at JRE1.4 //Replaced by "String.indexOf(String) >= 0" if ( ChordDatabase.get(this.chordIndex).getName().indexOf("sus") >= 0 && this.requiredNotes.length != 2 && this.add5 == 0) { return ( ChordSettings.instance().getRequiredBasicsGrade() * 4 / 5 ); } } } // required notes count should decrease the penalty int noteCount = (this.alteration == 0 ? 0 : 1+ this.alteration)+currentIndex+ (this.bassTonic == this.chordTonic ? 0 : 1); // sometimes, when noteCount is bigger then tunning length, this pennalty will become positive, which may help return -ChordSettings.instance().getRequiredBasicsGrade() * (this.tuning.length - noteCount) / this.tuning.length * 2; } /** adds points if the combination has strings in a row */ private float combinationHasSubsequentStrings(ArrayList stringValueCombination) { if(!isValidProcess()){ return 0; } boolean stumbled = false, noMore = false, penalty = false; for (int i = 0; i < this.tuning.length; i++) { boolean found = false; Iterator it = stringValueCombination.iterator(); while (it.hasNext()) if (((StringValue) it.next()).getString() == i) found = true; if (found) { if (!stumbled) stumbled = true; if (noMore) penalty = true; if (penalty) // penalty for skipped strings return -ChordSettings.instance().getSubsequentGrade(); } else if (stumbled) noMore = true; } if (penalty) return 0.0f; return ChordSettings.instance().getSubsequentGrade(); } /** checks if the bass tone is the lowest tone in chord */ private float combinationBassInBass(ArrayList stringValueCombination) { if(!isValidProcess()){ return 0; } for (int i = 0; i < this.tuning.length; i++) { Iterator it = stringValueCombination.iterator(); while (it.hasNext()) { StringValue sv = (StringValue) it.next(); if (sv.getString() == i) { // stumbled upon lowest tone if ( (this.tuning[sv.getString()]+sv.getFret()) % 12 == this.bassTonic ) return ChordSettings.instance().getBassGrade(); // else return -ChordSettings.instance().getBassGrade(); } } } return 0; } /** * grades the fingering in a chord. * * fingering is good if:
* - uses as little as possible fret positions
* - uses less than 3 fret positions
* - distributes good among fingers
* - can be placed capo
* */ private float combinationHasGoodFingering(ArrayList stringValueCombination) { if(!isValidProcess()){ return 0; } // init: copy into simple array float finalGrade = 0; int[] positions = new int[this.tuning.length]; for (int i = 0; i < this.tuning.length; i++) positions[i] = -1; { Iterator it = stringValueCombination.iterator(); while (it.hasNext()) { StringValue sv = (StringValue) it.next(); positions[sv.getString()] = sv.getFret(); } } // algorithm // distance between fingers int min = ChordSettings.instance().getFindChordsMax()+2, max = 0, maxCount=0; boolean openChord = false, zeroString = false; for (int i = 0; i < this.tuning.length; i++) { openChord|= ChordSettings.instance().isEmptyStringChords() && positions[i] == 0; zeroString |= positions[i]==0; if (positions[i] < min && positions[i] != 0 && positions[i]!=-1) min = positions[i]; if (positions[i] > max) { max = positions[i]; maxCount=1; } else if (positions[i]==max) maxCount++; } // finger as capo int count = 0; for (int i = 0; i < this.tuning.length; i++) if (positions[i] == min) count++; if (!openChord) { if (zeroString) finalGrade += ChordSettings.instance().getFingeringGrade()/8; else if (count >= 2) finalGrade += ChordSettings.instance().getFingeringGrade()/8; } else if (openChord) finalGrade += ChordSettings.instance().getFingeringGrade()/8; // position distance: 1-2 nice 3 good 4 bad 5 disaster float distanceGrade; switch(Math.abs(max-min)) { case 0 : distanceGrade=ChordSettings.instance().getFingeringGrade()/5; break; case 1 : distanceGrade=ChordSettings.instance().getFingeringGrade()/(5+maxCount); break; case 2 : distanceGrade=ChordSettings.instance().getFingeringGrade()/(6+maxCount); if (min<5) distanceGrade*=0.9; break; case 3 : distanceGrade=-ChordSettings.instance().getFingeringGrade()/10*maxCount; // I emphasize the penalty if big difference is on some // lower frets (it is greater distance then) if (min<5) distanceGrade*=1.3; break; case 4 : distanceGrade=-ChordSettings.instance().getFingeringGrade()/4*maxCount; if (min<=5) distanceGrade*=1.8; break; default : distanceGrade=-ChordSettings.instance().getFingeringGrade()*maxCount; break; } finalGrade += distanceGrade; // ============== finger position abstraction ================== // TODO: what to do with e.g. chord -35556 (C7) // ... it can be held with capo on 5th fret, but very hard :) // ... This is the same as with "capo after", I didn't consider that (e.g. chord -35555) ArrayList[] fingers={new ArrayList(2),new ArrayList(2),new ArrayList(2),new ArrayList(2)}; // TODO: still no thumb, sorry :) // STRUCTURE: ArrayList consists of Integers - first is fret // - others are strings /* for (int i=0; i1) System.out.print("G"+(i+1)+"R"+((Integer)fingers[i].get(0)).intValue()+"S"+((Integer)fingers[i].get(1)).intValue()+" "); } */ if (finger>4) finalGrade-=ChordSettings.instance().getFingeringGrade(); else finalGrade+=ChordSettings.instance().getFingeringGrade()*0.1*(15-2*finger); // TODO: maybe to put each finger's distance from the minimum return finalGrade; } /** * grades the chord semantics, based on theory. * * Tone semantics is good if:
* - there appear tones from chord basis or bass tone
* - there appear alteration tones on their specific places

* * Algorithm:
* - search for chord tonic. If some note is found before (and it's not bass) do penalty
* - make penalty if the bass tone is not in bass
* - check if all the expanding notes are here. If some are not, do penalty
* - if expanding note isn't higher than tonic octave, then priority should be less
* - If there are not some with NON_ESSENTIAL_INDEX are not here, penalty should be less
*/ private float combinationChordSemantics(ArrayList stringValueCombination) { if(!isValidProcess()){ return 0; } float finalGrade = 0; int foundTonic = -1; int[] foundExpanding = new int[this.expandingNotes.length]; int stringDepth=0; for (int string = 0; string < this.tuning.length; string++) { // we have to go string-by-string because of the octave Iterator it = stringValueCombination.iterator(); StringValue current = null; boolean found=false; while (it.hasNext() && !found) { StringValue sv = (StringValue) it.next(); if (sv.getString() == string &&!found && sv.getFret()!=-1) { // stumbled upon next string current = sv; found=true; stringDepth++; } } // grade algorithms---- if (current != null) { // search for tonic if (foundTonic==-1 && current.getRequiredNoteIndex()==0) foundTonic=this.tuning[current.getString()]+current.getFret(); // specific bass not in bass? if (stringDepth>1) { if (current.getRequiredNoteIndex()==this.BASS_INDEX) finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade(); if (current.getRequiredNoteIndex()<0) { // expanding tones // expanding tone found before the tonic if (foundTonic==-1) finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade()/2; else { // if expanding note isn't higher than tonic's octave if (foundTonic+11 > this.tuning[current.getString()]+current.getFret()) finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade()/3; } // search for distinct expanding notes for (int i=0; i= 0 && selectionIndex < this.chords.getItemCount()){ this.chords.select(selectionIndex); }else if(selectionIndex > 0 && (selectionIndex - 1) < this.chords.getItemCount()){ this.chords.select((selectionIndex - 1)); } } protected void showChord(int index) { TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(index); if (chord != null) { this.dialog.getEditor().setChord(chord); } } protected void addCustomChord(){ TGChord chord = this.dialog.getEditor().getChord(); if(chord != null){ NameDialog nDialog = new NameDialog(); nDialog.name = this.dialog.getEditor().getChordName().getText().trim(); String name = nDialog.open(); if(name != null){ if(name.length() == 0){ MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-empty-error")); return; } if(TuxGuitar.instance().getCustomChordManager().existOtherEqualCustomChord(name,-1)){ MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-exist-error")); return; } chord.setName(name); TuxGuitar.instance().getCustomChordManager().addChord(chord); loadChords(); } } } protected void renameCustomChord(int index){ TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(index); if(chord != null){ String name = new NameDialog(chord.getName()).open(); if(name != null){ if(name.length() == 0){ MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-empty-error")); return; } if(TuxGuitar.instance().getCustomChordManager().existOtherEqualCustomChord(name,index)){ MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-exist-error")); return; } TuxGuitar.instance().getCustomChordManager().renameChord(index,name); loadChords(); } } } protected void removeCustomChord(int index){ if (index >= 0 && index < TuxGuitar.instance().getCustomChordManager().countChords()) { TuxGuitar.instance().getCustomChordManager().removeChord(index); loadChords(); } } protected ChordDialog getDialog(){ return this.dialog; } protected List getChords(){ return this.chords; } private class NameDialog{ protected String name; public NameDialog(String name){ this.name = name; } public NameDialog(){ this(new String()); } public String open(){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("chord.custom")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("chord.custom")); Composite composite = new Composite(group, SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(getMainData()); final Label label = new Label(composite,SWT.LEFT); label.setText(TuxGuitar.getProperty("chord.name") + ":"); label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); final Text text = new Text(composite,SWT.BORDER | SWT.SINGLE); text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); text.setText(this.name); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { NameDialog.this.name = text.getText(); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { NameDialog.this.name = null; dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.name; } private GridData getMainData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 300; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDatabase.java0000644000175000017500000000557211273045225031050 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; /** * Stores the information about the chord name, structure and * alteration abilities into a list * * @author Nikola Kolarovic * */ public class ChordDatabase { /** * fills all the necessary data into chords List consisted out of ChordInfo-s * * If you want to change it, please contact me on * nikola.kolarovic@gmail.com */ private static final ChordInfo[] data = new ChordInfo[]{ // Major-------------------------- new ChordInfo("M",new int[]{ 1, 5, 8 }), // 7-------------------------- new ChordInfo("7",new int[]{ 1, 5, 8, 11 }), // 7M-------------------------- // hard-coded index used in ChordRecognizer, below comment "determine seventh", line 315 now new ChordInfo("maj7",new int[]{ 1, 5, 8, 12 }), // 6-------------------------- new ChordInfo("6",new int[]{ 1, 5, 8, 10 }), // m-------------------------- // index 4 hard-coded in ChordRecognizer line 220, so it is not so unusual new ChordInfo("m",new int[]{ 1, 4, 8 }), // m7-------------------------- new ChordInfo("m7",new int[]{ 1, 4, 8, 11 }), // m7M-------------------------- new ChordInfo("m/maj7",new int[]{ 1, 4, 8, 12 }), // m6-------------------------- new ChordInfo("m6",new int[]{ 1, 4, 8, 10 }), // sus2-------------------------- new ChordInfo("sus2",new int[]{ 1, 3, 8 }), // sus4-------------------------- new ChordInfo("sus4",new int[]{ 1, 6, 8 }), // 7sus2-------------------------- new ChordInfo("7sus2",new int[]{ 1, 3, 8, 11 }), // 7sus4-------------------------- new ChordInfo("7sus4",new int[]{ 1, 6, 8, 11 }), // below indexes are hard-coded in ChordRecognizer line 311 now // dim-------------------------- new ChordInfo("dim",new int[]{ 1, 4, 7 }), // dim7-------------------------- new ChordInfo("dim7",new int[]{ 1, 4, 7, 10 }), // aug-------------------------- new ChordInfo("aug",new int[]{ 1, 5, 9 }), // 5-------------------------- // index hard-coded in ChordRecognizer line 220, so it is not so unusual new ChordInfo("5",new int[]{ 1, 8 }), }; public static int length(){ return data.length; } public static ChordInfo get(int index){ return data[index]; } /** chord data structure, contains all info for chord formation **/ public static class ChordInfo { private String name; private int[] requiredNotes; public ChordInfo(String name,int[] requiredNotes){ this.name = name; this.requiredNotes = requiredNotes; } public String getName() { return this.name; } public int[] getRequiredNotes() { return this.requiredNotes; } public int[] cloneRequireds() { int[] requiredNotes = new int[this.requiredNotes.length]; for(int i = 0; i < requiredNotes.length; i ++){ requiredNotes[i] = this.requiredNotes[i]; } return requiredNotes; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDialog.java0000644000175000017500000001765511273045225030550 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.chord; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.TGChordImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class ChordDialog { public static final String NAME = "action.insert.chord"; public static final int RESULT_SAVE = 1; public static final int RESULT_CLEAN = 2; public static final int RESULT_CANCEL = 3; private static final int DEFAULT_STYLE = SWT.BORDER; private Shell dialog; private TGChord chord; private ChordEditor editor; private ChordSelector selector; private ChordList list; private ChordRecognizer recognizer; //private boolean accepted; private int result; public ChordDialog() { super(); } public int open(Shell shell,final TGMeasureImpl measure,TGBeat beat, long start) { this.setResult(RESULT_CANCEL); this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout()); this.dialog.setText(TuxGuitar.getProperty("chord.editor")); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { TuxGuitar.instance().getCustomChordManager().write(); } }); Composite topComposite = new Composite(this.dialog, SWT.NONE); topComposite.setLayout(new GridLayout(4,false)); topComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite bottomComposite = new Composite(this.dialog, SWT.NONE); bottomComposite.setLayout(new GridLayout()); bottomComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); int[] tuning = findCurrentTuning(measure.getTrack()); //---------------SELECTOR-------------------------------- this.selector = new ChordSelector(this,topComposite,DEFAULT_STYLE, tuning); this.selector.pack(); //---------------EDITOR-------------------------------- this.editor = new ChordEditor(this, topComposite, DEFAULT_STYLE,(short)tuning.length); this.editor.pack(); this.editor.setCurrentTrack(measure.getTrack()); //---------------RECOGNIZER------------------------------------ this.recognizer = new ChordRecognizer(this, topComposite, DEFAULT_STYLE); //---------------CUSTOM CHORDS--------------------------------- new ChordCustomList(this, topComposite, DEFAULT_STYLE,Math.max(this.selector.getBounds().height,this.editor.getBounds().height)); //---------------LIST-------------------------------- Composite listComposite = new Composite(bottomComposite, SWT.NONE); listComposite.setLayout(gridLayout(1,false,0,0)); listComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.list = new ChordList(this,listComposite,beat); //------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(gridLayout(3,false,0,0)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setChord(getEditor().getChord()); setResult(RESULT_SAVE); getDialog().dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setResult(RESULT_CLEAN); getDialog().dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { getDialog().dispose(); } }); // load the current chord this.editor.setChord(findCurrentChord(measure, start)); this.dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return getResult(); } public ChordEditor getEditor() { return this.editor; } public ChordSelector getSelector() { return this.selector; } public ChordList getList() { return this.list; } public ChordRecognizer getRecognizer() { return this.recognizer; } public TGChord getChord() { return this.chord; } public void setChord(TGChord chord) { this.chord = chord; } public int getResult() { return this.result; } public void setResult(int result) { this.result = result; } public boolean isDisposed(){ return this.dialog.isDisposed(); } public Shell getDialog(){ return this.dialog; } public GridLayout gridLayout(int numColumns,boolean makeColumnsEqualWidth,int marginWidth,int marginHeight){ GridLayout layout = new GridLayout(); layout.numColumns = numColumns; layout.makeColumnsEqualWidth = makeColumnsEqualWidth; layout.marginWidth = (marginWidth >= 0)?marginWidth:layout.marginWidth; layout.marginHeight = (marginHeight >= 0)?marginHeight:layout.marginHeight; return layout; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private int[] findCurrentTuning(TGTrack track){ int[] tuning = new int[track.stringCount()]; Iterator it = track.getStrings().iterator(); while(it.hasNext()){ TGString string = (TGString)it.next(); tuning[(tuning.length - string.getNumber())] = string.getValue(); } return tuning; } protected TGChord findCurrentChord(TGMeasure measure, long start){ TGSongManager manager = TuxGuitar.instance().getSongManager(); TGChord chord = manager.getMeasureManager().getChord(measure, start); if(chord == null){ chord = manager.getFactory().newChord(measure.getTrack().stringCount()); chord.setFirstFret(1); List notes = manager.getMeasureManager().getNotes(measure, start); if(!notes.isEmpty()){ int maxValue = -1; int minValue = -1; //verifico el first fret Iterator it = notes.iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); if(maxValue < 0 || maxValue < note.getValue()){ maxValue = note.getValue(); } if(note.getValue() > 0 && (minValue < 0 || minValue > note.getValue())){ minValue = note.getValue(); } } if(maxValue > TGChordImpl.MAX_FRETS && minValue > 0){ chord.setFirstFret((short)(minValue)); } //agrego los valores it = notes.iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); chord.addFretValue( ( note.getString() - 1) , note.getValue()); } } } return chord; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordEditor.java0000644000175000017500000003537411273045225030575 0ustar julianjulian/* * Created on 28-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.chord; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGChordImpl; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; /** * @author julian * @author Nikola Kolarovic */ public class ChordEditor extends Composite { public static final int STRING_SPACING = 30; public static final int FRET_SPACING = 30; public static final short MIN_FRET = 1; public static final short MAX_FRET = 24; private ChordDialog dialog; private Composite composite; private Text chordName; private List points; private boolean[] firstFrets; private int[] strings; private int[] frets; private short fret; private short maxStrings; private int width; private int height; private TGTrack currentTrack = null; public ChordEditor(Composite parent, int style) { super(parent, style); } public ChordEditor(ChordDialog dialog, Composite parent,int style, short maxStrings) { this(parent, style); this.dialog = dialog; this.setLayout(dialog.gridLayout(1, false, 0, 0)); this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.init(maxStrings); } public void init(short maxStrings) { this.fret = MIN_FRET; this.maxStrings = maxStrings; this.firstFrets = new boolean[this.maxStrings]; this.strings = new int[this.maxStrings]; this.frets = new int[TGChordImpl.MAX_FRETS]; this.width = ((STRING_SPACING * this.maxStrings) - STRING_SPACING); this.height = ((FRET_SPACING * TGChordImpl.MAX_FRETS) - FRET_SPACING); this.points = new ArrayList(); for (int i = 0; i < this.firstFrets.length; i++) { this.firstFrets[i] = false; } for (int i = 0; i < this.strings.length; i++) { this.strings[i] = ((i + 1) * STRING_SPACING); } for (int i = 0; i < this.frets.length; i++) { this.frets[i] = ((i + 1) * FRET_SPACING); } Composite composite = new Composite(this, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.composite = new Composite(composite, SWT.BORDER | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED); Composite nameComposite = new Composite(composite, SWT.NONE); nameComposite.setLayout(this.dialog.gridLayout(1, true, 0, 0)); nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,true)); Label formulaLabel = new Label(nameComposite, SWT.SEPARATOR | SWT.HORIZONTAL); formulaLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,true)); Label chordNameLabel = new Label(nameComposite, SWT.LEFT); chordNameLabel.setText(TuxGuitar.getProperty("chord.name")); chordNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,false)); this.chordName = new Text(nameComposite, SWT.SINGLE | SWT.BORDER); this.chordName.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,false)); this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.composite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); paintEditor(painter); } }); this.composite.addMouseListener(new MouseAdapter() { public void mouseUp(org.eclipse.swt.events.MouseEvent e) { getComposite().setFocus(); checkPoint(e.x, e.y); redraw(); } }); this.composite.getVerticalBar().setIncrement(1); this.composite.getVerticalBar().setMaximum( ((MAX_FRET + MIN_FRET) - (TGChordImpl.MAX_FRETS - 1) + 1)); this.composite.getVerticalBar().setMinimum(MIN_FRET); this.composite.getVerticalBar().setThumb(1); this.composite.getVerticalBar().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setFret((short) getComposite().getVerticalBar().getSelection(), false, true); redraw(); } }); this.composite.setLayoutData(makeCompositeData()); } private GridData makeCompositeData() { GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = (getWidth() + (STRING_SPACING * 2) + this.composite.getVerticalBar().getSize().x); data.minimumHeight = (getHeight() + (FRET_SPACING * 2)); return data; } protected void paintEditor(TGPainter painter) { int noteSize = (FRET_SPACING / 2); painter.setForeground(this.getDisplay().getSystemColor(SWT.COLOR_BLACK)); // dibujo el puente painter.initPath(); painter.setAntialias(false); painter.moveTo((STRING_SPACING - 10), (FRET_SPACING - 10)); painter.lineTo(STRING_SPACING + (this.width + 10), (FRET_SPACING - 10)); painter.closePath(); painter.drawString(Integer.toString(getFret()), FRET_SPACING - 25,STRING_SPACING); // dibujo las cuerdas painter.initPath(); painter.setAntialias(false); for (int i = 0; i < this.strings.length; i++) { painter.moveTo(this.strings[i], FRET_SPACING); painter.lineTo(this.strings[i], FRET_SPACING + this.height); } painter.closePath(); // dibujo las cegillas painter.initPath(); painter.setAntialias(false); for (int i = 0; i < this.frets.length; i++) { painter.moveTo(STRING_SPACING, this.frets[i]); painter.lineTo(STRING_SPACING + this.width, this.frets[i]); } painter.closePath(); // dibujo las notas painter.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_BLACK)); Iterator it = this.points.iterator(); while (it.hasNext()) { Point point = (Point) it.next(); painter.initPath(TGPainter.PATH_FILL); painter.addOval(point.x - (noteSize / 2), point.y + (noteSize / 2),noteSize, noteSize); painter.closePath(); } // dibujo las notas al aire for (int i = 0; i < this.firstFrets.length; i++) { if (!hasPoints(i)) { painter.initPath(); if (this.firstFrets[i]) { int x = this.strings[i] - (noteSize / 2); int y = (FRET_SPACING - noteSize) - 11; painter.addOval(x, y, (noteSize - 1), (noteSize - 1)); } else { int x = this.strings[i]; int y = (FRET_SPACING - noteSize) - 4; painter.moveTo(x - ((noteSize / 2) - 1), y + ((noteSize / 2) - 1)); painter.lineTo(x + ((noteSize / 2) - 1), y - ((noteSize / 2) - 1)); painter.moveTo(x - ((noteSize / 2) - 1), y - ((noteSize / 2) - 1)); painter.lineTo(x + ((noteSize / 2) - 1), y + ((noteSize / 2) - 1)); } painter.closePath(); } } } protected void checkPoint(int x, int y) { int stringIndex = getStringIndex(x); int fretIndex = getFretIndex(y); if (y < FRET_SPACING) { this.firstFrets[stringIndex] = !this.firstFrets[stringIndex]; this.removePointsAtStringLine(this.strings[stringIndex]); } else if (y < (FRET_SPACING * TGChordImpl.MAX_FRETS)) { Point point = new Point(this.strings[stringIndex],this.frets[fretIndex]); if (!this.removePoint(point)) { this.firstFrets[stringIndex] = false; this.removePointsAtStringLine(this.strings[stringIndex]); this.addPoint(point); this.orderPoints(); } } else{ return; // don't recognize it otherwise } // after changing a chord, recognize it this.dialog.getRecognizer().recognize(getChord(),true,false); } private boolean removePoint(Point point) { Iterator it = this.points.iterator(); while (it.hasNext()) { Point currPoint = (Point) it.next(); if (currPoint.x == point.x && currPoint.y == point.y) { this.points.remove(point); return true; } } return false; } private void orderPoints() { for (int i = 0; i < this.points.size(); i++) { Point minPoint = null; for (int noteIdx = i; noteIdx < this.points.size(); noteIdx++) { Point point = (Point) this.points.get(noteIdx); if (minPoint == null || point.x < minPoint.x) { minPoint = point; } } this.points.remove(minPoint); this.points.add(i, minPoint); } } private void removePointsAtStringLine(int x) { Iterator it = this.points.iterator(); while (it.hasNext()) { Point point = (Point) it.next(); if (point.x == x) { this.points.remove(point); break; } } } private void addPoint(Point point) { this.points.add(point); } private int getStringIndex(int x) { int index = -1; for (int i = 0; i < this.strings.length; i++) { if (index < 0) { index = i; } else { int distanceX = Math.abs(x - this.strings[index]); int currDistanceX = Math.abs(x - this.strings[i]); if (currDistanceX < distanceX) { index = i; } } } return index; } private int getFretIndex(int y) { int index = -1; for (int i = 0; i < this.frets.length; i++) { if (index < 0) { index = i; } else { int distanceX = Math.abs(y - (this.frets[index] + (FRET_SPACING / 2))); int currDistanceX = Math.abs(y - (this.frets[i] + (FRET_SPACING / 2))); if (currDistanceX < distanceX) { index = i; } } } return index; } private boolean hasPoints(int stringIndex) { Iterator it = this.points.iterator(); while (it.hasNext()) { Point point = (Point) it.next(); if (point.x == this.strings[stringIndex]) { return true; } } return false; } public boolean isEmpty() { return this.points.isEmpty(); } public int getValue(int string) { int value = -1; if (this.firstFrets[this.maxStrings - string]) { value = 0; } if (value < 0) { Iterator it = this.points.iterator(); while (it.hasNext()) { Point point = (Point) it.next(); if (string == (this.maxStrings - getStringIndex(point.x))) { value = (getFretIndex(point.y + (FRET_SPACING / 2)) + 1); value += (getFret() - 1); } } } return value; } public void addValue(int value, int string/*, boolean redecorate*/) { int realValue = value; if (string >= 1 && string <= this.maxStrings) { this.firstFrets[this.maxStrings - string] = false; this.removePointsAtStringLine(this.strings[this.maxStrings - string]); if (realValue == 0) { this.firstFrets[this.maxStrings - string] = true; } else if (realValue >= 0) { realValue -= (getFret() - 1); if (realValue > 0 && realValue <= TGChordImpl.MAX_FRETS) { this.addPoint(new Point(this.strings[this.maxStrings - string], this.frets[realValue - 1])); } } //INNECESARY CODE //this method is called allways from "setChord(c)" //but it is called some times, as Strings has the chord. //So i moved it to "setChord" to call "recognize" only one time. // after adding a value, recognize the current chord //this.chordName.setText(this.dialog.getRecognizer().recognize(getChord(), redecorate)); } } public short getFret() { return this.fret; } public void setFret(short fret) { setFret(fret, true, false); } protected void setFret(short fret, boolean updateScroll, boolean recognize) { if (fret >= MIN_FRET && fret <= MAX_FRET) { this.fret = fret; } if (updateScroll) { this.composite.getVerticalBar().setSelection(this.fret); } if(recognize){ this.dialog.getRecognizer().recognize(getChord(), true,false); } } public TGChord getChord() { TGChord chord = TuxGuitar.instance().getSongManager().getFactory().newChord(this.strings.length); chord.setName(this.chordName.getText()); chord.setFirstFret(this.fret); for (int i = 0; i < chord.getStrings().length; i++) { chord.addFretValue(i, getValue(i + 1)); //chord.setName(this.chordName.getText()); } return chord; } public void setChord(TGChord chord) { if (chord != null) { this.setFret((short)chord.getFirstFret()); for (int i = 0; i < chord.getStrings().length; i++) { int fretValue = chord.getFretValue(i); this.addValue(fretValue, i + 1/*, false*/); } //SEE Comment on addValue. //this.getChordName().setText(chord.getName() != null ? chord.getName() : this.dialog.getRecognizer().recognize(getChord(),true) ); String name = chord.getName(); this.dialog.getRecognizer().recognize(getChord(), (name == null), (name == null) ); this.previewChord(chord); if(name != null){ this.setChordName( name ); } this.redraw(); } } public short getMaxStrings() { return this.maxStrings; } public void setMaxStrings(short maxStrings) { this.maxStrings = maxStrings; } public int getWidth() { return this.width; } public int getHeight() { return this.height; } protected Composite getComposite(){ return this.composite; } public Text getChordName() { return this.chordName; } public void setChordName(String chordName) { this.chordName.setText(chordName); } public void redraw() { super.redraw(); this.composite.redraw(); } public void setCurrentTrack(TGTrack track) { this.currentTrack = track; } public TGTrack getCurrentTrack() { return this.currentTrack; } public void previewChord(final TGChord chord) { new Thread(new Runnable() { public void run() { int playedStrings = 0; int stringCount = Math.min( getMaxStrings(), chord.countStrings() ); for (int i = 0; i < stringCount; i++) { if (chord.getFretValue( i ) != -1) { playedStrings ++; } } int next = 0; int[][] beat = new int[playedStrings][2]; for (int i = 0; i < stringCount; i++) { int string = (stringCount - i); int value = chord.getFretValue(string - 1); if (value != -1) { beat[next][0] = getCurrentTrack().getOffset() + getCurrentTrack().getString(string).getValue() + value; beat[next][1] = TGVelocities.DEFAULT; next ++; } } TGChannel ch = getCurrentTrack().getChannel(); TuxGuitar.instance().getPlayer().playBeat(ch.getChannel(), ch.getInstrument(), ch.getVolume(), ch.getBalance(), ch.getChorus(), ch.getReverb(), ch.getPhaser(), ch.getTremolo(), beat, 200, 200 ); } }).start(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordList.java0000644000175000017500000001644511273045225030260 0ustar julianjulian/* * Created on 02-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.chord; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.ScrollBar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGChordImpl; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGString; /** * @author julian * * Component that shows the list of (alternative) chords - bottom of the screen */ public class ChordList extends Composite { private static final int MIN_HEIGHT = 160; private static final int SCROLL_INCREMENT = 25; private static final int CHORD_FIRST_FRET_SPACING = 12; private static final int CHORD_STRING_SPACING = 8; private static final int CHORD_FRET_SPACING = 10; private static final int CHORD_NOTE_SIZE = 6; private ChordDialog dialog; private TGBeat beat; private List graphicChords; private int height; private TGChordImpl selectedChord; private Composite composite; private Font font; public ChordList(ChordDialog dialog,Composite parent,TGBeat beat) { super(parent, SWT.NONE); this.setLayout(dialog.gridLayout(1,false,0,0)); this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.graphicChords = new ArrayList(); this.dialog = dialog; this.beat = beat; this.init(); } private void init(){ this.composite = new Composite(this,SWT.BORDER | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED); this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.composite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); paintChords(painter); } }); this.composite.addMouseListener(new MouseAdapter() { public void mouseUp(MouseEvent e) { getComposite().setFocus(); getDialog().getEditor().setChord(getChord(e.x, e.y,true)); redraw(); } }); final Point origin = new Point(0, 0); final ScrollBar vBar = this.composite.getVerticalBar(); vBar.setIncrement(SCROLL_INCREMENT); vBar.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { int vSelection = vBar.getSelection(); int destY = -vSelection - origin.y; Rectangle rect = getComposite().getBounds(); getShell().scroll(0, destY, 0, 0, rect.width, rect.height, false); origin.y = -vSelection; redraw(); } }); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumHeight = MIN_HEIGHT; this.composite.setLayoutData(data); this.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent arg0) { disposeChords(); disposeFont(); } }); } public void redraw(){ super.redraw(); this.composite.redraw(); } protected void paintChords(TGPainter painter) { int maxHeight = 0; int fromX = 15; int fromY = 10; int vScroll = this.composite.getVerticalBar().getSelection(); Iterator it = this.graphicChords.iterator(); while (it.hasNext()) { TGChordImpl chord = (TGChordImpl) it.next(); Color color = getChordColor(chord); chord.setBackgroundColor(this.composite.getBackground()); chord.setColor(color); chord.setNoteColor(color); chord.setTonicColor(getDisplay().getSystemColor(SWT.COLOR_DARK_RED)); chord.setFirstFretSpacing(CHORD_FIRST_FRET_SPACING); chord.setStringSpacing(CHORD_STRING_SPACING); chord.setFretSpacing(CHORD_FRET_SPACING); chord.setNoteSize(CHORD_NOTE_SIZE); chord.setFirstFretFont(getFont(painter.getGC())); chord.setStyle(ViewLayout.DISPLAY_CHORD_DIAGRAM); chord.update(painter, true); if(fromX + chord.getWidth() >= ((getBounds().x + getBounds().width) - 20)){ fromX = 15; fromY += chord.getHeight() + 10; } chord.setEditing(true); chord.setPosX( fromX ); chord.setPosY( fromY - vScroll); chord.paint(painter,(chord.getWidth() / 2),0); fromX += chord.getWidth() + 10; maxHeight = Math.max(maxHeight,chord.getHeight()); } this.height = (fromY + maxHeight + 10); this.updateScroll(); } private Color getChordColor(TGChordImpl chord){ if(this.selectedChord != null && this.selectedChord.equals(chord)){ return getDisplay().getSystemColor(SWT.COLOR_BLUE); } return getDisplay().getSystemColor(SWT.COLOR_BLACK); } public void updateScroll(){ Rectangle rect = this.composite.getBounds(); Rectangle client = this.composite.getClientArea(); ScrollBar vBar = this.composite.getVerticalBar(); vBar.setMaximum(this.height); vBar.setThumb(Math.min(rect.height, client.height)); } protected int getTrackString(int number){ TGString string = ChordList.this.beat.getMeasure().getTrack().getString(number); return string.getValue(); } protected Font getFont(GC painter){ if(this.font == null || this.font.isDisposed()){ Font available = painter.getFont(); if(available == null || available.isDisposed()){ available = getDisplay().getSystemFont(); } FontData[] datas = available.getFontData(); if(datas.length > 0){ this.font = new Font(getDisplay(),datas[0].getName(),Math.min(7,datas[0].getHeight()),SWT.BOLD); } } return this.font; } protected TGChordImpl getChord(int x, int y,boolean setAsSelected) { Iterator it = this.graphicChords.iterator(); while (it.hasNext()) { TGChordImpl chord = (TGChordImpl) it.next(); int x1 = chord.getPosX(); int x2 = x1 + chord.getWidth(); int y1 = chord.getPosY(); int y2 = y1 + chord.getHeight(); if (x > x1 && x < x2 && y > y1 && y < y2) { if(setAsSelected){ if(this.selectedChord != null){ this.selectedChord.dispose(); } this.selectedChord = chord; chord.dispose(); } return chord; } } return null; } public void setChords(List chords) { this.disposeChords(); this.selectedChord = null; Iterator it = chords.iterator(); while (it.hasNext()) { TGChordImpl chord = (TGChordImpl) it.next(); chord.setTonic( ChordList.this.dialog.getSelector().getTonicList().getSelectionIndex() ); chord.setBeat(ChordList.this.beat); this.graphicChords.add(chord); } this.redraw(); } public void disposeFont(){ if(this.font != null){ this.font.dispose(); } } public void disposeChords(){ Iterator it = this.graphicChords.iterator(); while (it.hasNext()) { ((TGChordImpl) it.next()).dispose(); } this.graphicChords.clear(); } protected Composite getComposite(){ return this.composite; } protected ChordDialog getDialog(){ return this.dialog; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordNamingConvention.java0000644000175000017500000000521111273045225032606 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; /** * Creates a chord name String out of given parameters * @author Nikola Kolarovic */ public class ChordNamingConvention { /** generates the chord name out of selected items */ public String createChordName(int chordTonic, int chordIndex, int alteration, int plusMinus, boolean add, int add5, int add9, int add11, int bassTonic, boolean sharp) { StringBuffer sb = new StringBuffer(); sb.append(getTonic(chordTonic,sharp)); //String chordName = ((ChordInfo)ChordCreatorUtil.getChordData().getChords().get(chordIndex)).getName(); String chordName = ChordDatabase.get(chordIndex).getName(); if (!chordName.equals("M")) sb.append(chordName); if (add) sb.append("add"); // TODO: ALTERATION if (alteration!=0) { char lastChar = sb.toString().charAt(sb.toString().length()-1); // if chord name ends with a number then add a backslash if (lastChar>='0' && lastChar <='9') sb.append("/"); switch (alteration) { case 1 : sb.append( getAdd("9",plusMinus)); break; case 2 : sb.append( getAdd("11",plusMinus)); break; case 3 : sb.append( getAdd("13",plusMinus)); break; } } if (add5!=0) sb.append("/").append(getAdd("5",add5)); if (add9!=0) sb.append("/").append(getAdd("9",add9)); if (add11!=0) sb.append("/").append(getAdd("11",add11)); if (chordTonic!=bassTonic) { sb.append(" \\"); sb.append(getTonic(bassTonic,sharp)); } return sb.toString(); } /** tonic marks */ public String getTonic(int chordTonic, boolean sharp) { String retVal; switch(chordTonic) { case 0 : retVal="C"; break; case 1 : retVal= sharp ? "C#" : "Db"; break; case 2 : retVal="D"; break; case 3 : retVal= sharp ? "D#" : "Eb"; break; case 4 : retVal="E"; break; case 5 : retVal="F"; break; case 6 : retVal= sharp ? "F#" : "Gb"; break; case 7 : retVal="G"; break; case 8 : retVal= sharp ? "G#" : "Ab"; break; case 9 : retVal="A"; break; case 10 : retVal= sharp ? "A#" : "Bb"; break; default : retVal="B"; break; } return retVal; } /** adds + or - to an add chord String */ private String getAdd(String number, int selectionIndex) { StringBuffer retVal=new StringBuffer(number); switch(selectionIndex) { case 1 : retVal.append("+"); break; case 2 : retVal.append("-"); break; } return retVal.toString(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordRecognizer.java0000644000175000017500000005273511273045225031456 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; /* Created on 05-March-2007 */ import java.util.ArrayList; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.List; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author Nikola Kolarovic * */ public class ChordRecognizer extends Composite { // index for parameter array protected static final int TONIC_INDEX = 0; protected static final int CHORD_INDEX = 1; protected static final int ALTERATION_INDEX = 2; protected static final int PLUSMINUS_INDEX = 3; protected static final int BASS_INDEX = 4; protected static final int ADDCHK_INDEX = 5; protected static final int I5_INDEX = 6; protected static final int I9_INDEX = 7; protected static final int I11_INDEX = 8; private ChordDialog dialog; private List proposalList; private java.util.List proposalParameters; // this var keep a control to running threads. private long runningProcess; public ChordRecognizer(ChordDialog dialog, Composite parent,int style) { super(parent,style); this.setLayout(dialog.gridLayout(1,false,0,0)); this.setLayoutData(makeGridData()); this.runningProcess = 0; this.dialog = dialog; this.init(); } public GridData makeGridData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 180; return data; } public void init(){ Composite composite = new Composite(this,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.proposalParameters = new ArrayList(); this.proposalList = new List(composite,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); this.proposalList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.proposalList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null){ showChord(getProposalList().getSelectionIndex()); } } }); } /** sets the current chord to be selected proposal */ protected void showChord(int index) { int[] params = (int[])this.proposalParameters.get(index); this.dialog.getSelector().adjustWidgets(params[TONIC_INDEX], params[CHORD_INDEX], params[ALTERATION_INDEX], params[BASS_INDEX], params[PLUSMINUS_INDEX], params[ADDCHK_INDEX], params[I5_INDEX], params[I9_INDEX], params[I11_INDEX]); String chordName = this.proposalList.getItem(index); chordName = chordName.substring(0, chordName.indexOf('(')-1); this.dialog.getEditor().getChordName().setText(chordName); this.dialog.getEditor().redraw(); } /** * - Recognizes the chord string * - Fills the component's list with alternative names * - Sets all the ChordSelector fields into recognized chord (tonic, bass, chord, alterations) * - Makes the alternatives and puts them into ChordList * - Writes the chord formula into appropriate label * @param chord chord structure (frets, strings) * @param redecorate is the Chord Editor in editing mode, or it is just changed by ChordSelector */ public void recognize(final TGChord chord,final boolean redecorate,final boolean setChordName) { final long processId = (++ this.runningProcess); final boolean sharp = this.dialog.getSelector().getSharpButton().getSelection(); this.clearProposals(); new Thread( new Runnable() { public void run() { if(!getDialog().isDisposed() && isValidProcess(processId)){ final int params[] = makeProposals(processId, chord,sharp); if (params == null) { // could not recognize anything!? if (isValidProcess(processId) && setChordName) { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!getDialog().isDisposed() && isValidProcess(processId)){ getDialog().getEditor().setChordName(""); } } }); } catch (Throwable e) { e.printStackTrace(); } } return; } final String chordName = getChordName(params,sharp); // Sets all the ChordSelector fields into recognized chord (tonic, bass, chord, alterations) if (isValidProcess(processId) && redecorate) { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!getDialog().isDisposed()){ redecorate(params); } } }); } catch (Throwable e) { e.printStackTrace(); } } if (isValidProcess(processId) && setChordName) { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!getDialog().isDisposed()){ getDialog().getEditor().setChordName( (chordName != null ? chordName : "" ) ); } } }); } catch (Throwable e) { e.printStackTrace(); } } } } } ).start(); } /** Fills the component's list with alternative names * @param chord TGChord to be recognized * @return parameters for adjustWidgets and getChordName methods */ protected int[] makeProposals(final long processId, TGChord chord,final boolean sharp) { int[] tuning = this.dialog.getSelector().getTuning(); java.util.List notesInside = new ArrayList(); // find and put in all the distinct notes for (int i=0; i=info.getRequiredNotes().length-1) { branchProp.dontHaveGrade-=(info.getRequiredNotes().length-(foundNotesCount+1))*50; allProposals.add(branchProp); } } else { currentProp.params[I5_INDEX] = 0; currentProp.dontHaveGrade+=30; } } currentProp.params[I5_INDEX] = 0; if (foundNotesCount>=info.getRequiredNotes().length-1 ) { currentProp.dontHaveGrade-=(info.getRequiredNotes().length-foundNotesCount)*50; allProposals.add(currentProp); } } currentProp=null; } } Iterator props = allProposals.iterator(); java.util.List unsortedProposals = new ArrayList(5); while (props.hasNext()) { // place the still missing alterations notes accordingly... bass also /////////////////////////////////////////////////////////////// final Proposal current = (Proposal)props.next(); boolean bassIsOnlyInBass = true; // ---------------- bass tone ---------------- for (int i=chord.getStrings().length-1; i>=0; i--) { if (chord.getStrings()[i]!=-1) { if (current.params[BASS_INDEX]==-1) {// if we still didn't determine bass current.params[BASS_INDEX] = (tuning[tuning.length-1-i] + chord.getStrings()[i]) % 12; if (current.params[BASS_INDEX]!=current.params[TONIC_INDEX]) current.unusualGrade-=20; } if (current.params[BASS_INDEX]==(tuning[tuning.length-1-i] + chord.getStrings()[i]) % 12 ) bassIsOnlyInBass=false; // if we stumbled upon bass tone again } } if (current.isNeeded(current.params[BASS_INDEX]) && bassIsOnlyInBass) { // do not mark as FOUND if bass is somewhere other than in bass only current.foundNote(current.params[BASS_INDEX]); current.unusualGrade-=20; } // <=11 means "not DIM or AUG or 5" if (current.missingCount>0 && current.params[CHORD_INDEX]<=11) { // ---------------- alteration tones ---------------- // determine seventh -->> 2 is HARDCODED! int seventh; if (current.params[CHORD_INDEX] == 2) seventh=current.params[TONIC_INDEX]+12-1; // plain 7 else seventh=current.params[TONIC_INDEX]+11-1; // b7 if (current.isExisting(seventh)) { if (!current.isFound(seventh)) { current.filled[3]=true; current.foundNote(seventh); } } for (int plusminus=0; plusminus<=2; plusminus++) { for (int i=2; i>=0; i--) // 13, 11, 9 if (current.isNeeded(current.params[TONIC_INDEX]+getAddNote(i, plusminus)) && !current.filled[i]) { current.filled[i]=true; current.plusminusValue[i]=plusminus; if (plusminus!=0) current.unusualGrade-=15; current.foundNote(current.params[TONIC_INDEX]+getAddNote(i, plusminus)); } } } // fill in the list /////////////////////////////////////////////////////////////// if (!(current.filled[3] && !(current.filled[0] || current.filled[1] || current.filled[2])) && // if just found seventh, cancel it current.missingCount==0 && // we don't tollerate notes in chord that are not used in the ChordName current.dontHaveGrade>-51) { findChordLogic(current); unsortedProposals.add(current); } } // first, sort by DontHaveGrade shellsort(unsortedProposals,1); int cut=-1; int howManyIncomplete = ChordSettings.instance().getIncompleteChords(); for (int i=0; i0 && cut (firstNegative>=0 ? 0 : firstNegative)-60){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!getDialog().isDisposed() && isValidProcess(processId)){ addProposal(current.params, getChordName(current.params,sharp)+" ("+Math.round(100+current.dontHaveGrade*7/10)+"%)" ); } } }); } catch (Throwable e) { e.printStackTrace(); } } } if (this.proposalParameters.size()==0) return null; return (int[])this.proposalParameters.get(0); } /** adjusts widgets on the Recognizer combo */ protected void redecorate(int params[]){ this.dialog.getSelector().adjustWidgets(params[TONIC_INDEX], params[CHORD_INDEX], params[ALTERATION_INDEX], params[BASS_INDEX], params[PLUSMINUS_INDEX], params[ADDCHK_INDEX], params[I5_INDEX], params[I9_INDEX], params[I11_INDEX]); } /** Assembles chord name according to ChordNamingConvention */ protected String getChordName(int[] param, boolean sharp) { return new ChordNamingConvention().createChordName(param[TONIC_INDEX], param[CHORD_INDEX], param[ALTERATION_INDEX], param[PLUSMINUS_INDEX], param[ADDCHK_INDEX] != 0, param[I5_INDEX], param[I9_INDEX], param[I11_INDEX], param[BASS_INDEX], sharp); } /** Return required interval in semitones for add type and +- modificator * @param type 0=add9, 1=add11, 2=add13 * @param selectionIndex 0=usual, 1="+", 2="-" */ protected int getAddNote(int type, int selectionIndex) { int wantedNote = 0; switch (type) { case 0: wantedNote = 3; // add9 break; case 1: wantedNote = 6; // add11 break; case 2: wantedNote = 10; // add13 break; } switch (selectionIndex) { case 1: wantedNote++; break; case 2: wantedNote--; break; default: break; } return --wantedNote; } void findChordLogic(Proposal current) { boolean[] found = current.filled; int[] plusMinus = current.plusminusValue; /*if (!found[3]) current.unusualGrade-=50;*/ current.params[ALTERATION_INDEX]=0; current.params[I9_INDEX]=plusMinus[0]; current.params[I11_INDEX]=plusMinus[1]; current.params[ADDCHK_INDEX]=0; current.params[PLUSMINUS_INDEX]=0; if (found[2]) { // -------------- 13 current.params[ALTERATION_INDEX]=3; current.params[PLUSMINUS_INDEX]=plusMinus[2]; if (!found[1] || !found[0] || !found[3]) { // b7 or 9 or 11 not inside current.unusualGrade-=10; if (!found[1] && !found[0] && !found[3]) current.params[ADDCHK_INDEX]=1; else { // just penalty if something's missing if (!found[3]) // don't-have penalty if seventh is missing current.dontHaveGrade-=25; if (!found[1]) { // if 9 or 11 is missing, it is more unusual current.unusualGrade-=30; current.dontHaveGrade-=10; } if (!found[0]) { current.unusualGrade-=30; current.dontHaveGrade-=10; } } } } else if (found[1]) { // -------------- 11 current.params[ALTERATION_INDEX]=2; current.params[PLUSMINUS_INDEX]=plusMinus[1]; current.params[I11_INDEX]=0; current.unusualGrade-=10; if (!found[0] || !found[3]) { // b7 or 9 not inside if (!found[0] && !found[3]) current.params[ADDCHK_INDEX]=1; else{ if (!found[3]) current.dontHaveGrade-=25; if (!found[0]) { current.unusualGrade-=30; current.dontHaveGrade-=10; } } } } else if (found[0]) { // 9 current.params[ALTERATION_INDEX]=1; current.params[I9_INDEX]=0; current.params[I11_INDEX]=0; current.params[PLUSMINUS_INDEX]=plusMinus[0]; current.unusualGrade-=10; if (!found[3]) current.params[ADDCHK_INDEX]=1; } } /** * Shellsort, using a sequence suggested by Gonnet. * -- a little adopted * @param a List of Proposals, unsorted * @param sortIndex 1 to sort by don'tHaveGrade, 2 to sort by unusualGrade * @return sorted list by selected criteria */ public void shellsort( java.util.List a, int sortIndex ){ int length = a.size(); for( int gap = length / 2; gap > 0; gap = gap == 2 ? 1 : (int) ( gap / 2.2 ) ) for( int i = gap; i < length; i++ ){ Proposal tmp = (Proposal)a.get(i); int j = i; for( ; j >= gap && ( sortIndex == 1 ? tmp.dontHaveGrade > ((Proposal)a.get(j - gap)).dontHaveGrade : tmp.unusualGrade > ((Proposal)a.get(j - gap)).unusualGrade ) ; j -= gap ) a.set(j, a.get(j - gap)); a.set( j , tmp); } } protected void addProposal(int[] params, String name){ this.proposalParameters.add(params); this.proposalList.add(name); } protected void clearProposals(){ this.proposalList.removeAll(); this.proposalParameters.clear(); } protected ChordDialog getDialog(){ return this.dialog; } protected List getProposalList(){ return this.proposalList; } protected boolean isValidProcess(long processId){ return (this.runningProcess == processId); } protected class Proposal implements Cloneable{ int[] params; /** grade for chord "unusualness" - Cm is less unusual than E7/9+/C */ int unusualGrade = 0; /** penalty for notes that chord doesn't have */ int dontHaveGrade = -15; /** counts the notes that are in chord but still not recognized */ int missingCount; int[] missingNotes; boolean filled[]={false,false,false,false}; int plusminusValue[]={0,0,0}; private Proposal() { super(); this.params = new int[9]; for (int i=0; i<9; i++) this.params[i]=-1; } /** initialize with needed notes */ public Proposal(java.util.List notes) { this.params = new int[9]; for (int i=0; i<9; i++) this.params[i]=-1; int length = notes.size(); this.missingNotes = new int[length]; for (int i = 0; i< length; i++){ // deep copy, because of clone() method this.missingNotes[i] = ((Integer)notes.get(i)).intValue(); } this.missingCount = length; } /** if note is found, mark it as found in the Missing array*/ void foundNote(int value) { int note = (value % 12); if (this.missingCount!=0) for (int i=0; i * Chord theory according to
http://www.jazzguitar.be/quick_crd_ref.html. */ public class ChordSelector extends Composite{ public static final String[][] KEY_NAMES = new String[][]{ TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_CHORD), TGMusicKeyUtils.getFlatKeyNames(TGMusicKeyUtils.PREFIX_CHORD), }; private ChordDialog dialog; private int[] tuning; private List tonicList; private List chordList; private List alterationList; private Button sharpButton; private Button flatButton; private Combo bassCombo; private Button addCheck; private List plusMinusList; private List _5List; private List _9List; private List _11List; private boolean refresh; public ChordSelector(ChordDialog dialog,Composite parent,int style,int[] tuning) { super(parent,style); this.setLayout(new GridLayout(3,false)); this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.dialog = dialog; this.tuning = tuning; this.refresh = true; this.init(); } public void init(){ Composite tonicComposite = new Composite(this,SWT.NONE); tonicComposite.setLayout(this.dialog.gridLayout(1,false,0,0)); tonicComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.tonicList = new List(tonicComposite,SWT.BORDER); this.tonicList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); // sharp & flat buttons Composite buttonsComposite = new Composite(tonicComposite,SWT.NONE); buttonsComposite.setLayout(this.dialog.gridLayout(2,true,0,0)); GridData buttonGd = new GridData(SWT.FILL,SWT.TOP,true,false); buttonGd.heightHint = 28; buttonGd.widthHint = 28; this.sharpButton = new Button(buttonsComposite,SWT.TOGGLE); this.sharpButton.setLayoutData(buttonGd); this.flatButton = new Button(buttonsComposite,SWT.TOGGLE); this.flatButton.setLayoutData(buttonGd); // TODO: maybe put an image instead of #,b this.sharpButton.setText("#"); this.flatButton.setText("b"); this.chordList = new List(this,SWT.BORDER); this.chordList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Label separator = new Label(tonicComposite,SWT.SEPARATOR | SWT.HORIZONTAL); separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true)); Button customizeButton = new Button(tonicComposite,SWT.PUSH); customizeButton.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false)); customizeButton.setText(TuxGuitar.getProperty("settings")); customizeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(new ChordSettingsDialog().open(ChordSelector.this.getShell())){ new SyncThread(new Runnable() { public void run() { ChordSelector.this.showChord(); getChordList().redraw(); } }).start(); } } }); initChordWidgets(); // fill the List widgets with text insertTonicNames(true); for(int i = 0 ; i < ChordDatabase.length(); i ++) { this.chordList.add( ChordDatabase.get(i).getName() ); } /* Iterator chordInfo = ChordCreatorUtil.getChordData().getChords().iterator(); while(chordInfo.hasNext()) { this.chordList.add( ((ChordDatabase.ChordInfo)chordInfo.next()).getName() ); } */ this.chordList.setSelection(0); String[] alterationNames = getAlterationNames(); for(int i = 0;i < alterationNames.length;i++){ this.alterationList.add(alterationNames[i]); } this.alterationList.setSelection(0); String[] plusMinus = this.getPlusMinus(""); for(int i = 0;i < plusMinus.length;i++){ this.plusMinusList.add(plusMinus[i]); } this.plusMinusList.setSelection(0); String[] plus5Minus = this.getPlusMinus("/5"); for(int i = 0;i < plus5Minus.length;i++){ this._5List.add(plus5Minus[i]); } this._5List.setSelection(0); String[] plus9Minus = this.getPlusMinus("/9"); for(int i = 0;i < plus9Minus.length;i++){ this._9List.add(plus9Minus[i]); } this._9List.setSelection(0); String[] plus11Minus = this.getPlusMinus("/11"); for(int i = 0;i < plus11Minus.length;i++){ this._11List.add(plus11Minus[i]); } this._11List.setSelection(0); // LISTENERS this.tonicList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (ChordSelector.this.getRefresh()) { if(getDialog().getEditor() != null && getDialog().getList() != null){ getBassCombo().select(getTonicList().getSelectionIndex()); showChord(); } } } }); this.bassCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (ChordSelector.this.getRefresh()) { if(getDialog().getEditor() != null && getDialog().getList() != null){ showChord(); } } } }); this.chordList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null && getDialog().getList() != null){ adjustWidgetAvailability(); if (ChordSelector.this.getRefresh()) { showChord(); } } } }); this.alterationList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null && getDialog().getList() != null){ ChordSelector.this.adjustWidgetAvailability(); if (ChordSelector.this.getRefresh()) { showChord(); } } } }); this.addCheck.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(getDialog().getEditor() != null && getDialog().getList() != null){ ChordSelector.this.adjustWidgetAvailability(); /* if (getAddCheck().getSelection()) { updateWidget(get_9List(), false); updateWidget(get_11List(), false); } */ if (ChordSelector.this.getRefresh()) { showChord(); //ChordSelector.this.dialog.getList().redraw(); } } } }); this._5List.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null && getDialog().getList() != null){ if (ChordSelector.this.getRefresh()) { showChord(); } } } }); this._9List.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null && getDialog().getList() != null){ if (ChordSelector.this.getRefresh()) { showChord(); } } } }); this._11List.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null && getDialog().getList() != null){ if (ChordSelector.this.getRefresh()) { showChord(); } } } }); this.plusMinusList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(getDialog().getEditor() != null && getDialog().getList() != null){ if (ChordSelector.this.getRefresh()) { showChord(); //ChordSelector.this.dialog.getList().redraw(); } } } }); this.sharpButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { insertTonicNames(true); } }); this.flatButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { insertTonicNames(false); } }); this.adjustWidgetAvailability(); } protected void initChordWidgets() { Composite alterationComposite = new Composite(this,SWT.NONE); alterationComposite.setLayout(this.dialog.gridLayout(1,true,0,0)); alterationComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite aboveComposite = new Composite(alterationComposite,SWT.NONE); aboveComposite.setLayout(this.dialog.gridLayout(2,true,0,0)); aboveComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite firstComposite = new Composite(aboveComposite,SWT.NONE); firstComposite.setLayout(this.dialog.gridLayout(1,false,0,0)); firstComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.alterationList = new List(firstComposite,SWT.BORDER); this.alterationList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.plusMinusList = new List(firstComposite,SWT.BORDER); this.plusMinusList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite secondComposite = new Composite(aboveComposite,SWT.NONE); secondComposite.setLayout(this.dialog.gridLayout(1,false,0,0)); secondComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this._5List = new List(secondComposite,SWT.BORDER); this._5List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this._9List = new List(secondComposite,SWT.BORDER); this._9List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this._11List = new List(secondComposite,SWT.BORDER); this._11List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite bassComposite = new Composite(alterationComposite,SWT.NONE); bassComposite.setLayout(this.dialog.gridLayout(1,true,0,0)); bassComposite.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true)); this.addCheck = new Button(bassComposite, SWT.CHECK | SWT.LEFT); this.addCheck.setText("add"); //this.addCheck.setSelection(false); //this.addCheck.setEnabled(false); this.addCheck.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true)); Label separator = new Label(bassComposite,SWT.SEPARATOR | SWT.HORIZONTAL ); separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true)); Label bText = new Label(bassComposite,SWT.LEFT); bText.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false)); bText.setText(TuxGuitar.getProperty("chord.bass")); this.bassCombo = new Combo(bassComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.bassCombo.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false)); } protected void insertTonicNames(boolean sharp){ String[] names = KEY_NAMES[ sharp?0:1 ]; // update the buttons this.flatButton.setSelection(!sharp); this.sharpButton.setSelection(sharp); // keep the old position int indexL = this.tonicList.getSelectionIndex(); if (indexL==-1) indexL=0; int indexC = this.bassCombo.getSelectionIndex(); if (indexC==-1) indexC=0; // update the list this.tonicList.removeAll(); this.bassCombo.removeAll(); for(int i = 0;i < names.length;i++){ this.tonicList.add(names[i]); this.bassCombo.add(names[i]); } this.tonicList.setSelection(indexL); this.bassCombo.select(indexC); } private String[] getPlusMinus(String text){ String[] names = new String[3]; names[0] = " "; names[1] = text+"+"; names[2] = text+"-"; return names; } private String[] getAlterationNames(){ String[] names = new String[4]; names[0] = " "; names[1] = "9"; names[2] = "11"; names[3] = "13"; return names; } protected void showChord(){ TuxGuitar.instance().loadCursor(getShell(),SWT.CURSOR_WAIT); ChordCreatorListener listener = new ChordCreatorListener() { public void notifyChords(final ChordCreatorUtil instance,final java.util.List chords) { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(instance.isValidProcess() && !getDialog().isDisposed()){ getDialog().getList().setChords(chords); TuxGuitar.instance().loadCursor(getShell(),SWT.CURSOR_ARROW); } } }); } catch (Throwable e) { e.printStackTrace(); } } }; ChordCreatorUtil.getChords(listener, this.tuning, this.chordList.getSelectionIndex(), this.alterationList.getSelectionIndex(), this.plusMinusList.getSelectionIndex(), this.addCheck.getSelection(), this._5List.getSelectionIndex(), this._9List.getSelectionIndex(), this._11List.getSelectionIndex(), this.bassCombo.getSelectionIndex(), this.tonicList.getSelectionIndex(), this.sharpButton.getSelection()); } protected void updateWidget(List widget, boolean enabled) { widget.setEnabled(enabled); if(!enabled){ widget.setSelection(0); } } protected void updateWidget(Button widget, boolean enabled) { widget.setEnabled(enabled); if(!enabled){ widget.setSelection(false); } } /** * Sets all the widgets' fields into recognized chord * (tonic, bass, chord, alterations) */ public void adjustWidgets(int tonic, int chordBasic, int alteration, int bass, int plusMinus, int addBoolean, int index5, int index9, int index11) { this.setRefresh(false); // adjust widgets this.tonicList.setSelection(tonic); this.alterationList.setSelection(alteration); this.bassCombo.select(bass); this.plusMinusList.setSelection(plusMinus); this.addCheck.setSelection(addBoolean != 0); this._5List.setSelection(index5); this._9List.setSelection(index9); this._11List.setSelection(index11); this.chordList.setSelection(chordBasic); this.adjustWidgetAvailability(); this.setRefresh(true); this.showChord(); } /** * adjusts the widgets availability according to chord theory options */ protected void adjustWidgetAvailability() { String chordName = ChordDatabase.get(getChordList().getSelectionIndex()).getName(); if (chordName.equals("dim") || chordName.equals("dim7") || chordName.equals("aug") || chordName.equals("5") ) { updateWidget(getAlterationList(),false); updateWidget(getAddCheck(),false); updateWidget(get_9List(),false); updateWidget(get_11List(),false); updateWidget(getPlusMinusList(),false); if (!chordName.equals("5")){ updateWidget(get_5List(),false);//disableWidget(get_5List()); }else{ updateWidget(get_5List(),true); } } else { // enable and don't change the selection index //getAlterationList().setEnabled(true); //get_5List().setEnabled(true); updateWidget(getAlterationList(),true); updateWidget(get_5List(),true); } if(this.alterationList.isEnabled()){ int currentIndex = this.alterationList.getSelectionIndex(); // handle the +- list and ADD checkbox // handle the 9 and 11 list updateWidget(this.plusMinusList,(currentIndex > 0)); updateWidget(this.addCheck,(currentIndex > 0)); updateWidget(this._9List, (currentIndex >= 2 && !this.addCheck.getSelection() ) ); updateWidget(this._11List, (currentIndex >= 3 && !this.addCheck.getSelection() ) ); } } public boolean getRefresh() { return this.refresh; } public void setRefresh(boolean refresh) { this.refresh = refresh; } public void setTuning(int[] tuning){ this.tuning = tuning; } public int[] getTuning(){ return this.tuning; } protected ChordDialog getDialog() { return this.dialog; } protected List getTonicList() { return this.tonicList; } protected List getChordList() { return this.chordList; } protected List getAlterationList() { return this.alterationList; } protected Button getSharpButton() { return this.sharpButton; } protected Button getFlatButton() { return this.flatButton; } protected Combo getBassCombo() { return this.bassCombo; } protected Button getAddCheck() { return this.addCheck; } protected List getPlusMinusList() { return this.plusMinusList; } protected List get_5List() { return this._5List; } protected List get_9List() { return this._9List; } protected List get_11List() { return this._11List; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettings.java0000644000175000017500000001015211273045225031132 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; public class ChordSettings { private static ChordSettings instance; private boolean emptyStringChords; private float bassGrade; private float fingeringGrade; private float subsequentGrade; private float requiredBasicsGrade; private float manyStringsGrade; private float goodChordSemanticsGrade; private int chordsToDisplay; private int howManyIncompleteChords; private int chordTypeIndex; private int findChordsMin; private int findChordsMax; private ChordSettings() { this.emptyStringChords = false; this.bassGrade = 200.0f; this.fingeringGrade = 150.0f; // was:200 this.subsequentGrade = 200.0f; this.requiredBasicsGrade = 150.0f; this.manyStringsGrade = 100.0f; this.goodChordSemanticsGrade = 200.0f; this.chordsToDisplay = 30; this.howManyIncompleteChords = 4; this.chordTypeIndex = 0; this.findChordsMin=0; this.findChordsMax=15; } public static ChordSettings instance(){ if( instance == null ){ instance = new ChordSettings(); } return instance; } public float getBassGrade() { return this.bassGrade; } public void setBassGrade(float bassGrade) { this.bassGrade = bassGrade; } public int getChordsToDisplay() { return this.chordsToDisplay; } public void setChordsToDisplay(int chordsToDisplay) { this.chordsToDisplay = chordsToDisplay; } public boolean isEmptyStringChords() { return this.emptyStringChords; } public void setEmptyStringChords(boolean emptyStringChords) { this.emptyStringChords = emptyStringChords; } public float getFingeringGrade() { return this.fingeringGrade; } public void setFingeringGrade(float fingeringGrade) { this.fingeringGrade = fingeringGrade; } public float getGoodChordSemanticsGrade() { return this.goodChordSemanticsGrade; } public void setGoodChordSemanticsGrade(float goodChordSemanticsGrade) { this.goodChordSemanticsGrade = goodChordSemanticsGrade; } public float getManyStringsGrade() { return this.manyStringsGrade; } public void setManyStringsGrade(float manyStringsGrade) { this.manyStringsGrade = manyStringsGrade; } public float getRequiredBasicsGrade() { return this.requiredBasicsGrade; } public void setRequiredBasicsGrade(float requiredBasicsGrade) { this.requiredBasicsGrade = requiredBasicsGrade; } public float getSubsequentGrade() { return this.subsequentGrade; } public void setSubsequentGrade(float subsequentGrade) { this.subsequentGrade = subsequentGrade; } public int getIncompleteChords() { return this.howManyIncompleteChords; } public void setIncompleteChords(int incomplete) { this.howManyIncompleteChords = incomplete; } public int getFindChordsMin() { return this.findChordsMin; } public void setFindChordsMin(int min) { this.findChordsMin = min; } public int getFindChordsMax() { return this.findChordsMax; } public void setFindChordsMax(int max) { this.findChordsMax = max; } public int getChordTypeIndex() { return this.chordTypeIndex; } public void setChordTypeIndex(int index) { switch (index) { case 0 : // normal this.bassGrade = 200.0f; this.fingeringGrade = 150.0f; this.subsequentGrade = 200.0f; this.requiredBasicsGrade = 150.0f; this.manyStringsGrade = 100.0f; this.goodChordSemanticsGrade = 200.0f; break; case 1 : // inversions this.bassGrade = -100.0f; this.fingeringGrade = 150.0f; this.subsequentGrade = 200.0f; this.requiredBasicsGrade = 150.0f; this.manyStringsGrade = 50.0f; this.goodChordSemanticsGrade = 200.0f; break; case 2 : // close-voiced this.bassGrade = 50.0f; this.fingeringGrade = 200.0f; this.subsequentGrade = 350.0f; this.requiredBasicsGrade = 150.0f; this.manyStringsGrade = -100.0f; this.goodChordSemanticsGrade = 200.0f; break; case 3 : // open-voiced this.bassGrade = 100.0f; this.fingeringGrade = 100.0f; this.subsequentGrade = -80.0f; this.requiredBasicsGrade = 100.0f; this.manyStringsGrade = -80.0f; this.goodChordSemanticsGrade = 200.0f; break; } this.chordTypeIndex = index; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettingsDialog.java0000644000175000017500000001536311273045225032263 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; /** * Dialog for customizing chord criteria parameters * * @author Nikola Kolarovic * */ public class ChordSettingsDialog { private boolean updated; private Shell dialog; private Button emptyStringChords = null; private Spinner chordsToDisplay = null; private Combo typeCombo = null; private Spinner minFret = null; private Spinner maxFret = null; public ChordSettingsDialog() { super(); } public boolean open(Shell parent){ this.updated = false; this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout()); this.dialog.setText(TuxGuitar.getProperty("settings")); this.init(); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.updated; } protected void init() { Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("chord.settings.tip")); Composite composite = new Composite(group,SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); initTypeCombo(composite); initChordsToDisplay(composite); initEmptyStringChords(composite); initFretSearch(composite); //------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dispose(true); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dispose(false); } }); this.dialog.setDefaultButton( buttonOK ); } private GridData getGridData(int minimumWidth, int minimumHeight){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = minimumWidth; data.minimumHeight = minimumHeight; return data; } private GridData getGridData(){ return getGridData(125,0); } private GridData getButtonData(){ return getGridData(80,25); } private Spinner makeSpinner(Composite parent,String label,int value, int min, int max){ this.newLabel(parent,label); Spinner spinner = new Spinner(parent,SWT.BORDER); spinner.setMinimum(min); spinner.setMaximum(max); spinner.setSelection(value); spinner.setLayoutData(getGridData()); return spinner; } private Label newLabel(Composite parent,String text){ Label label = new Label(parent,SWT.HORIZONTAL); label.setText(text); return label; } private void initTypeCombo(Composite parent) { this.newLabel(parent, TuxGuitar.getProperty("chord.settings.type")); this.typeCombo = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY); this.typeCombo.setLayoutData(getGridData()); this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.most-common")); this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.inversions")); this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.close-voiced")); this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.open-voiced")); this.typeCombo.select(ChordSettings.instance().getChordTypeIndex()); } private void initChordsToDisplay(Composite parent) { this.chordsToDisplay = makeSpinner(parent,TuxGuitar.getProperty("chord.settings.chords-to-display"),ChordSettings.instance().getChordsToDisplay(),1,100); } private void initEmptyStringChords(Composite parent) { this.emptyStringChords = new Button(parent,SWT.CHECK); this.emptyStringChords.setSelection(ChordSettings.instance().isEmptyStringChords()); this.emptyStringChords.setText(TuxGuitar.getProperty("chord.settings.open-chords")); this.emptyStringChords.setSize(100,20); this.emptyStringChords.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,1)); } private void initFretSearch(Composite parent) { Group group = new Group(parent,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(4,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,1)); group.setText(TuxGuitar.getProperty("chord.settings.search-frets")); this.minFret = makeSpinner(group,TuxGuitar.getProperty("chord.settings.minimum-fret"),ChordSettings.instance().getFindChordsMin(),0,15); this.maxFret = makeSpinner(group,TuxGuitar.getProperty("chord.settings.maximum-fret"),ChordSettings.instance().getFindChordsMax(),2,25); this.minFret.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { checkMinimumFretValue(); } }); this.maxFret.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { checkMaximumFretValue(); } }); } protected void checkMinimumFretValue(){ int maxSelection = this.maxFret.getSelection(); int minSelection = this.minFret.getSelection(); if(maxSelection < minSelection){ this.maxFret.setSelection(minSelection); } } protected void checkMaximumFretValue(){ int maxSelection = this.maxFret.getSelection(); int minSelection = this.minFret.getSelection(); if(maxSelection < minSelection){ this.maxFret.setSelection(minSelection); } } private void update(){ ChordSettings.instance().setChordTypeIndex(this.typeCombo.getSelectionIndex()); ChordSettings.instance().setEmptyStringChords(this.emptyStringChords.getSelection()); ChordSettings.instance().setChordsToDisplay(this.chordsToDisplay.getSelection() ); ChordSettings.instance().setFindChordsMax(this.maxFret.getSelection()); ChordSettings.instance().setFindChordsMin(this.minFret.getSelection()); } protected void dispose(boolean updated){ this.updated = updated; if(this.updated){ this.update(); } this.dialog.dispose(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/CustomChordManager.java0000644000175000017500000000347711273045225032113 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord; import java.io.File; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.chord.xml.ChordXMLReader; import org.herac.tuxguitar.gui.editors.chord.xml.ChordXMLWriter; import org.herac.tuxguitar.gui.util.TGFileUtils; import org.herac.tuxguitar.song.models.TGChord; public class CustomChordManager { private long lastEdit; private List chords; public CustomChordManager() { this.chords = ChordXMLReader.getChords(getUserFileName()); this.setLastEdit(); } public int countChords() { return this.chords.size(); } public TGChord getChord(int index) { if (index >= 0 && index < countChords()) { return ((TGChord) this.chords.get(index)).clone(TuxGuitar.instance().getSongManager().getFactory()); } return null; } public void addChord(TGChord chord) { this.chords.add(chord); this.setLastEdit(); } public void removeChord(int index) { if (index >= 0 && index < countChords()) { this.chords.remove(index); this.setLastEdit(); } } public void renameChord(int index, String name) { if (index >= 0 && index < countChords()) { ((TGChord) this.chords.get(index)).setName(name); this.setLastEdit(); } } public boolean existOtherEqualCustomChord(String name, int index) { for (int i = 0; i < countChords(); i++) { TGChord chord = getChord(i); if (chord.getName().equals(name) && index != i) { return true; } } return false; } public void write() { ChordXMLWriter.setChords(this.chords, getUserFileName()); } private static String getUserFileName() { return (TGFileUtils.PATH_USER_CONFIG + File.separator + "customchords.xml"); } private void setLastEdit() { this.lastEdit = System.currentTimeMillis(); } public long getLastEdit() { return this.lastEdit; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/BendEditor.java0000644000175000017500000003440511273045225030720 0ustar julianjulian/* * Created on 28-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectBend; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class BendEditor{ public static final int X_SPACING = 30; public static final int Y_SPACING = 15; private static final int X_LENGTH = TGEffectBend.MAX_POSITION_LENGTH + 1; private static final int Y_LENGTH = TGEffectBend.MAX_VALUE_LENGTH + 1; private int[] x; private int[] y; private int width; private int height; private List points; protected Composite editor; protected DefaultBend[] defaultBends; protected TGEffectBend result; public BendEditor() { this.init(); } private void init(){ this.x = new int[X_LENGTH]; this.y = new int[Y_LENGTH]; this.width = ((X_SPACING * X_LENGTH) - X_SPACING); this.height = ((Y_SPACING * Y_LENGTH) - Y_SPACING); this.points = new ArrayList(); for(int i = 0;i < this.x.length;i++){ this.x[i] = ((i + 1) * X_SPACING); } for(int i = 0;i < this.y.length;i++){ this.y[i] = ((i + 1) * Y_SPACING); } } public TGEffectBend show(Shell shell,final TGNote note){ final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("bend.editor")); //---------------------------------------------------------------------- Composite composite = new Composite(dialog,SWT.NONE); composite.setLayout(new GridLayout(3,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite leftComposite = new Composite(composite,SWT.NONE); leftComposite.setLayout(new GridLayout()); leftComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite rightComposite = new Composite(composite,SWT.NONE); rightComposite.setLayout(new GridLayout()); rightComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); //-------------EDITOR--------------------------------------------------- this.editor = new Composite(leftComposite, SWT.BORDER | SWT.DOUBLE_BUFFERED); this.editor.setBackground(this.editor.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.editor.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true) , getWidth() + (X_SPACING * 2),getHeight() + (Y_SPACING * 2)) ); this.editor.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); paintEditor(painter); } }); this.editor.addMouseListener(new MouseAdapter() { public void mouseUp(org.eclipse.swt.events.MouseEvent e) { checkPoint(e.x,e.y); BendEditor.this.editor.redraw(); } }); //-------------DEFAULT BEND LIST--------------------------------------------------- this.resetDefaultBends(); final org.eclipse.swt.widgets.List defaultBendList = new org.eclipse.swt.widgets.List(rightComposite,SWT.BORDER | SWT.SINGLE); for(int i = 0;i < BendEditor.this.defaultBends.length;i++){ defaultBendList.add(this.defaultBends[i].getName()); } defaultBendList.select(0); defaultBendList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); defaultBendList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int index = defaultBendList.getSelectionIndex(); if(index >= 0 && index < BendEditor.this.defaultBends.length){ setBend(BendEditor.this.defaultBends[defaultBendList.getSelectionIndex()].getBend()); BendEditor.this.editor.redraw(); } } }); //------------------BUTTONS-------------------------- Button buttonClean = new Button(rightComposite, SWT.PUSH); buttonClean.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,true), 80,25)); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { BendEditor.this.result = null; dialog.dispose(); } }); Button buttonOK = new Button(rightComposite, SWT.PUSH); buttonOK.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25)); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { BendEditor.this.result = getBend(); dialog.dispose(); } }); Button buttonCancel = new Button(rightComposite, SWT.PUSH); buttonCancel.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25)); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { BendEditor.this.result = note.getEffect().getBend(); dialog.dispose(); } }); if(note.getEffect().isBend()){ setBend(note.getEffect().getBend()); }else{ setBend(this.defaultBends[0].getBend()); } dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.result; } private GridData resizeData(GridData data,int minimumWidth,int minimumHeight){ data.minimumWidth = minimumWidth; data.minimumHeight = minimumHeight; return data; } protected void paintEditor(TGPainter painter){ for(int i = 0;i < this.x.length;i++){ this.setStyleX(painter,i); painter.initPath(); painter.setAntialias(false); painter.moveTo(this.x[i],Y_SPACING); painter.lineTo(this.x[i],Y_SPACING + this.height); painter.closePath(); } for(int i = 0;i < this.y.length;i++){ this.setStyleY(painter,i); painter.initPath(); painter.setAntialias(false); painter.moveTo(X_SPACING,this.y[i]); painter.lineTo(X_SPACING + this.width,this.y[i]); painter.closePath(); } Iterator it = null; Point prevPoint = null; painter.setLineStyle(SWT.LINE_SOLID); painter.setLineWidth(2); painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)); it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); if(prevPoint != null){ painter.initPath(); painter.moveTo(prevPoint.x,prevPoint.y); painter.lineTo(point.x,point.y); painter.closePath(); } prevPoint = point; } painter.setLineWidth(5); painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); painter.initPath(); painter.setAntialias(false); painter.addRectangle(point.x - 2,point.y - 2,5,5); painter.closePath(); } painter.setLineWidth(1); } private void setStyleX(TGPainter painter,int i){ painter.setLineStyle(SWT.LINE_SOLID); if(i == 0 || i == (X_LENGTH - 1)){ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); }else{ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLUE)); if((i % 3) > 0){ painter.setLineStyle(SWT.LINE_DOT); } } } private void setStyleY(TGPainter painter,int i){ painter.setLineStyle(SWT.LINE_SOLID); if(i == 0 || i == (Y_LENGTH - 1)){ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); }else{ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_RED)); if((i % 2) > 0){ painter.setLineStyle(SWT.LINE_DOT); painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)); }else if((i % 4) > 0){ painter.setLineStyle(SWT.LINE_DOT); } } } protected void checkPoint(int x,int y){ Point point = new Point(this.getX(x),this.getY(y)); if(!this.removePoint(point)){ this.removePointsAtXLine(point.x); this.addPoint(point); this.orderPoints(); } } protected boolean removePoint(Point point){ Iterator it = this.points.iterator(); while(it.hasNext()){ Point currPoint = (Point)it.next(); if(currPoint.x == point.x && currPoint.y == point.y){ this.points.remove(point); return true; } } return false; } protected void orderPoints(){ for(int i = 0;i < this.points.size();i++){ Point minPoint = null; for(int noteIdx = i;noteIdx < this.points.size();noteIdx++){ Point point = (Point)this.points.get(noteIdx); if(minPoint == null || point.x < minPoint.x){ minPoint = point; } } this.points.remove(minPoint); this.points.add(i,minPoint); } } protected void removePointsAtXLine(int x){ Iterator it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); if(point.x == x){ this.points.remove(point); break; } } } protected void addPoint(Point point){ this.points.add(point); } protected int getX(int pointX){ int currPointX = -1; for(int i = 0;i < this.x.length;i++){ if(currPointX < 0){ currPointX = this.x[i]; }else{ int distanceX = Math.abs(pointX - currPointX); int currDistanceX = Math.abs(pointX - this.x[i]); if(currDistanceX < distanceX){ currPointX = this.x[i]; } } } return currPointX; } protected int getY(int pointY){ int currPointY = -1; for(int i = 0;i < this.y.length;i++){ if(currPointY < 0){ currPointY = this.y[i]; }else{ int distanceX = Math.abs(pointY - currPointY); int currDistanceX = Math.abs(pointY - this.y[i]); if(currDistanceX < distanceX){ currPointY = this.y[i]; } } } return currPointY; } public boolean isEmpty(){ return this.points.isEmpty(); } public TGEffectBend getBend(){ if(this.points != null && !this.points.isEmpty()){ TGEffectBend bend = TuxGuitar.instance().getSongManager().getFactory().newEffectBend();//new BendEffect(); Iterator it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); addBendPoint(bend,point); } return bend; } return null; } private void addBendPoint(TGEffectBend effect,Point point){ int position = 0; int value = 0; for(int i=0;i= 0 && indexX < this.x.length && indexY >= 0 && indexY < this.y.length){ Point point = new Point(0,0); point.x = this.x[indexX]; point.y = this.y[indexY]; this.points.add(point); } } public int getWidth(){ return this.width; } public int getHeight(){ return this.height; } private void resetDefaultBends(){ this.defaultBends = new DefaultBend[5]; this.defaultBends[0] = new DefaultBend(TuxGuitar.getProperty("bend.bend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend()); this.defaultBends[0].getBend().addPoint(0,0); this.defaultBends[0].getBend().addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[0].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[1] = new DefaultBend(TuxGuitar.getProperty("bend.bend-release"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend()); this.defaultBends[1].getBend().addPoint(0,0); this.defaultBends[1].getBend().addPoint(3,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[1].getBend().addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[1].getBend().addPoint(9,0); this.defaultBends[1].getBend().addPoint(12,0); this.defaultBends[2] = new DefaultBend(TuxGuitar.getProperty("bend.bend-release-bend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend()); this.defaultBends[2].getBend().addPoint(0,0); this.defaultBends[2].getBend().addPoint(2,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[2].getBend().addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[2].getBend().addPoint(6,0); this.defaultBends[2].getBend().addPoint(8,0); this.defaultBends[2].getBend().addPoint(10,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[2].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[3] = new DefaultBend(TuxGuitar.getProperty("bend.prebend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend()); this.defaultBends[3].getBend().addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[3].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[4] = new DefaultBend(TuxGuitar.getProperty("bend.prebend-release"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend()); this.defaultBends[4].getBend().addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[4].getBend().addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4)); this.defaultBends[4].getBend().addPoint(8,0); this.defaultBends[4].getBend().addPoint(12,0); } private class DefaultBend{ private String name; private TGEffectBend bend; public DefaultBend(String name,TGEffectBend bend){ this.name = name; this.bend = bend; } public TGEffectBend getBend() { return this.bend; } public String getName() { return this.name; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/GraceEditor.java0000644000175000017500000003147011273045225031070 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.effects; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.effects.TGEffectGrace; public class GraceEditor extends SelectionAdapter{ public static final int WIDTH = 400; public static final int HEIGHT = 0; private Spinner fretSpinner; private Button deadButton; private Button beforeBeatButton; private Button onBeatButton; private Button durationButton1; private Button durationButton2; private Button durationButton3; private Button pppButton; private Button ppButton; private Button pButton; private Button mpButton; private Button mfButton; private Button fButton; private Button ffButton; private Button fffButton; private Button noneButton; private Button slideButton; private Button bendButton; private Button hammerButton; protected TGEffectGrace result; public GraceEditor(){ super(); } private static final int LAYOUT_COLUMNS = 2; public TGEffectGrace show(final TGNote note){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("effects.grace-editor")); dialog.setMinimumSize(360,360); Composite composite = new Composite(dialog,SWT.NONE); composite.setLayout(new GridLayout(LAYOUT_COLUMNS,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); int horizontalSpan = 2; //-----defaults------------------------------------------------- boolean dead = false; boolean onBeat = false; int fret = note.getValue(); int duration = 1; int dynamic = TGVelocities.DEFAULT; int transition = TGEffectGrace.TRANSITION_NONE; if(note.getEffect().isGrace()){ dead = note.getEffect().getGrace().isDead(); fret = note.getEffect().getGrace().getFret(); onBeat = note.getEffect().getGrace().isOnBeat(); duration = note.getEffect().getGrace().getDuration(); dynamic = note.getEffect().getGrace().getDynamic(); transition = note.getEffect().getGrace().getTransition(); } //--------------------------------------------------- //------------------NOTE----------------------------- //--------------------------------------------------- Group noteGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("note")); noteGroup.setLayout(new GridLayout(2,false)); Label fretLabel = new Label(noteGroup,SWT.NONE); fretLabel.setText(TuxGuitar.getProperty("fret") + ": "); this.fretSpinner = new Spinner(noteGroup,SWT.BORDER); this.fretSpinner.setLayoutData(makeGridData(1)); this.fretSpinner.setSelection(fret); this.deadButton = new Button(noteGroup,SWT.CHECK); this.deadButton.setText(TuxGuitar.getProperty("note.deadnote")); this.deadButton.setLayoutData(makeGridData(2)); this.deadButton.setSelection(dead); //--------------------------------------------------- //------------------POSITION------------------------- //--------------------------------------------------- Group positionGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("position")); positionGroup.setLayout(new GridLayout()); this.beforeBeatButton = new Button(positionGroup,SWT.RADIO); this.beforeBeatButton.setText(TuxGuitar.getProperty("effects.grace.before-beat")); this.beforeBeatButton.setLayoutData(makeGridData(1)); this.beforeBeatButton.setSelection(!onBeat); this.onBeatButton = new Button(positionGroup,SWT.RADIO); this.onBeatButton.setText(TuxGuitar.getProperty("effects.grace.on-beat")); this.onBeatButton.setLayoutData(makeGridData(1)); this.onBeatButton.setSelection(onBeat); //--------------------------------------------------- //------------------DURATION------------------------- //--------------------------------------------------- Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration")); durationGroup.setLayout(new GridLayout(3,false)); this.durationButton1 = new Button(durationGroup,SWT.RADIO); this.durationButton1.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH)); this.durationButton1.setLayoutData(makeGridData(1)); this.durationButton1.setSelection(duration == 1); this.durationButton2 = new Button(durationGroup,SWT.RADIO); this.durationButton2.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND)); this.durationButton2.setLayoutData(makeGridData(1)); this.durationButton2.setSelection(duration == 2); this.durationButton3 = new Button(durationGroup,SWT.RADIO); this.durationButton3.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH)); this.durationButton3.setLayoutData(makeGridData(1)); this.durationButton3.setSelection(duration == 3); horizontalSpan = 1; //--------------------------------------------------- //------------------DYNAMIC-------------------------- //--------------------------------------------------- Group dynamicGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("dynamic")); dynamicGroup.setLayout(new GridLayout(2,false)); this.pppButton = new Button(dynamicGroup,SWT.RADIO); this.pppButton.setImage(TuxGuitar.instance().getIconManager().getDynamicPPP()); this.pppButton.setLayoutData(makeGridData(1)); this.pppButton.setSelection(dynamic == TGVelocities.PIANO_PIANISSIMO); this.mfButton = new Button(dynamicGroup,SWT.RADIO); this.mfButton.setImage(TuxGuitar.instance().getIconManager().getDynamicMF()); this.mfButton.setLayoutData(makeGridData(1)); this.mfButton.setSelection(dynamic == TGVelocities.MEZZO_FORTE); this.ppButton = new Button(dynamicGroup,SWT.RADIO); this.ppButton.setImage(TuxGuitar.instance().getIconManager().getDynamicPP()); this.ppButton.setLayoutData(makeGridData(1)); this.ppButton.setSelection(dynamic == TGVelocities.PIANISSIMO); this.fButton = new Button(dynamicGroup,SWT.RADIO); this.fButton.setImage(TuxGuitar.instance().getIconManager().getDynamicF()); this.fButton.setLayoutData(makeGridData(1)); this.fButton.setSelection(dynamic == TGVelocities.FORTE); this.pButton = new Button(dynamicGroup,SWT.RADIO); this.pButton.setImage(TuxGuitar.instance().getIconManager().getDynamicP()); this.pButton.setLayoutData(makeGridData(1)); this.pButton.setSelection(dynamic == TGVelocities.PIANO); this.ffButton = new Button(dynamicGroup,SWT.RADIO); this.ffButton.setImage(TuxGuitar.instance().getIconManager().getDynamicFF()); this.ffButton.setLayoutData(makeGridData(1)); this.ffButton.setSelection(dynamic == TGVelocities.FORTISSIMO); this.mpButton = new Button(dynamicGroup,SWT.RADIO); this.mpButton.setImage(TuxGuitar.instance().getIconManager().getDynamicMP()); this.mpButton.setLayoutData(makeGridData(1)); this.mpButton.setSelection(dynamic == TGVelocities.MEZZO_PIANO); this.fffButton = new Button(dynamicGroup,SWT.RADIO); this.fffButton.setImage(TuxGuitar.instance().getIconManager().getDynamicFFF()); this.fffButton.setLayoutData(makeGridData(1)); this.fffButton.setSelection(dynamic == TGVelocities.FORTE_FORTISSIMO); //--------------------------------------------------- //------------------TRANSITION----------------------- //--------------------------------------------------- Group transitionGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("effects.grace.transition")); transitionGroup.setLayout(new GridLayout()); this.noneButton = new Button(transitionGroup,SWT.RADIO); this.noneButton.setText(TuxGuitar.getProperty("effects.grace.transition-none")); this.noneButton.setLayoutData(makeGridData(1)); this.noneButton.setSelection(transition == TGEffectGrace.TRANSITION_NONE); this.bendButton = new Button(transitionGroup,SWT.RADIO); this.bendButton.setText(TuxGuitar.getProperty("effects.grace.transition-bend")); this.bendButton.setLayoutData(makeGridData(1)); this.bendButton.setSelection(transition == TGEffectGrace.TRANSITION_BEND); this.slideButton = new Button(transitionGroup,SWT.RADIO); this.slideButton.setText(TuxGuitar.getProperty("effects.grace.transition-slide")); this.slideButton.setLayoutData(makeGridData(1)); this.slideButton.setSelection(transition == TGEffectGrace.TRANSITION_SLIDE); this.hammerButton = new Button(transitionGroup,SWT.RADIO); this.hammerButton.setText(TuxGuitar.getProperty("effects.grace.transition-hammer")); this.hammerButton.setLayoutData(makeGridData(1)); this.hammerButton.setSelection(transition == TGEffectGrace.TRANSITION_HAMMER); //--------------------------------------------------- //------------------BUTTONS-------------------------- //--------------------------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { GraceEditor.this.result = getGrace(); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { GraceEditor.this.result = null; dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { GraceEditor.this.result = note.getEffect().getGrace(); dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.result; } private Group makeGroup(Composite parent,int horizontalSpan,String text){ Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setLayoutData(makeGridData(horizontalSpan)); group.setText(text); return group; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData makeGridData(int horizontalSpan){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.horizontalSpan = horizontalSpan; return data; } public TGEffectGrace getGrace(){ TGEffectGrace effect = TuxGuitar.instance().getSongManager().getFactory().newEffectGrace(); effect.setFret(this.fretSpinner.getSelection()); effect.setDead(this.deadButton.getSelection()); effect.setOnBeat(this.onBeatButton.getSelection()); //duration if(this.durationButton1.getSelection()){ effect.setDuration(1); }else if(this.durationButton2.getSelection()){ effect.setDuration(2); }else if(this.durationButton3.getSelection()){ effect.setDuration(3); } //velocity if(this.pppButton.getSelection()){ effect.setDynamic(TGVelocities.PIANO_PIANISSIMO); }else if(this.ppButton.getSelection()){ effect.setDynamic(TGVelocities.PIANISSIMO); }else if(this.pButton.getSelection()){ effect.setDynamic(TGVelocities.PIANO); }else if(this.mpButton.getSelection()){ effect.setDynamic(TGVelocities.MEZZO_PIANO); }else if(this.mfButton.getSelection()){ effect.setDynamic(TGVelocities.MEZZO_FORTE); }else if(this.fButton.getSelection()){ effect.setDynamic(TGVelocities.FORTE); }else if(this.ffButton.getSelection()){ effect.setDynamic(TGVelocities.FORTISSIMO); }else if(this.fffButton.getSelection()){ effect.setDynamic(TGVelocities.FORTE_FORTISSIMO); } //transition if(this.noneButton.getSelection()){ effect.setTransition(TGEffectGrace.TRANSITION_NONE); }else if(this.slideButton.getSelection()){ effect.setTransition(TGEffectGrace.TRANSITION_SLIDE); }else if(this.bendButton.getSelection()){ effect.setTransition(TGEffectGrace.TRANSITION_BEND); }else if(this.hammerButton.getSelection()){ effect.setTransition(TGEffectGrace.TRANSITION_HAMMER); } return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/HarmonicEditor.java0000644000175000017500000001722411273045225031610 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.effects; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; public class HarmonicEditor extends SelectionAdapter{ public static final int WIDTH = 400; public static final int HEIGHT = 0; protected Combo harmonicType; protected Combo harmonicDataCombo; protected TGEffectHarmonic result; public HarmonicEditor(){ super(); } protected Button[] typeButtons; public TGEffectHarmonic show(final TGNote note){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("effects.harmonic-editor")); //--------------------------------------------------------------------- //------------HARMONIC------------------------------------------------- //--------------------------------------------------------------------- Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true),WIDTH)); group.setText(TuxGuitar.getProperty("effects.harmonic.type-of-harmonic")); this.typeButtons = new Button[5]; SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { update(note,getSelectedType()); } }; // Natural String label = "[" + TGEffectHarmonic.KEY_NATURAL + "] " + TuxGuitar.getProperty("effects.harmonic.natural"); initButton(group,listener,0,TGEffectHarmonic.TYPE_NATURAL,label); // Artificial label = ("[" + TGEffectHarmonic.KEY_ARTIFICIAL + "] " + TuxGuitar.getProperty("effects.harmonic.artificial")); initButton(group,listener,1,TGEffectHarmonic.TYPE_ARTIFICIAL,label); // Tapped label = ("[" + TGEffectHarmonic.KEY_TAPPED + "] " + TuxGuitar.getProperty("effects.harmonic.tapped")); initButton(group,listener,2,TGEffectHarmonic.TYPE_TAPPED,label); // Pinch label = ("[" + TGEffectHarmonic.KEY_PINCH + "] " + TuxGuitar.getProperty("effects.harmonic.pinch")); initButton(group,listener,3,TGEffectHarmonic.TYPE_PINCH,label); // Semi label = ("[" + TGEffectHarmonic.KEY_SEMI + "] " + TuxGuitar.getProperty("effects.harmonic.semi")); initButton(group,listener,4,TGEffectHarmonic.TYPE_SEMI,label); this.harmonicDataCombo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY); this.harmonicDataCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); //--------------------------------------------------- //------------------BUTTONS-------------------------- //--------------------------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true)); Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { HarmonicEditor.this.result = getHarmonic(); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.setEnabled( note.getEffect().isHarmonic()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { HarmonicEditor.this.result = null; dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { HarmonicEditor.this.result = note.getEffect().getHarmonic(); dialog.dispose(); } }); this.initDefaults(note); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.result; } private GridData resizeData(GridData data,int minWidth){ data.minimumWidth = minWidth; return data; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private void initButton(Composite parent,SelectionListener listener,int index, int type, String label){ this.typeButtons[index] = new Button(parent,SWT.RADIO); this.typeButtons[index].setText(label); this.typeButtons[index].setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.typeButtons[index].setData(new Integer(type)); this.typeButtons[index].addSelectionListener(listener); } protected void initDefaults(TGNote note){ int type = TGEffectHarmonic.TYPE_NATURAL; if(note.getEffect().isHarmonic()){ type = note.getEffect().getHarmonic().getType(); } else{ boolean naturalValid = false; for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){ if((note.getValue() % 12) == (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] % 12) ){ naturalValid = true; break; } } if(!naturalValid){ this.typeButtons[0].setEnabled(false); type = TGEffectHarmonic.TYPE_ARTIFICIAL; } } for(int i = 0; i < this.typeButtons.length; i ++){ int data = ((Integer)this.typeButtons[i].getData()).intValue(); this.typeButtons[i].setSelection((data == type)); } update(note,type); } protected int getSelectedType(){ for(int i = 0; i < this.typeButtons.length; i ++){ if(this.typeButtons[i].getSelection()){ return ((Integer)this.typeButtons[i].getData()).intValue(); } } return 0; } protected void update(TGNote note,int type){ TGEffectHarmonic h = note.getEffect().getHarmonic(); this.harmonicDataCombo.removeAll(); this.harmonicDataCombo.setEnabled(type != TGEffectHarmonic.TYPE_NATURAL); if(type != TGEffectHarmonic.TYPE_NATURAL){ String label = getTypeLabel(type); for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){ this.harmonicDataCombo.add(label + "(" + Integer.toString(TGEffectHarmonic.NATURAL_FREQUENCIES[i][0]) + ")" ); } this.harmonicDataCombo.select((h != null && h.getType() == type)?h.getData():0); } } private String getTypeLabel(int type){ if(type == TGEffectHarmonic.TYPE_NATURAL){ return TGEffectHarmonic.KEY_NATURAL; } if(type == TGEffectHarmonic.TYPE_ARTIFICIAL){ return TGEffectHarmonic.KEY_ARTIFICIAL; } if(type == TGEffectHarmonic.TYPE_TAPPED){ return TGEffectHarmonic.KEY_TAPPED; } if(type == TGEffectHarmonic.TYPE_PINCH){ return TGEffectHarmonic.KEY_PINCH; } if(type == TGEffectHarmonic.TYPE_SEMI){ return TGEffectHarmonic.KEY_SEMI; } return new String(); } public TGEffectHarmonic getHarmonic(){ int type = getSelectedType(); if(type > 0){ TGEffectHarmonic effect = TuxGuitar.instance().getSongManager().getFactory().newEffectHarmonic(); effect.setType(type); effect.setData(this.harmonicDataCombo.getSelectionIndex()); return effect; } return null; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/StrokeEditor.java0000644000175000017500000001337011273045225031315 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.effects; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGStroke; public class StrokeEditor extends SelectionAdapter{ public static final int WIDTH = 400; public static final int HEIGHT = 0; public static final int STATUS_OK = 1; public static final int STATUS_CLEAN = 2; public static final int STATUS_CANCEL = 3; private Button duration4; private Button duration8; private Button duration16; private Button duration32; private Button duration64; private int status; private int value; public StrokeEditor(){ super(); } public void open(final TGBeat beat){ this.status = STATUS_CANCEL; final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("beat.stroke")); //-----defaults------------------------------------------------- int duration = TGDuration.SIXTEENTH; if( beat.getStroke().getDirection() != TGStroke.STROKE_NONE ){ duration = beat.getStroke().getValue(); } //--------------------------------------------------- //------------------DURATION------------------------- //--------------------------------------------------- Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setLayout(new GridLayout(5,false)); group.setText( TuxGuitar.getProperty("duration") ); this.duration64 = new Button(group,SWT.RADIO); this.duration64.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH)); this.duration64.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.duration64.setSelection(duration == TGDuration.SIXTY_FOURTH); this.duration32 = new Button(group,SWT.RADIO); this.duration32.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND)); this.duration32.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.duration32.setSelection(duration == TGDuration.THIRTY_SECOND); this.duration16 = new Button(group,SWT.RADIO); this.duration16.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH)); this.duration16.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.duration16.setSelection(duration == TGDuration.SIXTEENTH); this.duration8 = new Button(group,SWT.RADIO); this.duration8.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH)); this.duration8.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.duration8.setSelection(duration == TGDuration.EIGHTH); this.duration4 = new Button(group,SWT.RADIO); this.duration4.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER)); this.duration4.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.duration4.setSelection(duration == TGDuration.QUARTER); //--------------------------------------------------- //------------------BUTTONS-------------------------- //--------------------------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setStatus( STATUS_OK ); setValue( getSelection() ); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setStatus( STATUS_CLEAN ); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { setStatus( STATUS_CANCEL ); dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected int getSelection(){ if( this.duration4.getSelection() ){ return TGDuration.QUARTER; } if( this.duration8.getSelection() ){ return TGDuration.EIGHTH; } if( this.duration16.getSelection() ){ return TGDuration.SIXTEENTH; } if( this.duration32.getSelection() ){ return TGDuration.THIRTY_SECOND; } if( this.duration64.getSelection() ){ return TGDuration.SIXTY_FOURTH; } return 0; } public int getStatus() { return this.status; } public void setStatus(int status) { this.status = status; } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloBarEditor.java0000644000175000017500000003544611273045225032124 0ustar julianjulian/* * Created on 28-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TremoloBarEditor{ public static final int X_SPACING = 30; public static final int Y_SPACING = 10; private static final int X_LENGTH = TGEffectTremoloBar.MAX_POSITION_LENGTH + 1; private static final int Y_LENGTH = (TGEffectTremoloBar.MAX_VALUE_LENGTH * 2) + 1; private int[] x; private int[] y; private int width; private int height; private List points; protected Composite editor; protected DefaultTremoloBar[] defaultTremoloBars; protected TGEffectTremoloBar result; public TremoloBarEditor() { this.init(); } private void init(){ this.x = new int[X_LENGTH]; this.y = new int[Y_LENGTH]; this.width = ((X_SPACING * X_LENGTH) - X_SPACING); this.height = ((Y_SPACING * Y_LENGTH) - Y_SPACING); this.points = new ArrayList(); for(int i = 0;i < this.x.length;i++){ this.x[i] = ((i + 1) * X_SPACING); } for(int i = 0;i < this.y.length;i++){ this.y[i] = ((i + 1) * Y_SPACING); } } public TGEffectTremoloBar show(Shell shell,final TGNote note){ final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("effects.tremolo-bar-editor")); //---------------------------------------------------------------------- Composite composite = new Composite(dialog,SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite leftComposite = new Composite(composite,SWT.NONE); leftComposite.setLayout(new GridLayout()); leftComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite rightComposite = new Composite(composite,SWT.NONE); rightComposite.setLayout(new GridLayout()); rightComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); //-------------EDITOR--------------------------------------------------- this.editor = new Composite(leftComposite, SWT.BORDER | SWT.DOUBLE_BUFFERED); this.editor.setBackground(this.editor.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.editor.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true) , getWidth() + (X_SPACING * 2),getHeight() + (Y_SPACING * 2)) ); this.editor.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); paintEditor(painter); } }); this.editor.addMouseListener(new MouseAdapter() { public void mouseUp(org.eclipse.swt.events.MouseEvent e) { checkPoint(e.x,e.y); TremoloBarEditor.this.editor.redraw(); } }); //-------------DEFAULT BEND LIST--------------------------------------------------- this.resetDefaultTremoloBars(); final org.eclipse.swt.widgets.List defaultTremoloBarList = new org.eclipse.swt.widgets.List(rightComposite,SWT.BORDER); for(int i = 0;i < this.defaultTremoloBars.length;i++){ defaultTremoloBarList.add(this.defaultTremoloBars[i].getName()); } defaultTremoloBarList.select(0); defaultTremoloBarList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); defaultTremoloBarList.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int index = defaultTremoloBarList.getSelectionIndex(); if(index >= 0 && index < TremoloBarEditor.this.defaultTremoloBars.length){ setTremoloBar(TremoloBarEditor.this.defaultTremoloBars[index].getTremoloBar()); TremoloBarEditor.this.editor.redraw(); } } }); //------------------BUTTONS-------------------------- Button buttonClean = new Button(rightComposite, SWT.PUSH); buttonClean.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,true), 80,25)); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TremoloBarEditor.this.result = null; dialog.dispose(); } }); Button buttonOK = new Button(rightComposite, SWT.PUSH); buttonOK.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25)); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TremoloBarEditor.this.result = getTremoloBar(); dialog.dispose(); } }); Button buttonCancel = new Button(rightComposite, SWT.PUSH); buttonCancel.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25)); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TremoloBarEditor.this.result = note.getEffect().getTremoloBar(); dialog.dispose(); } }); if(note.getEffect().isTremoloBar()){ setTremoloBar(note.getEffect().getTremoloBar()); }else{ setTremoloBar(this.defaultTremoloBars[0].getTremoloBar()); } dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.result; } private GridData resizeData(GridData data,int minimumWidth,int minimumHeight){ data.minimumWidth = minimumWidth; data.minimumHeight = minimumHeight; return data; } protected void paintEditor(TGPainter painter){ for(int i = 0;i < this.x.length;i++){ this.setStyleX(painter,i); painter.initPath(); painter.setAntialias(false); painter.moveTo(this.x[i],Y_SPACING); painter.lineTo(this.x[i],Y_SPACING + this.height); painter.closePath(); } for(int i = 0;i < this.y.length;i++){ this.setStyleY(painter,i); painter.initPath(); painter.setAntialias(false); painter.moveTo(X_SPACING,this.y[i]); painter.lineTo(X_SPACING + this.width,this.y[i]); painter.closePath(); } Iterator it = null; Point prevPoint = null; painter.setLineStyle(SWT.LINE_SOLID); painter.setLineWidth(2); painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)); it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); if(prevPoint != null){ painter.initPath(); painter.moveTo(prevPoint.x,prevPoint.y); painter.lineTo(point.x,point.y); painter.closePath(); } prevPoint = point; } painter.setLineWidth(5); painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); painter.initPath(); painter.setAntialias(false); painter.addRectangle(point.x - 2,point.y - 2,5,5); painter.closePath(); } painter.setLineWidth(1); } private void setStyleX(TGPainter painter,int i){ painter.setLineStyle(SWT.LINE_SOLID); if(i == 0 || i == (X_LENGTH - 1)){ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); }else{ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLUE)); if((i % 3) > 0){ painter.setLineStyle(SWT.LINE_DOT); } } } private void setStyleY(TGPainter painter,int i){ painter.setLineStyle(SWT.LINE_SOLID); if(i == 0 || i == (Y_LENGTH - 1)){ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); } else if(i == (TGEffectTremoloBar.MAX_VALUE_LENGTH)){ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)); }else{ painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_RED)); if((i % 2) > 0){ painter.setLineStyle(SWT.LINE_DOT); painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)); } } } protected void checkPoint(int x,int y){ Point point = new Point(this.getX(x),this.getY(y)); if(!this.removePoint(point)){ this.removePointsAtXLine(point.x); this.addPoint(point); this.orderPoints(); } } private boolean removePoint(Point point){ Iterator it = this.points.iterator(); while(it.hasNext()){ Point currPoint = (Point)it.next(); if(currPoint.x == point.x && currPoint.y == point.y){ this.points.remove(point); return true; } } return false; } private void orderPoints(){ for(int i = 0;i < this.points.size();i++){ Point minPoint = null; for(int noteIdx = i;noteIdx < this.points.size();noteIdx++){ Point point = (Point)this.points.get(noteIdx); if(minPoint == null || point.x < minPoint.x){ minPoint = point; } } this.points.remove(minPoint); this.points.add(i,minPoint); } } private void removePointsAtXLine(int x){ Iterator it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); if(point.x == x){ this.points.remove(point); break; } } } private void addPoint(Point point){ this.points.add(point); } private int getX(int pointX){ int currPointX = -1; for(int i = 0;i < this.x.length;i++){ if(currPointX < 0){ currPointX = this.x[i]; }else{ int distanceX = Math.abs(pointX - currPointX); int currDistanceX = Math.abs(pointX - this.x[i]); if(currDistanceX < distanceX){ currPointX = this.x[i]; } } } return currPointX; } private int getY(int pointY){ int currPointY = -1; for(int i = 0;i < this.y.length;i++){ if(currPointY < 0){ currPointY = this.y[i]; }else{ int distanceX = Math.abs(pointY - currPointY); int currDistanceX = Math.abs(pointY - this.y[i]); if(currDistanceX < distanceX){ currPointY = this.y[i]; } } } return currPointY; } public boolean isEmpty(){ return this.points.isEmpty(); } public TGEffectTremoloBar getTremoloBar(){ if(this.points != null && !this.points.isEmpty()){ TGEffectTremoloBar tremoloBar = TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar();//new TremoloBarEffect(); Iterator it = this.points.iterator(); while(it.hasNext()){ Point point = (Point)it.next(); addTremoloBarPoint(tremoloBar,point); } return tremoloBar; } return null; } private void addTremoloBarPoint(TGEffectTremoloBar effect,Point point){ int position = 0; int value = 0; for(int i=0;i= 0 && indexX < this.x.length && indexY >= 0 && indexY < this.y.length){ Point point = new Point(0,0); point.x = this.x[indexX]; point.y = this.y[indexY]; this.points.add(point); } } public int getWidth(){ return this.width; } public int getHeight(){ return this.height; } private void resetDefaultTremoloBars(){ this.defaultTremoloBars = new DefaultTremoloBar[6]; this.defaultTremoloBars[0] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.dip"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar()); this.defaultTremoloBars[0].getTremoloBar().addPoint(0,0); this.defaultTremoloBars[0].getTremoloBar().addPoint(6,-2); this.defaultTremoloBars[0].getTremoloBar().addPoint(12,0); this.defaultTremoloBars[1] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.dive"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar()); this.defaultTremoloBars[1].getTremoloBar().addPoint(0,0); this.defaultTremoloBars[1].getTremoloBar().addPoint(9,-2); this.defaultTremoloBars[1].getTremoloBar().addPoint(12,-2); this.defaultTremoloBars[2] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.release-up"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar()); this.defaultTremoloBars[2].getTremoloBar().addPoint(0,-2); this.defaultTremoloBars[2].getTremoloBar().addPoint(9,-2); this.defaultTremoloBars[2].getTremoloBar().addPoint(12,0); this.defaultTremoloBars[3] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.inverted-dip"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar()); this.defaultTremoloBars[3].getTremoloBar().addPoint(0,0); this.defaultTremoloBars[3].getTremoloBar().addPoint(6,2); this.defaultTremoloBars[3].getTremoloBar().addPoint(12,0); this.defaultTremoloBars[4] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.return"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar()); this.defaultTremoloBars[4].getTremoloBar().addPoint(0,0); this.defaultTremoloBars[4].getTremoloBar().addPoint(9,2); this.defaultTremoloBars[4].getTremoloBar().addPoint(12,2); this.defaultTremoloBars[5] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.release-down"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar()); this.defaultTremoloBars[5].getTremoloBar().addPoint(0,2); this.defaultTremoloBars[5].getTremoloBar().addPoint(9,2); this.defaultTremoloBars[5].getTremoloBar().addPoint(12,0); } private class DefaultTremoloBar{ private String name; private TGEffectTremoloBar tremoloBar; public DefaultTremoloBar(String name,TGEffectTremoloBar tremoloBar){ this.name = name; this.tremoloBar = tremoloBar; } public TGEffectTremoloBar getTremoloBar() { return this.tremoloBar; } public String getName() { return this.name; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloPickingEditor.java0000644000175000017500000001304211273045225032770 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.effects; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking; public class TremoloPickingEditor extends SelectionAdapter{ public static final int WIDTH = 400; public static final int HEIGHT = 0; private Button thirtySecondButton; private Button sixTeenthButton; private Button eighthButton; protected TGEffectTremoloPicking result; public TremoloPickingEditor(){ super(); } public TGEffectTremoloPicking show(final TGNote note){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("effects.tremolo-picking-editor")); Composite composite = new Composite(dialog,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); int horizontalSpan = 2; //-----defaults------------------------------------------------- int duration = TGDuration.EIGHTH; if(note.getEffect().isTremoloPicking()){ duration = note.getEffect().getTremoloPicking().getDuration().getValue(); } //--------------------------------------------------- //------------------DURATION------------------------- //--------------------------------------------------- Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration")); durationGroup.setLayout(new GridLayout(3,false)); this.thirtySecondButton = new Button(durationGroup,SWT.RADIO); this.thirtySecondButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND)); this.thirtySecondButton.setLayoutData(makeGridData(1)); this.thirtySecondButton.setSelection(duration == TGDuration.THIRTY_SECOND); this.sixTeenthButton = new Button(durationGroup,SWT.RADIO); this.sixTeenthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH)); this.sixTeenthButton.setLayoutData(makeGridData(1)); this.sixTeenthButton.setSelection(duration == TGDuration.SIXTEENTH); this.eighthButton = new Button(durationGroup,SWT.RADIO); this.eighthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH)); this.eighthButton.setLayoutData(makeGridData(1)); this.eighthButton.setSelection(duration == TGDuration.EIGHTH); //--------------------------------------------------- //------------------BUTTONS-------------------------- //--------------------------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TremoloPickingEditor.this.result = getTremoloPicking(); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TremoloPickingEditor.this.result = null; dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TremoloPickingEditor.this.result = note.getEffect().getTremoloPicking(); dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.result; } private Group makeGroup(Composite parent,int horizontalSpan,String text){ Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setLayoutData(makeGridData(horizontalSpan)); group.setText(text); return group; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData makeGridData(int horizontalSpan){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.horizontalSpan = horizontalSpan; return data; } public TGEffectTremoloPicking getTremoloPicking(){ TGEffectTremoloPicking effect = TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloPicking(); if(this.thirtySecondButton.getSelection()){ effect.getDuration().setValue(TGDuration.THIRTY_SECOND); }else if(this.sixTeenthButton.getSelection()){ effect.getDuration().setValue(TGDuration.SIXTEENTH); }else if(this.eighthButton.getSelection()){ effect.getDuration().setValue(TGDuration.EIGHTH); }else{ return null; } return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TrillEditor.java0000644000175000017500000001435011273045225031133 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.effects; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.effects.TGEffectTrill; public class TrillEditor extends SelectionAdapter{ public static final int WIDTH = 400; public static final int HEIGHT = 0; private Spinner fretSpinner; private Button sixtyFourthButton; private Button thirtySecondButton; private Button sixTeenthButton; protected TGEffectTrill result; public TrillEditor(){ super(); } public TGEffectTrill show(final TGNote note){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("effects.trill-editor")); Composite composite = new Composite(dialog,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); int horizontalSpan = 2; //-----defaults------------------------------------------------- int fret = note.getValue(); int duration = TGDuration.SIXTEENTH; if(note.getEffect().isTrill()){ fret = note.getEffect().getTrill().getFret(); duration = note.getEffect().getTrill().getDuration().getValue(); } //--------------------------------------------------- //------------------NOTE----------------------------- //--------------------------------------------------- Group noteGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("note")); noteGroup.setLayout(new GridLayout(2,false)); Label fretLabel = new Label(noteGroup,SWT.NONE); fretLabel.setText(TuxGuitar.getProperty("fret") + ": "); this.fretSpinner = new Spinner(noteGroup,SWT.BORDER); this.fretSpinner.setLayoutData(makeGridData(1)); this.fretSpinner.setSelection(fret); //--------------------------------------------------- //------------------DURATION------------------------- //--------------------------------------------------- Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration")); durationGroup.setLayout(new GridLayout(3,false)); this.sixtyFourthButton = new Button(durationGroup,SWT.RADIO); this.sixtyFourthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH)); this.sixtyFourthButton.setLayoutData(makeGridData(1)); this.sixtyFourthButton.setSelection(duration == TGDuration.SIXTY_FOURTH); this.thirtySecondButton = new Button(durationGroup,SWT.RADIO); this.thirtySecondButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND)); this.thirtySecondButton.setLayoutData(makeGridData(1)); this.thirtySecondButton.setSelection(duration == TGDuration.THIRTY_SECOND); this.sixTeenthButton = new Button(durationGroup,SWT.RADIO); this.sixTeenthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH)); this.sixTeenthButton.setLayoutData(makeGridData(1)); this.sixTeenthButton.setSelection(duration == TGDuration.SIXTEENTH); //--------------------------------------------------- //------------------BUTTONS-------------------------- //--------------------------------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TrillEditor.this.result = getTrill(); dialog.dispose(); } }); Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TrillEditor.this.result = null; dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TrillEditor.this.result = note.getEffect().getTrill(); dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.result; } private Group makeGroup(Composite parent,int horizontalSpan,String text){ Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setLayoutData(makeGridData(horizontalSpan)); group.setText(text); return group; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData makeGridData(int horizontalSpan){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.horizontalSpan = horizontalSpan; return data; } public TGEffectTrill getTrill(){ TGEffectTrill effect = TuxGuitar.instance().getSongManager().getFactory().newEffectTrill(); effect.setFret(this.fretSpinner.getSelection()); if(this.sixtyFourthButton.getSelection()){ effect.getDuration().setValue(TGDuration.SIXTY_FOURTH); }else if(this.thirtySecondButton.getSelection()){ effect.getDuration().setValue(TGDuration.THIRTY_SECOND); }else if(this.sixTeenthButton.getSelection()){ effect.getDuration().setValue(TGDuration.SIXTEENTH); }else{ return null; } return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoard.java0000644000175000017500000005654311273045225031111 0ustar julianjulian/* * Created on 28-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.fretboard; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.caret.GoLeftAction; import org.herac.tuxguitar.gui.actions.caret.GoRightAction; import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction; import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction; import org.herac.tuxguitar.gui.actions.tools.ScaleAction; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.gui.util.TGMusicKeyUtils; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class FretBoard extends Composite { public static final int MAX_FRETS = 24; public static final int TOP_SPACING = 10; public static final int BOTTOM_SPACING = 10; private static final int STRING_SPACING = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.FRETBOARD_STRING_SPACING); private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_FRETBOARD); private FretBoardListener listener; private FretBoardConfig config; private Composite toolComposite; private Label durationLabel; private Label scaleName; private Button scale; private Button settings; private Image fretBoard; private TGBeat beat; private TGBeat externalBeat; private int[] frets; private int[] strings; private int fretSpacing; private boolean changes; private Point lastSize; private int duration; protected Combo handSelector; protected Composite fretBoardComposite; public FretBoard(Composite parent) { super(parent, SWT.NONE); this.setLayout(new FormLayout()); this.listener = new FretBoardListener(); this.config = new FretBoardConfig(); this.config.load(); this.initToolBar(); this.initEditor(); this.loadIcons(); this.loadProperties(); TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.toolComposite); TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.fretBoardComposite); } private void initToolBar() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); data.top = new FormAttachment(0,0); GridLayout layout = new GridLayout(); layout.makeColumnsEqualWidth = false; layout.numColumns = 0; layout.marginWidth = 0; this.toolComposite = new Composite(this, SWT.NONE); // position layout.numColumns ++; Button goLeft = new Button(this.toolComposite, SWT.ARROW | SWT.LEFT); goLeft.addSelectionListener(TuxGuitar.instance().getAction(GoLeftAction.NAME)); layout.numColumns ++; Button goRight = new Button(this.toolComposite, SWT.ARROW | SWT.RIGHT); goRight.addSelectionListener(TuxGuitar.instance().getAction(GoRightAction.NAME)); // separator layout.numColumns ++; makeToolSeparator(this.toolComposite); // duration layout.numColumns ++; Button decrement = new Button(this.toolComposite, SWT.ARROW | SWT.MIN); decrement.addSelectionListener(TuxGuitar.instance().getAction(DecrementDurationAction.NAME)); layout.numColumns ++; this.durationLabel = new Label(this.toolComposite, SWT.BORDER); layout.numColumns ++; Button increment = new Button(this.toolComposite, SWT.ARROW | SWT.MAX); increment.addSelectionListener(TuxGuitar.instance().getAction(IncrementDurationAction.NAME)); // separator layout.numColumns ++; makeToolSeparator(this.toolComposite); // hand selector layout.numColumns ++; this.handSelector = new Combo(this.toolComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.handSelector.add(TuxGuitar.getProperty("fretboard.right-mode")); this.handSelector.add(TuxGuitar.getProperty("fretboard.left-mode")); this.handSelector.select( this.getDirection(this.config.getDirection()) ); this.handSelector.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateDirection(FretBoard.this.handSelector.getSelectionIndex()); } }); // separator layout.numColumns ++; makeToolSeparator(this.toolComposite); // scale layout.numColumns ++; this.scale = new Button(this.toolComposite, SWT.PUSH); this.scale.setText(TuxGuitar.getProperty("scale")); this.scale.addSelectionListener(TuxGuitar.instance().getAction(ScaleAction.NAME)); // scale name layout.numColumns ++; this.scaleName = new Label(this.toolComposite, SWT.LEFT); // settings layout.numColumns ++; this.settings = new Button(this.toolComposite, SWT.PUSH); this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings()); this.settings.setToolTipText(TuxGuitar.getProperty("settings")); this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); this.settings.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { configure(); } }); this.toolComposite.setLayoutData(data); this.toolComposite.setLayout(layout); } private void makeToolSeparator(Composite parent){ Label separator = new Label(parent,SWT.SEPARATOR); separator.setLayoutData(new GridData(20,20)); } private void initEditor() { this.lastSize = new Point(0,0); FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); data.top = new FormAttachment(this.toolComposite,0); data.bottom = new FormAttachment(100, 0); this.fretBoardComposite = new Composite(this, SWT.BORDER | SWT.DOUBLE_BUFFERED); this.fretBoardComposite.setLayoutData(data); this.fretBoardComposite.setBackground(this.config.getColorBackground()); this.fretBoardComposite.addMouseListener(this.listener); this.fretBoardComposite.addPaintListener(this.listener); } private void loadDurationImage(boolean force) { int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue(); if(force || this.duration != duration){ this.duration = duration; this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration)); } } private void loadScaleName() { int scaleKey = TuxGuitar.instance().getScaleManager().getSelectionKey(); int scaleIndex = TuxGuitar.instance().getScaleManager().getSelectionIndex(); String key = TuxGuitar.instance().getScaleManager().getKeyName( scaleKey ); String name = TuxGuitar.instance().getScaleManager().getScaleName( scaleIndex ); this.scaleName.setText( ( key != null && name != null ) ? ( key + " - " + name ) : "" ); this.scaleName.pack(); } private void calculateFretSpacing(int width) { this.fretSpacing = (width / MAX_FRETS); int aux = 0; for (int i = 0; i < MAX_FRETS; i++) { aux += (i * 2); } this.fretSpacing += (aux / MAX_FRETS) + 2; } private void disposeFretBoardImage(){ if(this.fretBoard != null && !this.fretBoard.isDisposed()){ this.fretBoard.dispose(); } } protected void initFrets(int fromX) { this.frets = new int[MAX_FRETS]; int nextX = fromX; int direction = this.getDirection(this.config.getDirection()); if (direction == FretBoardConfig.DIRECTION_RIGHT) { for (int i = 0; i < this.frets.length; i++) { this.frets[i] = nextX; nextX += (this.fretSpacing - ((i + 1) * 2)); } } else if (direction == FretBoardConfig.DIRECTION_LEFT) { for (int i = this.frets.length - 1; i >= 0; i--) { this.frets[i] = nextX; nextX += (this.fretSpacing - (i * 2)); } } } private int getDirection( int value ){ int direction = value; if( direction != FretBoardConfig.DIRECTION_RIGHT && direction != FretBoardConfig.DIRECTION_LEFT ){ direction = FretBoardConfig.DIRECTION_RIGHT; } return direction; } private void initStrings(int count) { int fromY = TOP_SPACING; this.strings = new int[count]; for (int i = 0; i < this.strings.length; i++) { this.strings[i] = fromY + (STRING_SPACING * i); } } private void updateEditor(){ if(isVisible()){ if(TuxGuitar.instance().getPlayer().isRunning()){ this.beat = TuxGuitar.instance().getEditorCache().getPlayBeat(); }else if(this.externalBeat != null){ this.beat = this.externalBeat; }else{ this.beat = TuxGuitar.instance().getEditorCache().getEditBeat(); } if (this.strings.length != getStringCount()) { disposeFretBoardImage(); initStrings(getStringCount()); //Fuerzo a cambiar el ancho this.lastSize.y = 0; } int clientWidth = getClientArea().width; int clientHeight = getClientArea().height; if(this.lastSize.x != clientWidth || hasChanges()){ this.layout(getClientArea().width); } if(this.lastSize.y != clientHeight){ TuxGuitar.instance().getFretBoardEditor().showFretBoard(); } this.lastSize.x = clientWidth; this.lastSize.y = clientHeight; } } private void paintFretBoard(TGPainter painter){ if(this.fretBoard == null || this.fretBoard.isDisposed()){ this.fretBoard = new Image(getDisplay(),getClientArea().width,((STRING_SPACING) * (this.strings.length - 1)) + TOP_SPACING + BOTTOM_SPACING); TGPainter painterBuffer = new TGPainter(new GC(this.fretBoard)); //fondo painterBuffer.setBackground(this.config.getColorBackground()); painterBuffer.initPath(TGPainter.PATH_FILL); painterBuffer.addRectangle(getClientArea()); painterBuffer.closePath(); // pinto las cegillas Image fretImage = TuxGuitar.instance().getIconManager().getFretboardFret(); Image firstFretImage = TuxGuitar.instance().getIconManager().getFretboardFirstFret(); painterBuffer.drawImage(firstFretImage,0,0,firstFretImage.getBounds().width,firstFretImage.getBounds().height,this.frets[0] - 5,this.strings[0] - 5,firstFretImage.getBounds().width,this.strings[this.strings.length - 1] ); paintFretPoints(painterBuffer,0); for (int i = 1; i < this.frets.length; i++) { painterBuffer.drawImage(fretImage,0,0,fretImage.getBounds().width,fretImage.getBounds().height,this.frets[i],this.strings[0] - 5,fretImage.getBounds().width,this.strings[this.strings.length - 1] ); paintFretPoints(painterBuffer, i); } // pinto las cuerdas for (int i = 0; i < this.strings.length; i++) { painterBuffer.setForeground(this.config.getColorString()); if(i > 2){ painterBuffer.setLineWidth(2); } painterBuffer.initPath(); painterBuffer.setAntialias(false); painterBuffer.moveTo(this.frets[0], this.strings[i]); painterBuffer.lineTo(this.frets[this.frets.length - 1], this.strings[i]); painterBuffer.closePath(); } // pinto la escala paintScale(painterBuffer); painterBuffer.dispose(); } painter.drawImage(this.fretBoard,0,0); } private void paintFretPoints(TGPainter painter, int fretIndex) { painter.setBackground(this.config.getColorFretPoint()); if ((fretIndex + 1) < this.frets.length) { int fret = ((fretIndex + 1) % 12); painter.setLineWidth(10); if (fret == 0) { int size = getOvalSize(); int x = this.frets[fretIndex] + ((this.frets[fretIndex + 1] - this.frets[fretIndex]) / 2); int y1 = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2) - STRING_SPACING; int y2 = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2) + STRING_SPACING; painter.initPath(TGPainter.PATH_FILL); painter.addOval(x - (size / 2), y1 - (size / 2), size, size); painter.addOval(x - (size / 2), y2 - (size / 2), size, size); painter.closePath(); } else if (fret == 3 || fret == 5 || fret == 7 || fret == 9) { int size = getOvalSize(); int x = this.frets[fretIndex] + ((this.frets[fretIndex + 1] - this.frets[fretIndex]) / 2); int y = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2); painter.initPath(TGPainter.PATH_FILL); painter.addOval(x - (size / 2),y - (size / 2),size, size); painter.closePath(); } painter.setLineWidth(1); } } private void paintScale(TGPainter painter) { TGTrack track = getTrack(); for (int i = 0; i < this.strings.length; i++) { TGString string = track.getString(i + 1); for (int j = 0; j < this.frets.length; j++) { int noteIndex = ((string.getValue() + j) % 12 ); if(TuxGuitar.instance().getScaleManager().getScale().getNote(noteIndex)){ int x = this.frets[j]; if(j > 0){ x -= ((x - this.frets[j - 1]) / 2); } int y = this.strings[i]; if( (this.config.getStyle() & FretBoardConfig.DISPLAY_TEXT_SCALE) != 0 ){ paintKeyText(painter,this.config.getColorScale(),x,y,NOTE_NAMES[noteIndex]); } else{ paintKeyOval(painter,this.config.getColorScale(),x,y); } } } } painter.setForeground(this.config.getColorBackground()); } private void paintNotes(TGPainter painter) { if(this.beat != null){ TGTrack track = getTrack(); for(int v = 0; v < this.beat.countVoices(); v ++){ TGVoice voice = this.beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNote note = (TGNote) it.next(); int fretIndex = note.getValue(); int stringIndex = note.getString() - 1; if (fretIndex >= 0 && fretIndex < this.frets.length && stringIndex >= 0 && stringIndex < this.strings.length) { int x = this.frets[fretIndex]; if (fretIndex > 0) { x -= ((this.frets[fretIndex] - this.frets[fretIndex - 1]) / 2); } int y = this.strings[stringIndex]; if( (this.config.getStyle() & FretBoardConfig.DISPLAY_TEXT_NOTE) != 0 ){ int realValue = track.getString(note.getString()).getValue() + note.getValue(); paintKeyText(painter,this.config.getColorNote(), x, y, NOTE_NAMES[ (realValue % 12) ]); } else{ paintKeyOval(painter,this.config.getColorNote(), x, y); } } } } painter.setLineWidth(1); } } private void paintKeyOval(TGPainter painter,Color background,int x, int y) { int size = getOvalSize(); painter.setBackground(background); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(x - (size / 2),y - (size / 2)); painter.addOval(x - (size / 2),y - (size / 2),size, size); painter.closePath(); } private void paintKeyText(TGPainter painter,Color foreground,int x, int y,String text) { painter.setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE)); painter.setForeground(foreground); painter.setFont(this.config.getFont()); Point size = painter.getStringExtent(text); painter.initPath(TGPainter.PATH_FILL); painter.addRectangle(x - (size.x / 2),y - (size.y / 2),size.x, size.y); painter.closePath(); painter.drawString(text,x - (size.x / 2),y - (size.y / 2),true); } protected void paintEditor(TGPainter painter) { if(!TuxGuitar.instance().isLocked()){ TuxGuitar.instance().lock(); this.updateEditor(); if (this.frets.length > 0 && this.strings.length > 0) { paintFretBoard(painter); paintNotes(painter); } TuxGuitar.instance().unlock(); } } protected void hit(int x, int y) { int fretIndex = getFretIndex(x); int stringIndex = getStringIndex(y); TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().setStringNumber(stringIndex + 1); if (!removeNote(fretIndex, stringIndex + 1)) { addNote(fretIndex, stringIndex + 1); } } private int getStringIndex(int y) { int index = -1; for (int i = 0; i < this.strings.length; i++) { if (index < 0) { index = i; } else { int distanceY = Math.abs(y - this.strings[index]); int currDistanceY = Math.abs(y - this.strings[i]); if (currDistanceY < distanceY) { index = i; } } } return index; } private int getFretIndex(int x) { int length = this.frets.length; if ((x - 10) <= this.frets[0] && this.frets[0] < this.frets[length - 1]) { return 0; } if ((x + 10) >= this.frets[0] && this.frets[0] > this.frets[length - 1]) { return 0; } for (int i = 0; i < length; i++) { if ((i + 1) < length) { if (x > this.frets[i] && x <= this.frets[i + 1] || x > this.frets[i + 1] && x <= this.frets[i]) { return i + 1; } } } return length - 1; } private boolean removeNote(int fret, int string) { if(this.beat != null){ for(int v = 0; v < this.beat.countVoices(); v ++){ TGVoice voice = this.beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNote note = (TGNote) it.next(); if (note.getValue() == fret && note.getString() == string) { //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getMeasureManager().removeNote(note); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); return true; } } } } return false; } private TGTrack getTrack() { if( this.beat != null ){ TGMeasure measure = this.beat.getMeasure(); if( measure != null ){ TGTrack track = measure.getTrack(); if( track != null ){ return track; } } } return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack(); } private int getStringCount() { TGTrack track = getTrack(); if( track != null ){ return track.stringCount(); } return 0; } private int getOvalSize(){ return ((STRING_SPACING / 2) + (STRING_SPACING / 10)); } private void addNote(int fret, int string) { TGSongManager manager = TuxGuitar.instance().getSongManager(); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGNote note = manager.getFactory().newNote(); note.setValue(fret); note.setVelocity(caret.getVelocity()); note.setString(string); TGDuration duration = manager.getFactory().newDuration(); caret.getDuration().copy(duration); manager.getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration, caret.getVoice()); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //reprodusco las notas en el pulso caret.getSelectedBeat().play(); } protected void afterAction() { int measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().getNumber(); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure); TuxGuitar.instance().updateCache(true); } protected void updateDirection( int direction ){ this.config.saveDirection( this.getDirection(direction) ); this.initFrets(10); this.setChanges(true); this.fretBoardComposite.redraw(); } public boolean hasChanges(){ return this.changes; } public void setChanges(boolean changes){ this.changes = changes; } public void setExternalBeat(TGBeat externalBeat){ this.externalBeat = externalBeat; } public TGBeat getExternalBeat(){ return this.externalBeat; } public void redraw() { if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){ super.redraw(); this.fretBoardComposite.redraw(); this.loadDurationImage(false); } } public void redrawPlayingMode(){ if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){ this.fretBoardComposite.redraw(); } } public void dispose(){ super.dispose(); this.disposeFretBoardImage(); this.config.dispose(); } public void loadProperties(){ int selection = this.handSelector.getSelectionIndex(); this.handSelector.removeAll(); this.handSelector.add(TuxGuitar.getProperty("fretboard.right-mode")); this.handSelector.add(TuxGuitar.getProperty("fretboard.left-mode")); this.handSelector.select(selection); this.settings.setToolTipText(TuxGuitar.getProperty("settings")); this.scale.setText(TuxGuitar.getProperty("scale")); this.loadScaleName(); this.setChanges(true); this.layout(true,true); } public void loadIcons(){ this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings()); this.loadDurationImage(true); this.layout(true,true); this.layout(getClientArea().width); } public void loadScale(){ this.loadScaleName(); this.setChanges(true); } public int getHeight(){ int borderWidth = (2 * this.fretBoardComposite.getBorderWidth()); int toolBarHeight = (this.toolComposite.getBounds().height); int fretBoardHeight = (((STRING_SPACING) * (this.strings.length - 1)) + TOP_SPACING + BOTTOM_SPACING); return (borderWidth + toolBarHeight + fretBoardHeight); } public int getWidth(){ return this.frets[this.frets.length - 1]; } public void layout(){ super.layout(); } public void layout(int width){ this.disposeFretBoardImage(); this.calculateFretSpacing(width); this.initFrets(10); this.initStrings(getStringCount()); this.setChanges(false); } protected void configure(){ this.config.configure(getShell()); this.handSelector.select( this.getDirection(this.config.getDirection()) ); this.setChanges(true); this.redraw(); } public Composite getFretBoardComposite(){ return this.fretBoardComposite; } private class FretBoardListener implements PaintListener,MouseListener { public FretBoardListener(){ super(); } public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); paintEditor(painter); } public void mouseUp(MouseEvent e) { getFretBoardComposite().setFocus(); if(e.button == 1){ if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){ ActionLock.lock(); if( getExternalBeat() == null ){ hit(e.x, e.y); }else{ setExternalBeat( null ); } afterAction(); ActionLock.unlock(); } }else{ TuxGuitar.instance().getAction(GoRightAction.NAME).process(e); } } public void mouseDown(MouseEvent e) { //Not implemented } public void mouseDoubleClick(MouseEvent e) { //Not implemented } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoardConfig.java0000644000175000017500000003246311273045225032232 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.fretboard; import java.util.Properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; public class FretBoardConfig { public static final int DISPLAY_TEXT_NOTE = 0x01; public static final int DISPLAY_TEXT_SCALE = 0x02; public static final int DIRECTION_RIGHT = 0; public static final int DIRECTION_LEFT = 1; private int style; private int direction; private Font font; private Color colorBackground; private Color colorString; private Color colorFretPoint; private Color colorNote; private Color colorScale; public FretBoardConfig(){ super(); } public int getStyle() { return this.style; } public Font getFont() { return this.font; } public Color getColorBackground() { return this.colorBackground; } public Color getColorString() { return this.colorString; } public Color getColorFretPoint() { return this.colorFretPoint; } public Color getColorNote() { return this.colorNote; } public Color getColorScale() { return this.colorScale; } public int getDirection(){ return this.direction; } public void load(){ Display display = TuxGuitar.instance().getDisplay(); TGConfigManager config = TuxGuitar.instance().getConfig(); this.style = config.getIntConfigValue(TGConfigKeys.FRETBOARD_STYLE); this.direction = config.getIntConfigValue(TGConfigKeys.FRETBOARD_DIRECTION, DIRECTION_RIGHT ); this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.FRETBOARD_FONT)); this.colorBackground = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND)); this.colorString = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_STRING)); this.colorFretPoint = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT)); this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_NOTE)); this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_SCALE)); } public void defaults(){ TGConfigManager config = TuxGuitar.instance().getConfig(); Properties defaults = config.getDefaults(); config.setProperty(TGConfigKeys.FRETBOARD_STYLE,defaults.getProperty(TGConfigKeys.FRETBOARD_STYLE)); config.setProperty(TGConfigKeys.FRETBOARD_DIRECTION,defaults.getProperty(TGConfigKeys.FRETBOARD_DIRECTION)); config.setProperty(TGConfigKeys.FRETBOARD_FONT,defaults.getProperty(TGConfigKeys.FRETBOARD_FONT)); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND)); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_STRING)); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT)); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE)); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE)); } public void save(int style, int direction, FontData fontData,RGB rgbBackground,RGB rgbString,RGB rgbFretPoint,RGB rgbNote,RGB rgbScale){ TGConfigManager config = TuxGuitar.instance().getConfig(); config.setProperty(TGConfigKeys.FRETBOARD_STYLE,style); config.setProperty(TGConfigKeys.FRETBOARD_DIRECTION,direction); config.setProperty(TGConfigKeys.FRETBOARD_FONT,fontData); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,rgbBackground); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,rgbString); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,rgbFretPoint); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,rgbNote); config.setProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,rgbScale); } public void saveDirection( int direction ){ TGConfigManager config = TuxGuitar.instance().getConfig(); config.setProperty(TGConfigKeys.FRETBOARD_DIRECTION,direction); this.direction = direction; } public void dispose(){ this.font.dispose(); this.colorBackground.dispose(); this.colorString.dispose(); this.colorFretPoint.dispose(); this.colorNote.dispose(); this.colorScale.dispose(); } private static final int MINIMUM_CONTROL_WIDTH = 180; private static final int MINIMUM_BUTTON_WIDTH = 80; private static final int MINIMUM_BUTTON_HEIGHT = 25; public void configure(Shell shell) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("fretboard.settings")); // ---------------------------------------------------------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("fretboard.settings")); final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("fretboard.font"),this.font.getFontData()[0]); // Color final RGB rgbBackground = getColorChooser(group,TuxGuitar.getProperty("fretboard.background-color"), this.colorBackground.getRGB()); final RGB rgbString = getColorChooser(group,TuxGuitar.getProperty("fretboard.string-color"), this.colorString.getRGB()); final RGB rgbFretPoint = getColorChooser(group,TuxGuitar.getProperty("fretboard.fretpoint-color"), this.colorFretPoint.getRGB()); final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("fretboard.note-color"), this.colorNote.getRGB()); final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("fretboard.scale-note-color"), this.colorScale.getRGB()); Label directionLabel = new Label(group, SWT.NULL); directionLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); directionLabel.setText(TuxGuitar.getProperty("fretboard.direction")); final Combo directionCombo = new Combo(group , SWT.DROP_DOWN | SWT.READ_ONLY); directionCombo.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); directionCombo.add(TuxGuitar.getProperty("fretboard.right-mode")); directionCombo.add(TuxGuitar.getProperty("fretboard.left-mode")); directionCombo.select( this.direction ); // ---------------------------------------------------------------------- group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("fretboard.settings.options")); final Button displayTextNote = new Button(group,SWT.CHECK); displayTextNote.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); displayTextNote.setText(TuxGuitar.getProperty("fretboard.display-note-text")); displayTextNote.setSelection( (this.style & DISPLAY_TEXT_NOTE) != 0 ); final Button displayTextScale = new Button(group,SWT.CHECK); displayTextScale.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); displayTextScale.setText(TuxGuitar.getProperty("fretboard.display-scale-text")); displayTextScale.setSelection( (this.style & DISPLAY_TEXT_SCALE) != 0 ); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); final Button buttonDefaults = new Button(buttons, SWT.PUSH); buttonDefaults.setText(TuxGuitar.getProperty("defaults")); buttonDefaults.setLayoutData(getButtonData()); buttonDefaults.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); defaults(); applyChanges(); } }); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int style = 0; style |= (displayTextNote.getSelection() ? DISPLAY_TEXT_NOTE : 0 ); style |= (displayTextScale.getSelection() ? DISPLAY_TEXT_SCALE : 0 ); int direction = directionCombo.getSelectionIndex(); if( direction != DIRECTION_RIGHT && direction != DIRECTION_LEFT ){ direction = DIRECTION_RIGHT; } //if( direction ) dialog.dispose(); save(style, direction, fontData, rgbBackground, rgbString, rgbFretPoint, rgbNote, rgbScale); applyChanges(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = MINIMUM_BUTTON_WIDTH; data.minimumHeight = MINIMUM_BUTTON_HEIGHT; return data; } protected void applyChanges(){ this.dispose(); this.load(); } private RGB getColorChooser(final Composite parent,String title,RGB rgb){ Label label = new Label(parent, SWT.NULL); label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); label.setText(title); ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose")); button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); button.loadColor(rgb); return button.getValue(); } private FontData getFontChooser(final Composite parent,String title,FontData fontData){ final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle()); Label label = new Label(parent, SWT.NULL); label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); label.setText(title); Button button = new Button(parent, SWT.PUSH); button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); button.setText(TuxGuitar.getProperty("choose")); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { Font font = new Font(parent.getDisplay(),selection); FontDialog fontDialog = new FontDialog(parent.getShell()); fontDialog.setFontList(font.getFontData()); FontData fd = fontDialog.open(); if(fd != null){ selection.setName( fd.getName() ); selection.setHeight( fd.getHeight() ); selection.setStyle( fd.getStyle() ); } font.dispose(); } }); return selection; } private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){ GridData data = new GridData(); data.minimumWidth = minimumWidth; data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = SWT.DEFAULT; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; return data; } private class ButtonColor { protected Button button; protected Color color; protected RGB value; public ButtonColor(Composite parent, int style, String text){ this.value = new RGB(0,0,0); this.button = new Button(parent, style); this.button.setText(text); this.addListeners(); } protected void setLayoutData(Object layoutData){ this.button.setLayoutData(layoutData); } protected void loadColor(RGB rgb){ this.value.red = rgb.red; this.value.green = rgb.green; this.value.blue = rgb.blue; Color color = new Color(this.button.getDisplay(), this.value); this.button.setForeground(color); this.disposeColor(); this.color = color; } protected void disposeColor(){ if(this.color != null && !this.color.isDisposed()){ this.color.dispose(); this.color = null; } } private void addListeners(){ this.button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell()); dlg.setRGB(ButtonColor.this.value); dlg.setText(TuxGuitar.getProperty("choose-color")); RGB result = dlg.open(); if (result != null) { ButtonColor.this.loadColor(result); } } }); this.button.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { ButtonColor.this.disposeColor(); } }); } protected RGB getValue(){ return this.value; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricEditor.java0000644000175000017500000002103211273045225030625 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.lyric; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.edit.RedoAction; import org.herac.tuxguitar.gui.actions.edit.UndoAction; import org.herac.tuxguitar.gui.actions.track.GoNextTrackAction; import org.herac.tuxguitar.gui.actions.track.GoPreviousTrackAction; import org.herac.tuxguitar.gui.editors.TGUpdateListener; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.keybindings.KeyBinding; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingConstants; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.song.models.TGTrack; public class LyricEditor implements TGUpdateListener,IconLoader,LanguageLoader{ private static int EDITOR_WIDTH = 450; private static int EDITOR_HEIGHT = 200; protected static final KeyBindingAction KB_ACTIONS[] = new KeyBindingAction[]{ new KeyBindingAction(UndoAction.NAME,new KeyBinding(122,KeyBindingConstants.CONTROL)), new KeyBindingAction(RedoAction.NAME,new KeyBinding(121,KeyBindingConstants.CONTROL)), }; private TGTrack track; private Shell dialog; private LyricModifyListener listener; private Button previous; private Button next; private Label label; private Label fromLabel; private Spinner from; private Text text; private int caretPosition; private boolean updated; private int lastTrack; private int lastMeasuseCount; private String lastTrackName; public LyricEditor(){ this.listener = new LyricModifyListener(this); } public void show() { this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.RESIZE); this.dialog.setLayout(getDialogLayout()); this.dialog.setSize(EDITOR_WIDTH,EDITOR_HEIGHT); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { onDispose(); } }); this.track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack(); this.loadComposites(); this.loadProperties(); this.loadIcons(); this.updateItems(); this.addListeners(); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER); } public void addListeners(){ TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addUpdateListener(this); } public void removeListeners(){ TuxGuitar.instance().getIconManager().removeLoader(this); TuxGuitar.instance().getLanguageManager().removeLoader(this); TuxGuitar.instance().getEditorManager().removeUpdateListener(this); } public void onDispose(){ this.track = null; this.label = null; this.text = null; this.dialog = null; this.removeListeners(); TuxGuitar.instance().updateCache(true); } private GridLayout getDialogLayout(){ GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.verticalSpacing = 0; return layout; } private void loadComposites(){ loadToolBar(this.dialog); loadLyricText(this.dialog); } private void loadToolBar(Composite parent){ final Composite composite = new Composite(parent,SWT.NONE); composite.setLayout(new GridLayout(5,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); this.previous = new Button(composite, SWT.ARROW | SWT.LEFT); this.next = new Button(composite, SWT.ARROW | SWT.RIGHT); this.label = new Label(composite,SWT.NONE); this.label.setText(this.track.getName()); this.label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); this.fromLabel = new Label(composite,SWT.NONE); this.fromLabel.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true)); this.from = new Spinner(composite,SWT.BORDER); this.from.setLayoutData(new GridData(50,SWT.DEFAULT)); this.from.setMinimum(1); this.from.setMaximum(this.track.countMeasures()); this.from.setSelection(this.track.getLyrics().getFrom()); this.from.setEnabled(this.track.countMeasures() > 1); this.from.addModifyListener(this.listener); this.previous.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TuxGuitar.instance().getAction(GoPreviousTrackAction.NAME).process(e); composite.layout(); } }); this.next.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TuxGuitar.instance().getAction(GoNextTrackAction.NAME).process(e); composite.layout(); } }); } private void loadLyricText(Composite parent){ Composite composite = new Composite(parent,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.text = new Text(composite,SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); this.text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.text.setFocus(); this.text.setText(this.track.getLyrics().getLyrics()); this.text.addModifyListener(this.listener); this.text.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent event) { for( int i = 0 ; i < KB_ACTIONS.length ; i ++ ){ if(event.keyCode == KB_ACTIONS[i].getKeyBinding().getKey() && event.stateMask == KB_ACTIONS[i].getKeyBinding().getMask()){ TuxGuitar.instance().getAction(KB_ACTIONS[i].getAction()).process(event); return; } } } }); } public void updateItems(){ if(!isDisposed()){ boolean enabled = !TuxGuitar.instance().getPlayer().isRunning(); this.listener.setEnabled(false); if(this.updated){ this.lastTrack = 0; this.lastTrackName = null; this.lastMeasuseCount = 0; } this.track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack(); if( isTrackNameChanged() ){ this.label.setText(this.track.getName()); } if( isMeasureCountChanged() ){ this.from.setMaximum(this.track.countMeasures()); } if( isTrackChanged() ){ this.from.setSelection(this.track.getLyrics().getFrom()); this.text.setText(this.track.getLyrics().getLyrics()); this.text.setSelection( (this.caretPosition >= 0 ? this.caretPosition : this.text.getCharCount())); } this.from.setEnabled( enabled && (this.track.countMeasures() > 1) ); this.text.setEnabled( enabled ); this.setCaretPosition(-1); this.listener.setEnabled( enabled ); this.updated = false; } } private boolean isTrackChanged(){ int current = this.track.getNumber(); if(current != this.lastTrack){ this.lastTrack = current; return true; } return false; } private boolean isTrackNameChanged(){ String current = this.track.getName(); if(this.lastTrackName == null || !current.equals( this.lastTrackName ) ){ this.lastTrackName = current; return true; } return false; } private boolean isMeasureCountChanged(){ int current = this.track.countMeasures(); if(current != this.lastMeasuseCount){ this.lastMeasuseCount = current; return true; } return false; } public void update(){ this.updated = true; } public void setCaretPosition(int caretPosition) { this.caretPosition = caretPosition; } public TGTrack getTrack(){ return this.track; } public void loadProperties(){ if(!isDisposed()){ this.dialog.setText(TuxGuitar.getProperty("lyric.editor")); this.fromLabel.setText(TuxGuitar.getProperty("edit.from")); } } public void loadIcons(){ if(!isDisposed()){ this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); } } public boolean isDisposed() { return (this.dialog == null || this.dialog.isDisposed()); } public void dispose(){ if(!isDisposed()){ this.dialog.dispose(); } } public void doUpdate(int type) { if( type == TGUpdateListener.SELECTION ){ this.updateItems(); }else if( type == TGUpdateListener.SONG_UPDATED || type == TGUpdateListener.SONG_LOADED){ this.update(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricModifyListener.java0000644000175000017500000000343511273045225032343 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.lyric; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackLyric; import org.herac.tuxguitar.song.models.TGTrack; public class LyricModifyListener implements ModifyListener{ private boolean enabled; private LyricEditor editor; private int lastPosition; public LyricModifyListener(LyricEditor editor){ this.editor = editor; } public void modifyText(ModifyEvent e) { if(isEnabled() && !TuxGuitar.instance().getPlayer().isRunning()){ if(e.widget instanceof Text){ TGTrack track = this.editor.getTrack(); Text text = (Text)e.widget; String value = text.getText(); int position = text.getCaretPosition(); UndoableTrackLyric undoable = UndoableTrackLyric.startUndo(track,this.lastPosition); track.getLyrics().setLyrics(value); TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo(track,position) ); TuxGuitar.instance().getFileHistory().setUnsavedFile(); this.lastPosition = position; }else if(e.widget instanceof Spinner){ TGTrack track = this.editor.getTrack(); UndoableTrackLyric undoable = UndoableTrackLyric.startUndo(track,this.lastPosition); track.getLyrics().setFrom(((Spinner)e.widget).getSelection()); TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo(track,this.lastPosition) ); TuxGuitar.instance().getFileHistory().setUnsavedFile(); } TuxGuitar.instance().updateCache(true); } } public boolean isEnabled() { return this.enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixConfig.java0000644000175000017500000002776711273045225031175 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.matrix; import java.util.Properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Resource; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; public class MatrixConfig { private Font font; private Color[] colorLines; private Color colorForeground; private Color colorBorder; private Color colorPosition; private Color colorNote; private Color colorPlay; public MatrixConfig(){ super(); } public Font getFont() { return this.font; } public Color getColorForeground() { return this.colorForeground; } public Color getColorBorder() { return this.colorBorder; } public Color getColorPosition() { return this.colorPosition; } public Color getColorNote() { return this.colorNote; } public Color getColorPlay() { return this.colorPlay; } public Color[] getColorLines() { return this.colorLines; } public Color getColorLine(int index) { return this.colorLines[index]; } public void load(){ Display display = TuxGuitar.instance().getDisplay(); TGConfigManager config = TuxGuitar.instance().getConfig(); this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.MATRIX_FONT)); this.colorForeground = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND)); this.colorBorder = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_BORDER)); this.colorPosition = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_POSITION)); this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_NOTE)); this.colorPlay = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE)); this.colorLines = new Color[]{ new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_1)), new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_2)), new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_3)), }; } public void defaults(){ TGConfigManager config = TuxGuitar.instance().getConfig(); Properties defaults = config.getDefaults(); config.setProperty(TGConfigKeys.MATRIX_FONT,defaults.getProperty(TGConfigKeys.MATRIX_FONT)); config.setProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND)); config.setProperty(TGConfigKeys.MATRIX_COLOR_BORDER,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_BORDER)); config.setProperty(TGConfigKeys.MATRIX_COLOR_POSITION,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_POSITION)); config.setProperty(TGConfigKeys.MATRIX_COLOR_NOTE,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_NOTE)); config.setProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE)); config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_1)); config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_2)); config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_3)); } public void save(FontData fontData, RGB rgbForeground, RGB rgbBorder, RGB rgbPosition, RGB rgbNote, RGB rgbPlay, RGB rgbLines[]){ TGConfigManager config = TuxGuitar.instance().getConfig(); config.setProperty(TGConfigKeys.MATRIX_FONT,fontData); config.setProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,rgbForeground); config.setProperty(TGConfigKeys.MATRIX_COLOR_BORDER,rgbBorder); config.setProperty(TGConfigKeys.MATRIX_COLOR_POSITION,rgbPosition); config.setProperty(TGConfigKeys.MATRIX_COLOR_NOTE,rgbNote); config.setProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,rgbPlay); config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,rgbLines[0]); config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,rgbLines[1]); config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,rgbLines[2]); } public void dispose(){ dispose(this.font); dispose(this.colorForeground); dispose(this.colorBorder); dispose(this.colorPosition); dispose(this.colorNote); dispose(this.colorPlay); dispose(this.colorLines); } protected void dispose(Resource[] resources){ if(resources != null){ for(int i = 0; i < resources.length; i ++){ dispose(resources[i]); } } } protected void dispose(Resource resource){ if(resource != null){ resource.dispose(); } } private static final int MINIMUM_CONTROL_WIDTH = 180; private static final int MINIMUM_BUTTON_WIDTH = 80; private static final int MINIMUM_BUTTON_HEIGHT = 25; public void configure(Shell shell) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("matrix.settings")); // ---------------------------------------------------------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("matrix.settings")); // fonts final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("matrix.font"),this.font.getFontData()[0]); // colors final RGB rgbForeground = getColorChooser(group,TuxGuitar.getProperty("matrix.foreground-color"), this.colorForeground.getRGB()); final RGB rgbLines[] = new RGB[]{ getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-1"), this.colorLines[0].getRGB()), getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-2"), this.colorLines[1].getRGB()), getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-over"), this.colorLines[2].getRGB()), }; final RGB rgbBorder = getColorChooser(group,TuxGuitar.getProperty("matrix.border-color"), this.colorBorder.getRGB()); final RGB rgbPosition = getColorChooser(group,TuxGuitar.getProperty("matrix.position-color"), this.colorPosition.getRGB()); final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("matrix.note-color"), this.colorNote.getRGB()); final RGB rgbPlay = getColorChooser(group,TuxGuitar.getProperty("matrix.play-note-color"), this.colorPlay.getRGB()); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); final Button buttonDefaults = new Button(buttons, SWT.PUSH); buttonDefaults.setText(TuxGuitar.getProperty("defaults")); buttonDefaults.setLayoutData(getButtonData()); buttonDefaults.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); defaults(); applyChanges(); } }); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); save(fontData, rgbForeground, rgbBorder, rgbPosition, rgbNote, rgbPlay, rgbLines); applyChanges(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = MINIMUM_BUTTON_WIDTH; data.minimumHeight = MINIMUM_BUTTON_HEIGHT; return data; } protected void applyChanges(){ this.dispose(); this.load(); } private RGB getColorChooser(final Composite parent,String title,RGB rgb){ Label label = new Label(parent, SWT.NULL); label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); label.setText(title); ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose")); button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); button.loadColor(rgb); return button.getValue(); } private FontData getFontChooser(final Composite parent,String title,FontData fontData){ final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle()); Label label = new Label(parent, SWT.NULL); label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); label.setText(title); Button button = new Button(parent, SWT.PUSH); button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); button.setText(TuxGuitar.getProperty("choose")); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { Font font = new Font(parent.getDisplay(),selection); FontDialog fontDialog = new FontDialog(parent.getShell()); fontDialog.setFontList(font.getFontData()); FontData fd = fontDialog.open(); if(fd != null){ selection.setName( fd.getName() ); selection.setHeight( fd.getHeight() ); selection.setStyle( fd.getStyle() ); } font.dispose(); } }); return selection; } private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){ GridData data = new GridData(); data.minimumWidth = minimumWidth; data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = SWT.DEFAULT; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; return data; } private class ButtonColor { protected Button button; protected Color color; protected RGB value; public ButtonColor(Composite parent, int style, String text){ this.value = new RGB(0,0,0); this.button = new Button(parent, style); this.button.setText(text); this.addListeners(); } protected void setLayoutData(Object layoutData){ this.button.setLayoutData(layoutData); } protected void loadColor(RGB rgb){ this.value.red = rgb.red; this.value.green = rgb.green; this.value.blue = rgb.blue; Color color = new Color(this.button.getDisplay(), this.value); this.button.setForeground(color); this.disposeColor(); this.color = color; } protected void disposeColor(){ if(this.color != null && !this.color.isDisposed()){ this.color.dispose(); this.color = null; } } private void addListeners(){ this.button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell()); dlg.setRGB(ButtonColor.this.value); dlg.setText(TuxGuitar.getProperty("choose-color")); RGB result = dlg.open(); if (result != null) { ButtonColor.this.loadColor(result); } } }); this.button.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { ButtonColor.this.disposeColor(); } }); } protected RGB getValue(){ return this.value; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixEditor.java0000644000175000017500000007731011273045225031203 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.matrix; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.MouseTrackListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Resource; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.caret.GoLeftAction; import org.herac.tuxguitar.gui.actions.caret.GoRightAction; import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction; import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.TGRedrawListener; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGNoteImpl; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.TGMusicKeyUtils; import org.herac.tuxguitar.player.base.MidiPercussion; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; public class MatrixEditor implements TGRedrawListener,IconLoader,LanguageLoader{ private static final int BORDER_HEIGHT = 20; private static final int SCROLL_INCREMENT = 50; private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_MATRIX); private static final MidiPercussion[] PERCUSSIONS = TuxGuitar.instance().getPlayer().getPercussions(); protected static final int[] DIVISIONS = new int[] {1,2,3,4,6,8,16}; private MatrixConfig config; private MatrixListener listener; private Shell dialog; private Composite composite; private Composite toolbar; private Composite editor; private Rectangle clientArea; private Image buffer; private BufferDisposer bufferDisposer; private Label durationLabel; private Label gridsLabel; private Button settings; private float width; private float height; private float bufferWidth; private float bufferHeight; private float timeWidth; private float lineHeight; private int leftSpacing; private int minNote; private int maxNote; private int duration; private int selection; private int grids; private int playedTrack; private int playedMeasure; private TGBeat playedBeat; private Image selectionBackBuffer; private int selectionX; private int selectionY; private boolean selectionPaintDisabled; public MatrixEditor(){ this.grids = this.loadGrids(); this.listener = new MatrixListener(); } public void show(){ this.config = new MatrixConfig(); this.config.load(); this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE); this.dialog.setText(TuxGuitar.getProperty("matrix.editor")); this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.dialog.setLayout(new GridLayout()); this.dialog.addDisposeListener(new DisposeListenerImpl()); this.bufferDisposer = new BufferDisposer(); this.composite = new Composite(this.dialog,SWT.NONE); this.composite.setLayout(new GridLayout()); this.composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.initToolBar(); this.initEditor(); this.loadIcons(); this.addListeners(); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { removeListeners(); TuxGuitar.instance().updateCache(true); } }); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER); } public void addListeners(){ TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.toolbar); TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.editor); TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); TuxGuitar.instance().getEditorManager().addRedrawListener( this ); } public void removeListeners(){ TuxGuitar.instance().getIconManager().removeLoader(this); TuxGuitar.instance().getLanguageManager().removeLoader(this); TuxGuitar.instance().getEditorManager().removeRedrawListener( this ); } private void initToolBar() { GridLayout layout = new GridLayout(); layout.makeColumnsEqualWidth = false; layout.numColumns = 0; layout.marginWidth = 0; layout.marginHeight = 0; this.toolbar = new Composite(this.composite, SWT.NONE); // position layout.numColumns ++; Button goLeft = new Button(this.toolbar, SWT.ARROW | SWT.LEFT); goLeft.addSelectionListener(TuxGuitar.instance().getAction(GoLeftAction.NAME)); layout.numColumns ++; Button goRight = new Button(this.toolbar, SWT.ARROW | SWT.RIGHT); goRight.addSelectionListener(TuxGuitar.instance().getAction(GoRightAction.NAME)); // separator layout.numColumns ++; makeToolSeparator(this.toolbar); // duration layout.numColumns ++; Button decrement = new Button(this.toolbar, SWT.ARROW | SWT.MIN); decrement.addSelectionListener(TuxGuitar.instance().getAction(DecrementDurationAction.NAME)); layout.numColumns ++; this.durationLabel = new Label(this.toolbar, SWT.BORDER); layout.numColumns ++; Button increment = new Button(this.toolbar, SWT.ARROW | SWT.MAX); increment.addSelectionListener(TuxGuitar.instance().getAction(IncrementDurationAction.NAME)); // separator layout.numColumns ++; makeToolSeparator(this.toolbar); // grids layout.numColumns ++; this.gridsLabel = new Label(this.toolbar,SWT.NONE); this.gridsLabel.setText(TuxGuitar.getProperty("matrix.grids")); layout.numColumns ++; final Combo divisionsCombo = new Combo(this.toolbar, SWT.DROP_DOWN | SWT.READ_ONLY); divisionsCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false, true)); for(int i = 0; i < DIVISIONS.length; i ++){ divisionsCombo.add(Integer.toString(DIVISIONS[i])); if(this.grids == DIVISIONS[i]){ divisionsCombo.select(i); } } if(this.grids == 0){ divisionsCombo.select(0); } divisionsCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int index = divisionsCombo.getSelectionIndex(); if(index >= 0 && index < DIVISIONS.length){ setGrids(DIVISIONS[index]); } } }); // settings layout.numColumns ++; this.settings = new Button(this.toolbar, SWT.PUSH); this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings()); this.settings.setToolTipText(TuxGuitar.getProperty("settings")); this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); this.settings.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { configure(); } }); this.toolbar.setLayout(layout); this.toolbar.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); } private void makeToolSeparator(Composite parent){ Label separator = new Label(parent,SWT.SEPARATOR); separator.setLayoutData(new GridData(20,20)); } private void loadDurationImage(boolean force) { int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue(); if(force || this.duration != duration){ this.duration = duration; this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration)); } } public void initEditor(){ this.selection = -1; this.editor = new Composite(this.composite,SWT.DOUBLE_BUFFERED | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); this.editor.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.editor.setLayout(new FillLayout()); this.editor.setFocus(); this.editor.addPaintListener(this.listener); this.editor.addMouseListener(this.listener); this.editor.addMouseMoveListener(this.listener); this.editor.addMouseTrackListener(this.listener); this.editor.getHorizontalBar().setIncrement(SCROLL_INCREMENT); this.editor.getHorizontalBar().addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { redrawLocked(); } }); this.editor.getVerticalBar().setIncrement(SCROLL_INCREMENT); this.editor.getVerticalBar().addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { redrawLocked(); } }); } protected void updateScroll(){ if( this.clientArea != null ){ int borderWidth = this.editor.getBorderWidth(); ScrollBar vBar = this.editor.getVerticalBar(); ScrollBar hBar = this.editor.getHorizontalBar(); vBar.setMaximum(Math.round(this.height + (borderWidth * 2))); vBar.setThumb(Math.round(Math.min(this.height + (borderWidth * 2), this.clientArea.height))); hBar.setMaximum(Math.round(this.width + (borderWidth * 2))); hBar.setThumb(Math.round(Math.min(this.width + (borderWidth * 2), this.clientArea.width))); } } protected int getValueAt(float y){ if(this.clientArea == null || (y - BORDER_HEIGHT) < 0 || y + BORDER_HEIGHT > this.clientArea.height){ return -1; } int scroll = this.editor.getVerticalBar().getSelection(); int value = (this.maxNote - ((int)( (y + scroll - BORDER_HEIGHT) / this.lineHeight)) ); return value; } protected long getStartAt(float x){ TGMeasure measure = getMeasure(); float posX = (x + this.editor.getHorizontalBar().getSelection()); long start =(long) (measure.getStart() + (((posX - this.leftSpacing) * measure.getLength()) / (this.timeWidth * measure.getTimeSignature().getNumerator()))); return start; } protected void paintEditor(TGPainter painter){ if(!TuxGuitar.instance().getPlayer().isRunning()){ this.resetPlayed(); } this.disposeSelectionBuffer(); this.clientArea = this.editor.getClientArea(); if( this.clientArea != null ){ Image buffer = getBuffer(); this.width = this.bufferWidth; this.height = (this.bufferHeight + (BORDER_HEIGHT *2)); this.updateScroll(); int scrollX = this.editor.getHorizontalBar().getSelection(); int scrollY = this.editor.getVerticalBar().getSelection(); painter.drawImage(buffer,-scrollX,(BORDER_HEIGHT - scrollY)); this.paintMeasure(painter,(-scrollX), (BORDER_HEIGHT - scrollY) ); this.paintBorders(painter,(-scrollX),0); this.paintPosition(painter,(-scrollX),0); this.paintSelection(painter, (-scrollX), (BORDER_HEIGHT - scrollY) ); } } protected Image getBuffer(){ if( this.clientArea != null ){ this.bufferDisposer.update(this.clientArea.width, this.clientArea.height); if(this.buffer == null || this.buffer.isDisposed()){ String[] names = null; TGMeasure measure = getMeasure(); boolean percussion = measure.getTrack().isPercussionTrack(); this.maxNote = 0; this.minNote = 127; if(percussion){ names = new String[PERCUSSIONS.length]; for(int i = 0; i < names.length;i ++){ this.minNote = Math.min(this.minNote,PERCUSSIONS[i].getValue()); this.maxNote = Math.max(this.maxNote,PERCUSSIONS[i].getValue()); names[i] = PERCUSSIONS[names.length - i -1].getName(); } }else{ for(int sNumber = 1; sNumber <= measure.getTrack().stringCount();sNumber ++){ TGString string = measure.getTrack().getString(sNumber); this.minNote = Math.min(this.minNote,string.getValue()); this.maxNote = Math.max(this.maxNote,(string.getValue() + 20)); } names = new String[this.maxNote - this.minNote + 1]; for(int i = 0; i < names.length;i ++){ names[i] = (NOTE_NAMES[ (this.maxNote - i) % 12] + ((this.maxNote - i) / 12 ) ); } } int minimumNameWidth = 110; int minimumNameHeight = 0; TGPainter painter = new TGPainter(new GC(this.dialog.getDisplay())); painter.setFont(this.config.getFont()); for(int i = 0; i < names.length;i ++){ Point size = painter.getStringExtent(names[i]); if( size.x > minimumNameWidth ){ minimumNameWidth = size.x; } if( size.y > minimumNameHeight ){ minimumNameHeight = size.y ; } } painter.dispose(); int cols = measure.getTimeSignature().getNumerator(); int rows = (this.maxNote - this.minNote); this.leftSpacing = minimumNameWidth + 10; this.lineHeight = Math.max(minimumNameHeight,( (this.clientArea.height - (BORDER_HEIGHT * 2.0f))/ (rows + 1.0f))); this.timeWidth = Math.max((10 * (TGDuration.SIXTY_FOURTH / measure.getTimeSignature().getDenominator().getValue())),( (this.clientArea.width-this.leftSpacing) / cols) ); this.bufferWidth = this.leftSpacing + (this.timeWidth * cols); this.bufferHeight = (this.lineHeight * (rows + 1)); this.buffer = new Image(this.editor.getDisplay(),Math.round( this.bufferWidth),Math.round(this.bufferHeight)); painter = new TGPainter(new GC(this.buffer)); painter.setFont(this.config.getFont()); painter.setForeground(this.config.getColorForeground()); for(int i = 0; i <= rows; i++){ painter.setBackground(this.config.getColorLine( i % 2 ) ); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(0 ,(i * this.lineHeight),this.bufferWidth ,this.lineHeight); painter.closePath(); painter.drawString(names[i],5,( Math.round( (i * this.lineHeight) ) + Math.round( (this.lineHeight - minimumNameHeight) / 2 ) ) ); } for(int i = 0; i < cols; i ++){ float colX = this.leftSpacing + (i * this.timeWidth); float divisionWidth = ( this.timeWidth / this.grids ); for( int j = 0; j < this.grids; j ++ ){ painter.setLineStyle( j == 0 ? SWT.LINE_SOLID : SWT.LINE_DOT); painter.initPath(); painter.setAntialias(false); painter.moveTo(Math.round( colX + (j * divisionWidth) ),0); painter.lineTo(Math.round( colX + (j * divisionWidth) ),this.bufferHeight); painter.closePath(); } } painter.dispose(); } } return this.buffer; } protected void paintMeasure(TGPainter painter,float fromX, float fromY){ if( this.clientArea != null ){ TGMeasure measure = getMeasure(); if(measure != null){ Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); paintBeat(painter, measure, beat, fromX, fromY); } } } } protected void paintBeat(TGPainter painter,TGMeasure measure,TGBeat beat,float fromX, float fromY){ if( this.clientArea != null ){ int minimumY = BORDER_HEIGHT; int maximumY = (this.clientArea.height - BORDER_HEIGHT); for( int v = 0; v < beat.countVoices(); v ++ ){ TGVoice voice = beat.getVoice(v); for( int i = 0 ; i < voice.countNotes() ; i ++){ TGNoteImpl note = (TGNoteImpl)voice.getNote(i); float x1 = (fromX + this.leftSpacing + (((beat.getStart() - measure.getStart()) * (this.timeWidth * measure.getTimeSignature().getNumerator())) / measure.getLength()) + 1); float y1 = (fromY + (((this.maxNote - this.minNote) - (note.getRealValue() - this.minNote)) * this.lineHeight) + 1 ); float x2 = (x1 + ((voice.getDuration().getTime() * this.timeWidth) / measure.getTimeSignature().getDenominator().getTime()) - 2 ); float y2 = (y1 + this.lineHeight - 2 ); if( y1 >= maximumY || y2 <= minimumY){ continue; } y1 = ( y1 < minimumY ? minimumY : y1 ); y2 = ( y2 > maximumY ? maximumY : y2 ); if((x2 - x1) > 0 && (y2 - y1) > 0){ painter.setBackground( (note.getBeatImpl().isPlaying(TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout()) ? this.config.getColorPlay():this.config.getColorNote() ) ); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(x1,y1, (x2 - x1), (y2 - y1)); painter.closePath(); } } } } } protected void paintBorders(TGPainter painter,float fromX, float fromY){ if( this.clientArea != null ){ painter.setBackground(this.config.getColorBorder()); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(fromX,fromY,this.bufferWidth ,BORDER_HEIGHT); painter.addRectangle(fromX,fromY + (this.clientArea.height - BORDER_HEIGHT),this.bufferWidth ,BORDER_HEIGHT); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.addRectangle(fromX,fromY,this.width,this.clientArea.height); painter.closePath(); } } protected void paintPosition(TGPainter painter,float fromX, float fromY){ if( this.clientArea != null && !TuxGuitar.instance().getPlayer().isRunning()){ Caret caret = getCaret(); TGMeasure measure = getMeasure(); TGBeat beat = caret.getSelectedBeat(); if(beat != null){ float x = (((beat.getStart() - measure.getStart()) * (this.timeWidth * measure.getTimeSignature().getNumerator())) / measure.getLength()); float width = ((beat.getVoice(caret.getVoice()).getDuration().getTime() * this.timeWidth) / measure.getTimeSignature().getDenominator().getTime()); painter.setBackground(this.config.getColorPosition()); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(fromX + (this.leftSpacing + x),fromY , width,BORDER_HEIGHT); painter.closePath(); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(fromX + (this.leftSpacing + x),fromY + (this.clientArea.height - BORDER_HEIGHT), width,BORDER_HEIGHT); painter.closePath(); } } } protected void paintSelection(TGPainter painter, float fromX, float fromY){ if( !this.selectionPaintDisabled && this.clientArea != null && !TuxGuitar.instance().getPlayer().isRunning()){ selectionFinish(); if(this.selection >= 0){ this.selectionPaintDisabled = true; int x = Math.round( fromX ); int y = Math.round( fromY + ((this.maxNote - this.selection) * this.lineHeight) ); int width = Math.round( this.bufferWidth ); int height = Math.round( this.lineHeight ); Image selectionArea = new Image(this.editor.getDisplay(),width,height); painter.copyArea(selectionArea,x,y); painter.setAlpha(100); painter.setBackground(this.config.getColorLine(2)); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(x,y,width,height); painter.closePath(); this.selectionX = x; this.selectionY = y; this.selectionBackBuffer = selectionArea; this.selectionPaintDisabled = false; } } } protected void updateSelection(float y){ if(!TuxGuitar.instance().getPlayer().isRunning()){ int selection = getValueAt(y); if(this.selection != selection){ this.selection = selection; int scrollX = this.editor.getHorizontalBar().getSelection(); int scrollY = this.editor.getVerticalBar().getSelection(); TGPainter painter = new TGPainter(new GC(this.editor)); this.paintSelection(painter, (-scrollX), (BORDER_HEIGHT - scrollY) ); painter.dispose(); } } } public void selectionFinish(){ if(this.selectionBackBuffer != null && !this.selectionBackBuffer.isDisposed()){ TGPainter painter = new TGPainter(new GC(this.editor)); painter.drawImage(this.selectionBackBuffer,this.selectionX, this.selectionY); painter.dispose(); } disposeSelectionBuffer(); } protected void disposeSelectionBuffer(){ if(this.selectionBackBuffer != null && !this.selectionBackBuffer.isDisposed()){ this.selectionBackBuffer.dispose(); this.selectionBackBuffer = null; } } protected void hit(float x, float y){ if(!TuxGuitar.instance().getPlayer().isRunning()){ TGMeasure measure = getMeasure(); Caret caret = getCaret(); int value = getValueAt(y); long start = getStartAt(x); if(start >= measure.getStart() && start < (measure.getStart() + measure.getLength())){ caret.update(caret.getTrack().getNumber(),start,caret.getStringNumber()); TuxGuitar.instance().updateCache(true); } if(value >= this.minNote || value <= this.maxNote){ if(start >= measure.getStart()){ TGVoice voice = TuxGuitar.instance().getSongManager().getMeasureManager().getVoiceIn(measure, start, caret.getVoice()); if( voice != null ){ if(!removeNote(voice.getBeat(), value)){ addNote(voice.getBeat(), start, value); } } }else{ play(value); } } } } private boolean removeNote(TGBeat beat,int value) { Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGMeasure measure = getMeasure(); for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNoteImpl note = (TGNoteImpl) it.next(); if (note.getRealValue() == value) { caret.update(measure.getTrack().getNumber(),beat.getStart(),note.getString()); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getMeasureManager().removeNote(note); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); this.afterAction(); return true; } } } return false; } private boolean addNote(TGBeat beat,long start, int value) { if(beat != null){ TGMeasure measure = getMeasure(); Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); List strings = measure.getTrack().getStrings(); for(int i = 0;i < strings.size();i ++){ TGString string = (TGString)strings.get(i); if(value >= string.getValue()){ boolean emptyString = true; for(int v = 0; v < beat.countVoices(); v ++){ TGVoice voice = beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNoteImpl note = (TGNoteImpl) it.next(); if (note.getString() == string.getNumber()) { emptyString = false; break; } } } if(emptyString){ TGSongManager manager = TuxGuitar.instance().getSongManager(); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGNote note = manager.getFactory().newNote(); note.setValue((value - string.getValue())); note.setVelocity(caret.getVelocity()); note.setString(string.getNumber()); TGDuration duration = manager.getFactory().newDuration(); caret.getDuration().copy(duration); manager.getMeasureManager().addNote(beat,note,duration,start,caret.getVoice()); caret.moveTo(caret.getTrack(),caret.getMeasure(),note.getVoice().getBeat(),note.getString()); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //reprodusco las notas en el pulso caret.getSelectedBeat().play(); this.afterAction(); return true; } } } } return false; } protected void afterAction() { TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(getMeasure().getNumber()); TuxGuitar.instance().updateCache(true); this.editor.redraw(); } protected void play(final int value){ new Thread(new Runnable() { public void run() { TGTrack track = getMeasure().getTrack(); int volume = TGChannel.DEFAULT_VOLUME; int balance = TGChannel.DEFAULT_BALANCE; int chorus = track.getChannel().getChorus(); int reverb = track.getChannel().getReverb(); int phaser = track.getChannel().getPhaser(); int tremolo = track.getChannel().getTremolo(); int channel = track.getChannel().getChannel(); int program = track.getChannel().getInstrument(); int[][] beat = new int[][]{ new int[]{ (track.getOffset() + value) , TGVelocities.DEFAULT } }; TuxGuitar.instance().getPlayer().playBeat(channel,program, volume, balance,chorus,reverb,phaser,tremolo,beat); } }).start(); } protected int loadGrids(){ int grids = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.MATRIX_GRIDS); // check if is valid value for(int i = 0 ; i < DIVISIONS.length ; i ++ ){ if(grids == DIVISIONS[i]){ return grids; } } return DIVISIONS[1]; } protected void setGrids(int grids){ this.grids = grids; this.disposeBuffer(); this.redrawLocked(); } public int getGrids(){ return this.grids; } protected TGMeasure getMeasure(){ if(TuxGuitar.instance().getPlayer().isRunning()){ TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure(); if(measure != null){ return measure; } } return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure(); } protected Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } public boolean isDisposed(){ return (this.dialog == null || this.dialog.isDisposed()); } protected void resetPlayed(){ this.playedBeat = null; this.playedMeasure = -1; this.playedTrack = -1; } public void redrawLocked(){ if(!TuxGuitar.instance().isLocked()){ TuxGuitar.instance().lock(); this.redraw(); TuxGuitar.instance().unlock(); } } public void redraw(){ if(!isDisposed() && !TuxGuitar.instance().isLocked()){ //TuxGuitar.instance().lock(); this.editor.redraw(); this.loadDurationImage(false); //TuxGuitar.instance().unlock(); } } public void redrawPlayingMode(){ if(!isDisposed() && !TuxGuitar.instance().isLocked() && TuxGuitar.instance().getPlayer().isRunning()){ //TuxGuitar.instance().lock(); TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure(); TGBeat beat = TuxGuitar.instance().getEditorCache().getPlayBeat(); if(measure != null && beat != null){ int currentMeasure = measure.getNumber(); int currentTrack = measure.getTrack().getNumber(); boolean changed = (currentMeasure != this.playedMeasure || currentTrack != this.playedTrack); if(changed){ this.resetPlayed(); this.editor.redraw(); } else{ TGPainter painter = new TGPainter(new GC(this.editor)); int scrollX = this.editor.getHorizontalBar().getSelection(); int scrollY = this.editor.getVerticalBar().getSelection(); if(this.playedBeat != null){ this.paintBeat(painter,measure,this.playedBeat,(-scrollX), (BORDER_HEIGHT - scrollY)); } this.paintBeat(painter,measure,beat,(-scrollX), (BORDER_HEIGHT - scrollY)); painter.dispose(); } this.playedMeasure = currentMeasure; this.playedTrack = currentTrack; this.playedBeat = beat; } //TuxGuitar.instance().unlock(); } } protected void configure(){ this.config.configure(this.dialog); this.disposeBuffer(); this.redrawLocked(); } private void layout(){ if( !isDisposed() ){ this.toolbar.layout(); this.editor.layout(); this.composite.layout(true,true); } } public void loadIcons(){ if( !isDisposed() ){ this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings()); this.loadDurationImage(true); this.layout(); this.redraw(); } } public void loadProperties() { if( !isDisposed() ){ this.dialog.setText(TuxGuitar.getProperty("matrix.editor")); this.gridsLabel.setText(TuxGuitar.getProperty("matrix.grids")); this.settings.setToolTipText(TuxGuitar.getProperty("settings")); this.disposeBuffer(); this.layout(); this.redraw(); } } public void dispose(){ if(!isDisposed()){ this.dialog.dispose(); } } protected void disposeBuffer(){ if(this.buffer != null && !this.buffer.isDisposed()){ this.buffer.dispose(); this.buffer = null; } } protected void dispose(Resource[] resources){ if(resources != null){ for(int i = 0; i < resources.length; i ++){ dispose(resources[i]); } } } protected void dispose(Resource resource){ if(resource != null){ resource.dispose(); } } protected void disposeAll(){ this.disposeBuffer(); this.disposeSelectionBuffer(); this.config.dispose(); } protected Composite getEditor(){ return this.editor; } protected class BufferDisposer{ private int numerator; private int denominator; private int track; private boolean percussion; private int width; private int height; public void update(int width, int height){ TGMeasure measure = getMeasure(); int track = measure.getTrack().getNumber(); int numerator = measure.getTimeSignature().getNumerator(); int denominator = measure.getTimeSignature().getDenominator().getValue(); boolean percussion = measure.getTrack().isPercussionTrack(); if(width != this.width || height != this.height || this.track != track || this.numerator != numerator || this.denominator != denominator || this.percussion != percussion){ disposeBuffer(); } this.track = track; this.numerator = numerator; this.denominator = denominator; this.percussion = percussion; this.width = width; this.height = height; } } protected class DisposeListenerImpl implements DisposeListener{ public void widgetDisposed(DisposeEvent e) { disposeAll(); } } protected class MatrixListener implements PaintListener,MouseListener,MouseMoveListener,MouseTrackListener { public MatrixListener(){ super(); } public void paintControl(PaintEvent e) { if(!TuxGuitar.instance().isLocked()){ TuxGuitar.instance().lock(); TGPainter painter = new TGPainter(e.gc); paintEditor(painter); TuxGuitar.instance().unlock(); } } public void mouseUp(MouseEvent e) { getEditor().setFocus(); if(e.button == 1){ if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){ ActionLock.lock(); hit(e.x,e.y); ActionLock.unlock(); } } } public void mouseMove(MouseEvent e) { if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){ updateSelection(e.y); } } public void mouseExit(MouseEvent e) { if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){ updateSelection(-1); } } public void mouseEnter(MouseEvent e) { if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){ redrawLocked(); } } public void mouseDoubleClick(MouseEvent e) { // TODO Auto-generated method stub } public void mouseDown(MouseEvent e) { // TODO Auto-generated method stub } public void mouseHover(MouseEvent e) { // TODO Auto-generated method stub } } public void doRedraw(int type) { if( type == TGRedrawListener.NORMAL ){ this.redraw(); }else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){ this.redrawPlayingMode(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/Piano.java0000644000175000017500000004325311273045225027437 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.piano; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.caret.GoLeftAction; import org.herac.tuxguitar.gui.actions.caret.GoRightAction; import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction; import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction; import org.herac.tuxguitar.gui.actions.tools.ScaleAction; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGNoteImpl; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVoice; public class Piano extends Composite{ private static final boolean TYPE_NOTES[] = new boolean[]{true,false,true,false,true,true,false,true,false,true,false,true}; private static final int NATURAL_NOTES = 7; private static final int MAX_OCTAVES = 8; private static final int NATURAL_WIDTH = 15; private static final int SHARP_WIDTH = 8; private static final int NATURAL_HEIGHT = 60; private static final int SHARP_HEIGHT = 40; private int duration; private boolean changes; private PianoListener listener; private PianoConfig config; private Composite pianoComposite; private Composite toolComposite; private Label durationLabel; private Label scaleName; private Button scale; private Button settings; protected TGBeat beat; protected TGBeat externalBeat; protected Image image; public Piano(Composite parent, int style) { super(parent, style); this.setLayout(new GridLayout()); this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.listener = new PianoListener(); this.config = new PianoConfig(); this.config.load(); this.initToolBar(); this.makePiano(); this.loadIcons(); this.loadProperties(); TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.toolComposite); TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.pianoComposite); } private void initToolBar() { GridLayout layout = new GridLayout(); layout.makeColumnsEqualWidth = false; layout.numColumns = 0; layout.marginWidth = 0; layout.marginHeight = 0; this.toolComposite = new Composite(this, SWT.NONE); // position layout.numColumns ++; Button goLeft = new Button(this.toolComposite, SWT.ARROW | SWT.LEFT); goLeft.addSelectionListener(TuxGuitar.instance().getAction(GoLeftAction.NAME)); layout.numColumns ++; Button goRight = new Button(this.toolComposite, SWT.ARROW | SWT.RIGHT); goRight.addSelectionListener(TuxGuitar.instance().getAction(GoRightAction.NAME)); // separator layout.numColumns ++; makeToolSeparator(this.toolComposite); // duration layout.numColumns ++; Button decrement = new Button(this.toolComposite, SWT.ARROW | SWT.MIN); decrement.addSelectionListener(TuxGuitar.instance().getAction(DecrementDurationAction.NAME)); layout.numColumns ++; this.durationLabel = new Label(this.toolComposite, SWT.BORDER); layout.numColumns ++; Button increment = new Button(this.toolComposite, SWT.ARROW | SWT.MAX); increment.addSelectionListener(TuxGuitar.instance().getAction(IncrementDurationAction.NAME)); // separator layout.numColumns ++; makeToolSeparator(this.toolComposite); // scale layout.numColumns ++; this.scale = new Button(this.toolComposite, SWT.PUSH); this.scale.setText(TuxGuitar.getProperty("scale")); this.scale.addSelectionListener(TuxGuitar.instance().getAction(ScaleAction.NAME)); // scale name layout.numColumns ++; this.scaleName = new Label(this.toolComposite, SWT.LEFT); // settings layout.numColumns ++; this.settings = new Button(this.toolComposite, SWT.PUSH); this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings()); this.settings.setToolTipText(TuxGuitar.getProperty("settings")); this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); this.settings.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { configure(); } }); this.toolComposite.setLayout(layout); this.toolComposite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); } private void makeToolSeparator(Composite parent){ Label separator = new Label(parent,SWT.SEPARATOR); separator.setLayoutData(new GridData(20,20)); } private void loadDurationImage(boolean force) { int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue(); if(force || this.duration != duration){ this.duration = duration; this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration)); } } private void loadScaleName() { int scaleKey = TuxGuitar.instance().getScaleManager().getSelectionKey(); int scaleIndex = TuxGuitar.instance().getScaleManager().getSelectionIndex(); String key = TuxGuitar.instance().getScaleManager().getKeyName( scaleKey ); String name = TuxGuitar.instance().getScaleManager().getScaleName( scaleIndex ); this.scaleName.setText( ( key != null && name != null ) ? ( key + " - " + name ) : "" ); this.scaleName.pack(); } private void makePiano(){ this.image = makePianoImage(); this.pianoComposite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED); this.pianoComposite.setLayout(new GridLayout()); this.pianoComposite.setLayoutData(new GridData((NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT)); this.pianoComposite.addPaintListener(this.listener); this.pianoComposite.addMouseListener(this.listener); this.pianoComposite.setFocus(); } /** * Crea la imagen del piano * * @return */ private Image makePianoImage(){ Image image = new Image(getDisplay(),(NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT); TGPainter painter = new TGPainter(new GC(image)); int x = 0; int y = 0; painter.setBackground(this.config.getColorNatural()); painter.initPath(TGPainter.PATH_FILL); painter.addRectangle(x,y,(NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT); painter.closePath(); for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){ if(TYPE_NOTES[i % TYPE_NOTES.length]){ painter.setForeground(this.config.getColorNotNatural()); painter.initPath(); painter.setAntialias(false); painter.addRectangle(x,y,NATURAL_WIDTH,NATURAL_HEIGHT); painter.closePath(); x += NATURAL_WIDTH; }else{ painter.setBackground(this.config.getColorNotNatural()); painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(x - (SHARP_WIDTH / 2),y,SHARP_WIDTH,SHARP_HEIGHT); painter.closePath(); } } paintScale(painter); painter.dispose(); return image; } /** * Pinta la nota a partir del indice * * @param gc * @param value */ private void paintScale(TGPainter painter){ painter.setBackground(this.config.getColorScale()); painter.setForeground(this.config.getColorScale()); int posX = 0; for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){ int width = 0; if(TYPE_NOTES[i % TYPE_NOTES.length]){ width = NATURAL_WIDTH; if(i > 0 && !TYPE_NOTES[(i - 1) % TYPE_NOTES.length]){ width -= ((SHARP_WIDTH / 2)); } if(!TYPE_NOTES[(i + 1) % TYPE_NOTES.length]){ width -= ((SHARP_WIDTH / 2)); } }else{ width = SHARP_WIDTH; } if(TuxGuitar.instance().getScaleManager().getScale().getNote(i)){ if(TYPE_NOTES[i % TYPE_NOTES.length] ){ int x = posX; if(i > 0 && !TYPE_NOTES[(i - 1) % TYPE_NOTES.length]){ x -= ((SHARP_WIDTH / 2)); } int size = SHARP_WIDTH; painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle( (x + 1 + (((NATURAL_WIDTH - size) / 2))) ,(NATURAL_HEIGHT - size - (((NATURAL_WIDTH - size) / 2))),size,size); painter.closePath(); }else{ painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(posX + 1, SHARP_HEIGHT - SHARP_WIDTH + 1,SHARP_WIDTH - 2,SHARP_WIDTH - 2); painter.closePath(); } } posX += width; } } /** * Pinta la nota a partir del indice * * @param gc * @param value */ protected void paintNote(TGPainter painter,int value){ painter.setBackground(this.config.getColorNote()); int posX = 0; int y = 0; for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){ int width = 0; if(TYPE_NOTES[i % TYPE_NOTES.length]){ width = NATURAL_WIDTH; if(i > 0 && !TYPE_NOTES[(i - 1) % TYPE_NOTES.length]){ width -= ((SHARP_WIDTH / 2)); } if(!TYPE_NOTES[(i + 1) % TYPE_NOTES.length]){ width -= ((SHARP_WIDTH / 2)); } }else{ width = SHARP_WIDTH; } if(i == value){ if(TYPE_NOTES[i % TYPE_NOTES.length]){ painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(posX + 1,y + 1,width - 1,SHARP_HEIGHT); int x = posX; if(i > 0 && !TYPE_NOTES[(i - 1) % TYPE_NOTES.length]){ x -= ((SHARP_WIDTH / 2)); } painter.addRectangle(x + 1,(y + SHARP_HEIGHT) + 1,NATURAL_WIDTH - 1,(NATURAL_HEIGHT - SHARP_HEIGHT) - 1); painter.closePath(); }else{ painter.initPath(TGPainter.PATH_FILL); painter.setAntialias(false); painter.addRectangle(posX + 1,y + 1,width - 1,SHARP_HEIGHT - 1); painter.closePath(); } } posX += width; } } /** * Retorna el indice de la nota seleccionada * * @param point * @return */ private int getSelection(Point point){ int posX = 0; for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){ int width = 0; if(TYPE_NOTES[i % TYPE_NOTES.length]){ width = NATURAL_WIDTH; if(i > 0 && !TYPE_NOTES[(i - 1) % TYPE_NOTES.length]){ width -= ((SHARP_WIDTH / 2)); } if(!TYPE_NOTES[(i + 1) % TYPE_NOTES.length]){ width -= ((SHARP_WIDTH / 2)); } }else{ width = SHARP_WIDTH; } if(point.x >= posX && point.x < (posX + width) ){ return i; } posX += width; } return -1; } protected void hit(int x, int y) { int value = getSelection(new Point(x,y)); if (!removeNote(value)) { addNote(value); } } private boolean removeNote(int value) { if(this.beat != null){ for(int v = 0; v < this.beat.countVoices(); v ++){ TGVoice voice = this.beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNote note = (TGNote) it.next(); if (getRealNoteValue(note) == value) { //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getMeasureManager().removeNote(note); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); return true; } } } } return false; } private boolean addNote(int value) { Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); List strings = caret.getTrack().getStrings(); for(int i = 0;i < strings.size();i ++){ TGString string = (TGString)strings.get(i); if(value >= string.getValue()){ boolean emptyString = true; if(this.beat != null){ for(int v = 0; v < this.beat.countVoices(); v ++){ TGVoice voice = this.beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNoteImpl note = (TGNoteImpl) it.next(); if (note.getString() == string.getNumber()) { emptyString = false; break; } } } } if(emptyString){ TGSongManager manager = TuxGuitar.instance().getSongManager(); //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGNote note = manager.getFactory().newNote(); note.setValue((value - string.getValue())); note.setVelocity(caret.getVelocity()); note.setString(string.getNumber()); TGDuration duration = manager.getFactory().newDuration(); caret.getDuration().copy(duration); manager.getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration,caret.getVoice()); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //reprodusco las notas en el pulso caret.getSelectedBeat().play(); return true; } } } return false; } protected void afterAction() { int measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().getNumber(); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure); TuxGuitar.instance().updateCache(true); } protected int getRealNoteValue(TGNote note){ TGVoice voice = note.getVoice(); if( voice != null ){ TGBeat beat = voice.getBeat(); if( beat != null ){ TGMeasure measure = beat.getMeasure(); if( measure != null ){ TGTrack track = measure.getTrack(); if( track != null ){ return ( note.getValue() + track.getString( note.getString() ).getValue() ); } } } } // If note have no parents, uses current track strings. Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGTrack track = caret.getTrack(); if( track != null ){ return ( note.getValue() + track.getString( note.getString() ).getValue() ); } return 0; } public boolean hasChanges(){ return this.changes; } public void setChanges(boolean changes){ this.changes = changes; } public void setExternalBeat(TGBeat externalBeat){ this.externalBeat = externalBeat; } public TGBeat getExternalBeat(){ return this.externalBeat; } protected void updateEditor(){ if(isVisible()){ if(hasChanges()){ this.image.dispose(); this.image = makePianoImage(); } if(TuxGuitar.instance().getPlayer().isRunning()){ this.beat = TuxGuitar.instance().getEditorCache().getPlayBeat(); }else if(this.externalBeat != null){ this.beat = this.externalBeat; }else{ this.beat = TuxGuitar.instance().getEditorCache().getEditBeat(); } } } public void redraw() { if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){ super.redraw(); this.pianoComposite.redraw(); this.loadDurationImage(false); } } public void redrawPlayingMode(){ if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){ this.pianoComposite.redraw(); } } public void dispose(){ super.dispose(); this.image.dispose(); this.config.dispose(); } public void loadProperties(){ this.scale.setText(TuxGuitar.getProperty("scale")); this.settings.setToolTipText(TuxGuitar.getProperty("settings")); this.loadScaleName(); this.layout(true,true); } public void loadIcons(){ this.getShell().setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings()); this.loadDurationImage(true); this.layout(true,true); } public void loadScale(){ this.loadScaleName(); this.setChanges(true); } protected void configure(){ this.config.configure(getShell()); this.setChanges(true); this.redraw(); } public Composite getPianoComposite() { return this.pianoComposite; } private class PianoListener implements PaintListener,MouseListener { public PianoListener(){ super(); } public void paintControl(PaintEvent e) { if(!TuxGuitar.instance().isLocked()){ TuxGuitar.instance().lock(); updateEditor(); TGPainter painter = new TGPainter(e.gc); painter.drawImage(Piano.this.image,0,0); //pinto notas if(Piano.this.beat != null){ for(int v = 0; v < Piano.this.beat.countVoices(); v ++){ TGVoice voice = Piano.this.beat.getVoice( v ); Iterator it = voice.getNotes().iterator(); while(it.hasNext()){ TGNote note = (TGNote)it.next(); paintNote(painter, getRealNoteValue( note ) ); } } } TuxGuitar.instance().unlock(); } } public void mouseUp(MouseEvent e) { getPianoComposite().setFocus(); if(e.button == 1){ if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){ ActionLock.lock(); if( getExternalBeat() == null ){ hit(e.x, e.y); }else{ setExternalBeat( null ); } afterAction(); ActionLock.unlock(); } }else{ TuxGuitar.instance().getAction(GoRightAction.NAME).process(e); } } public void mouseDoubleClick(MouseEvent e) { //Not implemented } public void mouseDown(MouseEvent e) { //Not implemented } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/PianoConfig.java0000644000175000017500000002022711273045225030561 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.piano; import java.util.Properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; public class PianoConfig { private static final int MINIMUM_CONTROL_WIDTH = 180; private static final int MINIMUM_BUTTON_WIDTH = 80; private static final int MINIMUM_BUTTON_HEIGHT = 25; private Color colorNatural; private Color colorNotNatural; private Color colorNote; private Color colorScale; public PianoConfig(){ super(); } public Color getColorNatural() { return this.colorNatural; } public Color getColorNotNatural() { return this.colorNotNatural; } public Color getColorNote() { return this.colorNote; } public Color getColorScale() { return this.colorScale; } public void load(){ Display display = TuxGuitar.instance().getDisplay(); TGConfigManager config = TuxGuitar.instance().getConfig(); this.colorNatural = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_KEY_NATURAL)); this.colorNotNatural = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL)); this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_NOTE)); this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_SCALE)); } public void defaults(){ TGConfigManager config = TuxGuitar.instance().getConfig(); Properties defaults = config.getDefaults(); config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,defaults.getProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL)); config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,defaults.getProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL)); config.setProperty(TGConfigKeys.PIANO_COLOR_NOTE,defaults.getProperty(TGConfigKeys.PIANO_COLOR_NOTE)); config.setProperty(TGConfigKeys.PIANO_COLOR_SCALE,defaults.getProperty(TGConfigKeys.PIANO_COLOR_SCALE)); } public void save(RGB rgbNatural,RGB rgbNotNatural,RGB rgbNote,RGB rgbScale){ TGConfigManager config = TuxGuitar.instance().getConfig(); config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,rgbNatural); config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,rgbNotNatural); config.setProperty(TGConfigKeys.PIANO_COLOR_NOTE,rgbNote); config.setProperty(TGConfigKeys.PIANO_COLOR_SCALE,rgbScale); } public void dispose(){ this.colorNatural.dispose(); this.colorNotNatural.dispose(); this.colorNote.dispose(); this.colorScale.dispose(); } public void configure(Shell shell) { final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("piano.settings")); // ---------------------------------------------------------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("piano.settings")); // Color final RGB rgbNatural = getColorChooser(group,TuxGuitar.getProperty("piano.natural-key-color"), this.colorNatural.getRGB()); final RGB rgbNotNatural = getColorChooser(group,TuxGuitar.getProperty("piano.not-natural-key-color"), this.colorNotNatural.getRGB()); final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("piano.note-color"), this.colorNote.getRGB()); final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("piano.scale-note-color"), this.colorScale.getRGB()); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(3, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); final Button buttonDefaults = new Button(buttons, SWT.PUSH); buttonDefaults.setText(TuxGuitar.getProperty("defaults")); buttonDefaults.setLayoutData(getButtonData()); buttonDefaults.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); defaults(); applyChanges(); } }); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); save(rgbNatural, rgbNotNatural,rgbNote, rgbScale); applyChanges(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected void applyChanges(){ this.dispose(); this.load(); } private RGB getColorChooser(final Composite parent,String title,RGB rgb){ Label label = new Label(parent, SWT.NULL); label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true)); label.setText(title); ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose")); button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL)); button.loadColor(rgb); return button.getValue(); } private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){ GridData data = new GridData(); data.minimumWidth = minimumWidth; data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = SWT.DEFAULT; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; return data; } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = MINIMUM_BUTTON_WIDTH; data.minimumHeight = MINIMUM_BUTTON_HEIGHT; return data; } private class ButtonColor { protected Button button; protected Color color; protected RGB value; public ButtonColor(Composite parent, int style, String text){ this.value = new RGB(0,0,0); this.button = new Button(parent, style); this.button.setText(text); this.addListeners(); } protected void setLayoutData(Object layoutData){ this.button.setLayoutData(layoutData); } protected void loadColor(RGB rgb){ this.value.red = rgb.red; this.value.green = rgb.green; this.value.blue = rgb.blue; Color color = new Color(this.button.getDisplay(), this.value); this.button.setForeground(color); this.disposeColor(); this.color = color; } protected void disposeColor(){ if(this.color != null && !this.color.isDisposed()){ this.color.dispose(); this.color = null; } } private void addListeners(){ this.button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell()); dlg.setRGB(ButtonColor.this.value); dlg.setText(TuxGuitar.getProperty("choose-color")); RGB result = dlg.open(); if (result != null) { ButtonColor.this.loadColor(result); } } }); this.button.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { ButtonColor.this.disposeColor(); } }); } protected RGB getValue(){ return this.value; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Caret.java0000644000175000017500000002576111273045225027073 0ustar julianjulian/* * Created on 30-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.util.MidiTickUtil; import org.herac.tuxguitar.song.managers.TGMeasureManager; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGVelocities; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class Caret { private Tablature tablature; private TGTrackImpl selectedTrack; private TGMeasureImpl selectedMeasure; private TGBeat selectedBeat; private TGNote selectedNote; private TGDuration selectedDuration; private long position; private int string; private int voice; private int velocity; private boolean restBeat; private boolean changes; public Caret(Tablature tablature) { this.tablature = tablature; this.selectedDuration = getSongManager().getFactory().newDuration(); this.string = 1; this.velocity = TGVelocities.DEFAULT; this.changes = false; } public synchronized void update(){ int trackNumber = (this.selectedTrack != null)?this.selectedTrack.getNumber():1; update(trackNumber,this.position,this.string); } public synchronized void update(int trackNumber){ update(trackNumber,this.position,this.string); } public synchronized void update(int trackNumber,long position,int string){ update(trackNumber, position, string,getVelocity()); } public synchronized void update(int trackNumber,long position,int string,int velocity) { long realPosition = ((TuxGuitar.instance().getPlayer().isRunning())?MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()):position); TGTrackImpl track = findTrack(trackNumber); TGMeasureImpl measure = findMeasure(realPosition,track); TGBeat beat = findBeat(realPosition,measure); if(track != null && measure != null && beat != null){ moveTo(track, measure, beat,string); } setVelocity(velocity); } public void moveTo(TGTrackImpl selectedTrack, TGMeasureImpl selectedMeasure, TGBeat selectedBeat,int string) { this.selectedTrack = selectedTrack; this.selectedMeasure = selectedMeasure; this.selectedBeat = selectedBeat; this.string = string; this.updatePosition(); this.updateDuration(); this.updateString(); this.updateNote(); this.updateBeat(); this.checkTransport(); this.setChanges(true); } private TGTrackImpl findTrack(int number){ TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(number); if(track == null){ track = (TGTrackImpl)getSongManager().getFirstTrack(); } return track; } private TGMeasureImpl findMeasure(long position,TGTrackImpl track){ TGMeasureImpl measure = null; if(track != null){ measure = (TGMeasureImpl)getSongManager().getTrackManager().getMeasureAt(track,position); if(measure == null){ measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track); } } return measure; } private TGBeat findBeat(long position,TGMeasureImpl measure){ TGBeat beat = null; if(measure != null){ TGMeasureManager manager = getSongManager().getMeasureManager(); TGVoice voice = manager.getVoiceIn(measure, position, getVoice()); if( voice != null ){ beat = voice.getBeat(); } if (beat == null) { beat = manager.getFirstBeat(measure.getBeats()); } } return beat; } public synchronized void goToTickPosition(){ long start = MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()); this.update(this.selectedTrack.getNumber(),start,this.string); this.setChanges(true); } public void paintCaret(ViewLayout layout,TGPainter painter) { if(!TuxGuitar.instance().getPlayer().isRunning()){ if (this.selectedMeasure != null && this.selectedBeat instanceof TGBeatImpl) { TGBeatImpl beat = (TGBeatImpl)this.selectedBeat; if( (layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0){ boolean expectedVoice = (getSelectedNote() == null || getSelectedNote().getVoice().getIndex() == getVoice()); int stringSpacing = this.tablature.getViewLayout().getStringSpacing(); int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout); int x = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - 5; int y = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + ((this.string * stringSpacing) - stringSpacing) - 7; int width = 14; int height = 14; layout.setCaretStyle(painter, expectedVoice); painter.initPath(); painter.setAntialias(false); painter.addRectangle(x, y, width, height); painter.closePath(); } else if( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0){ int line = this.tablature.getViewLayout().getScoreLineSpacing(); int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout); float xMargin = (2.0f * layout.getScale()); float x1 = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - xMargin; float x2 = (x1 + layout.getResources().getScoreNoteWidth() + xMargin); float y1 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TOP) - line; float y2 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_BOTTOM); layout.setCaretStyle(painter, true); painter.initPath(); painter.moveTo(x1, y1); painter.lineTo(x1 + ((x2 - x1) / 2f), y1 + (line / 2f)); painter.lineTo(x2, y1); painter.moveTo(x1, y2 + line); painter.lineTo(x1 + ((x2 - x1) / 2f), y2 + (line / 2f)); painter.lineTo(x2, y2 + line); painter.closePath(); } } } } public boolean moveRight() { if (getSelectedBeat() != null) { TGMeasureImpl measure = getMeasure(); TGVoice voice = getSongManager().getMeasureManager().getNextVoice(measure.getBeats(),getSelectedBeat(), getVoice()); TGBeat beat = (voice != null ? voice.getBeat() : null ); if (beat == null){ //si no habia mas componentes. busco el siguiente compas measure = (TGMeasureImpl)getSongManager().getTrackManager().getNextMeasure(getMeasure()); if (measure == null) { return false; } voice = getSongManager().getMeasureManager().getFirstVoice(measure.getBeats(), getVoice()); beat = (voice != null ? voice.getBeat() : null ); if( beat == null ){ beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats()); } } if(beat != null){ moveTo(getTrack(), measure, beat, getStringNumber()); } } return true; } public void moveLeft() { if (getSelectedBeat() != null) { TGMeasureImpl measure = getMeasure(); TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice(measure.getBeats(),getSelectedBeat(), getVoice()); TGBeat beat = (voice != null ? voice.getBeat() : null ); if (beat == null) { //si no habia mas componentes. busco el compas anterior measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(getMeasure()); if (measure == null) { return; } voice = getSongManager().getMeasureManager().getLastVoice(measure.getBeats(), getVoice()); beat = (voice != null ? voice.getBeat() : null ); if( beat == null ){ beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats()); } } if(beat != null){ moveTo(getTrack(), measure, beat, getStringNumber()); } } } /** * Luego de mover el Caret. cambia la duracion seleccionada por la del componente. solo si lo que resta del compas no esta vacio */ private void updateDuration() { if (this.selectedBeat != null && !this.selectedBeat.getVoice(getVoice()).isRestVoice()) { this.selectedBeat.getVoice(getVoice()).getDuration().copy(this.selectedDuration); } } public void moveUp() { int stringCount = this.selectedTrack.stringCount() ; int nextString = (( (this.string - 2 + stringCount) % stringCount) + 1); setStringNumber(nextString); } public void moveDown() { int stringCount = this.selectedTrack.stringCount() ; int nextString = ( (this.string % stringCount) + 1); setStringNumber(nextString); } public void setStringNumber(int number){ this.string = number; this.updateNote(); } public int getStringNumber(){ return this.string; } public long getPosition() { return this.position; } public TGMeasureImpl getMeasure() { return this.selectedMeasure; } public TGTrackImpl getTrack() { return this.selectedTrack; } public TGDuration getDuration() { return this.selectedDuration; } public void setSelectedDuration(TGDuration selectedDuration) { this.selectedDuration = selectedDuration; } public TGString getSelectedString() { List strings = this.selectedTrack.getStrings(); Iterator it = strings.iterator(); while (it.hasNext()) { TGString instrumentString = (TGString) it.next(); if (instrumentString.getNumber() == this.string) { return instrumentString; } } return null; } public void changeDuration(TGDuration duration){ getSongManager().getMeasureManager().changeDuration(getMeasure(),getSelectedBeat(),duration,getVoice(), true); setChanges(true); } private void updatePosition(){ this.position = getSelectedBeat().getStart(); } private void updateString(){ if(this.string < 1 || this.string > getTrack().stringCount() ){ this.string = 1; } } private void checkTransport(){ TuxGuitar.instance().getTransport().gotoMeasure(getMeasure().getHeader()); } public boolean hasChanges() { return this.changes; } public void setChanges(boolean changes) { this.changes = changes; } public int getVelocity() { return this.velocity; } public void setVelocity(int velocity) { this.velocity = velocity; } private void updateNote(){ this.selectedNote = null; TGString string = getSelectedString(); if( string != null ){ this.selectedNote = getSongManager().getMeasureManager().getNote(getMeasure(),getPosition(),string.getNumber()); } } public TGNote getSelectedNote(){ return this.selectedNote; } private void updateBeat(){ this.restBeat = this.selectedBeat.isRestBeat(); } public TGBeatImpl getSelectedBeat(){ return (TGBeatImpl)this.selectedBeat; } public TGSongManager getSongManager(){ return this.tablature.getSongManager(); } public int getVoice() { return this.voice; } public void setVoice(int voice) { this.voice = voice; this.update(); } public boolean isRestBeatSelected(){ return this.restBeat; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatGroup.java0000644000175000017500000001573611273045225030161 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.models.TGVoice; public class TGBeatGroup { private static final int SCORE_MIDDLE_KEYS[] = new int[]{55,40,40,50}; private static final int SCORE_SHARP_POSITIONS[] = new int[]{7,7,6,6,5,4,4,3,3,2,2,1}; private static final int SCORE_FLAT_POSITIONS[] = new int[]{7,6,6,5,5,4,3,3,2,2,1,1}; public static final int DIRECTION_NOT_SETTED = 0; public static final int DIRECTION_UP = 1; public static final int DIRECTION_DOWN = 2; private static final int UP_OFFSET = 28; private static final int DOWN_OFFSET = 35; private int voice; private int direction; private List voices; private TGNoteImpl firstMinNote; private TGNoteImpl firstMaxNote; private TGNoteImpl lastMinNote; private TGNoteImpl lastMaxNote; private TGNoteImpl maxNote; private TGNoteImpl minNote; public TGBeatGroup(int voice){ this.voice = voice; this.voices = new ArrayList(); this.direction = DIRECTION_NOT_SETTED; this.firstMinNote = null; this.firstMaxNote = null; this.lastMinNote = null; this.lastMaxNote = null; this.maxNote = null; this.minNote = null; } public void check(TGVoiceImpl voice){ this.check(voice.getMaxNote()); this.check(voice.getMinNote()); this.voices.add( voice ); if( voice.getDirection() != TGVoice.DIRECTION_NONE ){ if( voice.getDirection() == TGVoice.DIRECTION_UP ){ this.direction = DIRECTION_UP; } else if( voice.getDirection() == TGVoice.DIRECTION_DOWN ){ this.direction = DIRECTION_DOWN; } } } private void check(TGNoteImpl note){ int value = note.getRealValue(); //FIRST MIN NOTE if(this.firstMinNote == null || note.getVoice().getBeat().getStart() < this.firstMinNote.getVoice().getBeat().getStart()){ this.firstMinNote = note; }else if(note.getVoice().getBeat().getStart() == this.firstMinNote.getVoice().getBeat().getStart()){ if(note.getRealValue() < this.firstMinNote.getRealValue()){ this.firstMinNote = note; } } //FIRST MAX NOTE if(this.firstMaxNote == null || note.getVoice().getBeat().getStart() < this.firstMaxNote.getVoice().getBeat().getStart()){ this.firstMaxNote = note; }else if(note.getVoice().getBeat().getStart() == this.firstMaxNote.getVoice().getBeat().getStart()){ if(note.getRealValue() > this.firstMaxNote.getRealValue()){ this.firstMaxNote = note; } } //LAST MIN NOTE if(this.lastMinNote == null || note.getVoice().getBeat().getStart() > this.lastMinNote.getVoice().getBeat().getStart()){ this.lastMinNote = note; }else if(note.getVoice().getBeat().getStart() == this.lastMinNote.getVoice().getBeat().getStart()){ if(note.getRealValue() < this.lastMinNote.getRealValue()){ this.lastMinNote = note; } } //LAST MIN NOTE if(this.lastMaxNote == null || note.getVoice().getBeat().getStart() > this.lastMaxNote.getVoice().getBeat().getStart()){ this.lastMaxNote = note; }else if(note.getVoice().getBeat().getStart() == this.lastMaxNote.getVoice().getBeat().getStart()){ if(note.getRealValue() > this.lastMaxNote.getRealValue()){ this.lastMaxNote = note; } } if(this.maxNote == null || value > this.maxNote.getRealValue()){ this.maxNote = note; } if(this.minNote == null || value < this.minNote.getRealValue()){ this.minNote = note; } } public void finish(ViewLayout layout, TGMeasureImpl measure){ if( this.direction == DIRECTION_NOT_SETTED ){ if (measure.getNotEmptyVoices() > 1 ){ this.direction = this.voice == 0 ? DIRECTION_UP : DIRECTION_DOWN; }else if ( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){ this.direction = DIRECTION_DOWN; }else{ int max = Math.abs(this.minNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] + 100)); int min = Math.abs(this.maxNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] - 100)); if(max > min){ this.direction = DIRECTION_UP; }else{ this.direction = DIRECTION_DOWN; } } } } public List getVoices(){ return this.voices; } public int getY1(ViewLayout layout,TGNoteImpl note,int key,int clef){ double scale = (layout.getScoreLineSpacing() / 2.00); int noteValue = note.getRealValue(); int scoreLineY = 0; if(key <= 7){ scoreLineY = (int)((SCORE_SHARP_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale); }else{ scoreLineY = (int)((SCORE_FLAT_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale); } scoreLineY += TGMeasureImpl.SCORE_KEY_OFFSETS[clef - 1] * scale; return scoreLineY; } public int getY2(ViewLayout layout,int x,int key,int clef){ int maxDistance = 10; float upOffset = TGBeatGroup.getUpOffset(layout); float downOffset = TGBeatGroup.getDownOffset(layout); if(this.direction == DIRECTION_DOWN){ if(this.minNote != this.firstMinNote && this.minNote != this.lastMinNote){ return (int) (getY1(layout,this.minNote,key,clef) + downOffset); } int y = 0; int x1 = this.firstMinNote.getPosX() + this.firstMinNote.getBeatImpl().getSpacing(); int x2 = this.lastMinNote.getPosX() + this.lastMinNote.getBeatImpl().getSpacing(); int y1 = (int) (getY1(layout,this.firstMinNote,key,clef) + downOffset); int y2 = (int) (getY1(layout,this.lastMinNote,key,clef) + downOffset); if(y1 > y2 && (y1 - y2) > maxDistance) y2 = (y1 - maxDistance); if(y2 > y1 && (y2 - y1) > maxDistance) y1 = (y2 - maxDistance); //int y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x)); if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){ y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x)); } return y1 - y; }else if(this.maxNote != this.firstMaxNote && this.maxNote != this.lastMaxNote){ return (int)(getY1(layout,this.maxNote,key,clef) - upOffset); }else{ int y = 0; int x1 = this.firstMaxNote.getPosX() + this.firstMaxNote.getBeatImpl().getSpacing(); int x2 = this.lastMaxNote.getPosX() + this.lastMaxNote.getBeatImpl().getSpacing(); int y1 = (int)(getY1(layout,this.firstMaxNote,key,clef) - upOffset); int y2 = (int)(getY1(layout,this.lastMaxNote,key,clef) - upOffset); if(y1 < y2 && (y2 - y1) > maxDistance) y2 = (y1 + maxDistance); if(y2 < y1 && (y1 - y2) > maxDistance) y1 = (y2 + maxDistance); if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){ y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x)); } return y1 - y; } } public int getDirection() { return this.direction; } public TGNoteImpl getMinNote(){ return this.minNote; } public TGNoteImpl getMaxNote(){ return this.maxNote; } public static float getUpOffset(ViewLayout layout){ float scale = (layout.getScoreLineSpacing() / 8.0f); return (UP_OFFSET * scale); } public static float getDownOffset(ViewLayout layout){ float scale = (layout.getScoreLineSpacing() / 8.0f); return (DOWN_OFFSET * scale); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatImpl.java0000644000175000017500000002521711273045225027761 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGStroke; import org.herac.tuxguitar.song.models.TGVoice; public class TGBeatImpl extends TGBeat{ /** * desviacion a la izquierda */ public static final int JOINED_TYPE_NONE_LEFT = 1; /** * desviacion a la derecha */ public static final int JOINED_TYPE_NONE_RIGHT = 2; /** * Union a la izquierda */ public static final int JOINED_TYPE_LEFT = 3; /** * Union a la derecha */ public static final int JOINED_TYPE_RIGHT = 4; private int posX; private int width; private TGNoteImpl maxNote; private TGNoteImpl minNote; private boolean[] usedStrings; private int joinedType; private boolean joinedGreaterThanQuarter; private TGBeatImpl join1; private TGBeatImpl join2; private TGBeatImpl previous; private TGBeatImpl next; private TGBeatGroup group; private TGBeatSpacing bs; private boolean accentuated; private boolean heavyAccentuated; private boolean harmonic; private boolean tapping; private boolean slapping; private boolean popping; private boolean palmMute; private boolean vibrato; private boolean trill; private boolean fadeIn; public TGBeatImpl(TGFactory factory){ super(factory); } public int getPosX() { return this.posX; } public void setPosX(int posX) { this.posX = posX; } public int getMinimumWidth() { return this.width; } public void setWidth(int width) { this.width = width; } public TGNoteImpl getMinNote(){ return this.minNote; } public TGNoteImpl getMaxNote(){ return this.maxNote; } public TGMeasureImpl getMeasureImpl() { return (TGMeasureImpl)getMeasure(); } public boolean[] getUsedStrings() { if(this.usedStrings == null){ this.usedStrings = new boolean[getMeasure().getTrack().stringCount()]; } return this.usedStrings; } public TGBeatImpl getJoin1() { return this.join1; } public void setJoin1(TGBeatImpl join1) { this.join1 = join1; } public TGBeatImpl getJoin2() { return this.join2; } public void setJoin2(TGBeatImpl join2) { this.join2 = join2; } public boolean isJoinedGreaterThanQuarter() { return this.joinedGreaterThanQuarter; } public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) { this.joinedGreaterThanQuarter = joinedGreaterThanQuarter; } public int getJoinedType() { return this.joinedType; } public void setJoinedType(int joinedType) { this.joinedType = joinedType; } public TGBeatImpl getPreviousBeat() { return this.previous; } public void setPreviousBeat(TGBeatImpl previous) { this.previous = previous; } public TGBeatImpl getNextBeat() { return this.next; } public void setNextBeat(TGBeatImpl next) { this.next = next; } public TGBeatGroup getBeatGroup() { return this.group; } public void setBeatGroup(TGBeatGroup group) { this.group = group; } public int getSpacing(){ return getMeasureImpl().getBeatSpacing(this); } public boolean isPlaying(ViewLayout layout){ return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getMeasure(),this)); } public TGVoiceImpl getVoiceImpl(int index){ TGVoice voice = super.getVoice(index); if(voice instanceof TGVoiceImpl){ return (TGVoiceImpl)voice; } return null; } public void reset(){ this.maxNote = null; this.minNote = null; this.usedStrings = new boolean[getMeasure().getTrack().stringCount()]; } public void check( ViewLayout layout , TGNoteImpl note){ int value = note.getRealValue(); if(this.maxNote == null || value > this.maxNote.getRealValue()){ this.maxNote = note; } if(this.minNote == null || value < this.minNote.getRealValue()){ this.minNote = note; } this.getUsedStrings(); this.usedStrings[note.getString() - 1] = true; } public void resetEffectsSpacing( ViewLayout layout ){ this.bs = new TGBeatSpacing( layout ); this.accentuated = false; this.heavyAccentuated = false; this.harmonic = false; this.tapping = false; this.slapping = false; this.popping = false; this.palmMute = false; this.fadeIn = false; this.vibrato = false; this.trill = false; } public void updateEffectsSpacing(ViewLayout layout,TGNoteEffect effect){ if(effect.isAccentuatedNote()){ this.accentuated = true; } if(effect.isHeavyAccentuatedNote()){ this.heavyAccentuated = true; } if(effect.isHarmonic() && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){ this.harmonic = true; } if(effect.isTapping()){ this.tapping = true; } if(effect.isSlapping()){ this.slapping = true; } if(effect.isPopping()){ this.popping = true; } if(effect.isPalmMute()){ this.palmMute = true; } if(effect.isFadeIn()){ this.fadeIn = true; } if(effect.isVibrato()){ this.vibrato = true; } if(effect.isTrill()){ this.trill = true; } } public int getEffectsSpacing(ViewLayout layout){ if(this.accentuated){ this.bs.setSize(TGBeatSpacing.POSITION_ACCENTUATED_EFFECT,layout.getEffectSpacing()); } if(this.heavyAccentuated){ this.bs.setSize(TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT,layout.getEffectSpacing()); } if(this.harmonic){ this.bs.setSize(TGBeatSpacing.POSITION_HARMONIC_EFFEC,layout.getEffectSpacing()); } if(this.tapping){ this.bs.setSize(TGBeatSpacing.POSITION_TAPPING_EFFEC,layout.getEffectSpacing()); } if(this.slapping){ this.bs.setSize(TGBeatSpacing.POSITION_SLAPPING_EFFEC,layout.getEffectSpacing()); } if(this.popping){ this.bs.setSize(TGBeatSpacing.POSITION_POPPING_EFFEC,layout.getEffectSpacing()); } if(this.palmMute){ this.bs.setSize(TGBeatSpacing.POSITION_PALM_MUTE_EFFEC,layout.getEffectSpacing()); } if(this.fadeIn){ this.bs.setSize(TGBeatSpacing.POSITION_FADE_IN,layout.getEffectSpacing()); } if(this.vibrato){ this.bs.setSize(TGBeatSpacing.POSITION_VIBRATO_EFFEC,layout.getEffectSpacing()); } if(this.trill){ this.bs.setSize(TGBeatSpacing.POSITION_TRILL_EFFEC,layout.getEffectSpacing()); } return this.bs.getSize(); } public void play(){ if(!TuxGuitar.instance().getPlayer().isRunning()){ new Thread(new Runnable() { public void run() { List notes = new ArrayList(); for( int v = 0; v < countVoices(); v ++){ notes.addAll( getVoice(v).getNotes() ); } TuxGuitar.instance().getPlayer().playBeat(getMeasure().getTrack(),notes); } }).start(); } } public void paint(ViewLayout layout,TGPainter painter, int fromX, int fromY/*,boolean playMode*/) { if(!layout.isPlayModeEnabled() && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){ paintExtraLines(painter, layout,fromX, fromY); } for(int v = 0; v < TGBeat.MAX_VOICES; v ++){ getVoiceImpl(v).paint(layout, painter, fromX, fromY); } if(!layout.isPlayModeEnabled()){ if(isChordBeat()){ TGChordImpl chord = (TGChordImpl)getChord(); chord.paint(layout,painter,fromX,fromY); } if(getStroke().getDirection() != TGStroke.STROKE_NONE){ paintStroke(layout, painter, fromX, fromY); } } } public void paintExtraLines(TGPainter painter,ViewLayout layout,int fromX, int fromY){ if(!isRestBeat()){ int scoreY = (fromY + getMeasureImpl().getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); paintExtraLines(painter,layout,getMinNote(), fromX, scoreY); paintExtraLines(painter,layout,getMaxNote(), fromX, scoreY); } } private void paintExtraLines(TGPainter painter,ViewLayout layout,TGNoteImpl note,int fromX,int fromY){ float scale = layout.getScale(); int y = fromY + note.getScorePosY(); int x = fromX + getPosX() + getSpacing(); float x1 = x - (4 * scale); float x2 = x + (12 * scale); int scoreLineSpacing = layout.getScoreLineSpacing(); layout.setLineStyle(painter); if(y < fromY){ for(int i = fromY;i > y;i -= scoreLineSpacing){ painter.initPath(); painter.setAntialias(false); painter.moveTo(x1,i); painter.lineTo(x2,i); painter.closePath(); } }else if(y > (fromY + (scoreLineSpacing * 4))){ for(int i = (fromY +(scoreLineSpacing * 5));i < (y + scoreLineSpacing);i += scoreLineSpacing){ painter.initPath(); painter.setAntialias(false); painter.moveTo(x1,i); painter.lineTo(x2,i); painter.closePath(); } } } public void paintStroke(ViewLayout layout,TGPainter painter, int fromX, int fromY){ int style = layout.getStyle(); float scale = layout.getScale(); float x = (fromX + getPosX() + getSpacing() + ( 12f * scale )); float y1 = 0; float y2 = 0; if((style & ViewLayout.DISPLAY_SCORE) != 0){ float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); y1 = (y + layout.getScoreLineSpacing()); y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing())); } if((style & ViewLayout.DISPLAY_TABLATURE) != 0){ float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE)); y1 = (y + layout.getStringSpacing()); y2 = (y + (getMeasureImpl().getTrackImpl().getTabHeight() - layout.getStringSpacing())); } else if((style & ViewLayout.DISPLAY_SCORE) != 0){ float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); y1 = (y + layout.getScoreLineSpacing()); y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing())); }else{ return; } if( getStroke().getDirection() == TGStroke.STROKE_UP ){ painter.initPath(); painter.setAntialias(false); painter.moveTo( x, y1 ); painter.lineTo( x, y2 ); painter.lineTo( x - (2.0f * scale), y2 - (5.0f * scale)); painter.moveTo( x , y2 ); painter.lineTo( x + (2.0f * scale), y2 - (5.0f * scale)); painter.closePath(); }else if( getStroke().getDirection() == TGStroke.STROKE_DOWN ){ painter.initPath(); painter.setAntialias(false); painter.moveTo( x, y2 ); painter.lineTo( x, y1 ); painter.lineTo( x - (2.0f * scale), y1 + (3.0f * scale)); painter.moveTo( x , y1 ); painter.lineTo( x + (2.0f * scale), y1 + (3.0f * scale)); painter.closePath(); } } public int getPaintPosition(int index){ return getMeasureImpl().getTs().getPosition(index); } public TGBeatSpacing getBs(){ return this.bs; } public void removeChord(){ if(isChordBeat()){ TGChordImpl chord = (TGChordImpl)getChord(); chord.dispose(); } super.removeChord(); } public void dispose(){ if(isChordBeat()){ TGChordImpl chord = (TGChordImpl)getChord(); chord.dispose(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatSpacing.java0000644000175000017500000000253311273045225030440 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; public class TGBeatSpacing extends TGSpacing { /*** POSITIONS ARRAY INDICES ***/ public static final int POSITION_ACCENTUATED_EFFECT = 0; public static final int POSITION_HEAVY_ACCENTUATED_EFFECT = 1; public static final int POSITION_HARMONIC_EFFEC = 2; public static final int POSITION_TAPPING_EFFEC = 3; public static final int POSITION_SLAPPING_EFFEC = 4; public static final int POSITION_POPPING_EFFEC = 5; public static final int POSITION_PALM_MUTE_EFFEC = 6; public static final int POSITION_VIBRATO_EFFEC = 7; public static final int POSITION_TRILL_EFFEC = 8; public static final int POSITION_FADE_IN = 9; private static final int[] EFFECT_POSITIONS = new int[]{ POSITION_ACCENTUATED_EFFECT, POSITION_HEAVY_ACCENTUATED_EFFECT, POSITION_HARMONIC_EFFEC, POSITION_TAPPING_EFFEC, POSITION_SLAPPING_EFFEC, POSITION_POPPING_EFFEC, POSITION_PALM_MUTE_EFFEC, POSITION_VIBRATO_EFFEC, POSITION_TRILL_EFFEC, POSITION_FADE_IN, }; private static final int[][] POSITIONS = new int[][]{ /** SCORE **/ EFFECT_POSITIONS , /** TABLATURE **/ EFFECT_POSITIONS , /** SCORE | TABLATURE **/ EFFECT_POSITIONS , }; public TGBeatSpacing(ViewLayout layout) { super(layout, POSITIONS, EFFECT_POSITIONS.length ); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGChordImpl.java0000644000175000017500000003011611273045225030137 0ustar julianjulian/* * Created on 01-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGString; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TGChordImpl extends TGChord { public static final int MAX_FRETS = 6; private int style; private int posX; private int posY; private int width; private int height; private int tonic; private int diagramWidth; private int diagramHeight; private int nameWidth; private int nameHeight; private Image diagram; private Color foregroundColor; private Color backgroundColor; private Color noteColor; private Color tonicColor; private Color color; private Font font; private Font firstFretFont; private int firstFretSpacing; private int stringSpacing; private int fretSpacing; private int noteSize; private boolean editing; public TGChordImpl(int length) { super(length); } public boolean isEditing() { return this.editing; } public void setEditing(boolean editing) { this.editing = editing; } public void setPosX(int posX){ this.posX = posX; } public void setPosY(int posY){ this.posY = posY; } public int getPosY() { return this.posY; } public int getWidth(){ return this.width; } public int getHeight(){ return this.height; } public void setStyle(int style) { this.style = style; } public void setTonic(int tonic){ if(!isDisposed() && this.tonic != tonic){ this.dispose(); } this.tonic = tonic; } public Color getForegroundColor() { return this.foregroundColor; } public void setForegroundColor(Color foregroundColor) { if(!isDisposed() && !isSameColor(this.foregroundColor, foregroundColor)){ this.dispose(); } this.foregroundColor = foregroundColor; } public Color getBackgroundColor() { return this.backgroundColor; } public void setBackgroundColor(Color backgroundColor) { if(!isDisposed() && !isSameColor(this.backgroundColor, backgroundColor)){ this.dispose(); } this.backgroundColor = backgroundColor; } public Color getColor() { return this.color; } public void setColor(Color color) { if(!isDisposed() && !isSameColor(this.color, color)){ this.dispose(); } this.color = color; } public Color getNoteColor() { return this.noteColor; } public void setNoteColor(Color noteColor) { if(!isDisposed() && !isSameColor(this.noteColor, noteColor)){ this.dispose(); } this.noteColor = noteColor; } public Color getTonicColor() { return this.tonicColor; } public void setTonicColor(Color tonicColor) { if(!isDisposed() && !isSameColor(this.tonicColor, tonicColor)){ this.dispose(); } this.tonicColor = tonicColor; } public int getFirstFretSpacing() { return this.firstFretSpacing; } public void setFirstFretSpacing(int firstFretSpacing) { if(!isDisposed() && this.firstFretSpacing != firstFretSpacing){ this.dispose(); } this.firstFretSpacing = firstFretSpacing; } public int getFretSpacing() { return this.fretSpacing; } public void setFretSpacing(int fretSpacing) { if(!isDisposed() && this.fretSpacing != fretSpacing){ this.dispose(); } this.fretSpacing = fretSpacing; } public int getStringSpacing() { return this.stringSpacing; } public void setStringSpacing(int stringSpacing) { if(!isDisposed() && this.stringSpacing != stringSpacing){ this.dispose(); } this.stringSpacing = stringSpacing; } public int getNoteSize() { return this.noteSize; } public void setNoteSize(int noteSize) { if(!isDisposed() && this.noteSize != noteSize){ this.dispose(); } this.noteSize = noteSize; } public Font getFont() { return this.font; } public void setFont(Font font) { if(!isDisposed() && !isSameFont(this.font, font)){ this.dispose(); } this.font = font; } public Font getFirstFretFont() { return this.firstFretFont; } public void setFirstFretFont(Font firstFretFont) { if(!isDisposed() && !isSameFont(this.firstFretFont, firstFretFont)){ this.dispose(); } this.firstFretFont = firstFretFont; } public void paint(ViewLayout layout, TGPainter painter, int fromX, int fromY) { layout.setChordStyle(this); this.setPosY(getPaintPosition(TGTrackSpacing.POSITION_CHORD)); this.setEditing(false); this.update(painter, layout.isBufferEnabled()); this.paint(painter,getBeatImpl().getSpacing() + fromX + Math.round(4f * layout.getScale()), fromY); } public void paint(TGPainter painter, int fromX, int fromY){ int x = (fromX + getPosX()); int y = (fromY + getPosY()); if( (this.style & ViewLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){ if(this.diagram != null){ painter.drawImage(this.diagram,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y); }else{ paintDiagram(painter,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y); } } if( (this.style & ViewLayout.DISPLAY_CHORD_NAME) != 0 && getName() != null && getName().length() > 0){ painter.setFont(getFont()); painter.setForeground(getForegroundColor()); painter.setBackground(getBackgroundColor()); painter.drawString(getName(),x - (this.nameWidth / 2) , y + (this.height - this.nameHeight ) ); } } public void update(TGPainter painter, boolean makeBuffer) { this.width = 0; this.height = 0; if(getFirstFret() <= 0 ){ this.calculateFirstFret(); } if( (this.style & ViewLayout.DISPLAY_CHORD_NAME) != 0 ){ this.updateName(painter); this.width = Math.max(this.width,this.nameWidth); this.height += this.nameHeight; } if( (this.style & ViewLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){ this.updateDiagram( (makeBuffer ? painter.getGC().getDevice() : null ) ); this.width = Math.max(this.width,this.diagramWidth); this.height += this.diagramHeight; } } protected void updateName(TGPainter painter){ String name = getName(); if(painter == null || name == null || name.length() == 0){ this.nameWidth = 0; this.nameHeight = 0; return; } Point point = painter.getStringExtent(name); this.nameWidth = point.x; this.nameHeight = point.y; } protected void updateDiagram(Device device){ Font font = getFirstFretFont(); this.diagramWidth = getStringSpacing() + (getStringSpacing() * countStrings()) + ((font != null)?getFirstFretSpacing():0); this.diagramHeight = getFretSpacing() + (getFretSpacing() * MAX_FRETS); if(device != null && (this.diagram == null || this.diagram.isDisposed())){ this.diagram = new Image(device,this.diagramWidth,this.diagramHeight); TGPainter painter = new TGPainter(new GC(this.diagram)); paintDiagram(painter, 0, 0); painter.dispose(); } } protected void paintDiagram(TGPainter painter, int fromX, int fromY){ Font font = getFirstFretFont(); painter.setBackground(getBackgroundColor()); painter.initPath(TGPainter.PATH_FILL); painter.addRectangle(fromX, fromY, this.diagramWidth, this.diagramHeight); painter.closePath(); painter.setForeground(getColor()); //dibujo las cuerdas int x = fromX + getStringSpacing(); int y = fromY + getFretSpacing(); if(font != null){ String firstFretString = Integer.toString(getFirstFret()); painter.setFont(font); Point size = painter.getStringExtent(firstFretString); painter.drawString(firstFretString,fromX + (getFirstFretSpacing() - size.x),Math.round(y + ((getFretSpacing() / 2f) - (size.y / 2f)))); x += getFirstFretSpacing(); } painter.initPath(); painter.setAntialias(false); for(int i = 0;i < getStrings().length;i++){ int x1 = x + (i * getStringSpacing()); int x2 = x + (i * getStringSpacing()); int y1 = y; int y2 = y + ((getFretSpacing() * (MAX_FRETS - 1))); painter.moveTo(x1,y1); painter.lineTo(x2,y2); } painter.closePath(); //dibujo las cegillas painter.initPath(); painter.setAntialias(false); for(int i = 0;i < MAX_FRETS;i++){ int x1 = x; int x2 = x + ((getStringSpacing() * (countStrings() - 1))); int y1 = y + (i * getFretSpacing()); int y2 = y + (i * getFretSpacing()); painter.moveTo(x1,y1); painter.lineTo(x2,y2); } painter.closePath(); painter.setLineWidth(1); //dibujo las notas for(int i = 0;i < getStrings().length;i++){ int fret = getFretValue(i); int noteX = x + ((getStringSpacing() * (countStrings() - 1)) - (getStringSpacing() * i)); if(fret < 0){ painter.initPath(); painter.moveTo((noteX - (getNoteSize() / 2)), fromY); painter.lineTo((noteX + (getNoteSize() / 2)), fromY + getNoteSize()); painter.moveTo((noteX + (getNoteSize() / 2)), fromY); painter.lineTo((noteX - (getNoteSize() / 2)), fromY + getNoteSize()); painter.closePath(); } else if(fret == 0){ painter.initPath(); painter.addOval(noteX - (getNoteSize() / 2),fromY,getNoteSize(),getNoteSize()); painter.closePath(); } else{ painter.setBackground( (this.tonic >= 0 && ( (getStringValue(i + 1) + fret) % 12) == this.tonic)?getTonicColor():getNoteColor()); painter.initPath(TGPainter.PATH_FILL); fret -= (getFirstFret() - 1); int noteY = y + ((getFretSpacing() * fret) - (getFretSpacing() / 2 )); painter.addOval(noteX - (getNoteSize() / 2),noteY - (getNoteSize() / 2),(getNoteSize() + 1),(getNoteSize() + 1)); painter.closePath(); } } } public void calculateFirstFret(){ int minimum = -1; int maximum = -1; boolean zero = false; for (int i = 0; i < getStrings().length; i++) { int fretValue = getFretValue(i); zero = (zero || fretValue == 0); if(fretValue > 0){ minimum = (minimum < 0)?fretValue:Math.min(minimum,fretValue); maximum = (Math.max(maximum,fretValue)); } } int firstFret = (zero && maximum < MAX_FRETS)?1:minimum; setFirstFret( Math.max(firstFret,1) ); } private int getStringValue(int number){ TGString string = getBeat().getMeasure().getTrack().getString(number); return string.getValue(); } public boolean isDisposed(){ return (this.diagram == null || this.diagram.isDisposed()); } public void dispose(){ if(!isDisposed()){ this.diagram.dispose(); } } public int getPosX() { return (isEditing())?this.posX:getBeatImpl().getPosX(); } public int getPaintPosition(int index){ return getBeatImpl().getMeasureImpl().getTs().getPosition(index); } public TGBeatImpl getBeatImpl(){ return (TGBeatImpl)getBeat(); } private boolean isSameFont(Font f1, Font f2){ if( f1 == null && f2 == null ){ return true; } if( f1 != null && f2 != null && !f1.isDisposed() && !f2.isDisposed()){ FontData[] fd1 = f1.getFontData(); FontData[] fd2 = f2.getFontData(); if( fd1.length > 0 && fd2.length > 0){ boolean sameName = fd1[0].getName().equals(fd2[0].getName()); boolean sameStyle = fd1[0].getStyle() == fd2[0].getStyle(); boolean sameHeight = fd1[0].getHeight() == fd2[0].getHeight(); return (sameName && sameStyle && sameHeight); } } return false; } private boolean isSameColor(Color c1, Color c2){ if( c1 == null && c2 == null ){ return true; } if( c1 != null && c2 != null && !c1.isDisposed() && !c2.isDisposed()){ RGB rgb1 = c1.getRGB(); RGB rgb2 = c2.getRGB(); if( rgb1 != null && rgb2 != null){ return (rgb1.red == rgb2.red && rgb1.green == rgb2.green && rgb1.blue == rgb2.blue); } } return false; } public void addFretValue(int string,int fret){ if(!isDisposed() && this.getFretValue(string) != fret){ this.dispose(); } super.addFretValue(string, fret); } public void setFirstFret(int firstFret) { if(!isDisposed() && this.getFirstFret() != firstFret){ this.dispose(); } super.setFirstFret(firstFret); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGFactoryImpl.java0000644000175000017500000000236511273045225030514 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGText; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVoice; public class TGFactoryImpl extends TGFactory{ public TGFactoryImpl(){ super(); } public TGMeasureHeader newHeader(){ return new TGMeasureHeaderImpl(this); } public TGTrack newTrack(){ return new TGTrackImpl(this); } public TGMeasure newMeasure(TGMeasureHeader header){ return new TGMeasureImpl(header); } public TGNote newNote(){ return new TGNoteImpl(this); } public TGBeat newBeat(){ return new TGBeatImpl(this); } public TGVoice newVoice(int index){ return new TGVoiceImpl(this, index); } public TGLyric newLyric(){ return new TGLyricImpl(); } public TGChord newChord(int length){ return new TGChordImpl(length); } public TGText newText(){ return new TGTextImpl(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGLyricImpl.java0000644000175000017500000000353511273045225030167 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.models.TGLyric; public class TGLyricImpl extends TGLyric{ private int height; private int nextIndex = 0; public TGLyricImpl(){ this.height = 0; } public void setFrom(int from) { super.setFrom(from); this.update(); } public void setLyrics(String lyrics) { super.setLyrics(lyrics); this.update(); } private void update(){ this.height = (this.isEmpty()?0:10); } public void start(){ this.start(0); } public void start(int index){ this.nextIndex = index; } public void setCurrentMeasure(TGMeasureImpl measure){ if(measure.getNumber() >= getFrom()){ measure.setLyricBeatIndex(this.nextIndex); this.nextIndex += (measure.getNotEmptyBeats()); }else{ measure.setLyricBeatIndex(-1); this.start(); } } public void paintCurrentNoteBeats(TGPainter painter,ViewLayout layout,TGMeasureImpl currentMeasure ,int fromX,int fromY){ int from = currentMeasure.getLyricBeatIndex(); String[] beats = getLyricBeats(); if(beats != null && from >= 0 && from < beats.length){ int beatIndex = 0; for(int i = 0;i < currentMeasure.countBeats();i ++){ TGBeatImpl beat = (TGBeatImpl)currentMeasure.getBeat(i); if(!beat.isRestBeat()){ if((from + beatIndex) < beats.length){ String str = beats[from + beatIndex].trim(); if(str.length() > 0){ int x = (fromX + beat.getPosX() + beat.getSpacing() + 2); layout.setLyricStyle(painter,(layout.isPlayModeEnabled() && beat.isPlaying(layout))); painter.drawString(str,x + 13,(fromY + currentMeasure.getTs().getPosition(TGTrackSpacing.POSITION_LYRIC))); } } beatIndex ++; } } } } public int getHeight(){ return this.height; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureBuffer.java0000644000175000017500000000346211273045225031015 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.Image; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGMeasureBuffer { private Device device; private Image buffer; private TGPainter painter; private int width; private int height; public TGMeasureBuffer(Device device){ this.device = device; } public void createBuffer(int width,int height,Color background){ this.dispose(); this.buffer = new Image(this.device,width,height); this.width = width; this.height = height; this.fillBuffer(background); } public void disposeBuffer(){ if(this.buffer != null && !this.buffer.isDisposed()){ this.buffer.dispose(); } } private void fillBuffer(Color background){ getPainter().setBackground(background); getPainter().initPath(TGPainter.PATH_FILL); getPainter().addRectangle(0,0,this.width,this.height); getPainter().closePath(); } public void paintBuffer(TGPainter painter,int x,int y,int srcY){ painter.drawImage(this.buffer,0,srcY, this.width, (this.height - srcY), x, (y + srcY), this.width, (this.height - srcY)); } public void createPainter(){ this.disposePainter(); this.painter = new TGPainter(this.buffer); } public void disposePainter(){ if(this.painter != null && !this.painter.getGC().isDisposed()){ this.painter.dispose(); this.painter = null; } } public TGPainter getPainter(){ if(this.painter == null || this.painter.getGC().isDisposed()){ this.createPainter(); } return this.painter; } public Image getImage(){ return this.buffer; } public void dispose(){ this.disposePainter(); this.disposeBuffer(); } public boolean isDisposed(){ return (this.buffer == null || this.buffer.isDisposed()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureHeaderImpl.java0000644000175000017500000001166611273045225031623 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGMeasureHeader; public class TGMeasureHeaderImpl extends TGMeasureHeader{ /** * Espacio por defecto del timeSignature */ private static final int DEFAULT_TIME_SIGNATURE_SPACING = 30; /** * Espacio por defecto a la izquierda */ private static final int DEFAULT_LEFT_SPACING = 15; /** * Espacio por defecto a la derecha */ private static final int DEFAULT_RIGHT_SPACING = 15; private static final int PAINT_TEMPO = 0x01; private static final int PAINT_TRIPLET_FEEL = 0x02; private static final int PAINT_TIME_SIGNATURE = 0x04; private int paintFlags; private int maxQuarterSpacing; private int maxClefSpacing; private int maxKeySignatureSpacing; private int maxWidth; public TGMeasureHeaderImpl(TGFactory factory){ super(factory); } public void reset() { this.maxWidth = 0; this.paintFlags = 0; this.maxQuarterSpacing = 0; this.maxClefSpacing = 0; this.maxKeySignatureSpacing = 0; } public void update(ViewLayout layout, int index) { this.reset(); this.calculateMeasureChanges(layout); int trackCount = getSong().countTracks(); for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) { TGTrackImpl track = (TGTrackImpl)getSong().getTrack(trackIdx); TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure( index ); measure.calculateMeasureChanges(layout); } } public void calculateMeasureChanges(ViewLayout layout) { TGMeasureHeader previous = layout.getSongManager().getPrevMeasureHeader(this); if(previous == null){ this.paintFlags |= PAINT_TEMPO; this.paintFlags |= ((this.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE)?PAINT_TRIPLET_FEEL:0); this.paintFlags |= PAINT_TIME_SIGNATURE; }else{ //Tempo if(this.getTempo().getValue() != previous.getTempo().getValue()){ this.paintFlags |= PAINT_TEMPO; } //Triplet Feel if(this.getTripletFeel() != previous.getTripletFeel()){ this.paintFlags |= PAINT_TRIPLET_FEEL; } //Time Signature int thisNumerator = this.getTimeSignature().getNumerator(); int thisValue = this.getTimeSignature().getDenominator().getValue(); int prevNumerator = previous.getTimeSignature().getNumerator(); int prevValue = previous.getTimeSignature().getDenominator().getValue(); if(thisNumerator != prevNumerator || thisValue != prevValue){ this.paintFlags |= PAINT_TIME_SIGNATURE; } } } public boolean shouldPaintTempo(){ return ( (this.paintFlags & PAINT_TEMPO) != 0 ); } public boolean shouldPaintTripletFeel(){ return ( (this.paintFlags & PAINT_TRIPLET_FEEL) != 0 ); } public boolean shouldPaintTimeSignature(){ return ( (this.paintFlags & PAINT_TIME_SIGNATURE) != 0 ); } public int getMaxQuarterSpacing() { return this.maxQuarterSpacing; } public void notifyQuarterSpacing(int spacing) { this.maxQuarterSpacing = ((spacing > this.maxQuarterSpacing) ? spacing : this.maxQuarterSpacing ); } public int getClefSpacing(ViewLayout layout, TGMeasureImpl measure){ return (!measure.isPaintClef() && (layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxClefSpacing ); } public int getKeySignatureSpacing(ViewLayout layout, TGMeasureImpl measure){ return (!measure.isPaintKeySignature() && (layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxKeySignatureSpacing ); } public int getTempoSpacing(ViewLayout layout){ return (shouldPaintTempo()? Math.round( 45 * layout.getScale() ):0); } public int getTripletFeelSpacing(ViewLayout layout){ return (shouldPaintTripletFeel()? Math.round( 55 * layout.getScale() ):0); } public int getTimeSignatureSpacing(ViewLayout layout){ return (shouldPaintTimeSignature()? Math.round( DEFAULT_TIME_SIGNATURE_SPACING * layout.getScale() ):0); } public int getLeftSpacing(ViewLayout layout){ return Math.round( DEFAULT_LEFT_SPACING * layout.getScale() ); } public int getRightSpacing(ViewLayout layout){ return Math.round( DEFAULT_RIGHT_SPACING * layout.getScale() ); } public int getFirstNoteSpacing(ViewLayout layout, TGMeasureImpl measure){ int topSpacing = getTempoSpacing(layout) + getTripletFeelSpacing(layout); int middleSpacing = getClefSpacing(layout,measure) + getKeySignatureSpacing(layout,measure) + getTimeSignatureSpacing(layout); return Math.round(Math.max( topSpacing , middleSpacing) + (10f * layout.getScale())); } public void notifyClefSpacing(int spacing){ this.maxClefSpacing = ((spacing > this.maxClefSpacing)?spacing:this.maxClefSpacing); } public void notifyKeySignatureSpacing(int spacing){ this.maxKeySignatureSpacing = ((spacing > this.maxKeySignatureSpacing) ? spacing : this.maxKeySignatureSpacing); } public void notifyWidth(int width){ this.maxWidth = ((width > this.maxWidth)?width:this.maxWidth); } public int getMaxWidth(){ return this.maxWidth; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureImpl.java0000644000175000017500000013210711273045225030504 0ustar julianjulian/* * Created on 26-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.editors.tab.painters.TGClefPainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGKeySignaturePainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGTempoPainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGTripletFeelPainter; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.player.base.MidiPlayerMode; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGDivisionType; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TGMeasureImpl extends TGMeasure{ public static final int NATURAL = 1; public static final int SHARP = 2; public static final int FLAT = 3; public static final int KEY_SIGNATURES[][] = new int[][]{ //------------NATURAL------------------------------------ {NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL}, // NATURAL //------------SHARPS------------------------------------ {NATURAL,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL}, // 1 SHARP {SHARP,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL}, // 2 SHARPS {SHARP,NATURAL,NATURAL,SHARP,SHARP,NATURAL,NATURAL}, // 3 SHARPS {SHARP,SHARP,NATURAL,SHARP,SHARP,NATURAL,NATURAL}, // 4 SHARPS {SHARP,SHARP,NATURAL,SHARP,SHARP,SHARP,NATURAL}, // 5 SHARPS {SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,NATURAL}, // 6 SHARPS {SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,SHARP}, // 7 SHARPS //------------FLATS------------------------------------ {NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,FLAT}, // 1 FLAT {NATURAL,NATURAL,FLAT,NATURAL,NATURAL,NATURAL,FLAT}, // 2 FLATS {NATURAL,NATURAL,FLAT,NATURAL,NATURAL,FLAT,FLAT}, // 3 FLATS {NATURAL,FLAT,FLAT,NATURAL,NATURAL,FLAT,FLAT}, // 4 FLATS {NATURAL,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT}, // 5 FLATS {FLAT,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT}, // 6 FLATS {FLAT,FLAT,FLAT,FLAT,FLAT,FLAT,FLAT}, // 7 FLATS }; public static final int ACCIDENTAL_SHARP_NOTES[] = new int[]{0,0,1,1,2,3,3,4,4,5,5,6}; public static final int ACCIDENTAL_FLAT_NOTES [] = new int[]{0,1,1,2,2,3,4,4,5,5,6,6}; public static final boolean ACCIDENTAL_NOTES[] = new boolean[]{false,true,false,true,false,false,true,false,true,false,true,false}; public static final int SCORE_KEY_OFFSETS[] = new int[]{30,18,22,24}; public static final int SCORE_KEY_SHARP_POSITIONS[][] = new int[][]{ new int[] { 1 , 4, 0, 3, 6, 2 , 5 } , new int[] { 3 , 6, 2, 5, 8, 4 , 7 } , new int[] { 7 , 3, 6, 2, 5, 1 , 4 } , new int[] { 2 , 5, 1, 4, 7, 3 , 6 } , }; public static final int SCORE_KEY_FLAT_POSITIONS[][] = new int[][]{ new int[] { 5, 2, 6, 3, 7, 4, 8 } , new int[] { 7, 4, 8, 5, 9, 6, 10 } , new int[] { 4, 1, 5, 2, 6, 3, 7 } , new int[] { 6, 3, 7, 4, 8, 5, 9 } , }; /** * Espacio por defecto de la clave */ private static final int DEFAULT_CLEF_SPACING = 40; /** * Espacio por defecto entre negra y negra */ private static final int DEFAULT_QUARTER_SPACING = 30; /** * Posicion X */ private int posX; /** * Posicion Y */ private int posY; /** * Espacio entre negras */ private int quarterSpacing; /** * Espacio entre pulsos */ private long divisionLength; /** * Boolean para saber si hay que pintar la clave */ private boolean paintClef = true; /** * Boolean para saber si hay que pintar el KeySignature */ private boolean paintKeySignature = true; /** * Compas anterior */ private TGMeasure prevMeasure; /** * Boolean para saber si el compas esta en el area de pantalla */ private boolean outOfBounds; /** * Boolean para saber si el compas es el primero de la linea */ private boolean firstOfLine; private boolean compactMode; private int spacing; private TGTrackSpacing ts; private int maxY; private int minY; private int notEmptyVoices; private int notEmptyBeats; private int widthBeats = 0; private List[] voiceGroups; private TGMeasureBuffer buffer; private boolean bufferCreated; private Color markerColor; private int lyricBeatIndex; private int width; private int beatEffectSpacing; private boolean text; private boolean chord; private boolean division; private boolean[][] registeredAccidentals; public TGMeasureImpl(TGMeasureHeader header) { super(header); this.registeredAccidentals = new boolean[11][7]; this.voiceGroups = new List[TGBeat.MAX_VOICES]; for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){ this.voiceGroups[v] = new ArrayList(); } } /** * Crea los valores necesarios */ public void create(ViewLayout layout) { this.divisionLength = TGSongManager.getDivisionLength(getHeader()); this.resetSpacing(); this.autoCompleteSilences(layout.getSongManager()); this.orderBeats(layout.getSongManager()); this.checkCompactMode(layout); this.clearRegisteredAccidentals(); this.calculateBeats(layout); this.calculateWidth(layout); this.setFirstOfLine(false); } /** * Actualiza los valores para dibujar */ public void update(ViewLayout layout) { updateComponents(layout); setOutOfBounds(true); setBufferCreated(false); } private void checkCompactMode(ViewLayout layout){ boolean compactMode = ( (layout.getStyle() & ViewLayout.DISPLAY_COMPACT) != 0 ); if(compactMode && (layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) != 0){ compactMode = (layout.getSongManager().getSong().countTracks() == 1); } this.compactMode = compactMode; } private void clearRegisteredAccidentals(){ for( int i = 0 ; i < 11 ; i ++ ){ for( int n = 0 ; n < 7 ; n ++ ){ this.registeredAccidentals[i][n] = false; } } } public void calculateWidth(ViewLayout layout) { if(this.compactMode){ this.width = this.widthBeats; } else{ double quartersInSignature = ((1.00 / this.getTimeSignature().getDenominator().getValue()) * 4.00) * this.getTimeSignature().getNumerator(); this.width = (int)(getQuarterSpacing() * quartersInSignature); } this.width += getFirstNoteSpacing(layout); this.width += (this.getRepeatClose() > 0)?20:0; this.width += getHeaderImpl().getLeftSpacing(layout); this.width += getHeaderImpl().getRightSpacing(layout); this.getHeaderImpl().notifyWidth(this.width); } private void calculateBeats(ViewLayout layout) { TGChord previousChord = null; TGDuration minDuration = null; TGBeatImpl previousBeat = null; TGVoiceImpl[] previousVoices = new TGVoiceImpl[TGBeat.MAX_VOICES]; TGBeatGroup[] groups = new TGBeatGroup[TGBeat.MAX_VOICES]; int style = layout.getStyle(); int minimumChordLength = 0; boolean[] notEmptyVoicesChecked = new boolean[TGBeat.MAX_VOICES]; boolean chordEnabled = ((style & (ViewLayout.DISPLAY_CHORD_DIAGRAM | ViewLayout.DISPLAY_CHORD_NAME)) != 0); this.widthBeats = 0; this.notEmptyBeats = 0; this.notEmptyVoices = 0; for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){ this.voiceGroups[v].clear(); } for (int i = 0; i < countBeats(); i++) { TGBeatImpl beat = (TGBeatImpl)getBeat(i); beat.reset(); if(chordEnabled && beat.getChord() != null){ if(previousChord != null){ int length = (int) (beat.getStart() - previousChord.getBeat().getStart()); minimumChordLength = (minimumChordLength > 0)?Math.min(minimumChordLength, Math.abs(length)):length; } previousChord = beat.getChord(); } boolean emptyBeat = true; for( int v = 0; v < TGBeat.MAX_VOICES; v ++){ TGVoiceImpl voice = (TGVoiceImpl)beat.getVoice(v); if(!voice.isEmpty()){ emptyBeat = false; voice.reset(); if (minDuration == null || voice.getDuration().getTime() <= minDuration.getTime()) { minDuration = voice.getDuration(); } if( !notEmptyVoicesChecked[v] ){ notEmptyVoicesChecked[v] = true; this.notEmptyVoices ++; } Iterator it = voice.getNotes().iterator(); while(it.hasNext()){ TGNoteImpl note = (TGNoteImpl)it.next(); voice.check(note); } if(!voice.isRestVoice()){ beat.check( layout, voice.getMinNote() ); beat.check( layout, voice.getMaxNote() ); if( ( groups[v] == null ) || !canJoin(layout.getSongManager(),voice,previousVoices[v]) ){ groups[v] = new TGBeatGroup(v); this.voiceGroups[v].add(groups[v]); } groups[v].check(voice); }else{ for( int v2 = 0; v2 < TGBeat.MAX_VOICES; v2 ++){ if(v2 != voice.getIndex()){ TGVoiceImpl voice2 = beat.getVoiceImpl(v2); if( !voice2.isEmpty() && voice2.getDuration().isEqual(voice.getDuration())){ if(!voice2.isRestVoice() || !voice2.isHiddenSilence()){ voice.setHiddenSilence(true); break; } } } } } makeVoice(layout, voice, previousVoices[v], groups[v]); previousVoices[v] = voice; } } if (emptyBeat){ System.out.println( "Empty Beat !!!!!! " + beat.getStart() + " " + i); } makeBeat(layout,beat,previousBeat,chordEnabled); previousBeat = beat; } for(int v = 0; v < this.voiceGroups.length; v ++){ Iterator voiceGroups = this.voiceGroups[v].iterator(); while (voiceGroups.hasNext()) { TGBeatGroup group = (TGBeatGroup)voiceGroups.next(); group.finish(layout,this); } } if(!this.compactMode){ this.quarterSpacing = (minDuration != null)?layout.getSpacingForQuarter(minDuration): Math.round(DEFAULT_QUARTER_SPACING * layout.getScale()); if(chordEnabled && minimumChordLength > 0){ int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing())); int minimumSpacing = (int)((TGDuration.QUARTER_TIME * chordWidth) / minimumChordLength); this.quarterSpacing = Math.max(minimumSpacing,this.quarterSpacing); } this.getHeaderImpl().notifyQuarterSpacing(this.quarterSpacing); } } public boolean canJoin(TGSongManager manager,TGVoiceImpl b1,TGVoiceImpl b2){ if( b1 == null || b2 == null || b1.isRestVoice() || b2.isRestVoice() ){ return false; } long divisionLength = getDivisionLength(); long start = getStart(); long start1 = (manager.getMeasureManager().getRealStart(this, b1.getBeat().getStart()) - start); long start2 = (manager.getMeasureManager().getRealStart(this, b2.getBeat().getStart()) - start); if(b1.getDuration().getValue() < TGDuration.EIGHTH || b2.getDuration().getValue() < TGDuration.EIGHTH ){ return ( start1 == start2); } long p1 = ((divisionLength + start1) / divisionLength); long p2 = ((divisionLength + start2) / divisionLength); return ( p1 == p2 ); } private void makeVoice(ViewLayout layout,TGVoiceImpl voice,TGVoiceImpl previousVoice,TGBeatGroup group){ voice.setWidth((int)layout.getVoiceWidth(voice)); voice.setBeatGroup( group ); if(previousVoice != null){ voice.setPreviousBeat(previousVoice); previousVoice.setNextBeat(voice); } } private void makeBeat(ViewLayout layout,TGBeatImpl beat,TGBeatImpl previousBeat, boolean chordEnabled){ int minimumWidth = -1; boolean restBeat = true; for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){ TGVoiceImpl voice = beat.getVoiceImpl(v); if(!voice.isEmpty()){ if( minimumWidth < 0 || voice.getWidth() < minimumWidth ){ minimumWidth = voice.getWidth(); } if( !voice.isRestVoice() ){ restBeat = false; } } } beat.setWidth( minimumWidth ); this.notEmptyBeats += (restBeat ? 0 : 1); this.widthBeats += beat.getMinimumWidth(); if(previousBeat != null){ beat.setPreviousBeat(previousBeat); previousBeat.setNextBeat(beat); if(chordEnabled && beat.isChordBeat() && previousBeat.isChordBeat()){ int previousWidth = previousBeat.getMinimumWidth(); int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing())); previousBeat.setWidth(Math.max(chordWidth,previousWidth)); this.widthBeats -= previousWidth; this.widthBeats += previousBeat.getMinimumWidth(); } } } /** * Calcula si debe pintar el TimeSignature */ public void calculateMeasureChanges(ViewLayout layout) { this.paintClef = false; this.paintKeySignature = false; this.prevMeasure = (layout.isFirstMeasure(this) ? null : (TGMeasureImpl)layout.getSongManager().getTrackManager().getPrevMeasure(this)); if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){ if(this.prevMeasure == null || getClef() != this.prevMeasure.getClef()){ this.paintClef = true; this.getHeaderImpl().notifyClefSpacing( Math.round(DEFAULT_CLEF_SPACING * layout.getScale()) ); } if(this.prevMeasure == null || getKeySignature() != this.prevMeasure.getKeySignature()){ this.paintKeySignature = true; this.getHeaderImpl().notifyKeySignatureSpacing(calculateKeySignatureSpacing(layout)); } } } /** * Calcula si hay espacios libres. y crea nuevos silencios */ private void autoCompleteSilences(TGSongManager manager){ manager.getMeasureManager().autoCompleteSilences(this); } /** * Llama a update de todas las notas del compas */ private void updateComponents(ViewLayout layout) { this.maxY = 0; this.minY = 0; int spacing = getFirstNoteSpacing(layout); int tmpX = spacing; for (int i = 0; i < countBeats(); i++) { TGBeatImpl beat = (TGBeatImpl) getBeat(i); beat.resetEffectsSpacing(layout); if(this.compactMode){ beat.setPosX(tmpX); tmpX += beat.getMinimumWidth(); } else{ int quarterWidth = getMaxQuarterSpacing(layout); int x1 = (spacing + TablatureUtil.getStartPosition(this, beat.getStart(), quarterWidth)); int minimumWidth = -1; for(int v = 0 ; v < beat.countVoices(); v ++){ TGVoiceImpl voice = beat.getVoiceImpl(v); if(!voice.isEmpty()){ int x2 = (spacing + TablatureUtil.getStartPosition(this, beat.getStart() + voice.getDuration().getTime(), quarterWidth)); int width = ( x2 - x1 ); if( minimumWidth < 0 || width < minimumWidth ){ minimumWidth = width; } voice.setWidth( width ); } } beat.setPosX( x1 ); beat.setWidth( minimumWidth ); } for(int v = 0 ; v < beat.countVoices(); v ++){ TGVoiceImpl voice = beat.getVoiceImpl(v); if(!voice.isEmpty()){ Iterator notes = voice.getNotes().iterator(); while(notes.hasNext()){ TGNoteImpl note = (TGNoteImpl)notes.next(); beat.updateEffectsSpacing(layout, note.getEffect()); note.update(layout); } voice.update(layout); if(!this.division && !voice.getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){ this.division = true; } if( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 || (voice.isRestVoice() && !voice.isHiddenSilence()) ){ if( voice.getMaxY() > this.maxY ){ this.maxY = voice.getMaxY(); } if( voice.getMinY() < this.minY ){ this.minY = voice.getMinY(); } } } } int bsSize = beat.getEffectsSpacing(layout); if( bsSize > this.beatEffectSpacing ){ this.beatEffectSpacing = bsSize; } if(!this.chord && beat.isChordBeat()){ this.chord = true; } if(!this.text && beat.isTextBeat()){ this.text = true; } } if( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0){ for(int i = 0; i < this.voiceGroups.length; i ++){ Iterator groups = this.voiceGroups[i].iterator(); while (groups.hasNext()) { TGBeatGroup group = (TGBeatGroup)groups.next(); checkValue(layout,group.getMinNote(),group.getDirection()); checkValue(layout,group.getMaxNote(),group.getDirection()); } } } } public int getNoteAccidental(int noteValue){ if( noteValue >= 0 && noteValue < 128 ){ int key = getKeySignature(); int note = (noteValue % 12); int octave = (noteValue / 12); int accidentalValue = (key <= 7 ? SHARP : FLAT ); int [] accidentalNotes = (key <= 7 ? ACCIDENTAL_SHARP_NOTES : ACCIDENTAL_FLAT_NOTES ); boolean isAccidentalNote = ACCIDENTAL_NOTES[ note ]; boolean isAccidentalKey = KEY_SIGNATURES[key][accidentalNotes[ note ]] == accidentalValue; if(isAccidentalKey != isAccidentalNote && !this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){ this.registeredAccidentals[ octave ][ accidentalNotes[note ] ] = true; return (isAccidentalNote ? accidentalValue : NATURAL); } if(isAccidentalKey == isAccidentalNote && this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){ this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ] = false; return (isAccidentalNote ? accidentalValue : NATURAL); } } return 0; } private void checkValue(ViewLayout layout,TGNoteImpl note,int direction){ int y = note.getScorePosY(); float upOffset = TGBeatGroup.getUpOffset(layout); float downOffset = TGBeatGroup.getDownOffset(layout); if(direction == TGBeatGroup.DIRECTION_UP && y > this.maxY ){ this.maxY = y; }else if(direction == TGBeatGroup.DIRECTION_DOWN && (y + downOffset) > this.maxY ){ this.maxY = (int)(y + downOffset + 2); } if(direction == TGBeatGroup.DIRECTION_UP && (y - upOffset) < this.minY ){ this.minY = (int)(y - upOffset - 2); }else if(direction == TGBeatGroup.DIRECTION_DOWN && y < this.minY ){ this.minY = y; } } private void resetSpacing(){ this.text = false; this.chord = false; this.division = false; this.beatEffectSpacing = 0; } public void registerSpacing(ViewLayout layout,TGTrackSpacing ts){ if(layout.hasLoopMarker( this )){ ts.setSize(TGTrackSpacing.POSITION_LOOP_MARKER,layout.getLoopMarkerSpacing()); } if(this.hasMarker()){ ts.setSize(TGTrackSpacing.POSITION_MARKER,layout.getMarkerSpacing()); } if(this.chord){ ts.setSize(TGTrackSpacing.POSITION_CHORD,layout.getDefaultChordSpacing()); } if(this.text){ ts.setSize(TGTrackSpacing.POSITION_TEXT,layout.getTextSpacing()); } if(this.getHeader().getRepeatAlternative() > 0){ ts.setSize(TGTrackSpacing.POSITION_REPEAT_ENDING,layout.getRepeatEndingSpacing()); } if(this.division){ ts.setSize(TGTrackSpacing.POSITION_DIVISION_TYPE,layout.getDivisionTypeSpacing()); } if( this.beatEffectSpacing > 0 ){ ts.setSize(TGTrackSpacing.POSITION_EFFECTS, this.beatEffectSpacing ); } } private void orderBeats(TGSongManager manager){ manager.getMeasureManager().orderBeats(this); } public void paintMeasure(ViewLayout layout,TGPainter painter) { this.setOutOfBounds(false); boolean bufferEnabled = layout.isBufferEnabled(); if(shouldRepaintBuffer() || !bufferEnabled ){ TGPainter bufferPainter = painter; int x = (bufferEnabled ? 0 : getPosX()); int y = (bufferEnabled ? 0 : getPosY()); if(bufferEnabled){ getBuffer().createBuffer(getWidth(layout) + getSpacing(), getTs().getSize(),layout.getResources().getBackgroundColor()); bufferPainter = getBuffer().getPainter(); } layout.paintLines(getTrackImpl(),getTs(),bufferPainter,x,y, getWidth(layout) + getSpacing()); paintTimeSignature(layout,bufferPainter,x,y); paintClef(layout,bufferPainter,x,y); paintKeySignature(layout,bufferPainter,x,y); paintComponents(layout,bufferPainter,x,y); if(bufferEnabled){ getBuffer().disposePainter(); } setBufferCreated(true); } if(bufferEnabled){ painter.setBackground(layout.getResources().getBackgroundColor()); getBuffer().paintBuffer(painter,getPosX(),getPosY(),getTs().getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR)); } this.paintLoopMarker(layout, painter); this.paintMarker(layout, painter); this.paintTexts(layout,painter); this.paintTempo(layout,painter); this.paintTripletFeel(layout,painter); this.paintDivisions(layout,painter); this.paintRepeatEnding(layout,painter); this.paintPlayMode(layout,painter); } private boolean shouldRepaintBuffer(){ return (isDisposed() || !isBufferCreated()); } public void paintRepeatEnding(ViewLayout layout,TGPainter painter){ if(getHeader().getRepeatAlternative() > 0){ float scale = layout.getScale(); float x1 = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout)); float x2 = (getPosX() + getWidth(layout) + getSpacing()); float y1 = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_REPEAT_ENDING)); float y2 = (y1 + (layout.getRepeatEndingSpacing() * 0.75f )); String string = new String(); for(int i = 0; i < 8; i ++){ if((getHeader().getRepeatAlternative() & (1 << i)) != 0){ string += ((string.length() > 0)?(", ") + Integer.toString(i + 1):Integer.toString(i + 1)); } } layout.setRepeatEndingStyle(painter); painter.initPath(); painter.setAntialias(false); painter.moveTo(x1, y2); painter.lineTo(x1, y1); painter.lineTo(x2, y1); painter.closePath(); painter.drawString(string,Math.round( x1 + (5.0f * scale) ),Math.round( y1 + (2.0f * scale) )); } } /** * Pinta las notas */ public void paintComponents(ViewLayout layout,TGPainter painter, int fromX, int fromY) { Iterator it = getBeats().iterator(); while(it.hasNext()){ TGBeatImpl beat = (TGBeatImpl)it.next(); beat.paint(layout, painter, fromX + getHeaderImpl().getLeftSpacing(layout) ,fromY); } } /** * Pinta las divisiones del compas */ private void paintDivisions(ViewLayout layout,TGPainter painter) { int x1 = getPosX(); int x2 = getPosX() + getWidth(layout); int y1 = 0; int y2 = 0; int offsetY = 0; int style = layout.getStyle(); boolean addInfo = false; //-----SCORE ------------------------------------// if((style & ViewLayout.DISPLAY_SCORE) != 0 ){ y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); y2 = y1 + (layout.getScoreLineSpacing() * 4); addInfo = true; if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 && (layout.isFirstMeasure(this) || isFirstOfLine())){ offsetY = ( getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE)) - y2; } paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo ); } //-----TABLATURE ------------------------------------// if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){ y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE); y2 = y1 + ((getTrack().getStrings().size() - 1 ) * layout.getStringSpacing()); addInfo = ( (style & ViewLayout.DISPLAY_SCORE) == 0 ); offsetY = 0; paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo ); } } private void paintDivisions(ViewLayout layout,TGPainter painter,int x1, int y1, int x2, int y2, int offsetY, boolean addInfo) { float scale = layout.getScale(); int lineWidthSmall = 1; int lineWidthBig = Math.max(lineWidthSmall,Math.round(3f * scale)); //numero de compas if(addInfo){ String number = Integer.toString(this.getNumber()); layout.setMeasureNumberStyle(painter); painter.drawString(number,getPosX() + Math.round(scale),(y1 - painter.getStringExtent(number).y) - Math.round(scale)); } layout.setDivisionsStyle(painter,true); //principio if(this.isRepeatOpen() || layout.isFirstMeasure(this)){ painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL); painter.setAntialias(false); painter.setLineWidth(lineWidthSmall); painter.addRectangle( x1, y1, lineWidthBig, (y2 + offsetY) - y1); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.setLineWidth(lineWidthSmall); painter.moveTo(x1 + lineWidthBig + scale + lineWidthSmall, y1); painter.lineTo(x1 + lineWidthBig + scale + lineWidthSmall, (y2 + offsetY)); painter.closePath(); if(this.isRepeatOpen()){ int size = Math.max(1,Math.round(4f * scale)); float xMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale)); float yMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale)); painter.setLineWidth(lineWidthSmall); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2))); painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size); painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2))); painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size); painter.closePath(); } }else{ painter.initPath(); painter.setAntialias(false); painter.setLineWidth(lineWidthSmall); painter.moveTo(x1, y1); painter.lineTo(x1, (y2 + offsetY)); painter.closePath(); } //fin if(this.getRepeatClose() > 0 || layout.isLastMeasure(this)){ painter.initPath(); painter.setAntialias(false); painter.setLineWidth(lineWidthSmall); painter.moveTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y1); painter.lineTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y2); painter.closePath(); painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL); painter.setAntialias(false); painter.setLineWidth(lineWidthSmall); painter.addRectangle( (x2 + getSpacing()) - lineWidthBig, y1, lineWidthBig, y2 - y1); painter.closePath(); if(this.getRepeatClose() > 0){ int size = Math.max(1,Math.round(4f * scale)); float xMove = (((lineWidthBig + scale + lineWidthSmall) + (2f * scale)) + size); float yMove = ( (lineWidthBig + scale + lineWidthSmall) + (2f * scale) ); painter.setLineWidth(lineWidthSmall); painter.initPath(TGPainter.PATH_FILL); painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2))); painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size); painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2))); painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size); painter.closePath(); if(addInfo){ layout.setDivisionsStyle(painter,false); String repetitions = ("x" + this.getRepeatClose()); Point numberSize = painter.getStringExtent(repetitions); painter.drawString(repetitions,x2 - numberSize.x + getSpacing() - size,(y1 - numberSize.y) - Math.round(scale)); } } }else{ painter.initPath(); painter.setAntialias(false); painter.setLineWidth(lineWidthSmall); painter.moveTo(x2 + getSpacing(), y1); painter.lineTo(x2 + getSpacing(), y2); painter.closePath(); } painter.setLineWidth(lineWidthSmall); } /** * Pinta la Clave */ private void paintClef(ViewLayout layout,TGPainter painter,int fromX, int fromY) { //-----SCORE ------------------------------------// if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 && this.paintClef){ int x = fromX + Math.round( 14 * layout.getScale() ) ; int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); layout.setClefStyle(painter); painter.initPath(TGPainter.PATH_FILL); if(this.getClef() == TGMeasure.CLEF_TREBLE){ TGClefPainter.paintTreble(painter, x, y,layout.getScoreLineSpacing()); } else if(this.getClef() == TGMeasure.CLEF_BASS){ TGClefPainter.paintBass(painter, x, y,layout.getScoreLineSpacing()); } else if(this.getClef() == TGMeasure.CLEF_TENOR){ TGClefPainter.paintTenor(painter, x, y,layout.getScoreLineSpacing()); } else if(this.getClef() == TGMeasure.CLEF_ALTO){ TGClefPainter.paintAlto(painter, x, y,layout.getScoreLineSpacing()); } painter.closePath(); } } /** * Pinta la Armadura de Clave */ private void paintKeySignature(ViewLayout layout,TGPainter painter, int fromX, int fromY) { if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 && this.paintKeySignature){ float scale = layout.getScoreLineSpacing(); int x = fromX + getClefSpacing(layout) + 10; int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); int clefIndex = (this.getClef() - 1); int currentKey = this.getKeySignature(); int previousKey = (this.prevMeasure != null ? this.prevMeasure.getKeySignature() : 0); layout.setKeySignatureStyle(painter); //natural if(previousKey >= 1 && previousKey <= 7){ int naturalFrom = (currentKey >= 1 && currentKey <= 7) ? currentKey : 0; for(int i = naturalFrom; i < previousKey; i ++ ){ float offset = ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] ) - (scale / 2) ); painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintNatural(painter,x, (y + offset ), scale); painter.closePath(); x += (scale - (scale / 4)); } } else if(previousKey >= 8 && previousKey <= 14){ int naturalFrom = (currentKey >= 8 && currentKey <= 14) ? currentKey : 7; for(int i = naturalFrom; i < previousKey; i ++ ){ float offset = ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] ) - (scale / 2) ); painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintNatural(painter,x, (y + offset ), scale); painter.closePath(); x += (scale - (scale / 4)); } } //sharps if(currentKey >= 1 && currentKey <= 7){ for(int i = 0; i < currentKey; i ++ ){ float offset = ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] ) - (scale / 2) ); painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintSharp(painter,x, (y + offset ), scale); painter.closePath(); x += (scale - (scale / 4)); } } //flats else if(currentKey >= 8 && currentKey <= 14){ for(int i = 7; i < currentKey; i ++ ){ float offset = ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] ) - (scale / 2) ); painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintFlat(painter,x, (y + offset ), scale); painter.closePath(); x += (scale - (scale / 4)); } } } } private void paintTimeSignature(ViewLayout layout,TGPainter painter, int fromX, int fromY){ if(this.getHeaderImpl().shouldPaintTimeSignature()){ layout.setTimeSignatureStyle(painter); float scale = layout.getScale(); int style = layout.getStyle(); int leftSpacing = Math.round( 5.0f * scale ); int x = (getClefSpacing(layout) + getKeySignatureSpacing(layout) + getHeaderImpl().getLeftSpacing(layout) + leftSpacing); String numerator = Integer.toString(getTimeSignature().getNumerator()); String denominator = Integer.toString(getTimeSignature().getDenominator().getValue()); if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){ int y = getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); int y1 = (int)(y - (3f * scale)); int y2 = (int)(((y + (layout.getScoreLineSpacing() * 4)) - painter.getStringExtent(denominator).y) + (3f * scale)); painter.drawString(numerator,fromX + x,fromY + y1,true); painter.drawString(denominator,fromX + x,fromY + y2,true); }else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){ int y = getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE); int move = (int)((8f - getTrack().stringCount()) * scale); int y1 = (y - move); int y2 = ((y + getTrackImpl().getTabHeight()) - painter.getStringExtent(denominator).y) + move; painter.drawString(numerator,fromX + x,fromY + y1,true); painter.drawString(denominator,fromX + x,fromY + y2,true); } } } private void paintTempo(ViewLayout layout,TGPainter painter){ if(this.getHeaderImpl().shouldPaintTempo()){ float scale = 5f * layout.getScale(); int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout)); int y = getPosY(); int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing())); int style = layout.getStyle(); if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){ y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing ) ; }else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){ y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing ) ; } layout.setTempoStyle(painter, false); int imgX = x; int imgY = (y - (Math.round(scale * 3.5f ) + 2)); if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getTempoImage(),imgX , imgY ); } else { TGTempoPainter.paintTempo(painter, imgX, imgY, scale); } layout.setTempoStyle(painter, true); String value = (" = " + getTempo().getValue()); int fontX = x + (Math.round( (1.33f * scale) ) + 1 ); int fontY = Math.round(y - painter.getStringExtent( value ).y - (1.0f * layout.getScale())); painter.drawString(value , fontX, fontY, true); } } private void paintTripletFeel(ViewLayout layout,TGPainter painter){ if(this.getHeaderImpl().shouldPaintTripletFeel()){ float scale = (5f * layout.getScale()); int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getHeaderImpl().getTempoSpacing(layout)); int y = (getPosY()); int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing())); int style = layout.getStyle(); if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){ y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing ); }else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){ y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing ); } layout.setTripletFeelStyle(painter, true); String equal = (" = "); Point fontSize = painter.getStringExtent( equal ); int fontX = x + (Math.round( (1.33f * scale) + (1.5f * scale) )); int fontY = Math.round(y - fontSize.y - (1.0f * layout.getScale())); painter.drawString(equal, fontX , fontY, true); layout.setTripletFeelStyle(painter, false); int x1 = x; int x2 = x + (Math.round( (1.33f * scale) + (1.5f * scale) ) + fontSize.x); int y1 = y - (Math.round( (1.0f * scale) + (2.5f * scale) ) + 2); int y2 = y - (Math.round( (1.0f * scale) + (2.5f * scale) + (1.0f * scale)) + 2); if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE && this.prevMeasure != null){ int previous = this.prevMeasure.getTripletFeel(); if(previous == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){ if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getTripletFeel8(), x1, y2 ); painter.drawImage(layout.getResources().getTripletFeelNone8(),x2 , y1 ); } else{ TGTripletFeelPainter.paintTripletFeel8(painter, x1, y2, scale ); TGTripletFeelPainter.paintTripletFeelNone8(painter, x2 , y1, scale ); } } else if(previous == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){ if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getTripletFeel16(), x1, y2 ); painter.drawImage(layout.getResources().getTripletFeelNone16(),x2 , y1 ); } else{ TGTripletFeelPainter.paintTripletFeel16(painter, x1, y2, scale ); TGTripletFeelPainter.paintTripletFeelNone16(painter, x2 , y1, scale ); } } } else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){ if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getTripletFeelNone8(), x1, y1 ); painter.drawImage(layout.getResources().getTripletFeel8(),x2 , y2 ); } else{ TGTripletFeelPainter.paintTripletFeelNone8(painter, x1, y1, scale ); TGTripletFeelPainter.paintTripletFeel8(painter, x2 , y2, scale ); } } else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){ if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getTripletFeelNone16(), x1, y1 ); painter.drawImage(layout.getResources().getTripletFeel16(),x2 , y2 ); } else{ TGTripletFeelPainter.paintTripletFeelNone16(painter, x1, y1, scale ); TGTripletFeelPainter.paintTripletFeel16(painter, x2 , y2, scale ); } } } } private void paintLoopMarker(ViewLayout layout,TGPainter painter){ if( layout.hasLoopMarker( this ) ){ int size = Math.round( layout.getLoopMarkerSpacing() - (1f * layout.getScale())); MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode(); if( pm.getLoopSHeader() == getHeader().getNumber() ){ int x = (getPosX() + Math.round(size / 2f) ); int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER)); layout.setLoopSMarkerStyle(painter); paintLoopMarker(painter, x, y, size); } if( pm.getLoopEHeader() == getHeader().getNumber() ){ float x = (getPosX() + getWidth(layout) + getSpacing() - size ); float y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER)); layout.setLoopEMarkerStyle(painter); paintLoopMarker(painter, x, y, size); } } } private void paintLoopMarker(TGPainter painter, float x, float y, float size){ painter.initPath( TGPainter.PATH_FILL ); painter.addRectangle(x, y, size, size); painter.closePath(); } private void paintMarker(ViewLayout layout,TGPainter painter){ if( this.hasMarker() ){ int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout)); int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_MARKER)); layout.setMarkerStyle(painter,getMarkerColor()); painter.drawString(getMarker().getTitle(), x, y); } } private void paintTexts(ViewLayout layout,TGPainter painter){ Iterator it = getBeats().iterator(); while(it.hasNext()){ TGBeat beat = (TGBeat)it.next(); if( beat.isTextBeat() ){ TGTextImpl text = (TGTextImpl)beat.getText(); text.paint(layout, painter,(getPosX() + getHeaderImpl().getLeftSpacing(layout) ),getPosY()); } } } private void paintPlayMode(ViewLayout layout,TGPainter painter){ if(layout.isPlayModeEnabled() && isPlaying(layout)){ float scale = layout.getScale(); int width = getWidth(layout) + getSpacing(); int y1 = getPosY(); int y2 = getPosY(); int style = layout.getStyle(); if( (style & (ViewLayout.DISPLAY_SCORE | ViewLayout.DISPLAY_TABLATURE)) == (ViewLayout.DISPLAY_SCORE | ViewLayout.DISPLAY_TABLATURE) ){ y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing()); y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing()); }else if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){ y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing()); y2 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + (layout.getScoreLineSpacing() * 5)); } else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){ y1 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - layout.getStringSpacing()); y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing()); } layout.setMeasurePlayingStyle(painter); // Don't uncomment "lineStyle" until be sure SWT bug has fixed. // See bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=225725 //painter.setLineStyle(SWT.LINE_DASH); painter.setLineWidth(1); painter.initPath(); painter.setAntialias(false); painter.addRectangle(getPosX() + (5f * scale),y1,width - (10f * scale),(y2 - y1)); painter.closePath(); //painter.setLineStyle(SWT.LINE_SOLID); } } /** * Retorna true si se esta reproduciendo y la posicion del player esta en este compas. */ public boolean isPlaying(ViewLayout layout){ return (getTrackImpl().hasCaret(layout) && TuxGuitar.instance().getEditorCache().isPlaying(this)); } public int getBeatSpacing(TGBeat beat){ return (int)((beat.getStart() - getStart()) * getSpacing() / getLength()); } public boolean hasTrack(int number){ return (getTrack().getNumber() == number); } /** * Retorna el ancho del Compas */ public int getWidth(ViewLayout layout) { return ((layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) != 0 ?this.getHeaderImpl().getMaxWidth():this.width); } private int calculateKeySignatureSpacing(ViewLayout layout){ int spacing = 0; if(this.paintKeySignature){ if(this.getKeySignature() <= 7){ spacing += Math.round( ( 6f * layout.getScale() ) * this.getKeySignature() ) ; }else{ spacing += Math.round( ( 6f * layout.getScale() ) * (this.getKeySignature() - 7) ) ; } if(this.prevMeasure != null ){ if(this.prevMeasure.getKeySignature() <= 7){ spacing += Math.round( ( 6f * layout.getScale() ) * this.prevMeasure.getKeySignature() ) ; }else{ spacing += Math.round( ( 6f * layout.getScale() ) * (this.prevMeasure.getKeySignature() - 7) ) ; } } } return spacing; } public int getFirstNoteSpacing(ViewLayout layout){ return getHeaderImpl().getFirstNoteSpacing(layout,this); } public int getClefSpacing(ViewLayout layout){ return getHeaderImpl().getClefSpacing(layout, this); } public int getKeySignatureSpacing(ViewLayout layout){ return getHeaderImpl().getKeySignatureSpacing(layout, this); } public long getDivisionLength(){ return this.divisionLength; } public boolean isBufferCreated() { return this.bufferCreated; } public void setBufferCreated(boolean bufferCreated) { this.bufferCreated = bufferCreated; } /** * Retorna la posicion X dentro del compas */ public int getPosX() { return this.posX; } /** * Asigna la posicion X dentro del compas */ public void setPosX(int posX) { this.posX = posX; } /** * Retorna la posicion Y dentro del compas */ public int getPosY() { return this.posY; } /** * Asigna la posicion Y dentro del compas */ public void setPosY(int posY) { this.posY = posY; } /** * Retorna el spacing de negras */ private int getQuarterSpacing(){ return this.quarterSpacing; } /** * Retorna el spacing de negras */ private int getMaxQuarterSpacing(ViewLayout layout){ return (((layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) != 0)?getHeaderImpl().getMaxQuarterSpacing():this.quarterSpacing); } public TGMeasureHeaderImpl getHeaderImpl(){ return (TGMeasureHeaderImpl)super.getHeader(); } public int getSpacing() { return this.spacing; } public void setSpacing(int spacing) { if(spacing != this.spacing){ setBufferCreated(false); } this.spacing = spacing; } public boolean isOutOfBounds() { return this.outOfBounds; } public void setOutOfBounds(boolean outOfBounds) { this.outOfBounds = outOfBounds; } public boolean isFirstOfLine() { return this.firstOfLine; } public void setFirstOfLine(boolean firstOfLine) { this.firstOfLine = firstOfLine; } public TGTrackImpl getTrackImpl(){ return (TGTrackImpl)super.getTrack(); } public TGTrackSpacing getTs() { return this.ts; } public void setTs(TGTrackSpacing ts) { if(getTs() == null){ setBufferCreated(false); }else if(getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) != ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)){ setBufferCreated(false); }else if(getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) != ts.getPosition(TGTrackSpacing.POSITION_TABLATURE)){ setBufferCreated(false); }else if(getTs().getPosition(TGTrackSpacing.POSITION_EFFECTS) != ts.getPosition(TGTrackSpacing.POSITION_EFFECTS)){ setBufferCreated(false); } this.ts = ts; } public int getMaxY() { return this.maxY; } public int getMinY() { return this.minY; } public int getNotEmptyBeats(){ return this.notEmptyBeats; } public int getNotEmptyVoices(){ return this.notEmptyVoices; } public int getLyricBeatIndex() { return this.lyricBeatIndex; } public void setLyricBeatIndex(int lyricBeatIndex) { this.lyricBeatIndex = lyricBeatIndex; } public boolean isPaintClef() { return this.paintClef; } public boolean isPaintKeySignature() { return this.paintKeySignature; } public boolean isDisposed(){ return getBuffer().isDisposed(); } public TGMeasureBuffer getBuffer(){ if(this.buffer == null){ this.buffer = new TGMeasureBuffer(TuxGuitar.instance().getDisplay()); } return this.buffer; } public Color getMarkerColor(){ TGColor color = getMarker().getColor(); if(this.markerColor != null && !this.markerColor.isDisposed()){ RGB rgb = this.markerColor.getRGB(); if( rgb.red != color.getR() || rgb.green != color.getG() || rgb.blue != color.getB()){ this.disposeMarkerColor(); } } if(this.markerColor == null || this.markerColor.isDisposed()){ this.markerColor = new Color(TuxGuitar.instance().getDisplay(), color.getR(),color.getG(),color.getB()); } return this.markerColor; } public void disposeMarkerColor(){ if(this.markerColor != null && !this.markerColor.isDisposed()){ this.markerColor.dispose(); this.markerColor = null; } } public void dispose(){ new SyncThread( new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ getBuffer().dispose(); disposeMarkerColor(); Iterator it = getBeats().iterator(); while(it.hasNext()){ TGBeatImpl beat = (TGBeatImpl)it.next(); beat.dispose(); } } } } ).start(); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGNoteImpl.java0000644000175000017500000006103711273045225030013 0ustar julianjulian/* * Created on 29-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import java.util.Iterator; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.editors.tab.painters.TGKeySignaturePainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGNotePainter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGNoteEffect; import org.herac.tuxguitar.song.models.TGVoice; import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TGNoteImpl extends TGNote { private Rectangle noteOrientation; private int tabPosY; private int scorePosY; private int accidental; public TGNoteImpl(TGFactory factory) { super(factory); this.noteOrientation = new Rectangle(0,0,0,0); } /** * Actualiza los valores para dibujar */ public void update(ViewLayout layout) { this.accidental = getMeasureImpl().getNoteAccidental( getRealValue() ); this.tabPosY = ( (getString() * layout.getStringSpacing()) - layout.getStringSpacing() ); this.scorePosY = getVoiceImpl().getBeatGroup().getY1(layout,this,getMeasureImpl().getKeySignature(),getMeasureImpl().getClef()); } /** * Pinta la nota */ public void paint(ViewLayout layout,TGPainter painter, int fromX, int fromY) { int spacing = getBeatImpl().getSpacing(); paintScoreNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES),spacing); if(!layout.isPlayModeEnabled()){ paintOfflineEffects(layout, painter,fromX,fromY, spacing); } paintTablatureNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE),spacing); } private void paintOfflineEffects(ViewLayout layout,TGPainter painter,int fromX, int fromY, int spacing){ TGSpacing bs = getBeatImpl().getBs(); TGSpacing ts = getMeasureImpl().getTs(); TGNoteEffect effect = getEffect(); int tsY = (fromY + ts.getPosition(TGTrackSpacing.POSITION_EFFECTS)); int bsY = (tsY + (ts.getSize(TGTrackSpacing.POSITION_EFFECTS) - bs.getSize( ))); layout.setOfflineEffectStyle(painter); if(effect.isAccentuatedNote()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_ACCENTUATED_EFFECT )); paintAccentuated(layout, painter, x, y); } if(effect.isHeavyAccentuatedNote()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT )); paintHeavyAccentuated(layout, painter, x, y); } if(effect.isFadeIn()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_FADE_IN )); paintFadeIn(layout, painter, x, y); } if(effect.isHarmonic() && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HARMONIC_EFFEC )); String key = new String(); key = effect.getHarmonic().isNatural()?TGEffectHarmonic.KEY_NATURAL:key; key = effect.getHarmonic().isArtificial()?TGEffectHarmonic.KEY_ARTIFICIAL:key; key = effect.getHarmonic().isTapped()?TGEffectHarmonic.KEY_TAPPED:key; key = effect.getHarmonic().isPinch()?TGEffectHarmonic.KEY_PINCH:key; key = effect.getHarmonic().isSemi()?TGEffectHarmonic.KEY_SEMI:key; painter.drawString(key,x, y); } if(effect.isTapping()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TAPPING_EFFEC )); painter.drawString("T",x, y); } if(effect.isSlapping()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_SLAPPING_EFFEC )); painter.drawString("S",x, y); } if(effect.isPopping()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_POPPING_EFFEC )); painter.drawString("P",x, y); } if(effect.isPalmMute()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_PALM_MUTE_EFFEC )); painter.drawString("P.M",x, y); } if(effect.isVibrato()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_VIBRATO_EFFEC )); paintVibrato(layout, painter,x,y); } if(effect.isTrill()){ int x = fromX + getPosX() + spacing; int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TRILL_EFFEC )); paintTrill(layout, painter,x,y); } } /** * Pinta la nota en la tablatura */ public void paintTablatureNote(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing) { int style = layout.getStyle(); if((style & ViewLayout.DISPLAY_TABLATURE) != 0){ int stringSpacing = layout.getStringSpacing(); int x = fromX + getPosX() + spacing + 2; int y = fromY + getTabPosY(); this.noteOrientation.x = x; this.noteOrientation.y = y; this.noteOrientation.width = 1; this.noteOrientation.height = 1; layout.setTabNoteStyle(painter, (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout))); //-------------ligadura-------------------------------------- if (isTiedNote() && (style & ViewLayout.DISPLAY_SCORE) == 0) { float tX = 0; float tY = 0; float tWidth = 0; float tHeight = (stringSpacing * 3); TGNoteImpl noteForTie = getNoteForTie(); if (noteForTie != null) { tX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing()); tY = (fromY + noteForTie.getTabPosY() + stringSpacing); tWidth = (x - tX); }else{ Rectangle r = layout.getNoteOrientation(painter,x,y,this); tX = r.x - (stringSpacing * 2); tY = (fromY + getTabPosY() + stringSpacing); tWidth = (stringSpacing * 2); } painter.initPath(); painter.addArc(tX, (tY - tHeight ), tWidth, tHeight, 225,90); painter.closePath(); //-------------nota-------------------------------------- } else if(!isTiedNote()){ Rectangle r = layout.getNoteOrientation(painter,x,y,this); this.noteOrientation.x = r.x; this.noteOrientation.y = r.y; this.noteOrientation.width = r.width; this.noteOrientation.height = r.height; String visualNote = (getEffect().isDeadNote())?"X":Integer.toString(getValue()); visualNote = (getEffect().isGhostNote())?"(" + visualNote + ")":visualNote; painter.drawString(visualNote, this.noteOrientation.x, this.noteOrientation.y); } //-------------efectos-------------------------------------- if(! layout.isPlayModeEnabled() ){ paintEffects(layout,painter,fromX,fromY,spacing); if((style & ViewLayout.DISPLAY_SCORE) == 0){ int y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2)); int y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5)); //-------------tremolo picking-------------------------------------- if(getEffect().isTremoloPicking()){ layout.setTabEffectStyle(painter); painter.initPath(); int posy = (y1 + ((y2 - y1) / 2)); for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){ painter.moveTo(x - 3, posy - 1); painter.lineTo(x + 4,posy + 1); posy += 4; } painter.setLineWidth(2); painter.closePath(); painter.setLineWidth(1); } } } } } /** * Pinta la nota en la partitura */ private void paintScoreNote(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing) { if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){ float scale = layout.getScoreLineSpacing(); int direction = getVoiceImpl().getBeatGroup().getDirection(); int key = getMeasureImpl().getKeySignature(); int clef = getMeasureImpl().getClef(); int x = ( fromX + getPosX() + spacing ); int y1 = ( fromY + getScorePosY() ) ; //-------------foreground-------------------------------------- boolean playing = (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout)); layout.setScoreNoteStyle(painter,playing); //----------ligadura--------------------------------------- if (isTiedNote()) { TGNoteImpl noteForTie = getNoteForTie(); float tScale = (scale / 8.0f); float tX = x - (20.0f * tScale); float tY = y1 - (2.0f * tScale); float tWidth = (20.0f * tScale); float tHeight = (30.0f * tScale); if (noteForTie != null) { int tNoteX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing()); int tNoteY = (fromY + getScorePosY()); tX = tNoteX + (6.0f * tScale); tY = tNoteY - (3.0f * tScale); tWidth = (x - tNoteX) - (3.0f * tScale); tHeight = (35.0f * tScale); } painter.initPath(); painter.addArc(tX,tY, tWidth, tHeight, 45, 90); painter.closePath(); } //----------sostenido-------------------------------------- if(this.accidental == TGMeasureImpl.NATURAL){ painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintNatural(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale); painter.closePath(); } else if(this.accidental == TGMeasureImpl.SHARP){ painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintSharp(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale); painter.closePath(); } else if(this.accidental == TGMeasureImpl.FLAT){ painter.initPath(TGPainter.PATH_FILL); TGKeySignaturePainter.paintFlat(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale); painter.closePath(); } //----------fin sostenido-------------------------------------- if(getEffect().isHarmonic()){ if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getHarmonicNote(getVoice().getDuration().getValue(),playing),x,y1); }else{ boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER); painter.initPath((full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW)); TGNotePainter.paintHarmonic(painter,x,y1+1,(layout.getScoreLineSpacing() - 2) ); painter.closePath(); } }else{ if( layout.isBufferEnabled() ){ painter.drawImage(layout.getResources().getScoreNote(getVoice().getDuration().getValue(),playing),x,y1); }else{ boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER); painter.initPath((full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW)); TGNotePainter.paintNote(painter,x,y1+1, ((full ? layout.getScoreLineSpacing() + 1 : layout.getScoreLineSpacing() ) - 2) ); painter.closePath(); } } if(! layout.isPlayModeEnabled() ){ if(getEffect().isGrace()){ paintGrace(layout, painter,x ,y1); } //PUNTILLO y DOBLE PUNTILLO if (getVoice().getDuration().isDotted() || getVoice().getDuration().isDoubleDotted()) { getVoiceImpl().paintDot(layout, painter,( x + (12.0f * (scale / 8.0f) ) ), ( y1 + (layout.getScoreLineSpacing()/ 2)), (scale / 10.0f) ); } //dibujo el pie if(getVoice().getDuration().getValue() >= TGDuration.HALF){ layout.setScoreNoteFooterStyle(painter); int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0); int y2 = fromY + getVoiceImpl().getBeatGroup().getY2(layout,getPosX() + spacing,key,clef); //staccato if (getEffect().isStaccato()) { int size = 3; int sX = x + xMove; int sY = (y2 + (4 * ((direction == TGBeatGroup.DIRECTION_UP)?-1:1))); layout.setScoreEffectStyle(painter); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(sX - (size / 2),sY - (size / 2)); painter.addOval(sX - (size / 2),sY - (size / 2),size,size); painter.closePath(); } //tremolo picking if(getEffect().isTremoloPicking()){ layout.setScoreEffectStyle(painter); painter.initPath(); int tpY = fromY; if((direction == TGBeatGroup.DIRECTION_UP)){ tpY += (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4); }else{ tpY += (getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing() + 4); } for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){ painter.moveTo(x + xMove - 3, tpY + 1); painter.lineTo(x + xMove + 4,tpY - 1); tpY += 4; } painter.setLineWidth(2); painter.closePath(); painter.setLineWidth(1); } }else{ //staccato if (getEffect().isStaccato()) { int size = 3; int sX = x + (layout.getResources().getScoreNoteWidth() / 2); int sY = (fromY + getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing()) + 2; layout.setScoreEffectStyle(painter); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(sX - (size / 2),sY - (size / 2)); painter.addOval(sX - (size / 2),sY - (size / 2),size,size); painter.closePath(); } //tremolo picking if(getEffect().isTremoloPicking()){ layout.setScoreEffectStyle(painter); painter.initPath(); int tpX = (x + (layout.getResources().getScoreNoteWidth() / 2)); int tpY = fromY + (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4); for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){ painter.moveTo(tpX - 3, tpY + 1); painter.lineTo(tpX + 4,tpY - 1); tpY += 4; } painter.setLineWidth(2); painter.closePath(); painter.setLineWidth(1); } } } } } /** * Encuentra la nota a la que esta ligada */ private TGNoteImpl getNoteForTie() { for (int i = getMeasureImpl().countBeats() - 1; i >= 0; i--) { TGBeat beat = getMeasureImpl().getBeat(i); TGVoice voice = beat.getVoice( getVoice().getIndex() ); if (beat.getStart() < getBeatImpl().getStart() && !voice.isRestVoice()) { Iterator it = voice.getNotes().iterator(); while(it.hasNext()){ TGNoteImpl note = (TGNoteImpl)it.next(); if (note.getString() == getString()) { return note; } } } } return null; } /** * Pinta los efectos */ private void paintEffects(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing){ int x = fromX + getPosX() + spacing; int y = fromY + getTabPosY(); TGNoteEffect effect = getEffect(); if(effect.isGrace()){ layout.setTabGraceStyle(painter); String value = Integer.toString(effect.getGrace().getFret()); Point gracePoint = painter.getStringExtent(value); painter.drawString(value, (this.noteOrientation.x - gracePoint.x - 2), this.noteOrientation.y ); } if(effect.isBend()){ paintBend(layout, painter,(this.noteOrientation.x + this.noteOrientation.width), y); }else if(effect.isTremoloBar()){ paintTremoloBar(layout, painter,(this.noteOrientation.x + this.noteOrientation.width), y); }else if(effect.isSlide() || effect.isHammer()){ int nextFromX = fromX; TGNoteImpl nextNote = (TGNoteImpl)layout.getSongManager().getMeasureManager().getNextNote(getMeasureImpl(),getBeatImpl().getStart(),getVoice().getIndex(),getString()); if(effect.isSlide()){ paintSlide(layout, painter, nextNote, x, y, nextFromX); }else if(effect.isHammer()){ paintHammer(layout, painter, nextNote, x, y, nextFromX); } } } private void paintBend(ViewLayout layout,TGPainter painter,int fromX,int fromY){ float scale = layout.getScale(); float x = (fromX + (1.0f * scale)); float y = (fromY - (2.0f * scale)); layout.setTabEffectStyle(painter); painter.initPath(); painter.moveTo( x, y ); painter.lineTo( x + (1.0f * scale), y ); painter.cubicTo(x + (1.0f * scale), y, x + (3.0f * scale), y , x + (3.0f * scale), y - (2.0f * scale)); painter.lineTo( x + (3.0f * scale), y - (12.0f * scale)); painter.lineTo( x + (1.0f * scale), y - (10.0f * scale)); painter.moveTo( x + (3.0f * scale), y - (12.0f * scale)); painter.lineTo( x + (5.0f * scale), y - (10.0f * scale)); painter.closePath(); } private void paintTremoloBar(ViewLayout layout,TGPainter painter,int fromX,int fromY){ float scale = layout.getScale(); float x1 = fromX + (1.0f * scale); float x2 = x1 + (8.0f * scale); float y1 = fromY; float y2 = y1 + (9.0f * scale); layout.setTabEffectStyle(painter); painter.initPath(); painter.moveTo(x1,y1); painter.lineTo(x1 + ( (x2 - x1) / 2 ),y2); painter.lineTo(x2,y1); painter.closePath(); } private void paintSlide(ViewLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){ float xScale = layout.getScale(); float yScale = (layout.getStringSpacing() / 10.0f); float yMove = (3.0f * yScale); float x = fromX; float y = fromY; layout.setTabEffectStyle(painter); if(nextNote != null){ float nextX = nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing(); float nextY = y; if(nextNote.getValue() < getValue()){ y -= yMove; nextY += yMove; }else if(nextNote.getValue() > getValue()){ y += yMove; nextY -= yMove; }else{ y -= yMove; nextY -= yMove; } painter.initPath(); painter.moveTo(x + (6.0f * xScale),y); painter.lineTo(nextX - (3.0f * xScale),nextY); painter.closePath(); }else{ painter.initPath(); painter.moveTo(x + (6.0f * xScale),y - yMove); painter.lineTo(x + (17.0f * xScale),y - yMove); painter.closePath(); } } private void paintHammer(ViewLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){ float xScale = layout.getScale(); float yScale = (layout.getStringSpacing() / 10.0f); float x = (fromX + (7.0f * xScale)); float y = (fromY - (5.0f * yScale)); float width = (nextNote != null)?( (nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing()) - (4.0f * xScale) - x ):(10.0f * xScale); float height = (15.0f * yScale); layout.setTabEffectStyle(painter); painter.initPath(); painter.addArc(x,y, width, height, 45,90); painter.closePath(); } private void paintGrace(ViewLayout layout, TGPainter painter,int fromX,int fromY){ float scale = ( layout.getScoreLineSpacing() / 2.25f ); float x = fromX - (2f * scale); float y = fromY + (scale / 3); layout.setScoreEffectStyle(painter); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintFooter(painter,x, y , -1 , scale); painter.closePath(); painter.initPath(); painter.moveTo(x, y - (2f * scale)); painter.lineTo(x, y + (2f * scale) - (scale / 4f)); painter.closePath(); painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x - scale*1.33f, y + scale + (scale / 4f), scale); painter.closePath(); painter.initPath(); painter.moveTo(x - scale, y ); painter.lineTo(x + scale, y - scale); painter.closePath(); } private void paintVibrato(ViewLayout layout, TGPainter painter,int fromX,int fromY){ float scale = layout.getScale(); float x = fromX; float y = fromY + (2.0f * scale); float width = ( getVoiceImpl().getWidth() - (2.0f * scale) ); int loops = (int)(width / (6.0f * scale) ); if(loops > 0 ){ layout.setTabEffectStyle(painter); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(( x + ((2.0f) * scale) ),( y + (1.0f * scale) )); for( int i = 0; i < loops ; i ++ ){ x = (fromX + ( (6.0f * scale) * i ) ); painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) )); painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) )); painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) )); } painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) )); painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) )); for( int i = (loops - 1); i >= 0 ; i -- ){ x = (fromX + ( (6.0f * scale) * i ) ); painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) )); painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) )); painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) )); painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) )); } painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) )); painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) )); painter.closePath(); } } private void paintTrill(ViewLayout layout, TGPainter painter,int fromX,int fromY){ String string = "Tr"; Point stringSize = painter.getStringExtent( string ); float scale = layout.getScale(); float x = fromX + stringSize.x; float y = fromY + ( (stringSize.y - (5.0f * scale)) / 2.0f ); float width = ( getVoiceImpl().getWidth() - stringSize.x - (2.0f * scale) ); int loops = (int)(width / (6.0f * scale) ); if(loops > 0 ){ painter.drawString(string, fromX, fromY); layout.setTabEffectStyle(painter); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(( x + (2.0f * scale) ),( y + (1.0f * scale) )); for( int i = 0; i < loops ; i ++ ){ x = (fromX + stringSize.x + ( (6.0f * scale) * i ) ); painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) )); painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) )); painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) )); } painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) )); painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) )); for( int i = (loops - 1); i >= 0 ; i -- ){ x = (fromX + stringSize.x + ( (6.0f * scale) * i ) ); painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) )); painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) )); painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) )); painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) )); } painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) )); painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) )); painter.closePath(); } } private void paintFadeIn(ViewLayout layout, TGPainter painter,int fromX,int fromY){ float scale = layout.getScale(); float x = fromX; float y = fromY + (4.0f * scale ); float width = getVoiceImpl().getWidth(); painter.initPath(); painter.moveTo ( x , y ); painter.cubicTo( x , y , x + width, y, x + width, y - (4.0f * scale )); painter.moveTo ( x , y ); painter.cubicTo( x , y , x + width, y, x + width, y + (4.0f * scale )); painter.closePath(); } private void paintAccentuated(ViewLayout layout, TGPainter painter,int fromX,int fromY){ float scale = layout.getScale(); float x = fromX; float y = fromY + (2f * scale ); painter.initPath(); painter.moveTo( x , y ); painter.lineTo( x + (6.0f * scale ) , y + (2.5f * scale )); painter.lineTo( x , y + (5.0f * scale )); painter.closePath(); } private void paintHeavyAccentuated(ViewLayout layout, TGPainter painter,int fromX,int fromY){ float scale = layout.getScale(); float x = fromX; float y = fromY; painter.initPath(); painter.moveTo( x , y + (5.0f * scale ) ); painter.lineTo( x + (3.0f * scale ) , y + (1.0f * scale )); painter.lineTo( x + (6.0f * scale ) , y + (5.0f * scale ) ); painter.closePath(); } public int getRealValue(){ return (getValue() + getMeasureImpl().getTrack().getString(getString()).getValue()); } public int getScorePosY() { return this.scorePosY; } public int getTabPosY() { return this.tabPosY; } public TGMeasureImpl getMeasureImpl(){ return getBeatImpl().getMeasureImpl(); } public int getPaintPosition(int index){ return getMeasureImpl().getTs().getPosition(index); } public TGBeatImpl getBeatImpl() { return getVoiceImpl().getBeatImpl(); } public TGVoiceImpl getVoiceImpl() { return (TGVoiceImpl)super.getVoice(); } public int getPosX() { return getBeatImpl().getPosX(); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGResources.java0000644000175000017500000003524411273045225030237 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Resource; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.editors.tab.painters.TGNotePainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGTempoPainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGTripletFeelPainter; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.util.ImageUtils; import org.herac.tuxguitar.song.models.TGDuration; public class TGResources { private static final int SCORE_NOTE_EMPTY_NORMAL_MODE = 0; private static final int SCORE_NOTE_EMPTY_PLAY_MODE = 1; private static final int SCORE_NOTE_FULL_NORMAL_MODE = 2; private static final int SCORE_NOTE_FULL_PLAY_MODE = 3; private ViewLayout layout; private List resources; private Font defaultFont; private Font noteFont; private Font timeSignatureFont; private Font lyricFont; private Font textFont; private Font markerFont; private Font graceFont; private Font chordFont; private Font chordFretFont; private Font printerDefaultFont; private Font printerNoteFont; private Font printerTimeSignatureFont; private Font printerLyricFont; private Font printerTextFont; private Font printerGraceFont; private Font printerChordFont; private Color backgroundColor; private Color lineColor; private Color scoreNoteColor; private Color tabNoteColor; private Color playNoteColor; private Color colorWhite; private Color colorBlack; private Color colorRed; private Color caretColor1; private Color caretColor2; private Color loopSMarkerColor; private Color loopEMarkerColor; private Image[] scoreNotes; private Image[] harmonicNotes; private Image tempoImage; private Image tripletFeel8; private Image tripletFeelNone8; private Image tripletFeel16; private Image tripletFeelNone16; private int scoreNoteWidth; public TGResources(ViewLayout layout){ this.layout = layout; this.resources = new ArrayList(); } public void load(){ this.dispose(); this.initFonts(); this.initColors(); this.initImages(); } public ViewLayout getLayout(){ return this.layout; } public Font getDefaultFont() { return this.defaultFont; } public Font getNoteFont() { return this.noteFont; } public Font getTimeSignatureFont() { return this.timeSignatureFont; } public Font getLyricFont(){ return this.lyricFont; } public Font getTextFont(){ return this.textFont; } public Font getMarkerFont(){ return this.markerFont; } public Font getChordFont(){ return this.chordFont; } public Font getChordFretFont(){ return this.chordFretFont; } public Font getGraceFont() { return this.graceFont; } public Font getPrinterDefaultFont() { return this.printerDefaultFont; } public Font getPrinterNoteFont() { return this.printerNoteFont; } public Font getPrinterTimeSignatureFont() { return this.printerTimeSignatureFont; } public Font getPrinterLyricFont() { return this.printerLyricFont; } public Font getPrinterTextFont() { return this.printerTextFont; } public Font getPrinterGraceFont() { return this.printerGraceFont; } public Font getPrinterChordFont() { return this.printerChordFont; } public Color getBackgroundColor() { return this.backgroundColor; } public Color getLineColor() { return this.lineColor; } public Color getPlayNoteColor() { return this.playNoteColor; } public Color getScoreNoteColor() { return this.scoreNoteColor; } public Color getTabNoteColor() { return this.tabNoteColor; } public Color getColorWhite() { return this.colorWhite; } public Color getColorBlack() { return this.colorBlack; } public Color getColorRed() { return this.colorRed; } public Color getCaretColor1() { return this.caretColor1; } public Color getCaretColor2() { return this.caretColor2; } public Color getLoopSMarkerColor() { return this.loopSMarkerColor; } public Color getLoopEMarkerColor() { return this.loopEMarkerColor; } public Image getTempoImage() { return this.tempoImage; } public Image getTripletFeel8(){ return this.tripletFeel8; } public Image getTripletFeelNone8(){ return this.tripletFeelNone8; } public Image getTripletFeel16(){ return this.tripletFeel16; } public Image getTripletFeelNone16(){ return this.tripletFeelNone16; } public Image getScoreNote(int value,boolean playing) { int index = 0; index += ((playing)?1:0); index += ((value >= TGDuration.QUARTER)?2:0); return this.scoreNotes[index]; } public Image getHarmonicNote(int value,boolean playing) { int index = 0; index += ((playing)?1:0); index += ((value >= TGDuration.QUARTER)?2:0); return this.harmonicNotes[index]; } public int getScoreNoteWidth(){ return this.scoreNoteWidth; } private void initFonts(){ float scale = this.layout.getFontScale() ; this.defaultFont = getFont(TGConfigKeys.FONT_DEFAULT, scale); this.noteFont = getFont(TGConfigKeys.FONT_NOTE, scale); this.timeSignatureFont = getFont(TGConfigKeys.FONT_TIME_SIGNATURE, scale); this.lyricFont = getFont(TGConfigKeys.FONT_LYRIC, scale); this.textFont = getFont(TGConfigKeys.FONT_TEXT, scale); this.markerFont = getFont(TGConfigKeys.FONT_MARKER, scale); this.graceFont = getFont(TGConfigKeys.FONT_GRACE, scale); this.chordFont = getFont(TGConfigKeys.FONT_CHORD, scale); this.chordFretFont = getFont(TGConfigKeys.FONT_CHORD_FRET, scale); this.printerDefaultFont = getFont(TGConfigKeys.FONT_PRINTER_DEFAULT, scale); this.printerNoteFont = getFont(TGConfigKeys.FONT_PRINTER_NOTE, scale); this.printerTimeSignatureFont = getFont(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE, scale); this.printerLyricFont = getFont(TGConfigKeys.FONT_PRINTER_LYRIC, scale); this.printerTextFont = getFont(TGConfigKeys.FONT_PRINTER_TEXT, scale); this.printerGraceFont = getFont(TGConfigKeys.FONT_PRINTER_GRACE, scale); this.printerChordFont = getFont(TGConfigKeys.FONT_PRINTER_CHORD, scale); } private void initColors(){ this.backgroundColor = getColor(TGConfigKeys.COLOR_BACKGROUND); this.lineColor = getColor(TGConfigKeys.COLOR_LINE); this.scoreNoteColor = getColor(TGConfigKeys.COLOR_SCORE_NOTE); this.tabNoteColor = getColor(TGConfigKeys.COLOR_TAB_NOTE); this.playNoteColor = getColor(TGConfigKeys.COLOR_PLAY_NOTE); this.caretColor1 = getColor(TGConfigKeys.COLOR_CARET_1); this.caretColor2 = getColor(TGConfigKeys.COLOR_CARET_2); this.loopSMarkerColor = getColor(TGConfigKeys.COLOR_LOOP_S_MARKER); this.loopEMarkerColor = getColor(TGConfigKeys.COLOR_LOOP_E_MARKER); // Static colors this.colorWhite = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_WHITE); this.colorBlack = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_BLACK); this.colorRed = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_RED); } private void initImages(){ this.scoreNotes = new Image[4]; this.scoreNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),false); this.scoreNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),false); this.scoreNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),true); this.scoreNotes[SCORE_NOTE_FULL_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),true); this.harmonicNotes = new Image[4]; this.harmonicNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),false); this.harmonicNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),false); this.harmonicNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),true); this.harmonicNotes[SCORE_NOTE_FULL_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),true); this.tempoImage = getTempoImage(this.getColorBlack()); this.tripletFeel8 = getTripletFeel8(this.getColorBlack()); this.tripletFeelNone8 = getTripletFeelNone8(this.getColorBlack()); this.tripletFeel16 = getTripletFeel16(this.getColorBlack()); this.tripletFeelNone16 = getTripletFeelNone16(this.getColorBlack()); } private Font getFont(String key, float scale){ FontData data = TuxGuitar.instance().getConfig().getFontDataConfigValue(key); if(data == null){ data = new FontData(); } float height = ( data.getHeight() * scale ); data.setHeight( ( height > 1 ? Math.round(height) : 1 ) ); Font font = new Font(TuxGuitar.instance().getDisplay(),data); this.resources.add( font ); return font; } private Color getColor(String key){ RGB rgb = TuxGuitar.instance().getConfig().getRGBConfigValue(key); if(rgb == null){ rgb = new RGB(0,0,0); } Color color = new Color(TuxGuitar.instance().getDisplay(),rgb); this.resources.add( color ); return color; } private Image getScoreNoteImage(Color color,boolean full) { float scale = (full ? getLayout().getScoreLineSpacing() + 1 : getLayout().getScoreLineSpacing() ) - 2; int width = Math.round(scale * 1.33f); int height = Math.round(scale * 1.0f); Image image = getImage(width + 1, height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground(color); painter.setForeground(color); painter.initPath( (full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW) ); TGNotePainter.paintNote(painter,0,1, scale ); painter.closePath(); painter.dispose(); this.scoreNoteWidth = width; return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getHarmonicImage(Color color,boolean full) { int size = getLayout().getScoreLineSpacing(); int x = 0; int y = 1; int width = getScoreNoteWidth() - 1; int height = size - 2; Image image = getImage(x + width + 2,y + height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setForeground(color); painter.setBackground(color); painter.initPath( ( full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW ) ); TGNotePainter.paintHarmonic(painter, x, y, height); painter.closePath(); painter.dispose(); return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getTempoImage(Color color) { float scale = 5f * getLayout().getScale(); int width = Math.round(scale * 1.33f); int height = Math.round(scale * (1.0f + 2.5f)); Image image = getImage(width + 1, height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground(color); painter.setForeground(color); TGTempoPainter.paintTempo(painter,0,0, scale); painter.dispose(); return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getTripletFeelNone8(Color color) { float scale = 5f * getLayout().getScale(); float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); float ovalHeight = (1.0f * scale); int width = Math.round( ovalWidth + horizontalSpacing ); int height = Math.round( ovalHeight + verticalSpacing ); Image image = getImage(width + 1, height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground(color); painter.setForeground(color); TGTripletFeelPainter.paintTripletFeelNone8(painter,0,0, scale); painter.dispose(); return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getTripletFeel8(Color color) { float scale = 5f * getLayout().getScale(); float topSpacing = (1.0f * scale); float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); float ovalHeight = (1.0f * scale); int width = Math.round( (ovalWidth * 2f) + horizontalSpacing ); int height = Math.round((topSpacing + ovalHeight + verticalSpacing)); Image image = getImage(width + 1, height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground(color); painter.setForeground(color); TGTripletFeelPainter.paintTripletFeel8(painter,0,0, scale); painter.dispose(); return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getTripletFeelNone16(Color color) { float scale = 5f * getLayout().getScale(); float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); float ovalHeight = (1.0f * scale); int width = Math.round( ovalWidth + horizontalSpacing ); int height = Math.round( ovalHeight + verticalSpacing ); Image image = getImage(width + 1, height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground(color); painter.setForeground(color); TGTripletFeelPainter.paintTripletFeelNone16(painter,0,0, scale); painter.dispose(); return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getTripletFeel16(Color color) { float scale = 5f * getLayout().getScale(); float topSpacing = (1.0f * scale); float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); float ovalHeight = (1.0f * scale); int width = Math.round( (ovalWidth * 2f) + horizontalSpacing ); int height = Math.round( topSpacing + ovalHeight + verticalSpacing ); Image image = getImage(width + 1, height + 2); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground(color); painter.setForeground(color); TGTripletFeelPainter.paintTripletFeel16(painter,0,0, scale); painter.dispose(); return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB()); } private Image getImage(int width, int height){ Image image = new Image(getLayout().getTablature().getDisplay(),width, height); TGPainter painter = new TGPainter(new GC(image)); painter.setBackground( getBackgroundColor()); painter.initPath(TGPainter.PATH_FILL); painter.addRectangle(0,0,width, height); painter.closePath(); painter.dispose(); return image; } private Image getImageMask(Image src,RGB alpha,RGB none){ ImageData srcData = src.getImageData(); ImageData maskData = ImageUtils.applyMask(srcData, alpha , none); src.dispose(); Image image = new Image(getLayout().getTablature().getDisplay(),srcData,maskData); this.resources.add(image); return image; } public void dispose(){ Iterator it = this.resources.iterator(); while( it.hasNext() ){ Resource resource = (Resource)it.next(); resource.dispose(); } this.resources.clear(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGSpacing.java0000644000175000017500000000250511273045225027643 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; public abstract class TGSpacing { public static final int SCORE = 0x01; public static final int TABLATURE = 0x02; private int flags; private int[] spacing; private int[][] positions; public TGSpacing(ViewLayout layout, int[][] positions, int len){ this.flags = 0; this.flags |= ((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ? SCORE : 0 ); this.flags |= ((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 ? TABLATURE : 0 ); this.positions = positions; this.spacing = new int[len]; } public void clear(){ for(int i = 0; i < this.spacing.length; i ++){ this.spacing[i] = 0; } } public void setSize(int index,int size){ if( size > this.spacing[ this.positions [this.flags -1] [index] ] ){ this.spacing[ this.positions [this.flags -1] [index] ] = size; } } public int getSize(int index){ return this.spacing[ this.positions [this.flags -1] [index] ]; } public int getSize(){ int spacing = 0; for(int i = 0;i < this.spacing.length; i ++){ spacing += this.spacing[i]; } return spacing; } public int getPosition(int index){ int spacing = 0; for(int i = 0;i < this.positions[this.flags -1][index]; i ++){ spacing += this.spacing[i]; } return spacing; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTextImpl.java0000644000175000017500000000116211273045225030023 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.models.TGText; public class TGTextImpl extends TGText{ public void paint(ViewLayout layout,TGPainter painter,int fromX, int fromY){ TGBeatImpl beat = (TGBeatImpl)getBeat(); TGMeasureImpl measure = beat.getMeasureImpl(); int x = fromX + beat.getSpacing() + beat.getPosX(); int y = fromY + measure.getTs().getPosition(TGTrackSpacing.POSITION_TEXT); layout.setTextStyle(painter); painter.drawString(getValue(), x, y); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackImpl.java0000644000175000017500000000375311273045225030153 0ustar julianjulian/* * Created on 29-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import java.util.Iterator; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TGTrackImpl extends TGTrack{ private int tabHeight; private int scoreHeight; public TGTrackImpl(TGFactory factory) { super(factory); } public void update(ViewLayout layout){ this.calculateTabHeight(layout); this.calculateScoreHeight(layout); } /** * Calcula el el ancho de la tablatura */ public void calculateTabHeight(ViewLayout layout) { this.tabHeight = ((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 ?((stringCount() - 1) * layout.getStringSpacing()):0); } /** * Calcula el el ancho de la partitura */ public void calculateScoreHeight(ViewLayout layout) { this.scoreHeight = ((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ?(layout.getScoreLineSpacing() * 4):0); } public boolean hasCaret(ViewLayout layout){ return (this.equals(layout.getTablature().getCaret().getTrack())); } public int getTabHeight() { return this.tabHeight; } public int getScoreHeight() { return this.scoreHeight; } public void setTabHeight(int tabHeight) { this.tabHeight = tabHeight; } public void clear(){ Iterator measures = getMeasures(); while(measures.hasNext()){ TGMeasureImpl measure = (TGMeasureImpl)measures.next(); if(!measure.isDisposed()){ measure.dispose(); } } super.clear(); } public void removeMeasure(int index){ TGMeasureImpl measure = (TGMeasureImpl)getMeasure(index); if(!measure.isDisposed()){ measure.dispose(); } super.removeMeasure(index); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackSpacing.java0000644000175000017500000000530611273045225030632 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; public class TGTrackSpacing extends TGSpacing { /*** POSITIONS ARRAY INDICES ***/ public static final int POSITION_TOP = 0; public static final int POSITION_LOOP_MARKER = 1; public static final int POSITION_MARKER = 2; public static final int POSITION_TEXT = 3; public static final int POSITION_BUFFER_SEPARATOR = 4; public static final int POSITION_REPEAT_ENDING = 5; public static final int POSITION_CHORD = 6; public static final int POSITION_SCORE_UP_LINES = 7; public static final int POSITION_SCORE_MIDDLE_LINES = 8; public static final int POSITION_SCORE_DOWN_LINES = 9; public static final int POSITION_DIVISION_TYPE = 10; public static final int POSITION_EFFECTS = 11; public static final int POSITION_TABLATURE_TOP_SEPARATOR = 12; public static final int POSITION_TABLATURE = 13; public static final int POSITION_LYRIC = 14; public static final int POSITION_BOTTOM = 15; private static final int[][] POSITIONS = new int[][]{ /** SCORE **/ new int[]{ 0, //POSITION_TOP 1, //POSITION_LOOP_MARKER 2, //POSITION_MARKER 3, //POSITION_TEXT 4, //POSITION_BUFFER_SEPARATOR 5, //POSITION_REPEAT_ENDING 6, //POSITION_CHORD 8, //POSITION_SCORE_UP_LINES 9, //POSITION_SCORE_MIDDLE_LINES 10, //POSITION_SCORE_DOWN_LINES 11, //POSITION_DIVISION_TYPE 7, //POSITION_EFFECTS 12, //POSITION_TABLATURE_TOP_SEPARATOR 13, //POSITION_TABLATURE 14, //POSITION_LYRIC 15, //POSITION_BOTTOM }, /** TABLATURE **/ new int[]{ 0, //POSITION_TOP 1, //POSITION_LOOP_MARKER 2, //POSITION_MARKER 3, //POSITION_TEXT 4, //POSITION_BUFFER_SEPARATOR 5, //POSITION_REPEAT_ENDING 6, //POSITION_CHORD 13, //POSITION_SCORE_UP_LINES 14, //POSITION_SCORE_MIDDLE_LINES 15, //POSITION_SCORE_DOWN_LINES 10, //POSITION_DIVISION_TYPE 7, //POSITION_EFFECTS 8, //POSITION_TABLATURE_TOP_SEPARATOR 9, //POSITION_TABLATURE 11, //POSITION_LYRIC 12, //POSITION_BOTTOM }, /** SCORE | TABLATURE **/ new int[]{ 0, //POSITION_TOP 1, //POSITION_LOOP_MARKER 2, //POSITION_MARKER 3, //POSITION_TEXT 4, //POSITION_BUFFER_SEPARATOR 5, //POSITION_REPEAT_ENDING 6, //POSITION_CHORD 7, //POSITION_SCORE_UP_LINES 8, //POSITION_SCORE_MIDDLE_LINES 9, //POSITION_SCORE_DOWN_LINES 10, //POSITION_DIVISION_TYPE 11, //POSITION_EFFECTS 12, //POSITION_TABLATURE_TOP_SEPARATOR 13, //POSITION_TABLATURE 14, //POSITION_LYRIC 15, //POSITION_BOTTOM }, }; public TGTrackSpacing(ViewLayout layout){ super( layout , POSITIONS , 16); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGVoiceImpl.java0000644000175000017500000005303011273045225030145 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab; import java.util.Iterator; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.editors.tab.painters.TGNotePainter; import org.herac.tuxguitar.gui.editors.tab.painters.TGSilencePainter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGVoice; public class TGVoiceImpl extends TGVoice{ /** * desviacion a la izquierda */ public static final int JOINED_TYPE_NONE_LEFT = 1; /** * desviacion a la derecha */ public static final int JOINED_TYPE_NONE_RIGHT = 2; /** * Union a la izquierda */ public static final int JOINED_TYPE_LEFT = 3; /** * Union a la derecha */ public static final int JOINED_TYPE_RIGHT = 4; private int width; private TGNoteImpl maxNote; private TGNoteImpl minNote; private boolean[] usedStrings; private int joinedType; private boolean joinedGreaterThanQuarter; private TGVoiceImpl join1; private TGVoiceImpl join2; private TGVoiceImpl previous; private TGVoiceImpl next; private TGBeatGroup group; private boolean hiddenSilence; private int maxY; private int minY; private float silenceY; private float silenceHeight; private int maxString; private int minString; public TGVoiceImpl(TGFactory factory,int index){ super(factory, index); } public int getPosX() { return this.getBeatImpl().getPosX(); } public int getWidth() { return this.width; } public void setWidth(int width) { this.width = width; } public TGNoteImpl getMinNote(){ return this.minNote; } public TGNoteImpl getMaxNote(){ return this.maxNote; } public TGBeatImpl getBeatImpl() { return (TGBeatImpl)getBeat(); } public TGMeasureImpl getMeasureImpl() { return (TGMeasureImpl)getBeat().getMeasure(); } public boolean[] getUsedStrings() { if(this.usedStrings == null){ this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()]; } return this.usedStrings; } public TGVoiceImpl getJoin1() { return this.join1; } public void setJoin1(TGVoiceImpl join1) { this.join1 = join1; } public TGVoiceImpl getJoin2() { return this.join2; } public void setJoin2(TGVoiceImpl join2) { this.join2 = join2; } public boolean isJoinedGreaterThanQuarter() { return this.joinedGreaterThanQuarter; } public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) { this.joinedGreaterThanQuarter = joinedGreaterThanQuarter; } public int getJoinedType() { return this.joinedType; } public void setJoinedType(int joinedType) { this.joinedType = joinedType; } public void setPreviousBeat(TGVoiceImpl previous){ this.previous = previous; } public void setNextBeat(TGVoiceImpl next){ this.next = next; } public TGBeatGroup getBeatGroup() { return this.group; } public void setBeatGroup(TGBeatGroup group) { this.group = group; } public boolean isPlaying(ViewLayout layout){ return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getBeat().getMeasure(),getBeat())); } public void reset(){ this.maxNote = null; this.minNote = null; this.hiddenSilence = false; this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()]; this.maxString = 1; this.minString = getBeat().getMeasure().getTrack().stringCount(); this.group = null; this.previous = null; this.next = null; } public void check(TGNoteImpl note){ int value = note.getRealValue(); if(this.maxNote == null || value > this.maxNote.getRealValue()){ this.maxNote = note; } if(this.minNote == null || value < this.minNote.getRealValue()){ this.minNote = note; } this.getUsedStrings(); this.usedStrings[note.getString() - 1] = true; if( note.getString() > this.maxString ){ this.maxString = note.getString(); } if( note.getString() < this.minString ){ this.minString = note.getString(); } } public void update(ViewLayout layout) { this.minY = 0; this.maxY = 0; if(isRestVoice()){ this.updateSilenceSpacing(layout); } else{ this.updateNoteVoice(layout); } } public void updateNoteVoice(ViewLayout layout) { this.joinedType = JOINED_TYPE_NONE_RIGHT; this.joinedGreaterThanQuarter = false; this.setJoin1(this); this.setJoin2(this); boolean noteJoined = false; boolean withPrev = false; //trato de unir con el componente anterior if (this.previous != null && !this.previous.isRestVoice()) { if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.previous)) { withPrev = true; if (this.previous.getDuration().getValue() >= getDuration().getValue()) { this.setJoin1(this.previous); this.setJoin2(this); this.joinedType = JOINED_TYPE_LEFT; noteJoined = true; } if (this.previous.getDuration().getValue() > TGDuration.QUARTER){ this.joinedGreaterThanQuarter = true; } } } //trato de unir con el componente que le sigue if (this.next != null && !this.next.isRestVoice() ) { if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.next)) { if (this.next.getDuration().getValue() >= getDuration().getValue()) { this.setJoin2(this.next); if (this.previous == null || this.previous.isRestVoice() || this.previous.getDuration().getValue() < getDuration().getValue()) { this.setJoin1(this); } noteJoined = true; this.joinedType = JOINED_TYPE_RIGHT; } if (this.next.getDuration().getValue() > TGDuration.QUARTER){ this.joinedGreaterThanQuarter = true; } } } //si no hubo union decido para que lado girar la figura if (!noteJoined && withPrev) { this.joinedType = JOINED_TYPE_NONE_LEFT; } if( (layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0){ this.minY = 0; this.maxY = getBeatImpl().getMeasureImpl().getTrackImpl().getTabHeight(); if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){ this.maxY += (((layout.getStringSpacing() / 2) * 5) + 1); }else{ this.minY -= (((layout.getStringSpacing() / 2) * 5) + 1); } } } public void updateSilenceSpacing(ViewLayout layout) { this.silenceY = 0; this.silenceHeight = 0; if(!isHiddenSilence()){ int style = layout.getStyle(); int lineSpacing = 0; int lineCount = 0; float scale = 0; if((style & ViewLayout.DISPLAY_SCORE) != 0 ){ lineSpacing = layout.getScoreLineSpacing(); lineCount = 5; scale = (lineSpacing / 9.0f); }else{ lineSpacing = layout.getStringSpacing(); lineCount = getBeat().getMeasure().getTrack().stringCount(); scale = (lineSpacing / 10.0f); } int duration = getDuration().getValue(); if(duration == TGDuration.WHOLE){ this.silenceHeight = (scale * 3.6513581f); this.silenceY = ( lineCount <= 5 ? lineSpacing : lineSpacing * 2 ); } else if(duration == TGDuration.HALF){ this.silenceHeight = (scale * 3.6513581f); this.silenceY = ( lineCount <= 5 ? lineSpacing * 2 : lineSpacing * 3 ) - this.silenceHeight; } else if(duration == TGDuration.QUARTER){ this.silenceHeight = (scale * 16); this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2); } else if(duration == TGDuration.EIGHTH){ this.silenceHeight = (scale * 12); this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2); } else if(duration == TGDuration.SIXTEENTH){ this.silenceHeight = (scale * 16); this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2); } else if(duration == TGDuration.THIRTY_SECOND){ this.silenceHeight = (scale * 24); this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2); } else if(duration == TGDuration.SIXTY_FOURTH){ this.silenceHeight = (scale * 28); this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2); } for( int v = 0; v < getBeat().countVoices(); v ++){ if( v != getIndex() ){ TGVoiceImpl voice = getBeatImpl().getVoiceImpl( v ); if( !voice.isEmpty() ){ if( voice.isRestVoice()){ if( !voice.isHiddenSilence() ){ float maxSilenceHeight = (lineSpacing * 3); float firstPosition = (this.silenceY - (maxSilenceHeight / getBeat().countVoices())); this.silenceY = (firstPosition + ( maxSilenceHeight * getIndex() )); } } else if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){ int direction = voice.getBeatGroup().getDirection(); int y1 = voice.getBeatGroup().getY1(layout,voice.getMinNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef()); int y2 = voice.getBeatGroup().getY1(layout,voice.getMaxNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef()); if(direction == TGBeatGroup.DIRECTION_UP){ float position = (y1 + (lineSpacing * 2)); if( position > this.silenceY ){ this.silenceY = position; } }else if(direction == TGBeatGroup.DIRECTION_DOWN){ float position = (y2 - (this.silenceHeight + lineSpacing)); if( position < this.silenceY ){ this.silenceY = position; } } }else if((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 ){ int direction = voice.getBeatGroup().getDirection(); if(direction == TGBeatGroup.DIRECTION_UP){ float position = (lineSpacing * voice.getMaxString() ); if( position > this.silenceY ){ this.silenceY = position; } } else if(direction == TGBeatGroup.DIRECTION_DOWN){ float position = ((lineSpacing * (voice.getMinString() - 1) ) - (this.silenceHeight + lineSpacing)); if( position < this.silenceY ){ this.silenceY = position; } } } } } } this.minY = (int)this.silenceY; this.maxY = (int)(this.silenceY + this.silenceHeight); } } public void paint(ViewLayout layout,TGPainter painter, int fromX, int fromY) { if(!isEmpty()){ if(isRestVoice() && !isHiddenSilence()){ paintSilence(layout, painter, fromX, fromY); } else{ Iterator notes = getNotes().iterator(); while (notes.hasNext()) { TGNoteImpl note = (TGNoteImpl)notes.next(); note.paint(layout,painter,fromX ,fromY); } if(!layout.isPlayModeEnabled()){ paintBeat(layout, painter, fromX, fromY) ; } } } } //----silence public void paintSilence(ViewLayout layout,TGPainter painter, int fromX, int fromY) { int style = layout.getStyle(); int x = 0; int lineSpacing = 0; float y = 0; float scale = 0; if((style & ViewLayout.DISPLAY_SCORE) != 0 ){ x = fromX + getPosX() + getBeatImpl().getSpacing(); y = fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + this.silenceY; lineSpacing = layout.getScoreLineSpacing(); scale = (lineSpacing / 9.0f); }else{ x = fromX + getPosX() + getBeatImpl().getSpacing() - 1; y = fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE) + this.silenceY; lineSpacing = layout.getStringSpacing(); scale = (lineSpacing / 10.0f); } setStyle(layout, painter,(layout.isPlayModeEnabled() && isPlaying(layout))); painter.initPath(TGPainter.PATH_FILL); int duration = getDuration().getValue(); if(duration == TGDuration.WHOLE){ TGSilencePainter.paintWhole(painter, x, y , scale); } else if(duration == TGDuration.HALF){ TGSilencePainter.paintHalf(painter, x, y , scale); } else if(duration == TGDuration.QUARTER){ TGSilencePainter.paintQuarter(painter, x, y, scale); } else if(duration == TGDuration.EIGHTH){ TGSilencePainter.paintEighth(painter, x, y, scale); } else if(duration == TGDuration.SIXTEENTH){ TGSilencePainter.paintSixteenth(painter, x, y, scale); } else if(duration == TGDuration.THIRTY_SECOND){ TGSilencePainter.paintThirtySecond(painter, x, y, scale); } else if(duration == TGDuration.SIXTY_FOURTH){ TGSilencePainter.paintSixtyFourth(painter, x, y, scale); } painter.closePath(); if(getDuration().isDotted() || getDuration().isDoubleDotted()){ layout.setDotStyle(painter); painter.initPath(); painter.moveTo(x + 10,y +1); painter.addOval(x + 10,y +1,1,1); if(getDuration().isDoubleDotted()){ painter.moveTo(x + 13,y +1); painter.addOval(x + 13,y +1,1,1); } painter.closePath(); } if(!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){ layout.setDivisionTypeStyle(painter); if((style & ViewLayout.DISPLAY_SCORE) != 0 ){ painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE))); }else{ painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE))); } } } public void setStyle(ViewLayout layout, TGPainter painter, boolean playMode){ if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){ layout.setScoreSilenceStyle(painter, playMode); }else{ layout.setTabSilenceStyle(painter, playMode); } } public void paintBeat(ViewLayout layout,TGPainter painter, int fromX, int fromY){ if(!isRestVoice() ){ int style = layout.getStyle(); int spacing = getBeatImpl().getSpacing(); if((style & ViewLayout.DISPLAY_SCORE) != 0){ paintScoreBeat(layout, painter, fromX, fromY+getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES), spacing); } if((style & ViewLayout.DISPLAY_TABLATURE) != 0 && (style & ViewLayout.DISPLAY_SCORE) == 0){ paintTablatureBeat(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE), spacing); } } } public void paintTablatureBeat(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing){ if(!isRestVoice() ){ float scale = layout.getScale(); float xMove = (2 * scale); float x = ( fromX + getPosX() + spacing + xMove ); float y1 = 0; float y2 = 0; float verticalLineWidth = scale; float horizontalLineWidth = (2 * scale); int stringSpacing = layout.getStringSpacing(); if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){ y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2)); y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5)); }else{ y1 = (fromY - (stringSpacing / 2) - horizontalLineWidth); y2 = (fromY - ((stringSpacing / 2) * 5)); } if (getDuration().getValue() >= TGDuration.QUARTER) { layout.setTabNoteFooterStyle(painter); painter.initPath(); painter.setAntialias(false); painter.setLineWidth( (int)verticalLineWidth ); painter.moveTo(x, y1); painter.lineTo(x, y2); painter.closePath(); if (getDuration().getValue() >= TGDuration.EIGHTH) { float x1 = 0; float x2 = 0; int joinedType = getJoinedType(); if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){ x1 = getPosX() + xMove + spacing; x2 = getPosX() + xMove + spacing + (6 * scale); }else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){ x1 = getPosX() + xMove + spacing - (5 * scale); x2 = getPosX() + xMove + spacing; }else{ x1 = getJoin1().getPosX() + xMove + getJoin1().getBeatImpl().getSpacing(); x2 = getJoin2().getPosX() + xMove + getJoin2().getBeatImpl().getSpacing(); } int index = ( getDuration().getIndex() - 2); if(index > 0){ int height = (layout.getStringSpacing() / 2); int direction = (getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ? 1 : -1); painter.setLineWidth( (int)horizontalLineWidth ); painter.initPath(); for(int i = index; i > 0 ;i --){ painter.moveTo(fromX + x1, y2 + ((height - (i * height)) * direction)); painter.lineTo(fromX + x2, y2 + ((height - (i * height)) * direction)); } painter.closePath(); painter.setLineWidth(1); } } } else if (getDuration().getValue() == TGDuration.HALF) { layout.setTabNoteFooterStyle(painter); painter.initPath(); painter.setAntialias(false); painter.setLineWidth( (int)verticalLineWidth ); painter.moveTo(x, (y1 + ((y2 - y1) / 2))); painter.lineTo(x, y2); painter.closePath(); } //-------------puntillo-------------------------------------- if (getDuration().isDotted() || getDuration().isDoubleDotted()) { int joinedType = getJoinedType(); float posX = ((getDuration().getValue() > TGDuration.WHOLE)?((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT || joinedType == TGVoiceImpl.JOINED_TYPE_RIGHT)?(x+ (4.0f * scale)):(x- (5.0f * scale))):x); float posY = (y2 - ((getDuration().getValue() >= TGDuration.EIGHTH)? ((stringSpacing / 2) * (getDuration().getIndex() - 2)):(1.0f * scale))); paintDot(layout, painter, posX, posY,scale); } //-------------tresillo-------------------------------------- if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) { layout.setDivisionTypeStyle(painter); painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), (int)(x - 3),((fromY - getPaintPosition(TGTrackSpacing.POSITION_TABLATURE)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE))); } } } public void paintScoreBeat(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing){ int vX = ( fromX + getPosX() + spacing ); //division type if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) { layout.setDivisionTypeStyle(painter); painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),vX ,((fromY - getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE))); } //dibujo el pie if(getDuration().getValue() >= TGDuration.HALF){ layout.setScoreNoteFooterStyle(painter); float scale = layout.getScale(); float lineSpacing = layout.getScoreLineSpacing(); int direction = this.group.getDirection(); int key = getBeat().getMeasure().getKeySignature(); int clef = getBeat().getMeasure().getClef(); int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0); int yMove = (direction == TGBeatGroup.DIRECTION_UP ? ((layout.getScoreLineSpacing() / 3) + 1) : ((layout.getScoreLineSpacing() / 3) * 2)); int vY1 = fromY + ( direction == TGBeatGroup.DIRECTION_DOWN ? this.maxNote.getScorePosY() : this.minNote.getScorePosY() ); int vY2 = fromY + this.group.getY2(layout,getPosX() + spacing,key,clef); painter.initPath(); painter.setAntialias(false); painter.moveTo(vX + xMove, vY1 + yMove); painter.lineTo(vX + xMove, vY2); painter.closePath(); if (getDuration().getValue() >= TGDuration.EIGHTH) { int index = ( getDuration().getIndex() - 3); if(index >= 0){ int dir = (direction == TGBeatGroup.DIRECTION_DOWN)?1:-1; int joinedType = getJoinedType(); boolean joinedGreaterThanQuarter = isJoinedGreaterThanQuarter(); if((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT || joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT) && !joinedGreaterThanQuarter){ float hX = (fromX + xMove + getPosX() + spacing); float hY = ( (fromY + this.group.getY2(layout,getPosX() + spacing,key,clef)) - ( (lineSpacing * 2)* dir )) ; for(int i = 0; i <= index; i ++){ painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintFooter(painter,hX,(hY - ( (i * (lineSpacing / 2.0f)) * dir)),dir,lineSpacing); painter.closePath(); } }else{ int hX1 = 0; int hX2 = 0; if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){ hX1 = getPosX() + spacing; hX2 = getPosX() + spacing + 6; }else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){ hX1 = getPosX() + spacing - 5; hX2 = getPosX() + spacing; }else{ hX1 = getJoin1().getPosX() + getJoin1().getBeatImpl().getSpacing(); hX2 = getJoin2().getPosX() + getJoin2().getBeatImpl().getSpacing(); } int hY1 = fromY + this.group.getY2(layout,hX1,key,clef); int hY2 = fromY + this.group.getY2(layout,hX2,key,clef); painter.setLineWidth(Math.max(1,Math.round(3f * scale))); painter.initPath(); for(int i = 0; i <= index; i ++){ painter.moveTo(fromX + xMove + hX1, hY1 - ( (i * (5f * scale)) * dir)); painter.lineTo(fromX + xMove + hX2, hY2 - ( (i * (5f * scale)) * dir)); } painter.closePath(); painter.setLineWidth(1); } } } } } public void paintDot(ViewLayout layout,TGPainter painter,float fromX, float fromY,float scale){ float dotSize = (3.0f * scale); float posX = fromX; float posY = fromY; layout.setDotStyle(painter); painter.initPath(TGPainter.PATH_FILL); painter.moveTo(posX - (dotSize / 2), posY - (dotSize / 2)); painter.addOval(posX - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize); if(getDuration().isDoubleDotted()){ painter.moveTo(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2)); painter.addOval(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize); } painter.closePath(); } public int getPaintPosition(int index){ return getMeasureImpl().getTs().getPosition(index); } public int getMaxString() { return this.maxString; } public int getMinString() { return this.minString; } public int getMaxY() { return this.maxY; } public int getMinY() { return this.minY; } public boolean isHiddenSilence() { return this.hiddenSilence; } public void setHiddenSilence(boolean hiddenSilence) { this.hiddenSilence = hiddenSilence; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Tablature.java0000644000175000017500000002367411273045225027761 0ustar julianjulian/* * Created on 29-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.ScrollBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit; import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class Tablature extends Composite { private static final int SCROLL_DELAY = 15; private static final int SCROLL_INCREMENT = 50; private TGSongManager songManager; private Caret caret; private int width; private int height; private ViewLayout viewLayout; private EditorKit editorKit; private TGBeatImpl playedBeat; private TGMeasureImpl playedMeasure; private int scrollX; private int scrollY; private boolean resetScroll; protected long lastVScrollTime; protected long lastHScrollTime; private boolean painting; public Tablature(final Composite parent) { this(parent,SWT.NONE); } public Tablature(final Composite parent,int style) { super(parent, style); this.editorKit = new EditorKit(this); } public void initGUI(){ this.addPaintListener(new TablaturePaintListener(this)); final ScrollBar hBar = getHorizontalBar(); hBar.setIncrement(SCROLL_INCREMENT); hBar.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { if(Tablature.this.lastHScrollTime + SCROLL_DELAY < System.currentTimeMillis()){ redraw(); Tablature.this.lastHScrollTime = System.currentTimeMillis(); } } }); final ScrollBar vBar = getVerticalBar(); vBar.setIncrement(SCROLL_INCREMENT); vBar.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { if(Tablature.this.lastVScrollTime + SCROLL_DELAY < System.currentTimeMillis()){ redraw(); Tablature.this.lastVScrollTime = System.currentTimeMillis(); } } }); this.addControlListener(new ControlAdapter() { public void controlResized(ControlEvent arg0) { updateScroll(); } }); } public void initDefaults(){ this.caret = new Caret(this); } public void updateTablature(){ this.playedBeat = null; this.playedMeasure = null; getViewLayout().updateSong(); } public void initCaret(){ this.caret.update(1,TGDuration.QUARTER_TIME,1); } public synchronized void paintTablature(TGPainter painter){ if(!TuxGuitar.instance().isLocked()){ TuxGuitar.instance().lock(); this.setPainting(true); try{ this.checkScroll(); Rectangle area = getClientArea(); ScrollBar xScroll = getHorizontalBar(); ScrollBar yScroll = getVerticalBar(); this.scrollX = xScroll.getSelection(); this.scrollY = yScroll.getSelection(); this.getViewLayout().paint(painter,area,-this.scrollX,-this.scrollY); this.width = this.viewLayout.getWidth(); this.height = this.viewLayout.getHeight(); this.updateScroll(); if(TuxGuitar.instance().getPlayer().isRunning()){ redrawPlayingMode(painter,true); } // Si no estoy reproduciendo y hay cambios // muevo el scroll al compas que tiene el caret else if(getCaret().hasChanges()){ // Mover el scroll puede necesitar redibujar // por eso es importante desmarcar los cambios antes de hacer el moveScrollTo getCaret().setChanges(false); moveScrollTo(getCaret().getMeasure(), xScroll, yScroll,area); } }catch(Throwable throwable){ throwable.printStackTrace(); } this.setPainting(false); TuxGuitar.instance().unlock(); } } public void resetScroll(){ this.resetScroll = true; } public void checkScroll(){ if(this.resetScroll){ getHorizontalBar().setSelection(0); getVerticalBar().setSelection(0); this.resetScroll = false; } } public void updateScroll(){ Rectangle bounds = getBounds(); Rectangle client = getClientArea(); ScrollBar hBar = getHorizontalBar(); ScrollBar vBar = getVerticalBar(); hBar.setMaximum(this.width); vBar.setMaximum(this.height); hBar.setThumb(Math.min(bounds.width, client.width)); vBar.setThumb(Math.min(bounds.height, client.height)); } public boolean moveScrollTo(TGMeasureImpl measure){ return moveScrollTo(measure,getHorizontalBar(),getVerticalBar(),getClientArea()); } public boolean moveScrollTo(TGMeasureImpl measure,ScrollBar xScroll,ScrollBar yScroll,Rectangle area){ boolean success = false; if(measure != null && measure.getTs() != null){ int mX = measure.getPosX(); int mY = measure.getPosY(); int mWidth = measure.getWidth(getViewLayout()); int mHeight = measure.getTs().getSize(); int marginWidth = getViewLayout().getFirstMeasureSpacing(); int marginHeight = getViewLayout().getFirstTrackSpacing(); boolean forceRedraw = false; //Solo se ajusta si es necesario //si el largo del compas es mayor al de la pantalla. nunca se puede ajustar a la medida. if( mX < 0 || ( (mX + mWidth ) > area.width && (area.width >= mWidth + marginWidth || mX > marginWidth) ) ){ xScroll.setSelection((this.scrollX + mX) - marginWidth ); success = true; } //Solo se ajusta si es necesario //si el alto del compas es mayor al de la pantalla. nunca se puede ajustar a la medida. if( mY < 0 || ( (mY + mHeight ) > area.height && (area.height >= mHeight + marginHeight || mY > marginHeight) ) ){ yScroll.setSelection( (this.scrollY + mY) - marginHeight ); success = true; } if(!success){ // Si la seleccion "real" del scroll es distinta a la anterior, se fuerza el redraw forceRedraw = (this.scrollX != xScroll.getSelection() || this.scrollY != yScroll.getSelection()); } if(forceRedraw || success){ redraw(); } } return success; } public void redraw(){ if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){ this.playedBeat = null; this.playedMeasure = null; this.editorKit.tryBack(); this.setPainting(true); super.redraw(); } } public void redrawPlayingMode(){ if(!super.isDisposed() && !isPainting() && !TuxGuitar.instance().isLocked()){ //TuxGuitar.instance().lock(); if(TuxGuitar.instance().getPlayer().isRunning()){ this.editorKit.tryBack(); this.setPainting(true); TGPainter painter = new TGPainter(new GC(this)); redrawPlayingMode(painter,false); painter.dispose(); this.setPainting(false); } //TuxGuitar.instance().unlock(); } } private void redrawPlayingMode(TGPainter painter,boolean force){ if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){ try{ TGMeasureImpl measure = TuxGuitar.instance().getEditorCache().getPlayMeasure(); TGBeatImpl beat = TuxGuitar.instance().getEditorCache().getPlayBeat(); if(measure != null && beat != null && measure.hasTrack(getCaret().getTrack().getNumber())){ if(!moveScrollTo(measure) || force){ boolean paintMeasure = (force || this.playedMeasure == null || !this.playedMeasure.equals(measure)); if(this.playedMeasure != null && this.playedBeat != null && !this.playedMeasure.isOutOfBounds() && this.playedMeasure.hasTrack(getCaret().getTrack().getNumber())){ getViewLayout().paintPlayMode(painter, this.playedMeasure, this.playedBeat,paintMeasure); } if(!measure.isOutOfBounds()){ getViewLayout().paintPlayMode(painter, measure, beat,paintMeasure); } this.playedBeat = beat; this.playedMeasure = measure; } } }catch(Throwable throwable){ throwable.printStackTrace(); } } } public boolean isPainting() { return this.painting; } public void setPainting(boolean painting) { this.painting = painting; } public Caret getCaret(){ return this.caret; } public EditorKit getEditorKit() { return this.editorKit; } public TGSongManager getSongManager() { return this.songManager; } public void setSongManager(TGSongManager songManager) { this.songManager = songManager; } public ViewLayout getViewLayout(){ return this.viewLayout; } public void setViewLayout(ViewLayout viewLayout){ if(getViewLayout() != null){ getViewLayout().disposeLayout(); } this.viewLayout = viewLayout; if(this.getHorizontalBar() != null){ this.getHorizontalBar().setSelection(0); } if(this.getVerticalBar() != null){ this.getVerticalBar().setSelection(0); } this.reloadStyles(); } public void reloadStyles(){ if(this.getViewLayout() != null){ this.getViewLayout().reloadStyles(); this.setBackground(getViewLayout().getResources().getBackgroundColor()); } } public void reloadViewLayout(){ int style = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.LAYOUT_STYLE); int mode = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.LAYOUT_MODE); this.loadViewLayout(style, mode); } private void loadViewLayout( int style, int mode ){ switch(mode){ case ViewLayout.MODE_PAGE: setViewLayout(new PageViewLayout(this,style)); break; case ViewLayout.MODE_LINEAR: setViewLayout(new LinearViewLayout(this,style)); break; default: if( mode != ViewLayout.DEFAULT_MODE ){ this.loadViewLayout( style, ViewLayout.DEFAULT_MODE ); } break; } } public void dispose(){ super.dispose(); this.getViewLayout().disposeLayout(); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablaturePaintListener.java0000644000175000017500000000142211273045225032446 0ustar julianjulian/* * Created on 30-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.herac.tuxguitar.gui.editors.TGPainter; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TablaturePaintListener implements PaintListener{ private Tablature tablature; public TablaturePaintListener(Tablature tablature){ this.tablature = tablature; } public void paintControl(PaintEvent e) { this.tablature.paintTablature( new TGPainter(e.gc) ); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablatureUtil.java0000644000175000017500000000162511273045225030607 0ustar julianjulian/* * Created on 25-nov-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TablatureUtil { /** * Calcula la posicion inicial de una nota, dependiendo de el spacing */ public static final int getStartPosition(TGMeasure measure,long start,int spacing){ double newStart = (double)start - (double)measure.getStart(); double displayPosition = 0.0; if(newStart > 0){ double position = (newStart / TGDuration.QUARTER_TIME); displayPosition = (position * spacing); } return (int)displayPosition; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutContentReader.java0000644000175000017500000000245511273045224031402 0ustar julianjulianpackage org.herac.tuxguitar.gui.help.about; import java.io.IOException; import java.io.InputStream; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.util.TGClassLoader; public class AboutContentReader { private static final String PREFIX = "about_"; private static final String EXTENSION = ".dist"; public static final String DESCRIPTION = "description"; public static final String AUTHORS = "authors"; public static final String LICENSE = "license"; public AboutContentReader(){ super(); } public StringBuffer read(String doc){ String lang = TuxGuitar.instance().getLanguageManager().getLanguage(); InputStream is = TGClassLoader.instance().getClassLoader().getResourceAsStream(PREFIX + doc + "_" + lang + EXTENSION); if(is == null){ is = TGClassLoader.instance().getClassLoader().getResourceAsStream(PREFIX + doc + EXTENSION); } if(is != null){ return read(is); } System.out.println(doc + ".txt"); return new StringBuffer(); } public StringBuffer read(InputStream is){ StringBuffer sb = new StringBuffer(); try { int length = 0; byte[] buffer = new byte[1024]; while((length = is.read(buffer)) != -1){ sb.append(new String(buffer,0,length)); } is.close(); } catch (IOException e) { e.printStackTrace(); } return sb; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutDialog.java0000644000175000017500000001401411273045224030036 0ustar julianjulianpackage org.herac.tuxguitar.gui.help.about; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.util.TGVersion; public class AboutDialog { private static final String RELEASE_NAME = (TuxGuitar.APPLICATION_NAME + " " + TGVersion.CURRENT.getVersion()); private static final String PROPERTY_PREFIX = ("help.about."); private static final int IMAGE_WIDTH = 100; private static final int IMAGE_HEIGHT = 100; private static final int TAB_ITEM_WIDTH = 660; private static final int TAB_ITEM_HEIGHT = 300; protected Composite imageComposite; protected Image image; public AboutDialog() { super(); } public void open(Shell shell) { final Shell dialog = DialogUtils.newDialog(shell,SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("help.about")); //--------------------HEADER---------------------------------- Composite header = new Composite(dialog,SWT.NONE); header.setLayout(new GridLayout(2,false)); header.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true ,true)); this.image = TuxGuitar.instance().getIconManager().getAboutDescription(); this.imageComposite = new Composite(header,SWT.NONE); this.imageComposite.setLayoutData(new GridData(IMAGE_WIDTH,IMAGE_HEIGHT)); this.imageComposite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { Rectangle bounds = AboutDialog.this.image.getBounds(); TGPainter painter = new TGPainter(e.gc); painter.drawImage(AboutDialog.this.image,((IMAGE_WIDTH - bounds.width) /2),((IMAGE_HEIGHT - bounds.height) /2)); } }); final Font titleFont = new Font(dialog.getDisplay(),TuxGuitar.instance().getConfig().getFontDataConfigValue(TGConfigKeys.FONT_ABOUT_DIALOG_TITLE)); Label title = new Label(header,SWT.NONE); title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true ,true)); title.setFont(titleFont); title.setForeground(dialog.getDisplay().getSystemColor(SWT.COLOR_GRAY)); title.setText(RELEASE_NAME); title.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { titleFont.dispose(); } }); //-------------------TABS----------------------- Composite tabs = new Composite(dialog, SWT.NONE); tabs.setLayout(new GridLayout()); tabs.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final TabFolder tabFolder = new TabFolder(tabs, SWT.NONE); tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); tabFolder.setLayout(new FormLayout()); AboutContentReader docReader = new AboutContentReader(); makeTabItem(tabFolder,AboutContentReader.DESCRIPTION,docReader.read(AboutContentReader.DESCRIPTION).toString()); makeTabItem(tabFolder,AboutContentReader.AUTHORS,docReader.read(AboutContentReader.AUTHORS).toString()); makeTabItem(tabFolder,AboutContentReader.LICENSE,docReader.read(AboutContentReader.LICENSE).toString()); tabFolder.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if(tabFolder.getSelectionIndex() == 0){ AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutDescription(); }else if(tabFolder.getSelectionIndex() == 1){ AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutAuthors(); }else if(tabFolder.getSelectionIndex() == 2){ AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutLicense(); } AboutDialog.this.imageComposite.redraw(); } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout()); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); Button buttonClose = new Button(buttons, SWT.PUSH); buttonClose.setLayoutData(getButtonData()); buttonClose.setText(TuxGuitar.getProperty("close")); buttonClose.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); tabFolder.setSelection(0); dialog.setDefaultButton( buttonClose ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private void makeTabItem(TabFolder tabFolder,String itemName,String itemText){ Composite control = new Composite(tabFolder, SWT.NONE); control.setLayout(new GridLayout()); control.setLayoutData(new FormData(TAB_ITEM_WIDTH,TAB_ITEM_HEIGHT)); Text text = new Text(control,SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); text.setBackground(TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_WHITE)); text.setEditable(false); text.append(itemText); text.setSelection(0); TabItem tabItem = new TabItem(tabFolder, SWT.NONE); tabItem.setText(TuxGuitar.getProperty(PROPERTY_PREFIX + itemName)); tabItem.setControl(control); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/help/doc/TGDocumentation.java0000644000175000017500000000470011273045224030344 0ustar julianjulianpackage org.herac.tuxguitar.gui.help.doc; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.TGFileUtils; public class TGDocumentation { private static final String RESOURCE_PATH = "help"; private static final String TEMPORAL_PATH = System.getProperty("java.io.tmpdir") + File.separator + "tuxguitar"; public void display() throws Throwable{ URL url = getIndexUrl(); if( url != null ){ Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.SHELL_TRIM); dialog.setLayout(new FillLayout()); Browser browser = new Browser(dialog, SWT.BORDER); browser.setLayout(new FillLayout()); browser.setUrl( url.toExternalForm() ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_MAXIMIZED); } } private URL getIndexUrl() throws Throwable{ URL url = TGFileUtils.getResourceUrl(RESOURCE_PATH + "/index.html"); if( url != null && !TGFileUtils.isLocalFile( url ) ){ String path = TEMPORAL_PATH + File.separator + RESOURCE_PATH; copyTemporalResources(path, RESOURCE_PATH, TGFileUtils.getFileNames( RESOURCE_PATH )); url = new File( path + File.separator + "index.html" ).toURI().toURL(); } return url; } private void copyTemporalResources( String dstPath , String resourcePath, String[] resources ) throws Throwable{ if( resources != null ){ for( int i = 0 ; i < resources.length ; i ++ ){ File file = new File( dstPath + File.separator + resources[i] ); file.getParentFile().mkdirs(); String resource = (resourcePath + "/" + resources[i]); String[] children = TGFileUtils.getFileNames(resource); if( children != null && children.length > 0 ){ copyTemporalResources( file.getAbsolutePath(), resource , children ); }else if( !file.exists() ){ InputStream in = TGFileUtils.getResourceAsStream(resource); if( in != null ){ OutputStream out = new FileOutputStream( file ); int len = 0; byte[] buf = new byte[1024]; while ((len = in.read(buf)) > 0){ out.write(buf, 0, len); } out.flush(); out.close(); in.close(); } } } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/BeatMenuItem.java0000644000175000017500000002343611273045224030216 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.insert.InsertTextAction; import org.herac.tuxguitar.gui.actions.note.ChangeTiedNoteAction; import org.herac.tuxguitar.gui.actions.note.CleanBeatAction; import org.herac.tuxguitar.gui.actions.note.DecrementNoteSemitoneAction; import org.herac.tuxguitar.gui.actions.note.IncrementNoteSemitoneAction; import org.herac.tuxguitar.gui.actions.note.MoveBeatsCustomAction; import org.herac.tuxguitar.gui.actions.note.MoveBeatsLeftAction; import org.herac.tuxguitar.gui.actions.note.MoveBeatsRightAction; import org.herac.tuxguitar.gui.actions.note.RemoveUnusedVoiceAction; import org.herac.tuxguitar.gui.actions.note.SetStrokeDownAction; import org.herac.tuxguitar.gui.actions.note.SetStrokeUpAction; import org.herac.tuxguitar.gui.actions.note.SetVoiceAutoAction; import org.herac.tuxguitar.gui.actions.note.SetVoiceDownAction; import org.herac.tuxguitar.gui.actions.note.SetVoiceUpAction; import org.herac.tuxguitar.gui.actions.note.ShiftNoteDownAction; import org.herac.tuxguitar.gui.actions.note.ShiftNoteUpAction; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGStroke; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class BeatMenuItem extends MenuItems{ private MenuItem noteMenuItem; private Menu menu; private MenuItem tiedNote; private MenuItem cleanBeat; private MenuItem removeVoice; private MenuItem insertText; private MenuItem voiceAuto; private MenuItem voiceUp; private MenuItem voiceDown; private MenuItem strokeUp; private MenuItem strokeDown; private MenuItem shiftUp; private MenuItem shiftDown; private MenuItem semitoneUp; private MenuItem semitoneDown; private MenuItem moveBeatsLeft; private MenuItem moveBeatsRight; private MenuItem moveBeatsCustom; private DurationMenuItem durationMenuItem; private ChordMenuItem chordMenuItem; private NoteEffectsMenuItem effectMenuItem; private DynamicMenuItem dynamicMenuItem; public BeatMenuItem(Shell shell,Menu parent, int style) { this.noteMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--Tied Note this.tiedNote = new MenuItem(this.menu, SWT.CHECK); this.tiedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeTiedNoteAction.NAME)); //--Clean Beat this.cleanBeat = new MenuItem(this.menu, SWT.PUSH); this.cleanBeat.addSelectionListener(TuxGuitar.instance().getAction(CleanBeatAction.NAME)); //--Remove Voice this.removeVoice = new MenuItem(this.menu, SWT.PUSH); this.removeVoice.addSelectionListener(TuxGuitar.instance().getAction(RemoveUnusedVoiceAction.NAME)); //--Duration-- this.durationMenuItem = new DurationMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE); this.durationMenuItem.showItems(); //--Chord-- this.chordMenuItem = new ChordMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE); this.chordMenuItem.showItems(); //--Effects-- this.effectMenuItem = new NoteEffectsMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE); this.effectMenuItem.showItems(); //--Dynamic-- this.dynamicMenuItem = new DynamicMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE); this.dynamicMenuItem.showItems(); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); this.insertText = new MenuItem(this.menu, SWT.PUSH); this.insertText.addSelectionListener(TuxGuitar.instance().getAction(InsertTextAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--Semitone Down this.voiceAuto = new MenuItem(this.menu, SWT.PUSH); this.voiceAuto.addSelectionListener(TuxGuitar.instance().getAction(SetVoiceAutoAction.NAME)); //--Semitone Up this.voiceUp = new MenuItem(this.menu, SWT.PUSH); this.voiceUp.addSelectionListener(TuxGuitar.instance().getAction(SetVoiceUpAction.NAME)); //--Semitone Down this.voiceDown = new MenuItem(this.menu, SWT.PUSH); this.voiceDown.addSelectionListener(TuxGuitar.instance().getAction(SetVoiceDownAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--Semitone Up this.strokeUp = new MenuItem(this.menu, SWT.CHECK); this.strokeUp.addSelectionListener(TuxGuitar.instance().getAction(SetStrokeUpAction.NAME)); //--Semitone Down this.strokeDown = new MenuItem(this.menu, SWT.CHECK); this.strokeDown.addSelectionListener(TuxGuitar.instance().getAction(SetStrokeDownAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--Semitone Up this.semitoneUp = new MenuItem(this.menu, SWT.PUSH); this.semitoneUp.addSelectionListener(TuxGuitar.instance().getAction(IncrementNoteSemitoneAction.NAME)); //--Semitone Down this.semitoneDown = new MenuItem(this.menu, SWT.PUSH); this.semitoneDown.addSelectionListener(TuxGuitar.instance().getAction(DecrementNoteSemitoneAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--Shift Up this.shiftUp = new MenuItem(this.menu, SWT.PUSH); this.shiftUp.addSelectionListener(TuxGuitar.instance().getAction(ShiftNoteUpAction.NAME)); //--Shift Down this.shiftDown = new MenuItem(this.menu, SWT.PUSH); this.shiftDown.addSelectionListener(TuxGuitar.instance().getAction(ShiftNoteDownAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--Move Beats Left this.moveBeatsLeft = new MenuItem(this.menu, SWT.PUSH); this.moveBeatsLeft.addSelectionListener(TuxGuitar.instance().getAction(MoveBeatsLeftAction.NAME)); //--Move Beats Right this.moveBeatsRight = new MenuItem(this.menu, SWT.PUSH); this.moveBeatsRight.addSelectionListener(TuxGuitar.instance().getAction(MoveBeatsRightAction.NAME)); //--Move Beats Custom this.moveBeatsCustom = new MenuItem(this.menu, SWT.PUSH); this.moveBeatsCustom.addSelectionListener(TuxGuitar.instance().getAction(MoveBeatsCustomAction.NAME)); this.noteMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); TGBeat beat = caret.getSelectedBeat(); TGNote note = caret.getSelectedNote(); boolean restBeat = caret.isRestBeatSelected(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.tiedNote.setEnabled(!running); this.tiedNote.setSelection(note != null && note.isTiedNote()); this.cleanBeat.setEnabled(!running); this.removeVoice.setEnabled(!running); this.voiceAuto.setEnabled(!running && !restBeat); this.voiceUp.setEnabled(!running && !restBeat); this.voiceDown.setEnabled(!running && !restBeat); this.strokeUp.setEnabled(!running && !restBeat); this.strokeUp.setSelection( beat != null && beat.getStroke().getDirection() == TGStroke.STROKE_UP ); this.strokeDown.setEnabled(!running && !restBeat); this.strokeDown.setSelection( beat != null && beat.getStroke().getDirection() == TGStroke.STROKE_DOWN ); this.semitoneUp.setEnabled(!running && note != null); this.semitoneDown.setEnabled(!running && note != null); this.shiftUp.setEnabled(!running && note != null); this.shiftDown.setEnabled(!running && note != null); this.insertText.setEnabled(!running); this.moveBeatsLeft.setEnabled(!running); this.moveBeatsRight.setEnabled(!running); this.moveBeatsCustom.setEnabled(!running); this.durationMenuItem.update(); this.chordMenuItem.update(); this.effectMenuItem.update(); this.dynamicMenuItem.update(); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.noteMenuItem, "beat", null); setMenuItemTextAndAccelerator(this.cleanBeat, "beat.clean", CleanBeatAction.NAME); setMenuItemTextAndAccelerator(this.removeVoice, "beat.voice.remove-unused", RemoveUnusedVoiceAction.NAME); setMenuItemTextAndAccelerator(this.tiedNote, "note.tiednote", ChangeTiedNoteAction.NAME); setMenuItemTextAndAccelerator(this.voiceAuto, "beat.voice-auto", SetVoiceAutoAction.NAME); setMenuItemTextAndAccelerator(this.voiceUp, "beat.voice-up", SetVoiceUpAction.NAME); setMenuItemTextAndAccelerator(this.voiceDown, "beat.voice-down", SetVoiceDownAction.NAME); setMenuItemTextAndAccelerator(this.strokeUp, "beat.stroke-up", SetStrokeUpAction.NAME); setMenuItemTextAndAccelerator(this.strokeDown, "beat.stroke-down", SetStrokeDownAction.NAME); setMenuItemTextAndAccelerator(this.semitoneUp, "note.semitone-up", IncrementNoteSemitoneAction.NAME); setMenuItemTextAndAccelerator(this.semitoneDown, "note.semitone-down", DecrementNoteSemitoneAction.NAME); setMenuItemTextAndAccelerator(this.shiftUp, "note.shift-up", ShiftNoteUpAction.NAME); setMenuItemTextAndAccelerator(this.shiftDown, "note.shift-down", ShiftNoteDownAction.NAME); setMenuItemTextAndAccelerator(this.insertText, "text.insert", InsertTextAction.NAME); setMenuItemTextAndAccelerator(this.moveBeatsLeft, "beat.move-left", MoveBeatsLeftAction.NAME); setMenuItemTextAndAccelerator(this.moveBeatsRight, "beat.move-right", MoveBeatsRightAction.NAME); setMenuItemTextAndAccelerator(this.moveBeatsCustom, "beat.move-custom", MoveBeatsCustomAction.NAME); this.durationMenuItem.loadProperties(); this.chordMenuItem.loadProperties(); this.effectMenuItem.loadProperties(); this.dynamicMenuItem.loadProperties(); } public void loadIcons(){ this.tiedNote.setImage(TuxGuitar.instance().getIconManager().getNoteTied()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ChordMenuItem.java0000644000175000017500000000613111273045224030373 0ustar julianjulianpackage org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.insert.InsertChordAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.song.models.TGChord; public class ChordMenuItem extends MenuItems{ private MenuItem chordMenuItem; private Menu menu; private MenuItem insertChord; private MenuItem[] subMenuItems; private long lastEdit; public ChordMenuItem(Shell shell,Menu parent, int style) { this.chordMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems() { //--INSERT CHORD-- this.insertChord = new MenuItem(this.menu, SWT.PUSH); this.insertChord.addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--CUSTOM CHORDS-- this.addItems(); this.chordMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void addItems() { this.disposeItems(); this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()]; for(int i = 0;i < this.subMenuItems.length; i++){ TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i); this.subMenuItems[i] = new MenuItem(this.menu, SWT.PUSH); this.subMenuItems[i].setData(chord); this.subMenuItems[i].setText(chord.getName()); this.subMenuItems[i].addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME)); } } public void disposeItems() { if(this.subMenuItems != null){ for(int i = 0;i < this.subMenuItems.length; i++){ this.subMenuItems[i].dispose(); } } } public void widgetSelected(SelectionEvent event) { if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) { ToolItem item = (ToolItem) event.widget; Rectangle rect = item.getBounds(); Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y)); this.menu.setLocation(pt.x, pt.y + rect.height); this.menu.setVisible(true); }else{ TuxGuitar.instance().getAction(InsertChordAction.NAME).process(event); } } public void update(){ boolean running = TuxGuitar.instance().getPlayer().isRunning(); if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){ this.addItems(); this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit(); } this.insertChord.setEnabled(!running); for(int i = 0;i < this.subMenuItems.length; i++){ this.subMenuItems[i].setEnabled(!running); } } public void loadProperties() { setMenuItemTextAndAccelerator(this.chordMenuItem, "chord", null); setMenuItemTextAndAccelerator(this.insertChord, "insert.chord", InsertChordAction.NAME); } public void loadIcons() { //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/CompositionMenuItem.java0000644000175000017500000001301711273045224031640 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.composition.ChangeClefAction; import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction; import org.herac.tuxguitar.gui.actions.composition.ChangeKeySignatureAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTempoAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTimeSignatureAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTripletFeelAction; import org.herac.tuxguitar.gui.actions.insert.RepeatAlternativeAction; import org.herac.tuxguitar.gui.actions.insert.RepeatCloseAction; import org.herac.tuxguitar.gui.actions.insert.RepeatOpenAction; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CompositionMenuItem extends MenuItems{ private MenuItem compositionMenuItem; private Menu menu; private MenuItem timeSignature; private MenuItem tempo; private MenuItem clef; private MenuItem keySignature; private MenuItem repeatOpen; private MenuItem repeatClose; private MenuItem repeatAlternative; private MenuItem tripletFeel; private MenuItem properties; public CompositionMenuItem(Shell shell,Menu parent, int style) { this.compositionMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--TIME SIGNATURE-- this.timeSignature = new MenuItem(this.menu, SWT.PUSH); this.timeSignature.addSelectionListener(TuxGuitar.instance().getAction(ChangeTimeSignatureAction.NAME)); //--TEMPO-- this.tempo = new MenuItem(this.menu, SWT.PUSH); this.tempo.addSelectionListener(TuxGuitar.instance().getAction(ChangeTempoAction.NAME)); //--CLEF-- this.clef = new MenuItem(this.menu, SWT.PUSH); this.clef.addSelectionListener(TuxGuitar.instance().getAction(ChangeClefAction.NAME)); //--KEY SIGNATURE-- this.keySignature = new MenuItem(this.menu, SWT.PUSH); this.keySignature.addSelectionListener(TuxGuitar.instance().getAction(ChangeKeySignatureAction.NAME)); //--TRIPLET FEEL-- this.tripletFeel = new MenuItem(this.menu, SWT.PUSH); this.tripletFeel.addSelectionListener(TuxGuitar.instance().getAction(ChangeTripletFeelAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--REPEAT OPEN-- this.repeatOpen = new MenuItem(this.menu, SWT.PUSH); this.repeatOpen.addSelectionListener(TuxGuitar.instance().getAction(RepeatOpenAction.NAME)); //--REPEAT CLOSE-- this.repeatClose = new MenuItem(this.menu, SWT.PUSH); this.repeatClose.addSelectionListener(TuxGuitar.instance().getAction(RepeatCloseAction.NAME)); //--REPEAT ALTERNATIVE-- this.repeatAlternative = new MenuItem(this.menu, SWT.PUSH); this.repeatAlternative.addSelectionListener(TuxGuitar.instance().getAction(RepeatAlternativeAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--INFO-- this.properties = new MenuItem(this.menu, SWT.PUSH); this.properties.addSelectionListener(TuxGuitar.instance().getAction(ChangeInfoAction.NAME)); this.compositionMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.timeSignature.setEnabled(!running); this.tempo.setEnabled(!running); this.clef.setEnabled(!running); this.keySignature.setEnabled(!running); this.tripletFeel.setEnabled(!running); this.repeatOpen.setEnabled(!running); this.repeatClose.setEnabled(!running); this.repeatAlternative.setEnabled(!running); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.compositionMenuItem, "composition", null); setMenuItemTextAndAccelerator(this.timeSignature, "composition.timesignature", ChangeTimeSignatureAction.NAME); setMenuItemTextAndAccelerator(this.tempo, "composition.tempo", ChangeTempoAction.NAME); setMenuItemTextAndAccelerator(this.clef, "composition.clef", ChangeClefAction.NAME); setMenuItemTextAndAccelerator(this.keySignature, "composition.keysignature", ChangeKeySignatureAction.NAME); setMenuItemTextAndAccelerator(this.tripletFeel, "composition.tripletfeel", ChangeTripletFeelAction.NAME); setMenuItemTextAndAccelerator(this.repeatOpen, "repeat.open", RepeatOpenAction.NAME); setMenuItemTextAndAccelerator(this.repeatClose, "repeat.close", RepeatCloseAction.NAME); setMenuItemTextAndAccelerator(this.repeatAlternative, "repeat.alternative", RepeatAlternativeAction.NAME); setMenuItemTextAndAccelerator(this.properties, "composition.properties", ChangeInfoAction.NAME); } public void loadIcons() { this.timeSignature.setImage(TuxGuitar.instance().getIconManager().getCompositionTimeSignature()); this.tempo.setImage(TuxGuitar.instance().getIconManager().getCompositionTempo()); this.repeatOpen.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatOpen()); this.repeatClose.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatClose()); this.repeatAlternative.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatAlternative()); this.properties.setImage(TuxGuitar.instance().getIconManager().getSongProperties()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DurationMenuItem.java0000644000175000017500000001445411273045224031130 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction; import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DurationMenuItem extends MenuItems{ private MenuItem durationMenuItem; private Menu menu; private MenuItem whole; private MenuItem half; private MenuItem quarter; private MenuItem eighth; private MenuItem sixteenth; private MenuItem thirtySecond; private MenuItem sixtyFourth; private MenuItem dotted; private MenuItem doubleDotted; private MenuItem division; public DurationMenuItem(Shell shell,Menu parent, int style) { this.durationMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--whole-- this.whole = new MenuItem(this.menu, SWT.PUSH); this.whole.addSelectionListener(TuxGuitar.instance().getAction(SetWholeDurationAction.NAME)); //--half-- this.half = new MenuItem(this.menu, SWT.PUSH); this.half.addSelectionListener(TuxGuitar.instance().getAction(SetHalfDurationAction.NAME)); //--quarter-- this.quarter = new MenuItem(this.menu, SWT.PUSH); this.quarter.addSelectionListener(TuxGuitar.instance().getAction(SetQuarterDurationAction.NAME)); //--Eighth-- this.eighth = new MenuItem(this.menu, SWT.PUSH); this.eighth.addSelectionListener(TuxGuitar.instance().getAction(SetEighthDurationAction.NAME)); //--sixteenth-- this.sixteenth = new MenuItem(this.menu, SWT.PUSH); this.sixteenth.addSelectionListener(TuxGuitar.instance().getAction(SetSixteenthDurationAction.NAME)); //--thirtySecond-- this.thirtySecond = new MenuItem(this.menu, SWT.PUSH); this.thirtySecond.addSelectionListener(TuxGuitar.instance().getAction(SetThirtySecondDurationAction.NAME)); //--sixtyFourth-- this.sixtyFourth = new MenuItem(this.menu, SWT.PUSH); this.sixtyFourth.addSelectionListener(TuxGuitar.instance().getAction(SetSixtyFourthDurationAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--dotted--- this.dotted = new MenuItem(this.menu, SWT.PUSH); this.dotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDottedDurationAction.NAME)); this.doubleDotted = new MenuItem(this.menu, SWT.PUSH); this.doubleDotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDoubleDottedDurationAction.NAME)); //--division--- this.division = new MenuItem(this.menu, SWT.PUSH); this.division.addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.durationMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.whole.setEnabled(!running); this.half.setEnabled(!running); this.quarter.setEnabled(!running); this.eighth.setEnabled(!running); this.sixteenth.setEnabled(!running); this.thirtySecond.setEnabled(!running); this.sixtyFourth.setEnabled(!running); this.dotted.setEnabled(!running); this.doubleDotted.setEnabled(!running); this.division.setEnabled(!running); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.durationMenuItem, "duration", null); setMenuItemTextAndAccelerator(this.whole, "duration.whole", SetWholeDurationAction.NAME); setMenuItemTextAndAccelerator(this.half, "duration.half", SetHalfDurationAction.NAME); setMenuItemTextAndAccelerator(this.quarter, "duration.quarter", SetQuarterDurationAction.NAME); setMenuItemTextAndAccelerator(this.eighth, "duration.eighth", SetEighthDurationAction.NAME); setMenuItemTextAndAccelerator(this.sixteenth, "duration.sixteenth", SetSixteenthDurationAction.NAME); setMenuItemTextAndAccelerator(this.thirtySecond, "duration.thirtysecond", SetThirtySecondDurationAction.NAME); setMenuItemTextAndAccelerator(this.sixtyFourth, "duration.sixtyfourth", SetSixtyFourthDurationAction.NAME); setMenuItemTextAndAccelerator(this.dotted, "duration.dotted", ChangeDottedDurationAction.NAME); setMenuItemTextAndAccelerator(this.doubleDotted, "duration.doubledotted", ChangeDoubleDottedDurationAction.NAME); setMenuItemTextAndAccelerator(this.division, "duration.division-type", ChangeDivisionTypeAction.NAME); } public void loadIcons() { this.whole.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.WHOLE)); this.half.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.HALF)); this.quarter.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER)); this.eighth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH)); this.sixteenth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH)); this.thirtySecond.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND)); this.sixtyFourth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH)); this.dotted.setImage(TuxGuitar.instance().getIconManager().getDurationDotted()); this.doubleDotted.setImage(TuxGuitar.instance().getIconManager().getDurationDoubleDotted()); this.division.setImage(TuxGuitar.instance().getIconManager().getDivisionType()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DynamicMenuItem.java0000644000175000017500000001201011273045224030711 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.note.ChangeVelocityAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGVelocities; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DynamicMenuItem extends MenuItems{ private MenuItem dynamicMenuItem; private Menu menu; private MenuItem pianoPianissimo; private MenuItem pianissimo; private MenuItem piano; private MenuItem mezzoPiano; private MenuItem mezzoForte; private MenuItem forte; private MenuItem fortissimo; private MenuItem forteFortissimo; public DynamicMenuItem(Shell shell,Menu parent, int style) { this.dynamicMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ this.pianoPianissimo = new MenuItem(this.menu, SWT.CHECK); this.pianoPianissimo.setData(new Integer(TGVelocities.PIANO_PIANISSIMO)); this.pianoPianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.pianissimo = new MenuItem(this.menu, SWT.CHECK); this.pianissimo.setData(new Integer(TGVelocities.PIANISSIMO)); this.pianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.piano = new MenuItem(this.menu, SWT.CHECK); this.piano.setData(new Integer(TGVelocities.PIANO)); this.piano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.mezzoPiano = new MenuItem(this.menu, SWT.CHECK); this.mezzoPiano.setData(new Integer(TGVelocities.MEZZO_PIANO)); this.mezzoPiano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.mezzoForte = new MenuItem(this.menu, SWT.CHECK); this.mezzoForte.setData(new Integer(TGVelocities.MEZZO_FORTE)); this.mezzoForte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.forte = new MenuItem(this.menu, SWT.CHECK); this.forte.setData(new Integer(TGVelocities.FORTE)); this.forte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.fortissimo = new MenuItem(this.menu, SWT.CHECK); this.fortissimo.setData(new Integer(TGVelocities.FORTISSIMO)); this.fortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.forteFortissimo = new MenuItem(this.menu, SWT.CHECK); this.forteFortissimo.setData(new Integer(TGVelocities.FORTE_FORTISSIMO)); this.forteFortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.dynamicMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote(); int velocity = ((note != null)?note.getVelocity():TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getVelocity()); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.pianoPianissimo.setSelection(velocity == TGVelocities.PIANO_PIANISSIMO); this.pianoPianissimo.setEnabled(!running); this.pianissimo.setSelection(velocity == TGVelocities.PIANISSIMO); this.pianissimo.setEnabled(!running); this.piano.setSelection(velocity == TGVelocities.PIANO); this.piano.setEnabled(!running); this.mezzoPiano.setSelection(velocity == TGVelocities.MEZZO_PIANO); this.mezzoPiano.setEnabled(!running); this.mezzoForte.setSelection(velocity == TGVelocities.MEZZO_FORTE); this.mezzoForte.setEnabled(!running); this.forte.setSelection(velocity == TGVelocities.FORTE); this.forte.setEnabled(!running); this.fortissimo.setSelection(velocity == TGVelocities.FORTISSIMO); this.fortissimo.setEnabled(!running); this.forteFortissimo.setSelection(velocity == TGVelocities.FORTE_FORTISSIMO); this.forteFortissimo.setEnabled(!running); } public void loadProperties(){ this.dynamicMenuItem.setText(TuxGuitar.getProperty("dynamic")); this.pianoPianissimo.setText(TuxGuitar.getProperty("dynamic.piano-pianissimo")); this.pianissimo.setText(TuxGuitar.getProperty("dynamic.pianissimo")); this.piano.setText(TuxGuitar.getProperty("dynamic.piano")); this.mezzoPiano.setText(TuxGuitar.getProperty("dynamic.mezzo-piano")); this.mezzoForte.setText(TuxGuitar.getProperty("dynamic.mezzo-forte")); this.forte.setText(TuxGuitar.getProperty("dynamic.forte")); this.fortissimo.setText(TuxGuitar.getProperty("dynamic.fortissimo")); this.forteFortissimo.setText(TuxGuitar.getProperty("dynamic.forte-fortissimo")); } public void loadIcons(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/EditMenuItem.java0000644000175000017500000001140311273045224030217 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.edit.RedoAction; import org.herac.tuxguitar.gui.actions.edit.SetMouseModeEditionAction; import org.herac.tuxguitar.gui.actions.edit.SetMouseModeSelectionAction; import org.herac.tuxguitar.gui.actions.edit.SetNaturalKeyAction; import org.herac.tuxguitar.gui.actions.edit.SetVoice1Action; import org.herac.tuxguitar.gui.actions.edit.SetVoice2Action; import org.herac.tuxguitar.gui.actions.edit.UndoAction; import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class EditMenuItem extends MenuItems{ private MenuItem editMenuItem; private Menu menu; private MenuItem undo; private MenuItem redo; private MenuItem modeSelection; private MenuItem modeEdition; private MenuItem notNaturalKey; private MenuItem voice1; private MenuItem voice2; public EditMenuItem(Shell shell,Menu parent, int style) { this.editMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--------------------------------------------------- //--UNDO-- this.undo = new MenuItem(this.menu, SWT.PUSH); this.undo.addSelectionListener(TuxGuitar.instance().getAction(UndoAction.NAME)); //--REDO-- this.redo = new MenuItem(this.menu, SWT.PUSH); this.redo.addSelectionListener(TuxGuitar.instance().getAction(RedoAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--TABLATURE EDIT MODE this.modeSelection = new MenuItem(this.menu, SWT.RADIO); this.modeSelection.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeSelectionAction.NAME)); //--SCORE EDIT MODE this.modeEdition = new MenuItem(this.menu, SWT.RADIO); this.modeEdition.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeEditionAction.NAME)); //--NATURAL NOTES this.notNaturalKey = new MenuItem(this.menu, SWT.CHECK); this.notNaturalKey.addSelectionListener(TuxGuitar.instance().getAction(SetNaturalKeyAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--VOICE 1 this.voice1 = new MenuItem(this.menu, SWT.RADIO); this.voice1.addSelectionListener(TuxGuitar.instance().getAction(SetVoice1Action.NAME)); //--VOICE 2 this.voice2 = new MenuItem(this.menu, SWT.RADIO); this.voice2.addSelectionListener(TuxGuitar.instance().getAction(SetVoice2Action.NAME)); this.editMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ EditorKit kit = TuxGuitar.instance().getTablatureEditor().getTablature().getEditorKit(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.undo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canUndo()); this.redo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canRedo()); this.modeSelection.setSelection(kit.getMouseMode() == EditorKit.MOUSE_MODE_SELECTION); this.modeSelection.setEnabled(!running); this.modeEdition.setSelection(kit.getMouseMode() == EditorKit.MOUSE_MODE_EDITION); this.modeEdition.setEnabled(!running); this.notNaturalKey.setSelection(!kit.isNatural()); this.notNaturalKey.setEnabled(!running && kit.getMouseMode() == EditorKit.MOUSE_MODE_EDITION); this.voice1.setSelection(kit.getTablature().getCaret().getVoice() == 0); this.voice2.setSelection(kit.getTablature().getCaret().getVoice() == 1); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.editMenuItem, "edit.menu", null); setMenuItemTextAndAccelerator(this.undo, "edit.undo", UndoAction.NAME); setMenuItemTextAndAccelerator(this.redo, "edit.redo", RedoAction.NAME); setMenuItemTextAndAccelerator(this.modeSelection, "edit.mouse-mode-selection", SetMouseModeSelectionAction.NAME); setMenuItemTextAndAccelerator(this.modeEdition, "edit.mouse-mode-edition", SetMouseModeEditionAction.NAME); setMenuItemTextAndAccelerator(this.notNaturalKey, "edit.not-natural-key", SetNaturalKeyAction.NAME); setMenuItemTextAndAccelerator(this.voice1, "edit.voice-1", SetVoice1Action.NAME); setMenuItemTextAndAccelerator(this.voice2, "edit.voice-2", SetVoice2Action.NAME); } public void loadIcons(){ this.undo.setImage(TuxGuitar.instance().getIconManager().getEditUndo()); this.redo.setImage(TuxGuitar.instance().getIconManager().getEditRedo()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/FileMenuItem.java0000644000175000017500000002603511273045224030220 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.file.ExitAction; import org.herac.tuxguitar.gui.actions.file.ExportSongAction; import org.herac.tuxguitar.gui.actions.file.ImportSongAction; import org.herac.tuxguitar.gui.actions.file.NewFileAction; import org.herac.tuxguitar.gui.actions.file.OpenFileAction; import org.herac.tuxguitar.gui.actions.file.OpenURLAction; import org.herac.tuxguitar.gui.actions.file.PrintAction; import org.herac.tuxguitar.gui.actions.file.PrintPreviewAction; import org.herac.tuxguitar.gui.actions.file.SaveAsFileAction; import org.herac.tuxguitar.gui.actions.file.SaveFileAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.base.TGRawExporter; import org.herac.tuxguitar.io.base.TGRawImporter; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class FileMenuItem extends MenuItems { private MenuItem fileMenuItem; private Menu menu; private Menu importMenu; private Menu exportMenu; private Menu historyMenu; private MenuItem newSong; private MenuItem open; private MenuItem openURL; private MenuItem save; private MenuItem saveAs; private MenuItem importItem; private MenuItem exportItem; private MenuItem printPreview; private MenuItem print; private MenuItem historyItem; private MenuItem[] historyFiles; private MenuItem exit; private List importItems; private List exportItems; public FileMenuItem(Shell shell,Menu parent, int style) { this.fileMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); this.importItems = new ArrayList(); this.exportItems = new ArrayList(); } public void showItems(){ //--------------------------------------------------- //--NEW-- this.newSong = new MenuItem(this.menu, SWT.PUSH); this.newSong.addSelectionListener(TuxGuitar.instance().getAction(NewFileAction.NAME)); //--OPEN-- this.open = new MenuItem(this.menu, SWT.PUSH); this.open.addSelectionListener(TuxGuitar.instance().getAction(OpenFileAction.NAME)); //--OPEN-- this.openURL = new MenuItem(this.menu, SWT.PUSH); this.openURL.addSelectionListener(TuxGuitar.instance().getAction(OpenURLAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--SAVE-- this.save = new MenuItem(this.menu, SWT.PUSH); this.save.addSelectionListener(TuxGuitar.instance().getAction(SaveFileAction.NAME)); //--SAVE AS-- this.saveAs = new MenuItem(this.menu, SWT.PUSH); this.saveAs.addSelectionListener(TuxGuitar.instance().getAction(SaveAsFileAction.NAME)); //-- IMPORT | EXPORT -- int countImporters = TGFileFormatManager.instance().countImporters(); int countExporters = TGFileFormatManager.instance().countExporters(); if( ( countImporters + countExporters ) > 0 ){ //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--IMPORT-- this.importItems.clear(); if( countImporters > 0 ){ this.importItem = new MenuItem(this.menu,SWT.CASCADE); this.importMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN); this.addImporters(); } //--EXPORT-- this.exportItems.clear(); if( countExporters > 0 ){ this.exportItem = new MenuItem(this.menu,SWT.CASCADE); this.exportMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN); this.addExporters(); } } //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--PRINT PREVIEW-- this.printPreview = new MenuItem(this.menu, SWT.PUSH); this.printPreview.addSelectionListener(TuxGuitar.instance().getAction(PrintPreviewAction.NAME)); //--PRINT-- this.print = new MenuItem(this.menu, SWT.PUSH); this.print.addSelectionListener(TuxGuitar.instance().getAction(PrintAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--HISTORY-- this.historyItem = new MenuItem(this.menu,SWT.CASCADE); this.historyMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN); this.updateHistoryFiles(); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--EXIT-- this.exit = new MenuItem(this.menu, SWT.PUSH); this.exit.addSelectionListener(TuxGuitar.instance().getAction(ExitAction.NAME)); //--------------------------------------------------- if( this.importItem != null ){ this.importItem.setMenu(this.importMenu); } if( this.exportItem != null ){ this.exportItem.setMenu(this.exportMenu); } this.historyItem.setMenu(this.historyMenu); this.fileMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } private void addImporters(){ List importersRaw = new ArrayList(); List importersFile = new ArrayList(); Iterator importers = TGFileFormatManager.instance().getImporters(); while(importers.hasNext()){ TGRawImporter importer = (TGRawImporter)importers.next(); if( importer instanceof TGLocalFileImporter ){ importersFile.add( importer ); }else{ importersRaw.add( importer ); } } for( int i = 0 ; i < importersFile.size() ; i ++ ){ TGRawImporter importer = (TGRawImporter)importersFile.get( i ); MenuItem item = new MenuItem(this.importMenu, SWT.PUSH); item.setData(importer); item.addSelectionListener(TuxGuitar.instance().getAction(ImportSongAction.NAME)); this.importItems.add( item ); } //--SEPARATOR-- if( !importersFile.isEmpty() && !importersRaw.isEmpty() ){ new MenuItem(this.importMenu, SWT.SEPARATOR); } for( int i = 0 ; i < importersRaw.size() ; i ++ ){ TGRawImporter importer = (TGRawImporter)importersRaw.get( i ); MenuItem item = new MenuItem(this.importMenu, SWT.PUSH); item.setData(importer); item.addSelectionListener(TuxGuitar.instance().getAction(ImportSongAction.NAME)); this.importItems.add( item ); } } private void addExporters(){ List exportersRaw = new ArrayList(); List exportersFile = new ArrayList(); Iterator exporters = TGFileFormatManager.instance().getExporters(); while(exporters.hasNext()){ TGRawExporter exporter = (TGRawExporter)exporters.next(); if( exporter instanceof TGLocalFileExporter ){ exportersFile.add( exporter ); }else{ exportersRaw.add( exporter ); } } for( int i = 0 ; i < exportersFile.size() ; i ++ ){ TGRawExporter exporter = (TGRawExporter)exportersFile.get( i ); MenuItem item = new MenuItem(this.exportMenu, SWT.PUSH); item.setData(exporter); item.addSelectionListener(TuxGuitar.instance().getAction(ExportSongAction.NAME)); this.exportItems.add( item ); } //--SEPARATOR-- if( !exportersFile.isEmpty() && !exportersRaw.isEmpty() ){ new MenuItem(this.exportMenu, SWT.SEPARATOR); } for( int i = 0 ; i < exportersRaw.size() ; i ++ ){ TGRawExporter exporter = (TGRawExporter)exportersRaw.get( i ); MenuItem item = new MenuItem(this.exportMenu, SWT.PUSH); item.setData(exporter); item.addSelectionListener(TuxGuitar.instance().getAction(ExportSongAction.NAME)); this.exportItems.add( item ); } } private void disposeHistoryFiles(){ for(int i = 0;i < this.historyFiles.length; i++){ this.historyFiles[i].dispose(); } } private void updateHistoryFiles(){ List urls = TuxGuitar.instance().getFileHistory().getURLs(); this.historyFiles = new MenuItem[urls.size()]; for(int i = 0;i < this.historyFiles.length; i++){ URL url = (URL)urls.get(i); this.historyFiles[i] = new MenuItem(this.historyMenu, SWT.PUSH); this.historyFiles[i].setText(decode(url.toString())); this.historyFiles[i].setData(url); this.historyFiles[i].addSelectionListener(TuxGuitar.instance().getAction(OpenFileAction.NAME)); } this.historyItem.setEnabled(this.historyFiles.length > 0); } private String decode(String url){ try { return URLDecoder.decode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return url; } public void update(){ if(TuxGuitar.instance().getFileHistory().isChanged()){ disposeHistoryFiles(); updateHistoryFiles(); TuxGuitar.instance().getFileHistory().setChanged(false); } } public void loadProperties(){ setMenuItemTextAndAccelerator(this.fileMenuItem, "file", null); setMenuItemTextAndAccelerator(this.newSong, "file.new", NewFileAction.NAME); setMenuItemTextAndAccelerator(this.open, "file.open", OpenFileAction.NAME); setMenuItemTextAndAccelerator(this.openURL, "file.open-url", OpenURLAction.NAME); setMenuItemTextAndAccelerator(this.save, "file.save", SaveFileAction.NAME); setMenuItemTextAndAccelerator(this.saveAs, "file.save-as", SaveAsFileAction.NAME); setMenuItemTextAndAccelerator(this.printPreview, "file.print-preview", PrintPreviewAction.NAME); setMenuItemTextAndAccelerator(this.print, "file.print", PrintAction.NAME); setMenuItemTextAndAccelerator(this.historyItem, "file.history", null); setMenuItemTextAndAccelerator(this.exit, "file.exit", ExitAction.NAME); if( this.importItem != null ){ setMenuItemTextAndAccelerator(this.importItem, "file.import", ImportSongAction.NAME); Iterator importItems = this.importItems.iterator(); while(importItems.hasNext()){ MenuItem item = (MenuItem)importItems.next(); if( item.getData() instanceof TGLocalFileImporter ){ item.setText(TuxGuitar.getProperty("file.import") + " " + ((TGRawImporter)item.getData()).getImportName()); }else if( item.getData() instanceof TGRawImporter ){ item.setText(((TGRawImporter)item.getData()).getImportName()); } } } if( this.exportItem != null ){ setMenuItemTextAndAccelerator(this.exportItem, "file.export", ExportSongAction.NAME); Iterator exportItems = this.exportItems.iterator(); while(exportItems.hasNext()){ MenuItem item = (MenuItem)exportItems.next(); if( item.getData() instanceof TGLocalFileExporter ){ item.setText(TuxGuitar.getProperty("file.export") + " " + ((TGRawExporter)item.getData()).getExportName()); }else if( item.getData() instanceof TGRawExporter ){ item.setText(((TGRawExporter)item.getData()).getExportName()); } } } } public void loadIcons(){ this.newSong.setImage(TuxGuitar.instance().getIconManager().getFileNew()); this.open.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); this.save.setImage(TuxGuitar.instance().getIconManager().getFileSave()); this.saveAs.setImage(TuxGuitar.instance().getIconManager().getFileSaveAs()); this.printPreview.setImage(TuxGuitar.instance().getIconManager().getFilePrintPreview()); this.print.setImage(TuxGuitar.instance().getIconManager().getFilePrint()); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/HelpMenuItem.java0000644000175000017500000000340611273045224030226 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.help.ShowAboutAction; import org.herac.tuxguitar.gui.actions.help.ShowDocAction; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class HelpMenuItem extends MenuItems{ private MenuItem helpMenuItem; private Menu menu; private MenuItem doc; private MenuItem about; public HelpMenuItem(Shell shell,Menu parent, int style) { this.helpMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--Doc this.doc = new MenuItem(this.menu, SWT.PUSH); this.doc.addSelectionListener(TuxGuitar.instance().getAction(ShowDocAction.NAME)); //--ABOUT this.about = new MenuItem(this.menu, SWT.PUSH); this.about.addSelectionListener(TuxGuitar.instance().getAction(ShowAboutAction.NAME)); this.helpMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.helpMenuItem, "help", null); setMenuItemTextAndAccelerator(this.doc, "help.doc", ShowDocAction.NAME); setMenuItemTextAndAccelerator(this.about, "help.about", ShowAboutAction.NAME); } public void loadIcons(){ //Nothing to do } public void update(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MarkerMenuItem.java0000644000175000017500000000720111273045224030554 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.marker.AddMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoFirstMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoLastMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoNextMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoPreviousMarkerAction; import org.herac.tuxguitar.gui.actions.marker.ListMarkersAction; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MarkerMenuItem extends MenuItems{ private MenuItem markerMenuItem; private Menu menu; private MenuItem add; private MenuItem list; private MenuItem first; private MenuItem last; private MenuItem next; private MenuItem previous; public MarkerMenuItem(Shell shell,Menu parent, int style) { this.markerMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--ADD-- this.add = new MenuItem(this.menu, SWT.PUSH); this.add.addSelectionListener(TuxGuitar.instance().getAction(AddMarkerAction.NAME)); //--LIST-- this.list = new MenuItem(this.menu, SWT.PUSH); this.list.addSelectionListener(TuxGuitar.instance().getAction(ListMarkersAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--FIRST-- this.first = new MenuItem(this.menu, SWT.PUSH); this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstMarkerAction.NAME)); //--PREVIOUS-- this.previous = new MenuItem(this.menu, SWT.PUSH); this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousMarkerAction.NAME)); //--PREVIOUS-- this.next = new MenuItem(this.menu, SWT.PUSH); this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextMarkerAction.NAME)); //--LAST-- this.last = new MenuItem(this.menu, SWT.PUSH); this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastMarkerAction.NAME)); this.markerMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ //Nothing to do } public void loadProperties(){ setMenuItemTextAndAccelerator(this.markerMenuItem, "marker", null); setMenuItemTextAndAccelerator(this.add, "marker.add", AddMarkerAction.NAME); setMenuItemTextAndAccelerator(this.list, "marker.list", ListMarkersAction.NAME); setMenuItemTextAndAccelerator(this.first, "marker.first", GoFirstMarkerAction.NAME); setMenuItemTextAndAccelerator(this.last, "marker.last", GoLastMarkerAction.NAME); setMenuItemTextAndAccelerator(this.previous, "marker.previous", GoPreviousMarkerAction.NAME); setMenuItemTextAndAccelerator(this.next, "marker.next", GoNextMarkerAction.NAME); } public void loadIcons(){ this.add.setImage(TuxGuitar.instance().getIconManager().getMarkerAdd()); this.list.setImage(TuxGuitar.instance().getIconManager().getMarkerList()); this.first.setImage(TuxGuitar.instance().getIconManager().getMarkerFirst()); this.previous.setImage(TuxGuitar.instance().getIconManager().getMarkerPrevious()); this.next.setImage(TuxGuitar.instance().getIconManager().getMarkerNext()); this.last.setImage(TuxGuitar.instance().getIconManager().getMarkerLast()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MeasureMenuItem.java0000644000175000017500000001220711273045224030736 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.measure.AddMeasureAction; import org.herac.tuxguitar.gui.actions.measure.CleanMeasureAction; import org.herac.tuxguitar.gui.actions.measure.CopyMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoFirstMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoLastMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoNextMeasureAction; import org.herac.tuxguitar.gui.actions.measure.GoPreviousMeasureAction; import org.herac.tuxguitar.gui.actions.measure.PasteMeasureAction; import org.herac.tuxguitar.gui.actions.measure.RemoveMeasureAction; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MeasureMenuItem extends MenuItems{ private MenuItem measureMenuItem; private Menu menu; private MenuItem first; private MenuItem last; private MenuItem next; private MenuItem previous; private MenuItem addMeasure; private MenuItem cleanMeasure; private MenuItem removeMeasure; private MenuItem copyMeasure; private MenuItem pasteMeasure; public MeasureMenuItem(Shell shell,Menu parent, int style) { this.measureMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--first-- this.first = new MenuItem(this.menu, SWT.PUSH); this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstMeasureAction.NAME)); //--previous-- this.previous = new MenuItem(this.menu, SWT.PUSH); this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousMeasureAction.NAME)); //--next-- this.next = new MenuItem(this.menu, SWT.PUSH); this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextMeasureAction.NAME)); //--last-- this.last = new MenuItem(this.menu, SWT.PUSH); this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastMeasureAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--add-- this.addMeasure = new MenuItem(this.menu, SWT.PUSH); this.addMeasure.addSelectionListener(TuxGuitar.instance().getAction(AddMeasureAction.NAME)); //--clean-- this.cleanMeasure = new MenuItem(this.menu, SWT.PUSH); this.cleanMeasure.addSelectionListener(TuxGuitar.instance().getAction(CleanMeasureAction.NAME)); //--remove-- this.removeMeasure = new MenuItem(this.menu, SWT.PUSH); this.removeMeasure.addSelectionListener(TuxGuitar.instance().getAction(RemoveMeasureAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--copy-- this.copyMeasure = new MenuItem(this.menu, SWT.PUSH); this.copyMeasure.addSelectionListener(TuxGuitar.instance().getAction(CopyMeasureAction.NAME)); //--paste-- this.pasteMeasure = new MenuItem(this.menu, SWT.PUSH); this.pasteMeasure.addSelectionListener(TuxGuitar.instance().getAction(PasteMeasureAction.NAME)); this.measureMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ TGMeasureImpl measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); boolean isFirst = (measure.getNumber() == 1); boolean isLast = (measure.getNumber() == measure.getTrack().countMeasures()); this.first.setEnabled(!isFirst); this.previous.setEnabled(!isFirst); this.next.setEnabled(!isLast); this.last.setEnabled(!isLast); this.addMeasure.setEnabled(!running); this.cleanMeasure.setEnabled(!running); this.removeMeasure.setEnabled(!running); this.copyMeasure.setEnabled(!running); this.pasteMeasure.setEnabled(!running && !TuxGuitar.instance().getTablatureEditor().getClipBoard().isEmpty()); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.measureMenuItem, "measure", null); setMenuItemTextAndAccelerator(this.first, "measure.first", GoFirstMeasureAction.NAME); setMenuItemTextAndAccelerator(this.last, "measure.last", GoLastMeasureAction.NAME); setMenuItemTextAndAccelerator(this.previous, "measure.previous", GoPreviousMeasureAction.NAME); setMenuItemTextAndAccelerator(this.next, "measure.next", GoNextMeasureAction.NAME); setMenuItemTextAndAccelerator(this.addMeasure, "measure.add", AddMeasureAction.NAME); setMenuItemTextAndAccelerator(this.cleanMeasure, "measure.clean", CleanMeasureAction.NAME); setMenuItemTextAndAccelerator(this.removeMeasure, "measure.remove", RemoveMeasureAction.NAME); setMenuItemTextAndAccelerator(this.copyMeasure, "measure.copy", CopyMeasureAction.NAME); setMenuItemTextAndAccelerator(this.pasteMeasure, "measure.paste", PasteMeasureAction.NAME); } public void loadIcons(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/NoteEffectsMenuItem.java0000644000175000017500000002603711273045224031550 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.effects.ChangeAccentuatedNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeBendNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeDeadNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeFadeInAction; import org.herac.tuxguitar.gui.actions.effects.ChangeGhostNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeGraceNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHammerNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHarmonicNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHeavyAccentuatedNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangePalmMuteAction; import org.herac.tuxguitar.gui.actions.effects.ChangePoppingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeSlappingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeSlideNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeStaccatoAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTappingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloBarAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloPickingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTrillNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeVibratoNoteAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class NoteEffectsMenuItem extends MenuItems{ private MenuItem noteEffectsMenuItem; private Menu menu; private MenuItem vibrato; private MenuItem bend; private MenuItem tremoloBar; private MenuItem deadNote; private MenuItem slide; private MenuItem hammer; private MenuItem ghostNote; private MenuItem accentuatedNote; private MenuItem heavyAccentuatedNote; private MenuItem harmonicNote; private MenuItem graceNote; private MenuItem trill; private MenuItem tremoloPicking; private MenuItem palmMute; private MenuItem staccato; private MenuItem tapping; private MenuItem slapping; private MenuItem popping; private MenuItem fadeIn; public NoteEffectsMenuItem(Shell shell,Menu parent, int style) { this.noteEffectsMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--VIBRATO-- this.vibrato = new MenuItem(this.menu, SWT.CHECK); this.vibrato.addSelectionListener(TuxGuitar.instance().getAction(ChangeVibratoNoteAction.NAME)); //--BEND-- this.bend = new MenuItem(this.menu, SWT.CHECK); this.bend.addSelectionListener(TuxGuitar.instance().getAction(ChangeBendNoteAction.NAME)); //--BEND-- this.tremoloBar = new MenuItem(this.menu, SWT.CHECK); this.tremoloBar.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloBarAction.NAME)); //--SLIDE-- this.slide = new MenuItem(this.menu, SWT.CHECK); this.slide.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlideNoteAction.NAME)); //--SLIDE-- this.deadNote = new MenuItem(this.menu, SWT.CHECK); this.deadNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeDeadNoteAction.NAME)); //--HAMMER-- this.hammer = new MenuItem(this.menu, SWT.CHECK); this.hammer.addSelectionListener(TuxGuitar.instance().getAction(ChangeHammerNoteAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--GHOST NOTE-- this.ghostNote = new MenuItem(this.menu, SWT.CHECK); this.ghostNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGhostNoteAction.NAME)); //--ACCENTUATED NOTE-- this.accentuatedNote = new MenuItem(this.menu, SWT.CHECK); this.accentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeAccentuatedNoteAction.NAME)); //--HEAVY ACCENTUATED NOTE-- this.heavyAccentuatedNote = new MenuItem(this.menu, SWT.CHECK); this.heavyAccentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHeavyAccentuatedNoteAction.NAME)); //--HARMONIC NOTE-- this.harmonicNote = new MenuItem(this.menu, SWT.CHECK); this.harmonicNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHarmonicNoteAction.NAME)); //--GRACE NOTE-- this.graceNote = new MenuItem(this.menu, SWT.CHECK); this.graceNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGraceNoteAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--TRILL-- this.trill = new MenuItem(this.menu, SWT.CHECK); this.trill.addSelectionListener(TuxGuitar.instance().getAction(ChangeTrillNoteAction.NAME)); //--TREMOLO PICKING-- this.tremoloPicking = new MenuItem(this.menu, SWT.CHECK); this.tremoloPicking.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloPickingAction.NAME)); //--PALM MUTE-- this.palmMute = new MenuItem(this.menu, SWT.CHECK); this.palmMute.addSelectionListener(TuxGuitar.instance().getAction(ChangePalmMuteAction.NAME)); //--STACCATO this.staccato = new MenuItem(this.menu, SWT.CHECK); this.staccato.addSelectionListener(TuxGuitar.instance().getAction(ChangeStaccatoAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--TAPPING this.tapping = new MenuItem(this.menu, SWT.CHECK); this.tapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeTappingAction.NAME)); //--SLAPPING this.slapping = new MenuItem(this.menu, SWT.CHECK); this.slapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlappingAction.NAME)); //--POPPING this.popping = new MenuItem(this.menu, SWT.CHECK); this.popping.addSelectionListener(TuxGuitar.instance().getAction(ChangePoppingAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--FADE IN this.fadeIn = new MenuItem(this.menu, SWT.CHECK); this.fadeIn.addSelectionListener(TuxGuitar.instance().getAction(ChangeFadeInAction.NAME)); this.noteEffectsMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.vibrato.setSelection(note != null && note.getEffect().isVibrato()); this.vibrato.setEnabled(!running && note != null); this.bend.setSelection(note != null && note.getEffect().isBend()); this.bend.setEnabled(!running && note != null); this.tremoloBar.setSelection(note != null && note.getEffect().isTremoloBar()); this.tremoloBar.setEnabled(!running && note != null); this.deadNote.setSelection(note != null && note.getEffect().isDeadNote()); this.deadNote.setEnabled(!running && note != null); this.slide.setSelection(note != null && note.getEffect().isSlide()); this.slide.setEnabled(!running && note != null); this.hammer.setSelection(note != null && note.getEffect().isHammer()); this.hammer.setEnabled(!running && note != null); this.ghostNote.setSelection(note != null && note.getEffect().isGhostNote()); this.ghostNote.setEnabled(!running && note != null); this.accentuatedNote.setSelection(note != null && note.getEffect().isAccentuatedNote()); this.accentuatedNote.setEnabled(!running && note != null); this.heavyAccentuatedNote.setSelection(note != null && note.getEffect().isHeavyAccentuatedNote()); this.heavyAccentuatedNote.setEnabled(!running && note != null); this.harmonicNote.setSelection(note != null && note.getEffect().isHarmonic()); this.harmonicNote.setEnabled(!running && note != null); this.graceNote.setSelection(note != null && note.getEffect().isGrace()); this.graceNote.setEnabled(!running && note != null); this.trill.setSelection(note != null && note.getEffect().isTrill()); this.trill.setEnabled(!running && note != null); this.tremoloPicking.setSelection(note != null && note.getEffect().isTremoloPicking()); this.tremoloPicking.setEnabled(!running && note != null); this.palmMute.setSelection(note != null && note.getEffect().isPalmMute()); this.palmMute.setEnabled(!running && note != null); this.staccato.setSelection(note != null && note.getEffect().isStaccato()); this.staccato.setEnabled(!running && note != null); this.tapping.setSelection(note != null && note.getEffect().isTapping()); this.tapping.setEnabled(!running && note != null); this.slapping.setSelection(note != null && note.getEffect().isSlapping()); this.slapping.setEnabled(!running && note != null); this.popping.setSelection(note != null && note.getEffect().isPopping()); this.popping.setEnabled(!running && note != null); this.fadeIn.setSelection(note != null && note.getEffect().isFadeIn()); this.fadeIn.setEnabled(!running && note != null); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.noteEffectsMenuItem, "effects", null); setMenuItemTextAndAccelerator(this.vibrato, "effects.vibrato", ChangeVibratoNoteAction.NAME); setMenuItemTextAndAccelerator(this.bend, "effects.bend", ChangeBendNoteAction.NAME); setMenuItemTextAndAccelerator(this.tremoloBar, "effects.tremolo-bar", ChangeTremoloBarAction.NAME); setMenuItemTextAndAccelerator(this.deadNote, "effects.deadnote", ChangeDeadNoteAction.NAME); setMenuItemTextAndAccelerator(this.slide, "effects.slide", ChangeSlideNoteAction.NAME); setMenuItemTextAndAccelerator(this.hammer, "effects.hammer", ChangeHammerNoteAction.NAME); setMenuItemTextAndAccelerator(this.ghostNote, "effects.ghostnote", ChangeGhostNoteAction.NAME); setMenuItemTextAndAccelerator(this.accentuatedNote, "effects.accentuatednote", ChangeAccentuatedNoteAction.NAME); setMenuItemTextAndAccelerator(this.heavyAccentuatedNote, "effects.heavyaccentuatednote", ChangeHeavyAccentuatedNoteAction.NAME); setMenuItemTextAndAccelerator(this.harmonicNote, "effects.harmonic", ChangeHarmonicNoteAction.NAME); setMenuItemTextAndAccelerator(this.graceNote, "effects.grace", ChangeGraceNoteAction.NAME); setMenuItemTextAndAccelerator(this.trill, "effects.trill", ChangeTrillNoteAction.NAME); setMenuItemTextAndAccelerator(this.tremoloPicking, "effects.tremolo-picking", ChangeTremoloPickingAction.NAME); setMenuItemTextAndAccelerator(this.palmMute, "effects.palm-mute", ChangePalmMuteAction.NAME); setMenuItemTextAndAccelerator(this.staccato, "effects.staccato", ChangeStaccatoAction.NAME); setMenuItemTextAndAccelerator(this.tapping, "effects.tapping", ChangeTappingAction.NAME); setMenuItemTextAndAccelerator(this.slapping, "effects.slapping", ChangeSlappingAction.NAME); setMenuItemTextAndAccelerator(this.popping, "effects.popping", ChangePoppingAction.NAME); setMenuItemTextAndAccelerator(this.fadeIn, "effects.fade-in", ChangeFadeInAction.NAME); } public void loadIcons(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ToolMenuItem.java0000644000175000017500000000736611273045224030264 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.settings.EditConfigAction; import org.herac.tuxguitar.gui.actions.settings.EditKeyBindingsAction; import org.herac.tuxguitar.gui.actions.settings.EditPluginsAction; import org.herac.tuxguitar.gui.actions.tools.ScaleAction; import org.herac.tuxguitar.gui.actions.tools.TGBrowserAction; import org.herac.tuxguitar.gui.actions.tools.TransposeAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.gui.tools.custom.TGCustomTool; import org.herac.tuxguitar.gui.tools.custom.TGCustomToolManager; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class ToolMenuItem extends MenuItems { private MenuItem settingsMenuItem; private Menu menu; private MenuItem scale; private MenuItem browser; private MenuItem transpose; private MenuItem plugins; private MenuItem config; private MenuItem keyBindings; public ToolMenuItem(Shell shell,Menu parent, int style) { this.settingsMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ this.transpose = new MenuItem(this.menu, SWT.PUSH); this.transpose.addSelectionListener(TuxGuitar.instance().getAction(TransposeAction.NAME)); this.scale = new MenuItem(this.menu, SWT.PUSH); this.scale.addSelectionListener(TuxGuitar.instance().getAction(ScaleAction.NAME)); this.browser = new MenuItem(this.menu, SWT.PUSH); this.browser.addSelectionListener(TuxGuitar.instance().getAction(TGBrowserAction.NAME)); Iterator it = TGCustomToolManager.instance().getCustomTools(); while(it.hasNext()){ TGCustomTool tool = (TGCustomTool)it.next(); MenuItem menuItem = new MenuItem(this.menu, SWT.PUSH); menuItem.setText(tool.getName()); menuItem.addSelectionListener(TuxGuitar.instance().getAction(tool.getAction())); } //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); //--PLUGINS-- this.plugins = new MenuItem(this.menu, SWT.PUSH); this.plugins.addSelectionListener(TuxGuitar.instance().getAction(EditPluginsAction.NAME)); //--KEY BINDINGS-- this.keyBindings = new MenuItem(this.menu, SWT.PUSH); this.keyBindings.addSelectionListener(TuxGuitar.instance().getAction(EditKeyBindingsAction.NAME)); //--CONFIG-- this.config = new MenuItem(this.menu, SWT.PUSH); this.config.addSelectionListener(TuxGuitar.instance().getAction(EditConfigAction.NAME)); this.settingsMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.settingsMenuItem, "tools", null); setMenuItemTextAndAccelerator(this.transpose, "tools.transpose", TransposeAction.NAME); setMenuItemTextAndAccelerator(this.scale, "tools.scale", ScaleAction.NAME); setMenuItemTextAndAccelerator(this.browser, "tools.browser", TGBrowserAction.NAME); setMenuItemTextAndAccelerator(this.plugins, "tools.plugins", EditPluginsAction.NAME); setMenuItemTextAndAccelerator(this.keyBindings, "tools.shortcuts", EditKeyBindingsAction.NAME); setMenuItemTextAndAccelerator(this.config, "tools.settings", EditConfigAction.NAME); } public void loadIcons(){ //Nothing to do } public void update(){ boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.transpose.setEnabled( !running ); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TrackMenuItem.java0000644000175000017500000001336111273045224030403 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.track.AddTrackAction; import org.herac.tuxguitar.gui.actions.track.CloneTrackAction; import org.herac.tuxguitar.gui.actions.track.EditLyricsAction; import org.herac.tuxguitar.gui.actions.track.GoFirstTrackAction; import org.herac.tuxguitar.gui.actions.track.GoLastTrackAction; import org.herac.tuxguitar.gui.actions.track.GoNextTrackAction; import org.herac.tuxguitar.gui.actions.track.GoPreviousTrackAction; import org.herac.tuxguitar.gui.actions.track.MoveTrackDownAction; import org.herac.tuxguitar.gui.actions.track.MoveTrackUpAction; import org.herac.tuxguitar.gui.actions.track.RemoveTrackAction; import org.herac.tuxguitar.gui.actions.track.TrackPropertiesAction; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TrackMenuItem extends MenuItems{ private MenuItem trackMenuItem; private Menu menu; private MenuItem first; private MenuItem last; private MenuItem next; private MenuItem previous; private MenuItem addTrack; private MenuItem cloneTrack; private MenuItem removeTrack; private MenuItem moveUp; private MenuItem moveDown; private MenuItem lyrics; private MenuItem properties; public TrackMenuItem(Shell shell,Menu parent, int style) { this.trackMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--First-- this.first = new MenuItem(this.menu, SWT.PUSH); this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstTrackAction.NAME)); //--previous-- this.previous = new MenuItem(this.menu, SWT.PUSH); this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousTrackAction.NAME)); //--next-- this.next = new MenuItem(this.menu, SWT.PUSH); this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextTrackAction.NAME)); //--last-- this.last = new MenuItem(this.menu, SWT.PUSH); this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastTrackAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--ADD TRACK-- this.addTrack = new MenuItem(this.menu, SWT.PUSH); this.addTrack.addSelectionListener(TuxGuitar.instance().getAction(AddTrackAction.NAME)); //--CLONE TRACK-- this.cloneTrack = new MenuItem(this.menu, SWT.PUSH); this.cloneTrack.addSelectionListener(TuxGuitar.instance().getAction(CloneTrackAction.NAME)); //--REMOVE TRACK-- this.removeTrack = new MenuItem(this.menu, SWT.PUSH); this.removeTrack.addSelectionListener(TuxGuitar.instance().getAction(RemoveTrackAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--MOVE UP-- this.moveUp = new MenuItem(this.menu, SWT.PUSH); this.moveUp.addSelectionListener(TuxGuitar.instance().getAction(MoveTrackUpAction.NAME)); //--MOVE DOWN-- this.moveDown = new MenuItem(this.menu, SWT.PUSH); this.moveDown.addSelectionListener(TuxGuitar.instance().getAction(MoveTrackDownAction.NAME)); //--SEPARATOR new MenuItem(this.menu, SWT.SEPARATOR); //--LYRICS-- this.lyrics = new MenuItem(this.menu, SWT.PUSH); this.lyrics.addSelectionListener(TuxGuitar.instance().getAction(EditLyricsAction.NAME)); //--PROPERTIES-- this.properties = new MenuItem(this.menu, SWT.PUSH); this.properties.addSelectionListener(TuxGuitar.instance().getAction(TrackPropertiesAction.NAME)); this.trackMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.trackMenuItem, "track", null); setMenuItemTextAndAccelerator(this.first, "track.first", GoFirstTrackAction.NAME); setMenuItemTextAndAccelerator(this.last, "track.last", GoLastTrackAction.NAME); setMenuItemTextAndAccelerator(this.previous, "track.previous", GoPreviousTrackAction.NAME); setMenuItemTextAndAccelerator(this.next, "track.next", GoNextTrackAction.NAME); setMenuItemTextAndAccelerator(this.addTrack, "track.add", AddTrackAction.NAME); setMenuItemTextAndAccelerator(this.cloneTrack, "track.clone", CloneTrackAction.NAME); setMenuItemTextAndAccelerator(this.removeTrack, "track.remove", RemoveTrackAction.NAME); setMenuItemTextAndAccelerator(this.moveUp, "track.move-up", MoveTrackUpAction.NAME); setMenuItemTextAndAccelerator(this.moveDown, "track.move-down", MoveTrackDownAction.NAME); setMenuItemTextAndAccelerator(this.lyrics, "track.lyrics", EditLyricsAction.NAME); setMenuItemTextAndAccelerator(this.properties, "track.properties", TrackPropertiesAction.NAME); } public void update(){ TGTrackImpl track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack(); int tracks = track.getSong().countTracks(); boolean isFirst = (track.getNumber() == 1); boolean isLast = (track.getNumber() == tracks); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.addTrack.setEnabled(!running); this.cloneTrack.setEnabled(!running); this.removeTrack.setEnabled(!running); this.moveUp.setEnabled(!running && tracks > 1); this.moveDown.setEnabled(!running && tracks > 1); this.first.setEnabled(!isFirst); this.previous.setEnabled(!isFirst); this.next.setEnabled(!isLast); this.last.setEnabled(!isLast); this.properties.setEnabled(!running); } public void loadIcons(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TransportMenuItem.java0000644000175000017500000001256511273045224031340 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction; import org.herac.tuxguitar.gui.actions.transport.TransportModeAction; import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction; import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopEHeaderAction; import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopSHeaderAction; import org.herac.tuxguitar.gui.actions.transport.TransportStopAction; import org.herac.tuxguitar.gui.items.MenuItems; import org.herac.tuxguitar.player.base.MidiPlayerMode; import org.herac.tuxguitar.song.models.TGMeasure; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TransportMenuItem extends MenuItems{ private static final int STATUS_STOPPED = 1; private static final int STATUS_PAUSED = 2; private static final int STATUS_RUNNING = 3; private MenuItem transportMenuItem; private Menu menu; private MenuItem play; private MenuItem stop; private MenuItem metronome; private MenuItem mode; private MenuItem loopSHeader; private MenuItem loopEHeader; private int status; public TransportMenuItem(Shell shell,Menu parent, int style) { this.transportMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ this.play = new MenuItem(this.menu,SWT.PUSH); this.play.addSelectionListener(TuxGuitar.instance().getAction(TransportPlayAction.NAME)); this.stop = new MenuItem(this.menu, SWT.PUSH); this.stop.addSelectionListener(TuxGuitar.instance().getAction(TransportStopAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); this.metronome = new MenuItem(this.menu, SWT.CHECK); this.metronome.addSelectionListener(TuxGuitar.instance().getAction(TransportMetronomeAction.NAME)); this.mode = new MenuItem(this.menu, SWT.PUSH); this.mode.addSelectionListener(TuxGuitar.instance().getAction(TransportModeAction.NAME)); //--SEPARATOR-- new MenuItem(this.menu, SWT.SEPARATOR); this.loopSHeader = new MenuItem(this.menu, SWT.CHECK); this.loopSHeader.addSelectionListener(TuxGuitar.instance().getAction(TransportSetLoopSHeaderAction.NAME)); this.loopEHeader = new MenuItem(this.menu, SWT.CHECK); this.loopEHeader.addSelectionListener(TuxGuitar.instance().getAction(TransportSetLoopEHeaderAction.NAME)); this.transportMenuItem.setMenu(this.menu); this.status = STATUS_STOPPED; this.loadIcons(); this.loadProperties(); } public void update(){ TGMeasure measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure(); MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode(); this.metronome.setSelection(TuxGuitar.instance().getPlayer().isMetronomeEnabled()); this.loopSHeader.setEnabled( pm.isLoop() ); this.loopSHeader.setSelection( measure != null && measure.getNumber() == pm.getLoopSHeader() ); this.loopEHeader.setEnabled( pm.isLoop() ); this.loopEHeader.setSelection( measure != null && measure.getNumber() == pm.getLoopEHeader() ); this.loadIcons(false); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.transportMenuItem, "transport", null); setMenuItemTextAndAccelerator(this.play, "transport.start", TransportPlayAction.NAME); setMenuItemTextAndAccelerator(this.stop, "transport.stop", TransportStopAction.NAME); setMenuItemTextAndAccelerator(this.mode, "transport.mode", TransportModeAction.NAME); setMenuItemTextAndAccelerator(this.metronome, "transport.metronome", TransportMetronomeAction.NAME); setMenuItemTextAndAccelerator(this.loopSHeader, "transport.set-loop-start", TransportSetLoopSHeaderAction.NAME); setMenuItemTextAndAccelerator(this.loopEHeader, "transport.set-loop-end", TransportSetLoopEHeaderAction.NAME); } public void loadIcons(){ this.loadIcons(true); this.mode.setImage(TuxGuitar.instance().getIconManager().getTransportMode()); this.metronome.setImage(TuxGuitar.instance().getIconManager().getTransportMetronome()); } public void loadIcons(boolean force){ int lastStatus = this.status; if(TuxGuitar.instance().getPlayer().isRunning()){ this.status = STATUS_RUNNING; }else if(TuxGuitar.instance().getPlayer().isPaused()){ this.status = STATUS_PAUSED; }else{ this.status = STATUS_STOPPED; } if(force || lastStatus != this.status){ if(this.status == STATUS_RUNNING){ this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPause()); }else if(this.status == STATUS_PAUSED){ this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay2()); }else if(this.status == STATUS_STOPPED){ this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1()); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ViewMenuItem.java0000644000175000017500000001744511273045224030260 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.menu; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.layout.SetChordDiagramEnabledAction; import org.herac.tuxguitar.gui.actions.layout.SetChordNameEnabledAction; import org.herac.tuxguitar.gui.actions.layout.SetCompactViewAction; import org.herac.tuxguitar.gui.actions.layout.SetLinearLayoutAction; import org.herac.tuxguitar.gui.actions.layout.SetMultitrackViewAction; import org.herac.tuxguitar.gui.actions.layout.SetPageLayoutAction; import org.herac.tuxguitar.gui.actions.layout.SetScoreEnabledAction; import org.herac.tuxguitar.gui.actions.layout.SetTablatureEnabledAction; import org.herac.tuxguitar.gui.actions.view.ShowFretBoardAction; import org.herac.tuxguitar.gui.actions.view.ShowMatrixAction; import org.herac.tuxguitar.gui.actions.view.ShowMixerAction; import org.herac.tuxguitar.gui.actions.view.ShowPianoAction; import org.herac.tuxguitar.gui.actions.view.ShowTransportAction; import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.items.MenuItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ViewMenuItem extends MenuItems{ private Menu menu; private Menu chordMenu; private MenuItem layoutMenuItem; private MenuItem showMixer; private MenuItem showTransport; private MenuItem showFretBoard; private MenuItem showPiano; private MenuItem showMatrix; private MenuItem pageLayout; private MenuItem linearLayout; private MenuItem multitrack; private MenuItem scoreEnabled; private MenuItem tablatureEnabled; private MenuItem compact; private MenuItem chordMenuItem; private MenuItem chordName; private MenuItem chordDiagram; public ViewMenuItem(Shell shell,Menu parent, int style) { this.layoutMenuItem = new MenuItem(parent, style); this.menu = new Menu(shell, SWT.DROP_DOWN); } public void showItems(){ //--MIXER-- this.showMixer = new MenuItem(this.menu, SWT.CHECK); this.showMixer.addSelectionListener(TuxGuitar.instance().getAction(ShowMixerAction.NAME)); //--TRANSPORT-- this.showTransport = new MenuItem(this.menu, SWT.CHECK); this.showTransport.addSelectionListener(TuxGuitar.instance().getAction(ShowTransportAction.NAME)); //--FRETBOARD-- this.showFretBoard = new MenuItem(this.menu, SWT.CHECK); this.showFretBoard.addSelectionListener(TuxGuitar.instance().getAction(ShowFretBoardAction.NAME)); //--PIANO-- this.showPiano = new MenuItem(this.menu, SWT.CHECK); this.showPiano.addSelectionListener(TuxGuitar.instance().getAction(ShowPianoAction.NAME)); //--MATRIX-- this.showMatrix = new MenuItem(this.menu, SWT.CHECK); this.showMatrix.addSelectionListener(TuxGuitar.instance().getAction(ShowMatrixAction.NAME)); new MenuItem(this.menu, SWT.SEPARATOR); //--PAGE LAYOUT-- this.pageLayout = new MenuItem(this.menu, SWT.RADIO); this.pageLayout.addSelectionListener(TuxGuitar.instance().getAction(SetPageLayoutAction.NAME)); //--LINEAR LAYOUT-- this.linearLayout = new MenuItem(this.menu, SWT.RADIO); this.linearLayout.addSelectionListener(TuxGuitar.instance().getAction(SetLinearLayoutAction.NAME)); //--MULTITRACK-- this.multitrack = new MenuItem(this.menu, SWT.CHECK); this.multitrack.addSelectionListener(TuxGuitar.instance().getAction(SetMultitrackViewAction.NAME)); //--SCORE this.scoreEnabled = new MenuItem(this.menu, SWT.CHECK); this.scoreEnabled.addSelectionListener(TuxGuitar.instance().getAction(SetScoreEnabledAction.NAME)); //--SCORE this.tablatureEnabled = new MenuItem(this.menu, SWT.CHECK); this.tablatureEnabled.addSelectionListener(TuxGuitar.instance().getAction(SetTablatureEnabledAction.NAME)); //--COMPACT this.compact = new MenuItem(this.menu, SWT.CHECK); this.compact.addSelectionListener(TuxGuitar.instance().getAction(SetCompactViewAction.NAME)); new MenuItem(this.menu, SWT.SEPARATOR); //--CHORD STYLE this.chordMenuItem = new MenuItem(this.menu,SWT.CASCADE); this.chordMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN); this.chordName = new MenuItem(this.chordMenu, SWT.CHECK); this.chordName.addSelectionListener(TuxGuitar.instance().getAction(SetChordNameEnabledAction.NAME)); this.chordDiagram = new MenuItem(this.chordMenu, SWT.CHECK); this.chordDiagram.addSelectionListener(TuxGuitar.instance().getAction(SetChordDiagramEnabledAction.NAME)); this.chordMenuItem.setMenu(this.chordMenu); this.layoutMenuItem.setMenu(this.menu); this.loadIcons(); this.loadProperties(); } public void update(){ ViewLayout layout = TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout(); int style = layout.getStyle(); this.showMixer.setSelection(!TuxGuitar.instance().getMixer().isDisposed()); this.showTransport.setSelection(!TuxGuitar.instance().getTransport().isDisposed()); this.showFretBoard.setSelection(TuxGuitar.instance().getFretBoardEditor().isVisible()); this.showPiano.setSelection(!TuxGuitar.instance().getPianoEditor().isDisposed()); this.showMatrix.setSelection(!TuxGuitar.instance().getMatrixEditor().isDisposed()); this.pageLayout.setSelection(layout instanceof PageViewLayout); this.linearLayout.setSelection(layout instanceof LinearViewLayout); this.multitrack.setSelection( (style & ViewLayout.DISPLAY_MULTITRACK) != 0 ); this.scoreEnabled.setSelection( (style & ViewLayout.DISPLAY_SCORE) != 0 ); this.tablatureEnabled.setSelection( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ); this.compact.setSelection( (style & ViewLayout.DISPLAY_COMPACT) != 0 ); this.compact.setEnabled((style & ViewLayout.DISPLAY_MULTITRACK) == 0 || layout.getSongManager().getSong().countTracks() == 1); this.chordName.setSelection( (style & ViewLayout.DISPLAY_CHORD_NAME) != 0 ); this.chordDiagram.setSelection( (style & ViewLayout.DISPLAY_CHORD_DIAGRAM) != 0 ); } public void loadProperties(){ setMenuItemTextAndAccelerator(this.layoutMenuItem, "view", null); setMenuItemTextAndAccelerator(this.showMixer, "view.show-mixer", ShowMixerAction.NAME); setMenuItemTextAndAccelerator(this.showTransport, "view.show-transport", ShowTransportAction.NAME); setMenuItemTextAndAccelerator(this.showFretBoard, "view.show-fretboard", ShowFretBoardAction.NAME); setMenuItemTextAndAccelerator(this.showPiano, "view.show-piano", ShowPianoAction.NAME); setMenuItemTextAndAccelerator(this.showMatrix, "view.show-matrix", ShowMatrixAction.NAME); setMenuItemTextAndAccelerator(this.pageLayout, "view.layout.page", SetPageLayoutAction.NAME); setMenuItemTextAndAccelerator(this.linearLayout, "view.layout.linear", SetLinearLayoutAction.NAME); setMenuItemTextAndAccelerator(this.multitrack, "view.layout.multitrack", SetMultitrackViewAction.NAME); setMenuItemTextAndAccelerator(this.scoreEnabled, "view.layout.score-enabled", SetScoreEnabledAction.NAME); setMenuItemTextAndAccelerator(this.tablatureEnabled, "view.layout.tablature-enabled", SetTablatureEnabledAction.NAME); setMenuItemTextAndAccelerator(this.compact, "view.layout.compact", SetCompactViewAction.NAME); setMenuItemTextAndAccelerator(this.chordMenuItem, "view.layout.chord-style", null); setMenuItemTextAndAccelerator(this.chordName, "view.layout.chord-name", SetChordNameEnabledAction.NAME); setMenuItemTextAndAccelerator(this.chordDiagram, "view.layout.chord-diagram", SetChordDiagramEnabledAction.NAME); } public void loadIcons(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/BeatToolItems.java0000644000175000017500000001055411273045224030420 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.insert.InsertChordAction; import org.herac.tuxguitar.gui.actions.note.ChangeTiedNoteAction; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.song.models.TGChord; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class BeatToolItems extends ToolItems{ public static final String NAME = "beat.items"; protected ToolBar toolBar; private ToolItem tiedNote; private ChordMenuItem chordItems; public BeatToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.toolBar = toolBar; this.tiedNote = new ToolItem(toolBar, SWT.CHECK); this.tiedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeTiedNoteAction.NAME)); this.chordItems = new ChordMenuItem(); this.chordItems.addItems(); this.loadIcons(); this.loadProperties(); } public void update(){ TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.tiedNote.setEnabled(!running); this.tiedNote.setSelection(note != null && note.isTiedNote()); this.chordItems.setEnabled(!running); this.chordItems.update(); } public void loadProperties(){ this.tiedNote.setToolTipText(TuxGuitar.getProperty("note.tiednote")); this.chordItems.setToolTipText(TuxGuitar.getProperty("insert.chord")); } public void loadIcons(){ this.tiedNote.setImage(TuxGuitar.instance().getIconManager().getNoteTied()); this.chordItems.setImage(TuxGuitar.instance().getIconManager().getChord()); } private class ChordMenuItem extends SelectionAdapter { private long lastEdit; private ToolItem item; private Menu subMenu; private MenuItem[] subMenuItems; public ChordMenuItem() { this.item = new ToolItem(BeatToolItems.this.toolBar, SWT.DROP_DOWN); this.item.addSelectionListener(this); this.subMenu = new Menu(this.item.getParent().getShell()); } public void setToolTipText(String text){ this.item.setToolTipText(text); } public void setEnabled(boolean enabled){ this.item.setEnabled(enabled); } public void setImage(Image image){ this.item.setImage(image); } public void addItems() { this.disposeItems(); this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()]; for(int i = 0;i < this.subMenuItems.length; i++){ TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i); this.subMenuItems[i] = new MenuItem(this.subMenu, SWT.PUSH); this.subMenuItems[i].setData(chord); this.subMenuItems[i].setText(chord.getName()); this.subMenuItems[i].addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME)); } } public void disposeItems() { if(this.subMenuItems != null){ for(int i = 0;i < this.subMenuItems.length; i++){ this.subMenuItems[i].dispose(); } } } public void widgetSelected(SelectionEvent event) { if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) { ToolItem item = (ToolItem) event.widget; Rectangle rect = item.getBounds(); Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y)); this.subMenu.setLocation(pt.x, pt.y + rect.height); this.subMenu.setVisible(true); }else{ TuxGuitar.instance().getAction(InsertChordAction.NAME).process(event); } } public void update(){ if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){ this.addItems(); this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit(); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/CompositionToolItems.java0000644000175000017500000000735711273045224032057 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.composition.ChangeTempoAction; import org.herac.tuxguitar.gui.actions.composition.ChangeTimeSignatureAction; import org.herac.tuxguitar.gui.actions.insert.RepeatAlternativeAction; import org.herac.tuxguitar.gui.actions.insert.RepeatCloseAction; import org.herac.tuxguitar.gui.actions.insert.RepeatOpenAction; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.song.models.TGMeasure; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CompositionToolItems extends ToolItems{ public static final String NAME = "composition.items"; private ToolItem tempo; private ToolItem timeSignature; private ToolItem repeatOpen; private ToolItem repeatClose; private ToolItem repeatAlternative; public CompositionToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.tempo = new ToolItem(toolBar, SWT.PUSH); this.tempo.addSelectionListener(TuxGuitar.instance().getAction(ChangeTempoAction.NAME)); this.timeSignature = new ToolItem(toolBar, SWT.PUSH); this.timeSignature.addSelectionListener(TuxGuitar.instance().getAction(ChangeTimeSignatureAction.NAME)); new ToolItem(toolBar, SWT.SEPARATOR); this.repeatOpen = new ToolItem(toolBar, SWT.CHECK); this.repeatOpen.addSelectionListener(TuxGuitar.instance().getAction(RepeatOpenAction.NAME)); this.repeatClose = new ToolItem(toolBar, SWT.CHECK); this.repeatClose.addSelectionListener(TuxGuitar.instance().getAction(RepeatCloseAction.NAME)); this.repeatAlternative = new ToolItem(toolBar, SWT.CHECK); this.repeatAlternative.addSelectionListener(TuxGuitar.instance().getAction(RepeatAlternativeAction.NAME)); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ this.tempo.setToolTipText(TuxGuitar.getProperty("composition.tempo")); this.timeSignature.setToolTipText(TuxGuitar.getProperty("composition.timesignature")); this.repeatOpen.setToolTipText(TuxGuitar.getProperty("repeat.open")); this.repeatClose.setToolTipText(TuxGuitar.getProperty("repeat.close")); this.repeatAlternative.setToolTipText(TuxGuitar.getProperty("repeat.alternative")); } public void loadIcons(){ this.tempo.setImage(TuxGuitar.instance().getIconManager().getCompositionTempo()); this.timeSignature.setImage(TuxGuitar.instance().getIconManager().getCompositionTimeSignature()); this.repeatOpen.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatOpen()); this.repeatClose.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatClose()); this.repeatAlternative.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatAlternative()); } public void update(){ TGMeasure measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.tempo.setEnabled( !running ); this.timeSignature.setEnabled( !running ); this.repeatOpen.setEnabled( !running ); this.repeatOpen.setSelection(measure != null && measure.isRepeatOpen()); this.repeatClose.setEnabled( !running ); this.repeatClose.setSelection(measure != null && measure.getRepeatClose() > 0); this.repeatAlternative.setEnabled( !running ); this.repeatAlternative.setSelection(measure != null && measure.getHeader().getRepeatAlternative() > 0); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DurationToolItems.java0000644000175000017500000002541411273045224031333 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction; import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGDivisionType; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DurationToolItems extends ToolItems{ public static final String NAME = "duration.items"; protected ToolBar toolBar; private ToolItem[] durationItems; private ToolItem dotted; private ToolItem doubleDotted; private DivisionTypeMenuItem divisionTypeItems; public DurationToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.toolBar = toolBar; this.durationItems = new ToolItem[7]; this.durationItems[0] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[0].addSelectionListener(TuxGuitar.instance().getAction(SetWholeDurationAction.NAME)); this.durationItems[1] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[1].addSelectionListener(TuxGuitar.instance().getAction(SetHalfDurationAction.NAME)); this.durationItems[2] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[2].setSelection(true); this.durationItems[2].addSelectionListener(TuxGuitar.instance().getAction(SetQuarterDurationAction.NAME)); this.durationItems[3] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[3].addSelectionListener(TuxGuitar.instance().getAction(SetEighthDurationAction.NAME)); this.durationItems[4] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[4].addSelectionListener(TuxGuitar.instance().getAction(SetSixteenthDurationAction.NAME)); this.durationItems[5] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[5].addSelectionListener(TuxGuitar.instance().getAction(SetThirtySecondDurationAction.NAME)); this.durationItems[6] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[6].addSelectionListener(TuxGuitar.instance().getAction(SetSixtyFourthDurationAction.NAME)); new ToolItem(toolBar, SWT.SEPARATOR); this.dotted = new ToolItem(toolBar, SWT.CHECK); this.dotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDottedDurationAction.NAME)); this.doubleDotted = new ToolItem(toolBar, SWT.CHECK); this.doubleDotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDoubleDottedDurationAction.NAME)); this.divisionTypeItems = new DivisionTypeMenuItem(); this.divisionTypeItems.addItems(); this.loadIcons(); this.loadProperties(); } public void update(){ TGDuration duration = getEditor().getTablature().getCaret().getDuration(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); int index = duration.getIndex(); for(int i = 0;i < this.durationItems.length;i++){ this.durationItems[i].setSelection( (i == index) ); this.durationItems[i].setEnabled( !running ); } this.dotted.setSelection(duration.isDotted()); this.dotted.setEnabled( !running ); this.doubleDotted.setSelection(duration.isDoubleDotted()); this.doubleDotted.setEnabled( !running ); this.divisionTypeItems.setEnabled( !running ); this.divisionTypeItems.update(); } public void loadProperties(){ this.durationItems[0].setToolTipText(TuxGuitar.getProperty("duration.whole")); this.durationItems[1].setToolTipText(TuxGuitar.getProperty("duration.half")); this.durationItems[2].setToolTipText(TuxGuitar.getProperty("duration.quarter")); this.durationItems[3].setToolTipText(TuxGuitar.getProperty("duration.eighth")); this.durationItems[4].setToolTipText(TuxGuitar.getProperty("duration.sixteenth")); this.durationItems[5].setToolTipText(TuxGuitar.getProperty("duration.thirtysecond")); this.durationItems[6].setToolTipText(TuxGuitar.getProperty("duration.sixtyfourth")); this.dotted.setToolTipText(TuxGuitar.getProperty("duration.dotted")); this.doubleDotted.setToolTipText(TuxGuitar.getProperty("duration.doubledotted")); this.divisionTypeItems.setText(TuxGuitar.getProperty("duration.division-type")); } public void loadIcons(){ this.durationItems[0].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.WHOLE)); this.durationItems[1].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.HALF)); this.durationItems[2].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER)); this.durationItems[3].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH)); this.durationItems[4].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH)); this.durationItems[5].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND)); this.durationItems[6].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH)); this.dotted.setImage(TuxGuitar.instance().getIconManager().getDurationDotted()); this.doubleDotted.setImage(TuxGuitar.instance().getIconManager().getDurationDoubleDotted()); this.divisionTypeItems.setImage(TuxGuitar.instance().getIconManager().getDivisionType()); } protected TablatureEditor getEditor(){ return super.getEditor(); } private class DivisionTypeMenuItem extends SelectionAdapter { private ToolItem divisionType; private Menu subMenu; private MenuItem[] subMenuItems; public DivisionTypeMenuItem() { this.divisionType = new ToolItem(DurationToolItems.this.toolBar, SWT.DROP_DOWN); this.divisionType.addSelectionListener(this); this.divisionType.setData(newDivisionType(3,2)); this.subMenu = new Menu(this.divisionType.getParent().getShell()); } public void setText(String text){ this.divisionType.setToolTipText(text); } public void setImage(Image image){ this.divisionType.setImage(image); } public void setEnabled(boolean enabled){ this.divisionType.setEnabled(enabled); } public void addItems() { this.subMenuItems = new MenuItem[8]; this.subMenuItems[0] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[0].setText("3"); this.subMenuItems[0].setData(newDivisionType(3,2)); this.subMenuItems[0].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[1] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[1].setText("5"); this.subMenuItems[1].setData(newDivisionType(5,4)); this.subMenuItems[1].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[2] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[2].setText("6"); this.subMenuItems[2].setData(newDivisionType(6,4)); this.subMenuItems[2].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[3] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[3].setText("7"); this.subMenuItems[3].setData(newDivisionType(7,4)); this.subMenuItems[3].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[4] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[4].setText("9"); this.subMenuItems[4].setData(newDivisionType(9,8)); this.subMenuItems[4].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[5] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[5].setText("10"); this.subMenuItems[5].setData(newDivisionType(10,8)); this.subMenuItems[5].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[6] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[6].setText("11"); this.subMenuItems[6].setData(newDivisionType(11,8)); this.subMenuItems[6].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); this.subMenuItems[7] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[7].setText("12"); this.subMenuItems[7].setData(newDivisionType(12,8)); this.subMenuItems[7].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME)); } public void widgetSelected(SelectionEvent event) { if (event.detail == SWT.ARROW) { ToolItem item = (ToolItem) event.widget; Rectangle rect = item.getBounds(); Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y)); this.subMenu.setLocation(pt.x, pt.y + rect.height); this.subMenu.setVisible(true); }else{ TGDuration duration = getEditor().getTablature().getCaret().getDuration(); if(duration.getDivision().isEqual(TGDivisionType.NORMAL)){ ((TGDivisionType)this.divisionType.getData()).setEnters(3); ((TGDivisionType)this.divisionType.getData()).setTimes(2); }else{ ((TGDivisionType)this.divisionType.getData()).setEnters(1); ((TGDivisionType)this.divisionType.getData()).setTimes(1); } TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME).process(event); } } public void update(){ TGDuration duration = getEditor().getTablature().getCaret().getDuration(); for(int i = 0;i < this.subMenuItems.length;i++){ TGDivisionType divisionType = (TGDivisionType)this.subMenuItems[i].getData(); this.subMenuItems[i].setSelection((divisionType.isEqual(duration.getDivision()))); } } private TGDivisionType newDivisionType(int enters,int times){ TGDivisionType divisionType = TuxGuitar.instance().getSongManager().getFactory().newDivisionType(); divisionType.setEnters(enters); divisionType.setTimes(times); return divisionType; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DynamicToolItems.java0000644000175000017500000001312011273045224031121 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.note.ChangeVelocityAction; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.song.models.TGVelocities; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DynamicToolItems extends ToolItems{ public static final String NAME = "dynamic.items"; private ToolBar toolBar; private ToolItem pianoPianissimo; private ToolItem pianissimo; private ToolItem piano; private ToolItem mezzoPiano; private ToolItem mezzoForte; private ToolItem forte; private ToolItem fortissimo; private ToolItem forteFortissimo; public DynamicToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.toolBar = toolBar; //--PPP-- this.pianoPianissimo = new ToolItem(this.toolBar, SWT.CHECK); this.pianoPianissimo.setData(new Integer(TGVelocities.PIANO_PIANISSIMO)); this.pianoPianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--PP-- this.pianissimo = new ToolItem(this.toolBar, SWT.CHECK); this.pianissimo.setData(new Integer(TGVelocities.PIANISSIMO)); this.pianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--P-- this.piano = new ToolItem(this.toolBar, SWT.CHECK); this.piano.setData(new Integer(TGVelocities.PIANO)); this.piano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--MP-- this.mezzoPiano = new ToolItem(this.toolBar, SWT.CHECK); this.mezzoPiano.setData(new Integer(TGVelocities.MEZZO_PIANO)); this.mezzoPiano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--MF-- this.mezzoForte = new ToolItem(this.toolBar, SWT.CHECK); this.mezzoForte.setData(new Integer(TGVelocities.MEZZO_FORTE)); this.mezzoForte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--F-- this.forte = new ToolItem(this.toolBar, SWT.CHECK); this.forte.setData(new Integer(TGVelocities.FORTE)); this.forte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--FF-- this.fortissimo = new ToolItem(this.toolBar, SWT.CHECK); this.fortissimo.setData(new Integer(TGVelocities.FORTISSIMO)); this.fortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); //--FF-- this.forteFortissimo = new ToolItem(this.toolBar, SWT.CHECK); this.forteFortissimo.setData(new Integer(TGVelocities.FORTE_FORTISSIMO)); this.forteFortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME)); this.loadIcons(); this.loadProperties(); } public void update(){ Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); int velocity = ((caret.getSelectedNote() != null)?caret.getSelectedNote().getVelocity():caret.getVelocity()); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.pianoPianissimo.setSelection(velocity == TGVelocities.PIANO_PIANISSIMO); this.pianoPianissimo.setEnabled( !running ); this.pianissimo.setSelection(velocity == TGVelocities.PIANISSIMO); this.pianissimo.setEnabled( !running ); this.piano.setSelection(velocity == TGVelocities.PIANO); this.piano.setEnabled( !running ); this.mezzoPiano.setSelection(velocity == TGVelocities.MEZZO_PIANO); this.mezzoPiano.setEnabled( !running ); this.mezzoForte.setSelection(velocity == TGVelocities.MEZZO_FORTE); this.mezzoForte.setEnabled( !running ); this.forte.setSelection(velocity == TGVelocities.FORTE); this.forte.setEnabled( !running ); this.fortissimo.setSelection(velocity == TGVelocities.FORTISSIMO); this.fortissimo.setEnabled( !running ); this.forteFortissimo.setSelection(velocity == TGVelocities.FORTE_FORTISSIMO); this.forteFortissimo.setEnabled( !running ); } public void loadProperties(){ this.pianoPianissimo.setToolTipText(TuxGuitar.getProperty("dynamic.piano-pianissimo")); this.pianissimo.setToolTipText(TuxGuitar.getProperty("dynamic.pianissimo")); this.piano.setToolTipText(TuxGuitar.getProperty("dynamic.piano")); this.mezzoPiano.setToolTipText(TuxGuitar.getProperty("dynamic.mezzo-piano")); this.mezzoForte.setToolTipText(TuxGuitar.getProperty("dynamic.mezzo-forte")); this.forte.setToolTipText(TuxGuitar.getProperty("dynamic.forte")); this.fortissimo.setToolTipText(TuxGuitar.getProperty("dynamic.fortissimo")); this.forteFortissimo.setToolTipText(TuxGuitar.getProperty("dynamic.forte-fortissimo")); } public void loadIcons(){ this.pianoPianissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicPPP()); this.pianissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicPP()); this.piano.setImage(TuxGuitar.instance().getIconManager().getDynamicP()); this.mezzoPiano.setImage(TuxGuitar.instance().getIconManager().getDynamicMP()); this.mezzoForte.setImage(TuxGuitar.instance().getIconManager().getDynamicMF()); this.forte.setImage(TuxGuitar.instance().getIconManager().getDynamicF()); this.fortissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicFF()); this.forteFortissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicFFF()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/EditToolItems.java0000644000175000017500000001142111273045224030424 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.edit.RedoAction; import org.herac.tuxguitar.gui.actions.edit.SetMouseModeEditionAction; import org.herac.tuxguitar.gui.actions.edit.SetMouseModeSelectionAction; import org.herac.tuxguitar.gui.actions.edit.SetNaturalKeyAction; import org.herac.tuxguitar.gui.actions.edit.SetVoice1Action; import org.herac.tuxguitar.gui.actions.edit.SetVoice2Action; import org.herac.tuxguitar.gui.actions.edit.UndoAction; import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class EditToolItems extends ToolItems { public static final String NAME = "edit.items"; private ToolItem undo; private ToolItem redo; private ToolItem voice1; private ToolItem voice2; private ToolItem modeSelection; private ToolItem modeEdition; private ToolItem notNaturalKey; public EditToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.undo = new ToolItem(toolBar, SWT.PUSH); this.undo.addSelectionListener(TuxGuitar.instance().getAction(UndoAction.NAME)); this.redo = new ToolItem(toolBar, SWT.PUSH); this.redo.addSelectionListener(TuxGuitar.instance().getAction(RedoAction.NAME)); new ToolItem(toolBar, SWT.SEPARATOR); this.voice1 = new ToolItem(toolBar, SWT.RADIO); this.voice1.addSelectionListener(TuxGuitar.instance().getAction(SetVoice1Action.NAME)); this.voice2 = new ToolItem(toolBar, SWT.RADIO); this.voice2.addSelectionListener(TuxGuitar.instance().getAction(SetVoice2Action.NAME)); new ToolItem(toolBar, SWT.SEPARATOR); this.modeSelection = new ToolItem(toolBar, SWT.RADIO); this.modeSelection.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeSelectionAction.NAME)); this.modeEdition = new ToolItem(toolBar, SWT.RADIO); this.modeEdition.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeEditionAction.NAME)); this.notNaturalKey = new ToolItem(toolBar, SWT.CHECK); this.notNaturalKey.addSelectionListener(TuxGuitar.instance().getAction(SetNaturalKeyAction.NAME)); this.loadIcons(); this.loadProperties(); } public void update(){ boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.undo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canUndo()); this.redo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canRedo()); this.voice1.setSelection(getEditor().getTablature().getCaret().getVoice() == 0); this.voice1.setEnabled(!running); this.voice2.setSelection(getEditor().getTablature().getCaret().getVoice() == 1); this.voice2.setEnabled(!running); this.modeSelection.setSelection(getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_SELECTION); this.modeSelection.setEnabled(!running); this.modeEdition.setSelection(getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_EDITION); this.modeEdition.setEnabled(!running); this.notNaturalKey.setSelection(!getEditor().getTablature().getEditorKit().isNatural()); this.notNaturalKey.setEnabled(!running && getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_EDITION); } public void loadProperties(){ this.undo.setToolTipText(TuxGuitar.getProperty("edit.undo")); this.redo.setToolTipText(TuxGuitar.getProperty("edit.redo")); this.voice1.setToolTipText(TuxGuitar.getProperty("edit.voice-1")); this.voice2.setToolTipText(TuxGuitar.getProperty("edit.voice-2")); this.modeSelection.setToolTipText(TuxGuitar.getProperty("edit.mouse-mode-selection")); this.modeEdition.setToolTipText(TuxGuitar.getProperty("edit.mouse-mode-edition")); this.notNaturalKey.setToolTipText(TuxGuitar.getProperty("edit.not-natural-key")); } public void loadIcons(){ this.undo.setImage(TuxGuitar.instance().getIconManager().getEditUndo()); this.redo.setImage(TuxGuitar.instance().getIconManager().getEditRedo()); this.voice1.setImage(TuxGuitar.instance().getIconManager().getEditVoice1()); this.voice2.setImage(TuxGuitar.instance().getIconManager().getEditVoice2()); this.modeSelection.setImage(TuxGuitar.instance().getIconManager().getEditModeSelection()); this.modeEdition.setImage(TuxGuitar.instance().getIconManager().getEditModeEdition()); this.notNaturalKey.setImage(TuxGuitar.instance().getIconManager().getEditModeEditionNotNatural()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/FileToolItems.java0000644000175000017500000000630011273045224030416 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.file.NewFileAction; import org.herac.tuxguitar.gui.actions.file.OpenFileAction; import org.herac.tuxguitar.gui.actions.file.PrintAction; import org.herac.tuxguitar.gui.actions.file.PrintPreviewAction; import org.herac.tuxguitar.gui.actions.file.SaveAsFileAction; import org.herac.tuxguitar.gui.actions.file.SaveFileAction; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class FileToolItems extends ToolItems { public static final String NAME = "file.items"; private ToolItem newSong; private ToolItem openSong; private ToolItem saveSong; private ToolItem saveAsSong; private ToolItem printSong; private ToolItem printPreviewSong; public FileToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.newSong = new ToolItem(toolBar, SWT.PUSH); this.newSong.addSelectionListener(TuxGuitar.instance().getAction(NewFileAction.NAME)); this.openSong = new ToolItem(toolBar, SWT.PUSH); this.openSong.addSelectionListener(TuxGuitar.instance().getAction(OpenFileAction.NAME)); this.saveSong = new ToolItem(toolBar, SWT.PUSH); this.saveSong.addSelectionListener(TuxGuitar.instance().getAction(SaveFileAction.NAME)); this.saveAsSong = new ToolItem(toolBar, SWT.PUSH); this.saveAsSong.addSelectionListener(TuxGuitar.instance().getAction(SaveAsFileAction.NAME)); this.printSong = new ToolItem(toolBar, SWT.PUSH); this.printSong.addSelectionListener(TuxGuitar.instance().getAction(PrintAction.NAME)); this.printPreviewSong = new ToolItem(toolBar, SWT.PUSH); this.printPreviewSong.addSelectionListener(TuxGuitar.instance().getAction(PrintPreviewAction.NAME)); this.loadIcons(); this.loadProperties(); } public void update(){ //Nothing to do } public void loadProperties(){ this.newSong.setToolTipText(TuxGuitar.getProperty("file.new")); this.openSong.setToolTipText(TuxGuitar.getProperty("file.open")); this.saveSong.setToolTipText(TuxGuitar.getProperty("file.save")); this.saveAsSong.setToolTipText(TuxGuitar.getProperty("file.save-as")); this.printSong.setToolTipText(TuxGuitar.getProperty("file.print")); this.printPreviewSong.setToolTipText(TuxGuitar.getProperty("file.print-preview")); } public void loadIcons(){ this.newSong.setImage(TuxGuitar.instance().getIconManager().getFileNew()); this.openSong.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); this.saveSong.setImage(TuxGuitar.instance().getIconManager().getFileSave()); this.saveAsSong.setImage(TuxGuitar.instance().getIconManager().getFileSaveAs()); this.printSong.setImage(TuxGuitar.instance().getIconManager().getFilePrint()); this.printPreviewSong.setImage(TuxGuitar.instance().getIconManager().getFilePrintPreview()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/LayoutToolItems.java0000644000175000017500000000736011273045224031023 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.layout.SetCompactViewAction; import org.herac.tuxguitar.gui.actions.layout.SetLinearLayoutAction; import org.herac.tuxguitar.gui.actions.layout.SetMultitrackViewAction; import org.herac.tuxguitar.gui.actions.layout.SetPageLayoutAction; import org.herac.tuxguitar.gui.actions.layout.SetScoreEnabledAction; import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class LayoutToolItems extends ToolItems{ public static final String NAME = "layout.items"; private ToolItem pageLayout; private ToolItem linearLayout; private ToolItem multitrack; private ToolItem scoreEnabled; private ToolItem compact; public LayoutToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.pageLayout = new ToolItem(toolBar, SWT.RADIO); this.pageLayout.addSelectionListener(TuxGuitar.instance().getAction(SetPageLayoutAction.NAME)); this.linearLayout = new ToolItem(toolBar, SWT.RADIO); this.linearLayout.addSelectionListener(TuxGuitar.instance().getAction(SetLinearLayoutAction.NAME)); this.multitrack = new ToolItem(toolBar, SWT.CHECK); this.multitrack.addSelectionListener(TuxGuitar.instance().getAction(SetMultitrackViewAction.NAME)); this.scoreEnabled = new ToolItem(toolBar, SWT.CHECK); this.scoreEnabled.addSelectionListener(TuxGuitar.instance().getAction(SetScoreEnabledAction.NAME)); this.compact = new ToolItem(toolBar, SWT.CHECK); this.compact.addSelectionListener(TuxGuitar.instance().getAction(SetCompactViewAction.NAME)); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ this.pageLayout.setToolTipText(TuxGuitar.getProperty("view.layout.page")); this.linearLayout.setToolTipText(TuxGuitar.getProperty("view.layout.linear")); this.multitrack.setToolTipText(TuxGuitar.getProperty("view.layout.multitrack")); this.scoreEnabled.setToolTipText(TuxGuitar.getProperty("view.layout.score-enabled")); this.compact.setToolTipText(TuxGuitar.getProperty("view.layout.compact")); } public void loadIcons(){ this.pageLayout.setImage(TuxGuitar.instance().getIconManager().getLayoutPage()); this.linearLayout.setImage(TuxGuitar.instance().getIconManager().getLayoutLinear()); this.multitrack.setImage(TuxGuitar.instance().getIconManager().getLayoutMultitrack()); this.scoreEnabled.setImage(TuxGuitar.instance().getIconManager().getLayoutScore()); this.compact.setImage(TuxGuitar.instance().getIconManager().getLayoutCompact()); } public void update(){ ViewLayout layout = getEditor().getTablature().getViewLayout(); int style = layout.getStyle(); this.pageLayout.setSelection(layout instanceof PageViewLayout); this.linearLayout.setSelection(layout instanceof LinearViewLayout); this.multitrack.setSelection( (style & ViewLayout.DISPLAY_MULTITRACK) != 0 ); this.scoreEnabled.setSelection( (style & ViewLayout.DISPLAY_SCORE) != 0 ); this.compact.setSelection( (style & ViewLayout.DISPLAY_COMPACT) != 0 ); this.compact.setEnabled((style & ViewLayout.DISPLAY_MULTITRACK) == 0 || getEditor().getTablature().getSongManager().getSong().countTracks() == 1); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/MarkerToolItems.java0000644000175000017500000000641111273045224030763 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.marker.AddMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoFirstMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoLastMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoNextMarkerAction; import org.herac.tuxguitar.gui.actions.marker.GoPreviousMarkerAction; import org.herac.tuxguitar.gui.actions.marker.ListMarkersAction; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MarkerToolItems extends ToolItems{ public static final String NAME = "marker.items"; private ToolItem add; private ToolItem list; private ToolItem first; private ToolItem last; private ToolItem previous; private ToolItem next; public MarkerToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ //--ADD-- this.add = new ToolItem(toolBar, SWT.PUSH); this.add.addSelectionListener(TuxGuitar.instance().getAction(AddMarkerAction.NAME)); //--LIST-- this.list = new ToolItem(toolBar, SWT.PUSH); this.list.addSelectionListener(TuxGuitar.instance().getAction(ListMarkersAction.NAME)); //--SEPARATOR-- new ToolItem(toolBar, SWT.SEPARATOR); //--FIRST-- this.first = new ToolItem(toolBar, SWT.PUSH); this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstMarkerAction.NAME)); //--PREVIOUS-- this.previous = new ToolItem(toolBar, SWT.PUSH); this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousMarkerAction.NAME)); //--PREVIOUS-- this.next = new ToolItem(toolBar, SWT.PUSH); this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextMarkerAction.NAME)); //--LAST-- this.last = new ToolItem(toolBar, SWT.PUSH); this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastMarkerAction.NAME)); this.loadIcons(); this.loadProperties(); } public void update(){ //Nothing to do } public void loadProperties(){ this.add.setToolTipText(TuxGuitar.getProperty("marker.add")); this.list.setToolTipText(TuxGuitar.getProperty("marker.list")); this.first.setToolTipText(TuxGuitar.getProperty("marker.first")); this.last.setToolTipText(TuxGuitar.getProperty("marker.last")); this.previous.setToolTipText(TuxGuitar.getProperty("marker.previous")); this.next.setToolTipText(TuxGuitar.getProperty("marker.next")); } public void loadIcons(){ this.add.setImage(TuxGuitar.instance().getIconManager().getMarkerAdd()); this.list.setImage(TuxGuitar.instance().getIconManager().getMarkerList()); this.first.setImage(TuxGuitar.instance().getIconManager().getMarkerFirst()); this.previous.setImage(TuxGuitar.instance().getIconManager().getMarkerPrevious()); this.next.setImage(TuxGuitar.instance().getIconManager().getMarkerNext()); this.last.setImage(TuxGuitar.instance().getIconManager().getMarkerLast()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/NoteEffectToolItems.java0000644000175000017500000002771411273045224031575 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.effects.ChangeAccentuatedNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeBendNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeDeadNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeFadeInAction; import org.herac.tuxguitar.gui.actions.effects.ChangeGhostNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeGraceNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHammerNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHarmonicNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeHeavyAccentuatedNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangePalmMuteAction; import org.herac.tuxguitar.gui.actions.effects.ChangePoppingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeSlappingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeSlideNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeStaccatoAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTappingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloBarAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloPickingAction; import org.herac.tuxguitar.gui.actions.effects.ChangeTrillNoteAction; import org.herac.tuxguitar.gui.actions.effects.ChangeVibratoNoteAction; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.song.models.TGNote; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class NoteEffectToolItems extends ToolItems{ public static final String NAME = "effect.items"; private ToolItem deadNote; private ToolItem ghostNote; private ToolItem accentuatedNote; private ToolItem heavyAccentuatedNote; private ToolItem harmonicNote; private ToolItem graceNote; private ToolItem vibrato; private ToolItem bend; private ToolItem tremoloBar; private ToolItem slide; private ToolItem hammer; private ToolItem trill; private ToolItem tremoloPicking; private ToolItem palmMute; private ToolItem staccato; private ToolItem tapping; private ToolItem slapping; private ToolItem popping; private ToolItem fadeIn; public NoteEffectToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ //--DEAD NOTE-- this.deadNote = new ToolItem(toolBar, SWT.CHECK); this.deadNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeDeadNoteAction.NAME)); //--GHOST NOTE-- this.ghostNote = new ToolItem(toolBar, SWT.CHECK); this.ghostNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGhostNoteAction.NAME)); //--ACCENTUATED NOTE-- this.accentuatedNote = new ToolItem(toolBar, SWT.CHECK); this.accentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeAccentuatedNoteAction.NAME)); //--HEAVY ACCENTUATED NOTE-- this.heavyAccentuatedNote = new ToolItem(toolBar, SWT.CHECK); this.heavyAccentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHeavyAccentuatedNoteAction.NAME)); //--HARMONIC NOTE-- this.harmonicNote = new ToolItem(toolBar, SWT.CHECK); this.harmonicNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHarmonicNoteAction.NAME)); //--GRACE NOTE-- this.graceNote = new ToolItem(toolBar, SWT.CHECK); this.graceNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGraceNoteAction.NAME)); //--SEPARATOR-- new ToolItem(toolBar, SWT.SEPARATOR); //--VIBRATO-- this.vibrato = new ToolItem(toolBar, SWT.CHECK); this.vibrato.addSelectionListener(TuxGuitar.instance().getAction(ChangeVibratoNoteAction.NAME)); //--BEND-- this.bend = new ToolItem(toolBar, SWT.CHECK); this.bend.addSelectionListener(TuxGuitar.instance().getAction(ChangeBendNoteAction.NAME)); //--BEND-- this.tremoloBar = new ToolItem(toolBar, SWT.CHECK); this.tremoloBar.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloBarAction.NAME)); //--SLIDE-- this.slide = new ToolItem(toolBar, SWT.CHECK); this.slide.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlideNoteAction.NAME)); //--HAMMER-- this.hammer = new ToolItem(toolBar, SWT.CHECK); this.hammer.addSelectionListener(TuxGuitar.instance().getAction(ChangeHammerNoteAction.NAME)); //--SEPARATOR-- new ToolItem(toolBar, SWT.SEPARATOR); //--TRILL-- this.trill = new ToolItem(toolBar, SWT.CHECK); this.trill.addSelectionListener(TuxGuitar.instance().getAction(ChangeTrillNoteAction.NAME)); //--TREMOLO PICKING-- this.tremoloPicking = new ToolItem(toolBar, SWT.CHECK); this.tremoloPicking.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloPickingAction.NAME)); //--PALM MUTE-- this.palmMute = new ToolItem(toolBar, SWT.CHECK); this.palmMute.addSelectionListener(TuxGuitar.instance().getAction(ChangePalmMuteAction.NAME)); //--STACCATO this.staccato = new ToolItem(toolBar, SWT.CHECK); this.staccato.addSelectionListener(TuxGuitar.instance().getAction(ChangeStaccatoAction.NAME)); //--SEPARATOR-- new ToolItem(toolBar, SWT.SEPARATOR); //--TAPPING this.tapping = new ToolItem(toolBar, SWT.CHECK); this.tapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeTappingAction.NAME)); //--SLAPPING this.slapping = new ToolItem(toolBar, SWT.CHECK); this.slapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlappingAction.NAME)); //--POPPING this.popping = new ToolItem(toolBar, SWT.CHECK); this.popping.addSelectionListener(TuxGuitar.instance().getAction(ChangePoppingAction.NAME)); //--SEPARATOR-- new ToolItem(toolBar, SWT.SEPARATOR); //--FADE IN this.fadeIn = new ToolItem(toolBar, SWT.CHECK); this.fadeIn.addSelectionListener(TuxGuitar.instance().getAction(ChangeFadeInAction.NAME)); this.loadIcons(); this.loadProperties(); } public void update(){ TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.vibrato.setSelection(note != null && note.getEffect().isVibrato()); this.vibrato.setEnabled(!running && note != null); this.bend.setSelection(note != null && note.getEffect().isBend()); this.bend.setEnabled(!running && note != null); this.tremoloBar.setSelection(note != null && note.getEffect().isTremoloBar()); this.tremoloBar.setEnabled(!running && note != null); this.deadNote.setSelection(note != null && note.getEffect().isDeadNote()); this.deadNote.setEnabled(!running && note != null); this.slide.setSelection(note != null && note.getEffect().isSlide()); this.slide.setEnabled(!running && note != null); this.hammer.setSelection(note != null && note.getEffect().isHammer()); this.hammer.setEnabled(!running && note != null); this.ghostNote.setSelection(note != null && note.getEffect().isGhostNote()); this.ghostNote.setEnabled(!running && note != null); this.accentuatedNote.setSelection(note != null && note.getEffect().isAccentuatedNote()); this.accentuatedNote.setEnabled(!running && note != null); this.heavyAccentuatedNote.setSelection(note != null && note.getEffect().isHeavyAccentuatedNote()); this.heavyAccentuatedNote.setEnabled(!running && note != null); this.harmonicNote.setSelection(note != null && note.getEffect().isHarmonic()); this.harmonicNote.setEnabled(!running && note != null); this.graceNote.setSelection(note != null && note.getEffect().isGrace()); this.graceNote.setEnabled(!running && note != null); this.trill.setSelection(note != null && note.getEffect().isTrill()); this.trill.setEnabled(!running && note != null); this.tremoloPicking.setSelection(note != null && note.getEffect().isTremoloPicking()); this.tremoloPicking.setEnabled(!running && note != null); this.palmMute.setSelection(note != null && note.getEffect().isPalmMute()); this.palmMute.setEnabled(!running && note != null); this.staccato.setSelection(note != null && note.getEffect().isStaccato()); this.staccato.setEnabled(!running && note != null); this.tapping.setSelection(note != null && note.getEffect().isTapping()); this.tapping.setEnabled(!running && note != null); this.slapping.setSelection(note != null && note.getEffect().isSlapping()); this.slapping.setEnabled(!running && note != null); this.popping.setSelection(note != null && note.getEffect().isPopping()); this.popping.setEnabled(!running && note != null); this.fadeIn.setSelection(note != null && note.getEffect().isFadeIn()); this.fadeIn.setEnabled(!running && note != null); } public void loadProperties(){ this.vibrato.setToolTipText(TuxGuitar.getProperty("effects.vibrato")); this.bend.setToolTipText(TuxGuitar.getProperty("effects.bend")); this.tremoloBar.setToolTipText(TuxGuitar.getProperty("effects.tremolo-bar")); this.popping.setToolTipText(TuxGuitar.getProperty("effects.popping")); this.deadNote.setToolTipText(TuxGuitar.getProperty("effects.deadnote")); this.slide.setToolTipText(TuxGuitar.getProperty("effects.slide")); this.hammer.setToolTipText(TuxGuitar.getProperty("effects.hammer")); this.ghostNote.setToolTipText(TuxGuitar.getProperty("effects.ghostnote")); this.accentuatedNote.setToolTipText(TuxGuitar.getProperty("effects.accentuatednote")); this.heavyAccentuatedNote.setToolTipText(TuxGuitar.getProperty("effects.heavyaccentuatednote")); this.harmonicNote.setToolTipText(TuxGuitar.getProperty("effects.harmonic")); this.graceNote.setToolTipText(TuxGuitar.getProperty("effects.grace")); this.trill.setToolTipText(TuxGuitar.getProperty("effects.trill")); this.tremoloPicking.setToolTipText(TuxGuitar.getProperty("effects.tremolo-picking")); this.palmMute.setToolTipText(TuxGuitar.getProperty("effects.palm-mute")); this.staccato.setToolTipText(TuxGuitar.getProperty("effects.staccato")); this.tapping.setToolTipText(TuxGuitar.getProperty("effects.tapping")); this.slapping.setToolTipText(TuxGuitar.getProperty("effects.slapping")); this.popping.setToolTipText(TuxGuitar.getProperty("effects.popping")); this.fadeIn.setToolTipText(TuxGuitar.getProperty("effects.fade-in")); } public void loadIcons(){ this.deadNote.setImage(TuxGuitar.instance().getIconManager().getEffectDead()); this.ghostNote.setImage(TuxGuitar.instance().getIconManager().getEffectGhost()); this.accentuatedNote.setImage(TuxGuitar.instance().getIconManager().getEffectAccentuated()); this.heavyAccentuatedNote.setImage(TuxGuitar.instance().getIconManager().getEffectHeavyAccentuated()); this.harmonicNote.setImage(TuxGuitar.instance().getIconManager().getEffectHarmonic()); this.graceNote.setImage(TuxGuitar.instance().getIconManager().getEffectGrace()); this.vibrato.setImage(TuxGuitar.instance().getIconManager().getEffectVibrato()); this.bend.setImage(TuxGuitar.instance().getIconManager().getEffectBend()); this.tremoloBar.setImage(TuxGuitar.instance().getIconManager().getEffectTremoloBar()); this.slide.setImage(TuxGuitar.instance().getIconManager().getEffectSlide()); this.hammer.setImage(TuxGuitar.instance().getIconManager().getEffectHammer()); this.trill.setImage(TuxGuitar.instance().getIconManager().getEffectTrill()); this.tremoloPicking.setImage(TuxGuitar.instance().getIconManager().getEffectTremoloPicking()); this.palmMute.setImage(TuxGuitar.instance().getIconManager().getEffectPalmMute()); this.staccato.setImage(TuxGuitar.instance().getIconManager().getEffectStaccato()); this.tapping.setImage(TuxGuitar.instance().getIconManager().getEffectTapping()); this.slapping.setImage(TuxGuitar.instance().getIconManager().getEffectSlapping()); this.popping.setImage(TuxGuitar.instance().getIconManager().getEffectPopping()); this.fadeIn.setImage(TuxGuitar.instance().getIconManager().getEffectFadeIn()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/PropertiesToolItems.java0000644000175000017500000000244411273045224031700 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class PropertiesToolItems extends ToolItems{ public static final String NAME = "property.items"; private ToolItem info; public PropertiesToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.info = new ToolItem(toolBar, SWT.PUSH); this.info.addSelectionListener(TuxGuitar.instance().getAction(ChangeInfoAction.NAME)); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ this.info.setToolTipText(TuxGuitar.getProperty("composition.properties")); } public void loadIcons(){ this.info.setImage(TuxGuitar.instance().getIconManager().getSongProperties()); } public void update(){ //Nothing to do } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TrackToolItems.java0000644000175000017500000000335111273045224030606 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.track.AddTrackAction; import org.herac.tuxguitar.gui.actions.track.RemoveTrackAction; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TrackToolItems extends ToolItems{ public static final String NAME = "track.items"; private ToolItem add; private ToolItem remove; public TrackToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.add = new ToolItem(toolBar, SWT.PUSH); this.add.addSelectionListener(TuxGuitar.instance().getAction(AddTrackAction.NAME)); this.remove = new ToolItem(toolBar, SWT.PUSH); this.remove.addSelectionListener(TuxGuitar.instance().getAction(RemoveTrackAction.NAME)); this.loadIcons(); this.loadProperties(); } public void loadProperties(){ this.add.setToolTipText(TuxGuitar.getProperty("track.add")); this.remove.setToolTipText(TuxGuitar.getProperty("track.remove")); } public void loadIcons(){ this.add.setImage(TuxGuitar.instance().getIconManager().getTrackAdd()); this.remove.setImage(TuxGuitar.instance().getIconManager().getTrackRemove()); } public void update(){ boolean running = TuxGuitar.instance().getPlayer().isRunning(); this.add.setEnabled(!running); this.remove.setEnabled(!running); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TransportToolItems.java0000644000175000017500000001245011273045224031536 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction; import org.herac.tuxguitar.gui.actions.transport.TransportStopAction; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TransportToolItems extends ToolItems{ public static final String NAME = "transport.items"; private static final int STATUS_STOPPED = 1; private static final int STATUS_PAUSED = 2; private static final int STATUS_RUNNING = 3; private ToolItem first; private ToolItem last; private ToolItem previous; private ToolItem next; private ToolItem stop; private ToolItem play; private int status; public TransportToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ this.first = new ToolItem(toolBar,SWT.PUSH); this.first.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TuxGuitar.instance().getTransport().gotoFirst(); } }); this.previous = new ToolItem(toolBar,SWT.PUSH); this.previous.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TuxGuitar.instance().getTransport().gotoPrevious(); } }); this.stop = new ToolItem(toolBar,SWT.PUSH); this.stop.addSelectionListener(TuxGuitar.instance().getAction(TransportStopAction.NAME)); this.play = new ToolItem(toolBar,SWT.PUSH); this.play.addSelectionListener(TuxGuitar.instance().getAction(TransportPlayAction.NAME)); this.next = new ToolItem(toolBar,SWT.PUSH); this.next.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TuxGuitar.instance().getTransport().gotoNext(); } }); this.last = new ToolItem(toolBar,SWT.PUSH); this.last.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TuxGuitar.instance().getTransport().gotoLast(); } }); this.status = STATUS_STOPPED; this.loadIcons(); this.loadProperties(); } public void update(){ loadIcons(false); } public void loadProperties(){ this.play.setToolTipText(TuxGuitar.getProperty("transport.start")); this.stop.setToolTipText(TuxGuitar.getProperty("transport.stop")); this.first.setToolTipText(TuxGuitar.getProperty("transport.first")); this.last.setToolTipText(TuxGuitar.getProperty("transport.last")); this.previous.setToolTipText(TuxGuitar.getProperty("transport.previous")); this.next.setToolTipText(TuxGuitar.getProperty("transport.next")); } public void loadIcons(){ loadIcons(true); } public void loadIcons(boolean force){ int lastStatus = this.status; if(TuxGuitar.instance().getPlayer().isRunning()){ this.status = STATUS_RUNNING; }else if(TuxGuitar.instance().getPlayer().isPaused()){ this.status = STATUS_PAUSED; }else{ this.status = STATUS_STOPPED; } if(force || lastStatus != this.status){ if(this.status == STATUS_RUNNING){ this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst2()); this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast2()); this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious2()); this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext2()); this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPause()); this.play.setToolTipText(TuxGuitar.getProperty("transport.pause")); }else if(this.status == STATUS_PAUSED){ this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst2()); this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast2()); this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious2()); this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext2()); this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay2()); this.play.setToolTipText(TuxGuitar.getProperty("transport.start")); }else if(this.status == STATUS_STOPPED){ this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst1()); this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast1()); this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious1()); this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext1()); this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1()); this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1()); this.play.setToolTipText(TuxGuitar.getProperty("transport.start")); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/ViewToolItems.java0000644000175000017500000000461111273045224030454 0ustar julianjulian/* * Created on 02-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.items.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.view.ShowFretBoardAction; import org.herac.tuxguitar.gui.actions.view.ShowMixerAction; import org.herac.tuxguitar.gui.actions.view.ShowTransportAction; import org.herac.tuxguitar.gui.items.ToolItems; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ViewToolItems extends ToolItems{ public static final String NAME = "view.items"; private ToolItem showFretBoard; private ToolItem showMixer; private ToolItem showTransport; public ViewToolItems(){ super(NAME); } public void showItems(ToolBar toolBar){ //--FRETBOARD-- this.showFretBoard = new ToolItem(toolBar, SWT.CHECK); this.showFretBoard.addSelectionListener(TuxGuitar.instance().getAction(ShowFretBoardAction.NAME)); //--MIXER-- this.showMixer = new ToolItem(toolBar, SWT.CHECK); this.showMixer.addSelectionListener(TuxGuitar.instance().getAction(ShowMixerAction.NAME)); //--TRANSPORT-- this.showTransport = new ToolItem(toolBar, SWT.CHECK); this.showTransport.addSelectionListener(TuxGuitar.instance().getAction(ShowTransportAction.NAME)); this.loadIcons(); this.loadProperties(); } public void update(){ this.showFretBoard.setSelection(TuxGuitar.instance().getFretBoardEditor().isVisible()); this.showMixer.setSelection(!TuxGuitar.instance().getMixer().isDisposed()); this.showTransport.setSelection(!TuxGuitar.instance().getTransport().isDisposed()); } public void loadProperties(){ this.showFretBoard.setToolTipText(TuxGuitar.getProperty("view.show-fretboard")); this.showMixer.setToolTipText(TuxGuitar.getProperty("view.show-mixer")); this.showTransport.setToolTipText(TuxGuitar.getProperty("view.show-transport")); } public void loadIcons(){ this.showFretBoard.setImage(TuxGuitar.instance().getIconManager().getFretboard()); this.showMixer.setImage(TuxGuitar.instance().getIconManager().getMixer()); this.showTransport.setImage(TuxGuitar.instance().getIconManager().getTransport()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsReader.java0000644000175000017500000000364111273045224030377 0ustar julianjulianpackage org.herac.tuxguitar.gui.items.xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.herac.tuxguitar.gui.items.ItemManager; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class ToolBarsReader { private static final String ITEM_TAG = "toolbar"; private static final String ATTR_NAME = "name"; private static final String ATTR_ENABLED = "enabled"; public static void loadToolBars(ItemManager manager,File file){ try { if (file.exists()){ loadToolBars(manager,getDocument(file).getFirstChild()); } } catch (Throwable throwable) { throwable.printStackTrace(); } } private static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(file); return document; } private static void loadToolBars(ItemManager manager,Node node){ NodeList listNode = node.getChildNodes(); int index = 0; for (int i = 0; i < listNode.getLength(); i++) { Node child = listNode.item(i); String nameNode = child.getNodeName(); if (nameNode.equals(ITEM_TAG)) { NamedNodeMap params = child.getAttributes(); Node name = params.getNamedItem(ATTR_NAME); Node enabled = params.getNamedItem(ATTR_ENABLED); if (name == null || enabled == null || name.getNodeValue() == null || enabled.getNodeValue() == null ){ System.err.println("Invalid ToolBar Attributes."); continue; } manager.setToolBarStatus(name.getNodeValue(),Boolean.valueOf(enabled.getNodeValue().trim()).booleanValue(), index ++); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsWriter.java0000644000175000017500000000525111273045224030450 0ustar julianjulianpackage org.herac.tuxguitar.gui.items.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.herac.tuxguitar.gui.items.ToolItems; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Node; public class ToolBarsWriter { private static final String ITEM_LIST_TAG = "toolbars"; private static final String ITEM_TAG = "toolbar"; private static final String ATTR_NAME = "name"; private static final String ATTR_ENABLED = "enabled"; public static void saveToolBars(ToolItems[] items,File file) { try { Document doc = createDocument(); setToolBars(items,doc); saveDocument(doc,file); } catch (Throwable throwable) { throwable.printStackTrace(); } } public static Document createDocument() throws ParserConfigurationException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); return document; } public static void saveDocument(Document document,File file) throws FileNotFoundException, TransformerException { FileOutputStream fs = new FileOutputStream(file); // Write it out again TransformerFactory xformFactory = TransformerFactory.newInstance(); Transformer idTransform = xformFactory.newTransformer(); Source input = new DOMSource(document); Result output = new StreamResult(fs); idTransform.setOutputProperty(OutputKeys.INDENT, "yes"); idTransform.transform(input, output); } private static void setToolBars(ToolItems[] items,Document document){ //chords tag Node listNode = document.createElement(ITEM_LIST_TAG); for(int i = 0; i < items.length ; i ++){ //chord tag Node node = document.createElement(ITEM_TAG); listNode.appendChild(node); //name attribute Attr attribute = document.createAttribute(ATTR_NAME); attribute.setNodeValue( items[i].getName()); node.getAttributes().setNamedItem(attribute); //enabled attribute attribute = document.createAttribute(ATTR_ENABLED); attribute.setNodeValue( Boolean.toString(items[i].isEnabled())); node.getAttributes().setNamedItem(attribute); } document.appendChild(listNode); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigDefaults.java0000644000175000017500000001561111273045225031530 0ustar julianjulian/* * Created on 27-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.system.config; import java.io.InputStream; import java.util.Properties; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.fretboard.FretBoardConfig; import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.util.TGFileUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGConfigDefaults{ private static final String DEFAULT_FILE = "config.dist"; private static final String DEFAULT_FONT_NAME = getDefaultFontName(); private Properties properties; public TGConfigDefaults(){ this.properties = new Properties(); this.loadDefaults(); this.loadDefaultFile(); } public void loadDefaultFile() { try { InputStream is = TGFileUtils.getResourceAsStream(DEFAULT_FILE); if(is != null){ this.properties.load(is); } } catch (Exception e) { e.printStackTrace(); } } private void loadDefaults(){ this.loadProperty(TGConfigKeys.SKIN,"Lavender"); this.loadProperty(TGConfigKeys.WINDOW_TITLE,"${appname} - ${filename}"); this.loadProperty(TGConfigKeys.SHOW_SPLASH,true); this.loadProperty(TGConfigKeys.MAXIMIZED,false); this.loadProperty(TGConfigKeys.WIDTH,800); this.loadProperty(TGConfigKeys.HEIGHT,600); this.loadProperty(TGConfigKeys.SHOW_MIXER,false); this.loadProperty(TGConfigKeys.SHOW_TRANSPORT,false); this.loadProperty(TGConfigKeys.SHOW_FRETBOARD,false); this.loadProperty(TGConfigKeys.SHOW_PIANO,false); this.loadProperty(TGConfigKeys.SHOW_MARKERS,false); this.loadProperty(TGConfigKeys.LAYOUT_MODE,ViewLayout.MODE_PAGE); this.loadProperty(TGConfigKeys.LAYOUT_STYLE,(ViewLayout.DISPLAY_TABLATURE | ViewLayout.DISPLAY_SCORE | ViewLayout.DISPLAY_COMPACT | ViewLayout.DISPLAY_CHORD_DIAGRAM)); this.loadProperty(TGConfigKeys.EDITOR_MOUSE_MODE,EditorKit.MOUSE_MODE_EDITION); this.loadProperty(TGConfigKeys.EDITOR_NATURAL_KEY_MODE,true); this.loadProperty(TGConfigKeys.FONT_DEFAULT, (DEFAULT_FONT_NAME + ",6,0")); this.loadProperty(TGConfigKeys.FONT_NOTE, (DEFAULT_FONT_NAME + ",7,0")); this.loadProperty(TGConfigKeys.FONT_TIME_SIGNATURE, (DEFAULT_FONT_NAME + ",13,1")); this.loadProperty(TGConfigKeys.FONT_LYRIC, (DEFAULT_FONT_NAME + ",7,0")); this.loadProperty(TGConfigKeys.FONT_TEXT, (DEFAULT_FONT_NAME + ",8,0")); this.loadProperty(TGConfigKeys.FONT_CHORD, (DEFAULT_FONT_NAME + ",7,0")); this.loadProperty(TGConfigKeys.FONT_CHORD_FRET, (DEFAULT_FONT_NAME + ",5,0")); this.loadProperty(TGConfigKeys.FONT_GRACE, (DEFAULT_FONT_NAME + ",6,0")); this.loadProperty(TGConfigKeys.FONT_MARKER, (DEFAULT_FONT_NAME + ",7,0")); this.loadProperty(TGConfigKeys.FONT_PRINTER_DEFAULT, (DEFAULT_FONT_NAME + ",6,0")); this.loadProperty(TGConfigKeys.FONT_PRINTER_NOTE, (DEFAULT_FONT_NAME + ",6,0")); this.loadProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE, (DEFAULT_FONT_NAME + ",10,1")); this.loadProperty(TGConfigKeys.FONT_PRINTER_LYRIC, (DEFAULT_FONT_NAME + ",7,0")); this.loadProperty(TGConfigKeys.FONT_PRINTER_TEXT, (DEFAULT_FONT_NAME + ",8,0")); this.loadProperty(TGConfigKeys.FONT_PRINTER_CHORD, (DEFAULT_FONT_NAME + ",7,0")); this.loadProperty(TGConfigKeys.FONT_PRINTER_GRACE, (DEFAULT_FONT_NAME + ",6,0")); this.loadProperty(TGConfigKeys.FONT_ABOUT_DIALOG_TITLE, (DEFAULT_FONT_NAME + ",36,3")); this.loadProperty(TGConfigKeys.COLOR_BACKGROUND,"255,255,255"); this.loadProperty(TGConfigKeys.COLOR_LINE,"214,214,214"); this.loadProperty(TGConfigKeys.COLOR_SCORE_NOTE,"64,64,64"); this.loadProperty(TGConfigKeys.COLOR_TAB_NOTE,"64,64,64"); this.loadProperty(TGConfigKeys.COLOR_PLAY_NOTE,"255,0,0"); this.loadProperty(TGConfigKeys.COLOR_CARET_1,"127,127,127"); this.loadProperty(TGConfigKeys.COLOR_CARET_2,"165,42,42"); this.loadProperty(TGConfigKeys.COLOR_LOOP_S_MARKER,"42,165,42"); this.loadProperty(TGConfigKeys.COLOR_LOOP_E_MARKER,"165,42,42"); this.loadProperty(TGConfigKeys.MAX_HISTORY_FILES,10); this.loadProperty(TGConfigKeys.MIN_SCORE_TABLATURE_SPACING,20); this.loadProperty(TGConfigKeys.SCORE_LINE_SPACING,8); this.loadProperty(TGConfigKeys.TAB_LINE_SPACING,10); this.loadProperty(TGConfigKeys.FIRST_TRACK_SPACING,20); this.loadProperty(TGConfigKeys.TRACK_SPACING,10); this.loadProperty(TGConfigKeys.LANGUAGE,""); this.loadProperty(TGConfigKeys.FRETBOARD_STRING_SPACING,20); this.loadProperty(TGConfigKeys.FRETBOARD_STYLE ,FretBoardConfig.DISPLAY_TEXT_SCALE); this.loadProperty(TGConfigKeys.FRETBOARD_DIRECTION ,FretBoardConfig.DIRECTION_RIGHT); this.loadProperty(TGConfigKeys.FRETBOARD_FONT, (DEFAULT_FONT_NAME + ",8,1")); this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,"0,0,0"); this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,"227,217,217"); this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,"192,192,192"); this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,"42,85,128"); this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,"128,32,32"); this.loadProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,"255,255,255"); this.loadProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,"0,0,0"); this.loadProperty(TGConfigKeys.PIANO_COLOR_NOTE,"42,85,128"); this.loadProperty(TGConfigKeys.PIANO_COLOR_SCALE,"128,32,32"); this.loadProperty(TGConfigKeys.MATRIX_FONT, (DEFAULT_FONT_NAME + ",8,1")); this.loadProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,"190,190,190"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_BORDER,"25,25,25"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_POSITION,"190,190,190"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_NOTE,"42,85,128"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,"128,32,32"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,"255,255,255"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,"230,230,250"); this.loadProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,"173,216,230"); this.loadProperty(TGConfigKeys.TABLE_AUTO_SIZE,true); this.loadProperty(TGConfigKeys.BROWSER_LINES_VISIBLE,true); } public Properties getProperties() { return this.properties; } private void loadProperty(String key,String value){ this.properties.setProperty(key,value); } private void loadProperty(String key,int value){ this.properties.setProperty(key,Integer.toString(value)); } private void loadProperty(String key,boolean value){ this.properties.setProperty(key,Boolean.toString(value)); } private static String getDefaultFontName(){ Font font = TuxGuitar.instance().getDisplay().getSystemFont(); if( font != null ){ FontData[] fd = font.getFontData(); if(fd != null && fd.length > 0){ return fd[0].getName(); } } return new String(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigEditor.java0000644000175000017500000002330211273045225031203 0ustar julianjulian/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.system.config; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.system.config.items.LanguageOption; import org.herac.tuxguitar.gui.system.config.items.MainOption; import org.herac.tuxguitar.gui.system.config.items.Option; import org.herac.tuxguitar.gui.system.config.items.SkinOption; import org.herac.tuxguitar.gui.system.config.items.SoundOption; import org.herac.tuxguitar.gui.system.config.items.StylesOption; import org.herac.tuxguitar.gui.system.config.items.ToolBarsOption; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.util.TGSynchronizer; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGConfigEditor{ protected Shell dialog; protected TGConfigManager config; protected List options; protected Properties defaults; protected boolean accepted; protected List runnables; public TGConfigEditor() { this.config = TuxGuitar.instance().getConfig(); } public void showDialog(Shell shell) { this.accepted = false; this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout()); this.dialog.setText(TuxGuitar.getProperty("settings.config")); //-------main------------------------------------- Composite mainComposite = new Composite(this.dialog,SWT.NONE); mainComposite.setLayout(new GridLayout(2,false)); mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true)); createComposites(mainComposite); //-------buttons------------------------------------- Composite buttonComposite = new Composite(this.dialog,SWT.NONE); buttonComposite.setLayout(new GridLayout(3,true)); buttonComposite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); Button buttonDefaults = new Button(buttonComposite, SWT.PUSH); buttonDefaults.setLayoutData(getButtonData()); buttonDefaults.setText(TuxGuitar.getProperty("defaults")); buttonDefaults.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGConfigEditor.this.accepted = true; TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); dispose(); setDefaults(); ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_NO ); if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); return; } applyConfig(true); } }); Button buttonOK = new Button(buttonComposite, SWT.PUSH); buttonOK.setLayoutData(getButtonData()); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGConfigEditor.this.accepted = true; TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); updateOptions(); dispose(); ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_NO ); if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){ TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); return; } applyConfig(false); } }); Button buttonCancel = new Button(buttonComposite, SWT.PUSH); buttonCancel.setLayoutData(getButtonData()); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); dispose(); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); } }); this.dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); if(!this.accepted){ ActionLock.unlock(); } } private void createComposites(Composite parent) { ToolBar toolBar = new ToolBar(parent, SWT.VERTICAL | SWT.FLAT | SWT.WRAP); toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true)); Composite option = new Composite(parent,SWT.NONE); option.setLayout(new FormLayout()); initOptions(toolBar,option); Point optionSize = computeOptionsSize( 0 , toolBar.computeSize(SWT.DEFAULT,SWT.DEFAULT).y ); option.setLayoutData(new GridData(optionSize.x,optionSize.y)); if(this.options.size() > 0){ select((Option)this.options.get(0)); } } private void initOptions(ToolBar toolBar,Composite parent){ this.options = new ArrayList(); this.options.add(new MainOption(this,toolBar,parent)); this.options.add(new StylesOption(this,toolBar,parent)); this.options.add(new LanguageOption(this,toolBar,parent)); this.options.add(new ToolBarsOption(this,toolBar,parent)); this.options.add(new SkinOption(this,toolBar,parent)); this.options.add(new SoundOption(this,toolBar,parent)); Iterator it = this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); option.createOption(); } } private Point computeOptionsSize(int minimumWidth, int minimumHeight){ int width = minimumWidth; int height = minimumHeight; Iterator it = this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); Point size = option.computeSize(); if(size.x > width){ width = size.x; } if(size.y > height){ height = size.y; } } return new Point(width, height); } public void pack(){ this.dialog.pack(); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } public GridData makeGridData(int with,int height,int minWith,int minHeight){ GridData data = new GridData(); data.minimumWidth = minWith; data.minimumHeight = minHeight; if(with > 0){ data.widthHint = with; }else{ data.horizontalAlignment = SWT.FILL; data.grabExcessHorizontalSpace = true; } if(height > 0){ data.heightHint = with; }else{ data.verticalAlignment = SWT.FILL; data.grabExcessVerticalSpace = true; } return data; } public void select(Option option){ hideAll(); option.setVisible(true); //this.dialog.layout(); this.dialog.redraw(); } private void hideAll(){ Iterator it = this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); option.setVisible(false); } } protected void updateOptions(){ Iterator it = this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); option.updateConfig(); } this.config.save(); } protected void setDefaults(){ Iterator it = this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); option.updateDefaults(); } this.config.save(); } protected void applyConfig(final boolean force){ TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { TGConfigEditor.this.runnables = new ArrayList(); Iterator it = TGConfigEditor.this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); option.applyConfig(force); } try { TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { Iterator it = TGConfigEditor.this.runnables.iterator(); while(it.hasNext()){ Runnable current = (Runnable)it.next(); current.run(); } new Thread(new Runnable() { public void run() { TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().updateCache(true); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } }).start(); } }); } catch (Throwable throwable) { TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().updateCache(true); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); throwable.printStackTrace(); } } }).start(); } protected void dispose(){ Iterator it = this.options.iterator(); while(it.hasNext()){ Option option = (Option)it.next(); option.dispose(); } getDialog().dispose(); } public Properties getDefaults(){ if(this.defaults == null){ this.defaults = new TGConfigDefaults().getProperties(); } return this.defaults; } public TGConfigManager getConfig(){ return this.config; } public TablatureEditor getEditor(){ return TuxGuitar.instance().getTablatureEditor(); } public Shell getDialog(){ return this.dialog; } public void addSyncThread(Runnable runnable){ this.runnables.add( runnable ); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigKeys.java0000644000175000017500000001311411273045225030670 0ustar julianjulian/* * Created on 27-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.system.config; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TGConfigKeys { public static final String SKIN = "skin"; public static final String WINDOW_TITLE = "window.title"; public static final String SHOW_SPLASH = "show.splash"; public static final String MAXIMIZED = "window.maximized"; public static final String WIDTH = "window.width"; public static final String HEIGHT = "window.height"; public static final String SHOW_MIXER = "show.mixer"; public static final String SHOW_TRANSPORT = "show.transport"; public static final String SHOW_FRETBOARD = "show.fretboard"; public static final String SHOW_MATRIX = "show.matrix"; public static final String SHOW_PIANO = "show.piano"; public static final String SHOW_MARKERS = "show.markers"; public static final String LAYOUT_MODE = "layout.mode"; public static final String LAYOUT_STYLE = "layout.style"; public static final String LAYOUT_PAGE_FORCE_WIDTH = "layout.page.force-width"; public static final String LANGUAGE = "language"; public static final String EDITOR_MOUSE_MODE = "editor.mouse.mode"; public static final String EDITOR_NATURAL_KEY_MODE = "editor.natural.key.mode"; public static final String FONT_DEFAULT = "font.default"; public static final String FONT_NOTE = "font.note"; public static final String FONT_TIME_SIGNATURE = "font.time-signature"; public static final String FONT_CHORD = "font.chord"; public static final String FONT_CHORD_FRET = "font.chord-fret"; public static final String FONT_GRACE = "font.grace"; public static final String FONT_LYRIC = "font.lyric"; public static final String FONT_TEXT = "font.text"; public static final String FONT_MARKER = "font.marker"; public static final String FONT_PRINTER_DEFAULT = "font.printer.default"; public static final String FONT_PRINTER_NOTE = "font.printer.note"; public static final String FONT_PRINTER_TIME_SIGNATURE = "font.printer.time-signature"; public static final String FONT_PRINTER_LYRIC = "font.printer.lyric"; public static final String FONT_PRINTER_TEXT = "font.printer.text"; public static final String FONT_PRINTER_CHORD = "font.printer.chord"; public static final String FONT_PRINTER_GRACE = "font.printer.grace"; public static final String FONT_ABOUT_DIALOG_TITLE = "font.about.dialog.title"; public static final String COLOR_BACKGROUND = "color.background"; public static final String COLOR_LINE = "color.line"; public static final String COLOR_SCORE_NOTE = "color.score.note"; public static final String COLOR_TAB_NOTE = "color.tab.note"; public static final String COLOR_PLAY_NOTE = "color.play.note"; public static final String COLOR_CARET_1 = "color.caret.1"; public static final String COLOR_CARET_2 = "color.caret.2"; public static final String COLOR_LOOP_S_MARKER = "color.loop.s.marker"; public static final String COLOR_LOOP_E_MARKER = "color.loop.e.marker"; public static final String MIDI_PORT = "midi.port"; public static final String MIDI_SEQUENCER = "midi.sequencer"; public static final String MAX_HISTORY_FILES = "history.max-files"; public static final String MIN_SCORE_TABLATURE_SPACING = "score.min.score-tab-spacing"; public static final String SCORE_LINE_SPACING = "score.line-spacing"; public static final String TAB_LINE_SPACING = "tab.line-spacing"; public static final String FIRST_TRACK_SPACING = "first-track.spacing"; public static final String TRACK_SPACING = "track.spacing"; public static final String FRETBOARD_STRING_SPACING = "fretboard.string-spacing"; public static final String FRETBOARD_STYLE = "fretboard.style"; public static final String FRETBOARD_FONT = "fretboard.font"; public static final String FRETBOARD_COLOR_BACKGROUND = "fretboard.color.background"; public static final String FRETBOARD_COLOR_STRING = "fretboard.color.string"; public static final String FRETBOARD_COLOR_FRET_POINT = "fretboard.color.fret-point"; public static final String FRETBOARD_COLOR_NOTE = "fretboard.color.note"; public static final String FRETBOARD_COLOR_SCALE = "fretboard.color.scale"; public static final String FRETBOARD_DIRECTION = "fretboard.direction"; public static final String PIANO_COLOR_KEY_NATURAL = "piano.color.natural-key"; public static final String PIANO_COLOR_KEY_NOT_NATURAL = "piano.color.not-natural-key"; public static final String PIANO_COLOR_NOTE = "piano.color.note"; public static final String PIANO_COLOR_SCALE = "piano.color.scale"; public static final String MATRIX_GRIDS = "matrix.grids"; public static final String MATRIX_FONT = "matrix.font"; public static final String MATRIX_COLOR_FOREGROUND = "matrix.color.foreground"; public static final String MATRIX_COLOR_LINE_1= "matrix.color.line-1"; public static final String MATRIX_COLOR_LINE_2= "matrix.color.line-2"; public static final String MATRIX_COLOR_LINE_3= "matrix.color.line-3"; public static final String MATRIX_COLOR_BORDER = "matrix.color.border"; public static final String MATRIX_COLOR_POSITION = "matrix.color.position"; public static final String MATRIX_COLOR_NOTE = "matrix.color.note"; public static final String MATRIX_COLOR_PLAY_NOTE = "matrix.color.play-note"; public static final String TABLE_AUTO_SIZE = "table.auto-size"; public static final String BROWSER_LINES_VISIBLE = "browser.lines-visible"; public static final String SYSTEM_PLAYER = "system.player"; public static final String FORCE_OS_DEFAULTS = "painter.force-os-defaults"; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManager.java0000644000175000017500000001400511273045225031327 0ustar julianjulian/* * Created on 09-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.system.config; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.Map; import java.util.Properties; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGConfigManager { private Properties properties; public TGConfigManager() { super(); } public void init(){ this.properties = new Properties(getDefaults()); this.load(); } private String getProperty(String key) { return this.properties.getProperty(key); } public String getStringConfigValue(String key,String defaultValue) { try{ String property = getProperty(key); return (property == null)?defaultValue:property.trim(); }catch(Throwable throwable){ throwable.printStackTrace(); } return defaultValue; } public String getStringConfigValue(String key) { return this.getStringConfigValue(key,null); } public int getIntConfigValue(String key,int defaultValue) { try{ String value = getProperty(key); return (value == null)?defaultValue:Integer.parseInt(value.trim()); }catch(Throwable throwable){ throwable.printStackTrace(); } return defaultValue; } public int getIntConfigValue(String key) { return this.getIntConfigValue(key,0); } public float getFloatConfigValue(String key,float defaultValue) { try{ String value = getProperty(key); return (value == null)?defaultValue:Float.parseFloat(value.trim()); }catch(Throwable throwable){ throwable.printStackTrace(); } return defaultValue; } public float getFloatConfigValue(String key) { return this.getFloatConfigValue(key,0f); } public double getDoubleConfigValue(String key,double defaultValue) { try{ String value = getProperty(key); return (value == null)?defaultValue:Double.parseDouble(value.trim()); }catch(Throwable throwable){ throwable.printStackTrace(); } return defaultValue; } public double getDoubleConfigValue(String key) { return this.getDoubleConfigValue(key,0.0); } public boolean getBooleanConfigValue(String key,boolean defaultValue) { try{ String value = getProperty(key); return (value == null)?defaultValue:Boolean.valueOf(value.trim()).booleanValue(); }catch(Throwable throwable){ throwable.printStackTrace(); } return defaultValue; } public boolean getBooleanConfigValue(String key) { return this.getBooleanConfigValue(key,false); } public FontData getFontDataConfigValue(String key){ try{ String value = getProperty(key); if(value != null){ String[] values = value.trim().split(","); if(values != null && values.length == 3){ try{ String name = values[0].trim(); int size = Integer.parseInt(values[1].trim()); int style = Integer.parseInt(values[2].trim()); return new FontData( (name == null ? "" : name),size,style); }catch(NumberFormatException e){ e.printStackTrace(); } } } }catch(Throwable throwable){ throwable.printStackTrace(); } return new FontData(); } public RGB getRGBConfigValue(String key){ try{ String value = getProperty(key); if(value != null){ String[] values = value.trim().split(","); if(values != null && values.length == 3){ try{ int red = Integer.parseInt(values[0].trim()); int green = Integer.parseInt(values[1].trim()); int blue = Integer.parseInt(values[2].trim()); return new RGB(red,green,blue); }catch(NumberFormatException e){ e.printStackTrace(); } } } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public void setProperty(String key,String value){ this.properties.setProperty(key, (value != null ? value : new String()) ); } public void setProperty(String key,int value){ this.setProperty(key,Integer.toString(value)); } public void setProperty(String key,float value){ this.setProperty(key,Float.toString(value)); } public void setProperty(String key,double value){ this.setProperty(key,Double.toString(value)); } public void setProperty(String key,boolean value){ this.setProperty(key,Boolean.toString(value)); } public void setProperty(String key,RGB rgb){ this.setProperty(key,(rgb.red + "," + rgb.green + "," + rgb.blue)); } public void setProperty(String key,FontData fd){ this.setProperty(key,(fd.getName() + "," + fd.getHeight() + "," + fd.getStyle())); } public void setDefaults(){ Properties defaults = new TGConfigDefaults().getProperties(); Iterator it = defaults.entrySet().iterator(); while(it.hasNext()){ Map.Entry property = (Map.Entry)it.next(); setProperty((String)property.getKey(),(String)property.getValue()); } this.save(); } public void removeProperty(String key){ this.properties.remove(key); } public void clear(){ this.properties.clear(); } public void load() { try { if(new File(getFileName()).exists()){ InputStream inputStream = new FileInputStream(getFileName()); this.properties.clear(); this.properties.load(inputStream); }else{ this.save(); } } catch (Exception e) { e.printStackTrace(); } } public void save(){ try { File file = new File(getFileName()); if(!file.exists()){ File folder = file.getParentFile(); if(folder != null && !folder.exists()){ folder.mkdirs(); } } this.properties.store(new FileOutputStream(file),getName()); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } public abstract String getName(); public abstract String getFileName(); public abstract Properties getDefaults(); }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManagerImpl.java0000644000175000017500000000101511273045225032146 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config; import java.io.File; import java.util.Properties; import org.herac.tuxguitar.gui.util.TGFileUtils; public class TGConfigManagerImpl extends TGConfigManager{ public TGConfigManagerImpl(){ super(); } public String getName() { return "System Configuration"; } public String getFileName(){ return TGFileUtils.PATH_USER_CONFIG + File.separator + "config.properties"; } public Properties getDefaults() { return new TGConfigDefaults().getProperties(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconLoader.java0000644000175000017500000000015511273045225030262 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.icons; public interface IconLoader { public void loadIcons(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconManager.java0000644000175000017500000005124011273045225030427 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.icons; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Resource; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.util.TGFileUtils; import org.herac.tuxguitar.song.models.TGDuration; public class IconManager { private String theme; private List loaders; private List disposableIcons; private Image[] durations; private Image editUndo; private Image editRedo; private Image editVoice1; private Image editVoice2; private Image editModeSelection; private Image editModeEdition; private Image editModeEditionNotNatural; private Image layoutPage; private Image layoutLinear; private Image layoutMultitrack; private Image layoutScore; private Image layoutCompact; private Image transport; private Image transportFirst1; private Image transportFirst2; private Image transportLast1; private Image transportLast2; private Image transportPrevious1; private Image transportPrevious2; private Image transportNext1; private Image transportNext2; private Image transportStop1; private Image transportStop2; private Image transportPlay1; private Image transportPlay2; private Image transportPause; private Image transportIconFirst1; private Image transportIconFirst2; private Image transportIconLast1; private Image transportIconLast2; private Image transportIconPrevious1; private Image transportIconPrevious2; private Image transportIconNext1; private Image transportIconNext2; private Image transportIconStop1; private Image transportIconStop2; private Image transportIconPlay1; private Image transportIconPlay2; private Image transportIconPause; private Image transportMetronome; private Image transportMode; private Image markerList; private Image markerAdd; private Image markerRemove; private Image markerFirst; private Image markerLast; private Image markerPrevious; private Image markerNext; private Image aboutDescription; private Image aboutLicense; private Image aboutAuthors; private Image appIcon; private Image appSplash; private Image optionMain; private Image optionStyle; private Image optionSound; private Image optionLanguage; private Image optionToolbars; private Image optionSkin; private Image trackAdd; private Image trackRemove; private Image paintableTempo; private Image paintableGrace; private Image fretboard; private Image fretboardFirstFret; private Image fretboardFret; private Image compositionTimeSignature; private Image compositionTempo; private Image compositionRepeatOpen; private Image compositionRepeatClose; private Image compositionRepeatAlternative; private Image songProperties; private Image durationDotted; private Image durationDoubleDotted; private Image divisionType; private Image fileNew; private Image fileOpen; private Image fileSave; private Image fileSaveAs; private Image filePrint; private Image filePrintPreview; private Image chord; private Image noteTied; private Image mixer; private Image dynamicPPP; private Image dynamicPP; private Image dynamicP; private Image dynamicMP; private Image dynamicMF; private Image dynamicF; private Image dynamicFF; private Image dynamicFFF; private Image effectDead; private Image effectGhost; private Image effectAccentuated; private Image effectHeavyAccentuated; private Image effectHarmonic; private Image effectGrace; private Image effectBend; private Image effectTremoloBar; private Image effectSlide; private Image effectHammer; private Image effectVibrato; private Image effectTrill; private Image effectTremoloPicking; private Image effectPalmMute; private Image effectStaccato; private Image effectTapping; private Image effectSlapping; private Image effectPopping; private Image effectFadeIn; private Image browserNew; private Image browserFile; private Image browserFolder; private Image browserRoot; private Image browserBack; private Image browserRefresh; private Image settings; public IconManager(){ this.loaders = new ArrayList(); this.disposableIcons = new ArrayList(); this.loadIcons(); } public void addLoader(IconLoader loader){ if( !this.loaders.contains( loader )){ this.loaders.add(loader); } } public void removeLoader(IconLoader loader){ if( this.loaders.contains( loader )){ this.loaders.remove(loader); } } private void fireChanges(){ Iterator it = this.loaders.iterator(); while(it.hasNext()){ IconLoader loader = (IconLoader)it.next(); loader.loadIcons(); } } public void reloadIcons(){ List disposableIcons = purgeDisposableIcons(); this.loadIcons(); this.fireChanges(); this.disposeIcons(disposableIcons); } public void loadIcons(){ this.theme = TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.SKIN); this.durations = new Image[]{ loadIcon("1.png"), loadIcon("2.png"), loadIcon("4.png"), loadIcon("8.png"), loadIcon("16.png"), loadIcon("32.png"), loadIcon("64.png") }; this.paintableTempo = loadIcon("tempo.png"); this.paintableGrace = loadIcon("grace.png"); this.layoutPage = loadIcon("layout_page.png"); this.layoutLinear = loadIcon("layout_linear.png"); this.layoutMultitrack = loadIcon("layout_multitrack.png"); this.layoutScore = loadIcon("layout_score.png"); this.layoutCompact = loadIcon("layout_compact.png"); this.fileNew = loadIcon("new.png"); this.fileOpen = loadIcon("open.png"); this.fileSave = loadIcon("save.png"); this.fileSaveAs = loadIcon("save-as.png"); this.filePrint = loadIcon("print.png"); this.filePrintPreview = loadIcon("print-preview.png"); this.editUndo = loadIcon("edit_undo.png"); this.editRedo = loadIcon("edit_redo.png"); this.editVoice1 = loadIcon("edit_voice_1.png"); this.editVoice2 = loadIcon("edit_voice_2.png"); this.editModeSelection = loadIcon("edit_mode_selection.png"); this.editModeEdition = loadIcon("edit_mode_edition.png"); this.editModeEditionNotNatural = loadIcon("edit_mode_edition_no_natural.png"); this.appIcon = loadIcon("icon.png"); this.appSplash = loadIcon("splash.png"); this.aboutDescription = loadIcon("about_description.png"); this.aboutLicense = loadIcon("about_license.png"); this.aboutAuthors = loadIcon("about_authors.png"); this.optionMain = loadIcon("option_view.png"); this.optionStyle = loadIcon("option_style.png"); this.optionSound = loadIcon("option_sound.png"); this.optionSkin = loadIcon("option_skin.png"); this.optionLanguage= loadIcon("option_language.png"); this.optionToolbars = loadIcon("option_toolbars.png"); this.compositionTimeSignature = loadIcon("timesignature.png"); this.compositionTempo = loadIcon("tempoicon.png"); this.compositionRepeatOpen = loadIcon("openrepeat.png"); this.compositionRepeatClose = loadIcon("closerepeat.png"); this.compositionRepeatAlternative = loadIcon("repeat_alternative.png"); this.songProperties = loadIcon("song_properties.png"); this.trackAdd = loadIcon("track_add.png"); this.trackRemove = loadIcon("track_remove.png"); this.durationDotted = loadIcon("dotted.png"); this.durationDoubleDotted = loadIcon("doubledotted.png"); this.divisionType = loadIcon("division-type.png"); this.fretboard = loadIcon("fretboard.png"); this.fretboardFirstFret = loadIcon("firstfret.png"); this.fretboardFret = loadIcon("fret.png"); this.chord = loadIcon("chord.png"); this.noteTied = loadIcon("tiednote.png"); this.transport = loadIcon("transport.png"); this.transportFirst1 = loadIcon("transport_first_1.png"); this.transportFirst2 = loadIcon("transport_first_2.png"); this.transportLast1 = loadIcon("transport_last_1.png"); this.transportLast2 = loadIcon("transport_last_2.png"); this.transportPrevious1 = loadIcon("transport_previous_1.png"); this.transportPrevious2 = loadIcon("transport_previous_2.png"); this.transportNext1 = loadIcon("transport_next_1.png"); this.transportNext2 = loadIcon("transport_next_2.png"); this.transportStop1 = loadIcon("transport_stop_1.png"); this.transportStop2 = loadIcon("transport_stop_2.png"); this.transportPlay1 = loadIcon("transport_play_1.png"); this.transportPlay2 = loadIcon("transport_play_2.png"); this.transportPause = loadIcon("transport_pause.png"); this.transportIconFirst1 = loadIcon("transport_icon_first_1.png"); this.transportIconFirst2 = loadIcon("transport_icon_first_2.png"); this.transportIconLast1 = loadIcon("transport_icon_last_1.png"); this.transportIconLast2 = loadIcon("transport_icon_last_2.png"); this.transportIconPrevious1 = loadIcon("transport_icon_previous_1.png"); this.transportIconPrevious2 = loadIcon("transport_icon_previous_2.png"); this.transportIconNext1 = loadIcon("transport_icon_next_1.png"); this.transportIconNext2 = loadIcon("transport_icon_next_2.png"); this.transportIconStop1 = loadIcon("transport_icon_stop_1.png"); this.transportIconStop2 = loadIcon("transport_icon_stop_2.png"); this.transportIconPlay1 = loadIcon("transport_icon_play_1.png"); this.transportIconPlay2 = loadIcon("transport_icon_play_2.png"); this.transportIconPause = loadIcon("transport_icon_pause.png"); this.transportMetronome = loadIcon("transport_metronome.png"); this.transportMode = loadIcon("transport_mode.png"); this.markerList = loadIcon("marker_list.png"); this.markerAdd = loadIcon("marker_add.png"); this.markerRemove = loadIcon("marker_remove.png"); this.markerFirst = loadIcon("marker_first.png"); this.markerLast = loadIcon("marker_last.png"); this.markerPrevious = loadIcon("marker_previous.png"); this.markerNext = loadIcon("marker_next.png"); this.mixer = loadIcon("mixer.png"); this.dynamicPPP = loadIcon("dynamic_ppp.png"); this.dynamicPP = loadIcon("dynamic_pp.png"); this.dynamicP = loadIcon("dynamic_p.png"); this.dynamicMP =loadIcon("dynamic_mp.png"); this.dynamicMF = loadIcon("dynamic_mf.png"); this.dynamicF = loadIcon("dynamic_f.png"); this.dynamicFF = loadIcon("dynamic_ff.png"); this.dynamicFFF = loadIcon("dynamic_fff.png"); this.effectDead = loadIcon("effect_dead.png"); this.effectGhost = loadIcon("effect_ghost.png"); this.effectAccentuated = loadIcon("effect_accentuated.png"); this.effectHeavyAccentuated = loadIcon("effect_heavy_accentuated.png"); this.effectHarmonic = loadIcon("effect_harmonic.png"); this.effectGrace = loadIcon("effect_grace.png"); this.effectBend = loadIcon("effect_bend.png"); this.effectTremoloBar = loadIcon("effect_tremolo_bar.png"); this.effectSlide = loadIcon("effect_slide.png"); this.effectHammer = loadIcon("effect_hammer.png"); this.effectVibrato = loadIcon("effect_vibrato.png"); this.effectTrill= loadIcon("effect_trill.png"); this.effectTremoloPicking = loadIcon("effect_tremolo_picking.png"); this.effectPalmMute= loadIcon("effect_palm_mute.png"); this.effectStaccato = loadIcon("effect_staccato.png"); this.effectTapping = loadIcon("effect_tapping.png"); this.effectSlapping = loadIcon("effect_slapping.png"); this.effectPopping = loadIcon("effect_popping.png"); this.effectFadeIn = loadIcon("effect_fade_in.png"); this.browserNew = loadIcon("browser_new.png"); this.browserFile = loadIcon("browser_file.png"); this.browserFolder = loadIcon("browser_folder.png"); this.browserRoot = loadIcon("browser_root.png"); this.browserBack = loadIcon("browser_back.png"); this.browserRefresh = loadIcon("browser_refresh.png"); this.settings = loadIcon("settings.png"); } private Image loadIcon(String name){ Image image = TGFileUtils.loadImage(this.theme,name); this.disposableIcons.add(image); return image; } private List purgeDisposableIcons(){ List disposableIcons = new ArrayList(); Iterator it = this.disposableIcons.iterator(); while( it.hasNext() ){ Resource resource = (Resource)it.next(); disposableIcons.add( resource ); } this.disposableIcons.clear(); return disposableIcons; } public void disposeIcons(List resources){ Iterator it = resources.iterator(); while( it.hasNext() ){ Image image = (Image)it.next(); image.dispose(); } } public void disposeIcons(){ this.disposeIcons(purgeDisposableIcons()); } public boolean shouldReload(){ return (!this.theme.equals(TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.SKIN))); } public Image getDuration(int value){ switch(value){ case TGDuration.WHOLE: return this.durations[0]; case TGDuration.HALF: return this.durations[1]; case TGDuration.QUARTER: return this.durations[2]; case TGDuration.EIGHTH: return this.durations[3]; case TGDuration.SIXTEENTH: return this.durations[4]; case TGDuration.THIRTY_SECOND: return this.durations[5]; case TGDuration.SIXTY_FOURTH: return this.durations[6]; } return null; } public Image getAboutAuthors() { return this.aboutAuthors; } public Image getAboutDescription() { return this.aboutDescription; } public Image getAboutLicense() { return this.aboutLicense; } public Image getAppIcon() { return this.appIcon; } public Image getAppSplash() { return this.appSplash; } public Image getChord() { return this.chord; } public Image getCompositionRepeatClose() { return this.compositionRepeatClose; } public Image getCompositionRepeatAlternative() { return this.compositionRepeatAlternative; } public Image getCompositionRepeatOpen() { return this.compositionRepeatOpen; } public Image getCompositionTempo() { return this.compositionTempo; } public Image getCompositionTimeSignature() { return this.compositionTimeSignature; } public Image getDurationDotted() { return this.durationDotted; } public Image getDurationDoubleDotted() { return this.durationDoubleDotted; } public Image getDivisionType() { return this.divisionType; } public Image getDynamicF() { return this.dynamicF; } public Image getDynamicFF() { return this.dynamicFF; } public Image getDynamicFFF() { return this.dynamicFFF; } public Image getDynamicMF() { return this.dynamicMF; } public Image getDynamicMP() { return this.dynamicMP; } public Image getDynamicP() { return this.dynamicP; } public Image getDynamicPP() { return this.dynamicPP; } public Image getDynamicPPP() { return this.dynamicPPP; } public Image getEditModeEdition() { return this.editModeEdition; } public Image getEditModeEditionNotNatural() { return this.editModeEditionNotNatural; } public Image getEditModeSelection() { return this.editModeSelection; } public Image getEditRedo() { return this.editRedo; } public Image getEditUndo() { return this.editUndo; } public Image getEditVoice1() { return this.editVoice1; } public Image getEditVoice2() { return this.editVoice2; } public Image getEffectAccentuated() { return this.effectAccentuated; } public Image getEffectBend() { return this.effectBend; } public Image getEffectDead() { return this.effectDead; } public Image getEffectFadeIn() { return this.effectFadeIn; } public Image getEffectGhost() { return this.effectGhost; } public Image getEffectGrace() { return this.effectGrace; } public Image getEffectHammer() { return this.effectHammer; } public Image getEffectHarmonic() { return this.effectHarmonic; } public Image getEffectHeavyAccentuated() { return this.effectHeavyAccentuated; } public Image getEffectPalmMute() { return this.effectPalmMute; } public Image getEffectPopping() { return this.effectPopping; } public Image getEffectSlapping() { return this.effectSlapping; } public Image getEffectSlide() { return this.effectSlide; } public Image getEffectStaccato() { return this.effectStaccato; } public Image getEffectTapping() { return this.effectTapping; } public Image getEffectTremoloBar() { return this.effectTremoloBar; } public Image getEffectTremoloPicking() { return this.effectTremoloPicking; } public Image getEffectTrill() { return this.effectTrill; } public Image getEffectVibrato() { return this.effectVibrato; } public Image getFileNew() { return this.fileNew; } public Image getFileOpen() { return this.fileOpen; } public Image getFilePrint() { return this.filePrint; } public Image getFilePrintPreview() { return this.filePrintPreview; } public Image getFileSave() { return this.fileSave; } public Image getFileSaveAs() { return this.fileSaveAs; } public Image getFretboard() { return this.fretboard; } public Image getFretboardFirstFret() { return this.fretboardFirstFret; } public Image getFretboardFret() { return this.fretboardFret; } public Image getLayoutLinear() { return this.layoutLinear; } public Image getLayoutMultitrack() { return this.layoutMultitrack; } public Image getLayoutPage() { return this.layoutPage; } public Image getLayoutScore() { return this.layoutScore; } public Image getLayoutCompact() { return this.layoutCompact; } public Image getMarkerAdd() { return this.markerAdd; } public Image getMarkerFirst() { return this.markerFirst; } public Image getMarkerLast() { return this.markerLast; } public Image getMarkerList() { return this.markerList; } public Image getMarkerNext() { return this.markerNext; } public Image getMarkerPrevious() { return this.markerPrevious; } public Image getMarkerRemove() { return this.markerRemove; } public Image getMixer() { return this.mixer; } public Image getNoteTied() { return this.noteTied; } public Image getOptionLanguage() { return this.optionLanguage; } public Image getOptionMain() { return this.optionMain; } public Image getOptionSound() { return this.optionSound; } public Image getOptionStyle() { return this.optionStyle; } public Image getOptionToolbars() { return this.optionToolbars; } public Image getOptionSkin() { return this.optionSkin; } public Image getPaintableGrace() { return this.paintableGrace; } public Image getPaintableTempo() { return this.paintableTempo; } public Image getSongProperties() { return this.songProperties; } public Image getTrackAdd() { return this.trackAdd; } public Image getTrackRemove() { return this.trackRemove; } public Image getTransport() { return this.transport; } public Image getTransportFirst1() { return this.transportFirst1; } public Image getTransportFirst2() { return this.transportFirst2; } public Image getTransportIconFirst1() { return this.transportIconFirst1; } public Image getTransportIconFirst2() { return this.transportIconFirst2; } public Image getTransportIconLast1() { return this.transportIconLast1; } public Image getTransportIconLast2() { return this.transportIconLast2; } public Image getTransportIconNext1() { return this.transportIconNext1; } public Image getTransportIconNext2() { return this.transportIconNext2; } public Image getTransportIconPause() { return this.transportIconPause; } public Image getTransportIconPlay1() { return this.transportIconPlay1; } public Image getTransportIconPlay2() { return this.transportIconPlay2; } public Image getTransportIconPrevious1() { return this.transportIconPrevious1; } public Image getTransportIconPrevious2() { return this.transportIconPrevious2; } public Image getTransportIconStop1() { return this.transportIconStop1; } public Image getTransportIconStop2() { return this.transportIconStop2; } public Image getTransportLast1() { return this.transportLast1; } public Image getTransportLast2() { return this.transportLast2; } public Image getTransportNext1() { return this.transportNext1; } public Image getTransportNext2() { return this.transportNext2; } public Image getTransportPause() { return this.transportPause; } public Image getTransportPlay1() { return this.transportPlay1; } public Image getTransportPlay2() { return this.transportPlay2; } public Image getTransportPrevious1() { return this.transportPrevious1; } public Image getTransportPrevious2() { return this.transportPrevious2; } public Image getTransportStop1() { return this.transportStop1; } public Image getTransportStop2() { return this.transportStop2; } public Image getTransportMetronome() { return this.transportMetronome; } public Image getTransportMode() { return this.transportMode; } public Image getBrowserBack() { return this.browserBack; } public Image getBrowserFile() { return this.browserFile; } public Image getBrowserFolder() { return this.browserFolder; } public Image getBrowserRefresh() { return this.browserRefresh; } public Image getBrowserRoot() { return this.browserRoot; } public Image getBrowserNew() { return this.browserNew; } public Image getSettings() { return this.settings; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBinding.java0000644000175000017500000000710611273045225031464 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings; public class KeyBinding { public static final String MASK_SEPARATOR = "+"; private int mask; private int key; public KeyBinding(int key,int mask){ this.key = key; this.mask = mask; } public KeyBinding(){ this(0,0); } public int getKey() { return this.key; } public void setKey(int key) { this.key = key; } public int getMask() { return this.mask; } public void setMask(int mask) { this.mask = mask; } private String getSpecialKey(){ for(int i = 0; i < KeyConversion.relations.length; i++){ if (this.key == KeyConversion.relations[i].getCode()){ return KeyConversion.relations[i].getKey(); } } return null; } private String getSpecialMask(){ String mask = new String(); for(int i = 0; i < KeyConversion.relations.length; i++){ if ( (this.mask & KeyConversion.relations[i].getCode()) == KeyConversion.relations[i].getCode()){ mask += KeyConversion.relations[i].getKey() + MASK_SEPARATOR; } } return mask; } public boolean isSameAs(KeyBinding kb){ if( kb != null ){ return (this.key == kb.key && this.mask == kb.mask); } return false; } public String toString(){ String mask = getSpecialMask(); String key = getSpecialKey(); return (key != null ? (mask + key) : (mask + (char)this.key) ); } public Object clone(){ return new KeyBinding(getKey(),getMask()); } } class KeyConversion { protected static final KeyConversion[] relations = new KeyConversion[]{ new KeyConversion("F1",KeyBindingConstants.F1), new KeyConversion("F2",KeyBindingConstants.F2), new KeyConversion("F3",KeyBindingConstants.F3), new KeyConversion("F4",KeyBindingConstants.F4), new KeyConversion("F5",KeyBindingConstants.F5), new KeyConversion("F6",KeyBindingConstants.F6), new KeyConversion("F7",KeyBindingConstants.F7), new KeyConversion("F8",KeyBindingConstants.F8), new KeyConversion("F9",KeyBindingConstants.F9), new KeyConversion("F10",KeyBindingConstants.F10), new KeyConversion("F11",KeyBindingConstants.F11), new KeyConversion("F12",KeyBindingConstants.F12), new KeyConversion("Esc",KeyBindingConstants.ESC), new KeyConversion("Pause",KeyBindingConstants.PAUSE), new KeyConversion("Print",KeyBindingConstants.PRINT_SCREEN), new KeyConversion("Ins",KeyBindingConstants.INSERT), new KeyConversion("Del",KeyBindingConstants.DELETE), new KeyConversion("Home",KeyBindingConstants.HOME), new KeyConversion("PgUp",KeyBindingConstants.PAGE_UP), new KeyConversion("PgDn",KeyBindingConstants.PAGE_DOWN), new KeyConversion("End",KeyBindingConstants.END), new KeyConversion("Up",KeyBindingConstants.UP), new KeyConversion("Down",KeyBindingConstants.DOWN), new KeyConversion("Left",KeyBindingConstants.LEFT), new KeyConversion("Right",KeyBindingConstants.RIGHT), new KeyConversion("Control",KeyBindingConstants.CONTROL), new KeyConversion("\u2318",KeyBindingConstants.COMMAND), new KeyConversion("Shift",KeyBindingConstants.SHIFT), new KeyConversion("Alt",KeyBindingConstants.ALT), new KeyConversion("Tab",KeyBindingConstants.TAB), new KeyConversion("Space",KeyBindingConstants.SPACE), new KeyConversion("Enter",KeyBindingConstants.ENTER), new KeyConversion("*",KeyBindingConstants.KEYPAD_MULTIPLY), new KeyConversion("/",KeyBindingConstants.KEYPAD_DIVIDE), new KeyConversion(".",KeyBindingConstants.KEYPAD_DECIMAL), }; private String key; private int code; private KeyConversion(String key,int code){ this.key = key; this.code = code; } public String getKey(){ return this.key; } public int getCode(){ return this.code; } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingAction.java0000644000175000017500000000104711273045225032620 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings; public class KeyBindingAction { private String action; private KeyBinding keyBinding; public KeyBindingAction(String action,KeyBinding keyBinding){ this.action = action; this.keyBinding = keyBinding; } public String getAction() { return this.action; } public void setAction(String action) { this.action = action; } public KeyBinding getKeyBinding() { return this.keyBinding; } public void setKeyBinding(KeyBinding keyBinding) { this.keyBinding = keyBinding; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionDefaults.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionDefaults.0000644000175000017500000000142011273045225033441 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingReader; import org.herac.tuxguitar.gui.util.TGFileUtils; public class KeyBindingActionDefaults { private static final String DEFAULT_SHORTCUT_FILE = "shortcuts-default.xml"; public static List getDefaultKeyBindings() { List list = new ArrayList(); try { InputStream stream = TGFileUtils.getResourceAsStream(DEFAULT_SHORTCUT_FILE); if (stream != null) { List defaults = KeyBindingReader.getKeyBindings(stream); if (defaults != null) { list.addAll(defaults); } } } catch (Throwable throwable) { throwable.printStackTrace(); } return list; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionManager.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionManager.j0000644000175000017500000000550111273045225033422 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.widgets.Control; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingReader; import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingWriter; import org.herac.tuxguitar.gui.util.TGFileUtils; public class KeyBindingActionManager { private List keyBindingsActions; private KeyBindingListener listener; public KeyBindingActionManager(){ this.keyBindingsActions = new ArrayList(); this.init(); } public void init(){ List enabled = KeyBindingReader.getKeyBindings(getUserFileName()); this.keyBindingsActions.addAll( (enabled != null ? enabled : KeyBindingActionDefaults.getDefaultKeyBindings()) ); this.listener = new KeyBindingListener(); } private String getUserFileName(){ return TGFileUtils.PATH_USER_CONFIG + File.separator + "shortcuts.xml"; } public Action getActionForKeyBinding(KeyBinding kb){ Action action = KeyBindingReserveds.getActionForKeyBinding(kb); if(action != null){ return action; } Iterator it = this.keyBindingsActions.iterator(); while(it.hasNext()){ KeyBindingAction keyBindingAction = (KeyBindingAction)it.next(); if(keyBindingAction.getKeyBinding() != null && kb.isSameAs( keyBindingAction.getKeyBinding() )){ return TuxGuitar.instance().getAction(keyBindingAction.getAction()); } } return null; } public KeyBinding getKeyBindingForAction(String action){ KeyBinding kb = KeyBindingReserveds.getKeyBindingForAction(action); if(kb != null){ return kb; } Iterator it = this.keyBindingsActions.iterator(); while(it.hasNext()){ KeyBindingAction keyBindingAction = (KeyBindingAction)it.next(); if(action.equals( keyBindingAction.getAction() )){ return keyBindingAction.getKeyBinding(); } } return null; } public void reset(List keyBindings){ this.keyBindingsActions.clear(); this.keyBindingsActions.addAll(keyBindings); } public List getKeyBindingActions(){ return this.keyBindingsActions; } public void saveKeyBindings(){ KeyBindingWriter.setBindings(getKeyBindingActions(),getUserFileName()); } public void appendListenersTo(Control control){ control.addKeyListener(this.listener); } protected class KeyBindingListener implements KeyListener { public void keyPressed(KeyEvent event) { KeyBinding kb = new KeyBinding(); kb.setKey(event.keyCode); kb.setMask(event.stateMask); Action action = getActionForKeyBinding(kb); if (action != null){ action.process(event); } } public void keyReleased(KeyEvent evt) { //not implemented } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingConstants.java0000644000175000017500000000521111273045225033354 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings; import org.eclipse.swt.SWT; public class KeyBindingConstants{ public static final int F1 = SWT.F1; public static final int F2 = SWT.F2; public static final int F3 = SWT.F3; public static final int F4 = SWT.F4; public static final int F5 = SWT.F5; public static final int F6 = SWT.F6; public static final int F7 = SWT.F7; public static final int F8 = SWT.F8; public static final int F9 = SWT.F9; public static final int F10 = SWT.F10; public static final int F11 = SWT.F11; public static final int F12 = SWT.F12; public static final int ESC = SWT.ESC; public static final int PAUSE = SWT.PAUSE; public static final int PRINT_SCREEN = SWT.PRINT_SCREEN; public static final int INSERT = SWT.INSERT; public static final int DELETE = SWT.DEL; public static final int HOME = SWT.HOME; public static final int PAGE_UP = SWT.PAGE_UP; public static final int PAGE_DOWN = SWT.PAGE_DOWN; public static final int END = SWT.END; public static final int ALT = SWT.ALT; public static final int CONTROL = SWT.CONTROL; public static final int COMMAND = SWT.COMMAND; public static final int SHIFT = SWT.SHIFT; public static final int TAB = SWT.TAB; public static final int BACKSPACE = SWT.BS; public static final int SPACE = 32; public static final int ENTER = 13; public static final int UP = 16777217; public static final int DOWN = 16777218; public static final int LEFT = 16777219; public static final int RIGHT = 16777220; public static final int NUMBER_0 = 48; public static final int NUMBER_1 = 49; public static final int NUMBER_2 = 50; public static final int NUMBER_3 = 51; public static final int NUMBER_4 = 52; public static final int NUMBER_5 = 53; public static final int NUMBER_6 = 54; public static final int NUMBER_7 = 55; public static final int NUMBER_8 = 56; public static final int NUMBER_9 = 57; public static final int KEYPAD_0 = SWT.KEYPAD_0; public static final int KEYPAD_1 = SWT.KEYPAD_1; public static final int KEYPAD_2 = SWT.KEYPAD_2; public static final int KEYPAD_3 = SWT.KEYPAD_3; public static final int KEYPAD_4 = SWT.KEYPAD_4; public static final int KEYPAD_5 = SWT.KEYPAD_5; public static final int KEYPAD_6 = SWT.KEYPAD_6; public static final int KEYPAD_7 = SWT.KEYPAD_7; public static final int KEYPAD_8 = SWT.KEYPAD_8; public static final int KEYPAD_9 = SWT.KEYPAD_9; public static final int KEYPAD_MULTIPLY = SWT.KEYPAD_MULTIPLY; public static final int KEYPAD_DIVIDE = SWT.KEYPAD_DIVIDE; public static final int KEYPAD_DECIMAL = SWT.KEYPAD_DECIMAL; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingReserveds.java0000644000175000017500000001007311273045225033344 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.actions.caret.GoDownAction; import org.herac.tuxguitar.gui.actions.caret.GoLeftAction; import org.herac.tuxguitar.gui.actions.caret.GoRightAction; import org.herac.tuxguitar.gui.actions.caret.GoUpAction; import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction; import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction; import org.herac.tuxguitar.gui.actions.note.ChangeNoteAction; import org.herac.tuxguitar.gui.actions.note.InsertNoteAction; import org.herac.tuxguitar.gui.actions.note.RemoveNoteAction; public class KeyBindingReserveds { private static KeyBindingAction[] reserveds = new KeyBindingAction[]{ new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_0,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_1,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_2,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_3,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_4,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_5,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_6,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_7,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_8,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_9,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_0,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_1,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_2,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_3,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_4,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_5,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_6,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_7,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_8,0)), new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_9,0)), new KeyBindingAction(RemoveNoteAction.NAME,new KeyBinding(KeyBindingConstants.BACKSPACE,0)), new KeyBindingAction(RemoveNoteAction.NAME,new KeyBinding(KeyBindingConstants.DELETE,0)), new KeyBindingAction(InsertNoteAction.NAME,new KeyBinding(KeyBindingConstants.INSERT,0)), new KeyBindingAction(IncrementDurationAction.NAME,new KeyBinding(16777259,0)), new KeyBindingAction(DecrementDurationAction.NAME,new KeyBinding(16777261,0)), new KeyBindingAction(GoUpAction.NAME,new KeyBinding(KeyBindingConstants.UP,0)), new KeyBindingAction(GoDownAction.NAME,new KeyBinding(KeyBindingConstants.DOWN,0)), new KeyBindingAction(GoLeftAction.NAME,new KeyBinding(KeyBindingConstants.LEFT,0)), new KeyBindingAction(GoRightAction.NAME,new KeyBinding(KeyBindingConstants.RIGHT,0)), }; public static boolean isReserved(KeyBinding kb){ for(int i = 0;i < reserveds.length;i++){ if(kb.isSameAs(reserveds[i].getKeyBinding())){ return true; } } return false; } public static Action getActionForKeyBinding(KeyBinding kb){ for(int i = 0;i < reserveds.length;i++){ if(kb.isSameAs(reserveds[i].getKeyBinding())){ return TuxGuitar.instance().getAction(reserveds[i].getAction()); } } return null; } public static KeyBinding getKeyBindingForAction(String action){ for(int i = 0;i < reserveds.length;i++){ if(action.equals(reserveds[i].getAction())){ return reserveds[i].getKeyBinding(); } } return null; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageLoader.java0000644000175000017500000000017111273045225031563 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.language; public interface LanguageLoader { public void loadProperties(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageManager.java0000644000175000017500000001037611273045225031737 0ustar julianjulian/* * Created on 09-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.system.language; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; import org.herac.tuxguitar.gui.util.TGFileUtils; /** * @author julian * */ public class LanguageManager { public static final String PACKAGE = "lang"; public static final String PREFIX = "messages"; public static final String EXTENSION = ".properties"; private TGResourceBundle resources; private String[] languages; private List loaders; public LanguageManager() { this.loaders = new ArrayList(); this.loadLanguages(); } public void addLoader(LanguageLoader loader){ if( !this.loaders.contains( loader )){ this.loaders.add(loader); } } public void removeLoader(LanguageLoader loader){ if( this.loaders.contains( loader )){ this.loaders.remove(loader); } } private void fireChanges(){ Iterator it = this.loaders.iterator(); while(it.hasNext()){ LanguageLoader loader = (LanguageLoader)it.next(); loader.loadProperties(); } } public void setLanguage(String lang) { try { String baseName = (PACKAGE + "." + PREFIX); Locale locale = getLocale(lang); this.resources = TGResourceBundle.getBundle(baseName, locale); this.fireChanges(); } catch (Exception e) { e.printStackTrace(); } } private Locale getLocale(String lang){ if(this.isSupportedLanguage(lang)){ String[] locale = lang.split("_"); String language = (locale.length > 0 ? locale[0] : "" ); String country = (locale.length > 1 ? locale[1] : "" ); String variant = (locale.length > 2 ? locale[2] : "" ); return new Locale(language, country, variant); } return Locale.getDefault(); } private boolean isSupportedLanguage(String lang){ if(lang != null && lang.length() > 0 && this.languages != null){ for(int i = 0 ; i < this.languages.length; i ++){ if(this.languages[i].equals(lang)){ return true; } } } return false; } public String getProperty(String key,String value) { try { String property = this.resources.getString(key); return (property == null ? value : property ); }catch(Throwable throwable){ return value; } } public String getProperty(String key) { return this.getProperty(key,key); } public String getProperty(String key, Object[] arguments) { return getProperty(key,key,arguments); } public String getProperty(String key,String value, Object[] arguments) { String property = this.getProperty(key,value); return ( arguments != null ? MessageFormat.format(property, arguments) : property ); } public String[] getLanguages() { return this.languages; } public String getLanguage() { if(this.resources != null){ Locale locale = this.resources.getLocale(); boolean language = (locale.getLanguage() != null && locale.getLanguage().length() > 0); boolean country = (locale.getCountry() != null && locale.getCountry().length() > 0); boolean variant = (locale.getVariant() != null && locale.getVariant().length() > 0); String localeId = new String(); if( language ){ localeId += locale.getLanguage(); } if( country ){ localeId += "_" + locale.getCountry(); } if( variant ){ localeId += "_" + ( country ? locale.getVariant() : ("_" + locale.getVariant()) ); } return localeId; } return null; } /** * Load language files from lang folder * */ private void loadLanguages(){ List availableList = new ArrayList(); String[] fileNames = TGFileUtils.getFileNames("lang"); if( fileNames != null ){ // now iterate over them for(int i = 0;i < fileNames.length;i++){ if (fileNames[i].indexOf("messages_") == 0){ int prefixIndex = fileNames[i].indexOf(PREFIX + "_"); int extensionIndex = fileNames[i].indexOf(EXTENSION); if(prefixIndex == 0 && extensionIndex > (PREFIX + "_").length()){ availableList.add( fileNames[i].substring( (PREFIX + "_").length() , extensionIndex ) ); } } } } this.languages = new String[availableList.size()]; for(int i = 0; i < this.languages.length; i++){ this.languages[i] = (String) availableList.get( i ); } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/TGResourceBundle.java0000644000175000017500000000415011273045225032066 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.language; import java.io.IOException; import java.net.URL; import java.util.Enumeration; import java.util.Locale; import java.util.Properties; import org.herac.tuxguitar.gui.util.TGFileUtils; public class TGResourceBundle { private Locale locale; private Properties properties; public TGResourceBundle(Locale locale, Properties properties){ this.locale = locale; this.properties = properties; } public Locale getLocale() { return this.locale; } public void setLocale(Locale locale) { this.locale = locale; } public String getString(String key) { return this.properties.getProperty(key); } public static TGResourceBundle getBundle(String baseName, Locale locale){ Properties properties = new Properties(); String bundleName = baseName.replace('.','/'); String bundleExtension = ".properties"; // load default TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties); // load language bundleName += "_"; if(locale.getLanguage() != null && locale.getLanguage().length() > 0){ bundleName += locale.getLanguage(); TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties); } // load country bundleName += "_"; if(locale.getCountry() != null && locale.getCountry().length() > 0){ bundleName += locale.getCountry(); TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties); } // load variant bundleName += "_"; if(locale.getVariant() != null && locale.getVariant().length() > 0){ bundleName += locale.getVariant(); TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties); } return new TGResourceBundle(locale, properties); } private static void loadResources(String name, Properties p){ try { Enumeration enumeration = TGFileUtils.getResourceUrls(name); while (enumeration.hasMoreElements()) { URL url = (URL) enumeration.nextElement(); Properties properties = new Properties(); properties.load( url.openStream() ); p.putAll(properties); } } catch (IOException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPlugin.java0000644000175000017500000000056311273045225030305 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins; public interface TGPlugin { public void init() throws TGPluginException; public void close() throws TGPluginException; public void setEnabled(boolean enabled) throws TGPluginException; public String getName(); public String getDescription(); public String getVersion(); public String getAuthor(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginConfigManager.java0000644000175000017500000000156711273045225032733 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins; import java.io.File; import java.io.InputStream; import java.util.Properties; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.util.TGFileUtils; public class TGPluginConfigManager extends TGConfigManager{ private String name; public TGPluginConfigManager(String name){ this.name = name; } public String getName() { return "Plugin Configuration"; } public String getFileName(){ return TGFileUtils.PATH_USER_PLUGINS_CONFIG + File.separator + this.name + ".cfg"; } public Properties getDefaults() { Properties properties = new Properties(); try { InputStream is = TGFileUtils.getResourceAsStream(this.name + ".cfg"); if(is != null){ properties.load(is); } } catch (Throwable throwable) { throwable.printStackTrace(); } return properties; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginException.java0000644000175000017500000000065011273045225032161 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins; public class TGPluginException extends Exception{ private static final long serialVersionUID = 1L; public TGPluginException() { super(); } public TGPluginException(String message, Throwable cause) { super(message, cause); } public TGPluginException(String message) { super(message); } public TGPluginException(Throwable cause) { super(cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginManager.java0000644000175000017500000000547011273045225031602 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.util.TGClassLoader; import org.herac.tuxguitar.util.TGServiceReader; public class TGPluginManager { private List plugins; public TGPluginManager(){ this.plugins = new ArrayList(); this.initPlugins(); } public List getPlugins(){ return this.plugins; } public void initPlugins(){ try{ //Search available providers Iterator it = TGServiceReader.lookupProviders(TGPlugin.class,TGClassLoader.instance().getClassLoader()); while(it.hasNext()){ try{ TGPlugin plugin = (TGPlugin)it.next(); plugin.init(); this.plugins.add(plugin); }catch(TGPluginException exception){ MessageDialog.errorMessage(exception); }catch(Throwable throwable){ MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to init plugin",throwable)); } } }catch(Throwable throwable){ MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to init plugin",throwable)); } } public void closePlugins(){ Iterator it = this.plugins.iterator(); while(it.hasNext()){ try{ ((TGPlugin)it.next()).close(); }catch(TGPluginException exception){ MessageDialog.errorMessage(exception); }catch(Throwable throwable){ MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to close plugin",throwable)); } } } public void openPlugins(){ Iterator it = this.plugins.iterator(); while(it.hasNext()){ try{ TGPlugin plugin = (TGPlugin)it.next(); plugin.setEnabled(isEnabled(plugin)); }catch(TGPluginException exception){ MessageDialog.errorMessage(exception); }catch(Throwable throwable){ MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to set plugin status",throwable)); } } } public void setEnabled(TGPlugin plugin,boolean enabled){ try{ TGPluginProperties.instance().setProperty(getEnabledProperty(plugin),enabled); TGPluginProperties.instance().save(); plugin.setEnabled(enabled); }catch(TGPluginException exception){ MessageDialog.errorMessage(exception); }catch(Throwable throwable){ MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to set plugin status",throwable)); } } public boolean isEnabled(TGPlugin plugin){ try{ return TGPluginProperties.instance().getBooleanConfigValue(getEnabledProperty(plugin),true); }catch(Throwable throwable){ MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to get plugin status",throwable)); } return false; } public String getEnabledProperty(TGPlugin plugin){ return (plugin.getClass().getName() + ".enabled"); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginProperties.java0000644000175000017500000000210411273045225032353 0ustar julianjulian/* * Created on 09-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.system.plugins; import java.io.File; import java.util.Properties; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.util.TGFileUtils; /** * @author julian * * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates */ public class TGPluginProperties extends TGConfigManager{ private static TGPluginProperties instance; public static TGPluginProperties instance(){ if(instance == null){ instance = new TGPluginProperties(); instance.init(); } return instance; } private TGPluginProperties(){ super(); } public String getName() { return "TuxGuitar Plugin Properties"; } public String getFileName(){ return TGFileUtils.PATH_USER_CONFIG + File.separator + "plugin.properties"; } public Properties getDefaults() { return new Properties(); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginSetup.java0000644000175000017500000000024711273045225031325 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins; import org.eclipse.swt.widgets.Shell; public interface TGPluginSetup { public void setupDialog(Shell parent); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollection.java0000644000175000017500000000075511273045224032326 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; public class TGBrowserCollection { private String type; private TGBrowserData data; public TGBrowserCollection(){ super(); } public TGBrowserData getData() { return this.data; } public void setData(TGBrowserData data) { this.data = data; } public String getType() { return this.type; } public void setType(String type) { this.type = type; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollectionInfo.java0000644000175000017500000000063611273045224033140 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; public class TGBrowserCollectionInfo { private String type; private String data; public TGBrowserCollectionInfo(){ super(); } public String getData() { return this.data; } public void setData(String data) { this.data = data; } public String getType() { return this.type; } public void setType(String type) { this.type = type; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnection.java0000644000175000017500000001113011273045224032317 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; import java.io.InputStream; import java.util.List; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserConnection { private boolean locked; private TGBrowser browser; private TGBrowserConnectionHandler handler; public TGBrowserConnection(TGBrowserConnectionHandler handler){ this.handler = handler; } protected void lock(){ this.locked = true; this.handler.notifyLockStatusChanged(); } protected void unlock(){ this.locked = false; this.handler.notifyLockStatusChanged(); } public boolean isLocked(){ return this.locked; } public TGBrowser getBrowser(){ return this.browser; } public boolean isOpen(){ return (getBrowser() != null); } public void open(final int callId,final TGBrowser browser){ if(!isLocked()){ this.close(callId); this.lock(); this.browser = browser; new Thread(new Runnable() { public void run() { try { if(getBrowser() != null){ getBrowser().open(); notifyOpened(callId); }else{ notifyClosed(callId); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void close(final int callId){ if(!isLocked()){ this.lock(); final TGBrowser browser = getBrowser(); this.browser = null; new Thread(new Runnable() { public void run() { try { if(browser != null){ browser.close(); notifyClosed(callId); }else{ notifyClosed(callId); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void cdRoot(final int callId){ if(!isLocked()){ this.lock(); new Thread(new Runnable() { public void run() { try { if(isOpen()){ getBrowser().cdRoot(); notifyCd(callId); }else{ notifyClosed(callId); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void cdUp(final int callId){ if(!isLocked()){ this.lock(); new Thread(new Runnable() { public void run() { try { if(isOpen()){ getBrowser().cdUp(); notifyCd(callId); }else{ notifyClosed(callId); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void cd(final int callId,final TGBrowserElement element){ if(!isLocked()){ this.lock(); new Thread(new Runnable() { public void run() { try { if(isOpen()){ getBrowser().cdElement(element); notifyCd(callId); }else{ notifyClosed(callId); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void listElements(final int callId){ if(!isLocked()){ this.lock(); new Thread(new Runnable() { public void run() { try { if(isOpen()){ List elements = getBrowser().listElements(); notifyElements(callId,elements); }else{ notifyClosed(callId); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void openStream(final int callId,final TGBrowserElement element){ if(!isLocked()){ this.lock(); new Thread(new Runnable() { public void run() { try { if(element == null){ release(); return; } if(element.isFolder()){ release(); cd(callId,element); } else{ InputStream stream = element.getInputStream(); notifyStream(callId,stream,element); } } catch (TGBrowserException e) { notifyError(callId,e); e.printStackTrace(); } } }).start(); } } public void release(){ this.unlock(); } public void notifyCd(final int callId) { this.handler.notifyCd(callId); } public void notifyClosed(final int callId) { this.handler.notifyClosed(callId); } public void notifyElements(final int callId,List elements) { this.handler.notifyElements(callId,elements); } public void notifyError(final int callId,Throwable throwable) { this.handler.notifyError(callId,throwable); } public void notifyOpened(final int callId) { this.handler.notifyOpened(callId); } public void notifyStream(final int callId,InputStream stream, TGBrowserElement element) { this.handler.notifyStream(callId,stream,element); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnectionHandler.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnectionHandler.jav0000644000175000017500000000110411273045224033454 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; import java.io.InputStream; import java.util.List; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public interface TGBrowserConnectionHandler { public void notifyLockStatusChanged(); public void notifyOpened(int callId); public void notifyClosed(int callId); public void notifyCd(int callId); public void notifyElements(int callId,List elements); public void notifyStream(int callId,InputStream stream,TGBrowserElement element); public void notifyError(int callId,Throwable throwable); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserException.java0000644000175000017500000000065511273045224032170 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; public class TGBrowserException extends Exception{ private static final long serialVersionUID = 1L; public TGBrowserException() { super(); } public TGBrowserException(String message, Throwable cause) { super(message, cause); } public TGBrowserException(String message) { super(message); } public TGBrowserException(Throwable cause) { super(cause); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserFactoryHandler.java0000644000175000017500000000023511273045224033131 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; public interface TGBrowserFactoryHandler { public void notifyAdded(); public void notifyRemoved(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserManager.java0000644000175000017500000001032611273045224031600 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; import org.herac.tuxguitar.gui.tools.browser.filesystem.TGBrowserFactoryImpl; import org.herac.tuxguitar.gui.tools.browser.xml.TGBrowserReader; import org.herac.tuxguitar.gui.tools.browser.xml.TGBrowserWriter; import org.herac.tuxguitar.gui.util.TGFileUtils; public class TGBrowserManager { private static TGBrowserManager instance; private List factories; private List collections; private List collectionInfos; private boolean changes; private TGBrowserFactoryHandler handler; private TGBrowserManager(){ this.factories = new ArrayList(); this.collections = new ArrayList(); this.collectionInfos = new ArrayList(); this.readCollections(); this.addDefaultFactory(); } public static TGBrowserManager instance(){ if(instance == null){ instance = new TGBrowserManager(); } return instance; } public void setFactoryHandler(TGBrowserFactoryHandler handler){ this.handler = handler; } public Iterator getFactories(){ return this.factories.iterator(); } public TGBrowserFactory getFactory(String type){ Iterator factories = getFactories(); while(factories.hasNext()){ TGBrowserFactory factory = (TGBrowserFactory)factories.next(); if(factory.getType().equals(type)){ return factory; } } return null; } public void addFactory(TGBrowserFactory factory){ this.factories.add(factory); Iterator it = this.collectionInfos.iterator(); while(it.hasNext()){ TGBrowserCollectionInfo info = (TGBrowserCollectionInfo)it.next(); if(info.getType().equals(factory.getType())){ TGBrowserCollection collection = new TGBrowserCollection(); collection.setType(factory.getType()); collection.setData(factory.parseData(info.getData())); addCollection(collection); } } if(this.handler != null){ this.handler.notifyAdded(); } } public void removeFactory(TGBrowserFactory factory){ this.factories.remove(factory); int index = 0; while(index < this.collections.size()){ TGBrowserCollection collection = (TGBrowserCollection)this.collections.get(index); if(collection.getType().equals(factory.getType())){ removeCollection(collection); continue; } index ++; } if(this.handler != null){ this.handler.notifyRemoved(); } } public void addInfo(TGBrowserCollectionInfo info){ this.collectionInfos.add(info); } public Iterator getCollections(){ return this.collections.iterator(); } public int countCollections(){ return this.collections.size(); } public void removeCollection(TGBrowserCollection collection){ this.collections.remove(collection); this.changes = true; } public TGBrowserCollection addCollection(TGBrowserCollection collection){ if(collection.getData() != null ){ TGBrowserCollection existent = getCollection(collection.getType(), collection.getData()); if( existent != null ){ return existent; } this.collections.add(collection); this.changes = true; } return collection; } public TGBrowserCollection getCollection(String type, TGBrowserData data ){ Iterator it = this.getCollections(); while( it.hasNext() ){ TGBrowserCollection collection = ( TGBrowserCollection ) it.next(); if( collection.getType().equals(type) && collection.getData().equals(data) ){ return collection; } } return null; } public TGBrowserCollection getCollection(int index){ if(index >= 0 && index < countCollections()){ return (TGBrowserCollection)this.collections.get(index); } return null; } public void readCollections(){ new TGBrowserReader().loadCollections(this,new File(getCollectionsFileName())); this.changes = false; } public void writeCollections(){ if(this.changes){ new TGBrowserWriter().saveCollections(this,getCollectionsFileName()); } this.changes = false; } private String getCollectionsFileName(){ return TGFileUtils.PATH_USER_CONFIG + File.separator + "browser-collections.xml"; } private void addDefaultFactory(){ this.addFactory(new TGBrowserFactoryImpl()); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomTool.java0000644000175000017500000000053211273045224030617 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom; public class TGCustomTool { private String name; private String action; public TGCustomTool(String name, String action) { super(); this.name = name; this.action = action; } public String getName() { return this.name; } public String getAction() { return this.action; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomToolManager.java0000644000175000017500000000124211273045224032111 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TGCustomToolManager { private static TGCustomToolManager instance; private List tools; public TGCustomToolManager(){ this.tools = new ArrayList(); } public static TGCustomToolManager instance(){ if(instance == null){ instance = new TGCustomToolManager(); } return instance; } public void addCustomTool(TGCustomTool tool){ this.tools.add(tool); } public void removeCustomTool(TGCustomTool tool){ this.tools.remove(tool); } public Iterator getCustomTools(){ return this.tools.iterator(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleEditor.java0000644000175000017500000000603511273045224030233 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.scale; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; public class ScaleEditor { public void show() { final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("scale.list")); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); // ---------------------------------------------------------------------- Composite composite = new Composite(dialog, SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final List keys = new List(composite,SWT.BORDER | SWT.V_SCROLL); keys.setLayoutData(new GridData(50,200)); String[] keyNames = TuxGuitar.instance().getScaleManager().getKeyNames(); for(int i = 0;i < keyNames.length;i ++){ keys.add(keyNames[i]); } keys.select(TuxGuitar.instance().getScaleManager().getSelectionKey()); final List scales = new List(composite,SWT.BORDER | SWT.V_SCROLL); scales.setLayoutData(new GridData(SWT.DEFAULT,200)); scales.add("None"); String[] scaleNames = TuxGuitar.instance().getScaleManager().getScaleNames(); for(int i = 0;i < scaleNames.length;i ++){ scales.add(scaleNames[i]); } scales.select(TuxGuitar.instance().getScaleManager().getSelectionIndex() + 1); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TuxGuitar.instance().getScaleManager().selectScale((scales.getSelectionIndex() - 1), keys.getSelectionIndex()); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleInfo.java0000644000175000017500000000046611273045224027702 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.scale; public class ScaleInfo { private String name; private String keys; public ScaleInfo(String name,String keys){ this.name = name; this.keys = keys; } public String getKeys() { return this.keys; } public String getName() { return this.name; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleListener.java0000644000175000017500000000015711273045224030571 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.scale; public interface ScaleListener { public void loadScale(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleManager.java0000644000175000017500000000634111273045224030357 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.scale; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.scale.xml.ScaleReader; import org.herac.tuxguitar.gui.util.TGFileUtils; import org.herac.tuxguitar.gui.util.TGMusicKeyUtils; import org.herac.tuxguitar.song.models.TGScale; public class ScaleManager { private static final String[] KEY_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_SCALE); private static final String KEY_SEPARATOR = ","; public static final int NONE_SELECTION = -1; private List scales; private List scaleListeners; private TGScale scale; private int selectionIndex; private int selectionKey; public ScaleManager(){ this.scales = new ArrayList(); this.scaleListeners = new ArrayList(); this.scale = TuxGuitar.instance().getSongManager().getFactory().newScale(); this.selectionKey = 0; this.selectionIndex = NONE_SELECTION; this.loadScales(); } public void addListener( ScaleListener listener){ if(!this.scaleListeners.contains( listener )){ this.scaleListeners.add( listener ); } } public void removeListener( ScaleListener listener){ if(this.scaleListeners.contains( listener )){ this.scaleListeners.remove( listener ); } } public void fireListeners(){ for(int i = 0; i < this.scaleListeners.size(); i ++){ ScaleListener listener = (ScaleListener) this.scaleListeners.get( i ); listener.loadScale(); } } public void selectScale(int index,int key){ if(index == NONE_SELECTION){ getScale().clear(); } else if(index >= 0 && index < this.scales.size()){ getScale().clear(); ScaleInfo info = (ScaleInfo)this.scales.get(index); String[] keys = info.getKeys().split(KEY_SEPARATOR); for (int i = 0; i < keys.length; i ++){ int note = (Integer.parseInt(keys[i]) - 1); if(note >= 0 && note < 12){ getScale().setNote(note,true); } } getScale().setKey(key); } this.selectionIndex = index; this.selectionKey = key; this.fireListeners(); } public TGScale getScale() { return this.scale; } public int countScales() { return this.scales.size(); } public String getScaleName(int index) { if(index >= 0 && index < this.scales.size()) { return (((ScaleInfo)this.scales.get(index)).getName()); } return null; } public String getScaleKeys(int index) { if(index >= 0 && index < this.scales.size()) { return(((ScaleInfo)this.scales.get(index)).getKeys()); } return null; } public String[] getScaleNames(){ String[] names = new String[this.scales.size()]; for(int i = 0;i < this.scales.size();i ++){ ScaleInfo info = (ScaleInfo)this.scales.get(i); names[i] = info.getName(); } return names; } public String getKeyName(int index){ if( index >=0 && index < KEY_NAMES.length){ return KEY_NAMES[ index ]; } return null; } public String[] getKeyNames(){ return KEY_NAMES; } public int getSelectionIndex() { return this.selectionIndex; } public int getSelectionKey() { return this.selectionKey; } private void loadScales(){ try{ new ScaleReader().loadScales(this.scales, TGFileUtils.getResourceAsStream("scales/scales.xml") ); } catch (Throwable e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableCaretHelper.java0000644000175000017500000000221711273045225032376 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGString; public class UndoableCaretHelper { private long position; private int track; private int string; private int velocity; private TGDuration duration; public UndoableCaretHelper(){ Caret caret = getCaret(); this.track = caret.getTrack().getNumber(); this.position = caret.getPosition(); this.velocity = caret.getVelocity(); this.duration = caret.getDuration().clone(TuxGuitar.instance().getSongManager().getFactory()); this.string = 1; TGString instrumentString = caret.getSelectedString(); if(instrumentString != null){ this.string = instrumentString.getNumber(); } } public void update(){ getCaret().update(this.track,this.position,this.string,this.velocity); getCaret().setSelectedDuration(this.duration.clone(TuxGuitar.instance().getSongManager().getFactory())); } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableJoined.java0000644000175000017500000000300711273045225031406 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; public class UndoableJoined implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private List undoables; public UndoableJoined(){ this.doAction = UNDO_ACTION; this.undoCaret = new UndoableCaretHelper(); this.undoables = new ArrayList(); } public void addUndoableEdit(UndoableEdit undoable){ this.undoables.add(undoable); } public void redo() throws CannotRedoException { int count = this.undoables.size(); for(int i = 0;i < count;i++){ UndoableEdit undoable = (UndoableEdit)this.undoables.get(i); undoable.redo(); } this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { int count = this.undoables.size(); for(int i = (count - 1);i >= 0;i--){ UndoableEdit undoable = (UndoableEdit)this.undoables.get(i); undoable.undo(); } this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public UndoableJoined endUndo(){ this.redoCaret = new UndoableCaretHelper(); return this; } public boolean isEmpty(){ return this.undoables.isEmpty(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java0000644000175000017500000000456111273045225031140 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; public class MidiEvent { public static final int ALL_TRACKS = -1; public static final int MIDI_SYSTEM_EVENT = 1; public static final int MIDI_EVENT_NOTEON = 2; public static final int MIDI_EVENT_NOTEOFF = 3; public static final int MIDI_EVENT_PROGRAM_CHANGE = 4; public static final int MIDI_EVENT_CONTROL_CHANGE = 5; public static final int MIDI_EVENT_PITCH_BEND = 6; private long tick; private int type; private int track; private byte[] data; public MidiEvent(long tick,int type,byte[] data){ this(tick,type,ALL_TRACKS,data); } public MidiEvent(long tick,int type,int track,byte[] data){ this.tick = tick; this.type = type; this.track = track; this.data = data; } public long getTick() { return this.tick; } public int getType() { return this.type; } public int getTrack() { return this.track; } public byte[] getData() { return this.data; } public static MidiEvent systemReset(final long tick){ return new MidiEvent(tick,MIDI_SYSTEM_EVENT,ALL_TRACKS,null); } public static MidiEvent noteOn(final long tick,final int track,final int channel,final int key,final int velocity){ return new MidiEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity}); } public static MidiEvent noteOff(final long tick,final int track,final int channel,final int key,final int velocity){ return new MidiEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity}); } public static MidiEvent controlChange(final long tick,final int track,final int channel,final int controller,final int value){ return new MidiEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value}); } public static MidiEvent programChange(final long tick,final int track,final int channel,final int value){ return new MidiEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value}); } public static MidiEvent pitchBend(final long tick,final int track,final int channel,final int value){ return new MidiEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value}); } public static MidiEvent tempoInUSQ(final long tick,final int usq){ return new MidiEvent(tick,MIDI_SYSTEM_EVENT,new byte[]{0x51,(byte) (usq & 0xff),(byte) ((usq >> 8) & 0xff),(byte) ((usq >> 16) & 0xff)}); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java0000644000175000017500000000271411273045225032761 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import org.herac.tuxguitar.player.base.MidiPlayerException; public class MidiEventDispacher{ private MidiSequencerImpl sequencer; public MidiEventDispacher(MidiSequencerImpl sequencer){ this.sequencer = sequencer; } public void dispatch(MidiEvent event) throws MidiPlayerException{ if(event.getType() == MidiEvent.MIDI_EVENT_NOTEON){ this.sequencer.getTransmitter().sendNoteOn(event.getData()[0],event.getData()[1],event.getData()[2]); } else if(event.getType() == MidiEvent.MIDI_EVENT_NOTEOFF){ this.sequencer.getTransmitter().sendNoteOff(event.getData()[0],event.getData()[1],event.getData()[2]); } else if(event.getType() == MidiEvent.MIDI_EVENT_CONTROL_CHANGE){ this.sequencer.getTransmitter().sendControlChange(event.getData()[0],event.getData()[1],event.getData()[2]); } else if(event.getType() == MidiEvent.MIDI_EVENT_PROGRAM_CHANGE){ this.sequencer.getTransmitter().sendProgramChange(event.getData()[0],event.getData()[1]); } else if(event.getType() == MidiEvent.MIDI_EVENT_PITCH_BEND){ this.sequencer.getTransmitter().sendPitchBend(event.getData()[0],event.getData()[1]); } else if(event.getType() == MidiEvent.MIDI_SYSTEM_EVENT){ if(event.getData()[0] == 0x51){ int usq = ((event.getData()[1] & 0xff) | ((event.getData()[2] & 0xff) << 8) | ((event.getData()[3] & 0xff) << 16)); this.sequencer.setTempo( (int)((60.00 * 1000.00) / (usq / 1000.00)) ); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventPlayer.java0000644000175000017500000000336411273045225032315 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.player.base.MidiPlayerException; public class MidiEventPlayer{ private MidiSequencerImpl sequencer; private List events; private long tick; private long lastTick; private boolean reset; public MidiEventPlayer(MidiSequencerImpl sequencer){ this.sequencer = sequencer; this.events = new ArrayList(); this.reset(); } public void process() throws MidiPlayerException { this.lastTick = this.tick; this.tick = this.sequencer.getTickPosition(); for(int i = 0;i < this.events.size();i ++){ MidiEvent event = (MidiEvent)this.events.get(i); if(shouldSend(event,this.tick,this.lastTick)){ this.sequencer.sendEvent(event); } } this.reset = false; } private boolean shouldSend(MidiEvent event,long tick,long lastTick){ if(event.getTick() > tick){ return false; } if(event.getTrack() != MidiEvent.ALL_TRACKS){ if(this.sequencer.getMidiTrackController().isMute(event.getTrack())){ return false; } if(this.sequencer.getMidiTrackController().isAnySolo() && !this.sequencer.getMidiTrackController().isSolo(event.getTrack())){ return false; } } if(this.reset){ if(event.getType() == MidiEvent.MIDI_SYSTEM_EVENT){ return true; } if(event.getType() == MidiEvent.MIDI_EVENT_CONTROL_CHANGE){ return true; } if(event.getType() == MidiEvent.MIDI_EVENT_PROGRAM_CHANGE){ return true; } } return (event.getTick() > lastTick); } public void addEvent(MidiEvent event){ this.events.add(event); } public void clearEvents(){ this.events.clear(); } public void reset(){ this.tick = (this.sequencer.getTickPosition() - 1); this.reset = true; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.ja0000644000175000017500000000277211273045225033422 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiSequenceHandlerImpl extends MidiSequenceHandler{ private MidiSequencerImpl seq; public MidiSequenceHandlerImpl(MidiSequencerImpl seq,int tracks) { super(tracks); this.seq = seq; this.seq.getMidiTrackController().init(getTracks()); } public void addControlChange(long tick,int track,int channel, int controller, int value) { this.seq.addEvent(MidiEvent.controlChange(tick, track, channel, controller, value)); } public void addNoteOff(long tick,int track,int channel, int note, int velocity) { this.seq.addEvent(MidiEvent.noteOff(tick, track, channel, note, velocity)); } public void addNoteOn(long tick,int track,int channel, int note, int velocity) { this.seq.addEvent(MidiEvent.noteOn(tick, track, channel, note, velocity)); } public void addPitchBend(long tick,int track,int channel, int value) { this.seq.addEvent(MidiEvent.pitchBend(tick, track, channel, value)); } public void addProgramChange(long tick,int track,int channel, int instrument) { this.seq.addEvent(MidiEvent.programChange(tick, track, channel, instrument)); } public void addTempoInUSQ(long tick,int track,int usq) { this.seq.addEvent(MidiEvent.tempoInUSQ(tick, usq)); } public void addTimeSignature(long tick,int track,TGTimeSignature ts) { //not implemented } public void notifyFinish(){ //not implemented } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java0000644000175000017500000001100511273045225032622 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.player.base.MidiSequencer; import org.herac.tuxguitar.player.base.MidiTransmitter; public class MidiSequencerImpl implements MidiSequencer{ private boolean reset; private boolean running; private boolean stopped; private MidiTransmitter transmitter; private MidiTickPlayer midiTickPlayer; private MidiEventPlayer midiEventPlayer; private MidiEventDispacher midiEventDispacher; private MidiTrackController midiTrackController; public MidiSequencerImpl(){ this.running = false; this.stopped = true; this.midiTickPlayer = new MidiTickPlayer(); this.midiEventPlayer = new MidiEventPlayer(this); this.midiEventDispacher = new MidiEventDispacher(this); this.midiTrackController = new MidiTrackController(this); } public synchronized MidiTrackController getMidiTrackController(){ return this.midiTrackController; } public synchronized void setTempo(int tempo){ this.midiTickPlayer.setTempo(tempo); } public synchronized long getTickPosition(){ return this.midiTickPlayer.getTick(); } public synchronized void setTickPosition(long tickPosition){ this.reset = true; this.midiTickPlayer.setTick(tickPosition); } public synchronized long getTickLength(){ return this.midiTickPlayer.getTickLength(); } public synchronized void sendEvent(MidiEvent event) throws MidiPlayerException{ if(!this.reset){ this.midiEventDispacher.dispatch(event); } } public synchronized void addEvent(MidiEvent event){ this.midiEventPlayer.addEvent(event); this.midiTickPlayer.notifyTick(event.getTick()); } public synchronized boolean isRunning() { return this.running; } public synchronized void setRunning(boolean running) throws MidiPlayerException { this.running = running; if(this.running){ this.setTempo(120); this.setTickPosition( this.getTickPosition() ); new MidiTimer(this).start(); }else{ this.process(); } } public synchronized void stop() throws MidiPlayerException{ this.setRunning(false); } public synchronized void start() throws MidiPlayerException{ this.setRunning(true); } public synchronized void reset(boolean systemReset) throws MidiPlayerException{ this.getTransmitter().sendAllNotesOff(); for(int channel = 0; channel < 16;channel ++){ this.getTransmitter().sendPitchBend(channel, 64); } if( systemReset ){ this.getTransmitter().sendSystemReset(); } } protected synchronized boolean process() throws MidiPlayerException{ boolean running = this.isRunning(); if(running){ if(this.reset){ this.reset( false ); this.reset = false; this.midiEventPlayer.reset(); } this.stopped = false; this.midiTickPlayer.process(); this.midiEventPlayer.process(); if(this.getTickPosition() > this.getTickLength()){ this.stop(); } } else if( !this.stopped ){ this.stopped = true; this.midiEventPlayer.clearEvents(); this.midiTickPlayer.clearTick(); this.reset( true ); } return running; } public synchronized MidiTransmitter getTransmitter() { return this.transmitter; } public synchronized void setTransmitter(MidiTransmitter transmitter) { this.transmitter = transmitter; } public void check() { // Not implemented } public synchronized void open() { //not implemented } public synchronized void close() throws MidiPlayerException { if(isRunning()){ this.stop(); } } public synchronized MidiSequenceHandler createSequence(int tracks) throws MidiPlayerException{ return new MidiSequenceHandlerImpl(this,tracks); } public synchronized void setSolo(int index,boolean solo) throws MidiPlayerException{ this.getMidiTrackController().setSolo(index, solo); } public synchronized void setMute(int index,boolean mute) throws MidiPlayerException{ this.getMidiTrackController().setMute(index, mute); } public String getKey() { return "tuxguitar.sequencer"; } public String getName() { return "TuxGuitar Sequencer"; } private class MidiTimer extends Thread{ private static final int TIMER_DELAY = 15; private MidiSequencerImpl sequencer; public MidiTimer(MidiSequencerImpl sequencer){ this.sequencer = sequencer; } public void run() { try { synchronized(this.sequencer) { while( this.sequencer.process() ){ this.sequencer.wait( TIMER_DELAY ); } } } catch (Throwable throwable) { throwable.printStackTrace(); } } } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerProviderImpl.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerProviderImpl.0000644000175000017500000000156511273045225033505 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiSequencer; import org.herac.tuxguitar.player.base.MidiSequencerProvider; public class MidiSequencerProviderImpl implements MidiSequencerProvider{ private List sequencers; public MidiSequencerProviderImpl(){ super(); } public List listSequencers() throws MidiPlayerException { if(this.sequencers == null){ this.sequencers = new ArrayList(); this.sequencers.add(new MidiSequencerImpl()); } return this.sequencers; } public void closeAll() throws MidiPlayerException { Iterator it = listSequencers().iterator(); while(it.hasNext()){ MidiSequencer sequencer = (MidiSequencer)it.next(); sequencer.close(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTickPlayer.java0000644000175000017500000000213411273045225032120 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import org.herac.tuxguitar.song.models.TGDuration; public class MidiTickPlayer { private static final int SECOND_IN_MILLIS = 1000; private int tempo; private long tick; private long time; private long lastTime; private long tickLength; private boolean tickChanged; public MidiTickPlayer(){ super(); } public void process() { this.lastTime = this.time; this.time = System.currentTimeMillis(); if(!this.tickChanged){ this.tick += (TGDuration.QUARTER_TIME * ((float)getTempo() * (float)(this.time - this.lastTime) / 60f) / SECOND_IN_MILLIS); } this.tickChanged = false; } public void clearTick(){ this.tickLength = 0; } public int getTempo() { return this.tempo; } public void setTempo(int tempo) { this.tempo = tempo; } public long getTick() { return this.tick; } public void setTick(long tick) { this.tick = tick; this.tickChanged = true; } public long getTickLength() { return this.tickLength; } public void notifyTick(long tick){ this.tickLength = Math.max(this.tickLength,tick); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrack.java0000644000175000017500000000064711273045225031124 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; public class MidiTrack { private boolean solo; private boolean mute; public MidiTrack(){ this.solo = false; this.mute = false; } public boolean isMute() { return this.mute; } public void setMute(boolean mute) { this.mute = mute; } public boolean isSolo() { return this.solo; } public void setSolo(boolean solo) { this.solo = solo; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrackController.java0000644000175000017500000000364011273045225033164 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.sequencer; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.player.base.MidiPlayerException; public class MidiTrackController { private List tracks; private MidiSequencerImpl sequencer; private boolean anySolo; public MidiTrackController(MidiSequencerImpl sequencer){ this.sequencer = sequencer; this.tracks = new ArrayList(); this.anySolo = false; } public void init(int count){ this.tracks.clear(); for(int i = 0; i < count; i ++){ this.tracks.add(new MidiTrack()); } } public void clearTracks(){ this.tracks.clear(); } public void checkAnySolo(){ this.anySolo = false; for(int i = 0; i < this.tracks.size(); i ++){ MidiTrack track = (MidiTrack)this.tracks.get(i); if(track.isSolo()){ this.anySolo = true; break; } } } public void setSolo(int index,boolean solo) throws MidiPlayerException{ if(index >= 0 && index < this.tracks.size()){ MidiTrack track = (MidiTrack)this.tracks.get(index); track.setSolo(solo); checkAnySolo(); if(track.isSolo()){ setMute(index,false); this.sequencer.getTransmitter().sendAllNotesOff(); } } } public void setMute(int index,boolean mute) throws MidiPlayerException{ if(index >= 0 && index < this.tracks.size()){ MidiTrack track = (MidiTrack)this.tracks.get(index); track.setMute(mute); if(track.isMute()){ setSolo(index,false); this.sequencer.getTransmitter().sendAllNotesOff(); } } } public boolean isSolo(int index){ if(index >= 0 && index < this.tracks.size()){ MidiTrack track = (MidiTrack)this.tracks.get(index); return track.isSolo(); } return false; } public boolean isMute(int index){ if(index >= 0 && index < this.tracks.size()){ MidiTrack track = (MidiTrack)this.tracks.get(index); return track.isMute(); } return false; } public boolean isAnySolo(){ return this.anySolo; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectBend.java0000644000175000017500000000326111273045225031111 0ustar julianjulian/* * Created on 26-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGEffectBend { public static final int SEMITONE_LENGTH = 1; public static final int MAX_POSITION_LENGTH = 12; public static final int MAX_VALUE_LENGTH = (SEMITONE_LENGTH * 12); private List points; public TGEffectBend(){ this.points = new ArrayList(); } public void addPoint(int position,int value){ this.points.add(new BendPoint(position,value)); } public List getPoints(){ return this.points; } public TGEffectBend clone(TGFactory factory){ TGEffectBend effect = factory.newEffectBend(); Iterator it = getPoints().iterator(); while(it.hasNext()){ BendPoint point = (BendPoint)it.next(); effect.addPoint(point.getPosition(),point.getValue()); } return effect; } public class BendPoint{ private int position; private int value; public BendPoint(int position,int value){ this.position = position; this.value = value; } public int getPosition() { return this.position; } public int getValue() { return this.value; } public long getTime(long duration){ return (duration * getPosition() / MAX_POSITION_LENGTH); } public Object clone(){ return new BendPoint(getPosition(),getValue()); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectGrace.java0000644000175000017500000000375411273045225031271 0ustar julianjulianpackage org.herac.tuxguitar.song.models.effects; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGVelocities; public abstract class TGEffectGrace { public static final int TRANSITION_NONE = 0; public static final int TRANSITION_SLIDE = 1; public static final int TRANSITION_BEND = 2; public static final int TRANSITION_HAMMER = 3; private int fret; private int duration; private int dynamic; private int transition; private boolean onBeat; private boolean dead; public TGEffectGrace() { this.fret = 0; this.duration = 1; this.dynamic = TGVelocities.DEFAULT; this.transition = TRANSITION_NONE; this.onBeat = false; this.dead = false; } public boolean isDead() { return this.dead; } public void setDead(boolean dead) { this.dead = dead; } public int getDuration() { return this.duration; } public void setDuration(int duration) { this.duration = duration; } public int getDynamic() { return this.dynamic; } public void setDynamic(int dynamic) { this.dynamic = dynamic; } public int getFret() { return this.fret; } public void setFret(int fret) { this.fret = fret; } public boolean isOnBeat() { return this.onBeat; } public void setOnBeat(boolean onBeat) { this.onBeat = onBeat; } public int getTransition() { return this.transition; } public void setTransition(int transition) { this.transition = transition; } public int getDurationTime(){ //return (int)(((float)TGDuration.QUARTER_TIME / 16.00 ) * (float)getDuration()); return (int)((TGDuration.QUARTER_TIME / 16.00 ) * getDuration()); } public TGEffectGrace clone(TGFactory factory){ TGEffectGrace effect = factory.newEffectGrace(); effect.setFret(getFret()); effect.setDuration(getDuration()); effect.setDynamic(getDynamic()); effect.setTransition(getTransition()); effect.setOnBeat(isOnBeat()); effect.setDead(isDead()); return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectHarmonic.java0000644000175000017500000000353611273045225032006 0ustar julianjulianpackage org.herac.tuxguitar.song.models.effects; import org.herac.tuxguitar.song.factory.TGFactory; public abstract class TGEffectHarmonic { public static final String KEY_NATURAL = "N.H"; public static final String KEY_ARTIFICIAL = "A.H"; public static final String KEY_TAPPED = "T.H"; public static final String KEY_PINCH = "P.H"; public static final String KEY_SEMI = "S.H"; public static final int TYPE_NATURAL = 1; public static final int TYPE_ARTIFICIAL = 2; public static final int TYPE_TAPPED = 3; public static final int TYPE_PINCH = 4; public static final int TYPE_SEMI = 5; public static final int MIN_ARTIFICIAL_OFFSET = -24; public static final int MAX_ARTIFICIAL_OFFSET = 24; public static final int MAX_TAPPED_OFFSET = 24; public static final int NATURAL_FREQUENCIES[][] = { {12, 12}, //AH12 (+12 frets) {9 , 28}, //AH9 (+28 frets) {5 , 24}, //AH5 (+24 frets) {7 , 19}, //AH7 (+19 frets) {4 , 28}, //AH4 (+28 frets) {3 , 31} //AH3 (+31 frets) }; private int type; private int data; public TGEffectHarmonic(){ this.type = 0; this.data = 0; } public int getData() { return this.data; } public void setData(int data) { this.data = data; } public int getType() { return this.type; } public void setType(int type) { this.type = type; } public boolean isNatural(){ return (this.type == TYPE_NATURAL); } public boolean isArtificial(){ return (this.type == TYPE_ARTIFICIAL); } public boolean isTapped(){ return (this.type == TYPE_TAPPED); } public boolean isPinch(){ return (this.type == TYPE_PINCH); } public boolean isSemi(){ return (this.type == TYPE_SEMI); } public TGEffectHarmonic clone(TGFactory factory){ TGEffectHarmonic effect = factory.newEffectHarmonic(); effect.setType(getType()); effect.setData(getData()); return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloBar.java0000644000175000017500000000326411273045225032312 0ustar julianjulian/* * Created on 26-dic-2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.song.models.effects; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.song.factory.TGFactory; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class TGEffectTremoloBar { public static final int MAX_POSITION_LENGTH = 12; public static final int MAX_VALUE_LENGTH = 12; private List points; public TGEffectTremoloBar(){ this.points = new ArrayList(); } public void addPoint(int position,int value){ this.points.add(new TremoloBarPoint(position,value)); } public List getPoints(){ return this.points; } public TGEffectTremoloBar clone(TGFactory factory){ TGEffectTremoloBar effect = factory.newEffectTremoloBar(); Iterator it = getPoints().iterator(); while(it.hasNext()){ TremoloBarPoint point = (TremoloBarPoint)it.next(); effect.addPoint(point.getPosition(),point.getValue()); } return effect; } public class TremoloBarPoint{ private int position; private int value; public TremoloBarPoint(int position,int value){ this.position = position; this.value = value; } public int getPosition() { return this.position; } public int getValue() { return this.value; } public long getTime(long duration){ return (duration * getPosition() / MAX_POSITION_LENGTH); } public Object clone(){ return new TremoloBarPoint(getPosition(),getValue()); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloPicking.java0000644000175000017500000000174211273045225033171 0ustar julianjulianpackage org.herac.tuxguitar.song.models.effects; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGDuration; public abstract class TGEffectTremoloPicking { private TGDuration duration; public TGEffectTremoloPicking(TGFactory factory) { this.duration = factory.newDuration(); } public TGDuration getDuration() { return this.duration; } public void setDuration(TGDuration duration) { this.duration = duration; } public TGEffectTremoloPicking clone(TGFactory factory){ TGEffectTremoloPicking effect = factory.newEffectTremoloPicking(); effect.getDuration().setValue(getDuration().getValue()); effect.getDuration().setDotted(getDuration().isDotted()); effect.getDuration().setDoubleDotted(getDuration().isDoubleDotted()); effect.getDuration().getDivision().setEnters(getDuration().getDivision().getEnters()); effect.getDuration().getDivision().setTimes(getDuration().getDivision().getTimes()); return effect; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTrill.java0000644000175000017500000000214411273045225031326 0ustar julianjulianpackage org.herac.tuxguitar.song.models.effects; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGDuration; public abstract class TGEffectTrill { private int fret; private TGDuration duration; public TGEffectTrill(TGFactory factory) { this.fret = 0; this.duration = factory.newDuration(); } public int getFret() { return this.fret; } public void setFret(int fret) { this.fret = fret; } public TGDuration getDuration() { return this.duration; } public void setDuration(TGDuration duration) { this.duration = duration; } public TGEffectTrill clone(TGFactory factory){ TGEffectTrill effect = factory.newEffectTrill(); effect.setFret(getFret()); effect.getDuration().setValue(getDuration().getValue()); effect.getDuration().setDotted(getDuration().isDotted()); effect.getDuration().setDoubleDotted(getDuration().isDoubleDotted()); effect.getDuration().getDivision().setEnters(getDuration().getDivision().getEnters()); effect.getDuration().getDivision().setTimes(getDuration().getDivision().getTimes()); return effect; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/helper/TrackInfoHelper.java0000644000175000017500000000171511273045350031300 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.helper; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.io.ptb.base.PTTrackInfo; import org.herac.tuxguitar.song.models.TGTrack; public class TrackInfoHelper { private List staffTracks = new ArrayList(); private PTTrackInfo defaultInfo; public TrackInfoHelper(){ this.staffTracks = new ArrayList(); } public void reset(PTTrackInfo defaultInfo){ this.defaultInfo = defaultInfo; this.staffTracks.clear(); } public PTTrackInfo getDefaultInfo() { return this.defaultInfo; } public TGTrack getStaffTrack(int staff) { if(staff >= 0 && staff < this.staffTracks.size() ){ return (TGTrack)this.staffTracks.get( staff ); } return null; } public int countStaffTracks() { return this.staffTracks.size(); } public void addStaffTrack(TGTrack track) { this.staffTracks.add( track ); } public void removeStaffTrack(int staff) { this.staffTracks.remove( staff ); } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/helper/TrackHelper.java0000644000175000017500000000105611273045350030462 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.helper; import org.herac.tuxguitar.io.ptb.base.PTTrackInfo; public class TrackHelper { private TrackInfoHelper infoHelper; private TrackStartHelper startHelper; public TrackHelper(){ this.infoHelper = new TrackInfoHelper(); this.startHelper = new TrackStartHelper(); } public void reset(PTTrackInfo defaultInfo){ this.infoHelper.reset(defaultInfo); } public TrackInfoHelper getInfoHelper() { return this.infoHelper; } public TrackStartHelper getStartHelper() { return this.startHelper; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/helper/TrackStartHelper.java0000644000175000017500000000402211273045350031474 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.helper; import org.herac.tuxguitar.song.models.TGDuration; public class TrackStartHelper { private int section; private long[][] voices; private boolean measureEmpty; private boolean measureRest; private long barStart; private long barLength; public TrackStartHelper(){ super(); } public void init(int section,int staffs){ this.section = section; this.voices = new long[staffs][2]; this.measureEmpty = true; this.measureRest = false; this.barStart = 0; this.barLength = 0; } public int getSection(){ return this.section; } public void initVoices(long start){ for(int i = 0; i < this.voices.length; i ++){ for(int j = 0; j < this.voices[i].length; j ++){ this.voices[i][j] = fixValue(start); } } this.measureEmpty = true; this.measureRest = false; } public long getMaxStart(){ long result = TGDuration.QUARTER_TIME; for(int i = 0; i < this.voices.length; i ++){ for(int j = 0; j < this.voices[i].length; j ++){ result = Math.max(result,this.voices[i][j] ); } } // checkRestMeasures if( this.measureRest && this.measureEmpty ){ result = Math.max(result, (this.barStart + this.barLength)); } return fixValue(result); } public long getVoiceStart(int staff,int voice){ return this.voices[staff][voice]; } public void setVoiceStart(int staff,int voice,long start){ this.voices[staff][voice] = fixValue(start); } public long getBarStart() { return this.barStart; } public void setBarStart(long barStart) { this.barStart = barStart; } public long getBarLength() { return this.barLength; } public void setBarLength(long barLength) { this.barLength = barLength; } public void checkBeat( boolean rest ){ this.measureEmpty = (this.measureEmpty && rest ); this.measureRest = true; } public long fixValue(long value){ return (((value % (TGDuration.QUARTER_TIME / 2)) + 10 > (TGDuration.QUARTER_TIME / 2))?(value + ((TGDuration.QUARTER_TIME / 2) - (value % (TGDuration.QUARTER_TIME / 2)))):value); } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTSong.java0000644000175000017500000000065511273045350027067 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTSong { private PTSongInfo info; private PTTrack track1; private PTTrack track2; public PTSong(){ this.info = new PTSongInfo(); this.track1 = new PTTrack(); this.track2 = new PTTrack(); } public PTTrack getTrack1() { return this.track1; } public PTTrack getTrack2() { return this.track2; } public PTSongInfo getInfo(){ return this.info; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTTrackInfo.java0000644000175000017500000000412211273045350030032 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTTrackInfo { private String name; private int number; private int instrument; private int volume; private int balance; private int reverb; private int chorus; private int tremolo; private int phaser; private int[] strings; public PTTrackInfo(){ super(); } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getNumber() { return this.number; } public void setNumber(int number) { this.number = number; } public int getBalance() { return this.balance; } public void setBalance(int balance) { this.balance = balance; } public int getChorus() { return this.chorus; } public void setChorus(int chorus) { this.chorus = chorus; } public int getInstrument() { return this.instrument; } public void setInstrument(int instrument) { this.instrument = instrument; } public int getPhaser() { return this.phaser; } public void setPhaser(int phaser) { this.phaser = phaser; } public int getReverb() { return this.reverb; } public void setReverb(int reverb) { this.reverb = reverb; } public int getTremolo() { return this.tremolo; } public void setTremolo(int tremolo) { this.tremolo = tremolo; } public int getVolume() { return this.volume; } public void setVolume(int volume) { this.volume = volume; } public int[] getStrings(){ return this.strings; } public void setStrings(int[] strings){ this.strings = strings; } public PTTrackInfo getClone(){ int[] strings = new int[ this.strings.length ] ; for( int i = 0 ; i < strings.length ; i ++ ){ strings[ i ] = this.strings[ i ]; } PTTrackInfo info = new PTTrackInfo(); info.setNumber( getNumber() ); info.setName( getName() ); info.setInstrument( getInstrument() ); info.setVolume( getVolume() ); info.setBalance( getBalance() ); info.setChorus( getChorus() ); info.setPhaser( getPhaser() ); info.setReverb( getReverb() ); info.setTremolo( getTremolo() ); info.setStrings( strings ); return info; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTGuitarIn.java0000644000175000017500000000066711273045350027706 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTGuitarIn implements PTComponent{ private int staff; private int trackInfo; public PTGuitarIn(int staff,int trackInfo){ this.staff = staff; this.trackInfo = trackInfo; } public int getStaff() { return this.staff; } public int getTrackInfo() { return this.trackInfo; } public PTComponent getClone(){ return new PTGuitarIn( getStaff(), getTrackInfo() ); } }tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTSection.java0000644000175000017500000000270511273045350027563 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class PTSection { private int number; private int staffs; private List positions; public PTSection(int number){ this.number = number; this.positions = new ArrayList(); } public int getNumber(){ return this.number; } public int getStaffs() { return this.staffs; } public void setStaffs(int staffs) { this.staffs = staffs; } public List getPositions(){ return this.positions; } public PTPosition getPosition(int position){ Iterator it = getPositions().iterator(); while(it.hasNext()){ PTPosition p = (PTPosition)it.next(); if(p.getPosition() == position){ return p; } } PTPosition p = new PTPosition(position); getPositions().add(p); return p; } public int getNextPositionNumber(){ int next = 0; Iterator it = getPositions().iterator(); while(it.hasNext()){ PTPosition p = (PTPosition)it.next(); next = Math.max(next, (p.getPosition() + 1) ); } return next; } public void sort(){ int count = getPositions().size(); for(int i = 0;i < count;i++){ PTPosition minimum = null; for(int j = i;j < count;j++){ PTPosition position = (PTPosition)getPositions().get(j); if(minimum == null || position.getPosition() < minimum.getPosition()){ minimum = position; } } getPositions().remove(minimum); getPositions().add(i,minimum); } } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTSongInfo.java0000644000175000017500000001107611273045350027702 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTSongInfo { private int classification; private int releaseType; private int albumType; private int day; private int month; private int year; private int style; private int level; private boolean liveRecording; private String name; private String interpret; private String album; private String author; private String lyricist; private String arrenger; private String guitarTranscriber; private String bassTranscriber; private String lyrics; private String guitarInstructions; private String bassInstructions; private String instructions; private String copyright; public PTSongInfo(){ super(); } public String getAlbum() { return this.album; } public void setAlbum(String album) { this.album = album; } public int getAlbumType() { return this.albumType; } public void setAlbumType(int albumType) { this.albumType = albumType; } public String getArrenger() { return this.arrenger; } public void setArrenger(String arrenger) { this.arrenger = arrenger; } public String getAuthor() { return this.author; } public void setAuthor(String author) { this.author = author; } public String getBassInstructions() { return this.bassInstructions; } public void setBassInstructions(String bassInstructions) { this.bassInstructions = bassInstructions; } public String getBassTranscriber() { return this.bassTranscriber; } public void setBassTranscriber(String bassTranscriber) { this.bassTranscriber = bassTranscriber; } public int getClassification() { return this.classification; } public void setClassification(int classification) { this.classification = classification; } public String getCopyright() { return this.copyright; } public void setCopyright(String copyright) { this.copyright = copyright; } public int getDay() { return this.day; } public void setDay(int day) { this.day = day; } public String getGuitarInstructions() { return this.guitarInstructions; } public void setGuitarInstructions(String guitarInstructions) { this.guitarInstructions = guitarInstructions; } public String getGuitarTranscriber() { return this.guitarTranscriber; } public void setGuitarTranscriber(String guitarTranscriber) { this.guitarTranscriber = guitarTranscriber; } public String getInstructions() { return this.instructions; } public void setInstructions(String instructions) { this.instructions = instructions; } public String getInterpret() { return this.interpret; } public void setInterpret(String interpret) { this.interpret = interpret; } public int getLevel() { return this.level; } public void setLevel(int level) { this.level = level; } public boolean isLiveRecording() { return this.liveRecording; } public void setLiveRecording(boolean liveRecording) { this.liveRecording = liveRecording; } public String getLyricist() { return this.lyricist; } public void setLyricist(String lyricist) { this.lyricist = lyricist; } public String getLyrics() { return this.lyrics; } public void setLyrics(String lyrics) { this.lyrics = lyrics; } public int getMonth() { return this.month; } public void setMonth(int month) { this.month = month; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getReleaseType() { return this.releaseType; } public void setReleaseType(int releaseType) { this.releaseType = releaseType; } public int getStyle() { return this.style; } public void setStyle(int style) { this.style = style; } public int getYear() { return this.year; } public void setYear(int year) { this.year = year; } public void copy( PTSongInfo info ){ info.setClassification(getClassification()); info.setReleaseType(getReleaseType()); info.setAlbumType(getAlbumType()); info.setDay(getDay()); info.setMonth(getMonth()); info.setYear(getYear()); info.setStyle(getStyle()); info.setLevel(getLevel()); info.setLiveRecording(isLiveRecording()); info.setName(getName()); info.setInterpret(getInterpret()); info.setAlbum(getAlbum()); info.setAuthor(getAuthor()); info.setLyricist(getLyricist()); info.setArrenger(getArrenger()); info.setGuitarTranscriber(getGuitarTranscriber()); info.setBassTranscriber(getBassTranscriber()); info.setLyrics(getLyrics()); info.setGuitarInstructions(getGuitarInstructions()); info.setBassInstructions(getBassInstructions()); info.setInstructions(getInstructions()); info.setCopyright(getCopyright()); } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTNote.java0000644000175000017500000000251211273045350027060 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTNote{ private int value; private int string; private int bend; private boolean tied; private boolean dead; private boolean hammer; private boolean slide; public PTNote(){ super(); } public int getString() { return this.string; } public void setString(int string) { this.string = string; } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } public boolean isDead() { return this.dead; } public void setDead(boolean dead) { this.dead = dead; } public boolean isTied() { return this.tied; } public void setTied(boolean tied) { this.tied = tied; } public int getBend() { return this.bend; } public void setBend(int bend) { this.bend = bend; } public boolean isHammer() { return this.hammer; } public void setHammer(boolean hammer) { this.hammer = hammer; } public boolean isSlide() { return this.slide; } public void setSlide(boolean slide) { this.slide = slide; } public PTNote getClone(){ PTNote note = new PTNote(); note.setValue( getValue() ); note.setString( getString() ); note.setTied( isTied() ); note.setDead( isDead() ); note.setBend( getBend() ); note.setHammer( isHammer() ); note.setSlide( isSlide() ); return note; } }tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTPosition.java0000644000175000017500000000145611273045350027765 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class PTPosition { private int position; private List components; public PTPosition(int position){ this.position = position; this.components = new ArrayList(); } public int getPosition() { return this.position; } public List getComponents() { return this.components; } public void addComponent(PTComponent component){ this.components.add(component); } public void sort(){ Collections.sort( getComponents(), new Comparator() { public int compare(Object o1, Object o2) { if( o1 instanceof PTDirection ){ return 1; } if( o2 instanceof PTDirection ){ return -1; } return 0; } }); } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTBeat.java0000644000175000017500000000537311273045350027036 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class PTBeat implements PTComponent{ private int staff; private int voice; private int multiBarRest; private int duration; private int enters; private int times; private boolean dotted; private boolean doubleDotted; private boolean vibrato; private boolean grace; private boolean arpeggioUp; private boolean arpeggioDown; private List notes; public PTBeat(int staff,int voice){ this.staff = staff; this.voice = voice; this.notes = new ArrayList(); this.multiBarRest = 1; } public int getStaff() { return this.staff; } public int getVoice() { return this.voice; } public void addNote(PTNote note){ this.notes.add(note); } public List getNotes(){ return this.notes; } public boolean isGrace() { return this.grace; } public void setGrace(boolean grace) { this.grace = grace; } public boolean isVibrato() { return this.vibrato; } public void setVibrato(boolean vibrato) { this.vibrato = vibrato; } public int getMultiBarRest() { return this.multiBarRest; } public void setMultiBarRest(int multiBarRest) { this.multiBarRest = multiBarRest; } public boolean isDotted() { return this.dotted; } public void setDotted(boolean dotted) { this.dotted = dotted; } public boolean isDoubleDotted() { return this.doubleDotted; } public void setDoubleDotted(boolean doubleDotted) { this.doubleDotted = doubleDotted; } public int getDuration() { return this.duration; } public void setDuration(int duration) { this.duration = duration; } public int getEnters() { return this.enters; } public void setEnters(int enters) { this.enters = enters; } public int getTimes() { return this.times; } public void setTimes(int times) { this.times = times; } public boolean isArpeggioUp() { return this.arpeggioUp; } public void setArpeggioUp(boolean arpeggioUp) { this.arpeggioUp = arpeggioUp; } public boolean isArpeggioDown() { return this.arpeggioDown; } public void setArpeggioDown(boolean arpeggioDown) { this.arpeggioDown = arpeggioDown; } public PTComponent getClone(){ PTBeat beat = new PTBeat( getStaff(), getVoice() ); beat.setDuration( getDuration() ); beat.setDotted( isDotted() ); beat.setDoubleDotted( isDoubleDotted() ); beat.setTimes( getTimes() ); beat.setEnters( getEnters() ); beat.setMultiBarRest( getMultiBarRest() ); beat.setGrace( isGrace() ); beat.setVibrato( isVibrato() ); beat.setArpeggioUp( isArpeggioUp() ); beat.setArpeggioDown( isArpeggioDown() ); Iterator it = getNotes().iterator(); while( it.hasNext() ){ beat.addNote( ((PTNote)it.next()).getClone() ); } return beat; } }tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTBar.java0000644000175000017500000000204311273045350026656 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTBar implements PTComponent{ private int repeatClose; private boolean repeatStart; private int numerator; private int denominator; public PTBar(){ super(); } public int getDenominator() { return this.denominator; } public void setDenominator(int denominator) { this.denominator = denominator; } public int getNumerator() { return this.numerator; } public void setNumerator(int numerator) { this.numerator = numerator; } public int getRepeatClose() { return this.repeatClose; } public void setRepeatClose(int repeatClose) { this.repeatClose = repeatClose; } public boolean isRepeatStart() { return this.repeatStart; } public void setRepeatStart(boolean repeatStart) { this.repeatStart = repeatStart; } public PTComponent getClone(){ PTBar bar = new PTBar(); bar.setNumerator( getNumerator() ); bar.setDenominator( getDenominator() ); bar.setRepeatStart( isRepeatStart() ); bar.setRepeatClose( getRepeatClose() ); return bar; } }tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTComponent.java0000644000175000017500000000015711273045350030120 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public interface PTComponent { public PTComponent getClone(); } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTTrack.java0000644000175000017500000000212011273045350027212 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; import java.util.ArrayList; import java.util.List; public class PTTrack { private List sections; private List infos; public PTTrack(){ this.sections = new ArrayList(); this.infos = new ArrayList(); } public List getInfos(){ return this.infos; } public List getSections(){ return this.sections; } public PTSection getSection(int index){ for(int i = getSections().size(); i <= index; i ++){ getSections().add(new PTSection(i)); } return (PTSection)getSections().get(index); } public PTTrackInfo getInfo(int number){ for(int i = 0; i < getInfos().size(); i++){ PTTrackInfo info = (PTTrackInfo)getInfos().get(i); if( ( (1 << info.getNumber()) & number ) != 0 ){ return info; } } return null; } public PTTrackInfo getDefaultInfo(){ PTTrackInfo defaultInfo = null; for(int i = 0; i < getInfos().size(); i++){ PTTrackInfo info = (PTTrackInfo)getInfos().get(i); if( defaultInfo == null || info.getNumber() < defaultInfo.getNumber() ){ defaultInfo = info; } } return defaultInfo; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTDirection.java0000644000175000017500000000344411273045350030100 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTDirection implements PTComponent{ public static final int DIRECTION_CODA = 0; public static final int DIRECTION_DOUBLE_CODA = 1; public static final int DIRECTION_SEGNO = 2; public static final int DIRECTION_SEGNO_SEGNO = 3; public static final int DIRECTION_FINE = 4; public static final int DIRECTION_DA_CAPO = 5; public static final int DIRECTION_DAL_SEGNO = 6; public static final int DIRECTION_DAL_SEGNO_SEGNO = 7; public static final int DIRECTION_TO_CODA = 8; public static final int DIRECTION_TO_DOUBLE_CODA = 9; public static final int DIRECTION_DA_CAPO_AL_CODA = 10; public static final int DIRECTION_DA_CAPO_AL_DOUBLE_CODA = 11; public static final int DIRECTION_DAL_SEGNO_AL_CODA = 12; public static final int DIRECTION_DAL_SEGNO_AL_DOUBLE_CODA = 13; public static final int DIRECTION_DAL_SEGNO_SEGNO_AL_CODA = 14; public static final int DIRECTION_DAL_SEGNO_SEGNO_AL_DOUBLE_CODA = 15; public static final int DIRECTION_DA_CAPO_AL_FINE = 16; public static final int DIRECTION_DAL_SEGNO_AL_FINE = 17; public static final int DIRECTION_DAL_SEGNO_SEGNO_AL_FINE = 18; public static final int ACTIVE_SYMBOL_DC = 1; public static final int ACTIVE_SYMBOL_DS = 2; public static final int ACTIVE_SYMBOL_DSS = 3; private int direction; private int activeSymbol; private int repeat; public PTDirection(int direction, int activeSymbol, int repeat){ this.direction = direction; this.activeSymbol = activeSymbol; this.repeat = repeat; } public int getDirection() { return this.direction; } public int getActiveSymbol() { return this.activeSymbol; } public int getRepeat() { return this.repeat; } public PTComponent getClone(){ return new PTDirection( getDirection() , getActiveSymbol(), getRepeat() ); } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTSymbol.java0000644000175000017500000000064411273045350027424 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTSymbol implements PTComponent{ private int endNumber; public PTSymbol(){ super(); } public int getEndNumber() { return this.endNumber; } public void setEndNumber(int endNumber) { this.endNumber = endNumber; } public PTComponent getClone(){ PTSymbol symbol = new PTSymbol(); symbol.setEndNumber( getEndNumber() ); return symbol; } } tuxguitar-src-1.2/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/base/PTTempo.java0000644000175000017500000000067611273045350027250 0ustar julianjulianpackage org.herac.tuxguitar.io.ptb.base; public class PTTempo implements PTComponent{ private int tempo; private int tripletFeel; public PTTempo(int tempo,int tripletFeel){ this.tempo = tempo; this.tripletFeel = tripletFeel; } public int getTempo() { return this.tempo; } public int getTripletFeel() { return this.tripletFeel; } public PTComponent getClone(){ return new PTTempo( getTempo() , getTripletFeel() ); } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TETempo.java0000644000175000017500000000051611273045352027212 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TETempo { private int value; public TETempo(int value){ this.value = value; } public int getValue() { return this.value; } public String toString(){ String string = new String("[TEMPO]"); string += "\n Value: " + getValue(); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEChord.java0000644000175000017500000000115111273045352027161 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TEChord { private byte[] strings; private String name; public TEChord(byte[] strings,String name){ this.strings = strings; this.name = name; } public String getName() { return this.name; } public byte[] getStrings() { return this.strings; } public String toString(){ String string = new String("[CHORD]"); string += "\n Name: " + getName(); for(int i = 0; i < this.strings.length; i ++){ if(this.strings[i] != -1){ string += "\n String " + (i + 1) + ": " + this.strings[i]; } } return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEPercussion.java0000644000175000017500000000077611273045352030270 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TEPercussion { private String name; private int volume; public TEPercussion(String name, int volume) { this.name = name; this.volume = volume; } public String getName() { return this.name; } public int getVolume() { return this.volume; } public String toString(){ String string = new String("[PERCUSSION]"); string += "\n Name: " + getName(); string += "\n Volume: " + getVolume(); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TETimeSignature.java0000644000175000017500000000057011273045352030706 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TETimeSignature { private int numerator; private int denominator; public TETimeSignature(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } public int getDenominator() { return this.denominator; } public int getNumerator() { return this.numerator; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEComponent.java0000644000175000017500000000071411273045352030070 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public abstract class TEComponent { private int position; private int measure; private int string; public TEComponent(int position,int measure, int string) { this.position = position; this.measure = measure; this.string = string; } public int getPosition() { return this.position; } public int getMeasure() { return this.measure; } public int getString() { return this.string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TESong.java0000644000175000017500000001001411273045352027026 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TESong { private int strings; private int measures; private TEInfo info; private TETempo tempo; private TETimeSignature timeSignature; private TERepeat[] repeats; private TEText[] texts; private TEChord[] chords; private TEPercussion[] percussions; private TERhythm[] rhythms; private TETrack[] tracks; private List components; private List tsChanges; public TESong(){ this.components = new ArrayList(); this.tsChanges = new ArrayList(); } public TERhythm[] getRhythms() { return this.rhythms; } public void setRhythms(int length) { this.rhythms = new TERhythm[length]; } public void setRhythm(int index,TERhythm rhythm) { this.rhythms[index] = rhythm; } public TEPercussion[] getPercussions() { return this.percussions; } public void setPercussions(int length) { this.percussions = new TEPercussion[length]; } public void setPercussion(int index,TEPercussion percussions) { this.percussions[index] = percussions; } public TEChord[] getChords() { return this.chords; } public void setChords(int length) { this.chords = new TEChord[length]; } public void setChord(int index,TEChord chord) { this.chords[index] = chord; } public TEInfo getInfo() { return this.info; } public void setInfo(TEInfo info) { this.info = info; } public TERepeat[] getRepeats() { return this.repeats; } public void setRepeats(int length) { this.repeats = new TERepeat[length]; } public void setRepeat(int index,TERepeat repeat) { this.repeats[index] = repeat; } public TEText[] getTexts() { return this.texts; } public void setTexts(int length) { this.texts = new TEText[length]; } public void setText(int index,TEText text) { this.texts[index] = text; } public TETrack[] getTracks() { return this.tracks; } public void setTracks(int length) { this.tracks = new TETrack[length]; } public void setTrack(int index,TETrack track) { this.tracks[index] = track; } public TETimeSignature getTimeSignature() { return this.timeSignature; } public void setTimeSignature(TETimeSignature timeSignature) { this.timeSignature = timeSignature; } public TETempo getTempo() { return this.tempo; } public void setTempo(TETempo tempo) { this.tempo = tempo; } public int getStrings() { return this.strings; } public void setStrings(int strings) { this.strings = strings; } public int getMeasures() { return this.measures; } public void setMeasures(int measures) { this.measures = measures; } public List getComponents() { return this.components; } public void addTimeSignatureChange(TETimeSignatureChange tsChange){ this.tsChanges.add(tsChange); } public TETimeSignature getTimeSignature(int measure){ Iterator it = this.tsChanges.iterator(); while(it.hasNext()){ TETimeSignatureChange change = (TETimeSignatureChange)it.next(); if(change.getMeasure() == measure){ return change.getTimeSignature(); } } return getTimeSignature(); } public String toString(){ String string = new String("[SONG] *** Tabledit file format ***\n"); string += (this.getInfo().toString() + "\n"); string += (this.getTempo().toString() + "\n"); for(int i = 0; i < this.repeats.length; i ++){ string += (this.repeats[i].toString() + "\n"); } for(int i = 0; i < this.texts.length; i ++){ string += (this.texts[i].toString() + "\n"); } for(int i = 0; i < this.chords.length; i ++){ string += (this.chords[i].toString() + "\n"); } for(int i = 0; i < this.percussions.length; i ++){ string += (this.percussions[i].toString() + "\n"); } for(int i = 0; i < this.rhythms.length; i ++){ string += (this.rhythms[i].toString() + "\n"); } for(int i = 0; i < this.tracks.length; i ++){ string += (this.tracks[i].toString() + "\n"); } for(int i = 0; i < this.components.size(); i ++){ string += (this.components.get(i).toString() + "\n"); } return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TETrack.java0000644000175000017500000000342611273045352027175 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TETrack { public static final int FLAG_DOUBLE_STRINGS = 0x01; public static final int FLAG_LET_RING = 0x02; public static final int FLAG_PEDAL_STEEL_GUITAR = 0x04; public static final int FLAG_EFFECT_CHANNEL_DISABLED = 0x08; public static final int FLAG_RHYTHM_TRACK = 0x10; private boolean percussion; private int instrument; private int capo; private int clefType; private int clefNumber; private int pan; private int volume; private int flags; private int[] strings; private String name; public TETrack(boolean percussion,int instrument, int capo, int clefType, int clefNumber, int pan, int volume, int flags, int[] strings, String name) { this.percussion = percussion; this.instrument = instrument; this.capo = capo; this.clefType = clefType; this.clefNumber = clefNumber; this.pan = pan; this.volume = volume; this.flags = flags; this.strings = strings; this.name = name; } public int getCapo() { return this.capo; } public int getClefNumber() { return this.clefNumber; } public int getClefType() { return this.clefType; } public int getFlags() { return this.flags; } public String getName() { return this.name; } public int getPan() { return this.pan; } public boolean isPercussion() { return this.percussion; } public int[] getStrings() { return this.strings; } public int getVolume() { return this.volume; } public int getInstrument() { return this.instrument; } public String toString(){ String string = new String("[TRACK]"); string += "\n " + this.getName(); for(int i = 0; i < this.strings.length; i ++){ string += "\n String " + i + ": " + (96 - this.strings[i]); } return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEInfo.java0000644000175000017500000000165411273045352027025 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TEInfo { private String title; private String subtitle; private String comments; private String notes; public TEInfo(String title, String subtitle, String comments) { this.title = title; this.subtitle = subtitle; this.comments = comments; } public String getComments() { return this.comments; } public String getSubtitle() { return this.subtitle; } public String getTitle() { return this.title; } public String getNotes() { return this.notes; } public void setNotes(String notes) { this.notes = notes; } public String toString(){ String string = new String("[INFO]"); string += "\n Title: " + getTitle(); string += "\n Subtitle: " + getSubtitle(); string += "\n Comments: " + getComments(); if(this.getNotes() != null){ string += "\n Notes: " + getNotes(); } return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEComponentChord.java0000644000175000017500000000111611273045352031045 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TEComponentChord extends TEComponent{ private int chord; public TEComponentChord(int position,int measure, int string, int chord) { super(position, measure, string); this.chord = chord; } public int getChord() { return this.chord; } public String toString(){ String string = new String("[NOTE]"); string += "\n Measure: " + getMeasure(); string += "\n Position: " + getPosition(); string += "\n String: " + getString(); string += "\n Chord: " + getChord(); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TETimeSignatureChange.java0000644000175000017500000000132511273045352032013 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TETimeSignatureChange{ private int measure; private TETimeSignature timeSignature; public TETimeSignatureChange(int measure, TETimeSignature timeSignature) { this.measure = measure; this.timeSignature = timeSignature; } public int getMeasure(){ return this.measure; } public TETimeSignature getTimeSignature() { return this.timeSignature; } public String toString(){ String string = new String("[TIME SIGNATURE CHANGE]"); string += "\n Measure: " + getMeasure(); string += "\n Numerator: " + getTimeSignature().getNumerator(); string += "\n Denominator: " + getTimeSignature().getDenominator(); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEComponentNote.java0000644000175000017500000000165211273045352030720 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TEComponentNote extends TEComponent{ private int fret; private int duration; private int dynamic; private int effect; public TEComponentNote(int position,int measure, int string, int fret, int duration, int dynamic, int effect) { super(position, measure, string); this.fret = fret; this.duration = duration; this.dynamic = dynamic; this.effect = effect; } public int getDuration() { return this.duration; } public int getDynamic() { return this.dynamic; } public int getEffect() { return this.effect; } public int getFret() { return this.fret; } public String toString(){ String string = new String("[NOTE]"); string += "\n Measure: " + getMeasure(); string += "\n Position: " + getPosition(); string += "\n String: " + getString(); string += "\n Fret: " + getFret(); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TERhythm.java0000644000175000017500000000126211273045352027400 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TERhythm { private String name; private int volume; private int instrument; public TERhythm(String name, int volume, int instrument) { this.name = name; this.volume = volume; this.instrument = instrument; } public int getInstrument() { return this.instrument; } public String getName() { return this.name; } public int getVolume() { return this.volume; } public String toString(){ String string = new String("[RHYTHM] "); string += "\n Name: " + getName(); string += "\n Volume: " + getVolume(); string += "\n Instrument: " + getInstrument(); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TERepeat.java0000644000175000017500000000070511273045352027346 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TERepeat { private int data1; private int data2; public TERepeat(int data1,int data2){ this.data1 = data1; this.data2 = data2; } public int getData1() { return this.data1; } public int getData2() { return this.data2; } public String toString(){ String string = new String("[REPEAT] "); string += (this.getData1() + "-" + this.getData2()); return string; } } tuxguitar-src-1.2/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/base/TEText.java0000644000175000017500000000052411273045352027051 0ustar julianjulianpackage org.herac.tuxguitar.io.tef.base; public class TEText { private String value; public TEText(String value){ this.value = value; } public String getValue() { return this.value; } public String toString(){ String string = new String("[TEXT]"); string += "\n Value: " + getValue(); return string; } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortReaderAudioUnit.javatuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPor0000644000175000017500000000111111273045343033421 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.audiounit; import java.util.List; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; import org.herac.tuxguitar.player.impl.midiport.audiounit.MidiReceiverImpl; public class MidiPortReaderAudioUnit implements MidiOutputPortProvider{ private static final MidiReceiverImpl midiOut = new MidiReceiverImpl(); public MidiPortReaderAudioUnit(){ super(); } public List listPorts() { if(!midiOut.isOpen()){ midiOut.open(); } return midiOut.listPorts(); } public void closeAll(){ midiOut.close(); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortReaderPlugin.javatuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPor0000644000175000017500000000116211273045343033427 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.audiounit; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiPortReaderPlugin extends TGMidiOutputPortProviderPlugin{ protected MidiOutputPortProvider getProvider() { return new MidiPortReaderAudioUnit(); } public String getAuthor() { return "Auria"; } public String getDescription() { return "Core Audio output plugin"; } public String getName() { return "Core Audio output plugin"; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/JNILibraryLoader.javatuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/JNILibr0000644000175000017500000000326511273045343033323 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.audiounit; import java.io.File; public class JNILibraryLoader { private static final String JNI_EXTENSION = ".jnilib"; //private static final String JNI_TMP_PATH = (System.getProperty( "java.io.tmpdir" ) + File.separator); public static void loadLibrary(String libname){ System.out.println("trying to load" + libname + " (void loadLibrary)"); JNILibraryLoader.loadFromClassPath(libname + JNI_EXTENSION); /* if(!JNILibraryLoader.loadFromClassPath(libname + JNI_EXTENSION)){ //System.loadLibrary(libname); } */ } private static boolean loadFromClassPath(String filename){ System.out.println("trying to load" + filename + " (bool loadFromClassPath)"); File file = new File(/*JNI_TMP_PATH +*/ filename); /* try{ if(!file.exists()){ OutputStream outputStream = new FileOutputStream(file); InputStream inputStream = JNILibraryLoader.class.getClassLoader().getResourceAsStream(filename); if (inputStream != null) { int read; byte [] buffer = new byte [4096]; while ((read = inputStream.read (buffer)) != -1) { outputStream.write(buffer, 0, read); } outputStream.close(); inputStream.close(); } } */ if(file.exists()){ System.out.println("calling file.getAbsolutePath() : "+ file.getAbsolutePath()); System.load(file.getAbsolutePath()); //System.load(file.getAbsolutePath()); return true; } //else //{ System.out.println("Can't find file " + file.getAbsolutePath()); return false; //} /* }catch(Throwable throwable){ return false; }finally{ if(file.exists()){ file.delete(); } } return false; */ } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiReceiverJNI.javatuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiRec0000644000175000017500000000154511273045343033405 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.audiounit; public abstract class MidiReceiverJNI{ private static final String JNI_LIBRARY_NAME = new String("tuxguitar-audiounit-jni"); static{ System.loadLibrary (JNI_LIBRARY_NAME); } public MidiReceiverJNI() { super(); } protected native void open(); protected native void close(); //protected native void findDevices(); protected native void openDevice(); protected native void closeDevice(); protected native void noteOn(int channel,int note,int velocity); protected native void noteOff(int channel,int note,int velocity); protected native void controlChange(int channel,int control,int value); protected native void programChange(int channel,int program); protected native void pitchBend(int channel,int value); //protected abstract void addDevice(String name); } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiRec0000644000175000017500000000425311273045343033404 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.audiounit; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiReceiverImpl extends MidiReceiverJNI implements MidiReceiver{ private boolean open; // unncessary private boolean connected; private List ports; public MidiReceiverImpl(){ this.ports = new ArrayList(); this.connected = false; } public void open(){ super.open(); this.open = true; } public void close(){ if(this.isOpen()){ this.disconnect(); super.close(); this.open = false; } } public boolean isOpen(){ return (this.open); } public boolean isConnected(){ return (this.isOpen() && this.connected); } public void connect(){ if(isOpen()){ if(!isConnected()){ this.connected = true; this.openDevice(); } } } public void disconnect() { if(isConnected()){ this.closeDevice(); this.connected = false; } } public List listPorts(){ if(isOpen()){ this.ports.clear(); this.ports.add(new MidiPortImpl(this, "AudioUnit graph midi playback" , "audiounit" )); return this.ports; } return Collections.EMPTY_LIST; } public void sendSystemReset() { if(isOpen()){ //not implemented } } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } public void sendControlChange(int channel, int controller, int value) { if(isOpen()){ super.controlChange(channel, controller, value); } } public void sendNoteOff(int channel, int key, int velocity) { if(isOpen()){ super.noteOff(channel, key, velocity); } } public void sendNoteOn(int channel, int key, int velocity) { if(isOpen()){ super.noteOn(channel, key, velocity); } } public void sendPitchBend(int channel, int value) { if(isOpen()){ super.pitchBend(channel, value); } } public void sendProgramChange(int channel, int value) { if(isOpen()){ super.programChange(channel, value); } } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortImpl.javatuxguitar-src-1.2/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPor0000644000175000017500000000150611273045343033431 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.audiounit; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiPortImpl implements MidiOutputPort{ private String key; private String name; private MidiReceiverImpl receiver; public MidiPortImpl(MidiReceiverImpl midiOut,String name,String key){ this.key = key; this.name = name; this.receiver = midiOut; } public void open(){ if(!this.receiver.isConnected()){ this.receiver.connect(); } } public void close(){ this.receiver.disconnect(); } public MidiReceiver getReceiver(){ this.open(); return this.receiver; } public void check(){ // Not implemented } public String getKey(){ return this.key; } public String getName(){ return this.name; } }tuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuner.java0000644000175000017500000002007011273045352032075 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.tuner; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.TargetDataLine; import craigl.spectrumanalyzer.FFT; /** * @author Nikola Kolarovic * * * Having great help analizyng project: * * GuitarTuner developed by OpenStudio * www.openstudio.fr * Copyright (2005) Arnault Pachot. * Project URL: http://sourceforge.net/projects/guitartuner * */ public class TGTuner extends Thread { protected TGTunerListener mainWindow = null; protected boolean canceled; protected boolean paused; protected TGTunerSettings settings; protected TargetDataLine dataLine; protected TGTunerQueue queue; //static final int LOG2_FFTSIZE = 14; //protected int FFT_SIZE; protected FFT fft; protected double[] ar; protected double[] ai; protected byte[] data; protected double rate; protected double maximumFrequency; protected double minimumFrequency; TGTuner(TGTunerListener mainWindow) { this.mainWindow = mainWindow; this.canceled = false; this.paused = false; this.queue = new TGTunerQueue(); try { this.settings = TGTunerSettings.loadTuxGuitarSettings(); this.dataLine = TGTunerSettings.getDataLine(this.settings); } catch (Exception ex) { this.mainWindow.fireException(ex); } this.setWantedRange(); } public void run() { // TODO: remove this benchmark int cycles=0; long timePassed=0; if (this.dataLine!=null) { this.openDataLine(); } while (!this.canceled) { if (this.dataLine!=null) if (!this.paused && this.dataLine.isOpen()) { synchronized(this) { // read from the input this.dataLine.read(this.data,0,this.settings.getBufferSize()); // preapare the arrays for FFT for (int i=0; i maxAmplitude) { maxAmplitude = power; frequency = curFreq; } } //System.out.println("Max Amplitude: "+maxAmplitude); //** buffer the frequency this.queue.add(frequency); // fire the frequency event on GUI this.mainWindow.fireFrequency(this.queue.getFreqApproximation()); // flush the dataline, so the new data is received this.dataLine.flush(); } // end of synchronized block } // sleep thread to get better app response try { Thread.sleep(this.settings.getWaitPeriod()); } catch (InterruptedException e) { // do nothing? } } this.closeDataLine(); System.out.println(" Average FFT time: "+(double)timePassed/(double)cycles); } protected void computeFFTParams() { if (this.settings!=null) { int number = this.settings.getFFTSize(), log=0; for (int i=0; i<20; i++) { // count log2 number/=2; if (number < 1) { this.fft = new FFT(log); // instantiate proper FFT alrgorithm break; } log++; } this.data = new byte[this.settings.getBufferSize()]; // data buffer this.ar = new double[this.settings.getFFTSize()]; // create real array for FFT this.ai = new double[this.settings.getFFTSize()]; // create imaginary array for FFT // TODO: rate is maybe not the best /2 ? this.rate = ((double) this.settings.getSampleRate()) / this.settings.getFFTSize(); } } public void setCanceled(boolean canceled) { this.canceled = canceled; } public void pause() { this.paused = true; } public void resumeFromPause() { this.paused = false; this.queue.clear(); } public void setSettings(TGTunerSettings settings) { this.closeDataLine(); synchronized(this) { this.settings = settings; try { this.dataLine = TGTunerSettings.getDataLine(settings); } catch (Exception ex) { this.mainWindow.fireException(ex); } } this.openDataLine(); } public TGTunerSettings getSettings() { return this.settings; } public void setWantedNote(int note) { // TODO: maybe too restrictive? But eliminates fifths harmonics... this.minimumFrequency = getNoteFrequency(note-3); this.maximumFrequency = getNoteFrequency(note+3); } public void setWantedRange() { // TODO: maybe to restrict only to 1 or 2 octaves!!!!!!!!! int[] tuning = this.mainWindow.getTuning(); this.maximumFrequency = getNoteFrequency(tuning[0]+3); // 3 frets higher that the thiniest string this.minimumFrequency = getNoteFrequency(tuning[tuning.length-1]-3); // 3 frets lower that the thickest string } public void openDataLine() { if (this.dataLine!=null) { synchronized(this) { this.computeFFTParams(); try { this.dataLine.open(); this.dataLine.start(); //this.dataLine.open(this.settings.getAudioFormat(), this.settings.getBufferSize()); } catch (LineUnavailableException e) { System.out.println("------- TGTuner: openDataLine() exception -------"); e.printStackTrace(); } } } } public void closeDataLine() { synchronized(this) { if (this.dataLine!=null) { this.dataLine.stop(); this.dataLine.close(); } } } public double getNoteFrequency(int midiNote) { // A = 110Hz = MidiNote(45) return 110 * Math.pow(2.0, (midiNote-45)/12.0 ); } public static void computeFFT(int sign, int n, double[] ar, double[] ai) { double scale = 2.0 / n; int i, j; for(i = j = 0; i < n; ++i) { if (j >= i) { double tempr = ar[j] * scale; double tempi = ai[j] * scale; ar[j] = ar[i] * scale; ai[j] = ai[i] * scale; ar[i] = tempr; ai[i] = tempi; } int m = n/2; while ((m >= 1) && (j >= m)) { j -= m; m /= 2; } j += m; } int mmax, istep; for(mmax = 1, istep = 2 * mmax; mmax < n; mmax = istep, istep = 2 * mmax) { double delta = sign * Math.PI / mmax; for(int m = 0; m < mmax; ++m) { double w = m * delta; double wr = Math.cos(w); double wi = Math.sin(w); for(i = m; i < n; i += istep) { j = i + mmax; double tr = wr * ar[j] - wi * ai[j]; double ti = wr * ai[j] + wi * ar[j]; ar[j] = ar[i] - tr; ai[j] = ai[i] - ti; ar[i] += tr; ai[i] += ti; } } mmax = istep; } } static class TGTunerException extends Exception { private static final long serialVersionUID = -1860514279319403845L; public TGTunerException(String string) { super(string); } } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettingsDialog.javatuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettingsDial0000644000175000017500000003011011273045352033464 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.tuner; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Scale; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; /** * @author Nikola Kolarovic * */ public class TGTunerSettingsDialog { private static final int SHELL_WIDTH = 350; protected TGTunerDialog tunerDialog = null; // protected Combo deviceCombo = null; protected Combo sampleRateCombo = null; protected Combo sampleSizeCombo = null; protected Combo bufferSizeCombo = null; protected Combo FFTSizeCombo = null; protected Scale noiseGate = null; protected Label noiseGateValue = null; protected Text settingsInfo = null; protected boolean updated; public TGTunerSettingsDialog(TGTunerDialog dialog) { this.tunerDialog = dialog; this.updated=false; } public void show() { final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE); dialog.setLayout(new GridLayout()); dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); dialog.setText(TuxGuitar.getProperty("tuner.settings")); dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("tuner.device-settings")); /* this.deviceCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); this.deviceCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1)); this.fillDeviceCombo(dialog); this.deviceCombo.addSelectionListener(new UpdatedListener()); */ Composite sampleComposite = this.createGroup(TuxGuitar.getProperty("tuner.sound-format"), group); new Label(sampleComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sample-rate")); this.sampleRateCombo = new Combo(sampleComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.sampleRateCombo.add("48000"); this.sampleRateCombo.add("44100"); this.sampleRateCombo.add("22050"); this.sampleRateCombo.add("11025"); this.sampleRateCombo.add("8000"); this.sampleRateCombo.addSelectionListener(new UpdatedListener()); new Label(sampleComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sample-size")); this.sampleSizeCombo = new Combo(sampleComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.sampleSizeCombo.add("16"); this.sampleSizeCombo.add("8"); this.sampleSizeCombo.addSelectionListener(new UpdatedListener()); Composite analyzeComposite = this.createGroup(TuxGuitar.getProperty("tuner.sampling-and-analyze"), group); // buffer size new Label(analyzeComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sampling-buffer-size")); this.bufferSizeCombo = new Combo(analyzeComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.bufferSizeCombo.add(new Integer(512).toString()); this.bufferSizeCombo.add(new Integer(1024).toString()); this.bufferSizeCombo.add(new Integer(2048).toString()); this.bufferSizeCombo.add(new Integer(4096).toString()); this.bufferSizeCombo.add(new Integer(8192).toString()); this.bufferSizeCombo.add(new Integer(16348).toString()); this.bufferSizeCombo.addSelectionListener(new UpdatedListener()); // FFT buffer size new Label(analyzeComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.fourier-buffer-size")); this.FFTSizeCombo = new Combo(analyzeComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.FFTSizeCombo.add(new Integer(1024).toString()); this.FFTSizeCombo.add(new Integer(2048).toString()); this.FFTSizeCombo.add(new Integer(4096).toString()); this.FFTSizeCombo.add(new Integer(8192).toString()); this.FFTSizeCombo.add(new Integer(16384).toString()); this.FFTSizeCombo.add(new Integer(32768).toString()); this.FFTSizeCombo.addSelectionListener(new UpdatedListener()); Composite noiseGateComposite = this.createGroup(TuxGuitar.getProperty("tuner.noise-gate"), group); this.noiseGate = new Scale(noiseGateComposite, SWT.BORDER); this.noiseGate.setMaximum(100); this.noiseGate.setIncrement(5); this.noiseGate.setPageIncrement(10); this.noiseGate.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGTunerSettingsDialog.this.noiseGateValue.setText( new Integer(TGTunerSettingsDialog.this.noiseGate.getSelection()).toString()+"%"); } }); this.noiseGate.addSelectionListener(new UpdatedListener()); this.noiseGate.setLayoutData(new GridData(SWT.None, SWT.NONE, true,false,1,1)); ((GridData)this.noiseGate.getLayoutData()).widthHint=270; ((GridData)this.noiseGate.getLayoutData()).grabExcessHorizontalSpace=true; this.noiseGateValue = new Label(noiseGateComposite,SWT.LEFT); this.noiseGateValue.setText(" "); Composite infoComposite = this.createGroup(TuxGuitar.getProperty("tuner.info"), group); this.settingsInfo = new Text(infoComposite, SWT.READ_ONLY | SWT.MULTI ); this.settingsInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1)); ((GridData)this.settingsInfo.getLayoutData()).heightHint=30; ((GridData)this.settingsInfo.getLayoutData()).grabExcessHorizontalSpace=true; ((GridData)this.settingsInfo.getLayoutData()).grabExcessVerticalSpace=true; ((GridData)this.settingsInfo.getLayoutData()).widthHint=300; //// buttons ok/cancel Composite btnComposite = new Composite(dialog,SWT.NONE); btnComposite.setLayout(new GridLayout(2,false)); btnComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final Button buttonOK = new Button(btnComposite, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(TGTunerDialog.getGridData(80,25)); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGTunerSettingsDialog.this.dispose(dialog,true); } }); final Button buttonExit = new Button(btnComposite, SWT.PUSH); buttonExit.setText(TuxGuitar.getProperty("close")); buttonExit.setLayoutData(TGTunerDialog.getGridData(80,25)); buttonExit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGTunerSettingsDialog.this.dispose(dialog,false); } }); this.loadSettings(this.tunerDialog.getTuner().getSettings(), dialog); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } protected void loadSettings(TGTunerSettings settings, Shell dialog) { // TODO: this is no good! vvvvvvvvv boolean loadedDefaults=false; if (settings==null) { settings = TGTunerSettings.getDefaults(); loadedDefaults=true; } // TODO: this is no good! ^^^^^^^^^ boolean found = false; int i = 0; try { while (!found) { if ( Float.parseFloat(this.sampleRateCombo.getItem(i)) == settings.getSampleRate() ) { this.sampleRateCombo.select(i); found=true; } i++; } i=0; found=false; while (!found) { if ( Integer.parseInt(this.sampleSizeCombo.getItem(i)) == settings.getSampleSize() ) { this.sampleSizeCombo.select(i); found=true; } i++; } i=0; found=false; while (!found) { if ( Integer.parseInt(this.FFTSizeCombo.getItem(i)) == settings.getFFTSize() ) { this.FFTSizeCombo.select(i); found=true; } i++; } this.bufferSizeCombo.setText(new Integer(settings.getBufferSize()).toString()); this.noiseGate.setSelection((int)Math.round(settings.getTreshold()*100)); this.noiseGateValue.setText(new Integer(this.noiseGate.getSelection()).toString()+"%"); /* i=0; found=false; if (settings.deviceName==null) found=true; while (!found) { if ( this.deviceCombo.getItem(i).equals(settings.getDeviceName()) ) { this.deviceCombo.select(i); found=true; } i++; } */ } catch (Exception ex) { if (!loadedDefaults) { MessageDialog.errorMessage(dialog,"Failed to load TuxGuitar settings.\nLoading defaults."); loadSettings(TGTunerSettings.getDefaults(),dialog); } } } /* *//** cycles through available SourceData audio devices *//* private void fillDeviceCombo(Shell dialog) { Mixer.Info[] aInfos = AudioSystem.getMixerInfo(); for (int i = 0; i < aInfos.length; i++) { Mixer mixer = AudioSystem.getMixer(aInfos[i]); Line.Info lineInfo = new Line.Info(SourceDataLine.class); if (mixer.isLineSupported(lineInfo)) { this.deviceCombo.add(aInfos[i].getName()); } } if (aInfos.length == 0) { MessageDialog.errorMessage(dialog,"No input sound devices available."); } } */ protected void dispose(Shell dialog, boolean saveWanted) { try { if (this.updated & saveWanted) { TGTunerSettings settings = new TGTunerSettings(); settings.setSampleRate(this.getSampleRate()); settings.setSampleSize(Integer.parseInt(this.sampleSizeCombo.getItem(this.sampleSizeCombo.getSelectionIndex()))); settings.setBufferSize(this.getBufferSize()); settings.setFFTSize(this.getFFTSize()); settings.setTreshold((float)this.noiseGate.getSelection()/100); settings.setWaitPeriod(100); // TODO: hard coded? this.checkBufferValues(settings); // check if they are divisable with buffer size /* if (this.deviceCombo.getSelectionIndex()<0) { MessageDialog.errorMessage(dialog,"You didn't set the input device."); return; } settings.setDeviceName(this.deviceCombo.getItem(this.deviceCombo.getSelectionIndex())); */ this.tunerDialog.getTuner().setSettings(settings); // TODO: save the settings in the system } this.tunerDialog.getTuner().resumeFromPause(); dialog.dispose(); } catch (Exception ex) { ex.printStackTrace(); MessageDialog.errorMessage(dialog,ex.getMessage()); } } private float getSampleRate() { return Float.parseFloat(this.sampleRateCombo.getItem(this.sampleRateCombo.getSelectionIndex())); } private int getFFTSize() { return Integer.parseInt(this.FFTSizeCombo.getItem(this.FFTSizeCombo.getSelectionIndex())); } private int getBufferSize() { return Integer.parseInt(this.bufferSizeCombo.getText()); } /** adapter class which sets update flag */ protected class UpdatedListener extends SelectionAdapter { public void widgetSelected(SelectionEvent arg0) { TGTunerSettingsDialog.this.updated=true; TGTunerSettingsDialog.this.settingsInfo.setText(" Minimal freq diff = "+this.getMinimalFrequencyDiff()+"Hz \n Time to fill the buffer = "+ this.getTimeToFillBuffer()+" sec"); } private double getMinimalFrequencyDiff() { return ((double) TGTunerSettingsDialog.this.getSampleRate()) / TGTunerSettingsDialog.this.getFFTSize(); } private double getTimeToFillBuffer() { return TGTunerSettingsDialog.this.getBufferSize() / TGTunerSettingsDialog.this.getSampleRate(); } } /** because there are many groups */ protected Composite createGroup(String groupCaption, Composite parent) { Group tempGroup = new Group(parent,SWT.SHADOW_ETCHED_IN); tempGroup.setLayout(new GridLayout()); tempGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); tempGroup.setText(groupCaption); Composite groupComposite = new Composite(tempGroup,SWT.NONE); groupComposite.setLayout(new GridLayout(2,false)); groupComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); return groupComposite; } protected void checkBufferValues(TGTunerSettings settings) throws Exception { if (settings.bufferSize % settings.sampleSize != 0 || settings.bufferSize > settings.fftSize ) throw new Exception("Invalid sampling buffer size"); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettings.javatuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettings.jav0000644000175000017500000001025611273045352033462 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.tuner; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.TargetDataLine; import org.herac.tuxguitar.gui.util.MessageDialog; /** * @author Nikola Kolarovic * */ public class TGTunerSettings { protected int sampleSize; protected float sampleRate; protected String deviceName; protected double treshold; protected int bufferSize; protected int fftSize; protected int waitPeriod; static final int DEFAULT_BUFFER_SIZE = 4096; // 2^12 static final int DEFAULT_FFT_SIZE = 16384; // 2^14 static final int CHANNELS_NUMBER = 1; /** default settings, if faild to load from properties */ public static TGTunerSettings getDefaults() { TGTunerSettings retValue = new TGTunerSettings(); retValue.setSampleRate(11025); retValue.setSampleSize(8); retValue.setBufferSize(DEFAULT_BUFFER_SIZE); retValue.setFFTSize(DEFAULT_FFT_SIZE); retValue.setTreshold(0.03); retValue.setWaitPeriod(100); return retValue; } /** gets dataline from format specification */ protected static TargetDataLine getDataLine(TGTunerSettings settings) throws TGTuner.TGTunerException { TargetDataLine targetDataLine = null; if (settings!=null) { // get info for initialization DataLine.Info info = settings.getDataLineInfo(); try { targetDataLine = (TargetDataLine)AudioSystem.getLine(info); } catch (Exception ex) { MessageDialog.errorMessage(ex); } } else throw new TGTuner.TGTunerException("Could not retrieve data from the input. Check your system device settings."); return targetDataLine; } /** Creates DataLine.Info based on settings */ protected DataLine.Info getDataLineInfo() { return new DataLine.Info(TargetDataLine.class, this.getAudioFormat(), this.getBufferSize()); } /** creates AudioFormat based on settings */ public AudioFormat getAudioFormat() { return new AudioFormat(this.getSampleRate(),this.getSampleSize(),1,true,false); // TODO: this is changed!!!! /* return new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, // PCM encoding this.getSampleRate(), // sample rate this.getSampleSize(), // sample size (8-bit, 16-bit) 1, // mono this.getFrameSize(), // 16-bit frame (was:4) this.getSampleRate(), // frame rate false // big-endian ); */ } /* private int getFrameSize() { return (this.sampleSize / 8) * CHANNELS_NUMBER; } */ public int getBufferSize() { return this.bufferSize; } public void setBufferSize(int bufferSize) { // TODO: adjust size in TGTuner also then this.bufferSize = bufferSize; } public int getFFTSize() { return this.fftSize; } public void setFFTSize(int size) { this.fftSize = size; } public float getSampleRate() { return this.sampleRate; } public double getTreshold() { return this.treshold; } public void setTreshold(double nt) { this.treshold = nt; } public void setSampleRate(float sampleRate) { this.sampleRate = sampleRate; } public int getSampleSize() { return this.sampleSize; } public void setSampleSize(int sampleSize) { this.sampleSize = sampleSize; } public int getWaitPeriod() { return this.waitPeriod; } public void setWaitPeriod(int time) { this.waitPeriod = time; } public static TGTunerSettings loadTuxGuitarSettings() throws TGTuner.TGTunerException { // TODO: load system properties and throw exception if failed to load return TGTunerSettings.getDefaults(); //return null; } /* MAYBE USEFUL CODE * * Port lineIn; FloatControl volCtrl; try { mixer = AudioSystem.getMixer(null); lineIn = (Port)mixer.getLine(Port.Info.LINE_IN); lineIn.open(); volCtrl = (FloatControl) lineIn.getControl( FloatControl.Type.VOLUME); // Assuming getControl call succeeds, // we now have our LINE_IN VOLUME control. } catch (Exception e) { System.out.println("Failed trying to find LINE_IN" + " VOLUME control: exception = " + e); } float newValue = 2.0F; if (volCtrl != null) // This changes the volume of the signal flowing though the line that "owns" the control. volCtrl.setValue(newValue); * */ } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerListener.javatuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerListener.jav0000644000175000017500000000037511273045352033450 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.tuner; public interface TGTunerListener { public void fireFrequency(double freq); public int[] getTuning(); public void fireException(Exception ex); public void fireCurrentString(int string); } tuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerQueue.java0000644000175000017500000000521011273045352033101 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.tuner; /** * Class that represents a frequency buffer that eliminates large frequency fluctuations. * * It is implemented as a queue list, where you put each frequency, and based on QUEUE_SIZE * last frequencies it determines what current dominant frequency should be. * * @author Nikola Kolarovic * */ public class TGTunerQueue { /** size of the queue */ int QUEUE_SIZE = 5; /** pointer to index of the newest element */ protected int head = 0; /** the frequency queue itself */ protected double[] queue; private double[] similars; // TODO: tweak the tollerances private final double upperTollerance = 1.05; // +5% private final double lowerTollerance = 0.95; // -5% public TGTunerQueue() { this.queue = new double[this.QUEUE_SIZE]; this.similars = new double[this.QUEUE_SIZE]; this.clear(); } /** add new frequency to a queue */ public void add(double newValue) { this.head = (++this.head) % this.QUEUE_SIZE; this.queue[this.head] = newValue; } /** * * @return approximated frequency */ public double getFreqApproximation() { for (int i=0; i (this.queue[j]*this.lowerTollerance) && this.queue[i] < (this.queue[j]*this.upperTollerance) ) this.similars[i]=this.similars[i]+2; // half frequency with tollerance if (this.queue[i]/2 > (this.queue[j]*this.lowerTollerance) && this.queue[i]/2 < (this.queue[j]*this.upperTollerance) ) this.similars[i]++; // double frequency with tollerance if (this.queue[i]*2 > (this.queue[j]*this.lowerTollerance) && this.queue[i]*2 < (this.queue[j]*this.upperTollerance) ) this.similars[i]++; } } // find one with max similars int maxIndex = 0; for (int i=1; i=this.similars[maxIndex]) maxIndex=i; /* int test=(this.head+1)%this.QUEUE_SIZE; System.out.print(Math.floor(queue[head])+ " "); while (test!=this.head) { System.out.print(Math.floor(queue[test])+ " "); test = (++test)%this.QUEUE_SIZE; } System.out.println(" = "+queue[maxIndex]%110+" **"); */ return this.queue[maxIndex]; //return this.queue[head]; } /** clears the queue data */ public void clear() { for (int i=0; i * */ public class TGTunerDialog implements TGTunerListener { private static final int SHELL_WIDTH = 400; protected TGTuner tuner = null; protected int[] tuning = null; protected Label currentFrequency = null; protected Shell dialog = null; protected TGTunerRoughWidget roughTuner = null; protected ArrayList allStringButtons = null; protected TGTunerFineWidget fineTuner = null; TGTunerDialog(int[] tuning) { this.tuning = tuning; } public void show() { this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE); this.dialog.setLayout(new GridLayout()); this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.dialog.setText(TuxGuitar.getProperty("tuner.instrument-tuner")); this.dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT); this.dialog.setSize(700, 400); Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("tuner.tuner")); Composite specialComposite = new Composite(group,SWT.NONE); specialComposite.setLayout(new GridLayout(2,false)); specialComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.allStringButtons = new ArrayList(this.tuning.length); this.fineTuner = new TGTunerFineWidget(specialComposite); Composite buttonsComposite = new Composite (specialComposite,SWT.NONE); buttonsComposite.setLayout(new GridLayout(1,false)); buttonsComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); for (int i=0; i * */ public class TGTunerPlugin extends org.herac.tuxguitar.gui.system.plugins.base.TGToolItemPlugin { protected void doAction() { List strings = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getStrings(); Iterator it = strings.iterator(); int[] tuning = new int[strings.size()]; int i=0; while (it.hasNext()) { TGString current = (TGString)it.next(); tuning[i] = current.getValue(); i++; } TGTunerDialog dialog = new TGTunerDialog(tuning); dialog.show(); } protected String getItemName() { return "Guitar Tuner"; } public String getName() { return "GuitarTuner"; } public String getAuthor() { return "Nikola Kolarovic"; } public String getDescription() { return "Visual tuner that analyses the most dominant frequency from your microphone" + " and displays it on the tuner scale."; } public String getVersion() { return "0.01b"; } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuningString.javatuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuningString.java0000644000175000017500000000226611273045352033442 0ustar julianjulian/** * */ package org.herac.tuxguitar.gui.tools.custom.tuner; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; /** * @author Nikola Kolarovic * */ public class TGTuningString { private int string; private Button stringButton = null; private TGTunerListener listener = null; TGTuningString(int string, Composite parent, TGTunerListener listener) { this.string = string; this.listener = listener; this.stringButton = new Button(parent,SWT.TOGGLE); this.stringButton.setText("--------- "+TGTunerRoughWidget.TONESSTRING[string%12]+(int)Math.floor(string/12)+" ---------"); } void addListener() { this.stringButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGTuningString.this.stringButton.setSelection(true); TGTuningString.this.listener.fireCurrentString(TGTuningString.this.string); } }); } public int getString() { return this.string; } public Button getStringButton() { return this.stringButton; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerFineWidget.javatuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerFineWidget.j0000644000175000017500000001036111273045352033355 0ustar julianjulian/** * */ package org.herac.tuxguitar.gui.tools.custom.tuner; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; /** * @author Nikola Kolarovic * */ public class TGTunerFineWidget extends Composite { private static final int MIN_HEIGHT = 60; private static final int MIN_WIDTH = 80; private final float bottomY = 10.0f; private Composite composite = null; protected String currentNoteString = null; protected int currentNoteValue = -1; protected double currentFrequency = 0.0f; protected Font letterFont = null; protected final float FINE_TUNING_RANGE = 1.5f; public TGTunerFineWidget(Composite parent) { super(parent, SWT.NONE); this.setEnabled(false); this.init(); } protected void init() { this.setLayout(new GridLayout(1,true)); this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.composite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED); this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.composite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); TGTunerFineWidget.this.paintWidget(painter); } }); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumHeight = MIN_HEIGHT; data.minimumWidth = MIN_WIDTH; data.grabExcessHorizontalSpace=true; data.grabExcessVerticalSpace=true; this.composite.setLayoutData(data); this.letterFont = new Font(this.getDisplay(), TuxGuitar.instance().getConfig().getFontDataConfigValue(TGConfigKeys.MATRIX_FONT).getName(), 14, SWT.BOLD ); } public void paintWidget(TGPainter painter) { Point compositeSize = this.composite.getSize(); // margins & stuff painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK)); painter.initPath(); painter.setLineWidth(2); float height = compositeSize.y-this.bottomY-25; painter.moveTo(compositeSize.x/2, compositeSize.y-this.bottomY); painter.lineTo(compositeSize.x/2, 25); painter.closePath(); painter.initPath(); height = Math.min(height, compositeSize.x/2); painter.moveTo(compositeSize.x/2-height, compositeSize.y-this.bottomY); painter.lineTo(compositeSize.x/2+height, compositeSize.y-this.bottomY); painter.closePath(); if (this.isEnabled()) { // tone name painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLUE)); painter.setFont(this.letterFont); painter.drawString(this.currentNoteString, compositeSize.x*12/15, 10); // pointer if (this.currentFrequency!=-1) { painter.setLineWidth(3); painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_RED)); painter.initPath(); painter.moveTo(compositeSize.x/2, compositeSize.y-this.bottomY); painter.lineTo((float)(compositeSize.x/2 + height*Math.cos(this.getAngleRad())),(float)( compositeSize.y-this.bottomY-height*Math.sin(this.getAngleRad()))); painter.closePath(); } } } public void setWantedTone(int tone) { this.setEnabled(true); this.currentNoteValue = tone; this.currentNoteString = TGTunerRoughWidget.TONESSTRING[tone%12]+(int)Math.floor(tone/12); this.redraw(); } public void setCurrentFrequency(double freq) { this.currentFrequency = freq; this.redraw(); } public void redraw(){ super.redraw(); this.composite.redraw(); } protected double getAngleRad() { return Math.PI*( 1 - (this.stickDistance(this.getTone(this.currentFrequency) - this.currentNoteValue) + this.FINE_TUNING_RANGE )/(2*this.FINE_TUNING_RANGE) ); } private float getTone(double frequency) { return (float)(45+12*(Math.log(frequency/110)/Math.log(2))); } private double stickDistance(double diff) { if (Math.abs(diff) > this.FINE_TUNING_RANGE) if (diff > 0) return this.FINE_TUNING_RANGE; else return -this.FINE_TUNING_RANGE; return diff; } }././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerRoughWidget.javatuxguitar-src-1.2/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerRoughWidget.0000644000175000017500000000704511273045352033413 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.tuner; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.SWT; import org.herac.tuxguitar.gui.editors.TGPainter; /** * @author Nikola Kolarovic * */ public class TGTunerRoughWidget extends Composite { private static final int MIN_HEIGHT = 25; protected Composite composite = null; protected float currentFrequency = 0; /** constants for drawing */ private final int startA = 20; private final int endAb = 20; private final int boundaryHeight = 16; private final int markerHeight = 12; private final int markerWidth = 4; static String[] TONESSTRING = {"C","C#","D","D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"}; public TGTunerRoughWidget(Composite parent) { super(parent, SWT.NONE); this.init(); } public void init() { this.setLayout(new GridLayout(1,true)); this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); ((GridData)this.getLayoutData()).widthHint = 600; this.composite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED); this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE)); this.composite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { TGPainter painter = new TGPainter(e.gc); TGTunerRoughWidget.this.paintWidget(painter); } }); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumHeight = MIN_HEIGHT; data.grabExcessHorizontalSpace = true; this.composite.setLayoutData(data); } private void paintWidget(TGPainter painter) { Point compositeSize = this.composite.getSize(); // lines and tones painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK)); painter.initPath(); painter.moveTo(this.startA, compositeSize.y/2); painter.lineTo(compositeSize.x-this.endAb, compositeSize.y/2); painter.closePath(); int increment = (int)Math.round((compositeSize.x-this.startA-this.endAb) / 12.0); int currentTone = 0; for (int i=this.startA; i0) { painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLUE)); painter.initPath(); int markerPos = this.markerWidth/2 + this.startA+(int)Math.round(((compositeSize.x-this.startA-this.endAb) / 240.0) * (this.getTone(this.currentFrequency))); painter.moveTo(markerPos, compositeSize.y/2-this.markerHeight/2); painter.setLineWidth(this.markerWidth); painter.lineTo(markerPos, compositeSize.y/2+this.markerHeight/2); painter.closePath(); } } public void setCurrentFrequency(double currentFrequency) { this.currentFrequency = (float)currentFrequency; this.redraw(); } public void redraw(){ super.redraw(); this.composite.redraw(); } /** formula which gets fine tone position (on scale 0-240) * in fact, it's inverse formula of inverse of TGTuner::getNoteFrequency() */ protected int getTone(float frequency) { float midiTone = (float)(45+12*(Math.log(frequency/110)/Math.log(2))); return Math.round( 20 * (midiTone % 12)); } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortProviderPlugin.javatuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortPro0000644000175000017500000000122411273045342033451 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.alsa; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin{ protected MidiOutputPortProvider getProvider() { return new MidiOutputPortProviderImpl(); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "ALSA output plugin"; } public String getName() { return "ALSA output plugin"; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiReceiverImpl.0000644000175000017500000000332011273045342033266 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.alsa; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiReceiverImpl implements MidiReceiver{ private boolean connected; private MidiOutputPortImpl midiPort; private MidiSystem midiSystem; public MidiReceiverImpl(MidiOutputPortImpl midiPort, MidiSystem midiSystem){ this.midiPort = midiPort; this.midiSystem = midiSystem; this.connected = false; } public boolean isConnected(){ return this.connected; } public void connect(){ if(!isConnected()){ this.midiSystem.openPort(this.midiPort.getClient(),this.midiPort.getPort()); this.connected = true; } } public void disconnect() { if(isConnected()){ this.midiSystem.closePort(); this.connected = false; } } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ this.sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } public void sendControlChange(int channel, int controller, int value) { if(isConnected()){ this.midiSystem.controlChange(channel, controller, value); } } public void sendNoteOff(int channel, int key, int velocity) { if(isConnected()){ this.midiSystem.noteOff(channel, key, velocity); } } public void sendNoteOn(int channel, int key, int velocity) { if(isConnected()){ this.midiSystem.noteOn(channel, key, velocity); } } public void sendPitchBend(int channel, int value) { if(isConnected()){ this.midiSystem.pitchBend(channel, value); } } public void sendProgramChange(int channel, int value) { if(isConnected()){ this.midiSystem.programChange(channel, value); } } public void sendSystemReset() { //not implemented } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortProviderImpl.javatuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortPro0000644000175000017500000000123411273045342033452 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.alsa; import java.util.List; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderImpl implements MidiOutputPortProvider{ private MidiSystem midiSystem; public MidiOutputPortProviderImpl(){ super(); } public List listPorts() { if(this.midiSystem == null){ this.midiSystem = new MidiSystem(); } if(!this.midiSystem.isOpen()){ this.midiSystem.open(); } return this.midiSystem.findPorts(); } public void closeAll(){ if(this.midiSystem != null){ this.midiSystem.close(); this.midiSystem.finalize(); this.midiSystem = null; } } } tuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiSystem.java0000644000175000017500000000556611273045342033044 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.alsa; import java.util.ArrayList; import java.util.List; public class MidiSystem{ private static final String JNI_LIBRARY_NAME = new String("tuxguitar-alsa-jni"); static{ System.loadLibrary(JNI_LIBRARY_NAME); } private long instance; private boolean open; private List ports; public MidiSystem() { this.instance = malloc(); this.open = false; this.ports = new ArrayList(); } public boolean isOpen(){ return (this.instance != 0 && this.open); } public void finalize(){ if(this.instance != 0){ this.free(this.instance); this.instance = 0; } } public void open(){ if(this.instance != 0 && !this.open){ this.open(this.instance); this.open = true; } } public void close(){ if(this.instance != 0 && this.open){ this.close(this.instance); this.open = false; } } public List findPorts(){ this.ports.clear(); if(this.instance != 0 && this.open){ this.findPorts(this.instance); } return this.ports; } public void openPort(int client,int port){ if(this.instance != 0 && this.open){ this.openPort(this.instance, client, port); } } public void closePort(){ if(this.instance != 0 && this.open){ this.closePort(this.instance); } } public void noteOn(int channel,int note,int velocity){ if(this.instance != 0 && this.open){ this.noteOn(this.instance, channel, note, velocity); } } public void noteOff(int channel,int note,int velocity){ if(this.instance != 0 && this.open){ this.noteOff(this.instance, channel, note, velocity); } } public void controlChange(int channel,int control,int value){ if(this.instance != 0 && this.open){ this.controlChange(this.instance, channel, control, value); } } public void programChange(int channel,int program){ if(this.instance != 0 && this.open){ this.programChange(this.instance, channel, program); } } public void pitchBend(int channel,int value){ if(this.instance != 0 && this.open){ this.pitchBend(this.instance, channel, value); } } protected void addPort(String name,int client,int port){ this.ports.add(new MidiOutputPortImpl(this,name,client,port)); } private native long malloc(); private native void free(long instance); private native void open(long instance); private native void close(long instance); private native void findPorts(long instance); private native void openPort(long instance,int client,int port); private native void closePort(long instance); private native void noteOn(long instance,int channel,int note,int velocity); private native void noteOff(long instance,int channel,int note,int velocity); private native void controlChange(long instance,int channel,int control,int value); private native void programChange(long instance,int channel,int program); private native void pitchBend(long instance,int channel,int value); } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortImpl.javatuxguitar-src-1.2/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortImp0000644000175000017500000000215611273045342033443 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.alsa; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiOutputPortImpl implements MidiOutputPort{ private int port; private int client; private String clientName; private MidiReceiverImpl receiver; public MidiOutputPortImpl(MidiSystem midiSystem,String clientName,int client,int port){ this.port = port; this.client = client; this.clientName = clientName; this.receiver = new MidiReceiverImpl(this,midiSystem); } public void open(){ if(!this.receiver.isConnected()){ this.receiver.connect(); } } public void close(){ this.receiver.disconnect(); } public MidiReceiver getReceiver(){ this.open(); return this.receiver; } public void check(){ // Not implemented } public int getPort() { return this.port; } public int getClient() { return this.client; } public String getKey(){ return ("tuxguitar-alsa_" + this.client + "-" + this.port); } public String getName(){ return (this.clientName +" [" + this.client + ":" + this.port + "]"); } }././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementImpl.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserEleme0000644000175000017500000000160011273045343033373 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import java.io.InputStream; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserElementImpl extends TGBrowserElement{ private TGBrowserImpl browser; private String path; private String info; public TGBrowserElementImpl(TGBrowserImpl browser,String name,String info,String path) { super(name); this.browser = browser; this.info = info; this.path = path; } public boolean isFolder(){ return (this.info != null && this.info.length() > 0 && this.info.charAt(0) == 'd'); } public boolean isSymLink() { return (this.info != null && this.info.length() > 0 && this.info.charAt(0) == 'l'); } public InputStream getInputStream()throws TGBrowserException { return this.browser.getInputStream(this.path,this); } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserImpl.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserImpl.0000644000175000017500000001156411273045343033335 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.net.Authenticator; import java.net.PasswordAuthentication; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Properties; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserImpl extends TGBrowser{ private TGBrowserDataImpl data; private String root; private String path; private TGBrowserFTPClient client; public TGBrowserImpl(TGBrowserDataImpl data){ this.data = data; } private String getRoot(){ if(this.root == null){ this.root = "/"; if(this.data.getPath() != null && this.data.getPath().length() > 0){ this.root = this.data.getPath(); if(this.root.indexOf("/") != 0){ this.root = ("/" + this.root); } } } return this.root; } public void open() throws TGBrowserException{ try { checkForProxy(); this.client = new TGBrowserFTPClient(); this.client.open(this.data.getHost(), TGBrowserFTPClient.DEFAULT_PORT); this.client.login(this.data.getUsername(),this.data.getPassword()); this.cdRoot(); } catch (Throwable throwable) { throw new TGBrowserException(throwable); } } public void close() throws TGBrowserException{ try { closeProxy(); this.client.close(); } catch (Throwable throwable) { throw new TGBrowserException(throwable); } } public void cdElement(TGBrowserElement element) throws TGBrowserException { try { boolean isCDSuccess = this.client.cd(element.getName()); if(!isCDSuccess) throw new TGBrowserException("could not cd to "+element.getName()); this.path = this.client.pwd(); } catch (Throwable throwable) { throw new TGBrowserException(throwable); } } public void cdRoot() throws TGBrowserException { try { this.client.cd(getRoot()); this.path = this.client.pwd(); } catch (Throwable throwable) { throw new TGBrowserException(throwable); } } public void cdUp() throws TGBrowserException { try { this.client.cdUp(); this.path = this.client.pwd(); } catch (Throwable throwable) { throw new TGBrowserException(throwable); } } public List listElements() throws TGBrowserException { List elements = new ArrayList(); try { this.client.binary(); String[] names = this.client.listNames(); String[] infos = this.client.listDetails(); if(names.length > 0 && infos.length > 0){ for(int i = 0;i < names.length;i++){ String name = names[i].trim(); if(name.indexOf(this.path) == 0 && name.length() > this.path.length()){ name = name.substring(this.path.length()); } while(name.indexOf("/") == 0){ name = name.substring(1); } if( name.length() > 0 ){ for(int j = 0;j < infos.length;j++){ String info = infos[j].trim(); if(info.indexOf(name) > 0){ elements.add(new TGBrowserElementImpl(this,name,info,this.path)); break; } } } } } if( !elements.isEmpty() ){ Collections.sort(elements,new TGBrowserElementComparator()); } } catch (Throwable throwable) { throw new TGBrowserException(throwable); } return elements; } public InputStream getInputStream(String path,TGBrowserElement element)throws TGBrowserException { try { this.client.cd(path); this.client.binary(); byte[] bytes = this.client.get(element.getName()); return new ByteArrayInputStream( bytes ); } catch (Throwable throwable) { throw new TGBrowserException(throwable); } } private void checkForProxy() { if (this.data.getProxyHost() != null && this.data.getProxyPort() > 0) { System.setProperty("socksProxyHost", this.data.getProxyHost()); System.setProperty("socksProxyPort", String.valueOf(this.data.getProxyPort())); if (this.data.getProxyUser() != null && this.data.getProxyUser().trim().length() > 0) { System.setProperty("java.net.socks.username", this.data.getProxyUser()); System.setProperty("java.net.socks.password", this.data.getProxyPwd()); Authenticator.setDefault(new ProxyAuthenticator(this.data.getProxyUser(), this.data.getProxyPwd())); } } else { closeProxy(); } } private void closeProxy() { Properties sysProperties = System.getProperties(); sysProperties.remove("socksProxyHost"); sysProperties.remove("socksProxyPort"); sysProperties.remove("java.net.socks.username"); sysProperties.remove("java.net.socks.password"); } private final class ProxyAuthenticator extends Authenticator { private PasswordAuthentication auth; protected ProxyAuthenticator(String user, String pass) { this.auth = new PasswordAuthentication(user, pass.toCharArray()); } protected PasswordAuthentication getPasswordAuthentication() { return this.auth; } } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFactoryImpl.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFacto0000644000175000017500000002034711273045343033411 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import java.io.PrintWriter; import java.io.StringWriter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; public class TGBrowserFactoryImpl implements TGBrowserFactory{ public TGBrowserFactoryImpl() { super(); } public String getType(){ return "ftp"; } public String getName(){ return "FTP"; } public TGBrowser newTGBrowser(TGBrowserData data) { if(data instanceof TGBrowserDataImpl){ return new TGBrowserImpl((TGBrowserDataImpl)data); } return null; } public TGBrowserData parseData(String string) { return TGBrowserDataImpl.fromString(string); } public TGBrowserData dataDialog(Shell parent) { return new TGBrowserDataDialog().show(parent); } } class TGBrowserDataDialog{ protected TGBrowserDataImpl data; public TGBrowserDataImpl show(final Shell parent){ final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("FTP Location")); //-------------LIBRARY DATA----------------------------------------------- Composite composite = new Composite(dialog, SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); GridData textData = new GridData(SWT.FILL,SWT.FILL,true,true); textData.minimumWidth = 300; //name Label nameLabel = new Label(composite, SWT.NULL); nameLabel.setText(TuxGuitar.getProperty("Name")); final Text nameText = new Text(composite,SWT.BORDER); nameText.setLayoutData(textData); //host Label hostLabel = new Label(composite, SWT.NULL); hostLabel.setText(TuxGuitar.getProperty("Host")); final Text hostText = new Text(composite,SWT.BORDER); hostText.setLayoutData(textData); //path Label pathLabel = new Label(composite, SWT.NULL); pathLabel.setText(TuxGuitar.getProperty("Path")); final Text pathText = new Text(composite,SWT.BORDER); pathText.setLayoutData(textData); //user Label userLabel = new Label(composite, SWT.NULL); userLabel.setText(TuxGuitar.getProperty("Login name")); final Text userText = new Text(composite,SWT.BORDER); userText.setLayoutData(textData); //password Label passwordLabel = new Label(composite, SWT.NULL); passwordLabel.setText(TuxGuitar.getProperty("Password")); final Text passwordText = new Text(composite,SWT.BORDER | SWT.PASSWORD); passwordText.setLayoutData(textData); // Proxy final Button hasProxy = new Button(composite,SWT.CHECK); hasProxy.setText("Connect via Proxy Server"); Label dummyLabel = new Label(composite, SWT.NULL); dummyLabel.setLayoutData(textData); //proxy host final Label proxyHostLabel = new Label(composite, SWT.NULL); proxyHostLabel.setText(TuxGuitar.getProperty("Proxy Server Host")); final Text proxyHostText = new Text(composite,SWT.BORDER); proxyHostText.setLayoutData(textData); //proxy port final Label proxyPortLabel = new Label(composite, SWT.NULL); proxyPortLabel.setText(TuxGuitar.getProperty("Proxy Server Port")); final Text proxyPortText = new Text(composite,SWT.BORDER); proxyPortText.setText("1080"); proxyPortText.setLayoutData(textData); //proxy user final Label proxyUserLabel = new Label(composite, SWT.NULL); proxyUserLabel.setText(TuxGuitar.getProperty("Proxy Server User")); final Text proxyUserText = new Text(composite,SWT.BORDER); proxyUserText.setLayoutData(textData); //proxy password final Label proxyPwdLabel = new Label(composite, SWT.NULL); proxyPwdLabel.setText(TuxGuitar.getProperty("Proxy Server Password")); final Text proxyPwdText = new Text(composite,SWT.BORDER | SWT.PASSWORD); proxyPwdText.setLayoutData(textData); proxyHostText.setEnabled(false); proxyPortText.setEnabled(false); proxyUserText.setEnabled(false); proxyPwdText.setEnabled(false); hasProxy.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { proxyHostText.setEnabled(hasProxy.getSelection()); proxyPortText.setEnabled(hasProxy.getSelection()); proxyUserText.setEnabled(hasProxy.getSelection()); proxyPwdText.setEnabled(hasProxy.getSelection()); } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOk = new Button(buttons, SWT.PUSH); buttonOk.setText(TuxGuitar.getProperty("ok")); buttonOk.setLayoutData(data); buttonOk.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { String name = nameText.getText(); String host = hostText.getText(); String path = pathText.getText(); String user = userText.getText(); String password = passwordText.getText(); String proxyHost = proxyHostText.getText(); String proxyPortStr = proxyPortText.getText(); String proxyUser = proxyUserText.getText(); String proxyPwd = proxyPwdText.getText(); List errors = validate(name, host, proxyHost, proxyPortStr, hasProxy.getSelection()); if( !errors.isEmpty() ){ StringWriter buffer = new StringWriter(); PrintWriter writer = new PrintWriter( buffer ); Iterator it = errors.iterator(); while( it.hasNext() ){ writer.println( "*" + (String)it.next() ); } MessageDialog.errorMessage(parent, buffer.getBuffer().toString() ); }else{ int proxyPort = Integer.parseInt( proxyPortStr ); TGBrowserDataDialog.this.data = new TGBrowserDataImpl(name, host, path, user, password, proxyUser, proxyPwd, proxyHost, proxyPort); dialog.dispose(); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setLayoutData(data); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOk ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.data; } protected List validate(String name, String host, String pHost, String pPort, boolean pEnabled){ List errors = new ArrayList(); // Check the Name if (name == null || name.trim().length() == 0) { errors.add("Please enter the Name"); }else{ Iterator it = TGBrowserManager.instance().getCollections(); while(it.hasNext()){ TGBrowserCollection collection = (TGBrowserCollection)it.next(); if(name.equals(collection.getData().getTitle())){ errors.add("A collection named \"" + name + "\" already exists"); break; } } } if (host == null || host.trim().length() == 0) { errors.add("Please enter the Host"); } if( pEnabled ){ if(pHost == null || pHost.trim().length() == 0){ errors.add("Please enter Proxy Host"); } if(pPort == null || pPort.trim().length() == 0){ errors.add("Please enter Proxy Port"); }else if(!isNumber(pPort)){ errors.add("Proxy Port should be a valid number"); } } return errors; } private boolean isNumber( String s ){ try { Integer.parseInt(s); } catch (Throwable e) { return false; } return true; } }././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserPluginImpl.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserPlugi0000644000175000017500000000115411273045343033430 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import org.herac.tuxguitar.gui.system.plugins.base.TGBrowserPlugin; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public class TGBrowserPluginImpl extends TGBrowserPlugin { protected TGBrowserFactory getFactory() { return new TGBrowserFactoryImpl(); } public String getName() { return "FTP Plugin for TGBrowser"; } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "FTP Plugin for TGBrowser"; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementComparator.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserEleme0000644000175000017500000000174511273045343033405 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import java.util.Comparator; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserElementComparator implements Comparator { private static final int RESULT_LESS = -1; private static final int RESULT_EQUAL = 0; private static final int RESULT_GREATER = 1; private static final int DIRECTION = 1; private static final int DIRECTION_FOLDER = 1; public int compare(Object o1, Object o2) { if(o1 instanceof TGBrowserElement && o2 instanceof TGBrowserElement){ TGBrowserElement element1 = (TGBrowserElement)o1; TGBrowserElement element2 = (TGBrowserElement)o2; if(element1.isFolder() && !element2.isFolder()){ return (DIRECTION_FOLDER * RESULT_LESS); } if(element2.isFolder() && !element1.isFolder()){ return (DIRECTION_FOLDER * RESULT_GREATER); } return (DIRECTION * (element1.getName().compareTo(element2.getName()))); } return RESULT_EQUAL; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserDataImpl.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserDataI0000644000175000017500000000573011273045343033336 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.tools.browser.ftp.utils.Base64Decoder; import org.herac.tuxguitar.gui.tools.browser.ftp.utils.Base64Encoder; public class TGBrowserDataImpl implements TGBrowserData{ private static final String STRING_SEPARATOR = ";"; private String name; private String host; private String path; private String username; private String password; private String proxyUser; private String proxyPwd; private String proxyHost; private int proxyPort; public TGBrowserDataImpl(String name, String host, String path, String username, String password, String proxyUser, String proxyPwd, String proxyHost, int proxyPort) { this.name = name; this.host = host; this.path = path; this.username = username; this.password = password; this.proxyUser = proxyUser; this.proxyPwd = proxyPwd; this.proxyHost = proxyHost; this.proxyPort = proxyPort; } public String getName() { return this.name; } public String getHost() { return this.host; } public String getPath() { return this.path; } public String getPassword() { return ((this.username != null && this.username.length() > 0)?this.password:TGBrowserFTPClient.DEFAULT_USER_PASSWORD); } public String getUsername() { return ((this.username != null && this.username.length() > 0)?this.username:TGBrowserFTPClient.DEFAULT_USER_NAME); } public String getTitle(){ return getName(); } public String getProxyHost() { return this.proxyHost; } public int getProxyPort() { return this.proxyPort; } public String getProxyUser() { return this.proxyUser; } public String getProxyPwd() { return this.proxyPwd; } public String toString(){ String username = new String( Base64Encoder.encode( getUsername().getBytes() ) ); String password = new String( Base64Encoder.encode( getPassword().getBytes() ) ); String proxyUser = new String( Base64Encoder.encode( getProxyUser().getBytes() )); String proxyPwd = new String( Base64Encoder.encode( getProxyPwd().getBytes() )); return getName() + STRING_SEPARATOR + getHost() + STRING_SEPARATOR + getPath() + STRING_SEPARATOR + username + STRING_SEPARATOR + password + STRING_SEPARATOR + proxyUser + STRING_SEPARATOR + proxyPwd + STRING_SEPARATOR + getProxyHost() + STRING_SEPARATOR + getProxyPort(); } public static TGBrowserData fromString(String string) { String[] data = string.split(STRING_SEPARATOR); if(data.length == 9){ String username = new String( Base64Decoder.decode( data[3].getBytes() ) ); String password = new String( Base64Decoder.decode( data[4].getBytes() ) ); String proxyUser = new String( Base64Decoder.decode( data[5].getBytes() )); String proxyPwd = new String( Base64Decoder.decode( data[6].getBytes() ) ); return new TGBrowserDataImpl(data[0], data[1], data[2], username, password, proxyUser, proxyPwd, data[7], Integer.parseInt(data[8])); } return null; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFTPClient.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFTPCl0000644000175000017500000001536211273045343033266 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class TGBrowserFTPClient { public static final int DEFAULT_PORT = 21; public static final String DEFAULT_USER_NAME = "anonymous"; public static final String DEFAULT_USER_PASSWORD = "anonymous"; private static final String REQUEST_USER_NAME = "USER"; private static final String REQUEST_USER_PASSWORD = "PASS"; private static final String REQUEST_EXIT = "QUIT"; private static final String REQUEST_TYPE_ASCII = "TYPE A"; private static final String REQUEST_TYPE_BINARY = "TYPE I"; private static final String REQUEST_PWD = "PWD"; private static final String REQUEST_CD = "CWD"; private static final String REQUEST_CDUP = "CDUP"; private static final String REQUEST_PASSIVE = "PASV"; private static final String REQUEST_GET = "RETR"; private static final String REQUEST_LIST_FILES = "LIST"; private static final String REQUEST_LIST_NAMES = "NLST"; private static final int RESPONSE_CODE_CONNECT = 220; private static final int RESPONSE_CODE_USER_NAME = 331; private static final int RESPONSE_CODE_USER_PASSWORD = 230; private static final int RESPONSE_CODE_PWD = 257; private static final int RESPONSE_CODE_CD = 250; private static final int RESPONSE_CODE_TYPE = 200; private static final int RESPONSE_CODE_PASV = 227; private static final int RESPONSE_CODE_PASV_CONNECTION = 150; private boolean open; private Socket socket = null; private BufferedWriter request = null; private BufferedReader response = null; public boolean isOpen() { return this.open; } public void setOpen(boolean open) { this.open = open; } public synchronized void open(String host, int port) throws IOException { this.socket = new Socket(host, port); this.response = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); this.request = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())); String response = getResponse(RESPONSE_CODE_CONNECT); if (!isExpectedResponse(response, RESPONSE_CODE_CONNECT)) { throw new IOException(response); } this.setOpen( true ); } public synchronized void close() throws IOException { if( this.isOpen() ){ this.setRequest(REQUEST_EXIT); this.socket.close(); this.socket = null; } this.setOpen( false ); } public synchronized void login(String user, String password) throws IOException { String error = null; this.setRequest(REQUEST_USER_NAME + " " + user); if ((error = getResponseError(RESPONSE_CODE_USER_NAME)) != null ){ throw new IOException(error); } this.setRequest(REQUEST_USER_PASSWORD + " " + password); if ((error = getResponseError(RESPONSE_CODE_USER_PASSWORD)) != null ){ throw new IOException(error); } } public synchronized String pwd() throws IOException { this.setRequest(REQUEST_PWD); String response = getResponse(RESPONSE_CODE_PWD); if (isExpectedResponse(response, RESPONSE_CODE_PWD)) { int i1 = response.indexOf('\"'); int i2 = response.indexOf('\"', i1 + 1); if (i2 > i1) { return response.substring(i1 + 1, i2); } } return null; } public synchronized boolean cd(String dir) throws IOException { this.setRequest(REQUEST_CD + " " + dir); return (getResponseError(RESPONSE_CODE_CD) == null); } public synchronized boolean cdUp() throws IOException { this.setRequest(REQUEST_CDUP); return (getResponseError(RESPONSE_CODE_CD) == null); } public synchronized boolean binary() throws IOException { this.setRequest(REQUEST_TYPE_BINARY); return (getResponseError(RESPONSE_CODE_TYPE) == null); } public synchronized boolean ascii() throws IOException { this.setRequest(REQUEST_TYPE_ASCII); return (getResponseError(RESPONSE_CODE_TYPE) == null); } public synchronized byte[] get(String file) throws IOException{ return sendPasvCMD(REQUEST_GET + " " + file); } public synchronized String[] listDetails() throws IOException{ return new String( sendPasvCMD(REQUEST_LIST_FILES) ).split("\r\n"); } public synchronized String[] listNames() throws IOException{ return new String( sendPasvCMD(REQUEST_LIST_NAMES) ).split("\r\n"); } private synchronized byte[] sendPasvCMD(String cmd) throws IOException{ byte[] buffer = new byte[0]; setRequest(REQUEST_PASSIVE); String response = getResponse(RESPONSE_CODE_PASV); if(isExpectedResponse(response, RESPONSE_CODE_PASV)){ setRequest(cmd); int addressIndex1 = response.indexOf("(") + 1; int addressIndex2 = response.indexOf(")"); if( addressIndex1 > 0 && addressIndex2 > addressIndex1 ){ String[] address = response.substring( addressIndex1, addressIndex2 ).split(","); if(address.length == 6){ int a1 = Integer.parseInt(address[0]); int a2 = Integer.parseInt(address[1]); int a3 = Integer.parseInt(address[2]); int a4 = Integer.parseInt(address[3]); int p1 = Integer.parseInt(address[4]); int p2 = Integer.parseInt(address[5]); Socket socket = new Socket((a1 + "." + a2 + "." + a3 + "." + a4), ((p1 * 256) + p2)); response = getResponse(RESPONSE_CODE_PASV_CONNECTION); if(isExpectedResponse(response, RESPONSE_CODE_PASV_CONNECTION)){ buffer = getByteBuffer(socket.getInputStream()); } socket.close(); } } if(isExpectedResponse(response, RESPONSE_CODE_PASV_CONNECTION)){ response = getResponse(); } } return buffer; } private boolean isExpectedResponse(String response, int expectedCode){ return ( response != null && response.indexOf(expectedCode + " ") == 0 ); } private String getResponseError(int expectedCode) throws IOException{ String response = getResponse(expectedCode); return (isExpectedResponse(response, expectedCode) ? null : response); } private String getResponse(int expectedCode) throws IOException{ String response = this.getResponse(); // Some FTP Servers appends comments like "[CODE_NUMBER]-". // This while tries to skip all comments before response. while( response != null && response.indexOf(expectedCode + "-") == 0){ response = this.getResponse(); } return response; } private String getResponse() throws IOException { return this.response.readLine(); } private void setRequest(String line) throws IOException { this.request.write(line + "\r\n"); this.request.flush(); } private static byte[] getByteBuffer(InputStream in) throws IOException{ ByteArrayOutputStream out = new ByteArrayOutputStream(); int read = 0; while((read = in.read()) != -1){ out.write(read); } byte[] bytes = out.toByteArray(); out.close(); out.flush(); return bytes; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/JNILibraryLoader.javatuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/JNILibraryLoade0000644000175000017500000000251011273045361033350 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.winmm; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.herac.tuxguitar.util.TGClassLoader; public class JNILibraryLoader { private static final String JNI_EXTENSION = ".jnilib"; private static final String JNI_TMP_PATH = (System.getProperty( "java.io.tmpdir" ) + File.separator); public static void loadLibrary(String libname){ if(!JNILibraryLoader.loadFromClassPath(libname + JNI_EXTENSION)){ System.loadLibrary(libname); } } private static boolean loadFromClassPath(String filename){ File file = new File(JNI_TMP_PATH + filename); try{ if(!file.exists()){ InputStream inputStream = TGClassLoader.instance().getClassLoader().getResourceAsStream(filename); if (inputStream != null) { OutputStream outputStream = new FileOutputStream(file); int read; byte [] buffer = new byte [4096]; while ((read = inputStream.read (buffer)) != -1) { outputStream.write(buffer, 0, read); } outputStream.close(); inputStream.close(); } } if(file.exists()){ System.load(file.getAbsolutePath()); return true; } }catch(Throwable throwable){ return false; }finally{ if(file.exists()){ file.delete(); } } return false; } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortProviderPlugin.javatuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortP0000644000175000017500000000142011273045361033525 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.winmm; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin{ private MidiOutputPortProviderImpl portReader; protected MidiOutputPortProvider getProvider() { if(this.portReader == null){ this.portReader = new MidiOutputPortProviderImpl(); } return this.portReader; } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "WinMM output plugin"; } public String getName() { return "WinMM output plugin"; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiReceiverImp0000644000175000017500000000325011273045361033455 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.winmm; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiReceiverImpl implements MidiReceiver{ private boolean connected; private MidiOutputPortImpl midiPort; private MidiSystem midiSystem; public MidiReceiverImpl(MidiOutputPortImpl midiPort, MidiSystem midiSystem){ this.midiPort = midiPort; this.midiSystem = midiSystem; this.connected = false; } public boolean isConnected(){ return this.connected; } public void connect(){ if(!isConnected()){ this.midiSystem.openPort(this.midiPort); this.connected = true; } } public void disconnect() { if(isConnected()){ this.midiSystem.closePort(); this.connected = false; } } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } public void sendControlChange(int channel, int controller, int value) { if(isConnected()){ this.midiSystem.controlChange(channel, controller, value); } } public void sendNoteOff(int channel, int key, int velocity) { if(isConnected()){ this.midiSystem.noteOff(channel, key, velocity); } } public void sendNoteOn(int channel, int key, int velocity) { if(isConnected()){ this.midiSystem.noteOn(channel, key, velocity); } } public void sendPitchBend(int channel, int value) { if(isConnected()){ this.midiSystem.pitchBend(channel, value); } } public void sendProgramChange(int channel, int value) { if(isConnected()){ this.midiSystem.programChange(channel, value); } } public void sendSystemReset() { //not implemented } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortProviderImpl.javatuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortP0000644000175000017500000000110111273045361033521 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.winmm; import java.util.List; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderImpl implements MidiOutputPortProvider{ private MidiSystem midiSystem; public MidiOutputPortProviderImpl(){ super(); } public List listPorts() { if(this.midiSystem == null){ this.midiSystem = new MidiSystem(); } return this.midiSystem.findPorts(); } public void closeAll(){ if(this.midiSystem != null){ this.midiSystem.finalize(); this.midiSystem = null; } } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiSystem.javatuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiSystem.java0000644000175000017500000000517611273045361033460 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.winmm; import java.util.ArrayList; import java.util.List; public class MidiSystem{ private static final String JNI_LIBRARY_NAME = new String("tuxguitar-winmm-jni"); static{ System.loadLibrary(JNI_LIBRARY_NAME); } private long instance; private List ports; private MidiOutputPortImpl connection; public MidiSystem() { this.instance = malloc(); this.ports = new ArrayList(); this.connection = null; } public void finalize(){ if(this.instance != 0 ){ this.free(this.instance); this.instance = 0; } } public List findPorts(){ this.ports.clear(); if(this.instance != 0){ this.findPorts(this.instance); } return this.ports; } public void openPort(MidiOutputPortImpl port){ if(this.instance != 0){ this.openPort(this.instance, port.getDevice()); this.connection = port; } } public void closePort(){ if(this.instance != 0){ this.closePort(this.instance); this.connection = null; } } public void noteOn(int channel,int note,int velocity){ if(this.instance != 0){ this.noteOn(this.instance, channel, note, velocity); } } public void noteOff(int channel,int note,int velocity){ if(this.instance != 0){ this.noteOff(this.instance, channel, note, velocity); } } public void controlChange(int channel,int control,int value){ if(this.instance != 0){ this.controlChange(this.instance, channel, control, value); } } public void programChange(int channel,int program){ if(this.instance != 0){ this.programChange(this.instance, channel, program); } } public void pitchBend(int channel,int value){ if(this.instance != 0){ this.pitchBend(this.instance, channel, value); } } public MidiOutputPortImpl getConnection(){ return this.connection; } protected void addPort(String name,int device){ this.ports.add(new MidiOutputPortImpl(this,name,device)); } private native long malloc(); private native void free(long instance); protected native void open(long instance,String device); protected native void close(long instance); protected native void findPorts(long instance); protected native void openPort(long instance,int device); protected native void closePort(long instance); protected native void noteOn(long instance,int channel,int note,int velocity); protected native void noteOff(long instance,int channel,int note,int velocity); protected native void controlChange(long instance,int channel,int control,int value); protected native void programChange(long instance,int channel,int program); protected native void pitchBend(long instance,int channel,int value); } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortImpl.javatuxguitar-src-1.2/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortI0000644000175000017500000000200611273045361033517 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.winmm; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiOutputPortImpl implements MidiOutputPort{ private int device; private String name; private MidiReceiverImpl receiver; public MidiOutputPortImpl(MidiSystem midiSystem,String name,int device){ this.name = name; this.device = device; this.receiver = new MidiReceiverImpl(this,midiSystem); } public void open(){ if(!this.receiver.isConnected()){ this.receiver.connect(); } } public void close(){ this.receiver.disconnect(); } public MidiReceiver getReceiver(){ this.open(); return this.receiver; } public void check(){ // Not implemented } public int getDevice() { return this.device; } public static String toString(int device){ return (Integer.toString(device)); } public String getKey() { return (Integer.toString(this.device)); } public String getName() { return this.name; } }././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterProcess.javatuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter0000644000175000017500000002207011273045344033556 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.converter; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.ShellAdapter; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.util.TGSynchronizer; public class TGConverterProcess implements TGConverterListener,LanguageLoader,IconLoader{ private static final int SHELL_WIDTH = 650; private static final int SHELL_HEIGHT = 350; protected static final String EOL = ("\n"); protected static final Color COLOR_INFO = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_BLUE); protected static final Color COLOR_ERROR = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_RED ); protected Shell dialog; protected StyledText output; protected Button buttonCancel; protected Button buttonClose; protected TGConverter converter; protected boolean finished; public void start(final String initFolder,String destFolder, TGConverterFormat format ){ this.converter = new TGConverter(initFolder,destFolder); this.converter.setFormat(format); this.converter.setListener(this); this.showProcess(); new Thread(new Runnable() { public void run() { TGConverterProcess.this.converter.process(); } }).start(); } protected void showProcess() { this.finished = false; this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.SHELL_TRIM); this.dialog.setLayout(new GridLayout()); this.dialog.setSize( SHELL_WIDTH , SHELL_HEIGHT ); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { TuxGuitar.instance().getIconManager().removeLoader( TGConverterProcess.this ); TuxGuitar.instance().getLanguageManager().removeLoader( TGConverterProcess.this ); } }); this.dialog.addShellListener(new ShellAdapter() { public void shellClosed(ShellEvent e) { e.doit = TGConverterProcess.this.finished; } }); Composite composite = new Composite(this.dialog,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.output = new StyledText(composite,SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); this.output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.output.setEditable(false); //------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false)); this.buttonCancel = new Button(buttons, SWT.PUSH); this.buttonCancel.setEnabled( false ); this.buttonCancel.setLayoutData(getButtonsData()); this.buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGConverterProcess.this.converter.setCancelled( true ); } }); this.buttonClose = new Button(buttons, SWT.PUSH); this.buttonClose.setEnabled( false ); this.buttonClose.setLayoutData(getButtonsData()); this.buttonClose.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { TGConverterProcess.this.dialog.dispose(); } }); this.loadIcons(false); this.loadProperties(false); TuxGuitar.instance().getIconManager().addLoader( this ); TuxGuitar.instance().getLanguageManager().addLoader( this ); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER); } private GridData getButtonsData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } public boolean isDisposed(){ return (this.dialog == null || this.dialog.isDisposed() ); } public void loadProperties(){ this.loadProperties(true); } public void loadProperties(boolean layout){ if(!isDisposed()){ this.dialog.setText(TuxGuitar.getProperty("batch.converter")); this.buttonCancel.setText(TuxGuitar.getProperty("cancel")); this.buttonClose.setText(TuxGuitar.getProperty("close")); if(layout){ this.dialog.layout(true, true); } } } public void loadIcons() { this.loadIcons(true); } public void loadIcons(boolean layout){ if(!isDisposed()){ this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); if(layout){ this.dialog.layout(true, true); } } } //------------------------------------------------------------------------------------------------// //---TGConverterListener Implementation ----------------------------------------------------------// //------------------------------------------------------------------------------------------------// public void notifyFileProcess(final String filename) { if(!isDisposed() ){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed() ){ TGConverterProcess.this.output.append(TuxGuitar.getProperty("batch.converter.messages.converting", new String[] {filename})); TGConverterProcess.this.output.setSelection( TGConverterProcess.this.output.getCharCount() ); } } }); } catch (Throwable e) { e.printStackTrace(); } } } public void notifyFileResult(final String filename, final int result) { if(!isDisposed() ){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed() ){ TGConverterProcess.this.appendLogMessage(result, filename); TGConverterProcess.this.output.setSelection( TGConverterProcess.this.output.getCharCount() ); } } }); } catch (Throwable e) { e.printStackTrace(); } } } public void notifyStart() { if(!isDisposed() ){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed() ){ TGConverterProcess.this.finished = false; TGConverterProcess.this.buttonClose.setEnabled( TGConverterProcess.this.finished ); TGConverterProcess.this.buttonCancel.setEnabled( !TGConverterProcess.this.finished ); TGConverterProcess.this.output.setCursor(TGConverterProcess.this.dialog.getDisplay().getSystemCursor(SWT.CURSOR_WAIT)); } } }); } catch (Throwable e) { e.printStackTrace(); } } } public void notifyFinish() { if(!isDisposed() ){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed() ){ TGConverterProcess.this.finished = true; TGConverterProcess.this.buttonClose.setEnabled( TGConverterProcess.this.finished ); TGConverterProcess.this.buttonCancel.setEnabled( !TGConverterProcess.this.finished ); TGConverterProcess.this.output.setCursor(TGConverterProcess.this.dialog.getDisplay().getSystemCursor(SWT.CURSOR_ARROW)); } } }); } catch (Throwable e) { e.printStackTrace(); } } } protected void appendLogMessage(int result, String fileName) { String message = (TuxGuitar.getProperty( "batch.converter.messages." + (result == TGConverter.FILE_OK ? "ok" : "failed") ) + EOL); switch (result) { case TGConverter.FILE_COULDNT_WRITE : message += ( TuxGuitar.getProperty("batch.converter.messages.couldnt-write", new String[] {fileName}) + EOL ); break; case TGConverter.FILE_BAD : message += ( TuxGuitar.getProperty("batch.converter.messages.bad-file", new String[] {fileName}) + EOL ); break; case TGConverter.FILE_NOT_FOUND : message += ( TuxGuitar.getProperty("batch.converter.messages.file-not-found", new String[] {fileName}) + EOL ); break; case TGConverter.OUT_OF_MEMORY : message += ( TuxGuitar.getProperty("batch.converter.messages.out-of-memory", new String[] {fileName}) + EOL ); break; case TGConverter.EXPORTER_NOT_FOUND : message += ( TuxGuitar.getProperty("batch.converter.messages.exporter-not-found", new String[] {fileName}) + EOL ); break; case TGConverter.UNKNOWN_ERROR : message += ( TuxGuitar.getProperty("batch.converter.messages.unknown-error", new String[] {fileName}) + EOL ); break; } StyleRange range = new StyleRange(); range.foreground = ( result == TGConverter.FILE_OK ? TGConverterProcess.COLOR_INFO : TGConverterProcess.COLOR_ERROR ); range.start = TGConverterProcess.this.output.getCharCount(); range.length = message.length(); TGConverterProcess.this.output.append( message ); TGConverterProcess.this.output.setStyleRange(range); } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterListener.javatuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter0000644000175000017500000000043111273045344033553 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.converter; public interface TGConverterListener { public void notifyStart(); public void notifyFinish(); public void notifyFileProcess( String filename ); public void notifyFileResult( String filename, int errorCode ); } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter.javatuxguitar-src-1.2/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter0000644000175000017500000001555411273045344033567 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.custom.converter; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Iterator; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGLocalFileExporter; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.base.TGOutputStreamBase; import org.herac.tuxguitar.io.base.TGRawImporter; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGSong; public class TGConverter { // This value will delay the process something like 1 minute for 3000 files. public static final int SLEEP_TIME = 20; public static final int FILE_OK = 250; public static final int FILE_BAD = 403; public static final int FILE_COULDNT_WRITE = 401; public static final int FILE_NOT_FOUND = 404; public static final int OUT_OF_MEMORY = 500; public static final int EXPORTER_NOT_FOUND = 590; public static final int UNKNOWN_ERROR = 666; private String sourceFolder; private String destinationFolder; private TGConverterFormat format; private TGConverterListener listener; private boolean cancelled; public TGConverter(String sourceFolder,String destinationFolder){ this.sourceFolder = sourceFolder; this.destinationFolder = destinationFolder; } public void convert(String fileName, String convertFileName) { try { this.getListener().notifyFileProcess(convertFileName); TGSongManager manager = new TGSongManager(); TGSong song = null; try { song = TGFileFormatManager.instance().getLoader().load(manager.getFactory(),new FileInputStream(fileName)); } catch (TGFileFormatException e) { song = importSong(manager.getFactory(), fileName); } if (song != null){ manager.setSong(song); manager.autoCompleteSilences(); manager.orderBeats(); new File(new File(convertFileName).getParent()).mkdirs(); if( this.format != null && this.format.getExporter() instanceof TGOutputStreamBase ){ TGOutputStreamBase exporter = (TGOutputStreamBase) this.format.getExporter(); exporter.init(manager.getFactory(), new BufferedOutputStream(new FileOutputStream(convertFileName))); exporter.writeSong(song); } else if( this.format != null && this.format.getExporter() instanceof TGLocalFileExporter ){ TGLocalFileExporter exporter = (TGLocalFileExporter) this.format.getExporter(); exporter.configure(true); exporter.init(manager.getFactory(), new BufferedOutputStream(new FileOutputStream(convertFileName))); exporter.exportSong(manager.getSong()); } this.getListener().notifyFileResult(convertFileName,FILE_OK); } else{ this.getListener().notifyFileResult(fileName,FILE_BAD); } } catch (TGFileFormatException e) { this.getListener().notifyFileResult(fileName,FILE_COULDNT_WRITE); } catch (FileNotFoundException ex) { this.getListener().notifyFileResult(fileName,FILE_NOT_FOUND); } catch (OutOfMemoryError e) { this.getListener().notifyFileResult(convertFileName,OUT_OF_MEMORY); } catch (Throwable throwable) { this.getListener().notifyFileResult(convertFileName,UNKNOWN_ERROR); } } private String checkIfExists(String convertFileName, int level) { if (new File(convertFileName).exists()) { String tmpName = convertFileName; String tmpExtension = ""; String tmpLevel = "(" + (level + 1) + ")"; String lastLevel = "(" + (level ) + ")"; int index = convertFileName.lastIndexOf( (level == 0 ? "." : lastLevel + ".") ); if (index!=-1) { tmpExtension = tmpName.substring(index + ( level == 0 ? 0 : lastLevel.length() ), tmpName.length()); tmpName = tmpName.substring(0, index); } return checkIfExists( (tmpName + tmpLevel + tmpExtension) , (level + 1) ); } return convertFileName; } public void process() { this.getListener().notifyStart(); this.process(new File(this.sourceFolder)); this.getListener().notifyFinish(); } private void process(File folder) { if(!isCancelled()){ String[] fileNames = folder.list(); if(fileNames != null){ for (int i = 0; i < fileNames.length; i++) { File file = new File(folder.getPath() + "/" + fileNames[i]); if (file.isDirectory()) { process(file); } else if(!isCancelled()){ String fileName = file.getAbsolutePath(); String convertFileName = getConvertFileName(fileName); convert(fileName, convertFileName); // Just release the thread some milliseconds sleep(); } fileNames[i] = null; } } } } private String getConvertFileName(String path) { String convertPath = (this.destinationFolder + File.separator +path.substring(this.sourceFolder.length())); int lastDot = convertPath.lastIndexOf("."); if (lastDot!=-1) { convertPath = convertPath.substring(0, lastDot) + this.format.getExtension(); } return checkIfExists( new File(convertPath).getAbsolutePath() , 0 ); } private TGSong importSong(TGFactory factory, String filename) { Iterator importers = TGFileFormatManager.instance().getImporters(); while (importers.hasNext() ) { try { TGRawImporter rawImporter = (TGRawImporter)importers.next(); if( rawImporter instanceof TGLocalFileImporter ){ TGLocalFileImporter currentImporter = (TGLocalFileImporter)rawImporter; currentImporter.configure(true); if (isSupportedExtension(filename,currentImporter)) { InputStream input = new BufferedInputStream(new FileInputStream(filename)); currentImporter.init(factory, input); return currentImporter.importSong(); } } } catch (Throwable throwable) { throwable.printStackTrace(); } } return null; } private boolean isSupportedExtension(String filename, TGLocalFileImporter currentImporter) { try { String extension = filename.substring(filename.lastIndexOf("."),filename.length()); extension="*"+extension.toLowerCase(); String[] formats = currentImporter.getFileFormat().getSupportedFormats().split(";"); for (int i=0; i 0 ){ combo.select( 0 ); } } private void addFileFormats(Combo combo, TGFileFormat format, Object exporter ){ if(format.getSupportedFormats() != null){ String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR); if(extensions != null && extensions.length > 0){ for(int i = 0; i < extensions.length; i ++){ int dotIndex = extensions[i].indexOf("."); if(dotIndex >= 0){ String exportName = format.getName(); if( exporter instanceof TGLocalFileExporter ){ exportName = ( (TGLocalFileExporter) exporter ).getExportName(); } combo.add( exportName + " (" + extensions[i] + ")"); this.outputFormats.add(new TGConverterFormat( (extensions[i].substring( dotIndex )).trim() , exporter )); } } } } } protected TGConverterFormat getFileFormat(int index){ if(index >= 0 && index < this.outputFormats.size()){ return (TGConverterFormat)this.outputFormats.get(index); } return null; } public void loadProperties(){ this.loadProperties(true); } public void loadProperties(boolean layout){ if(!isDisposed()){ this.dialog.setText(TuxGuitar.getProperty("batch.converter")); this.group.setText(TuxGuitar.getProperty("batch.converter.settings")); this.inputFolderLabel.setText(TuxGuitar.getProperty("batch.converter.input.folder")); this.outputFolderLabel.setText(TuxGuitar.getProperty("batch.converter.output.folder")); this.outputFormatLabel.setText(TuxGuitar.getProperty("batch.converter.output.format")); this.buttonOK.setText(TuxGuitar.getProperty("ok")); this.buttonCancel.setText(TuxGuitar.getProperty("cancel")); if(layout){ this.dialog.layout(true, true); } } } public void loadIcons() { this.loadIcons(true); } public void loadIcons(boolean layout){ if(!isDisposed()){ this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.inputFolderChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); this.outputFolderChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); if(layout){ this.dialog.layout(true, true); } } } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortReaderPlugin.javatuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPor0000644000175000017500000000116211273045344033352 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.coreaudio; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiPortReaderPlugin extends TGMidiOutputPortProviderPlugin{ protected MidiOutputPortProvider getProvider() { return new MidiPortReaderCoreAudio(); } public String getAuthor() { return "Auria"; } public String getDescription() { return "Core Audio output plugin"; } public String getName() { return "Core Audio output plugin"; } public String getVersion() { return "1.0"; } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/JNILibraryLoader.javatuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/JNILibr0000644000175000017500000000326511273045344033246 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.coreaudio; import java.io.File; public class JNILibraryLoader { private static final String JNI_EXTENSION = ".jnilib"; //private static final String JNI_TMP_PATH = (System.getProperty( "java.io.tmpdir" ) + File.separator); public static void loadLibrary(String libname){ System.out.println("trying to load" + libname + " (void loadLibrary)"); JNILibraryLoader.loadFromClassPath(libname + JNI_EXTENSION); /* if(!JNILibraryLoader.loadFromClassPath(libname + JNI_EXTENSION)){ //System.loadLibrary(libname); } */ } private static boolean loadFromClassPath(String filename){ System.out.println("trying to load" + filename + " (bool loadFromClassPath)"); File file = new File(/*JNI_TMP_PATH +*/ filename); /* try{ if(!file.exists()){ OutputStream outputStream = new FileOutputStream(file); InputStream inputStream = JNILibraryLoader.class.getClassLoader().getResourceAsStream(filename); if (inputStream != null) { int read; byte [] buffer = new byte [4096]; while ((read = inputStream.read (buffer)) != -1) { outputStream.write(buffer, 0, read); } outputStream.close(); inputStream.close(); } } */ if(file.exists()){ System.out.println("calling file.getAbsolutePath() : "+ file.getAbsolutePath()); System.load(file.getAbsolutePath()); //System.load(file.getAbsolutePath()); return true; } //else //{ System.out.println("Can't find file " + file.getAbsolutePath()); return false; //} /* }catch(Throwable throwable){ return false; }finally{ if(file.exists()){ file.delete(); } } return false; */ } } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiReceiverJNI.javatuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiRec0000644000175000017500000000154511273045344033330 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.coreaudio; public abstract class MidiReceiverJNI{ private static final String JNI_LIBRARY_NAME = new String("tuxguitar-coreaudio-jni"); static{ System.loadLibrary (JNI_LIBRARY_NAME); } public MidiReceiverJNI() { super(); } protected native void open(); protected native void close(); //protected native void findDevices(); protected native void openDevice(); protected native void closeDevice(); protected native void noteOn(int channel,int note,int velocity); protected native void noteOff(int channel,int note,int velocity); protected native void controlChange(int channel,int control,int value); protected native void programChange(int channel,int program); protected native void pitchBend(int channel,int value); //protected abstract void addDevice(String name); } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiRec0000644000175000017500000000424611273045344033331 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.coreaudio; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiReceiverImpl extends MidiReceiverJNI implements MidiReceiver{ private boolean open; // unncessary private boolean connected; private List ports; public MidiReceiverImpl(){ this.ports = new ArrayList(); this.connected = false; } public void open(){ super.open(); this.open = true; } public void close(){ if(this.isOpen()){ this.disconnect(); super.close(); this.open = false; } } public boolean isOpen(){ return (this.open); } public boolean isConnected(){ return (this.isOpen() && this.connected); } public void connect(){ if(isOpen()){ if(!isConnected()){ this.connected = true; this.openDevice(); } } } public void disconnect() { if(isConnected()){ this.closeDevice(); this.connected = false; } } public List listPorts(){ if(isOpen()){ this.ports.clear(); this.ports.add(new MidiPortImpl(this, "Core Audio midi playback" , "coreaudio" )); return this.ports; } return Collections.EMPTY_LIST; } public void sendSystemReset() { if(isOpen()){ //not implemented } } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } public void sendControlChange(int channel, int controller, int value) { if(isOpen()){ super.controlChange(channel, controller, value); } } public void sendNoteOff(int channel, int key, int velocity) { if(isOpen()){ super.noteOff(channel, key, velocity); } } public void sendNoteOn(int channel, int key, int velocity) { if(isOpen()){ super.noteOn(channel, key, velocity); } } public void sendPitchBend(int channel, int value) { if(isOpen()){ super.pitchBend(channel, value); } } public void sendProgramChange(int channel, int value) { if(isOpen()){ super.programChange(channel, value); } } } ././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortReaderCoreAudio.javatuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPor0000644000175000017500000000111111273045344033344 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.coreaudio; import java.util.List; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; import org.herac.tuxguitar.player.impl.midiport.coreaudio.MidiReceiverImpl; public class MidiPortReaderCoreAudio implements MidiOutputPortProvider{ private static final MidiReceiverImpl midiOut = new MidiReceiverImpl(); public MidiPortReaderCoreAudio(){ super(); } public List listPorts() { if(!midiOut.isOpen()){ midiOut.open(); } return midiOut.listPorts(); } public void closeAll(){ midiOut.close(); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortImpl.javatuxguitar-src-1.2/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPor0000644000175000017500000000150611273045344033354 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.coreaudio; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiPortImpl implements MidiOutputPort{ private String key; private String name; private MidiReceiverImpl receiver; public MidiPortImpl(MidiReceiverImpl midiOut,String name,String key){ this.key = key; this.name = name; this.receiver = midiOut; } public void open(){ if(!this.receiver.isConnected()){ this.receiver.connect(); } } public void close(){ this.receiver.disconnect(); } public MidiReceiver getReceiver(){ this.open(); return this.receiver; } public void check(){ // Not implemented } public String getKey(){ return this.key; } public String getName(){ return this.name; } }././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynth.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiS0000644000175000017500000001567411273045345033570 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.player.impl.midiport.fluidsynth.type.BooleanRef; import org.herac.tuxguitar.player.impl.midiport.fluidsynth.type.DoubleRef; import org.herac.tuxguitar.player.impl.midiport.fluidsynth.type.IntegerRef; import org.herac.tuxguitar.player.impl.midiport.fluidsynth.type.StringRef; public class MidiSynth { private static final String JNI_LIBRARY_NAME = new String("tuxguitar-fluidsynth-jni"); static{ System.loadLibrary(JNI_LIBRARY_NAME); } private long instance; private MidiOutputPortImpl loadedPort; public MidiSynth(){ this.instance = malloc(); this.loadedPort = null; } public boolean isInitialized(){ return (this.instance != 0); } public void finalize(){ if(isInitialized()){ this.free(this.instance); this.instance = 0; } } public boolean isConnected(MidiOutputPortImpl port){ return (port != null && this.loadedPort != null && this.loadedPort.equals( port ) ); } public void connect(MidiOutputPortImpl port){ if(isInitialized()){ this.disconnect( this.loadedPort ); this.open(this.instance); this.loadFont(this.instance, port.getSoundFont()); this.loadedPort = port; } } public void disconnect(MidiOutputPortImpl port){ if(isInitialized() && isConnected(port)){ this.unloadFont(this.instance); this.close(this.instance); this.loadedPort = null; } } public void reconnect(){ MidiOutputPortImpl connection = this.loadedPort; if( isConnected( connection ) ){ this.disconnect( connection ); this.connect( connection ); } } public void sendSystemReset() { if(isInitialized()){ this.systemReset(this.instance); } } public void sendNoteOn(int channel, int key, int velocity) { if(isInitialized()){ this.noteOn(this.instance,channel, key, velocity); } } public void sendNoteOff(int channel, int key, int velocity) { if(isInitialized()){ this.noteOff(this.instance,channel, key, velocity); } } public void sendControlChange(int channel, int controller, int value) { if(isInitialized()){ this.controlChange(this.instance,channel, controller, value); } } public void sendProgramChange(int channel, int value) { if(isInitialized()){ this.programChange(this.instance,channel, value); } } public void sendPitchBend(int channel, int value) { if(isInitialized()){ this.pitchBend(this.instance,channel, value); } } public void setDoubleProperty( String key , double value ){ if(isInitialized()){ this.setDoubleProperty(this.instance, key, value); } } public void setIntegerProperty( String key , int value ){ if(isInitialized()){ this.setIntegerProperty(this.instance, key, value); } } public void setStringProperty( String key , String value ){ if(isInitialized()){ this.setStringProperty(this.instance, key, value); } } public double getDoubleProperty( String key ){ DoubleRef value = new DoubleRef(); if(isInitialized()){ this.getDoubleProperty(this.instance, key, value); } return value.getValue(); } public int getIntegerProperty( String key ){ IntegerRef value = new IntegerRef(); if(isInitialized()){ this.getIntegerProperty(this.instance, key, value); } return value.getValue(); } public String getStringProperty( String key ){ StringRef value = new StringRef(); if(isInitialized()){ this.getStringProperty(this.instance, key, value); } return value.getValue(); } public double getDoublePropertyDefault( String key ){ DoubleRef value = new DoubleRef(); if(isInitialized()){ this.getDoublePropertyDefault(this.instance, key, value); } return value.getValue(); } public int getIntegerPropertyDefault( String key ){ IntegerRef value = new IntegerRef(); if(isInitialized()){ this.getIntegerPropertyDefault(this.instance, key, value); } return value.getValue(); } public String getStringPropertyDefault( String key ){ StringRef value = new StringRef(); if(isInitialized()){ this.getStringPropertyDefault(this.instance, key, value); } return value.getValue(); } public List getPropertyOptions( String key ){ List options = new ArrayList(); if(isInitialized()){ this.getPropertyOptions(instance, key, options); } return options; } public int[] getIntegerPropertyRange( String key ){ IntegerRef minimum = new IntegerRef(); IntegerRef maximum = new IntegerRef(); if(isInitialized()){ this.getIntegerPropertyRange(this.instance, key, minimum , maximum ); } return new int[]{ minimum.getValue() , maximum.getValue() }; } public double[] getDoublePropertyRange( String key ){ DoubleRef minimum = new DoubleRef(); DoubleRef maximum = new DoubleRef(); if(isInitialized()){ this.getDoublePropertyRange(this.instance, key, minimum , maximum ); } return new double[]{ minimum.getValue() , maximum.getValue() }; } public boolean isRealtimeProperty( String key ){ BooleanRef value = new BooleanRef(); if(isInitialized()){ this.isRealtimeProperty(this.instance, key, value); } return value.getValue(); } private native long malloc(); private native void free(long instance); private native void open(long instance); private native void close(long instance); private native void loadFont(long instance, String path); private native void unloadFont(long instance); private native void systemReset(long instance); private native void noteOn(long instance,int channel,int note,int velocity); private native void noteOff(long instance,int channel,int note,int velocity); private native void controlChange(long instance,int channel,int control,int value); private native void programChange(long instance,int channel,int program); private native void pitchBend(long instance,int channel,int value); private native void setDoubleProperty(long instance, String key , double value ); private native void setIntegerProperty(long instance, String key , int value ); private native void setStringProperty(long instance, String key , String value ); private native void getDoubleProperty(long instance, String key , DoubleRef ref ); private native void getIntegerProperty(long instance, String key , IntegerRef ref ); private native void getStringProperty(long instance, String key , StringRef ref ); private native void getDoublePropertyDefault(long instance, String key , DoubleRef ref ); private native void getIntegerPropertyDefault(long instance, String key , IntegerRef ref ); private native void getStringPropertyDefault(long instance, String key , StringRef ref ); private native void getDoublePropertyRange(long instance, String key , DoubleRef minimum , DoubleRef maximum ); private native void getIntegerPropertyRange(long instance, String key , IntegerRef minimum , IntegerRef maximum ); private native void getPropertyOptions(long instance, String key , List options ); private native void isRealtimeProperty(long instance, String key , BooleanRef ref ); } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettings.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiS0000644000175000017500000001212511273045345033554 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; public class MidiSettings { public static final String AUDIO_DRIVER = "audio.driver"; public static final String AUDIO_SAMPLE_FORMAT = "audio.sample-format"; public static final String AUDIO_PERIOD_SIZE = "audio.period-size"; public static final String AUDIO_PERIOD_COUNT = "audio.periods"; public static final String SYNTH_GAIN = "synth.gain"; public static final String SYNTH_POLYPHONY = "synth.polyphony"; public static final String SYNTH_SAMPLE_RATE = "synth.sample-rate"; public static final String SYNTH_REVERB_ACTIVE = "synth.reverb.active"; public static final String SYNTH_CHORUS_ACTIVE = "synth.chorus.active"; public static final String SYNTH_AUDIO_CHANNELS = "synth.audio-channels"; public static final String SYNTH_AUDIO_GROUPS = "synth.audio-groups"; private TGConfigManager config; private MidiOutputPortProviderImpl provider; private boolean restartSynth; public MidiSettings(MidiOutputPortProviderImpl provider){ this.provider = provider; } public MidiSynth getSynth(){ return this.provider.getSynth(); } public TGConfigManager getConfig(){ if(this.config == null){ this.config = new TGPluginConfigManager("tuxguitar-fluidsynth"); this.config.init(); } return this.config; } public double getDoubleValue( String property ){ return getConfig().getDoubleConfigValue(property, this.getSynth().getDoubleProperty( property )); } public int getIntegerValue( String property ){ return getConfig().getIntConfigValue(property, this.getSynth().getIntegerProperty( property )); } public String getStringValue( String property ){ return getConfig().getStringConfigValue(property, this.getSynth().getStringProperty( property )); } public boolean getBooleanValue( String property ){ String value = this.getStringValue(property); return (value != null && value.equals("yes")); } public void setDoubleValue( String property , double value ){ getConfig().setProperty( property , value ); } public void setIntegerValue( String property , int value ){ getConfig().setProperty( property , value ); } public void setStringValue( String property , String value ){ if( value == null ){ getConfig().removeProperty( property ); }else{ getConfig().setProperty( property , value ); } } public void setBooleanValue( String property , boolean value ){ this.setStringValue(property, ( value ? "yes" : "no" ) ); } public List getSoundfonts(){ List ports = new ArrayList(); TGConfigManager config = getConfig(); int count = config.getIntConfigValue("soundfont.count"); for(int i = 0; i < count;i ++){ String path = config.getStringConfigValue("soundfont.path" + i); if(path != null && path.length() > 0 ){ ports.add( path ); } } return ports; } public void setSoundfonts(List soundfonts){ TGConfigManager config = getConfig(); config.setProperty("soundfont.count", soundfonts.size() ); for( int i = 0 ; i < soundfonts.size() ; i ++ ){ String path = (String)soundfonts.get( i ); config.setProperty("soundfont.path" + i, path ); } } public void save(){ this.getConfig().save(); } public void apply(){ if(this.getSynth() != null && this.getSynth().isInitialized()){ this.restartSynth = false; this.applyStringProperty( AUDIO_DRIVER ); this.applyStringProperty( AUDIO_SAMPLE_FORMAT ); this.applyIntegerProperty(AUDIO_PERIOD_SIZE ); this.applyIntegerProperty(AUDIO_PERIOD_COUNT ); this.applyDoubleProperty(SYNTH_GAIN ); this.applyDoubleProperty(SYNTH_SAMPLE_RATE ); this.applyStringProperty(SYNTH_REVERB_ACTIVE ); this.applyStringProperty(SYNTH_CHORUS_ACTIVE ); this.applyIntegerProperty(SYNTH_POLYPHONY ); if( this.restartSynth ){ this.getSynth().reconnect(); this.restartSynth = false; } } } private void applyStringProperty( String property ){ String newValue = this.getStringValue( property ); String oldValue = this.getSynth().getStringProperty( property ); if( newValue != null ){ if( oldValue == null || !newValue.equals( oldValue ) ){ this.getSynth().setStringProperty( property, newValue ); this.restartSynth = (this.restartSynth || !this.getSynth().isRealtimeProperty( property )); } } } private void applyDoubleProperty( String property ){ double newValue = this.getDoubleValue( property ); double oldValue = this.getSynth().getDoubleProperty( property ); if( newValue != oldValue ){ this.getSynth().setDoubleProperty( property, newValue ); this.restartSynth = (this.restartSynth || !this.getSynth().isRealtimeProperty( property )); } } private void applyIntegerProperty( String property ){ int newValue = this.getIntegerValue( property ); int oldValue = this.getSynth().getIntegerProperty( property ); if( newValue != oldValue ){ this.getSynth().setIntegerProperty( property, newValue ); this.restartSynth = (this.restartSynth || !this.getSynth().isRealtimeProperty( property )); } } } ././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortProviderPlugin.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiO0000644000175000017500000000211711273045345033550 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin implements TGPluginSetup{ private MidiOutputPortProviderImpl provider; protected MidiOutputPortProvider getProvider() { return getProviderImpl(); } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "FluidSynth output plugin"; } public String getName() { return "FluidSynth output plugin"; } public String getVersion() { return "1.0"; } public void setupDialog(Shell parent) { getProviderImpl().getSettings().configure(parent); } private MidiOutputPortProviderImpl getProviderImpl() { if(this.provider == null){ this.provider = new MidiOutputPortProviderImpl(); } return this.provider; } } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiR0000644000175000017500000000213511273045345033553 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiReceiverImpl implements MidiReceiver{ private MidiSynth synth; public MidiReceiverImpl(MidiSynth synth){ this.synth = synth; } public void sendSystemReset() { this.synth.sendSystemReset(); } public void sendNoteOn(int channel, int key, int velocity) { this.synth.sendNoteOn(channel, key, velocity); } public void sendNoteOff(int channel, int key, int velocity) { this.synth.sendNoteOff(channel, key, velocity); } public void sendControlChange(int channel, int controller, int value) { this.synth.sendControlChange(channel, controller, value); } public void sendProgramChange(int channel, int value) { this.synth.sendProgramChange(channel, value); } public void sendPitchBend(int channel, int value) { this.synth.sendPitchBend(channel, value); } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ this.sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } } ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortProviderImpl.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiO0000644000175000017500000000313311273045345033547 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderImpl implements MidiOutputPortProvider{ private MidiSynth synth; private MidiOutputPortSettings settings; public MidiOutputPortProviderImpl(){ super(); } public List listPorts() throws MidiPlayerException { try{ List ports = new ArrayList(); Iterator it = getSettings().getSoundfonts().iterator(); while(it.hasNext()){ String path = (String)it.next(); File soundfont = new File( path ); if( soundfont.exists() && !soundfont.isDirectory() ){ ports.add( new MidiOutputPortImpl( getSynth(), soundfont ) ); } } return ports; }catch(Throwable throwable){ throw new MidiPlayerException(throwable.getMessage(), throwable); } } public void closeAll() throws MidiPlayerException { try{ if(this.synth != null && this.synth.isInitialized()){ this.synth.finalize(); this.synth = null; } }catch(Throwable throwable){ throw new MidiPlayerException(throwable.getMessage(), throwable); } } public MidiSynth getSynth(){ if(this.synth == null || !this.synth.isInitialized()){ this.synth = new MidiSynth(); this.getSettings().apply(); } return this.synth; } public MidiOutputPortSettings getSettings(){ if(this.settings == null){ this.settings = new MidiOutputPortSettings( this ); } return this.settings; } } ././@LongLink0000000000000000000000000000017300000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortSettings.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiO0000644000175000017500000004747511273045345033570 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Scale; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; public class MidiOutputPortSettings extends MidiSettings { private static final int TABLE_WIDTH = 350; private static final int TABLE_HEIGHT = 200; public MidiOutputPortSettings(MidiOutputPortProviderImpl provider){ super( provider ); } public void configure(Shell parent) { final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setText(TuxGuitar.getProperty("fluidsynth.settings")); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); TabFolder tabs = new TabFolder(dialog, SWT.TOP); tabs.setLayout( new FormLayout() ); // ---------------------------------------------------------------------- Composite cSoundfonts = new Composite( tabs , SWT.NONE); cSoundfonts.setLayout(getGridLayout( 2 )); cSoundfonts.setLayoutData(new FormData()); TabItem tSoundfonts = new TabItem( tabs , SWT.None ); tSoundfonts.setText(TuxGuitar.getProperty("fluidsynth.settings.soundfonts")); tSoundfonts.setControl(cSoundfonts); Composite cSoundfontsTable = new Composite(cSoundfonts, SWT.NONE); cSoundfontsTable.setLayout(new GridLayout()); cSoundfontsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Table soundfontsTable = new Table(cSoundfontsTable, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); soundfontsTable.setLayoutData(getTableData()); soundfontsTable.setHeaderVisible(true); TableColumn soundfontsTableColumn = new TableColumn(soundfontsTable, SWT.NONE); soundfontsTableColumn.setWidth(TABLE_WIDTH); soundfontsTableColumn.setText(TuxGuitar.getProperty("fluidsynth.settings.soundfonts.list")); Composite cSoundfontsButtons = new Composite(cSoundfonts, SWT.NONE); cSoundfontsButtons.setLayout(new GridLayout()); cSoundfontsButtons.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Button buttonAdd = new Button(cSoundfontsButtons, SWT.PUSH); buttonAdd.setLayoutData(getButtonData(SWT.FILL,SWT.TOP, true,false)); buttonAdd.setText(TuxGuitar.getProperty("add")); buttonAdd.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addMidiPort(soundfontsTable); } }); Button buttonDelete = new Button(cSoundfontsButtons, SWT.PUSH); buttonDelete.setText(TuxGuitar.getProperty("remove")); buttonDelete.setLayoutData(getButtonData(SWT.FILL,SWT.TOP, true,false)); buttonDelete.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { removeMidiPort(soundfontsTable); } }); this.addMidiPorts( soundfontsTable); // ---------------------------------------------------------------------- Composite cAudio = new Composite( tabs , SWT.NONE); cAudio.setLayout(new GridLayout(2, false)); cAudio.setLayoutData(new FormData()); TabItem tAudio = new TabItem( tabs , SWT.None ); tAudio.setText(TuxGuitar.getProperty("fluidsynth.settings.audio")); tAudio.setControl( cAudio ); // Audio Driver -------------------------------------------------------- final List audioDriverOptions = this.getAudioDriverOptions(); Label lAudioDriver = new Label(cAudio, SWT.NONE); lAudioDriver.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lAudioDriver.setText(TuxGuitar.getProperty("fluidsynth.settings.audio.driver")); final Combo cAudioDriver = new Combo(cAudio, SWT.DROP_DOWN | SWT.READ_ONLY); cAudioDriver.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillAudioDriverCombo( audioDriverOptions , cAudioDriver ); // Audio Sample Format ----------------------------------------------------- final List audioSampleFormatOptions = this.getAudioSampleFormatOptions(); Label lAudioSampleFormat = new Label(cAudio, SWT.NONE); lAudioSampleFormat.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lAudioSampleFormat.setText(TuxGuitar.getProperty("fluidsynth.settings.audio.sample-format")); final Combo cAudioSampleFormat = new Combo(cAudio, SWT.DROP_DOWN | SWT.READ_ONLY); cAudioSampleFormat.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillAudioSampleFormatCombo( audioSampleFormatOptions , cAudioSampleFormat ); // Audio Period Size ------------------------------------------------------- final List audioPeriodSizeOptions = this.getAudioPeriodSizeOptions(); Label lAudioPeriodSize = new Label( cAudio , SWT.NONE); lAudioPeriodSize.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lAudioPeriodSize.setText(TuxGuitar.getProperty("fluidsynth.settings.audio.period-size")); final Combo cAudioPeriodSize = new Combo( cAudio , SWT.DROP_DOWN | SWT.READ_ONLY); cAudioPeriodSize.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillAudioPeriodSizeCombo( audioPeriodSizeOptions , cAudioPeriodSize ); // Audio Period Count ------------------------------------------------------- final List audioPeriodCountOptions = this.getAudioPeriodCountOptions(); Label lAudioPeriodCount = new Label( cAudio , SWT.NONE); lAudioPeriodCount.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lAudioPeriodCount.setText(TuxGuitar.getProperty("fluidsynth.settings.audio.periods")); final Combo cAudioPeriodCount = new Combo( cAudio , SWT.DROP_DOWN | SWT.READ_ONLY); cAudioPeriodCount.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillAudioPeriodCountCombo( audioPeriodCountOptions , cAudioPeriodCount ); // ---------------------------------------------------------------------- Composite cSynth = new Composite( tabs , SWT.NONE); cSynth.setLayout(new GridLayout(2, false)); cSynth.setLayoutData(new FormData()); TabItem tSynth = new TabItem( tabs , SWT.None ); tSynth.setText(TuxGuitar.getProperty("fluidsynth.settings.synth")); tSynth.setControl( cSynth ); // Synth Gain ------------------------------------------------------- Label lSynthGain = new Label( cSynth , SWT.NONE); lSynthGain.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lSynthGain.setText(TuxGuitar.getProperty("fluidsynth.settings.synth.gain")); final Scale sSynthGain = new Scale( cSynth , SWT.HORIZONTAL ); sSynthGain.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillSynthGainScale( sSynthGain ); // Synth Sample Rate ------------------------------------------------------- final List synthSampleRateOptions = this.getSynthSampleRateOptions(); Label lSynthSampleRate = new Label( cSynth , SWT.NONE); lSynthSampleRate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lSynthSampleRate.setText(TuxGuitar.getProperty("fluidsynth.settings.synth.sample-rate")); final Combo cSynthSampleRate = new Combo( cSynth , SWT.DROP_DOWN | SWT.READ_ONLY); cSynthSampleRate.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillSynthSampleRateCombo( synthSampleRateOptions , cSynthSampleRate ); // Synth Polyphony ------------------------------------------------------- Label lSynthPolyphony = new Label( cSynth , SWT.NONE); lSynthPolyphony.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false)); lSynthPolyphony.setText(TuxGuitar.getProperty("fluidsynth.settings.synth.polyphony")); final Spinner sSynthPolyphony = new Spinner( cSynth , SWT.BORDER ); sSynthPolyphony.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fillSynthPolyphonySpinner( sSynthPolyphony ); // Synth Reverb ------------------------------------------------------- final Button bSynthReverbActive = new Button( cSynth , SWT.CHECK); bSynthReverbActive.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false,2,1)); bSynthReverbActive.setText(TuxGuitar.getProperty("fluidsynth.settings.synth.reverb.active")); fillSynthReverbActiveCheckbox(bSynthReverbActive); // Synth Chorus ------------------------------------------------------- final Button bSynthChorusActive = new Button( cSynth , SWT.CHECK); bSynthChorusActive.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false,2,1)); bSynthChorusActive.setText(TuxGuitar.getProperty("fluidsynth.settings.synth.chorus.active")); fillSynthChorusActiveCheckbox(bSynthChorusActive); // ------------------BUTTONS-------------------------- Composite compositeButtons = new Composite(dialog, SWT.NONE); compositeButtons.setLayout(new GridLayout(2,false)); compositeButtons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonOK = new Button(compositeButtons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData(SWT.FILL, SWT.FILL, true, true)); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { updateSoundfontsSelection( soundfontsTable ); updateAudioDriverSelection( audioDriverOptions, cAudioDriver.getSelectionIndex() ); updateAudioSampleFormatSelection( audioSampleFormatOptions , cAudioSampleFormat.getSelectionIndex() ); updateAudioPeriodSizeSelection( audioPeriodSizeOptions, cAudioPeriodSize.getSelectionIndex() ); updateAudioPeriodCountSelection( audioPeriodCountOptions, cAudioPeriodCount.getSelectionIndex() ); updateSynthSampleRateSelection( synthSampleRateOptions , cSynthSampleRate.getSelectionIndex() ); updateSynthGainSelection( sSynthGain.getSelection() ); updateSynthPolyphonySelection( sSynthPolyphony.getSelection() ); updateSynthReverbActiveSelection( bSynthReverbActive.getSelection() ); updateSynthChorusActiveSelection( bSynthChorusActive.getSelection() ); new Thread( new Runnable() { public void run() { update(); } }).start(); dialog.dispose(); } }); Button buttonCancel = new Button(compositeButtons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData(SWT.FILL, SWT.FILL, true, true)); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } protected GridLayout getGridLayout(int columns){ GridLayout layout = new GridLayout(columns, false); layout.marginWidth = 0; layout.marginHeight = 0; return layout; } protected GridData getTableData(){ GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumHeight = TABLE_HEIGHT; return data; } protected GridData getButtonData(int hAlignment,int vAlignment,boolean grabExcessHSpace,boolean grabExcessVSpace){ GridData data = new GridData(hAlignment,vAlignment,grabExcessHSpace,grabExcessVSpace); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void addMidiPorts(Table table){ Iterator it = getSoundfonts().iterator(); while(it.hasNext()){ String path = (String)it.next(); this.addMidiPort(table, path ); } } protected void addMidiPort(final Table table) { FileDialog chooser = new FileDialog(table.getShell()); String path = chooser.open(); if(path != null && path.length() > 0){ addMidiPort(table, path); } } protected void addMidiPort(Table table, String path){ TableItem item = new TableItem(table, SWT.NONE); item.setText( path ); item.setData( path ); } protected void removeMidiPort(Table table){ int index = table.getSelectionIndex(); if(index >= 0 && index < table.getItemCount()){ table.remove( index ); } } protected List getAudioDriverOptions(){ return this.getSynth().getPropertyOptions(MidiSettings.AUDIO_DRIVER); } protected List getAudioSampleFormatOptions(){ return this.getSynth().getPropertyOptions(MidiSettings.AUDIO_SAMPLE_FORMAT); } protected List getAudioPeriodSizeOptions(){ List options = new ArrayList(); int[] range = getSynth().getIntegerPropertyRange( MidiSettings.AUDIO_PERIOD_SIZE ); if( range.length == 2 && range[0] < range[1] ){ int value = range[0]; while( value <= range[1] ){ options.add( new Integer(value) ); value = (value * 2); } } return options; } protected List getAudioPeriodCountOptions(){ List options = new ArrayList(); int[] range = getSynth().getIntegerPropertyRange( MidiSettings.AUDIO_PERIOD_COUNT ); if( range.length == 2 && range[0] < range[1] ){ int value = range[0]; while( value <= range[1] ){ options.add( new Integer(value) ); value = (value * 2); } } return options; } protected List getSynthSampleRateOptions(){ List options = new ArrayList(); double[] range = getSynth().getDoublePropertyRange( MidiSettings.SYNTH_SAMPLE_RATE ); double[] values = new double[]{ 22050f , 44100f , 48000f , 88200f , 96000f }; if( range.length == 2 && range[0] < range[1] ){ for( int i = 0 ; i < values.length ; i ++ ){ if( values[ i ] >= range[0] && values[ i ] <= range[1] ){ options.add( new Double( values[ i ] ) ); } } } return options; } protected void fillAudioDriverCombo( List options, Combo combo ){ int selectedIndex = 0; String selectedValue = getStringValue( AUDIO_DRIVER ); for(int i = 0 ; i < options.size(); i ++){ String currentValue = (String)options.get(i); combo.add( currentValue ); if( selectedValue != null && selectedValue.equals( currentValue )){ selectedIndex = i; } } combo.select( selectedIndex ); } protected void fillAudioSampleFormatCombo( List options, Combo combo ){ int selectedIndex = 0; String selectedValue = getStringValue( AUDIO_SAMPLE_FORMAT ); for(int i = 0 ; i < options.size(); i ++){ String currentValue = (String)options.get(i); combo.add( currentValue ); if( selectedValue != null && selectedValue.equals( currentValue )){ selectedIndex = i; } } combo.select( selectedIndex ); } protected void fillAudioPeriodSizeCombo( List options, Combo combo ){ int selectedIndex = 0; int selectedValue = getIntegerValue( AUDIO_PERIOD_SIZE ); for(int i = 0 ; i < options.size(); i ++){ int currentValue = ((Integer)options.get(i)).intValue(); combo.add( Integer.toString(currentValue) ); if( selectedValue == currentValue ){ selectedIndex = i; } } combo.select( selectedIndex ); } protected void fillAudioPeriodCountCombo( List options, Combo combo ){ int selectedIndex = 0; int selectedValue = getIntegerValue( AUDIO_PERIOD_COUNT ); for(int i = 0 ; i < options.size(); i ++){ int currentValue = ((Integer)options.get(i)).intValue(); combo.add( Integer.toString(currentValue) ); if( selectedValue == currentValue ){ selectedIndex = i; } } combo.select( selectedIndex ); } protected void fillSynthGainScale( Scale scale ){ double[] range = getSynth().getDoublePropertyRange( MidiSettings.SYNTH_GAIN ); if( range.length == 2 ){ int value = (int)Math.round( getDoubleValue( MidiSettings.SYNTH_GAIN ) * 10f ); int minimum = (int)Math.round( range[0] * 10 ); int maximum = (int)Math.round( range[1] * 10 ); if( minimum < maximum ){ scale.setMinimum( minimum ); scale.setMaximum( maximum ); scale.setIncrement(1); scale.setPageIncrement(10); if( value >= minimum && value <= maximum ){ scale.setSelection( value ); } } } } protected void fillSynthSampleRateCombo( List options, Combo combo ){ int selectedIndex = 0; double selectedValue = getDoubleValue( MidiSettings.SYNTH_SAMPLE_RATE ); for(int i = 0 ; i < options.size(); i ++){ double currentValue = ((Double)options.get(i)).doubleValue(); combo.add( Double.toString(currentValue) ); if( selectedValue == currentValue ){ selectedIndex = i; } } combo.select( selectedIndex ); } protected void fillSynthPolyphonySpinner( Spinner spinner ){ int value = getIntegerValue( MidiSettings.SYNTH_POLYPHONY ); int[] range = getSynth().getIntegerPropertyRange( MidiSettings.SYNTH_POLYPHONY ); if( range.length == 2 && range[0] < range[1] ){ spinner.setMinimum( range[0] ); spinner.setMaximum( range[1] ); spinner.setIncrement(1); spinner.setPageIncrement(1); if( value >= range[0] && value <= range[1] ){ spinner.setSelection( value ); } } } protected void fillSynthReverbActiveCheckbox( Button button ){ button.setSelection( getBooleanValue( SYNTH_REVERB_ACTIVE ) ); } protected void fillSynthChorusActiveCheckbox( Button button ){ button.setSelection( getBooleanValue( SYNTH_CHORUS_ACTIVE ) ); } protected void updateAudioDriverSelection( List options , int index ){ if( index >=0 && index < options.size() ){ setStringValue(MidiSettings.AUDIO_DRIVER, (( String )options.get( index )) ); } } protected void updateAudioSampleFormatSelection( List options , int index ){ if( index >=0 && index < options.size() ){ setStringValue(MidiSettings.AUDIO_SAMPLE_FORMAT, (( String )options.get( index )) ); } } protected void updateAudioPeriodSizeSelection( List options , int index ){ if( index >=0 && index < options.size() ){ setIntegerValue(MidiSettings.AUDIO_PERIOD_SIZE, (( Integer )options.get( index )).intValue() ); } } protected void updateAudioPeriodCountSelection( List options , int index ){ if( index >=0 && index < options.size() ){ setIntegerValue(MidiSettings.AUDIO_PERIOD_COUNT, (( Integer )options.get( index )).intValue() ); } } protected void updateSynthGainSelection( int value ){ double doubleValue = ( value / 10.00 ); double[] range = getSynth().getDoublePropertyRange( MidiSettings.SYNTH_GAIN ); if( range.length == 2 ){ int minimum = (int)Math.round( range[0] ); int maximum = (int)Math.round( range[1] ); if( minimum < maximum && doubleValue >= minimum && doubleValue <= maximum ){ setDoubleValue( MidiSettings.SYNTH_GAIN , doubleValue ); } } } protected void updateSynthSampleRateSelection( List options , int index ){ if( index >=0 && index < options.size() ){ setDoubleValue(MidiSettings.SYNTH_SAMPLE_RATE, (( Double )options.get( index )).doubleValue() ); } } protected void updateSynthPolyphonySelection( int value ){ int[] range = getSynth().getIntegerPropertyRange( MidiSettings.SYNTH_POLYPHONY ); if( range.length == 2 && range[0] < range[1] && value >= range[0] && value <= range[1] ){ if( value >= range[0] && value <= range[1] ){ setIntegerValue( MidiSettings.SYNTH_POLYPHONY, value ); } } } protected void updateSynthReverbActiveSelection( boolean value ){ setBooleanValue( MidiSettings.SYNTH_REVERB_ACTIVE, value ); } protected void updateSynthChorusActiveSelection( boolean value ){ setBooleanValue( MidiSettings.SYNTH_CHORUS_ACTIVE, value ); } protected void updateSoundfontsSelection(Table table){ List soundfonts = new ArrayList(); int count = table.getItemCount(); for( int i = 0 ; i < count; i ++ ){ TableItem item = table.getItem( i ); if( item.getData() instanceof String ){ soundfonts.add( item.getData() ); } } setSoundfonts( soundfonts ); } protected void update(){ this.save(); this.apply(); } } ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortImpl.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiO0000644000175000017500000000274711273045345033561 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth; import java.io.File; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiOutputPortImpl implements MidiOutputPort{ private String key; private String name; private MidiSynth synth; private MidiReceiverImpl receiver; private String soundFont; public MidiOutputPortImpl(MidiSynth synth,File soundfont){ this.key = getUniqueKey(soundfont); this.name = getUniqueName(soundfont); this.soundFont = soundfont.getAbsolutePath(); this.receiver = new MidiReceiverImpl(synth); this.synth = synth; } public void open(){ if(!this.synth.isConnected(this)){ this.synth.connect(this); } } public void close(){ if(this.synth.isConnected(this)){ this.synth.disconnect(this); } } public MidiReceiver getReceiver(){ this.open(); return this.receiver; } public void check(){ // Not implemented } public String getSoundFont() { return this.soundFont; } public String getKey(){ return this.key; } public String getName(){ return this.name; } public String getUniqueKey(File soundfont){ return ("tuxguitar-fluidsynth_" + soundfont.getAbsolutePath()); } private String getUniqueName(File soundfont){ String name = soundfont.getName(); int extensionIndex = name.lastIndexOf("."); if( extensionIndex > 0 ){ name = name.substring( 0, extensionIndex ); } return ("TG Fluidsynth " + "[" + name + "]"); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer0000644000175000017500000001361111273045346033520 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.midiport; import java.io.File; import javax.sound.midi.Instrument; import javax.sound.midi.MidiChannel; import javax.sound.midi.MidiSystem; import javax.sound.midi.Soundbank; import javax.sound.midi.Synthesizer; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiReceiver; import org.herac.tuxguitar.player.impl.jsa.assistant.SBAssistant; import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils; public class MidiPortSynthesizer implements MidiOutputPort{ private String key; private String name; private Synthesizer synthesizer; private MidiReceiver receiver; private boolean synthesizerLoaded; private boolean soundbankLoaded; public MidiPortSynthesizer(Synthesizer synthesizer){ this.key = synthesizer.getDeviceInfo().getName(); this.name = synthesizer.getDeviceInfo().getName(); this.synthesizer = synthesizer; this.receiver = new MidiPortSynthesizerReceiver(this); } public String getKey() { return this.key; } public String getName() { return this.name; } public void open(){ getSynthesizer(); } public void close(){ if(this.synthesizer != null && this.synthesizer.isOpen()){ this.unloadSoundbank(); this.synthesizer.close(); } } public MidiReceiver getReceiver(){ return this.receiver; } public void check() throws MidiPlayerException{ if(!isSynthesizerLoaded()){ throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.midi.unavailable")); } if(!isSoundbankLoaded( true )){ throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.soundbank.unavailable")); } } public Synthesizer getSynthesizer() { try { if(!this.synthesizer.isOpen()){ this.synthesizer.open(); if(!isSoundbankLoaded( false )){ String path = MidiConfigUtils.getSoundbankPath(); if(path != null){ this.loadSoundbank(new File(path)); } if(!isSoundbankLoaded( true )){ this.loadSoundbank( this.synthesizer.getDefaultSoundbank() ); } if(!isSoundbankLoaded( true )){ new SBAssistant(this).process(); } } } this.synthesizerLoaded = this.synthesizer.isOpen(); } catch (Throwable throwable) { throwable.printStackTrace(); } return this.synthesizer; } public boolean loadSoundbank(File file){ try { return loadSoundbank( MidiSystem.getSoundbank(file) ); }catch (Throwable throwable) { new MidiPlayerException(TuxGuitar.getProperty("jsa.error.soundbank.custom"),throwable).printStackTrace(); } return false; } public boolean loadSoundbank(Soundbank sb) { try { if (sb != null && getSynthesizer().isSoundbankSupported(sb)){ //unload the old soundbank this.unloadSoundbank(); //load all soundbank instruments this.soundbankLoaded = getSynthesizer().loadAllInstruments(sb); } }catch (Throwable throwable) { throwable.printStackTrace(); } return this.soundbankLoaded; } public void unloadSoundbank(){ try { this.soundbankLoaded = false; //unload all available instruments Instrument[] available = this.synthesizer.getAvailableInstruments(); if(available != null){ for(int i = 0; i < available.length; i++){ getSynthesizer().unloadInstrument(available[i]); } } //unload all loaded instruments Instrument[] loaded = this.synthesizer.getLoadedInstruments(); if(loaded != null){ for(int i = 0; i < loaded.length; i++){ getSynthesizer().unloadInstrument(loaded[i]); } } }catch (Throwable throwable) { throwable.printStackTrace(); } } public boolean isSynthesizerLoaded(){ return this.synthesizerLoaded; } public boolean isSoundbankLoaded(boolean checkSynth){ if( checkSynth ){ Instrument[] loaded = this.synthesizer.getLoadedInstruments(); Instrument[] available = this.synthesizer.getAvailableInstruments(); this.soundbankLoaded = ( (loaded != null && loaded.length > 0) || (available != null && available.length > 0) ); } return this.soundbankLoaded; } } class MidiPortSynthesizerReceiver implements MidiReceiver{ private MidiPortSynthesizer port; private MidiChannel[] channels; public MidiPortSynthesizerReceiver(MidiPortSynthesizer port){ this.port = port; } private MidiChannel[] getChannels(){ if(this.channels == null && this.port.getSynthesizer() != null){ this.channels = this.port.getSynthesizer().getChannels(); } return this.channels; } public void sendSystemReset(){ if(getChannels() != null){ for(int i = 0;i < getChannels().length; i ++){ getChannels()[i].resetAllControllers(); } } } public void sendAllNotesOff(){ if(getChannels() != null){ for(int channel = 0;channel < getChannels().length;channel ++){ sendControlChange(channel, MidiControllers.ALL_NOTES_OFF,0); } } } public void sendNoteOn(int channel, int key, int velocity){ if(getChannels() != null && channel >= 0 && channel < getChannels().length){ getChannels()[channel].noteOn(key, velocity); } } public void sendNoteOff(int channel, int key, int velocity){ if(getChannels() != null && channel >= 0 && channel < getChannels().length){ getChannels()[channel].noteOff(key, velocity); } } public void sendControlChange(int channel, int controller, int value){ if(getChannels() != null && channel >= 0 && channel < getChannels().length){ getChannels()[channel].controlChange(controller, value); } } public void sendProgramChange(int channel, int value){ if(getChannels() != null && channel >= 0 && channel < getChannels().length){ getChannels()[channel].programChange(value); } } public void sendPitchBend(int channel, int value){ if(getChannels() != null && channel >= 0 && channel < getChannels().length){ getChannels()[channel].setPitchBend( (value * 128) ); } } }tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java0000644000175000017500000001010011273045346032646 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.midiport; import javax.sound.midi.MidiDevice; import javax.sound.midi.Receiver; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiReceiver; import org.herac.tuxguitar.player.impl.jsa.utils.MidiMessageUtils; import org.herac.tuxguitar.util.TGSynchronizer; public class MidiPortOut implements MidiOutputPort { private String key; private String name; private MidiReceiverImpl receiver; public MidiPortOut(MidiDevice device){ this.key = device.getDeviceInfo().getName(); this.name = device.getDeviceInfo().getName(); this.receiver = new MidiReceiverImpl(device); } public MidiReceiver getReceiver(){ return this.receiver; } public void open() throws MidiPlayerException{ try { this.receiver.open(); } catch (Throwable throwable) { throw new MidiPlayerException(throwable.getMessage(),throwable); } } public void close() throws MidiPlayerException{ try { this.receiver.close(); } catch (Throwable throwable) { throw new MidiPlayerException(throwable.getMessage(),throwable); } } public void check() throws MidiPlayerException{ try { this.receiver.open(); } catch (Throwable throwable) { throw new MidiPlayerException(throwable.getMessage(),throwable); } } public String getKey() { return this.key; } public String getName() { return this.name; } } class MidiReceiverImpl implements MidiReceiver{ private MidiDevice device; private Receiver receiver; public MidiReceiverImpl(MidiDevice device){ this.device = device; } protected synchronized void open() throws Throwable{ if(!this.device.isOpen()){ final MidiDevice device = this.device; TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { device.open(); } }); } if(this.receiver == null){ final MidiDevice device = this.device; TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { setReceiver(device.getReceiver()); } }); } } protected synchronized void close() throws Throwable{ if(this.receiver != null){ final Receiver receiver = this.receiver; TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { receiver.close(); setReceiver(null); } }); } if(this.device.isOpen()){ final MidiDevice device = this.device; TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() throws Throwable { device.close(); } }); } } protected void setReceiver(Receiver receiver){ this.receiver = receiver; } protected Receiver getReceiver(){ return this.receiver; } public void sendSystemReset(){ if(getReceiver() != null){ getReceiver().send(MidiMessageUtils.systemReset(),-1); } } public void sendAllNotesOff(){ if(getReceiver() != null){ for(int channel = 0; channel < 16; channel ++){ getReceiver().send(MidiMessageUtils.controlChange(channel, MidiControllers.ALL_NOTES_OFF,0),-1); } } } public void sendNoteOn(int channel, int key, int velocity) { if(getReceiver() != null){ getReceiver().send(MidiMessageUtils.noteOn(channel, key, velocity),-1); } } public void sendNoteOff(int channel, int key, int velocity) { if(getReceiver() != null){ getReceiver().send(MidiMessageUtils.noteOff(channel, key, velocity),-1); } } public void sendControlChange(int channel, int controller, int value) { if(getReceiver() != null){ getReceiver().send(MidiMessageUtils.controlChange(channel,controller, value),-1); } } public void sendProgramChange(int channel, int value) { if(getReceiver() != null){ getReceiver().send(MidiMessageUtils.programChange(channel, value),-1); } } public void sendPitchBend(int channel, int value) { if(getReceiver() != null){ getReceiver().send(MidiMessageUtils.pitchBend(channel, value),-1); } } }././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImp0000644000175000017500000000337011273045346033432 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.midiport; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.Sequencer; import javax.sound.midi.Synthesizer; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiPortProviderImpl implements MidiOutputPortProvider{ public MidiPortProviderImpl(){ super(); } public List listPorts() throws MidiPlayerException{ try { List ports = new ArrayList(); MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); for(int i = 0; i < infos.length; i++){ try { Iterator it = ports.iterator(); boolean exists = false; while(it.hasNext()){ if( ((MidiOutputPort)it.next()).getKey().equals(infos[i].getName()) ){ exists = true; break; } } if(!exists){ MidiDevice device = MidiSystem.getMidiDevice(infos[i]); if(device.getMaxReceivers() == 0 || device instanceof Sequencer){ continue; } if(device instanceof Synthesizer){ ports.add(new MidiPortSynthesizer((Synthesizer)device)); } else{ ports.add(new MidiPortOut(device)); } } } catch (MidiUnavailableException e) { throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.midi.unavailable"),e); } } return ports; }catch (Throwable t) { throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.unknown"),t); } } public void closeAll() { // Not implemented } } tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiConfigUtils.java0000644000175000017500000001126211273045346033003 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.utils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.FileChooser; import org.herac.tuxguitar.gui.util.MessageDialog; public class MidiConfigUtils { public static final String SOUNDBANK_KEY = "soundbank.custom.path"; public static TGConfigManager getConfig(){ TGConfigManager config = new TGPluginConfigManager("tuxguitar-jsa"); config.init(); return config; } public static String getSoundbankPath(){ return getSoundbankPath(getConfig()); } public static String getSoundbankPath(final TGConfigManager config){ return config.getStringConfigValue(SOUNDBANK_KEY); } public static void setupDialog(Shell parent) { setupDialog(parent,getConfig()); } public static void setupDialog(Shell parent,final TGConfigManager config) { final String soundbank = getSoundbankPath(config); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("jsa.settings.title")); //------------------SOUNDBANK----------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("jsa.settings.soundbank.tip")); final Button sbDefault = new Button(group,SWT.RADIO); sbDefault.setText(TuxGuitar.getProperty("jsa.settings.soundbank.default")); sbDefault.setSelection( (soundbank == null) ); final Button sbCustom = new Button(group,SWT.RADIO); sbCustom.setText(TuxGuitar.getProperty("jsa.settings.soundbank.custom")); sbCustom.setSelection( (soundbank != null) ); Composite chooser = new Composite(group,SWT.NONE); chooser.setLayout(new GridLayout(2,false)); final Text sbCustomPath = new Text(chooser,SWT.BORDER); sbCustomPath.setLayoutData(new GridData(350,SWT.DEFAULT)); sbCustomPath.setText( (soundbank == null ? new String() : soundbank) ); final Button sbCustomChooser = new Button(chooser,SWT.PUSH); sbCustomChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); sbCustomChooser.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { String fileName = FileChooser.instance().open(dialog,FileChooser.ALL_FORMATS); if(fileName != null){ sbCustomPath.setText(fileName); } } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { String selection = ( sbCustom.getSelection() ? sbCustomPath.getText() : null); boolean changed = false; changed = (selection == null && soundbank != null); changed = changed || (selection != null && soundbank == null); changed = changed || (selection != null && !selection.equals(soundbank) ) ; if(changed){ if(selection != null){ config.setProperty(SOUNDBANK_KEY,selection); }else{ config.removeProperty(SOUNDBANK_KEY); } config.save(); MessageDialog.infoMessage(TuxGuitar.getProperty("warning"), TuxGuitar.getProperty("jsa.settings.soundbank-restart-message")); } dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiMessageUtils.java0000644000175000017500000000642011273045346033162 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.utils; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiMessage; import javax.sound.midi.ShortMessage; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiMessageUtils { public static final byte TICK_MOVE = 0x01; private static int fixValue(int value){ int fixedValue = value; fixedValue = Math.min(fixedValue,127); fixedValue = Math.max(fixedValue,0); return fixedValue; } private static int fixChannel(int channel){ int fixedChannel = channel; fixedChannel = Math.min(fixedChannel,15); fixedChannel = Math.max(fixedChannel,0); return fixedChannel; } public static MidiMessage noteOn(int channel,int note,int velocity){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.NOTE_ON, fixChannel(channel), fixValue(note), fixValue(velocity)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage noteOff(int channel,int note,int velocity){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.NOTE_OFF, fixChannel(channel), fixValue(note), fixValue(velocity)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage controlChange(int channel,int controller,int value){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.CONTROL_CHANGE,fixChannel(channel),fixValue(controller), fixValue(value)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage programChange(int channel,int instrument){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.PROGRAM_CHANGE, fixChannel(channel), fixValue(instrument), 0); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage pitchBend(int channel,int value){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.PITCH_BEND, fixChannel(channel), 0, fixValue(value)); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage systemReset(){ try { ShortMessage message = new ShortMessage(); message.setMessage(ShortMessage.SYSTEM_RESET); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage tempoInUSQ(int usq){ try { MetaMessage message = new MetaMessage(); message.setMessage(0x51, new byte[]{ (byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) }, 3); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } public static MidiMessage timeSignature(TGTimeSignature ts){ try { MetaMessage message = new MetaMessage(); message.setMessage(0x58, new byte[]{ (byte)ts.getNumerator(),(byte)ts.getDenominator().getIndex(),(byte)(96 / ts.getDenominator().getValue()),8 }, 4); return message; } catch (InvalidMidiDataException e) { e.printStackTrace(); } return null; } }tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBUrl.java0000644000175000017500000000050111273045346031604 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.assistant; import java.net.URL; public class SBUrl { private URL url; private String name; public SBUrl(URL url, String name){ this.url = url; this.name = name; } public URL getUrl() { return this.url; } public String getName() { return this.name; } } tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java0000644000175000017500000001154711273045346033027 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.assistant; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortSynthesizer; import org.herac.tuxguitar.util.TGSynchronizer; public class SBAssistant { public static final SBUrl[] URLS = new SBUrl[]{ new SBUrl(toURL("http://java.sun.com/products/java-media/sound/soundbank-min.gm.zip"),TuxGuitar.getProperty("jsa.soundbank-assistant.minimal")), new SBUrl(toURL("http://java.sun.com/products/java-media/sound/soundbank-mid.gm.zip"),TuxGuitar.getProperty("jsa.soundbank-assistant.medium")), new SBUrl(toURL("http://java.sun.com/products/java-media/sound/soundbank-deluxe.gm.zip"),TuxGuitar.getProperty("jsa.soundbank-assistant.deluxe")), }; private MidiPortSynthesizer synthesizer; public SBAssistant(MidiPortSynthesizer synthesizer){ this.synthesizer = synthesizer; } public void process(){ new Thread(new Runnable() { public void run() { try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { ConfirmDialog dialog = new ConfirmDialog(TuxGuitar.getProperty("jsa.soundbank-assistant.confirm-message")); dialog.setDefaultStatus( ConfirmDialog.STATUS_NO ); if (dialog.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO , ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_YES){ open(); } } }); } catch (Throwable e) { e.printStackTrace(); } } }).start(); } protected void open(){ final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); //------------------------------------------------------------------------------ Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(getGroupData()); group.setText(TuxGuitar.getProperty("jsa.soundbank-assistant.select")); final Button urls[] = new Button[ URLS.length ]; for(int i = 0; i < URLS.length ; i ++){ urls[i] = new Button(group, SWT.RADIO); urls[i].setText(URLS[i].getName()); urls[i].setData(URLS[i]); urls[i].setSelection(i == 0); } //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false)); Button buttonOk = new Button(buttons, SWT.PUSH); buttonOk.setText(TuxGuitar.getProperty("ok")); buttonOk.setLayoutData(getButtonsData()); buttonOk.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { URL url = getSelection(urls); dialog.dispose(); if(url != null ){ install(url); } } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonsData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOk ); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } protected GridData getGroupData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 250; return data; } protected GridData getButtonsData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected URL getSelection(Button[] buttons){ for(int i = 0; i < buttons.length ; i ++){ if( buttons[i].getSelection() && buttons[i].getData() instanceof SBUrl ){ return ((SBUrl)buttons[i].getData()).getUrl(); } } return null; } protected void install(URL url ){ new SBInstallerGui(url,this.synthesizer).open(); } private static URL toURL(String s){ try { return new URL(s); } catch (MalformedURLException e) { e.printStackTrace(); } return null; } } tuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstaller.java0000644000175000017500000000750711273045346033014 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.assistant; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortSynthesizer; import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils; public class SBInstaller { private static final String SB_PREFIX = "soundbank"; private static final String SB_EXTENSION = ".gm"; private boolean cancelled; private URL url; private File tmpPath; private File dstPath; private MidiPortSynthesizer synthesizer; private SBInstallerlistener listener; public SBInstaller(URL url,File tmpPath,File dstPath,MidiPortSynthesizer synthesizer, SBInstallerlistener listener){ this.url = url; this.tmpPath = tmpPath; this.dstPath = dstPath; this.synthesizer = synthesizer; this.listener = listener; this.cancelled = false; } public void process(){ File tmpFile = new File(this.tmpPath.getAbsolutePath() + File.separator + "soundbank.zip"); boolean success = download(this.url, tmpFile); if(success && !isCancelled()){ File sbFile = uncompress(tmpFile); if(!isCancelled() && sbFile != null){ install(sbFile); } } if( tmpFile.exists() ){ tmpFile.delete(); } this.listener.notifyFinish(); } private boolean download(URL url, File dst){ try{ this.listener.notifyProcess(TuxGuitar.getProperty("jsa.soundbank-assistant.process.downloading")); InputStream is = url.openStream(); OutputStream os = new FileOutputStream(dst); byte[] buffer = new byte[1024]; int length = 0; while(!isCancelled() && (length = is.read(buffer)) != -1 ){ os.write(buffer,0,length); } is.close(); os.flush(); os.close(); return true; }catch(Throwable throwable){ throwable.printStackTrace(); } return false; } private File uncompress(File file){ try{ this.listener.notifyProcess(TuxGuitar.getProperty("jsa.soundbank-assistant.process.uncompressing",new String[]{file.getAbsolutePath()})); if(file.exists()){ File soundbank = null; ZipInputStream is = new ZipInputStream(new FileInputStream(file)); ZipEntry entry = null; while( ( entry = is.getNextEntry() ) != null ){ String name = entry.getName(); if(name.indexOf(SB_PREFIX) == 0 && name.indexOf(SB_EXTENSION) == (name.length() - SB_EXTENSION.length())){ soundbank = new File(this.dstPath.getAbsolutePath() + File.separator + name); OutputStream os = new FileOutputStream(soundbank); byte[] buffer = new byte[1024]; int length = 0; while( (length = is.read(buffer)) != -1){ os.write(buffer,0,length); } os.flush(); os.close(); } } is.close(); return soundbank; } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } private void install(File file){ try { this.listener.notifyProcess(TuxGuitar.getProperty("jsa.soundbank-assistant.process.installing",new String[]{file.getAbsolutePath()})); if( ! this.synthesizer.loadSoundbank(file) ){ this.listener.notifyFailed(new MidiPlayerException(TuxGuitar.getProperty("jsa.error.soundbank.custom"))); return; } TGConfigManager config = MidiConfigUtils.getConfig(); config.setProperty(MidiConfigUtils.SOUNDBANK_KEY,file.getAbsolutePath()); config.save(); } catch (Throwable throwable) { throwable.printStackTrace(); } } public boolean isCancelled() { return this.cancelled; } public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerGui.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerGui.jav0000644000175000017500000001341311273045346033311 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.assistant; import java.io.File; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.ProgressBar; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.gui.util.TGFileUtils; import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortSynthesizer; import org.herac.tuxguitar.util.TGSynchronizer; public class SBInstallerGui implements SBInstallerlistener{ private static final String SB_PATH = ( TGFileUtils.PATH_USER_PLUGINS_CONFIG + File.separator + "tuxguitar-jsa" ); private Shell dialog; private Label progressLabel; private SBInstaller installer; public SBInstallerGui(URL url,MidiPortSynthesizer synthesizer){ initInstaller(url,synthesizer); } public void initInstaller(URL url,MidiPortSynthesizer synthesizer){ File tmpPath = new File(SB_PATH); File dstPath = new File(SB_PATH); if(!tmpPath.exists()){ tmpPath.mkdirs(); } if(!dstPath.exists()){ dstPath.mkdirs(); } this.installer = new SBInstaller(url,tmpPath,dstPath,synthesizer,this); } public void open(){ this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); this.dialog.setLayout(new GridLayout()); //----------------------------------------------------- Composite header = new Composite(this.dialog,SWT.NONE); header.setLayout(new GridLayout(2,false)); header.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); Label headerImage = new Label(header, SWT.NONE); headerImage.setImage(TuxGuitar.instance().getDisplay().getSystemImage(SWT.ICON_INFORMATION)); headerImage.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,false,false)); Label headerTip = new Label(header, SWT.WRAP); headerTip.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); headerTip.setText(TuxGuitar.getProperty("jsa.soundbank-assistant.process.tip")); FontData[] fontData = headerTip.getFont().getFontData(); for(int i = 0; i < fontData.length; i ++){ fontData[i].setStyle(SWT.BOLD); } final Font font = new Font(headerTip.getDisplay(),fontData); headerTip.setFont(font); headerTip.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent arg0) { font.dispose(); } }); //------------------PROGRESS-------------------------- Composite composite = new Composite(this.dialog,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final ProgressBar progressBar = new ProgressBar(composite, SWT.INDETERMINATE); progressBar.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); this.progressLabel = new Label(composite, SWT.WRAP); this.progressLabel.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true)); //------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(new GridLayout()); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false)); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { getInstaller().setCancelled(true); getDialog().dispose(); } }); this.process(); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } private void process(){ new Thread(new Runnable() { public void run() { if(!isDisposed()){ getInstaller().process(); } } }).start(); } public void notifyProcess(final String process){ if(!isDisposed()){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed()){ getProgressLabel().setText(process); } } }); } catch (Throwable e) { e.printStackTrace(); } } } public void notifyFinish(){ if(!isDisposed()){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed()){ getDialog().dispose(); } } }); } catch (Throwable e) { e.printStackTrace(); } } } public void notifyFailed(final Throwable throwable){ if(!isDisposed()){ try { TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() { public void run() { if(!isDisposed()){ getDialog().dispose(); MessageDialog.errorMessage( throwable ); } } }); } catch (Throwable e) { e.printStackTrace(); } } } public boolean isDisposed(){ return ( TuxGuitar.isDisposed() || getDialog().isDisposed() ); } public Shell getDialog() { return this.dialog; } public Label getProgressLabel() { return this.progressLabel; } public SBInstaller getInstaller() { return this.installer; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerlistener.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerlistene0000644000175000017500000000034111273045346033445 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.assistant; public interface SBInstallerlistener { public void notifyProcess(String process); public void notifyFinish(); public void notifyFailed(Throwable throwable); } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceLoader.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceLoader0000644000175000017500000000026411273045346033366 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.sequencer; import javax.sound.midi.Sequence; public interface MidiSequenceLoader { public void setSequence(Sequence sequence); } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandle0000644000175000017500000000476211273045346033362 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.sequencer; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MidiEvent; import javax.sound.midi.Sequence; import javax.sound.midi.Track; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.player.impl.jsa.utils.MidiMessageUtils; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGTimeSignature; public class MidiSequenceHandlerImpl extends MidiSequenceHandler{ private MidiSequenceLoader loader; private Sequence sequence; private Track[] midiTracks; public MidiSequenceHandlerImpl(MidiSequenceLoader loader,int tracks){ super(tracks); this.loader = loader; this.init(); } private void init(){ try { this.sequence = new Sequence(Sequence.PPQ,(int)TGDuration.QUARTER_TIME); this.midiTracks = new Track[getTracks()]; for (int i = 0; i < this.midiTracks.length; i++) { this.midiTracks[i] = this.sequence.createTrack(); } } catch (InvalidMidiDataException e) { e.printStackTrace(); } } public Sequence getSequence(){ return this.sequence; } public void addEvent(int track, MidiEvent event) { if(track >= 0 && track < this.midiTracks.length){ this.midiTracks[track].add(event); } } public void addControlChange(long tick,int track,int channel, int controller, int value) { addEvent(track,new MidiEvent(MidiMessageUtils.controlChange(channel, controller, value), tick )); } public void addNoteOff(long tick,int track,int channel, int note, int velocity) { addEvent(track,new MidiEvent(MidiMessageUtils.noteOff(channel, note, velocity), tick )); } public void addNoteOn(long tick,int track,int channel, int note, int velocity) { addEvent(track,new MidiEvent(MidiMessageUtils.noteOn(channel, note, velocity), tick )); } public void addPitchBend(long tick,int track,int channel, int value) { addEvent(track,new MidiEvent(MidiMessageUtils.pitchBend(channel, value), tick )); } public void addProgramChange(long tick,int track,int channel, int instrument) { addEvent(track,new MidiEvent(MidiMessageUtils.programChange(channel, instrument), tick )); } public void addTempoInUSQ(long tick,int track,int usq) { addEvent(track,new MidiEvent(MidiMessageUtils.tempoInUSQ(usq), tick )); } public void addTimeSignature(long tick,int track,TGTimeSignature ts) { addEvent(track,new MidiEvent(MidiMessageUtils.timeSignature(ts), tick )); } public void notifyFinish(){ this.loader.setSequence(getSequence()); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.j0000644000175000017500000000617311273045346033312 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.sequencer; import javax.sound.midi.MidiMessage; import javax.sound.midi.Receiver; import javax.sound.midi.ShortMessage; import org.herac.tuxguitar.player.base.MidiPlayerException; public class MidiReceiverImpl implements Receiver{ private MidiSequencerImpl sequencer; public MidiReceiverImpl(MidiSequencerImpl sequencer){ this.sequencer = sequencer; } public void send(MidiMessage message, long timeStamp) { try { if( this.sequencer.isRunning() ){ parseMessage(message.getMessage()); } } catch (MidiPlayerException e) { e.printStackTrace(); } } public void close(){ //not implemented } private void parseMessage(byte[] data) throws MidiPlayerException{ int length = data.length; //NOTE ON if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.NOTE_ON){ parseNoteOn(data); } //NOTE OFF else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.NOTE_OFF){ parseNoteOff(data); } //PROGRAM CHANGE else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.PROGRAM_CHANGE){ parseProgramChange(data); } //CONTROL CHANGE else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.CONTROL_CHANGE){ parseControlChange(data); } //PITCH BEND else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.PITCH_BEND){ parsePitchBend(data); } } private void parseNoteOn(byte[] data) throws MidiPlayerException{ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0; int value = (length > 1)?(data[1] & 0xFF):0; int velocity = (length > 2)?(data[2] & 0xFF):0; if(velocity == 0){ parseNoteOff(data); }else if(value > 0){ this.sequencer.getTransmitter().sendNoteOn(channel,value,velocity); } } private void parseNoteOff(byte[] data) throws MidiPlayerException{ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0; int value = (length > 1)?(data[1] & 0xFF):0; int velocity = (length > 2)?(data[2] & 0xFF):0; this.sequencer.getTransmitter().sendNoteOff(channel,value,velocity); } private void parseProgramChange(byte[] data) throws MidiPlayerException{ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1; int instrument = (length > 1)?(data[1] & 0xFF):-1; if(channel != -1 && instrument != -1){ this.sequencer.getTransmitter().sendProgramChange(channel,instrument); } } private void parseControlChange(byte[] data) throws MidiPlayerException{ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1; int control = (length > 1)?(data[1] & 0xFF):-1; int value = (length > 2)?(data[2] & 0xFF):-1; if(channel != -1 && control != -1 && value != -1){ this.sequencer.getTransmitter().sendControlChange(channel,control,value); } } private void parsePitchBend(byte[] data) throws MidiPlayerException{ int length = data.length; int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1; int value = (length > 2)?(data[2] & 0xFF):-1; if(channel != -1 && value != -1){ this.sequencer.getTransmitter().sendPitchBend(channel,value); } } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProvi0000644000175000017500000000315111273045346033437 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.sequencer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.Sequencer; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiSequencer; import org.herac.tuxguitar.player.base.MidiSequencerProvider; public class MidiSequencerProviderImpl implements MidiSequencerProvider{ public MidiSequencerProviderImpl(){ super(); } public List listSequencers() throws MidiPlayerException { try { List sequencers = new ArrayList(); MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); for(int i = 0; i < infos.length; i++){ try { Iterator it = sequencers.iterator(); boolean exists = false; while(it.hasNext()){ if( ((MidiSequencer)it.next()).getKey().equals(infos[i].getName()) ){ exists = true; break; } } if(!exists){ MidiDevice device = MidiSystem.getMidiDevice(infos[i]); if(device instanceof Sequencer){ sequencers.add(new MidiSequencerImpl((Sequencer)device)); } } } catch (MidiUnavailableException e) { throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.midi.unavailable"),e); } } return sequencers; }catch (Throwable t) { throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.unknown"),t); } } public void closeAll() throws MidiPlayerException { // Not implemented } } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.javatuxguitar-src-1.2/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.0000644000175000017500000001242511273045346033323 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.jsa.sequencer; import javax.sound.midi.Sequence; import javax.sound.midi.Sequencer; import javax.sound.midi.Track; import javax.sound.midi.Transmitter; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.player.base.MidiPlayerException; import org.herac.tuxguitar.player.base.MidiSequenceHandler; import org.herac.tuxguitar.player.base.MidiSequencer; import org.herac.tuxguitar.player.base.MidiTransmitter; public class MidiSequencerImpl implements MidiSequencer,MidiSequenceLoader{ private static final int TICK_MOVE = 1; private Object lock; private Sequencer sequencer; private Transmitter sequencerTransmitter; private MidiTransmitter transmitter; public MidiSequencerImpl(Sequencer sequencer){ this.lock = new Object(); this.sequencer = sequencer; } public synchronized void open() { try { if(!this.sequencer.isOpen()){ this.sequencer.open(); this.closeTransmitter(); this.openTransmitter(); } } catch (Throwable throwable) { throwable.printStackTrace(); } } public synchronized void close() { try { if(this.sequencer.isOpen()){ this.sequencer.close(); this.closeTransmitter(); } } catch (Throwable throwable) { throwable.printStackTrace(); } } public void openTransmitter(){ try { this.sequencerTransmitter = getSequencer().getTransmitter(); this.sequencerTransmitter.setReceiver( new MidiReceiverImpl(this) ); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void closeTransmitter(){ try { if(this.sequencerTransmitter != null){ this.sequencerTransmitter.close(); this.sequencerTransmitter = null; } } catch (Throwable throwable) { throwable.printStackTrace(); } } protected Sequencer getSequencer(boolean open) { if( open ){ this.open(); } return this.sequencer; } protected Sequencer getSequencer() { return this.getSequencer(true); } public MidiSequenceHandler createSequence(int tracks) { this.resetTracks(); return new MidiSequenceHandlerImpl(this,tracks); } public synchronized MidiTransmitter getTransmitter() { return this.transmitter; } public synchronized void setTransmitter(MidiTransmitter transmitter) { this.transmitter = transmitter; } public long getTickLength() { try { return getSequencer().getTickLength(); } catch (Throwable throwable) { throwable.printStackTrace(); } return 0; } public long getTickPosition() { try { return (getSequencer().getTickPosition() + TICK_MOVE); } catch (Throwable throwable) { throwable.printStackTrace(); } return 0; } public void setTickPosition(long tickPosition) { try { this.getSequencer().setTickPosition(tickPosition - TICK_MOVE); this.reset( false ); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void setMute(int index, boolean mute) { try { getSequencer().setTrackMute(index, mute); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void setSolo(int index, boolean solo) { try { getSequencer().setTrackSolo(index, solo); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void setSequence(Sequence sequence){ try { getSequencer().setSequence(sequence); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void start() { try { this.setRunning( true ); } catch (Throwable throwable) { throwable.printStackTrace(); } } public void stop() { try { this.setRunning( false ); } catch (Throwable throwable) { throwable.printStackTrace(); } } public boolean isRunning() { try { return ( getSequencer( false ) != null && getSequencer( false ).isRunning() ); } catch (Throwable throwable) { throwable.printStackTrace(); } return false; } public void setRunning( boolean running ) { try { synchronized ( this.lock ) { if( running && !this.isRunning() ){ this.getSequencer().start(); }else if( !running && this.isRunning() ){ this.getSequencer().stop(); this.reset( true ); } } } catch (Throwable throwable) { throwable.printStackTrace(); } } public void reset(boolean systemReset){ try { this.getTransmitter().sendAllNotesOff(); for(int channel = 0; channel < 16;channel ++){ this.getTransmitter().sendPitchBend(channel, 64); } if( systemReset ){ this.getTransmitter().sendSystemReset(); } } catch (Throwable throwable) { throwable.printStackTrace(); } } public void resetTracks(){ try { Sequence sequence = this.getSequencer().getSequence(); if(sequence != null){ Track[] tracks = sequence.getTracks(); if( tracks != null ){ int count = tracks.length; for( int i = 0 ; i < count; i++ ){ this.setSolo( i , false ); this.setMute( i , false ); } } } } catch (Throwable throwable) { throwable.printStackTrace(); } } public String getKey() { return this.sequencer.getDeviceInfo().getName(); } public String getName() { return this.sequencer.getDeviceInfo().getName(); } public void check() throws MidiPlayerException { this.getSequencer( true ); if( this.sequencer == null || !this.sequencer.isOpen() ){ throw new MidiPlayerException(TuxGuitar.getProperty("jsa.error.midi.unavailable")); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXML.java0000644000175000017500000000105411273045225030573 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord.xml; public class ChordXML { public static final String CHORD_LIST_TAG = "chords"; public static final String CHORD_TAG = "chord"; public static final String CHORD_NAME_ATTRIBUTE = "name"; public static final String CHORD_STRINGS_ATTRIBUTE = "strings"; public static final String CHORD_FIRST_FRET_ATTRIBUTE = "first-fret"; public static final String STRING_TAG = "string"; public static final String STRING_NUMBER_ATTRIBUTE = "number"; public static final String STRING_FRET_ATTRIBUTE = "fret"; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLReader.java0000644000175000017500000000565111273045225031725 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord.xml; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.song.models.TGChord; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class ChordXMLReader { public static List getChords(String fileName) { List chords = new ArrayList(); try{ File file = new File(fileName); if (file.exists()){ Document doc = getDocument(file); loadChords(doc.getFirstChild(),chords); } }catch(Exception e){ e.printStackTrace(); } return chords; } private static Document getDocument(File file) { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(file); } catch (SAXException sxe) { sxe.printStackTrace(); } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } return document; } /** * Read shortcuts from xml file * * @param shortcutsNode * @return */ private static void loadChords(Node chordsNode,List chords){ try{ NodeList chordList = chordsNode.getChildNodes(); for (int i = 0; i < chordList.getLength(); i++) { Node chordItem = chordList.item(i); if (chordItem.getNodeName().equals(ChordXML.CHORD_TAG)) { NamedNodeMap chordAttributes = chordItem.getAttributes(); String name = chordAttributes.getNamedItem(ChordXML.CHORD_NAME_ATTRIBUTE).getNodeValue(); String strings = chordAttributes.getNamedItem(ChordXML.CHORD_STRINGS_ATTRIBUTE).getNodeValue(); String firstFret = chordAttributes.getNamedItem(ChordXML.CHORD_FIRST_FRET_ATTRIBUTE).getNodeValue(); TGChord chord = TuxGuitar.instance().getSongManager().getFactory().newChord(Integer.parseInt(strings)); chord.setName(name); chord.setFirstFret(Integer.parseInt(firstFret)); NodeList stringList = chordItem.getChildNodes(); for (int j = 0; j < stringList.getLength(); j++) { Node stringItem = stringList.item(j); if (stringItem.getNodeName().equals(ChordXML.STRING_TAG)) { NamedNodeMap stringAttributes = stringItem.getAttributes(); String number = stringAttributes.getNamedItem(ChordXML.STRING_NUMBER_ATTRIBUTE).getNodeValue(); String fret = stringAttributes.getNamedItem(ChordXML.STRING_FRET_ATTRIBUTE).getNodeValue(); chord.addFretValue(Integer.parseInt(number),Integer.parseInt(fret)); } } chords.add(chord); } } }catch(Exception e){ chords.clear(); e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLWriter.java0000644000175000017500000000763511273045225032003 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.chord.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.herac.tuxguitar.song.models.TGChord; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Node; public class ChordXMLWriter { public static void setChords(List chords,String fileName) { File file = new File(fileName); Document doc = createDocument(); setChords(chords,doc); saveDocument(doc,file); } public static Document createDocument() { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.newDocument(); }catch (ParserConfigurationException pce) { pce.printStackTrace(); } return document; } public static void saveDocument(Document document,File file) { try { FileOutputStream fs = new FileOutputStream(file); // Write it out again TransformerFactory xformFactory = TransformerFactory.newInstance(); Transformer idTransform = xformFactory.newTransformer(); Source input = new DOMSource(document); Result output = new StreamResult(fs); idTransform.setOutputProperty(OutputKeys.INDENT, "yes"); idTransform.transform(input, output); } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } /** * Write chords to xml file */ private static void setChords(List chords,Document document){ //chords tag Node chordsNode = document.createElement(ChordXML.CHORD_LIST_TAG); Iterator it = chords.iterator(); while(it.hasNext()){ TGChord chord = (TGChord)it.next(); //chord tag Node chordNode = document.createElement(ChordXML.CHORD_TAG); chordsNode.appendChild(chordNode); //name attribute Attr nameAttr = document.createAttribute(ChordXML.CHORD_NAME_ATTRIBUTE); nameAttr.setNodeValue( chord.getName()); chordNode.getAttributes().setNamedItem(nameAttr); //strings attribute Attr stringsAttr = document.createAttribute(ChordXML.CHORD_STRINGS_ATTRIBUTE); stringsAttr.setNodeValue(Integer.toString(chord.getStrings().length)); chordNode.getAttributes().setNamedItem(stringsAttr); //first fret attribute Attr firstFretAttr = document.createAttribute(ChordXML.CHORD_FIRST_FRET_ATTRIBUTE); firstFretAttr.setNodeValue(Integer.toString(chord.getFirstFret())); chordNode.getAttributes().setNamedItem(firstFretAttr); for(int i = 0;i < chord.getStrings().length; i++){ //string tag Node stringNode = document.createElement(ChordXML.STRING_TAG); chordNode.appendChild(stringNode); //number attribute Attr numberAttr = document.createAttribute(ChordXML.STRING_NUMBER_ATTRIBUTE); numberAttr.setNodeValue(Integer.toString(i)); stringNode.getAttributes().setNamedItem(numberAttr); //fret attribute Attr fretAttr = document.createAttribute(ChordXML.STRING_FRET_ATTRIBUTE); fretAttr.setNodeValue(Integer.toString(chord.getFretValue(i))); stringNode.getAttributes().setNamedItem(fretAttr); } } document.appendChild(chordsNode); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/EditorKit.java0000644000175000017500000001531011273045225030645 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.edit; import java.util.Iterator; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.MenuListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.MouseTrackListener; import org.eclipse.swt.graphics.Point; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGString; public class EditorKit implements MouseListener,MouseMoveListener,MouseTrackListener,MenuListener{ public static final int MOUSE_MODE_SELECTION = 1; public static final int MOUSE_MODE_EDITION = 2; private int mouseMode; private boolean natural; private Tablature tablature; private MouseKit mouseKit; private Point position; private boolean menuOpen; public EditorKit(Tablature tablature){ this.tablature = tablature; this.mouseKit = new MouseKit(this); this.position = new Point(0,0); this.menuOpen = false; this.tablature.addMouseListener(this); this.tablature.addMouseMoveListener(this); this.tablature.addMouseTrackListener(this); this.setDefaults(); } private void setDefaults(){ this.setMouseMode(TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.EDITOR_MOUSE_MODE,MOUSE_MODE_EDITION)); this.setNatural(TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.EDITOR_NATURAL_KEY_MODE,true)); } public int getMouseMode() { return this.mouseMode; } public void setMouseMode(int mouseMode) { this.mouseMode = mouseMode; } public boolean isNatural() { return this.natural; } public void setNatural(boolean natural) { this.natural = natural; } public Tablature getTablature() { return this.tablature; } public void tryBack(){ this.mouseKit.tryBack(); } public boolean select() { int x = this.position.x; int y = this.position.y; if(x >= 0 && y >= 0){ TGTrackImpl track = findSelectedTrack(y); if (track != null) { TGMeasureImpl measure = findSelectedMeasure(track, x, y); if (measure != null) { TGBeat beat = findSelectedBeat(measure, x); TGString tgString = findSelectedString(measure, y); if (beat != null) { int string = (tgString != null)?tgString.getNumber():getTablature().getCaret().getSelectedString().getNumber(); getTablature().getCaret().moveTo(track, measure, beat, string); } return true; } } } return false; } private boolean isScoreEnabled(){ return ( (getTablature().getViewLayout().getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ); } public TGTrackImpl findSelectedTrack(int y){ ViewLayout layout = getTablature().getViewLayout(); int number = layout.getTrackNumberAt(y); if(number >= 0){ return (TGTrackImpl)layout.getSongManager().getTrack(number); } return null; } public TGMeasureImpl findSelectedMeasure(TGTrackImpl track,int x,int y){ TGMeasureImpl measure = null; int minorDistance = 0; Iterator it = track.getMeasures(); while(it.hasNext()){ TGMeasureImpl m = (TGMeasureImpl)it.next(); if(!m.isOutOfBounds() && m.getTs() != null){ boolean isAtX = (x >= m.getPosX() && x <= m.getPosX() + m.getWidth(getTablature().getViewLayout()) + m.getSpacing()); if(isAtX){ int measureHeight = m.getTs().getSize(); int distanceY = Math.min(Math.abs(y - (m.getPosY())),Math.abs(y - ( m.getPosY() + measureHeight - 10))); if(measure == null || distanceY < minorDistance){ measure = m; minorDistance = distanceY; } } } } return measure; } public TGBeatImpl findSelectedBeat(TGMeasureImpl measure, int x){ int voice = getTablature().getCaret().getVoice(); int posX = measure.getHeaderImpl().getLeftSpacing(getTablature().getViewLayout()) + measure.getPosX(); int bestDiff = -1; TGBeatImpl bestBeat = null; Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeatImpl beat = (TGBeatImpl)it.next(); if(!beat.getVoice(voice).isEmpty()){ int diff = Math.abs(x - (posX + (beat.getPosX() + beat.getSpacing()))); if(bestDiff == -1 || diff < bestDiff){ bestBeat = beat; bestDiff = diff; } } } if( bestBeat == null ){ bestBeat = (TGBeatImpl)getTablature().getViewLayout().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats()); } return bestBeat; } public TGString findSelectedString(TGMeasureImpl measure,int y) { TGString string = null; int stringSpacing = getTablature().getViewLayout().getStringSpacing(); int minorDistance = 0; int firstStringY = measure.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE); Iterator it = measure.getTrack().getStrings().iterator(); while(it.hasNext()){ TGString currString = (TGString)it.next(); int distanceX = Math.abs(y - (firstStringY + ((currString.getNumber() * stringSpacing) - stringSpacing))); if(string == null || distanceX < minorDistance){ string = currString; minorDistance = distanceX; } } return string; } public void mouseDown(MouseEvent e) { this.position.x = e.x; this.position.y = e.y; } public void mouseUp(MouseEvent e) { this.position.x = e.x; this.position.y = e.y; this.tablature.setFocus(); if(select()){ TuxGuitar.instance().updateCache(true); if(!this.menuOpen && e.button == 1 && !TuxGuitar.instance().getPlayer().isRunning() && isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION){ this.mouseKit.mouseUp(e); } } } public void mouseMove(MouseEvent e) { if(!this.menuOpen && !TuxGuitar.instance().getPlayer().isRunning()){ if(isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION){ this.mouseKit.mouseMove(e); } } } public void mouseExit(MouseEvent e) { if(!this.menuOpen && !TuxGuitar.instance().getPlayer().isRunning()){ if(isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION){ this.mouseKit.mouseExit(); } } } public void menuShown(MenuEvent e) { this.menuOpen = true; this.select(); TuxGuitar.instance().updateCache(true); } public void menuHidden(MenuEvent e){ this.menuOpen = false; TuxGuitar.instance().updateCache(true); } public void mouseDoubleClick(MouseEvent e) { //not implemented } public void mouseEnter(MouseEvent e) { //not implemented } public void mouseHover(MouseEvent e) { //not implemented } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/MouseKit.java0000644000175000017500000003200111273045225030503 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.edit; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGNoteImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing; import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl; import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGBeat; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGString; import org.herac.tuxguitar.song.models.TGTrack; import org.herac.tuxguitar.song.models.TGVoice; public class MouseKit { private static final int FIRST_LINE_VALUES[] = new int[] {65,45,52,55}; private EditorKit kit; private Image back = null; private int lastx; private int lasty; public MouseKit(EditorKit kit){ this.kit = kit; } private ViewLayout.TrackPosition getTrackPosition(int y) { return this.kit.getTablature().getViewLayout().getTrackPositionAt(y); } public void tryBack(){ if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked() && !this.kit.getTablature().isPainting()){ TGPainter painter = new TGPainter(new GC(this.kit.getTablature())); if(this.back != null && !this.back.isDisposed()){ painter.drawImage(this.back,this.lastx,this.lasty); } painter.dispose(); } if(this.back != null){ this.back.dispose(); } } public void mouseExit() { tryBack(); } public void mouseMove(MouseEvent e) { this.tryBack(); if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked() && !this.kit.getTablature().isPainting()){ TGTrackImpl track = this.kit.findSelectedTrack(e.y); if (track != null) { TGMeasureImpl measure = this.kit.findSelectedMeasure(track,e.x,e.y); if(measure != null && measure.getTs() != null){ float scale = this.kit.getTablature().getViewLayout().getScale(); int minValue = track.getString(track.stringCount()).getValue(); int maxValue = track.getString(1).getValue() + 29; //Max frets = 29 int tempValue = FIRST_LINE_VALUES[measure.getClef() - 1]; int lineSpacing = this.kit.getTablature().getViewLayout().getScoreLineSpacing(); int width = (int)(10.0f * scale); int topHeight = measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); int bottomHeight = (measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_DOWN_LINES)); int x1 = (int)(e.x - (width / 2.0f)); int x2 = (int)(e.x + (width / 2.0f)); int y1 = (measure.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); int y2 = (y1 + (lineSpacing * 5)); if(e.y < (y1 + 3) && e.y >= (y1 - topHeight)){ this.back = new Image(TuxGuitar.instance().getDisplay(),width + 1,topHeight + 1); TGPainter painter = new TGPainter(new GC(this.kit.getTablature())); painter.copyArea(this.back,x1, (y1 - topHeight)); painter.setForeground(this.kit.getTablature().getViewLayout().getResources().getLineColor()); for(int y = (y1 - lineSpacing); y >= (y1 - topHeight); y -= lineSpacing){ tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1; tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1; if(y < e.y - 5 || tempValue > maxValue){ break; } painter.initPath(); painter.setAntialias(false); painter.moveTo(x1, y); painter.lineTo(x2, y); painter.closePath(); } painter.dispose(); this.lastx = x1; this.lasty = (y1 - topHeight); }else if(e.y > (y2 - 3) && e.y < y2 + bottomHeight){ this.back = new Image(TuxGuitar.instance().getDisplay(),width + 1,bottomHeight + 1); TGPainter painter = new TGPainter(new GC(this.kit.getTablature())); painter.copyArea(this.back,x1, y2); painter.setForeground(this.kit.getTablature().getViewLayout().getResources().getLineColor()); tempValue -= 14; for(int y = y2; y <= (y2 + bottomHeight); y += lineSpacing){ if(tempValue > 0){ tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1; tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1; if(y > e.y + 5 || tempValue < minValue){ break; } painter.initPath(); painter.setAntialias(false); painter.moveTo(x1, y); painter.lineTo(x2, y); painter.closePath(); } } painter.dispose(); this.lastx = x1; this.lasty = y2; } } } } } public void mouseUp(MouseEvent e) { if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked() && !this.kit.getTablature().isPainting()){ ActionLock.lock(); ViewLayout.TrackPosition pos = getTrackPosition(e.y) ; if(pos != null){ TGTrackImpl track = this.kit.getTablature().getCaret().getTrack(); TGMeasureImpl measure = this.kit.getTablature().getCaret().getMeasure(); if(measure.getTs() != null){ int minValue = track.getString(track.stringCount()).getValue(); int maxValue = track.getString(1).getValue() + 29; //Max frets = 29 int lineSpacing = this.kit.getTablature().getViewLayout().getScoreLineSpacing(); int topHeight = measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); int bottomHeight = (measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_DOWN_LINES)); int y1 = (pos.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); int y2 = (y1 + (lineSpacing * 5)); if(e.y >= (y1 - topHeight) && e.y < (y2 + bottomHeight)){ int value = 0; int tempValue = FIRST_LINE_VALUES[measure.getClef() - 1]; double limit = (topHeight / (lineSpacing / 2.00)); for(int i = 0;i < limit;i ++){ tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1; } float minorDistance = 0; for(float y = (y1 - topHeight); y <= (y2 + bottomHeight); y += (lineSpacing / 2.00)){ if(tempValue > 0){ float distanceY = Math.abs(e.y - y); if(value == 0 || distanceY < minorDistance){ value = tempValue; minorDistance = distanceY; } tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1; } } if(value >= minValue && value <= maxValue){ TGVoiceImpl beat = findBestVoice(measure, e.x); if(beat != null){ value = getRealValue(value); if(!removeNote(value,beat)){ makeNote(beat, getRealStart(beat, e.x), value); } } redrawTablature(); } } } } ActionLock.unlock(); } } private long getRealStart(TGVoiceImpl voice,int x){ if(voice.isEmpty()){ return voice.getBeat().getStart(); } TGMeasureImpl measure = voice.getBeatImpl().getMeasureImpl(); long beatX = (measure.getHeaderImpl().getLeftSpacing( this.kit.getTablature().getViewLayout() ) + measure.getPosX() + voice.getBeatImpl().getPosX() + voice.getBeatImpl().getSpacing()); long beatStart = voice.getBeat().getStart(); long beatLength = voice.getDuration().getTime(); long beatEnd = ( beatStart + beatLength ); if(x > beatX){ return Math.min( ( beatStart + ( (x - beatX) * beatLength / voice.getWidth() ) ), (beatEnd - 1 ) ); } return beatStart; } private int getRealValue(int value){ int realValue = value; int key = this.kit.getTablature().getCaret().getMeasure().getKeySignature(); if(key <= 7){ if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_SHARP_NOTES[realValue % 12]] == TGMeasureImpl.SHARP && this.kit.isNatural()){ realValue ++; } else if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_SHARP_NOTES[realValue % 12]] != TGMeasureImpl.SHARP && !this.kit.isNatural()){ if(TGMeasureImpl.ACCIDENTAL_NOTES[(realValue + 1) % 12]){ realValue ++; } } }else if(key > 7 ){ if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_FLAT_NOTES[realValue % 12]] == TGMeasureImpl.FLAT && this.kit.isNatural()){ realValue --; } else if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_FLAT_NOTES[realValue % 12]] != TGMeasureImpl.FLAT && !this.kit.isNatural()){ if(TGMeasureImpl.ACCIDENTAL_NOTES[(realValue - 1) % 12]){ realValue --; } } } return realValue; } private boolean removeNote(int value,TGVoice voice) { Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNoteImpl note = (TGNoteImpl) it.next(); if (note.getRealValue() == value) { //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGSongManager manager = this.kit.getTablature().getSongManager(); manager.getMeasureManager().removeNote(note); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); return true; } } return false; } private void makeNote(TGVoice voice, long start, int value){ Caret caret = this.kit.getTablature().getCaret(); TGSongManager manager = this.kit.getTablature().getSongManager(); TGTrack track = caret.getTrack(); int string = findBestString(track,voice,value); if(string > 0){ //comienza el undoable UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo(); TGNote note = manager.getFactory().newNote(); note.setValue((value - track.getString(string).getValue())); note.setVelocity(caret.getVelocity()); note.setString(string); TGDuration duration = manager.getFactory().newDuration(); caret.getDuration().copy(duration); manager.getMeasureManager().addNote(voice.getBeat(),note,duration, start, voice.getIndex()); caret.moveTo(caret.getTrack(),caret.getMeasure(),note.getVoice().getBeat(),note.getString()); //termia el undoable TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); //reprodusco las notas en el pulso caret.getSelectedBeat().play(); } } private void redrawTablature(){ Caret caret = this.kit.getTablature().getCaret(); this.kit.getTablature().getViewLayout().fireUpdate(caret.getMeasure().getNumber()); TuxGuitar.instance().updateCache(true); } private int findBestString(TGTrack track,TGVoice voice,int value){ List strings = new ArrayList(); for(int number = 1;number <= track.stringCount();number++){ boolean used = false; TGString string = track.getString(number); Iterator it = voice.getNotes().iterator(); while (it.hasNext()) { TGNote note = (TGNote) it.next(); if(note.getString() == string.getNumber()){ used = true; } } if(!used){ strings.add(string); } } int minFret = -1; int stringForValue = 0; for(int i = 0;i < strings.size();i++){ TGString string = (TGString)strings.get(i); int fret = value - string.getValue(); if((fret >= 0) && (minFret < 0 || fret < minFret)){ stringForValue = string.getNumber(); minFret = fret; } } return stringForValue; } public TGVoiceImpl findBestVoice(TGMeasureImpl measure, int x){ int voiceIndex = this.kit.getTablature().getCaret().getVoice(); int posX = measure.getHeaderImpl().getLeftSpacing( this.kit.getTablature().getViewLayout() ) + measure.getPosX(); int bestDiff = -1; TGVoiceImpl bestVoice = null; TGDuration duration = this.kit.getTablature().getCaret().getDuration(); Iterator it = measure.getBeats().iterator(); while(it.hasNext()){ TGBeatImpl beat = (TGBeatImpl)it.next(); TGVoiceImpl voice = beat.getVoiceImpl( voiceIndex ); if(!voice.isEmpty()){ int x1 = (beat.getPosX() + beat.getSpacing()); int x2 = (x1 + voice.getWidth()); long increment = voice.getWidth(); if(voice.isRestVoice()){ increment = (duration.getTime() * voice.getWidth() / voice.getDuration().getTime()); } for( int beatX = x1 ; beatX < x2 ; beatX += increment ){ int diff = Math.abs(x - (posX + beatX)); if(bestDiff == -1 || diff < bestDiff){ bestVoice = voice; bestDiff = diff; } } } } if( bestVoice == null ){ TGBeat beat = this.kit.getTablature().getViewLayout().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats()); if( beat != null ){ bestVoice = (TGVoiceImpl)beat.getVoice(voiceIndex); } } return bestVoice; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/LinearViewLayout.java0000644000175000017500000001174011273045225032605 0ustar julianjulian/* * Created on 04-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab.layout; import java.util.Iterator; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing; import org.herac.tuxguitar.gui.editors.tab.Tablature; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class LinearViewLayout extends ViewLayout{ public LinearViewLayout(Tablature tablature,int style){ super(tablature,style); } public int getMode(){ return MODE_LINEAR; } public void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY) { this.setWidth(0); this.setHeight(0); this.clearTrackPositions(); int style = getStyle(); int number = ((style & ViewLayout.DISPLAY_MULTITRACK) == 0?getTablature().getCaret().getTrack().getNumber():-1); int posY = fromY + getFirstTrackSpacing(); int height = getFirstTrackSpacing(); int trackHeight; Iterator tracks = getSongManager().getSong().getTracks(); while(tracks.hasNext()){ TGTrackImpl track = (TGTrackImpl) tracks.next(); if(number < 0 || track.getNumber() == number){ TGTrackSpacing ts = new TGTrackSpacing(this) ; ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0)); ((TGLyricImpl)track.getLyrics()).start(); //------AUTO_SPACING--------------------------------------- int maxY = 0; int minY = 0; // Need to score extra-lines in edition mode if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){ maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4)); minY = -(getScoreLineSpacing() * 3); } Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasureImpl measure = (TGMeasureImpl)measures.next(); maxY = (measure.getMaxY() > maxY)?measure.getMaxY():maxY; minY = (measure.getMinY() < minY)?measure.getMinY():minY; measure.registerSpacing(this,ts); } ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, ( (style & DISPLAY_SCORE) != 0 ?Math.abs(minY):0)); if((style & DISPLAY_SCORE) != 0 && maxY + getMinScoreTabSpacing() > getScoreSpacing()){ ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (maxY - (getScoreLineSpacing() * 4)) ); } if((style & DISPLAY_TABLATURE) != 0){ ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(minY), getStringSpacing()) )); ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ? track.getTabHeight() + getStringSpacing() + 1 : Math.max(maxY, track.getTabHeight() + getStringSpacing() + 1) )); } ts.setSize(TGTrackSpacing.POSITION_LYRIC,10); checkDefaultSpacing(ts); //---------------------------------------------------- paintMeasures(track,painter,fromX,posY,ts,clientArea); paintLines(track,ts,painter,fromX + (getWidth() + 2),posY,(clientArea.width - (fromX + getWidth()) )); trackHeight = ts.getSize(); addTrackPosition(track.getNumber(),posY,trackHeight); posY += trackHeight + getTrackSpacing(); height += trackHeight + getTrackSpacing(); } } if(getWidth() > clientArea.width){ // solo para dar un espacio. this.setWidth( getWidth() + getFirstMeasureSpacing()); } this.setHeight(height); this.paintCaret(painter); } public void paintMeasures(TGTrackImpl track,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,Rectangle clientArea) { int posX = (fromX + getFirstMeasureSpacing()); int posY = fromY; int width = getFirstMeasureSpacing(); Iterator measures = track.getMeasures(); while(measures.hasNext()){ TGMeasureImpl measure = (TGMeasureImpl)measures.next(); //asigno la posicion dentro del compas measure.setPosX(posX); measure.setPosY(posY); measure.setTs(ts); ((TGLyricImpl)track.getLyrics()).setCurrentMeasure(measure); //Solo pinto lo que entre en pantalla boolean isAtX = ((posX + measure.getWidth(this)) > clientArea.x - 100 && posX < clientArea.x + clientArea.width + measure.getWidth(this) + 100); boolean isAtY = (posY + ts.getSize() > clientArea.y && posY < clientArea.y + clientArea.height + 80); if(isAtX && isAtY){ paintMeasure(measure,painter,0); ((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,measure,posX, posY); }else{ measure.setOutOfBounds(true); } int measureWidth = measure.getWidth(this); posX += measureWidth; width += measureWidth; } this.setWidth(Math.max(getWidth(),width)); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PageViewLayout.java0000644000175000017500000001762711273045225032261 0ustar julianjulian/* * Created on 04-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab.layout; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class PageViewLayout extends ViewLayout{ private static final int STATIC_WIDTH = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.LAYOUT_PAGE_FORCE_WIDTH, 0); private int maximumWidth; private int marginLeft; private int marginRight; public PageViewLayout(Tablature tablature,int style){ super(tablature,style); } public int getMode(){ return MODE_PAGE; } public void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY) { this.maximumWidth = STATIC_WIDTH; this.marginLeft = getFirstMeasureSpacing(); this.marginRight = 10; this.setWidth(0); this.setHeight(0); this.clearTrackPositions(); int style = getStyle(); int number = ((style & ViewLayout.DISPLAY_MULTITRACK) == 0?getTablature().getCaret().getTrack().getNumber():-1); int posY = fromY + getFirstTrackSpacing(); int height = getFirstTrackSpacing(); int lineHeight = 0; int measureCount = getSongManager().getSong().countMeasureHeaders(); int nextMeasureIndex = 0; while(measureCount > nextMeasureIndex){ TempLine line = null; Iterator tracks = getSongManager().getSong().getTracks(); while(tracks.hasNext()){ TGTrackImpl track = (TGTrackImpl) tracks.next(); if(number < 0 || track.getNumber() == number){ TGTrackSpacing ts = new TGTrackSpacing(this) ; ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0)); if(nextMeasureIndex == 0){ ((TGLyricImpl)track.getLyrics()).start(); } line = getTempLines(track,nextMeasureIndex,ts); if( (style & DISPLAY_SCORE) != 0 ){ ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY)); if(line.maxY + getMinScoreTabSpacing() > getScoreSpacing()){ ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - (getScoreLineSpacing() * 4)) ); } } if((style & DISPLAY_TABLATURE) != 0){ ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) )); ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ? track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) )); } ts.setSize(TGTrackSpacing.POSITION_LYRIC,10); checkDefaultSpacing(ts); paintLine(track,line,painter,fromX,posY,ts,clientArea); lineHeight = ts.getSize(); addTrackPosition(track.getNumber(),posY,lineHeight); int emptyX = (this.marginLeft + fromX + line.tempWith + 2); int emptyWith = ( getMaxWidth() - emptyX ); if((emptyWith - 20) > 0 && (line.lastIndex + 1) >= measureCount){ if(emptyX < (clientArea.x + clientArea.width)){ emptyX = (emptyX < clientArea.x ? clientArea.x :emptyX); emptyWith = ( emptyWith > clientArea.width ? clientArea.width : emptyWith ); paintLines(track,ts,painter, emptyX ,posY, emptyWith); } } posY += lineHeight + getTrackSpacing(); height += lineHeight + getTrackSpacing(); } } if(line != null){ nextMeasureIndex = line.lastIndex + 1; } } this.setHeight(height); this.setWidth( getWidth() + this.marginRight ); this.paintCaret(painter); } public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,Rectangle clientArea) { int posX = (this.marginLeft + fromX); int posY = fromY; int width = this.marginLeft; //verifico si esta en el area de cliente boolean isAtY = (posY + ts.getSize() > clientArea.y && posY < clientArea.y + clientArea.height + 80); int measureSpacing = 0; if(line.fullLine){ int diff = ( getMaxWidth() - line.tempWith); if(diff != 0 && line.measures.size() > 0){ measureSpacing = diff / line.measures.size(); } } for(int i = 0;i < line.measures.size();i ++){ int index = ((Integer)line.measures.get(i)).intValue(); TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index); //asigno la posicion dentro del compas currMeasure.setPosX(posX); currMeasure.setPosY(posY); currMeasure.setTs(ts); ((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure); currMeasure.setFirstOfLine(i == 0); int measureWidth = ( currMeasure.getWidth(this) + measureSpacing ); boolean isAtX = ( posX + measureWidth > clientArea.x && posX < clientArea.x + clientArea.width); if(isAtX && isAtY){ paintMeasure(currMeasure,painter,measureSpacing); ((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY); }else{ currMeasure.setOutOfBounds(true); } posX += measureWidth; width += measureWidth; } this.setWidth(Math.max(getWidth(),width)); } public TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) { int style = getStyle(); TempLine line = new TempLine(); line.maxY = 0; line.minY = 0; // Need to score extra-lines in edition mode if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){ line.maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4)); line.minY = -(getScoreLineSpacing() * 3); } int measureCount = track.countMeasures(); for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) { TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(measureIdx); //verifico si tengo que bajar de linea if((line.tempWith + measure.getWidth(this)) >= getMaxWidth() && !line.measures.isEmpty()){ line.fullLine = true; return line; } line.tempWith += measure.getWidth(this); line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY; line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY; line.addMeasure(measureIdx); measure.registerSpacing(this,ts); } return line; } public int getMaxWidth(){ if(this.maximumWidth <= 0){ int marginLeft = 0; int marginRight = 0; int monitorWidth = getTablature().getMonitor().getClientArea().width; Rectangle tablatureArea = getTablature().getClientArea(); Composite parent = getTablature().getParent(); while( parent != null ){ Rectangle parentArea = parent.getClientArea(); parent = parent.getParent(); if( parent == null ){ marginRight = ( parentArea.width - (marginLeft + tablatureArea.width ) ); }else{ marginLeft += parentArea.x ; } } this.maximumWidth = (monitorWidth - ( marginLeft + marginRight ) ); } return (this.maximumWidth - (this.marginLeft + this.marginRight)); } private class TempLine{ protected int tempWith; protected int lastIndex; protected boolean fullLine; protected int maxY = 0; protected int minY = 0; protected List measures; public TempLine(){ this.measures = new ArrayList(); } protected void addMeasure(int index){ this.measures.add(new Integer(index)); this.lastIndex = index; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PrinterViewLayout.java0000644000175000017500000004441611273045225033024 0ustar julianjulian/* * Created on 04-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab.layout; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.TGChordImpl; import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.printer.PrintDocument; import org.herac.tuxguitar.gui.printer.PrintStyles; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGTrack; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class PrinterViewLayout extends ViewLayout{ private static final int DEFAULT_SCORE_LINE_SPACING = 7; private static final int DEFAULT_STRING_SPACING = 8; private static final int DEFAULT_HORIZONTAL_SPACING = 15; private static final int MIN_SCORE_TAB_SPACING = 15; private static final int DEFAULT_TRACK_SPACING = 5; private static final int DEFAULT_FIRST_TRACK_SPACING = DEFAULT_TRACK_SPACING; private static final int DEFAULT_MIN_BUFFER_SEPARATOR = 15; private static final int DEFAULT_MIN_TOP_SPACING = 20; private static final int CHORD_FRET_INDEX_SPACING = 8; private static final int CHORD_STRING_SPACING = 4; private static final int CHORD_FRET_SPACING = 5; private PrintStyles styles; private PrintDocument document; private int page; private Font songNameFont; private Font trackNameFont; private Font songAuthorFont; public PrinterViewLayout(Tablature tablature,PrintStyles styles, float scale){ super(tablature,( styles.getStyle() | DISPLAY_COMPACT ), scale ); this.styles = styles; } protected void init( float scale ){ this.setBufferEnabled(false); this.setFirstMeasureSpacing( getScaledValue(scale , DEFAULT_HORIZONTAL_SPACING ) ); this.setMinBufferSeparator( getScaledValue(scale , DEFAULT_MIN_BUFFER_SEPARATOR ) ); this.setMinTopSpacing( getScaledValue(scale , DEFAULT_MIN_TOP_SPACING ) ); this.setMinScoreTabSpacing( getScaledValue(scale , MIN_SCORE_TAB_SPACING ) ); this.setScoreLineSpacing( getScaledValue(scale , DEFAULT_SCORE_LINE_SPACING , 4) ); this.setScoreSpacing( (( getScoreLineSpacing() * 4) + getMinScoreTabSpacing() ) ); this.setFirstTrackSpacing( getScaledValue(scale , DEFAULT_FIRST_TRACK_SPACING ) ); this.setTrackSpacing( getScaledValue(scale , DEFAULT_TRACK_SPACING ) ); this.setStringSpacing( getScaledValue(scale , DEFAULT_STRING_SPACING , 4) ); this.setChordFretIndexSpacing( getScaledValue(scale , CHORD_FRET_INDEX_SPACING, 2 ) ); this.setChordStringSpacing( getScaledValue(scale , CHORD_STRING_SPACING, 2 ) ); this.setChordFretSpacing( getScaledValue(scale , CHORD_FRET_SPACING , 2 ) ); this.setChordNoteSize(getScaledValue(scale , 3 , 2 )); this.setRepeatEndingSpacing( getScaledValue(scale , 20 ) ); this.setTextSpacing( getScaledValue( scale, 15 ) ); this.setMarkerSpacing( getScaledValue( scale, 15 ) ); this.setDivisionTypeSpacing( getScaledValue( scale, 10 ) ); this.setEffectSpacing( getScaledValue(scale , 8 ) ); this.setScale( checkScale() ); this.setFontScale( scale ); // Initialize Tablature Defaults this.getTablature().setViewLayout( this ) ; this.getTablature().initDefaults(); FontData[] fd = this.getResources().getPrinterDefaultFont().getFontData(); String fontName = (fd != null && fd.length > 0 ? fd[0].getName() : new String()); this.songNameFont = new Font(getTablature().getDisplay(),fontName,Math.round(16.0f * getFontScale()), SWT.BOLD | SWT.CENTER); this.trackNameFont = new Font(getTablature().getDisplay(),fontName,Math.round(8.0f * getFontScale()), SWT.BOLD | SWT.CENTER); this.songAuthorFont = new Font(getTablature().getDisplay(),fontName,Math.round(8.0f * getFontScale()), SWT.BOLD | SWT.CENTER); } public int getMode(){ return 0; } public void makeDocument(PrintDocument document){ this.page = 0; this.document = document; this.makeDocument(); } private void makeDocument(){ this.document.start(); this.openPage(); paintHeader(this.document.getPainter()); paintSong(this.document.getPainter(),null,this.document.getBounds().x, ( this.document.getBounds().y + Math.round(80.0f * getFontScale() ) ) ); paintFooter(this.document.getPainter()); this.closePage(); this.document.finish(); } public void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY) { this.setWidth(0); this.setHeight(0); int style = getStyle(); int posY = fromY + getFirstTrackSpacing(); int height = getFirstTrackSpacing(); int lineHeight = 0; TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(this.styles.getTrackNumber()); ((TGLyricImpl)track.getLyrics()).start(getSkippedBeats(track)); TGTrackSpacing ts = new TGTrackSpacing(this) ; TempLine line = getTempLines(track,( this.styles.getFromMeasure() - 1 ),ts); while(!line.measures.isEmpty()){ ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0?( (getScoreLineSpacing() * 5) ):0)); if((style & DISPLAY_SCORE) != 0){ ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY)); if(line.maxY + getMinScoreTabSpacing() > getScoreSpacing()){ ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - (getScoreLineSpacing() * 4)) ); } } if((style & DISPLAY_TABLATURE) != 0){ ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) )); ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ? track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) )); } ts.setSize(TGTrackSpacing.POSITION_LYRIC,10); checkDefaultSpacing(ts); lineHeight = ts.getSize(); //Verifico si entra en la pagina actual if((posY + lineHeight + getTrackSpacing()) > (this.document.getBounds().y + getMaxHeight())){ this.paintFooter(painter); this.closePage(); this.openPage(); posY = this.document.getBounds().y + getFirstTrackSpacing(); } //pinto la linea paintLine(track,line,painter,fromX,posY,ts); posY += lineHeight + getTrackSpacing(); height += lineHeight + getTrackSpacing(); ts = new TGTrackSpacing(this) ; line = getTempLines(track,( line.lastIndex + 1 ),ts); } this.setHeight(height); } public void paintHeader(TGPainter painter){ if(this.document.isPaintable(this.page) ){ int x = this.document.getBounds().x; int y = this.document.getBounds().y; String songName = getSongManager().getSong().getName(); String songAuthor = getSongManager().getSong().getAuthor(); String trackName = "(" + getSongManager().getTrack(this.styles.getTrackNumber()).getName() + ")"; if(songName == null || songName.length() == 0){ songName = TuxGuitar.getProperty("print-header.default-song-name"); } if(songAuthor == null || songAuthor.length() == 0){ songAuthor = TuxGuitar.getProperty("print-header.default-song-author"); } painter.setFont(this.songNameFont); painter.drawString(songName,(x + getCenter(painter,songName)),y); painter.setFont(this.trackNameFont); painter.drawString(trackName,(x + getCenter(painter,trackName)),(y + Math.round(30.0f * getFontScale()))); painter.setFont(this.songAuthorFont); painter.drawString(songAuthor,(x + getRight(painter,songAuthor)),(y + Math.round(50.0f * getFontScale()))); } } private void paintFooter(TGPainter painter){ if(this.document.isPaintable(this.page) ){ int x = this.document.getBounds().x; int y = this.document.getBounds().y; String pageNumber = Integer.toString(this.page); painter.setBackground(getResources().getColorWhite()); painter.setForeground(getResources().getColorBlack()); painter.drawString(pageNumber,(x + getRight(painter,pageNumber)),(y + getBottom(painter,pageNumber))); } } public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts) { if(this.document.isPaintable(this.page) ){ int posX = fromX; int posY = fromY; int width = 0; int measureSpacing = 0; if(line.fullLine){ int diff = ( getMaxWidth() - line.tempWith); if(diff != 0 && line.measures.size() > 0){ measureSpacing = diff / line.measures.size(); } } for(int i = 0;i < line.measures.size();i ++){ int index = ((Integer)line.measures.get(i)).intValue(); TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index); //asigno la posicion dentro del compas currMeasure.setPosX(posX); currMeasure.setPosY(posY); currMeasure.setTs(ts); ((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure); currMeasure.setFirstOfLine(i == 0); paintMeasure(currMeasure,painter,measureSpacing); ((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY); int measureWidth = ( currMeasure.getWidth(this) + currMeasure.getSpacing() ); posX += measureWidth; width += measureWidth; } this.setWidth(Math.max(getWidth(),width)); } } private void openPage(){ this.page ++; if(this.document.isPaintable(this.page)){ this.document.pageStart(); } } private void closePage(){ if(this.document.isPaintable(this.page)){ this.document.pageFinish(); } } private int getCenter(TGPainter painter,String text){ int textWidth = painter.getStringExtent(text).x; return ((getMaxWidth() - textWidth) / 2); } private int getRight(TGPainter painter,String text){ int textWidth = painter.getStringExtent(text).x; return ((getMaxWidth() - textWidth)); } private int getBottom(TGPainter painter,String text){ int textHeight = painter.getStringExtent(text).y; return ((getMaxHeight() - textHeight)); } private TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) { TempLine line = new TempLine(); int measureCount = track.countMeasures(); for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) { TGMeasureImpl measure= (TGMeasureImpl) track.getMeasure(measureIdx); if( measure.getNumber() >= this.styles.getFromMeasure() && measure.getNumber() <= this.styles.getToMeasure()){ //verifico si tengo que bajar de linea if((line.tempWith + measure.getWidth(this)) >= getMaxWidth() && !line.measures.isEmpty()){ line.fullLine = true; return line; } line.tempWith += measure.getWidth(this); line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY; line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY; line.addMeasure(measureIdx); measure.registerSpacing(this,ts); } } return line; } private int getSkippedBeats(TGTrack track) { int beats = 0; for (int i = 0; i < (this.styles.getFromMeasure() - 1); i++) { TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure(i); beats += measure.getNotEmptyBeats(); } return beats; } public boolean isCaretVisible(){ return false; } public boolean isPlayModeEnabled(){ return false; } public void setLineStyle(TGPainter painter){ painter.setLineWidth(1); //painter.setForeground(getResources().getColorBlack()); painter.setForeground( getDarkColor( getResources().getLineColor() ) ); } public void setMeasureNumberStyle(TGPainter painter){ painter.setFont(getResources().getPrinterDefaultFont()); //painter.setBackground(getResources().getColorWhite()); //painter.setForeground(getResources().getColorBlack()); painter.setBackground(getResources().getColorWhite()); painter.setForeground(getDarkColor(getResources().getColorRed())); } public void setDivisionsStyle(TGPainter painter, boolean fill){ painter.setFont(getResources().getPrinterDefaultFont()); painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getColorWhite() )); painter.setForeground(getResources().getColorBlack()); } public void setTempoStyle(TGPainter painter, boolean fontStyle){ painter.setFont(getResources().getPrinterDefaultFont()); painter.setForeground(getResources().getColorBlack()); painter.setBackground( ( fontStyle ? getResources().getColorWhite() : getResources().getColorBlack() )); } public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){ painter.setFont(getResources().getPrinterDefaultFont()); painter.setForeground(getResources().getColorBlack()); painter.setBackground( ( fontStyle ? getResources().getColorWhite() : getResources().getColorBlack() )); } public void setTabNoteStyle(TGPainter painter,boolean playMode){ painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getDarkColor(getResources().getTabNoteColor()) ); painter.setFont(getResources().getPrinterNoteFont()); } public void setTabNoteFooterStyle(TGPainter painter){ painter.setForeground( getDarkColor(getResources().getTabNoteColor())); painter.setBackground( getDarkColor(getResources().getTabNoteColor())); } public void setTabEffectStyle(TGPainter painter){ painter.setForeground( getDarkColor(getResources().getTabNoteColor())); painter.setBackground( getDarkColor(getResources().getTabNoteColor())); } public void setScoreNoteStyle(TGPainter painter,boolean playing){ painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) ); painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) ); } public void setScoreNoteFooterStyle(TGPainter painter){ painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) ); painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) ); } public void setScoreEffectStyle(TGPainter painter){ painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) ); painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) ); } public void setTimeSignatureStyle(TGPainter painter){ painter.setFont(getResources().getPrinterTimeSignatureFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getResources().getColorBlack() ); } public void setTabGraceStyle(TGPainter painter){ painter.setFont(getResources().getPrinterGraceFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getDarkColor(getResources().getTabNoteColor()) ); } public void setLyricStyle(TGPainter painter,boolean playMode){ painter.setFont(getResources().getPrinterLyricFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground(getResources().getColorBlack()); } public void setMarkerStyle(TGPainter painter, Color color){ painter.setFont(getResources().getMarkerFont()); painter.setBackground(getResources().getColorWhite()); painter.setForeground(getDarkColor(color)); } public void setTextStyle(TGPainter painter){ painter.setFont(getResources().getPrinterTextFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getResources().getColorBlack() ); } public void setOfflineEffectStyle(TGPainter painter){ painter.setFont(getResources().getPrinterDefaultFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getResources().getColorBlack() ); } public void setDivisionTypeStyle(TGPainter painter){ painter.setFont(getResources().getPrinterDefaultFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getResources().getColorBlack() ); } public void setRepeatEndingStyle(TGPainter painter){ painter.setFont(getResources().getPrinterDefaultFont()); painter.setBackground( getResources().getColorWhite() ); painter.setForeground( getResources().getColorBlack() ); } public void setChordStyle(TGChordImpl chord){ chord.setStyle(getStyle()); chord.setFont(getResources().getPrinterChordFont()); chord.setForegroundColor(getResources().getColorBlack()); chord.setBackgroundColor(getResources().getColorWhite()); chord.setColor(getDarkColor(getResources().getLineColor())); chord.setNoteColor(getDarkColor(getResources().getTabNoteColor())); chord.setTonicColor(getDarkColor(getResources().getTabNoteColor())); chord.setFretSpacing(getChordFretSpacing()); chord.setStringSpacing(getChordStringSpacing()); chord.setNoteSize(getChordNoteSize()); chord.setFirstFretSpacing(getChordFretIndexSpacing()); chord.setFirstFretFont(getResources().getChordFretFont()); } public Color getDarkColor( Color color ) { return ( this.styles.isBlackAndWhite() ? getResources().getColorBlack() : color ); } public int getMaxWidth(){ return (this.document.getBounds().width - this.document.getBounds().x - 10); } public int getMaxHeight(){ return (this.document.getBounds().height - this.document.getBounds().y - 10); } public boolean isFirstMeasure(TGMeasure measure){ return (measure.getNumber() == this.styles.getFromMeasure()); } public boolean isLastMeasure(TGMeasure measure){ return (measure.getNumber() == this.styles.getToMeasure()); } public boolean hasLoopMarker(TGMeasure measure){ return false; } private int getScaledValue(float scale, int value){ return getScaledValue(scale, value,1); } private int getScaledValue(float scale, int value, int minimum){ float scaledValue = ( value * scale ); return Math.max( Math.round( scaledValue ) , minimum ); } public void disposeLayout(){ super.disposeLayout(); this.songNameFont.dispose(); this.trackNameFont.dispose(); this.songAuthorFont.dispose(); } private class TempLine{ protected int tempWith; protected int lastIndex; protected boolean fullLine; protected int maxY = 0; protected int minY = 50; protected List measures; public TempLine(){ this.measures = new ArrayList(); } protected void addMeasure(int index){ this.measures.add(new Integer(index)); this.lastIndex = index; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/ViewLayout.java0000644000175000017500000006525311273045225031462 0ustar julianjulian/* * Created on 04-ene-2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.editors.tab.layout; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TGPainter; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl; import org.herac.tuxguitar.gui.editors.tab.TGChordImpl; import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureHeaderImpl; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.editors.tab.TGResources; import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl; import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing; import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl; import org.herac.tuxguitar.gui.editors.tab.Tablature; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.player.base.MidiPlayerMode; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGDuration; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGNote; import org.herac.tuxguitar.song.models.TGVoice; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public abstract class ViewLayout { public static final int MODE_PAGE = 1; public static final int MODE_LINEAR = 2; public static final int DEFAULT_MODE = MODE_LINEAR; public static final int DISPLAY_COMPACT = 0x01; public static final int DISPLAY_MULTITRACK = 0x02; public static final int DISPLAY_SCORE = 0x04; public static final int DISPLAY_TABLATURE = 0x08; public static final int DISPLAY_CHORD_NAME = 0x10; public static final int DISPLAY_CHORD_DIAGRAM = 0x20; private Tablature tablature; private float scale; private float fontScale; private int style; private int width; private int height; private int minBufferSeparator; private int minTopSpacing; private int minScoreTabSpacing; private int stringSpacing; private int scoreLineSpacing; private int scoreSpacing; private int trackSpacing; private int firstTrackSpacing; private int firstMeasureSpacing; private int chordFretIndexSpacing; private int chordStringSpacing; private int chordFretSpacing; private int chordNoteSize; private int repeatEndingSpacing; private int effectSpacing; private int divisionTypeSpacing; private int textSpacing; private int markerSpacing; private int loopMarkerSpacing; private boolean bufferEnabled; private boolean playModeEnabled; private List trackPositions; private TGResources resources; public ViewLayout(Tablature tablature,int style){ this(tablature, style, 1.0f ); } public ViewLayout(Tablature tablature,int style, float scale){ this.tablature = tablature; this.trackPositions = new ArrayList(); this.playModeEnabled = false; this.resources = new TGResources(this); this.style = style; if((this.style & DISPLAY_TABLATURE) == 0 && (this.style & DISPLAY_SCORE) == 0 ){ this.style |= DISPLAY_TABLATURE; } this.init( scale ); } protected void init( float initScale ){ TGConfigManager config = TuxGuitar.instance().getConfig(); this.setBufferEnabled(true); this.setStringSpacing( (int)(config.getIntConfigValue(TGConfigKeys.TAB_LINE_SPACING) * initScale ) ); this.setScoreLineSpacing( (int)(config.getIntConfigValue(TGConfigKeys.SCORE_LINE_SPACING) * initScale ) ); this.setScale( checkScale() ); this.setFontScale( getScale() ); this.setFirstMeasureSpacing( Math.round( 20f * getScale() ) ); this.setMinBufferSeparator( Math.round( 20f * getScale() ) ); this.setMinTopSpacing( Math.round( 30f * getScale() ) ); this.setMinScoreTabSpacing( Math.round( config.getIntConfigValue(TGConfigKeys.MIN_SCORE_TABLATURE_SPACING) * getScale() ) ); this.setScoreSpacing( (( getScoreLineSpacing() * 4) + getMinScoreTabSpacing() ) ); this.setFirstTrackSpacing( Math.round(config.getIntConfigValue(TGConfigKeys.FIRST_TRACK_SPACING) * getScale() ) ); this.setTrackSpacing( Math.round(config.getIntConfigValue(TGConfigKeys.TRACK_SPACING) * getScale() ) ); this.setChordFretIndexSpacing( Math.round( 8f * getScale() ) ); this.setChordStringSpacing( Math.round( 5f * getScale() ) ); this.setChordFretSpacing( Math.round( 6f * getScale() ) ); this.setChordNoteSize( Math.round( 4f * getScale() ) ); this.setRepeatEndingSpacing( Math.round( 20f * getScale() ) ); this.setTextSpacing( Math.round( 15f * getScale() ) ); this.setMarkerSpacing( Math.round( 15f * getScale() ) ); this.setLoopMarkerSpacing( Math.round( 5f * getScale() ) ); this.setDivisionTypeSpacing( Math.round( 10f * getScale() ) ); this.setEffectSpacing( Math.round( 8f * getScale() ) ); } public abstract void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY); public abstract int getMode(); public void paint(TGPainter painter,Rectangle clientArea,int fromX,int fromY){ this.playModeEnabled = false; paintSong(painter,clientArea,fromX,fromY); } public void paintMeasure(TGMeasureImpl measure,TGPainter painter,int spacing) { measure.setSpacing(spacing); measure.paintMeasure(this,painter); } public void updateSong(){ updateTracks(); updateCaret(); } public void updateTracks() { int trackCount = getSongManager().getSong().countTracks(); int measureCount = getSongManager().getSong().countMeasureHeaders(); for (int measureIdx = 0; measureIdx < measureCount; measureIdx++) { TGMeasureHeaderImpl header = (TGMeasureHeaderImpl)getSongManager().getSong().getMeasureHeader(measureIdx); header.update(this, measureIdx); for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) { TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx); TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure(measureIdx); measure.create(this); } for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) { TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx); TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(measureIdx); track.update(this); measure.update(this); } } } private void updateCaret(){ this.tablature.getCaret().update(); } public void fireUpdate(int measureNumber){ int measureIndex = (measureNumber - 1); int trackCount = getSongManager().getSong().countTracks(); TGMeasureHeaderImpl header = (TGMeasureHeaderImpl)getSongManager().getSong().getMeasureHeader(measureIndex); header.update(this, measureIndex); for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) { TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx); TGMeasureImpl measure = null; measure = (TGMeasureImpl) track.getMeasure(measureIndex); measure.create(this); } for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) { TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx); TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure(measureIndex); measure.update(this); } updateCaret(); } public void reloadStyles(){ this.getResources().load(); } /** * Pinta las lineas */ public void paintLines(TGTrackImpl track,TGTrackSpacing ts,TGPainter painter,int x,int y,int width) { if(width > 0){ setLineStyle(painter); int tempX = ((x < 0)?0:x); int tempY = y; //partitura if( (this.style & DISPLAY_SCORE) != 0 ){ int posY = tempY + ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); painter.initPath(); painter.setAntialias(false); for(int i = 1;i <= 5;i ++){ painter.moveTo(tempX, posY); painter.lineTo(tempX + width,posY); posY += getScoreLineSpacing(); } painter.closePath(); } //tablatura if((this.style & DISPLAY_TABLATURE) != 0){ tempY += ts.getPosition(TGTrackSpacing.POSITION_TABLATURE); painter.initPath(); painter.setAntialias(false); for(int i = 0; i < track.stringCount();i++){ painter.moveTo(tempX,tempY); painter.lineTo(tempX + width,tempY); tempY += getStringSpacing(); } painter.closePath(); } } } /** * Pinta el caret */ public void paintCaret(TGPainter painter) { if(isCaretVisible() && ((this.style & (DISPLAY_TABLATURE | DISPLAY_SCORE) ) != 0 )){ Caret caret = getTablature().getCaret(); if(!caret.getMeasure().isOutOfBounds()){ caret.paintCaret(this,painter); } } } /** * Pinta el compas y las notas que estan sonando */ public void paintPlayMode(TGPainter painter,TGMeasureImpl measure,TGBeatImpl beat,boolean paintMeasure){ this.playModeEnabled = true; //pinto el compas if(paintMeasure){ measure.paintMeasure(this,painter); } //pinto el pulso beat.paint(this,painter,measure.getPosX() + measure.getHeaderImpl().getLeftSpacing(this), measure.getPosY()); //pinto los lyrics ((TGLyricImpl)measure.getTrackImpl().getLyrics()).paintCurrentNoteBeats(painter,this,measure,measure.getPosX(), measure.getPosY()); this.playModeEnabled = false; } protected float checkScale(){ float v1 = ((this.style & DISPLAY_SCORE) != 0 ? (getScoreLineSpacing() * 1.25f ) : 0 ); float v2 = ((this.style & DISPLAY_TABLATURE) != 0 ? getStringSpacing() : 0 ); float scale = (Math.max(v1,v2) / 10.0f); return scale; } protected void checkDefaultSpacing(TGTrackSpacing ts){ int checkPosition = -1; int minBufferSeparator = getMinBufferSeparator(); if( (this.style & DISPLAY_SCORE) != 0 ){ int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_SCORE_UP_LINES) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR)); if(bufferSeparator < minBufferSeparator ) { ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator); } checkPosition = ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES); } else if((this.style & DISPLAY_TABLATURE) != 0){ int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_TABLATURE) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR)); if(bufferSeparator < minBufferSeparator ) { ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator); } checkPosition = ts.getPosition(TGTrackSpacing.POSITION_TABLATURE); } if(checkPosition >= 0 && checkPosition < getMinTopSpacing()){ ts.setSize(TGTrackSpacing.POSITION_TOP, (getMinTopSpacing() - checkPosition)); } } /** * Calcula el espacio minimo entre negras, dependiendo de la duracion de la nota */ public int getSpacingForQuarter(TGDuration duration){ double spacing = (((double)TGDuration.QUARTER_TIME / (double)duration.getTime()) * getMinSpacing(duration)); return (int)spacing; } /** * Calcula el Espacio minimo que quedara entre nota y nota */ protected float getMinSpacing(TGDuration duration){ float scale = getScale(); switch(duration.getValue()){ case TGDuration.WHOLE: return (50.0f * scale); case TGDuration.HALF: return (30.0f * scale); case TGDuration.QUARTER: return (25.0f * scale); case TGDuration.EIGHTH: return (20.0f * scale); default: return (18.0f * scale); } } /** * Calcula el Espacio que ocupara el pulso */ public float getBeatWidth(TGVoice voice){ float scale = getScale(); TGDuration duration = voice.getDuration(); if(duration != null){ switch(duration.getValue()){ case TGDuration.WHOLE: return (30.0f * scale); case TGDuration.HALF: return (25.0f * scale); case TGDuration.QUARTER: return (21.0f * scale); case TGDuration.EIGHTH: return (20.0f * scale); case TGDuration.SIXTEENTH: return (19.0f * scale); case TGDuration.THIRTY_SECOND: return (18.0f * scale); default: return (17.0f * scale); } } return (20.0f * scale); } /** * Calcula el Espacio que ocupara el pulso */ public float getVoiceWidth(TGVoiceImpl voice){ float scale = getScale(); TGDuration duration = voice.getDuration(); if(duration != null){ switch(duration.getValue()){ case TGDuration.WHOLE: return (30.0f * scale); case TGDuration.HALF: return (25.0f * scale); case TGDuration.QUARTER: return (21.0f * scale); case TGDuration.EIGHTH: return (20.0f * scale); case TGDuration.SIXTEENTH: return (19.0f * scale); case TGDuration.THIRTY_SECOND: return (18.0f * scale); default: return (17.0f * scale); } } return (20.0f * scale); } public boolean isCaretVisible(){ return true; } public boolean isPlayModeEnabled(){ return this.playModeEnabled; } public void setMeasureNumberStyle(TGPainter painter){ painter.setFont(getResources().getDefaultFont()); painter.setBackground(getResources().getBackgroundColor()); painter.setForeground(getResources().getColorRed()); } public void setDivisionsStyle(TGPainter painter, boolean fill){ painter.setFont(getResources().getDefaultFont()); painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getBackgroundColor() )); painter.setForeground(getResources().getColorBlack()); } public void setTempoStyle(TGPainter painter, boolean fontStyle){ painter.setFont(getResources().getDefaultFont()); painter.setForeground(getResources().getColorBlack()); painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() )); } public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){ painter.setFont(getResources().getDefaultFont()); painter.setForeground(getResources().getColorBlack()); painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() )); } public void setMeasurePlayingStyle(TGPainter painter){ painter.setBackground(getResources().getBackgroundColor()); painter.setForeground(getResources().getColorBlack()); } public void setLyricStyle(TGPainter painter,boolean playMode){ painter.setFont(getResources().getLyricFont()); painter.setBackground(getResources().getBackgroundColor()); painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getColorBlack()) ); } public void setMarkerStyle(TGPainter painter, Color color){ painter.setFont(getResources().getMarkerFont()); painter.setBackground(getResources().getBackgroundColor()); painter.setForeground(color); } public void setTextStyle(TGPainter painter){ painter.setFont(getResources().getTextFont()); painter.setBackground(getResources().getBackgroundColor()); painter.setForeground(getResources().getColorBlack()); } public void setTimeSignatureStyle(TGPainter painter){ painter.setFont(getResources().getTimeSignatureFont()); painter.setForeground(getResources().getColorBlack()); painter.setBackground(getResources().getBackgroundColor()); } public void setKeySignatureStyle(TGPainter painter){ painter.setBackground(getResources().getColorBlack()); } public void setClefStyle(TGPainter painter){ painter.setBackground(getResources().getColorBlack()); } public void setLineStyle(TGPainter painter){ painter.setLineWidth(1); painter.setForeground(getResources().getLineColor()); } public void setCaretStyle(TGPainter painter, boolean expectedVoice){ painter.setForeground( expectedVoice ? getResources().getCaretColor1() : getResources().getCaretColor2() ); } public void setScoreSilenceStyle(TGPainter painter,boolean playMode){ painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() )); painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() )); } public void setTabSilenceStyle(TGPainter painter,boolean playMode){ painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() )); painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() )); } public void setScoreNoteStyle(TGPainter painter,boolean playing){ painter.setForeground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() )); painter.setBackground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() )); } public void setScoreNoteFooterStyle(TGPainter painter){ painter.setForeground( getResources().getScoreNoteColor()); painter.setBackground( getResources().getScoreNoteColor()); } public void setScoreEffectStyle(TGPainter painter){ painter.setForeground( getResources().getScoreNoteColor()); painter.setBackground( getResources().getScoreNoteColor()); } public void setTabNoteStyle(TGPainter painter,boolean playMode){ painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() )); painter.setBackground( getResources().getBackgroundColor() ); painter.setFont(getResources().getNoteFont()); } public void setTabNoteFooterStyle(TGPainter painter){ painter.setForeground( getResources().getTabNoteColor()); painter.setBackground( getResources().getTabNoteColor()); } public void setTabEffectStyle(TGPainter painter){ painter.setForeground( getResources().getTabNoteColor()); painter.setBackground( getResources().getTabNoteColor()); } public void setTabGraceStyle(TGPainter painter){ painter.setFont(getResources().getGraceFont()); painter.setForeground(getResources().getTabNoteColor()); painter.setBackground(getResources().getBackgroundColor()); } public void setPlayNoteColor(TGPainter painter){ painter.setForeground(getResources().getPlayNoteColor()); painter.setBackground(getResources().getPlayNoteColor()); } public void setOfflineEffectStyle(TGPainter painter){ painter.setForeground(getResources().getColorBlack()); painter.setBackground(getResources().getBackgroundColor()); painter.setFont(getResources().getDefaultFont()); } public void setDotStyle(TGPainter painter){ painter.setForeground(getResources().getColorBlack()); painter.setBackground(getResources().getColorBlack()); } public void setDivisionTypeStyle(TGPainter painter){ painter.setForeground(getResources().getColorBlack()); painter.setBackground(getResources().getBackgroundColor()); painter.setFont(getResources().getDefaultFont()); } public void setRepeatEndingStyle(TGPainter painter){ painter.setForeground(getResources().getColorBlack()); painter.setBackground(getResources().getBackgroundColor()); painter.setFont(getResources().getDefaultFont()); } public void setChordStyle(TGChordImpl chord){ chord.setFont(getResources().getChordFont()); chord.setForegroundColor(getResources().getColorBlack()); chord.setBackgroundColor(getResources().getBackgroundColor()); chord.setColor(getResources().getLineColor()); chord.setNoteColor(getResources().getTabNoteColor()); chord.setTonicColor(getResources().getTabNoteColor()); chord.setStyle(this.style); chord.setFretSpacing(getChordFretSpacing()); chord.setStringSpacing(getChordStringSpacing()); chord.setNoteSize(getChordNoteSize()); chord.setFirstFretSpacing(getChordFretIndexSpacing()); chord.setFirstFretFont(getResources().getChordFretFont()); } public void setLoopSMarkerStyle(TGPainter painter){ painter.setBackground(getResources().getLoopSMarkerColor()); } public void setLoopEMarkerStyle(TGPainter painter){ painter.setBackground(getResources().getLoopEMarkerColor()); } public Rectangle getNoteOrientation(TGPainter painter,int x,int y,TGNote note){ String noteAsString = null; if (note.isTiedNote()){ noteAsString = "L"; noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString; }else if(note.getEffect().isDeadNote()){ noteAsString = "X"; noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString; }else{ noteAsString = Integer.toString(note.getValue()); noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString; } return getOrientation(painter,x,y,noteAsString); } public Rectangle getOrientation(TGPainter painter,int x,int y,String s){ Point point = painter.getStringExtent(s); return new Rectangle((x - (point.x / 2)),(y - (point.y / 2)),point.x, point.y ); } public TGSongManager getSongManager() { return getTablature().getSongManager(); } public Tablature getTablature() { return this.tablature; } public void setTablature(Tablature tablature) { this.tablature = tablature; } public TGResources getResources(){ return this.resources; } public int getHeight() { return this.height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return this.width; } public void setWidth(int width) { this.width = width; } public int getStyle(){ return this.style; } public void setStyle(int style){ this.style = style; } public float getScale() { return this.scale; } public void setScale(float scale) { this.scale = scale; } public float getFontScale() { return this.fontScale; } public void setFontScale(float fontScale) { this.fontScale = fontScale; } public boolean isBufferEnabled() { return this.bufferEnabled; } public void setBufferEnabled(boolean bufferEnabled) { this.bufferEnabled = bufferEnabled; } public int getFirstMeasureSpacing() { return this.firstMeasureSpacing; } public void setFirstMeasureSpacing(int firstMeasureSpacing) { this.firstMeasureSpacing = firstMeasureSpacing; } public int getMinBufferSeparator() { return this.minBufferSeparator; } public void setMinBufferSeparator(int minBufferSeparator) { this.minBufferSeparator = minBufferSeparator; } public int getMinTopSpacing() { return this.minTopSpacing; } public void setMinTopSpacing(int minTopSpacing) { this.minTopSpacing = minTopSpacing; } public int getMinScoreTabSpacing() { return this.minScoreTabSpacing; } public void setMinScoreTabSpacing(int minScoreTabSpacing) { this.minScoreTabSpacing = minScoreTabSpacing; } public int getScoreLineSpacing() { return this.scoreLineSpacing; } public void setScoreLineSpacing(int scoreLineSpacing) { this.scoreLineSpacing = scoreLineSpacing; } public int getScoreSpacing() { return this.scoreSpacing; } public void setScoreSpacing(int scoreSpacing) { this.scoreSpacing = scoreSpacing; } public int getFirstTrackSpacing() { return this.firstTrackSpacing; } public void setFirstTrackSpacing(int firstTrackSpacing) { this.firstTrackSpacing = firstTrackSpacing; } public int getTrackSpacing() { return this.trackSpacing; } public void setTrackSpacing(int trackSpacing) { this.trackSpacing = trackSpacing; } public int getStringSpacing() { return this.stringSpacing; } public void setStringSpacing(int stringSpacing) { this.stringSpacing = stringSpacing; } public int getChordFretIndexSpacing() { return this.chordFretIndexSpacing; } public void setChordFretIndexSpacing(int chordFretIndexSpacing) { this.chordFretIndexSpacing = chordFretIndexSpacing; } public int getChordStringSpacing() { return this.chordStringSpacing; } public void setChordStringSpacing(int chordStringSpacing) { this.chordStringSpacing = chordStringSpacing; } public int getChordFretSpacing() { return this.chordFretSpacing; } public void setChordFretSpacing(int chordFretSpacing) { this.chordFretSpacing = chordFretSpacing; } public int getChordNoteSize() { return this.chordNoteSize; } public void setChordNoteSize(int chordNoteSize) { this.chordNoteSize = chordNoteSize; } public int getRepeatEndingSpacing() { return this.repeatEndingSpacing; } public void setRepeatEndingSpacing(int repeatEndingSpacing) { this.repeatEndingSpacing = repeatEndingSpacing; } public int getDivisionTypeSpacing() { return this.divisionTypeSpacing; } public void setDivisionTypeSpacing(int divisionTypeSpacing) { this.divisionTypeSpacing = divisionTypeSpacing; } public int getTextSpacing() { return this.textSpacing; } public void setTextSpacing(int textSpacing) { this.textSpacing = textSpacing; } public int getMarkerSpacing() { return this.markerSpacing; } public void setMarkerSpacing(int markerSpacing) { this.markerSpacing = markerSpacing; } public int getLoopMarkerSpacing() { return this.loopMarkerSpacing; } public void setLoopMarkerSpacing(int loopMarkerSpacing) { this.loopMarkerSpacing = loopMarkerSpacing; } public int getEffectSpacing() { return this.effectSpacing; } public void setEffectSpacing(int effectSpacing) { this.effectSpacing = effectSpacing; } public int getDefaultChordSpacing(){ int spacing = 0; if( (this.style & DISPLAY_CHORD_DIAGRAM) != 0 ){ spacing += ( (TGChordImpl.MAX_FRETS * getChordFretSpacing()) + getChordFretSpacing()); } if( (this.style & DISPLAY_CHORD_NAME) != 0 ){ spacing += Math.round( (15f * getScale()) ); } return spacing; } public boolean isFirstMeasure(TGMeasure measure){ return (measure.getNumber() == 1); } public boolean isLastMeasure(TGMeasure measure){ return (measure.getNumber() == getSongManager().getSong().countMeasureHeaders()); } public boolean hasLoopMarker(TGMeasure measure){ MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode(); if( pm.isLoop() && ( pm.getLoopSHeader() == measure.getNumber() || pm.getLoopEHeader() == measure.getNumber() ) ){ return true; } return false; } protected void clearTrackPositions(){ this.trackPositions.clear(); } protected void addTrackPosition(int track,int posY,int height){ this.trackPositions.add(new TrackPosition(track,posY,height)); } public int getTrackNumberAt(int y){ TrackPosition trackPos = getTrackPositionAt(y); return ((trackPos != null)?trackPos.getTrack():-1); } public TrackPosition getTrackPositionAt(int y){ TrackPosition trackPos = null; int minorDistance = 0; Iterator it = this.trackPositions.iterator(); while(it.hasNext()){ TrackPosition pos = (TrackPosition)it.next(); int distanceY = Math.min(Math.abs(y - (pos.getPosY())), Math.abs(y - (pos.getPosY() + pos.getHeight() - 10))); if(trackPos == null || distanceY < minorDistance){ trackPos = pos; minorDistance = distanceY; } } return trackPos; } public void disposeLayout(){ this.getResources().dispose(); } public class TrackPosition{ private int track; private int posY; private int height; public TrackPosition(int track,int posY,int height){ this.track = track; this.posY = posY; this.height = height; } public int getPosY() { return this.posY; } public int getHeight() { return this.height; } public int getTrack() { return this.track; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGClefPainter.java0000644000175000017500000015341311273045225032305 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.painters; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGClefPainter { public static void paintTreble(TGPainter painter, int x, int y,float scale){ painter.moveTo((x + (0.9706216f * scale)),(y + (-0.9855771f * scale))); painter.cubicTo((x + (0.99023926f * scale)),(y + (-0.99538594f * scale)),(x + (0.99350905f * scale)),(y + (-0.99538594f * scale)),(x + (1.0131269f * scale)),(y + (-0.99538594f * scale))); painter.cubicTo((x + (1.0392835f * scale)),(y + (-0.99211615f * scale)),(x + (1.055632f * scale)),(y + (-0.9823073f * scale)),(x + (1.0915977f * scale)),(y + (-0.9430719f * scale))); painter.cubicTo((x + (1.3270102f * scale)),(y + (-0.7011198f * scale)),(x + (1.5231876f * scale)),(y + (-0.26953024f * scale)),(x + (1.572232f * scale)),(y + (0.09666765f * scale))); painter.cubicTo((x + (1.578771f * scale)),(y + (0.1555208f * scale)),(x + (1.578771f * scale)),(y + (0.29284477f * scale)),(x + (1.572232f * scale)),(y + (0.35496712f * scale))); painter.cubicTo((x + (1.5362663f * scale)),(y + (0.6917379f * scale)),(x + (1.3956721f * scale)),(y + (0.9990827f * scale)),(x + (1.0719799f * scale)),(y + (1.4404812f * scale))); painter.lineTo((x + (1.0262054f * scale)),(y + (1.502604f * scale))); painter.lineTo((x + (1.0523622f * scale)),(y + (1.577805f * scale))); painter.cubicTo((x + (1.1144851f * scale)),(y + (1.7576342f * scale)),(x + (1.1864164f * scale)),(y + (1.9766989f * scale)),(x + (1.2321913f * scale)),(y + (2.1369102f * scale))); painter.cubicTo((x + (1.24527f * scale)),(y + (2.1761456f * scale)),(x + (1.2550789f * scale)),(y + (2.208842f * scale)),(x + (1.2550789f * scale)),(y + (2.212112f * scale))); painter.cubicTo((x + (1.2550789f * scale)),(y + (2.212112f * scale)),(x + (1.2779659f * scale)),(y + (2.212112f * scale)),(x + (1.3008534f * scale)),(y + (2.2153816f * scale))); painter.cubicTo((x + (1.4152898f * scale)),(y + (2.22519f * scale)),(x + (1.5133789f * scale)),(y + (2.2513473f * scale)),(x + (1.6147372f * scale)),(y + (2.3003914f * scale))); painter.cubicTo((x + (1.6964773f * scale)),(y + (2.3428962f * scale)),(x + (1.7684091f * scale)),(y + (2.3919404f * scale)),(x + (1.8370711f * scale)),(y + (2.457333f * scale))); painter.cubicTo((x + (1.9122725f * scale)),(y + (2.5325344f * scale)),(x + (1.9613168f * scale)),(y + (2.601196f * scale)),(x + (2.0070913f * scale)),(y + (2.6960156f * scale))); painter.cubicTo((x + (2.0757532f * scale)),(y + (2.8333395f * scale)),(x + (2.10518f * scale)),(y + (2.9772024f * scale)),(x + (2.10191f * scale)),(y + (3.121066f * scale))); painter.cubicTo((x + (2.0986407f * scale)),(y + (3.2126155f * scale)),(x + (2.085562f * scale)),(y + (3.2812777f * scale)),(x + (2.0561357f * scale)),(y + (3.3662882f * scale))); painter.cubicTo((x + (2.0169f * scale)),(y + (3.4905329f * scale)),(x + (1.9449685f * scale)),(y + (3.60497f * scale)),(x + (1.8468798f * scale)),(y + (3.7030587f * scale))); painter.cubicTo((x + (1.7618695f * scale)),(y + (3.7880688f * scale)),(x + (1.6833986f * scale)),(y + (3.8403826f * scale)),(x + (1.578771f * scale)),(y + (3.8828878f * scale))); painter.lineTo((x + (1.5395356f * scale)),(y + (3.8992357f * scale))); painter.lineTo((x + (1.5395356f * scale)),(y + (4.016942f * scale))); painter.cubicTo((x + (1.5395356f * scale)),(y + (4.183693f * scale)),(x + (1.5297267f * scale)),(y + (4.37987f * scale)),(x + (1.516648f * scale)),(y + (4.497576f * scale))); painter.cubicTo((x + (1.50357f * scale)),(y + (4.6185517f * scale)),(x + (1.4708736f * scale)),(y + (4.732989f * scale)),(x + (1.4185596f * scale)),(y + (4.837617f * scale))); painter.cubicTo((x + (1.2812357f * scale)),(y + (5.1155343f * scale)),(x + (1.0392835f * scale)),(y + (5.262667f * scale)),(x + (0.7679054f * scale)),(y + (5.2365108f * scale))); painter.cubicTo((x + (0.46056065f * scale)),(y + (5.2070837f * scale)),(x + (0.21207006f * scale)),(y + (4.997828f * scale)),(x + (0.14994715f * scale)),(y + (4.716641f * scale))); painter.cubicTo((x + (0.12052006f * scale)),(y + (4.589125f * scale)),(x + (0.13359922f * scale)),(y + (4.491037f * scale)),(x + (0.18591277f * scale)),(y + (4.409296f * scale))); painter.cubicTo((x + (0.25457475f * scale)),(y + (4.3013988f * scale)),(x + (0.38535964f * scale)),(y + (4.2392764f * scale)),(x + (0.5128747f * scale)),(y + (4.2425456f * scale))); painter.cubicTo((x + (0.6632773f * scale)),(y + (4.2490854f * scale)),(x + (0.78425336f * scale)),(y + (4.3667912f * scale)),(x + (0.80714035f * scale)),(y + (4.5302725f * scale))); painter.cubicTo((x + (0.8234888f * scale)),(y + (4.661057f * scale)),(x + (0.7679054f * scale)),(y + (4.782033f * scale)),(x + (0.6632773f * scale)),(y + (4.8474255f * scale))); painter.cubicTo((x + (0.6044242f * scale)),(y + (4.8833914f * scale)),(x + (0.52268356f * scale)),(y + (4.8997393f * scale)),(x + (0.46056065f * scale)),(y + (4.8899307f * scale))); painter.cubicTo((x + (0.45075235f * scale)),(y + (4.8899307f * scale)),(x + (0.44094297f * scale)),(y + (4.8866606f * scale)),(x + (0.44094297f * scale)),(y + (4.8899307f * scale))); painter.lineTo((x + (0.48017892f * scale)),(y + (4.929166f * scale))); painter.cubicTo((x + (0.55211014f * scale)),(y + (5.0010977f * scale)),(x + (0.63385075f * scale)),(y + (5.0468726f * scale)),(x + (0.7384789f * scale)),(y + (5.06976f * scale))); painter.cubicTo((x + (0.76136583f * scale)),(y + (5.0730295f * scale)),(x + (0.78098357f * scale)),(y + (5.0730295f * scale)),(x + (0.8332976f * scale)),(y + (5.0730295f * scale))); painter.cubicTo((x + (0.89215076f * scale)),(y + (5.0730295f * scale)),(x + (0.8986898f * scale)),(y + (5.0730295f * scale)),(x + (0.9313861f * scale)),(y + (5.0664897f * scale))); painter.cubicTo((x + (0.97716117f * scale)),(y + (5.0534115f * scale)),(x + (1.0163965f * scale)),(y + (5.0370636f * scale)),(x + (1.0523622f * scale)),(y + (5.0174456f * scale))); painter.cubicTo((x + (1.2158434f * scale)),(y + (4.919357f * scale)),(x + (1.3270102f * scale)),(y + (4.716641f * scale)),(x + (1.3564366f * scale)),(y + (4.47142f * scale))); painter.cubicTo((x + (1.3662455f * scale)),(y + (4.37987f * scale)),(x + (1.3760543f * scale)),(y + (4.183693f * scale)),(x + (1.3760543f * scale)),(y + (4.0398297f * scale))); painter.cubicTo((x + (1.3760543f * scale)),(y + (3.9450107f * scale)),(x + (1.3760543f * scale)),(y + (3.9384713f * scale)),(x + (1.3695153f * scale)),(y + (3.9384713f * scale))); painter.cubicTo((x + (1.3564366f * scale)),(y + (3.9450107f * scale)),(x + (1.2877747f * scale)),(y + (3.95155f * scale)),(x + (1.2387304f * scale)),(y + (3.9548192f * scale))); painter.cubicTo((x + (1.1766075f * scale)),(y + (3.9580889f * scale)),(x + (1.0719799f * scale)),(y + (3.9580889f * scale)),(x + (1.0229356f * scale)),(y + (3.95155f * scale))); painter.cubicTo((x + (0.8300278f * scale)),(y + (3.9286623f * scale)),(x + (0.65346843f * scale)),(y + (3.8632698f * scale)),(x + (0.4997966f * scale)),(y + (3.755372f * scale))); painter.cubicTo((x + (0.2709232f * scale)),(y + (3.595161f * scale)),(x + (0.10744194f * scale)),(y + (3.3564782f * scale)),(x + (0.038779963f * scale)),(y + (3.0818305f * scale))); painter.cubicTo((x + (-0.04949972f * scale)),(y + (2.7385209f * scale)),(x + (0.012623194f * scale)),(y + (2.3723233f * scale)),(x + (0.22841798f * scale)),(y + (1.9865077f * scale))); painter.cubicTo((x + (0.31996745f * scale)),(y + (1.8262968f * scale)),(x + (0.40824714f * scale)),(y + (1.6955118f * scale)),(x + (0.6273117f * scale)),(y + (1.4045155f * scale))); painter.lineTo((x + (0.751557f * scale)),(y + (1.2377651f * scale))); painter.lineTo((x + (0.72866946f * scale)),(y + (1.1756423f * scale))); painter.cubicTo((x + (0.5717278f * scale)),(y + (0.7604004f * scale)),(x + (0.51941377f * scale)),(y + (0.52171814f * scale)),(x + (0.5030659f * scale)),(y + (0.17513847f * scale))); painter.cubicTo((x + (0.49652684f * scale)),(y + (0.024735928f * scale)),(x + (0.5030659f * scale)),(y + (-0.102779746f * scale)),(x + (0.52268356f * scale)),(y + (-0.2074073f * scale))); painter.cubicTo((x + (0.5717278f * scale)),(y + (-0.48205525f * scale)),(x + (0.69924295f * scale)),(y + (-0.72727656f * scale)),(x + (0.8986898f * scale)),(y + (-0.92345417f * scale))); painter.cubicTo((x + (0.9379252f * scale)),(y + (-0.9626896f * scale)),(x + (0.9542737f * scale)),(y + (-0.9757682f * scale)),(x + (0.9706216f * scale)),(y + (-0.9855771f * scale))); painter.moveTo((x + (1.2289215f * scale)),(y + (-0.4264719f * scale))); painter.cubicTo((x + (1.1962258f * scale)),(y + (-0.48205525f * scale)),(x + (1.2027647f * scale)),(y + (-0.478786f * scale)),(x + (1.1733383f * scale)),(y + (-0.45916772f * scale))); painter.cubicTo((x + (1.0817888f * scale)),(y + (-0.40358436f * scale)),(x + (0.98697f * scale)),(y + (-0.3185745f * scale)),(x + (0.9183075f * scale)),(y + (-0.23356462f * scale))); painter.cubicTo((x + (0.77771425f * scale)),(y + (-0.05373496f * scale)),(x + (0.69924295f * scale)),(y + (0.1555208f * scale)),(x + (0.68943465f * scale)),(y + (0.38112438f * scale))); painter.cubicTo((x + (0.6861648f * scale)),(y + (0.4726739f * scale)),(x + (0.69597363f * scale)),(y + (0.5315269f * scale)),(x + (0.7384789f * scale)),(y + (0.6721202f * scale))); painter.cubicTo((x + (0.77117467f * scale)),(y + (0.7865572f * scale)),(x + (0.8627241f * scale)),(y + (1.0644748f * scale)),(x + (0.86926377f * scale)),(y + (1.0710139f * scale))); painter.cubicTo((x + (0.86926377f * scale)),(y + (1.0742836f * scale)),(x + (0.88888097f * scale)),(y + (1.0513968f * scale)),(x + (0.90849864f * scale)),(y + (1.0219696f * scale))); painter.cubicTo((x + (1.1341028f * scale)),(y + (0.6982775f * scale)),(x + (1.2550789f * scale)),(y + (0.43343806f * scale)),(x + (1.3008534f * scale)),(y + (0.16859889f * scale))); painter.cubicTo((x + (1.3106622f * scale)),(y + (0.09993696f * scale)),(x + (1.3172013f * scale)),(y + (0.044353604f * scale)),(x + (1.320471f * scale)),(y + (-0.03411722f * scale))); painter.cubicTo((x + (1.3237408f * scale)),(y + (-0.2139464f * scale)),(x + (1.3041232f * scale)),(y + (-0.30222607f * scale)),(x + (1.2289215f * scale)),(y + (-0.4264719f * scale))); painter.moveTo((x + (0.9477346f * scale)),(y + (1.7739828f * scale))); painter.cubicTo((x + (0.9281169f * scale)),(y + (1.71186f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale))); painter.cubicTo((x + (0.9052294f * scale)),(y + (1.6628156f * scale)),(x + (0.7679054f * scale)),(y + (1.8459139f * scale)),(x + (0.7090518f * scale)),(y + (1.9276547f * scale))); painter.cubicTo((x + (0.5161445f * scale)),(y + (2.1990333f * scale)),(x + (0.39843827f * scale)),(y + (2.4180977f * scale)),(x + (0.32977578f * scale)),(y + (2.6338923f * scale))); painter.cubicTo((x + (0.2840013f * scale)),(y + (2.7679467f * scale)),(x + (0.26438358f * scale)),(y + (2.8921926f * scale)),(x + (0.25784454f * scale)),(y + (3.0295167f * scale))); painter.cubicTo((x + (0.25784454f * scale)),(y + (3.1047182f * scale)),(x + (0.26111433f * scale)),(y + (3.1504927f * scale)),(x + (0.27419245f * scale)),(y + (3.2060761f * scale))); painter.cubicTo((x + (0.34939402f * scale)),(y + (3.4970722f * scale)),(x + (0.6600081f * scale)),(y + (3.7357545f * scale)),(x + (1.0262054f * scale)),(y + (3.7880688f * scale))); painter.cubicTo((x + (1.0817888f * scale)),(y + (3.7946076f * scale)),(x + (1.2387304f * scale)),(y + (3.7946076f * scale)),(x + (1.3073924f * scale)),(y + (3.7880688f * scale))); painter.cubicTo((x + (1.3760543f * scale)),(y + (3.7782598f * scale)),(x + (1.3695153f * scale)),(y + (3.7815294f * scale)),(x + (1.3662455f * scale)),(y + (3.7521029f * scale))); painter.cubicTo((x + (1.3466283f * scale)),(y + (3.4414887f * scale)),(x + (1.320471f * scale)),(y + (3.2518506f * scale)),(x + (1.2681575f * scale)),(y + (2.9706633f * scale))); painter.cubicTo((x + (1.2485392f * scale)),(y + (2.8529572f * scale)),(x + (1.192956f * scale)),(y + (2.604466f * scale)),(x + (1.1896861f * scale)),(y + (2.601196f * scale))); painter.cubicTo((x + (1.1864164f * scale)),(y + (2.5979269f * scale)),(x + (1.1242939f * scale)),(y + (2.604466f * scale)),(x + (1.0883284f * scale)),(y + (2.614275f * scale))); painter.cubicTo((x + (1.0425533f * scale)),(y + (2.6240838f * scale)),(x + (1.0131269f * scale)),(y + (2.6338923f * scale)),(x + (0.9738914f * scale)),(y + (2.6535103f * scale))); painter.cubicTo((x + (0.76136583f * scale)),(y + (2.7614079f * scale)),(x + (0.69924295f * scale)),(y + (3.0066295f * scale)),(x + (0.8332976f * scale)),(y + (3.2060761f * scale))); painter.cubicTo((x + (0.85618514f * scale)),(y + (3.2387724f * scale)),(x + (0.9150382f * scale)),(y + (3.2976255f * scale)),(x + (0.9510039f * scale)),(y + (3.3205128f * scale))); painter.cubicTo((x + (0.96408254f * scale)),(y + (3.3303218f * scale)),(x + (0.99350905f * scale)),(y + (3.3499393f * scale)),(x + (1.0131269f * scale)),(y + (3.3597484f * scale))); painter.cubicTo((x + (1.0425533f * scale)),(y + (3.3760962f * scale)),(x + (1.0490924f * scale)),(y + (3.3826356f * scale)),(x + (1.055632f * scale)),(y + (3.3957143f * scale))); painter.cubicTo((x + (1.0817888f * scale)),(y + (3.4382195f * scale)),(x + (1.0654408f * scale)),(y + (3.4905329f * scale)),(x + (1.0163965f * scale)),(y + (3.5134206f * scale))); painter.cubicTo((x + (0.99023926f * scale)),(y + (3.5264988f * scale)),(x + (0.9706216f * scale)),(y + (3.5232296f * scale)),(x + (0.9183075f * scale)),(y + (3.4970722f * scale))); painter.cubicTo((x + (0.79079294f * scale)),(y + (3.4349499f * scale)),(x + (0.69597363f * scale)),(y + (3.3499393f * scale)),(x + (0.6273117f * scale)),(y + (3.2453117f * scale))); painter.cubicTo((x + (0.4997966f * scale)),(y + (3.0491343f * scale)),(x + (0.48344818f * scale)),(y + (2.7973735f * scale)),(x + (0.5880763f * scale)),(y + (2.5848482f * scale))); painter.cubicTo((x + (0.67962575f * scale)),(y + (2.4017498f * scale)),(x + (0.84310645f * scale)),(y + (2.2775042f * scale)),(x + (1.0523622f * scale)),(y + (2.2317295f * scale))); painter.cubicTo((x + (1.0719799f * scale)),(y + (2.22519f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale))); painter.cubicTo((x + (1.0915977f * scale)),(y + (2.2186508f * scale)),(x + (1.0000482f * scale)),(y + (1.9211154f * scale)),(x + (0.9477346f * scale)),(y + (1.7739828f * scale))); painter.moveTo((x + (1.3924028f * scale)),(y + (2.617545f * scale))); painter.cubicTo((x + (1.382594f * scale)),(y + (2.617545f * scale)),(x + (1.3727851f * scale)),(y + (2.614275f * scale)),(x + (1.3695153f * scale)),(y + (2.614275f * scale))); painter.lineTo((x + (1.3597065f * scale)),(y + (2.611005f * scale))); painter.lineTo((x + (1.3760543f * scale)),(y + (2.6796675f * scale))); painter.cubicTo((x + (1.4512559f * scale)),(y + (3.0098987f * scale)),(x + (1.5068393f * scale)),(y + (3.369557f * scale)),(x + (1.526457f * scale)),(y + (3.6736321f * scale))); painter.cubicTo((x + (1.5297267f * scale)),(y + (3.7063284f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale))); painter.cubicTo((x + (1.5329965f * scale)),(y + (3.7324853f * scale)),(x + (1.5755012f * scale)),(y + (3.7128677f * scale)),(x + (1.5983888f * scale)),(y + (3.6965194f * scale))); painter.cubicTo((x + (1.6539721f * scale)),(y + (3.6638227f * scale)),(x + (1.7062862f * scale)),(y + (3.6147785f * scale)),(x + (1.7487912f * scale)),(y + (3.559195f * scale))); painter.cubicTo((x + (1.8501498f * scale)),(y + (3.4251404f * scale)),(x + (1.8861152f * scale)),(y + (3.25839f * scale)),(x + (1.8468798f * scale)),(y + (3.0883694f * scale))); painter.cubicTo((x + (1.8174533f * scale)),(y + (2.9510455f * scale)),(x + (1.7389826f * scale)),(y + (2.8235304f * scale)),(x + (1.6278152f * scale)),(y + (2.735251f * scale))); painter.cubicTo((x + (1.5591533f * scale)),(y + (2.6829367f * scale)),(x + (1.4676039f * scale)),(y + (2.6371622f * scale)),(x + (1.3924028f * scale)),(y + (2.617545f * scale))); } public static void paintBass(TGPainter painter, int x, int y,float scale){ painter.moveTo((x + (0.71937084f * scale)),(y + (0.16147426f * scale))); painter.cubicTo((x + (0.75454587f * scale)),(y + (0.15827677f * scale)),(x + (0.8920496f * scale)),(y + (0.16147426f * scale)),(x + (0.94321334f * scale)),(y + (0.16467176f * scale))); painter.cubicTo((x + (1.3429334f * scale)),(y + (0.20944051f * scale)),(x + (1.6147422f * scale)),(y + (0.4077018f * scale)),(x + (1.7042797f * scale)),(y + (0.72108173f * scale))); painter.cubicTo((x + (1.7266634f * scale)),(y + (0.8074205f * scale)),(x + (1.7362571f * scale)),(y + (0.87137556f * scale)),(x + (1.7330583f * scale)),(y + (0.9800993f * scale))); painter.cubicTo((x + (1.7330583f * scale)),(y + (1.1176031f * scale)),(x + (1.7170696f * scale)),(y + (1.2327217f * scale)),(x + (1.6723021f * scale)),(y + (1.3542367f * scale))); painter.cubicTo((x + (1.5092158f * scale)),(y + (1.8370967f * scale)),(x + (1.0327508f * scale)),(y + (2.236817f * scale)),(x + (0.16296211f * scale)),(y + (2.6205468f * scale))); painter.cubicTo((x + (0.12778586f * scale)),(y + (2.6365356f * scale)),(x + (0.095808364f * scale)),(y + (2.6525242f * scale)),(x + (0.092610866f * scale)),(y + (2.655722f * scale))); painter.cubicTo((x + (0.073424615f * scale)),(y + (2.668513f * scale)),(x + (0.054238364f * scale)),(y + (2.6717105f * scale)),(x + (0.035052113f * scale)),(y + (2.6621182f * scale))); painter.cubicTo((x + (0.019063365f * scale)),(y + (2.655722f * scale)),(x + (0.012667115f * scale)),(y + (2.6493268f * scale)),(x + (0.006272115f * scale)),(y + (2.633338f * scale))); painter.cubicTo((x + (-0.0033216353f * scale)),(y + (2.6173494f * scale)),(x + (-1.2413526E-4f * scale)),(y + (2.6013606f * scale)),(x + (0.006272115f * scale)),(y + (2.5885694f * scale))); painter.cubicTo((x + (0.012667115f * scale)),(y + (2.575778f * scale)),(x + (0.025458366f * scale)),(y + (2.5661855f * scale)),(x + (0.095808364f * scale)),(y + (2.5246143f * scale))); painter.cubicTo((x + (0.3804096f * scale)),(y + (2.355133f * scale)),(x + (0.58826333f * scale)),(y + (2.2048392f * scale)),(x + (0.7641396f * scale)),(y + (2.0513468f * scale))); painter.cubicTo((x + (0.8185009f * scale)),(y + (2.000183f * scale)),(x + (0.9208296f * scale)),(y + (1.8978542f * scale)),(x + (0.96559834f * scale)),(y + (1.8466904f * scale))); painter.cubicTo((x + (1.1606609f * scale)),(y + (1.6196505f * scale)),(x + (1.2629896f * scale)),(y + (1.3990055f * scale)),(x + (1.2981646f * scale)),(y + (1.1431843f * scale))); painter.cubicTo((x + (1.3045596f * scale)),(y + (1.0824268f * scale)),(x + (1.3045596f * scale)),(y + (0.93852806f * scale)),(x + (1.2981646f * scale)),(y + (0.87777054f * scale))); painter.cubicTo((x + (1.2853733f * scale)),(y + (0.7850368f * scale)),(x + (1.2629896f * scale)),(y + (0.69869673f * scale)),(x + (1.2342097f * scale)),(y + (0.6219505f * scale))); painter.cubicTo((x + (1.2118247f * scale)),(y + (0.5707868f * scale)),(x + (1.2054296f * scale)),(y + (0.554798f * scale)),(x + (1.1798471f * scale)),(y + (0.51322675f * scale))); painter.cubicTo((x + (1.0871121f * scale)),(y + (0.35653678f * scale)),(x + (0.94641083f * scale)),(y + (0.27019802f * scale)),(x + (0.7897221f * scale)),(y + (0.27019802f * scale))); painter.cubicTo((x + (0.63622963f * scale)),(y + (0.27019802f * scale)),(x + (0.5083196f * scale)),(y + (0.35653678f * scale)),(x + (0.42517713f * scale)),(y + (0.51962304f * scale))); painter.cubicTo((x + (0.4123871f * scale)),(y + (0.5452043f * scale)),(x + (0.3804096f * scale)),(y + (0.6283468f * scale)),(x + (0.3804096f * scale)),(y + (0.63154423f * scale))); painter.cubicTo((x + (0.3804096f * scale)),(y + (0.6347418f * scale)),(x + (0.39319962f * scale)),(y + (0.63154423f * scale)),(x + (0.40599087f * scale)),(y + (0.63154423f * scale))); painter.cubicTo((x + (0.4795396f * scale)),(y + (0.6283468f * scale)),(x + (0.55948335f * scale)),(y + (0.65712553f * scale)),(x + (0.62024087f * scale)),(y + (0.705093f * scale))); painter.cubicTo((x + (0.7353596f * scale)),(y + (0.80422306f * scale)),(x + (0.7673371f * scale)),(y + (0.9641105f * scale)),(x + (0.6969871f * scale)),(y + (1.1080092f * scale))); painter.cubicTo((x + (0.64902085f * scale)),(y + (1.2135355f * scale)),(x + (0.54669213f * scale)),(y + (1.280688f * scale)),(x + (0.43477085f * scale)),(y + (1.2902818f * scale))); painter.cubicTo((x + (0.27808085f * scale)),(y + (1.2998742f * scale)),(x + (0.12458836f * scale)),(y + (1.1975467f * scale)),(x + (0.073424615f * scale)),(y + (1.0504493f * scale))); painter.cubicTo((x + (0.057435866f * scale)),(y + (1.002483f * scale)),(x + (0.054238364f * scale)),(y + (0.95451677f * scale)),(x + (0.060633365f * scale)),(y + (0.87777054f * scale))); painter.cubicTo((x + (0.08941337f * scale)),(y + (0.55799556f * scale)),(x + (0.29406962f * scale)),(y + (0.28618675f * scale)),(x + (0.5754721f * scale)),(y + (0.19345176f * scale))); painter.cubicTo((x + (0.62343836f * scale)),(y + (0.17746301f * scale)),(x + (0.6714046f * scale)),(y + (0.16786925f * scale)),(x + (0.71937084f * scale)),(y + (0.16147426f * scale))); painter.moveTo((x + (1.9632971f * scale)),(y + (0.462063f * scale))); painter.cubicTo((x + (2.0144608f * scale)),(y + (0.44607428f * scale)),(x + (2.0752184f * scale)),(y + (0.462063f * scale)),(x + (2.1167896f * scale)),(y + (0.5004368f * scale))); painter.cubicTo((x + (2.1455696f * scale)),(y + (0.53241426f * scale)),(x + (2.1615584f * scale)),(y + (0.57398427f * scale)),(x + (2.1615584f * scale)),(y + (0.6155555f * scale))); painter.cubicTo((x + (2.1615584f * scale)),(y + (0.7018943f * scale)),(x + (2.091207f * scale)),(y + (0.7722455f * scale)),(x + (2.0048683f * scale)),(y + (0.7722455f * scale))); painter.cubicTo((x + (1.9153309f * scale)),(y + (0.7722455f * scale)),(x + (1.8449808f * scale)),(y + (0.7018943f * scale)),(x + (1.8449808f * scale)),(y + (0.6155555f * scale))); painter.cubicTo((x + (1.8449808f * scale)),(y + (0.54200673f * scale)),(x + (1.8929471f * scale)),(y + (0.48124927f * scale)),(x + (1.9632971f * scale)),(y + (0.462063f * scale))); painter.moveTo((x + (1.9632971f * scale)),(y + (1.2583042f * scale))); painter.cubicTo((x + (2.0144608f * scale)),(y + (1.2423155f * scale)),(x + (2.0752184f * scale)),(y + (1.2583042f * scale)),(x + (2.1167896f * scale)),(y + (1.2966768f * scale))); painter.cubicTo((x + (2.155162f * scale)),(y + (1.338248f * scale)),(x + (2.171151f * scale)),(y + (1.3958068f * scale)),(x + (2.155162f * scale)),(y + (1.4469718f * scale))); painter.cubicTo((x + (2.1391733f * scale)),(y + (1.5205193f * scale)),(x + (2.0784159f * scale)),(y + (1.5684855f * scale)),(x + (2.0048683f * scale)),(y + (1.5684855f * scale))); painter.cubicTo((x + (1.9153309f * scale)),(y + (1.5684855f * scale)),(x + (1.8449808f * scale)),(y + (1.4981354f * scale)),(x + (1.8449808f * scale)),(y + (1.4117955f * scale))); painter.cubicTo((x + (1.8449808f * scale)),(y + (1.338248f * scale)),(x + (1.8929471f * scale)),(y + (1.2774905f * scale)),(x + (1.9632971f * scale)),(y + (1.2583042f * scale))); } public static void paintAlto(TGPainter painter, int x, int y,float scale){ painter.moveTo((x + (0.026545623f * scale)),(y + (0.5470838f * scale))); painter.cubicTo((x + (0.03553187f * scale)),(y + (0.5410925f * scale)),(x + (0.053504374f * scale)),(y + (0.5410925f * scale)),(x + (0.21525937f * scale)),(y + (0.5410925f * scale))); painter.lineTo((x + (0.39498562f * scale)),(y + (0.5410925f * scale))); painter.lineTo((x + (0.40397188f * scale)),(y + (0.55007875f * scale))); painter.cubicTo((x + (0.40996313f * scale)),(y + (0.55607f * scale)),(x + (0.41595438f * scale)),(y + (0.56206f * scale)),(x + (0.41894937f * scale)),(y + (0.5680513f * scale))); painter.cubicTo((x + (0.42494062f * scale)),(y + (0.5800325f * scale)),(x + (0.42494062f * scale)),(y + (0.69086504f * scale)),(x + (0.42494062f * scale)),(y + (2.038815f * scale))); painter.cubicTo((x + (0.42494062f * scale)),(y + (3.386765f * scale)),(x + (0.42494062f * scale)),(y + (3.4975975f * scale)),(x + (0.41894937f * scale)),(y + (3.5095787f * scale))); painter.cubicTo((x + (0.41595438f * scale)),(y + (3.51557f * scale)),(x + (0.40996313f * scale)),(y + (3.52156f * scale)),(x + (0.40397188f * scale)),(y + (3.5275512f * scale))); painter.lineTo((x + (0.39498562f * scale)),(y + (3.5335424f * scale))); painter.lineTo((x + (0.21226312f * scale)),(y + (3.5335424f * scale))); painter.lineTo((x + (0.029541872f * scale)),(y + (3.5335424f * scale))); painter.lineTo((x + (0.020554373f * scale)),(y + (3.5275512f * scale))); painter.cubicTo((x + (0.014564373f * scale)),(y + (3.52156f * scale)),(x + (0.008573122f * scale)),(y + (3.51557f * scale)),(x + (0.0055781226f * scale)),(y + (3.5095787f * scale))); painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (3.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (3.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.03582f * scale))); painter.lineTo((x + (0.0025818725f * scale)),(y + (0.5710463f * scale))); painter.lineTo((x + (0.008573122f * scale)),(y + (0.56206f * scale))); painter.cubicTo((x + (0.014564373f * scale)),(y + (0.55607f * scale)),(x + (0.020554373f * scale)),(y + (0.55007875f * scale)),(x + (0.026545623f * scale)),(y + (0.5470838f * scale))); painter.moveTo((x + (0.6016719f * scale)),(y + (0.5470838f * scale))); painter.cubicTo((x + (0.6106581f * scale)),(y + (0.5410925f * scale)),(x + (0.6196444f * scale)),(y + (0.5410925f * scale)),(x + (0.6525944f * scale)),(y + (0.5410925f * scale))); painter.cubicTo((x + (0.6915344f * scale)),(y + (0.5410925f * scale)),(x + (0.6945306f * scale)),(y + (0.5440875f * scale)),(x + (0.7035169f * scale)),(y + (0.55007875f * scale))); painter.cubicTo((x + (0.72748065f * scale)),(y + (0.5680513f * scale)),(x + (0.7244844f * scale)),(y + (0.49915627f * scale)),(x + (0.7244844f * scale)),(y + (1.2779713f * scale))); painter.lineTo((x + (0.7244844f * scale)),(y + (1.9759114f * scale))); painter.lineTo((x + (0.74245685f * scale)),(y + (1.9609337f * scale))); painter.cubicTo((x + (0.8173431f * scale)),(y + (1.8890426f * scale)),(x + (0.8862381f * scale)),(y + (1.7782114f * scale)),(x + (0.92517936f * scale)),(y + (1.6793613f * scale))); painter.cubicTo((x + (0.9491431f * scale)),(y + (1.6074712f * scale)),(x + (0.9641206f * scale)),(y + (1.5265937f * scale)),(x + (0.9701106f * scale)),(y + (1.4397264f * scale))); painter.cubicTo((x + (0.9701106f * scale)),(y + (1.400785f * scale)),(x + (0.97310686f * scale)),(y + (1.3947937f * scale)),(x + (0.97909814f * scale)),(y + (1.3858075f * scale))); painter.cubicTo((x + (0.9850881f * scale)),(y + (1.3768213f * scale)),(x + (1.0060569f * scale)),(y + (1.36484f * scale)),(x + (1.0210332f * scale)),(y + (1.36484f * scale))); painter.cubicTo((x + (1.0360106f * scale)),(y + (1.36484f * scale)),(x + (1.0539831f * scale)),(y + (1.3738263f * scale)),(x + (1.0629693f * scale)),(y + (1.3828125f * scale))); painter.cubicTo((x + (1.0689607f * scale)),(y + (1.3947937f * scale)),(x + (1.0719569f * scale)),(y + (1.39779f * scale)),(x + (1.0749519f * scale)),(y + (1.4547038f * scale))); painter.cubicTo((x + (1.0839381f * scale)),(y + (1.5775163f * scale)),(x + (1.1258744f * scale)),(y + (1.6793613f * scale)),(x + (1.1947694f * scale)),(y + (1.7512524f * scale))); painter.cubicTo((x + (1.2636644f * scale)),(y + (1.8171525f * scale)),(x + (1.3445419f * scale)),(y + (1.8441112f * scale)),(x + (1.4433919f * scale)),(y + (1.8321288f * scale))); painter.cubicTo((x + (1.5122869f * scale)),(y + (1.8231425f * scale)),(x + (1.5632094f * scale)),(y + (1.802175f * scale)),(x + (1.6021507f * scale)),(y + (1.7632337f * scale))); painter.cubicTo((x + (1.6440868f * scale)),(y + (1.7212975f * scale)),(x + (1.6680493f * scale)),(y + (1.6733713f * scale)),(x + (1.6860231f * scale)),(y + (1.598485f * scale))); painter.cubicTo((x + (1.7039956f * scale)),(y + (1.532585f * scale)),(x + (1.7099856f * scale)),(y + (1.466685f * scale)),(x + (1.7129818f * scale)),(y + (1.3318901f * scale))); painter.cubicTo((x + (1.7189732f * scale)),(y + (0.86759627f * scale)),(x + (1.6321044f * scale)),(y + (0.67888254f * scale)),(x + (1.3894731f * scale)),(y + (0.6459325f * scale))); painter.cubicTo((x + (1.2936194f * scale)),(y + (0.63395125f * scale)),(x + (1.2307143f * scale)),(y + (0.6519238f * scale)),(x + (1.2037556f * scale)),(y + (0.696855f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (0.7088375f * scale)),(x + (1.1977656f * scale)),(y + (0.7118325f * scale)),(x + (1.1977656f * scale)),(y + (0.7357963f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (0.76275504f * scale)),(x + (1.1977656f * scale)),(y + (0.76575124f * scale)),(x + (1.2067518f * scale)),(y + (0.7837238f * scale))); painter.cubicTo((x + (1.2157382f * scale)),(y + (0.8016963f * scale)),(x + (1.2217281f * scale)),(y + (0.81068254f * scale)),(x + (1.2576743f * scale)),(y + (0.84662753f * scale))); painter.cubicTo((x + (1.2936194f * scale)),(y + (0.8795775f * scale)),(x + (1.2996106f * scale)),(y + (0.89156f * scale)),(x + (1.3085968f * scale)),(y + (0.9065363f * scale))); painter.cubicTo((x + (1.3295643f * scale)),(y + (0.95146877f * scale)),(x + (1.3205781f * scale)),(y + (1.0173688f * scale)),(x + (1.2876282f * scale)),(y + (1.0772775f * scale))); painter.cubicTo((x + (1.2756469f * scale)),(y + (1.098245f * scale)),(x + (1.2337106f * scale)),(y + (1.1401813f * scale)),(x + (1.2127419f * scale)),(y + (1.1521637f * scale))); painter.cubicTo((x + (1.1378556f * scale)),(y + (1.197095f * scale)),(x + (1.0509881f * scale)),(y + (1.197095f * scale)),(x + (0.9761019f * scale)),(y + (1.1521637f * scale))); painter.cubicTo((x + (0.9551344f * scale)),(y + (1.1401813f * scale)),(x + (0.9131981f * scale)),(y + (1.098245f * scale)),(x + (0.9012156f * scale)),(y + (1.0772775f * scale))); painter.cubicTo((x + (0.8712619f * scale)),(y + (1.026355f * scale)),(x + (0.8622756f * scale)),(y + (0.9724363f * scale)),(x + (0.8712619f * scale)),(y + (0.90354127f * scale))); painter.cubicTo((x + (0.8862381f * scale)),(y + (0.81667376f * scale)),(x + (0.92517936f * scale)),(y + (0.74178755f * scale)),(x + (0.9880844f * scale)),(y + (0.6758875f * scale))); painter.cubicTo((x + (1.0539831f * scale)),(y + (0.6129825f * scale)),(x + (1.1348606f * scale)),(y + (0.5710463f * scale)),(x + (1.2307143f * scale)),(y + (0.55007875f * scale))); painter.cubicTo((x + (1.2876282f * scale)),(y + (0.53809625f * scale)),(x + (1.3984594f * scale)),(y + (0.53809625f * scale)),(x + (1.4943144f * scale)),(y + (0.55307376f * scale))); painter.cubicTo((x + (1.8477769f * scale)),(y + (0.6039963f * scale)),(x + (2.0364895f * scale)),(y + (0.81966877f * scale)),(x + (2.0634482f * scale)),(y + (1.197095f * scale))); painter.cubicTo((x + (2.0724356f * scale)),(y + (1.3139175f * scale)),(x + (2.0634482f * scale)),(y + (1.39779f * scale)),(x + (2.0364895f * scale)),(y + (1.4846575f * scale))); painter.cubicTo((x + (1.9526169f * scale)),(y + (1.7302837f * scale)),(x + (1.7279594f * scale)),(y + (1.9070151f * scale)),(x + (1.4583694f * scale)),(y + (1.933975f * scale))); painter.cubicTo((x + (1.3715006f * scale)),(y + (1.9429612f * scale)),(x + (1.3475369f * scale)),(y + (1.93697f * scale)),(x + (1.2666606f * scale)),(y + (1.8830512f * scale))); painter.cubicTo((x + (1.2187331f * scale)),(y + (1.8501024f * scale)),(x + (1.1947694f * scale)),(y + (1.83812f * scale)),(x + (1.1708056f * scale)),(y + (1.8321288f * scale))); painter.cubicTo((x + (1.1348606f * scale)),(y + (1.8231425f * scale)),(x + (1.0989156f * scale)),(y + (1.8321288f * scale)),(x + (1.0719569f * scale)),(y + (1.8560925f * scale))); painter.cubicTo((x + (1.0390068f * scale)),(y + (1.8830512f * scale)),(x + (1.0240294f * scale)),(y + (1.939965f * scale)),(x + (1.0240294f * scale)),(y + (2.038815f * scale))); painter.cubicTo((x + (1.0240294f * scale)),(y + (2.137665f * scale)),(x + (1.0390068f * scale)),(y + (2.194579f * scale)),(x + (1.0719569f * scale)),(y + (2.2215376f * scale))); painter.cubicTo((x + (1.0989156f * scale)),(y + (2.2455013f * scale)),(x + (1.1348606f * scale)),(y + (2.2544875f * scale)),(x + (1.1708056f * scale)),(y + (2.2455013f * scale))); painter.cubicTo((x + (1.1947694f * scale)),(y + (2.23951f * scale)),(x + (1.2187331f * scale)),(y + (2.2275276f * scale)),(x + (1.2666606f * scale)),(y + (2.194579f * scale))); painter.cubicTo((x + (1.3475369f * scale)),(y + (2.14066f * scale)),(x + (1.3715006f * scale)),(y + (2.1346688f * scale)),(x + (1.4583694f * scale)),(y + (2.143655f * scale))); painter.cubicTo((x + (1.7279594f * scale)),(y + (2.170615f * scale)),(x + (1.9526169f * scale)),(y + (2.3473463f * scale)),(x + (2.0364895f * scale)),(y + (2.5929725f * scale))); painter.cubicTo((x + (2.0634482f * scale)),(y + (2.6798398f * scale)),(x + (2.0724356f * scale)),(y + (2.7637124f * scale)),(x + (2.0634482f * scale)),(y + (2.8775399f * scale))); painter.cubicTo((x + (2.0334945f * scale)),(y + (3.2909112f * scale)),(x + (1.8178219f * scale)),(y + (3.5035875f * scale)),(x + (1.4044507f * scale)),(y + (3.5335424f * scale))); painter.cubicTo((x + (1.3056006f * scale)),(y + (3.5395336f * scale)),(x + (1.2367057f * scale)),(y + (3.5335424f * scale)),(x + (1.1678107f * scale)),(y + (3.5095787f * scale))); painter.cubicTo((x + (1.0330156f * scale)),(y + (3.4646475f * scale)),(x + (0.92218435f * scale)),(y + (3.3568113f * scale)),(x + (0.88324314f * scale)),(y + (3.2280061f * scale))); painter.cubicTo((x + (0.8592794f * scale)),(y + (3.1381438f * scale)),(x + (0.8652706f * scale)),(y + (3.0662525f * scale)),(x + (0.9012156f * scale)),(y + (3.0003524f * scale))); painter.cubicTo((x + (0.9131981f * scale)),(y + (2.979385f * scale)),(x + (0.9551344f * scale)),(y + (2.9374487f * scale)),(x + (0.9761019f * scale)),(y + (2.9254663f * scale))); painter.cubicTo((x + (1.0509881f * scale)),(y + (2.880535f * scale)),(x + (1.1378556f * scale)),(y + (2.880535f * scale)),(x + (1.2127419f * scale)),(y + (2.9254663f * scale))); painter.cubicTo((x + (1.2337106f * scale)),(y + (2.9374487f * scale)),(x + (1.2756469f * scale)),(y + (2.979385f * scale)),(x + (1.2876282f * scale)),(y + (3.0003524f * scale))); painter.cubicTo((x + (1.3205781f * scale)),(y + (3.0602612f * scale)),(x + (1.3295643f * scale)),(y + (3.126161f * scale)),(x + (1.3085968f * scale)),(y + (3.1710937f * scale))); painter.cubicTo((x + (1.2996106f * scale)),(y + (3.18607f * scale)),(x + (1.2936194f * scale)),(y + (3.1980524f * scale)),(x + (1.2576743f * scale)),(y + (3.2310026f * scale))); painter.cubicTo((x + (1.2217281f * scale)),(y + (3.2669475f * scale)),(x + (1.2157382f * scale)),(y + (3.2759337f * scale)),(x + (1.2067518f * scale)),(y + (3.2939062f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3118787f * scale)),(x + (1.1977656f * scale)),(y + (3.314875f * scale)),(x + (1.1977656f * scale)),(y + (3.3388388f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3657975f * scale)),(x + (1.1977656f * scale)),(y + (3.3687925f * scale)),(x + (1.2037556f * scale)),(y + (3.380775f * scale))); painter.cubicTo((x + (1.2307143f * scale)),(y + (3.4257061f * scale)),(x + (1.2936194f * scale)),(y + (3.4436786f * scale)),(x + (1.3894731f * scale)),(y + (3.4316974f * scale))); painter.cubicTo((x + (1.5362506f * scale)),(y + (3.4107287f * scale)),(x + (1.6261132f * scale)),(y + (3.3328474f * scale)),(x + (1.6710457f * scale)),(y + (3.1770837f * scale))); painter.cubicTo((x + (1.7009994f * scale)),(y + (3.0752387f * scale)),(x + (1.7159768f * scale)),(y + (2.9374487f * scale)),(x + (1.7129818f * scale)),(y + (2.74574f * scale))); painter.cubicTo((x + (1.7099856f * scale)),(y + (2.610945f * scale)),(x + (1.7039956f * scale)),(y + (2.545045f * scale)),(x + (1.6860231f * scale)),(y + (2.47615f * scale))); painter.cubicTo((x + (1.6500769f * scale)),(y + (2.3323689f * scale)),(x + (1.5751907f * scale)),(y + (2.2604775f * scale)),(x + (1.4433919f * scale)),(y + (2.2455013f * scale))); painter.cubicTo((x + (1.3445419f * scale)),(y + (2.2335188f * scale)),(x + (1.2636644f * scale)),(y + (2.2604775f * scale)),(x + (1.1947694f * scale)),(y + (2.3263776f * scale))); painter.cubicTo((x + (1.1258744f * scale)),(y + (2.3982687f * scale)),(x + (1.0839381f * scale)),(y + (2.5001137f * scale)),(x + (1.0749519f * scale)),(y + (2.6229262f * scale))); painter.cubicTo((x + (1.0719569f * scale)),(y + (2.6798398f * scale)),(x + (1.0689607f * scale)),(y + (2.6828363f * scale)),(x + (1.0629693f * scale)),(y + (2.6948175f * scale))); painter.cubicTo((x + (1.0539831f * scale)),(y + (2.7038038f * scale)),(x + (1.0360106f * scale)),(y + (2.71279f * scale)),(x + (1.0210332f * scale)),(y + (2.71279f * scale))); painter.cubicTo((x + (1.0060569f * scale)),(y + (2.71279f * scale)),(x + (0.9850881f * scale)),(y + (2.7008088f * scale)),(x + (0.97909814f * scale)),(y + (2.6918225f * scale))); painter.cubicTo((x + (0.97310686f * scale)),(y + (2.6828363f * scale)),(x + (0.9701106f * scale)),(y + (2.676845f * scale)),(x + (0.9701106f * scale)),(y + (2.6379037f * scale))); painter.cubicTo((x + (0.9641206f * scale)),(y + (2.5180862f * scale)),(x + (0.9401569f * scale)),(y + (2.4282224f * scale)),(x + (0.8922294f * scale)),(y + (2.3233826f * scale))); painter.cubicTo((x + (0.8562844f * scale)),(y + (2.2514913f * scale)),(x + (0.79637563f * scale)),(y + (2.170615f * scale)),(x + (0.74245685f * scale)),(y + (2.1166964f * scale))); painter.lineTo((x + (0.7244844f * scale)),(y + (2.1017187f * scale))); painter.lineTo((x + (0.7244844f * scale)),(y + (2.7996588f * scale))); painter.cubicTo((x + (0.7244844f * scale)),(y + (3.5784738f * scale)),(x + (0.72748065f * scale)),(y + (3.5095787f * scale)),(x + (0.7035169f * scale)),(y + (3.5275512f * scale))); painter.cubicTo((x + (0.6945306f * scale)),(y + (3.5335424f * scale)),(x + (0.6915344f * scale)),(y + (3.5335424f * scale)),(x + (0.6495981f * scale)),(y + (3.5335424f * scale))); painter.cubicTo((x + (0.6076619f * scale)),(y + (3.5335424f * scale)),(x + (0.6046669f * scale)),(y + (3.5335424f * scale)),(x + (0.59568065f * scale)),(y + (3.5275512f * scale))); painter.cubicTo((x + (0.5896894f * scale)),(y + (3.52156f * scale)),(x + (0.58369815f * scale)),(y + (3.51557f * scale)),(x + (0.58070314f * scale)),(y + (3.5095787f * scale))); painter.cubicTo((x + (0.57471186f * scale)),(y + (3.4975975f * scale)),(x + (0.57471186f * scale)),(y + (3.386765f * scale)),(x + (0.57471186f * scale)),(y + (2.03582f * scale))); painter.lineTo((x + (0.5777081f * scale)),(y + (0.5710463f * scale))); painter.lineTo((x + (0.58369815f * scale)),(y + (0.56206f * scale))); painter.cubicTo((x + (0.5896894f * scale)),(y + (0.55607f * scale)),(x + (0.59568065f * scale)),(y + (0.55007875f * scale)),(x + (0.6016719f * scale)),(y + (0.5470838f * scale))); } public static void paintTenor(TGPainter painter, int x, int y,float scale){ painter.moveTo((x + (0.026545623f * scale)),(y + (-0.45291623f * scale))); painter.cubicTo((x + (0.03553187f * scale)),(y + (-0.45890749f * scale)),(x + (0.053504374f * scale)),(y + (-0.45890749f * scale)),(x + (0.21525937f * scale)),(y + (-0.45890749f * scale))); painter.lineTo((x + (0.39498562f * scale)),(y + (-0.45890749f * scale))); painter.lineTo((x + (0.40397188f * scale)),(y + (-0.44992122f * scale))); painter.cubicTo((x + (0.40996313f * scale)),(y + (-0.44392997f * scale)),(x + (0.41595438f * scale)),(y + (-0.43793997f * scale)),(x + (0.41894937f * scale)),(y + (-0.43194872f * scale))); painter.cubicTo((x + (0.42494062f * scale)),(y + (-0.41996747f * scale)),(x + (0.42494062f * scale)),(y + (-0.30913496f * scale)),(x + (0.42494062f * scale)),(y + (1.038815f * scale))); painter.cubicTo((x + (0.42494062f * scale)),(y + (2.386765f * scale)),(x + (0.42494062f * scale)),(y + (2.4975975f * scale)),(x + (0.41894937f * scale)),(y + (2.5095787f * scale))); painter.cubicTo((x + (0.41595438f * scale)),(y + (2.51557f * scale)),(x + (0.40996313f * scale)),(y + (2.52156f * scale)),(x + (0.40397188f * scale)),(y + (2.5275512f * scale))); painter.lineTo((x + (0.39498562f * scale)),(y + (2.5335424f * scale))); painter.lineTo((x + (0.21226312f * scale)),(y + (2.5335424f * scale))); painter.lineTo((x + (0.029541872f * scale)),(y + (2.5335424f * scale))); painter.lineTo((x + (0.020554373f * scale)),(y + (2.5275512f * scale))); painter.cubicTo((x + (0.014564373f * scale)),(y + (2.52156f * scale)),(x + (0.008573122f * scale)),(y + (2.51557f * scale)),(x + (0.0055781226f * scale)),(y + (2.5095787f * scale))); painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (2.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (1.03582f * scale))); painter.lineTo((x + (0.0025818725f * scale)),(y + (-0.42895374f * scale))); painter.lineTo((x + (0.008573122f * scale)),(y + (-0.43793997f * scale))); painter.cubicTo((x + (0.014564373f * scale)),(y + (-0.44392997f * scale)),(x + (0.020554373f * scale)),(y + (-0.44992122f * scale)),(x + (0.026545623f * scale)),(y + (-0.45291623f * scale))); painter.moveTo((x + (0.6016719f * scale)),(y + (-0.45291623f * scale))); painter.cubicTo((x + (0.6106581f * scale)),(y + (-0.45890749f * scale)),(x + (0.6196444f * scale)),(y + (-0.45890749f * scale)),(x + (0.6525944f * scale)),(y + (-0.45890749f * scale))); painter.cubicTo((x + (0.6915344f * scale)),(y + (-0.45890749f * scale)),(x + (0.6945306f * scale)),(y + (-0.45591247f * scale)),(x + (0.7035169f * scale)),(y + (-0.44992122f * scale))); painter.cubicTo((x + (0.72748065f * scale)),(y + (-0.43194872f * scale)),(x + (0.7244844f * scale)),(y + (-0.5008437f * scale)),(x + (0.7244844f * scale)),(y + (0.27797127f * scale))); painter.lineTo((x + (0.7244844f * scale)),(y + (0.9759113f * scale))); painter.lineTo((x + (0.74245685f * scale)),(y + (0.96093374f * scale))); painter.cubicTo((x + (0.8173431f * scale)),(y + (0.88904256f * scale)),(x + (0.8862381f * scale)),(y + (0.7782113f * scale)),(x + (0.92517936f * scale)),(y + (0.6793613f * scale))); painter.cubicTo((x + (0.9491431f * scale)),(y + (0.6074713f * scale)),(x + (0.9641206f * scale)),(y + (0.52659374f * scale)),(x + (0.9701106f * scale)),(y + (0.4397263f * scale))); painter.cubicTo((x + (0.9701106f * scale)),(y + (0.40078503f * scale)),(x + (0.97310686f * scale)),(y + (0.39479375f * scale)),(x + (0.97909814f * scale)),(y + (0.3858075f * scale))); painter.cubicTo((x + (0.9850881f * scale)),(y + (0.37682128f * scale)),(x + (1.0060569f * scale)),(y + (0.36484003f * scale)),(x + (1.0210332f * scale)),(y + (0.36484003f * scale))); painter.cubicTo((x + (1.0360106f * scale)),(y + (0.36484003f * scale)),(x + (1.0539831f * scale)),(y + (0.37382627f * scale)),(x + (1.0629693f * scale)),(y + (0.3828125f * scale))); painter.cubicTo((x + (1.0689607f * scale)),(y + (0.39479375f * scale)),(x + (1.0719569f * scale)),(y + (0.39779f * scale)),(x + (1.0749519f * scale)),(y + (0.45470375f * scale))); painter.cubicTo((x + (1.0839381f * scale)),(y + (0.57751626f * scale)),(x + (1.1258744f * scale)),(y + (0.6793613f * scale)),(x + (1.1947694f * scale)),(y + (0.7512525f * scale))); painter.cubicTo((x + (1.2636644f * scale)),(y + (0.81715256f * scale)),(x + (1.3445419f * scale)),(y + (0.84411126f * scale)),(x + (1.4433919f * scale)),(y + (0.8321288f * scale))); painter.cubicTo((x + (1.5122869f * scale)),(y + (0.82314247f * scale)),(x + (1.5632094f * scale)),(y + (0.802175f * scale)),(x + (1.6021507f * scale)),(y + (0.7632337f * scale))); painter.cubicTo((x + (1.6440868f * scale)),(y + (0.72129756f * scale)),(x + (1.6680493f * scale)),(y + (0.67337126f * scale)),(x + (1.6860231f * scale)),(y + (0.59848505f * scale))); painter.cubicTo((x + (1.7039956f * scale)),(y + (0.532585f * scale)),(x + (1.7099856f * scale)),(y + (0.466685f * scale)),(x + (1.7129818f * scale)),(y + (0.33189005f * scale))); painter.cubicTo((x + (1.7189732f * scale)),(y + (-0.13240373f * scale)),(x + (1.6321044f * scale)),(y + (-0.32111746f * scale)),(x + (1.3894731f * scale)),(y + (-0.35406747f * scale))); painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.36604872f * scale)),(x + (1.2307143f * scale)),(y + (-0.34807622f * scale)),(x + (1.2037556f * scale)),(y + (-0.303145f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.2911625f * scale)),(x + (1.1977656f * scale)),(y + (-0.28816748f * scale)),(x + (1.1977656f * scale)),(y + (-0.26420373f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.23724498f * scale)),(x + (1.1977656f * scale)),(y + (-0.23424873f * scale)),(x + (1.2067518f * scale)),(y + (-0.21627623f * scale))); painter.cubicTo((x + (1.2157382f * scale)),(y + (-0.19830373f * scale)),(x + (1.2217281f * scale)),(y + (-0.18931746f * scale)),(x + (1.2576743f * scale)),(y + (-0.15337247f * scale))); painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.12042248f * scale)),(x + (1.2996106f * scale)),(y + (-0.10843998f * scale)),(x + (1.3085968f * scale)),(y + (-0.09346372f * scale))); painter.cubicTo((x + (1.3295643f * scale)),(y + (-0.048531234f * scale)),(x + (1.3205781f * scale)),(y + (0.017368764f * scale)),(x + (1.2876282f * scale)),(y + (0.07727754f * scale))); painter.cubicTo((x + (1.2756469f * scale)),(y + (0.098245025f * scale)),(x + (1.2337106f * scale)),(y + (0.14018124f * scale)),(x + (1.2127419f * scale)),(y + (0.15216374f * scale))); painter.cubicTo((x + (1.1378556f * scale)),(y + (0.19709504f * scale)),(x + (1.0509881f * scale)),(y + (0.19709504f * scale)),(x + (0.9761019f * scale)),(y + (0.15216374f * scale))); painter.cubicTo((x + (0.9551344f * scale)),(y + (0.14018124f * scale)),(x + (0.9131981f * scale)),(y + (0.098245025f * scale)),(x + (0.9012156f * scale)),(y + (0.07727754f * scale))); painter.cubicTo((x + (0.8712619f * scale)),(y + (0.026355028f * scale)),(x + (0.8622756f * scale)),(y + (-0.027563721f * scale)),(x + (0.8712619f * scale)),(y + (-0.09645873f * scale))); painter.cubicTo((x + (0.8862381f * scale)),(y + (-0.18332621f * scale)),(x + (0.92517936f * scale)),(y + (-0.25821248f * scale)),(x + (0.9880844f * scale)),(y + (-0.32411247f * scale))); painter.cubicTo((x + (1.0539831f * scale)),(y + (-0.3870175f * scale)),(x + (1.1348606f * scale)),(y + (-0.42895374f * scale)),(x + (1.2307143f * scale)),(y + (-0.44992122f * scale))); painter.cubicTo((x + (1.2876282f * scale)),(y + (-0.46190372f * scale)),(x + (1.3984594f * scale)),(y + (-0.46190372f * scale)),(x + (1.4943144f * scale)),(y + (-0.44692624f * scale))); painter.cubicTo((x + (1.8477769f * scale)),(y + (-0.39600372f * scale)),(x + (2.0364895f * scale)),(y + (-0.18033123f * scale)),(x + (2.0634482f * scale)),(y + (0.19709504f * scale))); painter.cubicTo((x + (2.0724356f * scale)),(y + (0.31391752f * scale)),(x + (2.0634482f * scale)),(y + (0.39779f * scale)),(x + (2.0364895f * scale)),(y + (0.48465753f * scale))); painter.cubicTo((x + (1.9526169f * scale)),(y + (0.7302838f * scale)),(x + (1.7279594f * scale)),(y + (0.907015f * scale)),(x + (1.4583694f * scale)),(y + (0.93397504f * scale))); painter.cubicTo((x + (1.3715006f * scale)),(y + (0.9429613f * scale)),(x + (1.3475369f * scale)),(y + (0.93697006f * scale)),(x + (1.2666606f * scale)),(y + (0.8830512f * scale))); painter.cubicTo((x + (1.2187331f * scale)),(y + (0.8501025f * scale)),(x + (1.1947694f * scale)),(y + (0.83812004f * scale)),(x + (1.1708056f * scale)),(y + (0.8321288f * scale))); painter.cubicTo((x + (1.1348606f * scale)),(y + (0.82314247f * scale)),(x + (1.0989156f * scale)),(y + (0.8321288f * scale)),(x + (1.0719569f * scale)),(y + (0.8560925f * scale))); painter.cubicTo((x + (1.0390068f * scale)),(y + (0.8830512f * scale)),(x + (1.0240294f * scale)),(y + (0.93996507f * scale)),(x + (1.0240294f * scale)),(y + (1.038815f * scale))); painter.cubicTo((x + (1.0240294f * scale)),(y + (1.137665f * scale)),(x + (1.0390068f * scale)),(y + (1.1945789f * scale)),(x + (1.0719569f * scale)),(y + (1.2215376f * scale))); painter.cubicTo((x + (1.0989156f * scale)),(y + (1.2455013f * scale)),(x + (1.1348606f * scale)),(y + (1.2544875f * scale)),(x + (1.1708056f * scale)),(y + (1.2455013f * scale))); painter.cubicTo((x + (1.1947694f * scale)),(y + (1.23951f * scale)),(x + (1.2187331f * scale)),(y + (1.2275276f * scale)),(x + (1.2666606f * scale)),(y + (1.1945789f * scale))); painter.cubicTo((x + (1.3475369f * scale)),(y + (1.14066f * scale)),(x + (1.3715006f * scale)),(y + (1.1346688f * scale)),(x + (1.4583694f * scale)),(y + (1.1436551f * scale))); painter.cubicTo((x + (1.7279594f * scale)),(y + (1.170615f * scale)),(x + (1.9526169f * scale)),(y + (1.3473463f * scale)),(x + (2.0364895f * scale)),(y + (1.5929725f * scale))); painter.cubicTo((x + (2.0634482f * scale)),(y + (1.6798398f * scale)),(x + (2.0724356f * scale)),(y + (1.7637124f * scale)),(x + (2.0634482f * scale)),(y + (1.8775399f * scale))); painter.cubicTo((x + (2.0334945f * scale)),(y + (2.2909112f * scale)),(x + (1.8178219f * scale)),(y + (2.5035875f * scale)),(x + (1.4044507f * scale)),(y + (2.5335424f * scale))); painter.cubicTo((x + (1.3056006f * scale)),(y + (2.5395336f * scale)),(x + (1.2367057f * scale)),(y + (2.5335424f * scale)),(x + (1.1678107f * scale)),(y + (2.5095787f * scale))); painter.cubicTo((x + (1.0330156f * scale)),(y + (2.4646475f * scale)),(x + (0.92218435f * scale)),(y + (2.3568113f * scale)),(x + (0.88324314f * scale)),(y + (2.2280061f * scale))); painter.cubicTo((x + (0.8592794f * scale)),(y + (2.1381438f * scale)),(x + (0.8652706f * scale)),(y + (2.0662525f * scale)),(x + (0.9012156f * scale)),(y + (2.0003524f * scale))); painter.cubicTo((x + (0.9131981f * scale)),(y + (1.9793849f * scale)),(x + (0.9551344f * scale)),(y + (1.9374487f * scale)),(x + (0.9761019f * scale)),(y + (1.9254663f * scale))); painter.cubicTo((x + (1.0509881f * scale)),(y + (1.8805349f * scale)),(x + (1.1378556f * scale)),(y + (1.8805349f * scale)),(x + (1.2127419f * scale)),(y + (1.9254663f * scale))); painter.cubicTo((x + (1.2337106f * scale)),(y + (1.9374487f * scale)),(x + (1.2756469f * scale)),(y + (1.9793849f * scale)),(x + (1.2876282f * scale)),(y + (2.0003524f * scale))); painter.cubicTo((x + (1.3205781f * scale)),(y + (2.0602612f * scale)),(x + (1.3295643f * scale)),(y + (2.126161f * scale)),(x + (1.3085968f * scale)),(y + (2.1710937f * scale))); painter.cubicTo((x + (1.2996106f * scale)),(y + (2.18607f * scale)),(x + (1.2936194f * scale)),(y + (2.1980524f * scale)),(x + (1.2576743f * scale)),(y + (2.2310026f * scale))); painter.cubicTo((x + (1.2217281f * scale)),(y + (2.2669475f * scale)),(x + (1.2157382f * scale)),(y + (2.2759337f * scale)),(x + (1.2067518f * scale)),(y + (2.2939062f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3118787f * scale)),(x + (1.1977656f * scale)),(y + (2.314875f * scale)),(x + (1.1977656f * scale)),(y + (2.3388388f * scale))); painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3657975f * scale)),(x + (1.1977656f * scale)),(y + (2.3687925f * scale)),(x + (1.2037556f * scale)),(y + (2.380775f * scale))); painter.cubicTo((x + (1.2307143f * scale)),(y + (2.4257061f * scale)),(x + (1.2936194f * scale)),(y + (2.4436786f * scale)),(x + (1.3894731f * scale)),(y + (2.4316974f * scale))); painter.cubicTo((x + (1.5362506f * scale)),(y + (2.4107287f * scale)),(x + (1.6261132f * scale)),(y + (2.3328474f * scale)),(x + (1.6710457f * scale)),(y + (2.1770837f * scale))); painter.cubicTo((x + (1.7009994f * scale)),(y + (2.0752387f * scale)),(x + (1.7159768f * scale)),(y + (1.9374487f * scale)),(x + (1.7129818f * scale)),(y + (1.7457399f * scale))); painter.cubicTo((x + (1.7099856f * scale)),(y + (1.610945f * scale)),(x + (1.7039956f * scale)),(y + (1.5450449f * scale)),(x + (1.6860231f * scale)),(y + (1.47615f * scale))); painter.cubicTo((x + (1.6500769f * scale)),(y + (1.3323689f * scale)),(x + (1.5751907f * scale)),(y + (1.2604775f * scale)),(x + (1.4433919f * scale)),(y + (1.2455013f * scale))); painter.cubicTo((x + (1.3445419f * scale)),(y + (1.2335188f * scale)),(x + (1.2636644f * scale)),(y + (1.2604775f * scale)),(x + (1.1947694f * scale)),(y + (1.3263776f * scale))); painter.cubicTo((x + (1.1258744f * scale)),(y + (1.3982687f * scale)),(x + (1.0839381f * scale)),(y + (1.5001137f * scale)),(x + (1.0749519f * scale)),(y + (1.6229262f * scale))); painter.cubicTo((x + (1.0719569f * scale)),(y + (1.6798398f * scale)),(x + (1.0689607f * scale)),(y + (1.6828363f * scale)),(x + (1.0629693f * scale)),(y + (1.6948175f * scale))); painter.cubicTo((x + (1.0539831f * scale)),(y + (1.7038038f * scale)),(x + (1.0360106f * scale)),(y + (1.71279f * scale)),(x + (1.0210332f * scale)),(y + (1.71279f * scale))); painter.cubicTo((x + (1.0060569f * scale)),(y + (1.71279f * scale)),(x + (0.9850881f * scale)),(y + (1.7008088f * scale)),(x + (0.97909814f * scale)),(y + (1.6918225f * scale))); painter.cubicTo((x + (0.97310686f * scale)),(y + (1.6828363f * scale)),(x + (0.9701106f * scale)),(y + (1.6768451f * scale)),(x + (0.9701106f * scale)),(y + (1.6379037f * scale))); painter.cubicTo((x + (0.9641206f * scale)),(y + (1.5180862f * scale)),(x + (0.9401569f * scale)),(y + (1.4282224f * scale)),(x + (0.8922294f * scale)),(y + (1.3233826f * scale))); painter.cubicTo((x + (0.8562844f * scale)),(y + (1.2514913f * scale)),(x + (0.79637563f * scale)),(y + (1.170615f * scale)),(x + (0.74245685f * scale)),(y + (1.1166964f * scale))); painter.lineTo((x + (0.7244844f * scale)),(y + (1.1017187f * scale))); painter.lineTo((x + (0.7244844f * scale)),(y + (1.7996588f * scale))); painter.cubicTo((x + (0.7244844f * scale)),(y + (2.5784738f * scale)),(x + (0.72748065f * scale)),(y + (2.5095787f * scale)),(x + (0.7035169f * scale)),(y + (2.5275512f * scale))); painter.cubicTo((x + (0.6945306f * scale)),(y + (2.5335424f * scale)),(x + (0.6915344f * scale)),(y + (2.5335424f * scale)),(x + (0.6495981f * scale)),(y + (2.5335424f * scale))); painter.cubicTo((x + (0.6076619f * scale)),(y + (2.5335424f * scale)),(x + (0.6046669f * scale)),(y + (2.5335424f * scale)),(x + (0.59568065f * scale)),(y + (2.5275512f * scale))); painter.cubicTo((x + (0.5896894f * scale)),(y + (2.52156f * scale)),(x + (0.58369815f * scale)),(y + (2.51557f * scale)),(x + (0.58070314f * scale)),(y + (2.5095787f * scale))); painter.cubicTo((x + (0.57471186f * scale)),(y + (2.4975975f * scale)),(x + (0.57471186f * scale)),(y + (2.386765f * scale)),(x + (0.57471186f * scale)),(y + (1.03582f * scale))); painter.lineTo((x + (0.5777081f * scale)),(y + (-0.42895374f * scale))); painter.lineTo((x + (0.58369815f * scale)),(y + (-0.43793997f * scale))); painter.cubicTo((x + (0.5896894f * scale)),(y + (-0.44392997f * scale)),(x + (0.59568065f * scale)),(y + (-0.44992122f * scale)),(x + (0.6016719f * scale)),(y + (-0.45291623f * scale))); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGKeySignaturePainter.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGKeySignaturePainter.j0000644000175000017500000005435411273045225033362 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.painters; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGKeySignaturePainter { public static void paintSharp(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale))); painter.cubicTo((x + (0.44892004f * scale)),(y + (-0.8051702223718167f * scale)),(x + (0.47386006f * scale)),(y + (-0.7983684030594305f * scale)),(x + (0.48292914f * scale)),(y + (-0.7779629465192557f * scale))); painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.48746368f * scale)),(y + (-0.7620920382440091f * scale)),(x + (0.48746368f * scale)),(y + (-0.6033829182386399f * scale))); painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.5104247212409974f * scale)),(x + (0.48746368f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale))); painter.cubicTo((x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.51013637f * scale)),(y + (-0.4446738243103028f * scale)),(x + (0.5350764f * scale)),(y + (-0.45374290943145756f * scale))); painter.cubicTo((x + (0.5872237f * scale)),(y + (-0.47414835095405583f * scale)),(x + (0.5940255f * scale)),(y + (-0.4764156520366669f * scale)),(x + (0.6076291f * scale)),(y + (-0.46507926583290105f * scale))); painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.45374290943145756f * scale)),(x + (0.62350005f * scale)),(y + (-0.45147563815116887f * scale)),(x + (0.62350005f * scale)),(y + (-0.36078472733497624f * scale))); painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.2836974740028382f * scale)),(x + (0.62350005f * scale)),(y + (-0.2768956303596497f * scale)),(x + (0.6189655f * scale)),(y + (-0.2700937867164612f * scale))); painter.cubicTo((x + (0.6166982f * scale)),(y + (-0.26555924415588383f * scale)),(x + (0.61216366f * scale)),(y + (-0.26102470159530644f * scale)),(x + (0.6098964f * scale)),(y + (-0.25875746011734013f * scale))); painter.cubicTo((x + (0.6053619f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.5781546f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.54641277f * scale)),(y + (-0.23155020475387578f * scale))); painter.lineTo((x + (0.48973095f * scale)),(y + (-0.20661019086837773f * scale))); painter.lineTo((x + (0.48746368f * scale)),(y + (-0.022961068153381392f * scale))); painter.cubicTo((x + (0.48746368f * scale)),(y + (0.0767989873886108f * scale)),(x + (0.48746368f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale))); painter.cubicTo((x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.51013637f * scale)),(y + (0.15161896944046016f * scale)),(x + (0.5350764f * scale)),(y + (0.14254988431930538f * scale))); painter.cubicTo((x + (0.5872237f * scale)),(y + (0.12214435338973995f * scale)),(x + (0.5940255f * scale)),(y + (0.11987711191177364f * scale)),(x + (0.6076291f * scale)),(y + (0.13121343851089473f * scale))); painter.cubicTo((x + (0.62350005f * scale)),(y + (0.14254988431930538f * scale)),(x + (0.62350005f * scale)),(y + (0.14481712579727168f * scale)),(x + (0.62350005f * scale)),(y + (0.2355080366134643f * scale))); painter.cubicTo((x + (0.62350005f * scale)),(y + (0.3125954389572143f * scale)),(x + (0.62350005f * scale)),(y + (0.31939716339111324f * scale)),(x + (0.6189655f * scale)),(y + (0.3261990070343017f * scale))); painter.cubicTo((x + (0.6166982f * scale)),(y + (0.3307336091995239f * scale)),(x + (0.61216366f * scale)),(y + (0.3352680921554565f * scale)),(x + (0.6098964f * scale)),(y + (0.3375353336334228f * scale))); painter.cubicTo((x + (0.6053619f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.5781546f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.54641277f * scale)),(y + (0.36474258899688716f * scale))); painter.lineTo((x + (0.48973095f * scale)),(y + (0.3896826028823852f * scale))); painter.lineTo((x + (0.48746368f * scale)),(y + (0.5801335096359252f * scale))); painter.cubicTo((x + (0.48746368f * scale)),(y + (0.7524463653564453f * scale)),(x + (0.4851964f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.48292914f * scale)),(y + (0.7796536207199096f * scale))); painter.cubicTo((x + (0.4670582f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.42851457f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.4126437f * scale)),(y + (0.7796536207199096f * scale))); painter.cubicTo((x + (0.41037643f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.40810916f * scale)),(y + (0.754713487625122f * scale)),(x + (0.40810916f * scale)),(y + (0.5960044384002685f * scale))); painter.lineTo((x + (0.40810916f * scale)),(y + (0.42142446041107173f * scale))); painter.lineTo((x + (0.31061637f * scale)),(y + (0.4599680423736572f * scale))); painter.lineTo((x + (0.21539094f * scale)),(y + (0.4985117435455322f * scale))); painter.lineTo((x + (0.21539094f * scale)),(y + (0.6821606874465942f * scale))); painter.cubicTo((x + (0.21539094f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.21539094f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.20405458f * scale)),(y + (0.8839481592178344f * scale))); painter.cubicTo((x + (0.19952002f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.18364911f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.1768473f * scale)),(y + (0.8975517272949218f * scale))); painter.cubicTo((x + (0.1677782f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.15190728f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.14737274f * scale)),(y + (0.8839481592178344f * scale))); painter.cubicTo((x + (0.13603638f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.13603638f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.13603638f * scale)),(y + (0.7002989768981933f * scale))); painter.cubicTo((x + (0.13603638f * scale)),(y + (0.6073408842086792f * scale)),(x + (0.13603638f * scale)),(y + (0.532520842552185f * scale)),(x + (0.1337691f * scale)),(y + (0.532520842552185f * scale))); painter.cubicTo((x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)),(x + (0.113363646f * scale)),(y + (0.5415899276733398f * scale)),(x + (0.08842365f * scale)),(y + (0.5506590127944946f * scale))); painter.cubicTo((x + (0.036276367f * scale)),(y + (0.5710644245147705f * scale)),(x + (0.029474549f * scale)),(y + (0.5733317852020263f * scale)),(x + (0.01587091f * scale)),(y + (0.5619953393936157f * scale))); painter.cubicTo((x + (0.0f * scale)),(y + (0.5506590127944946f * scale)),(x + (0.0f * scale)),(y + (0.5483916521072387f * scale)),(x + (0.0f * scale)),(y + (0.4577008008956909f * scale))); painter.cubicTo((x + (0.0f * scale)),(y + (0.3806135177612304f * scale)),(x + (0.0f * scale)),(y + (0.3738117933273315f * scale)),(x + (0.004534546f * scale)),(y + (0.36700983047485347f * scale))); painter.cubicTo((x + (0.0068018185f * scale)),(y + (0.36247534751892085f * scale)),(x + (0.011336365f * scale)),(y + (0.3579407453536987f * scale)),(x + (0.013603637f * scale)),(y + (0.3556735038757324f * scale))); painter.cubicTo((x + (0.018138183f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.04534546f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.07708728f * scale)),(y + (0.328466248512268f * scale))); painter.lineTo((x + (0.13603638f * scale)),(y + (0.30352623462677f * scale))); painter.lineTo((x + (0.13603638f * scale)),(y + (0.11987711191177364f * scale))); painter.cubicTo((x + (0.13603638f * scale)),(y + (0.020117175579071f * scale)),(x + (0.13603638f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale))); painter.cubicTo((x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.113363646f * scale)),(y + (-0.054702806472778365f * scale)),(x + (0.08842365f * scale)),(y + (-0.04563372135162358f * scale))); painter.cubicTo((x + (0.036276367f * scale)),(y + (-0.0252283096313477f * scale)),(x + (0.029474549f * scale)),(y + (-0.022961068153381392f * scale)),(x + (0.01587091f * scale)),(y + (-0.034297394752502486f * scale))); painter.cubicTo((x + (0.0f * scale)),(y + (-0.04563372135162358f * scale)),(x + (0.0f * scale)),(y + (-0.047901022434234664f * scale)),(x + (0.0f * scale)),(y + (-0.13859199285507207f * scale))); painter.cubicTo((x + (0.0f * scale)),(y + (-0.21567927598953252f * scale)),(x + (0.0f * scale)),(y + (-0.222481119632721f * scale)),(x + (0.004534546f * scale)),(y + (-0.2292829036712647f * scale))); painter.cubicTo((x + (0.0068018185f * scale)),(y + (-0.23381744623184209f * scale)),(x + (0.011336365f * scale)),(y + (-0.23835204839706425f * scale)),(x + (0.013603637f * scale)),(y + (-0.2406192302703858f * scale))); painter.cubicTo((x + (0.018138183f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.04534546f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.07708728f * scale)),(y + (-0.2678265452384949f * scale))); painter.lineTo((x + (0.13603638f * scale)),(y + (-0.29276655912399296f * scale))); painter.lineTo((x + (0.13603638f * scale)),(y + (-0.483217465877533f * scale))); painter.cubicTo((x + (0.13603638f * scale)),(y + (-0.6555302023887635f * scale)),(x + (0.13830365f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.14057092f * scale)),(y + (-0.6827374875545502f * scale))); painter.cubicTo((x + (0.15644182f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.19498548f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.2108564f * scale)),(y + (-0.6827374875545502f * scale))); painter.cubicTo((x + (0.21312366f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.21539094f * scale)),(y + (-0.6577974885702134f * scale)),(x + (0.21539094f * scale)),(y + (-0.4990883648395539f * scale))); painter.lineTo((x + (0.21765819f * scale)),(y + (-0.3245083570480347f * scale))); painter.lineTo((x + (0.31288365f * scale)),(y + (-0.36305199861526494f * scale))); painter.lineTo((x + (0.40810916f * scale)),(y + (-0.4015956103801728f * scale))); painter.lineTo((x + (0.40810916f * scale)),(y + (-0.5852447479963303f * scale))); painter.cubicTo((x + (0.40810916f * scale)),(y + (-0.7575574919581414f * scale)),(x + (0.40810916f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.4126437f * scale)),(y + (-0.7779629465192557f * scale))); painter.cubicTo((x + (0.41717824f * scale)),(y + (-0.7870320381596685f * scale)),(x + (0.4217128f * scale)),(y + (-0.7915665844455362f * scale)),(x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale))); painter.moveTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale))); painter.lineTo((x + (0.40810916f * scale)),(y + (-0.1748683333396912f * scale))); painter.lineTo((x + (0.31061637f * scale)),(y + (-0.13632469177246098f * scale))); painter.lineTo((x + (0.21539094f * scale)),(y + (-0.09778105020523076f * scale))); painter.lineTo((x + (0.21539094f * scale)),(y + (0.08813531398773189f * scale))); painter.lineTo((x + (0.21539094f * scale)),(y + (0.27178437709808345f * scale))); painter.lineTo((x + (0.22219275f * scale)),(y + (0.26951713562011714f * scale))); painter.cubicTo((x + (0.22672729f * scale)),(y + (0.26724989414215083f * scale)),(x + (0.26980546f * scale)),(y + (0.24911172389984126f * scale)),(x + (0.3196855f * scale)),(y + (0.2309735536575317f * scale))); painter.lineTo((x + (0.40810916f * scale)),(y + (0.19469715356826778f * scale))); painter.lineTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale))); } public static void paintFlat(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale))); painter.cubicTo((x + (0.066563375f * scale)),(y + (-1.2334432420507073f * scale)),(x + (0.11644338f * scale)),(y + (-1.2279010191746056f * scale)),(x + (0.13584116f * scale)),(y + (-1.2140454626828432f * scale))); painter.cubicTo((x + (0.14138338f * scale)),(y + (-1.2112743496149778f * scale)),(x + (0.14138338f * scale)),(y + (-1.1807921263575554f * scale)),(x + (0.13307005f * scale)),(y + (-0.729100923538208f * scale))); painter.cubicTo((x + (0.12752782f * scale)),(y + (-0.4658453869819641f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale))); painter.cubicTo((x + (0.12475671f * scale)),(y + (-0.24692759990692137f * scale)),(x + (0.13584116f * scale)),(y + (-0.2524698185920715f * scale)),(x + (0.1469256f * scale)),(y + (-0.26078311681747435f * scale))); painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.29957870721817015f * scale)),(x + (0.27716786f * scale)),(y + (-0.32174758195877073f * scale)),(x + (0.34921673f * scale)),(y + (-0.3272898006439209f * scale))); painter.cubicTo((x + (0.42403674f * scale)),(y + (-0.3300609993934631f * scale)),(x + (0.4850012f * scale)),(y + (-0.30789206504821776f * scale)),(x + (0.53765225f * scale)),(y + (-0.2552408981323242f * scale))); painter.cubicTo((x + (0.5903034f * scale)),(y + (-0.2053608703613281f * scale)),(x + (0.6180146f * scale)),(y + (-0.13885424613952635f * scale)),(x + (0.6235568f * scale)),(y + (-0.06680534362792967f * scale))); painter.cubicTo((x + (0.6263279f * scale)),(y + (-0.014154295921325666f * scale)),(x + (0.61524343f * scale)),(y + (0.03295471191406252f * scale)),(x + (0.5903034f * scale)),(y + (0.08283462047576906f * scale))); painter.cubicTo((x + (0.55150783f * scale)),(y + (0.1576546621322632f * scale)),(x + (0.49608564f * scale)),(y + (0.21030582904815676f * scale)),(x + (0.32981896f * scale)),(y + (0.32392134189605715f * scale))); painter.cubicTo((x + (0.2245167f * scale)),(y + (0.3959703636169434f * scale)),(x + (0.19680561f * scale)),(y + (0.41813923835754396f * scale)),(x + (0.16355227f * scale)),(y + (0.4569347095489502f * scale))); painter.cubicTo((x + (0.1469256f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.12752782f * scale)),(y + (0.49295916080474855f * scale)),(x + (0.12198559f * scale)),(y + (0.495730299949646f * scale))); painter.cubicTo((x + (0.0970456f * scale)),(y + (0.5123568964004517f * scale)),(x + (0.06933448f * scale)),(y + (0.5095858764648438f * scale)),(x + (0.04716559f * scale)),(y + (0.4901880216598511f * scale))); painter.cubicTo((x + (0.04162337f * scale)),(y + (0.48187472343444826f * scale)),(x + (0.036081146f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.033310037f * scale)),(y + (0.4652481269836426f * scale))); painter.cubicTo((x + (0.030538924f * scale)),(y + (0.4597058486938477f * scale)),(x + (0.024996702f * scale)),(y + (0.16319682121276857f * scale)),(x + (0.016683366f * scale)),(y + (-0.3051209259033203f * scale))); painter.cubicTo((x + (0.0083700325f * scale)),(y + (-0.7235587048530578f * scale)),(x + (0.00282781f * scale)),(y + (-1.097658793926239f * scale)),(x + (5.669861E-5f * scale)),(y + (-1.1392254564166069f * scale))); painter.lineTo((x + (5.669861E-5f * scale)),(y + (-1.2112743496149778f * scale))); painter.lineTo((x + (0.011141145f * scale)),(y + (-1.2168165738880634f * scale))); painter.cubicTo((x + (0.016683366f * scale)),(y + (-1.2195876850932836f * scale)),(x + (0.027767813f * scale)),(y + (-1.225129907503724f * scale)),(x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale))); painter.moveTo((x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale))); painter.cubicTo((x + (0.31042117f * scale)),(y + (-0.22198770523071287f * scale)),(x + (0.27993897f * scale)),(y + (-0.22475872516632078f * scale)),(x + (0.25499895f * scale)),(y + (-0.21644542694091795f * scale))); painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.2025898504257202f * scale)),(x + (0.16355227f * scale)),(y + (-0.15825198173522947f * scale)),(x + (0.1469256f * scale)),(y + (-0.10005865573883055f * scale))); painter.cubicTo((x + (0.14138338f * scale)),(y + (-0.07234762191772459f * scale)),(x + (0.13584116f * scale)),(y + (0.16596796035766603f * scale)),(x + (0.14138338f * scale)),(y + (0.2574147176742554f * scale))); painter.cubicTo((x + (0.14415449f * scale)),(y + (0.2962103080749512f * scale)),(x + (0.14415449f * scale)),(y + (0.33223464012146f * scale)),(x + (0.1469256f * scale)),(y + (0.3405479383468628f * scale))); painter.lineTo((x + (0.14969671f * scale)),(y + (0.35163249492645265f * scale))); painter.lineTo((x + (0.19126338f * scale)),(y + (0.3156080436706543f * scale))); painter.cubicTo((x + (0.24945672f * scale)),(y + (0.2657280158996582f * scale)),(x + (0.30765006f * scale)),(y + (0.2075346899032593f * scale)),(x + (0.33536118f * scale)),(y + (0.1687390995025635f * scale))); painter.cubicTo((x + (0.36307228f * scale)),(y + (0.12994362831115724f * scale)),(x + (0.39078343f * scale)),(y + (0.07729246139526369f * scale)),(x + (0.40186784f * scale)),(y + (0.03849699020385744f * scale))); painter.cubicTo((x + (0.41849452f * scale)),(y + (-0.02523873329162596f * scale)),(x + (0.41018116f * scale)),(y + (-0.09728751659393309f * scale)),(x + (0.38524118f * scale)),(y + (-0.1527098226547241f * scale))); painter.cubicTo((x + (0.37138563f * scale)),(y + (-0.18042085647583006f * scale)),(x + (0.35475895f * scale)),(y + (-0.19981859207153319f * scale)),(x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale))); } public static void paintNatural(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale))); painter.cubicTo((x + (0.061049357f * scale)),(y + (-1.0033880504779518f * scale)),(x + (0.11092936f * scale)),(y + (-0.99784582760185f * scale)),(x + (0.13032715f * scale)),(y + (-0.9839902706444263f * scale))); painter.cubicTo((x + (0.13309824f * scale)),(y + (-0.9812191594392061f * scale)),(x + (0.13309824f * scale)),(y + (-0.9396524876356125f * scale)),(x + (0.13032715f * scale)),(y + (-0.7429035902023315f * scale))); painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.6098902225494385f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale))); painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.49904578924179077f * scale)),(x + (0.1968338f * scale)),(y + (-0.5101302564144135f * scale)),(x + (0.28273827f * scale)),(y + (-0.523985743522644f * scale))); painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.5406124293804169f * scale)),(x + (0.4406916f * scale)),(y + (-0.5489257574081421f * scale)),(x + (0.44346273f * scale)),(y + (-0.5489257574081421f * scale))); painter.cubicTo((x + (0.4573183f * scale)),(y + (-0.546154648065567f * scale)),(x + (0.4684027f * scale)),(y + (-0.5350702106952667f * scale)),(x + (0.47671604f * scale)),(y + (-0.521214634180069f * scale))); painter.lineTo((x + (0.48225826f * scale)),(y + (-0.5101302564144135f * scale))); painter.lineTo((x + (0.49057162f * scale)),(y + (0.29072093963623047f * scale))); painter.cubicTo((x + (0.49888495f * scale)),(y + (0.9336187839508057f * scale)),(x + (0.50165606f * scale)),(y + (1.0915722846984863f * scale)),(x + (0.49888495f * scale)),(y + (1.0915722846984863f * scale))); painter.cubicTo((x + (0.49611384f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.48780048f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.47948715f * scale)),(y + (1.0998854637145996f * scale))); painter.cubicTo((x + (0.4573183f * scale)),(y + (1.108198881149292f * scale)),(x + (0.4129805f * scale)),(y + (1.108198881149292f * scale)),(x + (0.3908116f * scale)),(y + (1.0998854637145996f * scale))); painter.cubicTo((x + (0.3824983f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.37418494f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.37141383f * scale)),(y + (1.0915722846984863f * scale))); painter.cubicTo((x + (0.36864272f * scale)),(y + (1.0888011455535889f * scale)),(x + (0.36864272f * scale)),(y + (1.0472345352172852f * scale)),(x + (0.37141383f * scale)),(y + (0.8504854440689087f * scale))); painter.cubicTo((x + (0.37418494f * scale)),(y + (0.7174720764160156f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale))); painter.cubicTo((x + (0.37418494f * scale)),(y + (0.6066277027130127f * scale)),(x + (0.30490717f * scale)),(y + (0.617712140083313f * scale)),(x + (0.21900271f * scale)),(y + (0.6315675973892212f * scale))); painter.cubicTo((x + (0.13032715f * scale)),(y + (0.6481943130493164f * scale)),(x + (0.061049357f * scale)),(y + (0.6565077304840088f * scale)),(x + (0.058278244f * scale)),(y + (0.6565077304840088f * scale))); painter.cubicTo((x + (0.044422686f * scale)),(y + (0.6537365913391113f * scale)),(x + (0.033338238f * scale)),(y + (0.6426520347595215f * scale)),(x + (0.025024906f * scale)),(y + (0.6287965774536133f * scale))); painter.lineTo((x + (0.019482683f * scale)),(y + (0.6149410009384155f * scale))); painter.lineTo((x + (0.011169349f * scale)),(y + (-0.08060795068740845f * scale))); painter.cubicTo((x + (0.005627127f * scale)),(y + (-0.46302133798599243f * scale)),(x + (0.002856015f * scale)),(y + (-0.8232658207416534f * scale)),(x + (8.490361E-5f * scale)),(y + (-0.8814591467380524f * scale))); painter.lineTo((x + (8.490361E-5f * scale)),(y + (-0.9839902706444263f * scale))); painter.lineTo((x + (0.01394046f * scale)),(y + (-0.9895324930548668f * scale))); painter.cubicTo((x + (0.022253795f * scale)),(y + (-0.9923036047257483f * scale)),(x + (0.033338238f * scale)),(y + (-0.9950747163966298f * scale)),(x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale))); painter.moveTo((x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale))); painter.cubicTo((x + (0.38526937f * scale)),(y + (-0.25241684913635254f * scale)),(x + (0.38526937f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.3824983f * scale)),(y + (-0.26073020696640015f * scale))); painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.12478492f * scale)),(y + (-0.21916353702545166f * scale)),(x + (0.12478492f * scale)),(y + (-0.2163923978805542f * scale))); painter.cubicTo((x + (0.12201381f * scale)),(y + (-0.2163923978805542f * scale)),(x + (0.11647158f * scale)),(y + (0.3655409812927246f * scale)),(x + (0.11647158f * scale)),(y + (0.36831212043762207f * scale))); painter.cubicTo((x + (0.1192427f * scale)),(y + (0.36831212043762207f * scale)),(x + (0.37418494f * scale)),(y + (0.3267453908920288f * scale)),(x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale))); painter.cubicTo((x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)),(x + (0.38526937f * scale)),(y + (-0.09446346759796143f * scale)),(x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale))); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGNotePainter.java0000644000175000017500000001105711273045225032336 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.painters; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGNotePainter { public static void paintFooter(TGPainter painter, float x, float y,int dir,float scale){ painter.moveTo(( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) )); painter.cubicTo(( x + (0.659375f * scale) ),( y + ((0.0f * scale) * dir) ),( x + (0.69375f * scale) ),( y + ((0.00625f * scale) * dir) ),( x + (0.70625f * scale) ),( y + ((0.0125f * scale) * dir) )); painter.cubicTo(( x + (0.725f * scale) ),( y + ((0.025f * scale) * dir) ),( x + (0.73125f * scale) ),( y + ((0.03125f * scale) * dir) ),( x + (0.75f * scale) ),( y + ((0.065625f * scale) * dir) )); painter.cubicTo(( x + (0.815625f * scale) ),( y + ((0.1875f * scale) * dir) ),( x + (0.86875f * scale) ),( y + ((0.3375f * scale) * dir) ),( x + (0.890625f * scale) ),( y + ((0.4625f * scale) * dir) )); painter.cubicTo(( x + (0.934375f * scale) ),( y + ((0.70937496f * scale) * dir) ),( x + (0.903125f * scale) ),( y + ((0.890625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((1.096875f * scale) * dir) )); painter.cubicTo(( x + (0.721875f * scale) ),( y + ((1.19375f * scale) * dir) ),( x + (0.653125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.5f * scale) ),( y + ((1.453125f * scale) * dir) )); painter.cubicTo(( x + (0.340625f * scale) ),( y + ((1.6375f * scale) * dir) ),( x + (0.290625f * scale) ),( y + ((1.703125f * scale) * dir) ),( x + (0.228125f * scale) ),( y + ((1.790625f * scale) * dir) )); painter.cubicTo(( x + (0.165625f * scale) ),( y + ((1.8875f * scale) * dir) ),( x + (0.121875f * scale) ),( y + ((1.978125f * scale) * dir) ),( x + (0.09375f * scale) ),( y + ((2.06875f * scale) * dir) )); painter.cubicTo(( x + (0.078125f * scale) ),( y + ((2.125f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.209375f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.25625f * scale) * dir) )); painter.lineTo(( x + (0.065625f * scale) ),( y + ((2.271875f * scale) * dir) )); painter.lineTo(( x + (0.034375f * scale) ),( y + ((2.271875f * scale) * dir) )); painter.lineTo(( x + (0.0f * scale) ),( y + ((2.271875f * scale) * dir) )); painter.lineTo(( x + (0.0f * scale) ),( y + ((1.88125f * scale) * dir) )); painter.lineTo(( x + (0.0f * scale) ),( y + ((1.490625f * scale) * dir) )); painter.lineTo(( x + (0.034375f * scale) ),( y + ((1.490625f * scale) * dir) )); painter.lineTo(( x + (0.06875f * scale) ),( y + ((1.490625f * scale) * dir) )); painter.lineTo(( x + (0.15f * scale) ),( y + ((1.434375f * scale) * dir) )); painter.cubicTo(( x + (0.38125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.521875f * scale) ),( y + ((1.15625f * scale) * dir) ),( x + (0.621875f * scale) ),( y + ((1.021875f * scale) * dir) )); painter.cubicTo(( x + (0.74375f * scale) ),( y + ((0.85625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((0.71874994f * scale) * dir) ),( x + (0.74375f * scale) ),( y + ((0.5124999f * scale) * dir) )); painter.cubicTo(( x + (0.721875f * scale) ),( y + ((0.38125f * scale) * dir) ),( x + (0.66875f * scale) ),( y + ((0.246875f * scale) * dir) ),( x + (0.6f * scale) ),( y + ((0.128125f * scale) * dir) )); painter.cubicTo(( x + (0.584375f * scale) ),( y + ((0.10625f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.096875f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.0875f * scale) * dir) )); painter.cubicTo(( x + (0.58125f * scale) ),( y + ((0.05f * scale) * dir) ),( x + (0.60625f * scale) ),( y + ((0.01875f * scale) * dir) ),( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) )); } public static void paintNote(TGPainter painter, float x, float y,float scale){ painter.moveTo( x ,( y + (0.66f * scale) )); painter.cubicTo( x,( y + (0.83f * scale) ),( x + (0.166f * scale) ),( y + (1.0f * scale) ),( x + (0.33f * scale) ),( y + (1.0f * scale) )); painter.cubicTo(( x + (0.83f * scale) ),( y + (1.0f * scale) ),( x + (1.33f * scale) ),( y + (0.66f * scale) ),( x + (1.33f * scale) ),( y + (0.33f * scale) )); painter.cubicTo(( x + (1.33f * scale) ),( y + (0.166f * scale) ),( x + (1.16f * scale) ), y ,( x + (1.0f * scale) ), y ); painter.cubicTo(( x + (0.5f * scale) ), y , x ,( y + (0.33f * scale) ), x ,( y + (0.66f * scale) )); } public static void paintHarmonic(TGPainter painter, float x, float y,float scale){ painter.moveTo(x ,(y + (0.5f * scale))); painter.lineTo((x + (0.665f * scale )) ,(y + (1.0f * scale))); painter.lineTo((x + (1.33f * scale)), (y + (0.5f*scale))); painter.lineTo((x + (0.665f * scale)) ,y); painter.lineTo(x ,(y + (0.5f * scale) )); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGSilencePainter.java0000644000175000017500000010754711273045225033025 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.painters; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGSilencePainter { public static void paintWhole(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale))); painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale))); painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale))); painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale))); painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale))); painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale))); painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale))); painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale))); painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale))); painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale))); painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale))); painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale))); painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale))); painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale))); painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale))); painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale))); painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale))); } public static void paintHalf(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale))); painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale))); painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale))); painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale))); painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale))); painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale))); painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale))); painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale))); painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale))); painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale))); painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale))); painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale))); painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale))); painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale))); painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale))); painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale))); painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale))); } public static void paintQuarter(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (2.1034088f * scale)),(y + (0.047267675f * scale))); painter.cubicTo((x + (2.1979485f * scale)),(y + (0.0f * scale)),(x + (2.2924728f * scale)),(y + (0.0f * scale)),(x + (2.387024f * scale)),(y + (0.023633957f * scale))); painter.cubicTo((x + (2.4579277f * scale)),(y + (0.070901394f * scale)),(x + (6.121151f * scale)),(y + (4.4195156f * scale)),(x + (6.2156906f * scale)),(y + (4.6085863f * scale))); painter.cubicTo((x + (6.38113f * scale)),(y + (4.915825f * scale)),(x + (6.333866f * scale)),(y + (5.2230635f * scale)),(x + (6.0975113f * scale)),(y + (5.601205f * scale))); painter.cubicTo((x + (5.9084587f * scale)),(y + (5.8611765f * scale)),(x + (5.5303154f * scale)),(y + (6.239316f * scale)),(x + (4.821308f * scale)),(y + (6.830161f * scale))); painter.cubicTo((x + (4.4667816f * scale)),(y + (7.1137667f * scale)),(x + (4.1359215f * scale)),(y + (7.4210052f * scale)),(x + (4.065014f * scale)),(y + (7.491905f * scale))); painter.cubicTo((x + (3.3323631f * scale)),(y + (8.271823f * scale)),(x + (3.166935f * scale)),(y + (9.453509f * scale)),(x + (3.5923424f * scale)),(y + (10.351589f * scale))); painter.cubicTo((x + (3.73415f * scale)),(y + (10.65883f * scale)),(x + (3.8050346f * scale)),(y + (10.729736f * scale)),(x + (4.6322327f * scale)),(y + (11.675077f * scale))); painter.cubicTo((x + (6.1447945f * scale)),(y + (13.447618f * scale)),(x + (6.0738907f * scale)),(y + (13.376713f * scale)),(x + (6.0738907f * scale)),(y + (13.518524f * scale))); painter.cubicTo((x + (6.0738907f * scale)),(y + (13.66031f * scale)),(x + (5.9320793f * scale)),(y + (13.802121f * scale)),(x + (5.790291f * scale)),(y + (13.825765f * scale))); painter.cubicTo((x + (5.6721115f * scale)),(y + (13.825765f * scale)),(x + (5.5775757f * scale)),(y + (13.778487f * scale)),(x + (5.4121437f * scale)),(y + (13.6130495f * scale))); painter.cubicTo((x + (4.821308f * scale)),(y + (13.02221f * scale)),(x + (3.4741745f * scale)),(y + (12.5968f * scale)),(x + (2.7415237f * scale)),(y + (12.762231f * scale))); painter.cubicTo((x + (2.387024f * scale)),(y + (12.833136f * scale)),(x + (2.1979485f * scale)),(y + (12.974947f * scale)),(x + (2.0325203f * scale)),(y + (13.305807f * scale))); painter.cubicTo((x + (1.9379692f * scale)),(y + (13.542143f * scale)),(x + (1.8670654f * scale)),(y + (13.825765f * scale)),(x + (1.8434448f * scale)),(y + (14.203887f * scale))); painter.cubicTo((x + (1.8198013f * scale)),(y + (14.7238455f * scale)),(x + (1.9143524f * scale)),(y + (15.267421f * scale)),(x + (2.0797806f * scale)),(y + (15.787354f * scale))); painter.cubicTo((x + (2.1979485f * scale)),(y + (16.118237f * scale)),(x + (2.2688522f * scale)),(y + (16.307312f * scale)),(x + (2.4342842f * scale)),(y + (16.543648f * scale))); painter.cubicTo((x + (2.5760956f * scale)),(y + (16.73272f * scale)),(x + (2.5760956f * scale)),(y + (16.803608f * scale)),(x + (2.4579277f * scale)),(y + (16.874508f * scale))); painter.cubicTo((x + (2.3633804f * scale)),(y + (16.921787f * scale)),(x + (2.3161163f * scale)),(y + (16.898151f * scale)),(x + (2.1034088f * scale)),(y + (16.638172f * scale))); painter.cubicTo((x + (1.2526054f * scale)),(y + (15.551019f * scale)),(x + (0.47267532f * scale)),(y + (13.991195f * scale)),(x + (0.21271515f * scale)),(y + (12.833136f * scale))); painter.cubicTo((x + (0.0f * scale)),(y + (12.005961f * scale)),(x + (0.09454727f * scale)),(y + (11.438742f * scale)),(x + (0.4254074f * scale)),(y + (11.202407f * scale))); painter.cubicTo((x + (0.590847f * scale)),(y + (11.107882f * scale)),(x + (0.75629425f * scale)),(y + (11.084239f * scale)),(x + (1.1107941f * scale)),(y + (11.084239f * scale))); painter.cubicTo((x + (1.7961845f * scale)),(y + (11.131502f * scale)),(x + (2.7651672f * scale)),(y + (11.3914795f * scale)),(x + (3.7105103f * scale)),(y + (11.793245f * scale))); painter.lineTo((x + (4.01775f * scale)),(y + (11.935056f * scale))); painter.lineTo((x + (2.7178802f * scale)),(y + (10.398851f * scale))); painter.cubicTo((x + (0.73265076f * scale)),(y + (8.059115f * scale)),(x + (0.66174316f * scale)),(y + (7.9645834f * scale)),(x + (0.590847f * scale)),(y + (7.8227787f * scale))); painter.cubicTo((x + (0.5199585f * scale)),(y + (7.63371f * scale)),(x + (0.496315f * scale)),(y + (7.4446383f * scale)),(x + (0.5672188f * scale)),(y + (7.2319345f * scale))); painter.cubicTo((x + (0.68538666f * scale)),(y + (6.853795f * scale)),(x + (1.0162506f * scale)),(y + (6.4756536f * scale)),(x + (2.0088768f * scale)),(y + (5.648472f * scale))); painter.cubicTo((x + (2.3633804f * scale)),(y + (5.3648667f * scale)),(x + (2.67062f * scale)),(y + (5.0812616f * scale)),(x + (2.7415237f * scale)),(y + (5.033994f * scale))); painter.cubicTo((x + (3.2851028f * scale)),(y + (4.443149f * scale)),(x + (3.5450783f * scale)),(y + (3.6159673f * scale)),(x + (3.450531f * scale)),(y + (2.8360534f * scale))); painter.cubicTo((x + (3.4032707f * scale)),(y + (2.5760818f * scale)),(x + (3.2851028f * scale)),(y + (2.1743064f * scale)),(x + (3.1432915f * scale)),(y + (1.9616027f * scale))); painter.cubicTo((x + (3.0723915f * scale)),(y + (1.8434343f * scale)),(x + (2.7887878f * scale)),(y + (1.4889283f * scale)),(x + (2.505188f * scale)),(y + (1.1344206f * scale))); painter.cubicTo((x + (2.2215881f * scale)),(y + (0.8035486f * scale)),(x + (1.9616127f * scale)),(y + (0.49630952f * scale)),(x + (1.9379692f * scale)),(y + (0.44904137f * scale))); painter.cubicTo((x + (1.8670654f * scale)),(y + (0.30723906f * scale)),(x + (1.9379692f * scale)),(y + (0.11816859f * scale)),(x + (2.1034088f * scale)),(y + (0.047267675f * scale))); } public static void paintEighth(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (1.6779978f * scale)),(y + (0.070901394f * scale))); painter.cubicTo((x + (2.1979408f * scale)),(y + (0.0f * scale)),(x + (2.6469831f * scale)),(y + (0.14180231f * scale)),(x + (3.0014887f * scale)),(y + (0.47267532f * scale))); painter.cubicTo((x + (3.214193f * scale)),(y + (0.7090125f * scale)),(x + (3.3087273f * scale)),(y + (0.89808273f * scale)),(x + (3.450531f * scale)),(y + (1.4652932f * scale))); painter.cubicTo((x + (3.5214317f * scale)),(y + (1.7252648f * scale)),(x + (3.5923345f * scale)),(y + (1.9852359f * scale)),(x + (3.6159685f * scale)),(y + (2.0325048f * scale))); painter.cubicTo((x + (3.7105024f * scale)),(y + (2.2452075f * scale)),(x + (3.8759398f * scale)),(y + (2.3870108f * scale)),(x + (4.0886426f * scale)),(y + (2.4106443f * scale))); painter.cubicTo((x + (4.183178f * scale)),(y + (2.4106443f * scale)),(x + (4.2304454f * scale)),(y + (2.4106443f * scale)),(x + (4.348614f * scale)),(y + (2.3397439f * scale))); painter.cubicTo((x + (4.6558537f * scale)),(y + (2.19794f * scale)),(x + (5.388501f * scale)),(y + (1.3234913f * scale)),(x + (5.6721063f * scale)),(y + (0.7799146f * scale))); painter.cubicTo((x + (5.7430067f * scale)),(y + (0.6144779f * scale)),(x + (5.861175f * scale)),(y + (0.5435767f * scale)),(x + (5.979345f * scale)),(y + (0.5435767f * scale))); painter.cubicTo((x + (6.073879f * scale)),(y + (0.5435767f * scale)),(x + (6.192049f * scale)),(y + (0.6144779f * scale)),(x + (6.239316f * scale)),(y + (0.6853788f * scale))); painter.cubicTo((x + (6.26295f * scale)),(y + (0.7326472f * scale)),(x + (6.026612f * scale)),(y + (1.5598292f * scale)),(x + (4.7740216f * scale)),(y + (5.7430067f * scale))); painter.cubicTo((x + (3.970474f * scale)),(y + (8.484522f * scale)),(x + (3.2850938f * scale)),(y + (10.776992f * scale)),(x + (3.2614603f * scale)),(y + (10.800634f * scale))); painter.cubicTo((x + (3.2614603f * scale)),(y + (10.824278f * scale)),(x + (3.1669261f * scale)),(y + (10.895159f * scale)),(x + (3.0723903f * scale)),(y + (10.918801f * scale))); painter.cubicTo((x + (2.9305882f * scale)),(y + (10.989707f * scale)),(x + (2.9069548f * scale)),(y + (10.989707f * scale)),(x + (2.7178838f * scale)),(y + (10.989707f * scale))); painter.cubicTo((x + (2.528813f * scale)),(y + (10.989707f * scale)),(x + (2.481546f * scale)),(y + (10.989707f * scale)),(x + (2.3397446f * scale)),(y + (10.942445f * scale))); painter.cubicTo((x + (2.2688415f * scale)),(y + (10.895159f * scale)),(x + (2.1743073f * scale)),(y + (10.847896f * scale)),(x + (2.1743073f * scale)),(y + (10.824278f * scale))); painter.cubicTo((x + (2.1270401f * scale)),(y + (10.800634f * scale)),(x + (2.292475f * scale)),(y + (10.375227f * scale)),(x + (3.4977982f * scale)),(y + (6.94833f * scale))); painter.cubicTo((x + (4.254079f * scale)),(y + (4.844924f * scale)),(x + (4.8685584f * scale)),(y + (3.0960243f * scale)),(x + (4.8449225f * scale)),(y + (3.0960243f * scale))); painter.lineTo((x + (4.4431496f * scale)),(y + (3.2141926f * scale))); painter.cubicTo((x + (3.5923345f * scale)),(y + (3.4977977f * scale)),(x + (3.0723903f * scale)),(y + (3.5923336f * scale)),(x + (2.4342787f * scale)),(y + (3.5923336f * scale))); painter.cubicTo((x + (1.914336f * scale)),(y + (3.5923336f * scale)),(x + (1.7725322f * scale)),(y + (3.5687f * scale)),(x + (1.394393f * scale)),(y + (3.3796299f * scale))); painter.cubicTo((x + (0.3545066f * scale)),(y + (2.88332f * scale)),(x + (0.0f * scale)),(y + (1.6779974f * scale)),(x + (0.5908443f * scale)),(y + (0.7799146f * scale))); painter.cubicTo((x + (0.85081583f * scale)),(y + (0.4254074f * scale)),(x + (1.2525895f * scale)),(y + (0.14180231f * scale)),(x + (1.6779978f * scale)),(y + (0.070901394f * scale))); } public static void paintSixteenth(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (3.5214243f * scale)),(y + (0.070901394f * scale))); painter.cubicTo((x + (4.041381f * scale)),(y + (0.0f * scale)),(x + (4.490409f * scale)),(y + (0.14180231f * scale)),(x + (4.8449125f * scale)),(y + (0.4726758f * scale))); painter.cubicTo((x + (5.0576286f * scale)),(y + (0.7090137f * scale)),(x + (5.152153f * scale)),(y + (0.89808273f * scale)),(x + (5.2939644f * scale)),(y + (1.4652946f * scale))); painter.cubicTo((x + (5.36487f * scale)),(y + (1.725266f * scale)),(x + (5.435775f * scale)),(y + (1.9852376f * scale)),(x + (5.4593954f * scale)),(y + (2.032505f * scale))); painter.cubicTo((x + (5.5775614f * scale)),(y + (2.3397436f * scale)),(x + (5.9084463f * scale)),(y + (2.4815469f * scale)),(x + (6.144781f * scale)),(y + (2.363377f * scale))); painter.cubicTo((x + (6.4520226f * scale)),(y + (2.2215748f * scale)),(x + (7.090123f * scale)),(y + (1.394392f * scale)),(x + (7.421006f * scale)),(y + (0.7326474f * scale))); painter.cubicTo((x + (7.4682703f * scale)),(y + (0.6144779f * scale)),(x + (7.6100817f * scale)),(y + (0.54357696f * scale)),(x + (7.704606f * scale)),(y + (0.54357696f * scale))); painter.cubicTo((x + (7.7991533f * scale)),(y + (0.54357696f * scale)),(x + (7.917321f * scale)),(y + (0.6144779f * scale)),(x + (7.9645834f * scale)),(y + (0.6853788f * scale))); painter.cubicTo((x + (7.988206f * scale)),(y + (0.7326474f * scale)),(x + (7.6100817f * scale)),(y + (2.150673f * scale)),(x + (5.861184f * scale)),(y + (8.6972275f * scale))); painter.cubicTo((x + (4.6794825f * scale)),(y + (13.069472f * scale)),(x + (3.710497f * scale)),(y + (16.685432f * scale)),(x + (3.6868773f * scale)),(y + (16.709076f * scale))); painter.cubicTo((x + (3.6632347f * scale)),(y + (16.73272f * scale)),(x + (3.592329f * scale)),(y + (16.803608f * scale)),(x + (3.4978046f * scale)),(y + (16.827246f * scale))); painter.cubicTo((x + (3.3559942f * scale)),(y + (16.89815f * scale)),(x + (3.3323498f * scale)),(y + (16.89815f * scale)),(x + (3.143302f * scale)),(y + (16.89815f * scale))); painter.cubicTo((x + (2.9542284f * scale)),(y + (16.89815f * scale)),(x + (2.9069443f * scale)),(y + (16.89815f * scale)),(x + (2.7651548f * scale)),(y + (16.850887f * scale))); painter.cubicTo((x + (2.69425f * scale)),(y + (16.803608f * scale)),(x + (2.5997238f * scale)),(y + (16.75634f * scale)),(x + (2.5997238f * scale)),(y + (16.73272f * scale))); painter.cubicTo((x + (2.5524387f * scale)),(y + (16.709076f * scale)),(x + (2.69425f * scale)),(y + (16.283669f * scale)),(x + (3.7341404f * scale)),(y + (12.856779f * scale))); painter.cubicTo((x + (4.372241f * scale)),(y + (10.753368f * scale)),(x + (4.8921986f * scale)),(y + (9.028101f * scale)),(x + (4.8921986f * scale)),(y + (9.004459f * scale))); painter.cubicTo((x + (4.868556f * scale)),(y + (9.004459f * scale)),(x + (4.6794825f * scale)),(y + (9.051743f * scale)),(x + (4.46679f * scale)),(y + (9.122626f * scale))); painter.cubicTo((x + (3.6159725f * scale)),(y + (9.406247f * scale)),(x + (3.0723963f * scale)),(y + (9.500772f * scale)),(x + (2.43427f * scale)),(y + (9.500772f * scale))); painter.cubicTo((x + (1.9143381f * scale)),(y + (9.500772f * scale)),(x + (1.7725258f * scale)),(y + (9.477153f * scale)),(x + (1.3943825f * scale)),(y + (9.28808f * scale))); painter.cubicTo((x + (0.3545103f * scale)),(y + (8.791764f * scale)),(x + (0.0f * scale)),(y + (7.586442f * scale)),(x + (0.59084797f * scale)),(y + (6.6883574f * scale))); painter.cubicTo((x + (1.1580448f * scale)),(y + (5.8611765f * scale)),(x + (2.3397465f * scale)),(y + (5.7193727f * scale)),(x + (3.0014915f * scale)),(y + (6.357486f * scale))); painter.cubicTo((x + (3.2378254f * scale)),(y + (6.6174574f * scale)),(x + (3.3323498f * scale)),(y + (6.830161f * scale)),(x + (3.4741611f * scale)),(y + (7.4446383f * scale))); painter.cubicTo((x + (3.5450668f * scale)),(y + (7.799144f * scale)),(x + (3.6395912f * scale)),(y + (8.059116f * scale)),(x + (3.7341404f * scale)),(y + (8.153648f * scale))); painter.cubicTo((x + (3.805046f * scale)),(y + (8.224551f * scale)),(x + (3.9468327f * scale)),(y + (8.295452f * scale)),(x + (4.088643f * scale)),(y + (8.31909f * scale))); painter.cubicTo((x + (4.1831684f * scale)),(y + (8.31909f * scale)),(x + (4.2304544f * scale)),(y + (8.31909f * scale)),(x + (4.3486233f * scale)),(y + (8.248187f * scale))); painter.cubicTo((x + (4.608577f * scale)),(y + (8.130019f * scale)),(x + (5.152153f * scale)),(y + (7.515539f * scale)),(x + (5.4593954f * scale)),(y + (6.995596f * scale))); painter.cubicTo((x + (5.5539417f * scale)),(y + (6.830161f * scale)),(x + (5.601205f * scale)),(y + (6.6883574f * scale)),(x + (5.766636f * scale)),(y + (6.144781f * scale))); painter.cubicTo((x + (6.2865934f * scale)),(y + (4.4904165f * scale)),(x + (6.6883574f * scale)),(y + (3.119658f * scale)),(x + (6.6883574f * scale)),(y + (3.0960245f * scale))); painter.cubicTo((x + (6.6883574f * scale)),(y + (3.0960245f * scale)),(x + (6.5229273f * scale)),(y + (3.1432915f * scale)),(x + (6.3574743f * scale)),(y + (3.2141924f * scale))); painter.cubicTo((x + (5.9557085f * scale)),(y + (3.3323627f * scale)),(x + (5.4121323f * scale)),(y + (3.474164f * scale)),(x + (5.033985f * scale)),(y + (3.5450664f * scale))); painter.cubicTo((x + (4.7740307f * scale)),(y + (3.5923338f * scale)),(x + (4.6322203f * scale)),(y + (3.5923338f * scale)),(x + (4.2777157f * scale)),(y + (3.5923338f * scale))); painter.cubicTo((x + (3.757759f * scale)),(y + (3.5923338f * scale)),(x + (3.6159725f * scale)),(y + (3.5687003f * scale)),(x + (3.2378254f * scale)),(y + (3.3796296f * scale))); painter.cubicTo((x + (2.197935f * scale)),(y + (2.8833203f * scale)),(x + (1.8434324f * scale)),(y + (1.6779971f * scale)),(x + (2.43427f * scale)),(y + (0.77991486f * scale))); painter.cubicTo((x + (2.69425f * scale)),(y + (0.4254074f * scale)),(x + (3.096015f * scale)),(y + (0.14180231f * scale)),(x + (3.5214243f * scale)),(y + (0.070901394f * scale))); } public static void paintThirtySecond(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (4.939474f * scale)),(y + (0.070901155f * scale))); painter.cubicTo((x + (5.459408f * scale)),(y + (0.0f * scale)),(x + (5.9084606f * scale)),(y + (0.14180207f * scale)),(x + (6.2629623f * scale)),(y + (0.4726758f * scale))); painter.cubicTo((x + (6.4756565f * scale)),(y + (0.70901346f * scale)),(x + (6.570204f * scale)),(y + (0.89808273f * scale)),(x + (6.7119904f * scale)),(y + (1.4652941f * scale))); painter.cubicTo((x + (6.782896f * scale)),(y + (1.7252657f * scale)),(x + (6.8538036f * scale)),(y + (1.9852374f * scale)),(x + (6.877445f * scale)),(y + (2.0325048f * scale))); painter.cubicTo((x + (6.9719696f * scale)),(y + (2.245209f * scale)),(x + (7.1373997f * scale)),(y + (2.3870108f * scale)),(x + (7.3501167f * scale)),(y + (2.4106443f * scale))); painter.cubicTo((x + (7.444641f * scale)),(y + (2.4106443f * scale)),(x + (7.4919033f * scale)),(y + (2.4106443f * scale)),(x + (7.562809f * scale)),(y + (2.3633773f * scale))); painter.cubicTo((x + (7.8227882f * scale)),(y + (2.19794f * scale)),(x + (8.34272f * scale)),(y + (1.4889283f * scale)),(x + (8.697241f * scale)),(y + (0.80354834f * scale))); painter.cubicTo((x + (8.768129f * scale)),(y + (0.61447763f * scale)),(x + (8.862679f * scale)),(y + (0.54357696f * scale)),(x + (9.004465f * scale)),(y + (0.54357696f * scale))); painter.cubicTo((x + (9.099014f * scale)),(y + (0.54357696f * scale)),(x + (9.217182f * scale)),(y + (0.61447763f * scale)),(x + (9.264444f * scale)),(y + (0.6853788f * scale))); painter.cubicTo((x + (9.288086f * scale)),(y + (0.7326474f * scale)),(x + (8.815416f * scale)),(y + (2.7887857f * scale)),(x + (6.735634f * scale)),(y + (11.627814f * scale))); painter.cubicTo((x + (5.3175983f * scale)),(y + (17.6308f * scale)),(x + (4.1359196f * scale)),(y + (22.57025f * scale)),(x + (4.1359196f * scale)),(y + (22.593893f * scale))); painter.cubicTo((x + (4.112276f * scale)),(y + (22.641155f * scale)),(x + (4.041378f * scale)),(y + (22.688417f * scale)),(x + (3.946846f * scale)),(y + (22.73568f * scale))); painter.cubicTo((x + (3.781416f * scale)),(y + (22.806585f * scale)),(x + (3.7577744f * scale)),(y + (22.806585f * scale)),(x + (3.5687008f * scale)),(y + (22.806585f * scale))); painter.cubicTo((x + (3.3796272f * scale)),(y + (22.806585f * scale)),(x + (3.332365f * scale)),(y + (22.806585f * scale)),(x + (3.1905785f * scale)),(y + (22.759323f * scale))); painter.cubicTo((x + (3.1196728f * scale)),(y + (22.71206f * scale)),(x + (3.0251236f * scale)),(y + (22.664799f * scale)),(x + (3.0251236f * scale)),(y + (22.641155f * scale))); painter.cubicTo((x + (2.9778614f * scale)),(y + (22.617512f * scale)),(x + (3.0960293f * scale)),(y + (22.192102f * scale)),(x + (3.9941082f * scale)),(y + (18.765215f * scale))); painter.cubicTo((x + (4.5376854f * scale)),(y + (16.661814f * scale)),(x + (4.986738f * scale)),(y + (14.936537f * scale)),(x + (5.0103607f * scale)),(y + (14.912916f * scale))); painter.cubicTo((x + (5.0103607f * scale)),(y + (14.889275f * scale)),(x + (4.9158325f * scale)),(y + (14.889275f * scale)),(x + (4.6322346f * scale)),(y + (15.007441f * scale))); painter.cubicTo((x + (3.7105122f * scale)),(y + (15.314682f * scale)),(x + (2.883337f * scale)),(y + (15.456493f * scale)),(x + (2.2688541f * scale)),(y + (15.43285f * scale))); painter.cubicTo((x + (1.9379692f * scale)),(y + (15.409229f * scale)),(x + (1.6780167f * scale)),(y + (15.3383255f * scale)),(x + (1.3943939f * scale)),(y + (15.196516f * scale))); painter.cubicTo((x + (0.35450363f * scale)),(y + (14.700201f * scale)),(x + (0.0f * scale)),(y + (13.49488f * scale)),(x + (0.59086037f * scale)),(y + (12.5968f * scale))); painter.cubicTo((x + (1.1580582f * scale)),(y + (11.769626f * scale)),(x + (2.3397598f * scale)),(y + (11.627814f * scale)),(x + (3.001505f * scale)),(y + (12.265927f * scale))); painter.cubicTo((x + (3.2378407f * scale)),(y + (12.525894f * scale)),(x + (3.332365f * scale)),(y + (12.738611f * scale)),(x + (3.4741764f * scale)),(y + (13.353088f * scale))); painter.cubicTo((x + (3.5450802f * scale)),(y + (13.707598f * scale)),(x + (3.6396065f * scale)),(y + (13.967552f * scale)),(x + (3.7341537f * scale)),(y + (14.062099f * scale))); painter.cubicTo((x + (3.8286781f * scale)),(y + (14.133005f * scale)),(x + (3.9704895f * scale)),(y + (14.203886f * scale)),(x + (4.112276f * scale)),(y + (14.22753f * scale))); painter.cubicTo((x + (4.2068253f * scale)),(y + (14.22753f * scale)),(x + (4.2540874f * scale)),(y + (14.22753f * scale)),(x + (4.348612f * scale)),(y + (14.156624f * scale))); painter.cubicTo((x + (4.679497f * scale)),(y + (13.991194f * scale)),(x + (5.3648834f * scale)),(y + (13.140376f * scale)),(x + (5.5775776f * scale)),(y + (12.667706f * scale))); painter.cubicTo((x + (5.601219f * scale)),(y + (12.573157f * scale)),(x + (6.546562f * scale)),(y + (9.051743f * scale)),(x + (6.546562f * scale)),(y + (9.004459f * scale))); painter.cubicTo((x + (6.546562f * scale)),(y + (8.980838f * scale)),(x + (6.404751f * scale)),(y + (9.0281f * scale)),(x + (6.2393208f * scale)),(y + (9.099006f * scale))); painter.cubicTo((x + (5.7430058f * scale)),(y + (9.240808f * scale)),(x + (5.2939777f * scale)),(y + (9.382604f * scale)),(x + (4.8685703f * scale)),(y + (9.453508f * scale))); painter.cubicTo((x + (4.561329f * scale)),(y + (9.5007715f * scale)),(x + (4.443161f * scale)),(y + (9.5007715f * scale)),(x + (4.065014f * scale)),(y + (9.5007715f * scale))); painter.cubicTo((x + (3.5450802f * scale)),(y + (9.5007715f * scale)),(x + (3.4032707f * scale)),(y + (9.477151f * scale)),(x + (3.0251236f * scale)),(y + (9.288079f * scale))); painter.cubicTo((x + (1.9852371f * scale)),(y + (8.791764f * scale)),(x + (1.6307297f * scale)),(y + (7.586441f * scale)),(x + (2.2215939f * scale)),(y + (6.6883574f * scale))); painter.cubicTo((x + (2.7887878f * scale)),(y + (5.8611755f * scale)),(x + (3.9704895f * scale)),(y + (5.7193727f * scale)),(x + (4.6322346f * scale)),(y + (6.357485f * scale))); painter.cubicTo((x + (4.8685703f * scale)),(y + (6.6174564f * scale)),(x + (4.9630947f * scale)),(y + (6.830161f * scale)),(x + (5.104904f * scale)),(y + (7.4446383f * scale))); painter.cubicTo((x + (5.175812f * scale)),(y + (7.799144f * scale)),(x + (5.270336f * scale)),(y + (8.059115f * scale)),(x + (5.3648834f * scale)),(y + (8.153648f * scale))); painter.cubicTo((x + (5.50667f * scale)),(y + (8.295452f * scale)),(x + (5.7666492f * scale)),(y + (8.366357f * scale)),(x + (5.9320793f * scale)),(y + (8.271823f * scale))); painter.cubicTo((x + (6.168415f * scale)),(y + (8.177285f * scale)),(x + (6.4756565f * scale)),(y + (7.8227797f * scale)),(x + (6.782896f * scale)),(y + (7.3501034f * scale))); painter.cubicTo((x + (7.113781f * scale)),(y + (6.877428f * scale)),(x + (7.0901375f * scale)),(y + (6.948329f * scale)),(x + (7.610079f * scale)),(y + (4.963092f * scale))); painter.cubicTo((x + (7.8700504f * scale)),(y + (3.970473f * scale)),(x + (8.082766f * scale)),(y + (3.1432917f * scale)),(x + (8.082766f * scale)),(y + (3.1196578f * scale))); painter.cubicTo((x + (8.082766f * scale)),(y + (3.1196578f * scale)),(x + (7.9173126f * scale)),(y + (3.1432917f * scale)),(x + (7.72826f * scale)),(y + (3.2141926f * scale))); painter.cubicTo((x + (7.279211f * scale)),(y + (3.355996f * scale)),(x + (6.830158f * scale)),(y + (3.4741638f * scale)),(x + (6.452036f * scale)),(y + (3.545066f * scale))); painter.cubicTo((x + (6.1920567f * scale)),(y + (3.592334f * scale)),(x + (6.050247f * scale)),(y + (3.592334f * scale)),(x + (5.6957436f * scale)),(y + (3.592334f * scale))); painter.cubicTo((x + (5.175812f * scale)),(y + (3.592334f * scale)),(x + (5.0339985f * scale)),(y + (3.5687f * scale)),(x + (4.6558533f * scale)),(y + (3.3796294f * scale))); painter.cubicTo((x + (3.6159801f * scale)),(y + (2.88332f * scale)),(x + (3.2614594f * scale)),(y + (1.6779974f * scale)),(x + (3.8523216f * scale)),(y + (0.7799146f * scale))); painter.cubicTo((x + (4.112276f * scale)),(y + (0.4254074f * scale)),(x + (4.5140667f * scale)),(y + (0.14180207f * scale)),(x + (4.939474f * scale)),(y + (0.070901155f * scale))); } public static void paintSixtyFourth(TGPainter painter, float x, float y,float scale){ painter.moveTo((x + (5.908436f * scale)),(y + (0.07090092f * scale))); painter.cubicTo((x + (6.4283676f * scale)),(y + (0.0f * scale)),(x + (6.8774185f * scale)),(y + (0.14180303f * scale)),(x + (7.231926f * scale)),(y + (0.4726758f * scale))); painter.cubicTo((x + (7.4446335f * scale)),(y + (0.70901346f * scale)),(x + (7.5391655f * scale)),(y + (0.8980839f * scale)),(x + (7.680977f * scale)),(y + (1.4652941f * scale))); painter.cubicTo((x + (7.7991447f * scale)),(y + (1.9616034f * scale)),(x + (7.846405f * scale)),(y + (2.1034052f * scale)),(x + (7.9409294f * scale)),(y + (2.221575f * scale))); painter.cubicTo((x + (8.082741f * scale)),(y + (2.3870103f * scale)),(x + (8.366341f * scale)),(y + (2.4579127f * scale)),(x + (8.531792f * scale)),(y + (2.3633769f * scale))); painter.cubicTo((x + (8.72084f * scale)),(y + (2.2688425f * scale)),(x + (9.028084f * scale)),(y + (1.8434336f * scale)),(x + (9.382591f * scale)),(y + (1.1344209f * scale))); painter.cubicTo((x + (9.642563f * scale)),(y + (0.61447763f * scale)),(x + (9.689827f * scale)),(y + (0.5672102f * scale)),(x + (9.855282f * scale)),(y + (0.5672102f * scale))); painter.cubicTo((x + (9.949806f * scale)),(y + (0.5672102f * scale)),(x + (10.067974f * scale)),(y + (0.6381123f * scale)),(x + (10.115234f * scale)),(y + (0.70901346f * scale))); painter.cubicTo((x + (10.138878f * scale)),(y + (0.75628066f * scale)),(x + (9.571659f * scale)),(y + (3.592333f * scale)),(x + (7.3264503f * scale)),(y + (14.605665f * scale))); painter.cubicTo((x + (5.790268f * scale)),(y + (22.215736f * scale)),(x + (4.514042f * scale)),(y + (28.478699f * scale)),(x + (4.514042f * scale)),(y + (28.502335f * scale))); painter.cubicTo((x + (4.4903984f * scale)),(y + (28.549604f * scale)),(x + (4.4195137f * scale)),(y + (28.596869f * scale)),(x + (4.3249702f * scale)),(y + (28.644129f * scale))); painter.cubicTo((x + (4.1595383f * scale)),(y + (28.715034f * scale)),(x + (4.135895f * scale)),(y + (28.715034f * scale)),(x + (3.9468231f * scale)),(y + (28.715034f * scale))); painter.cubicTo((x + (3.7577515f * scale)),(y + (28.715034f * scale)),(x + (3.7104874f * scale)),(y + (28.715034f * scale)),(x + (3.568699f * scale)),(y + (28.667772f * scale))); painter.cubicTo((x + (3.497795f * scale)),(y + (28.62051f * scale)),(x + (3.403244f * scale)),(y + (28.573223f * scale)),(x + (3.403244f * scale)),(y + (28.549604f * scale))); painter.cubicTo((x + (3.3559837f * scale)),(y + (28.525963f * scale)),(x + (3.450531f * scale)),(y + (28.100554f * scale)),(x + (4.230446f * scale)),(y + (24.65002f * scale))); painter.cubicTo((x + (4.7031136f * scale)),(y + (22.522978f * scale)),(x + (5.0812607f * scale)),(y + (20.797724f * scale)),(x + (5.0812607f * scale)),(y + (20.77408f * scale))); painter.cubicTo((x + (5.0812607f * scale)),(y + (20.77408f * scale)),(x + (4.892189f * scale)),(y + (20.821352f * scale)),(x + (4.679474f * scale)),(y + (20.892248f * scale))); painter.cubicTo((x + (4.1595383f * scale)),(y + (21.081322f * scale)),(x + (3.7341309f * scale)),(y + (21.175869f * scale)),(x + (3.28508f * scale)),(y + (21.270393f * scale))); painter.cubicTo((x + (2.954216f * scale)),(y + (21.317657f * scale)),(x + (2.836052f * scale)),(y + (21.317657f * scale)),(x + (2.4579048f * scale)),(y + (21.317657f * scale))); painter.cubicTo((x + (1.9143257f * scale)),(y + (21.317657f * scale)),(x + (1.7725143f * scale)),(y + (21.294037f * scale)),(x + (1.3943901f * scale)),(y + (21.104965f * scale))); painter.cubicTo((x + (0.35450363f * scale)),(y + (20.60865f * scale)),(x + (0.0f * scale)),(y + (19.40333f * scale)),(x + (0.5908394f * scale)),(y + (18.505249f * scale))); painter.cubicTo((x + (1.1580353f * scale)),(y + (17.678051f * scale)),(x + (2.339737f * scale)),(y + (17.536264f * scale)),(x + (3.00148f * scale)),(y + (18.174364f * scale))); painter.cubicTo((x + (3.2378159f * scale)),(y + (18.434345f * scale)),(x + (3.3323517f * scale)),(y + (18.647038f * scale)),(x + (3.4741516f * scale)),(y + (19.261518f * scale))); painter.cubicTo((x + (3.5450554f * scale)),(y + (19.616022f * scale)),(x + (3.6395798f * scale)),(y + (19.876f * scale)),(x + (3.7341309f * scale)),(y + (19.970549f * scale))); painter.cubicTo((x + (3.8050346f * scale)),(y + (20.04143f * scale)),(x + (3.9468231f * scale)),(y + (20.112335f * scale)),(x + (4.0886345f * scale)),(y + (20.135979f * scale))); painter.cubicTo((x + (4.2540627f * scale)),(y + (20.1596f * scale)),(x + (4.395874f * scale)),(y + (20.065073f * scale)),(x + (4.6558533f * scale)),(y + (19.805096f * scale))); painter.cubicTo((x + (5.010357f * scale)),(y + (19.450592f * scale)),(x + (5.459385f * scale)),(y + (18.812492f * scale)),(x + (5.577553f * scale)),(y + (18.505249f * scale))); painter.cubicTo((x + (5.6011925f * scale)),(y + (18.434345f * scale)),(x + (5.790268f * scale)),(y + (17.60717f * scale)),(x + (6.00296f * scale)),(y + (16.661804f * scale))); painter.cubicTo((x + (6.2156754f * scale)),(y + (15.716461f * scale)),(x + (6.3811073f * scale)),(y + (14.93655f * scale)),(x + (6.404751f * scale)),(y + (14.912907f * scale))); painter.cubicTo((x + (6.404751f * scale)),(y + (14.889288f * scale)),(x + (6.333843f * scale)),(y + (14.889288f * scale)),(x + (6.0266037f * scale)),(y + (15.007456f * scale))); painter.cubicTo((x + (5.1048813f * scale)),(y + (15.314692f * scale)),(x + (4.277706f * scale)),(y + (15.456482f * scale)),(x + (3.6632233f * scale)),(y + (15.432863f * scale))); painter.cubicTo((x + (3.3323517f * scale)),(y + (15.409222f * scale)),(x + (3.0723839f * scale)),(y + (15.338314f * scale)),(x + (2.7887688f * scale)),(y + (15.19651f * scale))); painter.cubicTo((x + (1.7488976f * scale)),(y + (14.700214f * scale)),(x + (1.3943901f * scale)),(y + (13.494894f * scale)),(x + (1.9852333f * scale)),(y + (12.59679f * scale))); painter.cubicTo((x + (2.2688293f * scale)),(y + (12.17139f * scale)),(x + (2.7415009f * scale)),(y + (11.911427f * scale)),(x + (3.28508f * scale)),(y + (11.864165f * scale))); painter.cubicTo((x + (3.7104874f * scale)),(y + (11.840521f * scale)),(x + (4.0886345f * scale)),(y + (11.982332f * scale)),(x + (4.395874f * scale)),(y + (12.289569f * scale))); painter.cubicTo((x + (4.6085663f * scale)),(y + (12.525908f * scale)),(x + (4.7031136f * scale)),(y + (12.714971f * scale)),(x + (4.8449097f * scale)),(y + (13.282178f * scale))); painter.cubicTo((x + (4.915806f * scale)),(y + (13.542156f * scale)),(x + (4.9867134f * scale)),(y + (13.802132f * scale)),(x + (5.010357f * scale)),(y + (13.849398f * scale))); painter.cubicTo((x + (5.128525f * scale)),(y + (14.156637f * scale)),(x + (5.459385f * scale)),(y + (14.298426f * scale)),(x + (5.7193604f * scale)),(y + (14.180258f * scale))); painter.cubicTo((x + (6.00296f * scale)),(y + (14.038469f * scale)),(x + (6.6647034f * scale)),(y + (13.187653f * scale)),(x + (6.8774185f * scale)),(y + (12.691338f * scale))); painter.cubicTo((x + (6.9010506f * scale)),(y + (12.620433f * scale)),(x + (7.1137543f * scale)),(y + (11.745991f * scale)),(x + (7.3264503f * scale)),(y + (10.777008f * scale))); painter.lineTo((x + (7.728237f * scale)),(y + (8.980829f * scale))); painter.lineTo((x + (7.3028297f * scale)),(y + (9.122639f * scale))); painter.cubicTo((x + (6.4283676f * scale)),(y + (9.406237f * scale)),(x + (5.8847923f * scale)),(y + (9.500785f * scale)),(x + (5.246689f * scale)),(y + (9.500785f * scale))); painter.cubicTo((x + (4.726738f * scale)),(y + (9.500785f * scale)),(x + (4.5849457f * scale)),(y + (9.47714f * scale)),(x + (4.2067986f * scale)),(y + (9.288069f * scale))); painter.cubicTo((x + (3.1669083f * scale)),(y + (8.791758f * scale)),(x + (2.8124046f * scale)),(y + (7.586441f * scale)),(x + (3.403244f * scale)),(y + (6.6883574f * scale))); painter.cubicTo((x + (3.6868668f * scale)),(y + (6.26295f * scale)),(x + (4.1595383f * scale)),(y + (6.0029783f * scale)),(x + (4.7031136f * scale)),(y + (5.9557104f * scale))); painter.cubicTo((x + (5.128525f * scale)),(y + (5.9320765f * scale)),(x + (5.506672f * scale)),(y + (6.07388f * scale)),(x + (5.8138924f * scale)),(y + (6.381119f * scale))); painter.cubicTo((x + (6.0266037f * scale)),(y + (6.6174564f * scale)),(x + (6.121128f * scale)),(y + (6.806527f * scale)),(x + (6.2629395f * scale)),(y + (7.3737373f * scale))); painter.cubicTo((x + (6.3811073f * scale)),(y + (7.8700476f * scale)),(x + (6.4283676f * scale)),(y + (8.0118475f * scale)),(x + (6.5229187f * scale)),(y + (8.130014f * scale))); painter.cubicTo((x + (6.688347f * scale)),(y + (8.295459f * scale)),(x + (6.948326f * scale)),(y + (8.366352f * scale)),(x + (7.1137543f * scale)),(y + (8.271822f * scale))); painter.cubicTo((x + (7.397354f * scale)),(y + (8.130014f * scale)),(x + (7.846405f * scale)),(y + (7.539174f * scale)),(x + (8.130005f * scale)),(y + (6.948328f * scale))); painter.cubicTo((x + (8.224552f * scale)),(y + (6.759259f * scale)),(x + (8.271812f * scale)),(y + (6.5701895f * scale)),(x + (8.62632f * scale)),(y + (4.939458f * scale))); painter.lineTo((x + (9.028084f * scale)),(y + (3.1196573f * scale))); painter.cubicTo((x + (9.028084f * scale)),(y + (3.0960238f * scale)),(x + (8.886295f * scale)),(y + (3.1432912f * scale)),(x + (8.72084f * scale)),(y + (3.2141936f * scale))); painter.cubicTo((x + (7.8227615f * scale)),(y + (3.4977987f * scale)),(x + (7.066494f * scale)),(y + (3.6396005f * scale)),(x + (6.4992714f * scale)),(y + (3.6159666f * scale))); painter.cubicTo((x + (6.168415f * scale)),(y + (3.592333f * scale)),(x + (5.908436f * scale)),(y + (3.5214326f * scale)),(x + (5.624836f * scale)),(y + (3.379629f * scale))); painter.cubicTo((x + (4.5849457f * scale)),(y + (2.8833196f * scale)),(x + (4.230446f * scale)),(y + (1.6779983f * scale)),(x + (4.8212814f * scale)),(y + (0.7799144f * scale))); painter.cubicTo((x + (5.0812607f * scale)),(y + (0.42540812f * scale)),(x + (5.4830284f * scale)),(y + (0.14180303f * scale)),(x + (5.908436f * scale)),(y + (0.07090092f * scale))); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTempoPainter.java0000644000175000017500000000122011273045225032504 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.painters; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGTempoPainter { public static void paintTempo(TGPainter painter, int x, int y,float scale) { int width = Math.round(scale * 1.33f); int height = Math.round(scale * (1.0f + 2.5f)); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x + (width - (scale * 1.33f)),y + ( height - (1.0f * scale) ), scale ); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.moveTo(x + width,y); painter.lineTo(x + width,y + (height - (0.66f * scale)) ); painter.closePath(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTripletFeelPainter.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTripletFeelPainter.ja0000644000175000017500000001235411273045225033322 0ustar julianjulianpackage org.herac.tuxguitar.gui.editors.tab.painters; import org.herac.tuxguitar.gui.editors.TGPainter; public class TGTripletFeelPainter { public static void paintTripletFeel8(TGPainter painter, int x, int y,float scale) { float topSpacing = (1.0f * scale); float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x, y + (topSpacing + verticalSpacing) , scale ); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) ); painter.lineTo( x + Math.round(ovalWidth) ,y + topSpacing); painter.closePath(); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing) , scale ); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +Math.round(topSpacing + verticalSpacing + (0.33f * scale)) ); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +topSpacing); painter.closePath(); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintFooter(painter,x + Math.round(ovalWidth + horizontalSpacing),y + (topSpacing + (scale * 2.3f)), -1 , scale); painter.closePath(); painter.initPath(); painter.moveTo( x, y + (1 * scale) ); painter.cubicTo( x, y + (1 * scale), x + ( ( (ovalWidth * 2f) + horizontalSpacing) / 2f),y + (-1 * scale) ,x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1 * scale)); painter.closePath(); } public static void paintTripletFeelNone8(TGPainter painter, int x, int y,float scale) { float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x, y + verticalSpacing , scale ); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) ); painter.lineTo( x + Math.round(ovalWidth) ,y); painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y); painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) ); painter.closePath(); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale ); painter.closePath(); } public static int paintTripletFeel16(TGPainter painter, int x, int y,float scale) { float topSpacing = (1.0f * scale); float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x,y + (topSpacing + verticalSpacing) , scale ); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) ); painter.lineTo(x + Math.round(ovalWidth) ,y + topSpacing); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + topSpacing); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) ); painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing - (0.55f * scale) ) ,y + Math.round(topSpacing + (0.5f * scale))); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + (0.5f * scale))); painter.closePath(); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing) , scale ); painter.closePath(); painter.initPath(); painter.moveTo( x,y + (1 * scale) ); painter.cubicTo( x,y + (1 * scale),x + ( ( (ovalWidth * 2f) + horizontalSpacing) / 2f),y + (-1*scale) ,x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1 * scale)); painter.closePath(); return Math.round( (ovalWidth * 2f) + horizontalSpacing ); } public static int paintTripletFeelNone16(TGPainter painter, int x, int y,float scale) { float horizontalSpacing = (1.5f * scale); float verticalSpacing = (2.5f * scale); float ovalWidth = (1.33f * scale); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x,y + verticalSpacing , scale ); painter.closePath(); painter.initPath(); painter.setAntialias(false); painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) ); painter.lineTo(x + Math.round(ovalWidth) ,y); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) ); painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(0.5f * scale)); painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(0.5f * scale)); painter.closePath(); painter.initPath(TGPainter.PATH_FILL); TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale ); painter.closePath(); return Math.round( ovalWidth + horizontalSpacing ); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/LanguageOption.java0000644000175000017500000001260011273045225032430 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; public class LanguageOption extends Option{ protected boolean initialized; protected Table table; protected TableColumn column; public LanguageOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){ super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.language"), SWT.FILL, SWT.FILL); this.initialized = false; } public void createOption(){ getToolItem().setText(TuxGuitar.getProperty("settings.config.language")); getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionLanguage()); getToolItem().addSelectionListener(this); showLabel(getComposite(),SWT.FILL,SWT.TOP, true, false,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.language.choose")); Composite composite = new Composite(getComposite(),SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL)); this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.table.setHeaderVisible(true); this.table.setLinesVisible(false); this.column = new TableColumn(this.table, SWT.LEFT); this.column.setText(TuxGuitar.getProperty("settings.config.language.choose")); this.column.pack(); this.loadConfig(); } protected void loadTableItem(String text, String data, boolean selected){ TableItem item = new TableItem(this.table, SWT.NONE); item.setText(text); item.setData(data); if( selected ){ this.table.setSelection(item); } } protected List getLanguageItems(String[] languages){ List list = new ArrayList(); if( languages != null ){ for(int i = 0;i < languages.length; i ++){ list.add( new LanguageItem(languages[i],TuxGuitar.getProperty("locale." + languages[i] ) ) ); } Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { if( o1 instanceof LanguageItem && o2 instanceof LanguageItem){ LanguageItem l1 = (LanguageItem)o1; LanguageItem l2 = (LanguageItem)o2; return l1.getValue().compareTo( l2.getValue() ); } return 0; } } ); } return list; } protected void loadConfig(){ new Thread(new Runnable() { public void run() { final String language = getConfig().getStringConfigValue(TGConfigKeys.LANGUAGE); final List languages = getLanguageItems( TuxGuitar.instance().getLanguageManager().getLanguages() ); new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ // Load default item loadTableItem(TuxGuitar.getProperty("locale.default"), new String(), true); for(int i = 0;i < languages.size(); i ++){ LanguageItem item = (LanguageItem)languages.get( i ); loadTableItem(item.getValue(),item.getKey(),(language != null && item.getKey().equals( language ))); } LanguageOption.this.initialized = true; LanguageOption.this.column.pack(); LanguageOption.this.pack(); } } }).start(); } }).start(); } public void updateConfig(){ if(this.initialized){ String language = null; if(this.table != null && !this.table.isDisposed()){ int index = this.table.getSelectionIndex(); if(index >= 0 && index < this.table.getItemCount() ){ language = (String)this.table.getItem(index).getData(); } } getConfig().setProperty(TGConfigKeys.LANGUAGE, language ); } } public void updateDefaults(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.LANGUAGE,getDefaults().getProperty(TGConfigKeys.LANGUAGE)); } } public void applyConfig(boolean force){ if(force || this.initialized){ boolean changed = force; if(!changed){ String languageLoaded = TuxGuitar.instance().getLanguageManager().getLanguage(); String languageConfigured = getConfig().getStringConfigValue(TGConfigKeys.LANGUAGE); if(languageLoaded == null && languageConfigured == null){ changed = false; } else if(languageLoaded != null && languageConfigured != null){ changed = ( !languageLoaded.equals( languageConfigured ) ); } else { changed = true; } } if(changed){ addSyncThread(new Runnable() { public void run() { TuxGuitar.instance().loadLanguage(); } }); } } } public Point computeSize(){ return this.computeSize(SWT.DEFAULT,SWT.NONE); } private class LanguageItem { private String key; private String value; public LanguageItem(String key, String value){ this.key = key; this.value = value; } public String getKey(){ return this.key; } public String getValue(){ return this.value; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/MainOption.java0000644000175000017500000001505111273045225031574 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.util.WindowTitleUtil; public class MainOption extends Option{ protected boolean initialized; protected Button showSplash; protected Button autoSizeTable; protected Text windowTitle; public MainOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){ super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.main")); this.initialized = false; } public void createOption(){ getToolItem().setText(TuxGuitar.getProperty("settings.config.main")); getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionMain()); getToolItem().addSelectionListener(this); showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.main.window-title")); Composite windowTitleComposite = new Composite(getComposite(),SWT.NONE); windowTitleComposite.setLayout(new GridLayout()); windowTitleComposite.setLayoutData(getTabbedData()); this.windowTitle = new Text(windowTitleComposite,SWT.BORDER); this.windowTitle.setLayoutData(new GridData(SWT.FILL, SWT.FILL , true, true)); this.windowTitle.setTextLimit(80); Composite infoHeader = new Composite(windowTitleComposite,SWT.NONE); infoHeader.setLayout(new GridLayout(2,false)); infoHeader.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); showImageLabel(infoHeader,SWT.NONE,infoHeader.getDisplay().getSystemImage(SWT.ICON_INFORMATION)); showLabel(infoHeader,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.help")); Composite infoBody = new Composite(windowTitleComposite,SWT.NONE); infoBody.setLayout(new GridLayout(2,false)); infoBody.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_APP_NAME)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_APP_NAME )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_APP_VERSION)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_APP_VERSION )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_FILE_NAME)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_FILE_NAME )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_FILE_PATH)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_FILE_PATH )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_NAME)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_NAME )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_ALBUM)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_ALBUM )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_ARTIST)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_ARTIST )); showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_AUTHOR)); showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_AUTHOR )); showLabel(getComposite(),SWT.BOTTOM | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.main.options")); Composite options = new Composite(getComposite(),SWT.NONE); options.setLayout(new GridLayout()); options.setLayoutData(getTabbedData()); this.autoSizeTable = new Button(options,SWT.CHECK); this.autoSizeTable.setText(TuxGuitar.getProperty("settings.config.main.table.auto-size.enabled")); this.showSplash = new Button(options,SWT.CHECK); this.showSplash.setText(TuxGuitar.getProperty("settings.config.main.splash-enabled")); this.loadConfig(); } protected void loadConfig(){ new Thread(new Runnable() { public void run() { final String windowTitle = getConfig().getStringConfigValue(TGConfigKeys.WINDOW_TITLE); final boolean showSplash = getConfig().getBooleanConfigValue(TGConfigKeys.SHOW_SPLASH); final boolean autoSizeTable = getConfig().getBooleanConfigValue(TGConfigKeys.TABLE_AUTO_SIZE); new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ MainOption.this.windowTitle.setText(windowTitle); MainOption.this.showSplash.setSelection(showSplash); MainOption.this.autoSizeTable.setSelection(autoSizeTable); MainOption.this.initialized = true; MainOption.this.pack(); } } }).start(); } }).start(); } public void updateConfig(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.WINDOW_TITLE,this.windowTitle.getText()); getConfig().setProperty(TGConfigKeys.SHOW_SPLASH,this.showSplash.getSelection()); getConfig().setProperty(TGConfigKeys.TABLE_AUTO_SIZE,this.autoSizeTable.getSelection()); } } public void updateDefaults(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.WINDOW_TITLE,getDefaults().getProperty(TGConfigKeys.WINDOW_TITLE)); getConfig().setProperty(TGConfigKeys.SHOW_SPLASH,getDefaults().getProperty(TGConfigKeys.SHOW_SPLASH)); getConfig().setProperty(TGConfigKeys.TABLE_AUTO_SIZE,getDefaults().getProperty(TGConfigKeys.TABLE_AUTO_SIZE)); } } public void applyConfig(boolean force){ if(force || this.initialized){ TuxGuitar.instance().showTitle(); TuxGuitar.instance().getTable().loadConfig(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/Option.java0000644000175000017500000001645711273045225031002 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import java.util.Properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; import org.herac.tuxguitar.gui.system.config.TGConfigManager; public abstract class Option extends SelectionAdapter{ protected static final int DEFAULT_INDENT = 20; private TGConfigEditor configEditor ; private ToolBar toolBar; private Group group; private Composite composite; private ToolItem toolItem; public Option(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent,String text, int horizontalAlignment,int verticalAlignment){ this.configEditor = configEditor; this.toolBar = toolBar; this.toolItem = new ToolItem(toolBar, SWT.RADIO); this.group = new Group(parent, SWT.SHADOW_ETCHED_IN); this.group.setLayout(new GridLayout()); this.group.setLayoutData(getGroupData()); this.group.setText(text); this.composite = new Composite(this.group, SWT.SHADOW_ETCHED_IN); this.composite.setLayout(new GridLayout()); this.composite.setLayoutData(new GridData(horizontalAlignment,verticalAlignment,true ,true)); } public Option(TGConfigEditor configEditor,ToolBar toolBar, Composite parent,String text){ this(configEditor, toolBar, parent, text, SWT.FILL,SWT.TOP); } public abstract void createOption(); public abstract void updateConfig(); public abstract void updateDefaults(); public abstract void applyConfig(boolean force); public void setVisible(boolean visible){ this.toolItem.setSelection(visible); this.group.setVisible(visible); this.group.setFocus(); this.group.redraw(); } public void dispose(){ //Override me } protected Label showLabel(Composite parent,int labelStyle,int fontStyle,int fontScale,String text){ return showLabel(parent,SWT.FILL,SWT.CENTER, labelStyle, fontStyle, fontScale, text); } protected Label showLabel(Composite parent,int hAlign,int vAlign,int labelStyle,int fontStyle,int fontScale,String text){ return showLabel(parent, hAlign, vAlign, true, true, labelStyle, fontStyle, fontScale, text); } protected Label showLabel(Composite parent,int hAlign,int vAlign,boolean grabExcessHSpace,boolean grabExcessVSpace,int labelStyle,int fontStyle,int fontScale,String text){ Label label = new Label(parent,labelStyle); label.setText(text); label.setLayoutData(new GridData(hAlign,vAlign,grabExcessHSpace,grabExcessVSpace)); FontData[] fontDatas = label.getFont().getFontData(); if(fontDatas.length > 0){ final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),(fontDatas[0].getHeight() + fontScale),fontStyle); label.setFont(font); label.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent arg0) { font.dispose(); } }); } return label; } protected Label showImageLabel(Composite parent,int labelStyle,Image image){ Label label = new Label(parent,labelStyle); label.setImage(image); return label; } protected FormData getGroupData(){ FormData data = new FormData(); data.top = new FormAttachment(0,0); data.bottom = new FormAttachment(100,0); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); return data; } public void widgetSelected(SelectionEvent e) { this.configEditor.select(this); } public Composite getComposite(){ return this.composite; } public ToolItem getToolItem(){ return this.toolItem; } public Point computeSize(){ return this.computeSize(SWT.DEFAULT,SWT.DEFAULT); } protected Point computeSize(int wHint,int hHint){ return this.group.computeSize(wHint, hHint); } public TGConfigManager getConfig(){ return this.configEditor.getConfig(); } public Properties getDefaults(){ return this.configEditor.getDefaults(); } public TablatureEditor getEditor(){ return this.configEditor.getEditor(); } public Display getDisplay(){ return this.toolBar.getDisplay(); } public Shell getShell(){ return this.toolBar.getShell(); } protected boolean isDisposed(){ return (this.toolBar.isDisposed() || this.toolBar.getShell().isDisposed()); } public GridData makeGridData(int with,int height,int minWith,int minHeight){ return this.configEditor.makeGridData(with, height, minWith, minHeight); } protected GridData getTabbedData(){ return getTabbedData(DEFAULT_INDENT,SWT.FILL,SWT.CENTER); } protected GridData getTabbedData(int horizontalAlignment,int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace){ return getTabbedData(DEFAULT_INDENT,horizontalAlignment,verticalAlignment,grabExcessHorizontalSpace,grabExcessVerticalSpace); } protected GridData getTabbedData(int horizontalAlignment,int verticalAlignment){ return getTabbedData(DEFAULT_INDENT,horizontalAlignment,verticalAlignment); } protected GridData getTabbedData(int indent,int horizontalAlignment,int verticalAlignment){ return getTabbedData(indent, horizontalAlignment, verticalAlignment, true, true); } protected GridData getTabbedData(int indent,int horizontalAlignment,int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace){ GridData data = new GridData(); data.horizontalAlignment = horizontalAlignment; data.grabExcessHorizontalSpace = grabExcessHorizontalSpace; data.verticalAlignment = verticalAlignment; data.grabExcessVerticalSpace = grabExcessVerticalSpace; data.horizontalIndent = indent; return data; } public GridData makeGridData(int widthHint, int heightHint, int minimumWidth, int minimumHeight, int horizontalAlignment, int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace, int horizontalSpan, int verticalSpan){ GridData data = new GridData(); data.widthHint = widthHint; data.heightHint = heightHint; data.minimumWidth = minimumWidth; data.minimumHeight = minimumHeight; data.horizontalAlignment = horizontalAlignment; data.verticalAlignment = verticalAlignment; data.grabExcessHorizontalSpace = grabExcessHorizontalSpace; data.grabExcessVerticalSpace = grabExcessVerticalSpace; data.horizontalSpan = horizontalSpan; data.verticalSpan = verticalSpan; return data; } public void pack(){ this.configEditor.pack(); } public void loadCursor(int style){ TuxGuitar.instance().loadCursor(this.configEditor.getDialog(),style); } protected void addSyncThread(Runnable runnable){ this.configEditor.addSyncThread(runnable); } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SkinOption.java0000644000175000017500000002155511273045225031622 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.util.TGFileUtils; public class SkinOption extends Option{ protected boolean initialized; protected List skins; protected Combo combo; protected Label nameLabel; protected Label authorLabel; protected Label versionLabel; protected Label descriptionLabel; protected Image preview; protected Composite previewArea; public SkinOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){ super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.skin"), SWT.FILL,SWT.FILL); this.initialized = false; } public void createOption() { getToolItem().setText(TuxGuitar.getProperty("settings.config.skin")); getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionSkin()); getToolItem().addSelectionListener(this); showLabel(getComposite(),SWT.FILL,SWT.TOP,true, false, SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.skin.choose")); Composite composite = new Composite(getComposite(),SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL, true, false)); this.combo = new Combo(composite,SWT.DROP_DOWN | SWT.READ_ONLY); this.combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); Composite skinInfoComposite = new Composite(getComposite(),SWT.NONE); skinInfoComposite.setLayout(new GridLayout(2,false)); skinInfoComposite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL, true, false)); showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("name") + ": "); this.nameLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,""); showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("author")+": "); this.authorLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,""); showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("version")+": "); this.versionLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,""); showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("description")+": "); this.descriptionLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,""); Composite skinPreviewComposite = new Composite(getComposite(),SWT.NONE); skinPreviewComposite.setLayout(new GridLayout()); skinPreviewComposite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL ,true, true)); this.previewArea = new Composite(skinPreviewComposite,SWT.DOUBLE_BUFFERED); this.previewArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.previewArea.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { if(SkinOption.this.preview != null && !SkinOption.this.preview.isDisposed()){ e.gc.drawImage(SkinOption.this.preview, 0, 0); } } }); this.loadConfig(); } protected void loadConfig(){ new Thread(new Runnable() { public void run() { SkinOption.this.skins = new ArrayList(); String[] skinNames = TGFileUtils.getFileNames("skins"); if( skinNames != null ){ for(int i = 0;i < skinNames.length;i++){ Properties properties = new Properties(); try { InputStream skinInfo = TGFileUtils.getResourceAsStream("skins/" + skinNames[i] + "/skin.properties"); if( skinInfo != null ){ properties.load( skinInfo ); } }catch (Throwable throwable) { throwable.printStackTrace(); } SkinInfo info = new SkinInfo(skinNames[i]); info.setName(properties.getProperty("name",info.getSkin())); info.setAuthor(properties.getProperty("author","Not available.")); info.setVersion(properties.getProperty("version","Not available.")); info.setDescription(properties.getProperty("description","Not available.")); info.setDate(properties.getProperty("date",null)); info.setPreview(properties.getProperty("preview",null)); SkinOption.this.skins.add(info); } } new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ for(int i = 0;i < SkinOption.this.skins.size();i++){ SkinInfo info = (SkinInfo)SkinOption.this.skins.get(i); SkinOption.this.combo.add(info.getName()); if(info.getSkin().equals(getConfig().getStringConfigValue(TGConfigKeys.SKIN))){ SkinOption.this.combo.select(i); } } SkinOption.this.combo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int selection = SkinOption.this.combo.getSelectionIndex(); if(selection >= 0 && selection < SkinOption.this.skins.size()){ showSkinInfo((SkinInfo)SkinOption.this.skins.get(selection)); } } }); int selection = SkinOption.this.combo.getSelectionIndex(); if(selection >= 0 && selection < SkinOption.this.skins.size()){ showSkinInfo((SkinInfo)SkinOption.this.skins.get(selection)); } SkinOption.this.initialized = true; SkinOption.this.pack(); } } }).start(); } }).start(); } protected void showSkinInfo(final SkinInfo info){ loadCursor(SWT.CURSOR_WAIT); new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ disposePreview(); SkinOption.this.nameLabel.setText(info.getName()); SkinOption.this.authorLabel.setText(info.getAuthor()); SkinOption.this.descriptionLabel.setText(info.getDescription()); SkinOption.this.versionLabel.setText((info.getDate() == null)?info.getVersion():info.getVersion() + " (" + info.getDate() + ")"); if(info.getPreview() != null){ SkinOption.this.preview = TGFileUtils.loadImage(info.getSkin(),info.getPreview()); } SkinOption.this.previewArea.redraw(); loadCursor(SWT.CURSOR_ARROW); } } }).start(); } public void updateConfig() { if(this.initialized){ int selection = this.combo.getSelectionIndex(); if(selection >= 0 && selection < this.skins.size()){ SkinInfo info = (SkinInfo)this.skins.get(selection); getConfig().setProperty(TGConfigKeys.SKIN,info.getSkin()); } } } public void updateDefaults(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.SKIN,getDefaults().getProperty(TGConfigKeys.SKIN)); } } public void applyConfig(boolean force){ if(force || (this.initialized && TuxGuitar.instance().getIconManager().shouldReload())){ addSyncThread(new Runnable() { public void run() { TuxGuitar.instance().loadSkin(); } }); } } public void dispose(){ this.disposePreview(); } public void disposePreview(){ if(this.preview != null && !this.preview.isDisposed()){ this.preview.dispose(); } } private class SkinInfo{ private String skin; private String name; private String date; private String author; private String version; private String description; private String preview; public SkinInfo(String skin){ this.skin = skin; } public String getAuthor() { return this.author; } public void setAuthor(String author) { this.author = author; } public String getDate() { return this.date; } public void setDate(String date) { this.date = date; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getVersion() { return this.version; } public void setVersion(String version) { this.version = version; } public String getSkin() { return this.skin; } public String getPreview() { return this.preview; } public void setPreview(String preview) { this.preview = preview; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SoundOption.java0000644000175000017500000001404111273045225031776 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiSequencer; public class SoundOption extends Option{ protected boolean initialized; //**MidiSequencer module**// protected String msCurrentKey; protected List msList; protected Combo msCombo; //**MidiPort module**// protected String mpCurrentKey; protected List mpList; protected Combo mpCombo; public SoundOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){ super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.sound")); this.initialized = false; } public void createOption(){ getToolItem().setText(TuxGuitar.getProperty("settings.config.sound")); getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionSound()); getToolItem().addSelectionListener(this); //---Midi Sequencer---// showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("midi.sequencer")); Composite msComposite = new Composite(getComposite(),SWT.NONE); msComposite.setLayout(new GridLayout()); msComposite.setLayoutData(getTabbedData()); this.msCombo = new Combo(msComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.msCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); //---Midi Port---// showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("midi.port")); Composite mpComposite = new Composite(getComposite(),SWT.NONE); mpComposite.setLayout(new GridLayout()); mpComposite.setLayoutData(getTabbedData()); this.mpCombo = new Combo(mpComposite, SWT.DROP_DOWN | SWT.READ_ONLY); this.mpCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.loadConfig(); } protected void loadConfig(){ new Thread(new Runnable() { public void run() { SoundOption.this.mpList = TuxGuitar.instance().getPlayer().listOutputPorts(); SoundOption.this.msList = TuxGuitar.instance().getPlayer().listSequencers(); SoundOption.this.mpCurrentKey = getConfig().getStringConfigValue(TGConfigKeys.MIDI_PORT); SoundOption.this.msCurrentKey = getConfig().getStringConfigValue(TGConfigKeys.MIDI_SEQUENCER); MidiSequencer sequencer = TuxGuitar.instance().getPlayer().getSequencer(); MidiOutputPort outputPort = TuxGuitar.instance().getPlayer().getOutputPort(); final String msLoaded = (sequencer != null ? sequencer.getKey() : null ) ; final String mpLoaded = (outputPort != null ? outputPort.getKey() : null ); new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ //---Midi Sequencer---// String loadedSequencer = msLoaded; for (int i = 0; i < SoundOption.this.msList.size(); i++) { MidiSequencer sequencer = (MidiSequencer)SoundOption.this.msList.get(i); SoundOption.this.msCombo.add(sequencer.getName()); if(SoundOption.this.msCurrentKey != null && SoundOption.this.msCurrentKey.equals(sequencer.getKey())){ SoundOption.this.msCombo.select(i); loadedSequencer = null; }else if(loadedSequencer != null && loadedSequencer.equals(sequencer.getKey())){ SoundOption.this.msCombo.select(i); } } if(SoundOption.this.msCombo.getSelectionIndex() < 0 && SoundOption.this.msCombo.getItemCount() > 0){ SoundOption.this.msCombo.select(0); } //---Midi Port---// String loadedPort = mpLoaded; for (int i = 0; i < SoundOption.this.mpList.size(); i++) { MidiOutputPort port = (MidiOutputPort)SoundOption.this.mpList.get(i); SoundOption.this.mpCombo.add(port.getName()); if(SoundOption.this.mpCurrentKey != null && SoundOption.this.mpCurrentKey.equals(port.getKey())){ SoundOption.this.mpCombo.select(i); loadedPort = null; }else if(loadedPort != null && loadedPort.equals(port.getKey())){ SoundOption.this.mpCombo.select(i); } } if(SoundOption.this.mpCombo.getSelectionIndex() < 0 && SoundOption.this.mpCombo.getItemCount() > 0){ SoundOption.this.mpCombo.select(0); } SoundOption.this.initialized = true; SoundOption.this.pack(); } } }).start(); } }).start(); } public void updateConfig(){ if(this.initialized){ int msIndex = this.msCombo.getSelectionIndex(); if(msIndex >= 0 && msIndex < this.msList.size()){ getConfig().setProperty(TGConfigKeys.MIDI_SEQUENCER, ((MidiSequencer)this.msList.get(msIndex)).getKey()); } int mpIndex = this.mpCombo.getSelectionIndex(); if(mpIndex >= 0 && mpIndex < this.mpList.size()){ MidiOutputPort midiPort = (MidiOutputPort)this.mpList.get(mpIndex); getConfig().setProperty(TGConfigKeys.MIDI_PORT, midiPort.getKey()); } } } public void updateDefaults(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.MIDI_PORT,getDefaults().getProperty(TGConfigKeys.MIDI_PORT)); getConfig().setProperty(TGConfigKeys.MIDI_SEQUENCER,getDefaults().getProperty(TGConfigKeys.MIDI_SEQUENCER)); } } public void applyConfig(final boolean force){ if(force || this.initialized){ String midiSequencer = getConfig().getStringConfigValue(TGConfigKeys.MIDI_SEQUENCER); if(force || !TuxGuitar.instance().getPlayer().isSequencerOpen(midiSequencer)){ TuxGuitar.instance().getPlayer().openSequencer(midiSequencer); } String midiPort = getConfig().getStringConfigValue(TGConfigKeys.MIDI_PORT); if(force || !TuxGuitar.instance().getPlayer().isOutputPortOpen(midiPort)){ TuxGuitar.instance().getPlayer().openOutputPort(midiPort); } } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/StylesOption.java0000644000175000017500000004225611273045225032202 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FontDialog; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; public class StylesOption extends Option{ private static final int BUTTON_WIDTH = 200; private static final int BUTTON_HEIGHT = 0; protected boolean initialized; protected FontData defaultFontData; protected FontData noteFontData; protected FontData timeSignatureFontData; protected FontData textFontData; protected FontData lyricFontData; protected FontData printerDefaultFontData; protected FontData printerNoteFontData; protected FontData printerTSFontData; protected FontData printerTextFontData; protected FontData printerLyricFontData; protected Button defaultFontButton; protected Button noteFontButton; protected Button timeSignatureFontButton; protected Button textFontButton; protected Button lyricFontButton; protected Button printerDefaultFontButton; protected Button printerNoteFontButton; protected Button printerTSFontButton; protected Button printerTextFontButton; protected Button printerLyricFontButton; protected ButtonColor scoreNoteColorButton; protected ButtonColor tabNoteColorButton; protected ButtonColor playNoteColorButton; protected ButtonColor linesColorButton; public StylesOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){ super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.styles")); this.initialized = false; this.defaultFontData = new FontData(); this.noteFontData = new FontData(); this.timeSignatureFontData = new FontData(); this.textFontData = new FontData(); this.lyricFontData = new FontData(); this.printerDefaultFontData = new FontData(); this.printerNoteFontData = new FontData(); this.printerTSFontData = new FontData(); this.printerTextFontData = new FontData(); this.printerLyricFontData = new FontData(); } public void createOption(){ getToolItem().setText(TuxGuitar.getProperty("settings.config.styles")); getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionStyle()); getToolItem().addSelectionListener(this); //=================================================== EDITOR STYLES ===================================================// showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.styles.general")); Composite composite = new Composite(getComposite(),SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(getTabbedData()); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.default")); this.defaultFontButton = new Button(composite, SWT.PUSH); this.defaultFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.defaultFontButton,this.defaultFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.note")); this.noteFontButton = new Button(composite, SWT.PUSH); this.noteFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.noteFontButton,this.noteFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.lyric")); this.lyricFontButton = new Button(composite, SWT.PUSH); this.lyricFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.lyricFontButton,this.lyricFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.text")); this.textFontButton = new Button(composite, SWT.PUSH); this.textFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.textFontButton,this.textFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.time-signature")); this.timeSignatureFontButton = new Button(composite, SWT.PUSH); this.timeSignatureFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.timeSignatureFontButton,this.timeSignatureFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.score-note")); this.scoreNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose")); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.tab-note")); this.tabNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose")); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.play-note")); this.playNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose")); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.lines")); this.linesColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose")); //=================================================== PRINTER STYLES ===================================================// showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.styles.printer")); composite = new Composite(getComposite(),SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(getTabbedData()); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.default")); this.printerDefaultFontButton = new Button(composite, SWT.PUSH); this.printerDefaultFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.printerDefaultFontButton,this.printerDefaultFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.note")); this.printerNoteFontButton = new Button(composite, SWT.PUSH); this.printerNoteFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.printerNoteFontButton,this.printerNoteFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.lyric")); this.printerLyricFontButton = new Button(composite, SWT.PUSH); this.printerLyricFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.printerLyricFontButton,this.printerLyricFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.text")); this.printerTextFontButton = new Button(composite, SWT.PUSH); this.printerTextFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.printerTextFontButton,this.printerTextFontData); showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.time-signature")); this.printerTSFontButton = new Button(composite, SWT.PUSH); this.printerTSFontButton.setLayoutData(makeButtonData()); this.addFontButtonListeners(this.printerTSFontButton,this.printerTSFontData); this.loadConfig(); } private void addFontButtonListeners(final Button button, final FontData fontData){ button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { if(StylesOption.this.initialized){ Font font = new Font(getDisplay(),fontData); FontData[] fontDataList = font.getFontData(); font.dispose(); FontDialog fontDialog = new FontDialog(getShell()); fontDialog.setFontList(fontDataList); FontData result = fontDialog.open(); if(result != null){ loadFontData(result, fontData,button); } } } }); } protected void loadFontData(FontData src, FontData dst, Button button){ copyFontData(src, dst); setButtonFontData(button, dst); } protected void loadColor(ButtonColor button, RGB rgb){ button.loadColor(rgb); } protected void setButtonFontData(Button button,FontData fontData) { String text = fontData.getName(); if( (fontData.getStyle() & SWT.BOLD) != 0 ){ text += " Bold"; } if( (fontData.getStyle() & SWT.ITALIC) != 0 ){ text += " Italic"; } text += (" " + fontData.getHeight()); button.setText(text); } protected void copyFontData(FontData src, FontData dst){ dst.setName( src.getName() ); dst.setStyle( src.getStyle() ); dst.setHeight( src.getHeight() ); } protected void copyRGB(RGB src, RGB dst){ dst.red = src.red; dst.green = src.green; dst.blue = src.blue; } protected void loadConfig(){ new Thread(new Runnable() { public void run() { final FontData defaultFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_DEFAULT); final FontData noteFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_NOTE); final FontData timeSignatureFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_TIME_SIGNATURE); final FontData textFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_TEXT); final FontData lyricFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_LYRIC); final FontData printerDefaultFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_DEFAULT); final FontData printerNoteFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_NOTE); final FontData printerTSFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE); final FontData printerTextFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_TEXT); final FontData printerLyricFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_LYRIC); final RGB scoreNoteRGB = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_SCORE_NOTE); final RGB tabNoteRGB = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_TAB_NOTE); final RGB playNoteRGB = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_PLAY_NOTE); final RGB linesRGB = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_LINE); new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ loadFontData(defaultFontData,StylesOption.this.defaultFontData,StylesOption.this.defaultFontButton); loadFontData(noteFontData,StylesOption.this.noteFontData,StylesOption.this.noteFontButton); loadFontData(timeSignatureFontData,StylesOption.this.timeSignatureFontData,StylesOption.this.timeSignatureFontButton); loadFontData(textFontData,StylesOption.this.textFontData,StylesOption.this.textFontButton); loadFontData(lyricFontData,StylesOption.this.lyricFontData,StylesOption.this.lyricFontButton); loadFontData(printerDefaultFontData,StylesOption.this.printerDefaultFontData,StylesOption.this.printerDefaultFontButton); loadFontData(printerNoteFontData,StylesOption.this.printerNoteFontData,StylesOption.this.printerNoteFontButton); loadFontData(printerTSFontData,StylesOption.this.printerTSFontData,StylesOption.this.printerTSFontButton); loadFontData(printerTextFontData,StylesOption.this.printerTextFontData,StylesOption.this.printerTextFontButton); loadFontData(printerLyricFontData,StylesOption.this.printerLyricFontData,StylesOption.this.printerLyricFontButton); StylesOption.this.scoreNoteColorButton.loadColor(scoreNoteRGB); StylesOption.this.tabNoteColorButton.loadColor(tabNoteRGB); StylesOption.this.playNoteColorButton.loadColor(playNoteRGB); StylesOption.this.linesColorButton.loadColor(linesRGB); StylesOption.this.initialized = true; StylesOption.this.pack(); } } }).start(); } }).start(); } public GridData makeButtonData(){ GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true); data.minimumWidth = BUTTON_WIDTH; data.minimumHeight = BUTTON_HEIGHT; return data; } public void updateConfig(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.FONT_DEFAULT,this.defaultFontData); getConfig().setProperty(TGConfigKeys.FONT_NOTE,this.noteFontData); getConfig().setProperty(TGConfigKeys.FONT_TIME_SIGNATURE,this.timeSignatureFontData); getConfig().setProperty(TGConfigKeys.FONT_TEXT,this.textFontData); getConfig().setProperty(TGConfigKeys.FONT_LYRIC,this.lyricFontData); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_DEFAULT,this.printerDefaultFontData); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_NOTE,this.printerNoteFontData); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE,this.printerTSFontData); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TEXT,this.printerTextFontData); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_LYRIC,this.printerLyricFontData); getConfig().setProperty(TGConfigKeys.COLOR_SCORE_NOTE,this.scoreNoteColorButton.getValue()); getConfig().setProperty(TGConfigKeys.COLOR_TAB_NOTE,this.tabNoteColorButton.getValue()); getConfig().setProperty(TGConfigKeys.COLOR_PLAY_NOTE,this.playNoteColorButton.getValue()); getConfig().setProperty(TGConfigKeys.COLOR_LINE,this.linesColorButton.getValue()); } } public void updateDefaults(){ if(this.initialized){ getConfig().setProperty(TGConfigKeys.FONT_DEFAULT,getDefaults().getProperty(TGConfigKeys.FONT_DEFAULT)); getConfig().setProperty(TGConfigKeys.FONT_NOTE,getDefaults().getProperty(TGConfigKeys.FONT_NOTE)); getConfig().setProperty(TGConfigKeys.FONT_TIME_SIGNATURE,getDefaults().getProperty(TGConfigKeys.FONT_TIME_SIGNATURE)); getConfig().setProperty(TGConfigKeys.FONT_TEXT,getDefaults().getProperty(TGConfigKeys.FONT_TEXT)); getConfig().setProperty(TGConfigKeys.FONT_LYRIC,getDefaults().getProperty(TGConfigKeys.FONT_LYRIC)); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_DEFAULT,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_DEFAULT)); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_NOTE,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_NOTE)); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE)); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TEXT,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_TEXT)); getConfig().setProperty(TGConfigKeys.FONT_PRINTER_LYRIC,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_LYRIC)); getConfig().setProperty(TGConfigKeys.COLOR_SCORE_NOTE,getDefaults().getProperty(TGConfigKeys.COLOR_SCORE_NOTE)); getConfig().setProperty(TGConfigKeys.COLOR_TAB_NOTE,getDefaults().getProperty(TGConfigKeys.COLOR_TAB_NOTE)); getConfig().setProperty(TGConfigKeys.COLOR_PLAY_NOTE,getDefaults().getProperty(TGConfigKeys.COLOR_PLAY_NOTE)); getConfig().setProperty(TGConfigKeys.COLOR_LINE,getDefaults().getProperty(TGConfigKeys.COLOR_LINE)); } } public void applyConfig(boolean force){ if(force || this.initialized){ addSyncThread(new Runnable() { public void run() { TuxGuitar.instance().loadStyles(); } }); } } private class ButtonColor { protected Button button; protected Color color; protected RGB value; public ButtonColor(Composite parent, int style, Object layoutData, String text){ this.value = new RGB(0,0,0); this.button = new Button(parent, style); this.button.setLayoutData(layoutData); this.button.setText(text); this.addListeners(); } protected void loadColor(RGB rgb){ this.value.red = rgb.red; this.value.green = rgb.green; this.value.blue = rgb.blue; Color color = new Color(this.button.getDisplay(), this.value); this.button.setForeground(color); this.disposeColor(); this.color = color; } protected void disposeColor(){ if(this.color != null && !this.color.isDisposed()){ this.color.dispose(); this.color = null; } } private void addListeners(){ this.button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if(StylesOption.this.initialized){ ColorDialog dlg = new ColorDialog(getShell()); dlg.setRGB(ButtonColor.this.value); dlg.setText(TuxGuitar.getProperty("choose-color")); RGB result = dlg.open(); if (result != null) { ButtonColor.this.loadColor(result); } } } }); this.button.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { ButtonColor.this.disposeColor(); } }); } protected RGB getValue(){ return this.value; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/ToolBarsOption.java0000644000175000017500000001324311273045225032436 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.config.items; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.ToolBar; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.gui.system.config.TGConfigEditor; public class ToolBarsOption extends Option{ protected boolean initialized; protected Table table; protected TableColumn column; protected Button moveUp; protected Button moveDown; public ToolBarsOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){ super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.toolbars"), SWT.FILL,SWT.FILL); this.initialized = false; } public void createOption() { getToolItem().setText(TuxGuitar.getProperty("settings.config.toolbars")); getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionToolbars()); getToolItem().addSelectionListener(this); showLabel(getComposite(),SWT.FILL, SWT.TOP, true, false, SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.toolbars.tip")); Composite composite = new Composite(getComposite(),SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL)); this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL); this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.table.setHeaderVisible(true); this.table.setLinesVisible(false); this.column = new TableColumn(this.table, SWT.LEFT); this.column.setText(TuxGuitar.getProperty("settings.config.toolbars.list")); this.column.pack(); Composite buttons = new Composite(getComposite(), SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false)); this.moveUp = new Button(buttons,SWT.PUSH); this.moveUp.setLayoutData(getButtonData()); this.moveUp.setText(TuxGuitar.getProperty("settings.config.toolbars.move-up")); this.moveUp.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { moveUp(); } }); this.moveDown = new Button(buttons,SWT.PUSH); this.moveDown.setLayoutData(getButtonData()); this.moveDown.setText(TuxGuitar.getProperty("settings.config.toolbars.move-down")); this.moveDown.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { moveDown(); } }); this.loadConfig(); } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void moveUp(){ if(this.initialized){ int count = this.table.getItemCount(); int index = this.table.getSelectionIndex(); if(index > 0 && index < count){ TableItem item1 = this.table.getItem(index); TableItem item2 = this.table.getItem(index - 1); this.swapItems(item1,item2); this.table.setSelection(index - 1); } } } protected void moveDown(){ if(this.initialized){ int count = this.table.getItemCount(); int index = this.table.getSelectionIndex(); if(index >= 0 && index < ( count - 1 ) ){ TableItem item1 = this.table.getItem(index); TableItem item2 = this.table.getItem(index + 1); this.swapItems(item1,item2); this.table.setSelection(index + 1); } } } protected void swapItems(TableItem item1, TableItem item2){ ToolItems data1 = (ToolItems)item1.getData(); ToolItems data2 = (ToolItems)item2.getData(); loadItem(item1, data2); loadItem(item2, data1); } protected void loadItem(TableItem item, ToolItems data){ item.setText( TuxGuitar.getProperty( data.getName() )); item.setChecked( data.isEnabled() ); item.setData( data ); } protected void loadConfig(){ new Thread(new Runnable() { public void run() { final ToolItems[] items = TuxGuitar.instance().getItemManager().getToolBars(); new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ for(int i = 0;i < items.length; i ++){ loadItem(new TableItem(ToolBarsOption.this.table, SWT.NONE), items[i]); } ToolBarsOption.this.initialized = true; ToolBarsOption.this.column.pack(); ToolBarsOption.this.pack(); } } }).start(); } }).start(); } public void updateConfig() { if(this.initialized){ for( int i = 0 ; i < this.table.getItemCount() ; i ++){ TableItem item = this.table.getItem( i ); ToolItems data = (ToolItems)item.getData(); TuxGuitar.instance().getItemManager().setToolBarStatus(data.getName(), item.getChecked() , i); } TuxGuitar.instance().getItemManager().writeToolBars(); } } public void updateDefaults() { if(this.initialized){ TuxGuitar.instance().getItemManager().setDefaultToolBars(); TuxGuitar.instance().getItemManager().writeToolBars(); } } public void applyConfig(boolean force){ if(force || (this.initialized && TuxGuitar.instance().getItemManager().shouldReloadToolBars())){ addSyncThread(new Runnable() { public void run() { TuxGuitar.instance().loadToolBars(); } }); } } public Point computeSize(){ return this.computeSize(SWT.DEFAULT,SWT.NONE); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingEditor.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingEditor.j0000644000175000017500000001743411273045225033436 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings.editor; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.keybindings.KeyBinding; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingActionDefaults; import org.herac.tuxguitar.gui.util.DialogUtils; public class KeyBindingEditor { private static final int ACTION_WIDTH = 400; private static final int SHORTCUT_WIDTH = 100; protected Shell dialog; protected Table table; protected List items; public KeyBindingEditor(){ this.items = new ArrayList(); } public void show(Shell parent){ this.dialog = DialogUtils.newDialog(parent,SWT.DIALOG_TRIM |SWT.APPLICATION_MODAL); this.dialog.setText(TuxGuitar.getProperty("key-bindings-editor")); this.dialog.setLayout(new GridLayout()); Composite composite = new Composite(this.dialog,SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL,SWT.NONE,true,true)); this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); this.table.setLayoutData(new GridData((ACTION_WIDTH + SHORTCUT_WIDTH) ,250)); this.table.setHeaderVisible(true); this.table.addMouseListener(new MouseAdapter() { public void mouseDoubleClick(MouseEvent e) { TableItem item = getSelectedItem(); if(item != null){ KeyBindingAction itemData = (KeyBindingAction)item.getData(); KeyBindingSelector selector = new KeyBindingSelector(KeyBindingEditor.this,itemData); KeyBinding kb = selector.select(KeyBindingEditor.this.dialog.getShell()); removeKeyBindingAction(kb); itemData.setKeyBinding(kb); loadTableItemLabel(item); } } }); TableColumn actionColumn = new TableColumn(this.table, SWT.LEFT); actionColumn.setText(TuxGuitar.getProperty("key-bindings-editor-action-column")); TableColumn shortcutColumn = new TableColumn(this.table, SWT.LEFT); shortcutColumn.setText(TuxGuitar.getProperty("key-bindings-editor-shortcut-column")); loadAvailableActionKeyBindings(); loadEnableActionKeyBindings(TuxGuitar.instance().getkeyBindingManager().getKeyBindingActions()); //------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); Button defaults = new Button(buttons,SWT.PUSH); defaults.setText(TuxGuitar.getProperty("defaults")); defaults.setLayoutData(getButtonData()); defaults.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { loadEnableActionKeyBindings(KeyBindingActionDefaults.getDefaultKeyBindings()); } }); Button close = new Button(buttons,SWT.PUSH); close.setText(TuxGuitar.getProperty("close")); close.setLayoutData(getButtonData()); close.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { KeyBindingEditor.this.dialog.dispose(); } }); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { save(); } }); this.table.setLayoutData(new GridData( (adjustWidth(actionColumn,ACTION_WIDTH) + adjustWidth(shortcutColumn,SHORTCUT_WIDTH)) ,250) ); this.dialog.setDefaultButton( close ); DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } protected int adjustWidth(TableColumn column, int defaultWidth){ column.pack(); int width = column.getWidth(); if( width < defaultWidth ){ width = defaultWidth; column.setWidth( width ); } return width; } protected GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected void loadTableItemLabel(TableItem item){ if(item.getData() instanceof KeyBindingAction){ KeyBindingAction actionkeyBinding = (KeyBindingAction)item.getData(); String action = actionkeyBinding.getAction(); String shortcut = (actionkeyBinding.getKeyBinding() != null)?actionkeyBinding.getKeyBinding().toString():""; item.setText(new String[] { TuxGuitar.getProperty(action),shortcut}); } } protected void loadAvailableActionKeyBindings(){ List list = TuxGuitar.instance().getActionManager().getAvailableKeyBindingActions(); Collections.sort(list); Iterator it = list.iterator(); while (it.hasNext()) { String action = (String) it.next(); TableItem item = new TableItem(this.table, SWT.NONE); item.setData(new KeyBindingAction(action,null)); this.items.add(item); } } protected void loadEnableActionKeyBindings(List list){ Iterator items = this.items.iterator(); while (items.hasNext()) { TableItem item = (TableItem) items.next(); if(item.getData() instanceof KeyBindingAction){ KeyBindingAction itemData = (KeyBindingAction)item.getData(); KeyBinding keyBinding = null; Iterator it = list.iterator(); while (it.hasNext()) { KeyBindingAction keyBindingAction = (KeyBindingAction) it.next(); if(keyBindingAction.getAction().equals(itemData.getAction())){ keyBinding = (KeyBinding) keyBindingAction.getKeyBinding().clone(); break; } } itemData.setKeyBinding(keyBinding); loadTableItemLabel(item); } } } protected void removeKeyBindingAction(KeyBinding kb){ if(kb != null){ Iterator it = this.items.iterator(); while(it.hasNext()){ TableItem item = (TableItem) it.next(); if(item.getData() instanceof KeyBindingAction){ KeyBindingAction itemData = (KeyBindingAction)item.getData(); if(kb.isSameAs(itemData.getKeyBinding())){ itemData.setKeyBinding(null); loadTableItemLabel(item); } } } } } protected TableItem getSelectedItem(){ TableItem item = null; int itemSelected = this.table.getSelectionIndex(); if(itemSelected >= 0){ item = this.table.getItem(itemSelected); } return item; } public boolean exists(KeyBinding kb){ Iterator it = this.items.iterator(); while(it.hasNext()){ TableItem item = (TableItem) it.next(); if(item.getData() instanceof KeyBindingAction){ KeyBindingAction itemData = (KeyBindingAction)item.getData(); if(itemData.getKeyBinding() != null && kb.isSameAs(itemData.getKeyBinding())){ return true; } } } return false; } protected void save(){ List list = new ArrayList(); Iterator it = this.items.iterator(); while (it.hasNext()) { TableItem item = (TableItem) it.next(); if(item.getData() instanceof KeyBindingAction){ KeyBindingAction keyBindingAction = (KeyBindingAction)item.getData(); if(keyBindingAction.getAction() != null && keyBindingAction.getKeyBinding() != null){ list.add(keyBindingAction); } } } TuxGuitar.instance().getkeyBindingManager().reset(list); TuxGuitar.instance().getkeyBindingManager().saveKeyBindings(); TuxGuitar.instance().loadLanguage(); } public Shell getDialog(){ return this.dialog; } public boolean isDisposed(){ return (this.dialog == null || this.dialog.isDisposed() ); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingSelector.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingSelector0000644000175000017500000001342111273045225033530 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings.editor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.keybindings.KeyBinding; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingReserveds; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; public class KeyBindingSelector { protected Shell dialog; protected KeyBindingEditor editor; protected KeyBinding keyBinding; protected String action; public KeyBindingSelector(KeyBindingEditor editor,KeyBindingAction keyBindingAction){ this.editor = editor; this.keyBinding = keyBindingAction.getKeyBinding(); this.action = keyBindingAction.getAction(); } public KeyBinding select(Shell parent){ this.dialog = DialogUtils.newDialog(parent,SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM); this.dialog.setLayout(new GridLayout()); this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.dialog.setText(TuxGuitar.getProperty("key-bindings-editor")); Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty(this.action)); final Composite composite = new Composite(group,SWT.NONE); composite.setLayout(new GridLayout(2,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); composite.setFocus(); composite.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { KeyBinding kb = new KeyBinding(e.keyCode,e.stateMask); if(kb.isSameAs(KeyBindingSelector.this.keyBinding) || isValid(kb)){ if(KeyBindingSelector.this.keyBinding == null){ KeyBindingSelector.this.keyBinding = new KeyBinding(); } KeyBindingSelector.this.keyBinding.setKey(kb.getKey()); KeyBindingSelector.this.keyBinding.setMask(kb.getMask()); } KeyBindingSelector.this.dialog.dispose(); } }); Label iconLabel = new Label(composite, SWT.CENTER ); iconLabel.setImage(iconLabel.getDisplay().getSystemImage(SWT.ICON_INFORMATION)); iconLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); Label textLabel = new Label(composite,SWT.CENTER); textLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true)); textLabel.setText(TuxGuitar.getProperty("key-bindings-editor-push-a-key")); FontData[] fd = textLabel.getFont().getFontData(); if(fd != null && fd.length > 0){ final Font font = new Font(textLabel.getDisplay(),new FontData( fd[0].getName(), 14 , SWT.BOLD) ); textLabel.setFont(font); textLabel.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent arg0) { font.dispose(); } }); } //------------------BUTTONS-------------------------- Composite buttons = new Composite(this.dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true)); final Button buttonClean = new Button(buttons, SWT.PUSH); buttonClean.setText(TuxGuitar.getProperty("clean")); buttonClean.setLayoutData(getButtonData()); buttonClean.addMouseListener(new MouseAdapter() { public void mouseUp(MouseEvent e) { composite.setFocus(); } }); buttonClean.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { KeyBindingSelector.this.keyBinding = null; KeyBindingSelector.this.dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addMouseListener(new MouseAdapter() { public void mouseUp(MouseEvent e) { composite.setFocus(); } }); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { KeyBindingSelector.this.dialog.dispose(); } }); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return this.keyBinding; } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } protected boolean isValid(KeyBinding kb){ if(KeyBindingReserveds.isReserved(kb)){ if(!this.editor.isDisposed()){ String title = TuxGuitar.getProperty("key-bindings-editor-reserved-title"); String message = TuxGuitar.getProperty("key-bindings-editor-reserved-message"); MessageDialog.infoMessage(this.editor.getDialog(),title,message); } return false; } if(this.editor.exists(kb)){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("key-bindings-editor-override")); confirm.setDefaultStatus( ConfirmDialog.STATUS_NO ); if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_NO) == ConfirmDialog.STATUS_NO){ return false; } } return true; } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingReader.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingReader.java0000644000175000017500000000650611273045225033412 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings.xml; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction; import org.herac.tuxguitar.gui.system.keybindings.KeyBinding; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class KeyBindingReader { private static final String SHORTCUT_TAG = "shortcut"; private static final String SHORTCUT_ATTRIBUTE_ACTION = "action"; private static final String SHORTCUT_ATTRIBUTE_KEY = "key"; private static final String SHORTCUT_ATTRIBUTE_MASK = "mask"; public static List getKeyBindings(String fileName) { try{ File file = new File(fileName); if (file.exists()){ return getBindings(getDocument(file).getFirstChild()); } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public static List getKeyBindings(InputStream is) { try{ if (is!=null){ return getBindings(getDocument(is).getFirstChild()); } }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } private static Document getDocument(InputStream is) { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(is); } catch (SAXException sxe) { sxe.printStackTrace(); } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } return document; } private static Document getDocument(File file) { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(file); } catch (SAXException sxe) { sxe.printStackTrace(); } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } return document; } /** * Read shortcuts from xml file * * @param shortcutsNode * @return */ private static List getBindings(Node shortcutsNode){ List list = new ArrayList(); NodeList nodeList = shortcutsNode.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node child = nodeList.item(i); String nodeName = child.getNodeName(); if (nodeName.equals(SHORTCUT_TAG)) { NamedNodeMap params = child.getAttributes(); Node nodeKey = params.getNamedItem(SHORTCUT_ATTRIBUTE_KEY); Node nodeMask = params.getNamedItem(SHORTCUT_ATTRIBUTE_MASK); Node nodeAction = params.getNamedItem(SHORTCUT_ATTRIBUTE_ACTION); if( nodeKey != null && nodeMask != null && nodeAction != null){ String key = nodeKey.getNodeValue(); String mask = nodeMask.getNodeValue(); String action = nodeAction.getNodeValue(); if (key != null && mask != null && action != null){ list.add(new KeyBindingAction(action, new KeyBinding(Integer.parseInt(key), Integer.parseInt(mask)) )); } } } } return list; } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingWriter.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingWriter.java0000644000175000017500000000626511273045225033466 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.keybindings.xml; import java.io.File; import java.io.FileOutputStream; import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Node; public class KeyBindingWriter { private static final String SHORTCUT_ROOT = "shortcuts"; private static final String SHORTCUT_TAG = "shortcut"; private static final String SHORTCUT_ATTRIBUTE_ACTION = "action"; private static final String SHORTCUT_ATTRIBUTE_KEY = "key"; private static final String SHORTCUT_ATTRIBUTE_MASK = "mask"; public static void setBindings(List list,String fileName) { try{ File file = new File(fileName); Document doc = createDocument(); setBindings(list,doc); saveDocument(doc,file); }catch(Throwable throwable){ throwable.printStackTrace(); } } public static Document createDocument() { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); return document; }catch(Throwable throwable){ throwable.printStackTrace(); } return null; } public static void saveDocument(Document document,File file) { try { FileOutputStream fs = new FileOutputStream(file); // Write it out again TransformerFactory xformFactory = TransformerFactory.newInstance(); Transformer idTransform = xformFactory.newTransformer(); Source input = new DOMSource(document); Result output = new StreamResult(fs); idTransform.setOutputProperty(OutputKeys.INDENT, "yes"); idTransform.transform(input, output); }catch(Throwable throwable){ throwable.printStackTrace(); } } /** * Write shortcuts to xml file * * @param shortcutsNode * @return */ private static void setBindings(List list,Document document){ Node shortcutsNode = document.createElement(SHORTCUT_ROOT); Iterator it = list.iterator(); while(it.hasNext()){ KeyBindingAction keyBindingAction = (KeyBindingAction) it.next(); Node node = document.createElement(SHORTCUT_TAG); shortcutsNode.appendChild(node); Attr attrKey = document.createAttribute(SHORTCUT_ATTRIBUTE_KEY); Attr attrMask = document.createAttribute(SHORTCUT_ATTRIBUTE_MASK); Attr attrAction = document.createAttribute(SHORTCUT_ATTRIBUTE_ACTION); attrKey.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding().getKey())); attrMask.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding().getMask())); attrAction.setNodeValue(keyBindingAction.getAction()); node.getAttributes().setNamedItem(attrKey); node.getAttributes().setNamedItem(attrMask); node.getAttributes().setNamedItem(attrAction); } document.appendChild(shortcutsNode); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGBrowserPlugin.java0000644000175000017500000000212211273045225032554 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public abstract class TGBrowserPlugin extends TGPluginAdapter{ private boolean loaded; private TGBrowserFactory factory; protected abstract TGBrowserFactory getFactory() throws TGPluginException; public void init() throws TGPluginException { this.factory = getFactory(); this.loaded = false; } public void close() throws TGPluginException { this.loaded = false; } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ TGBrowserManager.instance().addFactory(this.factory); this.loaded = true; } } protected void removePlugin() throws TGPluginException { if(this.loaded){ TGBrowserManager.instance().removeFactory(this.factory); this.loaded = false; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGExporterPlugin.java0000644000175000017500000000237011273045225032746 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGRawExporter; public abstract class TGExporterPlugin extends TGPluginAdapter{ private boolean loaded; private TGRawExporter exporter; protected abstract TGRawExporter getExporter() throws TGPluginException; public void init() throws TGPluginException { this.exporter = getExporter(); } public void close() throws TGPluginException { this.removePlugin(); } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded && this.exporter != null){ TGFileFormatManager.instance().addExporter(this.exporter); TuxGuitar.instance().getItemManager().createMenu(); this.loaded = true; } } protected void removePlugin() throws TGPluginException { if(this.loaded && this.exporter != null){ TGFileFormatManager.instance().removeExporter(this.exporter); TuxGuitar.instance().getItemManager().createMenu(); this.loaded = false; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGImporterPlugin.java0000644000175000017500000000230511273045225032735 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGRawImporter; public abstract class TGImporterPlugin extends TGPluginAdapter{ private boolean loaded; private TGRawImporter importer; protected abstract TGRawImporter getImporter() throws TGPluginException; public void init() throws TGPluginException { this.importer = getImporter(); } public void close() throws TGPluginException { this.removePlugin(); } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ TGFileFormatManager.instance().addImporter(this.importer); TuxGuitar.instance().getItemManager().createMenu(); this.loaded = true; } } protected void removePlugin() throws TGPluginException { if(this.loaded){ TGFileFormatManager.instance().removeImporter(this.importer); TuxGuitar.instance().getItemManager().createMenu(); this.loaded = false; } } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGInputStreamPlugin.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGInputStreamPlugin.java0000644000175000017500000000210111273045225033401 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGInputStreamBase; public abstract class TGInputStreamPlugin extends TGPluginAdapter{ private boolean loaded; private TGInputStreamBase stream; protected abstract TGInputStreamBase getInputStream() throws TGPluginException ; public void init() throws TGPluginException { this.stream = getInputStream(); } public void close() throws TGPluginException { this.removePlugin(); } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ TGFileFormatManager.instance().addInputStream(this.stream); this.loaded = true; } } protected void removePlugin() throws TGPluginException { if(this.loaded){ TGFileFormatManager.instance().removeInputStream(this.stream); this.loaded = false; } } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiOutputPortProviderPlugin.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiOutputPortProvider0000644000175000017500000000300011273045225033511 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public abstract class TGMidiOutputPortProviderPlugin extends TGPluginAdapter{ private boolean loaded; private MidiOutputPortProvider provider; protected abstract MidiOutputPortProvider getProvider() throws TGPluginException; public void init() throws TGPluginException { this.provider = getProvider(); this.loaded = false; } public void close() throws TGPluginException { try { this.provider.closeAll(); } catch (Throwable throwable) { throw new TGPluginException(throwable.getMessage(),throwable); } } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ try { TuxGuitar.instance().getPlayer().addOutputPortProvider(this.provider,TuxGuitar.instance().isInitialized()); this.loaded = true; } catch (Throwable throwable) { throw new TGPluginException(throwable.getMessage(),throwable); } } } protected void removePlugin() throws TGPluginException { if(this.loaded){ try { TuxGuitar.instance().getPlayer().removeOutputPortProvider(this.provider); this.loaded = false; } catch (Throwable throwable) { throw new TGPluginException(throwable.getMessage(),throwable); } } } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiSequencerProviderPlugin.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiSequencerProviderP0000644000175000017500000000277211273045225033435 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.player.base.MidiSequencerProvider; public abstract class TGMidiSequencerProviderPlugin extends TGPluginAdapter{ private boolean loaded; private MidiSequencerProvider provider; protected abstract MidiSequencerProvider getProvider() throws TGPluginException; public void init() throws TGPluginException { this.provider = getProvider(); this.loaded = false; } public void close() throws TGPluginException { try { this.provider.closeAll(); } catch (Throwable throwable) { throw new TGPluginException(throwable.getMessage(),throwable); } } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ try { TuxGuitar.instance().getPlayer().addSequencerProvider(this.provider,TuxGuitar.instance().isInitialized()); this.loaded = true; } catch (Throwable throwable) { throw new TGPluginException(throwable.getMessage(),throwable); } } } protected void removePlugin() throws TGPluginException { if(this.loaded){ try { TuxGuitar.instance().getPlayer().removeSequencerProvider(this.provider); this.loaded = false; } catch (Throwable throwable) { throw new TGPluginException(throwable.getMessage(),throwable); } } } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGOutputStreamPlugin.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGOutputStreamPlugin.jav0000644000175000017500000000211111273045225033442 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.io.base.TGOutputStreamBase; public abstract class TGOutputStreamPlugin extends TGPluginAdapter{ private boolean loaded; private TGOutputStreamBase stream; protected abstract TGOutputStreamBase getOutputStream() throws TGPluginException ; public void init() throws TGPluginException { this.stream = getOutputStream(); } public void close() throws TGPluginException { this.removePlugin(); } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ TGFileFormatManager.instance().addOutputStream(this.stream); this.loaded = true; } } protected void removePlugin() throws TGPluginException { if(this.loaded){ TGFileFormatManager.instance().removeOutputStream(this.stream); this.loaded = false; } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginAdapter.java0000644000175000017500000000063411273045225032517 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.herac.tuxguitar.gui.system.plugins.TGPlugin; public abstract class TGPluginAdapter implements TGPlugin{ public String getName() { return "Untitled Plugin"; } public String getAuthor() { return "Unavailable"; } public String getDescription() { return "Unavailable"; } public String getVersion() { return "Unavailable"; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginList.java0000644000175000017500000000215211273045225032047 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.system.plugins.TGPlugin; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; public abstract class TGPluginList extends TGPluginAdapter{ private List plugins; public TGPluginList(){ super(); } public void init() throws TGPluginException { Iterator it = getIterator(); while(it.hasNext()){ TGPlugin plugin = (TGPlugin)it.next(); plugin.init(); } } public void close() throws TGPluginException { Iterator it = getIterator(); while(it.hasNext()){ TGPlugin plugin = (TGPlugin)it.next(); plugin.close(); } } public void setEnabled(boolean enabled) throws TGPluginException { Iterator it = getIterator(); while(it.hasNext()){ TGPlugin plugin = (TGPlugin)it.next(); plugin.setEnabled( enabled); } } private Iterator getIterator() throws TGPluginException { if(this.plugins == null){ this.plugins = getPlugins(); } return this.plugins.iterator(); } protected abstract List getPlugins() throws TGPluginException ; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGToolItemPlugin.java0000644000175000017500000000356411273045225032700 0ustar julianjulianpackage org.herac.tuxguitar.gui.system.plugins.base; import org.eclipse.swt.events.TypedEvent; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.system.plugins.TGPluginException; import org.herac.tuxguitar.gui.tools.custom.TGCustomTool; import org.herac.tuxguitar.gui.tools.custom.TGCustomToolManager; public abstract class TGToolItemPlugin extends TGPluginAdapter{ private boolean loaded; private TGCustomTool tool; private TGCustomToolAction toolAction; protected abstract void doAction(); protected abstract String getItemName() throws TGPluginException ; public void init() throws TGPluginException { String name = getItemName(); this.tool = new TGCustomTool(name,name); this.toolAction = new TGCustomToolAction(this.tool.getName()); } public void close() throws TGPluginException { this.removePlugin(); } public void setEnabled(boolean enabled) throws TGPluginException { if(enabled){ addPlugin(); }else{ removePlugin(); } } protected void addPlugin() throws TGPluginException { if(!this.loaded){ TuxGuitar.instance().getActionManager().addAction(this.toolAction); TGCustomToolManager.instance().addCustomTool(this.tool); TuxGuitar.instance().getItemManager().createMenu(); this.loaded = true; } } protected void removePlugin() throws TGPluginException { if(this.loaded){ TGCustomToolManager.instance().removeCustomTool(this.tool); TuxGuitar.instance().getActionManager().removeAction(this.tool.getAction()); TuxGuitar.instance().getItemManager().createMenu(); this.loaded = false; } } protected class TGCustomToolAction extends Action{ public TGCustomToolAction(String name) { super(name, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE); } protected int execute(TypedEvent e) { doAction(); return 0; } } }tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowser.java0000644000175000017500000000113111273045224031211 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.base; import java.util.List; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; public abstract class TGBrowser { public TGBrowser(){ super(); } public abstract void open() throws TGBrowserException; public abstract void close()throws TGBrowserException; public abstract void cdRoot()throws TGBrowserException; public abstract void cdUp()throws TGBrowserException; public abstract void cdElement(TGBrowserElement element)throws TGBrowserException; public abstract List listElements()throws TGBrowserException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserData.java0000644000175000017500000000022411273045224032005 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.base; public interface TGBrowserData { public String getTitle(); public String toString(); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserElement.java0000644000175000017500000000067611273045224032540 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.base; import java.io.InputStream; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; public abstract class TGBrowserElement { private String name; public TGBrowserElement(String name){ this.name = name; } public String getName(){ return this.name; } public abstract boolean isFolder(); public abstract InputStream getInputStream() throws TGBrowserException; } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserFactory.java0000644000175000017500000000052411273045224032546 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.base; import org.eclipse.swt.widgets.Shell; public interface TGBrowserFactory { public String getName(); public String getType(); public TGBrowserData parseData(String string); public TGBrowserData dataDialog(Shell parent); public TGBrowser newTGBrowser(TGBrowserData data); } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserBar.java0000644000175000017500000000373511273045224032177 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.dialog; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public abstract class TGBrowserBar implements LanguageLoader{ private TGBrowserDialog browser; public TGBrowserBar(TGBrowserDialog browser){ this.browser = browser; } public abstract void init(Shell shell); public abstract void updateItems(); public abstract void updateCollections(TGBrowserCollection selection); protected TGBrowserDialog getBrowser(){ return this.browser; } protected void newCollection(String type){ TGBrowserFactory factory = TGBrowserManager.instance().getFactory(type); if(factory != null){ TGBrowserData data = factory.dataDialog(getBrowser().getShell()); if(data != null){ openCollection(addCollection(factory, data, true)); } } } protected TGBrowserCollection addCollection(TGBrowserFactory factory,String data){ return this.addCollection(factory,factory.parseData(data),false); } protected TGBrowserCollection addCollection(TGBrowserFactory factory,TGBrowserData data,boolean reload){ TGBrowserCollection collection = new TGBrowserCollection(); collection.setType(factory.getType()); collection.setData(data); collection = TGBrowserManager.instance().addCollection(collection); if(reload){ getBrowser().updateCollections(collection); } return collection; } protected void openCollection(TGBrowserCollection collection){ getBrowser().setCollection(collection); getBrowser().openCollection(); } protected void removeCollection(TGBrowserCollection collection){ getBrowser().removeCollection(collection); } protected void closeCollection(){ getBrowser().closeCollection(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserCollectionCombo.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserCollectionComb0000644000175000017500000000320411273045224033436 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.dialog; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; public class TGBrowserCollectionCombo { private Combo combo; private List collections; public TGBrowserCollectionCombo(Composite parent, int style){ this.combo = new Combo(parent,style); this.collections = new ArrayList(); this.addFirstElement(); } private void addFirstElement(){ this.combo.add(TuxGuitar.getProperty("browser.collection.select")); this.combo.select(0); } public void add(TGBrowserCollection collection) { this.combo.add(collection.getData().getTitle()); this.collections.add(collection); } public TGBrowserCollection getSelection(){ int index = ( this.combo.getSelectionIndex() - 1); if(index >= 0 && index < this.collections.size()){ return ( (TGBrowserCollection)this.collections.get(index) ); } return null; } public void addSelectionListener(SelectionListener listener) { this.combo.addSelectionListener(listener); } public void setLayoutData(Object layoutData) { this.combo.setLayoutData(layoutData); } public void removeAll() { this.combo.removeAll(); this.collections.clear(); this.addFirstElement(); } public void select(int index) { this.combo.select( ( index + 1 ) ); } public void setEnabled(boolean enabled){ this.combo.setEnabled(enabled); } public boolean isEmpty(){ return this.collections.isEmpty(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserDialog.java0000644000175000017500000002661411273045224032673 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.dialog; import java.io.InputStream; import java.util.Iterator; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.ActionLock; import org.herac.tuxguitar.gui.actions.file.FileActionUtils; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.system.config.TGConfigKeys; import org.herac.tuxguitar.gui.system.icons.IconLoader; import org.herac.tuxguitar.gui.system.language.LanguageLoader; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserConnection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserConnectionHandler; import org.herac.tuxguitar.gui.tools.browser.TGBrowserFactoryHandler; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; import org.herac.tuxguitar.gui.util.ConfirmDialog; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; import org.herac.tuxguitar.io.base.TGFileFormatException; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.song.models.TGSong; public class TGBrowserDialog implements TGBrowserFactoryHandler,TGBrowserConnectionHandler,IconLoader,LanguageLoader{ private static final int SHELL_WIDTH = 500; private static final int SHELL_HEIGHT = 350; public static final int CALL_OPEN = 1; public static final int CALL_CLOSE = 2; public static final int CALL_CD_ROOT = 3; public static final int CALL_CD_UP = 4; public static final int CALL_LIST = 5; public static final int CALL_ELEMENT = 6; private TGBrowserCollection collection; private TGBrowserConnection connection; private Shell dialog; protected Table table; protected TableColumn column; protected List elements; protected TGBrowserMenuBar menu; protected TGBrowserToolBar toolBar; public TGBrowserDialog(){ this.connection = new TGBrowserConnection(this); this.menu = new TGBrowserMenuBar(this); this.toolBar = new TGBrowserToolBar(this); } public TGBrowserConnection getConnection(){ return this.connection; } public TGBrowserCollection getCollection() { return this.collection; } public void setCollection(TGBrowserCollection collection) { this.collection = collection; } public Shell getShell(){ return this.dialog; } public void exit(){ this.getConnection().release(); this.getConnection().close(CALL_CLOSE); TGBrowserManager.instance().writeCollections(); TuxGuitar.instance().getIconManager().removeLoader(this); } public void show(){ this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE); this.dialog.setLayout(new GridLayout()); this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.menu.init(getShell()); this.toolBar.init(getShell()); this.initTable(this.dialog); this.updateCollections(null); this.updateTable(); this.dialog.setSize(SHELL_WIDTH,SHELL_HEIGHT); this.dialog.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { exit(); } }); this.loadProperties(); this.updateBars(); TGBrowserManager.instance().setFactoryHandler(this); TuxGuitar.instance().getIconManager().addLoader(this); TuxGuitar.instance().getLanguageManager().addLoader(this); DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER); } private void initTable(Composite parent){ this.table = new Table(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); this.table.setLinesVisible(TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.BROWSER_LINES_VISIBLE)); this.table.setHeaderVisible(false); this.column = new TableColumn(this.table, SWT.LEFT); this.table.addListener (SWT.MouseDoubleClick, new Listener() { public void handleEvent (Event event) { openElement(); } }); } public boolean isDisposed(){ return (this.dialog == null || this.dialog.isDisposed()); } public void dispose(){ if(!isDisposed()){ this.dialog.dispose(); } } private void updateTable(){ if(!isDisposed()){ new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ TGBrowserDialog.this.table.removeAll(); if(TGBrowserDialog.this.elements != null){ Iterator it = TGBrowserDialog.this.elements.iterator(); while(it.hasNext()){ TGBrowserElement element = (TGBrowserElement)it.next(); TableItem item = new TableItem(TGBrowserDialog.this.table, SWT.NONE); item.setImage(element.isFolder()?TuxGuitar.instance().getIconManager().getBrowserFolder():TuxGuitar.instance().getIconManager().getBrowserFile()); item.setText(element.getName()); } } updateColumn(); } } }).start(); } } protected void updateColumn(){ if(!isDisposed()){ this.column.pack(); } } public void updateBars(){ if(!isDisposed()){ this.menu.updateItems(); this.toolBar.updateItems(); } } public void updateCollections(final TGBrowserCollection selection){ if(!isDisposed()){ new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ TGBrowserDialog.this.menu.updateCollections(selection); TGBrowserDialog.this.toolBar.updateCollections(selection); } } }).start(); } } public TGBrowserElement getSelection(int index){ if(!isDisposed() && getConnection().isOpen()){ if(this.elements != null && index >= 0 && index < this.elements.size()){ return (TGBrowserElement)this.elements.get(index); } } return null; } protected void removeElements(){ this.elements = null; } protected void addElements(List elements){ this.elements = elements; } protected void openCollection(){ if(!isDisposed() && getCollection() != null){ TGBrowserFactory factory = TGBrowserManager.instance().getFactory(getCollection().getType()); getConnection().open(CALL_OPEN,factory.newTGBrowser(getCollection().getData())); } } protected void closeCollection(){ if(!isDisposed() && getCollection() != null){ this.getConnection().close(CALL_CLOSE); } } protected void removeCollection(TGBrowserCollection collection){ if(collection != null){ TGBrowserManager.instance().removeCollection(collection); if( getCollection() != null && getCollection().equals( collection ) ){ this.getConnection().close(CALL_CLOSE); }else{ this.updateCollections( getCollection() ); } } } public void openElement(){ TGBrowserElement element = getSelection(this.table.getSelectionIndex()); if(element != null){ this.getConnection().openStream(CALL_ELEMENT,element); } } public void notifyLockStatusChanged(){ new SyncThread(new Runnable() { public void run() { if(!isDisposed()){ updateBars(); TuxGuitar.instance().loadCursor(getShell(),( getConnection().isLocked() ? SWT.CURSOR_WAIT : SWT.CURSOR_ARROW ) ); } } }).start(); } public void notifyOpened(int callId) { if(!isDisposed()){ this.removeElements(); this.updateTable(); this.updateCollections(getCollection()); this.getConnection().release(); this.getConnection().listElements(CALL_LIST); } } public void notifyClosed(int callId) { if(callId != CALL_OPEN){ this.setCollection(null); } this.removeElements(); this.updateCollections(getCollection()); this.updateTable(); if(callId != CALL_OPEN){ this.getConnection().release(); } } public void notifyError(int callId,Throwable throwable){ if(!isDisposed()){ this.updateTable(); this.getConnection().release(); MessageDialog.errorMessage(getShell(),throwable); } } public void notifyCd(int callId) { if(!isDisposed()){ this.getConnection().release(); this.getConnection().listElements(CALL_LIST); } } public void notifyElements(int callId,List elements) { if(!isDisposed()){ this.addElements(elements); this.updateTable(); this.getConnection().release(); } } public void notifyStream(int callId,final InputStream stream,final TGBrowserElement element) { if(!isDisposed()){ ActionLock.lock(); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ TuxGuitar.instance().getPlayer().reset(); if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){ ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question")); confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL ); int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES); if(status == ConfirmDialog.STATUS_CANCEL){ getConnection().release(); ActionLock.unlock(); return; } if(status == ConfirmDialog.STATUS_YES){ final String fileName = FileActionUtils.getFileName(); if(fileName == null){ getConnection().release(); ActionLock.unlock(); return; } new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ FileActionUtils.save(fileName); new SyncThread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ openStream(stream,element); } } }).start(); } } }).start(); return; } } openStream(stream,element); } } }).start(); } } protected void openStream(final InputStream stream,final TGBrowserElement element){ new Thread(new Runnable() { public void run() { if(!TuxGuitar.isDisposed()){ try { TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream); TuxGuitar.instance().fireNewSong(song,null); }catch (Throwable throwable) { TuxGuitar.instance().newSong(); MessageDialog.errorMessage(getShell(),new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{element.getName()}),throwable)); } getConnection().release(); ActionLock.unlock(); } } }).start(); } public void loadIcons() { if(!isDisposed()){ this.getShell().setImage(TuxGuitar.instance().getIconManager().getAppIcon()); this.reload(); } } public void loadProperties() { if(!isDisposed()){ this.dialog.setText(TuxGuitar.getProperty("browser.dialog")); this.menu.loadProperties(); this.toolBar.loadProperties(); } } public void notifyAdded() { reload(); } public void notifyRemoved() { if(getCollection() != null){ closeCollection(); } reload(); } protected void reload(){ if(!isDisposed()){ this.menu.reload(getShell()); this.toolBar.reload(); this.updateTable(); this.updateCollections(getCollection()); this.getShell().layout(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserMenuBar.java0000644000175000017500000002013011273045224033010 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.dialog; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public class TGBrowserMenuBar extends TGBrowserBar{ private Menu menu; private Menu newCollection; private Menu openCollection; private Menu removeCollection; private MenuItem menuFileItem; private MenuItem menuCollectionItem; private MenuItem menuGoItem; private MenuItem open; private MenuItem exit; private MenuItem newItem; private MenuItem openItem; private MenuItem removeItem; private MenuItem close; private MenuItem root; private MenuItem back; private MenuItem refresh; public TGBrowserMenuBar(TGBrowserDialog browser){ super(browser); } public void init(Shell shell){ this.menu = new Menu(shell, SWT.BAR); //---File menu------------------------------------------------------ Menu menuFile = new Menu(shell,SWT.DROP_DOWN); this.menuFileItem = new MenuItem(this.menu, SWT.CASCADE); this.menuFileItem.setMenu(menuFile); this.open = new MenuItem(menuFile,SWT.PUSH); this.open.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); this.open.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().openElement(); } }); new MenuItem(menuFile,SWT.SEPARATOR); this.exit = new MenuItem(menuFile,SWT.PUSH); this.exit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getShell().dispose(); } }); //---Collection menu------------------------------------------------------ Menu menuCollection = new Menu(shell,SWT.DROP_DOWN); this.menuCollectionItem = new MenuItem(this.menu, SWT.CASCADE); this.menuCollectionItem.setMenu(menuCollection); this.newCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN); this.newItem = new MenuItem(menuCollection,SWT.CASCADE); this.newItem.setImage(TuxGuitar.instance().getIconManager().getBrowserNew()); this.newItem.setMenu(this.newCollection); this.updateTypes(); this.openCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN); this.openItem = new MenuItem(menuCollection,SWT.CASCADE); this.openItem.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); this.openItem.setMenu(this.openCollection); this.removeCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN); this.removeItem = new MenuItem(menuCollection,SWT.CASCADE); this.removeItem.setMenu(this.removeCollection); new MenuItem(menuCollection,SWT.SEPARATOR); this.close = new MenuItem(menuCollection,SWT.PUSH); this.close.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { closeCollection(); } }); //---Go menu------------------------------------------------------ final Menu menuGo = new Menu(shell,SWT.DROP_DOWN); this.menuGoItem = new MenuItem(this.menu, SWT.CASCADE); this.menuGoItem.setMenu(menuGo); this.root = new MenuItem(menuGo,SWT.PUSH); this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot()); this.root.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT); } }); //---Back Folder------------------------------------------------------ this.back = new MenuItem(menuGo,SWT.PUSH); this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack()); this.back.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP); } }); //---Refresh Folder------------------------------------------------------ this.refresh = new MenuItem(menuGo,SWT.PUSH); this.refresh.setImage(TuxGuitar.instance().getIconManager().getBrowserRefresh()); this.refresh.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST); } }); shell.setMenuBar(this.menu); } public void updateItems(){ this.open.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); this.root.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); this.back.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); this.refresh.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); this.newItem.setEnabled(!getBrowser().getConnection().isLocked()); this.openItem.setEnabled(!getBrowser().getConnection().isLocked()); this.removeItem.setEnabled(!getBrowser().getConnection().isLocked()); this.close.setEnabled(!getBrowser().getConnection().isLocked()); } public void loadProperties(){ this.menuFileItem.setText(TuxGuitar.getProperty("browser.menu.file")); this.menuCollectionItem.setText(TuxGuitar.getProperty("browser.menu.collection")); this.menuGoItem.setText(TuxGuitar.getProperty("browser.menu.go")); this.open.setText(TuxGuitar.getProperty("browser.open")); this.exit.setText(TuxGuitar.getProperty("browser.exit")); this.newItem.setText(TuxGuitar.getProperty("browser.collection.new")); this.openItem.setText(TuxGuitar.getProperty("browser.collection.open")); this.removeItem.setText(TuxGuitar.getProperty("browser.collection.remove")); this.close.setText(TuxGuitar.getProperty("browser.collection.close")); this.root.setText(TuxGuitar.getProperty("browser.go-root")); this.back.setText(TuxGuitar.getProperty("browser.go-back")); this.refresh.setText(TuxGuitar.getProperty("browser.refresh")); } public void updateCollections(TGBrowserCollection selection){ MenuItem[] openItems = this.openCollection.getItems(); for(int i = 0;i < openItems.length; i ++){ openItems[i].dispose(); } MenuItem[] removeItems = this.removeCollection.getItems(); for(int i = 0;i < removeItems.length; i ++){ removeItems[i].dispose(); } Iterator it = TGBrowserManager.instance().getCollections(); while(it.hasNext()){ final TGBrowserCollection collection = (TGBrowserCollection)it.next(); if(collection.getData() != null){ MenuItem openItem = new MenuItem(this.openCollection,SWT.PUSH); openItem.setText(collection.getData().getTitle()); openItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { openCollection(collection); } }); if(selection != null && selection.equals(collection)){ openItem.setSelection(true); } MenuItem removeItem = new MenuItem(this.removeCollection,SWT.PUSH); removeItem.setText(collection.getData().getTitle()); removeItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { removeCollection(collection); } }); if(selection != null && selection.equals(collection)){ removeItem.setSelection(true); } } } } public void updateTypes(){ MenuItem[] items = this.newCollection.getItems(); for(int i = 0;i < items.length; i ++){ items[i].dispose(); } Iterator bookTypes = TGBrowserManager.instance().getFactories(); while(bookTypes.hasNext()){ final TGBrowserFactory bookType = (TGBrowserFactory)bookTypes.next(); MenuItem item = new MenuItem(this.newCollection,SWT.PUSH); item.setText(bookType.getName()); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { newCollection( bookType.getType()); } }); } } public void reload(Shell shell){ if(this.menu != null && !this.menu.isDisposed()){ this.menu.dispose(); } this.init(shell); this.loadProperties(); this.updateItems(); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserToolBar.java0000644000175000017500000001457711273045224033043 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.dialog; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public class TGBrowserToolBar extends TGBrowserBar{ private Composite composite; private ToolBar toolBar; private ToolItem newBrowser; private ToolItem root; private ToolItem back; private ToolItem refresh; protected Menu newBrowserMenu; protected TGBrowserCollectionCombo collections; public TGBrowserToolBar(TGBrowserDialog browser){ super(browser); } public void init(Shell shell){ this.composite = new Composite(shell,SWT.NONE); this.composite.setLayout(getLayout()); this.composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false)); this.initItems(); } public void initItems(){ this.toolBar = new ToolBar(this.composite,SWT.FLAT | SWT.WRAP); //---New Book---------------------------------------------------------- this.newBrowserMenu = new Menu(this.composite); Iterator bookTypes = TGBrowserManager.instance().getFactories(); while(bookTypes.hasNext()) { final TGBrowserFactory bookType = (TGBrowserFactory)bookTypes.next(); MenuItem item = new MenuItem(this.newBrowserMenu, SWT.PUSH); item.setText(bookType.getName()); item.setData(bookType); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { newCollection( bookType.getType()); } }); } this.newBrowser = new ToolItem(this.toolBar,SWT.DROP_DOWN); this.newBrowser.setImage(TuxGuitar.instance().getIconManager().getBrowserNew()); this.newBrowser.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if (event.detail == SWT.ARROW) { ToolItem item = (ToolItem) event.widget; Rectangle rect = item.getBounds(); Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y)); TGBrowserToolBar.this.newBrowserMenu.setLocation(pt.x, pt.y + rect.height); TGBrowserToolBar.this.newBrowserMenu.setVisible(true); } } }); new ToolItem(this.toolBar, SWT.SEPARATOR); //---Root Folder------------------------------------------------------ this.root = new ToolItem(this.toolBar,SWT.PUSH); this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot()); this.root.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT); } }); //---Back Folder------------------------------------------------------ this.back = new ToolItem(this.toolBar,SWT.PUSH); this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack()); this.back.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP); } }); //---Refresh Folder------------------------------------------------------ this.refresh = new ToolItem(this.toolBar,SWT.PUSH); this.refresh.setImage(TuxGuitar.instance().getIconManager().getBrowserRefresh()); this.refresh.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST); } }); //---Finish tool bar new ToolItem(this.toolBar, SWT.SEPARATOR); //---Collections------------------------------------------------------------- this.collections = new TGBrowserCollectionCombo(this.composite, SWT.READ_ONLY); this.collections.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true)); this.collections.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateCollection(); } }); } public void updateItems(){ this.newBrowser.setEnabled(!getBrowser().getConnection().isLocked()); this.collections.setEnabled(!getBrowser().getConnection().isLocked()); this.root.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); this.back.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); this.refresh.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen()); } public void updateCollections(TGBrowserCollection selection){ int index = 0; this.collections.removeAll(); Iterator it = TGBrowserManager.instance().getCollections(); while(it.hasNext()){ TGBrowserCollection collection = (TGBrowserCollection)it.next(); if(collection.getData() != null){ this.collections.add(collection); if(selection != null && selection.equals(collection)){ this.collections.select(index); } index ++; } } } public void reload(){ this.disposeItems(); this.initItems(); this.loadProperties(); this.updateItems(); this.composite.layout(true,true); } public void loadProperties(){ this.newBrowser.setToolTipText(TuxGuitar.getProperty("browser.collection.new")); this.root.setToolTipText(TuxGuitar.getProperty("browser.go-root")); this.back.setToolTipText(TuxGuitar.getProperty("browser.go-back")); this.refresh.setToolTipText(TuxGuitar.getProperty("browser.refresh")); this.updateCollections(getBrowser().getCollection()); } protected void updateCollection(){ TGBrowserCollection collection = this.collections.getSelection(); if(collection == null){ closeCollection(); }else{ openCollection(collection); } } private void disposeItems(){ Control[] controls = this.composite.getChildren(); for(int i = 0; i < controls.length; i ++){ controls[i].dispose(); } } private GridLayout getLayout(){ GridLayout layout = new GridLayout(2,false); layout.marginWidth = 0; layout.marginHeight = 0; return layout; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataDialog.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataDialog0000644000175000017500000001114611273045224033464 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.filesystem; import java.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; public class TGBrowserDataDialog { private TGBrowserData data; public TGBrowserData getData() { return this.data; } public void setData(TGBrowserData data) { this.data = data; } public TGBrowserData open(Shell parent) { final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("browser.collection.fs.editor-title")); Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText(TuxGuitar.getProperty("browser.collection.fs.editor-tip")); Composite composite = new Composite(group,SWT.NONE); composite.setLayout(new GridLayout(3,false)); composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); final Label titleLabel = new Label(composite,SWT.LEFT); titleLabel.setText(TuxGuitar.getProperty("browser.collection.fs.name")); titleLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); final Text titleValue = new Text(composite,SWT.BORDER); titleValue.setLayoutData(getTextData(2)); final Label pathLabel = new Label(composite,SWT.LEFT); pathLabel.setText(TuxGuitar.getProperty("browser.collection.fs.path")); pathLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true)); final Text pathValue = new Text(composite,SWT.BORDER); pathValue.setLayoutData(getTextData(1)); final Button pathChooser = new Button(composite,SWT.PUSH); pathChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); pathChooser.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog directoryDialog = new DirectoryDialog(dialog); String selection = directoryDialog.open(); if(selection != null){ pathValue.setText(selection); } } }); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { String selectedTitle = titleValue.getText(); String selectedPath = pathValue.getText(); if(!isValidPath(selectedPath)){ MessageDialog.errorMessage(dialog,TuxGuitar.getProperty("browser.collection.fs.invalid-path")); return; } if(isBlank(selectedTitle)){ selectedTitle = selectedPath; } setData(new TGBrowserDataImpl(selectedTitle,selectedPath)); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); return getData(); } private GridData getButtonData(){ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData getTextData(int span){ GridData data = new GridData(SWT.LEFT, SWT.CENTER, true, true,span,1); data.minimumWidth = 350; return data; } protected boolean isBlank(String s){ return (s == null || s.length() == 0); } protected boolean isValidPath(String path){ if(!isBlank(path)){ File file = new File(path); return (file.exists() && file.isDirectory()); } return false; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataImpl.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataImpl.j0000644000175000017500000000141511273045224033414 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.filesystem; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; public class TGBrowserDataImpl implements TGBrowserData{ private static final String STRING_SEPARATOR = ";"; private String title; private String path; public TGBrowserDataImpl(String title,String path){ this.title = title; this.path = path; } public String getTitle(){ return this.title; } public String getPath(){ return this.path; } public String toString(){ return (getTitle() + STRING_SEPARATOR + getPath()); } public static TGBrowserData fromString(String string) { String[] data = string.split(STRING_SEPARATOR); if(data.length == 2){ return new TGBrowserDataImpl(data[0],data[1]); } return null; } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementComparator.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementCom0000644000175000017500000000175411273045224033527 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.filesystem; import java.util.Comparator; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserElementComparator implements Comparator { private static final int RESULT_LESS = -1; private static final int RESULT_EQUAL = 0; private static final int RESULT_GREATER = 1; private static final int DIRECTION = 1; private static final int DIRECTION_FOLDER = 1; public int compare(Object o1, Object o2) { if(o1 instanceof TGBrowserElement && o2 instanceof TGBrowserElement){ TGBrowserElement element1 = (TGBrowserElement)o1; TGBrowserElement element2 = (TGBrowserElement)o2; if(element1.isFolder() && !element2.isFolder()){ return (DIRECTION_FOLDER * RESULT_LESS); } if(element2.isFolder() && !element1.isFolder()){ return (DIRECTION_FOLDER * RESULT_GREATER); } return (DIRECTION * (element1.getName().compareTo(element2.getName()))); } return RESULT_EQUAL; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementImpl.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementImp0000644000175000017500000000176111273045224033534 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.filesystem; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import org.herac.tuxguitar.gui.tools.browser.TGBrowserException; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserElementImpl extends TGBrowserElement{ private TGBrowserElementImpl parent; private File file; public TGBrowserElementImpl(TGBrowserElementImpl parent,File file) { super(file.getName()); this.parent = parent; this.file = file; } public File getFile() { return this.file; } public TGBrowserElementImpl getParent() { return this.parent; } public boolean isFolder(){ return getFile().isDirectory(); } public InputStream getInputStream() throws TGBrowserException { if(!isFolder()){ try { return new FileInputStream(getFile()); } catch (FileNotFoundException e) { throw new TGBrowserException(e); } } return null; } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserFactoryImpl.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserFactoryImp0000644000175000017500000000176011273045224033551 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.filesystem; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory; public class TGBrowserFactoryImpl implements TGBrowserFactory{ public TGBrowserFactoryImpl() { super(); } public String getType(){ return "file.system"; } public String getName(){ return TuxGuitar.getProperty("browser.factory.fs.name"); } public TGBrowser newTGBrowser(TGBrowserData data) { if(data instanceof TGBrowserDataImpl){ return new TGBrowserImpl((TGBrowserDataImpl)data); } return null; } public TGBrowserData parseData(String string) { return TGBrowserDataImpl.fromString(string); } public TGBrowserData dataDialog(Shell parent) { TGBrowserDataDialog dialog = new TGBrowserDataDialog(); return dialog.open(parent); } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserImpl.java0000644000175000017500000000247511273045224033321 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.filesystem; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement; public class TGBrowserImpl extends TGBrowser{ private File root; private TGBrowserElementImpl element; private TGBrowserDataImpl data; public TGBrowserImpl(TGBrowserDataImpl data){ this.data = data; } public void open(){ this.root = new File(this.data.getPath()); } public void close(){ this.root = null; } public void cdElement(TGBrowserElement element) { this.element = (TGBrowserElementImpl)element; } public void cdRoot() { this.element = null; } public void cdUp() { if(this.element != null){ this.element = this.element.getParent(); } } public List listElements() { List elements = new ArrayList(); File file = ((this.element != null)?this.element.getFile():this.root); if(file.exists() && file.isDirectory()){ File[] files = file.listFiles(); for(int i = 0; i < files.length;i ++){ elements.add(new TGBrowserElementImpl(this.element,files[i])); } } if( !elements.isEmpty() ){ Collections.sort(elements,new TGBrowserElementComparator()); } return elements; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserReader.java0000644000175000017500000000372211273045224032232 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollectionInfo; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class TGBrowserReader { private static final String ITEM_TAG = "browser-collection"; private static final String ATTRIBUTE_TYPE = "type"; private static final String ATTRIBUTE_DATA = "data"; public void loadCollections(TGBrowserManager manager,File file){ if (file.exists()){ try { Document doc = getDocument(file); loadCollections(manager,doc.getFirstChild()); } catch (Throwable throwable) { throwable.printStackTrace(); } } } private static void loadCollections(TGBrowserManager manager,Node node){ NodeList listNode = node.getChildNodes(); for (int i = 0; i < listNode.getLength(); i++) { Node child = listNode.item(i); String nameNode = child.getNodeName(); if (nameNode.equals(ITEM_TAG)) { NamedNodeMap params = child.getAttributes(); String type = params.getNamedItem(ATTRIBUTE_TYPE).getNodeValue(); String data = params.getNamedItem(ATTRIBUTE_DATA).getNodeValue(); if(type != null){ TGBrowserCollectionInfo info = new TGBrowserCollectionInfo(); info.setType(type); info.setData(data); manager.addInfo(info); } } } } private static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(file); return document; } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserWriter.java0000644000175000017500000000656711273045224032316 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.Iterator; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection; import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Node; public class TGBrowserWriter { private static final String ITEM_LIST_TAG = "browser-collections"; private static final String ITEM_TAG = "browser-collection"; private static final String ATTRIBUTE_TYPE = "type"; private static final String ATTRIBUTE_DATA = "data"; public void saveCollections(TGBrowserManager manager,String fileName) { try{ Document doc = createDocument(); saveCollections(manager,doc); saveDocument(doc,new File(fileName)); }catch(Throwable throwable){ throwable.printStackTrace(); } } private static void saveCollections(TGBrowserManager manager,Document document){ //chords tag Node listNode = document.createElement(ITEM_LIST_TAG); Iterator collections = manager.getCollections(); while(collections.hasNext()){ TGBrowserCollection collection = (TGBrowserCollection)collections.next(); //chord tag Node node = document.createElement(ITEM_TAG); listNode.appendChild(node); //name attribute Attr typeAttr = document.createAttribute(ATTRIBUTE_TYPE); typeAttr.setNodeValue(collection.getType()); //name attribute Attr dataAttr = document.createAttribute(ATTRIBUTE_DATA); dataAttr.setNodeValue(collection.getData().toString()); node.getAttributes().setNamedItem(typeAttr); node.getAttributes().setNamedItem(dataAttr); } document.appendChild(listNode); } public static Document createDocument() { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.newDocument(); }catch (ParserConfigurationException pce) { pce.printStackTrace(); } return document; } public static void saveDocument(Document document,File file) { try { FileOutputStream fs = new FileOutputStream(file); // Write it out again TransformerFactory xformFactory = TransformerFactory.newInstance(); Transformer idTransform = xformFactory.newTransformer(); Source input = new DOMSource(document); Result output = new StreamResult(fs); idTransform.setOutputProperty(OutputKeys.INDENT, "yes"); idTransform.transform(input, output); } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/xml/ScaleReader.java0000644000175000017500000000362211273045224031006 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.scale.xml; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.herac.tuxguitar.gui.tools.scale.ScaleInfo; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class ScaleReader { private static final String SCALE_TAG = "scale"; private static final String NAME_ATTRIBUTE = "name"; private static final String KEYS_ATTRIBUTE = "keys"; public void loadScales(List scales,InputStream stream){ try{ if ( stream != null ){ Document doc = getDocument(stream); loadScales(scales,doc.getFirstChild()); } }catch(Throwable e){ e.printStackTrace(); } } private static Document getDocument(InputStream stream) throws ParserConfigurationException, SAXException, IOException { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(stream); return document; } private static void loadScales(List scales,Node node){ NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node child = nodeList.item(i); String nodeName = child.getNodeName(); if (nodeName.equals(SCALE_TAG)) { NamedNodeMap params = child.getAttributes(); String name = params.getNamedItem(NAME_ATTRIBUTE).getNodeValue(); String keys = params.getNamedItem(KEYS_ATTRIBUTE).getNodeValue(); if (name == null || keys == null || name.trim().equals("") || keys.trim().equals("")){ throw new RuntimeException("Invalid Scale file format."); } scales.add(new ScaleInfo(name,keys)); } } } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeAlternativeRepeat.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeAlternat0000644000175000017500000000527111273045225033455 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGMeasure; public class UndoableChangeAlternativeRepeat implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private long position; private int undoRepeatAlternative; private int redoRepeatAlternative; private UndoableChangeAlternativeRepeat(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.changeAlternativeRepeat(this.position,this.redoRepeatAlternative); TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.changeAlternativeRepeat(this.position,this.undoRepeatAlternative); TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeAlternativeRepeat startUndo(){ UndoableChangeAlternativeRepeat undoable = new UndoableChangeAlternativeRepeat(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.position = caret.getPosition(); undoable.undoRepeatAlternative = caret.getMeasure().getHeader().getRepeatAlternative(); return undoable; } public UndoableChangeAlternativeRepeat endUndo(int redoRepeatAlternative){ this.redoCaret = new UndoableCaretHelper(); this.redoRepeatAlternative = redoRepeatAlternative; return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeClef.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeClef.jav0000644000175000017500000000664011273045225033334 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableChangeClef implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private long position; private int redoableClef; private int undoableClef; private List nextClefPositions; private boolean toEnd; private TGTrack track; private UndoableChangeClef(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,this.position,this.redoableClef,this.toEnd); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,this.position,this.undoableClef,this.toEnd); if(this.toEnd){ Iterator it = this.nextClefPositions.iterator(); while(it.hasNext()){ ClefPosition ksp = (ClefPosition)it.next(); TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,ksp.getPosition(),ksp.getClef(),true); } } TuxGuitar.instance().fireUpdate(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeClef startUndo(){ UndoableChangeClef undoable = new UndoableChangeClef(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.position = caret.getPosition(); undoable.undoableClef = caret.getMeasure().getClef(); undoable.track = caret.getTrack(); undoable.nextClefPositions = new ArrayList(); int prevClef = undoable.undoableClef; Iterator it = caret.getTrack().getMeasures(); while(it.hasNext()){ TGMeasureImpl measure = (TGMeasureImpl)it.next(); if(measure.getStart() > undoable.position){ int currClef = measure.getClef(); if(prevClef != currClef){ ClefPosition tsp = undoable.new ClefPosition(measure.getStart(),currClef); undoable.nextClefPositions.add(tsp); } prevClef = currClef; } } return undoable; } public UndoableChangeClef endUndo(int clef,boolean toEnd){ this.redoCaret = new UndoableCaretHelper(); this.redoableClef = clef; this.toEnd = toEnd; return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } private class ClefPosition{ private long position; private int clef; public ClefPosition(long position,int clef) { this.position = position; this.clef = clef; } public long getPosition() { return this.position; } public int getClef() { return this.clef; } } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeCloseRepeat.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeCloseRep0000644000175000017500000000530711273045225033417 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGMeasure; public class UndoableChangeCloseRepeat implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private long position; private int undoRepeatClose; private int redoRepeatClose; private UndoableChangeCloseRepeat(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.changeCloseRepeat(this.position,this.redoRepeatClose); TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.changeCloseRepeat(this.position,this.undoRepeatClose); TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeCloseRepeat startUndo(){ Caret caret = getCaret(); return startUndo(caret.getPosition(),caret.getMeasure().getRepeatClose()); } public static UndoableChangeCloseRepeat startUndo(long position,int repeatClose){ UndoableChangeCloseRepeat undoable = new UndoableChangeCloseRepeat(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.position = position; undoable.undoRepeatClose = repeatClose; return undoable; } public UndoableChangeCloseRepeat endUndo(int redoRepeatClose){ this.redoCaret = new UndoableCaretHelper(); this.redoRepeatClose = redoRepeatClose; return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeInfo.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeInfo.jav0000644000175000017500000000630211273045225033351 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGSong; public class UndoableChangeInfo implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private String undoName; private String undoArtist; private String undoAlbum; private String undoAuthor; private String undoDate; private String undoCopyright; private String undoWriter; private String undoTranscriber; private String undoComments; private String redoName; private String redoArtist; private String redoAlbum; private String redoAuthor; private String redoDate; private String redoCopyright; private String redoWriter; private String redoTranscriber; private String redoComments; private UndoableChangeInfo(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().setProperties(this.redoName,this.redoArtist,this.redoAlbum,this.redoAuthor,this.redoDate,this.redoCopyright,this.redoWriter,this.redoTranscriber,this.redoComments); TuxGuitar.instance().showTitle(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().setProperties(this.undoName,this.undoArtist,this.undoAlbum,this.undoAuthor,this.undoDate,this.undoCopyright,this.undoWriter,this.undoTranscriber,this.undoComments); TuxGuitar.instance().showTitle(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeInfo startUndo(){ TGSong song = TuxGuitar.instance().getSongManager().getSong(); UndoableChangeInfo undoable = new UndoableChangeInfo(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.undoName = song.getName(); undoable.undoArtist = song.getArtist(); undoable.undoAlbum = song.getAlbum(); undoable.undoAuthor = song.getAuthor(); undoable.undoDate = song.getDate(); undoable.undoCopyright = song.getCopyright(); undoable.undoWriter = song.getWriter(); undoable.undoTranscriber = song.getTranscriber(); undoable.undoComments = song.getComments(); return undoable; } public UndoableChangeInfo endUndo(){ TGSong song = TuxGuitar.instance().getSongManager().getSong(); this.redoCaret = new UndoableCaretHelper(); this.redoName = song.getName(); this.redoArtist = song.getArtist(); this.redoAlbum = song.getAlbum(); this.redoAuthor = song.getAuthor(); this.redoDate = song.getDate(); this.redoCopyright = song.getCopyright(); this.redoWriter = song.getWriter(); this.redoTranscriber = song.getTranscriber(); this.redoComments = song.getComments(); return this; } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeKeySignature.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeKeySigna0000644000175000017500000000740011273045225033411 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableChangeKeySignature implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private long position; private int redoableKeySignature; private int undoableKeySignature; private List nextKeySignaturePositions; private boolean toEnd; private TGTrack track; private UndoableChangeKeySignature(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,this.position,this.redoableKeySignature,this.toEnd); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,this.position,this.undoableKeySignature,this.toEnd); if(this.toEnd){ Iterator it = this.nextKeySignaturePositions.iterator(); while(it.hasNext()){ KeySignaturePosition ksp = (KeySignaturePosition)it.next(); TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,ksp.getPosition(),ksp.getKeySignature(),true); } } TuxGuitar.instance().fireUpdate(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeKeySignature startUndo(){ UndoableChangeKeySignature undoable = new UndoableChangeKeySignature(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.position = caret.getPosition(); undoable.undoableKeySignature = caret.getMeasure().getKeySignature(); undoable.track = caret.getTrack(); undoable.nextKeySignaturePositions = new ArrayList(); int prevKeySignature = undoable.undoableKeySignature; Iterator it = caret.getTrack().getMeasures(); while(it.hasNext()){ TGMeasureImpl measure = (TGMeasureImpl)it.next(); if(measure.getStart() > undoable.position){ int currKeySignature = measure.getKeySignature(); if(prevKeySignature != currKeySignature){ KeySignaturePosition tsp = undoable.new KeySignaturePosition(measure.getStart(),currKeySignature); undoable.nextKeySignaturePositions.add(tsp); } prevKeySignature = currKeySignature; } } return undoable; } public UndoableChangeKeySignature endUndo(int keySignature,boolean toEnd){ this.redoCaret = new UndoableCaretHelper(); this.redoableKeySignature = keySignature; this.toEnd = toEnd; return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } private class KeySignaturePosition{ private long position; private int keySignature; public KeySignaturePosition(long position,int keySignature) { this.position = position; this.keySignature = keySignature; } public long getPosition() { return this.position; } public int getKeySignature() { return this.keySignature; } } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeMarker.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeMarker.j0000644000175000017500000000506311273045225033353 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.marker.MarkerList; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGMarker; public class UndoableChangeMarker implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGMarker undoMarker; private TGMarker redoMarker; private UndoableChangeMarker(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } if(this.redoMarker != null){ TuxGuitar.instance().getSongManager().updateMarker(this.redoMarker.clone(TuxGuitar.instance().getSongManager().getFactory())); MarkerList.instance().update(true); }else if(this.undoMarker != null){ TuxGuitar.instance().getSongManager().removeMarker(this.undoMarker.clone(TuxGuitar.instance().getSongManager().getFactory())); MarkerList.instance().update(false); } this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } if(this.undoMarker != null){ TuxGuitar.instance().getSongManager().updateMarker(this.undoMarker.clone(TuxGuitar.instance().getSongManager().getFactory())); MarkerList.instance().update(true); }else if(this.redoMarker != null){ TuxGuitar.instance().getSongManager().removeMarker(this.redoMarker.clone(TuxGuitar.instance().getSongManager().getFactory())); MarkerList.instance().update(false); } this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeMarker startUndo(TGMarker marker){ UndoableChangeMarker undoable = new UndoableChangeMarker(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.undoMarker = (marker == null)?null:(TGMarker)marker.clone(TuxGuitar.instance().getSongManager().getFactory()); return undoable; } public UndoableChangeMarker endUndo(TGMarker marker){ this.redoCaret = new UndoableCaretHelper(); this.redoMarker = (marker == null)?null:(TGMarker)marker.clone(TuxGuitar.instance().getSongManager().getFactory()); return this; } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeOpenRepeat.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeOpenRepe0000644000175000017500000000453211273045225033417 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGMeasure; public class UndoableChangeOpenRepeat implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private long position; private UndoableChangeOpenRepeat(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.changeOpenRepeat(this.position); TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.changeOpenRepeat(this.position); TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeOpenRepeat startUndo(){ UndoableChangeOpenRepeat undoable = new UndoableChangeOpenRepeat(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.position = caret.getPosition(); return undoable; } public UndoableChangeOpenRepeat endUndo(){ this.redoCaret = new UndoableCaretHelper(); return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTempo.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTempo.ja0000644000175000017500000000507611273045225033363 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGTempo; public class UndoableChangeTempo implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private List undoableTempos; private List redoableTempos; private UndoableChangeTempo(){ super(); this.undoableTempos = new ArrayList(); this.redoableTempos = new ArrayList(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } this.setTempos(this.redoableTempos); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } this.setTempos(this.undoableTempos); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeTempo startUndo(){ UndoableChangeTempo undoable = new UndoableChangeTempo(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.getTempos(undoable.undoableTempos); return undoable; } public UndoableChangeTempo endUndo(){ this.redoCaret = new UndoableCaretHelper(); this.getTempos(this.redoableTempos); return this; } private void getTempos(List list){ Iterator it = TuxGuitar.instance().getSongManager().getSong().getMeasureHeaders(); while(it.hasNext()){ TGMeasureHeader header = (TGMeasureHeader)it.next(); list.add(header.getTempo().clone(TuxGuitar.instance().getSongManager().getFactory())); } } private void setTempos(List tempos){ int length = tempos.size(); if(length != TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders()){ return; } for(int i =0; i < length; i ++){ TGTempo tempo = ((TGTempo)tempos.get(i)).clone(TuxGuitar.instance().getSongManager().getFactory()); TuxGuitar.instance().getSongManager().changeTempo(TuxGuitar.instance().getSongManager().getMeasureHeader(i + 1),tempo); } TuxGuitar.instance().fireUpdate(); } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTimeSignature.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTimeSign0000644000175000017500000000455411273045225033425 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGTimeSignature; public class UndoableChangeTimeSignature implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGSong song; private long tsStart; private boolean tsToEnd; private TGTimeSignature ts; private UndoableChangeTimeSignature(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().changeTimeSignature(this.tsStart,this.ts,this.tsToEnd); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGFactory factory = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getFactory(); TGSong song = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong(); this.song.copy(factory, song); TuxGuitar.instance().fireUpdate(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeTimeSignature startUndo(){ TGFactory factory = new TGFactory(); TGSong song = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong(); UndoableChangeTimeSignature undoable = new UndoableChangeTimeSignature(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.song = song.clone(factory); return undoable; } public UndoableChangeTimeSignature endUndo(TGTimeSignature timeSignature,long start, boolean toEnd){ this.ts = timeSignature; this.tsStart = start; this.tsToEnd = toEnd; this.redoCaret = new UndoableCaretHelper(); return this; } } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTripletFeel.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTripletF0000644000175000017500000000705611273045225033437 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.custom; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; public class UndoableChangeTripletFeel implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private long position; private int redoableTripletFeel; private int undoableTripletFeel; private List nextTripletFeelPositions; private boolean toEnd; private UndoableChangeTripletFeel(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().changeTripletFeel(this.position,this.redoableTripletFeel,this.toEnd); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().changeTripletFeel(this.position,this.undoableTripletFeel,this.toEnd); if(this.toEnd){ Iterator it = this.nextTripletFeelPositions.iterator(); while(it.hasNext()){ TripletFeelPosition tfp = (TripletFeelPosition)it.next(); TuxGuitar.instance().getSongManager().changeTripletFeel(tfp.getPosition(),tfp.getTripletFeel(),true); } } TuxGuitar.instance().fireUpdate(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableChangeTripletFeel startUndo(){ UndoableChangeTripletFeel undoable = new UndoableChangeTripletFeel(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.position = caret.getPosition(); undoable.undoableTripletFeel = caret.getMeasure().getTripletFeel(); undoable.nextTripletFeelPositions = new ArrayList(); int prevTripletFeel = undoable.undoableTripletFeel; Iterator it = TuxGuitar.instance().getSongManager().getFirstTrack().getMeasures(); while(it.hasNext()){ TGMeasureImpl measure = (TGMeasureImpl)it.next(); if(measure.getStart() > undoable.position){ int currTripletFeel = measure.getTripletFeel(); if(prevTripletFeel != currTripletFeel){ TripletFeelPosition tfp = undoable.new TripletFeelPosition(measure.getStart(),currTripletFeel); undoable.nextTripletFeelPositions.add(tfp); } prevTripletFeel = currTripletFeel; } } return undoable; } public UndoableChangeTripletFeel endUndo(int tripletFeel,boolean toEnd){ this.redoCaret = new UndoableCaretHelper(); this.redoableTripletFeel = tripletFeel; this.toEnd = toEnd; return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } private class TripletFeelPosition{ private long position; private int tripletFeel; public TripletFeelPosition(long position,int tripletFeel) { this.position = position; this.tripletFeel = tripletFeel; } public long getPosition() { return this.position; } public int getTripletFeel() { return this.tripletFeel; } } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableAddMeasure.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableAddMeasure.ja0000644000175000017500000000312711273045225033325 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.measure; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; public class UndoableAddMeasure implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private int number; private UndoableAddMeasure(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().addNewMeasure(this.number); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().removeMeasure(this.number); TuxGuitar.instance().fireUpdate(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableAddMeasure startUndo(int number){ UndoableAddMeasure undoable = new UndoableAddMeasure(); undoable.undoCaret = new UndoableCaretHelper(); undoable.doAction = UNDO_ACTION; undoable.number = number; return undoable; } public UndoableAddMeasure endUndo(){ this.redoCaret = new UndoableCaretHelper(); return this; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableInsertMeasure.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableInsertMeasure0000644000175000017500000000454611273045225033516 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.measure; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.helpers.TGSongSegment; import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper; public class UndoableInsertMeasure implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGSongSegment tracksMeasures; private long insertPosition; private int toTrack; private int copyCount; private int fromNumber; private long theMove; public UndoableInsertMeasure(int toTrack){ Caret caret = getCaret(); this.doAction = UNDO_ACTION; this.toTrack = toTrack; this.undoCaret = new UndoableCaretHelper(); this.insertPosition = caret.getPosition(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongSegmentHelper helper = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()); helper.insertMeasures(this.tracksMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.fromNumber,this.theMove,this.toTrack); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } for(int i = 0;i < this.copyCount;i ++){ TuxGuitar.instance().getSongManager().removeMeasure(this.insertPosition); } TuxGuitar.instance().fireUpdate(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public UndoableInsertMeasure endUndo(TGSongSegment tracksMeasures,int copyCount,int fromNumber,long theMove){ this.redoCaret = new UndoableCaretHelper(); this.copyCount = copyCount; this.tracksMeasures = tracksMeasures; this.fromNumber = fromNumber; this.theMove = theMove; return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableMeasureGeneric.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableMeasureGeneri0000644000175000017500000000733311273045225033460 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.measure; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGMeasure; import org.herac.tuxguitar.song.models.TGMeasureHeader; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableMeasureGeneric implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGMeasure undoMeasure; private TGMeasure redoMeasure; private UndoableMeasureGeneric(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } this.replace(this.redoMeasure); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } this.replace(this.undoMeasure); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } private void replace(TGMeasure replace){ TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber); if(track != null && replace != null){ TGMeasureHeader header = TuxGuitar.instance().getSongManager().getMeasureHeader(replace.getNumber()); TGMeasure measure = replace.clone(TuxGuitar.instance().getSongManager().getFactory(),header); measure = TuxGuitar.instance().getSongManager().getTrackManager().replaceMeasure(track,measure); TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber()); } } public static UndoableMeasureGeneric startUndo( TGMeasure measure ){ UndoableMeasureGeneric undoable = new UndoableMeasureGeneric(); undoable.doAction = UNDO_ACTION; undoable.trackNumber = measure.getTrack().getNumber(); undoable.undoCaret = new UndoableCaretHelper(); undoable.undoMeasure = measure.clone(TuxGuitar.instance().getSongManager().getFactory(),measure.getHeader().clone(TuxGuitar.instance().getSongManager().getFactory())); return undoable; } public UndoableMeasureGeneric endUndo( TGMeasure measure ){ this.redoCaret = new UndoableCaretHelper(); this.redoMeasure = measure.clone(TuxGuitar.instance().getSongManager().getFactory(),measure.getHeader().clone(TuxGuitar.instance().getSongManager().getFactory())); return this; } public static UndoableMeasureGeneric startUndo(){ /* UndoableMeasureGeneric undoable = new UndoableMeasureGeneric(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.trackNumber = caret.getTrack().getNumber(); undoable.undoCaret = new UndoableCaretHelper(); undoable.undoMeasure = caret.getMeasure().clone(TuxGuitar.instance().getSongManager().getFactory(),caret.getMeasure().getHeader().clone(TuxGuitar.instance().getSongManager().getFactory())); return undoable; */ return startUndo( getCaret().getMeasure() ); } public UndoableMeasureGeneric endUndo(){ /* Caret caret = getCaret(); this.redoCaret = new UndoableCaretHelper(); this.redoMeasure = caret.getMeasure().clone(TuxGuitar.instance().getSongManager().getFactory(),caret.getMeasure().getHeader().clone(TuxGuitar.instance().getSongManager().getFactory())); return this; */ return endUndo( getCaret().getMeasure() ); } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableRemoveMeasure.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableRemoveMeasure0000644000175000017500000000532411273045225033502 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.measure; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.helpers.TGSongSegment; import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper; import org.herac.tuxguitar.song.models.TGMarker; public class UndoableRemoveMeasure implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGSongSegment tracksMeasures; private UndoMarkers undoMarkers; private int n1; private int n2; public UndoableRemoveMeasure(int n1,int n2){ this.doAction = UNDO_ACTION; this.undoCaret = new UndoableCaretHelper(); this.n1 = n1; this.n2 = n2; this.tracksMeasures = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(n1,n2); this.undoMarkers = new UndoMarkers(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().removeMeasureHeaders(this.n1,this.n2); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).insertMeasures(this.tracksMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.n1,0,0); TuxGuitar.instance().fireUpdate(); this.undoMarkers.undo(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public UndoableRemoveMeasure endUndo(){ this.redoCaret = new UndoableCaretHelper(); return this; } private class UndoMarkers{ private List markers; public UndoMarkers(){ this.markers = new ArrayList(); Iterator it = TuxGuitar.instance().getSongManager().getMarkers().iterator(); while(it.hasNext()){ this.markers.add(((TGMarker)it.next()).clone(TuxGuitar.instance().getSongManager().getFactory())); } } public void undo(){ TuxGuitar.instance().getSongManager().removeAllMarkers(); Iterator it = this.markers.iterator(); while(it.hasNext()){ TGMarker marker = (TGMarker)it.next(); TuxGuitar.instance().getSongManager().updateMarker(marker.clone(TuxGuitar.instance().getSongManager().getFactory())); } } } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableReplaceMeasures.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableReplaceMeasur0000644000175000017500000000654111273045225033455 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.measure; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.helpers.TGSongSegment; import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper; import org.herac.tuxguitar.song.models.TGMarker; public class UndoableReplaceMeasures implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private UndoMarkers undoMarkers; private TGSongSegment undoTrackMeasures; private TGSongSegment redoTrackMeasures; private int toTrack; private int count; private int freeSpace; private long theMove; public UndoableReplaceMeasures(int p1,int p2,int toTrack){ this.doAction = UNDO_ACTION; this.toTrack = toTrack; this.undoCaret = new UndoableCaretHelper(); this.undoMarkers = new UndoMarkers(); this.undoTrackMeasures = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } for(int i = this.freeSpace;i < this.count;i ++){ TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd(); } new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.redoTrackMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.theMove,this.toTrack); TuxGuitar.instance().fireUpdate(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } for(int i = this.freeSpace;i < this.count;i ++){ TuxGuitar.instance().getSongManager().removeLastMeasure(); } new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.undoTrackMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),0,0); TuxGuitar.instance().fireUpdate(); this.undoMarkers.undo(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public UndoableReplaceMeasures endUndo(TGSongSegment tracksMeasures,int count,int freeSpace,long theMove){ this.redoCaret = new UndoableCaretHelper(); this.redoTrackMeasures = tracksMeasures; this.count = count; this.freeSpace = freeSpace; this.theMove = theMove; return this; } private class UndoMarkers{ private List markers; public UndoMarkers(){ this.markers = new ArrayList(); Iterator it = TuxGuitar.instance().getSongManager().getMarkers().iterator(); while(it.hasNext()){ this.markers.add(((TGMarker)it.next()).clone(TuxGuitar.instance().getSongManager().getFactory())); } } public void undo(){ TuxGuitar.instance().getSongManager().removeAllMarkers(); Iterator it = this.markers.iterator(); while(it.hasNext()){ TGMarker marker = (TGMarker)it.next(); TuxGuitar.instance().getSongManager().updateMarker(marker.clone(TuxGuitar.instance().getSongManager().getFactory())); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableAddTrack.java0000644000175000017500000000370211273045225032761 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableAddTrack implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGTrack redoableTrack; private UndoableAddTrack(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().addTrack(cloneTrack(this.redoableTrack)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().removeTrack(cloneTrack(this.redoableTrack)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableAddTrack startUndo(){ UndoableAddTrack undoable = new UndoableAddTrack(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); return undoable; } public UndoableAddTrack endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.redoableTrack = cloneTrack(track); return this; } private static TGTrack cloneTrack(TGTrack track){ return track.clone(TuxGuitar.instance().getSongManager().getFactory(), TuxGuitar.instance().getSongManager().getSong()); } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableCloneTrack.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableCloneTrack.java0000644000175000017500000000374211273045225033335 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; public class UndoableCloneTrack implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private UndoableCloneTrack(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().cloneTrack(TuxGuitar.instance().getSongManager().getTrack(this.trackNumber)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().removeTrack(TuxGuitar.instance().getSongManager().getLastTrack()); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableCloneTrack startUndo(){ UndoableCloneTrack undoable = new UndoableCloneTrack(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.trackNumber = caret.getTrack().getNumber(); return undoable; } public UndoableCloneTrack endUndo(){ this.redoCaret = new UndoableCaretHelper(); return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackDown.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackDown.j0000644000175000017500000000366311273045225033345 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableMoveTrackDown implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private UndoableMoveTrackDown(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.moveTrackDown(manager.getTrack(this.trackNumber - 1)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.moveTrackUp(manager.getTrack(this.trackNumber)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableMoveTrackDown startUndo(){ UndoableMoveTrackDown undoable = new UndoableMoveTrackDown(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); return undoable; } public UndoableMoveTrackDown endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.trackNumber = track.getNumber(); return this; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackUp.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackUp.jav0000644000175000017500000000364511273045225033351 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableMoveTrackUp implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private UndoableMoveTrackUp(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.moveTrackUp(manager.getTrack(this.trackNumber + 1)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.moveTrackDown(manager.getTrack(this.trackNumber)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableMoveTrackUp startUndo(){ UndoableMoveTrackUp undoable = new UndoableMoveTrackUp(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); return undoable; } public UndoableMoveTrackUp endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.trackNumber = track.getNumber(); return this; } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableRemoveTrack.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableRemoveTrack.jav0000644000175000017500000000422711273045225033370 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.editors.tab.Caret; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableRemoveTrack implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGTrack undoableTrack; private UndoableRemoveTrack(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TuxGuitar.instance().getSongManager().removeTrack(cloneTrack(this.undoableTrack)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TuxGuitar.instance().getSongManager().addTrack(cloneTrack(this.undoableTrack)); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableRemoveTrack startUndo(){ UndoableRemoveTrack undoable = new UndoableRemoveTrack(); Caret caret = getCaret(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.undoableTrack = cloneTrack(caret.getTrack()); return undoable; } public UndoableRemoveTrack endUndo(){ this.redoCaret = new UndoableCaretHelper(); return this; } private static Caret getCaret(){ return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret(); } private static TGTrack cloneTrack(TGTrack track){ return track.clone(TuxGuitar.instance().getSongManager().getFactory(), TuxGuitar.instance().getSongManager().getSong()); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackChannel.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackChannel.ja0000644000175000017500000000655511273045225033323 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import java.util.ArrayList; import java.util.List; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.factory.TGFactory; import org.herac.tuxguitar.song.models.TGChannel; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableTrackChannel implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private List undoChannels; private List redoChannels; private UndoableTrackChannel(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSong song = TuxGuitar.instance().getSongManager().getSong(); for( int i = 0; i < this.redoChannels.size(); i ++){ TGChannel channel = (TGChannel)this.redoChannels.get(i); TGTrack track = song.getTrack(i); channel.copy( track.getChannel() ); } TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSong song = TuxGuitar.instance().getSongManager().getSong(); for( int i = 0; i < this.undoChannels.size(); i ++){ TGChannel channel = (TGChannel)this.undoChannels.get(i); TGTrack track = song.getTrack(i); channel.copy( track.getChannel() ); } TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableTrackChannel startUndo(){ TGSong song = TuxGuitar.instance().getSongManager().getSong(); TGFactory factory = TuxGuitar.instance().getSongManager().getFactory(); int tracks = song.countTracks(); UndoableTrackChannel undoable = new UndoableTrackChannel(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.undoChannels = new ArrayList(); for( int i = 0; i < tracks; i ++){ TGTrack track = song.getTrack(i); undoable.undoChannels.add( track.getChannel().clone(factory) ); } return undoable; } public UndoableTrackChannel endUndo(){ TGSong song = TuxGuitar.instance().getSongManager().getSong(); TGFactory factory = TuxGuitar.instance().getSongManager().getFactory(); int tracks = song.countTracks(); this.redoCaret = new UndoableCaretHelper(); this.redoChannels = new ArrayList(); for( int i = 0; i < tracks; i ++){ TGTrack track = song.getTrack(i); this.redoChannels.add( track.getChannel().clone(factory) ); } return this; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackGeneric.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackGeneric.ja0000644000175000017500000000640111273045225033315 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableTrackGeneric implements UndoableEdit{ private int doAction; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private UndoTrack undoTrack; private RedoTrack redoTrack; private UndoableTrackGeneric(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } this.redoTrack.redo(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } this.undoTrack.undo(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableTrackGeneric startUndo(TGTrack track){ UndoableTrackGeneric undoable = new UndoableTrackGeneric(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.undoTrack = undoable.new UndoTrack(track); return undoable; } public UndoableTrackGeneric endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.redoTrack = new RedoTrack(track); return this; } private class UndoTrack{ private TGTrack track; public UndoTrack(TGTrack track){ if(track != null){ this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong()); } } public void undo(){ if(this.track != null){ while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() < this.track.countMeasures() ){ TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd(); } while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() > this.track.countMeasures() ){ TuxGuitar.instance().getSongManager().removeLastMeasureHeader(); } TuxGuitar.instance().getSongManager().replaceTrack(this.track); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); } } } private class RedoTrack{ private TGTrack track; public RedoTrack(TGTrack track){ if(track != null){ this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong()); } } public void redo(){ if(this.track != null){ while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() < this.track.countMeasures() ){ TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd(); } while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() > this.track.countMeasures() ){ TuxGuitar.instance().getSongManager().removeLastMeasureHeader(); } TuxGuitar.instance().getSongManager().replaceTrack(this.track); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); } } } } tuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInfo.java0000644000175000017500000000520711273045225033166 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGColor; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableTrackInfo implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private String undoName; private String redoName; private TGColor undoColor; private TGColor redoColor; private int undoOffset; private int redoOffset; private UndoableTrackInfo(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getTrackManager().changeInfo(manager.getTrack(this.trackNumber),this.redoName,this.redoColor.clone(manager.getFactory()),this.redoOffset); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getTrackManager().changeInfo(manager.getTrack(this.trackNumber),this.undoName,this.undoColor.clone(manager.getFactory()),this.undoOffset); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().update(); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableTrackInfo startUndo(TGTrack track){ UndoableTrackInfo undoable = new UndoableTrackInfo(); undoable.doAction = UNDO_ACTION; undoable.trackNumber = track.getNumber(); undoable.undoCaret = new UndoableCaretHelper(); undoable.undoName = track.getName(); undoable.undoColor = track.getColor().clone(TuxGuitar.instance().getSongManager().getFactory()); undoable.undoOffset = track.getOffset(); return undoable; } public UndoableTrackInfo endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.redoName = track.getName(); this.redoColor = track.getColor().clone(TuxGuitar.instance().getSongManager().getFactory()); this.redoOffset = track.getOffset(); return this; } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInstrument.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInstrument0000644000175000017500000000523311273045225033522 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableTrackInstrument implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private short undoInstrument; private short redoInstrument; private boolean undoPercussion; private boolean redoPercussion; private UndoableTrackInstrument(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getTrackManager().changeInstrument(manager.getTrack(this.trackNumber),this.redoInstrument,this.redoPercussion); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().updateValues(); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updatePrograms(); } this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); manager.getTrackManager().changeInstrument(manager.getTrack(this.trackNumber),this.undoInstrument,this.undoPercussion); TuxGuitar.instance().fireUpdate(); TuxGuitar.instance().getMixer().updateValues(); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updatePrograms(); } this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableTrackInstrument startUndo(TGTrack track){ UndoableTrackInstrument undoable = new UndoableTrackInstrument(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.trackNumber = track.getNumber(); undoable.undoInstrument = track.getChannel().getInstrument(); undoable.undoPercussion = track.isPercussionTrack(); return undoable; } public UndoableTrackInstrument endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.redoInstrument = track.getChannel().getInstrument(); this.redoPercussion = track.isPercussionTrack(); return this; } } ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackLyric.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackLyric.java0000644000175000017500000000512511273045225033354 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.models.TGLyric; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableTrackLyric implements UndoableEdit{ private int doAction; private int trackNumber; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private TGLyric undoLyric; private TGLyric redoLyric; private int undoCaretPosition; private int redoCaretPosition; private UndoableTrackLyric(){ this.undoLyric = TuxGuitar.instance().getSongManager().getFactory().newLyric(); this.redoLyric = TuxGuitar.instance().getSongManager().getFactory().newLyric(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber); this.redoLyric.copy(track.getLyrics()); TuxGuitar.instance().getLyricEditor().setCaretPosition(this.redoCaretPosition); TuxGuitar.instance().getLyricEditor().update(); TuxGuitar.instance().updateCache(false); this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber); this.undoLyric.copy(track.getLyrics()); TuxGuitar.instance().getLyricEditor().setCaretPosition(this.undoCaretPosition); TuxGuitar.instance().getLyricEditor().update(); TuxGuitar.instance().updateCache(false); this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableTrackLyric startUndo(TGTrack track,int undoCaretPosition){ UndoableTrackLyric undoable = new UndoableTrackLyric(); undoable.doAction = UNDO_ACTION; undoable.trackNumber = track.getNumber(); undoable.undoCaret = new UndoableCaretHelper(); undoable.undoCaretPosition = undoCaretPosition; track.getLyrics().copy( undoable.undoLyric ); return undoable; } public UndoableTrackLyric endUndo(TGTrack track,int redoCaretPosition){ this.redoCaret = new UndoableCaretHelper(); this.redoCaretPosition = redoCaretPosition; track.getLyrics().copy( this.redoLyric ); return this; } } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackSoloMute.javatuxguitar-src-1.2/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackSoloMute.j0000644000175000017500000000547411273045225033360 0ustar julianjulianpackage org.herac.tuxguitar.gui.undo.undoables.track; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.undo.CannotRedoException; import org.herac.tuxguitar.gui.undo.CannotUndoException; import org.herac.tuxguitar.gui.undo.UndoableEdit; import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper; import org.herac.tuxguitar.song.managers.TGSongManager; import org.herac.tuxguitar.song.models.TGTrack; public class UndoableTrackSoloMute implements UndoableEdit{ private int doAction; private int track; private UndoableCaretHelper undoCaret; private UndoableCaretHelper redoCaret; private boolean undoSolo; private boolean undoMute; private boolean redoSolo; private boolean redoMute; private UndoableTrackSoloMute(){ super(); } public void redo() throws CannotRedoException { if(!canRedo()){ throw new CannotRedoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); TGTrack track = manager.getTrack( this.track ); if( track != null ){ manager.getTrackManager().changeSolo(track, this.redoSolo ); manager.getTrackManager().changeMute(track, this.redoMute ); } TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } this.redoCaret.update(); this.doAction = UNDO_ACTION; } public void undo() throws CannotUndoException { if(!canUndo()){ throw new CannotUndoException(); } TGSongManager manager = TuxGuitar.instance().getSongManager(); TGTrack track = manager.getTrack( this.track ); if( track != null ){ manager.getTrackManager().changeSolo(track, this.undoSolo ); manager.getTrackManager().changeMute(track, this.undoMute ); } TuxGuitar.instance().getMixer().updateValues(); TuxGuitar.instance().getTable().fireUpdate(false); TuxGuitar.instance().updateCache(true); if (TuxGuitar.instance().getPlayer().isRunning()) { TuxGuitar.instance().getPlayer().updateControllers(); } this.undoCaret.update(); this.doAction = REDO_ACTION; } public boolean canRedo() { return (this.doAction == REDO_ACTION); } public boolean canUndo() { return (this.doAction == UNDO_ACTION); } public static UndoableTrackSoloMute startUndo(TGTrack track){ UndoableTrackSoloMute undoable = new UndoableTrackSoloMute(); undoable.doAction = UNDO_ACTION; undoable.undoCaret = new UndoableCaretHelper(); undoable.track = track.getNumber(); undoable.undoSolo = track.isSolo(); undoable.undoMute = track.isMute(); return undoable; } public UndoableTrackSoloMute endUndo(TGTrack track){ this.redoCaret = new UndoableCaretHelper(); this.redoSolo = track.isSolo(); this.redoMute = track.isMute(); return this; } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/JNILibraryLoader.javatuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/JNILibraryLoader.ja0000644000175000017500000000250611273045350033260 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.herac.tuxguitar.util.TGClassLoader; public class JNILibraryLoader { private static final String JNI_EXTENSION = ".jnilib"; private static final String JNI_TMP_PATH = (System.getProperty( "java.io.tmpdir" ) + File.separator); public static void loadLibrary(String libname){ if(!JNILibraryLoader.loadFromClassPath(libname + JNI_EXTENSION)){ System.loadLibrary(libname); } } private static boolean loadFromClassPath(String filename){ File file = new File(JNI_TMP_PATH + filename); try{ if(!file.exists()){ InputStream inputStream = TGClassLoader.instance().getClassLoader().getResourceAsStream(filename); if (inputStream != null) { OutputStream outputStream = new FileOutputStream(file); int read; byte [] buffer = new byte [4096]; while ((read = inputStream.read (buffer)) != -1) { outputStream.write(buffer, 0, read); } outputStream.close(); inputStream.close(); } } if(file.exists()){ System.load(file.getAbsolutePath()); return true; } }catch(Throwable throwable){ return false; }finally{ if(file.exists()){ file.delete(); } } return false; } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProviderPlugin.javatuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProvi0000644000175000017500000000200511273045350033555 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup; import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin implements TGPluginSetup{ private MidiOutputPortProviderImpl portReader; protected MidiOutputPortProvider getProvider() { if(this.portReader == null){ this.portReader = new MidiOutputPortProviderImpl(); } return this.portReader; } public String getAuthor() { return "Julian Casadesus "; } public String getDescription() { return "OSS output plugin"; } public String getName() { return "OSS output plugin"; } public String getVersion() { return "1.0"; } public void setupDialog(Shell parent) { MidiConfigUtils.setupDialog(parent,(MidiOutputPortProviderImpl)getProvider()); } } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiConfigUtils.javatuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiConfigUtils.jav0000644000175000017500000000725211273045350033406 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; public class MidiConfigUtils { public static final String DEVICE_KEY = "oss.device"; public static final String DEVICE_DEFAULT = "/dev/sequencer"; public static TGConfigManager getConfig(){ TGConfigManager config = new TGPluginConfigManager("tuxguitar-oss"); config.init(); return config; } public static String getDevice(){ return getDevice(getConfig()); } public static String getDevice(final TGConfigManager config){ return config.getStringConfigValue(DEVICE_KEY,DEVICE_DEFAULT); } public static void setupDialog(Shell parent,final MidiOutputPortProviderImpl provider) { setupDialog(parent,provider,getConfig()); } public static void setupDialog(Shell parent,final MidiOutputPortProviderImpl provider,final TGConfigManager config) { final String device = getDevice(config); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText("Configuration"); //------------------DEVICE----------------------- Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2,false)); group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); group.setText("Device Configuration"); final Label deviceLabel = new Label(group,SWT.LEFT); deviceLabel.setText("Device:"); final Text deviceValue = new Text(group,SWT.BORDER); deviceValue.setLayoutData(new GridData(250,SWT.DEFAULT)); deviceValue.setText( (device == null ? new String() : device) ); //------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2,false)); buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true)); GridData data = new GridData(SWT.FILL,SWT.FILL,true,true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { String selection = deviceValue.getText(); String value1 = (device == null ? new String() : device); String value2 = (selection == null ? new String() : selection); if(!value1.equals(value2)){ if(selection != null){ config.setProperty(DEVICE_KEY,selection); }else{ config.removeProperty(DEVICE_KEY); } config.save(); provider.updateDevice(selection); } dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton( buttonOK ); DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiReceiverImpl.javatuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiReceiverImpl.ja0000644000175000017500000000324611273045350033357 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import org.herac.tuxguitar.player.base.MidiControllers; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiReceiverImpl implements MidiReceiver{ private boolean connected; private MidiOutputPortImpl midiPort; private MidiSystem midiSystem; public MidiReceiverImpl(MidiOutputPortImpl midiPort, MidiSystem midiSystem){ this.midiPort = midiPort; this.midiSystem = midiSystem; this.connected = false; } public boolean isConnected(){ return this.connected; } public void connect(){ if(!isConnected()){ this.midiSystem.openPort(this.midiPort); this.connected = true; } } public void disconnect() { if(isConnected()){ this.midiSystem.closePort(); this.connected = false; } } public void sendAllNotesOff() { for(int i = 0; i < 16; i ++){ sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0); } } public void sendControlChange(int channel, int controller, int value) { if(isConnected()){ this.midiSystem.controlChange(channel, controller, value); } } public void sendNoteOff(int channel, int key, int velocity) { if(isConnected()){ this.midiSystem.noteOff(channel, key, velocity); } } public void sendNoteOn(int channel, int key, int velocity) { if(isConnected()){ this.midiSystem.noteOn(channel, key, velocity); } } public void sendPitchBend(int channel, int value) { if(isConnected()){ this.midiSystem.pitchBend(channel, value); } } public void sendProgramChange(int channel, int value) { if(isConnected()){ this.midiSystem.programChange(channel, value); } } public void sendSystemReset() { //not implemented } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProviderImpl.javatuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProvi0000644000175000017500000000202411273045350033556 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import java.util.List; import org.herac.tuxguitar.player.base.MidiOutputPortProvider; public class MidiOutputPortProviderImpl implements MidiOutputPortProvider{ private MidiSystem midiSystem; public MidiOutputPortProviderImpl(){ super(); } public List listPorts() { if(this.midiSystem == null){ this.midiSystem = new MidiSystem(); } if(!this.midiSystem.isOpen()){ this.midiSystem.open(MidiConfigUtils.getDevice()); } return this.midiSystem.findPorts(); } public void closeAll(){ if(this.midiSystem != null){ this.midiSystem.close(); this.midiSystem.finalize(); this.midiSystem = null; } } public void updateDevice(String device){ if(this.midiSystem != null && this.midiSystem.isOpen()){ MidiOutputPortImpl connection = this.midiSystem.getConnection(); if(connection != null){ connection.close(); } this.midiSystem.close(); this.midiSystem.open(device); if(connection != null){ connection.open(); } } } } tuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSystem.java0000644000175000017500000000613711273045350032606 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import java.util.ArrayList; import java.util.List; public class MidiSystem{ private static final String JNI_LIBRARY_NAME = new String("tuxguitar-oss-jni"); static{ System.loadLibrary(JNI_LIBRARY_NAME); } private long instance; private boolean open; private List ports; private MidiOutputPortImpl connection; public MidiSystem() { this.instance = malloc(); this.open = false; this.ports = new ArrayList(); this.connection = null; } public void finalize(){ if(this.instance != 0 ){ this.free(this.instance); this.instance = 0; } } public boolean isOpen(){ return (this.instance != 0 && this.open); } public void open(String device){ if(this.instance != 0 && !this.open){ this.open(this.instance,device); this.open = true; } } public void close(){ if(this.instance != 0 && this.open){ this.close(this.instance); this.open = false; } } public List findPorts(){ this.ports.clear(); if(this.instance != 0 && this.open){ this.findPorts(this.instance); } return this.ports; } public void openPort(MidiOutputPortImpl port){ if(this.instance != 0 && this.open){ this.openPort(this.instance, port.getDevice()); this.connection = port; } } public void closePort(){ if(this.instance != 0 && this.open){ this.closePort(this.instance); this.connection = null; } } public void noteOn(int channel,int note,int velocity){ if(this.instance != 0 && this.open){ this.noteOn(this.instance, channel, note, velocity); } } public void noteOff(int channel,int note,int velocity){ if(this.instance != 0 && this.open){ this.noteOff(this.instance, channel, note, velocity); } } public void controlChange(int channel,int control,int value){ if(this.instance != 0 && this.open){ this.controlChange(this.instance, channel, control, value); } } public void programChange(int channel,int program){ if(this.instance != 0 && this.open){ this.programChange(this.instance, channel, program); } } public void pitchBend(int channel,int value){ if(this.instance != 0 && this.open){ this.pitchBend(this.instance, channel, value); } } public MidiOutputPortImpl getConnection(){ return this.connection; } protected void addPort(String name,int device){ this.ports.add(new MidiOutputPortImpl(this,name,device)); } private native long malloc(); private native void free(long instance); protected native void open(long instance,String device); protected native void close(long instance); protected native void findPorts(long instance); protected native void openPort(long instance,int device); protected native void closePort(long instance); protected native void noteOn(long instance,int channel,int note,int velocity); protected native void noteOff(long instance,int channel,int note,int velocity); protected native void controlChange(long instance,int channel,int control,int value); protected native void programChange(long instance,int channel,int program); protected native void pitchBend(long instance,int channel,int value); } ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortImpl.javatuxguitar-src-1.2/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortImpl.0000644000175000017500000000170311273045350033441 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.oss; import org.herac.tuxguitar.player.base.MidiOutputPort; import org.herac.tuxguitar.player.base.MidiReceiver; public class MidiOutputPortImpl implements MidiOutputPort{ private int device; private String name; private MidiReceiverImpl receiver; public MidiOutputPortImpl(MidiSystem midiSystem,String name,int device){ this.name = name; this.device = device; this.receiver = new MidiReceiverImpl(this,midiSystem); } public void open(){ if(!this.receiver.isConnected()){ this.receiver.connect(); } } public void close(){ this.receiver.disconnect(); } public MidiReceiver getReceiver(){ this.open(); return this.receiver; } public void check(){ // Not implemented } public int getDevice() { return this.device; } public String getKey(){ return ("tuxguitar-oss_" + this.device); } public String getName(){ return (this.name +" #" + this.device); } }././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Encoder.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64En0000644000175000017500000000744211273045343033226 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Base64Encoder { private static final int BUFFER_SIZE = 1024; private static byte ENCODING[] = { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/', (byte) '=' }; private static int get1(byte buf[], int off) { return (buf[off] & 0xfc) >> 2; } private static int get2(byte buf[], int off) { return ((buf[off] & 0x3) << 4) | ((buf[off + 1] & 0xf0) >>> 4); } private static int get3(byte buf[], int off) { return ((buf[off + 1] & 0x0f) << 2) | ((buf[off + 2] & 0xc0) >>> 6); } private static int get4(byte buf[], int off) { return buf[off + 2] & 0x3f; } public static byte[] encode(byte[] bytes) { try{ ByteArrayInputStream in = new ByteArrayInputStream( bytes ); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte buffer[] = new byte[BUFFER_SIZE]; int got = -1; int off = 0; int count = 0; while ((got = in.read(buffer, off, BUFFER_SIZE - off)) > 0) { if ((got + off) >= 3) { got += off; off = 0; while (off + 3 <= got) { int c1 = get1(buffer, off); int c2 = get2(buffer, off); int c3 = get3(buffer, off); int c4 = get4(buffer, off); switch (count) { case 73: out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write('\n'); out.write(ENCODING[c4]); count = 1; break; case 74: out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write('\n'); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count = 2; break; case 75: out.write(ENCODING[c1]); out.write('\n'); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count = 3; break; case 76: out.write('\n'); out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count = 4; break; default: out.write(ENCODING[c1]); out.write(ENCODING[c2]); out.write(ENCODING[c3]); out.write(ENCODING[c4]); count += 4; break; } off += 3; } for (int i = 0; i < 3; i++){ buffer[i] = (i < got - off) ? buffer[off + i] : ((byte) 0); } off = got - off; } else { off += got; } } switch (off) { case 1: out.write(ENCODING[get1(buffer, 0)]); out.write(ENCODING[get2(buffer, 0)]); out.write('='); out.write('='); break; case 2: out.write(ENCODING[get1(buffer, 0)]); out.write(ENCODING[get2(buffer, 0)]); out.write(ENCODING[get3(buffer, 0)]); out.write('='); } return out.toByteArray(); }catch(Throwable throwable){ throwable.printStackTrace(); } return bytes; } }././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Decoder.javatuxguitar-src-1.2/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64De0000644000175000017500000000423311273045343033207 0ustar julianjulianpackage org.herac.tuxguitar.gui.tools.browser.ftp.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Base64Decoder { private static final int BUFFER_SIZE = 1024; private static int get1(byte buf[], int off) { return ((buf[off] & 0x3f) << 2) | ((buf[off + 1] & 0x30) >>> 4); } private static int get2(byte buf[], int off) { return ((buf[off + 1] & 0x0f) << 4) | ((buf[off + 2] & 0x3c) >>> 2); } private static int get3(byte buf[], int off) { return ((buf[off + 2] & 0x03) << 6) | (buf[off + 3] & 0x3f); } private static int check(int ch) { if ((ch >= 'A') && (ch <= 'Z')) { return ch - 'A'; } else if ((ch >= 'a') && (ch <= 'z')) { return ch - 'a' + 26; } else if ((ch >= '0') && (ch <= '9')) { return ch - '0' + 52; } else { switch (ch) { case '=': return 65; case '+': return 62; case '/': return 63; default: return -1; } } } public static byte[] decode(byte[] bytes){ try{ ByteArrayInputStream in = new ByteArrayInputStream( bytes ); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte buffer[] = new byte[BUFFER_SIZE]; byte chunk[] = new byte[4]; int got = -1; int ready = 0; fill: while ((got = in.read(buffer)) > 0) { int skiped = 0; while (skiped < got) { while (ready < 4) { if (skiped >= got){ continue fill; } int ch = check(buffer[skiped++]); if (ch >= 0) { chunk[ready++] = (byte) ch; } } if (chunk[2] == 65) { out.write(get1(chunk, 0)); return out.toByteArray(); } else if (chunk[3] == 65) { out.write(get1(chunk, 0)); out.write(get2(chunk, 0)); return out.toByteArray(); } else { out.write(get1(chunk, 0)); out.write(get2(chunk, 0)); out.write(get3(chunk, 0)); } ready = 0; } } if (ready == 0){ out.flush(); return out.toByteArray(); } }catch(Throwable throwable){ throwable.printStackTrace(); } return bytes; } }././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/DoubleRef.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/0000644000175000017500000000043211273045345033605 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth.type; public class DoubleRef { private double value; public DoubleRef(){ this.value = 0; } public double getValue() { return this.value; } public void setValue(double value) { this.value = value; } } ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/StringRef.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/0000644000175000017500000000044511273045345033611 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth.type; public class StringRef { private String value; public StringRef(){ this.value = new String(); } public String getValue() { return this.value; } public void setValue(String value) { this.value = value; } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/IntegerRef.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/0000644000175000017500000000042311273045345033605 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth.type; public class IntegerRef { private int value; public IntegerRef(){ this.value = 0; } public int getValue() { return this.value; } public void setValue(int value) { this.value = value; } } ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootroottuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/BooleanRef.javatuxguitar-src-1.2/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/type/0000644000175000017500000000044311273045345033607 0ustar julianjulianpackage org.herac.tuxguitar.player.impl.midiport.fluidsynth.type; public class BooleanRef { private boolean value; public BooleanRef(){ this.value = false; } public boolean getValue() { return this.value; } public void setValue(boolean value) { this.value = value; } }