Jump to content

Recommended Posts

Posted

Hello,

im trying to search log-file by using StringRegExp.

The script reads a line in the log-file and if the mask matches the line, the script sends an email. Sending emails works fine. And the other stuff too.

Sometimes the script crashes, I tried to trace it and I think the reason is the StringRegEx function. I see no reason, why the script crashes. It doesnt crash always.

Its really weird. If I just put in a comment line somewhere in the script, it may not crash any more. If I put in another comment line somewhere else it may crash again.

Does anybody have an idea?

I think its helpful for you to see some code.

Here it is.

For  $i = 0 To $maskenanzahl - 1 Step 1
    ;counts the matches
        Local $anzahlTreffer = 0
        Local $file = FileOpen($tempLogDatei, 0)
        If $file == -1 Then
        ;logs the text
            _logge("Fehler beim FileOpen")
        Else
            _logge("Datei geöffnet")
            While 1
                
                Local $line = FileReadLine($file)
                If @error == -1 Then
                    ExitLoop
                ElseIf @error == 1 Then
                    _logge("Fehler bei FileReadLine")
                EndIf

                If StringRegExp($line, $maske[$i], 0, 1) Then
                    $anzahlTreffer = $anzahlTreffer + 1
                ;sends an email
                    _emailSenden($line, $i+1)
                ElseIf @error == 2 Then
                    _logge("Fehler bei RegExp " & @error)
                EndIf

            WEnd
            FileClose($file)
        EndIf
        _logge("Maske" & $i + 1 & " lieferte " & $anzahlTreffer & " Treffer")
    Next
    _logge("Filterung abgeschlossen")

Thanks for helping.

Ben

PS: Some lines are very long (about 1000 chars). Does it have any effect?

Please be gentile I'm still learning

Posted

Where is your pattern? I don't see $maske[$i] anywhere, and that could make all the difference

Regards,Josh

Posted

I'm sorry,

there we go.

Maske1: (.*Daemon\.Critical.*10\.137\.145\.25.*Hardware.*temperature above threshold.*)

Maske2: (.*Overly long line received.*IP=207\.46\.248\.42.*)

Maske3: (.*Access denied.*update\.nai\.com.*Unable to connect.*)

Do you think there is something wrong with the pattern?

Maybe interesting:

Usually the script works,

sometimes it crashes, but not on the first call of StringRegExp.

So long

Ben

Please be gentile I'm still learning

Posted

Not sure if its going to solve any problems, but you should change all of the

.*
to
(?:.*?)

What that does is creates a non-capturing group that finds any number of characters, but stops at the first instance of the next substring.

That way if it says "Hardware" twice in the string, it will stop at the first one and then continue the pattern.

Also, I suggest not using an offset, there is no need for it here.

Is your ElseIf @error == 2 there just for debugging? Or are you using that to see if it couldn't find the pattern?

Regards,Josh

Posted

Hey there,

I replaced the .*

now looks like:

Maske1: ((?:.*?)Daemon\.critical(?:.*?)10\.137\.145\.25(?:.*?)Hardware(?:.*?)temperature above threshold(?:.*?))

Maske2: ((?:.*?)Overly long line received(?:.*?)IP=207\.46\.248\.42(?:.*?))

same problem, didn't help.

StringRegExp($line, $maske[$i], 0, 1) with flag = 0 don't capture anything.

I'm just checking if it matches.

and offset = 1 is default, so it shouldn't have an effect.

With no offset the crash occures too.

Is your ElseIf @error == 2 there just for debugging? Or are you using that to see if it couldn't find the pattern?

yeah it is just for debugging.

@Jos: I'm running the v3.2.12.1

never tried another.

Bye

Ben

Please be gentile I'm still learning

Posted (edited)

Yeah, I didn't necessarily think that would fix the problems, but it will make for cleaner results later.

Can you show me the actual code where you define the patterns? Copy and paste from your script please (also where you create the array)

What is the error in the console?

EDIT: Also what OS?

Edited by JFee

Regards,Josh

Posted

Hi Guys,

I will post the Code tomorrow.

I first have to anonymize it.

You also need the log-file to search in.

There is a little problem its size is about 10 MB.

Any suggestions?

Another funny thing is:

If the crash occures with a log-file.

And I just rename the log-file to search it may not crash any more.

ErrorCode on console was:

!>08:46:25 AutoIT3.exe ended.rc:-1073741819

>Exit code: -1073741819 Time: 2.523

I'm running Win XP Professional SP2

Thank you for all the help

Ben

Please be gentile I'm still learning

  • 3 weeks later...
  • Developers
Posted (edited)

I have managed to strip it down to the attached script and smaller log file that crashes for me pretty quickly in the 3.2.12.1 but seems to run fine in Beta 3.2.13.7.

I didn't see any obvious fixes in the beta releases.

Have you tried your script with the latest Beta?

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Posted

I have managed to strip it down to the attached script and smaller log file that crashes for me pretty quickly in the 3.2.12.1 but seems to run fine in Beta 3.2.13.7.

I didn't see any obvious fixes in the beta releases.

Have you tried your script with the latest Beta?

Hi there,

I tried your script with the latest Beta.

No effect. It still crashes on my system.

Ben

Please be gentile I'm still learning

Posted

No problem here:

script

Opt("MustDeclareVars", 1)

;Pfad der Quelldatei einlesen
Local $logDateiQuellPfad = _einlesenTags("Pfad:")
If $logDateiQuellPfad == -1 Then
    _logge("Pfad nicht gefunden -  Abbgebrochen")
    Exit
EndIf
;PfadDateiname nach dem Rename
Local $tempLogDatei = (StringTrimRight($logDateiQuellPfad, 4) & ".txt")
;loggen
_logge("Filterung gestartet.")
;Datei umbenennen, wenn es nicht klappt schauen ob Datei überhauot vorhanden
If Not FileMove($logDateiQuellPfad, $tempLogDatei, 1) Then
    If Not FileExists($logDateiQuellPfad) Then
        _logge("Quelldatei nicht vorhanden - Abgebrochen")
    Else
        _logge("Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen")
    EndIf
    Exit
EndIf
;anzahl der Masken einlesen
Local $maskenanzahl = _einlesenTags("AnzahlMasken:")
If $maskenanzahl == -1 Then
    _logge("Anzahlmasken nicht gefunden -  Abbgebrochen")
    Exit
EndIf
;einzelne Masken einlesen
Local $maske[$maskenanzahl]
For $j = 1 To $maskenanzahl Step 1
    $maske[$j - 1] = _einlesenTags("Maske" & $j & ":")
    If $maske[$j - 1] == -1 Then
        _logge("Maske" & $j & " nicht gefunden -  Abbgebrochen")
        Exit
    EndIf
Next

;für jede Maske einzeln durchgehen
For $i = 0 To $maskenanzahl - 1 Step 1
    ;die Treffer pro Maske speichern
    Local $anzahlTreffer = 0
    ;Datei öffnen
    Local $file = FileOpen($tempLogDatei, 0)
    If $file == -1 Then
        _logge("Fehler beim FileOpen")
    Else
        _logge("Datei geöffnet")
        While 1
            ;Zeile für Zeile lesen
            Local $line = FileReadLine($file)
            If @error == -1 Then
                ExitLoop
            ElseIf @error == 1 Then
                _logge("Fehler bei FileReadLine")
            EndIf
            ;wenn Maske passt, dann Email senden
            If StringRegExp($line, $maske[$i], 0, 1) Then
                $anzahlTreffer = $anzahlTreffer + 1
                _emailSenden($line, $i + 1)
            ElseIf @error == 2 Then
                _logge("Fehler bei RegExp " & @error)
            EndIf

        WEnd
        ;Datei wieder schließen um bei nächster Maske von vorne zu beginnen
        FileClose($file)
    EndIf
    _logge("Maske" & $i + 1 & " lieferte " & $anzahlTreffer & " Treffer")
Next
_logge("Filterung abgeschlossen")



#include <INet.au3>

;#cs--------------------------------------------------------------------------------------------------
;Diese Funktion schreibt einen Text ($text)  und einen Zeitstempel in eine Logfile,
;die den gleichen Namen wie das Skript trägt und am gleichen Ort wie das Skript liegt.
;#ce--------------------------------------------------------------------------------------------------
Func _logge($text)
    
    Local $logfile = StringTrimRight(@ScriptName, 4) & ".log"
    FileWriteLine($logfile, _zeitStempel() & " " & $text)
    
EndFunc   ;==>_logge

;~ #cs--------------------------------------------------------------------------------------------------
;~ Diese Funktion erzeugt einen String-Zeitstempel aus den Makros von AutoIt
;~ #ce--------------------------------------------------------------------------------------------------
Func _zeitStempel()
    
    Local $stempel = @MDAY & "." & @MON & "." & @YEAR & "/" & @HOUR & ":" & @MIN & ":" & @SEC
    Return $stempel
    
EndFunc   ;==>_zeitStempel

;~ #cs--------------------------------------------------------------------------------------------------
;~ Diese Funktion sendet eine Email an die in einer .cfg Datei beschriebenen Daten
;~ In diese speziellen Fall kann nur eine Zeile geschickt werden.
;~ $i wird für den spezifischen Betreff gebraucht.
;~ Diese Funktion benötigt den #include von <INet.au3>
;~ #ce--------------------------------------------------------------------------------------------------
Func _emailSenden($line, $i)

    Local $emailDaten[5]
    
    $emailDaten[0] = _einlesenTags("SmtpServer:")
    If $emailDaten[0] == -1 Then
        _logge("SmtpServer nicht gefunden -  Abbgebrochen")
        Exit
    EndIf
    
    $emailDaten[1] = _einlesenTags("VonName:")
    If $emailDaten[1] == -1 Then
        _logge("VonName nicht gefunden -  Default verwendet")
        $emailDaten[1] = "FWlogSuche"
    EndIf
    
    $emailDaten[2] = _einlesenTags("VonAdresse:")
    If $emailDaten[2] == -1 Then
        _logge("VonAdresse nicht gefunden -  Default verwendet")
        $emailDaten[2] = "FWlogSuche@metris.de"
    EndIf
    
    $emailDaten[3] = _einlesenTags("AnAdresse:")
    If $emailDaten[3] == -1 Then
        _logge("VonAdresse nicht gefunden -  Abgebrochen")
        Exit
    EndIf
    
    $emailDaten[4] = _einlesenTags("Maske" & $i & "Betreff:")
    If $emailDaten[4] == -1 Then
        _logge("Maske" & $i & "Betreff  nicht gefunden -  Default verwendet")
        $emailDaten[4] = "Warnung"
    EndIf
    
    Local $body[1]
    $body[0] = $line
    
    Local $Response = _INetSmtpMail($emailDaten[0], $emailDaten[1], $emailDaten[2], $emailDaten[3], $emailDaten[4], $body, $emailDaten[0], -1, 1)
    Local $err = @error
    If $Response == 1 Then
        _logge("eMail erfolgreich an " & $emailDaten[3] & " gesendet.")
    Else
        _logge("eMail konnte nicht gesendet werden. @error = " & $err)
    EndIf

EndFunc   ;==>_emailSenden

;~ #cs--------------------------------------------------------------------------------------------------
;~ Diese Funktion liest den Wert zu einem übergebenen Tag ($tag) aus.
;~ Die .cfg Datei muss an der selbe Stelle wie das Skript liegen und den selben Namen besitzen.
;~ Die Funktion arbeitet mir Reguglären Ausdrücken.
;~ Es spielt keine Rolle an welche Stelle in der .cfg Datei der Tag steht.
;~ Wichtig ist nur, dass das Ende eines Wertes mit einem Zeilenumbruch endet.
;~ #ce--------------------------------------------------------------------------------------------------
Func _einlesenTags($tag)

    Local $Datei = @ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".cfg"
    Local $text = FileRead($Datei)

    Local $wert = StringRegExp($text, '(?:' & $tag & ')(?:\s*)(.*?)(?:\s*)(?:' & @CRLF & ')', 1, 1)
    If @error == 1 Then
        Return -1
    Else
        Return $wert[0]
    EndIf
    
EndFunc   ;==>_einlesenTags

cfg

Pfad: c:\Downloads\AutoIt-Skripte\Entwicklung\ForumTests\HowToBen\log2.txt

SmtpServer: 987.654.321.111

VonName: Ben

VonAdresse: ben@ben.de

AnAdresse:ben@ben.de

AnzahlMasken: 3

Maske1: (.*Daemon\.Critical.*123\.456\.789\.123.*Hardware.*temperature above threshold.*)

Maske1Betreff: Hitzeproblem

Maske2: (.*Overly long line received.*IP=123\.123\.123\.12.*)

Maske2Betreff: EmailHeader Problem

Maske3: (.*Access denied.*update\.abc\.com.*Unable to connect.*)

Maske3Betreff: Access denied Problem

log

07.08.2008/16:29:53 Filterung gestartet.
07.08.2008/16:29:53 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:29:57 Filterung gestartet.
07.08.2008/16:29:57 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:29:59 Filterung gestartet.
07.08.2008/16:29:59 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:30:01 Filterung gestartet.
07.08.2008/16:30:01 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:30:04 Filterung gestartet.
07.08.2008/16:30:04 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:30:26 Filterung gestartet.
07.08.2008/16:30:26 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:31:29 Filterung gestartet.
07.08.2008/16:31:29 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:31:34 Filterung gestartet.
07.08.2008/16:31:34 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:31:36 Filterung gestartet.
07.08.2008/16:31:36 Quelldatei vorhanden, könnte aber nicht verschoben werden - Abgebrochen
07.08.2008/16:32:23 Filterung gestartet.
07.08.2008/16:32:23 Quelldatei nicht vorhanden - Abgebrochen
07.08.2008/16:34:00 Filterung gestartet.
07.08.2008/16:34:00 Datei geöffnet
07.08.2008/16:34:00 Maske1 lieferte 0 Treffer
07.08.2008/16:34:00 Datei geöffnet
07.08.2008/16:34:01 Maske2 lieferte 0 Treffer
07.08.2008/16:34:01 Datei geöffnet
07.08.2008/16:34:01 Maske3 lieferte 0 Treffer
07.08.2008/16:34:01 Filterung abgeschlossen
07.08.2008/16:34:14 Filterung gestartet.
07.08.2008/16:34:14 Datei geöffnet
07.08.2008/16:34:15 Maske1 lieferte 0 Treffer
07.08.2008/16:34:15 Datei geöffnet
07.08.2008/16:34:15 Maske2 lieferte 0 Treffer
07.08.2008/16:34:15 Datei geöffnet
07.08.2008/16:34:16 Maske3 lieferte 0 Treffer
07.08.2008/16:34:16 Filterung abgeschlossen
07.08.2008/16:34:18 Filterung gestartet.
07.08.2008/16:34:18 Datei geöffnet
07.08.2008/16:34:18 Maske1 lieferte 0 Treffer
07.08.2008/16:34:18 Datei geöffnet
07.08.2008/16:34:18 Maske2 lieferte 0 Treffer
07.08.2008/16:34:18 Datei geöffnet
07.08.2008/16:34:19 Maske3 lieferte 0 Treffer
07.08.2008/16:34:19 Filterung abgeschlossen
07.08.2008/16:34:21 Filterung gestartet.
07.08.2008/16:34:21 Datei geöffnet
07.08.2008/16:34:21 Maske1 lieferte 0 Treffer
07.08.2008/16:34:21 Datei geöffnet
07.08.2008/16:34:22 Maske2 lieferte 0 Treffer
07.08.2008/16:34:22 Datei geöffnet
07.08.2008/16:34:22 Maske3 lieferte 0 Treffer
07.08.2008/16:34:22 Filterung abgeschlossen
07.08.2008/16:34:24 Filterung gestartet.
07.08.2008/16:34:24 Datei geöffnet
07.08.2008/16:34:24 Maske1 lieferte 0 Treffer
07.08.2008/16:34:24 Datei geöffnet
07.08.2008/16:34:25 Maske2 lieferte 0 Treffer
07.08.2008/16:34:25 Datei geöffnet
07.08.2008/16:34:25 Maske3 lieferte 0 Treffer
07.08.2008/16:34:25 Filterung abgeschlossen
07.08.2008/16:34:27 Filterung gestartet.
07.08.2008/16:34:27 Datei geöffnet
07.08.2008/16:34:27 Maske1 lieferte 0 Treffer
07.08.2008/16:34:27 Datei geöffnet
07.08.2008/16:34:28 Maske2 lieferte 0 Treffer
07.08.2008/16:34:28 Datei geöffnet
07.08.2008/16:34:28 Maske3 lieferte 0 Treffer
07.08.2008/16:34:28 Filterung abgeschlossen
07.08.2008/16:34:30 Filterung gestartet.
07.08.2008/16:34:30 Datei geöffnet
07.08.2008/16:34:31 Maske1 lieferte 0 Treffer
07.08.2008/16:34:31 Datei geöffnet
07.08.2008/16:34:31 Maske2 lieferte 0 Treffer
07.08.2008/16:34:31 Datei geöffnet
07.08.2008/16:34:31 Maske3 lieferte 0 Treffer
07.08.2008/16:34:31 Filterung abgeschlossen
07.08.2008/16:34:33 Filterung gestartet.
07.08.2008/16:34:33 Datei geöffnet
07.08.2008/16:34:34 Maske1 lieferte 0 Treffer
07.08.2008/16:34:34 Datei geöffnet
07.08.2008/16:34:34 Maske2 lieferte 0 Treffer
07.08.2008/16:34:34 Datei geöffnet
07.08.2008/16:34:35 Maske3 lieferte 0 Treffer
07.08.2008/16:34:35 Filterung abgeschlossen
07.08.2008/16:34:38 Filterung gestartet.
07.08.2008/16:34:38 Datei geöffnet
07.08.2008/16:34:38 Maske1 lieferte 0 Treffer
07.08.2008/16:34:38 Datei geöffnet
07.08.2008/16:34:39 Maske2 lieferte 0 Treffer
07.08.2008/16:34:39 Datei geöffnet
07.08.2008/16:34:39 Maske3 lieferte 0 Treffer
07.08.2008/16:34:39 Filterung abgeschlossen
07.08.2008/16:34:42 Filterung gestartet.
07.08.2008/16:34:42 Datei geöffnet
07.08.2008/16:34:42 Maske1 lieferte 0 Treffer
07.08.2008/16:34:42 Datei geöffnet
07.08.2008/16:34:43 Maske2 lieferte 0 Treffer
07.08.2008/16:34:43 Datei geöffnet
07.08.2008/16:34:43 Maske3 lieferte 0 Treffer
07.08.2008/16:34:43 Filterung abgeschlossen
07.08.2008/16:34:57 Filterung gestartet.
07.08.2008/16:34:57 Datei geöffnet
07.08.2008/16:34:57 Maske1 lieferte 0 Treffer
07.08.2008/16:34:57 Datei geöffnet
07.08.2008/16:34:58 Maske2 lieferte 0 Treffer
07.08.2008/16:34:58 Datei geöffnet
07.08.2008/16:34:58 Maske3 lieferte 0 Treffer
07.08.2008/16:34:58 Filterung abgeschlossen
07.08.2008/16:35:00 Filterung gestartet.
07.08.2008/16:35:00 Datei geöffnet
07.08.2008/16:35:01 Maske1 lieferte 0 Treffer
07.08.2008/16:35:01 Datei geöffnet
07.08.2008/16:35:01 Maske2 lieferte 0 Treffer
07.08.2008/16:35:01 Datei geöffnet
07.08.2008/16:35:02 Maske3 lieferte 0 Treffer
07.08.2008/16:35:02 Filterung abgeschlossen
07.08.2008/16:35:03 Filterung gestartet.
07.08.2008/16:35:03 Datei geöffnet
07.08.2008/16:35:04 Maske1 lieferte 0 Treffer
07.08.2008/16:35:04 Datei geöffnet
07.08.2008/16:35:04 Maske2 lieferte 0 Treffer
07.08.2008/16:35:04 Datei geöffnet
07.08.2008/16:35:05 Maske3 lieferte 0 Treffer
07.08.2008/16:35:05 Filterung abgeschlossen

Scripts & functions Organize Includes Let Scite organize the include files

Yahtzee The game "Yahtzee" (Kniffel, DiceLion)

LoginWrapper Secure scripts by adding a query (authentication)

_RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...)

Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc.

MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times

  • Developers
Posted (edited)

Hi there,

I tried your script with the latest Beta.

No effect. It still crashes on my system.

Ben

Ben,

Please check the Beta version you are running with and ensure you are using that Beta version when running/compiling the script, then let me know if it really crashes with version 3.2.13.7.

Jos

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Posted

No crash here. Do I have to compile it first to get a crash?

Scripts & functions Organize Includes Let Scite organize the include files

Yahtzee The game "Yahtzee" (Kniffel, DiceLion)

LoginWrapper Secure scripts by adding a query (authentication)

_RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...)

Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc.

MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times

  • Developers
Posted

No crash here. Do I have to compile it first to get a crash?

Nope, I start the script from the ZIP file i posted in SciTE with F5 and get a crash in seconds. Alt+F5 no crash and keeps on running forever.

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Posted

Still no crash here. Anyhow ... :P

Scripts & functions Organize Includes Let Scite organize the include files

Yahtzee The game "Yahtzee" (Kniffel, DiceLion)

LoginWrapper Secure scripts by adding a query (authentication)

_RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...)

Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc.

MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times

  • 3 weeks later...
Posted

As I said, I tried your ZIP with the latest Beta and run it with ALT+F5 and it still crashes.

It crashes not always but I got the crash at least four times.

I'm pretty sure the latest beta don't solves the problem. ;)

What to do now?

Ben

Please be gentile I'm still learning

Posted

Hello Community,

this StringRegExp Bug makes me crazy and I can't do anything.

I would like to help you locate the problem.

Is it possible to get the code of StringRegExp to have a closer look on it?

Bye

Ben

Please be gentile I'm still learning

  • Moderators
Posted (edited)

I'm curious, I've never had this result before, if you just did:

If StringRegExp($line, $maske[$i]) Then

Does it still crash?

Edit:

I noticed Jos did a replication script. It did crash with his example.. However:

No Crash:

If StringRegExp($line, $maske[$i]) Then

Crash:

If StringRegExp($line, $maske[$i], 0) Then

Crash:

If StringRegExp($line, $maske[$i], 0, 1) Then

Test done on 3.2.12.1

Edited by SmOke_N

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...