Add changes so Appveyor can do nightly builds for Windows
This commit is contained in:
		
							parent
							
								
									e645f4e838
								
							
						
					
					
						commit
						288a88c060
					
				
					 4 changed files with 149 additions and 108 deletions
				
			
		
							
								
								
									
										41
									
								
								appveyor.yml
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								appveyor.yml
									
										
									
									
									
								
							| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					environment:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  matrix:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - PYTHON: "C:\\Python34"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - hg clone http://hg.gajim.org/gajim-plugins c:\projects\gajim-plugins
 | 
				
			||||||
 | 
					  - hg clone http://hg.gajim.org/python-nbxmpp c:\projects\python-nbxmpp
 | 
				
			||||||
 | 
					  - cd c:\\projects\\python-nbxmpp\\
 | 
				
			||||||
 | 
					  - python setup.py install
 | 
				
			||||||
 | 
					  - ps: c:\\projects\\gajim\\download.ps1
 | 
				
			||||||
 | 
					  - set PATH=C:\\MinGW\\bin;C:\\Program Files (x86)\\gettext-iconv\\bin;%PATH%
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install --upgrade pip"
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install protobuf"
 | 
				
			||||||
 | 
					  - ps: Add-Content C:\Python34\Lib\site-packages\google\__init__.py " "
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install pycrypto"
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install cx_freeze"
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install pypiwin32"
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install pyopenssl"
 | 
				
			||||||
 | 
					  - "%PYTHON%\\python.exe -m pip install --global-option=build_ext --global-option --compiler=mingw32 python-axolotl"
 | 
				
			||||||
 | 
					  - cd c:\\projects\\gajim\\
 | 
				
			||||||
 | 
					  - build.bat
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build: off
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# artifacts:
 | 
				
			||||||
 | 
					#   - path: gajim_built\Gajim.exe
 | 
				
			||||||
 | 
					#   - name: MyApp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on_finish:
 | 
				
			||||||
 | 
					  - ps: Push-AppveyorArtifact gajim_built\Gajim.exe -FileName "Gajim-16.10.1-$($env:APPVEYOR_REPO_COMMIT).exe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#on_success:
 | 
				
			||||||
 | 
					#  You can use this step to upload your artifacts to a public website.
 | 
				
			||||||
 | 
					#  See Appveyor's documentation for more details. Or you can simply
 | 
				
			||||||
 | 
					#  access your wheels from the Appveyor "artifacts" tab for your build.
 | 
				
			||||||
| 
						 | 
					@ -4,8 +4,8 @@ mkdir gajim_built
 | 
				
			||||||
hg archive gajim_built
 | 
					hg archive gajim_built
 | 
				
			||||||
xcopy ..\gajim-plugins\plugin_installer gajim_built\plugins\plugin_installer /e /i
 | 
					xcopy ..\gajim-plugins\plugin_installer gajim_built\plugins\plugin_installer /e /i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
copy msgfmt.exe gajim_built
 | 
					rem copy C:\Python34\Lib\site-packages\gnome\msgfmt.exe gajim_built
 | 
				
			||||||
copy msvcr100.dll gajim_built
 | 
					rem copy C:\Windows\System32\msvcr100.dll gajim_built
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd gajim_built
 | 
					cd gajim_built
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,8 +17,8 @@ move build\exe.win32-3.4 .
 | 
				
			||||||
rmdir build
 | 
					rmdir build
 | 
				
			||||||
rename exe.win32-3.4 build
 | 
					rename exe.win32-3.4 build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REM for snarl plugin
 | 
					rem REM for snarl plugin
 | 
				
			||||||
xcopy ..\win32com build\win32com /e /i
 | 
					rem xcopy ..\win32com build\win32com /e /i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"C:\Program Files (x86)\NSIS\makensis" gajim.nsi
 | 
					"C:\Program Files (x86)\NSIS\makensis" gajim.nsi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -149,7 +149,7 @@ Section "Gajim" SecGajim
 | 
				
			||||||
	File "THANKS.artists"
 | 
						File "THANKS.artists"
 | 
				
			||||||
	File /r "build"
 | 
						File /r "build"
 | 
				
			||||||
    SetOutPath "$INSTDIR\build"
 | 
					    SetOutPath "$INSTDIR\build"
 | 
				
			||||||
    File "msvcr100.dll"
 | 
					; File "msvcr100.dll"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
 | 
						WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
 | 
				
			||||||
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
 | 
						WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										206
									
								
								setup_win32.py
									
										
									
									
									
								
							
							
						
						
									
										206
									
								
								setup_win32.py
									
										
									
									
									
								
							| 
						 | 
					@ -1,135 +1,136 @@
 | 
				
			||||||
## setup_win32.py (run me as python setup_win32.py py2exe -O2)
 | 
					# setup_win32.py (run me as python setup_win32.py py2exe -O2)
 | 
				
			||||||
##
 | 
					#
 | 
				
			||||||
## Copyright (C) 2003-2014 Yann Leboulanger <asterix AT lagaule.org>
 | 
					# Copyright (C) 2003-2014 Yann Leboulanger <asterix AT lagaule.org>
 | 
				
			||||||
## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com>
 | 
					# Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com>
 | 
				
			||||||
## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
 | 
					# Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
 | 
				
			||||||
##
 | 
					#
 | 
				
			||||||
## This file is part of Gajim.
 | 
					# This file is part of Gajim.
 | 
				
			||||||
##
 | 
					#
 | 
				
			||||||
## Gajim is free software; you can redistribute it and/or modify
 | 
					# Gajim is free software; you can redistribute it and/or modify
 | 
				
			||||||
## it under the terms of the GNU General Public License as published
 | 
					# it under the terms of the GNU General Public License as published
 | 
				
			||||||
## by the Free Software Foundation; version 3 only.
 | 
					# by the Free Software Foundation; version 3 only.
 | 
				
			||||||
##
 | 
					#
 | 
				
			||||||
## Gajim is distributed in the hope that it will be useful,
 | 
					# Gajim is distributed in the hope that it will be useful,
 | 
				
			||||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
## GNU General Public License for more details.
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
##
 | 
					#
 | 
				
			||||||
## You should have received a copy of the GNU General Public License
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 | 
					# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
##
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cx_Freeze import setup, Executable
 | 
					 | 
				
			||||||
import glob
 | 
					 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import site
 | 
					import site
 | 
				
			||||||
 | 
					from cx_Freeze import setup, Executable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
site_dir = site.getsitepackages()[1]
 | 
					SITEDIR = site.getsitepackages()[1]
 | 
				
			||||||
include_dll_path = os.path.join(site_dir, "gnome")
 | 
					INCLUDE_DLL_PATH = os.path.join(SITEDIR, "gnome")
 | 
				
			||||||
sys.path.append('src')
 | 
					sys.path.append('src')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Collect the list of missing dll when cx_freeze builds the app
 | 
					# Collect the list of missing dll when cx_freeze builds the app
 | 
				
			||||||
missing_dll = ['libgtk-3-0.dll',
 | 
					
 | 
				
			||||||
 | 
					MISSING_DLL = ['libgtk-3-0.dll',
 | 
				
			||||||
               'libgdk-3-0.dll',
 | 
					               'libgdk-3-0.dll',
 | 
				
			||||||
               'libatk-1.0-0.dll',
 | 
					               'libatk-1.0-0.dll',
 | 
				
			||||||
               'libcairo-gobject-2.dll',
 | 
					 | 
				
			||||||
               'libgdk_pixbuf-2.0-0.dll',
 | 
					               'libgdk_pixbuf-2.0-0.dll',
 | 
				
			||||||
               'libjpeg-8.dll',
 | 
					               'libjpeg-8.dll',
 | 
				
			||||||
               'libpango-1.0-0.dll',
 | 
					               'libpango-1.0-0.dll',
 | 
				
			||||||
               'libpangocairo-1.0-0.dll',
 | 
					               'libpangocairo-1.0-0.dll',
 | 
				
			||||||
               'libpangoft2-1.0-0.dll',
 | 
					               'libpangoft2-1.0-0.dll',
 | 
				
			||||||
               'libpangowin32-1.0-0.dll',
 | 
					               'libpangowin32-1.0-0.dll',
 | 
				
			||||||
               'libgnutls-26.dll',
 | 
					               'libgnutls-28.dll',
 | 
				
			||||||
               'libp11-kit-0.dll',
 | 
					               'libp11-kit-0.dll',
 | 
				
			||||||
               'libaerial-0.dll',
 | 
					               'libgstrtp-1.0-0.dll',
 | 
				
			||||||
'libgstrtp-1.0-0.dll',
 | 
					               'libgstrtsp-1.0-0.dll',
 | 
				
			||||||
'libcurl-4.dll',
 | 
					               'libgstrtspserver-1.0-0.dll',
 | 
				
			||||||
'libgstrtsp-1.0-0.dll',
 | 
					               'libfarstream-0.2-5.dll',
 | 
				
			||||||
'libdb-4.8.dll',
 | 
					               'libgstsdp-1.0-0.dll',
 | 
				
			||||||
'libgstrtspserver-1.0-0.dll',
 | 
					               'libgsttag-1.0-0.dll',
 | 
				
			||||||
'libfarstream-0.2-2.dll',
 | 
					               'libgssdp-1.0-3.dll',
 | 
				
			||||||
'libgstsdp-1.0-0.dll',
 | 
					               'libgstvideo-1.0-0.dll',
 | 
				
			||||||
'libfftw3.dll',
 | 
					               'libgstapp-1.0-0.dll',
 | 
				
			||||||
'libgsttag-1.0-0.dll',
 | 
					               'libgupnp-1.0-4.dll',
 | 
				
			||||||
'libfluidsynth-1.dll',
 | 
					               'libgstaudio-1.0-0.dll',
 | 
				
			||||||
'libgsturidownloader-1.0-0.dll',
 | 
					               'libgupnp-igd-1.0-4.dll',
 | 
				
			||||||
'libgraphene-1.0-0.dll',
 | 
					               'libgstbase-1.0-0.dll',
 | 
				
			||||||
'libgstvalidate-1.0-0.dll',
 | 
					               'libnice-10.dll',
 | 
				
			||||||
'libgssdp-1.0-3.dll',
 | 
					               'librsvg-2-2.dll',
 | 
				
			||||||
'libgstvalidate-default-overrides-1.0-0.dll',
 | 
					               'libvisual-0.4-0.dll',
 | 
				
			||||||
'libgstallocators-1.0-0.dll',
 | 
					               'libwebp-5.dll',
 | 
				
			||||||
'libgstvideo-1.0-0.dll',
 | 
					               'libgstriff-1.0-0.dll',
 | 
				
			||||||
'libgstapp-1.0-0.dll',
 | 
					               'libepoxy-0.dll',
 | 
				
			||||||
'libgupnp-1.0-4.dll',
 | 
					               'libharfbuzz-0.dll',
 | 
				
			||||||
'libgstaudio-1.0-0.dll',
 | 
					               'libtiff-5.dll',
 | 
				
			||||||
'libgupnp-igd-1.0-4.dll',
 | 
					               'libjasper-1.dll',
 | 
				
			||||||
'libgstbadbase-1.0-0.dll',
 | 
					               'libgstpbutils-1.0-0.dll',
 | 
				
			||||||
'libidn-11.dll',
 | 
					               'liborc-0.4-0.dll',
 | 
				
			||||||
'libgstbadvideo-1.0-0.dll',
 | 
					               'libgstnet-1.0-0.dll',
 | 
				
			||||||
'libjack.dll',
 | 
					               'libsoup-2.4-1.dll',
 | 
				
			||||||
'libgstbase-1.0-0.dll',
 | 
					               'liborc-test-0.4-0.dll',
 | 
				
			||||||
'libjasper-1.dll',
 | 
					               'libavcodec-57.dll',
 | 
				
			||||||
'libgstbasecamerabinsrc-1.0-0.dll',
 | 
					               'libavutil-55.dll',
 | 
				
			||||||
'libnice-10.dll',
 | 
					               'libswresample-2.dll',
 | 
				
			||||||
'libgstcheck-1.0-0.dll',
 | 
					               'libavformat-57.dll',
 | 
				
			||||||
'libnotify-4.dll',
 | 
					               'libavfilter-6.dll',
 | 
				
			||||||
'libgstcodecparsers-1.0-0.dll',
 | 
					               'libgssapi-3.dll',
 | 
				
			||||||
'libopenexr-2.dll',
 | 
					               'libopenssl.dll',
 | 
				
			||||||
'libgstcontroller-1.0-0.dll',
 | 
					               'libsqlite3-0.dll',
 | 
				
			||||||
'libopenjp2.dll',
 | 
					               'libproxy.dll',
 | 
				
			||||||
'libgstfft-1.0-0.dll',
 | 
					               'libstdc++.dll',
 | 
				
			||||||
'liborc-0.4-0.dll',
 | 
					               'libgstfft-1.0-0.dll']
 | 
				
			||||||
'libgstgl-1.0-0.dll',
 | 
					
 | 
				
			||||||
'liborc-test-0.4-0.dll',
 | 
					 | 
				
			||||||
'libgstinsertbin-1.0-0.dll',
 | 
					 | 
				
			||||||
'libproxy.dll',
 | 
					 | 
				
			||||||
'libgstmpegts-1.0-0.dll',
 | 
					 | 
				
			||||||
'librsvg-2-2.dll',
 | 
					 | 
				
			||||||
'libgstnet-1.0-0.dll',
 | 
					 | 
				
			||||||
'libsoup-2.4-1.dll',
 | 
					 | 
				
			||||||
'libgstpbutils-1.0-0.dll',
 | 
					 | 
				
			||||||
'libsqlite3-0.dll',
 | 
					 | 
				
			||||||
'libgstphotography-1.0-0.dll',
 | 
					 | 
				
			||||||
'libvisual-0.4-0.dll',
 | 
					 | 
				
			||||||
'libgstreamer-1.0-0.dll',
 | 
					 | 
				
			||||||
'libwebp-5.dll',
 | 
					 | 
				
			||||||
'libgstriff-1.0-0.dll',
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# We need to add all the libraries too (for themes, etc..)
 | 
					# We need to add all the libraries too (for themes, etc..)
 | 
				
			||||||
gtk_libs = {
 | 
					GTK_LIBS = {
 | 
				
			||||||
 'etc': ['dbus-1', 'fonts', 'gtk-3.0', 'pango'],
 | 
					    'etc': ['dbus-1', 'fonts', 'gtk-3.0', 'pango'],
 | 
				
			||||||
 'lib': ['aspell-0.60', 'enchant', 'farstream-0.2', 'gdbus-2.0', 'gdk-pixbuf-2.0', 'gio', 'girepository-1.0', 'gobject-introspection', 'gstreamer-1.0', 'gtk-3.0', 'libcanberra-0.30'],
 | 
					    'lib': ['farstream-0.2', 'gdbus-2.0',
 | 
				
			||||||
 'share': ['dbus-1', 'enchant', 'farstream', 'fonts', 'gir-1.0', 'glib-2.0', 'gobject-introspection-1.0', 'gst-plugins-bad', 'gst-plugins-base', 'gstreamer-1.0', 'gupnp-av', 'gupnp-dlna-2.0', 'icons', 'ssl', 'themes', 'xml'],
 | 
					            'gdk-pixbuf-2.0', 'gio', 'girepository-1.0',
 | 
				
			||||||
 | 
					            'gstreamer-1.0', 'gtk-3.0'],
 | 
				
			||||||
 | 
					    'share': ['dbus-1', 'farstream', 'fonts',
 | 
				
			||||||
 | 
					              'glib-2.0',
 | 
				
			||||||
 | 
					              'gst-plugins-base', 'gstreamer-1.0', 'gupnp-av',
 | 
				
			||||||
 | 
					              'gupnp-dlna-2.0', 'icons', 'ssl', 'themes', 'xml']
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# share 'gobject-introspection-1.0'
 | 
				
			||||||
 | 
					# , 'enchant' 'gir-1.0',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#lib 'gobject-introspection'
 | 
				
			||||||
 | 
					# 'aspell-0.60', 'enchant',  'gst-plugins-bad',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create the list of includes as cx_freeze likes
 | 
					# Create the list of includes as cx_freeze likes
 | 
				
			||||||
include_files = []
 | 
					INCLUDE_FILES = []
 | 
				
			||||||
for dll in missing_dll:
 | 
					for dll in MISSING_DLL:
 | 
				
			||||||
    include_files.append((os.path.join(include_dll_path, dll), dll))
 | 
					    INCLUDE_FILES.append((os.path.join(INCLUDE_DLL_PATH, dll), dll))
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
# Let's add gtk libraries folders and files
 | 
					# Let's add gtk libraries folders and files
 | 
				
			||||||
for folder in gtk_libs:
 | 
					for folder in GTK_LIBS:
 | 
				
			||||||
    for lib in gtk_libs[folder]:
 | 
					    for lib in GTK_LIBS[folder]:
 | 
				
			||||||
        folder_lib = os.path.join(folder, lib)
 | 
					        folder_lib = os.path.join(folder, lib)
 | 
				
			||||||
        include_files.append((os.path.join(include_dll_path, folder_lib), folder_lib))
 | 
					        INCLUDE_FILES.append((os.path.join(INCLUDE_DLL_PATH, folder_lib),
 | 
				
			||||||
# Let's add gtk locales that we support in Gajim
 | 
					                              folder_lib))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Let's add gtk locales that we support in Gajim
 | 
				
			||||||
for language in next(os.walk('po'))[1]:
 | 
					for language in next(os.walk('po'))[1]:
 | 
				
			||||||
    target_dir = os.path.join('share', 'locale', language)
 | 
					    target_dir = os.path.join('share', 'locale', language)
 | 
				
			||||||
    language_dir = os.path.join(include_dll_path, target_dir)
 | 
					    language_dir = os.path.join(INCLUDE_DLL_PATH, target_dir)
 | 
				
			||||||
    if os.path.isdir(language_dir):
 | 
					    if os.path.isdir(language_dir):
 | 
				
			||||||
        include_files.append((language_dir, target_dir))
 | 
					        INCLUDE_FILES.append((language_dir, target_dir))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
options = {
 | 
					OPTIONS = {
 | 
				
			||||||
    'build_exe': {
 | 
					    'build_exe': {
 | 
				
			||||||
        'compressed': False,
 | 
					        'compressed': False,
 | 
				
			||||||
        'includes': ['gi', 'Crypto.PublicKey.DSA', 'Crypto.Hash.HMAC',
 | 
					        'includes': ['gi', 'Crypto.PublicKey.DSA', 'Crypto.Hash.HMAC',
 | 
				
			||||||
            'numbers', 'win32com.client', 'win32com.server'
 | 
					                     'numbers', 'win32com.client', 'win32com.server',
 | 
				
			||||||
        ],
 | 
					                     'cryptography', 'pkg_resources'],
 | 
				
			||||||
        'packages': ['gi', 'cffi', 'cryptography'],
 | 
					        'packages': ['gi', 'cffi', 'cryptography', 'google', 'axolotl'],
 | 
				
			||||||
        'base': 'Win32GUI',
 | 
					        'base': 'Win32GUI',
 | 
				
			||||||
        'include_files': include_files,
 | 
					        'include_files': INCLUDE_FILES,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,7 +143,6 @@ setup(
 | 
				
			||||||
    url='http://gajim.org/',
 | 
					    url='http://gajim.org/',
 | 
				
			||||||
    download_url='http://gajim.org/downloads.php',
 | 
					    download_url='http://gajim.org/downloads.php',
 | 
				
			||||||
    license='GPL',
 | 
					    license='GPL',
 | 
				
			||||||
    options=options,
 | 
					    options=OPTIONS,
 | 
				
			||||||
    executables=[Executable('src/gajim.py', icon='data/pixmaps/gajim.ico'),
 | 
					    executables=[Executable('src/gajim.py', icon='data/pixmaps/gajim.ico')],
 | 
				
			||||||
		Executable('src/history_manager.py', icon='data/pixmaps/gajim.ico')],
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue