build: Several updates of the build scripts
- Update of waf script (based on custom fork https://github.com/cawka/waf) - Redesign the way default compile flags are determined. This includes a small semantical change with flag processing: * there are now "general" compiler and link flags. These are added (if supported) even if CXXFLAGS and/or LINKFLAGS environmental variables are set. * optimization/debug-mode flags that are applied only if CXXFLAGS and/or LINKFLAGS environmental variables are not set. Change-Id: I6affeed08cc49bca28f076839e40ff790e57437b Refs: #2209
This commit is contained in:
1 parent
d7bb88b53a
commit
76818632e0
2 files changed
+109
-34
No files matched your search
@@ -1,55 +1,58 @@
|
||||
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
||||
#
|
||||
# Copyright (c) 2014, Regents of the University of California
|
||||
#
|
||||
# GPL 3.0 license, see the COPYING.md file for more information
|
||||
|
||||
from waflib import Logs, Configure
|
||||
from waflib import Logs, Configure, Utils
|
||||
|
||||
def options(opt):
|
||||
opt.add_option('--debug', '--with-debug', action='store_true', default=False, dest='debug',
|
||||
help='''Compile in debugging mode without optimizations (-O0 or -Og)''')
|
||||
|
||||
def configure(conf):
|
||||
areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
|
||||
defaultFlags = ['-std=c++0x', '-std=c++11',
|
||||
'-stdlib=libc++', # clang on OSX < 10.9 by default uses gcc's
|
||||
# libstdc++, which is not C++11 compatible
|
||||
'-pedantic', '-Wall']
|
||||
cxx = conf.env['CXX_NAME'] # CXX_NAME represents generic name of the compiler
|
||||
if cxx == 'gcc':
|
||||
flags = GccFlags()
|
||||
elif cxx == 'clang':
|
||||
flags = ClangFlags()
|
||||
else:
|
||||
flags = CompilerFlags()
|
||||
Logs.warn('The code has not been yet tested with %s compiler' % cxx)
|
||||
|
||||
areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
|
||||
|
||||
# General flags will alway be applied (e.g., selecting C++11 mode)
|
||||
generalFlags = flags.getGeneralFlags(conf)
|
||||
conf.add_supported_cxxflags(generalFlags['CXXFLAGS'])
|
||||
conf.add_supported_linkflags(generalFlags['LINKFLAGS'])
|
||||
conf.env.DEFINES += generalFlags['DEFINES']
|
||||
|
||||
# Debug or optimization CXXFLAGS and LINKFLAGS will be applied only if the
|
||||
# corresponding environment variables are not set.
|
||||
# DEFINES will be always applied
|
||||
if conf.options.debug:
|
||||
conf.define('_DEBUG', 1)
|
||||
defaultFlags += ['-O0',
|
||||
'-Og', # gcc >= 4.8
|
||||
'-g3',
|
||||
'-fcolor-diagnostics', # clang
|
||||
'-fdiagnostics-color', # gcc >= 4.9
|
||||
'-Werror',
|
||||
'-Wno-error=maybe-uninitialized', # Bug #1560
|
||||
'-Wno-error=unneeded-internal-declaration', # Bug #1588
|
||||
'-Wno-error=deprecated-register', # Bug #2288
|
||||
]
|
||||
extraFlags = flags.getDebugFlags(conf)
|
||||
|
||||
if areCustomCxxflagsPresent:
|
||||
missingFlags = [x for x in defaultFlags if x not in conf.env.CXXFLAGS]
|
||||
missingFlags = [x for x in extraFlags['CXXFLAGS'] if x not in conf.env.CXXFLAGS]
|
||||
if len(missingFlags) > 0:
|
||||
Logs.warn("Selected debug mode, but CXXFLAGS is set to a custom value '%s'"
|
||||
% " ".join(conf.env.CXXFLAGS))
|
||||
Logs.warn("Default flags '%s' are not activated" % " ".join(missingFlags))
|
||||
else:
|
||||
conf.add_supported_cxxflags(defaultFlags)
|
||||
else:
|
||||
defaultFlags += ['-O2', '-g']
|
||||
if not areCustomCxxflagsPresent:
|
||||
conf.add_supported_cxxflags(defaultFlags)
|
||||
extraFlags = flags.getOptimizedFlags(conf)
|
||||
|
||||
# clang on OSX < 10.9 by default uses gcc's libstdc++, which is not C++11 compatible
|
||||
conf.add_supported_linkflags(['-stdlib=libc++'])
|
||||
if not areCustomCxxflagsPresent:
|
||||
conf.add_supported_cxxflags(extraFlags['CXXFLAGS'])
|
||||
conf.add_supported_cxxflags(extraFlags['LINKFLAGS'])
|
||||
|
||||
conf.env.DEFINES += extraFlags['DEFINES']
|
||||
|
||||
@Configure.conf
|
||||
def add_supported_cxxflags(self, cxxflags):
|
||||
"""
|
||||
Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
|
||||
"""
|
||||
if len(cxxflags) == 0:
|
||||
return
|
||||
|
||||
self.start_msg('Checking supported CXXFLAGS')
|
||||
|
||||
supportedFlags = []
|
||||
@@ -65,6 +68,9 @@ def add_supported_linkflags(self, linkflags):
|
||||
"""
|
||||
Check which linkflags are supported by compiler and add them to env.LINKFLAGS variable
|
||||
"""
|
||||
if len(linkflags) == 0:
|
||||
return
|
||||
|
||||
self.start_msg('Checking supported LINKFLAGS')
|
||||
|
||||
supportedFlags = []
|
||||
@@ -74,3 +80,72 @@ def add_supported_linkflags(self, linkflags):
|
||||
|
||||
self.end_msg(' '.join(supportedFlags))
|
||||
self.env.LINKFLAGS = supportedFlags + self.env.LINKFLAGS
|
||||
|
||||
|
||||
class CompilerFlags(object):
|
||||
def getGeneralFlags(self, conf):
|
||||
"""Get dict {'CXXFLAGS':[...], LINKFLAGS:[...], DEFINES:[...]} that are always needed"""
|
||||
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': []}
|
||||
|
||||
def getDebugFlags(self, conf):
|
||||
"""Get tuple {CXXFLAGS, LINKFLAGS, DEFINES} that are needed in debug mode"""
|
||||
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': ['_DEBUG']}
|
||||
|
||||
def getOptimizedFlags(self, conf):
|
||||
"""Get tuple {CXXFLAGS, LINKFLAGS, DEFINES} that are needed in optimized mode"""
|
||||
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': ['NDEBUG']}
|
||||
|
||||
class GccBasicFlags(CompilerFlags):
|
||||
"""This class defines base flags that work for gcc and clang compiler"""
|
||||
def getDebugFlags(self, conf):
|
||||
flags = super(GccBasicFlags, self).getDebugFlags(conf)
|
||||
flags['CXXFLAGS'] += ['-pedantic', '-Wall',
|
||||
'-O0',
|
||||
'-g3',
|
||||
'-Werror',
|
||||
'-Wno-error=maybe-uninitialized', # Bug #1615
|
||||
]
|
||||
return flags
|
||||
|
||||
def getOptimizedFlags(self, conf):
|
||||
flags = super(GccBasicFlags, self).getOptimizedFlags(conf)
|
||||
flags['CXXFLAGS'] += ['-pedantic', '-Wall', '-O2', '-g']
|
||||
return flags
|
||||
|
||||
class GccFlags(GccBasicFlags):
|
||||
def getGeneralFlags(self, conf):
|
||||
flags = super(GccFlags, self).getGeneralFlags(conf)
|
||||
version = tuple(int(i) for i in conf.env['CC_VERSION'])
|
||||
if version < (4, 6, 0):
|
||||
conf.fatal('The version of gcc you are using (%s) is too old.\n' %
|
||||
'.'.join(conf.env['CC_VERSION']) +
|
||||
'The minimum supported gcc version is 4.6.0.')
|
||||
elif version < (4, 7, 0):
|
||||
flags['CXXFLAGS'] += ['-std=c++0x']
|
||||
else:
|
||||
flags['CXXFLAGS'] += ['-std=c++11']
|
||||
return flags
|
||||
|
||||
def getDebugFlags(self, conf):
|
||||
flags = super(GccFlags, self).getDebugFlags(conf)
|
||||
flags['CXXFLAGS'] += ['-Og', # gcc >= 4.8
|
||||
'-fdiagnostics-color', # gcc >= 4.9
|
||||
]
|
||||
return flags
|
||||
|
||||
class ClangFlags(GccBasicFlags):
|
||||
def getGeneralFlags(self, conf):
|
||||
flags = super(ClangFlags, self).getGeneralFlags(conf)
|
||||
flags['CXXFLAGS'] += ['-std=c++11',
|
||||
'-Wno-error=unneeded-internal-declaration', # Bug #1588
|
||||
'-Wno-error=deprecated-register',
|
||||
]
|
||||
if Utils.unversioned_sys_platform() == "darwin":
|
||||
flags['CXXFLAGS'] += ['-stdlib=libc++']
|
||||
flags['LINKFLAGS'] += ['-stdlib=libc++']
|
||||
return flags
|
||||
|
||||
def getDebugFlags(self, conf):
|
||||
flags = super(ClangFlags, self).getDebugFlags(conf)
|
||||
flags['CXXFLAGS'] += ['-fcolor-diagnostics']
|
||||
return flags
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# encoding: ISO8859-1
|
||||
# Thomas Nagy, 2005-2014
|
||||
# Thomas Nagy, 2005-2015
|
||||
|
||||
"""
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@@ -32,10 +32,10 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import os, sys, inspect
|
||||
|
||||
VERSION="1.8.2"
|
||||
REVISION="a01aa13963437a19e5d8748cf2afd71b"
|
||||
VERSION="1.8.5"
|
||||
REVISION="d178df7a9bb732db109001d6b461550f"
|
||||
INSTALL=''
|
||||
C1='#/'
|
||||
C1='#8'
|
||||
C2='#.'
|
||||
C3='#)'
|
||||
cwd = os.getcwd()
|
||||
@@ -164,5 +164,5 @@ if __name__ == '__main__':
|
||||
Scripting.waf_entry_point(cwd, VERSION, wafdir)
|
||||
|
||||
#==>
|
||||
#BZh91AY&SY�ÉLt"ïÿÿÿ¼@ÿÿÿÿÿÿÿÿÿÿÿ�†¢¦x€�#)!2„Xaé\÷x¬#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)/ºúÕ=[Ý{{žÒá¯Z»må˳]9y›o�3ÏZÝ»½õ÷SÒû5Km»¶÷מ£ß4àÖLÕ—sª_^/^Ü&.ëm˜}+Üe#):z{·¡íªì÷ºìUg•:vÚi>{×�˜×ÍÞçÁï>jWlúûí÷Ɔ»·}Ýw½öpôYÛÆÞÚîÇ>ï¯m¼Øv,¶uÈ#)#)#.#)#)yì#)ƒÉl€#È(MÛÞœÀYÆ`Ë'F]Ûg¹î¡ ¶ƒ\ê¶#.Bí©¡I#)×Cvf(’ªR]íÒOcAT””•QZÉI#.7 mƒËmªéíÜ<z÷޽[vÎìê¬d¶hÒMyU,j¦zS/ݽ{wß};}ÛºÜ{|ûŸ^ÖY}k¼íŽó7Zö³Nì»[Vónßb¾÷s¯WÛ¶hä#)R¦Æ¨#/¢‚{$�Q‡•›™Ü»¯3Æ€#)¡{w³%¶d‰k{Û½Ûp $UPÞg»š][iŽ™½º'¹ÚíÎÞðÉÞ·‡[½n÷ÝæÛ·ÎßYUH’:lVÖíÔš˜×mòÝom;gps³:ÉßõOkl®õãxß{Ü÷ÚµÞÞõXZcÊžÜצ¼�J@#/U&ûÞ<™5õöó½=P®“۽Îo³¾òv}{Öw\ç{ÛÞíu=鯽ï5>÷w³×¾ÖiÛ{ºgº»Þì}ëÜoJíâ®yžíÅv;·‘ëÛ6÷¼jöª´¥¼u¶Îí¾ª•B’n7nï}Ís³ïžï]{çÝÙïI^ÞÎ>ÙãåÛ4¸·Ý£]´wvÙ]Ëžî6½ç]½wÓ0zOžó{ÌöoƒÛƒtÜÓ€P¡P ”Øwf²i»r޶#/¹u´œçFæù=öò<º—Uó½ç•ÛÒ¥8¬Á¥—¶ÆJ�¾,¶Þ|sß4PSß\èT#)‡ÞÍîå}ÝÞw¾>ûÛ\àxï¾îñ{�D½Ø[®�ºÓ›ïmµowbn£#/6Ï^—»µÙÉ«�ɽ¾ïuWÑ_{®ó>öñ2}ëáô€Õëï®ïW¯Q×»Ð=öo©_}»°zµ»j[}híîç½÷}öíÝ.·ºÜ÷[Çw®u·´ßl6µçw9á{[NOrÙµäﶪÒ6önæPO¬Ó•,ë}x>&ƒ ÓCê¼5[Œ´ØÕ÷lóž{ÞÁð¢@iñ#.:ù¦�}s{¸>ÊvçNÞös›Ó›Å[Ÿqœ«ßmn÷w½ÙõõióÎ7½'ßX}÷»A·\¥Ë)¥¢ûío}bù÷T‰õ½€Å„)õ¡î¶Èè)¥³%Ú³Þó»°6Nîwž¬i¼û[ï¼à2BÍT+g!÷°ãåÓ‡·¬vîw4=.s›¥soº�YÝÖÝé½´(ªH½vâv‹·*�Ù÷›šìçÓݬ«¯s{¬®ûÙïww¯¾õÞ;_ëßN¥_z·fçÞÚ÷n©Nœ�;ÞÝäS½ŠÓªÕé^¾Þ2Ýv{ÞíÉ÷šûìKQm\¯#½zÝäÝƒêø´%4B#) #)#) É£@#)&�L&¦ž©£O(PÓMSÐÔšši�)�'¦�5£M©é=!§¨hz�¡ê#)#)#)#)#) ˆ‚#)"b2#jTü§µSÍÒ™êi”zFÔò�S ¨#)È€#)#)Iê”’ ªj~Tª=¥6§¦¡§©£Ò#)#)#)#)#)=@�#)#)#)‘#)� ¦šM#)M`M&OL�žQ²ž“iP#)#)#)&¢ €€#@&™4 éSõOh¦Ô�eêÕzž¦›Ò›P#)#)#)Ð#)#)û|Ûú¶ÛWtI?³’wV5sZÍßom©»%‰£á¶Ôå)) ŠZ$‹‚¢#){V@åöüòÎX?æì¿eB?8ý0LØã©‡š.$…5dÆ•ˆƒŒÅ3d�‚o�ç÷ŸAÿ´“ŸRù¤ :‚]X�A#)»/¾_Ý„sE¾M̺Ôq·ª¥ŒŽÒ8æœÈó+¹IŽ0zË|-8Þ]Y‰ÔÁt>±q/eBœJµJ”ÄâqQa³[à’;Æöu8@!ÿÄð‹¿äÈx±!4…(ÒDa†*„¨¥"CJˆÌ�Jƒ@Ä"›*„ˆ® ‰ÞI#)iD(ÞE(#¢UH€û! °¤ª8šÂ•¤#/AÔ )æUÛ%€P`ÌJC3LH„È…Í£fh‰)©±‘2RŒÅ-¤¨je,P4$&�©Q´”DJ™¢l¡l–JÌ ‹L)A±¤Œ›hÅI)iª$%–’5$‚`Ê"F¶“T,šliblŒPRJ)¤HÄÓ6-�SU¦ª¥$ÖXŒ“$j6‚𥫙³4¦©,™fª%M±1³T’T†™’I5Ì�HÍhÔ„lšf‚‰(Ñd´�Z)J¤†lb`…‚‰šLM6(`›)°L ‘f*d™ˆ“%²@‘KŠÉdI�„)%%6)2AQ)Iµ j1¨lІ,L(¢”��%iDÆ,LTl™M¢’e¤‘4²4‘’T¢Šf¤*iM†$Â@¦ÄjK#.›D�l‚‘&**"#/É�¦l`’MIE$dBDÌˆÍ I™31’³)�¡,b$"HJ“a I4ÒÐbLš,¥0lÚ#M"�¢¤€J3A¤I›RÍ,¥”†“K$Ù¦Q 5,RY‘±£+$ÌI"ŠÀ3c,�¨’È*#/Yš1´YCd£2›4IKZl„Êc$jL”™…2RÍF’Ê•L ¢“QdA%() FHi‘¤H4–5¤Z¬„34‹&aJB›I²E²E£I2I(J,”4�`"���“,E#.‘6k1“RXÐJl2™¥1 #.…¦MRÆ,ÔØ¤Ê,ÒbJÙ$…”T‘bSLh� Å&M)&a²lš2d*#)„k$ÊÄÃh,›%!K&Q�Ši ÉL¤eˆÁi)TÙ¬mˆL‚dJHŠÑ�±¤™¬ŠLhÂHaQ¤2@KÑ´jR1EbKI‘™¢“ ,ˆ”!ŠY#)Z4™eFi#.›U-m ¤ª(É© k%ÊHÚ)’™&1¬–‹4HÓLÓM’”¢ÔÈÆÍ±(Щ²ÊFh¡K_‚ѲV�ÈK(ÉMbÖŠÅ¢£BfTDÓl–ƒTÆ¥ªb(lXŒ4¤IÌld1¢¡–¡5E‘MdÈle•E¡bdÌjZYŒ�¨°ÌÊj³F™Y©¥°Ö4ÙD–Te*±MZM¤+6V³RRÃm1B™b´i©Q%¦QDe�¢±¶f�²Ufj�V*J6ØÚ6%CDB¨¤*#.±ª5Ô†Ö!5’E´Ñ¥QH&ˆÃ5(”Ú•F£d“hƤ,jšLÚµ›Vš±ašÆË"eMdI–šaI3j¥¨¦ÌÔÒ¦kJ¥dJ˜ÛJ™JM©¦ÔÙlR#.lÖfd’²ÅÁ©-¥´²ZšFÄ@`i±¤£H„Q°�D1mÉ0)µRD¢Å2šÆÒ“MŠŒ’h4”Â…ŠeDX¤–cBi¢™)“ÊlÐÆ‰ CbÅ™!ŒR³RXm™dË,Ì!#/RÉ�ƒ ±QFÆÄ””dh4‹2‹S1³¤¬i„̓FM‹lËP)¢„±DE")´d,Í¢Å��Š4"¢4––H¦`´)e ÂH“�šJFS`ÉlB’Ò$“f¥š¨Ò©™‹#.Š”Òl�¤Ê,ÑV(�Ì(’‰I$ÙI4•%£)3H†•5–lme6V*16)4Ô“,É¢¦[R2e-%%²$”K1 Ó(ÑD#.e“d¥LDÔ�‘h¬FØM‹EFŠ6ÄVšL2LÑ%&‘h¦#)6)"±`Û-4’T†£Y3#.%,Èl…hѰ†Ñ¨“F„Ë#/ÐDEd¶*c()5JQ5cXÊfhB¢¤“i…ID–��ÑY¶©‹2j,Q‰+%¡¥4±¥%4IRÉ*JR”£VÄ¥"‹%+e%�²i*,m¶f)”l¦²¨i&l‘I±a�B"Å‹LÉC4`ÚL‰L±"Õ(�0™Kf"”j6¢ØªHB¡’c@FÊj�£i’X©#)ÐbŠL"MZPQiMR›IQ[ÆÖf+%¬È#/Ñlš’‹Å(#4cf„I �’˜4`ͱ�‹hØ¥6ÚJh‚±€É¨¨�6Ë-FÑX±kI¶¥³d4²±*ŒZ)–*¦¤Ò²Œ£E(–LYR¢ÒVM¤Û%dÕŠM¥3(²m�EIF‹F¶Û54f¡²X‰*eEF° Z#.&¥³VLS*ÑDUŠÑ¶Å¢ÛhÚ¡–Mkjš••DÙH6’cÊÂÊQd�šTEÌlII”“"!jMb̵L|>ó~i¯éyÛÇð‘{ßÍ\«E½fý;i6N£#ý¿òþÞS´W d]j¢$LLY¢ÒE˜pÿ«ýT|#.¥)°T\AÈŸúgQ”lÿ©ö�+Û=i÷é8ÈnT-ƒ²Q¥U¥uI¦éDn�™#/·ÿ5_Ͼ!kÒîƒÿFÃû>û®ÃüëI2h•ÌäDL³¶»Yb"<ŽÂ #.¶nà]uø^Ì?v§;q0ž¶ã?¨…NéÇX;£QLC§6íˆéTf¥5F�ª2Ù$”¤©�·_Bðjck´ðb¡Ø£Â¢5Š UwCkJÉTe0ÀÙ¤ŽJ’5äØ2¨…*(Ä´ÊÍh¥P5W³Ñü½Jô·³ÍÍFÉk1Q$âQb-ÀFiw.Š‹u@(þó«ÝçlËÙ¹I��¼ëÅ4â�" ÿïCýª0+1‡j¢AÄŸ6.ZÑ1íÃxÑ#.-WÇýº4=þÂv#/…•µÚ*�6P…²P€§†t+üs’ãLãPºˆÑˆí}[ï ÿi<;ð:N¤¥!V&CS‰MõlJ=i¦Žäâ+kqeœÿ7ñgH\Zšp»PD(aB1¼Üó®ît]ÆŠæå&�¤ÊDUCBWœŽÂyChJ;sÑ§Ó ¡�ì•(*H#(k‡=?#/\‡nÔØ28¸o}up#§²®ó@’�ñkñÛ^éé{𮥷³PhmØ£Ö21ðùÞÞ–H‚ê4|:EZ9`ˆÜZ©R²ä 7n\“w]‡uÓEA½ê·žw÷/š«H(¡ä•š%€‰³[5¸�ND”Å~uKꢱü+LySÿ5é‚eƒÿB©6J®YÆ*%¡x¨ÈI+ù1�ϳ iuÔÎ%É…V’QøUkÛrú#/ç÷EÏèñé™ìâ£Ær2?f_C<ᎲB8ãzçÿRƒ¹5NÆ¡ßÆ—dÏ>5~Ä�±qC¡.çíí}ËP˜Îo¢÷Ìå!³P‘ö`rÆw¸C:¥ÓÖèÛAÙÙW0´d;Ò×¢ÆÑX»0¬MÖ/R„PX%ç¥ãèü1F‰*'Mh³f ØÒƒÆçµ—S+áîß¿ZÄ›#.KHíÿ—!¾ŽëØc$4Ù&27åúí221ÀÍì¢aÍ×e/)Qì´½ÅFv“¤8ÆäÈÈY[i¯ÙÒ”cB'ë!î.êm+Ç3,›Ås]He �¡»¬ªJ]§<0=–¨™ÿ³�wîÄê71)¬‡$LÀÅ¢šÑ`Æ# Rzrå}�_?·ª¶±¡[B�yÖ ’'ˆ… -%$"˜K<P4€«µËcIÌŽ2�ø3\σ�%²aj#/Î,³$©±6„ؘÀî5Œ#CÅ TX]Q4£¶ôõ挃þ‘¢è)€,šùPöÍ�åDå’¡„DJÚÍ›éjõ(�µïï´ò76êo„º‘‚…4£†ÜîÅ“q�¤Þ¨.´BÒ$¸àPj‹{)˜²#¿¦kJlÍFd@îª-¥Q4í»¿‡—,�ªJgoeYRLHÀ]ë²áͺ$cb}¤e|¦x<C%¨÷b#.²µ¶–œe‘L„5|HÙæá¶ºk#/ÓÙÖDVxvT<Y€Qâ�µôáF$Nú¦ûª_…Qš‘Ñ}ÎS3–»{��ÚG½W'²¬äé•Z …WµÍòÂ?ÁV‹S:Ð¸í»™áW'h#.lÌ‚MˆZ�ÆÕåPý¤óÚ˜†‘�¦Ã¬!açž7?Òú_}ÓGúzô¾m.¨l8ã]Y„?ÇÒ¹3L‚4‚ÃÉ XŸm½§"úr‡±5¸uì‘FÀ*”Ð!¡ÈiZ¬mØ�\¤<ad¶A�ëÙÙY.ÞðÁx#/åÄÈq0”ÝM6á¯GÊ�ŸCay¯õ'h L~²XG=ñö«>^3ßa·ÊÌT;ï’Lq»óÆV1^75&}U4B?->Ó36T ¿sžª#!slÏdª¤?¦Bü†”<ªô©‡«(uÉ=Rò‡x6Ÿ£WÍüIFY¨è_Ún‘õÐh¸ùyϳwkŽÇ'~jKOWáÇY/(yå…ÂHÎl4cLine truncated
|
||||
#BZh91AY&SY�ê¹Ü&ëÿÿÿ¼@ÿÿÿÿÿÿÿÿÿÿÿ††"¦T€�#)a2€€Xaìœ÷^k¸@#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)úæDÚ±ÜÅÓe_Z»l2Øi—m[7×Üî]ÜZ+Ù©.šµOœî£Ý“©ŒÖZµÛ�¯u§Ëï«î\&}½tÅ+¸Ê#)u{»ÞnG¶�=ö:k“ž¯[�]WN�óǘÖmÜÏç.ç[™ê½é )æß_;wà ßmíÙ^½Ý°�lZúqO¯¾À#)#)(#.#)|ì#)ø[k#)›íJh#)=Í ÷·˜#8=·i`îoG#×¹Nu¨h#)è‡_wµ»z:#.ÀF„…#8ÐôtrÐÛMRQR•A@HØ÷u).Å2”€¢[möõéîƒG¾Ïª¯¥ó5ß=0×½Üë{Ý.½¸U;{iÓNۦͯ»Ü¥[Ucé]Íñïz×o}콫l·zÏ6ëÝíÍU¾ïZ÷�¬ï7ÝÞ÷±îGÓ,×»ëº|k>îæÎå{ëï�}·²›˜oOvlôåîáÕèÓ#)³Hè==5œÏq7½{“A #.÷½Õë)$�S{Üí¯]#8Hª¡(Ðê#.ìª[ZÒ[w½íaîÚYÙïjw½åïy÷½÷YØ;4^޺ȣçgÖù÷Þ÷Ç·�j›;½*›m«í&�lk;zï½ïyö÷¾ï> +îø®Ùç×YãÖP(•Z/®8fbÞ}·**½›¾÷Ýög7Û¶{¾½æ6½ÞóÛÞ÷xÍu×ß{ïTK7}y¹é•Ø0v�oc{Éßkصzœk½Ö=2)ÉäzR™{¡máíݽõ¨C®s;æ^ï¼Û}›»Ìo5íÙÎûºtú=Ǻ-÷4¯[›ÞÛÙ^ÓŸwïg®Þ_Ö#)/yož}óß^Ýä>>ñzõæH#)*#8],û‡v#8õ«·LvJ•—Y´z7›Óצƒ¹ŽMu†ôgi2íp²öìòöØiPyÏ»ëÑï€#)Ïw-º#):÷·>Û½»æúûÇ�ðN{»îæÞ÷¾º÷±öÎ÷!ö©ç:!m®’»rF†ŸÓßo�}ÝßZZëŽÃzï{ÞUÏmžû>-ëîîÝo¤CÚûîÓîÞ§Û7@ïUãÒZÑåÛ×;uÑ>Û‘î½ßKÙç[¾Û·Ó»/wݾËËqî�Ìo¡äï-ôWÛŸ,ë/\è,Ù#)wÛ¦Žëg4Vï^Ã:nƒ_A�vð¾‹{è[{Së}æç½‡|D¯«'Ýí¯¯}×'¯p½Áëîõ÷žçzÃ×omÛï¹}ÛÓ_fï½w¾öï·Ý{o=ì7{gÝÜŸos›¸è)ôök¡Ð®÷:wd>¨=ápiAáÇ]N»³à#)6Ç£F€#8.»#8ëL#)�³‘¶Ùï‹îîhk@�f(VÎû+ï°ïPi÷7�]aõêûÎô½¾÷Þûtû^¹»¶ç§½½ØÑ‹—k—gX:áÜßovkOuÝ·S›=wF²¥s³§Û½ïª÷{ãÞ¼A÷Êou‡WÌùÓu…ìÃFŸ}îñ³mtÛ¹²·wܾíî½wozî z}zûH¢ù×YÓÅ]ÞZòõ#8úJÞW|%4‚#)#) #)€ÈÉ„ÈÄÓDIž© ýHh#.#.#)h4õ¦�!44h&I²˜¨S&ž¡å h#)#)@#)#)�Hˆ"b#)@CFBIú&¦žÕ6¦i¨4&�ž i #)#)#)#)ž©I4�4SÙ1&TòOÓ*~¨ý(1Bi£@h=OP#)Qê #)#)#)#)"HA#)@#)L€ 1h#8{%?Jm&§é¤™¦š@SCM4šˆ‚#)�@L&“$Ê7¢šdýIêzM4õš0ƒM#)#)#)#)ÿöùoã¶Ú—HÄÿh“mÖ\ýͶ§Lš)oŽÛWtdF ‘Yb¡ ’Š x¬ÕíöT(_„~R;Å~hrßó¡MaDÕÆ*j0÷ICâï=ÞíL«2²ÎÆŸ�‡‰?±ew Vä¢ ®Œ@ €]»>¾÷…ãpŽR[›†d&œªEdã&2MÓUËÌ&7¸fYní1sud©<+x¬JÁ0«#)ø»"ï âˆÅ<“zɲÔÒIcþw„;þvCÅ‚Vmb’뮪ÓmmªÄ‚Æ+ È"*]T"´" ̈#)ˆ!!ˆ¢6 #b ¤ ¸!D#)Ê7Š¡Q¤µ HŒŠ–‚ ¨�*Ûl�HĤ34ĈLˆhÆm3DIMH¥Œ‰’”S¶’¡©’K#.hÚ•’ƒ‰@“4M”-“+2‚*‰cBi…(,i#&ÄZ1DRJT¦j‰ e¤‚¤�LI5´š¡`̳cKR1AI(¦‘#LØ´j5J6ª”“Y,L™&HÔ[MRµŒÓÙšf©,™M¶%M±1³T’jadQ$Ô[25#5£R²iš#8)(ÐRZH-¥RC610BÁDÍ)‰¦Ä0M”Ø&H†3€…L“"Qad¶H)bY,‰"R‘I))b“$DÆJRmBZ‚Ìj"¡‹#8(¥ `E€ÉDšFQ1‹&Sh¤™i¤‰ Å‘¤Œ’¥S0Ö�©¤Q6“I›©6,h’#.�R$¢¢¢ ØÒRÍŒI©1‘‘ 2#4�&Y˜ÉY”ÀЕ‰’¤ØB@’M4´“&‹)L6ˆÓH£B(…) e Ò$ÍRÍ,¥”†“K$Ù¦Q 5,RY‘±£+$ÌI"‹@3c,�¨’È*#8Yš1´YCd£2›4IMm6#.Be1�0‘©2Rfd¥š�%•*6(˜AE&¢&$È‚JPSF€a$d†™DƒA `ÃZhf²Ì²,™…)#8m&ÉE²E£I2I(J,”4�`"���“,E#.’MšÌdÔc J†S4¦!!°©“DT±‹56)2‹#&$¡M’HYEI%4Á@ƈÚRdÒ’f&É£&B¡�F²L¬L6‚ɲR„I,™FB)¦ƒ$e2‘–#¤¥SfŠ�£Q �L‰IZ1¶4“5‘CI�I#*4†H bZ6�JF(¬L´™š)0’ȉB¥�£I�ÆQšCeª›[h)*Š2jhÉA²’6Šd¦IŒk%¢Í4ÆS4Ód¥(µ21³lJ4*lÆR3@…#8ZýÖ·F�²´†BYFJkZ+Š� ™QLQ²Z#.S$ÕLE#.ƒK†” šHÖcc!‚¡–¡-E‘MdÈle•E¡bdÌjZYŒ’*,32š¬Ñ¦B¬�Hªm…b›(’ÊŒ¦ÛE5i6�¬ÙZÍJRša¶˜¡Lˆ±jTIi”hŒ±´V6ÌÑT•Yš£U„Š’�¶6�‚ÉF¨Í#8¢�¨4ZƨØf¤6± ¬�¢6ÓD2”IE š(Ã5(”Ú•F£d“hƤ,j™2µ¬i ‹Yµ,‰•5‘&fjiH¤™RÔRÒS54©•¥R²UJ˜ÛJ™JM©¥i³“C[5™™$¬±A°jKim,…¦”hˆÔi(Ò!l„dB‚™&6£jH”X¦Slm)4ÑQ’M’˜P¢‘L¨‹‚ÒÌiƒMÉL˜ÖSf†4HJ,Éb•š’ÀclË&YÌ!#8RÉ‹f&ÄERQ‘ Ò,Ê-LÆÌB’±¦6#.6,L1³-@¦ŠÅˆT¦Ñ�³6‹66(Њ#Ii¡"“aK-D˜¬„ÒR2›Kbš”D’lÔ¢UU31a±RšM‘´™Eš5cD†aD”JI&ÊI¡*KFR6f‘*[,ØÚ#8ÊlÑDlblRi©&S&Š™Z‘“)hÙ)(Í‘$Á,DÆŒi”h¢²É²R†&"jHH´V#l&Å¢£Eb+M&&h’‚“H´S#)›‘X°k-4’T†£Y3#.%,Èl…hѰ†Ñ¨“F„Ë#8ÐDE¤¶*c()5JQ5cXÊfhB¢¤“i…ID–��ÑYkSdÔZ(ÄÊÉhiJ4¤¦‚‰*Y%IL¥(Õ±©"‹%J££d±¶M%E�U3Ê6RÙT4“6H¤Ø°ÒDX±i™(fŒIƒQ)–$Z¥¦)lÄR�Eh¶*’¨d˜ÐƒMQ´m2J*@4¢““V”ZST¦Òj+cXÚÌÅdµš@V‹dÔ”X¦)@ÉA�š$&6J`у6ÄV6-£cJm´”2Ñc“QQ!Z&m–mFÑX±kI¶¥³d4²±*ŒZ)–*¦¤Ò²Œ£E(–LYR¢ÒVJɶJ6É«›JfQdÚ4)ŠJ4Z5¶Ùi£5#.’ÄIS(Ú*5…Ði5-š²c#*ÑD[EhÖÅ¢ÛhÚ¡–Mkjš••DÙH6’cÊÂÊQd�šTEÌlII”“"!jJÓ-Sõ—ñ/±^íÏáEâþÚBÄÑZa¬ÿG#8)«L¶ýoçlá.Ñnl|;²YzÞ¼½×ú¨ÞžŸÅü]|0ÎE¸9þôè2�ŸÍô‘ížtˆ}ºN2�â´4×,†ä°RÈÄi�ŠÆ7U";W÷�¿Ÿçvøõj�ÿ�ýŸäãÇŸ÷¶V2ñÆ]QTÁK;kµ–"#Èì, ‘Ñ;f﮾ÛÙ‡èÔçn&ž–,gð®éÇX;£‚�#ÇÁÚÓä5ru½�c,“#8J˜ÛuÊãk´ðb¡Ø£Â&9•B«²ZVJ£)†’9*Hד`ʨJQ–™BÙ«J�ªp¿åÑ�^–ö`¹¹¨Ù5f móÝx1ØÒÐMÚ¬"nÈcÿìI§{7)1 Š7y׊{;wÍÛÊ»ò(À¬Æª‰|˜¹j�1ŒùÃ)bE‘Wáýû,��µ£0#8ƒ+k´:Ul¡d¡€§†t+û™Éq¥j©%¢YR�Ç9°þøÍ;(82Ø,‚;I§¡§vfU¤q\¢:��+…{™’l%mu÷ùyáIdÒLóÛÍæ)®ît]ÆŠææM!I$)‚ø ÌHe€a §Jñ¹ä�²&Zd‚‚°BP” ÇMì�ó²ñG6h MMWNÁ„¤Õ2¢RiTD�ñWôÛ^óÒ÷jº–ÞÍÓCÎÜÑ‘AðùÞÞ–FDP£G¿¤U£–�Û¯fÞ^+½û©ÝGJåÉ7uØw]4Tà«yçRù]äKDkëJÍ#.„@DÙ”ÄdX¯ÓT�á Çó¦óÝö_ŽMû’3–I;êc¶"U…È‚0 4ˆãþø#.z?ž�nÔDSS8–ZIGÛU¯mËè3o¾¦ß›æzø¨Æ±œ�á_¯W1òPÇYO:OõáÜš§#8ãPïãK²gŸ¿rN؈z%"ýUÕÔúÖq1ŒŸ+]ñq P튀€ „ŽôÍpÞáê”)3OeÐ1¶ƒ~ʹ0!tZ2ékÑch¬]˜V&ë¡B6¼ô¼}oÇaè’¢tÖ‹6j#.�((Æç±—S+áîß·ZÄ›#.KHíþ´‚ò�öÉ í6IŒ�øúí}7tlŽƒ8ÙDË×6e/W)QÚi{ʤç'Hq’I22VÚiýý!F1dQ>ò7î]ÔÚ,h¯Ì²oÍr±ªý)¨ÓéphÛÓwâêü¯ ›ýŽßƒ÷û_=ívŒrÜÖ»«¶#,Äa*ON\¯Ëëð{zÚÛÉBE–Ѐ§^u„ÂEä… ä!BKII¦ÇÙŠ" ³H#8°;\¶4¹‚ñq”oÓ5È|\i-‘6ÍAC™Å–d•6&Лƣ1#8E�ñhTM(í½=3FAÿHj]0“_*žÙ±ü(œ²T0ˆ‚é[Y²x°00Q!|›S%6�#8Ò‰s»MÆB“z º÷WšM>Wد"{8ÌœµÒ‡eBS¦´¦Ì4‘º¨¶•DÓ¶ìþ^\°f¯ÎÞʲ ¤™*‘€¼+²áú$cb}¤e|¦x<C%¨öâ#.²µ¶–œe’d!¨£âFÏ'#.µÓXV˜6εåt+<{jLÀ(ò@Þúñ£'…S}õ/ÅÜÉÈæƒÛdðÝi¨g±ÃfqíDU‰ê£ºeG²•ñûañÏ#8Cê|³£ãGÔÅC¼"÷ý¾r*Q"qJ„R4(‚w8¹GÜW–ÔÄ0„Œm6aq‡–xÜþóé}×MÞá½ö2uCaÇêÌ!ýÏJäÍ2Ò&�"ô9ßW¨Þ]=ðzÓYN˜“a˜éIwÒL±ªÆÝˆÕÊAãÆ‹%²o^ȆÊÌ‹ßPo‰è÷�i�ho7¯Ù£Y¸øÖÍûøÑsW½QNo‡ø˜°ù—C³F+žqô¼#ßážÛ†Ï•˜¨wÛ‚Loµ·Ž2±ŠðÚjLù¬Ë´ú÷®#)Ù±Ÿ}²Z‰HJÅW¢š&È?dB|J^èš±J;jA´ÄŽØ—,Za�ù=±*øð¥Line truncated
|
||||
#<==
|
||||
Reference in new issue
Block a user