From b20720686ec44063c1207670f9377fc1ab59d8ac Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 7 Sep 2020 16:13:33 +0200 Subject: [PATCH 1/3] gotthard2: changed order of burst mode enums, added a 4th burst mode cw internal burst mode --- python/src/enums.cpp | 5 +- slsDetectorGui/forms/form_tab_measurement.ui | 17 ++- slsDetectorGui/src/qTabMeasurement.cpp | 9 +- .../gotthard2DetectorServer/RegisterDefs.h | 7 +- .../slsDetectorFunctionList.c | 112 ++++++++++++------ .../src/slsDetectorServer_funcs.c | 11 +- slsDetectorSoftware/include/Detector.h | 3 +- slsDetectorSoftware/src/CmdProxy.cpp | 15 ++- .../tests/test-CmdProxy-gotthard2.cpp | 12 +- slsReceiverSoftware/src/Implementation.cpp | 4 +- slsSupportLib/include/sls_detector_defs.h | 5 +- slsSupportLib/src/ToString.cpp | 20 ++-- 12 files changed, 144 insertions(+), 76 deletions(-) diff --git a/python/src/enums.cpp b/python/src/enums.cpp index e1bfb622c..aa32559b8 100644 --- a/python/src/enums.cpp +++ b/python/src/enums.cpp @@ -274,9 +274,12 @@ void init_enums(py::module &m) { .export_values(); py::enum_(Defs, "burstMode") - .value("BURST_OFF", slsDetectorDefs::burstMode::BURST_OFF) .value("BURST_INTERNAL", slsDetectorDefs::burstMode::BURST_INTERNAL) .value("BURST_EXTERNAL", slsDetectorDefs::burstMode::BURST_EXTERNAL) + .value("CONTINUOUS_INTERNAL", + slsDetectorDefs::burstMode::CONTINUOUS_INTERNAL) + .value("CONTINUOUS_EXTERNAL", + slsDetectorDefs::burstMode::CONTINUOUS_EXTERNAL) .value("NUM_BURST_MODES", slsDetectorDefs::burstMode::NUM_BURST_MODES) .export_values(); diff --git a/slsDetectorGui/forms/form_tab_measurement.ui b/slsDetectorGui/forms/form_tab_measurement.ui index 5a9766232..2d47c5faa 100755 --- a/slsDetectorGui/forms/form_tab_measurement.ui +++ b/slsDetectorGui/forms/form_tab_measurement.ui @@ -1664,11 +1664,6 @@ Frame period between exposures. Timing Mode of the detector. #timing# - - - Off - - Burst Internal @@ -1676,7 +1671,17 @@ Frame period between exposures. - Burst external + Burst External + + + + + Continuous Internal + + + + + Continuous External diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp index a9c7fc92e..eb0a6cbfe 100644 --- a/slsDetectorGui/src/qTabMeasurement.cpp +++ b/slsDetectorGui/src/qTabMeasurement.cpp @@ -152,7 +152,11 @@ void qTabMeasurement::Initialization() { void qTabMeasurement::ShowTriggerDelay() { bool showTrigger = true; if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) { - if ((comboBurstMode->currentIndex() != slsDetectorDefs::BURST_OFF) && + // burst and auto + if ((comboBurstMode->currentIndex() == + slsDetectorDefs::BURST_INTERNAL || + comboBurstMode->currentIndex() == + slsDetectorDefs::BURST_EXTERNAL) && (comboTimingMode->currentIndex() == AUTO)) { // show burst, burstperiod, not trigger or delay showTrigger = false; @@ -368,9 +372,10 @@ void qTabMeasurement::GetBurstMode() { auto retval = det->getBurstMode().tsquash( "Inconsistent burst mode for all detectors."); switch (retval) { - case slsDetectorDefs::BURST_OFF: case slsDetectorDefs::BURST_INTERNAL: case slsDetectorDefs::BURST_EXTERNAL: + case slsDetectorDefs::CONTINUOUS_INTERNAL: + case slsDetectorDefs::CONTINUOUS_EXTERNAL: comboBurstMode->setCurrentIndex((int)retval); ShowTriggerDelay(); break; diff --git a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h index aa58f7f9f..82471c63f 100644 --- a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h @@ -121,9 +121,10 @@ #define ASIC_CONFIG_RUN_MODE_OFST (0) #define ASIC_CONFIG_RUN_MODE_MSK (0x00000003 << ASIC_CONFIG_RUN_MODE_OFST) -#define ASIC_CONFIG_RUN_MODE_INT_BURST_VAL ((0x1 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) -#define ASIC_CONFIG_RUN_MODE_CONT_VAL ((0x2 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) -#define ASIC_CONFIG_RUN_MODE_EXT_BURST_VAL ((0x3 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) +#define ASIC_CONFIG_RUN_MODE_INT_BURST_VAL ((0x0 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) +#define ASIC_CONFIG_RUN_MODE_EXT_BURST_VAL ((0x1 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) +#define ASIC_CONFIG_RUN_MODE_INT_CONT_VAL ((0x2 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) +#define ASIC_CONFIG_RUN_MODE_EXT_CONT_VAL ((0x3 << ASIC_CONFIG_RUN_MODE_OFST) & ASIC_CONFIG_RUN_MODE_MSK) #define ASIC_CONFIG_GAIN_OFST (4) #define ASIC_CONFIG_GAIN_MSK (0x00000003 << ASIC_CONFIG_GAIN_OFST) #define ASIC_CONFIG_DYNAMIC_GAIN_VAL ((0x0 << ASIC_CONFIG_GAIN_OFST) & ASIC_CONFIG_GAIN_MSK) diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index 90c4971ec..850dcab10 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -809,11 +809,15 @@ int setDynamicRange(int dr) { return DYNAMIC_RANGE; } /* parameters - timer */ void setNumFrames(int64_t val) { if (val > 0) { - if (burstMode == BURST_OFF) { + // continuous + if (burstMode == CONTINUOUS_INTERNAL || + burstMode == CONTINUOUS_EXTERNAL) { LOG(logINFO, ("Setting number of frames %lld [Continuous mode]\n", val)); set64BitReg(val, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); - } else { + } + // burst + else { LOG(logINFO, ("Setting number of frames %d [Burst mode]\n", (int)val)); bus_w(ASIC_INT_FRAMES_REG, @@ -826,9 +830,12 @@ void setNumFrames(int64_t val) { } int64_t getNumFrames() { - if (burstMode == BURST_OFF) { + // continuous + if (burstMode == CONTINUOUS_INTERNAL || burstMode == CONTINUOUS_EXTERNAL) { return get64BitReg(SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); - } else { + } + // burst + else { return ((bus_r(ASIC_INT_FRAMES_REG) & ASIC_INT_FRAMES_MSK) >> ASIC_INT_FRAMES_OFST); } @@ -856,9 +863,13 @@ int64_t getNumTriggers() { void setNumBursts(int64_t val) { if (val > 0) { LOG(logINFO, ("Setting number of bursts %lld\n", val)); - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { + // burst and auto + if ((burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) && + getTiming() == AUTO_TIMING) { set64BitReg(val, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); - } else { + } + // burst-trigger or continuous + else { LOG(logINFO, ("\tNot (Burst and Auto mode): not writing to register\n")); numBurstsReg = val; @@ -867,9 +878,12 @@ void setNumBursts(int64_t val) { } int64_t getNumBursts() { - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { + // burst and auto + if ((burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) && + getTiming() == AUTO_TIMING) { return get64BitReg(SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); } + // burst-trigger or continuous return numBurstsReg; } @@ -901,11 +915,14 @@ int setPeriod(int64_t val) { LOG(logERROR, ("Invalid period: %lld ns\n", val)); return FAIL; } - if (burstMode == BURST_OFF) { + // continuous + if (burstMode == CONTINUOUS_INTERNAL || burstMode == CONTINUOUS_EXTERNAL) { LOG(logINFO, ("Setting period %lld ns [Continuous mode]\n", val)); val *= (1E-9 * systemFrequency); set64BitReg(val, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); - } else { + } + // burst + else { LOG(logINFO, ("Setting period %lld ns [Burst mode]\n", val)); val *= (1E-9 * systemFrequency); set64BitReg(val, ASIC_INT_PERIOD_LSB_REG, ASIC_INT_PERIOD_MSB_REG); @@ -920,10 +937,13 @@ int setPeriod(int64_t val) { } int64_t getPeriod() { - if (burstMode == BURST_OFF) { + // continuous + if (burstMode == CONTINUOUS_INTERNAL || burstMode == CONTINUOUS_EXTERNAL) { return get64BitReg(SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG) / (1E-9 * systemFrequency); - } else { + } + // burst + else { return get64BitReg(ASIC_INT_PERIOD_LSB_REG, ASIC_INT_PERIOD_MSB_REG) / (1E-9 * systemFrequency); } @@ -966,9 +986,13 @@ int setBurstPeriod(int64_t val) { } LOG(logINFO, ("Setting burst period %lld ns\n", val)); val *= (1E-9 * systemFrequency); - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { + // burst and auto + if ((burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) && + getTiming() == AUTO_TIMING) { set64BitReg(val, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); - } else { + } + // burst-trigger, continuous + else { LOG(logINFO, ("\tNot (Burst and Auto mode): not writing to register\n")); burstPeriodReg = val; @@ -984,10 +1008,13 @@ int setBurstPeriod(int64_t val) { } int64_t getBurstPeriod() { - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { + // burst and auto + if ((burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) && + getTiming() == AUTO_TIMING) { return get64BitReg(SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG) / (1E-9 * systemFrequency); } + // burst-trigger, continuous return burstPeriodReg / (1E-9 * systemFrequency); } @@ -1211,7 +1238,7 @@ void setTiming(enum timingMode arg) { get64BitReg(SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG); } // auto and burst - else if (burstMode != BURST_OFF) { + else if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) { numBurstsReg = get64BitReg(SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); burstPeriodReg = get64BitReg(SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); } @@ -1238,7 +1265,7 @@ void setTiming(enum timingMode arg) { LOG(logINFO, ("\tTriggers reg: %lld, Delay reg: %lldns\n", getNumTriggers(), getDelayAfterTrigger())); // burst - if (burstMode != BURST_OFF) { + if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) { LOG(logINFO, ("\tFrame reg: 1, Period reg: 0\n")) set64BitReg(1, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); set64BitReg(0, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); @@ -1250,7 +1277,7 @@ void setTiming(enum timingMode arg) { set64BitReg(1, SET_CYCLES_LSB_REG, SET_CYCLES_MSB_REG); set64BitReg(0, SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG); // burst - if (burstMode != BURST_OFF) { + if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) { set64BitReg(numBurstsReg, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); set64BitReg(burstPeriodReg, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); LOG(logINFO, ("\tFrames reg (bursts): %lld, Period reg(burst " @@ -2053,15 +2080,18 @@ int setBurstModeinFPGA(enum burstMode value) { uint32_t addr = ASIC_CONFIG_REG; uint32_t runmode = 0; switch (value) { - case BURST_OFF: - runmode = ASIC_CONFIG_RUN_MODE_CONT_VAL; - break; case BURST_INTERNAL: runmode = ASIC_CONFIG_RUN_MODE_INT_BURST_VAL; break; case BURST_EXTERNAL: runmode = ASIC_CONFIG_RUN_MODE_EXT_BURST_VAL; break; + case CONTINUOUS_INTERNAL: + runmode = ASIC_CONFIG_RUN_MODE_INT_CONT_VAL; + break; + case CONTINUOUS_EXTERNAL: + runmode = ASIC_CONFIG_RUN_MODE_EXT_CONT_VAL; + break; default: LOG(logERROR, ("Unknown burst mode %d\n", value)); return FAIL; @@ -2076,15 +2106,17 @@ int setBurstModeinFPGA(enum burstMode value) { int setBurstMode(enum burstMode burst) { LOG(logINFO, ("Setting burst mode to %s\n", - burst == BURST_OFF - ? "off" - : (burst == BURST_INTERNAL ? "internal" : "external"))); + burst == BURST_INTERNAL + ? "burst_internal" + : (burst == BURST_EXTERNAL ? "burst external" + : (burst == CONTINUOUS_INTERNAL ? "continuous internal" + : "continuous external"))))); // update int64_t framesReg = 0; int64_t periodReg = 0; // burst - if (burstMode != BURST_OFF) { + if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) { framesReg = ((bus_r(ASIC_INT_FRAMES_REG) & ASIC_INT_FRAMES_MSK) >> ASIC_INT_FRAMES_OFST); periodReg = @@ -2108,7 +2140,7 @@ int setBurstMode(enum burstMode burst) { LOG(logINFO, ("\tUpdating registers\n")); // continuous - if (burstMode == BURST_OFF) { + if (burstMode == CONTINUOUS_INTERNAL || burstMode == CONTINUOUS_EXTERNAL) { set64BitReg(framesReg, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); set64BitReg(periodReg, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); LOG(logINFO, ("\tFrames reg: %lld, Period reg: %lldns\n", @@ -2158,14 +2190,17 @@ int configureASICGlobalSettings() { int value = ((filter << ASIC_FILTER_OFST) & ASIC_FILTER_MSK) | ((cdsGain << ASIC_CDS_GAIN_OFST) & ASIC_CDS_GAIN_MSK); switch (burstMode) { - case BURST_OFF: - value |= (ASIC_CONT_MODE_MSK | ASIC_EXT_TIMING_MSK); - break; case BURST_INTERNAL: break; case BURST_EXTERNAL: value |= ASIC_EXT_TIMING_MSK; break; + case CONTINUOUS_INTERNAL: + value |= ASIC_CONT_MODE_MSK; + break; + case CONTINUOUS_EXTERNAL: + value |= (ASIC_CONT_MODE_MSK | ASIC_EXT_TIMING_MSK); + break; } LOG(logINFO, ("\tSending Global Chip settings:0x%x (filter:%d, " "cdsgain:%d)\n", @@ -2214,15 +2249,18 @@ enum burstMode getBurstMode() { uint32_t addr = ASIC_CONFIG_REG; int runmode = bus_r(addr) & ASIC_CONFIG_RUN_MODE_MSK; switch (runmode) { - case ASIC_CONFIG_RUN_MODE_CONT_VAL: - burstMode = BURST_OFF; - break; case ASIC_CONFIG_RUN_MODE_INT_BURST_VAL: burstMode = BURST_INTERNAL; break; case ASIC_CONFIG_RUN_MODE_EXT_BURST_VAL: burstMode = BURST_EXTERNAL; break; + case ASIC_CONFIG_RUN_MODE_INT_CONT_VAL: + burstMode = CONTINUOUS_INTERNAL; + break; + case ASIC_CONFIG_RUN_MODE_EXT_CONT_VAL: + burstMode = CONTINUOUS_EXTERNAL; + break; default: LOG(logERROR, ("Unknown run mode read from FPGA %d\n", runmode)); return -1; @@ -2431,9 +2469,13 @@ void *start_timer(void *arg) { int numRepeats = getNumTriggers(); if (getTiming() == AUTO_TIMING) { - if (burstMode == BURST_OFF) { + // continuous + if (burstMode == CONTINUOUS_INTERNAL || + burstMode == CONTINUOUS_EXTERNAL) { numRepeats = 1; - } else { + } + // burst + else { numRepeats = getNumBursts(); } } @@ -2511,8 +2553,8 @@ void *start_timer(void *arg) { sendUDPPacket(1, packetData2, vetopacketsize); } LOG(logINFO, - ("Sent frame: %d (bursts: %d) [%lld]\n", frameNr, repeatNr, - (long long unsigned int)virtual_currentFrameNumber)); + ("Sent frame: %d (bursts/ triggers: %d) [%lld]\n", frameNr, + repeatNr, (long long unsigned int)virtual_currentFrameNumber)); clock_gettime(CLOCK_REALTIME, &end); int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 + (end.tv_nsec - begin.tv_nsec)); diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index ab24f4b18..4e093a39f 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -1940,7 +1940,9 @@ int set_num_frames(int file_des) { } else { #ifdef GOTTHARD2D // validate #frames in burst mode - if (getBurstMode() != BURST_OFF && arg > MAX_FRAMES_IN_BURST_MODE) { + enum burstMode mode = getBurstMode(); + if ((mode == BURST_INTERNAL || mdoe == BURST_EXTERNAL) && + arg > MAX_FRAMES_IN_BURST_MODE) { ret = FAIL; sprintf(mess, "Could not set number of frames %lld. Must be <= %d in " @@ -6494,7 +6496,7 @@ int set_veto_reference(int file_des) { int set_burst_mode(int file_des) { ret = OK; memset(mess, 0, sizeof(mess)); - enum burstMode arg = BURST_OFF; + enum burstMode arg = BURST_INTERNAL; if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) return printSocketReadError(); @@ -6506,9 +6508,10 @@ int set_burst_mode(int file_des) { // only set if (Server_VerifyLock() == OK) { switch (arg) { - case BURST_OFF: case BURST_INTERNAL: case BURST_EXTERNAL: + case CONTINUOUS_INTERNAL: + case CONTINUOUS_EXTERNAL: break; default: modeNotImplemented("Burst mode", (int)arg); @@ -6533,7 +6536,7 @@ int set_burst_mode(int file_des) { int get_burst_mode(int file_des) { ret = OK; memset(mess, 0, sizeof(mess)); - enum burstMode retval = BURST_OFF; + enum burstMode retval = BURST_INTERNAL; LOG(logDEBUG1, ("Getting burst mode\n")); diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index 39ddef1f5..07781ad13 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -1087,7 +1087,8 @@ class Detector { /** [Gotthard2] */ Result getBurstMode(Positions pos = {}); - /** [Gotthard2] BURST_OFF, BURST_INTERNAL (default), BURST_EXTERNAL */ + /** [Gotthard2] BURST_INTERNAL (default), BURST_EXTERNAL, + * CONTINUOUS_INTERNAL, CONTINUOUS_EXTERNAL */ void setBurstMode(defs::burstMode value, Positions pos = {}); /** [Gotthard2] */ diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index a67b7af00..9e83a552f 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -1687,8 +1687,8 @@ std::string CmdProxy::BurstMode(int action) { std::ostringstream os; os << cmd << ' '; if (action == defs::HELP_ACTION) { - os << "[off or 0, internal or 1, external or 2]\n\t[Gotthard2] Default " - "is burst internal type" + os << "[burst_internal or 0, burst_external or 1, cw_internal or 2, " + "cw_external or 3]\n\t[Gotthard2] Default is burst_internal type" << '\n'; } else { if (action == defs::GET_ACTION) { @@ -1706,14 +1706,17 @@ std::string CmdProxy::BurstMode(int action) { int ival = StringTo(args[0]); switch (ival) { case 0: - t = defs::BURST_OFF; - break; - case 1: t = defs::BURST_INTERNAL; break; - case 2: + case 1: t = defs::BURST_EXTERNAL; break; + case 2: + t = defs::CONTINUOUS_INTERNAL; + break; + case 3: + t = defs::CONTINUOUS_EXTERNAL; + break; default: throw sls::RuntimeError("Unknown burst mode " + args[0]); } diff --git a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp index 4dabe8ac6..b78338d23 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp @@ -230,7 +230,7 @@ TEST_CASE("bursts", "[.cmd][.new]") { } // continuous mode: reg set to #frames, // but bursts should return same value - det.setBurstMode(defs::BURST_OFF); + det.setBurstMode(defs::CONTINUOUS_INTERNAL); det.setNumberOfFrames(2); { std::ostringstream oss; @@ -370,18 +370,18 @@ TEST_CASE("burstmode", "[.cmd][.new]") { auto burststr = sls::ToString(burst); { std::ostringstream oss; - proxy.Call("burstmode", {"internal"}, -1, PUT, oss); - REQUIRE(oss.str() == "burstmode internal\n"); + proxy.Call("burstmode", {"burst_internal"}, -1, PUT, oss); + REQUIRE(oss.str() == "burstmode burst_internal\n"); } { std::ostringstream oss; - proxy.Call("burstmode", {"off"}, -1, PUT, oss); - REQUIRE(oss.str() == "burstmode off\n"); + proxy.Call("burstmode", {"cw_internal"}, -1, PUT, oss); + REQUIRE(oss.str() == "burstmode cw_internal\n"); } { std::ostringstream oss; proxy.Call("burstmode", {}, -1, GET, oss); - REQUIRE(oss.str() == "burstmode off\n"); + REQUIRE(oss.str() == "burstmode cw_internal\n"); } for (int i = 0; i != det.size(); ++i) { det.setBurstMode(burst[i], {i}); diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 7600a194d..27056c60f 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -1109,9 +1109,9 @@ void Implementation::updateTotalNumberOfFrames() { int64_t repeats = numberOfTriggers; // gotthard2: auto mode // burst mode: (bursts instead of triggers) - // non burst mode: no bursts or triggers + // continuous mode: no bursts or triggers if (myDetectorType == GOTTHARD2 && timingMode == AUTO_TIMING) { - if (burstMode != BURST_OFF) { + if (burstMode == BURST_INTERNAL || burstMode == BURST_EXTERNAL) { repeats = numberOfBursts; } else { repeats = 1; diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 5163e4b8f..41b0ac2ce 100644 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -391,9 +391,10 @@ typedef struct { * burst mode for gotthard2 */ enum burstMode { - BURST_OFF, BURST_INTERNAL, BURST_EXTERNAL, + CONTINUOUS_INTERNAL, + CONTINUOUS_EXTERNAL, NUM_BURST_MODES }; @@ -437,7 +438,7 @@ typedef struct { uint32_t adc10gMask{0}; ROI roi; uint32_t countermask{0}; - burstMode burstType{BURST_OFF}; + burstMode burstType{BURST_INTERNAL}; int64_t expTime1Ns{0}; int64_t expTime2Ns{0}; int64_t expTime3Ns{0}; diff --git a/slsSupportLib/src/ToString.cpp b/slsSupportLib/src/ToString.cpp index 4692a7343..e9935ab9f 100644 --- a/slsSupportLib/src/ToString.cpp +++ b/slsSupportLib/src/ToString.cpp @@ -555,12 +555,14 @@ std::string ToString(const std::vector &vec) { std::string ToString(const defs::burstMode s) { switch (s) { - case defs::BURST_OFF: - return std::string("off"); case defs::BURST_INTERNAL: - return std::string("internal"); + return std::string("burst_internal"); case defs::BURST_EXTERNAL: - return std::string("external"); + return std::string("burst_external"); + case defs::CONTINUOUS_INTERNAL: + return std::string("cw_internal"); + case defs::CONTINUOUS_EXTERNAL: + return std::string("cw_external"); default: return std::string("Unknown"); } @@ -918,12 +920,14 @@ template <> defs::dacIndex StringTo(const std::string &s) { } template <> defs::burstMode StringTo(const std::string &s) { - if (s == "off") - return defs::BURST_OFF; - if (s == "internal") + if (s == "burst_internal") return defs::BURST_INTERNAL; - if (s == "external") + if (s == "burst_external") return defs::BURST_EXTERNAL; + if (s == "cw_internal") + return defs::CONTINUOUS_INTERNAL; + if (s == "cw_external") + return defs::CONTINUOUS_EXTERNAL; throw sls::RuntimeError("Unknown burst mode " + s); } From c9cf845c9ad7d80f3ddca54a98ee644994588508 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 7 Sep 2020 16:44:26 +0200 Subject: [PATCH 2/3] WIP --- .../slsDetectorFunctionList.c | 14 ++++++++------ .../src/slsDetectorServer_funcs.c | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index 850dcab10..e00ffd8cf 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -2105,12 +2105,14 @@ int setBurstModeinFPGA(enum burstMode value) { } int setBurstMode(enum burstMode burst) { - LOG(logINFO, ("Setting burst mode to %s\n", - burst == BURST_INTERNAL - ? "burst_internal" - : (burst == BURST_EXTERNAL ? "burst external" - : (burst == CONTINUOUS_INTERNAL ? "continuous internal" - : "continuous external"))))); + LOG(logINFO, + ("Setting burst mode to %s\n", + (burst == BURST_INTERNAL + ? "burst_internal" + : (burst == BURST_EXTERNAL ? "burst external" + : (burst == CONTINUOUS_INTERNAL + ? "continuous internal" + : "continuous external"))))); // update int64_t framesReg = 0; diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 4e093a39f..0b3f5c8e7 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -1941,7 +1941,7 @@ int set_num_frames(int file_des) { #ifdef GOTTHARD2D // validate #frames in burst mode enum burstMode mode = getBurstMode(); - if ((mode == BURST_INTERNAL || mdoe == BURST_EXTERNAL) && + if ((mode == BURST_INTERNAL || mode == BURST_EXTERNAL) && arg > MAX_FRAMES_IN_BURST_MODE) { ret = FAIL; sprintf(mess, From f280d033b92dbf155689542ee5e387533227f53a Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 7 Sep 2020 16:44:48 +0200 Subject: [PATCH 3/3] binarie sin --- .../bin/gotthard2DetectorServer_developer | Bin 211388 -> 211384 bytes slsSupportLib/include/versionAPI.h | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer index a83ae9f9dd57c79cc1a205abf96b43421e567ad6..ed6e4a42a9b00fb90e5bbca070e9435c775ebe34 100755 GIT binary patch delta 54699 zcmdSC3!F_=|3ALho@1_N9L$+>40GnjxX%nDm!X+Ms3ap)l-zG2luIg)bE+wlkfk;f zLN3)K;lU%BqmU4iNNo}E~xq-4KCQGU)H+i16Q@a!G@BYzs7 zU!e>e#8*^k+-XqC4#(h>9kxq8mOC~^IWHO zhJvUcJ81Tf@EAqU*rWV(QXf^R#~*Q5WnK7acYF1zSiU_siJx&t3jUHiojuLn$qm>G z{8}|PAJVH7e=fNmf3Zq3-}4%IR7dtu3SNhcV5mvpwvrNGRpdVRxWpJtQ}S3 zlhrXHmKTgkFR78Sdr6}$5a>5|4Lq_k4kH|2X$>g#{1@(w=?G7bm;<>?+;UhNSEm)^Czxn={VtczX5@$0+E^KT>uyuZu*V zK=_#yo}A%GaC8Mf0`e@bi3fJWweHK>Wu&nlo=;K~p^TnQDaee%#NXwLhuQW$SiP_i zVP}eBv-z0h4nA1jrl?G5C*nX4kH)6@U8(y0xiRvu@0ke2|7fJ*xLj0x9?!B3;NMqm zz)tbFYRP3$$nzrYh@pBlUgUYzve;EV=!Vy3R?AYOCh+am+&8%KTD7Wb`8Yn{9k&-b zQHDk;o>?}j=^1GX)FDdojfs{y@~7!J^E+dd^`e9q!(~ZDZ}Lnm6~Mj^f>`;il)P8O zQFfYeNf3Klgv&TC5y|J(1ODeDB&lS@DE!RBN&K(s*%>Id?1C!v5IDRbOgSHh>YHRw z_1B_qoEpaqYNUFFw#6&6g+AMD9%L4Mz#P}Mwx}50m)UAesAEg8!(>NOr+vu1RS zHhRnD$1TgRxj0O1(T4w)S)bj@iEyoNN+50z8*T zXFtH+=Z|D3vqgMFb_4bqUyT2E@gw;E1b5e|nRq2iH&#)osbxjQqG!t-h86Ihb^5E0 z0=~UYp6V>%W$L=s!~&jGH&M+h;13{_Q@{t*O;Z~b@QHQP_#ZiCxWBGL%`f0TfNfsD zFW1db?=9fzIaLz$uZzO;VUbsGN~KUcph`;{j)NM~nx zUW2qsLRIQnR7I#)?$`zk`J{=p`Jx8#u-$7Lq?HfRswk;dx|Q)YECr?EMGaCZ&WpO{ zS>xDboN{_PFPY--yv8YfPs4la*GE-egKojDh38<%8$Nr-Y%%PFfd}3#a9I(@d%#&z zq>t;-c3!5hJ7a;L+2;G0^IASGc@OyRNmjxuAqgZWx`DJbPP-U6GHgxJ*HP}=u@QEg zvPQ`rQYgBgUGSo-=-2t?Mu}kv^6jof?F}c3;iYpOcikvQ;fme10KH^Bl5HrGO-0$# zUE$%1kyOjvF>0E4xI1n|gyN1POI*{=C#JZoAd8MJu-+y3+Z8<H!CVXd0@s&;8#16Wr5BD_d#;@dI z+;7NFw@juBnXNhhEWe)mm`ttuw43Nn4k`uXxAQ9LP4|!|4(8u^$|T653kT60aUhSo zFPOE#j(gBF&CoPgplMfiP4m~{E1DYl(KFgT^+u|a0aaOq23sf^%v1((PjSmqQTO0l zv+J&XsgBTVs#9}2^Mzz*P#MLdQOPZuhKq9e`&sgIrbTzQg12j#ZmQ7YmZd{0bI?6s zs^jFt$_}^G!{pEh-%N$p-gmtUCAUb69f`KR3N?Ce_72ZHOV&Kix>vC(6qHyN?N(Jb zyH#qSFr0UKz!`=P$P3!!MZbcIgyW$HGx=wa#PBnDu~9FBe#uh5nXQ+G)`3u{X%7a{ zih3P4jiZ}fd~usHJhjbG{T31YTsV2h3lhoI)Ll$rPn>_jdzS8}!A01emtc>`-bkA? zU39P{UR)r(StOHdz9rt~lXmislA6c!+GbE@LQ{$S8>uYjtJ`L&t6;02N#n5(#f14Q zMDU-lR^gt9Y$EZN4-Hi}*tyr8#CJc`s8!ZPyWwvMfEyJ~?Ql)~|M&R1B zFvR6`qZ49LVdX=I1xgQA&;cuG*a4wPJ0Gp7MwR6ykET{N2ByN2qTs-^L?4*K6Ui#a zmF2UZOsZ-FFXDH=xF`oOBc7N-!Zb+*i!aMRu9OrZaUyU>_d`aBbHz}C+UQ!m!x(Uk zQVR>>9D!@k;@UDlN-k!OdI`ie&r0FL>H{4tjk{B_no^eMcXB6M`|*P`*wrY@2Xv~P zE^f9hLV^orf=C2@FSzhVRJOWhd6oyd)ydvc#tl9^5cj&lD-{J1!&7%;b^+3cBM{6i zZ}WO$IgymIC75TJAd%4IIq#YDyH7;x~Id<9nrmjy~;OsZ;&|WO}iNKW!IkfrqoWU zfeWA{4cz>$9@&`k_UX}+ZRVSMJQ}k(Lh(FbO7ZzhDcnD%g7(=oRDQ>v*}~wA>zNoG zw26Fi&vf;xvV3BHECKY4uO%vdYe^9dYe{kLlyFz>lJz&Xn7iP9F6o)7?nFPUmV|YJ zD(YTY#e8|M2Vr2;-sypv_i>)t+ZlEIA$^+i8*kHla3FMzZ|q&5#+KvGKCRS><#^9N z{nZ-f`1U@j@T5)7wC?>X;pIq2vdY0vO|5Mx37l?aJ@Rb~1~!T>{)#x4ez4hFYb=hr z`0&2jYQ1v2aZ+l_@Yz(Sd6R>twkfb-YMTQaruJT7!_>9{Hcahm9~?EE%Xqs zD!$#$YbDY@5)PYet@gY}zjVy7UhP+vJ;4|EdzAIz*9N8Y>Q6RSl{LK2lMUE2eCCs{ zs=jY|M*qI-c|M{4qlkZ`e_o`r1{MT%`R$Xe3V&#T3-h1;12R<4T0VI|&b=c4M&3mJ zjl7BcW7046M&uuQD6z;t5|j8rU^t{sl$mGutitOIOi?G6ldk0OftB$1$ph<(>}?!a zL;N{6uq)A{FF^XX^VcRb;l2jKtpc;<2F>)K~t zXTR}QLvz@*Wuu2ivoudisy>hzGkCFRC>-~pu#95h8^+g;smM1Bi;o>zyhC15{C4Ls zeq`7^YIJ#CbNFPne-wuL41RdHi}mN%hPPLp<(IV|k;v5a^2-K4`&O8WAvpYnFI2U5 zdFp{Se)1nLvNp>GjgDY!C?Da?7X!EVUiK2d=DmlFUDnK(X2We-n-W%mdkg!kKiXvn zjC`fK`jSW`ZP~-Gq%if3^8C}bNqowy&t*p{uFO(CbP&JY4O}dyeVELPMM1}v{Nivd zbjlSdD2M1?g}nBd6gG#q8B-(8=w3Fn4Mv+w1A@P>C)3A}JrQ*>9CgyT9fp3Ps@>>8 z0#6kf6C|l|3%NZ!k{bP=z^GZtF9kNN+zKAFa;wW@EKlNX$Cj;N9S+^_3NX(^J_e0V z%N6rQp*D{5CB@R)t#D^f1AK;cT$w}P*S}Ao)d5rpQ zuPpKHX51!62JuCU*=VkXQ7tg|hj%xo)wfSi_FU8t?={YzVNUQi1^5mH=;$tI_(}0W z7iREdNj&m(d;OcbF{$Wu|5H~4evj^_Nq@wRMV$Sw_k9rU(@pe*2*ouPe>2J|F4;2> z4)hF6*PVxpil;zn9rzm_rHA7gg@q{)*BO6id{uUE+4S+>tENs_mwz^~qFgrIDpC-} z6(XM+qdyhivnwMUebBDlxL*!W*%9cM$g%8~SVnXRj9rfP1}=@9U_C-=;Mwx}t^+zE z)@*p=Nr_>I&a;24#(k5jBwjN0uB)crrNj%zUR6*%lLo7{cwX>kF8^+N89pP$9;SR9 zt$7czRKE4iCKc{M=cvK4b+**w#J5)Sq>{>9>kqA<8xTn)Wu?!-sj?Z7EhI)A`D1~qf&^) zQ#mqK&S{-^?tNT; zrsxlaX3Hq!ih@V!-f6NzKF5P^rKk<#`QW!YiJIB`)&pujLQwvCZ;vM<8-;aZzv9Gb zojVl^XiExHek*KO>Wbl@4&Gjv)cZP1-~m+3X+lBXE$g*}vQjLZt-ziN7t+ErA25!KL_)Z!%p+n?`D;`AUudvyK)YH8@}S> zOHwNHN;6;ap7|J+@QTYRDx;rbKT`yA>Q@vOq!z>j=>X{m83maHnFm<~*$NShtMZZW z$6vq4`XO;*3C)PNlsMXB^~#%95^3IKT|->D>E?CBnKxNC5?8?#ZwqnpCT<6D<~`Q$ z;;ZSomPUX|vWFrHBWdLNXIPa*Gouc5kejT^MLuYD57pC{@0^|QJugYSr)8Mpj#ccA zFY=0=U#vx~V1eMz4*Hzo64JDnRvhcs7CYCEKF}O$s$9f6{rWtqrnX}*Dvod0>YH1G zKaoAj0poriX3{q16L{ldqZN2S@LF@E-yAzWeA0V$8mSM<9T_7JvQkSq^k?qGGk2Pv zxl@0pOm8s1^j^*CF{ZnX#pqbN`y1T-jd3?`Gbg`kyeT%yE1%`0*gFt=hY=g)+hKYZ z@-E5|em|f2Ub^ajnEyT}&5=SkZpV$=M~nHYg4(SyH(#yxFds0tzN0!t*oFw(0uffs zO?Kqam9KH-YvY;x_}r>ZQG-ICGls&XqgDfUqaod~5qE4HEw{C0D{Rzr>G&IDk6O`lND2Vk249qH$vBeS4BONZVcgF<~tv* z7Kbf-(g8*J@e_Czso0;luw=~2|jr>Yc#zSU9mP0l{_Cn4; zY@1=eAhjSKNC!xuBlpFltVcnfBF=24h7lKHrk*3xY^FvNXEswW6K6J4V~I1HsW*s= zH)U`#ab`26IjUZ7re;t?vzdC2w^=kRdcN$Sif>YBaTJ8VRiP|T`@re_KC}vV?@*LO zkTZ}gkjQToB_5IjsRd~WX%1-%=?v)y83yq|#zUq;=0TP~)<8Bvc0r0ECm|Ohww>tk zkV+75HT+i(;(@e=bcFPR41tV-jD<{r%!YgfSp``S*#X%LIR-foQNC4_(hwJdAY>$@5Hble<6Fh6ECg5%@k6#kc0&$9&Ooj}B6pz%ASsYqkcN=vkhYM{ zkbaP15FcbbWGZAHWC>&qWD{f;q!@A%auH(t4mAL&^qp5xssYr4cp$AI9U;9SLm;Cd zV(@NG(W1NOMSANM}et$S{ZxG9EG&G7qu@vIepVvI|lS zISIK4vF%0;K)jXkUo}WQhzHUd(h<@NG6XUTG8QrgG8^&{WEEsRWCvs~aCK(0U{_n-zKwIC^w zhLGlvwvf({evtF~|0ja>|DWCXAG*(blUxr&iF}apkg1S)kR^~ckWG+XkYdP5$VG_l zC$uM|5~LcW9>fD_4e1E!1sMVv1sMyO0+|i*euV#4LDoZdK=wk8LC!;zy=YH}3sM=9 z4QT?o57GhB4Kffi5>g161epO@2w4vCL$*S8Lk>aCK(0U{_n|oBk(^6e+~RR;hn(G z65b6wjPQQorwMz1L0}LCjsXuKd=j`H;d8*f310;6LHIIoSHjnTI};9j+aBJDa0IYC zK!^gw0JkT;3~<{p1)e@GI1s@2D{&%lE5gaZ_Y$rQ49`}^sR7)Sa29YL;d;Q02{!_6 zNH`DpF2eT$*CpKcZLd8X=apolkK%$nBZUlg0j^GbZ(!`%$v6Xn(+Lj&P9Z!DIEnB` z;6%csfU!p`?|m6Kp71!}vI2YYu!#u7(S<3%F@&c9M-rY1T#E4fz$)R7fJ;>U0iOV0 zA-n?kFT$S!Um)xU{+;k9VDA|UY(wA_;qQQt6aESKDB)t@Lxhh2A0T`Jct7FOz&{Z_ z3%r}~AHd%cz6`um$6nht1h&(KFwGvmm2f2RSA@#|ZzLQK`~~4kz<$E%z@HJW4!oLh z7Vt{K^?;WXZUp>^>eZ_*AA!Ymp#|`VgzpDlNVpB~`-Iy8W3fWEYe(Q&ggXPzAlw~z z8sR>`ZxenBm=hl6MPL#IMghM;xDa?8;qky@2u}enBs>H7MZ)udM-yHM`~u;RfJYKu z0z91XGT>)`y`uZALSQgmSOYweupjtI!W)455Z(gZlkj%nZiIIMKSB6=U~Iq38u|(N zQNqQ*9S9%R?B4K)C~yK7+7Lbq`~cw#!1ocp4BUdSI@KQDjBo^SKH)gvCWIZpjR?Dd z>l3aBoFlPUv85q^Jw%z)>cF)LX98nyNb)(rRS7o$u1xrD;8eo*0Aso)~ zMf{-@7>U3T!v6q%if|!tf5NW=_a!_LxEEm#+?}un+=cKA;KvES2i%eH0^o;r?6oaM zpdDTK1h|0ka^Tj4R{`Ho_*3APgx3P!LwEzQhwxXxcN6{^IG6A@zzqn02V9Sl{r?Gp zI&|Rxa3b<0Io*(3~&{~7l6|UUj|MltW39uS0Wq^T!C;ja020SUIfZhzzJ+8 zoCF+8I1MpV^D}Z|w{tUPW;SIoD34aaTneey3oe2L3{0QcMvh)WLXipbT z0JkN44){UB7lB(5E&;xmaQF<&3kb&oHzgbooJY6ElAj5z5}rH5uKB)U34G6yXpXb@j)j#{J&Ul{pl_qf zC3W8ii{%;Vqa0Lzhm7{o{JItXHJ}!^o%JJ zTznqFHy7o{4lyr5Yu92~MgDcK7~XMhX?~x-PMtNTB79~lLXoKm>r6%Xf`8y|?0s=n z$P#bLL9D_+8bX>w+Cn-*`axtRY(NS|Wqt{4ROVN}MrCdRHY#&Fuu+-c0vnb29k8k> z;WE)Lc>i@ZyT<%qFxu5~U)=>X@|OZ*VX*Z`?> z!@%2~Mf-t{g=c?;PMT)c&Q8=S+!eF84Q!tDj; zv~W=yTn?9odmCH@aB`?Ls(%H@L`%fqz*V$xQ5#*3N*1mrxFieL0-W2z^#zw4-ToVho9o*d(E^e#Kk!RtWfXkO0TqUFWdxP{?B2EU^)WUrRu9<~9 z1nwRS7xT5t(cHo{1lPjMc~RA!LAErL;6{SG*TT&Jcb|n@1@3+ecK}=~3m3l4<#@ot z)dJ^jZ6Vu%e9*!T1J}mFO$AqA;g*AIYvB%nd&t6F2G>sKyn*Vkw%z4uZ;99pTn7s` z7~I1a?lo|aShyA79<^{gz;z7a(Ed;Ca5*}Kkcw?MxW_D9xo=#K$1Pj~aGfn&XK+tg zxEH~7v2gRjb@f`vEg-vDxHI6oTet-~U5*|Wt_WOD3wH=yFAG=tTbH9Zab83F3wF62 zeJl|tfa`1FJ_gs%!r8uaIi9p|RlxPPaQWZ{gmPY6FOUO6N!x4Sp0aTN1~O7e)52x{>T)c$a2F8oV+%J8@s?P)2f%$|;-vq# z4CGQ1DQaOmxMddZD7fVo?$eVl$GfN)l2f; zvf^HxyLMhS7I66JZ|_CKjq?AvUHNL*6TDzoE{o$c4?AxdJ)M8IYlp*?q%R%eRVwG7 zUgRLYkx?` zyI)2Q=)|_Z;>4qOC)#{l-SWLF)!&=9*`0$MyZo5QXYBTr^Jlx2I2B*FITI`2vh;7_ zr*}K6cQG$a=}S_!QbonKOMWJrXFX2HiUlm+R-XA|mQ1d$iopJ>2xysQSZ-*-5jaOu zlgI5zKqM`$EEBivKh!cUy=T$nF7_re|Q;1zL+87 z;Dt0)XYN>Wp3=u`_1~?7`y#~AQJ1F)m54GoVQ)=dXK&3wJ@5&89}(s4G8@V|@SFo> zcJFH=E)Uw*0D;p-D#o4&!!zmh=@7ncpQs?d_K04ki9CCMEFuyuYg)^5vAShL${&u( z)t-Ktl^6Hw%@Ox=x}#K<7D{m%x(G#NEQ+LyQ5!P)l>F+&+SJ6{(eC#5(2>{{6vZ)+>;pc$fG} zz*4z?c>u~Y^HLsP_=`O{s51QXUusm6y`&T>=&zy!(yClU@$eFZ(0p#+6EAd0_GaGZ zQ2m>CX1@3k^=0z|G7l%@$_J$40m5X7w{?2q1w15f)R8zw?yjJ>ka(pyBf+RYKKiiu zo)6j~@jCO1cEG2_uzt?V>~V-Zx{r$IZ~G%tn;pUIiNR9BoMCf7@8~$@jc=(Osp$9z znNq5#=6G2ER(R$Scd*-`R|Yzho_L$1_1z)qVmC#kD-Dh?otyZaqcFzWwp8ZC%eU8# zrgst<4`~f#T)eM?h5zg9&)cE)C!~VHP(jiTp$Pa8mcIgj{#e!6>Cy^WjL>a*zSd<5 zs~U@8#{vB!?Gb~(s9$5d&!lQ0l`q8WJaVhTQ28jaFQDLq4HOUk(fODD@j4k#G%rdf zoBS!{xEFmvE6M0|dewZuYn-UW-N!4|5!HiY-DqD#>{SKcEpmk<5VibWQD(c%uANS0 z73F9fQptS9@r?T7MI_N_{jKprl5V>(!Gi6s^Rlqr=s76K#5$>doK4FJd4LP~OTWPw z-sMD|(2toXTB`om{K$#qhqqBhP#FRhc9oh~Lm4`zDH)~db%F0GKIIl0&UyutO6b|; zkDYAb*n6X<;PX#rL@P@9K(9ZUh4+$=pUM#V$voA-ar{ON!=FEu6@@NMjlJ|#1AK}K zH|2_&2_JQnERs>^)% zTCY&FgLoNHH>UjbX&fBt!cUy4A_~yzx0ZJO96m27|+DpGRFkL_RTV}k_h;G7S zpuZW7E52XA?> zCc5l3&7I8Tm~6N?=rCua)K6lxk{Bip(9E+rA_GN7CR2%M7sB=(*e{?RA`875RA7$8du9oh%&CX9sJ%^7@#`=GDlvaLr#CY~PqLsZi zfuV3zXYPG9c(>o<6GALie>AelPftGX_o`8y{9`Hd>ff`}(p`ji-SAdJ9kzaz7<`8U zuhKgqIKXKaf8{$hyvq3$RQc-P6M47u4mCxlmMT&s7guj=na2yDub!i|++`R`T2n71aiAt;oj`9M*@J9ok!YPhPWw#0ay{cyuP!% z<)sW^90y$zPnmhCjoA;la49WO>R%od2XAiP{6W&{hIm|j^yP#M{bP=y_5~j+lRD7Pe#J~6%#w_%>6aDdFF0R3G{Y?Z~Jx>GtYap#3+_{i>b4IpW*-4 z6l*5BebJYvr27#gUUo-+V94E7Ol(9quI1K}qgX;zEhE0R_<1JQSlS$_s67}l3^w&w>KtV*sU{)(;viiIPrdCYK#FW8sz$a5Y8e;W$TB{fa8(gG4 zBmWv}0H^@%Pz=MV=^om(80p0rOD}Ohr)m94Ggs(3$`g2f25-sAbr<0@cwn^Q5Jf64 z+TF>9BW_u`Gu}ysXMh${Y}(A=@u_JualdR$v>+|%z0*Z^h?4Tfr)&9#hoils+&7yG zxM`w$M~{h>-xieuqe2g`qsEv%Zt|bY)Mj_ zqs3=iv6}R~hV_|bs5#DQi3T^Op?M)Dv7FvV0*$>WG;@K;17$9_=9T$l4ed-Ei;93j z6)nMwuhz!H#PV9hkSEynCnU(ps9VXvU(uK1Oe%CVRmJi%CRlNRYtVv=8|=iOJ9l}fUq<6`P6n)3Rr8AT2q;BIR&;8fh!xQmhU zf02;UUP8m{FNB&kcLH+;mMo+ZyUhx0u%?^cB1?fvzEz|RC%H;aV9#9&)p3^gNYo#Z=u3XOvS(!P? zv&872Mc49@S$%UNqmx-$oM(#oEWY7Uiv@SDxW!2eU}iT!PJW{)zvn5xG|uQV4vgDm z$^+x}Ulfm~QtOQcHdA5EF+zrK|hkM2T7o^lxLvqOW&87Saty>%%~B zT@p1rR38c?*Gbkpjf7XwprQ>sVwdKr8aGGsvP;m zny2cTr5!b5Q4#g3&=S*vu`18v4Z6SUAu}!sO#5UwYAk4_Q++N=> zGk23aX$)gb6+RIBnwt&JfqK+pYl=CI*gDlbHCcyH2gSv((xlC=$*MZ0lIE6OQ|v4| zN`4H-H%U8Kll{cHXlrX>lVFJUeJw_F=bfUA^7`9fMoW-)5Vn5eeW|aOtsV^wD1F;=O zY;-_J6WL0(n6>f#~^>TW84?)b-k_R2H&?YBQF&^(9o7FsHU{_y$jD zWAEw{yKP2^!guV8H=Aeq#=}$l#oRHo4$HiSe{!4s4t*!||3o5pqKxF*+2wVPV?CR3jO)uPNDxLgP6@&7fK>*#;`fxrES9;gj!#PXAR&)y-&WU-{) z2S2!R{n#6If%;aQ-0hNMCcZ4`JZv(ohiQG_G)8`;=s1956G!rk9Y^zvMXJsNGOpc! zI8AXJ!M!F<`3c-nOvJ#8$*kw@NJaWK0S~}D)%Pngwxkk$gS*shZDKC@1c#95AtOWD z=eg{$x^m+qu3Nxh*-q%5x!eeePtgZ;`uQtbz-ZH$wTsX(e^hnrPbhW_MXi*AVCqou%bofN&DUAXie?GJQfod;yhKB%AkG2# zE5+fSSbfK+Q8zIl%271rEi>3>vHB1kMTMahU+*rXEy-u&6J_l_K$)jIn@cxSd&I*g zgkDEx#cmv3zvf{xL$4d1SigToQ}#h-Ncu+Q7;Y@NyUpQ}g@2|fo{idsW^7z&n&cPK zGwa@CeI||Ubp7~s*J)9ouFq-C7Kf&9ES>3j?%#stHujW8Bh^M@UDJq#e~c)!BNZPH3*_=!MUQEFxLa!Smx2x%ld@o>ALx^P-1LN zLy5I}?q$^zL=U-MYmE`~epXZ4cQ3=26#@&1rkVKP%h{ki&souZcaXE(|3s!n+w=Lv*cmB|CAG)K5zSd5EsP1$M+i`D*?ZA?{u~sH+(T9`+!{!@pYpj)-Y(@L_ zccNn2srFbBFm_y}^}2Nqmfv{}KJIY49Jn85&4LXrir*!q`1LKt|LhJLpfY?knAo^5 zpRBqa;v9;@*bvd&@1eLG<*+S}eNjaQ1`Mi5@ilDeHALd`og0Ja1~Y6vm);=gjjJP+ z8+#CebDe2nxH)k6B-qF|T@aOxyz4eq99Uku-K6SHAGr6w{lH)T+YdbcpM4-Eep!{& z;I3kb(uz%W*+gNOMu#k*PS~5QHR{Kb%`2J{IZ9aK$9P1`M}NV)mZ=i4cixz|eAuBY@F2Y)DHi_8MC{T6Rxn z3$C1WdO~{MBDZfo!K#L?oSYD+Ews%~um^fZr`|Bva_e;q^*E8+lk{|v+f%08o;Kwc zKfn{n?HR(zt=75^tEHt3WU<;OU0AI~_V?tDrHoqkJ-ZD*@F0%t!X2uH!lcMqNql!P zn{kOB+Z0nO=YCY+$67*HEWIQm$6^Qb7+mUOfk{ZKuHw**_Iy`XQFV6@EOF7SM>h@H z+O90U*=Ld1bS<$vi(y|9jT5lJnU{Q&j8hcInzOhB3vscSjCq(XGnhKfgDCY@-B?BD z)B1E{>1w`=R9)l~Gd|~0W5NcP^C-Eq)nFHcMca(K9Ad}4BIv_7n^jDu-lD19vD)5J zCMb{0iD~5#Q-Vk2k-1>gzt%m_^y|8_s_jA)8{a5#UMMMcVn5rBnXqgGbAz;h56esP z=YmmMh1njV+NR~mLfzTV?ZNK#cA-o72^i-ern9MkPyumTNvuiAWP09M&D;s-9Qe4r z6F26w*L|)R6X*Oy*Zp@dmK@r3@r@vK z-Q&GjWABg~=UR5%MyS`lMa7fEz==I+pYc;a;Nt3%(u;15)dZ;mqFZCBLtv>zb0Xf;iu$nnWyeTkVVA~Y4<1oh!}q?DYa50FOEjXR z1?FT2NI%7#ZZC8Xw}{l=mAZQtiU_v#?>i%ibh6o8WhV=zITBQ<$KSheD9l-ZxOID;QbTW81R+?%bzX6 zqTuh4^ZCVE=RT~G7yw(ae`$RN%AK1D1EFr81&5N5Q9|3JM^c|cq;0`SA(mfj^At<0 zCw{6qxQ}W+53X<2$pyx8_{k$-z<((b!J0x7fOD!)lGQL&Vx{9D827Nyc7d7 zArc5EIu;N@vV6>3|ysk(Mu&b5?+M1f|qkuX0546fz}`bmXOvU!jq9T<5iQl!0Ut^ah@>74(-BlRx`m|&&6~{-QXP<0-eVLcXSzn{m3EO ziV-YJ%@0N*kC)udxM#%)IIY>Uh}1S1Db$cme^%};Z+w;|SLk!oHoEpKCe*!yX<%S? z{u;i~MZC0Duau{QiC)1EVqDRGdIWp3Bc5aF zcYS}e9GPrayy(5AmEzIbHr%T3Un9lKffUu}ktbn&bX%jfdY;ut#8FYjHX7Yd93l1j zFk8ZJ7Yi#@OPlaKONbWNDLx$`z0rBE8ZWSlsnbb4LQaB0ap`3Xs7Id{SXM|wU!;b9 zU)Dm)TXiO}N`eJ<1YZ=o)1{N2 zsAVbfK*xvMCOiJ$TdR?8%Ha2S@BB@fH03kQmGBF`V(#xiO&G_r9ZcCRYxSVE*2kPT zd3{C}Q#@7m%nKYLH%5q?yl0V+;q!)HXRZtzM&roK;jOg6&beB0t?nq*xPy+AEM zLrtIsXsD4|hwYQVs$CZLcN#!@M2kUtgkJ(pW44kxb(~kF;gZMKO-^`3$lLSU{`cTn zH3+IoFr%TNWr#IGYZF3=}NYOn5L&a?s8fk?tK8ltO zIs9rm&>MOzM;|ABlM}S(UloVKjlz(Y%Hr`1T#d`rmAju z*%G@m&W9x}7;^{)H`-xas})QLN#fF2hEE;@Qf&2_CB;&v6y>JNZBsn{S};Ys$kb0v zar$QOaKozkwfo1hdyMBriK|5n@3U#w#)-54dNw5e5x!usC4>$av8ORDc?_#yL`8Lt zemz*n^3E6VivQV=JEO&&{cy0UR=8F&j#V-4E+cq+eA;m(uh?-l51*rdo#BmfJs0v~ zi|m`d0Tx1x@t2@@m-L_hf~Pa{O(wn@Vm>Q(M`yTi zw=tkw_|W(Nv~e8Eh&O&4OgC}zuz&R_H$3cb9L6`D;eSAW)FK?t6D9`1jm6u?2yCCE zt33h+%((4(*PwQfM4VsBCdFGv;b1-lhWyA&!=qs_1^f4G$O?BbZz#MOZu#PE(oR*Z8H2NN22qBn`7U7Csm-@$t{_cWH+DHujCaUl)7#w^nayUBC# zBXLkNJul%mi4)kC5sOWF2N17(ot?%O)C#)(y1OY?cVg)6u~I%}yNGGDbp73mHsm4Z zFugt|kM>}}0_(1t`yDpIT$-8hu*6WO;JChh@(ye4xQp}@D?ZM%#u~VmID=*AuUv~4 z%PUu)cdqq?^)fCe&hmNJ|GZJ)u?S_qqh^-t$1V@d|SI;HEN z_{6spQ@-5^PJT{dZYT9emrxtX^)MArPAr^0t8|4in-RZaYcnm8kCB5#)P zCAMmVW{G3S(pB-#V%egh1C~%tF_{wimbKjM4xQHHE9oJoq&sDddU3$Fq+X19+qK#9 z$h_QEelqBqQCFtvb{A|qH*&@({*)W|og;788R=w?bUSO`K_MDh3h|HI7Gm`rS%^Jz z;9tHJEJUb(>7I*1q+!ge9du9w&hwin#FZO5&ty@wL354oNSQmx>A5T?WZL^DO?#&V zvk_uKwJ!54%LT?nd5*k8E{KIpO`-5)Am#p;=*gIND;>1`^O#e7qz9Hoe%;J@u>_a2 z(F<6z{FDuiAAz+ief$vbt%}_tUbHKf+o#*KQSY-TC>>tePr8|T8Y4UX{`Xm9bAK(w zavt8Z*B3iB->kfk%@18^vqj>rKj^Og!Mj4rtZkexSBg*1$KuS{V5E>DX_*UH#R^w$ zI_>YV0P`GMufTMJRs%_=7cXGWIvt|r%l*PO%Q;kqd3EIX(!@T4bt6NVPvZ!Ym~Q7g zuH+Z%pM1f2)|Y}xB~RDh;0sV8_AP0imj59gYYo*?F|jwVUOtU4Z`Q9#G5qYF~P4inY3Iy9@o)z<%_;@ z{V^|?`Ox0B=R=k&%&5Lj06(<5IAMfE9BK6nD(g-wH9){T8jBwaPIRVV2N4Gr178`c zB<}Uemw}9q7gEFy+S-4z2DkaXi=G|fmkjwQD|P=9x6a3Z_Su;~R@Ls_&QiQbmxXLB zZQYI!t3l2~B6l#Q5+oba9MTao5aNSOfh>eLOK9xuT{+~ZcxBBFAP#E?fq2glS6k=s z;|L0~JxioG5nv=Zia7i{M}T{gII((S#Cw%Ep)m&cI&twPZW3|uvI6nms$4bXr+8&% zrc*?*dv7E-OPla9n-x8;mpGK6`2VORe~Z^Kw2anm35#vjZ}txP8arM>a$L$UjwylW zK8aa$1)Q_$i?`m4a|X-j1>J@f^XwvChz73`8tf?Ni^H4YrvB&uL)*WE)y(`mNo_JE zWwLols>>&A=-*0erzt5~`_*ef%UH@T=c1sFemHRq7x!-!R!_E)EG(U%pvqO8bb^8p znNdM|e;He!6ezl4vn{V&D1PDtjb*c~s9flLQhRkdCVf9uPL*ky_O1PYtXzvr>^8Sw z`xnbf`lXltnSc|N3~icINn5R8RlUFdE2OXN#qXmH#Da-gdJ)$If6wpHuPwhpJo7y^ z#Ona5Me)to%-CxV{I_wXpYWSow|Z!EOHJG=?#-@^x z{3o@fY36{Q8=N^{>M7%0p?KuD2bAzM%`jF|JnuD%Xgc*I6BHZ4Y4~Ku5{jr+(KXSu z3nt^8pm_5so{i#R7v1@rKDCkYFei}d&7gSUdOWW7#{Z7vz_SBf{9;+3X&`YyRChleTRFp5})BAVXKkqKhcR+gkc#VbegOsCRh zyn_@Et01yT92AcxaC(z?(RL>(;v*E%NfAw(elkJhj9F`nSApW04iLzAw6z)DjN(Im)P;Gs{OSNGZ+7(TEgdSf%i@ltxSoU=4rA}SK_}9ml}Y<_ng7M}_rJzD!;iZvWs5ycBw?EXbLQDI0Am z85#+j!&5+=C9Y>ZnWG0?qpssbU&SLPZ@_Z4KU>?lf!*uqOHt^}V2YBq5soyXwA_d& z&rlS6Crlo~(^Hv4Q8tPwqbLfEP(~_WQYv2}%BvJbezFb|GfIV`Y!p!@QWP3KjZ`*K zDw_~xDn+5e+DL_>Y!p%EQWUBXBbBcxm9G%xBZ@*TXQc8K%W^EIOXTO$z;@&-_{OM@ zw9Qz|Sw~T*;ppyXHnW~KLjV>+SjJ1k>+VRaSt-Sog5H5>F9_f$o>@B>R@^Vn7 z6!kW&#J%69@qe@_qmA5x58?QV(4*i&@!31;r3oN*0c{YuT87Ua$yGThwb-k6_S24R zVY$5o7C#bpE2R!7^zP7F3G`~3Qai6=&RkM-K=e$pUa3C^8Nw-^mD9H3(@X4xHuGz& zWc{w?ZG-w<(B^D|Tk)s1aU0egE@($Y=r1jLJ8SQ)ye7m+@SnlgiXq1!S0Hx$XlrFi zLr7~#H^?x^SjY@Wz~#JD<$8x&$IRoj{z~p{_`r*`ZD$ zF5cu5S0T>qP}j()cD+NLMG?&ob-fI2;>T=ebfZ4fqgF~KYXxUm^2%1Q z72OF+fX1>b^|YBg+2^V!OY8A1%Z&46CCiEuuQDnPwVB_tE-K<&`xbi>`0L)qCWyF; zcOi_w+jg){9$ZGU9LdWbvtTht~Z&99tTyP5+Mdtb0FlorG-A z!lsxOBA1F22X)1e1}#_W**vUJX|DT?1sPh__bfA^9o=VgX+`OVe$SRBbfRlyZ-gF- zYmI+k(-XSWH8NN9Jnh5}EF)n6U87OSxK?#Ho8WzZZHT_PF2Rw6cpx1h{UDNUnXV$kxH`2Go6w$12%Shi=>H6lIo-Af?+Piz$D95IZRL?TBv}wlWo4zvhC)QPE zyR-@WSVhNfiefTjzUkW9eXM}}qQ&iJk9&_6g*3y~5>zqdJR}l7@>~g$4QUSP2pI_R zL8d?!LITZjm@;o}h7-h@o8cUBA+N&LY%o7@XZX_*5+miC(hgqF~pgh!A_jH z85~t_(Crf`qPZE8tLojpa$lNA%Vywr?R0AWidn3qUR8L`DS?l(70MxB8&}MxH&)i5 z^T{2uSbLzhJQUw(7wJ|Z9xZLlVW>r4t?L1n;b<9}HjRJN55R(V&{iKn8}1DKK>bMk zQ1^JqY{+uRCdgjM8HmlMDlSMZhzHUE63ErVRC040K2Dsu4SNt5(uRGBG`HbE;>>OM zG;!uO96_A94PPM6+=f2l%x(C}joNS=MKrhJL~6q+dK>z(Q)E}V`U|V&m{&E`b3fXT zyadsHzHBY;5L;>!?Z;;~uC0B2h?Ups9cK10P`u=Ar`F{#JeTEk>t)lKwrp+nVfKjE z_XLu>u(miHA9E8cf(iK6u??r`q+f6qo?j3Bx)X8aabKJt6RHwecPUyBTzBy=Ku3iN zU7>}mFX*|nXD!qMMZ$7>p0xAW z;E&@+iue~IVq;uSP#bp?F2WIQ@lohm!Al{wVjzAf-UpciSqNDJ*#S8Oxd^yNHdiEEQW<9$`oLSGpsB4?`ERs00p2ZSp*0XZNnf1(B zjYw<=2TD?jIJ2ImR?}@oMnBzFOq6=I^6amyG;`Fimg-xGRyWV5CTitQh%*!!THXov z?A=Xn6a@_{27Cv5938tuz~!4Zl1wR0!g$BwoXm0WN!SR?9+Q*2PYj0%PI_>m9scT>#SGI3_T7<(hVc!MIE^($&booY&q*T|v33DTrs;+n5=qL5g z+c;GY5}%xB@s7mmslEPa9Rj095?gGn+Y;oh5pCRUFftVvMumNf9WKrzC4tVBjT!w@^v;87*SfPUHacdB3 zO(2oFf3mC!k5Sn_#idX6SF-$#Qx)f@Ja1aEHtkPVk98AeujuF+E|KQWwU9V- z=lUmc=FYX0ICJM(Nu0TJts&0bxz<&u9%mjIH&R4%=h}kK^)s6lMSW|T-nZa@mC-y` zSg9vXpDvcYp?Fcy{W&1?o!0pdqCvKzBa*i!Rcsj=1o|RINO|uq)6y1SVNUN+N`@Ae z0?CL0?v9dKWOvRi-rVxBikHj-u3ku4wJuk2X#6at zV|=1W49Ls0aaUPEsR8(m(g1D$RhC0=?KPI(_d;mB$o^ug7ujE$DvGCZ8Z-_EwqD-= z%On22g1R-mI&7<<*RL@<5wjVQ4)r_Df0b1*J=bBU_*7v1x!MI}seT2zbdx&vWTb^! z1aVF*DoraWVSOCwbT5^klHFVaU$su?6ZNLkwlOtbd&9}fztu!FXRvz1(CC4Rp%#%9 zlZJ}Pcx%3z-^fF;NxcHG1L}oAwJpU7DVOGEY7QHqwPR}IrjJmJkldpZaS}slmwcvS zVLFHAFIb$eO?&)}WcuAK8Ih?us+!Yu(BDXH*v(Q)mrJ0&FtxPSAx!O8&ffz1G!q(G zQc~=Q@Y_B2Yum!q%pf0uQ{t!w@NqUXFXBhuAbw;Z{sf!)F&n-zuaw#|qQZ$>|64zt+Ged`^1cHhTcMaUK zQmd_&>Kr$|Jo+6@N_Tsqq-0+Cm7lz(jtQF?cZZ-75IKKlKx*M{85!DTcl8eP9n9OA*e*7&DipO3LZzrSN`t@qn%esu6TE4#m=I&Ip9>1tPXYZWcy z9kq^{lCiSWJL+f~fcE1o5cg%QEInKO(V37Zx;|s&p!e0irBo!?`a`vwdL>g^ z{GnP^&Cb$(_)yJIH)U!iA`HITM+kS$)Y^Wewx~1@WyhpbiDZwkI#{lJ5+f070Q09T zsjYp27!7R{<7d=zBzxHQJ9{`;#LiY?vgr~Q8gZ!uE_I+w5p6TI%zvsbXc7ojLxd zN?PI(wT;ly{zue2D24XH5yTTcu^uW!R16-09;xjS*HPbzN7Xh>*POzVH!7|iuD^-v zXHdbS1Bvi^2v2!SQFc&xDZ;(}rMJ4cz8c{*+M=UsmUq|7iXwiGQ_x{yit>>QE9i7v zBEs=8sxp$o^$^}#8SmIrxCO#jTH$CEh3`jr*hNLzP2qM3XFtW1LJIdpxMBZbctn_z zt_)j%j!zkQ4H5ja6vc-gCo=Rd!oA+sou845QQNaS$LU?>eumJZU>|2XWQTzuG-nA?kzZ1euW(C9jY|10b`o2s- zA!P=iM}*yY38@2x-$b}{1YY5z@GOKYKZ19ADEx1Pd!=E(pzzlSH}8*3Xm9+gR#X>O z)IRtXZD0DDqD-PFDX5Dp9ke~as+sEYbS?V0>aIIu0bYy8kzP?puj6{@U$C`C@il}y zmJ8Owe1w&3?J?X}ZtE~?y-_^;z>^YRK^u2m&GZ&F4wkV1j#S5lV4ZeDcn#hZGL+&) zgxii};x1?nd|!v^Rw^ z+85#06R{se4}KQm@l~|VC)CWe))><~6mK2)<>%13D7+QnGu5@kld8Myu3FezBK{Qk zCEEQb)#P&PQQ!55t{#bBcqy$te^SkCcLloUBYp_@@tuOjd=cR@=W(Wxu1`R?7m97f zpN8<2D<~daUySg=_1Yz5qfX`5u;oS7a~%BEw4hEiG0@J$b}L=CBfLYq|CE{@I~Lj| zYNj5jV(qz8YF65)lHe02f==0@C@0}Qh-eECp1Mxkd`fkv4LO1hTWE~n_k-VBIapzT z>G7gZqk>ACDzYk^RKM2fw3?+({Y>kB8Wm!U{pHlsiVv6L)8PbB0jD5b?O7#YE#@M; z<0Ish+OtT6bAuK5Bf_oAYRB=|W*7ScQ@h5aV~kt~C8pA*BD@NHG=-k?4&oVuS~)dV z!ONRUHeOEqP0j4?>Ke3OBf#(7pc~b)7|aS0?f}bT^lkhqqtb9-&=xF4_#^0>VNAY8 zI36DyD5QMtL3p0_<8NxR+GK%t36E1<4Ye9)&@ZoC#kM%LSGUp_y6b9>fp4}d@c0B} zD)w#i!b zS^UMDhc)oGUFG({ev92+r80+UqH3FpaIJfT#{NTu{Rr=+bpMU;kh_9I`v;z(!}2@m$m2dH?>1FGE4=yfE(AG3uY`9 zD;1Npf1gv6y|$LYayJIOrd`k;79hNJU9eqxB7B8m)TaCoM%ZxGgxWukaIOEZsk0A? z>be5>+xJ*SiUyD(T7?xhYBz++MiHEqqGhHGlGIX-grZ^6B(;V{VoA~<1~Mh1v*PGX zqz4-`q@rOM#}YyXEz^)hXDmZnCZ!X{#)y`5455{gkIIMI-^07y{e!vlJNM(=ckj99 zoO|~!`%A4xe2>`}Y+?RYe}4-XzNy=5ddQHi!)9bkc#9TZq)_gQ#>`9p9gZI3;<9R_ z5AKnp!{+y+sw1@n&x~N~$7NucA?Q0VVI$c7>OqI$Q`HWVpIM;a?KnK-X9=qO_u#rW z8Eds9&%yop&p`dp;M}ErPN?3!A1=bV_pADYaMc<;mQxYfe&6?)Y*iqf`z=+w41?d( znpWaixN;bqt@7P)(J>hq!6fC^>yAE&Jlezws(L%%()HpQMfuCSxR0Xbg1ljm6d?DO z%-4(OFUXHz(gJJuDqI^h>9^p%RnkPggr0P*tcg+R$QJ!V>2Uj>Wnk3I@D?4y5vYOM zhrIV3ZL0S;3fIPKANM}I;uR?vV-b$bEcyjTAM!MmtxDA!u^Fck7!Q7L%7~?%N|hfA z7hmNPyPAMR*i|N7V`j!Pq4|2eiji;HtDQ(C91_L(y{dN@UYYAK!j;KC33t4x`_T@U z@b%*(>bV!;O@7(=KNQP&Rs5tIijEMZsQS^-D9%ePTvgr$C$%saial^&D)%)MuY-Hn z%YfZp{%#4oV`k(n#+jC={6CQ2F*8mv#)ohzi!NXUK7(t?52bu0UuU=u`&xAzHe{DS zAiujq`**&P^Q0BNhjshiZVYKq`xzV^gySj$&)*35|B5?Ksz2M{kk|D1?t)jG)q1iY zE`Oc%8S+4{YvI~a9ZQ`2HbyG{niPzi$=(n{H}p>mmQ?A98iiZG&7q4fDy*9cQprM@!)n6rok|0eJ9j$IOB|ZkL~wwG(EXqg9@oFyr&O6SaN~ zkzMc8-J83B>T@(Fz?V z7w(otlV;p=r-SC{HuCUd9Hx35XDmV14RjYnV>`iUxR~K=RC?`#eS36&ymo#*4o21A z0FS`2a%|H4PD0WuJyK<4ZF-b2R5kS*c!*6bU8-<(Fx6^m+mJUGYE`)a`-smDt4I99 z&Ob=ERXaCqW@mod&c{D|1D}4CSyrZF6fR#u+^)*c=AeBgd%aH8-hzb~fuf+mz)OL{ zkBNT@mFQb7O;ZFKmowyw&8}@SK^oP;{~M@M4SY%Y))?{JWlpA8BLT-5$Phb~S zIS(9tj=NN5j&h$+5fU#;8X8N0l0jPbkvul8L*7*!4lnam=oo=9n>u z-{L=Dx}1`8kJz?|Wfka}7kLN1AfP7e;6i?YFJEYU9I;DKmY^Q4fWr%PT(BDMK2_tl;wpL=G`D)-&kzrO zWEhLt!r04X2fT70CRgR}hI^fQ5AlXwo;_l~Y8;2%Z4QGom+AWN!LC036t}_Q*RUk2 zz3wIGXv0>$&OWC=`B$>mVP)iHzN-U-Wqh)f&t?`^Jl*hP@P(lFTMK7}>h=6XxcMjn zj4HnsZa*ts4l8a$dC<(hfjsG?exbMEH2m`l)xlG6|C8GObi#)>ipR9#p2=Ut#S~R; z6#39he-;=I#bc+IFth5#6X5JD?H9SVX@oNH&#L(-{C1x}kQIZg(?_a$wy#*lxJC1pW@yueNdRipM zPH%oJJMFZ8w)kgRuP1CqOVX4gzmv!!cIktnHk)(AGn?o2{8UHe|3=P{cmeVa+4H!a z=XmgfUN;KRt_N&A+~?Pd`2^gEq3Bivvdu0ZE9Ys)yc{D}NWInUsurvEE|Pzth})ei zp!*yy3<{XPhIiZ+PpFlgmxW2JRPBEEVJ7@KN~U-f+(V2Qa3a}o$4(i|5 zcKu&SQz!~k_lm>FR{as=)j@|l=iovX$|aS532rFIYANo8OBuI9)sKI{RpH!nR6GfH ztkVj)U>RfAtjEW_3=7u&JQ1;K&`W`;TT(EG3F)lYitz&S{a=b7c|`~soUI;Ei@bgh zgQ)m@xZxeWQe2^iaVN?#bJqGX`AHw?ZSLRTw3RyW>w}MY91p?Dvx*4@+b%3<<3`8Pu7sD12F2XCIxChQD6 z_20HDVb;7y%;pIhSZ&44vd>d;BV=Bxl`zNtfS^3WG+vPOR4abg%_eR#_}jLpT8kWx zEQw6D=1cV&D}0XqK|xOqsvz&Ku@W6Ua&e8doa8?w&Rb;EO3Eq6m6UXA{{I2$yqX9A delta 54495 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 VPSPnqbdoFboRb`pH}mb3{{v>#>g50c diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index 02dc7f6de..43e9787f5 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -8,5 +8,5 @@ #define APIJUNGFRAU 0x200810 #define APIMOENCH 0x200810 #define APIEIGER 0x200831 -#define APIGOTTHARD2 0x200902 #define APIMYTHEN3 0x200903 +#define APIGOTTHARD2 0x200907