ࡱ>  Ebjbj $doo=<$W% $$$$$$$E&($  $$%$$$ R$$ $$$$* $$$ '%0W%$)$)$$$   Y:   SOUNDLIB: A MUSIC LIBRARY FOR A NOVICE JAVA PROGRAMMER Viera K. Proulx College of Computer and Information Science Northeastern University Boston, MA 02115 617-373-2225 vkp@ccs.neu.edu ABSTRACT We describe the design, pedagogy, and students experiences with a library that allows a novice Java programmer to design sound and musical accompaniment for interactive graphics-based games, as well as explore the programming of simple musical compositions, sound recordings, or visual representations of music and sound. The library has been used for three semesters in our classes and is publicly available at our website. We wish to highlight two aspects of the library. First, the library explicitly supports our test-first design approach to teaching object-oriented programming. Second, the context of musical sounds: notes, pitches, duration, instruments, how they create a melody, how they can be represented in a number of different ways, presents a unique design playground for practicing class-based design. INTRODUCTION Introductory programming is hard to teach. Our goal is to give the student an opportunity to design a class-based system of non-trivial complexity, yet simple enough to be manageable with only the basic programming skills the student has mastered. To support this type of design exploration we have used for a number of years libraries (named draw with variants idraw and adraw) that create a Canvas for simple drawing of shapes, and a World class that handles time events and key events (the View and the Control), with students designing the game behavior (the Model). Students game code extends the World class by providing the onKeyEvent, onTick and draw methods and it starts the game play by invoking the bigBang method. Our curriculum enforces test-first design. Students are taught to design unit tests for every method as soon as its signature and purpose are defined. The programming of the game behavior supports this pedagogy. Students can define tests that check whether the state of the world after a key event or a timer tick corresponds to the expected one. This simple environment for designing complex games has served us well for a while, but then it began to lose its lustre. In our first course students use a series of functional languages with similar game libraries. (Indeed, these libraries have served as models for our Java libraries.) As the supporting software and the first course evolved, the games became more complex, the game libraries added sophisticated image manipulation as well as a support for programming distributed client-server based games. Coming into the second course that introduces class-based design in object-oriented language (Java) the excitement for designing games with just a simple graphics waned. The first game, designed in a mutation-free sub-language of Java was still a challenge. When asked to design yet another game in a mutable style students would recycle old games and retrofit them into the new style adding little to their class design repertoire. Inspired by the work of Erich Neuwirth who uses programmatic music composition (in a mini language for spreadsheets, and in Logo) for introducing computer science concepts to beginners, we designed a sound library for Java. This library provides fresh design opportunities, challenges, and possibilities --- very different from those the students have already seen. Additionally, the design of the library itself includes several interesting case studies in class-based design that we plan to leverage in our course. We present this tool and our experiences with it as follows. The next section describes the design considerations for both the tunes package and the isworld package and highlights the key features, including a deliberate design for testability. We then illustrate the use of the library through our demo program, as well as through several student projects, and conclude with acknowledgements. LIBRARY DESIGN The SoundLib library consists of the tunes and the isworld packages. The tunes package implements the music/sound component and allows the programmer to com- pose programmatically musical sequences (melodies, sounds) and play them. The isdraw package extends the functionality of the original imperative idraw library by allowing the programmer to play notes and other sounds on each tick or in response to a specific key event. It also adds the methods for responding to mouse events. The tunes package: Building the orchestra The tunes package defines a MusicBox class that initializes a MIDI Synthesizer with the default Soundbank and defines the initial MIDI program change selecting 16 instruments that provide a variety of options for the student. There are methods that allow the programmer to see what is the current MIDI program (assignment of instruments to channels) and that allow the programmer to change the instrument assignments (the MIDI program). Additional methods allow the programmer to start and stop playing one or more Tunes, where a Tune represents a channel choice and a Chord (a collection of Notes to be played or stopped). A simple sleepSome method that allows the given time to pass before resuming completes this class. The programmer can play tunes by starting and stopping a sequence of tunes with pauses in between. To make the MIDI musical notation accessible to the programmer and to allow students with minimal musical background to use the library, the interface SoundConstants defines names for all MIDI instruments (e.g. PIANO, TUBA, or BIRDTWEET), provides simple names to represent the notes in the middle of the piano keyboard e.g. noteC, or noteDownG), and contains a mapping of MIDI instrument numbers to their names. This makes it possible to define a Tune as simply as: Tune pianoA = new Tune(PIANO, new Note(NoteA)); Once a synthesizer has been initialized and the assignment of the instruments to the sixteen MIDI channel has been completed, the tunes to be played need to specify only the note and the instrument on which the note should play. When designing a musical component for a game, all that student needs to do is to decide which notes or tunes should be played on each tick, or in response to the key event. Adding the chosen notes or tunes to the appropriate TuneBucket plays the selected melody. We carry the tunes in a bucket, so even the most musically challenged programmer could carry a tune :). The Note class allows the programmer to define any of the 128 MIDI pitches with a selected duration in a number of different ways. The class is designed to accept a number of different formats for defining the note, supporting different types of users in a comprehensive manner. The programmer can specify just the pitch. The default duration is one tick. Of course, students may not want to remember that 60 represents the middle C, and so the note names defined in the SoundConstants interface provide an easy way out. So, the middle C note of duration 1 may be defined in any of the following ways: Note midC = new Note(60); Note midC = new Note(noteC); Note midC = new Note(60, 1); Note midC = new Note(noteC, 1); Note midC = new Note("C4n1"); The last variant uses a String representation of the note, given by the note name C, the octave 4, the modifier (one of n natural, s sharp, or f flat), and duration (1 tick). The design of the constructors in this class provides a case study for designing classes for users convenience and for assuring data integrity. The class provides additional methods: nextBeat and skipBeat that either decrease or increase the note duration. These methods are used when a note is playing for the duration of several beats. A Chord is a collection of Notes that are to be played at the same time. It can be initialized in a constructor to a given sequence of Notes, or ints (pitches) or Strings (note names). It can also be modified later by adding notes to the chord. This class also includes the methods nextBeat and skipBeat that either decrease or increase the note duration for all notes in the Chord. But here we come with an interesting challenge. When the programmer decides that a given Chord should be played by adding it to the TuneBucket, she does not expect the Chord to change as the program plays the tune. So, we need to make a deep copy of the Chord before it starts playing, to assure that the mutation of the state as we progress through the beats has no ill effects. This provides a nice example for learning about the meaning of deep copy and illustrating the need for it. The class Tune represents a chord that is to be played on the selected instrument. Each tune specifies the instrument number from the MIDI program and the Chord that should play. The class TuneBucket then contains 16 Tunes, one for each of the 16 instruments in the current MIDI program. The programmer can add to the TuneBucket one note, one Chord, a Tune, a collection of Tunes, and also clear the contents of the TuneBucket that stops playing all notes and removes all Tunes from the TuneBucket. The methods nextBeat and skipBeat work in the same way as for a single Chord. To represent a melody, student starts with a sequence of notes. For example, the sequence of notes (noteC,0,noteD,0,noteE,0,noteC,0) represents the first phrase of the Frere Jacques tune. The pitch 0 represents a silent note, a pause. The next note to be played can be generated by a circular iterator, creating an infinite melody loop. We can combine two traversals over the melody with the appropriate delay in the second traversal to play a musical canon or we can play several instruments in parallel as an orchestra would do. The isworld package: Making games The isdraw library provides a Canvas for drawing simple shapes (rectangles, lines, circles, disks, and text) in any color and size. It defines an abstract class World that handles the creation of the frame with the Canvas, the drawing of the representation of the current world scene, the handling of the timer events, the key events, and mouse events. The programmer designs a class that extends the World and implements the methods that produce the changes in the World in response to the clock tick (onTick method), in response to a key press and release (onKeyEvent, onKeyReleased), and a method that draws the current state of the World. Optionally, the programmer can override the stubs of methods that respond to mouse events. To start playing a tune at a given time, the onTick method includes a command that adds the selected Tunes to the tickTunes TuneBucket. The selected notes will play on the given instrument with duration measured in clock ticks. The Tunes added to the keyTunes TuneBucket play as long as the key is held down, regardless of the given duration. The onKeyReleased method does not affect the notes played --- it is provided so the programmer can take other actions when the key is released. Testing support The SoundLib library has been deliberately designed to support the test-first pedagogy. Every class in the tunes and isworld packages comes with methods that allow the programmer to check the effects or outcomes of methods defined in that class. The MusicBox class allows the programmer to check the current channel assignments to instruments (getProgram(int channel) method), and to check which tunes are currently playing provided by the nowPlaying method. The Note class includes a method sameNote that checks whether this note represents the same note as the given note. It verifies that the notes have matching pitch and duration (for example, the two notes represented by the Strings "G4s2 and "A4f2 are considered the same). The Tune class and the Chord class both allow us to check their size, and whether they contain the given Note. The TuneBucket class allows us to check whether it contains a given note played on the given instrument, and it reports the size of the TuneBucket. THE DEMO PROGRAM AND STUDENT PROJECTS To illustrate some of the ways the library can be used, and to help the students to understand how to program music we have designed a demo program. The goal is to show the multiple ways of how the musical ideas can be represented, and how the user can observe and control the music that is played.  The right panel shows the current MIDI program: the assignment of instruments to the 16 MIDI channels. The user can choose any one of the instruments via mouse click. This way the students can hear how the different instruments sound. The displayed keyboard on the top left provides a guide to the user who wants to play a piano. The labels on the keys show the note that is played and the key press that plays the note. The note that is currently played is highlighted. The bottom left panel shows a piano roll. The musical staff shows the notes that will be played on each tick. The arrow keys stop, pause, reverse, and stop the playing of the selected tune. As the piano roll plays, the currently played notes are shown in red. Student experiences and what they taught us The first time we used the library we had no duration for the notes, no chords, and the instrument-note request had to be added to the TuneBucket one at a time. Yet students came up with truly engaging jazzy tunes, using silence between the notes to create the right timing. Before the second semester we improved the design with note duration and a more complex structures for creating musical compositions (almost everything described here except the mouse interactions and key press duration). The final projects during the second semester were quite creative. In the frogger game a jazzy tune plays in the background, each collision and when the frog reached the other bank of the river produces sound effects, and a great final tune plays when the game ends. A memory game asked the player to remember the sequence of square choices and music that went with it. One student sonified the Game of Life. Another project was a tool for composing music with playback (see below). The user could select one of four instruments, and pick the pitch to play at the given time on a graphical board that resembled the piano roll: the vertical dimension represented the pitch, the horizontal direction represented the timeline. Pressing the start key played the composition representing the current time by a thin horizontal line. This project made it clear that we need to add mouse events to the library, as all pitch selections were done by just moving the cursor using the arrow keys.  Another student tried to capture the melody played by playing the keys like a piano keyboard and playing it back on demand. His project motivated the re-design of the way the key press and release is handled in the current version of the library. Overall, the complexity and creativity exhibited in student projects confirmed the expected benefits of providing this library. ACKNOWLEDGMENTS The author would like to thank Erich Neuwirth for his inspiration and encouragement of exploration of programmatically generated music. His work on using music with spreadsheets and Logo have influenced the library design and its pedagogy. REFERENCES [1] http://www.ccs.neu.edu/javalib/SoundLib. [2] Neuwirth, E., http://sunsite.univie.ac.at/musicfun/MidiCSD/. [3] Proulx, V.K.., Test-Driven Design for Introductory OO Programming, SIGCSE Bulletin, 41(1), 2009. [4] Sendova, E. (2001) Modelling Creative Processes in Abstract Art and Music, Eurologo 2001, Proceedings of the 8th European Logo Conference 21-25 August, Linz, Austria. 7o p b f u z  fk/5>?yz{𾷯᷾ŝhF `hj256heihj26h&Lhj25 h&Lhj2 hX9hj2 hj25hj2CJOJQJh'jhj2CJOJQJh&Lhj26 h'jhj2hX9hj25hj2h v>78Htp q ?@$a$gdj2 $`a$gdj2gdj2z{;!(X(]((())*hphj2CJOJQJhChj25CJOJQJheihj2CJOJQJhChj2CJOJQJh:Ahj26h:Ahj25CJOJQJ h:Ahj2h:Ahj2CJOJQJhj2;1&))++--..0022226666%8&8(8)8;;1;$a$gdj2gdj2$a$gdj2 $`a$gdj2*"*3*8*U*_*`*q*u*********++9+C+q+u+++++++?,A,_,`,------...3.9.....///󿸰hJhj2OJQJhJhj2CJOJQJhl/hj26hF `hj256 hj25hX9hj25 hX9hj2 hCC'hj2hY-8hj26hj2CJOJQJhChj25CJOJQJhChj2CJOJQJhj2hChj262// 00D0N0P0]000"1(1Z1^1g1p1q1{1111112P2]22222222Z3_3d3k333G4^4444444455555555 hshj2hj2CJOJQJhShj2CJOJQJhi)hj2CJOJQJhi)hj26h.hj26hi)hj25hX9hj25 hj25 hJhj2hJhj2OJQJhj2hJhj2CJOJQJ7555556676:6@6D6J6666666_7l77777&8'8K8W8;0;2;3;;;==@A{BBBBBCC{C|C}CCCC D˪˼ h|hj2jh#hj2U h7hj2hJhj2CJOJQJ hX9hj2jh0hj2U hshj2hthj26hX9hj25 hj25hShj2CJOJQJhj2CJOJQJh Ohj2CJOJQJhj221;2;%=@@AAzB{BBB|C}CCCCC\DE hh^h`gdj2gdj2 $`a$gdj2$a$gdj2$a$gdj2 D*9R,"t%1)fm-%*t̩vOvSA\\zN=/EgD0 pHYs  $tEXtSoftwareQuickTime 7.6.6 (Mac OS X)_tIME kl IDATxxTlzPB@T. Xذ*XAl`l Qz 5{yͲ$'e<2gN9|73 S_zqO4m|XV  燀Xڷizaʪ<  $6 i՝AAgەEgJڻyj /Q "((0L^y"˿C=0^geCְq{Bb|*&/4c [;;N/Es:_'WӰ͜ B%a) {m4MSMq9ܻy3R Snu[mm6͌ ]%5 B!mhC@a oՄidEBo1mیvhit|kDAkmH?[+F)dڶulGi P>Nm]1a^G6F,SƢGA)UXXQe nCDFLt%,G &+v;mmjcntfƥ0SpF!0[lM^£2l@P?dinޱ?5 !aTδX<'#pbor'Yv d?\?4!Є\ޏTdTw6A* V"%- ҍ !:6 @41d3~V UDgZ1<6@Td84aenE-M ,h 4 Ѡp$-c [QG 5@rP.s~xg7 >[13hewo?;]oy￾vhO> ^~,&XO׿ێ357}̏p4~mgg?̍CPJu"d)$H?A1=/vM 7W#X`!,fG#^(B` :^X[^!U̕r> F0-_fZd3M;r4s(ӄZp!B dyA0tGc[V6!7 m +) Q-Ѯqi]GZu'r i9s>޾ ҳ-G0{[ ztYt&iu]ҥ Y.:@(UX6k0EE sx8L0`*,i%(gs, _i&hYa+E P)͘HZ^bG& -9y>9$ 1QS2c-8mJY.lz˶Bhl,"]G@ÀNH?my&ҴL6v]=`TW~bNI>VIxYxx;?LH Qp !:DItԄUd$QW05Ŕ)06ex"9c;#)s'a.Vtͅ +>l^vv&5QPKZ ,((s>| PfcbT_E.G[X{/aپthd_QyPavPk谟vsq5c}_p^t2r0>0Gԉ/aָUuiAj =2a?3Z֯st4Xǡ1iE]igfM}<a rB\m*"Vv2$9ft,&Վ'fCP-Vv 4[UBp`tC~N#1G½wc~ 20Gfr[WP+{]~B~Vh^^|k̆S8_d x?W%`骍h׭ "룕Vl  b),,A&DZCx` )Qe T+;õ.);,ZE婲ʴ!0ACѼ۴fox&L8t8f"0d{NӞeyM/ĥ8q !a5QBm;d 51=@^VT`4'x;˟`_o]Hg<9<mecKھxw0#p:OfKV-Ok ڐן݈놵Cj^<l[6y7Wؼ/s}/-=^0{ =** ~ nА`ZT`mo\j}LZQh4a* >+#3pto*r^i3iƄ AB)H8N ԰4A(/&D7C;NJW="Q?*IG!;>ֳ -S+sWk9pXJ-qs4 7kAdZOWYZj[rNe`Aܧ{ҊV#Z#+*2FJƥ BY0;O~N6̬L"Gdg+.e4ÂqUA='c6!%݌lS,v̜2Q/ i`W ¿iz!ғ3JS b 0ТBXǙ&_缝ւ|X=HS^HL+5D׋FDDVq *t$xڒ  ΝUQ8 g]YŊ)  0)mږ  BiWшAATA-K.,>  +AAa% `"AA B  AAA0V  !JA j^ETKn=?/ = aZ;eROh ҫڷW =;sfcnP\tN͝ڣGcyH?ZU-A%׭C^sNugF_7nDо}#_fw0=2[Bڭ+-mkzv`l=P*W6u~g 7fL3O;ogWJテ)5=}:5!vdh5BW^)0ׯji4Tsfq˗#aoM{|H}uoA- Mj6Ɲ<刻9qy ͅIkz>cNM=}^ɸ;KN)m΋Stt(G]c- nfv4pYnK^t. ?4!P-Pxt߷OxMd&M!W+wE%=paEfUOiE RykXEVP|F?oi1"rzjBLA0 ~4~-txy Crjb41WbQ~$& W_H &f cbJ=Ұ6ni wDZh"8X򋾫tscxsRJSE`wlߎi⋈J|Ud9Gqn^lԻ6P$"zQW]~)MYB #QZZe9>P5H7a\.Nsl9wiϙ`K ($vAc`cӧVw#/]좸%\`eZ$vGA%4ڻ%_v!MPiԯ[DAQ<7B s'\FoHuf*Q~%0EE"0MBκkQeϞjȌ鉸ރ9. G*< W⪒h}#j(we̟6|`]?gh3կ7DɓX5AʆeV5fAn q]ɉB(aUz*w~l{ YKw;'pDyf|߾h>؛6l(g{2Zg*_{zh(.|dnT~&-ZJشTZZ΃AG D|]Q/?A0ivJȅt.iכLCmJ+y.NA(g-\v?6ڧ0(Y//^>x0Fmɗ^qDUp'@}zg?,^MGdft|A|x ^ZA&{5%'㏣ô*X˜{ޭh?gZ*LE"["_vSM V@!a-2qH6 yW9"ӖҚPzrw))ʂeDYޡCŃkd Ky N}8_A_gҥ{:rIk0۴c:EӉ0._@2R^EjlVy?5Uu)r}Wŗ;(ٛAS1>43<Aj#.ZOK֧!CԐLm9AA  T6bVX*BAAN HJ),,,wS}+ '4;A||<Ν=zbq?\WϞ=?`ذaU;A<ƍ?,I޽ېtsL4t^4'mY5j 2z+uV~HSڶm[- u?O?4tR,<<]t^du_իWgSN՝_Z)z!5oVn~g_য়~r> TQd~}j]Պ+`|g%\H _| }Q?7nΝ;+쎄 >W/#Fɓ%֏5J0i[Ok׮V.L+q믿=~1 0h޼9r^1"eB*>i̙XhN+mO>&O 7ܠŶmܦ}9s0fs=l2塹;+M'55Us7⦛n³>SNU|xGXv-äIIIxպqg2.ѣ1~xx}7##C[IV|z-4s~ڴiʬxea͸a?'N7| ꎑ#GŪUrJ?~\-K_ٳe…|cU/b{;m8|௹|DEE;p>}ѣ˥LBᅦ~z޾[NNN.!n xee`ɒ%n?SO=~ ۗ0,PHQp6Zc<sy睇 "d:;d>:dϞ=J}J@z:G;դIV 뮻NUl:Ç5 ibxС*p;v/ɓ''bӦMs?>wTQ4s[6frkd׏sW%\:d|~aٷ˔xi$R&r4h→|f[lswS2ve jv8dv*aaci]sL#,_P[>-mee1^K8LZ c!}O(خܑUIVʘ>`tPVhbMͦ[PKE߾}nI>Ok X~ͺ܇0ͫJI& i=s,CC-N ?\^ʄ TfY=˴unݺ ~Ir哮<\K7{qGXxrW_Woaaa%b٣nMcy\܇@ގ;ŋb X`>%ȢE r{=f̘CXdu 4mۆTd|V P oСm6ݻ7:w: ˗/?c6m`eʭwA{gcW3Ab;PME{;ݻwcc:umǎQt :CK0s~~~HMM) W  M6ŨQT=Ncҥ]"??_d3Ķ H8q"Oe˖XoݺD/ABƸ&Mqj>XAiܸryU;6lP1P`кԾ}{[>ׯmUy戊*KPiq;V|X B-G7!Q:V>(lق;.%b8Nѣt飖3hC.\veJxuDX B-A\pA QEN݁UPP3>l⠤ٌ͛l9]+A>{vOa7xs=vszLg/X~c谡8rvbpV  w JA g} I'6PuH@AAa% `"AA X}7%~1veWwMCљ5-BJA DX  +AA1V  fa5صk+4H駳fﱱjfmu{nQFCϞ=^ɓ'?K.ALLL4xNܫWׯ_&~nٲѧ_cRaśKMMU3rF8޼a-Z@ttt옶g59mma)/ Yyѯ Gh׮ڶkF5zkZ~LFęԴ2!xGZZz)u.B%j82;@L6 7V-^W_}\L:ݺuSO?])ԏ?BiѢEoն'113g,1"%Kзo_Vk޼9; 6roh~~zqaKNNV5\뮻BvL[Tfe),S!+/z%?X, pڕ ִH8)gRʄ=o6ꫯ 믿Z̴AwHp3 eB=1I촔0Noر3gxbaC73yyyÌ>|w؁SNC+u*Vn^e¸ >}0>e˖-}vrwy IR^R_iݺ5,wT3)2q&uLd֭g3I&cL-T}>Wddd( ?~L7#]tCw"VΰĉUy.R%1Vcc [h?ٹkiYa I fa#uyq,dLBF_}EI0q%wqGҬgR&#eLB (\uU%֭[NtDr';=*ct ~(fw"at(y,W7~a1Wר~V\YSLe޵k*;fMs!㇦gvg!3V֮`ؠ:kU%Š7ꫯVfŏ>x{(RUž9u o Ky)o!++</YqtСU3X#eBʄ+jZηr ^{5z뭸sϝ^~-n?~ݐ^uaƌN2aaϔ{ׄR^)dw^cӠAuo S`MˏH8V&j<*_Æ#hڴB wyIJQFt1(D|;.U:~hBV- M<; Yykb3Xϭ3keB(WzDP1e@_fVQ0cTVхsck3XSq9yeyuRz3]14ɾ[xU+`_}ͱuș̷P/BUP-+4{U=՝0ƨIwA*aU:tHsbРA՝AA(7U&8?f$O]iîHffAđcE.ڿrr$[NȞEF%K]vĮF9/СC y;|sϭc>g>c9K+6=ύǰb2oU268@E0[="w:žSOp@O^k^^uIQ܍.zڼżkqa5,3y25 ,Ɗ=1SLQݽ5(M}d˃fSp0k|+h9rEc;6_qq—+z^V&W&~^K4Zp|s vڼ|,FtEk+ԩS Ş=`F <4b& E,ȓ"K?^E31*L0m֗|f8!ǝ!7tj]֐c PqLXq{X)u"L&eIK==&Q=Y/BDGG (1oh]ck/ŠN1G=rjS<0}ȑ#UO"Z_] μgd䨑՚~7l05ptuO>D/ʼniaAQņ-$F&c~)L?=0a3 Z(0Yzr0ސ+LL+?7F+keTOSeŠjLDQ,NZᤏtOˉ>᥯@K`ChL辢[XՄ"(.\\v(Շ"S\>qo˖- I( (=zz FJnAe ǡXؐҟ_P%1V'NPf^(39avرjhY+Ji tqBo`uJ(3nnNLZ]q^@\:bqU`ZNJ߿ԭGq(hJ:u2:,999>Up4>`Cjͪ~YF5r}1дz^y%Vu6x;=#܏s:ףܟիr0cLck U"h'jbG f%iTKAW43b&`,g|#Ji*a:g~Sm=c,;uL0A ²" bd,>0N1 b 9mZ++WkyFPp*לޣm۶×`\;+B`Xf yF1z] dZ偞$uam[e'N,0}6(?L6s³C]rcmJ/"+tɊ.nf*"AAA6[FZ* jdp/*`5}e&e'Vr,:8xݵ]^(Yl1MZp뎽B+*$?Z͛ҧRqa{J/|q 9sT[ZC]eǎ++ -}uORuΰaF|A>џQh g6f̗fֈʆ[`O`u(aE$iׇp0H{q_G.M '5;Sݻ:;ƪcY pFŧzRҦUG)5F¼,t-J >Fs7+!k3##=UY&06mZfZ| unݺaWhMҧtc %w⯿*Mqf0yd%蘦{L{%TF2S2'Ue<6j\%Ls+[4TV\k4k"|XWX?(aAu `yB͆B6Y ,Z8 8bsDWvqٓ_5nRR53o-XKl9n a؊ -8Hb2rPL1uҤIJ$ >|x.] Ne4J%X)mj),}¬4A{2sղW{:zF:0Jgҥu03!?P1}ʃRW  Xz뭷Tv{2NQTdž Ԙ{z`zB8Wried}ڎXAѧO5+-Re.D}Ha v8L]a9* I[Ү˃-i /\>Q`3F9&A&@WŠ1gyBLv_DA BiH  AH  ̏fk'PuJA DX  +AAa% `"AA B  AAA0JA|&Cvfhժߏ5 nÚkk.5'P4hJKg͚5_~vLۆW^%[~e˖FO!+AA!kjX7xCh"%ptCc…j}DDkL4ȋ/ڵk]9Mn;c :tvK,a&"A:t(yW\M y_~ƍíުW_}yk֬Y&F  СVZUb9I}=ct> /<j߾}G6mT^&tt)eDX ѧO+EYbb9ZtRRR:u `SYeرt "AX,@s7mڴ  pm\\u3֝:uJ 'bXlYө-Adذa*%_ ??_Y\ѼysDEE쩷n:5dBǎ+o ,PuV 0O>DO9G=;wTA: Z ]v^宻BPPPBAG>P>|8L&j޼y0ȑ#1%eoCC+dz<[%՝ AA,]Pau1.XA`6]C  .3$K/7$uAAa% `"AA B  AAA0V  !JA d+AAA8ݻ "..zBxx8֬Y qI㏸KSbOIIQccc|9 Йwdh֬ZlyF:qWik:"AǠz駕0 мys;v 6lPfh۶Gah"|*N/((@ƍW_!77SNEn݊ 9sfݗ,Y} +n-ZoCQgdffDVV:uT+vѪV c̝;III5kJ9BK7⧟~Rfƍ7nsR4M0A}{҅4/Ts}WbE]T}Jh=^KMBbAHKK͛qW!'A]t6 'OVM6y>22RY<ѿc%^6"JA| Z膫+V@޽ѹsg[f^BZƖ-[,Hڴi+7aBB=N}Ua% >U4ŠÇL;vSJl@cbΜ9xsKزel߾Q+AA!4iS1<,]*00nOmo IDAT>ZƌSn&5\łO?T Ɯq%كL6:u*oV_,^J4lP/m]۶m] +Ґ4Jl9 9Z<8ԩSѭ[7s۷9}Šiȑ#kQ'U-ݻ`.n7l2^{UY `^'ޘ1nXyU 1_Yヒ)SP1xp祦SGv$@@(eƲoX>dZ >_Au_aCЀݸGxV"ejɏ ݻwcܹŢG+>{l%J}38sJl:O8h"̟?_M=lذf̙s=J`[hZ~} aEKXMX53;B_+\&h!C+a/+eW|ϞHa-) q?|ؒ+k\ZEwVsĽ5R&*TuidI wi|HZֺ+Z*ώ~ F츅֪-[((TB!FWhnTdy^v-.IK;/8>e v޽]8_~9k瞋2<׼9l ]p%>,/۷ǡKrhb7vnތG^(ДE X83fଭ[aWf9Kmvm]Å ՇY|Acۻaۗ7=P^qTro O5fsdljYo޿ `i /Z 4xt,.@tњ b/_[v]1婎cXttM ]n-gϡV%K(oSS]u~Z֦<µ} mҤIرcrm{Y` IlWwJhhUŠ.cbΜ9x%LZc .ƍ+V(+c |uQㅕ_v{]vA`=xP-&ۡCZ2pi?|mZknHb$ڶEl͙z܂0톙Mrw- ! 'li>_+VE#S{Fŗ7=G"EUcQjbiРiYz@ct+]J}=e)(HY 9S[AwV T˃;Gzh4e c:ۺ{~s\Ok)LƏGr C׺ONjR<;u<Ek&MSҹsgx{$$$(wH+oaHw#bp#t{Վֵ!CT(FQㅕUﬔQJo8yH2F?nk4Y͖._T.Db{#ψq"ڧu{͗l^{I 믋7H@6'2o-wπW Ec7qCOQՓ9NϘ?F&L2g~K#r0d.Y4|`j ]G!coG2I| 4|q,صVJg!SGts&A; `(ӱ*lQ[w grT$2_~}q 5AZ+("&緬u94fM[{7T^ԉKEWYS+G y /qHk$*Έ1L!s|h*ZjV^]M61cF񘯰NrXGZ:]{9]z^/<믿^ GyDY8&V˖-q_Y}j{>+H?D#CTIK/!ҡWQYaLRZvH1B[B5o9;㾌i81v,eZe^8j/CJVN/Y+ 6lWdNzs,BBO֬)gh i&ڵEW#O+e"VԝwcU/gqtUe7.)Y<2`idXY5w_e~Zotނ [EK㋂J.BWpMwT:O1h*O>r4hp9A8H_|U^* ^*'VMѲ5R^8)E#zڟZFpIt-uF\<[yhT3 Ӧ!Ok5߰c:ZFVDrR dae&:. 6CJ#ҿ4{VlrQ`4AP+\ Pٔ(XAA B  AAA0V 98b㤰aeT*צ*+V\˗/W3as0|<%>7oz刹ucǎwmݦFM()[x/p1Nҋ/P*~ ӦM 7܀ü|"sO>QDUЫW/L<ِ<70`rp✯ e+NU[i BM'Ʊqqqj={W{ +r]ԥKe-Z\Pȗ_~^.1W⽸Oq}8p`圅&t✂BoT޽;֮]gyFM?'zY,<322Ԕ|6LRY9XWp$97#NGO۶mqL6G޽[5V仒ӼY/#eq fڵ 81h 5=aYc))){llJ3 μfŠ qϞ=˕F~TR^[Tf«Z',NaԨQ#x!\BXQ@݌P_YbE߷z+ZneBB駟VټysܰaUW/VYX}.V逸Ri^x_oQƍ-ZctrW_}FSNEnݪb0|&D!&0|p\{§o>_9XKs"uJ4:NnI7٨QT+űEzqW͓w:tP.*!V^~e<2g+X`8_Q8*볚KGJ;G^{Zi׮mۦi֬h {}cmĈ%]5{k$\Bv<7o?K?TVLG< =l0}%;v,{ ߹s{:ٸqcxJ4x| ѭ[*k_}e:0&oVeiӦJT egܹHJJR {GY͛oX7Nu~'5z) >VV}K* VW_}mbdl?Up8#+29r48;Suw`Ø+ˊq+:|y믘={z;VPW]u/س-[4h zOyה{WlY-JVǛ{}vu?ܖv #00PG˙5jK׋go_rzrczey.<]ʼF@u]_3gN +7R[7]L@nӣG%z oN>~6RWlQ({Fuej2dH9nY\ْc,,-XV| >|*ѻwoe%tW3~"{U3$.y<ӪD@DձyksϩXǛ{Ikņ<0~2#M鴊rds=Wv|pyĉi&ut\ƕ}oԩSJ7.??s(8$vʆf+fS^ulR`% Z"ݱsJ;oK+LI&꿫eT(-ޖ#ZYU{cu5[4xs8gXa0ZGu{Ob._TܹSgeWJ3[7tr3GWlY/RO0|/0ؓ!""UIns;P<#宻jbe$ &O<2hn xe7C7aP $Ⱦx" $M~eDE JLªl22BE QyouꤗyIҵtUyO/QC FXovvvpW9mƕ824˗/ٳ}U @*x'd *k'dKHY?ᄌφ'#SGݻ_0^'[Qv@:Wwֵ'N4N[.B@+[4^d1Q&Id)J+\y_tAK/8y S`8ҹH~駎_>K,qW =2j>\_ '駟4M&یDX삂⊷U"3L ۋq{@PoM@5ZhVC+o Ow.דI&iWYVom~x>3 昰{s|pq0gͺj>&gC2('c][#c@$.lP7.k""B*W=zпO6NξoA@:!!Ayjxǟe|H⤇4B*w:mo$YF38`%+3 M"6]W p6s1ad@! +o'EV5Lq:F"D 7ϩ.[ 8A94o<7$ Jrenz?Qց~;3guwb4a`Up%"]6vN˗K"=s? _PA3}ķ'P_8E+(B~4wQdlP:>>>1zF2eXY`5cjjϵwx|V^b(XلMXلpQ[8 8x(ɓ1џx+a$cfFp}?#?%:m۶ݍ!+HNNy""'aC&8ʛof.]lY_79 f^^t-aBeݺu/RڵkuvO0T CƸڀ% d e)z||4o\v kq,EUS`Νe޼y׿ꠡ}ʔ蠩]Ԁ[1'w?Y{ mڴ 6zi^?}vcf\/|PЙQKϟwРAҽ{wW^;ց}~u'O,_\c2}׳gOapc߿hc`i9O/jd@731n^_: z`9s?^?C}㉁}>o%{ M:1I4ƌcr}ߞ>.#СC###C6~Cp֭{wc97owON~e787UN ϟm `YC`K@ý0 t98 IDAT>n ril'>^?_N1&֯_/|bx6l$@3pBo֬Iٳ30^pNX#p%/?,1*<|& T ^a:KwyzgyF (O벛Bi8pRƀ6Pksi_=q /rsۃ/7>3k=}.ex$`PI&jofϞUXi_u\_(Wc̙3fop8hO? 7V/L-=bQ[̲U 8In # d80p3gix\Ox[̸U{+]+ݺK=v/(|8`6套^rL7-Z Q\߯uV( ƗQ`]Ӈ'~b[j XbjǶ!;Aa)cdG-t] Ф9__On}VKzED9amNMMŋkUi}}.|xq+>{8d}VȔZCP" .oժU5@+8%KhNR;kx[ MjHvq@1CГ 2d:D!hA*0xqe(vd h{]GO":N"F j)|vr >\V̋`Z*Qf( __o>+%X=^B_gٿ\vM֮]k^~] "TJ4suUZݸqC6nܨ]/ԭ[W5_גX].?O5Y{)=lP%"" Bi~os)YH<;SSS8݀jҤIsNoMw 0@B ZQ9~,X@+&˗Bt {۷w EhCs 2W(7jw?^˓O>YػU=DDDjN<)eʔؗ 3Vk}k' OVPQo@lRŖP]DDDD6a`EDDDdVDDDD6a`EDDDdVDDDD6a`EDDDdcEDDa]Pc?VDDD&33S5QbE##f+dm\<Q0L%''˘1c4HMMuLpܹS_r(:tkO;+#ȩ\rۆ&Fl׾}Ir׮]c2xZ{eBv ME%fX냈"G:u䩧_]^|EPcZbb1b:wKhyZjO{$3|y34ͽ꫺ӧki܉Yf54Y)7C7`dH]Dp'x]Ç;=̑ʀ.dpkm=xݻwwkDMVeٲenP=r G|*>^7viժUg_rsK*z! O>s~޽o TyTa,a? b#1XQLb 3_gSx{4p2|W@!1|ҴiS}ry7ofj)7N6m_ABB=wZZ) }IMM@pРA^ .Ν/3d\eggk`K/=cJՋeXG,?DjJ1|o> t?xnZ.]$6m Dtt=jy>O(b lٲ'5j:mDVk֭ү_A(7Ȃ dԨQ`XJ#eXG,?D!A=ю;4͕$mJ;Q˓si`u1m C0 FpyY7nX̋SJSN^緺x?P{̞/x^|Ey衇tMP<?*!k.-P5+W֬ .+WQd.m(57hBCPYg6vU𾌿×Çz;l?VE-?@j˖-zq[ YY50 -A(sV*U ԩSZ#Z+{bu_Wa7opWQ*v|-DZljC6tCСC}+dnv]`YYYB>}|~o x5QCfL2G@UCaÆP;Qm@!)ӧ+VsuUaҤIaB. ۤIZFdy :~mG~"sW?~x͈=><})Xq%('Bsӧ]X;o߾zN?,ZH`;iP&ذa;UVLє)S4SdMwX~o@]+byq"L[; jȎ >`ɓ'ks_ \QV}[z`KEswKQ|EɟmDו+W] t EXy)._b}}#UaB1;=zY4 2`/jDQ+ٲ6?n yK _cEDDD="KEn(XلMXلMQ̔|q<>>^7.Ы8 ɑ]? ggex.]_W:^^6mbŊ@Sn]]`м=5a XEt:݂ KKK5kh:>~tZu,>;@|Ү];k`,Ǐ2F={y1ڵkR~}q>VDDDAȑ#̙3C 4H/yf `6m$Æ sOo…ry3gNl2Yxڵ,yw&$$ѣ0+""VlYl!;;[n޼)cǎf-[8]xQnݪck"4Pq͚5ٳɟy 3VDDD>H6nܨy:urL[ntQ/##C:wrss5<ۥy{I`+tb# +""`Y!dP^ĿN:)))w^dٲe*Y~g2  %''k-艷y/\ ;w߫V#(': Ըq jJ.EpU-GhȐ!RV-}˗/o[8qfN:ҿWy9++~( m_|!iTYYYXիWO>3iѢu#jժghƦ@""Z)4߿_4iw94Õ*U14i6ǵlR~ayw>G} 0"""@(HǣzZ>x`y嗵TBs +S%K_ QU|mکaÆ2k,_'Ŷ;"""PPB=X\ޜnjQ P6x=X۲ږPaDDDD6a?VDD6XKXلMDDDD6a`EDDDdVDDDD6a`EDDDdcEDDa233ŋK||4o,q+1~4ki^Yl<׮][ׯ/UT-&租~:O֭gw~\RS> ܃>(9991`whVGz݆>}Z " CRreywD`PiaVƼ5jԐ+VիWe„ ҢE k׮i0/\eРA>СC?ǎ+WHӦMӿ;}{7xC_'٣C 0i{ wqGm5O z-"".{C4rH/55UO1/ AeV Gv7ߔnM~a^@#ș4i_]'W_}}NֹsgP؏Q+[iFʊJ*idvܩ4=RbEٷoGnj&/+ٱHu""ty裏dԩҾ}{ԩW^+Mc~̍7D)YرC\IJJҦ<9waN<26-Ɗ(!8{CuU(q^}_^'Jǎ}|:?( Qk.-G6ԇ!S^zNB V*]t4-0"""@FԩSdܸqZkv^ =3Ȗ-[,V(8G@!Fs 4fA{N#۴p@""VV- +.F7Jvvu"A e˖m۶M,@ :pt QXDQ4AOG;4is6h… b@wuÆ e;q_2ed2n!ذaC[^')(eddzo--7bmB9s̘9CC:Ef uKXߔ)SBӧw/"c;x͚5pP#03 L1 IDATDDD .{O/Qۏ/\(8ޝ=zH~ ykCW`DDTte?},j+DDDROw%_ufNDDDEUʖz:m u` BY+""c{`[" 5^4R~b _Ț}w9byy~G6vDD11H_~1Cff;͏Bƀ1rrrt@׾|Zj:Οه~(Z;[7%sCu6jH>6`֚5k:J*v} 7R! b׳>+W\vInnl?r5_c;i4YfXÇkݍ7.X[:X]xQN*tAʕ+'\R&O/~b z„ ҢE nBXV<\DD`pBAFBB=4d6oެnڴI $[]/˼ybŊc=CiӦ9EA!%%E,#/($X%2")]'";;[n޼)cǎf64ٵntlX72_{8TOJ4CHQ5ZDlֻwoYtݻW3O-"=z-[,SuQVZMrF hzCFhȐ!ݴi0`ڵk]v9eZj9CgyF%]+O8V Ef(V&i̘1 !ƍΩnݺ@ ]deenzIʕeup L0dFC X$cƊ(Bi~os J~kz3CA9LMMu+ դI T 6III^SN}4rզuW w$)z_30ĬE+/X@< PrrS 68nذS۷w MmhCs |ۊ}:ϟ/-8塇AIC:^9s̘9̚5˯)Ln'' 4n2eaF'=uqXYN/65vز*<+& l& l& l&NJ(B;wNrrrt= dl):LŊ%>>^^2ZjҬY^7##CׯcN>-_}p˖-:aժUuPf m63L7/XDDD⟴4Yf:Çw.ׯ_5j5JzsZƍV^ޓnݺ9BwyX=ri׮F`׿vg %+~(BY͛7kбi&6lXaPc?~״`_R z dh{z/l"""@rM;v6i͛5kٳg*]&aE#VDDDhݺuұcGILL;Sk] K^F ZBi~os)Ye׊NJ AK흂@YZY.jaz*T`u{19vL8Q;x4h@߬ hri9r}}Ԁ͚5+}*,n(&"" Edpw_ 47Yʔ)QZ@"""jpFKӟ+VDDD6ɫmYϋe=TxxW MXلMXلXQ`@l ""XŦ@""""+""c~'#۶m|/33SU&͚5+,y[Pu fc9wugsg7oݔ r{9w}:^y;0Mv֗!r|moQa`EDDA:$?1\"M6uLի˵kפ~獡c0qn+_]~]jԨaȚQFIϞ==ޒe:+8uT]C<}DzrJHDDTUGቁQ,1\ B( Udb`EDD"G "+""""P"")QŊ%>>^֭4 j֬&*Uiy|-K.ɯ~+]iFgwRBesrr$//O q]6cڵsZj:ه~ysuv*~{8cf4h6п=+VDDD&==]_.5jԐǏk2j(ٳӴ+VիWe„ ҢE ] o^ӧOkR|y P\j0vuՓSNƍ5x1߸q[o%e˖-Xɚ5kt8s̞=i˗Knƾկ_߱``EDDBP2rH}vZ \heV .˜9s d1 S9BF'{cܹ~~ټy86maÆ[fϙx._ G{; """ M~gϞu;RJ/֭[_~ 0%ľ>siٲ05r]Un޼)cǎf-[Ga[v`1cEDDPl߾]7o<3&:$#Fp̋|iڴݻW>2dX'N 2Hф7_֭[';vDmȐΝ;;ӰaC)Y6bAݮ'Ojҥe̘"""@e̘1X:nСkO?-zʕ+X?,7npx"  Zom._,Gqz,W~۷O]aQÅ&Au/\ ;w_s?\1cEDDԩ#;\ ygѦ3d|VZE2qDǼQ4~a-F@c\Fser-_j.]ڑB!>5QB  L"Wv]V1X`물-]k b%:RC=4o}g^_:{|,dm۶mQFAVVeP߽{wYl\rvY`0""" @+;۴n}?8t3?5R|utI̙,OGyDm&o ? =z uQȒ=裎O<^hs1)SF;wŦ@""CO vQut0sL1s'hVjUkwF<#bRD ynMBskTޠH5^5]húEU#RFȴ9=ouׯ_/6lpYfYb\+ňJpU4 nm톬. Ɲ ,#.нEDDDDz)XرcZ ͋ !KGP+VDDDD~r k)b0!itTof,@-fkA* IENDB`sJDd! *O#0  # AbI*rJ4JY1cIŗnI*rJ4JY1cPNG  IHDR!v+gAMABOiCCPsRGB ProfilexKaǿwi I5ޠ`qy-%%-ziem-BK "W!JjI/}> I(֊}V6ªEG}6!1r%av{9~|Αۤ%82ް XeibXJܯs>f|lX.EWP:S5ä="cJ+T۱>PF10\]cE'PUNHpӝzm\{wնNljPںY *@5 B'Yo;͒@uS|27xy쓨f)/dee6?e%GeBQHAyR=r{ pHYs  $tEXtSoftwareQuickTime 7.6.6 (Mac OS X)_tIME ,2&<^ IDATx`UMf 2dL'**jm*ڷu׽8jkZj WV2ae;MEHHsnsz'Ws%D,w@n^P/(B! E"xA^P/(B! E"xA^P/(B! E"xA^P/(B!|]~Q_|ˍ>훻&/GCmҥK믿f۾6/w{n_yM> Ͽ_/ڏ"/Bn_^kVSfu!5˗ۗo6xْ%>l&DIc\2Cm5[p'jkʢn$"}q>}kȪOTVG$AEH+64v¨/ b$"SIfgQ7$#=4& vɆ_rI1!ɤYQQD^gb]GHCw7'&"/Bz }i !߮]D^,W4)KY&'˴ZGF$AEJo0!v`ݑ3d1ȋe۾Y^1mFIcnhvcYd/ɤK9s]5&$u(yyVѹ=f_#ijuKKsobwͻݵ~g+)^E#Fĉ}7eȋ/gδ/.% [RSc,ϽGn?n).&b7ʉDm"+/-U4,<>~hֶm[ر怜}vL6wߙBZvL[Zi̳cmڶ3mن7Uܱc{gEѐE>,=;Ff@NӻtqQ_1 c^cv>kgTU `6fLMDllذnݢn$Z߮V[gǴcKv̮|`v%c&LI/1 h#. KTRbOj_֟#b=h9^zBvcBaSXus'^c[Oˎ-47&dtTv_g(,/1S{ @xɎ9N9%=;f(c^c:Ԇ@Ni_Td#s1@Z>`QɎ gE^,۶5ޝrX1EEu1^9;栃n Sc??K_g1/1O(;FStrjr|cdΎ~<x̙1:E(sV:N$fڸmjj]c-x?_YWk%wZkƝ'폇`D2Y4gM?ކ P`ۧ,5B6a ,{LՔԬb7Mnii]tV\\cwܱ=̎E[d5ʎSF[2b3fHN<96nkۻ]?277,<~~h?sUcƎI/1);fĈ옍79/1eefmVc)^c}+#;Ev crjH˕DIEHq6_=\zvLd#"/B򬽦~UzvLQ7x%;m9&KYzeSN?0U#FiM{b"/BWVC L9Kvkv1@ߍ629]c)~cJKͺuKώi>Od 裺1 c';%;l΋ FȎ^xɎy<̎ !c)gǸBc}6sv;D$A1D]v 1us'c>:K!;xAv _vWdΎ7.&d|ѣɎ ELBeǨI͎I$|RG 8Oۗ_NoEyE1B&鮛_a[mUkyyf~͛;QE[|u6pCMY)Lj,=ۦM`{[ Q6j|r6tUWb7MnII}VTTc?AEÇAqhKFlƌɓ'G}f3mp{{G&/GC^cPvəc;,&d<6` euWMxɎz,gIώj+c!y՚ ~ӵkD^,zC:*K!;xAv eČ@Nl g֚ous'! mmv5cffuѯZUe`{wQ_1ȋ]u1U)QdS"/)(m3gcMxɎ)ScfȆFg  ;x%;fw1S);fnKvݺ^ K͎Y/1f%%>옶mnKv.ʎ1u^c0 FdǼ>EwHc~c aW^YTϏ9?1_~iSc/I{Q7j-%컲-)XIB&[Pki[o'<k h_߿KZϞ=mvݔdǔd޼)E"(F%#XVaծϷ5QQRXؽM/Y$~aa~ O| V'4_%/5558z^vᇧ}׊=f;'ـ7U6l07mϿ_ߺgعgo nZS)aYi߻t{'< 1[3L 5xGE@sse1Bv 9_v{glAD^&Ȭsgy0ʎ)+9 4@Hn_G,"ma ̮V7H.[C,Fv o[h)vϲnxȎPJ6'(<6^Kv#avLk μdl'!={hM{rdǔ~vUfZP7E{ kl;LOv[ۡjboV Z]Wu=s 1rnJ%)+;9snrLW3]#;@m/3o fŞlDS\l#s饙c;rӽ~:1ޓ&mvyMnCfK6®1d6pر[zrO{}YX177ƍOv 7ӏCҚ4u{iqYtoӏO:ĘBNҨ<)s?6]w%;yRQUeOo#=7K@}oi%nȴn1r\{9:Xֆ]vˎI#dr1fÇiUH6_vS6ml+o{N9JOPc^c1'ҳcޚN>w VnWv+B"|"n1/1E*8,HώIj^czk8qbԗ1e`js꩙c8"& L%;$N,=ۦNhtmjveQ6fv~jl~6uTw7MnIIzVԩCqcx~~lw2ڼd|f6ng8ݖ/q˖Eߨ̷Yų Zx_#im,pjݻu0}QJiG /2?yd8G<~׍7w3S̘ R[k];v]FݤFm/F}}7IhS-p5-5,ʎy1;uXY̦`s/ 77wZEH"BI17@hm'{Zvͼ˴,~K5'Nd`id6mBz]7+IIkʠAf{]XȋJ'ڇʎ91˗|v@ QXQho\IRa)@cy⹂b:u.!?1|bvMd@ s:_@\.pnKm @JfZú؀ScZqO"y6+ @?# ;y1-~ĚGӗmˬ 0a9K3z#+yɎ)mU ԁ2׋%;;:VQďC&N4o 1@Snw;4TC_L_AGcZnkW 0-`gf ?E촕1$ VErlN|{miRWoUǫ7nO5{v˷5xɎK.ɜ>Q7 @>XfFo;0wZ /1c'LHώY :}Os4/1tYS Q߯n[Skmen⡧Z옝s-1ÆvKIrEMvMr-KvQQ_ $- ]qvghf> ?2n\z1$h#Ιc׆Tխz# 6*Tݧۈ5QS0q߳4^3 |=UvbwͿk?랟F>?qS\xZ-W+$F.\hϝgyU۶SQm*tԩdzIm/,_ݫk&dx?d9ry2sL檫2eǤsQjmqeej틼/lJf5 w%-Ύi{Qx{\rR}U$*WsѶDy5^P?7{䑴e c-(:Z5Ā ݖ&J=c=?zo-~hߓռh-1Fb1[mm}!T6f%;͞=h[C 0@BvL@[>`"Z~Y-^]X#cԜ=Uv hDTp̟WNmv߃6`=IvJ]vLsyҡFgΎ?>&xqSO֚J_l`Wv̇;!K\[ؘC!;bꡇn5x9XDZEN X~j.^cvn\ݎ:lnOv;ۨ&K*p5 X4Os_jY-:K^+f>EwȺBpOmծ\vnJ->)X-L}``hck 63a~Zv-[WgGc1 JEsc~8-;ƶlh@y"yW[1c~j.hբ_'dR{k숃 FȎ^DhF$UMnӀUf5clp!CȎA0mO'r7nm*4CKݶێuۥnSAb=M.qin+rКyɎ޽9.]nYnK;>1nm$kʶz(ByɎI&mҳbRWu֬L?!-FuqQKvL?eOdf_7?7c~c4E2g0E';fP]9`cβB[5(m[-3ݖiv R dcBz(svQ7 Zܶ:g /~۬`4`[]X#/1yĤf}RuY0HYwMwZ-驧NsJ~:r옧vFsNԗ4m{O\D";tU*v۶r|궓1}v۲6؀O7{ի~f[m]Xkd2w>;f)-uƅi%}n{˦/w[sip֑}3c%1>ӻ71Q4+Be2m:^f>tv[G[ڻ-RYL1Byk֎옷{#8 K#]b[w P;7ù w10xTh"nꖻBz!{$1 誫7OY PoAMZc:[5?^5o3+)Yu׸dǼ옣[?3d?4s!!>)B[C_%;d[o53w+%;f?7Nnd촓4/ @syg3J3x6Ŕ옝c Ih۞suC-6Ot>suwvۦnd,n3;-/4{My'=U,5Yk IDATrKݺЯ_ݎ5̃Qt^Hhi7kQ_SsYgMb֡êcf7h6qv>Zbd?_\lf+n>[6~z, Ssټyfu{ԕl\ oR{ ]}u񙮀p_ӝn ɎyMO_L9XYu 4W%e50+*>8n_ SE +[ucjlb;8 h"/B+;G}1dd"Ki/OnuEfn["P2bi;+;m4-n{˦?F"d-'ʴJtsm|w[EVH('FMUx;{cۑ̷YE컮f7md~Y%疻c-k ʿ ε.7c -&]14-\sCے*Sh]gwu[9u]@ְ +]Mߥ 1^yA+N]%Z_Zwݒߥ WSܸWKN_x:zj_O?mo}Ua]%ma;ӯq҂~Jk?[rӇ "9/mnk <~e{)LSF)qJ4; JR*l 7l?+ ԅ}Bʎv[cThW[` v{ۯ][0s(H1=zҰ2E0M}/@xiOH?>xrNv~5y8~~ Sq LdegIdnjՀ˜4gg71%;=lԱǒh}6lڵ[uLw;Iq%;&_3a4%7'DEH3Q -k%;_e( vfX\yRኍwƜuVԗ1eAʎ9)F1EeC"/B mgew_]vIȋd2i˔㊑ /^kDdLl}ӋD"O L=`TOϜsQ7 x';fcqd/dǼV6jҤ1ҩSDHXeTV֟cmFIEHIA1nL1lu! \L~634cd/d|ٽ긣B2iEQ7j-%lN9aީZeA&5 onab0aM:>;QEkeLɎQFLqq^>_u֒Y~|+).dAw7M]|)v/,J+ڿ;///'~cli)tѶT]tݶnJZS^iwM: Ͽ_/ڏȎ9uى'uXEI'CdМ/v=iOɎ6wT 3zNWU캫k-Kv̴=m 'gǤv]w1 RZ%/1 %)S5H4Odl;sdΎtӨ@Y9=7?Oa^cWQ_7qb] IrЮ614kDvL\ `voώ-A %;c~vƇl]ݸ\u;9KvLcUzL5547/1o{"1ύ_}r1 /1㔓\͎ xɎycmLv 9Ovz@̦cR$;Fv 1 1[!Cn "6̎i]=1S\us'!@1{U2!;e`ʎ3gvXMx!6D҉gl##v4Wg߯1 i-SzC^}b#jk&kjjnIIWZQQ=⋻cUk<~~h뮻1hcN:~v{ኒq̷ QGe|mI~f~oy dM;_OWXA j0`u~;QE[|uw3ꉼsFz@**Ҳc:ujzIR.nۢ=zZaki9W׭[7o֤Eh("zg첋fMwqg@D^fǜrJ#Iȋ=;Fŕn7:10lMĐlv1}dvGnYKvL+DC”U3Ȏ xɎpMƍ?;FȎ gɎy5cqd/"/B:^oaώrÇp@MD^,z=1uU@NSe[[jgǴic2glyMDS]m_F}i#d/Ȏ^xɎ옻ʜ yɎY̘֫[$5CJKnKvGʎ3&cIm½veums)c֖nu\[off?enY옵[GU] Xhc^d/"/Bثlc{|21ȋD45w|.]nKvֳf=Dzv̠Af[luΊ0IZ͖-+@ˎ/9lMb_* WUnY)t`Uy:h&E_vE٠g\i3wa޽-+^V7%uq%jV٥f1z-+Ɏv|].Wswfm%?W>Nbԛ!xT&L:+%#eee>B夓NK..b[tipk zZ>~m10,ʠ8S'?-ZȎ:(;뮳B{7W޲Q᢯ ѠS'l}Y \m|DQkkE]'J"{}P4HuΜ9+{X",Y,"A/E[ P-xרPYd}GV[Yј P5/7x!  P+bgyfPTWO=sTÇC=<#Fw<믿^9`<38}_28^veAs9ք1!d!nhf wyN8ᄠB`4VD=x4#N4)8wrHk~AG8DBvБGܖQoɂ i}28%2juhe#އfzBPψ CC 18K4x[mȑXKQ;FeC֤mq˗uhfEw]r .]!o dh, -ӟ4xM6ϧ!7zj =W]uUC}sڼ6 ,TDhE8DPN WKfh@phCkK&O7*B`{T̢\;-&|2֨l亷`hfhLMU0zBz=4 $X]׭ 555}^L5t.}jΐ!C<s.ƶ' []{ 5[1&/2NѭH-vIbH:&k@*_Us.D+Vs'{~<$[mh-f_wمhҊŵy+.ںjfBy.\+J7 f$4\!4XQ]iDr*8M3+<`q ~L0A˜&Aؔ)SV.PZ210U8EnS1  z}]?alhL)1ק^+g}f_6hJg?w,Ԟ0R/m,HcZiz7n~bQJZZ[o*|LkZV ;>l: ߩ=hϰDW[^1/V~NߋΧ5XѵƏߢQ|h ,R`u1Z~=5;F/1Z[#\KD뀤fhj욲c4UfhꮦJv ZZ$MkʵHf\{AT5V߇uEӃVhpNK4a; ,);F/ZLLK_y7!dhյɎQehqv)x袋-fǨ`PbAG}r-i1[lE+n uCT1*4 r5׬\U)N8:-ծ_˼ZD1VEYLX퉧z* []v_2eǨWC QoDǩ`Q1L0;F-*X.R{W0;FQƌ }n\!Q*(X*שErjcx JoUlI CZ˖ ݧN4m}7yV9>4mVdVz_m}!I͎ EjvL8&#SvV#U/ctG?w1(*T .;F'EA9S{+w}꘮U\O9唕KчfQE˾hic:mIj9զx+o㪫ںC%/h'RS[0?5;G z0;fc±av^fǨhX]vkUȄZ*Np~8PrۤI;|1Zv㎳s=7j Դm6 +wߠ7F)}b!mDzNT((^)M+kE=?zWvbqe>̎Q`Pn*6СC]W10е2;FmTtPQϊ  :Ɗ>}z֑ ?-{=8u;H}/A@U4^00xAhc%]MȔhHvt,%w`ISJ"7/1!ؑ"X 5+/7˯ ӯ3kGt Z6zH￯+FWQR^>xm9rdVdhEx գ-ɞ[Sn';vM6-Xmmx-^F8_|9tc!黚xbLd c fx fhp3"cNTZFfDŽ fǤ^+lڳ>;Xo?9hV>6+H_):'v5A~HHhi'|22b&HK}~t>+5oFoq{A";Lڕ({GW\f]/ZWDKZ=ZDy,zUv2WN?z1zL-ƪH]/sL(ТeZ#\^x/BP쒻]IDAT1^.(N{Bu@kEN8ᄠDE W`}ڵZl~e/B;/}*.Vz^$O9ヶ[%GuT͋bZHLKyO+TN.;f= cT˱k3]Pvetk$5;ꫯ2ef^}^ Bj1?-]z&T(Oyjz?Th)O&Ip{.(=j'-6~ OŇڧ[;ZMT2}/h>!3^Maz~! ˎQOCcc[ʎ_*(fǨ c"f>cw}yAIjz\t~ݶ؎pUWj㚨{g!/zxҫ }o;sg+X͇"bƽڇ*^?vc_1N^м(B܎^P/X'bGw+WM1%+ُ"bg+cLzvtn'<c vDSC_/(;`alWZ#hܐfhS}܆HfhuW-ІCY`Y/;FSeW%0;n_~9x_:61:c0%Zts9'X+DtMՊu~a{w)!M ;wSi©3:oxc h wAJ(DKϞ=;LQv2P6VJdZ7C[eE/Kri,Ůh5Fcj5rsH]\EђBEk1ZU(E7ZFSOz(Xw "'|r⪞E5Z#Dkx2/zB i--7P/VBecfǨQ0;F+ Svz.q*F O%5;F_z_*N2eDŽjhq0]#r\Υ-N= &!-jbQ!"ZlĉcU0!(B v4f´]8Vf>}1JՋߤ1ni̹Z.UE;1;C[C1-~}=*nNbROnC]έ{Ta%V蘾][ŏzehv Ď-6XIˎыt[zty.aljvz7T`fǨie|A5̎ VDԳ"ӧOίI:zNB*vtoo18gرvuKʫPpw{C ۆxcv2zae(AW/i c4C cct3BY3L1*htNhAptL1 S}2|GGmUΌ [n$_ߧ?}-"xE"xA^P/(B! E"xARg]IENDB`_HmH nH sH tH @`@ NormalCJ_HaJmH sH tH DA D Default Paragraph FontRiR  Table Normal4 l4a (k (No List 0U0 X9 Hyperlink>*B*PK![Content_Types].xmlj0 u$Nwc$ans@8JbVKS(.Y$8MVgLYS]"(U֎_o[gv; f>KH|;\XV!]օ Oȥsh]Hg3߶PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!\theme/theme/theme1.xmlYOoE#F{o'NDuر i-q;N3' G$$DAč*iEP~wq4;{o?g^;N:$BR64Mvsi-@R4Œ mUb V*XX! cyg$w.Q "@oWL8*Bycjđ0蠦r,[LC9VbX*x_yuoBL͐u_. DKfN1엓:+ۥ~`jn[Zp֖zg,tV@bW/Oټl6Ws[R?S֒7 _כ[֪7 _w]ŌShN'^Bxk_[dC]zOլ\K=.:@MgdCf/o\ycB95B24S CEL|gO'sקo>W=n#p̰ZN|ӪV:8z1f؃k;ڇcp7#z8]Y / \{t\}}spķ=ʠoRVL3N(B<|ݥuK>P.EMLhɦM .co;əmr"*0#̡=6Kր0i1;$P0!YݩjbiXJB5IgAФ޲a6{P g֢)҉-Ìq8RmcWyXg/u]6Q_Ê5H Z2PU]Ǽ"GGFbCSOD%,p 6ޚwq̲R_gJSbj9)ed(w:/ak;6jAq11_xzG~F<:ɮ>O&kNa4dht\?J&l O٠NRpwhpse)tp)af] 27n}mk]\S,+a2g^Az )˙>E G鿰L7)'PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 /_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!\theme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] =d78Htpq  ?@ z{;<-.01!!##%%&&((****....%0&0(0)0331323%58899z:{:::|;};;;;;\< =00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F*/5 DE'*+-./11&1;E(),08@0(  B S  ? = =uz   )v$).7!KSX`4 > U"_"""9#C#######% %%%&& ((D(N(P(](")()g)p)q){))))*P*]***d+k+++G,Q,R,U,,,,,@.J...33o5v566::;;`<g<s<|<<< =$ > ""E$_$%%G,R,;K;;;< < =::::::::::::::j2 =@=@@UnknownGTimes New Roman5Symbol3 Arial7Courier AhffޜR2k!24d=K#q?i0GINTRODUCTION TO COMPUTATION AND PROGRAM DESIGN: TEACH-SCHEME REACH-JAVA Viera Proulx Viera Proulx Oh+'0) 4 LX x   'HINTRODUCTION TO COMPUTATION AND PROGRAM DESIGN: TEACH-SCHEME REACH-JAVAViera Proulx Normal.dotmViera Proulx2Microsoft Word 12.0.0@@tJ@_@_R2GH'PICT'@b HHb bHH1bb !! Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ Ƣ{ {{w{{w{{w{w{ww{ www{{w{w{{ww{{{ww{{ww{w{ww?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry F9hData 31Table)WordDocument$dSummaryInformation(H)DocumentSummaryInformation8CompObj`ObjectPoolgg F Microsoft Word 97-2004 DocumentNB6WWord.Document.8