From 558d09075a122972239ae1939a1010691386a63d Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 13 Mar 2017 19:06:33 +0100 Subject: [PATCH 01/74] fix PC compil Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/32a0fb6de4f3e9cebfb36a6ac30e7302deb610f6 Author: Jacek Jendrzej Date: 2017-03-13 (Mon, 13 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/rcinput.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 83052f94a..22c45674e 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -258,8 +258,8 @@ void CRCInput::open(bool recheck) //+++++++++++++++++++++++++++++++++++++++ #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL fd_keyb = STDIN_FILENO; - if (fd_rc[0] < 0) - fd_rc[0] = fd_keyb; + if (indev[0].fd < 0) + indev[0].fd = fd_keyb; #else fd_keyb = 0; #endif /* KEYBOARD_INSTEAD_OF_REMOTE_CONTROL */ From 55a2b807b52b2e25698d0880217ab8cba8328c76 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 13 Mar 2017 19:13:37 +0100 Subject: [PATCH 02/74] try fix segfault with --enable-cleanup Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/76530e2c05f6c4f31f0484e91adffab69daa0f37 Author: Jacek Jendrzej Date: 2017-03-13 (Mon, 13 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/streamts.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index f69dcea08..50fb9bbba 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -264,8 +264,11 @@ bool CStreamManager::Stop() if (!running) return false; running = false; - cancel(); - bool ret = (OpenThreads::Thread::join() == 0); + bool ret = false; + if (OpenThreads::Thread::CurrentThread() == this) { + cancel(); + ret = (OpenThreads::Thread::join() == 0); + } StopAll(); return ret; } From c11f7425fa460170b377b5dcb360852262adc7ac Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Mon, 13 Mar 2017 23:57:57 +0100 Subject: [PATCH 03/74] src/system/stacktrace.cpp: Use dummy function for print_stacktrace()... ... and install_crash_handler() if HAVE_BACKTRACE is not defined Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/8340534ee400cc2a001f55ca6b1d7d7ed6e9a066 Author: Michael Liebmann Date: 2017-03-13 (Mon, 13 Mar 2017) ------------------ This commit was generated by Migit --- src/system/stacktrace.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/system/stacktrace.cpp b/src/system/stacktrace.cpp index d692287f1..1c6bcd449 100644 --- a/src/system/stacktrace.cpp +++ b/src/system/stacktrace.cpp @@ -176,5 +176,14 @@ void install_crash_handler() void *trace[16]; backtrace(trace, 16); } +#else +void print_stacktrace(FILE *out = stderr, unsigned int max_frames = 63) +{ + (void) out; + (void) max_frames; +} +void install_crash_handler() +{ +} #endif From 02e9d288ce4a6929e9b2f42925b38d7726427281 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Tue, 14 Mar 2017 00:01:38 +0100 Subject: [PATCH 04/74] src/gui/widget/buttons.cpp: Use system/stacktrace.h ... ... instead of driver/stacktrace Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/03c5d11572f09d180d56fd13802cead69717c389 Author: Michael Liebmann Date: 2017-03-14 (Tue, 14 Mar 2017) ------------------ This commit was generated by Migit --- src/gui/widget/buttons.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/buttons.cpp b/src/gui/widget/buttons.cpp index 1c5049e6a..9f483bd8c 100644 --- a/src/gui/widget/buttons.cpp +++ b/src/gui/widget/buttons.cpp @@ -29,7 +29,7 @@ #include #include -#include +#include #include From 0b7c80d7178a167661274c46b88de9a52bfbe80c Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Tue, 14 Mar 2017 00:03:30 +0100 Subject: [PATCH 05/74] src/gui/videosettings.cpp: Replace BOXMODEL_APOLLO by BOXMODEL_CS_HD2 Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/bfcf4057d5c49999b0d8c57a5afa8d6ed04c5011 Author: Michael Liebmann Date: 2017-03-14 (Tue, 14 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/videosettings.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 06c27be48..093ec094e 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -58,7 +58,7 @@ #include #include -#ifdef BOXMODEL_APOLLO +#ifdef BOXMODEL_CS_HD2 #include #endif @@ -118,7 +118,7 @@ const CMenuOptionChooser::keyval VIDEOMENU_43MODE_OPTIONS[] = }; #define VIDEOMENU_43MODE_OPTION_COUNT (sizeof(VIDEOMENU_43MODE_OPTIONS)/sizeof(CMenuOptionChooser::keyval)) -#ifndef BOXMODEL_APOLLO +#ifndef BOXMODEL_CS_HD2 #define VIDEOMENU_VIDEOSIGNAL_TD_OPTION_COUNT 2 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TD_OPTIONS[VIDEOMENU_VIDEOSIGNAL_TD_OPTION_COUNT] = { @@ -346,7 +346,7 @@ int CVideoSettings::showVideoSetup() vs_chinch_ch->setHint("", LOCALE_MENU_HINT_VIDEO_CINCH_MODE); #endif } -#ifndef BOXMODEL_APOLLO +#ifndef BOXMODEL_CS_HD2 else if (g_info.hw_caps->has_SCART) /* TRIPLEDRAGON hack... :-) TODO: SPARK? */ { vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_TD_OPTIONS, VIDEOMENU_VIDEOSIGNAL_TD_OPTION_COUNT, true, this); From 427083339fcfe517e5e39b9036b68160796283c7 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Tue, 14 Mar 2017 00:04:03 +0100 Subject: [PATCH 06/74] src/uncooloff.c: Fix compile error Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/a3bd6bb4de4a00824b6a38359775ae2ab22c9f83 Author: Michael Liebmann Date: 2017-03-14 (Tue, 14 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/uncooloff.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/uncooloff.c b/src/uncooloff.c index 2c48e8cd0..8441cf1bd 100644 --- a/src/uncooloff.c +++ b/src/uncooloff.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include From bd7ca3d48b96f7c4a21e4f7f7b118f6467629f01 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Tue, 14 Mar 2017 21:34:08 +0100 Subject: [PATCH 07/74] src/gui/streaminfo2.cpp add MP3 info Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/90c68453a5e94524e0eb04a6c50b29d79f35c5b4 Author: Jacek Jendrzej Date: 2017-03-14 (Tue, 14 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/streaminfo2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index a3a32cc45..f65f6424b 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -626,7 +626,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) */ audioDecoder->getAudioInfo(type, layer, freq, lbitrate, mode); - if (type == AUDIO_FMT_MPEG) + if (type == AUDIO_FMT_MPEG || type == AUDIO_FMT_MP3) { const char *mpegmodes[] = { @@ -636,7 +636,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) "single_ch" }; int max_mode = sizeof(mpegmodes) / sizeof(mpegmodes[0]); - snprintf(buf, sizeof(buf), "MPEG %s (%d)", + snprintf(buf, sizeof(buf), "%s %s (%d)",type == AUDIO_FMT_MPEG ? "MPEG":"MP3", (mode > max_mode) ? "unk" : mpegmodes[mode], freq); } From b78ecf27831b9c5eb1ce1c1cbd5fc0953a7584a3 Mon Sep 17 00:00:00 2001 From: max_10 Date: Wed, 15 Mar 2017 09:47:07 +0100 Subject: [PATCH 08/74] unicable jess added (thx DboxOldie) Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/dc9232b7e96f9d44c6d40e03b8a9cb57e97e563d Author: max_10 Date: 2017-03-15 (Wed, 15 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/locale/deutsch.locale | 1 + data/locale/english.locale | 1 + src/gui/scan_setup.cpp | 20 +++--- src/system/locals.h | 1 + src/system/locals_intern.h | 1 + src/zapit/include/zapit/client/zapittypes.h | 3 +- src/zapit/include/zapit/frontend_c.h | 1 + src/zapit/src/femanager.cpp | 2 +- src/zapit/src/frontend.cpp | 72 ++++++++++++++++++++- 9 files changed, 89 insertions(+), 13 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index bfcc447e1..255e0687d 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2199,6 +2199,7 @@ satsetup.smatvremote SMATV Remote Tuning satsetup.uncomm_input Uncommitted satsetup.uni_settings Unicable Einstellungen satsetup.unicable Unicable +satsetup.unicable2 Unicable 2 (Jess) satsetup.usals_repeat USALS wiederholen satsetup.use_bat Benutze BAT satsetup.use_fta_flag nur FTA Kanäle diff --git a/data/locale/english.locale b/data/locale/english.locale index 511f64b94..9c446632b 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2199,6 +2199,7 @@ satsetup.smatvremote SMATV Remote Tuning satsetup.uncomm_input Uncommited input satsetup.uni_settings Unicable Settings satsetup.unicable Unicable +satsetup.unicable2 Unicable 2 (Jess) satsetup.usals_repeat USALS command repeat satsetup.use_bat Use BAT satsetup.use_fta_flag just free Channels diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 7eca091ec..2107c9a9f 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -90,7 +90,7 @@ const CMenuOptionChooser::keyval SCANTS_ZAPIT_SCANTYPE[SCANTS_ZAPIT_SCANTYPE_COU { CServiceScan::SCAN_ALL , LOCALE_ZAPIT_SCANTYPE_ALL } }; -#define SATSETUP_DISEQC_OPTION_COUNT 6 +#define SATSETUP_DISEQC_OPTION_COUNT 7 const CMenuOptionChooser::keyval SATSETUP_DISEQC_OPTIONS[SATSETUP_DISEQC_OPTION_COUNT] = { { NO_DISEQC, LOCALE_SATSETUP_NODISEQC }, @@ -99,7 +99,8 @@ const CMenuOptionChooser::keyval SATSETUP_DISEQC_OPTIONS[SATSETUP_DISEQC_OPTION_ { DISEQC_1_1, LOCALE_SATSETUP_DISEQC11 }, /*{ DISEQC_1_2, LOCALE_SATSETUP_DISEQC12 },*/ { DISEQC_ADVANCED, LOCALE_SATSETUP_DISEQC_ADVANCED }, - { DISEQC_UNICABLE, LOCALE_SATSETUP_UNICABLE } + { DISEQC_UNICABLE, LOCALE_SATSETUP_UNICABLE }, + { DISEQC_UNICABLE2, LOCALE_SATSETUP_UNICABLE2 } // { SMATV_REMOTE_TUNING, LOCALE_SATSETUP_SMATVREMOTE } }; @@ -878,7 +879,8 @@ void CScanSetup::setDiseqcOptions(int number) mfe_config.diseqcType == DISEQC_1_0 ? LOCALE_SATSETUP_DISEQC10 : mfe_config.diseqcType == DISEQC_1_1 ? LOCALE_SATSETUP_DISEQC11 : mfe_config.diseqcType == DISEQC_ADVANCED ? LOCALE_SATSETUP_DISEQC_ADVANCED : - LOCALE_SATSETUP_UNICABLE); + mfe_config.diseqcType == DISEQC_UNICABLE ? LOCALE_SATSETUP_UNICABLE : + LOCALE_SATSETUP_UNICABLE2); if (mode == CFrontend::FE_MODE_LINK_TWIN && mfe_config.diseqcType != DISEQC_UNICABLE) { count++; @@ -1023,7 +1025,7 @@ int CScanSetup::showFrontendSetup(int number) fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); setupMenu->addItem(fsatSetup); - uniSetup = new CMenuForwarder(LOCALE_SATSETUP_UNI_SETTINGS, (dmode == DISEQC_UNICABLE), NULL, this, "unisetup", CRCInput::convertDigitToKey(shortcut++)); + uniSetup = new CMenuForwarder(LOCALE_SATSETUP_UNI_SETTINGS, (dmode == DISEQC_UNICABLE ? true : dmode == DISEQC_UNICABLE2), NULL, this, "unisetup", CRCInput::convertDigitToKey(shortcut++)); setupMenu->addItem(uniSetup); CMenuWidget * rotorMenu = new CMenuWidget(LOCALE_SATSETUP_EXTENDED_MOTOR, NEUTRINO_ICON_SETTINGS, width); @@ -1091,7 +1093,7 @@ int CScanSetup::showUnicableSetup() int unicable_scr = fe_config.uni_scr; int unicable_qrg = fe_config.uni_qrg; - CMenuOptionNumberChooser *uniscr = new CMenuOptionNumberChooser(LOCALE_UNICABLE_SCR, &unicable_scr, true, 0, 7); + CMenuOptionNumberChooser *uniscr = new CMenuOptionNumberChooser(LOCALE_UNICABLE_SCR, &unicable_scr, true, 0, dmode == DISEQC_UNICABLE ? 7 : 31); CIntInput *uniqrg = new CIntInput(LOCALE_UNICABLE_QRG, &unicable_qrg, 4, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); CMenuWidget *uni_setup = new CMenuWidget(LOCALE_SATSETUP_UNI_SETTINGS, NEUTRINO_ICON_SETTINGS, width); @@ -1332,7 +1334,7 @@ int CScanSetup::showScanMenuSatFind() //init tempsat menu void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satconfig) { - bool unicable = (dmode == DISEQC_UNICABLE); + bool unicable = (dmode == DISEQC_UNICABLE ? true : dmode == DISEQC_UNICABLE2); temp_sat->addIntroItems(); CMenuOptionNumberChooser *diseqc = NULL; @@ -1357,7 +1359,7 @@ void CScanSetup::addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t & satcon } else { if (satconfig.diseqc < 0) satconfig.diseqc = 0; - unilnb = new CMenuOptionNumberChooser(LOCALE_UNICABLE_LNB, &satconfig.diseqc, true, 0, 1); + unilnb = new CMenuOptionNumberChooser(LOCALE_UNICABLE_LNB, &satconfig.diseqc, true, 0, dmode == DISEQC_UNICABLE ? 1 : 3); } CIntInput* lofL = new CIntInput(LOCALE_SATSETUP_LOFL, (int*) &satconfig.lnbOffsetLow, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); @@ -1833,7 +1835,7 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* fe->setDiseqcType((diseqc_t) dmode); fe->setTsidOnid(0); - uniSetup->setActive(dmode == DISEQC_UNICABLE); + uniSetup->setActive(dmode == DISEQC_UNICABLE ? true : dmode == DISEQC_UNICABLE2); bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); ojDiseqcRepeats->setActive(enable && !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); @@ -1855,7 +1857,7 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* linkfe->setActive(CFrontend::linked(femode)); /* leave diseqc type enabled for TWIN in case user need different unicable setup */ dtype->setActive(femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); - uniSetup->setActive(dmode == DISEQC_UNICABLE && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); + uniSetup->setActive(dmode == DISEQC_UNICABLE ? true : dmode == DISEQC_UNICABLE2 && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); fsatSelect->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); fsatSetup->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); diff --git a/src/system/locals.h b/src/system/locals.h index 8aa833059..ffa9f4f9b 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -2226,6 +2226,7 @@ typedef enum LOCALE_SATSETUP_UNCOMM_INPUT, LOCALE_SATSETUP_UNI_SETTINGS, LOCALE_SATSETUP_UNICABLE, + LOCALE_SATSETUP_UNICABLE2, LOCALE_SATSETUP_USALS_REPEAT, LOCALE_SATSETUP_USE_BAT, LOCALE_SATSETUP_USE_FTA_FLAG, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index f1134b99e..41ca230ce 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -2226,6 +2226,7 @@ const char * locale_real_names[] = "satsetup.uncomm_input", "satsetup.uni_settings", "satsetup.unicable", + "satsetup.unicable2", "satsetup.usals_repeat", "satsetup.use_bat", "satsetup.use_fta_flag", diff --git a/src/zapit/include/zapit/client/zapittypes.h b/src/zapit/include/zapit/client/zapittypes.h index 1751450a2..aee92a37f 100644 --- a/src/zapit/include/zapit/client/zapittypes.h +++ b/src/zapit/include/zapit/client/zapittypes.h @@ -41,7 +41,8 @@ typedef enum { DISEQC_1_1, DISEQC_1_2, DISEQC_ADVANCED, - DISEQC_UNICABLE + DISEQC_UNICABLE, + DISEQC_UNICABLE2 #if 0 , DISEQC_2_0, DISEQC_2_1, diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index ce8fbc389..987148734 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -167,6 +167,7 @@ class CFrontend void sendDiseqcReset(uint32_t ms = 40); void sendDiseqcSmatvRemoteTuningCommand(const uint32_t frequency); uint32_t sendEN50494TuningCommand(const uint32_t frequency, const int high_band, const int horizontal, const int bank); + uint32_t sendEN50607TuningCommand(const uint32_t frequency, const int high_band, const int horizontal, const int bank); void sendDiseqcZeroByteCommand(const uint8_t frm, const uint8_t addr, const uint8_t cmd, uint32_t ms = 15); void sendToneBurst(const fe_sec_mini_cmd_t burst, const uint32_t ms); int setFrontend(const FrontendParameters *feparams, bool nowait = false); diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index ad6db6b83..4d9c19205 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -381,7 +381,7 @@ void CFEManager::saveSettings(bool write) void CFEManager::copySettings(CFrontend * from, CFrontend * to) { INFO("Copy settings fe %d -> fe %d", from->fenumber, to->fenumber); - if (to->config.diseqcType != DISEQC_UNICABLE || to->getMode() == CFrontend::FE_MODE_LINK_LOOP) + if (to->config.diseqcType != DISEQC_UNICABLE || to->config.diseqcType != DISEQC_UNICABLE2 || to->getMode() == CFrontend::FE_MODE_LINK_LOOP) to->config.diseqcType = from->config.diseqcType; to->config.diseqcRepeats = from->config.diseqcRepeats; diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 58fd2d5ab..a70b2a80c 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -1211,6 +1211,12 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p currentVoltage == SEC_VOLTAGE_18, !!config.uni_lnb); + if (config.diseqcType == DISEQC_UNICABLE2) + cmdseq.props[FREQUENCY].u.data = sendEN50607TuningCommand(feparams->frequency, + currentToneMode == SEC_TONE_ON, + currentVoltage == SEC_VOLTAGE_18, + config.uni_lnb); + cmdseq.num += nrOfProps; return true; @@ -1368,6 +1374,9 @@ void CFrontend::setDiseqcType(const diseqc_t newDiseqcType, bool force) case DISEQC_UNICABLE: INFO("fe%d: DISEQC_UNICABLE", fenumber); break; + case DISEQC_UNICABLE2: + INFO("fe%d: DISEQC_UNICABLE2", fenumber); + break; #if 0 case DISEQC_2_0: INFO("DISEQC_2_0"); @@ -1384,7 +1393,7 @@ void CFrontend::setDiseqcType(const diseqc_t newDiseqcType, bool force) return; } - if (newDiseqcType == DISEQC_UNICABLE) { + if (newDiseqcType == DISEQC_UNICABLE || newDiseqcType == DISEQC_UNICABLE2) { secSetTone(SEC_TONE_OFF, 0); secSetVoltage(unicable_lowvolt, 0); } @@ -1495,7 +1504,7 @@ void CFrontend::setInput(t_satellite_position satellitePosition, uint32_t freque config.uni_lnb = sit->second.diseqc; setLnbOffsets(sit->second.lnbOffsetLow, sit->second.lnbOffsetHigh, sit->second.lnbSwitch); - if (config.diseqcType == DISEQC_UNICABLE) + if (config.diseqcType == DISEQC_UNICABLE || config.diseqcType == DISEQC_UNICABLE2) return; if (config.diseqcType != DISEQC_ADVANCED) { @@ -1561,6 +1570,39 @@ uint32_t CFrontend::sendEN50494TuningCommand(const uint32_t frequency, const int return ret; } +uint32_t CFrontend::sendEN50607TuningCommand(const uint32_t frequency, const int high_band, const int horizontal, const int bank) +{ + uint32_t bpf = config.uni_qrg; + struct dvb_diseqc_master_cmd cmd = { {0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, 4 }; + + unsigned int t = frequency / 1000 - 100; + if (t < 0x800 && config.uni_scr >= 0 && config.uni_scr < 32) + { + uint32_t ret = bpf * 1000; + INFO("[unicable-JESS] 18V=%d TONE=%d, freq=%d qrg=%d scr=%d bank=%d ret=%d", currentVoltage == SEC_VOLTAGE_18, currentToneMode == SEC_TONE_ON, frequency, bpf, config.uni_scr, bank, ret); + if (!slave && info.type == FE_QPSK) + { + cmd.msg[1] = ((config.uni_scr & 0x1F) << 3) | /* user band adress ( 0 to 31) */ + /* max. possible tuning word = 0x7FF */ + ((t >> 8) & 0x07); /* highest 3 bits of t (MSB) */ + cmd.msg[2] = t & 0xFF; /* tuning word (LSB) */ + cmd.msg[3] = (0 << 4) | /* no uncommited switch */ + /* I really don't know if the combines of option and position bits are right here, + because I can'test it, assuming here 4 sat positions */ + ((bank & 0x03) << 2) | /* input 0/1/2/3 */ + (horizontal << 1) | /* horizontal == 0x02 */ + high_band; /* high_band == 0x01 */ + fop(ioctl, FE_SET_VOLTAGE, SEC_VOLTAGE_18); + usleep(15 * 1000); /* en50494 says: >4ms and < 22 ms */ + sendDiseqcCommand(&cmd, 50); /* en50494 says: >2ms and < 60 ms */ + fop(ioctl, FE_SET_VOLTAGE, SEC_VOLTAGE_13); + } + return ret; + } + WARN("ooops. t > 2047? (%d) or uni_scr out of range? (%d)", t, config.uni_scr); + return 0; +} + bool CFrontend::tuneChannel(CZapitChannel * /*channel*/, bool /*nvod*/) { transponder_list_t::iterator transponder = transponders.find(currentTransponder.getTransponderId()); @@ -1806,6 +1848,32 @@ void CFrontend::sendDiseqcReset(uint32_t ms) void CFrontend::sendDiseqcStandby(uint32_t ms) { printf("[fe%d] diseqc standby\n", fenumber); + if (config.diseqcType > DISEQC_ADVANCED) + { + /* use ODU_Power_OFF command for unicable or jess here + to set the used UB frequency of the frontend to standby */ + struct dvb_diseqc_master_cmd cmd = {{0}, 6}; + printf("[fe%d] standby scr: %d\n", fenumber, config.uni_scr); + if (config.diseqcType == DISEQC_UNICABLE) + { + cmd.msg[0] = 0xe0; + cmd.msg[1] = 0x10; + cmd.msg[2] = 0x5a; + cmd.msg[3] = ((config.uni_scr & 0x07) << 5); + cmd.msg_len = 5; + } + if (config.diseqcType == DISEQC_UNICABLE2) + { + cmd.msg[0] = 0x70; + cmd.msg[1] = ((config.uni_scr & 0x1F) << 3); + cmd.msg_len = 4; + } + fop(ioctl, FE_SET_VOLTAGE, SEC_VOLTAGE_18); + usleep(15 * 1000); + sendDiseqcCommand(&cmd, ms); + fop(ioctl, FE_SET_VOLTAGE, SEC_VOLTAGE_13); + return; + } if (config.diseqcType == DISEQC_UNICABLE) sendEN50494TuningCommand(0, 0, 0, 2); /* en50494 switches don't seem to be hurt by this */ From ae81e81414d20001efdab28cd83c2ec04cdce250 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 15 Mar 2017 09:47:07 +0100 Subject: [PATCH 09/74] icons: re-add some familiar icons Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/696f5ae5f665184ad449828a309c27bffcae0383 Author: vanhofen Date: 2017-03-15 (Wed, 15 Mar 2017) Origin message was: ------------------ - icons: re-add some familiar icons ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/various/border_lr.png | Bin 719 -> 3556 bytes data/icons/various/border_ul.png | Bin 745 -> 3913 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/various/border_lr.png b/data/icons/various/border_lr.png index 2e9b9be899d0a3a3439dc15e22953543df9b1ba8..69205da355f76f10bb5e6179adf0f159dc35718e 100644 GIT binary patch literal 3556 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 b`OVcDP_r8IrxWDVj{(-^4rWhGd{X}hYp6F@ delta 707 zcmV;!0zCcX8_xxh7=Hu<0000GwrUFi001yhOjJdG000DT1Ox&Er2_@HjwK2St{4`! zDk#9&tSqz|90ZgE#4apMNz~+0RQ$>`WMbsVavrY$0004WQchC_dDFRlOp0vJg| zK~z}7-PW;A!!Qtl;p3hl=@Ym~3lc&?YNoD{2j)oO4Vp)2cEr$$fvsXWOaeieut7uuL6~qrAfZSQ zNHBm+WSJrXlfbN)&oUCwiM%N0X{sndCa~zij0997KY%WQ5R(W4B9RyCJrDeZ8Daf) z`P>gd0WZ;k_W*Dcn4K;fxCzwy=HdEdTUSiMOBk@b3V#7Nu`uAG-PVc&Zo&Y4(KZ3# zBotFcAhs0zsIV0Db~Nn3w|oHwuJ_N#K2>K$w^YPGTCk+b#VE5&`T43C#E1 zPb56Z@_$u2d{jn>lm+IzSsjj8E5U=j2dSGF20`)=?|_>ao>d&^5+SgEbb(0>4;QHs zo?c&^Az%W0d7w{_V00!c>(@iVFPOt-_x;muYGvP05Zry*;3(*))Pc6$RNe?YxG&qS z4F-`gK$lJ9fI*P&k{P1BZ8pkVJPw#dS=SY@syy92k^8VH>r7G0%>Z}f#$!b7^jIV! pU_=t}U9!gz0uTe3*>7~j^$Vk~UUt{y%ZC5}002ovPDHLkV1hNX79#)v diff --git a/data/icons/various/border_ul.png b/data/icons/various/border_ul.png index b34a271063d57b57b7bc086789c9bb01b676750f..f69959d76ac161331d0df3a3a23f42e3568cad7c 100644 GIT binary patch literal 3913 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 P00000NkvXXu0mjf#dsdE From c2a00a87692fc93c342c76575d13f44f2b114f4d Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 15 Mar 2017 09:47:07 +0100 Subject: [PATCH 10/74] pictures: re-add familiar shutdown picture Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4a30321468e9eda7e246f2cfcb70f3ff54bb2958 Author: vanhofen Date: 2017-03-15 (Wed, 15 Mar 2017) Origin message was: ------------------ - pictures: re-add familiar shutdown picture ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- .../backgrounds/1280x720/shutdown.jpg | Bin 51962 -> 68692 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/pictures/backgrounds/1280x720/shutdown.jpg b/data/pictures/backgrounds/1280x720/shutdown.jpg index 60960440f6b5972cfb1cd3490dd5ad1fe09810b8..3dbd47f11bc6e59d31bc32eb9366d2b345bc0c9a 100644 GIT binary patch literal 68692 zcmb5Vc|27A7e9VyGG!_2BxEa1h75&7$x_Bz45=6**+YdAC8Q*KF_9(4*xR%WQKBM} zeJPQWeW{c!d;QLx>HYq^f8WRVpYJPk_xrl9bI$WT&v~7D`}5(?7lhwf-$)<9U@(Xw z{6qeHMD`*aD^{R?94k0*92~fn+^beXTf@c8$<4QhpPz3HAFqIr2wp&NoggpYTJg2( zL`B!HU(b)1kdhFS5)oT3hIWGCz~NTnR<2&PYPFaEpMco^bNllG5#Yo&#IhsFIzhS>EohG{U*?>J<*Xj!TEgrGsv;8a5jz4fm`ttdmA> zvD%Z5tXKh?(AFx;U)N!6p$p7<`3)5IUaNBRyNd}r@FWU17C~@yBIesJ(-I>rB0zs| zaSuEdBYH!Jj>zcfa0q06-hgm6^CLFc5H1}ZQpf|i36CclOSAhzFczGdI*6sUk%hFI zB|1Rp2AUiEaC+Ab5fM?Jao0T;@qD&i*@cgv&XbDbGI6u`-&8tWaoX?|}-sTDs0;VlQ8l#$0Pg zz!n@%R(pu>*buHg+dpvNIS>K{!95@%7$Od!f&IY4O{5uf<2OJDB#aJ%&9)n`kha3c zz`is;ELP~i0&#o8dWbTDtPDZ)Ibe+u<8fmR7d`!-Cdk>W1G~;wLf{$^vL3U=%XlCK=BNTE^q_RAMU)%2R+p)Ssg#5CM2Z64TIbP4XY5;C4r)4f!)6P%OQV}ks;~h4q1%5OF65sr1mReDNeA`> zFS{}R9-NiPvpnjgDyS3k;*A@E&^Q2+p_y`fFcubJoMcq-983a{2*U+ADEt5>7%dxw z2#=0=mO>ad@*1cXa}Di~ErDuu2a3841?psgA9^tj&n2zHrI*8G5D{qsB8kSc z$09T&1g<9_@YDywEUoeAF^e{W7Zrep5y2PeX|@Bb{5y6m+mR7O)ajZu>nunYLg7Xo z3B^Ch-(&36>MJ3zf!!+2-u*w9s$%~fi9zV-HGj2^D9b2t5{_;RK~JNqH^xFQAv9wf zowFA)Iyx*ZxfxRcMbK~MvA_tfSZ7dF2VU!G;we(FF5ti1G6(m7a zZfrA?NX*ospcnqdpgGH(*ar|%2OTU zP{LTI$I#J(05&GNMjIjIuh9?$&%vNjGXF}=h6~409oALIm2ZAp(*fg$Xl>56q7; zUeOT@!lpgcSZFI|p^3#k|JoQ16Tk-SR*Zc?N4KDR0;dkTrQ8gfLr|thSAQFb`;Wxv z=!q5~tP>n`ys?cgIZOwU%zDtvbyQb@xj`q9$=3KvxQ3q-gF>7rd{KvkE=>^(fj@u| zMt3jM7y}%{5)HxQScJ{Zh0+F%OtcCEPmyLl0UY8VMWOw%S|SGubv!7B6}G@{qyhYY zyYzz({eVm>~xQK05phvRr zLZc{4d9bDl!`Sw;hN8|2PzNU?Akxqg5kWRu0cGm2Z!xwp7S5-zLNEIOYl+5e1b`xq z0K!NZmWB~d4r3l?Y%>v|A)F9ASi>P;Pyl1-$}DpMTv2Dn(OI2f++YWSjSdwQ^*)4U zS`>WP7gjv_<~V5`WEFk*iHLp(>uOj)Isi)&I~<~M85#k{+X5!p1H$mIG(;1O>c7&j80n}|2x6SlEM2LKN@!Z<)5oT3QAjNXkl_8nA0&R=RpuXE#KMI6+ksJv)iKx9xPFI}%j*03d{ zqj%~O_8r^V?!WifHM*b15WG<-hF^IhW-Y5fJ5YU zNgx~AxFK+|V$TM45GCT2aa-{(4q*1d3iqD~+j^Bwm!@GO_CO5h;L$}QV}z^dBmp-N zDutL(mJ2dE9kDAUs@^^B@vU48Z^J z9FWYAJTskX3NRde5uJ4@YHL;pY&u{Y6YT?Ijl*#ZhLMWB&^>5k&(MYLHOx_Nc`o_C zd^&V81pqrRxOBZZ>4KaiY06K)L!6d_jJHqaTs;NONqmTE%9TUo*(G97|13@QY+DZ-)F zWX4-OwH2ReA?L2^iDojP1Z0IidKMZ6Lr0K1`J3`}9^gPQ7!E?>F`;fmzzq<3CPX6m zg@)l+L6}IP&@;*4XW-%}Skc(XMGmEb#X>G;5~JMkZmW|K8C?p|30dpO4zUQf6-Fia z0yuor%6y1l|78m_e4&CumV^cwVhC&za7+}J*o$(|19$-H1i*7R;rMoQ2lmCt$`Axq zH;DrU)%#E!FbFhk2%B>MMXMO7t#xd52oDmeD$31)4JC`oNYjbTzqF4zLJ^n}xF_d3FvDT1HstY5_$-fO9yiyyf5Ufc(4ErxD{;_=o#%D^)&(;Iw{;C z=ouX5HY~*ql@V2WUA#2H$hM?}K!%QO<|v|vaSMmic&MC|OgB1uF{l>*inJA9OU~J* zyN3o2jfLfmgC|!1UD4J#{cA1coJGS#-(;u0nJG1T0PO?_cuJbS_-bP%8_9W+^lOa{&J*eN?J=SC9|D)KjW zkw7h^dssA0V6hvR9t~FcI>4GZJQ}#$rKuuWB+!95nozKK!A%+xX5mm&5ky9_2_-Vg z4bQ}zyD8HV)&u~@$e|I7!0}@ zI`)eutkn24!nns0g_Svh8&J7CbkWXnTza6g|4a(et6)Aw!IRdamZy@qiBx$!B#cmX zKyZv^N_LSv7&`>pY(f;yME-GebZ|6XECgQ=EW-G*rCX>#wi~B2{N7!2Lj5zum;n9@ zrb8`79`5d1zVd?@GMEGa!27_ z9AfTN`zJQ^W{Dc~+s&{#^Lksm;OCd%m;qc{X(pl-+#HjIdJu*F|jWxNj)rZC=e z9=-{;v3Q4-O7H-Nu^~l6C~9+PYuyO<(3lUX24)}ugHs}}3FAS1s(pj5mm9m5A{e5|0r|N3ofXnh*0O|z z%5C-aqZ=P_INi9s@o_s6!yy=QIp+b)8Q6jV3n2v1g*-Qw2zfU^n212Rg^oqsq4H$T z%?gDGwv7PsJp{o<0=E+hG&DZ|+_YXi3K;~zMwrG=x7Ovxkbx8arh3+U;@?N2ni76X z0K2w^$-~q-1S(*to+&_hBpxzcs#CZgO zQB6SVfp9{0L*b@j(cF#%s{$qthehKVH&6f?%NWhVks%5sVQz46^R8H9Z7Ek+!LfDd_4+aYX_*fc5eU|_QUR@FX_y+>k z2qK3DbYyi{NMsDZ4nZ)n8S+g~2p)SCFXx5E7w}`i2dA+OX92syoKI#ItgtI|oj4(` zL$Hg7vV`z;3wempJR>A!rezU5(VR?&sqDY0EjysnbI_hq#T>cFP1*od$3q6zLK_Vm znj?4vbf^cOh#mlAGa-_3GAWEGU6e!jgis{!>@sPV>B>8V1-O0XKs?4xl7Mh z#@i`wl3!vx`*;`e2;-8woae_OR5QkSYdtzEb7GfF!u|$SY70M+AEu`;t&j$^b09iv zWX7aJRx{sFh!D&K!gNAJ*KlMKLm?deEe8QZv7OJETY+Kju4{~i+^ATz}!ZagXSJY9{pr0%Xuszo>@|f6f&b#v1QM9d26QdGhLTvYvu-~MJE^; zm)i_EKqNY5@R}SV)PqB6<`#8%kK_ZjVB#&D<+GAAD;oba_cm#R+>6guO`r0}s=J`W+8{05K1i z@8xjYsKuj*Qj4_NpUtS@FOJr z0HC&w;1GCFo4LiINWg&wX=4kS%Y&Q^=?z1$tILu~0`w<7GXZ}9c~&-WZcg;V7klBU ze=P+908YAy%>SU~pG_jgoC3XaVvZvK6Y?>e3a3_`h&wqLgUes?8h4`bjf*v zQVj%5JWJveTdx+=$V`CHo)o5ASPl+KEi`NtPM90=Zb*13tgs|45U(d=_~Nn^=iTxL z4+JfpMU|n1f`qCbgc>(L%1=!2CJ2`nfEYB02wu(M7DQiOZS100gfs{ywlMyyUui7( zl^alI(KH7YOQXtL>*DF)t&!I)sEkZhyE4WE6L&pkzetiBGYX#cj4W)9COnYGniHSA|8TaT8T9%eMHhjtSqF}UCftN= z*PBf12Q+Iy=L4FJB1aDM6k&_vrW~d>zPL`$#<{9t3rWBWCYmcm-pSBCoy*2M75gNr&co9=D^=0xc*Q;bO2bI}8879@;cNEg+FWm7f_ zq0UgaRS?XHhxvf9%^ogYYd2bPjDW?}Vt_O_#!K>L3*bC7$!~F^%2Qh?0AR8q4>`NY zF#jC}T$P;du6Or##BF_=aRZY=!^njW8{#7eAUpT(Q0j$BT&^d%p^qdloQVR$Z z_QX>?2_*33SZvh(&?p0pi96HWok>HHkK&&ooT}^2v`8g$F)3bzm95Qi5TbAdPy~u~ zBGDp;pGeB#hB*ve!>V+fyA^c-f1t$FV)1SxqdAieb`ped5CMqK=KGXurkP?#D&D#w z(njMUIqd_Z@nk)*sB?$}BT6j$kcAo}6;J&(#ccz_+JBkR@`6?z%aK!TYqZ~ncT?`Y zBq7z}$_U|3x3?cj0(Tr3TNGmOx`~%`iD{~Df!y-q(nl7VjakW5CfI+zob%7Yc z%M6Q;s$?Q56C0YU!xRP**C}Gq1>eef=&s$^YGVmgC3!NGt|G7B7BiOznB;n8M;Un$ z6O)VE_a9Jejc`x((s`!>2jaUZBv=c_cYUCmI)hEp>KYOgZVtT`uYF+dszzk`zZOo# zk#b*}xIZv=`(kY4{KDL=&)8-^BeBh$$UFszi~u5tgapzZ^j`J~Eo%uv?wbP%A2&%Y zv?2SD8^s*h2t5z^GmF?E4JL7OlL+?!4Q?hL?qDkvg(gQBQTsFZ(~Suvns86{&{9o~ z+4`G9ORr)bQ>VB!Vo%mnHDW!@>wSZcwZOu`2wfN`Pwh!U2VA2@9MX7bpzMifn}`dT zNigw)w+fhQv-=%~s)ikcmHO_vVjD}DE>!0%l5)%1#H;yaR#6i{i?WdQk=$_7kTB6R zkx*rY4QsC{JJVI;?#3&lE(G?Zg9{-*IEEWp*l#9h?rCucJ_f9T|FnYKjMl3KI(tYt z0wBa=U30WZ$z@E_72B8tVU@O$}-`5DDm%gGdV)1LN16-CXDggHVx_b zGcx!cBUsu)1-AV12_Oq3_k)C7huhPP3L zS{`gUGvsj(Le1BT5x|(%^kQ=&6MRuHG>nwP&xF*kYlRz3I8h)U1Uu&36TSvmuz(oD zayJWk8?allmmagu7}lpL+xP8zs=u-zB8j}>bbTG;V*ZuQNAPP7s3=BB-DK9Nc!=J1 zP0op{r?Qu(&O>3cZ1tGer+vsumQ>oBGvwR{UXbknT1i>cDYx{df31mU*|DVLaO?rw zdVqT8sc(esXf*EhM%RKjk_0VsTP<>%*YD{<6K)zS=Qd_VHK5ha&BdvP1RRt@&`1V} z5ISXxe@ldf+=FScoyk;eZHAouehV5CV>jL)(q#1DZSD}A;( zLaN;+G{!N9{3JOU!GQ?h_-&-BQX}(ZuLv2E2Gcp$T3FP{((P>*6b@m&%zCBAkA3ti zdUZUNQ+c7DS@#v|U%Q1S(b9obE0)(O{X8to+Z2ZpU z(oFTjWkH3HR(v_fcw?6;+4+96jNT!)NSe;ZPF;%#R`k)c>{{V2%y#K8TtI{|Oy$kp zNp2SRxP`+AG%CsOGRj&+#9wk!nSwqxSQ?9x=x9GL+6;iy;GPUCh@6{*( z7~;N)4=#kSGC=tfK;op*SP^nDdGk7Wi0`wPD9~x z^_q4LZ+(>~1W`@;6sjnR$_3o?UwW1J!M}FD@79U0pQTOZ3h_q?y=(=B9aWNx&az37fZs$>+X7|UiGej zW*~}ELRNJ5-dLYAu_~5T1Eb>l1rfC^$4DymT~$B~_uZIjHQR>(8oqmCo&3X;RFwD! zfe#{36a<8k9!w4^!+yQe62X+{w80gs-A=+f9Uev2;D zsZ`0uR0i=)8;L*oz))b#bF;8vjq4`$X|?VF3CZ}f+6LjIWR1dYZbJrFfw9VfFP!^H zAcfS;1Lg?;>pKpW4`@9qD1dFzQJc`{E)FG0a#bi>2u4JNZ!(Eyc-I3&oP}a-A1Vs! z6KZ)?48))CTELdz;3kJBYSBfjRh{#Jyalq+$vGVj4XfkzF6de5+(ik)$UT1bBNJU= zfv~+Bw?a^dJc$x{T|a(>k(iOYbmaA18^Z!+)Nt8R`#!phWkZJB4D(yojKq!X%vjAN z>tBWHxih_0)Djqj3^f;&LM^W5KyJ;iMk5NNTnh`<^a7@$=#&m!qFmY1hH%A+EkC<1^fcr}vTUi=RrWk*kJsL|M^zp_vKKmzk0wA?=C z{9e7`fKUSC_0aZxru*-ba|2SW!sUIpHv~kzO{-DWFm{Qr$VyJS%IpAa=awe>*X_3fc)%_%Hs#3<>;ZEHb#BN4 zC@TA_fHPdyNBGe8p@0C+;I&HPs_MV#v-fh}F^5{gUR6NKG26|t8a{iYuh%FVddF{5 zH1uID+^U$BdhU_RZN+OO_f6(+_HnqQF#Pa!diSXx7oJNI9uMdCb&ifro(Nb-_v<0{ zhTof+@R3sJ`0{a{Z?BZhpjO^qr7iuEPwc-)nr&Xz{~cEMGA?)9gm#FvX4-S|!g{3@ zqtStf=T;=t*0pQFNv-6Xs^7@KfnXGAk(oF#L!>O`9EO{mAo60%MEEd!p-akWpM_HKFne%?ym^O2Kz zR%SS##{ONM69UmT(>qNKnhxOK?-<*C!Or;B_3p{y0Mo7Mvy8y7v|}Humkm_s*Ar*d zv))dqe4ev42r)4V;;{@kKPUQb?A$r^471?-v|>G*mfe^O}Ejj5CE=e!4O^V+BK z>O^Yp^}nCobIz)GqR7s%@LBDF`@3$%*d2&T_&hH%w`uSO>HgiRhhHYs3VQ0Is<#D2 zk>4bb(NkcQg?VqL9_>m$)U!pu^v=0SpB00b9 z3Fl9$$8w+9eMH>TE6`xgBlo#D`C~bwpI&7jq8i>UzMfqi57Q#&4&HT%$G23UT_aTs;c9a@-ltAJ&(-zDwra(mb5g!W z1EEQ33xPE`)54Oa0SSX65qG4zUj^-tqd%Cqybz>m73?cIuVzL+H4*j)*=i7_H14Rq zxu#it?$saUrp)W4*=@B0omwF^)$5jC#-V2uY9Ic#uc;P;s~!6?zSYPkIQ>DC`ukVS zUy>49zBw@I8Jsl1>ddh(`0?uW{c)4OwYCP|+%|D=R_V+g?zfpNGmD>BO;*ci`fHjc_`KV0b~b$S%C3!{<_tEu-go!(9O~7) zkvKZ;?X6`Iv+eWpA?;G9N%HoX>G?R)=kkrBo@Mt4w-cz}%_ko5K6&Ey`yk1Z7UI ztPs(zH}4C6R64(7OiITC6>FP8)RmK^L00#pJ*(||=VnY2q$XCXd=1 zGRwdo<2Krxm&pr!_R-t4`$Q&A$8|pn+P@Gry}3}tCAex^-&d(pr?S);v4!6|Zie6by{Heg09Xc9qCnxy$46vjuIrz3ZCK{0dk{{9aS^sblbYz---A zS2?brxpwNBm(sR@?_Yk6rhhp1bglsv*|2}~_RbdGfZEx)9V^bwzdqPGcB*XCc+!p6 z-rl)VE$Sz`UwUlIYj`#-S^v{kEq`Hhe)n(tk>TglJ{M|BOEi4V+Fevn9q1GsGnk7@ zIo^}luNhfe+2(!8Nc?=sYDY=03xy}cChzZhw%PuMzwM@eLTj9)_sx`~Qc+tQ4^j8z zBu^{x0mk*a-lchx*6lXG#CfhK^zE|EYHqSWyy~)J!^1D$L6$KRt;@x!;|7iW7XHa; zkG?!i2^rKSZ<;Jbvz2SH^uwq@pip$;9QG@G=+f^6DeTSla{OjBN>Q8CZlKtyMeD^C1o1bhw6>DU6 z^?>(?>%F{?=&V$&;h3s_0iCcY*6TL)haaJkoXaCVE8^uR>X z=w8Y7mzo|Co(K0y2IMCVPfc>w$Qa}AcF(KW&YHB>)a{V?aVTTlqv^Gl*FuDrS?|PD z&dZFXQrG9c%XK-NPZ}!BcZRP?@-qsb3mtwwZ@2Bu-7bQxh}NZoidx@j-($1tC$~5} zDYuVp%1ab2X*ghTF}?KFar?bjywhyejaNxPXzSkB=2sb!a{OcE#i3g={tiv5jRBM7 z3Zu#Z63N+rhwGEdc{RUALU!=tM_+-87_LFZWB!x(uQoN7HtqSJZnKM4p=jf^B(w1d9!NuX%1?3 zWZ_15T>+H@G+{(*_K+Vk|Gw#^(BbX7Ib+M}7-jO6eMNlZ;w{r=^$^vgU{1hq=VG_9 z4bnj8oMJoWHtz&JQTP1XaLj&RjS}IM2!|I3V1^iy3ll^vx)mW;k|e4hjmCPXXmpm~ z%#Qe3u?}^7ntiOS5RLU!CFsP#>QsvQAS*X4-B4{J|Jmx%kf-UY7XkFsyv zx+f-k!nAm~<<7dchAJ7x+i6=Fah0*GmIT#zl~P@eziqNij|g8ad+s|HH#F*)d)Be_ zM@r2*$m$GBp_HpOmtf-jc^mw(OV^YW#YRe4f4XnwK7^=59q7Z@xEWmN;xlC+n3%GtnGd)`BmT%|F@b_ zyUfA{`mSHj?($BuSr)oe$m=yBH1|99eZb^sNuc5u+?svy-!)@5Yxv$g*RA?l_@~4U zFA;tPjvP*{aIVPo+-(=~&W6Q$j<)x?Ja{rvq)v#6G8XVLNr@T>a{SnNxxdQNe{XfA zme&p~<=IMn*X-1<`Z*Lb%eGLT#xF z-4AapU7b&r67+h-|yGpy6%~Q%H4&ayT-r= zDL+o>dtYeE$ZXSmIxd~tUEFJyGvCtot}x?7-A}(?o`W4>{uSHq#(vUk{jRy@p>^HI zcRMa?Z1OJd(ucZEmXVlqcF026D#5z@m+hmc)fF5`4|&5ylN1Y*zRsL8I@)hN@ya67 z>fuh)r+rO%op%zhra8Wn(kOItt*mN_F2AfguU1&@^sDnzOu*su1seSqnr>8`o}&HK zKXA*$JmUQD&z9i{u_2d@fsQlb=k>h>RO||t2@9X?f4*b9|5<*#zg+ahtuyKpzf}|y z6gF#1b@m2G1)CH)FWi|8w6#)JS1LFA=v-rW@bk2C)B17uFSUcp=RG?Nk|KTkzr?LH zlS}yMm{nIbT=O#B5d~k30SkQfC@MS8X_lD=2J-&*MEAUA_HwaZoDvGl@xXM8ppQzd zTP~THCA>BJ=#ph;C)X7Bf9z>6=kZcKvfm%M7Rvvy^{rk^?$y*dK3EW-XybQ3=|UbK zUuAXY+hxmvo{Fq!kB*avg?jH8G6O$)_mq!zI5a&Aj|qGj*Y~BZB0H_{o&B?12{i-U zZ0(}wH-|g&KfDJYuOB~4^-Mn?Tij?Gr6jy_U*NjZM*&8Qp3jBtVw(5?AZa@Lu2=XRUyqb6OrCUc;FL)jB?)@4hOG~?1Tj}$b64ezLM+;0%;=56$m2t6u zq9{kpgs9kT?S5q?@lr=gte5GWtMJnxgPs3DaZ+h)ek2Wo6YEf zW@3_rD)XE|nKhhqclVjMP5-DwPKq?G50rpjZq$B%d_>qz0d~d4H4A@l{@aiDPb-pN zYTo`k?Z@ud#}pnISyqmn-!|=pmY(QJYx~dI6VZ(CMq0TU4ujrl zs~sgamk;N?4A`3!yKj+DWB#IN-9YaBbFRcO=D~vMzR@`erIE)`u4~$UYM5&I?S43~ zv9+)NO8>*?rS9^(zc2Lc==ma;{>12#rgGyWU9E`n3eoRBeRrMdPcu9Jrhnsh&pNKy z;ZNyNTf%!EE%onSUF5v&^OVeq9iOCD)qR=!9F-`tb<9=HeeOP&`{z-$M5{SUuzb;E zx|VIXwvdoYC++aCL`BZCZqp-57!5~>r$e%n>9xx_lcffgc2QRcVk|sICQ?e(Y|oms zd^tP)^q9Tk)}5;3AHPqY*O@u@LI0k0&zBkBVc+hll26OR1xc-gb~~yxoawzgt&P>y zUDj%Tbn56KSX{94y7S(5u;I10Rj zJ>@)KeLnD^#N?#!rt@-xWeioUH%(o@6ZkBq5y zN}<%l<@@sok8J(={r0@sx|2KByskd5JDD8h{c&M;%+&g&WLmG3jcv7k(&<0Qj&NF; z#>iZv;k(U^yh`?pXC+#{|6IRtWSi2}iCbdl4lQU3>C8||Zht*})_=F={I92hcH?oj zPwGT=2g^;{N||UF2uFzx`_&fm9+W%dXK;Kbt!!VDKvn-8$&uwhNKT-w*1q(pOHC1t zyL{7|PWu@&_M8{Kr1;MIQO-j3dG*n^&xZS^lv$GX^@%7uM)@>cC$#>MQTOZJCh>U6 zPjxuD>2#pfrM{&dnx*Qcx=D%$CG3UHdF}K)-7BKjWACMOJ!4C`Mv>`ga%tV;PX`uj zYNxw*2!z{?c?-;(8p;T4a-2?+S!q4O{Bf(cEmk{rk?;JK4%*k6C+(B!X%jKYeg@}1 zCK=o)d^PZ^v+I_%f79!ZniE?5OT+wa9{z`(iXRSpd!XI%VAAS=Zr{B%!f`Tw&%3qW z^r<#^o~^m<`10#$XWrEgO|9|K@eEtDsFo_#6jRF25pO%bIgQh%d_9gCvC30vsYS>8 znKc4=Q*m5Bz1==O3H_w0_4^NEIad>{Es-QtBP%NJHvjEmnoG{K)u1T3G9e-os;wo- zxeWWm7mr$>k<)5x{_{aAkbHQ)0&F(#In` zH@Y+(yu`VoW`sN5c}o6c>P4G~W0WnBL|&vm(a=E)T~~S=&7rz1rxyz)=8Xs93Dt)6 zmGR=PLQrky$`ax=MDxcw!KsFSa!JTBTWYor!pT_MYyF$N>*B?oqD|t(2ck_*-JJN5 za0saD~wq_aPiw%F}<4Sql6 z{X_jQUu+V`0Xy-hPD_KmO#QN8eBTb!`iz5Qy&vs+bNuSwTu;49r42JQG6S53v$`}g zHJk%J{7OpUwbmH<73&XsuyWIIf-AlZ($Fiu3?{m!Y=7_KdnJo2@J6!Yc1DomIa!00 zosE)nXI(|prL<3%4?WMTJTvpIL8blE$2`~4q0z`s;m@bkPnu>((MNv%cG~r9Y5u%x zyI)@E``For)~EgI%Yw^^r)T~k0#X?x5Gck5Y! zi!0!}=LK=8d8gg7zL%%3jd|O}+84aH53(O~n33B1WG>^aByWZ8eBDUp=d98=-#fd1 ztilHk*N*H=GfP%%;v3#OJ!wm49%W1y1-kgEN-Em z7T;}do*kpyMK(DeWw@}EW?yZ!ESod%2QlN@6+5lGTp@JuEmSD-D`!-`?g(D1H4<1I z*X!7m&?Ds^JHERyd$wF#@J!Oa#qH|B^BV)o^xFIXAPT`&=fpNn)P2&RIYdzqDJM6;As+Z{uy9zLplhTW^*-CPHPXmPnsBIWnO zPY3iw&js&j@<{!Im}dmeS6uf0gUCKH%cev!&pzm&j14~;{M4>lv#DL3F&Lh*rP?ul z{a`|RxZCjM!5hPwsDs?F?(Nd(O}F-P4R;Udl@&$T`HdoJg!iKKC6_F9??&b6O3#+M zwTf~jzU^-9eO(5U=NJxm)#^=ZU;5nJTySdtk=-jFmJgi#&1?4rx1c=g?w^r8wfzs0 z*V*Dc1mDOtWF4Wv%54; zn7?-Kcx|wl^`u84ez|!2(^VC_V=gHGO{+P1VjKNNHRj)D5vDebmP-Q~A6n}{B1 zMZS(b5)bEh$H{)H_B$OgUuvf^o?g>7ctt_;ux?i00>OW~zeBoY#FnhAVwtmiq6T-S zXLf$xSEnd-!d9zs$;I)@lIGC>%LVJCX-TsCHn$1azMW00%yMcJN;mypeXt^brl{(8 zo64t?w8{JR#e-s}e!M-dy`yU2gl3tET1E6&N6*aspjL+9v%=i+y$Q7+F4#UXTdXh$ zejDJJC9dwd>%rCV@ht9$p5*U=-L*ujn_l9Qnc`_{`!(mDOX=U)8^1G+bf!SJvu!fA zw8=ng_uQ|VfdwUkS55B7)Rb>T^@Y}jv^%ki+h0wKd+3+X+ zXUW3W^SA6}O>Gsw&3P_PB*$I)d0$edKCex$!nyW>7HMUwdDWQSTlbzW*NZp5I~nt&Y_8_1tHR zItj6#y+6mRwM}cjcdO|vhy)IHSBTb0IQ<;SiNg9c<;PdXZn^j557LwUb1AFXyQ3~H z=*YDNzRky@i+!Cx#d-cVnYC`+dvQ`GzFUgtU`}Iu*OL3U6J~>6>9Vv_F`8=XHPL}t zO7FBQQ)QzjlZ2`Ue~--DyVm-P&8|$EF<*!azC3NUNbg%#w41-6kySRj_jSRGymbaE z>oso01hiMkrasl!RwY}-6#4A6*)GQK#u=x$S4ZOQmnYJBy&u;ux(4N!xi;3+Ow2z2 zc1}y%(yenlEuhrjEWETQ=G1eoXC`qGry}ll?W;TORG#;tBSt*!FkfL%Nl)GrQSYB+ z`saLat!F$6AIMuJ+-7ibo5gIO7wemiMe#JduXYJ-lfl^mWr547ZEx2F7Bu`pOn#Yn z_E*H!O)hWf_)-xX*EEy#q53JG{)U#M@JJyvZiQq3X_w6ND4u-Npmq8XMtlBl(2*z$M54;Fo=MAY62#22`2;NeMPbn} zUOP3Zde^ZxE7_Y)u^Qo<)N93k2E#>Vgw|9h=o3nk@~-p_Z|7* zA~|aJlMcJbB>VI$4|K$-S@vL>&0I_2?Q z_Hf&524QseLQnkgwp95nv&VE{I`T1Rnb*E9Y`(ji4^kVssp~~Ja zwWsQ=dq-54himVr!iAqD^m*6kQZjl}j(gXg_R&l|I9Db$vva=x)z_;j$!~X`wO1PZ z?ok(17yBmS_u{AijEvr$vmLX^;x~tzD!vQlR z6u!)te~`qzt$uT6M!b1zM+O&eoiq^ngJiB4@%w`a&F_8rZbVz-{FgD=zCjc2VUBdYV)`theq zZHyb>6}J9Jn;OT3SW~5b@t}m($>6;3jGA+zK|PVDeJ<@-DwitAuzogIFl#VAA0zdu zrb4z@>4kyMu3PRu0=1NO`rEq%nk`Of-j_fAd}5)pwU_Y&O?7nZ6iWQBRG3bU5u%d2 zZ;*F=vUm90pJh83?R?|l(${&-ip>t`x2%2o&)Um2)i8QLuAR_~_~q;IU45d1@m!`T zv2o+Fc;La2xs$`18LH*2lWvQZ*?n5$S_;o)*DMVu40Uvwno9jxmvMEmWbS#I%B54w zK}W9lC9gA!w|8$S)PJ7t;`jAO-`UaXVcS64lEhT0)qPK6gcX`Jw|N!3RsHl@tB}?( zIjmlkrTJu}#`E=&-%RSAUBU;_sh=EH$WSY9vmgCEk;)QisIro_-qt|oLR#0NQPSZ;!;&U}pja)X zOZj~zC4s};^Eun)pB-%X|L9+Kdf#Nj^CN+3HjwI%wtDZ=G)bkVP1Zab&AAZ#JGMGj zY0XU2jRWB)*Q7@cL_HbtK8os9A?kO^qM4)QmFF_Gb&9B3j~wD%Ki?$VP{@2Yx>&7I z689`F%C_dOT5Z~9BUocSTsr6R2Wg)S>{=v`{%T7_HGQk0GFW2(Tr%#_uMXCcJfELE zjR9I-7qY%Rf6TJRt=hlW#4{J&n^39kp0DHVT`0|W?0al+;c&!-+=)u@vif^3pIq&^ zuXtvud!|dXOv-LLCBlI4(oE8D#+0w->wfdCjgJNsi#%&0-nBZ8XS_OMVG;4^+fDEK z_HxsE&o>8Bub%0BlQ${b`utGbjSPQ)Pam$u4_ev&@tn9AwF_8loFn`EEOrk}(Kr3<7VnfF^dZ}()~ zwkx(bXB|6#e!I{~5J_jY@2!t04PZXiT(YrcrtH6MV>_&IT3_IZ*Fs~gwXbs>uUG1+ z-kIs-Kge=Y*5MaSs=H_1>-3ops~Z=bZ;900x}`odVN*=5F3gw?SnQxLeN{@acTW$u z|EzHiGVilf2VXIzZaGhxe3#&@DBB5#&P;ioy0vQ9J+O7rU~l0^*SjYd3sXHVyJ_z- z8A|H13+MAn?%T24(a@?Xr90ncuUg*H-2eTdrs*H#>3sQ>@B}K!w)j}T;DHN=!?p(n z#WxmID~Ucia8}}(t?k&i**}OuLwr-EdUaNqH|O1Rcezze75fv!pMUFH@)$cF{c}mr zHSKG9ZCqQ;uixLh7E_t9=A^)ROE7Oac;Qu zvLWy8T*`zgpHHxE|NLIA7+>1i8qc63g*G9L%AF#EpLQoeGTAY>((3Ml)`oC~Xz%Jf zEt@iaZ2rcOk+}IZP*_EMI8Sk|WKOf}c4V7(5U$31`q=xuB}GcpN&D8%D|PNn9j5pF z{3OxoXEyv%>RD>Y;{Np|Mn7u48vI!Pt<*L$_>^;Y`03}(9}2dAz<>F^*`<_`bH>$T zeu)--#>XS_l;(2{fBjtB)`=-m#Zxo8>jpF>#dc~=wrJgNsw>w{8W<1Qs~8szDYM_3 z@4(l)6BbP-KTOAue|C9l8GHA5dcuuy(>EjY8TSUS9DX@3bSeDk$UE=AmRIp#hx$$J zo)iVy-TOtX%yidz(%47!AFLtP+By~7Z})Yy*6UaN96c-wuTAu1 z3kEtw27U*nb+13D=&mifI*GWvtNhZdFa3-rlIXcy$Jw|aKhLFGrkko97LD`!z?Ne& zZ&)V#q)o&2cQV^1ya;c9+Gg4tqYv>h)aWP?7aV~HB?@yOE^+XT-Zd0^|w1)7wk;+3QaZ+7J3V$}1$DQbz zs~KAm7u5RF`unz&#qJ0N@+no`U2G;Q>1nXYRSj?KPZL6=llNPzq5!ddoKAe=Gw(s3oUAd;V2-L(}OA`eK zN!|k6pGb~QEXgh|e}c&)E*gJ^Dr%sXs$eMIUEv)A-!8m=E}I9n1H-AgKZyQl&C>wueEXcJUmJZUDrQ$#D7A`fO8r#- z9elTZTzy(Hck5KHy>`^JyGqed!iJp37V~63-maa|8$ER$N)Z|J zX5YR~sQj*&jQjL68?A^X$9CL-ikO_2N4*^UPm)B|=XtEp=+XZO61#~3A9a%8D?S_j z2ouj1IWPDhZF^K}lSO6rJz9M|*E;d0i?c)McFy{@70utJ^p|21OjfIkU7@PBZ>>Dx zqp*Y5XG^?z&ig~XZy}q_7QZ$q4TXm?@k?Fxxow6S8n}D z3hGAUK2RW&iM4$IpI7}&cnNO}`;#`oC%i7y^Zq6#2iAYzWvi6_)mzK4?X}Ef+V}E; zS8L9z`uX3yueRhdeWoO!oUebOoVhc0`s_}NDUXL5eenju^(Vx;9u-{ptncPf<$tJf zuW0_*h8qKvley;ZTkPd`+i&)$IT2m7uf3{gP)X(Oc~{dVzYeF@L0$s`iWeqFlC0Cp z5^fa5-FT2IwV_BNenw~{I%(8aU~;{A=Z0y0kLlvo<$K3=ZPL10zhJ`=7~bw@n4#xV zVf>}4R4Ct0jxTe{KIfEwk><7bmpi*-*Q6VD@_%y}-0d?bHqLXm?TGPd|HTqg*XP{( zN{4DH8>jZz_!I|dO!aS1Xse7r*1Mp!zU}3iWo@vqWDnoRO3zu7>OSqOl|8F?e(#TK zwv(#A+%sI)qe%11d4Kr}Rn$Xce^wQvD>Z&>d8PVp+a(u)-JjqMm)*#_m%}$^4}aym zSFN#1p|m?ItULp6Ix94AB5-^|TW{b)k=_GJDZhv3HKU&=p8kEQuJdeAO3mwxFDuPt zl$qKS10v%_rd&%gg5XR8eDA;-;=q{;j}j`>n-ppIR_=jt$T9C zN78C$TSE21B5w!ZfOX}rn`h?Ywp3dkeE62M>eOVU)$Kd`W72H>ZoaGDXK+~w_bjJ3 zphDCq?zxJ@|Hsvv$0e2j?ZbZW`OY*=rPDZN=E7Z;RxYIGj_}O1kfTXvlewR6<>8E#fQnThndaee2BosVfV}!Ff2i%gY zxAc+!7piUEMYR}PZ`C;tURbsahZ96{JXhZ2qf`fIJnt_w9^VE&4!~OGSjQ8%=F<;p zC+Gn;ubuIJS-32Wl+r-2L|Dq=i%;B^{nW6oc)OoS%o2daTLP|x0E?%bG4I$>+ovy8 z7JN|rJBHiP=D7ZQH}7i7NhN={3Td~;c{5K< zSeY?1&AX#xsJdIZinlF+{h|p7@~45Dv-A#&yO1< z(KeLL*yLoQ*JyB zAo&O==Dd4N_V>k~;w*3IX+>`4k5PK*Bba8p)FsU_V)@-e`(|ccMPPrE!Ip; zU_;T(&&e67uclJtY6Gri(UYu|)PK#XwzO~e=sHPwCt9nQF&aj$Zjqm*<(BEZ`p0!E z=m>YGQ-)igwUnO9l27ogEjX6WuM*~bq*&m7kT!c{)o-+kp%uEVW*4{f@2OnVecJsP zpmcJ{GD?Ws_vF0$%U)KG)gU(ZkWLhDT2`(fy-I7C_3np1CB0pYnt=GVrXU~qjlBl? zmIU-I^CIDav)BJ=<{Tyap5K@5_3L*2w8rC!^o3R6ifb<% zb|fxN;@wST>3dI8_bx^vYf|NDtnGS4Dq=^ijDvA8*dKcVLt6x2`Z^q5NQis@758$( z#n$*_@aqLMddp~XJ-m90El)pPJkho_n0VlB6);-G41a^bu|R2S0)Zh(HP}(Rt3(oJ zF-lso@;dHSc(~g(M*czs@l_TB7pyB6LUbG^9P&+!YUuyr=j01YJ6`&BpTwImVJ;(a z%!lwb9%my}c8a2{r1aO9d_Ocl8W3jEA`TKvx+)v)<&nn1WzpR7;|0II8H)3YXHcE1 zyZQ&%vxCD+khd)Xi!qoIIM6#DUwWqq=qsQV@}-rR)&%j&k5}j!yxm>0|I$=}3F943 zqq=A9*c)1>xmAu|$V(>t_n9hdT1Y?l!!rH)HVoBE2C5SE*XI;Q?Tf85t(Kz<1JJ1p z@Q133{8{r<%z;Y%nN^L-;>ACpDH>M%&~a?5Ncu%RZcAW|NaS_TOT>$(~XrEX+=0uSbz# ztGh$^GUOy2i)#^VqD*AO?C=R_Xg{Jc0aiB9bKgk+WXHM2hpUWzu_dKSqq6q<=>`Ov z4YK#B(WRC58@QAcv477em&V!lJF~+l=?{c6KV{<7^HOf*Jh0jd6Mv?BcrHa4q|si^ zq<>s1U@{y~JhZgs%I7VLA^#vhaq0x zeCWZYKpU{8UBi`2#YeG`J()f?zin{ZKJm*+L&$+hawq&<$N5f?0=_?T(Zb|eUXazm zU~($A0P?xNgLFSt#G{k1w`g-p(w=t*``TV{7TTN8e^2}*i3yU}yP7}o-oLsPw%n}@ z0%r>`lkxgSdX-bV_2o(h)uyFdzi#fWfaq|2lh!mUTut=au!9q=>R$AT&@`RJd|M6& z<1vS6jqXJ@s$WKJh=p+`N9HtR^_wy*nk;Qm{5h!`y|Y9qo$=Dkv4LuFyyL6zjE*< zBRu`v`5D&|1L{g)Dev|C=o%l*mCoHDYS(fuBG^Se8zai!S~yU;x~zlDkVVQRi{qE>^f?wZRB+V z+K~Tuw1s@yDN1ZIBSFfx3#{|0aQ>&&)nQVU+)_cMYE@D_khJ3AMf5r`7?!7t{{wM8 zmw9w5O;p_IehD+J9v#rH$8g=3lJTrZ4Eco**yesDWYz}gPfS>(l(;=R)F5rz_~ zJRK)d9;3D6|3z%Xd*M=!E;wRu@_69f&btJ zn8%*idY?2cyif$l^bZ{L0*qI5mnsvBzA}xsX$F?Y`z?(3(_O3siZ8$KxZ_Qb9Rtd( z87$MBk=)RC7tVgZe~fUv=6k+jP(9)F5Sr`QA z*5XcoTEEThPgxYE=oS&rcUBsI&M|q)S*%xy;vrEk+$70X3}R(da{4h@gs7;6#nw4L zw?lWk#k_i_mlk))Eqrz?m1|`tOycI;nshryPrCf7a*lj$sr1~Ps`SPChK}KMZ(^?{ zmMe#kC%6l88Y(v)zJv3$ThYqGRmW0EPe1YDq1QrbE1LLWyM$|Gt^a*mFr+n%j1Pjc z#wn>4|2qNo&+LSU7F-H_UfPY=o!=OPfw$4jbgRW<7BH93xf703M7MWpCDA=|c=DC?&I;ZeKn2dX_^nlt?iD-OF9K*3OTHxu5 zxriv&8LbOEKru_KTzWe2TaLbFr-9XQ31ukIRg<7mWz_B-gDy};>YwGck2X}w_Jq_k)GX<>qR@sxU)9>3LUA7>{)hMfpYp(T33jS~llad(UzVct6|G3} z?UsTeML$O|Og7+7vpA>~-Z)Spz|}dk#IPMTRf3H8*D!E#2B0T96d+B2;&HQiA|KR+bej(s zY~5T~r@RBd$iVE0Jhc*iD**|6RKdM}g1Viui#}BbfeJh(Ml93A3sqsgA*9Btcm#P0 z6a>b*D9N_3&~|scFSATfTnC&_r(SGH9TZ&RU_4|`@jtxkXbN8X4N{7QT_={!D6Y#3 z#aO0>!X$ye9Y5L(4|X7HPD^wnOLXx*U(jc37#{$i{+d)FWzgRYxua%A>bBSS5ml{9 zK?ATu2J^^E9l-HcWu@^+cwX8K%}(%l5;2W>amjMrsU0<<6;iaLcFSlqOl1tFiwJ#p zRXQM`jB-Pv@h5-FRvDI`yrZTIkd&i4YLD`ds0@(QZBhiDz?_nI2qEuP;iMvpF)z$T z1~QD-;%gjS{!b7PDl{v&Hp)p^3SA4&NO-B|eIZ1 z>XQEzgeo4Y`LRVX8yD$|BB6$b);&!1QT8D82IZIWWUt!nEAE!2fJwdX6Wd&j1Et1D zJmsFz^||uX_^Vv=ckqAjsAc!dJ(c=Y=EG=Y{-$2)Ci|`k1 z@bL~N*J!0k4!s5zHv#4bRiI>Sb!AofFrj1%%l}I84O6Q6ByS85e@OgBKZHIuEycc6 zg$=8U@l_0x&O!u$z1BATNgyn)j5aDSYXb{)LGOviuvvkEdZ`}Fjm6W!!~8j$AL3n) zeOvcwEPbEZ-TcVqNU0Cp=}kbZ_V3~9?t+5-&AJEaQ})PVL^0{*@|<0BKIvl9on$eM zKeJIl(>h4;ovlGb8+r5@P`}&-5vAdCsua8Jc1^)IK4%xLYhyWBr+4FU^>3NWUjHq= zC>t2zS~1r2;}W>Fj)DmdpPmVHM^vP=dJMX_LJ~a-5#`z$sCx~?5ngz|qn7w@vZ!s4 zBb;(ON537lr^p5A>ESwkdu-nFJWtV#)2o<=JRY2jcX>YL9x=3R;cVsv)43;-O$5IC zn{69J7OvB4w)KAp(5spwCmM%lSIcEcIjc$6rZaG!x7#x~{uA`u@8^#4 ziVq!PETFP<@fD;$3WZljKgJyqWTb2AzoAYWhzN|k>}twsr8cST3`Ih_rvUXq`IGjZ zAAT6V(-1K9%Ou6enI>#<1fL8hpJVi_lRn3xq5|p)X^o(UtckCN(#NoqG4ze*$^w6b ztcz`;uyqC8P4|~(w^ou|b-q_v9GPRg(47!LA-xl|UP+DW#=0hczCd3Q=2@FU{cO|+ z-ZdtkGf2_(cw&CNwJ^(mG~E`Cdhz$o91O1sswn1f;^1o}y=H@~0fn7z4Sfr zVqRYD!4wq_os4M9ijsNcN=DN_MrDuE9UMOga6u%zSeW38*QWNc+E-ZFkFVrCOHO=fUcG{C+AypsEYsc4 zX47fXkY0=ARRV2xd`--NP`K4og&&uHdPCvBjEu&{#uk<~F@972@f6K@W*&*ahE;#! zL`Mxk0yRM1kOhGPB~Cb}FfdZ*T(NCwN*`&}GS!(%B;RllO+sz7V(AAwmS4!t?R7nr zG#D25=X&_e-$21+1XRc`3}- z^sRi{53t3`brLF>B6}!*v2lBsS4>VHeW&^P&GAR$r-014ci-*C3B9;jn0(sp<<;FV zkEG-)X9sdJUjFiaAm`cLl>NCmFGxcHp0{(JS+Gp{-k$w9WLFC~Y;$h_6k{kIA=1ee zh4qx`_I{v03qD4$m_VyX%TrK1nZEAO>sbJLF0#y&t-cW1YVz6<_%fYuIecI}d(?t9*;XE`r= z05h12b6Ec&FP&D#dD$*V*WG^Xwv{ zbLN~m{gkjX@+aW+0{K&O6?rZJehzFxG)Zvk-(yl@r$5lY?;7!hm)(nCXTja-@6vR4?J7vpU5Y(&|R3>T1cG8vy18=ooVTqcELyE z%&KMofr#G7%2i!p%f7t*Z|lnj?xUY(bdow{4D)+Q+)<-d;dj*hz@?P)#ju4PHHCBA1Z)ebdLgjAC1=2%v=-9Y zg-acS9HV9Dg*pGP9CG2PQq6Jcq>+^SxI$SX$ru1=zsF-cYM^PoR)bGKm65cG^YLvN z&KksSFUXw|WPvN}HiJj>dnbZ(chgS3|7tlR;R}stt8qo0sIw3tcQqT`_#=ciSb z^f>rGFzUcRFsg9<;CMQJzqoaeUi2eqU;U2SJ$<;&7-1JkxoR>LB_dK5X-AD-B*+~U z@{34eAE%#y9tZY8({g~kmyDYLJ4fYyD|1_s8nMpz2q`ad6Hj2=encT?<$?^TsdNQM zaeqqlK^-Wms%l~8kI49ETg|rkf^(n>fJd}PD=ty-t7aqq4`8wD8Xtun(sutGY{k4h?NUQspAQ`_RZI? zYOb1|{O~e3cNYU%%M||w>ps$QYJJ0P`_lqCYx|m#c-jE_o?X^ikCcq9@U(c}iV;iF z>F@BL0GLl%)o3Uo{)hNi`p39jX2@IwQQG7o%T>|sAz?27g=S$(TfA?gKvvfaz`i51 zGeTR~O?`iSTif3N3anFk;i?pr14E9`GF{f2yPF>Zd#X;ZuXj*+?uSg^6XxVV{W4#@ZtU zn&mKXRR7HCTEbCDs0FvMH*4j(WD_2+13d2s%-ZOOoU1qI{PDW|jPWO8;j>ipRMe0_ z%y+OLmyB!&N38x%Hg5=Lr_njWGtM4#vyJ@45zvHuW_T{vqfvxtV{j zz3wH=ztQ$}@r6~1tO><5MUtSN_4~}6be;H)xV~ADvVBx{Dg65CxkP_-;`Hr#!rXMb@*QU%o4nyhr`2i*`dE+p1?D-AFYUlJ?7u z?gIqWbeg~4pLZ%(R?#8dJgKYm$xf+9mo39JAGWun@3*kB{HMjEFYa#@{@tPU(9XfV zO)wAxT$ffIZ{I*$2)mGads1E~Cp_>di*GeOU57i^yvd(l3mF|)C`nm+zMd2jhxY;m z0Wn4%bRN1F79()uamc#Q#i`#Q5H&yEA$-@KsY3W$_Qo-ia^o0n&_pL-BvTadd#4*bMJ zQkR$QaR_cTxr8t?Rsfq33u0|m`@ZeASy=5bT6vLahZ;;g5ukmZUu>j}#hJIGLqwY$ z1r9I3-ifa_C9OIKB(8RF6t!Jo7sRmW_AkFE2z))A1z8FE4ohlL?1*>CG!P( ztyg=ocVL&}$@*@Tth2okqb<@RI)ODqYnYppV)0U{yR0_KcIG^(VQN-s1{LQ$pegAr z=;Rpw?kpRn$|bhqJ!}rbwscztWYB&7nxcXWw2;ws&ZEO`P6D|uyQwT+;>2D7VQm)= z(}CQt-EbFe59?&p^9POuYv0a!(VzSDHy}R9V#u!Af@SD^6L`(L?HTawUed>1b}Py2 zDL#R(@uH5`{I>a#ombq~HAkw1hbK}!1J-PRFbAi8Cw|oe8M@T2^oPZbGo+H7#76P={ zy(7==>+&?uvGM>z@5df)COWFqg=_Qg&VWPUrWf3+IYuR;sPs^ag>1ujmLmh*7q~rD zX8QhXKcLJKBi$vA&+0w)eH7o_^7@c0+Kd6zXsu6|9XuD<5vv`iY4giGYBH@Ff&$YT z{U5cR>yHv3-rR-P~7ki%Wosbl5fLg3%S85~cGaNHTu z(WDZzJ1x`EJ!L6c2y+{rdAQLeGohXq#E1fknuSHQP2xABznp=_YW{&aA-8uemdMIS zl4VTl-x0AM$F_R?Fy?n?!e1-iZevUu5hwY$*S)aVtZvkR6!F~_!$L9htw#|}SO7XO ze}0UEl_u_uGH5V+1!;__A-f}9WJ`;l`^5D&F5nCZe)ne5bDvXv@*IW>O)IthODg=@ zL^9uW@M9z*3*cNUn;wn633(;Od#D!}-TBx`E&@q{T|sTY9`aHTm{f0pLc ziWOAVj4bQru$W>{G`50e)r)3G_z6JVJ`lXEavogSh6YV~hta73Iw`f+14hfgq3sVh_wVGCo?f~DR5vhMF>!Cn)2oYEPy`&T(=+!`xlXfvH*T9 zklbxPwj|KpDiT$}{|<~jwGzbv$hL=1EPV3(NITzqwH5C}3pEF)7?XxgHKLZg@fPXjy~B&{7a;prW<-kX3g zWlI+>*u8WqXKXs~`v7s9ih0|SP4*?JZIMng*+*v`cmxkK|B$Y!O`)K+$Y1zPW}=C>*?} zpvL;aW(Oua8dBxcaXV_J{{s_oSper#9-64{zo-Q5Tgz@4QJHVz{MQK;bKpygf4d2< z%5v`+TkW^MsN)oM83-Z+7qy|V=MP{Fn%dzLw-yDvFtLn=u3y6FRV?IEL$tT0_=Bl9 zO<*J?{#wQzv5HEiMf?W1rErv1rRU49*~C<|WZL^8BAYq@Dh)lhI_rCb`rrLKYTZnu zs6;Y--qs~78DL)lm?%;I8iWQArw6E1zi!V$rTF|JhUr9VMLN5KTB_?v_swzuB2BX2 zcSheS3a+kEacu4;EG!!b>L2IK8@v$nu8j)|pqFkAgU2B-C@P6o(7}MJ?)>6^v)QYYJOIws(H?BU$0Eb!5M>}T9 zj!X}EtwxvB2&6xCp*loI(_F^iUX74qkxpq%1_V}4&z6G%q~TD@eHhOoa7cy?`(AeB zwT&!?d6l-dNbRrT99*gRgK zK7tT9&32|TGDcqL+KiopoFEl>OP#uwma!(Cu_~otb0zlNstnfaEymX-7)?1+%*4>2 z(dm*6Q(d0v*s(+DiBPM7Ew@SG{k6(=uH}qg3J<6A7boKJTER@pmM}+>|9J&teh8eK z_b?~|{cQ-3ICVCC*m$7=-s_sOcTC5)W|EdXmR>rnxfQVN|D9da6i&=*QH{)28rQR{dLfgzw>ad;%=1Bd%o|h5*zmAT)imSd+oSR#YIsB(l6yz? z7s51lNu|8X73wCI1AB!Smy!hdkh%m~Ly6xIE%X7sCe(YB`mbH^*93q+Jn{@>t6tSm zuqO+vGMG_Jk7n<}d7DOjU=N@7;2Lkw70VK)ZD6>_&H!@8PqO~4Zz&5kvN2`?iM?E* zn^hifEYMk9!5{1I4zJ|t8pIUze-`6l1Zo?t9Swu??Q6G}=+q4bp3=q4(k=9L*6e!i zJ5slAB2VY~YLp*t{U9Wtwv`$exzg*v#=iJlq#cQxNEJJ8InhiI`07&_zj`_segEKr z`{&9%tJ-}80V$ zWk&n*PShpt$*6e6d?F8XsNO8671;(4w+k0Gk2}CL+T^-!uM*A75nr9gmS1&jcDO#1 z6?i^9nj7p&!v9ourxjY1Hd8W2{K;aeD*XlLnlc) zIrzw(fY-NN=vU{*ayNL$8vkpR-`Hi10ao%ZvDZ+X~%*K&?Tn$~>Z@vQdck%$AGXXl)QpM_ev-UCRo zBp_iVlzx?O@WUhkC@1ZDj^s>^Tbcsz_fICJ0?C)jIq#MR?&_Bvck=qodKuGiYrU2h zt_;(d^N6}=cMAozs(qN$(>#>N%YGWVuY^X954-uaz!9c#jpAAsZAmU|VS4ELvF7jLa zcTwJ^xW8V zSu1Fd%8AI6F^wLH!nbTGP~>?dw+Ye>kd7`Hqe?FEKPt=RbFI4A{$?sStQn4PW`Pea0I?|x^o`Gp76N}F zkYSNZJ&>LS*31HZ?G1b+QD8sL(b_~9XdyV}d`Dtn?87mNlU_OHP?DqWHVn~KbXw4C zcBO9ePi1j}!lh5(hU>#sZAdVW+4C)>%7VU-Hh7>u-#@U1^QAaxY~TEkskLKEaR$Qw z?;9rvd4Kgd&jo(k80eoXKq`&I7+n{k)Ez);ca@Za*>}#)zn2VD>cjWilB7mom?_AWZqU~ng|>(vWjL&x5}5I-%<>_!q@*i1vF`=Y06%(41S3+$+EjduNcOS+ zwJ46^=c{p`gU6g+7WjM99iya^C2i@DH^Vg7p%)L-O-#$*^;j!?GHqiJ&aIIZ*Wrvn z(X$xLeqq5rZThGsj1;>v-*`Nxu%UDvhfkZn%%y=6v!JKI&SZo^>gr=!_bq7n76wsf z2|WmV)f#KId3u?T+*=TqQ#C&YT&Xh6-(6KCKqHVp?YFcj5AFM)+;aj?HdusL&sAK} zFzWSBmirqkq@^O1@-fAy6R%0)$DJ9LRCvYNCci=ed+Rh?Y2`t;+aRPKlYH7lI8d z+=9HHQ->Plwv;y6d!Y)`+6@8|x`kmm5d*{op+KHXFtPLUgU$^qG-%SLhscX?^?s zGd#b2HIj6KmX!wlQOYx%7#ZK9Pjx!n(AOCHY_zDYu(a9(+9<%zQ>vK<3SK{>|6}C)oqMwuMGVJf2sHbQSh6vB^ ziTRCS1tA7UJb2nYlU5oPugyVwuCOT150PR3k_FbDTL$hSbM7p+ht$oXH5%^dHkQt% z-Wtju&n%8!e=r6aLyb4$JMB;pQ5Ks!YE`Mof5p@3f6L7fn}_|4VMRsmi8^|EfWRu%qPl>oU73=pdymgi{+vvXbV# z)2?sK($q!%_#?g!4R77uY4fArN@$;tw{-7tDtm^4!ATnqf5-{=2m?G|L78v2dKoT>Q@H*j2g0Insr|m4PWlE zbeZd^HO)EByJd#V*9W_U|o;XzsjUQ&e2*E2Ne9uwGC-B zR4eSz^5fTH;7+c&meVp^j^QYdv=(tJI}wHl-*wHEg9=9@HihoVv1YA%Tay;T8zTKR zmm{QbpstP7e85rd7mlWdUz}YO-d@W;BM2ou%#`ZkZ!bwz`1tF?gIQg^w2EUhJ zA_DkZ{-JJ*_@8kfuz)VXVo}U49G-zLs1lh)?5ZWK;k5DSLAP~MQ;x55W6j`0y`LTT zf)CQWc=Ur09`ro7cZ>xy7Ei7{mbs=^K=oTc%QC4^x&B#M^eyK0K3=&JNm*0}ABT_5 z?5HuYBN>nFW>szned-y6eeVWo7*L#KL)B4wYS_|SqzRUt45`S=A6&BKq zi#-5(sA8s3HmXGVx{AekOx*hs(yxw&o=lzK+;={KH$3)M`-XNGwO-u_5}auGsb{$Q z$*f0d#~}%(yx}DGX>`TW%{*?s(~PR_ktkzE-yAq)A`^7A4jqLJ2%zZ+CGB|9;#z{# zj#eqScfz8hE&rq~vIT#0a@KYd^A4RID`O9F>ml{`vQowIlov%gMwPz6z4TaQ{N38T zC-0@&#;yLuj zRDtv8I(>^|bZ|#4f;k0x1vS1g#$&N+-1Y*o+bMo8fqEujjPNl966dZ}p7@d$J#=;; z7a-UIUPopm-(vs?($)d>H-RD|;{w3`JqtdP1>nW~eKq?pcZ6Cyc}9i;AFI#MZwDy} z1&&R)#E)dby*Rgd(+UId*&1E|ZxeuoyRV~9N!hhSx9A^z!k!ZTtQ|E5|2Ob;U+o6~ z7M7BZ-E%klc_cUDWQ|Mh;b(Wei?wq~lYli_IEV8M4xHalzuIvr;PuTf&mY*X{4J5g z@iOme4`=ndWkwAf42?eA^2>!|FEmdAXC?Ov?X5ltnH&$ug`0DQ{cDL9A1BQJ<~Nxp zHZZ$=Cqvmuy^o0x*2GZ6X;@G}$*xw7ls5?fBNmDTCS-2Q-33`dpp`xaoK5-AwYn=k zW9ski3)qeM0*BSWw1LnpZ2(C+$zA++g;&iIi9s6>=rw-3r4>+S#R1R}hz>JawX~@N z)Lk_|!WS5k#RlT$B)Pn30ikGj)ooEOcCbH%Tb7N|ZPuS*bT9eA zbaWDZ2mF_Dfq%4&L-61c4A!WSP}3C?N@6|Va9wHqQ&Nft-KBbgrsD<_{`z7ZK8ZQG zf#$81#=DYqKz9LAOq%f2X6eH2BMcsUeRw$#WGb@#S^R%zlaz7Z)K62Gg~V0M1q_8# zxucc}KssAITL>J_sz1dX|L+_yV*9b!X5U{ENH$%89?7DJl?@dZcBLoZ7agvzy+7YP z=V*{*xO!ZO`%HT{syQpDS4NT!RiU~zqHK#gYP{3FaczNKD&#*{Oxe=+CkI~Y`@ob3 z@|NNgBGNviY8}y=Th#MUiZn-Pwfg>knH4U@szTrVy1mRRZ|x|G(5HeiruO}9KG!7j zCL6Tp;scu;AZE*>X@Zhk-A||neUr0)+Q+Dtp3u@D>D`^>>v_w#(1HomHDH<3{e*|u zJzo~7Oh{}1G>bs{2(W~QQElJ!`hA?mPyjGRcY1#vEAt-q&Yi&63OflM`x#?Jbp5OG z&=J~qF4fhL?elLN`hQCGZG{%-jdh>xMgBgJP-47Ub`@#7sOp(V>46WXiEnO|Y)iLQ z2>9uR4=(XSS*2Xj1hbg~c7wHdQBxA;bMCe%FF>TL-b%acvgII2C>}QA2X2$9hq-I$8!7JngV=~1 zEBREiNLxwwOrq#TI_xd~tjz5O?xO z(-Ucc^QYYT`@J!tsVMn|RF%0NO8<*JpBOm?qTt(MffdfZCufv-jX$o?5a|g<&cwj4 z9d9hQdqah2i0twkRxiRjS5k1=p<<<$D>NJ2$QtNl!*(w$gU=W3N1lx>1LPAPD*jA6 znR!Z7Qppd{Os$_Egr6M0viEJ%59g77@a~UH^?Svr$hN-N zUBBg^?>sON+<*(XEWEeEVigWSwAtrmx&38OmzTZ{;r#ZSvQ|$fneD5YeI!1xWAm-u zxX{ZUnv5G*K(hvT70I+=$JWIa3XrjAqwgoLhcs2E5V3f~fLL_&QI@WE%=2X^K|8gw z?rGC^qz0GlW%vHK%-a327aMB05t8Qg;5dxB& z1~#{|yw9%kSwb8hQ_?f-{+pj|;ACS?GddQ~hNfX(x4NYhVp@$sM=5~)DpC*)$=E8y ze?_WThA+aZx5f|rLVsdr#u+Y7gj#BIH8u9cXr{8p=e(mA*`xfc-K(E^PI}C`Yv*Y}PICKhv-J%HMmPB~>v%$7v(~ z0G&&}E5GPerh3-2f@T2Ai~!V5YsXZU{APgLl{u~l_TsV#V#JE1 z0T5__od%c;QVAi-&Qcv-mxSK`TvtFoG3c@yJ|Se~ca(Jo(PFGjgbyA$U(66@WmWpl z_%~hAFPb>lfwn8M)HhkgjOos%24`|T;xtFTWv)ae$+jL7%cH;g?`6B7So zPHtiL%0vBeN6IoFHVh$k{Ue*rRgo$H=NG*ZzvKf04}uJd)&*&AlJC~Ob_)O=c?&#D z?&wM51KKydPt>SKT=I#ya})qE_jSjB8sZ!vy*IpBf9ujw!fEZC&vyV^({~QwzRr&2 zu={gwAiZ*OZ$C}aIZiE&oQ@o=>lEq&I7YL;l>B=0@aR)J&bY8jDDA2+2A>At4bQZu zm(0EwWY-SRU+bpi(q`{LyF)=X`@G@Dy;;_#LArqNvhMbc6PI##_5W7Dt@hj8prgm% z4?M*Y5Fl|viXYyfM{ZR21~zyPxP+>Rpxc1c>PsO2X_Hy?W`~PNw%eJrr2!1bSM|X~q*L1|k4gjP zo(OVtA3Y}RoquA>w+( ztA`&Ly3kY5sbN2&SVgS4L!CqtHU1SP5d44kbt>cF1OnfY*S-k+BL=t(g!n*Dns(K^ zP9v-_yrq(N8BkdDV!+>$`8@TCpAe51xjtqM3s}%E0=-3A`Ar=wsYJo;n3-Md_H(xz zt?r{_0}2PrpE?aPp|-tdMcPret=%alQ7(q7mKqgA$ce^*8JaEWyosS6H&gF5FZBh@ zmj1FwedxYL(w&n~KQT?nD-LdPfAKPSgkW7jjz+Gc)o7Dn)OUNv{nmV!dCrP% zrX3yrWZ^D{9(tan7YWWk9XJ{={~@cL#*W>4jB}Qv;w85#x z4RMoYs>n`G$>v36*9c3vP*g8#n~CqK^rqxPJjy@azLX)VH&&hPT67?TiV5ydMAuYx zT@kbf+bhu5UvNor}fAS;X~Z~U!aFXh$h&1`pVuC)k$F2U8aSJyJN2@XlP z(jDH(Hp^h@v(RK){@xfM-|W6+QsCaGbW9AXKsPeA(d3ilXLfS8kJoJT?fSq>uY%g| z{q7i<+^iqA*l>p8j=lE24@#S7$by&7BELg)Qe|%!@6F&nw1UrexI*NHh4M84$={%i zB@9cN8(b8=9Vb`BV26Ep^DEA!;17%U#)tigksItMu#R z(aXoIMq(0-8rtmV^={mSX~zYmd-=yWzT#!`vg1(W-cNZs{+`=UvU1#b#Gs&ZufPIA zP*7YzZr~q+^sdyC9cDns?C;~JoB2k&v|5)v4jc(SOibd$zq>v9ARYYDnC+x8!LDq^ z3M?&q2!QY`as9kM+3M!tz31JI_zxI*E&M?y8D3RL z=OK?g?XCo5m4Qc?y*jso-_sglaf$#*s4O|yf_`GEmiZNgf5&%FhCQ2V{`%(S{+eH2 z`P`v2&Mnhuwr11^OSfy6-qVkUb)DHjeq1b=ew}WVME6HdwT7h6voWc*Wc-AULWR&c zVN0$GU%}Ks)eBvxbt@Bt-2mymC6-rg&ZO%1h&w2~zK}~}boG@c)F!Sn_=QJ_krqj7WWF@Ey&rCOBpyB;8Nkt<10aS@8e@K%57zdEAwZW%STCNcwmOpUYaDF?Ni z*H90iWYlm!%I+xd<-2;aF?VUBN>%kZn_Y~VwuBx}C{A!37y}t`q;yD1qUo8QD;Aw4 z##_&^2YFgR^3~p_kX&=So7BUXC2q1`u_f9;0JfurF=26aGJy(~St@ zly``|e^=QTfLnT?t?3ni%?XhQbgJ|(C{dBI@X!{ryKbCg597oIW!mMP4~6yNQHrouTz2+4^%v2aW8T&DPfqmdZ}dSn80%}4(7 zb_&txsmd^{{2N7$c|0D_M|fyuRObB;vLQeYpNf)Xh>k|4dt#d27XU#j{Ll8tPEMAIvpAn=$8XHJ51WVDM32h@8w_B8Oi>$Wy$w+vr7|lYt$4JHcI0t;p!aEXisxqhm}d>jokIS zGf91@Qw2SkCQ)F;>26ew=!U1&NUU9Dv|WId@hb!TaH&*vMmE5ax}wVFwwm)bSsa?W zvqZDKR8obTOa&}iwZXfrdq}L39thCzbFT}c9gRcozN#6&UVYaD{dLvA>9Q}+2FfAN zcmWj6v?v6H@NM@9iN-IHvs9z zZgsD{LuLet&yhmi3pP{iToV{RcJBG66{i_edf=JJq8c9jPj6v~t&g2+_%JYa->GRI z?<>5jv}tsJPD+3wJLD2O;ADo|$25zvLpdMcRvYhct@@?v$srdPn_nW0x#dCU3t@(>RV0)|1BOEo{aG&O)&+$w5iIVuLW|I8nZcIrmYIK zqjqcvrU1T3G$2g@RO3thzbkQZv`vt7SNuN*Xsl##a3ip?OZY!9R0vl}R1mHL>KH8b zjq;x*3c;EG^F{JMYocD}iIK1c`dsn<`41v&;yPVcF{qt5%9L41jZ-!muxC4JAEUpO z&yco|uPo$1$Wb`G=dBxHyPDlmTYzmIq5r2FCR9+%Ncs+d5~piZMbwo*A85FiB;W3t zr+p178XGOpx}=Zmp~Q;KI?)co&FImVO)Je=1?)_JG3)L4WBFu5Q44J#ao-%=8B%}6 zF7jp?Gj&_x=q7cjM|It&kxbq|463;th4>)HF1kS{JKt+AjAJon1NOO;8VyH{by&H1 zR^23%QJLxoDt-t~pV?PypxvENQaQr0>f>p{OGT0}qqC^4BeysXzctoz>O_{*!v72( z^juj{+#Hzc=G*x$uZn?js5VmTI;2?Kv!mvuEV+d-0WAJtx~x$m$VI4N6rgty8UuH$ zOoV-#{0H^aghOMWqN;~G7G*3O5`9*5cA_aXqVu}*roCcPbwk1boeISkjF98ZF_W(E z9ISyS?*Z|HfZ6sTG>8%w9`*|J`##6?kg$=>N;rdw?~S zb#23pGwLV^DhPsmQM&a4z9|VYWgAJu3 zZ|>NI24@hDt${yJD>})?6mt^5WT5;`&OL?6 zQClgLH1x5%YxTB3tB0szDe8#evq2y<{j2KIZ3!_&t1hv=bxT!yXMEN{)}cLhud~u$v;;E(VaxbZBLBmjqYI#=l*l%)A*~w}B+V%Gy1?@fRe{wp_NN7@q)o=m++Chy z`5U|D-061IqWSSV$1QX(^BL-@y|Rn~Mq%b4c-mBc(muPBb_$-k8LUE+Xy<<7=~(Eg zp;&}`;SX+?g(zwJ-JhBc9%zJ2*B!YRNzGE`*?+GrWKADgt)to-x^QCpYLCB827qZ_j zF|Bdmis&U!miK(Ws?>4so1=A9hrhhaM5Ncow?i#3P54hwv`>vllklriw*woRsYG(AGhUQLEjSRljUV+kAr_&3^*MatkBdif`P+!JPz<}*`+%r zW_?|Ud{Ecv%Z%RG*qd`BttBI?9LEt#2>iYjdJgnC7{92r-051ui<%XoOI=tKA+88{ zY}QFG@@;RL7{E8zU60~fujC)>l~FHW>;!iY?<6TSx%KyNsb3vvGW%|8lID=K@}j5b zv!7-v`#oB+XPLLW=e1T1$jE7%D6YIGOMo^MiSGdD*SAuPn zOZcgy=!ntk+6+1Z=QxB-88;7W`P%9@lEY@SR&Umxv@fs1uKIAU{>SW|=L4|48Ob*T zpZaKfHy{Xf&G95pN0+47$rb&KPz5~nt{XHl7{OeodH|JE<=aUUjKmCnX&S}X{>VVNVXMW_~{Fq%W zZT@g#q_MSjhnz3aRb#*Hova)uzUKvM?Mv*W`hTc=!L;;7$y(2;TC>Qdmy1$W6`s0n zCx5>9ySME`UZ}-eD434^Z+kHr9p>%lJG-@=M8tfxfyO~5+P2Aco#@o{Nhqmk!>o<2 z%{Dc8-|BM?Z+`t|?DX~qpTO<>xTG>$<*=!Kq&7&X$+3&B<+QsP+g zI4ndEH;^+v?7CJ1%BG24E~r6_lya}ZK6}^l%+V=2qVDKWCU>glHHmM8iGK2jcx;Sw zoYg5hQkGqY?zBzbfLv5l@%^yYzy3)=n&R%yAVLf}{FaFoYyJtaSQc^HDY4_1x(0DJ zwtbM}+L4s>U{_z+KXSHP__R?F>f-dkt|((g8puOW(}KKa;&;K84i&a-wn0W#CM8;d zF^FvP9LPNw+|0EmJ$x=58uLAwC$x=~Cwr(>s+4Rw6U#c3$1{vub)Havq*)j3Me3UM zLUmfnaA!Zr+MJ$V5Rn#1HQLvD0aPcN_d0!D zqsoTph1Nofu=aaL$G0yjzGR&<-{Uxr98ti_n2DR|P;M?Nw$1xSly(Lw$iz%cOjC`{ zK&w@YwHM&yWz}?~pAgU|UWb7BDLUlxi(HXkCD24%B5~K(N=P=71L^f-+G%iJER~Hz#1~ zL8ogLA>Mm-%q4ln(Oc8asM9soRo^9f#$iFKiQHL3Lf#@F1$M|vJ7l%9ht-Ku+p<%Q zu@v)Xba5`35r^kzX14h7>Y-JP;n$YF+)nfc&&|}sY*t;}^V;ow-K^YZAs=p@djx9#EiH8rM`ItND8r|;Lvd>!b)RECw9^FuKsmQ z!GV@v3T@>^u=vE+4ssZ7(;ojIDO~L;3CKK78T&ez*t#^dd`H4ebK5pu+SjdWY-Ib_ z7V^zZxAxk??V0rTBcIP!fMt(l#PjyWD|;$B@%wd?d_(SDY$wCVHqw)u46D_C7hB8f zpT-t$Y@6lhG-CgIV*hDn%LU6k?5%GL-m;T4HKUc1EdT89ZPbFjQSR@g?&YYx>V;n= zSRWqW{i$1o>DmF4o+{WRt!U&wf>>CS{bk$w5jiI2)})tt`F)sF`6FGmRXyLAiiSqD7HwWvVBRUtYp!El3|bk+FU?H&;P}y(fwa_mcG&vQ0wl zRVs~?C~-Q_07^OXtu{87vAk@Yw_lLjnu3OKDTC(w%&N)95iXOx+@-bgQxi5dt-wep zc-~+DJ*O?BpJvzh1yU4U5$&>fRqNLZhv^zum(M$6E=etMwF~aTV=i@uUa1)ur+375 zQoUiYMrogjd?8okKs;ixQ%B}QMH&~9-#(!tAEg0+z zDii5g<1k$z%NY%a3Mp=FpE^P&r9@q<2r%EQ@Ul6qpRCZFPdk64eq=K`DPwp#m0s^8 z1l?^NuO{-`y?bDd^X(9OPOLyax2EqcR+5K??O`k67m>X27wlqQ>v zpBRDj@lufMXYDmy=8k;66e;57GeO_9vZb=^Xr`#!KAI}%WV%yAv}>zo zH_|j>>mZNdl4~aVuCcYJD}rSJzy{ur^qvR8B82XO;*u069OPHd@-D()*JMaO)B0cJ zP7W7cfHcnSMCS!g;qfF;6?#l`2IVK=_JJg@L_lZLHS?S$za^JRLH^w=LfjHHs+ zQOY109#^}RTn>7gtX5kdS97{pkTr==HC-sBytI^MO~Cm)89ODYRVAo-C)D&xEREnO z*gLLwzyEfUwz{Gm>Ho9&$PpVsW5-4S1Yo-w=}hkXciJEQ5wa$g^JOrr7Mj( zLL0>Y^+C8V9vPi$`Iz`*0VI}OaG>ax39WUSX-QeFYCK5@u8@(|aDHNu@@W;16>Lt&~TY)a|zW z-xysKLQQA8iNb4)PGF~@kfb24J`wd&{inj|@w~+ae<=~wjaZc03&a((Z`~PyM{DEZ zB9)lZ$Ulc8nm{-4PQo(09kM22Q2&`Z8>#g$cA7bt$Gu>L`ndB2qmC0i4*0)HqsQ|I z-V&7JD}1PS=DKixZn0=+XL^$wip2(@s7P7Vs602f^!x|TKfvbZBEo|roN$FC5jZg} zTuoCQO2k21Xa8#iz!-r0t`1jo(g8gYdmpj{Cx@;A5UUcC)IclDD$;Tg%ya7nBs#>x+LwVcr*r z+B^-ueh+>DL}s-iGp--kz8;-Qxr_!X66;G8HH6(`<7A%SS68Jv5l zcyo28-A(MH2;%iI#kY=}>ZQC?r2l|{h2|0fjTqDoz}6`)1Y{m5nMv?Ya<~KyBp@Sc zI&|WjnwX!!sXj2|y+sM*`)xknQXlx&3?_sG`fO&}?t?MDiG5Cp0R!Dte4(oBe(`haMEv{7~iizO5)c#m%hy*)iD}BU1(tpYlgiwkx27PpC^5Y*=$PkcTwNWy5vEizO%48k;37DBq z3J|mjCH*BXehu6!DjdOcn=NS{N^o8**sPZe33r3)u$ z@Fn6C&t9SPEYWO)DoVXPu0J|o74;Z;bxed_fn{VtZEiPGtLcGdpdovRX(?n><1MjQ zvFwCl0KY@5aHL1o<|7x-3SWL7q|-Fr!nVlq5BC?Y3q^r6m5jhN- z58`H{Kmqi}V(dBq0D!#R-jh}Omyc!VA)nlZW^Q`)m_uTqQAt~BlgK5}PFXOmI8 z)`)_(BwM~(W1UTSTn!0DVaLWg8}KYKBt9PcA#Q|9(7-)7HwrT#8Z#!^RT`mieL0i_ zpdsT4Ns)z0kLsGyGYcFlgc;QX0RkZD3bAWvs6gqGNZ~cfh1@f053m6|F2F^IK;|I6 zc+y4EbP=AoZ;^|P(FYb~u^;`RlQ@`dHzC@O1A`0=Ixe5`+>2%cBX~Th2F%|v(ed#R zunN6@je#%g&KT5Wfm!gv7+3QSK-;Y^PIr=Ct5h;Lofnv~sHCpEU3nhUk77gsw>Qv6Q3AIQ1z{gJ}yM;J!vvr&4<<2~Z2{9WnKCHDil*k~WRF z&DeV+UhL{3n2`jur-j1gBxB{<_UcvFhXE>R%$H@L9ViIV58*20I2<9Acq%-ms|p@4 z2y&wxK^KpUjzQ0#h<>+trX4xKQAE8Qmyay%R)A-NIV`XN;l5lO1i-d_o9N6hA7Hg_0eB8D(H)3T08Bu9fx;V1DM238eOPVEKUlL{YZQwgb%a*(2E2$pXV8W zfS@9C0+!wqXNboF7XmycV?Q{+qQRXrWKCQ)ZREwj3#0z!nc6w=8^34#3J~JL<9<^n<+$uK%K+v%AUgIJpXa&gc817DW!bj~_teYJ?tVf_ z+#*Lx1Xw-+{0I4o7X@9wT<%ZY?;<%jhpT~*HXjy76Z4dr<H-tiqFJ(U2@l;T!%>*7F>oDV2c|S4 zW;oWlEOS!LSYsL(#F?+9^pAH7gcDG*t0oKykXdOk0s%dfe3{({$U9`7ff_05=2h;$P$dbO@CA0GDv$IwMEmOaNR61Gh^_@6`Yr zk^pcwt{j$5LMetZk}NF07*Z8;S{OO-Usrnk_l3s;uvZrpRI8i#w6&E0VD`iA_anhU z1UEo0;j`a4f9t)DxSBB%fHE-}tds@pzy(Z1bOm=xqXHItAcxq21tIKiQtFwQQScEP z<7b`3yYWg&f5rSpbs^}DYKA%qZ4+IJ!agPdV$hNp#CE5fC_)QBB!mJY06$`GCb)-3 z5b0^7qjS++(s{Q+Y?5@u90u%^aFpJ0f@d*;yFhZ!Qfw7LaUK@!5xQ4!zyi9<)WwzZ zf&iM>=u-si04;EMp#P%ggBdBt0E%f0o*D4u0OW~>T=Ad%i8^B7(F5EqF2Y#XP7wkp z4+tu_aBkrdj|dvsc3g?zsJZ0+GAU_<7^^6!pCd01t|P(XrvG;Dg{qCD~;{N+ki%u8suEgf&zb0rmo{2W(&f z-fnL$CvvKbTk7Amw!2Dt(s83(Bxo!<7O;s-JJ43ZGP3`D|&vRRya zOLd;b^dXmaCW-}c7i6g&vs)M-v)p#fSm0W~0mN&-0TBcu7Q;Zhr!I~wNA>+*{|Y~D z$%11#VMc&Tsc{u@0-RtCp^(d4pgn+TSP<@A1ym!!MZ{4UpvNsP;Cf(yc_O)|^MK!_ zR+@&qF$gq3_duPh*KG`WlxzSPB3B@5aD;wtEc(nC#zj|{Swd`5=*6yg5i_j;d;|@M zIjB=W9UKg(0*fkaDb2390eC9Fqf8gbM#?e)(SbZ(HvtYT7m`4Bf%M>4@EBzR7y%Y> z1|wiSIe@z=!23{)$f3C$f|?-apk(rmpe|9;-BJ>#dO6aBA(Gk!G?L=xL~;Me?Vb6X zM3;`Dff@H$nC`kM4Eg7czYAyac#Wmwv-4EpH zx`Tf2r>jVCrWt4(m@UASP2##~6Hz~+v^^`fAa=dg*tJ!_Vm&5Kb|<4mg7)_WQq^L2 zv)d8(4E9bq);J?j_GBxu)7NBlrI)udSVJJ6o$%6?6wrh7%AKrB_*So_8)YN%sj3D( z;@yE#nuQ=ta%tFNz;S7b;Hlk~Iw5x4KPkP_+Z`l?hRdOHEjy~Unr+!mb`wKP%52}7 zG{%OYN;HVvPniYE`h};8nDb&pm*Pwm*g(6Ht2RD8MK_kky#)PBQ;mEQ)}+B*ym)gs zuCjp5!xpS=OJAw)Je-2gA_@5|(pOSRUPq}(usIrUy(}ITuHhH#oMyV(vIPq{GM0<% zb#1bhz9VQ5zENBfF!LOYpMgrG%iCQp-fFwFhmA6t1vc3xB^lN&%@0<}B=?=;_I7o{ z*;IaZo-uxT^R>Oa8c6yQ?|3j6ju)=1gRqBS2 zjjfl~5~Ry?kC5x@b2zZxjEvoR@6TCacMut7OSm`1#lY8yjP<4FXd{Bh+?x zhqp;HHbBI+;`g>h+mZw#U*dbKdTH~{+k3b*mb&a}cxqRXpIcg-!iu2Lz&9R60y+M_ zU%PS;n@(OQsl8tjJbok>Yig@i8k=uR5Y)SiS4eK*oeypbEAD! z)fB_h6x+R@(NQZx!(zS~ZoaZO<)Z$Em770f+)nDUmJfV|Q@&=MW^fD~&}R>Qd)PrB zW6TKZpj)l>8;W~1^2dUzL=KSHPXhtkVZ%S0+^T=%nwk8-+0jZBPIu50dSwWt85rdz z^mZrNxGe0ZTL87tz3VS;L1keCwr z73iFrI2M>BXrtZ6L3x|`q<&CP=DTp@&8fX`xqrrBuPal}14NE^M!VMiO|kCRFW&<-4X`3$_Pd3LG`PA%-u z-ZcXso<939J@|jMTZK@tzY>qM{eSoH$;$1VT{UG8Dq4}0%{gEJ&5=A_B1b>n6XP1I z#vwLQAdPQ&hZ4Z(OKo}W-^Ai7`u2V&7mWpR3m+i+Y+6dXk>MZNt9bs7X!RPJvJ#6s z&{Z?YHt$FKOpTgh4a#U-mexu3h%9jBgzV#JHps&b?9oI)?O0PDAvUmj@DVoxMge=h zUvNe8XUu*C_yjOKOwCfpX%0ufeF5qKw_N^RcrD5_@UE~HqhXKaP)E^qiO6r>kGeDl zM2aL6LLv_g82bWr=`wqb2fhg^RFJVb7joFsZ*6HjK)vOx2kA(b{QjMUxu(wZw4HD()!A{zm!!ANlT!d_oxDN_Gz;!g^0Q(iO12g*|@_QxP$mKs6IO>w4j?r0o5XPvD zEH!OW)Zqsn3{YKT$SHuRtBZ(A46%d=RhKlk6BjOMFyc|k{Wa!WAs`}pM9>UXN;d={ z(pjto7||I;{@)ZP6ruq(b$vJiipb_|ke@7dM1+T=!~x&21lhA@sd7LGL0Ab=tRS}h zU(W^TPbI_@A<9?@RBck_79azN2U<789Xy%EJ63vl{wb$|sv@%NP8QTyUBJrn7|A(d zA$AMFEI|^wX^3@YgOG7aEA2Jcl@Vr*-n?xszGa5*=iqWp@8nvq?!7+rlBZAYK)I6K zbZQ-sYTNRfw&_jT&11V}E4}JtIl8B3`*nsp)$&@wYFo252jdmQ1ABitb@_#`J*)3M zo3UV}nB`-IhKqd@o{q#bMtyYZKGwMNbFODjer#i_4zsm&>^P)&oHpq0rs3ea88&j? zexb%dVhlSN(okXDxf0sMZuPFSPB#4G!04};bmmu8aEoQE#nX6^%iDC zChJF{!aW{V8u#ac01k31aK7V7iNK^GScsR@(*{+U01;Z#T}_d4pxBY7n4s#K99F*vYbGV<_x_bI9P4Zw$OC$Kjg~3ICZ{woSG_WdUL(%0KJgH@{_uf>b z99?3Xs_v}Ht{{st)+3jKjZ)@2XVYG@N2y8I5R&mlx+OtkjJxC!7tGaScpTN{4|e$*Y*D8U zy~)$=V^maB*QV&E7hTtOk+@A~Nfv(^`M{_Tn=^~VAm6XiBpNle7!9aU2_Lz7N}by7 zr#?C)RUcZoH|@&{Zanbvp-HA+L3`0A6;pvA{@2y53S(MMGnJntS=w8D4u=8#t4>j+ z#K~j6J%>IxwpUV5@ynP^9=a&+&+I`Y685!_v zzg88ow9NW6MJJO*ry(OpWk*1shT@^(fJKvoJj`cFi3HsTIg*=*tl z?Dn&);xLdAg~B3LN8vH?OcW-TpOSoWQ=d?yzmf;|vIWH1MXrGG4hsE6N$DU02a%XV z7bWrvIzyhbbUBm)F$P(X6p%8fpbnHE0)ZYtq1z!qRep7m9D

85iDFadjRX&h!8v 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 ONP}RI>=?d(`u+z7o~WPz literal 51962 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�XHx*7TP4RO1c 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�=s#=_{z z{c464*0kd7*p0Tv!@VPsJ*5baBY?A1j(51!iSCu-a9#3tCTtVMBJ$m_C8&<#vM2T- zJ|nUfU{ezehSbv{QXx{v$Ny#n4{i8rWJ-4I72G#bst`{L;yOZAK3H#TKw||+Qe^E3*B{TWP>$q4#2J^=6tn6M= zVHEdZoM{kI_D10Z>S4b-WMb6`UO&yhgJkbYeB|B9kzo-bog?}*o#7hiHVRK(FkMfA z2;$9ox-W;C+Sn28M)QF~mnT2s>uMM+~8*$M7Fsh~`VXccb&+{BpHDAhrqWANz(03pITLQjDHyqR`F-| zY&T3)+2?WR9=^!JVIwlvG1n`GgB8Qir4Q5J$O6iHTdlV%kYqdy#GaB|JJQn)7F(%jCDm-V{@I?bu&S+j5EGIjStRjxe%Kk=!BsNeP2m|e zz>Z?xXo)SJR1=TWQW)CF)A>)_2`m`gsS2Bdkw#(zmvVM*9HZ zkQnIe0N?k!n@fwOe(8(d(0J)dp0-T{(Wm>nUWaw;eDJ$?_lvi^^)Qu=bOf!~jhp?& zKyQGAEQG=HdAp+2r>sT!eBvEHFMJZlZwBwLiw#x+>V^K+%a}?B;{{+Z7dX~l|7V`@ zU;oOzWp>mTd1uG*nBq{vf8Ckh5Ju-Lz^?Wnx7TSE(=6Y1X>eg-0VsuQ?|II3LRt?W zIqN~v&Yj%P8~oh9LoSKQv5B%T%r{VkzPDa{cW-Qa>ort6zZ}-&dnzWrM!37=L8?fR zZiPR%I{GaMqKsVXzr@ukBU*bPf#l({#DSmKVwR+7?vdXK7H0xtE`^maj&$ZOS=JCG5dMeTe8yPaQ5=*D*ObW-M72 zde_`{jjq%FhYU{zPesEU^>Fb}3;Xsq&?1@BPN}>@0#)|U|5y+I%@6Tq?->>>cG~FM zTXIkoOTVo+xEcZF+Ha2Q>}NOGVf?$%_KHYrtTfI*az gjoj$xE9T3>U2pyq@WOx7)&IZx|7#-<@q_xm0FU$q$N&HU From 3b136d0bc5c78673e56c85438e53fa8eafb7c71a Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 15 Mar 2017 11:33:54 +0100 Subject: [PATCH 11/74] locale: re-add some minor elipses fixes Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/530601cd5f818385908997f68028f73c50de565b Author: vanhofen Date: 2017-03-15 (Wed, 15 Mar 2017) Origin message was: ------------------ - locale: re-add some minor elipses fixes ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/locale/deutsch.locale | 2 +- data/locale/english.locale | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 255e0687d..6c9260480 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2277,7 +2277,7 @@ servicemenu.imageinfo Imageinfo servicemenu.reload Kanallisten neu laden servicemenu.reload_hint Kanallisten werden neu geladen,\nbitte warten ... servicemenu.restart Neutrino neu starten -servicemenu.restart_hint Neutrino wird neu gestartet... +servicemenu.restart_hint Neutrino wird neu gestartet ... servicemenu.restart_refused_recording Aufnahme läuft. Neustart nicht möglich. servicemenu.scants Kanalsuche servicemenu.update Software-Aktualisierung diff --git a/data/locale/english.locale b/data/locale/english.locale index 9c446632b..6785de7c8 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2277,7 +2277,7 @@ servicemenu.imageinfo Image info servicemenu.reload Reload channel lists servicemenu.reload_hint Reloading channel lists,\nplease be patient. servicemenu.restart Soft restart -servicemenu.restart_hint Restarting, please wait +servicemenu.restart_hint Restarting, please wait ... servicemenu.restart_refused_recording Cant restart, recording in progress servicemenu.scants Servicescan servicemenu.update Software Update From 458cec79b04b040ed892a498fd675c2a6a1b11e1 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Wed, 15 Mar 2017 14:54:32 +0100 Subject: [PATCH 12/74] dont cal permanently settimeofday if operation not permitted Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/861017a95dfe93faaabb402d70be0fc0fc6613c9 Author: Jacek Jendrzej Date: 2017-03-15 (Wed, 15 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/eitd/sectionsd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index bfeb8c0d3..6b79137bd 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -1416,11 +1416,12 @@ bool CTimeThread::setSystemTime(time_t tim, bool force) tv.tv_sec = tim; tv.tv_usec = 0; + errno=0; if (settimeofday(&tv, NULL) == 0) return true; perror("[sectionsd] settimeofday"); - return false; + return errno==EPERM; } void CTimeThread::addFilters() From 59ae844e46c54a9984b51c98e2b9ee4542b61ace Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Wed, 15 Mar 2017 19:10:35 +0100 Subject: [PATCH 13/74] enable SCREENSHOT for generic Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/cf126eb761a048fce4e2daccb39e079183c3ebc1 Author: Jacek Jendrzej Date: 2017-03-15 (Wed, 15 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- configure.ac | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.ac b/configure.ac index 04e913f76..fabe46e56 100644 --- a/configure.ac +++ b/configure.ac @@ -140,6 +140,7 @@ if test "$BOXTYPE" = "coolstream"; then fi if test "$BOXTYPE" = "coolstream" || + test "$BOXTYPE" = "generic" || test "$BOXTYPE" = "tripledragon" || test "$BOXTYPE" = "spark"; then AC_DEFINE(SCREENSHOT,1,[Define to 1 if the platform supports screenshots]) From f3b014b8670743925e6e7d7af911c76f5c5cdf9c Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Fri, 17 Mar 2017 15:04:11 +0100 Subject: [PATCH 14/74] src/driver/fb_generic.cpp fix possible memleak and possible double free Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/66ea57d710741037aa0df1f723164eb09933a011 Author: Jacek Jendrzej Date: 2017-03-17 (Fri, 17 Mar 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/fb_generic.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp index 6d470ade6..3a4aca1ac 100644 --- a/src/driver/fb_generic.cpp +++ b/src/driver/fb_generic.cpp @@ -788,6 +788,7 @@ bool CFrameBuffer::paintIcon(const std::string & filename, const int x, const in return false; int yy = y; + bool freeicondata = false; //printf("CFrameBuffer::paintIcon: load %s\n", filename.c_str());fflush(stdout); /* we cache and check original name */ @@ -872,6 +873,8 @@ bool CFrameBuffer::paintIcon(const std::string & filename, const int x, const in cache_size += dsize; icon_cache.insert(std::pair (filename, tmpIcon)); //printf("Cached %s, cache size %d\n", newname.c_str(), cache_size); + }else{ + freeicondata = true; } } else { data = it->second.data; @@ -880,9 +883,13 @@ bool CFrameBuffer::paintIcon(const std::string & filename, const int x, const in //printf("paintIcon: already cached %s %d x %d\n", newname.c_str(), width, height); } _display: - if(!paint) + if(!paint){ + if(freeicondata){ + free(data); + data = NULL; + } return true; - + } if (h != 0) yy += (h - height) / 2; @@ -1351,7 +1358,7 @@ void CFrameBuffer::useBackground(bool ub) useBackgroundPaint = ub; if(!useBackgroundPaint) { delete[] background; - background=0; + background=NULL; } } @@ -1374,10 +1381,11 @@ void CFrameBuffer::saveBackgroundImage(void) void CFrameBuffer::restoreBackgroundImage(void) { - fb_pixel_t * tmp = background; + fb_pixel_t * tmp = NULL; if (backupBackground != NULL) { + tmp = background; background = backupBackground; backupBackground = NULL; } From ba30b3009a6c85a48a491756b205118e24b079a7 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 21 Mar 2017 10:29:35 +0100 Subject: [PATCH 15/74] neutrino: grab whole ExitRun() from neutrino-mp ... This fixes my last merge commit, small typos and alignes indentation. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d2f02371e8a3e9c1b0c3e1d7d4dc6d9ca9b38145 Author: vanhofen Date: 2017-03-21 (Tue, 21 Mar 2017) Origin message was: ------------------ - neutrino: grab whole ExitRun() from neutrino-mp ... This fixes my last merge commit, small typos and alignes indentation. ------------------ This commit was generated by Migit --- src/neutrino.cpp | 137 +++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 65 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 846c6b6ea..5458fa490 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -3602,6 +3602,7 @@ extern bool timer_is_rec;//timermanager.cpp void CNeutrinoApp::ExitRun(int can_shutdown) { + /* can_shutdown is actually our exit code */ printf("[neutrino] %s can_shutdown: %d\n", __func__, can_shutdown); bool do_shutdown = true; @@ -3615,7 +3616,7 @@ void CNeutrinoApp::ExitRun(int can_shutdown) if (!do_shutdown) return; - if(SDTreloadChannels) + if (SDTreloadChannels) SDT_ReloadChannels(); dprintf(DEBUG_INFO, "exit\n"); @@ -3641,7 +3642,7 @@ void CNeutrinoApp::ExitRun(int can_shutdown) CVFD::getInstance()->setMode(CVFD::MODE_SHUTDOWN); - stop_daemons(true /*can_shoutdown*/); //need here for timer_is_rec before saveSetup + stop_daemons(true /*can_shutdown*/); //need here for timer_is_rec before saveSetup g_settings.shutdown_timer_record_type = timer_is_rec; saveSetup(NEUTRINO_SETTINGS_FILE); @@ -3729,70 +3730,76 @@ void CNeutrinoApp::ExitRun(int can_shutdown) } else { -#endif - int leds = 0; - int bright = 0; -#if HAVE_COOL_HARDWARE - if (can_shutdown) { - leds = 0x40; - switch (g_settings.led_deep_mode){ - case 0: - leds = 0x0;//off leds - break; - case 1: - leds = 0x60;//on led1 & 2 - break; - case 2: - leds = 0x20;//led1 on , 2 off - break; - case 3: - leds = 0x40;//led2 off, 2 on - break; - default: - break; - } - if (leds && g_settings.led_blink && timer_minutes) - leds |= 0x80; - } - if (cs_get_revision() != 10) - bright = g_settings.lcd_setting[SNeutrinoSettings::LCD_DEEPSTANDBY_BRIGHTNESS]; -#endif - if (timer_minutes || leds) - { - FILE *f = fopen("/tmp/.timer", "w"); - if (f) - { - fprintf(stderr, "timer_wakeup: %ld\n", timer_minutes * 60); - fprintf(f, "%ld\n", timer_minutes * 60); - fprintf(f, "%d\n", leds); - fprintf(f, "%d\n", bright); - fclose(f); - } - else - perror("fopen /tmp/.timer"); - } - - delete g_RCInput; - g_RCInput = NULL; - //fan speed - if (g_info.hw_caps->has_fan) { - CFanControlNotifier::setSpeed(0); - } - //CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_MAINMENU_REBOOT)); - delete CVFD::getInstance(); - delete SHTDCNT::getInstance(); - stop_video(); - - printf("[neutrino] This is the end. exiting with code %d\n", can_shutdown); - Cleanup(); -#ifdef __sh__ - /* the sh4 gcc seems to dislike someting about openthreads... */ - _exit(can_shutdown); -#else - exit(can_shutdown); -#endif -#if 0 + delete g_RCInput; + my_system("/etc/init.d/rcK"); + //fan speed + if (g_info.hw_caps->has_fan) + CFanControlNotifier::setSpeed(0); + stop_video(); + Cleanup(); + //_exit(0); + exit(0); } +#endif + int leds = 0; + int bright = 0; +#if HAVE_COOL_HARDWARE + if (can_shutdown) { + leds = 0x40; + switch (g_settings.led_deep_mode){ + case 0: + leds = 0x0;//off leds + break; + case 1: + leds = 0x60;//on led1 & 2 + break; + case 2: + leds = 0x20;//led1 on , 2 off + break; + case 3: + leds = 0x40;//led2 off, 2 on + break; + default: + break; + } + if (leds && g_settings.led_blink && timer_minutes) + leds |= 0x80; + } + if (cs_get_revision() != 10) + bright = g_settings.lcd_setting[SNeutrinoSettings::LCD_DEEPSTANDBY_BRIGHTNESS]; +#endif + if (timer_minutes || leds) + { + FILE *f = fopen("/tmp/.timer", "w"); + if (f) + { + fprintf(stderr, "timer_wakeup: %ld\n", timer_minutes * 60); + fprintf(f, "%ld\n", timer_minutes * 60); + fprintf(f, "%d\n", leds); + fprintf(f, "%d\n", bright); + fclose(f); + } + else + perror("fopen /tmp/.timer"); + } + + delete g_RCInput; + g_RCInput = NULL; + //fan speed + if (g_info.hw_caps->has_fan) + CFanControlNotifier::setSpeed(0); + //CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_MAINMENU_REBOOT)); + delete CVFD::getInstance(); + delete SHTDCNT::getInstance(); + stop_video(); + + printf("[neutrino] This is the end. exiting with code %d\n", can_shutdown); + Cleanup(); +#ifdef __sh__ + /* the sh4 gcc seems to dislike someting about openthreads... */ + _exit(can_shutdown); +#else + exit(can_shutdown); #endif } From 8ddf5d35ce0f389143cf722502120e309b220e20 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 22 Mar 2017 15:32:58 +0100 Subject: [PATCH 16/74] acinclude.m4: fix merge error Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4c0d135a1c8ecbdf006d200fdc8fa1996fe5fb0e Author: vanhofen Date: 2017-03-22 (Wed, 22 Mar 2017) Origin message was: ------------------ - acinclude.m4: fix merge error ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- acinclude.m4 | 7 ------- 1 file changed, 7 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 5bfcbfcbd..6212c1f25 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -317,13 +317,6 @@ AC_ARG_WITH(boxmodel, AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi ;; - raspi) - if test "$BOXTYPE" = "generic"; then - BOXMODEL="$withval" - else - AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) - fi - ;; *) AC_MSG_ERROR([unsupported value $withval for --with-boxmodel]) ;; From 383e466472e4978a650615a5b0e158e7b4d7d215 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Wed, 9 Aug 2017 11:36:14 +0200 Subject: [PATCH 17/74] Fix merge-error; add missing add_gxa_sync_marker() function Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0b781da031f55cdb5776fbd8bda0f71127f676c0 Author: Jacek Jendrzej Date: 2017-08-09 (Wed, 09 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/fb_generic.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/driver/fb_generic.h b/src/driver/fb_generic.h index 61c1dbd94..4b68e1e18 100644 --- a/src/driver/fb_generic.h +++ b/src/driver/fb_generic.h @@ -192,6 +192,7 @@ class CFrameBuffer : public sigc::trackable bool getActive() const; // is framebuffer active? void setActive(bool enable); // is framebuffer active? virtual void setupGXA() { return; }; // reinitialize stuff + virtual void add_gxa_sync_marker() { return; }; virtual bool needAlign4Blit() { return false; }; virtual uint32_t getWidth4FB_HW_ACC(const uint32_t x, const uint32_t w, const bool max=true); From 3e3a327ac7a8a58862d4d491b5514eea02865375 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 21 Aug 2017 10:03:52 +0200 Subject: [PATCH 18/74] Revert "- neutrino: fix hw_caps init; it must be initialized after zapit start" This reverts commit 4ded8abb1220f909f344e6511da2e50dda241881. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/491e51beeb97ced2951942755bbf12a23382a10f Author: Jacek Jendrzej Date: 2017-08-21 (Mon, 21 Aug 2017) ------------------ This commit was generated by Migit --- src/neutrino.cpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 5096e75d9..be0782f00 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -485,16 +485,8 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.hdd_noise = configfile.getInt32( "hdd_noise", 254); g_settings.hdd_statfs_mode = configfile.getInt32( "hdd_statfs_mode", SNeutrinoSettings::HDD_STATFS_RECORDING); - /* - hw_caps needs CFEManager and CFEManager needs g_settings. - So loadSetup() cannot use hw_caps to init g_settings. - - For this reason we need this workaround. - */ - bool can_shutdown = (cs_get_revision() > 7); - g_settings.shutdown_real = false; - if (can_shutdown) //(g_info.hw_caps->can_shutdown) + if (g_info.hw_caps->can_shutdown) g_settings.shutdown_real = configfile.getBool("shutdown_real" , false ); g_settings.shutdown_real_rcdelay = configfile.getBool("shutdown_real_rcdelay", false ); g_settings.shutdown_count = configfile.getInt32("shutdown_count", 0); @@ -2294,9 +2286,6 @@ TIMER_START(); CheckFastScan(); - // init hw_caps *after* zapit start! - g_info.hw_caps = get_hwcaps(); - //timer start long timerd_signal = 0; timer_wakeup = false;//init From 8ad638b6b06ea3499e140573a63dc8718c16817e Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Mon, 10 Apr 2017 18:27:28 +0200 Subject: [PATCH 19/74] coolstream: disable uncoolinit build it does not build right now for undefined fb_pixel_t, and it is unused anyway after a workaround in zapit code has been introduced Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ee031801e453ac0d32ee8131c920d8123fcb72ec Author: Stefan Seyfried Date: 2017-04-10 (Mon, 10 Apr 2017) ------------------ This commit was generated by Migit --- src/Makefile.am | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 9f3ff1363..8ea9e536e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -196,15 +196,15 @@ endif if BOXTYPE_COOL bin_PROGRAMS += uncooloff uncooloff_SOURCES = uncooloff.c -if BOXMODEL_CS_HD2 -else -noinst_PROGRAMS = uncoolinit -uncoolinit_SOURCES = uncoolinit.cpp -uncoolinit_LDADD = \ - @AVFORMAT_LIBS@ \ - @AVCODEC_LIBS@ \ - @BLURAY_LIBS@ \ - -lcoolstream-mt -lca-sc -lnxp \ - -lOpenThreads -lrt -endif +# if BOXMODEL_CS_HD2 +# else +# noinst_PROGRAMS = uncoolinit +# uncoolinit_SOURCES = uncoolinit.cpp +# uncoolinit_LDADD = \ +# @AVFORMAT_LIBS@ \ +# @AVCODEC_LIBS@ \ +# @BLURAY_LIBS@ \ +# -lcoolstream-mt -lca-sc -lnxp \ +# -lOpenThreads -lrt +# endif endif From 069ea0b8d4d915b83c1b72afa0608025c4afb504 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 19 Aug 2017 21:43:54 +0200 Subject: [PATCH 20/74] fb_accel_sti: reorder blit_mutex locking This seems to help spurious deadlocks in the STI framebuffer blit code. Not 100% sure why, butthis helps, but I have not seen lockups with this. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/223d1d709f34eb6b53f47d6865ff9eb4178ba69b Author: Stefan Seyfried Date: 2017-08-19 (Sat, 19 Aug 2017) ------------------ This commit was generated by Migit --- src/driver/fb_accel_sti.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/driver/fb_accel_sti.cpp b/src/driver/fb_accel_sti.cpp index dfe0ac5c3..17e342faf 100644 --- a/src/driver/fb_accel_sti.cpp +++ b/src/driver/fb_accel_sti.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include @@ -333,10 +334,12 @@ void CFbAccelSTi::run() time_t last_blit = 0; blit_pending = false; blit_thread = true; - blit_mutex.lock(); set_threadname("stifb::autoblit"); while (blit_thread) { + blit_mutex.lock(); blit_cond.wait(&blit_mutex, blit_pending ? BLIT_INTERVAL_MIN : BLIT_INTERVAL_MAX); + blit_mutex.unlock(); + time_t now = time_monotonic_ms(); if (now - last_blit < BLIT_INTERVAL_MIN) { @@ -346,20 +349,22 @@ void CFbAccelSTi::run() else { blit_pending = false; - blit_mutex.unlock(); _blit(); - blit_mutex.lock(); last_blit = now; } } - blit_mutex.unlock(); printf(LOGTAG "::run end\n"); } void CFbAccelSTi::blit() { //printf(LOGTAG "::blit\n"); - blit_mutex.lock(); + int status = blit_mutex.trylock(); + if (status) { + printf(LOGTAG "::blit trylock failed: %d (%s)\n", status, + (status > 0) ? strerror(status) : strerror(errno)); + return; + } blit_cond.signal(); blit_mutex.unlock(); } From 97c92523bce956f1f885e304037fd02eede89648 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 20 Aug 2017 11:30:57 +0200 Subject: [PATCH 21/74] CKeyChooserItemNoKey: fix type cast Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/a1a596501772cd975ddf06c07803b168bad58c12 Author: Stefan Seyfried Date: 2017-08-20 (Sun, 20 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/widget/keychooser.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/keychooser.h b/src/gui/widget/keychooser.h index 8c89140c7..b2cdbeb64 100644 --- a/src/gui/widget/keychooser.h +++ b/src/gui/widget/keychooser.h @@ -96,7 +96,7 @@ class CKeyChooserItemNoKey : public CMenuTarget int exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/) { - *key=(int)CRCInput::RC_nokey; + *key=(unsigned int)CRCInput::RC_nokey; return menu_return::RETURN_REPAINT; } From 559fd22ab29b624707a53d876dd73c68fd0b2999 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 20 Aug 2017 11:44:01 +0200 Subject: [PATCH 22/74] rcinput: fix getKeyName for RC_none case Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4978ed7675ba671db546ce3f16e464e5f2f4a7c8 Author: Stefan Seyfried Date: 2017-08-20 (Sun, 20 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/rcinput.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index abc4595a6..0554597ce 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1678,9 +1678,14 @@ const char * CRCInput::getSpecialKeyName(const unsigned int key) std::string CRCInput::getKeyName(const unsigned int key) { - std::string res(getKeyNameC(key & ~RC_Repeat)); - if ((key & RC_Repeat) && res != "unknown") - res += " (long)"; + std::string res; + if (key > RC_MaxRC) + res = getKeyNameC(key); /* will only resolve RC_nokey or "unknown" */ + else { + res = (getKeyNameC(key & ~RC_Repeat)); + if ((key & RC_Repeat) && res != "unknown") + res += " (long)"; + } return res; } From e2f6639bbb83cb5c167b6c63f9214f71fb4e9315 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 20 Aug 2017 11:44:57 +0200 Subject: [PATCH 23/74] zapit: trivial azbox compile fix Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/fd4a3516e5db7c94813fb699b35493e8689bc5be Author: Stefan Seyfried Date: 2017-08-20 (Sun, 20 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/zapit/src/zapit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 98bedaf5d..0c790ce10 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -2266,7 +2266,7 @@ bool CZapit::StartPlayBack(CZapitChannel *thisChannel) #if HAVE_AZBOX_HARDWARE /* new (> 20130917) AZbox drivers switch to radio mode if audio is started first */ /* start video */ - if (have_video) { + if (video_pid) { videoDecoder->Start(0, thisChannel->getPcrPid(), thisChannel->getVideoPid()); videoDemux->Start(); } From ff37fec9a80c28e8cfc3e04762d2cfd2467964cc Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 20 Aug 2017 11:52:04 +0200 Subject: [PATCH 24/74] rcinput: add two more keys in the ugly azbox translate() table Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d0a21abd9faa630573a429131ef99d29c7338d75 Author: Stefan Seyfried Date: 2017-08-20 (Sun, 20 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/rcinput.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 0554597ce..7379b2764 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1718,6 +1718,10 @@ int CRCInput::translate(int code) return RC_record; case KEY_PLAY: return RC_pause; + case KEY_CHANNELUP: + return RC_page_up; + case KEY_CHANNELDOWN: + return RC_page_down; #endif default: break; From fe7c56581be606680a9dfba5abb2eb4f70c459b5 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 20 Aug 2017 16:19:57 +0200 Subject: [PATCH 25/74] Revert "- hardware_caps: fix has_fan and add detection of Neo Twin" This reverts commit 2770d07beab4ba7dfc279d1202eda7d0a993cc75. This leads to a segfault at start and the upstream solution is not yet ready for primetime, so revert this for now. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/e2db5907974464f7053bddc16b2e39efac67454f Author: Stefan Seyfried Date: 2017-08-20 (Sun, 20 Aug 2017) ------------------ This commit was generated by Migit --- lib/hardware/coolstream/Makefile.am | 7 ------- lib/hardware/coolstream/hardware_caps.cpp | 19 ++++--------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/lib/hardware/coolstream/Makefile.am b/lib/hardware/coolstream/Makefile.am index 82f3ab83c..b2a96b31e 100644 --- a/lib/hardware/coolstream/Makefile.am +++ b/lib/hardware/coolstream/Makefile.am @@ -1,13 +1,6 @@ AM_CXXFLAGS = -fno-rtti -fno-exceptions -fno-strict-aliasing AM_CPPFLAGS = \ - -I$(top_builddir) \ - -I$(top_srcdir) \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/zapit/include \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/lib/libconfigfile \ - -I$(top_srcdir)/lib/libeventserver \ @HWLIB_CFLAGS@ noinst_LIBRARIES = libhwcaps.a diff --git a/lib/hardware/coolstream/hardware_caps.cpp b/lib/hardware/coolstream/hardware_caps.cpp index 139825c32..19ca74af6 100644 --- a/lib/hardware/coolstream/hardware_caps.cpp +++ b/lib/hardware/coolstream/hardware_caps.cpp @@ -11,8 +11,6 @@ #include #include "hardware_caps.h" -#include - static int initialized = 0; static hw_caps_t caps; @@ -21,7 +19,7 @@ hw_caps_t *get_hwcaps(void) { return ∩︀ int rev = cs_get_revision(); int chip = cs_get_chip_type(); - caps.has_fan = (rev < 8 && CFEManager::getInstance()->getFE(0)->hasSat()); // only SAT-HD1 before rev 8 has fan + caps.has_fan = (rev < 8); caps.has_HDMI = 1; caps.has_SCART = (rev != 10); caps.has_SCART_input = 0; @@ -36,23 +34,15 @@ hw_caps_t *get_hwcaps(void) { caps.can_ps_14_9 = 1; caps.force_tuner_2G = 0; strcpy(caps.boxvendor, "Coolstream"); + strcpy(caps.boxarch, "Nevis"); switch (rev) { case 6: case 7: // Black Stallion Edition strcpy(caps.boxname, "HD1"); - strcpy(caps.boxarch, "Nevis"); caps.force_tuner_2G = 1; break; - case 8: - if (CFEManager::getInstance()->getFrontendCount() < 2) - { - strcpy(caps.boxname, "Neo"); - } - else - { - strcpy(caps.boxname, "Neo Twin"); - } - strcpy(caps.boxarch, "Nevis"); + case 8: // TODO: Neo2 - Twin + strcpy(caps.boxname, "Neo"); caps.force_tuner_2G = 1; break; case 9: @@ -61,7 +51,6 @@ hw_caps_t *get_hwcaps(void) { break; case 10: strcpy(caps.boxname, "Zee"); - strcpy(caps.boxarch, "Nevis"); caps.force_tuner_2G = 1; break; case 11: From 1f09810ff14bd2f3c97867a842b6649ad85bf817 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 21 Aug 2017 10:57:18 +0200 Subject: [PATCH 26/74] part from ceab6aafbbe55220247341fd181d1b789249e11b Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0238049dafa927ea4b2ce6f3efb7a6a50ce78eb3 Author: Jacek Jendrzej Date: 2017-08-21 (Mon, 21 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- lib/hardware/coolstream/hardware_caps.cpp | 5 ++--- src/neutrino.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/hardware/coolstream/hardware_caps.cpp b/lib/hardware/coolstream/hardware_caps.cpp index 19ca74af6..065906448 100644 --- a/lib/hardware/coolstream/hardware_caps.cpp +++ b/lib/hardware/coolstream/hardware_caps.cpp @@ -19,7 +19,7 @@ hw_caps_t *get_hwcaps(void) { return ∩︀ int rev = cs_get_revision(); int chip = cs_get_chip_type(); - caps.has_fan = (rev < 8); + caps.has_fan = (rev < 8); // see dirty part of hw_caps in neutrino.cpp caps.has_HDMI = 1; caps.has_SCART = (rev != 10); caps.has_SCART_input = 0; @@ -41,8 +41,7 @@ hw_caps_t *get_hwcaps(void) { strcpy(caps.boxname, "HD1"); caps.force_tuner_2G = 1; break; - case 8: // TODO: Neo2 - Twin - strcpy(caps.boxname, "Neo"); + strcpy(caps.boxname, "Neo"); // see dirty part of hw_caps in neutrino.cpp caps.force_tuner_2G = 1; break; case 9: diff --git a/src/neutrino.cpp b/src/neutrino.cpp index be0782f00..aa45d5d64 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2286,6 +2286,20 @@ TIMER_START(); CheckFastScan(); + // dirty part of hw_caps - specify some details after zapit start + if (strcmp(g_info.hw_caps->boxname, "HD1") == 0) + { + // only SAT-HD1 has fan + if (!CFEManager::getInstance()->getFE(0)->hasSat()) + g_info.hw_caps->has_fan = 0; + } + if (strcmp(g_info.hw_caps->boxname, "Neo") == 0) + { + // detecting Neo Twin by counting frontends + if (CFEManager::getInstance()->getFrontendCount() > 1) + strcpy(g_info.hw_caps->boxname, "Neo Twin"); + } + //timer start long timerd_signal = 0; timer_wakeup = false;//init From 44a8e0b0b4f5208f1d191ddbc595d5d60df2db09 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Tue, 29 Aug 2017 16:35:32 +0200 Subject: [PATCH 27/74] pic max10 code from commit f480ad018c72d40a9d2d2fb4006cfca1c262234d Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/2d4f52ae6223b30a4f07a7fa89d1fe671944d021 Author: Jacek Jendrzej Date: 2017-08-29 (Tue, 29 Aug 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/driver/radiotext.cpp | 42 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/driver/radiotext.cpp b/src/driver/radiotext.cpp index 773c51034..6374b477e 100644 --- a/src/driver/radiotext.cpp +++ b/src/driver/radiotext.cpp @@ -2375,7 +2375,13 @@ void CRadioText::run() uint current_pid = 0; printf("CRadioText::run: ###################### Starting thread ######################\n"); +#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE || HAVE_GENERIC_HARDWARE + int buflen = 0; + unsigned char *buf = NULL; + audioDemux = new cDemux(0); // live demux +#else audioDemux = new cDemux(1); +#endif audioDemux->Open(DMX_PES_CHANNEL,0,128*1024); while(running) { @@ -2400,11 +2406,41 @@ void CRadioText::run() } mutex.unlock(); if (pid) { +#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE || HAVE_GENERIC_HARDWARE + int n; + unsigned char tmp[6]; + + n = audioDemux->Read(tmp, 6, 500); + if (n != 6) { + usleep(10000); /* save CPU if nothing read */ + continue; + } + if (memcmp(tmp, "\000\000\001\300", 4)) + continue; + int packlen = ((tmp[4] << 8) | tmp[5]) + 6; + + if (buflen < packlen) { + if (buf) + free(buf); + buf = (unsigned char *) calloc(1, packlen); + buflen = packlen; + } + if (!buf) + break; + memcpy(buf, tmp, 6); + + while ((n < packlen) && running) { + int len = audioDemux->Read(buf + n, packlen - n, 500); + if (len < 0) + break; + n += len; + } +#else int n; unsigned char buf[0x1FFFF]; n = audioDemux->Read(buf, sizeof(buf), 500 /*5000*/); - +#endif if (n > 0) { //printf("."); fflush(stdout); mutex.lock(); @@ -2413,6 +2449,10 @@ void CRadioText::run() } } } +#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE || HAVE_GENERIC_HARDWARE + if (buf) + free(buf); +#endif delete audioDemux; audioDemux = NULL; printf("CRadioText::run: ###################### exit ######################\n"); From 8563a7bb9bfa0329821aabfa0f085e90fdf65821 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 21 Sep 2017 10:46:50 +0200 Subject: [PATCH 28/74] code alignments to master branch Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/dbb726e1917e796a0c14d20367e07da85443a5f9 Author: vanhofen Date: 2017-09-21 (Thu, 21 Sep 2017) Origin message was: ------------------ - code alignments to master branch ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/plugins.h | 33 ++++++++++----------------------- src/gui/videosettings.cpp | 2 +- src/neutrino_menue.cpp | 4 ++-- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/gui/plugins.h b/src/gui/plugins.h index c01d88b5c..51683cd09 100644 --- a/src/gui/plugins.h +++ b/src/gui/plugins.h @@ -34,29 +34,16 @@ class CFrameBuffer; class CPlugins { public: - typedef enum p_type - { - P_TYPE_DISABLED = 0x1, - P_TYPE_GAME = 0x2, - P_TYPE_TOOL = 0x4, - P_TYPE_SCRIPT = 0x8, - P_TYPE_LUA = 0x10, - P_TYPE_NO_GAME = P_TYPE_TOOL|P_TYPE_SCRIPT|P_TYPE_LUA - } - p_type_t; - - typedef enum i_type - { - I_TYPE_DISABLED = 0x1, - /* - I_TYPE_MAIN = 0x2, - */ - I_TYPE_MULTIMEDIA = 0x4, - I_TYPE_SETTING = 0x8, - I_TYPE_SERVICE = 0x10, - I_TYPE_INFORMATION = 0x20 - } - i_type_t; + typedef enum p_type + { + P_TYPE_DISABLED = 0x1, + P_TYPE_GAME = 0x2, + P_TYPE_TOOL = 0x4, + P_TYPE_SCRIPT = 0x8, + P_TYPE_LUA = 0x10, + P_TYPE_NO_GAME = P_TYPE_TOOL|P_TYPE_SCRIPT|P_TYPE_LUA + } + p_type_t; private: CFrameBuffer *frameBuffer; diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 8568902cc..0c7ffdb22 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -388,7 +388,7 @@ int CVideoSettings::showVideoSetup() for (int i = 0; i < VIDEOMENU_VIDEOMODE_OPTION_COUNT; i++) if (VIDEOMENU_VIDEOMODE_OPTIONS[i].key != -1) - videomodes.addItem(new CMenuOptionChooser(VIDEOMENU_VIDEOMODE_OPTIONS[i].valname, &g_settings.enabled_video_modes[i], OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, &anotify)); + videomodes.addItem(new CMenuOptionChooser(VIDEOMENU_VIDEOMODE_OPTIONS[i].valname, &g_settings.enabled_video_modes[i], OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, &anotify)); vs_videomodes_fw = new CMenuForwarder(LOCALE_VIDEOMENU_ENABLED_MODES, true, NULL, &videomodes, NULL, CRCInput::RC_red); vs_videomodes_fw->setHint("", LOCALE_MENU_HINT_VIDEO_MODES); diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 7957a60fe..f75fcd83c 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -393,7 +393,7 @@ void CNeutrinoApp::InitMenuService() mf->setHint(NEUTRINO_ICON_HINT_SERVICE_SCAN, LOCALE_MENU_HINT_SERVICE_SCAN); personalize.addItem(MENU_SERVICE, mf, &g_settings.personalize[SNeutrinoSettings::P_MSER_SCANTS], false, CPersonalizeGui::PERSONALIZE_SHOW_AS_ITEM_OPTION, NULL, DCOND_MODE_TS); - //reload channels + //reload channels mf = new CMenuForwarder(LOCALE_SERVICEMENU_RELOAD , true, NULL, CScanSetup::getInstance(), "reloadchannels", CRCInput::RC_yellow); mf->setHint(NEUTRINO_ICON_HINT_RELOAD_CHANNELS, LOCALE_MENU_HINT_RELOAD_CHANNELS); personalize.addItem(MENU_SERVICE, mf, &g_settings.personalize[SNeutrinoSettings::P_MSER_RELOAD_CHANNELS]); @@ -402,10 +402,10 @@ void CNeutrinoApp::InitMenuService() // TODO: this needs a neutrino restart after changing parentallock_prompt to activate :-( CLockedMenuForwarder *lf; lf = new CLockedMenuForwarder(LOCALE_BOUQUETEDITOR_NAME, g_settings.parentallock_pincode, g_settings.parentallock_prompt == PARENTALLOCK_PROMPT_CHANGETOLOCKED, true, NULL, new CBEBouquetWidget(), NULL, CRCInput::RC_blue); - /* does not work with CLockedMenuForwarder yet? lf->setHint(NEUTRINO_ICON_HINT_BEDIT, LOCALE_MENU_HINT_BEDIT); */ + personalize.addItem(MENU_SERVICE, lf, &g_settings.personalize[SNeutrinoSettings::P_MSER_BOUQUET_EDIT]); //channel reset From ef32e191759486fd3937086758fc331c6585654d Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 23 Sep 2017 18:14:22 +0200 Subject: [PATCH 29/74] moviplayer: suppress unused variable warning Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c7f429019d58a99b7437df546b36151b1d3a880e Author: Stefan Seyfried Date: 2017-09-23 (Sat, 23 Sep 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/movieplayer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 1f7e94cac..f8c2c4482 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -2844,6 +2844,8 @@ void CMoviePlayerGui::makeScreenShot(bool autoshot, bool forcover) } } sc->Start(); +#else + (void)forcover; #endif if (autoshot) autoshot_done = true; From 6979a29c9405c07953fcb103a8250f18a29cde9b Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 23 Sep 2017 21:35:01 +0200 Subject: [PATCH 30/74] change time_monotonic_ms() from time_t to int64_t time_monotonic_ms values did wrap every ~24 days, leading to problems in code that did not cope with that. Instead of fixing all places where relative comparisons with time_monotonic_ms() are made, just use a bigger datatype. Convert all users to the new type. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/8dad062effbe6e134a741e7973ac91eb4f394ac7 Author: Stefan Seyfried Date: 2017-09-23 (Sat, 23 Sep 2017) ------------------ This commit was generated by Migit --- src/driver/abstime.c | 4 ++-- src/driver/abstime.h | 4 ++-- src/driver/fb_accel_glfb.cpp | 7 ++++--- src/driver/fb_accel_sti.cpp | 16 +++++++++------- src/eitd/sectionsd.cpp | 10 +++++----- src/eitd/xmlutil.cpp | 6 +++--- src/gui/movieplayer.h | 2 +- src/gui/streaminfo2.cpp | 4 ++-- src/gui/widget/shellwindow.cpp | 4 ++-- src/neutrino.cpp | 8 ++++---- src/zapit/src/frontend.cpp | 11 ++++++----- 11 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/driver/abstime.c b/src/driver/abstime.c index af7c1c7fc..e74c268c3 100644 --- a/src/driver/abstime.c +++ b/src/driver/abstime.c @@ -2,7 +2,7 @@ #include /* for perror */ #include -time_t time_monotonic_ms(void) +int64_t time_monotonic_ms(void) { struct timespec t; time_t ret; @@ -11,7 +11,7 @@ time_t time_monotonic_ms(void) perror("time_monotonic_ms clock_gettime"); return -1; } - ret = ((t.tv_sec + 604800)& 0x01FFFFF) * 1000; /* avoid overflow */ + ret = (t.tv_sec + 604800) * (int64_t)1000; /* avoid overflow */ ret += t.tv_nsec / 1000000; return ret; } diff --git a/src/driver/abstime.h b/src/driver/abstime.h index b530755b6..78d1e6117 100644 --- a/src/driver/abstime.h +++ b/src/driver/abstime.h @@ -6,8 +6,8 @@ extern "C" { #endif -extern time_t time_monotonic_ms(void); -extern time_t time_monotonic(void); +time_t time_monotonic(void); +int64_t time_monotonic_ms(void); uint64_t time_monotonic_us(void); #ifdef __cplusplus } diff --git a/src/driver/fb_accel_glfb.cpp b/src/driver/fb_accel_glfb.cpp index 2d9ba539f..d62ea65f1 100644 --- a/src/driver/fb_accel_glfb.cpp +++ b/src/driver/fb_accel_glfb.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include extern GLFramebuffer *glfb; @@ -115,18 +116,18 @@ void CFbAccelGLFB::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 void CFbAccelGLFB::run() { printf(LOGTAG "run start\n"); - time_t last_blit = 0; + int64_t last_blit = INT64_MAX; blit_pending = false; blit_thread = true; blit_mutex.lock(); set_threadname("glfb::autoblit"); while (blit_thread) { blit_cond.wait(&blit_mutex, blit_pending ? BLIT_INTERVAL_MIN : BLIT_INTERVAL_MAX); - time_t now = time_monotonic_ms(); + int64_t now = time_monotonic_ms(); if (now - last_blit < BLIT_INTERVAL_MIN) { blit_pending = true; - //printf(LOGTAG "run: skipped, time %ld\n", now - last_blit); + //printf(LOGTAG "run: skipped, time %" PRId64 "\n", now - last_blit); } else { diff --git a/src/driver/fb_accel_sti.cpp b/src/driver/fb_accel_sti.cpp index 17e342faf..ad9d590d3 100644 --- a/src/driver/fb_accel_sti.cpp +++ b/src/driver/fb_accel_sti.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -331,7 +332,7 @@ void CFbAccelSTi::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_ void CFbAccelSTi::run() { printf(LOGTAG "::run start\n"); - time_t last_blit = 0; + int64_t last_blit = INT64_MAX; /* blit at first iteration */ blit_pending = false; blit_thread = true; set_threadname("stifb::autoblit"); @@ -340,11 +341,12 @@ void CFbAccelSTi::run() blit_cond.wait(&blit_mutex, blit_pending ? BLIT_INTERVAL_MIN : BLIT_INTERVAL_MAX); blit_mutex.unlock(); - time_t now = time_monotonic_ms(); - if (now - last_blit < BLIT_INTERVAL_MIN) + int64_t now = time_monotonic_ms(); + int64_t diff = now - last_blit; + if (diff < BLIT_INTERVAL_MIN) { blit_pending = true; - //printf(LOGTAG "::run: skipped, time %ld\n", now - last_blit); + //printf(LOGTAG "::run: skipped, time %" PRId64 "\n", diff); } else { @@ -372,9 +374,9 @@ void CFbAccelSTi::blit() void CFbAccelSTi::_blit() { #if 0 - static time_t last = 0; - time_t now = time_monotonic_ms(); - printf("%s %ld\n", __func__, now - last); + static int64_t last = 0; + int64_t now = time_monotonic_ms(); + printf("%s %" PRId64 "\n", __func__, now - last); last = now; #endif OpenThreads::ScopedLock m_lock(mutex); diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 8c35a1590..fccb01f9e 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -154,7 +154,7 @@ CSdtThread threadSDT; #endif #ifdef DEBUG_EVENT_LOCK -static time_t lockstart = 0; +static int64_t lockstart = 0; #endif static int sectionsd_stop = 0; @@ -209,9 +209,9 @@ inline void unlockEvents(void) { #ifdef DEBUG_EVENT_LOCK if (lockstart) { - time_t tmp = time_monotonic_ms() - lockstart; + int64_t tmp = time_monotonic_ms() - lockstart; if (tmp > 50) - xprintf("locked ms %d\n", tmp); + xprintf("locked ms %" PRId64 "\n", tmp); lockstart = 0; } #endif @@ -1486,12 +1486,12 @@ void CTimeThread::run() * shutdown" hack on with libcoolstream... :-( */ rc = dmx->Read(static_buf, MAX_SECTION_LENGTH, timeoutInMSeconds); #else - time_t start = time_monotonic_ms(); + int64_t start = time_monotonic_ms(); /* speed up shutdown by looping around Read() */ do { rc = dmx->Read(static_buf, MAX_SECTION_LENGTH, timeoutInMSeconds / 12); } while (running && rc == 0 - && (time_monotonic_ms() - start) < (time_t)timeoutInMSeconds); + && (time_monotonic_ms() - start) < (int64_t)timeoutInMSeconds); #endif xprintf("%s: get DVB time ch 0x%012" PRIx64 " rc: %d neutrino_sets_time %d\n", name.c_str(), current_service, rc, messaging_neutrino_sets_time); diff --git a/src/eitd/xmlutil.cpp b/src/eitd/xmlutil.cpp index eb70b58db..0eab74a32 100644 --- a/src/eitd/xmlutil.cpp +++ b/src/eitd/xmlutil.cpp @@ -486,12 +486,12 @@ void *insertEventsfromFile(void * data) std::string epg_dir = (char *) data; indexname = epg_dir + "index.xml"; - time_t now = time_monotonic_ms(); + int64_t now = time_monotonic_ms(); xmlDocPtr index_parser = parseXmlFile(indexname.c_str()); if (index_parser == NULL) { readEventsFromDir(epg_dir, ev_count); - printf("[sectionsd] Reading Information finished after %ld milliseconds (%d events)\n", + printf("[sectionsd] Reading Information finished after %" PRId64 " milliseconds (%d events)\n", time_monotonic_ms()-now, ev_count); reader_ready = true; pthread_exit(NULL); @@ -515,7 +515,7 @@ void *insertEventsfromFile(void * data) xmlFreeDoc(index_parser); printdate_ms(stdout); - printf("[sectionsd] Reading Information finished after %ld milliseconds (%d events)\n", + printf("[sectionsd] Reading Information finished after %" PRId64 " milliseconds (%d events)\n", time_monotonic_ms()-now, ev_count); reader_ready = true; diff --git a/src/gui/movieplayer.h b/src/gui/movieplayer.h index 0b6cd507d..bef6bc9c9 100644 --- a/src/gui/movieplayer.h +++ b/src/gui/movieplayer.h @@ -142,7 +142,7 @@ class CMoviePlayerGui : public CMenuTarget unsigned short sub_supported[MAX_PLAYBACK_PIDS]; int currentspid; int min_x, min_y, max_x, max_y; - time_t end_time; + int64_t end_time; bool ext_subs; bool lock_subs; uint64_t last_read; diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 7a51f1105..d0a57a15f 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -1035,7 +1035,7 @@ int CStreamInfo2::update_rate () usleep(timeout * 1000); b_len = mp->GetReadCount(); } else { - time_t start = time_monotonic_ms(); + int64_t start = time_monotonic_ms(); /* always sample for ~100ms */ while (time_monotonic_ms() - start < timeout) { @@ -1043,7 +1043,7 @@ int CStreamInfo2::update_rate () if (ret >= 0) b_len += ret; } - //printf("ts: read %d time %d\n", b_len, time_monotonic_ms() - start); + //printf("ts: read %d time %" PRId64 "\n", b_len, time_monotonic_ms() - start); } //printf("ts: read %d\n", b_len); diff --git a/src/gui/widget/shellwindow.cpp b/src/gui/widget/shellwindow.cpp index bd5daa3ca..f2b641f5a 100644 --- a/src/gui/widget/shellwindow.cpp +++ b/src/gui/widget/shellwindow.cpp @@ -133,14 +133,14 @@ void CShellWindow::exec() fds.events = POLLIN | POLLHUP | POLLERR; fcntl(fds.fd, F_SETFL, fcntl(fds.fd, F_GETFL, 0) | O_NONBLOCK); - time_t lastPaint = time_monotonic_ms(); + int64_t lastPaint = time_monotonic_ms(); bool ok = true, nlseen = false, dirty = false, incomplete = false; char output[1024]; std::string txt = ""; std::string line = ""; do { - time_t now; + int64_t now; fds.revents = 0; int r = poll(&fds, 1, 300); if (r > 0) { diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 8497efbb5..319b9bb4f 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2119,10 +2119,10 @@ void CNeutrinoApp::InitSectiondClient() #if 0 /* TODO: check if still needed */ /* wait for sectionsd to be able to process our registration */ - time_t t = time_monotonic_ms(); + int64_t t = time_monotonic_ms(); while (! sectionsd_isReady()) sleep(0); - dprintf(DEBUG_NORMAL, "had to wait %ld ms for sectionsd to start up\n", time_monotonic_ms() - t); + dprintf(DEBUG_NORMAL, "had to wait %" PRId64 " ms for sectionsd to start up\n", time_monotonic_ms() - t); #endif g_Sectionsd = new CSectionsdClient; struct timespec t; @@ -2376,10 +2376,10 @@ TIMER_START(); InitSectiondClient(); /* wait until timerd is ready... */ - time_t timerd_wait = time_monotonic_ms(); + int64_t timerd_wait = time_monotonic_ms(); while (timerd_signal >= 0) usleep(100); - dprintf(DEBUG_NORMAL, "had to wait %ld ms for timerd start...\n", time_monotonic_ms() - timerd_wait); + dprintf(DEBUG_NORMAL, "had to wait %" PRId64 " ms for timerd start...\n", time_monotonic_ms() - timerd_wait); InitTimerdClient(); // volume diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 10e582aa7..1bcf9c5df 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -131,15 +131,16 @@ static const struct dtv_property dvbt_cmdargs[] = { #define diff(x,y) (max(x,y) - min(x,y)) #define FE_TIMER_INIT() \ - unsigned int timer_start; \ - static unsigned int tmin = 2000, tmax = 0; \ - unsigned int timer_msec = 0; + int64_t timer_start; \ + static uint32_t tmin = 2000, tmax = 0; \ + uint32_t timer_msec = 0; #define FE_TIMER_START() \ timer_start = time_monotonic_ms(); #define FE_TIMER_STOP(label) \ - timer_msec = time_monotonic_ms() - timer_start; \ + timer_msec = (uint32_t)(time_monotonic_ms() - \ + timer_start); \ if(tmin > timer_msec) tmin = timer_msec; \ if(tmax < timer_msec) tmax = timer_msec; \ printf("[fe%d] %s: %u msec (min %u max %u)\n", \ @@ -704,7 +705,7 @@ struct dvb_frontend_event CFrontend::getEvent(void) if (pfd.revents & (POLLIN | POLLPRI)) { //FE_TIMER_STOP("poll has event after"); - timer_msec = time_monotonic_ms() - timer_start; /* FE_TIMER_STOP does this :( */ + timer_msec = (uint32_t)(time_monotonic_ms() - timer_start); /* FE_TIMER_STOP does this :( */ memset(&event, 0, sizeof(struct dvb_frontend_event)); ret = ioctl(fd, FE_GET_EVENT, &event); From ef71d00d7fea9e2e92054e86ff2a2928b8ab0f96 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 1 Oct 2017 14:12:55 +0200 Subject: [PATCH 31/74] remove "using namespace std" from header files "using namespace std" in headers is considered bad practice, so move it either into the respective cpp files or (for files which have lots of other std::xxx usage anyway) just write it out explicitly. Looking at the headers and the affected cpp files, one can actually see why it is bad practice, as it's spreading very far ;-) Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0d9139054aebddaea9c7a3a2f225a69fcd17a868 Author: Stefan Seyfried Date: 2017-10-01 (Sun, 01 Oct 2017) ------------------ This commit was generated by Migit --- src/driver/audiodec/basedec.cpp | 2 +- src/driver/movieinfo.cpp | 2 +- src/gui/audio_select.h | 2 -- src/gui/cam_menu.h | 2 -- src/gui/channellist.cpp | 4 ++-- src/gui/components/cc_draw.cpp | 2 +- src/gui/components/cc_item_progressbar.cpp | 2 +- src/gui/dboxinfo.cpp | 8 ++++---- src/gui/epgview.cpp | 2 +- src/gui/eventlist.cpp | 2 +- src/gui/hdd_menu.cpp | 2 +- src/gui/hdd_menu.h | 4 +--- src/gui/infoviewer.cpp | 10 +++++----- src/gui/infoviewer_bb.cpp | 4 ++-- src/gui/lua/lua_cc_window.cpp | 2 +- src/gui/moviebrowser/mb.cpp | 8 ++++---- src/gui/movieplayer.cpp | 4 ++-- src/gui/osd_setup.cpp | 2 +- src/gui/screensaver.h | 2 +- src/gui/timerlist.cpp | 6 +++--- src/gui/tmdb.cpp | 2 +- src/gui/update.cpp | 2 +- src/gui/update_ext.cpp | 4 ++-- src/gui/upnpbrowser.cpp | 2 +- src/gui/widget/mountchooser.cpp | 4 ++-- src/gui/widget/msgbox.cpp | 2 ++ src/gui/widget/shellwindow.cpp | 4 ++-- src/gui/widget/stringinput.cpp | 2 +- src/nhttpd/tuxboxapi/controlapi.cpp | 2 +- src/nhttpd/tuxboxapi/neutrinoapi.cpp | 2 +- src/nhttpd/tuxboxapi/neutrinoyparser.cpp | 2 +- src/system/helpers-json.h | 6 ++---- src/system/ytparser.cpp | 4 ++-- src/zapit/include/zapit/bouquets.h | 10 ++++------ src/zapit/include/zapit/getservices.h | 2 +- src/zapit/src/bouquets.cpp | 2 +- src/zapit/src/getservices.cpp | 4 ++-- 37 files changed, 60 insertions(+), 68 deletions(-) diff --git a/src/driver/audiodec/basedec.cpp b/src/driver/audiodec/basedec.cpp index 34d8cbeb9..f5a35e0b1 100644 --- a/src/driver/audiodec/basedec.cpp +++ b/src/driver/audiodec/basedec.cpp @@ -72,7 +72,7 @@ CBaseDec::RetCode CBaseDec::DecoderBase(CAudiofile* const in, RetCode Status = OK; FILE* fp; - if(( in->FileType == CFile::STREAM_AUDIO ) && (in->Filename.find(".flv") != string::npos)) + if ((in->FileType == CFile::STREAM_AUDIO) && (in->Filename.find(".flv") != std::string::npos)) { fp = fopen( in->Filename.c_str(), "rc" ); } diff --git a/src/driver/movieinfo.cpp b/src/driver/movieinfo.cpp index 0714c0a05..415ef9374 100644 --- a/src/driver/movieinfo.cpp +++ b/src/driver/movieinfo.cpp @@ -55,7 +55,7 @@ CMovieInfo::~CMovieInfo() bool CMovieInfo::convertTs2XmlName(std::string& filename) { size_t lastdot = filename.find_last_of("."); - if (lastdot != string::npos) { + if (lastdot != std::string::npos) { filename.erase(lastdot + 1); filename.append("xml"); return true; diff --git a/src/gui/audio_select.h b/src/gui/audio_select.h index 0dc27572f..b1177ccbf 100644 --- a/src/gui/audio_select.h +++ b/src/gui/audio_select.h @@ -32,8 +32,6 @@ -using namespace std; - class CAudioSelectMenuHandler : public CMenuTarget { private: diff --git a/src/gui/cam_menu.h b/src/gui/cam_menu.h index 829aa3433..9797f5c4a 100644 --- a/src/gui/cam_menu.h +++ b/src/gui/cam_menu.h @@ -29,8 +29,6 @@ #include -using namespace std; - class CCAMMenuHandler : public CMenuTarget, public CChangeObserver { private: diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 2d25fbcff..efe84b35b 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -1693,7 +1693,7 @@ void CChannelList::showChannelLogo() header->getChannelLogoObject()->paint(); } else - header->setChannelLogo(0, string()); + header->setChannelLogo(0, std::string()); } #define NUM_LIST_BUTTONS_SORT 9 @@ -2131,7 +2131,7 @@ void CChannelList::paintHead() if (bouquet && bouquet->zapitBouquet && bouquet->zapitBouquet->bLocked != g_settings.parentallock_defaultlocked) header->setIcon(NEUTRINO_ICON_LOCK); - string header_txt = !edit_state ? name : string(g_Locale->getText(LOCALE_CHANNELLIST_EDIT)) + ": " + name; + std::string header_txt = !edit_state ? name : std::string(g_Locale->getText(LOCALE_CHANNELLIST_EDIT)) + ": " + name; fb_pixel_t header_txt_col = (edit_state ? COL_RED : COL_MENUHEAD_TEXT); header->setColorBody(COL_MENUHEAD_PLUS_0); diff --git a/src/gui/components/cc_draw.cpp b/src/gui/components/cc_draw.cpp index 0ac6128c0..e086ac503 100644 --- a/src/gui/components/cc_draw.cpp +++ b/src/gui/components/cc_draw.cpp @@ -45,7 +45,7 @@ CCDraw::CCDraw() : COSDFader(g_settings.theme.menu_Content_alpha) col_frame = col_frame_old = COL_FRAME_PLUS_0; col_shadow_clean = 0; - cc_body_image = cc_body_image_old = string(); + cc_body_image = cc_body_image_old = std::string(); fr_thickness = fr_thickness_old = 0; diff --git a/src/gui/components/cc_item_progressbar.cpp b/src/gui/components/cc_item_progressbar.cpp index 5a639c825..1a069a1dc 100644 --- a/src/gui/components/cc_item_progressbar.cpp +++ b/src/gui/components/cc_item_progressbar.cpp @@ -107,7 +107,7 @@ void CProgressBar::initDimensions() pb_y = (cc_parent ? cc_yr : y) + fr_thickness; // width for active bar with current value - pb_active_width = max(0, pb_last_width); + pb_active_width = std::max(0, pb_last_width); if (pb_max_value) pb_active_width = (width - 2*fr_thickness) * pb_value / pb_max_value; diff --git a/src/gui/dboxinfo.cpp b/src/gui/dboxinfo.cpp index 78f8c80ea..66e52ecbe 100644 --- a/src/gui/dboxinfo.cpp +++ b/src/gui/dboxinfo.cpp @@ -288,10 +288,10 @@ void CDBoxInfoWidget::paint() while (getline(in, line)) { size_t firstslash = line.find_first_of('/'); size_t firstspace = line.find_first_of(' '); - if ( (firstspace != string::npos && firstslash != string::npos && firstslash < firstspace) || (line.find("rootfs") == 0) ) { + if ( (firstspace != std::string::npos && firstslash != std::string::npos && firstslash < firstspace) || (line.find("rootfs") == 0) ) { firstspace++; size_t nextspace = line.find_first_of(' ', firstspace); - if (nextspace == string::npos || line.find("nodev", nextspace + 1) != string::npos) + if (nextspace == std::string::npos || line.find("nodev", nextspace + 1) != std::string::npos) continue; std::string mountpoint = line.substr(firstspace, nextspace - firstspace); struct stat st; @@ -344,7 +344,7 @@ void CDBoxInfoWidget::paint() std::string line; while (getline(in, line)) { size_t colon = line.find_first_of(':'); - if (colon != string::npos && colon > 1) { + if (colon != std::string::npos && colon > 1) { std::string key = line.substr(0, colon - 1); std::string val = line.substr(colon + 1); cpuinfo[trim(key)] = trim(val); @@ -363,7 +363,7 @@ void CDBoxInfoWidget::paint() sprintf(ss, "%016llx", cs_get_serial()); title += ", S/N "; title += ss; - width = max(width, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(title, true) + 50); + width = std::max(width, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(title, true) + 50); x = getScreenStartX(width); if (!header) diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index 240f0087a..72dfb73fe 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -300,7 +300,7 @@ void CEpgData::showText(int startPos, int ypos, bool has_cover, bool fullClear) if(epgText[i].second){ std::string::size_type pos1 = epgText[i].first.find_first_not_of(tok, 0); std::string::size_type pos2 = epgText[i].first.find_first_of(tok, pos1); - while( pos2 != string::npos || pos1 != string::npos ){ + while( pos2 != std::string::npos || pos1 != std::string::npos ){ switch(count){ case 1: offset += max_wday_w; diff --git a/src/gui/eventlist.cpp b/src/gui/eventlist.cpp index 97d9a5bc4..e86c77288 100644 --- a/src/gui/eventlist.cpp +++ b/src/gui/eventlist.cpp @@ -363,7 +363,7 @@ int CEventList::exec(const t_channel_id channel_id, const std::string& channelna COSDFader fader(g_settings.theme.menu_Content_alpha); fader.StartFadeIn(); if(!followlist.empty()){ - insert_iterator >ii(evtlist,evtlist.begin()); + std::insert_iterator >ii(evtlist,evtlist.begin()); copy(followlist.begin(), followlist.end(), ii); showfollow = true; }else{ diff --git a/src/gui/hdd_menu.cpp b/src/gui/hdd_menu.cpp index fba3e6ef0..0bb0fd86b 100644 --- a/src/gui/hdd_menu.cpp +++ b/src/gui/hdd_menu.cpp @@ -366,7 +366,7 @@ void CHDDMenuHandler::setRecordPath(std::string &dev) return; } /* don't annoy if the recordingdir is a symlink pointing to the 'right' location */ - string readl = backtick("readlink -f " + g_settings.network_nfs_recordingdir); + std::string readl = backtick("readlink -f " + g_settings.network_nfs_recordingdir); readl = trim(readl); if (newpath.compare(readl) == 0) { printf("CHDDMenuHandler::%s: recordingdir is a symlink to %s\n", diff --git a/src/gui/hdd_menu.h b/src/gui/hdd_menu.h index 13a320e62..6a56fd836 100644 --- a/src/gui/hdd_menu.h +++ b/src/gui/hdd_menu.h @@ -28,8 +28,6 @@ #include "widget/menue.h" #include -using namespace std; - struct devtool_s { std::string fmt; std::string fsck; @@ -64,7 +62,7 @@ class CHDDMenuHandler : public CMenuTarget bool mounted; }; std::vector hdd_list; - struct cmp_hdd_by_name: public binary_function + struct cmp_hdd_by_name: public std::binary_function { bool operator() (const struct hdd_s &c1, const struct hdd_s &c2) { diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 0420e50dd..a42e3612d 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -200,11 +200,11 @@ void CInfoViewer::start () 2 * g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight() + 25; infoViewerBB->Init(); - ChanWidth = max(125, 4 * g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_NUMBER]->getMaxDigitWidth() + 10); + ChanWidth = std::max(125, 4 * g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_NUMBER]->getMaxDigitWidth() + 10); ChanHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_NUMBER]->getHeight()/* * 9/8*/; ChanHeight += g_SignalFont->getHeight()/2; - ChanHeight = max(75, ChanHeight); + ChanHeight = std::max(75, ChanHeight); numbox_offset = 3; BoxStartX = g_settings.screen_StartX + 10; @@ -216,7 +216,7 @@ void CInfoViewer::start () ChanInfoX = BoxStartX + (ChanWidth / 3); initClock(); - time_height = max(ChanHeight / 2, clock->getHeight()); + time_height = std::max(ChanHeight / 2, clock->getHeight()); time_width = clock->getWidth(); } @@ -2115,8 +2115,8 @@ void CInfoViewer::showInfoFile() } //get text from file and set it to info object, exit and delete object if failed - string old_txt = infobar_txt->getText(); - string new_txt = infobar_txt->getTextFromFile(infobar_file); + std::string old_txt = infobar_txt->getText(); + std::string new_txt = infobar_txt->getTextFromFile(infobar_file); bool has_text = infobar_txt->setText(new_txt, CTextBox::CENTER, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]); if (new_txt.empty()){ killInfobarText(); diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 0a0091a3b..3dcc38ec3 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -738,7 +738,7 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o int endx = g_InfoViewer->BoxEndX - (g_settings.infobar_casystem_frame ? 20 : 10); int py = g_InfoViewer->BoxEndY + (g_settings.infobar_casystem_frame ? 4 : 2); /* hand-crafted, should be automatic */ int px = 0; - static map > icon_map; + static std::map > icon_map; const int icon_space = 10, icon_number = 10; static int icon_offset[icon_number] = {0,0,0,0,0,0,0,0,0,0}; @@ -748,7 +748,7 @@ void CInfoViewerBB::paint_ca_icons(int caid, const char *icon, int &icon_space_o if (!init_flag) { init_flag = true; int icon_sizeH = 0, index = 0; - map >::const_iterator it; + std::map >::const_iterator it; icon_map[0x0E00] = std::make_pair(index++,"powervu"); icon_map[0x4A00] = std::make_pair(index++,"d"); diff --git a/src/gui/lua/lua_cc_window.cpp b/src/gui/lua/lua_cc_window.cpp index 0d4c9d412..bec918eef 100644 --- a/src/gui/lua/lua_cc_window.cpp +++ b/src/gui/lua/lua_cc_window.cpp @@ -140,7 +140,7 @@ int CLuaInstCCWindow::CCWindowNew(lua_State *L) else { CComponentsFooter* footer = (*udata)->w->getFooterObject(); if (footer) { - vector buttons; + std::vector buttons; if (!btnRed.empty()) { button_label_cc btnSred; btnSred.button = NEUTRINO_ICON_BUTTON_RED; diff --git a/src/gui/moviebrowser/mb.cpp b/src/gui/moviebrowser/mb.cpp index cd9200b3b..77b9f0976 100644 --- a/src/gui/moviebrowser/mb.cpp +++ b/src/gui/moviebrowser/mb.cpp @@ -1279,10 +1279,10 @@ std::string CMovieBrowser::getScreenshotName(std::string movie, bool is_dir) else found = movie.find_last_of("."); - if (found == string::npos) + if (found == std::string::npos) return ""; - vector::iterator it = PicExts.begin(); + std::vector::iterator it = PicExts.begin(); while (it < PicExts.end()) { ret = movie; ext = *it; @@ -1325,7 +1325,7 @@ void CMovieBrowser::refreshChannelLogo(void) if (m_channelLogo && m_channelLogo->hasLogo()) { // TODO: move into an own handler, eg. header, so channel logo should be paint in header object - m_channelLogo->setWidth(min(m_channelLogo->getWidth(), w_logo_max), true); + m_channelLogo->setWidth(std::min(m_channelLogo->getWidth(), w_logo_max), true); if (m_channelLogo->getHeight() > h_logo_max) m_channelLogo->setHeight(h_logo_max, true); @@ -2846,7 +2846,7 @@ bool CMovieBrowser::addFile(CFile &file, int dirItNr) movieInfo.file = file; if(!m_movieInfo.loadMovieInfo(&movieInfo)) { - movieInfo.channelName = string(g_Locale->getText(LOCALE_MOVIEPLAYER_HEAD)); + movieInfo.channelName = std::string(g_Locale->getText(LOCALE_MOVIEPLAYER_HEAD)); movieInfo.epgTitle = file.getFileName(); } movieInfo.dirItNr = dirItNr; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index ab5b69b3f..70fc90d4b 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -815,7 +815,7 @@ bool CMoviePlayerGui::luaGetUrl(const std::string &script, const std::string &fi return false; } - string errMsg = ""; + std::string errMsg = ""; Json::Value root; bool ok = parseJsonFromString(result_string, &root, &errMsg); if (!ok) { @@ -2586,7 +2586,7 @@ void CMoviePlayerGui::showSubtitle(neutrino_msg_data_t data) size_t start = 0, end = 0; /* split string with \N as newline */ std::string delim("\\N"); - while ((end = str.find(delim, start)) != string::npos) { + while ((end = str.find(delim, start)) != std::string::npos) { subtext.push_back(str.substr(start, end - start)); start = end + 2; } diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index b3821636f..c1ed05dfc 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -1308,7 +1308,7 @@ void COsdSetup::showOsdVolumeSetup(CMenuWidget *menu_volume) // volume size int vMin = CVolumeHelper::getInstance()->getVolIconHeight(); - g_settings.volume_size = max(g_settings.volume_size, vMin); + g_settings.volume_size = std::max(g_settings.volume_size, vMin); CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_VOLUME_SIZE, &g_settings.volume_size, true, vMin, 50); nc->setHint("", LOCALE_MENU_HINT_VOLUME_SIZE); menu_volume->addItem(nc); diff --git a/src/gui/screensaver.h b/src/gui/screensaver.h index 0a9605561..9dff31919 100644 --- a/src/gui/screensaver.h +++ b/src/gui/screensaver.h @@ -39,7 +39,7 @@ class CScreenSaver : public sigc::trackable CComponentsFrmClock *scr_clock; pthread_t thrScreenSaver; static void* ScreenSaverPrg(void *arg); - vector v_bg_files; + std::vector v_bg_files; unsigned int index; t_channel_id pip_channel_id; bool status_mute; diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index f217679a1..30abd3eda 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -739,7 +739,7 @@ bool CTimerList::RemoteBoxChanExists(t_channel_id channel_id) r_url += string_printf_helper(PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS, channel_id); r_url = httpTool.downloadString(r_url, -1, httpConnectTimeout); - string errMsg = ""; + std::string errMsg = ""; Json::Value root; bool ok = parseJsonFromString(r_url, &root, &errMsg); if (!ok) { @@ -796,7 +796,7 @@ void CTimerList::RemoteBoxTimerList(CTimerd::TimerList &rtimerlist) r_url = httpTool.downloadString(r_url, -1, httpConnectTimeout); //printf("[remotetimer] timers:%s\n",r_url.c_str()); - string errMsg = ""; + std::string errMsg = ""; Json::Value root; bool ok = parseJsonFromString(r_url, &root, &errMsg); if (!ok) { @@ -1285,7 +1285,7 @@ void CTimerList::paintItem(int pos) r_url += string_printf_helper(PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS, timer.channel_id); r_url = httpTool.downloadString(r_url, -1, httpConnectTimeout); - string errMsg = ""; + std::string errMsg = ""; Json::Value root; bool ok = parseJsonFromString(r_url, &root, &errMsg); if (!ok) { diff --git a/src/gui/tmdb.cpp b/src/gui/tmdb.cpp index 5a8208e27..b4aff486d 100644 --- a/src/gui/tmdb.cpp +++ b/src/gui/tmdb.cpp @@ -198,7 +198,7 @@ bool cTmdb::GetMovieDetails(std::string lang) if (!getUrl(url, answer)) return false; - string errMsg = ""; + std::string errMsg = ""; Json::Value root; bool ok = parseJsonFromString(answer, &root, &errMsg); if (!ok) { diff --git a/src/gui/update.cpp b/src/gui/update.cpp index e0ce4cf0a..40e1a2312 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -411,7 +411,7 @@ bool CFlashUpdate::checkVersion4Update() if (allow_flash) UpdatesFilter.addFilter(FILEBROWSER_UPDATE_FILTER); - string filters[] = {"bin", "txt", "opk", "ipk"}; + std::string filters[] = {"bin", "txt", "opk", "ipk"}; for(size_t i=0; i::iterator it = blackList.begin(); it != blackList.end(); ++it) { + for(std::vector::iterator it = blackList.begin(); it != blackList.end(); ++it) { if (*it == file) { DBG_MSG("BlacklistEntry %s\n", (*it).c_str()); WRITE_UPDATE_LOG("BlacklistEntry: %s\n", (*it).c_str()); @@ -559,7 +559,7 @@ bool CExtUpdate::readBackupList(const std::string & dstPath) { char buf[PATH_MAX]; static struct stat FileInfo; - vector::iterator it; + std::vector::iterator it; f1 = fopen(backupList.c_str(), "r"); if (f1 == NULL) { diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 1f4c67b17..2b335df76 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -1197,7 +1197,7 @@ void CUpnpBrowserGui::paintDetails(UPnPEntry *entry, bool use_playing) timebox.kill(); m_playing_entry_is_shown = false; }else{ - string text = ""; + std::string text = ""; if (use_playing){ if (!m_playing_entry_is_shown){ m_playing_entry_is_shown = true; diff --git a/src/gui/widget/mountchooser.cpp b/src/gui/widget/mountchooser.cpp index fa56e462f..b21f8f672 100644 --- a/src/gui/widget/mountchooser.cpp +++ b/src/gui/widget/mountchooser.cpp @@ -48,8 +48,8 @@ CMountChooser::CMountChooser(const neutrino_locale_t Name, const std::string & I for(int i=0 ; i < NETWORK_NFS_NR_OF_ENTRIES ; i++) { if (!g_settings.network_nfs[i].local_dir.empty() && - (g_settings.network_nfs[i].mount_options1.find("rw") != string::npos || - g_settings.network_nfs[i].mount_options2.find("rw") != string::npos)) + (g_settings.network_nfs[i].mount_options1.find("rw") != std::string::npos || + g_settings.network_nfs[i].mount_options2.find("rw") != std::string::npos)) { std::string s = g_settings.network_nfs[i].local_dir + " (" + g_settings.network_nfs[i].ip + ":" + g_settings.network_nfs[i].dir + ")"; snprintf(indexStr,sizeof(indexStr),"%d",i); diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index 79fa64e93..11aefe2f4 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -41,6 +41,8 @@ #define MIN_WINDOW_WIDTH (MAX_WINDOW_WIDTH>>1) #define MIN_WINDOW_HEIGHT 40 +using namespace std; /* TODO: remove all std:: prefixes in this file */ + CMsgBox::CMsgBox( const char* Text, const char* Title, const char* Icon, diff --git a/src/gui/widget/shellwindow.cpp b/src/gui/widget/shellwindow.cpp index 60af07803..2e67e1e8d 100644 --- a/src/gui/widget/shellwindow.cpp +++ b/src/gui/widget/shellwindow.cpp @@ -83,7 +83,7 @@ static int read_line(int fd, struct pollfd *fds, char *b, size_t sz) return i; } -static std::string lines2txt(list &lines) +static std::string lines2txt(std::list &lines) { std::string txt = ""; for (std::list::const_iterator it = lines.begin(), end = lines.end(); it != end; ++it) { @@ -122,7 +122,7 @@ void CShellWindow::exec() int h_shell = frameBuffer->getScreenHeight(); int w_shell = frameBuffer->getScreenWidth(); unsigned int lines_max = h_shell / font->getHeight(); - list lines; + std::list lines; CBox textBoxPosition(frameBuffer->getScreenX(), frameBuffer->getScreenY(), w_shell, h_shell); if (textBox == NULL){ textBox = new CTextBox(cmd.c_str(), font, CTextBox::BOTTOM, &textBoxPosition); diff --git a/src/gui/widget/stringinput.cpp b/src/gui/widget/stringinput.cpp index b4b8a30c8..9ae14319e 100644 --- a/src/gui/widget/stringinput.cpp +++ b/src/gui/widget/stringinput.cpp @@ -490,7 +490,7 @@ int CStringInput::exec( CMenuTarget* parent, const std::string & ) } else if ( (msg==CRCInput::RC_home) || (msg==CRCInput::RC_timeout) ) { - string tmp_name = name == NONEXISTANT_LOCALE ? head : g_Locale->getText(name); + std::string tmp_name = name == NONEXISTANT_LOCALE ? head : g_Locale->getText(name); if ((trim (*valueString) != trim(oldval)) && (ShowMsg(tmp_name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel)) { timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU]); diff --git a/src/nhttpd/tuxboxapi/controlapi.cpp b/src/nhttpd/tuxboxapi/controlapi.cpp index 847bdada0..90dbad0b4 100644 --- a/src/nhttpd/tuxboxapi/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/controlapi.cpp @@ -1068,7 +1068,7 @@ void CControlAPI::LogolistCGI(CyhookHandler *hh) if (g_PicViewer->GetLogoName(channel->getChannelID(), NeutrinoAPI->GetServiceName(channel->getChannelID()), logo_used, NULL, NULL)) { realpath(logo_used.c_str(), _real); - logo_real = string(_real); + logo_real = std::string(_real); if (strcmp(logo_used.c_str(), logo_real.c_str()) == 0) logo_real.clear(); } diff --git a/src/nhttpd/tuxboxapi/neutrinoapi.cpp b/src/nhttpd/tuxboxapi/neutrinoapi.cpp index 6bd31953c..6aef17954 100644 --- a/src/nhttpd/tuxboxapi/neutrinoapi.cpp +++ b/src/nhttpd/tuxboxapi/neutrinoapi.cpp @@ -514,7 +514,7 @@ std::string CNeutrinoAPI::getCryptInfoAsString(void) for(casys_map_iterator_t it = channel->camap.begin(); it != channel->camap.end(); ++it) { int caid = (*it) & 0xFF00; if(caid == caids[i]) - out << casys[i] << hex << (*it) << "\n"; + out << casys[i] << std::hex << (*it) << "\n"; } } diff --git a/src/nhttpd/tuxboxapi/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/neutrinoyparser.cpp index 2dd411c59..5ad95bac3 100644 --- a/src/nhttpd/tuxboxapi/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/neutrinoyparser.cpp @@ -585,7 +585,7 @@ std::string CNeutrinoYParser::func_get_logo_name(CyhookHandler *hh, std::string std::string fileType[] = { ".png", ".jpg" , ".gif" }; std::string channelIdShort = channelId.substr(channelId.length() - 12); - channelIdShort = channelIdShort.erase(0, min(channelIdShort.find_first_not_of('0'), channelIdShort.size()-1)); + channelIdShort = channelIdShort.erase(0, std::min(channelIdShort.find_first_not_of('0'), channelIdShort.size()-1)); std::string channelName = ""; t_channel_id chId = 0; diff --git a/src/system/helpers-json.h b/src/system/helpers-json.h index 0e4923649..23582d431 100644 --- a/src/system/helpers-json.h +++ b/src/system/helpers-json.h @@ -23,9 +23,7 @@ #include -using namespace std; - -bool parseJsonFromFile(string& jFile, Json::Value *root, string *errMsg); -bool parseJsonFromString(string& jData, Json::Value *root, string *errMsg); +bool parseJsonFromFile(std::string& jFile, Json::Value *root, std::string *errMsg); +bool parseJsonFromString(std::string& jData, Json::Value *root, std::string *errMsg); #endif diff --git a/src/system/ytparser.cpp b/src/system/ytparser.cpp index a2762f279..e42f7e032 100644 --- a/src/system/ytparser.cpp +++ b/src/system/ytparser.cpp @@ -289,7 +289,7 @@ std::string cYTFeedParser::getXmlData(xmlNodePtr node) bool cYTFeedParser::parseFeedJSON(std::string &answer) { - string errMsg = ""; + std::string errMsg = ""; Json::Value root; std::ostringstream ss; @@ -384,7 +384,7 @@ bool cYTFeedParser::parseFeedDetailsJSON(cYTVideoInfo* vinfo) if (!getUrl(url, answer)) return false; - string errMsg = ""; + std::string errMsg = ""; Json::Value root; bool parsedSuccess = parseJsonFromString(answer, &root, &errMsg); if (!parsedSuccess) { diff --git a/src/zapit/include/zapit/bouquets.h b/src/zapit/include/zapit/bouquets.h index 6c885a562..2adc88f4b 100644 --- a/src/zapit/include/zapit/bouquets.h +++ b/src/zapit/include/zapit/bouquets.h @@ -18,12 +18,10 @@ #include "channel.h" -using namespace std; - -typedef map tallchans; +typedef std::map tallchans; typedef tallchans::iterator tallchans_iterator; -typedef vector ZapitChannelList; +typedef std::vector ZapitChannelList; typedef ZapitChannelList::iterator zapit_list_it_t; #define DEFAULT_BQ_ID 0 @@ -83,7 +81,7 @@ class CZapitBouquet bool getChannels(ZapitChannelList &list, bool tv, int flags = CZapitChannel::PRESENT); }; -typedef vector BouquetList; +typedef std::vector BouquetList; class CBouquetManager { @@ -168,7 +166,7 @@ class CBouquetManager * For instance all countless variants of the letter a have to be regarded as the same letter. */ -struct CmpBouquetByChName: public binary_function +struct CmpBouquetByChName: public std::binary_function { static bool comparetolower(const char a, const char b) { diff --git a/src/zapit/include/zapit/getservices.h b/src/zapit/include/zapit/getservices.h index 780b525c0..f82908e26 100644 --- a/src/zapit/include/zapit/getservices.h +++ b/src/zapit/include/zapit/getservices.h @@ -40,7 +40,7 @@ extern transponder_list_t transponders; typedef std::map sat_transponder_map_t; -typedef map channel_map_t; +typedef std::map channel_map_t; typedef channel_map_t::iterator channel_map_iterator_t; typedef std::pair channel_pair_t; typedef std::pair channel_insert_res_t; diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index 271751cd0..ff018ded9 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -542,7 +542,7 @@ void CBouquetManager::makeRemainingChannelsBouquet(void) int j = CServiceManager::getInstance()->GetMaxNumber(true); /* FIXME temp debug */ printf("############## CBouquetManager::makeRemainingChannelsBouquet: numbers start at: tv %d radio %d ############\n", i, j); - for (vector::const_iterator it = Bouquets.begin(); it != Bouquets.end(); ++it) { + for (std::vector::const_iterator it = Bouquets.begin(); it != Bouquets.end(); ++it) { renumChannels((*it)->tvChannels, i, (*it)->bUser ? NULL : (char *) (*it)->Name.c_str()); renumChannels((*it)->radioChannels, j, (*it)->bUser ? NULL : (char *) (*it)->Name.c_str()); } diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index 5bb5d24aa..a9d331803 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -418,7 +418,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition,original_network_id,transport_stream_id); transponder t(tid, feparams); - pair::iterator,bool> ret; + std::pair::iterator,bool> ret; ret = transponders.insert(transponder_pair_t(tid, t)); if (ret.second == false) t.dump("[zapit] duplicate in all transponders:"); @@ -1379,7 +1379,7 @@ bool CServiceManager::GetTransponder(transponder_id_t tid, transponder &t) void CServiceManager::UpdateSatTransponders(t_satellite_position satellitePosition) { - pair::iterator,bool> ret; + std::pair::iterator,bool> ret; transponder_list_t & stransponders = satelliteTransponders[satellitePosition]; for (transponder_list_t::iterator tI = transponders.begin(); tI != transponders.end(); ++tI) { for (stiterator stI = stransponders.begin(); stI != stransponders.end(); ++stI) { From 586a1b5a4949cb88bbbdec6e1ef89a8641b6c770 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 1 Oct 2017 14:38:52 +0200 Subject: [PATCH 32/74] helpers/readFile: limit memory allocations Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/2f39081708e362454e91973a93b9d43991274562 Author: Stefan Seyfried Date: 2017-10-01 (Sun, 01 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/system/helpers.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index d47485a62..246af293a 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -1455,8 +1455,16 @@ string readFile(string file) if (tmpData.is_open()) { tmpData.seekg(0, tmpData.end); int length = tmpData.tellg(); + if (length > 0xffff) { /* longer than 64k? better read in chunks! */ + cerr << __func__ << ": file " << file << " too big (" << length << " bytes)" << endl; + return ""; + } tmpData.seekg(0, tmpData.beg); char* buffer = new char[length+1]; + if (! buffer) { + cerr << __func__ << ": allocating " << (length + 1) << " bytes for buffer failed" << endl; + return ""; + } tmpData.read(buffer, length); tmpData.close(); buffer[length] = '\0'; From 0145e87beff7e5ca7b286b9e0a9c8ec1a74a8496 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 2 Oct 2017 14:23:17 +0200 Subject: [PATCH 33/74] fix compil after merge Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/5ba69b43ec1dbceeb2f1a51a2ea3f18aa4ed0876 Author: Jacek Jendrzej Date: 2017-10-02 (Mon, 02 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/hdd_menu.cpp | 10 +++++----- src/gui/streaminfo2.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/hdd_menu.cpp b/src/gui/hdd_menu.cpp index 1a6424e2c..2baa3a6d6 100644 --- a/src/gui/hdd_menu.cpp +++ b/src/gui/hdd_menu.cpp @@ -133,11 +133,11 @@ int CHDDMenuHandler::filterDevName(const char * name) return 0; } -static string readlink(const char *path) +static std::string readlink(const char *path) { char link[PATH_MAX + 1]; if (realpath(path, link)) - return string(link); + return std::string(link); return ""; } @@ -151,7 +151,7 @@ bool CHDDMenuHandler::is_mounted(const char *dev) snprintf(devpath, sizeof(devpath), "/dev/%s", dev); char buffer[255]; - string realdev = readlink(devpath); + std::string realdev = readlink(devpath); realdev = trim(realdev); FILE *f = fopen("/proc/mounts", "r"); if(f) { @@ -164,7 +164,7 @@ bool CHDDMenuHandler::is_mounted(const char *dev) if (!strcmp(buffer, devpath)) /* default '/dev/sda1' mount */ res = true; else { /* now the case of '/dev/disk/by-label/myharddrive' mounts */ - string realmount = readlink(buffer); + std::string realmount = readlink(buffer); if (realdev == trim(realmount)) res = true; } @@ -259,7 +259,7 @@ void CHDDMenuHandler::check_kernel_fs() if (! tab) /* should not happen in any kernel I have seen */ continue; tab++; - kernel_fs_list.insert(string(tab)); + kernel_fs_list.insert(std::string(tab)); } fclose(f); } diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index d0a57a15f..c5f68771e 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -150,8 +150,8 @@ int CStreamInfo2::doSignalStrengthLoop () const int delay = 15; int sw = g_Font[font_info]->getRenderWidth("99999"); maxb = minb = lastb = tmp_rate = 0; - string br_str = string(g_Locale->getText(LOCALE_STREAMINFO_BITRATE)) + ":"; - string avg_str = "(" + string(g_Locale->getText(LOCALE_STREAMINFO_AVERAGE_BITRATE)) + ")"; + std::string br_str = std::string(g_Locale->getText(LOCALE_STREAMINFO_BITRATE)) + ":"; + std::string avg_str = "(" + std::string(g_Locale->getText(LOCALE_STREAMINFO_AVERAGE_BITRATE)) + ")"; int offset = g_Font[font_info]->getRenderWidth(avg_str); int dheight = g_Font[font_info]->getHeight (); int dx1 = x + 10; From 05e9551034ce610e7f0f92129a38fba28ee22749 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 7 Oct 2017 13:40:35 +0200 Subject: [PATCH 34/74] src/gui/test_menu.cpp fix memleak Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/74f02a16f5c1be9dd6cb2c430b1b2d25f25e4a4b Author: Jacek Jendrzej Date: 2017-10-07 (Sat, 07 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/test_menu.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index a2dfa2f32..790e18a8b 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -1121,9 +1121,12 @@ int CTestMenu::showTestMenu() w_test.setFooter(footerButtons, 2); w_test.addKey(CRCInput::RC_red, this, "footer_key"); w_test.addKey(CRCInput::RC_green, this, "footer_key"); - + int res = w_test.exec(NULL, ""); + delete w_hw; + delete w_cc; + delete w_msg; //exit - return w_test.exec(NULL, "");; + return res; } void CTestMenu::showCCTests(CMenuWidget *widget) From f41b3ef617b1fe3b492afaeaafa562ff04af5ba5 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 7 Oct 2017 15:03:47 +0200 Subject: [PATCH 35/74] src/gui/upnpbrowser.cpp kill infobox and timebox Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/9a0bcf0dc5daa65732f9ac854c57a43906598b4a Author: Jacek Jendrzej Date: 2017-10-07 (Sat, 07 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 2b335df76..9a4717e91 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -1226,8 +1226,11 @@ void CUpnpBrowserGui::paintDetails(UPnPEntry *entry, bool use_playing) void CUpnpBrowserGui::paintItem2DetailsLine(int pos) { if (pos < 0){ - if (dline) + if (dline){ dline->kill(); + infobox.kill(); + timebox.kill(); + } return; } From 236f99752988b1f978319c63af3bfc73077a3eb4 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 7 Oct 2017 15:12:19 +0200 Subject: [PATCH 36/74] src/gui/upnpbrowser.cpp clear framebuffer Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/7f1d736781f3f6f302b2be0ea6ba7bc99f9697e7 Author: Jacek Jendrzej Date: 2017-10-07 (Sat, 07 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 9a4717e91..58085098e 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -632,6 +632,7 @@ void CUpnpBrowserGui::playnext(void) playAudio((*entries)[0].resources[preferred].url, (*entries)[0].type); } else if (mime.substr(0,6) == "video/") { + m_frameBuffer->Clear(); playVideo((*entries)[0].title, (*entries)[0].resources[preferred].url); m_folderplay = false; // FIXME else no way to stop in video folder } From 4720ee5d7e6a5718a39713377ffd9a915d8507a8 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 8 Oct 2017 16:41:28 +0200 Subject: [PATCH 37/74] fix video folderplay Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ea0cd48d1859d0ca75274ffde922b50221bd1e3b Author: Jacek Jendrzej Date: 2017-10-08 (Sun, 08 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/movieplayer.cpp | 4 ++-- src/gui/upnpbrowser.cpp | 16 ++++++++++++---- src/gui/upnpbrowser.h | 1 + 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 70fc90d4b..6128d66cb 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -1266,7 +1266,7 @@ void CMoviePlayerGui::quickZap(neutrino_msg_t msg) if ((msg == CRCInput::RC_right) || msg == (neutrino_msg_t) g_settings.key_quickzap_up) { //printf("CMoviePlayerGui::%s: CRCInput::RC_right or g_settings.key_quickzap_up\n", __func__); - if (isLuaPlay) + if (isLuaPlay || isUPNP) { playstate = CMoviePlayerGui::STOPPED; keyPressed = CMoviePlayerGui::PLUGIN_PLAYSTATE_NEXT; @@ -1293,7 +1293,7 @@ void CMoviePlayerGui::quickZap(neutrino_msg_t msg) else if ((msg == CRCInput::RC_left) || msg == (neutrino_msg_t) g_settings.key_quickzap_down) { //printf("CMoviePlayerGui::%s: CRCInput::RC_left or g_settings.key_quickzap_down\n", __func__); - if (isLuaPlay) + if (isLuaPlay || isUPNP) { playstate = CMoviePlayerGui::STOPPED; keyPressed = CMoviePlayerGui::PLUGIN_PLAYSTATE_PREV; diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 58085098e..b06d3ce83 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -155,6 +155,8 @@ void CUpnpBrowserGui::Init() m_item_y = m_header_y + m_header_height; m_footer_y = m_item_y + (m_listmaxshow * m_item_height); m_infobox_y = m_footer_y + m_footer_height + OFFSET_SHADOW + OFFSET_INTER; + video_key_msg = CMoviePlayerGui::PLUGIN_PLAYSTATE_NORMAL; + } CUpnpBrowserGui::~CUpnpBrowserGui() @@ -633,8 +635,8 @@ void CUpnpBrowserGui::playnext(void) } else if (mime.substr(0,6) == "video/") { m_frameBuffer->Clear(); + m_folderplay = true; playVideo((*entries)[0].title, (*entries)[0].resources[preferred].url); - m_folderplay = false; // FIXME else no way to stop in video folder } else if (mime.substr(0,6) == "image/") { if (m_folderplay) @@ -727,6 +729,7 @@ bool CUpnpBrowserGui::selectItem(std::string id) unsigned int liststart = 0; unsigned int selected = 0; unsigned int total = 0; + video_key_msg = CMoviePlayerGui::PLUGIN_PLAYSTATE_NORMAL; printf("selectItem: [%s]\n", id.c_str()); if (!getItems(id, liststart, entries, total)) @@ -858,19 +861,23 @@ bool CUpnpBrowserGui::selectItem(std::string id) m_folderplay = false; stopAudio(); } - else if (m_folderplay && msg == (neutrino_msg_t) CRCInput::RC_stop) { + else if (m_folderplay && (msg == (neutrino_msg_t) CRCInput::RC_stop + || video_key_msg == CMoviePlayerGui::PLUGIN_PLAYSTATE_STOP + || video_key_msg == CMoviePlayerGui::PLUGIN_PLAYSTATE_LEAVE_ALL)){ timeout = 0; m_folderplay = false; m_frameBuffer->Clear(); refresh = true; } - else if (m_folderplay && msg == (neutrino_msg_t) CRCInput::RC_prev) { + else if (m_folderplay && (msg == (neutrino_msg_t) CRCInput::RC_prev) + || video_key_msg == CMoviePlayerGui::PLUGIN_PLAYSTATE_PREV){ timeout = 0; m_playid -= 2; if (m_playid < 0) m_playid = 0; } - else if (m_folderplay && msg == (neutrino_msg_t) CRCInput::RC_next) { + else if (m_folderplay && (msg == (neutrino_msg_t) CRCInput::RC_next + || video_key_msg == CMoviePlayerGui::PLUGIN_PLAYSTATE_NEXT)){ timeout = 0; stopAudio(); } @@ -1322,6 +1329,7 @@ void CUpnpBrowserGui::playVideo(std::string name, std::string url) m_frameBuffer->stopFrame(); CMoviePlayerGui::getInstance().SetFile(name, url); CMoviePlayerGui::getInstance().exec(NULL, "upnp"); + video_key_msg = CMoviePlayerGui::getInstance().getKeyPressed(); CNeutrinoApp::getInstance()->handleMsg(NeutrinoMessages::CHANGEMODE, NeutrinoMessages::mode_upnp | NeutrinoMessages::norezap); } diff --git a/src/gui/upnpbrowser.h b/src/gui/upnpbrowser.h index eff6326ad..758613cc0 100644 --- a/src/gui/upnpbrowser.h +++ b/src/gui/upnpbrowser.h @@ -96,6 +96,7 @@ class CUpnpBrowserGui : public CMenuTarget, public CListHelpers time_t m_time_played; bool m_playing_entry_is_shown; time_t timeout; + int video_key_msg; CComponentsDetailsLine * dline; CComponentsFooter footer; CComponentsInfoBox topbox, infobox, timebox; From 39191df6e0a6fb2c62eefb1d1ec91e76d6214104 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 8 Oct 2017 17:48:32 +0200 Subject: [PATCH 38/74] CMenuWidget: small clean ups Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4ad5ce65e2dec80eb25fd948aa229e41816bf25f Author: Thilo Graf Date: 2017-10-08 (Sun, 08 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/widget/menue.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 07aaed0e6..3b71a6490 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1455,10 +1455,8 @@ void CMenuWidget::enableSaveScreen(bool enable) void CMenuWidget::paintHint(int pos) { - if (!g_settings.show_menu_hints){ - //ResetModules(); //ensure clean up on changed setting + if (!g_settings.show_menu_hints) return; - } if (pos < 0 && !hint_painted) return; From 1d2d437547db0647cce9568b44b9313756e8cb78 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 8 Oct 2017 17:48:32 +0200 Subject: [PATCH 39/74] CTimerList: increase width of remote menu eg: With oversized font sizes the buttons inside footer are squeezed. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/6b28013da1801b7b55403391251adecc22f74c92 Author: Thilo Graf Date: 2017-10-08 (Sun, 08 Oct 2017) Origin message was: ------------------ CTimerList: increase width of remote menu eg: With oversized font sizes the buttons inside footer are squeezed. ------------------ This commit was generated by Migit --- src/gui/timerlist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 30abd3eda..a189ce33b 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -1097,7 +1097,7 @@ void CTimerList::hide() bool CTimerList::RemoteBoxSetup() { bool ret = false; - remboxmenu = new CMenuWidget(LOCALE_REMOTEBOX_HEAD, NEUTRINO_ICON_TIMER); + remboxmenu = new CMenuWidget(LOCALE_REMOTEBOX_HEAD, NEUTRINO_ICON_TIMER, 50); remboxmenu->addKey(CRCInput::RC_red, this, "del_ip"); remboxmenu->addKey(CRCInput::RC_green, this, "add_ip"); From d83169a67ece13e24fc92908e1f8bea16e979b88 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 8 Oct 2017 17:48:32 +0200 Subject: [PATCH 40/74] CTimerList: fix behavior of hide() for remotebox sub menus After hide() the the background was not fully restored or was partially damaged the corners beside the header. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/3d9b7c1360c09a0c161199bb61fcf45b61c2319e Author: Thilo Graf Date: 2017-10-08 (Sun, 08 Oct 2017) Origin message was: ------------------ CTimerList: fix behavior of hide() for remotebox sub menus After hide() the the background was not fully restored or was partially damaged the corners beside the header. ------------------ This commit was generated by Migit --- src/gui/timerlist.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index a189ce33b..1249c2e1c 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -315,6 +315,8 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) remotebox_user.forceSaveScreen(true); CKeyboardInput remotebox_pass(LOCALE_REMOTEBOX_PASS, &pass, 15); remotebox_pass.forceSaveScreen(true); + + //menu add remote box CMenuWidget * rbsetup = new CMenuWidget(LOCALE_REMOTEBOX_HEAD, NEUTRINO_ICON_TIMER); rbsetup->addItem(new CMenuForwarder(LOCALE_REMOTEBOX_RBNAME, true, rbname, &remotebox_name)); rbsetup->addItem(new CMenuForwarder(LOCALE_REMOTEBOX_RBADDR, true, rbaddress, &remotebox_address)); @@ -325,8 +327,6 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) if ((rbsetup->exec(NULL,"") == true) && (!rbaddress.empty())) { remboxmenu->addItem(new CMenuForwarder(rbname, true, NULL, this, "cha_ip")); - rbsetup->hide(); - remboxmenu->enableSaveScreen(false); remboxmenu->hide(); timer_remotebox_item timer_rb; timer_rb.rbaddress = rbaddress; @@ -377,6 +377,8 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) remotebox_user.forceSaveScreen(true); CKeyboardInput remotebox_pass(LOCALE_REMOTEBOX_PASS, &it->pass, 15); remotebox_pass.forceSaveScreen(true); + + //remote box edit CMenuWidget * rbsetup = new CMenuWidget(LOCALE_REMOTEBOX_HEAD, NEUTRINO_ICON_TIMER); rbsetup->addItem(new CMenuForwarder(LOCALE_REMOTEBOX_RBNAME, true, it->rbname, &remotebox_name)); rbsetup->addItem(new CMenuForwarder(LOCALE_REMOTEBOX_RBADDR, true, it->rbaddress, &remotebox_address)); @@ -388,8 +390,6 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) { it->port = atoi(port); f->setName(it->rbname); - rbsetup->hide(); - remboxmenu->enableSaveScreen(false); remboxmenu->hide(); changed = true; } From 6457192afd67a3d97433c4a88ff6dab75ecf8d3b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Sun, 8 Oct 2017 17:48:32 +0200 Subject: [PATCH 41/74] CUpnpBrowserGui: fix possible compile errot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit error: suggest parentheses around ‘&&’ within ‘||’ [-Werror=parentheses] Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/cbe21aade71b95e1a90cfba249f8ec5344fa3d68 Author: Thilo Graf Date: 2017-10-08 (Sun, 08 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index b06d3ce83..2d33021c7 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -869,8 +869,7 @@ bool CUpnpBrowserGui::selectItem(std::string id) m_frameBuffer->Clear(); refresh = true; } - else if (m_folderplay && (msg == (neutrino_msg_t) CRCInput::RC_prev) - || video_key_msg == CMoviePlayerGui::PLUGIN_PLAYSTATE_PREV){ + else if (m_folderplay && ((msg == (neutrino_msg_t) CRCInput::RC_prev) || video_key_msg == CMoviePlayerGui::PLUGIN_PLAYSTATE_PREV)){ timeout = 0; m_playid -= 2; if (m_playid < 0) From 17e4271b00c27114d9eb54c34958b7f674b50091 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 9 Oct 2017 12:28:22 +0200 Subject: [PATCH 42/74] upnpbrowser : fix memleak Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d3233254c882e1e815750bb0fc78bb9226b2c5a7 Author: Jacek Jendrzej Date: 2017-10-09 (Mon, 09 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 2d33021c7..0b3c753c9 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -643,6 +643,7 @@ void CUpnpBrowserGui::playnext(void) timeout = time(NULL) + g_settings.picviewer_slide_time; showPicture((*entries)[0].resources[preferred].url); } + delete entries; return; } } else { From 50ab515db94e720072d5eca5e7f6640dbde4c4aa Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 9 Oct 2017 16:36:49 +0200 Subject: [PATCH 43/74] upnpbrowser : fix memleaks Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/6d81594f1200c332ffa092505fba346de0ba0631 Author: Jacek Jendrzej Date: 2017-10-09 (Mon, 09 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 0b3c753c9..127769933 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -295,15 +295,13 @@ bool CUpnpBrowserGui::getResults(std::string id, unsigned int start, unsigned in std::vector *CUpnpBrowserGui::decodeResult(std::string result) { xmlNodePtr root, node, snode; - std::vector *entries; - xmlDocPtr parser = parseXml(result.c_str(),"UTF-8"); root = xmlDocGetRootElement(parser); if (!root) { xmlFreeDoc(parser); return NULL; } - entries = new std::vector; + std::vector *entries = new std::vector; for (node=xmlChildrenNode(root); node; node=xmlNextNode(node)) { @@ -644,9 +642,17 @@ void CUpnpBrowserGui::playnext(void) showPicture((*entries)[0].resources[preferred].url); } delete entries; + entries = NULL; return; + }else{ + delete entries; + entries = NULL; } } else { + if(entries){ + delete entries; + entries = NULL; + } neutrino_msg_t msg; neutrino_msg_data_t data; g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display @@ -658,7 +664,10 @@ void CUpnpBrowserGui::playnext(void) } } } - delete entries; + if(entries){ + delete entries; + entries = NULL; + } m_frameBuffer->Clear(); } @@ -690,9 +699,13 @@ bool CUpnpBrowserGui::getItems(std::string id, unsigned int index, std::vectorsize() || returned == 0) + if (!entries || !nfound || !tfound || !rfound || returned != entries->size() || returned == 0){ + if(entries){ + delete entries; + entries = NULL; + } return false; - + } return true; } @@ -923,6 +936,7 @@ bool CUpnpBrowserGui::selectItem(std::string id) #endif delete entries; + entries = NULL; timeout = 0; return endall; From 2379818d0c98a5873012ae9a284b3c9d894a9cb7 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 9 Oct 2017 17:23:11 +0200 Subject: [PATCH 44/74] src/gui/upnpbrowser.cpp clear framebuffer Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/47b247472c5fdf75b41e987945c19c91a8bdc8c2 Author: Jacek Jendrzej Date: 2017-10-09 (Mon, 09 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index 127769933..1a9cec034 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -553,6 +553,7 @@ void CUpnpBrowserGui::selectDevice() { m_folderplay = false; selectItem("0"); + m_frameBuffer->Clear(); refresh=true; } else if (msg == CRCInput::RC_blue) From 0b0fd7943a3d916628cb0928b92502b9baed230b Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 45/74] libdvbsub: port usefull code from Neutrino-MP to make dvbsub nice again Signed-off-by: J. Krieg Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/8bdcfb263d316ffe46065555c95e6994daffb8a5 Author: vanhofen Date: 2017-10-12 (Thu, 12 Oct 2017) Origin message was: ------------------ - libdvbsub: port usefull code from Neutrino-MP to make dvbsub nice again Signed-off-by: J. Krieg Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsub.cpp | 16 +++++++++--- lib/libdvbsub/dvbsubtitle.cpp | 47 ++++++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/lib/libdvbsub/dvbsub.cpp b/lib/libdvbsub/dvbsub.cpp index 828f09849..08e9722d6 100644 --- a/lib/libdvbsub/dvbsub.cpp +++ b/lib/libdvbsub/dvbsub.cpp @@ -103,8 +103,8 @@ int dvbsub_start(int pid) pid_change_req = 1; } } -printf("[dvb-sub] ***************************************** start, stopped %d pid %x\n", dvbsub_stopped, dvbsub_pid); #if 0 +printf("[dvb-sub] ***************************************** start, stopped %d pid %x\n", dvbsub_stopped, dvbsub_pid); while(!dvbsub_stopped) usleep(10); #endif @@ -244,11 +244,15 @@ static void* reader_thread(void * /*arg*/) int len; uint16_t packlen; uint8_t* buf; + bool bad_startcode = false; set_threadname("dvbsub:reader"); dmx = new cDemux(0); +#if HAVE_TRIPLEDRAGON + dmx->Open(DMX_PES_CHANNEL, NULL, 16*1024); +#else dmx->Open(DMX_PES_CHANNEL, NULL, 64*1024); - +#endif while (reader_running) { if(dvbsub_stopped /*dvbsub_paused*/) { sub_debug.print(Debug::VERBOSE, "%s stopped\n", __FUNCTION__); @@ -283,9 +287,13 @@ static void* reader_thread(void * /*arg*/) continue; if(memcmp(tmp, "\x00\x00\x01\xbd", 4)) { - sub_debug.print(Debug::VERBOSE, "[subtitles] bad start code: %02x%02x%02x%02x\n", tmp[0], tmp[1], tmp[2], tmp[3]); + if (!bad_startcode) { + sub_debug.print(Debug::VERBOSE, "[subtitles] bad start code: %02x%02x%02x%02x\n", tmp[0], tmp[1], tmp[2], tmp[3]); + bad_startcode = true; + } continue; } + bad_startcode = false; count = 6; packlen = getbits(tmp, 4*8, 16) + 6; @@ -372,7 +380,7 @@ static void* dvbsub_thread(void* /*arg*/) if(packet_queue.size() == 0) { continue; } - sub_debug.print(Debug::VERBOSE, "PES: Wakeup, queue size %d\n\n", packet_queue.size()); + sub_debug.print(Debug::VERBOSE, "PES: Wakeup, queue size %d\n", packet_queue.size()); if(dvbsub_stopped /*dvbsub_paused*/) { clear_queue(); continue; diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index 0dd848881..991152dbc 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -87,12 +87,16 @@ fb_pixel_t * simple_resize32(uint8_t * orgin, uint32_t * colors, int nb_colors, fb_pixel_t *cr,*l; int i,j,k,ip; +#ifndef HAVE_SPARK_HARDWARE cr = (fb_pixel_t *) malloc(dx*dy*sizeof(fb_pixel_t)); if(cr == NULL) { printf("Error: malloc\n"); return NULL; } +#else + cr = CFrameBuffer::getInstance()->getBackBufferPointer(); +#endif l = cr; for(j = 0; j < dy; j++, l += dx) @@ -111,19 +115,29 @@ fb_pixel_t * simple_resize32(uint8_t * orgin, uint32_t * colors, int nb_colors, void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) { int i; +#ifndef HAVE_SPARK_HARDWARE int stride = CFrameBuffer::getInstance()->getScreenWidth(true); +#if 0 int wd = CFrameBuffer::getInstance()->getScreenWidth(); int xstart = CFrameBuffer::getInstance()->getScreenX(); int yend = CFrameBuffer::getInstance()->getScreenY() + CFrameBuffer::getInstance()->getScreenHeight(); int ystart = CFrameBuffer::getInstance()->getScreenY(); +#endif uint32_t *sublfb = CFrameBuffer::getInstance()->getFrameBufferPointer(); +#endif +#if 0 dbgconverter("cDvbSubtitleBitmaps::Draw: %d bitmaps, x= %d, width= %d yend=%d stride %d\n", Count(), xstart, wd, yend, stride); +#endif + int sw = CFrameBuffer::getInstance()->getScreenWidth(true); + int sh = CFrameBuffer::getInstance()->getScreenHeight(true); +#if 0 double xc = (double) CFrameBuffer::getInstance()->getScreenWidth(true)/(double) 720; double yc = (double) CFrameBuffer::getInstance()->getScreenHeight(true)/(double) 576; xc = yc; //FIXME should we scale also to full width ? int xf = int(xc * (double) 720); +#endif for (i = 0; i < Count(); i++) { #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 5, 0) @@ -135,6 +149,7 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) int height = sub.rects[i]->h; int xoff, yoff; +#if 0 int nw = int(width == 1280 ? ((double) width / xc) : ((double) width * xc)); int nh = int((double) height * yc); @@ -147,14 +162,26 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) if(yoff < ystart) yoff = ystart; } +#endif + int h2 = (width == 1280) ? 720 : 576; + xoff = sub.rects[i]->x * sw / width; + yoff = sub.rects[i]->y * sh / h2; + int nw = width * sw / width; + int nh = height * sh / h2; dbgconverter("cDvbSubtitleBitmaps::Draw: #%d at %d,%d size %dx%d colors %d (x=%d y=%d w=%d h=%d) \n", i+1, sub.rects[i]->x, sub.rects[i]->y, sub.rects[i]->w, sub.rects[i]->h, sub.rects[i]->nb_colors, xoff, yoff, nw, nh); + #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 5, 0) fb_pixel_t * newdata = simple_resize32 (sub.rects[i]->pict.data[0], colors, sub.rects[i]->nb_colors, width, height, nw, nh); #else fb_pixel_t * newdata = simple_resize32 (sub.rects[i]->data[0], colors, sub.rects[i]->nb_colors, width, height, nw, nh); #endif + +#ifdef HAVE_SPARK_HARDWARE + // CFrameBuffer::getInstance()->waitForIdle(); + CFrameBuffer::getInstance()->blit2FB(newdata, nw, nh, xoff, yoff, 0, 0); +#else fb_pixel_t * ptr = newdata; for (int y2 = 0; y2 < nh; y2++) { int y = (yoff + y2) * stride; @@ -162,6 +189,7 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) *(sublfb + xoff + x2 + y) = *ptr++; } free(newdata); +#endif if(min_x > xoff) min_x = xoff; @@ -172,11 +200,13 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) if(max_y < (yoff + nh)) max_y = yoff + nh; } + if(Count()) dbgconverter("cDvbSubtitleBitmaps::Draw: finish, min/max screen: x=% d y= %d, w= %d, h= %d\n", min_x, min_y, max_x-min_x, max_y-min_y); dbgconverter("\n"); } +static int screen_w, screen_h, screen_x, screen_y; // --- cDvbSubtitleConverter ------------------------------------------------- cDvbSubtitleConverter::cDvbSubtitleConverter(void) @@ -207,10 +237,10 @@ cDvbSubtitleConverter::cDvbSubtitleConverter(void) //if(DebugConverter) // av_log_set_level(AV_LOG_INFO); - min_x = CFrameBuffer::getInstance()->getScreenWidth(); - min_y = CFrameBuffer::getInstance()->getScreenHeight(); - max_x = CFrameBuffer::getInstance()->getScreenX(); - max_y = CFrameBuffer::getInstance()->getScreenY(); + screen_w = min_x = CFrameBuffer::getInstance()->getScreenWidth(); + screen_h = min_y = CFrameBuffer::getInstance()->getScreenHeight(); + screen_x = max_x = CFrameBuffer::getInstance()->getScreenX(); + screen_y = max_y = CFrameBuffer::getInstance()->getScreenY(); Timeout.Set(0xFFFF*1000); } @@ -256,6 +286,11 @@ void cDvbSubtitleConverter::Clear(void) dbgconverter("cDvbSubtitleConverter::Clear: x=% d y= %d, w= %d, h= %d\n", min_x, min_y, max_x-min_x, max_y-min_y); if(running && (max_x-min_x > 0) && (max_y-min_y > 0)) { CFrameBuffer::getInstance()->paintBackgroundBoxRel (min_x, min_y, max_x-min_x, max_y-min_y); + /* reset area to clear */ + min_x = screen_w; + min_y = screen_h; + max_x = screen_x; + max_y = screen_h; //CFrameBuffer::getInstance()->paintBackground(); } } @@ -342,6 +377,7 @@ int cDvbSubtitleConverter::Action(void) if (Delta <= MAXDELTA) { if (Delta <= SHOW_DELTA) { + dbgconverter("cDvbSubtitleConverter::Action: PTS: %012llx STC: %012llx (%lld) timeout: %d bmp %d/%d\n", sb->Pts(), STC, Delta, sb->Timeout(), bitmaps->Count(), sb->Index() + 1); dbgconverter("cDvbSubtitleConverter::Action: Got %d bitmaps, showing #%d\n", bitmaps->Count(), sb->Index() + 1); if (running) { Clear(); @@ -356,7 +392,10 @@ int cDvbSubtitleConverter::Action(void) WaitMs = int((Delta > SHOW_DELTA) ? Delta - SHOW_DELTA : Delta); } else + { + dbgconverter("deleted because delta (%lld) > MAXDELTA (%d)\n", Delta, MAXDELTA); bitmaps->Del(sb, true); + } } else { if (Timeout.TimedOut()) { dbgconverter("cDvbSubtitleConverter::Action: timeout, elapsed %lld\n", Timeout.Elapsed()); From 13749d06c958fa639e5bf74dc360baee534915be Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 46/74] libdvbsub: allow FullHD resolution dimensions Signed-off-by: J. Krieg Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/5ba719402a6ebeffb2c082473f66efe72f3fc2a5 Author: vanhofen Date: 2017-10-12 (Thu, 12 Oct 2017) Origin message was: ------------------ - libdvbsub: allow FullHD resolution dimensions Signed-off-by: J. Krieg Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsubtitle.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index 991152dbc..ca60b15f4 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -163,7 +163,12 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) yoff = ystart; } #endif - int h2 = (width == 1280) ? 720 : 576; + int h2 = 576; + switch (width) + { + case 1280: h2 = 720; break; + case 1920: h2 = 1080; break; + } xoff = sub.rects[i]->x * sw / width; yoff = sub.rects[i]->y * sh / h2; int nw = width * sw / width; From 4a9cd8b0c909f2b71d6fd4b7d27c674de89073fe Mon Sep 17 00:00:00 2001 From: gixxpunk Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 47/74] cleanup dvbsubtitle code Signed-off-by: J. Krieg Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/18699eaf411400c91d1ad1a73ed7b1bfd15e46b1 Author: gixxpunk Date: 2017-10-12 (Thu, 12 Oct 2017) Origin message was: ------------------ - cleanup dvbsubtitle code Signed-off-by: J. Krieg Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsub.cpp | 27 ++----------------- lib/libdvbsub/dvbsubtitle.cpp | 50 +---------------------------------- 2 files changed, 3 insertions(+), 74 deletions(-) diff --git a/lib/libdvbsub/dvbsub.cpp b/lib/libdvbsub/dvbsub.cpp index 08e9722d6..7081e5ca0 100644 --- a/lib/libdvbsub/dvbsub.cpp +++ b/lib/libdvbsub/dvbsub.cpp @@ -103,11 +103,7 @@ int dvbsub_start(int pid) pid_change_req = 1; } } -#if 0 -printf("[dvb-sub] ***************************************** start, stopped %d pid %x\n", dvbsub_stopped, dvbsub_pid); - while(!dvbsub_stopped) - usleep(10); -#endif + if(dvbsub_pid > 0) { dvbsub_stopped = 0; dvbsub_paused = false; @@ -248,11 +244,8 @@ static void* reader_thread(void * /*arg*/) set_threadname("dvbsub:reader"); dmx = new cDemux(0); -#if HAVE_TRIPLEDRAGON - dmx->Open(DMX_PES_CHANNEL, NULL, 16*1024); -#else dmx->Open(DMX_PES_CHANNEL, NULL, 64*1024); -#endif + while (reader_running) { if(dvbsub_stopped /*dvbsub_paused*/) { sub_debug.print(Debug::VERBOSE, "%s stopped\n", __FUNCTION__); @@ -310,17 +303,6 @@ static void* reader_thread(void * /*arg*/) count += len; } } -#if 0 - for(int i = 6; i < packlen - 4; i++) { - if(!memcmp(&buf[i], "\x00\x00\x01\xbd", 4)) { - int plen = getbits(&buf[i], 4*8, 16) + 6; - sub_debug.print(Debug::VERBOSE, "[subtitles] ******************* PES header at %d ?! *******************\n", i); - sub_debug.print(Debug::VERBOSE, "[subtitles] start code: %02x%02x%02x%02x len %d\n", buf[i+0], buf[i+1], buf[i+2], buf[i+3], plen); - free(buf); - continue; - } - } -#endif if(!dvbsub_stopped /*!dvbsub_paused*/) { sub_debug.print(Debug::VERBOSE, "[subtitles] *** new packet, len %d buf 0x%x pts-stc diff %lld ***\n", count, buf, get_pts_stc_delta(get_pts(buf))); @@ -400,11 +382,6 @@ static void* dvbsub_thread(void* /*arg*/) dataoffset = packet[8] + 8 + 1; if (packet[dataoffset] != 0x20) { sub_debug.print(Debug::VERBOSE, "Not a dvb subtitle packet, discard it (len %d)\n", packlen); -#if 0 - for(int i = 0; i < packlen; i++) - printf("%02X ", packet[i]); - printf("\n"); -#endif goto next_round; } diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index ca60b15f4..bd0d091a2 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -36,8 +36,6 @@ static bool DebugConverter = true; #define dbgconverter(a...) if (DebugConverter) sub_debug.print(Debug::VERBOSE, a) -// --- cDvbSubtitleBitmaps --------------------------------------------------- - class cDvbSubtitleBitmaps : public cListObject { private: @@ -87,16 +85,12 @@ fb_pixel_t * simple_resize32(uint8_t * orgin, uint32_t * colors, int nb_colors, fb_pixel_t *cr,*l; int i,j,k,ip; -#ifndef HAVE_SPARK_HARDWARE cr = (fb_pixel_t *) malloc(dx*dy*sizeof(fb_pixel_t)); if(cr == NULL) { printf("Error: malloc\n"); return NULL; } -#else - cr = CFrameBuffer::getInstance()->getBackBufferPointer(); -#endif l = cr; for(j = 0; j < dy; j++, l += dx) @@ -115,29 +109,10 @@ fb_pixel_t * simple_resize32(uint8_t * orgin, uint32_t * colors, int nb_colors, void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) { int i; -#ifndef HAVE_SPARK_HARDWARE int stride = CFrameBuffer::getInstance()->getScreenWidth(true); -#if 0 - int wd = CFrameBuffer::getInstance()->getScreenWidth(); - int xstart = CFrameBuffer::getInstance()->getScreenX(); - int yend = CFrameBuffer::getInstance()->getScreenY() + CFrameBuffer::getInstance()->getScreenHeight(); - int ystart = CFrameBuffer::getInstance()->getScreenY(); -#endif uint32_t *sublfb = CFrameBuffer::getInstance()->getFrameBufferPointer(); -#endif - -#if 0 - dbgconverter("cDvbSubtitleBitmaps::Draw: %d bitmaps, x= %d, width= %d yend=%d stride %d\n", Count(), xstart, wd, yend, stride); -#endif - int sw = CFrameBuffer::getInstance()->getScreenWidth(true); int sh = CFrameBuffer::getInstance()->getScreenHeight(true); -#if 0 - double xc = (double) CFrameBuffer::getInstance()->getScreenWidth(true)/(double) 720; - double yc = (double) CFrameBuffer::getInstance()->getScreenHeight(true)/(double) 576; - xc = yc; //FIXME should we scale also to full width ? - int xf = int(xc * (double) 720); -#endif for (i = 0; i < Count(); i++) { #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 5, 0) @@ -149,26 +124,13 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) int height = sub.rects[i]->h; int xoff, yoff; -#if 0 - int nw = int(width == 1280 ? ((double) width / xc) : ((double) width * xc)); - int nh = int((double) height * yc); - - int xdiff = (wd > xf) ? ((wd - xf) / 2) : 0; - xoff = int(sub.rects[i]->x*xc + xstart + xdiff); - if(sub.rects[i]->y < 576/2) { - yoff = int(ystart + sub.rects[i]->y*yc); - } else { - yoff = int(yend - ((width == 1280 ? 704:576) - (double) (sub.rects[i]->y + height))*yc - nh); - if(yoff < ystart) - yoff = ystart; - } -#endif int h2 = 576; switch (width) { case 1280: h2 = 720; break; case 1920: h2 = 1080; break; } + xoff = sub.rects[i]->x * sw / width; yoff = sub.rects[i]->y * sh / h2; int nw = width * sw / width; @@ -183,10 +145,6 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) fb_pixel_t * newdata = simple_resize32 (sub.rects[i]->data[0], colors, sub.rects[i]->nb_colors, width, height, nw, nh); #endif -#ifdef HAVE_SPARK_HARDWARE - // CFrameBuffer::getInstance()->waitForIdle(); - CFrameBuffer::getInstance()->blit2FB(newdata, nw, nh, xoff, yoff, 0, 0); -#else fb_pixel_t * ptr = newdata; for (int y2 = 0; y2 < nh; y2++) { int y = (yoff + y2) * stride; @@ -194,7 +152,6 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) *(sublfb + xoff + x2 + y) = *ptr++; } free(newdata); -#endif if(min_x > xoff) min_x = xoff; @@ -212,7 +169,6 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) } static int screen_w, screen_h, screen_x, screen_y; -// --- cDvbSubtitleConverter ------------------------------------------------- cDvbSubtitleConverter::cDvbSubtitleConverter(void) { @@ -279,9 +235,7 @@ void cDvbSubtitleConverter::Pause(bool pause) Clear(); running = false; Unlock(); - //Reset(); } else { - //Reset(); running = true; } } @@ -296,7 +250,6 @@ void cDvbSubtitleConverter::Clear(void) min_y = screen_h; max_x = screen_x; max_y = screen_h; - //CFrameBuffer::getInstance()->paintBackground(); } } @@ -330,7 +283,6 @@ int cDvbSubtitleConverter::Convert(const uchar *Data, int Length, int64_t pts) avpkt.size = Length; dbgconverter("cDvbSubtitleConverter::Convert: sub %x pkt %x pts %lld\n", sub, &avpkt, pts); - //avctx->sub_id = (anc_page << 16) | comp_page; //FIXME not patched ffmpeg needs this ! avcodec_decode_subtitle2(avctx, sub, &got_subtitle, &avpkt); dbgconverter("cDvbSubtitleConverter::Convert: pts %lld subs ? %s, %d bitmaps\n", pts, got_subtitle? "yes" : "no", sub->num_rects); From 0023d793c85f1357347423d1cd5380f3c7928867 Mon Sep 17 00:00:00 2001 From: gixxpunk Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 48/74] dvbsubtitle: fix copy/paste error and only show debug if there is something to clear Signed-off-by: J. Krieg Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/3edc365eab89133b386c796e9b9adae82cc764b7 Author: gixxpunk Date: 2017-10-12 (Thu, 12 Oct 2017) Origin message was: ------------------ - dvbsubtitle: fix copy/paste error and only show debug if there is something to clear Signed-off-by: J. Krieg Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsubtitle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index bd0d091a2..43020b0dd 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -242,14 +242,14 @@ void cDvbSubtitleConverter::Pause(bool pause) void cDvbSubtitleConverter::Clear(void) { - dbgconverter("cDvbSubtitleConverter::Clear: x=% d y= %d, w= %d, h= %d\n", min_x, min_y, max_x-min_x, max_y-min_y); if(running && (max_x-min_x > 0) && (max_y-min_y > 0)) { + dbgconverter("cDvbSubtitleConverter::Clear: x=% d y= %d, w= %d, h= %d\n", min_x, min_y, max_x-min_x, max_y-min_y); CFrameBuffer::getInstance()->paintBackgroundBoxRel (min_x, min_y, max_x-min_x, max_y-min_y); /* reset area to clear */ min_x = screen_w; min_y = screen_h; max_x = screen_x; - max_y = screen_h; + max_y = screen_y; } } From 50735d255b7e3e79e01dfba09e727c2d4fd71653 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 49/74] libdvbsub: use framebuffer functions getBackBufferPointer() and blit2FB() Signed-off-by: J. Krieg Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/fa0400f8b21565157b019d87ee24e426b19873ed Author: vanhofen Date: 2017-10-12 (Thu, 12 Oct 2017) Origin message was: ------------------ - libdvbsub: use framebuffer functions getBackBufferPointer() and blit2FB() Signed-off-by: J. Krieg Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsubtitle.cpp | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index 43020b0dd..897f9fc49 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -85,12 +85,7 @@ fb_pixel_t * simple_resize32(uint8_t * orgin, uint32_t * colors, int nb_colors, fb_pixel_t *cr,*l; int i,j,k,ip; - cr = (fb_pixel_t *) malloc(dx*dy*sizeof(fb_pixel_t)); - - if(cr == NULL) { - printf("Error: malloc\n"); - return NULL; - } + cr = CFrameBuffer::getInstance()->getBackBufferPointer(); l = cr; for(j = 0; j < dy; j++, l += dx) @@ -109,8 +104,6 @@ fb_pixel_t * simple_resize32(uint8_t * orgin, uint32_t * colors, int nb_colors, void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) { int i; - int stride = CFrameBuffer::getInstance()->getScreenWidth(true); - uint32_t *sublfb = CFrameBuffer::getInstance()->getFrameBufferPointer(); int sw = CFrameBuffer::getInstance()->getScreenWidth(true); int sh = CFrameBuffer::getInstance()->getScreenHeight(true); @@ -145,13 +138,7 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) fb_pixel_t * newdata = simple_resize32 (sub.rects[i]->data[0], colors, sub.rects[i]->nb_colors, width, height, nw, nh); #endif - fb_pixel_t * ptr = newdata; - for (int y2 = 0; y2 < nh; y2++) { - int y = (yoff + y2) * stride; - for (int x2 = 0; x2 < nw; x2++) - *(sublfb + xoff + x2 + y) = *ptr++; - } - free(newdata); + CFrameBuffer::getInstance()->blit2FB(newdata, nw, nh, xoff, yoff, 0, 0); if(min_x > xoff) min_x = xoff; @@ -217,12 +204,12 @@ cDvbSubtitleConverter::~cDvbSubtitleConverter() void cDvbSubtitleConverter::Lock(void) { - pthread_mutex_lock(&mutex); + pthread_mutex_lock(&mutex); } void cDvbSubtitleConverter::Unlock(void) { - pthread_mutex_unlock(&mutex); + pthread_mutex_unlock(&mutex); } void cDvbSubtitleConverter::Pause(bool pause) From 3da19efe982bdf97e7d566aa4df986bd70adc14a Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 50/74] libdvbsub: add missing free() call Signed-off-by: J. Krieg Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/89f9ae85f07ffc900a0698be718e4e635db282f4 Author: vanhofen Date: 2017-10-12 (Thu, 12 Oct 2017) Origin message was: ------------------ - libdvbsub: add missing free() call Signed-off-by: J. Krieg Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsubtitle.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index 897f9fc49..5ec75dded 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -139,6 +139,7 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) #endif CFrameBuffer::getInstance()->blit2FB(newdata, nw, nh, xoff, yoff, 0, 0); + free(newdata); if(min_x > xoff) min_x = xoff; From 804ee7b9484aeb330fa9010cd41be67759868a25 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 51/74] CTimerList: localize info and send timer buttons Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c1d4da731b1aa748bc237860fd361823faf7500c Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/locale/deutsch.locale | 2 ++ data/locale/english.locale | 2 ++ src/gui/timerlist.cpp | 4 ++-- src/system/locals.h | 2 ++ src/system/locals_intern.h | 2 ++ 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 3888f0dee..b3cb599a6 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2321,6 +2321,7 @@ timerlist.bouquetselect Bouquet wählen timerlist.channel Kanal timerlist.channelselect Kanal wählen timerlist.delete Löschen +timerlist.info Info timerlist.menumodify Timer bearbeiten timerlist.menunew Neuer Timer timerlist.message Nachricht @@ -2356,6 +2357,7 @@ timerlist.repeatcount Wiederholungen timerlist.repeatcount.hint_1 Anzahl der Timerausführungen timerlist.repeatcount.hint_2 0 für unbegrenzte Anzahl timerlist.save Timer speichern +timerlist.send.timer Sende Timer timerlist.standby Aktion timerlist.standby.off Aufwachen aus Standby timerlist.standby.on In Standby gehen diff --git a/data/locale/english.locale b/data/locale/english.locale index 17159bacd..2d267ff64 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2321,6 +2321,7 @@ timerlist.bouquetselect choose bouquet timerlist.channel Channel timerlist.channelselect choose channel timerlist.delete Delete +timerlist.info Info timerlist.menumodify Modify timer timerlist.menunew New timer timerlist.message Message @@ -2356,6 +2357,7 @@ timerlist.repeatcount repeats timerlist.repeatcount.hint_1 Amount of timer repeats timerlist.repeatcount.hint_2 0 for unlimited repeats timerlist.save Save timer +timerlist.send.timer Send Timer timerlist.standby Action timerlist.standby.off Leave standby timerlist.standby.on Enter standby diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index 1249c2e1c..aca24ed3f 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -657,8 +657,8 @@ struct button_label TimerListButtons[] = { NEUTRINO_ICON_BUTTON_GREEN , LOCALE_TIMERLIST_NEW }, { NEUTRINO_ICON_BUTTON_YELLOW , LOCALE_TIMERLIST_RELOAD }, { NEUTRINO_ICON_BUTTON_BLUE , LOCALE_TIMERLIST_MODIFY }, - { NEUTRINO_ICON_BUTTON_INFO_SMALL, NONEXISTANT_LOCALE }, - { NEUTRINO_ICON_BUTTON_PLAY , NONEXISTANT_LOCALE } + { NEUTRINO_ICON_BUTTON_INFO_SMALL, LOCALE_TIMERLIST_INFO }, + { NEUTRINO_ICON_BUTTON_PLAY , LOCALE_TIMERLIST_SEND_TIMER } }; size_t TimerListButtonsCount = sizeof(TimerListButtons)/sizeof(TimerListButtons[0]); diff --git a/src/system/locals.h b/src/system/locals.h index 60ed0d9a4..c5b6243d2 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -2348,6 +2348,7 @@ typedef enum LOCALE_TIMERLIST_CHANNEL, LOCALE_TIMERLIST_CHANNELSELECT, LOCALE_TIMERLIST_DELETE, + LOCALE_TIMERLIST_INFO, LOCALE_TIMERLIST_MENUMODIFY, LOCALE_TIMERLIST_MENUNEW, LOCALE_TIMERLIST_MESSAGE, @@ -2383,6 +2384,7 @@ typedef enum LOCALE_TIMERLIST_REPEATCOUNT_HINT_1, LOCALE_TIMERLIST_REPEATCOUNT_HINT_2, LOCALE_TIMERLIST_SAVE, + LOCALE_TIMERLIST_SEND_TIMER, LOCALE_TIMERLIST_STANDBY, LOCALE_TIMERLIST_STANDBY_OFF, LOCALE_TIMERLIST_STANDBY_ON, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index fdd72cdb9..a764dd1f5 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -2348,6 +2348,7 @@ const char * locale_real_names[] = "timerlist.channel", "timerlist.channelselect", "timerlist.delete", + "timerlist.info", "timerlist.menumodify", "timerlist.menunew", "timerlist.message", @@ -2383,6 +2384,7 @@ const char * locale_real_names[] = "timerlist.repeatcount.hint_1", "timerlist.repeatcount.hint_2", "timerlist.save", + "timerlist.send.timer", "timerlist.standby", "timerlist.standby.off", "timerlist.standby.on", From d361165f994b3cc9a50e2cd0f8ae15e057681503 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 52/74] CMenuWidget: don't use parameter for label width calculation Footer object does this itself. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/35f048a735910010362f0ecdbd5282a531e219b7 Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/widget/menue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 3b71a6490..12f2bd6e1 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -1553,7 +1553,7 @@ void CMenuWidget::setFooter(const struct button_label *_fbutton_labels, const in if (!footer) footer = new CComponentsFooter(x, y + height, width + scrollbar_width, 0, 0, NULL, CC_SHADOW_ON); footer->setWidth(width + scrollbar_width); - footer->setButtonLabels(fbutton_labels, fbutton_count, 0, width/fbutton_count); + footer->setButtonLabels(fbutton_labels, fbutton_count); footer_height = footer->getHeight(); footer_width = footer->getWidth(); }else{ From 06d5ab362f9ea943dc7b4cc25642701ab5390402 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 53/74] Revert "CTimerList: adjust label width in footer dependent by count of buttons" This reverts commit ec598a94b5acfa801005d4281667cbe13fa54adb. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/88e488d3a0e78b7d20c1a037c8cb82776089ee95 Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/timerlist.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index aca24ed3f..89b5d735b 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -1411,9 +1411,9 @@ void CTimerList::paintFoot() footer.enableShadow(CC_SHADOW_ON, -1, true); if (timerlist.empty()) - footer.paintButtons(x, y + height - OFFSET_SHADOW - footer_height, width, footer_height, 2, &(TimerListButtons[1]), width/(2+1)); + footer.paintButtons(x, y + height - OFFSET_SHADOW - footer_height, width, footer_height, 2, &(TimerListButtons[1])); else - footer.paintButtons(x, y + height - OFFSET_SHADOW - footer_height, width, footer_height, c, TimerListButtons, width/(c-1)); + footer.paintButtons(x, y + height - OFFSET_SHADOW - footer_height, width, footer_height, c, TimerListButtons); } void CTimerList::paint() From 0bd8d99da0524c1c9ccce4ad51d31988e6b0434b Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 54/74] CComponentsFooter: rework uniformed arrangement Some parts were incomplete treated with defined parameter 'label_width' and/or 'chain_width'. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c7a2dd70fc0b504ebd930997933a882e9be557f3 Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/components/cc_frm_footer.cpp | 213 ++++++++++++++++----------- src/gui/test_menu.cpp | 2 +- 2 files changed, 128 insertions(+), 87 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index e7e9da36e..00cdf49df 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -89,7 +89,7 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const cc_body_gradient_enable = cc_body_gradient_enable_old = CC_COLGRAD_OFF/*g_settings.theme.menu_ButtonBar_gradient*/; //TODO: not complete implemented at the moment cc_body_gradient_direction = CFrameBuffer::gradientVertical; cc_body_gradient_mode = CColorGradient::gradientDark2Light; - btn_auto_frame_col = false; + btn_auto_frame_col = false; //TODO: currently global disabled corner_rad = RADIUS_LARGE; corner_type = CORNER_BOTTOM; @@ -106,103 +106,132 @@ void CComponentsFooter::initVarFooter( const int& x_pos, const int& y_pos, const void CComponentsFooter::setButtonLabels(const struct button_label_cc * const content, const size_t& label_count, const int& chain_width, const int& label_width) { - /* clean up before init*/ + /* clean up before init */ if (btn_container) btn_container->clear(); if (label_count == 0) return; - /* set general available full basic space for button chain, - * in this case this is footer width - */ - int w_chain = width - 2*cch_offset; + /* global increments */ + size_t i = 0; + size_t l_count = label_count; - /* calculate current available space for button container depends - * of already enbedded footer objects. - * If already existing some items then subtract those width from footer width. - * ...so we have the possible usable size for button container. + /* + * Evaluate parameter 'chain_width': + * + * Set usable basic space for button container, + * Default width this is footer width minus offset left and right of button container (btn_container). + */ + int w_container = max(0, width - 2*cch_offset); + /* + * Calculate current available space for button container depends of already embedded footer objects. + * If already existing some items then subtract those width from footer width. + * ...so we have the maximal possible usable size for button container. */ if(!v_cc_items.empty()){ - for (size_t j= 0; j< size(); j++) - w_chain -= getCCItem(j)->getWidth(); + for (i = 0; i< size(); i++){ + if (getCCItem(i) != btn_container) // avoid to point on button container itself! + w_container -= getCCItem(i)->getWidth(); + } + w_container = max(0, w_container); } - - /* On defined parameter chain_width - * calculate current available space for button container depends - * of passed chain with parameter - * Consider that chain_width is not too large. + /* + * On defined parameter chain_width (means width of button container), + * compare and if required recalculate current available space for button container depends of passed chain with parameter. + * Consider that chain_width is not too large. In this case parameter chain_width will be ignored. */ - if (chain_width > 0 && chain_width <= w_chain){ - if (chain_width <= w_chain){ - w_chain = chain_width; + if (chain_width){ + if (chain_width <= w_container){ + w_container = chain_width; + }else{ + dprintf(DEBUG_NORMAL, "\033[33m[CComponentsFooter]\t[%s - %d], NOTE: parameter chain_width is too large, defined value = %d, fallback to maximal value = %d => \033[0m\n", + __func__, __LINE__, chain_width, w_container); } } - /* initialize button container (chain object): this contains all passed (as interleaved) button label items, - * With this container we can work inside footer as primary container (in this context '=this') and the parent for the button label container (chain object). - * Button label container (chain object) itself is concurrent to the parent object for button objects. + /* + * Evaluate parameter 'label_width': + * + * button label width is auto generated, if no label width is defined. + * If is parameter label_width too large, we use maximal possible value. + */ + int w_tmp = w_container - cch_offset * ((int)l_count-1); + int w_btn = w_tmp / (int)l_count; + if (label_width && (label_width <= w_btn)) + w_btn = label_width; + w_container = min(w_container, (w_btn * (int)l_count) + cch_offset * ((int)l_count-1)); + + /* + * Initialize button container: this object contains all passed button label items, + * Button container represents the parent for button labels and is working as single child object inside footer. */ int dist = height/2-cch_offset; - int h_chain = ccf_btn_font->getHeight() > height+dist ? height-dist : ccf_btn_font->getHeight()+dist; - int x_chain = width/2 - w_chain/2; - int y_chain = height/2 - h_chain/2; + int h_container = ccf_btn_font->getHeight() > height+dist ? height-dist : ccf_btn_font->getHeight()+dist; + int x_container = width/2 - w_container/2; //FIXME: only centered position, other items will be overpainted + int y_container = height/2 - h_container/2; if (cch_icon_obj) - x_chain = cch_offset+cch_icon_obj->getWidth()+cch_offset; + x_container = cch_offset+cch_icon_obj->getWidth()+cch_offset; if (btn_container == NULL){ - btn_container = new CComponentsFrmChain(x_chain, y_chain, w_chain, h_chain, 0, CC_DIR_X, this, CC_SHADOW_OFF, COL_MENUCONTENT_PLUS_6, col_body); + btn_container = new CComponentsFrmChain(x_container, y_container, w_container, h_container, 0, CC_DIR_X, this, CC_SHADOW_OFF, COL_MENUCONTENT_PLUS_6, col_body); btn_container->setAppendOffset(0, 0); - btn_container->setCorner(this->corner_rad, this->corner_type); + //btn_container->setCorner(this->corner_rad, this->corner_type); btn_container->doPaintBg(false); } - /* Calculate usable width of button labels inside button object container - * related to available width of chain object and passed - * label_width parameter. - * Parameter is used as minimal value and will be reduced - * if it is too large. - * Too small label_width parameter will be compensated by - * button objects itself. + /* + * Reassign current available container width after initialized button labels. */ - int w_offset = int((label_count-1)*cch_offset); - int w_btn = btn_container->getWidth()/label_count - w_offset; - if (label_width){ - int w_label = label_width; - int w_defined = int(label_width*label_count); - int w_max = btn_container->getWidth() - w_offset; - while (w_defined > w_max){ - w_label--; - w_defined = int(w_label*label_count) - w_offset; - } - w_btn = w_label; - } + w_container = btn_container->getWidth(); - /* generate button objects passed from button label content - * with default width to chain object. + /* + * Primary x postion of buttons inside button container is fix, + * height and y position of button labels are calculated by button container + * dimensions and have a fix value. */ - vector v_btns; - int h_btn = /*(ccf_enable_button_bg ? */btn_container->getHeight()-2*fr_thickness/*-OFFSET_INNER_SMALL*//* : height)*/-ccf_button_shadow_width; - for (size_t i= 0; i< label_count; i++){ + int x_btn = 0; + int h_btn = btn_container->getHeight()- 2*fr_thickness - ccf_button_shadow_width; + int y_btn = btn_container->getHeight()/2 - h_btn/2; + + /* + * Init button label objects + */ + for (i = 0; i < l_count; i++){ + /* + * init button label face values + */ string txt = content[i].locale == NONEXISTANT_LOCALE ? content[i].text : g_Locale->getText(content[i].locale); string icon_name = string(content[i].button); - //ignore item, if no text and icon are defined; + /* + * Ignore item, if no text and no icon is defined. + */ if (txt.empty() && icon_name.empty()){ - dprintf(DEBUG_INFO, "[CComponentsFooter] [%s - %d] ignore item [%d], no icon and text defined!\n", __func__, __LINE__, i); + //l_count -= 1; + dprintf(DEBUG_NORMAL, "[CComponentsFooter]\t[%s - %d]\tignore item [%d], no icon and text defined!\n", __func__, __LINE__, i); continue; } - int y_btn = btn_container->getHeight()/2 - h_btn/2; - dprintf(DEBUG_INFO, "[CComponentsFooter] [%s - %d] y_btn [%d] ccf_button_shadow_width [%d]\n", __func__, __LINE__, y_btn, ccf_button_shadow_width); - CComponentsButton *btn = new CComponentsButton(0, y_btn, w_btn, h_btn, txt, icon_name, NULL, false, true, ccf_enable_button_shadow); - + /* + * Create all button label objects and add to button container + * Set properties, like position, font, key values, coler etc... + */ + CComponentsButton *btn = new CComponentsButton(x_btn, y_btn, w_btn, h_btn, txt, icon_name, btn_container, false, true, ccf_enable_button_shadow); + btn->setButtonFont(ccf_btn_font); btn->doPaintBg(ccf_enable_button_bg); + + x_btn += btn_container->getCCItem(i)->getWidth(); + x_btn += cch_offset; + btn->setButtonDirectKeys(content[i].directKeys); btn->setButtonResult(content[i].btn_result); btn->setButtonAlias(content[i].btn_alias); - btn->setButtonFont(ccf_btn_font); - //set button frames to icon color, predefined for available color buttons + btn->doPaintBg(true); + + /* + * Set button frames to icon color, predefined for available color buttons + */ if (btn_auto_frame_col){ fb_pixel_t f_col = btn->getColorFrame(); if (icon_name == NEUTRINO_ICON_BUTTON_RED) @@ -215,35 +244,47 @@ void CComponentsFooter::setButtonLabels(const struct button_label_cc * const con f_col = COL_DARK_BLUE; btn->setColorFrame(f_col); } - - v_btns.push_back(btn); - - if (w_btn < btn->getWidth()){ - btn->setWidth(w_btn); - btn->setButtonFont(NULL); - } - - dprintf(DEBUG_INFO, "[CComponentsFooter] [%s - %d] button %s [%u] btn->getWidth() = %d w_btn = %d, (chain->getWidth() = %d)\n", __func__, __LINE__, txt.c_str(), (uint32_t)i, btn->getWidth(), w_btn, btn_container->getWidth()); } - /* add generated button objects to chain object. + /* + * Get the current required space for button labels after adding of all buttons. + * This is required to check possible changed dimensions after init and + * could be required if user has changed settings like font scale, font size or similar setting while runtime or + * reserved size of footer is too small. It is recommended to allocate enough space from the outset. */ - if (!v_btns.empty()){ - /*add all buttons into button container*/ - btn_container->addCCItem(v_btns); + int w_cont_used = 0; + size_t c_btns = btn_container->size(); + for (i = 0; i < c_btns; i++){ + w_cont_used += btn_container->getCCItem(i)->getWidth(); + } + w_cont_used += cch_offset * (l_count -1); + + if (w_cont_used > w_container){ + /* + * recalculate width of labels + */ + int w_used_tmp = w_cont_used; + int w_btn_tmp = w_btn; + if (w_used_tmp >= w_container){ + //w_btn_tmp = w_btn; + for (i = 0; i < c_btns; i++){ + w_btn_tmp -= c_btns; + btn_container->getCCItem(i)->setWidth(w_btn_tmp); // value = 0 forces recalculation, refresh is required + static_cast(btn_container->getCCItem(i))->Refresh(); + w_used_tmp -= max(0, btn_container->getCCItem(i)->getWidth()); + dprintf(DEBUG_NORMAL, "\033[33m[CComponentsFooter]\t[%s - %d] item %d -> w_used_tmp [%d] :: w_btn_tmp [%d] w_container = %d\033[0m\n", __func__, __LINE__, (int)i, w_used_tmp, w_btn_tmp, w_container); + } + } - /* set position of labels, as centered inside button container*/ - int w_chain_used = 0; - for (size_t a= 0; a< btn_container->size(); a++) - w_chain_used += btn_container->getCCItem(a)->getWidth(); - w_chain_used += (btn_container->size()-1)*cch_offset; - - int x_btn = btn_container->getWidth()/2 - w_chain_used/2; - btn_container->getCCItem(0)->setXPos(x_btn); - - for (size_t c= 1; c< btn_container->size(); c++){ - x_btn += btn_container->getCCItem(c-1)->getWidth()+ cch_offset; - btn_container->getCCItem(c)->setXPos(x_btn); + /* + * Trim position of labels, after possible changed width of button labels + */ + x_btn = 0; + btn_container->front()->setXPos(x_btn); + for (i = 1; i < c_btns; i++){ + x_btn += btn_container->getCCItem(i-1)->getWidth() + cch_offset;; + if (i < c_btns) + btn_container->getCCItem(i)->setXPos(x_btn); } } } diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index 790e18a8b..d777e095c 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -656,7 +656,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) footer->setIcon(NEUTRINO_ICON_INFO); //add button labels with conventional button label struct - footer->setButtonLabels(TestButtons, TestButtonsCount, 0, footer->getWidth()/TestButtonsCount); + footer->setButtonLabels(TestButtons, TestButtonsCount, 1000, footer->getWidth()/TestButtonsCount); //also possible: use directly button name and as 2nd parameter string or locale as text // footer->setButtonLabel(NULL, "Test", 0, 250); From 52fed62f51cecff8332681ea024ff5276f342624 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 55/74] bedit: remove multiple forward declaration of CFrameBuffer I don't see any sense why this should be done here. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/97a124ab44dbabef24aee3b443bbd24fe34b241b Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_globals.cpp | 1 - src/gui/bedit/bouqueteditor_globals.h | 1 - 2 files changed, 2 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index 62f51c1d9..3e8a9c14c 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -30,7 +30,6 @@ #include "bouqueteditor_globals.h" -class CFrameBuffer; CBEGlobals::CBEGlobals() { diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index ea02ea8d1..3e5b665e8 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -25,7 +25,6 @@ #include #include -class CFrameBuffer; class CBEGlobals { From 5d4a7aad159b91ba2b35ff9eba6d68789a0b8ffd Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 56/74] bedit: use inherited version of paintDetails() and dline/ibox objects This moves full identicaly code into base class. TODO: There are more similar parts. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/3045baea1300a17cca594ddd1ba157cc652a3c74 Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.h | 1 + src/gui/bedit/bouqueteditor_channels.cpp | 53 +--------------------- src/gui/bedit/bouqueteditor_channels.h | 5 +- src/gui/bedit/bouqueteditor_chanselect.cpp | 52 --------------------- src/gui/bedit/bouqueteditor_chanselect.h | 5 +- src/gui/bedit/bouqueteditor_globals.cpp | 51 +++++++++++++++++++++ src/gui/bedit/bouqueteditor_globals.h | 9 +++- 7 files changed, 63 insertions(+), 113 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.h b/src/gui/bedit/bouqueteditor_bouquets.h index 9aa27dc2c..439ae1d7b 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.h +++ b/src/gui/bedit/bouqueteditor_bouquets.h @@ -85,6 +85,7 @@ class CBEBouquetWidget : public CBEGlobals, public CMenuTarget, public CListHelp void discardChanges(); std::string inputName(const char* const defaultName, const neutrino_locale_t caption); + std::string getInfoText(int /*index*/){}; public: CBEBouquetWidget(); diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index ac5a260cd..3bbb3c706 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -55,8 +55,7 @@ CBEChannelWidget::CBEChannelWidget(const std::string & Caption, unsigned int Bou caption = Caption; bouquet = Bouquet; mode = CZapitClient::MODE_TV; - dline = NULL; - ibox = NULL; + Channels = NULL; int iw, ih; @@ -76,8 +75,6 @@ CBEChannelWidget::CBEChannelWidget(const std::string & Caption, unsigned int Bou CBEChannelWidget::~CBEChannelWidget() { - delete dline; - delete ibox; } void CBEChannelWidget::paintItem(int pos) @@ -178,54 +175,6 @@ void CBEChannelWidget::paintFoot() footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEChannelWidgetButtons); } -void CBEChannelWidget::paintDetails(int pos, int current) -{ - int xpos = x - DETAILSLINE_WIDTH; - int ypos1 = y + header_height + pos*item_height; - int ypos2 = y + height - info_height - OFFSET_SHADOW; - int ypos1a = ypos1 + (item_height/2); - int ypos2a = ypos2 + (info_height/2); - - if (dline) - dline->kill(); - - if (pos >= 0) - { - if (dline == NULL) - dline = new CComponentsDetailsLine(); - - if (dline) - { - dline->setDimensionsAll(xpos, ypos1a, ypos2a, item_height/2, info_height - RADIUS_LARGE*2); - dline->paint(CC_SAVE_SCREEN_NO); - } - - if (ibox == NULL) - { - ibox = new CComponentsInfoBox(); - - if (ibox) - { - ibox->setColorBody(COL_MENUCONTENTDARK_PLUS_0); - ibox->setTextColor(COL_MENUCONTENTDARK_TEXT); - ibox->setFrameThickness(FRAME_WIDTH_MIN); - ibox->setCorner(RADIUS_LARGE); - ibox->enableShadow(CC_SHADOW_ON); - } - } - - if (ibox) - { - if (ibox->isPainted()) - ibox->hide(); - - ibox->setDimensionsAll(x, ypos2, width, info_height); - ibox->setText(getInfoText(current), CTextBox::AUTO_WIDTH | CTextBox::NO_AUTO_LINEBREAK, info_font); - ibox->paint(CC_SAVE_SCREEN_NO); - } - } -} - void CBEChannelWidget::hide() { frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); diff --git a/src/gui/bedit/bouqueteditor_channels.h b/src/gui/bedit/bouqueteditor_channels.h index e8a9b521c..73f5512aa 100644 --- a/src/gui/bedit/bouqueteditor_channels.h +++ b/src/gui/bedit/bouqueteditor_channels.h @@ -38,9 +38,6 @@ class CBEChannelWidget : public CBEGlobals, public CMenuTarget, public CListHelpers { private: - CComponentsDetailsLine *dline; - CComponentsInfoBox *ibox; - enum state_ { beDefault, @@ -64,7 +61,7 @@ class CBEChannelWidget : public CBEGlobals, public CMenuTarget, public CListHelp void paintItem(int pos); void paintItems(); void paintFoot(); - void paintDetails(int pos, int current); + void hide(); void updateSelection(unsigned int newpos); diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index 09766df53..008997664 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -48,8 +48,6 @@ CBEChannelSelectWidget::CBEChannelSelectWidget(const std::string & Caption, CZap liststart = 0; channellist_sort_mode = SORT_ALPHA; bouquetChannels = NULL; - dline = NULL; - ibox = NULL; int iw, ih; action_icon_width = 0; @@ -64,8 +62,6 @@ CBEChannelSelectWidget::CBEChannelSelectWidget(const std::string & Caption, CZap CBEChannelSelectWidget::~CBEChannelSelectWidget() { - delete dline; - delete ibox; } void CBEChannelSelectWidget::paintItem(int pos) @@ -184,54 +180,6 @@ void CBEChannelSelectWidget::paintFoot() footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEChannelSelectButtons); } -void CBEChannelSelectWidget::paintDetails(int pos, int current) -{ - int xpos = x - DETAILSLINE_WIDTH; - int ypos1 = y + header_height + pos*item_height; - int ypos2 = y + height - info_height - OFFSET_SHADOW; - int ypos1a = ypos1 + (item_height/2); - int ypos2a = ypos2 + (info_height/2); - - if (dline) - dline->kill(); - - if (pos >= 0) - { - if (dline == NULL) - dline = new CComponentsDetailsLine(); - - if (dline) - { - dline->setDimensionsAll(xpos, ypos1a, ypos2a, item_height/2, info_height - RADIUS_LARGE*2); - dline->paint(CC_SAVE_SCREEN_NO); - } - - if (ibox == NULL) - { - ibox = new CComponentsInfoBox(); - - if (ibox) - { - ibox->setColorBody(COL_MENUCONTENTDARK_PLUS_0); - ibox->setTextColor(COL_MENUCONTENTDARK_TEXT); - ibox->setFrameThickness(FRAME_WIDTH_MIN); - ibox->setCorner(RADIUS_LARGE); - ibox->enableShadow(CC_SHADOW_ON); - } - } - - if (ibox) - { - if (ibox->isPainted()) - ibox->hide(); - - ibox->setDimensionsAll(x, ypos2, width, info_height); - ibox->setText(getInfoText(current), CTextBox::AUTO_WIDTH | CTextBox::NO_AUTO_LINEBREAK, info_font); - ibox->paint(CC_SAVE_SCREEN_NO); - } - } -} - void CBEChannelSelectWidget::hide() { frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); diff --git a/src/gui/bedit/bouqueteditor_chanselect.h b/src/gui/bedit/bouqueteditor_chanselect.h index bf7b9e6f6..c54436fae 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.h +++ b/src/gui/bedit/bouqueteditor_chanselect.h @@ -37,9 +37,6 @@ class CBEChannelSelectWidget : public CBEGlobals, public CMenuTarget, public CListHelpers { private: - CComponentsDetailsLine *dline; - CComponentsInfoBox *ibox; - enum { SORT_ALPHA, SORT_FREQ, @@ -64,7 +61,7 @@ class CBEChannelSelectWidget : public CBEGlobals, public CMenuTarget, public CLi void paintItem(int pos); void paintItems(); void paintFoot(); - void paintDetails(int pos, int current); + void hide(); void updateSelection(unsigned int newpos); diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index 3e8a9c14c..4d624724c 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -54,8 +54,59 @@ CBEGlobals::CBEGlobals() y = getScreenStartY(height); timeout = g_settings.timing[SNeutrinoSettings::TIMING_MENU]; + + dline = NULL; + ibox = NULL; } CBEGlobals::~CBEGlobals() { + delete dline; + delete ibox; } + +void CBEGlobals::paintDetails(int pos, int current) +{ + int xpos = x - DETAILSLINE_WIDTH; + int ypos1 = y + header_height + pos*item_height; + int ypos2 = y + height - info_height - OFFSET_SHADOW; + int ypos1a = ypos1 + (item_height/2); + int ypos2a = ypos2 + (info_height/2); + + if (pos >= 0) + { + if (dline == NULL) + dline = new CComponentsDetailsLine(); + dline->setDimensionsAll(xpos, ypos1a, ypos2a, item_height/2, info_height - RADIUS_LARGE*2); + + dline->paint(); + + if (ibox == NULL) + ibox = new CComponentsInfoBox(); + ibox->setColorBody(COL_MENUCONTENTDARK_PLUS_0); + ibox->setTextColor(COL_MENUCONTENTDARK_TEXT); + ibox->setFrameThickness(FRAME_WIDTH_MIN); + ibox->setCorner(RADIUS_LARGE); + ibox->enableShadow(); + ibox->enableColBodyGradient(g_settings.theme.menu_Hint_gradient, COL_MENUFOOT_PLUS_0, g_settings.theme.menu_Hint_gradient_direction);// COL_MENUFOOT_PLUS_0 is default footer color + ibox->setDimensionsAll(x, ypos2, width, info_height); + ibox->setText(getInfoText(current), CTextBox::AUTO_WIDTH | CTextBox::NO_AUTO_LINEBREAK, info_font); + + ibox->paint(); + } + else + { + if (dline) + { + if (dline->isPainted()) + dline->hide(); + } + if (ibox) + { + if (ibox->isPainted()) + ibox->hide(); + } + } +} + + diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index 3e5b665e8..af04c4e16 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -28,9 +28,16 @@ class CBEGlobals { + protected: + CComponentsDetailsLine *dline; + CComponentsInfoBox *ibox; + + virtual std::string getInfoText(int index) = 0; + void paintDetails(int pos, int current); + public: CBEGlobals(); - ~CBEGlobals(); + virtual ~CBEGlobals(); CFrameBuffer *frameBuffer; From 694f5af402c08f675bd4cedefb9352945f43bcdd Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 57/74] bedit: use inherited version of hide() This overwrites inherited hide() from CMenuTarget rework hide Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d64f06b19626476aea81157d6a58065a3074ae1f Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.cpp | 5 ----- src/gui/bedit/bouqueteditor_bouquets.h | 3 ++- src/gui/bedit/bouqueteditor_channels.cpp | 12 +----------- src/gui/bedit/bouqueteditor_channels.h | 3 ++- src/gui/bedit/bouqueteditor_chanselect.cpp | 10 ---------- src/gui/bedit/bouqueteditor_chanselect.h | 3 ++- src/gui/bedit/bouqueteditor_globals.cpp | 13 +++++++++++++ src/gui/bedit/bouqueteditor_globals.h | 3 +++ 8 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 69ee284ab..430c467ee 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -169,11 +169,6 @@ void CBEBouquetWidget::paintFoot() footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEBouquetWidgetButtons); } -void CBEBouquetWidget::hide() -{ - frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); -} - void CBEBouquetWidget::updateSelection(unsigned int newpos) { if (newpos == selected || newpos == (unsigned int)-1) diff --git a/src/gui/bedit/bouqueteditor_bouquets.h b/src/gui/bedit/bouqueteditor_bouquets.h index 439ae1d7b..0e1e6325a 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.h +++ b/src/gui/bedit/bouqueteditor_bouquets.h @@ -68,7 +68,7 @@ class CBEBouquetWidget : public CBEGlobals, public CMenuTarget, public CListHelp void paintItem(int pos); void paintItems(); void paintFoot(); - void hide(); + void updateSelection(unsigned int newpos); void deleteBouquet(); @@ -93,6 +93,7 @@ class CBEBouquetWidget : public CBEGlobals, public CMenuTarget, public CListHelp //CZapitClient::BouquetList Bouquets; BouquetList * Bouquets; int exec(CMenuTarget* parent, const std::string & actionKey); + void hide(){CBEGlobals::hide();} }; #endif diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 3bbb3c706..5417194f3 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -175,16 +175,6 @@ void CBEChannelWidget::paintFoot() footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEChannelWidgetButtons); } -void CBEChannelWidget::hide() -{ - frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); - - if (dline) - dline->kill(); - if (ibox) - ibox->kill(); -} - std::string CBEChannelWidget::getInfoText(int index) { std::string res = ""; @@ -434,7 +424,7 @@ int CBEChannelWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* CNeutrinoApp::getInstance()->handleMsg(msg, data); } } - hide(); + CBEGlobals::hide(); return res; } diff --git a/src/gui/bedit/bouqueteditor_channels.h b/src/gui/bedit/bouqueteditor_channels.h index 73f5512aa..d6f64c055 100644 --- a/src/gui/bedit/bouqueteditor_channels.h +++ b/src/gui/bedit/bouqueteditor_channels.h @@ -62,7 +62,7 @@ class CBEChannelWidget : public CBEGlobals, public CMenuTarget, public CListHelp void paintItems(); void paintFoot(); - void hide(); + void updateSelection(unsigned int newpos); void deleteChannel(); @@ -85,6 +85,7 @@ class CBEChannelWidget : public CBEGlobals, public CMenuTarget, public CListHelp //CZapitClient::BouquetChannelList Channels; ZapitChannelList * Channels; int exec(CMenuTarget* parent, const std::string & actionKey); + void hide(){CBEGlobals::hide();} bool hasChanged(); unsigned int getBouquet() { return bouquet; }; }; diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index 008997664..c4be1fb8a 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -180,16 +180,6 @@ void CBEChannelSelectWidget::paintFoot() footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEChannelSelectButtons); } -void CBEChannelSelectWidget::hide() -{ - frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); - - if (dline) - dline->kill(); - if (ibox) - ibox->kill(); -} - std::string CBEChannelSelectWidget::getInfoText(int index) { std::string res = ""; diff --git a/src/gui/bedit/bouqueteditor_chanselect.h b/src/gui/bedit/bouqueteditor_chanselect.h index c54436fae..5766837b0 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.h +++ b/src/gui/bedit/bouqueteditor_chanselect.h @@ -62,7 +62,7 @@ class CBEChannelSelectWidget : public CBEGlobals, public CMenuTarget, public CLi void paintItems(); void paintFoot(); - void hide(); + void updateSelection(unsigned int newpos); void sortChannels(); @@ -77,6 +77,7 @@ class CBEChannelSelectWidget : public CBEGlobals, public CMenuTarget, public CLi ZapitChannelList Channels; ZapitChannelList * bouquetChannels; int exec(CMenuTarget* parent, const std::string & actionKey); + void hide(){CBEGlobals::hide();} bool hasChanged(); }; diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index 4d624724c..df21cc1a0 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -109,4 +109,17 @@ void CBEGlobals::paintDetails(int pos, int current) } } +void CBEGlobals::hide() +{ + frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); + killDetails(); +} + +void CBEGlobals::killDetails() +{ + if (dline) + dline->kill(); + if (ibox) + ibox->kill(); +} diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index af04c4e16..49e7724a4 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -34,6 +34,7 @@ class CBEGlobals virtual std::string getInfoText(int index) = 0; void paintDetails(int pos, int current); + void killDetails(); public: CBEGlobals(); @@ -64,6 +65,8 @@ class CBEGlobals int status_icon_width; int timeout; + + void hide(); }; #endif From eba3d1e55e30810ae61bf3f4bc6a7a4924cb7018 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 58/74] bedit: declare internal vars as protected Access to internal member vars should be done via methods and funtions. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/53293ba49d83379ba0287e7175c289f206fc95cf Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_globals.h | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index 49e7724a4..af2300155 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -31,14 +31,8 @@ class CBEGlobals protected: CComponentsDetailsLine *dline; CComponentsInfoBox *ibox; - - virtual std::string getInfoText(int index) = 0; - void paintDetails(int pos, int current); - void killDetails(); - - public: - CBEGlobals(); - virtual ~CBEGlobals(); + CComponentsHeader header; + CComponentsFooter footer; CFrameBuffer *frameBuffer; @@ -53,19 +47,23 @@ class CBEGlobals int footer_height; int info_height; - CComponentsHeader header; - CComponentsFooter footer; - - unsigned int items_count; - Font *item_font; Font *info_font; int action_icon_width; int status_icon_width; + unsigned int items_count; int timeout; + virtual std::string getInfoText(int index) = 0; + void paintDetails(int pos, int current); + void killDetails(); + + public: + CBEGlobals(); + virtual ~CBEGlobals(); + void hide(); }; From 8121a93ddd4c4bfda72f14c05aa65a9b3b677070 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 59/74] bedit: move paintBody() into base class Avoids multiple code parts Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/61a29f061ade553234c9f7c3e750bc5d85e0bf57 Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.cpp | 5 ----- src/gui/bedit/bouqueteditor_bouquets.h | 2 +- src/gui/bedit/bouqueteditor_channels.cpp | 5 ----- src/gui/bedit/bouqueteditor_channels.h | 2 +- src/gui/bedit/bouqueteditor_chanselect.cpp | 5 ----- src/gui/bedit/bouqueteditor_chanselect.h | 2 +- src/gui/bedit/bouqueteditor_globals.cpp | 5 +++++ src/gui/bedit/bouqueteditor_globals.h | 2 ++ 8 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 430c467ee..0953d03b6 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -135,11 +135,6 @@ void CBEBouquetWidget::paintItems() paintScrollBar(x + width - SCROLLBAR_WIDTH, y + header_height, SCROLLBAR_WIDTH, body_height, total_pages, current_page); } -void CBEBouquetWidget::paintBody() -{ - PaintBoxRel(x, y + header_height, width, body_height, COL_MENUCONTENT_PLUS_0, RADIUS_NONE, CORNER_NONE, CC_SHADOW_ON); -} - void CBEBouquetWidget::paintHead() { header.setCaption(LOCALE_BOUQUETLIST_HEAD); diff --git a/src/gui/bedit/bouqueteditor_bouquets.h b/src/gui/bedit/bouqueteditor_bouquets.h index 0e1e6325a..edb3a440f 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.h +++ b/src/gui/bedit/bouqueteditor_bouquets.h @@ -64,7 +64,7 @@ class CBEBouquetWidget : public CBEGlobals, public CMenuTarget, public CListHelp bool bouquetsChanged; void paintHead(); - void paintBody(); + void paintItem(int pos); void paintItems(); void paintFoot(); diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 5417194f3..b398c5fb3 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -140,11 +140,6 @@ void CBEChannelWidget::paintItems() paintScrollBar(x + width - SCROLLBAR_WIDTH, y + header_height, SCROLLBAR_WIDTH, body_height, total_pages, current_page); } -void CBEChannelWidget::paintBody() -{ - PaintBoxRel(x, y + header_height, width, body_height, COL_MENUCONTENT_PLUS_0, RADIUS_NONE, CORNER_NONE, CC_SHADOW_ON); -} - void CBEChannelWidget::paintHead() { header.setCaption(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio")); diff --git a/src/gui/bedit/bouqueteditor_channels.h b/src/gui/bedit/bouqueteditor_channels.h index d6f64c055..8a1b16881 100644 --- a/src/gui/bedit/bouqueteditor_channels.h +++ b/src/gui/bedit/bouqueteditor_channels.h @@ -57,7 +57,7 @@ class CBEChannelWidget : public CBEGlobals, public CMenuTarget, public CListHelp unsigned int bouquet; void paintHead(); - void paintBody(); + void paintItem(int pos); void paintItems(); void paintFoot(); diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index c4be1fb8a..66a11dc3e 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -124,11 +124,6 @@ void CBEChannelSelectWidget::paintItems() paintScrollBar(x + width - SCROLLBAR_WIDTH, y + header_height, SCROLLBAR_WIDTH, body_height, total_pages, current_page); } -void CBEChannelSelectWidget::paintBody() -{ - PaintBoxRel(x, y + header_height, width, body_height, COL_MENUCONTENT_PLUS_0, RADIUS_NONE, CORNER_NONE, CC_SHADOW_ON); -} - void CBEChannelSelectWidget::paintHead() { header.setCaption(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio")); diff --git a/src/gui/bedit/bouqueteditor_chanselect.h b/src/gui/bedit/bouqueteditor_chanselect.h index 5766837b0..0bd20f880 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.h +++ b/src/gui/bedit/bouqueteditor_chanselect.h @@ -57,7 +57,7 @@ class CBEChannelSelectWidget : public CBEGlobals, public CMenuTarget, public CLi std::string caption; void paintHead(); - void paintBody(); + void paintItem(int pos); void paintItems(); void paintFoot(); diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index df21cc1a0..a09a8259f 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -109,6 +109,11 @@ void CBEGlobals::paintDetails(int pos, int current) } } +void CBEGlobals::paintBody() +{ + PaintBoxRel(x, y + header_height, width, body_height, COL_MENUCONTENT_PLUS_0, RADIUS_NONE, CORNER_NONE, CC_SHADOW_ON); +} + void CBEGlobals::hide() { frameBuffer->paintBackgroundBoxRel(x, y, width + OFFSET_SHADOW, height + OFFSET_SHADOW); diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index af2300155..bd071ba45 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -56,6 +56,8 @@ class CBEGlobals unsigned int items_count; int timeout; + void paintBody(); + virtual std::string getInfoText(int index) = 0; void paintDetails(int pos, int current); void killDetails(); From 977fb487940aea6ad0d26c5e2a6a2fe1ab4d5a47 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 60/74] bedit: ensure apply of possible changed timeout settings on runtime Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/b7124973de2cb68a4ac4cda448f9d0f58b79b2cb Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.cpp | 6 +++--- src/gui/bedit/bouqueteditor_channels.cpp | 6 +++--- src/gui/bedit/bouqueteditor_chanselect.cpp | 4 ++-- src/gui/bedit/bouqueteditor_globals.cpp | 2 +- src/gui/bedit/bouqueteditor_globals.h | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 0953d03b6..2ecabefbc 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -211,7 +211,7 @@ int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* bouquetsChanged = false; - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); bool loop = true; while (loop) @@ -219,7 +219,7 @@ int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); if (msg <= CRCInput::RC_MaxRC) - timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); if ((msg == CRCInput::RC_timeout) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) { @@ -354,7 +354,7 @@ int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* paintFoot(); paintItems(); - timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); } } else if (state == beMoving) diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index b398c5fb3..76a9b2022 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -251,7 +251,7 @@ int CBEChannelWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* channelsChanged = false; - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); bool loop = true; while (loop) @@ -259,7 +259,7 @@ int CBEChannelWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); if (msg <= CRCInput::RC_MaxRC) - timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); if ((msg == CRCInput::RC_timeout) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel)) { @@ -296,7 +296,7 @@ int CBEChannelWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* if (state == beDefault) addChannel(); - timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); } else if (msg == CRCInput::RC_yellow) { diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index 66a11dc3e..8b98500cc 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -251,7 +251,7 @@ int CBEChannelSelectWidget::exec(CMenuTarget* parent, const std::string & /*acti paintFoot(); paintItems(); - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); channelChanged = false; bool loop = true; @@ -260,7 +260,7 @@ int CBEChannelSelectWidget::exec(CMenuTarget* parent, const std::string & /*acti g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); if (msg <= CRCInput::RC_MaxRC) - timeoutEnd = CRCInput::calcTimeoutEnd(timeout); + timeoutEnd = CRCInput::calcTimeoutEnd(*timeout_ptr); if ((msg == CRCInput::RC_timeout) || (msg == (neutrino_msg_t)g_settings.key_channelList_cancel) || (msg == CRCInput::RC_home)) { diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index a09a8259f..445742c7c 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -53,7 +53,7 @@ CBEGlobals::CBEGlobals() x = getScreenStartX(width); y = getScreenStartY(height); - timeout = g_settings.timing[SNeutrinoSettings::TIMING_MENU]; + timeout_ptr = &g_settings.timing[SNeutrinoSettings::TIMING_MENU]; dline = NULL; ibox = NULL; diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index bd071ba45..299e42ed1 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -54,7 +54,7 @@ class CBEGlobals int status_icon_width; unsigned int items_count; - int timeout; + int* timeout_ptr; void paintBody(); From 6a5e1fabb4996dba92dc6b7561aec00c3637894c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 61/74] bedit: remove multiple code from paintFoot() method Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4dc047557f6d43f2299229a9cb89e4135607e7c2 Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.cpp | 4 +--- src/gui/bedit/bouqueteditor_channels.cpp | 3 +-- src/gui/bedit/bouqueteditor_chanselect.cpp | 3 +-- src/gui/bedit/bouqueteditor_globals.cpp | 7 +++++++ src/gui/bedit/bouqueteditor_globals.h | 1 + 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index 2ecabefbc..eb1dad793 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -159,9 +159,7 @@ void CBEBouquetWidget::paintFoot() { size_t numbuttons = sizeof(CBEBouquetWidgetButtons)/sizeof(CBEBouquetWidgetButtons[0]); - footer.setCorner(RADIUS_LARGE, CORNER_BOTTOM); - footer.enableShadow(CC_SHADOW_ON, -1, true); - footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEBouquetWidgetButtons); + CBEGlobals::paintFoot(numbuttons, CBEBouquetWidgetButtons); } void CBEBouquetWidget::updateSelection(unsigned int newpos) diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 76a9b2022..1ef0c1c7d 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -166,8 +166,7 @@ void CBEChannelWidget::paintFoot() { size_t numbuttons = sizeof(CBEChannelWidgetButtons)/sizeof(CBEChannelWidgetButtons[0]); - footer.enableShadow(CC_SHADOW_ON, -1, true); - footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEChannelWidgetButtons); + CBEGlobals::paintFoot(numbuttons, CBEChannelWidgetButtons); } std::string CBEChannelWidget::getInfoText(int index) diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index 8b98500cc..9f58703e8 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -171,8 +171,7 @@ void CBEChannelSelectWidget::paintFoot() const short numbuttons = sizeof(CBEChannelSelectButtons)/sizeof(CBEChannelSelectButtons[0]); - footer.enableShadow(CC_SHADOW_ON, -1, true); - footer.paintButtons(x, y + header_height + body_height, width, footer_height, numbuttons, CBEChannelSelectButtons); + CBEGlobals::paintFoot(numbuttons, CBEChannelSelectButtons); } std::string CBEChannelSelectWidget::getInfoText(int index) diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index 445742c7c..69dca3165 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -128,3 +128,10 @@ void CBEGlobals::killDetails() if (ibox) ibox->kill(); } + +void CBEGlobals::paintFoot(const size_t& label_count, const struct button_label * const content) +{ + footer.setCorner(RADIUS_LARGE, CORNER_BOTTOM); + footer.enableShadow(CC_SHADOW_ON, -1, true); + footer.paintButtons(x, y + header_height + body_height, width, footer_height, label_count, content); +} diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index 299e42ed1..98aa263e4 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -57,6 +57,7 @@ class CBEGlobals int* timeout_ptr; void paintBody(); + void paintFoot(const size_t& label_count, const struct button_label * const content); virtual std::string getInfoText(int index) = 0; void paintDetails(int pos, int current); From 07de0c3899cc3170a5ac845d2e35f4377b40ffeb Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 62/74] bedit: remove multiple code from paintHead() method Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c651f6aa40d7b123fee1f21b183e77ae4747117e Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.cpp | 7 +------ src/gui/bedit/bouqueteditor_channels.cpp | 9 ++------- src/gui/bedit/bouqueteditor_chanselect.cpp | 9 ++------- src/gui/bedit/bouqueteditor_globals.cpp | 10 ++++++++++ src/gui/bedit/bouqueteditor_globals.h | 1 + 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index eb1dad793..d52259a0a 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -137,12 +137,7 @@ void CBEBouquetWidget::paintItems() void CBEBouquetWidget::paintHead() { - header.setCaption(LOCALE_BOUQUETLIST_HEAD); - header.setIcon(NEUTRINO_ICON_SETTINGS); - header.setDimensionsAll(x, y, width, header_height); - header.setCorner(RADIUS_LARGE, CORNER_TOP); - header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); - header.paint(CC_SAVE_SCREEN_NO); + CBEGlobals::paintHead(g_Locale->getText(LOCALE_BOUQUETLIST_HEAD), NEUTRINO_ICON_SETTINGS); } const struct button_label CBEBouquetWidgetButtons[] = diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index 1ef0c1c7d..f30904477 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -142,13 +142,8 @@ void CBEChannelWidget::paintItems() void CBEChannelWidget::paintHead() { - header.setCaption(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio")); - header.setIcon(NULL); // trick the cc-header - header.setIcon(mode == CZapitClient::MODE_TV ? NEUTRINO_ICON_VIDEO : NEUTRINO_ICON_AUDIO); - header.setDimensionsAll(x, y, width, header_height); - header.setCorner(RADIUS_LARGE, CORNER_TOP); - header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); - header.paint(CC_SAVE_SCREEN_NO); + CBEGlobals::paintHead(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio"), + mode == CZapitClient::MODE_TV ? NEUTRINO_ICON_VIDEO : NEUTRINO_ICON_AUDIO); } const struct button_label CBEChannelWidgetButtons[] = diff --git a/src/gui/bedit/bouqueteditor_chanselect.cpp b/src/gui/bedit/bouqueteditor_chanselect.cpp index 9f58703e8..4ad6606f8 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.cpp +++ b/src/gui/bedit/bouqueteditor_chanselect.cpp @@ -126,13 +126,8 @@ void CBEChannelSelectWidget::paintItems() void CBEChannelSelectWidget::paintHead() { - header.setCaption(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio")); - header.setIcon(NULL); // trick the cc-header - header.setIcon(mode == CZapitClient::MODE_TV ? NEUTRINO_ICON_VIDEO : NEUTRINO_ICON_AUDIO); - header.setDimensionsAll(x, y, width, header_height); - header.setCorner(RADIUS_LARGE, CORNER_TOP); - header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); - header.paint(CC_SAVE_SCREEN_NO); + CBEGlobals::paintHead(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio"), + mode == CZapitClient::MODE_TV ? NEUTRINO_ICON_VIDEO : NEUTRINO_ICON_AUDIO); } struct button_label CBEChannelSelectButtons[] = diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index 69dca3165..3df2c9dd7 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -135,3 +135,13 @@ void CBEGlobals::paintFoot(const size_t& label_count, const struct button_label footer.enableShadow(CC_SHADOW_ON, -1, true); footer.paintButtons(x, y + header_height + body_height, width, footer_height, label_count, content); } + +void CBEGlobals::paintHead(const std::string& Caption, const char* Icon) +{ + header.setCaption(Caption); + header.setIcon(Icon); + header.setDimensionsAll(x, y, width, header_height); + header.setCorner(RADIUS_LARGE, CORNER_TOP); + header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); + header.paint(CC_SAVE_SCREEN_NO); +} diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index 98aa263e4..6a3182873 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -56,6 +56,7 @@ class CBEGlobals unsigned int items_count; int* timeout_ptr; + void paintHead(const std::string& Caption, const char* Icon); void paintBody(); void paintFoot(const size_t& label_count, const struct button_label * const content); From 8e77ad7116a76dc72272c1ae0c4d03f433c25cc8 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 12 Oct 2017 12:26:02 +0200 Subject: [PATCH 63/74] bedit: add methods ResetModules() and init() Help to handle instances of modules to get current screen and font settings after changed settings by user. Dimensions were not applied after changed settings. eg: All Items had wrong position and dimensions after changed font size. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/f53b8fb1100bfc12155f0b89b565d6a09d674eff Author: Thilo Graf Date: 2017-10-12 (Thu, 12 Oct 2017) ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.cpp | 2 + src/gui/bedit/bouqueteditor_channels.cpp | 3 +- src/gui/bedit/bouqueteditor_globals.cpp | 67 +++++++++++++++++------- src/gui/bedit/bouqueteditor_globals.h | 7 ++- 4 files changed, 58 insertions(+), 21 deletions(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.cpp b/src/gui/bedit/bouqueteditor_bouquets.cpp index d52259a0a..0eac1f10f 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.cpp +++ b/src/gui/bedit/bouqueteditor_bouquets.cpp @@ -196,6 +196,7 @@ int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* parent->hide(); Bouquets = &g_bouquetManager->Bouquets; + init(); paintHead(); paintBody(); @@ -379,6 +380,7 @@ int CBEBouquetWidget::exec(CMenuTarget* parent, const std::string & /*actionKey* } } hide(); + ResetModules(); return res; } diff --git a/src/gui/bedit/bouqueteditor_channels.cpp b/src/gui/bedit/bouqueteditor_channels.cpp index f30904477..c2d670f5a 100644 --- a/src/gui/bedit/bouqueteditor_channels.cpp +++ b/src/gui/bedit/bouqueteditor_channels.cpp @@ -70,7 +70,6 @@ CBEChannelWidget::CBEChannelWidget(const std::string & Caption, unsigned int Bou frameBuffer->getIconSize(NEUTRINO_ICON_LOCK, &iw, &ih); status_icon_width = std::max(status_icon_width, iw); - header.addContextButton(CComponentsHeader::CC_BTN_LEFT | CComponentsHeader::CC_BTN_RIGHT); } CBEChannelWidget::~CBEChannelWidget() @@ -142,6 +141,8 @@ void CBEChannelWidget::paintItems() void CBEChannelWidget::paintHead() { + if (!header->isPainted()) + header->addContextButton(CComponentsHeader::CC_BTN_LEFT | CComponentsHeader::CC_BTN_RIGHT); CBEGlobals::paintHead(caption + (mode == CZapitClient::MODE_TV ? " - TV" : " - Radio"), mode == CZapitClient::MODE_TV ? NEUTRINO_ICON_VIDEO : NEUTRINO_ICON_AUDIO); } diff --git a/src/gui/bedit/bouqueteditor_globals.cpp b/src/gui/bedit/bouqueteditor_globals.cpp index 3df2c9dd7..8e0235edc 100644 --- a/src/gui/bedit/bouqueteditor_globals.cpp +++ b/src/gui/bedit/bouqueteditor_globals.cpp @@ -34,16 +34,33 @@ CBEGlobals::CBEGlobals() { frameBuffer = CFrameBuffer::getInstance(); + timeout_ptr = &g_settings.timing[SNeutrinoSettings::TIMING_MENU]; + header = NULL; + footer = NULL; + dline = NULL; + ibox = NULL; + + init(); +} + +void CBEGlobals::init() +{ item_font = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST]; info_font = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]; width = frameBuffer->getScreenWidthRel(); height = frameBuffer->getScreenHeightRel(); - header_height = header.getHeight(); + if (!header) + header = new CComponentsHeader(); + header_height = header->getHeight(); item_height = item_font->getHeight(); - footer_height = footer.getHeight(); + + if (!footer) + footer = new CComponentsFooter(); + footer_height = footer->getHeight(); + info_height = 2*info_font->getHeight() + 2*OFFSET_INNER_SMALL; items_count = (height - header_height - footer_height - OFFSET_INTER - info_height - 2*OFFSET_SHADOW) / item_height; @@ -52,17 +69,27 @@ CBEGlobals::CBEGlobals() x = getScreenStartX(width); y = getScreenStartY(height); - - timeout_ptr = &g_settings.timing[SNeutrinoSettings::TIMING_MENU]; - - dline = NULL; - ibox = NULL; } CBEGlobals::~CBEGlobals() { - delete dline; - delete ibox; + ResetModules(); +} + +void CBEGlobals::ResetModules() +{ + if (dline){ + delete dline; dline = NULL; + } + if (ibox){ + delete ibox; ibox = NULL; + } + if (header){ + delete header; header = NULL; + } + if (footer){ + delete footer; footer = NULL; + } } void CBEGlobals::paintDetails(int pos, int current) @@ -131,17 +158,21 @@ void CBEGlobals::killDetails() void CBEGlobals::paintFoot(const size_t& label_count, const struct button_label * const content) { - footer.setCorner(RADIUS_LARGE, CORNER_BOTTOM); - footer.enableShadow(CC_SHADOW_ON, -1, true); - footer.paintButtons(x, y + header_height + body_height, width, footer_height, label_count, content); + if (!footer) + footer = new CComponentsFooter(); + footer->setCorner(RADIUS_LARGE, CORNER_BOTTOM); + footer->enableShadow(CC_SHADOW_ON, -1, true); + footer->paintButtons(x, y + header_height + body_height, width, footer_height, label_count, content); } void CBEGlobals::paintHead(const std::string& Caption, const char* Icon) { - header.setCaption(Caption); - header.setIcon(Icon); - header.setDimensionsAll(x, y, width, header_height); - header.setCorner(RADIUS_LARGE, CORNER_TOP); - header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); - header.paint(CC_SAVE_SCREEN_NO); + if (!header) + header = new CComponentsHeader(); + header->setCaption(Caption); + header->setIcon(Icon); + header->setDimensionsAll(x, y, width, header_height); + header->setCorner(RADIUS_LARGE, CORNER_TOP); + header->enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); + header->paint(CC_SAVE_SCREEN_NO); } diff --git a/src/gui/bedit/bouqueteditor_globals.h b/src/gui/bedit/bouqueteditor_globals.h index 6a3182873..5b8d4f9d7 100644 --- a/src/gui/bedit/bouqueteditor_globals.h +++ b/src/gui/bedit/bouqueteditor_globals.h @@ -31,8 +31,8 @@ class CBEGlobals protected: CComponentsDetailsLine *dline; CComponentsInfoBox *ibox; - CComponentsHeader header; - CComponentsFooter footer; + CComponentsHeader *header; + CComponentsFooter *footer; CFrameBuffer *frameBuffer; @@ -56,6 +56,8 @@ class CBEGlobals unsigned int items_count; int* timeout_ptr; + void init(); + void paintHead(const std::string& Caption, const char* Icon); void paintBody(); void paintFoot(const size_t& label_count, const struct button_label * const content); @@ -69,6 +71,7 @@ class CBEGlobals virtual ~CBEGlobals(); void hide(); + void ResetModules(); }; #endif From a8b6b60fbc1d598cbcc0627ef20606af84805751 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sat, 14 Oct 2017 09:59:01 +0200 Subject: [PATCH 64/74] CBEBouquetWidget::getInfoText(): Fix compile error Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/9365e09ab9f35b4f688a2ad90bb09b4b6070bb2b Author: Michael Liebmann Date: 2017-10-14 (Sat, 14 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/bedit/bouqueteditor_bouquets.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/bedit/bouqueteditor_bouquets.h b/src/gui/bedit/bouqueteditor_bouquets.h index edb3a440f..5d951c582 100644 --- a/src/gui/bedit/bouqueteditor_bouquets.h +++ b/src/gui/bedit/bouqueteditor_bouquets.h @@ -85,7 +85,7 @@ class CBEBouquetWidget : public CBEGlobals, public CMenuTarget, public CListHelp void discardChanges(); std::string inputName(const char* const defaultName, const neutrino_locale_t caption); - std::string getInfoText(int /*index*/){}; + std::string getInfoText(int /*index*/) { return ""; }; public: CBEBouquetWidget(); From a1d2509af174a060d80ef114fc78ad9610e2e368 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 14 Oct 2017 13:26:55 +0200 Subject: [PATCH 65/74] streaminfo2: add desc to audiotype Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ff61f5aef16538dd9fdfbbdc61062d6f00bc3578 Author: Jacek Jendrzej Date: 2017-10-14 (Sat, 14 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/streaminfo2.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index f4ddae10b..31a7ef272 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -655,6 +655,9 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) ddmode is always 1 ("CH1/CH2"). */ audioDecoder->getAudioInfo(type, layer, freq, lbitrate, mode); + std::string desc = "N/A"; + if (!g_RemoteControl->current_PIDs.APIDs.empty()) + desc = g_RemoteControl->current_PIDs.APIDs[g_RemoteControl->current_PIDs.PIDs.selected_apid].desc; if (type == AUDIO_FMT_MPEG) { @@ -666,9 +669,9 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) "single_ch" }; int max_mode = sizeof(mpegmodes) / sizeof(mpegmodes[0]); - snprintf(buf, sizeof(buf), "MPEG %s (%d)", + snprintf(buf, sizeof(buf), "MPEG %s (%d) (%s)", (mode > max_mode) ? "unk" : mpegmodes[mode], - freq); + freq, desc.c_str()); } else if (type == AUDIO_FMT_DOLBY_DIGITAL || type == AUDIO_FMT_DD_PLUS) { @@ -684,10 +687,10 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) "L/C/R/SL/SR" }; int max_mode = sizeof(ddmodes) / sizeof(ddmodes[0]); - snprintf(buf, sizeof(buf), "%s %s (%d)", + snprintf(buf, sizeof(buf), "%s %s (%d) (%s)", (type == AUDIO_FMT_DOLBY_DIGITAL) ? "DD" : "DD+", (mode > max_mode) ? "unk" : ddmodes[mode], - freq); + freq, desc.c_str()); } else if (type == AUDIO_FMT_AAC || type == AUDIO_FMT_AAC_PLUS) { @@ -705,16 +708,16 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) "Dual-Mono" }; int max_mode = sizeof(aacmodes) / sizeof(aacmodes[0]); - snprintf(buf, sizeof(buf), "%s %s (%d)", + snprintf(buf, sizeof(buf), "%s %s (%d) (%s)", (type == AUDIO_FMT_AAC) ? "AAC" : "AAC+", (mode > max_mode) ? "unk" : aacmodes[mode], - freq); + freq, desc.c_str()); } else { - snprintf(buf, sizeof(buf), "%s (%d)", + snprintf(buf, sizeof(buf), "%s (%d) (%s)", g_Locale->getText(LOCALE_STREAMINFO_AUDIOTYPE_UNKNOWN), - freq); + freq, desc.c_str()); } g_Font[font_info]->RenderString (xpos+spaceoffset, ypos, box_width2, buf, COL_MENUCONTENT_TEXT); From 3a268e12c5b480a05a5b139c7a123758320d2a00 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 16 Oct 2017 10:44:19 +0200 Subject: [PATCH 66/74] Revert "- libdvbsub: add missing free() call" This reverts commit 3da19efe982bdf97e7d566aa4df986bd70adc14a. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0f8e614ee4f2f73b8e285f157ec3bfde087d6d6f Author: Jacek Jendrzej Date: 2017-10-16 (Mon, 16 Oct 2017) ------------------ This commit was generated by Migit --- lib/libdvbsub/dvbsubtitle.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index 5ec75dded..897f9fc49 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -139,7 +139,6 @@ void cDvbSubtitleBitmaps::Draw(int &min_x, int &min_y, int &max_x, int &max_y) #endif CFrameBuffer::getInstance()->blit2FB(newdata, nw, nh, xoff, yoff, 0, 0); - free(newdata); if(min_x > xoff) min_x = xoff; From db35c38ba64a063debf5417e37cbf05ad6bdfa74 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Tue, 17 Oct 2017 12:42:32 +0200 Subject: [PATCH 67/74] movieplayer.cpp remove free , attempting free on address which was not malloc()-ed Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/79a91865156c835402d04aae5b645de6c5de1968 Author: Jacek Jendrzej Date: 2017-10-17 (Tue, 17 Oct 2017) Origin message was: ------------------ movieplayer.cpp remove free , attempting free on address which was not malloc()-ed ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/movieplayer.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 6128d66cb..c48a1797f 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -2520,7 +2520,6 @@ void CMoviePlayerGui::showSubtitle(neutrino_msg_data_t data) #endif frameBuffer->blit2FB(newdata, nw, nh, xoff, yoff); - free(newdata); min_x = std::min(min_x, xoff); max_x = std::max(max_x, xoff + nw); From 56ec7b2dbf55b738b0e41fad34f9a947f1d0e048 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 16 Oct 2017 19:32:35 +0200 Subject: [PATCH 68/74] maintain: add version update script Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/7dba5bc73c31d3885dcc76bd97853e1552cca367 Author: Thilo Graf Date: 2017-10-16 (Mon, 16 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- upgrade_version.pl | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 upgrade_version.pl diff --git a/upgrade_version.pl b/upgrade_version.pl new file mode 100755 index 000000000..3013a31eb --- /dev/null +++ b/upgrade_version.pl @@ -0,0 +1,42 @@ +#! /usr/bin/perl + +$old_version = ""; +$new_version = ""; + +sub replace_file { + ($file) = @_; + + $tmp_fn = "uv.tmp"; + open TMP, ">$tmp_fn"; + open INF, "<$file"; + while () { + s/$old_version/$new_version/g; + print TMP; + } + close INF; + close TMP; +# `mv $tmp_fn $file`; + rename ($tmp_fn, $file); +} + +############################################################### +## main +############################################################### +$old_version = shift; +$new_version = shift; + +if (!$new_version) { + $_ = `grep AC_INIT configure.ac`; + chomp; + $_ =~ s/^.*,//; + $_ =~ s/\).*$//; + die "Usage: upgrade_version.pl old_version new_version\nold_verion=$_\n"; +} + +@files = ( + "configure.ac", + ); + +for $file (@files) { + replace_file ($file); +} From 80ee5bf0e7fc1e9813dbfb18bfa64ce0bda01a40 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 16 Oct 2017 20:48:31 +0200 Subject: [PATCH 69/74] data/pictures: add new default background/start image Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/1bfe78636c52dc50b97939f4f9ee930f0f82cd82 Author: Thilo Graf Date: 2017-10-16 (Mon, 16 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/pictures/backgrounds/1280x720/start.jpg | Bin 69708 -> 49087 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/pictures/backgrounds/1280x720/start.jpg b/data/pictures/backgrounds/1280x720/start.jpg index ccdf3db8daad5784cb5707d4f1c490a021ccff4c..6219430bae6581f7ae3d4c056d45c45ecc4b9550 100644 GIT binary patch literal 49087 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 PT4veJb5mRXzn}guHX78O literal 69708 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 From 2fdd1cf67dbee284cecb33c2c0a77ff2723d99c6 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 16 Oct 2017 20:49:28 +0200 Subject: [PATCH 70/74] CComponentsPIP: use default background image as default image Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/e169a76ff91ec921999f435a5a0a9f6221505baf Author: Thilo Graf Date: 2017-10-16 (Mon, 16 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/components/cc_item_tvpic.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_item_tvpic.cpp b/src/gui/components/cc_item_tvpic.cpp index e3cd41da8..96597b620 100644 --- a/src/gui/components/cc_item_tvpic.cpp +++ b/src/gui/components/cc_item_tvpic.cpp @@ -51,8 +51,8 @@ CComponentsPIP::CComponentsPIP( const int x_pos, const int y_pos, const int perc //CComponentsPIP screen_w = frameBuffer->getScreenWidth(true); screen_h = frameBuffer->getScreenHeight(true); - pic_name = ICONSDIR; - pic_name += "/start.jpg"; + pic_name = LOGODIR; + pic_name += "/logo.jpg"; //CComponents x = x_pos; From 71d16e9142fd6f315a66e78bb726a5e884a05033 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 16 Oct 2017 20:50:00 +0200 Subject: [PATCH 71/74] neutrino.cpp: show logo on start up Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/54750e49b74e1072a75919d30620d027b88cf5c6 Author: Thilo Graf Date: 2017-10-16 (Mon, 16 Oct 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/neutrino.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index c5bbd2918..09df7153f 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2226,6 +2226,8 @@ TIMER_START(); g_videoSettings = new CVideoSettings; g_videoSettings->setVideoSettings(); + frameBuffer->showFrame(LOGODIR "/logo.jpg"); + g_RCInput = new CRCInput(); InitZapitClient(); From 007c1d3e24b84a8d11179207aa422f3c29257df8 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Mon, 16 Oct 2017 21:23:27 +0200 Subject: [PATCH 72/74] icons: add new default iconset, thx OneOfNine Hope it's complete, please report if somthing is missing! Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c6d6baa23e092c538830c19b391f0c10e92c186f Author: Thilo Graf Date: 2017-10-16 (Mon, 16 Oct 2017) ------------------ This commit was generated by Migit --- data/icons/buttons/0.png | Bin 252 -> 708 bytes data/icons/buttons/1.png | Bin 237 -> 523 bytes data/icons/buttons/2.png | Bin 265 -> 605 bytes data/icons/buttons/3.png | Bin 261 -> 647 bytes data/icons/buttons/4.png | Bin 246 -> 590 bytes data/icons/buttons/5.png | Bin 263 -> 616 bytes data/icons/buttons/6.png | Bin 259 -> 685 bytes data/icons/buttons/7.png | Bin 250 -> 563 bytes data/icons/buttons/8.png | Bin 260 -> 708 bytes data/icons/buttons/9.png | Bin 257 -> 690 bytes data/icons/buttons/blau.png | Bin 225 -> 388 bytes data/icons/buttons/btn_backward.png | Bin 572 -> 533 bytes data/icons/buttons/btn_forward.png | Bin 620 -> 530 bytes data/icons/buttons/btn_pause.png | Bin 566 -> 583 bytes data/icons/buttons/btn_play.png | Bin 580 -> 650 bytes data/icons/buttons/btn_record_active.png | Bin 601 -> 909 bytes data/icons/buttons/btn_record_inactive.png | Bin 591 -> 971 bytes data/icons/buttons/btn_stop.png | Bin 484 -> 349 bytes data/icons/buttons/down.png | Bin 263 -> 1035 bytes data/icons/buttons/gelb.png | Bin 222 -> 390 bytes data/icons/buttons/gruen.png | Bin 231 -> 389 bytes data/icons/buttons/help.png | Bin 334 -> 579 bytes data/icons/buttons/help_small.png | Bin 251 -> 452 bytes data/icons/buttons/home.png | Bin 344 -> 910 bytes data/icons/buttons/info.png | Bin 265 -> 947 bytes data/icons/buttons/info_small.png | Bin 257 -> 469 bytes data/icons/buttons/left.png | Bin 257 -> 1026 bytes data/icons/buttons/menu.png | Bin 550 -> 1010 bytes data/icons/buttons/menu_small.png | Bin 323 -> 579 bytes data/icons/buttons/mute_small.png | Bin 368 -> 1220 bytes data/icons/buttons/mute_zap_gray.png | Bin 1063 -> 1134 bytes data/icons/buttons/mute_zap_green.png | Bin 992 -> 1144 bytes data/icons/buttons/ok.png | Bin 350 -> 669 bytes data/icons/buttons/power.png | Bin 263 -> 907 bytes data/icons/buttons/right.png | Bin 256 -> 1062 bytes data/icons/buttons/rot.png | Bin 227 -> 384 bytes data/icons/buttons/up.png | Bin 267 -> 1030 bytes data/icons/filetypes/movie.png | Bin 259 -> 509 bytes data/icons/filetypes/mp3.png | Bin 961 -> 531 bytes data/icons/headers/audio.png | Bin 376 -> 1453 bytes data/icons/headers/bookmarkmanager.png | Bin 379 -> 1179 bytes data/icons/headers/colors.png | Bin 371 -> 1993 bytes data/icons/headers/error.png | Bin 326 -> 497 bytes data/icons/headers/features.png | Bin 827 -> 657 bytes data/icons/headers/games.png | Bin 354 -> 1354 bytes data/icons/headers/icon_blue.png | Bin 772 -> 481 bytes data/icons/headers/icon_green.png | Bin 466 -> 481 bytes data/icons/headers/icon_red.png | Bin 366 -> 405 bytes data/icons/headers/icon_yellow.png | Bin 362 -> 485 bytes data/icons/headers/information.png | Bin 298 -> 633 bytes data/icons/headers/keybinding.png | Bin 346 -> 1188 bytes data/icons/headers/language.png | Bin 1254 -> 1183 bytes data/icons/headers/lcd.png | Bin 339 -> 2093 bytes data/icons/headers/mainmenue.png | Bin 396 -> 1775 bytes data/icons/headers/multimedia.png | Bin 371 -> 752 bytes data/icons/headers/network.png | Bin 394 -> 1224 bytes data/icons/headers/personalize.png | Bin 1834 -> 1007 bytes data/icons/headers/shell.png | Bin 163 -> 942 bytes data/icons/headers/softupdate.png | Bin 409 -> 1112 bytes data/icons/headers/streaming.png | Bin 372 -> 1516 bytes data/icons/headers/timer.png | Bin 379 -> 1490 bytes data/icons/headers/upnp.png | Bin 1380 -> 1468 bytes data/icons/headers/video.png | Bin 353 -> 934 bytes data/icons/movieplayer/mp_b-skip.png | Bin 2484 -> 4302 bytes data/icons/movieplayer/mp_f-skip.png | Bin 2533 -> 4321 bytes data/icons/movieplayer/mp_pause.png | Bin 1431 -> 4436 bytes data/icons/movieplayer/mp_play.png | Bin 1374 -> 4507 bytes data/icons/movieplayer/mp_play_repeat_all.png | Bin 3395 -> 4911 bytes .../movieplayer/mp_play_repeat_track.png | Bin 3400 -> 4850 bytes data/icons/status/ca/biss_green.png | Bin 109 -> 506 bytes data/icons/status/ca/biss_white.png | Bin 109 -> 650 bytes data/icons/status/ca/biss_yellow.png | Bin 109 -> 592 bytes data/icons/status/ca/conax_green.png | Bin 111 -> 508 bytes data/icons/status/ca/conax_white.png | Bin 111 -> 652 bytes data/icons/status/ca/conax_yellow.png | Bin 111 -> 590 bytes data/icons/status/ca/cw_green.png | Bin 120 -> 816 bytes data/icons/status/ca/cw_white.png | Bin 120 -> 1057 bytes data/icons/status/ca/cw_yellow.png | Bin 120 -> 1004 bytes data/icons/status/ca/d_green.png | Bin 110 -> 526 bytes data/icons/status/ca/d_white.png | Bin 110 -> 675 bytes data/icons/status/ca/d_yellow.png | Bin 110 -> 604 bytes data/icons/status/ca/ird_green.png | Bin 109 -> 468 bytes data/icons/status/ca/ird_white.png | Bin 109 -> 592 bytes data/icons/status/ca/ird_yellow.png | Bin 109 -> 548 bytes data/icons/status/ca/nagra_green.png | Bin 110 -> 537 bytes data/icons/status/ca/nagra_white.png | Bin 110 -> 668 bytes data/icons/status/ca/nagra_yellow.png | Bin 110 -> 609 bytes data/icons/status/ca/nds_green.png | Bin 133 -> 954 bytes data/icons/status/ca/nds_white.png | Bin 133 -> 1176 bytes data/icons/status/ca/nds_yellow.png | Bin 133 -> 1126 bytes data/icons/status/ca/powervu_green.png | Bin 112 -> 493 bytes data/icons/status/ca/powervu_white.png | Bin 112 -> 640 bytes data/icons/status/ca/powervu_yellow.png | Bin 112 -> 576 bytes data/icons/status/ca/seca_green.png | Bin 119 -> 509 bytes data/icons/status/ca/seca_white.png | Bin 119 -> 667 bytes data/icons/status/ca/seca_yellow.png | Bin 119 -> 605 bytes data/icons/status/ca/via_green.png | Bin 112 -> 525 bytes data/icons/status/ca/via_white.png | Bin 112 -> 653 bytes data/icons/status/ca/via_yellow.png | Bin 112 -> 593 bytes data/icons/status/ca/x_green.png | Bin 176 -> 526 bytes data/icons/status/ca/x_white.png | Bin 176 -> 658 bytes data/icons/status/ca/x_yellow.png | Bin 176 -> 602 bytes data/icons/status/channel/16_9.png | Bin 162 -> 946 bytes data/icons/status/channel/16_9_gray.png | Bin 146 -> 947 bytes data/icons/status/channel/ca2.png | Bin 139 -> 1013 bytes data/icons/status/channel/ca2_gray.png | Bin 139 -> 986 bytes data/icons/status/channel/dd.png | Bin 156 -> 1116 bytes data/icons/status/channel/dd_avail.png | Bin 136 -> 1088 bytes data/icons/status/channel/dd_gray.png | Bin 136 -> 932 bytes data/icons/status/channel/radiotextget.png | Bin 160 -> 848 bytes data/icons/status/channel/radiotextoff.png | Bin 160 -> 822 bytes data/icons/status/channel/radiotextwait.png | Bin 160 -> 830 bytes data/icons/status/channel/res_000.png | Bin 117 -> 368 bytes data/icons/status/channel/res_1080.png | Bin 144 -> 943 bytes data/icons/status/channel/res_1280.png | Bin 149 -> 958 bytes data/icons/status/channel/res_1440.png | Bin 144 -> 883 bytes data/icons/status/channel/res_1920.png | Bin 153 -> 924 bytes data/icons/status/channel/res_288.png | Bin 153 -> 1058 bytes data/icons/status/channel/res_352.png | Bin 149 -> 945 bytes data/icons/status/channel/res_382.png | Bin 148 -> 1023 bytes data/icons/status/channel/res_480.png | Bin 148 -> 1015 bytes data/icons/status/channel/res_528.png | Bin 151 -> 996 bytes data/icons/status/channel/res_544.png | Bin 146 -> 906 bytes data/icons/status/channel/res_576.png | Bin 153 -> 943 bytes data/icons/status/channel/res_704.png | Bin 149 -> 968 bytes data/icons/status/channel/res_720.png | Bin 149 -> 946 bytes data/icons/status/channel/res_hd.png | Bin 207 -> 872 bytes data/icons/status/channel/res_sd.png | Bin 215 -> 983 bytes data/icons/status/channel/subt.png | Bin 207 -> 814 bytes data/icons/status/channel/subt_gray.png | Bin 144 -> 788 bytes data/icons/status/channel/tuner_1.png | Bin 182 -> 724 bytes data/icons/status/channel/tuner_2.png | Bin 182 -> 758 bytes data/icons/status/channel/tuner_3.png | Bin 130 -> 834 bytes data/icons/status/channel/tuner_4.png | Bin 135 -> 764 bytes data/icons/status/channel/vtxt.png | Bin 120 -> 872 bytes data/icons/status/channel/vtxt_gray.png | Bin 99 -> 838 bytes data/icons/status/various/ats.png | Bin 425 -> 791 bytes data/icons/status/various/ats_gray.png | Bin 509 -> 871 bytes data/icons/status/various/ca.png | Bin 287 -> 738 bytes data/icons/status/various/lock.png | Bin 264 -> 929 bytes data/icons/status/various/mounted.png | Bin 864 -> 681 bytes data/icons/status/various/mute.png | Bin 484 -> 6777 bytes data/icons/status/various/not_mounted.png | Bin 858 -> 676 bytes data/icons/status/various/pip.png | Bin 454 -> 726 bytes .../icons/status/various/rec_event_marker.png | Bin 587 -> 833 bytes data/icons/status/various/rec_gray.png | Bin 617 -> 928 bytes data/icons/status/various/zap.png | Bin 522 -> 923 bytes 147 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/buttons/0.png b/data/icons/buttons/0.png index 8490ecb6ea2ec8051b83e83f95facf16fe41d0f9..8d708d3d1736de455d340f7d5293da303b996fcc 100644 GIT binary patch literal 708 zcmV;#0z3VQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0$E8!K~zXft(CEB zB0(6%twdswh!7MMQ6d3@hygVyDnvx>(xkFE(r6)CXwZv-BG@Kkp&$g2>kNw3>A#>@ zNYbPdECPa!az$)%-}&uK2It(n#yt2f%f5YYcXnrXC8$E7@GYOu&x^$(?8DvN-LFm0 zccBz_;_>)LFc<`v%e5DNzaL_;*za5}_bAzH=7B%}E-o&<1fS1`cm6KHA=vHqe-a9X zAdyHwqtSqLIt|y?*P`cbgPlV0`T6+{c=f?x0AhN5eFYq)SPo&uR;!i6;cy7y|LN`R zO?ak%XAxFxu~;~g$s~;vjYcE5xw(N}uSbs%)oQh!EW(P-W;4fRGNDm`^?D6Xr;~Zp z>6AJEi^T$LHXD~kSn=uUDaUHHqEUe1aL9SxZkIYlmzS5EkFesClM}|-*%^%xbvhl+ zuU4znA&NvIoR6?#gTcV?csw*h^z`(^`ISnAIz-WEl=Bf*tk>%qZnv98h_HCue|UJH z4$)@Saz4U}wOTC$AO5!5?KbD%-``V*2p7z@kFa8mM#F(K;Zyy7pYvL+7Ilbl&Tsn& zD?UCx<`|F1GzPF-E;;Yz<%K$AD(ZAP&PQ0WN~PjRrBXCX)ND3|C0;6(=n-C^#(q zY?jMq#?{po7>!2J^FI-av)SxB7RY3>FX8a;5H>%L4=nx>4u|33-~gmj>E7T=zP-I2 q;g9qvlga$VtKbm!1xpKs!qFem)e;2vB;Zc~0000Qb%F_Fp1 z$+_9Nxdpl9<>gIHO?^Fmv!>0OHFwss#mjErxb5NUq3#|07O01@B*-tA!Qt7BG$5zS z)5S4_Lzea6M$SVCBCQwS*V}Bk*y59Lf~~7{X)E)NHooNi*D8@N9NV1sL~%4#*|y)} zza8eM$8>6E&G*!tU1@Xe&-%%TCEwV7{oM)EhD*0t7y_1lHCvFu%ar8MW^E`gHzBFO u?>F!HmQ7mT;hZJBO7_tLU#@J+ea-LaU?H*KYOoE^6%3xPelF{r5}E)}DqQgZ diff --git a/data/icons/buttons/1.png b/data/icons/buttons/1.png index 47e0316170561631b59aa70c29d8d7912605741d..e4a6935e7de8584bc36db2b0a98b58c1c45f9608 100644 GIT binary patch literal 523 zcmV+m0`&cfP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ia1lK~zXft(Ciq z!ax*;twdBr5d=XHK@bEH1VL;>MARlPV6$LjVJo^S#249W-(jD?YqZiQ@KR{Kg_V0Y zCmRogbDS084_^r3KVK#(W?UFu*WX5?(P=y$gA)dW!MEvox1@N}>2$8OS`CWDq9ZDm z3bfnppW$%$;W96$YPAZ5Lg6KpN+n$R#f6`c&*znBnuaT}Xf~T{M+BXgIG4*Q*=#m& z%X+$oQk1M$sa~%;9 z$6_%hqIfo&u^kZ-N25_C`~BY50!*hlW zrRTUKa z-|q+W@VKJ*v(adP*Xsqh+wB-UMY`Rtfd^^O+;_k5E%*seL8-3m!CykgwdmuK1j7IT N002ovPDHLkV1kh5-;e+R literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=1c~9s$7tk&%(f$;r9d zxw!?o<>lo~4NXmLO?`cRv!>0OHFwss#mjErxb5NUp;N8D4ycE*B*-tA!Qt7BG$1G2 z)5S4_Lzea6MnT3v3Ac;C|84vzExJe7kzY$7aH@l<*M+tdX-p^0(^B4)^2N5#`c}!7 zG5wqM)_?Q1ACG$c*Js+LuUg9Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0rE*iK~zXft(DJ< z0bv-&og^euN|7HarKFU|#X&+M|ABQ-4lWL2QNszPl!GE$%0J+=xVzXR2mS%I_dTr3 z?z5hm*V~SHEoHy;(a`t#%sVrAM~2}z?x|j{zc(5Uc!X-T`f>6+^HMx06bfI_XcU6M z;6sGNVaVt6-?dupMRxjlk3=F62n7CxP$+~e|CHe+_lJ}#-E1~+E&Kf*a=Dyj?hF-sJRTA8c$_G%=Xg9qI-QoxB2?^lyG7uG z#2gL>7>~#N?U+ud{P*9P&*zd^go<4*mk7V#j}JiddnS`1N+G-5PSQcB*y(iM4c>xt z*6TI1L&Xk<<1UiPBvA_K_xsEq729mKyI3xlL@6YZNHBX;Y_V8w((CnzPRL*|VD=Cy zHknL+QY;pUPRL@hVD`>XvC(L}O1Il3Iw7;!46IfwvwMb$4F-b*v)K%j$%N>H42MHz z_Yx}B>-8e+b~~(AE20y!-EN`N=}1VWQj&Qp*6DO2+U+*c-41py=c!nu(THfZT4d~Y zuzNXA#VVCb1pX~?%e)8dUe5F4N~Q9N_eG&l{0nNe8u#rl6i;!RR4SDqm&+dp-y)?_ r=?!0`+H$%4if6$~codX!9H;#O%NE_G8ap9r00000NkvXXu0mjfXV4MH literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=1c~9s$7tk>Qb%F_Fp1 z$+_9Nxdpl9<>gI{O?`cRv!>0OHFwss#mjErxb5NU5#F%!F;EXcNE3{%*|lFXiV<=TSF(d?~l*SM}|c?Zn8xFpE4s5#)r z&SRD;vHy)L=kQMGtyvc2wcq&C`n}gzGwPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0vt(1K~zXft(DKK zDPb7Ltt6x)r4&h#A}J+5Hi{$*l47Cck_EC-@-w64ACM?@S9fWniKUH&I?6_O zacs_gu4jz*o;fq_RnE6Q)AY{seCC~bUq*nTDC%3Y*?euc+wctadi~eMQ=_GLQY;qV z1Azdz-R`IG`FxPe<$gCBjqifX;nnZ=gVX8!5Z~gAY!Z4%3?SiGKznvP$+PE5hAu& zEG!0t0o}MUJ$}n%GU4b?$LnM<)MtKdc1z#Nz>-GA(&~#h~;uQi$@a*g*d$k5zAyU7Q5Y!Y2^=IPb3nYz8gd=kw`eWTrOy}TF~uw zSwtcc-ujQw;%c?}hVMlr5`76$sTBXW-%Qb%F_FnB z$+_9Nxdpl9W#vtcO?`cRv!>0OHFwss#mjErxb5NUQEySU5U7W-B*-tA!Qt7BG$5zh z)5S4_Lzea6Mqb83iDM7%|37UiROsW71WCTa$a5(im|M0-zE7sV*< znb&@&?0#5PJnNF$UwT#3P2Qb-y!>}r@iLy@pS8k*95%BEJG?e%-jK1(T||QI15X9V z70%b2wKpPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0pm$TK~zXft(8xU zX<;14tt6z8Qc6jQQWB-a!a~BvLb0Bug{`>$bS#tw??88Tv5~)vc?T@!Eszb1$@VVB zX6|!+pN`)=nrCKCnQwhKo%8#Cob!lBhbW5j*ladm+U+*GhkCvK_u~1*r8p>;%Wvs) zn#E$VyGSOJtW+xfYcv|ab(fcyR4T=y(ddtmNF;FQuR1(JBog_Scs!1~Aqs_pbPmAD z#o=)HTSlW16SG>aq;r78!C>%9TCJ9nnFd_JqX_be6*={z8@ z-|v?a3WeByzvrUk@yOq=na}6a4j{45=aVv<&A0@2Tr3v(@in+6>i`maJf07T>)Ppb z_&G7t>GVVA3W?or_YL`cp4JuL{`I_=$z*cV5h1b5XX0)oQO;7lXm@Bbd!*cG*1MApVohW|`4wWO}{+Zm^3~DwSt!qz~0<^$DMXN4OVA c6-9aY51<_9R%~d*761SM07*qoM6N<$f`~vEF#rGn literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=1c~9svOXk>Qb%F_FnB z$+_9Nxdpl9<>gI{O?^Fmv!>0OHFwss#mjErxb5NUaU)@lFi;O;NswPKgTu2MX+Tbi zr;B3bYx3O_=V3+OeSW=#{op@icsx6FTxD;aG_2s64gVC#Vp-WzV%UOHGFj-Sb pq&-RKjLgM9Wi2PAk8XSWjsMIFYsGe1Z!4hv44$rjF6*2UngExnUJd{N diff --git a/data/icons/buttons/5.png b/data/icons/buttons/5.png index 8bdf034e14045e1ed8cc707abac6bb46d55fc694..05fca0808702847d2010717a24cc3b7c1b2b6437 100644 GIT binary patch literal 616 zcmV-u0+;=XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0sTotK~zXft(DD- zabXyTtt6z8Qc6jbQc{XUQofaBWn=R$Eo^fsB z_kPcPJf1urj55EvbkhC1&c|~;WEepZ{?zOBk7lz8&rq#aKSj@9Ns1eVLg70ekAu(W zdx~&44EcQiU#(W_%EX_KXfz65ulH9727`FyUot!ex7*F&_xo|rKa$JkxGsWDN$hgD z7*eSeJd(v?!F3TTb~>F5$z+mL?`J-rb6tdr9S#QrF64Q}<1utP9S(8fxh_J*cDtPc z7xO&gVsJC}pkkZN#t;gHi1L_9rNYhJgNm(ID+As#x3b^wVK5j#EEeN>C#cwLHZueQ z0iwAb+(9G~;kpPFn@lDKypK1V4a{aU==FNg?RKT@%Pf~mu8UBy(P(@Ke6n`C9nk_D z4hOJUEZiIw8w`er84ia;dyL29;by2cZH9_wp<=C8%P^TtNcDE`Xz?;!b`dJpXfzD{exKB@XSG^M z@7~Ma2`W~pR2=wdmP#dPwOW)$qXCIT;_Cc4l309Pzwo*!6pCL#tyY8h@%TpZE50U` zN+rnU@~6Rjy;v;1Qb%F_FnB z$+_9Nxdpl9<>gIHO?^Fmv!>0OHFwss#mjErxb5NUQGW8`O`smek|4ie28U-i(tw;+ zPZ!4!4q4WNhFpgXB-$RDD<&^|`5@;FCyT7i?n(jm^^dO|UAQ~_Lb65YR% zF&{qvbKbj@&);KKd9yR#*%jHPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0zyedK~zXft(CoN z>QESmokUbhMGy*#C_+&zLQ(Jw1x2dhtV_j3f;b3Hf{S$M(9uC$ zUEI{AbW-k6JM_LcZ*qF*Y0}=o{@@XlbAFFWPGV%3Mx*hoUavnjn@u={YPI@@^Ze$e z_~q{I?(OF02E1PHNrb~;$Y!&DYqi=y#(g|RA`x)A-9JJw7{nugk>M%0T(18TjYjck zpx^KF+)Em}HlV zudc2{j7B3;7qVC^fLmzDWHLP6ZkJy$sV)`UY&M2KAOOeXkthY}=Q-a&#g~_t482~D zD23#5Iewv1sT5Br6cTklLd6z~h2i1hfhdK1-o}i_V^QxNDmIx+46D_O)W6SQFc5VS zDmEI842Q#kQ~`Fo9dJ)3B$G*KwOY)z$2gr%QJ;$SdOgGQ^E0Ud%;$4vtkda`5h1s? zx6C*~#TOSB49n$`)Bv{IEi+aq6v&7W-2OO@P_a&@W0+2-q$b2}x6`p=u}Jm`!H48y z7olRUR?Cn`BuGuja5&`mTdh`Duh(QRz<$36v)L@_Q?W*)5iy(1NL|Qgvk@&E-rrJP zDn2_q6JanIU^1By1sgn4{Bx4(AylkVslLSH@j$6mf_A&jlTN4k)0dk24lk}$Dld3l z6bi+UpjNAadwIN}c!VpfR4PF(m!Ay2MYua>fiKeYa=Cnuzk;W5DkyC<8t4B25$pxv TEqtk000000NkvXXu0mjfx4$$$ literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=8-G?*4)P;i2K-k>T-) z@flee1$hOPWtENfja@xmlc!FeGi%P$#Y?YTyW;NZe)LncI#3T|NswPKgTu2MX+Tb+ zr;B3Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0mw;2K~zXft(8HG zK~Wfntt2E;N|BTzB~eN&6bZ@3lGI3wvK526ES0r|vYOvu7W{)*D%sg7Y-hp7obfrw z$#p;GPQ3Np?&AHPb55u3RX_wmc&i9}%Mdj%XJ5D17U7K^a5ETYk1dYA zCEDX+r_(8m*=)v?G=)L|?QyZg;rNqkwaRof)9DoL0bFdi+aKa`xyWL%U`m>FI*oP# zF1Fch59#%KOh+>wkI~)*F1A=KcY({;?RHE_$l-7xKA#WmUf^Q0*?gDLXvCB>gTVmp zUBksDlL;jp4xe{;$#%OXR;v~5Uc<#kqY-5?nJ^{I>4Sy#ZsB5s!5|@%$uJ$wd_G5e z7+kE==_G*YI=Ng9?O|}SMxzk{$4MrWB5pg6IE$Oj<{m^UmFgvEwOY7~BZxmzsT5JG z)kLXOJ`Mau>h<~;{7ChUM&lD!fg?N%NCiRA{{q2&wqV3+w0Zyl002ovPDHLkV1n=z B_sIYN literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=1c~9s$7tk&%(f$;r9d zxw!?o0OHFwss#mjErxb5NUaXPKj5~zo zVUc-E7SrFKJoWY4jX$qmoqBE5UMa`s&8WKkVn0LpBr~4(sm)9alQ?$!H7|K#7`b)^ uV-U*}+p8=SIy3C7Rr^+!Ts(K+FaP-^7B{55Qw@P`VDNPHb6Mw<&;$Tl>RPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0$E8!K~zXft(Cz` zDp454TZyPhB8Z71VJHd_3W^9KC?XPsAa3R9N+Jk?$fx4Caj6?u3L;WFK@j9EEC^f* z{R_F!Mde0)i)zvPp5M&%(siabcHpPZJ#)_7JIq{nP#nkoDijJ&rBVsDA(zYjUG@Ct zOYz6q+1W=V5&@sjw-upK2r`+>zkEL5+*y4*g~MU+dc8kFAP~TrzwY1?+-~=mq*5tZ zT^t&X22`t6oDl?rLCJI1U?*Sfa=AoYTwK6-JO(MfzrRDL)8S_*m8Hc;M@I~&r>F4t z_C{*H*3He0D2veI!^1;{(P%`Xf-WyF`SC;|0kheRi~=l|OHme~#SVvq;dA)$@saV` z?KW|MUzOA8WPF4c+iW(5+uK_b6;!EIs5cxA$tXa--)C}bXz{_p0Yf^S7Tx3NbPBCj ziyR5Z_-Jir5n8;zzc1qW_!uUW38`WA^6~kVgVM5MUREiLwYSRw|W};OlvQ zeh%ew83uy^|Bc|d)cI@p;%qkiiuXk>m;VSVl?wOo4=lcpMx&rmC_pBYZ4K_xtKD#f qf26xtS66@VD!7Dg!BURncK-uQb%F_Fp1 z$+_9Nxdpl9<>gI{O?^Fmv!>0OHFwss#mjErxb5NU(eX%59jJ$~B*-tA!Qt7BG$5zR z)5S4_Lss^nA>Tm;k>d~VSML(coqIs^2&jI9`EPN$X8?~$c9`0GaxH?!y(yFna zGsY!6uzhh#ftEsJ%{$?V0zE~n*K$t9q=^UFeie?d3b1G6<}x`7bPa>2tDnm{r-UW| DS$bl7 diff --git a/data/icons/buttons/9.png b/data/icons/buttons/9.png index aa720fb5c22f3fd1ebecf5b5839412771234a4fb..b5d56f5f2f3ece4eaca9f9c8ae43771a542cd7b1 100644 GIT binary patch literal 690 zcmV;j0!{siP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!K+iK~zXft(84! zB0(62t%9gXBp@h)Mgsv+M8Tg3k|K&pVWVi9D=oxEgPw}o*x3gKD{XBI9)cn%QXMu{ zf_B;jt-=+t$$jUyJ3HsNdp}@acw}e3d0%&SW_M($N~Q9pR4Tnzt5rCLLZR?um-Cei z#fwxb^$`w-!SDAU#m&tPB$LUX#bU7~+x@(TLLu<^e4oPg^)=r4y9}q`cDw&bJRXN^ zHVe&W6VmB4*OnT$4`y<~E|*J0G#Z7;WCBv^^?HD_l=2}o*x_(6+}+*5cDp4p(wa`E zBA);aw%hFtFE1~|&TF?ITz|XWCOy1%3or5_G}vmjQoLR-vGE#>MzrR1I$^WfkP5(T zHecgH(O~Ms;gD1S-rnArng9*HxVWH1A`xQa_4M?_)Vtj-sqnhG zx?<`G4L(0VXTUoVgo}vV4EsGE4?I6VlM1guARzM7V58B<&}y}a?cX}|A~e`wFfdpw z78nc$#QIz7^%_>I6=?x177LLVp}{(xPLg0S2(?-b>h(IrVlgn8Ot4%oNi4v4JeKs) zV69gBU*NOe*ZuvyKHk%=n$#DA?+xX>se0*fy#(uvq@(IvjjYh+OujSt~ zpU=4+a_AGF!D_Xd!Dh3O2(dby4maIH&ptF*sZ=uP^?Gj61j^+y+}_@D{fA?v;DYn{ z{5w7uxm^A!s8lN09UdPT+{VwOLZN_@lar&tQ{>^{;X59rr@3728~zJU;aD)VQmLH& Y0+KBQPtmP(3;+NC07*qoM6N<$fQb%F_Fp1 z$+_9Nxdpl9W#vtcO??ykW=)$lYwoONiB8C%c-!Z*O_^Wm|CrIzl>f?3g3qN+e+k0zU(S+%Ye2>mMf8jmRsb#MuW1C)l zp!wYyqbEnS?XM~^&+dDrzf zpEJ03vGB3>4-Va0mg)Q3wUatDIwlwia2gs5xNZ(xUfeqGK=DK7=i7hg>HpoY@>5dn zr2e^!@8#FCG4Hcry(@UU-E;l-vtHA#y)za$zB_UI?sVU4@7z+}iWTixn8Dq(h}UW^ zZ+4L{=Xycccq5awj)^;*Bo1w! zV{=S*s{Q=Ov-MVw>CR;>%Rl@zmz=e1f!9;ktFN?yrfE%8)0nQl=A^0WA09<#(G?Lj zO$n(BYW^{{9#RHbcHj9#0IQLjtYq==U6(d;r`zb;J}c79o|snf>wC}6yrE&6gXcV%lcFyt6KUHx3vIVCg!0OstU=l}o! literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=2BbG5JOL?5t}9dAEp* zZC6y-qpfk+$mp1h+m(=@J1I#|TAEsV`g-Qgo9E;1Bld8)Hc$^^NswPKgTu2MX+TcA zr;B3VGd000McNliru-Uk#811Ajv0EGYm0isDn zK~y-)&6P20!ax+q{~i|;T{F0e4jBY-aLAyGQ|f2v)Io8Q&K1E$YKI_xgMNWJiL--a zDK3JjpFxP&6OG(mrwCR}gjnc3pR_lp#{zfTHAVj#X`%MUWZMWN< zNVC~|aU7?;TrSCGvkBuxEEa=d7*f~ucOs>Hp3moGy(5#)CqU|00000NkvXXu0mjfbjsyk literal 572 zcmV-C0>k}@P)&xpfnI=6S2%}m=d=X=;#aqBwi}ftldU!={JgjH%J)fu+kxY}&0*DBz3V<$Pj9CDT z&2wuF##oFshzI}{Ad?J5L31cdy;0}*<1zEu97%=O(JQ*$F0=WJR8lg@{t!r-PvD$G zRoQ>D&%xUR0Iq&su@~)8Z!`cH$1!*FJ0!g~K_Nj=n$0GyR%>Zir_-VRuDyKU{<=j( zmJ)mb$pp<5#nEoJSKKZNi*U~2RFO27|$};pFoP{eFLq(rpst><-`eiQ{-lQYw}C{^Nqv;VA$H1Int2St>Z^@=ddb zt*wCZ<(T1@A={OwJbv_q$z;N4G@??eV2mM4?-8UTprFp-0P9(Ta=`OvFF=(b2(X^V zZgm%@8Rc?0?^zJsWRiv3JKO&}Ag@%S*xceGec&jWCjWcRpMC@MT=x#q|Kr^N0000< KMNUMnLSTY+Z34^y diff --git a/data/icons/buttons/btn_forward.png b/data/icons/buttons/btn_forward.png index cad43950b4e18dc11a5166a666f53ba142591738..ace0ff12a2fbb5637d18738f1ad94679f6ade493 100644 GIT binary patch literal 530 zcmV+t0`2{YP)VGd000McNliru-Uk#80vkJaO+x?x0iQ`k zK~y-)#g#E@!ax{?-yDgFZjzysV+KJS9P|%}^*40t6hWw6EeI~5ErK{XcNPi`;wb)r zQbZ6$#GfEU>`9E=T_@XGn?#7x7ryPehr91S?j!)H*Xy^8v1eJ9uMi@x>wXYI9xcmy zl4`ZugKgW^d_E`Z^*W3f(P$KgVF+Ei-`#UaLzFt4pAr+e0w+=jRG0Y`L~!chIl-VMx%jFr-MWy z0mj%-Ns<)E>`zaAw<4KLqTlbM*=+u~Ac*l4?^7%mF&>XmE|-tQeoUYk08~{)rBcCQ zFhDMs3uN;7{GoW?aKD@~IX^GYcigtyE!yoiTCJ9+%!~09_j)~)N+sVN`Y}i1$z%f4 zG_hDLJcXw)U*hF*iE6cqZnx_R3n5^drZ00K=A6SYj6hh|_5Xh>E+=*z$I&!Rqm-UU zD9hOGcANls&1SP8goOS3loZ&8}ymQrXuO&^2BkBGZt}z8UCSQVnL9kNwpU>R!S=gt~{?$ zC=`g}pIB>eTQJrjR*UMj#@WuBFuCE8v z790-u7sKBE9xu1H61-pEPae8$!5G9zGRjGD6J=2*-w5Qbq=qpF)#dGxr*)zuHQ=P~H_X@C7fYG#J)d={-W ztyYV4I!!*8CzVPOgaP6lpFg$m0fxqafH+4OhAb^TB=7_7MG;ylO3NkuARvk&P=d7< zYeyf+2QIC#nc4fZ|6H6Xijv$6Ent(4^nvY8yYs*6{Q5T~#rw|VNFT%i0000B diff --git a/data/icons/buttons/btn_pause.png b/data/icons/buttons/btn_pause.png index c18fafa40af1986e5d09fc04263c41c14bcf9496..a0f408b19c12c85ba6b0ad06dd88f127a71da4f8 100644 GIT binary patch literal 583 zcmV-N0=WH&P)VGd000McNliru-UkyEIT>Vbw|@Wt0n|xE zK~y-)&6B^2;y@UN-^@-jYixuRTUn;H2na%mjo|$ca>bQ4%VFn%Ad1{wV{LiGb@pm) z>w=&bBB|6uEhGVdAmU`MQj{1GW#K+ZGxOx(<^3250E)%pH_rKQO6eP(nEiggCWQQ~ zR4TuuLZR@(b=`_>+hny`J>x|v6oRhnLesQAR0#2XG#U{?2(sBMbX^Cf6!ZBUtyT-& zZuhDrnM@*;N~=d01_RXVbqt3?$u!Ljm1X(ObzM}eRalmF@pC$zMkbTNWHPxp zHw**iav6-V)0t_SV2q(wt3gqeR|)`}bA-cTUn@mH1i}*Tz@HBOTu@4ob{9e_R{{ z9^reJcg}up;-HR?2|lIc|5JQxdDmXvE%DvUd%6n8aeSbnC~zFdCtk1DAcXk%bM_^X zNaXwdK5aA_h(@E>Zns!07O-s_xm*sNP6tAWi*Gz0V>X*15{Y2BTw*$%qS^&BXX@+5Zk!6`YE8c82AF8UR{{bR5 Vr+Ed+nJNGP002ovPDHLkV1gU6{XPHy literal 566 zcmV-60?GY}P))M_=Rvnk$tyz_quT((dU zLZH=Z0dV@^l*jLnr1O+UqX9s(+2q^91L-WqWg7}s76i$!`RAB)KF`gbo_>&~>Dqz? zaNZ$a5JK*AmSqs~q`$Ka9|F$1T?-;xSqX%lAt180U{@9b0Yq)%LBbYR2qO6uoO4K! zb(EVF;co&6y95jNK)>GypwsDKjRoL#a0|e7_nLyWC{%ulK68W+(8@3v47mAx!}G6a zN~IFTf@Sz+NUzspGMP{=M_6m|n>)yy0|5yEV+@r_g>tD(VXufW7Gn&DhgA+L2kgBm zVy#_ZmIPz(e6;^||DVTWtzGx41c0#xE|O95zvq1Q0+Jf==ZYee<^TWy07*qoM6N<$ Ef)jK36aWAK diff --git a/data/icons/buttons/btn_play.png b/data/icons/buttons/btn_play.png index e1baa70cab5893783650108ea7d482272dffbc9f..1dc49db850cde0fbaa7b65412b11a5a076d5f490 100644 GIT binary patch delta 635 zcmV->0)+j<1d0VAiBL{Q4GJ0x0000DNk~Le0000M0000M2nGNE0K~LxJCPwAe-6U{ z01m?e$8V@)00007bV*G`2i^x14LddKVsmc*00I|DL_t(I%dM3^iyA=~hkrY_tDa&Z zg4&CPAR-o`wt^A4PY@9D1w!huf{i3%Ar^<05fKXsSXl__9a>zGO`#Ucae~{ah_GVT zKdbJhQb>e=ZXOsIrg-MZyfg1me*ln5r9K>w#|%x=c4$DBD2js3X2Wneyl~u{7yzo(Dze!uL{YqO+$8Sx zdSF==qtQrv@nl)XcsxcjnMAkS)qamRn+;~O8S?o&DwWFZFYmYps=?l9600GfSL_t(I%bkc<4gRAb zUF>TlEC?d9ZX_3^u&^a$rQ#)c0C13B2ge05PvOc{3UEQ|!VRryVngBGnH1M{f~*9Q zl}3A{**!DojK-XPIc)-6AmVN3e*riPf$r}9ZWLGJH~qdJ-bdrnxElgdT#dQ?af`8* zU=hYzY+$iAAXs7(U;{%Kgv8aD@n{@b0OuU43V<%c7_$g4Ho?{!jIkJNaLxf>0lf1l z3aWfQI-=ET5r2w#etJ%Fq9BT@q9nI>{x^Y}Cmo0gwOS2;`f;6hyG^B1e_{4C!+D={ zDT<2X=6`gsl%VLES&c@6%deMwJUnDNo8f)(_JsuJ9qJVo`K#;4^*R^l=S&_SnLCH` zZe4=v>*Ko{4w+7Wu1gRE`3FPiTZfb82`maNC4?&vL{YO&aMih@che)E%X9GIfYQzm z*=%N=06nnF@9j}6M&$E(vY8Cl+Lr`=?hp~I2^b6p^lo}g zCKJl#GKE5ct^5|7=`Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D10qR8K~z{r)tJ9e zQ&AMh@5tDZk&%%=aX=S|iG~=&8WR%3APyi=Od0_JtpTd0Xax#b zT7EPu@HD)JejBQ138*_Zin42{- z^x?5F7kLa+Ta+y@Zp%;a#P+~RBkOio~E%61h>ot?JQ-K|pU=ukCGBdt%P zI{RH+_Mo@dR#T}Om7boa_a!eiL%$WOqocN2oX*bLJv4S5EyW=kmD)dO{JdBUGp

95N+ler z2VIM!)mUq9cg=DXU_|E8J*YMz#|UTWlR`-}l|@tj_z7mkkL9+u*jmXiF*{|}Pn zi!<~_VKauIJWifC+ILv4S{_pv83{A%v541zme&ktXi}jdnwmya#F;qV=CR)6Xl0Ji z*MWgBvmW2^ptQVZI71T(KSfhhXo{|9V8D-a?4fBayExh?NKbV*w3^HkPDHA&jX6VU zg}i8L5>4?~7B59Vs@O{tct=EO*KvxGMlyrLgf**}6+g(-%HUuvhnT~I+{M15p!%%y zafY5M{18n|z>q&)42yHn-_P(a(zH>r0#jU%wEN=S78O*Vbw17zeh*#Yn`r6<4Ef{Z zIEhZg+kFk2Thm6x5)An@i3QAxzx-qzV>P_Rw+N{toS}yb&+#sJg{fv9;R(u|F_`po zI8SP$Aib>V*Ij^N<^v9nm)KWYKEsBBVSISd;@k)DazTd1@SEJ;YjN&?q%rgK50V6U jP3~yQS`{*rG$!#6-wS#e|W zK~y-)os-XMQ&AAce`n6Up_NK+Y*WzOYKtgVFiJrDvsF~ITOXh=pnIRdr9MI4z(oZ? zaM^{l#YMq|WRcRw)K(>$Y;5j1XI$JgZ4DLczz4JWzL{_M#?0TFzYElWl;c$sScrhy z?1kC1Qmq_|z4l=(ZPXjJ2uLf{3ajr|F(TMLj0j={5sTgHjYX^>vJsVPg+{%R3V?GC zRRuu%Fvj!&M)F?7V2ohI;G6>>0`ShGC}@t;Uw3%8yv)VVO#nWX%e=jDllIwjM1>et z!8^Y%;Ie#!5CY}z-+20ZkrTb%!0)y7bRQWhHbtHMIP#6q4Y{5A+D5}boh!rb&U z6BCn&2tGR?kU0km8UiYUSj%K_l4QJyYQTymiepAcMu=id2m$Z+gVglSr^Qpne|jSC n0^SXB(u{zGM!oUB@BHL9Z*1^4t1{ir00000NkvXXu0mjftKSLR diff --git a/data/icons/buttons/btn_record_inactive.png b/data/icons/buttons/btn_record_inactive.png index 54c109af792497bd24df0d1aeeb9f0a16d64bc68..4d5d364898ec720f5ea43d932b8450ddbb95b884 100644 GIT binary patch literal 971 zcmV;+12p`JP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D17Jx+K~z{r)tK8W zbWs?_=UxiM4L5F3nnIB%Xe2t4T6aS6BC4Q&SV9&EP|0 zW8?4e@GzO2oJ>kaM@LCZOUplNQX(#^yRX5)K{7TrmegQEYHMqMT$r+Cdn{vthlhto9m6gkZ^-BKX<(U%MLIe(MwHImZ?d?fLE-x?1`T03T97kjQ{rz#hb}&7j6>+@1 zy4}8B}ZOdph?Hr*w~QtSkfk4B6ve3B_$f0o10P*>zqVUH$4=0;#D;w%*Xtgo+27gbSF z!DHCy#27Z#;^Jak@BI8c^{6y8HF3}M^t9wbQ#f=&1Mrq*8#eMYp9pU#H#b*fb#+xL zP+D3l#nsId-}CbFj9xpi)L1@vFD@>OIu+z+J`vtfPEL-7dK4)tDw5)bg@xqt@ln!X zCQM#C@H0%*;%Zo}Ql6WMpLE<@4*ZHl%1lK>GgWk{sU*4tgNKP-1Gnd002ovPDHLkV1oX*)~f&j literal 591 zcmV-V0Xq0o+MM zK~y-)os%(78$l3-zn#5{jGLUnZsJ20g$qRF!fE0@N<|rd0DmANzXefSxFdgpkOoA6 zf))i!1}RBl5rK{vZg(fe83RE?AtOC$n)i0z>^!shcJU3+1yY_?r@(Rqbmy9LX{+6O z68rGrFzp}pyAhDK+Aa2W_AnyYF^mXe1rdwA>5WCKA+iyzc8mT|KNSGy9I6U{j$w=$ z1B?{Ch`|`ah`~7rKm_2OM^VrM(=*d_UU!(CodsYp81Q9xm+bPA=vj=a;GMq}aCtF7 z2!UFy#?rebN~O}oZ?oB?Uazy>TPKVHc1m!0F~L0xiqh$H?vZb*TrSgYzvBCkZ{&GC zu}}zjhk8XrpwVbNy7`w23k(J)jIOS5{;t5-La_q<>-U}gJR{GqA6f_mf-1+yUmqp! zAM8&ax^KZbG$^Xd=H@4|EPFt{xVWI#>yac0*2+Tx0M)>7IAm>YjqROnvMeLZGPXW% zvGQSs;c!U$qD~ygf80Ut2q6@gCcg``_l#`Wr-A_hA44002ovPDHLkV1hv}{PzF= diff --git a/data/icons/buttons/btn_stop.png b/data/icons/buttons/btn_stop.png index 319ed8d9db680cfe939a2e520b5fa79c634e448a..93d51947dde13d17bd67fbf4024992bd30b25d3c 100644 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkEjj?6oZ8f4_-wYS=cky^ q(75Ygm7mXXlFnYcf0Iu255~0`tjEO<@&Y~0z~JfX=d#Wzp$PyrU5d#7 literal 484 zcmV?j2&fJmnkLMqNF;MWbS^^gl7@xd9DXKyBBKG{-yr>uT zI08jAsJQ-mji?fOh$BfYqkoP)o6Yz>zv0c{A;}T|-2`nnLC*PEGQe;+>grvjaNW-^&POT7Gi$zF^If9Ieza?Yp(rqd}`U#?iKR#-9wK)L|!@9$9-B{4?Q z;~lhS;NUqELZB>5j^7=F$|lAlN(_P52d{`RcAQ>dnJg7YZ;y6VGd000McNliru-vI;>1Rfqai=6-f1DHuf zK~y-)tyMuwYFiZkj*3N%991`z)HFSo-Gm651Vzy#Pw{#M&B}pPf1pVNC;0~gYhnY# zdXH!ls8oY+5K)7IsJMY74H{O*QyuM`z1JIrlJ6F8@LaG)>)YR6Ywd5XElf>Kxn)`Y zOAv&gsDTmDg~ej|)AaQ8^tY<2-Kd@Y)OG!riF4k~7(*@X<>kd-;+%tX4glbsqkM_c zXoSIF_^+~|>-uka#uyBYG3dIEQmF*D+l{TQEhG{NI2;aWng(6hzjRI0P*+!n)zwv` z(`gJ14MA1aO59M+G8777b8{22EJF|kY;SKvk|eyozM@=J*)>f=PfriB*(_RGT5x-N zi)b{8NF;)nmzR$Y^!4@8@bEAZ5v{GQQAbAy*=#mSCX+-&w7k4bq9~Hz?nm<{QNu-5v{DOkSL0TKp;SwOos07@5yerlh5ZPpU+34C|1a$ z(I|O59`bsg(&Pbo~DQj#w-PNs#ux;z z*Gr0`R0QAD)P&R1Q{-|vjE;^%)3h&#L)UezudgE*3}Rtn0egFUl^A0T1|q8HlZf!} z@PNU=LAc#+q*5v9y8fGvA0HnPi^UKO1~D@;gPon7s(97pm7Q~rtE(&Y_xHo;bYgdR z7oRc3ViAc%0^{T32!%pOr_&Gwp^Aes2EpNQP@z!xat|~&H{+35v zHZ~wh66WUSs>=U&n}oKuHj-ueO91B_qA23{_!yd|fpd(-?sK#oCxPlzkOWdx6&hlq2UNkp+m z;Yzv0$=+Fwex;Kc82;x@Tw~O7Jg8@9^rD+nmu+c3{_WVA3%rT9=K%F`mIV0)|AzvG zVE+mskYIsFWHAE+-(e7DJf6QI1t^%|>Eal|A=lU;f@Q?||fw1ADgr$ZP-iykwR6 z`R7*aCO+?te>Q)%cYuDo^I3bj{gEDXQu7)wZMk-4lm4_R%ksLvRf}g`q>G?>( z(=Kuv^Q}DDH)VX@mwcnvufCD9O2^Y&v(J7*RA|JcydaUA9gE7Rr8ZCVmgeGSZcUU- z{Bdm4sRarf1X$MVoMt-vTuh9+TlJ-y@AC6A&c*?COnN{2!(a7jsZDCa!ayCp$NK{! zBr+^?5>2WSJa>6EJ8}X=E9YH&^__Rxl3BU3dKGbo-}hL5RXn;P=3U(S^gHFdk8W$q gF16aO<@JUALb}`0(ly&;fnmqs>FVdQ&MBb@0NQY$mjD0& literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=2BbF**4;C1oX>I#qT~ zP&qhL=gdN#Ype9$>@xXt%A}>KWx|9BbLP!ivS^8qyU)`-rk+4Oj3q&S!3+-1Zlr+> z@N{tu;gDrLxKWTXK!EkYUt@if$Jq}4Mo%?-RfTq1&urN|JGr@h-uh#^o)p{-xoiA8 zCCzH{H9f00wp&|DwNiW*I=_}Q3~sKGy1RYGz1A18T|n}W+=JQ0&EMs3R2V#IbbT2B Pw1>gd)z4*}Q$iB}iQ-pl diff --git a/data/icons/buttons/gruen.png b/data/icons/buttons/gruen.png index 70806cdd0739ceebc89953c9412fa14296f471a6..d4765156dab3c1b3aaf79c9b7acd20e59d91df24 100644 GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4N{&ijv*f2Yp?od9SRUQ@GW2NmFm{6k2k-#OMaE$K>0)GOs4>r2>n+eEqB;KTHdZ}>zShX!`v<` ze>G6_LHuu^Xw%8FS7IcCrp}((;vM(yt#)PWmI7m|Keol0etWs|k9~-E`q{{x@gIZ6 Wv@aJMYPdkb%i!ti=d#Wzp$Py)be&27 literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=1`Fb#@ZO**;^H_3O7S~q41?pie3GxeOaCmkj4aiCL zba4#fh)zy0V`FA!yIh_ia3*0n3)825$(*UDPIpfc(Ko)aV*2*!+M04~Mp|hOl5@3h zJ1Sihn0VHKErNFfgTe~DWM4f|K&@L diff --git a/data/icons/buttons/help.png b/data/icons/buttons/help.png index 1cb97bcf2106a88c78ad5d39fce3893249dbe453..89d1c6ebdba74159ebef191d889a5805d08f16a5 100644 GIT binary patch literal 579 zcmV-J0=)f+P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0oX}IK~zXft(8ry z0Z|yott2E;N+~I<d{hSqRzk1@6+qOOm*#;Y%o@)ZLMk#a)n%x5Z`SBUmU~-31%> zxt?R3+;Qfn%u~NPrHFe&CsOPrlgV==5&@sj z_Y%Qi5E6;RPq|!f%PyCFC=>#(*DDEuKmfn|D8nguJRT7Gue}!ju>0pXsMv0|KSe5);+5BOxm?T~729mKrx=gNyb@qKoiZ~B6J+q~{t!{HG8em^sNgNn^&vnah@k5>ZZaye#3 z2o;-5CQ-WGF0Td1X0yzU5GpnrjiTVROMI5!Xeb zP)LGWt%l3taYpe+G#Uk^QVDXo{AKVI$>;N5c#vufg~BJk1*h;TDCIa#`wO>gcqt0$ R>#G0&002ovPDHLkV1g^k{yP8w literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipS06W@H7nOtR8&lwG$|=5 zDL*&AwYhcn+}U?--8r)F$e(|IVj^R%T)L8zma}BhlA5|2-6kGSpkD5hAiv=MaKPZ@ z&-e)_%vs z%j%`sU>SX<#_?T1LIP`1nRiFS9YKc240i>&p1!%yRKngN%*D>QVxF>|1H;4m`r5w= Sb7X)HXYh3Ob6Mw<&;$T2JcB?0 diff --git a/data/icons/buttons/help_small.png b/data/icons/buttons/help_small.png index 5610f6941ec0cc7af9367ddf97ec25746965579e..2e6da8340176bc212e926c3a53c4615e78242584 100644 GIT binary patch delta 438 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 RfX4s;002ovPDHLkV1nAx!G!<- literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G|&0G|+7 zARQAKla!Q{la`a8n_p2;QBzmb+T1#6(xlmQXWzMX$H&d5y7Sf{pgP8qAirP+hi5m^ zfShJe7sn6@N!EiKeVGGASPuO3H|rD*=5BS+oWk(cVxs_SY}1LF*%po+scb;i3>*By z8NPr0$@<`N!JdfcrFBP6cP!)d$^Y^rCgsM7{4$>UkDtR5rFOTMuk6V(5p}+^V(&63 z>4`p?A;tn6!BaAf9{m35#=9ZMqJk-5?mC8dAR`;;elF{r5}E)a C@Lbve diff --git a/data/icons/buttons/info_small.png b/data/icons/buttons/info_small.png index e7f76c9912dc5ea86ed37e272bb13230bc6c0e85..34974f12543d5f377ed81a24d4874c0d9e8a72d6 100644 GIT binary patch delta 462 zcmZoERLtq{Tp(gAGU?*^*-oq!^2X+?^QKos)SvQBk;_ zv%n*=n1O-sFbFdq&tH)ORFUQB;uzxLy>{xsuBHHywrJN37e$sv0Y?Q6C6QJMK?%X1 zBAZJdh81aT5TAMVP3$@0Ewkn=a=lO|wsw}aoH{@Ivom*J@Xzn~Q*(WFcs}nWm6N9* z7VMDicMoj4oA-TcWn8i5oR-8N5$mrXsxQ48q%+-Hkmca_y8ZR5Q`>K6Z58T!9C9dW zV}ten>j_+wPc8{MFtgizap2MgH@4+Yd;L}GANO^AhmEO`I!1;dM&_)bj0dj8vRqxf zhbK5au9UmIa6yHIjMu`(r$<%mlrqRTJ8T>0nh&zf`V3;!~Slv~M8JN@+2 zmA|||n+sQ8O=|qV`u%U6nEeb#SFH;3((8NtgYW#(iy0wKn{SHTeD;yyt5b=c>^w=g*pnplf;+&Wq!D%vhP&eBY9xlFnGH9xvXdniG|_2Tb(O-D1?M$Ui=w*+|;?hTyL3L7=F zJPO`&FFJVOsZ3R^$$owNswssKt7Ha}9N+B?T-?lzCg; yEmuy{^hj9N@nM3~yxT3`>>gSaEDgW1zN!X diff --git a/data/icons/buttons/left.png b/data/icons/buttons/left.png index 504a1519bc5b028c955f3968070c853912ef3cce..ac2beda75c48b15def45983a84aa0abcf2058934 100644 GIT binary patch literal 1026 zcmV+d1pWJoP)VGd000McNliru-vI;>1t7*lr*{AV1CL2W zK~y-)ty4WqGg%ltGr6Nff*(m_P-H;_Kb!Z(`~k&i7Za3?K~tqoVWC1AvDCuCfG9*% z6d|rCL{j*HsjLKx#cpj37!e65CXzA9+YV3r?!D&`{C z4Fm$1nwmm99>?P1A~@#=hr#Ldl(q34`KqN zX$g`fL6&7~ZEYcw$zXDFvTE+j#KmF}p->3Z)6~sI9F95gExG4hQbXb721 z#xSZfexF#=G|bG*;Njr`kw^qqtJO4ga&iKP!-0W;0c0{6)Ac_Ziys#um&?Isv!Pfl zRxQcx?JXopf}$v&^6w$^^z=|ZpEsVuYPI6#<_72I=Lm&DMzt#SJ3c;!%jJU4=fl<2 z)u*XB=Maeql`azzUSD4k3Zwwzihg+}upEEPo4&#X>%xkBErU z=`^L&X(A#T8yh2w#bVMj#t4d{TuYKfH8nNgLJ$OMYipzZ{e3z(IH1nXP7+1Yq>&_v w>g($ZaJgI^b#-+*0Qx^*v)R(-?sK#oCxPlzkOWdx6&hlq2UNkp+m z;Yzv0$=+Fwex;Kc82;x@Tw~O7Jg8@9^rD+nmu+c3{_WVA3%rT9=K%F`mIV0)|AzvG zVE+mskYIsFWHAE+-(e7DJf6QI1t^&0>Eal|5v|*~P>|VB;K-Fj6X$am^u{-Py16a% zi%jG^v7;^hzlNgwmRX`kFMMo1b{?$#B;a2%e}{iz%%aDwZb|W-Zzt^AlwiFkp?dMI uTKmpjYqgh#^?daf-Fr2-Ep>&|#QM2$j+4TaZT13fWAJqKb6Mw<&;$TXIAc-( diff --git a/data/icons/buttons/menu.png b/data/icons/buttons/menu.png index fb4d418d65d7a75ec9cac34bb4e5c6eaeb726438..e88812a4c1e5bd3fa66aa01762453c01e1da404d 100644 GIT binary patch literal 1010 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1BXdOK~z{r)mKX> zZc!9Al8{J=QXVNqlDCu;NfOC33AaqhBab{T>Nip3oySCfsVhV#2EU|aAY{PIfSE_# zjOY%Sxa*#8`PaJV=v*U%d%pVYy`I)Od!N0}?*q78u5TkFBR@w+N685s8XEd#)cc)_ z$E3Zz{jI2|h;njr9KnKu0%~b#`8_;5?DjGK{46Xir0nc$M=>ui4=eHFgC)tx$Z#Z4 zJ2#M;n(9bu1IfwB{|y@&8mPIsnKCmoskpe9=NRpLwSlChBxQAVHJzWIGmnptDLp;i zV&B`_Q@imZS!`dyhld9OaHuRVFY_Fuov${KkdUBkYHH#jK}Sc2+A1n4yxMmdFOeno zD>yzrPD@Kml$DjmwP23X&Q}|VkB?Vk3C*~=x>DQ0!GTx%j={k}OKeR|4J|AzFx%SN zEH>l?^YinW)6>(`)6-+|K|Fl0Wj@mhwSl;}IAwi(y|+A~$Hzw=TU%SHw6v7xudlB> z0{#8{9D^6??Ci{|{fo=XOG->kWFG+@h&jjo{k{Hg%z>SqolkW_Z6GElMp;)^#{q!b z?dI|5=!n+V)_A_Zzt1Dk*Vo4}V!ODwpxoSCDk&+^B8`iZeFS%RcQiLQN2jN!UJbE7 zd|(5%x3{$(JDpG)h>D6**4EZ?0Dz^IRX{<{&(GA@*vK-_+uO@A&;w|6c6OF2al5;_ z>?42;GI9$fkGWXL|I!Jyfyl^6B~Bp$ZoI|CMXyA(va({acXxMFN=k}Xvd78E3Fj5e z%*?Qi+ydl*PKw>y+R}RLbV6+)A|gUrSy{;e0M25Zx3V1|o9$g)T^u7TFg7-3$z`Ts zYHEsQqe0N5U8 z+ef?c70bHV*jT>w?6AJR&OU;Pi3yg?TTk-f$TZ{n`kEgKAbHHx20}tYl+n@Ad}M;* z;o%nBM?219vkhOhxQK*RRaI(}7;H(%$ZeMgb6k-4gn$on!UtPUe1zISP*9K~sSN}K z1UQo1fblu-g8k&@=jSK}1_qMxW9$tL{J?jHzrR2E`uaMCxJQf=?;Jnqg9io%Jm>~X g;uNBIm&+CW2WU`K1FTMlUjP6A07*qoM6N<$g8OvfDF6Tf literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAJrD2+aZO823kV3v&CabTuefvT zPGx0fVnSkiT6#=mOkPf2L0&;|VR313X=zDmMMZ^=n@@97b8=F0Y*cK0eSJb)LRD2& zNl{5^N@_xULUvYmZdPtwbX-zmQhsiJEfCbzR#jIO6%@6#wDolLOz595apJ@&Q>RRu zF>ThISt-dW8R;2yb#-N>W##4N85tQ_8CjJTAefzzU0GF`otd4KkW^h=T~kw2U0YpK zTa%NOlbD#8lbusnUl$)6-_X#|+}PaI)Rdc(+tSn$8y%aRoE#SuSD0Uzl9G}bpO}`G zHhb>u_?Y<5ueMbIz06n=Ua7ZfBY0p)CfBu5qIavfdhUM?GF?_XFjl@m{CXI!H#BS=72K2 z16&!*f3jCF?4PW3;A*!(b;I-g_dgoKbzM51c}_CXQM?mq`+?#3nz9_P{q{baZ{OHk mR+V4MK4Gcrf4eJezZnhmRsPR;Cocu`ID@CFpUXO@geCx#BI}6& diff --git a/data/icons/buttons/menu_small.png b/data/icons/buttons/menu_small.png index 71bfe7335410741ba0bab73620d2f192a749d7eb..27c78f1506bc6f9c82307279855c7ab0a8112926 100644 GIT binary patch literal 579 zcmV-J0=)f+P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0oX}IK~zXft(8x! z0Z|x-tt2E;N-305NF@ zdS|-b&CIVJGv|Fzk2&UyaUhDKyv=5_<9t3BR+vmCSJm?_r8pT329H*&CCcTpB^r%} z==b|S)9LiXp?(~j&88@oO14m|)o|rE2bNGM6l?`fDbD3`wnE}eCPVOCE*DWO77cxH zI2^PY&$QcZL!ZRybeb?{wOSea>dnzQui(b>IV4V{QiM6U>TEVk{q1(EbzZ^E=MEAl zlS$&QESF2!>vp?Z#h7}%Zg7w|kw_3c`~6-X&*!u3Z8jSk^I(f{2Z`hHIKi`6EVMHr z)CWmBGuDx6wQ6vXI2w%-Je5jC>~=eC^bD>ROXtBn?jUg_5+Qi-B%#lPG3q=Ra|emT z;V{92JsgY0#OZXB`^?EIj7^BXk&(k4sFc>6w zuzz_^2X!9vJQ4>20fGn1<~<$MdCc=j?DP4EPNzd)S-hu%`hW9C?D2SPMT*Dc@eRL= z%jL2Kuh%Qom&XI*PyFq<-EQG@IxT}eJsb|d@gnt)Mx!r$3zlFNNEJo#{{nsy6cNbz R^dSHM002ovPDHLkV1nJU0b&3E literal 323 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 diff --git a/data/icons/buttons/mute_zap_green.png b/data/icons/buttons/mute_zap_green.png index 746ff165f2e2a2b44109b680d45930e86bf0520f..9f1102a00fb4f62eff1e4572c535f977077024f9 100644 GIT binary patch literal 1144 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 DWau(K literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipS06W@l`B_PRaH%%H2Kc0 zJIP7OCy$?;J9lndOWU7+e|GQKotKjr6B%>m(v>aiwzSl>_@?Pk2I}Q13Gxg64+9LF z&gh&6igFfsL>4nJa0`Jj&bk?a+68PNj`UX)un7~%Z$^fx2?PTP$y~0 z5{4&pK6CEfemFT=Xh!jgzdPJpj`u}7@O__Ytg5$EP;R$(msx|w@~!=CZA`JO&lnC~ nypUm#ZZ4DK@KvUek%@t^s^zxu($sfApD=j3`njxgN@xNAfW42_ diff --git a/data/icons/buttons/power.png b/data/icons/buttons/power.png index 2f7da6ae821037cd0b728c4899670baea34842cb..925ae491b25e92a1e18c8a869bf08aaa22b9c387 100644 GIT binary patch literal 907 zcmV;619bd}P)VGd000McNliru-V6;EBr}ESy-@%F0~kp} zK~y-)rIpWW8&?#@fAdH65UKV|TckoaN}QzdFt`x{IuuMJ1Ku zmOwxcVCV~YnTQA+&_ZMpQ6q?#foLODI3Y8QC2KVIYNiWGv8J-xfDW9^z2|)QyZ3zO zTm_&|DC`*L=f4l*@f1r~Y%u7JG;ROq{r%sRUmiU8>C1Ne*Kev-^^0zI8C=dxlltAe zVdvVlKU7_aAHS|v)wOOH0ZX~zx@u6LdOb#xua9No>&Rpq9&UdWtBO zke0QWvCL-2Z(OM$Pfjk@FJUYId2&Knsf^dN*?Gp(gZ^qXNHl!zE0>kh*m37VMR(}Q(!3xXE$3dG{-?%Uys}@0vt}NKZ0m-yA8!6 z0HWQF9y*Pks3ihCr7vH)ZLHZgs%bK))fN}8|KbGzMlOev$^0*mEt6q&Zx210G@1&&>+=*)w7{ZeZr~=no%qR;kdh*BMTfvXV{{w{1Sn z<%lJdxQBIT-u@sBEKRP1x zy!oPDHr?<%-adJP`}{eHY?ie1ljwEP)VGd000McNliru-vI;>1p{Ox)&&3n1G7m) zK~y-)ty4WnD`^xxlbOs2qoN>D3@a$?s)f9VR(66Ss060S22unuHqqE=AvV5BQltqf zBBG5pCL#)grqL#i7z9}%u%H%-Xl0_&{LIYv-7S_3hM2dn*b4_f?!9w4bMCo<$K(0q z_4PF_2*P)K3L=7G7ytlCl3=sh@GC(?SFNqBe@fYGHc>1VzkM!p&e7lBkJZ&xaLy45 zg>Zd+4M7loW%hT|H2=17&c89nP=R3>@cDe$+}y;|(-X4UEMl=3yk0Nz`8+=N*2DYz zyG`PpgL7{EetUa60)YUwwzd$BMo})8v9z>=U@!>NG_k$C4ZGd`Q_74nh+SP>Kg#7Y zIOi}71Ix?HXl!i6{QNv*S%xgjNT<_~BnfkKa{z$z^K(nGufP~X4da`e8%#`0K$0XY z4*=nC7^PAP!C(-DLILaR>rhqoOU9gYh@G9CKXhFO5di=$E-v8n`QUcDvA4H}N=+0+ zq*5s~G&EpgVF9|X%IF-Vn1B?Li$rfE1kJHye@5yr;GEar-$AQFjybB@Ku zMJS4bXf#@*Ib#gAueSR5_=wTbQM9zQAdyIba}Luq!59PQ9BXT9h(sb-SXjXH^fU^E zLd^_eaBz_F`TSQ#M@vf!QmGVjxg5sF$5AX6Eiac!C9JHhAP@*Z(==o7VfOO! zg0ZnNw6(S25-(OWXO%od%8*n%rh(@C|gKb1qV{l#9F)%QIWHO24 z<6}%tPFnI*B#OmiaJgLYdcC;4y{$bE#u!Y~tYR}fJdDG`L!6$T!sqirk|fKDhGAf5 zX9t?5VRm*F$z&3;ELY87j6vw>>7lo`H!CTMBA%b0kxr*EH8o`&4gi$PWo&P6L(??) z{eB!B9eueQ(=`7*>54w4X(AK~A)n7yS;UFTSgM$N7Rh0xm zp#A-QA|mp7y;Z&SpePEVqoacw8X7FfvP>S2hlq&o?(XRR{+@`4TrL+0f>70450WGi z91h1{cDtQqS+*bu0(EzH)9&sr#p7}6?d>H|6svmb!EU!xb8~Y6LqkKqH#IeJ0Q7%A gRn_9?=;&|%07lW>N;b(WA^-pY07*qoM6N<$f(fPHj{pDw literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!7%)r1n>(-?sK#oCxPlzkOWdx6&hlq2UNkp+m z;Yzv0$=+Fwex;Kc82;x@Tw~O7Jg8@9^rD+nmu+c3{_WVA3%rT9=K%F`mIV0)|AzvG zVE+mskYIsFWHAE+-(e7DJf6QI1t^&4>Eal|5v|+3k+;Ethk5Uz@`Vm-j!WJDsU3A~ zQK!p6DGn}{e=W~S`eX&Tc|>zvXD4>CtUp&4ti`o_k+zudGT#;b+om*K+OnhfqTKFj tf9op_AGoiQshJnK^XZM`81K&S{BveG{?-h>F$-uJgQu&X%Q~loCIFS^VzU4M diff --git a/data/icons/buttons/rot.png b/data/icons/buttons/rot.png index 6b5acc916827c6a3dc01afbf3ad2ff8e6917ea52..de280c8626b4ecff6152a8f94c50dd43ae224074 100644 GIT binary patch literal 384 zcmV-`0e}99P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ToF^K~zXft<_6v z0znjo;WNw<#0D!WKH6tDZMC)&x8M>Sx&()JaS5RbA%PH@JU}Ffd4VV)2-bJ)i5c-QZzEAT;gH=fr&oVE*&zf8lkF^>-)$6RuHIY>+lvS&&N}70(5v+`G zUoMkiWrW*ek?u+**5sPFkrAwnkQy_+Hik7xbLPUi)bsXfp}=a436B5Xl`-d+o;MS8 es*8MHqQD<|d-Tyk*2Vn*0000d1Gd2NC_@A=Pza zfv)13)gnGYAD1X}-e^|1DyA;!&n9$>@!I)?bIXm)c)P{egl@B4+yAn$+c)$%+sExz Vx8e_faR*w);OXk;vd$@?2>?(JQak_v diff --git a/data/icons/buttons/up.png b/data/icons/buttons/up.png index d18f6fa30bd2a3a9c432b0d0dc96c0a9976e043b..bead22165b2c7e81b58d07c2ea1a8527ac5856b4 100644 GIT binary patch literal 1030 zcmV+h1o``kP)VGd000McNliru-vI;>1THw>yDo55mZnF5&Vha#TVbbXDh>obps0?IMtk)xp(f&T&1_S_m|h#*FP0S z`H61;$-mrg_wV}i^YdONlZoK_@Y8Xe3tdVX5klZQkxr*oT}lZlWkI2o5}(O6O@pec z1@%G*s6q%hj`N?iZ5s^@4cOh?#s2<2Iy*a&&1MVwIF1AL^Tb~V`E^!N887K>qfdmHh198yYjcXwlLZ4HW|V19o7 z%d!X|palYfKWy6u$sBFl#=yV;=H}+Gy1I&$l@(~323^;2eSM9yvopkEF*G(dBAHA= zQItG?Ap|tP-=7!Qwrz}#j$(Fp7Aq?&SY2I(rfGSO=jZ3RzP`rfInWD=HTVPj(hKYskc)YR0!yFv&7 z%d#*uG=znP1uQKsVSau-mt6>fY&Hw8*PClSRaJ3xbcFHoarE@`U~O#;mSyGi2#3QA zg+h$S<0Q%D@|e5()ZzK2}#( z6HQG`j7Fm*$&HN-1_A+AS6Am43#ci!IKGMmjZ5{cyLd_EsXMn*`IGcz;v z`~5^+T^*CjB=7F-SXx?2(==(CCjEXt4a4BY#RY{BY-?*{Lqh|fo}QRWr5K4sa$3_g z>GgVfe01+-`Sn3T@j)d3iZfsT3T?0qW}NSXo&~%d&WKazfKISyffV+uK``WNT|HJswXU z4a4BW!vjA)KG@vcOpnLIy}dn>WLH-g4Z|R6Yins320J=BD5a!r+a$?!I?a}r7M7Kj z(d~BU(J&0w)YS0i=7uC`Sr$pMudk0KB_%8^Eu|6+2KoB>3X)J&6=P##uq+E(TU*d| z9g3n9T8|hW9!4k>!sg~CQmGVlU55|?N+1y6%gf8R?qkPspywL;8}T{Pr$UHd3tjnt z{&^@WD$3}=VDPt0CUf!j_Vz82i;IijqtR&N-%+5pFu;#DEdT%j07*qoM6N<$f-D5o A$^ZZW literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!7%)r1n>(-?sK#oCxPlzkOWdx6&hlq2UNkp+m z;Yzv0$=+Fwex;Kc82;x@Tw~O7Jg8@9^rD+nmu+c3{_WVA3%rT9=K%F`mIV0)|AzvG zVE+mskYIsFWHAE+-(e7DJf6QI1t^%~>Eal|A&GED7UIVn3!PC{xWt~$( F699+NYZ3qe diff --git a/data/icons/filetypes/movie.png b/data/icons/filetypes/movie.png index bafac7e63591bb72babf49d5799a6784fb8d7b6e..32a364e925285536b92407fbac07e41fe6fba4e5 100644 GIT binary patch literal 509 zcmVe*>PheDdEWWf?Vjh{)Au>wd%oRH&Ur0%VH6{Hol^R& z0dme`*oi)V;AMqroT$~E#0|}`4|i+d^CLkvjmb#<)*Pj_7sLmuNK9gL#J^e){*3)R zcB9|PIrsl5TEMHg&;Oy1EjU=qEtd{&VixzXH&z=Q#yK1+U5uk^cyzG|21%a5JgNo* z*@KINB+ubKu3;&qG~3XJUxV-zj-gv5Z@{*QJ1wM^+O1fxCaV`~SQOdIrNi4evkJnq zVYk0t`-TrSe>Fv^{fO@?O?eKFv8Dmp1di9ITnHEOG#-Y|5R$KBKeiXi@9}6AcesEr zD@lGEhfO*i!;V45Uc?ie#-)_ft%k<#;Q_8<3KK>0LtKt{w1w1lv0uT9Vw)LUz`HoC zS`Zc|yunf2scKLD#`wYW7KBSU5*GTDQhN3Wk;-Wd?UgX%00000NkvXXu0mjfj4a`p literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUWnp5`pQ^vTS7pboKj#+d zgzO4oPh_7ybNa3II&;!kI(j61 ztRzs5v%n*=n1O*?2!t6g-L3lr6pZzBaSY+Op8O-8kLBzC|Hgmx3kwT1+YMJ;Zk*-7RNk~~HH3zZf%226A@TybJ+%!U(6Y?Dv&SShf5KQmMM0M7)= ogf=081qNYjql%xMnfae#_j|{nsAqGFfEF=$y85}Sb4q9e05Mi+LI3~& diff --git a/data/icons/filetypes/mp3.png b/data/icons/filetypes/mp3.png index 7c4bb1eb852dbc8148c1d66c67cdc6c926e7240a..b34c76e3d183f3588597e4db0fd9a2c6f0c92f7f 100644 GIT binary patch literal 531 zcmV+u0_^>XP)tgaojFq&;vG;v)L6` zCt$W)V_#2OfAAIWa2uENzUpl`W7s(V#CyEObG(d**V)kt{MZTLNC6M=3@;+$L&v+R z#@n%gQ+SH&5%F!Dtj5l;#qcwJ^~tI$>IqA$n(cJB=AZs{3fO1CBUr+GV(j@(*r~l{ zE5F;7BSI-<8dq==i=9qsRbIfMob7ar;Q$wKHyL%RqRz^*xRnXBS#2Kcjf5GT?*W7F z*se<{Gq{(E?=*aaL7yrxHO&2cvCioXD* VlN#)1+r|I@002ovPDHLkV1kuu?t=gT literal 961 zcmV;y13vtTP)gymzpBp5DflMVsL?YjC1_e9r!tZ%`A(1od&hm}cwxcIeg6S;bvIX+mX;3txoGOx zwMw)V_aiqkUv8wI1C&Yy!r?G3PfRqIm+f;r2ka@{9pByZ!EbuA#=w&*)Qpy+IDH?Q zcAS7&Z;n8eN(z!Bf#(El1cO3nSJz8t`cD560d%)^byk&@on$B;Va+=Bk2c_0Yyije zIy}`WwSJvin=GrKIJsHi1xWI_>T(TNRaVqS02hZx=5sT%a#W-&NerTIzFo?S-~H3M zM;FbLb(7zVqNoc6*+!D0lq}035ZJ)V%IbPuU5$y*>kW!4KTi4NscSa9LgI1udgp3u zMgRG|J$r42CF7L~{mwX#=dV`;KAat5S+F4vp%9A$wUrivVbt`E*?C{I(ZECi5Ya!? z_NcY2Z@9jrKIq->`o??46IYfW7qh&O$FjT(U}XS@+E=Tr1Wl{R(Xk&E@@?C#3`0W< z3uqf}k~+#ye><`;7L%dN@a86F`yM`=dqW6rQ3XR3f&vfknm2U#or5uv8ML*3^5s$c z(L)qPLX<6hIC2QD=f5j*;qY3jA;lwbqD7K|G{*-)NILl|NvsF_{@I%|MQ5m(!HV0yIoJ|*!nf)JrBHw|DzNzMK9aQC;J)Q{5K(*3 z9QPXWX=Y(O)QlR}zF7Vv`^m0*A0KHiWD=pdx^xNk$?r=81B0^-4F@wP)`zt5Y#Pi+ zTN@fWUqTS_iqpwtHDe(%xTjbQEr??TPj1-l_OgtHnKOlIx5VGd000McNliru-U}8J9}p;4ttn0 z^L;b_`OmDxK@=pmAaM{_2*~`uVglU=zQW{tiGx%D%}Bgm5rE)Rg$lj~X2)N=J&he= zv5Lt8-kr=>5!0->fLE69B{nif92Qem1JIx-tB4u48BFHKij{fpdB{Re=|g_w;5zIm z-9gj3ChAJ+Vz(S`r$cpdHAmJTVR`oQl)mIKhf`1$mHP5}YD;RF;haIXD;rg)FWTv` z=iuld1)c)-uiB4OcD`t1f;=VUn&7s$sV}dmYH<~ctRN7H+sEx}vW?9}n-~1APTu@xiqe8WZV1O&y0SVv4o?Cv6EF~+M8i-zx0J&h4^y63&Pa456{$cZW_y3&KJ7j2xU4Q3)--Uh z_Z~NWH<6IoUb;PI7mul8CY)?6-blJFJ(kua@jAV1D&Bi1T&Hh(S0+KwTNSPb=f{mSN*(ePmd4%LyO zjRm@?PdHd|24q>LXl4;!rthlAI;n?!682 za}30ht(!WUsZCJb)L+Uo5)x+ABwYsc$DGDFm~0BLvheQ)Q=)7q}$Vzh)5(zVcJvPgrU$7 zimafZfB~AJVO6YHWDBNgf&{9hj%EG7DS=2(Z*FETVJ%D~8UX=Lt26dH62U545ke5r zBjc#poMr|Dn1+el<)&~}Ap^ky{6l_nvU0F0Rz@Nt1VcgcJbCD*PGC5YbbvTDO4D44 z%!tX3@*PN$#N)tYdi#4>Q@93082E?%gr9~f$t@wON9pzV#y&EVc%WyXhr!`N+;(?L zggdQHBq{YFg%BXYy2a~w7J9~|-!DNFww7%r6b;eQ-9e@&6OYS-W@y~|>)sgX$C$7$ z&_~Vj8my{yf^(0{!=CkfsQjQ3!!%Oz00tbrbQEuzm$o}?Y*@B|oQxcTp&(apUuDzM zP1r4Ve1kq7_B;g3cq)#kBo)>6hx=*zt_fej$F9m7 z^KmEVe>_jcq6(JHUxq*Er@6ful*BYtr$RsiLCdWc!qG4dRSgNeh!;Dl+t#bJ8;V}EQ?jt`ZA4O6y4KtAi!2i?_0;*P2 zQM#a%=3km=?QBhC>p8$FA0Dedzz_@4Oac-R2~u6JGMf$u>q__&N}x<+6)z}ahO z85$XSaeoj*BtGUD66tSBKo-@4A&eN!P9mzJq8oau?}t>xtC&0j zmcFBZMm-7(7{KJSakY6{`nkkMsK6&cBQWnR-Mkn068QFC$C=#-XCr^|00000NkvXX Hu0mjfeKD_4 literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipR~A>6j74!O#fm}Q?rc%4 z4sDk5=@J4d{1!F(ZG3;quW3|{_> zpMb)g1s;*bKv^LWX1sK_?hjD#x~Gd{h{WaOh*lN}ha*gEYXE9Y1qy!`Z;s9qbZ zo^krQJ(de=y43Ysj2}L`vt(yN-|sUs_sj}5S$4o;y3+Ekek)mCYRqZ)+p{`f?Jn2fvw@XEhJj&{*rd~6V%5$7y~yC{ L>gTe~DWM4fhnSYU diff --git a/data/icons/headers/bookmarkmanager.png b/data/icons/headers/bookmarkmanager.png index cc75c540a759cf8881dc6b42030e019200eb1099..df1183ba79b9f084ebec1f990bad849e9ad72f96 100644 GIT binary patch literal 1179 zcmV;M1Z4Y(P)VGd000McNliru-vI;+Eej)Dz`g(g1Sm;F zK~z}7wU+T)U%Zd~JN6TF zf*UrjP^8z>%=|sWv**u>A$dIn;e>lI@~@fm3#T3m^RV%+=W9+_OG45?DQ$i3jq z*JpT~cw8HafdjnB??7y zHHq(81Cc<4NFb7j*dx1^TjTc3ZIY`=cE@%z&^-WdS=K6gQktd?vqe#JwlGDDUw-r1 zF^1X1EU8QiZ8Xtfw91xKQ?63Cua2tIl!u=(ses(iF}vct_||)Q zy{M;9`cCPkm1tT)KpG$?74KCJG&3R|g4T4W2JqvNEAoh93Z%s-rO941{)m4{wub}S z1GAswm4 zEpGg9gPlm6XNS+?8rL6%dVRn&ssgVL z5!zpB$JMTHueU85+p=5h15%Aj>m1n15T8c0krZs%xVH~frJ!Cbmj5AoJSFeTf$faG z@?S#y8<9T;)b<&7wM**XRQXR@THt^}Z5ahiSp=K_(=*egR#Ro2%{XARA-$SLDTRn& zSr%=tE-~@t1oQvQ zW7~FfWC~w7Z8X{SENBSt2onuQeL0{wN(zWok}%R1Vf3R>hF%}SaU8@5i^)aSv+En? zheFX6>muF}$JH*wpAVDMxuTvG#k>3pyirq%7K|Jo;mBJ@*z?LBLc!3c`C!D5OeMMg z&2^@KnJ$0E;Sa?-oIv=>=iUY`?CjpjzTSPrJK~LQybVXr&GG23M?743=)I_ZtT>DV tdo0Y3d1 zhYv7JPGaynakt{Y_1^*-M+>GmzJ7Ptbosk`u?H9)*}M_5v2-tJm6=f4n0VA_;e`O# zm3nM(3h7g)oV$0sU2Gjw;f+nx&g|X$ec5#;1NFV1-ksf9zFd3>qh;pHs|x478F4KC z_HORx^7YdXrmWjh;gs5={r=qE>hdb73B}XT?x=b8?ymLe$-M8HES^o>UGA@M=Eq=p z<;I>p&nhZ68lG5KKJ)GWDQ)x3&6+FD{je9PX{&hmjVGd000McNliru-U}TS7zNqiWZ?h+2UbZ$ zK~z}7z1M4uomCYE;Afxf%$duX&P+R^vZg7GlrP`=`=V%6)FLv|l{g~>YE(>N0mtqs2E zWx<6fT~tG!n^)fI`n~fleRjVE?~HKdAVd4857UunPTAy~R=XFL?OeXtuc~i(eEaWG zwBFZ=9l-`i&~?JYNmiV5q2DjO*TVJNBg&+3G$(Ffb(??e{e>l;-X{Oj5hen$K**;v#W)kl2MU2)jX0$6 z=98{?_G|Xv_!Fz?Up-H+d3TRE2 zl>>!QEr0)lXD?sv#^u*D6`WwJM&`IbCb<3L+uZ%gmwB`z!M2P}Vn_P+VnU2YvP?JL zmM-Z;SD+`zy!!(``*@Gl3qN^6py~|=YN)c}oE09}aj&pBgAU9{=n=aJ<@CR{#EFni zqR*rblp2Pc+jIrWlykrK;5BP>ikWRoyLIeAOyP8b$@(%&7# zR>$%zmqy>28t$1kyJB)2Z54~=ZnAOpIwnuXfk|$;coia?oIqMDD!0weBr*JWR2tjU3#I_LGDtN*#B1}2hh zDxxI@MFoYBlZl1ojKDbI0P)`m0&VCIoEbSQBo1^Xh9@&rFd?X-V$hn4YCKe+Rz>Q- z8TI)}2j)8zlemiMY(*(%l#~<|giuV zL7$*s)Q?$$Zb7HIl8U@BteaTxzCYiW5aKvF&ai3AW7e+QqOB(>qsr6Ntv7X|H&NzT zN-9Y#vhN(2Jf8-`Ve{doxhp8Gj zR4sHj)i|^?q#>kVTGC!2fh?q(qApRVeoK95+j5)#wmDgTTt^g}=P@ui=>F$cTmP+E zqQ;HpVn*Un=t!e4PQN`Q^)f0=bD~Sog|d=a*6zE;mR~+$xH5b!{f^_nv5Dtj+iKU) z=iPe4ph6EZZLwlIv29xPnMQTYATJzKjbuYqGTVGN@4L!>?t9UTZ@iQM_MVn3>l_DC@5-x-pjRqr;%20@e$+Yq}^ez$JD_vmCbFH5F(I!v- z>zU+~PV9;+!4(Emrkrqd=_q!%{j(eOUVNu}_A=O(c0Ao_$5yI~VKliTIE=&Qs@gC< z+qV0E>Q8_DgW;)>Q(yL?q2M!)rj$GRm}F7k8NRaiE|#zLWVXZh*1X}4OoD<@-St7M zrY2l^WYoKlKjw#vxwOpcYzKwbQKjUqD b2Y>t@cB-@R-^ooa00000NkvXXu0mjfgObZ; literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ip*Ah_{lO~fnsvM8|`Po9) zeqSzNiQTDDr1E2v*6t_{mRBra#8~`0U2kQu{`vQdrRj@z@kCFcUjC9Gzu^BUfZ@uW z84H0@oCO|{#S9GGLLkg|>2BR0px`-A7sn8Z%gGh(ED{b!gvG_}C62T5D9lk8=#!uE z_|c_{7ZaH#B{6taY-wv_YhEJJAms3EJI4f(36G_ADVnTJ=IUS$5#6Y`=&;0zkIY3; z&Cb@dbYmCHQFZ9le)m+Mk2_$|o;`b5&b)jvw|Zxc%$dUX8%(EfoFb^B&t9mLCp~Xx zb+F(e%{;St)#cAv1fI{WUc2$*-Py*Xr@R~V3iRja0EJb`44!*dK8=~+VtHcW`#Y?v zGiRLR=yI?LuVCZobGG^Z&hzX{WA?urSUF@E7^WXua;zoc`!b-<7(8A5T-G@yGywo( CLX*k> diff --git a/data/icons/headers/error.png b/data/icons/headers/error.png index da889bb9ccc1cdc428b3ff8b1b07a896c4d3db8a..9a40245cd1d175ea9a4c89a2517974f7f4e08558 100644 GIT binary patch delta 483 zcmX@c^pSajL_G%^0|Uc@a@!w3im^Dz-HBn{IhmJ04okYDuOkD)#(wTUiL5|AXMsm# zF#`kNVGw3Kp1&dmsG-f%#WBRgd+W8m-c5lbY#-8dfZ&aPW=ReZmhAE76pV1TG?5VT zaMtDJWxW&-(0zejR47ewmRgb~FYof_9redfKRpn8ulnKl0}~Hh#>ERRbZ?lcxWR%c z#>=QS;amL=h7}W+baF>oNy{d@oUDK30_(JkkEVJk6=oR4MYfa}OG;XpUpxQwjNJTl z$Bdg*o~(|U_VQ=0$r-uk!@|ufDH9?LR)w7fa&#Z}xq7S*nbjjMS=4y-@#UK<3_YBp z{=BJQ{(Ls~8lVEv$Fp2dR3|yE4>GK-v62?=@fK4&TT^Egx8(5i#IHX}%+5)wDE8lc zld{JHqCxXy&b38GNJhFlD$wsy_Ynkm;G9S;LFaLk@1=ZDiJR8HkPIGNwV5k>o;yP%* Sp-dMTQw*N2elF{r5}E)$cgubN delta 311 zcmey!e2i&=L_G^L0|SFlq{3++Wf0&K;#$wla_82aJw_&d5|Y!HS(eMl%;x875fbTP zV)^s$&k-k=HEJqn{Cwt!i7XKkY2o5|eYJKjP%l?WkYDhB7+~0RM&~?Gl(WDivY3H^ zTL^?1FWs&C0~B25>Eak7aXEQLCyPYA!x0xpM^6d&03BW3K!HOufAFycsT`EK7@*MM zUC2_X#x%33>3UF%N~6rq3wL+3vYri!kvTZW*Q=>1HR0TmJr{geACM9EG)U()Vs~}p z>|{3LJ;%w*Yi8zLkn}#Txu}6pSj309IE`uU95sy}ypNa!#l^)P9mT{A(v>DWKEPn` zq(O#j(x(?0g@r8@d`m7I6?|lAz<=ZzkAMXOgGpb>Y2!l8A3!%Vc)I$ztaD0e0sx&> BZ*Bkp diff --git a/data/icons/headers/features.png b/data/icons/headers/features.png index a9f3056ed095722ef7827fdc5ffa1a290586d1ad..84daa0f5fe8f06c37b48b6e03ab0be235938b51d 100644 GIT binary patch delta 643 zcmV-}0(||u29X7j8Gi-<0047(dh`GQ00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0006eNkl(4b;ZA)*zxqWE3c&Sg9rH=702@@zSJllZH$>_aslk zd*|dn@30_2490c)mh1NNuKNW4mmmJx+GA2_pT}{&`?meiUtR5CTsTe-Lb>a9E!*yr z{E;5S3w`4`di$>LI1kjw2(JabJ*=#B(FE+K0v)jJZxl?>85HPnFad~6rVZI_8%@A& zD$s&V<|_pgw0}S>Ej3_yxrruVcUXYnU;+>e3wN-%c#kGvHx;N;fq)L;huvWTf`bV_ zq|-H+pRZw5c6S?CEcQckxj?%!47;g771HS&3eoWWCJttMJJ9ZoQXLeia)^ZQHVrHfUv$G|Pis#jo9&uyiO1m=*yQ#oA5EP=}c{fUr^h0#1-O<1W z&Zxj=3VhMZaNa2lTozP*N6py8R`ywpBBjs^k$^yj1 d%V)U|zX327)a4^;p=SU9002ovPDHLkV1nHUBc1>N literal 827 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyZv%WnTv?droH=*J#%>A=(-|GD zIVwtLc=+DPNXJbq-V`H~RM{A3S&=wXZAi85?w?;+njf@;n!I6-lDLh<2#eYPE zfZ}IN%=Yl`?Xj_2Vq*nFXGDaKxVTN>;rk*Ywnj$k3=h{87N#{ec5`&JfF@iK5nCc6 z1hn*siqa7gp*<{2M|k+|sHlChvAbeoc7%uP2n*AaKmY!?I00RC#l&ceiW<1wjKwGxR$N{wg1%b9dadA3hW3|S{3TQ0Qv@bk-S7fA?h=^U$(K;d`26WXE9jz}m zRzUSf7AT$n1N68_NswRgf6@Viceqk2P(NpZM`SSr1K$x4W}K?cC(XdXxW&`OF~p*` zck2Y7yte9 z%|)%3G5_4>@-vu6hu`0ScODPhQr-0?wL5Rv$qIf*t8Ikwx~5D@rm<4Iu{=b5jch4GyJ7Sc&xf z?C{d=6}+)Jj_F$CPus=fM}Bd$w`}PaGO_chQh2M#oX1}Nq>oWLQC#uY^SnT@gdmUV z-j{!6Acl8-FqxkYW4J|VamBG{1&t;uc GLK6V;{AdFJ diff --git a/data/icons/headers/games.png b/data/icons/headers/games.png index fa33b44f7f4caab65b3328517550d4bae61b3b9b..4bb0c9fccbc3e26b240f6b7062f01abd309330e0 100644 GIT binary patch literal 1354 zcmV-Q1-1H#P)VGd000McNliru-vI;+FEcr48lnII1lLJK zK~z}7&6iC~R96(ofA`+^-i*u#GRTY|6bnT&D$$sb#t442%O)*WV_3LxWn%0`7jKSMdbqk;1_=xw1XVmd5q?|X72oTht3C`^pEr} zT}`WN*i*lUFB`vPaD0#p-52N^>08EN_=YhArHhbBi}o+t*;~ICi6p0UWON3NX2P3b zG(CzonrJXe*{U)uVPOdiM>!Y_{bT(c|M@siN1wi_2*(vooCJak`}ENEL$q#cMdvi0 z=V7$LA|E8;M5rjKAYKxu)G5UlHae^Evp$(j20!OhUQ$jXoZ!Z9H{LW4rX{8@9Or0t zq?(rXE!fz2p2zUmFlSR|Ir8HXy6$%2r9Gx5r#2 zBUzDT_s6>z`JYu&qzJcFZe!z`jikLaj&f-4YNzMl9<&{kU4^Y|gb-AOE7=g8)=-=LVwK=#-68;9?`NWcX#UhvVvIqEJZ!Bs z=}elg?k;*B_b@avgs*+dqvdR^-^#(y4ibyTFedM820TE>3E>C_*LN53BWrGIB$A*N zL0#*jCJu?wvc4SAfD4V4jcnhrod^97=pF0@ zXUVU}1z#;##|Fq1Mx`R3cJcOHZ&^MJ0ETGYEBg^#hL2yE`g7JlgUO`e` zAf
    w@N<-7oj|TmS>W83d{S09T1Tx|YK4d;kCd M07*qoM6N<$f|rGC?EnA( literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipS5{A!&?!C~u^g7A#>&MC zN2alqP0vwGm9=j*zjNyji`12d)rEil{YhUGKVef#K#RxRs|IpFy}Ttse!>5d0E6ud zr8b}hXMsm#F#`kFYY=8^>gJ6C3hwuGaSV~ToNUp|BH?g^k&R7GqTR6*2pA7pE;zCT z2o5kmGtks%Z8Or;Y_MRT(vTz2&we5?D1fz)NkpVUW`WC-5QU&1tHT8ioth=jd=!{g zB{O8s+{x9UAQQ@=&T)$IH79#-Be|#5vFscssaY$4QDw;~FBJqg?LC`R~?o;Fw?77KGx^D+-m46v(cRX)ndEUC~c|Y{O zeEaS8D*vb59@qWy9cQ^|wbmvsTz5^8-18Qe<18Rw;YGaQ7w_Qf7ryH*Q6$2l!q-!? zxiAv28v%22oKFl1=DUD74+%)w_KX^hnUR3q2$+&>e_%*3B~`1vQN8|dBw%+G0C-41 zs#1BOYW3Afz<+K8JR#s27xBaHC;;$~fK;h8p>la*Bw#lJ##AajVn{IF1&nz}K&nu< zr(*HJNWg9cgj6WpVMq{?%H=}J=R+d_yAd!#zz7%d!)^owl*`>>NDz?9WCF@&10w;u z5pY8QLj(>OBH$WBf+49?>XOpwD@fJ>6e3nKx$mDYm;Jn)c!1I{{@ zb#5fky6;E-4>67`tB=b#IqhkEycY%V(Yn{w`h;R)e=Aq&7huDFHiHFE82|tP07*qo IM6N<$f=~s=tN;K2 delta 759 zcmVU8Gi!+002a!ipBr{0PRprR7C^=oc#X$JU)~J0?aHboFpR53=ZrZ z8k}Tej1&^gJU+ZEDzp?5v;+dQ1OnVVKCC1r>>M8K92&$_Qj`n|%nT0v6cXG#KFl;W zybKP!JU*m6I;1>0%oGyDL`IYh4)hcjtQ;E53<}f)0<1hfoPR7TtRyDX6c(fu64X3C z#3Ulb6cW4y0>lgs+$1LSJU-MkHpC1H!~_DQL_(AV0@O4zlq4q16cX%oa*RYmyaWQg zJU+A>9{e00#0(D16cYRt668ce%se`*JUY}A7Q_@1^b8Kv92%q)7St>%#1t013=ZTh zD)c-$#0(C^>VGO|pa1{>0(4SNQ~v0OWI!~&tCa1*!1X~J?^1QZb>ECD8g6B#;JSihX0 zAc2a7mIJ!}_JYC<73RZwSi*Pz4az z0ssj8CUZ`)_lCgWJbo$9oMGa1_^ruaD4gmO0Ahp{#Kw#J%jk^A- p#xSQ-1OgxZv8k2e|L^DhU0+PDd#jSlCtd&m002ovPDHLkV1j2#I9vb# diff --git a/data/icons/headers/icon_green.png b/data/icons/headers/icon_green.png index 5a0048fc716b1c3b3626bd503881644cff4836d3..89db085fad60b48267029e3d7f2aaf1be175ed5f 100644 GIT binary patch delta 466 zcmV;@0WJR01K|UZ8Gi-<0047(dh`GQ00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0004YNklC)xAiI3uvs2IEk2`Uor5(GiRa-1pp2r?)6lFsSkpMSCg{*GN)$1ZKlep~!k zU$)&?G;+V$^@%^@b~KMx^<|wlC0@pu#O=&F(Tw8@ez9Tvi#H*j#qD?=laf8)ugBV~ zMjE6I(KN#7BO(>tUN10B1`P<|B*f~ZN*bgM;aiB|dq^s{4ds_IR$eQlLE6azOa=`I z#it^co=c=b+J8`d-~}G}LV>iC1(*yP5Q1@lg>iv2NE?DtfWdu0D!9E~V3Z6R5d2#o z^LKgDAZ_r6KKeI4so*wvLl1Mq9BGg?cmrNwz!wUn4PM_v@7g03+y=MrVz!?p4blep z%0)&>c!3LE;F1Ro+=lJ5ZOoi!NQ1PK1(*yP5K_Gqrb|!Lq(RzXdS;g&WYEA19Gj+d z;*bW@HSOg8ArJdbmoGQz$my5^vz06$$8=1~92(q^opl`G2P;v2HVq%KEC2ui07*qo IM6N<$f>XrF`2YX_ delta 451 zcmaFJe2IC2WIZzj1B1(wu46zdHozyul|_%mW?l|UnhH;u3QL*|OP&f#o(W5m2~Qr7 zt;6Ca!jh)LlIHT~-yfMKAD$u=mMjyVBA~d8&7vHZEFjm0Cr^c^$b=;gC=O)nuw(&| zi%eSxi=WItvv?bzMSLYee!>62pdLc~XK+1m=LArSv%n*=7^vb12s2LA=96Y%U}W@k zaSX9Iy>xQ-q-F&k*QuVfx9-qed@L>N?*IR1o+he@?SAW%-w;@A>2T%M@77i3Jck3O z2eubJOj+T5T0nkn+pgrYm{T9~r*fP=Uoy+@Y_9n8+h40zh8;4IO0Li0Qr*XqD09|X z?^&#V%Q2QF@mDt1iY1?S`0|VKon_}p%)B&3;zje{R`FD)S<a3O{RREikTV+9Q{_P}wHiiIbxxj_a$dgG;$;z4O|rCJ6?Qqp~ZOmYM$O|Gsk4 h!urG?AKw3C-co11{e@{MBQT5@JYD@<);T3K0RVyqulE1| diff --git a/data/icons/headers/icon_red.png b/data/icons/headers/icon_red.png index 5b473d46485b046d8df819deb23fc399177a1764..30b582c1a2f50cefdeda57a10e8ceae52471af84 100644 GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!1}#q)$B+p3qu0-B9VwJJ`f+oK}`-gpN~aotzT(too*&%XKhOZmMe@5)!c zckcRs#P4zNtDkfKTI$!-Ox-s@R^;tR_qw0Lk5BkjPpf*(#Jl8hv&jnUe_hpG&bhCr zIm~KV*C`ERb^)1soJ%}k%-ONP;>xyj96)A^#Zn-%4=B3ARVGj-E1La?;?afMw)!jh zI_*9p2Vyz{nbAkgKupJ+AfS@hESFTac&!1c)&?`Xp zFELz7T%~7l?sLYZM+OI1ulZ{yGj&#S&5I3T!LPF77o0QjFLqJy@%Zcfw(zC2b;+ug UrHg`_fI-RN>FVdQ&MBb@0NJ#v#{d8T delta 350 zcmbQr{ElgYWIZzj1B1(wu46#TJHRKzbq*8DpMQUjXz3hbVmZUda)yiL3KPo~CYB>& zB3JZu&am;U0kT01mLq&TXSjH-u(2!wsssuOv0UL|xx>V=2gnr@IisgD{Z5ND&{(FD zAiv=M3{STkcma8w1s;*b3=DinK$vlAy*8gTP;|Gai(`nz>7|oz3pFe7xCDzV^@v)! zbmdKI;Vst0FVKRVgLXD diff --git a/data/icons/headers/icon_yellow.png b/data/icons/headers/icon_yellow.png index 7dee1f3b06f34fb0b8d3e5db439ee532111eaac8..937399d047a45ed31a4a5c9734724aa408192db1 100644 GIT binary patch delta 470 zcmaFG^ptsmWIY=L14D6D)fXVeSRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv@3Vz$3Dl zfr0NZ2s0kfUy%aTQ03|37!u)r^!iRerbH3e2hqR8nonCOEPBKtY%PCy(xpq6KJDr3 zck+zr;gV2U;1F}8saa>?o_p3Wlu!JftUuHEtY!WG66gB#tz1c;D+_kUu>J7wcAYT$ z?77GLx4!=TckW5w<^Qtm&VPEAA~3Z*QGnaI-gI_q<>e>c@h2Ge*0%NDIl&;GSaHm( z=0eJ&$FEPPbKjEX6_CS6& z`a)jTR-ugT!a0t+QybdDwDk@)v1ggtn#?ZTrpPSC%YXj798itqgGCo_Oiwt-YHPbw zAcrMn_0AR7V}Y*t@?%GLR%yR(M!AVY#s-F6`|tZ7JA9ZAtRv=hGaL7UqMJK+?C##! z>UH#_>;HD4JZ;h1jh0J;)=W5W9et6(wza7^Qpf7Xgw>^%7y09VdmPa)as3U99R^QV KKbLh*2~7ZlZP6D1 delta 346 zcmV-g0j2)s1L^{h8Gi!+002a!ipBr{05ecbR7J#+1pNN|{K^FU<{bRm4E)jrmLOk&rs2JV=4X26`maofgZhJA*5i)P5b@~NtDd91?BEkn*f sR@ULeR_02;oX)gV!;;S4v!C}`f0+gr)1;yd1^@s607*qoM6N<$f_hn*JOBUy diff --git a/data/icons/headers/information.png b/data/icons/headers/information.png index e87fad969d3ff7860d9ac42cec3ec0f2299d73a6..94af450f7ca7464ac34bde37be9b670588e387ae 100644 GIT binary patch delta 627 zcmV-(0*w8t0{H|kiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=0drDE zLIAGL9O;oE6MqSCNLh0L01m?d01m?e$8V@)0006GNklLbm0S6JPW#+)v7OS<^ zQoJKQlIJ|q`<^?q_W1sbu-K;?kV{Z`+q*3_n3FxhnLyemgpDHYe5|D z`%TAnn;8CtU-TFL;tTlp&AjJ5U?VF&GkklPnQ00eC>skjz;*9&v7yl}(4fTzVA*UP zrl;$|2Fk_)HOOXfaWOMLUl%(&&mF6)4dtC)4cO#l6{e)5 zsnjWqjh%^J$g{L`uDsEqY%EZORO$p5bMh=MmVcEudPQJ~L=lq7qUeP@K~PrS=ukEm zIK~3U_`sYzL2#zL(V=WCP=G|@2p4nmiTsVgnV3 z7Cap1yRd=t{e1lY5SK5GvyTt^>Dw;nUq8hKXgJ?p=X?+PWa~Ygu{XU*!$0eF`S$<- N002ovPDHLkV1g_*9Yz2E literal 298 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 Qj{pDw07*qoM6N<$f)xxv4gdfE diff --git a/data/icons/headers/lcd.png b/data/icons/headers/lcd.png index dc190f8bb2e6c974a82b6b9e6b2c97fba1df5662..f0ec8f8bdf27517821e2949c296ed2357b1d81c3 100644 GIT binary patch literal 2093 zcmV+|2-5e7P)VGd000McNliru-V7ZH5ifMQka_?B2f9f_ zK~z}7wU=FNRaF+pe|zt9?!Be0rM1vrpcL9d%a_ogFp$Cs>DV+1GnwiT2oatbjTpp? zh7i=mhlw#JlX>cc5BOka2+>4H{G7p9TTtUC1qGo4Er_+&wzOD#?>YNp9?reDz0jFt zlHnvf=iYtxT6^ua{_DTi7Cegr+7KKBssRZ&Zr@{pUL5T_&&z^m*ajRyfE1FLiV>O+ z;|u^X6$2nNAr6N?knj?OHbh$ufG0gX=@FO!>ns96+>2wZA+#X?N+@C~M%tvY&H|)y zJg?Zm-+&5tgzVX8~3*}rZ-}B8cu-8APrEg=KzL8XhISy z!RW*&r}|ED;rk0X<&a2vhkJSV+jmL-k|rLHGxEy_-TmEs@~=hm@6Y!`1IRl;w7XzJh(C$z3rZK1)X%QZflmpA zQVQoB+GrdOU-<|jFxFtL1p&VDqcv9JoI^>4Cq0Zc7#o4uS3U?LJ8>t(N zr^oXY{a+se1%3hLh2_-TS%WWqJS-S%m?@%v?KR!(F zPrW%Yi9{fBc!<*6WDJ-(ER-ZlSe9HyMR5fZIr%Mw7k>8wdpGW7(X2&y!Xq>x0zvJa zwXB@8k~`veuxZgIUfKBy3(FSXs(;FmIX7m@gvq>JuSBLkZ2 zn*n(3v)B0f#?SfRGkSdKbMnGT25$_~Sk;J!H@W5}y*Uu(6xa-a+)bNj45%ut0tY<< zJ-5nbJ?8}1$FCEF0cA7FCcP+b4Rsy}b4tV%OUXAP3si}mM7*2sWFA5Yw9(Nzb5p00 zhXFUui8KGLvFK1oDdwPmq#qnCO)iBXla3}|E(imXB}ocngruPh0G1f#4rt&e)Q0v+8MlvH@iBhUe1s#h?#Y%Ulmj1^K>S;t-T?;@_^U?4d&$+D_tES|F%OoX4hiaM58EoWBo zEC`{ju#6@1mQa_h!xJ88sF_{E(s@gnTRJz7IX!FyUS}LyMurU^|*I!uEjrzg~5#E=#O9pIcJ48y6E>=ZR@2P%y*1YtnQj1u1d z>}@VzyUbX6jLOnVzV7>)54%4k6{Hv*8>S{%!|R=|bNUn zF|&e>?ha1(oJJc>5C)VMmGbI|R~Z-?$db}!K{I~@{tCp=nd0Ju@C44esNlGWoDdn( zNoV>%f3i!$05K3sM5j(?h{(^#g_#l0%sa*rycp%&W)30Pfur&^U(K^5JOCU;^XGp9 XtMb&m{UdF=00000NkvXXu0mjfvyR`i literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipR~8l)`*w2{cb1-=4MM4W zEYJQVObs!v)MkrfUBYB?=hht-U6%Z1sek_c37qJzRHAf0-1RX~FJDQJU+{lqz~Fk| z&IzClXMsm#F#`j)5C}6~x?A@LD7fC!#W6(Ua`KLD772$Vs;a8767DORIi@Jg@s>?k z!2K-4!NOO8FN8_uD8s}L4Bm!!ScCK&7@piq-LZv>uS8N$mxF_sgEy7;!IN9uPYfIw z#q~YfM41xi1cZgPF&L7`Ph~N9bznvcg-<_Fh^D(Ytd%noN>hF8RqZVGd000McNliru-U}2FHX;qvKkxtm27F0G zK~z}7#g}bNmFF49f6w!rH#kQEM?5G>rO8u%le@#)(`zs zidh)-n>wo|6`&OtzLt#G(RX{4B^1n3!bRqdIg3Ah3JP-U4g-2@=kd$fc zq8``~e(~ts0Fj|0cpM$jp(v$@YX`59pO}v(HD=#GteY{DpP0{yy(hT(@>N=Y-AYYy z&GI>dWQ8{w17ZNq{_-5|b!iAG_^{vJH=_m0OW1VBYS-|o?Z{bQ^PB^(_wZ{`IAa^Zr;gEXa*q! z*T22a@tem9>cQo61%4F~=A{5nuZQ;<-@~F>@CAINI8!*7eUSMvOL=Z$F1wR=6VgLS zA?X|M<4n^Te16}mxdwpnOk_y%spnIg?>D2MAf+UIT{^BP*RpdoNfSGgc3@V`k-qu@ zKKjP`7R5SD4(iJ4=5qk`!L|%c3~=nTV_f+A1-gg3aoJtGnDrtm>XL2L6b+Z%g%Be0 zF4`Q;2FHd4aq-dd)Rfea6qB?tpC8R}VAjW{$GO#giyQ4X@Q3`owCyDCN?V8C`=ksrzi#( z1qBtA^Ix6k>OZa`WTa}pM$TdmEaxrXwGhw){5-3SqV%7Uo0JPe;#%Y4R@W`uE;pK@ zVKZA%&`=c>lWM{j@NwnNpZI;lDQ1E*3v^&b4lHFKH+@Xu6NO~1e~O?U03dB$8aMCW zq<_4hgf$7gbNwAQJ2w*>9ZT<6FSozDOXk<}=T%7}D+sddYuAugdT4JJNa5-F<;Q4~WpZ6+Hf zTT6(Gilb|=i^-YE)p+IC*s?l+7q-2?tGiw$HYyhPdNU^iQQ_)o!}-VK83o5Ix-S7uv_fL z(hKM4LMJXdj$LWHXzXg_`^oQD*bP_Uz`o3VR6JW@h|BEUg~X(qh_S`s9r03qp&E;3 znd4Ph19V--VR3N!<?+(%%w-Lf9rlK_g6CQpGG2)LPSJm)Hlkpi^pi|X=8YD z7>mimmW^8$@L?8=ib`R6A)fml2FC}N7(vEj0HwL59NKfpkk|Q@Ntl?P;N+E)GLN_`!3j&GNWF=>F4jsK642%st0KmPF10^{nloytxDymUA#>Z4e zC8UR_JXc9ecguoGe10F_{QDaUo-Dv-wndibED#|DYpiQ{I`wHG6**{%E^l-@!az~lwx{^yd14RO3zRaDr!U{`~g3wuAky^ z)8z&68mV&}h_lD>OvW>0J(flOllg@75Xa9Sr@6EF2VFWwCPujHy-Qwd9(Jo8UFg)^ zsN-Ve#YH-x@dR%ou_3|pFAqUI$R_6|I{P|#``p{K_q6|4H=p70VH&?}qQJd_Gk-qA zrKU?u-H!YUMSKNp<^N-C8jmxG;J~~KM$3VSdCr9d^1^oT0&0e%Bq_z#IO{%IFB Rh(Q1V002ovPDHLkV1gvxR}KIG literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipS5`09+$CvhWlEtfetVAX z;!WV0vT;K26kqLJjX(eX+`Msf+JPRcYO|cF=?$x@SM6Py*Ss|ysF$lG$S?Rm3@~gu zqjMf8%30tMSW-ssw(Sh7lVSjiGAAC%%1D3LfzAi zd=j>PiYonjVwLvlbwx%%Eya;ruVv>Ri3$@?H`!8ub=B&HYZoT;wcT5lD(kf>!EeH( zE2~1w`7|3Xy}DLUt62L#ehJsJJyBnOo>~>!9qlNyH}rMx)9{~q%v!TgvP{{rEp=+E z#0l0lK+*X3@u|gZM`kYgeC)&5eevho9r)%-E=m6JX6^^c(2nONXINQJ^E=v@7q2R+ htn^jc#?Z*j5a`}c)I$ztaD0e0swzMrSkv) diff --git a/data/icons/headers/multimedia.png b/data/icons/headers/multimedia.png index 72ea0c77c5e3957c8a06a0468f1a95ff6c58b3ce..2afb7e5ae718de3fd70375147a8c0c3583d77b5a 100644 GIT binary patch literal 752 zcmVVGd000McNliru-U}2G7X(oU5w`#U0)0tD zK~z}7<(E%LR8bVhe`kEv7%IZ75`!#Ki$FrbAR=l&7e-7Zt&|oLmM}ZFLk5AX0aqj8 zVg#Xupe^zb&c;P1g`%4V%P0zM{Cg71UG%oyH_UV3l# zQhKV?!I@f}Vqks%7cPADK6;vaFkFTmx0JN?_+St8-RYzJOnE#zS|cKiN5>gj z9AbNSo36$#I-`#o)(5CcjK(_dsItL`p*+LX3SH z!%`M4ms_ay)Uvp~XmecRBJwrD%<2ppP5ZTWsw=9~IHocYEwt6PAqW$nCu{-2GkyaV z0JBeL5lK3-b*Pmcb0;ncam4Jts*@)AlcTl9ZMd0!GHvs;)_7le6O>Jd2hvQcwB5Bd z8m;vqrcUQr%Ca+&;H0jZy$`7UkqhL2_a3Pa{2u~RPp3>rX08HUSp<-w6CQg8)QK06 z?_HpB@PN5%g3fJybJzU)5`-Ry4sAY%Zh{Qm^T-0~tLpQ2FV5tFjB1Y=B66??qH9qk z&(|Z3c4R=fpF9nVfK4OkZT9cqigmm!#mj)=2hdQY_18+MVFSgZlpn@I4!>|019$*D i2hJDh%h!Py!1x{zD>OA(@MrV@0000IM0bL&p1&irhk2F8*gzhDN3XE)M7oFs2| z7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr6l5>)^mS#w%Ot?VZ7%gsg%2pS$J50zMB;LC zf&=@Sg$o%C$}-pmTAYqr|1!4PSL*P@$jWLT54Xcdy?btD;*+PubK{x)?>4P%H9M9jCid!82D>vuz*Q0;meHB_UZ=L_U zr%x69SSDkA`UZIx56TW(KatdV)fGZs_qp|NqyY z^Dt(x+|8}?HCytAea`O2gy%Xdj^7NMZ&|Fx5Z!Qqk>Qzooa*z6!lgieFnGH9xvX diff --git a/data/icons/headers/network.png b/data/icons/headers/network.png index 400a1e29b7df548958332233e62cbe01c9f1d207..78624b11f583701af9848b13d82268e5e990b9ba 100644 GIT binary patch literal 1224 zcmV;(1ULJMP)VGd000McNliru-U}2H0T#dHzaIbq1XW2y zK~z}7#g;*66jvC>f8WgPZnCRxHdc(GMw3)pkwg$91uI1%&{7XtL%dbAiU;XM&!H6S z&69U89(svdLOq1)MT2QUQ$rdNs#dcJF_KNGr-fbx0Z!|xm_(kaB0Pr)y%7z9shfMbH6R_dcit7~-8sgZlWAt_R zk#REr?K4ktW$a3g6zJLjw5@F;l}#ZCStm=z$smhLw>q+#XgG@2nwEwZYW;4_8gO0L z|6y_=$)nUGOfg?oQnTa39juD1!qXngQ`A)1Wocm1iW;Mhv^KV4NXbB2YhvLTTI+JI zddnJk-9WU~OwLa-K0S_QS|!evA{LI3s85s|jmO*7fTz6DiUoGJ?WX&a?!b7yn5W9C51xG$RLeI_~!dAGVC^vnuiCKG=tdqqu ztR>*nxilAVU1adj!D|1vtJ-kS$9p*Y^;s_bdV#6=Dc|$2qu>@ex%VWgOp2>_uM#%H zO8|Ck?BLv?bBra&m|mD(o(r}$Z{vCTIp?pPuUftnpPwL^N^<%4%N57(Jifz$9S3Mz z+s5?V^zt;|6del1!W-?BFXkyY)pPQNJQ|HtbgJeEy-PJ9B1EhRO$|*XQ%RIo6$QFJ zzMgzBkDaqC=OAp^u!YAnkJ0E#IZHLr^-&i+pZ54XhRhHXvlCppbqPCX6S6`a+;xzy z_AXq{MMN;fVEC_Lu8my7^;{Za4IJHjl;%V;MX!iuSh&ii|F?cdpNt0169ElGLJ^Md zJx=%bZt_mqK89g%`@wDQJ-J7sKEdg)PLqfw@Ra9|ceHdcbbpAsf9BZQyp=Qi&tT_l z{~IAI1RBOC#wohR${G+|@_puIhN4&WC&wZ&EU`d=B^IV(k}YKYmTZVY*bHN0f`YIS z#`RoYIxoxHx#vCy&m^5i+7DeykW7i5^-wFG$ mfP=vIz{V9?`4sR2aP?pBWi^}8@M+or0000+n;}bI;OT+CRxtkHmhkNafNrlNX-lR7^>UR2`33)n0ftRy zbj|}sISV`@iy0WWg+Q3`(%rg0K*3j@E{-7*my>67vPd`_VPRwQlW1Qk!y%zChx2K| z0nTR|<_GBOuQ$+VC{z<^HJc*7Rf=J$MB1k5%$8plvOQ&W@T;sm+xThG7T%{%jV0Bt z*skl)xWs?s`?@)k6PHm!Dl=PB@o!`NE1T#dux)fv*VmaSKh3*|L2-?vM$E{^J`T*!_22WQ%mvv4FO#oHoqnrQ$ diff --git a/data/icons/headers/personalize.png b/data/icons/headers/personalize.png index 4f9333cccee0b8721d8bdc03af17245b790ef7b6..1506c6bfdc003eb1d2ff503af0ccb96ab98feab3 100644 GIT binary patch delta 996 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 Qng9R*07*qoM6N<$f-4-XY5)KL literal 163 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 literal 372 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 z zcA;TO16$T^p}xAFteYh|6J_|$Fu~hFw400e@lBC4f;Wo*6bVm>K*>jpRF46`{3Dt5 z$RCOS<5X-gPa?9vo&n7`@ce&t{)ENTOrzN`SKSuK_X@UP1KWYmfaV2?{0?vkIQ<7v W8llA&`O)0~0000VM%xNb!1@J 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 GavA> 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 diff --git a/data/icons/movieplayer/mp_pause.png b/data/icons/movieplayer/mp_pause.png index 7b41ef22704b50a1a75ee3ccf46f2c30f9ad316a..5ce35f7818285f4fa617a7a8e68fd8124c7d2197 100644 GIT binary patch literal 4436 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 t#Wer96WnjY&`g^_w0q8Zp3d{0 zosO3Z2Az8+;mgCzd;hv0zR&aW!oh|0Kd+g<0$|ShKv@W^0-AtE+2y>VAOJlm%~D`2 z-~tXbbZ|gYWJ3XZ5J-updU#b`&63aVY;C@6-L;oqgPZ|06(4j3z_4w5RqgWG6CaqE z88>ZA?FZ90Odo$U`U6ujK{J4163_M3ldh|tbb^od@tIyenMhb`vny|%5SfYu5)A-G zsa;AS4=z9i`i=W6ORvo~PM=U4nu-G=vnvpbgPBQ+h`qD)tG1MwV$Dep63$=-neu|2 z;GU&3%EFqO`e{*4#R9>A2%g6tvFE{)voYy}n5K@;hNj{qq(Bf#;E+QgWB06gMkRRl zO|MTKUlW=N4+66Rxl+dAmur5yaQeJopt&jg>Mj4-lo?1WL2akT8@$LN^$6nogG4nPoMLALB(G-+vLB;!enw z3nd|GwzSd&Ef~L8MSTUEqEr1R%M+QGZ=63DOST``g%V&DFe}~}BG)BHK#EK}3Q*y0 zJZ3XHk#BO2rxKM*r#v-}p5O6fCv0E|urM}|ysWOdUluHa=~obsa3T_e4U34q-rVuD zUAg#%NABP9#7})EP!(^>$T0~yq)0mT_m)K(0Wnxi{U6&7$Gus*JY zq-8mm9jz>lb6W=4L(sV;~^VA*jFwG)(PPbsaTLyAJQA`r2FN)zP{Is1Ei zpbcPkY#{Q;aZEy%P_$M;`4z088yG2ug$CYJ$^+CuvlxI1H0AclOi9Iu-5qQ8Y!-@&H1UJT47I6#3Wr));T=rd zRhg2^=EK|9?cD3DLBXzlK}yyUCfyh(R_Sl*V|p~`JE~>2u$pHl8_sKSaF3tI+Gmv$t<8 diff --git a/data/icons/movieplayer/mp_play_repeat_all.png b/data/icons/movieplayer/mp_play_repeat_all.png index 415c530b9a08bc256bc9061f7b325b9cf1026c33..f70e8824f139a8d98e87e1a11c200866af0f72cc 100644 GIT binary patch literal 4911 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