Jump to content

(Pandora) Saver2


ZigZagJoe

Recommended Posts

Here's a new one...

I went into Advanced Config and changed the fader setting to only fade to 75. After clicking ok there and clicking through the warnings. SProxy now won't start. I even went so far as to uninstall and reinstall with clearing the settings. Here's what is in the log:

1/7/2010 11:10:17 AM Error in bandwidth logging?! System.NullReferenceException: Object reference not set to an instance of an object.

at Proxy.Charts.TimerCallbackProc(Object n) in E:\Codin' Projects\Saver Project\SProxy\Charts.cs:line 186

When it starts the message "Only one usage of each socket address (protocol/network address/port) is normally permittied......"

It references lines: E:\Codin' Projects\Saver Project\SProxy\Server.cs:line 119 and

E:\Codin' Projects\Saver Project\SProxy\CORE.cs:line 191

Those are paths from your machine. Did launching the Advanced config dialog trigger some section of code that has hard coded paths?

Link to comment
Share on other sites

I got the app to start back up and run for a while. Now it will crash with the following in the log:

1/7/2010 2:14:02 PM S166301: Started downloading

1/7/2010 2:14:02 PM Saver2: StreamPlayer: Data pipe ready

1/7/2010 2:14:03 PM Saver2: StreamPlayer: Pipe connected

1/7/2010 2:14:04 PM Saver2: StreamPlayer: Starting data transfer

1/7/2010 2:14:04 PM Something has went horribly wrong in SProxy.

System.NullReferenceException: Object reference not set to an instance of an object.

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)

at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)

at System.Windows.Forms.Form.DefWndProc(Message& m)

at System.Windows.Forms.Control.WndProc(Message& m)

at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

at System.Windows.Forms.ContainerControl.WndProc(Message& m)

at System.Windows.Forms.Form.WndProc(Message& m)

at Pandora.PandoraClientForm.WndProc(Message& m) in E:\Codin' Projects\Saver Project\Pandora\Client.GUI.cs:line 260

at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

1/7/2010 2:14:04 PM Something has went horribly wrong in SProxy.

System.NullReferenceException: Object reference not set to an instance of an object.

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

at System.Windows.Forms.SafeNativeMethods.MessageBox(HandleRef hWnd, String text, String caption, Int32 type)

at System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)

at System.Windows.Forms.MessageBox.Show(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon)

at Proxy.CORE.ExceptionHandler(Object sender, ThreadExceptionEventArgs e) in E:\Codin' Projects\Saver Project\SProxy\CORE.cs:line 345

at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t)

at System.Windows.Forms.Control.WndProcException(Exception e)

at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e)

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

at System.Windows.Forms.UnsafeNativeMethods.GetMessageW(MSG& msg, HandleRef hWnd, Int32 uMsgFilterMin, Int32 uMsgFilterMax)

at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNat

iveMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)

at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

at System.Windows.Forms.Application.Run(Form mainForm)

at Proxy.CORE.Main(String[] args) in E:\Codin' Projects\Saver Project\SProxy\CORE.cs:line 234

Link to comment
Share on other sites

Let me know what you think of my above post please. thanks. sorry for the multiple posts. the last couple of days have been really rough for me.

It'd be possible to do an emulation of the client, definitely... eh

As for scrobling (or whatnot) that too would be possible but i need to look at it some more.

Here's a new one...

I went into Advanced Config and changed the fader setting to only fade to 75. After clicking ok there and clicking through the warnings. SProxy now won't start. I even went so far as to uninstall and reinstall with clearing the settings. Here's what is in the log:

1/7/2010 11:10:17 AM Error in bandwidth logging?! System.NullReferenceException: Object reference not set to an instance of an object.

at Proxy.Charts.TimerCallbackProc(Object n) in E:\Codin' Projects\Saver Project\SProxy\Charts.cs:line 186

When it starts the message "Only one usage of each socket address (protocol/network address/port) is normally permittied......"

It references lines: E:\Codin' Projects\Saver Project\SProxy\Server.cs:line 119 and

E:\Codin' Projects\Saver Project\SProxy\CORE.cs:line 191

Those are paths from your machine. Did launching the Advanced config dialog trigger some section of code that has hard coded paths?

No - the second error (referring to lines 119 and 191) refers to having something else listening on the same port. If SProxy died a horrible death somehow (a very hard crash, not even getting the message box) it's possible for the port to get tied up. Hmm, it seems that the advanced setting dialog isn't explicitly killing the socket. Odd, it never ties up here... anyways, that's fixed.

The bandwidth error doesn't make a particular lot of sense, though. (Literally not possible, at least not in the case of what it refers to. nonfatal however)

I got the app to start back up and run for a while. Now it will crash with the following in the log:

1/7/2010 2:14:02 PM S166301: Started downloading

1/7/2010 2:14:02 PM Saver2: StreamPlayer: Data pipe ready

1/7/2010 2:14:03 PM Saver2: StreamPlayer: Pipe connected

1/7/2010 2:14:04 PM Saver2: StreamPlayer: Starting data transfer

1/7/2010 2:14:04 PM Something has went horribly wrong in SProxy.

System.NullReferenceException: Object reference not set to an instance of an object.

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)

at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)

at System.Windows.Forms.Form.DefWndProc(Message& m)

at System.Windows.Forms.Control.WndProc(Message& m)

at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

at System.Windows.Forms.ContainerControl.WndProc(Message& m)

at System.Windows.Forms.Form.WndProc(Message& m)

at Pandora.PandoraClientForm.WndProc(Message& m) in E:\Codin' Projects\Saver Project\Pandora\Client.GUI.cs:line 260

at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

1/7/2010 2:14:04 PM Something has went horribly wrong in SProxy.

System.NullReferenceException: Object reference not set to an instance of an object.

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

at System.Windows.Forms.SafeNativeMethods.MessageBox(HandleRef hWnd, String text, String caption, Int32 type)

at System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)

at System.Windows.Forms.MessageBox.Show(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon)

at Proxy.CORE.ExceptionHandler(Object sender, ThreadExceptionEventArgs e) in E:\Codin' Projects\Saver Project\SProxy\CORE.cs:line 345

at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t)

at System.Windows.Forms.Control.WndProcException(Exception e)

at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e)

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

at System.Windows.Forms.UnsafeNativeMethods.GetMessageW(MSG& msg, HandleRef hWnd, Int32 uMsgFilterMin, Int32 uMsgFilterMax)

at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNat

iveMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)

at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

at System.Windows.Forms.Application.Run(Form mainForm)

at Proxy.CORE.Main(String[] args) in E:\Codin' Projects\Saver Project\SProxy\CORE.cs:line 234

Haven't the faintest, lol. As far as i can tell it's the framework eating shit and dieing:

the first one is dieing in the framework's wndproc the location it references in my code is a call to the base wndproc; i have to override i to handle various stuff for the new gui.

second one is something that shouldn't die (showing a messagebox to user....)

Do these errors happen repeatedly?

Just and FYI, the errors seem to be consistent when the Fader is used. If I don't use that (so far), everything works fine

The fader as in the song fader or transparency feature of the client? I just tried launching the fader with the client and playing a song, working so far...

Link to comment
Share on other sites

Hmm, it seems that the advanced setting dialog isn't explicitly killing the socket.

That makes sense as some of the text referenced an in use socket and while testing this I was able to get it to crash without changing anything on the dialog and just clicking OK.

Haven't the faintest, lol. As far as i can tell it's the framework eating shit and dieing.......

The fader as in the song fader or transparency feature of the client?

Song Fader. I never really use it, but decided on a whim to use it today. That last crash was after running for a while. It's not like it is constantly crashing. That seemed to be related to the socket issue in the first post. If I was guessing what was going on based on the referenced lines in the error, I would say that you are subclassing the Fader to control it and somehow that got confused during a callback. Probably nothing really to do with your code.

Link to comment
Share on other sites

That makes sense as some of the text referenced an in use socket and while testing this I was able to get it to crash without changing anything on the dialog and just clicking OK.

Song Fader. I never really use it, but decided on a whim to use it today. That last crash was after running for a while. It's not like it is constantly crashing. That seemed to be related to the socket issue in the first post. If I was guessing what was going on based on the referenced lines in the error, I would say that you are subclassing the Fader to control it and somehow that got confused during a callback. Probably nothing really to do with your code.

Fader just plays around with transparency settings, nothing "dirty" in it. I suspect part of it is i just recently discovered the default setting of 100% visibility while focused is causing the window to be recreated - i recently fixed that (by setting the default to .99), but haven't added a bit to force it to .99 yet.

If you had the client running at the same time as the advanced settings that might have had something to do with it too - there was a very weird bug relating to client and the server not being able to restart properly which i got around by essentially making the restart a soft restart. It's generally better to use Settings.exe when you need to change something as when settings need to be saved SProxy's adv settings kills everything fast, hard, and dirty (as to override the plugins setting any settings of their own).

Link to comment
Share on other sites

New user here. Just wanted to to say thanks. I really like this program.

I was wondering if it would be possible to add a config flag to auto-flag songs "I'm tired of this song" after downloading to remove it from the playing for 30 days.

Link to comment
Share on other sites

New user here. Just wanted to to say thanks. I really like this program.

I was wondering if it would be possible to add a config flag to auto-flag songs "I'm tired of this song" after downloading to remove it from the playing for 30 days.

I've implemented this and put the tired song button in the rate songs dialog.

Will upload it sometime in the next few days (depends on activity/stuff that needs fixing)

It's controlled by a hidden setting, __Pandora_TireEverySong. In advanced settings (or using Settings.exe) set it to "True". Then, 5 seconds after every song plays, the log should have an entry about it being tired. Didn't see a reason to put it in common settings, seeing as it might mess things up if someone accidentally checks it.

Link to comment
Share on other sites

It'd be possible to do an emulation of the client, definitely... eh

As for scrobling (or whatnot) that too would be possible but i need to look at it some more.

Thanks for this, this would truly be the shizle if it could be implemented. :angry: :)

Still feeling under the weather but I'm feeling a little better today. Hopefully I can lend a hand or whatnot in the next few days.

Let me know if there is anything else you need. PM me too if you want. I'm always around.

My nick is XIPRELAY on ANY medium.

Link to comment
Share on other sites

Changelog of current version:

The client has been completely seperated from the pandora saver plugin. A side effect of this is all settings will be reset (due to the namespace change), when using the client in sproxy.

Client: Softvol is now disabled by default; translation - volume control is no longer laggy, at the cost of a slight volume decrease.

Client: Fixed a bug causing the main window to stay faded in for too short a time on song change

Client: Volume control updated somewhat to scale properly from 0-100

Client: Volume now shown when changed

Client: Added tireSong Rpc method

Client: Streamplayer length estimation improved to some degree

Client: Fixed a bug causing the client be bugged and require a restart after deleting a station

Client: Classnames changed, build process for standalone and plugin integrated

Client: Positioning improved somewhat

Saver2: Update check behavior improved somewhat

SProxy: Advanced settings exits a bit more kindly; should fix port in use errors

SProxy: Remove key button hidden as it is broken and moreover not needed. (TODO: fix it)

Docs: Added advanced settings info page

Should release in the next day or so. This is almost all bugfixes/testing.

Link to comment
Share on other sites

Changelog of current version:

The client has been completely seperated from the pandora saver plugin. A side effect of this is all settings will be reset (due to the namespace change), when using the client in sproxy.

Client: Softvol is now disabled by default; translation - volume control is no longer laggy, at the cost of a slight volume decrease.

Client: Fixed a bug causing the main window to stay faded in for too short a time on song change

Client: Volume control updated somewhat to scale properly from 0-100

Client: Volume now shown when changed

Client: Added tireSong Rpc method

Client: Streamplayer length estimation improved to some degree

Client: Fixed a bug causing the client be bugged and require a restart after deleting a station

Client: Classnames changed, build process for standalone and plugin integrated

Client: Positioning improved somewhat

Saver2: Update check behavior improved somewhat

SProxy: Advanced settings exits a bit more kindly; should fix port in use errors

SProxy: Remove key button hidden as it is broken and moreover not needed. (TODO: fix it)

Docs: Added advanced settings info page

Should release in the next day or so. This is almost all bugfixes/testing.

Looks fucking badass! thanks for all of your hard work. Look forward to helping with testing.

PS: Is there a way we can donate to you for development ?

Link to comment
Share on other sites

Looks fucking badass! thanks for all of your hard work. Look forward to helping with testing.

PS: Is there a way we can donate to you for development ?

Yeah, there is a link on the first page of the thread, and the about page in saver2.

Took a look at scrobbling; MusicBrainzID is the only thing i need to figure out really (specifically, is it optional or alternatively find code to look it up)

Would kinda like to be able to put it as part of saver2 but the problem is the track length is not part of the songinfo class because most tracks don't have a known length - Pandora requires guesses, grooveshark may or may not have a length and if it doesn't there is no way to tell, and slacker i can't recall if it has a length spec or not.

Link to comment
Share on other sites

Yeah, there is a link on the first page of the thread, and the about page in saver2.

Took a look at scrobbling; MusicBrainzID is the only thing i need to figure out really (specifically, is it optional or alternatively find code to look it up)

Would kinda like to be able to put it as part of saver2 but the problem is the track length is not part of the songinfo class because most tracks don't have a known length - Pandora requires guesses, grooveshark may or may not have a length and if it doesn't there is no way to tell, and slacker i can't recall if it has a length spec or not.

Well all in all. I'll be getting some extra dime in on the 15/16th , i'll def. be thinking about throwing some cash your way. I've gotta test the waters of the program a tad more. I'm still a NEWB ..... noooooooooooooo! =P

Anyways, let me see what I can dig up on this ID/API stuff for pandora.

The feed data seems to be very extensive and getting better and better as time goes by.

Grooves|harks' feed data however always seems to have problems every now and again.

http://feeds.pand0ra.com

By the way, reverse engineering the Gadget would be great if we could do it. But I don't know how big you want the program to start to get. Would you consider including the Sidebar stuff ?

ps: I'm coming around . It's only a matter of time now till i'm 100%

Link to comment
Share on other sites

Well all in all. I'll be getting some extra dime in on the 15/16th , i'll def. be thinking about throwing some cash your way. I've gotta test the waters of the program a tad more. I'm still a NEWB ..... noooooooooooooo! =P

Anyways, let me see what I can dig up on this ID/API stuff for pandora.

The feed data seems to be very extensive and getting better and better as time goes by.

Grooves|harks' feed data however always seems to have problems every now and again.

http://feeds.pand0ra.com

By the way, reverse engineering the Gadget would be great if we could do it. But I don't know how big you want the program to start to get. Would you consider including the Sidebar stuff ?

ps: I'm coming around . It's only a matter of time now till i'm 100%

heh, thanks.

That url, though, doesn't work (nor does it with 0 replaced with o). What's supposed to be there?

Sidebar isn't really an option seeing as I'm on XP (64) myself, and I don't know if the two can coexist.

Reverse engineering the gadget, depends what you mean. By sniffing RPCs, no, that's really not possible as it used a completely different method last i looked (i think it used all SSL? which are a pain to intercept and sproxy doesn't have that capability).

Huh, the gadget is just a zip file. Pretty much only has a giant ass JS file in it.

Oh, wow. Looking at this... it could be ported STUPIDLY easy. By stupidly easy, i mean, make a form with a browser window and done. hahaha gotta try this for lols. I did however find out there is no way to read from it as it's almost all SSL and what posts there are they are one way (plus are JSON).

Awesome!

Let me know if you ever get around to a source release. I have a lot of ideas I'd like to try out. We could even set up a SVN!

I'm working towards getting saver2, fader, manager, pandora, slacker, and grooveshark plugins into a state that i could put them on github; it seems the best so far. Still need to figure out how all that licensing stuff works... thinking GPL

I'm not so sure about SProxy, mostly because it's a bit ugly inside, and the client I'd like to keep closed source for now.

Link to comment
Share on other sites

heh, thanks.

That url, though, doesn't work (nor does it with 0 replaced with o). What's supposed to be there?

Sidebar isn't really an option seeing as I'm on XP (64) myself, and I don't know if the two can coexist.

YES, they can co-exist! , Its a little work but it can happen.

Here is the full link

http://feeds.pandora.com/feeds/

Reverse engineering the gadget, depends what you mean. By sniffing RPCs, no, that's really not possible as it used a completely different method last i looked (i think it used all SSL? which are a pain to intercept and sproxy doesn't have that capability).

Huh, the gadget is just a zip file. Pretty much only has a giant ass JS file in it.

Well it doesn't necessarily need to be Reverse engineered, more so just added to. So in place of the ad their is some Last.FM or other function to take its place.

I'm working towards getting saver2, fader, manager, pandora, slacker, and grooveshark plugins into a state that i could put them on github; it seems the best so far. Still need to figure out how all that licensing stuff works... thinking GPL

I'm not so sure about SProxy, mostly because it's a bit ugly inside, and the client I'd like to keep closed source for now.

Love where your heads at, also checkout http://cia.vc

Link to comment
Share on other sites

YES, they can co-exist! , Its a little work but it can happen.

Here is the full link

http://feeds.pandora.com/feeds/

Well it doesn't necessarily need to be Reverse engineered, more so just added to. So in place of the ad their is some Last.FM or other function to take its place.

Love where your heads at, also checkout http://cia.vc

What do you use the feed data for, exactly?

There is no way to modify the Gadget. (it's another flash applet). Actually, i take that back: since it has the ad in the same place always, it would be possible to just shrink the content window and put a button or some such there. But this would only be possible in the XP gadget.

Also, i was bored, so here's pandora gadget for XP: http://zzj.itf-inc.com/s2/misc/PandoraGadgetXP.zip

Source: http://zzj.itf-inc.com/s2/misc/PandoraGadgetXPSrc.zip

Oh, and it's not pandora one only either. :lol:

Link to comment
Share on other sites

What do you use the feed data for, exactly?

There is no way to modify the Gadget. (it's another flash applet). Actually, i take that back: since it has the ad in the same place always, it would be possible to just shrink the content window and put a button or some such there. But this would only be possible in the XP gadget.

Also, i was bored, so here's pandora gadget for XP: http://zzj.itf-inc.com/s2/misc/PandoraGadgetXP.zip

Source: http://zzj.itf-inc.com/s2/misc/PandoraGadgetXPSrc.zip

Oh, and it's not pandora one only either. :lol:

Simply Gorgeous . TY!

I've taken your idea one step further and tried to recompile the RhapsodyScrobbler, but I'm still working on it.

I'll post a screenshot soon.

We can use the simple opensource program SoTWin to get the scrobbler app on top of the ad and just shrink the window on top of the widget.

I'll dig it all up soon.

Link to comment
Share on other sites

pandoragadgetreinscreen.png

Here is where my head is at right now. This is just me playing around. User reactions PLEASE!

What should go where ? I'll post the SoTWin program links in the morning . Me bones are tired :P

ps: I wish I wasn't under the weather I'd be all over this. :(

Link to comment
Share on other sites

I'm not sure how to test if album art is embedded in the mp3 tag data or not. If not, can you add this feature and make it default (see no reason not to, really)?

If I disable the download album art option, will it still embed the art, and just not store an external jpeg? That would be my preferred method.

I ask because I notice a lot of music players or portable devices that play music and have picture galleries can be a mess. This is because external jpeg files can show up in the gallery, forcing me to scroll through tons of album art just to see my camera pictures.

however, on my device I noticed deleting the album art from the gallery still left it in my music player somehow.

But I ask because I'm not sure if it found an embedded version of the art, if it if secretly stored it elsewhere to retain the art in the music player.

About open source..I don't really like the idea of it being open source. I don't want pandora checking out the code and circumventing it. Anything not related to how thats done is fine though, in my opinion.

As long as you are actively developing it, I see no huge desire to make it open source. But thats my opinion.

Link to comment
Share on other sites

I'm not sure how to test if album art is embedded in the mp3 tag data or not. If not, can you add this feature and make it default (see no reason not to, really)?

If I disable the download album art option, will it still embed the art, and just not store an external jpeg? That would be my preferred method.

I ask because I notice a lot of music players or portable devices that play music and have picture galleries can be a mess. This is because external jpeg files can show up in the gallery, forcing me to scroll through tons of album art just to see my camera pictures.

however, on my device I noticed deleting the album art from the gallery still left it in my music player somehow.

But I ask because I'm not sure if it found an embedded version of the art, if it if secretly stored it elsewhere to retain the art in the music player.

It is embedded, yes. If saving aart to disk is disabled it will still be written to file.

Link to comment
Share on other sites

It is embedded, yes. If saving aart to disk is disabled it will still be written to file.

I think the ideal idea would be to get meshing working with CAD and TrillyTunes IMHO.

....Still working on the graphics and such.

Grab the small opensource SoTWin here http://fileforum.betanews.com/detail/SoTWin/1056385397/1

I think the above poster is right. As long as this is being actively worked on and no red flags go off.

And we can still keep the functions fairly ethical. Keep the source closed for now and only allow it to those actually working religiously on the project.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

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