IMD 1.17: 25/12/2009 20:04:24 ctos/Vpc service dos files r02.00.00 b25-pe6 2of2    9|P^ $Job VpcDOSInst ; ; The installation of CTOS/Vpc R.2.0.0 - DOS Files Disk can be done from ; Floppy or Server. ; ;$PauseOff ; Nationalizable Strings. Erc = InitMsgFile(MsgFile) ;;Initialize variables. true = 65535 false = 0 found = 255 FromFloppy = 0 FromServer = 2 ; ASSIGN ClearScreen, '\\0Ch' ASSIGN Beep, '\\07h' ; ;Use FromSpec as place to copy Vpc files from (i.e.,[f0]*. ;Note that FloppySpec can have the value [f0] or [!sys]. ;Use ToSpec as destination to copy files to (i.e., [!sys], etc.). ;Note that VolumeTo can have the value [sys] or [!sys]. $If (InstallType = FromServer) FloppySpec = ConcatStrings(DeviceFrom, '') $Else FloppySpec = ConcatStrings(DeviceFrom, '') $EndIf FlsSpec = ConcatStrings(FloppySpec, 'DOSFiles.fls') ToSpec = ConcatStrings(VolumeTo, DirectoryTo) ;Check for invalid installation: Cannot do a Public installation when ;installing from the Server. $If ((InstallType = FromServer) and (Public)) $DisplayLine(ClearScreen) $DisplayLine $DisplayLine InvalidInst1 = GetMsg(1) $DisplayLine(InvalidInst1) $DisplayLine PressGomsg = GetMsg(2) $DisplayLine(PressGomsg) $DisplayAndWait $GoTo Abort $EndIf $RestartLabel ; Enable MSDOS Write command for the installation script. CmdFileFrom = ConcatStrings(FloppySpec, 'MSWrite.cmd') MergeTo = ConcatStrings(ToSpec,'install>english.cmds') $Command Merge Command Files ,& CmdFileFrom ,& MergeTo ,& Yes ,& VolumeTo ; Installation to public will only copy all the DOS driver files to the server. $If (Public) CopyMsg = GetMsg(11) CopyMsg = ConcatStrings(CopyMsg,ToSpec) CopyMsg = ConcatStrings(CopyMsg,'...') $Display(Copymsg) CopyFrom = ConcatStrings(FloppySpec,'*') $Command LCopy ,& CopyFrom ,& ,& ToSpec ,& ,& Yes ,& No ,& No ,& Yes DoneMsg = GetMsg(13) DisplayLine(DoneMsg) DisplayLine(Clearscreen) UpdateMsg = GetMsg(6) fUpdateDOS = 255 fUpdateDOS = UserSelectYesNo(UpdateMsg,'No') $if (fUpdateDOS = 0) GoTo EndofScript $Endif $EndIf $DisplayLine(ClearScreen) Msg1 = GetMsg(3) $DisplayLine(Msg1) $DisplayLine $DisplayLine $DisplayLine fContinue = 255 Default = 'Yes' ContMsg = GetMsg(5) fContinue = UserSelectYesNo(ContMsg,Default) $if (fContinue = 0) GoTo abort $Endif ;Get drive Name $DisplayLine(ClearScreen) Msg2 = GetMsg(4) $DisplayLine(Msg2) fContinue = 255 Default = 'Yes' ContMsg = GetMsg(5) fContinue = UserSelectYesNo(ContMsg,Default) $if (fContinue = 0) GoTo abort $Endif $DisplayLine(ClearScreen) Msg3 = GetMsg(7) $Display(Msg3) $DisplayLine $DisplayLine DriveCMsg = GetMsg(8) DriveCName = UserEnterValue(DriveCMsg) ;Get drive password $DisplayLine(ClearScreen) Msg4 = GetMsg(9) $DisplayLine(Msg4) DriveCPWMsg = GetMsg(10) DrPassWord = UserEnterValue(DriveCPWMsg) ;This is common script for installation from a CD-ROM, 3" or 5" floppy. ; $DisplayLine(ClearScreen) WriteMsg = GetMsg(12) WriteMsg = ConcatStrings(WriteMsg,DriveCName) WriteMsg = ConcatStrings(WriteMsg,' ... ') Displayline(WriteMsg) Displayline FilePrefix = ConcatStrings(FloppySpec,'DOS>') $Command MSDOS Write ,& @flsSpec ,& DriveCName  ,& DrPassWord ,& ,& FilePrefix ,& VPC ,& Yes ,& ,& 1 ;Prompt User for the installation of ATI Drivers. $DisplayLine(ClearScreen) ATIMsg = GetMsg(14) $DisplayLine(ATIMsg) ATIYesNoMsg = GetMsg(15) fInstallATI = 255 fInstallATI = UserSelectYesNo(ATIYesNoMsg, 'No') $if (fInstallATI) $DisplayLine(ClearScreen) WriteATIMsg = GetMsg(16) WriteATIMsg = ConcatStrings(WriteATIMsg,DriveCName) WriteATIMsg = ConcatStrings(WriteATIMsg,' ... ') Displayline(WriteATIMsg) Displayline ATIFlsSpec = ConcatStrings(FloppySpec,'ATIFiles.fls') $Command MSDOS Write ,& @ATIflsSpec ,& DriveCName  ,& DrPassWord ,& ,& FilePrefix ,& VPC ,& Yes ,& ,& 1 $Endif ; Begin installation to either a pseudovolume or a native DOS partition. ;Wrap up the installation $Path, Sys, Sys  EndOfScript: $DisplayLine(ClearScreen) FinishedMsg = GetMsg(17) $Display(FinishedMsg) Abort: $End :PackageName:CTOS/Vpc DOS Files :Version:R2.0.0 :RequiredDiskSpace:850 :Directory: :ProductFiles: :RelatedFiles:DOS>INSTALL.BAT DOS>CONFID$$.SET DOS>CONFID$$.SLT DOS>GETBATXT.COM DOS>CMOUSE.COM DOS>CMOUSE.SYS DOS>HIMEM.SYS DOS>PEMM.EXE DOS>DPMIHOST.COM DOS>README DOS>CTOSRQ.DLL DOS>CTOSAPI.DLL DOS>UCOMM.DRV DOS>COMM.DRV DOS>CDDRIVER.EXE DOS>CDR.EXE DOS>AUTOEXEC.PCE DOS>CONFIG.SMP DOS>RS485EM.EXE DOS>INSTATI1.BAT DOS>READATI1.TXT DOS>W31XL24.EXE MSWrite.cmd DOSfiles.fls ATIfiles.fls :Verify:mJ|8&7O! 7 M m  0A1\AE*** PUBLIC INSTALLATION FROM SERVER IS INVALID ***AAPress AEAA to continue.WARNING: The installation of the CTOS/Vpc DOS files package requires the Standard Software - DOS Utilities package (MSReader.run).If the Standard Software DOS package is not installed on your system, Choose AEAA to exit installation.WARNING: This installation requires the \VPC directory. If the pseudovolume or native DOS partition doesn't contain the \Vpc directory, choose AEAA to exit, then create the \VPC directory before proceeding. (The Expandable Pseudovolume shipped with CTOS/Vpc contains the \VPC directory.)Continue installation?Copy the DOS files to any PSV or native partition now? Please enter either the pseudovolume name (for example, [sys]amy.psv) or the device name of the drive that contains the native DOS partition (for example, [d1]).Enter pseudovolume or device nameIf you are using a DOS drive with no CTOS partition, you must specify the device name (for example, [d1]) in the device password field. If you are using a CTOS drive that contains a pseudovolume or a native DOS partition, supply the CTOS volume password in the Device Password field. Otherwise, press .Enter device or volume password^Copying the DOS Files to Writing the DOS Files to done.Some EISA/ISA workstations can use the ATI Standard Mode Windows Drivers under CTOS/Vpc (See  the Software Release Announcement for details).Copy ATI drivers?Writing the ATI drivers to Installation of CTOS/Vpc - DOS Files is complete.:1: "AE*** PUBLIC INSTALLATION FROM SERVER IS INVALID ***AA" :2: "Press AEAA to continue." :3: "WARNING: The installation of the CTOS/Vpc DOS files package requires the Standard Software - DOS Utilities package (MSReader.run).If the Standard Software DOS package is not installed on your system, Choose AEAA to exit installation." :4: "WARNING: This installation requires the \VPC directory. If the pseudovolume or native DOS partition doesn't contain the \Vpc directory, choose AEAA to exit, then create the \VPC directory before proceeding. (The Expandable Pseudovolume shipped with CTOS/Vpc contains the \VPC directory.)" :5: "Continue installation?" :6: "Copy the DOS files to any PSV or native partition now? " :7: "Please enter either the pseudovolume name (for example, [sys]amy.psv) or the device name of the drive that contains the native DOS partition (for example, [d1])." :8: "Enter pseudovolume or device name" :9: "If you are using a DOS drive with no CTOS partition, you must specify the device name (for example, [d1]) in the device password field. If you are using a CTOS drive that contains a pseudovolume or a native DOS partition, supply the CTOS volume password in the Device Password field. Otherwise, press ." :10: "Enter device or volume password^" :11: "Copying the DOS Files to " :12: "Writing the DOS Files to " :13: "done." :14: "Some EISA/ISA workstations can use the ATI Standard Mode Windows Drivers under CTOS/Vpc (See the Software Release Announcement for details)." :15: "Copy ATI drivers?" :16: "Writing the ATI drivers to " :17: "Installation of CTOS/Vpc - DOS Files is complete." WINSTALL.BAT CONFID$$.SET CONFID$$.SLT GETBATXT.COM CMOUSE.COM CMOUSE.SYS CMOUSE.DRV HIMEM.SYS PEMM.EXE DPMIHOST.COM README CTOSRQ.DLL CTOSAPI.DLL UCOMM.DRV COMM.DRV CDDRIVER.EXE CDR.EXE AUTOEXEC.PCE CONFIG.SMP RS485EM.EXE INSTATI1.BAT READATI1.TXT W31XL24.EXE of CTOS/Vpc R.2.0.0 - DOS Drivers Disk can be done from ; Floppy or Server. ; ;$PauseOff ; Nationalizable Strings. Erc = InitMsgFile(MsgFile) ;;Initialize variables. true = 65535 false = 0 found = 255 FromFloppy = 0 FromServer = 2 ; ASSIGN ClearScreen, '\\0Ch' ASSIGN Beep, '\\07h' ; ;Use FromSpec as place to copy Vpc files from (i.e.,[f0]*. ;Note that FloppySpec can have the value [f0] or [!sys]. ;Use ToSpec as destination to copy files to (i MSDOS Write01 ?)[Sys]MsReader.runCopies file(s) from CTOS to a DOS volume. [CTOS File list] [To DOS drive or PSV ([f0])] [Drive password]^ [Map newline to CR/LF?] [File prefix from] [Directory prefix to] [Overwrite ok?] [Print file] [DOS partition number] @echo off echo. echo CTOS/VPC R2.0.0 : Device Drivers Installation rem be sure no old SDRIVE value to cause problems set SDRIVE= rem be sure no command line params if not "%1" == "" goto USAGE rem now see where we started from if "%0"=="winstall" goto LOCAL if "%0"=="WINSTALL" goto LOCAL rem bad start, show how to do it right goto USAGE :LOCAL echo. echo Removing obsolete EMS 3.2 device driver from C:\DOS and C:\VPC: echo PEMM32.EXE: if exist c:\dos\pemm32.exe del c:\dos\pemm32.exe > NUL: if exist c:\vpc\pemm32.exe del c:\vpc\pemm32.exe > NUL: echo. echo Removing obsolete files from C:\DOS: echo. if exist c:\dos\pemm.exe del c:\dos\pemm.exe > NUL: if exist c:\dos\dpmihost.com del c:\dos\dpmihost.com > NUL: if exist c:\dos\cmouse.com del c:\dos\cmouse.com > NUL: if exist c:\dos\cmouse.sys del c:\dos\cmouse.sys > NUL: echo Removing obsolete Windows 3.0 drivers from C:\VPC: echo GC04.DRV, GC04VGA.DRV, GC04VGAM.DRV,  GC04P7C.DRV, and SETUP.INF echo. if exist c:\vpc\gc04.drv del c:\vpc\gc04.drv > NUL: if exist c:\vpc\gc04vga.drv del c:\vpc\gc04vga.drv > NUL: if exist c:\vpc\gc04vgam.drv del c:\vpc\gc04vgam.drv > NUL: if exist c:\vpc\gc04p7c.drv del c:\vpc\gc04p7c.drv > NUL: if exist c:\vpc\setup.inf del c:\vpc\setup.inf > NUL: rem This is to determine where to copy the ctosrq.dll file, to the windows rem directory if it exists or to the Vpc directory if it doesn't. rem First see if the user has a windows directory echo. echo. echo Backspace to change Y to N and press Enter when done. %SDRIVE%getbatxt "Do you have a Windows directory (Y or N): " Y 1 WINYORN winyorn.bat call winyorn del winyorn.bat > NUL: if '%WINYORN% == 'y goto doWindows if not '%WINYORN% == 'Y goto noWindows :doWindows echo. echo If your Windows directory is different from the one below backspace over echo the name and replace it with your directory name. Press Enter when done. %SDRIVE%getbatxt "Windows directory: " C:\WINDOWS 67 winpath setwp.bat call setwp del setwp.bat > NUL: rem now that we know where to put it do so echo Copying files to %WINPATH%: echo CTOSRQ.DLL, CTOSAPI.DLL CMOUSE.DRV, COMM.DRV and UCOMM.DRV copy %SDRIVE%ctosrq.dll %WINPATH% /v > NUL: copy %SDRIVE%ctosapi.dll %WINPATH% /v > NUL: copy %SDRIVE%cmouse.drv %WINPATH%\SYSTEM /v > NUL: copy %SDRIVE%comm.drv %WINPATH%\SYSTEM /v > NUL: copy %SDRIVE%ucomm.drv %WINPATH%\SYSTEM /v > NUL: :noWindows rem clear the variables set WINYORN= set WINPATH= echo. echo Device driver installation complete. goto EOF :USAGE echo. echo USAGE: c:\Vpc\INSTALL echo. echo (All uppercase or lowercase letters.) echo. echo No parameters are required. echo. echo Removes obsolete EMS 3.2 device drivers: echo (c:\dos\pemm32.exe c:\vpc\pemm32.exe) echo. echo Removes obsolete Windows 3.0 drivers: echo (c:\vpc\setup.inf c:\vpc\gc04.drv c:\vpc\gc04vga.drv) echo (c:\vpc\gc04vgam.drv c:\vpc\gc04p7c.drv) echo. echo Copies new device drivers to c:\windows if exist: echo (cmouse.drv ctosrq.dll ctosapi.dll ucomm.drv comm.drv) echo. goto EOF :EOF echo. 44444444444444444444444444444444444444444446444444444444444444444444444444444444444445SETUP FILE || || The MS-DOS Backup Version 6.00.00 02/26/93 06:00 am || || CONFID$$.SET Setup File || || Last Update: 10-26-93 6:11p || || Last Full Backup: 1/01/80 || || Last Backup: 1/01/80 || || MS-DOS Compatable Versions: || 1.02 1/30/90 2:00 pm || 1.10.25 4/30/90 9:00 am || 1.10.42 7/19/90 2:00 pm || 1.20.35 11/13/90 10:00 am || 1.20.40 12/18/30 10:00 am || || || General Program Settings || &00 Description:  Compatibility Setup File &29 Code Page Information: 0:0/ @03 File Sort Type: 0 ( 0= Name, 1= Extension, 2= Size, 3= Date, 4= Attribute ) #20 Show Selection Statistics: No #23 Group Selected Files: No @06 Printer Select: 0 ( 0= LPT1, 1= LPT2, 2= COM1, 3= COM2 ) @18 Page Feed: 0 ( 0= Continuous, 1= Manual ) @19 Lines Per Page: 60 #24 Print Catalog To File: No || || || General Backup Settings || #07 Exclude Copy Protected Files: No &08 Copy Protected File 1: &09 Copy Protected File 2: &10 Copy Protected File 3: &11 Copy Protected File 4: &12 Copy Protected File 5: @04 Backup Type: 0 ( 0= Full, 1= Incremental, 2= Differential ) @01 Backup To: 1 ( 1= A, 2= B, 3= Both, 4= MS-DOS Device Path ) #05 Backup System Files: Yes #06 Backup Hidden Files: Yes #22 Backup Read Only Files: Yes #02 Backup Using Date Range: No +00 Backup Date Range: 1-01-80 TO 12-31-99 &21 Encrypted Password: || || Disk Backup Settings || &01 Backup Device Path: C:\DOS @02 Backup Diskette Size: 0 ( 0= 360K, 1= 720K(5 1/4), 2= 720K(3 1/2), 3= 1.2 ) @09 Diskette Overwrite Warning: 3 ( 0= None, 1= MS-DOS Disks, 2= Backup Disks, 3= ) @43 Error Correction Code Level: 2 ( 0= None, 1= Standard, 2=Enhanced ) #03 Use Error Correction: Yes @10 Diskette Format Option: 0 ( 0= Only When Needed, 1= Always ) @08 Backup Data Verification: 2 ( 0= None, 3= Read & Compare ) @05 Data Compression: 0 ( 0= None, 1= Save Time ) @12 Audible Backup Prompts: 1 #42 Password Protected Backup: No #00 Keep Old Backup Catalogs: Yes #04 Quit After Backup: No || || || General Restore Settings || #21 Restore Using Date Range: No +01 Restore Date Range: 1-01-80 TO 12-31-99 @36 Restore To: 0 ( 0= Original, 1= Other Drives, 2= Other Dirs ) @13 Restore From: 1 ( 1= A, 2= B, 3= Both, 4= MS-DOS Device Path ) #11 Restore System Files: No #12 Restore Hidden Files: No #19 Restore Read Only Files: No || || Disk Restore Settings || &02 Restore Device Path: C:\DOS @16 Restore Data Verification: 0 ( 0= None, 3= Read & Compare ) @15 Restore File's Archive Flag: 0 ( 0= Leave Alone ) @17 Audible Restore Prompts: 1 ( 0= None, 1= Low ) #14 Prompt Before Create Dirs: No #15 Prompt Before Create Files: No #16 Prompt Before Overwriting: No #18 Restore Empty Directories: No #10 Quit After Restore: No || || || General Compare Settings || @37 Compare To: 0 ( 0= Original, 1= Other Drives, 2= Other Dirs ) @54 Compare From: 1 ( 1= A, 2= B, 3= Both, 4= MS-DOS Device Path ) || || Disk Compare Settings || &23 Compare Device Path: C:\DOS @21 Audible Compare Prompts: 1 ( 0= None, 1= Low ) #48 Quit After Compare: No || || Include & Exclude Specifications for Backup || !00: !01: !02: !03: !04: !05: !06: !07: !08: !09: !10: !11: !12: !13: !14: !15: !16: !17: !18: !19: !20: !21: !22: !23: !24: !25: !26: !27: !28: !29: !30: !31: !32: !33: !34: !35: !36: !37: !38: !39: !40: !41: !42: !43: !44: !45: !46: !47: !48: !49: 5fp]S RS485EM EXE 'Z[^S UCOMM DRV @j_S@$4201 CPI 4208 CPI 5202 CPI ANSI SYS APPEND EXE APPNOTESTXT ASSIGN COM ATTRIB EXE AUTOEXECUMB BACKUP EXE CHKDSK EXE CHKSTATESYS CHOICE COM COMMAND COM COMP EXE CONFIG UMB COUNTRY SYS DB10261026$ DBLSPACEBIN DBLSPACEEXE DBLSPACEHLP DBLSPACEINF DBLSPACESYS DBLWIN HLP DEBUG EXE DEFAULT SET DEFRAG EXE DEFRAG HLP DELOLDOSEXE DELTREE EXE DISKCOMPCOM DISKCOPYCOM DISPLAY SYS DOSHELP HLP DOSKEY COM DOSSHELLCOM DOSSHELLEXE DOSSHELLGRB DOSSHELLHLP DOSSHELLINI DOSSHELLVID DOSSWAP EXE DRIVER SYS EDIT COM EDIT HLP EDLIN EXE EGA CPI EGA SYS EGC2UTILEXE EMM386 EXE EXE2BIN EXE EXPAND EXE FASTHELPEXE FASTOPENEXE FC EXE FDISK EXE FIND EXE FORMAT COM GORILLA BAS GRAFTABLCOM GRAPHICSCOM GRAPHICSPRO HELP COM HELP HLP HIMEM SYS INTERLNKEXE INTERSVREXE JOIN EXE KEYB COM KEYBOARDSYS LABEL EXE LCD CPI LOADFIX COM MEM EXE MEMMAKEREXE MEMMAKERHLP MEMMAKERINF MEMMAKERSTS MIRROR COM MODE COM MONEY BAS MONOUMB 386 MORE COM MOUSE COM MOUSE INI MOVE EXE MSAV EXE MSAV HLP MSAVHELPOVL MSBACKDBOVL MSBACKDROVL MSBACKFBOVL MSBACKFROVL MSBACKUPEXE MSBACKUPHLP MSBACKUPINI MSBACKUPOVL MSBCONFGHLP MSBCONFGOVL MSCDEX EXE MSD EXE MSHERC COM MSTOOLS DLL MWAV EXE MWAV HLP MWAVABSIDLL MWAVDLG DLL MWAVDOSLDLL MWAVDRVLDLL MWAVMGR DLL MWAVSCANDLL MWAVSOS DLL MWAVTSR EXE MWBACKF DLL MWBACKR DLL MWBACKUPEXE MWBACKUPHLP MWGRAFICDLL MWUNDEL EXE MWUNDEL HLP NET5 COM NETWORKSTXT NIBBLES BAS NLSFUNC EXE OS2 TXT PARK EXE POWER EXE PRINT EXE  PRINTER SYS QBASIC EXE QBASIC HLP RAMDRIVESYS README TXT RECOVER EXE REMLINE BAS REPLACE EXE RESTORE EXE SETVER EXE SHARE EXE SIZER EXE SMARTDRVEXE SMARTDRVSYS SMARTMONEXE SMARTMONHLP SORT EXE SUBST EXE SYS COM SYSENV COM TREE COM UNDELETEEXE UNFORMATCOM VFINTD 386 VSAFE COM WNTOOLS GRP XCOM EXE XCOPY EXE C:\ALPHA  AMYHI30  AMYHI30 NEW AMYTEST  BCP  BORLANDC AMY  BGI  BIN  CLASSLIB EXAMPLES  INCLUDE  LIB  SOURCE CRTL CLIB  EMU  IOSTREAM  MATH  RTLINC  WINLIB INDEP DOC  EXAMPLES TASM FILT  HEAP  QUEUE  WHEREIS TCALC  TD  TPROF  WIN30  WIN31  CHELP  CLIOLE  CMDLG  DDEML  DRAGDROP  SOUNDER  TRUETYPE WORKSHOP INCLUDE SYS LIB STARTUP OWL DOC  EXAMPL31 ACLOCK  CMDLGAP  DDEML  DRAGDROP  OLECLNT  OLESRVR  OWLHELP  OWLPEN  SCRNSAVE  SHELLAPI  SOUNDPLY  TTFONT EXAMPLES CALC  CHECKERS  CHESS  CURSOR  FILEAPP  GDIDEMO  MFILEAPP  OWLPRINT  PAINT  PROGTALK  STEPS  SWAT  SYSINFO  TTT INCLUDE  LIB  OBJECT  DL  WL  WM  WS SOURCE PETZOID CHAP01  CHAP02  CHAP03  CHAP04  CHAP05  CHAP06  CHAP08  CHAP09  CHAP10  CHAP11  CHAP12  CHAP13  CHAP14  CHAP15  CHAP16  CHAP17  CHAP18  CHAP19 REDIST  TVISION DEMOS  DOCDEMOS  HELP  INCLUDE  LIB  OBJECT  SOURCE BPC  BRIEF BACKUP  HELP  MACROS CTOSRQ  DOS DRIVER  HIMEM  HIMEM30  HPO  HW  KUNAL  LANCEPC CDROM  LANCE NEWRTM  PETZOID CHAP01  CHAP02  CHAP03  CHAP04  CHAP05  CHAP06  CHAP08  CHAP09  CHAP10  CHAP11  CHAP12  CHAP13  CHAP14  CHAP15  CHAP16  CHAP17  CHAP18  CHAP19 TEMP  WINDOWS SYSTEM VSAFE COM C*'u0!<sÌߋ6.>+r!s'3PL!66ƱH6FH66gP6g P6g6g6&B6+۴J!6!!+3 3O666P$.ظDP.ې+x> uXP PD5!pr%!> tC   -&6,  3 s#   &,>3&=t4 bt 3u!,Ar ,Ar ªD!r €t@Ky羬 U3UUVWUVW.Q u'!!\!!b J> u 5 ;X uFL!_^]Ë  p%!;s OO ;s EtTWV~t"hhGh^_Ë^wF^G؎3I;Nv ^_v^wwh*^wvَ3+G3IN;NrV^NG3I+RFP?HuG~hu f u/FPuhV`Vg3^_WV~3I~F tfF=t]<u$ t P-j %vN~ |5~~ |-~~'9v~"FFv=F~ uj j 3^_UPq>tP_]øRV3B22Ut P8^Ï<t)&,33uGG>ыѿ< t< t< to tkGN< t< t< t\ tX<"t$<\tB3A<\t<"tӋѨuN< t+ t'<"t<\tB3A<\t<"tۋѨu>GB+ģ6?CC6 u63< t< t< t| tx6?CCN< t< t< tb t^<"t'<\t3A<\t<"t\Ѱ\s"N< t. t*<"t<\t3A<\t<"t\ٰ\s"3&U&,333 t&>tFu@$F Pϋ3_I&6;buQVWb_^Yt&?CC u&]UVWV ;t@t 3_^]UWv t 3I> u @!_]UWVFG@tGDuVQށRFVD*P+  |Q~tNPFPs FF~\tPFP N Pvv FP  tD^_]UV u3Vvvv^]ÐU3Pvv]ÐUWVvVFPvVaFVWF^_]UWVVIFPvP(FPWF^_]  u> u S [!UWVvj VFPWQv;u&x V PfFFVvF^_]UV> u !]SQt QP[t Y t[Ë}UVWFf\F^v N-D utEFDut1D t*;vPSQPS4Y[X+)D us;NrFDut SQVZY[ uV3ҋv+PSQPS3DP Y[Zt.+;u(3SQVP5Y[tCIE u@F닀L F+3vF_^]UVWvDth@udDt tWL $ $DN3ۊ\uLuuCt tu$@t~QWS >L \SVU [[Dt֋ T+BUJT QQtS Y|V;u3F3 tQPPSI 3_^]UVvDtttYd3DD^]U WVr FF^=wtTw,atX,t33FFF^?u~u=tttF, tTFȐF빐 uFuЁ@u덃~uFN@{~uFfiPvVv F }=p F ȁN؊FG3EFEيF3EG^_]UVWvtt uHND u8u3 tDDELSP[[ t3_^]UVWvNt#3ۊ\@tVfX~t 3ED_^]UV~u3P7v6 t%vN@t^*GPr =^]UWV3F؋OрuEu Nt5+DF ~)PtD*P ;Fu DtdL DD^_]ÐPUWV3~~uDtV@uF96r~uDtV@tGސ~uF^_]KS|U+VW3FFvvF t~}F, F6N*u " y02F F FF0u,9/Fu0FR3ҍX3ҾƆ: F3ҍpGFN@F ~tF guFvvVWvFt  F v F Ft~uW| guFuWz &=-uGNWOY+N@F 5FF'FtFF0QVVFFtNFFtF@t3F@t } N؃ڃ~}Ff uF~N2v5Ft&=0tO&0AF@t1Ft F-F Ft F+FFt F FF++F}3WQF uȲ P~NXFt FuȲ0Y_PkXFtȲ { vvËvЭvF t‹ uØW^Ox ?3_QRSPZYuNW3& _tFNW3 _tFW  u u30<9vFNY+G_^]WV396rDuD3DDD^_U^;r >!rƇ$U׋ތ؎~3u~+FtI]U׋ދv؎3ы~ǨtI]U׌؎~3I]UWVv33۬< t< tP<-t<+u<9w,0rҋˋ؃X<-u؃^_]UVWNF3҃ u~UVA!Y+r ;Z rQ3 r3]sPX2]s]2â u">r <"s < r<v\ ט~ÊU t]UVvPYށN t LG LGGDD^]U^;r 1> tOFtH~ t3ɋѸB!rKF uFVy(6VFѸB!FVy NVB!؋VNF B!rU2>r~F FU2~FFu@u uFV$ Ǵ=!su t%=u >!FD!€tN@F@tFtt 3ɴ@!>!VC!eFuuѸB!ٍV?! t~uًѸB!3ɴ@!3ɋѸB!gFNNFuFuV!F$ FV=!rړFuFt VC!rF@u=VC!2ɃtFt ;r >! NË]2ܡ#3ɨuU^;r > u  t B3ɋ!rtnV3FFWVfN 8 uJ=vFܺ=(s+ԋN< t ;t"j ;u F ^_^OPSQ+Q^@!Yr F;wY[Xß~us @t ^?u F+Ff^_$N uV@!s u@t ڀ?uQWGtct+IAAw tLs 30?&t = t;ru"rHs3#R.Zs t+WGw JBw _YËGtJwN;v9Ws6BSQގƱuGt Ƌ+ÎËشJ!Y[rGtJWWw;w uwt$OO_UWVv |96 ~ 4&=}3#tV= t >~ ^_]ÐU׋ތ؎v~NjNtI]ËN FV~W t u y -ۃڋ3 t0<9v' uODD;rX_^]YZ ;s+3UV^H9\s KK9\v\^]UVWNwHZs!rPs39 tv  uЙ_^]WV3V@tG96s^_ÐU^h!aASw_ 3#[uBSw_;t6K3 T;sr#tH;s#rЭtƒD[GG[Lt +H+ƌMS Run-Time Library - Copyright (c) 1992, Microsoft Corp_C_FILE_INFO= Copyright 1993, Unisys DSD. All rights reserved. Usage: "prompt string" "default input string" (max length) (variable to set) (batch.bat) Maximum length of prompt string + input string = 79 characters! %s%swset %s=%s \\ggFEEE50P 0PX000WP ``````ppxxxx(null)"   rrrrrrr<>R6000 - stack overflow R6003 - integer divide by 0 R6009 - not enough space for environment run-time error R6002 - floating-point support not loaded R6001 - null pointer assignment HAP12  CHAP13  CHAP14  CHAP15  CHAP16  CHAP17  CHAP18  CHAP19 TEMP  WINDOWS SYSTEM VSAFE COM C*'u0 This is Copyright(C) 1985-1990 LCS/Telegraphics. ALL RIGHTS RESERVED.$The following message is for compatibility only: *** This is Copyright 1983 Microsoft ***()UNISYS;bus mouse driver;CMOUSE;v7.04c.#."Uv v v v= u= t=t=u ÃuPT^u t t tvv v v ].".#.#." .".#UWVRQSP=|=-'<.u3Ɇ=0s=KuF N=MuF N=muF NDz+To:Vfox4JiIp*ZvkDP!CXXPu!:FXtC!^2mtmu h@hmȢm>muB F㋇FFFLJ F㋇F FFLJX;~prB=;~tv2"kÙ>:.:i>&G&G>mu hBhwNt,>tw>mu hBh̀ʉ."."rFFVxz|Fn=n4 uA uBv6>6>3 t0Cw*KSRZ[6 uX 3F>t3FFFF;|ȉN&;u5 u&=7؋&=&3F, FtX[YZ^_]Ü>:~ >u;>mu>:~'ȋӃ;|;; ;|0+i+kȋ-;|;;;|mhDhÊ&:u uMtË6p>r 6t>v;|;~ð6>2t'ð6'>2u: t @>u#P|33X3< tÙ>>É 6>u t)#<#>Wà &2tG3t&t   &rˉÃ>t>t@&$tMt $2ˀ`ŋ#t"%u&DŽV~U^DŽx#t.z=t.>hu'>}>muhBh2Ë 6>.".^."Ȏ؎P؎mu hDh$& 4#<6#>x $>n w>u >tXPQVWȎ؎3ik6 >GG_^YXËÃ}؋у};s& ur *=| t| ܊2| ̊2ø+Y& ;|6=drd㋇  @`@@@|K抏~3 r PVƄ>| >| F^XÊ t芜w9Q+YÐ  %')+ !%). #'+05< $(,0 $(,048<@ $(,048<@DHLPTX\`Slow Moderate Fast Unaccelerated   %')+ !%). #'+05< $(,0 $(,048<@ $(,048<@DHLPTX\`Slow Moderate Fast Unaccelerated w222@d@d$ @xFzF|F 6L4 ukwkNC6Lt u(>،Ȏ&&M&} uȎء*>mu h@hQYtt u~DŽt tN~FFFFFFcd;r؉;rȉ;rЉ<FFF'*(FP5X u uFFFPXtHF(FFwFĉFN3hF"F#FȠ( &fRrv^NV6>u 3NjF^NV3u"$u&>2tFu$363s6F 3ʼnFmikF^N3Ct K|~863 |v3D>~33FA6~v^|^F(3CtK~~ |3F|^K㍷v^3It ItH82,>3t v>@V^t >@F.upr`P>&.648P)0>2t0@؋$&cu<u<u<@u.8P4r@"B"6vÃvgv>2t sS&3pt4Hr6Hv#<#>v%%%%#&Z&&@ءJ8&@BDF5%(@G:<>l6\48Z@ B D F5%,(sP{@BDF5%(@>&t&9.0]+:<>:<>:<>}:<>h(@ؠ*@6@BDã*RZ,.#." uf>muPSQRVWhDh_^ZY[Xm.".."PSVWU@ؠI$&>2t QRZY]_^[Xu0u8.".."P@ؠb2*RCZX`u>nt.".#..Ȋ&tw26):t& u.".#SQ|u9P5."!."Ȍ;Xu;tLD%."!."3Y[SQR|t>P5."!."33 Xu %\."!."3DZY[øSQ@l؄t:u;lY[<R>t |G;t0 <>u8r?6BB3ZÝZP!#!XP! !XR>t(6~Z.#."PSQRWVU.P X u u;t<]^_ZY[X.".#σ>t 33ۡ>t 6&D% &&LR6>GGX$ذO$ ØP?$ذ6$ ØP2$ %PBB3XY[ZËRJu%>Pd>0t ut&Ã>u1X>&V&>,>LÃ>uF>L>0t ut&d#3>0t ut&>Pá>&Ë.ȰBJBJC~+6fo">&uP tP5 j>&t+8>>s >,>ùP>>>,>U>~F.f>&>F&E>F>~">&uPΩ tP5 ]?j8`~ 6ft %`u8z>`!">U!>~;.f>&>F&E>F6>~ %`u8]Zhv*8FTbp$ ~ 2 @ N  \ jx,:HV dr&4BP^l z.< @`8"ãÜ>& u+i%b+kN>}A=(3++؅}3ۉãN;6|6+}3>|/Z+8|]=RH3+=~Z/PX؃+؉Zbá33+T|.Ӌ;~+Ӌ+,;~+;~+ه+ˋ3;~++ً3٣6>3ɡ+|;~+ ;~+٣ á>t +b66NáRT+++<~2+ËTb>u  &\]^0Tb&_`a-S8I>Z~9~@\&_FGI>Z~9%]&`FGI>Zt9 ^&aF[&"2&Ë8K9~!>K9~K9~FI8( ?+@@+B+D+F,(@ +>@+B+D+F,(_.6^)+~@+B+D+F,(6)@BDF5%(j6)+@+B+D+F,(-8@6+@.B.D.(I'[''U'I'' 4't''Z'R''S''T''.#."s:S6_S[WPċ'X_.".#'N(()i)))*********>.t& sW&t sB؋_ÜR&ZPBJX&ם_Ëà s&t&%Ë&&Ë&%RP&XZÀ>.tV&3^Ü&2Su1R&ZPB&CJX&[םPB&CJX[םË&&3tt&'%CG&'<t%CGÜRP&XZ&'%CGV>.t&5&&E^SR3&&]p&]Z[^RV&< &&s&D&d%t^Z&DR&ZSQRV؎u&P&֋&VQ&Y^tu&X읃 r֋&&:t@r^ZY[ËQu=HTuA&&2틽&&GCY&UF؋~F].".."UF~؉F]Ë>&v@ؾ4&4r %wtt `tr،Ȏ@>'߸2Ī R'S'T'@>U'&N'&.&% &À>wnhY|.8>>>,>+t@+>& u@+ã+Gú&m>~9&6>+W >~ >+>++&&غ&&&=ËU6>+.+A8++ڎ~ .GH.>t<.6.. .FG.6+.u..~.+.GH.6+.>+.FGH]U6+>.+8+؎.~ .FH.~ .FH.>t<.6. ..F.F.u..~ .FH.~ .FH]À>.u좵+좶+ +9+&>+Ë>+&+ ^>+>.u++M>j.8>>>,>+++ã+MUy.~6>++@+T0&%$s2ĪM~ >+]r3d3r3r3r3r3r3r3r3r3r3r3r3r3r3r3r3k3r3r3r3r3r3r3r3r3r3r3r3r3r3r3Ŀ Unisys Corporation Mouse Driver version 7.04c Copyright (c) 1985-1991 All Rights Reserved $ Installed using IRQ . $ Already installed. $ Not installed - Mouse interface is not responding. $ Disabled but cannot be removed. $ Disabled and removed from memory. $ Cannot be disabled. $ Driver re-enabled. $ Not installed. $ Options updated. $ Can't switch to another port. $Sr%>2t//0 !/[>/t>/t1`/ks >/t 35!3%!N׃>2t_>u(00 !/>!K}'>/tg 233/ t ;t33 u/ t ;/t8l/33/$/$/1?08/>u1$>/t1>u00 !>/u1!r% PӅuXSȎظ3ۍ>/<u /Ë/&Gt .2&ut2[53! uxK33 tlG&:Eua<u3ۋ33%3&-3|>t 3/33Ë3RQS3[YZV6.3|-3_ ,5,,5-,5/,5 ,5 N5 N5sP5hg5vz5d5o5m5n5b5F;r<@~ 4.:u.e@tJH=dD..o@t3H=d-.\@t H=d.I@t H=d.`3~ =.|mJ+~ =ffu ./-@tH.?@tH.. ./;s< t< tN=MuF N=muF N&CYnNR&/^}8cFP!XXPu!:FXt!Z^2tu ȢuF㋇FFFLJF㋇FFFLJX;~uBu=;~w2w"Ù>.>&G&G>u wNPt,>itwRT>u ̀ʉV..r}FF}VF=4 uA uBXZv@B6D>FHJ6L>N3 t0Cw*KSRZ[6\\ uX \3F\>t3F^F\FF";|ȉN&; u5 u &=7 ؋&=&3 F,\$$$ki$$$$ FtX[YZ^_]Ü>~ >Pu;>uy{>~'ȋӃ;@|;D;F ;B|0++ȋ-;H|;L;N;J|@BDFHJLNÊ&\:u uOtË6> 6>;|;~ð6\c>t!' ð6\!'>uc< t @>u#P|33X3< t㡢Ù>Xuᡤ>ZwÉ6}>u t)u#yw#{Wà&2tG3y{t&t  rˉÃ>t>sts@&$tMt $2ˀ`ŋ #t"%u&DŽVU^DŽ#t.=t.>u'>}>uk2䣜sËy{6}>..^.Ȏ؎P؎u s$ }u#yw#{$>PXZ RTw>u >atXPQVWȎ؎36>GG_^YXËÃ}؋у};s& ur *=| t ܊2䣦 ̊2䣨ød+obmY&;|6=drd㋇[  @`@@@K抏3 r PVƄ m> o> F^X Ê t芜 w9Q+YÐ  %')+ !%). #'+05< $(,0 $(,048<@ $(,048<@DHLPTX\`Slow Moderate Fast Unaccelerated   %')+ !%). #'+05< $(,0 $(,048<@ $(,048<@DHLPTX\`Slow Moderate Fast Unaccelerated w222@d@d @FFF 6L4 ukwkNC6Lt u(>،Ȏ&&M&} uȎء>u QYtt u  DŽt  tNF FFFFFcd;r؉b;rȉd;rЉfPu RT3VNjF^NV3u"u>tFu36s6F 3ʼnFF^N3Ct K|~8L6N vD>3F@6v^^F'3CtK~~ 3F^K㍷ v^3It ItH8k2i,>t v> @V^t >R@F^.upr`P>nP>t@؋$&cu<u<u<@u.P!!Ãvgv>t sS3HHu#yw#{YYjj{{{%:%l%r%%%#&@ءJ4;E$@Gln\Z/ 6 @ $spPp{4;E$@>t&9pn]+}h@ؠ*@4;EãR`Z.. uf>uPSQRVW_^ZY[X..\.PSVWU@ؠI$>t QRZY]_^[Xu0u8..\.P@ؠb2`RCZX`u>t....\{Ȋtw26yt&u..SQ|u9P5.!.Ȍ;Xu;tLD%.!.3Y[SQR|t>P5.!.33 Xu %\.!.3DZY[ø2SQ@l؄t:u;lY[<R>ct |GX;jt0h<>Xuh8r?c^aXjo^6$IhBBlc3ZÝ^ZP!#a!XPa! !XR>ct(lhc^6$I~Z..PSQRWVU.P X u u;dtd:]^_ZY[X..σ>lt 33ۡd>ot 6p&D% &&LR6h>hGGX$ذO$ ØP?$ذ6$ ØP2$ %PhBB3XY[ZËRhJPu%n>>t ut&Ã>Pu1{y>&p>>Ã>PuFn>>t ut&#R3T>t ut&>á{y>pËȰBJBJCn|~+6o">uP tP5 js>t+>q>s >>~ùP>q>>>~U>z~F.>~&>F&E>F>z~"~>uP~Ω tP5 ~]?j8`n|~ 6t %`uz>s !q裀>~U!>z~;.>~&>F&E>F6>z~~ %`u~]Zhv*8FTbp$ ~ 2 @ N  \ jx,:HV dr&4BP^l z.< @`8s!qã~Üy> u+q%{+sz2>s}As=zs(3+s+؅}3ۉzãss;|+s}3z>q|/q+v|]=vRvH3+q=~q/PvX؃2+؉qász|33+|.Ӌ;~+Ӌ+,;~+;~+ه+ˋ3;~++ً3٣6>3ɡ+|;~+ ;~+٣án>2t +266áqs~0+2+6+<~26+z|vxËT2>2u " *&0T2&-SI>~9~@&GI>~9%&GI>t9 &[z&"2&ËK9~!>K9~K9~FI( ?n,+@C+K+Z+,@ n,+>C+K+Z+,_^n,+~C+K+Z+,n4;E$jn,+C+K+Z+,-@n,+a.i.r.I&&&&&' &'&&&'&'& '..s:S6_S[WPċ]'X_..}''#(((1))*H*H*A*H*H*H*H*H*>`.tb& sW`&t sB؋_ÜR&ZPBJX&ם_Ëà s`&tb&%Ë`&b&Ëb&%RP&XZÀ>`.tVb&3^Ü`&2Su1R&ZPB&CJX&[םPB&CJX[םË`&b&3tt&'%CG&'<t%CGÜRP&XZ&'%CGV>`.t&5b&&E^SR3&&]p&]Z[^RV&< `&b&s&D&d%t^Z&DR&ZSQRV؎u&Pf&֋d&VQb&Y^tu&X읃 r֋d&b&: t@r^ZY[ËQu=HTuAf&f&2틽d&&GCY^&UF؋~F]..\.UF~؉F]Ë>v@ؾ4&4r %wtt `tr،Ȏ@>&߸2Ī &&&@>&&&\&`&% &À>|wnhzY|s.>q>>>~,+t@.+> u@6+ã0+Gú\&m>z~9\&6z>.+W >z~ >.+>.+.+z\&&غ&&&=ËzU6~>.+.2+A行+4+nڎ~ .GH.>t<.6...FG.64+.u..~.4+.GH.6.+.>0+.FGH]U6.+>~.2++n؎.~ .FH.~ .FH.>t<.6...F.F.u..~ .FH.~ .FH]À>`.uA+B+ 7+9@+\&n>,+Ë>,+&7+ ^>@+>`.uA+B+|Mz>js.>q>>>~,+.+6+ã0+MUy.z~6>.++v@4+T0v&%$s2ĪM~ >4+]33333333333333333 333333333333333Ŀ Unisys Corporation Mouse Driver version 7.04c  Copyright (c) 1985-1991 All Rights Reserved $ Installed using IRQ . $ Already installed. $ Not installed - Mouse interface is not responding. $ Disabled but cannot be removed. $ Disabled and removed from memory. $ Cannot be disabled. $ Driver re-enabled. $ Not installed. $ Options updated. $ Can't switch to another port. $&Z/\/Ȏмk6S$>t /^// !/[>/t}>/tC1]/rs >/t  35!3:%!3׃>tF>\u^(w0a0 !^/\/Ћ&Z/Ã>/th233/ t ;\t\" 33 u/ t ;/t8l/\" 33/\$`/\$/k1?|08/>\u0$>/t,1>\u|0|0 !>/uV1!$\/Ћ&Z/P\ӅuXSȎظ3ۍ>/<u /Ë/&Gt `.&ut[53! uxK33 tl>G&:Eua<u3ۋ" 33bdf%3&h-3>t 3/33Ë3RQSbdf3[YZV6 .3-3_ 4,4-4/4 4 5 5s5h65vI5d\5o5mr5n5b5&w؋ O;s<t< t < tt %!u&!"!$ÌؐEUVW3۸$3r33 t0!< r 65s (+r rr LPSW3Ǹ / tSW>_[XVW_^N_^f]MPSQRVWU؋s&袛0 t'2܊ д&İ Ę t ]_^ZY[X  >@3&9?tCC&9?u&'UU Ë>U2U$u>UU A I@&?  ,. t+.&"r(Ê&! !"܋>UPUPP`UUP2UUPGs/ @s(UXUXUXUXUX 2&!" !ÍU@&l&:lt&:lt&lu&:ltUUt3UM&lu &:lt&lu &:ltÍ:uPSQRVWUB JB옓JB옑JBİJB$2ਠu' t Ę t ]_^ZY[XϨtu tǀu뻺>:t:t .u::u:uR!Zr#wt3$3u) t%<u tiע>!P!PBt!  "2"t( ""t2ۊst`uaP 栊 "2"t""t Xri׈> X!@3> t > u&FHBqËBF t@ËH&Zu&BPSQRVWU؋>U>Nt6O&D&&LHȇװװȇװȘװ @t  2䓊 t ]_^ZY[X   <UUUU:u3:.>." X PNXÃ<rUt$3u t ՀVVFNu~uF@3!  t > u&JLWWINËJ t@ËL&zu>NuWWRJ t ]_^ZY[X  UP ؊F fF X]r?&Gq..@.."l0}2 +7áVWQP t2rX3q> uRwZ>,t X33NXP%X y8>+tVWPSQ=Y[X_^u*>+tPS=[Xt 33ҳY_^ˢ6ZWs>,tQ&Y=@r >5u) t)3ۀ>)t@;5s5+3ҋڋ>A6&&D VDISK3&ft$.> 't,,Àt t ...5`cFFFa.PUFF ~]XXt `a<@u;jt!>&t>)t;3r &23& t &23>1t 5 t 12ó3>1t P t 12ó3Q>'u%;>/t u!;u /2Yó3Q>'t4>/t4;S>/u t3 u;u /2Yó3.>+tl.>+tˀQ.>-t'..%x|3H@t@2Yø&\&;Z}&;T`&T`w&\^&\ó33ó3ø&\tH&;T^t&\ó3 t pq3ûO .@3ɊO.-Ot..w:u .>u:O+8.>_ t0R ! t!C.>.t,!..0!.!ZW:THE Hm N6 M A S I C at35246789101112131312141516171PSQRWVU>&] t~ 3 > &E]^_ZY[XNVZZ&& & D!0!<s`C/u ' !6sJ>t t !k=@sPZ&&&?u &G& Gu 8 u, ! !3>&E .&( !Iȹ= r- ZÎ3iONZ3h&"&D$=t=ð%pq tt03COMPAQVWQ.>Y_^ZDS CORP_=s/7? uZ&>&&=t &E&E>&E&E&E&c &e D&D&| &D &D&D&D&&DVW_^&|&D &D t &L&D&DW?t uh>3ҋڋ>A-t 3&D_W&| &D &D&Dt &L&&DVQ(Y^&D s&D_Z&c &e Ë>Q&Y>&u/rKtAu^DuY}svZ&&&?u&u&t ?>t#n&G&W&)G&_r&G& Gt&t &G&O&c &e  HIMEM: DOS XMS Driver, Version 3.07 - 2/3/94-VPC-R2.0.0 Extended Memory Specification (XMS) Version 3.0 Copyright 1988-1992 Microsoft Corp. $ Shadow RAM disabled.$ WARNING: Shadow RAM disable not supported on this system.$ WARNING: Shadow RAM is in use and can't be disabled.$ ERROR: HIMEM.SYS requires DOS 3.00 or higher.$ ERROR: An Extended Memory Manager is already installed.$ ERROR: HIMEM.SYS requires an 80x86-based machine.$ ERROR: No available extended memory was found.$ ERROR: Unable to control A20 line!$ ERROR: VDISK memory allocator already installed.$  XMS Driver not installed. $ $ extended memory handles available.$ Minimum HMA size set to $K.$ Installed A20 handler number $.$ Installed external A20 handler.$ WARNING: The High Memory Area is unavailable. $ WARNING: The A20 Line was already enabled. $ WARNING: Invalid parameter ignored: $ 64K High Memory Area is available. $This program is the property of Microsoft Corporation.ۦi z2> u(ˊ)Q uYQ uYPSQR.;r%.;w.+3ҹ u .?uZY[X&Āu QuY-ĀuQVW u3.. u.?u .;Ww u.?u tu u2 tA u9.D .D.E.D+.E.u..ָ2_^Y˳3QRVW se.|u`..|t3..\.D.>..=u.U;t.U;t 2_^ZYˇ.T.U.T.볳3ĀuQVu^Y˳3ĀuQRVWUrӳs9.|u0.;Twjr 2]_^ZYRZ t.D+.T.F.)F3.>..=t .D.E.D+.E..E.TRZ t$.+D.;Fwt .)F.F.F.Tk t.E.D t.F;v.t t .F.D.F.E.D.t.E.D.E.D&w&w &G &GX.+Dȁ%&G&OXȁ%&&OVWR]Z_^.M.L.D+.Tt.T.U.E.3VR9Z^ t.E.D&w& 3&O &O&O&O.Dȁ%&&OVW_^.D.E.D.D.E.D.L.M]_^YYW.D.T3..V.?u.w;u u.w;u u ^ÇېUSR3FFF&F&LN A\urbFV^\ dr]FV^n^rJ. =uB.=u5^ t.O^ t.OZ[~tH^]ˀt^V&w&& t/.tO.G+rD+FVr4.G.G^ËǺƃv~wr߃vڳ·ې23v^~V𴇰...Υ.6Х..G.O..W..GËЋ3...?u uFB.?u<.G.G;r0.;Gr&.G.G.;wv.w;s+. u t.E..u.UĀVWfPfQfRf=vfvfZfYfXƋ_^ĀbVfRfWfZ^Q uYĀHQuYĀAVWfPfSf3f[fX_^QuYQuYQuYQuY.fD.fTf3..fV.?u .fwf;u u.fwf;u u f^UfPfQfVfWS&f fNfn&\&fD^fF&T &f| Vf~VPVW. _^=3Ɏf#.f6&gf4.ffNfgfgfggfX.f&gf4.=u&[f_f^fYfX~tH^]˳t^&f& t,.?uG.fGf f+r=f;r0.G.fGf ffffffff=v೧UP uB9Fu;~jt~su-. "^Î$"l3؎X]X]..fNfQf𴇰fY^f)NffNfN2.fPfRfVff3...?u uTP.?uJ.fG.fGf;r;ff.f;Gr..fG.fGf.f;wv.fwf;sff+. u t.E..fu.fUf^fZfXt@ۦ}.>}ҠޠA/ u3m%+Z;v u.6ZZ Z+&Z¾.+G&6&+&>6|DDX tAN&&+&-.쫸J3/.9ww.쫸J/t  ]^_ZY[XW.쫎Z_+++Z>6|D&u&&@&H&ԥ&֥˜X PXIJJJKJLJMJNJOJPJQJRJSJUJVJWJXJYJZJ[J\J]J^J_J`JbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJyJzJ{J|J}J~JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKMZ ZPT ) <GEMMXXXX0 sssssssss|ssssssss.:.8PSQRWV.8&G2.%&G&G&G^_ZY[X,} *QIfGClwUVWQP؎X@rw.XY_^] in int 67 P t9r򯱅uOOׁ)Dž뱱xP%;sru;sڋA tӋYQ>;v P<Xu PnrGW_u> tPXtDžǕ3DžPSr3u[Pr. t'W> x ;sG_DžmkP3۾=tCQPrٱAP3۾=tCP-XVQY^3@=t[GPW@_X}PX uuu urǝÁǝ3 t PF؋FXPFFX u(u\u;w#PS;v [XY VPX^[XPSRk:v Z[XY%Ȭ=t =t;sZ[XPXrg&"QW=t=tA& tCP&>"t &>;vP<&XX_Y⥱_Y<v"P"uPirA u.N)s +ٱ@DŽ"WDŽ ,tv~PrXt t<vcPrXP uW_st\S<v'uG tPr ױ)PS=t"->>>>Ãӊ[X<v"PSkPP&"P^[X uF^[<vu"PS...&"حV؋ t^[o^&"P^[T<v("PSRح=sIPX"""<w.t,ЭRZ PX""rZ["r"""" u u"""""<t""PP"rࡢ""""ZX<‹ZX36"6"3Ɋ"Q؋ZY[ us sKt7s&Fs&FFKt&FF6<vu __^]PU.+@=t- ;u3ūEX]<vuPC<v]P<vO u>""u t\YY^^]<u+u@P>"""u t %<u<t<ut <vud""7>"u,>"u%P6X"P@@3ȉ"X ""__^]π>"tY;"u;"uÀ>"rǕÿֹu=tu池 tP X%. .& ȎА; .8w< t*< t%<t < t< tF< t < t<teg%!. .& .8&G"&G&GAV 5^PQRS&;t:&=t0P&& X&=u3% [ZYXin remap PC page = EMS page = PR&&&&ZXF< t< tQS3ج<0r(<9vTOOLENTRYCLIENT23?TOOLENTRYCLIENT24@TOOLENTRYCLIENT25ATOOLENTRYCLIENT26BTOOLENTRYCLIENT27CTOOLENTRYCLIENT28DTOOLENTRYCLIENT29ETOOLENTRYCLIENT30FTOOLENTRYCLIENT31GLIBMAIN  KERNELUSERTOOLHELP ??c&?'?F'?e?=?g#?$? ??$?%?)?*?.??)?"??$?#?:#?T#??E ?z??.?]??n%?| ? ??$?B?`?~??????2?P?n??????"?@?^?|??????0?N?l?%DLL for CTOS Request Kernel Interface ALLOCEXCHCHECK DEALLOCEXCH GETUSERNUMBERINITCTOSKERNELUSERREQUEST REQUESTDIRECT VPCVERSION WAIT WAITP MAKECTOSALIAS FREECTOSALIASGETSYSTEMUSERNUMBERQUERYDEFAULTRESPEXCH GETPSTRUCTURECHECKCLUSTERCARD GETCTOSRQINFORESPOND GETLOGINNAMEGETCSLOGINNAMESETCSLOGINNAMECTOSRQNOTIFYREGISTERCTOSRQNOTIFYUNREGISTER CTOSRQTRACECTOSRQSETWAITHOOKCTOSRQREMOVEWAITHOOKCTOSRQISWAITING GETSYSTEMEXCHWAITLOCK >VWQV3PQw3+ t @p&0!tt؎ w#>^˸^Y_^ˌ؎VW_^ËFL!XEUVW>#uvPt+X_^]MPUF]˸׋;t&?t&O2;sӃ;t&?&t&_&Wô׋;t&?t &8gr&gӃ;t&?&t&_&WEU؃^ ^FTPF Ft FVFV u>Rt 6R,3f]M$>Rt f]Mr f]Mj"vvI0R>Ru7>u0jvv,R>RtP1,j"vv 0R>Ru3۸f]Mjjj6R +3f]MEUpVWV v6DF6DF u FPV>Ru 3_^M ~`j FPv/Ӎv3+ۇ؋،؎Q3OY~i3OjFPv.Ӎv3+ۇ؋،؎Q3OY~|3OjFPvW.Ӎv3+ۇ؋،؎Q3OY~~3OF=tyw=t=t;=tW=t>=tl=tvtcSB1 ~ؾP3+P؋،؎Q3OY>Pw3I^NF=urw=t%=tR=u^m=tB=u=tXF FuY>Pu3Pvvvv 52~jFPv ,^v3+ۇ؋،؎Q3OY~3OjFPFP(,^v3+ۇ؋،؎Q3OY~3OjFPv+^v3+ۇ؋،؎Q3OY~3O~jFPv l+^v3+ۇ؋،؎Q3OY~3O~jFPv +^v3+ۇ؋،؎Q3OY~"3O~%Ovv~IFvP`~43O ~7 3INjPP6R%vh6RU-3_^M U(VWjFPF P*^v3+ۇ؋،؎~M3OjFPv)^v3+ۇ؋،؎Q3OYVF_^U2VW~O󥤋~X3Oj FP^&PJ)^v3+ۇ؋،؎Q3OY~i3OjFP^&GP(^v3+ۇ؋،؎Q3OY~z3Oj FP^&GP(^v3+ۇ؋،؎Q3OY~3Oj FP^&GP6(^v3+ۇ؋،؎Q3OY~3Oj FP^&w'^v3+ۇ؋،؎Q3OY~3OjFP^&w'^v3+ۇ؋،؎Q3OY~3Oj FP^&w('^v3+ۇ؋،؎Q3OY~3Oj FP^&w &^v3+ۇ؋،؎Q3OY~3OF V FV^&V ^؉V^~3OFa~3OjFP^&7"&^v3+ۇ؋،؎Q3OYFF^&;F~3OF~3O^&w&7FPj^v3+ۇ؋،؎Q3OY~ 3OjFP^&w=%^v3+ۇ؋،؎Q3OYFF^&G;F~4~3OF~%3O^&w&7FP^v3+ۇ؋،؎Q3OY~*3OjFP^&wU$^v3+ۇ؋،؎Q3OYFF^&G;F~4~13O~ _^EUv vvj]MEUv vvj]MEUv vvjb]MEUv vvjD]MEUv vvj&]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvj ]MEUv vvj r]MEUv vvj T]MEUv vvj 6]MEUv vvj ]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvjd]MEUv vvjF]MEUv vvj(]MEUv vvj ]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvj]MEUv vvjt]MEUv vvjV]MEUv vvj8]MEUv vvj]MEUv vvj]MEU؃F|1F~uFFf]M˸EU؃VW4 u_^f]MF3=t5DŽDŽDŽDŽFuj6>:t> v 6_^f]MEUV~ vjFhShD hh t4D 43@D u^]M u=t:m6D h t4^]M EU^D &3]MEU VFFFF?t`}?1NVF F u!^&^ &^&^M TCFV^N^F&^ F&^F&F^M EU^&&G&G&G&G&G&G &G3]MVW3о9u GD u | _^_^ˋ_^˸EU؃t؋^&3]M]M^&#]MEU^&3]MEUa؃t؋^&3]M]M^&#]MUTCVFUFTCVF3øEU؃VWFFF3ɀ>4t _^f]M˃~ }5F <uu~;FuFFFD uڃ~t _^f]M˃u _^f]MˋǺV؉߃v.Qhh6PǻRXXjhh6PǻRXXjAhh6PǻRXXjhh6PǻRXXjhh6PǻRXXjhh6PǻRXXjIhh6PǻRXXj hh6PǻRXXjhh6PǻRXXjhh6PǻRXXjQhh6PǻRXXjhh6PǻRXXjhh6PǻRXXjhh6PǻRXXjYhh6PǻRXXjhh6PǻRXXjhh6PǻRXXjhh6PǻRXXjahh6PǻRXXj#hh6PǻRXXjhh6PǻRXXjhh6PǻRXXjihh6PǻRXXj+hh6PǻRXXjhh6PǻRXXjhh6PǻRXXjqhh6PǻRXXj3hh6PǻRXXjhh6PǻRXXjhh6PǻRXXjzhh6PǻRXXj=hh6PǻRXXj uǺLJ_^f]M6PǺX u$ǺLJ_^f]MˋPJ t _^f]MˋǺLJLJDŽ3_^f]M3q+i#aYQ IA8u؃t؋33˸EU؃q؃tWȋ؋FVF FtًFVLJLJVFf]Mf]M33f]M؃tLJLJ3˸#˸؃t؋3؃t LJ؃t LJ˸EU؃VV ~t 3^f]M u3ɾ9t AD u | 3^f]MF؋ t 3^f]M^F V^f]MEUVV u3ɾ9t AD u | 3^]MLJLJ^]MUVW~F<>>t@>BtD>F FFǺ؋ tv vvF~ u{BǺ؋;Fu[ǺǺǺLJDŽDŽDŽDŽB>F_^U VWFVFV3FF3ҋF Ft`^&V^؋v&DR؃ XF^3'^&W t9VtR;~t ~WF^&G;_^U VWFVFV3FF3ҋF Ft`^&V^؋v&DR؃ XF^3'^&W t9VtR;~t ~WF^&G;_^øEU؃VFtS}01NVF F uTCTCFTCF^f]M˸EU؃FTC^F3f]MEUvv]MEUظ]MEU؃FF Fu f]M^&u)&G;D tFvP t #f]M>Ptj^&wjvSvvTC^FFf] MEU؃FF Fu f]M^&uFvP" t #f]M>Pth^&wv vSݹTCV ^FFf]MEU؃WFFFP t #_f]M>PtjvjvvݹTC^V~FF_f]MEU؃Vv FFPL t #^f]M>PtjvVvv-ݐ t ^f]MVvv^f]MEU؃WFFFP tD F>Pt*jvv vvTC^V ~F~t^&w&7BF_f]MEU؃Vv FFPW t #^f]M>PtjvVvv8ܐ! t ^f]MVvv%^f]MEU؃WFFP tF Ft^&#_f]MF Ft^&TC^~F>Pt!jvF Ft^&3PjjۋF_f]MEUWFF Ft^&TC^~ FF_MEUWTCV~3_]MEU؃WFFFP t #_f]M>PtjvvjjڹTCV~FF_f]MEU؃WFFFP t #_f]M>Ptjvv vvtڹTC^V ~F~u^&w&7F_f]MEUVFPjjjj~u v tFPFP^MEUVW33VF u #_^M^F=t~u0v vv=u t(/@뺐_^MEU؃VF: u ^f]MTC^V v F~u$^&w&7vS4 t ^f]MF^f]MV3F @Fu^øEU؃VWFF FFVFF: u_^f]MF F uF?F؋F ;FuH FJ }F u F uFFF~rF;FsF1raF ^TC~1rNN` ^~1r=FV؉F FH DŽJ ^F&GF &3_^f]M_^f]MEU؃VWFF: u_^f]M~u 3_^f]M3ɾH ;FuJ AHuu_^f]M-؃J uDžH DžF 3_^f]M^1s 3_^f]M_^f]MUV: t83.؃F u^H tH F^1Ar^U> uFF3]UVv uF>uԃ~u uvY^]U3PPv]UP3Pv]3PP3PøPP3PyUVv |X~W6LN ރ0L6^]UVvV^]UD^!%]U"VW~ ^$w\rWFN }~t &-G؃v+6F +6F uNN6, s:FV F _^]U3Pvvv PPaPb]U^で BF ^NV!rP]Vt^ù;s8LJ ƇPXA;rȠPY u&Pt3P33PRPt PY u&Pt3P33PRP< U>^!r LJ 3P]UVfNV !rF P^] Uvvvu~u>u ~u^&?tP33PRvS~ ^&Gt &w &w(YY^&g&GFV&G &W&G&W tX vTT5F F uVYV F uK^&O>^F V&G&W &G &W&wu&O3_^]UVW~;>r P'F @=s3 tP33PRW @uv vvWで FVFVF FsN^F&F< u ^& F^F&FrV3+Ѓ |Bur:rv3+VPWn;tuOF +FCrVF~tzrv3+ v"VrPW!;ttF +F _^]U^ tPH>t vY tv vvF $@^N V!rP^く XP]UV^F^&Gt vS|YYNF u^]EUVW~v NsڋVF_^]MEUW~N F t Is_]MEUF Pv vvVF]MU63PvT]U63Pvvv- ]U63PvPvg ]U6vv]ÌڸRP‹XZW3&&E&E_EUVWWF~&=&5&u_ u~&&E&E_^]MEU VFu*$uFrF~ t F~&=&9E rr&= uF=wiP3Ґ‹[ tdv4&5&] t|DvD444f49$4/4_}4j`J I3 Id3]Z PI&3n I3P I32 Il3eb XI.3'$ I3 I3 It3mj `I63/~, "I3` I3B I|3u$r hI>374 *I3  I3yv mIC3<l9 0I3N I30 I3 vIL3EB 8I3 I3 I3 ~IT3M|J @I3^  I3@ I3" I\3UR HI3  I3O!49!J $X $F 4$4^4P1(J1(/41(1(4>1(81(Jo%`$`$`$`h#`U#`;#`#`"`"" "!)`)`t(rj(qZ(G(m'`G'`d&`%`*`9!939>9C9J9T9::::Borland C++ - Copyright 1991 Borland Intl.\CTOSRQ.TRCUserNum=, Calling Address=: Request - RequestDirect - Wait - Check - AllocExch - DeallocExch - Respond - ERROR - Exch = 0x ppRqBlockRet = : Exch = 0x Exch = 0x pRqBlock = ERROR - Bad Call :RqBlock: sCntInfo = RtCode = 0x nReqPbCb = nRespPbCb = userNum = exchResp = 0x ercRet = rqCode = CntInfo: 0x ReqPbCb: pb= cb=0x RespPbCb: pb= cb=0x CTOSWinAppTOOLHELP.DLL()+++  CB ```@),(((((),(((),#,*((((**#(#%(-6H\4VS_VERSION_INFO ?$VarFileInfoTranslation StringFileInfo040904E4 CompanyNameUNISYS Corp.?+FileDescriptionCTOS Request Interface DLL for Windows(TM)4$FileVersion0.9-CTOS/Vpc 2.0 and CTOS/LANce 1.2InternalNameCTOSRQP<LegalCopyrightCopyright (c) 1993, 1994 UNISYS Corp. All rights reserved.cOLegalTrademarksCTOS is a trademark of UNISYS Corp. Windows is a trademark of Microsoft Corp.# OriginalFilenameCTOSRQ.DLL*ProductNameCTOS API from Windows(TM)ProductVersion1.0MZP@ !L!This program must be run under Microsoft Windows. $NE   F@ 6P < P< PP q rq rq 'q (q )`q ` 4p CTOSAPIWEPLIBMAINCTOSRQKERNELUSERTOOLHELP????I"DLL for CTOS Request API InterfaceINITCTOSAPIUSER RQINTERFACE>VWQV3PQw3 + t @p&0!tt؎ y#>^˸^Y_^ˌ؎VW_^ˋFL!XEUVW>#uvPLX_^]MPUF]˸׋;t&?t&O2;sӃ;t&?&t&_&Wô׋;t&?t &8gr&gӃ;t&?&t&_&WEU>( u(FV(3]MUVv u"((>(u*~u u.2vY^]EU3PPv]MEUP3Pv]M3PP3Pw˸PP3PkUVv |X~W6 ރ06^]UVvV^]EUD^!%]MEU^でBF ^N V!rPy]MVt^ù;s8LJƇ:6PXHA;rȠ:P_Y u&8P8t3P33PR6P` NP#Y u&LPLt3P33PRJP$ EUVF Fu^&G;Ft^&?|Q&Gu&GV;Ft&9W uy^&&GV;Fub&9W u\&G &W&G&W JH^&G&@&)7P&G &W&G&W PR&GP;t^&Gu&OX3^]MEUVW36^F6^&Gt vSYYGFN uދ_^]MUV^&?} &O&A^&3+‹ȋ^&G@uC^&G&W FV&?}% N^&? uFI u^F&? uFI u^]EUVvvvWYY t`u^&?~vSK)F V ^&g_&&G &W&G&W Vv v &GPu =u3^]MEUP33PR^&GPVFu=u^&?|&GtcP33PR^&GPVFu=t`3Pvv^&GPXu =u4FVFVvv>FVvv,)FVVF]MEUVW~v NsڋVF_^]MEUVW~v^&G;Fu v>Nu~JuN>Lu ~6uL^&?tP33PRvS ^&Gt&w &wQYY^&g&GFV&G &W&G&W t` v\,*F F u!VYV F u?^&O2^F V &G&W &G &W&wu&O3_^]MEUVW~;>r PJ/F @=s3!tP33PRW}@uv v vWでF VFVF FuN^F&F< u ^& F^F&FrV3+Ѓ |Durrequest.sys Unable to open request.sys. erc = %u. Unable to read request.sys. lfa = %l. erc = %u. GetFileSize returns erc = %u. Unable to read request.sys. lfa = %l. erc = %u. Unable to read request.sys. lfa = %l. erc = %u. Unable to read request.sys. lfa = %l. erc = %u. CheckErc: erc = %u. ReadRqSys failed. erc = %u. 6 J^CrB```),(((((),(((),#,*((((**#(#%(  \ ta=" b f & j n rw* . 2 6  : > B 2.* NOPQRSTUVWXYZ[\]^_`ghijklmnox !.;<=cdefghijkrs   ?0@0A0s##sSa''ahas Qq''''S''h                                                                 ! " #       ' % ' '  & !'  ' $' '  '  (    ) ( )*   *+,-. /0+ 12345, - . / 57 0 1 2   $     4CIWcCoo|o):):):)MCXdXdlM{{MMCMMCCCCC";L_xC CC&C11BCK^nd{;L_  $0CC8CCOCZamCCcCc 'C3ACCPbC'htoCCCo-CUUU^j}CCOOCOOCOCC )C=UfwC COCCC C)CC=XJJddWdKK{kz CXdC   Wh! - 8 M b k XICK WM W X   || * UJ1 CZK g '   - > W W ^ n X C  oC* ; U c u C !  | ZW C CIO5 F W i v M  C C|   *:FZCjjjjjpwjjjjjjjjj(/6;@GLLSZ_fmt;SLL;jjp;j$-;;;;j2;JjjR.BVj~                                                      JFFG`lr <0_0`0FG`lp _0`0  _0`0s $  $ "$ % #$       0."  (  & (  &,* $ " "  $ * $ "" " .  "  ,*$6(4$ "  $"$  $ "$ ""  $ ": $ $ *,  "  $ ( &  "  & $$     $ "(  $ " $ $ $ "  $"$ "* (0"(0"(0 "($ " , $*& $$ & $ 0"(0"(* ($ "0 (. $    .  &,$ $  &  $"   $  $ $$$",2$ $  ..&,. ,$0   $   `4VS_VERSION_INFO ?$VarFileInfoTranslation StringFileInfo040904E4 CompanyNameUNISYS Corp.9%FileDescriptionCTOS Request API DLL for Windows(TM)4$FileVersion0.9-CTOS/Vpc 2.0 and CTOS/LANce 1.2InternalNameCTOSAPIP<LegalCopyrightCopyright (c) 1993, 1994 UNISYS Corp. All rights reserved.jVLegalTrademarksCTOS is a trademark of UNISYS Corp. Windows is a trademark of Microsoft Corporation.$ OriginalFilenameCTOSAPI.DLL*ProductNameCTOS API from Windows(TM)ProductVersion1.0MZ@ !L!This program cannot be run in DOS mode. $NEN*@`x. 04p40J` a '0 COMMWEPSYSTEMKERNEL???2?N??????#?C?_?{????F ?G ??sO??&Windows Communications DriverCCLRBRKSETQUETRMCOMSETCOMCSETBRK COMMWRITESTRINGSUSPENDOPENCOMMPORTSENABLENOTIFICATIONdCTXCEXTFCN READCOMMSTRINGCEVT CEVTGET RECCOMSTACOMSNDCOMGETDCBCFLUSH REACTIVATEOPENCOMMPORTSINICOMPSr&t&u&t&t[XEUVWؠr@؁>u>83Ǹ/>,. t,8h$<u_1tUP PPX&؎ظC1sJ&&J\& t& t t&;GuDdPPKP_^f]M3'WP.&}d&E&EX_r_U&} ~F]_˃W뼃W4W몃W"W똃WWv놃WvWP&}dX_r_U&}~F]_VPSƎ޷ut&t3E|dE$ ؋t( uu" y33&]&Y$ut&D[X^ x t&E*&E,&E.Wh=&u&u&=_=u. u&< r =s@RQ!& r<s!u "XtYZYZQRRSQWt.TR˞fM2>4tDburfVft^f0f^RTuTSQWL.Q#|JtZRJ$ Zu %R.D,#D.D.[D!@t#u _Y[2Z$øL.tD[tL.@돀d!d[ t "dRdD[L.LD;L8}DP utD t DcL"DSuD uD u :DuLP D t::DuLUD `t;LwdUdUD:DudUD `tdU:DuL.Dcu\d_x0\H&C;\8r3ۉ\HALD;L*r-DUu'dV t"ĀLUD t LUD-;L"rD!u~Pd!ZRtc tZRu  uL tdU`uD `utDdUmtDP@t dPDTLJD @tL\;Lu D\LUAL\&D t L\ uD\LUDPA;Lu3ɉL\\d_x:\L&C;\Br3ۉ\LLJILJ;L$sD!u Pud!L.B$tDQ%8 D.% D.% D.% D.DW t ":t LU !dU_LJ D |d؎(VU&m&[$]^Íu؋DPDP3P2PD D!Pء t8VV4s"|"t|DtD!ut!x PQzYX^FF ^MKK0 K68K|L USERxKB]TofThe LPT? port is currently assigned to a DOS application. Do you want to reassign the port to Windows?The COM? port is currently assigned to a DOS application. Do you want to reassign the port to Windows?Device ConflictCOMBASECOMIRQCOMFIFOCOMFORCEDSR386ENHSYSTEM.INIؐEU^f]MؐEU^f]MؐEU؊f ^rf]MؐEU؊f ȴu@f]MؐEU؊f ~N u3f]MؐEU؊fF f]MؐEU؊fF< f]MؐEU؊ff]MؐEUVWf ^_^f]MؐEU؊f^`f]MؐEUVWf~ _^f]MؐEU؊f^ff]MؐEU؊f^`f]MؐEUVWf_^f]MؐEUVWf_^f]MؐEUVWf_^f]MؐEUVW3N f ~ _^f]MؐEUVWf ^ NV3_^f]MRP ZW3Ǹ/_E E3PQ>"u9PPRP "P4 P =À>6|uW$_u686W3$s1uϺ$_À>6u3Ɋ $f`>7|u(,t (= s7E7Esu: 1-& u#(rf>04f\^D uTZfaD3Ɋ b(À>7u 3Ɋ (À>7u3Ɋ ( uDbWߎǍ|dKrK3s _WߎǍ|dK_VW&'r8|;؎|dE4D2E6DtU1\Zހr߸1U MU$Q1|dE(@YM*D6[D6D@wD@It[Y_T3B$|D3DUDcD.DbD$HD"tLPudP3D_^PXVW3r?x5PLcLLD`DUuLJ9LJu+=0urXT_^ yB$`<`u2DPtǀ9 2$`<`u$02JQS>8|؎|d,|&MuMEt"P1\ZހrߋU M1Xt.U%!M u3D(9ut]9w(t_(G(E[=Y3Vjre@t ;L8rL8 Bt J;TBrTB \D!@ u 3D!L"T$L!>u9P`PnRPl^VWr(x&|03_^VW&'ry Z3 _^rTB31<LĉDXPBB dS d DRwBBBXBD $4 D $"ĈDVD $0DWD8+DD*DPu4D=r,u=r"DPuLPt@u LP2R*ZRZ+=rDQR3PZu'dWDQ":t0uDPu <u߈dWLUQ  Y Q !YV^33$I&9Ou &9Ou &9O u `0 R&O3srȸZÁwSف. [&GwN u<w:,r6t &g x#t tyu$R&OZøøˌؐEUVW5T t_^f]Mˀ@|JtXV3 rƌ^Q̃xw񋴘w(Y YV3,0r< v,r <v ,*r  <w ݋^6hhWWjhюٚ thhSr2>[QhюٚÊ1,hhjhюٚm =w rLPLPhhjhюٚ  tLPSQ1&&&&<s 2& u u u$P1X tw2PR[ZXY[ PQWv%t}t r:să$ _YXVW>ryD `tDUtNDUtFDD;Dw>TdVLU t D `t tt QLU3 Du> DDt(|0\F&C;\8r3ۉ\FLDLD;L"sd! _^D u DDP u33_^VWry 3 Du DDt;vQT8DF+;vч+V\0+^Y\F)LDDD;D"sd!D `tDUtMDUtE;Dw@TdVQLU t D `t tt ILUY _^D u DDP u33_^Vr$y2 t@и@DP@u 3^VWr9y20PXu0LB;LJ~$|:\N&C;r3\NDJ@DJ3_^ÀLDQ8ry YX+YQuTB+TJ~QQ;vQVW\:TB|N+;vч+^+׋ގ^[TN\JGY+u X+9LVWr!x|D u2 tWD_^ÀLP@dTDbuTu Ns3DJD\DLDNW3 2DQ"DX2DXtNs;|r΀s;| r@s;|r u>t SW3ɺ_[G2D _V3r x\,D.^Vrx D.#؉\.^VrC t833 x#DQ"DW2DWdU ĊdP` ċLDTJ&&O&W3D^ù@Vtrx lULUT" D^ëVW6r#Tyu w 2.brD3_^ÀLUÀdUtÀ À$À À$ø3ø3T t9tBBRS![+=,vZ JJPWR)ZB$4HJ$4H:u(u$tĀuPRJZ[+=,vǁL_YK_XBB B$4H$4H:u%9dÁL$4H$4H:u(tuÀËTBQ r8t9lr+u :ltt"&GJ JL %9dX+ ' } 7 /2)eb4VS_VERSION_INFO g g? ^StringFileInfoJ040904E4'CompanyNameMicrosoft Corporation(FileDescriptionWindows COMM DriverFileVersion3.10InternalNameCOMM;'LegalCopyrightCopyright Microsoft Corp. 1991-1992! OriginalFilenameCOMM.DRV9)ProductNameMicrosoft Windows(TM) Operating SystemProductVersion3.10$VarFileInfoTranslation cmouse.com cmouse.sys pemm.exe himem.sys echo dpmihost.com ctosrq.dll) echo. echo Creates CDROM directory and copies over the CDROM files: echo (CDDriver.exe CDR.exe MSCDEX.exe and RS486EM.exe) echo. goto EOF :EOF echo. mem.sys echo dpmihost.com ctosrq.dll) echo. echo Creates CDROM directory and copies over the CDROM files: echo (CDDriver.exe CDR.exe MSCDEX.exe and RS486EM.exe) MZ@ !L!This program cannot be run in DOS mode. $NEN*@`x. 04p40J` a '0 COMMWEPSYSTEMKERNEL???2?N??????#?C?_?{????F ?G ??sO??&Windows Communications DriverCCLRBRKSETQUETRMCOMSETCOMCSETBRK COMMWRITESTRINGSUSPENDOPENCOMMPORTSENABLENOTIFICATIONdCTXCEXTFCN READCOMMSTRINGCEVT CEVTGET RECCOMSTACOMSNDCOMGETDCBCFLUSH REACTIVATEOPENCOMMPORTSINICOMPSr&t&u&t&t[XEUVWؠr@؁>u>83Ǹ/>,. t,8h$<u_1tUP PPX&؎ظC1sJ&&J\& t& t t&;GuDdPPKP_^f]M3'WP.&}d&E&EX_r_U&} ~F]_˃W뼃W4W몃W"W똃WWv놃WvWP&}dX_r_U&}~F]_VPSƎ޷ut&t3E|dE$ ؋t( uu" y33&]&Y$ut&D[X^ x t&E*&E,&E.Wh=&u&u&=_=u. u&< r =s@RQ!& r<s!u "XtYZYZQRRSQWt.TR˞fM2>4tDburfVft^f0f^RTuTSQWL.Q#|JtZRJ$ Zu %R.D,#D.D.[D!@t#u _Y[2Z$øL.tD[tL.@돀d!d[ t "dRdD[L.LD;L8}DP utD t DcL"DSuD uD u :DuLP D t::DuLUD `t;LwdUdUD:DudUD `tdU:DuL.Dcu\d_x0\H&C;\8r3ۉ\HALD;L*r-DUu'dV t"ĀLUD t LUD-;L"rD!u~Pd!ZRtc tZRu  uL tdU`uD `utDdUmtDP@t dPDTLJD @tL\;Lu D\LUAL\&D t L\ uD\LUDPA;Lu3ɉL\\d_x:\L&C;\Br3ۉ\LLJILJ;L$sD!u Pud!L.B$tDQ%8 D.% D.% D.% D.DW t ":t LU !dU_LJ D |d؎(VU&m&[$]^Íu؋DPDP3P2PD D!Pء t8VV  4s"|"t|DtD!ut!x PQzYX^FF ^MKK0K68K|L USERxKB]TofThe LPT? port is currently assigned to a DOS application. Do you want to reassign the port to Windows?The COM? port is currently assigned to a DOS application. Do you want to reassign the port to Windows?Device ConflictCOMBASECOMIRQCOMFIFOCOMFORCEDSR386ENHSYSTEM.INIؐEU^f]MؐEU^f]MؐEU؊f ^rf]MؐEU؊f ȴu@f]MؐEU؊f ~N u3f]MؐEU؊fF f]MؐEU؊fF< f]MؐEU؊ff]MؐEUVWf ^_^f]MؐEU؊f^`f]MؐEUVWf~ _^f]MؐEU؊f^ff]MؐEU؊f^`f]MؐEUVWf_^f]MؐEUVWf_^f]MؐEUVWf_^f]MؐEUVW3N f ~ _^f]MؐEUVWf ^ NV3_^f]MRP ZW3Ǹ/_E E3PQ>"u9PPRP "P4 P =À>6|uW$_u686W3$s1uϺ$_À>6u3Ɋ $f`>7|u(,t (= s7E7Esu: 1-& u#(rf>04f\^D uTZfaD3Ɋ b(À>7u 3Ɋ (À>7u3Ɋ ( uDbWߎǍ|dKrK3s _WߎǍ|dK_VW&'r8|;؎|dE4D2E6DtU1\Zހr߸1U MU$Q1|dE(@YM*D6[D6D@wD@It[Y_T3B$|D3DUDcD.DbD$HD"tLPudP3D_^PXVW3r?x5PLcLLD`DUuLJ9LJu+=0urXT_^ yB$`<`u2DPtǀ9 2$`<`u$02JQS>8|؎|d,|&MuMEt"P1\ZހrߋU M1Xt.U%!M u3D(9ut]9w(t_(G(E[=Y3Vjre@t ;L8rL8 Bt J;TBrTB \D!@ u 3D!L"T$L!>u9P`PnRPl^VWr(x&|03_^VW&'ry Z3 _^rTB31<LĉDXPBB dS d DRwBBBXBD $4 D $"ĈDVD $0DWD8+DD*DPu4D=r,u=r"DPuLPt@u LP2R*ZRZ+=rDQR3PZu'dWDQ":t0uDPu <u߈dWLUQ  Y Q !YV^33$I&9Ou &9Ou &9O u `0 R&O3srȸZÁwSف. [&GwN u<w:,r6t &g x#t tyu$R&OZøøˌؐEUVW5T t_^f]Mˀ@|JtXV3 rƌ^Q̃xw񋴘w(Y YV3,0r< v,r <v ,*r  <w ݋^6hhWWjhюٚ thhSr2>[QhюٚÊ1,hhjhюٚm =w rLPLPhhjhюٚ  tLPSQ1&&&&<s 2& u u u$P1X tw2PR[ZXY[ PQWv%t}t r:să$ _YXVW>ryD `tDUtNDUtFDD;Dw>TdVLU t D `t tt QLU3 Du> DDt(|0\F&C;\8r3ۉ\FLDLD;L"sd! _^D u DDP u33_^VWry 3 Du DDt;vQT8DF+;vч+V\0+^Y\F)LDDD;D"sd!D `tDUtMDUtE;Dw@TdVQLU t D `t tt ILUY _^D u DDP u33_^Vr$y2 t@и@DP@u 3^VWr9y20PXu0LB;LJ~$|:\N&C;r3\NDJ@DJ3_^ÀLDQ8ry YX+YQuTB+TJ~QQ;vQVW\:TB|N+;vч+^+׋ގ^[TN\JGY+u X+9LVWr!x|D u2 tWD_^ÀLP@dTDbuTu Ns3DJD\DLDNW3 2DQ"DX2DXtNs;|r΀s;| r@s;|r u>t SW3ɺ_[G2D _V3r x\,D.^Vrx D.#؉\.^VrC t833 x#DQ"DW2DWdU ĊdP` ċLDTJ&&O&W3D^ù@Vtrx lULUT" D^ëVW6r#Tyu w 2.brD3_^ÀLUÀdUtÀ À$À À$ø3ø3T t9tBBRS![+=,vZ JJPWR)ZB$4HJ$4H:u(u$tĀuPRJZ[+=,vǁL_YK_XBB B$4H$4H:u%9dÁL$4H$4H:u(tuÀËTBQ r8t9lr+u :ltt"&GJ JL %9dX+ ' } 7 /2)eb4VS_VERSION_INFO g g? ^StringFileInfoJ040904E4'CompanyNameMicrosoft Corporation(FileDescriptionWindows COMM DriverFileVersion3.10InternalNameCOMM;'LegalCopyrightCopyright Microsoft Corp. 1991-1992! OriginalFilenameCOMM.DRV9)ProductNameMicrosoft Windows(TM) Operating SystemProductVersion3.10$VarFileInfoTranslation COMMAND COM2>[CTOS_VPC20 (. DOS WINA20 3860j$VENTURA r3AUTOEXECBAT {RHIMEM30  ,bAMYHI30 |KAMYHI30 NEW(CnWINDOWS +CONFIG BAK , eAUTOEXECBAK , ZAMYTEST 22WBRIEF &AhMZc 6ȦxxxxxxxxfwQAwx r)'))))_ppppppppppp )))).!.#PSQRVWU.'.&)Xм.6!;3D<v4.^...|.>|s&.6!D.6!D.6!D .1r E.1   $ /dB?VND. }.6!3D D3.4DXD. t2=~. P. G @. 8. t. (X. 3. . < t.< t*< v<,v$ t5.$ /. r". u . . t. T$ .> s]< ~Y<"~ <*~<-t<0|I<9~ &. _^WVЃ w07. N޺ ^_XXXX$ !CD Driver installation OK. $** ERROR - Invalid or unknown switch character. $** ERROR - Numeric parameter invalid or too large. $** ERROR - Missing : after switch character. $** ERROR - Invalid or too long driver name. $** ERROR - Invalid command line form. $ - Driver name is $Unisys LANce/PC CDROM Driver Copyright 1992 Unisys Corporation $ $ - Driver loaded at paragraph $MZi S>?Q## #$#(#,#0#4#8#<#/&0BV$ecr"B  4 T a r    / E J f p     ####)#/#5#;#A#G#M#S#Y#_#g#9 #= #A #E #I #M #Q #U #Y #] #Z #^ #b #f #j #n #r #v #z #~ #CDutilityx1.0required software has not been installed.$the local network Server is down.$CD-ROM Service not installed or Server is down.$there are no available CD-ROM handles.$the CD-ROM handle last used is invalid.$the assigned CD-ROM spec is invalid.$there is no such CD-ROM device number at the server.$internal error in the CD-ROM service.$the CD-ROM drive is in use.$the drive letter has not been assigned to a CD-ROM)$the CD-ROM drive has not been opened successfully.$Invalid password.$Access denied.$Rs422.exe or Rs422em.exe is not installed.$66\\{LOCAL}[CDROM]*AssAssignAListLHelpHErrorErrorsE For more error/status information type "cdr error" $ CDROM Utility Commands: Assign List Help Error Type CDR Help ----- to receive help $ Invalid CDROM Utility command $ CDROM System Internal Error $ CD-ROM Device Assigned Path or Driver Name Status$OK$NA$ Error from the Master (refer to the BTOS/CTOS Status Codes Manual) --- $ Error from DOS (refer to DOS Error Codes) --- $ $ $ Strike a key to continue . . . $ For $, error is $ System error $, "$".$, There are no errors to report.$ No CD-ROM device driver is installed. You must have a "DEVICE=" command in your Config.Sys file that installs the CD-ROM device driver. $ The Microsoft CDROM Extensions program (MSCDEX.EXE) is not installed. Check your AutoExec.bat file. $ The {drive} parameter must be a valid DOS drive letter between A and Z that is reserved as a CD-ROM drive letter by Microsoft CDROM Extensions. $ Local device $ assigned to the CD-ROM drive at $Not Assigned$WARNING - assignment could not be verified due to an error - $ Please check that CDDRIVER.EXE and MSCDEX.EXE are installed and that the /D: switches for each contain the same 8-character driver name (usually CT-CDROM). $Refer to the BTOS/CTOS Status Codes Manual$ 7!YT=U=V=W=X=2Y=XZ=t[=  To assign a local module, enter: CDR Assign L: {Local}[CDROM]0 To assign a module on the server enter: CDR Assign L: {Master}[CDROM]0 To assign a module on a server at another network node enter: CDR Assign L: {NodeName}[CDROM]0 When assigning multiple modules, if you assign the first on L: assign the second module M: the third N: etc. [CDROM] is the usual name for the CD-ROM service. The number at the end of the command (0, 1, 2...) indicates the placement of the CD-ROM module on the workstation. The first module (closest to the processor) is named 0, the next 1, etc. $ Enter: CDR Help $ Enter: CDR List $ Enter CDR Error $k#k#k# # # # ## ## ## # CDR ASSIGN Assigns MS-DOS drive letters (L: M: N: etc.,) to CD-ROM modules. $ CDR HELP Provides information on CD-ROM commands.$ CDR LIST List CD-ROM drive assignments and status.$ CDR ERROR Displays CD-ROM system errors.$_ #_ #_ # # # # #( #( #( #Ub!3F t~]U!]UY3!]UV !]U 3/^&r3]U3/ u3]U3/^&3]U^/r3]UN /^ &^&3] U^ /r3]U^ &_02^0^ &_02^0]؎м~U L!UTP1PPbSt1SP{PP SP}PE SP[P: SP]P/ Ste<w:>Su >U:tSSƇS$>T`v.T TP@P8>@ueFPP1PF< tn]~{t=^]~[t؍]]]÷]P1P#PF]]t]P]PtF];uF^C]P]+FPFPm tFPP1PF< t!P1P PƇFF<H^;r;:u^Fu~uB8fķvFF&|fwu&|QAtbPBB^F&GYFFF4^&P_t,t& VWFVRR4f~؍y]4f~؍y&4N^&H  ^SPPBTPB PB]÷Ƈ]$^PBPB>t7 PBFPPB]UFP1PPFtuFF^;s1PFPPAtF^@FBm^ğSB^ğg SB=F^ w1t#ğSB^ğg SBFuB]U!rB]B><u]˸&PBn<Hn;sdďrtpPBPBnA:$PBPBPB Pr&fwu&QAtr&Gvxp4v&@tv&Hp F4&pv&xu1$PBmf4&pv&pP-P- 3$PB5* )6rt F1$PBpPBntPBt PB]UB|><u]z<Hz;r;Q  &zğ&fwu&QAu &G t|zu>|t_PB6|PP6|~P$1PBPBAPB~SBEPBPB]Ufķ6&|fwu&|QAt&GYPB^A:$PB4&x tZWRR4&&pPA$%PBPBAPBSBEHPB]UQF HN;r'؋C ;V ućE ^&X&GFuθ ^&&_]UQF HN;r'؋ ;V uć ^&X&GFuθ ^&&_]UPP1P u]1]UQF uFtF>FF< t(< t$F9FtF^ v&FʋF]U^&6;r&:FuF&]U^&6;r&:Fu F&]U^6&8t^6&$]U^&;r,&:VuG+ȍ1^8[^&]Uv&8r&:Nt]UQF^&~w*~u ^ &?5wFH^;r6v &<9w<0s%v ^&0 ^&'&F1] U ~FNt-ɈNF 1FV +Ѓ0RFF ù~ u*FF N *r~}F ^&]UQ^ S^Sv] UQQF^9^vov &~&:t\P@P8>>uim<P8P8 u P8>8tPB68<H;r.ğ&fwu &QAuuuv PBPB EćF>Bu1]˃>BuEğg SB]˃>Bu:PB1PPP $PBPB]˃>Bu8sPB66PP$PBPB]˸PB]PATH C:\;C:\DOS RS485EM MSCDEX.EXE /D:CT-CDROM /M:8 /L:L 2!2"2#2$2%2&2(2)2*2+2,2-2.2/202122232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z2[2\2]2^2_2`2a2b2c2d2f2g2h2i2j2k2l2m2n2o2p2q2r2t2u2v2w2x2z2{2|2}2~2222222222222292222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223LASTDRIVE=Z FILES=20 BUFFERS=30 DEVICE=CDDRIVER.EXE /D:CT-CDROM /N:1 '5(5)5*5+5,5-5.5/5051525354555758595:5;5<5=5>5?5@5A5B5C5D5E5F5G5I5J5K5L5N5O5Q5R5S5T5V5W5X5Y5Z5[5]5^5_5`5a5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556MZ" =*}WRW`WWWWWWWWWWWaWWW5W@WKWVWaWoWWWWWWW` WWBWWWkWWLANce/pc R1.1.0300 Copyright (C) UNISYS Corp. 1992, 1993. All rights reserved. ?(This TSR serves INT 7Fh) RS485EM(Installed using standard 2.5K X-Block.) (Installed using 4K X-Block.) (WARNING: Installed using a non-qualified X-Block size.) Interrupt 7FH is already installed. USVLu"9Tu 9\uDLtߺ^[]USVLu!9u 9DuLt^[]USVWؾ 9Lt ;6} 9Lt 3T&W‰T\M ƺ+‰EE L D_^[]USVWLu(\L\ M] _^[]UPSVR|t"|t+\W=uUD -=PsZ^[X]怼u˸CW=tBWD&D&GW3˺W&w怼u/>tW=t3~ u$u u2u 怼t A;uˉ&ƄƄ3ˋ怼t%t t tƄ;}3˸ˋ怼u˸CW=tD&D&GW3ːnul cls echo   Ŀ echo ** VGA Wonder XL24 Windows 3.1 Drivers ** echo echo echo Decompressing . . . w31xl24 /e%1\SYSTEM if errorlevel == 0 goto OK goto ERROR :OK echo  pause cls echo Ŀ echo ** VGA Wonder XL24 Windows 3.1 Drivers ** echo echo  echo ͸ echo Installation successful! echo ; echo echo The first step of the Windows 3.1 drivers is now complete. echo The next step is to tell Windows to use these drivers. echo Please read the README.TXT file for further instructions. echo README.TXT is located in your %1\SYSTEM directory. goto DONE :ERROR cls echo Ŀ echo ** VGA Wonder XL24 Windows 3.1 Drivers ** echo echo echo ͸ echo Installation Failed echo ; echo echo An error has been reported decompressing the Windows drivers. This may echo be due to problems accessing the specified directory, low free disk echo space, or the archive is corrupt. First, ensure the path you specified echo is correct. Second, run the DOS CHKDSK utility on your hard drive. If echo CHKDSK reports errors, correct the errors before continuing. Also, make echo certain you have at least 3 Meg of free disk space available. echo echo If you continue to have problems, you may wish to try manually echo  installing the drivers or contact ATI Customer Support. Manual driver echo installation instructions are in README.1ST. :DONE echo echo ATI Customer Support (416) 756-0711 9am-5:30pm echo  RESERVED ATI Technologies Online README.1ST August 21, 1992 -------------------------------------------------- Introduction ------------ The drivers enclosed is this archive are designed to run with Microsoft Windows 3.1 and ATI VGA cards. Easy Installation ----------------- 1) Run the INSTATI1.BAT batch file specifying the path to your Windows directory. Example: INSTATI1 C:\WINDOWS 2) Read the README.TXT file that is located in the Windows SYSTEM directory. Example: Your Windows directory is C:\WINDOWS, therefore, type: CD \WINDOWS\SYSTEM TYPE README.TXT Manual Installation ------------------- 1) Run W31XL24.EXE with the following syntax: W31XL24 /EC:\WINDOWS NOTE: If you Windows directory is not C:\WINDOWS, then specify that path you are using (ie. C:\WIN) 2) See step in Easy Installation. If you have difficulties or have any questions, please feel free to call ATI Customer Support for assistance.  ATI Customer Support: (416) 756-0711 9am-5:30pm EST FAX: (416) 756-0720 MZy LHA's SFX 2.12L (c) Yoshi, 1991 Rename to W31XL24.EXEOverwrite [Y/N] Broken file WriteHeaderCRC Error!BAT[0!<r6,3u@u"0u6-8غ &h=!sY3ɺB!sOA3ҋ¹s5uֹ,?!I uBFA?!VINF*u^=-lu-0ht-tHu,-tbӋOهx!uHG `G%C!r$=Et B!W.u t@.83 )?_@u  t;s3ҋ?!Q_ô>xA!û#PRC!?uZXËr!QR@@)_s?!ZYC3rtu3y u@u . s*ȁQ?@tQV^YY) s sVL;vM uY6N׋<urs@P,X;u 2;r^ +2ƹ6 =v u jWr2㋟TSX-w&u @u u2;r+2] WDHU_.rӋr㋟s SXárs;sQ2s㋟sSX<v H Yàr볣}{>*33}uk+HQW>S;wu uvJ!s.7!&z&v< vS&:zt<-u'< vC vX< uËtu 2tSz.>yuыvkߺ:uJJzt ֊2C!<\tns9wq?!9bP#ŠŹ+=b^=_>QIy^:KTr^JsAA%z:Z%f2uBJya(j',Q͋n*>bJ: ,IjBS dO*My8rD<T^> p@у@IѦ~Y=  tXu$" z=QHdZ28|2€nHād?JIO { |B7@Hܐ:4a@9Xѧup^82 ~=\hiƎK gƎKW:R@ݐ?8ƥ>("YMI{8Xہ<*5q  H@ Á {B1QFG Ð> f5#.;xQ)?0 4ħ { oG }BS xb9O |>h>P>w+<wŽmr8/&I#ANw?/P@E@s9A=i)C$Q+tb~qO;>wK#/7Wi$=g=p\ 3Y9:9''bEg Sh9Bfg4D3,3h #4)*'kOg'4^TXNZ E ^qMq : a~{8vL(f_ Vq~9?; T* M|+!ĦuxەhF 0Kf(4YhfS aXOg4s`D o?, 5S rrlփ=/],^ʪEs^\ {ە?.(Q&q ~vr1E "cEfhtSU=U?l©{HHUgy4A,NKEj*,&5"+J )),C!_/$2ZLEC-\\$`! RCQ5'?:tyMR0C31qpM(&hޱmj2v-RMlKu4V[C7zj C f7"PEHJ(}H=2-p74ȦAtdbVA1RĪUuMBzZ2 Zo4`y0<x HbK\RtQEHH:_GE]b9FܙmPSUM1"6Q5UđCm)DVxAS%5U)>oD*Mt^˧kW% bT㩘t{])?qleC+H/Q GarKş;WijڹV- rlݩ. СِWŠ }fu񬗵_|jO/꯭^7vEe%Ci_uf ^gf1L%LarPuP$tAa1 p^[{5}Tk(9bN`kTz3Buo {K {{+A P25! Pyco!nP)M TZ@Yҗ9Qz9c^:z c?lHTznQEf0!$>LZ jh*l<[  {XO˄qWoEvh}m}ې\os{g?;t3w}k/BK|]gs]6xmӷ=ozۖU]g}겴?;p*gϿ|/mZdNw Ӵi=Fl6f~JO_=+ H{=qDwm.q}dk}+I2k[COg+n//gd>3euP2y䤚Ac, &PlY9eaKJK<*Ha/W. %ݞ]*t>N^5B'X:+ ;@gc0GP,v5!GJx3R`@0Qnr7<,#YօO  U/~T:1Y8Ik1>zh!AA3#} XKVedč:^  K+̒A5"~ {!pk%caH)uar/1ԑ,y % #VIH='ؒzfx5'`"-0!<9O[M(qS@>rVs5-|_dnk[کW?M%=RxזTX'`}qX=f^Y#:)T'<J9NXҙa.@ڐ8{P7qwGw3_\0SȠ*cg=mnSh[YG;]~1➫ aGRF!H!) ; Cc CN ,6J&> naf9VqL{ o{sݾvGAa2dLeuGK]'bfrgzQS:K+B1etϮ+?tVgY0up}:Xޛǥ/ X=ȵe|%),6 ;f1 Kg Xg &8:q%Ȋ錚 _]^ՔJZUt%1aGYvYb4m=sSmٵixS(k5uHZ=S~g5u c߆;Xի6qG呉OX\t+V-w}q 25̾.Ar`G L.)7hiB97jcԫ͔PW ])eyԛj˩ *,ri*kƴ?*?|z@n@ ĭ%)rO2mD!ɘf]q+C/PiC:dm: U7_huRƆڲMk;@QvT֥]d+Yٔqo`#N9!ٌVK K68ՇL>ha]Fruu@3Od Cfo qx,#]VrQC%46?DpΉ'јU낅,J[4#R&H?̧]ƶMSŽ&Jd\˺eSNuv)*nܷ4_z<` jM4*eU'0& S˄*[ sk: 0ANIgc_<:%H9 }/`}Ω*ջ/MoA4_=?/-/3/vgu^>J& ESf@kuN g^"9=бwUZ3nҫ? l8קdHvee24I\4.4Fq5ɂy~[.Cyi| OcMc_s"O4U4* \ dw,$\!U5IUo:Sg#@ᵚW3mVp_d$R/"+Xa:>("()f]ѡ5ɡq(|Jk0L ٪m+AL0 `.`UZMKNA$#_p#Ab]8mR߶-/اj/cwaL ; P?L% Sco(m7Xa>N MlI%)qa*ŀC ScDxz@?'[l2`O}E! }^A*L,6ar{;pslc%>U/<0Ξа1peKKDMG&XօŒ֦L44eatiS0I_i'6j[3N9RK922W]/=BZ;딿KPno4|g} Gɿhbh%ox}ocx%(:qLuoIqp,ﻉZi@a [ܡ8[uڄ!8փ9eM;uۆ20O܅"!"w2~8R'hHwX)7-NSN?SeaR IbIRdnJΞ+j,/VrJz A3MM=IugtiN:K=ul2ޫen"އR\B_˳вN:%G0I' _[ *6!Lnm XQ|L)綬4'\ ܧ[<c3#zGjmgR[d(hke&/nddnXЈ1wa oaXN"ŦDCaz`3v k]uY>ůRN~t? `UvD>%IUN_f`jޕz7ՅUG" v]x]@zrk jksF8jV9+i4Cݡg7^ |BB3L kC_Ãxjd($*?AnZE Z `N^i[j:[j$:n ɤx!UࠞA&BH0XJYQ!m5 \Z J\$k۱6jZ-{ۍh WwMfo|YZ]óս nyFT.g|{~97]!ϲYgl4"(C-;iw6;DN7{bK+j3?IVV}i b;ĨvB&I(j6[}{BЪzX=\7ƺ)R!ClMd΂ۍ܇}.(>v1re$<:ÿϴTyy@-βѱCU,pX9)'C^_z9zzlz__Yͯs_{*hgO :gMOt[ ΃[6:g\,I}ϳP]Iv^]ICQyړ0hC,P0#KιPT}\(pd! qrC(0{wJ f wjcAv@ ѥ%9 uQݐ(= j wKDpYSp`M6je..pu)> eSMeeF:gO?ҏi=/Ճp=dpC!(Ql::zBQߓ Fw:T&o|oaaѿ|^Ah8[c7nt4NeK Ȕv2=E>$\K|/O;?R*xac;OÝ{'\!U'[Pgt &J+\1Ù\Ō5̺n5aAvelNmDS̳؈m|QC~n aʠP > p=:.O ƖkKn'Lj'f,K++9|@v05ږAܷt@~x5RS[Wu2#%r$dlcLϰ.QؒY hXq3 p\19;0E0H]?me|D4i fkT+ O\vELC8\J7nӬE&oh4FbFӲ81OeDäԦ;ca6q*LN_fڵ;%]A鎎QJ8Ͷrʞ .wpI0,gZ餵b4KE%l+hB^IR]i紐!WI6mYђ1$86uUM} TNy#o #=gzv7 qEwmrFնƞ'I ,1pH)[_PXA'eڤ}[-Q #C&;b7!le*tG4zGxı?_RmSCQSjqm=@tGH#+svKQr{[jw[R,k,c.i pͷa@w @Gi L)XC^̓8WO\sw|-uUA3ݥUKlxt ]/Ɣ.[Z O&j tvspprF3a6;՞Ro&Ab;fvOL[F#;#R:v #T,+a8pG05Cn*TAdzl)da!62o `cvLBR 4r#-l ٌFp. `Q}6׹W TВ#t;?(?DMCq7XV0F2xrRB!DYb(Eh)1Q5AbxQ P CCňjIqrk%r˱0|:4r nЭMoDofWؾWZ)6⩦`zS?XeRx+āC-1r%y}U`j'w9xpr7]n}UW#B}cnV6)z0B㇒C–" pmZo6;?.]6pAYTD[J2jݘJoCZ c:_W嶼/chiU9U饐dQH!Ag"myekTҽkjrx^H:B=ҽ{`d7eZ5Az5A,ìΖJE@E%2Ey:ZhBNO'Ҁ٠Y@s΄A&|1DYH,bXw45Ç)E;]}佚{&m;;&Seej /-1Nyl^/keL>Asa~11t=!|f֪Øȡ^{EhCsѣ7 {w1N[& 鮱5dc^FA!#EZ;|.))VA9ܞXw未crk=-opײV֒p4fY+(~~PRPea*L/!ל캌O^ˏFGsS<Pt @mh, >=[_蒗^(lj/ AjnBb",l5E#mbp)#rzw7qcwWHs=u*Is"@2m (YKBEg1%J=uI6JSdjlO ӕSōjp9Zv_sj-#>;2<ǒ_F+4,qSmGF}fqF33m|M9C^N #w^tw< w5`lv7>ܾ1[긶PײzMO4}{`]g1&&5I qʔW6Q^-J,j\jTّF\ML*H9>ɊC>P >S'5kIcLY߿0=D >@NgvC`5C5N˽Il(1 ^.?e^ M7AIK21A8egE7{X SY*]zݳwMe`z!íl#n_׭G[_\8zk,p7%6u $U,wf/״&cλx@aE6wVr/onv7AoAk{+jĆ .7!>@]m 4a멥-}~^ZiuC6.]+i[۠=ta,wY07ib8'`d ܃kKP )Y+re`&8V>! \/cIU 68A9`䭪 :kF hP5@|_8[lT4\A6  uA!AcJ@J 4S'={?aq[d(U^?Wzwunl𩳎MIOgb  zC>/*Od OyEYR[6Iȶ)ȶ^?.wD\:!gG5І:&("LeTJԪU>)wGD Hx$Q~Aj&M^+&D^lg+u={VF3c^h@5{F`04o5KaOe;rN̫BD4jɾZWZ(|sO r70P"PW"X0ʖ-?%jjT1X-ߠ[z\b{L=I:${a=55!;a' 4pbHYBTR_`/e;Kv/(HgQ2dg_qWDfկ%M64 cmcPJP XN8"lBbo W-,$$+4K]m6 d"Olmy$$vw/nwfvg|wg|ݙٛgwqS5ZWz7@rC%P*V _ hc݈m" 1u eצ6^6M) b ie55m0QO]ۅ?n8r Fa{[ޞQS|+MCVjcLK.A Yk>̙-~} |^M;[̐3OQMʕO4W>H4!CqʄHP6[Ve!2;}X*Bf+_m6";W`"(C x6w =j}@++ߔ8?YFi!- Jb"(~cY vdG5gOutaϮ aK]f"֦kQoLF1#U(&pHڈrL)>~ֳ6iCw '@Ȥ aZlٷ)M'4ژr.BTL%M64yT"+8bSiAzyfZƦc(,1 ):P)M6&g"~w \m.D`Ֆ""m4%ת5r*!XfwO(|*D{凋7e"e \`ʬXm&uP*"f*bZ1Q3VTQnPT^YjEMBzԅ(V8bo2y%(rPIrU#s"MC(Ujc K!55(bTLMM屠;`c0,[0A], 0!Ș|b&( 8C" .t7B3T%׹uC^p-;Oj -sVm1 (o40 gZqԔ4)Ch8&M&a&y)K2R(& A94apw^j5֖(LU٦"+%\YM.OeݦDS\7^E]zf?P:) Bh&&ƒ\d1)D9#7)w ;w|#7gd+`t!5P湯>d9iCi«M:v#( ;~Z/ mS&kV%P9 ))+.ɚ!!Sj<)B`9*>ƔR ?]f10}MWr&f6O`@WU<9.VlZo8t1e 1TVf2e}spE]6wo5*΢x'YUnf^I:yo٦)(bEɤI.ǏE9)wB IJ~(UtwD+`t<#{ EI9Yr^!}YD+y1uEK&MA*k;uLTP>]W6tP!(k .6.n&H;9s(WLv[)~FK5:wͽX什¿&M=0,|mo=y 2A@ sOEn|:+T}R>㞩#}hn6n&9?տ*_[],88PEܶX8Mi2֠&0&LjoV荗ʞ4`Zʕ|{ e?SǎR$*zp0 ;HL$l1}M\P2DOmPK%4⫰XQ&=96Κ,+o̊qeY3ڌΘeb/({IG6xADM{)@Eӡ8$WDф9bzZ-nY3M?{O~L(01‚‘2׶E1_?9,c_F&"uP ~k_*5Н^Dkƾ4k Nwc^kX!V[uZM5݉ [pg(8M:AĐe3C.Wɠ a Ѭ{Amq}x H [T^ՕB"?ǭ\tS4%M_͆5\MS:SPQ7Tk.M_5PèSB}CeP:RQ J>@2ي8(퍗uЊXPhlFPA]K  Q"W45+MԚ\6رMC.yV3(RiB)Ow]j'}juipO &#G1dj BGcr!N$ j C;Bq X34Ǥ)~h682_#NfefqJʍ Ϧ&ӄl܅-"wˆCWFB@BW} ߬RRYW"-[PyB RԊjЊ;;'P4|@{v^ưtOG5躡 iW;\%O'tȿ8d\/,#"scMlV[w}d+f ow܈>u,-}t&A P, 9=(8 |LfQC 2US K˸LkY('5Rid-͎(T6ˍ5 >ߋhEI4%ˤ4(F&ӹ@m'5H15jApD7Prk:6; ›KtpߍT5 hE!rFq1/BF尛­4y_' :~&r^DLB-'0~ .o^[/D,Zz8S[+WH\պ*YIȱatp9Bu!]; ,6M] oI1$F=yUqA2-BAdhRƠKT MA-(JiV8-B$~gTRs.Z5F!, xamLb %2us|'z1M47Sml5A8I9jLxgI"p%Rhp,7a4͑Ш~{mGZ,iB = v&Ԅٚ eϓl38ZVj}66\SU~pPXzn0R4'ƼobM0UMeS^Mbz«yƤ!ݚbrfP;@5\'ftBalB@~}6r_|*+Eo`c0XEfv+GoمiCjSqF]0 U WKM{X 邮 Y0&>^9/ e+C.I[e&k+~ %aD6d#Y {0C (Ƴ# ,Գ?T7F ~s4k;k ۭA <[-^$t\N" %ap PYH~`staJu]#irr^8g[ ezIhH.os.s iDpe#PF9W88cf/Yd&8e^߇Ggj\5ƪ'^ۙ[[$E' FFN/M VLHN0G|8-ǟ&tv6d3t=2DVw)MUmKdJvf: O& O9HV8?h/ә%Vࠚ~1iF i[qiͯ{_h+d)3=Ot-|_/%Z=+mT ^~]FzNCh6A:j%53`x8ORK|gp?l}~ᒧѧa#b>FZ[+;߱xby_= }Ժy ??9RgnDb+b_?H7[xB1Ld67A &e_~pFʾWߗJ)Z Z]GI[3YrMɇ@tQ,?QЁ ؞C+6 Sd{(0Eے&S*N}υDs6? o*aqr X_3܆zUM\TA9 CId%4%Jb)#qLȲޮMg3O n 00ݝ_s/鴚8Q_%%1828K': UPQ^SÎwdaP@P<,OjY?ldܴ+tq}2AʖBCue'SE]"}ŴU'܈V)OI%VxK^Yiy>.AT70 v U,%Wnzzz>}f/.1.IRw?po_hac8rBJa7s0ej󂻛AIE.Xf*%m[{F@?|NjYgORY ,9d8Z nb i>pA{M pxKvG 80R\{2kmi琓<%u'u+}-YG=ݒ'O]ʽ -lcD`tud#)<92YJʲ?o(9Gy՞N1Q1xu?ߋAOn&&) }N#-}æ\:.HGxH›^8GxGQ݉!.A>&)VeNH[hh][{ ||?Bمy(#r8ZO 9 H@hzbP?'Œj8wHavC G0ˋb 6ouUXggK ;49Iat3(4~#惇?AA ⧺8xKJk|@iO׉) u^$ \ _ckAf{1ccV`.t0gt-C]еi{o"O}e*8%?1S狪]ޛK }%ǻLR`ˌXNDݠOW_רƂ\EAK( { J'F7#DR(!Z ^P<%l=;1Q's5x\\v 1gt9-94#<&*?^U_ahzI^RCu)iQ-Q N'ue; t(;Eu uB/#0jWxM {@"NǺ_f16^6\^QJ6==!iu$*^n c61"Kuz )Tc2`j.y)#!Z[ *?BoJuq/yFȤHvd)[ )izBDȶ<4"x6^ 1b(\f/fbj=L{;3)(zn8۳P+&%-D1;5ӸkQ!QO4W8nDc㕯e/_}{;{{rw5BF$L|zHe-}π%4 Si MΏ >wx#5{a3A57Z8u5S;&Ҥ\L :C6(0sƃ5 кbqT3i ݆Db_awK U^F=Ûi32.0eVrˬ6:yum 3Fǵ23e3ә3h T.P^UraTC7E\*\p˯SKi@0LW*ʩ KoP8tW<)ۚdf @b `ycCv7 9=n[(2_G]P&Ur&+f*Xa^3˹\ZAwMЩ`V [{Л6{^z"x"85{ix!tئDRdεպ  kl\CVˆ+צ|ZF)q"NnFlZ+9޴Q=:5Ȳ_UQtSe9zqyW6XQj]~ ˄Kc4 0OU-OADֻP?g\o |v0[.jdKqBV?WJhrGHΒ1wHH2g`1p+Sn~W\w8؆*I p+W.A}S!(CÙlCO<.ae`+v6P7exN+]4 knmK] %W/fbTeTːs3Lum5f泮W9;7-[wwf @x ~lZZT\HDx\xά,9 ?\*vee]׎_-E-@{[00ڳxugl@ H49eoK s*Sؙ.Tjpc)깹"Cc`0p!@u*IQ7Z"o,|u΂A>6j6H8; Mk4Yn;6h=T-¸;C*Ch?LÎG #( .*_Hb^7WXH*Yu V)abSLIzZZ/lS#.\XzŸfk9w=[mJՎjnx^JS'E a8if,UyXᦳ_ca畈4E {30$tBua5`6<1spvvs=tB[5! +-#%{;_ͽYf]aa$no7KˆxgTkyU=H|Vu"j pL`C;"?X)y}R;0?`P@ }7tH۾o WK#"4b&X72K jis, )@il&5]tFCeO$2f$49<|HT{kN  oW>mZ:/#4?$ |PPK"%4Q&=۳:hF#-2*A [4tfuQ eӎCkCj)$M@4Dƺ`i胎}8A)ׯuLV垽RwSL‚‘2׶E.c_Nړ[{!~k_*5ȍ|xƍ|`ō}kc_|Pč|@ץ^]WD!mi64i+P %#&42| 3:M=cgգXq$9vqOd(+|Ѻs^jW7b?4ǭ\a! @U4%M_褆 )mΆFe˓Wa<`ZC*8PɈπFm0UM(5țЊX3! gkVA%HC3C:[+oBWLi8/W5]\6ر[B Gy/>/]FS]i! =Ö?nIBB7HZPz71dj ::Nawem n 44Ǥ)zmLpmNfg8e^j&=v (\0KWe]bA +VHv#UNÞD=” F.UI 0 -vzc}B9pϪf1Pv+`Ey-2/L-0~j!h 6k}N3m-])=j&J}2)k^@SlF ?wQoMUzi"gLEH?"(s%V"RBfF'Ko1Wn'}w˽c)ˀD Ňa| $V0-i<` `egi^! 벼w>Xbqތa)CE4N4Ot2ݳ|3v! d O cF4>\ӱZc@vŠvALrmY䏘 I4uYL K˸LkY&u5g E:ca?@aRN%yCƄáuNPI65H=ApjtgYO-,Ćm&l>hJB=d"{ie!XE(-LaH!ڂORyTN{lzHf9a^)H4VO&$5tYWA+9 U k2YP@8=4%Z!{0IsƳ ߋQFn8PP#9  ײs R#Gd @w 1[Ոkf7 Rsp Q'l[8*~EO&;o ޕùk7#˟"_WOTTa= (&\`T%ޮ>fOvDk6 F$1#gːp֢Uo2Jd#Y} ]:4!F5ထi|: ѣ*V39C6) Imm']^.By^zuGT\Z98 )Vº#a A:〷}B" /J>:>>mp*aH: $`a[CIDIUJI`i{sp/b$~}>ߌ}"?PgFn48ܼwhA(C>F6++$qq\"_Mqec]{wƪiU{fJjTs6X{{073󣥅EČQ# vj=E۴GǝV:(07>@670g[w1LMUm'~Hͳ( )J֣0ZD v,Gs%Σ3sF(O^t .߱nCM&ƴ/7W6UQIqB" tl{4\i06)ZH쫾p5ADWoQTjkc] $qnHǗ GuɲG}fWed\OYv8{(lv@u !!|| ǜEvr'4!'$#1 8Hݰ>C|?GS?F rq}m!j@ 6H4`FkRKM}B@mΝ:Iz:^Ζs/e|:u-|s.\;||r s/\mc䙔>>T#3|_9_loh}u?9x+{{w~cH^(~cu?^']˽G{/{kپʰgq]15cч~`nݏeO6`g~lQoA5? zy])V 3sw۔secq8 &F,\ʶJ j}2 8E0u:^ןN챸 MƞmjwYQg7y  q<} ӑ+q<]c;p# _X7iDjy6&͉Ο PɃ!D~m) tT`JX ')k=h"'~q[Bg]:F|.$!(֖|( k^A{Jֽ_h,dsxfNցܛؽ]quX 98-Tfh!3v7E fn*kӀ;^ܝ̑P (Na9xz XE0FV=Zz p~ A <F㞬 śG ?#i[=[ \.4s[=AJTt@T:oxT ϊE sv:+&k_h4ywfS+⳰iF8ޥv[ԛru,ǧwf9np+M@7E-UK!vtúH&WP"hvGV`t+1#QՅ~8@h$KJ߈"E>8#PG"}aD ^1%O_+.+,& ᔎ~G>$jjN}>]nna2, wCaaylW%˰KZJˬql oݥ#c E;LbK˰FFpK/K012,~K$23 2ֲ֘Ke%c49 29 \)aYNbUIE<_u}[l9,,YF)^5v;\r< 2e`0`y^Wg2hFr Y Q0aG%YrrIspK;V`| %erRlxq$51*ɞV fV_)KMȡgQ?2_zA, łKL[.ʟ~;\MG&Vcb3q **!LB0QFi-zu-m9D Eh ȃ+\ ӯ]QQӊ9E5I2@,S"B?twQnFve$(-<nj(c`ڗx6]`&QqOfatnnbݔb8F´'N!k#È){'GtD׮. \*?I^vMh,C E=Umj֥MHt28_^ws.b2#"zXؙx^L2wUع!Һ=i |OA~)WǸ l+EN`3:&l80GGtxf#Y+Ƹz@ѝ/̎?4{:^qKl7 E&(7Qsc"G{|kJ0v:Ƙwʪڂru~FCoAJSVs"jjܩЪ lYU12S`}ƳSB^(jyѺaszDmaD"4,D DA%(~R[(5/,.wy[0> Hgz3wLqfz/$tWb^R^e2);`A 䯭 Z]Ҝs@]&Qsz/8 .lV ( `VfGg3!;irb6 @ *vRY Ix󁨚ԦOӱP -|BSE*kgުD x2`ḠAd2LeJ1ӶǏ8:Y0 q BxtW3~%dƓ2Z5D{.vdr4K޾jxpRP֑MbDSBdBZTF)5&XYD3xt0D!C""*%`ͨu8ABS?G u>_Xu;GG3 Oµ:Pȇ wBC8ca:pLvt8ukk:*Bx`*X;'`u99Y;F3<13~XHP|'/ VĜĘnb2<2%qRJbᅴj;k.*]k]tL%5#Mo蜫cz h%BzP3&4XX5H)LBFZzn7zD]F:C4~oN!L~u=#2GG[|h壤Rp~ _ē\kju4V Bb C2zOh3SےԚu=00bv) NT!ɒu2ħRțK@O:y g 2CrCC!dK<^ ҧR2c @(dF@Y5<ߌ@z"T52R2edH~ E>Þ>|:SB8#TWX=zGhG?=?TDjpG9-g8= -ASymkk"r>w}zcXbn]vw/~-MXKdcXhkJ#dKR>M~?㇥Z""~R:_D8+-.K@% !߳/}1lfKͰ6R{qף5sv/<0^2MwA ^(7'ݷy77Cs1hSIajfގ< - @dvP-Ro +qT!=pxziw;JMMf387!& pLʰ)L:2Ve1jwԳòə蛓WȨPԳ'q=8Yl5 qVu_,&Rc~{,Vy\۔}\eI\ Zb`f ro4Kk͔K.ܘtYŢC[('W`^^z?SV'\Pfu⻪ PսmQ7RUa&iL[SV~G|W^N3'5dD~ռGCx|u.A!PD>_AB1 %ܲw\t'rrp8Os~T %p˗6ƣ%GB| "k ?BsZ3*\ɜG|8#gtP6%9gEX7Ɓ ܺ6Zރ Ieh0CAx!ՈY}MD }MJίZ/7Tr.p {!SDip[؍i&!{]9hpccq!;dt+SOx=][.%SfRon<<_P]hr%`>[1p vU- uĿJcwr =TKGgp^ҹV{a;%  Rϋ$%d`S<' /hݗv vk"c @G$֎^ φaTBѢd!~d=٠ _{Z|ov*ǣ bc;%]`U,[䕾r F,X 5@@_( w(liz8#in[n*iW5/.o;-eUy;vܺi12^vxHIPN@l1[-L]_2,gu jEB'v`Twr 69ؾNnqAN-J5IVl@v)NkIϖ-qVPrܿTܺ l_a~b1DAX!h`gh9QQX(oWL=Ae5ڒNĿC(>.PnR!jշ42恌 cnƔ4F_cR9o9ѪPN9 d$մf \;cPqژ%JqK(IJjVL]rk^r%y$CQB(@@@jn tۚE$W-(?nmsXn4c=c#f>p7( -rF/z2[ *_LR7cN]|9A11poį/cS}ZG*Q А 9!WF_e{i\;tkVu( /pAu[L0"6SS%I0U#gk +klN狨I Gng#ԈjUc򻳃R{Z=J-t1\š^XF ]3XKFo~63AlpZxM3 AqnP_.^V a3Vy>ѹC7Ve35s1r]s70]Wt*yXbJc*jp칖ѼO~-[pP6g|>Tj 1o;G+$zi*ʋOUn? l} V٧z޵= 3>aC&q  19~\BLtH )Χ.:yiЦ_~;2k[Va;}[֦>aC*}Sq%L@ʟiJSˤrN29i*Bzǖ[M—E_M\VF_24k_E_Чk_͉5kCet}M~q?(TZ z8_͈<4q<3)~]6=_9_ϧ2h4qA-6{_vk%[qGqOA k8_{ۛM𐟒n?ܛb}#,K-ڊϜ  MSlLl۴rHܛ"Ry7{uxW{6 s# =G0v=Gn'-Oӳk߻OlE >׿}?Ȋ6#w-@~wGU$l-w^vzIpu?CnQâbmVAl&4U#WHΑ$36AVMXMF<*y/}-'%Γ]mmoPβ|R0ȄnB2Ekcy uKO,=ZB~cycwLUoX_$j|͍99Oj[T)5p dm2-d$3nO(S&f!.o28??x{wcVtaʡy=H~$C?dT;z3\ky4tϑu_)|/>E}5O?= x 8ߏ=+`4CV%fF.[~|;XEm"}[k'0|kj( jc8dڨLwkmwp?y>m@4}}6ٛzAL4Vxh4UX|e5vG2~q_|Y~$v۴ nOO|Su6K&O|N[ lNO&~j|S5 ^7}<4>cC4>kK|h}>}.}*xDqC4>cC!?Uo gvK?=8~,~:Xx>cD?e?&?O1x??>W1Зc=I?4z/?*. c"V&S-_?$ 6H2혾­]$SCK5>}{^úc'dpY>k'M~,%mx CEaK_w #4uhƩHv⸲x5Ǐg=vqnÎ'0vp ߪGמ}hoٿ6^0w/\[+3}^eW>%8 Gp#yA㝭ls쎬;8@[VKEyN-Euei^no"GҟJ}"zE{‘ S|#M~#[mFhKJ=rå>=$~?~;N=!S3tO~.{Pp=gQ8kŗ2B!9 t~!blŋɆ9l8 DAt{FE߿]!{#%G&/%`;dKi{dkvIoi[?  {#doeoCT=(%:X=ha?6sh=*`}Lݚ6~8O3z^y MI\ؑ =(zѦ \=/GUjLܴ_JV Q8FhP +Q'9Ղ!Cd&n_%BSֿ> i:3| U;B5x?<Ґj̀{J4|fЖp Ci~|1kQB8*PG,1 V{V &a;p S`TT/KWdHkwR0W +G*=~ b1 rc0 ǖ5R>B ?g͎:Zs 'sکbR^ԥC--/?"_[oݫA/u`gq_dlUZ>}/-^"!Z=JdGL~CÙ s'vkbH|?\>g@;s<M>{z>| k|<.j_maU`ӑ5/]?38þHFgvC<|WRG,Ȅ?ݯЈs< q@!1\@"u3@"uM__ p<}A}/s%?뎼 'עOKv}OMj>Wݬ!PP[άab%=@dcTf:,B4KGJ@OrUhw*_4otzDI>Bϸoo}oSp=gY54rڕd«kl/Chl2^n{x^Cӊ? ljz$Y-pUUVE6??byLK a99Jz$zbQDLXqr3 a O$;IiP"Az< ?0PY⎕嘆 Eq(8pDq[' s9+?Zc* ȫ[VE{ 3G۝j3uo<^=!g {FnF}!u?%<( "A n>쎢y9=r:V}/{=Q7P))Gp\*HV?,"C0;#l56C5riQЛjMYksЖ[I$beO!5eee$I\N9~?+ۻk?C \2\4  $S&n"~ *,qso<Y:l\eYާdc'?MOXTCYm]yQ~dXȲSӌ} _2^1:o9]o 眢Aq5DyRE9|% jjٹX/2v[H{UZQI$35úuբ\`cLQJ-ii3ZU&+<Ť;5Ni}R |z ꓇Ca ፄ+1㫻çP @oPv`~z$E V`rr [U.;1] kH4^ h}$N g8ui-yqBc(3S!\z"2ՏAP-';*{L{Hb1aJ@QReDi"E;Fwv!Bi@mV,g#77;8S +ybrt^'un}#(a]k˯M$4n4Gê.)Qі7?taBߙ]Ssvwl'0n? GN|:g1$mځ \ҡף%BAIXXG/dN~G艭y~^& D(Xİ>*+7=L(pc?J Xѭq-Ie4j ҧCfc]fE;V$!;DW?hNr-^TOjeDKbM,=0cN$pKu"lUs̯2R`2K;?X+<OpN45yW>Ҳ&-8lN:bCJ0g <H 8T#hFI+k{>V$mLSKUBIQ'5見&XPiG}x㵇==ZB](riC!yY"4ɡ6jV>N"7FlF('w^ Yߒo[pшpgov{sYzߺm2H޷ ? {E`:TA:&f o<ײNoъs ˏb$!K=$(bye,t?󉺘}?y, L#Bok{wq1Cwl<)nԮp7tTobwZFf9~njbe7lkO]C>p;&3Nd`oE9{tyo*nx QÞp9=^u]ۼSªԁː9rvƑ.?|; LԳ2k?= ݃{+긕k`3h{uƭ(̙踈̛WT k_ \ld( _Pz=pzAP}]Y%ﱼ̓hɸp'?o@ʢ.9@۠=r!"n!Eb,Ӷ ]ɃcZ~^X{CsM]y &HW@٨a=.7. Ѹk" p+_x45#f$IO֕"iZҤҥ)$g4=sJVя4 &MRlT56jc YD~v+iX05Gi8d@N*4nǚ;bw&/u[04-%!TAU_,*\ W884 a(mkI< -/˵}LÚ;7t]=_<Ǣilה/~@A-+=AkGvX:=@|D}xVDmi~(x}]zą>=Ւ lNfY^ 3NNYf ٰڥUj:OTMX*!U&b|αm=GpXil{M*[B(X̄W4r0ZӝG%Nz掓%oLK)}q#QBpwHZ[)hP5٩4!}/CZY+\RAs#գ&ů >;._L`޵KZOё=$z"@mNsv(ig& )BpaGOaAC*# TV_ҏZ;wTDJ&W W(YA4-:dEJC5{-sJFZ.!Pi$ x@,T 562cF͋7FcF͉}ڶѩ|8NS,2I3*G~@VlOMC2#Ta[f mÔDt:ެRهP`e 4X; %ILI7$^Tm4h5O).AlW%Nw/tx@t%nީ`l>+8rh"@~ СA`" 7pB \aǽ.-AK#A IN[*yHdHsGS0; D!LBxipgh4i&$Yb9{A"ޠ lo}"1dӦ6(1`2b0[%.I<š=Dl)ڍ Xvjl6z֝@k2eķ[5rr$YǚF01Ͼx I` ͼ[z`ooʌ~]8!K>H]|=4q}> ;gXl ϣ%=N>9OMix ޒ|$_~II{F 5GKO?d>DѶܨ!nWBE;EBE+ªDHNb3*&Ch5׵l֥Ӵo {X5PP$]0l0trX7\THm3~D8&RE!8P0e%tDJTrH5~\ޙ!9=(n-$Bݥ:u.E?"=I% .X7rQRtG Ӱ Y%vqVƢW>I+%= Sxa„Z 5|5 ЦkP~T> `AviC7x@cf5F NasaV Om 0XdpӍik -abΑJVK6.8#iZSF|oCA᷼@mB@ 51q^ȌCEE+TP| W/Ӵӓ 4l "vp8%abTu9{6*= >bޘdF)Һ&3UmsT6% Ǣݓ8_饌Wrqb~2v}Az>2;Ե7'N/w@8eP%08lF"gZ,Zа."P^ qN8]oHpKV@=A߁$̶. ֡@0Q6/ _;EVFLŁ-tDF[ʿ;N~'ѫO&{1Pr^ ? ! dӆYq.yJP23+PSn")'gҵnAfg2  eG CK2T5^qf 0{((s*(KU) XF r1Iޤ4 I{Y~,;+gR\B/w/Ŗk-W!Af PB"8q|R긄:wr(sQ!CL?J :PpW $pQ' cyb"?w..(< UU ^X~@=9~Bai {ēi90eOz?߅;$q FL=Ov4cI]OxXj~« Q1BRhT(XIdG?T#Ay@Yg_oօ_7f-/Z,-a}|}mp7 ?N//O=0~^~h?ܟ0{hIGG>=pEs૓+ԉ`|i*}PAj 1ɒD&O$$;z`G4|r_Ʀ~?={<(Q?VF a<˥?}|(vcCG`3B.V*H .Xdk޴p8K#~??$wBOh4/Q^W) 6"D,8MjqX2NcE%jUwYkwC#xwxzԋRv]4r-o|ФD4,֦Ǣuzh=sS_)QjhGF_=Zs滱eE-[kXZ)ٽ}@,PjBÕ)e4]G1^ffSg; n]2ؤ+iz#]I&o":UJ@|Eg0 DH $9c1xi4Y?gҷHσ$(V$ ;^;Gl& h1lW86!DD,G}X~PBm #A*(U b{c?[ vhB8@?ʀ2qHD$I}af7k!i'17١"x@ԲXi.fJA"e.[/|Ye2^t?GCa<6z^)^Yu(; BiBF B&2o+D J@#?ɿg\\+岍ZFfؒ&1M1 ,6/m6~ɿ{ڨlm)#]m'-t& \Q\"P( 57}b 񐝰`рt t:P z(H$;/nG`̽0rSsTw#TpC;Q> 9`>(1 ۀ~=UAC ǏPc0=4k@=I|t>F =f3@>A؀in(cAvWn<R% NaH<0~%H9(~PKq=P 0 $0` 8s@sN:PrրzPu9pR\@sH s[׀q.w!V\%?~8҂}] `Ӏ}zpfMQ-!8!p6vpbx0q@0x J@`@=&~#wè7f@7ˠÀn#xǁ {p`8XQ8Q{ؙA4wT>rLw>·V{s:C?2_ '=nwHؼ*tj%汩%Vcq&0  )#ч/Y&hAw~8ňNA$>Y4a8O0αthZ%n@)@/B| 4qF|1+g|n[~YUKbgcpe[fqV3}UcUxz\v=c{m_%4_6Fڱ9'gUwhoU=K:{\z8bG3 cq F,ެEJz'8iT Y "Y5!C=+13Qq  g7@r7<XFtC(DUx1:6pft-=, Ո٧@[RPp4x5#J2 č:) t#'d qƠ:=!$*̋Ov>AG:T ΘԂY@GIz}*qf9=qIꁚD::q;g+y G[ڠ.wU9꛷j\lޅl/tLnMFɌ}B i,Y/|}Dcy7C{cnru׽+~풺 5 LDYHiH7Py>|~L2Vz圧}]qg*R[>Bt @*O[>c>17eG7af}]=IP _r9"i,9S ۯul/9 kA_ڥ3BgH_ڭ:ۮ.~ɵ\:tp`j:)YV!YO~rlr•;}h )+&1(kd"v|P"vׅp"V"$]y&l2}lu ef):,RNBҮ%{K9o]'77Gܕklw2{)=ȝ>9G@!vQR%5JWd  [N]UϮgU*mwB qRj+hkJŪ.*.Ī]U.Xv9WYU2UZ%ҊUTKpfii3@fXC!kHgAeP5UHνAU4iP"ɡtpڶ8#|'5c}3XQTfE4ޣ4Gwjې1|ڶ*hgrUM,@K1r[x,-X%2TEwIW%qj[U%]qE[#bPk.MDgR!J4[Lq9#2:D|" GnP74Fui  fT@Pfvx1AA#0F^r Vo l/%σΗueT #;'y 2J -] XfQ WV]qd WɌrwFn.  4;obݎvXʯ9wT5N@ZMT:"apKZ 9XɊVm(*8nݙ:u!{}Cx'3CԐΖӊSƲbJP+A5Jݚʏldc m~rAs_NR'zTac6,_)FT[[,Ʈn'LkG)hi 1 wV1%ܳi?#A$fZ>JHT"[^L9jJ5';AQQُ7SweK#.feo; pUN)8?Ǒ'rq'mrqwX~fݧx_Qgd ~)yq{BHG]P~j0.^Uyu۟4un_&t@pHi$dƠ*4`)҅Y0TXoS?H:F jS+%\h"RǂIT~;[jh^OjV~1U9dz>qRIt.ƴ=/g6Ny$H\=9;$N~U %m_n. ɏiSI?I&1q\ei[-kRYh6氮HʗlkTtEDusupptTQZ\ DŽwksYjvfX[C[[֡B }-hK"Q(aW2aVb:@9_fXcuҜ2#/kh%I5򃠴DEk`ɯ}uh– rZ^"ߴ#=y¢T)$H<5to hG-M!&%7ĥxħlKħbc1{L{$(|(`Cojr FH9m&1X+O`kbj4["4k`?Rw+<~eʱk.C(X{^Zby8koZca~% ܗb{5']ڱL M4Rk_ߢFt'XG|N;Loh'x_$l7A1A?wEڱѺEWc!܇}!7XAo`DW"!Yy3sm*DDIXBlnmoJq*Ӯŏ㙶#tr?L8=gsC0uwI2A2Dz{Ef1BZO~؃^wz`GLݵ#snZAa:_~NNg?=  =L& ~ AQ>S>uXXzHU¬*8:5cbp ]>"1x"=0.s8sn@a :; uPEn~'>8aHȪ@SwPg}B0Xho:C#=#E;ukiX}XӼy> % >GV\i_% {:?8K/lB2ۛjJl..鲘鲘鲘鲛6} ٲLly6RK˛)Lxe76R)ѹ޿D2Qo,^>kf7-G#PNWODl///si!s/Ä N}.Gx4w X7n W+_?@ras)l:O+G/ N{bt9]e/zfK2>]^/gm̾M5A˫^S6ۙz{rWܝ^=s7?̇_|?38yr׼#!:1Mިw\;~6o;*׵ߏt@ `:kǝޞ?~4 ::h(:ـ]e> 8w ŞYRyd;0!9WZ!?C=a rU02$\oFXrYt)pjG']Kܨ\zfVrhĴ j3p>#,jnϧ x+=ڠw j±Ճ}Ļʆo0/{F!%4בE[ElJEF M#B 2q!%-zp8⒲(~(HK'V;96$d)GzEcj@lN3"!s-H5xN&`0c\2ޡF NjdpP<kKc۵/61g>ȏXV5O)>oGqf4Wfq~rЎl%/C{L2'V\>˻s -s9NV/S{ө 3ImMd/uZDqP?xtxS#Z ȸ.؃Uֲ׷T.D퉫Vښ !H9lrvS񅲟F_dB duY r\D9bB#vKup!(n-8sb &w8TLZ;Y~օxV/kf< 2>l״{y6N١ܪT*܈M#ktLG2h:t@AV xҠu$*Er]5ͺFd5̺ zډAHѳ/. vR$.Erkt)5̺,z}2@Dᮽ/T6\efṖfI[L Z\5>!4;JT\ۑͳfTͣzs.]FÅl8Fv^ϥAsH.uȊYb'l6OYecЉ32=4c0WSsc_d9;ubUn?3ƇnwNfj8Vf WeWtIUC}78;&3; z\Z3$s;0`I'3i ܏<c>/!qp$-^\}P8b}7;%3mGf3[>u܏.~zm z} |P : gWC-Omw *axo󕌘n4MdJ֩'٤/ Msܔ<Idp57)`!#9J|(>y" t%>xxh VRxɖuՕ:X6KEcwo"݆ڥ F3 O>!>݁W4EXۏ Вc;8U݆HEpb3% \sbBb.J 9fJVn>͝q0pp^MpFΝL./]u۷nzرnk ]bU.iqQAkԩ1 eMʞ">n%/mxhS]-9r(ɱ4~!B1 H r|,0eKӷ 4"EW +`7@ Y[Ҙ7pJ(, [;z [RD 0)>{ǓPs9=4v䑘)#΀v={=-oNǼJ ޗ{sS;pȷ /hZ_^>U.1ա8 t/[|AENSfvd"R6d0H:J.V16i 7[s({Əh"ebYVZdCd=S;<}Koh3m7=1 ~]/?<| 彞9weoi+|D]r)a ([pߊũK=;9BS89 @͙7ya~5&6E'REY"0 ey7.?L+\؁/]5"&g7+]oW߾+dۺk a|<%l;m*}ˉ뽲gK+մne""4ҢBJx@{DFA13 H8X4J`PU ȩ}Kl;%;, -)l{(.*ff;{9{}gÿ߃~ 5FrE:q=IFO{ !_,3eUw}/ mn2L{+3"2Lkn A.82f̏={j gYHY w^ζ/Ah;,`GAJ8ǐ?r ;Gjpey*˱ J7De',VG8y`?\a ֚ =$Id\L(_׌ pkLj[ugE>Mc6mO'q6/1셨 OYH5x/"ʾ8ˈ?׎2Ezl Ay•Ŝ-t5xݧOy?FEclhAP_TZ 6o A"J`؏;D̓FXC= MBO@?`ϋ܃ګ?akv_aUFbY,-OMf[Btj*2R8st >RW{>MP%}8^,'FԳ 8?; ?!]g$D3$}ch왽ي;:lOs׌mi cqe'JTZ-CȊ]~?Vi(~- 5(kq;x=v/K*OY'TW,5}J՘nũ-xceA]lvAh3Cb?q4>^KtR>_qC/3#,ZN* "-tt#|g>?0?tca^f ZKed;BJ_!Ң~L :ɹ\ ȆnƷoO}|qP٪vF0;@Pl6j|):s%@ZDa[# :2{Xn {ԎiA⺅K[AbPgb+ ړ!0{f'n!Q2 { /Jړ#!LJ[j kIy68jT!UB)bm׷+Y% \?_oe[&clRzu{n6n;nh7/V?ح͔!W[_L/m9lV)CT6gpS`B2lf{pR.qȗմK t0B+^%z])h X3nݡVC+rt:MЫ@2T4+A8 {iX*yvY">{m S0l/B]JO9o}9O+k0iD+ÿaqNa'\`MWZ&Dn϶xۢN"U^Hqw^)e_+WCkROU v ͛B"[AʻDMl) vyzjPBh<tZJv!KOKT h8mQ_H^-_T˫

jLjLLTy@Ꮼ/#x<+{i!^'F<1*<-߿ale~Wnd@:4XMm[Nm;=qwXvQr!%Ev]g!ßWZh\jE֘X? kz߶Hb*Nrrzn5Ab kz_W[&*~MHEy{qF+k?эhUԯE|%fC }NPV):%kh\JB4tr(_lx̘.~b~?t395#3I+н=Dn30o'YAy[5ÆOE+m~(80 t l\r6㖕E%G08}lWyOmRdWQPi-&Nj>KPx2SLFE, Eɜ*tƟpiNX% k4x t|dcCIDj/'hX*/mXz@!HN[0niT,V@+h2Ii|4ׁ ]%NJ*0BڻJQ܅h[@;yƒ&s7 5DΉ+`+ί1*I/%GՑ_,ٳ$53 P~#?% 0љ\)0 V RTQ:[` (o[ a)p[5^yDЙ hUzK,T*`Ƕ;>d 01ݎЂ&]cqn:2^ aowjxD|zkP9] sR54CCw+%z}j:WZ{^Gәn>v*h ilɎuG& Q>r&wJۻg¤].{m{Y{Y@kgK>V>z0/we(b4SRg2`Zbʉb p{t BGa| ? QZHQw&糚8E~]u64xˍ%l&[ӷTeZu$t7VÒds8mz!EQa ?Qװ(a{) (dT kXA%-s卥:b; #ϩXT/tKu\*B7 Fa^;yaFSesFU|N:X *q)$t %K OP6lړ9>qZgih<>|plGyx?w>/P<%3NH*DIԤ/%2hx4tr?uᐉVܘo*%6Zw1*PKhPQ;d@ 7!FKb &M=%Xo`KԲ`3l1u&aSӖޭ)~ètnpc[庡:p"FV"ݫrF3W one:o@S[5Ep>eFy753u*xl3na(oVXΔUj^!tsTEu|UagpS~[ QKwkeC;.x5kqH[fw-KlYN0VjD0[@Wj#biqž)a s]7_jHQ/qì~\s0YЧ6\2"ߛspnK\PnRc[9Bʯ>x ʹG9YInSk[]Z\v.8(@V{ Eӱ Y׮i_7!~SnH7/BThUF@d8Q$6xlH Iĺ߾g;DN t cl.p9nZ8#f AhôE\]5[Ț_KVe:[:N(ym ` Q.pŹ.u[/. 5z݆&)*'G!wŴu[NӛPѕ V9eFڙ] eU&+(ÉaG#33uv`e۠E` ;n҂p9QxWrV*F^M%ARU`nBctN_X4'2j^2N]BuNFnpي!;G|>!mjC;\!UeԴ`P)6#ցķWpώv"3${c E-zHwEO{Xa_ڙvgqT´R4p鏾,)Q-0Ps=$6NH$:*HqxX$*6':-\4qn%.<7βB"pG] Q`dZHDY=B3E뉻0pAC#n}Z}Q1/Ⱥ%"?+3Xzfv ەp|O-_+Xܽ U\ET[QґMy=슑!5KEƔkK=On[iH6W{WV]S;"1Hbo6 B&m>^O^]<ܠ|bҲ#Κ+WaB!]\wld^Xukb3C'٥%7ߖ_uQkuYgptaQ ,ysskMS4e'j@nqRjqSʔ5`胋ÝsOqAd_ OZswt):\)^n^~cÏ"#Դ*SP] Ǩ 4Lnj9L.S*Ĥ 3Ý)EaIOd[/I&a[Lml2@$ɷB#2*+09){ SjT&&hBf8uleˣWg=Pk'6ǢF!?(6%%Zcgh?[\7k0ImXm}=j0ϐiTfcw7b Da':mU\clxY݀|Q#M"/Eaw^,Gw;,cdoYblJ6-[wo$vDžHwRfr߇g%AhE#An\Fn렢I 6mѺgf#o3I)M^ڵI ?jҩuSlW1X ntj`ŊmQfZ0SKUBSWxT^kYq@[ݠ(Z⺄1=*8x/cťFHLB(5ik?Eؒi;Kѿ )4{;^_Ic%Ix}][M 2-&{75Z\%^.$4rCDJhLI2qdbɑ&2%Ih@~?ޜeOʜ?w? wRg[Kse)k|om=rrvCWVw]B튴n-(>ڇ@ZU9Ɉu|kJpJ"E\&9%֕pJiVagB!iP—J&X3X 4 ͊&? pR2 KDYK!  l^) AHRH/RF-0m }uԝ[?"G7Ce&e|9s'2|s+̯29tOCE@5od0)a%!NH2V)!5N4t^2|J{-(+yWoTD+Maa0 aCx+}f AJ1j4ߍ.vC=3LXr慗980Tce !(58sa phP3}jg]N8k܇lq^r]U\eS54UI4b`{d S^ls k>&8U$|6 Ɛ>evx$٩mбCP)$"A.Pd٩ۉ0".b;9(p4䴈@| #^@qpl;| ڝɷO z+l+6]fr4mBSF7 hn\+,=Kw~X n4:Cn=UXdkz&mZTC+\n궯ئ{MґՕtF̀Ol)ckiQب 4rnNU%[T~nҷ{rǘީD)ZV$&I;DnA0vq%2TlbN'7ۉPZYGS%֭D+.3αګ> RКOQH浄X.)xxa/^H*!Z= r2y\qS̨J.09 (,9 J XyNl t"Ð!\!vqVc$+me};03yi20(|6GxݸVn+j*!sՍ7ǻ+ۅ:K|ˆ­>!kD-Ftꆈp?*̮`cznmڏ@`B4ɨL;]S(ŴK_+zOkl'g>^ֿ[_ eVdv[6sϧwownV+~*wBoWſܡCGNPsKsf`?7>n\)#JW[/*:Z+˩#U{/nHq:#S';d42$7 vkg֧g39_)v -)# ϓ/C6X B|PjjbJ5=n ~: 6dZU[pTDv*ȶd[/Sq B*dGS llY& IF_*+F#v\ށ8CxZ/➵^/v+ߜL0os,C{y<@c;oyĚM]5ey# VεR@gɝRkyOAΩNE` WGAlv#F 3-o$?:Ds);82cynPi*$8CHn: j 4̀ řrwᒐcǍeI4*c*U7ˈaO4Zic-Oe` ,ۘ'-udڟm]~˞ []o ot_ށ*܅sqI))MЏ('ީ(Fm8' IG@[}n3;Ei8TrVWapT?b2*iUO5s4*y,0Jt~x }JJxH|w+" Yö8mavyn;c5ȩ" 10ekpޥwug va8hmc˃o:{`ox^z}m u!!T7d>/FjZK&$ۅI}W>jTsٓž `~ |B ίo3Dkv@1g0Nj7i&_@I7$T&F clZطX6>c,v5;kǙc=e)eYvX))/;e,/2ʖҲ,Z-e+.eK$$^uO:Ww^c^w2o233/>}}}`;gLTgRdɘ2&eL͙ `f0S=#=5~6FmxǦA2c1C7[d?ſǿ埮?O/ڿowOտݿ?f#$uP% `avw'`O@`}z Ӂ@@@`;]4\tj,l>Z gYpE9O6,sh>h C  y /@}yB9iy%A*$T) J\j(Y͢Đ-%)Y6Z$ Rrdxq墇/E ^݌Ĝ1uh]둣67}\Xh@Њ`gKh%< M! ͣ堈M6ZdgSe zaG2-F \>]$CT,>| @| `\UWeZ u]W/Es^x'>`ݸF~6}OZ|Š)#st@~|ŠKqn5$A⡈K4KA Dhd4%\RBH1zLa" v4uE6(!ءQb) Gkb kS!lqvFd!g@tX -O>/@< 埀h`*Y 2H0-  yq..aqp -G 0-)h\\G"0- -- ,-- ,,,Zд_h?"?}E-Z/Ah>r||||k|K|+| {{{{{k{@,BϸUpr4db5i{HĥŰ1)1l0X[(v6,L&r|}y}TW0$$F>wc)(wL`sGySܲ> UfxfyMO1 ܘa{iWHD=.L{xm+1.GU0\Kh}T`ENS|PȻfb)KLS ୏4Z%XI 7U&jx8s5S%vAu 1M4j ڟ=e34cTzTT/___gɅRUK<j1ٜ)ed)u'kv;Cm:mH"/îg͡]nouʶJ0D ۤ#b! қHn,7iX?FQxnz[i*BUm@[Qp:GsPt4#bQۮ̓vʷP1.9blBTnY!@0Oك oPL#IJFsG9Sb4 #"sa-7iE{m9fvY6ӖN,"B}]}*^eobEzuHSR՜ Gm7iV_ҏʉ!%WS%c#Z]mememrklmjp <ÿŢ=|x+Z焇X&NBm^ij%~9Z֖/seI1F·V" qIfLC[.+ʺFڿ&sbBϾKϴѸ얕BmA>COݻ?M0@/\+P g-'JCZm;丙PD艃启imam9嶞A%mߺwIdփHR6j QTc@I@sm Wm~ )"1D 4YZ KEQB@%Ussy}}| Fܒ7r9Ԋ~nZ2.&BKLD5ôd_~=)9S a7G7˜K){Ii`6ݚx?S5ҘSdC|{Mxrix,TG5)%;KV5JIekM~9K6XXcFltm$~0:^K &W ƹghZSYgf |{6 "W1$z,hcI4okO!4Fir.9'V!˯9{q@%Ѷl@"ùy;3uR᭯k,^oJfdׯQ&=z1Y-x2a s,j<5ڢ+sVkLaT=}ڜ*EisK[ÜUE( 74g] ǮPO{C)_@6n/e3uo/Z=`?5e h;)y>W-w=Iy<3 56VMwMtqb,$ۮ873 bG@\bqÔ ^K`d nav0w ӞZX&-8]-Ƨ>ah< r#Klߥ'CS6YД޹00n0xK îxZ-gJ8.O-\u#Hʕ?qao$X-vͣ1kIZƈo07chV4Xpun-pNj͞;?ʰfi&CdChOcF'Z&ɇLȥao!.݁o=@V_}@jߌVdLpQ6V_)" Go|!0W`\ĒIT+tN刣 >E "$E!=3&@(AZ &Q "HR$gNMJaːOC18=)YDX}EP$&"Z*_bn/u~G?3QK7 SNgSn@{{um1TtUkg #|Z70`RAȠ I}-\x[zY)ɺ˄Pz'2oM_^8Ӭ%sWk7 je>.㫃͚kr^:Ps̹r\ȟu0 ,+F^H- 9mÈT \Ktu(^7g)k0:zv#5|O#482BKxy D^HY->pϝ3&!KcS'9deB~'M<{d&eؕIn~Z!"ܔ6?K% R~xYQ q8D 'a?xx tGp~9%FfK $b~|pPnOD4jDldFӉ䌂dH9#v@DMPPDtMzE!hرp:` IB"&ĈEb i) C Dz$E")`oh1h4:ED-VvVQVb{Bv_%&R镹'*`v;H{C|ӕ*$%&Dpt7 cc d''iN3Si43ʴzC~/7Eѝv3I].u? +ڭ/ς&ρ[|hN.j{Bs ->wIgsQ~jwC=<ס@4ghl48@m,6sfy-N`#Yް\[pg߰L2jj q{dbHol|G:Q#5=ϕ_\nc{TN*fG+sb݀9f6$NkaeyTR\40$›NRIГHX_߈e%1+ h>oE+`UŲ{m|}/YW{ΗRVyAcۻ +T#ng4:Vg3?DXyŋt 8M驩+ |G܀S ,Vdξk;=}Wh|Wܻm p0kmHn+]ѠOA;M|7T+n;+̠=@u{{. W2?dQ4] vܹn}`$sю67a֦dh_[nNо2) E{n},#s5矎9dgk{o,ddP;i.l\4Mu3{%5"K=$f3e)\4d&?SSJJZ @&҄ɧOOO Oʿ/_ ʿ}pC~IhC3 ȨdTr<҂hN(dQ~aGQ(ۨnd{~1bGhxq}2@v-Wg `@`?\MRtfLo='=wQ0@7l_n> ǏN+Դef@n"eP<3&`$ZzoYg4e@Jz'`ހjɔ@(}SEv`yHzF[po4kj7;4oǓ-;iɃ. !47B-lcZ)֣]@0qC\>  n-V)`HyYI5"B0IF]D$>ƟhP~/(oϮPN;Z֎ҷ(?Ox wN #Fո6P"%` VpG6 O =cCWp4謡.vXʘ)ŲNyY` ' {"%lg:<jˡs˃tlM4d}4PS47xCu GV:0J!RKNpo+`jOG)ƿ1C~@I}c^+>bZ%c10Ɛu{!{x3ii4c)+6mltVv&=7io-]hU cpZUt|o@ەkƋQs *~6)@Fe84C|.hݪB0`ƭ6&),ڱ }0|_s5o ȟWQ-1=L_PaZ `z3\ }^aΖlz.h飰C%q1>zhog]¢_wITo{õI ?DYDVU2c:(l8HFUѺ~zu#=g7#?0O󡉛kE4b$v؆qDgflFأ_H@Vrt9.Ч 0Bϒ56Ѕphm47jme#Sj޹5Q! lZ\w+kgx\reC83~05W7 !]=w('5pxpw${nQ Y͏.Kˎv-p-fFAŷlM(jk*qڭ[-k =7]j6V&:G5]髧WZK¾$,&  Bucę=;"-_pW?Z {-] O\9@q{Xǒ[ *F]:z3 $TWY*Q](l|CF:0l™t \Nttu!4}ޓ0 Qp{a2@ɺ y[+:AdNMӸ*W)ooNʗ3ߊ!eҝ)7W7;s80n.vx#2o=b+OuyI"@ EW5H27cߙV,3ߚB$N)uDT%h7Fzg]4ڮjʮd:sD^"TF1wG"Ǣ êz%ՔL/NJz{=z;uoM0)\ 6e^ǀ{ue3k:m)z_jgtwܞ~ ߯h\lhk۳te ݛ,CdLt4nqYwܛg rί}t wwd.xLlKE"C]t>gr]w_<]۷\=?uɡNջAS^;vn۾5F3w1c!DGhn#nq9HÉ//ٌ?"*'yDyX80q_?z[gq[IKZ'?'_+uF]`> 7s0pD\XQ|Ⱥ\g|7߇ M ]^Tunы&~3`* oNSB 3Z~em=a| Q̡1FgȻq Ra@Jz_;/w))SNw}_VwWVTYu;Q#Tw MU(##qq})7ah=dG_]3[vwߙֶhޟWł~,;o`Vߞ,>[k Ŋ*;XO{{ȵhHvYX*| l@M򖿚oA--P-+PohS|{GU x'shg__BĦ+ih"h]똔+XGi&AjdwxRĝ*Ⰼ"l ^/R QO°}LbXL\$+KU|ޟZ-OO[i|,6A:pCj]2tmzm G %ImUM0pa%Dpp,G8Go~qӠ3!ݧtFB? 5Z6/~f5 ~C7`y9 FƥHHɑK6F=(&mޛ؀ꢨW!ša$11a&HF$L P.b"a\!~N;> #Sz j,z)@˞@͐6,-rJ!ՠ'&)-(=zދCcZPl< l5BiA袟[j 0GhlJ ݍ҃cm7VTGqI;XuG;LTSw?kmLx+y<ֻ˝;ڤC Rʚm4aWs@$`h$ j)ߦ~P6 Q9l$R"Dľdƀ*#<@i6 @ 9IXUx"}/'3xsqȌV~") MHU}[]v`Z] t$)KOFc CiT*.^B;RU,%8*_]֗^gXll8I HiS.lSmdLr&a5`:64pRȀ]$&=kha1 te͎be= Fs[!2l @v,1`5!UETdX0/PC@p|Й~M]Joq(]g?Fi )_i?T(-۬/&(3MHi4pK ȦX# BZ^Fz]hVB x{8lj#CE^"IXՄk# ]f 6 dVIe1o籉=9aOb)coO\ 1QeDMpc1$-cAW R򗤘{^~,y2(Yh@osRJc v2p5{oj @գK\ RԷ/%)rjG@;`w;@< e/ Vl"w7)UuJeRқl[ކݹ"5.Iԙ@SiDY7z8CY(|ṃ h  X:9P)fu~]"}{pyT 2 bd=++PBUGl`!z!)IQ7dF)X.,ir2'xD)P D WeOSFo'_'̻@O Bn?c7rUU YI93NOٗ]cY3D{ oAĸ8jw;WW4!FyFiBpC,_ux'WYCբV`A8m_׆Ktz7e{0Wly"'O&xTR$G$cN{VcnD0{&R~J'r2M2E4IQfIQxbXB D5NyJ0^4t cObX=u1LN:FI9-.8S$фH !بR(Cq]E#ʄqGPS:2Ŋt#LUc`smwɫRT^Ԝ 2,z"t }v e>)^GUT(]!Оۈt ݌1:]x*3mhsȆ5:6:ؑ8tG+n(WJ!jeҧn,㥛dZ6O{9 柡Oo$3~c@5is7C3}R8>{Ȃ&΢Y~I7~p ks}4!R>oQt:A֤{I{$Z}9͢)6~WRpIҧe%QW;DO~4?>_45Z~2=U}vYlZry3xS.}e:V%N,~KBޟQ!/:RH@;߇͞:uSh|<4>cC4>k `l #Ѝ=Ƈѧ>h} h} |h}Ƈ h}l (ϣ3cc[q~G<1c9?J1Po8?UȱP |f?JY_|F?: #[I>ikӋ3EyXE򍌽 (۹䇴Lx;~M ƉNhGED}YqR28ޒ򒗔~+6 򓈏=Uw\fOAcB򃝰rmXAr)<<~n_ rs:瑏"mMvPI&>%&v?jmy2%x%ڭPOu`[=v;j nob.^ zDR0LJ2wtpyw`l`@ccP60zWo>~?KY / ZwRF#Yq$yRhsjCc>ל ':Fr^X|zBGGח1:!h[b@jA8C̆ԃ9ZArz_]$KunԿn<$i50?01G7ޠnKO/xʌv#ʱ+ ; G01EcEQn:sX ;O{cJJJC.$1 @5/1ma|) Ϟ~p(^+%+ wT1sr:DuwMHsZ#1DsyM%s^+n?WrOO4.k-N?ƿz^OMz<π0O?>. ~wFipz""G^zgD|+_P}n ##`gU[1^п}=gӼ$^KCAF5, ~XOgS/䷞2_g\]Ck;:~އ4A~@~/5*<67=*W%%UQQI) dfe(Y~ :^_ԫKK'Fr ~W08+O[~O"8~g7^o+9< }>Hs>xslnAһ@?sl0gsg~\~D.Mzq"[I۟#=!}!zC%_XFȲ[dδ<<(o{N^.ZWt.`bdf!2@Y@gw9=Z7mA@3=]ЧB΅  \{h YK;|u~?~N{Qk6!Wzm L#pz9ɈZFz :tk2Ÿ 5]P\[?7^Ow$7O"2{%F:_d3mQ;:0ԻH2FY'S[BI:ydzu$BVCX?ZiդB^gO E?]'IQne$2M ?΋I? O z%ou?:#S7|x??5OƔ?.;`"aMa`|z"B*x{A'=_@Z?CՎ;Z~MѵSuGr:x|N;ho1}o~ZYŽH?KZgw;Grܡ^U/-\*eGrDGL|;i/$_`95Bypi IOCo`Hz;X"!Gq\ := -?Trc+\aP}a&?<.Nt}oQJgp,̨Pd}dw=Pd(Y{|;k #i2xևQt- 4AD%f'.'2rVKԑI>?Fo`)!.+`*`*xdw1Əݤv}*@!VRRi!}J,,Bw'Ew@t>gxhvn8wIedx[k"Uס;h4l2Ak#Zw0Uɥljȷ"Ue*v[ުv:#^&i)._}%$ƚ!]$=2G$H-]$O} |]H鎉莅tP9o?踙y=sezDk0?-J$,M-.| T:-zR};㡇ҝvH}7÷Eip;9 }x:~OˍAA$;pn\3WŽ)ڧ=Z)/ZLcp24 ?B؟<7yxcaC<p:^/ HNJ'ƠӤ;p[1@4?Ld4лm b7_>MkB' E}$H$Ɋ:B"*\1uyʔWֶ_t߾ gWD'iY+T`vd.(F=6WX!(~SUv*c8UTV}VUW**eYU4J46SRNME?AOLR_~WF#cQ|x,F#qÈ|Z^:[*V_W0WW۫V|E5kK]3;xDf21R((~JɊQ_^D_ċ"b;]_Yqeqwuw1m7DxhwѾTkhnzəc!EX3ҩ@VQ;rxIPm~VDԴ׷AL;a_R*-[i5o=4V!x"_C!x}MM^ʺ2Q;ęĉZa<1 u鍘ir,gLcꗺ~F"bwCD:: Z_Q,ڴSaM9a..J~ʮ7Ys+Cĺ|DV8u)jk zgŵQ%@Ly6k]3gٛ %l 6ZEjwol`A2w?WG85īPiBiN[n1 JEJIC&j(CD}"c8fMGW33.N4\D}M^Z4,CwaC;׺ix=3^il%@4[. J&m?nflF*p1Y[ wMl*LZ5$̟k8Eprh\@S+9}y#X,FPZcu_Xǻu]HJ5`o w#(M9|bl ,0hm>r̙ycS#>n|23Osɚ_2$jn_lGLbv Ż,5?%z{=M<͒v!}zS xY+6ÿW%w +Y+ g^D!+A!F؂v/K+N' 3_i}"!LANy`qC<(c\Sȸ1HR)IY/d%&a8d%&Iɐ+j;WnjT=@%ȢH$B-r8I].#rx"5V3@reL{txp˄p+8LMۄ0FKB` `v gCkHp H[-ofXFwpJb,W>%uuuukE[gJDIiݒӹe:%.[,Ko^bd2Iwu|uWFt6!5<%8+zF#:a)σi{gL3 10l>2Ai9X%[fDMёnd,&F*B2 cb!`-paFU,]2)+SuIB?V$6b|l@*UR<,ȒX N;߸Nh(+L^>7~%+5:Cv'e4&sc),k,;YHy\X\k/kʀxC[Jki3[bMlpF2ݹVA .sM[ٮ#Sٳ<P[َ}9z幵I<948|%GAcx p7-׵j eCs>i%ڿֳ:OAfXx/_ha;rZFkg6XZ9iLgc e?`w,X.Xu"q6tBnoRE2207T p1bӅvbEp_o-EY[ Ӗ,,::YpCnmN en [ S`gj=S6Dގ5M3~k{uvvqel?ȤpJtܴŊ%&@Z/dwHyno++qrΓTW&$Z) ,T:广x, -q:!HQ)r83fA52kJdiΘjҘ<^#~ڨpz%? s}W&oI_1 tƸ֍/CnuRߨ4lOc~`׷>9(LC:2&2DxgCq@ 7k+[!a oՍ=Ri_c|']%e"kh+ ܵa~2 ?G;KK߂74k ! 󈭡4=Xh}f>}]%Ώ}t~_w;d>oܭ9d'v"cu;؝d)ӳ# J$ש |4CI*8ʤml7U$lAFFI鏝]ҩ^t),nmY97ZG*Y?zTt˂!HgULaV80"+9d "ʊB/<n9[_2(jފBdɇLrdEӨ*jGXׇ~2yePdk|:-3}o0jacrL 1 7:KXcCЪESQ<&hx3NYYyA|d|1Y*j-?=Խvdk)H1{kKbqlIUyv siZXI覔8[8Jrӹe  6zeS 3; +sV[Ɗ: XLu]3UH*Imv[,tr%nXڼ82 1r;`r܃2}jqo yP]k6K z54*wr^r& NQ݆tGy/`2(M"j&/3 &šJ15[G0f5ü#MѓS3Vdԁu&,&z;[k 골/qAS\x{oM/=XEx+h-GbL6PD ENeqVZn;Cl7KqE-,[F5eҙ0fw&Lnԙ5ZlvTَNyY **.iBjs3P!ʙMlwƝ1a-u/͔چ"lֶOsY^ rno[K*sb!b'04.t \Wj AF2Ut֕xJc+)rw}LNfwMݫs2 }L3[ret3*D`6+ORdU^3PkQ*ʷI ~QP5f`0~<̾~µ a2@}h-?` epPBŅ3nO2DN9ʋg9ʛio *Z6!sƶwi&ڂcMD`ag.fk2)B-ېFPۧ3Oi8&Xz3[?Wis5ZC <A¿?T=8 @GgUҩWYdܡEUܬ2n$!bX6No)FD"Vt3MLHd$|Y2ȷ%"HuQ*.$W&aȬ;ME& eώEopTN"r(g1$&cd$QFE8w6r&ha?R2AD^#Oޮݮ ؑC'd \B$pt ?  U jP>%eUc#@ݼ3iN ϵy}F]S=Lr@#iU86p^hބ-wߧdumٕ6g_Vakl&s;䪚2bd͓ '%Feh FnK uy˖7fc+& \ e6uQm2kx][6e ў-͚+}+ >K>>G3Ia[; mu?wiO/2_Os+jWXvA zð#[a:"7)$`]װ (;AC1渞 |mMo 6H>Xk+)ylüED )Lm d37-FTΦ qcYWf&WJ@vm Tf[k-'% m2XQX?`N*T~ ѪlaY.r@X\M'- gr`4$MK B=HABs𭌘\dUOD\I%څI_l;f,ɨ̞ jh"wv+.쌢ʝ%pFz.ٖt? l 7#FJm]MyuM_a41{:s++60g9M iܥs>S/{ۊ OB 觶vbQ{^&D<кSm"r6魳m{GNZ*詂Os=./tV8xWp2O5m'YZ χxv\. pyX(EGOG7ɘ3wA)6Os0tKm&'K+ب4^ K+߽7=2ݶre5UnjT&Q</m_:Ӓ+Տ<sc1ǝiAeyh ;jU6B:~3ԥI2_Nxm|' 2 k"2 vD$A i$~f(1|u\6B9ûrzowx4;\Ʊ1Íוw=aa9'26 g P>{xjyU|n|zr-9S9_MX#s9rpﹷ2VH)bd9 R?ߐ% yW\fW6ɸEguCCHEvvg>׶~rn8gcR}u UY]{ ^.H~6;an#muhϲݴwIŕ]{'8Y<׭iv?V4 ~7{ڤ(6 qm:$j6}f7l7k*}ϗWn#h%ݾG;棅5эp_+][5q]Y_/L_R`X9,.@rZE H30|sMvKhfLP|'hdNwU;oӢzBɒr7Ą8j#m2NN}Ü}d D y媖JI wGyk#n$q9GNwYi3Il$~K𥉉7lݙf&ć jo^$?a9pkb `]')kLɅԺGfDN6=k_IVJ|ήNBHx*&vҫrFsAq.1cLĝ[h_yLf0LҎPlAA0t 84Xڋ:S.mwTswa+䔺BO T&8W0*Q[=v9 ĭߌ{Dtӝp1zMq'xeݬ51b6|2ۓ+.33KW LYAק<{"dƏOӍC#ѕd|݅{#8GAEUNi7%@{?$'S<a(3La (b5}i.|Y` 0ԨF烈d?O_Q"5rHzbdr5(+H=9x~#GPQ,B G >JEߣ2"8eqoEZxX+;'3.I*:ٸ^%]dz܀$|gu?I/6" '0ƽuH#Ѓݡ{vDݠ%h#%*GZ'Z{Bƅ<|iXv̷̋*6kAE(h>N?)'"6Û1GNk3e3,3  ~p'7dbBg'jPQo7g#g< 3Rjguh5sA$R3kHEQ3v&bi&hhSZ+Mg2鲢'9=VlcBggO53QG3e$2Bm;kGlZ_EAE{s<ʴ2'SuT*WZ´[% va`DFF_C/CD?B埖@" SV+^c8N8A d/V wq\ Y`HT,>$)ҁOORf d,?Xܐd h}V ?6~\ b,эQ>,O wC̿hq l +^ XVEt@EX"xiaaH p2uRp P tpVd}~~d<2^ GOcJtAUߚ!̛ !ipV  )I%e?(LH\uYm..+钙T."Ӥ8ehgh+ҽvbm _%!-lh5-0ms W31-72B.DRV'ЌhҒwۿn˒\`KRDBI-,!K@B*!F"1a# %" +qH~$rHQQqw3qw7ꮮʭڭή|k!ڭ8r͊ ,D.J+lQ)_,˶ml]z9峲]RK5ͮgW2^6Y[dZ7W-?a?!+ TX$((RAҼά_ m6r}yx]^^;u\hT7*p7I~FfOsydE=K= +NH SB)8ۦS5B`S rS^P~)9aOh)17݇΅3֊gD  P/_>)E:1O`pۊ~ȧ&S\-egr h&S?)Gt8sE6 P'Ÿ)?>8)Sf?|S'QE=z`p<)׊~pS?[:N&S~x=X)WT)q"~)QM T6h:ANSʃ%ފoSzS75)./Wq' sbS {qMĔtqȉ!NSOhqXB)BS\A:!Oڹ$1NJžWrt›̖^Sdz2NsSBxyOe z aRǁHO1sMq(S4b,SxAMSJ)4œDۣȧ )Ц\?to7O,vM ԘNS rwR1E9AǷ zN)pÎ)ĄGq#?ɝN`wMNdǺh 퉔D+FIaz=*$_B2hJ˱'E )=jPg"]QM!D']R]'_rV@J69BAQE<9(`(? DŴcE CF$ !MOuY EH: J:(Bjydhq΢>u{#A;2 }Fu":>q)fCAOget5Q8,׈MӲFe 'OUqOIOuV47Y+xUe#jr]`d[.:KΪIzXK~%2I2do{ʫ$CU+U{\y.mW6IĒI7ھNOuUjyK_q"}ĞRO3djNr\RzOȈRstuZy?^ٔAkWȁ*E_&)le5jd+,l,./ys^\M;If3ҮK %O~ b/nZ޵Jل&ʡ2-Xw G,;&}+*r3+\ښt$ƴTrUfn1f4P䳾^ҮL+klv,O,'^P h~.HNOY ܪb<T\yg7OhL-c+kNsdWrv+d"3ddԫ>!ёH[@OwM7Hi龁gӕACpeP |Q/Nh CH@TdBdi E"4Zd |4RZeCs2b@KJ.JZYk-|M$bI] U\ҩU7()jś( WF&^٨jOLI6nxiQqݱNAuYQZ8U$tOKP4P>jrEDqqp $)X)@=sUv7 jbk\iysgq{o N9/GgA5O7@bw|oO^JJ~JˤLorhP:-V [Z&L%@BW-RJ\P*һgp4LY/<-[S>eMxFF[Ֆ |{ag^c٠+OjzEu}?/LWJ^m7Td 92^YGrSiE"]-z,PleOOǹ6\t&Wh饊ۥ+`Vu|~BS|Bt3 *Xм?%2y.2K\%۵dystLGNѕ?[2gvR׭#*f<20 *"Hz9aLpRmqNO!VԨTi},jT 4hS黂 (N̠W[,W]%wsvNԹd:(~wplPKa˱Wce5U(w+Pݴ?%v&.W@F]]].]k8׳6l|dP5XY~F( @nbg 7SWvHܐW3iW<3j ,ʃh_))%8"?y򕇲+ਦa7(7j}s;lsf٠|dP5Bv NAΚlA`* *UԢ!P8Aa0\qIHY7 AƫjhNƦn`s?d8ȟI@[lAƃh7^8'yƏl@bM`,}63 ^α$k׳jٙ8՟؝\8)=yibs0C-?`d<6jYsS wL*OaRs l*Oa%r$tv=*h}&E(~ːi{i=564Vz2wZ;.I2 fCQ/ņkyQ3 X(F1rZD1@W ^u;ٚ$-k(_`qEGSJG(MSaJq?LQ|[0z]އɺ%$ۛn@Ypv g. 8c7q d|4}.)8І\ 90 .EhEkZrQ Hѡ6nņ2n08:80:W#[HDZtC :]H0A&3q,&eݳqnՄi&&ݻx'h9ak 䗵ڸ'9)\\? 7k@fy3?YG 0%c,)Fxvdr 52o~|EG3tNFXwp zMcZ75z:$9Jaz(uI #s\%2]]Q1ësmu9䤸hMb#5AԚth` Jk<}3\8awDX&֓q!^KZ>em27Ic%?>Lӄ[UGal pX͵ekdf=΄K֭*-@a<gᒮ?[PNhbk7B:BT;Qc=8HwpIiTUs5r;}I jt];v;];zkj7|ź!ݰ;tm˴*+_T c˵ c g +-Qz[v! G(6}+_3]yD[C};@ jkAK)ۓ6s~NU8;$ iQGº/c9y#u ~Ni۵}o )e?C)0oa?d2!6p #5|a I@6xW_?+_vP;+a%( &p?:C[<Xv#BРi(>U:gcXvᠮ̈́es /?^a^\D'C f>YY)Tܿ ZA?]YWF1jO$HPc\K* n>=Z~:~BIT$gן#،ğ(:@Ba>D+AZdEp]||u! }Z Ⰼ.F0<>Y|lcStgUBΐ״״-{LZ u1?J?+:.ҽ>k#U4W!h3׻OJ?+:.ҽ>k#)uӔ%HwҚTtq9D$Lq7FXr~Bbr%tcǹG_H&LnCWOf_lPNa/bGihpY{R7@'{ϡidv[ ԅ<2ƾtx+_#Փu ؟r Ƴ4Ä,Fu @|yה}Ԓ/._Xɭ!^k9DqeK.Ƞ}hvN7Ob(Ӿ̈́~;7nLjׂ}ksHsD[>_ш~抬as~<.U>8(&v<"6glvs!ڎ̱c68mk;jvnOYx\~?H?l]ӟ`- lf[GA?KOGRGkni%qhKdԽ0m ͖S{%+)PzPŀ~n"}&d[,KV KRT:%4LzCڔLm Ra~DJ&1&2CTL&AD<~Dƽ zDt~zbl~:0$ &%{記h&4[}X(Q1@nWzl?͘eQ0YF%g?0\6 ZqFvhN-y+eÖ(gA{4cn3PUR-va7̠l4F4bnB->Db' v71춥 F*~UJ?Ե$u@n4Q(ěv$_Qv#?"Z[ A.tnf1 ȳ0m&D0 L)%t@I}.4YD\.Y`Âon#>m*G@K 8%E@0-K:N˛x֒JyEK_iq0V񔱃~1YKnCg):& \ @Ȉ @pԱA>v,}?HkE$QP$e]Q13PpMTS07GEZ8-/ T$k2ysv3i;$I:ػ{b}Nͤeѧ.Imm1?{-=$ۣ)Imcq5NŅ+ *SemT4O8]I'%ypR(]& AgDdjZ94p&f.5 3 _Cfϳ{&vvq',O yb{iXQ判ybL5E 9bh,ybj ',MāBoÖ&0yb[&8ybM,@(C@NXtybn( XZuTr5r7~=on:Ϳ|~弛2(d}ǐ;ui;(kgn%cĺ-w_DXux&K "e(XrOo=YV rJ7`mGaC6$` A]NE& e[9Y2zs0WW1 و6(`p'ɕVr+.Q/vvPWWE}PWSQ3cuy-}tW#gu9@c>^_.$^n3E'/ku!xu/ ק -̟Qǫ"ЌVC˾uSɸ}rn.\rR.QBKyw/}^y?_< z.;MM;ˋعL \EM'-7"Zt uG]͸%#g.]~kxG\CK27{FiFҝz}} seilm~.(t\rkj6o6E7H3C21Ls,v.\43O Cbw'y(6H6N7|X}\;oT `K׼(`Vq=yekھm 5m|xsVOp}}»E2o3hw'ܚėeHK-1d<#-x&VeF?KU$e{R*d2opvcNTM.+$^o& Du%([ e7%li )7q5@ZD_~j[i{}2i`4HPoc{o>cjUfKPLwj\1FR> :=:;V^GN:\y}O.%h81 KlKߧ*.mK&4v?Kl?9MI!kHoYG,Cc׳f4‡XjΕ?b.!+hkLYD3=k 3f|AzNHD-a4D-]Jh~!"Gy{'y5t?^0$J q:\Ftr*23QYjfd~%{ E6εluIMʚ,'1apri-ڊ!F8J84-Kc=8Hwp͌jh*PqapW>ń?TVS/Xyt4vtc6-NC )j+o(`mȕmӇ̃pjS(~B@R-즯'1Q3ǀ@w>`sbL_Ci| 5Oͨjk Rd|Z4(`R1r\}/k:Й**9Vaz%;5պ \>leN&vuè`E\DH<DeBs͌s~dMrLJҔp|}*F&zҋ\ 5#ImDL^ zYioӦU -Z)zd.;/ee>xr~jUɯHB?yekgOˉxK-%BovOݹKzzL5tQҼ#>cH21RUl*eSxA2mtemv-ll㷞6g~]jlr6Noc>?b<>$ګ%U̖יt2Wr}eъKZv2#?)1g6l\2F2rvجerVb)h-W ]x1VF~Dl؄b%8J2Y]-Y(fʫ/G +1oeU1 Lse3S++r̕suW=bf,1Y-x@U{:V'%keo( xU֣Mφ4 M}s uʴ5^,lj!}ܮ}1=r(}GWq \{m45x.tNA .etP6rZɰWC˗K3;rb^r V4X0Z>v8hL.˞t,0)%+3eUf,qEl['1Њ4nˋ{25֥d2 Kf㜙Lm+s#&a+)۠)0miR@Ig*z].AfhdYńYWDZv!+^WZ&QBSc,2Sk:d]STcL%vR |~ 7gd'y_H~;2_#ŝwdAnD݁DҘ`7:z޷k)/RBLe٥&nq- Y=,!F;N~2@BWCo ~mYB+,߉jzw%;1xcqnl OaL#Jfǎ!ϲp<*]Zbu,C[~t T1q mNUA>Ѭz.cyOХ.ÂSvJ4TPoaӟojoEr9_YѾkx 7S2kM?Vݍ2ܻMKCZzp2nϭvA\f2kc]goB8vtݑ6^BI Q'I Np0&.Yml+MP2rJt'kE9U2M{C9 ͙: fPд- K{,fШ@l3N&2v9ɔEǹb9k aM͠Fǹcܤc=rg4Q=փ]!i40ޚ5&R/چ[Kl'bV|=2,"bDQs7 % 62PK1TxyD \@4.Ⱥ= 0>ib xfsZ8&QTUN\HyclYip&>Q%^Uit$Õ*J,N~>$H t۠Up8('kYDIcV 7h cCVh4|l}bkc{ÚnޕZU#~|Wvɹk S>=TB)i'`ZH 2 rFAev'0?wf)8<7G 8&lMK6XL߅aAWICo+5eFKK7~ ="'mPѷM_^oR$#s7=.)p|%G *' 6s.]p&ە\i,áxED:`Jhv'o=ۜ&4`iiwkaGv|-&nB*N@N{Trk-U4 =bTHEu ϩV֭nU؍[}Ю'\ #0p!$R;yJv`W]c+hnG}4\pE,9OyTk;O4>p67Mᒎe~<磸Udt"D4d2IH$w$_}]Jsc 6*mEDo}3 aYa6n)0/ MEg?}WsIoe:[ɵvdZuQix kEm*aߌwxZnMLٺM&7Pambns>; 9F<ꖻ.n?o(}u ]v誩t೐{ؐ]+J"75 [@(\E<>nE_[h|WhJ=6,vU%"hxִE6ONٻVu>Ŭvf va+| " j@"(:;*=vyEPrK&7_[ UN.  a9+}YThܐ3eMl. LQ ;iFu)j`9F Ϩ8nsQuٷ5ntKa3mOX,R>G H5cVV7R* g eGҋ\`l4Ag Hn~#kL=v7ĕjl#qH%:qVhbN,1H)js] _`s;Fɐk z(mlCK@3Z3ٱG%P4YF'.z&|b*#iQ-kӍvF쑺CoyUA1z!\R8|5&A(N]~QUm*҂[7g҆J)hEH4#:׃BWV*2h ," yӣ%;ttAPH \Au:Fk=u#zCD%P4@vMfyEGj }{0U R`+ҰD_ZӮžyv!ق~iUTo`&UN BnV߈[=D5 J01bgv˵zR_m^oi0}d2cvAW6}Z~x$4c q#doCT! FZc;"ڞށ,Y]Rٿ ᑯ y ']颩9gݤE< 6.ajbߟkg_Xӥ#vHЖp_ش$LIW2y5eBR[Xc*o:N Q9ʚdp&`/15jaj /PDڷDy<=wd5]4HĹ!5Z*UxB ; [ 4ے3布?JڋK\x"nP:WCgrzý)* >6cس%ߜ&nejxC52_+z&Zz1m_W`p @mC(\9YY5ոhR$-yǧ֤Z=iXz֒/K=OQ/ ,3b>lYQY֖zjF۪jscS|Kv O3ެoᡔEsb+QҾARUA hR"tbϬ"B杌LqCI&;mKvrOKJ NƆM mtIj罘j:-uSQl 2Z\-3}Y,U %ͅƣP.EYZ pf{kj^wCR$UA @p9#Ie9 J͊`Ȝ#1J' oCh֟Xݤ>-);J`;9Do7vV2A*)Uo;ʻ&2ށ{j B_0yFlJRsM4HJM 8Eiv3 Ifi0QLio0ёFa 6ziu񋑺)F1<*c"D \q\_ f=m ;q†t0C(aC ;#oD/(oA̛w=2!NvѐR+c!,]ȧ0QQcO tF y܅sXFA4ۻ:FՕ4[^Zs}!uTHbhj;RmIy_h@0=0@Nő*Rj3V4WO:`%\&}sJNc:D1=U;_y~/o {R?TpWaҝx$'>!0K$'II/HשObS/b89Q^Gv͞с(cGF#2on3 `0MLFJº?; 80;ು |/A~Àj"䣯/E]y3esAfkd#h=8n' .Z,#o¬gtPzxػ)K߮;([*M]^@U:̛?60QŽ:|V|5ܣ6q"h#*icÇU C|åYs90X@ԶI3FU- JJ3V3C">yx7ihY,\_:j;'.F6P覹WNj٤4dLSյ U̾A}N.tM- y1+;PZ;!BtLtinOXk+Y\#_jo$jn:L ő)aC D8r!"dLZ(Y!CD_(U}(?@؍9ؕHe`v"5)6d}#ݍ]vۚN4 QtԖjEn5;FUi'rFv;SRg5M*- 0KhWz>eZ1U²4*Y_#Y]YW,Iupʸ Yj}.haK˝ a]fYօXtp0 K4EYGth ?Ĵab 5$(D瘉ipb& ?xϐ8  Dwad~0#v CT !qdtjFF~4@UړƿߌokX*Q(/6=,OeBK,ߒ#StROov~hO~m/S/: guCR?5!CDsBD~}"_sC$Q?pיv:^8_]cF:HB"@v\,?|FNw LK ʅ|OB']slM9YS$QHnGcNYc՚>܉\YS#cgH]e!&u20# q~P}dZ8&w08py,TUl!f MrٸPI١dRhJ0[f,s[;<i2*E0:#^t3A9f\|KIQOJYC|UՏ;,J Ϊc8g!9:}D+f3B>0 8"C r-v=U 2kgӂ]DA g\-FL)66}BsȵDjv)lfțŐ2H K3p:QH5)!$ÂndQV\*琟]ay^[ݢuʗ];E[6$Uh䖔6lˆmӨyuiþg WQ'/9r _ْ흔pv6Ű ɼ+_+TtFp|VY>ruvj7I9/_YMF \VW1wERȀ$ 7$/iI.`.L$LfX_aMׇWLeBgQSP8Q*N}L}fY&/d.UI?B:4>21nUnәK |N 8v3>l0O KTz4'÷ܦTpBD'C{v< ?e7bj64*„|Jǣ WwUS_!EƧ# NލӾnv8$t=e2uZHb GTft֐LQ|KJ%>|qUyV:7Ed*_*qH4F6$mXB*5UV)n\p*5"^,6l^3죅 o: ]T4ahƉUB:) ̹?M"S\ Dh\y֩-ShO0Ӗ7v{0W,|Vz4*\"IGR3lN6:%!*Kp  bt^*ҫM^~zM42`߲8 h֠?Tt1/z >2bN#C&kq@-$t׺2V1 tۇ5ΖT4!8[X@ZGT\t E-re `Ns/i<)@+NxTA•a6QΓRIo>Z]%@ù/X] iw}'jҀعBtq9 'IxNONn=:1A6o)׺@۲IN@|/̿GoT Pƣ!`3W`JUsƚ^ii.K4N0gڕxR[}f %O72*"&[d9.NQpȬƐ9w^\Hy6_g7C&2GJe BVܑ P8CP(e~PcBF BT 9m/2 @UB/Sk=^mO~VߖwHQ3#rˮ[KH)\ZO?p[M뱁_Hϟ&³ɯʘrtJ<~]-F` |ǫslDtk W҅S5?U=(|MʉcnT3̩gS _a8<2ɋu?F6C9&z@Z&{p4~oIڨHڨfN$:5~azרg[z\__`50‘DπF6C<70gR&gm>`%!C)_e^J_Hw.&Tmk-plS1O|H)~1C?\~;FT 68'Z՟kÿV #VMtmKkkk{Cau9!nomH ea*yHL@DBT&{S(U: &S ~soԽe}Jwףwv-CJm_-^{lmz-?FC~"pmGz=(pwA}ϟ+wF{>\9lX ¡_\<=y2/Lj*?G H.::pE`8/.&[A9jCH/QPv2s!"vb%':m#vݘuj[k:a_UXǓe[ꍌL\3Krg wQ , mh嬷̓~7e[ IR%Sn)hƩ6P{;C~W8R FlLp(+$ wL~=OxSgmxJSʻ"lC.&A BDv%4yUUԵ2U7)\LmҌQC|sOS+L+J>ёB 5V''wx a5m'U.GѡTCENJ J́2<B4ZMY%)QU4F}jzs*FΰӠ`8$T SL9M%h MrBeJ3+Ѭt]$gL$3G] RH1[ҚXMw'x$3o%%Cc@:K+Vp' '?-sxw0pcB#иAoB9i=ֱF.BuFm\ d +ArIIߝ¯ΊNpI~-ui6#[9G; ʂJs'-L^ O#Gbz_ʷJFL]Æ[1k5n۝Pm,Dejit=e2 1o,W oTgX[:'ð#\bDQkxet. N 11SM&f+ei9mڹ91э; 46dv43]w|%6!e%(Yda·_f3ؤz+Wa  \|}!gECB&&kTx"YNMoWУ,ڄ(YOpֈ3 Sc~0*|z%Z{!tea 脱"!H /eYsWh?ఴq.2Mv s:f996 DώvP\$+ C9_i4n ItT頂ĸ ih.XB&_0v7mU/uF0{<#udshL6"Qj 씰[r+>d*Zy@{Zm]/E/, l#tiϝe̷ + uukyiXGkSدM`1\:Nd2\n\#rq)+]e#n0Bpln{AN.0&? 7=DYoS3 ^.@@c[YN?zSȳ+sGPGY2~ FfCqhIeAd3o8ìA)}.zІ!HQ|tF] ۷``m1FOE_K/ѸPOg<>Yᶻ J}t fRmɭ~/UWr (;ROp.LSe,ܒ?E9GU*FeU%!UP^w.AH-ߟuE9͐,Ҩ!CgPZNH͛Ώ]dK3w_I0Cչ?9=DfFzfk>W]ϛ@E=JS";p{{@7 os R77n!AoC٧W@W ((bn9Ig<맮Rѱr؜ezUk 9Vv]r9V9T9W/9V?9U!|Rݟrtj#d-ߟ], \ :실sȲ\+EfEA\|E\8a?ߵ)AI;|ouζ/{zޙ+$4Cɶx|9 er$5E &/*CeM̑,4j8ܱq*'*[rρ8eֈ-e.@h CĆOl: #q w9uvr!΄*8 󬀸C"r^bz[[@6هm2^.&֊$H.g-Da'Rs7uWd3_R 5NoqN{jHp E+[MOpn[ya IeZݢ/RO#S|nj]O)21j\?H^suruL s(wT9f7gz:S)}79fuAO9<{fc0G5Y=Vxܳ<7Bιi:5oxܵ3C A ''Nչ ҫj=s^{SR%ԩ*fo-+x'= 3WM'E4}>ǘporC&#! $qcHa4 f0s5rNG@%٧`1H7dp$6F?<3I&ɻ:o.^uU^j +y*69mW_%Vԯ*U++[J/ԯUJmq%ů!aJ⑿"!UQfь=ǖ)QT5Dt  G MyC$7qH@RI mZ^=SEI@tcs=viXqAa=Ga?a>;N'ss\r}Ŝt",e?kt̅U##=zgL)#!p XtJ$2zIO{̽|<Յ(X\a #zZ@&n'qΪ>ǵ㞉穫=ul!C b;cz&ę0$ca9 9:e2 A:H+ZIRBuX&!pH,`"8ۤC 2Jdz[Cx飥# X|/ ̮b>*s 0Eyi?W8E|߭6>IΦ*M{ۇD=5o5Uv9Q"WLRQT^ܛ>JryG7VHn|N'{g'd&{e{ 8՛)M9{)sQ%Un ՙsz;?NU^Qfњ=ܗG63չ7W EuDHv;ݳ3)|M1-{2y/COװvE?V.T DAҨur] dpUk7Q %6a?40/{ )=OsĿzֹ/f|xM&4_z ߸+3y4zLsono\sD. 8𬳳|'hgfh`B/k\W@ו~xz㑝kf}o\kHx 3{2hSWX'Npa_+$xtHC١LHҚ/QG Y("/XZp50"RVw qt=yTCU4=bg,{<ņř6 HpUaeFZt,Â\QS*4~oD2ʐ@˂Qh@1+Qg;qDC5ik=TN04gZӽTN/VׇeTK("}+K%*^6 MtiҽNq^TCLɻ2fxR-vgbl.n喩gbl׮zH3P@S"wMr0#>h:Q|4_M#0/\jE♄PIk2+!qjdɳV}wUNasf) |C nS29Sfxr;CD]&Gހ˞PPZ{[:E5wQ:s}p[)-3w ыwm >NɗHPO4 4hh\ WɱVanSD4)/ض\L5LϋXuW|'fKMoR^ ]șFRI^kE-de ]r@SJ1k0ʤdLYaik+2 Ws~l)Vg!t8OP"^!?R]H{LӖU񛏉qEDc%fx g) $2iZַ0*DrFxИ2ʽ:rqׂt7<]xr&x;29$y=0ҳdكå IQ A9Ð$?J( ;̓f@>T^`$W֪-oN72&/D>;< )P.|0vfxaUx3Ĥ2W͞XNk;B㓓`[!܆oXW'kA5%1ƪ58!}!HhKĆIesa15"[K<IF^sEa$2ٵL^W>p04vf%m I`d_QI,F*aHt S8]- JyxNPjs7m|m6$J8 W(^zk%Kٰ ȓ@ q:Z_iTa&J@ITjf]l؏#!K̚naƴkHZD֋)Kzex}.>ljJw s5 AfhՆ0xоhA}7᎞[gu}u Ǘs.Ϝ]@əuwLu~XTX@1μ:(cu-}$hn<2c ubVzWmhja 7QC^A;" j8xf!v3x wYZ{{L RsJ '%*QJyG%6kKU8a{LN3X{wh- 6mV/ ٩[f?@ qEVa`4U|4 g+0̄fgGN})|[%6ghTypP=!<C1tC8=(cHXƖ|#nN ϴrӚD C rr7JC0ٴ O.r˯$겆6m>D/JOwsoUxzHS}v>("$\wt5 L鋐nR֚n2e #RӚJ]hIe,L{VQʵXZ: py)"dbv2{ XηSSbϥtq>܌3T~?H)\ETdLeH:zgLq>қ HO'sRY,HY ['f$A98%C-K)NQ6W+!dO͈M aaWnY{Qvn,q`у3 q#3>_Vf|uu3ˋ.*x"^O` QP+CoB[f /̪Y?c3#=8P ٢<EQab\k-T-x^q:{UBjKBu7F ? S"&g:. gS1S߱^MRǰMT2jXWrpPjmokI 0!&GbOg/VZ=?K2?]N) \K×߱.'屑qH7&E6*Mްbg n/'yMQ#Ny7z׫N6t"t)ak c%PL1 $ Y_E& mDree:_ X9Nqg'W˞ 2M,x ^S%x|n)Q v9f_~#)lpǺcd:|G?i9,K,,/䲓lM^{Ce+ ͓ddWABtXF72+Snꗳefʯcc2^ 980S$ f2b/^rqgcl:9VsI,(C*u~S*Wγr]Hu=Vp<[+8r!gpIqWl*"N,e2mI{$}A|K_Yhz38vt )dyIـ:>R5* Sumg2.tnYC"u5z"o||鰷:v;3Pj`714پɉ'9r,-L:<1|N:Omy^9߱$tg#:@{ ŠL6+e'Y'w V8C.ݐhv|fx{J`YƇg:. jD{ RXl~&^q͜N W%h2Gbۦ߱k5>ʥ3"-/mh&L*s-cQ!mi5]s2:.jTT0^y&'Wy6s#英_CKFal -Rvxq5LE(6;ܬvϙ߶FPk]LnkNˇ{ǵbPZalCP{xKLG@ީPM`ԗs0Ʌz# |{\ҧ4SiN5#?~{}UQma,X$욬.n&;8|v30Ϩ6, wz)%)*HȴC&|}}^_7Ku?w%B}Z8LNwܠr8> gV][ш}`Pn6ʒ:W,G^XӰ ՈZf}7C94MEIGg#m4=@>1 R,8|BIzJfC`AsaSr̹2>1JyPM&CJGqMab'2|8UC:eH:8 7&E>g"'=$L˛ _c"ˢ"z_lEGvTcղ6XZEkiT5nDp&ztXP%"B0u8+ |M]5H*7L8ٿ[BFijXjWNLZĐ⇔̱\^EF)Εc+fRlAI8ipӈ᥎ulEPQ9|R͝gRGkzOYO# W*Dk7ujwM(Ge{{e: "ʌmK/V1e`Um#KE_7*hr:/(ï K9"lR>t?,;A`Jk3|Iv Y+ M77\y`6b&w|a|4i5Nx°>< j f l9lRnL4T ڲ&Ð pgTS;ݿ%'SRK}ҿ3raH͇_ָݏi;/wXř{S7}3 >7*E\W 2K)@p3⍱`\,X8|8֞`"w"5"tR =%4 ܢ<= z': 06:%]|^s4Gfάr*jUKC ]`$32QӲ0f jr.(zIYUcB슴5Ql#ׇ%H<AYOL~QnT2]zHuBQ !D(BQ !D(BQ !D(BQ !D(BۄO}9#<^HHHUZʑ aD(BQ !D(BQ !D(BQ !D(BQ !D(BQ !D (BQ !D(BQ !D(BQo ޛCn Diލ8N-iD@fCO/+I!-b:⭋~aXfVMځwPCajL0y ] A?MO' ~' 7곙"^X{N'*cFĀPf}ss?۟-?l2??7cPeSl~Kv+4TWO% smgbW0WA (*$vgx0HW$wI*rpNFW/O\j=玳eCC9Ajllg[9nFnK J]!v0dm*&3mCohHX'[a-;iLR퓤R[ oOeM>>xg~ `-YC=j{OUyIr9!x:Agibl絺 >->6nT/Rd|zA$Фqx-o8IU_FtI6 )r*XE)~UG~OŇ?]AƢxUx sʶ/rbH )i?92+W y#5 v>cH;X|¬ێ c2c藎CO v>c4l,} c;?>]?8~<cˠ/,~X?ʺ l~3cx??pcIj ߟ%`/tpc"EUE_ŸAeRCN&N;`s5 |h-WAQ#t(oڧ׾)='*NZ_'<9~&*O;֏h =[TN$}= D: trqxT7QR~͕'?w!  ?4D?)"|4/;tcwv'OTy>bs;w'-wg{W~;oc57@n>˭G6[75'GZ{={ [V*+o:S uK?E|1Jw-2't ]{_y&5a:YK?A޵,ŝ1?m7mw v?r~4F!4Jt?zo/ѣ;P!/7~ !]$G o841b@jA= gcHyp2}AZAukbeV}µ{_ 3Y{[k2_I~|yo"~R#٥O-4)K$^F$9$[&y ?: , j;ko5wXkb \P)C=&*Pm)UAҔD5mҗ E굉!$#Ej ] ڇj&CUբ_(M~rI'h=~~M~~|<=_lEē_/$_kB痡؃_C9їk3~~18m=M~{A4~jϗ_o5/^{_^3zo+bnOߛp= 7G290Ndf]Yݶټ >l7//fII&6O?;4+r{bγr7q^*sw}h 5>f߇vwvk?w[/%voy5~?T v兀xiq~:W^ 8~oͱ]b33|_p7sa3A-}N(tR[c40q elJ 30}*޻ @j K2蓢n e˟oݎLs? #wF}Q =4!F'Y0!|O_Q7!kýIb{,\=?nP<¿qO| *D=`ag:9ᆥA0̞I˛K\vG9qj9';W{ta4N ?K-CB̓o6%tj$0\]{v.sۥoo4mzѷ- 8+6?Ro>[ϗK7>p^vo(;h5?`"!-yvz"B~&|{AT()<sF " K` M rG;Ǟ}ǡg ;c+pX!$bC 䅚f3էd* n ! ! !crNBSu XٹGvǶ![(՞`wP;rv݃\WaZkًWq~]*bfWGgi5@,wE?!p~_`H`4}1ɦO`?|k G8ĆAScڪ<1X'9R~ݯ?x6vTcq/b~[Wh<]|eM3ٟU\hϣ/߃\vThǟ鏸}_5a _5a~{NxD|q== Hz[!kAgpmx|}hs>&ua6_ui6uq7_uyX9ʀ5aCɲXY}ݟUNG 55]?3x&AHvFo2|R?4.5"Έ??"z \] q,|'9ţ?ǏhzɭVseVsmWsuWT B>FGN:R"9KtFa@tK}=88@=0~ҳ{G@6 Cm IT?n?C[Ǻw-/m?ƭC/؛8jWW>aP=|~*?I;6g2 "EdتvMq5ʝD?Gh@"!!HH/RDygFA By\ t_GDta/sCƋLȱ] 3Xglt; m # }owszp:4}o[W4>PWä;nqknsgᖘWUq˫~xgz\.G<{CsM 3r˄$*ysZh2a%ўDydh/Ar<:{T, th1/m_ìtQA\j7!呹q-s`'C I;{m,N+FM' VH$ɈƱYN&P!5eYdrSu,rm=`?WYʿGd¢w2S`8'È3k4K1$یm~A_<;+WԇyhȈQ9hN)f(;3nQբ X=C]։lZB|=w 0J[[-VX{eִ[ݭl-nO>;}~Ca+ˤP<qa4H~) HccRVj*aMugI)=d{:&;&Ϭpr\;I\QYT;i*fMH@ m? s R拗NcxG"ljߚmQOD*q2Ȯ+fDa&}UǮ_UcTW[)9կ^T%S8*Jw7/Y$ R~Yum50`C0乪"7-n`vM.ŧrfj NǨjDrfUr.qʪ~kpi|.s*"q7'o16(Q>GJ_֒/7EjD&lꊨUWPU6M#4٩{̉S4lA|vy܌ϫ^YW6_^ϭg.ĽkzQoU^'}'K+k G33FH.&ar%Lh Ƒ5QZ ]aK('y ksaUEk=F+*&|M.t5Rf/hg+Y8{y=w gj8+pW|^8rEJQTW|$zWz ԒZe%֙9[2Iw+TXi TcOj+]*VyKm;Kŕ`VY^%0d֜ 33/w5ґŻVz,Tc'%qa܈ Bx3Zv^wT.*:T ihP&f4Wus[xQr 2>A/Vѷm8+Յk2l$/ePZ=I9z; 46^i&obIN˴U6oϳ2̯ (&i#+\2q^%iH.c`RUZ&62SCm|3Yൽ kK*\+h䪠Fk3L&cnQ i?^I$cL` 19 x  dr^ޗm$IȎcK tRl%2XP HaDV1p?1`$4y6 $Nnݶnw^{3w; -½6c~ @~V\0M2XmREOxz~^{)^.bh`m[7W-%Ԓu֖v{veAxc#TH!F=o%NMmˤ £tc3o]MwKZȃJg[fK.Nc٧Of]p$iыKa̗H 3U{E&.ΡI!#g6Ӽn0n_2 vIT]MB%$Bޥ|'T=kQaB,> /ˋ2qW`5ʜ@uљg]t ֌[ʝ{u">4t*驐 Q²z떹ޠk A@+~P5-k OZuK5]R]bc{poW=w߷{#,Fwa}q7w@_<:*{u|_7ބw|8 {Mto{hvQݘGoZ߫ююo hoF^W~U~_ 6(#bpfT 0D`̽/hhhȟȟO'(""Q?(P?Ơ΢΢""D^" pHH~ ?}~&<@[&̪C[uj7duku2Lcl5ʶp7D:EatoMUc;GZ 0ۅz,+ ۬B:[ OWwN}vrWŗJڦ)L tV^?{%yrB( .u:|0lT9EM z|-3Numg5G:t A2=A2 ;΅WuWP)۪S '>^/,z+u;iU!/mRnMm MHR9-J*lxjYKh1]aecꤘYig͂{(Yig:5z/kIrT+v%zi/ak׉.Nzh%<y ׻rI:ZOapUg]pU'̂1 OȧkJǙ!* yZ?OMo PςXƂZu x]@^Q_ )nQ~wYiZ8NфBGrY[_Y8:5-m0U^BY~G. $I1AX]/J1kTđ:rǼJf<|,OOXX$QD/"b,$TobԥHEN;4Ӆytjy\\i$sR٤MuwkBS-lQ|JqAr'+VIQh<}`DҰd: |0l*E ʊ; } $ŎG#SRDZt.> $g`MeEY?<9ɵ&ش8Ic`M."'.iIfDTS6M G1) IՂ4]E')'%OY ^I bMhRcM5pBoKab7t&Xk}Čt8l韻%şd5&Vu)KRUlp+[*U]|xA3xS&+XI$%8L%J)ˆSN>^gLG )էS)S'O%ߥTQ67jmSpr{O$OSS S))4yJICwHmD7 Op1F)DG]FGL,ZmEr3¡*:ҝv\ko>Mz"ӧ q;*dd0vB;q;JFJd:>8CkX1+Ѱsɉ_i"* 1HۏĻI]W4 : }B MgxT3!oG+/9zutxxZRxK)'npRI26짬ӥ? 0'Z~;X>_;"唨dEzi/o`}LIMܜww@Wܿ*Bېyjv" ]">4tEP@{50v'=;/n{|=2dx{L=lv?HEL֐ lH 酰_ritՈ LH]HsXYk{b*Y-PUi qꝋnD Y&krtSXxr*? <~$4:$2"33iJF z(xʯdL2Q< q{=/ER-jx{`|-.`T"-.(7J>)|O'I݅L}$]}͟<+sÃDq y/^;W#V5\t x?=\@,8Pa߬]pq!F [4T\hsAv$seB.7f8Auqew7tۮڳiz&5%[s+?|zY\ ciSngZMd}5=y=i@&v }mcCh `x<7\ٟf>lA * MX!IVIVuylin@sԟtϺrG^+#Ώs\xvEIE&E' d}JtWWJ\RSlL@P!1 _ItiR:zoic=(B4zx],)bkCT;pcB^vg0L'090Rs51. lL8bh#N8WÏ\H㐍a1>2!zFL!rͭ`{rXTYV᜵{ŽJ1mMTr|vZihTŪ&;(ޒniWZx1t%Z(^i&ö_I+.Ϣf=Vrz}Y3ܣ.o)bM62S>tdG@خM XUZtA6,TíE %肬8t_L"gM¬*O,Q\5Z¨+!m窀Ȼ//EZDNLYa$iRT*Z.b1ө&cxK3n7m':Gv?ys*n 6ح%h!,O8#h .+2R̯v2 qnhrE9f 1fGUQ876&àJtȥN%j2L5Sv_w;-h430?m*@8)G<9v[. yH``>(%yK&iyf̅i<%bd5ۘzCEݐޡ{=G7h2h>Fd:2XҒ 3vU3ufo/K8Qj>&gYG#n~TбaڐƐ೚dͅ#IIU0,IGOUĠKybZGRǖJơJf)=$K {HKqca7^*56q; M#jnyV9Qn))bQ[w~qurC [Oy?Lj Tm܄ؿ[^>u}]{[`._;X.vv 0; V\#xVo(qDoDNЩě5׎Ǯc6~@wYySꣵ^W!WTiН7~qxn¯cz^; oNcPSޝ9w,{}p3kWM-8\=GU=D!;\w7YpEh?5߀GcbwN %:_xKb.Nn̮Toww3tr>]~͠i ͜ЌnQ*7w|G̈́y &,9D_tzq޺|EuN=n_+}<)fh=TOU~?Þ~՛˫8>o IwL4MqꯟhS=G?&4+ľW ~4ɮ~^qɔޕ}> #P8gɤs4yM#c~-#Fi;>ɃǃsMN^JGs0tF;i#H$sޞ#'YJބur~]#.^(B,`:dG?CJ1ϡ%F n7Zn2*vi{<޹M4p$Z~[}!y]6~?|~]׸K\t y.-. w f~,Pۚ[7aF@&JFq%+_3M ŰRjR,e2ʋ&0Ȩ=$ZW{*fu C̉T lȮQkldĚVE9-qyT승/+ȫyXl EďqH-.bbq˞3axo 9JQ"E[ʜ^V$w$UЭ⏏?0tYڂab,eIy"U' uw'5#iJo3YYg˳iYxAҭψ11D"jYyxJ<sID0<GsØE('09'؜pnG\x J Y5Y5t ^^FuGͿxDB#ir|Vr4j*W|$&"Ę(KQH1W_nN8 j 6LpF5:3sl&XF1,Ǽ4INƨKO>܉OXr9V ˚9k#FnT1]Y=dK~qħōPS>eAN}!GĆPD?Pok6\JD#= ߙ7uHD2y(cNl4.MJy)ГHsҦ64&jUu|SU'}~ۼl7S1h&OuP7wÍ绫[ AݽެadLݼ7hopF:0]Eӷ Yo"yt+UBrU iĞG!WE*D7;) ˊנ(F/MGn ):\1ՑfSNn؃U6ԣmIzdE56Kw]R ,!mb@%`9s$d?Y?T1Gj+nH 6GuaԳSz 6 Q>τZe<""pDYj8"/'ZN^-B'E " g-O0τZN-B'E "BxED<""pD[j8"*j:S>j9>j8gf 'ZN0-B'EPkxED<""pDU<""ur >j94 "Px<""pDZj8"-OpO\τZNE`g-B' fbxED<""pD^(O'ZNp-B'E\-B'W!LEDpa<bxED<""pD^(O'ZNp-B'E\-B'W!LEDqAO u:(Z? Ap[1 Pyj:c:5ι3n_X;k6zwYh)hajngnP-Q^tμW]xͲgY۹sn~F^R&n7b-L+g(:SK==Έm.|MKS2` Թ vY0L ۳_j@gP@ ~{@~ɗ|E9VԷK{ߺ4R)?ְ ѵr ޕry|ŏ7/4Cy^72>OVN"z)!z41 J6)64QB|s/LF% 뺈6D8ע [ͽZן5$m4.@ H0n ti&⅏* OihkAbB@rڗn~[P憩jUHɅt}/JpaD;%r2y*[d>E_[jƕ/D].>D6 h+':V+$ZF'.jЗ X>0Jیٻ)J2'f2w45fsPѭ1hT4,\3¡'_M=mP4J˽Xx#S]e^s-Hj}AR69ް7T}+?fAggPrhXlʑ->ZMbYRrO,VJzZji, ]-s!̲ɇ rJ+ˤ$] _†X3Jyԧ.DCer5-@j *X,BД@biX;mwXUl$|#VbJXq9"`Dcܑ5>WzMH%rn }i*Ys%0rA,iW`e[ l&?h`m deZ&c{@m) L*vBʖ~c> 3fI*F2 mffL A+\k1aFx>!y4{Օ#˘6h:ԊZq!t7TI9%C&퐨:> h&{7]Xϱ#sZ ?#N Gh,6rjr}e;N8qTkw/Z(i&ްkvU *(7%П]/)`FO܃mx}W" 3ocDzs2"Y,,Pm+W?5PYA 0#pt'vYC} 6}U^[M^7qV㕑/@]m=ڳɢbNO6¿dCX(r&>!ُ 8?];Dɛ܉.#;;z !.Տ)P¢̗ma!!휷lѢ@v].Č#^!PyOb{c~vS8Hf7(u61Ĉ؝p X%.yC_Viz9Fbbp윻wԈ$,A0dJ~hePl 2[2%{ɆEo!)RқkiO.4<{_Ǖb!\5d3`HUȽ{m kDl0P# ̗5WPUxu$ɉ~>~K⳨Ow>6;$+ڐ:_.YoMJZjOŖ,skkp87{Zu &^esz_i)_]fvL,ogL6 IO$p}}w9oNNȆPPڠPٞPȠIA( JZ+Dڞșv -t 6=J{ey_PUX#«!T (ҵLB%ꁧ]]q1)B!w%B\B˒'حa j|Z1 6s.(9G݁`(,za)1i{=&f{3G/_ }uWCސjp~++=Cjz'#KC~sG67`Hwm^Nn^U$oAL2˻=p"81±zr}'hXFѱ}Y8\K3椌. nG2x̭l) BBm_cK?1`cfɜjq]Zl|pj'<.:j'BMxu]Bc I$+f7~By3`'f Xc@+w@))4z|]vՇ-XY\u <-Uup8!8&HV0-W̴lo t"]y+ fOe&^w :҄.j06)nÅQS o",~b݌KWw}<%x.Q{8Xf]gtzv@ :z>JOݏ$r=_9,ϒh%F^p W1\QJZ]Sk\% \ HjSܪqg#.cȮGI:Vc::x :=#Fqu0zI,֐3TC[6bDZHl RԫLpv |8Rp=s Ms?fgܛNkˬȖDdCM"uSCM>:.kDOZ~Uvr*3M&ULYhHLwSYGRVƤ>ӓoΧom0icӊY.mP$-vA-0K4t9"0"u֤ )3k /F  6O]t<)Wxa\.ev뻺Nws=&mƠckׇ0m rH,Cvt=j0mb0?f}:ӳLNL`O糙ijq8Ȫ4LXnfXE!7w$Hnz% umL#z2z;v-G>tzҕ /6tHѦܙ#DO48E췏Xvf.?Xe}3R]m}oiGq¥PA A{iNLD.S3Rlfmr]ߐRg(-77E fࡽm/ieCwËagD.L${A X`^m Heg e"bzi=yvpBYgg+>3[q?=' &a$}!>7T-?78s; :]|^/Ǐ-WU?=Q[ж1sUJT`_DEgn˟^vK{4nx'gC ʍṔ哔ḜYZViNG ?+[%=y wdDqX '?ӽ} Bym $AYH a1Hs?}z!dDhѢƿw|j8P``_60-'X2R2,aT%x56I/p R>%.nU%WMx &ޱ׈:}${}J26󢌄 4i [X""wM N(Sd)߅:O)8M xaOR)⑕x,S sH'Ҍ.[`|/&)':9b V)5)⒂|O)9!M8S뢠3<O7vm96aE?4qhPO)"S*DB0>͊Swr =-('h)ϊ|MS]NS7tO_wE=d)턮SxO)bC)f"Rk"CQqb1Mh&S }S>SL)40)zMS8!L1; wk1 xMX8QNq=pqމ qSވsG)ة t#oIN9˽N_IG/)H%]/-3M'+dqr2y|lĜBRbZS"~rN/ŤrO̱?)eCerwceeP+:T!&%$1nШ XٙY̤1Ja\ QKJڤŢZsdN&UƽDa|=]w"BqḊ2z^T)GQO}+}ag7Hf2<51yg;}wV˕1wu|krzW[yX~FCQq'>:Ij=?QAC5 'S/ڟKbx ֈߨTh(h$W{) +!(IBGaGEJ*F{^4D*̋Q}BG%>T!KϸQ'#:T xAgkt&i#2u6 "/4W+ Ex"a`]?U|%Ug97L0OXEgLg=81|XI;+ aUvY>A`8\pyҼlVw!c7swMic+;qo]^ocg{>;w?;gEq|jQTvX\􍗷e~{/eg]yzjʏ=6}(=nl8g=zv[ ,Us[>Džgfn?;)Pβ-|JP/R@DʈPxH"gVg }^rp׬obU;/12XUר%"4ANB*J8Vjj!Ǻ̏+T v01@$$o)R)SOQO 16Ĝ7~KQnZ & 10w/,bdgMTZ)DъǺ1>͠6\yM B {P Es;TK"xÞZSzR' d}p{k)n^Vf5|1/|X۶/>-2&M$4 pp(P ?+Qp&@bX=L D(;A!BD\iBAa!aU⋀ AH \meuTvE]FS5wSKG(3պw^>Zќ[?QN|l% _Dug9e1TDEt"`(~h_f~7YNfQř)th9;ӠR8M#Nj0rs v5L**g%LQQ+uӼ-tzbZ'n&OC9]hNl}H";u] m:3 797.9*2uu"ŠM'`I9 WZE(a#-.d9Wzv-z>\kW&n HZd]yw/_5B4j ׫a,dBj!&QLqFM\KHMCά&&HM^o"Bj; `{*?4^"`\qIWsg9KEU.tPRdL 7ZP6鲰++H k`e`;{á-qp.Zw{2l ,EDgo{ ֜ĽRMyw&k{'8cdc Y& P}W>kB]y ]qhߘG/Q绂cTÙi=VQSѴ]\YYoЉ!{ڪd78h'YS7ML="m=`4{gCA㜶Vs;vNh7$a:bڱM*vsYûoh̴NV,}dEA9v,y ͣ+)EeRNg#O'5_w?}>^ߪŏ SŦ+3׸Q/(65imz(q~#&|UiwphyHsdvP]г)'jz\)e9DWŵ\<% upcҘgaZil+ ūfVv [&mnUYna2t&\N.Na-ȭ0-0ǭJaq6a(`Mn!@\bh͢(߬N0tfD:(|$F" 7TfQ)º3v*4FݑZ6ormUZQY"b%""֗HNs;1"L%S?+.!³|JŪαϨ-[6i]{`%EӠVlƗj*.Rv!kDC ""^:yëgzj,Scl`16Y3v8۵f78޺qcx#qb6qÍVlHqI o)#8HcbG8HSjrv-Em-'\ͮu޹!A=OlH'gX0XEĥ!̟2@FʹZT¥ +aX{ Ǭ+a =:Y٠lN !)M\ L }NYME'je;(tC3ve&}**'h:6e$;*#ncɐs=<P5-)fqE5 vXr$s|fYXѝ GxgUۓ"adz-!r2Fvѝ0vғT]~.J-3z7lbd)Wcyy ~һHVK"( JI=+g s9GL\V\ Ü`qhR1ahXX7vπM {+\$ J'g`H܀Ő&3qfnao7| QYswM{Y))b0e3^׹vOrNC нvO6=D͛5~̝v c{2֟1vhsTX3J*0/ 2E@)x4;%^X??Y,k$:s‰ѫaz* uI癐cytT^D׭SL% . j撓c7(k舌ת UҚ4h` 7Bk~)i*Na<ñ'}S3_L/7d@7i>gK7Ge̵?/r͓̿̿eO,Tw Mtd ":709Ƶ4 $1#cd 2@'%,bƌڻ'I6=宸IJ|>K@$iIټqA&L#t[$O;t?&Y#zCZ0;lDY59(5B%Nܲߩ >QyS]ά?ў`ւn[9qQLtRiԎoҖq+);nѴͻO[u*ÓXL`N]̺ivc*w__[N܃|hRe^בTUztvJlm59~-=(E_Cʷ"M&Vᠭ!ְKeF 4WlC /p:[AΎb@1~O՛]ݤcX^xȋo k9J䌧/u6*:7()?i\DL<3FZ&UH?iQمءȯٍO~Y"fOP@O=\_'|y|hJ0'F&x3In2L~0Ll#<RcZ$0|OHGm#)WBڐ p/+Oƅ^PjzM [Qu6JEO^G)HT ^tz>IX>S'*5W?BH v|YIK ǵ^ D B_*r&W ^Ԯ?lPNr/Tii( hspY{7@=!B Dۓ x6,$ |c#gN*A8v$8D5>M*Ż~Bu](59 :R}nΔpe-][CS8qಪ,b&ڬoj)|t}[h| U?7tLYNsչDZr-⫕c4EkJqSE\ gl[lGQd$ȵ͹!!B5Ay7$0>c5r 6/[‘R[=#BW6a`.xacÿ0N=қM&x Qβa@·U{o/Vk@l''MVyL!IuHR4C?M 5hy 0Ǻy ZlEtز9~,WAf>VLٯTέ![loLV@N=:{*K% %.%}ʟp|Z iQ{$ 8B-h 5}ٺG0R9u"6Ţ_hn[ʜqIѾ=0x2@ڟLmO{*J %ʔem*<" gmOS +D @pEhnhȆT]{Bn·=Q'ҧS߬$ ]{*d dį@2QUڟ6 3bRo5f|?z*S6dA*:x;/j2D51*UYVoV# fXM)CMmIXU|5Ῑxo5Zf}ӳ'Ks)ptj/LqNÔ>%VeSfYXѝ HnH5] zO!"=H *@AwE?\ ɕ[Q^ XWOgEsWKxZAVX+_A]>Hz]AcoJ7?\ 8yb>m0UQY;h+A#+c_Ak5MJ7n@oQ*,y%vc(ݜWWO_xʑi7mt]*<"Ti6 *C]}~gn4%,#{axxҋ/,\B \~ZN^8X|i~Ƈ2=<mi\"*r,E }E#N;{zwCs :ts)5`ɴ^.TV<{(z|6: i9o͒4v{nZr$H-P,)1rX"h ;W}>qG8>/Nrٌzwpwzwqw)!r<\~ZhFiݿS>#k4p?-FiH G^C{!k"& .Yar‹4nΨoP51ud&K)(**c63e̢'uN>}>OΕ p 7`e?VY[ ߰FmҌ6s ~u(6x}N&2j}y oɄEv˖PՔZ?`{\2(e;TҨ2weܵ59UAQssZQ\VQQk)]S8mul`u3|"fO6b|á=؛Cb~w؞"s=&jYeZcNcKw;dSe^S@H.Ĺ_ĬI.wou-:f~݇RfMC<2w-fĶ -hz|(~}h>?י\YӟHgy&fL;p{#ok4]3os9К1_F;7QzB1_"<ȕ;x+-ȓ r ~Gc>hΦzף%(]cc& Tw uM .zfAe3Fymvb롓`m!J$*es(qoҖq+);mRݶYLw:+FymWskk3vdҶȺVJ~pm;YYEMLۧ+'HW%~YeX|pm|]Pʭ$:Y]?м`2Va"Jx(A:rm>Xp.VQys094td] ?HX=ͨjk 2kX^ؔ*fr2ì+{Ykhf& :SvYbY`RcZVW?4j_`{Hfʨ/*l@DHZFsMCJsfy'uiʜ 'FQ|ZQw=L59WMXݻ|Ӯ8;[e g2UyAйM"ЪdPd_̓H r "G+xqxtxxeW*!L7ѼX/ L3D2@Z;>|<) mP}`Y&5ÛɽĚo؉GPS {vQLW)OIeՒItiPacGƍ]qeV~`弥i~eFCv϶E }o0()s&涁cNn|v_pvS_4}ْ񾵢<r&z\)5;O0O16 |'8=~zv1VmkɇśsR.oE5A75O?wiD @+t޹O 55oG K)E%Ap'S=ՄS'ARЋ|S(`Fͤ$8,3$Y[$Vnђڨ\eY"}P: c7Nn%5-?eñ.jd3&NWN{:{R-'+dP)N}|px0O!QFeDec2c,IMp ֞yO\%dzƓ).{]K-ogR3k/._Q/Iн/%7dQ)I kBY) ءH5^JpҾf[]27)#NM5]:A &4> /5Sa1ޡ>Q`}L6AV񒳥 Qs^fl eqMR6:ZZ94ЗEi|~t`T1q!^W](v g ˹I481wt]eg^]^~,pbydĽ<7TVؗX] H}dq+ ,[u+&JBɇ=uH|H#*jC7iQqEP1g\NPR'/:v4I-=v䔌_8Վ z \ၣo 7fnֆujnсzdMv<~hHu%$k@ojFNY6)n׬ޯXz-T"5boʲo NM.do{q(r3Xkd1:v%c*0k^)7^6R;!6J':)}k담ߗ=Copqޔ@Z`k{C?C;?9gY9EE3.̜(%Ru)e˖\@aLY#Igs ^X\$\EnTB8 A0yer9ww B+^foj[ݪ~}ߓ[@;_?v ~ݬjD$Q,Q$yͨtw/-.r(Gdש 6}ߑ:9\^%yo;/r~€NG)z躸X؛l{&8pQ 5 B (B(yG]mŒNJ[Y=@m:5a cHK*Ӧd:#BRuj? ]0sH^P+2PK# cq@]^IXP6nV JTs|Y "Ă ,xiO@UF$JBSRBYk[I?g@g׻Fs[W h8'ײ |.,i%QV·g=|C7f9n,Jn՞sjuhH#_{4l:\)~N&,_ZW)crI۴VSlN5ͤ ^M^^OjK|5ECs*;VT2*BQv_9MTX7ql(oM=CgXWYpٹֻw e bIPnO)T(6q^&Mo2" kjc0l)ڷpٳI b؇iX(TKHtU7!ENDIz[詭kx]괸S*fD6U7 Kj378MydL{X؁Um tfwa5kx:A{*j1mޜ{dRDjU_0 vqY,)[ȶpbSrKr7A+ Ҝ0 %"2jZ,ao!N_}ȹ鱽FPFB4`""BVe!idԹ*Bp0'd#%9Ҝ݋*퀜B;ミ0~$B>S`cWmNш &u 1y^>S{x:1 #'sa!D:|:4GrRIt&S|w"=qlf0^u1#.nJ[psr37؉AP;OCjhg07q綠Oqۮl uI8]+Lt˱S$7ǥqn2L Ҥy?V@HR(:= &FEE+ߴɴ2sWRRT&aWhw`K ȭ ƁC 6GSK۲B5r$r3B p›P 9Jjm;5 $a(LA rEn% "N@c[uD,D9"C#hң Kǥ|/׶q(S~W!?%Ϲl |/Y7iO=|DGI4x2I@2ӆh3*,ب @JP|T"'{1۶qoɷ1 sߘQ"]'jjʶ3IeLPjZXqUjDlg3SM GIGx.Vf@ux)$: AX A`Z$D yj!VASھH 4׎vLPW$R#\e[8C}N9Ӊjq8m=[՛=w 6pLn9wU_G~؆ݪi'Wn9CQ;|1D~l x>'+8Ÿo)G`ٓSAn G.^z r.ڴP?Qsxg 5 PuPeE &..~Uad^(~tWuӛs_szU9}5n2^e}}Ꮣֽ%,a;gUe&$Aeߕ0X덬SU#`%2/}"\t!'2бJUf%QGk^r5}0]xWUAs!-[@P,z>1ioskh=f{*ֽg#DHz5a+)T$? q= Ni@nr$i:4T5\s8P`js*Hv8/\xc\)k96}z1lgO$p&ài#xOGThTIPMKĠi;W53O3iŝڤ3Qa KGɧǯJiZJB4nTÝ#';(w%(a C;"PwJph(:Ax0c}_;NbMkPm{ORu3XlW&u>,NmpQ𑄹S :CGꟳf0$.-GNU yBK**WdyFn]Zk+km=B[=ܰg0Hg2Bq0^!ԕUeUzݤ|h╵:4S3T?)e}US>p׻Zͫg~?Q3M>֢?!Xoug/ΓBNxL~PJEQ>J} LV]EFOb=0|lݳם!CNCedžrf,:s4qz '&3eN\ˡ Y׆>T뇰0 쿡7Tp#z] iI\n=07qiיmYlw?%B8Ctqq᾿ ugwp77fNGg;(NH-ԃX=vu>YȎL=V=d{Lo%XuYCsql 4xAֵ+CO;uTa>)ZpN{~r d g\k5e͡L<*a|ބJچl ݨ3k\s+[_$j4jЌzT %bVI1D+,rXD$dTbH™ O! &}>[xh}g?t>=pq?&ZS *z&NPimʍ^}%PdT@Z_>8b}zhіg[:Kqcm~^ZᤥE xn JeZ1Oh_<>0>ٌ2o&]$eIϚP2I u(ɗq4S E.)g2Lm Npg&[Q sXc0г,о8Bh]@;#$/v ,30WUэ^.H댒ixb* x o<8!"FuaC5qP$$rGFg5܃~fhHy+%=,ky " ڲ))H /Nzwv}T:@aȕ>LU?!WTjV;> ]D514]a%P{oDZ8B 7(wig02\uKs-ږ[ȟ#:gC9_ z~4Gt' N]8n0 ~9Ђ67 b;I.sS?S _ ?̢fC .kϣ*BgJN|m5w$Phw?$ӕQDm4ʥ "(&f$ ܒӓt4˥d<,Gϖ~1Ϻ!=m"m:e`6԰ijus {0-{j#uM\Vo^,:eE,4y"&Sk.zLUsޒ`D&̏HcIiz%bx糪PBwg.3XhM]Im ˱3Q-A|a{+ k:Vu(^a )7+dC'0kVC>O\=:KbB;tcZV{ =]1?aasyS%'|hrOJ1kR㣷P,_m?3uvoz){]hVJNWMIC̱ё*%H*e1D<>64n}^qoC'}p?]S{~Yow>kuRP? pw=L>{YRk>eGޯvME|ZCg齥&GҸ=f#FXV5(MF/+xO25HWnjTNDpՆʍiέ-= 7X/$] [QRUo@s ƩygҬwPbƁ\rD%|)K62S#)ʞt r FnRV:ގR̞Y(Sír0R=#!a}&/<,}zWpASOCTы^Za8z _ nyykE( Fg- !p.1p+.Wf^90վ@1aZ0ϰ "bLY*\(wgY뫎X|Rax 9檍~ϝ%QM%|u):s}ޓN6Ҿ! @ݓLw!0f@|ķ0$C'~7"bi τ*؅];%z|, ] `ODC 0 I' VpnA&bm0Yx 7 xWjT#Ʌ;tԓSI_^h?M2O@!r{ûOrCb5y]axap7?Q"/?>_W踂],yR"o'H^) Ґ ^6oعDۢwD'C-_s)i(AR\kGG7}ψq)4CO3q~{O35 RWT~nx( RVRÉeF5CXdBWXbĿ=f5lD6롓ax"Yg顓^SS e Jּ"n c0z=}/]rC56BX0D̺$+CPrs6ݷMseh!]g`V9T̡.TD6ίU {/ \ȣC8ϙ<σH v vu!MM }ˆ֝:89пF;[*5[ Zj>M A2l=?@ 'ɰH^jLl7s3gʴneMDmҭkmF ~ HIq<+'xā<}x[]2??wyCjk2 ,z.e$cw<=7 PlBȅ6 ' fo{8i|k,3kN6{4Tߔ"X(  U7`ا  T> 8X*b,o ߂n" z:خյݽ'eI};#zN^:1k/zEޑq\EM@yѼe"nM,doDX*G>eN"&H"}~`ޤσF W_Q0/_cZO@XuUIN1&9|$ęiw>yYI :P}2ʃ-ɠfOf;Q:L-KiA @͠ 1v\ q?8mzFU̠uWd2P2B *k+b(&b-x#>@K.k&|~k<]˿lSISReO4]N`VONu^ $Fyma6RL?V@ GA2u$xjE،nC5*'ɔvikR/=.NwP>zׄ'!WƼlC[؃2¨x]'<246l2 "ׅh܉Fٌq{maLfII;+t!a!ńFl9VdxvaGi)b[ģ_ߚJp\KIK%8E4+VoP:^fQ>)וi,0]$53ͳ#|haϲemAnKP"D˺Rl 2O yˣQKQ(kS|ZhUKI'& L[\ dKDhK)0M{ '3q%wN/ yy-yQ]G75.j Rӥ lI h槇RZrEsm'ێ+.o<]WXkrҏ@yQTW6L9M )؟'KZ$ayWڰX2(+\:9ҪQ'oh:[M(/R@F9+I(i;4c_S`f|޳>SHR()񧴧Ňz)*l>Lv\ 56(gxSǿ 1U(u^Y%P y)1j^J]\t]W?ly" 8ʶu)VHh"+f4o,Г^+S:ߌiwx0eݧF,OMw3rY\q*2a )m0\iwV!cloD (? qCb3M3ND"ȫ{owIOg6!l?GW"6*a+|h` ~ Ӑ-ޚк 020 ryY(D0ą{OG R+M:͇ !0Uֶqd[Y3Wvr!ll"<~Զk2 {G즉ct%Y;!8З;:+:$ϣaJ岹tC籛 82qru,̻B Dsy̼㽓5Wt!Vmk񡜛:U$bY-%9y(0'ڹf)PZ} je,r6WL˛=I5 cC7SheC(F;Weej*iMDvO"4RÔGZ9OxGn1pU9OkDi?^Qtֳ^螤_k^.4)aY۸@_!YTv{I"{S~E*=݈,(}&އS5{;b7{QOWjHj>Z Vt,yƧmif2@= 7 -5wj"pi9zoM9stN,Wh'zd'>߀''}4 "Nfm ToD.[sA@-ezVeM= Oč(W# [9 2lY@ [@Ҧ݀(:@5nH#\-́zvlDaf,ywrz/w Wy*@40%uQ( bA3Y᭛]%@ ֙K0,/'2<>iL}xEZH+ 0^.^?r~+Jx6!zCfgh#فs`+>lƸiWTD˲Խ QkXrJTF\t2~%KP.&s]ؓ;`*!$/':̋ ssuq9].ըBė2!cIM.G7*]%L؟{9 8eγ蚉%Pf=-RJ^G%S$u< hģ?eWwf\ C HKf_>0t]NX$po%2BuY9nMg]]]ՐFoU7/H+[ ;:=;z&o;I IU;obSYx~H]Ͽwa7>nmd:*_r_>sF/rQ?ѩ|pٌ8X9M)s.W/ӛ`9V뜑̑ʛѝWcrVʱr*oUUr$4|=ۊ\_g|7OuT{}@2C]A<Ep`/]tȶ"iƸ.bG^ BJ??3'כw>lN&N.zcN}⸲t1n\IaBʝNZ1M{X[^*-ߌq,kFD(@'( D+o1}1,M`w-^ezA;( ːTo&i@3% zA$T9vL!eD^D0$+HA-#:vOq A1ȤDv;n$_QoYvFN[ IK2;hgN?T'm}=&GȌ9DVCò"|X:/sCEeQ_p ;} }vvcjކ}CVA]ܐ`"FBD@h@7܋憳P{I4hxNBBĂ/dOE*jcU6MlG%jG4V " HK|DA'`j 1'|_ ]d׈z(~,;~I?J:7˖(?ZkHCNwm)-@kFҏ;ZtTA'Ne(OȂ_\qe1)Թ@o>뾽XT`,|trvU49xYϺ=}vgܸ :LS07^~7q ! mqvs fXxW[GWAyr\x-| ` P?ށreK?Veuh#~qcCUS}`iTjۢ @)1$x ?do-'HLUi{q^9@ʧ B/VTO!uv_KUÊCS*O#!HdBݸ)2W'GAG"J>~*[RaSPn$O+вu*K{q֢(nYZ5v\=2W$ѮH$n_ܑG$d!Ru^T[M|]h>I]A ߺƜ{=K&X&eqC91855c {kbE%A  Xm[8칽(h\ lSIs[i;O)Hgͧ칡Ƞ(:zI(qc DU'vGU0m(R ڂOkF,JrzmBA"hw5 & 2aH|$8rr :uɈeF@B2WIRBuY  KSG`ax+] ԧC_ԯpq=|lQ=,/p]DJuu]KEs+p4Heݰt뽙MG]ښ{ $߸H{%AܓeS)7.i"A8Um@05;Q5u=O.۷S[[.طy#7A; YҡX]y'u8Jx'TTH57 UB̘X(aLdfءvHX 6+p{ ץkX{/]϶Ra|YfrXoޙ4<CY5eoH Ev8L0vջTܢ>* K1H,>M>*Xxe>L(*TTv!tZ f޲EI]G h1AQɡMѲ>o&L\9~&.1{V5+k/m+ }6+دyV Wro#T3N#wu.:Q 7xV4rˣ^O _#_q\W>+ses_8KؖDݝasxpAܒzBxƋU1"wbHpwPFaz!;`^DQUbAƸipnڕɦ+-bfS4,{]Ɇl$6*ڃFaeEVu+,bPRT{w]3~q!xϗTz̥ڃJqHڃHj2>ݣ89YML ;herE9,lJ7+K%W.OBiM5Z4)*)u,eD(tk#Ӹ8r̵ cs1S.H:Gw8ݰzwPx6 : rNatqn.qsM&v]9& xc tcXe( ŀ+k P{D:{S,dj_#(hO s2޹FǽV3AoYf %`^v 2ygT,Ug[z/a9n5 ` {~>x:l1/Sزz?>(;\Ja'2.4`,, t<,#Xo*\Z5AbH#TybS ~2 ~S n'IJē{%T⽣gxKE?;(+%Vly P.Ș{`N:7a!KdU-G](}yxiE!0wNYQU茪vM( [V#5S i. $ ָl ^:C5@ Ҙ3ʼ>n+iBwљ /J`W9Ha3}$4s&Φ~jHJ`UBL:^Hh)c@ ZH+z\A ;;|u da sr 3 BceLڙpdm aVX:X;֐ye=Qݹ.:ug6Hi&?) h 9!rctl`LA'9ͅM' *z aY a;ere_ 2 aSp#ޒE>M_ yy,GEHu Y%^dy2E^V^HJ)zp<Q5c긷?".V[峾.vJ{Z]ˆDT)qY;Ua*|4[}:o7͟VVNodKȧ2m*"#u 嘤(HdIW"R1ȰaR ϩ5w^4?Wňi~Y1L.Z=Ƴ 0dAMgt59gk5rj<0.5=Kѭ'["S:'bTAnyWamd:1ӂ['.p i22e@ȽGϬ߭+}eVrƒ/I N@h@RϿ1κ k>NnЏpN~{ҠeҜeJq.= _ ث-xןF`dXN] rwfadwy,onP(Cds\=(;0AL}B<0q>vW MR*O9I I.V<w*뢌ۜ HX[zP?$h rB[ܽ>4W[2T3NjvHڝiɏ r*+Lq]Ʈkvwh>Y^as[{?.PWlt@gv~xBxF@Lb0fӼ8=\ a$'[JK '~ N&>h~yHRRԹMx֩-C|#U>jW!a'm񌠘mY1_w'Yߘ|9<|c+|%NՇ{A޷V`!0wuzuCPG-baL}?A㺥zS{O}~ ǨJ~]:7Nu!;h}=4b7zTQ[Wv9ؙwJ9ti'Rw 7} "pN#Qb˧'Q"RRךnBY N Uk$O}(uB5 oV2L1;) Y v>5OȣSʣ¹24F!v7)5z匿s#!tۛ,Yݻ*@Q^}1hH̐sǯEvz2tRG*w5eW}f;f,V#f/}ˋ7nh^pD?pa]VFŗqZ 5 bbxWzxY{wbj)#3 $q#3i(ɩS;ޣQNu=`̦{&a3X*( #ala{HX^LE?MVцl>.;0:3n(^^:Ґeo(׶/m'= FAָ3Tȉ0߸wKA9})ǂ+",1;$X Vv'deWH6 vy%:NJCMe Č*y0{ Cu̔ࡣ7-Zr!㓈JNV}6¥ SsBõYrHnozٚK54i5.~fT}|*u}()J]ܜny&~)Udؼ\Ԓ_Tx7Wb^6Ȥ8 .1]?;1w}3g]1].gf2y~-]AٙU+Ys'# qr #M2fWMeos/.=]2fЫ.9G3&9ke$**_5711|~9o=-7ffF\f60_3w mpwHsqafüjþd;L%u{'r1I46f>sfbGFl ̧yrf|}Ąx>f_>qr4əg|\ޯTCK12aQX@UlC EcK8vI+_\KRШ/j i׬Ų"pWPRg @QlU N 3tp\Uvf Տ#vn<!&;ةL٦]A ,IBajC;& <c1O@߭:LtAOC?~;P[mq]Dg|$`O5swbC0 Ҧ _ +۰8O/k?]g{#Ϥ'e$@6y܉OI8w٠t8= gU9ǝ`ш}`D޳TDIth}`ʰwxO}4r:+Ml8ǩU 4'"g< D/3\Hү{Òx OX~EБS0w!T9uB96e\@{θF#37 ,.~rUlL߉/m.iXk׏ʯ"_m77 iQ\ݎ >7SQŌ7* ?U~ gnge3q&5O>%N"jJV½Qy5f^ī3Y( rmq<'uI?ڐ~H7wxHJ(J(J(J(J(J(J(J(J(J(J(L=MV S<8~?se !'"% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% BP% E4:mB:thP#NipDOYWv'_+WlФd18JbJȋ4PdT#8<&v wvK~g1]}PS/5wғ9vyiFG!7Lc.{~*!C!7eSخeeec]:c„(!^0?&\)0@d(Mֹ?MGQ~GQ? úq< 9l0 o???~CM[ o579h= z~MVmDxksp!kSsq~hwij  :-< =J0_3 ޭ5k?6o3-־ ${jhm9ؑ=uTY~TWA0aoyʎdaQiխD'~F>'m"&8 <3>>7`mpߥhgV83>WVE}&$y!Q@zob~;mR>~-Ob}[۩Oi a/SIl!^OqoEtmU_C!~kP)U>, U?{.'ÉPpplZ+8_УAH`6s.ji 7!]aoȬZ<+kҳdo1iņyh(C9͐Shp Lj!91`۔muom>D1CTZ .Nը3f6>%cO!`xcɃߤ0~~}:?8X?`tp~}:?~=c`??Ã??G3vϚ:A?~ڮ5I~簆D5Ƚڼ굈L^suj""q5D2r]vA*c?G =V1 5oF߭v|y^|jy]=?BNSGz(;.F :POB ϡB?omottnk6AtC6mt?|9C" 0 `JC_͙jY۶_ 7kVmf%ϋ(kb}`-s! لBs_<s?O&?7v7}|976Xj*ą92Gk=8s~9+py&e@=ZP1k:Çc N1y9E-Zb|I{1.'4 gAA?5ŀc1kAԟfT4"¡Zc1Y{=Yք 61Y*|B+_LnT't09_55`k91юdŠ0z6/Ƕ85GLuc#Z7 6h}*m1MqkO5x1l~>K8#>hףZ6\M'αQD8Ls}<|3_W_'8[AhDG!4Z+r(\WAl=%pA\H+Z#G~V|/9j$kW$Ý{>}o_yǡ`n|| ŀCzY4監XUXr?S\8gak?WOhFiL[ źL2<%١CBq\""܀W@E@EGDD>ǎ8?-N:SҎv#ԣ]Mq"_wԝUDta/ԡ_}H8`>!0玍~G@@Km=P.?C?o c~hMsV k-?wYGZOYG>:vOGN;Fq"kl:&NB)ǬݡxEɚ>?Ǯ `PGW"^2 ΌtGFϠ=;| h;AфE<=͏Cܲ{O߸ǵt|=- m's?c#Fq l1Ɠ&k,Z[@pt:q?F D} axK0\c:7qmG1ڊ Qppt@qZ Kw@:_ᶘWUak x{@= w'X-Gi?kⷲO(tI RS;AL5ȏ&- nGSy?랃>tF[_:{QA\j. <s+Vɷtt?&:].Z};8mho@odLZge0PV!UfriJn-gng5w2GRYp&itЂ.-`$prͮU?%] :i B=XR:f& zba5_ nj fYAUA>0wAB]Ba2PxONm BqaBŸ+jr\.Ɉl.,J)7<t4H} HiEEWIōqVT cS4M{Rom&U=. ќisNB6S̆IJ ]5lI(&.qKiׅ&mf(4)ȿrӕZ!S"J4dF"V2exEmxtQ[Iu4UpnFYIPN^);bRڂpD C.V>1rp-fнᴻgt-;~0-M77lUY~^ubICu',^$ܼU76ck/^]?\Mu)K'k+rO(R H H_/?brԧT}UA2/yFq^u{U/.T=M '搫}vבTgd^;.b]{jkbo9Z1; I. 6r͇Tg($c54/tiM}3 P&AH:+b;PM:L7d:d5Ѧ$/ɋ_O9*9In͊[)b{$:"$L)# ]'b\mԖ>).}Y}}OiUVɫEJѐAez4#Oz%+ͩlΕwc7ulVٟY^mW҈y ,[lPM/ZN$r5>M]0j˧a%֫c? 0cJٍُ'>TZxp,زI97\}[fLz>)y.Vɧ&brB̧N \tdʳ8 e[6gX-=/?}q%9.BtdD+25lL n $<ɇRJ lx|vL/Ex4튪lUD촪۵W"i)8u='湝V:s?LX`<]+/lVc*x2)y>C]94߭&]cr.zn\ƹ9ls5L,@ Kb-ձUa C8[-QX20`z e*@ N)*j` Vrڕ8?|E6*[&l[ơ^1N[? ڣ Wk4KIˡA7MۖV[E7U a .])wƱ56We\ x) $CbtL BJ4SM!hдcS qPvA7+bԭr@Ӯk,Lv&ۼ{ 5Ȫʀ `X aaR]C Y0Lߓf\BvL*Gr4.C+sǸ}8n+pբOk .&?ezE~!L[]p :6?`o:\΅s״tW\ ]U}ׁu|8&{'vDvߓˉ.l].P'YݬCLU'E7 bWE0&'MIÿ{';b!7qmx[' .*Wv}O]7~0w >f`'5?^/?KƚH__yU^p y^CvWUH: [( F(!̚t 57ׇi;{=I%,R& VfVFhkdIt[Ҧcd*4+[-l-, -,drw9m߁~n>woG|흑$g|jY7$nrg"nm?!/Bx-T`b\c{̵K\wutŹslB~uì"0vr|3bS2qp&5ҘE햓9{<=V>]Kjy֜}YP|ZCT?o{PFt?Kw6sfn|+jGfU13y.~sy WiW;J;LYG*GCPl^$GO3Á:H:D=+!_~CU+,+e,*&j%ʲ:㣬S<߾S%9Ǧs}vѤHyG㏝is7#'/>_*OfJ7-pR+ /.PiB .(IsBKRFzsly,Yyc._pR$TlLXmH [)TWová+=)CRwJ]xb aqTbl/i,/NR/갺FhO#L*|^}e|dQ?՘^YϓBW4< 2]гJ^BNCp*noFu a{P$bIDb ;^R:5j^۶v_Zݕ]u#crұ~Ld:˜P #tWǸF`Ʋ9ahsFugJGOv9{QC+9dp볳at ۣPbuu$Y!U2(7p狳5̣Nk=!x ~_Fkk2?lߝ<饧!V^24!@PxL)ԙH8I* R 썽J+8֋Eo,da}>cҔ)RRa`rFʧ % 9q]&+E++"I/G_Cets/nqSzOqGQ1hF;#ʩ̭S$}-lDdhP+_`oA.b+5D/{R+5iCVZIjb0TwVbcc{t>϶,EgTYYtB*©Z^jPUtUJ }\WiCEXE`0].]p{}T^/,,9gY,jguwka-E_".j;Hv\&Km +;54Jt.nR02@=e5k1GaSQ$#0r*/ (T #`Vޥ ^ʢ;_Jy9M-[xH޻QK+"\q7w \e3:c<33f3}3 AR #v~[ҚϡY ܟ*rav _hO\mBƨZ''ĺq/ W'4%ޠ^^T:*V h'0*ٰ߭mR+S9f< O^'ծo$$r\zC5Ejt@WmR)SI9:[a;lO=BP3`v" BjT;Hb)1AֽRQbG!խӄEiW5=5 wСQG6ȟ%syMY6 ll,RjBge]EՊ( `TFInX6`40;7\ȱ=veI:38r3[ܽMsz`;ɼ+钎딷BNe_qe᛼6if26ʺ Ӵ*f-YV; wM|t^K<Su<)ՔUꋺ(3ZR9=Q:zVq_yUF[{?1$מV J&h7KȴP/I.QXS7|B]/!anY8^"q<@E2WBݴ44 y%-Xb>.+颾aU d` S6iW\Š/q϶̝S|xUqD\EC* {`/"L)N=5:)ߚPTARoIPUAT({ܠ*Fj4H_ILX2gv̫aSZlζpLRI(a*m2+}&w)jjg$m3?ulٷ1xE5Hbh=mϽ5{9J{# 9#icX< #ܴfPW%T0y7B܇[;X&7hb#Hz,,+#Bl3PiJRǁȿ6?p'foM|ܧvJO+"K>3&SuemqrK)nb)armM.QNUxܥVEnh`/S(\̢rHVQPORU=@ aV0!*6. }7j,UiFCiaPNN(KʵT}5kUj_M/y JH)đ {9\rбmg ϔk^&PJy^6Wzte6DX+xHXnÛ)po)mfiYNKՌK樵GF~uGSp>>\Z($m$.9̵Hժ~d.\(/{.HI QL(&Gx@^#< I$ԒOE>Ҭ%$p'D 38a QMx(&Gx@GxlSu%oW@Gx@8#< I$׈Omp'D ,Dp'F:Dxa҄Z\$Oip'D 58A QK QN%u.($p'D 38a QMx(&Gx@GxlS$Oly #< I$Okp'D 68"8b%vxKj QL(&Gx@^#< I$ .(øuHOgp'D 48 QM(%(اwIp'hFGPL!򇡰m˔*Svء/6~Y-˭ۧLiUr<%V/ik ܗYB:ϤWO=[p]=MO= DC<(mRyqOw޾.]@z<~B ̟qԸtm9wkЖ;3.l"hwoش̡-k2oe.wľψrQÓ1zmPy܄'^[oGa[i Cxu#Ƨᛓ5?O>G?\T8OdnN0fOunIo#a%vn}ظ&TOQliV D}k(q[ue @W)@O*;wmkw'}}?ŚT:P|8C|0n0;}MW{K<`V{w} ƻf-K[4t]jv21CTv\Dtd,>]'Ti̹9*vx#tֲ%Rv&@aXfg%lmK[e:/]{h<'\J'1ul3.SvHz \ z=)nzJKHY45[[InRګ UcگՅP68M^YkqxV2Ɲv#%zs,^]lXUSS5 No=oޝTk,[ lbXE]Jnʹ̆u\[uXq&Vk+|+BZ)>\,Sf]&xNb[{X雲Jx&Ɗ8qJ2nrƜ^/œ9jfkvUš%Y%=Rs+d*PFcyF`V8Hjs+(6H%m5 aQv1y 1NdaT2{2Zd5rnQ-& }C ̽7ZJ՘ΫSFΗXjKqҷCnS@ zu;qé.QoAAK#y)}\c}.^d̚ ԂTHo߆}K#A:#NI@u3tJ%U/=#Σ JkڌͿп U `Fo)&fyݔ6G LRhi4]?4L3Ccx]+Ї#aQfŦ9n"K!Νog!n=NvQA)|nVs(TMi}[w~N'ý%o;C'uOaՃ\Cwl+^d G qx_ &tyT(pfxRC-xFQXOu]-w1R%pxa|0 ېx\_DC(w3N$ݖd߸8`yǰxCs+`t [ /oX[ ;͹oOo㵯όRlCEq^m)/% WB2t y#L[4z7xb\6HƷf^{{#̟/1WrUxy [玘cb![q`%kX\X13`lpTBg:2jctB⤸]#1t0v&|!ߌ~&m&wVGA ѿMEK~9jk<5XьSm7GTaHHz]{n$+BzEbRC:{IM.1OYH\YNx~ {yG5ٵ;nizcs3Q}d$E^ (BhȇD #qbll5X:-{/WT?Rs4i])u ~A(Z>86eQEݥ > F+`"=ynI̕sРi"m,haWG GUG Ǒ%*u8 iDxo9ZqםIVOg6@Ͷ8:z_۷0[6pNQXVgd lZ< NI˶Ǝn56RŃVmiv]ԝZN0Ǖ$^<"#\嗌~Yx/,ye/DK/DQaf09ÆLm,cVګ[,mҞ^**6 V͂2R*TkyXi*#ŗ[Cd'Zч]1n87j'ͦ+p}/A>Ez h܎,Af/p 1"~P;tۗnm6{ &xsU6¨wP/#82tؚ*qj?~.~,o\ 7)[DR=!\w|'fq*qWARW[,%AZAEw R:(m~{ޑ? غfkՈ[u '?xf"?E|z[- ҍ%G{+18ovŘs,}$Yul Ne {"+ȯ**mTkۧc/UOlB!]&C<1t^ SI!!㱬{8)# ~e8- G| 6Cy.nU[s(_D,]V|;Ty\oإBg^3]4빥e[>Y$3U| EQodhz4ZI܉lBlŽ1[İGPadJ䑜m nRwbT.+?-hP;k[w1x?kY#\#AW|P7#07,sn=7 ,7#70ZYwj:]? {-qe_'ysPYd_ּOrj94]0Rne%bNOͬ3gFg3E$^$>5-s(:z@#K y}G*;aC.Uw*{e0 7~GƺI߱a `N ZjwKk>R=9f~MƌcQ@#df HԮoȤOM)Z==qő`㪗} rÜ%o_0p״k ZZG w&_^YCCl+/yj93͒g%5Yҙ*QP/aCw=oIDި=79G~ƣJpR9QOuxJMb$Uuw3>VC(HyyhLܖzgۡd/D5č~_ C+>c>},~Kod L->Lt*v9'8V^us{ g6P3r.mFC`%={F s?$:K!hjpU32NKǥCA߷A/W%YDVN=et70Y2XcI0]إuo|r P5^u-!'AIZ;N @'Mߤ.~GX4!*Awc=]?"kh}ѡ{$|RHPQAo 1L OE%XZY{Wݿ ƇSHa3 tCڥF&p>0 IAA:P9ϟ,{ʩ!1Җ Jt |!^a{^f3k[5{~. (5?N5? r{/![k@{~:sXX>t~ ~_ pY~X7}x?(P!OeDE!,$/x e|?Z>Qc`M ;럽w=HG~3Ϥ*ToyPGd@$ ^0uS۞IzrYB.WӑzLOݸ5~S}(I1vi+ʲ P!ZB^{HJ=}B4~Ktz*$NW=RR6iOZnwm.w?wbcT.k4=&NI]%#w`rv;N^'4=BS9rtYLW)a3v}柺Ҥ+W.'X˽ﻭ/_'}KQ߲;wsD8Q9#_W;Nj;Ɲ4ׅ~vI5ޟQ٨m>j#O <3xUW a0ӝ֞wK%@qJm$jV)Z# ? * Idž* 0ikU,f;* ݁"l+ғx(7>~/edXe,H?nTQeP(##FnѭHg$W1p 0{`5R TOBN=vZ4 ru`? dXhJd41#OkU?O~>ʑFb pPj5,sK,YK.1V,By/ԳK2EPƣr.%2% 𭔇x]>O#J$JHif(˗)Nԓ!b۽i5֒bPsH4t&Lw]JD -lh5-8 q README.TXTki=>_$ƶ*ɴ`N;~9mG̚ih@7UܺhJIx.U{?tEf>x԰qosqoF_W { Y~但#UNA`&R*430NKr#RH ` 1$H-~p^BMTNgq`9Lg3*YH;qFpv\5@e< iF``8[u3DS]S%}hNqe2 h[,,#"c$ɗ *~ITcf-tL=# 5MHKzU/ބ7R) VQcw>=ڃ N}(R1#IV".JRt7pS _67Ȟrvk_:$|Hi[V6mč~:/~Y?,ȗ#G#o>cw˞dyay'wɢ?c|5iTUq*731 <铯b)cUJ 3$3Nĉ;Lv'+C$(x` C섲!ʾ?[ThfT ?涛o5l8הիN5Zz<NF|zLq_Lėn/u8]Líc&g7c5iVZoQv&'i柽^9;r̻W*^ub{ lTGM[8]O&Cƣ],#4D oO6GAf}qģȋeN|K7ۻUn jasl -lh5-k[~w{߷GvF܍(vDaرL2?Lʇxzfo[ZU]ּ);U&<g~yHyy~.S]7iH xF} grm6Lܓ&_aM@ ]t臮0θncs{)`fY&$[1&9S i)T(Q8J0c@fD=g%OrFJ`{~9>0d3aA}0IVk;I3f(ڶɸ@Rvak lIRz?e130@y« &yNdkxw[^gDww6w;.k?,}sG(v\9st'FnchSj 38ms3{IM]|_NE]#O=G9BK&i8jgX}v)ؚ9:V7~"ܫ@MHl 4N @ͻ`IQ5*@Ӵŷ7@LE#OM:#1G7;i9 ޙxd}3G?4ӻB#lQĝ\u Ac4io7[[fv nCأ1}Nz ε"#@y&uZdbHnD im%sZlm:ʻD)kI> tI7$2aș]*r  yC6@q;T4kV:̧k9.|-iNOฦS!3!CQo[n7#u~W"x:;[VH=^ )o2`ߌ114$='CIߦkDwOqs ̓ nG[/SM߂l]vvZ䆜;R؆Vy$ʌٻyw XԲjHG];!!ʃ5PQdϝ4ݷ1 s3 ٵԡ@s34nvA:zRh\IQ gXx'68L3EN9H|(]u O1%VY"= ga= v@μ̠e! 0 BK@Q#}RY0%?) USɖop dVDȎ;w< X֩ e@vSb,3*l2=|c!7Wo9^ A/02T́ gP3@KrTshOzHL&h gКZҢ!ED}N`#L{kQ6m6\w+}Qi44Նzr`Z='iV^B_OP@%2nJ*ymuL{'yGe|}G-^5&SYd3R3S84 'bom1i'Z0Dh e$m2$qhp}.Mj}hb1zHGUv$'li'/|='{dID;!(DҢNXzDL1U~ 5&H1:p0*W{DGy<. ص١ Q>D{ ڢL(ݔ n$v(mݔƓ $_TR%ܔ̓>N{%1%O;U턆/l"dz ׼ˀ){Mm71`fdg婓Ii h+tLpLfkP!ɵllӱզ|Ō#8>[;! y]`Z`| Ucn̨!LѤ o0Wm 0x< rߌ= ''H 0>8,p< H{8x7sGE6o"߈wj uVi6V+~3ԁ&4 ٦8hlX@ŏ%&D 3 jl/QskBŷ3(+@z~!. R;@ @ o2'ꃨہ[{ṲG#Se"7p:0͈X:)f~_8h ?N`f8`[Θ4L=h0-WԈq{UWVA>lzxAqmK7Keކ_ 0ĩN駲tS@-_5ZeLCSl@<(x·&<ΨG, %_(RG}`gڂ^X;~ZO[0Ε]lI&ןrhٕ3u5*wyӉVhQGOhk>!?xilrmּ*uC`Es +)łhQ/NTɹѱg#nR@z<{k kJ}/ڷQ/y`t2Tv>VvƹT?Ţ]"O߈@ 4f=yۆl9R݌xiD8അrwh|+w0&0,s 2}7 96CSMcE;=_\`ej!sMխc"7GS;s@WV:SQkbsf<8ak` pCA@44:IA-H npSv:{ :_9I|.ع LTvk7{k\m #h~+{q2)n wkgEWCؒ_s#@XUAkse(rA#mw8USo-MQW#\Sn_{/c+CW~&&Q-ozY7=*nO}_$),TX L2C{i5kB ٫b6om ;Ūg̓UbjjkV1Fj^^*zUu[n1GıGpV_W E YTV0V׺^[}Jid;o9UL_:&2oQ#|Z6pߖ2g+DE /82nnGLQ10I?{iKeH;pnRԅH5UeֶWsR764nv7/j/V\b-/cvro(Vs9Kվ@ړl9 @"~2'-:pZ{c]M]`6YsBȐx(p*B# .֪bB&߇OQommK"니ͥnCĩ9MK6bzŰ-2cٍاfv׌aT7'`cY[|=l|=,g٧ܝPJ]}}N ᐋ~ݯYͥpț ~Nzo ]7Xug(YQ3[T2a`3zZz' Gx4I k>W,<{{;ϼ0Agڈt8 TnuXhrVMLTK8etw鋰s ap &U LPt˧V񪈬\b8Vſ׎ڸ$l <#NTG,xE :v2" J5Zr:Ͳa_KRݞyrO5 & . k5~:01%Va 𠟁0ubtjWcW1^j,W^I5zL%ON[f:)F;4P07i4?0h€Pה98t̕_}LX;v+ѫbq-=| >ݒPڽnQkrl+e.X|hGrhPĎm N:b+L׷]AYO*ѿd4!3OXͷE^(2o&W][mi9SA7*i6XZ1{B'>;`#Λs}cqΜ:} '# a|]cXaUۦWe% *ɓA> @U^\Ĥ1b{8[umܕݺFb[tӽ& :]Pt/$/BPPt̂_jwCSW5'^xʡr[4EC!Zr8IO}C]t3`9{'DPw#vT8^Wv'_6eFRc etz iö Jsͫ=DÊO\HD1yo7h GbfT Ԃ)yO$fWD3{B 1$pOf~aUdE~U^Wd"-$Zdr6 $oB֜LrHEO09T1L\~.>722*-h9 Z ihT]Sw+B=( :!8lRj6d,6Ki[u3wK5ß29yq3P}>O/!mFnl mv8R=[T S,߇V+eBoS)kߖh-Ix02;**Esb/UI1VҘ61 0dJ؉83sSmcW~Z W1>4S(Pn.{{&Շ֌"Trc"?Q}pz9~YuK[]<-#Vg|SLH9c&9rSrB67"W2J=O'bռ'("4mSǞ>7{(Ej}/ҥo*o  ]^ДnŋY܄HOT;y8<%Pgrx)`4g/xӊZ:h-0#ݨ$ua6Ŵй!X(e"}!IQ>!P=C Fx/e,E?*Bw*H+"`yZo z .xQK" 7d`J`w:P ZڼOf+D%?pV$960`Cpx1gz\ #̄xfѴCl$Zهϖ˾@~ lXbR"4`ċN{wlˬs=܍5 aܳz[!/*Jͦnp7BN]1&GE˼P -6Iq燎SKEaEA. Oói2ȲT֢3M?$hqJ•Aq2\;d@_bZ5D$R17/Ͱطen6.z}$#DzY0=W A ?S:6 mr4˄O}gEFAN`aޙE+'  Z|!KLFdIGpWn>:Ȥ@p4Dƒʖ')eD_,!71bMvвvaYT㝝 *ɬzile6'J7S]XG:[S11V+Хxkn5)#`LK:\Ma,-W2yL za[C%u P̟.t ?躵"}F OQoP[ :n3/`X?<,A.` m|Ep2m7$ D͕¶8H7$+xnyP]N .'AmX1U×/}>bo\HENe lXoVUB.4:A/م˲ grRc#RRIZ6(2tfP!M 6 YCt!WhΧlٱ I\X?خ{aj-+~gb2g1[LɁqQsdFD|è//b'aFPR9W<І#&:YO-DvkIx@ d}DN*múa1lmT O'kgc%*"#Ƹ"Rt̳-݇Fy*+AHeI( د<{jtЈճ؈ 8Cٓ`^Pex;e toqyjY(bs$߄ /`8_`^Q5b/6Q9!nWLjcːLe|Ȓ _HN0uo1i5g+x-.KaLuZ1YIdxTU#DuV{UxwNެgVD׫wͮgf42'8'WեCƷW5@Ow+b/ű#0K=,L2#:"y*Wf/H飕Ot;_!c+T-o˃d(] l"`kEâ.8N%hح}Pgఒm/#x1)ڍ #fi'HԔ𦦩i4ii_@>"54)W;8ʼnw0䖮j ? Wxū X^h$-8o!:kaSxθ  !|uZuN-;U@߅!Ӗ|IrŁڎ2*u oM0oQQ_ ͋Z naZ1xιӖt- .Դ0J7]W4𱾺U*b :F#{.Vl9"-F ]r_B۸T00hu?fQ@eꋲ6PUbӗHt-XQZw}N܀`UI#G]$Z$`| (j -r8mwoca:($@s3/t)ӳ1zlrRp?WlD5<)P-/*GFVJ>fm {&La IaмTa n2}9E78`S>ʱ'$O516哿8 ޅd2CӪGV)ϴSsw4ęO Om$Yo1K G ]NÏdGte/)uH\Ӗ]axrilAr޾9h_/0"Uӆ6y.>Ə&ShX2a;jaʫ蛕gs0:{"0 nfG é}K^UAD©MxGh-di)=*;x 67$fSXCqXӣy0zkIziUSz}i|T dhKBs?rP8ayKyL(jîĶ]P/GJz|db'NRIRCE$2|yl0QOn1N$шݓĹoO}‰rΌ,Ռۆ*E9D.QV?πKջF%Z_o4GO=bHw,QJ[-`}-_}E|P㩪v BhyrNMI#6e_E*l:PzLs*cL2B[GtkI0b*+g0wMV|4޹`I~RX /#[ rO\u>rM/tW*m+K;wnasei.B h0Y}[AHgxn[E-;wGf_`S>j ҋLJ\w|7A-4Apig0[L䝿ҫ^ v뻓O$w{8}Pryဓ[.8q {x0w;{Լ@cΥy> c h$ b>?Q"]1t#r/讦Tfzqh˺++X)ׯIwAAԔa=:}9)c´NOVhO" c/5ZJN}Xo6 /_ T|^;Ӓoa_/Lelz$r"B-= :3$P0J~XLBX9bkpC=@$_Cn+܍odRa4 '٪N;kWAfR1b_Jo!OC0=fM/HK#QRv{jp/l,;A$lXΩ]4B)/!r$ P2^}!DX nlkx)eN2mk"*/Ż6`_0+ThŃ `f<[+.= x7⿺r 2A#jnᙺ9o?\ U~O\vu$NgN\OzS̔FЍ ,[d++4Ժc%\l| INt җzrҗ14inQq¹:WNXj[9u/C Fr#IM=Ãz4 K[XrodpT@q4=Sܝ "!G+x6E7IzćyCRD]G(-T&?)%%QЭ8!xk,IX-lm 9*йJ~&:c@t:``*m/ic)U]?łvbn1.qK r% }·rN;]صWbbjφ)w>Ċ Aֵ_~hA:Ɨ֞ 4ú aB[Ф7Ȼ9mQhǸM] *`Ҭ_p7YI9*bFe 26m^!ꄺ+ ֕蜯+tUˁ 4.Ć0kqWϼpCm+ayYo|s`BŁāϔ@T==sQ>d) n v`V0TTfB xr73g? lg 8?1G!j0"{3'ًml3Y0#.Xv V5h05w1ǡ#_0n>8C?.5|Gs|^8g5~4`1>:-M`\SOf`" (T4"*` *b@ٞS+ NBN`2}5mk 8ESB n}}~w~}wWH}wmdF(X+80'o}la5(1Ɂ8a .W |ё.Y+ QbbD`_V N:a:\ȡ뇃ߕ0c ި$ E3<3s 5Y]ly=BWR~/ zvp8j 'lˆ)/00_ǘg==IއгC={9wIP-%j}[e03ݮLc"o7! Q0^">8 [A~bjbxKq,Hɓv$- : :<5hE&{@+3!!KݖI>%1&H8fĆ*JJ "K_zM8ϫڌH7Z[H洬Td3tũהmIS8ѕO?7:?+2_xc[{7ciQ7{ԗkyke qSݫ6&8{ 1SA^}mw'lboqʽҐ< "e͌d3*b G"[F2N塒fq#1Gu_Nu3=O>Zv_J),$(IH$ #t0\g D]`7S?P5>QD:>ô)i"I,Z&[GHqCG4.T9.U@mbωKZ^viAl* T2D%.]+QU`heع' l{!.=y|ԸuKYx5 גC TmN-Gk 2t/Ձs1ౢ >RV& Ϋ8IwH`YDog1h|Qzm0qF{nU.s]f׏@.qDfL6HߞDSk 2yz26%udl4C>Zf7HC*rߏvx,F=CɈ`f͠(LzpVx.{'4ERTﴲ=OhKm_2Lݰ iax3xqHbo0.XX)ej2Rj {dkv?0~F'tV2V)ËJnnT^جZ#۝*,\u EybH8f(LnŒ<%>Ohk i?huuF%T4MjX !G~@T!`&6+wY ʽZ88e0֍6qY+HQ*){"Kp}0RE`o(0o둃׍7`"M'#~f"`G400/EO'4H1|x9IеO ~i[b ހga]^-@%%S%wRƥ Cam}NO⛶\U,aHES!vݸhl`q|`p&~WbRJq XUZ8=т;$ÑBM!eK 6/?mfG#OUdJRH I|1.a\9w=g!($X/&TZ pb%aPAaOTU/a+dl~,ྠ /cX!Ud؜%QPcfޱi D,dc9hFN|f0-wB*V I62Aez;,s[´ 헔:U;gQil"Aj'~W@)[ -XRs~pVCEzSBfa7Zi% 6CS',0t^:#q hDBخ,j7~ %?;ہ}Ϸ_Jtv(+J6WCY Az^Φ B2?ҾH#ao,(b/~2.$:,gP]} N΀BHM@ Al0v {2x8ՙІd(C0 [$ezG^+jA)sn([[\r>1%Ik$0ʓA@B{XD %AwA僖j|3ً2KYyWAI5omM'86?#%0 @W~ % O.ayU?SB4꽮czկ4VWryz>n;~yԪd|npM;;'5cKAH 9$B#,!D@,аIN]RapNᆠ )0$MM)pؕ2I=(]Uۀ\la+G'U|~~^K=`o 9J X3TV;0}k_>T~~>"'OC^@SUe~+Yy+:(6BߊR *D@EBڒq"D} S#;Bp΅ZV3өjE\I ,DsFiH2;TZlN0bӴ Q+8:֬# (ǥ8P'f,[-!ju6pP`0p\%lU\NgTC1f$;w!x`nv`IXN˵2aY _ !$ӕHP$wuv^#"Xܜ#vtfΐl`IݥM@=x߃`"GW `!ߓخb`K<~ Y4g[@?Ԧ ~cC? K;3w[jX?k|`H-o]M/v>}cݏ4?vΥckߩ?_OxyStOjA'菟s3pO껠puO@*4usksQC:;ѸoF' 9TF~ÉJ>% _\t~sY:{@>W7r{]t3 T:G(9="ju3\#NwGs}&;Enqu:zÐN@^[Dn\}r|='uN'5k'Ppݻ{%?S9D:A4_ϒчtiQ-W4Csr{thhOsq;:)υz ζvU;FB~24z{zw`ɿj0ΟE:=8(AҚZ: .@p4aupȄ$q!X?~8S>s8k<<7 2+Paa0ʐGt7!H7>ڳ և gD3_ >s񱽄>}c$r8oj $?`~$ac7uv{CG.$=xWA<\ |h{@^?&'K &7P3.F7w?II<3=yO!KSXnBn-|2i(acBh3Z(eHmO=zoD-Y9j~[Eu,-OZt; S.IXVϝXyC'Č]roR]QP_bdԛOnX3&oG]i zP.}"9H`! O5rѱHBn7?HqҠXX,ۧSC`dAj~B옅P¬wukwtzicHi;DV*͆5;c5J0<4W /7'{F¿ȅ|%lk_WW ?Mxy $-f'8 N^d.$L6 ]Q"xb%vQȭ}E Q)Qlfǘc[S CϠ(BSRL) @B6^Q%%K5cG.*i&6hh\$TKXn(r8r[o v ÝoKX|g ]-Y o]x)ZerPx?dzGӃNѿit ,QufٶB !4Ň:dcCY}j 5k@z༲̻OVos @4=VAӯZ,s۾mk2Zν?/îAZ8z@4l1X<oP8̷X9݀ ySHw8XCO8[# IuBw=kysW 獨D Bo%s=ا>9PB5P->Lxq?iQډ~Z^ӗ `]m]J&쯂oT1 k 4!Ri|8,5(šY<{<ʯaؼAmJ/ +öXU#;,[8 fF+x8 nC*8;gTis 倀Xf>̎X7|{vGTC ﰩv#+|ixatb9~XFp TEu :B]@l҂īdk_2&b# 3Z,'OӑNӟuf|<R& &TrǢkrL\n":xEa!e2 1֚!B V 2 =dl5-X%a61-C̱S:elbnY-uvI5!Xl6;nEؐ0LU} =V%*eGD: Z4R̀_0MyP4 =UW)`װG邫ˆʄ{rӻ{qo@{3p:5{=Y׳fjczw%TzEmGOF(p7h:|OָոOOqRSLiKRP-9jQEѹթe&p^1 ,cm4tJַZd3*U2W=Qrc$\θN%̓ #E 0BqQ\NHj|3#-V iA?zW3oGD~]]>rX|/t}_?\ԖjCA'Ig$h3 LֈnZ ~S⥤3p+KHeqqjzO^_)Hg4.N\9:Ȭ m1{{|EmUwj+*cO_[g_`񟙺0&S} &av~VU^Zrx$[a]Y-rI%l]7(u%c?HYi6^je,8IWY.&#ڊ0o[%Uǩ8ZÉwݲ|e]lko1@u iYd3Hc@9^Kѷ9[xPS j %ҞjRnחxZ~3̩ɍʓ.t59A-7oBC ] ؤWG 'sÙ斢˚1HjjAEw Ô-@$^?jNjHeQG)RchrA`Xg5@h/+fٺXP-5^ Ē\q^jÚC+r7|T£Y2I,6 0pp+.[ț1Szхf:+s{ĸ`f/r4 u]H/&j+x+ɷ&LI4UY\>19|YT25b1KJ3k4ͳ уqp6&ibfC.@"4SbvK!V2;\ľֵ8Cl i %g\9;+ABjBB<  Software Release Announcement Adjust Vertical Tab as Needed CTOS/VpcTM Product Family Version R2.0.0 To order additional copies of this document  United States customers, call Unisys Direct at 1800448-1424.  All other customers, contact your Unisys Sales Office.  Unisys personnel, use the Electronic Literature Ordering (ELO) system. Distribution lists: SA,SN,SU,SW,PR5 System: CTOS Release: R2.0.0 FCS Feb 1994 Part Number: 4588 9508-000 >>>The previous page break contains special footer information. Do not delete it. The names, places, and/or events used in this publication are not intended to correspond to any individual, group, or association existing, living, or otherwise. Any similarity or likeness of the names, places, and/or events with the names of any individual, living or otherwise, or that of any group or association is purely coincidental and unintentional. NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product or related information described herein is only furnished pursuant and subject to the terms and conditions of duly executed agreement to purchase or lease equipment or to lease software. The only warranties made by Unisys, if any, with respect to the products described in this document are set forth in such agreement. Unisys cannot accept any financial or other responsibility that may be the result of your use of the information in this document or software material, including direct, special or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. RESTRICTED RIGHTS LEGEND. Use, reproduction, or disclosure is subject to the restrictions set forth in DFARS 252.227-7013 and FAR 52.227-14 for commercial computer software Copyright 1994 Unisys Corporation All Rights Reserved Unisys is a registered trademark of Unisys Corporation Context Manager, Generic Print System, TeleCluster, CTOS/Vpc, and XBus are trademarks of Convergent Technologies, Inc. CTOS and SuperGen are registered trademarks of Convergent Technologies, Inc. BTOS is a trademark of Unisys Corporation. OFIS is a registered trademark of Unisys Corporation. Apple, LaserWriter, and Macintosh are registered trademarks of Apple Computer, Inc. AT, IBM, IBM PC, and OS/2 are registered trademarks of International Business Machines Corporation. Common User Access, IBM PCAT, IBM PCXT, and IBM PS/2 are trademarks of International Business Machines Corporation. Intel is a registered trademark of Intel Corporation. Lotus 1-2-3 is a registered trademark of Lotus Development Corporation. GWBASIC, MSDOS, and Microsoft are registered trademarks of Microsoft Corporation. Presentation Manager and Windows are trademarks of Microsoft Corporation. UNIX is a registered trademark of AT&T. XVT is a trademark of XVT, Inc. >>>The page break before this heading contains the template that automatically generates your table of contents. Do not delete it. Contents Section 1 General Description 1 1.1 CTOS/Vpc Overview 1 1.2 CTOS/Vpc Product Styles 2 Section 2 Release Functionality 3 2.1 General Features for All Platforms 3 2.2 Features for EISA/ISA Platforms 4 2.3 User-Interface Features 4 2.3.1 New Configuration Parameters 4 2.3.2 New Action-M Configuration Information 5 Section 3 Product Interdependencies 7 3.1 Software Interdependencies 7 3.1.1 System Software Requirements 7 3.1.2 Recommended Additional System Software 7 3.1.3 Video Software Options 7 3.2 Hardware Interdependencies 8 3.2.1 Memory Requirements 9 3.2.2 Disk Requirements 10 3.2.3 Video Hardware Requirements 12 3.2.4 Recommended Additional Hardware 12 Section 4 Migration Requirements 13 4.1 Compatibility with Previous Versions 13 Section 5 Corrections 15 Section 6 Restrictions and Known Limitations 17 6.1 General Limitations 17 6.1.1 Comparing Native DOS to CTOS/Vpc DOS 17 6.1.2 Performance of Diskless Workstations 17 6.1.3 Minimum Windows System 18 6.1.4 Benchmark Programs 18 6.1.5 Time of Day 18 6.1.6 PSV Expansion 18 6.2 Hardware Limitations 19 6.2.1 Unsupported Devices 19 6.2.2 Read Only Memory Areas 19 6.2.3 Native Video BIOS Support on EISA/ISA 19 6.2.4 Newly Supported Register Instructions (CR0 & DR7) 19 6.2.5 Extended Memory 19 6.2.6 Second Serial Port 20 6.2.7 VGA Timing Limitations 20 6.2.8 Floppy Limitations 20 6.2.9 3.5" Floppies 21 6.2.10 Communications 21 6.2.11 Parallel Port Operation 22 6.2.12 Printing 22 6.2.13 Keyboard Keyclick 23 6.2.14 One Millisecond Timer 23 6.2.15 Reading Count Registers of the 8254 Timer Chip 23 6.2.16 Older 80386 Processors 23 6.2.17 Math Coprocessor Support 24 6.2.18 DMA 24 6.2.19 Rotating Priorities 24 6.3 Operating System Limitations 24 6.3.1 Interrupt-Servicing and System Loading 24 6.3.2 CTOS Debugger and DPMI Compliance 24 6.3.3 ERC 1603 on EISA/ISA Platforms 25 6.3.4 Native Video Usage Under DOS 25 6.3.5 Native Speaker Usage on EISA/ISA platforms 25 6.3.6 Context Manager II 5.0 Cut and Paste 26 6.3.7 Busy Loops and Background Processes 26 6.3.8 Formatting a CTOS Disk with a DOS Partition 27 6.4 User Interface Limitations 27 6.4.1 UserNamePc.sys 27 6.4.2 Size PSV Utility 28 6.5 Driver Limitations 28 6.5.1 Native Video Support on EISA/ISA 28 6.5.2 French Keyboard Driver 28 6.5.3 Foreign Keyboard Drivers 28 6.5.4 Windows 84-Key Keyboard Driver 29 6.6 DOS Limitations 29 6.6.1 DOS MEM Command 29 6.6.2 DOS FORMAT Command on Existing PSVs 29 6.6.3 DOS DBLSPACE Disk Compression Utility 30 6.6.4 DOS 386MAX Utility under Native Mode 30 6.7 Windows Limitations 30 6.7.1 Windows Versions 30 6.7.2 Enhanced Mode Windows 31 6.7.3 Mouse Driver During Windows Installation 31 6.7.4 Windows 3.1 DOS Box 31 6.7.5 Windows Enhanced Mode and the /s Option 32 6.8 Application Limitations 32 6.8.1 Phar Lap 386|DOS Extender Support 32 6.8.2 VCPI Applications 32 6.8.3 Turbo Debugger Ctl-Alt-Sysreq 32 6.8.4 Lotus 1-2-3 Version 3.1 32 6.8.5 Word Perfect Version 5.1 33 6.8.6 XTree for Windows Disk Logging 33 6.8.7 DBASE IV Version 1.5 33 6.8.8 MS Visual C++ 33 6.8.9 MSBackup 33 Section 7 Additional Product Information 35 7.1 Memory Usage 35 7.1.1 Extended, Expanded, and DPMI Memory 35 7.1.2 CTOS/Vpc Memory Emulation 35 7.1.3 Determining Application Memory Requirements 36 7.2 Instructions for Clustershare Users 37 7.3 Configuring DOS 6.2 for Dual-booting  38 7.4 Instructions for Windows Users 39 7.5 Representative Applications Tested 40 Section 8 Installation Notes 43 8.1 Overview 43 8.2 Types of Systems 43 8.3 Required Files 43 8.4 Default Conditions 44 8.5 Installing Windows 3.1 46 8.5.1 Optimizing Your CTOS/Vpc And DOS Environments 46 8.5.2 Installing Windows 3.1 For The First Time 48 8.5.3 Upgrading From A Previous Version Of Windows 49 8.5.4 Windows 3.1 And Non-Native Unisys Display Drivers 50 8.5.5 Common Problems With Windows 3.1 51 8.5.6 Windows 3.1 for Dual Boot (Native and CTOS/Vpc) 52 8.5.7 Completing the Windows Installation for CTOS/Vpc 52 Section 9 Support 53 9.1 Warranty 53 9.2 Support Category 53 9.3 Support Discontinuance 54 9.4 Product Assistance 54 9.4.1 Instructions 54 9.4.2 Environment 54 9.4.3 Software Components 55 9.4.4 Hardware Components 55 9.4.5 Circumstances 56 Section 10 Customer Product Information 57 10.1 Required Product Documentation 57 10.2 Recommended Additional Manuals 58 Section 11 List of Files on Product Media 59 11.1 Contents of the Distribution Diskettes 59 Section 12 Ordering Procedure 65 12.1 Ordering Software 65 12.2 Ordering Manuals 66 The above page break contains a even/odd footer. Do not delete. This section is designed to give an overview of the product and to introduce the SRA itself. Text can come from the NPA or Product Description. It should include the product name, part numbers, style IDs, and what kind of media the product is distributed on. Section 1 General Description This Software Release Announcement describes the CTOS/Vpc R2.0.0 product family. It provides a product description, installation instructions, and ordering information. 1.1 CTOS/Vpc Overview CTOS/Vpc provides the MS-DOS environment on CTOS workstations by using the virtual 8086 mode of the Intel 80386 and 80486 processors. CTOS/Vpc runs the majority of retail DOS and Windows software and provides binary compatibility for DOS applications that are compliant with the DPMI (DOS Protected Mode Interface) standard for Extended DOS programming. CTOS/Vpc runs DPMI compliant DOS extended software to break the traditional DOS 640K memory barrier and use the extended memory, protected mode, and multitasking capabilities of Intel processor-based 16/32-bit systems. By meeting the DPMI standard, CTOS/Vpc helped CTOS become acknowledged by the industry as the first non-PC platform to implement a DPMI host. CTOS/Vpc runs Microsoft Windows 3.1 in Standard Mode, allowing Windows applications to take advantage of Extended Memory. CTOS/Vpc also provides a builtin DOS Extender which is compatible with the Windows DOSX DOS Extender. CTOS/Vpc facilitates CTOS interoperability by offering a DOS environment similar to the environment found on IBM PCs, ATs, PS/2s, and compatibles. This powerful dual platform capability provides users the ability to run most favorite off-the-shelf DOS and Windows applications, as well as CTOS applications from one CTOS desktop workstation. CTOS/Vpc R2.0.0 is the second major release of this new generation of software that replaces the PC Emulator system by addressing DOS memory management issues PC Emulator could not solve. 1.2 CTOS/Vpc Product Styles CTOS/Vpc is released on 5.25" and 3.5" diskettes. Listed below are the style IDs and brief description. Description CTOS/Vpc Service, included with CTOS III 1.1 This software package includes the CTOS/Vpc control program which routes the DOS requests, services and manages the Virtual 8086 environment, provides I/O emulation, emulates the interrupt controller functions, and handles keyboard and video operations. It also includes the SIZE PSV utility for creating and resizing DOS pseudovolumes. NP25-PD6 CTOS/Vpc Microsoft DOS 6.2 This package includes the Microsoft DOS 6.2 operating system, utilities, and Quick Basic. NP25-WD5 CTOS/Vpc Microsoft Windows 3.1 This software package consists of DOS 1.2M byte or 1.44M byte media containing Windows 3.1. UP25-WD5 CTOS/Vpc Microsoft Windows 3.1 Upgrade This software package consists of DOS 1.2M byte or 1.44M byte media containing Windows 3.1. This package is available to licensed users of Windows 3.0 and Windows 2.0. LB25-PE6 CTOS/Vpc Product Localization Kit This software package allows localization of CTOS keyboard tables and messages for CTOS/Vpc 2.0. Section 2 Release Functionality Version R2.0.0 of CTOS/Vpc provides several new or enhanced functions over previous versions. 2.1 General Features for All Platforms  Second serial port allows use of COM1 or COM2 or both  Non-graphics workstation support for character-based DOS applications  Support for standard mouse drivers  DOS 6.2 is qualified and supported  Windows and Windows applications may continue to run in the background under Context Manager II 5.0 when switched to other CTOS applications  New support for certain processor instructions  Improved memory management allows greater sharing of different memory types  HIMEM.sys version 3.07 is provided  General performance improvement at interrupt level (5-10%) 2.2 Features for EISA/ISA Platforms The features below are only available when running CTOS/Vpc on EISA/ISA workstations (e.g., SG2400, SG3400, SG4000, SG6000, SG7000).  Support for native VGA BIOS and most native standard-mode Windows drivers (except on SG1000/1100/1200 notebook)  Native speaker usage for music and sound effects  Support for native DOS partitions on both CTOS and non-CTOS disks  Improved native parallel-port support now allows operation of some security devices and communications software 2.3 User-Interface Features Some improvements have been made in the user interface for CTOS/Vpc. For example, updated Help now covers information useful while running the program. 2.3.1 New Configuration Parameters  A SleepOnIdle parameter has been added to allow user tuning of CTOS/Vpc versus other CTOS applications  COM2 and ReadyBusy2 parameters have been added to support the second serial port  DriveCPassword and DriveDPassword parameters have been added to support DOS partition access to a non-CTOS drive, as well as pseudovolumes with a password 2.3.2 New Action-M Configuration Information  The new OS Version, VAM Version, User Name, and Mail Status fields give CTOS system information  The updated Available XMS field displays the amount of Extended Memory currently available on a real-time basis  The new DriveC (kBytes), DriveC Type, DriveD (kBytes), and DriveD Type fields give information about the size and type of disk being used for both pseudovolumes and native partitions. This Section describes hardware and software requirements. RAM and Media sizing requirements should be included as well. An example is provided here. Section 3 Product Interdependencies 3.1 Software Interdependencies 3.1.1 System Software Requirements The following levels of system software must be installed: CTOS III 1.1 or higher with Standard Software 12.3.0 or higher VAM 4.2 or higher 3.1.2 Recommended Additional System Software For running multiple CTOS programs, Context Manager II 5.0 or higher must be installed. For running some DPMI-compliant applications, the CTOS Debugger (e.g. Debugger3.3.Sys) must be installed on the system. 3.1.3 Video Software Options On non-EISA/ISA workstations, CTOS/Vpc uses an industry-standard software BIOS and special Windows drivers, as opposed to the BIOS and drivers that would be used under native DOS and Windows. On EISA/ISA desktop workstations, CTOS/Vpc uses the native video BIOS and Windows video drivers. The following non-native Windows video drivers are installed automatically by CTOS/Vpc R2.0.0 and operate using the built-in "Soft BIOS" included with CTOS/Vpc. B38, B39, SG1000/2000/5000, CTOS VideoCard: CTOS/Vpc 640 x 480 (with GHA) 1024 x 768 1024 x 768 (with GHA) The following native Windows video drivers are provided with CTOS/Vpc R2.0.0 because the drivers in the PW2 Op-kit are Enhanced Mode drivers that are not supported under CTOS/Vpc. These Standard Mode drivers may be installed by Installation Manager from the last disk in the CTOS/Vpc package ("DOS files" disk). They must then be further installed from within CTOS/Vpc by following the READATI1.TXT and INSTATI1.bat files in the C:\VPC directory. SG4000/6000/7000: ATI VGA Wonder 640 x 480 x 16 Large & Small Fonts 640 x 480 x 256 Large & Small Fonts 800 x 600 x 256 Large & Small Fonts 1024 x 768 x 256 Large & Small Fonts For running CTOS/Vpc with native Windows video drivers, the following drivers from the native PW2 Op-kits were available at the time of CTOS/Vpc R2.0.0 release: SG3000: Op-kit #MPI 400001-OK1 (Western Digital) 640 x 480 x 256 COLOR 640 x 480 x 256 COLOR (corrected) 800 x 600 x 16 COLOR SG2400/3400: Op-kit #CWS 40001-OK1 (Cirrus Logic) 640 x 480 x 16 800 x 600 x 16 1024 x 768 x 16 Large & Small Fonts 1280 x 1024 x 16 Large & Small Fonts 3.2 Hardware Interdependencies CTOS/Vpc supports systems equipped with a 80386 or greater processor, which includes the following styles: B38 series, B39 series, SG1000, SG1100, SG1200, SG2000, SG2400, SG3000, SG3400, SG4000, SG5000, SG6000, and SG7000. 3.2.1  Memory Requirements Approximate memory requirements are: (See explanations below) Vpc.run . . . . . . . . . . . . . . . . . . . . . 1.5M bytes SizePsv.run . . . . . . . . . . . . . . . . . . 170K bytes The amount of memory used by CTOS/Vpc varies based on the hardware and software environment. The following are the minimum memory requirements for different system configurations: CTOS & CTOS/Vpc 2.5M bytes CTOS & CTOS/Vpc & Win 3.1 3.5M bytes CTOS & CM & CTOS/Vpc & Win 3.1 4.0M bytes CTOS & PM & CTOS/Vpc & Win 3.1 6.5M bytes CTOS/Vpc together with CTOS requires a minimum of 2.5M bytes of RAM memory. However, 4M bytes is the minimum amount of memory recommended when running Context Manager II and/or DOS programs requiring substantial amounts of extended or expanded memory. Windows 3.1 under CTOS/Vpc will run in a 2M bytes Context Manager II partition, but at least a 3M bytes partition is recommended. If you need to run Windows 3.1 applications that require a substantial amount of working memory, e.g. Excel for Windows, it is recommended that your workstation is equipped with at least 6M bytes of RAM. This allows a CTOS/Vpc configuration equivalent to a real PC with 4M bytes of RAM. 3.2.2 Disk Requirements Disk requirements for CTOS/Vpc. CTOS Files (in sectors) Vpc.run 830 VpcMsg.bin 26 VpcChar.font 17 VpcLowRes.font 13 VpcHighRes.font 18 NGENVGABIOS 64 PCATROMBIOS 64 VpcNlsKbd.sys 58 SizePsv.run 222 SizePsvMsg.bin 5 DefConfigFilePart1 1 DefConfigFilePart2 1 DefConfigFilePart3 8 VpcAppend.run 121 DosDir.cmd 9 MSWrite.cmd 9 Vpc.psv (optional) 1100 2566 DOS Files (in bytes) AUTOEXEC.PCE 63 CDDRIVER.EXE 4451 CDR.EXE 8597 CMOUSE.COM 13848 CMOUSE.DRV 5120 CMOUSE.SYS 14331 COMM.DRV 9280 CONFID$$.SET 4203 CONFID$$.SLT 4992 CONFIG.SMP 75 CTOSAPI.DLL 28160 CTOSRQ.DLL 26624 DPMIHOST.COM 740 GETBATXT.COM 8337 HIMEM.SYS 9872 INSTATI1.BAT 4828 PEMM.EXE 13286 README 992 READATI1.TXT 1144 RS485EM.EXE 3243 UCOMM.DRV 9280 W31XL24.EXE 228836 WINSTALL.BAT ___3346 403647 Approximate disk requirements for NP25-PD6: DOS 6.2 (DOS Format) 5 Megabytes Approximate disk requirements for NP25-WD5 & UP25-WD5: Windows 3.1 (DOS Format) 8.5 Megabytes 3.2.3 Video Hardware Requirements CTOS/Vpc may be used in character-only mode on non-graphics B38 and B39 workstations. For graphics applications (such as Windows), CTOS/Vpc requires the Multi-Resolution graphics Controller (B25-VGX/GC-004) or its equivalent. CTOS/Vpc R2.0.0 supports the use of the CTOS VideoCard with EISA/ISA workstations, but does not require it. With the B25-VGX or its equivalent, the following monitors are supported: Monitors Supported Modes VM-001/2, B25-D1/2, B25-PD7 MONO VC-002, B25-CD3 EGA VGA-200-MON, SG-120-D, VGA VGA-931-VDM VGA B25-CA1 VGA, 8514 B25-GS1 VGA, 8514 B25-VA1 VGA Multisync (B25-VKA adapter) VGA IBM VGA(B25-VKA adapter) VGA PWM-100-COL VGA SG-130D/SVG-100-COL VGA, 8514 EVG-100-COL VGA EVG-201-COL VGA EVG-300-COL VGA EVG-400-COL VGA EVG-500-COL VGA 3.2.4 Recommended Additional Hardware A CTOS-compatible mouse is recommended. This section is included so that the user knows what modifications would be REQUIRED to his hardware or software configuration or to third party or proprietary applications used with this software. If some special upgrade help is available that should be stated here. If the product does not have significant migration requirements (if everything old "just works" in the CTOS tradition) then this section can be left out. Section 4 Migration Requirements 4.1 Compatibility with Previous Versions There are no known incompatibilities between CTOS/Vpc 1.2 and CTOS/Vpc 2.0. >>>Note any special API changes that would require changes in existing applications that use this functionality...That is note any instances where we are not supporting backward compatibility for user written applications that use this product. List corrections (bugs fixed) since last release. All customer initiated UCFs should be listed. List UCF NUMBERS only. No descriptions. Technical Support can help to generate this list. Section 5 Corrections The following PLEs with CTOS/Vpc 1.2 have been corrected in CTOS/Vpc R2.0.0: PROBLEMS CORRECTED PLE 16053015 + keys are no longer available after '@' is displayed. PLE 16084123 Could not use the commercial rating option of Excel-O-Rater software. PLE 16064262 It is not possible to use datacom application 'Kermit', under CTOS/Vpc. PLE 16046787 Vpc exits with erc 15800 when running Windows with Netware and Lance/NW PLE 16005835 DUNN's direct access package does not run under CTOS/Vpc. PLE 16018686 Vpc does not support POPF and PUSHF with value set to 4000h. PLE 16004235 Serial port hangs on a SG3000 when running Windows Terminal. PLE 15969482 CTOS/Vpc hangs in Lotus 123 when Num-Lock or '00' or '/' is pressed. PLE 15955104 Mouse cursor hangs or becomes invisible. PLE 15942355 Installation of INFOConnect Windows application fails under CTOS/Vpc. PLE 15839007 + opens the menu bar in DOS Editor. PLE 15932929 Intermittent hang or Erc 15801 when formatting disks under Windows on the SG3000 PLE 15919051 Installation of ICC/Intercom fails under CTOS/Vpc. PLE 15917199 It is impossible to install Windows applications when using CTOS/Vpc s1.2.3. PLE 15912073 Windows SDK code view debugger (CVW4) does not work under CTOS/Vpc. PLE 15886188 CTOS/Vpc crashes with erc 15801 during the installation of Quattro Pro for Windows. PLE 15891467 Unable to install Blue Book Rating software under CTOS/Vpc. PLE 15865351 CTOS/Vpc crashes with erc 15800 when printing from Lotus 123 v3.1 in WYSIWYG mode. PLE 15886897 Reading from or Writing to a floppy from Lotus 123 crashes CTOS/Vpc with erc 15800. PLE 15876042 WordPerfect Document does not get printed correctly when it is printed directly to a printer. PLE 15483822 Intermittent Keyboard Lock after using +<.> on French Keyboard. PLE 15836121 Datacomm program running Async Bisync protocol does not work on SG2000. PLE 15851091 Keys 6 and 8 generate the wrong characters on a Belgian or French keyboard. Use this section to list things that don't work, not hardware and software requirements. Section 6 Restrictions and Known Limitations CTOS/Vpc runs a DOS environment that is compliant with industry standards and specifications. However, it is not 100% IBM PC AT hardware compatible. It is important to note that this is a hardware compatibility issue and not a DOS environment issue. CTOS/Vpc Release R2.0.0 supports Windows 3.1 in Standard Mode, an industry standard ROM BIOS, and executes DOS 5.0 or DOS 6.2. It maps direct I/O to hardware devices, uses the IBM 84 and 101 keyboard formats, and supports direct access to the video and graphics RAM. In addition, application programs written for an IBM PC AT with register level access to VGA, XMS, and DPMI are supported. 6.1 General Limitations 6.1.1 Comparing Native DOS to CTOS/Vpc DOS Although most applications never know the difference, native DOS runs in real mode, while CTOS/Vpc runs in protected mode, using virtual 8086 mode for DOS. These guarded, multitasking modes of processor operation used for CTOS/Vpc have higher overhead than in the simple native case, so that direct comparisons of native DOS performance against CTOS/Vpc DOS performance are incongruous. A closer native approximation to CTOS/Vpc DOS operation is obtained by running programs in the DOS box under Windows running in enhanced mode. 6.1.2 Performance of Diskless Workstations Since disk access through the network may take longer than accessing a local drive, native PC-like performance is rarely achieved on a diskless workstation. This holds particularly for servers with limited resources. 6.1.3 Minimum Windows System Since native Windows is noticeably slow on a 16 MHz 386SX, such a hardware system is even less likely to satisfy a CTOS/Vpc user running Windows. A 25 MHz 386DX system may be the minimum satifactory system for running Windows under CTOS/Vpc. 6.1.4 Benchmark Programs Most PC benchmark programs give ludicrous results under CTOS/Vpc, and several do not even run. Benchmark programs require very precise time measurement, much more precise than any of the normal methods available on a PC provide. As a result, many benchmark programs make use of highly hardware-dependent techniques to attain the precision they need. CTOS/Vpc is unable to support many of these techniques. 6.1.5 Time of Day The time of day will now be maintained more correctly by PC programs running under Windows, by virtue of the background processing. However, the time may still run slow under some conditions, and will stop in the background if Windows is not running. 6.1.6 PSV Expansion The pseudovolume expands in increments of 500 sectors. Therefore, it may seem to expand in disproportion to the amount of data being added. CTOS/Vpc provides the expandable pseudovolume to optimize disk space usage, but it may incur a problem when your system runs out of disk space. DOS, running under CTOS/Vpc, will think that yo u have space. In this case, CTOS/Vpc returns an End of Media error to the DOS program attempting the write operation. This is generally reflected to the user as a DOS error message, but may cause unexpected errors if an application has checked for availlable space, found it to be sufficient, and then blindly writes to the disk without checking for errors. 6.2 Hardware Limitations 6.2.1 Unsupported Devices The Unisys AGP graphics module is not supported. Video Controllers GC-001, GC-002, GC-003, Unisys B25-GRA, and Unisys B25-GRE are not supported. The VM-003 monitor is not supported. The PC Compatibility Module (PC-X01/B25-1PC) is not supported. 6.2.2 Read Only Memory Areas Both the ROM BIOS and Video BIOS under CTOS/Vpc are not write-protected. In fact, they reside in RAM. Therefore, any misbehaving program that attempts to write to the ROM areas will be able to do so and will cause unpredictable results. 6.2.3 Native Video BIOS Support on EISA/ISA Native video BIOS support is only available on EISA/ISA platforms (excluding the SG1000). Some high-resolution video modes may simply exceed the limits of the video RAM installed in your workstation. This tends to produce corrupted images in one or more areas of your screen. 6.2.4 Newly Supported Register Instructions (CR0 & DR7) While the reading of registers CR0 and DR7 are now supported, the writing of these registers is inhibited (equivalent to a NOP instruction), because of their potential effect on CTOS operations. 6.2.5 Extended Memory CTOS/Vpc does not fully support DOS Interrupt 15 function 87h and 88h. In spite of of this limitation, extended memory is now listed on the MEM command in CTOS/Vpc. The memory is there and is available to programs that make use of it through HIMEM.sys function calls. 6.2.6 Second Serial Port The second serial port under CTOS/Vpc is only available on workstations with two or more serial ports. The maximum throughput on a COM channel may be reduced when using both COM channels simultaneously. 6.2.7 VGA Timing Limitations Due to timing limitations, CTOS/Vpc cannot accurately return the status of vertical retrace. CTOS/Vpc does not support the vertical retrace interrupt (port 3C2). Also the feature control register (write to port 3DA) is not supported, and the enable/disable feature (write to port 3C3) is not supported in the same way it is on a PC. Certain problems appear only when the CTOS/Vpc must trap I/O instructions using the soft video BIOS (on non-EISA/ISA platforms and SG1000). When CTOS/Vpc is trapping horizontal lines may appear while the PC program is updating the VGA attribute controller. This is known to affect DBASE III and the BGI Demo that is part of Turbo C. 6.2.8 Floppy Limitations On systems with an NEC compatible floppy drive, diskettes formatted as high capacity cannot be reliably reformatted as normal capacity. This restriction also applies to IBM AT with high capacity drives. On systems with an NEC compatible floppy drive, the FORMAT command does not report errors if a low-density floppy is formatted as high density. However, errors are reported later when the floppy is accessed. CTOS/Vpc does not support 2.88M byte floppies. It only supports the 360K byte, 720K byte, 1.2M byte and 1.44M byte diskettes. CTOS/Vpc does not support the verify feature in its BIOS. CTOS/Vpc does not support the access of floppy drives across the network. You can only access your local floppy drives. Some floppy-based copy-protection schemes are incompatible with CTOS/Vpc. 6.2.9 3.5" Floppies CTOS/Vpc cannot format 3.5" floppies when used with a version of DOS less than 5.0. If CTOS/Vpc is reset using with a 3.5" CTOS format floppy inside the floppy drive owned by CTOS/Vpc, the CTOS/Vpc screen is filled with a repetition of some random character. The problem happens because the 3.5" CTOS floppy format has a DOS compatible boot sector. To overcome this problem, remove the 3.5" CTOS floppy from the floppy drive and reset CTOS/Vpc again. 6.2.10 Communications Programs that are timing-dependent or that expect acknowledgments within a certain time period are not likely to work due to differences in timings between CTOS/Vpc and a PC. PC programs which communicate at higher baud rates and do not use flow control (e.g. Xon/Xoff, CTS) may not function properly. The more successful conditions would be: 1) a modern communications application (1-2 years old), 2) running dedicated (no other CTOS contexts or Windows programs), 3) on a fast (33 MHz or greater) 4) powerful (486 or greater), 5) dedicated workstation (no network connections). Under such conditions, baud rates of 9600 or 19200 are easily sustained under CTOS/Vpc. The conditions that may diminish success are: 1) less modern application (2-5 years old), 2) less dedicated software environment (more CTOS or Windows apps), 3) slower (16-25 MHz), 4) less powerful (386), 5) less dedicated hardware environment (clustered or server). Various combinationsj of such conditions will lead to lower maximum baud rates under CTOS/Vpc. 6.2.11 Parallel Port Operation CTOS/Vpc does not support a fully bidirectional parallel port. On EISA/ISA platforms, the parallel port under CTOS/Vpc does now correctly exercise all (5) of the available status signals and all (6) control signals. This allows proper operation of some specific parallel port security key devices ("dongles") and some parallel port communications packages. Devices making full bidirectional use of the data lines, such as scanners, are not supported. Depending on the method used to access the parallel port, printing and other functions may be substantially slower than on a real PC. Many DOS programs use an inefficient but safe method to access the parallel port. This method provides adequate performance on a PC but causes a great deal of emulation overhead under CTOS/Vpc. On EISA/ISA platforms, CTOS does not support CTOS/Vpc usage of any parallel port (LPT1) address other than hexidecimal 3BC. 6.2.12 Printing When using an Epson printer, pin 14 on the CPU side of the parallel printer cable must be tied to pin 1 on the printer side of the cable. Pin 14 on the printer side should be open. (These are the same pin assignments as the parallel printer cable for the XE530.) If these rules are not followed, multiple line feeds may result. CTOS prints an extra linefeed (LF) with certain printers (mainly on dot-matrix printers). These printers interpret the carriage return (CR) as CR and LF, which follows by a normal LF character, resulting in an extra LF in the printout. This is due to the printer design and not related to CTOS/Vpc. However, CTOS/Vpc does provide a workaround. The extra LF can be eliminated by using MSDOS Read to copy the file to CTOS ("Map CR/LF to new line?" = yes), and printing the file from there. For local printing, the performance will be greatly improved if you use direct printing from CTOS/Vpc instead of printing via GPS with local installation. On non-EISA/ISA platforms (such as B38, B39, SG5000, etc.), CTOS/Vpc is unable to accurately report the printer "Out of Paper" status. Instead, it returns an "Off-line" status. If you have a small notebook printer that holds single sheets of paper, use GPS spooled printing with standalone installation rather than printing directly to the LPT port. 6.2.13 Keyboard Keyclick Keyclick is not supported on any of the keyboards. 6.2.14 One Millisecond Timer PC ATcompatible hardware provides a one millisecond clock which uses the realtime clock chip. CTOS/Vpc does not currently support this feature. This can affect the BIOS Delay function, and is known to cause strange results on several DOS benchmark programs. At this time, there is no application software which is known to be affected by the lack of this feature. 6.2.15 Reading Count Registers of the 8254 Timer Chip CTOS/Vpc allows programs to read the count registers of its virtual 8254 Timer. However, the CTOS/Vpc emulation does not always accurately reflect the amount of time that has passed since the previous read of the counter. This causes bogus results with some benchmark programs and is known to affect XTalk For Windows version 2.0.0B. 6.2.16 Older 80386 Processors As documented in the Intel Stepping Information for the 80386 processor, some very early versions of the processor used in old B38 modules produce erroneous addressing when paging is enabled. Running CTOS/Vpc on these older (circa '85-'86) processors may produce sporadic failures. 6.2.17 Math Coprocessor Support Under CTOS/Vpc, if a DOS application causes a coprocessor error fault (Fault 10h), CTOS does not always handle the fault correctly and causes CTOS/Vpc to exit with erc 15801. This situation only happens with a system that has a 80x87 coprocessor that the DOS application tries to use and generates floating-point error. 6.2.18 DMA CTOS/Vpc only supports reads to DMA port 81H and writes to DMA ports 04H, 05H, 0CH, and 81H. This affects backup programs such as PC Tools and Fastback. 6.2.19 Rotating Priorities DOS programs that attempt to use the rotating priorities feature of the 8259 do not function  under CTOS/Vpc. This includes DESQview. 6.3 Operating System Limitations 6.3.1 Interrupt-Servicing and System Loading Vpc performance is affected by CTOS use of system services that may occupy large percentage of processor time, consequently applications under CTOS/Vpc may run more slowly if many CTOS services are installed on the workstation. In general, programs requiring fast interrupt response and interaction may not work properly. This may be particularly apparent where communications programs cannot keep up with the data rate. Use of data compression on the modem (MNP5 etc.) may cause data to be delivered to the UART at a rate faster than CTOS/Vpc can handle it and faster than the user realizes. 6.3.2 CTOS Debugger and DPMI Compliance CTOS/Vpc uses the CTOS debugger to implement breakpoints for DPMI programs. Programs that depend on DPMI breakpoints may not work properly unless a CTOS III debugger is installed on the system. 6.3.3 ERC 1603 on EISA/ISA Platforms Under some conditions on EISA/ISA platforms, CTOS III will require an additional parameter to be placed in the CTOS config.sys file to avoid a CTOS/Vpc failure with ERC = 1603. The parameter entry is :cParSpecHeap: nnn where nnn is an integer up to 4096. After making any required change, the system needs to be rebooted for the change to take effect. Versions of CTOS III less than 1.1 will require the new entry in order to run even 1 copy of CTOS/Vpc. The value nnn should be set to 128 plus an additional 568 for each copy of CTOS/Vpc to be run. For example, a value of 696 would allow 1 copy of CTOS/Vpc to run. Starting with version 1.1 (and greater) of CTOS III, the default system value for cParSpecHeap will allow 1 copy of CTOS/Vpc to be run without having to add the entry. If multiple copies of CTOS/Vpc will be run on the same workstation, the entry would have to be added according to the formula described above. For example, running 2 copies of CTOS/Vpc would require the value of nnn to be 1264. 6.3.4 Native Video Usage Under DOS Native video support under DOS is limited to operating modes supported by CTOS III 1.1, VAM 4.2, and Context Manager II 5.0. 6.3.5 Native Speaker Usage on EISA/ISA platforms Software that tries to synthesize speech or other sounds by programming the timer to a period of less than 750 usec will not produce the desired results under CTOS/Vpc. Such close timing cannot be provided in the multitasking CTOS environment. Most software that plays simple musical selections will work properly Some programs use Timer channel 2 for timing purposes other than speaker operation. Since CTOS allows background processes to beep, a beep may occur at an inopportune moment and foul up the timing process of the foreground application. One solution is to provide the :NoBeep:Yes parameter in the CTOS Config.sys file to prevent any CTOS beeps whatsoever. 6.3.6 Context Manager II 5.0 Cut and Paste Using Context Manager II 5.0 Cut and Paste to transfer data to CTOS/Vpc will lose all the Carriage Return Markers and may cause data loss if the application cannot hold all the characters in one line. 6.3.7 Busy Loops and Background Processes When running DOS in virtual 8086 mode, the impact of the CTOS/Vpc context on other contexts is determined largely by priorities. CTOS/Vpc contains three processes with default priorities of 127, 128, and 129 (Decimal). DOS and DOS programs execute in the process with the priority 129. CTOS programs of less priority will not run if the DOS process is executing a busy wait loop. This is a problem when GPS is installed on the same system on which CTOS/Vpc is running. The default priorities of GPS drivers are low and can cause a conflict when printing. CTOS/Vpc release R2.0.0 addresses this problem in four ways. (1) COMMAND.COM is a DOS program which executes a busy wait loop at the "C>" prompt. When CTOS/Vpc senses this condition, it inserts WAITS that allow CTOS programs of lower priority to run. (2) Windows 3.1 executes a loop much like Command.com when Windows is idle. CTOS/Vpc detects this condition and inserts WAITS that allow CTOS programs of lower priority to run. Note, however, that some Windows applications never inform Windows that they are idle (for example, the Notepad and Write applets). Such programs prevent CTOS/Vpc from allowing CTOS background applications to run. (3) The CTOS/Vpc Configuration option PcPriority permits the user to change the priority of the PC Process to a priority that does not interfere with other CTOS processes such as GPS. (4) The newly added CTOS/Vpc Configuration parameter SleepOnIdle permits the user to vary the type and amount of waiting that CTOS/Vpc does, almost like setting a speed control. The four settings for the parameter are: None: CTOS/Vpc never performs the standard idle-waiting described in items 1 & 2 above. Some: CTOS/Vpc performs the standard idle-waiting described in items 1 & 2 above (same performance as previous version of CTOS/Vpc). More: in addition to the standard idle-waiting, CTOS/Vpc will wait briefly at every fourth DOS timer tick (INT 1Ch). Most: in addition to the standard idle-waiting, CTOS/Vpc will wait briefly at every other DOS timer tick (INT 1Ch). 6.3.8 Formatting a CTOS Disk with a DOS Partition Partitions created for DOS using Standard Software R12.3.0 Format Disk or Configure Disk may not allow you to Install or Upgrade DOS. If you have yet to install Standard Software make sure to set [Suppress format of medium?] to Yes or see your current Standard Software SRA to see if this problem has been fixed. If you have already installed Standard Software R12.3.0 you can find out if your partition is correct by running Disk Partition Display Details on the disk in question. If the Size in sectors is larger than your total disk then you will need to reformat the disk before you can Install or Upgrade DOS. You can do this with Standard Software R12.3.0 Format Disk or Configure Disk by setting [Suppress format of medium?] to Yes. 6.4 User Interface Limitations 6.4.1 UserNamePc.sys The UserNamePc.sys file must contain all of the entries that are included in the default UserNamePc.sys file. The entries can be changed, but they must be there. For example, the graphics adapter entry can be changed to EGA, but :GraphicsAdapter: must be in the file. If any of the entries are missing, CTOS/Vpc will return an error 1 when invoked. CTOS/Vpc does not ignore whitespace (such as tabs) in the configuration file. Therefore, the presence of tabs or other whitespace is likely to result in an error. Furthermore, multiple entries of the same parameter in the Pc.sys file are not detected. Only the first instance is used, with any subsequent entries being ignored. 6.4.2 Size PSV Utility The allowed range of values for the Size PSV command is from 1 Mb to 127 Mbytes. If the value given when creating the pseudovolume is in the range 1 Mb to 30 Mb, the pseudovolume cannot be resized later to more than 30 Mb. If the initial value given is in the 31 Mb to 127 Mb range, the pseudovolume can subsequently be set to any size less than 127 Mb. 6.5 Driver Limitations 6.5.1 Native Video Support on EISA/ISA CTOS/Vpc supports native video on EISA/ISA workstations using drivers that are produced and provided by the hardware vendor. The only native drivers provided with CTOS/Vpc are those for the ATI chip hardware currently in the SG4000, SG6000, and SG7000. Any native drivers used must be for standard mode Windows 3.1. Windows 3.0 drivers are not supported. Enhanced mode (virtual) drivers are not supported. Some non-conforming, high-resolution native drivers do not allow proper context switching. The problem may be overcome in the future by the use of a GDI Enable utility to make the necessary link between Windows and CTOS/Vpc. 6.5.2 French Keyboard Driver Under CTOS/Vpc, if you enter the KEYB FR command and then run DOSSHELL, the pipe (|) symbol will not display. This behavior also occurs on some real PCs running DOS. 6.5.3 Foreign Keyboard Drivers Delays in processing can occur in programs that load their own keyboard drivers. This is due to execution of excessive I/O instructions to determine keyboard type. The only known program that does this is Windows which CTOS/Vpc detects and handles. Therefore, this should not be a problem. 6.5.4 Windows 84-Key Keyboard Driver The Windows 84-key keyboard driver is not supported, and may cause improper operation of the GO and other keys on CTOS keyboards. 6.6 DOS Limitations CTOS/Vpc only supports standard versions of DOS distributed by either Unisys or Microsoft. CTOS/Vpc does not support the DOS HIMEM.SYS XMS driver for extended memory. CTOS/Vpc has its own HIMEM.SYS which is based on Microsoft's XMS specification and provides the same functionality, including UMB (Upper Memory Block) support. The DOSSHELL that comes with NP25-PD6 has been configured with VGA resolution. If you use EGA graphic emulation, after you exit from DOSSHELL, you will have a screen out-of-bound problem because DOS is expecting a higher resolution VGA screen display. To reset the screen, you have to reboot with . When switching contexts using Context Manager II, DOS programs (as opposed to Windows) will not run in the background, nor will they support any native high-resolution modes that are not supported by VAM. 6.6.1 DOS MEM Command The MEM command may not display an accurate amount of extended memory used. The same problem also appears with the native PC using Himem.sys Version 3.07. The MEM command will not display the amount of expanded memory if you set the 'V32' switch of PEMM.exe. 6.6.2 DOS FORMAT Command on Existing PSVs CTOS/Vpc does not fully support reformatting an existing pseudovolume (PSV). The user must specify an unconditional format (/u), or the operation will fail when DOS tries to save the old FAT and Root Directory areas. This also means that CTOS/Vpc does not support unformatting a pseudovolume. 6.6.3 DOS DBLSPACE Disk Compression Utility Before running the DOS DBLSPACE command on a pseudovolume, be sure to first run the CTOS/Vpc Size PSV utility to set the maximum size of the pseudovolume. Trying to run DBLSPACE on an expandable pseudovolume will result in a failure during SCANDISK (part of the setup for DBLSPACE). Furthermore, to avoid exceeding the available File Allocation Blocks, we recommend first backing up your system and running the CTOS Disk Squash utility. 6.6.4 DOS 386MAX Utility under Native Mode The DOS program 386MAX Ver. 7, for use under native DOS only, includes a module that supports ExtraDOS (additional DOS memory in Windows DOS sessions). The drivers for this ExtraDOS functionality are installed at the end of CONFIG.SYS and must remain there. This presents a problem when the same CONFIG.SYS file is used for both native and CTOS/Vpc booting. Using menu techiques, under DOS 6.2, the initial 386MAX drivers may be bypassed but not the EXTRADOSS.MAX module. As a result the execution of the ExtraDOS.max module under CTOS/Vpc results in an error message during execution of CONFIG.SYS, this HAS NO EFFECT on the operation of DOS, CTOS/Vpc or any further DOS operations. 6.7 Windows Limitations 6.7.1 Windows Versions CTOS/Vpc does not support Windows version 3.0. For Windows version 3.1, CTOS/Vpc does not support off-the-shelf Microsoft Windows but requires instead a specially modified version of Windows sold by Unisys for use under CTOS/Vpc. The minor modifications required for the CTOS/Vpc version still allow that version to be run under native mode DOS, without CTOS/Vpc. 6.7.2 Enhanced Mode Windows CTOS/Vpc does not support Enhanced Mode Windows. Some features that are therefore unavailable are Virtual Device Drivers, multiple DOS boxes, and the Dialog Box that requests confirmation when rebooting (with the Ctrl-Alt-Del key). However, some applications say they require Enhanced Mode Windows when they actually only require extended memory management. Since CTOS/Vpc provides this as a DPMI host, such applications typically run fine on CTOS/Vpc. 6.7.3 Mouse Driver During Windows Installation If you load the mouse driver into upper memory with the line "DeviceHigh=C:\DOS\CMOUSE.SYS" in your CONFIG.SYS file, the installation of Windows will fail. After successfully installing Windows, loading the mouse driver into upper memory does not cause any problems. 6.7.4 Windows 3.1 DOS Box An application running in the DOS Box under Windows will not execute while switched to the background, similar to any DOS program not running under Windows. CTOS/Vpc provides the same functionality in the Windows Standard Mode DOS Box as on a real PC. This means that DPMI client programs cannot run in the Windows DOS Box under CTOS/Vpc. Instead, you must run DPMI client programs (such as Lotus 1-2-3 version 3.1) from the CTOS/Vpc DOS prompt, not from within Windows. 6.7.5 Windows Enhanced Mode and the /s Option CTOS/Vpc does not support Windows Enhanced mode. However, the improved memory management under version R2.0.0 of CTOS/Vpc may cause Windows to find enough memory to automatically try running under enhanced mode, even on systems that did not have this problem previously. Under such cases, Windows must now specifically be invoked with the /s option: win /s to force Standard Mode operation. 6.8 Application Limitations 6.8.1 Phar Lap 386|DOS Extender Support Programs built with the Phar Lap 386|DOS Extender require at least version 4.0 of the Extender. Even under those circumstances, remapping of linear addresses is not supported. 6.8.2 VCPI Applications CTOS/Vpc does not support the VCPI (Virtual Control Program Interface) Specification. Instead, it supports the DPMI specification which is a more advanced and widely-used protected-mode interface. 6.8.3 Turbo Debugger Ctl-Alt-Sysreq Using Ctrl-Alt-Sysreq under Borland Turbo Debugger to break into a program will crash CTOS/Vpc. This break feature of Turbo Debugger is not supported. 6.8.4 Lotus 1-2-3 Version 3.1 Since Lotus 1-2-3 Version. 3.1 is a DPMI-compliant program, it will run under CTOS/Vpc DOS prompt with DPMIHOST.COM installed. As stated earlier in this document, this is a similar environment as running it under Windows Enhanced Mode DOS Box in a regular PC. Therefore, Lotus uses only the DPMI memory and it requires a minimum of 1.5M bytes of DPMI memory to be able to run under CTOS/Vpc. 6.8.5 Word Perfect Version 5.1 Under CTOS/Vpc 2.0, if you use expanded memory with WordPerfect Version 5.1, you need to add the 'V32' switch to the PEMM.EXE program. 6.8.6 XTree for Windows Disk Logging When logging disks larger than 31 Mbytes, Xtree for Windows may encounter a file error and display a Windows dialog box with the options of retrying or cancelling. To recover, the user must cancel and then turn off the Speed Logging feature as follows: select the Options menu, then select Set Options, then remove the checkmark from the Enable Speed Logging box (by pressing spacebar when selected), then select OK, then select Options menu (again), then select Save Configuration Now. 6.8.7 DBASE IV Version 1.5 CTOS/Vpc does not support the hyperdisk cache program that comes with DBASE IV 1.5. However, the newer version of DBASE IV R2.0.0 works well with the DPMI support provided by CTOS/Vpc. 6.8.8 MS Visual C++ CTOS/Vpc does not support Microsoft Visual C++, since the product uses virtual device drivers, which are not supported by CTOS/Vpc. 6.8.9 MSBackup Certain limitations exist using MSBackUp provided with DOS 6.2 when backing up to floppy disk media. Due to the emulation of the low level interface to the floppy disk controller in VPC special care must be taken when operating MSBackUp in this mode. When MSBackUp is started it will try to interface to the floppy disk hardware to calibrate how fast it can operate. This will fail under VPC and the user should configure MSBackUp with the "Floppy Not Installed" option. In the "Backup To:" option in the backup menu select "MS-DOS Drive and Path", then fill in the line with the letter of the floppy drive you will be backing up to, e.g. "A:\". Make sure there is a floppy disk in the drive and start the backup. Section 7 Additional Product Information 7.1 Memory Usage 7.1.1 Extended, Expanded, and DPMI Memory A real PC has three types of memory, as far as most programs are concerned: Realmode memory, Expanded memory, and Extended memory. Realmode memory is the bottom 1 Megabyte of PC memory, which can be used by regular DOS programs. This bottom megabyte includes the Upper Memory Blocks (UMBs), memory above 640K which is accessible to DOS programs. Expanded memory is generally provided by special addon boards. It was originally conceived as a way to provide access to more memory on PC and PCXT machines. On many modern PC's, memory management software allows Extended memory to look like Expanded memory for those programs that still use Expanded memory. Extended memory is the memory in a PC that is greater than 1 Megabyte. For example, a PC with 4 Megabytes of memory is usually configured to have 1 Megabyte of Realmode memory and 3 Megabytes of Extended memory. On a real PC, programs such as Microsoft Windows switch the processor to protected mode and execute directly in Extended memory. 7.1.2 CTOS/Vpc Memory Emulation CTOS/Vpc emulates both Realmode and Expanded memory almost exactly the way they appear in a real PC. It allocates 1 Megabyte of memory for DOS programs, and provides UMB areas as well. Expanded memory under CTOS/Vpc appears to DOS as a separate addin memory board (as described above). CTOS/Vpc does not emulate Expanded memory the way 386 PC memory managers do. In CTOS/Vpc, Extended memory behaves somewhat differently than on a real PC. CTOS/Vpc emulates the two most common uses for Extended memory, which are eXtended Memory Specification (XMS) memory and DPMI memory, but it does not emulate the actual presence of memory chips in a PC. In other words, programs that access Extended memory in a clean way can use it, but those that depend on the physical nature of Extended memory addressing in a real PC will fail. When you specify a value in the :ExtendedMemory: section of the PC.sys file, you are setting the maximum amount of XMS memory that may be allocated.  This memory is used for the storage of data by programs which use the HIMEM.SYS XMS driver. Such programs include many disk caching programs, and a fair number of DOS applications. This memory is NOT used by DPMIcompliant programs. Any memory left over in CTOS/Vpc's partition after it has allocated its Realmode, Expanded, and Extended memory is used as DPMI memory. This memory is available to programs that comply with the DOS Protected Mode Interface (DPMI) specification developed by IBM, Intel, Microsoft and UNISYS, among others. Programs like Windows 3.1 and Lotus 123 v3.1 comply with the DPMI specification. These programs can actually run in protected mode under CTOS/Vpc. 7.1.3 Determining Application Memory Requirements A common point of confusion for CTOS/Vpc users is that application programs specify a required amount of Extended memory. This refers to the recommended amount of physical memory in a real PC. These programs rarely specify whether they use the memory as Extended memory or as DPMI memory, since both methods access the same physical memory in a PC. In general, if a program acts as a DPMI client it will say so somewhere in its documentation. Such programs do not use memory set aside by the :ExtendedMemory: section of the PC.sys file. If a program's documentation talks about Extended memory without mentioning DPMI, it probably uses XMS memory and not DPMI memory. Such programs DO use the memory set aside in the :ExtendedMemory: section of the PC.sys file. Often, the simplest method to determine which type of memory an application needs is trial and error. If you have a program that claims to use Extended memory but you aren't sure whether or not it uses DPMI, you can try the following procedure. 1. Start CTOS/Vpc in a very large (>4 Meg) partition with both :ExtendedMemory: and :ExpandedMemory: set to 00K This maximizes the amount of DPMI memory available under CTOS/Vpc. If the program runs, it is a DPMI client. If it claims insufficient Extended memory, it probably uses XMS memory. 2. Change the PC.sys file to specify a large number in the :ExtendedMemory: section. If the program runs, it uses XMS memory, not DPMI. 3. If the program still claims insufficient memory, it may be trying to access Extended memory directly. Few programs do this anymore, so it might be worth calling the application vendor or looking in the troubleshooting section of their documentation at this point. 7.2 Instructions for Clustershare Users Clustershare and LANce/pc users may need to execute the DOS command SETVER with the proper version code of REDIR.EXE before invoking REDIR.EXE. 7.3 Configuring DOS 6.2 for Dual-booting A new menu feature in DOS 6.2 simplifies the required configuration changes between the native DOS environment and the hosted CTOS/Vpc environment. The feature enables selective execution of both the CONFIG.SYS and AUTOEXEC.BAT files. For example: CONFIG.SYS [menu] menuitem=Vpc menuitem=Native [common] entries for both environments [Native] device=c:\windows\himem.sys [Vpc] device=c:\vpc\himem.sys [common] more entries for both environments AUTOEXEC.BAT entries for both environments goto %config% :Native prompt NATIVE $p$g goto Continue :Vpc prompt VPC $p$g c:\vpc\dpmihost.com goto Continue :Continue more entries for both environments In the examples above, the special CTOS/Vpc drivers HIMEM.SYS and DPMIHOST.COM are accessed in the default \vpc directory where they are placed during installation. The two PROMPT commands in the AUTOEXEC.BAT file are used to easily distinguish between the two environments whenever the DOS prompt is visible. 7.4 Instructions for Windows Users In order to use Windows 3.1 with CTOS/Vpc 2.0, you must first optimize your CTOS/Vpc and DOS configurations. The optimization necessary is specified in Installing Windows 3.1 in the Installation Procedure section. If you are upgrading from Windows 3.0, you must not use any of the Unisys display drivers that shipped with CTOS/Vpc 1.0 (those with any mention of GC-04). These are real mode drivers only, and will not work with Windows 3.1. Follow the steps for upgrading as directed in Installing Windows 3.1 in the Installation Procedure section. 7.5 Representative Applications Tested The following representative applications were tested with CTOS/Vpc R2.0.0: Windows Applications: Ami Pro v3.0 Adobe Type Manager v2.0 Art/IM v2.1 CorelDraw v1.1/v4.0 CrossTalk/Windows v1.1/v2.0 DBase IV v1.5/v2.0 Designer Workbench v2R1 Entertainment Pack/Win v1.0 Harvard Graphics for Windows v1.0.1 INFOConnect BMulti Access v1.0 INFOConnect TCP/IP Access v1.0 Intermission v2.0 LINC Design Assistant III v1.0 Lotus Freelance Graphics v1.0 Lotus Organizer/Win v1.0 Norton Desktop/Win v2.0 MS Access v1.0 MS Office v4.0 MS Works v2.0 PageMaker v4.0 Paradox for Windows v4.5 PC Paintbrush v3.1 PowerPoint v2.0/v3.0 Quattro Pro for Windows v1.0/5.0 Ventura Publisher v3.0 Word for Windows v2.0/v6.0 Word Perfect for Windows v5.2 MS-DOS Applications: AutoCad v10.0 Borland C++ v3.1 Calendar Creator Plus v4.0 CrossTalk XVI v3.61 Harvard Graphics v1.0/v3.0 HP Explorer v1.0 Laplink v5.0 Lotus 1-2-3 v3.4 MathCad v3.0 MS C v6.0 MS Flight Simulator v4.0 MS Word v5.0/v5.5 Norton Utilities v5.0 Paradox v3.5 PC Tools Delux v7.1 ProComm Plus v2.1 QA Plus v4.2 Quicken v3.0 Time Line v4.0 Word Perfect v5.0/v6.0 XTree Pro Gold v2.0 Section 8 Installation Notes 8.1 Overview CTOS/Vpc should only be used on CTOS workstations that are equipped with a hard disk or on diskless workstations where a hard disk is available on the server. The complete installation procedure is described in the CTOS/Vpc User's Guide. For details on using the Executive and its commands, see the CTOS Executive User's Guide and the CTOS Executive Reference Manual. If you have never installed any software before, it is recommended that you read the section entitled, "Installing Applications", in the CTOS System Administration Guide before you begin. The average user is advised to avoid the Verbose option during installation. Using the installation manager with a low resolution monitor, you may encounter a portion of the script being overwritten by the dialog box. The dialog box will be self explanatory, and you should proceed as instructed. 8.2 Types of Systems CTOS/Vpc may be installed on two types of systems:  Stand-alone and cluster workstations with hard disks  Server hard disk systems 8.3 Required Files The following is a list of files required to use CTOS/Vpc. The files are installed automatically for you when you use the installation procedure. The files required to run CTOS/Vpc must reside on the [Sys] directory.  Vpc.run  Vpcmsg.bin  VpcChar.font  VpcLowRes.font  VpcHighRes.font  VpcNlsKbd.sys  NGENVGABIOS  PCATROMBIOS The files required to use SIZE PSV command must reside on the [Sys] directory.  SizePsv.run  SizePsvMsg.bin 8.4 Default Conditions The CTOS/Vpc installation procedure makes several assumptions, including: - The installation is private - The installation is for a particular user name - A previous installation of CTOS/Vpc for that user will already have a UserNamepc.sys file. - A \VPC directory exists on the target bootable :DriveC: (either pseudovolume or native disk partition). The installation package includes an empty default pseudovolume named Vpc.psv. This pseudovolume is renamed to UserName.psv if a new pseudovolume is being installed. When using a native disk partition or an existing pseudovolume, the default pseudovolume file will remain on the system as-is, for optional subsequent use. If you have previously installed PC Emulator or CTOS/Vpc on your system, this installation will not update your configuration file (with the default of UserNamepc.sys, where UserName is your login user name. The installation of CTOS/Vpc includes the installation of the Unisys DOS Files. The following files will be installed into the \VPC directory on the target DriveC (pseudovolume or native partion): AUTOEXEC.PCE Sample CDROM autoexec.bat file CDDRIVER.EXE Necessary for access to a CDROM drive CDR.EXE Necessary for access to a CDROM drive CMOUSE.COM UNISYS mouse support program CMOUSE.DRV UNISYS mouse drivers for Windows CMOUSE.SYS UNISYS mouse device driver for DOS COMM.DRV Windows communication driver CONFID$$.SET File used by Winstall.bat CONFID$$.SLT File used by Winstall.bat CONFIG.SMP Sample CDROM config.sys file CTOSAPI.DLL CTOS application interface CTOSRQ.DLL CTOS request interface DPMIHOST.COM Loaded for DPMI-compliant applications GETBATXT.COM File used by Winstall.bat HIMEM.SYS XMS device driver INSTATI1.BAT Installation batch file for ATI drivers PEMM.EXE EMS 4.0 device driver README Information for Winstall.bat READATI1.TXT Information for ATI drivers RS485EM.EXE Connection to the CTOS environment UCOMM.Drv Windows communication driver W31XL24.EXE Compressed file containing the ATI drivers WINSTALL.BAT Copies files to your windows directory Note: The DOS Drivers that come with CTOS/Vpc R2.0.0 will supersede any other DOS Drivers you obtained from other packages, including NP25-PD6. If the ATI Win dows drivers are also desired (for SG4000/6000/7000), they may be seperately installed from the "DOS files" diskette using Installation Manager. When the "DOS files" diskette is seperately installed, the user is offered the option of copying the ATI driver files. They must then be further installed from within CTOS/Vpc by following the READATI1.TXT and INSTATI1.bat files in the C:\VPC directory. After a new installation, the user will find a "Non-system disk" message upon booting CTOS/Vpc. The user must at this point install DOS 6.2 as described in the User Guide. If this message occurs on an existing installation, it may indicate that the DriveC specification has been set to a non-bootable target, in which case installing DOS would endanger any existing data. 8.5 Installing Windows 3.1 Note: Only the version of Windows distributed by Unisys for CTOS/Vpc will work under CTOS/Vpc 8.5.1 Optimizing Your CTOS/Vpc And DOS Environments Before performing the actual Windows installation, you must first optimize your CTOS/Vpc and DOS configurations. On the CTOS/Vpc side, this may mean editing your PC.SYS configuration file, and for DOS it means editing your CONFIG.SYS and AUTOEXEC.BAT files. Windows Setup will try, unsuccessfully, to install its own mouse driver if there is not already one installed. To avoid this you must have the CTOS Mouse Service installed before starting CTOS/Vpc. This allows the Unisys DOS driver CMOUSE.SYS to be installed before running Windows Setup. The Windows mouse driver will work properly if used with a Microsoft DOS mouse driver for DOS programs, otherwise, the mouse may not function when running DOS after running Windows. To run Windows effectively, CTOS/Vpc requires a partition size of at least 2.5 Megabytes. It is also recommended that you use some type of disk caching, either CTOS Disk Caching or some disk caching utility within the DOS environment, such as SMARTDRV. The CTOS caching will benefit other CTOS applications as well as CTOS/Vpc. The SMARTDRV caching may be applied to the floppy drives. Refer to the User Guide for specifics on these topics. Windows requires that DOS be loaded into extended memory. This is accommodated by correct configuration at both the CTOS and DOS levels. The CTOS requirement consists of having the following default line in your PC.SYS file: :ExtendedMemory:64K This allows DOS to be loaded high, but doesn't waste extra extended memory that Windows won't be able to use. Note that Windows uses DPMI memory only. It does not use extended memory. If not using Windows, the default setting may be changed to 0K, or to a value appropriate for any other DOS software using extended memory. Windows requires a graphics display mode. Depending on your hardware configuration, you have to specify either EGA or VGA graphics in your PC.SYS file as below: :GraphicsAdapter:EGA or :GraphicsAdapter:VGA The default setting is VGA. After confirming the configuration of your CTOS environment, start a CTOS/Vpc session and modify the DOS environment as described below. You may use the Unisys mouse driver, CMOUSE, provided with CTOS/Vpc in order to use a mouse within Windows. You may instead choose to use the mouse drivers provided with your hardware. You will need to complete the changes necessary to load DOS into the High Memory Area (HMA). Enable DOS to use the Unisys mouse driver, and be loaded into extended memory by adding the following lines to your CONFIG.SYS file: DEVICE = C:\VPC\CMOUSE.SYS DEVICE = C:\VPC\HIMEM.SYS DOS = HIGH,UMB If you specify the UMB parameter in the DOS=HIGH command, this will allow you to load drivers and TSR (memory resident) programs into the Upper Memory Block (UMB). You are urged to load drivers and TSR programs into "upper" memory since it will free up your valuable conventional memory. UMB's under CTOS/Vpc function normally as described in the DOS 6.2 documentation. The other change you need to make to your DOS environment is to automatically run the DPMI server when DOS is started. Add the following line to your AUTOEXEC.BAT file: C:\VPC\DPMIHOST.COM This completes the changes required to run Windows under CTOS/Vpc. In order for the changes to take effect, you need to do a soft reboot of the DOS environment . 8.5.2 Installing Windows 3.1 For The First Time After configuring CTOS/Vpc and DOS as outlined in the previous section, install Windows 3.1 as described in the Windows documentation. When you run Windows Setup, it will automatically detect that you are using CTOS/Vpc and will set its defaults appropriately. Whenever Windows is installed or re-installed, the batch file WINSTALL.BAT in the \VPC directory must then be run to complete the installation. 8.5.3 Upgrading From A Previous Version Of Windows When you upgrade from Windows 3.0, Windows 3.1 preserves your configuration and any custom drivers you have previously installed. This is not a problem for the mouse driver, CMOUSE.DRV, which has not changed. However, it is a problem if you were using one of the display drivers that shipped with CTOS/Vpc 1.0. These are real mode drivers only and will not work with Windows 3.1. There are additional components of a first time installation that are not updated automatically. FOLLOW THESE INSTRUCTIONS VERY CAREFULLY TO CORRECTLY UPGRADE YOUR WINDOWS INSTALLATION!!! The upgrade can only be done properly by choosing Custom Setup from the first set of options. Windows Setup displays a list of your current configuration, and asks if you want to change any item on the list. You must manually reselect the entries for computer, display, and mouse types, even if the information displayed is correct. Use the arrow keys to perform the manual reselection as outlined below: 8.5.3.1. Select the computer type entry of the displayed configuration and press ENTER to scroll through the available alternatives. Position the cursor on "Unisys CTOS/Vpc" and press ENTER to use this selection. If you don't select this option, all of the required files of the new Windows installation will not be copied to your hard disk. 8.5.3.2. Select the display type entry of the displayed configuration and press enter to scroll through the available alternatives. Position the cursor on "VGA" and press ENTER to use this selection. Refer to the section below for information on the use of Unisys display drivers for Windows 3.1. Do not select any of the Unisys display drivers that shipped with CTOS/Vpc 1.0 (those with any mention of GC-04). These are real mode drivers only, and do not work with Windows 3.1. They are still shown as valid choices because Windows maintains all previously installed drivers when an upgrade is being performed. 8.5.3.3. Select the mouse type entry of the displayed configuration and press ENTER to scroll through the available alternatives. Position the cursor on "Unisys Mouse Driver" and press ENTER to use this selection. 8.5.3.4. With the cursor on "no changes", press ENTER to start the installation. The Windows installation proceeds normally from this point. 8.5.4 Windows 3.1 And Non-Native Unisys Display Drivers The following information about the use of the Unisys Windows 3.1 display drivers only applies to classic, non-native CTOS video (CTOS workstations with the GC-004 or equivalent, and EISA/ISA machines with the CTOS VideoCard instaalled. CTOS/Vpc R2.0.0 is shipped with three customized Windows 3.1 display drivers. They are described as below: Unisys 640x480 V1.10 (with GHA) Unisys 1024x768 V1.10  Unisys 1024x768 V1.10 (with GHA) The 640x480 GHA driver provides accelerated performance in standard VGA resolution. The 1024x768 drivers offer increased resolution, with and without GHA support. The acronym GHA refers to a component of the video hardware, the Graphics Hardware Accelerator. VAM version 4.2, a component of CTOS, now provides support for the GHA. Use the high resolution drivers only if your graphics board and monitor support 1024x768 VGA. Windows display drivers will work only if the appropriate video hardware is present. Screen corruption may occur if an unsupported driver is selected. Should this occur, perform a reset of CTOS/Vpc (CtrlAltDel), then reconfigure Windows with a valid display driver. 8.5.5 Common Problems With Windows 3.1 The most common problems encountered with Windows can be attributed to not following the steps outlined above, so these are the first things you should check if you have any problems. Verify that you are running CTOS/Vpc in a large enough partition, and that the CTOS Mouse Service has been installed. Verify that you have enabled either EGA or VGA graphics mode in your PC.SYS file. Verify that you have enabled 64K of extended memory in your PC.SYS file, and that you are using it in your CONFIG.SYS file. Verify that the mouse driver you are specifying in your CONFIG.SYS file is compatible with your Windows mouse driver (same versions from same vendor). Verify that you have started DPMIHOST.COM in your AUTOEXEC.BAT file. And verify that you have  installed the Unisys DOS Drivers on your system. If you still cannot run Windows, verify that you have the following lines in your CONFIG.SYS file: Files=30 Buffers=30 If you start Windows and it displays the Logo Screen, but then exits out with a message like "W031V011E:" check the amount of DPMI memory that is available. You can check DPMI memory by pressing ActionM, then selecting Display Current Config. You should have a minimum of 512K of DPMI memory available for Windows to operate properly. More DPMI memory will greatly enhance Windows performance. Note: Depending on the various memory configuration parameters, Windows may try to start in Enhanced Mode which is not supported under CTOS/Vpc. To avoid this problem, start Windows by typing: win /s to force Windows into Standard Mode. If Windows has trouble recognizing mouse double clicks, add the following lines to the [Windows] section of the WIN.INI file in the \WINDOWS directory under DOS: DoubleClickHeight=10 DoubleClickWidth=10 This allows the mouse to jiggle a little and still register two button presses as a double click. See the Windows file WININI.WRI in the \WINDOWS directory for more information about these parameters. 8.5.6 Windows 3.1 for Dual Boot (Native and CTOS/Vpc) The Unisys version of Windows 3.1 that is designed for use with CTOS/Vpc also runs successfully under native DOS. In order to use the Unisys version in both environments, it should be installed under native DOS, rather than under CTOS/Vpc. It may then be used in either case. 8.5.7 Completing the Windows Installation for CTOS/Vpc Whenever Windows is installed or re-installed, the batch file WINSTALL.BAT in the \VPC directory must then be run to complete the installation. Section 9 Support 9.1 Warranty CTOS/Vpc R2.0.0 is a warranted Unisys software product. Unisys warrants that CTOS/Vpc R2.0.0, in its unaltered form, will substantially conform to Unisys current published functional specifications when used in Unisys supported configurations. The customer is responsible for reporting suspected deviations using the User Communication Form (UCF) process within ninety (90) days following delivery. The product is neither field repairable nor field modifiable. Corrections to reported deviations are provided to the user via updated code files. This standard warranty is not a substitute for Unisys Service Agreement offerings. 9.2 Support Category CTOS/Vpc is covered under the CTOS III 1.1 SSP5 support. NP25-PD6 and NP25-WD5 have SSP3 coverage. UP25-WD5 does not have support service available. Customers who upgrade their SB25-PD4 and/or SB25-WD4 by purchasing UP25-WD5 will retain the support they currently have on those products. For instance, If they have SSP3 on the old product, they will continue to have SSP3 on the upgraded product. Customers who currently own SB25-PD4 and SB25-WD4 and want to upgrade to CTOS/Vpc R2.0.0 can upgrade their pseudovolumes to DOS 6.2 by purchasing a retail copy of the DOS 6.2 upgrade package. If they want Windows 3.1, they need to purchase the Unisys UP25-WD5 upgrade package. If you need further assistance or information regarding support services, please contact your Unisys representative or your local Unisys office. 9.3 Support Discontinuance Unisys supports the current release level and one level back. Prior levels are not supported. 9.4 Product Assistance 9.4.1 Instructions Should you encounter a problem with a Unisys product, please contact your local Customer Service Center. Your Customer Service Center representative will have a more definitive set of problem reproduction requirement guidelines specific to the application you are running. So that your questions may be answered in a timely manner, please collect all information which applies to your problem. A guideline for gathering information is listed below. 9.4.2 Environment In order to assist us in determining the nature of your problem, please be prepared to describe the environment in which the problem occurs. 9.4.3 Software Components  If you suspect the problem is software related, be prepared to provide the following information concerning the software being used: 1. The version number of the software in which the problem occurs. 2. The version of the operating system software. 3. Installation parameters used for the failing software. 4. Configuration files used. 5. Other software installed at the time of failure. 6. Recent changes to the system software (for example, updates). 7. Any messages associated with the failure that appear in the system log files (for example, accessed through the Plog command on CTOS systems). 8. The connectivity of the software (is your system part of a network?). 9.4.4 Hardware Components If you suspect the problem is hardware related, be prepared to provide the following information concerning your hardware platform: 1. The type of processor being used. 2. The workstation components (for example, hard drives, communication modules, CDROM drive). 3. Any peripherals attached to the workstation (for example, printers, scanners, modems, plotters). 4. The connectivity of the hardware (is your system part of a network?). 5. Recent changes to the hardware platform. 6. The amount of memory installed. 9.4.5 Circumstances Be prepared to describe the circumstances under which the failure occurs. The description should include: 1. Whether or not the problem is reproducible. 2. The exact steps that are required to reproduce the problem. 3. A description of circumstances under which the problem does not occur.  This section is designed to list the part numbers and style IDs of all documentation customers can order. An example is provided here. Section 10 Customer Product Information 10.1 Required Product Documentation The CTOS Vpc User's Guide is shipped with CTOS/Vpc. You may also additionally need MS-DOS documentation or Windows documentation if you buy those packages. Part Number Manual Name 4361 2050-100 CTOS Vpc User's Guide The CTOS/Vpc User's Guide describes how to to install CTOS/Vpc as well as how to configure both the CTOS and DOS environments for CTOS/Vpc, how to start a CTOS/Vpc session from the various CTOS interfaces (PM, CM, and Exec), and how to work with pseudovolumes and DOS partitions This manual is an update of a previous version. New CTOS/Vpc features are documented, such as improved memory management,native DOS partition support, native VGA BIOS support for EISA/ISA, pass-thru speaker, support for 3rd party mouse drivers, second serial port support, more complete parallel port support, DOS 6.2 support, support for running CTOS/Vpc in background in VGA mode. A section on serial/parallel ports has been added, and the troubleshooting section has been enhanced. This guide is perfect bound and ships with a quick reference card. The guide can be ordered separately as 4357 4672-300 and the reference card can be ordered separately as 4361 2043000. 10.2 Recommended Additional Manuals 4588 7320-000 MSDOS 6.2 User's Reference Manual This reference is the standard MS-DOS manual. It provides installation instructions and describes the features of MS-DOS 6.2. This manual is published in perfect binding. It is shipped with MSDOS 6.2 and is not separately orderable. 4362 2489-000 Windows 3.1 User's Guide and Reference Condensed Version This guide is a condensed version of the standard 3.1 Windows documentation. It provides complete documentation for Windows and is shipped with Windows 3.1. This guide is published in perfect binding and is not separately orderable. 4162 5237-000 LANce/pc and LANce/LM Administration and Programming Guide LANce/pc and LANce/LM Administration and Programming Guide describes how to install and configure the LANce/pc and LANce/LM products in the CTOS and DOS environments. Also provides information for administering the products, using the products, and creating application programs for the product's Netbios application program interface 4371 1969-100 LANce/pc Network Shell Reference Card LANce/pc Network Shell Reference Card provides information helpful to system administrator of the DOS platform running LANce/pc. LANce/pc works with LANce/LM to provide communications between DOS and CTOS platforms. Section 11 List of Files on Product Media 11.1 Contents of the Distribution Diskettes The Product distribution diskettes are your master copy and should be write-protected. The contents of the diskettes cannot be overwritten unless the write-protect tabs are removed. Do not remove or switch these write-protect tabs and do not use these diskettes as your working copy. CTOS/Vpc Service (3.5" diskette): Distribution Diskette 1 of 2 (3.5" diskette) contains the following files in the directory: Vpc.run VpcMsg.bin VpcChar.font VpcLowRes.font VpcHighRes.font NGENVGABIOS PCATROMBIOS VpcNlsKbd.sys SizePsv.run SizePsvMsg.bin DefConfigFilePart1 DefConfigFilePart2 DefConfigFilePart3 VpcAppend.run DosDir.cmd MSWrite.cmd The directory contains: Vpc.psv In addition to various standard system files, the Distribution Diskette 1 of 2 contains the following files in the   directory: Install.Ctrl Install.Jcl Install.Cmds InstallMsg.txt InstallMsg.bin Distribution Diskette 2 of 2 contains the following files in the directory: DOS>Cmouse.com DOS>Cmouse.sys DOS>Cmouse.drv DOS>DpmiHost.com DOS>PEMM.exe DOS>Himem.sys DOS>Rs485em.exe DOS>CDDriver.exe DOS>CDR.exe DOS>Config.smp DOS>Autoexec.pce DOS>ReadMe DOS>Winstall.bat DOS>Confid$$.set DOS>Confid$$.slt DOS>GetBaTxt.com DOS>CTOSRQ.dll DOS>CTOAPI.dll DOS>UCOMM.drv DOS>COMM.drv DOS>InstATI1.bat DOS>ReadATI1.txt DOS>W31XL24.exe DosFiles.fls ATIFiles.fls MSWrite.cmd In addition to various standard system files, the Distribution Diskette 2 of 2 contains the following files in the directory: CTOS/Vpc DOS File Diskette Install.Jcl Install.Ctrl Install.Cmds InstallMsg.txt InstallMsg.bin The directory contains: SRA.txt CTOS/Vpc Service (5.25" diskettes): Distribution Diskette 1 of 4 (5.25" diskette) contains the following files in the directory: Vpc.run VpcMsg.bin VpcNlsKbd.sys DosDir.cmd MSWrite.cmd In addition to various standard system files, the Distribution Diskette contains the following files in the directory: Install.Ctrl Install.Jcl Install.Cmds InstallMsg.txt InstallMsg.bin Distribution Diskette 2 of 4 contains the following files in the directory: VpcChar.font VpcLowRes.font VpcHighRes.font NGENVGABIOS PCATROMBIOS SizePsv.run SizePsvMsg.bin DefConfigFilePart1 DefConfigFilePart2 DefConfigFilePart3 VpcAppend.run The directory contains: Vpc Diskette 2 Distribution Diskette 3 of 4 contains the following files in the directory: Vpc.psv The directory contains: Vpc Diskette 3 Distribution Diskette 4 of 4 contains the following files in the directory: DOS>Cmouse.com DOS>Cmouse.sys DOS>Cmouse.drv DOS>DpmiHost.com DOS>PEMM.exe DOS>Himem.sys DOS>Rs485em.exe DOS>CDDriver.exe DOS>CDR.exe DOS>Config.smp DOS>Autoexec.pce DOS>ReadMe DOS>Winstall.bat DOS>Confid$$.set DOS>Confid$$.slt DOS>GetBaTxt.com DOS>CTOSRQ.dll DOS>CTOAPI.dll DOS>UCOMM.drv DOS>COMM.drv DOS>InstATI1.bat DOS>ReadATI1.txt DOS>W31XL24.exe DosFiles.fls ATIFiles.fls MSWrite.cmd In addition to various standard system files, the Distribution Diskette 4 of 4 contains the following files in the directory: CTOS/Vpc DOS File Diskette Install.Jcl Install.Ctrl Install.Cmds InstallMsg.txt InstallMsg.bin The directory contains: SRA.txt NP25-PD6 CTOS/Vpc Microsoft DOS 6.2 is comprised of five 5.25" DOS format 1.2 MB diskettes, or four 3.5" DOS format 1.44 M bytes diskettes, which contain DOS 6.2. NP25-WD5 CTOS/Vpc Windows 3.1 and UP25-WD5 Windows 3.1 Upgrade is comprised of eight 5.25" DOS format 1.2 MB diskettes, or seven 3.5" DOS format 1.44 M bytes diskettes, which contain Windows 3.1. Note: You cannot use an off-the-shelf version of Windows 3.1 with CTOS/Vpc. You must use the Unisys version. Section 12 Ordering Procedure 12.1 Ordering Software This Software Release Announcement describes the R2.0.0 release of CTOS/Vpc. CTOS/Vpc is delivered on either 51/4 inch or 31/2 inch disks. CTOS/Vpc cannot be ordered seperately. It is shipped as a component of CTOS III 1.1. The table below lists the orderable MSDOS and MS Windows software packages for CTOS/Vpc. If an Update Service Request is attached to your copy of this Software Release Announcement, you can order the software by completing and returning the form. Media provided by Unisys Corporation may not be returned for credit. If no Update Service Request is attached, you can order additional copies of the software by contacting your Unisys representative. Package Description Style ID MSDOS 6.2: Initial singleuser package (software and documentation) NP25-PD6 MSDOS 6.2: Initial per-seat authorization for each additional user (license only) ML25-PD6 MS Windows 3.1: Initial singleuser package (software and documentation) NP25-WD5 MS Windows 3.1: Upgrade for a singleuser package (software and documentation) UP25-WD5 MS Windows 3.1: Upgrade for a classic standalone workstation package (software and documentation) SB25-WD5 Note that there is no package to upgrade a user of MSDOS 5.0 to MSDOS 6.2. This upgrade must be purchased from a retail computer store. 12.2 Ordering Manuals You can order manuals from the following address: Unisys Corporation Publications Distribution Center 13250 Haggerty Road North Plymouth, Michigan 481702 # XXXX XXXX-000 2PF  XXXX XXXX-00 # 4588 9508-000 i i 4588 9508-000 Section Level 1 Level 2 Level 3 Level 4  4588 9508-000 # # 4588 9508-000 #%CLNlm#`Cl]GH@ H E! GH@ EG HBC;! GH%$ &!"8#%@')@*+,#Az[ (E*$ &!#'*+,57I ?[;!E$# @ p PGH@ p x#GHI[,IGH $ &#&'+,!$ &!#'*+,?#GH$[ (,$ &!#'*+,567I ? S`CDn> ? %  ISͺ`G~Cnޤ? I \ O > %BFH$ &#&'*+,>@ @ TDE@ TE@ TGH B0125OPYZqrstwP1PPOsPPPQ H&$%&+TU^_z{|}%QUO|PQQQP6+     H&      !"'=>?DXZ[`~!Q>QZQQOPOH&@ACDG]_`eOCP_QQQ$ &#&'*+,H&  !&;=>CQSTYiklo Q=QSQkPQQQ4#""!!   <>?DVXY^suv{Q>QXQuQQQQQ?**))((''&&%%$$# "#)467=QSTZrtu{"Q6QSQtQQQQY21100//..--,,++  !"%DFGLuwx}&()Q!PFQwQQQQ(QWX998877665544332,./4Z\]bڒޖ -.Q\QPQQPQ0/A@@??>>==<<;;:: "$%*EGHMnpqtQ$QGQpPQQFFEEDDCCBB$ &#&'*+,A+-.3[]^c،ܐ2-Q]QPQQQQ4#NMMLLKKJJIIHHGG 2458RTUZ~ހ  Q4PTQQQQQ Q2UUTTSSRRQQPPOON &().EGHM]_`epr{|(QGQ_QrOPQQ\\[[ZH&ZYYXXWWVV !#$)WYZ]څމ#QYPPPPbbaa``__^^]]   "#&1347JLMPacdg|~O"P3PLPcP~PhggffeeddcH&c$ &#&'*+, 8:;@lnotܥ   DFGLQ:QnQQQ QFQOWoonnmmllkkjjiih   #689<UWX[prsxPP8PWPrQQQvvuuttssrrqqpH&p#9;<AQS\^|}Q;QSOPPOP.-}}||{{zH&zyyxxww-/9;<PQSTXlnos0OSPnP/؈H&$ &#&'*+,~~ HIQRg(*+0ICIHBg(@@@@10HOE+@ O B$ &#&'*+,$ &#&'*+, FGRST| >?@HI`@ ڲ?B`@>"O$ &#&'*+,FH  HH@ZOE+$ &#&'*+,<()*ab&'bcdghil$BCDGR"(T`TTTTTTT%TcLj TTTThDžBTTTbכZ$ &#&'*+,FH OF* @*$ &#&'*+,OE+ #./09]am͔ͮ>BNXYab}~ɣ.TTTIXB}Eۿ O O  B$ &#&'*+,$ &#&'*+,FH OF*  Ǐɔ[j}~ՍɒnљѬN$r~ -  ;ÎF@F@@m@@@N@@q@ E-  $ &#&'*+, @ *O$ &#&'*+,H!HFH O@*  FY̋Ȍ׫01@.@F f$ &#&'*+, H@ 0&@ 0&@6@ONR\p08yZ \ݽ6/yY׼g@@*OF*$ &#&'*+, H@ &1$ &#&'*+,  @ &1 Ѡӥ/$%ǟFAIBE@/I&$%$ &#&'*+,OO B$ &#&'*+, O FGH"@ 7!ѿ%Fۜ9Gۜ !-jwFTۚIB@#@$@89 jF@  U2! H@  U2!H@  U2!HO B$ &#&'*+,BPޝīQ_ޚĨ ]k+sā()1B۝Q]sI(BV:  B$ &#&'*+,@  U2!H@  U2!$ &#&'*+,H'%&!"ƪȭ  /   (!"5 %A!AEF@/A (A5@A  GH$ &#&'*+,FHGHOOO @@E1@iF"@OF!O $ &#&'*+,GHGHOE += GH'-.DEJK}؏@AFGWefglmҁKLQRi%- !: -AAD}A@W@fǀAAKi@@!@@@= @w @ @; e: ('GH&$ &#&'*+,% $HGHOF#6yI Q  @j@@@XM@6uE F @ @  ,@+$ &#&'*+,@$2!*GHOF)$ &#&'*+,  dekl~۸@AGHw  #g@@d~@@@w@@#: 1$ &#&'*+,0/.GHOF-$ &#&'*+,H3ABHM؊ڍެȱ+,12T> '* Yb% . p y   0 3 ? AFM@@EF@@+T@F>AA AAA?  HFH 7$ &#&'*+,65O4GHF3O2@"$ʢƧ(?Ituv{|jkps } : E 9 = F$AF@@u@jF@@@L @ @ 8 t H@ ;HGHF:$ &#&'*+,FHFH 9O8 w{#$)*9>L!3vF@@V@E#9@>@FH FHGHF>O=O<H@ $ &#&'*+, >G}~כܽ89>?VxB}EսAAVA8V@@CBCBAO@H@GHOF?$ &#&'*+, ' $%,-2WX~'ީE@@@@@ F$,FW~ $ &#&'*+,GAFOE@GHOFD$ &#&'*+, -޾[\]byڢP\`mnB-@I@@EF@@\FydB[r H @L$ &#&'*+,KOJHIGH#GHOFH !0<=BW0127`  5F0@<FWA@1F`E F5AF@FA0, TGH SRQOPH,@O$ &#&'*+, NOM ɱRSXxbch~89>M@F@RFx@bF~@8FM@F@@ܯ$ &#&'*+,"YXWVU$ &#&'*+,!GHOFT  +,/=>ChWX]x B+E=Fh@@@@WFx@@@7 @ 6FH $ &#&'*+,$]O\O[G HOZ$ &#&'*+,#-3%6 .2nʔVZʣY`ʉʣީ o 9 \ F3@@S@6@.TVTTE@E @ ] 5ؤ\ FHH @`$ &#&'*+,&O_$ &#&'*+,%FH O^ 89<\ *F\dzԉ@8E\@3@@E΄ H@b$ &#&'*+,(HOa$ &#&'*+,'@Ս@BӎVG HOc$ &#&'*+,+$ &#&'*+,*@$ &#&'*+,) H<W` *fgjk|E@@@@<@@fE|ۯE@ J($ &#&'*+,,@ J(f@  P@J(eFH FHG HOdɾ(1د>FT]& ' &7IYgu@E@J@h@@@`@@u@;& U @   @*H$ &#&'*+,-HH FHG HOgFH @  Pɏ+1g'(-./ͦE'F\.Oi@ 0  G HOhHH FH$ &#&'*+,.@J(FH FH% .7߀4 S T r s ۆ u v { Ŧ <.1  N u ɬ= <OFj$ &#&'*+,0FH H$ &#&'*+,/@J(GH5s qrz5r qFH O@ C P A2!=J(RH@J(GHOFk$ &#&'*+,1  not_g#2nh$#GHOFl@J(@ # A2!=J(RO@  A2!=J(R$ &#&'*+,2 )bp+6[)b\[HFH @ 0  FH%@J(GHOFm$ &#&'*+,3֣ۨ'STWi  Ң'ҸBEAAASEi@@@ A η rOqOp &*,5oGHOFn@J($ &#&'*+,48|}̀ԕ֚lmr (   "$ \^ y{   b f  i jl   TV   EA|EFAlFA F(A![xiS ' &*,8A*F*x OG*w &*,7vOutOs &*,6' ̃ ̲ ;<!*mv7@>A^gFAʯ<IBEAVW;ۥ $ &#&'*+,:A HO{Oz B$ &#&'*+,9 OG*2!Oy%4VDSv m !)+KLPxE%WVCDWvw BKEx@@@H~O}$ &#&'*+,;FH @ NA O|f'$ &#&'*+,;67bgI@ > +%$ &#&'*+,;7bgI '߬ϫ@ > +%$ &#&'*+,;7bgI@ > +@ > +$ &#&'*+,;t!@u t$ &#&'*+,<$ &#&'*+,;'$ &#&'*+,;67bgIމ'$ &#&'*+,<67bgI@ > +%$ &#&'*+,<7bgIֆυ@ > 3%$ &#&'*+,<7bgI@ > +$ &#&'*+,<S-KT,SH@ > +$ &#&'*+,<'$ &#&'*+,<67bgI%@%@Ӊ@ > +%$ &#&'*+,=7bgI$ &#&'*+,=H@ > +$ &#&'*+,='$ &#&'*+,=67bgIFG'F'$ &#&'*+,=67bgI@ > +%$ &#&'*+,=7bgIUT@ > +%$ &#&'*+,=7bgI@ > +$ &#&'*+,= bXv cWb$ &#&'*+,>I@ > +$ &#&'*+,='$ &#&'*+,=67bgIމ'$ &#&'*+,>67bgI@ > +%$ &#&'*+,>7bgIֆυ@ > 3%$ &#&'*+,>7bgI@ > +$ &#&'*+,>S-KT,SH@ > +$ &#&'*+,>'$ &#&'*+,>67bgI &iw@@@iBO &*,A$ &#&'*+,@FH @ 0  FH%$ &#&'*+,?H E@X@+GH/@  &*,A&*,A567@ &*,A57GH.@  GH-O ĭYZFPʤٮU_@ZEO֭T^Y  &*,B@   GH- &*,A&*,A57@&*,A567@  NGH/  ʲҵ *+5?IS]^mnopqEIȰ@ +O5P?QIRSS^o*]n,,,,,,,^ ,AO2>tP+<Zl>Oc/i5EU?W;S 3.>=/ 8@@HHH BodyText+.BodyText  @  sectionhead+- sectionhead>=/ 8@@HHHpage  sectionnumber/Title>=/8  hHHHTitle TitleTCaveat Caveat+hh-head1 @ underline+h-head2 @ head13.list.num @head2 list.num Annotation  bodytext.emph @ Annotation3 Toc.Section3(Toc13 (Toc23(Toc3 @  Title.product3 (Toc4  Toc.SectionPbullet Toc1 Toc2*. StyleId.Head Toc3+ N-Manual Toc4 bullet footer*#X Release.info @ StyleId.Head+h- Contents.head Manual  Manual.Title+.footer/x underline  Release.info @  contents.head0d@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@New Century SchoolbookNew Century SchoolbookNew Century Schoolbook Helvetica8Helvetica NarrowNew Century Schoolbook Helvetica Helvetica%New Century Schoolbook Helvetica Helvetica! Helvetica, Helvetica) Helvetica Helvetica Helvetica Helvetica- Helvetica HelveticaNew Century SchoolbookNew Century SchoolbookTimesNew Century Schoolbook#Times HelveticaNew Century Schoolbook Helvetica Courier Helvetica Helvetica Helvetica[ex[yeeC+en}CCHe:MMe}H}CReeeeeeeeeeCH}jR`x}>R>Cj:eseseH`s:>s:ssssRVCnee`[j:jM>>Cjyd888BCees}neeeeneCCeee0j55}R[nvRm[[:&Vjj::M[:CC`::[[[[[[[[[[[::V}xnM[ss}esH[HH[:``[eV:[e55e5e`eeMM>`V}VRRV:VMHH:[Z444;<```V`[VVVe[M:Vjj0j>>! <!!  ! V  @k            @@[[@%u[@ [u@u[@%[@@@% k      kkk     [}  @ @ u u%[    % {{y%\ !!!<.ccB<<c..c7<.77,G777..I7 0...........000.S77;;72@;)7.D;@7@;72;7M772'...)....)D....).);)))0.,.dd$7.7.@.@2;.)...RI2.OOO2.Rdd<<<&&&&HCvvOHHvCCv!BHCBBC*VBBB!(9CCkW!((/F!C!!CCCCCCCCCC((FFFIuWWWWPI]W!CWIdW]P]WPIWPqPPI(!(FC!CICIC(II!!C!kIIII/C(IC]CC</"/F((!CCCxx!!!+(WCWC]I]IWICCCCxkIC(__^(I<<<((CxxxHHH....NbN]N]]mNNN]]N]N]N]NNNm]mNm]]NNNNe]]]C]]llllyoyydd8nydnnyynnn8;Noo)CCdy8o88oooooooooo88yyyYQo~zCyCyd)ooYsdCkz?;w?zdsoY]Nzkkk`CyCyCC8dyd888BCooddzYdddsoC;YNN)N44oyyyMMMMmdvmmdd2cmdcca?ccc22@ddx(<<Fi2d22dddddddddd22iiidxxxn2Zxdxxnxxxn222Td(ddZdd2dd((Z(dddd<Z2dZZZZ</<i<<2dad222A<xdxddndZdddnd<<n<<"<<<dmmmEEEECTCPrCPP]CCCPPCPCPCPCCC]Px]C]PPCCCCWPPPxx9xPP\\\\ccccd~dd@Pxxdddddmd,TdddPdPPP,xdx^xxxdhhdddxh@xxxxExxxhhh<<<<YpYkYkk|YYYkk8Y .kYkYkYYY|k|Z|kkY@@YYYtk@kkLkk@@@{{{{yoyyoo8nyonnoFnnn8C_oo8CCNu8o88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMM TN\TTNN'MTNMMK1dMMM''2NN|]//6R'N''NNNNNNNNNN''RRRN]]ee]Vme'F]Nuem]me]Ve]]]V'''BNNNFNN'NNFuNNNN/F'NFeFFF/$/R//'NKN'''3/]N]NmNmVeNFNNN|VN/oon/V/////NTTT6666yoyyoo8nyonnkFnnn88Goo,CCNu8o88oooooooooo88uuuoz8dozz888^o,oodoo8oo,,d,ooooCd8oddddC4CuCC8oko888HCooozodooozoCCzCC&CCCoyyyMMMMccccd~dx@dxxdddxx_d,Txdxdxddd@xexxdhhdddxh@xxVxxhhhyoyyoo8nyonnkFnnn88Goo,CCNu8o88oooooooooo88uuuoz8dozz888^o,oodoo8oo,,d,ooooCd8oddddC4CuCC8oko888HCooozodooozoCCzCC&CCCoyyyMMMMyoyyoo8nyonnoFnnn8C_oo8CCNu8o88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMMysyydd9nydnnynnn9;Css0NNdy8d88s]ssssssss88yyydYNyNyd0zosNzJFFzhdUzzzkNyNyCC9dd999BCzzzzossszsC;d``0`CCdyyyMMMMyoyydd8nydnnynnn8CPyo)CCdy8d8yoooooooooo88yyyYQzCyCyd)soYzYCkzC?oCzdsoYYFzhdd]CyCyCC8dd888BCssddzYYYYooCCYNN8NCCdyyyMMMMydyydd2nydnn[Fnnn2CRddCCCdq2d28dddddddddd88qqqYzoCNzoozzC8C^dCYdYdYCdd88d8ddddCN8ddddY`(`lCC2d[d222BCYYdddYYYYddCCYYY$YCCdyyyMMMMxxExEP`>bbxExECEEskbbx>}]]Y]}sb}}bbPPExxEEEOP}}}PPsssEsCCx\\\\xxx<xmT<PbxxPPPx<x<CxxxxxxxxxxCCkP]PCPqxPkxkxkPxxCCxCxxxxP]Cxxxxks0sPP<xmx<<<OPkkxxxkkkkxxPPkkk+kPPx\\\\CTCCU5PP]CCCCCCxCCCq5xC55x5PxCxxxxP>PPPCCCCWPxPPPP.PPP\\\\ysyydd9nydnnynnn9CPys4QQdy9d98ssssssssss99yyy`YQyQyd4zkhNzNJNs~h`QoshhQyQyCC9dd999BCsskhhhssCC```9`88dyyyMMMMyocyyooo8nyonnoFunnn8C_oo8CCNu8C88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMMmdYvmmddd2cmdccd?iccc2<Udd2<<Fi2<22dddddddddd<<iiinxn2dnxxnxxxn<2<id2dndnd<nn22d2nnnnFd<ndddZF2Fi<<2ddd222A<ddnnnddddnd<<nZZ+Z<<dmmmEEEE`YxOi``YYY,X`YXXY8]XXX,5LYYt,55>],5,,YYYYYYYYYY55]]]bttttkb|t,Ytbt|k|tkbtkkkb5,5]Y,YbYbY5bb,,Y,bbbb>Y5bY|YYP>->]55,YYY,,,:5tYtY|b|btbYYYYbY5vv5bPP&P55Y```====`YxOi``YYY,X`YXXV8]XXX,,9YYk$55>],5,,YYYYYYYYYY,,]]]Ykkttkb|t,PkYt|k|tkbtkkkb,,,KY$YYPYY,YY$$P$YYYY5P,YPtPPP5*5]55,YVY,,,:5kYkY|Y|btYPYYYbY5vv5b55555Y```==== "(     "b"n Picture 1 B & b  i)`6T  *.`?T trII**j   ZERrjlRZbj"$%(*.? ????(8 ?> p ???? ?!O??!?~!?|?!?|!?!?>!?~?!?~?!?>? !?>???!???p<?>????? ??? ?>?>??>???|?????????????? ????????????????!??!????!???!???.!????!????!?????????!|???>!??????< ( @=?  ,@?PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF DH|0H"^ 0L( o%VH0h0hڳ=u &##9dG!( #LTKOB=3.0 \Q78a1cmPTy%++24=CHMRV`eo}|ߍ¦AF;b :"*j18e97::3<<@==>>m?@WBCdCdEJHJrnished pursuant and subject to the terms and conditions of duly executed agreement to purchase or lease equipment or to lease software. The only warranties made by Unisys, if any, with respect to the products described in this document are set forth in such agreement. Unisys cannot accept any financial or other responsibility that may be the result of your use of the information in this document or software material, including direct, special or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. RESTRICTED RIGHTS LEGEND. Use, reproduction, or disclosure is subject to the restrictions set forth in DFARS 252.227-7013 and FAR 52.227-14 for commercial computer software Copyright 1994 Unisys Corporation All Rights Reserved Unisys is a registered trademark of Unisys Corporation Context Manager, Generic Print System, TeleCluster, CTOS/Vpc, and XBus are trademarks of Convergent Technologies, Inc. CTOS and SuperGen are registered trademarks of Convergent Technologies, Inc. BTOS is a trademark of Unisys Corporation. OFIS is a registered trademark of Unisys Corporation. Apple, LaserWriter, and Macintosh are registered trademarks of Apple Computer, Inc. AT, IBM, IBM PC, and OS/2 are registered trademarks of International Business Machines Corporation. Common User Access, IBM PCAT, IBM PCXT, and IBM PS/2 are trademarks of International Business Machines Corporation. Intel is a registered trademark of Intel Corporation. Lotus 1-2-3 is a registered trademark of Lotus Development Corporation. GWBASIC, MSDOS, and Microsoft are registered trademarks of Microsoft Corporation. Presentation Manager and Windows are trademarks of Microsoft Corporation. UNIX is a registered trademark of AT&T. XVT is a trademark of XVT, Inc. >>>The page break before this heading contains the template that automatically generates your table of contents. Do not delete it. Contents Section 1 General Description 1 1.1 CTOS/Vpc Overview 1 1.2 CTOS/Vpc Product Styles 2 Section 2 Release Functionality 3 2.1 General Features for All Platforms 3 2.2 Features for EISA/ISA Platforms 4 2.3 User-Interface Features 4 2.3.1 New Configuration Parameters 4 2.3.2 New Action-M Configuration Information 5 Section 3 Product Interdependencies 7 3.1 Software Interdependencies 7 3.1.1 System Software Requirements 7 3.1.2 Recommended Additional System Software 7 3.1.3 Video Software Options 7 3.2 Hardware Interdependencies 8 3.2.1 Memory Requirements 9 3.2.2 Disk Requirements 10 3.2.3 Video Hardware Requirements 12 3.2.4 Recommended Additional Hardware 12 Section 4 Migration Requirements 13 4.1 Compatibility with Previous Versions 13 Section 5 Corrections 15 Section 6 Restrictions and Known Limitations 17 6.1 General Limitations 17 6.1.1 Comparing Native DOS to CTOS/Vpc DOS 17 6.1.2 Performance of Diskless Workstations 17 6.1.3 Minimum Windows System 18 6.1.4 Benchmark Programs 18 6.1.5 Time of Day 18 6.1.6 PSV Expansion 18 6.2 Hardware Limitations 19 6.2.1 Unsupported Devices 19 6.2.2 Read Only Memory Areas 19 6.2.3 Native Video BIOS Support on EISA/ISA 19 6.2.4 Newly Supported Register Instructions (CR0 & DR7) 19 6.2.5 Extended Memory 19 6.2.6 Second Serial Port 20 6.2.7 VGA Timing Limitations 20 6.2.8 Floppy Limitations 20 6.2.9 3.5" Floppies 21 6.2.10 Communications 21 6.2.11 Parallel Port Operation 22 6.2.12 Printing 22 6.2.13 Keyboard Keyclick 23 6.2.14 One Millisecond Timer 23 6.2.15 Reading Count Registers of the 8254 Timer Chip 23 6.2.16 Older 80386 Processors 23 6.2.17 Math Coprocessor Support 24 6.2.18 DMA 24 6.2.19 Rotating Priorities 24 6.3 Operating System Limitations 24 6.3.1 Interrupt-Servicing and System Loading 24 6.3.2 CTOS Debugger and DPMI Compliance 24 6.3.3 ERC 1603 on EISA/ISA Platforms 25 6.3.4 Native Video Usage Under DOS 25 6.3.5 Native Speaker Usage on EISA/ISA platforms 25 6.3.6 Context Manager II 5.0 Cut and Paste 26 6.3.7 Busy Loops and Background Processes 26 6.3.8 Formatting a CTOS Disk with a DOS Partition 27 6.4 User Interface Limitations 27 6.4.1 UserNamePc.sys 27 6.4.2 Size PSV Utility 28 6.5 Driver Limitations 28 6.5.1 Native Video Support on EISA/ISA 28 6.5.2 French Keyboard Driver 28 6.5.3 Foreign Keyboard Drivers 28 6.5.4 Windows 84-Key Keyboard Driver 29 6.6 DOS Limitations 29 6.6.1 DOS MEM Command 29 6.6.2 DOS FORMAT Command on Existing PSVs 29 6.6.3 DOS DBLSPACE Disk Compression Utility 30 6.6.4 DOS 386MAX Utility under Native Mode 30 6.7 Windows Limitations 30 6.7.1 Windows Versions 30 6.7.2 Enhanced Mode Windows 31 6.7.3 Mouse Driver During Windows Installation 31 6.7.4 Windows 3.1 DOS Box 31 6.7.5 Windows Enhanced Mode and the /s Option 32 6.8 Application Limitations 32 6.8.1 Phar Lap 386|DOS Extender Support 32 6.8.2 VCPI Applications 32 6.8.3 Turbo Debugger Ctl-Alt-Sysreq 32 6.8.4 Lotus 1-2-3 Version 3.1 32 6.8.5 Word Perfect Version 5.1 33 6.8.6 XTree for Windows Disk Logging 33 6.8.7 DBASE IV Version 1.5 33 6.8.8 MS Visual C++ 33 6.8.9 MSBackup 33 Section 7 Additional Product Information 35 7.1 Memory Usage 35 7.1.1 Extended, Expanded, and DPMI Memory 35 7.1.2 CTOS/Vpc Memory Emulation 35 7.1.3 Determining Application Memory Requirements 36 7.2 Instructions for Clustershare Users 37 7.3 Configuring DOS 6.2 for Dual-booting  38 7.4 Instructions for Windows Users 39 7.5 Representative Applications Tested 40 Section 8 Installation Notes 43 8.1 Overview 43 8.2 Types of Systems 43 8.3 Required Files 43 8.4 Default Conditions 44 8.5 Installing Windows 3.1 46 8.5.1 Optimizing Your CTOS/Vpc And DOS Environments 46 8.5.2 Installing Windows 3.1 For The First Time 48 8.5.3 Upgrading From A Previous Version Of Windows 49 8.5.4 Windows 3.1 And Non-Native Unisys Display Drivers 50 8.5.5 Common Problems With Windows 3.1 51 8.5.6 Windows 3.1 for Dual Boot (Native and CTOS/Vpc) 52 8.5.7 Completing the Windows Installation for CTOS/Vpc 52 Section 9 Support 53 9.1 Warranty 53 9.2 Support Category 53 9.3 Support Discontinuance 54 9.4 Product Assistance 54 9.4.1 Instructions 54 9.4.2 Environment 54 9.4.3 Software Components 55 9.4.4 Hardware Components 55 9.4.5 Circumstances 56 Section 10 Customer Product Information 57 10.1 Required Product Documentation 57 10.2 Recommended Additional Manuals 58 Section 11 List of Files on Product Media 59 11.1 Contents of the Distribution Diskettes 59 Section 12 Ordering Procedure 65 12.1 Ordering Software 65 12.2 Ordering Manuals 66 The above page break contains a even/odd footer. Do not delete. This section is designed to give an overview of the product and to introduce the SRA itself. Text can come from the NPA or Product Description. It should include the product name, part numbers, style IDs, and what kind of media the product is distributed on. Section 1 General Description This Software Release Announcement describes the CTOS/Vpc R2.0.0 product family. It provides a product description, installation instructions, and ordering information. 1.1 CTOS/Vpc Overview CTOS/Vpc provides the MS-DOS environment on CTOS workstations by using the virtual 8086 mode of the Intel 80386 and 80486 processors. CTOS/Vpc runs the majority of retail DOS and Windows software and provides binary compatibility for DOS applications that are compliant with the DPMI (DOS Protected Mode Interface) standard for Extended DOS programming. CTOS/Vpc runs DPMI compliant DOS extended software to break the traditional DOS 640K memory barrier and use the extended memory, protected mode, and multitasking capabilities of Intel processor-based 16/32-bit systems. By meeting the DPMI standard, CTOS/Vpc helped CTOS become acknowledged by the industry as the first non-PC platform to implement a DPMI host. CTOS/Vpc runs Microsoft Windows 3.1 in Standard Mode, allowing Windows applications to take advantage of Extended Memory. CTOS/Vpc also provides a builtin DOS Extender which is compatible with the Windows DOSX DOS Extender. CTOS/Vpc facilitates CTOS interoperability by offering a DOS environment similar to the environment found on IBM PCs, ATs, PS/2s, and compatibles. This powerful dual platform capability provides users the ability to run most favorite off-the-shelf DOS and Windows applications, as well as CTOS applications from one CTOS desktop workstation. CTOS/Vpc R2.0.0 is the second major release of this new generation of software that replaces the PC Emulator system by addressing DOS memory management issues PC Emulator could not solve. 1.2 CTOS/Vpc Product Styles CTOS/Vpc is released on 5.25" and 3.5" diskettes. Listed below are the style IDs and brief description. Description CTOS/Vpc Service, included with CTOS III 1.1 This software package includes the CTOS/Vpc control program which routes the DOS requests, services and manages the Virtual 8086 environment, provides I/O emulation, emulates the interrupt controller functions, and handles keyboard and video operations. It also includes the SIZE PSV utility for creating and resizing DOS pseudovolumes. NP25-PD6 CTOS/Vpc Microsoft DOS 6.2 This package includes the Microsoft DOS 6.2 operating system, utilities, and Quick Basic. NP25-WD5 CTOS/Vpc Microsoft Windows 3.1 This software package consists of DOS 1.2M byte or 1.44M byte media containing Windows 3.1. UP25-WD5 CTOS/Vpc Microsoft Windows 3.1 Upgrade This software package consists of DOS 1.2M byte or 1.44M byte media containing Windows 3.1. This package is available to licensed users of Windows 3.0 and Windows 2.0. LB25-PE6 CTOS/Vpc Product Localization Kit This software package allows localization of CTOS keyboard tables and messages for CTOS/Vpc 2.0. Section 2 Release Functionality Version R2.0.0 of CTOS/Vpc provides several new or enhanced functions over previous versions. 2.1 General Features for All Platforms  Second serial port allows use of COM1 or COM2 or both  Non-graphics workstation support for character-based DOS applications  Support for standard mouse drivers  DOS 6.2 is qualified and supported  Windows and Windows applications may continue to run in the background under Context Manager II 5.0 when switched to other CTOS applications  New support for certain processor instructions  Improved memory management allows greater sharing of different memory types  HIMEM.sys version 3.07 is provided  General performance improvement at interrupt level (5-10%) 2.2 Features for EISA/ISA Platforms The features below are only available when running CTOS/Vpc on EISA/ISA workstations (e.g., SG2400, SG3400, SG4000, SG6000, SG7000).  Support for native VGA BIOS and most native standard-mode Windows drivers (except on SG1000/1100/1200 notebook)  Native speaker usage for music and sound effects  Support for native DOS partitions on both CTOS and non-CTOS disks  Improved native parallel-port support now allows operation of some security devices and communications software 2.3 User-Interface Features Some improvements have been made in the user interface for CTOS/Vpc. For example, updated Help now covers information useful while running the program. 2.3.1 New Configuration Parameters  A SleepOnIdle parameter has been added to allow user tuning of CTOS/Vpc versus other CTOS applications  COM2 and ReadyBusy2 parameters have been added to support the second serial port  DriveCPassword and DriveDPassword parameters have been added to support DOS partition access to a non-CTOS drive, as well as pseudovolumes with a password 2.3.2 New Action-M Configuration Information  The new OS Version, VAM Version, User Name, and Mail Status fields give CTOS system information  The updated Available XMS field displays the amount of Extended Memory currently available on a real-time basis  The new DriveC (kBytes), DriveC Type, DriveD (kBytes), and DriveD Type fields give information about the size and type of disk being used for both pseudovolumes and native partitions. This Section describes hardware and software requirements. RAM and Media sizing requirements should be included as well. An example is provided here. Section 3 Product Interdependencies 3.1 Software Interdependencies 3.1.1 System Software Requirements The following levels of system software must be installed: CTOS III 1.1 or higher with Standard Software 12.3.0 or higher VAM 4.2 or higher 3.1.2 Recommended Additional System Software For running multiple CTOS programs, Context Manager II 5.0 or higher must be installed. For running some DPMI-compliant applications, the CTOS Debugger (e.g. Debugger3.3.Sys) must be installed on the system. 3.1.3 Video Software Options On non-EISA/ISA workstations, CTOS/Vpc uses an industry-standard software BIOS and special Windows drivers, as opposed to the BIOS and drivers that would be used under native DOS and Windows. On EISA/ISA desktop workstations, CTOS/Vpc uses the native video BIOS and Windows video drivers. The following non-native Windows video drivers are installed automatically by CTOS/Vpc R2.0.0 and operate using the built-in "Soft BIOS" included with CTOS/Vpc. B38, B39, SG1000/2000/5000, CTOS VideoCard: CTOS/Vpc 640 x 480 (with GHA) 1024 x 768 1024 x 768 (with GHA) The following native Windows video drivers are provided with CTOS/Vpc R2.0.0 because the drivers in the PW2 Op-kit are Enhanced Mode drivers that are not supported under CTOS/Vpc. These Standard Mode drivers may be installed by Installation Manager from the last disk in the CTOS/Vpc package ("DOS files" disk). They must then be further installed from within CTOS/Vpc by following the READATI1.TXT and INSTATI1.bat files in the C:\VPC directory. SG4000/6000/7000: ATI VGA Wonder 640 x 480 x 16 Large & Small Fonts 640 x 480 x 256 Large & Small Fonts 800 x 600 x 256 Large & Small Fonts 1024 x 768 x 256 Large & Small Fonts For running CTOS/Vpc with native Windows video drivers, the following drivers from the native PW2 Op-kits were available at the time of CTOS/Vpc R2.0.0 release: SG3000: Op-kit #MPI 400001-OK1 (Western Digital) 640 x 480 x 256 COLOR 640 x 480 x 256 COLOR (corrected) 800 x 600 x 16 COLOR SG2400/3400: Op-kit #CWS 40001-OK1 (Cirrus Logic) 640 x 480 x 16 800 x 600 x 16 1024 x 768 x 16 Large & Small Fonts 1280 x 1024 x 16 Large & Small Fonts 3.2 Hardware Interdependencies CTOS/Vpc supports systems equipped with a 80386 or greater processor, which includes the following styles: B38 series, B39 series, SG1000, SG1100, SG1200, SG2000, SG2400, SG3000, SG3400, SG4000, SG5000, SG6000, and SG7000. 3.2.1   Memory Requirements Approximate memory requirements are: (See explanations below) Vpc.run . . . . . . . . . . . . . . . . . . . . . 1.5M bytes SizePsv.run . . . . . . . . . . . . . . . . . . 170K bytes The amount of memory used by CTOS/Vpc varies based on the hardware and software environment. The following are the minimum memory requirements for different system configurations: CTOS & CTOS/Vpc 2.5M bytes CTOS & CTOS/Vpc & Win 3.1 3.5M bytes CTOS & CM & CTOS/Vpc & Win 3.1 4.0M bytes CTOS & PM & CTOS/Vpc & Win 3.1 6.5M bytes CTOS/Vpc together with CTOS requires a minimum of 2.5M bytes of RAM memory. However, 4M bytes is the minimum amount of memory recommended when running Context Manager II and/or DOS programs requiring substantial amounts of extended or expanded memory. Windows 3.1 under CTOS/Vpc will run in a 2M bytes Context Manager II partition, but at least a 3M bytes partition is recommended. If you need to run Windows 3.1 applications that require a substantial amount of working memory, e.g. Excel for Windows, it is recommended that your workstation is equipped with at least 6M bytes of RAM. This allows a CTOS/Vpc configuration equivalent to a real PC with 4M bytes of RAM. 3.2.2 Disk Requirements Disk requirements for CTOS/Vpc. CTOS Files (in sectors) Vpc.run 830 VpcMsg.bin 26 VpcChar.font 17 VpcLowRes.font 13 VpcHighRes.font 18 NGENVGABIOS 64 PCATROMBIOS 64 VpcNlsKbd.sys 58 SizePsv.run 222 SizePsvMsg.bin 5 DefConfigFilePart1 1 DefConfigFilePart2 1 DefConfigFilePart3 8 VpcAppend.run 121 DosDir.cmd 9 MSWrite.cmd 9 Vpc.psv (optional) 1100 2566 DOS Files (in bytes) AUTOEXEC.PCE 63 CDDRIVER.EXE 4451 CDR.EXE 8597 CMOUSE.COM 13848 CMOUSE.DRV 5120 CMOUSE.SYS 14331 COMM.DRV 9280 CONFID$$.SET 4203 CONFID$$.SLT 4992 CONFIG.SMP 75 CTOSAPI.DLL 28160 CTOSRQ.DLL 26624 DPMIHOST.COM 740 GETBATXT.COM 8337 HIMEM.SYS 9872 INSTATI1.BAT 4828 PEMM.EXE 13286 README 992 READATI1.TXT 1144 RS485EM.EXE 3243 UCOMM.DRV 9280 W31XL24.EXE 228836 WINSTALL.BAT ___3346 403647 Approximate disk requirements for NP25-PD6: DOS 6.2 (DOS Format) 5 Megabytes Approximate disk requirements for NP25-WD5 & UP25-WD5: Windows 3.1 (DOS Format) 8.5 Megabytes 3.2.3 Video Hardware Requirements CTOS/Vpc may be used in character-only mode on non-graphics B38 and B39 workstations. For graphics applications (such as Windows), CTOS/Vpc requires the Multi-Resolution graphics Controller (B25-VGX/GC-004) or its equivalent. CTOS/Vpc R2.0.0 supports the use of the CTOS VideoCard with EISA/ISA workstations, but does not require it. With the B25-VGX or its equivalent, the following monitors are supported: Monitors Supported Modes VM-001/2, B25-D1/2, B25-PD7 MONO VC-002, B25-CD3 EGA VGA-200-MON, SG-120-D, VGA VGA-931-VDM VGA B25-CA1 VGA, 8514 B25-GS1 VGA, 8514 B25-VA1 VGA Multisync (B25-VKA adapter) VGA IBM VGA(B25-VKA adapter) VGA PWM-100-COL VGA SG-130D/SVG-100-COL VGA, 8514 EVG-100-COL VGA EVG-201-COL VGA EVG-300-COL VGA EVG-400-COL VGA EVG-500-COL VGA 3.2.4 Recommended Additional Hardware A CTOS-compatible mouse is recommended. This section is included so that the user knows what modifications would be REQUIRED to his hardware or software configuration or to third party or proprietary applications used with this software. If some special upgrade help is available that should be stated here. If the product does not have significant migration requirements (if everything old "just works" in the CTOS tradition) then this section can be left out. Section 4 Migration Requirements 4.1 Compatibility with Previous Versions There are no known incompatibilities between CTOS/Vpc 1.2 and CTOS/Vpc 2.0. >>>Note any special API changes that would require changes in existing applications that use this functionality...That is note any instances where we are not supporting backward compatibility for user written applications that use this product. List corrections (bugs fixed) since last release. All customer initiated UCFs should be listed. List UCF NUMBERS only. No descriptions. Technical Support can help to generate this list. Section 5 Corrections The following PLEs with CTOS/Vpc 1.2 have been corrected in CTOS/Vpc R2.0.0: PROBLEMS CORRECTED PLE 16053015 + keys are no longer available after '@' is displayed. PLE 16084123 Could not use the commercial rating option of Excel-O-Rater software. PLE 16064262 It is not possible to use datacom application 'Kermit', under CTOS/Vpc. PLE 16046787 Vpc exits with erc 15800 when running Windows with Netware and Lance/NW PLE 16005835 DUNN's direct access package does not run under CTOS/Vpc. PLE 16018686 Vpc does not support POPF and PUSHF with value set to 4000h. PLE 16004235 Serial port hangs on a SG3000 when running Windows Terminal. PLE 15969482 CTOS/Vpc hangs in Lotus 123 when Num-Lock or '00' or '/' is pressed. PLE 15955104 Mouse cursor hangs or becomes invisible. PLE 15942355 Installation of INFOConnect Windows application fails under CTOS/Vpc. PLE 15839007 + opens the menu bar in DOS Editor. PLE 15932929 Intermittent hang or Erc 15801 when formatting disks under Windows on the SG3000 PLE 15919051 Installation of ICC/Intercom fails under CTOS/Vpc. PLE 15917199 It is impossible to install Windows applications when using CTOS/Vpc s1.2.3. PLE 15912073 Windows SDK code view debugger (CVW4) does not work under CTOS/Vpc. PLE 15886188 CTOS/Vpc crashes with erc 15801 during the installation of Quattro Pro for Windows. PLE 15891467 Unable to install Blue Book Rating software under CTOS/Vpc. PLE 15865351 CTOS/Vpc crashes with erc 15800 when printing from Lotus 123 v3.1 in WYSIWYG mode. PLE 15886897 Reading from or Writing to a floppy from Lotus 123 crashes CTOS/Vpc with erc 15800. PLE 15876042 WordPerfect Document does not get printed correctly when it is printed directly to a printer. PLE 15483822 Intermittent Keyboard Lock after using +<.> on French Keyboard. PLE 15836121 Datacomm program running Async Bisync protocol does not work on SG2000. PLE 15851091 Keys 6 and 8 generate the wrong characters on a Belgian or French keyboard. Use this section to list things that don't work, not hardware and software requirements. Section 6 Restrictions and Known Limitations CTOS/Vpc runs a DOS environment that is compliant with industry standards and specifications. However, it is not 100% IBM PC AT hardware compatible. It is important to note that this is a hardware compatibility issue and not a DOS environment issue. CTOS/Vpc Release R2.0.0 supports Windows 3.1 in Standard Mode, an industry standard ROM BIOS, and executes DOS 5.0 or DOS 6.2. It maps direct I/O to hardware devices, uses the IBM 84 and 101 keyboard formats, and supports direct access to the video and graphics RAM. In addition, application programs written for an IBM PC AT with register level access to VGA, XMS, and DPMI are supported. 6.1 General Limitations 6.1.1 Comparing Native DOS to CTOS/Vpc DOS Although most applications never know the difference, native DOS runs in real mode, while CTOS/Vpc runs in protected mode, using virtual 8086 mode for DOS. These guarded, multitasking modes of processor operation used for CTOS/Vpc have higher overhead than in the simple native case, so that direct comparisons of native DOS performance against CTOS/Vpc DOS performance are incongruous. A closer native approximation to CTOS/Vpc DOS operation is obtained by running programs in the DOS box under Windows running in enhanced mode. 6.1.2 Performance of Diskless Workstations Since disk access through the network may take longer than accessing a local drive, native PC-like performance is rarely achieved on a diskless workstation. This holds particularly for servers with limited resources. 6.1.3 Minimum Windows System Since native Windows is noticeably slow on a 16 MHz 386SX, such a hardware system is even less likely to satisfy a CTOS/Vpc user running Windows. A 25 MHz 386DX system may be the minimum satifactory system for running Windows under CTOS/Vpc. 6.1.4 Benchmark Programs Most PC benchmark programs give ludicrous results under CTOS/Vpc, and several do not even run. Benchmark programs require very precise time measurement, much more precise than any of the normal methods available on a PC provide. As a result, many benchmark programs make use of highly hardware-dependent techniques to attain the precision they need. CTOS/Vpc is unable to support many of these techniques. 6.1.5 Time of Day The time of day will now be maintained more correctly by PC programs running under Windows, by virtue of the background processing. However, the time may still run slow under some conditions, and will stop in the background if Windows is not running. 6.1.6 PSV Expansion The pseudovolume expands in increments of 500 sectors. Therefore, it may seem to expand in disproportion to the amount of data being added. CTOS/Vpc provides the expandable pseudovolume to optimize disk space usage, but it may incur a problem when your system runs out of disk space. DOS, running under CTOS/Vpc, will think that yo  u have space. In this case, CTOS/Vpc returns an End of Media error to the DOS program attempting the write operation. This is generally reflected to the user as a DOS error message, but may cause unexpected errors if an application has checked for availlable space, found it to be sufficient, and then blindly writes to the disk without checking for errors. 6.2 Hardware Limitations 6.2.1 Unsupported Devices The Unisys AGP graphics module is not supported. Video Controllers GC-001, GC-002, GC-003, Unisys B25-GRA, and Unisys B25-GRE are not supported. The VM-003 monitor is not supported. The PC Compatibility Module (PC-X01/B25-1PC) is not supported. 6.2.2 Read Only Memory Areas Both the ROM BIOS and Video BIOS under CTOS/Vpc are not write-protected. In fact, they reside in RAM. Therefore, any misbehaving program that attempts to write to the ROM areas will be able to do so and will cause unpredictable results. 6.2.3 Native Video BIOS Support on EISA/ISA Native video BIOS support is only available on EISA/ISA platforms (excluding the SG1000). Some high-resolution video modes may simply exceed the limits of the video RAM installed in your workstation. This tends to produce corrupted images in one or more areas of your screen. 6.2.4 Newly Supported Register Instructions (CR0 & DR7) While the reading of registers CR0 and DR7 are now supported, the writing of these registers is inhibited (equivalent to a NOP instruction), because of their potential effect on CTOS operations. 6.2.5 Extended Memory CTOS/Vpc does not fully support DOS Interrupt 15 function 87h and 88h. In spite of of this limitation, extended memory is now listed on the MEM command in CTOS/Vpc. The memory is there and is available to programs that make use of it through HIMEM.sys function calls. 6.2.6 Second Serial Port The second serial port under CTOS/Vpc is only available on workstations with two or more serial ports. The maximum throughput on a COM channel may be reduced when using both COM channels simultaneously. 6.2.7 VGA Timing Limitations Due to timing limitations, CTOS/Vpc cannot accurately return the status of vertical retrace. CTOS/Vpc does not support the vertical retrace interrupt (port 3C2). Also the feature control register (write to port 3DA) is not supported, and the enable/disable feature (write to port 3C3) is not supported in the same way it is on a PC. Certain problems appear only when the CTOS/Vpc must trap I/O instructions using the soft video BIOS (on non-EISA/ISA platforms and SG1000). When CTOS/Vpc is trapping horizontal lines may appear while the PC program is updating the VGA attribute controller. This is known to affect DBASE III and the BGI Demo that is part of Turbo C. 6.2.8 Floppy Limitations On systems with an NEC compatible floppy drive, diskettes formatted as high capacity cannot be reliably reformatted as normal capacity. This restriction also applies to IBM AT with high capacity drives. On systems with an NEC compatible floppy drive, the FORMAT command does not report errors if a low-density floppy is formatted as high density. However, errors are reported later when the floppy is accessed. CTOS/Vpc does not support 2.88M byte floppies. It only supports the 360K byte, 720K byte, 1.2M byte and 1.44M byte diskettes. CTOS/Vpc does not support the verify feature in its BIOS. CTOS/Vpc does not support the access of floppy drives across the network. You can only access your local floppy drives. Some floppy-based copy-protection schemes are incompatible with CTOS/Vpc. 6.2.9 3.5" Floppies CTOS/Vpc cannot format 3.5" floppies when used with a version of DOS less than 5.0. If CTOS/Vpc is reset using with a 3.5" CTOS format floppy inside the floppy drive owned by CTOS/Vpc, the CTOS/Vpc screen is filled with a repetition of some random character. The problem happens because the 3.5" CTOS floppy format has a DOS compatible boot sector. To overcome this problem, remove the 3.5" CTOS floppy from the floppy drive and reset CTOS/Vpc again. 6.2.10 Communications Programs that are timing-dependent or that expect acknowledgments within a certain time period are not likely to work due to differences in timings between CTOS/Vpc and a PC. PC programs which communicate at higher baud rates and do not use flow control (e.g. Xon/Xoff, CTS) may not function properly. The more successful conditions would be: 1) a modern communications application (1-2 years old), 2) running dedicated (no other CTOS contexts or Windows programs), 3) on a fast (33 MHz or greater) 4) powerful (486 or greater), 5) dedicated workstation (no network connections). Under such conditions, baud rates of 9600 or 19200 are easily sustained under CTOS/Vpc. The conditions that may diminish success are: 1) less modern application (2-5 years old), 2) less dedicated software environment (more CTOS or Windows apps), 3) slower (16-25 MHz), 4) less powerful (386), 5) less dedicated hardware environment (clustered or server). Various combinationsj of such conditions will lead to lower maximum baud rates under CTOS/Vpc. 6.2.11 Parallel Port Operation CTOS/Vpc does not support a fully bidirectional parallel port. On EISA/ISA platforms, the parallel port under CTOS/Vpc does now correctly exercise all (5) of the available status signals and all (6) control signals. This allows proper operation of some specific parallel port security key devices ("dongles") and some parallel port communications packages. Devices making full bidirectional use of the data lines, such as scanners, are not supported. Depending on the method used to access the parallel port, printing and other functions may be substantially slower than on a real PC. Many DOS programs use an inefficient but safe method to access the parallel port. This method provides adequate performance on a PC but causes a great deal of emulation overhead under CTOS/Vpc. On EISA/ISA platforms, CTOS does not support CTOS/Vpc usage of any parallel port (LPT1) address other than hexidecimal 3BC. 6.2.12 Printing When using an Epson printer, pin 14 on the CPU side of the parallel printer cable must be tied to pin 1 on the printer side of the cable. Pin 14 on the printer side should be open. (These are the same pin assignments as the parallel printer cable for the XE530.) If these rules are not followed, multiple line feeds may result. CTOS prints an extra linefeed (LF) with certain printers (mainly on dot-matrix printers). These printers interpret the carriage return (CR) as CR and LF, which follows by a normal LF character, resulting in an extra LF in the printout. This is due to the printer design and not related to CTOS/Vpc. However, CTOS/Vpc does provide a workaround. The extra LF can be eliminated by using MSDOS Read to copy the file to CTOS ("Map CR/LF to new line?" = yes), and printing the file from there. For local printing, the performance will be greatly improved if you use direct printing from CTOS/Vpc instead of printing via GPS with local installation. On non-EISA/ISA platforms (such as B38, B39, SG5000, etc.), CTOS/Vpc is unable to accurately report the printer "Out of Paper" status. Instead, it returns an "Off-line" status. If you have a small notebook printer that holds single sheets of paper, use GPS spooled printing with standalone installation rather than printing directly to the LPT port. 6.2.13 Keyboard Keyclick Keyclick is not supported on any of the keyboards. 6.2.14 One Millisecond Timer PC ATcompatible hardware provides a one millisecond clock which uses the realtime clock chip. CTOS/Vpc does not currently support this feature. This can affect the BIOS Delay function, and is known to cause strange results on several DOS benchmark programs. At this time, there is no application software which is known to be affected by the lack of this feature. 6.2.15 Reading Count Registers of the 8254 Timer Chip CTOS/Vpc allows programs to read the count registers of its virtual 8254 Timer. However, the CTOS/Vpc emulation does not always accurately reflect the amount of time that has passed since the previous read of the counter. This causes bogus results with some benchmark programs and is known to affect XTalk For Windows version 2.0.0B. 6.2.16 Older 80386 Processors As documented in the Intel Stepping Information for the 80386 processor, some very early versions of the processor used in old B38 modules produce erroneous addressing when paging is enabled. Running CTOS/Vpc on these older (circa '85-'86) processors may produce sporadic failures. 6.2.17 Math Coprocessor Support Under CTOS/Vpc, if a DOS application causes a coprocessor error fault (Fault 10h), CTOS does not always handle the fault correctly and causes CTOS/Vpc to exit with erc 15801. This situation only happens with a system that has a 80x87 coprocessor that the DOS application tries to use and generates floating-point error. 6.2.18 DMA CTOS/Vpc only supports reads to DMA port 81H and writes to DMA ports 04H, 05H, 0CH, and 81H. This affects backup programs such as PC Tools and Fastback. 6.2.19 Rotating Priorities DOS programs that attempt to use the rotating priorities feature of the 8259 do not function!  under CTOS/Vpc. This includes DESQview. 6.3 Operating System Limitations 6.3.1 Interrupt-Servicing and System Loading Vpc performance is affected by CTOS use of system services that may occupy large percentage of processor time, consequently applications under CTOS/Vpc may run more slowly if many CTOS services are installed on the workstation. In general, programs requiring fast interrupt response and interaction may not work properly. This may be particularly apparent where communications programs cannot keep up with the data rate. Use of data compression on the modem (MNP5 etc.) may cause data to be delivered to the UART at a rate faster than CTOS/Vpc can handle it and faster than the user realizes. 6.3.2 CTOS Debugger and DPMI Compliance CTOS/Vpc uses the CTOS debugger to implement breakpoints for DPMI programs. Programs that depend on DPMI breakpoints may not work properly unless a CTOS III debugger is installed on the system. 6.3.3 ERC 1603 on EISA/ISA Platforms Under some conditions on EISA/ISA platforms, CTOS III will require an additional parameter to be placed in the CTOS config.sys file to avoid a CTOS/Vpc failure with ERC = 1603. The parameter entry is :cParSpecHeap: nnn where nnn is an integer up to 4096. After making any required change, the system needs to be rebooted for the change to take effect. Versions of CTOS III less than 1.1 will require the new entry in order to run even 1 copy of CTOS/Vpc. The value nnn should be set to 128 plus an additional 568 for each copy of CTOS/Vpc to be run. For example, a value of 696 would allow 1 copy of CTOS/Vpc to run. Starting with version 1.1 (and greater) of CTOS III, the default system value for cParSpecHeap will allow 1 copy of CTOS/Vpc to be run without having to add the entry. If multiple copies of CTOS/Vpc will be run on the same workstation, the entry would have to be added according to the formula described above. For example, running 2 copies of CTOS/Vpc would require the value of nnn to be 1264. 6.3.4 Native Video Usage Under DOS Native video support under DOS is limited to operating modes supported by CTOS III 1.1, VAM 4.2, and Context Manager II 5.0. 6.3.5 Native Speaker Usage on EISA/ISA platforms Software that tries to synthesize speech or other sounds by programming the timer to a period of less than 750 usec will not produce the desired results under CTOS/Vpc. Such close timing cannot be provided in the multitasking CTOS environment. Most software that plays simple musical selections will work properly Some programs use Timer channel 2 for timing purposes other than speaker operation. Since CTOS allows background processes to beep, a beep may occur at an inopportune moment and foul up the timing process of the foreground application. One solution is to provide the :NoBeep:Yes parameter in the CTOS Config.sys file to prevent any CTOS beeps whatsoever. 6.3.6 Context Manager II 5.0 Cut and Paste Using Context Manager II 5.0 Cut and Paste to transfer data to CTOS/Vpc will lose all the Carriage Return Markers and may cause data loss if the application cannot hold all the characters in one line. 6.3.7 Busy Loops and Background Processes When running DOS in virtual 8086 mode, the impact of the CTOS/Vpc context on other contexts is determined largely by priorities. CTOS/Vpc contains three processes with default priorities of 127, 128, and 129 (Decimal). DOS and DOS programs execute in the process with the priority 129. CTOS programs of less priority will not run if the DOS process is executing a busy wait loop. This is a problem when GPS is installed on the same system on which CTOS/Vpc is running. The default priorities of GPS drivers are low and can cause a conflict when printing. CTOS/Vpc release R2.0.0 addresses this problem in four ways. (1) COMMAND.COM is a DOS program which executes a busy wait loop at the "C>" prompt. When CTOS/Vpc senses this condition, it inserts WAITS that allow CTOS programs of lower priority to run. (2) Windows 3.1 executes a loop much like Command.com when Windows is idle. CTOS/Vpc detects this condition and inserts WAITS that allow CTOS programs of lower priority to run. Note, however, that some Windows applications never inform Windows that they are idle (for example, the Notepad and Write applets). Such programs prevent CTOS/Vpc from allowing CTOS background applications to run. (3) The CTOS/Vpc Configuration option PcPriority permits the user to change the priority of the PC Process to a priority that does not interfere with other CTOS processes such as GPS. (4) The newly added CTOS/Vpc Configuration parameter SleepOnIdle permits the user to vary the type and amount of waiting that CTOS/Vpc does, almost like setting a speed control. The four settings for the parameter are: None: CTOS/Vpc never performs the standard idle-waiting described in items 1 & 2 above. Some: CTOS/Vpc performs the standard idle-waiting described in items 1 & 2 above (same performance as previous version of CTOS/Vpc). More: in addition to the standard idle-waiting, CTOS/Vpc will wait briefly at every fourth DOS timer tick (INT 1Ch). Most: in addition to the standard idle-waiting, CTOS/Vpc will wait briefly at every other DOS timer tick (INT 1Ch). 6.3.8 Formatting a CTOS Disk with a DOS Partition Partitions created for DOS using Standard Software R12.3.0 Format Disk or Configure Disk may not allow you to Install or Upgrade DOS. If you have yet to install Standard Software make sure to set [Suppress format of medium?] to Yes or see your current Standard Software SRA to see if this problem has been fixed. If you have already installed Standard Software R12.3.0 you can find out if your partition is correct by running Disk Partition Display Details on the disk in question. If the Size in sectors is larger than your total disk then you will need to reformat the disk before you can Install or Upgrade DOS. You can do this with Standard Software R12.3.0 Format Disk or Configure Disk by setting [Suppress format of medium?] to Yes. 6.4 User Interface Limitations 6.4.1 UserNamePc.sys The UserNamePc.sys file must contain all of the entries that are included in the default UserNamePc.sys file. The entries can be changed, but they must be there. For example, the graphics adapter entry can be changed to EGA, but :GraphicsAdapter: must be in the file. If any of the entries are missing, CTOS/Vpc will return an error 1 when invoked. CTOS/Vpc does not ignore whitespace (such as tabs) in the configuration file. Therefore, the presence of tabs or other whitespace is likely to result in an error. Furthermore, multiple entries of the same parameter in the Pc.sys file are not detected. Only the first instance is used, with any subsequent entries being ignored. 6.4.2 Size PSV Utility The allowed range of values for the Size PSV command is from 1 Mb to 127 Mbytes. If the value given when creating the pseudovolume is in the range 1 Mb to 30 Mb, the pseudovolume cannot be resized later to more than 30 Mb. If the initial value given is in the 31 Mb to 127 Mb range, the pseudovolume can subsequently be set to any size less than 127 Mb. 6.5 Driver Limitations 6.5.1 Native Video Support on EISA/ISA CTOS/Vpc supports native video on EISA/ISA workstations using drivers that are produced and provided by the hardware vendor. The only native drivers provided with CTOS/Vpc are those for the ATI chip hardware currently in the SG4000, SG6000, and SG7000. Any native drivers used must be for standard mode Windows 3.1. Windows 3.0 drivers are not supported. Enhanced mode (virtual) drivers are not supported. Some non-conforming, high-resolution native drivers do not allow proper context switching. The problem may be overcome in the future by the use of a GDI Enable utility to make the necessary link between Windows and CTOS/Vpc. 6.5.2 French Keyboard Driver Under CTOS/Vpc, if you enter the KEYB FR command and then run DOSSHELL, the pipe (|) symbol will not display. This behavior also occurs on some real PCs running DOS. 6.5.3 Foreign Keyboard Drivers Delays in processing can occur in programs that load their own keyboard drivers. This is due to execution of excessive I/O instructions to determine keyboard type. The only known program that does this is Windows which CTOS/Vpc detects and handles. Therefore, this should not be a problem. 6.5.4 Windows 84-Key Keyboard Driver The Windows 84-key keyboard driver is not supported, and may cause improper operation of the GO and other keys on CTOS keyboards. 6.6 DOS Limitations CTOS/Vpc only supports standard versions of DOS distributed by either Unisys or Microsoft. CTOS/Vpc does not support the DOS HIMEM.SYS XMS driver for extended memory. CTOS/Vpc has its own HIMEM.SYS which is based on Microsoft's XMS specification and provides the same functionality, including UMB (Upper Memory Block) support. The DOSSHELL that comes with NP25-PD6 has been configured with VGA resolution. If you use EGA graphic emulation, after you exit from DOSSHELL, you will have a screen out-of-bound problem because DOS is expecting a higher resolution VGA screen display. To reset the screen, you have to reboot with . When switching contexts using Context Manager II, DOS programs (as opposed to Windows) will not run in the background, nor will they support any native high-resolution modes that are not supported by VAM. 6.6.1 DOS MEM Command The MEM command may not display an accurate amount of extended memory used. The same problem also appears with the native PC using Himem.sys Version 3.07. The MEM command will not display the amount of expanded memory if you set the 'V32' switch of PEMM.exe. 6.6.2 DOS FORMAT Command on Existing PSVs CTOS/Vpc does not fully support reformatting an existing pseudovolume (PSV). The user must specify an unconditional format (/u), or the operation will fail when DOS tries to save the old FAT and Root Directory areas. This also means that CTOS/Vpc does not support unformatting a pseudovolume. 6.6.3 DOS DBLSPACE Disk Compression Utility Before running the DOS DBLSPACE command on a pseudovolume, be sure to first run the CTOS/Vpc Size PSV utility to set the maximum size of the pseudovolume. Trying to run DBLSPACE on an expandable pseudovolume will result in a failure during SCANDISK (part of the setup for DBLSPACE). Furthermore, to avoid exceeding the available File Allocation Blocks, we recommend first backing up your system and running the CTOS Disk Squash utility. 6.6.4 DOS 386MAX Utility under Native Mode The DOS program 386MAX Ver. 7, for use under native DOS only, includes a module that supports ExtraDOS (additional DOS memory in Windows DOS sessions). The drivers for this ExtraDOS functionality are installed at the end of CONFIG.SYS and must remain there. This presents a problem when the same CONFIG.SYS file is used for both native and CTOS/Vpc booting. Using menu techiques, under DOS 6.2, the initial 386MAX drivers may be bypassed but not the EXTRADOSS.MAX module. As a result the execution of the ExtraDOS.max module under CTOS/Vpc results in an error message during execution of CONFIG.SYS, this HAS NO EFFECT on the operation of DOS, CTOS/Vpc or any further DOS operations. 6.7 Windows Limitations 6.7.1 Windows Versions CTOS/Vpc does not support Windows version 3.0. For Windows version 3.1, CTOS/Vpc does not support off-the-shelf Microsoft Windows but requires instead a specially modified version of Windows sold by Unisys for use under CTOS/Vpc. The minor modifications required for the CTOS/Vpc version still allow that version to be run under native mode DOS, without CTOS/Vpc. 6.7.2 Enhanced Mode Windows CTOS/Vpc does not support Enhanced Mode Windows. Some features that are therefore unavailable are Virtual Device Drivers, multiple DOS boxes, and the Dialog Box that requests confirmation when rebooting (with the Ctrl-Alt-Del key). However, some applications say they require Enhanced Mode Windows when they actually only require extended memory management. Since CTOS/Vpc provides this as a DPMI host, such applications typically run fine on CTOS/Vpc. 6.7.3 Mouse Driver During Windows Installation If you load the mouse driver into upper memory with the line "DeviceHigh=C:\DOS\CMOUSE.SYS" in your CONFIG.SYS file, the installation of Windows will fail. After successfully installing Windows, loading the mouse driver into upper memory does not cause any problems. 6.7.4 Windows 3.1 DOS Box An application running in the DOS Box under Windows will not execute while switched to the background, similar to any DOS program not running under Windows. CTOS/Vpc provides the same functionality in the Windows Standard Mode DOS Box as on a real PC. This means that DPMI client programs cannot run in the Windows DOS Box under CTOS/Vpc. Instead, you must run DPMI client programs (such as Lotus 1-2-3 version 3.1) from the CTOS/Vpc DOS prompt, not from within Windows. 6.7.5 Windows Enhanced Mode and the /s Option CTOS/Vpc does not support Windows Enhanced mode. However, the improved memory management under version R2.0.0 of CTOS/Vpc may cause Windows to find enough memory to automatically try running under enhanced mode, even on systems that did not have this problem previously. Under such cases, Windows must now specifically be invoked with the /s option: win /s to force Standard Mode operation. 6.8 Application Limitations 6.8.1 Phar Lap 386|DOS Extender Support Programs built with the Phar Lap 386|DOS Extender require at least version 4.0 of the Extender. Even under those circumstances, remapping of linear addresses is not supported. 6.8.2 VCPI Applications CTOS/Vpc does not support the VCPI (Virtual Control Program Interface) Specification. Instead, it supports the DPMI specification which is a more advanced and widely-used protected-mode interface. 6.8.3 Turbo Debugger Ctl-Alt-Sysreq Using Ctrl-Alt-Sysreq under Borland Turbo Debugger to break into a program will crash CTOS/Vpc. This break feature of Turbo Debugger is not supported. 6.8.4 Lotus 1-2-3 Version 3.1 Since Lotus 1-2-3 Version. 3.1 is a DPMI-compliant program, it will run under CTOS/Vpc DOS prompt with DPMIHOST.COM installed. As stated earlier in this document, this is a similar environment as running it under Windows Enhanced Mode DOS Box in a regular PC. Therefore, Lotus uses only the DPMI memory and it requires a minimum of 1.5M bytes of DPMI memory to be able to run under CTOS/Vpc. 6.8.5 Word Perfect Version 5.1 Under CTOS/Vpc 2.0, if you use expanded memory with WordPerfect Version 5.1, you need to add the 'V32' switch to the PEMM.EXE program. 6.8.6 XTree for Windows Disk Logging When logging disks larger than 31 Mbytes, Xtree for Windows may encounter a file error and display a Windows dialog box with the options of retrying or cancelling. To recover, the user must cancel and then turn off the Speed Logging feature as follows: select the Options menu, then select Set Options, then remove the checkmark from the Enable Speed Logging box (by pressing spacebar when selected), then select OK, then select Options menu (again), then select Save Configuration Now. 6.8.7 DBASE IV Version 1.5 CTOS/Vpc does not support the hyperdisk cache program that comes with DBASE IV 1.5. However, the newer version of DBASE IV R2.0.0 works well with the DPMI support provided by CTOS/Vpc. 6.8.8 MS Visual C++ CTOS/Vpc does not support Microsoft Visual C++, since the product uses virtual device drivers, which are not supported by CTOS/Vpc. 6.8.9 MSBackup Certain limitations exist using MSBackUp provided with DOS 6.2 when backing up to floppy disk media. Due to the emulation of the low level interface to the floppy disk controller in VPC special care must be taken when operating MSBackUp in this mode. When MSBackUp is started it will try to interface to the floppy disk hardware to calibrate how fast it can operate. This will fail under VPC and the user should configure MSBackUp with the "Floppy Not Installed" option. In the "Backup To:" option in the backup menu select "MS-DOS Drive and Path", then fill in the line with the letter of the floppy drive you will be backing up to, e.g. "A:\". Make sure there is a floppy disk in the drive and start the backup. Section 7 Additional Product Information 7.1 Memory Usage 7.1.1 Extended, Expanded, and DPMI Memory A real PC has three types of memory, as far as most programs are concerned: Realmode memory, Expanded memory, and Extended memory. Realmode memory is the bottom 1 Megabyte of PC memory, which can be used by regular DOS programs. This bottom megabyte includes the Upper Memory Blocks (UMBs), memory above 640K which is accessible to DOS programs. Expanded memory is generally provided by special addon boards. It was originally conceived as a way to provide access to more memory on PC and PCXT machines. On many modern PC's, memory management software allows Extended memory to look like Expanded memory for those programs that still use Expanded memory. Extended memory is the memory in a PC that is greater than 1 Megabyte. For example, a PC with 4 Megabytes of memory is usually configured to have 1 Megabyte of Realmode memory and 3 Megabytes of Extended memory. On a real PC, programs such as Microsoft Windows switch the processor to protected mode and execute directly in Extended memory. 7.1.2 CTOS/Vpc Memory Emulation CTOS/Vpc emulates both Realmode and Expanded memory almost exactly the way they appear in a real PC. It allocates 1 Megabyte of memory for DOS programs, and provides UMB areas as well. Expanded memory under CTOS/Vpc appears to DOS as a separate addin memory board (as described above). CTOS/Vpc does not emulate Expanded memory the way 386 PC memory managers do. In CTOS/Vpc, Extended memory behaves somewhat differently than on a real PC. CTOS/Vpc emulates the two most common uses for Extended memory, which are eXtended Memory Specification (XMS) memory and DPMI memory, but it does not emulate the actual presence of memory chips in a PC. In other words, programs that access Extended memory in a clean way can use it, but those that depend on the physical nature of Extended memory addressing in a real PC will fail. When you specify a value in the :ExtendedMemory: section of the PC.sys file, you are setting the maximum amount of XMS memory that may be allocated."  This memory is used for the storage of data by programs which use the HIMEM.SYS XMS driver. Such programs include many disk caching programs, and a fair number of DOS applications. This memory is NOT used by DPMIcompliant programs. Any memory left over in CTOS/Vpc's partition after it has allocated its Realmode, Expanded, and Extended memory is used as DPMI memory. This memory is available to programs that comply with the DOS Protected Mode Interface (DPMI) specification developed by IBM, Intel, Microsoft and UNISYS, among others. Programs like Windows 3.1 and Lotus 123 v3.1 comply with the DPMI specification. These programs can actually run in protected mode under CTOS/Vpc. 7.1.3 Determining Application Memory Requirements A common point of confusion for CTOS/Vpc users is that application programs specify a required amount of Extended memory. This refers to the recommended amount of physical memory in a real PC. These programs rarely specify whether they use the memory as Extended memory or as DPMI memory, since both methods access the same physical memory in a PC. In general, if a program acts as a DPMI client it will say so somewhere in its documentation. Such programs do not use memory set aside by the :ExtendedMemory: section of the PC.sys file. If a program's documentation talks about Extended memory without mentioning DPMI, it probably uses XMS memory and not DPMI memory. Such programs DO use the memory set aside in the :ExtendedMemory: section of the PC.sys file. Often, the simplest method to determine which type of memory an application needs is trial and error. If you have a program that claims to use Extended memory but you aren't sure whether or not it uses DPMI, you can try the following procedure. 1. Start CTOS/Vpc in a very large (>4 Meg) partition with both :ExtendedMemory: and :ExpandedMemory: set to 00K This maximizes the amount of DPMI memory available under CTOS/Vpc. If the program runs, it is a DPMI client. If it claims insufficient Extended memory, it probably uses XMS memory. 2. Change the PC.sys file to specify a large number in the :ExtendedMemory: section. If the program runs, it uses XMS memory, not DPMI. 3. If the program still claims insufficient memory, it may be trying to access Extended memory directly. Few programs do this anymore, so it might be worth calling the application vendor or looking in the troubleshooting section of their documentation at this point. 7.2 Instructions for Clustershare Users Clustershare and LANce/pc users may need to execute the DOS command SETVER with the proper version code of REDIR.EXE before invoking REDIR.EXE. 7.3 Configuring DOS 6.2 for Dual-booting A new menu feature in DOS 6.2 simplifies the required configuration changes between the native DOS environment and the hosted CTOS/Vpc environment. The feature enables selective execution of both the CONFIG.SYS and AUTOEXEC.BAT files. For example: CONFIG.SYS [menu] menuitem=Vpc menuitem=Native [common] entries for both environments [Native] device=c:\windows\himem.sys [Vpc] device=c:\vpc\himem.sys [common] more entries for both environments AUTOEXEC.BAT entries for both environments goto %config% :Native prompt NATIVE $p$g goto Continue :Vpc prompt VPC $p$g c:\vpc\dpmihost.com goto Continue :Continue more entries for both environments In the examples above, the special CTOS/Vpc drivers HIMEM.SYS and DPMIHOST.COM are accessed in the default \vpc directory where they are placed during installation. The two PROMPT commands in the AUTOEXEC.BAT file are used to easily distinguish between the two environments whenever the DOS prompt is visible. 7.4 Instructions for Windows Users In order to use Windows 3.1 with CTOS/Vpc 2.0, you must first optimize your CTOS/Vpc and DOS configurations. The optimization necessary is specified in Installing Windows 3.1 in the Installation Procedure section. If you are upgrading from Windows 3.0, you must not use any of the Unisys display drivers that shipped with CTOS/Vpc 1.0 (those with any mention of GC-04). These are real mode drivers only, and will not work with Windows 3.1. Follow the steps for upgrading as directed in Installing Windows 3.1 in the Installation Procedure section. 7.5 Representative Applications Tested The following representative applications were tested with CTOS/Vpc R2.0.0: Windows Applications: Ami Pro v3.0 Adobe Type Manager v2.0 Art/IM v2.1 CorelDraw v1.1/v4.0 CrossTalk/Windows v1.1/v2.0 DBase IV v1.5/v2.0 Designer Workbench v2R1 Entertainment Pack/Win v1.0 Harvard Graphics for Windows v1.0.1 INFOConnect BMulti Access v1.0 INFOConnect TCP/IP Access v1.0 Intermission v2.0 LINC Design Assistant III v1.0 Lotus Freelance Graphics v1.0 Lotus Organizer/Win v1.0 Norton Desktop/Win v2.0 MS Access v1.0 MS Office v4.0 MS Works v2.0 PageMaker v4.0 Paradox for Windows v4.5 PC Paintbrush v3.1 PowerPoint v2.0/v3.0 Quattro Pro for Windows v1.0/5.0 Ventura Publisher v3.0 Word for Windows v2.0/v6.0 Word Perfect for Windows v5.2 MS-DOS Applications: AutoCad v10.0 Borland C++ v3.1 Calendar Creator Plus v4.0 CrossTalk XVI v3.61 Harvard Graphics v1.0/v3.0 HP Explorer v1.0 Laplink v5.0 Lotus 1-2-3 v3.4 MathCad v3.0 MS C v6.0 MS Flight Simulator v4.0 MS Word v5.0/v5.5 Norton Utilities v5.0 Paradox v3.5 PC Tools Delux v7.1 ProComm Plus v2.1 QA Plus v4.2 Quicken v3.0 Time Line v4.0 Word Perfect v5.0/v6.0 XTree Pro Gold v2.0 Section 8 Installation Notes 8.1 Overview CTOS/Vpc should only be used on CTOS workstations that are equipped with a hard disk or on diskless workstations where a hard disk is available on the server. The complete installation procedure is described in the CTOS/Vpc User's Guide. For details on using the Executive and its commands, see the CTOS Executive User's Guide and the CTOS Executive Reference Manual. If you have never installed any software before, it is recommended that you read the section entitled, "Installing Applications", in the CTOS System Administration Guide before you begin. The average user is advised to avoid the Verbose option during installation. Using the installation manager with a low resolution monitor, you may encounter a portion of the script being overwritten by the dialog box. The dialog box will be self explanatory, and you should proceed as instructed. 8.2 Types of Systems CTOS/Vpc may be installed on two types of systems:  Stand-alone and cluster workstations with hard disks  Server hard disk systems 8.3 Required Files The following is a list of files required to use CTOS/Vpc. The files are installed automatically for you when you use the installation procedure. The files required to run CTOS/Vpc must reside on the [Sys] directory.  Vpc.run  Vpcmsg.bin  VpcChar.font  VpcLowRes.font  VpcHighRes.font  VpcNlsKbd.sys  NGENVGABIOS  PCATROMBIOS The files required to use SIZE PSV command must reside on the [Sys] directory.  SizePsv.run  SizePsvMsg.bin 8.4 Default Conditions The CTOS/Vpc installation procedure makes several assumptions, including: - The installation is private - The installation is for a particular user name - A previous installation of CTOS/Vpc for that user will already have a UserNamepc.sys file. - A \VPC directory exists on the target bootable :DriveC: (either pseudovolume or native disk partition). The installation package includes an empty default pseudovolume named Vpc.psv. This pseudovolume is renamed to UserName.psv if a new pseudovolume is being installed. When using a native disk partition or an existing pseudovolume, the default pseudovolume file will remain on the system as-is, for optional subsequent use. If you have previously installed PC Emulator or CTOS/Vpc on your system, this installation will not update your configuration file (with the default of UserNamepc.sys, where UserName is your login user name. The installation of CTOS/Vpc includes the installation of the Unisys DOS Files. The following files will be installed into the \VPC directory on the target DriveC (pseudovolume or native partion): AUTOEXEC.PCE Sample CDROM autoexec.bat file CDDRIVER.EXE Necessary for access to a CDROM drive CDR.EXE Necessary for access to a CDROM drive CMOUSE.COM UNISYS mouse support program CMOUSE.DRV UNISYS mouse drivers for Windows CMOUSE.SYS UNISYS mouse device driver for DOS COMM.DRV Windows communication driver CONFID$$.SET File used by Winstall.bat CONFID$$.SLT File used by Winstall.bat CONFIG.SMP Sample CDROM config.sys file CTOSAPI.DLL CTOS application interface CTOSRQ.DLL CTOS request interface DPMIHOST.COM Loaded for DPMI-compliant applications GETBATXT.COM File used by Winstall.bat HIMEM.SYS XMS device driver INSTATI1.BAT Installation batch file for ATI drivers PEMM.EXE EMS 4.0 device driver README Information for Winstall.bat READATI1.TXT Information for ATI drivers RS485EM.EXE Connection to the CTOS environment UCOMM.Drv Windows communication driver W31XL24.EXE Compressed file containing the ATI drivers WINSTALL.BAT Copies files to your windows directory Note: The DOS Drivers that come with CTOS/Vpc R2.0.0 will supersede any other DOS Drivers you obtained from other packages, including NP25-PD6. If the ATI Win" dows drivers are also desired (for SG4000/6000/7000), they may be seperately installed from the "DOS files" diskette using Installation Manager. When the "DOS files" diskette is seperately installed, the user is offered the option of copying the ATI driver files. They must then be further installed from within CTOS/Vpc by following the READATI1.TXT and INSTATI1.bat files in the C:\VPC directory. After a new installation, the user will find a "Non-system disk" message upon booting CTOS/Vpc. The user must at this point install DOS 6.2 as described in the User Guide. If this message occurs on an existing installation, it may indicate that the DriveC specification has been set to a non-bootable target, in which case installing DOS would endanger any existing data. 8.5 Installing Windows 3.1 Note: Only the version of Windows distributed by Unisys for CTOS/Vpc will work under CTOS/Vpc 8.5.1 Optimizing Your CTOS/Vpc And DOS Environments Before performing the actual Windows installation, you must first optimize your CTOS/Vpc and DOS configurations. On the CTOS/Vpc side, this may mean editing your PC.SYS configuration file, and for DOS it means editing your CONFIG.SYS and AUTOEXEC.BAT files. Windows Setup will try, unsuccessfully, to install its own mouse driver if there is not already one installed. To avoid this you must have the CTOS Mouse Service installed before starting CTOS/Vpc. This allows the Unisys DOS driver CMOUSE.SYS to be installed before running Windows Setup. The Windows mouse driver will work properly if used with a Microsoft DOS mouse driver for DOS programs, otherwise, the mouse may not function when running DOS after running Windows. To run Windows effectively, CTOS/Vpc requires a partition size of at least 2.5 Megabytes. It is also recommended that you use some type of disk caching, either CTOS Disk Caching or some disk caching utility within the DOS environment, such as SMARTDRV. The CTOS caching will benefit other CTOS applications as well as CTOS/Vpc. The SMARTDRV caching may be applied to the floppy drives. Refer to the User Guide for specifics on these topics. Windows requires that DOS be loaded into extended memory. This is accommodated by correct configuration at both the CTOS and DOS levels. The CTOS requirement consists of having the following default line in your PC.SYS file: :ExtendedMemory:64K This allows DOS to be loaded high, but doesn't waste extra extended memory that Windows won't be able to use. Note that Windows uses DPMI memory only. It does not use extended memory. If not using Windows, the default setting may be changed to 0K, or to a value appropriate for any other DOS software using extended memory. Windows requires a graphics display mode. Depending on your hardware configuration, you have to specify either EGA or VGA graphics in your PC.SYS file as below: :GraphicsAdapter:EGA or :GraphicsAdapter:VGA The default setting is VGA. After confirming the configuration of your CTOS environment, start a CTOS/Vpc session and modify the DOS environment as described below. You may use the Unisys mouse driver, CMOUSE, provided with CTOS/Vpc in order to use a mouse within Windows. You may instead choose to use the mouse drivers provided with your hardware. You will need to complete the changes necessary to load DOS into the High Memory Area (HMA). Enable DOS to use the Unisys mouse driver, and be loaded into extended memory by adding the following lines to your CONFIG.SYS file: DEVICE = C:\VPC\CMOUSE.SYS DEVICE = C:\VPC\HIMEM.SYS DOS = HIGH,UMB If you specify the UMB parameter in the DOS=HIGH command, this will allow you to load drivers and TSR (memory resident) programs into the Upper Memory Block (UMB). You are urged to load drivers and TSR programs into "upper" memory since it will free up your valuable conventional memory. UMB's under CTOS/Vpc function normally as described in the DOS 6.2 documentation. The other change you need to make to your DOS environment is to automatically run the DPMI server when DOS is started. Add the following line to your AUTOEXEC.BAT file: C:\VPC\DPMIHOST.COM This completes the changes required to run Windows under CTOS/Vpc. In order for the changes to take effect, you need to do a soft reboot of the DOS environment . 8.5.2 Installing Windows 3.1 For The First Time After configuring CTOS/Vpc and DOS as outlined in the previous section, install Windows 3.1 as described in the Windows documentation. When you run Windows Setup, it will automatically detect that you are using CTOS/Vpc and will set its defaults appropriately. Whenever Windows is installed or re-installed, the batch file WINSTALL.BAT in the \VPC directory must then be run to complete the installation. 8.5.3 Upgrading From A Previous Version Of Windows When you upgrade from Windows 3.0, Windows 3.1 preserves your configuration and any custom drivers you have previously installed. This is not a problem for the mouse driver, CMOUSE.DRV, which has not changed. However, it is a problem if you were using one of the display drivers that shipped with CTOS/Vpc 1.0. These are real mode drivers only and will not work with Windows 3.1. There are additional components of a first time installation that are not updated automatically. FOLLOW THESE INSTRUCTIONS VERY CAREFULLY TO CORRECTLY UPGRADE YOUR WINDOWS INSTALLATION!!! The upgrade can only be done properly by choosing Custom Setup from the first set of options. Windows Setup displays a list of your current configuration, and asks if you want to change any item on the list. You must manually reselect the entries for computer, display, and mouse types, even if the information displayed is correct. Use the arrow keys to perform the manual reselection as outlined below: 8.5.3.1. Select the computer type entry of the displayed configuration and press ENTER to scroll through the available alternatives. Position the cursor on "Unisys CTOS/Vpc" and press ENTER to use this selection. If you don't select this option, all of the required files of the new Windows installation will not be copied to your hard disk. 8.5.3.2. Select the display type entry of the displayed configuration and press enter to scroll through the available alternatives. Position the cursor on "VGA" and press ENTER to use this selection. Refer to the section below for information on the use of Unisys display drivers for Windows 3.1. Do not select any of the Unisys display drivers that shipped with CTOS/Vpc 1.0 (those with any mention of GC-04). These are real mode drivers only, and do not work with Windows 3.1. They are still shown as valid choices because Windows maintains all previously installed drivers when an upgrade is being performed. 8.5.3.3. Select the mouse type entry of the displayed configuration and press ENTER to scroll through the available alternatives. Position the cursor on "Unisys Mouse Driver" and press ENTER to use this selection. 8.5.3.4. With the cursor on "no changes", press ENTER to start the installation. The Windows installation proceeds normally from this point. 8.5.4 Windows 3.1 And Non-Native Unisys Display Drivers The following information about the use of the Unisys Windows 3.1 display drivers only applies to classic, non-native CTOS video (CTOS workstations with the GC-004 or equivalent, and EISA/ISA machines with the CTOS VideoCard instaalled. CTOS/Vpc R2.0.0 is shipped with three customized Windows 3.1 display drivers. They are described as below: Unisys 640x480 V1.10 (with GHA) Unisys 1024x768 V1.10  Unisys 1024x768 V1.10 (with GHA) The 640x480 GHA driver provides accelerated performance in standard VGA resolution. The 1024x768 drivers offer increased resolution, with and without GHA support. The acronym GHA refers to a component of the video hardware, the Graphics Hardware Accelerator. VAM version 4.2, a component of CTOS, now provides support for the GHA. Use the high resolution drivers only if your graphics board and monitor support 1024x768 VGA. Windows display drivers will work only if the appropriate video hardware is present. Screen corruption may occur if an unsupported driver is selected. Should this occur, perform a reset of CTOS/Vpc (CtrlAltDel), then reconfigure Windows with a valid display driver. 8.5.5 Common Problems With Windows 3.1 The most common problems encountered with Windows can be attributed to not following the steps outlined above, so these are the first things you should check if you have any problems. Verify that you are running CTOS/Vpc in a large enough partition, and that the CTOS Mouse Service has been installed. Verify that you have enabled either EGA or VGA graphics mode in your PC.SYS file. Verify that you have enabled 64K of extended memory in your PC.SYS file, and that you are using it in your CONFIG.SYS file. Verify that the mouse driver you are specifying in your CONFIG.SYS file is compatible with your Windows mouse driver (same versions from same vendor). Verify that you have started DPMIHOST.COM in your AUTOEXEC.BAT file. And verify that you have # installed the Unisys DOS Drivers on your system. If you still cannot run Windows, verify that you have the following lines in your CONFIG.SYS file: Files=30 Buffers=30 If you start Windows and it displays the Logo Screen, but then exits out with a message like "W031V011E:" check the amount of DPMI memory that is available. You can check DPMI memory by pressing ActionM, then selecting Display Current Config. You should have a minimum of 512K of DPMI memory available for Windows to operate properly. More DPMI memory will greatly enhance Windows performance. Note: Depending on the various memory configuration parameters, Windows may try to start in Enhanced Mode which is not supported under CTOS/Vpc. To avoid this problem, start Windows by typing: win /s to force Windows into Standard Mode. If Windows has trouble recognizing mouse double clicks, add the following lines to the [Windows] section of the WIN.INI file in the \WINDOWS directory under DOS: DoubleClickHeight=10 DoubleClickWidth=10 This allows the mouse to jiggle a little and still register two button presses as a double click. See the Windows file WININI.WRI in the \WINDOWS directory for more information about these parameters. 8.5.6 Windows 3.1 for Dual Boot (Native and CTOS/Vpc) The Unisys version of Windows 3.1 that is designed for use with CTOS/Vpc also runs successfully under native DOS. In order to use the Unisys version in both environments, it should be installed under native DOS, rather than under CTOS/Vpc. It may then be used in either case. 8.5.7 Completing the Windows Installation for CTOS/Vpc Whenever Windows is installed or re-installed, the batch file WINSTALL.BAT in the \VPC directory must then be run to complete the installation. Section 9 Support 9.1 Warranty CTOS/Vpc R2.0.0 is a warranted Unisys software product. Unisys warrants that CTOS/Vpc R2.0.0, in its unaltered form, will substantially conform to Unisys current published functional specifications when used in Unisys supported configurations. The customer is responsible for reporting suspected deviations using the User Communication Form (UCF) process within ninety (90) days following delivery. The product is neither field repairable nor field modifiable. Corrections to reported deviations are provided to the user via updated code files. This standard warranty is not a substitute for Unisys Service Agreement offerings. 9.2 Support Category CTOS/Vpc is covered under the CTOS III 1.1 SSP5 support. NP25-PD6 and NP25-WD5 have SSP3 coverage. UP25-WD5 does not have support service available. Customers who upgrade their SB25-PD4 and/or SB25-WD4 by purchasing UP25-WD5 will retain the support they currently have on those products. For instance, If they have SSP3 on the old product, they will continue to have SSP3 on the upgraded product. Customers who currently own SB25-PD4 and SB25-WD4 and want to upgrade to CTOS/Vpc R2.0.0 can upgrade their pseudovolumes to DOS 6.2 by purchasing a retail copy of the DOS 6.2 upgrade package. If they want Windows 3.1, they need to purchase the Unisys UP25-WD5 upgrade package. If you need further assistance or information regarding support services, please contact your Unisys representative or your local Unisys office. 9.3 Support Discontinuance Unisys supports the current release level and one level back. Prior levels are not supported. 9.4 Product Assistance 9.4.1 Instructions Should you encounter a problem with a Unisys product, please contact your local Customer Service Center. Your Customer Service Center representative will have a more definitive set of problem reproduction requirement guidelines specific to the application you are running. So that your questions may be answered in a timely manner, please collect all information which applies to your problem. A guideline for gathering information is listed below. 9.4.2 Environment In order to assist us in determining the nature of your problem, please be prepared to describe the environment in which the problem occurs. 9.4.3 Software Components  If you suspect the problem is software related, be prepared to provide the following information concerning the software being used: 1. The version number of the software in which the problem occurs. 2. The version of the operating system software. 3. Installation parameters used for the failing software. 4. Configuration files used. 5. Other software installed at the time of failure. 6. Recent changes to the system software (for example, updates). 7. Any messages associated with the failure that appear in the system log files (for example, accessed through the Plog command on CTOS systems). 8. The connectivity of the software (is your system part of a network?). 9.4.4 Hardware Components If you suspect the problem is hardware related, be prepared to provide the following information concerning your hardware platform: 1. The type of processor being used. 2. The workstation components (for example, hard drives, communication modules, CDROM drive). 3. Any peripherals attached to the workstation (for example, printers, scanners, modems, plotters). 4. The connectivity of the hardware (is your system part of a network?). 5. Recent changes to the hardware platform. 6. The amount of memory installed. 9.4.5 Circumstances Be prepared to describe the circumstances under which the failure occurs. The description should include: 1. Whether or not the problem is reproducible. 2. The exact steps that are required to reproduce the problem. 3. A description of circumstances under which the problem does not occur.  This section is designed to list the part numbers and style IDs of all documentation customers can order. An example is provided here. Section 10 Customer Product Information 10.1 Required Product Documentation The CTOS Vpc User's Guide is shipped with CTOS/Vpc. You may also additionally need MS-DOS documentation or Windows documentation if you buy those packages. Part Number Manual Name 4361 2050-100 CTOS Vpc User's Guide The CTOS/Vpc User's Guide describes how to to install CTOS/Vpc as well as how to configure both the CTOS and DOS environments for CTOS/Vpc, how to start a CTOS/Vpc session from the various CTOS interfaces (PM, CM, and Exec), and how to work with pseudovolumes and DOS partitions This manual is an update of a previous version. New CTOS/Vpc features are documented, such as improved memory management,native DOS partition support, native VGA BIOS support for EISA/ISA, pass-thru speaker, support for 3rd party mouse drivers, second serial port support, more complete parallel port support, DOS 6.2 support, support for running CTOS/Vpc in background in VGA mode. A section on serial/parallel ports has been added, and the troubleshooting section has been enhanced. This guide is perfect bound and ships with a quick reference card. The guide can be ordered separately as 4357 4672-300 and the reference card can be ordered separately as 4361 2043000. 10.2 Recommended Additional Manuals 4588 7320-000 MSDOS 6.2 User's Reference Manual This reference is the standard MS-DOS manual. It provides installation instructions and describes the features of MS-DOS 6.2. This manual is published in perfect binding. It is shipped with MSDOS 6.2 and is not separately orderable. 4362 2489-000 Windows 3.1 User's Guide and Reference Condensed Version This guide is a condensed version of the standard 3.1 Windows documentation. It provides complete documentation for Windows and is shipped with Windows 3.1. This guide is published in perfect binding and is not separately orderable. 4162 5237-000 LANce/pc and LANce/LM Administration and Programming Guide LANce/pc and LANce/LM Administration and Programming Guide describes how to install and configure the LANce/pc and LANce/LM products in the CTOS and DOS environments. Also provides information for administering the products, using the products, and creating application programs for the product's Netbios application program interface 4371 1969-100 LANce/pc Network Shell Reference Card LANce/pc Network Shell Reference Card provides information helpful to system administrator of the DOS platform running LANce/pc. LANce/pc works with LANce/LM to provide communications between DOS and CTOS platforms. Section 11 List of Files on Product Media 11.1 Contents of the Distribution Diskettes The Product distribution diskettes are your master copy and should be write-protected. The contents of the diskettes cannot be overwritten unless the write-protect tabs are removed. Do not remove or switch these write-protect tabs and do not use these diskettes as your working copy. CTOS/Vpc Service (3.5" diskette): Distribution Diskette 1 of 2 (3.5" diskette) contains the following files in the directory: Vpc.run VpcMsg.bin VpcChar.font VpcLowRes.font VpcHighRes.font NGENVGABIOS PCATROMBIOS VpcNlsKbd.sys SizePsv.run SizePsvMsg.bin DefConfigFilePart1 DefConfigFilePart2 DefConfigFilePart3 VpcAppend.run DosDir.cmd MSWrite.cmd The directory contains: Vpc.psv In addition to various standard system files, the Distribution Diskette 1 of 2 contains the following files in the #  directory: Install.Ctrl Install.Jcl Install.Cmds InstallMsg.txt InstallMsg.bin Distribution Diskette 2 of 2 contains the following files in the directory: DOS>Cmouse.com DOS>Cmouse.sys DOS>Cmouse.drv DOS>DpmiHost.com DOS>PEMM.exe DOS>Himem.sys DOS>Rs485em.exe DOS>CDDriver.exe DOS>CDR.exe DOS>Config.smp DOS>Autoexec.pce DOS>ReadMe DOS>Winstall.bat DOS>Confid$$.set DOS>Confid$$.slt DOS>GetBaTxt.com DOS>CTOSRQ.dll DOS>CTOAPI.dll DOS>UCOMM.drv DOS>COMM.drv DOS>InstATI1.bat DOS>ReadATI1.txt DOS>W31XL24.exe DosFiles.fls ATIFiles.fls MSWrite.cmd In addition to various standard system files, the Distribution Diskette 2 of 2 contains the following files in the directory: CTOS/Vpc DOS File Diskette Install.Jcl Install.Ctrl Install.Cmds InstallMsg.txt InstallMsg.bin The directory contains: SRA.txt CTOS/Vpc Service (5.25" diskettes): Distribution Diskette 1 of 4 (5.25" diskette) contains the following files in the directory: Vpc.run VpcMsg.bin VpcNlsKbd.sys DosDir.cmd MSWrite.cmd In addition to various standard system files, the Distribution Diskette contains the following files in the directory: Install.Ctrl Install.Jcl Install.Cmds InstallMsg.txt InstallMsg.bin Distribution Diskette 2 of 4 contains the following files in the directory: VpcChar.font VpcLowRes.font VpcHighRes.font NGENVGABIOS PCATROMBIOS SizePsv.run SizePsvMsg.bin DefConfigFilePart1 DefConfigFilePart2 DefConfigFilePart3 VpcAppend.run The directory contains: Vpc Diskette 2 Distribution Diskette 3 of 4 contains the following files in the directory: Vpc.psv The directory contains: Vpc Diskette 3 Distribution Diskette 4 of 4 contains the following files in the directory: DOS>Cmouse.com DOS>Cmouse.sys DOS>Cmouse.drv DOS>DpmiHost.com DOS>PEMM.exe DOS>Himem.sys DOS>Rs485em.exe DOS>CDDriver.exe DOS>CDR.exe DOS>Config.smp DOS>Autoexec.pce DOS>ReadMe DOS>Winstall.bat DOS>Confid$$.set DOS>Confid$$.slt DOS>GetBaTxt.com DOS>CTOSRQ.dll DOS>CTOAPI.dll DOS>UCOMM.drv DOS>COMM.drv DOS>InstATI1.bat DOS>ReadATI1.txt DOS>W31XL24.exe DosFiles.fls ATIFiles.fls MSWrite.cmd In addition to various standard system files, the Distribution Diskette 4 of 4 contains the following files in the directory: CTOS/Vpc DOS File Diskette Install.Jcl Install.Ctrl Install.Cmds InstallMsg.txt InstallMsg.bin The directory contains: SRA.txt NP25-PD6 CTOS/Vpc Microsoft DOS 6.2 is comprised of four 5.25" DOS format 1.2 MB diskettes, or three 3.5" DOS format 1.44 M bytes diskettes, which contain DOS 6.2. NP25-WD5 CTOS/Vpc Windows 3.1 and UP25-WD5 Windows 3.1 Upgrade is comprised of eight 5.25" DOS format 1.2 MB diskettes, or seven 3.5" DOS format 1.44 M bytes diskettes, which contain Windows 3.1. Note: You cannot use an off-the-shelf version of Windows 3.1 with CTOS/Vpc. You must use the Unisys version. Section 12 Ordering Procedure 12.1 Ordering Software This Software Release Announcement describes the R2.0.0 release of CTOS/Vpc. CTOS/Vpc is delivered on either 51/4 inch or 31/2 inch disks. CTOS/Vpc cannot be ordered seperately. It is shipped as a component of CTOS III 1.1. The table below lists the orderable MSDOS and MS Windows software packages for CTOS/Vpc. If an Update Service Request is attached to your copy of this Software Release Announcement, you can order the software by completing and returning the form. Media provided by Unisys Corporation may not be returned for credit. If no Update Service Request is attached, you can order additional copies of the software by contacting your Unisys representative. Package Description Style ID MSDOS 6.2: Initial singleuser package (software and documentation) NP25-PD6 MSDOS 6.2: Initial per-seat authorization for each additional user (license only) ML25-PD6 MS Windows 3.1: Initial singleuser package (software and documentation) NP25-WD5 MS Windows 3.1: Upgrade for a singleuser package (software and documentation) UP25-WD5 MS Windows 3.1: Upgrade for a classic standalone workstation package (software and documentation) SB25-WD5 Note that there is no package to upgrade a user of MSDOS 5.0 to MSDOS 6.2. This upgrade must be purchased from a retail computer store. 12.2 Ordering Manuals You can order manuals from the following address: Unisys Corporation Publications Distribution Center 13250 Haggerty Road North Plymouth, Michigan 481702 # XXXX XXXX-000 2PF  XXXX XXXX-00 # 4588 9508-000 i i 4588 9508-000 Section Level 1 Level 2 Level 3 Level 4 4588 9508-000 # # 4588 9508-000 #%CLNlm#`Cl]GH@ H E! GH@ EG HBC;! GH%$ &!"8#%@')@*+,#Az[ (E*$ &!#'*+,57I ?[;!E$# @ p PGH@ p x#GHI[,IGH $ &#&'+,!$ &!#'*+,?#GH$[ (,$ &!#'*+,567I ? S`CDn> ? %  ISͺ`G~Cnޤ? I \ O > %BFH$ &#&'*+,>@ @ TDE@ TE@ TGH B0125OPYZqrstwP1PPOsPPPQ H&$%&+TU^_z{|}%QUO|PQQQP6+     H&      !"'=>?DXZ[`~!Q>QZQQOPOH&@ACDG]_`eOCP_QQQ$ &#&'*+,H&$  !&;=>CQSTYiklo Q=QSQkPQQQ4#""!!   <>?DVXY^suv{Q>QXQuQQQQQ?**))((''&&%%$$# "#)467=QSTZrtu{"Q6QSQtQQQQY21100//..--,,++  !"%DFGLuwx}&()Q!PFQwQQQQ(QWX998877665544332,./4Z\]bڒޖ -.Q\QPQQPQ0/A@@??>>==<<;;:: "$%*EGHMnpqtQ$QGQpPQQFFEEDDCCBB$ &#&'*+,A+-.3[]^c،ܐ2-Q]QPQQQQ4#NMMLLKKJJIIHHGG 2458RTUZ~ހ  Q4PTQQQQQ Q2UUTTSSRRQQPPOON &().EGHM]_`epr{|(QGQ_QrOPQQ\\[[ZH&ZYYXXWWVV !#$)WYZ]څމ#QYPPPPbbaa``__^^]]   "#&1347JLMPacdg|~O"P3PLPcP~PhggffeeddcH&c$ &#&'*+, 8:;@lnotܥ   DFGLQ:QnQQQ QFQOWoonnmmllkkjjiih   #689<UWX[prsxPP8PWPrQQQvvuuttssrrqqpH&p#9;<AQS\^|}Q;QSOPPOP.-}}||{{zH&zyyxxww-/9;<PQSTXlnos0OSPnP/؈H&$ &#&'*+,~~ HIQRg(*+0ICIHBg(@@@@10HOE+@ O B$ &#&'*+,$ &#&'*+, FGRST| >?@HI`@ ڲ?B`@>"O$ &#&'*+,FH  HH@ZOE+$ &#&'*+,<()*ab&'bcdghil$BCDGR"(T`TTTTTTT%TcLj TTTThDžBTTTbכZ$ &#&'*+,FH OF* @*$ &#&'*+,OE+$ #./09]am͔ͮ>BNXYab}~ɣ.TTTIXB}Eۿ O O  B$ &#&'*+,$ &#&'*+,FH OF*  Ǐɔ[j}~ՍɒnљѬN$r~ -  ;ÎF@F@@m@@@N@@q@ E-  $ &#&'*+, @ *O$ &#&'*+,H!HFH O@*  FY̋Ȍ׫01@.@F f$ &#&'*+, H@ 0&@ 0&@6@ONR\p08yZ \ݽ6/yY׼g@@*OF*$ &#&'*+, H@ &1$ &#&'*+,  @ &1 Ѡӥ/$%ǟFAIBE@/I&$%$ &#&'*+,OO B$ &#&'*+, O FGH"@ 7!ѿ%Fۜ9Gۜ !-jwFTۚIB@#@$@89 jF@  U2! H@  U2!H@  U2!HO B$ &#&'*+,BPޝīQ_ޚĨ ]k+sā()1B۝Q]sI(BV:  B$ &#&'*+,@  U2!H@  U2!$ &#&'*+,H'%&!"ƪȭ  /   (!"5 %A!AEF@/A (A5@A  GH$ &#&'*+,FHGHOOO @@E1@iF"@OF!O $ &#&'*+,GHGHOE += GH'-.DEJK}؏@AFGWefglmҁKLQRi%- !: -AAD}A@W@fǀAAKi@@!@@@= @w @ @; e: ('GH&$ &#&'*+,% $HGHOF#6yI Q  @j@@@XM@6uE F @ @  ,@+$ &#&'*+,@$2!*GHOF)$ &#&'*+,  dekl~۸@AGHw  #g@@d~@@@w@@#: 1$ &#&'*+,0/.GHOF-$ &#&'*+,H3ABHM؊ڍެȱ+,12T> '* Yb% . p y   0 3 ? AFM@@EF@@+T@F>AA AAA?  HFH 7$ &#&'*+,65O4GHF3O2@"$ʢƧ(?Ituv{|jkps } : E 9 = F$AF@@u@jF@@@L @ @ 8 t H@ ;HGHF:$ &#&'*+,FHFH 9O8 w{#$)*9>L!3vF@@V@E#9@>@FH FHGHF>O=O<H@ $ &#&'*+, >G}~כܽ89>?VxB}EսAAVA8V@@CBCBAO@H@GHOF?$ &#&'*+, ' $%,-2WX~'ީE@@@@@ F$,FW~ $ &#&'*+,GAFOE@GHOFD$ &#&'*+, -޾[\]byڢP\`mnB-@I@@EF@@\FydB[r H @L$ &#&'*+,KOJHIGH#GHOFH% !0<=BW0127`  5F0@<FWA@1F`E F5AF@FA0, TGH SRQOPH'@O$ &#&'*+, NOM ɱRSXxbch~89>M@F@RFx@bF~@8FM@F@@ܯ$ &#&'*+,"YXWVU$ &#&'*+,!GHOFT  +,/=>ChWX]x B+E=Fh@@@@WFx@@@7 @ 6FH $ &#&'*+,$]O\O[G HOZ$ &#&'*+,#-3%6 .2nʔVZʣY`ʉʣީ o 9 \ F3@@S@6@.TVTTE@E @ ] 5ؤ\ FHH @`$ &#&'*+,&O_$ &#&'*+,%FH O^ 89<\ *F\dzԉ@8E\@3@@E΄ H@b$ &#&'*+,(HOa$ &#&'*+,'@Ս@BӎVG HOc$ &#&'*+,+$ &#&'*+,*@$ &#&'*+,) H<W` *fgjk|E@@@@<@@fE|ۯE@ J($ &#&'*+,,@ J(f@  P@J(eFH FHG HOdɾ(1د>FT]& ' &7IYgu@E@J@h@@@`@@u@;& U @   @*H$ &#&'*+,-HH FHG HOgFH @  Pɏ+1g'(-./ͦE'F\.Oi@ 0  G HOhHH FH$ &#&'*+,.@J(FH FH% .7߀4 S T r s ۆ u v { Ŧ <.1  N u ɬ= <OFj$ &#&'*+,0FH H$ &#&'*+,/@J(GH5s qrz5r qFH O@ C P A2!=J(RH@J(GHOFk$ &#&'*+,1  not_g#2nh$#GHOFl@J(@ # A2!=J(RO@  A2!=J(R$ &#&'*+,2 )bp+6[)b\[HFH @ 0  FH%@J(GHOFm$ &#&'*+,3֣ۨ'STWi  Ң'ҸBEAAASEi@@@ A η rOqOp &*,5oGHOFn@J($ &#&'*+,48|}̀ԕ֚lmr (   "$ \^ y{   b f  i jl   TV   EA|EFAlFA F(A![xiS ' &*,8A*F*x OG*w &*,7vOutOs &*,6' ̃ ̲ ;<!*mv7@>A^gFAʯ<IBEAVW;ۥ $ &#&'*+,:A HO{Oz B$ &#&'*+,9 OG*2!Oy%4VDSv m !)+KLPxE%WVCDWvw BKEx@@@H~O}$ &#&'*+,;FH @ NA O|f'$ &#&'*+,;67bgI@ > +%$ &#&'*+,;7bgI% '߬ϫ@ > +%$ &#&'*+,;7bgI@ > +@ > +$ &#&'*+,;t!@u t$ &#&'*+,<$ &#&'*+,;'$ &#&'*+,;67bgIމ'$ &#&'*+,<67bgI@ > +%$ &#&'*+,<7bgIֆυ@ > 3%$ &#&'*+,<7bgI@ > +$ &#&'*+,<S-KT,SH@ > +$ &#&'*+,<'$ &#&'*+,<67bgI%@%@Ӊ@ > +%$ &#&'*+,=7bgI$ &#&'*+,=H@ > +$ &#&'*+,='$ &#&'*+,=67bgIFG'F'$ &#&'*+,=67bgI@ > +%$ &#&'*+,=7bgIUT@ > +%$ &#&'*+,=7bgI@ > +$ &#&'*+,= bXv cWb$ &#&'*+,>I@ > +$ &#&'*+,='$ &#&'*+,=67bgIމ'$ &#&'*+,>67bgI@ > +%$ &#&'*+,>7bgIֆυ@ > 3%$ &#&'*+,>7bgI@ > +$ &#&'*+,>S-KT,SH@ > +$ &#&'*+,>'$ &#&'*+,>67bgI &jx@@@jBO &*,A$ &#&'*+,@FH @ 0  FH%$ &#&'*+,?H E@X@+GH*@  &*,A&*,A567@ &*,A57GH)@  GH(O ĭYZFPʤٮU_@ZEO֭T^Y  &*,B@   GH( &*,A&*,A57@&*,A567@  NGH*  ʲҵ *+5?IS]^mnopqEIȰ@ +O5P?QIRSS^o*]n,,,,,,,^ ,AO2>tP+<Zl>Oc/i5EU?W;S 3.>=/ 8@@HHH BodyText+.BodyText&  @  sectionhead+- sectionhead>=/ 8@@HHHpage  sectionnumber/Title>=/8  hHHHTitle TitleTCaveat Caveat+hh-head1 @ underline+h-head2 @ head13.list.num @head2 list.num Annotation  bodytext.emph @ Annotation3 Toc.Section3(Toc13 (Toc23(Toc3 @  Title.product3 (Toc4  Toc.SectionPbullet Toc1 Toc2*. StyleId.Head Toc3+ N-Manual Toc4 bullet footer*#X Release.info @ StyleId.Head+h- Contents.head Manual  Manual.Title+.footer/x underline  Release.info @  contents.head+Z@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@New Century SchoolbookNew Century SchoolbookNew Century Schoolbook Helvetica8Helvetica NarrowNew Century Schoolbook Helvetica Helvetica%New Century Schoolbook Helvetica Helvetica! Helvetica, Helvetica) Helvetica Helvetica Helvetica Helvetica- Helvetica HelveticaNew Century SchoolbookNew Century SchoolbookTimesNew Century Schoolbook#Times HelveticaNew Century Schoolbook Helvetica Courier Helvetica Helvetica Helvetica[ex[yeeC+en}CCHe:MMe}H}CReeeeeeeeeeCH}jR`x}>R>Cj:eseseH`s:>s:ssssRVCnee`[j:jM>>Cjyd888BCees}neeeeneCCeee0j55}R[nvRm[[:&Vjj::M[:CC`::[[[[[[[[[[[::V}xnM[ss}esH[HH[:``[eV:[e55e5e`eeMM>`V}VRRV:VMHH:[Z444;<```V`[VVVe[M:Vjj0j>>! <!!  ! V  @k            @@[[@%u[@ [u@u[@%[@@@% k      kkk     [}  @ @ u u%[    % {{y%\ !!!<.ccB<<c..c7<.77,G777..I7 0...........000.S77;;72@;)7.D;@7@;72;7M772'...)....)D....).);)))0.,.dd$7.7.@.@2;.)...RI2.OOO2.Rdd<<<&&&&HCvvOHHvCCv!BHCBBC*VBBB!(9CCkW!((/F!C!!CCCCCCCCCC((FFFIuWWWWPI]W!CWIdW]P]WPIWPqPPI(!(FC!CICIC(II!!C!kIIII/C(IC]CC</"/F((!CCCxx!!!+(WCWC]I]IWICCCCxkIC(__^(I<<<((CxxxHHH....NbN]N]]mNNN]]N]N]N]NNNm]mNm]]NNNNe]]]C]]llllyoyydd8nydnnyynnn8;Noo)CCdy8o88oooooooooo88yyyYQo~zCyCyd)ooYsdCkz?;w?zdsoY]Nzkkk`CyCyCC8dyd888BCooddzYdddsoC;YNN)N44oyyyMMMMmdvmmdd2cmdcca?ccc22@ddx(<<Fi2d22dddddddddd22iiidxxxn2Zxdxxnxxxn222Td(ddZdd2dd((Z(dddd<Z2dZZZZ</<i<<2dad222A<xdxddndZdddnd<<n<<"<<<dmmmEEEECTCPrCPP]CCCPPCPCPCPCCC]Px]C]PPCCCCWPPPxx9xPP\\\\ccccd~dd@Pxxdddddmd,TdddPdPPP,xdx^xxxdhhdddxh@xxxxExxxhhh<<<<YpYkYkk|YYYkk8Y .kYkYkYYY|k|Z|kkY@@YYYtk@kkLkk@@@{{{{yoyyoo8nyonnoFnnn8C_oo8CCNu8o88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMM& TN\TTNN'MTNMMK1dMMM''2NN|]//6R'N''NNNNNNNNNN''RRRN]]ee]Vme'F]Nuem]me]Ve]]]V'''BNNNFNN'NNFuNNNN/F'NFeFFF/$/R//'NKN'''3/]N]NmNmVeNFNNN|VN/oon/V/////NTTT6666yoyyoo8nyonnkFnnn88Goo,CCNu8o88oooooooooo88uuuoz8dozz888^o,oodoo8oo,,d,ooooCd8oddddC4CuCC8oko888HCooozodooozoCCzCC&CCCoyyyMMMMccccd~dx@dxxdddxx_d,Txdxdxddd@xexxdhhdddxh@xxVxxhhhyoyyoo8nyonnkFnnn88Goo,CCNu8o88oooooooooo88uuuoz8dozz888^o,oodoo8oo,,d,ooooCd8oddddC4CuCC8oko888HCooozodooozoCCzCC&CCCoyyyMMMMyoyyoo8nyonnoFnnn8C_oo8CCNu8o88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMMysyydd9nydnnynnn9;Css0NNdy8d88s]ssssssss88yyydYNyNyd0zosNzJFFzhdUzzzkNyNyCC9dd999BCzzzzossszsC;d``0`CCdyyyMMMMyoyydd8nydnnynnn8CPyo)CCdy8d8yoooooooooo88yyyYQzCyCyd)soYzYCkzC?oCzdsoYYFzhdd]CyCyCC8dd888BCssddzYYYYooCCYNN8NCCdyyyMMMMydyydd2nydnn[Fnnn2CRddCCCdq2d28dddddddddd88qqqYzoCNzoozzC8C^dCYdYdYCdd88d8ddddCN8ddddY`(`lCC2d[d222BCYYdddYYYYddCCYYY$YCCdyyyMMMMxxExEP`>bbxExECEEskbbx>}]]Y]}sb}}bbPPExxEEEOP}}}PPsssEsCCx\\\\xxx<xmT<PbxxPPPx<x<CxxxxxxxxxxCCkP]PCPqxPkxkxkPxxCCxCxxxxP]Cxxxxks0sPP<xmx<<<OPkkxxxkkkkxxPPkkk+kPPx\\\\CTCCU5PP]CCCCCCxCCCq5xC55x5PxCxxxxP>PPPCCCCWPxPPPP.PPP\\\\ysyydd9nydnnynnn9CPys4QQdy9d98ssssssssss99yyy`YQyQyd4zkhNzNJNs~h`QoshhQyQyCC9dd999BCsskhhhssCC```9`88dyyyMMMMyocyyooo8nyonnoFunnn8C_oo8CCNu8C88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMMmdYvmmddd2cmdccd?iccc2<Udd2<<Fi2<22dddddddddd<<iiinxn2dnxxnxxxn<2<id2dndnd<nn22d2nnnnFd<ndddZF2Fi<<2ddd222A<ddnnnddddnd<<nZZ+Z<<dmmmEEEE`YxOi``YYY,X`YXXY8]XXX,5LYYt,55>],5,,YYYYYYYYYY55]]]bttttkb|t,Ytbt|k|tkbtkkkb5,5]Y,YbYbY5bb,,Y,bbbb>Y5bY|YYP>->]55,YYY,,,:5tYtY|b|btbYYYYbY5vv5bPP&P55Y```====`YxOi``YYY,X`YXXV8]XXX,,9YYk$55>],5,,YYYYYYYYYY,,]]]Ykkttkb|t,PkYt|k|tkbtkkkb,,,KY$YYPYY,YY$$P$YYYY5P,YPtPPP5*5]55,YVY,,,:5kYkY|Y|btYPYYYbY5vv5b55555Y```==== "(     "b"n Picture 1 B & b  i)`6T  *.`?T trII**j   ZERrjlRZbj"$%(*.? ????(8 ?>' p ???? ?!O??!?~!?|?!?|!?!?>!?~?!?~?!?>? !?>???!???p<?>????? ??? ?>?>??>???|?????????????? ????????????????!??!????!???!???.!????!????!?????????!|???>!??????< ( @=?  ,@?PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF DH|0H"^ 0L( o%VH0h0hڳ=u &##9dG!( $LUKOB=3.0 \Q78a1cmPTy%++24=CHMRV`eo}|ߍ¦AF;b :"*j18e97::3<<@==>>m?@WBCdCeEKHJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm' mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm CrashDump.sys Install.jcl Install.ctrl Fileheaders.sysMfd.sys SysImage.sysCTOS/Vpc DOS Files DisketteInstallmsg.bin BootRecord.sysLog.sys BadBlk.sysInstallmsg.txt ( =@ B25PE6-2/2@ #wHwB @ D (> w%)9|P^Sys8 CTOS SRA 9|Fileheaders.sysSys: wwwXD XBootRecord.sysSys< wwwMfd.sysSys: wwA9wB 3Log.sysSys< www@  SysImage.sysSys: www BadBlk.sysSys< wwwa CrashDump.sysSys8 www@ CTOS/Vpc DOS Files DisketteSys: www Install.jclSys 8 w9whwj`o Install.ctrlSys 8 w9whw< Installmsg.binSys : w w w={ Installmsg.txtSys < w9w wu& DOSFiles.flsCTOS  !w9whw.y ATIFiles.flsCTOS #w3whw&02 MSWrite.cmdCTOS &w3wnw2( -DOS>WINSTALL.BATCTOS )w9whw DDOS>CONFID$$.SETCTOS +w@wwhwkRDOS>CONFID$$.SLTCTOS -w@wwhwd/DOS>GETBATXT.COMCTOS 0w@wwiw x"CMOUSE.COMCTOS 3w@ww iw68\DOS>CMOUSE.SYSCTOS 5w@wwhw78DOS>CMOUSE.DRVCTOS 8w7w7w  DOS>HIMEM.SYSCTOS :w9whw&( DOS>PEMM.EXECTOS DPMIHOST.COMCTOS ?w@ww&iwz ' DOS>READMECTOS Aw9w)iw~T^DOS>CTOSRQ.DLLCTOS Cw@wwhwhh DOS>CTOSAPI.DLLCTOS Fw@wwhwnn DOS>UCOMM.DRVCTOS Iw@ww5iw@$X&T DOS>COMM.DRVCTOS Kw@ww8iw@$~&DOS>CDDRIVER.EXECTOS Nw?ww;iwc' DOS>CDR.EXECTOS  Qw?ww>iw!"8!DOS>AUTOEXEC.PCECTOS! TwwAiw>) (f"DOS>CONFIG.SMPCTOS" VwwCiwK#DOS>RS485EM.EXECTOS# Xw?wwFiw pe$DOS>INSTATI1.BATCTOS$ Zw@wwHiww%DOS>READATI1.TXTCTOS% ]w @wwKiwxS&DOS>W31XL24.EXECTOS& _w@wwoiw}~!'SRA.TXTSRA' jwHwHwDDMPHw3wTKJcmsallyPortl(SRA.TXTsra.txtbonoSRA)HwHwHwD DMPHw3wTKJcmsallyPortR)*Q*+P+, O,- N-. M./ L/0 K01J12I23H34) G45F56E67D78C89B9:@:;?;<><===><>?;?@:@A9AB8BC7CD6DE5EF* 4FG3GH2HI1IJ0JK/KL.LM-MN,NO+OP*PQ)QR(RS'ST&TU%UV$VW#WX* "XY!YZ Z[[\\]]^^__``aabbccddeeffgghhiij+ jkkllm mn no op pq qrrssttuuvvwwxxyyzz{{|+ |}}~~, ߛޜݝܞ۟, ڠ١آף֤եԦӧҨѩЪ{ DOSFiles.fls MSWrite.cmdDOS>WINSTALL.BATDOS>CONFID$$.SETDOS>CMOUSE.COM DOS>HIMEM.SYS DOS>UCOMM.DRV DOS>CDR.EXE DOS>RS485EM.EXE#DOS>INSTATI1.BAT$DOS>READATI1.TXT% ATIFiles.flsDOS>CONFID$$.SLTDOS>CMOUSE.SYSDOS>CMOUSE.DRV DOS>PEMM.EXEDOS>DPMIHOST.COM DOS>READMEDOS>CTOSRQ.DLL DOS>COMM.DRVDOS>CDDRIVER.EXEDOS>AUTOEXEC.PCE!DOS>CONFIG.SMP"DOS>GETBATXT.COMDOS>CTOSAPI.DLLDOS>W31XL24.EXE&SRA.TXT'-  Software Release Announcement Adjust Vertical Tab as Needed CTOS/VpcTM Product Family Version R2.0.0 To order additional copies of this document  United States customers, call Unisys Direct at 1800448-1424.  All other customers, contact your Unisys Sales Office.  Unisys personnel, use the Electronic Literature Ordering (ELO) system. Distribution lists: SA,SN,SU,SW,PR5 System: CTOS Release: R2.0.0 FCS Feb 1994 Part Number: 4588 9508-000 >>>The previous page break contains special footer information. Do not delete it. The names, places, and/or events used in this publication are not intended to correspond to any individual, group, or association existing, living, or otherwise. Any similarity or likeness of the names, places, and/or events with the names of any individual, living or otherwise, or that of any group or association is purely coincidental and unintentional. NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product or related information described herein is only furnished pursuant and subject to the terms and conditions of duly executed agreement to purchase or lease equipment or to lease software. The only warranties made by Unisys, if any, with respect to the products described in this document are set forth in such agreement. Unisys cannot accept any financial or other responsibility that may be the result of your use of the information in this document or software material, including direct, special or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. RESTRICTED RIGHTS LEGEND. Use, reproduction, or disclosure is subject to the restrictions set forth in DFARS 252.227-7013 and FAR 52.227-14 for commercial computer software Copyright 1994 Unisys Corporation All Rights Reserved Unisys is a registered trademark of Unisys Corporation Context Manager, Generic Print System, TeleCluster, CTOS/Vpc, and XBus are trademarks of Convergent Technologies, Inc. CTOS and SuperGen are registered trademarks of Convergent Technologies, Inc. BTOS is a trademark of Unisys Corporation. OFIS is a registered trademark of Unisys Corporation. Apple, LaserWriter, and Macintosh are registered trademarks of Apple Computer, Inc. AT, IBM, IBM PC, and OS/2 are registered trademarks of International Business Machines Corporation. Common User Access, IBM PCAT, IBM PCXT, and IBM PS/2 are trademarks of International Business Machines Corporation. Intel is a registered trademark of Intel Corporation. Lotus 1-2-3 is a registered trademark of Lotus Development Corporation. GWBASIC, MSDOS, and Microsoft are registered trademarks of Microsoft Corporation. Presentation Manager and Windows are trademarks of Microsoft Corporation. UNIX is a registered trademark of AT&T. XVT is a trademark of XVT, Inc. >>>The page break before this heading contains the template that automatically generates your table of contents. Do not delete it. Contents Section 1 General Description 1 1.1 CTOS/Vpc Overview 1 1.2 CTOS/Vpc Product Styles 2 Section 2 Release Functionality 3 2.1 General Features for All Platforms 3 2.2 Features for EISA/ISA Platforms 4 2.3 User-Interface Features 4 2.3.1 New Configuration Parameters 4 2.3.2 New Action-M Configuration Information 5 Section 3 Product Interdependencies 7 3.1 Software Interdependencies 7 3.1.1 System Software Requirements 7 3.1.2 Recommended Additional System Software 7 3.1.3 Video Software Options 7 3.2 Hardware Interdependencies 8 3.2.1 Memory Requirements 9 3.2.2 Disk Requirements 10 3.2.3 Video Hardware Requirements 12 3.2.4 Recommended Additional Hardware 12 Section 4 Migration Requirements 13 4.1 Compatibility with Previous Versions 13 Section 5 Corrections 15 Section 6 Restrictions and Known Limitations 17 6.1 General Limitations 17 6.1.1 Comparing Native DOS to CTOS/Vpc DOS 17 6.1.2 Performance of Diskless Workstations 17 6.1.3 Minimum Windows System 18 6.1.4 Benchmark Programs 18 6.1.5 Time of Day 18 6.1.6 PSV Expansion 18 6.2 Hardware Limitations 19 6.2.1 Unsupported Devices 19 6.2.2 Read Only Memory Areas 19 6.2.3 Native Video BIOS Support on EISA/ISA 19 6.2.4 Newly Supported Register Instructions (CR0 & DR7) 19 6.2.5 Extended Memory 19 6.2.6 Second Serial Port 20 6.2.7 VGA Timing Limitations 20 6.2.8 Floppy Limitations 20 6.2.9 3.5" Floppies 21 6.2.10 Communications 21 6.2.11 Parallel Port Operation 22 6.2.12 Printing 22 6.2.13 Keyboard Keyclick 23 6.2.14 One Millisecond Timer 23 6.2.15 Reading Count Registers of the 8254 Timer Chip 23 6.2.16 Older 80386 Processors 23 6.2.17 Math Coprocessor Support 24 6.2.18 DMA 24 6.2.19 Rotating Priorities 24 6.3 Operating System Limitations 24 6.3.1 Interrupt-Servicing and System Loading 24 6.3.2 CTOS Debugger and DPMI Compliance 24 6.3.3 ERC 1603 on EISA/ISA Platforms 25 6.3.4 Native Video Usage Under DOS 25 6.3.5 Native Speaker Usage on EISA/ISA platforms 25 6.3.6 Context Manager II 5.0 Cut and Paste 26 6.3.7 Busy Loops and Background Processes 26 6.3.8 Formatting a CTOS Disk with a DOS Partition 27 6.4 User Interface Limitations 27 6.4.1 UserNamePc.sys 27 6.4.2 Size PSV Utility 28 6.5 Driver Limitations 28 6.5.1 Native Video Support on EISA/ISA 28 6.5.2 French Keyboard Driver 28 6.5.3 Foreign Keyboard Drivers 28 6.5.4 Windows 84-Key Keyboard Driver 29 6.6 DOS Limitations 29 6.6.1 DOS MEM Command 29 6.6.2 DOS FORMAT Command on Existing PSVs 29 6.6.3 DOS DBLSPACE Disk Compression Utility 30 6.6.4 DOS 386MAX Utility under Native Mode 30 6.7 Windows Limitations 30 6.7.1 Windows Versions 30 6.7.2 Enhanced Mode Windows 31 6.7.3 Mouse Driver During Windows Installation 31 6.7.4 Windows 3.1 DOS Box 31 6.7.5 Windows Enhanced Mode and the /s Option 32 6.8 Application Limitations 32 6.8.1 Phar Lap 386|DOS Extender Support 32 6.8.2 VCPI Applications 32 6.8.3 Turbo Debugger Ctl-Alt-Sysreq 32 6.8.4 Lotus 1-2-3 Version 3.1 32 6.8.5 Word Perfect Version 5.1 33 6.8.6 XTree for Windows Disk Logging 33 6.8.7 DBASE IV Version 1.5 33 6.8.8 MS Visual C++ 33 6.8.9 MSBackup 33 Section 7 Additional Product Information 35 7.1 Memory Usage 35 7.1.1 Extended, Expanded, and DPMI Memory 35 7.1.2 CTOS/Vpc Memory Emulation 35 7.1.3 Determining Application Memory Requirements 36 7.2 Instructions for Clustershare Users 37 7.3 Configuring DOS 6.2 for Dual-booting 38 7.4 Instructions for Windows Users 39 7.5 Representative Applications Tested 40 Section 8 Installation Notes 43 8.1 Overview 43 8.2 Types of Systems 43 8.3 Required Files 43 8.4 Default Conditions 44 8.5 Installing Windows 3.1 46 8.5.1 Optimizing Your CTOS/Vpc And DOS Environments 46 8.5.2 Installing Windows 3.1 For The First Time 48 8.5.3 Upgrading From A Previous Version Of Windows 49 8.5.4 Windows 3.1 And Non-Native Unisys Display Drivers 50 8.5.5 Common Problems With Windows 3.1 51 8.5.6 Windows 3.1 for Dual Boot (Native and CTOS/Vpc) 52 8.5.7 Completing the Windows Installation for CTOS/Vpc 52 Section 9 Support 53 9.1 Warranty 53 9.2 Support Category 53 9.3 Support Discontinuance 54 9.4 Product Assistance 54 9.4.1 Instructions 54 9.4.2 Environment 54 9.4.3 Software Components 55 9.4.4 Hardware Components 55 9.4.5 Circumstances 56 Section 10 Customer Product Information 57 10.1 Required Product Documentation 57 10.2 Recommended Additional Manuals 58 Section 11 List of Files on Product Media 59 11.1 Contents of the Distribution Diskettes 59 Section 12 Ordering Procedure 65 12.1 Ordering Software 65 12.2 Ordering Manuals 66 The above page break contains a even/odd footer. Do not delete. This section is designed to give an overview of the product and to introduce the SRA itself. Text can come from the NPA or Product Description. It should include the product name, part numbers, style IDs, and what kind of media the product is distributed on. Section 1 General Description This Software Release Announcement describes the CTOS/Vpc R2.0.0 product family. It provides a product description, installation instructions, and ordering information. 1.1 CTOS/Vpc Overview CTOS/Vpc provides the MS-DOS environment on CTOS workstations by using the virtual 8086 mode of the Intel 80386 and 80486 processors. CTOS/Vpc runs the majority of retail DOS and Windows software and provides binary compatibility for DOS applications that are compliant with the DPMI (DOS Protected Mode Interface) standard for Extended DOS programming. CTOS/Vpc runs DPMI compliant DOS extended software to break the traditional DOS 640K memory barrier and use the extended memory, protected mode, and multitasking capabilities of Intel processor-based 16/32-bit systems. By meeting the DPMI standard, CTOS/Vpc helped CTOS become acknowledged by the industry as the first non-PC platform to implement a DPMI host. CTOS/Vpc runs Microsoft Windows 3.1 in Standard Mode, allowing Windows applications to take advantage of - Extended Memory. CTOS/Vpc also provides a builtin DOS Extender which is compatible with the Windows DOSX DOS Extender. CTOS/Vpc facilitates CTOS interoperability by offering a DOS environment similar to the environment found on IBM PCs, ATs, PS/2s, and compatibles. This powerful dual platform capability provides users the ability to run most favorite off-the-shelf DOS and Windows applications, as well as CTOS applications from one CTOS desktop workstation. CTOS/Vpc R2.0.0 is the second major release of this new generation of software that replaces the PC Emulator system by addressing DOS memory management issues PC Emulator could not solve. 1.2 CTOS/Vpc Product Styles CTOS/Vpc is released on 5.25" and 3.5" diskettes. Listed below are the style IDs and brief description. Description CTOS/Vpc Service, included with CTOS III 1.1 This software package includes the CTOS/Vpc control program which routes the DOS requests, services and manages the Virtual 8086 environment, provides I/O emulation, emulates the interrupt controller functions, and handles keyboard and video operations. It also includes the SIZE PSV utility for creating and resizing DOS pseudovolumes. NP25-PD6 CTOS/Vpc Microsoft DOS 6.2 This package includes the Microsoft DOS 6.2 operating system, utilities, and Quick Basic. NP25-WD5 CTOS/Vpc Microsoft Windows 3.1 This software package consists of DOS 1.2M byte or 1.44M byte media containing Windows 3.1. UP25-WD5 CTOS/Vpc Microsoft Windows 3.1 Upgrade This software package consists of DOS 1.2M byte or 1.44M byte media containing Windows 3.1. This package is available to licensed users of Windows 3.0 and Windows 2.0. LB25-PE6 CTOS/Vpc Product Localization Kit This software package allows localization of CTOS keyboard tables and messages for CTOS/Vpc 2.0. Section 2 Release Functionality Version R2.0.0 of CTOS/Vpc provides several new or enhanced functions over previous versions. 2.1 General Features for All Platforms  Second serial port allows use of COM1 or COM2 or both  Non-graphics workstation support for character-based DOS applications  Support for standard mouse drivers  DOS 6.2 is qualified and supported  Windows and Windows applications may continue to run in the background under Context Manager II 5.0 when switched to other CTOS applications  New support for certain processor instructions  Improved memory management allows greater sharing of different memory types  HIMEM.sys version 3.07 is provided  General performance improvement at interrupt level (5-10%) 2.2 Features for EISA/ISA Platforms The features below are only available when running CTOS/Vpc on EISA/ISA workstations (e.g., SG2400, SG3400, SG4000, SG6000, SG7000).  Support for native VGA BIOS and most native standard-mode Windows drivers (except on SG1000/1100/1200 notebook)  Native speaker usage for music and sound effects  Support for native DOS partitions on both CTOS and non-CTOS disks  Improved native parallel-port support now allows operation of some security devices and communications software 2.3 User-Interface Features Some improvements have been made in the user interface for CTOS/Vpc. For example, updated Help now covers information useful while running the program. 2.3.1 New Configuration Parameters  A SleepOnIdle parameter has been added to allow user tuning of CTOS/Vpc versus other CTOS applications  COM2 and ReadyBusy2 parameters have been added to support the second serial port  DriveCPassword and DriveDPassword parameters have been added to support DOS partition access to a non-CTOS drive, as well as pseudovolumes with a password 2.3.2 New Action-M Configuration Information  The new OS Version, VAM Version, User Name, and Mail Status fields give CTOS system information  The updated Available XMS field displays the amount of Extended Memory currently available on a real-time basis  The new DriveC (kBytes), DriveC Type, DriveD (kBytes), and DriveD Type fields give information about the size and type of disk being used for both pseudovolumes and native partitions. This Section describes hardware and software requirements. RAM and Media sizing requirements should be included as well. An example is provided here. Section 3 Product Interdependencies 3.1 Software Interdependencies 3.1.1 System Software Requirements The following levels of system software must be installed: CTOS III 1.1 or higher with Standard Software 12.3.0 or higher VAM 4.2 or higher 3.1.2 Recommended Additional System Software For running multiple CTOS programs, Context Manager II 5.0 or higher must be installed. For running some DPMI-compliant applications, the CTOS Debugger (e.g. Debugger3.3.Sys) must be installed on the system. 3.1.3 Video Software Options On non-EISA/ISA workstations, CTOS/Vpc uses an industry-standard software BIOS and special Windows drivers, as opposed to the BIOS and drivers that would be used under native DOS and Windows. On EISA/ISA desktop workstations, CTOS/Vpc uses the native video BIOS and Windows video drivers. The following non-native Windows video drivers are installed automatically by CTOS/Vpc R2.0.0 and operate using the built-in "Soft BIOS" included with CTOS/Vpc. B38, B39, SG1000/2000/5000, CTOS VideoCard: CTOS/Vpc 640 x 480 (with GHA) 1024 x 768 1024 x 768 (with GHA) The following native Windows video drivers are provided with CTOS/Vpc R2.0.0 because the drivers in the PW2 Op-kit are Enhanced Mode drivers that are not supported under CTOS/Vpc. These Standard Mode drivers may be installed by Installation Manager from the last disk in the CTOS/Vpc package ("DOS files" disk). They must then be further installed from within CTOS/Vpc by following the READATI1.TXT and INSTATI1.bat files in the C:\VPC directory. SG4000/6000/7000: ATI VGA Wonder 640 x 480 x 16 Large & Small Fonts 640 x 480 x 256 Large & Small Fonts 800 x 600 x 256 Large & Small Fonts 1024 x 768 x 256 Large & Small Fonts For running CTOS/Vpc with native Windows video drivers, the following drivers from the native PW2 Op-kits were available at the time of CTOS/Vpc R2.0.0 release: SG3000: Op-kit #MPI 400001-OK1 (Western Digital) 640 x 480 x 256 COLOR 640 x 480 x 256 COLOR (corrected) 800 x 600 x 16 COLOR SG2400/3400: Op-kit #CWS 40001-OK1 (Cirrus Logic) 640 x 480 x 16 800 x 600 x 16 1024 x 768 x 16 Large & Small Fonts 1280 x 1024 x 16 Large & Small Fonts 3.2 Hardware Interdependencies CTOS/Vpc supports systems equipped with a 80386 or greater processor, which includes the following styles: B38 series, B39 series, SG1000, SG1100, SG1200, SG2000, SG2400, SG3000, SG3400, SG4000, SG5000, SG6000, and SG7000. 3.2.1 Memory Requirements Approximate memory requirements are: (See explanations below) Vpc.run . . . . . . . . . . . . . . . . . . . . . 1.5M bytes SizePsv.run . . . . . . . . . . . . . . . . . . 170K bytes The amount of memory used by CTOS/Vpc varies based on the hardware and software environment. The following are the minimum memory requirements for different system configurations: CTOS & CTOS/Vpc 2.5M bytes CTOS & CTOS/Vpc & Win 3.1 3.5M bytes CTOS & CM & CTOS/Vpc & Win 3.1 4.0M bytes CTOS & PM & CTOS/Vpc & Win 3.1 6.5M bytes CTOS/Vpc together with CTOS requires a minimum of 2.5M bytes of RAM memory. However, 4M bytes is the minimum amount of memory recommended when running Context Manager II and/or DOS programs requiring substantial amounts of extended or expanded memory. Windows 3.1 under CTOS/Vpc will run in a 2M bytes Context Manager II partition, but at least a 3M bytes partition is recommended. If you need to run Windows 3.1 applications that require a substantial amount of working memory, e.g. Excel for Windows, it is recommended that your workstation is equipped with at least 6M bytes of RAM. This allows a CTOS/Vpc configuration equivalent to a real PC with 4M bytes of RAM. 3.2.2 Disk Requirements Disk requirements for CTOS/Vpc. CTOS Files (in sectors) Vpc.run 830 VpcMsg.bin 26 VpcChar.font 17 VpcLowRes.font 13 VpcHighRes.font 18 NGENVGABIOS 64 PCATROMBIOS 64 VpcNlsKbd.sys 58 SizePsv.run 222 SizePsvMsg.bin 5 DefConfigFilePart1 1 DefConfigFilePart2 1 DefConfigFilePart3 8 VpcAppend.run 121 DosDir.cmd 9 MSWrite.cmd 9 Vpc.psv (optional) 1100 2566 DOS Files (in bytes) AUTOEXEC.PCE 63 CDDRIVER.EXE 4451 CDR.EXE 8597 CMOUSE.COM 13848 CMOUSE.DRV 5120 CMOUSE.SYS 14331 COMM.DRV 9280 CONFID$$.SET 4203 CONFID$$.SLT 4992 CONFIG.SMP 75 CTOSAPI.DLL 28160 CTOSRQ.DLL 26624 DPMIHOST.COM 740 GETBATXT.COM 8337 HIMEM.SYS 9872 INSTATI1.BAT 4828 PEMM.EXE 13286 README 992 READATI1.TXT 1144 RS485EM.EXE 3243 UCOMM.DRV 9280 W31XL24.EXE 228836 WINSTALL.BAT ___3346 403647 Approximate disk requirements for NP25-PD6: DOS 6.2 (DOS Format) 5 Megabytes Approximate disk requirements for NP25-WD5 & UP25-WD5: Windows 3.1 (DOS Format) 8.5 Megabytes 3.2.3 Video Hardware Requirements CTOS/Vpc may be used in character-only mode on non-graphics B38 and B39 workstations. For graphics applications (such as Windows), CTOS/Vpc requires the Multi-Resolution graphics Controller (B25-VGX/GC-004) or its equivalent. CTOS/Vpc R2.0.0 supports the use of the CTOS VideoCard.  with EISA/ISA workstations, but does not require it. With the B25-VGX or its equivalent, the following monitors are supported: Monitors Supported Modes VM-001/2, B25-D1/2, B25-PD7 MONO VC-002, B25-CD3 EGA VGA-200-MON, SG-120-D, VGA VGA-931-VDM VGA B25-CA1 VGA, 8514 B25-GS1 VGA, 8514 B25-VA1 VGA Multisync (B25-VKA adapter) VGA IBM VGA(B25-VKA adapter) VGA PWM-100-COL VGA SG-130D/SVG-100-COL VGA, 8514 EVG-100-COL VGA EVG-201-COL VGA EVG-300-COL VGA EVG-400-COL VGA EVG-500-COL VGA 3.2.4 Recommended Additional Hardware A CTOS-compatible mouse is recommended. This section is included so that the user knows what modifications would be REQUIRED to his hardware or software configuration or to third party or proprietary applications used with this software. If some special upgrade help is available that should be stated here. If the product does not have significant migration requirements (if everything old "just works" in the CTOS tradition) then this section can be left out. Section 4 Migration Requirements 4.1 Compatibility with Previous Versions There are no known incompatibilities between CTOS/Vpc 1.2 and CTOS/Vpc 2.0. >>>Note any special API changes that would require changes in existing applications that use this functionality...That is note any instances where we are not supporting backward compatibility for user written applications that use this product. List corrections (bugs fixed) since last release. All customer initiated UCFs should be listed. List UCF NUMBERS only. No descriptions. Technical Support can help to generate this list. Section 5 Corrections The following PLEs with CTOS/Vpc 1.2 have been corrected in CTOS/Vpc R2.0.0: PROBLEMS CORRECTED PLE 16053015 + keys are no longer available after '@' is displayed. PLE 16084123 Could not use the commercial rating option of Excel-O-Rater software. PLE 16064262 It is not possible to use datacom application 'Kermit', under CTOS/Vpc. PLE 16046787 Vpc exits with erc 15800 when running Windows with Netware and Lance/NW PLE 16005835 DUNN's direct access package does not run under CTOS/Vpc. PLE 16018686 Vpc does not support POPF and PUSHF with value set to 4000h. PLE 16004235 Serial port hangs on a SG3000 when running Windows Terminal. PLE 15969482 CTOS/Vpc hangs in Lotus 123 when Num-Lock or '00' or '/' is pressed. PLE 15955104 Mouse cursor hangs or becomes invisible. PLE 15942355 Installation of INFOConnect Windows application fails under CTOS/Vpc. PLE 15839007 + opens the menu bar in DOS Editor. PLE 15932929 Intermittent hang or Erc 15801 when formatting disks under Windows on the SG3000 PLE 15919051 Installation of ICC/Intercom fails under CTOS/Vpc. PLE 15917199 It is impossible to install Windows applications when using CTOS/Vpc s1.2.3. PLE 15912073 Windows SDK code view debugger (CVW4) does not work under CTOS/Vpc. PLE 15886188 CTOS/Vpc crashes with erc 15801 during the installation of Quattro Pro for Windows. PLE 15891467 Unable to install Blue Book Rating software under CTOS/Vpc. PLE 15865351 CTOS/Vpc crashes with erc 15800 when printing from Lotus 123 v3.1 in WYSIWYG mode. PLE 15886897 Reading from or Writing to a floppy from Lotus 123 crashes CTOS/Vpc with erc 15800. PLE 15876042 WordPerfect Document does not get printed correctly when it is printed directly to a printer. PLE 15483822 Intermittent Keyboard Lock after using +<.> on French Keyboard. PLE 15836121 Datacomm program running Async Bisync protocol does not work on SG2000. PLE 15851091 Keys 6 and 8 generate the wrong characters on a Belgian or French keyboard. Use this section to list things that don't work, not hardware and software requirements. Section 6 Restrictions and Known Limitations CTOS/Vpc runs a DOS environment that is compliant with industry standards and specifications. However, it is not 100% IBM PC AT hardware compatible. It is important to note that this is a hardware compatibility issue and not a DOS environment issue. CTOS/Vpc Release R2.0.0 supports Windows 3.1 in Standard Mode, an industry standard ROM BIOS, and executes DOS 5.0 or DOS 6.2. It maps direct I/O to hardware devices, uses the IBM 84 and 101 keyboard formats, and supports direct access to the video and graphics RAM. In addition, application programs written for an IBM PC AT with register level access to VGA, XMS, and DPMI are supported. 6.1 General Limitations 6.1.1 Comparing Native DOS to CTOS/Vpc DOS Although most applications never know the difference, native DOS runs in real mode, while CTOS/Vpc runs in protected mode, using virtual 8086 mode for DOS. These guarded, multitasking modes of processor operation used for CTOS/Vpc have higher overhead than in the simple native case, so that direct comparisons of native DOS performance against CTOS/Vpc DOS performance are incongruous. A closer native approximation to CTOS/Vpc DOS operation is obtained by running programs in the DOS box under Windows running in enhanced mode. 6.1.2 Performance of Diskless Workstations Since disk access through the network may take longer than accessing a local drive, native PC-like performance is rarely achieved on a diskless workstation. This holds particularly for servers with limited resources. 6.1.3 Minimum Windows System Since native Windows is noticeably slow on a 16 MHz 386SX, such a hardware system is even less likely to satisfy a CTOS/Vpc user running Windows. A 25 MHz 386DX system may be the minimum satifactory system for running Windows under CTOS/Vpc. 6.1.4 Benchmark Programs Most PC benchmark programs give ludicrous results under CTOS/Vpc, and several do not even run. Benchmark programs require very precise time measurement, much more precise than any of the normal methods available on a PC provide. As a result, many benchmark programs make use of highly hardware-dependent techniques to attain the precision they need. CTOS/Vpc is unable to support many of these techniques. 6.1.5 Time of Day The time of day will now be maintained more correctly by PC programs running under Windows, by virtue of the background processing. However, the time may still run slow under some conditions, and will stop in the background if Windows is not running. 6.1.6 PSV Expansion The pseudovolume expands in increments of 500 sectors. Therefore, it may seem to expand in disproportion to the amount of data being added. CTOS/Vpc provides the expandable pseudovolume to optimize disk space usage, but it may incur a problem when your system runs out of disk space. DOS, running under CTOS/Vpc, will think that you have space. In this case, CTOS/Vpc returns an End of Media error to the DOS program attempting the write operation. This is generally reflected to the user as a DOS error message, but may cause unexpected errors if an application has checked for availlable space, found it to be sufficient, and then blindly writes to the disk without checking for errors. 6.2 Hardware Limitations 6.2.1 Unsupported Devices The Unisys AGP graphics module is not supported. Video Controllers GC-001, GC-002, GC-003, Unisys B25-GRA, and Unisys B25-GRE are not supported. The VM-003 monitor is not supported. The PC Compatibility Module (PC-X01/B25-1PC) is not supported. 6.2.2 Read Only Memory Areas Both the ROM BIOS and Video BIOS under CTOS/Vpc are not write-protected. In fact, they reside in RAM. Therefore, any misbehaving program that attempts to write to the ROM areas will be able to do so and will cause unpredictable results. 6.2.3 Native Video BIOS Support on EISA/ISA Native video BIOS support is only available on EISA/ISA platforms (excluding the SG1000). Some high-resolution video modes may simply exceed the limits of the video RAM installed in your workstation. This tends to produce corrupted images in one or more areas of your screen. 6.2.4 Newly Supported Register Instructions (CR0 & DR7) While the reading of registers CR0 and DR7 are now supported, the writing of these registers is inhibited (equivalent to a NOP instruction), because of their potential effect on CTOS operations. 6.2.5 Extended Memory CTOS/Vpc does not fully support DOS Interrupt 15 function 87h and 88h. In spite of of this limitation, extended memory is now listed on the MEM command in CTOS/Vpc. The memory is there and is available to programs that make use of it through HIMEM.sys function calls. 6.2.6 Second Serial Port The second serial port under CTOS/Vpc is only available on workstations with two or more serial ports. The maximum throughput on a COM channel may be reduced when using both COM channels simultaneously. 6.2.7 VGA Timing Limitations Due to timing limitations, CTOS/Vpc cannot accurately return the status of vertical retrace. CTOS/Vpc does not support the vertical retrace interrupt (port 3C2). Also the feature control register (write to port 3DA) is not supported, and the enable/disable feature (write to port 3C3) is not supported in the same way it is on a PC. Certain problems appear only when the CTOS/Vpc must trap I/O instructions using the soft video BIOS (on non-EISA/ISA platforms and SG1000). When CTOS/Vpc is trapping.  horizontal lines may appear while the PC program is updating the VGA attribute controller. This is known to affect DBASE III and the BGI Demo that is part of Turbo C. 6.2.8 Floppy Limitations On systems with an NEC compatible floppy drive, diskettes formatted as high capacity cannot be reliably reformatted as normal capacity. This restriction also applies to IBM AT with high capacity drives. On systems with an NEC compatible floppy drive, the FORMAT command does not report errors if a low-density floppy is formatted as high density. However, errors are reported later when the floppy is accessed. CTOS/Vpc does not support 2.88M byte floppies. It only supports the 360K byte, 720K byte, 1.2M byte and 1.44M byte diskettes. CTOS/Vpc does not support the verify feature in its BIOS. CTOS/Vpc does not support the access of floppy drives across the network. You can only access your local floppy drives. Some floppy-based copy-protection schemes are incompatible with CTOS/Vpc. 6.2.9 3.5" Floppies CTOS/Vpc cannot format 3.5" floppies when used with a version of DOS less than 5.0. If CTOS/Vpc is reset using with a 3.5" CTOS format floppy inside the floppy drive owned by CTOS/Vpc, the CTOS/Vpc screen is filled with a repetition of some random character. The problem happens because the 3.5" CTOS floppy format has a DOS compatible boot sector. To overcome this problem, remove the 3.5" CTOS floppy from the floppy drive and reset CTOS/Vpc again. 6.2.10 Communications Programs that are timing-dependent or that expect acknowledgments within a certain time period are not likely to work due to differences in timings between CTOS/Vpc and a PC. PC programs which communicate at higher baud rates and do not use flow control (e.g. Xon/Xoff, CTS) may not function properly. The more successful conditions would be: 1) a modern communications application (1-2 years old), 2) running dedicated (no other CTOS contexts or Windows programs), 3) on a fast (33 MHz or greater) 4) powerful (486 or greater), 5) dedicated workstation (no network connections). Under such conditions, baud rates of 9600 or 19200 are easily sustained under CTOS/Vpc. The conditions that may diminish success are: 1) less modern application (2-5 years old), 2) less dedicated software environment (more CTOS or Windows apps), 3) slower (16-25 MHz), 4) less powerful (386), 5) less dedicated hardware environment (clustered or server). Various combinationsj of such conditions will lead to lower maximum baud rates under CTOS/Vpc. 6.2.11 Parallel Port Operation CTOS/Vpc does not support a fully bidirectional parallel port. On EISA/ISA platforms, the parallel port under CTOS/Vpc does now correctly exercise all (5) of the available status signals and all (6) control signals. This allows proper operation of some specific parallel port security key devices ("dongles") and some parallel port communications packages. Devices making full bidirectional use of the data lines, such as scanners, are not supported. Depending on the method used to access the parallel port, printing and other functions may be substantially slower than on a real PC. Many DOS programs use an inefficient but safe method to access the parallel port. This method provides adequate performance on a PC but causes a great deal of emulation overhead under CTOS/Vpc. On EISA/ISA platforms, CTOS does not support CTOS/Vpc usage of any parallel port (LPT1) address other than hexidecimal 3BC. 6.2.12 Printing When using an Epson printer, pin 14 on the CPU side of the parallel printer cable must be tied to pin 1 on the printer side of the cable. Pin 14 on the printer side should be open. (These are the same pin assignments as the parallel printer cable for the XE530.) If these rules are not followed, multiple line feeds may result. CTOS prints an extra linefeed (LF) with certain printers (mainly on dot-matrix printers). These printers interpret the carriage return (CR) as CR and LF, which follows by a normal LF character, resulting in an extra LF in the printout. This is due to the printer design and not related to CTOS/Vpc. However, CTOS/Vpc does provide a workaround. The extra LF can be eliminated by using MSDOS Read to copy the file to CTOS ("Map CR/LF to new line?" = yes), and printing the file from there. For local printing, the performance will be greatly improved if you use direct printing from CTOS/Vpc instead of printing via GPS with local installation. On non-EISA/ISA platforms (such as B38, B39, SG5000, etc.), CTOS/Vpc is unable to accurately report the printer "Out of Paper" status. Instead, it returns an "Off-line" status. If you have a small notebook printer that holds single sheets of paper, use GPS spooled printing with standalone installation rather than printing directly to the LPT port. 6.2.13 Keyboard Keyclick Keyclick is not supported on any of the keyboards. 6.2.14 One Millisecond Timer PC ATcompatible hardware provides a one millisecond clock which uses the realtime clock chip. CTOS/Vpc does not currently support this feature. This can affect the BIOS Delay function, and is known to cause strange results on several DOS benchmark programs. At this time, there is no application software which is known to be affected by the lack of this feature. 6.2.15 Reading Count Registers of the 8254 Timer Chip CTOS/Vpc allows programs to read the count registers of its virtual 8254 Timer. However, the CTOS/Vpc emulation does not always accurately reflect the amount of time that has passed since the previous read of the counter. This causes bogus results with some benchmark programs and is known to affect XTalk For Windows version 2.0.0B. 6.2.16 Older 80386 Processors As documented in the Intel Stepping Information for the 80386 processor, some very early versions of the processor used in old B38 modules produce erroneous addressing when paging is enabled. Running CTOS/Vpc on these older (circa '85-'86) processors may produce sporadic failures. 6.2.17 Math Coprocessor Support Under CTOS/Vpc, if a DOS application causes a coprocessor error fault (Fault 10h), CTOS does not always handle the fault correctly and causes CTOS/Vpc to exit with erc 15801. This situation only happens with a system that has a 80x87 coprocessor that the DOS application tries to use and generates floating-point error. 6.2.18 DMA CTOS/Vpc only supports reads to DMA port 81H and writes to DMA ports 04H, 05H, 0CH, and 81H. This affects backup programs such as PC Tools and Fastback. 6.2.19 Rotating Priorities DOS programs that attempt to use the rotating priorities feature of the 8259 do not function under CTOS/Vpc. This includes DESQview. 6.3 Operating System Limitations 6.3.1 Interrupt-Servicing and System Loading Vpc performance is affected by CTOS use of system services that may occupy large percentage of processor time, consequently applications under CTOS/Vpc may run more slowly if many CTOS services are installed on the workstation. In general, programs requiring fast interrupt response and interaction may not work properly. This may be particularly apparent where communications programs cannot keep up with the data rate. Use of data compression on the modem (MNP5 etc.) may cause data to be delivered to the UART at a rate faster than CTOS/Vpc can handle it and faster than the user realizes. 6.3.2 CTOS Debugger and DPMI Compliance CTOS/Vpc uses the CTOS debugger to implement breakpoints for DPMI programs. Programs that depend on DPMI breakpoints may not work properly unless a CTOS III debugger is installed on the system. 6.3.3 ERC 1603 on EISA/ISA Platforms Under some conditions on EISA/ISA platforms, CTOS III will require an additional parameter to be placed in the CTOS config.sys file to avoid a CTOS/Vpc failure with ERC = 1603. The parameter entry is :cParSpecHeap: nnn where nnn is an integer up to 4096. After making any required change, the system needs to be rebooted for the change to take effect. Versions of CTOS III less than 1.1 will require the new entry in order to run even 1 copy of CTOS/Vpc. The value nnn should be set to 128 plus an additional 568 for each copy of CTOS/Vpc to be run. For example, a value of 696 would allow 1 copy of CTOS/Vpc to run. Starting with version 1.1 (and greater) of CTOS III, the default system value for cParSpecHeap will allow 1 copy of CTOS/Vpc to be run without having to add the entry. If multiple copies of CTOS/Vpc will be run on the same workstation, the entry would have to be added according to the formula described above. For example, running 2 copies of CTOS/Vpc would require the value of nnn to be 1264. 6.3.4 Native Video Usage Under DOS Native video support under DOS is limited to operating modes supported by CTOS III 1.1, VAM 4.2, and Context Manager II 5.0. 6.3.5 Native Speaker Usage on EISA/ISA platforms Software that tries to synthesize speech or other sounds by programming the timer to a period of less than 750 usec will not produce the desired results under CTOS/Vpc. Such close timing cannot be provided in the multitasking CTOS environment. Most software that plays simple musical selections will work properly Some programs use/  Timer channel 2 for timing purposes other than speaker operation. Since CTOS allows background processes to beep, a beep may occur at an inopportune moment and foul up the timing process of the foreground application. One solution is to provide the :NoBeep:Yes parameter in the CTOS Config.sys file to prevent any CTOS beeps whatsoever. 6.3.6 Context Manager II 5.0 Cut and Paste Using Context Manager II 5.0 Cut and Paste to transfer data to CTOS/Vpc will lose all the Carriage Return Markers and may cause data loss if the application cannot hold all the characters in one line. 6.3.7 Busy Loops and Background Processes When running DOS in virtual 8086 mode, the impact of the CTOS/Vpc context on other contexts is determined largely by priorities. CTOS/Vpc contains three processes with default priorities of 127, 128, and 129 (Decimal). DOS and DOS programs execute in the process with the priority 129. CTOS programs of less priority will not run if the DOS process is executing a busy wait loop. This is a problem when GPS is installed on the same system on which CTOS/Vpc is running. The default priorities of GPS drivers are low and can cause a conflict when printing. CTOS/Vpc release R2.0.0 addresses this problem in four ways. (1) COMMAND.COM is a DOS program which executes a busy wait loop at the "C>" prompt. When CTOS/Vpc senses this condition, it inserts WAITS that allow CTOS programs of lower priority to run. (2) Windows 3.1 executes a loop much like Command.com when Windows is idle. CTOS/Vpc detects this condition and inserts WAITS that allow CTOS programs of lower priority to run. Note, however, that some Windows applications never inform Windows that they are idle (for example, the Notepad and Write applets). Such programs prevent CTOS/Vpc from allowing CTOS background applications to run. (3) The CTOS/Vpc Configuration option PcPriority permits the user to change the priority of the PC Process to a priority that does not interfere with other CTOS processes such as GPS. (4) The newly added CTOS/Vpc Configuration parameter SleepOnIdle permits the user to vary the type and amount of waiting that CTOS/Vpc does, almost like setting a speed control. The four settings for the parameter are: None: CTOS/Vpc never performs the standard idle-waiting described in items 1 & 2 above. Some: CTOS/Vpc performs the standard idle-waiting described in items 1 & 2 above (same performance as previous version of CTOS/Vpc). More: in addition to the standard idle-waiting, CTOS/Vpc will wait briefly at every fourth DOS timer tick (INT 1Ch). Most: in addition to the standard idle-waiting, CTOS/Vpc will wait briefly at every other DOS timer tick (INT 1Ch). 6.3.8 Formatting a CTOS Disk with a DOS Partition Partitions created for DOS using Standard Software R12.3.0 Format Disk or Configure Disk may not allow you to Install or Upgrade DOS. If you have yet to install Standard Software make sure to set [Suppress format of medium?] to Yes or see your current Standard Software SRA to see if this problem has been fixed. If you have already installed Standard Software R12.3.0 you can find out if your partition is correct by running Disk Partition Display Details on the disk in question. If the Size in sectors is larger than your total disk then you will need to reformat the disk before you can Install or Upgrade DOS. You can do this with Standard Software R12.3.0 Format Disk or Configure Disk by setting [Suppress format of medium?] to Yes. 6.4 User Interface Limitations 6.4.1 UserNamePc.sys The UserNamePc.sys file must contain all of the entries that are included in the default UserNamePc.sys file. The entries can be changed, but they must be there. For example, the graphics adapter entry can be changed to EGA, but :GraphicsAdapter: must be in the file. If any of the entries are missing, CTOS/Vpc will return an error 1 when invoked. CTOS/Vpc does not ignore whitespace (such as tabs) in the configuration file. Therefore, the presence of tabs or other whitespace is likely to result in an error. Furthermore, multiple entries of the same parameter in the Pc.sys file are not detected. Only the first instance is used, with any subsequent entries being ignored. 6.4.2 Size PSV Utility The allowed range of values for the Size PSV command is from 1 Mb to 127 Mbytes. If the value given when creating the pseudovolume is in the range 1 Mb to 30 Mb, the pseudovolume cannot be resized later to more than 30 Mb. If the initial value given is in the 31 Mb to 127 Mb range, the pseudovolume can subsequently be set to any size less than 127 Mb. 6.5 Driver Limitations 6.5.1 Native Video Support on EISA/ISA CTOS/Vpc supports native video on EISA/ISA workstations using drivers that are produced and provided by the hardware vendor. The only native drivers provided with CTOS/Vpc are those for the ATI chip hardware currently in the SG4000, SG6000, and SG7000. Any native drivers used must be for standard mode Windows 3.1. Windows 3.0 drivers are not supported. Enhanced mode (virtual) drivers are not supported. Some non-conforming, high-resolution native drivers do not allow proper context switching. The problem may be overcome in the future by the use of a GDI Enable utility to make the necessary link between Windows and CTOS/Vpc. 6.5.2 French Keyboard Driver Under CTOS/Vpc, if you enter the KEYB FR command and then run DOSSHELL, the pipe (|) symbol will not display. This behavior also occurs on some real PCs running DOS. 6.5.3 Foreign Keyboard Drivers Delays in processing can occur in programs that load their own keyboard drivers. This is due to execution of excessive I/O instructions to determine keyboard type. The only known program that does this is Windows which CTOS/Vpc detects and handles. Therefore, this should not be a problem. 6.5.4 Windows 84-Key Keyboard Driver The Windows 84-key keyboard driver is not supported, and may cause improper operation of the GO and other keys on CTOS keyboards. 6.6 DOS Limitations CTOS/Vpc only supports standard versions of DOS distributed by either Unisys or Microsoft. CTOS/Vpc does not support the DOS HIMEM.SYS XMS driver for extended memory. CTOS/Vpc has its own HIMEM.SYS which is based on Microsoft's XMS specification and provides the same functionality, including UMB (Upper Memory Block) support. The DOSSHELL that comes with NP25-PD6 has been configured with VGA resolution. If you use EGA graphic emulation, after you exit from DOSSHELL, you will have a screen out-of-bound problem because DOS is expecting a higher resolution VGA screen display. To reset the screen, you have to reboot with . When switching contexts using Context Manager II, DOS programs (as opposed to Windows) will not run in the background, nor will they support any native high-resolution modes that are not supported by VAM. 6.6.1 DOS MEM Command The MEM command may not display an accurate amount of extended memory used. The same problem also appears with the native PC using Himem.sys Version 3.07. The MEM command will not display the amount of expanded memory if you set the 'V32' switch of PEMM.exe. 6.6.2 DOS FORMAT Command on Existing PSVs CTOS/Vpc does not fully support reformatting an existing pseudovolume (PSV). The user must specify an unconditional format (/u), or the operation will fail when DOS tries to save the old FAT and Root Directory areas. This also means that CTOS/Vpc does not support unformatting a pseudovolume. 6.6.3 DOS DBLSPACE Disk Compression Utility Before running the DOS DBLSPACE command on a pseudovolume, be sure to first run the CTOS/Vpc Size PSV utility to set the maximum size of the pseudovolume. Trying to run DBLSPACE on an expandable pseudovolume will result in a failure during SCANDISK (part of the setup for DBLSPACE). Furthermore, to avoid exceeding the available File Allocation Blocks, we recommend first backing up your system and running the CTOS Disk Squash utility. 6.6.4 DOS 386MAX Utility under Native Mode The DOS program 386MAX Ver. 7, for use under native DOS only, includes a module that supports ExtraDOS (additional DOS memory in Windows DOS sessions). The drivers for this ExtraDOS functionality are installed at the end of CONFIG.SYS and must remain there. This presents a problem when the same CONFIG.SYS file is used for both native and CTOS/Vpc booting. Using menu techiques, under DOS 6.2, the initial 386MAX drivers may be bypassed but not the EXTRADOSS.MAX module. As a result the execution of the ExtraDOS.max module under CTOS/Vpc results in an error message during execution of CONFIG.SYS, this HAS NO EFFECT on the operation of DOS, CTOS/Vpc or any further DOS operations. 6.7 Windows Limitations 6.7.1 Windows Versions CTOS/Vpc does not support Windows version 3.0. For Windows version 3.1, CTOS/Vpc does not support off-the-shelf Microsoft Windows but requires instead a specially modified version of Windows sold by Unisys for use under CTOS/Vpc. The minor modifications required for the CTOS/Vpc version still allow that version to be run under native mode DOS, without CTOS/Vpc. 6.7.2 Enhanced Mode Windows CTOS/Vpc does not support Enhanced Mode Windows. Some features that / are therefore unavailable are Virtual Device Drivers, multiple DOS boxes, and the Dialog Box that requests confirmation when rebooting (with the Ctrl-Alt-Del key). However, some applications say they require Enhanced Mode Windows when they actually only require extended memory management. Since CTOS/Vpc provides this as a DPMI host, such applications typically run fine on CTOS/Vpc. 6.7.3 Mouse Driver During Windows Installation If you load the mouse driver into upper memory with the line "DeviceHigh=C:\DOS\CMOUSE.SYS" in your CONFIG.SYS file, the installation of Windows will fail. After successfully installing Windows, loading the mouse driver into upper memory does not cause any problems. 6.7.4 Windows 3.1 DOS Box An application running in the DOS Box under Windows will not execute while switched to the background, similar to any DOS program not running under Windows. CTOS/Vpc provides the same functionality in the Windows Standard Mode DOS Box as on a real PC. This means that DPMI client programs cannot run in the Windows DOS Box under CTOS/Vpc. Instead, you must run DPMI client programs (such as Lotus 1-2-3 version 3.1) from the CTOS/Vpc DOS prompt, not from within Windows. 6.7.5 Windows Enhanced Mode and the /s Option CTOS/Vpc does not support Windows Enhanced mode. However, the improved memory management under version R2.0.0 of CTOS/Vpc may cause Windows to find enough memory to automatically try running under enhanced mode, even on systems that did not have this problem previously. Under such cases, Windows must now specifically be invoked with the /s option: win /s to force Standard Mode operation. 6.8 Application Limitations 6.8.1 Phar Lap 386|DOS Extender Support Programs built with the Phar Lap 386|DOS Extender require at least version 4.0 of the Extender. Even under those circumstances, remapping of linear addresses is not supported. 6.8.2 VCPI Applications CTOS/Vpc does not support the VCPI (Virtual Control Program Interface) Specification. Instead, it supports the DPMI specification which is a more advanced and widely-used protected-mode interface. 6.8.3 Turbo Debugger Ctl-Alt-Sysreq Using Ctrl-Alt-Sysreq under Borland Turbo Debugger to break into a program will crash CTOS/Vpc. This break feature of Turbo Debugger is not supported. 6.8.4 Lotus 1-2-3 Version 3.1 Since Lotus 1-2-3 Version. 3.1 is a DPMI-compliant program, it will run under CTOS/Vpc DOS prompt with DPMIHOST.COM installed. As stated earlier in this document, this is a similar environment as running it under Windows Enhanced Mode DOS Box in a regular PC. Therefore, Lotus uses only the DPMI memory and it requires a minimum of 1.5M bytes of DPMI memory to be able to run under CTOS/Vpc. 6.8.5 Word Perfect Version 5.1 Under CTOS/Vpc 2.0, if you use expanded memory with WordPerfect Version 5.1, you need to add the 'V32' switch to the PEMM.EXE program. 6.8.6 XTree for Windows Disk Logging When logging disks larger than 31 Mbytes, Xtree for Windows may encounter a file error and display a Windows dialog box with the options of retrying or cancelling. To recover, the user must cancel and then turn off the Speed Logging feature as follows: select the Options menu, then select Set Options, then remove the checkmark from the Enable Speed Logging box (by pressing spacebar when selected), then select OK, then select Options menu (again), then select Save Configuration Now. 6.8.7 DBASE IV Version 1.5 CTOS/Vpc does not support the hyperdisk cache program that comes with DBASE IV 1.5. However, the newer version of DBASE IV R2.0.0 works well with the DPMI support provided by CTOS/Vpc. 6.8.8 MS Visual C++ CTOS/Vpc does not support Microsoft Visual C++, since the product uses virtual device drivers, which are not supported by CTOS/Vpc. 6.8.9 MSBackup Certain limitations exist using MSBackUp provided with DOS 6.2 when backing up to floppy disk media. Due to the emulation of the low level interface to the floppy disk controller in VPC special care must be taken when operating MSBackUp in this mode. When MSBackUp is started it will try to interface to the floppy disk hardware to calibrate how fast it can operate. This will fail under VPC and the user should configure MSBackUp with the "Floppy Not Installed" option. In the "Backup To:" option in the backup menu select "MS-DOS Drive and Path", then fill in the line with the letter of the floppy drive you will be backing up to, e.g. "A:\". Make sure there is a floppy disk in the drive and start the backup. Section 7 Additional Product Information 7.1 Memory Usage 7.1.1 Extended, Expanded, and DPMI Memory A real PC has three types of memory, as far as most programs are concerned: Realmode memory, Expanded memory, and Extended memory. Realmode memory is the bottom 1 Megabyte of PC memory, which can be used by regular DOS programs. This bottom megabyte includes the Upper Memory Blocks (UMBs), memory above 640K which is accessible to DOS programs. Expanded memory is generally provided by special addon boards. It was originally conceived as a way to provide access to more memory on PC and PCXT machines. On many modern PC's, memory management software allows Extended memory to look like Expanded memory for those programs that still use Expanded memory. Extended memory is the memory in a PC that is greater than 1 Megabyte. For example, a PC with 4 Megabytes of memory is usually configured to have 1 Megabyte of Realmode memory and 3 Megabytes of Extended memory. On a real PC, programs such as Microsoft Windows switch the processor to protected mode and execute directly in Extended memory. 7.1.2 CTOS/Vpc Memory Emulation CTOS/Vpc emulates both Realmode and Expanded memory almost exactly the way they appear in a real PC. It allocates 1 Megabyte of memory for DOS programs, and provides UMB areas as well. Expanded memory under CTOS/Vpc appears to DOS as a separate addin memory board (as described above). CTOS/Vpc does not emulate Expanded memory the way 386 PC memory managers do. In CTOS/Vpc, Extended memory behaves somewhat differently than on a real PC. CTOS/Vpc emulates the two most common uses for Extended memory, which are eXtended Memory Specification (XMS) memory and DPMI memory, but it does not emulate the actual presence of memory chips in a PC. In other words, programs that access Extended memory in a clean way can use it, but those that depend on the physical nature of Extended memory addressing in a real PC will fail. When you specify a value in the :ExtendedMemory: section of the PC.sys file, you are setting the maximum amount of XMS memory that may be allocated. This memory is used for the storage of data by programs which use the HIMEM.SYS XMS driver. Such programs include many disk caching programs, and a fair number of DOS applications. This memory is NOT used by DPMIcompliant programs. Any memory left over in CTOS/Vpc's partition after it has allocated its Realmode, Expanded, and Extended memory is used as DPMI memory. This memory is available to programs that comply with the DOS Protected Mode Interface (DPMI) specification developed by IBM, Intel, Microsoft and UNISYS, among others. Programs like Windows 3.1 and Lotus 123 v3.1 comply with the DPMI specification. These programs can actually run in protected mode under CTOS/Vpc. 7.1.3 Determining Application Memory Requirements A common point of confusion for CTOS/Vpc users is that application programs specify a required amount of Extended memory. This refers to the recommended amount of physical memory in a real PC. These programs rarely specify whether they use the memory as Extended memory or as DPMI memory, since both methods access the same physical memory in a PC. In general, if a program acts as a DPMI client it will say so somewhere in its documentation. Such programs do not use memory set aside by the :ExtendedMemory: section of the PC.sys file. If a program's documentation talks about Extended memory without mentioning DPMI, it probably uses XMS memory and not DPMI memory. Such programs DO use the memory set aside in the :ExtendedMemory: section of the PC.sys file. Often, the simplest method to determine which type of memory an application needs is trial and error. If you have a program that claims to use Extended memory but you aren't sure whether or not it uses DPMI, you can try the following procedure. 1. Start CTOS/Vpc in a very large (>4 Meg) partition with both :ExtendedMemory: and :ExpandedMemory: set to 00K This maximizes the amount of DPMI memory available under CTOS/Vpc. If the program runs, it is a DPMI client. If it claims insufficient Extended memory, it probably uses XMS memory. 2. Change the PC.sys file to specify a large number in the :ExtendedMemory: section. If the program runs, it uses XMS memory, not DPMI. 3. If the program still claims insufficient memory, it may be trying to access Extended memory directly. Few programs do this anymore, so it might be worth calling the application vendor or looking in the troubleshooting section of their documentation at this point. 7.2 Instructions for Clustershare Users Clustershare and LANce/pc users may need to execute t0 he DOS command SETVER with the proper version code of REDIR.EXE before invoking REDIR.EXE. 7.3 Configuring DOS 6.2 for Dual-booting A new menu feature in DOS 6.2 simplifies the required configuration changes between the native DOS environment and the hosted CTOS/Vpc environment. The feature enables selective execution of both the CONFIG.SYS and AUTOEXEC.BAT files. For example: CONFIG.SYS [menu] menuitem=Vpc menuitem=Native [common] entries for both environments [Native] device=c:\windows\himem.sys [Vpc] device=c:\vpc\himem.sys [common] more entries for both environments AUTOEXEC.BAT entries for both environments goto %config% :Native prompt NATIVE $p$g goto Continue :Vpc prompt VPC $p$g c:\vpc\dpmihost.com goto Continue :Continue more entries for both environments In the examples above, the special CTOS/Vpc drivers HIMEM.SYS and DPMIHOST.COM are accessed in the default \vpc directory where they are placed during installation. The two PROMPT commands in the AUTOEXEC.BAT file are used to easily distinguish between the two environments whenever the DOS prompt is visible. 7.4 Instructions for Windows Users In order to use Windows 3.1 with CTOS/Vpc 2.0, you must first optimize your CTOS/Vpc and DOS configurations. The optimization necessary is specified in Installing Windows 3.1 in the Installation Procedure section. If you are upgrading from Windows 3.0, you must not use any of the Unisys display drivers that shipped with CTOS/Vpc 1.0 (those with any mention of GC-04). These are real mode drivers only, and will not work with Windows 3.1. Follow the steps for upgrading as directed in Installing Windows 3.1 in the Installation Procedure section. 7.5 Representative Applications Tested The following representative applications were tested with CTOS/Vpc R2.0.0: Windows Applications: Ami Pro v3.0 Adobe Type Manager v2.0 Art/IM v2.1 CorelDraw v1.1/v4.0 CrossTalk/Windows v1.1/v2.0 DBase IV v1.5/v2.0 Designer Workbench v2R1 Entertainment Pack/Win v1.0 Harvard Graphics for Windows v1.0.1 INFOConnect BMulti Access v1.0 INFOConnect TCP/IP Access v1.0 Intermission v2.0 LINC Design Assistant III v1.0 Lotus Freelance Graphics v1.0 Lotus Organizer/Win v1.0 Norton Desktop/Win v2.0 MS Access v1.0 MS Office v4.0 MS Works v2.0 PageMaker v4.0 Paradox for Windows v4.5 PC Paintbrush v3.1 PowerPoint v2.0/v3.0 Quattro Pro for Windows v1.0/5.0 Ventura Publisher v3.0 Word for Windows v2.0/v6.0 Word Perfect for Windows v5.2 MS-DOS Applications: AutoCad v10.0 Borland C++ v3.1 Calendar Creator Plus v4.0 CrossTalk XVI v3.61 Harvard Graphics v1.0/v3.0 HP Explorer v1.0 Laplink v5.0 Lotus 1-2-3 v3.4 MathCad v3.0 MS C v6.0 MS Flight Simulator v4.0 MS Word v5.0/v5.5 Norton Utilities v5.0 Paradox v3.5 PC Tools Delux v7.1 ProComm Plus v2.1 QA Plus v4.2 Quicken v3.0 Time Line v4.0 Word Perfect v5.0/v6.0 XTree Pro Gold v2.0 Section 8 Installation Notes 8.1 Overview CTOS/Vpc should only be used on CTOS workstations that are equipped with a hard disk or on diskless workstations where a hard disk is available on the server. The complete installation procedure is described in the CTOS/Vpc User's Guide. For details on using the Executive and its commands, see the CTOS Executive User's Guide and the CTOS Executive Reference Manual. If you have never installed any software before, it is recommended that you read the section entitled, "Installing Applications", in the CTOS System Administration Guide before you begin. The average user is advised to avoid the Verbose option during installation. Using the installation manager with a low resolution monitor, you may encounter a portion of the script being overwritten by the dialog box. The dialog box will be self explanatory, and you should proceed as instructed. 8.2 Types of Systems CTOS/Vpc may be installed on two types of systems:  Stand-alone and cluster workstations with hard disks  Server hard disk systems 8.3 Required Files The following is a list of files required to use CTOS/Vpc. The files are installed automatically for you when you use the installation procedure. The files required to run CTOS/Vpc must reside on the [Sys] directory.  Vpc.run  Vpcmsg.bin  VpcChar.font  VpcLowRes.font  VpcHighRes.font  VpcNlsKbd.sys  NGENVGABIOS  PCATROMBIOS The files required to use SIZE PSV command must reside on the [Sys] directory.  SizePsv.run  SizePsvMsg.bin 8.4 Default Conditions The CTOS/Vpc installation procedure makes several assumptions, including: - The installation is private - The installation is for a particular user name - A previous installation of CTOS/Vpc for that user will already have a UserNamepc.sys file. - A \VPC directory exists on the target bootable :DriveC: (either pseudovolume or native disk partition). The installation package includes an empty default pseudovolume named Vpc.psv. This pseudovolume is renamed to UserName.psv if a new pseudovolume is being installed. When using a native disk partition or an existing pseudovolume, the default pseudovolume file will remain on the system as-is, for optional subsequent use. If you have previously installed PC Emulator or CTOS/Vpc on your system, this installation will not update your configuration file (with the default of UserNamepc.sys, where UserName is your login user name. The installation of CTOS/Vpc includes the installation of the Unisys DOS Files. The following files will be installed into the \VPC directory on the target DriveC (pseudovolume or native partion): AUTOEXEC.PCE Sample CDROM autoexec.bat file CDDRIVER.EXE Necessary for access to a CDROM drive CDR.EXE Necessary for access to a CDROM drive CMOUSE.COM UNISYS mouse support program CMOUSE.DRV UNISYS mouse drivers for Windows CMOUSE.SYS UNISYS mouse device driver for DOS COMM.DRV Windows communication driver CONFID$$.SET File used by Winstall.bat CONFID$$.SLT File used by Winstall.bat CONFIG.SMP Sample CDROM config.sys file CTOSAPI.DLL CTOS application interface CTOSRQ.DLL CTOS request interface DPMIHOST.COM Loaded for DPMI-compliant applications GETBATXT.COM File used by Winstall.bat HIMEM.SYS XMS device driver INSTATI1.BAT Installation batch file for ATI drivers PEMM.EXE EMS 4.0 device driver README Information for Winstall.bat READATI1.TXT Information for ATI drivers RS485EM.EXE Connection to the CTOS environment UCOMM.Drv Windows communication driver W31XL24.EXE Compressed file containing the ATI drivers WINSTALL.BAT Copies files to your windows directory Note: The DOS Drivers that come with CTOS/Vpc R2.0.0 will supersede any other DOS Drivers you obtained from other packages, including NP25-PD6. If the ATI Windows drivers are also desired (for SG4000/6000/7000), they may be seperately installed from the "DOS files" diskette using Installation Manager. When the "DOS files" diskette is seperately installed, the user is offered the option of copying the ATI driver files. They must then be further installed from within CTOS/Vpc by following the READATI1.TXT and INSTATI1.bat files in the C:\VPC directory. After a new installation, the user will find a "Non-system disk" message upon booting CTOS/Vpc. The user must at this point install DOS 6.2 as described in the User Guide. If this message occurs on an existing installation, it may indicate that the DriveC specification has been set to a non-bootable target, in which case installing DOS would endanger any existing data. 8.5 Installing Windows 3.1 Note: Only the version of Windows distributed by Unisys for CTOS/Vpc will work under CTOS/Vpc 8.5.1 Optimizing Your CTOS/Vpc And DOS Environments Before performing the actual Windows installation, you must first optimize your CTOS/Vpc and DOS configurations. On the CTOS/Vpc side, this may mean editing your PC.SYS configuration file, and for DOS it means editing your CONFIG.SYS and AUTOEXEC.BAT files. Windows Setup will try, unsuccessfully, to install its own mouse driver if there is not already one installed. To avoid this you must have the CTOS Mouse Service installed before starting CTOS/Vpc. This allows the Unisys DOS driver CMOUSE.SYS to be installed before running Windows Setup. The Windows mouse driver will work properly if used with a Microsoft DOS mouse driver for DOS programs, otherwise, the mouse may not function when running DOS after running Windows. To run Windows effectively, CTOS/Vpc requires a partition size of at least 2.5 Megabytes. It is also recommended that you use some type of disk caching, either CTOS Disk Caching or some disk caching utility within the DOS environment, such as SMARTDRV. The CTOS caching will benefit other CTOS applications as well as CTOS/Vpc. The SMARTDRV caching may be applied to the floppy drives. Refer to the User Guide for specifics on these topics. Windows requires that DOS be loaded into extended memory. This is accommodated by correct configuration at both the CTOS and DOS levels. The CTOS requirement consists of having the following default line in your PC.SYS file: :ExtendedMemory:64K This allows DOS to be loaded high, but doesn't waste extra extended memory that Windows won't be able to use. Note that Windows uses DPMI memory only. It does not use0  extended memory. If not using Windows, the default setting may be changed to 0K, or to a value appropriate for any other DOS software using extended memory. Windows requires a graphics display mode. Depending on your hardware configuration, you have to specify either EGA or VGA graphics in your PC.SYS file as below: :GraphicsAdapter:EGA or :GraphicsAdapter:VGA The default setting is VGA. After confirming the configuration of your CTOS environment, start a CTOS/Vpc session and modify the DOS environment as described below. You may use the Unisys mouse driver, CMOUSE, provided with CTOS/Vpc in order to use a mouse within Windows. You may instead choose to use the mouse drivers provided with your hardware. You will need to complete the changes necessary to load DOS into the High Memory Area (HMA). Enable DOS to use the Unisys mouse driver, and be loaded into extended memory by adding the following lines to your CONFIG.SYS file: DEVICE = C:\VPC\CMOUSE.SYS DEVICE = C:\VPC\HIMEM.SYS DOS = HIGH,UMB If you specify the UMB parameter in the DOS=HIGH command, this will allow you to load drivers and TSR (memory resident) programs into the Upper Memory Block (UMB). You are urged to load drivers and TSR programs into "upper" memory since it will free up your valuable conventional memory. UMB's under CTOS/Vpc function normally as described in the DOS 6.2 documentation. The other change you need to make to your DOS environment is to automatically run the DPMI server when DOS is started. Add the following line to your AUTOEXEC.BAT file: C:\VPC\DPMIHOST.COM This completes the changes required to run Windows under CTOS/Vpc. In order for the changes to take effect, you need to do a soft reboot of the DOS environment . 8.5.2 Installing Windows 3.1 For The First Time After configuring CTOS/Vpc and DOS as outlined in the previous section, install Windows 3.1 as described in the Windows documentation. When you run Windows Setup, it will automatically detect that you are using CTOS/Vpc and will set its defaults appropriately. Whenever Windows is installed or re-installed, the batch file WINSTALL.BAT in the \VPC directory must then be run to complete the installation. 8.5.3 Upgrading From A Previous Version Of Windows When you upgrade from Windows 3.0, Windows 3.1 preserves your configuration and any custom drivers you have previously installed. This is not a problem for the mouse driver, CMOUSE.DRV, which has not changed. However, it is a problem if you were using one of the display drivers that shipped with CTOS/Vpc 1.0. These are real mode drivers only and will not work with Windows 3.1. There are additional components of a first time installation that are not updated automatically. FOLLOW THESE INSTRUCTIONS VERY CAREFULLY TO CORRECTLY UPGRADE YOUR WINDOWS INSTALLATION!!! The upgrade can only be done properly by choosing Custom Setup from the first set of options. Windows Setup displays a list of your current configuration, and asks if you want to change any item on the list. You must manually reselect the entries for computer, display, and mouse types, even if the information displayed is correct. Use the arrow keys to perform the manual reselection as outlined below: 8.5.3.1. Select the computer type entry of the displayed configuration and press ENTER to scroll through the available alternatives. Position the cursor on "Unisys CTOS/Vpc" and press ENTER to use this selection. If you don't select this option, all of the required files of the new Windows installation will not be copied to your hard disk. 8.5.3.2. Select the display type entry of the displayed configuration and press enter to scroll through the available alternatives. Position the cursor on "VGA" and press ENTER to use this selection. Refer to the section below for information on the use of Unisys display drivers for Windows 3.1. Do not select any of the Unisys display drivers that shipped with CTOS/Vpc 1.0 (those with any mention of GC-04). These are real mode drivers only, and do not work with Windows 3.1. They are still shown as valid choices because Windows maintains all previously installed drivers when an upgrade is being performed. 8.5.3.3. Select the mouse type entry of the displayed configuration and press ENTER to scroll through the available alternatives. Position the cursor on "Unisys Mouse Driver" and press ENTER to use this selection. 8.5.3.4. With the cursor on "no changes", press ENTER to start the installation. The Windows installation proceeds normally from this point. 8.5.4 Windows 3.1 And Non-Native Unisys Display Drivers The following information about the use of the Unisys Windows 3.1 display drivers only applies to classic, non-native CTOS video (CTOS workstations with the GC-004 or equivalent, and EISA/ISA machines with the CTOS VideoCard instaalled. CTOS/Vpc R2.0.0 is shipped with three customized Windows 3.1 display drivers. They are described as below: Unisys 640x480 V1.10 (with GHA) Unisys 1024x768 V1.10  Unisys 1024x768 V1.10 (with GHA) The 640x480 GHA driver provides accelerated performance in standard VGA resolution. The 1024x768 drivers offer increased resolution, with and without GHA support. The acronym GHA refers to a component of the video hardware, the Graphics Hardware Accelerator. VAM version 4.2, a component of CTOS, now provides support for the GHA. Use the high resolution drivers only if your graphics board and monitor support 1024x768 VGA. Windows display drivers will work only if the appropriate video hardware is present. Screen corruption may occur if an unsupported driver is selected. Should this occur, perform a reset of CTOS/Vpc (CtrlAltDel), then reconfigure Windows with a valid display driver. 8.5.5 Common Problems With Windows 3.1 The most common problems encountered with Windows can be attributed to not following the steps outlined above, so these are the first things you should check if you have any problems. Verify that you are running CTOS/Vpc in a large enough partition, and that the CTOS Mouse Service has been installed. Verify that you have enabled either EGA or VGA graphics mode in your PC.SYS file. Verify that you have enabled 64K of extended memory in your PC.SYS file, and that you are using it in your CONFIG.SYS file. Verify that the mouse driver you are specifying in your CONFIG.SYS file is compatible with your Windows mouse driver (same versions from same vendor). Verify that you have started DPMIHOST.COM in your AUTOEXEC.BAT file. And verify that you have installed the Unisys DOS Drivers on your system. If you still cannot run Windows, verify that you have the following lines in your CONFIG.SYS file: Files=30 Buffers=30 If you start Windows and it displays the Logo Screen, but then exits out with a message like "W031V011E:" check the amount of DPMI memory that is available. You can check DPMI memory by pressing ActionM, then selecting Display Current Config. You should have a minimum of 512K of DPMI memory available for Windows to operate properly. More DPMI memory will greatly enhance Windows performance. Note: Depending on the various memory configuration parameters, Windows may try to start in Enhanced Mode which is not supported under CTOS/Vpc. To avoid this problem, start Windows by typing: win /s to force Windows into Standard Mode. If Windows has trouble recognizing mouse double clicks, add the following lines to the [Windows] section of the WIN.INI file in the \WINDOWS directory under DOS: DoubleClickHeight=10 DoubleClickWidth=10 This allows the mouse to jiggle a little and still register two button presses as a double click. See the Windows file WININI.WRI in the \WINDOWS directory for more information about these parameters. 8.5.6 Windows 3.1 for Dual Boot (Native and CTOS/Vpc) The Unisys version of Windows 3.1 that is designed for use with CTOS/Vpc also runs successfully under native DOS. In order to use the Unisys version in both environments, it should be installed under native DOS, rather than under CTOS/Vpc. It may then be used in either case. 8.5.7 Completing the Windows Installation for CTOS/Vpc Whenever Windows is installed or re-installed, the batch file WINSTALL.BAT in the \VPC directory must then be run to complete the installation. Section 9 Support 9.1 Warranty CTOS/Vpc R2.0.0 is a warranted Unisys software product. Unisys warrants that CTOS/Vpc R2.0.0, in its unaltered form, will substantially conform to Unisys current published functional specifications when used in Unisys supported configurations. The customer is responsible for reporting suspected deviations using the User Communication Form (UCF) process within ninety (90) days following delivery. The product is neither field repairable nor field modifiable. Corrections to reported deviations are provided to the user via updated code files. This standard warranty is not a substitute for Unisys Service Agreement offerings. 9.2 Support Category CTOS/Vpc is covered under the CTOS III 1.1 SSP5 support. NP25-PD6 and NP25-WD5 have SSP3 cov1 erage. UP25-WD5 does not have support service available. Customers who upgrade their SB25-PD4 and/or SB25-WD4 by purchasing UP25-WD5 will retain the support they currently have on those products. For instance, If they have SSP3 on the old product, they will continue to have SSP3 on the upgraded product. Customers who currently own SB25-PD4 and SB25-WD4 and want to upgrade to CTOS/Vpc R2.0.0 can upgrade their pseudovolumes to DOS 6.2 by purchasing a retail copy of the DOS 6.2 upgrade package. If they want Windows 3.1, they need to purchase the Unisys UP25-WD5 upgrade package. If you need further assistance or information regarding support services, please contact your Unisys representative or your local Unisys office. 9.3 Support Discontinuance Unisys supports the current release level and one level back. Prior levels are not supported. 9.4 Product Assistance 9.4.1 Instructions Should you encounter a problem with a Unisys product, please contact your local Customer Service Center. Your Customer Service Center representative will have a more definitive set of problem reproduction requirement guidelines specific to the application you are running. So that your questions may be answered in a timely manner, please collect all information which applies to your problem. A guideline for gathering information is listed below. 9.4.2 Environment In order to assist us in determining the nature of your problem, please be prepared to describe the environment in which the problem occurs. 9.4.3 Software Components  If you suspect the problem is software related, be prepared to provide the following information concerning the software being used: 1. The version number of the software in which the problem occurs. 2. The version of the operating system software. 3. Installation parameters used for the failing software. 4. Configuration files used. 5. Other software installed at the time of failure. 6. Recent changes to the system software (for example, updates). 7. Any messages associated with the failure that appear in the system log files (for example, accessed through the Plog command on CTOS systems). 8. The connectivity of the software (is your system part of a network?). 9.4.4 Hardware Components If you suspect the problem is hardware related, be prepared to provide the following information concerning your hardware platform: 1. The type of processor being used. 2. The workstation components (for example, hard drives, communication modules, CDROM drive). 3. Any peripherals attached to the workstation (for example, printers, scanners, modems, plotters). 4. The connectivity of the hardware (is your system part of a network?). 5. Recent changes to the hardware platform. 6. The amount of memory installed. 9.4.5 Circumstances Be prepared to describe the circumstances under which the failure occurs. The description should include: 1. Whether or not the problem is reproducible. 2. The exact steps that are required to reproduce the problem. 3. A description of circumstances under which the problem does not occur.  This section is designed to list the part numbers and style IDs of all documentation customers can order. An example is provided here. Section 10 Customer Product Information 10.1 Required Product Documentation The CTOS Vpc User's Guide is shipped with CTOS/Vpc. You may also additionally need MS-DOS documentation or Windows documentation if you buy those packages. Part Number Manual Name 4361 2050-100 CTOS Vpc User's Guide The CTOS/Vpc User's Guide describes how to to install CTOS/Vpc as well as how to configure both the CTOS and DOS environments for CTOS/Vpc, how to start a CTOS/Vpc session from the various CTOS interfaces (PM, CM, and Exec), and how to work with pseudovolumes and DOS partitions This manual is an update of a previous version. New CTOS/Vpc features are documented, such as improved memory management,native DOS partition support, native VGA BIOS support for EISA/ISA, pass-thru speaker, support for 3rd party mouse drivers, second serial port support, more complete parallel port support, DOS 6.2 support, support for running CTOS/Vpc in background in VGA mode. A section on serial/parallel ports has been added, and the troubleshooting section has been enhanced. This guide is perfect bound and ships with a quick reference card. The guide can be ordered separately as 4357 4672-300 and the reference card can be ordered separately as 4361 2043000. 10.2 Recommended Additional Manuals 4588 7320-000 MSDOS 6.2 User's Reference Manual This reference is the standard MS-DOS manual. It provides installation instructions and describes the features of MS-DOS 6.2. This manual is published in perfect binding. It is shipped with MSDOS 6.2 and is not separately orderable. 4362 2489-000 Windows 3.1 User's Guide and Reference Condensed Version This guide is a condensed version of the standard 3.1 Windows documentation. It provides complete documentation for Windows and is shipped with Windows 3.1. This guide is published in perfect binding and is not separately orderable. 4162 5237-000 LANce/pc and LANce/LM Administration and Programming Guide LANce/pc and LANce/LM Administration and Programming Guide describes how to install and configure the LANce/pc and LANce/LM products in the CTOS and DOS environments. Also provides information for administering the products, using the products, and creating application programs for the product's Netbios application program interface 4371 1969-100 LANce/pc Network Shell Reference Card LANce/pc Network Shell Reference Card provides information helpful to system administrator of the DOS platform running LANce/pc. LANce/pc works with LANce/LM to provide communications between DOS and CTOS platforms. Section 11 List of Files on Product Media 11.1 Contents of the Distribution Diskettes The Product distribution diskettes are your master copy and should be write-protected. The contents of the diskettes cannot be overwritten unless the write-protect tabs are removed. Do not remove or switch these write-protect tabs and do not use these diskettes as your working copy. CTOS/Vpc Service (3.5" diskette): Distribution Diskette 1 of 2 (3.5" diskette) contains the following files in the directory: Vpc.run VpcMsg.bin VpcChar.font VpcLowRes.font VpcHighRes.font NGENVGABIOS PCATROMBIOS VpcNlsKbd.sys SizePsv.run SizePsvMsg.bin DefConfigFilePart1 DefConfigFilePart2 DefConfigFilePart3 VpcAppend.run DosDir.cmd MSWrite.cmd The directory contains: Vpc.psv In addition to various standard system files, the Distribution Diskette 1 of 2 contains the following files in the  directory: Install.Ctrl Install.Jcl Install.Cmds InstallMsg.txt InstallMsg.bin Distribution Diskette 2 of 2 contains the following files in the directory: DOS>Cmouse.com DOS>Cmouse.sys DOS>Cmouse.drv DOS>DpmiHost.com DOS>PEMM.exe DOS>Himem.sys DOS>Rs485em.exe DOS>CDDriver.exe DOS>CDR.exe DOS>Config.smp DOS>Autoexec.pce DOS>ReadMe DOS>Winstall.bat DOS>Confid$$.set DOS>Confid$$.slt DOS>GetBaTxt.com DOS>CTOSRQ.dll DOS>CTOAPI.dll DOS>UCOMM.drv DOS>COMM.drv DOS>InstATI1.bat DOS>ReadATI1.txt DOS>W31XL24.exe DosFiles.fls ATIFiles.fls MSWrite.cmd In addition to various standard system files, the Distribution Diskette 2 of 2 contains the following files in the directory: CTOS/Vpc DOS File Diskette Install.Jcl Install.Ctrl Install.Cmds InstallMsg.txt InstallMsg.bin The directory contains: SRA.txt CTOS/Vpc Service (5.25" diskettes): Distribution Diskette 1 of 4 (5.25" diskette) contains the following files in the directory: Vpc.run VpcMsg.bin VpcNlsKbd.sys DosDir.cmd MSWrite.cmd In addition to various standard system files, the Distribution Diskette contains the following files in the directory: Install.Ctrl Install.Jcl Install.Cmds InstallMsg.txt InstallMsg.bin Distribution Diskette 2 of 4 contains the following files in the directory: VpcChar.font VpcLowRes.font VpcHighRes.font NGENVGABIOS PCATROMBIOS SizePsv.run SizePsvMsg.bin DefConfigFilePart1 DefConfigFilePart2 DefConfigFilePart3 VpcAppend.run The directory contains: Vpc Diskette 2 Distribution Diskette 3 of 4 contains the following files in the directory: Vpc.psv The directory contains: Vpc Diskette 3 Distribution Diskette 4 of 4 contains the following files in the directory: DOS>Cmouse.com DOS>Cmouse.sys DOS>Cmouse.drv DOS>DpmiHost.com DOS>PEMM.exe DOS>Himem.sys DOS>Rs485em.exe DOS>CDDriver.exe DOS>CDR.exe DOS>Config.smp DOS>Autoexec.pce DOS>ReadMe DOS>Winstall.bat DOS>Confid$$.set DOS>Confid$$.slt DOS>GetBaTxt.com DOS>CTOSRQ.dll DOS>CTOAPI.dll DOS>UCOMM.drv DOS>COMM.drv DOS>InstATI1.bat DOS>ReadATI1.txt DOS>W31XL24.exe DosFiles.fls ATIFiles.fls MSWrite.cmd In addition to various standard system files, the Distribution Diskette 4 of 4 contains the following files in the directory: CTOS/Vpc DOS File Diskette Install.Jcl Install.Ctrl Install.Cmds InstallMsg.txt InstallMsg.bin The directory contains: SRA.txt NP25-PD6 CTOS/Vpc Microsoft DOS 6.2 is comprised of five 5.25" DOS format 1.2 MB diskettes, or four 3.5" DOS format 1.44 M bytes diskettes, which contain 1 DOS 6.2. NP25-WD5 CTOS/Vpc Windows 3.1 and UP25-WD5 Windows 3.1 Upgrade is comprised of eight 5.25" DOS format 1.2 MB diskettes, or seven 3.5" DOS format 1.44 M bytes diskettes, which contain Windows 3.1. Note: You cannot use an off-the-shelf version of Windows 3.1 with CTOS/Vpc. You must use the Unisys version. Section 12 Ordering Procedure 12.1 Ordering Software This Software Release Announcement describes the R2.0.0 release of CTOS/Vpc. CTOS/Vpc is delivered on either 51/4 inch or 31/2 inch disks. CTOS/Vpc cannot be ordered seperately. It is shipped as a component of CTOS III 1.1. The table below lists the orderable MSDOS and MS Windows software packages for CTOS/Vpc. If an Update Service Request is attached to your copy of this Software Release Announcement, you can order the software by completing and returning the form. Media provided by Unisys Corporation may not be returned for credit. If no Update Service Request is attached, you can order additional copies of the software by contacting your Unisys representative. Package Description Style ID MSDOS 6.2: Initial singleuser package (software and documentation) NP25-PD6 MSDOS 6.2: Initial per-seat authorization for each additional user (license only) ML25-PD6 MS Windows 3.1: Initial singleuser package (software and documentation) NP25-WD5 MS Windows 3.1: Upgrade for a singleuser package (software and documentation) UP25-WD5 MS Windows 3.1: Upgrade for a classic standalone workstation package (software and documentation) SB25-WD5 Note that there is no package to upgrade a user of MSDOS 5.0 to MSDOS 6.2. This upgrade must be purchased from a retail computer store. 12.2 Ordering Manuals You can order manuals from the following address: Unisys Corporation Publications Distribution Center 13250 Haggerty Road North Plymouth, Michigan 481702 # XXXX XXXX-000 2PF  XXXX XXXX-00 # 4588 9508-000 i i 4588 9508-000 Section Level 1 Level 2 Level 3 Level 4  4588 9508-000 # # 4588 9508-000 #%CLNlm#`Cl]GH@ H E! GH@ EG HBC;! GH%$ &!"8#%@')@*+,#Az[ (E*$ &!#'*+,57I ?[;!E$# @ p PGH@ p x#GHI[,IGH $ &#&'+,!$ &!#'*+,?#GH$[ (,$ &!#'*+,567I ? S`CDn> ? %  ISͺ`G~Cnޤ? I \ O > %BFH$ &#&'*+,>@ @ TDE@ TE@ TGH B0125OPYZqrstwP1PPOsPPPQ H&$%&+TU^_z{|}%QUO|PQQQP6+     H&      !"'=>?DXZ[`~!Q>QZQQOPOH&@ACDG]_`eOCP_QQQ$ &#&'*+,H& !&;=>CQSTYiklo Q=QSQkPQQQ4#""!!   <>?DVXY^suv{Q>QXQuQQQQQ?**))((''&&%%$$# "#)467=QSTZrtu{"Q6QSQtQQQQY21100//..--,,++  !"%DFGLuwx}&()Q!PFQwQQQQ(QWX998877665544332,./4Z\]bڒޖ -.Q\QPQQPQ0/A@@??>>==<<;;::2  "$%*EGHMnpqtQ$QGQpPQQFFEEDDCCBB$ &#&'*+,A+-.3[]^c،ܐ2-Q]QPQQQQ4#NMMLLKKJJIIHHGG 2458RTUZ~ހ  Q4PTQQQQQ Q2UUTTSSRRQQPPOON &().EGHM]_`epr{|(QGQ_QrOPQQ\\[[ZH&ZYYXXWWVV !#$)WYZ]څމ#QYPPPPbbaa``__^^]]   "#&1347JLMPacdg|~O"P3PLPcP~PhggffeeddcH&c$ &#&'*+, 8:;@lnotܥ   DFGLQ:QnQQQ QFQOWoonnmmllkkjjiih   #689<UWX[prsxPP8PWPrQQQvvuuttssrrqqpH&p#9;<AQS\^|}Q;QSOPPOP.-}}||{{zH&zyyxxww-/9;<PQSTXlnos0OSPnP/؈H&$ &#&'*+,~~ HIQRg(*+0ICIHBg(@@@@10HOE+@ O B$ &#&'*+,$ &#&'*+, FGRST| >?@HI`@ ڲ?B`@>"O$ &#&'*+,FH  HH@ZOE+$ &#&'*+,<()*ab&'bcdghil$BCDGR"(T`TTTTTTT%TcLj TTTThDžBTTTbכZ$ &#&'*+,FH OF* @*$ &#&'*+,OE+#./09]am͔ͮ>BNXYab}~ɣ.TTTIXB}Eۿ O O  B$ &#&'*+,$ &#&'*+,FH OF*  Ǐɔ[j}~ՍɒnљѬN$r~ -  ;ÎF@F@@m@@@N@@q@ E-  $ &#&'*+, @ *O$ &#&'*+,H!HFH O@*  FY̋Ȍ׫01@.@F f$ &#&'*+, H@ 0&@ 0&@6@ONR\p08yZ \ݽ6/yY׼g@@*OF*$ &#&'*+, H@ &1$ &#&'*+,  @ &1 Ѡӥ/$%ǟFAIBE@/I&$%$ &#&'*+,OO B$ &#&'*+, O FGH"@ 72 !ѿ%Fۜ9Gۜ !-jwFTۚIB@#@$@89 jF@  U2! H@  U2!H@  U2!HO B$ &#&'*+,BPޝīQ_ޚĨ ]k+sā()1B۝Q]sI(BV:  B$ &#&'*+,@  U2!H@  U2!$ &#&'*+,H'%&!"ƪȭ  /   (!"5 %A!AEF@/A (A5@A  GH$ &#&'*+,FHGHOOO @@E1@iF"@OF!O $ &#&'*+,GHGHOE += GH'-.DEJK}؏@AFGWefglmҁKLQRi%- !: -AAD}A@W@fǀAAKi@@!@@@= @w @ @; e: ('GH&$ &#&'*+,% $HGHOF#6yI Q  @j@@@XM@6uE F @ @  ,@+$ &#&'*+,@$2!*GHOF)$ &#&'*+,  dekl~۸@AGHw  #g@@d~@@@w@@#: 1$ &#&'*+,0/.GHOF-$ &#&'*+,H3ABHM؊ڍެȱ+,12T> '* Yb% . p y   0 3 ? AFM@@EF@@+T@F>AA AAA?  HFH 7$ &#&'*+,65O4GHF3O2@"$ʢƧ(?Ituv{|jkps } : E 9 = F$AF@@u@jF@@@L @ @ 8 t H@ ;HGHF:$ &#&'*+,FHFH 9O8 w{#$)*9>L!3vF@@V@E#9@>@FH FHGHF>O=O<H@ $ &#&'*+, >G}~כܽ89>?VxB}EսAAVA8V@@CBCBAO@H@GHOF?$ &#&'*+, ' $%,-2WX~'ީE@@@@@ F$,FW~ $ &#&'*+,GAFOE@GHOFD$ &#&'*+, -޾[\]byڢP\`mnB-@I@@EF@@\FydB[r H @L$ &#&'*+,KOJHIGH#GHOFH!0<=BW0127`  5F0@<FWA@1F`E F5AF@FA0, TGH SRQOPH,@O$ &#&'*+, NOM ɱRSXxbch~89>M@F@RFx@bF~@8FM@F@@ܯ$ &#&'*+,"YXWVU$ &#&'*+,!GHOFT  +,/=>ChWX]x B+E=Fh@@@@WFx@@@7 @ 6FH $ &#&'*+,$]O\O[G HOZ$ &#&'*+,#-3%6 .2nʔVZʣY`ʉʣީ o 9 \ F3@@S@6@.TVTTE@E @ ] 5ؤ\ FHH @`$ &#&'*+,&O_$ &#&'*+,%FH O^ 89<\ *F\dzԉ@8E\@3@@E΄ H@b$ &#&'*+,(HOa$ &#&'*+,'3 @Ս@BӎVG HOc$ &#&'*+,+$ &#&'*+,*@$ &#&'*+,) H<W` *fgjk|E@@@@<@@fE|ۯE@ J($ &#&'*+,,@ J(f@  P@J(eFH FHG HOdɾ(1د>FT]& ' &7IYgu@E@J@h@@@`@@u@;& U @   @*H$ &#&'*+,-HH FHG HOgFH @  Pɏ+1g'(-./ͦE'F\.Oi@ 0  G HOhHH FH$ &#&'*+,.@J(FH FH% .7߀4 S T r s ۆ u v { Ŧ <.1  N u ɬ= <OFj$ &#&'*+,0FH H$ &#&'*+,/@J(GH5s qrz5r qFH O@ C P A2!=J(RH@J(GHOFk$ &#&'*+,1  not_g#2nh$#GHOFl@J(@ # A2!=J(RO@  A2!=J(R$ &#&'*+,2 )bp+6[)b\[HFH @ 0  FH%@J(GHOFm$ &#&'*+,3֣ۨ'STWi  Ң'ҸBEAAASEi@@@ A η rOqOp &*,5oGHOFn@J($ &#&'*+,48|}̀ԕ֚lmr (   "$ \^ y{   b f  i jl   TV   EA|EFAlFA F(A![xiS ' &*,8A*F*x OG*w &*,7vOutOs &*,6' ̃ ̲ ;<!*mv7@>A^gFAʯ<IBEAVW;ۥ $ &#&'*+,:A HO{Oz B$ &#&'*+,9 OG*2!Oy%4VDSv m !)+KLPxE%WVCDWvw BKEx@@@H~O}$ &#&'*+,;FH @ NA O|f'$ &#&'*+,;67bgI@ > +%$ &#&'*+,;7bgI'߬ϫ@ > +%$ &#&'*+,;7bgI@ > +@ > +$ &#&'*+,;t!@u t$ &#&'*+,<$ &#&'*+,;'$ &#&'*+,;67bgIމ'$ &#&'*+,<67bgI@ > +%$ &#&'*+,<7bgIֆυ@ > 3%$ &#&'*+,<7bgI@ > +$ &#&'*+,<S-KT,SH@ > +$ &#&'*+,<'$ &#&'*+,<67bgI3 %@%@Ӊ@ > +%$ &#&'*+,=7bgI$ &#&'*+,=H@ > +$ &#&'*+,='$ &#&'*+,=67bgIFG'F'$ &#&'*+,=67bgI@ > +%$ &#&'*+,=7bgIUT@ > +%$ &#&'*+,=7bgI@ > +$ &#&'*+,= bXv cWb$ &#&'*+,>I@ > +$ &#&'*+,='$ &#&'*+,=67bgIމ'$ &#&'*+,>67bgI@ > +%$ &#&'*+,>7bgIֆυ@ > 3%$ &#&'*+,>7bgI@ > +$ &#&'*+,>S-KT,SH@ > +$ &#&'*+,>'$ &#&'*+,>67bgI &iw@@@iBO &*,A$ &#&'*+,@FH @ 0  FH%$ &#&'*+,?H E@X@+GH/@  &*,A&*,A567@ &*,A57GH.@  GH-O ĭYZFPʤٮU_@ZEO֭T^Y  &*,B@   GH- &*,A&*,A57@&*,A567@  NGH/  ʲҵ *+5?IS]^mnopqEIȰ@ +O5P?QIRSS^o*]n,,,,,,,^ ,AO2>tP+<Zl>Oc/i5EU?W;S 3.>=/ 8@@HHH BodyText+.BodyText @  sectionhead+- sectionhead>=/ 8@@HHHpage  sectionnumber/Title>=/8  hHHHTitle TitleTCaveat Caveat+hh-head1 @ underline+h-head2 @ head13.list.num @head2 list.num Annotation  bodytext.emph @ Annotation3 Toc.Section3(Toc13 (Toc23(Toc3 @  Title.product3 (Toc4  Toc.SectionPbullet Toc1 Toc2*. StyleId.Head Toc3+ N-Manual Toc4 bullet footer*#X Release.info @ StyleId.Head+h- Contents.head Manual  Manual.Title+.footer/x underline  Release.info @  contents.head0d@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@New Century SchoolbookNew Century SchoolbookNew Century Schoolbook Helvetica8Helvetica NarrowNew Century Schoolbook Helvetica Helvetica%New Century Schoolbook Helvetica Helvetica! Helvetica, Helvetica) Helvetica Helvetica Helvetica Helvetica- Helvetica HelveticaNew Century SchoolbookNew Century SchoolbookTimesNew Century Schoolbook#Times Helvetic4 aNew Century Schoolbook Helvetica Courier Helvetica Helvetica Helvetica[ex[yeeC+en}CCHe:MMe}H}CReeeeeeeeeeCH}jR`x}>R>Cj:eseseH`s:>s:ssssRVCnee`[j:jM>>Cjyd888BCees}neeeeneCCeee0j55}R[nvRm[[:&Vjj::M[:CC`::[[[[[[[[[[[::V}xnM[ss}esH[HH[:``[eV:[e55e5e`eeMM>`V}VRRV:VMHH:[Z444;<```V`[VVVe[M:Vjj0j>>! <!!  ! V  @k            @@[[@%u[@ [u@u[@%[@@@% k      kkk     [}  @ @ u u%[    % {{y%\ !!!<.ccB<<c..c7<.77,G777..I7 0...........000.S77;;72@;)7.D;@7@;72;7M772'...)....)D....).);)))0.,.dd$7.7.@.@2;.)...RI2.OOO2.Rdd<<<&&&&HCvvOHHvCCv!BHCBBC*VBBB!(9CCkW!((/F!C!!CCCCCCCCCC((FFFIuWWWWPI]W!CWIdW]P]WPIWPqPPI(!(FC!CICIC(II!!C!kIIII/C(IC]CC</"/F((!CCCxx!!!+(WCWC]I]IWICCCCxkIC(__^(I<<<((CxxxHHH....NbN]N]]mNNN]]N]N]N]NNNm]mNm]]NNNNe]]]C]]llllyoyydd8nydnnyynnn8;Noo)CCdy8o88oooooooooo88yyyYQo~zCyCyd)ooYsdCkz?;w?zdsoY]Nzkkk`CyCyCC8dyd888BCooddzYdddsoC;YNN)N44oyyyMMMMmdvmmdd2cmdcca?ccc22@ddx(<<Fi2d22dddddddddd22iiidxxxn2Zxdxxnxxxn222Td(ddZdd2dd((Z(dddd<Z2dZZZZ</<i<<2dad222A<xdxddndZdddnd<<n<<"<<<dmmmEEEECTCPrCPP]CCCPPCPCPCPCCC]Px]C]PPCCCCWPPPxx9xPP\\\\ccccd~dd@Pxxdddddmd,TdddPdPPP,xdx^xxxdhhdddxh@xxxxExxxhhh<<<<YpYkYkk|YYYkk8Y .kYkYkYYY|k|Z|kkY@@YYYtk@kkLkk@@@{{{{yoyyoo8nyonnoFnnn8C_oo8CCNu8o88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMMTN\TTNN'MTNMMK1dMMM''2NN|]//6R'N''NNNNNNNNNN''RRRN]]ee]Vme'F]Nuem]me]Ve]]]V'''BNNNFNN'NNFuNNNN/F'NFeFFF/$/R//'NKN'''3/]N]NmNmVeNFNNN|VN/oon/V/////NTTT6666yoyyoo8nyonnkFnnn88Goo,CCNu8o88oooooooooo88uuuoz8dozz888^o,oodoo8oo,,d,ooooCd8oddddC4CuCC8oko888HCooozodooozoCCzCC&CCCoyyyMMMMccccd~dx@dxxdddxx_d,Txdxdxddd@xexxdhhdddxh@xxVxxhhhyoyyoo8nyonnkFnnn88Goo,CCNu8o88oooooooooo88uuuoz8dozz888^o,oodoo8oo,,d,ooooCd8oddddC4CuCC8oko888HCooozodooozoCCzCC&CCCoyyyMMMMyoyyoo8nyonnoFnnn8C_oo8CCNu8o88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMM4 ysyydd9nydnnynnn9;Css0NNdy8d88s]ssssssss88yyydYNyNyd0zosNzJFFzhdUzzzkNyNyCC9dd999BCzzzzossszsC;d``0`CCdyyyMMMMyoyydd8nydnnynnn8CPyo)CCdy8d8yoooooooooo88yyyYQzCyCyd)soYzYCkzC?oCzdsoYYFzhdd]CyCyCC8dd888BCssddzYYYYooCCYNN8NCCdyyyMMMMydyydd2nydnn[Fnnn2CRddCCCdq2d28dddddddddd88qqqYzoCNzoozzC8C^dCYdYdYCdd88d8ddddCN8ddddY`(`lCC2d[d222BCYYdddYYYYddCCYYY$YCCdyyyMMMMxxExEP`>bbxExECEEskbbx>}]]Y]}sb}}bbPPExxEEEOP}}}PPsssEsCCx\\\\xxx<xmT<PbxxPPPx<x<CxxxxxxxxxxCCkP]PCPqxPkxkxkPxxCCxCxxxxP]Cxxxxks0sPP<xmx<<<OPkkxxxkkkkxxPPkkk+kPPx\\\\CTCCU5PP]CCCCCCxCCCq5xC55x5PxCxxxxP>PPPCCCCWPxPPPP.PPP\\\\ysyydd9nydnnynnn9CPys4QQdy9d98ssssssssss99yyy`YQyQyd4zkhNzNJNs~h`QoshhQyQyCC9dd999BCsskhhhssCC```9`88dyyyMMMMyocyyooo8nyonnoFunnn8C_oo8CCNu8C88ooooooooooCCuuuzz8ozzzC8Cuo8ozozoCzz88o8zzzzNoCzooodN8NuCC8ooo888HCoozzzoooozoCCzdd0dCCoyyyMMMMmdYvmmddd2cmdccd?iccc2<Udd2<<Fi2<22dddddddddd<<iiinxn2dnxxnxxxn<2<id2dndnd<nn22d2nnnnFd<ndddZF2Fi<<2ddd222A<ddnnnddddnd<<nZZ+Z<<dmmmEEEE`YxOi``YYY,X`YXXY8]XXX,5LYYt,55>],5,,YYYYYYYYYY55]]]bttttkb|t,Ytbt|k|tkbtkkkb5,5]Y,YbYbY5bb,,Y,bbbb>Y5bY|YYP>->]55,YYY,,,:5tYtY|b|btbYYYYbY5vv5bPP&P55Y```====`YxOi``YYY,X`YXXV8]XXX,,9YYk$55>],5,,YYYYYYYYYY,,]]]Ykkttkb|t,PkYt|k|tkbtkkkb,,,KY$YYPYY,YY$$P$YYYY5P,YPtPPP5*5]55,YVY,,,:5kYkY|Y|btYPYYYbY5vv5b55555Y```==== "(     "b"n Picture 1 B & b  i)`6T  *.`?T trII**j   ZERrjlRZbj"$%(*.? ????(8 ?>p ???? ?!O??!?~!?|?!?|!?!?>!?~?!?~?!?>? !?>???!???p<?>????? ??? ?>?>??>???|?????????????? ????????????????!??!????!???!???.!????!????!?????????!|???>!??????< ( @=?  ,@?PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF PF 5 DH|0H"^ 0L( o%VH0h0hڳ=u &##9dG!( #LTKOB=3.0 \Q78a1cmPTy%++24=CHMRV`eo}|ߍ¦AF;b :"*j18e97::3<<@==>>m?@WBCdCdEJHJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm5 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm6 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm6 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm7 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm7 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm8 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm8 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm9 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm9 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm: mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm: mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm; mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm; mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm< mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm< mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm= mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm= mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm> mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm> mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm? mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm? mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm@ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm@ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmA mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmA mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmB mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmB mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmC mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmC mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmD mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmE mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmE mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmF mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmF mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmG mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmH mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmH mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmI mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmI mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmK mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmK mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmL mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmL mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmM mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmM mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmN mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmN mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmO mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmO