sapconf-5.0.4-150000.7.21.1 >  A bsp9| pcT#L?lKY<cDG=vuCeml!eH䚓\ `i]٫ .JɩV->bR'c2MS %a['9lpQO2G^FM0"@%Z Xy*\FA,<߁(n/[)u7guhmgfvzH>Kc.@s~>cHo)82c9a067df0a1bc4b36ca7cb86e5bc11c2ceefec7d18dff6458f4422aa644c686988a1a6f3dda7f128d3a83f91b5bc4098eca1f0 bsp9|St-1Iokوd3{gO>M/Λ͎2^]| S4 awA+[J2yҷaSL>{\+~NíK\[:;cӼؿ)pHw Lz ɭG=h<GMs+p8ྑֵ`(+EZ{mԄڹpk5󛿃JZ4iR,G/ ,_fӤC m%P/H.Q>pKp?`d   O(,48Qr  (7-#23 3( 3P 3 6 77`78(8L889:E(:8:(9;<(:=(=d>l?t@|FGHI8XLYT\|]^ bcNdefluv4wxyTzl| \Csapconf5.0.4150000.7.21.1Kernel Parameter Initializiation for SAP SystemsThe utility adjusts operating system parameters, such as kernel tuning settings and resource limits, to allow running various SAP solutions at satisfactory performance. Authors: -------- Angela Briel, Howard Guobssheep28FSUSE Linux Enterprise 15SUSE LLC LGPL-2.1-or-laterhttps://www.suse.com/Productivity/Otherhttps://www.suse.com/partners/alliance/sap/linuxnoarch if [ -x /usr/bin/systemctl ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" [ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : for service in sapconf.service ; do sysv_service=${service%.*} if [ ! -e /usr/lib/systemd/system/$service ] && [ ! -e /etc/init.d/$sysv_service ]; then mkdir -p /run/systemd/rpm/needs-preset touch /run/systemd/rpm/needs-preset/$service elif [ -e /etc/init.d/$sysv_service ] && [ ! -e /var/lib/systemd/migrated/$sysv_service ]; then /usr/sbin/systemd-sysv-convert --save $sysv_service || : mkdir -p /run/systemd/rpm/needs-sysv-convert touch /run/systemd/rpm/needs-sysv-convert/$service fi done fi touch /run/sapconf_during_pkg_inst if [ $1 -eq 1 ]; then # package initial install # check, if old config files from a former installation still exist SC=/etc/sysconfig for f in sapconf sapnote-1557506 sapnote-1680803; do if [ -f "${SC}${f}" ]; then mv "${SC}${f}" "${SC}${f}".rpmold || : fi done else # package update # to prevent sapconf related tuned error messages anytime after this # sapconf package installation switch off tuned to remove the 'active' # sapconf profile # 'tuned-adm off' is sadly the only possibility to remove an 'active' # sapconf profile # # check for active tuned systemctl -q is-active tuned && [[ $(cat /etc/tuned/active_profile) == sap-* || $(cat /etc/tuned/active_profile) == sapconf ]] && (echo "found active tuned with a sap related profile"; touch /run/sapconf_tuned_removal_started; mkdir -p /run/sapconf; touch /run/sapconf/active; tuned-adm off) || : # if the tuned profile is a sap related profile, try to switch off tuned # if 'tuned-adm off' before had worked, the profile is empty # if not try again [[ $(cat /etc/tuned/active_profile) == sap-* || $(cat /etc/tuned/active_profile) == sapconf ]] && (echo "found a sap related tuned profile, try to switch off tuned"; tuned-adm off || systemctl stop tuned.service) || : # check for enabled and/or active sapconf.service systemctl -q is-active sapconf.service && (echo "found active sapconf.service"; touch /run/sapconf_pre_actss_found) || : systemctl -q is-enabled sapconf.service && (echo "found enabled sapconf.service"; touch /run/sapconf_pre_enblss_found) || : ([ ! -f /run/sapconf_tuned_removal_started ] && [ -f /usr/lib/tuned/sapconf/script.sh ]) && touch /run/sapconf_tuned_removal_started || : if ([ -f /etc/sysconfig/sapnote-1557506 ] || ([ -f /etc/sysconfig/sapnote-1680803 ] && [ ! -f /etc/sysconfig/sapnote-bobj ]) || [ -f /usr/lib/tuned/sapconf/script.sh ]); then touch /tmp/sapconf_remove_nofile || : fi fiif [ $1 -eq 1 ]; then # package initial install PNAME=sapconf SUBPNAME= SYSC_TEMPLATE=/usr/share/fillup-templates/sysconfig.$PNAME$SUBPNAME # If template not in new /usr/share/fillup-templates, fallback to old TEMPLATE_DIR if [ ! -f $SYSC_TEMPLATE ] ; then TEMPLATE_DIR=/var/adm/fillup-templates SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME fi SD_NAME="" if [ -x /bin/fillup ] ; then if [ -f $SYSC_TEMPLATE ] ; then echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." mkdir -p /etc/sysconfig/$SD_NAME touch /etc/sysconfig/$SD_NAME$PNAME /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE fi else echo "ERROR: fillup not found. This should not happen. Please compare" echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" echo "update by hand." fi touch /tmp/initial_sapconf_inst || : else # package update if [ -f /etc/sysconfig/sapnote-1557506 ]; then # covers updates from SLE12 sapconf versions < 4.1.12 echo "covers updates from SLE12 sapconf versions < 4.1.12" mv /etc/sysconfig/sapconf /etc/sysconfig/sapconf.rpmsave || : PNAME=sapconf SUBPNAME= SYSC_TEMPLATE=/usr/share/fillup-templates/sysconfig.$PNAME$SUBPNAME # If template not in new /usr/share/fillup-templates, fallback to old TEMPLATE_DIR if [ ! -f $SYSC_TEMPLATE ] ; then TEMPLATE_DIR=/var/adm/fillup-templates SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME fi SD_NAME="" if [ -x /bin/fillup ] ; then if [ -f $SYSC_TEMPLATE ] ; then echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." mkdir -p /etc/sysconfig/$SD_NAME touch /etc/sysconfig/$SD_NAME$PNAME /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE fi else echo "ERROR: fillup not found. This should not happen. Please compare" echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" echo "update by hand." fi # remove no longer needed 'pagecache' sysconfig file rm -f /etc/sysconfig/sapnote-1557506 && echo "Removing obsolete /etc/sysconfig/sapnote-1557506..." || : # remove no longer needed 'ase' sysconfig file rm -f /etc/sysconfig/sapnote-1680803 && echo "Removing obsolete /etc/sysconfig/sapnote-1680803..." || : elif [ -f /etc/sysconfig/sapnote-1680803 ]; then # covers updates from SLE12 sapconf versions >= 4.1.12 echo "covers updates from SLE12 sapconf versions >= 4.1.12" # remove pagecache section from sapconf sysconfig file # no longer supported in SLE15 sed -i '/## Path: SAP\/Note\/1557506 - Linux paging improvements/,/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf sed -i '/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf # bsc#1096496/bsc#1096498 # to update the comment sections in /etc/sysconfig/sapconf # does not work with /bin/fillup, but is mandatory for SAP /usr/lib/sapconf/sccu.sh || : echo "Updating /etc/sysconfig/sapconf ..." /bin/fillup -q -t /etc/sysconfig/sapconf /usr/share/fillup-templates/sysconfig.sapconf # remove no longer needed 'ase' sysconfig file rm -f /etc/sysconfig/sapnote-1680803 && echo "Removing obsolete /etc/sysconfig/sapnote-1680803..." || : # remove no longer needed 'bobj' sysconfig file rm -f /etc/sysconfig/sapnote-bobj && echo "Removing obsolete /etc/sysconfig/sapnote-bobj..." || : else # covers updates from SLE15 echo "covers updates from SLE15" # bsc#1096496/bsc#1096498 # to update the comment sections in /etc/sysconfig/sapconf # does not work with /bin/fillup, but is mandatory for SAP /usr/lib/sapconf/sccu.sh || : echo "Updating /etc/sysconfig/sapconf ..." /bin/fillup -q -t /etc/sysconfig/sapconf /usr/share/fillup-templates/sysconfig.sapconf fi PNAME=sapconf DEF_VAL="no" DEL_TEMPL=/usr/share/fillup-templates/$PNAME.del rm -f $DEL_TEMPL for var in SEMMSL SEMMNS SEMOPM SEMMNI ; do echo -e "#\n$var=$DEF_VAL\n" >> $DEL_TEMPL done if [ -f /etc/sysconfig/$PNAME ] ; then /bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME fi for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do if [ -f $i ] ; then . $i rm -f $i fi done # adapt new SAP note values to the configuration /usr/lib/sapconf/adapt2newSNvalues.sh || : # move custom specific sapconf related tuned profiles from /etc/tuned/ # to /var/lib/sapconf/saved_configs /usr/lib/sapconf/mv_tuned_conf.sh || : # remove nofile related limits.conf entries for @sapsys @sdba @dba if [ -f /tmp/sapconf_remove_nofile ]; then lim_chg=false for ulimit_group in @sapsys @sdba @dba; do for ulimit_type in soft hard; do limits_line=$(grep -E "^${ulimit_group}[[:space:]]+${ulimit_type}[[:space:]]+nofile.+" /etc/security/limits.conf) if [ -n "$limits_line" ]; then sed -i "/$limits_line/d" /etc/security/limits.conf || : lim_chg=true fi done done [[ $lim_chg ]] && echo "Updating /etc/security/limits.conf..." || : rm -f /tmp/sapconf_remove_nofile || : fi fi sed -i '/^[^#].*[[:blank:]][[:blank:]]*=[[:blank:]][[:blank:]]*.*/s;[[:blank:]];;g' /etc/sysconfig/sapconf >/dev/null 2>&1 || : if [ -x /usr/bin/systemctl ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" [ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : if [ "$YAST_IS_RUNNING" != "instsys" ]; then /usr/bin/systemctl daemon-reload || : fi for service in sapconf.service ; do sysv_service=${service%.*} if [ -e /run/systemd/rpm/needs-preset/$service ]; then /usr/bin/systemctl preset $service || : rm "/run/systemd/rpm/needs-preset/$service" || : elif [ -e /run/systemd/rpm/needs-sysv-convert/$service ]; then /usr/sbin/systemd-sysv-convert --apply $sysv_service || : rm "/run/systemd/rpm/needs-sysv-convert/$service" || : touch /var/lib/systemd/migrated/$sysv_service || : fi done fi # Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844), there is no rollback. # Not needed any longer as the limit is removed from logind (jsc#SLE-10123) SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf if [ -f $SAP_LOGIN_FILE ]; then echo "removing no longer needed file '$SAP_LOGIN_FILE'" rm -rf $SAP_LOGIN_FILE || : fi test -n "$FIRST_ARG" || FIRST_ARG="$1" if [ "$FIRST_ARG" -eq 0 -a -x /usr/bin/systemctl ]; then # Package removal, not upgrade /usr/bin/systemctl --no-reload disable sapconf.service || : ( test "$YAST_IS_RUNNING" = instsys && exit 0 test -f /etc/sysconfig/services -a \ -z "$DISABLE_STOP_ON_REMOVAL" && . /etc/sysconfig/services test "$DISABLE_STOP_ON_REMOVAL" = yes -o \ "$DISABLE_STOP_ON_REMOVAL" = 1 && exit 0 /usr/bin/systemctl stop sapconf.service ) || : fi test -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then # Package removal, not upgrade # revert settings - not needed, done by service_del_preun # clean up custom specific sapconf tuned configuration # move custom specific sapconf related tuned profiles from /etc/tuned/ # to /var/lib/sapconf/saved_configs [ ! -d /var/lib/sapconf/saved_configs ] && mkdir -p /var/lib/sapconf/saved_configs for prof in sapconf sap-hana sap-netweaver sap-ase sap-bobj; do if [ -f /etc/tuned/"$prof"/tuned.conf ]; then echo "moving custom profile /etc/tuned/$prof to /var/lib/sapconf/saved_configs" mv /etc/tuned/"$prof" /var/lib/sapconf/saved_configs || : fi done fi test -n "$FIRST_ARG" || FIRST_ARG="$1" if [ $1 -eq 0 ]; then # Package removal for service in sapconf.service ; do sysv_service="${service%.*}" rm "/var/lib/systemd/migrated/$sysv_service" || : done fi if [ -x /usr/bin/systemctl ]; then /usr/bin/systemctl daemon-reload || : fi if [ "$FIRST_ARG" -ge 1 ]; then # Package upgrade, not uninstall if [ -x /usr/bin/systemctl ]; then ( test "$YAST_IS_RUNNING" = instsys && exit 0 test -f /etc/sysconfig/services -a \ -z "$DISABLE_RESTART_ON_UPDATE" && . /etc/sysconfig/services test "$DISABLE_RESTART_ON_UPDATE" = yes -o \ "$DISABLE_RESTART_ON_UPDATE" = 1 && exit 0 /usr/bin/systemctl try-restart sapconf.service ) || : fi fi test -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then # remove drop-in file for ulimit settings if [ -f /etc/security/limits.d/sapconf-nofile.conf ]; then echo "removing no longer needed file '/etc/security/limits.d/sapconf-nofile.conf'" rm -f /etc/security/limits.d/sapconf-nofile.conf fi fi # remove no longer needed UserTasksMax setting, if still available SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf if [ -f $SAP_LOGIN_FILE ]; then echo "removing no longer needed file '$SAP_LOGIN_FILE'" rm -rf $SAP_LOGIN_FILE fi~o #r J )F/U A큤큤AA큤큤AAAbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsbsb766380fbe5b5b0af2a403f7c37b407ea1620d4dbcba93d23aa2b5e4c56debb69da2f3e4a493dbe584e63c91ebdcd0236a9dbda017859a03fbc9b47c00b8fef5c2aeb3db7dfd61d436d5f048ec55633130cb550823d49f909dc1695ca9ff96b867fdcd18dbbce288ee4080596b95a49bc30b52820549b9a3fd65189e99671e9d310df651ec3f0ab08ba4a7dc2a96adb46ec0e0ec875eb71a81251f98ee6fcb90786f60ded947eaa3185e017af665cefb8ec8b301d67ebdfaa99ea1074661e9429a0fdeea5a8a9dac0f2df9afe3968c8a95d3b12d5206868be92bd486a573d0a74b123c9e4bc78dc5f12559c0fa1f6e96cf403c40ab93decd6fb9b0d86a601f5ee0c2ad66494284e047c1a62a4685630bbaab832c7d32a7f2f67ad62ebe17c49a4df566e37a3570e4448fd7788f1f4843f8a425299b084d9c677fa571e76a7271e2f3bcc54b73d3f96da95435811dee9ed7b8c13dab54909898d2a2760d03c88ef994f172e66d0608877a2b869d8aaab7178712b7e087d3849747be52a9da22d9be7b2af5120d7124c8d0b6eadbd337996205fa8b4f28d6c01d7112bf34114d4aservice@rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootsapconf-5.0.4-150000.7.21.1.src.rpmconfig(sapconf)sapconf @ @      /bin/bash/bin/bash/bin/sh/bin/sh/bin/sh/bin/sh/usr/bin/cpupower/usr/bin/envbcconfig(sapconf)coreutilsdiffutilsfillupgreplogrotaterpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)sysstatsystemdsystemdsystemdsystemdsystemduuidd5.0.4-150000.7.21.13.0.4-14.6.0-14.0-15.2-1234-24.424.14.1bf@a^`S@^^s^\Q[[#@Z@ZЛZJ@Za@ZZ@ZkZZ8@Z&@Y@YJYaY@Y@YyYJ_Y>@Y@X-XXO@XX=mW@WzOWV@W'A@V@VIV@V +abriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comhguo@suse.comabriel@suse.comabriel@suse.comabriel@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.com- version update from 5.0.3 to 5.0.4 - change block device handling to handle multipath devices correctly. Only the DM multipath devices (mpath) will be used for the settings, but not its paths. (bsc#1188743) - fixed wrong comparison used for setting force_latency (bsc#1185702) - SAP Note 1771258 v6 updates nofile values to 1048576 (bsc#1192841)- version update from 5.0.2 to 5.0.3 - adapt the activity detection of saptune to the upcoming saptune version 3 (bsc#1189496)- version update from 5.0.0 to 5.0.2 - added sapconf_check and supportconfig plugin for sapconf - change log message for 'MIN_PERF_PCT' parameter to reduce the spot light (bsc#1179524) - add additional check to detect an active saptune service (started but disabled and without any notes applied). Improve the logging message. (bsc#1182314) - enable and start sapconf.service during package update, if tuned is running with sapconf as profile (bsc#1176061) - preserve the state of the sapconf.service during the package update. Only disable the sapconf service, if saptune is active. In any other cases don't touch the state of the sapconf service. If tuned has problems and the command 'tune-adm off' does not work properly in the preinstall script of the package, try to stop the tuned service to avoid weird error messages in the log of tuned during and after the package update (bsc#1182906)- version update from 4.2.3 to 5.0.0 - check the values of the vm.dirty_* settings to be in a valid range before activating or restoring these system values. (bsc#1168067) - add a logrotate drop-in file for sapconf to control the size of the /var/log/sapconf.log logfile (bsc#1166925) - use a drop-in file in /etc/security/limits.d instead of modifying /etc/security/limits.conf directly. So during sapconf service start the ulimits for the max number of open files configured with sapconf will be written to /etc/security/limits.d/sapconf-nofile.conf. During sapconf service stop this file will be removed. During package update from version 4 to version 5 of sapconf the nofile related entries added by version 4 of sapconf will be removed from /etc/security/limits.conf. (bsc#1168840) - support multi-queued scheduler for block devices (jsc#SLE-11140, jsc#SLE-11142, jsc#SLE-11143) - remove usage of tuned from sapconf That means: Now there is only ONE configuration file for sapconf /etc/sysconfig/sapconf All trailing comment sections, which were only used for documentation purpose are now removed. All parameters of the tuned profile defined in tuned.conf governor, energy_perf_bias, min_perf_pct, force_latency and elevator are moved to /etc/sysconfig/sapconf Customer specific tuned profile changes in /etc/tuned/ are transferred to /etc/sysconfig/sapconf. The customer specific tuned profile files from /etc/tuned/sapconf are moved to /var/lib/sapconf/saved_configs. Additional parameter settings in these tuned configuration files are NOT covered by sapconf. Additional changes during package update: if sapconf with tuned support was not used during package update stop and disable the sapconf service if sapconf with tuned support was used during package update stop and disable tuned service if saptune is active during package update stop and disable sapconf service To prevent sapconf related tuned error messages anytime after the package installation we need to switch off tuned in the preinstall of the package to remove the 'active' sapconf profile before the package installation removes the no longer shipped sapconf profile files. The system tuning will be restarted after the configuration transfer in the post phase of the package installation. (jsc#SLE-10985, jsc#SLE-10987, jsc#SLE-10988)- version update from 4.2.2 to 4.2.3 - file /etc/systemd/logind.conf.d/sap.conf will be removed during the package update. It is not needed any longer as the limits for TasksMax and UserTasksMax are removed from systemd/logind (bsc#1148163, jsc#SLE-10123) - if sapconf detects an improper tuned profile during start it will write an information to the log file and the start of the sapconf service will fail to guide the administrator to the problem. (bsc#1139176) - use absolute path to script.sh in tuned.conf file (bsc#1124453) - use ';' as new delimiter for a sed command in postinstall script, because the used '%' is used and expanded by rpm macros. (bsc#1150868, bsc#1150870)- source /etc/sysconfig/sapconf entries correctly, even if the /etc filesystem is read-only (bsc#1122741) - log skipping of existing /etc/systemd/logind.conf.d/sap.conf file during package installation (bsc#1111243)- Do not change the system settings for kernel.sem. So remove the variables SEM* from sapconf. (bsc#1099101)- correct the SAP Note references in the man pages and in the sysconfig file of the sapconf package (bsc#1096498)- never ever stop or disable uuidd.socket in sapconf. It is mandatory for every SAP application running. (bsc#1093843) - remove hardcoded default value for VSZ_TMPFS_PERCENT. This allows an admin to exclude VSZ_TMPFS settings from the sysconfig file, so current system value will remain untouched. This value only got used in the previous version, if the variable VSZ_TMPFS_PERCENT was removed from the sapconf configuration file /etc/sysconfig/sapconf. If the value of the variable was only changed (increase or decrease) in the sapconf configuration file everything works fine. (bsc#1093844)- remove the no longer needed sysconfig file '/etc/sysconfig/sapnote-1680803' in any update case. (bsc#1089549)- sapconf will set ALL values specified in the file /etc/sysconfig/sapconf irrespective of the current system value. The values will be not just increase, but also decrease, if the value in the sysconfig file is lower than the current system value. All actions are logged to /var/log/sapconf.log (fate#325548) - change variable names in sysconfig file for the avoidance of doubt (bsc#1070495) - remove unnecessary TMPFS_SIZE_MIN from sysconfig file (bsc#1070496)- remove the pagecache references from the sysconfig file during the package update from SLE12 to SLE15 (bsc#1071539)- consolidate the 4 former sapconf profiles sap-hana, sap-netweaver, sap-ase and sap-bobj to one basic sapconf profile 'sapconf' as requested by SAP. If one of the former profiles is the currently active tuned profile, the active tuned profile will be reset to the 'sapconf' profile during the update installation of the package. Additionally the no longer needed sysconfig file '/etc/sysconfig/sapnote-1680803' will be removed during the package update. (fate#324489, bsc#1070504)- add directive ExecStop to the systemd unit file sapconf.service and start sapconf.service after initial package installation (fate#325363)- add system unit file sapconf.service to start tuned, uuidd.socket and sysstat during system boot and to restart tuned during package update installation so that the changes will take effect immediately (fate#325363) - remove left over pagecache limit references (bsc#1071539)- Remove sapconf legacy interface /usr/lib/systemd/system/sapconf.service /usr/sbin/SAPconf /usr/sbin/rcsapconf /usr/sbin/sapconf The man pages are adapted to reflect the changed handling. (bsc#1070505, fate#324490)- Check, if pagecache limit is available at the system. If yes, set pagecache limit according the settings in /etc/sysconfig/sapconf. If not, log a message to the log file. (bsc#1071539, fate#323778)- Refactoring sapconf parameter settings together with SAP Linux Lab. (fate#324491) - ATTENTION: One main feature of this sapconf package update to version 4.1.12 is a consolidation of all sapconf configuration settings into the central /etc/sysconfig/sapconf configuration file (except those settings related to ASE or BOBJ and those settings which can only be set via tuned.conf) This will result in a lot of configuration file changes concerning /etc/sysconfig/sapconf, /etc/sysconfig/sapnote-1557506, /usr/lib/tuned/sap-netweaver/tuned.conf and /usr/lib/tuned/sap-hana/tuned.conf. That means that your system configuration get changed after a restart of tuned or during a system reboot. Please read carefully the following information about configuration file handling before restarting tuned or rebooting the system. (bsc#1070508) - use the same tuning values for HANA and Netweaver workloads. That means the use of the same tuned.conf and script.sh file for both profiles (sap-hana and sap-netweaver) This should lead to a better base for mixed HANA and ABAB workloads on one system. (bsc#1070508) - the pagecache configuration is now integrated in the general sapconf sysconfig file and the old sysconfig file sapnote-1557506 is obsolete. As before pagecache handling is disabled by default. ATTENTION: configuration file handling during package installation. During an initial package installation the new sysconfig file, which includes the pagecache values from the former file sapnote-1557506, is copied to /etc/sysconfig/sapconf and the changes will take effect immediately after restarting tuned. During a package update previously copied /etc/sysconfig files will exist. If both files in /etc/sysconfig are unchanged - that means, there are no custom changes present - the new sysconfig file is copied to /etc/sysconfig, the old obsolete /etc/sysconfig/sapnote-1557506 is removed and the changes will take effect immediately after restarting tuned. If the file /etc/sysconfig/sapconf is unchanged - that means, there are no custom changes present - but the file /etc/sysconfig/sapnote-1557506 contains custom modifications, the new sysconfig file is copied to /etc/sysconfig, the changed values from /etc/sysconfig/sapnote-1557506 are copied to /etc/sysconfig/sapconf and /etc/sysconfig/sapnote-1557506 is moved to /etc/sysconfig/sapnote-1557506.rmpsave. The changes will take effect immediately after restarting tuned. If the file /etc/sysconfig/sapconf contains custom modifications, the new sysconfig file is copied to /etc/sysconfig as sapconf.rpmnew. Custom modifications from /etc/sysconfig/sapnote-1557506 - if available - are not merged in this new file. Please merge the needed custom modifications manually from both files into /etc/sysconfig/sapconf.rpmnew, move this file to /etc/sysconfig/sapconf and remove /etc/sysconfig/sapnote-1557506 before you restart tuned to get the changes take effect. (bsc#1070496, bsc#1070508) - The following parameters are additional specified (instead of static tuning inside the tuning script or defined in other configuration files like tuned.conf or sapnote-1557506) or changed in the central configuration file /etc/sysconfig/sapconf. vm.max_map_count, vm.dirty_bytes, vm.dirty_background_bytes, kernel.shmmni, net.ipv4.tcp_slow_start_after_idle, ksm, transparent_hugepages, numa_balancing added and value changed vm.pagecache_limit_ignore_dirty, vm.pagecache_limit_mb added and commented out kernel.shmall, kernel.shmmax, kernel.sem changed But be in mind: higher system value will ever remain unchanged. sapconf will respect higher values set by the system or by the administrator using sysctl configuration files. Values set with sysctl command will respect too, but do not survive a system reboot. Every tuning action is logged to /var/log/sapconf.log ATTENTION: configuration file handling during package installation. During an initial package installation the new sysconfig file is copied to /etc/sysconfig and the changes will take effect immediately after restarting tuned. During a package update a previously copied /etc/sysconfig file will exist. If this file in /etc/sysconfig is unchanged - that means, there are no custom changes present - the new sysconfig file is copied to /etc/sysconfig and the changes will take effect immediately after restarting tuned. If this file in /etc/sysconfig includes custom modifications, the new sysconfig file is copied to /etc/sysconfig as sapconf.rpmnew. Please merge the needed custom modifications into /etc/sysconfig/sapconf.rpmnew and move this file to /etc/sysconfig/sapconf before you restart tuned to get the changes take effect (bsc#1070494, bsc#1070495, bsc#1070496, bsc#1070508) - The following parameters were specified in tuned.conf of profile sap-hana and/or sap-netweaver before. But they are removed from tuned.conf because they are redundant, no SAP Note is mentioned it, replaced by another parameter, moved to another configuration file or commented out, because they are only valid for a special architecture or special tasks (like the [cpu] part was only valid for Intel architecture and only performance related) vm.swappiness, kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, readahead removed [cpu] section with governor, energy_perf_bias, min_perf_pct commented out vm.dirty_ratio, vm.dirty_background_ratio removed from tuned.conf replaced by vm.dirty_bytes, vm.dirty_background_bytes defined in sysconfig/sapconf kernel.sem, net.ipv4.tcp_slow_start_after_idle, transparent_hugepages moved to sysconfig/sapconf ATTENTION: these changes will take effect immediately after restarting tuned. Except the administrator is using an own copy of the tuned.conf file in /etc/tuned/ (where may be sap-hana or sap-netweaver) to set own or changed values. The tuned.conf files in /etc/tuned/ remain untouched during package installation. To get the new behaviour SAP is recommended, remove the profile copy from /etc/tuned or copy the new tuned.conf file from /usr/lib/tuned/ to /etc/tuned/ or compare the files in /etc/tuned/ with the files in /usr/lib/tuned/ manually and adjust the content, if needed. (bsc#1070494, bsc#1070495, bsc#1070496, bsc#1070503) (bsc#1048550, bsc#1064720) - Setting of UserTasksMax, a parameter of the systemd login manager, will be done in the post script during the package installation. The value is set to 'infinity'. Note: A reboot is needed after the first setup to get the change take effect. A message will indicate if a reboot is necessary. As before there is no automatic rollback. (bsc#1070386) - enable and start sysstat service during post script of the package installation (see SAP Note 1310037) (bsc#1070390) - add package requirements including a short description to the man page of sapconf and to the central configuration file /etc/sysconfig/sapconf (bsc#1070390) - Update the sapconf man page and associated man pages to reflect all the changes of sapconf package version 4.1.12 (bsc#1070506) - respect active tuned profile during reboot of the system even if it is not a 'sap' profile. sapconf only activates sap-netweaver profile by default, if NO tuned profile is actually set. (bsc#1026862) - reinsert 'elevator=noop' to tuned.conf of profile sap-hana and sap-netweaver. (bsc#1031073, bsc#1032516, bsc#1070494)- fix variable name for pagecache handling (bsc#1057986)- restrict UserTasksMax setting to os releases > 12.1- add SLE12-SP1 specific change for UserTasksMax (bsc#1039309 and comment #35 of bsc#1031355)- add a message to %post to remind the admin to restart the tuned service, if he want the configuration changes to take effect immediately (bsc#1048550)- increase MAX_MAP_COUNT_REQ to 2147483647, see SAP Note 900929 (bsc#1048550)- Update package description. - Make "tuned" a mandatory runtime dependency to address bsc#1043844. - In all tuning profiles, do not overwrite a parameter if present value is higher than optimal value. (bsc#1048550)- Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844)- Add a dependency against the package sapinit-systemd-compat to prevent SAP systems to be stopped every time the SAP Host Agent is restarted (SLE12-SP1 only) (bsc#1043841)- add new profiles for SAP ASE (Sybase) and SAP BOBJ according to fate#320359.- Upgrade to upstream version 4.1.7 that addresses exactly one issue: Lee Martin and colleagues noticed that SAP HANA performs better with "force_latency=70" in its tuning profile, so the setting is now introduced to the profile. (bsc#1032516)- Upgrade to upstream version 4.1.6 that addresses exactly one issue: sapconf's sap-hana tuning profile incorrectly uses "noop" IO scheduler on disk block devices, which is not explicitly recommended by either SUSE or SAP. Performance regression showed up during benchmark runs. Hence, the IO scheduler setting is removed from tuning profile, and left to be decided by end-user. (bsc#1031073)- Use arbitrary precision calculator rather than bash's built-in integer calculator to calculate parameter values, this gets rid of all integer overflow issues observed in production. (bsc#1027411) - Apply tuning technique of Netweaver in HANA profile too. (bsc#1016795) Upgrade to upstream version 4.1.5.- "force_latency=1" is removed from HANA's configuration, so that CPUs are no longer kept busy when idling. (bsc#1025824) - Introduce complementary README.d and LICENSE files from upstream git repository.- Do not touch THP configuration in Netweaver profile, avoid inheriting configuration from high throughput profile. (bsc#994306)- Put version number in source archive name. - Fix a race condition during start (bsc#977575).- Start uuidd.socket as soon as the package is installed. Further fix bsc#983454.- Control uuidd as a step of the tuning process. Fix bsc#983454.- Introduce mandatory dependency on package tuned. Implement fate#320783.- Redo the directory structure in the source archive file. - Introduce /etc/sysconfig/sapnote-1557506 to: * Disable pagecache_limit by default. * Let user decide if and how to tune pagecache_limit. Fix bsc#966930 and bsc#971625.- Mention tuned parameters in manual pages: fix bsc#966720- Fix a misplaced optimisation routine that should have been applied to SAP HANA but in fact applied to SAP NetWeaver. (bsc#962059)- Implement fate#319480 - [ECO] Include tuned architecture in sapconf * Replace the entire sapconf package content with tune daemon SAP profiles, * The executables remain compatible with the original sapconf implementation. * Following files are removed from package source: LGPL README SAPconf SAPconf-reconfig SAPconf.8 config.b64 functions sapconf sapconf.8 sapconf.service * Following file is added into package source: sapconf.tgz/bin/sh/bin/sh/bin/sh/bin/shsheep28 1651747551 5.0.4-150000.7.21.15.0.4-150000.7.21.1 sapconfsapconfadapt2newSNvalues.shcommon.shmv_tuned_conf.shsapconfsccu.shutil.shsupportconfigpluginssapconfsapconf.servicercsapconfsapconf_checksysconfig.sapconfsapconf.5.gzsapconf.7.gzsapconfsaved_configssaved_state/etc/logrotate.d//usr/lib//usr/lib/sapconf//usr/lib/supportconfig//usr/lib/supportconfig/plugins//usr/lib/systemd/system//usr/sbin//usr/share/fillup-templates//usr/share/man/man5//usr/share/man/man7//var/lib//var/lib/sapconf/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:24039/SUSE_SLE-15_Update/6d56d28731273a48c2eaac068d720e5b-sapconf.SUSE_SLE-15_Updatecpioxz5noarch-suse-linuxASCII textdirectoryBourne-Again shell script, ASCII text executableBourne-Again shell script, UTF-8 Unicode text executableUTF-8 Unicode texttroff or preprocessor input, UTF-8 Unicode text, with very long lines (gzip compressed data, max compression, from Unix)troff or preprocessor input, ASCII text, with very long lines (gzip compressed data, max compression, from Unix)RRRRRR1X|5 ߷( # Use a real bash script with an explicit "exit 0" at the end to be by default fail safe # an explicit "exit 1" must be use to enforce package install/upgrade/erase failure where needed # see the "Shared_libraries" section in http://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets # Begin refresh systemd units and clean up possibly obsolete systemd units # The following is a generic way how to refresh and/or clean up systemd units. # A systemd unit may need a refresh after updating a package when the new package # had installed a changed systemd unit file for an enabled systemd unit. # A systemd unit may become obsolete by updating a package (see bnc#904215). # A systemd unit is considered to have become obsolete when the systemd # symlink /etc/systemd/system/.../unit_name -> /path/to/unit_file is broken. # When during package update the new package does no longer provide a unit file # then the systemd symlink becomes broken after the files of the old package # had been actually removed by RPM. # According to /usr/share/doc/packages/rpm/manual/triggers and according # to https://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets#Scriptlet_Ordering # and http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Scriptlet_Ordering # from the new package only "posttrans of new package" is run after "removal of old package" # so that the new package must do the clean up as RPM posttrans scriptlet. if systemctl --quiet is-enabled sapconf.service 2>/dev/null; then # Refresh still valid enabled systemd units and clean up possibly obsoleted systemd units: # Enforce systemd to use the current unit file which is usually the unit file of the new package # but also in case of custom units (that use other unit files) a "reenable" won't hurt because # "reenable" does not implicitly stop a running service which is "the right thing" because # a RPM package installation must not automatically disrupt (restart) a running service. # Using "--force reenable" is essential to clean up possibly conflicting/broken symlinks. # (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"): systemctl --quiet --force reenable sapconf.service 2>/dev/null || : else # Refresh still valid disabled systemd units and clean up possibly obsoleted systemd units: # First using "--force reenable" is essential to clean up possibly conflicting/broken symlinks # because there is no "--force disable" that would clean up possibly conflicting/broken symlinks # see https://bugzilla.opensuse.org/show_bug.cgi?id=904215#c34 # so that first the unit has a clean state and then it is set back to disabled (as it was before). # If a disabled systemd unit has become obsoleted, "systemctl --force reenable" will clean it up # which means the unit gets removed and the subsequent "systemctl disable" will do nothing. # (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"): systemctl --quiet --force reenable sapconf.service 2>/dev/null || : systemctl --quiet disable sapconf.service 2>/dev/null || : fi rm -f /run/sapconf_during_pkg_inst if [ -f /tmp/initial_sapconf_inst ]; then # package initial install rm -f /tmp/initial_sapconf_inst || : # if saptune is active - stop and disable sapconf service # (jsc#SLE-10987 decision) if (systemctl -q is-active saptune) || [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]]; then echo "saptune is active, stop and disable sapconf service" systemctl stop sapconf.service || : systemctl disable sapconf.service || : elif [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "" && ! -f /run/sapconf/active ]]; then systemctl start sapconf.service || : fi else # package update # check sapconf service state before update sapconfServEnable=false sapconfServActive=false if [ -f /run/sapconf_pre_enblss_found ] && [ -f /run/sapconf_pre_actss_found ]; then echo "sapconf service was active and enabled before, stay with it" rm -f /run/sapconf_pre_enblss_found /run/sapconf_pre_actss_found || : sapconfServEnable=true sapconfServActive=true fi if [ -f /run/sapconf_pre_enblss_found ]; then echo "sapconf service was enabled before, stay with it" rm -f /run/sapconf_pre_enblss_found || : sapconfServEnable=true fi if [ -f /run/sapconf_pre_actss_found ]; then echo "sapconf service was active before, stay with it" rm -f /run/sapconf_pre_actss_found || : sapconfServActive=true fi # if sapconf with tuned support was not used - stop and disable sapconf service # (jsc#SLE-10987 decision) if [ ! -f /run/sapconf/active ] && [ -f /run/sapconf_tuned_removal_started ]; then echo "sapconf with tuned support was not used" if [ "$sapconfServEnable" == "true" ]; then echo "but sapconf.service was enabled, so skip disable sapconf service" else echo "disable sapconf service" systemctl disable sapconf.service || : fi if [ "$sapconfServActive" == "true" ]; then echo "but sapconf.service was active, so skip stopping sapconf service" else echo "stop sapconf service" systemctl stop sapconf.service || : fi fi # if sapconf with tuned support was used - stop and disable tuned service # (jsc#SLE-10987 decision) # and enable and start sapconf service (bsc#1176061) ([ -f /run/sapconf/active ] && [ -f /run/sapconf_tuned_removal_started ]) && (echo "sapconf with tuned support was used, stop and disable tuned service, enable and start sapconf service"; systemctl stop tuned.service; systemctl disable tuned.service; systemctl enable sapconf.service; systemctl reload-or-restart sapconf.service) || : # if saptune is active - stop and disable sapconf service # (jsc#SLE-10987 decision) systemctl -q is-active saptune || [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]] && (echo "saptune is active, stop and disable sapconf service"; systemctl stop sapconf.service; systemctl disable sapconf.service) || : # cleanup 'sapconf with tuned support' indicator rm -f /run/sapconf_tuned_removal_started || : # if sapconf is/was active - reload new configuration (systemctl -q is-active sapconf && [ -f /run/sapconf/active ] ) && systemctl reload sapconf.service || : # remove active indicator, so that a restart of sapconf after the package # installation will work correctly, side effect found by bsc#1176061 ! (systemctl -q is-active sapconf) && rm -f /run/sapconf/active || : fi exit 0/bin/bashcronutf-820b322c3d8a74232eeecf134aff1cd4df8d91557e5416c3cd1cc5455ba085099?P7zXZ !t/Qf] crv(vX0!snW+:^"+6v l^ja~)gk=y0I4 ~59Ц-5# C~y ؊DH&>!p'bmQ8uֹy!D&qiTQ@ÏE76C`@ pdAn]ӽpri=*tGe)$,o;$dx;yn)0qSʵNXzP呌T̂v,񰽱|qQ)h#)ULP}qSiYؕQ/jXg:۳Um&%bb( ʌWx}lʅ8JtZMhq$O+CaNCdD>D.K0[ǚ"ß$ F^*pv l@b'k#0^JB4#;@n+XNdP$}B|ēF [#l⾆tyu.[Wh=-k:5 ݗX* Z!@"YN%*.@333ZmV{q9B\m~I# ľ+!wTكz"]J ZHZ5((o"NJٿ~rٕ(Wv0ެ\#!xaR8 Xic݆ΰ5$/n2֊W6gCGʈdQ"~jjZˇÞ~'ӕGLy8<~)ewW/3^]ևY jGm3#l4>B`{1X:`Np@[*C Gi3$޾!^c@b' և$BG2BҰM̝K|tXO*Z@*asuX3U(&BF3N.e؅['L&@.c+,uʀIC\ T߭(s:4~2&u_^b B̲۽YZHRf^SтYfwFF1IC/zԣt?JlOn4f3">f$B)'^sxAR}]ֻc}qN_\GWo3r{-62j&q^]"FA|wcM$y*1RUA蔾"U]JYrΈQ4챿4UٷkfpER <ͳژaIIcl SA/xRC8" n9-ZܟnIBm | Zv̶Xn]C,&zշ<m$P;S <Ռ2c3qg09R N*+(D;1#T1 ҶcZ솹{tC1ͯY+;&]D%Zv:堤)@o4~,E )T_KߋIJ1r*.uKDtO'K$ dNxS.uaCZ]9df lb6IO&z9]]$M]! +8@%,+Eӂ,"Jۜu4P;= J>i EY 怿̂울3dȓk= z`ļJc~p2S4-epB֦X'Js9#rQAn24껙AU4;t%xI)|MMr&s2c:^(:{9BYD3GYbb޳b%0O`Qt#W|֙ܶh~ MHa"P=a K@;0`b4,}RL)OAW,ұWNL<(NJlWU|33 >⻺u?N4`qfQ-\w ݑnҦ>3  .F)^LN3DIV&Tǃsӗ}ׅW!<_k|6(zYuT|>4}#{nIW7YfJeót-lVg f+dYVׇp}bIwrJԭ 'w Ѡeaxk$X\1'.jާ"elęm*UA@i2Kٝc:}<_;'&wrֶUC?tpIf y bo#ol yU:VcܚX`4K{=cEYhIΏޑ"df QLvBpMoqc -,ltGYB~O3ci9>A-ܠJ .B!ȃNǸHCgS=בs'psXI;eݬ5-v))*][ztTϓ; XI=&l@[͕t34{Az]ܐ>pvm%L(.2#`5I6;YAw?vߡS񉌮Յ~SiC&)68llP7݊ǛRx5fe/%?ư}xk͡.dLiIr a7^T1z܍Р b_k<,%L_g72 "+?0yF# 7_"EAcx:ۆyP Hv.w%J @-9:N$6:B+Qh i׮r8emqSB2ⵢMb.ؼ'-8?NUuL1X 쩩H/ [rf4 Na'8>2N #ϤjtnSry$UjΧntpe@S^VR1d?'] {|;efJ1<Y'qfpG qi]۷ŁN@: X-7 OZ[E0dzvPﲽNaEXE}i*U2#Rw ˍ0N9/P+ \i~N c*tͭuB6 ӦO"4"I5W":chv$ R zHk׏%l۽]{*,+bs˗FIeEZKQvkZ%!Z)kO@Mw"IK^$}6EܴFwUGRsjKLMh)װ+_!_VߥTA;&kFD\FG.w)(eZ-kqyi#KC^1BҕٿdA#ǔ'úX{x#c~MnVUdlLu n JQRJk lTCJ^U'>T2y3LBPf)p ? 쒁 y>6=IL>[h!.1 %\]­g0mˤ}nC.!W`DB KeE(U=HZ;.7wt?M6V0 wVS7ˤk!t7sA`ATǤb8B`EewJ\ 1#BlSLKU'ذB{4W5?Uxհ2 k4Ɂx>夹&{T_p:^Jqh)R(a:ՠ2*+%c ӦNs#q1 0l߮j{,}3E oxږe%@^PƶMX0cͧf\F$ }Dsވ8|Bbb1n-:ˤ&cE?f]i3iMk 5UDhhV#`pz 3 r-5“pU\ [9T[@Ķi9 IagP6%YC_9Ei_ m> 6s*U**5jE3h3>}9@O1U. O@Dq#SO,()@ЉKq*M$ uYZf p;s8 +a5J^vu];VqMZ;[=|\6 D ⠞A*{n.\ mOF4/PbgIؽb/zB-Laę?Om:xL[$/QkCdVnG(?܀ڔsܜ5U&ȍF AfT5ƬkWF,ڱ;A6~}GbʀR3+ ₓED[6}[/5A0D6|xe/:´(D8djI⪇6 *ߑNS"WK^~&ċVc!ʸu"YjΣwBpBmxPvRXDIk_?Ihc3J}>V.]ib艿x(Ȗc "s/6fnj#S6"/\wfAd'~PHTB$hhQA̬7Nb`4&;zZyqOO'/6&gJpwku9£`zh90{*JH(e&$ner!3.!߭!+>a27G4hyi$FTa&ƸaQB8f-֞?ɂ-<:&B'Kg,eWI4򧻫:ɍ5k-ʒ G}Fdc?GZ_X|})5'jfiI}C:u97ԬȌiqVi=&幻ZO$P37 x֡xrw&N a&9}i0>%1ai9^\>U’2,ŒvXWbKd>R\gN0gr@+{X9M_ľ\R\Nt-Ky)ϞELQM|'a>V 0[:󾄮LCn~m 6*>h"T8\+E>X%-#!PnٹĜ=eq֝E5$msǩֺoQ[;3҇A4 i0ev+Rٚ'?Ke{CY] yD?@qۈT| Ux}BhX :TE^]˩>ޙC_٠nB~ax%EVyZ ˑ=G,Q-k\Cgb!,Gk!ӫjžy7\Vs~%~Kj5rN[Zή{(:62pb@$:R3on03.bK F3o z)0'32q?˞CqjNkWnjn#5t]K.e_׽swx\3| W:)q+* jLfs5m>d~# fX a;;5@7MO2fH_- Њ|-:&{ԥ.?352'4([:4KLur4auHƏM='Re2Q2ktə4/v) N\aVr`z  >äYc |N-*S,iLta| {`8 vi2+A a߄03DG^M+/nZHKT0gf bqIkoZxpa;E`i%Glµ5&y]@Dt9[H H9(*iR:SqNǩ,p95"l5Ӻn|H ۫HVghQqxc8lVҮNQAne %vZe= Y]bN;ƀ N~T kt򩈼ON;ͥݓKI' @+:j!~ &16c&v[1Okz =)m8Q ࢘ F:>BJ4DJUĺ,5: 9o\8UG8"mW-sNi=Epn.D!ԑPHݪ +Eʮt-FEؽڇK!O6y;sug~>#|$Ց#U!*r7}ո,M%)2DHV\q32΄HjBl"HRp>.Wz8~f$Rc/e=}g_ߡ G{ Eml.N~ΰ~GuzUch&4쌣=|tiU ?P~K1iaF6@曌1k|έk"sj{5۽}{@*Zj&i7$>,.Pjz"/Έ!o1C[(@_j쮋չ/D 퓫}RW}9,~'3p̧10[fX4J B gQ$L-\t1&oכLjB2wZf?$*au@]<A}Q_emՂA#8|/=xUu{LgЕ|BT }9[#jotnBh{V:W8 Ym/SBLYoeJ\ ~2&mPSsx51r1kn~60HDow&sp$" Z?e]l9+? $hm"G[N :!N]jaٲvmì4"XiPlծEQ:ic^ZQqfF|f$YNo1\ xfjwȹSdzV/9k n4 7q:Å'nrOAdyl/Ir7{!,wƭqWcd=ٵY~C>{F{3WBSU"9r.2)(78@L~( Apژ/𭌡7j DKzy!F#.! ͌?1-MwY3jn_\iw@ṠLM(;KJ>Cuqh3UgUzi{JghG>_(eB/W>(+iq{ΑKV0!- UOeKhNd鬧ouS.+ZUș%HC)&b5lglL%!(~":if >跢9EE H^'^-E 'Ŷlq<42P--*"'a<ԓqm`w-eeNͲ'BYc?g,10 Ŧuj SbۏIGq{ uʗ#}ؘ|YW_Tu>mnd,Mtp/NEΔ=:+{J_B ֘m)a! :F6hZ)Anv]_L<W:[V<]Fvr'AJm[@F x]\9ED CrGY8mK+v Rr,g[ [?x8G1@Zρec[{42NTՃMB&;PJm3 m5k+Ts71? C-pC5P>)D7Zm-AUg$3UnbP˷:Ph!MUzT[몙ґ ~6NLtC6!Cif,&;/Tp/($ӗ?1,EwI &9ى%R߼y ˰L5-:)FܹZ0~8RPu؉"p}AKۦ1I0;B݄LYzS"8@mf.i4!OK3ӱN)#Xb&AyB=ɮo02 XF82Db\;Xƞ$b:uP_+swޡ< [g 4N?M?ŗo|9!Č0exɧ(ObO@(Fl-eF;H-Po62WNb'Xkz*zKO^F}m`g2>S߃J,R/ JHuVa Øw6>Wrv`bmu"8~Wvkу^dǹ*H3%zX2 .y0i iōG0EK4@I./Pp0ܒ}J2 ōiؕ#ק [%AzQk۵v4ϠOO]{ :}xU*u| /A~(d[ ŒjY7NYҊrM`igF:Gu8\۽rrL;WUVTMdnT .UsԵgCQl5vˢI5;úmfK6OZVL<5z%^ ANoBG6#G|A0Kq&7W?qtU>_dCf2}\)!i8vۙT]꧳7^AcUޖ6r/V [A~#&ls㵎\Ren9pb< " B}JOۍhr&Q;J' Mu+L40kU'UL;G  T{4)T؇}j -47ROeޱf~6 +㉙-%^Zo}ywiAW3-]e .Y訷S+r(yS(>U63 ]*!ij'>B N/7ܱ!aNdIrj౧[-{ڊ!bc~4N/'DE庹:\Aמ=8#Ѷq"n*IÌ+gr Z$OenT2ZJeHh vB-L%QREOf,~Y hM͗_/ׂ pnj^tn}6oZmp 5:9?zbfncD)Moוf/ 2f( KN'?*\h?'mf<Á Y$v]3]êD6/tbhDϙPxCi.FtLt+_|A3S:`<`{Bcdlox6Dsدs#YCZ3&~>Av=\'"B=EnBE]!jyYsMHͫ uƏ dXF^(ߺJg a'H/+Jo!]7&0ڭ󇶎v<4"}*$Ð Jnp3aFjBUG*jZX3Š\Zp il#B-4Wi >Z }W:lpVk G)'EKTY!kGkx> (˗d::;\[G8ًZB=}™ ?r-0_PpysϞE\Q[#wLŽv}P;ģ:()f̼bյ L⽭Kz{ldSI5d50xBcg2rHn:/ 02 {'Ňw!F-$Oe2gHb?+p[$дO)2x%'«*~3W>5ޡtʔU4:GRGG * $yn4f>8ku;Vcf O(Z}2c ܙq/^j#ƠQ=QRvO:4a%Y--a?hnywkϸI=!=渉wГ>/Ec'0Lt٩"mۣN4}a _aa[jTK`Х%}%IuʚPKZ:&s1݇OL[z?m <ɚg̮٨9,73K 0~ KSR/Gb--5@Y@!Fn'.᪓PeCv= &N v"vEmN*>8^Dv+:D{cw*MIp5vE-  VX Ի%@o%[ |- `E$D:5|l0vKҎ.S/3 Xd.}Nv"Y1Bxb) #[Vt1M/_4 q~mIF)[VNH~0([FDFO9ʼn U6ɤFXA`ɬBo@kaeCȲ+ U\rSz)}k,U15y#Q<}i%eD te/2 R%7L*h:7N@OoN|Ց_6L8 ֡ =1j+ vivE-ҹJdj``0MWTmD֠v3~gf[moj"s"2ʯoC>m2G$GۛZp0e?`t݃Pyo6W~G6}W==[^9;l!܎T>Q(t{A4lVJMlI,nVKp2o RoaA!ppP%R[iz}09;nl"g*5Ejj95r*)<Zs.tkϥbfo@ڙWuI Zaa~[׿V,: cPIAKpr=.9G̓z@b#B"ǫJ-FCw%k6Xy6[ʪF_Mem_1N"냑tx!_PȟDMm==Yt'b ,#v?'x&/Nf_tq!2\#dRvķ^y 0ضBU#,D*L2 s}CiwK ~A+\:EpzEVaܾs UVW)0( Mm6$%wIJX L9:IqI8I! `XWQC'2Yx35-(|2y4rNԆ2@)puU o_ȋ |rA)Z>FDK/:^yGe|Ace8Z=ΒXʚQ4`*ؘ*kϚAΰM H>$R̩PdTpn My!W@s GchA,c b<-`FMJ$-iaKp ё1+猋p K(CƐ;"lrJQV~=jÆ#|(IV5FxD*< $}#bOFq\XMɧIV9Өg;e<[uw[*jKEMuӨ. 1 #UEPV}،5KѣAp.O'F$^>q`Տ="X^Ț B$PP`TG^bP5ѭeIy8 G&H#XEqI&:ek@bl}>ϚynoKS%x/sbz/x_b#rܹ@^율(TWx:iHP]b ԦⰣ&2iq #Qu5`=p`D?F샗Zg7BMߺhT#ynCmLlƒ/'Az;G!r9#Ck`XRj,J`:^J4 ǤxW&lCoAKͷ$kSBw*/F~N?u;U=eH4Rȇ*RvMo+M(f@M3N볐l)<@%{PI^V6<;WL >l'^6I5/UFX?iV WI \ H{UԺ]z EY\9D {yKo~ GתQ4NA(+J(K&K`\RbJd\_@*e?2ZF~ʛiot{@Yf!M?ωHy}%>< O3j? ) n^u;̼ jFcݸv8L0fۏ Ut]d49/bMby  ?Cp1Г˾[ސ3e^zQ )u+·&]cnxA5Ax"à%[-moMa}aK誙{OlgºY* A,gG')q}^tD(&-n05\}Q$,{ $}Ͻ<UMFbTU /ȣBh RRRQT.vxf}|D&wk"]$3:C226l>EW}Q .-{Ul[r-Dt6U ±XYrIP;je`ӻ4#D5ŰѢ'{̶gi =p,TAG18Ԭ tR9y:>myAj]q2_Qx_QgAu+Ej&5WoP9KN@K6ab{xaL^.:4 h87Q_"<WWs fcU1E, ğLMnf=oٽfw~E&a9M{j\Mo,naV(Wܚ0Ii-Re40yu(Cõr]J]e'v |#8n̷2Ws&P `=ژC),0.{B[F|=ŘBџ+튼˹koF n Hσ3@Op[ȡNXaFu(/ʱɢpJ.PC85AކBaCW^06/nDm^<ʴ&?v }{<#S/Nb>P rd>-Cb$*ȺKy+;|"=~ [r?eCOLEO]?^tT 8+"Y C#тܳlFGmM]#BZ\9a2A%uJԩR)* `UjhH\Q3E(J=lE?Jv37ae= xrSZM G%.EP?ěg)](qfao3$$YFLGds?2EpQ@V1n=vHe][2]z5[dxML4Z]\x]Й9XB@Ÿ"q l&$ec,\xuF9">OJmTY*CmZ4G ^n5>S xA~wNUk&CxKR -Beg݂z$ xF}|Sok-Lj`<1ogVO/=|K# J, BD<#s9=vەY_ӧ.!OD(9К0(l~ZL&, iTQ?+mo']ٴKM "U=Wk}qrI^ I#ou]żd>B- ^y\cs--ΕOǞg}mue n篲ݵV0!Eȸ aC!ću^I7 tڗH.9O4  uSn(+ ^ rF,)[~ZW."L&0ai+X#xQ/uݫ繅0FG2:_ L3뫘-TI^WobZ6q#aW)!k_ٚhR>j: q06$!iu u%JsvȨvRnL2, qXuvHͧ;aRn&w=u9;!vXB)o#2t[ӱ4 yŅ~;XV9YcKVvR:]YA<_N&TrޚkHmDz\dpw5}w򈟙(-}r|Ȩ;"cfH&#ڟK:cG]'1^>kqȺl"A1Wy7CMh$A9X[G$^jՋW]`3adR3ȡ%~1²?"_z\Aͯȭ2 .LۘP&OxE^GUKvm W҉6pNzV7n‡vt;BE봯JYz~+ҝSQA ?O 59'EAԉZwXB59E hn^iO~3) #pv XI@I(t=uEYV;#U^Uz@y/<~(Ǫ,u:D1.U Qǿޣ}z/FF:,%Սːw<\2xq(da16RnߌrV(x/I,#/JTtH:xXIFL%b'˜:r;.Xf JӸ2 S4 #54č7jI6q H[OEW* d~ؾ$|hK(-ӈ 3_3+!\ /&]AoWAmE Z8n:j%Iٱ~/XUSU'ߙCD 2;MƶVV"x-X唬AFԳݤ;KΔD:A3}yr>anrL iTpe[r6 -Zwr#uwmN{?d`,uN:[9q&?v<*fDDGAĨfX0 fymbiD9mj<>6;rGTY Hmt"_su,Fb/d#xOE ;ovO!\t!;۱NUi D PyME\ȳla :0D Z֋wn wS-޳fQqrۜ pBm)2Vw-V4҂kz=~+;io1B檇 x́)ᬹUK2* ~eƛ%ԊMIXhVj)_o<@jF>@/&$]1Y0Ǽ%'Adbųf絽>5î>ʦ >zsכ2='[$C.Xe )B-ˤvغ8[AJȷLYZE!i= JhA{pM>"JIeռCa䇳*5oՄŤ\ٙo<c'Q(*[԰W2QE_q/h=k>YXғ=&[;1F?Cڶ29Y 1g vYx7}uNIe}dMxފ$Lvw1?ʤcF2f`Qm0=m-GUV@ejSmR01_JA(\_dqZ.I,:u Y0h,@ D9`cTE?ۏdnaw )qgU6IRUt7E\kdY zE(gn(OwO5wUم0U³F鮗Ӏ+J >@s]Eyazj뤉<n&XbZȧxޛi<: N3B}M;KO2 KRЍ(5PxhJϞ'C=0`:r O|{iH4#1|PMW S*{toktR={.`08GZjo BQfwB|]a5|cn.K{O#qRѬ D a]P߁s=p\`C^z}k8Etu -ejy#=='U#A6x.Bm ?R5Fd)VFKFWf"y9Ztvg彮o0QAT|֍֎Xzh%s%Go,H!e8q8Ryd y)46Jș1OlMb^a01uHa(m91spɿ`ĤAy::T¾n H,07 bHMI u֣s49a+f["vS26 ݅7ӟ33{BGJѦOY%9^eϜ[-K(GON:*=(m;ml5hH" Ɗ`?UxMlUȣbjfdjJ(4;Fk_"wIZpS=ڋO֨upQCx=zma&;'muĎ.Glu|+u[)߼W{-DK@|vPE"0~  YZ