[r366]: / trunk / Library / POUs / FB_TestSuite / AssertEquals / svnobj  Maximize  Restore  History

Download this file

366 lines (366 with data), 40.5 kB

Gx_l,ž!0…jüo%{oêhß"€%ˆSystem.StringL{f8a58466-d7f6-439f-bbb8-d4600e41d099}ImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocumentL{f3878285-8e4f-490b-bb1b-9acbb7eb04db}TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}	Id
longTagText
IF GVL_CfUnit.IgnoreCurrentTest OR GVL_CfUnit.CurrentTestIsFinished THEN    RETURN;END_IF(*–    This compares two instances of any object type and returns whether they     are the same type, size and value or not. This is necessary for two reasons:     1. So that we can know exactly what differs between the two input parameters¨    2. It's not possible to do a comparison (= or <>) between two instances of ANY. *)d(* Check whether the type of the inputs differs *)\IF Expected.TypeClass <> Actual.TypeClass THEN>    DataTypesNotEquals := TRUE;d(* Check whether the size of the inputs differs *)<IF NOT DataTypesNotEquals THEN\    IF (Expected.diSize <> Actual.diSize) THEND        DataSizeNotEquals := TRUE;    END_IF¤(* Even though the data type and size are equals, the contents may still differ *) pIF NOT DataTypesNotEquals AND NOT DataSizeNotEquals THEN!R    // Compare each byte in the ANY-types"v    FOR IteratorCounter := 0 TO Expected.diSize - 1 BY 1 DO#¤        IF Expected.pValue[IteratorCounter] <> Actual.pValue[IteratorCounter] THEN$R            DataContentNotEquals := TRUE;%"            EXIT;&        END_IF'    END_FOR(Ì(* First check whether the input data are any of the standard data types that are supported by TcUnit.)Ô   In this case call the standard Assert-methods for that data. But before doing that we need to make sure*J   that both the expected and actual:+B   - Have both the same data type,B   - Both have the same data size-    (* BOOL *).ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BOOL THEN/®		MEMCPY(destAddr := ADR(boolExpected), srcAddr := Expected.pValue, n := SIZEOF(BOOL));0²        MEMCPY(destAddr := ADR(boolActual), srcAddr := Actual.pValue, n := SIZEOF(BOOL));1¼        AssertEquals_BOOL(Expected := boolExpected, Actual := boolActual, Message := Message);2        RETURN;3    (* BYTE *)4ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BYTE THEN5º        MEMCPY(destAddr := ADR(byteExpected), srcAddr := Expected.pValue, n := SIZEOF(BYTE));6²        MEMCPY(destAddr := ADR(byteActual), srcAddr := Actual.pValue, n := SIZEOF(BYTE));7¼        AssertEquals_BYTE(Expected := byteExpected, Actual := byteActual, Message := Message);8    (* DATE *)9ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATE THEN:º        MEMCPY(destAddr := ADR(dateExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE));;²        MEMCPY(destAddr := ADR(dateActual), srcAddr := Actual.pValue, n := SIZEOF(DATE));<¼        AssertEquals_DATE(Expected := dateExpected, Actual := dateActual, Message := Message);=.    (* DATE_AND_TIME *)>¬    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATEANDTIME THEN?Ú        MEMCPY(destAddr := ADR(dateAndTimeExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE_AND_TIME));@Ò        MEMCPY(destAddr := ADR(dateAndTimeActual), srcAddr := Actual.pValue, n := SIZEOF(DATE_AND_TIME));Aê        AssertEquals_DATE_AND_TIME(Expected := dateAndTimeExpected, Actual := dateAndTimeActual, Message := Message);B    (* DINT *)Cž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DINT THENDº        MEMCPY(destAddr := ADR(dintExpected), srcAddr := Expected.pValue, n := SIZEOF(DINT));E²        MEMCPY(destAddr := ADR(dintActual), srcAddr := Actual.pValue, n := SIZEOF(DINT));F¼        AssertEquals_DINT(Expected := dintExpected, Actual := dintActual, Message := Message);G    (* DWORD *)H     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DWORD THENI¾        MEMCPY(destAddr := ADR(dwordExpected), srcAddr := Expected.pValue, n := SIZEOF(DWORD));J¶        MEMCPY(destAddr := ADR(dwordActual), srcAddr := Actual.pValue, n := SIZEOF(DWORD));K        AssertEquals_DWORD(Expected := dwordExpected, Actual := dwordActual, Message := Message);L    (* INT *)Mœ    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_INT THENN¶        MEMCPY(destAddr := ADR(intExpected), srcAddr := Expected.pValue, n := SIZEOF(INT));O®        MEMCPY(destAddr := ADR(intActual), srcAddr := Actual.pValue, n := SIZEOF(INT));P¶        AssertEquals_INT(Expected := intExpected, Actual := intActual, Message := Message);Q    (* LINT *)Rž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LINT THENSº        MEMCPY(destAddr := ADR(lintExpected), srcAddr := Expected.pValue, n := SIZEOF(LINT));T²        MEMCPY(destAddr := ADR(lintActual), srcAddr := Actual.pValue, n := SIZEOF(LINT));U¼        AssertEquals_LINT(Expected := lintExpected, Actual := lintActual, Message := Message);V    (* LREAL *)W     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LREAL THENX¾        MEMCPY(destAddr := ADR(lrealExpected), srcAddr := Expected.pValue, n := SIZEOF(LREAL));Y¶        MEMCPY(destAddr := ADR(lrealActual), srcAddr := Actual.pValue, n := SIZEOF(LREAL));ZÞ        AssertEquals_LREAL(Expected := lrealExpected, Actual := lrealActual, Delta := 0.0, Message := Message);[    (* LTIME *)\     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LTIME THEN]¾        MEMCPY(destAddr := ADR(ltimeExpected), srcAddr := Expected.pValue, n := SIZEOF(LTIME));^¶        MEMCPY(destAddr := ADR(ltimeActual), srcAddr := Actual.pValue, n := SIZEOF(LTIME));_        AssertEquals_LTIME(Expected := ltimeExpected, Actual := ltimeActual, Message := Message);`    (* LWORD *)a     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LWORD THENb¾        MEMCPY(destAddr := ADR(lwordExpected), srcAddr := Expected.pValue, n := SIZEOF(LWORD));c¶        MEMCPY(destAddr := ADR(lwordActual), srcAddr := Actual.pValue, n := SIZEOF(LWORD));d        AssertEquals_LWORD(Expected := lwordExpected, Actual := lwordActual, Message := Message);e    (* REAL *)fž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_REAL THENgº        MEMCPY(destAddr := ADR(realExpected), srcAddr := Expected.pValue, n := SIZEOF(REAL));h²        MEMCPY(destAddr := ADR(realActual), srcAddr := Actual.pValue, n := SIZEOF(REAL));iØ        AssertEquals_REAL(Expected := realExpected, Actual := realActual, Delta := 0.0, Message := Message);j    (* SINT *)kž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_SINT THENlº        MEMCPY(destAddr := ADR(sintExpected), srcAddr := Expected.pValue, n := SIZEOF(SINT));m²        MEMCPY(destAddr := ADR(sintActual), srcAddr := Actual.pValue, n := SIZEOF(SINT));n¼        AssertEquals_SINT(Expected := sintExpected, Actual := sintActual, Message := Message);o     (* STRING *)p¢    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_STRING THENqâ        MEMCPY(destAddr := ADR(stringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));rÖ        MEMCPY(destAddr := ADR(stringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));sÈ        AssertEquals_STRING(Expected := stringExpected, Actual := stringActual, Message := Message);t    (* TIME *)už    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIME THENvº        MEMCPY(destAddr := ADR(timeExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME));w²        MEMCPY(destAddr := ADR(timeActual), srcAddr := Actual.pValue, n := SIZEOF(TIME));x¼        AssertEquals_TIME(Expected := timeExpected, Actual := timeActual, Message := Message);y*    (* TIME_OF_DAY *)z¨    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIMEOFDAY THEN{Ò        MEMCPY(destAddr := ADR(timeOfDayExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME_OF_DAY));|Ê        MEMCPY(destAddr := ADR(timeOfDayActual), srcAddr := Actual.pValue, n := SIZEOF(TIME_OF_DAY));}Þ        AssertEquals_TIME_OF_DAY(Expected := timeOfDayExpected, Actual := timeOfDayActual, Message := Message);~    (* UDINT *)     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UDINT THEN€¾        MEMCPY(destAddr := ADR(udintExpected), srcAddr := Expected.pValue, n := SIZEOF(UDINT));¶        MEMCPY(destAddr := ADR(udintActual), srcAddr := Actual.pValue, n := SIZEOF(UDINT));‚        AssertEquals_UDINT(Expected := udintExpected, Actual := udintActual, Message := Message);ƒ    (* UINT *)„ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UINT THEN…º        MEMCPY(destAddr := ADR(uintExpected), srcAddr := Expected.pValue, n := SIZEOF(UINT));†²        MEMCPY(destAddr := ADR(uintActual), srcAddr := Actual.pValue, n := SIZEOF(UINT));‡¼        AssertEquals_UINT(Expected := uintExpected, Actual := uintActual, Message := Message);ˆ    (* ULINT *)‰     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_ULINT THENо        MEMCPY(destAddr := ADR(ulintExpected), srcAddr := Expected.pValue, n := SIZEOF(ULINT));‹¶        MEMCPY(destAddr := ADR(ulintActual), srcAddr := Actual.pValue, n := SIZEOF(ULINT));ŒÂ        AssertEquals_ULINT(Expected := ulintExpected, Actual := ulintActual, Message := Message);    (* USINT *)Ž     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_USINT THEN¾        MEMCPY(destAddr := ADR(usintExpected), srcAddr := Expected.pValue, n := SIZEOF(USINT));¶        MEMCPY(destAddr := ADR(usintActual), srcAddr := Actual.pValue, n := SIZEOF(USINT));‘        AssertEquals_USINT(Expected := usintExpected, Actual := usintActual, Message := Message);’    (* WORD *)“ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WORD THEN”º        MEMCPY(destAddr := ADR(wordExpected), srcAddr := Expected.pValue, n := SIZEOF(WORD));•²        MEMCPY(destAddr := ADR(wordActual), srcAddr := Actual.pValue, n := SIZEOF(WORD));–¼        AssertEquals_WORD(Expected := wordExpected, Actual := wordActual, Message := Message);—è(* If we've come to this row, it means that the data input is not any of the standard primitive data types, and thus˜H   we need to do special handling *)™¾TestInstancePath := AddTestNameToInstancePath(TestInstancePath := FINDTestSuiteInstancePath());š4IF DataTypesNotEquals THEN›â    ExpectedDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString((Expected.TypeClass)));œ”    ExpectedDataString := CONCAT(STR1 := ExpectedDataString, STR2 := ')');Ö    ActualDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString(Actual.TypeClass));žŒ    ActualDataString := CONCAT(STR1 := ActualDataString, STR2 := ')');Ÿ8ELSIF DataSizeNotEquals THEN Ä    ExpectedDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Expected.diSize));¡¼    ActualDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Actual.diSize));¢>ELSIF DataContentNotEquals THEN£ü    FOR Count := 0 TO MIN(Expected.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)¤€        ExpectedDataString := CONCAT(STR1 := ExpectedDataString,¥Ì                                                  STR2 := BYTE_TO_HEXSTR(in := Expected.pValue[Count],¦Î                                                                                       iPrecision := 2,§Ô                                                                                       bLoCase := FALSE));¨–    ExpectedDataString := CONCAT(STR1 := '0x', STR2 := ExpectedDataString);©ø    FOR Count := 0 TO MIN(Actual.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)ªx        ActualDataString := CONCAT(STR1 := ActualDataString,«Ä                                                STR2 := BYTE_TO_HEXSTR(in := Actual.pValue[Count],¬Ê                                                                                     iPrecision := 2,­Ð                                                                                     bLoCase := FALSE));®Ž    ActualDataString := CONCAT(STR1 := '0x', STR2 := ActualDataString);¯”AssertResults.ReportResult(ExpectedSize := DINT_TO_UDINT(Expected.diSize),°¢                           ExpectedTypeClass := UDINT_TO_INT(Expected.TypeClass),±x                           ExpectedValue := Expected.pValue,²Œ                           ActualSize := DINT_TO_UDINT(Actual.diSize),³š                           ActualTypeClass := UDINT_TO_INT(Actual.TypeClass),´p                           ActualValue := Actual.pValue,µ\                           Message := Message,¶€                           TestInstancePath := TestInstancePath,·~                           AlreadyReported => AlreadyReported);¸ÂIF NOT AlreadyReported AND (DataTypesNotEquals OR DataSizeNotEquals OR DataContentNotEquals) THEN¹x    SetTestFailed(AssertionType := E_AssertionType.Type_ANY,º^                  AssertionMessage := Message);»–    AssertMessageFormatter.LogAssertFailure(Expected := ExpectedDataString,¼Ž                                            Actual := ActualDataString,½~                                            Message := Message,¾¤                                            TestInstancePath := TestInstancePath);¿InterfaceÀL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}ÁÌ(* | Asserts that two objects (of any type) are equal. If they are not, an assertion error is created.ÂÎ | For REAL and LREAL it s recommended to use the AssertEquals_REAL or AssertEquals_LREAL respectively ô | as these give the possibility to specify a delta between the expected and actual value.Ä Parameters:Å@     | Expected   Expected valueÆ8     | Actual   Actual valueÇ€     | Message   The identifying message for the assertion errorÈ$ Positive example:É0 .. code-block:: codesysÊ     VARË,         a : INT := 5;Ì,         b : INT := 5;Í     END_VARÎ:     TEST('Test_ANY_Equals');Ï@     AssertEquals(Expected := a,Ð<                  Actual := b,Ñ\                  Message := 'Values differ');Ò*     TEST_FINISHED();Ó" Failing example:Ô.         b : UINT := 5;ÕL     TEST('Test_ANY_Differ_DataType');Ö4METHOD PUBLIC AssertEquals×VAR_INPUTØJ    Expected : ANY; // Expected valueÙp    Actual : ANY; // The value to check against expectedÚš    Message : T_MaxString; // The identifying message for the assertion errorÛEND_VARÜVARÝ"    Count : DINT;ÞH    ExpectedDataString : STRING(80);ßD    ActualDataString : STRING(80);àF    TestInstancePath : T_MaxString;á6    AlreadyReported : BOOL;â0    boolExpected : BOOL;ã,    boolActual : BOOL;ä0    byteExpected : BYTE;å,    byteActual : BYTE;æ0    dateExpected : DATE;ç,    dateActual : DATE;èP    dateAndTimeExpected : DATE_AND_TIME;éL    dateAndTimeActual : DATE_AND_TIME;ê0    dintExpected : DINT;ë,    dintActual : DINT;ì4    dwordExpected : DWORD;í0    dwordActual : DWORD;î,    intExpected : INT;ï(    intActual : INT;ð0    lintExpected : LINT;ñ,    lintActual : LINT;ò4    lrealExpected : LREAL;ó0    lrealActual : LREAL;ô4    ltimeExpected : LTIME;õ0    ltimeActual : LTIME;ö4    lwordExpected : LWORD;÷0    lwordActual : LWORD;ø0    realExpected : REAL;ù,    realActual : REAL;ú0    sintExpected : SINT;û,    sintActual : SINT;üB    stringExpected : T_MaxString;ý>    stringActual : T_MaxString;þ0    timeExpected : TIME;ÿ,    timeActual : TIME;€H    timeOfDayExpected : TIME_OF_DAY;D    timeOfDayActual : TIME_OF_DAY;‚4    udintExpected : UDINT;ƒ0    udintActual : UDINT;„0    uintExpected : UINT;…,    uintActual : UINT;†4    ulintExpected : ULINT;‡0    ulintActual : ULINT;ˆ4    usintExpected : USINT;‰0    usintActual : USINT;Š0    wordExpected : WORD;‹,    wordActual : WORD;Œ    D    (* ANY comparison variables *)Žº    DataTypesNotEquals : BOOL; // The data type of the two ANY input parameters are not equal¸    DataSizeNotEquals : BOOL; // The data size of the two ANY input parameters are not equalÄ    DataContentNotEquals : BOOL; // The data content of the two ANY input parameters are not equal‘6    IteratorCounter : DINT;ÐÐÐE‡ÐÐ	
­dÚÐ-
ÐÐ	
­eÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ÅÚÐ-ÐÐ	
­£ÚÐ-ÐÐ	
­¤ÚÐ-ÐÐ	
­¥ÚÐ-ÐÐ	
­¦ÚÐ-ÐÐ	
­§ÚÐ-ÐÐ	
­¨ÚÐ-ÐÐ	
­©ÚÐ-ÐÐ	
­ªÚÐ-ÐÐ	
­«ÚÐ-ÐÐ	
­¬ÚÐ-ÐÐ	
­­ÚÐ-ÐÐ	
­®ÚÐ-ÐÐ	
­¯ÚÐ-ÐÐ	
­°ÚÐ-ÐÐ	
­±ÚÐ-ÐÐ	
­²ÚÐ-ÐÐ	
­³ÚÐ-ÐÐ	
­´ÚÐ-ÐÐ	
­µÚÐ-ÐÐ	
­¶ÚÐ- ÐÐ	
­·ÚÐ-!ÐÐ	
­¸ÚÐ-"ÐÐ	
­¹ÚÐ-#ÐÐ	
­ºÚÐ-$ÐÐ	
­»ÚÐ-%ÐÐ	
­¼ÚÐ-&ÐÐ	
­½ÚÐ-'ÐÐ	
­¾ÚÐ-ÐÐ	
­¿ÚÐ-ÐÐ	
­ÀÚÐ-(ÐÐ	
­ÁÚÐ-)ÐÐ	
­ÂÚÐ-*ÐÐ	
­ÃÚÐ-+ÐÐ	
­ÄÚÐ-,ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ- ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ--ÐÐ	
­ÚÐ-.ÐÐ	
­)ÚÐ-/ÐÐ	
­*ÚÐ-ÐÐ	
­ÚÐ-0ÐÐ	
­ÚÐ-1ÐÐ	
­ÚÐ-2ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-3ÐÐ	
­ÚÐ-4ÐÐ	
­ÚÐ-5ÐÐ	
­ÚÐ-6ÐÐ	
­ÚÐ-7ÐÐ	
­ÚÐ-2ÐÐ	
­ ÚÐ-ÐÐ	
­!ÚÐ-ÐÐ	
­"ÚÐ-8ÐÐ	
­#ÚÐ-9ÐÐ	
­$ÚÐ-:ÐÐ	
­%ÚÐ-;ÐÐ	
­&ÚÐ-<ÐÐ	
­'ÚÐ-2ÐÐ	
­(ÚÐ-ÐÐ	
­)ÚÐ-ÐÐ	
­*ÚÐ-=ÐÐ	
­+ÚÐ->ÐÐ	
­,ÚÐ-?ÐÐ	
­-ÚÐ-@ÐÐ	
­.ÚÐ-AÐÐ	
­/ÚÐ-2ÐÐ	
­0ÚÐ-ÐÐ	
­1ÚÐ-ÐÐ	
­2ÚÐ-BÐÐ	
­3ÚÐ-CÐÐ	
­4ÚÐ-DÐÐ	
­5ÚÐ-EÐÐ	
­6ÚÐ-FÐÐ	
­7ÚÐ-2ÐÐ	
­8ÚÐ-ÐÐ	
­9ÚÐ-ÐÐ	
­:ÚÐ-GÐÐ	
­;ÚÐ-HÐÐ	
­<ÚÐ-IÐÐ	
­=ÚÐ-JÐÐ	
­>ÚÐ-KÐÐ	
­?ÚÐ-2ÐÐ	
­@ÚÐ-ÐÐ	
­AÚÐ-ÐÐ	
­BÚÐ-LÐÐ	
­CÚÐ-MÐÐ	
­DÚÐ-NÐÐ	
­EÚÐ-OÐÐ	
­FÚÐ-PÐÐ	
­GÚÐ-2ÐÐ	
­HÚÐ-ÐÐ	
­IÚÐ-ÐÐ	
­JÚÐ-QÐÐ	
­KÚÐ-RÐÐ	
­LÚÐ-SÐÐ	
­MÚÐ-TÐÐ	
­NÚÐ-UÐÐ	
­OÚÐ-2ÐÐ	
­PÚÐ-ÐÐ	
­QÚÐ-ÐÐ	
­RÚÐ-VÐÐ	
­SÚÐ-WÐÐ	
­TÚÐ-XÐÐ	
­UÚÐ-YÐÐ	
­VÚÐ-ZÐÐ	
­WÚÐ-2ÐÐ	
­XÚÐ-ÐÐ	
­YÚÐ-ÐÐ	
­ZÚÐ-[ÐÐ	
­[ÚÐ-\ÐÐ	
­\ÚÐ-]ÐÐ	
­]ÚÐ-^ÐÐ	
­^ÚÐ-_ÐÐ	
­_ÚÐ-2ÐÐ	
­`ÚÐ-ÐÐ	
­aÚÐ-ÐÐ	
­bÚÐ-`ÐÐ	
­cÚÐ-aÐÐ	
­dÚÐ-bÐÐ	
­eÚÐ-cÐÐ	
­fÚÐ-dÐÐ	
­gÚÐ-2ÐÐ	
­hÚÐ-ÐÐ	
­iÚÐ-ÐÐ	
­jÚÐ-eÐÐ	
­kÚÐ-fÐÐ	
­lÚÐ-gÐÐ	
­mÚÐ-hÐÐ	
­nÚÐ-iÐÐ	
­oÚÐ-2ÐÐ	
­pÚÐ-ÐÐ	
­qÚÐ-ÐÐ	
­rÚÐ-jÐÐ	
­sÚÐ-kÐÐ	
­tÚÐ-lÐÐ	
­uÚÐ-mÐÐ	
­vÚÐ-nÐÐ	
­wÚÐ-2ÐÐ	
­xÚÐ-ÐÐ	
­yÚÐ-ÐÐ	
­zÚÐ-oÐÐ	
­{ÚÐ-pÐÐ	
­|ÚÐ-qÐÐ	
­}ÚÐ-rÐÐ	
­~ÚÐ-sÐÐ	
­ÚÐ-2ÐÐ	
­€ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­‚ÚÐ-tÐÐ	
­ƒÚÐ-uÐÐ	
­„ÚÐ-vÐÐ	
­…ÚÐ-wÐÐ	
­†ÚÐ-xÐÐ	
­‡ÚÐ-2ÐÐ	
­ˆÚÐ-ÐÐ	
­‰ÚÐ-ÐÐ	
­ŠÚÐ-yÐÐ	
­‹ÚÐ-zÐÐ	
­ŒÚÐ-{ÐÐ	
­ÚÐ-|ÐÐ	
­ŽÚÐ-}ÐÐ	
­ÚÐ-2ÐÐ	
­ÚÐ-ÐÐ	
­‘ÚÐ-ÐÐ	
­’ÚÐ-~ÐÐ	
­“ÚÐ-ÐÐ	
­”ÚÐ-€ÐÐ	
­•ÚÐ-ÐÐ	
­–ÚÐ-‚ÐÐ	
­—ÚÐ-2ÐÐ	
­˜ÚÐ-ÐÐ	
­™ÚÐ-ÐÐ	
­šÚÐ-ƒÐÐ	
­›ÚÐ-„ÐÐ	
­œÚÐ-…ÐÐ	
­ÚÐ-†ÐÐ	
­žÚÐ-‡ÐÐ	
­ŸÚÐ-2ÐÐ	
­ ÚÐ-ÐÐ	
­¡ÚÐ-ÐÐ	
­¢ÚÐ-ˆÐÐ	
­£ÚÐ-‰ÐÐ	
­¤ÚÐ-ŠÐÐ	
­¥ÚÐ-‹ÐÐ	
­¦ÚÐ-ŒÐÐ	
­§ÚÐ-2ÐÐ	
­¨ÚÐ-ÐÐ	
­©ÚÐ-ÐÐ	
­ªÚÐ-ÐÐ	
­«ÚÐ-ŽÐÐ	
­¬ÚÐ-ÐÐ	
­­ÚÐ-ÐÐ	
­®ÚÐ-‘ÐÐ	
­¯ÚÐ-2ÐÐ	
­°ÚÐ-ÐÐ	
­±ÚÐ-ÐÐ	
­²ÚÐ-’ÐÐ	
­³ÚÐ-“ÐÐ	
­´ÚÐ-”ÐÐ	
­µÚÐ-•ÐÐ	
­¶ÚÐ-–ÐÐ	
­·ÚÐ-2ÐÐ	
­¸ÚÐ-ÐÐ	
­¹ÚÐ-ÐÐ	
­ºÚÐ-ÐÐ	
­»ÚÐ-ÐÐ	
­¼ÚÐ-—ÐÐ	
­½ÚÐ-˜ÐÐ	
­¾ÚÐ-™ÐÐ	
­¿ÚÐ-ÐÐ	
­ÀÚÐ-šÐÐ	
­ÁÚÐ-›ÐÐ	
­ÂÚÐ-œÐÐ	
­ÃÚÐ-ÐÐ	
­ÄÚÐ-žÐÐ	
­ÅÚÐ-ŸÐÐ	
­ÆÚÐ- ÐÐ	
­ÇÚÐ-œÐÐ	
­ÈÚÐ-¡ÐÐ	
­ÉÚÐ-žÐÐ	
­ÊÚÐ-¢ÐÐ	
­ËÚÐ-£ÐÐ	
­ÌÚÐ-¤ÐÐ	
­ÍÚÐ-¥ÐÐ	
­ÎÚÐ-¦ÐÐ	
­ÏÚÐ-§ÐÐ	
­ÐÚÐ-'ÐÐ	
­ÑÚÐ-¨ÐÐ	
­ÒÚÐ-ÐÐ	
­ÓÚÐ-©ÐÐ	
­ÔÚÐ-ªÐÐ	
­ÕÚÐ-«ÐÐ	
­ÖÚÐ-¬ÐÐ	
­×ÚÐ-­ÐÐ	
­ØÚÐ-'ÐÐ	
­ÙÚÐ-®ÐÐ	
­ÚÚÐ-ÐÐ	
­ÛÚÐ-ÐÐ	
­ÆÚÐ-¯ÐÐ	
­ÇÚÐ-°ÐÐ	
­ÈÚÐ-±ÐÐ	
­ÉÚÐ-²ÐÐ	
­ÊÚÐ-³ÐÐ	
­ËÚÐ-´ÐÐ	
­ÌÚÐ-µÐÐ	
­ÍÚÐ-¶ÐÐ	
­âÚÐ-·ÐÐ	
­ãÚÐ-ÐÐ	
­äÚÐ-¸ÐÐ	
­cÚÐ-¹ÐÐ	
­åÚÐ-ºÐÐ	
­æÚÐ-ÐÐ	
­çÚÐ-»ÐÐ	
­èÚÐ-¼ÐÐ	
­éÚÐ-½ÐÐ	
­êÚÐ-¾ÐÐ	
­ÚÐ-пÀÐEeÐÐ	
­=ÚÐ-ÁÐÐ	
­>ÚÐ-ÂÐÐ	
­?ÚÐ-ÃÐÐ	
­@ÚÐ-ÐÐ	
­AÚÐ-ÄÐÐ	
­BÚÐ-ÅÐÐ	
­CÚÐ-ÆÐÐ	
­DÚÐ-ÇÐÐ	
­EÚÐ-ÐÐ	
­FÚÐ-ÈÐÐ	
­GÚÐ-ÐÐ	
­HÚÐ-ÉÐÐ	
­IÚÐ-ÐÐ	
­JÚÐ-ÊÐÐ	
­KÚÐ-ËÐÐ	
­LÚÐ-ÌÐÐ	
­MÚÐ-ÍÐÐ	
­NÚÐ-ÐÐ	
­OÚÐ-ÎÐÐ	
­PÚÐ-ÏÐÐ	
­QÚÐ-ÐÐÐ	
­RÚÐ-ÑÐÐ	
­SÚÐ-ÒÐÐ	
­TÚÐ-ÐÐ	
­UÚÐ-ÓÐÐ	
­VÚÐ-ÐÐ	
­WÚÐ-ÉÐÐ	
­XÚÐ-ÐÐ	
­YÚÐ-ÊÐÐ	
­ZÚÐ-ËÐÐ	
­[ÚÐ-ÔÐÐ	
­\ÚÐ-ÍÐÐ	
­]ÚÐ-ÐÐ	
­^ÚÐ-ÕÐÐ	
­_ÚÐ-ÏÐÐ	
­`ÚÐ-ÐÐÐ	
­aÚÐ-ÑÐÐ	
­<ÚÐ-ÒÐÐ	
­bÚÐ-ÐÐ	
­fÚÐ-ÖÐÐ	
­gÚÐ-×ÐÐ	
­hÚÐ-ØÐÐ	
­iÚÐ-ÙÐÐ	
­jÚÐ-ÚÐÐ	
­kÚÐ-ÛÐÐ	
­lÚÐ-ÜÐÐ	
­mÚÐ-ÝÐÐ	
­nÚÐ-ÞÐÐ	
­oÚÐ-ßÐÐ	
­pÚÐ-àÐÐ	
­qÚÐ-áÐÐ	
­rÚÐ-ÐÐ	
­sÚÐ-âÐÐ	
­tÚÐ-ãÐÐ	
­uÚÐ-äÐÐ	
­vÚÐ-åÐÐ	
­wÚÐ-æÐÐ	
­xÚÐ-çÐÐ	
­yÚÐ-èÐÐ	
­zÚÐ-éÐÐ	
­{ÚÐ-êÐÐ	
­|ÚÐ-ëÐÐ	
­}ÚÐ-ìÐÐ	
­~ÚÐ-íÐÐ	
­ÚÐ-îÐÐ	
­€ÚÐ-ïÐÐ	
­ÚÐ-ðÐÐ	
­‚ÚÐ-ñÐÐ	
­ƒÚÐ-òÐÐ	
­„ÚÐ-óÐÐ	
­…ÚÐ-ôÐÐ	
­†ÚÐ-õÐÐ	
­‡ÚÐ-öÐÐ	
­ˆÚÐ-÷ÐÐ	
­‰ÚÐ-øÐÐ	
­ŠÚÐ-ùÐÐ	
­‹ÚÐ-úÐÐ	
­ŒÚÐ-ûÐÐ	
­ÚÐ-üÐÐ	
­ŽÚÐ-ýÐÐ	
­ÚÐ-þÐÐ	
­ÚÐ-ÿÐÐ	
­‘ÚÐ-€ÐÐ	
­’ÚÐ-ÐÐ	
­“ÚÐ-‚ÐÐ	
­”ÚÐ-ƒÐÐ	
­•ÚÐ-„ÐÐ	
­–ÚÐ-…ÐÐ	
­—ÚÐ-†ÐÐ	
­˜ÚÐ-‡ÐÐ	
­™ÚÐ-ˆÐÐ	
­šÚÐ-‰ÐÐ	
­›ÚÐ-ŠÐÐ	
­œÚÐ-‹ÐÐ	
­ÚÐ-ŒÐÐ	
­žÚÐ-ÐÐ	
­ŸÚÐ-ŽÐÐ	
­ ÚÐ-ÐÐ	
­¡ÚÐ-ÐÐ	
­¢ÚÐ-‘ÐÐ	
­ÚÐ-Û