Process Coding Sequences of Transcripts Robert Glen Martin School for the Talented and Gifted Based on a project by Dr. Jing Hu, PhD Franklin & Marshall College The Domain – Genetics The domain for this lab assignment is genetics. You will be working with actual data from the human chromosome 21. Specifically you will be working with a gene on chromosome 21 that is known as ENSG00000160294. Every cell in the human body has 46 chromosomes, two sets of 23 (one set from each biological parent). Each of these chromosomes contains two long strands of deoxyribonucleic acid (DNA) which are joined together in a double helix by hydrogen bonding. Each of these strands of DNA contains information that a human organism needs to develop and function. This information is encoded using four different nucleobases (bases) which are known as A, C, G, and T. The 23 different human chromosomes contain over three billion total bases. These bases are divided among approximately 32 thousand genes. A given gene can be used to produce several different proteins which are necessary for various life functions. The basic process for the creation of these proteins is as follows: 1. An enzyme splits the two DNA strands apart to “expose” the gene. 2. Portions of the gene on one strand are used to create messenger ribonucleic acid (mRNA). RNA is made up of four different nucleobases (bases) which are known as A, C, G, and U. The process to create these mRNA sequences is called transcription, and the resulting mRNA sequence is called a transcript. The DNA that is used to produce a transcript is called a DNA coding sequence. A single gene can be transcribed into several different transcripts. 3. Each of these transcripts is then used in a process called translation to produce a protein. The bases on the mRNA transcript are used in groups of three called codons. Since there are four possibilities for each of the three bases in a codon, there are 64 (43) possible codons. 61 of these codons translate to 20 different amino acids (The code is redundant. More than one codon translates to the same amino acid.). The remaining three codons act Robert Glen Martin -1- 7/4/2011 as stop codes. The codons are translated sequentially into amino acids until a stop code is encountered. These amino acids are chained together into a protein. NOTE: For various reasons, not all transcripts can be translated into a protein. The problematic ones are called incomplete. To be complete, all of the following must be true of a transcript: It has to have at least two codons (six bases). This is because it needs to contain both a start codon (see below) and a stop codon. The number of bases in the transcript must be a multiple of three, so that it contains an integral number of codons. It must begin with the start codon AUG. And since AUG translates to amino acid "M" (Methionine), all proteins created from this process begin with Methionine. It must end with one of the three stop codons (UAG, UAA, or UGA). A stop codon terminates the translation process. No amino acid is produced for a stop codon. The Data Structures This assignment provides plenty of opportunity to work with several standard different data structures that you have already learned about in AP Computer Science A. These are Strings, arrays, Lists, and ArrayLists. You will also be creating and using a new data structure, a Dictionary. Our Dictionary data structure is similar to a real dictionary. A real dictionary has multiple entries, each of which consists of a word and a corresponding definition. Three operations we might do with a real dictionary are 1. Use a word to lookup its corresponding definition. 2. Get all the words from the dictionary. 3. Get the whole dictionary (all the entries) in a printed form. Our Dictionary data structure also has multiple entries, each of which has a key and a corresponding value. It also has three similar operations to the ones listed above: 1. Use a key to lookup its corresponding value. 2. Get all the keys from the dictionary. 3. Get the whole dictionary (all the entries) in a String form which could then be printed. Robert Glen Martin -2- 7/4/2011 The Assignment This assignment utilizes eight classes, four of which are related to the Dictionary data structure. You will implement most of the code for six of these classes. DictionaryEntry – represents a single key->value dictionary entry. Dictionary – represents a dictionary. As you will see, we will only make objects of subclasses of Dictionary. Therefore Dictionary is abstract. DNA2RNADictionary – a Dictionary subclass that is used in the transcription process. Each entry (key->value) is a DNA base->RNA base. RNA2AminoAcidDictionary – a Dictionary subclass that is used in the translation process. Each entry (key->value) is an mRNA Codon->Amino Acid. You will also implement most of these two classes: Transcript – represents a single transcript. In addition to the transcript mRNA sequence, it also contains the corresponding DNA coding sequence and protein. Gene – represents a gene from human chromosome 21. It contains one or more transcripts. The remaining two classes have been written for you: Chromosome21 – this class represents the genes in human chromosome 21. You will use this class to get a dictionary containing the transcript information of a given gene in chromosome 21. Each of the returned dictionary entries will be a transcript ID->DNA coding sequence pair. ProcessCodingSequences – the application class that you will use to test your code. Important note: You will be writing most of the code for six different classes. These classes have been started for you and contain all of the import statements, instance and class variables, and the constructor and method headings. DO NOT ADD, REMOVE, or MODIFY any of these items. YOU WILL ONLY WRITE THE BODIES OF THE CONSTRUCTORS and METHODS of these classes. Complete the bodies of the constructors and methods of the six classes. Use the provided Javadocs, comments in the code, and the following instructions. Robert Glen Martin -3- 7/4/2011 1. Complete the DictionaryEntry class: a. Complete the constructor. It needs to use the two parameters to initialize the two instance variables. Note that you need to do something special since the names of the parameters are identical to the names of the instance variables. Do not change the names of either the parameters or the instance variables! b. Replace the stubs for the two "getter" methods with appropriate method bodies. 2. Complete the Dictionary class: a. Complete the constructor. Note that the List of DictionaryEntry objects will actually be provided by a Dictionary subclass. It will use super to invoke this constructor. b. Replace the getValue stub with an appropriate method body. It should search through the dictionary list until it finds a DictionaryEntry with a key that equals the parameter key. It should then return that entry’s value. If no matching key can be found, it should return null. c. Replace the getKeys stub with an appropriate method body. It should create an array to hold the keys in all of the entries of the dictionary list. Then it should traverse dictionary to copy all of the keys to the new array. Then it should return the new array. d. Replace the toString stub with an appropriate method body. Make sure that your returned String exactly follows the format described in the toString method comments and Javadocs. 3. Complete the DNA2RNADictionary class as follows. Note that DNA2RNADictionary is a subclass of Dictionary. a. Replace the constructor stub with an appropriate body. The only thing we need to do is create an ArrayList of four DictionaryEntry objects, and then use super to pass that List to the Dictionary constructor. It might seem like we can do all of this in the constructor, but the super statement must be the first statement of a constructor, so there is no "room" in our constructor to create and initialize our List. We solve this problem by making the parameter to super be a call to the private helper method getDictionary. getDictionary will instantiate, initialize, and Robert Glen Martin -4- 7/4/2011 return the list. b. Replace the getDictionary stub with an appropriate method body. Note that getDictionary is static. This is necessary because the super call to the Dictionary constructor takes place before the DNA2RNADictionary constructor is actually running. As a result, the this reference required to call a non-static method does not yet exist! The getDictionary method needs to create the ArrayList, add the four appropriate DictionaryEntry objects to it, and then return it. The four entries need to have DNA keys and corresponding RNA values. If you don’t remember these complementary pairs, you can Google "DNA to RNA complementary base pair". Remember that T is replaced by U in RNA. c. You are now ready to run your first test by executing the ProcessCodingSequences application. You can do this by executing your JCreator project. Look at the “Step 1” code in ProcessCodingSequences. It creates a DNA2RNADictionary object and then prints the result of an implicit toString call. The first two lines of the output must exactly match the first two lines of sample output beginning on page 8 of this assignment. Ignore the output for the later steps for now. 4. Complete the RNA2AminoAcidDictionary class as follows: a. Replace the constructor stub with an appropriate body. b. Replace the getDictionary stub with an appropriate method body. This dictionary will have three-base codon keys and single-letter amino acid values. You will have 64 entries, one for each of the 43 different codons. You can find the codon to amino acid correspondence by Goggling "RNA codon table". Be sure to find a table with one-letter symbols for the amino acids. For example, the codon UUU translates to F (Phenylalanine). Use "*" for each of the values for the three stop codons. c. Execute the ProcessCodingSequences application again. Now the output for the first two steps should be correct. This completes all your Dictionary related classes. 5. Complete the Transcript class. One of the two constructors and the toString method have already been completed for you. a. First look at the two parameter constructor that has been completed for you. In this constructor, two of the instance variables are initialized with values from the Robert Glen Martin -5- 7/4/2011 parameters. The other two instance variables are initialized with calls to two private helper methods. b. Now complete the one parameter constructor that inputs the transcript identification and DNA coding sequence from a file named filename. You can look at a sample input file by viewing "DNA4Transcript284971.txt". You will use the nextLine method of the Scanner object that has already been created for you. Input the first line from the file. It contains the transcript identification starting in the second column. The remaining lines contain the DNA coding sequence. You need to input the remaining lines (until in.hasNext returns false), concatenate them together, and store them into codingSequence. Finally call the two helper methods. c. Replace the getTranscriptID, getCodingSequence, and getTranscript "getter" method stubs with appropriate bodies. They are straight-forward. d. Replace the getProtein "getter" method stub with an appropriate body. getProtein should first determine if the transcript is incomplete by calling the isIncompleteTranscript method. If the transcript is incomplete, then "INCOMPLETE TRANSCRIPT" should be returned. Otherwise protein should be returned. e. Replace the isIncompleteTranscript stub with an appropriate method body. Use the Javadocs or the method heading to figure out what must be done in this method. f. Complete the transcribe method. This method uses a DNA2RNADictionary object to transcribe the DNA coding sequence into a transcript. The transcribe method needs to traverse the codingSequence String to create the transcript String. g. Complete the translate method. This method uses an RNA2AminoAcidDictionary object to translate the transcript into protein. First, translate must use the isIncompleteTranscript method to determine if the transcript is incomplete. If so, then protein should be set to null and translate should return. Otherwise, the translate method needs to traverse the transcript String to create the protein String. Each codon (group of three contiguous bases) should be translated to an amino acid that is then appended to the protein String. This continues until a stop codon is encountered (the amino acid is "*"). When a stop codon is encountered, translate should Robert Glen Martin -6- 7/4/2011 return. This should happen even if the transcript String has not been completely traversed. h. The toString method has been completed for you, but you should review its code to see what will be printed in the ProcessCodingSequences application. i. Execute the ProcessCodingSequences application again. Now the output for the first four steps should be correct. 6. Finally, complete the Gene class. a. Complete the constructor. It should use the parameter to initialize geneID. Then it should call createTranscripts to initialize transcripts. b. Complete the createTranscripts method. Use the Chromosome21 class’s static getGeneTranscriptInformation method to retrieve the transcript information for gene with identification geneID. Information about the Chromosome21 class can be found in the Javadocs. The getGeneTranscriptInformation method returns a Dictionary object. This dictionary contains one entry for each transcript. They key is the transcript identification, and the value is the DNA coding sequence. Get the keys from the dictionary and traverse them to process each entry. Create a Transcript object for each dictionary entry and add it to transcripts. c. The toString method has been completed for you, but you should review its code to see what will be printed in the ProcessCodingSequences application. d. Execute the ProcessCodingSequences application one last time... Now the output for all steps should be correct. Make sure that your output exactly matches the output which starts on page 8. Robert Glen Martin -7- 7/4/2011 Required Output 1. Test DNA to RNA Dictionary: [A -> U, C -> G, G -> C, T -> A] 2. Test [UUU -> AUU -> UCU -> ACU -> UAU -> AAU -> UGU -> AGU -> RNA to F, UUC I, AUC S, UCC T, ACC Y, UAC N, AAC C, UGC S, AGC Amino -> F, -> I, -> S, -> T, -> Y, -> N, -> C, -> S, Acid Dictionary: UUA -> L, UUG -> AUA -> I, AUG -> UCA -> S, UCG -> ACA -> T, ACG -> UAA -> *, UAG -> AAA -> K, AAG -> UGA -> *, UGG -> AGA -> R, AGG -> L, M, S, T, *, K, W, R, CUU GUU CCU GCU CAU GAU CGU GGU -> -> -> -> -> -> -> -> L, V, P, A, H, D, R, G, CUC GUC CCC GCC CAC GAC CGC GGC -> -> -> -> -> -> -> -> L, V, P, A, H, D, R, G, CUA GUA CCA GCA CAA GAA CGA GGA -> -> -> -> -> -> -> -> L, V, P, A, Q, E, R, G, CUG GUG CCG GCG CAG GAG CGG GGG -> -> -> -> -> -> -> -> L, V, P, A, Q, E, R, G] 3. Test Transcript using two parameter constructor: Transcript ID: Sample DNA coding sequence: TACTTTCCCTACACT mRNA Transcript: AUGAAAGGGAUGUGA Protein: MKGM 4. Test Transcript using one parameter constructor: Transcript ID: ENST00000284971 DNA coding sequence: TACTAAGAAGTCTCCGAGAAGTCCAAGAGGAGACAGTAAGCCAGTCGGCAGAGTCAGGTAAACGCCTCCTTGTAACCACA ATGTCGTCACCGTAAATTATTCCTTGAACTAGGATATGTCTTTGAGAAACACCTGTTCTAATCTCTTATGTTTAGATTCG CTGTCTGTAGACCTCCTGGACAACTACGATCAAGTCTCATAGTCGTTCTCGACCTCTCCCTCGAAAAATTCGAGTTCGTT TACAAACCATTACGTCTGTACTTATGTAAAGGGTGGAAGTTTAAACTTCTAGGGTTTAAACTTCAGTAGCTTTTTGGGGT CCGGACT mRNA Transcript: AUGAUUCUUCAGAGGCUCUUCAGGUUCUCCUCUGUCAUUCGGUCAGCCGUCUCAGUCCAUUUGCGGAGGAACAUUGGUGU UACAGCAGUGGCAUUUAAUAAGGAACUUGAUCCUAUACAGAAACUCUUUGUGGACAAGAUUAGAGAAUACAAAUCUAAGC GACAGACAUCUGGAGGACCUGUUGAUGCUAGUUCAGAGUAUCAGCAAGAGCUGGAGAGGGAGCUUUUUAAGCUCAAGCAA AUGUUUGGUAAUGCAGACAUGAAUACAUUUCCCACCUUCAAAUUUGAAGAUCCCAAAUUUGAAGUCAUCGAAAAACCCCA GGCCUGA Protein: MILQRLFRFSSVIRSAVSVHLRRNIGVTAVAFNKELDPIQKLFVDKIREYKSKRQTSGGPVDASSEYQQELERELFKLKQ MFGNADMNTFPTFKFEDPKFEVIEKPQA 5. Test Gene: Gene ID: ENSG00000160294 Number of transcripts: 4 Number of valid transcripts: 3 Number of incomplete transcripts: 1 Robert Glen Martin -8- 7/4/2011 >Transcript 1: Transcript ID: ENST00000291688 Protein: MNPTNPFSGQQPSAFSASSSNVGTLPSKPPFRFGQPSLFGQNSTLSGKSSGFSQVSSFPASSGVSHSSSVQ TLGFTQTSSVGPFSGLEHTSTFVATSGPSSSSVLGNTGFSFKSPTSVGAFPSTSAFGQEAGEIVNSGFGKTEFSFKPLEN AVFKPILGAESEPEKTQSQIASGFFTFSHPISSAPGGLAPFSFPQVTSSSATTSNFTFSKPVSSNNSLSAFTPALSNQNV EEEKRGPKSIFGSSNNSFSSFPVSSAVLGEPFQASKAGVRQGCEEAVSQVEPLPSLMKGLKRKEDQDRSPRRHGHEPAED SDPLSRGDHPPDKRPVRLNRPRGGTLFGRTIQDVFKSNKEVGRLGNKEAKKETGFVESAESDHMAIPGGNQSVLAPSRIP GVNKEEETESREKKEDSLRGTPARQSNRSESTDSLGGLSPSEVTAIQCKNIPDYLNDRTILENHFGKIAKVQRIFTRRSK KLAVVHFFDHASAALARKKGKSLHKDMAIFWHRKKISPNKKPFSLKEKKPGDGEVSPSTEDAPFQHSPLGKAAGRTGASS LLNKSSPVKKPSLLKAHQFEGDSFDSASEGSEGLGPCVLSLSTLIGTVAETSKEKYRLLDQRDRIMRQARVKRTDLDKAR TFVGTCLDMCPEKERYMRETRSQLSVFEVVPGTDQVDHAAAVKEYSRSSADQEEPLPHELRPLPVLSRTMDYLVTQIMDQ KEGSLRDWYDFVWNRTRGIRKDITQQHLCDPLTVSLIEKCTRFHIHCAHFMCEEPMSSFDAKINNENMTKCLQSLKEMYQ DLRNKGVFCASEAEFQGYNVLLSLNKGDILREVQQFHPAVRNSSEVKFAVQAFAALNSNNFVRFFKLVQSASYLNACLLH CYFSQIRKDALRALNFAYTVSTQRSTIFPLDGVVRMLLFRDCEEATDFLTCHGLTVSDGCVELNRSAFLEPEGLSKTRKS VFITRKLTVSVGEIVNGGPLPPVPRHTPVCSFNSQNKYIGESLAAELPVSTQRPGSDTVGGGRGEECGVEPDAPLSSLPQ SLPAPAPSPVPLPPVLALTPSVAPSLFQLSVQPEPPPPEPVPMYSDEDLAQVVDELIQEALQRDCEEVGSAGAAYAAAAL GVSNAAMEDLLTAATTGILRHIAAEEVSKERERREQERQRAEEERLKQERELVLSELSQGLAVELMERVMMEFVRETCSQ ELKNAVETDQRVRVARCCEDVCAHLVDLFLVEEIFQTAKETLQELQCFCKYLQRWREAVTARKKLRRQMRAFPAAPCCVD VSDRLRALAPSAECPIAEENLARGLLDLGHAGRLGISCTRLRRLRNKTAHQMKVQHFYQQLLSDVAWASLDLPSLVAEHL PGRQEHVFWKLVLVLPDVEEQSPESCGRILANWLKVKFMGDEGSVDDTSSDAGGIQTLSLFNSLSSKGDQMISVNVCIKV AHGALSDGAIDAVETQKDLLGASGLMLLLPPKMKSEDMAEEDVYWLSALLQLKQLLQAKPFQPALPLVVLVPSPGGDAVE KEVEDGLMLQDLVSAKLISDYTVTEIPDTINDLQGSTKVLQAVQWLVSHCPHSLDLCCQTLIQYVEDGIGHEFSGRFFHD RRERRLGGLASQEPGAIIELFNSVLQFLASVVSSEQLCDLSWPVTEFAEAGGSRLLPHLHWNAPEHLAWLKQAVLGFQLP QMDLPPLGAPWLPVCSMVVQYASQIPSSRQTQPVLQSQVENLLHRTYCRWKSKSPSPVHGAGPSVMEIPWDDLIALCINH KLRDWTPPRLPVTSEALSEDGQICVYFFKNDLKKYDVPLSWEQARLQTQKELQLREGRLAIKPFHPSANNFPIPLLHMHR NWKRSTECAQEGRIPSTEDLMRGASAEELLAQCLSSSLLLEKEENKRFEDQLQQWLSEDSGAFTDLTSLPLYLPQTLVSL SHTIEPVMKTSVTTSPQSDMMREQLQLSEATGTCLGERLKHLERLIRSSREEEVASELHLSALLDMVDI >Transcript 2: Transcript ID: ENST00000397708 Protein: MNPTNPFSGQQPSAFSASSSNVGTLPSKPPFRFGQPSLFGQNSTLSGKSSGFSQVSSFPASSGVSHSSSVQ TLGFTQTSSVGPFSGLEHTSTFVATSGPSSSSVLGNTGFSFKSPTSVGAFPSTSAFGQEAGEIVNSGFGKTEFSFKPLEN AVFKPILGAESEPEKTQSQIASGFFTFSHPISSAPGGLAPFSFPQVTSSSATTSNFTFSKPVSSNNSLSAFTPALSNQNV EEEKRGPKSIFGSSNNSFSSFPVSSAVLGEPFQASKAGVRQGCEEAVSQVEPLPSLMKGLKRKEDQDRSPRRHGHEPAED SDPLSRGDHPPDKRPVRLNRPRGGTLFGRTIQDVFKSNKEVGRLGNKEAKKETGFVESAESDHMAIPGGNQSVLAPSRIP GVNKEEETESREKKEDSLRGTPARQSNRSESTDSLGGLSPSEVTAIQCKNIPDYLNDRTILENHFGKIAKVQRIFTRRSK KLAVVHFFDHASAALARKKGKSLHKDMAIFWHRKKISPNKKPFSLKEKKPGDGEVSPSTEDAPFQHSPLGKAAGRTGASS LLNKSSPVKKPSLLKAHQFEGDSFDSASEGSEGLGPCVLSLSTLIGTVAETSKEKYRLLDQRDRIMRQARVKRTDLDKAR TFVGTCLDMCPEKERYMRETRSQLSVFEVVPGTDQVDHAAAVKEYSRSSADQEEPLPHELRPLPVLSRTMDYLVTQIMDQ KEGSLRDWYDFVWNRTRGIRKDITQQHLCDPLTVSLIEKCTRFHIHCAHFMCEEPMSSFDAKINNENMTKCLQSLKEMYQ DLRNKGVFCASEAEFQGYNVLLSLNKGDILREVQQFHPAVRNSSEVKFAVQAFAALNSNNFVRFFKLVQSASYLNACLLH CYFSQIRKDALRALNFAYTVSTQRSTIFPLDGVVRMLLFRDCEEATDFLTCHGLTVSDGCVELNRSAFLEPEGLSKTRKS VFITRKLTVSVGEIVNGGPLPPVPRHTPVCSFNSQNKYIGESLAAELPVSTQRPGSDTVGGGRGEECGVEPDAPLSSLPQ SLPAPAPSPVPLPPVLALTPSVAPSLFQLSVQPEPPPPEPVPMYSDEDLAQVVDELIQEALQRDCEEVGSAGAAYAAAAL GVSNAAMEDLLTAATTGILRHIAAEEVSKERERREQERQRAEEERLKQERELVLSELSQGLAVELMERVMMEFVRETCSQ ELKNAVETDQRVRVARCCEDVCAHLVDLFLVEEIFQTAKETLQELQCFCKYLQRWREAVTARKKLRRQMRAFPAAPCCVD VSDRLRALAPSAECPIAEENLARGLLDLGHAGRLGISCTRLRRLRNKTAHQMKVQHFYQQLLSDVAWASLDLPSLVAEHL PGRQEHVFWKLVLVLPDVEEQSPESCGRILANWLKVKFMGDEGSVDDTSSDAGGIQTLSLFNSLSSKGDQMISVNVCIKV AHGALSDGAIDAVETQKDLLGASGLMLLLPPKMKSEDMAEEDVYWLSALLQLKQLLQAKPFQPALPLVVLVPSPGGDAVE KEVEDGLMLQDLVSAKLISDYTVTEIPDTINDLQGSTKVLQAVQWLVSHCPHSLDLCCQTLIQYVEDGIGHEFSGRFFHD RRERRLGGLASQEPGAIIELFNSVLQFLASVVSSEQLCDLSWPVTEFAEAGGSRLLPHLHWNAPEHLAWLKQAVLGFQLP QMDLPPLGAPWLPVCSMVVQYASQIPSSRQTQPVLQSQVENLLHRTYCRWKSKSPSPVHGAGPSVMEIPWDDLIALCINH KLRDWTPPRLPVTSEALSEDGQICVYFFKNDLKKYDVPLSWEQARLQTQKELQLREGRLAIKPFHPSANNFPIPLLHMHR NWKRSTECAQEGRIPSTEDLMRGASAEELLAQCLSSSLLLEKEENKRFEDQLQQWLSEDSGAFTDLTSLPLYLPQTLVSL SHTIEPVMKTSVTTSPQSDMMREQLQLSEATGTCLGERLKHLERLIRSSREEEVASELHLSALLDMVDI >Transcript 3: Robert Glen Martin -9- 7/4/2011 Transcript ID: ENST00000426537 Protein: INCOMPLETE TRANSCRIPT >Transcript 4: Transcript ID: ENST00000539647 Protein: MQVTFIYVCLKGLMLQDLVSAKLISDYTVTEIPDTINDLQGSTKVLQAVQWLVSHCPHSLDLCCQTLIQYV EDGIGHEFSGRFFHDRRERRLGGLASQEPGAIIELFNSVLQFLASVVSSEQLCDLSWPVTEFAEAGGSRLLPHLHWNAPE HLAWLKQAVLGFQLPQMDLPPLGAPWLPVCSMVVQYASQIPSSRQTQPVLQSQVENLLHRTYCRWKSKSPSPVHGAGPSV MEIPWDDLIALCINHKLRDWTPPRLPVTSEALSEDGQICVYFFKNDLKKYDVPLSWEQARLQTQKELQLREGRLAIKPFH PSANNFPIPLLHMHRNWKRSTECAQEGRIPSTEDLMRGASAEELLAQCLSSSLLLEKEENKRFEDQLQQWLSEDSGAFTD LTSLPLYLPQTLVSLSHTIEPVMKTSVTTSPQSDMMREQLQLSEATGTCLGERLKHLERLIRSSREEEVASELHLSALLD MVDI Press any key to continue... Robert Glen Martin - 10 - 7/4/2011