Commit c6357881 authored by chaves's avatar chaves
Browse files

'smc' rebuild because of 'cegui' upgrade. I also need to add Arch Linux's...

'smc' rebuild because of 'cegui' upgrade. I also need to add Arch Linux's patch to it, so it can build with latest 'cegui'.
parent 2e729ac4
#
# Chakra Packages for Chakra, part of chakra-project.org
# Games Packages for Chakra, part of chakra-project.org
#
# contributor (x86_64): Giuseppe Calà <jiveaxe@gmail.com>
......@@ -8,29 +8,38 @@ source ../_buildscripts/${current_repo}-${_arch}-cfg.conf
pkgname=smc
pkgver=1.9
pkgrel=2
_musicver=5.0
pkgrel=3
pkgdesc="Secret Maryo Chronicles"
arch=('i686' 'x86_64')
url="http://www.secretmaryo.org/"
license=('GPL3')
depends=('boost' 'cegui' 'gettext' 'glew' 'libogg' 'libpng' 'libvorbis' 'mesa' 'sdl' 'sdl_image' 'sdl_mixer' 'sdl_ttf')
depends=('sdl_image' 'sdl_ttf' 'sdl_mixer' 'cegui>=0.7' 'boost' 'libpng')
makedepends=('autoconf' 'automake')
source=(http://downloads.sourceforge.net/smclone/$pkgname-$pkgver.tar.bz2
http://downloads.sourceforge.net/smclone/SMC_Music_4.1_high.zip
http://downloads.sourceforge.net/smclone/SMC_Music_${_musicver}_high.zip
smc-for-cegui-v0-7.diff
smc.desktop
smc.png)
md5sums=('75ab7826303c49aec25b052a8b90287f'
'f0d5fad6f1d0387bd909c93226698ba9'
'0a681420afc9227e8fe975972dbf6226'
'0bccac29052d3eed93e88535312eaaa2'
'51dfea21b741ad19df14e738df52f1cf'
'80fe208132ff41dd7677a53ee429ecdb'
'efca7580e28748625eb676c9d24ee122')
build() {
cd $srcdir/$pkgname-$pkgver
# to remove when smc will be compatible with cegui-0.7.x
patch -Np1 -i ${srcdir}/smc-for-cegui-v0-7.diff
./autogen.sh
./configure --prefix=/usr
}
package() {
cd $srcdir/$pkgname-$pkgver
make install LDADD=-lpng DESTDIR=$pkgdir
# install some freedesktop.org compatibility
......
diff -ur smc-1.9/configure.ac smc-1.9-b/configure.ac
--- smc-1.9/configure.ac 2009-08-17 15:59:00.000000000 +0200
+++ smc-1.9-b/configure.ac 2011-01-19 00:43:37.809884881 +0100
@@ -53,7 +53,7 @@
AC_MSG_ERROR([SDL_ttf library not found]))
# Check for the CEGUI library
-PKG_CHECK_MODULES(CEGUI, CEGUI-OPENGL >= 0.5.0)
+PKG_CHECK_MODULES(CEGUI, CEGUI-OPENGL >= 0.7.0)
CPPFLAGS="$CPPFLAGS $CEGUI_CFLAGS"
LIBS="$LIBS $CEGUI_LIBS"
diff -ur smc-1.9/src/core/editor.cpp smc-1.9-b/src/core/editor.cpp
--- smc-1.9/src/core/editor.cpp 2009-08-13 17:11:42.000000000 +0200
+++ smc-1.9-b/src/core/editor.cpp 2011-01-19 00:44:46.734328121 +0100
@@ -118,16 +118,10 @@
return tmp;
}
-void cEditor_Item_Object :: draw( const CEGUI::Vector3 &position, float alpha, const CEGUI::Rect &clipper ) const
+void cEditor_Item_Object :: draw( CEGUI::GeometryBuffer &buffer, const CEGUI::Rect &targetRect, float alpha, const CEGUI::Rect *clipper ) const
{
// draw text
- list_text->draw( position, alpha, clipper );
-}
-
-void cEditor_Item_Object :: draw( CEGUI::RenderCache &cache, const CEGUI::Rect &targetRect, float zBase, float alpha, const CEGUI::Rect *clipper ) const
-{
- // draw text
- list_text->draw( cache, targetRect, zBase, alpha, clipper );
+ list_text->draw( buffer, targetRect, alpha, clipper );
}
void cEditor_Item_Object :: Draw_Image( void )
@@ -533,12 +527,12 @@
if( editor_window->getXPosition().asRelative( 1 ) >= 0 )
{
// Listbox dimension
- float list_posy = listbox_items->getUnclippedPixelRect().d_top * global_downscaley;
- float list_height = listbox_items->getUnclippedPixelRect().getHeight() * global_downscaley;
+ float list_posy = listbox_items->getUnclippedOuterRect().d_top * global_downscaley;
+ float list_height = listbox_items->getUnclippedOuterRect().getHeight() * global_downscaley;
// Vertical ScrollBar Position
float scroll_pos = listbox_items->getVertScrollbar()->getScrollPosition() * global_downscaley;
// font height
- float font_height = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" )->getFontHeight() * global_downscaley;
+ float font_height = CEGUI::FontManager::getSingleton().get( "bluebold_medium" ).getFontHeight() * global_downscaley;
// draw items
for( unsigned int i = 0; i < listbox_items->getItemCount(); i++ )
diff -ur smc-1.9/src/core/editor.h smc-1.9-b/src/core/editor.h
--- smc-1.9/src/core/editor.h 2009-02-18 05:21:30.000000000 +0100
+++ smc-1.9-b/src/core/editor.h 2011-01-19 00:43:37.809884881 +0100
@@ -62,8 +62,7 @@
*/
virtual CEGUI::Size getPixelSize( void ) const;
// draw
- void draw( const CEGUI::Vector3 &position, float alpha, const CEGUI::Rect &clipper ) const;
- void draw( CEGUI::RenderCache &cache, const CEGUI::Rect &targetRect, float zBase, float alpha, const CEGUI::Rect *clipper) const;
+ void draw(CEGUI::GeometryBuffer& buffer, const CEGUI::Rect& targetRect, float alpha, const CEGUI::Rect* clipper) const;
// draw image
void Draw_Image( void );
diff -ur smc-1.9/src/core/game_core.cpp smc-1.9-b/src/core/game_core.cpp
--- smc-1.9/src/core/game_core.cpp 2009-08-16 18:44:42.000000000 +0200
+++ smc-1.9-b/src/core/game_core.cpp 2011-01-19 00:59:02.668958883 +0100
@@ -265,7 +265,7 @@
// align text
- CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" );
+ CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" );
// fixme : Can't handle multiple lines of text
float text_width = font->getTextExtent( text ) * global_downscalex;
@@ -1182,7 +1182,7 @@
text_default->setText( gui_text );
// align text
- CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" );
+ CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" );
float text_width = font->getTextExtent( gui_text ) * global_downscalex;
text_default->setWidth( CEGUI::UDim( 0, ( text_width + 15 ) * global_upscalex ) );
@@ -1190,7 +1190,7 @@
text_default->moveToFront();
// set window height
- text_default->setHeight( CEGUI::UDim( 0, font->getFontHeight() * font->getFormattedLineCount( gui_text, text_default->getUnclippedInnerRect(), CEGUI::LeftAligned ) + ( 12 * global_upscaley ) ) );
+ text_default->setHeight( CEGUI::UDim( 0, font->getFontHeight() + ( 12 * global_upscaley ) ) );
while( draw )
{
diff -ur smc-1.9/src/core/main.cpp smc-1.9-b/src/core/main.cpp
--- smc-1.9/src/core/main.cpp 2009-05-12 10:36:04.000000000 +0200
+++ smc-1.9-b/src/core/main.cpp 2011-01-19 00:43:37.809884881 +0100
@@ -444,13 +444,15 @@
if( pGuiSystem )
{
- delete pGuiSystem;
+ CEGUI::ResourceProvider* rp = pGuiSystem->getResourceProvider();
+ pGuiSystem->destroy();
pGuiSystem = NULL;
+ delete rp;
}
if( pGuiRenderer )
{
- delete pGuiRenderer;
+ pGuiRenderer->destroy( *pGuiRenderer );
pGuiRenderer = NULL;
}
@@ -507,7 +509,7 @@
}
case SDL_VIDEORESIZE:
{
- pGuiRenderer->setDisplaySize( CEGUI::Size( static_cast<float>(ev->resize.w), static_cast<float>(ev->resize.h) ) );
+ pGuiSystem->notifyDisplaySizeChanged( CEGUI::Size( static_cast<float>(ev->resize.w), static_cast<float>(ev->resize.h) ) );
break;
}
case SDL_KEYDOWN:
diff -ur smc-1.9/src/gui/hud.cpp smc-1.9-b/src/gui/hud.cpp
--- smc-1.9/src/gui/hud.cpp 2009-05-01 15:00:16.000000000 +0200
+++ smc-1.9-b/src/gui/hud.cpp 2011-01-19 00:43:37.816550365 +0100
@@ -946,7 +946,7 @@
m_text_debug_text->setVisible( 1 );
// update position
- CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" );
+ CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" );
float text_width = font->getTextExtent( gui_text ) * global_downscalex;
if( text_width > 800.0f )
diff -ur smc-1.9/src/input/mouse.cpp smc-1.9-b/src/input/mouse.cpp
--- smc-1.9/src/input/mouse.cpp 2009-04-24 21:16:58.000000000 +0200
+++ smc-1.9-b/src/input/mouse.cpp 2011-01-19 00:43:37.813217623 +0100
@@ -432,17 +432,12 @@
void cMouseCursor :: Render( void ) const
{
- if( !m_active )
- {
+ CEGUI::MouseCursor *mouse = CEGUI::MouseCursor::getSingletonPtr();
+
+ if ( m_active == mouse->isVisible() )
return;
- }
- // Render CEGUI Mouse
- pGuiRenderer->setQueueingEnabled( 0 );
- CEGUI::MouseCursor *mouse = CEGUI::MouseCursor::getSingletonPtr();
- mouse->setVisible( 1 );
- mouse->draw();
- mouse->setVisible( 0 );
+ mouse->setVisible( m_active );
}
void cMouseCursor :: Update_Position( void )
diff -ur smc-1.9/src/level/level_settings.cpp smc-1.9-b/src/level/level_settings.cpp
--- smc-1.9/src/level/level_settings.cpp 2009-08-07 03:04:28.000000000 +0200
+++ smc-1.9-b/src/level/level_settings.cpp 2011-01-19 01:06:59.064259070 +0100
@@ -163,8 +163,8 @@
editbox->setText( int_to_string( bg_color_2.blue ).c_str() );
// preview window
CEGUI::Window *window_background_preview = CEGUI::WindowManager::getSingleton().getWindow( "window_background_preview" );
- background_preview->Set_Pos_X( window_background_preview->getUnclippedPixelRect().d_left * global_downscalex, 1 );
- background_preview->Set_Pos_Y( window_background_preview->getUnclippedPixelRect().d_top * global_downscaley, 1 );
+ background_preview->Set_Pos_X( window_background_preview->getUnclippedOuterRect().d_left * global_downscalex, 1 );
+ background_preview->Set_Pos_Y( window_background_preview->getUnclippedOuterRect().d_top * global_downscaley, 1 );
Update_BG_Colors( CEGUI::EventArgs() );
@@ -555,8 +555,8 @@
// set default rect
CEGUI::Window *window_background_preview = CEGUI::WindowManager::getSingleton().getWindow( "window_background_preview" );
- background_preview->m_rect.m_w = window_background_preview->getUnclippedPixelRect().getWidth() * global_downscalex;
- background_preview->m_rect.m_h = window_background_preview->getUnclippedPixelRect().getHeight() * global_downscaley;
+ background_preview->m_rect.m_w = window_background_preview->getUnclippedOuterRect().getWidth() * global_downscalex;
+ background_preview->m_rect.m_h = window_background_preview->getUnclippedOuterRect().getHeight() * global_downscaley;
if( !File_Exists( filename ) )
{
diff -ur smc-1.9/src/objects/sprite.cpp smc-1.9-b/src/objects/sprite.cpp
--- smc-1.9/src/objects/sprite.cpp 2009-04-18 09:55:06.000000000 +0200
+++ smc-1.9-b/src/objects/sprite.cpp 2011-01-19 00:43:37.813217623 +0100
@@ -1663,7 +1663,7 @@
window_name->setText( name );
window_name->setTooltipText( tooltip );
// get text width
- CEGUI::Font *font = CEGUI::FontManager::getSingleton().getFont( "bluebold_medium" );
+ CEGUI::Font *font = &CEGUI::FontManager::getSingleton().get( "bluebold_medium" );
float text_width = 12 + font->getTextExtent( name ) * global_downscalex;
// all names should have the same width
if( text_width > m_editor_window_name_width )
diff -ur smc-1.9/src/video/video.cpp smc-1.9-b/src/video/video.cpp
--- smc-1.9/src/video/video.cpp 2009-07-04 11:46:56.000000000 +0200
+++ smc-1.9-b/src/video/video.cpp 2011-01-19 01:22:45.338524592 +0100
@@ -103,15 +103,15 @@
/* *** *** *** *** *** *** *** CEGUI renderer fake class *** *** *** *** *** *** *** *** *** *** */
-cFake_Renderer :: cFake_Renderer( void )
-{
- d_identifierString = "Fake Renderer";
-}
+//cFake_Renderer :: cFake_Renderer( void )
+//{
+// d_identifierString = "Fake Renderer";
+//}
-cFake_Renderer :: ~cFake_Renderer( void )
-{
+//cFake_Renderer :: ~cFake_Renderer( void )
+//{
-}
+//}
/* *** *** *** *** *** *** *** Video class *** *** *** *** *** *** *** *** *** *** */
@@ -158,7 +158,7 @@
std::string log_dump_dir = "/dev/null";
#endif
// create fake system and renderer
- pGuiSystem = new CEGUI::System( new cFake_Renderer(), rp, NULL, NULL, "", log_dump_dir );
+ pGuiSystem = &CEGUI::System::create( *new cFake_Renderer(), rp, NULL, NULL, NULL, "", log_dump_dir );
}
void cVideo :: Delete_CEGUI_Fake( void ) const
@@ -166,7 +166,7 @@
CEGUI::ResourceProvider *rp = pGuiSystem->getResourceProvider();
CEGUI::Renderer *renderer = pGuiSystem->getRenderer();
- delete pGuiSystem;
+ pGuiSystem->destroy();
pGuiSystem = NULL;
delete renderer;
delete rp;
@@ -177,7 +177,7 @@
// create renderer
try
{
- pGuiRenderer = new CEGUI::OpenGLRenderer( 0, screen->w, screen->h );
+ pGuiRenderer = &CEGUI::OpenGLRenderer::create( CEGUI::Size( screen->w, screen->h ) );
}
// catch CEGUI Exceptions
catch( CEGUI::Exception &ex )
@@ -186,10 +186,10 @@
exit( EXIT_FAILURE );
}
- /* create Resource Provider
- * no need to destroy it later since it is handled by the CEGUI renderer
- */
- CEGUI::DefaultResourceProvider *rp = static_cast<CEGUI::DefaultResourceProvider *>(pGuiRenderer->createResourceProvider());
+ pGuiRenderer->enableExtraStateSettings(true);
+
+ // create Resource Provider
+ CEGUI::DefaultResourceProvider *rp = new CEGUI::DefaultResourceProvider;
// set Resource Provider directories
rp->setResourceGroupDirectory( "schemes", DATA_DIR "/" GUI_SCHEME_DIR "/" );
@@ -215,7 +215,7 @@
// create system
try
{
- pGuiSystem = new CEGUI::System( pGuiRenderer, rp, NULL, NULL, "", pResource_Manager->user_data_dir + "cegui.log" );
+ pGuiSystem = &CEGUI::System::create( *pGuiRenderer, rp, NULL, NULL, NULL, "", pResource_Manager->user_data_dir + "cegui.log" );
}
// catch CEGUI Exceptions
catch( CEGUI::Exception &ex )
@@ -242,7 +242,7 @@
// load the scheme file, which auto-loads the imageset
try
{
- CEGUI::SchemeManager::getSingleton().loadScheme( "TaharezLook.scheme" );
+ CEGUI::SchemeManager::getSingleton().create( "TaharezLook.scheme" );
}
// catch CEGUI Exceptions
catch( CEGUI::Exception &ex )
@@ -254,9 +254,7 @@
// default mouse cursor
pGuiSystem->setDefaultMouseCursor( "TaharezLook", "MouseArrow" );
// force new mouse image
- CEGUI::MouseCursor::getSingleton().setImage( &CEGUI::ImagesetManager::getSingleton().getImageset( "TaharezLook" )->getImage( "MouseArrow" ) );
- // hide CEGUI mouse always because we render it manually
- CEGUI::MouseCursor::getSingleton().hide();
+ CEGUI::MouseCursor::getSingleton().setImage( &CEGUI::ImagesetManager::getSingleton().get( "TaharezLook" ).getImage( "MouseArrow" ) );
// default tooltip
pGuiSystem->setDefaultTooltip( "TaharezLook/Tooltip" );
// create default root window
@@ -553,7 +551,7 @@
pFont->Restore_Textures();
// send new size to CEGUI
- pGuiRenderer->setDisplaySize( CEGUI::Size( static_cast<float>(screen_w), static_cast<float>(screen_h) ) );
+ pGuiSystem->notifyDisplaySizeChanged( CEGUI::Size( static_cast<float>(screen_w), static_cast<float>(screen_h) ) );
// check if CEGUI is initialized
bool cegui_initialized = pGuiSystem->getGUISheet() != NULL;
diff -ur smc-1.9/src/video/video.h smc-1.9-b/src/video/video.h
--- smc-1.9/src/video/video.h 2009-07-04 10:49:50.000000000 +0200
+++ smc-1.9-b/src/video/video.h 2011-01-19 01:16:42.791283379 +0100
@@ -23,7 +23,7 @@
#include "SDL_opengl.h"
// CEGUI
#include "CEGUI.h"
-#include "RendererModules/OpenGLGUIRenderer/openglrenderer.h"
+#include <RendererModules/OpenGL/CEGUIOpenGLRenderer.h>
namespace SMC
{
@@ -129,31 +129,100 @@
EFFECT_IN_AMOUNT
};
-/* *** *** *** *** *** *** *** CEGUI renderer fake class *** *** *** *** *** *** *** *** *** *** */
+/* *** *** *** *** *** *** *** CEGUI renderer fake classes *** *** *** *** *** *** *** *** *** *** */
+// CEGUI 0.7.x requires more 'fake' classes than the 0.6.x version did...
+class cFake_GeometryBuffer : public CEGUI::GeometryBuffer
+{
+ void draw() const {}
+ void setTranslation(const CEGUI::Vector3&) {}
+ void setRotation(const CEGUI::Vector3&) {}
+ void setPivot(const CEGUI::Vector3&) {}
+ void setClippingRegion(const CEGUI::Rect&) {}
+ void appendVertex(const CEGUI::Vertex&) {}
+ void appendGeometry(const CEGUI::Vertex* const, CEGUI::uint) {}
+ void setActiveTexture(CEGUI::Texture*) {}
+ void reset() {}
+ CEGUI::Texture* getActiveTexture() const { return 0; }
+ CEGUI::uint getVertexCount() const { return 0; }
+ CEGUI::uint getBatchCount() const { return 0; }
+ void setRenderEffect(CEGUI::RenderEffect*) {}
+ CEGUI::RenderEffect* getRenderEffect() { return 0; }
+};
-class cFake_Renderer : public CEGUI::Renderer
+class cFake_Texture : public CEGUI::Texture
+{
+public:
+ cFake_Texture() :
+ m_size(1, 1),
+ m_scaling(1, 1) {}
+
+ const CEGUI::Size& getSize() const { return m_size; }
+ const CEGUI::Size& getOriginalDataSize() const { return m_size; }
+ const CEGUI::Vector2& getTexelScaling() const { return m_scaling; }
+ void loadFromFile(const CEGUI::String&, const CEGUI::String&) {}
+ void loadFromMemory(const void*, const CEGUI::Size&, CEGUI::Texture::PixelFormat) {}
+ void saveToMemory(void*) {}
+
+private:
+ CEGUI::Size m_size;
+ CEGUI::Vector2 m_scaling;
+};
+
+class cFake_RenderTarget : public CEGUI::RenderTarget
{
public:
- cFake_Renderer( void );
- virtual ~cFake_Renderer( void );
+ cFake_RenderTarget() : m_area(0, 0, 0, 0) {}
+ void draw(const CEGUI::GeometryBuffer&) {}
+ void draw(const CEGUI::RenderQueue&) {}
+ void setArea(const CEGUI::Rect&) {}
+ const CEGUI::Rect& getArea() const { return m_area; }
+ bool isImageryCache() const { return false; }
+ void activate() {}
+ void deactivate() {}
+ void unprojectPoint(const CEGUI::GeometryBuffer&, const CEGUI::Vector2&, CEGUI::Vector2&) const {}
+
+private:
+ CEGUI::Rect m_area;
+};
- virtual void addQuad(const CEGUI::Rect& dest_rect, float z, const CEGUI::Texture* tex, const CEGUI::Rect& texture_rect, const CEGUI::ColourRect& colours, CEGUI::QuadSplitMode quad_split_mode) {};
- virtual void doRender(void) {};
- virtual void clearRenderList(void) {};
- virtual void setQueueingEnabled(bool setting) {};
- virtual CEGUI::Texture *createTexture(void) { return NULL; };
- virtual CEGUI::Texture *createTexture(const CEGUI::String& filename, const CEGUI::String& resourceGroup) { return NULL; };
- virtual CEGUI::Texture *createTexture(float size) { return NULL; };
- virtual void destroyTexture(CEGUI::Texture* texture) {};
- virtual void destroyAllTextures(void) {};
- virtual bool isQueueingEnabled(void) const { return 0; };
- virtual float getWidth(void) const { return 0; };
- virtual float getHeight(void) const { return 0; };
- virtual CEGUI::Size getSize(void) const { return CEGUI::Size();};
- virtual CEGUI::Rect getRect(void) const { return CEGUI::Rect();};
- virtual unsigned int getMaxTextureSize(void) const { return 0; };
- virtual unsigned int getHorzScreenDPI(void) const { return 0; };
- virtual unsigned int getVertScreenDPI(void) const { return 0; };
+class cFake_Renderer : public CEGUI::Renderer
+{
+public:
+ cFake_Renderer( void ) :
+ m_size(0, 0),
+ m_dpi(0, 0),
+ m_identifierString("Fake Renderer"),
+ m_root(m_target) {}
+ ~cFake_Renderer( void ) {}
+
+ CEGUI::RenderingRoot& getDefaultRenderingRoot() { return m_root; }
+ CEGUI::GeometryBuffer& createGeometryBuffer() { return m_geometry; }
+ void destroyGeometryBuffer(const CEGUI::GeometryBuffer&) {}
+ void destroyAllGeometryBuffers() {}
+ CEGUI::TextureTarget* createTextureTarget() { return 0; }
+ void destroyTextureTarget(CEGUI::TextureTarget*) {}
+ void destroyAllTextureTargets() {}
+ CEGUI::Texture& createTexture() { return m_texture; }
+ CEGUI::Texture& createTexture(const CEGUI::String&, const CEGUI::String&) { return m_texture; }
+ CEGUI::Texture& createTexture(const CEGUI::Size&) { return m_texture; }
+ void destroyTexture(CEGUI::Texture&) {}
+ void destroyAllTextures() {}
+ void beginRendering() {}
+ void endRendering() {}
+ void setDisplaySize(const CEGUI::Size&) {}
+ const CEGUI::Size& getDisplaySize() const { return m_size; }
+ const CEGUI::Vector2& getDisplayDPI() const {return m_dpi; }
+ CEGUI::uint getMaxTextureSize() const { return 0; }
+ const CEGUI::String& getIdentifierString() const { return m_identifierString; }
+
+private:
+ CEGUI::Size m_size;
+ CEGUI::Vector2 m_dpi;
+ CEGUI::String m_identifierString;
+ cFake_GeometryBuffer m_geometry;
+ cFake_Texture m_texture;
+ cFake_RenderTarget m_target;
+ CEGUI::RenderingRoot m_root;
};
/* *** *** *** *** *** *** *** Video class *** *** *** *** *** *** *** *** *** *** */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment