ࡱ> $M@ :bjbjצצ h2g9hhh$ZZZP [[]cccc ،d<4RGh=z~@==cc=chc=k26hƪc] `@Zn,ϰ0,մ@մXƪմhƪ p0"“ޓ_pppDSZZ Guide to Relational Databases and Microsoft Access by Andrew Virnuls Contents  TOC \o "1-1" \t "Heading 2,2,Heading 3,3,H1,1,H2,2,H3,3,H4,4" Database Structure  PAGEREF _Toc12176040 \h 4 Fields, Records and Tables  PAGEREF _Toc12176041 \h 4 Field Types  PAGEREF _Toc12176042 \h 4 Key Field/Unique Key  PAGEREF _Toc12176043 \h 4 Indexes  PAGEREF _Toc12176044 \h 5 Validation  PAGEREF _Toc12176045 \h 5 Type  PAGEREF _Toc12176046 \h 5 Presence  PAGEREF _Toc12176047 \h 5 Uniqueness  PAGEREF _Toc12176048 \h 5 Range  PAGEREF _Toc12176049 \h 5 Format  PAGEREF _Toc12176050 \h 5 Multiple Choice  PAGEREF _Toc12176051 \h 5 Referential Integrity  PAGEREF _Toc12176052 \h 6 Relational Databases  PAGEREF _Toc12176053 \h 6 Data Redundancy & Inconsistency  PAGEREF _Toc12176054 \h 6 Multiple Tables  PAGEREF _Toc12176055 \h 6 Degree of Relationship  PAGEREF _Toc12176056 \h 7 Searching (or Queries)  PAGEREF _Toc12176057 \h 7 Referential Integrity  PAGEREF _Toc12176058 \h 8 Normalisation  PAGEREF _Toc12176059 \h 8 First Normal Form  PAGEREF _Toc12176060 \h 8 Second Normal Form  PAGEREF _Toc12176061 \h 8 Third Normal Form  PAGEREF _Toc12176062 \h 9 Normalisation in Projects  PAGEREF _Toc12176063 \h 9 The Normalisation Oath  PAGEREF _Toc12176064 \h 9 Access  PAGEREF _Toc12176065 \h 9 Fields  PAGEREF _Toc12176066 \h 9 Field Types  PAGEREF _Toc12176067 \h 9 Naming Fields  PAGEREF _Toc12176068 \h 10 Indexes  PAGEREF _Toc12176069 \h 10 Other Options  PAGEREF _Toc12176070 \h 10 Relationships  PAGEREF _Toc12176071 \h 11 Referential Integrity  PAGEREF _Toc12176072 \h 11 Queries  PAGEREF _Toc12176073 \h 11 Counting, Totals, etc.  PAGEREF _Toc12176074 \h 12 Derived Values  PAGEREF _Toc12176075 \h 12 Update and Delete Queries  PAGEREF _Toc12176076 \h 12 Forms  PAGEREF _Toc12176077 \h 12 Form Properties  PAGEREF _Toc12176078 \h 13 Choosing Controls  PAGEREF _Toc12176079 \h 13 Combo Boxes  PAGEREF _Toc12176080 \h 13 Sorting and Grouping Combo Boxes  PAGEREF _Toc12176081 \h 14 List Boxes  PAGEREF _Toc12176082 \h 14 Input Masks  PAGEREF _Toc12176083 \h 14 Enabling, Disabling and Hiding Controls  PAGEREF _Toc12176084 \h 15 Tab Order  PAGEREF _Toc12176085 \h 15 Startup Page/Menu  PAGEREF _Toc12176086 \h 15 User-Defined Queries  PAGEREF _Toc12176087 \h 15 Displaying Information from Other Tables  PAGEREF _Toc12176088 \h 16 Combo Boxes  PAGEREF _Toc12176089 \h 16 Sub-Forms Based on Tables  PAGEREF _Toc12176090 \h 17 Sub-Forms Based on Queries  PAGEREF _Toc12176091 \h 18 Referring to Values on Subforms  PAGEREF _Toc12176092 \h 18 Requerying  PAGEREF _Toc12176093 \h 18 Visual BASIC for Applications (VBA)  PAGEREF _Toc12176094 \h 19 Message Boxes  PAGEREF _Toc12176095 \h 19 The If Command  PAGEREF _Toc12176096 \h 20 Setting the Values of Fields  PAGEREF _Toc12176097 \h 20 Practical Examples  PAGEREF _Toc12176098 \h 20 Clashing/Overlapping Appointments  PAGEREF _Toc12176099 \h 20 Discrete Appointments  PAGEREF _Toc12176100 \h 21 Variable-Length Bookings  PAGEREF _Toc12176101 \h 22 Merits Database  PAGEREF _Toc12176102 \h 23 The Problem  PAGEREF _Toc12176103 \h 23 Tables  PAGEREF _Toc12176104 \h 24 Queries  PAGEREF _Toc12176105 \h 24 Forms  PAGEREF _Toc12176106 \h 25 Reports  PAGEREF _Toc12176107 \h 25 Macros  PAGEREF _Toc12176108 \h 25 Stock Control  PAGEREF _Toc12176109 \h 26 Troubleshooting and Miscellaneous Tips  PAGEREF _Toc12176110 \h 27 You May be at the End of a Record Set  PAGEREF _Toc12176111 \h 27 Converting Between Different Versions of Access  PAGEREF _Toc12176112 \h 27 Concatenating (Joining) Fields  PAGEREF _Toc12176113 \h 27 Date Queries Dont Work  PAGEREF _Toc12176114 \h 27 I Have Trouble Referring to Form Objects in Macros  PAGEREF _Toc12176115 \h 27 Help On-Line  PAGEREF _Toc12176116 \h 27 Leszynski/Reddick Naming Conventions  PAGEREF _Toc12176117 \h 28 Level 1  PAGEREF _Toc12176118 \h 28 Level 2  PAGEREF _Toc12176119 \h 28  Database Structure Before you can store information using a computer, you need to think about exactly which pieces of information you are going store, and what type of information they are. Fields, Records and Tables The first thing you need to think about are the fields you are going to use. Fields are the categories of information that your database is going to store. For example, our school gives out merits to students who have worked well. To produce a merits database, you would include fields such as Student Name, Tutor Group, Subject, Date, Reason for Merit, Teacher, etc. Once you've decided on the fields you're going to use, you can start entering the data. All the information for one person or thing, i.e. the information for all fields gathered together, is called a record. In the merits database example, therefore, each student who had a merit would have a record in the database. All the records are then gathered together in a table (or the file, if you're using a flat-file database). Field Types Most database programs allow, or rather require, that you give each field in your database a type. The field type indicates what type of information is going to be stored in that field. Common field types are: whole numbers decimal numbers textdates Boolean (or yes/no)Some more advanced databases also let you store multimedia objects, such as pictures or sounds. Field types form a basic type of validation in that the database won't allow you to enter, say, text in a date field. They also facilitate sorting, as the database "knows" more about the contents of the field. If you were to store numbers in a text field, for example, and then sort them, 11 would come before 2 because the character 1 comes before 2, and the numbers would be sorted in alphabetical order. For our merits database, then, we would use text for the name, tutor group, reason, teacher and subject, and a date field for the date of the merit. Key Field/Unique Key In order to produce a logical structure for your database, there should be something unique about each record in your database. This will normally be the contents of one particular field, called the key field. For example, if you had a car database, then you could use the registration number as the unique key, as no two cars should have the same one. Sometimes you can't identify a single key field in your database table. In the merits database, for example, there would be no one thing about a merit that would be unique. It couldn't be the date, because there could be more than one merit given per day. It couldn't be the teacher or the student, because that would mean they could only give or receive one merit ever. It's even unlikely to be the reason, as some teachers are just going to enter things like "Good work!". In cases such as this, you can create what is known as a compound key - a combination of fields that is unique. This can be any number of field, but should be the minimum number required to produced a unique description of the record. In the merits database, for example, you could go for a combination of student, date and subject. A student might get more than one merit, ever. He/she might get more than one for a particular subject, and possibly ever two on the same day, but it's probably unlikely that he or she will get two merits on the same day for the same subject. Indexes The final thing you can create for your fields is an index. Once you've started using your database, the data can be stored in the table in any order, probably the order in which you entered. If you've got a lot of records in your database, then sorting and searching could take a long time. An index is just like the index in a book - it is an extra bit added on to the database to help the database program find records quickly. You are discouraged from indexing every field in your database as there is an overhead involved when creating the records, but you should index all key fields and any fields that you regularly use to search or sort. Validation Validation is the name given to the process whereby the information entered in the database is checked to ensure that it makes sense. For example, you can use validation to check that only numbers between 0 and 100 are entered in a percentage field, or only Male or Female is entered in a sex field. It cannot check that it is correct (the process of checking that the data is actually right is called verification). Obviously it's very important that the information in your database is correct if you're going to get worthwhile results when you search or sort the data. There are various methods that you can use to check your data. Type The use of field types (see the Structure page) forms a basic type of validation. If you make a particular field numeric (i.e. a number), for example, then it won't let you enter any letters or other non-numeric characters. Be careful when using the numeric types, however - if you use them for things like phone numbers, for example, you won't be able to enter spaces or any other sorts of formatting. Presence This type of validation might go by different names, depending on your database program - sometimes it's called something like Allow Blank or mandatory for example. This type of validation forces the user to enter the data in that field. If you had an address book, for example, you might know the person's address and not their phone number, or vice-versa, so it wouldn't make sense to make those fields mandatory. On the other hand, it doesn't make sense to have an address book entry with no name, so you should check for the presence of the name. Uniqueness Some database programs allow you to check whether the contents of a particular field are unique. This might be useful to prevent users entering the same information twice. For example, if you were creating a car database, you should make the registration number field unique as no two cars should have the same number. Range If you're using a number field, then you might want to limit the range of inputs. For example, you might want to limit prices in a stock database so that they are all positive, or limit the range of a percentage field so that the values entered are between 0 and 100. Format You might have a field in your database that requires an entry in a particular format. A simple example might be a date, or piece of text of a certain length. More complex examples might include things like postcodes, or National Insurance or driving licence numbers. If you're using Access, you can define your own formats using an input mask, which defines the valid characters. Multiple Choice A good way to validate fields is to use multiple choice responses. These might take the form of a listbox, combo box, or radio button. For example, you could create a field that would only allow the user to select from Yes or No, or Male or Female. This can be an especially useful technique in database applications such as Access, which allow you to dynamically generate the choices. For example, if you created a database system to manage bookings, rather than checking the dates and times after they have been entered, to check that there are no double-bookings, you could use a query and a combo-box to only show the available times. That would stop you making double-bookings in the first place, and make any subsequent validation much simpler. Referential Integrity Finally, if you're using a relational database, then you can enforce referential integrity to validate inputs. This means you can check entries in certain fields against values in other tables. For example, in the merits database, when a new merit is entered, you could check the names of the students and teachers against the student and staff tables, to prevent either spelling errors, or the entry of merits for students that don't exist. Relational Databases So far we've only discussed having one table in a database. In the merits database, for example, we've talked about using the following fields to store the information about the merits: Name Tutor group Teacher SubjectDate Reason Head of year Tutor Data Redundancy & Inconsistency This database structure would do the job, but think about what would happen as you enter the merits. For each new merit you add, you need to enter all of the teacher and student details each time. This would involve a lot of data being duplicated, and therefore takes up a lot more disc space. This is known as redundancy. As well as requiring more space, and time to enter, a number of other problems could arise. If you're having to enter all the details each time, there is a risk that you could make a mistake whilst entering some of the details, leading to, for example, a number of different spellings of a student's name. And what happens if a student changes tutor group half-way through the year, and you want to find the total number of merits for a particular tutor group? Multiple Tables The solution to this problem is to use a database that consists of several tables - a relational database. This involves separating out the various fields into logical units, or entities. Each entity would normally represent one person, or thing. These entities are then linked by a relationship, and the whole database structure can be represented by a thing called an Entity-Relationship Diagram. Access allows you produce an entity-relationship diagram of sorts - an example of one solution to the merits problem is shown on the right. The logical units, or entities, in the merits system are the students, the staff, and the merits themselves (remember that you can download the merits database). This means that the details of the students and the members of staff only need to be entered once. When you enter a new merit, you only need to enter enough information to identify the student and the member of staff (i.e. staff initials & department, and student number) - the remaining information can then be looked up from the staff and student tables. If you're using Access, you can create forms for use with the database so that that user can select from staff and student names, whilst only storing the initials and student number in the merits table. I have included the extra entity, containing just staff and department, because each member of staff may teach more than one subject. There are also more entities which are not shown in the diagram, such as staff and tutor group (identifying tutor and head of year) tables. The relationships (i.e. the lines on the diagram) link together the fields in the two tables that contain the same information - e.g. the student field in the tbl_merits table and the ID field in tbl_students both have the same type, and both contain an integer that is unique to each student. This means that there is still a very small amount of duplication (just one extra number per student), but nowhere near as much as there is in the single table solution. A field that is linked to another table is called a foreign key. A foreign key in one table is always linked to a key field in another table (the key fields are shown in bold - more than one bold field indicates a compound key). Degree of Relationship You will probably have noticed that the relationships have little symbols at the end, either a 1 or the infinity symbol. These indicate the degree of the relationship, where the infinity symbol means many. The degree indicates the nature of the relationship between the entities - for example, in the merits database shown above, one department can have many members of staff, one member of staff can give many merits, and each student can have many merits give to them. One the other hand, each merit can only be given by one member of staff, and can only be given to one student. Access doesn't use the standard notation, however. It is more usual to indicate the degree using the line alone - with a single line at the one end, and a three-tined fork at the many end. Obviously, there are three possible types of relationship one-to-one one-to-many (or vice-versa) many-to-many although many-to-many relationships are frowned upon in database design, as they introduce ambiguity, and should be removed using Normalisation. Searching (or Queries) Another reason to use a relational database is that it makes it much easier to query, or search, certain fields. Imagine that a library allowed you to borrow up to six books, and had a simple database with the following fields: borrower name address phone number book1 book2book3 book4 book5 book6 If you wanted to find out who had borrowed a particular book, e.g. "Databases for Beginners", you would have to have a query like this: book1 is equal to "Databases for Beginners" OR book2 is equal to "Databases for Beginners" OR book3 is equal to "Databases for Beginners" OR book4 is equal to "Databases for Beginners" OR book5 is equal to "Databases for Beginners" OR book6 is equal to "Databases for Beginners" Nice! Now, if you split up your database so that you had three tables, it would be much easier. You'd have tables for books and borrowers, and then one for the actual process or borrowing a book, that would just contain the borrower ID and probably the ISBN number. If the ISBN of the book you were looking for was 0123456789, for example, then you could find out who had borrowed by just searching for: ISBN is equal to 0123456789 Much simpler, I'm sure you'll agree! Referential Integrity What would happen if you had two records in your database that were linked by a relationship, and then the foreign key or the primary key changed? Or one of the records was deleted from the database? For example, in our merit database, what would happen if you gave a merit to someone who then changed tutor groups or left the school completely? The two records would no longer be linked properly, and "referential integrity" would be lost (i.e. the rules governing how the data are related have been broken). There are two ways around this problem: The simplest thing would be to stop the user making any change that would threaten referential integrity. You may have already noticed that Access won't let you delete information from a linked field, or enter information that would prevent it from being linked to another table (e.g. in our merit database, it won't let you enter merits for students or staff who don't exist in the student and staff tables). Some database programs allow you to "cascade" any change to keys to other tables, so that if you change a key field, the matching fields in other tables are also changed. So, if one of the students in our student database were to change tutor group, for example, the tutor group field in the merit table would also be updated and the records would still be linked. Normalisation The process of refining the structure of a database to minimise redundancy and improve integrity is called normalisation. When a database has been normalised, it is said to be in normal form. There are three normal forms: First Normal Form A database is in first normal form if there are no repeated fields. That means that there must only be one field for each item of data you want to score. The library database described on the previous section is not in first normal form because it has the fields book1, book2, book3, book4, book5, and book6, which all store the same information, i.e. the name of a book. First normal form not only facilitates searching, but is also more space efficient as there wouldn't be 5 empty fields being stored if borrowers only had one book. Second Normal Form A database is said to be in second normal form if it: is already in first normal form has no fields that aren't dependent on the whole of the key That is to say that all fields are dependent on the whole of the key (where there is a compound key). So, take a look at the merits database from the in the previous section: Name Tutor group Teacher Subject Date Reason Head of year Tutor There are no repeated fields, so it's in first normal form. If you made name the key field, however, you could see there would be fields that aren't dependent on the key. Subject, for example, is related to the teacher, not to the student. This database, therefore, is not in second normal form. Even if you were to make a compound key to include the date and the teacher giving the merit, it still wouldn't be in second normal before because subject wouldn't be dependent on the whole of the key. Third Normal Form A database is in third normal form if it: is already in second normal form it has no non-key dependencies By non-key dependencies, we mean that there are no fields that are dependent on other fields that are not part of the key. For example, in the version of merits database above, where Name was the key, the subject was related to the teacher, and not to the student - that is a non-key dependency. Normalisation in Projects This all sounds quite complicated, but dont worry about contriving your coursework design or having to start and then refine your database i.e. don't try to start at first normal form, and then go to second normal form, and then to third. The key thing is to think about what your entities (or tables) are going to be - if you pick the right ones it'll normalise itself. The Normalisation Oath Well, don't forget it all, however, because you may be asked about normalisation in an exam. Here's a little tip to remember the three stages - we call it the Normalisation Oath: Each attribute is dependent on the key, the whole key, and nothing but the key! So, to get to third normal form, your non-repeating fields (first normal form) need to be dependent on the whole of the key (second normal form), and nothing other than the key (third normal form). It works for me! Access If you're about to embark on your first Access project, here are a few tips to point you in the right direction. Access is a large and complex application, and can seem a little daunting at first, and getting to know what it can do and what you want to do is a good first step. Fields Field Types Field types have been discussed previously, but Access has a few more options associated with the main types these are detailed below: PRIVATEIntegers: Short integer Long integerIntegers are whole numbers, and integer variables are used when you know there is never going to be anything after the decimal point, e.g. if you're writing a lottery ball generator, all the balls have whole numbers on them. The difference between short integers, integers and long integers is the number of used to store them if youre going to be dealing with large numbers, then select Long Integer. Remember that number fields allow you to enter numbers only if you want to include spaces or punctuation, choose text.Floating point: Single DoubleFloating point numbers are ones that contain fractional parts - i.e. they are not whole numbers. The single and double quantifiers are analogous to the short and long quantifiers used with integers - i.e. they indicate how many bits are used to store the variable. Floating point arithmetic can lead to problems with rounding and precision, so if you're dealing with a limited number of decimal places, it is probably more efficient to use integers and multiply all your values by a power of 10. Boolean (yes/no)A Boolean variable can store one of two values - either TRUE or FALSE. This is actually stored as an integer - in VisualBASIC, for example, FALSE is 0 and TRUE is -1, and you can use these values in calculations.Strings: text memoStrings are variables that contain text, and they come in two sorts. With a text field, you declare how many characters the string is going to hold in the properties at the bottom of the screen. The maximum number of characters is 255. A memo field is a effectively a text field of (practically) unlimited length this is good for adding fields to your database for notes, etc., but will be less efficient for fields containing just a few characters.DatesThere are various date formats that control the way in which the date appears they have no effect on the way in which it is stored. However, be careful when using the Now() function it stores the time as well as the date and can upset any queries using dates. Its probably better to use Date().Naming Fields While Access allows you to put spaces in table and form field names, it's not a good idea - use underscores or capitals to make names more legible. The reason for this is that it becomes difficult to refer to objects with spaces in their names if you're going to write macros in VBA. Access will also allow you to use VisualBASIC keywords as field names, but clearly this isn't a good idea, either, as referring to a field called, say, Next in a macro will probably cause an error to occur. Indexes The data can be stored in a database in any order (normally the order in which you enter it). For this reason, it can often take a long time to find a record in a very large database, particularly if you are making a complex query across several tables. Access can speed things up by creating an index. This is applied at the field level and works like the index in a book. An index tells the DBMS where a particular record is located within the database. You do not need, therefore, to search through every record in the database to find the ones that match your criteria. You just need to search through the index. Reports and queries that use several tables benefit especially from the use of indexes. It is a good idea to ensure that your primary and foreign keys are indexed (in fact, Access will probably insist that they are when you related the tables). By changing the indexes in a database of several thousand records, I once reduced the time it took to run a report from about half an hour to less than a minute! Other Options There are various other options that can be selected for the fields when you are creating tables, such as validation, default values, input masks, and methods of entry, e.g. list boxes and combo-boxes. However, if youre going to be using forms in your system, there isnt really any point in setting these as they will be over-written by the properties of your form. Relationships Relationships are created in Access by making the links between tables that are represented graphically, like creating an entity-relationship model. Select Relationships from the Tools menu, or click the button on the toolbar to display the relevant screen. PRIVATEYour tables will be unlinked to begin with. Before you can link two tables together, there must be fields in each that represent the same thing (e.g. in our merit database example, there must be student name fields in both the student table and the merit table, and staff name fields in both the merit and staff tables). To create a relationship between two tables drag the field that is the foreign key in one table to the second table. A screen appears where you can select various options. If you are using a compound key, you will need to set more than one field to be equal to a field in other table (this will make sense when you see the screen!). The degree of the relationship (e.g. one-to-one, one-to-many, etc.) will not be shown unless you select "Enforce Referential Integrity". Access automatically determines the degree of the relationship based on the keys in the two tables being linked. If the degree of the relationship is not as you expected, the most likely cause if that you've made a mistake when selecting your compound key in one of the tables. Referential Integrity What would happen if you had two records in your database that were linked by a relationship, and then the foreign key or the primary key changed? Or one of the records was deleted from the database? For example, in our merit database, what would happen if you gave a merit to someone who then changed tutor groups or left the school completely? The two records would no longer be linked properly, and "referential integrity" would be lost (i.e. the rules governing how the data are related have been broken). There are two ways around this problem: The simplest thing would be to stop the user making any change that would threaten referential integrity. You may have already noticed that Access won't let you delete information from a linked field, or enter information that would prevent it from being linked to another table (e.g. in our merit database, it won't let you enter merits for students or staff who don't exist in the student and staff tables). Some database programs allow you to "cascade" any change to keys to other tables, so that if you change a key field, the matching fields in other tables are also changed. So, if one of the students in our student database were to change tutor group, for example, the tutor group field in the merit table would also be updated and the records would still be linked. Queries Queries are the things you create to do searches in Access. There are some key things about queries that you should know: You can create queries that use information from various tables. In fact, you can include a table more than once if you want to include two values from that table see the Merits example for details. You can query both tables and other queries i.e. you can do a query on the results of a query or link a table to a query with a relationship; this can be a useful technique as shown in the appointment clashing example. You dont have to show fields that you use to match your criteria just untick the Show checkbox. You can create derived values in queries, e.g. to perform some sort of arithmetic function or concatenate fields together. You can use both AND and OR by placing your criteria correctly on different lines of the query table. However, you should understand the idea of operator precedence this is similar to the idea of BODMAS in arithmetic calculations. AND behaves like multiplication, and OR behaves like addition, so in the Boolean expression: a OR b AND c the b AND c part will be done first, and then the result combined with a using an OR operation. Counting, Totals, etc. You can quite easily add totals, minima, maxima or counts to your queries by clicking the ( button on the toolbar in design view. An extra row will appear above the criteria, and you can choose the type of function you require. Derived Values You can derive values in queries, either by performing mathematical calculations or concatenating strings. This could be useful, for example, to combine forenames and surnames to derive a full name field. This could then be used in a combo box to make things simpler for the user. To create a derived field, click the right mouse button in the Field: row in design view, and select Build... You can then enter the calculation in the box, e.g. forename & & surname You can use fields from either tables or the query itself. Note that the query fields wont appear in the tree until youve saved the query. Update and Delete Queries You can get your queries to update or delete records in tables, too. To do this, create a query as normal and enter the criteria needed to select the records you want to delete or update. Then change the type of the query using the Query Type toolbar button (its got two overlapping rectangles on it). If you select an update query, an extra row will appear above the criteria; use this to enter the values that you want to add to the table this can either be a fixed value or you can use the Builder to use functions or enter values from other fields. Forms Forms in Access are screens that you can create to go on top of the database tables to make them easier to use. That is, you can create a nicer user interface with buttons, etc., to help the operator use your database. Another benefit of using forms is that you only have to show the fields that a particular user needs to see. You can hide things like counters, and also include information from other, linked tables. Forms can be used to display information from existing records, or, if the Data Entry property is set to Yes, the form can be used for entering new records whilst hiding existing records from the user. You can also use things called subforms. These let you create a form based on one database table that contains matching information from another table, so you could create a form based on the student table that had a list of the student's merits (from the related merit table) at the bottom. In fact, forms don't have to be based on database tables at all. They can also be bound to queries, or you can also them with queries and reports to produce a type of dialogue box to request criteria for the search. Just create a form as normal, but don't base it on a table. Fields from this form can then be included in a report or query just as though they were in an ordinary database table. We could create a form, for example, that asked for two dates, and then create a query and report that printed a list of all merits given between these two dates. In a form, if a field is bound to a database field, then any information entered in that field is saved to that table. You can select a field to bind to in the Control Source option of the Data Properties section of the field properties. If a form field is unbound, that means it is not attached to a database table, and the information is not saved. Unbound fields can be used to display information that is looked up from other tables, or to collect information to simulate a dialogue box. You can perform calculations by entering an Excel-like formula as the Control Source property. Form Properties As well as the individual controls on the forms having properties, the form itself has properties. If you click the right mouse button on the grey area that is outside the area of your form, but still inside the window that contains the form, there are options in Layout Properties that you can set. These control things like whether the user can resize or minimise the window, whether scroll bars appear, and whether or not there are any Record Selectors or Navigation Buttons (these are the Next/Previous arrow buttons which are normally at the bottom of the window). Finally, you can select in Default View whether the user can see a Single Form (i.e. record) at a time, or whether multiple records can be seen. Probably the most useful of these is Data Entry if you set this property to Yes, then the form will appear blank when you open it, i.e. it is used for entering new records, rather than displaying or editing existing ones. If you dont set this property to Yes, when you type in your new record and save it, you will amend the first record in your table, rather than add a new record. Choosing Controls A control is the generic term for something on a form, e.g. a textbox, radio button, combo-box, button, etc. Before you create your form, you should think carefully about how you can make like easy for the user will they have to type in all the information, or will they be able to select certain items from a list? As well as making your system simpler to operate, multiple choice options such as combo-boxes also provide an excellent form of validation by only allowing the user to select from a list of valid options. This list of options can be generated dynamically you dont necessarily need to decide what they are when you create your form. Combo Boxes Combo boxes are the drop-down lists that you often see in Windows, e.g. for the typefaces and font sizes in Word. They are useful, because they can allow you not only to validate entry against a list of words (although you can choose to allow users to enter other things, if you wish), but they allow the user to see what the list is. In Access, you can fill this list using a table or query. Creating a combo-box from scratch is a little tricky, so I think its acceptable to use the wizard in your project. The key thing to remember about combo-boxes is that you can show one thing in the drop-down list, but actually store another thing. For example, you might have a field that stores the code for a person, but want the user to be able to select their name. Shown on the right are the combo-box properties for the patient field in the doctors appointment example from Shared Documents. The important things to notice are that although the list contains the names of the students, the combo-box is bound to the patient_number field, and that the list shows two columns, but that the width of the first one is 0cm i.e. the first column contains the patient code, but it cant be seen and it is the invisible column that is bound to the table. The text in the Row Source property is the SQL that fills the combo-box this is created for you by the wizard, but you can change what the drop-down list displays by clicking on the ellipsis button. Sorting and Grouping Combo Boxes The Row Source properties for a combo-box are effectively a standard Access query. The properties for the patient_number example are shown on the right. You can then do anything to your combo-box that you can do to a query, e.g. you can add extra columns, add criteria to limit the list, or sort the options. Probably one of the most useful things you can do is group your options, using the Totals (() button. This will remove any duplicates from your list, so that each option appears only once. List Boxes List boxes look similar to combo-boxes, but are probably best avoided unless you really need their functionality. They differ in two main ways: All of the options are shown at once i.e. the list does not drop down You can select more than one of the options by using the Ctrl key when clicking This second difference can make list boxes particularly tricky to use, especially if you bind them to a field in a table if you select two of the options, which one will actually get stored in the associated record? Input Masks Input masks can be a useful way to restrict entry to a text box where the data being entered has a rigidly defined format, but you need to be careful about where you use them. Think careful about whether they are really needed, as it can be very annoying for the user if they come up with an exception to the rule youve tried to implement. Some things, such as National Insurance numbers, have identical formats, and validating these would be a good use of input masks. Other things are generally the same, but not always. Examples of fields for which I would not try to use input masks include: Postcodes lots of people try to use input masks for these, but there are so many valid formats that youll never get it right! For example, there can be one or two letters at the start, followed by either one or two digits. Then some places have another letter, before one or two more digits and two letters. There are also specialised postcodes for institutions such as Girobank. Telephone numbers there are all sorts of formats; mobile, national and international numbers, as well as the non-geographical codes, such as 0845, 0898, etc., and large metropolitan areas also have a different format for their codes. Bank account numbers most have 8 digits, but Girobank accounts have 9, and they also have some sort of check-digit that is cross-referenced with the sort code. The Access help for input masks probably tells you all you need to know just go to the input mask properties for the field and press the F1 key. Enabling, Disabling and Hiding Controls Controls on forms have two useful properties that you can set using simple codes in macros enabled and visible. These control whether you can operate (e.g. click/edit/change, depending on the control type) or even see the control. You can use these to make optional elements on your form appear or disappear, e.g. you might have a radio button for something like Contact by e-mail, and if Yes is selected you will need to display a field for entering an e-mail address. The first thing you need to decide is what event will trigger the enabling/disabling or hiding/showing of the control in this case it would be the OnClick event on the Yes radio button. If your e-mail address text-box was called email, then the codes for showing and enabling the text-box would be: email.visible = true email.enabled = true The corresponding codes for hiding and disabling would be: email.visible = false email.enabled = false For details on how to find and enter these codes, see the section on Requerying. Tab Order When you press the tab key on the keyboard, the focus (i.e. the position of the cursor on the screen) moves between the controls in a particular order. By default, this order will be the order in which you put the controls on the form. This might not always be the right order you should be able to tab through the controls in the order in which the should logically be filled in or used i.e. the key fields first, and then to the buttons for saving, etc. You can change the tab order yourself in the form design view. Click the right mouse button on the form, and select Tab Order you will be presented with a list of all the controls on your form. You can then drag the entries up and down the list until they are in the correct order just put anything you wouldnt normally use, such as frames and text labels, at the end of the list. Startup Page/Menu In Access you can create a macro that is run automatically when a database is opened. Just create a new macro, and call it AutoExec. Anything you set the macro to do will then be done when you load your database. If you use Access 97 (or a newer version), then you can choose a form to be displayed automatically when the database is opened (choose Startup... from the Tools menu). This can be useful for creating a "welcome" page, or a menu. Just create the page as a form, and create your AutoExec macro to open the form. User-Defined Queries You may want to create a query that allows the user to enter some or all of the criteria for the search. You can do this quite simply by creating a form that can be treated as a dialogue box. To create a query that takes user input, follow the steps below: Create a form to be used as your dialogue box. Don't bind it to a table - just create a blank unbound form (i.e. don't select a table from the list, just click the Blank Form button) and add the fields and combo boxes you require. To create a field, click the INCLUDEPICTURE \d \z "field_button.gif"button shown on the left it should be on the toolbar. The type of the field (e.g. date) can be set in the Data Properties section (shown further down), as can any default values. To have a date field default today's date, for example, enter =Date() in the Default Value field in properties. There are more functions available if you click the ... button to the right of the field. You can create a Combo Box (i.e. a field with a drop-down list of options) in a similar way by clicking the INCLUDEPICTURE \d \z "combo_button.gif"button shown on the left instead of the ab| buttonINCLUDEPICTURE \d \z "field_button.gif". It is a good idea to give your fields a name at this point (which is also done in Properties) so that you can refer to them later. Create the Query as normal, but instead of entering fixed search criteria, enter the value from your form. You can do this by clicking the right mouse button and selecting Build from the menu that appears. On the Expression Builder screen, double-click the Forms branch, then All Forms, and finally the name of the form that you are using as your dialogue box. All the fields on the form appear in the middle of the screen. Double-click the one you want and click OK. Enter any other criteria and the fields you want the query to display as normal and save the query. If you want the results of the query to be output to the printer, you can also create a report at this time, and bind it to the query. The final stage is to add a button to your form to run the query or report. Return to your form in design view and add a command button. This can either run the query or report directly, or you can create a macro and get your button to run that. When you create a button, a wizard appears which takes you through the steps required to make it do what you want, display text or a picture on it, etc. When you come to select the action of the button: If you want your button to print a report, select the Print Report option from Report Operations. If you want your button to display a report on the screen, select the Preview Report option from Report Operations. If you want your button to run a query, select the Run Query option from Miscellaneous. If you want your button to run a macro, select the Run Macro option from Miscellaneous. You will then be asked which query/report/macro you want to run, so you need to have created it already. It may be a good idea to add another button at this point to close the form (e.g. one called "Cancel"). All you need to do now to run your query or report is open the form that you are using as your dialogue box. Displaying Information from Other Tables Quite often it would be nice to see related data from another table. For example, when you are entering codes that relate to records from other entities. In the Merits database, for example, you are required to enter the students name and the staff initials on the merits form. The enforcement of referential integrity means that you are only allowed to enter the names of students who are in the students table, and the initials of teachers who are in the staff table. Two techniques might be useful here; the ability to select these names and initials from a drop down list, and also to be able to check whether the initials you have entered relate to the correct person. Combo Boxes Combo boxes are probably the easiest way to display information from another table see the explanation of how to use them in the Forms section above. You can also use combo boxes to set the values of other fields (i.e. text boxes) on your form. Imagine, for example, that you wanted to be able to select a product from a combo box, and have its price shown in a text box on the same form. You can do this as follows: In the combo box Query Builder (i.e. the thing that appears when you edit the Row Source in the combo box properties, shown below left), make sure you include all of the fields that you want to display on the form. In this example, my combo box is going to show the product description and store the product ID in the combo box itself, but Ive included the price because I want to show that elsewhere on the form. In the combo box properties, make sure that the Column Count is set to the right number, and that the Column Widths are set to 0cm for all columns that you dont want to appear in your combo box (see example, below right). The final step is to add the text box for the price and set the Control Source so that it refers to the appropriate column from the combo box. The columns are numbered starting at zero, so the third column is column 2. There is a combo box property called Column (although it doesnt appear in the Builder) which takes as a parameter the column number and returns the value in that column for the row selected by the user. In this example, entering =[product_ID].[Column](2) as the Control Source will give the price of the product selected by the user. The only other thing you might want to do is disable and lock the price text box so that it cant be selected by the user, and set the Tab Stop property (on the Other tab) to No so that the focus jumps over the control when the user presses the Tab key. Sub-Forms Based on Tables Sometimes it is useful to "lookup" values from another form or table, for example to check that the right code has been entered. The only obvious way to do this is by using a subform. A subform is a way of embedding one form into another. The relationships you have created will then ensure that the record shown in the subform is linked to the one displayed on the main form. The first thing you need to do (if you're not using the Wizard) is to create the subform. Create the form that you wish to appear inside the main form, and set the fonts, colours, etc., as you want them. On your subform you need to include all the fields that you want to display on the main form, plus any that are used to link it to the main form. So in my example, I included a staff initial field on the subform as well, but in the Properties I set Visible to No. It makes things much easier if you give your textboxes, etc., on the form proper names, and make them the same as the names of the fields in the table to which they are bound. The next stage is to open in Design View the form you want to use as your main form and insert a container for the subform. You can do this by click the Subform/Subreport button on the toolbar (right): INCLUDEPICTURE \d "subform_button.gif" Drag out a box large enough to contain the information you want to display, and go to the Data Properties. In the Source Object field, enter the name of the subform you have just created (i.e. the name of the form that contains the information you want to display on this form). The Link Child Fields and Link Master Fields fields are used to link the two forms together, just as a relationship links together two table. You must enter the names of the fields on each form that are equivalent. This is the point where you will reap the benefit if you have your form fields the same name as the database fields, because Access will complete the Link Child Fields and Link Master Fields fields for you. In Link Master Fields, you enter the name of the field on the main form that is the key to the subform (i.e. in my example it is the initials field, which is called Field28, because we want to "lookup" the name to go with those initials). In Link Child Fields, you enter the name of the corresponding field on your subform (which is probably the one that you made invisible). If youre using a compound key, or need to include two or more fields in the link between the two forms, separate the field names with a semi-colon, and make sure that they are in the same order in each box. Hopefully, that should be all you need to do to make the information appear on the form when you change the information on the main form, the subform will be updated automatically. You will probably need to adjust to the subform properties to stop things like scroll bars and record selectors appearing if you want the subform to integrate seamlessly with your main form, like I have done in the example above. You can also use the same technique to display tables of information, such as a list of all the merits for one student, or all the merits given by one member of staff. The only thing you need to do differently is to change the properties of the form you are using as the subform so that the view is Continuous. Sub-Forms Based on Queries Another useful technique is to base your subform on a query, rather than a database table. This is probably easier, because you dont need to select any child and master fields. What you do need to do, however, is ensure that you requery your subform when anything on the main form is changed. Referring to Values on Subforms Sometimes you might want to refer to a value on a subform and use it in a calculation on your main form, or vice versa. This isnt too difficult, but you need to remember that you cant refer to a value on a subform as though that form were open and existing on its own, because Access wont recognise it as existing. You need to access the fields on the subform through the subform object on the main form. That is, when you use the Expression Builder, dont select the subform from underneath the Forms branch, but select the main form, and then in the middle box double-click the name of the object that is the subform. You then need to manually add to the top box an exclamation mark, followed by the name of the field on the subform that you want to use e.g. if the field you wanted to use was called tel_number, the full entry in the top box would be: [numbers]![tel_number] To refer to a field on the main form from within a subform, you effective do the same thing, but the main form is always called parent, e.g: [parent]![address] Requerying The requery action in VBA re-reruns the query upon which something (e.g. a combo-box or subform) is based, thereby updating the information that it contains. This needs to be triggered using some sort of event on your form it is best done using the OnChange or OnLostFocus event of any field that is used in the query (OnLostFocus seems to be most reliable). The OnChange event occurs when the value in a field is changed this works well for combo-boxes, but doesnt always been to be triggered for textboxes. These events are found on the Event tab of the properties dialogue (shown above) of the field or button that you want to use to trigger the requery not the object that you want to be requeried. If you click on the ellipsis button next to the name of the event, you will be given three choices select Code Builder to be taken to the Visual BASIC editor. You then just need to type one line of code this will be the name of the object to be requeried (i.e. the subform or combo-box), followed by .requery. This name is name you gave the object on the form, not the name of the field in the table. You can tell when youve got it right, because when you press the full-stop, .requery will be in the list of methods. Visual BASIC for Applications (VBA) According to the A level ICT syllabus, creating a wholly programmed solution is not in the spirit of the course, so you should only use VBA sparingly in your systems (if you need to use it at all). Most of the things that your system needs to do can be accomplished using standard Access functions. The sorts of things you might need VBA for are: Requerying subforms and combo-boxes (discussed above) Enabling, disabling and hiding controls (discussed in the Forms section) Checking for overlapping appointments (discussed in the Practical Examples section) Displaying confirmation messages using message boxes Copying values from one field or form to another VBA functions are linked to events in your system, such as buttons being clicked, fields being changed, or even forms being opened and closed. To enter the code, go to the Properties for your chosen object and click the Event tab. In there will be a list of all of the events for the object (not all objects have the same events forms will have an OnResize event, for example, but buttons wont, because they arent resized in normal use). Click on your chosen even, and the ellipsis () button will appear to the right. Click that button and choose Code Builder. Message Boxes A useful feature of VBA is that you can display pop-up messages to convey information to the user, and ask for confirmation for certain actions, such as closing the system. These are known as message boxes and there is a command in VBA called msgbox() that allows you to control their appearance. If you just want to display a message (with an OK button), the syntax is quite simple. For example, to display the word Hello in a message box, the command would be: msgbox(Hello) Note that any text you want to display must be enclosed in speech marks. There are more options that you can select, but be aware that if you enter more than just the message, then the msgbox() command returns a value, so you use a variable or another command, such as if to handle the value it returns. As you type a command, the VBA editor will help you with the options, displaying drop-down lists of all the options at each point the only thing you really need to remember is that all of the options are separated by commas. You can also use the help, of course, by highlighting your command and pressing the F1 key. If you want to display a message box, with the title Confirmation, the message Are you sure? and Yes and No buttons, for example, then you would use the following code: msgbox("Are you sure?",vbYesNo,"Confirm") Remember that all text values need to be in speech marks. Remember that when you use msgbox() in this way, it returns a value, so you cant use the command on its own probably the best thing to do would be to use if, so if you wanted to add some confirmation messages to your system, you could do something like this (on the OnClick event of your Exit button): If MsgBox("Are you sure you want to exit?", vbYesNo, "Confirm Exit") = vbYes Then Application.Quit (this is in a small font so that it all fits on one line lines in the VBA editor are much longer). The If Command The If command is used to make decisions in your macro, and can be used either on one line, or as a more complex version with an else clause. The general format is either: If test_condition then action Or, if you want to have an alternative action: If test_condition then action Else other action End if Setting the Values of Fields You can set the value of a particular field (or, indeed, any other property, such as visibility, or whether the field is enabled) from your code quite simply by accessing the properties of them using the name that is at the top of the All tab in the properties. For example: field_name.value = Hello field_name.value = date() field_name.value = other_field.value field_name.enabled = TRUE field_name.visible = FALSE Remember that you need to enclose all text values in speech marks. You can also use functions such as date(), and the predefined constants TRUE and FALSE (which do not need to be in speech marks). Practical Examples This section of the booklet demonstrates some approaches you could take to common problems in Access. It goes without saying that you should not copy the databases or any of the code without crediting it in your project. Clashing/Overlapping Appointments A common type of A level project is a booking system created in Access. One of the most important functions such a system will perform is to prevent double-bookings or clashes. This can be more or less tricky, depending on how the appointments are made. Appointments or bookings fall into two basic categories - either discrete appointments (e.g. a doctor's surgery, where a patient is given a 10-minute slot), or bookings with a start and end time/date (e.g. a booking in a holiday cottage, with arrival and departure dates). If you're booking hour lessons, or discrete appointments of some sort, then you can use referential integrity to stop double-bookings. If you're booking something like holiday cottages, on the other hand, where there are arrival or departure dates and the bookings can overlap, then it's a little more tricky. On this page I shall propose the methods I would use to prevent double-bookings in each case. Discrete Appointments In the diagram below you can see the tables and relationships from appointments.mdb (available in Shared Document). It's the classic three-table booking system, with patients, doctors, and a linking appointments table. I've also added a fourth table (tbl_available) that contains a list of all the available appointment slots for each doctor. To make things easier, in this example the surgery has the same appointment times each day, although you could also add the day of the week if you wanted to vary their times. Referential integrity will prevent the receptionist from making a booking for a doctor in a time slot that doesn't exist in tbl_available, but what happens if the appointment is already taken on that particular day? One of the tidiest ways to prevent double-bookings is to use a combo-box to present the user with only the available appointments for a given day (see the form on the left). This can be populated from a query, and requeried whenever the date and/or doctor are changed. Although the idea of the query - to find available slots on a given day - sounds quite simple, it's not as easy as it first appears. This is because you're looking not just for bookings that don't exist, but bookings that don't exist on a particular day. My solution, therefore, uses two queries - one that finds the appointments that have been made for a particular doctor on a given day (straightforward enough), and then a second one that effectively subtracts these from the complete list of available slots (i.e. those in tbl_available), to give the available appointments for the chosen day. The illustration to the right shows this second query. Note that it contains a table and a query - you will have to create the relationship yourself (you do this by dragging the time field from the table to the query, as you would if you were joining two tables). You also need to change the Join Properties (right click on the line joining the table and the query), to select the middle option - i.e. to show all the records from tbl_available... Once you've done that, the query itself is quite simple - you just want all the times for your doctor from tbl_available where there isn't a corresponding time in qry_appointments_on_day - i.e. where the time is NULL. If you now use the form to make a booking for a particular doctor on a given day, you will notice that the time disappears from the list once you've clicked Save, so that that slot can't be used again. Variable-Length Bookings Preventing clashes with variable-length bookings is a little more involved. If you've trawled the newsgroups and Access FAQs, then you may have come across the cartesian product method for picking up double-bookings. The problem with this approach is that you do the checking after the record has been saved, by which time it is too late. In clash_test.mdb (in Shared Documents) I've proposed a method for preventing the user from saving clashing bookings in the first place. It isn't overly elegant, and you may need to tweak the events on which the query is re-run to suit your needs, but hopefully it'll give you some idea of how to approach a solution. What happens is that the form used to enter the date has two hidden fields containing the dates of the latest prior booking, and the first subsequent booking, in the same room. When the Save Record button is clicked, a macro compares the dates and stops the save if the dates overlap. The database itself is just a simple three-table affair, with tables for rooms, customers, and bookings. Generally, things like customer codes are frowned upon, but I've just used them here for simplicity. I've added fields for the number of guests in the party, but I haven't actually done anything with them - the point of the database is only to demonstrate the double-booking validation. On top of the bookings table, I've created a form (shown to the left) that contains the fields in the table. I've used combo boxes for the customer and room number to make it easier to select rooms and customers that exist and maintain referential integrity. Underneath the Save Record and Cancel buttons are two invisible combo-boxes that are populated from the two queries, qry_previous_booking and qry_next_booking. The visible property of both combo-boxes is set to False so that they are hidden. INCLUDEPICTURE \d "requery.gif" The query qry_previous_booking finds the latest prior booking in the same room, based on the dates and room you enter. Because you might change the dates or the room number, you need to put a .requery command on the LostFocus or Change events to re-run the query. All that does is ensures that the next and previous bookings always relate to the rooms and dates you have entered. The next step in the validation process is to check that the appointments don't overlap. This needs to be done before the record is saved, so that you can warn the user and request alternative dates or a different room before it's too late. The easiest way to do this is to add the Save button using the normal wizard, and then add some VBA code afterwards. The code just uses a simple if... then... else... loop to display a message if the appointment clashes with another, or save the record if it doesn't. To determine whether the start of the new booking comes before the end of the previous one, or whether the end of the new booking comes after the start of the next one, I've used the DateDiff() function. This will give either a positive or a negative answer, depending on which date comes first. You might find it simpler to try a simple comparison, but I've found that > and < don't always work reliably with dates. The code for the Save button is shown right. Note that you can put most of the if statements on one line, and omit the End Ifs - I've just done it that way so that the code isn't too wide to fit on the screen here. One last thing to bear in mind is that the record will still be saved if you click on the button at the top of the window to close the form. You can get around this either by disabling the Close button (in Form properties), or by adding similar code to the form's Close event to check for clashes there too. Merits Database The merits database that you can get from Shared Documents is an example of a system created in Access that hopefully contains examples of most techniques you might want to use in an A level ICT project, with the exception of preventing double-bookings, which is described in the previous section. The Problem A school gives out merits to students. A member of staff gives a merit for his particular subject (or maybe a tutor period). Currently it is written on a standard slip and passed onto the head of year. The head of year then keeps track of how many merits each student has, so that certificates can be awarded at the end of the year to students who receive a certain number. The merit is then passed to the student's tutor, to be given to the student. The information recorded on the merit is as follows: PRIVATEStudent name Staff name Subject Date Reason for merit Student's tutor Student's head of year I learnt quite a bit about Access myself while I was creating this database. I don't propose to explain the normalisation, etc., but rather the techniques used in Access to implement the solution in a user-friendly manner. I'll take you through them in logical groups (i.e. going across the Access screen a tab at a time!). Tables The entity-relational model (i.e. the relationship screen in Access!) for the database is shown below. I don't think I've done anything particularly bizarre here - students belong to a tutor group, the tutor group belongs to a year, which has a year head who is a member of staff. Subject departments also contain members of staff, and have a department head. The merits table brings together a student and a subject teacher. Queries The queries are all quite straightforward, and apart from qry_student_names fall into three basic types - those that find the merits to be printed, those that gather the information for the reports, and the update queries. The update queries are those with the yellow pencil icon. You should notice that these pair up with an ordinary query with a very similar name, e.g. qry_dept_print and qry_dept_printed. Essentially these have the same criteria - to find all the unprinted merits in a particular category (in this case a department), ready to be printed by the reports - the update query then sets the Printed field to Yes, so that it isn't found the next time the query is run. The remaining queries gather the information for the reports for the head of year - i.e. all merits for a particular student, tutor group, or year. All the queries are very similar and were created by copying, pasting and then amending the first query I created. The only interesting thing to note is the multiple occurrences of the staff table in the same query. I always used to wonder why Access let you add the same table to a query several times - and now I know! On the merit sheet, you have the names of three different members of staff - the person who awarded the merit, the tutor, and the head of year. These are stored as initials in three different tables, but all the full names are stored in the same staff table, and it's the full names we want to print. If you want three different names to appear on the merit, you need to add three copies of the staff table to the query! I said that qry_student_names was different, however. What that query does is to create a derived field that is a combination of the student's surname, forename, and tutor group. This is used to populate any combo-box used to input a student. It allows the user to find any student in the school by typing in the first few letters of the surname until the student is found. Forms Although there are 13 forms in the database, only one of them is bound to a table - frm_merits. All of the other forms are either menus, with buttons that open other forms, or forms that capture information for use in queries. Details of the merits themselves are entered in frm_merits (shown on the right). The Staff field is populated from the staff table, and the student population is populated from qry_student_names. The Date field has a default value of Now(), although Date() might be better if you don't want to store the time too. When you select a member of staff, the Subject combo is populated with the subjects that that member of staff teaches. This is done using the properties on the combo-box to show the subjects for the member of staff selected in the field above. Some code (shown right) has been added so that when the member of staff is changed, the list is re-populated (requeried). The remainder of the code simply selects the top subject and disables the subject field if there is only one entry in the list. Reports The reports used in the system are all quite unremarkable. Then ones with unprinted in the name, together with rpt_reprints are used to print the merit sheets. They're essentially copies of the same report, just attached to different queries so that they print different things. The remaining reports count and total the number of merits by department, tutor group, year, etc., as indicated by their name. Again, these are very similar, but are bound to different queries. Macros I'm not really a big fan of macros - they generally seem to be a long-winded way of something that you could do by just amending a bit of the VBA attached to buttons. All the macros in here are very simple, and they nearly all do the same thing. If you call a macro AutoExec, then it will run automatically as the database is opened. In this database, all AutoExec does is open a form that acts as the main menu for the system. All of the remaining macros do the same thing - they enable one button to perform two actions; something that could easily be done by editing the code. There's one macro for each type of merit printing report - the reports print all unprinted merits in a given category, and then the macro runs an update query to set the Printed field to Yes so that they're not printed again. Stock Control A common type of project is the stock control database, and the main problem in this type of system is keeping the stock levels up-to-date. You could use update queries, and one of the more popular A level textbooks proposes a method using VBA. Both of these methods can lead to an integrity nightmare - you only need your function, query or macro to fail and your stock levels will be wrong - you won't have any idea how many items you have in stock. I would question whether you need to store the current stock levels at all - they could be calculated from the number of items delivered and sold. Assuming that you start with an empty warehouse, the number of any item in stock will be the number delivered minus the number sold. If you don't start with no stock, or you need to adjust the stock levels, you could simply create dummy suppliers or customers and adjust them using deliveries or sales. To calculate the number of items in stock, it's safest to use three queries - one to total the deliveries, one to total the sales, and one to subtract sales from deliveries. The first two are very similar - the query to count the deliveries is shown above. The query uses the Sum() function to group and total the deliveries for each item. The purpose of the generated deliveries column is to use iif() to replace null values (i.e. blanks) with zeros, as you can't subtract from a blank. Note also the arrow on the relationship - this indicates that the type of the relationship has been changed so that all records from tbl_stock are included (the middle option). This ensures that all stock items are included in the query results, rather than just the ones for which there are deliveries. A similar query is created to total the sales, and then a third query is created to find the difference between the sales and deliveries this is shown to the right. This query is based on the first two queries - you will need to link the two "tables" yourself. A formula is then used to subtract the number of items sold from the number delivered, to give the current stock level. Troubleshooting and Miscellaneous Tips You May be at the End of a Record Set If you create a form with the Data Entry property set to Yes, the best way to save a record is probably to add a button to your form, and use the wizard to get it to Add New Record. This error occurs when the record you are adding cannot be saved for some reason usually for one of the following reasons: Referential integrity there is no linked record for one of your fields, e.g. you are trying to enter a merit for a student or member of staff who isnt in the database. Missing key fields you havent entered all of the required information. Converting Between Different Versions of Access If you have Access 2000 at home, you can take your Access 97 databases home and Access 2000 will prompt you to convert it the first time you open it. After conversion, it should work without any problems, but you will need to convert it back to Access 97 format before you bring it back to school. To do this, select the Convert Database option from the Database Utilities section of the Tools menu (in Access 2000), then choose To Prior Access Database Version Concatenating (Joining) Fields Joining fields together can be a useful technique the proper name for this is concatenation. It can be used, for example, to join together forenames and surnames to form a full name. You can join strings (e.g. text fields) together using the + or & operator in either a Control Source property or as a field name in a query. Remember that the fields will just be joined together as is if you want a space between them, then you will need to put that in yourself. For example, if you have surname and forename fields on a form, you could hide those (i.e. set the Visible property to No) and create a new unbound field with the control source: =forename & & surname The + operator will, of course, add together the values if you are using number fields. If you want to add a number field to a text field, or vice versa, you can convert field types using the val() or str$() functions. It is therefore better in most cases to use & - e.g. =forename & & surname rather than =forename + + surname, although the latter will work. Date Queries Dont Work If you are having trouble with queries based on dates, and you cant see anything wrong with them, then its worth checking the format of the date fields in the tables (i.e. not the form). If you use the default date style in the table, but set the form date field to Short Date, the minutes are stored in the table anyway, and when you search on dates, it uses the exact time too. I Have Trouble Referring to Form Objects in Macros It is very difficult to refer to form objects (e.g. fields, buttons, etc.) that have spaces in their names, although Access will let you include spaces. It is better to use underscores instead of spaces if you want a gap. Your macro also wont work if the object name is a VBA keyword (i.e. command), so simple names such as Run and Next should be avoided. If you use the naming convention described on the next page, you shouldnt run into this problem. Help On-Line If youre at home, the examples mentioned in this booklet can be downloaded from the following web-site http://www.advanced-ict.info Leszynski/Reddick Naming Conventions Level 1 ObjectTagExampleTabletbltbl_customerQueryqryqry_clientnameFormfrmfrm_customerReportrptrpt_salesMacromcrmcr_updatelistModulebasbas_isnotloadedLevel 2 ObjectTagExampleTabletbltbl_customerTable (lookup)tlkptlkp_regionTable (system)zstblzstbl_userQuery (select)qryqry_clientnameQuery (append)qappqapp_newphoneQuery (crosstab)qxtbqxtb_yearsalesQuery (delete)qdelqdel_oldcasesQuery (form filter)qfltqflt_alphalistQuery (lookup)qlkpqlkp_salaryQuery (make table)qmakqmak_saletoQuery (system)zsqryzsqry_macronameQuery (update)qupdqupd_discountFormfrmfrm_customerForm (dialogue)fdlgfdlg_inputdateForm (menu)fmnufmnu_mainForm (message)fmsgfmsg_checkdateForm (subform)fsubfsub_invoiceReportrptrpt_totalsReport (subreport)rsubrsub_valuesReport (system)zsrptzsrpt_macronameMacromcrmcr_updatelistMacro (for form)m[formname]m[formname]_customerMacro (menu)mmnummnu_startformMacro (for report)m[rptname]m[rptname]_totalsMacro (system)zsmcrzsmcr_loadlookupModulebasbas_timescreen  Advanced ICT in a Nutshell Guide to Relational Databases and Microsoft Access Page  PAGE 28   EMBED Word.Picture.8  Main Form Subform Field 567:IRS % & ' ( ) ? @ Y Z [ \ ] f g þ쫶젶앶슶jhy74Ujqhy74Ujhy74Uj{hy74Ujhy74Ujhy74U hy74:jhy74:U hy745CJ8 hy74CJ hFiCJT hy74CJT hy74CJ8hy74jhy74CJ8UmHnHu267:IR* ^ % J p  G v  D $a$ 9r :z::   ! " # $ + , E F G H I Q R k l m n o  jhy74UjIhy74Ujhy74UjShy74Ujhy74Uj]hy74Ujhy74Ujhy74Ujghy74Uhy749     ( ) B C D E F W X q r s t u      % & ? @ A B C V W p q r s t j hy74Uj! hy74Ujhy74Uj+hy74Ujhy74Uj5hy74Ujhy74Uhy74jhy74Uj?hy74U8D u  G m Bp4n"c,^    ( ) B C D E F N O h i j k l t u jt hy74Uj hy74Uj~ hy74Uj hy74Uj hy74Uj hy74Uj hy74Uhy74jhy74Uj hy74U8"#<=>@APQjklno./023NOhijlmtujLhy74Ujhy74UjVhy74Ujhy74Uj`hy74Ujhy74Ujjhy74Uhy74jhy74Uj hy74U8 !CD]^_abnoɻɪɻɻəɻɻɈɻɻw jhy74UmHnHu j.hy74UmHnHu jhy74UmHnHu j8hy74UmHnHujhy74UmHnHuhy74mHnHujhy74UjBhy74Uhy74jhy74Ujhy74U.  &'(*+,>?XYZ\]st"#<=>@A]ûðûûåûûÚûûÏûûÄûjhy74Ujhy74Ujhy74Ujhy74Ujhy74Ujhy74Uhy74 jhy74UmHnHu j$hy74UmHnHuhy74mHnHujhy74UmHnHu4B},Z;q-U{?L]^wxy{|  &'(*+:;TUVXYij5jhy74Ujchy74Ujhy74Ujmhy74Ujhy74Ujwhy74Ujhy74Ujhy74Uhy74jhy74U:5679:QRklmop '()+,56OPQST[\uvwyzjhy74Uj;hy74Ujhy74UjEhy74Ujhy74UjOhy74Ujhy74Uhy74jhy74UjYhy74U8 9:;=>ef,-FGHJKj#hy74Uj#hy74Uj"hy74Uj"hy74Uj!hy74Uj'!hy74Uj hy74Uhy74jhy74Uj1 hy74U8   34578AB[\]_`abmsy$-1##?(I()),,,,?2I299;;jhy74UmHnHu hy746jhy74:UmHnHuj%hy74Ujz%hy74Uj$hy74Uj$hy74Uhy74jhy74Uj $hy74U<9acw"=Zf:HX]cw$ & F$If^`a$$xxa$wxq  ~!]#%%4(?()**W,`,O-..$xxa$Jkdp&$$Ifl4>0a.'4 laf4.//00o224r55D7Y788'80888>8F8T8[8$ & F<<$If^`a$$xxa$[8\8|89;;=@AaDxDFGGGGHH$ & F<<^`a$$xxa$Jkd&$$Ifl4]0a.'4 laf4;; <U<]<<<=2=B'BCCCCRD^DE EAEEENGQGuGyGSSMSXSWWWW(Y-YYY:]]``%`&`'`1`\blbld}dSe\eeefe,g2gggXh^h%j)jkkooppqqq|j,hy74U hy74jhy74Ujhy74U hy745j'hy745U hy745jhy745U hy746hy74FH IIIIIIIIIIIIIXJoKMEkd&'$$Ifl0a.'4 la $<<$Ifa$$ & F<<$Ifa$$xxa$M!MFM\MNZOOQRRySSUUUVKVVWWW$ & F<<$If^`a$ & Fxx  & F 9r xx $ & Fxxa$$xxa$W W&W.W$$IflF "   0    4 la/90969:9I9}www$Ifkd ?$$IflF "   0    4 laI9J9[9g9|9}www$Ifkd?$$IflF "   0    4 la|9}9999}www$IfkdB@$$IflF "   0    4 la99999}www$Ifkd@$$IflF "   0    4 la99999}www$IfkdxA$$IflF "   0    4 la999::}www$IfkdB$$IflF "   0    4 la::::2:3:w:y:z:::::}{{t{m{{{{k{ r & r &kdB$$IflF "   0    4 la :::::::. A!"#$%+0P. A!"#$%8n =(,[=jPNG  IHDRmgAMAPLTE!kBBBޔGyB IDATx흍v ɦMk?Fg@Tf$=5ԙ 7D/$'uvRsvc֜' i3ڒ!EN"jm@[2Ж Kӓa$loGdYF{xh/ 촟zitDS5G>È?8=n:ڹLw00hzIS5==<\Lψ᮫\S[%k{-ڡh0mRB4۵ݦ^mF%߳%)|gRN6͍^rp#%=)~-`ʒeI` gk%ǒXo˩_L۾v6ݲJ)RgA>U?h?Q~'wvV hаBW}Ihs\ў6gjFi\cvF[wnvT;.6:9චBZF˻O6?OuPFT=XЮ%RU%RU)c!vl^jhܵߨ6Sz{N꡷mrMI)B13:TWE)#PN;Q5/nvzaR2>9L|m;~nPַv8Zn'v+BQqnBo:}vhanNyo$ߞԒ4 !\^r"^wym/tQS: pf !;l2i1\/RU%O{T;AFIf!6hhK"Jx6'9 w*'kZ 8mk_h7~̤֌d߿|7[kfCd'Ѥkk|+AF,3ӎTUJhvZ4\D{1y/mk v?>C3̕ d^rMO7{W3.k ]kbqqډ@[Rb3i3$ԟgX s+gЦjrK=E'&DߗvO|oĆI4r]Ѧl浴ίF[K9홫zA:OqmGzd?b;Z hfcT)ЖhK %um`9@ۑ ڠ4Fn[3;ZzV{3&. [M,{m M*mОЦ3*AϾ*mg]^6kqڠͯ1HњѪtYU@h*y|;IX(OۮO'TH{iwiӵ.+i[CJwT ڿ> Ǎ>iH#O|EǭY+=|O6m>iJx%@[ۖ|5@hڞm>jKm✶ě׶kI=-i7jIo/,mni߳Ԓ|a]QKĮ,ڪ%ƒm;n.vkdm~y ^.m?tYl 9*Tww25ei+pm4{ޞ#vO:MKB[%β3:|qn;K[:ˋ>9KЖhKS\YvF ,;'&mI@[R-)Жmv @[Ra,o\A Πvϕ>4gatq'ڻ&ZM _DgAKR=giK^JKJ %ڒmI@[R-)ЖhK*|v骑 ک-W,N?MбlTݞŽlT,ڮ\2^lThK %ڒmI@[R-)ЖTGGf}LiDP.y{l|&(q\Z\MiK\fB(ؙ]vsqq~ XP.0_>&M>H˸ϫ%eX9]59džB>`g;NjUperv|ցk$ђ#eP>CҙU5v]"JCt(W']qc^{}Sˬk%+_ʯw QJ؃ws5p䇁A;3 kyv;UKcJ{oгbM*jJP1 J?cJŃfs؟]dӍwus;TPPPPPpZ=PN%;)l6[D e4JJXo P\)bgCQsBJ(_cR.XeP8*crbGځgJ)۫n$|$|$5?NU@Qfe`sO(_nSFVHY(GYeZ(OeRSֹRAJM\;~uSCwn;ջ=]sP?Re2J:NI%uMFIJJ:[]}=-]p'i2.ݝXU6CIVxs}ХϯD6(w>K,r&iz=zߕ(SCBGBGBGBGBGBG|XjhIENDB`naJ[RFJ2PNG  IHDRɵ gAMAPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.IDATx r ^$'Lgvﱙ O C6C"Aldնee}(cd̩4Ԇ=UktutJi"3Ӂ~%Ll:v\!7,\>ȀqbS:r:kr̯tzbt*Zt>n*VU%GE*-@MrttaU)fyQFR8f_WwRΩ>qP%i3"ÿgE ?_+d:X߂EX5I/ &fJE>H'q ;)T{ty31}J5wVtrj;F;b֤VK҅5Zwܭ=݇1:@)t]k2ثF>n{,4膮!^AN݀:xG- ]6Y^eL[U-/og,nS[S5OΏkOog,7Oĕ![:fk gK ^tv[<ДGvOBW t]\eb.[BQ׼dQKW1bEq16)|̜ql7;gbe#BǼ9)n۵= ]:\+fτ'м?+9F^¸3 nt!vaμf]]x_*}aLGb4^m;= ]~r_S:$*W*H9:ϙnyoγJ~@:xݶten׳UJMԕlwKG:\?/t; ܎ )yW5QKhBW-tZBGmwR#_5Lwt/݈Aaϒ0էՇm,QW=w+LVx`B}IG(T^BgsB/ѯ \epNrN!eB]q;x{ AavRұ>:ݫpN|<3ItͧiSt`BI 󋢃 2._[AGhJ;:::::EkSo Jw{yt@ ]G/Bgurt=˵ZM\^ ~qN^]@WVr ]1WL4;_K*%t][ M[W[E7LtkTBWBWBWBW-_lћz2IENDB`zICOJ/l(U$U$$$IUIIImUmmmUUUU$U$$$$$U$$$$$$I$UI$I$I$m$Um$m$m$$U$$$$U$$$$U$$$$U$$$IUIII$IU$I$I$IIIUIIIIIImIUmImImIIUIIIIUIIIIUIIIIUIIImUmmm$mU$m$m$mImUImImImmmUmmmmmmmUmmmmUmmmmUmmmmUmmmU$U$$$IUIIImUmmmUUےUےےےUU$U$$$IUIIImUmmmUU۶U۶۶۶UU$U$$$IUIIImUmmmUUUUU$U$$$IUIIImUmmmUUUUnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmn=aM w3PNG  IHDR"TogAMAPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.\IDATxY  0B4a*S2n,*/L8q2Wb!%ߜnuI-Xj[Ϫ;M51\Qo^d[ԲNAQDzSo}ѧ6~Q4uj'٤[~N5Pk_gnTkڐ$Vg8PSfu^ku?R}8jc2j?SˏJi'S=NzL8֮}IENDB`n KAxDؘYPNG  IHDR<'0W gAMAPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.IDATxiz 55ғ(;05$Vc6^XF#¢+Ũ; @ו̷ģk›D%x4~%c׉S|`9\?^=1nV/\ w]Z  o0i1pu$[j /y2oCY&DI ax@ O 'H RxqxFUV:9/2ގ>ƒC6s!! @aF+ o"an K> 6o\A}^qaϬ| x@DU.('P<~_ݤ3C.(V‹|hκ[3R&<'^j >1EgȔ?)IkÇ]LʼnD|[gɄ2xK/ [ffF ^jyXMzp23=Ѐ7ⶦofǼM`d(si C"', -m@=*! lćc'g)٤w+LxK!˒FJ m/Ina\=52Y n/ I%'81ؔfAWIZayTOl*3x$^ 4aId -bW\K OYG O u>)]/S>9/%tpf.k4e0/^\q77/G}%90y}ivƏǟ~f"yƯ|G<==}.͡%Cv_aJggv_10G @T4dR k5?msW%T VqC\/at"2G+vSg^{z8/\g?ћc{vc7׻Iʛ NdWge{m:9}2m^Qzwǵ cۛA|x`x(e#s;:VXXagx1a>i3Uy37q*$santT{ 7߶\soߍ5ZDK7h['sJ=-7׷ s}ܴں6sKs1DÁgnIOv!sVm<̍.`==s$v_4n~s+7sB/hh9ՓKU/`|Ic\2Si.v,IsUi& enٜY{l*_k2ӱi 7>vlNH/[{]90'\)i;\|53ku`BGh٭W99#k!6' mdۯ9}}a%3g;4W&s\ RV'seր99L&sɿRh؜enfAו$Ҹb溉s_$֗ a:gڊa͕ha̅1G[I—240nիZh~ΤY&m]6c2[ ɵ"D1u*[gVs dnD[tAsdZwqĦ3*f\;Q0sD4m#73πɳ L 4sEsV Z a,h*c\8sV(s#40sp0sPU5 ,"'6h\m\ci\h؜e^9sD43yJW-M 1s\9?qΏߜ32뀵3yJfnC@q+ɹu˼5ו/NښRu}η*5̑ȜZ)Wkf3"WCeT[ʜUm8g9Nu%%J'yfں`]IRIYIjCvEW5Hg_߷!f[g4`NCsIL+kJ4lΚ+Q/̜5`N,IEsЁוp?mhNf.vՒN-VkqNmPdE׶ [5b|37%  ܐ4 9w lל!Bmbsܛ5sF減0HjNt7][s_(.v=R`.G4]C ]T3FT9VJn=0\w*uUEsťq ΰ.0mS1܇v}~diZ0P̉?e.Ϡd۵ULr Ibu+\-D 9sX{@sh.9f vj.NiPY]yZAAsP4AAsP4AAsP4AQ.]֐̐K h 3g: IENDB`n =Wf u{PNG  IHDRm|"gAMAPLTE!k)k)k)s1s1s1{9{!9{!9!B)B)J)J1J1R1R9R9Z9ZBBBBZBcJcJcJkRkRsRsZsZ{Z{c{cckkksss{{΄΄ք֌֌ތޔޔ甽眜便ޔn1fPIDATxv 9},".'M̏'F-Nܙ"}Q\ۭxI@}W7%.DtڴQ0QDtu9:ݝhSF[F[F!m{lshi8mbmK;ӦqhZ}ўy8ϛK}Pos:.Id*c6UJү9W4o"=MpA3hZ^xצ^aiCHO{Б.vyGeA=I^WdHB2f\ΒknܷUg$˫>(KbUZIm2oآU=ѾH(,jզv(Ei{ڄQxIGESnmF!#OcC~7nFQ D(I/rU/F?S-U;ML;Ū4Lmq)I5\(h[o Jۀe{ wCێ$}[#HRO_19gݸ6Ϭ&˨gIڑ͒ J#MJL%6U}%q4Ql6> >jm+iiSBNrQDjMV7.&gE!|=pm>mS}DѬږK്qEجm·4pU0x#Ql簶 j9߃E$yIL{UdE*̹2zL8$ ffI`zg#%v}p jϴ`LQ0iwŴQT#Q)8wVp UbbhÎe87e vhq{Ɉ(n5&8Uي66InlV׾R`:; byd F# x{IW VmtEzZőBLn)RLvK1햊.9o1b-82XB{KkKJ{tE)mU~~hUxEZwcvii}ު*׵]vHK#$,)FY2Tok5P(ӎi̳(Ŵ[inmW*,OKI!&+v^;E|#)d ޞUxۭݪj.%=w_=?.mKi)j][VIP7# ~Wl`x̴n-y&1'BLvK1x}H ufdm%:C=체Cu1IENDB`naڷ`8PNG  IHDR;@gAMAPLTE!k)k)k)s1s1s1{9{!9{!9!B)B)J)J1J1R1R9R9Z9ZBBBBZBcJJJJcJcJkRkRsRsZsZ{Z{c{cckkkkkkss{{{{{΄΄ք֌֌ތޔޔ甽眜便t*: IDATx ܶgۤsEmhqG N֍v>#9%E(QڛwoՒϾ$%'SpR"N%j}җ_닋{A}?6S?7߭j=2z'Oo;ϐc}K㿬^~Ovz~%vs[ǎtt"Ns_ֱ#]HavJ%)5RS))UƲaט3N;2gTNdg^imTwLv9)5;Sk `±3sGa~FUV{at_?;33,;mOKkaa33{fTkvSagfw>kָLZ٤߷ӀOl~qn΅yvumRo?*g+d/ N~d#M.Z:2!D]jT ޖyϡ(^6 ]g] lq !GvdN%}G;@R{fj!v UEoKY4`ع O= =9=O}iTRT"Z;JX,;FI!D LH8[D0ݰs'C}|a?{%v| ;Ra=n7FN݇+ N؍@;w߱%+-]wl $cK|W [nzA/B]͍Uſ8:2ÕQIlE!ovP>},$x3)2wӉgBOTS1fj5秵p{gp);AN>)<(Zwq>dGώe5dtK.l#xΆu즍l7] /871t_wvSX V}19_w(8L1*㛟WY5Wl_@5r $c :>6VGgUǦs|. q)aˏtZ6Vq ,nVb דd2; zt VhYvx<-n JV\N nIr2[e|.B||.'_Ž/aǗK%v| ;_Ž/aǗK%v|5kHت"j߱Uu*U+(f?E*lv_sk'Os.\;`)vy|{w~U޹cWoݟb*;FwhgOoyE伂-]&n.II{ǖ@;w߱%+-]wl $cK|W [H|ǖ@;| 30@ynlDO]h®F-lB5 It|Q|#{"0r|9G.'8. jX(fJ'7]P/$4jC1f=L ,%ӡ6 v 8ھKj.vIYwd ~{.>.пx+w!.3y ]&%Ц_Ou|ɪr^Aayxvw_?O|W=nc $cK|W [H|ǖ@;w߱%+-]wl $cksߍ_݅z?tlnplZw.$Lp]Q*?s2=qt Dq7:Op{gNh[N6?¾h ;R~v$ĮH'[waC=p!:֭pڥۻG/^+Ӯ໭cr6Qq,8.']j]H|Vu|.m|#6$ҭoYpIs9-}>>w}\N+:q ,nQm9>JCQu6[a|.E}B?ᶠdUTO oAh(&9OMK%2ڳJa7Q:a7Iζ$H{7]W%v| ;N-cv$%QwSC[ %EI[ucvuCGK4̎$MTv~k iJ( 8K٩c];vrA|Qy#tv.b;3(;D{'sc:91:N{'E7]wa_w1ey!e\'bё:KY:t& Ɯ烖7B :ey>:N1:$nA[!NĐ˰;xTvleVIENDB`nYy&tS 0O PNG  IHDRCUgAMAPLTE!!!!)))111199!999B!BBBJB9JJJRRRZZZc1ccckR9kkks9sZ9sss{B{Z9{cJ{{{Bk9RZZ{cks!{1ccks{ֽ{!1BA\wgIDATx 85kmƇ*s ]3¡^ӭV )2{\e|x,!,+f|: +0W`_C +0W`7`X. ۡ-ȏ91|}}:j ɅL.B5BMSvԅRPڗ)\f-tm.fg&oeiCH l*! {qR.bF.U1eb7TT 5&vQB@P$WkY*2۹Z.W]9Jۍe&A{a53O_.9eaƫF[u6ۊfxpaaN"6Ubk r/یkSkk+3c.:XE)lbZT/ܾv6zlۢڔ= xݽ%;CoP oN~+0W`_C +0W`_C 5Vs5>~^o[F_c_~:GW4:Ps>}:s5:Oǁ?Pd~|̝3t yyzF'FF:!Cۤ!Dgc.dqo0b8N?8b8R{1±2ԏF\Qwf07E]' E?t_hg-nVǥq Uxr& E鈥ƤhnCQ)k ϙz/m6 {oa[JHӕ9޽.'l%e8/ ":*n=P= 2)Vf]B[bVbdtJwD6&u7dX(ov ]>5[!:jM/0Ļfggk#oU}3iX@gh+rFF-b({%h3bۂH3wfR6fОW\ jL`LJ_rƼH،f6,ml6 ])^e{ 8+gH7 Qz?S+he&Qz:?4c]^bxoM6 o2_ FΖmLTm6a3M)V5cnYMi}n3n/|>i+{cmo#Z$)ݹK=3~ӘlPe_{wo+)wjS`x G\Oyq2+8;exGF^=8 (2OWʸ7_C +0W`_C 9DmM88~\Kǽ H?A.yQ3 Ve GQQ*ߨ%/"$x.Ayˇh a0)s~ki:ab]  #DfUK6b .4_i;[i"`iRWy' Oe#3[3f4ARl/  KK6pjd͵(qðhUiajfJ@E^<14]xp Y{8/-C\ezorp`=C˪ԩv!Ukh!)zR9bMٝzǰ`rH1~4 &4/^ݸ`ibֱsYг:8^ΏCͅXdne]4Sx+saLh6Wdcv۲%y.r p77_FǍhXp~ 2f +0W`ct]`Ȃ5 G(tW`xCİ) cw na$H +ˊ|_*Mt沈erRIidtetxFїya ,X 4Mq(bO,74BI\>D؁vpxLv]:vxL]eUZ@W"^>2溬щfnEjTAw&tn˵Kfx3Ъ9z4`"&2Z ]6ç[{ޕvAՃY5Cdit\[^sH\>k <ks?lQ̮Lege1vQEZj*Sްs/A W{G2={)Rдl9x C(\bmD2#fqIWy3ȟ>bɞarVxER'w;/1\$n12 H3"5`_^ :<օPtצ=bm 9Gx=w2դ'I\E ZMvKCUi,uT:c"i>2{b nIZY٥H-9} $Sf%}J⾾E^o^M +0W`诛~WE/ 3=ʁWӴGGYOru[jve!~C]~Nʮ4| kkb'gR.3mUEmd?>E$HڔyTв\\{ wzS | =oL ȼ6&5$Fqs16l Y02Rfʒ2eE̯bTN4Fl`cd M秱>XX3풊uaϗawvS0(nl{@Z Y4} ^n%Wz푤]޺`kKјDSLJm4.h56"Eڔ>#8 WeeKvIU?_m$չ]жg@ij`m+0W`_C +0W`_C +0W`_C +0W`_C +0W`_Ca 2zjWrI0o:]tSppZ̘-:‰)Ak.4d6p>f2Ybs\,1lq*:o!6YxVss V4 ahptB~Lvq1fO.)BD6ܢ"KKefVeb!f=YNݔU͞M/:'T\{N a oQD5SvS Do4 e8J6yf+>wӕqA5HOD^_&?k)^ɆBaMs̐fs X՞CBC ;׈gszI#)rP`pդg⁓@*J91\ip.ga?:?i: .77q %Casǐ&N`N2RFL=qM23qaPumĮ.CB!i0Zrfv;D{16%rNhbiBg [5:)#nl5bD!?!-NDmUh96{Wqm(#8!4{[\  67) ar)x5TޮDwCz|::aua +0W`_C~0(6%Fe̾cnۺAOnuc.x}LĵVca4果x.XwI=갇WD}.3VoRc&߬s.d6Pu A?֪ۭ=x5]18(:-XJ! ~tW֖#2⠣ɘXdAKg 4v Ml#׽P.P/$W2rns8J^vY =hj!@5])p@shz|Y%nu2jQHuK籀pK^Zjs(K M{ UP:*֪֞Ze x3à+0W`_C +0W`_Cs^XIIENDB`nAm,zܶA;vTLmPۆZ>aj<wꞾF@u?SCZ?%/A;mi*K?h tơh[@u7X:TUoo+@U7:= nM;lC/^> *P t_SU@{t :?O*aiN{;-tw;fCghYa0lr@Δ&U>tvS1#H#bqɹ7\Y廞R( jm]U-T|ȃ@KwZ,@q_O(v=欏kjD=C@pGPCz#bIf4 'F+ߑIo ԋ@E`Aa@;Ch@h9TQnv["}>s@롱CT=$OISo P}EC}*4̝tx*ơ _Qdp Qu!fJgJ e8n t[( Qz(Z%P#zzE#bwJ48%ҡ`!6T PPPPPPPPPP:l@+;43n #m"PCft.+bD@v; ux_zomԡ/lPþ|aءX]( .g^(hq +:-:+Cy)ء@E@OuhP7?V͎F{ w@3q44Fį)iPR*5μ%PC5o |ClxQ'͔ }r.WТCCѢCP+CB]YKZa) h4JM~n@kӡxN P܆(hqʡuxA ZOW rh=] (¡"~Gl]p;TTVp(ܡT(:-:+:-:+:-:+:-:+|P[R7-E`(X_%b)q--iC ;-;%,@ʗ ^%tu)eN|t&Lց47/M)eRyi:HR:4NfT,m^] *6/M)e T,m^*PHw(t e/`:t qNy@ӵ$߼4*͏d.Micj!PG*'B@2@}vJ偶n|^C!U P"ﻸ;%8l@"P, uXq}KVBĹFZQ- aG@w[)laӡs>lJ.m<T]}&-h_=.T):@xp肃3Ym蹎@sԩ*L! 㝁b[1L3aS'{-UUG@>-wͫk=Acƙs@)ۙٮ8Tnb}v8"<ݮ~`0r_dgshnܗr=SD%@W:%c]|.Т*z?0.tJ!p&aN)T瑹=Q,S_Y wj>V^8#O WVq  TJ[=4tsl; >;*@K6tI_ń]|v$&( thSEvg_n tԢ 8rh-t݁*)mɁeNY nNq{>׈ιp:_=\@o&PtCKy8C-;'rh;WPQQNA `i@{*gP#j6u3%p.VNp'}w7a\DަJp Gp]OU-1@s'[W "pz`Չ@9l* Gp}76t0OV&IK_h7|L0 I54)L@[3)J- :c;XښIQ!@[3)JiN*fRPq2P:mԮ e/q5#LRaoͤ(M sO]*-,6,@"P$T]Hc,cIENDB`n lwl7APNG  IHDR_ FgAMAPLTE!kBBBƽcޔ, 1IDATx흉b*EsqV] #Tkyi ׃4cAJ0u }/Ŕ{Pz;>??AGq9}@gq.vnS\ߠ_o~Hܫ\/~&% `vM&9Gq1x^^ƂL*99_)!:A_)-QJ,NgJWr_)4/upӣJYP(21|ߴ&Q|ͿKwV=kRMWW_|N3A_x0WɿiSNk4ɿA~ȿpeb [WW1:yn_\=;(sS[57@n~ؿ#AEz(to>~G;z|VG^goGp~tz+g3s>[CbArG]-nV@#DG߾|W2^M-.Y7'[= kjZ=/jq^e#;7gBtX;uRѵ!M|孥ەolOlC#7'̿*ο^=S|7X=iJW(_!dEEWkOv  .ûF{LEg/zrϿnu"fv _ĶĿܞ*KP_ >ѣyMr3_z:*E?쫧W=@.\/߮|*$܁cvKգz7=Fo\PuT-bZiu}J[3&o=<։񯭧m~[=j6_kx#G!*8_d|~Gۅ|DxQjAoeˈoq*]a,o}}t6+=/FV|__OQ28S|s|GCT!36#N|Y׸FXojث 2Ww֍smEfp? M$6I6(/GkWs\>Umf9l\@>;lgos/gwKn <2N) :C?"_֯O.M_1wo|fR8ѷȷHC%"|qN(>~F#Ew#[5(;f&zap?ɧ9䋧BFVE_[vS|NҪE9cD}튉< ׁ/ vN'rA|+<;'7u\>=7TϟAz|v^ɞ]L Q|S=]}β`hR|M[twv{77Y'A_ȿW/Op6=pug@ 4i-Ϳ]3jgh ohi !9;&Elq o^im/}7tܿw@Zup˿/wNbp }K+ٞ"2d_Wx&_ 7e||#:H|qV^=zEIVPo.|a+⋫5$^Y^oU?I|+ڠK|~h1a_|WŕҶ9J`3iw[V"" m ?꟟3Y;S\.⋫??kgZV/NIENDB`nfAfZ@@g*YNPNG  IHDR4gAMAPLTE!k)k)k)s1s1s1{9{!9{!9!B)B)J)J1J1R1R9R9Z9ZBBBBZBcJJJJcJcJkRkRsRsZsZ{Z{c{cckkkkkksss{{{{{΄΄ք֌֌ތޔޔ甽眜便:WIDATx흋ܶ6 j#Ej7[m^"z4)<琺CՈEOQ8Z-VDBz^?~9ԓ'_}I@}S9=za^?/Fz7o~K7DSП/@NG?oldOS 4I抆 Ii 1b3p>礩Z;ZrZHi̩,MZ_u1M{qZ/B4n2;vS̵3{4sCMy14sҼjmPZ&|8mՈur45C٩yii6}a0GOgiYˈ%ܠ407ϯ{֗fp4ʖдMnv~7=͇Fiv5 $8o:k5LѴIFm*S8IӞ7MF5;}NzSΛ Yuvo&h|V/Lӵ`iiR#i>5efO\մ  UR+7% &i 4 aF銆Ior4fǐzi"ɑ&' MN4oIt sM wR4E*Btjt,i 7(ts +ëA° M⇰v;]L[A]lGYO}Hxěx ?BIpZAki7^4'HE4ݿ3FtfPC^ ͤ7hMMq,48M *PJ մ\ IXhhjr4%MRkm\ bZA.^M eJa} ag.0L GKRrFs_sj[VT&' MN_$4*yxE)4w,&+7IJMFoxě$d$&+7IJMF_3]c%{I=+8c&)8JVk}DxFvALӛh[֎yJCym2ձӄkTu炠w k$Sތv-6R~F+H͈׏N4xB:[#4>ӭ"z |lQ~[sI=N[hfΫɴqy"#xIhr$IB&' MN$49Ihr$IB&' MN$49Ihr$IB&'~&L:h3> ?C*7AlIJsqS&͍.=,4 ]f~9utCpO'K0-4_pfQoҜ$¹Ei:sqp9&:W|6w?ɛ%&Nsa]<_OUڞV\$}Mlք% a!Uz)oꧫ|рQM,US&iMFMF7YIHMVo2RqohSg&Qqo.Iqɭ8N죒 DfYoLwBp!s 6~d_1aE)$Tқ6[֎ΒMp{PI L0X_VE3#* [k kޫ!^ثyJ{ )$~H/I1*XBR {3K?"YiA>Fh6c5m*ڦԏaLjBg~ 8.uX_EM[z)oPMw)ڨ)(&+7IJMF\^ɾ+7Cм7O@nѬ?.M]S 7e?o&d& zj&Jr/ě$d$&+7IJMF* ]%à3:5u#F{sIsqT"bKzUp*hSYofJk(Թ P0=&xhP%G L/I>pFވKxkH"34z37 Mb(+_37K^osg3zHY"_)o,7i.st+J3qܪkf(;I_5!G}XttzDʛ(_j4`Tzf.%vՔIuySQ5ySQMVo2xěTܛ9k|xT> )%).GÉ}Trq^[ԏxuCh=FWؒDwAݲvt |?mB5C-.OK;՝NK{ )$~H/I14]^ŽIմ h65dٿau_}Om5*~7&PMT]mTMmxě$d%&#ef>& wތrw,Yـ~~IѬ/bp[94|7'zwY^f~&6rzӵnxTp%XI1xě$d%YIHMVo2xě$d%YIHMVo2xě$d%&#XWBsjQFhZ-rJKgDsn|& 43k+~P^:UiΌtP-)íAu7'}.:7̓ΛUhW_0Onl6ik8oΛs3xbm|,Q.mk$IiވU&EP]%zOe:DpD1o@/)]L$M3QKGkd9$Mu҅=´&&ěZ4m Ls֛jfa (Mm63MM5AxQO-E`RM5Eta0ٮ>o7 N7{gBoy<)mڂS;Ҧa.yo^|0qŋ}j43ś;b&iIJtf)B`"QLY҅e?E]`fh<Ǔ r4E<$49ysFPYrzIENDB`n*K-9&fPNG  IHDRgFgAMAPLTE!k)k)k)s1s1s1{9{!9{!9!B)B)J)J111J1R1R9R9Z9ZBBBBZBcJcJcJkRkRsRsZsZ{Z{c{cckkksssss{{΄΄ք֌֌ތޔޔ甽眽便ƜΜ֜ޜ IDATx흍67m$m5^˝uz)IH,'1XkYd~nD^$5V N^BZ͛5mɗ6?𳊟kyxo 7%Ç7|Ǐ?y|/*o| Wɿ-SjXp5FkbFHC& 4C4柨-\P=j5zP+H %65H 7ЭxUuy3%o[YEuWފ5HմtPr'y/o[Ր׭5H^kUj5[YAQ&(M RQjx^:^5]o!5*^gg .-x{5<;PC]!eO{4hP~yto2*o/vpt֡ BM,Tp59TsK䙥Ӌ]o0S!S˻yYK theGTA%5_vAu1sMSZ@,i8enPg'뾻tk*ޑ`4aP5@@ P5@@ P5@@ P5@@ P5@p`M Ȅ@R@ P5@@ P5@@ 5}f]0+4mMB P5@@ P5rn!kY*_ڢ5:S괯$ކO?8ꉌ#Ԡ[1-8 5HsB0 5[PCoѺo0"zkPϾ*Y<)Zo_QPix '4S BoxJ$ JFQth!P4 (jM5aJ 7j 5+N za0Qg5k`Lh (&oEaMc%~ %Xj{pfX j0XyJ\13[TadI4n>@A_ΧJVA%3C֠4` +A&IPd74v-t0)=PCM÷i6L á@4PCh()i`J@(j X 2q_˂5ɍIwĸd 1?*?2DxWh_l:X١DDw&Ry]AF/{t&we$zA \o,ޮ' Lh22*'>AIFWת_VJ* #Ѡ"5D9,yhk9B,5[5TnZ5DC]\T?g]y)L#ȈvnL| }CPUi4fBEAE?^w`kpf%`v} GC2a[Ѐ0ޮS;v<=? 9@"i(ѫW>"Q?~IO~3ϩLɤ4ό~Z֯~/g􇴾?ӟ2QPTW/X{5ZOr>A[!\= )řPP O )sP(rPHiPkԇb3:G )"B& @#ȃ"#/=hPOFT~)@/ /博(|VG AG=D )W[RHAPX".>U`P(T??%) E ~(L A% Xq(4"(T0mq^ CADm BBHD85R䡠 M 4p|Jgi#="۷6B(T2 #9(F,8c(VBa5P>>BA҇_}|T^3W}44ߘ;%9U)> ͅ9%hݣ)#b_ 0E)b(usL?X ųp9^ÃkO`"P<-(^C症bBADg2 t  jCzHR= !<P@ P@Z yo̥Wzal_2^k4@QʚqtTkP:qPlepb(z77ň 5 u Pנ83_RC(@* +CAwbS|;NU?`E7ڛ֛2~x>P:)%>+Tөu0HS*e!a-3#(l=mN7F#;AAGPІ6g  ~(\7_}e̓BU bs?Őjȍ ʹ?|(t(У05 FW" P>CqH7. "OKG"cP\7R B?U( ɋu#EDH!s`R D,).&H6U)Zb-C~ 'R1gb")z([蟇g|D`DHCD-P 6LP`t)zb}"զ(J'RŶ5^"!RSH0:B"orBQ,RA!|- @ERG qPb"xDt3_̑¾A=oY("*A[0vN6geR=*x>nlBQ8Rw?bc8_*)jW?I=9(CT> 54vVڙ$Tiu>'}6e5 HQ_B=!RTנX#E f7rnB)'lNb83Rl#ݣ)Hԉ,[ Lz'K HaMD3pB#*/RL|Gv ("9(PHEkP8OH!g(=GL"c$>w>>HljmҖ ӡ \Cs sz4uj;% ,9uŦQB)j=!RTנ)jkOLP;,"U"m". }"X/D @ PB)E[EOqEVbV7,.ӃTwEB̽OϼwL 6w>i&RH ʹ)uY(n)Z!RX""H(B$R*4kBQ"NXqRE(˔'V]<]oP塀qu'Ha> Rm Є" (" (Ri (6E_g?E6Ѱz4̎tY(r}AK>E=AI(h8"5;+9( O$9ΫY(j _"E=AI^?H4lhS\? 8C6}ȀHq40v^$E=AI(a` qF$xEtW9(<R "P$ +Ez jF jDπ E@ԧP$B  (" ("AQ ?=|Y=>'ެNSE @=!P0Cπ: (JCg@&гBG Be)PYC~(K (#ገDwՋHmľz!ӳBי\YD QMA_Ed2QPؚ > K_ ~"(\/$sIxN^S`Si(2/edih: Y<9U'9Kg׹u =H!TԱL `b5·?0KV\N7C a[Z;f3B)'嵸Ը*זurB l뉬lk;,d]%(=+Mw;vT΁w' j] 5zн]vj({|;3¿0BR30oЃG4(21Go%~. PEd"|VEfdqav^ ʇvKB1D ErIގWLCSٳժޝ"lnr-4rHc(*2Q}LHvkIsIzW6~ A6BlC3s9Q>X{qkfb9kAf6F's(}YG$'۲ސ.ρOa+[z> "(0@цPJH'3cNt_ڟ2_p#>H x^ےEQHzf0E Nfuc43J:\ Ha@hBbCs@\O@P)|vX=zfb &`WmB8::\샌.=㔴: (JC/ó'@=<*E-t Plpv EG (ET;G>iI,.$9(j : z G$(D4X(ĹP RmPMPB-.ΫeiE0:-."UD#rPb P@ P@ P@ P@ P@ P@PhGnI &ȞgE/;r.TDLEv;,tRcH gDN˜DBӒ?=Z!i3&ʪs?\Yׂۣt#@ 5Y鴆]{<٤f!kS^:5YS^gmjH.4l<ӂ-A|i#%Ai?`K*b ٌty"^;$Ɏl:05uht/tR&qcӈ>-+0E}X2;;r|Ffgّ$C$, w&K$>΢pkHzln0ӋhqEdK _kec&ERgkFu妚> ix~օw[Eqv5Y} :7,9dALCV}=_Z,y> `%ۑ1eq #Q&VIAd|d=@cPvƠM`L\7F52Yp1YT,,,l+P!;jl Qj(»l#&E|}^.vu* YwZlݾfG ¯U7]]Z>dmJ;^׮ 6*𞐥%5T}糒!l0d};WdrO9oqRRGP};r#GƑ;gЅ~ T_Ơ][㘬dgo7Ngd]+.biD2d4Jz6٧za$+vLv}NVJ58=^S˨/ٖOz.e9 d_܅͋rÑKkR"RyՂG6]';gSdML\?lx>^϶4?j~αؐ_|( !Ylɞewd[CVDN6>vb '=,ϖs)h"xg4a<>[4j c'T]N-Pܽ|0lQ_A]7 kZO鑽\#cwd}9l19k,=lq^_ jd5g_, ٪nف?>4ٺg `!}rܵy,|z@ mUVzps=ժ(!Fu;Tsl."f%zLhq%[BP~%.qp{dbdb쪲[^>l+rdDTb+FgAv´׼Zư#(NૅfT^-:zHGO\^v鍰A\ |M|*\ׁV%VufהtҀj䬥s!LH<"+S>_y7a[= "{XՉM-]eSXc{T6תON}dDEJތoʟ'[~O$Lh-_?{kE[b65)|?^qpei~Oٍl)X|`dІ-ފXJ̒%KfN Iءd˷b]PO8.n9v NY[|̠d G1'Rb%smł%,.}tq xZ<'lM}]p_V3xFPwu4dc)ŒYd % =! 68 q [X2lV=YJ;%#}a>Kl8!E=1 f-E7.Amq8AQS,nt kc۰"> In]q9N)-AŠ"/NlbjdG!E>d!D`wᅢvÝQ3Ag{ $* C/> n^p쑬_dnv? k' .,`dɼf>!+.Evܧ╚w$;2E$╛GD`gK#ś l,^uRo*cwli8ٹ2l'd5` SR-.m& o[Pu! d[In6lluAβY!\dzweD ,fT2y"k~?^`'7 z+ddM,4yR vPf#( K̻=z$L@7A (Rql3"GSAM""5Š{g=yrt2Mf%&l,&W* j zl0sK gR! Xll `H +`l:XO(W*4+qd郘l,d#5,`121Y&;ZLLLɎ-\d#JLv2ّOIbd4Yd#zq!lN<6Lo@IENDB`n_öKQMI#ΚPNG  IHDR~+gAMAPLTE!k)k)k)s1s1s1{9{!9{!B)B)J)J1J1R1R9R9Z9ZBBBBZBcJcJkRkRsZ{Z{c{cckks{{΄΄ք֌֌ތޔޔ甽眽ͿIDATx o0@@cL::@4 ?vi4ؾޣM:};۱/nAPDCZG8y!9=}JqvZs~Frqqq)ZVo4oŝO-_:jI<>xz`X+36{Bk abY-0ׂJKZBRo 8PkhuOh)#6-MLnDjZ-*}H-Sۅ6zaX-%b^RK*Z77BHFޅX.ZF-e5%rGk[:\kJ߶fWBYqL]k{O赭ú uhךqޚ;h{6#Z݀+RK Ia?bCGZD'&3衵i!־vY͠ҠZ5Z5ZH$9OäZj>  ,GKPR7ZGMAmSZm- Y )R2V_`eJQMr'[TVZe5J0wk$kVVНQ)hVv-'k!j~8I(藂գ,8զ5D~{kֲRn4T:{kWI+Z}tMe7өԤuV-@ZtwbZF*ѢضY Y )jAW.#EK+@ZkL֞Rh<֏Z# nVM2 7mkr]{E oj5}@̱lal-š[8~q^lp[<';Z(pZJh*]H-š[1i eZXg):w!Mӵb GZZ5Z5Z5Z5A]+h]~/Nd&@EInIENDB`n p1_+zPNG  IHDRL0PgAMAPLTE!k)k)k)s1s1s1{9{!9{!9!B)B)J)J1J1R1R9R9Z9ZBBBBZBcJcJcJkRkRsRsZsZ{Z{c{cckkksss{{΄΄ք֌֌ތޔޔ甽眜便3 /IDATx ܶoةhb"v[ A;m]ǁӸ@_~Muv5FCRhfH@ݑX1L4_/z+L:SrTDag*|) \TԼ)o)DS0=ű/^/B'i0e}L2 EWS~uO')y0U)%I8LS={4%}3Bܾ0'0UAOLݦiƓ05{#|⩜LgϗyuW g q1/lٶ{Tkc P S+ }f䊹.zn wjnu$syfzOzԨo*zsg,sj9pߝ`"ݥ-"Q}yQ !8<:LDU,`.U%u%bEn HQ00b@橢0Cz! sEa{@90WnsEƏ͓fA~ˇuHzc_>y=-i# y6]gA|&0n, `ƣ̒(: u&v[oPk$֙Ҝ)3'} s> =0彏:K)I:dS$;5yʿ\gG0@̤T S0G]g0GP8 T:5@+` NB:Sq0ur%%ȑa5󣝍80(뚏`Z.˹yI1BsA}qae`Սa͏ޙ8. ̊) ocm: a+[Yxu⪗1ɔSQ"L")2 v&2 39ӵHgLQ3Q3qQ3Q3qQ3Q3qQ3Q3qQ`پo6 3ӠvK&ZߦrY,k:sc,5Z(gJen1,gV"e>L]|(~4p2V;e4 3/ad`L3~Iq(*8S0r20V vFwKb #A6y<``LPK2 `g"`g`g"`g⢨LjJf(=fi$ 37]g4o h4rf(ufz'CDQ˙qr{GQə < /5ʗIUϤ`~EF>̑Y-)YA=466Hw!60׭]DZ;CSҏ! O"dv~ѭ@Nięrﺟ߀?*7)O7'K6mC43I3ZK$piUs!;uUa0ɾ0l|v7g+-JG`K\tff`sʙ8%gdb^YV̷/~/5/syj=/f\ Z (amm0&w5'-Zn'M*üBz/] 3Ǚӟ 6[ a'9)?,LUuNfnը%Z?3BM>tf3l$n\=3BE<i1zgIڳwmݪ%Zə]_:Iy$[O %9eI51+at"8stziZ_\X\XZXZmieie68?8xⅵ ki[ve._)5֮_ n^y֍[Lwh۸qgʶyo~l3mL}ݯvo{A˽E;/ڷvm_z5"=O?pnn~fHRp1<,#HrCNZcx HR79Fw3|CNǏ(?6FnJmbO'xΐS|E3xr՟;xpʏุ,2X̍k5GFRXN9"yʋcIr^SMrd$MxqH˂˃ҍ‹÷ e`1SGGCFnZels>6,FccU1Y߾h'|lH12?Bxl,؃Qd,}՝_rc#bb n\X()W|~Ef~_l| v2d߮<ޱFYDUfrilF¿O? ʂ/^oyr3OǮjȡe-[Xqb,+awxAeTo!¼P H>;uH]MfIuց0VcV$1J'iu4(eIKJQy(Fi+I8܍Y+F"hGQoh16n^cV.FԙfC/:NmZ|q-BhY ʯ0:PD  6Q/k`tMz>LZQZmR‚Z-\@4x:v, 1F%%c5:Gm06b~W݋;XE4-n1xrc+cer@lI-J-_5먻:m3ZcjBh"ZL*at"p0z!Ū%jT^7,Z۩gvFuHL\'d31 9hta# K/ZY[9sj%(:jݨ ʲA$7Zyܘ0hc~aЍeeT6,^hic+`ucT ׍^h7,bVky(?uw(Vֳ)oXzΩK/!#LR;'g2߰28F8*č,p E3,BǍeu9"Ęf1BM[aƸRnuB ՍaՍqǑ| Q~3z#?ܨha"#I E3ʪ[?Zj߰2*Z=qf E3.F aL{aŦ9jCucT ׍q)X7zaF߰BF% E(S1| r.3 aSKAXVg3߰B5t#M4˜aeB%N7,jmeBꌲjqtFF2qE1bVԶŠ ֍q)X7FpV} +6ZhǍ`Q"L߰2hcT1F9u K55XV}0vIx*̈́ /}0ڻ@"Q̲1z0v3p La4ScAYln ELm .CĘf1ŠMkՆƨRnuŠ ֍aVh+XF(ntj_7g1 3ڃ2hƉ2|7e0bclōAY0' $5 q}P&Ԭo,^hic+`ucT ׍^h7,bVkyōNg1 3&<7,L(N댲~cw# Fyc#({ 2 ۩y EAYy"f1Vg119uT wNuﮫVln Kڇ cZÈN՟#\a2N‚Z-\ 29&퉮%,h9Hag$'#g#!""$Z v11qGM"߰ae xa*_m",,X…Dhpab3щU;0)v(+at" (iRjOP1F'b}.={hԨ\+IENDB`nQbRYvuPNG  IHDR82Y:<>PLTE!k)k!s)k)s1s)s1s1{9{!1{!9{!9!B)B)B)J1J1J1R1R9R9Z9ZBBBBZBcJJJJcJcJkRkRkRsZsZsZ{Z{ckcc{c{cckkksss{{{{{{΄ք΄ք֌֌ތ֌ތޔޔޔ甽眽眽便ޔLs}'zɳ~[X\8EAmipc̖A++_^\vEPfqm85-n;]]'=xȩ} &I 18P^rj׿f~V"sܧsYFN8nY8n9N%+q&qv_zcC~nq Ir[ܿg!r伨/hD9S&E pem;N`zYQ*vM8NӯmKiwwOC7,j?3nLosܡ1p^[8J1ҩ1:1R(-qpD*8,Ǟ>[ඬ[c/+qG(U-ҲW {-3"5cqqouc+q1Bg;1 rƸ8`;150qjwKKoΞMc6z|qR :܄^UD1QqgIt\1Ʊ(ǻ*/1nuzYNT Ng;LIͱN`gǟo (KIJ$-1,oq|KWiE 9=}8KEpGV rjJMώ7ղ"M_8S{hOOuxw x+;J4'7`.4NiE p= Ei@d M(pMJH!pÐ R8 ?nH.{0Z.R\w QMΈmp!;v|,"\U!H!HygkFK޶EFET~u5vV-K|_y!BzZPhb hT#Y"{Yo8gi WuyRz9]xz@\p 8N]$ȳJvj8px \I/8on3s&+7xט>i8t7b\>`~шV;Nsp$I$D .՟1B K 1DpԴs[!H!H!Hߴ+fkva䲗߯/MZn>H?zM\2tWL*;2]]{W ZvOZI9RUQoԋ4$Muǩt z8D'Mk35\S GՅ\:.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R @G?U~funHeZG1z^* q{RGf0LܕQZÍQǤu4xDž(xDQ fy51w_ԊI]'ǫ9Rp遳zO ;^w{z1VYXℎ:.N;DfKȬqZ'2+?[ǵȴwt1H;Lkɗ:D| mW)[ǵ,+.2vPDfq*L{偳zO HDfWm3Yf3:MY:oℎ:.NX8KdMMらL綪HoXo uq&2wb$j;. +}p4QqD&8`"X8瀓bEi/|x{չwȌ׷u\B 't\qqq8"3DLHDI掛l\ȴȸiL"\a1Uqߙ)SUKdzY5ΎTLf3 '4%i9hDZ??I'q  +8;VW,}F* E E E*(Seyrઘ,䎚2+L=&`D#~UqGd1QBįS:"c\ΎtroLW9cN\uq8"3\q= +t\q ]Z7e_?ZT)7p$UDfӜTLb$͕F%2m&tف*[㪂\MkG"㠠9ƸJVUiMLdz4wl\.y#TfZ pYh%\G\%pxpjq82@΍͋\\\(?y*O^!WsD)V<}+;)n=^[s R+bw[z 4|Be'3Ickjg4Dz/;fq 8뻎uq8 9<9TV7=Ƒ";S[qs8᷈ӑrrqsޫ nUg5*r.x뽆P 3~CM`WyMKΖԊITW#M3| N<w!.mt EK0rFKdqϥjIENDB`n |[ UNH{;PNG  IHDRmJgAMA*PLTE!kBBBޔI( pHYsj YIDATxϊ5Spe`oB?M!$/Rt/!(yuGeǶtbWl>r#"U0jZZI~Ĺ[Tϯ~Q?p|>~~񥕛 4/ <=pJfijJӴ5^GAd zC՛3Tf}Z~7PW81%Յ7ԉ{sٲ\魑;sܻ3lkMCܯvm]˦2 ?ͭZ_vЙFZ_[o<%wε_zkew*/V|> zo.'z o|e7qS.P dsf3 )wzC pSo`>15*@vWvΓ$<ٖNu(Oy'ʵ%ɖ%َ:_:po] 5<]w _퀉'h/jFo/oЉrЅKJ4rЦl'm &cV|֟UZ6IMH3 ͑#dAEN܊ rO}.c⇧GwL|򹝃̜@KBDj /%ABExN?n/5ub'z Bo1{Syk-t݈+ mJm^`":cp{|8, 6*0U?& č?uīu*J{DS[5nIX߽Ho1wCIoڷrXX` "$'./.ɲ_V7\zޕdG@~FF`[ƽсO5zAJ^Y7d"n"2YR4Ib O>.9I\ X駿i|AֹQ{3r{Rym~[=ǾXpz0w$uz[#z_冻>wqѩw7ow-nX!/E\|-3[QCS}>|pbݰrIzO?@``}*fgA4OeP7zwX Prϵ덀b>w.nfs߉JM/u9ĭzYJuIwQz=Y"̓cHԸ~%o_ Lkh7..۹v7zhl4/#ƞx14L2?βrQ,;΂p Fu_H'{\ǽܲ%'hf4nqJA%4OШ8n7^6A77= ^nQ܂#N&񚢨C'o3G` Zo< nHn3w.}Rn>Iy*cߍƷz5:2+:Cc7NJΐEOpg ϥnYWJln6_Lq[캂l]7c;)qkM&ֻZW:[ߙ(yp||tպ.oqkS5+}rΐPgϐ͊[RϜErp'3EMeSc68g:O"nTM2s!:7i^^7i^wtL\[6t}MSJY?mޖ;$j klߢ; ܸ 1|3 Tɭ>\˭wj 3m7hV6W5O m\Ro޼Ml_ߔߘܼ&N{/'}GHooRN R_B7MW ]1z{d:uܸpqwz'gl7I@o,yl-ء I7SD~GƈKNvy<ݧ:"mKoTzx9 7n۬KùWx52&鹅?轉[O1[e-6nYMM /qKg- 4F6F{G6IBb3`sGD{`+%r`kzܹ7VnIb厍oψ[dVaU6/]ψ;ϔ+Mܸ3rwl9r'>ڥ(Var-{Xܱ1Zl /U+f͋y1>x`op ,{g].Eww̉p/#Oʏ*O.Er;6VnIb厍1xgZgmLnyqp̈b1/n^$0n´{X,x=,V[*717qFNw*f]}^L%z Z>5%C߯b?$Xpt3u栊r+3=,V{#7n 3= >i>1r?m]=IENDB`zaB]"I<9k_( zIREꫯY ZNj'93Q9@P@ċEHR "+ #UQn\o߼}"/pRXA˾F?~X })+!_aC'2/]n ƍSNN)7n3qνx` %7eEƫk'  :O$A~Nr ҋʉ'ϾeeIS}CהO›rhҍ3ķg !u"-q(xY E@x]nN?5NF oDq9SY^Ak;}b]~ "w,/Rv+uMֵ/EFJ:ᄌsʵ .b]{EE_S3/RHH)_T9JwW wEW~(2 ccO""5"%yzƞؤMMhRv˽0|T̋̍ ~t)ݯ;wHh"u#k~QG9J֪7ꚁdn-Zߚ;֤A//jnؤÕS<,xdMS\?JB/RԈ܌ʋowsnI/R zWqߋ?T? _4^\xQL4i֨E((a~Qz9T7~&Վ5EřE_bm{qD~^Px7#kx q._&b@nQhDV"^F/NjwƭޠV^L2fMyѭoTzbGY) iێZ2cS~1E~1Yxi%(@PVbl##T6^rbL0%U/bT,{U(RT1?>D+K]& a@ʣHTCîa] QC"|b׏v~٣ B`D\u5({gDH*bxQc.LWXuS>F7ы0^ʽ<^uί٢OюPTEy(Ekv,˼]/?}(:ʹbퟍW/ob.n< Q,:--Z_.z!毪vR*b^U(>QLQ}z9cR)='ۆb^#cߞ(v3ڽbhᆟZ,IVD~d-(b҄F 7Z(sdiDM.vny"ҤX+ؽ-)VD `tRyd/6): JqmY(F{*P/.]YFť+7+`KTGbF[s 6 r 6|fI,(CRmF8Qs1"qfɳZDN˹*b;E5x>i<՟b GhQ^4iFH:{ʾQʥhԳb93FA1ƋS^뼓Y#E`Wiъ<ìc9ieD vG P/Jzq\*Ջۭ_Xz17+h ܬ‚ ?^ǐbQ,Ez>bDO|\mnV~ц{L3K4ETmnV~@GњP7SLEܩ*XUXAS96ܬBa^gҚ]gѢ5B1~2&LYF;w(":JJz1w P/f(^$ghNjpK鈸 0>W yXGG jvhE:fObB(pm1e@b% x'\Y PA+sX6_4v !=em(SuE\̩b)Z{ $ ԋuF}MIUnZK+-| vFG Owtѣ5tQ-]$-b^@qsm}qq‚]%9E2Y(;GKzq .`' YqwG;yQIe#&+.bX/#EbeJyC^v6b^U 1#. - 3M+cjy%bXB`AP7gJΟbXNfv\Ssn%5Q{fzQ%̋Kqũqzq@f NNj+k:>v .v@nWdzQ)/[G:歛#}%EUX{Fvňx/#M x):6bB0PJT3@ܬ‚Ņ `` 6ԋ`>B32KQĐՔ~&WzPe 6bRJ2SK$b-P TeB 8h6_ EVbX>U*aNj`PJ5D&")P8];ͣcF[Gb8./,R_h={ '_XNjTj/ԤmebsS*E b`6Y_UU0@ы%>͹JSLŪ2΃9*(A1@s"^pRG4 Nj!k^_S2]F;ͣ#[ǥR8*/4B_X}|m#)7+h۱艊3E{W^e; 883 蝴(^z( yt@fLդDY,EX,QF%RLө6wHP$EەH1ҋC(aD)58DV zU>bdro_^-mlS|::mD1x11vCQ EueB<#)kRD vL" ʋR^Jbvl^/4^lL?8q+,йKK.4XƐm<ǦMBϡB v\O]&:^5kh$8/ND^mrˮ(2I IEP,d1ܥKh<:RXzq\*ՋR^nB-ԋY;y1Vhs.>EqWi] Hy,^[OeQQ"AȌ9 1H/ЌԺR*$^y7!X8*c4A[4"p7.^.`ap}*KWnV~aNsXuǾ] q¼7Q'TA35bh q`f-S2c[Kaf^6鑇"dh?ڋ{٤G/vzˌ/hbEذM]h5be6R̾l2bHfLξlra>]9Ō&@FigdRMt-NhW9Q춣b(\&6I' D1 hVVB)W&jpIENDB`nlGPD@PNG  IHDRI0 ysPLTE!k)k!s)k)s1s)s1s1{9{!1{!9{!9!B)B)B)J1J1J1R1R9R9Z9ZBBBBZBcJcJkRkRkRsZsZsZ{Z{c{c{cckkksss{{΄΄ք΄ք֌֌ތ֌ތޔޔޔ甽眔眽眽樂ƽrbKGDHuIDATx흉CHk`FgEAAqŃuqv]\WG*G;T'y_I_:H."С"$ oʵPg ΞisCZieieKVQWVmm\quM66AuH7oܽykҭ[{!Cw]Hw޻{{Q#=y?Pϟw$6mh@#u֎}AciubTM:AjG֑icV oنw= Hk g ֓/L>6M[y4ȏI|Qs'DR'KH II=GIO(۸7@Гm<I?F`6j8Y:1݁s'y2e n9aϨ? }'=#*JGS2J5O 'dQ<0:OV0?8ONB9N2IbX%$ 8҂D@ '&Tvq2Ifd #NfW'CH'1N6nX'dqb}Ґ-f'JPݫ7UTq(O&dVD'FR7mhY@dd6N"I'K''N!'z'< ?Ɠ'!N:}ԓ$IO"It[Is II?}'IIM HS$'yzEܓEI=ǓT$ؓDbO=I$$!ي'GI=I%JOUt#{OxzEؓ";lI{Eؓ"aՌ/LГ&,{E|-dڶL2Nz}Mҽ [HL<&{LI"'Ğ$RkA$㌘$g$)=NfҌHϻI8) o [͔"ق'sԪ<9MnGzx#'"{T$[dzEׂĞ${LQQHI=j@$[dIRλsIPg k{HГi.q\bw\ /,'+䞬ں{Iԓ^8$]dSvW$drʰHL1I$ؓDd[?$sZoH G+{D2lO="gdHt96wɞ(d+c/xdf:0 )OZL2Dغ H&"'5H&"q$$$Dp5URU1j8’[a nH12SNU I*ɞ`$$ѫFRL$2STb2Uђvei$21SELґ4EI.])M&kuU+e \h=i{2~b~Hleq"&I(Q OZEָ6a}$+=1ndJhjUv$R㔒IQF'>6 `U5Hm{L2cilqIoGA$mW0TPW  %?L& jCBں(+ZB+H*uKFL'yWw̲8ԴZ$G2L'|鼭jqi"ID2L==Z7+;XEFr6OšՊP$mLVlH)M5&[)Q8ԴZ$Ydye[R"F>IJ^ j=مII!ĤGbT"<Bf5"T+x{#da$ $PRu^PfӟFU$mty!$ҵ;sAERbHsܼ0s +p<9$=J0CR$犤mnR_!%I=+>s*AYgbc)Iyw FE髇z/$щ=IVd'P>fPOzHR%G^a9Ɇ^1$t# eI6/(N:v‘ HwH2H;3?.!E'[";NIIwl&ϙ.dXtIτ̬5xyEgɶHo@r=qhO'ٻI2z#$ 'Td'I@p 7BW~zҮNwW" 9"}q{wY{_?7ңo=㇏?y<~>=K?K~bK~~_~>98{^K~{W/^ҫ;K_Lay"c4;CDv#X29D&&7op"dih(&;l21LDH"XX%mkr;^԰ V-'[p[0dϷeeHC,CbːX4Ho#NFhUξO#Xoyj<~Ѱ;u6u@K!% /XD/uXH胴) d0K:`0 gVŚ0Xs5;,܀|k0#o6:;.b96 LqB3H̃ #XE,dc6 RK,h 1H^{WdV̟Qf 7{IXϴy̳Ib9#*O[f|GeXp7¢'k[`nq0ad_b(|Z̋+4BNyzHUcKʾ"dcy5źv_ .cZrb ȾEF!Bh4O-JLPQZ-1͐/TvX[!8I!4Y^qϫ&#X#G\,iwXm>L:L6YX=/옘X|jbǤ,s,=5}ѰsuCSSt/N:m C,CbːX42!! ieHC,Cbːf??э_/N&2~Kn(y,!﮳]Wo 5њYG;f#͉D>/Lo[*|r{j s򴌅auKXh K4Tl.>~bMPe,_z7?BR pM|I+Z?Lhn3s+RЩTUXJ""eB QJ)G}I.5Lckr,ߘZݯ]biE$/Pg!U2CQ7+,c!,Mâi%C->·V@X\a,oE+?F "!_Gq;iAxy*# U,;e:C,uXV.w<,z3ᰄ=ܺ6M.;eqʯ`#; cn~ÓJ>c`qޅYPeߐZ(~Ɏ^WB5c8-TWƲ]~i rsc FAU8*}7u^]eeoܫRKP5 bu%7eELS3y[f#_n%68:ze4&F=X-,ybϷ2!ʌXw7XZUbXM-EG{3]WƖP\QE~-ž jѦKNZlLbηX`CĮUl+,aYk,[܆˻j=;鴂N.t%K- ~3bͷȠBݶh&ɦY<-)>jW.| 6Dt#+?Ye%f!}\7wexju GvXFBʤqjUiҮ|gd^$,ĸ"n[3"Jd^ ,& `bExM,2|G-˥|Xo4JA:ryPsA,ͷt[/(\,[:V6[{bՖhi;k2ujѽ(.mIli2j[|r[\,w죵ۅ!Y\~p足xCu6 Cmif_f_&\~ X*{׎Gcj6t[Lc2T774ǖb@|5t`UbWc~X|'BWb]k1Z|c MaqR> b%*,jj˨Y%7-:g9_U-قZ2ʼ8~ŇH}WKD-` `7:|,]HfPeUcزjQ(`yl6T)|yk-yl6TIi6j1[|j12O bJO.ub=b<"B32PٌMS 4/ XrVK_a8[-OXX mZ-[Ϸ 2"$rR,u9j1zƲkoKiU^-A,Q7= yX9j2PvѧIn6R 1W$eJO׽,8X!=+ C_BXEdDjI{rh/fP`XrVKo%`YP[8[ Ux-`}<9]Tgdf%]?/bXR-p[vao׶J-⫕EvRw#$a]d:n[|30J,U ",媥&CoLfm30yjs~XTm@%qc,ZX pjuAa顖Q%uP50p-J*dXP-T*1+v @<ԺI>݋52ֵrZ 7b u]]t xI^[bo޾-M޼b1 KX~[EjfG.=2r%&ȰeM,j!oߨ4mߥARj>j  .}:"~bm!TZ5w:."*CS-Zs_i菚Pi7[XKLK'3*j7T'b{ͱp/Re eƐd&jYRV7db/*'IگQ ɓohj1z3 gU3c_;̍K\Eb_Xo\)E`J݈A;(U$U$$$IUIIImUmmmUUUU$U$$$$$U$$$$$$I$UI$I$I$m$Um$m$m$$U$$$$U$$$$U$$$$U$$$IUIII$IU$I$I$IIIUIIIIIImIUmImImIIUIIIIUIIIIUIIIIUIIImUmmm$mU$m$m$mImUImImImmmUmmmmmmmUmmmmUmmmmUmmmmUmmmU$U$$$IUIIImUmmmUUےUےےےUU$U$$$IUIIImUmmmUU۶U۶۶۶UU$U$$$IUIIImUmmmUUUUU$U$$$IUIIImUmmmUUUUmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmn\++zys4|$5 PNG  IHDRu7gAMAPLTE!k)k!s)k)s1s)s1s1{9{!1{!9{!9!B)B)B)J)J1J1J1R1R9R9Z9ZBBBBZBcBcJcJcJkRkRkRsRsZsZsZ{Z{c{c{cckkksssss{{{΄΄ք΄ք֌֌ތ֌ތޔޔޔ甽眔眽樂ƽIDATx] CH+# D;:k{Ωg^t']I'T}թGw`Q@{qEq@[7]B_/~4x˃_aȯ \2262>2~l l|rl|brlbr8lܮMMN]F6}cjfjM0-9n`|̣u-/.vl%wq[Zmeyuyu~?| ᣇ=zx1n`O?Y:ϸ={3a=k9=^m|Wx'w>|xo>rh|;8|xJ8~}<}1ѱQ`|>169>#W%בMM]15MLݜƧ9ﳚY-N;tLp[_vgqa~wi 6bx_X 0}Gkp[{y:0Y_3\l?7 `^z-ss? O?_Co_ GO`cxpxh0VQ6]v5`Od?윰,<>:ڠ-y :mwVD ,Oʿk5Up#SUx r5joG7j>pj_aN9̾TA?r? pojE#՗ڿ{j7|M͟UE'A s>?Ny/]bj0:WZ0 +I Q06!qO~?&KVߙc~#p/-U@E{p_5nPtX:.o )k6BZ[r TR:$zf2 c?2??c#O-WűT??3q/c?2PGX0OWohW kؿ/ZD<ΉO3٦/K{|hӱ7Scx/կb%}\2S!#:iUu gDQcPZ8:@+:[V~D_о>W>hߢQsbʼn~d/ ;D쇗 ##xŕ1|ұ'ӓ$>T< 1q?'sxl!ux<Eb%|} fD.ԾO?}s|&CۏyG5Џq~&X.:p" ǢP=GFa3bC'b5!Z#ߠL56R?E9 pOcP?PH j<ݥ+{L?j_uCObꟜꟚLP?~SμP|Gd~8؏q/o!?wy S8_QC=nJWM jox}>~d螑CDO~T3ՏĸB߬ۊ_Laa E}?$[46zb?|/{4b?f筿7y ZOl; O/¸@^ Gz֯2'y??MqZA/øCeŌ}1zΟ~>럞9Ԝsgwuܿ]?Ev ӔĜ u`xT_K'ks:g??c9q_帟faY0Wگo$p;}"I82sjXkhz{s4듚9)#s83{sƛ {ErWco9sCr?<24*9 3>m?17 99o_ =qbޯP?gP.H-rz/w<5+~D쿮b??;ܧbBf\OcD߿/-o;ur7ڇX߭p7 Ԍ@ .~m\.ovBvh/ .~;n!_ v<7Bğ~1Ex훝;vwvv_NONNOY_*eG}'x_ax vwJvw w  1 w(%}uRv4ElQ^:W);^EԴF/=*(&yE6'{zj'Ao 9G sO9W);O C!DE@(bk((yO/tN1yJ~+ZzJͫm~LJTiٹHD?t WE/~4g{#$?$\COߌ~U ޒ3W*cDrxe~xlWzE@?:UTTN&^9oϹ I9C Ju1' XJ zVWq?:&]U?R]K~kUʎWolb6b?4xuK*c^Uʢ_`tK9R tݹ:>CDا kG+=U&ciКw՞Z˱M$copRK~8a/=x7O<_ijM3C.bL9 MO]}GܻqRv4Kr~"z@V‚~?A?cv تm; }?xcGd_[F&s| .ׄ*9-_VjvJv8W%;EM7I2[I}Rog9sXa~/e {\_*&8W%;Aƹ 8UɎw׿svrP1ؽ~CPS88_E~f#WnR/NʠXx>~wϥ?>O_Jֿo{Uݹi,[]{'n֏YwS7^I8)Qz ]$[ϊ ]$VڍZ੻}<1~kA,}XD?3Ľ^ii5Qw(gmMt.Y/_~ۉC?[^cKlO!c'Пr}?aŏ%cԙQG=V85$Qw0f{Xd5Bi_/̳M'S \n~yN洟&+ M||%6`nm/7.bZB1SG $Qw(?[g.5SO@UMARVuB/? M(ϖ] SƖT);$7tI3/gM(vPJ=vl'L{-KdLODR)z/[F#MxuAW݃׃{D! kҟv`VZo+=kOw8"Qw]kO An?W]k,MxU3__ڎj7?Oݵg"xqkχZ3fV@Yz੻;qE੻ASwÊ__ CNqTQ-ì_x7g+xnXk7ΫH~4@>~~> r?OчM}r(~vmJ/ien8ԟ ~Y']ʻZ(L2w-9Пl~1u?'k'ǁaAr/ sǝA@A?KHi;f$ 7:\_N=A&'뢟1#x(Q-IF6i]߮/zԪ BO''Y8KnϢ_Vzr^ϯ-?e7CǿB Aځ*5Il~tS,?a)U>&X׋ 2J{f?+#Eչ+ŷXUc2i\-?/?Ԓ穜੻zo=F]??߫~ի7Ndx;s8Sʓpzܙ^䧗4{D?mw>Dwy?oTޫ,QuyrA{^?w%~1HPo\ =.Xt_9 M쳦^ZLM7] JI?żFD 0 &Z ,ߟǜqk\< _SAoUcu{owbY|8x\^ҟI~zOoH]rh[]÷o{p>߆zW%>Na{uM[V3wZwy ?oܛ|'>߄k吝tOWC:/?^.!F_y..iT;}qm>'WqKaȳ*ߍ@Wn3[aC!/?`-R~xq]Ŝ OzOLLϭS_68/ ஘?|ηI]I.pټvaǯ_Og}|CnA0l.S\#OymyZ &"ϔ?Ԭ5Bןϸ$N~'W`SЃ)&./_Rܐ}3SYw!h ,ZܐCEj%7_9N-'U[?z==K_3S10t/ݳ?ĐUu8|j@#1x'ec-VP %UBw PlE- _{vv?hʯsǥMҍn4lalouETP_P0,q*_ӷlbEn`e`'rΤj_=a-V|WoX֕S[Kgk^5MǗ4W^&TDfU֨ nEI=,gdV_{AXM/ZUs3k>:O8a[򷣅U~_E/r^ֲbVEdtޟT_)xAg/+{k\y/\\\\\\\\\='nE[ݱsm<+kDG(%s}5՜z-pge g[ƫP]5>T?_1 LH'dxA]LQzTL< (1iݮ4hjRRBj 8nT /m1_n]F]!;$ƛW wҟ^RѴYn(tW Ӎm ʮKkUs+2q"^_|2\x.~v8 2-O'=M<)XOMB83ᑾ~C<t          Nށ5:n ,V̗ӊ+#V/6Bf\nӑK7,&mi.,~?*x!e+C<=;r OoüL(~e  4s…}/Z@E5ȩ9^1Y7hK~ί7$N>X?SK(LuSUălgP̤Լ [_ϧWClY%oWهg**7;3?yN&Zfm']/PQiE?߼\fY_ ?/Ov|e:ws9Ο,14g*踁)~1P]@s\?֟sC37?V|{ k>PZd37>q?p\\\\\\\\\vU-݌$ևHחnKA6iMV_h6_:2 1l1E +RqV,z}Ͱ i)#l+dQq8>V>^n/ʙ^s|X__ ?yg͘t S=y\# Uno dWYݏBnnPWIbgeP. wj]sWnLfި+}7Sq[]oW_^rPݝTP}?|VܶLSvE_Zf-8gl_~G}ܣ_?sUjoH]ҟч/˦+\`q\Ȝh]v;2b]O1S`*oO#+V_F4z>椙J=zC;.J2a(Wq_= ]]?Y-$$k+[q'<ݑą'̃+8+8+8+8+8+8+8+8+8+8]JE>=׍OH!>unj$@.z^i]4/ R?ܥy# &^)+I i\;./,V=\_q뜻 MGF{>_#&Whl ٬ iq/5'`;2exjCd307-ל6_2e=SxQj rjGǘ8Xb#/uԼVKl\򿩜5h-- LJO`Pr +GdÙluM*57'&k6YI/_Ix_)C/oت%mx" %H[ o^f.J}Nk,qme5 Äi!;>LCi\^T0C˽lP] 7rEt:mKnOS 8bq|TvmۯџLASov/-᧩b?Jw{V6TlԟiZJVLsQxo_Wv[rʶ8+ }+2}xH|BxԮ+YNmhiXPVtFD;n5 (W?(/*'`K[owU]/'ސ"k O ;Ox?'yd`m,p13uoi4Lw BɡLlZ@CvP6mճ~X2Ƹ4$YaVfs$ *mʛܤSlT\jԄ,^\7QU}p=.˔kPˍL\S]Wk\Oojp=?;`_}R_cQ?' 7UK7ҶWaY.ș8EDJzŘxZbمwj*0W?8[HO?xXx?'.gzNu\:aESK/90/Byv_U&Sq /ϟ?'Hp&khˉ6k;7o,_kO)_|(S"#5 NZ|~VF_ L&Wm\gҟٮh)zQn?=W<O.\^9w_ouonu5 C˫}T4/OrfEyo n[/3嗇3LMFENʇ+k8!pYy꯸zhCP{8\\\\\\\\\\#l4wOEru.+RY9unj$< ԻJ.\OiPpqE?3&g?G?pG?pG?pG?pG?pG?pG?pG?pG?pG?pG?pG~!\7عr-j2K0"݉?xY|W7WLH~6-/|Q%R=Qc`'cEe{S38;B=A61-XV37/m-/<j`Qr){h*Hr\D}i<ԫrv;Yo*=drt;5ǔk;W4+-7]|sp<>~zhCGVx$W?pW?pW?pW?pW?pW?pW?pW?pW?pW?pHz2!xˊ{Vagj> O¡7Һh_鹇~K2G,q_?p'/i\;p?\\\\\\\\\\\=G|?#FvqRwG|?I9VSy v~=#墷0v_;3ܙ/\5ɮ/Nx)L׆3x]!yPf5IDAT9NB*ׯR/eI.]Ap(TcӟXy=CfNavs}g =]_П4S_awheX1g/l՟ЪQ3[ <<+-?G cԺ/Sm;oYY'>qwFyޏ<|j_ӘjәwkaU'WjY+q?<<NVt&oXnè?'~-;̎ҹIENDB`F5}k˟.8xt(<JFIFHH ,Photoshop 3.08BIMxՌ8BIMxHH(FG(HH(d'`8BIMHH8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIM JpbJFIFHHAdobed            pJ"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IMn2vV10/s?t/<(+YvN-Z@9'AIUBX6@eW_ҾVO}I$I$JTQ{ƗKJd.Z>gK,ز3:UMXpiۑ՟?goղ>ՓVJ=7Nӕ2.o;nV{=?;zrl~("ZO#AW5YH:[1},]UUMm6!` hZ֩c6L~i8Ƞ# I$ԒI$G9is hN_|bSq_*_M[?3鿣u,}TL]1ūjw)\)~?q)=]o O}>v ?Ϭi]ڮh}Om<98}\9'q?j+ōv1F//IcCIjK T ?cZCfh}.gM~icԋGfI$aBH:W9yPj'wyV{F6}Wsa"7Xp䳌9ApI%CZd˥߼~~JFcI$m?FʲX&$;`I>AmPmG2 0Ӭ|vXK{ygW:Bckd1tXz~j1AOkZ|?uWu+Kc<5xU9̍C=EByD("yƼniq??An;{qKh}cǹA\wt|" OFs⼸FYCf'ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@         s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?*UثWb]v*UثF]ϔ`FVld0yXwP+Wb]v*UثW*UثWb]v*Uث?T6Wg.9r}D2wŎmO3bUثWb]v**UثWb]v*Uث¿8 ǜ+TCJrsVh $OGUjQ;SBHZ:ܺO4E~N_C#*R`Bzs')}E5w^UثWb]v*U*UثWbZ;nM|UyZagS FkZZqs;9ty2Hx<55{ZZ㵾c7vdzogvT4n^3YS' 7ΩUثWb]v*Uث*UثWb7PZD\85,ƙ A [?3<,`Z||*}fsZNΈcs?3PYL,~pUh{9eNqF;F9xUM :8Rݼ/yVKTp(e"~\xE@:L6K%̦b]v*UثWb]*Uث^H5i>_优z هbNJgaO1ξn'CyJ']+=if]Vg ?OI-$l5'ߤɺ)h3NQB=6OCgC՛'. v*UثWb]v*Uث*Uث,c!2/֊"Oh=;;ˤ\Z(}_ެ4hnAq^^A .n]IUK |By3:#mzUپyyX"@(4x`^+6ieO3-ثWb]v*UثWb]v*Uث*eHǠ9{E1c.A1i.*qTn3{'꓍z!z tNثWb]v*UثWb]v*UثW܎#PI*6o4+11 ^ʇ<{?ю=RR$D@U®]v*UثWb]v*UثWb]v1ү&HœD&Q <>~Fj˨yUVjȲPNQLxz~7>EwO,UثWbj|qC{`J*UثWb]v*UثWbn4Fu!1q! _ y"%`$\yΗ(wzFխu> B2lY#"Q^K$ $bz&kb0ZB#YFh2L0yyZ`C#WqZݔ8vz]'eϹ|Iu3NsgQ?2FFCEy:dz-(9|YyV[PO޴9:|c>>B̯YrsSo+'%?fvKʼnٹښ|^]C~]dP D ES$b]v*UثWtd=*3gyklA W$M08~yMi2JX;SW{$ߪBXٸƆ|?E0:_)w4]Z%9GXˑy{bM77S:Pԓ3f()yy\2gq)4a=U29C{]cgB$fv4ˮ\ Y o|]&\|ɨ5̀qaWb]v**r y*Xu7j1sw:O󏕤fx`+}epd߇PFa_VYTMD|"ںK6pWOr4 ǒ7龻\ҰN͖52~oS .(YfMָx#|cڄ.Y( z,@{RNqڵ/.A!KIO]u,$zupBQI=8xˆY;dĘm&Jo]&+G0c6*)\$bI^&̘IÄB2 m1HcZ-x{gv]=4t<ޥe}o[%իAU? c%$V\U*U/ִ}kOU$r#[qd87yKEjS}82:TJvQvKB,8Ի:HxYQL+7 HFѧ'צ< uMQ*EUYel U7 i,Rb=ͨȌڌQ84>V#zA1$us>vqea[Aw9-1"@ͽ{r (zG723i?DqA|vF1Kvć syWb*Uh+~ٺH2PE o{C⇋}]de^X2JUFdnKm1H ;z>>FdvxAv3QNzm1x)I].)zf,od*'z䄑J.rblHTYel QOoɻTPh:S2ǔy]N3cLm+ߦfN4]7ZotWLIԧW,zurFFnlXт9j3͛ mzE4[xMYA?z0͆3y {GSK*Ud`U=4o0䥌dQ4idoݞRC<6Zl_g#hX> [DpU&?IlOhF?gdk7_sŴx+1f !&=; bJM+1d B1M FIUY@'| '9.2dmCYƋ_FeG;I).&Vo2cFŨeGR,J5';W,: ,{R9fal峰njDn[}.+g?AXd_jFH =sI[J/x^òZ`T2TaZ@LXd&/W I`5=-YˈD~쯀3,JyHF^ʈ"(66`=sD򵞝=+f"Pelհ+Wb_*UثWbZ"+$$SD(\d`bMb/(c|? |E]!SȜN,k }6\,RL:8 K$b6]v**UثWb]h8POxcj *;`UW R *UثWb*UثWb]v*Uث[bmlP-Uvv*UثWbnD %1;&PNG  IHDRU2&PLTEZ{!)19BJRZcks{)))111999BBBJJJJJRRRRZZZccckkksssss{{{{&qbKGDH IDATx흋6C);ЖZeۺ̌$Gc˖MI䋾gJMT k#隐O㠾czJ=3L/.^2bG~fW"y!zsX YGj{ǿ 9|$on.&r>8 Rq$J6@BVD&D0 $mAfGϐ}}~g3$ɊVp$o}wGb$!G2,waHF߆|X a.z*m{J!${p${>]]=GcK0k%##6. qQJH}VB$z&BRqV罾XۻoHB$鎣&C|Hl\bW^u\29`Z\|ɇq?o?O$OjN }0T >odGDi8p.H "+Փ*}+ k|=i$ФjIIpk!5m4$^L (!l\Il[J3 oc0gAxIJB;D3C77NDpzk˷O=$r1$z%pG&tƈ9;m棵"{1H֕Do,iq 6܎٬ln!Ih|k ׸!A!tu<-BM=10z #!; G›$sL9#9\k<$38)N@?T A$@(F`j2$~(tZ,*@gd% 9Tk<$ɉjlb`熄OV Z$Ԑx|$+9W`Ͼo=|9[9N{wg@ZM7? @b/4vb3-$+aߠr$ e~R Vxj>6$hH@` sbH c OuR(: tHkB0Dftvx 8VgHk> +{DRN jtV/U/ɑR9$b?Q$<0$RC\' IA!w0 $)HRe*85 $Ҁv"HRС[lGdS$JjA|qG^8$wh`j9b'dcO#$J6V9$ZI9Uk%UsjYV" !%]𫳐&Zpעs^nnu`ķI$3aA|u >de[I!<6 p#s=%x~B|I* $c:H !Yl%iox-,vrZjrJ9NVR,+IH,"S9$Ҹd6Te),$ɐd$|$?=:Ԡ7kQPp [a Lu.$9"pqXEqęfV@c>j@E-H3tn+Z$VNО)O䨬JƿD=j%4+,^Y !.BR@m`vޟdkZq$R+Aש\bXฑ<\Q@Rq ΀}'uB0a F$3L1X Oq1G\\X"~,\ӈ!iѫZjrJ9NVRIF+!bC"^&8v ".CDҿQXIp2+ ܥ.7M`9:| H3aw=kn"SL_[DZ/ឲ&:EPNȉD k B4d%I "ŧ؁54w"'d+æ d@M0'af,@ҢW-w]SVRPZI9ǩJ!i%y *D+8 :%pHVbX#Q@b֕w849FA$3AB‘,{c0BbJ!IK4-ox] z_EҢ[T׵S_^N <5$ ӖpW{~oz]g1->/*2 r|s <^Ww<[<Cb$&J_]Dl'r \lB7X/D?@8KF.FUg  5lP"JfǑ¦$EJ(员01 }"ю*eP,v"Y9y_?vH&5$0] {"irjH/KPLTE!)19BJRZcks{ 6bKGDH oIDATx흉b6EoZ;_mFB,s!cvAC.%jk5JחH_}=ү~-g"H?& >_T&@F>_PyAF)ET5]_X$|nѲFߕG< >p%V|zwBneo2O-/:tu=U B6|[^VP܈oob-ku} \Nļo_f˻r؉ZL9ǷWR>[t|MoE}ku$7U ŧk7 v!m^F>tX'jK9|SG|l _"6gR* KJ@e|Y_R|,i| ;ց[y>RPHA7\>Fw\st񥻰3Hvʖ :mI" =v.½ !Т˝`_ 2J] O-/Ds5[g*>RVD͉e5T\K^ⱈQ ':a8GVO,"RN^#J氘)yC%8|^9t;\|7>"~Jw|㾵e Y?;>RGGvw| 9z%KG>[S\`%xvy| }S1K޷}n.:U=˓y9*/؝{r>ZEQ!5>Z5GXQ>V%cEXQdپϏf7̌0|}q>͜ >5_X7S?_t8n[ )#d@e=us`v__s#>AKwGmķk]f4}`bf|J_k o/J<<&>#/o9>/_t}0ո`]Kf]}Dw_; ;"}u{K/5Z#78 }dM}(q+JNJ"Eu׭V}(:92I#Eo@k4ab:E2I -pk':=(fp`_7ADc'l3o?*ν rV|Cȿ.ėȚ_ߖjgktck=}v?0Fx ZH``s=o`lan@ç||A6u_y0Q _t{KEHǹ/:TPtgk8UC9}%0W8#ۏy_7( t ?W.໔f)qK>8|龖 }I}F0Oi|h%cEXQpon@7::ZσV;z˜ hBjsf _6b{;hɣtWӍh=_w5c}f4[ ?3lc=> }fx [%rs)Ͽ +>ωt8|f/ ?JSõ!7>wKySLB*:ldJҗR4KKh<>̎Yooa\۫ >siy ܷۋ__#]4\C78 }dMY_.1{f|>Fu UՊ w\_mMnu\|j6=V3 "dj.#Hwv́w/'s;ʑu+ } LְWÁ0|8V߫r9-LTB޻@9q y_ /> /wktS[A$EM8}ʎÄӹ|يqث'm^ྉ  uN|w4Y?XD1MkGH\uUQim>IXvGtyv|޿"}:^Jު^)XQu3|"O|a4[KqU 4fq9&h;?D ҌqG/"O7|i}Oao.z!oD"z>7 _,>H}>q[vܷГo}+=,-ْw3\OӓVgy.8>Kxg ыE[x /1^D=.O&҂t`?&pSkqIENDB`n Gm(뱙`omPNG  IHDRU2&PLTEZ{!)19BJRZcks{)))111999BBBJJJJJRRRRZZZccckkksssss{{{{&qbKGDH IDATx흋v&mNmj;7mR8>zWev^A yᡋ a.đD3Kω.,ti[KYD?Zϖ~!U7F^$Ov$Rzs6.zVpZӇ 9\$n^LN|i gCrl}ɿ?E40^ !sݽqI{<3.{,h Cr(@:X $IB#B: $i=$41O^Bȹtl]AZ*^ IҊwPQ0nߞ:ߎF*JC7,o.$$ 3 !o![vHƏ氾Ãcqn\p  XK0ŧ@[4^ Yn )%]rZIqTCjGrW~*{AbXp@OGBDx!EB DbU-nU$VkC8]7_vvT_ 4I:հݫw|Dj!>wԑ8Hu$ !IIb5t$uAjM@k,Xq&m%fLm꼑9$Xj"BH )<r 4w8v8葠Pܜ d*B1Rs,"{EJ \2!R-~$:M@b1H#QAL7H)(~#1@[7=g@"AYnޥH,w4E"ȊEL$"!  N}HX !HN I=u$AR'w$8$YD8D4 IH8%f``&dHG'$Ւ} @X=N9$.Hp&`,Vr %BX.)Zr %(e.H6NďK$HuBH*$] !@pZ^4뒊j%ԬK5f]Ripj G~lՑ0:1ջDZ$A0{ ߝ*R bj ]N[$dkId88q)$Yl tԄ zcYA2J>dABZ @b$h| `M c`^$zH@J0mlPV"J yNJ(RH >uF=&LXJ$᠌l]$T|Eޝ{TfjHirGfdmp 9:W"SniHWr"I9s@01.LHҲj4 e]^!v0F"F D!k2M"YISYM7p{͌d1U>V]RQuIӬK!YzHF^9$110`^`ڮj$Ą39? $#Q(e]R /@MozId ]Bw 0 ѫ[sqܪuI=5뒊j%N.$%1c,6>öo1q a!yp\9 [uZdC$xǢ $#I˗/a+g[@GlՑ.! GÝ,٘O)b%]yȈDI?GU>@H%kꋹ 9U,P%zy$ 3H]"P:h pjt$=ȞR7\,Z$Pˋ^ ^4ت8LjZYk8ͺ. $%o$ D9~$I v tA&$rtyܭH {zK$O"P@G '$ks !I$ǿv4!DިL׽. iU 0U7zj%ժKi7܈Y@*ٱ.UIU=&"T*&t 덜$!_2ސ5s]/([ln-ɜKH$A޳K%vs{8#"0ڙ,.a84D#YK#IKh NI5$58',?1Ugq Xbjn)A9H-AE#aΎ9\$(H nr69`^Kh 26,$l$2G"0M#Ί@h^!){@$< /uA#HZRG#u2HVuH:G$okv[9RV IENDB`{DyK  _Toc12176040{DyK  _Toc12176041{DyK  _Toc12176042{DyK  _Toc12176043{DyK  _Toc12176044{DyK  _Toc12176045{DyK  _Toc12176046{DyK  _Toc12176047{DyK  _Toc12176048{DyK  _Toc12176049{DyK  _Toc12176050{DyK  _Toc12176051{DyK  _Toc12176052{DyK  _Toc12176053{DyK  _Toc12176054{DyK  _Toc12176055{DyK  _Toc12176056{DyK  _Toc12176057{DyK  _Toc12176058{DyK  _Toc12176059{DyK  _Toc12176060{DyK  _Toc12176061{DyK  _Toc12176062{DyK  _Toc12176063{DyK  _Toc12176064{DyK  _Toc12176065{DyK  _Toc12176066{DyK  _Toc12176067{DyK  _Toc12176068{DyK  _Toc12176069{DyK  _Toc12176070{DyK  _Toc12176071{DyK  _Toc12176072{DyK  _Toc12176073{DyK  _Toc12176074{DyK  _Toc12176075{DyK  _Toc12176076{DyK  _Toc12176077{DyK  _Toc12176078{DyK  _Toc12176079{DyK  _Toc12176080{DyK  _Toc12176081{DyK  _Toc12176082{DyK  _Toc12176083{DyK  _Toc12176084{DyK  _Toc12176085{DyK  _Toc12176086{DyK  _Toc12176087{DyK  _Toc12176088{DyK  _Toc12176089{DyK  _Toc12176090{DyK  _Toc12176091{DyK  _Toc12176092{DyK  _Toc12176093{DyK  _Toc12176094{DyK  _Toc12176095{DyK  _Toc12176096{DyK  _Toc12176097{DyK  _Toc12176098{DyK  _Toc12176099{DyK  _Toc12176100{DyK  _Toc12176101{DyK  _Toc12176102{DyK  _Toc12176103{DyK  _Toc12176104{DyK  _Toc12176105{DyK  _Toc12176106{DyK  _Toc12176107{DyK  _Toc12176108{DyK  _Toc12176109{DyK  _Toc12176110{DyK  _Toc12176111{DyK  _Toc12176112{DyK  _Toc12176113{DyK  _Toc12176114{DyK  _Toc12176115{DyK  _Toc12176116{DyK  _Toc12176117{DyK  _Toc12176118{DyK  _Toc12176119Y$$If!vh55#v:V l4>54f4Y$$If!vh55#v:V l4]54f4O$$If!vh55#v:V l54O$$If!vh55#v:V l54D^ uHHH) H) H) KH) @H) @ 'H )  q$$If!vh5j 5Y#vj #vY:V ,5j 5Y44 aq$$If!vh5j 5Y#vj #vY:V 45j 5Y44 af4q$$If!vh5j 5Y#vj #vY:V ,5j 5Y44 aq$$If!vh5j 5Y#vj #vY:V ,5j 5Y44 aq$$If!vh5j 5Y#vj #vY:V ,5j 5Y44 aD$ |H-|HK|H+$eD"JެJJ$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a$$If!vh5 5 5 #v :V l0,5 4a Ddmc <  C A? b* |[ UNH{; 'n  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     E& !"#LK()*+,-./012346789:;<>?@ABCDFGHIJOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry  F/Z%Data OWordDocument hObjectPool`@/Z_1081924720 F`@`@1TableCompObjhObjInfo [$@$NormalmH << Heading 1 $$@& CJOJQJ<A@<Default Paragraph Font(U@( Hyperlink>*B*8V@8FollowedHyperlink>*B*   l,b$1'(m @n(  6   AB S  ?c t@Tp@GzTimes New Roman5Symbol3& zArial"htete1"r0dLAndrew VirnulsAndrew Virnuls   FMicrosoft Word Picture MSWordDocWord.Picture.89qOh+'0 (4 P \ h tMicrosoft Access GuideicrAndrew Virnulssndrndr Normal.dotuObjectPool `@`@WordDocument'SummaryInformation( 5DocumentSummaryInformation8=q bjbjt+t+ AA]2222222bbbbb n bD       $b/2"/ 22M    22 FT2222    22 z ?bb   CJOJQJjCJOJQJUmHN N!"#f!$f!%n1'(mPNG  IHDRmgAMAPLTE!kBBBޔGyB pHYs+ *IDATx흋* t_X !\JK8|F.Em"> O-iOc^;"&mNƢ=y3wlO-uYMBhIV8=;3nj*?=(mX5>/ ҒO}hEAQRlg\5x]pҎ lضN&Nl# ĄYsG3f0c.!m ,bQl끗mI %f,E.IY7/1Ka4@h/cܤML zI ;0oi3N-[3 $)ܘ;J ,MdVhve7\7LZnp~i?0m/v69~gى>ǴeҌŴv~S6)8ل,BQcuoRfڎbP# 10ŶK1/ zhhG=M,# nS=å ^nQl4A^e1vGWq639VBCbIv*hF4& 07W8~Dl?jBA&&$&MZ"^Ys_*;H&Ĵ[&6YaHdƤrvW/[xp ؆N20Z̐gimmlI(ǂĶK}ǃ?jIlw2ۮcKzNC'^A5`&0!=s'C@{7_O_N&R62{)Ɛv8 n&RiFNխ+kO۩Nf#6wOKlB*[$SB CJ2&$gTjn,_rN[c[7tӝ)CMnO[ 6W0+pu޶kbrvu>]z^8SBWKSWS0p-oV~ ۋvgm&# a66ģ^CUGx&ab\9zܽ ۓ7/MOI I .O?areZB}S0im-(q >.洣M}2-Mql{ :b;ł \rvc MhJhsJhsJhs}V mW.ݣ|]Іr ~ڶ\}L5=%KKal, ][MV6> kuB;Z+kMsϴL׹Z=Xs--߹>uN(`^t?8mDݐ x%7iC6 í.[ŶJ>^ay޻|cFiў3nn(mo;یWl7*Ԭ^ý&ض)G&JƤ=Eg9% v-&j~-XMd1iOlP7OdE`\9iOҶBOsD"-I1 ~r!%^N2w&QՔ/}S)_h [M6Ž>jD mJ%m듭|M$#@N mN mN mN mN mN mN mN mNykژ((m/BM&@^Gڔ/<& m"oo~{"{MDؒ*_h mNSBSBSBSBS[&6Xt W2KXx|M,LʹB*kBPBSBS[Z,J/Y,b ,'XhKfڜڜڜZ{ Dt5mP6 ͨh4 {i>^8tIENDB`Oh+'0   < H T `lt|ssAndrew Virnulsndrndr Normal.dotuAndrew Virnuls2drMicrosoft Word 8.0@@X@x@x՜.+,D՜.+,, hp|   1  Title 6> _PID_GUIDAN{E34FD850-A366-40A2-B306-C3084FC6E1CA} |[ UNH{;PNG  IHDRmJgAMA*PLTE!kBBBޔI( pHYsj YIDATxϊ5Spe`oB?M!$/Rt/!(yuGeǶtbWl>r#"U0jZZI~Ĺ[Tϯ~Q?p|>~~񥕛 4/ <=pJfijJӴ5^GAd zC՛3Tf}Z~7PW81%Յ7ԉ{sٲ\魑;sܻ3lkMCܯvm]˦2 ?ͭZ_vЙFZ_[o<%wε_zkew*/V|> zo.'z o|e7qS.P dsf3 )wzC pSo`>15*@vWvΓ$<ٖNu(Oy'ʵ%ɖ%َ:_:po] 5<]w _퀉'h/jFo/oЉrЅKJ4rЦl'm &cV|֟UZ6IMH3 ͑#dAEN܊ rO}.c⇧GwL|򹝃̜@KBDj /%ABExN?n/5ub'z Bo1{Syk-t݈+ mJm^`":cp{|8, 6*0U?& č?uīu*J{DS[5nIX߽Ho1wCIoڷrXX` "$'./.ɲ_V7\zޕdG@~FF`[ƽсO5zAJ^Y7d"n"2YR4Ib O>.9I\ X駿i|AֹQ{3r{Rym~[=ǾXpz0w$uz[#z_冻>wqѩw7ow-nX!/E\|-3[QCS}>|pbݰrIzO?@``}*fgA4OeP7zwX Prϵ덀b>w.nfs߉JM/u9ĭzYJuIwQz=Y"̓cHԸ~%o_ Lkh7..۹v7zhl4/#ƞx14L2?βrQ,;΂p Fu_H'{\ǽܲ%'hf4nqJA%4OШ8n7^6A77= ^nQ܂#N&񚢨C'o3G` Zo< nHn3w.}Rn>Iy*cߍƷz5:2+:Cc7NJΐEOpg ϥnYWJln6_Lq[캂l]7c;)qkM&ֻZW:[ߙ(yp||tպ.oqkS5+}rΐPgϐ͊[RϜErp'3EMeSc68g:O"nTM2s!:7i^^7i^wtL\[6t}MSJY?mޖ;$j klߢ; ܸ 1|3 Tɭ>\˭wj 3m7hV6W5O m\Ro޼Ml_ߔߘܼ&N{/'}GHooRN R_B7MW ]1z{d:uܸpqwz'gl7I@o,yl-ء I7SD~GƈKNvy<ݧ:"mKoTzx9 7n۬KùWx52&鹅?轉[O1[e-6nYMM /qKg- 4F6F{G6IBb3`sGD{`+%r`kzܹ7VnIb厍oψ[dVaU6/]ψ;ϔ+Mܸ3rwl9r'>ڥ(Var-{Xܱ1Zl /U+f͋y1>x`op ,{g].Eww̉p/#Oʏ*O.Er;6VnIb厍1xgZgmLnyqp̈b1/n^$0n´{X,x=,V[*717qFNw*f]}^L%z Z>5%C߯b?$Xpt3u栊r+3=,V{#7n 3= >i>1r?m]=IENDB`1TableN-SummaryInformation(DocumentSummaryInformation8 0CompObjjAndrew Virnulss13rMicrosoft Word 10.0@vE @H@4Q4@֘-e՜.+,0 hp|  n/a+w1O Microsoft Access Guide Title@@@ NormalOJQJ_HmH sH tH L@L Heading 4$xx@&5CJ(OJQJN@N Heading 5$$xx@&a$ 6OJQJJ@J Heading 6$$@&a$5CJOJQJ@@@ Heading 7$@& 6OJQJDA@D Default Paragraph FontVi@V  Table Normal :V 44 la (k@(No List ZOZ H1$$ & x@&a$5CJ$KH$OJQJhtH uNON H2$$x@&a$5CJOJQJhtH uHOH H3$dd@&5CJOJQJhtH uHOH H4$dd@&5CJOJQJhtH uL@LTOC 2 $ ^:OJQJmHnHuP@PTOC 1xx $ 5;OJQJmHnHuL@LTOC 3 $ ^6OJQJmHnHuB@B TOC 4 $^ CJOJQJHB@rH Body Text$xxa$ CJ0OJQJ<@< Header  9r OJQJ< @< Footer  9r OJQJPP@P Body Text 2$xxa$5CJ`OJQJZC@Z Body Text Indent$xx^a$OJQJ:O: code$xxa$OJQJ.)@. Page Number(182(18;I267:IR*^%JpGvDuGmBp4n"c , ^  B } , Z ; q  - U { ?L9acw"=Zf:HX]cwxq~]4 ? !""W$`$O%&&''((o**,r--D/Y/00'00080>0F0T0[0\0|0133589a<x<>????@@ AAAAAAAAAAAAAXBoCE!EFE\EFZGGIJJyKKMMMNKNNOOO O&O.O Y \ s   " = @ ] x { ' * : U X i  6 9 Q l o   ( + 5 P S [ v y :=e,GJ 47A\_a٧ڧΩ,VWY2 t%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CCCCCX_bi!;:  .,b$=(,[=j Kb$nMq?(yqb$aJ[RFJ2 r$COJ/lQb$=aM w3)b$KAxDؘY b$&Xe?ZV5 ~ b$=Wf u{ b$aڷ`8#b$Yy&tS 0O /b$`fGS޶$zFb$lwl7A \Ub$fAfZ@@g*YNab$*K-9&ftb$@GСmTb$IyC4*]Unb$öKQMI#Κgb$ p1_+zb$cer+iC#.!b$ S1J݈A;QEAb$++zys4|$5 dGb$} /Dj"X$cR$}k˟.8xt(<5b${if DrL @b$5ڱ׌N2 b$uESea.2 fg f@  (   \B  S D1"VB  C D"&+(  V  C Att"V  C A?"J  # A"  C FA. `||P`TP`T|"V  C A?" J  # A"J  # A"J   # A"J   # A "J   # A "J  # A "J  # A"J  # A" J  # A"P  3 AK"J  # A"v  s 8Acevents" z  s <AVBeditor"h  s *A ? ?"  +`8 3 cS"l  c $?+`8 x  s 0A5%2 7 4   @/p`0 `  C / 0   C FA. `||P`TP`T|"x  C :A"combo_properties"r  C 4Aquery_builder"   C FA. `||P`TP`T|"J ! # A" J " # A" % C FA . `77`TT`TT7"b & C $A mouse"  ' c LA (cccombo_query_builder" x ( C :A"combo_properties"  z ) S <A Kcontrol_source" ~ * C @A!(text_box_properties"  | + C >A&expression_builder"B S  ?3g| ɩ[Ҿ;$ ()2&o @40R&$TqR&e T_o&IT;&T/Kv&T& T2'|@ 'I@'T(4)d& T*/=T?3&1TTlT@C&T+y&9TW) TrT & Tf T!a&T 5& T T O&T"O&T%<' T@O 'T&TO GR&T/&'T7+#4di+&+u&u _Toc8030795 _Toc12176040 _Toc8030796 _Toc12176041 _Toc8030797 _Toc12176042 _Toc8030798 _Toc12176043 _Toc8030799 _Toc12176044 _Toc8030800 _Toc12176045 _Toc8030801 _Toc12176046 _Toc8030802 _Toc12176047 _Toc8030803 _Toc12176048 _Toc8030804 _Toc12176049 _Toc8030805 _Toc12176050 _Toc8030806 _Toc12176051 _Toc8030807 _Toc12176052 _Toc8030808 _Toc12176053 _Toc8030809 _Toc12176054 _Toc8030810 _Toc12176055 _Toc8030811 _Toc12176056 _Toc8030812 _Toc12176057 _Toc8030813 _Toc12176058 _Toc8030814 _Toc12176059 _Toc8030815 _Toc12176060 _Toc8030816 _Toc12176061 _Toc8030817 _Toc12176062 _Toc8030818 _Toc12176063 _Toc8030819 _Toc12176064 _Toc8030820 _Toc12176065 _Toc8030821 _Toc12176066 _Toc12176067 _Toc8030822 _Toc12176068 _Toc8030823 _Toc12176069 _Toc12176070 _Toc8030824 _Toc12176071 _Toc8030825 _Toc12176072 _Toc12176073 _Toc12176074 _Toc12176075 _Toc12176076 _Toc8030826 _Toc12176077 _Toc12176078 _Toc12176079 _Toc12176080 _Toc12176081 _Toc12176082 _Toc12176083 _Toc12176084 _Toc12176085 _Toc8030827 _Toc12176086 _Toc8030828 _Toc12176087 _Toc8030829 _Toc12176088 _Toc8030830 _Toc12176089 _Toc8030831 _Toc12176090 _Toc8030832 _Toc12176091 _Toc12176092 _Toc8030833 _Toc12176093 _Toc12176094 _Toc12176095 _Toc12176096 _Toc12176097 _Toc8030834 _Toc12176098 _Toc8030835 _Toc12176099 _Toc8030836 _Toc12176100 _Toc8030837 _Toc12176101 _Toc8030838 _Toc12176102 _Toc8030839 _Toc12176103 _Toc8030840 _Toc12176104 _Toc8030841 _Toc12176105 _Toc8030842 _Toc12176106 _Toc8030843 _Toc12176107 _Toc8030844 _Toc12176108 _Toc8030845 _Toc12176109 _Toc8030846 _Toc12176110 _Toc8030847 _Toc12176111 _Toc8030848 _Toc12176112 _Toc8030849 _Toc12176113 _Toc12176114 _Toc12176115 _Toc8030850 _Toc12176116 _Toc8030851 _Toc12176117 _Toc8030852 _Toc12176118 _Toc8030853 _Toc12176119 _1081924710dd""ZZ4 4 ""W$W$&&''((o*o*r-r-D/D/\0\033a<a<@@FEFEJJyKyKMM:Q:QRRoToTbVbVWWWa`a`\b\bkfgg:m:mr?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@vv<<ee> > ""_$_$&&''((~*~*--X/X/{0{033w<w<@@[E[EJJKKMMKQKQRRTThVhVWWWn`n`cbcbxfggOmOmrRwFxz||! $}}bbx0##ZZ  kkgg  !!j#j#Z%Z%)<+------y.y.22Q Q<"QKM@Q2KMFQ29*urn:schemas-microsoft-com:office:smarttagsplace **H:R:m:y:\\aattuu,_mҙڙ/<DQlsޤnv"$9@EL̽ӽV]۾(9")6<&ov=Dhou|,3@G074>szDK.9[c}DNOW_eDJ6=]c.< BOu~5Bm(1?SXh" 6 D I Y   s{((((--------- ....$.1.:.B.E.F.T.a.p................ ////,/5/=/?/C/D/R/c/g/h/u//////////////// 000 0-0407080D0V0Z0[0i0w0{0|00000000000000000001111.16191:1H1]1e1i1q1111111111111222y2z222279GLZ\B!F!x*~*j+n+"2/2XB]BLLYY__X`]`vvvv;O W o( /- {4  +e5 ,iA YT ^8V zc I{We y4o Pwy NO{ *^`.^`.p^p`.@ ^@ `.^`.^`.^`.^`. hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo( hh^h`OJQJo(hh^h`. hh^h`OJQJo( hh^h`OJQJo( 9 p9 /-zc^8V NO{Pwyo(x1{4y4oW,iA +e5YT6I I{We>;O9 `@h ^`OJQJo(y74Fif:]wxD/Y/080[0\0@ AAAAAKNN OCODOWXLX[Z\ZzZk\l\}\R]S]f]+_,_2_``a`------------....%.&.-.1.;.<.B.F.U.V.].a.q.r.z................... / ///-/./?/D/S/T/c/h/v/w/////////////// 0 00 0.0/04080E0F0V0[0j0k0w0|000000000000000001 111/10161:1I1J1[1g1|1}1111111111111122222y2z22=}NXK-@2@@UnknownGz Times New Roman5Symbol3& z Arial?5 z Courier New"qhff{Ǜff _-e+-e+$24dw1w13H(?FiMicrosoft Access GuideAndrew VirnulsAndrew VirnulsX                FMicrosoft Word Document MSWordDocWord.Document.89q